// 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
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"] = "";
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);