mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-02-27 17:13:20 +01:00
D2:
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:
@@ -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");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user