diff options
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/AST/ASTImporter.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/clang/lib/AST/ASTImporter.cpp b/clang/lib/AST/ASTImporter.cpp index dc3281afba4..16fd7e6184e 100644 --- a/clang/lib/AST/ASTImporter.cpp +++ b/clang/lib/AST/ASTImporter.cpp @@ -434,13 +434,21 @@ QualType ASTImporter::Import(QualType FromT) { if (FromT.isNull()) return QualType(); - // FIXME: Cache type mappings? + // Check whether we've already imported this type. + llvm::DenseMap<Type *, Type *>::iterator Pos + = ImportedTypes.find(FromT.getTypePtr()); + if (Pos != ImportedTypes.end()) + return ToContext.getQualifiedType(Pos->second, FromT.getQualifiers()); + // Import the type ASTNodeImporter Importer(*this); QualType ToT = Importer.Visit(FromT.getTypePtr()); if (ToT.isNull()) return ToT; + // Record the imported type. + ImportedTypes[FromT.getTypePtr()] = ToT.getTypePtr(); + return ToContext.getQualifiedType(ToT, FromT.getQualifiers()); } |