annotate gcc/testsuite/gcc.dg/cwsc1.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* { dg-do run } */
kono
parents:
diff changeset
2 /* { dg-options "-O" } */
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 #if defined(__x86_64__)
kono
parents:
diff changeset
5 # define CHAIN "%r10"
kono
parents:
diff changeset
6 #elif defined(__i386__)
kono
parents:
diff changeset
7 # define CHAIN "%ecx"
kono
parents:
diff changeset
8 #elif defined(__aarch64__)
kono
parents:
diff changeset
9 # define CHAIN "x18"
kono
parents:
diff changeset
10 #elif defined(__alpha__)
kono
parents:
diff changeset
11 # define CHAIN "$1"
kono
parents:
diff changeset
12 #elif defined(__arm__)
kono
parents:
diff changeset
13 # define CHAIN "ip"
kono
parents:
diff changeset
14 #elif defined(__powerpc__)
kono
parents:
diff changeset
15 # define CHAIN "11"
kono
parents:
diff changeset
16 #elif defined(__s390__)
kono
parents:
diff changeset
17 # define CHAIN "%r0"
kono
parents:
diff changeset
18 #elif defined(__sparc__)
kono
parents:
diff changeset
19 # ifdef __arch64__
kono
parents:
diff changeset
20 # define CHAIN "%g5"
kono
parents:
diff changeset
21 # else
kono
parents:
diff changeset
22 # define CHAIN "%g2"
kono
parents:
diff changeset
23 # endif
kono
parents:
diff changeset
24 #endif
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 #ifdef CHAIN
kono
parents:
diff changeset
27 void *__attribute__((noinline, noclone)) foo(void)
kono
parents:
diff changeset
28 {
kono
parents:
diff changeset
29 register void *chain __asm__(CHAIN);
kono
parents:
diff changeset
30 return chain;
kono
parents:
diff changeset
31 }
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 void * (*ptr)(void) = foo;
kono
parents:
diff changeset
34 extern void abort(void);
kono
parents:
diff changeset
35
kono
parents:
diff changeset
36 int main()
kono
parents:
diff changeset
37 {
kono
parents:
diff changeset
38 char c;
kono
parents:
diff changeset
39 void *x = __builtin_call_with_static_chain(ptr(), &c);
kono
parents:
diff changeset
40 if (x != &c)
kono
parents:
diff changeset
41 abort();
kono
parents:
diff changeset
42 return 0;
kono
parents:
diff changeset
43 }
kono
parents:
diff changeset
44 #else
kono
parents:
diff changeset
45 int main() { return 0; }
kono
parents:
diff changeset
46 #endif