|  | /* { 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; | 
|  | } |