假设我有以下C结构定义:
struct stringStructure
{
char *stringVariable;
};
对于上述内容,Clang生成以下LLVM IR:
%struct.stringStructure = type { i8* }
...除了变量标识符stringVariable
之外,其中包括我的定义中的所有内容。
我想找到一些方法将标识符导出到生成的LLVM IR中,以便我可以从我的应用程序(使用LLVM C ++ API)中按名称引用它。
我尝试添加annotate
属性,如下所示:
char *stringVariable __attribute__((annotate("stringVariable")));
...但是注释似乎没有完成(结构仍然只是定义为type { i8* }
)。
有什么想法吗?
答案 0 :(得分:1)
LLVM IR不保留源语言的许多功能。您可以通过
之类的代码进行检查struct Foo {
char *a;
};
struct Bar {
char *a;
};
由于LLVM中的类型在结构上是等效的,因此只会发出一种类型。如果要保留有关源代码构造的任意信息,则必须发出/使用调试信息。