summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-03-09 23:43:07 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-03-09 23:43:07 +0000
commit187c973e380ded660d941fd61af62b38fc877b73 (patch)
treed5b3f13ee7cfc87ce83caac5c543ec279dc45e6e
parent6f74418bd7abb9eb768e5c33c0f577e70d6b07b4 (diff)
downloadbcm5719-llvm-187c973e380ded660d941fd61af62b38fc877b73.tar.gz
bcm5719-llvm-187c973e380ded660d941fd61af62b38fc877b73.zip
Reapply r66316, it got accidentally reverted in r66317.
llvm-svn: 66506
-rw-r--r--clang/include/clang/Basic/IdentifierTable.h31
1 files changed, 17 insertions, 14 deletions
diff --git a/clang/include/clang/Basic/IdentifierTable.h b/clang/include/clang/Basic/IdentifierTable.h
index 7630811f21d..df0200f1e70 100644
--- a/clang/include/clang/Basic/IdentifierTable.h
+++ b/clang/include/clang/Basic/IdentifierTable.h
@@ -267,24 +267,27 @@ public:
HashTable.GetOrCreateValue(NameStart, NameEnd);
IdentifierInfo *II = Entry.getValue();
+ if (II) return *II;
- if (!II) {
- while (1) {
- if (ExternalLookup) {
- II = ExternalLookup->get(NameStart, NameEnd);
- if (II) break;
- }
-
- void *Mem = getAllocator().Allocate<IdentifierInfo>();
- II = new (Mem) IdentifierInfo();
- break;
+ // No entry; if we have an external lookup, look there first.
+ if (ExternalLookup) {
+ II = ExternalLookup->get(NameStart, NameEnd);
+ if (II) {
+ // Cache in the StringMap for subsequent lookups.
+ Entry.setValue(II);
+ return *II;
}
-
- Entry.setValue(II);
- II->Entry = &Entry;
}
- assert(II->Entry != 0);
+ // Lookups failed, make a new IdentifierInfo.
+ void *Mem = getAllocator().Allocate<IdentifierInfo>();
+ II = new (Mem) IdentifierInfo();
+ Entry.setValue(II);
+
+ // Make sure getName() knows how to find the IdentifierInfo
+ // contents.
+ II->Entry = &Entry;
+
return *II;
}
OpenPOWER on IntegriCloud