From: Kadir Cetinkaya Date: Wed, 8 Feb 2023 18:53:55 +0000 (+0100) Subject: [clangd] Drop includes from disabled PP regions in preamble patch X-Git-Tag: upstream/17.0.6~17759 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=19659b5f0dd1a1dcf745cf058d042ada2d4ff061;p=platform%2Fupstream%2Fllvm.git [clangd] Drop includes from disabled PP regions in preamble patch In rest of the clangd functionality we treat these includes as non-existent. Do so under preamble patching. Depends on D143197 Differential Revision: https://reviews.llvm.org/D143597 --- diff --git a/clang-tools-extra/clangd/Preamble.cpp b/clang-tools-extra/clangd/Preamble.cpp index cdb8db1..f99c414 100644 --- a/clang-tools-extra/clangd/Preamble.cpp +++ b/clang-tools-extra/clangd/Preamble.cpp @@ -685,13 +685,16 @@ PreamblePatch PreamblePatch::create(llvm::StringRef FileName, // Include already present in the baseline preamble. Set resolved path and // put into preamble includes. if (It != ExistingIncludes.end()) { - auto &PatchedInc = PP.PreambleIncludes.emplace_back(); - // Copy everything from existing include, apart from the location, when - // it's coming from baseline preamble. - if (It->second) + if (It->second) { + // If this header is included in an active region of the baseline + // preamble, preserve it. + auto &PatchedInc = PP.PreambleIncludes.emplace_back(); + // Copy everything from existing include, apart from the location, + // when it's coming from baseline preamble. PatchedInc = *It->second; - PatchedInc.HashLine = Inc.HashLine; - PatchedInc.HashOffset = Inc.HashOffset; + PatchedInc.HashLine = Inc.HashLine; + PatchedInc.HashOffset = Inc.HashOffset; + } continue; } // Include is new in the modified preamble. Inject it into the patch and diff --git a/clang-tools-extra/clangd/unittests/PreambleTests.cpp b/clang-tools-extra/clangd/unittests/PreambleTests.cpp index ac46bfd..ae353f9 100644 --- a/clang-tools-extra/clangd/unittests/PreambleTests.cpp +++ b/clang-tools-extra/clangd/unittests/PreambleTests.cpp @@ -170,6 +170,9 @@ TEST(PreamblePatchTest, PatchesPreambleIncludes) { auto TU = TestTU::withCode(R"cpp( #include "a.h" // IWYU pragma: keep #include "c.h" + #ifdef FOO + #include "d.h" + #endif )cpp"); TU.AdditionalFiles["a.h"] = "#include \"b.h\""; TU.AdditionalFiles["b.h"] = ""; @@ -178,10 +181,14 @@ TEST(PreamblePatchTest, PatchesPreambleIncludes) { auto BaselinePreamble = buildPreamble( TU.Filename, *buildCompilerInvocation(PI, Diags), PI, true, nullptr); // We drop c.h from modified and add a new header. Since the latter is patched - // we should only get a.h in preamble includes. + // we should only get a.h in preamble includes. d.h shouldn't be part of the + // preamble, as it's coming from a disabled region. TU.Code = R"cpp( #include "a.h" #include "b.h" + #ifdef FOO + #include "d.h" + #endif )cpp"; auto PP = PreamblePatch::createFullPatch(testPath(TU.Filename), TU.inputs(FS), *BaselinePreamble);