On Thu, Feb 20, 2014 at 05:52:09PM +0530, Prathamesh Kulkarni wrote: > Show column number of left operand instead of comma operator > in the warning "left-hand operand of comma expression has no effect" > > Example: > ax.c:4:6: warning: left-hand operand of comma expression has no effect > [-Wunused-value] > x , y; > ^
Perhaps a PR should be opened for this. > Instead of comma operator, show location of left-operand: > ax.c:4:3: warning: left-hand operand of comma expression has no effect > [-Wunused-value] > x , y; > ^ But this patch only handles LHS of comma expression, and not RHS, right? IMHO we should do both at the same time (that would be for 5.0 I'd say). > Bootstrapped on x86_64-unknown-linux-gnu. > > [gcc/c] > * c-parser.c (c_parser_expression): Pass tloc instead of loc to > build_compound_expr. > > [gcc/testsuite] > * gcc.dg/Wunused-value-4.c: New test case. > > I am not able to figure out, how to write test-case that > raises multiple warnings. example: (void) x, y, z. > I tried this: > /* { dg-warning "8:left-hand operand of comma expression has no effect > |11:left-hand operand of comma expression has no > effect" } */ > x has column number 8 and y has column number 11, but this doesn't > seem to work (the patch works correctly). For this you'll need a second dg-warning that specifies the line, so e.g. something like /* { dg-warning "11:left-hand operand of comma expression has no effect" "" { target *-*-* } 10 } */ (Not reviewing the patch per se now.) > Thanks and Regards, > Prathamesh > Index: gcc/c/c-parser.c > =================================================================== > --- gcc/c/c-parser.c (revision 207916) > +++ gcc/c/c-parser.c (working copy) > @@ -7838,7 +7838,6 @@ c_parser_expression (c_parser *parser) > { > struct c_expr next; > tree lhsval; > - location_t loc = c_parser_peek_token (parser)->location; > location_t expr_loc; > c_parser_consume_token (parser); > expr_loc = c_parser_peek_token (parser)->location; > @@ -7849,9 +7848,10 @@ c_parser_expression (c_parser *parser) > mark_exp_read (lhsval); > next = c_parser_expr_no_commas (parser, NULL); > next = convert_lvalue_to_rvalue (expr_loc, next, true, false); > - expr.value = build_compound_expr (loc, expr.value, next.value); > + expr.value = build_compound_expr (tloc, expr.value, next.value); > expr.original_code = COMPOUND_EXPR; > expr.original_type = next.original_type; > + tloc = expr_loc; > } > return expr; > } > Index: gcc/testsuite/gcc.dg/Wunused-value-4.c > =================================================================== > --- gcc/testsuite/gcc.dg/Wunused-value-4.c (revision 0) > +++ gcc/testsuite/gcc.dg/Wunused-value-4.c (working copy) > @@ -0,0 +1,12 @@ > +/* { dg-do compile } */ > +/* { dg-options "-Wunused-value" } */ > + > +void foo(int x); > + > +int a[10]; > + > +void f(void) > +{ > + foo ((1, 2)); /* { dg-warning "9: left-hand operand of > comma expression has no effect" } */ > + a[0x03, 004] = 1992; /* { dg-warning "5: left-hand operand of > comma expression has no effect" } */ > +} Marek