PR c++/61465
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 20 Sep 2014 00:54:55 +0000 (00:54 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 20 Sep 2014 00:54:55 +0000 (00:54 +0000)
* call.c (convert_like_real) [ck_identity]: Call mark_rvalue_use
after pulling out an element from a CONSTRUCTOR.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@215413 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/call.c
gcc/testsuite/g++.dg/warn/Wunused-parm-6.C [new file with mode: 0644]

index e7e0a3c..f5092fb 100644 (file)
@@ -1,3 +1,9 @@
+2014-09-19  Jason Merrill  <jason@redhat.com>
+
+       PR c++/61465
+       * call.c (convert_like_real) [ck_identity]: Call mark_rvalue_use
+       after pulling out an element from a CONSTRUCTOR.
+
 2014-09-18  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/63248
index 161235b..8f1b91a 100644 (file)
@@ -6206,7 +6206,6 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
        return expr;
       }
     case ck_identity:
-      expr = mark_rvalue_use (expr);
       if (BRACE_ENCLOSED_INITIALIZER_P (expr))
        {
          int nelts = CONSTRUCTOR_NELTS (expr);
@@ -6217,6 +6216,7 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
          else
            gcc_unreachable ();
        }
+      expr = mark_rvalue_use (expr);
 
       if (type_unknown_p (expr))
        expr = instantiate_type (totype, expr, complain);
diff --git a/gcc/testsuite/g++.dg/warn/Wunused-parm-6.C b/gcc/testsuite/g++.dg/warn/Wunused-parm-6.C
new file mode 100644 (file)
index 0000000..95fb7e2
--- /dev/null
@@ -0,0 +1,8 @@
+// PR c++/61465
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wunused-but-set-parameter" }
+
+struct Foo {
+  Foo(void* x) : y{static_cast<char*>(x)} {}
+  char* y;
+};