Fix wrong assertion wrt. virtual function vtbl index (#3327)

Fixes #3324 by checking the aggregate linkage, not the function's, for special vtbl index 0.
This commit is contained in:
Etienne Cimon 2020-02-16 17:29:48 -05:00 committed by GitHub
parent f28f4b3680
commit 40914dc23f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 2 deletions

View file

@ -426,9 +426,10 @@ LLValue *DtoVirtualFunctionPointer(DValue *inst, FuncDeclaration *fdecl,
assert(fdecl->isVirtual());
assert(!fdecl->isFinalFunc());
assert(inst->type->toBasetype()->ty == Tclass);
// 0 is always ClassInfo/Interface* unless it is a CPP interface
// slot 0 is always ClassInfo/Interface* unless it is a CPP class
assert(fdecl->vtblIndex > 0 ||
(fdecl->vtblIndex == 0 && fdecl->linkage == LINKcpp));
(fdecl->vtblIndex == 0 &&
inst->type->toBasetype()->isTypeClass()->sym->isCPPclass()));
// get instance
LLValue *vthis = DtoRVal(inst);