From f12d7471a34005da320721f58d0f2b60cc7e848b Mon Sep 17 00:00:00 2001 From: David Nadlinger Date: Fri, 22 Apr 2011 18:47:10 +0200 Subject: [PATCH] Merged DMD commit 91a91bcb7882d76e2afd844f14697a75175573d2: bugzilla 5230 Regression(2.041, 1.057) ICE(tocsym.c) overriding a method that has an out contract --- dmd/func.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/dmd/func.c b/dmd/func.c index 673ed395..d88f64c4 100644 --- a/dmd/func.c +++ b/dmd/func.c @@ -1660,6 +1660,19 @@ Statement *FuncDeclaration::mergeFensure(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 and 5230). + */ + if (fdv->fdensure && fdv->fdensure->semanticRun != PASSsemantic3done) + { + assert(fdv->scope); + Scope *sc = fdv->scope->push(); + sc->stc &= ~STCoverride; + fdv->semantic3(sc); + sc->pop(); + } + sf = fdv->mergeFensure(sf); if (fdv->fdensure) {