summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErick Ochoa <erick.ochoa@theobroma-systems.com>2020-04-29 14:03:22 +0200
committerErick Ochoa <erick.ochoa@theobroma-systems.com>2020-05-14 14:45:54 +0200
commit7938439d31bb8e76b7de4079aa25ed593580378a (patch)
tree9c605d169af30b8e770ac0737f660109e154f276
parent52822712388cdf72e5f5b078603adf0fde4a57fc (diff)
Dealing with eliminating writes to elimited fields when they are the only gimple statement in bb
-rw-r--r--gcc/ipa-str-reorg-dead-field-eliminate.c1
-rw-r--r--gcc/testsuite/gcc.dg/ipa/ipa-structreorg-58-csmith-7.c12
2 files changed, 13 insertions, 0 deletions
diff --git a/gcc/ipa-str-reorg-dead-field-eliminate.c b/gcc/ipa-str-reorg-dead-field-eliminate.c
index 0d6b5df18d8..9241156d0f0 100644
--- a/gcc/ipa-str-reorg-dead-field-eliminate.c
+++ b/gcc/ipa-str-reorg-dead-field-eliminate.c
@@ -2374,6 +2374,7 @@ rewrite_basic_block (basic_block bb, t_map &type_map,
while (deleted && is_first)
{
stmt = gsi_stmt(gsi);
+ if (!stmt) break; // we might have deleted and was end of basic block?
deleted = rewrite_stmt (stmt, gsi, type_map, inverse);
if (gsi_end_p(gsi)) break;
}
diff --git a/gcc/testsuite/gcc.dg/ipa/ipa-structreorg-58-csmith-7.c b/gcc/testsuite/gcc.dg/ipa/ipa-structreorg-58-csmith-7.c
new file mode 100644
index 00000000000..3edc8a44499
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/ipa/ipa-structreorg-58-csmith-7.c
@@ -0,0 +1,12 @@
+/* { dg-do run } */
+/* { dg-options "-w -flto -flto-partition=none -fipa-dead-field-eliminate" } */
+
+#include <stdint.h>
+struct a {
+ int32_t b
+} c;
+d() {
+ for (;; c.b = 0)
+ ;
+}
+main() {}