]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR c++/68983 (FE)
authorJason Merrill <jason@redhat.com>
Fri, 8 Jan 2016 16:01:05 +0000 (11:01 -0500)
committerJason Merrill <jason@gcc.gnu.org>
Fri, 8 Jan 2016 16:01:05 +0000 (11:01 -0500)
PR c++/67557
* call.c (unsafe_copy_elision_p): Look through COMPOUND_EXPR.

From-SVN: r232166

gcc/cp/ChangeLog
gcc/cp/call.c
gcc/testsuite/g++.dg/init/elide4.C [new file with mode: 0644]

index f33e1dbf47558649c1bfa41120d39fdb3beb94df..33680a4fcd7792e950aed829d1b06787cc47864f 100644 (file)
@@ -1,3 +1,9 @@
+2016-01-08  Jason Merrill  <jason@redhat.com>
+
+       PR c++/68983
+       PR c++/67557
+       * call.c (unsafe_copy_elision_p): Look through COMPOUND_EXPR.
+
 2016-01-05  Nathan Sidwell  <nathan@acm.org>
 
        PR c++/58583
index 4c3c4154b2a44e1670623b4fe47f8ce01d9db060..ad2c1bc081a4d717cc37c29fb22f25e10420ee4d 100644 (file)
@@ -7161,6 +7161,9 @@ unsafe_copy_elision_p (tree target, tree exp)
       && resolves_to_fixed_type_p (target, NULL))
     return false;
   tree init = TARGET_EXPR_INITIAL (exp);
+  /* build_compound_expr pushes COMPOUND_EXPR inside TARGET_EXPR.  */
+  while (TREE_CODE (init) == COMPOUND_EXPR)
+    init = TREE_OPERAND (init, 1);
   return (TREE_CODE (init) == AGGR_INIT_EXPR
          && !AGGR_INIT_VIA_CTOR_P (init));
 }
diff --git a/gcc/testsuite/g++.dg/init/elide4.C b/gcc/testsuite/g++.dg/init/elide4.C
new file mode 100644 (file)
index 0000000..f85d6ee
--- /dev/null
@@ -0,0 +1,13 @@
+// PR c++/67557
+
+class A {
+public:
+  A m_fn1();
+  A(A const &);
+  int *L;
+  int ref;
+};
+struct B : A {
+  B();
+};
+B::B() : A((0, m_fn1())) {}