[LLVMdev] How to annotate an arbitrary source line
James Stark
mrjamesstark at gmail.com
Sat Jan 18 11:43:35 PST 2014
Hi,
I'm trying to push LLVM annotations from source code into IR. I use
the following syntax to achieve that.
__attribute__((annotate(STRING)))
For example:
__attribute__((annotate(“my message")))
int a = 1;
However, this mechanism is applicable to only certain types of
statements. For example, I can annotate a function declaration, but
not a function call:
__attribute__((annotate("my message"))) memcpy(buffer, "hello", 6);
// Compile-time error!
I thought I could get around this problem by using an empty statement such as:
__attribute__((annotate("my message"))); //Notice a semicolon here.
But when I see this annotation "my message", I apply it to the next
source line below.
memcpy(buffer, "hello", 6);
Unfortunately, this hack didn't work out because the compiler didn’t
push the annotation into the bitcode.
Instead, the following is a hack that fixes the problem:
__attribute__((annotate("my message"))) int a; //Notice a dummy
statement “int a"
memcpy(buffer, "hello", 6);
It uses a dummy statement “int a” but I use the annotation "my
message" for the memcpy call in the next line. It compiles clean and
its IR does have the annotation in it as well. However, I think this
is an ugly solution, not to mention extra IR statements for the local
variable a and memory overhead.
I'd appreciate any ideas.
Thanks!
James
More information about the llvm-dev
mailing list