aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMikael Pettersson <mikpelinux@gmail.com>2024-09-29 10:15:55 -0600
committerJeff Law <jlaw@ventanamicro.com>2024-09-29 10:15:55 -0600
commit0cd24b06d130d99bd86e5e03a01c38047413a92e (patch)
tree1d9a963a055ff2059fc7e18ee968a99d2dc84043 /gcc
parenta0f1f504b2c49a3695b91d3323d2e2419ef970db (diff)
downloadgcc-0cd24b06d130d99bd86e5e03a01c38047413a92e.zip
gcc-0cd24b06d130d99bd86e5e03a01c38047413a92e.tar.gz
gcc-0cd24b06d130d99bd86e5e03a01c38047413a92e.tar.bz2
[PATCH] [PATCH] Avoid integer overflow in gcc.dg/cpp/charconst-3.c (PR testsuite/116806)
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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/gcc.dg/cpp/charconst-3.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/gcc/testsuite/gcc.dg/cpp/charconst-3.c b/gcc/testsuite/gcc.dg/cpp/charconst-3.c
index 7c19663..7b2df8b 100644
--- a/gcc/testsuite/gcc.dg/cpp/charconst-3.c
+++ b/gcc/testsuite/gcc.dg/cpp/charconst-3.c
@@ -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'))