class.c (sorted_fields_type_new): Factor out of ...

* class.c (sorted_fields_type_new): Factor out of ...
	(finish_struct_1): ... here.

From-SVN: r179939
This commit is contained in:
Diego Novillo 2011-10-13 14:25:10 -04:00 committed by Diego Novillo
parent 1fb0b80148
commit 385b73ab1d
2 changed files with 22 additions and 3 deletions

View File

@ -1,3 +1,8 @@
2011-10-13 Diego Novillo <dnovillo@google.com>
* class.c (sorted_fields_type_new): Factor out of ...
(finish_struct_1): ... here.
2011-10-13 Jason Merrill <jason@redhat.com> 2011-10-13 Jason Merrill <jason@redhat.com>
PR c++/50618 PR c++/50618

View File

@ -5663,6 +5663,22 @@ determine_key_method (tree type)
return; return;
} }
/* Allocate and return an instance of struct sorted_fields_type with
N fields. */
static struct sorted_fields_type *
sorted_fields_type_new (int n)
{
struct sorted_fields_type *sft;
sft = ggc_alloc_sorted_fields_type (sizeof (struct sorted_fields_type)
+ n * sizeof (tree));
sft->len = n;
return sft;
}
/* Perform processing required when the definition of T (a class type) /* Perform processing required when the definition of T (a class type)
is complete. */ is complete. */
@ -5792,9 +5808,7 @@ finish_struct_1 (tree t)
n_fields = count_fields (TYPE_FIELDS (t)); n_fields = count_fields (TYPE_FIELDS (t));
if (n_fields > 7) if (n_fields > 7)
{ {
struct sorted_fields_type *field_vec = ggc_alloc_sorted_fields_type struct sorted_fields_type *field_vec = sorted_fields_type_new (n_fields);
(sizeof (struct sorted_fields_type) + n_fields * sizeof (tree));
field_vec->len = n_fields;
add_fields_to_record_type (TYPE_FIELDS (t), field_vec, 0); add_fields_to_record_type (TYPE_FIELDS (t), field_vec, 0);
qsort (field_vec->elts, n_fields, sizeof (tree), qsort (field_vec->elts, n_fields, sizeof (tree),
field_decl_cmp); field_decl_cmp);