(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
sibcall-6.c
       1  /* A simple check to see whether indirect calls are
       2     being sibcall optimized on targets that do support
       3     this notion, i.e. have the according call patterns
       4     in place.
       5  
       6     Copyright (C) 2002 Free Software Foundation Inc.
       7     Contributed by Andreas Bauer <baueran@in.tum.de>  */
       8  
       9  /* { dg-do run { target epiphany-*-* i?86-*-* x86_64-*-* s390*-*-* } } */
      10  /* { dg-skip-if "" { { i?86-*-* x86_64-*-* } && { ia32 && { ! nonpic } } } } */
      11  /* { dg-options "-O2 -foptimize-sibling-calls -fno-ipa-cp" } */
      12  
      13  extern void abort (void);
      14  extern void exit (int);
      15  
      16  int foo (int);
      17  int bar (int);
      18  
      19  int (*ptr) (int);
      20  int *f_addr;
      21  
      22  int
      23  main ()
      24  {
      25    ptr = bar;
      26    foo (7);
      27    exit (0);
      28  }
      29  
      30  int __attribute__ ((noinline))
      31  bar (b)
      32       int b;
      33  {
      34    if (f_addr == (int*) __builtin_return_address (0))
      35      return b;
      36    else
      37      abort ();
      38  }
      39  
      40  int __attribute__ ((noinline))
      41  foo (f)
      42       int f;
      43  {
      44    f_addr = (int*) __builtin_return_address (0);
      45    return (*ptr)(f);
      46  }