diff mbox

RFC: PATCH: PR c++/45709: [4.3/4.4/4.5/4.6 regression] internal compiler error: in add_phi_arg, at tree-phinodes.c:395

Message ID 20100917224910.GA24823@intel.com
State New
Headers show

Commit Message

H.J. Lu Sept. 17, 2010, 10:49 p.m. UTC
Hi,

This patch reverts the build_aggr_init change in revision 127647:

http://gcc.gnu.org/ml/gcc-cvs/2007-08/msg00541.html

Does it make any senses?

Thanks.


H.J.
---
gcc/

2010-09-17  H.J. Lu  <hongjiu.lu@intel.com>

	PR c++/45709
	* cp/init.c (build_aggr_init): Properly set type.

gcc/testsuite/

2010-09-17  H.J. Lu  <hongjiu.lu@intel.com>

	PR c++/45709
	* g++.dg/torture/pr45709.C: New.
diff mbox

Patch

diff --git a/gcc/cp/init.c b/gcc/cp/init.c
index 189bcbe..0f67695 100644
--- a/gcc/cp/init.c
+++ b/gcc/cp/init.c
@@ -1316,6 +1316,7 @@  build_aggr_init (tree exp, tree init, int flags, tsubst_flags_t complain)
     /* Just know that we've seen something for this node.  */
     TREE_USED (exp) = 1;
 
+  TREE_TYPE (exp) = TYPE_MAIN_VARIANT (type);
   is_global = begin_init_stmts (&stmt_expr, &compound_stmt);
   destroy_temps = stmts_are_full_exprs_p ();
   current_stmt_tree ()->stmts_are_full_exprs_p = 0;
--- /dev/null	2010-09-09 09:16:30.485584932 -0700
+++ gcc/gcc/testsuite/g++.dg/torture/pr45709.C	2010-09-17 15:15:22.000000000 -0700
@@ -0,0 +1,17 @@ 
+struct Region {
+    int storage[4];
+    int count;
+};
+static inline Region subtract(int lhs)
+{
+  Region reg;
+  int* storage = reg.storage;
+  if (lhs > 0)
+    storage++;
+  reg.count = storage - reg.storage;
+  return reg;
+}
+void bar(int a)
+{
+  const Region copyBack(subtract(a));
+}