================
@@ -5834,13 +5847,27 @@ bool ASTReader::readASTFileControlBlock(
           break;
         case INPUT_FILE:
           bool Overridden = static_cast<bool>(Record[3]);
-          const size_t FilenameAsRequestedLength = Record[7] + 1;
-          auto ResolvedFilenameAsRequested = ResolveImportedPath(
-              PathBuf, Blob.substr(0, FilenameAsRequestedLength), ModuleDir);
-          StringRef ExternalFilename = Blob.substr(FilenameAsRequestedLength);
+
+          auto [UnresolvedFilenameAsRequested, UnresolvedFilename] =
+              getUnresolvedInputFilenames(Record, Blob);
+          TemporarilyOwnedStringRef ResolvedFilenameAsRequested =
+              ResolveImportedPath(PathBuf, UnresolvedFilenameAsRequested,
+                                  ModuleDir);
+          const std::string ResolvedFilenameAsRequestedStr =
+              ResolvedFilenameAsRequested->str();
+
+          std::string ResolvedFilenameStr;
+          if (!UnresolvedFilename.empty()) {
+            SmallString<0> FilenameBuf;
+            FilenameBuf.reserve(256);
+            auto ResolvedFilename =
+                ResolveImportedPath(FilenameBuf, UnresolvedFilename, 
ModuleDir);
+            ResolvedFilenameStr = ResolvedFilename->str();
+          }
----------------
cyndyishida wrote:

> The visitor API makes it sound like it'll pass Filename even if it's the same 
> as FilenameAsRequested (which is what I'd expect it to), but here we pass an 
> empty string. Why?

I was thinking that clients would always prefer the external filename and it's 
only useful when it differs from the requested file name, so checking against 
an empty value would be easier for clients but I can see that's not a fair 
assumption. Will update to your suggestion. 

https://github.com/llvm/llvm-project/pull/132237
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to