(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.c-torture/
execute/
20020506-1.c
       1  /* Copyright (C) 2002  Free Software Foundation.
       2  
       3     Test that (A & C1) op C2 optimizations behave correctly where C1 is
       4     a constant power of 2, op is == or !=, and C2 is C1 or zero.
       5  
       6     Written by Roger Sayle, 5th May 2002.  */
       7  
       8  #include <limits.h>
       9  
      10  extern void abort (void);
      11  
      12  void test1 (signed char c, int set);
      13  void test2 (unsigned char c, int set);
      14  void test3 (short s, int set);
      15  void test4 (unsigned short s, int set);
      16  void test5 (int i, int set);
      17  void test6 (unsigned int i, int set);
      18  void test7 (long long l, int set);
      19  void test8 (unsigned long long l, int set);
      20  
      21  #ifndef LONG_LONG_MAX
      22  #define LONG_LONG_MAX __LONG_LONG_MAX__
      23  #endif
      24  #ifndef LONG_LONG_MIN
      25  #define LONG_LONG_MIN (-LONG_LONG_MAX-1)
      26  #endif
      27  #ifndef ULONG_LONG_MAX
      28  #define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1)
      29  #endif
      30  
      31  
      32  void
      33  test1 (signed char c, int set)
      34  {
      35    if ((c & (SCHAR_MAX+1)) == 0)
      36      {
      37        if (set) abort ();
      38      }
      39    else
      40      if (!set) abort ();
      41  
      42    if ((c & (SCHAR_MAX+1)) != 0)
      43      {
      44        if (!set) abort ();
      45      }
      46    else
      47      if (set) abort ();
      48  
      49    if ((c & (SCHAR_MAX+1)) == (SCHAR_MAX+1))
      50      {
      51        if (!set) abort ();
      52      }
      53    else
      54      if (set) abort ();
      55  
      56    if ((c & (SCHAR_MAX+1)) != (SCHAR_MAX+1))
      57      {
      58        if (set) abort ();
      59      }
      60    else
      61      if (!set) abort ();
      62  }
      63  
      64  void
      65  test2 (unsigned char c, int set)
      66  {
      67    if ((c & (SCHAR_MAX+1)) == 0)
      68      {
      69        if (set) abort ();
      70      }
      71    else
      72      if (!set) abort ();
      73  
      74    if ((c & (SCHAR_MAX+1)) != 0)
      75      {
      76        if (!set) abort ();
      77      }
      78    else
      79      if (set) abort ();
      80  
      81    if ((c & (SCHAR_MAX+1)) == (SCHAR_MAX+1))
      82      {
      83        if (!set) abort ();
      84      }
      85    else
      86      if (set) abort ();
      87  
      88    if ((c & (SCHAR_MAX+1)) != (SCHAR_MAX+1))
      89      {
      90        if (set) abort ();
      91      }
      92    else
      93      if (!set) abort ();
      94  }
      95  
      96  void
      97  test3 (short s, int set)
      98  {
      99    if ((s & (SHRT_MAX+1)) == 0)
     100      {
     101        if (set) abort ();
     102      }
     103    else
     104      if (!set) abort ();
     105  
     106    if ((s & (SHRT_MAX+1)) != 0)
     107      {
     108        if (!set) abort ();
     109      }
     110    else
     111      if (set) abort ();
     112  
     113    if ((s & (SHRT_MAX+1)) == (SHRT_MAX+1))
     114      {
     115        if (!set) abort ();
     116      }
     117    else
     118      if (set) abort ();
     119  
     120    if ((s & (SHRT_MAX+1)) != (SHRT_MAX+1))
     121      {
     122        if (set) abort ();
     123      }
     124    else
     125      if (!set) abort ();
     126  }
     127  
     128  void
     129  test4 (unsigned short s, int set)
     130  {
     131    if ((s & (SHRT_MAX+1)) == 0)
     132      {
     133        if (set) abort ();
     134      }
     135    else
     136      if (!set) abort ();
     137  
     138    if ((s & (SHRT_MAX+1)) != 0)
     139      {
     140        if (!set) abort ();
     141      }
     142    else
     143      if (set) abort ();
     144  
     145    if ((s & (SHRT_MAX+1)) == (SHRT_MAX+1))
     146      {
     147        if (!set) abort ();
     148      }
     149    else
     150      if (set) abort ();
     151  
     152    if ((s & (SHRT_MAX+1)) != (SHRT_MAX+1))
     153      {
     154        if (set) abort ();
     155      }
     156    else
     157      if (!set) abort ();
     158  }
     159  
     160  void
     161  test5 (int i, int set)
     162  {
     163    if ((i & (INT_MAX+1U)) == 0)
     164      {
     165        if (set) abort ();
     166      }
     167    else
     168      if (!set) abort ();
     169  
     170    if ((i & (INT_MAX+1U)) != 0)
     171      {
     172        if (!set) abort ();
     173      }
     174    else
     175      if (set) abort ();
     176  
     177    if ((i & (INT_MAX+1U)) == (INT_MAX+1U))
     178      {
     179        if (!set) abort ();
     180      }
     181    else
     182      if (set) abort ();
     183  
     184    if ((i & (INT_MAX+1U)) != (INT_MAX+1U))
     185      {
     186        if (set) abort ();
     187      }
     188    else
     189      if (!set) abort ();
     190  }
     191  
     192  void
     193  test6 (unsigned int i, int set)
     194  {
     195    if ((i & (INT_MAX+1U)) == 0)
     196      {
     197        if (set) abort ();
     198      }
     199    else
     200      if (!set) abort ();
     201  
     202    if ((i & (INT_MAX+1U)) != 0)
     203      {
     204        if (!set) abort ();
     205      }
     206    else
     207      if (set) abort ();
     208  
     209    if ((i & (INT_MAX+1U)) == (INT_MAX+1U))
     210      {
     211        if (!set) abort ();
     212      }
     213    else
     214      if (set) abort ();
     215  
     216    if ((i & (INT_MAX+1U)) != (INT_MAX+1U))
     217      {
     218        if (set) abort ();
     219      }
     220    else
     221      if (!set) abort ();
     222  }
     223  
     224  void
     225  test7 (long long l, int set)
     226  {
     227    if ((l & (LONG_LONG_MAX+1ULL)) == 0)
     228      {
     229        if (set) abort ();
     230      }
     231    else
     232      if (!set) abort ();
     233  
     234    if ((l & (LONG_LONG_MAX+1ULL)) != 0)
     235      {
     236        if (!set) abort ();
     237      }
     238    else
     239      if (set) abort ();
     240  
     241    if ((l & (LONG_LONG_MAX+1ULL)) == (LONG_LONG_MAX+1ULL))
     242      {
     243        if (!set) abort ();
     244      }
     245    else
     246      if (set) abort ();
     247  
     248    if ((l & (LONG_LONG_MAX+1ULL)) != (LONG_LONG_MAX+1ULL))
     249      {
     250        if (set) abort ();
     251      }
     252    else
     253      if (!set) abort ();
     254  }
     255  
     256  void
     257  test8 (unsigned long long l, int set)
     258  {
     259    if ((l & (LONG_LONG_MAX+1ULL)) == 0)
     260      {
     261        if (set) abort ();
     262      }
     263    else
     264      if (!set) abort ();
     265  
     266    if ((l & (LONG_LONG_MAX+1ULL)) != 0)
     267      {
     268        if (!set) abort ();
     269      }
     270    else
     271      if (set) abort ();
     272  
     273    if ((l & (LONG_LONG_MAX+1ULL)) == (LONG_LONG_MAX+1ULL))
     274      {
     275        if (!set) abort ();
     276      }
     277    else
     278      if (set) abort ();
     279  
     280    if ((l & (LONG_LONG_MAX+1ULL)) != (LONG_LONG_MAX+1ULL))
     281      {
     282        if (set) abort ();
     283      }
     284    else
     285      if (!set) abort ();
     286  }
     287  
     288  int
     289  main ()
     290  {
     291    test1 (0, 0);
     292    test1 (SCHAR_MAX, 0);
     293    test1 (SCHAR_MIN, 1);
     294    test1 (UCHAR_MAX, 1);
     295  
     296    test2 (0, 0);
     297    test2 (SCHAR_MAX, 0);
     298    test2 (SCHAR_MIN, 1);
     299    test2 (UCHAR_MAX, 1);
     300  
     301    test3 (0, 0);
     302    test3 (SHRT_MAX, 0);
     303    test3 (SHRT_MIN, 1);
     304    test3 (USHRT_MAX, 1);
     305  
     306    test4 (0, 0);
     307    test4 (SHRT_MAX, 0);
     308    test4 (SHRT_MIN, 1);
     309    test4 (USHRT_MAX, 1);
     310  
     311    test5 (0, 0);
     312    test5 (INT_MAX, 0);
     313    test5 (INT_MIN, 1);
     314    test5 (UINT_MAX, 1);
     315  
     316    test6 (0, 0);
     317    test6 (INT_MAX, 0);
     318    test6 (INT_MIN, 1);
     319    test6 (UINT_MAX, 1);
     320  
     321    test7 (0, 0);
     322    test7 (LONG_LONG_MAX, 0);
     323    test7 (LONG_LONG_MIN, 1);
     324    test7 (ULONG_LONG_MAX, 1);
     325  
     326    test8 (0, 0);
     327    test8 (LONG_LONG_MAX, 0);
     328    test8 (LONG_LONG_MIN, 1);
     329    test8 (ULONG_LONG_MAX, 1);
     330  
     331    return 0;
     332  }
     333