From 94c82a77fde8fa2c197f61f8acc1ade19a13acdb Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Tue, 26 Jan 1999 20:23:36 +0000 Subject: [PATCH] pt.c (instantiate_class_template): Set up the DECL_INITIAL of member constants. * pt.c (instantiate_class_template): Set up the DECL_INITIAL of member constants. g++.ns/template6.C * init.c (expand_member_init): Pull out TYPE_MAIN_VARIANT in a ctor initializer. g++.other/typedef6.C From-SVN: r24875 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/init.c | 2 +- gcc/cp/pt.c | 4 ++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index edffd63980d..7342161b75b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,11 @@ 1999-01-26 Jason Merrill + * pt.c (instantiate_class_template): Set up the DECL_INITIAL of + member constants. + + * init.c (expand_member_init): Pull out TYPE_MAIN_VARIANT in + a ctor initializer. + * tree.c (equal_functions): Fix name in prototype. * decl.c (push_local_binding): Add FLAGS argument. diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 44911ebab79..847222f3a0a 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -898,7 +898,7 @@ expand_member_init (exp, name, init) if (name && TREE_CODE (name) == TYPE_DECL) { - basetype = TREE_TYPE (name); + basetype = TYPE_MAIN_VARIANT (TREE_TYPE (name)); name = DECL_NAME (name); } diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 9bd73c240b8..1db903dadc8 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -4748,6 +4748,10 @@ instantiate_class_template (type) { pending_statics = perm_tree_cons (NULL_TREE, r, pending_statics); /* Perhaps we should do more of grokfield here. */ + if (DECL_DEFINED_IN_CLASS_P (r)) + /* Set up DECL_INITIAL, since tsubst doesn't. */ + DECL_INITIAL (r) = tsubst_expr (DECL_INITIAL (t), args, + NULL_TREE); start_decl_1 (r); DECL_IN_AGGR_P (r) = 1; DECL_EXTERNAL (r) = 1; -- 2.30.2