From: Jason Merrill Date: Thu, 23 Oct 2003 06:41:31 +0000 (-0400) Subject: re PR c++/12726 (ICE (segfault) on trivial code) X-Git-Tag: releases/gcc-3.4.0~2779 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4b5aa8815e853a213360c7e35c0a2dad4ba9897f;p=thirdparty%2Fgcc.git re PR c++/12726 (ICE (segfault) on trivial code) PR c++/12726 * tree.c (build_target_expr_with_type): Don't call force_rvalue for CONSTRUCTORs. From-SVN: r72837 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 5096f74d4f1a..2ce7c036abc7 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 bfcf741563be..63fdb948c7f1 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 000000000000..a8fe874360ae --- /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; +}