Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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);
}