(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
tls/
opt-12.c
       1  /* PR target/29198 */
       2  /* { dg-do run } */
       3  /* { dg-options "-O2 -fpic" } */
       4  /* { dg-require-effective-target tls_runtime } */
       5  /* { dg-add-options tls } */
       6  /* { dg-require-effective-target fpic } */
       7  
       8  extern void abort (void);
       9  
      10  int f2 (int, int, int, int);
      11  struct s { char b[4]; };
      12  __thread struct s thra[2];
      13  
      14  void
      15  __attribute__((noinline))
      16  f1 (int a1, int a2)
      17  {
      18    int i, j;
      19    for (i = 0; i < 4; i++)
      20      {
      21        int tot = 0;
      22        for (j = 0; j < 4; j++)
      23  	tot += f2 (a1, a2, i, j);
      24        *(&thra[0].b[0] + i) = tot;
      25      }
      26  }
      27  
      28  int
      29  __attribute__((noinline))
      30  f2 (int a, int b, int c, int d)
      31  {
      32    return a + b + c + d;
      33  }
      34  
      35  int
      36  main (void)
      37  {
      38    f1 (0, 0);
      39    if (thra[0].b[0] != 6
      40        || thra[0].b[1] != 10
      41        || thra[0].b[2] != 14
      42        || thra[0].b[3] != 18)
      43      abort ();
      44    f1 (2, 3);
      45    if (thra[0].b[0] != 26
      46        || thra[0].b[1] != 30
      47        || thra[0].b[2] != 34
      48        || thra[0].b[3] != 38)
      49      abort ();
      50    return 0;
      51  }