File tree Expand file tree Collapse file tree 2 files changed +14
-14
lines changed Expand file tree Collapse file tree 2 files changed +14
-14
lines changed Original file line number Diff line number Diff line change @@ -232,6 +232,17 @@ class PragmaIncludes::RecordPragma : public PPCallbacks, public CommentHandler {
232
232
void checkForExport (FileID IncludingFile, int HashLine,
233
233
std::optional<Header> IncludedHeader,
234
234
OptionalFileEntryRef IncludedFile) {
235
+ auto AddExport = [&] {
236
+ auto ExportingFileName = SM.getFileEntryForID (IncludingFile)->getName ();
237
+ if (IncludedFile) {
238
+ Out->IWYUExportBy [IncludedFile->getUniqueID ()].push_back (
239
+ ExportingFileName);
240
+ }
241
+ if (IncludedHeader && IncludedHeader->kind () == Header::Standard) {
242
+ Out->StdIWYUExportBy [IncludedHeader->standard ()].push_back (
243
+ ExportingFileName);
244
+ }
245
+ };
235
246
if (ExportStack.empty ())
236
247
return ;
237
248
auto &Top = ExportStack.back ();
@@ -240,20 +251,7 @@ class PragmaIncludes::RecordPragma : public PPCallbacks, public CommentHandler {
240
251
// Make sure current include is covered by the export pragma.
241
252
if ((Top.Block && HashLine > Top.SeenAtLine ) ||
242
253
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
- }
254
+ AddExport ();
257
255
// main-file #include with export pragma should never be removed.
258
256
if (Top.SeenAtFile == SM.getMainFileID () && IncludedFile)
259
257
Out->ShouldKeep .insert (IncludedFile->getUniqueID ());
Original file line number Diff line number Diff line change @@ -452,6 +452,8 @@ TEST_F(PragmaIncludeTest, IWYUExportForStandardHeaders) {
452
452
auto &FM = Processed.fileManager ();
453
453
EXPECT_THAT (PI.getExporters (*tooling::stdlib::Header::named (" <string>" ), FM),
454
454
testing::UnorderedElementsAre (FileNamed (" export.h" )));
455
+ EXPECT_THAT (PI.getExporters (llvm::cantFail (FM.getFileRef (" string" )), FM),
456
+ testing::UnorderedElementsAre (FileNamed (" export.h" )));
455
457
}
456
458
457
459
TEST_F (PragmaIncludeTest, IWYUExportBlock) {
You can’t perform that action at this time.
0 commit comments