[clang] Make PCH's respect any VFS specified. (PR #106577)

Neil Henning via cfe-commits cfe-commits at lists.llvm.org
Wed Oct 2 07:22:24 PDT 2024


sheredom wrote:

> It looks like it almost works: if I create a module in a virtual path and use `use-external-names: false`, then the module stores the virtual path for its input files.
> 
> E.g.
> 
> ```
> {
>   "version": 0,
>   "use-external-names": false,
>   "roots": [
>     {
>       "contents": [
>         {
>           "external-contents": "/tmp/a/t.h",
>           "name": "t.h",
>           "type": "file"
>         },
>         {
>           "external-contents": "/tmp/b/prefix.h",
>           "name": "prefix.h",
>           "type": "file"
>         },
>         {
>           "external-contents": "/tmp/a/module.modulemap",
>           "name": "module.modulemap",
>           "type": "file"
>         }
>       ],
>       "name": "/root",
>       "type": "directory"
>     },
>   ]
> }
> ```
> 
> Compiled with
> 
> ```
> clang -x c-header /tmp/b/prefix.h -I/root -ivfsoverlay vfs -fmodules -o prefix.h.pch
> ```
> 
> The references to t.h and module.modulemap seem to be stored with `/root` (the virtual path).
> 
> However, I can't remap the prefix header itself
> 
> ```
> clang -x c-header /root/prefix.h -I/root -ivfsoverlay vfs -fmodules -o prefix.h.pch
> clang: error: no such file or directory: '/root/prefix.h'
> clang: error: no input files
> ```
> 
> I guess it's resolving that path outside the VFS. Maybe that's fixable though?

Ok I tried to change my test over like you suggested, and it fails with:

https://github.com/llvm/llvm-project/pull/106577


More information about the cfe-commits mailing list