@@ -11238,11 +11238,12 @@ check_missing_format_attribute (tree ltype, tree rtype)
warning only for non-constant value of type char. */
void
-warn_array_subscript_with_type_char (tree index)
+warn_array_subscript_with_type_char (location_t loc, tree index)
{
if (TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node
&& TREE_CODE (index) != INTEGER_CST)
- warning (OPT_Wchar_subscripts, "array subscript has type %<char%>");
+ warning_at (loc, OPT_Wchar_subscripts,
+ "array subscript has type %<char%>");
}
/* Implement -Wparentheses for the unexpected C precedence rules, to
@@ -1014,7 +1014,7 @@ extern tree builtin_type_for_size (int, bool);
extern void c_common_mark_addressable_vec (tree);
-extern void warn_array_subscript_with_type_char (tree);
+extern void warn_array_subscript_with_type_char (location_t, tree);
extern void warn_about_parentheses (location_t,
enum tree_code,
enum tree_code, tree,
@@ -2501,7 +2501,7 @@ build_array_ref (location_t loc, tree array, tree index)
/* ??? Existing practice has been to warn only when the char
index is syntactically the index, not for char[array]. */
if (!swapped)
- warn_array_subscript_with_type_char (index);
+ warn_array_subscript_with_type_char (loc, index);
/* Apply default promotions *after* noticing character types. */
index = default_conversion (index);
@@ -3081,7 +3081,7 @@ cp_build_array_ref (location_t loc, tree array, tree idx,
{
tree rval, type;
- warn_array_subscript_with_type_char (idx);
+ warn_array_subscript_with_type_char (loc, idx);
if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (idx)))
{
@@ -3191,7 +3191,7 @@ cp_build_array_ref (location_t loc, tree array, tree idx,
return error_mark_node;
}
- warn_array_subscript_with_type_char (idx);
+ warn_array_subscript_with_type_char (loc, idx);
ret = cp_build_indirect_ref (cp_build_binary_op (input_location,
PLUS_EXPR, ar, ind,
@@ -0,0 +1,13 @@
+/* PR c/64423 */
+/* { dg-do compile } */
+/* { dg-options "-Wchar-subscripts" } */
+
+int a[100];
+
+int
+f (char c)
+{
+ return a[c] /* { dg-warning "11:array subscript has type .char." } */
+ + a[c] /* { dg-warning "14:array subscript has type .char." } */
+ + a[c]; /* { dg-warning "16:array subscript has type .char." } */
+}