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)
Adding #define __builtin_isnan isnan to the .c file fixes this.
https://github.com/dlang/dmd/pull/15147
@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
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