mirror of
https://github.com/Perl/perl5.git
synced 2026-01-26 16:39:36 +00:00
[perl #126635] don't shortcut when SVf_IVisUV is set
Most integers are small, so in most cases it won't be set. The other option would be to always clear it, but that increases the amount of inline code for a rare case.
This commit is contained in:
parent
1a7cb6482f
commit
2efdfb1e6c
4
pp.h
4
pp.h
@ -377,7 +377,7 @@ Does not use C<TARG>. See also C<L</XPUSHu>>, C<L</mPUSHu>> and C<L</PUSHu>>.
|
||||
STMT_START { \
|
||||
IV TARGi_iv = i; \
|
||||
if (LIKELY( \
|
||||
((SvFLAGS(TARG) & (SVTYPEMASK|SVf_THINKFIRST)) == SVt_IV) \
|
||||
((SvFLAGS(TARG) & (SVTYPEMASK|SVf_THINKFIRST|SVf_IVisUV)) == SVt_IV) \
|
||||
& (do_taint ? !TAINT_get : 1))) \
|
||||
{ \
|
||||
/* Cheap SvIOK_only(). \
|
||||
@ -399,7 +399,7 @@ Does not use C<TARG>. See also C<L</XPUSHu>>, C<L</mPUSHu>> and C<L</PUSHu>>.
|
||||
STMT_START { \
|
||||
UV TARGu_uv = u; \
|
||||
if (LIKELY( \
|
||||
((SvFLAGS(TARG) & (SVTYPEMASK|SVf_THINKFIRST)) == SVt_IV) \
|
||||
((SvFLAGS(TARG) & (SVTYPEMASK|SVf_THINKFIRST|SVf_IVisUV)) == SVt_IV) \
|
||||
& (do_taint ? !TAINT_get : 1) \
|
||||
& (TARGu_uv <= (UV)IV_MAX))) \
|
||||
{ \
|
||||
|
||||
14
t/op/int.t
14
t/op/int.t
@ -4,9 +4,10 @@ BEGIN {
|
||||
chdir 't' if -d 't';
|
||||
@INC = '../lib';
|
||||
require './test.pl';
|
||||
require Config;
|
||||
}
|
||||
|
||||
plan 15;
|
||||
plan 17;
|
||||
|
||||
# compile time evaluation
|
||||
|
||||
@ -71,3 +72,14 @@ cmp_ok($y, '==', 4745162525730, 'compile time division, result of about 42 bits'
|
||||
$y = 279964589018079;
|
||||
$y = int($y/59);
|
||||
cmp_ok($y, '==', 4745162525730, 'run time divison, result of about 42 bits');
|
||||
|
||||
SKIP:
|
||||
{ # see #126635
|
||||
my $large;
|
||||
$large = eval "0xffff_ffff" if $Config::Config{ivsize} == 4;
|
||||
$large = eval "0xffff_ffff_ffff_ffff" if $Config::Config{ivsize} == 8;
|
||||
$large or skip "Unusual ivsize", 1;
|
||||
for my $x ($large, -1) {
|
||||
cmp_ok($x, "==", int($x), "check $x == int($x)");
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user