diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/CodeGen/CodeGenTypes.cpp | 6 |
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; } |