* trans-array.c (free_ss_info): Decrement refcount. Return early if
still non-zero.
(gfc_get_array_ss, gfc_get_temp_ss, gfc_get_scalar_ss): Increment
refcount.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180883
138bc75d-0d04-0410-961f-
82ee72b054a4
2011-11-03 Mikael Morin <mikael@gcc.gnu.org>
+ * trans.h (struct gfc_ss_info): New field refcount.
+ * trans-array.c (free_ss_info): Decrement refcount. Return early if
+ still non-zero.
+ (gfc_get_array_ss, gfc_get_temp_ss, gfc_get_scalar_ss): Increment
+ refcount.
+
+2011-11-03 Mikael Morin <mikael@gcc.gnu.org>
+
* trans-array.c (gfc_trans_create_temp_array): Move invariant condition
out of the containing loop.
static void
free_ss_info (gfc_ss_info *ss_info)
{
+ ss_info->refcount--;
+ if (ss_info->refcount > 0)
+ return;
+
+ gcc_assert (ss_info->refcount == 0);
free (ss_info);
}
int i;
ss_info = gfc_get_ss_info ();
+ ss_info->refcount++;
ss_info->type = type;
ss_info->expr = expr;
int i;
ss_info = gfc_get_ss_info ();
+ ss_info->refcount++;
ss_info->type = GFC_SS_TEMP;
ss_info->string_length = string_length;
ss_info->data.temp.type = type;
gfc_ss_info *ss_info;
ss_info = gfc_get_ss_info ();
+ ss_info->refcount++;
ss_info->type = GFC_SS_SCALAR;
ss_info->expr = expr;
typedef struct gfc_ss_info
{
+ int refcount;
gfc_ss_type type;
gfc_expr *expr;
tree string_length;