summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsebres <sebres@users.sourceforge.net>2024-08-12 13:06:21 (GMT)
committersebres <sebres@users.sourceforge.net>2024-08-12 13:06:21 (GMT)
commit2c28b11277b488c5a421ebc815cf60e23299b38e (patch)
tree2267b36616a1bc7996b18f75f6c175b30539b69f
parent05fad8df8972def0af73c6f528308220660ba67b (diff)
downloadtcl-2c28b11277b488c5a421ebc815cf60e23299b38e.zip
tcl-2c28b11277b488c5a421ebc815cf60e23299b38e.tar.gz
tcl-2c28b11277b488c5a421ebc815cf60e23299b38e.tar.bz2
incr.test: added coverage for bug [7179c6724cd38271] (broken compile of incr by wide2int overflow of immutable constant)
-rw-r--r--tests/incr.test58
1 files changed, 57 insertions, 1 deletions
diff --git a/tests/incr.test b/tests/incr.test
index 253cb1d..ae70fa2 100644
--- a/tests/incr.test
+++ b/tests/incr.test
@@ -236,7 +236,63 @@ test incr-1.30 {TclCompileIncrCmd: array var, braced (no subs)} {
set array(\$foo) 4
incr {array($foo)}
} 5
-
+
+test incr-1.31 {no overflow in TclCompileIncrCmd and Tcl_IncrObjCmd, bug [7179c6724cd38271]} {
+ # TclCompileIncrCmd: compiled incr TEBC with immutable constant offs (INST_INCR_*_IMM instructions):
+ lappend res [set i 0; incr i 0x7FFFFFFF]
+ lappend res [set i 0; incr i 0xFFFFFF80]
+ lappend res [set i 0; incr i 0xFFFFFF81]
+ lappend res [set i 0; incr i 0xFFFFFFFF]
+ lappend res [set i 0; incr i 0x10000007F]
+ lappend res [set i 0; incr i 0x100000080]
+ lappend res [set i 0; incr i 0x7FFFFFFFFFFFFFFF]
+ lappend res [set i 0; incr i 0xFFFFFFFFFFFFFF80]
+ lappend res [set i 0; incr i 0xFFFFFFFFFFFFFF81]
+ lappend res [set i 0; incr i 0xFFFFFFFFFFFFFFFF]
+ lappend res [set i 0; incr i 0x1000000000000007F]
+ lappend res [set i 0; incr i 0x10000000000000080]
+ # TclCompileIncrCmd: compiled incr TEBC with dynamic offs (INST_INCR_* instructions without _IMM):
+ lappend res [set i 0; incr i [set x 0x7FFFFFFF]]
+ lappend res [set i 0; incr i [set x 0xFFFFFF80]]
+ lappend res [set i 0; incr i [set x 0xFFFFFF81]]
+ lappend res [set i 0; incr i [set x 0xFFFFFFFF]]
+ lappend res [set i 0; incr i [set x 0x10000007F]]
+ lappend res [set i 0; incr i [set x 0x100000080]]
+ lappend res [set i 0; incr i [set x 0x7FFFFFFFFFFFFFFF]]
+ lappend res [set i 0; incr i [set x 0xFFFFFFFFFFFFFF80]]
+ lappend res [set i 0; incr i [set x 0xFFFFFFFFFFFFFF81]]
+ lappend res [set i 0; incr i [set x 0xFFFFFFFFFFFFFFFF]]
+ lappend res [set i 0; incr i [set x 0x1000000000000007F]]
+ lappend res [set i 0; incr i [set x 0x10000000000000080]]
+ # Tcl_IncrObjCmd: non-compiled incr command (or NRE):
+ set cmd incr
+ lappend res [set i 0; $cmd i 0x7FFFFFFF]
+ lappend res [set i 0; $cmd i 0xFFFFFF80]
+ lappend res [set i 0; $cmd i 0xFFFFFF81]
+ lappend res [set i 0; $cmd i 0xFFFFFFFF]
+ lappend res [set i 0; $cmd i 0x10000007F]
+ lappend res [set i 0; $cmd i 0x100000080]
+ lappend res [set i 0; $cmd i 0x7FFFFFFFFFFFFFFF]
+ lappend res [set i 0; $cmd i 0xFFFFFFFFFFFFFF80]
+ lappend res [set i 0; $cmd i 0xFFFFFFFFFFFFFF81]
+ lappend res [set i 0; $cmd i 0xFFFFFFFFFFFFFFFF]
+ lappend res [set i 0; $cmd i 0x1000000000000007F]
+ lappend res [set i 0; $cmd i 0x10000000000000080]
+} [lrepeat 3 \
+ [expr 0x7FFFFFFF] \
+ [expr 0xFFFFFF80] \
+ [expr 0xFFFFFF81] \
+ [expr 0xFFFFFFFF] \
+ [expr 0x10000007F] \
+ [expr 0x100000080] \
+ [expr 0x7FFFFFFFFFFFFFFF] \
+ [expr 0xFFFFFFFFFFFFFF80] \
+ [expr 0xFFFFFFFFFFFFFF81] \
+ [expr 0xFFFFFFFFFFFFFFFF] \
+ [expr 0x1000000000000007F] \
+ [expr 0x10000000000000080] \
+]
+
# Check "incr" and computed command names.
test incr-2.0 {incr and computed command names} {