Я изучаю LLVM с помощью C++ API и пытаюсь понять, как создавать структуры и использовать их. Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь выделить структуру, происходит ошибка сегментации.
llvm::LLVMContext ctx;
llvm::IRBuilder<> builder(ctx);
std::unique_ptr<llvm::Module> module;
std::vector<llvm::Type *> types;
types.push_back(llvm::Type::getInt16Ty(ctx));
auto structType = llvm::StructType::create(ctx, "Foo");
structType->setBody(types);
auto bb = llvm::BasicBlock::Create(ctx, "entry", nullptr);
builder.SetInsertPoint(bb);
builder.CreateAlloca(structType, nullptr, "alloctmp");
Я явно упускаю что-то простое. Почему CreateAlloca вызывает ошибку seg?
После получения отладочной версии в коде CreateAlloca произошел сбой сегмента, поскольку BasicBlock был нулевым. Итак, я добавил BasicBlock, и теперь он не работает, потому что GlobalValue равен нулю. Как это должно быть установлено?