]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[PATCH] [PATCH] Avoid integer overflow in gcc.dg/cpp/charconst-3.c (PR testsuite...
authorMikael Pettersson <mikpelinux@gmail.com>
Sun, 29 Sep 2024 16:15:55 +0000 (10:15 -0600)
committerJeff Law <jlaw@ventanamicro.com>
Sun, 29 Sep 2024 16:15:55 +0000 (10:15 -0600)
The intermediate expression (unsigned char) '\234' * scale overflows
int on int16 targets, causing the test case to fail there.  Fixed by
performing the arithmetic in unsigned type, as suggested by Andrew Pinski.

Regression tested on x86_64-pc-linux-gnu, and on an out-of-tree 16-bit
target with simulator.  Manually checked the generated code for pdp11
and xstormy16.

Ok for trunk? (I don't have commit rights so I'd need help committing it.)

gcc/testsuite/

PR testsuite/116806
* gcc.dg/cpp/charconst-3.c: Perform arithmetic in unsigned
type to avoid integer overflow.

gcc/testsuite/gcc.dg/cpp/charconst-3.c

index 7c1966391315b9b7d64f3adf59df4f2c47d6d599..7b2df8b2998e25802137dbe1a3342df366c2cb52 100644 (file)
@@ -20,7 +20,7 @@ int main ()
   if ('ab' != (int) ((unsigned char) 'a' * scale + (unsigned char) 'b'))
     abort ();
 
-  if ('\234b' != (int) ((unsigned char) '\234' * scale + (unsigned char) 'b'))
+  if ('\234b' != (int) ((unsigned char) '\234' * (unsigned int) scale + (unsigned char) 'b'))
     abort ();
 
   if ('b\234' != (int) ((unsigned char) 'b' * scale + (unsigned char) '\234'))