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