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
>

Reply via email to