re PR c++/58325 (Spurious unused-but-set-variable warning on delete[] of volatile...
authorJakub Jelinek <jakub@redhat.com>
Mon, 9 Sep 2013 17:12:15 +0000 (19:12 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Mon, 9 Sep 2013 17:12:15 +0000 (19:12 +0200)
PR c++/58325
* init.c (build_vec_delete): Call mark_rvalue_use on base.

* g++.dg/warn/Wunused-var-21.C: New test.

From-SVN: r202411

gcc/cp/ChangeLog
gcc/cp/init.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/warn/Wunused-var-21.C [new file with mode: 0644]

index bc9c49857f2fa4119a48bcf6978065f06237d331..cca0229dc0a1a37ea38606f37d3a55a1a5349a3e 100644 (file)
@@ -1,3 +1,8 @@
+2013-09-09  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/58325
+       * init.c (build_vec_delete): Call mark_rvalue_use on base.
+
 2013-09-09  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/43452
index df7dc7d3a485985119c299ec72064fab1b4e08eb..8fabdcdb94886c9ad3482884d124146603338e9c 100644 (file)
@@ -4128,6 +4128,7 @@ build_vec_delete (tree base, tree maxindex,
       tree cookie_addr;
       tree size_ptr_type = build_pointer_type (sizetype);
 
+      base = mark_rvalue_use (base);
       if (TREE_SIDE_EFFECTS (base))
        {
          base_init = get_target_expr (base);
index befd28d26909e9639a6db3c96952b069d7955f80..7da14443bb5b5c4eb97379faf5aac59a3c17f9bf 100644 (file)
@@ -1,5 +1,8 @@
 2013-09-09  Jakub Jelinek  <jakub@redhat.com>
 
+       PR c++/58325
+       * g++.dg/warn/Wunused-var-21.C: New test.
+
        PR tree-optimization/58364
        * gcc.c-torture/execute/pr58364.c: New test.
 
diff --git a/gcc/testsuite/g++.dg/warn/Wunused-var-21.C b/gcc/testsuite/g++.dg/warn/Wunused-var-21.C
new file mode 100644 (file)
index 0000000..d279e59
--- /dev/null
@@ -0,0 +1,31 @@
+// PR c++/58325
+// { dg-do compile }
+// { dg-options "-Wunused" }
+
+void
+f1 ()
+{
+  int *volatile a = new int[1];
+  delete[] a;
+}
+
+void
+f2 ()
+{
+  int *b = new int[1];
+  delete[] b;
+}
+
+void
+f3 ()
+{
+  int *volatile c = new int;
+  delete c;
+}
+
+void
+f4 ()
+{
+  int *d = new int;
+  delete d;
+}