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

     1  /* Copyright (C) 2002  Free Software Foundation.
     2  
     3     Test that optimizing ((c>=1) && (c<=127)) into (signed char)c < 0
     4     doesn't cause any problems for the compiler and behaves correctly.
     5  
     6     Written by Roger Sayle, 8th May 2002.  */
     7  
     8  #include <limits.h>
     9  
    10  extern void abort (void);
    11  
    12  void
    13  testc (unsigned char c, int ok)
    14  {
    15    if ((c>=1) && (c<=SCHAR_MAX))
    16      {
    17        if (!ok) abort ();
    18      }
    19    else
    20      if (ok) abort ();
    21  }
    22  
    23  void
    24  tests (unsigned short s, int ok)
    25  {
    26    if ((s>=1) && (s<=SHRT_MAX))
    27      {
    28        if (!ok) abort ();
    29      }
    30    else
    31      if (ok) abort ();
    32  }
    33  
    34  void
    35  testi (unsigned int i, int ok)
    36  {
    37    if ((i>=1) && (i<=INT_MAX))
    38      {
    39        if (!ok) abort ();
    40      }
    41    else
    42      if (ok) abort ();
    43  }
    44  
    45  void
    46  testl (unsigned long l, int ok)
    47  {
    48    if ((l>=1) && (l<=LONG_MAX))
    49      {
    50        if (!ok) abort ();
    51      }
    52    else
    53      if (ok) abort ();
    54  }
    55  
    56  int
    57  main ()
    58  {
    59    testc (0, 0);
    60    testc (1, 1);
    61    testc (SCHAR_MAX, 1);
    62    testc (SCHAR_MAX+1, 0);
    63    testc (UCHAR_MAX, 0);
    64  
    65    tests (0, 0);
    66    tests (1, 1);
    67    tests (SHRT_MAX, 1);
    68    tests (SHRT_MAX+1, 0);
    69    tests (USHRT_MAX, 0);
    70  
    71    testi (0, 0);
    72    testi (1, 1);
    73    testi (INT_MAX, 1);
    74    testi (INT_MAX+1U, 0);
    75    testi (UINT_MAX, 0);
    76  
    77    testl (0, 0);
    78    testl (1, 1);
    79    testl (LONG_MAX, 1);
    80    testl (LONG_MAX+1UL, 0);
    81    testl (ULONG_MAX, 0);
    82  
    83    return 0;
    84  }
    85