modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/20020506-1.c (about)

     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