Applied function type from D1 frontend that got removed in D2, it's critical for member function type to be correct.

Fixed a bunch of type discrepancies in druntime object.di vs. genobj.d .

Disabled (#if 0) some potentally very large type dumps for -vv .

Updated classinfo and typeinfo generation for D2, almost complete now.

Added finer grained checks for vtbl type mismatching, aids debugging.
This commit is contained in:
Tomas Lindquist Olsen
2009-06-03 02:28:48 +02:00
parent 2cd4d15be1
commit f6997cb604
12 changed files with 82 additions and 18 deletions

View File

@@ -178,6 +178,24 @@ LLConstant * IrStruct::getVtblInit()
IF_LOG Logger::cout() << "constVtbl type: " << *constVtbl->getType() << std::endl;
IF_LOG Logger::cout() << "vtbl type: " << *type->irtype->isClass()->getVtbl() << std::endl;
#endif
#if 1
size_t nc = constants.size();
const LLType* vtblTy = type->irtype->isClass()->getVtbl();
for (size_t i = 0; i < nc; ++i)
{
if (constVtbl->getOperand(i)->getType() != vtblTy->getContainedType(i))
{
Logger::cout() << "type mismatch for entry # " << i << " in vtbl initializer" << std::endl;
constVtbl->getOperand(i)->dump();
vtblTy->getContainedType(i)->dump(gIR->module);
}
}
#endif
assert(constVtbl->getType() == type->irtype->isClass()->getVtbl() &&
"vtbl initializer type mismatch");