diff --git a/clang/include/clang/AST/ASTImporterSharedState.h b/clang/include/clang/AST/ASTImporterSharedState.h --- a/clang/include/clang/AST/ASTImporterSharedState.h +++ b/clang/include/clang/AST/ASTImporterSharedState.h @@ -39,6 +39,9 @@ /// never cleared (like ImportedFromDecls). llvm::DenseMap ImportErrors; + /// Set of the newly created declarations. + llvm::DenseSet NewDecls; + // FIXME put ImportedFromDecls here! // And from that point we can better encapsulate the lookup table. @@ -74,6 +77,10 @@ void setImportDeclError(Decl *To, ImportError Error) { ImportErrors[To] = Error; } + + bool isNewDecl(const Decl *ToD) const { return NewDecls.count(ToD); } + + void markAsNewDecl(Decl *ToD) { NewDecls.insert(ToD); } }; } // namespace clang diff --git a/clang/lib/AST/ASTImporter.cpp b/clang/lib/AST/ASTImporter.cpp --- a/clang/lib/AST/ASTImporter.cpp +++ b/clang/lib/AST/ASTImporter.cpp @@ -285,6 +285,7 @@ ToD = CreateFun(std::forward(args)...); // Keep track of imported Decls. Importer.RegisterImportedDecl(FromD, ToD); + Importer.SharedState->markAsNewDecl(ToD); InitializeImportedDecl(FromD, ToD); return false; // A new Decl is created. } diff --git a/clang/unittests/AST/ASTImporterTest.cpp b/clang/unittests/AST/ASTImporterTest.cpp --- a/clang/unittests/AST/ASTImporterTest.cpp +++ b/clang/unittests/AST/ASTImporterTest.cpp @@ -7686,6 +7686,38 @@ EXPECT_TRUE(ToX->getInClassInitializer()); } +TEST_P(ASTImporterOptionSpecificTestBase, isNewDecl) { + Decl *FromTU = getTuDecl( + R"( + int bar() { + return 0; + } + void other() { + bar(); + } + )", + Lang_CXX11); + Decl *ToTU = getToTuDecl( + R"( + int bar() { + return 0; + } + )", + Lang_CXX11); + auto *FromOther = FirstDeclMatcher().match( + FromTU, functionDecl(hasName("other"))); + ASSERT_TRUE(FromOther); + + auto *ToOther = Import(FromOther, Lang_CXX11); + ASSERT_TRUE(ToOther); + + auto *ToBar = FirstDeclMatcher().match( + ToTU, functionDecl(hasName("bar"))); + + EXPECT_TRUE(SharedStatePtr->isNewDecl(ToOther)); + EXPECT_FALSE(SharedStatePtr->isNewDecl(ToBar)); +} + INSTANTIATE_TEST_SUITE_P(ParameterizedTests, ASTImporterLookupTableTest, DefaultTestValuesForRunOptions);