On Thu, Jul 3, 2025 at 9:08 PM Andrew Pinski <quic_apin...@quicinc.com> wrote: > > This is an obvious fix for this small regression. Basically after > r15-328-g5726de79e2154a, > there is a call to tree_expr_nonnegative_warnv_p where the type of the > expression is now > error_mark_node. Though there was only a check if the expression was > error_mark_node. > > Bootstrapped and tested on x86_64-linux-gnu.
Indeed obvious, but also OK. Thanks, Richard. > PR c/118948 > > gcc/ChangeLog: > > * fold-const.cc (tree_expr_nonnegative_warnv_p): Use > error_operand_p instead of checking for error_mark_node directly. > > gcc/testsuite/ChangeLog: > > * gcc.dg/pr118948-1.c: New test. > > Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com> > --- > gcc/fold-const.cc | 2 +- > gcc/testsuite/gcc.dg/pr118948-1.c | 12 ++++++++++++ > 2 files changed, 13 insertions(+), 1 deletion(-) > create mode 100644 gcc/testsuite/gcc.dg/pr118948-1.c > > diff --git a/gcc/fold-const.cc b/gcc/fold-const.cc > index 47492575d00..8867540243b 100644 > --- a/gcc/fold-const.cc > +++ b/gcc/fold-const.cc > @@ -15224,7 +15224,7 @@ bool > tree_expr_nonnegative_warnv_p (tree t, bool *strict_overflow_p, int depth) > { > enum tree_code code; > - if (t == error_mark_node) > + if (error_operand_p (t)) > return false; > > code = TREE_CODE (t); > diff --git a/gcc/testsuite/gcc.dg/pr118948-1.c > b/gcc/testsuite/gcc.dg/pr118948-1.c > new file mode 100644 > index 00000000000..2a46cf14a26 > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/pr118948-1.c > @@ -0,0 +1,12 @@ > +/* { dg-do compile } */ > +/* { dg-options "" } */ > + > +/* PR c/118948 */ > + > +/* Used to ICE in tree_expr_nonnegative_p after an error. */ > + > +void f(void) { > + int i; /* { dg-note "previous" } */ > + for (i = 0; i < 2; i++) ; > + float i; /* { dg-error "conflicting types for" } */ > +} > -- > 2.43.0 >