1  /* PR tree-optimization/56064 */
       2  /* { dg-do run } */
       3  /* { dg-options "-std=gnu99 -O2" } */
       4  
       5  extern void abort (void);
       6  extern void exit (int);
       7  
       8  void test_k (void)
       9  {
      10    _Accum a;
      11    __INT32_TYPE__ i = -__INT32_MAX__;
      12    
      13    if (sizeof (a) != sizeof (i))
      14      return;
      15  
      16    __builtin_memcpy (&a, &i, sizeof (a));
      17  
      18    if (a >= 0k)
      19      abort();
      20  }
      21  
      22  void test_0k (void)
      23  {
      24    _Accum a;
      25    __INT32_TYPE__ i = 0;
      26    
      27    if (sizeof (a) != sizeof (i))
      28      return;
      29  
      30    __builtin_memcpy (&a, &i, sizeof (a));
      31  
      32    if (a != 0k)
      33      abort();
      34  }
      35  
      36  
      37  void test_hr (void)
      38  {
      39    short _Fract a;
      40    __INT8_TYPE__ i = -__INT8_MAX__;
      41  
      42    if (sizeof (a) != sizeof (i))
      43      return;
      44  
      45    __builtin_memcpy (&a, &i, sizeof (a));
      46  
      47    if (a >= 0hr)
      48      abort();
      49  }
      50  
      51  void test_0hr (void)
      52  {
      53    short _Fract a;
      54    __INT8_TYPE__ i = 0;
      55  
      56    if (sizeof (a) != sizeof (i))
      57      return;
      58  
      59    __builtin_memcpy (&a, &i, sizeof (a));
      60  
      61    if (a != 0hr)
      62      abort();
      63  }
      64  
      65  
      66  void test_si (void)
      67  {
      68    _Accum a = __ACCUM_MIN__;
      69    __INT32_TYPE__ i;
      70  
      71    if (sizeof (a) != sizeof (i))
      72      return;
      73  
      74    __builtin_memcpy (&i, &a, sizeof (i));
      75  
      76    if (i >= 0)
      77      abort();
      78  }
      79  
      80  void test_0si (void)
      81  {
      82    _Accum a = 0;
      83    __INT32_TYPE__ i;
      84  
      85    if (sizeof (a) != sizeof (i))
      86      return;
      87  
      88    __builtin_memcpy (&i, &a, sizeof (i));
      89  
      90    if (i != 0)
      91      abort();
      92  }
      93  
      94  
      95  void test_qi (void)
      96  {
      97    short _Fract a = __SFRACT_MIN__;
      98    __INT8_TYPE__ i;
      99  
     100    if (sizeof (a) != sizeof (i))
     101      return;
     102  
     103    __builtin_memcpy (&i, &a, sizeof (i));
     104  
     105    if (i >= 0)
     106      abort();
     107  }
     108  
     109  void test_0qi (void)
     110  {
     111    short _Fract a = 0hr;
     112    __INT8_TYPE__ i;
     113  
     114    if (sizeof (a) != sizeof (i))
     115      return;
     116  
     117    __builtin_memcpy (&i, &a, sizeof (i));
     118  
     119    if (i != 0)
     120      abort();
     121  }
     122  
     123  
     124  int main (void)
     125  {
     126    test_hr();
     127    test_k();
     128    test_qi();
     129    test_si();
     130  
     131    test_0hr();
     132    test_0k();
     133    test_0qi();
     134    test_0si();
     135  
     136    exit (0);
     137  
     138    return 0;
     139  }