Я хочу создать внешний вызов функции, и эта функция получает аргументы в виде int
и const char*
(ОСОБЕННО ИМЯ БАЗОВОГО БЛОКА, а не пользовательская строка) (или std::string
может быть в порядке).
Но я понятия не имею об установке аргумента функции как const char*
или std::string
.Единственное, что я понял, это то, что строка трактуется как Int8PtrTy
в LLVM.
LLVMContext &ctx = F->getContext();
Constant *countfunc = F->getParent()->getOrInsertFunction(
"bbexectr", Type::getVoidTy(ctx), Type::getInt32Ty(ctx), Type::getInt8PtrTy(ctx));
for (Function::iterator ibb = ifn->begin(); ibb != ifn->end(); ++ibb)
{
BasicBlock *B = &*ibb;
IRBuilder<> builder(B);
builder.SetInsertPoint(B->getTerminator());
std::string str = B->getName().str();
const char* strVal = str.c_str();
Value *args[] = {builder.getInt32(index), builder.getInt8PtrTy(*strVal)};
builder.CreateCall(countfunc, args);
Я пробовал верхний код, но он выдал мне сообщение об ошибке, как показано ниже.
error: cannot convert ‘llvm::PointerType*’ to ‘llvm::Value*’ in initialization
Value *args[] = {builder.getInt32(index), builder.getInt8PtrTy(*strVal)};
Есть ли способ устранить ошибку или есть лучший способ установить аргумент функции как имя базового блока ???