aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gcc.target/i386/patch-functions-force-no-patching.c
blob: cad6f2da69af8c2e6cf9e2753e481bbbe1c46ebf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/* { dg-do compile } */
/* { dg-require-effective-target lp64 } */
/* { dg-options "-mpatch-functions-for-instrumentation -mno-patch-functions-main-always" } */

/* Even complicated functions shouldn't get patched if they have the
   never_patch_for_instrumentation attribute. */

/* { dg-final { scan-assembler-not ".byte\t0xeb,0x09(.*).byte\t0x90" } } */
/* { dg-final { scan-assembler-not "ret(.*).byte\t0x90(.*).byte\t0x90" } } */

__attribute__ ((never_patch_for_instrumentation))
int foo () {
  volatile unsigned x = 0;
  volatile unsigned y = 1;
  x += y;
  x *= y;
  while (++x)
    foo ();
  return y;
}


int main ()
{
  int x = 0;
  return 0;
}