/* { dg-do run } */ /* { dg-options "-fsanitize=signed-integer-overflow -Wno-unused-variable -fno-sanitize-recover=signed-integer-overflow" } */ #define SCHAR_MAX __SCHAR_MAX__ #define SHRT_MAX __SHRT_MAX__ #define INT_MAX __INT_MAX__ #define INT_MIN (-__INT_MAX__ - 1) void __attribute__((noinline,noclone)) check (int i, int j) { if (i != j) __builtin_abort (); } int main (void) { /* Test integer promotion. */ #if __SCHAR_MAX__ == 127 volatile signed char a = -2; volatile signed char b = SCHAR_MAX; volatile signed char c = a * b; check (c, 2); #endif #if __SHRT_MAX__ == 32767 volatile short d = SHRT_MAX; volatile short e = 2; volatile short f = d * e; check (f, -2); #endif #if __INT_MAX__ == 2147483647 volatile int m = INT_MAX; volatile int n = 1; volatile int o = m * n; check (o, INT_MAX); m = INT_MIN; o = m * n; check (o, INT_MIN); #endif return 0; }