/* { dg-do run } */ /* { dg-options "-O0" } */ #include #define ABS(x) (((x) >= 0) ? (x) : -(x)) #define DEF_TEST(TYPE) \ void foo_##TYPE (signed TYPE x, unsigned TYPE y){ \ TYPE t = ABS (x); \ if (t != y) \ __builtin_abort (); \ } \ DEF_TEST (char); DEF_TEST (short); DEF_TEST (int); DEF_TEST (long); int main () { foo_char (SCHAR_MIN + 1, SCHAR_MAX); foo_char (0, 0); foo_char (-1, 1); foo_char (1, 1); foo_char (SCHAR_MAX, SCHAR_MAX); foo_int (-1, 1); foo_int (0, 0); foo_int (INT_MAX, INT_MAX); foo_int (INT_MIN + 1, INT_MAX); foo_short (-1, 1); foo_short (0, 0); foo_short (SHRT_MAX, SHRT_MAX); foo_short (SHRT_MIN + 1, SHRT_MAX); foo_long (-1, 1); foo_long (0, 0); foo_long (LONG_MAX, LONG_MAX); foo_long (LONG_MIN + 1, LONG_MAX); return 0; }