aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2011-07-09 18:53:56 +0000
committerChris Lattner <sabre@nondot.org>2011-07-09 18:53:56 +0000
commit8dd5cdfc462026648b480adaf774e24bc620f7c3 (patch)
treedf9a4a918b9626df0c18724e38e04348c1fbb49d /lib
parent063481a3ed951a0be68a5ba9225176c3eb8fa320 (diff)
downloadclang-8dd5cdfc462026648b480adaf774e24bc620f7c3.tar.gz
when an enum type is completed, only flush the type cache when
the enum has already been converted. If not, there cannot be any types built on top of it, so there is no need to flush the cache. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@134841 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/CodeGen/CodeGenTypes.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/CodeGen/CodeGenTypes.cpp b/lib/CodeGen/CodeGenTypes.cpp
index e0baf800fb..9375410477 100644
--- a/lib/CodeGen/CodeGenTypes.cpp
+++ b/lib/CodeGen/CodeGenTypes.cpp
@@ -114,8 +114,10 @@ void CodeGenTypes::UpdateCompletedType(const TagDecl *TD) {
// If this is an enum being completed, then we flush all non-struct types from
// the cache. This allows function types and other things that may be derived
// from the enum to be recomputed.
- if (isa<EnumDecl>(TD)) {
- TypeCache.clear();
+ if (const EnumDecl *ED = dyn_cast<EnumDecl>(TD)) {
+ // Only flush the cache if we've actually already converted this type.
+ if (TypeCache.count(ED->getTypeForDecl()))
+ TypeCache.clear();
return;
}