Bigcheese added a comment.

In D95514#2528324 <https://reviews.llvm.org/D95514#2528324>, @jansvoboda11 
wrote:

> In D95514#2526064 <https://reviews.llvm.org/D95514#2526064>, @dexonsmith 
> wrote:
>
>> Well, the compiler developers are the users, since `-cc1` isn't for 
>> end-users. I acknowledge it's a tradeoff. IMO, without actually seeing it in 
>> practice, it seems a bit nicer to design this away entirely. But maybe 
>> having a `=` is more valuable than I think.
>
>
>
>> For string options:
>>
>> - If `-cc1` accepts only `-opt string`, no need for allocation.
>> - If `-cc1` accepts only `-opt=string`, the fully-spelled option is on the 
>> original command-line. `ExistingStrings.find()` should turn it up when 
>> calling `Strings.save()`.
>> - If `-cc1` accepts both `-opt=string` and `-opt string` canonicalize to 
>> `-opt string` when generating. No need for allocation.
>>
>> For numeric / enum options we'll need to allocate, but the allocation 
>> doesn't have to live past running the parser.
>>
>> The only problem would be if `string` gets canonicalized / rewritten somehow 
>> during parse + generate, or if an enum value is additionally saved as a 
>> string value.
>
> We can definitely ask around how would people feel about that.
>
>>>> Consider that some callers may parse the full command-line and then drop 
>>>> everything but one options class. That pattern wouldn’t work anymore since 
>>>> the StringRefs won’t be valid.
>>>
>>> Ah, that's right. So if we don't go with the allocation-less approach, we'd 
>>> need to take `StringAllocator` from the client that also ensures proper 
>>> lifetimes.
>>
>> Maybe it wouldn't be terrible to have a `RoundTrip` arg on each options 
>> class. When you assign to the CompilerInvocation, it copies the shared ptr 
>> into each of the options classes, so that the pool stays alive as long as 
>> one of them has it.
>
> I think this is the most robust solution.
>
> Moving `BumpPtrAllocator`/`StringSaver` into `CompilerInvocation` will become 
> problematic once we start round-tripping more option classes.
>
> I've looked through all option classes in `CompilerInvocation`, and 
> `AnalyzerOptions::Config` seems to be the only member that stores non-owning 
> references to command line arguments.
> I think the best path forward is to change `AnalyzerOptions` to take 
> ownership and avoid dealing with complicated lifetimes. We can look into 
> removing allocations later, as an optional optimization.
> What do you think?

I think that makes sense given the rest of `CompilerInvocation` is owning.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D95514

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

Reply via email to