Hi,
this diagnostic issue is about spurious "value computed is not used"
warnings with VLAs, emitted by convert_to_void (on the TYPE_SIZE, a
MULT_EXPR): the warning is already gated by !TREE_NO_WARNING (expr) thus
setting it at the end of build_cplus_array_type seems a rather
straightforward fix. The below, which regtests fine, simply acts on any
MULT_EXPR as TYPE_SIZE, which I think should be fine, but, in case the
idea is basically Ok, we could also consider the more complex but more
sophisticated variably_modified_type_p?
Thanks,
Paolo.
/////////////////////
/cp
2012-10-30 Paolo Carlini <paolo.carl...@oracle.com>
PR c++/54583
* tree.c (build_cplus_array_type): Set TREE_NO_WARNING on the
TYPE_SIZE of VLAs.
/testsuite
2012-10-30 Paolo Carlini <paolo.carl...@oracle.com>
PR c++/54583
* g++.dg/ext/vla13.C: New.
Index: testsuite/g++.dg/ext/vla13.C
===================================================================
--- testsuite/g++.dg/ext/vla13.C (revision 0)
+++ testsuite/g++.dg/ext/vla13.C (working copy)
@@ -0,0 +1,8 @@
+// PR c++/54583
+// { dg-options "-Wunused-value" }
+
+void fred()
+{
+ int n=10;
+ double (*x)[n];
+}
Index: cp/tree.c
===================================================================
--- cp/tree.c (revision 192997)
+++ cp/tree.c (working copy)
@@ -824,6 +824,10 @@ build_cplus_array_type (tree elt_type, tree index_
}
}
+ /* Avoid spurious warnings with VLAs (c++/54583). */
+ if (TYPE_SIZE (t) && TREE_CODE (TYPE_SIZE (t)) == MULT_EXPR)
+ TREE_NO_WARNING (TYPE_SIZE (t)) = 1;
+
/* Push these needs up so that initialization takes place
more easily. */
TYPE_NEEDS_CONSTRUCTING (t)