public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc/devel/gccgo] tree: Fix up get_narrower [PR94724]
@ 2020-07-12 17:29 Ian Lance Taylor
0 siblings, 0 replies; only message in thread
From: Ian Lance Taylor @ 2020-07-12 17:29 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:bca558de2a24b2a78c6a321d6cec384e07759d77
commit bca558de2a24b2a78c6a321d6cec384e07759d77
Author: Jakub Jelinek <jakub@redhat.com>
Date: Thu Apr 23 21:11:36 2020 +0200
tree: Fix up get_narrower [PR94724]
In the recent get_narrower change, I wanted it to be efficient and avoid
recursion if there are many nested COMPOUND_EXPRs. That builds the
COMPOUND_EXPR nest with the right arguments, but as build2_loc computes some
flags like TREE_SIDE_EFFECTS, TREE_CONSTANT and TREE_READONLY, when it
is called with something that will not be the argument in the end, those
flags are computed incorrectly.
So, this patch instead uses an auto_vec and builds them in the reverse order
so when they are built, they are built with the correct operands.
2020-04-23 Jakub Jelinek <jakub@redhat.com>
PR middle-end/94724
* tree.c (get_narrower): Instead of creating COMPOUND_EXPRs
temporarily with non-final second operand and updating it later,
push COMPOUND_EXPRs into a vector and process it in reverse,
creating COMPOUND_EXPRs with the final operands.
* gcc.c-torture/execute/pr94724.c: New test.
Diff:
---
gcc/ChangeLog | 8 ++++++++
gcc/testsuite/ChangeLog | 7 ++++++-
gcc/testsuite/gcc.c-torture/execute/pr94724.c | 12 ++++++++++++
gcc/tree.c | 20 ++++++++++++--------
4 files changed, 38 insertions(+), 9 deletions(-)
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c806e5e8181..5ddb4332047 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2020-04-23 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/94724
+ * tree.c (get_narrower): Instead of creating COMPOUND_EXPRs
+ temporarily with non-final second operand and updating it later,
+ push COMPOUND_EXPRs into a vector and process it in reverse,
+ creating COMPOUND_EXPRs with the final operands.
+
2020-04-23 Szabolcs Nagy <szabolcs.nagy@arm.com>
PR target/94697
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 25515c9aa3a..c6ae489c43d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,9 +1,14 @@
+2020-04-23 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/94724
+ * gcc.c-torture/execute/pr94724.c: New test.
+
2020-04-23 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/93956
* gfortran.dg/pointer_assign_13.f90: New test.
- 2020-04-23 Iain Sandoe <iain@sandoe.co.uk>
+2020-04-23 Iain Sandoe <iain@sandoe.co.uk>
* g++.dg/coroutines/coro-bad-alloc-00-bad-op-new.C: Adjust for
changed inline namespace.
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr94724.c b/gcc/testsuite/gcc.c-torture/execute/pr94724.c
new file mode 100644
index 00000000000..7c260f1ed07
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr94724.c
@@ -0,0 +1,12 @@
+/* PR middle-end/94724 */
+
+short a, b;
+
+int
+main ()
+{
+ (0, (0, (a = 0 >= 0, b))) != 53601;
+ if (a != 1)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/tree.c b/gcc/tree.c
index fa956da28a4..da6b8e20eda 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -8881,18 +8881,22 @@ get_narrower (tree op, int *unsignedp_ptr)
if (TREE_CODE (op) == COMPOUND_EXPR)
{
- while (TREE_CODE (op) == COMPOUND_EXPR)
+ do
op = TREE_OPERAND (op, 1);
+ while (TREE_CODE (op) == COMPOUND_EXPR);
tree ret = get_narrower (op, unsignedp_ptr);
if (ret == op)
return win;
- op = win;
- for (tree *p = &win; TREE_CODE (op) == COMPOUND_EXPR;
- op = TREE_OPERAND (op, 1), p = &TREE_OPERAND (*p, 1))
- *p = build2_loc (EXPR_LOCATION (op), COMPOUND_EXPR,
- TREE_TYPE (ret), TREE_OPERAND (op, 0),
- ret);
- return win;
+ auto_vec <tree, 16> v;
+ unsigned int i;
+ for (tree op = win; TREE_CODE (op) == COMPOUND_EXPR;
+ op = TREE_OPERAND (op, 1))
+ v.safe_push (op);
+ FOR_EACH_VEC_ELT_REVERSE (v, i, op)
+ ret = build2_loc (EXPR_LOCATION (op), COMPOUND_EXPR,
+ TREE_TYPE (win), TREE_OPERAND (op, 0),
+ ret);
+ return ret;
}
while (TREE_CODE (op) == NOP_EXPR)
{
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2020-07-12 17:29 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-12 17:29 [gcc/devel/gccgo] tree: Fix up get_narrower [PR94724] Ian Lance Taylor
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).