From 01f4137fea19db8118b225ce86b39aa6831b7ba2 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Mon, 7 Oct 2002 02:49:18 -0700 Subject: [PATCH] * decl2.c, pt.c: Revert c++/7754 fix. From-SVN: r57895 --- gcc/cp/ChangeLog | 4 ++++ gcc/cp/decl2.c | 39 +++++++++++++++++---------------------- gcc/cp/pt.c | 36 +++++++++++++++--------------------- 3 files changed, 36 insertions(+), 43 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e32c5166434..c5e1ed18881 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,7 @@ +2002-10-07 Richard Henderson + + * decl2.c, pt.c: Revert c++/7754 fix. + 2002-10-05 Kriang Lerdsuwanakij PR c++/7804 diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index c738b37896d..90a4d4a571b 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -1382,31 +1382,26 @@ finish_anon_union (anon_union_decl) return; } - if (!processing_template_decl) - { - main_decl - = build_anon_union_vars (anon_union_decl, - &DECL_ANON_UNION_ELEMS (anon_union_decl), - static_p, external_p); - - if (main_decl == NULL_TREE) - { - warning ("anonymous aggregate with no members"); - return; - } + main_decl = build_anon_union_vars (anon_union_decl, + &DECL_ANON_UNION_ELEMS (anon_union_decl), + static_p, external_p); - if (static_p) - { - make_decl_rtl (main_decl, 0); - COPY_DECL_RTL (main_decl, anon_union_decl); - expand_anon_union_decl (anon_union_decl, - NULL_TREE, - DECL_ANON_UNION_ELEMS (anon_union_decl)); - return; - } + if (main_decl == NULL_TREE) + { + warning ("anonymous aggregate with no members"); + return; } - add_decl_stmt (anon_union_decl); + if (static_p) + { + make_decl_rtl (main_decl, 0); + COPY_DECL_RTL (main_decl, anon_union_decl); + expand_anon_union_decl (anon_union_decl, + NULL_TREE, + DECL_ANON_UNION_ELEMS (anon_union_decl)); + } + else + add_decl_stmt (anon_union_decl); } /* Finish processing a builtin type TYPE. It's name is NAME, diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 242c5284eaa..aec77d92ce0 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -6134,7 +6134,7 @@ tsubst_decl (t, args, type, complain) } r = copy_decl (t); - TREE_TYPE (r) = complete_type (type); + TREE_TYPE (r) = type; c_apply_type_quals_to_decl (cp_type_quals (type), r); DECL_CONTEXT (r) = ctx; /* Clear out the mangled name and RTL for the instantiation. */ @@ -6173,8 +6173,6 @@ tsubst_decl (t, args, type, complain) TREE_CHAIN (r) = NULL_TREE; if (TREE_CODE (r) == VAR_DECL && VOID_TYPE_P (type)) cp_error_at ("instantiation of `%D' as type `%T'", r, type); - /* Compute the size, alignment, etc. of R. */ - layout_decl (r, 0); } break; @@ -7426,6 +7424,9 @@ tsubst_expr (t, args, complain, in_decl) decl = tsubst (decl, args, complain, in_decl); if (decl != error_mark_node) { + if (TREE_CODE (decl) != TYPE_DECL) + /* Make sure the type is instantiated now. */ + complete_type (TREE_TYPE (decl)); if (init) DECL_INITIAL (decl) = error_mark_node; /* By marking the declaration as instantiated, we avoid @@ -7435,26 +7436,19 @@ tsubst_expr (t, args, complain, in_decl) do. */ if (TREE_CODE (decl) == VAR_DECL) DECL_TEMPLATE_INSTANTIATED (decl) = 1; - if (TREE_CODE (decl) == VAR_DECL - && ANON_AGGR_TYPE_P (TREE_TYPE (decl))) - /* Anonymous aggregates are a special case. */ - finish_anon_union (decl); - else + maybe_push_decl (decl); + if (DECL_PRETTY_FUNCTION_P (decl)) { - maybe_push_decl (decl); - if (DECL_PRETTY_FUNCTION_P (decl)) - { - /* For __PRETTY_FUNCTION__ we have to adjust the - initializer. */ - const char *const name - = cxx_printable_name (current_function_decl, 2); - init = cp_fname_init (name); - TREE_TYPE (decl) = TREE_TYPE (init); - } - else - init = tsubst_expr (init, args, complain, in_decl); - cp_finish_decl (decl, init, NULL_TREE, 0); + /* For __PRETTY_FUNCTION__ we have to adjust the + initializer. */ + const char *const name + = cxx_printable_name (current_function_decl, 2); + init = cp_fname_init (name); + TREE_TYPE (decl) = TREE_TYPE (init); } + else + init = tsubst_expr (init, args, complain, in_decl); + cp_finish_decl (decl, init, NULL_TREE, 0); } } -- 2.30.2