我是LLVM的新手。我想创建一个如下所示的结构:
struct abcd{
int a,
int c,
int d
}
我的源代码如下:
structType at;
at.setName("abcd");
std::vector<Type*> EltTys;
EltTys->push_back(Type::getInt32Ty(getGlobalContext()));
EltTys->push_back(Type::getInt32Ty(getGlobalContext()));
EltTys->push_back(Type::getInt32Ty(getGlobalContext()));
at.setBody(EltTys);
....
这样我可以得到一个名为abcd
的结构,但似乎结构只包含类型。如何定义成员变量名称(a,c和d)?
我需要它们,因为我们想以这种方式使用这个结构:
(struct abcd*)data->a = 10;
(struct abcd*)data->b = 11;
(struct abcd*)data->d = 12;
答案 0 :(得分:2)
LLVM IR中的结构字段没有名称。如果您要查找有关其字段的类型信息,请使用字段索引通过the elements()
method访问字段类型。
我不完全确定你想做(struct abcd*)data->a = 10;
的意思。如果要插入对生成的代码的字段访问权限,请创建GEP指令。
顺便说一下,您可以这样做而不是您的代码:
Type* int_type = Type::getInt32Ty(getGlobalContext());
StructType* at = StructType::create("abcd", int_type, int_type, int_type);
由于StructType
有convenient create()
methods for creating identified struct types。