diff mbox

Fix up bogus warning (PR sanitizer/59331)

Message ID 20131129113903.GJ31608@redhat.com
State New
Headers show

Commit Message

Marek Polacek Nov. 29, 2013, 11:39 a.m. UTC
On Thu, Nov 28, 2013 at 07:04:43PM -0500, Jason Merrill wrote:
> On 11/28/2013 12:14 PM, Marek Polacek wrote:
> >  	      t = fold_build2 (COMPOUND_EXPR, TREE_TYPE (t),
> >-			       ubsan_instrument_vla (input_location, t), t);
> >+			       ubsan_instrument_vla (input_location, t),
> >+			       /* Cast to void to prevent bogus warning.  */
> >+			       build1 (CONVERT_EXPR, void_type_node, t));
> >  	      finish_expr_stmt (t);
> 
> Why do you need the COMPOUND_EXPR at all?  Why can't you just do
> 
> t = ubsan_instrument_vla (input_location, t);
> 
> ?

You're right, I don't need it at all here.  It was needed in the C FE
and I lived under wrong impression that I'll need it in the C++ as
well.  And of course the warning goes away...  Thanks a lot.

Tested x86_64-unknown-linux-gnu.  Ok now?

2013-11-29  Marek Polacek  <polacek@redhat.com>

	PR sanitizer/59331
cp/
	* decl.c (compute_array_index_type): Don't build COMPOUND_EXPR for
	instrumentation.
testsuite/
	* g++.dg/ubsan/pr59331.C: New test.
	* g++.dg/ubsan/cxx1y-vla.C: Enable -Wall -Wno-unused-variable.
	Disable the -w option.
	* c-c++-common/ubsan/vla-1.c: Likewise.
	* c-c++-common/ubsan/vla-2.c: Likewise.
	* c-c++-common/ubsan/vla-3.c: Don't use the -w option.


	Marek

Comments

Jason Merrill Nov. 29, 2013, 8:52 p.m. UTC | #1
OK.

Jason
diff mbox

Patch

--- gcc/cp/decl.c.mp5	2013-11-28 16:15:42.606690956 +0100
+++ gcc/cp/decl.c	2013-11-29 12:31:17.032996706 +0100
@@ -8434,8 +8434,7 @@  compute_array_index_type (tree name, tre
 		 LE_EXPR rather than LT_EXPR.  */
 	      tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
 				    build_one_cst (TREE_TYPE (itype)));
-	      t = fold_build2 (COMPOUND_EXPR, TREE_TYPE (t),
-			       ubsan_instrument_vla (input_location, t), t);
+	      t = ubsan_instrument_vla (input_location, t);
 	      finish_expr_stmt (t);
 	    }
 	}
--- gcc/testsuite/g++.dg/ubsan/pr59331.C.mp5	2013-11-28 16:29:13.967882392 +0100
+++ gcc/testsuite/g++.dg/ubsan/pr59331.C	2013-11-28 17:54:24.125451857 +0100
@@ -0,0 +1,8 @@ 
+/* { dg-do compile } */
+/* { dg-options "-fsanitize=vla-bound -Wall -Wno-unused-variable" } */
+
+void foo(int i)
+{
+  /* Don't warn here with "value computed is not used".  */
+  char a[i];
+}
--- gcc/testsuite/g++.dg/ubsan/cxx1y-vla.C.mp5	2013-11-28 17:51:51.066755487 +0100
+++ gcc/testsuite/g++.dg/ubsan/cxx1y-vla.C	2013-11-28 18:28:33.411162834 +0100
@@ -1,5 +1,5 @@ 
 /* { dg-do run } */
-/* { dg-options "-fsanitize=vla-bound -w -std=c++1y" } */
+/* { dg-options "-fsanitize=vla-bound -Wall -Wno-unused-variable -std=c++1y" } */
 /* { dg-shouldfail "ubsan" } */
 
 int
--- gcc/testsuite/c-c++-common/ubsan/vla-1.c.mp5	2013-11-28 18:03:32.318664603 +0100
+++ gcc/testsuite/c-c++-common/ubsan/vla-1.c	2013-11-28 18:28:33.410162830 +0100
@@ -1,5 +1,5 @@ 
 /* { dg-do run } */
-/* { dg-options "-fsanitize=vla-bound -w" } */
+/* { dg-options "-fsanitize=vla-bound -Wall -Wno-unused-variable" } */
 
 static int
 bar (void)
--- gcc/testsuite/c-c++-common/ubsan/vla-3.c.mp5	2013-11-28 18:04:25.737865780 +0100
+++ gcc/testsuite/c-c++-common/ubsan/vla-3.c	2013-11-28 18:28:33.411162834 +0100
@@ -1,5 +1,5 @@ 
 /* { dg-do run } */
-/* { dg-options "-fsanitize=vla-bound -w" } */
+/* { dg-options "-fsanitize=vla-bound" } */
 
 /* Don't instrument the arrays here.  */
 int
--- gcc/testsuite/c-c++-common/ubsan/vla-2.c.mp5	2013-11-28 18:03:54.249748290 +0100
+++ gcc/testsuite/c-c++-common/ubsan/vla-2.c	2013-11-28 18:28:33.410162830 +0100
@@ -1,5 +1,5 @@ 
 /* { dg-do run } */
-/* { dg-options "-fsanitize=vla-bound -w" } */
+/* { dg-options "-fsanitize=vla-bound -Wall -Wno-unused-variable" } */
 
 int
 main (void)