1 /* { dg-do run } */
2 /* { dg-prune-output "use of enum values across objects may fail" } */
3 /* { dg-additional-options "-fshort-enums" } */
4
5 enum e1 { c1 = -__INT_MAX__ };
6
7 __attribute__((noinline,noclone))
f(enum e1 * p,signed int * q)8 int f(enum e1 *p, signed int *q)
9 {
10 *p = c1;
11 *q = 2;
12 return *p;
13 }
14
15 enum e2 { c2 = __SHRT_MAX__ + 1};
16
17 __attribute__((noinline,noclone))
g(enum e2 * p,unsigned short * q)18 int g(enum e2 *p, unsigned short *q)
19 {
20 *p = c2;
21 *q = 2;
22 return *p;
23 }
24
25 enum e3 { c3 = __SCHAR_MAX__ };
26
27 __attribute__((noinline,noclone))
h(enum e3 * p,unsigned char * q)28 int h(enum e3 *p, unsigned char *q)
29 {
30 *p = c3;
31 *q = 2;
32 return *p;
33 }
34
main()35 int main()
36 {
37 signed x;
38 unsigned short y;
39 unsigned char z;
40
41 if (f(&x, &x) != 2)
42 __builtin_abort();
43 if (g(&y, &y) != 2)
44 __builtin_abort();
45 if (h(&z, &z) != 2)
46 __builtin_abort();
47 return 0;
48 }
49