pt.c (tsubst_aggr_type): Bail if creating the argvec fails.
* pt.c (tsubst_aggr_type): Bail if creating the argvec fails. (tsubst_template_arg_vector): Likewise. * decl2.c (build_anon_union_vars): Choose the largest field; don't assume that one will be as large as the union. From-SVN: r35581
This commit is contained in:
parent
8e32b501b8
commit
08e72a1929
@ -1,3 +1,11 @@
|
||||
2000-08-08 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* pt.c (tsubst_aggr_type): Bail if creating the argvec fails.
|
||||
(tsubst_template_arg_vector): Likewise.
|
||||
|
||||
* decl2.c (build_anon_union_vars): Choose the largest field; don't
|
||||
assume that one will be as large as the union.
|
||||
|
||||
2000-08-07 Kazu Hirata <kazu@hxi.com>
|
||||
|
||||
* cp-tree.h (CLASSTYPE_HAS_PRIMARY_BASE_P): Fix a comment typo.
|
||||
|
@ -2190,12 +2190,17 @@ build_anon_union_vars (anon_decl, elems, static_p, external_p)
|
||||
DECL_INITIAL (decl) = NULL_TREE;
|
||||
}
|
||||
|
||||
/* Only write out one anon union element--choose the one that
|
||||
can hold them all. */
|
||||
/* Only write out one anon union element--choose the largest
|
||||
one. We used to try to find one the same size as the union,
|
||||
but that fails if the ABI forces us to align the union more
|
||||
strictly. */
|
||||
if (main_decl == NULL_TREE
|
||||
&& simple_cst_equal (DECL_SIZE (decl),
|
||||
DECL_SIZE (anon_decl)) == 1)
|
||||
main_decl = decl;
|
||||
|| tree_int_cst_lt (DECL_SIZE (main_decl), DECL_SIZE (decl)))
|
||||
{
|
||||
if (main_decl)
|
||||
TREE_ASM_WRITTEN (main_decl) = 1;
|
||||
main_decl = decl;
|
||||
}
|
||||
else
|
||||
/* ??? This causes there to be no debug info written out
|
||||
about this decl. */
|
||||
|
@ -5261,6 +5261,9 @@ tsubst_template_arg_vector (t, args, complain)
|
||||
(tsubst_expr (TREE_VEC_ELT (t, i), args, complain,
|
||||
NULL_TREE));
|
||||
|
||||
if (elts[i] == error_mark_node)
|
||||
return error_mark_node;
|
||||
|
||||
if (elts[i] != TREE_VEC_ELT (t, i))
|
||||
need_new = 1;
|
||||
}
|
||||
@ -5380,6 +5383,8 @@ tsubst_aggr_type (t, args, complain, in_decl, entering_scope)
|
||||
S we only want {double}. */
|
||||
argvec = tsubst_template_arg_vector (TYPE_TI_ARGS (t), args,
|
||||
complain);
|
||||
if (argvec == error_mark_node)
|
||||
return error_mark_node;
|
||||
|
||||
r = lookup_template_class (t, argvec, in_decl, context,
|
||||
entering_scope);
|
||||
|
Loading…
Reference in New Issue
Block a user