result = TREE_OPERAND (result, 1);
bool cst = TREE_CODE_CLASS (TREE_CODE (result)) == tcc_constant;
-
tree exprtype = TREE_TYPE (expr);
+ tree result_diag;
+ /* We're interested in the actual numerical value here, not its ASCII
+ representation. */
+ if (cst && TYPE_MAIN_VARIANT (TREE_TYPE (result)) == char_type_node)
+ result_diag = fold_convert (integer_type_node, result);
+ else
+ result_diag = result;
if (TREE_CODE (expr) == INTEGER_CST
&& (TREE_CODE (type) == INTEGER_TYPE
"changes value from %qE to %qE")
: G_("unsigned conversion from %qT to %qT "
"changes value from %qE to %qE")),
- exprtype, type, expr, result);
+ exprtype, type, expr, result_diag);
else
warning_at (loc, OPT_Woverflow,
(TYPE_UNSIGNED (exprtype)
warning_at (loc, OPT_Woverflow,
"overflow in conversion from %qT to %qT "
"changes value from %qE to %qE",
- exprtype, type, expr, result);
+ exprtype, type, expr, result_diag);
else
warning_at (loc, OPT_Woverflow,
"overflow in conversion from %qT to %qT "
warning_at (loc, OPT_Woverflow,
"overflow in conversion from %qT to %qT "
"changes value from %qE to %qE",
- exprtype, type, expr, result);
+ exprtype, type, expr, result_diag);
else
warning_at (loc, OPT_Woverflow,
"overflow in conversion from %qT to %qT "
warning_at (loc, OPT_Woverflow,
"overflow in conversion from %qT to %qT "
"changes value from %qE to %qE",
- exprtype, type, expr, result);
+ exprtype, type, expr, result_diag);
else
warning_at (loc, OPT_Woverflow,
"overflow in conversion from %qT to %qT "