From: Mikael Pettersson Date: Sun, 29 Sep 2024 16:15:55 +0000 (-0600) Subject: [PATCH] [PATCH] Avoid integer overflow in gcc.dg/cpp/charconst-3.c (PR testsuite... X-Git-Tag: basepoints/gcc-16~5606 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0cd24b06d130d99bd86e5e03a01c38047413a92e;p=thirdparty%2Fgcc.git [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. --- diff --git a/gcc/testsuite/gcc.dg/cpp/charconst-3.c b/gcc/testsuite/gcc.dg/cpp/charconst-3.c index 7c196639131..7b2df8b2998 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'))