diff --git a/dmd/func.c b/dmd/func.c index cf1189f6..b17631fd 100644 --- a/dmd/func.c +++ b/dmd/func.c @@ -1593,6 +1593,16 @@ Statement *FuncDeclaration::mergeFrequire(Statement *sf) for (int i = 0; i < foverrides.dim; i++) { FuncDeclaration *fdv = (FuncDeclaration *)foverrides.data[i]; + + /* The semantic pass on the contracts of the overridden functions must + * be completed before code generation occurs (bug 3602). + */ + if (fdv->fdrequire && fdv->fdrequire->semanticRun != PASSsemantic3done) + { + assert(fdv->scope); + fdv->semantic3(fdv->scope); + } + sf = fdv->mergeFrequire(sf); if (fdv->fdrequire) {