aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@gcc.gnu.org>2010-07-03 13:14:48 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2010-07-03 13:14:48 +0000
commit6687b74039b24bf8e3bdd35c4f250d5e08e5d5a3 (patch)
treeb55774ea0747b870b4a0a61bdf00cc381966a112 /gcc
parent21ffc3f7092a49cff26ebf6762f4098540539fa6 (diff)
downloadgcc-6687b74039b24bf8e3bdd35c4f250d5e08e5d5a3.zip
gcc-6687b74039b24bf8e3bdd35c4f250d5e08e5d5a3.tar.gz
gcc-6687b74039b24bf8e3bdd35c4f250d5e08e5d5a3.tar.bz2
* gimplify.c (mostly_copy_tree_r): Deal with BIND_EXPR.
From-SVN: r161774
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/gimplify.c11
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gnat.dg/cond_expr1.adb7
4 files changed, 20 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d2e3ba5..8ef121a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,4 +1,8 @@
-2010-07-02 Jan Hubicka <jh@suse.cz>
+2010-07-03 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gimplify.c (mostly_copy_tree_r): Deal with BIND_EXPR.
+
+2010-07-03 Jan Hubicka <jh@suse.cz>
* config/i386/i386.c (override_options): Revert accidental commit.
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index a9c93ac..9eb8fa7 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -868,9 +868,9 @@ mostly_copy_tree_r (tree *tp, int *walk_subtrees, void *data)
tree t = *tp;
enum tree_code code = TREE_CODE (t);
- /* Do not copy SAVE_EXPR or TARGET_EXPR nodes themselves, but copy
- their subtrees if we can make sure to do it only once. */
- if (code == SAVE_EXPR || code == TARGET_EXPR)
+ /* Do not copy SAVE_EXPR, TARGET_EXPR or BIND_EXPR nodes themselves, but
+ copy their subtrees if we can make sure to do it only once. */
+ if (code == SAVE_EXPR || code == TARGET_EXPR || code == BIND_EXPR)
{
if (data && !pointer_set_insert ((struct pointer_set_t *)data, t))
;
@@ -895,10 +895,7 @@ mostly_copy_tree_r (tree *tp, int *walk_subtrees, void *data)
/* Leave the bulk of the work to copy_tree_r itself. */
else
- {
- gcc_assert (code != BIND_EXPR);
- copy_tree_r (tp, walk_subtrees, NULL);
- }
+ copy_tree_r (tp, walk_subtrees, NULL);
return NULL_TREE;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index fb71e59..d64f505 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,9 @@
2010-07-03 Eric Botcazou <ebotcazou@adacore.com>
+ * gnat.dg/cond_expr1.adb: New test.
+
+2010-07-03 Eric Botcazou <ebotcazou@adacore.com>
+
* gnat.dg/modular3.adb: New test.
* gnat.dg/modular3_pkg.ads: New helper.
diff --git a/gcc/testsuite/gnat.dg/cond_expr1.adb b/gcc/testsuite/gnat.dg/cond_expr1.adb
new file mode 100644
index 0000000..e1a87a3
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/cond_expr1.adb
@@ -0,0 +1,7 @@
+-- { dg-do compile }
+-- { dg-options "-gnat12" }
+
+function Cond_Expr1 (Dir : in String) return String is
+begin
+ return (if Dir (Dir'Last) = '\' then Dir else Dir & '\');
+end;