@@ -2454,7 +2454,7 @@ InputFileInfo ASTReader::getInputFileInfo(ModuleFile &F, unsigned ID) {
24542454 return InputFileInfo ();
24552455
24562456 // If we've already loaded this input file, return it.
2457- if (! F.InputFileInfosLoaded [ID - 1 ].Filename . empty ())
2457+ if (F.InputFileInfosLoaded [ID - 1 ].isValid ())
24582458 return F.InputFileInfosLoaded [ID - 1 ];
24592459
24602460 // Go find this input file.
@@ -2491,21 +2491,11 @@ InputFileInfo ASTReader::getInputFileInfo(ModuleFile &F, unsigned ID) {
24912491 R.Transient = static_cast <bool >(Record[4 ]);
24922492 R.TopLevel = static_cast <bool >(Record[5 ]);
24932493 R.ModuleMap = static_cast <bool >(Record[6 ]);
2494- std::tie (R.FilenameAsRequested , R.Filename ) = [&]() {
2495- uint16_t AsRequestedLength = Record[7 ];
2496-
2497- StringRef NameAsRequestedRef = Blob.substr (0 , AsRequestedLength);
2498- StringRef NameRef = Blob.substr (AsRequestedLength);
2499-
2500- std::string NameAsRequested =
2501- ResolveImportedPathAndAllocate (PathBuf, NameAsRequestedRef, F);
2502- std::string Name = ResolveImportedPathAndAllocate (PathBuf, NameRef, F);
2503-
2504- if (Name.empty ())
2505- Name = NameAsRequested;
2506-
2507- return std::make_pair (std::move (NameAsRequested), std::move (Name));
2508- }();
2494+ uint16_t AsRequestedLength = Record[7 ];
2495+ R.UnresolvedImportedFilenameAsRequested = Blob.substr (0 , AsRequestedLength);
2496+ R.UnresolvedImportedFilename = Blob.substr (AsRequestedLength);
2497+ if (R.UnresolvedImportedFilename .empty ())
2498+ R.UnresolvedImportedFilename = R.UnresolvedImportedFilenameAsRequested ;
25092499
25102500 Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance ();
25112501 if (!MaybeEntry) // FIXME this drops errors on the floor.
@@ -2557,7 +2547,8 @@ InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {
25572547 time_t StoredTime = FI.StoredTime ;
25582548 bool Overridden = FI.Overridden ;
25592549 bool Transient = FI.Transient ;
2560- StringRef Filename = FI.FilenameAsRequested ;
2550+ auto Filename =
2551+ ResolveImportedPath (PathBuf, FI.UnresolvedImportedFilenameAsRequested , F);
25612552 uint64_t StoredContentHash = FI.ContentHash ;
25622553
25632554 // For standard C++ modules, we don't need to check the inputs.
@@ -2573,17 +2564,17 @@ InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {
25732564 Overridden = false ;
25742565 }
25752566
2576- auto File = FileMgr.getOptionalFileRef (Filename, /* OpenFile=*/ false );
2567+ auto File = FileMgr.getOptionalFileRef (* Filename, /* OpenFile=*/ false );
25772568
25782569 // For an overridden file, create a virtual file with the stored
25792570 // size/timestamp.
25802571 if ((Overridden || Transient || SkipChecks) && !File)
2581- File = FileMgr.getVirtualFileRef (Filename, StoredSize, StoredTime);
2572+ File = FileMgr.getVirtualFileRef (* Filename, StoredSize, StoredTime);
25822573
25832574 if (!File) {
25842575 if (Complain) {
25852576 std::string ErrorStr = " could not find file '" ;
2586- ErrorStr += Filename;
2577+ ErrorStr += * Filename;
25872578 ErrorStr += " ' referenced by AST file '" ;
25882579 ErrorStr += F.FileName ;
25892580 ErrorStr += " '" ;
@@ -2603,7 +2594,7 @@ InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {
26032594 if ((!Overridden && !Transient) && !SkipChecks &&
26042595 SM.isFileOverridden (*File)) {
26052596 if (Complain)
2606- Error (diag::err_fe_pch_file_overridden, Filename);
2597+ Error (diag::err_fe_pch_file_overridden, * Filename);
26072598
26082599 // After emitting the diagnostic, bypass the overriding file to recover
26092600 // (this creates a separate FileEntry).
@@ -2699,7 +2690,7 @@ InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {
26992690 // The top-level PCH is stale.
27002691 StringRef TopLevelPCHName (ImportStack.back ()->FileName );
27012692 Diag (diag::err_fe_ast_file_modified)
2702- << Filename << moduleKindForDiagnostic (ImportStack.back ()->Kind )
2693+ << * Filename << moduleKindForDiagnostic (ImportStack.back ()->Kind )
27032694 << TopLevelPCHName << FileChange.Kind
27042695 << (FileChange.Old && FileChange.New )
27052696 << llvm::itostr (FileChange.Old .value_or (0 ))
@@ -2708,7 +2699,7 @@ InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {
27082699 // Print the import stack.
27092700 if (ImportStack.size () > 1 ) {
27102701 Diag (diag::note_pch_required_by)
2711- << Filename << ImportStack[0 ]->FileName ;
2702+ << * Filename << ImportStack[0 ]->FileName ;
27122703 for (unsigned I = 1 ; I < ImportStack.size (); ++I)
27132704 Diag (diag::note_pch_required_by)
27142705 << ImportStack[I-1 ]->FileName << ImportStack[I]->FileName ;
@@ -2948,8 +2939,10 @@ ASTReader::ReadControlBlock(ModuleFile &F,
29482939 for (unsigned I = 0 ; I < N; ++I) {
29492940 bool IsSystem = I >= NumUserInputs;
29502941 InputFileInfo FI = getInputFileInfo (F, I + 1 );
2942+ auto FilenameAsRequested = ResolveImportedPath (
2943+ PathBuf, FI.UnresolvedImportedFilenameAsRequested , F);
29512944 Listener->visitInputFile (
2952- FI. FilenameAsRequested , IsSystem, FI.Overridden ,
2945+ * FilenameAsRequested, IsSystem, FI.Overridden ,
29532946 F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule);
29542947 }
29552948 }
0 commit comments