[cfe-dev] jump in inline assembly

Pietro Braione via cfe-dev cfe-dev at lists.llvm.org
Fri Oct 28 14:57:59 PDT 2016


I have a C program with an inline assembly instruction similar to this:

a = b;
if (foo) 
  asm volatile (“jmp *%0” : : “r” (baz)) /* baz points somewhere after etc */

etc:
/* here a is used */

When compiled with -O2 clang moves the initialization of a after the if statement and before the first statement of etc, and as consequence the program segfaults when foo == 1.  It’s clear that clang presumes that after the asm volatile instruction the execution will fall through the next statement. gcc allows to use the goto keyword after asm [volatile] to inform that an asm block may jump, but this seems not to work in clang. What is the clang equivalent of asm goto? My clang -v: Apple LLVM version 8.0.0 (clang-800.0.38).

Best,
Pietro Braione




More information about the cfe-dev mailing list