From 9b509bca858cbc37ab8e36383f2550d5e2f8a312 Mon Sep 17 00:00:00 2001 From: Kadir Cetinkaya Date: Wed, 6 May 2020 13:16:50 +0200 Subject: [PATCH] Revert "[clangd] Handle PresumedLocations in IncludeCollector" This reverts commit 4f7917c269d65cd3c85eddee19385861c4b8390c as it is breaking windows build bots. --- clang-tools-extra/clangd/Headers.cpp | 56 +------------------ .../clangd/unittests/HeadersTests.cpp | 23 -------- 2 files changed, 3 insertions(+), 76 deletions(-) diff --git a/clang-tools-extra/clangd/Headers.cpp b/clang-tools-extra/clangd/Headers.cpp index ffd6bd1dd6cc..50c375988f7b 100644 --- a/clang-tools-extra/clangd/Headers.cpp +++ b/clang-tools-extra/clangd/Headers.cpp @@ -10,8 +10,6 @@ #include "Compiler.h" #include "SourceCode.h" #include "support/Logger.h" -#include "clang/Basic/SourceLocation.h" -#include "clang/Basic/SourceManager.h" #include "clang/Frontend/CompilerInstance.h" #include "clang/Frontend/CompilerInvocation.h" #include "clang/Frontend/FrontendActions.h" @@ -23,11 +21,6 @@ namespace clang { namespace clangd { namespace { -bool isMainFile(llvm::StringRef FileName, const SourceManager &SM) { - auto FE = SM.getFileManager().getFile(FileName); - return FE && *FE == SM.getFileEntryForID(SM.getMainFileID()); -} - class RecordHeaders : public PPCallbacks { public: RecordHeaders(const SourceManager &SM, IncludeStructure *Out) @@ -37,27 +30,11 @@ public: // in the main file are collected. void InclusionDirective(SourceLocation HashLoc, const Token &IncludeTok, llvm::StringRef FileName, bool IsAngled, - CharSourceRange /*FilenameRange*/, - const FileEntry *File, llvm::StringRef /*SearchPath*/, + CharSourceRange FilenameRange, const FileEntry *File, + llvm::StringRef /*SearchPath*/, llvm::StringRef /*RelativePath*/, const Module * /*Imported*/, SrcMgr::CharacteristicKind FileKind) override { - auto MainFID = SM.getMainFileID(); - // If an include is part of the preamble patch, translate #line directives. - if (InBuiltinFile) { - auto Presumed = SM.getPresumedLoc(HashLoc); - // Presumed locations will have an invalid file id when #line directive - // changes the filename. - if (Presumed.getFileID().isInvalid() && - isMainFile(Presumed.getFilename(), SM)) { - // Now we'll hit the case below. - HashLoc = SM.translateLineCol(MainFID, Presumed.getLine(), - Presumed.getColumn()); - } - } - - // Record main-file inclusions (including those mapped from the preamble - // patch). if (isInsideMainFile(HashLoc, SM)) { Out->MainFileIncludes.emplace_back(); auto &Inc = Out->MainFileIncludes.back(); @@ -70,48 +47,21 @@ public: Inc.FileKind = FileKind; Inc.Directive = IncludeTok.getIdentifierInfo()->getPPKeywordID(); } - - // Record include graph (not just for main-file includes) if (File) { auto *IncludingFileEntry = SM.getFileEntryForID(SM.getFileID(HashLoc)); if (!IncludingFileEntry) { assert(SM.getBufferName(HashLoc).startswith("<") && "Expected #include location to be a file or "); // Treat as if included from the main file. - IncludingFileEntry = SM.getFileEntryForID(MainFID); + IncludingFileEntry = SM.getFileEntryForID(SM.getMainFileID()); } Out->recordInclude(IncludingFileEntry->getName(), File->getName(), File->tryGetRealPathName()); } } - void FileChanged(SourceLocation Loc, FileChangeReason Reason, - SrcMgr::CharacteristicKind FileType, - FileID PrevFID) override { - switch (Reason) { - case PPCallbacks::EnterFile: - if (BuiltinFile.isInvalid() && SM.isWrittenInBuiltinFile(Loc)) { - BuiltinFile = SM.getFileID(Loc); - InBuiltinFile = true; - } - break; - case PPCallbacks::ExitFile: - if (PrevFID == BuiltinFile) - InBuiltinFile = false; - break; - case PPCallbacks::RenameFile: - case PPCallbacks::SystemHeaderPragma: - break; - } - } - private: const SourceManager &SM; - // Set after entering the file. - FileID BuiltinFile; - // Indicates whether file is part of include stack. - bool InBuiltinFile = false; - IncludeStructure *Out; }; diff --git a/clang-tools-extra/clangd/unittests/HeadersTests.cpp b/clang-tools-extra/clangd/unittests/HeadersTests.cpp index b40d883186b2..a6464c64fd28 100644 --- a/clang-tools-extra/clangd/unittests/HeadersTests.cpp +++ b/clang-tools-extra/clangd/unittests/HeadersTests.cpp @@ -16,7 +16,6 @@ #include "clang/Frontend/CompilerInvocation.h" #include "clang/Frontend/FrontendActions.h" #include "clang/Lex/PreprocessorOptions.h" -#include "llvm/Support/FormatVariadic.h" #include "llvm/Support/Path.h" #include "gmock/gmock.h" #include "gtest/gtest.h" @@ -26,9 +25,7 @@ namespace clangd { namespace { using ::testing::AllOf; -using ::testing::Contains; using ::testing::ElementsAre; -using ::testing::Not; using ::testing::UnorderedElementsAre; class HeadersTest : public ::testing::Test { @@ -305,26 +302,6 @@ TEST(Headers, NoHeaderSearchInfo) { llvm::None); } -TEST_F(HeadersTest, PresumedLocations) { - std::string HeaderFile = "implicit_include.h"; - - // Line map inclusion back to main file. - std::string HeaderContents = llvm::formatv("#line 0 \"{0}\"", MainFile); - HeaderContents += R"cpp( -#line 3 -#include )cpp"; - FS.Files[HeaderFile] = HeaderContents; - - // Including through non-builtin file has no effects. - FS.Files[MainFile] = "#include \"implicit_include.h\"\n\n"; - EXPECT_THAT(collectIncludes().MainFileIncludes, - Not(Contains(Written("")))); - - // Now include through built-in file. - CDB.ExtraClangFlags = {"-include", testPath(HeaderFile)}; - EXPECT_THAT(collectIncludes().MainFileIncludes, - Contains(AllOf(IncludeLine(2), Written("")))); -} } // namespace } // namespace clangd } // namespace clang