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))
f1(int a1,int a2)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))
f2(int a,int b,int c,int d)30 f2 (int a, int b, int c, int d)
31 {
32 return a + b + c + d;
33 }
34
35 int
main(void)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 }
52