Do not emit declare or emit a vtbl entry for bodyless functions in abstract classes.

Maybe the better fix would be to adjust FuncDeclaration::isAbstract, but there
may be unwelcome sideeffects.
This commit is contained in:
Christian Kamm
2009-04-19 00:06:23 +02:00
parent 134870c873
commit 522c580647
2 changed files with 7 additions and 4 deletions

View File

@@ -361,8 +361,11 @@ void DtoResolveFunction(FuncDeclaration* fdecl)
Logger::println("DtoResolveFunction(%s): %s", fdecl->toPrettyChars(), fdecl->loc.toChars());
LOG_SCOPE;
// queue declaration unless the function is abstract without body
if (!fdecl->isAbstract() || fdecl->fbody)
// queue declaration unless the function is abstract without body;
// bodyless functions in an abstract class are considered abstract
ClassDeclaration* cd = fdecl->parent->isClassDeclaration();
bool isabstract = fdecl->isAbstract() || (cd && cd->isAbstract());
if (!isabstract || fdecl->fbody)
{
DtoDeclareFunction(fdecl);
}