Bug 23867 – ImportC: undefined identifier `__builtin_isnan`

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P1
Component
dmd
Product
D
Version
D2
Platform
x86_64
OS
Linux
Creation time
2023-04-29T14:17:00Z
Last change time
2023-04-30T23:00:07Z
Keywords
ImportC, pull
Assigned to
No Owner
Creator
Lance Bachmeier
See also
https://issues.dlang.org/show_bug.cgi?id=23869

Comments

Comment #0 by lance — 2023-04-29T14:17:00Z
The failing C code is if (ISNAN(df) || df <= 0.0) ML_WARN_return_NAN; The ISNAN macro is defined with these lines /* If isnan is a macro, as C99 specifies, the C++ math header will undefine it. This happens on macOS */ # ifdef __cplusplus int R_isnancpp(double); /* in mlutils.c */ # define ISNAN(x) R_isnancpp(x) # else # define ISNAN(x) (isnan(x)!=0) # endif Looking at the gcc preprocessor output, this if (ISNAN(df) || df <= 0.0) expands to if ((__builtin_isnan (Rf_df)!=0) || Rf_df <= 0.0)
Comment #1 by lance — 2023-04-29T21:01:00Z
Adding #define __builtin_isnan isnan to the .c file fixes this.
Comment #2 by bugzilla — 2023-04-30T05:20:20Z
Comment #3 by dlang-bot — 2023-04-30T21:15:13Z
@bachmeil updated dlang/dmd pull request #15147 "Fix 23867 and 23869" fixing this issue: - Fix issues 23867 and 23869 - define __builtin_isfinite and __builtin_isnan These GNU C builtins are referenced by macros such as: * ISNAN * R_FINITE https://github.com/dlang/dmd/pull/15147
Comment #4 by dlang-bot — 2023-04-30T23:00:07Z
dlang/dmd pull request #15147 "Fix 23867 and 23869" was merged into master: - 812fd8a5fa5fb04c5d48e10a57905d5a39f39f13 by Lance Bachmeier: Fix issues 23867 and 23869 - define __builtin_isfinite and __builtin_isnan These GNU C builtins are referenced by macros such as: * ISNAN * R_FINITE https://github.com/dlang/dmd/pull/15147