Я пишу основную функцию, которая должна вызывать другие функции, и, но я получаю эту ошибку libc++abi.dylib: Pure virtual function called!
способ ввода вызовов функций в основную функцию:
Type * returnType = Type::getInt32Ty(TheContext);
std::vector<Type *> argTypes(0, Type::getInt32Ty(TheContext));
FunctionType * functionType = FunctionType::get(returnType, argTypes, false);
Function * function = Function::Create(functionType, Function::ExternalLinkage, "main", TheModule.get());
function->getBasicBlockList().clear();
BasicBlock * BB = BasicBlock::Create(TheContext, "entry", function);
Builder.SetInsertPoint(BB);
for (const auto & call : calls) {
Builder.CreateCall(call.first, call.second, "call");
}
Builder.CreateRet(Builder.getInt32(0));
verifyFunction(*function);
и если я запускаю этот цикл for, я получаю упомянутую ошибку, но сгенерированный IR, кажется, в порядке, за исключением того, что по какой-то причине он вызывает "calltmp? Вместо" call ", знаете ли вы, как я могу это исправить?
declare i32 @writeln(i32)
define i32 @a() {
entry:
ret i32 3
}
ine i32 @__anon_call() {
entry:
%calltmp = call i32 @a()
%calltmp1 = call i32 @writeln(i32 %calltmp)
ret i32 %calltmp1
entry2: ; No predecessors!
%calltmp3 = call i32 @a()
%calltmp4 = call i32 @writeln(i32 %calltmp3)
ret i32 %calltmp4
}
define i32 @main() {
entry:
%call = call i32 @a()
%call1 = call i32 @writeln(i32 %calltmp)
%call2 = call i32 @a()
%call3 = call i32 @writeln(i32 %calltmp3)
ret i32 0
}