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

     1  #include <limits.h>
     2  
     3  extern void abort ();
     4  
     5  int test1(int x)
     6  {
     7    return x ^ INT_MIN;
     8  }
     9  
    10  unsigned int test1u(unsigned int x)
    11  {
    12    return x ^ (unsigned int)INT_MIN;
    13  }
    14  
    15  unsigned int test2u(unsigned int x)
    16  {
    17    return x + (unsigned int)INT_MIN;
    18  }
    19  
    20  unsigned int test3u(unsigned int x)
    21  {
    22    return x - (unsigned int)INT_MIN;
    23  }
    24  
    25  int test4(int x)
    26  {
    27    int y = INT_MIN;
    28    return x ^ y;
    29  }
    30  
    31  unsigned int test4u(unsigned int x)
    32  {
    33    unsigned int y = (unsigned int)INT_MIN;
    34    return x ^ y;
    35  }
    36  
    37  unsigned int test5u(unsigned int x)
    38  {
    39    unsigned int y = (unsigned int)INT_MIN;
    40    return x + y;
    41  }
    42  
    43  unsigned int test6u(unsigned int x)
    44  {
    45    unsigned int y = (unsigned int)INT_MIN;
    46    return x - y;
    47  }
    48  
    49  
    50  
    51  void test(int a, int b)
    52  {
    53    if (test1(a) != b)
    54      abort();
    55    if (test4(a) != b)
    56      abort();
    57  }
    58  
    59  void testu(unsigned int a, unsigned int b)
    60  {
    61    if (test1u(a) != b)
    62      abort();
    63    if (test2u(a) != b)
    64      abort();
    65    if (test3u(a) != b)
    66      abort();
    67    if (test4u(a) != b)
    68      abort();
    69    if (test5u(a) != b)
    70      abort();
    71    if (test6u(a) != b)
    72      abort();
    73  }
    74  
    75  
    76  int main()
    77  {
    78  #if INT_MAX == 2147483647
    79    test(0x00000000,0x80000000);
    80    test(0x80000000,0x00000000);
    81    test(0x12345678,0x92345678);
    82    test(0x92345678,0x12345678);
    83    test(0x7fffffff,0xffffffff);
    84    test(0xffffffff,0x7fffffff);
    85  
    86    testu(0x00000000,0x80000000);
    87    testu(0x80000000,0x00000000);
    88    testu(0x12345678,0x92345678);
    89    testu(0x92345678,0x12345678);
    90    testu(0x7fffffff,0xffffffff);
    91    testu(0xffffffff,0x7fffffff);
    92  #endif
    93  
    94  #if INT_MAX == 32767
    95    test(0x0000,0x8000);
    96    test(0x8000,0x0000);
    97    test(0x1234,0x9234);
    98    test(0x9234,0x1234);
    99    test(0x7fff,0xffff);
   100    test(0xffff,0x7fff);
   101  
   102    testu(0x0000,0x8000);
   103    testu(0x8000,0x0000);
   104    testu(0x1234,0x9234);
   105    testu(0x9234,0x1234);
   106    testu(0x7fff,0xffff);
   107    testu(0xffff,0x7fff);
   108  #endif
   109  
   110    return 0;
   111  }
   112