@@ -2465,7 +2465,7 @@ InputFileInfo ASTReader::getInputFileInfo(ModuleFile &F, unsigned ID) {
24652465 return InputFileInfo ();
24662466
24672467 // If we've already loaded this input file, return it.
2468- if (! F.InputFileInfosLoaded [ID - 1 ].Filename . empty ())
2468+ if (F.InputFileInfosLoaded [ID - 1 ].isValid ())
24692469 return F.InputFileInfosLoaded [ID - 1 ];
24702470
24712471 // Go find this input file.
@@ -2502,21 +2502,11 @@ InputFileInfo ASTReader::getInputFileInfo(ModuleFile &F, unsigned ID) {
25022502 R.Transient = static_cast <bool >(Record[4 ]);
25032503 R.TopLevel = static_cast <bool >(Record[5 ]);
25042504 R.ModuleMap = static_cast <bool >(Record[6 ]);
2505- std::tie (R.FilenameAsRequested , R.Filename ) = [&]() {
2506- uint16_t AsRequestedLength = Record[7 ];
2507-
2508- StringRef NameAsRequestedRef = Blob.substr (0 , AsRequestedLength);
2509- StringRef NameRef = Blob.substr (AsRequestedLength);
2510-
2511- std::string NameAsRequested =
2512- ResolveImportedPathAndAllocate (PathBuf, NameAsRequestedRef, F);
2513- std::string Name = ResolveImportedPathAndAllocate (PathBuf, NameRef, F);
2514-
2515- if (Name.empty ())
2516- Name = NameAsRequested;
2517-
2518- return std::make_pair (std::move (NameAsRequested), std::move (Name));
2519- }();
2505+ uint16_t AsRequestedLength = Record[7 ];
2506+ R.UnresolvedImportedFilenameAsRequested = Blob.substr (0 , AsRequestedLength);
2507+ R.UnresolvedImportedFilename = Blob.substr (AsRequestedLength);
2508+ if (R.UnresolvedImportedFilename .empty ())
2509+ R.UnresolvedImportedFilename = R.UnresolvedImportedFilenameAsRequested ;
25202510
25212511 Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance ();
25222512 if (!MaybeEntry) // FIXME this drops errors on the floor.
@@ -2568,7 +2558,8 @@ InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {
25682558 time_t StoredTime = FI.StoredTime ;
25692559 bool Overridden = FI.Overridden ;
25702560 bool Transient = FI.Transient ;
2571- StringRef Filename = FI.FilenameAsRequested ;
2561+ auto Filename =
2562+ ResolveImportedPath (PathBuf, FI.UnresolvedImportedFilenameAsRequested , F);
25722563 uint64_t StoredContentHash = FI.ContentHash ;
25732564
25742565 // For standard C++ modules, we don't need to check the inputs.
@@ -2584,17 +2575,17 @@ InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {
25842575 Overridden = false ;
25852576 }
25862577
2587- auto File = FileMgr.getOptionalFileRef (Filename, /* OpenFile=*/ false );
2578+ auto File = FileMgr.getOptionalFileRef (* Filename, /* OpenFile=*/ false );
25882579
25892580 // For an overridden file, create a virtual file with the stored
25902581 // size/timestamp.
25912582 if ((Overridden || Transient || SkipChecks) && !File)
2592- File = FileMgr.getVirtualFileRef (Filename, StoredSize, StoredTime);
2583+ File = FileMgr.getVirtualFileRef (* Filename, StoredSize, StoredTime);
25932584
25942585 if (!File) {
25952586 if (Complain) {
25962587 std::string ErrorStr = " could not find file '" ;
2597- ErrorStr += Filename;
2588+ ErrorStr += * Filename;
25982589 ErrorStr += " ' referenced by AST file '" ;
25992590 ErrorStr += F.FileName ;
26002591 ErrorStr += " '" ;
@@ -2614,7 +2605,7 @@ InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {
26142605 if ((!Overridden && !Transient) && !SkipChecks &&
26152606 SM.isFileOverridden (*File)) {
26162607 if (Complain)
2617- Error (diag::err_fe_pch_file_overridden, Filename);
2608+ Error (diag::err_fe_pch_file_overridden, * Filename);
26182609
26192610 // After emitting the diagnostic, bypass the overriding file to recover
26202611 // (this creates a separate FileEntry).
@@ -2706,7 +2697,7 @@ InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {
27062697 // The top-level PCH is stale.
27072698 StringRef TopLevelPCHName (ImportStack.back ()->FileName );
27082699 Diag (diag::err_fe_ast_file_modified)
2709- << Filename << moduleKindForDiagnostic (ImportStack.back ()->Kind )
2700+ << * Filename << moduleKindForDiagnostic (ImportStack.back ()->Kind )
27102701 << TopLevelPCHName << FileChange.Kind
27112702 << (FileChange.Old && FileChange.New )
27122703 << llvm::itostr (FileChange.Old .value_or (0 ))
@@ -2715,7 +2706,7 @@ InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {
27152706 // Print the import stack.
27162707 if (ImportStack.size () > 1 ) {
27172708 Diag (diag::note_pch_required_by)
2718- << Filename << ImportStack[0 ]->FileName ;
2709+ << * Filename << ImportStack[0 ]->FileName ;
27192710 for (unsigned I = 1 ; I < ImportStack.size (); ++I)
27202711 Diag (diag::note_pch_required_by)
27212712 << ImportStack[I-1 ]->FileName << ImportStack[I]->FileName ;
@@ -2963,8 +2954,10 @@ ASTReader::ReadControlBlock(ModuleFile &F,
29632954 for (unsigned I = 0 ; I < N; ++I) {
29642955 bool IsSystem = I >= NumUserInputs;
29652956 InputFileInfo FI = getInputFileInfo (F, I + 1 );
2957+ auto FilenameAsRequested = ResolveImportedPath (
2958+ PathBuf, FI.UnresolvedImportedFilenameAsRequested , F);
29662959 Listener->visitInputFile (
2967- FI. FilenameAsRequested , IsSystem, FI.Overridden ,
2960+ * FilenameAsRequested, IsSystem, FI.Overridden ,
29682961 F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule);
29692962 }
29702963 }
0 commit comments