summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2023-08-23 16:13:58 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2023-08-23 16:13:58 (GMT)
commit813e29b286e73dc7e4d3a40eddb9aff2988689ad (patch)
tree88f9853737af8a93485ae7d1aedaafd9e2dce8ae
parentea37e7d256f526f2b60023754da3985b7e9842cc (diff)
downloadtcl-813e29b286e73dc7e4d3a40eddb9aff2988689ad.zip
tcl-813e29b286e73dc7e4d3a40eddb9aff2988689ad.tar.gz
tcl-813e29b286e73dc7e4d3a40eddb9aff2988689ad.tar.bz2
Fix [84a5355235] (not visible in 8.6, but meant to be forwared to 8.7)
-rw-r--r--generic/tclExecute.c16
-rw-r--r--tests/expr.test1
2 files changed, 9 insertions, 8 deletions
diff --git a/generic/tclExecute.c b/generic/tclExecute.c
index 44ace68..3373079 100644
--- a/generic/tclExecute.c
+++ b/generic/tclExecute.c
@@ -4,12 +4,12 @@
* This file contains procedures that execute byte-compiled Tcl commands.
*
* Copyright (c) 1996-1997 Sun Microsystems, Inc.
- * Copyright (c) 1998-2000 by Scriptics Corporation.
- * Copyright (c) 2001 by Kevin B. Kenny. All rights reserved.
- * Copyright (c) 2002-2010 by Miguel Sofer.
- * Copyright (c) 2005-2007 by Donal K. Fellows.
+ * Copyright (c) 1998-2000 Scriptics Corporation.
+ * Copyright (c) 2001 Kevin B. Kenny. All rights reserved.
+ * Copyright (c) 2002-2010 Miguel Sofer.
+ * Copyright (c) 2005-2007 Donal K. Fellows.
* Copyright (c) 2007 Daniel A. Steffen <das@users.sourceforge.net>
- * Copyright (c) 2006-2008 by Joe Mistachkin. All rights reserved.
+ * Copyright (c) 2006-2008 Joe Mistachkin. All rights reserved.
*
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
@@ -6314,7 +6314,7 @@ TEBCresume(
* Quickly force large right shifts to 0 or -1.
*/
- if (l2 >= (long)(CHAR_BIT*sizeof(long))) {
+ if (l2 >= (long)(CHAR_BIT*sizeof(l1))) {
/*
* We assume that INT_MAX is much larger than the
* number of bits in a long. This is a pretty safe
@@ -6382,9 +6382,9 @@ TEBCresume(
* Handle shifts within the native long range.
*/
- if (((size_t) shift < CHAR_BIT*sizeof(long))
+ if (((size_t) shift < CHAR_BIT*sizeof(l1))
&& !((l1>0 ? l1 : ~l1) &
- -(1UL<<(CHAR_BIT*sizeof(long) - 1 - shift)))) {
+ -(1UL<<(CHAR_BIT*sizeof(l1) - 1 - shift)))) {
lResult = (unsigned long)l1 << shift;
goto longResultOfArithmetic;
}
diff --git a/tests/expr.test b/tests/expr.test
index 01f832e..2a0c7ed 100644
--- a/tests/expr.test
+++ b/tests/expr.test
@@ -1451,6 +1451,7 @@ test expr-24.8 {expr edge cases; shifting} {expr wide(10<<63)} 0
test expr-24.9 {expr edge cases; shifting} {expr 5>>32} 0
test expr-24.10 {INST_LSHIFT: Bug 1567222} {expr 500000000000000<<28} 134217728000000000000000
+test expr-24.11 {INST_LSHIFT: Bug 84a5355235} {expr -549755813888>>32} -128
# List membership tests
test expr-25.1 {'in' operator} {expr {"a" in "a b c"}} 1