В настоящее время я использую LLVM для создания JIT. Есть некоторые C structs
, которые я хотел бы использовать в своем JIT'd IR. Один из них имеет следующую компоновку:
struct myStruct {
int depth;
myStruct* parent;
}
При компиляции с clang
и использовании -S -emit-llvm
я получаю следующее, что кажется абсолютно разумным:
type myStruct = { i32, myStruct* }
Хорошо. Теперь, если я хочу сделать то же самое, используя LLVM API, я не совсем уверен, как мне это сделать. Следующее (как ожидается) не работает:
auto intType = IntegerType::get(context, 32); // 32 bits integer
Type* myStructPtrType = nullptr; // Pointer to myStruct
// The following crashes because myStructPtrType is null:
auto myStructType = StructType::create(context, { intType, myStructPtrType }, "myStruct"); // myStruct
myStructPtrType = PointerType::get(myStructType, 0); // Initialise the pointer type now
Я действительно не знаю, как действовать здесь. Любые предложения приветствуются.