From: H.J. Lu Date: Tue, 3 Mar 2009 18:08:01 +0000 (+0000) Subject: re PR tree-optimization/39345 (ICE in copy_tree_body_r, at tree-inline.c:1020) X-Git-Tag: releases/gcc-4.4.0~371 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=13e4e36e171c7053eb63e848b841b8154eaada40;p=thirdparty%2Fgcc.git re PR tree-optimization/39345 (ICE in copy_tree_body_r, at tree-inline.c:1020) 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. From-SVN: r144581 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 38698827a125..3d4b017a92cc 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 88154bf91f38..63392e21c4bf 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. */