Как повторно инициализировать llvm::GlobalVariable
Я пытаюсь создать функцию в llvm IR, которая переназначает все llvm::GlobalVariable их начальным значениям.
Я попытался решить эту проблему, сначала перебирая все llvm::GlobalVariable из llvm:: Module, а затем для каждого llvm::GlobalVariable, который имеет инициализатор и не является константой, чтобы добавить в мою новую функцию llvm:: StoreInst, который будет выполнять назначение.
Моя проблема в том, что llvm::GlobalVariable::getInitializer() возвращает *llvm::Constant, который является базовым классом, и я не уверен, как получить доступ к значениям инициализации, особенно для пользовательских структур и классов. Должен ли я использовать какой-то унылый или есть более чистое решение?
Пока это мой код, который хорошо компилируется, но вылетает во время выполнения: (Утверждение `getOperand(1)->getType()->isPointerTy() && "Ptr должно иметь тип указателя!"'Не удалось.)
Module::GlobalListType* glist = &M.getGlobalList();
for(auto it=glist->begin(); it!=glist->end(); ++it){
if(it->hasInitializer() && !it->isConstant()){
Constant* con = it->getInitializer();
StoreInst(it, con, RET);//RET is a pointer to an existing instruction.
}
}
Спасибо за ваше время!