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

     1  extern void abort (void);
     2  static void fixnum_neg(signed char x, signed char *py, int *pv)
     3  {
     4    unsigned char ux, uy;
     5  
     6    ux = (unsigned char)x;
     7    uy = -ux;
     8    *py = (uy <= 127) ? (signed char)uy : (-(signed char)(255 - uy) - 1);
     9    *pv = (x == -128) ? 1 : 0;
    10  }
    11  
    12  void __attribute__((noinline)) foo(int x, int y, int v)
    13  {
    14    if (y < -128 || y > 127)
    15      abort();
    16  }
    17  
    18  int test_neg(void)
    19  {
    20    signed char x, y;
    21    int v, err;
    22  
    23    err = 0;
    24    x = -128;
    25    for (;;) {
    26        fixnum_neg(x, &y, &v);
    27        foo((int)x, (int)y, v);
    28        if ((v && x != -128) || (!v && x == -128))
    29  	++err;
    30        if (x == 127)
    31  	break;
    32        ++x;
    33    }
    34    return err;
    35  }
    36  
    37  int main(void)
    38  {
    39    if (sizeof (char) != 1)
    40      return 0;
    41    if (test_neg() != 0)
    42      abort();
    43    return 0;
    44  }
    45