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

如何在使用Clang编译到LLVM IR时保留结构成员标识符?,llvm,clang,llvm-clang,Llvm,Clang,Llvm Clang,假设我有以下C结构定义: struct stringStructure { char *stringVariable; }; 对于上述内容,Clang生成以下LLVM IR: %struct.stringStructure = type { i8* } …它包括我定义中的所有内容,除了变量标识符stringVariable < >我想找到一些方法将标识符导出到生成的LLVM IR中,这样我就可以从我的应用程序(使用LLVM C++ API)的名称引用它。 我尝试添加注释属性,如下所示

假设我有以下C结构定义:

struct stringStructure
{
    char *stringVariable;
};
对于上述内容,Clang生成以下LLVM IR:

%struct.stringStructure = type { i8* }
…它包括我定义中的所有内容,除了变量标识符
stringVariable

< >我想找到一些方法将标识符导出到生成的LLVM IR中,这样我就可以从我的应用程序(使用LLVM C++ API)的名称引用它。 我尝试添加
注释
属性,如下所示:

    char *stringVariable __attribute__((annotate("stringVariable")));
…但是注释似乎没有通过(结构仍然被定义为
类型{i8*}


有什么想法吗?

LLVM IR没有保留源语言的许多功能。您可以通过下面的代码检查这一点

struct Foo {
   char *a;
};

struct Bar {
   char *a;
};

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

谢谢,Anton。我很好奇,是否有办法在不发出调试信息的情况下做到这一点(例如,在生产环境中,优化、剥离代码)。只是不要假设您可以将这些信息保存在LLVM IR元素中。