diff options
author | Mikael Pettersson <mikpelinux@gmail.com> | 2024-09-29 10:15:55 -0600 |
---|---|---|
committer | Jeff Law <jlaw@ventanamicro.com> | 2024-09-29 10:15:55 -0600 |
commit | 0cd24b06d130d99bd86e5e03a01c38047413a92e (patch) | |
tree | 1d9a963a055ff2059fc7e18ee968a99d2dc84043 /gcc | |
parent | a0f1f504b2c49a3695b91d3323d2e2419ef970db (diff) | |
download | gcc-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.c | 2 |
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')) |