void RTTIBuilder::finalize(LLType* type, LLValue* value) { llvm::ArrayRef<LLConstant*> inits = llvm::makeArrayRef(this->inits); LLStructType *st = isaStruct(type); assert(st); // set struct body if (st->isOpaque()) { std::vector<LLType*> types; for (int i = 0, n = inits.size(); i < n; ++i) types.push_back(inits[i]->getType()); st->setBody(types); } // create the inititalizer LLConstant* tiInit = LLConstantStruct::get(st, inits); // set the initializer isaGlobalVar(value)->setInitializer(tiInit); }
void RTTIBuilder::finalize(LLType* type, LLValue* value) { llvm::ArrayRef<LLConstant*> inits = llvm::makeArrayRef(this->inits); LLStructType *st = isaStruct(type); assert(st); // set struct body if (st->isOpaque()) { const int n = inits.size(); std::vector<LLType*> types; types.reserve(n); for (int i = 0; i < n; ++i) types.push_back(inits[i]->getType()); st->setBody(types); } // create the inititalizer LLConstant* tiInit = LLConstantStruct::get(st, inits); // set the initializer llvm::GlobalVariable* gvar = llvm::cast<llvm::GlobalVariable>(value); gvar->setInitializer(tiInit); gvar->setLinkage(TYPEINFO_LINKAGE_TYPE); }