[Bug c++/48370] G++ fails to extend reference temporary lifetime in some situations
jason at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Nov 4 12:54:00 GMT 2011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48370
--- Comment #2 from Jason Merrill <jason at gcc dot gnu.org> 2011-11-04 12:54:14 UTC ---
Author: jason
Date: Fri Nov 4 12:54:08 2011
New Revision: 180944
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=180944
Log:
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.
Added:
trunk/gcc/testsuite/g++.dg/cpp0x/initlist-lifetime1.C
trunk/gcc/testsuite/g++.dg/eh/array1.C
trunk/gcc/testsuite/g++.dg/init/lifetime1.C
trunk/gcc/testsuite/g++.dg/init/ref21.C
Modified:
trunk/gcc/cp/ChangeLog
trunk/gcc/cp/call.c
trunk/gcc/cp/cp-tree.h
trunk/gcc/cp/decl.c
trunk/gcc/cp/decl2.c
trunk/gcc/cp/init.c
trunk/gcc/cp/mangle.c
trunk/gcc/cp/typeck.c
trunk/gcc/cp/typeck2.c
trunk/gcc/testsuite/ChangeLog
trunk/libiberty/ChangeLog
trunk/libiberty/cp-demangle.c
More information about the Gcc-bugs
mailing list