PR tree-optimization/81303
[official-gcc.git] / gcc / testsuite / gcc.dg / cwsc1.c
blobe793e26116af4eea9e8af04b23f3be85a24d1005
1 /* { dg-do run } */
2 /* { dg-options "-O" } */
4 #if defined(__x86_64__)
5 # define CHAIN "%r10"
6 #elif defined(__i386__)
7 # define CHAIN "%ecx"
8 #elif defined(__aarch64__)
9 # define CHAIN "x18"
10 #elif defined(__alpha__)
11 # define CHAIN "$1"
12 #elif defined(__arm__)
13 # define CHAIN "ip"
14 #elif defined(__powerpc__)
15 # define CHAIN "11"
16 #elif defined(__s390__)
17 # define CHAIN "%r0"
18 #elif defined(__sparc__)
19 # ifdef __arch64__
20 # define CHAIN "%g5"
21 # else
22 # define CHAIN "%g2"
23 # endif
24 #endif
26 #ifdef CHAIN
27 void *__attribute__((noinline, noclone)) foo(void)
29 register void *chain __asm__(CHAIN);
30 return chain;
33 void * (*ptr)(void) = foo;
34 extern void abort(void);
36 int main()
38 char c;
39 void *x = __builtin_call_with_static_chain(ptr(), &c);
40 if (x != &c)
41 abort();
42 return 0;
44 #else
45 int main() { return 0; }
46 #endif