summaryrefslogtreecommitdiff
path: root/sv.c
diff options
context:
space:
mode:
authorJarkko Hietaniemi <jhi@iki.fi>2015-11-30 07:27:47 -0500
committerJarkko Hietaniemi <jhi@iki.fi>2015-12-01 09:07:14 -0500
commit50006c82290de7fc1fd3bbb5e4d893723659dd82 (patch)
tree3462cd020c71aa554644d9040dd2a3ecb51b7a59 /sv.c
parent7d9942e329fa0ad09f22c706668103b6a0b73c7c (diff)
downloadperl-50006c82290de7fc1fd3bbb5e4d893723659dd82.tar.gz
hexfp: signbit() works on NVs (nv), not on long doubles (fv).
The nv value should be a valid version of the fv value. Why the fv is a long double, not a NV, is a long (haha) story. Short version: the printf code expects to be able to work with long doubles, if long doubles are available, even without -Duselongdouble. The problem became obvious in VMS which has true 128-bit long (little-endian) doubles, and trying the signbit() on those did not work.
Diffstat (limited to 'sv.c')
-rw-r--r--sv.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/sv.c b/sv.c
index 79b8a50b8a..f36a724800 100644
--- a/sv.c
+++ b/sv.c
@@ -12366,7 +12366,7 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
#endif
if (fv < 0
- || Perl_signbit(fv)
+ || Perl_signbit(nv)
)
*p++ = '-';
else if (plus)