[PATCH] c++: Fix up constexpr evaluation of arguments passed by invisible reference [PR97388]
Jason Merrill
jason@redhat.com
Thu Oct 29 16:11:52 GMT 2020
On 10/29/20 11:40 AM, Jakub Jelinek wrote:
> On Thu, Oct 29, 2020 at 11:09:05AM -0400, Jason Merrill wrote:
>> I think this isn't enough; if bar calls foo twice, the second call will find
>> the value in the hash table and not change the temporary, so the destructor
>> will throw. I think we also need to set non_constant_args if the argument
>> type has a non-trivial destructor, so we don't try to memoize the call.
>
> For the testcases with constexpr new in there it wouldn't be memoized
> already, but you are right that for other cases making it non_constant_args
> is desirable.
>
>> Then setting arg back to orig_arg isn't needed, because we don't do the
>> first unsharing for the hash table.
>
> Yes.
>
>> And then I think that the second unsharing is unnecessary for an argument in
>> a non-memoized call, because we will have already unshared it when making
>> the copy in the caller.
>
> I'm not sure about this one, but if it works, I'm not against that, the less
> unsharing the better for compile time memory unless it breaks stuff.
>
> I'll bootstrap/regtest your patchset (or do you want to do that)?
I already did, thanks.
Jason
More information about the Gcc-patches
mailing list