Hi,
Give below test:

volatile int a, b, c;
__attribute__((noinline)) int foo ()
{
  int i;
  for (i = 0; i < 1000; i++)
    {
      if (i % 17)
        a++;
      else
        b++;
      asm volatile(
          "foo_label:\n"
          "pushq %%rbx\n"
          "popq %%rbx\n" :"=m"(c) :"r"(i)
      );
      c++;
    }
  return 0;
}
compiled with:
gcc -O2 -fno-crossjumping -ftracer tracer-1.c -o tracer-1.o -c
will end up with following assembler error message:
tracer-1.c: Assembler messages:
tracer-1.c:16: Error: symbol `foo_label' is already defined

Root cause is in tracer.c which duplicates basic block without
checking if any GIMPLE_ASM defines labels.
Is this a bug or invalid code?

Thanks,
bin

Reply via email to