summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaStmt.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Sema/SemaStmt.cpp')
-rw-r--r--clang/lib/Sema/SemaStmt.cpp24
1 files changed, 18 insertions, 6 deletions
diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp
index 990e951c3b6..dfcb65a3532 100644
--- a/clang/lib/Sema/SemaStmt.cpp
+++ b/clang/lib/Sema/SemaStmt.cpp
@@ -165,12 +165,19 @@ Action::OwningStmtResult
Sema::ActOnLabelStmt(SourceLocation IdentLoc, IdentifierInfo *II,
SourceLocation ColonLoc, StmtArg subStmt) {
Stmt *SubStmt = static_cast<Stmt*>(subStmt.release());
+
// Look up the record for this label identifier.
- LabelStmt *&LabelDecl = LabelMap[II];
+ Scope::LabelMapTy::iterator I = ActiveScope->LabelMap.find(II);
+ LabelStmt *LabelDecl;
+
// If not forward referenced or defined already, just create a new LabelStmt.
- if (LabelDecl == 0)
- return Owned(LabelDecl = new (Context) LabelStmt(IdentLoc, II, SubStmt));
+ if (I == ActiveScope->LabelMap.end()) {
+ LabelDecl = new (Context) LabelStmt(IdentLoc, II, SubStmt);
+ ActiveScope->LabelMap.insert(std::make_pair(II, LabelDecl));
+ return Owned(LabelDecl);
+ } else
+ LabelDecl = static_cast<LabelStmt *>(I->second);
assert(LabelDecl->getID() == II && "Label mismatch!");
@@ -672,11 +679,16 @@ Sema::ActOnGotoStmt(SourceLocation GotoLoc, SourceLocation LabelLoc,
return StmtError(Diag(GotoLoc, diag::err_goto_in_block));
// Look up the record for this label identifier.
- LabelStmt *&LabelDecl = LabelMap[LabelII];
+ Scope::LabelMapTy::iterator I = ActiveScope->LabelMap.find(LabelII);
- // If we haven't seen this label yet, create a forward reference.
- if (LabelDecl == 0)
+ LabelStmt *LabelDecl;
+
+ // If not forward referenced or defined already, just create a new LabelStmt.
+ if (I == ActiveScope->LabelMap.end()) {
LabelDecl = new (Context) LabelStmt(LabelLoc, LabelII, 0);
+ ActiveScope->LabelMap.insert(std::make_pair(LabelII, LabelDecl));
+ } else
+ LabelDecl = static_cast<LabelStmt *>(I->second);
return Owned(new (Context) GotoStmt(LabelDecl, GotoLoc, LabelLoc));
}
OpenPOWER on IntegriCloud