A trivial patch to improve column info of warnings about shift count. Tested x86_64-linux, ok for trunk?
2014-04-25 Marek Polacek <pola...@redhat.com> PR c/60351 * c-typeck.c (build_binary_op): Use location when warning about shift count. * gcc.dg/pr60351.c: New test. diff --git gcc/c/c-typeck.c gcc/c/c-typeck.c index 62c72df..e23c6db 100644 --- gcc/c/c-typeck.c +++ gcc/c/c-typeck.c @@ -10402,7 +10402,7 @@ build_binary_op (location_t location, enum tree_code code, { int_const = false; if (c_inhibit_evaluation_warnings == 0) - warning (0, "right shift count is negative"); + warning_at (location, 0, "right shift count is negative"); } else { @@ -10413,7 +10413,8 @@ build_binary_op (location_t location, enum tree_code code, { int_const = false; if (c_inhibit_evaluation_warnings == 0) - warning (0, "right shift count >= width of type"); + warning_at (location, 0, "right shift count >= width " + "of type"); } } } @@ -10455,14 +10456,15 @@ build_binary_op (location_t location, enum tree_code code, { int_const = false; if (c_inhibit_evaluation_warnings == 0) - warning (0, "left shift count is negative"); + warning_at (location, 0, "left shift count is negative"); } else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0) { int_const = false; if (c_inhibit_evaluation_warnings == 0) - warning (0, "left shift count >= width of type"); + warning_at (location, 0, "left shift count >= width of " + "type"); } } diff --git gcc/testsuite/gcc.dg/pr60351.c gcc/testsuite/gcc.dg/pr60351.c index e69de29..29184d9 100644 --- gcc/testsuite/gcc.dg/pr60351.c +++ gcc/testsuite/gcc.dg/pr60351.c @@ -0,0 +1,11 @@ +/* PR c/60351 */ +/* { dg-do compile } */ + +void +f (int i) +{ + i >> -1; /* { dg-warning "5:right shift count is negative" } */ + i >> 250; /* { dg-warning "5:right shift count >= width of type" } */ + i << -1; /* { dg-warning "5:left shift count is negative" } */ + i << 250; /* { dg-warning "5:left shift count >= width of type" } */ +} Marek