]> granicus.if.org Git - clang/commitdiff
Make sure that hte vtable always has an i8* array type.
authorAnders Carlsson <andersca@mac.com>
Sat, 5 Dec 2009 21:09:05 +0000 (21:09 +0000)
committerAnders Carlsson <andersca@mac.com>
Sat, 5 Dec 2009 21:09:05 +0000 (21:09 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@90675 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGVtable.cpp

index 2fca7a75f9a9a00c6bb35544dac75a2406decc4c..8bf940b40c2425256de0c829867fd93937c3b81e 100644 (file)
@@ -1130,21 +1130,20 @@ llvm::Constant *CodeGenModule::GenerateVtable(const CXXRecordDecl *LayoutClass,
     b.GenerateVtableForVBases(RD, Offset);
 
     llvm::Constant *C = 0;
-    llvm::Type *type = Ptr8Ty;
+    llvm::ArrayType *ntype = 
+      llvm::ArrayType::get(Ptr8Ty, b.getVtable().size());
+
     llvm::GlobalVariable::LinkageTypes linktype
       = llvm::GlobalValue::ExternalLinkage;
     if (CreateDefinition) {
-      llvm::ArrayType *ntype = 
-        llvm::ArrayType::get(Ptr8Ty, b.getVtable().size());
       C = llvm::ConstantArray::get(ntype, &b.getVtable()[0], 
                                    b.getVtable().size());
       linktype = llvm::GlobalValue::LinkOnceODRLinkage;
       if (LayoutClass->isInAnonymousNamespace())
         linktype = llvm::GlobalValue::InternalLinkage;
-      type = ntype;
     }
     llvm::GlobalVariable *OGV = GV;
-    GV = new llvm::GlobalVariable(getModule(), type, true, linktype, C, Name);
+    GV = new llvm::GlobalVariable(getModule(), ntype, true, linktype, C, Name);
     if (OGV) {
       GV->takeName(OGV);
       llvm::Constant *NewPtr = llvm::ConstantExpr::getBitCast(GV,