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

     1  /* PR target/11087
     2     This testcase was miscompiled on ppc64, because basic_induction_var called
     3     convert_modes, yet did not expect it to emit any new instructions.
     4     Those were emitted at the end of the function and destroyed during life
     5     analysis, while the program used uninitialized pseudos created by
     6     convert_modes.  */
     7  
     8  struct A
     9  {
    10    unsigned short a1;
    11    unsigned long a2;
    12  };
    13  
    14  struct B
    15  {
    16    int b1, b2, b3, b4, b5;
    17  };
    18  
    19  struct C
    20  {
    21    struct B c1[1];
    22    int c2, c3;
    23  };
    24  
    25  static
    26  int foo (int x)
    27  {
    28    return  x < 0 ? -x : x;
    29  }
    30  
    31  int bar (struct C *x, struct A *y)
    32  {
    33    int a = x->c3;
    34    const int b = y->a1 >> 9;
    35    const unsigned long c = y->a2;
    36    int d = a;
    37    unsigned long e, f;
    38  
    39    f = foo (c - x->c1[d].b4);
    40    do
    41      {
    42        if (d <= 0)
    43  	d = x->c2;
    44        d--;
    45  
    46        e = foo (c-x->c1[d].b4);
    47        if (e < f)
    48  	a = d;
    49      }
    50    while (d != x->c3);
    51    x->c1[a].b4 = c + b;
    52    return a;
    53  }
    54  
    55  int
    56  main ()
    57  {
    58    struct A a;
    59    struct C b;
    60    int c;
    61  
    62    a.a1 = 512;
    63    a.a2 = 4242;
    64    __builtin_memset (&b, 0, sizeof (b));
    65    b.c1[0].b3 = 424242;
    66    b.c2 = 1;
    67    c = bar (&b, &a);
    68    return 0;
    69  }