unconditionally check for goto correctness. This is because switch

statements don't end up in the LabelMap so we don't have a quick way
to filter them.  We could add state to Sema (a "has vla" and "has 
jump" bit) to try to filter this out, but that would be sort of gross
and I'm not convinced it is the best way.  Thoughts welcome.

llvm-svn: 69476
This commit is contained in:
Chris Lattner 2009-04-18 21:00:42 +00:00
parent d497a8bae1
commit 1d4fc1bc6d
2 changed files with 2 additions and 5 deletions

View File

@ -3157,7 +3157,6 @@ Sema::DeclPtrTy Sema::ActOnFinishFunctionBody(DeclPtrTy D, StmtArg BodyArg) {
assert(&getLabelMap() == &FunctionLabelMap && "Didn't pop block right?");
bool HaveLabels = !FunctionLabelMap.empty();
// Check goto/label use.
for (llvm::DenseMap<IdentifierInfo*, LabelStmt*>::iterator
I = FunctionLabelMap.begin(), E = FunctionLabelMap.end(); I != E; ++I) {
@ -3197,9 +3196,8 @@ Sema::DeclPtrTy Sema::ActOnFinishFunctionBody(DeclPtrTy D, StmtArg BodyArg) {
if (!Body) return D;
// If we have labels, verify that goto doesn't jump into scopes illegally.
if (HaveLabels)
JumpScopeChecker(Body, *this);
// Verify that that gotos and switch cases don't jump into scopes illegally.
JumpScopeChecker(Body, *this);
return D;
}

View File

@ -47,7 +47,6 @@ int test6() {
}
void test7(int x) {
foo: // FIXME: remove
switch (x) {
case 1: ;
int a[x]; // expected-note {{jump bypasses initialization of variable length array}}