OSDN Git Service

* tree.c (build_vec_init_elt): Strip TARGET_EXPR.
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 9 Jul 2011 17:01:11 +0000 (17:01 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 9 Jul 2011 17:01:11 +0000 (17:01 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@176084 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/tree.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/regress/regress5.C [new file with mode: 0644]

index cbdc4d8..c19e8b3 100644 (file)
@@ -1,3 +1,7 @@
+2011-07-09  Jason Merrill  <jason@redhat.com>
+
+       * tree.c (build_vec_init_elt): Strip TARGET_EXPR.
+
 2011-07-08  Jason Merrill  <jason@redhat.com>
 
        PR c++/45437
index dcd85e4..4ef89c4 100644 (file)
@@ -511,6 +511,11 @@ build_vec_init_elt (tree type, tree init, tsubst_flags_t complain)
                                    complain);
   release_tree_vector (argvec);
 
+  /* For a trivial constructor, build_over_call creates a TARGET_EXPR.  But
+     we don't want one here because we aren't creating a temporary.  */
+  if (TREE_CODE (init) == TARGET_EXPR)
+    init = TARGET_EXPR_INITIAL (init);
+
   return init;
 }
 
index 5b8be33..badb65e 100644 (file)
@@ -1,3 +1,7 @@
+2011-07-09  Jason Merrill  <jason@redhat.com>
+
+       * g++.dg/cpp0x/regress/regress5.C: New.
+
 2011-07-08  Jason Merrill  <jason@redhat.com>
 
        PR c++/45437
diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/regress5.C b/gcc/testsuite/g++.dg/cpp0x/regress/regress5.C
new file mode 100644 (file)
index 0000000..b193591
--- /dev/null
@@ -0,0 +1,16 @@
+// { dg-options -std=c++0x }
+
+struct A
+{
+  int i;
+  A(int);
+};
+
+struct B
+{
+  virtual void f();
+  A ar[3];
+};
+
+extern B b;
+B b2(b);