Commit 08e72a19 by Jason Merrill Committed by Jason Merrill

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
parent 8e32b501
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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment