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