Я пишу пропуск функции и хотел бы добавить глобальную переменную типа int на этапе инициализации для использования в фактической работе прохода.Глобальные переменные без указателя в LLVM
До сих пор у меня есть
bool doInitialization(Module &M) {
LLVMContext &c = M.getContext();
Type *intTy = TypeBuilder<int,false>::get(c);
Value *p = M.getOrInsertGlobal("var1",intTy);
return true
}
по какой-либо причине, var1 имеет тип Int *. Например, добавив это после объявления
Type *pt = p->getType();
if (isa<PointerType>(pt)) {
errs().write_escaped("Is a pointer ty") << '\n';
}
будет в конечном итоге с оттиском, когда скомпилированный код выполняется, и
if ((intTy->getPointerTo()) == (p->getType())) {
errs().write_escaped("This is confusing") << '\n';
}
будет снова напечатать строку.
Можно ли добавить глобальную переменную типа int, используя этот метод, и если да, то где я иду не так?
Спасибо за помощь! Это немного не по теме, но я чувствую, что это связано достаточно, чтобы остаться на этой странице: В моей функции перевале, я звоню Value * vpointer = M-> getGlobalVariable («var1»); LoadInst нагрузки (vpointer, «var1», &i); и я от итератора. Этот код возвращает ошибку сегментации. LoadInst проблема, ее удаление удаляет Segfault. Я думаю, что вопрос из строки аргумента LoadInst() , потому что я в основном просто угадываю, что там делать (есть небольшая документация). Как мне исправить этот segfault? –
@ LLVMHacker30 Я бы предложил изучить использование ['IRBuilder'] (http://llvm.org/docs /doxygen/html/classllvm_1_1IRBuilder.html), а не для создания инструкций вручную. –
Не уверен, что этот ответ добавляет, что мой более ранний ответ не дал :( –