Remove ActiveScope (revert http://llvm.org/viewvc/llvm-project?view=rev&revision=65694 and http://llvm.org/viewvc/llvm-project?view=rev&revision=66741).

Will replace with something better today...


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66893 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp
index f3983ae..51b2b85 100644
--- a/lib/Sema/SemaDecl.cpp
+++ b/lib/Sema/SemaDecl.cpp
@@ -2631,8 +2631,6 @@
   Decl *decl = static_cast<Decl*>(D);
   FunctionDecl *FD = cast<FunctionDecl>(decl);
 
-  ActiveScope = FnBodyScope;
-    
   // See if this is a redefinition.
   const FunctionDecl *Definition;
   if (FD->getBody(Definition)) {
@@ -2784,29 +2782,17 @@
     return 0;
   }
   PopDeclContext();
-
-  // FIXME: Temporary hack to workaround nested C++ functions. For example:
-  // class C2 {
-  //   void f() {
-  //     class LC1 {
-  //       int m() { return 1; }
-  //     };
-  //   }
-  // };
-  if (ActiveScope == 0)
-    return D;
-    
   // Verify and clean out per-function state.
 
-  bool HaveLabels = !ActiveScope->LabelMap.empty();
+  bool HaveLabels = !LabelMap.empty();
   // Check goto/label use.
-  for (Scope::LabelMapTy::iterator I = ActiveScope->LabelMap.begin(), 
-       E = ActiveScope->LabelMap.end(); I != E; ++I) {
+  for (llvm::DenseMap<IdentifierInfo*, LabelStmt*>::iterator
+       I = LabelMap.begin(), E = LabelMap.end(); I != E; ++I) {
     // Verify that we have no forward references left.  If so, there was a goto
     // or address of a label taken, but no definition of it.  Label fwd
     // definitions are indicated with a null substmt.
-    LabelStmt *L = static_cast<LabelStmt*>(I->second);
-    if (L->getSubStmt() == 0) {
+    if (I->second->getSubStmt() == 0) {
+      LabelStmt *L = I->second;
       // Emit error.
       Diag(L->getIdentLoc(), diag::err_undeclared_label_use) << L->getName();
       
@@ -2828,8 +2814,7 @@
       }
     }
   }
-  // This reset is for both functions and methods.
-  ActiveScope = 0;
+  LabelMap.clear();
 
   if (!Body) return D;