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

     1  #include <limits.h>
     2  
     3  extern void abort ();
     4  
     5  int test1(int x)
     6  {
     7    return (x ^ INT_MIN) ^ 0x1234;
     8  }
     9  
    10  unsigned int test1u(unsigned int x)
    11  {
    12    return (x ^ (unsigned int)INT_MIN) ^ 0x1234;
    13  }
    14  
    15  int test2(int x)
    16  {
    17    return (x ^ 0x1234) ^ INT_MIN;
    18  }
    19  
    20  unsigned int test2u(unsigned int x)
    21  {
    22    return (x ^ 0x1234) ^ (unsigned int)INT_MIN;
    23  }
    24  
    25  unsigned int test3u(unsigned int x)
    26  {
    27    return (x + (unsigned int)INT_MIN) ^ 0x1234;
    28  }
    29  
    30  unsigned int test4u(unsigned int x)
    31  {
    32    return (x ^ 0x1234) + (unsigned int)INT_MIN;
    33  }
    34  
    35  unsigned int test5u(unsigned int x)
    36  {
    37    return (x - (unsigned int)INT_MIN) ^ 0x1234;
    38  }
    39  
    40  unsigned int test6u(unsigned int x)
    41  {
    42    return (x ^ 0x1234) - (unsigned int)INT_MIN;
    43  }
    44  
    45  int test7(int x)
    46  {
    47    int y = INT_MIN;
    48    int z = 0x1234;
    49    return (x ^ y) ^ z;
    50  }
    51  
    52  unsigned int test7u(unsigned int x)
    53  {
    54    unsigned int y = (unsigned int)INT_MIN;
    55    unsigned int z = 0x1234;
    56    return (x ^ y) ^ z;
    57  }
    58  
    59  int test8(int x)
    60  {
    61    int y = 0x1234;
    62    int z = INT_MIN;
    63    return (x ^ y) ^ z;
    64  }
    65  
    66  unsigned int test8u(unsigned int x)
    67  {
    68    unsigned int y = 0x1234;
    69    unsigned int z = (unsigned int)INT_MIN;
    70    return (x ^ y) ^ z;
    71  }
    72  
    73  unsigned int test9u(unsigned int x)
    74  {
    75    unsigned int y = (unsigned int)INT_MIN;
    76    unsigned int z = 0x1234;
    77    return (x + y) ^ z;
    78  }
    79  
    80  unsigned int test10u(unsigned int x)
    81  {
    82    unsigned int y = 0x1234;
    83    unsigned int z = (unsigned int)INT_MIN;
    84    return (x ^ y) + z;
    85  }
    86  
    87  unsigned int test11u(unsigned int x)
    88  {
    89    unsigned int y = (unsigned int)INT_MIN;
    90    unsigned int z = 0x1234;
    91    return (x - y) ^ z;
    92  }
    93  
    94  unsigned int test12u(unsigned int x)
    95  {
    96    unsigned int y = 0x1234;
    97    unsigned int z = (unsigned int)INT_MIN;
    98    return (x ^ y) - z;
    99  }
   100  
   101  
   102  void test(int a, int b)
   103  {
   104    if (test1(a) != b)
   105      abort();
   106    if (test2(a) != b)
   107      abort();
   108    if (test7(a) != b)
   109      abort();
   110    if (test8(a) != b)
   111      abort();
   112  }
   113  
   114  void testu(unsigned int a, unsigned int b)
   115  {
   116    if (test1u(a) != b)
   117      abort();
   118    if (test2u(a) != b)
   119      abort();
   120    if (test3u(a) != b)
   121      abort();
   122    if (test4u(a) != b)
   123      abort();
   124    if (test5u(a) != b)
   125      abort();
   126    if (test6u(a) != b)
   127      abort();
   128    if (test7u(a) != b)
   129      abort();
   130    if (test8u(a) != b)
   131      abort();
   132    if (test9u(a) != b)
   133      abort();
   134    if (test10u(a) != b)
   135      abort();
   136    if (test11u(a) != b)
   137      abort();
   138    if (test12u(a) != b)
   139      abort();
   140  }
   141  
   142  
   143  int main()
   144  {
   145  #if INT_MAX == 2147483647
   146    test(0x00000000,0x80001234);
   147    test(0x00001234,0x80000000);
   148    test(0x80000000,0x00001234);
   149    test(0x80001234,0x00000000);
   150    test(0x7fffffff,0xffffedcb);
   151    test(0xffffffff,0x7fffedcb);
   152  
   153    testu(0x00000000,0x80001234);
   154    testu(0x00001234,0x80000000);
   155    testu(0x80000000,0x00001234);
   156    testu(0x80001234,0x00000000);
   157    testu(0x7fffffff,0xffffedcb);
   158    testu(0xffffffff,0x7fffedcb);
   159  #endif
   160  
   161  #if INT_MAX == 32767
   162    test(0x0000,0x9234);
   163    test(0x1234,0x8000);
   164    test(0x8000,0x1234);
   165    test(0x9234,0x0000);
   166    test(0x7fff,0xedcb);
   167    test(0xffff,0x6dcb);
   168  
   169    testu(0x0000,0x9234);
   170    testu(0x8000,0x1234);
   171    testu(0x1234,0x8000);
   172    testu(0x9234,0x0000);
   173    testu(0x7fff,0xedcb);
   174    testu(0xffff,0x6dcb);
   175  #endif
   176  
   177    return 0;
   178  }
   179