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

     1  /* PR middle-end/22141 */
     2  
     3  extern void abort (void);
     4  
     5  struct S
     6  {
     7    struct T
     8      {
     9        char a;
    10        char b;
    11        char c;
    12        char d;
    13      } t;
    14  } u;
    15  
    16  struct U
    17  {
    18    struct S s[4];
    19  };
    20  
    21  void __attribute__((noinline))
    22  c1 (struct T *p)
    23  {
    24    if (p->a != 1 || p->b != 2 || p->c != 3 || p->d != 4)
    25      abort ();
    26    __builtin_memset (p, 0xaa, sizeof (*p));
    27  }
    28  
    29  void __attribute__((noinline))
    30  c2 (struct S *p)
    31  {
    32    c1 (&p->t);
    33  }
    34  
    35  void __attribute__((noinline))
    36  c3 (struct U *p)
    37  {
    38    c2 (&p->s[2]);
    39  }
    40  
    41  void __attribute__((noinline))
    42  f1 (void)
    43  {
    44    u = (struct S) { { 1, 2, 3, 4 } };
    45  }
    46  
    47  void __attribute__((noinline))
    48  f2 (void)
    49  {
    50    u.t.a = 1;
    51    u.t.b = 2;
    52    u.t.c = 3;
    53    u.t.d = 4;
    54  }
    55  
    56  void __attribute__((noinline))
    57  f3 (void)
    58  {
    59    u.t.d = 4;
    60    u.t.b = 2;
    61    u.t.a = 1;
    62    u.t.c = 3;
    63  }
    64  
    65  void __attribute__((noinline))
    66  f4 (void)
    67  {
    68    struct S v;
    69    v.t.a = 1;
    70    v.t.b = 2;
    71    v.t.c = 3;
    72    v.t.d = 4;
    73    c2 (&v);
    74  }
    75  
    76  void __attribute__((noinline))
    77  f5 (struct S *p)
    78  {
    79    p->t.a = 1;
    80    p->t.c = 3;
    81    p->t.d = 4;
    82    p->t.b = 2;
    83  }
    84  
    85  void __attribute__((noinline))
    86  f6 (void)
    87  {
    88    struct U v;
    89    v.s[2].t.a = 1;
    90    v.s[2].t.b = 2;
    91    v.s[2].t.c = 3;
    92    v.s[2].t.d = 4;
    93    c3 (&v);
    94  }
    95  
    96  void __attribute__((noinline))
    97  f7 (struct U *p)
    98  {
    99    p->s[2].t.a = 1;
   100    p->s[2].t.c = 3;
   101    p->s[2].t.d = 4;
   102    p->s[2].t.b = 2;
   103  }
   104  
   105  int
   106  main (void)
   107  {
   108    struct U w;
   109    f1 ();
   110    c2 (&u);
   111    f2 ();
   112    c1 (&u.t);
   113    f3 ();
   114    c2 (&u);
   115    f4 ();
   116    f5 (&u);
   117    c2 (&u);
   118    f6 ();
   119    f7 (&w);
   120    c3 (&w);
   121    return 0;
   122  }