From 463cc2564a4b4ea073a816e5d90450aa72717042 Mon Sep 17 00:00:00 2001 From: hjl Date: Tue, 3 Mar 2009 18:08:01 +0000 Subject: [PATCH] 2009-03-03 H.J. Lu PR middle-end/39345 * tree-inline.c (remapped_type): New. (can_be_nonlocal): Call remapped_type instead of remap_type. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@144581 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/tree-inline.c | 26 ++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3869882..3d4b017 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-03-03 H.J. Lu + + PR middle-end/39345 + * tree-inline.c (remapped_type): New. + (can_be_nonlocal): Call remapped_type instead of remap_type. + 2009-03-03 Jakub Jelinek PR fortran/39354 diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 88154bf..63392e2 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -426,6 +426,26 @@ remap_type (tree type, copy_body_data *id) return tmp; } +/* Return previously remapped type of TYPE in ID. Return NULL if TYPE + is NULL or TYPE has not been remapped before. */ + +static tree +remapped_type (tree type, copy_body_data *id) +{ + tree *node; + + if (type == NULL) + return type; + + /* See if we have remapped this type. */ + node = (tree *) pointer_map_contains (id->decl_map, type); + if (node) + return *node; + else + return NULL; +} + + /* The type only needs remapping if it's variably modified. */ /* Decide if DECL can be put into BLOCK_NONLOCAL_VARs. */ static bool @@ -446,8 +466,10 @@ can_be_nonlocal (tree decl, copy_body_data *id) if (TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != PARM_DECL) return false; - /* We must use global type. */ - if (TREE_TYPE (decl) != remap_type (TREE_TYPE (decl), id)) + /* We must use global type. We call remapped_type instead of + remap_type since we don't want to remap this type here if it + hasn't been remapped before. */ + if (TREE_TYPE (decl) != remapped_type (TREE_TYPE (decl), id)) return false; /* Wihtout SSA we can't tell if variable is used. */ -- 2.7.4