diff --git a/src/statement.c b/src/statement.c index cafd7b761c12..ab2244b91c38 100644 --- a/src/statement.c +++ b/src/statement.c @@ -300,9 +300,9 @@ int Statement::blockExit(FuncDeclaration *func, bool mustNotThrow) // Allow if last case/default was empty CaseStatement *sc = slast->isCaseStatement(); DefaultStatement *sd = slast->isDefaultStatement(); - if (sc && (!sc->statement->hasCode() || sc->statement->isCaseStatement())) + if (sc && (!sc->statement->hasCode() || sc->statement->isCaseStatement() || sc->statement->isErrorStatement())) ; - else if (sd && (!sd->statement->hasCode() || sd->statement->isCaseStatement())) + else if (sd && (!sd->statement->hasCode() || sd->statement->isCaseStatement() || sd->statement->isErrorStatement())) ; else { diff --git a/test/fail_compilation/diag12640.d b/test/fail_compilation/diag12640.d new file mode 100644 index 000000000000..962cccea1e70 --- /dev/null +++ b/test/fail_compilation/diag12640.d @@ -0,0 +1,30 @@ +/* +TEST_OUTPUT: +--- +fail_compilation/diag12640.d(14): Error: undefined identifier asdf +fail_compilation/diag12640.d(23): Error: undefined identifier asdf +--- +*/ + +void main() +{ + switch (1) + { + case 0: + asdf; + break; + + default: + } + + switch (1) + { + default: + asdf; + break; + + case 0: + } + +} +