| /* { dg-do run } */ |
| /* { dg-prune-output "use of enum values across objects may fail" } */ |
| /* { dg-additional-options "-fshort-enums" } */ |
| /* { dg-skip-if "" short_eq_int } */ |
| |
| enum e1 { c1 = -__INT_MAX__ }; |
| |
| __attribute__((noinline,noclone)) |
| int f(enum e1 *p, signed int *q) |
| { |
| *p = c1; |
| *q = 2; |
| return *p; |
| } |
| |
| enum e2 { c2 = __SHRT_MAX__ + 1}; |
| |
| __attribute__((noinline,noclone)) |
| int g(enum e2 *p, unsigned short *q) |
| { |
| *p = c2; |
| *q = 2; |
| return *p; |
| } |
| |
| enum e3 { c3 = __SCHAR_MAX__ }; |
| |
| __attribute__((noinline,noclone)) |
| int h(enum e3 *p, unsigned char *q) |
| { |
| *p = c3; |
| *q = 2; |
| return *p; |
| } |
| |
| int main() |
| { |
| signed x; |
| unsigned short y; |
| unsigned char z; |
| |
| if (f(&x, &x) != 2) |
| __builtin_abort(); |
| if (g(&y, &y) != 2) |
| __builtin_abort(); |
| if (h(&z, &z) != 2) |
| __builtin_abort(); |
| return 0; |
| } |