On Sun, Nov 20, 2022 at 2:26 AM apinski--- via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > From: Andrew Pinski <apin...@marvell.com> > > This another one of these ICE after error issues with the > gimplifier and a fallout from r12-3278-g823685221de986af. > The problem here is gimplify_modify_expr does not > check if either from or to was an error operand. > This adds the check and fixes the ICE. > > OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.
OK. > gcc/ChangeLog: > > * gimplify.cc (gimplify_modify_expr): If > either *from_p or *to_p were error_operand > return early. > > gcc/testsuite/ChangeLog: > > * gcc.dg/redecl-23.c: New test. > * gcc.dg/redecl-24.c: New test. > * gcc.dg/redecl-25.c: New test. > --- > gcc/gimplify.cc | 3 +++ > gcc/testsuite/gcc.dg/redecl-23.c | 6 ++++++ > gcc/testsuite/gcc.dg/redecl-24.c | 6 ++++++ > gcc/testsuite/gcc.dg/redecl-25.c | 9 +++++++++ > 4 files changed, 24 insertions(+) > create mode 100644 gcc/testsuite/gcc.dg/redecl-23.c > create mode 100644 gcc/testsuite/gcc.dg/redecl-24.c > create mode 100644 gcc/testsuite/gcc.dg/redecl-25.c > > diff --git a/gcc/gimplify.cc b/gcc/gimplify.cc > index c62a966e918..02415cb1b5c 100644 > --- a/gcc/gimplify.cc > +++ b/gcc/gimplify.cc > @@ -6054,6 +6054,9 @@ gimplify_modify_expr (tree *expr_p, gimple_seq *pre_p, > gimple_seq *post_p, > location_t loc = EXPR_LOCATION (*expr_p); > gimple_stmt_iterator gsi; > > + if (error_operand_p (*from_p) || error_operand_p (*to_p)) > + return GS_ERROR; > + > gcc_assert (TREE_CODE (*expr_p) == MODIFY_EXPR > || TREE_CODE (*expr_p) == INIT_EXPR); > > diff --git a/gcc/testsuite/gcc.dg/redecl-23.c > b/gcc/testsuite/gcc.dg/redecl-23.c > new file mode 100644 > index 00000000000..425721df2ff > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/redecl-23.c > @@ -0,0 +1,6 @@ > +/* We used to ICE in the gimplifier, PR 106560. */ > +/* { dg-do compile } */ > +/* { dg-options "-w" } */ > +void **a; /* { dg-note "" } */ > +void b() { void **c = a; } > +a; /* { dg-error "" } */ > diff --git a/gcc/testsuite/gcc.dg/redecl-24.c > b/gcc/testsuite/gcc.dg/redecl-24.c > new file mode 100644 > index 00000000000..f0f7a723ab8 > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/redecl-24.c > @@ -0,0 +1,6 @@ > +/* We used to ICE in the gimplifier, PR 106560 */ > +/* { dg-do compile } */ > +/* { dg-options "-w" } */ > +void **a, **b; /* { dg-note "" } */ > +c(){b = a;} > +a = /* { dg-error "" } */ > diff --git a/gcc/testsuite/gcc.dg/redecl-25.c > b/gcc/testsuite/gcc.dg/redecl-25.c > new file mode 100644 > index 00000000000..4232e19d9a7 > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/redecl-25.c > @@ -0,0 +1,9 @@ > +/* We used to ICE in the gimplifier, PR 106560 */ > +/* { dg-do compile } */ > +/* { dg-options "-w" } */ > +void **a; /* { dg-note "" } */ > +void b() { > + void **c; > + c = a /* { dg-error "" } */ > +} > +a; /* { dg-error "" } */ > -- > 2.27.0 >