================
@@ -1307,6 +1307,9 @@ void ModuleMap::setInferredModuleAllowedBy(Module *M,
 
 std::error_code
 ModuleMap::canonicalizeModuleMapPath(SmallVectorImpl<char> &Path) {
+  FileManager &FM = SourceMgr.getFileManager();
+  FM.makeAbsolutePath(Path);
----------------
benlangmuir wrote:

> This function (and therefore the scanner) used to return absolute paths even 
> before this patch because it always uses FileManager::getCanonicalName().

Heh, my bad. As the person who wrote that code I should've realized this was 
already absolute.

> Should we call FileManager::makeAbsolutePath() in 
> ModuleMap::canonicalizeModuleMapPath() or in FileManager::getCanonicalName()?

I think the correct behaviour would be that `FileManager::getCanonicalName` 
would use `FixupRelativePath` to apply `-working-directory`, but not use 
`makeAbsolutePath` since that would be inconsistent with how it handles paths 
in other APIs.  The VFS itself is responsible for resolving CWD in 
`getRealPath`.

That being said, if this causes other issues I'm fine with your current 
approach in the meantime.

> Is using ASTWriter::AddPath() with the real path problematic? It only 
> performs textual prefix match with a directory path that's not necessarily 
> the real path.

I don't know how we avoid that without the same issues that motivated 
canonicalizing in the first place. We don't want to be compiling separate 
modules for /a/Foo, /a/foo, /a/b/../foo, /symlink/foo, etc.

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

Reply via email to