summaryrefslogtreecommitdiff
path: root/pp_pack.c
diff options
context:
space:
mode:
authorJarkko Hietaniemi <jhi@iki.fi>2014-09-25 10:47:14 -0400
committerJarkko Hietaniemi <jhi@iki.fi>2014-09-25 12:05:16 -0400
commit84441873284d94d2b1e6a76fda24795fe5cf45f7 (patch)
treede6d01dc699d7093715c623ea41914a43ac7d63d /pp_pack.c
parent8fad3ae2f1dcc9a9fcb99cbb38081dc1434f6864 (diff)
downloadperl-84441873284d94d2b1e6a76fda24795fe5cf45f7.tar.gz
infnan: in pack, first test for the unlikely infnan-ness.
Also make the type I32, not char.
Diffstat (limited to 'pp_pack.c')
-rw-r--r--pp_pack.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/pp_pack.c b/pp_pack.c
index aa3e790db3..7928315eb1 100644
--- a/pp_pack.c
+++ b/pp_pack.c
@@ -2167,13 +2167,16 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist )
fromstr = PEEKFROM;
if (SvNOK(fromstr)) {
const NV nv = SvNV(fromstr);
- const char c = TYPE_NO_MODIFIERS(datumtype);
- if (Perl_isinfnan(nv) && !strchr("fdFD", c)) {
- if (c == 'w')
- Perl_croak(aTHX_ "Cannot compress %"NVgf" in pack", nv);
- else
- Perl_croak(aTHX_ "Cannot pack %"NVgf" with '%c'",
- nv, (int) c);
+ if (UNLIKELY(Perl_isinfnan(nv))) {
+ const I32 c = TYPE_NO_MODIFIERS(datumtype);
+ if (!strchr("fdFD", (char)c)) { /* floats are okay */
+ if (c == 'w')
+ Perl_croak(aTHX_
+ "Cannot compress %"NVgf" in pack", nv);
+ else
+ Perl_croak(aTHX_ "Cannot pack %"NVgf" with '%c'",
+ nv, (int) c);
+ }
}
}