Commit fe07fe725c for perl
commit fe07fe725ce32d0f0bd23672b20f87b0a57e2e50
Author: Tony Cook <tony@develop-help.com>
Date: Thu Oct 15 15:10:06 2026 +1100
perl.h: don't disable USE_LONG_DOUBLE when type NV is long double
This would result in calls to modf() (not modfl()) with a long double
as the second parameter:
% make lib/auto/POSIX/POSIX.bundle
cc -c -fno-common -DPERL_DARWIN -DNO_THREAD_SAFE_QUERYLOCALE -DNO_POSIX_2008_LOCALE -DHAS_BROKEN_LANGINFO_CODESET -DNO_LOCALE_COLLATE -fno-strict-aliasing -pipe -fstack-protector-strong -Wall -Werror=pointer-arith -Werror=vla -Wextra -Wno-long-long -Wno-declaration-after-statement -Wc++-compat -Wno-c++-keyword -Wwrite-strings -O3 -DVERSION=\"2.27\" -DXS_VERSION=\"2.27\" "-I../.." POSIX.c
POSIX.xs:2692:39: warning: incompatible pointer types passing 'NV *'
(aka 'long double *') to parameter of type 'double *'
[-Wincompatible-pointer-types]
2692 | PUSHs(sv_2mortal(newSVnv(Perl_modf(x,&intvar)))); /* C89 math */
| ^~~~~~~
../../perl.h:3016:34: note: expanded from macro 'Perl_modf'
3016 | # define Perl_modf(x,y) modf(x,y)
| ^
../../embed.h:465:68: note: expanded from macro 'newSVnv'
465 | # define newSVnv(a) Perl_newSVnv(aTHX_ a)
| ^
../../embed.h:684:71: note: expanded from macro 'sv_2mortal'
684 | # define sv_2mortal(a) Perl_sv_2mortal(aTHX_ a)
| ^
../../pp.h:548:30: note: expanded from macro 'PUSHs'
548 | # define PUSHs(s) (*++sp = (s))
| ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/math.h:427:36: note:
passing argument to parameter here
427 | extern double modf(double, double *);
| ^
1 warning generated.
If we want to force use of double when long double is the same size as
double, it should be done by rejecting or disabling uselongdouble in
Configure, so that types don't get messed up during compilation.
diff --git a/perl.h b/perl.h
index 25444ec178..b03c991078 100644
--- a/perl.h
+++ b/perl.h
@@ -2799,7 +2799,6 @@ You probably want to be using L<C</INT2PTR>> instead.
#ifdef USE_LONG_DOUBLE
# if LONG_DOUBLESIZE == DOUBLESIZE
# define LONG_DOUBLE_EQUALS_DOUBLE
-# undef USE_LONG_DOUBLE /* Ouch! */
# endif
#endif