c++: lifetime extension with .* expression [PR53288]
authorJason Merrill <jason@redhat.com>
Tue, 20 Dec 2022 21:27:43 +0000 (16:27 -0500)
committerJason Merrill <jason@redhat.com>
Mon, 23 Jan 2023 00:36:14 +0000 (19:36 -0500)
commit208c6678c25bd9a11e6c5911a4c123cb6b7f3d6e
tree283ef541f7281b197a69c118355fde75b9468e7c
parent7823285a7ae8c516d2dfa96d426692bf2aef571e
c++: lifetime extension with .* expression [PR53288]

This PR points out a case where we are not extending the lifetime of a
temporary when the subobject is denoted by a pointer-to-member operation.
These rules were clarified in C++20 by CWG1299.

There are other cases that also need to be handled under CWG1299, but are
not fixed by this patch.

PR c++/53288
DR 1299

gcc/cp/ChangeLog:

* call.cc (extend_ref_init_temps_1): Handle ptrmem expression.

gcc/testsuite/ChangeLog:

* g++.dg/init/lifetime4.C: New test.
gcc/cp/call.cc
gcc/testsuite/g++.dg/init/lifetime4.C [new file with mode: 0644]