vedgy added a comment.

In D139774#4041308 <https://reviews.llvm.org/D139774#4041308>, @aaron.ballman 
wrote:

> Is your concern essentially that someone will add a new use to put files in a 
> temp directory and not have access to this information from ASTUnit? Or do 
> you have other concerns in mind?
>
> We should certainly investigate whether there are other uses of temp files 
> from libclang as part of these changes. It's possible we'll find a situation 
> that makes my suggestion untenable because we don't have easy access to the 
> information we need.

The temporary directory could be used, now or in future, by some support code, 
which is used indirectly by libclang. I found the following uses potentially 
relevant to libclang:

- `Driver::GetTemporaryDirectory(StringRef Prefix)` calls 
`llvm::sys::fs::createUniqueDirectory(Prefix, Path);`
- `StandardInstrumentations` => `DotCfgChangeReporter` calls 
`sys::fs::createUniquePath("cfgdot-%%%%%%.dot", SV, true);`
- There are plenty of `createTemporaryFile()` uses in llvm and clang. Some of 
them are likely used by libclang.

I don't know how to efficiently check whether or not each of these indirect 
`system_temp_directory()` uses is in turn used by libclang. Even if they aren't 
know, they might be later, when libclang API grows.

On a different note, do you think overriding temporary directory path is useful 
only to libclang and not likely to be useful to any other LLVM API users?

>> Another issue is with the `FileSystemOptions` part: this class is widely 
>> used in Clang. So adding a member to it could adversely affect performance 
>> of unrelated code.
>
> It's good to keep an eye on that, but I'm not too worried about the overhead 
> from it (I don't see uses in AST nodes). We can keep an eye on 
> https://llvm-compile-time-tracker.com/ to see if there is a surprising 
> compile time increase though.

[in case we pursue this design approach, which I currently don't feel is right] 
Why not add a temporary path data member into `class ASTUnit` under the 
`FileSystemOptions FileSystemOpts` member, not inside it? So that other code is 
not burdened with unused struct member, and to be able to use a more suitable 
type, like `SmallString` for the temporary path buffer.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D139774/new/

https://reviews.llvm.org/D139774

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to