From 69be8f0364441429494e46a8b8d4827cdad318fd Mon Sep 17 00:00:00 2001 From: jason Date: Thu, 23 Oct 2003 06:41:31 +0000 Subject: [PATCH] PR c++/12726 * tree.c (build_target_expr_with_type): Don't call force_rvalue for CONSTRUCTORs. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@72837 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/tree.c | 6 ++++-- gcc/testsuite/g++.dg/ext/complit2.C | 17 +++++++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/ext/complit2.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 5096f74..2ce7c03 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2003-10-23 Jason Merrill + + PR c++/12726 + * tree.c (build_target_expr_with_type): Don't call force_rvalue + for CONSTRUCTORs. + 2003-10-22 Kazu Hirata * call.c: Fix comment formatting. diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index bfcf741..63fdb94 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -311,10 +311,12 @@ build_target_expr_with_type (tree init, tree type) if (TREE_CODE (init) == TARGET_EXPR) return init; else if (CLASS_TYPE_P (type) && !TYPE_HAS_TRIVIAL_INIT_REF (type) - && TREE_CODE (init) != COND_EXPR) + && TREE_CODE (init) != COND_EXPR + && TREE_CODE (init) != CONSTRUCTOR) /* We need to build up a copy constructor call. COND_EXPR is a special case because we already have copies on the arms and we don't want - another one here. */ + another one here. A CONSTRUCTOR is aggregate initialization, which + is handled separately. */ return force_rvalue (init); slot = build_decl (VAR_DECL, NULL_TREE, type); diff --git a/gcc/testsuite/g++.dg/ext/complit2.C b/gcc/testsuite/g++.dg/ext/complit2.C new file mode 100644 index 0000000..a8fe874 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/complit2.C @@ -0,0 +1,17 @@ +// PR c++/12726 +// { dg-options "" } + +#include + +struct foobar { + std::string s; +}; + +int main(int argc, char **argv) +{ + foobar fb; + + fb = (foobar) { "abcd" }; + + return 0; +} -- 2.7.4