Skip to content

Commit fd2d5ad

Browse files
authored
[include-cleaner] Make sure exports of stdlib also works for physical files (#72246)
This was creating discrepancy in cases where we might have a physical file entry (e.g. because we followed a source location from a stdlib file) and tried to find its exporters.
1 parent de176d8 commit fd2d5ad

File tree

2 files changed

+6
-14
lines changed

2 files changed

+6
-14
lines changed

clang-tools-extra/include-cleaner/lib/Record.cpp

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -240,20 +240,10 @@ class PragmaIncludes::RecordPragma : public PPCallbacks, public CommentHandler {
240240
// Make sure current include is covered by the export pragma.
241241
if ((Top.Block && HashLine > Top.SeenAtLine) ||
242242
Top.SeenAtLine == HashLine) {
243-
if (IncludedHeader) {
244-
switch (IncludedHeader->kind()) {
245-
case Header::Physical:
246-
Out->IWYUExportBy[IncludedHeader->physical().getUniqueID()]
247-
.push_back(Top.Path);
248-
break;
249-
case Header::Standard:
250-
Out->StdIWYUExportBy[IncludedHeader->standard()].push_back(Top.Path);
251-
break;
252-
case Header::Verbatim:
253-
assert(false && "unexpected Verbatim header");
254-
break;
255-
}
256-
}
243+
if (IncludedFile)
244+
Out->IWYUExportBy[IncludedFile->getUniqueID()].push_back(Top.Path);
245+
if (IncludedHeader && IncludedHeader->kind() == Header::Standard)
246+
Out->StdIWYUExportBy[IncludedHeader->standard()].push_back(Top.Path);
257247
// main-file #include with export pragma should never be removed.
258248
if (Top.SeenAtFile == SM.getMainFileID() && IncludedFile)
259249
Out->ShouldKeep.insert(IncludedFile->getUniqueID());

clang-tools-extra/include-cleaner/unittests/RecordTest.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,8 @@ TEST_F(PragmaIncludeTest, IWYUExportForStandardHeaders) {
452452
auto &FM = Processed.fileManager();
453453
EXPECT_THAT(PI.getExporters(*tooling::stdlib::Header::named("<string>"), FM),
454454
testing::UnorderedElementsAre(FileNamed("export.h")));
455+
EXPECT_THAT(PI.getExporters(llvm::cantFail(FM.getFileRef("string")), FM),
456+
testing::UnorderedElementsAre(FileNamed("export.h")));
455457
}
456458

457459
TEST_F(PragmaIncludeTest, IWYUExportBlock) {

0 commit comments

Comments
 (0)