sammccall created this revision. sammccall added a reviewer: ilya-biryukov. Herald added subscribers: cfe-commits, kadircet, arphaman, jkorous, MaskRay, ioeric.
These get passed to HandleTopLevelDecl() if they happen to have been deserialized for any reason. We don't want to treat them as part of the main file. Repository: rCTE Clang Tools Extra https://reviews.llvm.org/D54303 Files: clangd/ClangdUnit.cpp unittests/clangd/ClangdUnitTests.cpp Index: unittests/clangd/ClangdUnitTests.cpp =================================================================== --- unittests/clangd/ClangdUnitTests.cpp +++ unittests/clangd/ClangdUnitTests.cpp @@ -257,6 +257,20 @@ } } +TEST(ClangdUnitTest, TopLevelDecls) { + TestTU TU; + TU.HeaderCode = R"( + int header1(); + int header2; + )"; + TU.Code = "int main();"; + auto AST = TU.build(); + ASSERT_EQ(AST.getLocalTopLevelDecls().size(), 1u); + NamedDecl *ND = dyn_cast<NamedDecl>(AST.getLocalTopLevelDecls().front()); + ASSERT_TRUE(ND); + ASSERT_EQ("main", ND->getNameAsString()); +} + } // namespace } // namespace clangd } // namespace clang Index: clangd/ClangdUnit.cpp =================================================================== --- clangd/ClangdUnit.cpp +++ clangd/ClangdUnit.cpp @@ -57,6 +57,9 @@ bool HandleTopLevelDecl(DeclGroupRef DG) override { for (Decl *D : DG) { + if (D->isFromASTFile()) + continue; + // ObjCMethodDecl are not actually top-level decls. if (isa<ObjCMethodDecl>(D)) continue;
Index: unittests/clangd/ClangdUnitTests.cpp =================================================================== --- unittests/clangd/ClangdUnitTests.cpp +++ unittests/clangd/ClangdUnitTests.cpp @@ -257,6 +257,20 @@ } } +TEST(ClangdUnitTest, TopLevelDecls) { + TestTU TU; + TU.HeaderCode = R"( + int header1(); + int header2; + )"; + TU.Code = "int main();"; + auto AST = TU.build(); + ASSERT_EQ(AST.getLocalTopLevelDecls().size(), 1u); + NamedDecl *ND = dyn_cast<NamedDecl>(AST.getLocalTopLevelDecls().front()); + ASSERT_TRUE(ND); + ASSERT_EQ("main", ND->getNameAsString()); +} + } // namespace } // namespace clangd } // namespace clang Index: clangd/ClangdUnit.cpp =================================================================== --- clangd/ClangdUnit.cpp +++ clangd/ClangdUnit.cpp @@ -57,6 +57,9 @@ bool HandleTopLevelDecl(DeclGroupRef DG) override { for (Decl *D : DG) { + if (D->isFromASTFile()) + continue; + // ObjCMethodDecl are not actually top-level decls. if (isa<ObjCMethodDecl>(D)) continue;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits