(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
cet-notrack-icf-3.c
       1  /* Verify nocf_check function calls are not ICF optimized.  */
       2  /* { dg-do compile } */
       3  /* { dg-options "-O2 -fcf-protection=none" } */
       4  /* { dg-final { scan-assembler-not "endbr" } } */
       5  /* { dg-final { scan-assembler-not "fn2:" } } */
       6  /* { dg-final { scan-assembler "set\[ \t]+fn2,fn1" { target { ! *-*-darwin* } } } } */
       7  /* { dg-final { scan-assembler "set\[ \t]+fn3,fn1" { target { ! *-*-darwin* } } } } */
       8  
       9  int (*foo)(int);
      10  
      11  typedef int (*type1_t) (int) __attribute__ ((nocf_check)); /* { dg-warning "'nocf_check' attribute ignored. Use '-fcf-protection' option to enable it" } */
      12  typedef int (*type2_t) (int);
      13  
      14  static __attribute__((noinline)) int
      15  fn1 (int x)
      16  {
      17    return ((type2_t)foo)(x + 12);
      18  }
      19  
      20  static __attribute__((noinline)) int
      21  fn2 (int x)
      22  {
      23    return ((type1_t)foo)(x + 12);
      24  }
      25  
      26  static __attribute__((noinline)) int
      27  fn3 (int x)
      28  {
      29    return ((type2_t)foo)(x + 12);
      30  }
      31  
      32  int
      33  fn4 (int x)
      34  {
      35    return fn1 (x) + fn2 (x) + fn3 (x);
      36  }