jansvoboda11 wrote:

> If the resource dir is outside of the cwd then you would have to have an 
> absolute path here anyway, wouldn't you?

Yes. But my understanding was that's not what you're interested in. I thought 
you're trying to fix the situation where your resource dir is in the CWD, so 
that's the context I'm assuming. Is that correct?

>> This is now always storing an absolute path into 
>> Header::PathRelativeToRootModuleDirectory for built-in headers

> Wouldn't this always have been the case? I'll check shortly with a resource 
> dir picked up via toolchain bundle layout.

I was considering your test case, where we'd previously store 
`"resource-dir/include/float.h"` into 
`Header::PathRelativeToRootModuleDirectory` (knowing that ends up causing 
failures down the line). Now we're essentially guaranteeing that for built-in 
headers, the path is absolute (`"/path/to/cwd/resource-dir/include/float.h"`), 
contrary to what the member name suggests. I find that a bit confusing.

> This is the use case I am trying to support, via -fmodule-file-home-is-cwd ...

But `-fmodule-file-home-is-cwd` will not go as far as fixing up the contents of 
`SourceManager` buffers. So while all the paths you serialize into the PCM will 
get "relativized", the `<module-includes>` buffer would still contain the 
absolute path in the form of:

```
#include "/path/to/cwd/resource-dir/include/float.h"
```

If you originally compiled the PCM on machine A that has CWD set to 
`"/path/to/cwd"`, you could probably still successfully load it on machine B 
with CWD set to `"/blah"`. But if you re-compiled the PCM on machine B, the 
output would not be the same, since the PCM would now embed this into the 
`<module-includes>` buffer instead:

```
#include "/blah/resource-dir/include/float.h"
```

Is that not a concern for your use-case?

>> Maybe prepending #pragma before #include of each builtin header?

> Could you expand on this? Not sure I get the idea.

I was going to suggest keeping `Header::PathRelativeToRootModuleDirectory` as 
`"float.h"`, and generating this into the `<module-includes>` buffer:

```
#pragma prefix the following header path with the builtin includes directory
#include "float.h"
```

This would ensure both machines A and B produce identical PCM files.

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

Reply via email to