]> granicus.if.org Git - clang/commitdiff
unconditionally check for goto correctness. This is because switch
authorChris Lattner <sabre@nondot.org>
Sat, 18 Apr 2009 21:00:42 +0000 (21:00 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 18 Apr 2009 21:00:42 +0000 (21:00 +0000)
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.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69476 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaDecl.cpp
test/Sema/scope-check.c

index b580b01bc45d33a57bade558d6cba2efbd35230e..9424fc685c84899c121b8abb3c8a6b8ceafa3ca3 100644 (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;
 }
index 93120cdf9491c40953906eceb8d2f0a679d023ca..b7e3a21d55f239dd992a6b86fd1d110d19ed6271 100644 (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}}