diff --git a/clang-tools-extra/clangd/IncludeCleaner.cpp b/clang-tools-extra/clangd/IncludeCleaner.cpp --- a/clang-tools-extra/clangd/IncludeCleaner.cpp +++ b/clang-tools-extra/clangd/IncludeCleaner.cpp @@ -133,7 +133,8 @@ void add(SourceLocation Loc) { add(SM.getFileID(Loc), Loc); } void add(FileID FID, SourceLocation Loc) { - if (FID.isInvalid()) + // Check if Loc is not written in a physical file. + if (FID.isInvalid() || SM.isWrittenInBuiltinFile(Loc)) return; assert(SM.isInFileID(Loc, FID)); if (Loc.isFileID()) { diff --git a/clang-tools-extra/clangd/unittests/IncludeCleanerTests.cpp b/clang-tools-extra/clangd/unittests/IncludeCleanerTests.cpp --- a/clang-tools-extra/clangd/unittests/IncludeCleanerTests.cpp +++ b/clang-tools-extra/clangd/unittests/IncludeCleanerTests.cpp @@ -234,7 +234,7 @@ "")); } -TEST(IncludeCleaner, ScratchBuffer) { +TEST(IncludeCleaner, VirtualBuffers) { TestTU TU; TU.Filename = "foo.cpp"; TU.Code = R"cpp( @@ -242,6 +242,8 @@ using flags::FLAGS_FOO; + int y = CLI; + int concat(a, b) = 42; )cpp"; // The pasting operator in combination with DEFINE_FLAG will create @@ -258,6 +260,7 @@ #define ab x #define concat(x, y) x##y )cpp"; + TU.ExtraArgs = {"-DCLI=42"}; ParsedAST AST = TU.build(); auto &SM = AST.getSourceManager(); auto &Includes = AST.getIncludeStructure();