Я изучаю 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?
После получения отладочной версии произошла ошибка seg в коде CreateAlloca, поскольку BasicBlock был нулевым. Итак, я добавил BasicBlock, и теперь он неисправен, потому что GlobalValue имеет значение null. Как это установить?