From 0b1d52f74522f2e1ab43a0ada8ad1c89f6daeac5 Mon Sep 17 00:00:00 2001
From: Alexandre Oliva <aoliva@redhat.com>
Date: Tue, 8 Jun 2004 05:21:51 +0000
Subject: [PATCH] gimplify.c (copy_if_shared_r): Revert: 2004-05-21 Richard
 Henderson <rth@redhat.com>

* gimplify.c (copy_if_shared_r): Revert:
2004-05-21  Richard Henderson  <rth@redhat.com>
* gimplify.c [...] Don't mark VA_ARG_EXPRs volatile here.

From-SVN: r82745
---
 gcc/ChangeLog  |  6 ++++++
 gcc/gimplify.c | 14 +++++++++++++-
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 355a54b2f2ef..aec3ed2fc4e6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2004-06-08  Alexandre Oliva  <aoliva@redhat.com>
+
+	* gimplify.c (copy_if_shared_r): Revert:
+	2004-05-21  Richard Henderson  <rth@redhat.com>
+	* gimplify.c [...] Don't mark VA_ARG_EXPRs volatile here.
+
 2004-06-07  Roger Sayle  <roger@eyesopen.com>
 
 	* expmed.c (add_cost, neg_cost, sdiv_pow2_cheap, smod_pow2_cheap):
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index 8ec6e0d19d66..679103e31c16 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -665,7 +665,19 @@ copy_if_shared_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
 
   /* Otherwise, mark the tree as visited and keep looking.  */
   else
-    TREE_VISITED (t) = 1;
+    {
+      TREE_VISITED (t) = 1;
+      if (TREE_CODE (*tp) == VA_ARG_EXPR)
+	{
+	  /* Mark any _DECL inside the operand as volatile to avoid
+	     the optimizers messing around with it. We have to do this
+	     early, otherwise we might mark a variable as volatile
+	     after we gimplify other statements that use the variable
+	     assuming it's not volatile.  */
+	  walk_tree (&TREE_OPERAND (*tp, 0), mark_decls_volatile_r,
+		     NULL, NULL);
+	}
+    }
 
   return NULL_TREE;
 }
-- 
GitLab