@@ -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");
}
}
@@ -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" } */
+}