]> git.ipfire.org Git - thirdparty/gcc.git/commit
re PR c++/48370 (G++ fails to extend reference temporary lifetime in some situations)
authorJason Merrill <jason@redhat.com>
Fri, 4 Nov 2011 12:54:08 +0000 (08:54 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Fri, 4 Nov 2011 12:54:08 +0000 (08:54 -0400)
commitb25dd954c41bf75d2bc892c7e9114908eaa7d314
tree2aea6e5048d38c60ba565aa04710e5fa10eeeadd
parent5972791c345f8e0a750ab5e5cde189ba5064d118
re PR c++/48370 (G++ fails to extend reference temporary lifetime in some situations)

PR c++/48370
* call.c (extend_ref_init_temps, extend_ref_init_temps_1): New.
(set_up_extended_ref_temp): Use it.  Change cleanup parm to VEC.
(initialize_reference): Just call convert_like.
* decl.c (grok_reference_init): Just call initialize_reference.
(build_init_list_var_init): Remove.
(check_initializer): Change cleanup parm to VEC.  Handle references
like other types.  Call perform_implicit_conversion instead
of build_init_list_var_init.  Don't use build_aggr_init for
aggregate initialization of arrays.
(cp_finish_decl): Change cleanup to VEC.
* typeck2.c (store_init_value): Call extend_ref_init_temps.
Use build_vec_init for non-constant arrays.
* init.c (expand_aggr_init_1): Adjust.
(build_vec_init): Avoid re-converting an initializer
that's already digested.
* mangle.c (mangle_ref_init_variable): Add a discriminator.
* cp-tree.h: Adjust.
* typeck.c (convert_for_initialization): Adjust.
* decl2.c (maybe_emit_vtables): Adjust.

From-SVN: r180944
16 files changed:
gcc/cp/ChangeLog
gcc/cp/call.c
gcc/cp/cp-tree.h
gcc/cp/decl.c
gcc/cp/decl2.c
gcc/cp/init.c
gcc/cp/mangle.c
gcc/cp/typeck.c
gcc/cp/typeck2.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/initlist-lifetime1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/eh/array1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/init/lifetime1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/init/ref21.C [new file with mode: 0644]
libiberty/ChangeLog
libiberty/cp-demangle.c