diff options
author | Jason Merrill <jason@redhat.com> | 2011-11-04 08:54:08 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2011-11-04 08:54:08 -0400 |
commit | b25dd954c41bf75d2bc892c7e9114908eaa7d314 (patch) | |
tree | 2aea6e5048d38c60ba565aa04710e5fa10eeeadd /gcc/cp/decl2.c | |
parent | 5972791c345f8e0a750ab5e5cde189ba5064d118 (diff) | |
download | gcc-b25dd954c41bf75d2bc892c7e9114908eaa7d314.zip gcc-b25dd954c41bf75d2bc892c7e9114908eaa7d314.tar.gz gcc-b25dd954c41bf75d2bc892c7e9114908eaa7d314.tar.bz2 |
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
Diffstat (limited to 'gcc/cp/decl2.c')
-rw-r--r-- | gcc/cp/decl2.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index be9044b..32b5c7e 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -1877,10 +1877,12 @@ maybe_emit_vtables (tree ctype) if (TREE_TYPE (DECL_INITIAL (vtbl)) == 0) { - tree expr = store_init_value (vtbl, DECL_INITIAL (vtbl), LOOKUP_NORMAL); + VEC(tree,gc)* cleanups = NULL; + tree expr = store_init_value (vtbl, DECL_INITIAL (vtbl), &cleanups, + LOOKUP_NORMAL); /* It had better be all done at compile-time. */ - gcc_assert (!expr); + gcc_assert (!expr && !cleanups); } /* Write it out. */ |