@@ -2305,9 +2305,22 @@ InputFileInfo ASTReader::getInputFileInfo(ModuleFile &F, unsigned ID) {
23052305 R.StoredTime = static_cast <time_t >(Record[2 ]);
23062306 R.Overridden = static_cast <bool >(Record[3 ]);
23072307 R.Transient = static_cast <bool >(Record[4 ]);
2308- R.TopLevelModuleMap = static_cast <bool >(Record[5 ]);
2309- R.Filename = std::string (Blob);
2310- ResolveImportedPath (F, R.Filename );
2308+ R.TopLevel = static_cast <bool >(Record[5 ]);
2309+ R.ModuleMap = static_cast <bool >(Record[6 ]);
2310+ std::tie (R.FilenameAsRequested , R.Filename ) = [&]() {
2311+ uint16_t AsRequestedLength = Record[7 ];
2312+
2313+ std::string NameAsRequested = Blob.substr (0 , AsRequestedLength).str ();
2314+ std::string Name = Blob.substr (AsRequestedLength).str ();
2315+
2316+ ResolveImportedPath (F, NameAsRequested);
2317+ ResolveImportedPath (F, Name);
2318+
2319+ if (Name.empty ())
2320+ Name = NameAsRequested;
2321+
2322+ return std::make_pair (std::move (NameAsRequested), std::move (Name));
2323+ }();
23112324
23122325 Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance ();
23132326 if (!MaybeEntry) // FIXME this drops errors on the floor.
@@ -2358,7 +2371,7 @@ InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {
23582371 time_t StoredTime = FI.StoredTime ;
23592372 bool Overridden = FI.Overridden ;
23602373 bool Transient = FI.Transient ;
2361- StringRef Filename = FI.Filename ;
2374+ StringRef Filename = FI.FilenameAsRequested ;
23622375 uint64_t StoredContentHash = FI.ContentHash ;
23632376
23642377 OptionalFileEntryRefDegradesToFileEntryPtr File =
@@ -2697,9 +2710,9 @@ ASTReader::ReadControlBlock(ModuleFile &F,
26972710 for (unsigned I = 0 ; I < N; ++I) {
26982711 bool IsSystem = I >= NumUserInputs;
26992712 InputFileInfo FI = getInputFileInfo (F, I + 1 );
2700- Listener->visitInputFile (FI. Filename , IsSystem, FI. Overridden ,
2701- F. Kind == MK_ExplicitModule ||
2702- F.Kind == MK_PrebuiltModule);
2713+ Listener->visitInputFile (
2714+ FI. FilenameAsRequested , IsSystem, FI. Overridden ,
2715+ F. Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule);
27032716 }
27042717 }
27052718
@@ -9248,6 +9261,22 @@ void ASTReader::ReadComments() {
92489261 }
92499262}
92509263
9264+ void ASTReader::visitInputFileInfos (
9265+ serialization::ModuleFile &MF, bool IncludeSystem,
9266+ llvm::function_ref<void (const serialization::InputFileInfo &IFI,
9267+ bool IsSystem)>
9268+ Visitor) {
9269+ unsigned NumUserInputs = MF.NumUserInputFiles ;
9270+ unsigned NumInputs = MF.InputFilesLoaded .size ();
9271+ assert (NumUserInputs <= NumInputs);
9272+ unsigned N = IncludeSystem ? NumInputs : NumUserInputs;
9273+ for (unsigned I = 0 ; I < N; ++I) {
9274+ bool IsSystem = I >= NumUserInputs;
9275+ InputFileInfo IFI = getInputFileInfo (MF, I+1 );
9276+ Visitor (IFI, IsSystem);
9277+ }
9278+ }
9279+
92519280void ASTReader::visitInputFiles (serialization::ModuleFile &MF,
92529281 bool IncludeSystem, bool Complain,
92539282 llvm::function_ref<void (const serialization::InputFile &IF,
@@ -9269,7 +9298,7 @@ void ASTReader::visitTopLevelModuleMaps(
92699298 unsigned NumInputs = MF.InputFilesLoaded .size ();
92709299 for (unsigned I = 0 ; I < NumInputs; ++I) {
92719300 InputFileInfo IFI = getInputFileInfo (MF, I + 1 );
9272- if (IFI.TopLevelModuleMap )
9301+ if (IFI.TopLevel && IFI. ModuleMap )
92739302 if (auto FE = getInputFile (MF, I + 1 ).getFile ())
92749303 Visitor (*FE);
92759304 }
0 commit comments