summaryrefslogtreecommitdiff
path: root/0240-Backport-SME-Fix-PRs-106764-106765-and-107307-all-IC.patch
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2025-02-28 10:03:49 +0000
committerCoprDistGit <infra@openeuler.org>2025-02-28 10:03:49 +0000
commit73127104a245052cd5cf29cdaaca3e5c32c70348 (patch)
tree8e28b63e478c43c252f18b49836dff7313affe54 /0240-Backport-SME-Fix-PRs-106764-106765-and-107307-all-IC.patch
parent49d3feaf4665cdb07576fc1a2382a4d82a612d35 (diff)
automatic import of gccopeneuler24.03_LTS_SP1
Diffstat (limited to '0240-Backport-SME-Fix-PRs-106764-106765-and-107307-all-IC.patch')
-rw-r--r--0240-Backport-SME-Fix-PRs-106764-106765-and-107307-all-IC.patch113
1 files changed, 113 insertions, 0 deletions
diff --git a/0240-Backport-SME-Fix-PRs-106764-106765-and-107307-all-IC.patch b/0240-Backport-SME-Fix-PRs-106764-106765-and-107307-all-IC.patch
new file mode 100644
index 0000000..d048c48
--- /dev/null
+++ b/0240-Backport-SME-Fix-PRs-106764-106765-and-107307-all-IC.patch
@@ -0,0 +1,113 @@
+From 202ebc25e509ae0a2ac7d05c822cf6a8a817e49a Mon Sep 17 00:00:00 2001
+From: Andrew Pinski <apinski@marvell.com>
+Date: Thu, 17 Nov 2022 22:08:07 +0000
+Subject: [PATCH 141/157] [Backport][SME] Fix PRs 106764, 106765, and 107307,
+ all ICE after invalid re-declaration
+
+Reference: https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=bd0c9d9e706adaeea0d96152daade0a6819a8715
+
+The problem here is the gimplifier returns GS_ERROR but
+in some cases we don't check that soon enough and try
+to do other work which could crash.
+So the fix in these two cases is to return GS_ERROR
+early if the gimplify_* functions had return GS_ERROR.
+
+OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.
+
+Thanks,
+Andrew Pinski
+
+gcc/ChangeLog:
+
+ PR c/106764
+ PR c/106765
+ PR c/107307
+ * gimplify.cc (gimplify_compound_lval): Return GS_ERROR
+ if gimplify_expr had return GS_ERROR.
+ (gimplify_call_expr): Likewise.
+
+gcc/testsuite/ChangeLog:
+
+ PR c/106764
+ PR c/106765
+ PR c/107307
+ * gcc.dg/redecl-19.c: New test.
+ * gcc.dg/redecl-20.c: New test.
+ * gcc.dg/redecl-21.c: New test.
+---
+ gcc/gimplify.cc | 5 +++++
+ gcc/testsuite/gcc.dg/redecl-19.c | 5 +++++
+ gcc/testsuite/gcc.dg/redecl-20.c | 9 +++++++++
+ gcc/testsuite/gcc.dg/redecl-21.c | 9 +++++++++
+ 4 files changed, 28 insertions(+)
+ create mode 100644 gcc/testsuite/gcc.dg/redecl-19.c
+ create mode 100644 gcc/testsuite/gcc.dg/redecl-20.c
+ create mode 100644 gcc/testsuite/gcc.dg/redecl-21.c
+
+diff --git a/gcc/gimplify.cc b/gcc/gimplify.cc
+index 91500e2fb..e9f527850 100644
+--- a/gcc/gimplify.cc
++++ b/gcc/gimplify.cc
+@@ -3272,6 +3272,8 @@ gimplify_compound_lval (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
+ tret = gimplify_expr (p, pre_p, post_p, is_gimple_min_lval,
+ fallback | fb_lvalue);
+ ret = MIN (ret, tret);
++ if (ret == GS_ERROR)
++ return GS_ERROR;
+
+ /* Step 2a: if we have component references we do not support on
+ registers then make sure the base isn't a register. Of course
+@@ -3664,6 +3666,9 @@ gimplify_call_expr (tree *expr_p, gimple_seq *pre_p, bool want_value)
+ ret = gimplify_expr (&CALL_EXPR_FN (*expr_p), pre_p, NULL,
+ is_gimple_call_addr, fb_rvalue);
+
++ if (ret == GS_ERROR)
++ return GS_ERROR;
++
+ nargs = call_expr_nargs (*expr_p);
+
+ /* Get argument types for verification. */
+diff --git a/gcc/testsuite/gcc.dg/redecl-19.c b/gcc/testsuite/gcc.dg/redecl-19.c
+new file mode 100644
+index 000000000..cc1068544
+--- /dev/null
++++ b/gcc/testsuite/gcc.dg/redecl-19.c
+@@ -0,0 +1,5 @@
++/* We used to ICE in the gimplifier, PR 106764 */
++/* { dg-do compile } */
++/* { dg-options "-w" } */
++(*a)(); // { dg-note "" }
++b(){a()} a; // { dg-error "" }
+diff --git a/gcc/testsuite/gcc.dg/redecl-20.c b/gcc/testsuite/gcc.dg/redecl-20.c
+new file mode 100644
+index 000000000..07f52115e
+--- /dev/null
++++ b/gcc/testsuite/gcc.dg/redecl-20.c
+@@ -0,0 +1,9 @@
++/* We used to ICE in the gimplifier, PR 107307 */
++// { dg-do compile }
++// { dg-options "-w" }
++void f ()
++{
++ const struct { int a[1]; } b; // { dg-note "" }
++ int *c = b.a;
++ int *b; // { dg-error "" }
++}
+diff --git a/gcc/testsuite/gcc.dg/redecl-21.c b/gcc/testsuite/gcc.dg/redecl-21.c
+new file mode 100644
+index 000000000..2f2a6548a
+--- /dev/null
++++ b/gcc/testsuite/gcc.dg/redecl-21.c
+@@ -0,0 +1,9 @@
++/* We used to ICE in the gimplifier, PR 106765 */
++/* { dg-do compile } */
++/* { dg-options "-w" } */
++struct a {
++ int b
++} c() {
++ struct a a; // { dg-note "" }
++ a.b;
++ d a; // { dg-error "" }
+--
+2.33.0
+