This testcase was broken by the patch kit; upon investigation the best fix is to try to use the location of the relevant expression when warning about conversions, rather than input_location, falling back to the latter via EXPR_LOC_OR_LOC.
One dg-warning needed moving, since the caret is on the "?" of the conditional here: uchar_x = bar != 0 ~~~~~~~~ ? (unsigned char) 1024 ^~~~~~~~~~~~~~~~~~~~~~ : -1; ~~~~ gcc/cp/ChangeLog: * cvt.c (cp_convert_and_check): When warning about conversions, attempt to use the location of "expr" if available, otherwise falling back to the old behavior of using input_location. gcc/testsuite/ChangeLog: * g++.dg/warn/pr35635.C (func3): Update location of a dg-warning. --- gcc/cp/cvt.c | 4 ++-- gcc/testsuite/g++.dg/warn/pr35635.C | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c index ebca004..f24f280 100644 --- a/gcc/cp/cvt.c +++ b/gcc/cp/cvt.c @@ -650,8 +650,8 @@ cp_convert_and_check (tree type, tree expr, tsubst_flags_t complain) folded_result = fold_simple (folded_result); if (!TREE_OVERFLOW_P (folded) && folded_result != error_mark_node) - warnings_for_convert_and_check (input_location, type, folded, - folded_result); + warnings_for_convert_and_check (EXPR_LOC_OR_LOC (expr, input_location), + type, folded, folded_result); } return result; diff --git a/gcc/testsuite/g++.dg/warn/pr35635.C b/gcc/testsuite/g++.dg/warn/pr35635.C index de68ceb..19345c5 100644 --- a/gcc/testsuite/g++.dg/warn/pr35635.C +++ b/gcc/testsuite/g++.dg/warn/pr35635.C @@ -62,9 +62,9 @@ void func3() /* At least one branch of ? does not fit in the destination, thus warn. */ uchar_x = bar != 0 ? 2.1 : 10; /* { dg-warning "conversion" } */ - uchar_x = bar != 0 /* { dg-warning "negative integer implicitly converted to unsigned type" } */ - ? (unsigned char) 1024 - : -1; + uchar_x = bar != 0 + ? (unsigned char) 1024 /* { dg-warning "negative integer implicitly converted to unsigned type" } */ + : -1; } void func4() -- 1.8.5.3