diff options
author | Steve Naroff <snaroff@apple.com> | 2009-03-13 15:38:40 +0000 |
---|---|---|
committer | Steve Naroff <snaroff@apple.com> | 2009-03-13 15:38:40 +0000 |
commit | caaacecb2b64e6d2e402533baffda4cb540f4145 (patch) | |
tree | e7a2837c8d3b6aa2df6b1ecaa00f2f809e0c64f5 /lib/Sema/SemaDecl.cpp | |
parent | 610e81d6b7248ce4be4be2252b03a5d4052c9835 (diff) |
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
Diffstat (limited to 'lib/Sema/SemaDecl.cpp')
-rw-r--r-- | lib/Sema/SemaDecl.cpp | 27 |
1 files changed, 6 insertions, 21 deletions
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index f3983aee45..51b2b853a8 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -2631,8 +2631,6 @@ Sema::DeclTy *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, DeclTy *D) { 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 @@ Sema::DeclTy *Sema::ActOnFinishFunctionBody(DeclTy *D, StmtArg BodyArg) { 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 @@ Sema::DeclTy *Sema::ActOnFinishFunctionBody(DeclTy *D, StmtArg BodyArg) { } } } - // This reset is for both functions and methods. - ActiveScope = 0; + LabelMap.clear(); if (!Body) return D; |