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 <pola...@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. --- 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) Marek