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:
Jason Merrill 2000-08-09 01:52:17 -04:00 committed by Jason Merrill
parent 8e32b501b8
commit 08e72a1929
3 changed files with 23 additions and 5 deletions

View File

@ -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> 2000-08-07 Kazu Hirata <kazu@hxi.com>
* cp-tree.h (CLASSTYPE_HAS_PRIMARY_BASE_P): Fix a comment typo. * cp-tree.h (CLASSTYPE_HAS_PRIMARY_BASE_P): Fix a comment typo.

View File

@ -2190,12 +2190,17 @@ build_anon_union_vars (anon_decl, elems, static_p, external_p)
DECL_INITIAL (decl) = NULL_TREE; DECL_INITIAL (decl) = NULL_TREE;
} }
/* Only write out one anon union element--choose the one that /* Only write out one anon union element--choose the largest
can hold them all. */ 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 if (main_decl == NULL_TREE
&& simple_cst_equal (DECL_SIZE (decl), || tree_int_cst_lt (DECL_SIZE (main_decl), DECL_SIZE (decl)))
DECL_SIZE (anon_decl)) == 1) {
main_decl = decl; if (main_decl)
TREE_ASM_WRITTEN (main_decl) = 1;
main_decl = decl;
}
else else
/* ??? This causes there to be no debug info written out /* ??? This causes there to be no debug info written out
about this decl. */ about this decl. */

View File

@ -5261,6 +5261,9 @@ tsubst_template_arg_vector (t, args, complain)
(tsubst_expr (TREE_VEC_ELT (t, i), args, complain, (tsubst_expr (TREE_VEC_ELT (t, i), args, complain,
NULL_TREE)); NULL_TREE));
if (elts[i] == error_mark_node)
return error_mark_node;
if (elts[i] != TREE_VEC_ELT (t, i)) if (elts[i] != TREE_VEC_ELT (t, i))
need_new = 1; need_new = 1;
} }
@ -5380,6 +5383,8 @@ tsubst_aggr_type (t, args, complain, in_decl, entering_scope)
S we only want {double}. */ S we only want {double}. */
argvec = tsubst_template_arg_vector (TYPE_TI_ARGS (t), args, argvec = tsubst_template_arg_vector (TYPE_TI_ARGS (t), args,
complain); complain);
if (argvec == error_mark_node)
return error_mark_node;
r = lookup_template_class (t, argvec, in_decl, context, r = lookup_template_class (t, argvec, in_decl, context,
entering_scope); entering_scope);