1 /* { dg-do run } */ 2 /* { dg-options "-O3 -march=z10 -mzarch --save-temps -mfunction-return-mem=thunk -mindirect-branch-table" } */ 3 4 int gl = 0; 5 6 int __attribute__((noinline,noclone)) bar(int a)7bar (int a) 8 { 9 return a + 2; 10 } 11 12 void __attribute__((function_return("keep"),noinline,noclone)) foo(int a)13foo (int a) 14 { 15 int i; 16 17 if (a == 42) 18 return; 19 20 for (i = 0; i < a; i++) 21 gl += bar (i); 22 } 23 24 int __attribute__((function_return("keep"))) main()25main () 26 { 27 foo (3); 28 if (gl != 9) 29 __builtin_abort (); 30 31 return 0; 32 } 33 34 /* { dg-final { scan-assembler-not "jg\t__s390_indirect_jump" } } */ 35 /* { dg-final { scan-assembler-not "exrl" } } */ 36 37 /* { dg-final { scan-assembler-not "section\t.s390_indirect_jump" } } */ 38 /* { dg-final { scan-assembler-not "section\t.s390_indirect_call" } } */ 39 /* { dg-final { scan-assembler-not "section\t.s390_return_reg" } } */ 40 /* { dg-final { scan-assembler-not "section\t.s390_return_mem" } } */ 41