PR inline-asm/84742
[official-gcc.git] / gcc / testsuite / gcc.target / s390 / nobp-function-pointer-nothunk.c
blobc02b45a2cc76e7a4a47fd26982f2d2d02f9d66ff
1 /* { dg-do compile } */
2 /* { dg-options "-O3 -march=z10 --save-temps -mindirect-branch-call=thunk-extern -mindirect-branch-table" } */
4 int gl;
6 void __attribute__((noinline,noclone))
7 foo (int a)
9 gl = a + 40;
12 int __attribute__((noinline,noclone))
13 foo_value (int a)
15 return a + 40;
18 void* __attribute__((noinline,noclone))
19 get_fptr (int a)
21 switch (a)
23 case 0: return &foo; break;
24 case 1: return &foo_value; break;
25 default: __builtin_abort ();
29 void (*f) (int);
30 int (*g) (int);
32 int
33 main ()
35 int res;
37 f = get_fptr(0);
38 f (2);
39 if (gl != 42)
40 __builtin_abort ();
42 g = get_fptr(1);
43 if (g (2) != 42)
44 __builtin_abort ();
46 return 0;
49 /* 2 x main
50 /* { dg-final { scan-assembler-times "brasl\t%r\[0-9\]*,__s390_indirect_jump" 2 } } */
52 /* No thunks due to thunk-extern. */
53 /* { dg-final { scan-assembler-not "exrl" } } */
54 /* { dg-final { scan-assembler-not ".globl __s390_indirect_jump" } } */
56 /* { dg-final { scan-assembler-not "section\t.s390_indirect_jump" } } */
57 /* { dg-final { scan-assembler "section\t.s390_indirect_call" } } */
58 /* { dg-final { scan-assembler-not "section\t.s390_return_reg" } } */
59 /* { dg-final { scan-assembler-not "section\t.s390_return_mem" } } */