/* { dg-do run } */
/* { dg-options "-O3  -march=z10 --save-temps -mindirect-branch-call=thunk -mindirect-branch-table" } */

int gl;

void __attribute__((noinline,noclone))
foo (int a)
{
  gl = a + 40;
}

int __attribute__((noinline,noclone))
foo_value (int a)
{
  return a + 40;
}

void*  __attribute__((noinline,noclone))
get_fptr (int a)
{
  switch (a)
    {
    case 0: return &foo; break;
    case 1: return &foo_value; break;
    default: __builtin_abort ();
    }
}

void (*f) (int);
int (*g) (int);

int
main ()
{
  int res;

  f = get_fptr(0);
  f (2);
  if (gl != 42)
    __builtin_abort ();

  g = get_fptr(1);
  if (g (2) != 42)
    __builtin_abort ();

  return 0;
}

/* 2 x main
/* { dg-final { scan-assembler-times "brasl\t%r\[0-9\]*,__s390_indirect_jump" 2 } } */
/* { dg-final { scan-assembler "exrl" } } */

/* { dg-final { scan-assembler-not "section\t.s390_indirect_jump" } } */
/* { dg-final { scan-assembler     "section\t.s390_indirect_call" } } */
/* { dg-final { scan-assembler-not "section\t.s390_return_reg" } } */
/* { dg-final { scan-assembler-not "section\t.s390_return_mem" } } */
