Hi! This patch shuts up a warning about VLA bounds expression being unused. start_decl adds the (usually SAVE_EXPR) expression to statements to make sure it is evaluated, but if that happens in statement expression where unused value warnings are postponed until we know what is the return value, it will be warned on. Fixed by casting it to void.
Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk/4.6? 2011-05-23 Jakub Jelinek <ja...@redhat.com> PR c/49120 * c-decl.c (start_decl): Convert expr to void_type_node. * gcc.dg/pr49120.c: New test. --- gcc/c-decl.c.jj 2011-05-11 19:39:04.000000000 +0200 +++ gcc/c-decl.c 2011-05-23 14:23:58.000000000 +0200 @@ -3942,7 +3942,7 @@ start_decl (struct c_declarator *declara return 0; if (expr) - add_stmt (expr); + add_stmt (fold_convert (void_type_node, expr)); if (TREE_CODE (decl) != FUNCTION_DECL && MAIN_NAME_P (DECL_NAME (decl))) warning (OPT_Wmain, "%q+D is usually a function", decl); --- gcc/testsuite/gcc.dg/pr49120.c.jj 2011-05-23 14:28:53.000000000 +0200 +++ gcc/testsuite/gcc.dg/pr49120.c 2011-05-23 14:28:26.000000000 +0200 @@ -0,0 +1,11 @@ +/* PR c/49120 */ +/* { dg-do compile } */ +/* { dg-options "-Wall" } */ + +int +main () +{ + int a = 1; + int c = ({ char b[a + 1]; b[0] = 0; b[0]; }); + return c; +} Jakub