diff options
author | Andrew Pinski <apinski@marvell.com> | 2022-11-19 12:48:27 -0800 |
---|---|---|
committer | Andrew Pinski <apinski@marvell.com> | 2022-11-21 07:40:17 +0000 |
commit | b03ad138a61f64d8a77876d6864aad5103fff498 (patch) | |
tree | 1e2718340f90bca09f078d7b6132fd25170d4171 | |
parent | 183db4fb73a64bc4641604c30cdbbd9d9e8a6ed6 (diff) | |
download | gcc-b03ad138a61f64d8a77876d6864aad5103fff498.zip gcc-b03ad138a61f64d8a77876d6864aad5103fff498.tar.gz gcc-b03ad138a61f64d8a77876d6864aad5103fff498.tar.bz2 |
Fix PR 106560: Another ICE after conflicting types of redeclaration
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.
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.
-rw-r--r-- | gcc/gimplify.cc | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/redecl-23.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/redecl-24.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/redecl-25.c | 9 |
4 files changed, 24 insertions, 0 deletions
diff --git a/gcc/gimplify.cc b/gcc/gimplify.cc index c62a966..02415cb 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 0000000..425721d --- /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 0000000..f0f7a72 --- /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 0000000..4232e19 --- /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 "" } */ |