PR inline-asm/84742
[official-gcc.git] / gcc / testsuite / gcc.target / s390 / nobp-function-pointer-z900.c
blob486495b97acd8a000c5770f705b3274c8c5bf7b4
1 /* { dg-do run } */
2 /* { dg-options "-O3 -march=z900 --save-temps -mindirect-branch-call=thunk -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 } } */
51 /* { dg-final { scan-assembler "ex\t" } } */
53 /* { dg-final { scan-assembler-not "section\t.s390_indirect_jump" } } */
54 /* { dg-final { scan-assembler "section\t.s390_indirect_call" } } */
55 /* { dg-final { scan-assembler-not "section\t.s390_return_reg" } } */
56 /* { dg-final { scan-assembler-not "section\t.s390_return_mem" } } */