1  /* { dg-do compile } */
       2  /* { dg-options "-std=gnu99" } */
       3  
       4  /* Check if GCC generates warnings when overflows for mul and div.  */
       5  
       6  short _Fract sf0 = __SFRACT_MIN__ * __SFRACT_MIN__; /* { dg-warning "overflow" } */
       7  _Fract f0 = __FRACT_MIN__ * __FRACT_MIN__; /* { dg-warning "overflow" } */
       8  long _Fract lf0 = __LFRACT_MIN__ * __LFRACT_MIN__; /* { dg-warning "overflow" } */
       9  long long _Fract llf0 = __LLFRACT_MIN__ * __LLFRACT_MIN__; /* { dg-warning "overflow" } */
      10  short _Fract sf1 = __SFRACT_MAX__ * __SFRACT_MIN__;
      11  _Fract f1 = __FRACT_MAX__ * __FRACT_MIN__;
      12  long _Fract lf1 = __LFRACT_MAX__ * __LFRACT_MIN__;
      13  long long _Fract llf1 = __LLFRACT_MAX__ * __LLFRACT_MIN__;
      14  short _Fract sf2 = __SFRACT_MIN__ / __SFRACT_MIN__; /* { dg-warning "overflow" } */
      15  _Fract f2 = __FRACT_MIN__ / __FRACT_MIN__; /* { dg-warning "overflow" } */
      16  long _Fract lf2 = __LFRACT_MIN__ / __LFRACT_MIN__; /* { dg-warning "overflow" } */
      17  long long _Fract llf2 = __LLFRACT_MIN__ / __LLFRACT_MIN__; /* { dg-warning "overflow" } */
      18  short _Fract sf3 = __SFRACT_MAX__ / __SFRACT_MIN__;
      19  _Fract f3 = __FRACT_MAX__ / __FRACT_MIN__;
      20  long _Fract lf3 = __LFRACT_MAX__ / __LFRACT_MIN__;
      21  long long _Fract llf3 = __LLFRACT_MAX__ / __LLFRACT_MIN__;
      22  
      23  unsigned short _Fract usf0 = __USFRACT_MIN__ * __USFRACT_MIN__;
      24  unsigned _Fract uf0 = __UFRACT_MIN__ * __UFRACT_MIN__;
      25  unsigned long _Fract ulf0 = __ULFRACT_MIN__ * __ULFRACT_MIN__;
      26  unsigned long long _Fract ullf0 = __ULLFRACT_MIN__ * __ULLFRACT_MIN__;
      27  unsigned short _Fract usf1 = __USFRACT_MAX__ * __USFRACT_MIN__;
      28  unsigned _Fract uf1 = __UFRACT_MAX__ * __UFRACT_MIN__;
      29  unsigned long _Fract ulf1 = __ULFRACT_MAX__ * __ULFRACT_MIN__;
      30  unsigned long long _Fract ullf1 = __ULLFRACT_MAX__ * __ULLFRACT_MIN__;
      31  unsigned short _Fract usf2 = __USFRACT_MAX__ / __USFRACT_MAX__; /* { dg-warning "overflow" } */
      32  unsigned _Fract uf2 = __UFRACT_MAX__ / __UFRACT_MAX__; /* { dg-warning "overflow" } */
      33  unsigned long _Fract ulf2 = __ULFRACT_MAX__ / __ULFRACT_MAX__; /* { dg-warning "overflow" } */
      34  unsigned long long _Fract ullf2 = __ULLFRACT_MAX__ / __ULLFRACT_MAX__; /* { dg-warning "overflow" } */
      35  unsigned short _Fract usf3 = __USFRACT_MIN__ / __USFRACT_MAX__;
      36  unsigned _Fract uf3 = __UFRACT_MIN__ / __UFRACT_MAX__;
      37  unsigned long _Fract ulf3 = __ULFRACT_MIN__ / __ULFRACT_MAX__;
      38  unsigned long long _Fract ullf3 = __ULLFRACT_MIN__ / __ULLFRACT_MAX__;
      39  
      40  short _Accum sa0 = __SACCUM_MIN__ * __SACCUM_MIN__; /* { dg-warning "overflow" } */
      41  _Accum a0 = __ACCUM_MIN__ * __ACCUM_MIN__; /* { dg-warning "overflow" } */
      42  long _Accum la0 = __LACCUM_MIN__ * __LACCUM_MIN__; /* { dg-warning "overflow" } */
      43  long long _Accum lla0 = __LLACCUM_MIN__ * __LLACCUM_MIN__; /* { dg-warning "overflow" } */
      44  short _Accum sa1 = __SACCUM_MAX__ * 0.1hk;
      45  _Accum a1 = __ACCUM_MAX__ * 0.1k;
      46  long _Accum la1 = __LACCUM_MAX__ * 0.1lk;
      47  long long _Accum lla1 = __LLACCUM_MAX__ * 0.1llk;
      48  short _Accum sa2 = __SACCUM_MIN__ / 0.1hk; /* { dg-warning "overflow" } */
      49  _Accum a2 = __ACCUM_MIN__ / 0.1k; /* { dg-warning "overflow" } */
      50  long _Accum la2 = __LACCUM_MIN__ / 0.1lk; /* { dg-warning "overflow" } */
      51  long long _Accum lla2 = __LLACCUM_MIN__ / 0.1llk; /* { dg-warning "overflow" } */
      52  short _Accum sa3 = __SACCUM_MAX__ / __SACCUM_MIN__;
      53  _Accum a3 = __ACCUM_MAX__ / __ACCUM_MIN__;
      54  long _Accum la3 = __LACCUM_MAX__ / __LACCUM_MIN__;
      55  long long _Accum lla3 = __LLACCUM_MAX__ / __LLACCUM_MIN__;
      56  
      57  unsigned short _Accum usa0 = __USACCUM_MIN__ * __USACCUM_MIN__;
      58  unsigned _Accum ua0 = __UACCUM_MIN__ * __UACCUM_MIN__;
      59  unsigned long _Accum ula0 = __ULACCUM_MIN__ * __ULACCUM_MIN__;
      60  unsigned long long _Accum ulla0 = __ULLACCUM_MIN__ * __ULLACCUM_MIN__;
      61  unsigned short _Accum usa1 = __USACCUM_MAX__ * __USACCUM_MAX__; /* { dg-warning "overflow" } */
      62  unsigned _Accum ua1 = __UACCUM_MAX__ * __UACCUM_MAX__; /* { dg-warning "overflow" } */
      63  unsigned long _Accum ula1 = __ULACCUM_MAX__ * __ULACCUM_MAX__; /* { dg-warning "overflow" } */
      64  unsigned long long _Accum ulla1 = __ULLACCUM_MAX__ * __ULLACCUM_MAX__; /* { dg-warning "overflow" } */
      65  unsigned short _Accum usa2 = __USACCUM_MAX__ / 0.5hk; /* { dg-warning "overflow" } */
      66  unsigned _Accum ua2 = __UACCUM_MAX__ / 0.5k; /* { dg-warning "overflow" } */
      67  unsigned long _Accum ula2 = __ULACCUM_MAX__ / 0.5lk; /* { dg-warning "overflow" } */
      68  unsigned long long _Accum ulla2 = __ULLACCUM_MAX__ / 0.5llk; /* { dg-warning "overflow" } */
      69  unsigned short _Accum usa3 = __USACCUM_MIN__ / __USACCUM_MAX__;
      70  unsigned _Accum ua3 = __UACCUM_MIN__ / __UACCUM_MAX__;
      71  unsigned long _Accum ula3 = __ULACCUM_MIN__ / __ULACCUM_MAX__;
      72  unsigned long long _Accum ulla3 = __ULLACCUM_MIN__ / __ULLACCUM_MAX__;