We would exit Sema::ActOnFinishSwitchStmt early if we didn't have a
body. This would leave an extra SwitchStmt on the SwitchStack.
This fixes PR21841.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@224237
91177308-0d34-0410-b5e6-
96231b3b80d8
SourceLocation getLocStart() const LLVM_READONLY { return SwitchLoc; }
SourceLocation getLocEnd() const LLVM_READONLY {
- return SubExprs[BODY]->getLocEnd();
+ return SubExprs[BODY] ? SubExprs[BODY]->getLocEnd() : SubExprs[COND]->getLocEnd();
}
// Iterators
assert(SS == getCurFunction()->SwitchStack.back() &&
"switch stack missing push/pop!");
+ getCurFunction()->SwitchStack.pop_back();
+
if (!BodyStmt) return StmtError();
SS->setBody(BodyStmt, SwitchLoc);
- getCurFunction()->SwitchStack.pop_back();
Expr *CondExpr = SS->getCond();
if (!CondExpr) return StmtError();
case bar5: ; // expected-error{{use of undeclared identifier 'bar5'}}
}
}
+
+namespace pr21841 {
+void fn1() {
+ switch (0)
+ switch (0 // expected-note{{to match this '('}}
+ { // expected-error{{expected ')'}}
+ }
+} // expected-error{{expected statement}}
+}