如何使用Clang编译为LLVM IR时保留结构成员标识符?

时间:2011-02-07 04:09:42

标签: llvm clang llvm-clang

假设我有以下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* })。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

LLVM IR不保留源语言的许多功能。您可以通过

之类的代码进行检查
struct Foo {
   char *a;
};

struct Bar {
   char *a;
};

由于LLVM中的类型在结构上是等效的,因此只会发出一种类型。如果要保留有关源代码构造的任意信息,则必须发出/使用调试信息。