@@ -2616,6 +2616,18 @@ bool ASTReader::shouldDisableValidationForFile(
2616
2616
return false ;
2617
2617
}
2618
2618
2619
+ namespace {
2620
+
2621
+ std::pair<StringRef, StringRef>
2622
+ getUnresolvedInputFilenames (const ASTReader::RecordData &Record,
2623
+ const StringRef InputBlob) {
2624
+ uint16_t AsRequestedLength = Record[7 ];
2625
+ return {InputBlob.substr (0 , AsRequestedLength),
2626
+ InputBlob.substr (AsRequestedLength)};
2627
+ }
2628
+
2629
+ } // namespace
2630
+
2619
2631
InputFileInfo ASTReader::getInputFileInfo (ModuleFile &F, unsigned ID) {
2620
2632
// If this ID is bogus, just return an empty input file.
2621
2633
if (ID == 0 || ID > F.InputFileInfosLoaded .size ())
@@ -2659,11 +2671,12 @@ InputFileInfo ASTReader::getInputFileInfo(ModuleFile &F, unsigned ID) {
2659
2671
R.Transient = static_cast <bool >(Record[4 ]);
2660
2672
R.TopLevel = static_cast <bool >(Record[5 ]);
2661
2673
R.ModuleMap = static_cast <bool >(Record[6 ]);
2662
- uint16_t AsRequestedLength = Record[7 ];
2663
- R.UnresolvedImportedFilenameAsRequested = Blob.substr (0 , AsRequestedLength);
2664
- R.UnresolvedImportedFilename = Blob.substr (AsRequestedLength);
2665
- if (R.UnresolvedImportedFilename .empty ())
2666
- R.UnresolvedImportedFilename = R.UnresolvedImportedFilenameAsRequested ;
2674
+ auto [UnresolvedFilenameAsRequested, UnresolvedFilename] =
2675
+ getUnresolvedInputFilenames (Record, Blob);
2676
+ R.UnresolvedImportedFilenameAsRequested = UnresolvedFilenameAsRequested;
2677
+ R.UnresolvedImportedFilename = UnresolvedFilename.empty ()
2678
+ ? UnresolvedFilenameAsRequested
2679
+ : UnresolvedFilename;
2667
2680
2668
2681
Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance ();
2669
2682
if (!MaybeEntry) // FIXME this drops errors on the floor.
@@ -5834,13 +5847,27 @@ bool ASTReader::readASTFileControlBlock(
5834
5847
break ;
5835
5848
case INPUT_FILE:
5836
5849
bool Overridden = static_cast <bool >(Record[3 ]);
5837
- const size_t FilenameAsRequestedLength = Record[7 ] + 1 ;
5838
- auto ResolvedFilenameAsRequested = ResolveImportedPath (
5839
- PathBuf, Blob.substr (0 , FilenameAsRequestedLength), ModuleDir);
5840
- StringRef ExternalFilename = Blob.substr (FilenameAsRequestedLength);
5850
+
5851
+ auto [UnresolvedFilenameAsRequested, UnresolvedFilename] =
5852
+ getUnresolvedInputFilenames (Record, Blob);
5853
+ TemporarilyOwnedStringRef ResolvedFilenameAsRequested =
5854
+ ResolveImportedPath (PathBuf, UnresolvedFilenameAsRequested,
5855
+ ModuleDir);
5856
+ const std::string ResolvedFilenameAsRequestedStr =
5857
+ ResolvedFilenameAsRequested->str ();
5858
+
5859
+ std::string ResolvedFilenameStr;
5860
+ if (!UnresolvedFilename.empty ()) {
5861
+ SmallString<0 > FilenameBuf;
5862
+ FilenameBuf.reserve (256 );
5863
+ auto ResolvedFilename =
5864
+ ResolveImportedPath (FilenameBuf, UnresolvedFilename, ModuleDir);
5865
+ ResolvedFilenameStr = ResolvedFilename->str ();
5866
+ }
5867
+
5841
5868
shouldContinue = Listener.visitInputFile (
5842
- ResolvedFilenameAsRequested-> str (), ExternalFilename ,
5843
- isSystemFile, Overridden,
5869
+ ResolvedFilenameAsRequestedStr, ResolvedFilenameStr, isSystemFile ,
5870
+ Overridden,
5844
5871
/* IsExplicitModule=*/ false );
5845
5872
break ;
5846
5873
}
0 commit comments