mirror of
https://github.com/ldc-developers/ldc.git
synced 2025-05-01 23:50:43 +03:00
[svn r215] fix for empty class vtbl
This commit is contained in:
parent
77b4800c27
commit
94e4a5b5a1
2 changed files with 13 additions and 8 deletions
|
@ -142,11 +142,13 @@ void DtoResolveClass(ClassDeclaration* cd)
|
|||
// add base class data fields first
|
||||
LLVM_AddBaseClassData(&cd->baseclasses);
|
||||
|
||||
// then add own members
|
||||
// then add own members, if any
|
||||
if(cd->members) {
|
||||
for (int k=0; k < cd->members->dim; k++) {
|
||||
Dsymbol* dsym = (Dsymbol*)(cd->members->data[k]);
|
||||
dsym->toObjFile();
|
||||
}
|
||||
}
|
||||
|
||||
// resolve class data fields (possibly unions)
|
||||
Logger::println("doing class fields");
|
||||
|
@ -594,8 +596,7 @@ void DtoConstInitClass(ClassDeclaration* cd)
|
|||
}
|
||||
#if OPAQUE_VTBLS
|
||||
const llvm::ArrayType* svtbl_ty = isaArray(ts->ir.vtblType->get());
|
||||
llvm::Constant* cvtblInit = llvm::ConstantArray::get(svtbl_ty, sinits);
|
||||
cd->ir.irStruct->constVtbl = llvm::cast<llvm::ConstantArray>(cvtblInit);
|
||||
cd->ir.irStruct->constVtbl = llvm::ConstantArray::get(svtbl_ty, sinits);
|
||||
#else
|
||||
const llvm::StructType* svtbl_ty = isaStruct(ts->ir.vtblType->get());
|
||||
llvm::Constant* cvtblInit = llvm::ConstantStruct::get(svtbl_ty, sinits);
|
||||
|
@ -1495,7 +1496,11 @@ void DtoDefineClassInfo(ClassDeclaration* cd)
|
|||
assert(!cd->ir.irStruct->vtbl->getType()->isAbstract());
|
||||
c = llvm::ConstantExpr::getBitCast(cd->ir.irStruct->vtbl, byteptrptrty);
|
||||
assert(!cd->ir.irStruct->constVtbl->getType()->isAbstract());
|
||||
size_t vtblsz = cd->ir.irStruct->constVtbl->getType()->getNumElements();
|
||||
size_t vtblsz = 0;
|
||||
llvm::ConstantArray* constVtblArray = llvm::dyn_cast<llvm::ConstantArray>(cd->ir.irStruct->constVtbl);
|
||||
if(constVtblArray) {
|
||||
vtblsz = constVtblArray->getType()->getNumElements();
|
||||
}
|
||||
c = DtoConstSlice(DtoConstSize_t(vtblsz), c);
|
||||
}
|
||||
inits.push_back(c);
|
||||
|
|
|
@ -77,7 +77,7 @@ public:
|
|||
|
||||
llvm::GlobalVariable* vtbl;
|
||||
#if OPAQUE_VTBLS
|
||||
llvm::ConstantArray* constVtbl;
|
||||
llvm::Constant* constVtbl;
|
||||
#else
|
||||
llvm::ConstantStruct* constVtbl;
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue