diff options
author | H.J. Lu <hongjiu.lu@intel.com> | 2009-03-03 18:08:01 +0000 |
---|---|---|
committer | H.J. Lu <hjl@gcc.gnu.org> | 2009-03-03 10:08:01 -0800 |
commit | 13e4e36e171c7053eb63e848b841b8154eaada40 (patch) | |
tree | 07b2104b534faffa886609f1d43a8463761aacb1 /gcc/tree-inline.c | |
parent | 6eaf85d0018e29f7fed19301d94f2320bed63af2 (diff) | |
download | gcc-13e4e36e171c7053eb63e848b841b8154eaada40.zip gcc-13e4e36e171c7053eb63e848b841b8154eaada40.tar.gz gcc-13e4e36e171c7053eb63e848b841b8154eaada40.tar.bz2 |
re PR tree-optimization/39345 (ICE in copy_tree_body_r, at tree-inline.c:1020)
2009-03-03 H.J. Lu <hongjiu.lu@intel.com>
PR middle-end/39345
* tree-inline.c (remapped_type): New.
(can_be_nonlocal): Call remapped_type instead of remap_type.
From-SVN: r144581
Diffstat (limited to 'gcc/tree-inline.c')
-rw-r--r-- | gcc/tree-inline.c | 26 |
1 files changed, 24 insertions, 2 deletions
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. */ |