From 1e748a2b15347a0e5c9fd525218233abd773b46e Mon Sep 17 00:00:00 2001
From: Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
Date: Thu, 1 Jul 2004 19:45:28 +0000
Subject: [PATCH] * gimplify.c (gimplify_one_sizepos): Don't do anything if any
 VAR_DECL.

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

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1850bc844d04..2ac7f335f471 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,7 @@
 2004-07-01  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
 
+	* gimplify.c (gimplify_one_sizepos): Don't do anything if any VAR_DECL.
+
 	* tree-pretty-print.c (dump_generic_node, case ARRAY_REF): Use
 	access functions for lower bound and element size and only output
 	if lower bound nonzero or element size not same as that of type.
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index e8fdbe9001f0..ed1af19a3449 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -4069,8 +4069,12 @@ void
 gimplify_one_sizepos (tree *expr_p, tree *stmt_p)
 {
   /* We don't do anything if the value isn't there, is constant, or contains
-     A PLACEHOLDER_EXPR.  */
+     A PLACEHOLDER_EXPR.  We also don't want to do anything if it's already
+     a VAR_DECL.  If it's a VAR_DECL from another function, the gimplfier
+     will want to replace it with a new variable, but that will cause problems
+     if this type is from outside the function.  It's OK to have that here.  */
   if (*expr_p == NULL_TREE || TREE_CONSTANT (*expr_p)
+      || TREE_CODE (*expr_p) == VAR_DECL
       || CONTAINS_PLACEHOLDER_P (*expr_p))
     return;
 
-- 
GitLab