2011-02-07 68 views
1

说我有下面的C结构的定义:如何在使用Clang编译为LLVM IR时保留struct成员标识符?

struct stringStructure 
{ 
    char *stringVariable; 
}; 

针对上述情况,锵产生以下LLVM IR:

%struct.stringStructure = type { i8* } 

...,其包括在我的定义以外的所有变量标识符stringVariable

我想找到某种方法将标识符导出到生成的LLVM IR中,以便我可以通过我的应用程序(使用LLVM C++ API)中的名称来引用它。

我试着加入annotate属性,如下所示:

char *stringVariable __attribute__((annotate("stringVariable"))); 

...但注释似乎并没有使它通过(该结构还只是定义为type { i8* })。

任何想法?

回答

1

LLVM IR不保留源语言的许多功能。你可以像

struct Foo { 
    char *a; 
}; 

struct Bar { 
    char *a; 
}; 

只有一种类型通过代码检查,这将在所有发出的,因为类型LLVM是结构等效。如果你想保留源代码构造的任意信息,你必须发出/使用调试信息。

+1

谢谢,安东。我很好奇是否有办法在不发出调试信息的情况下做到这一点(即在生产,优化,剥离代码中)。 – smokris 2011-02-07 18:40:57