[Bug middle-end/93786] [8/9/10 Regression] gimplifier ICE with statement expression since r8-5526
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Feb 25 12:53:00 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93786
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Tried:
--- gcc/gimplify.c.jj 2020-02-09 08:16:19.399581468 +0100
+++ gcc/gimplify.c 2020-02-25 13:46:51.166409528 +0100
@@ -886,7 +886,29 @@ mostly_copy_tree_r (tree *tp, int *walk_
/* Cope with the statement expression extension. */
else if (code == STATEMENT_LIST)
- ;
+ {
+ if (!TREE_SIDE_EFFECTS (t))
+ {
+ tree nt = NULL_TREE;
+ tree_stmt_iterator i;
+ /* With -g we can get STATEMENT_LISTs without side-effects
+ that contain some debug stmts and exactly one other stmt.
+ "unshare" those by extracting the single other stmt in the
+ copy. */
+ for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
+ if (TREE_CODE (tsi_stmt (i)) == DEBUG_BEGIN_STMT)
+ ;
+ else if (nt)
+ break;
+ else
+ nt = tsi_stmt (i);
+ if (nt && tsi_end_p (i) && TREE_TYPE (t) == TREE_TYPE (nt))
+ {
+ *tp = nt;
+ mostly_copy_tree_r (tp, walk_subtrees, data);
+ }
+ }
+ }
/* Leave the bulk of the work to copy_tree_r itself. */
else
and while we don't ICE anymore on the testcase, it FAILs with -fcompare-debug:
- _1 = s->_vptr.S;
+ struct S * retval.0;
+
+ # DEBUG BEGIN_STMT
+ # DEBUG BEGIN_STMT
+ retval.0 = s;
+ _1 = retval.0->_vptr.S;
gimple difference.
More information about the Gcc-bugs
mailing list