aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/pt.c
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2000-06-28 20:41:27 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2000-06-28 20:41:27 +0000
commit9ccf6541557f9492c75dddd298edbeb74d90eecb (patch)
treedcfde40786edc1f7e053127993fe997bdbd802b8 /gcc/cp/pt.c
parent6883b3aecacf6dd0dfe604f0b774ae583b5d7ef5 (diff)
downloadgcc-9ccf6541557f9492c75dddd298edbeb74d90eecb.zip
gcc-9ccf6541557f9492c75dddd298edbeb74d90eecb.tar.gz
gcc-9ccf6541557f9492c75dddd298edbeb74d90eecb.tar.bz2
cp-tree.h (CLEAR_BINFO_NEW_VTABLE_MARKED): Remove.
* cp-tree.h (CLEAR_BINFO_NEW_VTABLE_MARKED): Remove. * class.c (update_vtable_entry_for_fn): Correct logic for deciding where to emit thunks. (build_vtt): Adjust call to build_vtt_inits. (build_vtt_inits): Add parameter to indicate whether or not sub-VTTs for virtual bases should be included. Adjust handling of construction vtables. (get_matching_base): New function. (dfs_build_vtt_inits): Rename to ... (dfs_build_secondary_vptr_vtt_inits): Adjust handling of construction vtables. (dfs_fixup_binfo_vtbls): Likewise. (build_ctor_vtbl_groups): Build construction vtables for virtual bases, too. (accumulate_vtbl_inits): Tweak logic for deciding whether or not to build construction vtbls. (dfs_accumulate_vtbl_inits): Adjust handling of construction vtables. * pt.c (tsubst, case TEMPLATE_TEMPLATE_PARM): Handle cv-qualified types correctly. From-SVN: r34765
Diffstat (limited to 'gcc/cp/pt.c')
-rw-r--r--gcc/cp/pt.c43
1 files changed, 26 insertions, 17 deletions
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 8da3dd5..e36d51b 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -6361,25 +6361,34 @@ tsubst (t, args, complain, in_decl)
{
case TEMPLATE_TYPE_PARM:
case TEMPLATE_TEMPLATE_PARM:
- r = copy_node (t);
- TEMPLATE_TYPE_PARM_INDEX (r)
- = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
- r, levels);
- TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
- TYPE_MAIN_VARIANT (r) = r;
- TYPE_POINTER_TO (r) = NULL_TREE;
- TYPE_REFERENCE_TO (r) = NULL_TREE;
-
- if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
- && TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t))
+ if (CP_TYPE_QUALS (t))
{
- tree argvec = tsubst (TYPE_TI_ARGS (t), args,
- complain, in_decl);
- if (argvec == error_mark_node)
- return error_mark_node;
+ r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
+ r = cp_build_qualified_type_real (r, CP_TYPE_QUALS (t),
+ complain);
+ }
+ else
+ {
+ r = copy_node (t);
+ TEMPLATE_TYPE_PARM_INDEX (r)
+ = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
+ r, levels);
+ TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
+ TYPE_MAIN_VARIANT (r) = r;
+ TYPE_POINTER_TO (r) = NULL_TREE;
+ TYPE_REFERENCE_TO (r) = NULL_TREE;
+
+ if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
+ && TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t))
+ {
+ tree argvec = tsubst (TYPE_TI_ARGS (t), args,
+ complain, in_decl);
+ if (argvec == error_mark_node)
+ return error_mark_node;
- TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
- = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
+ TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
+ = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
+ }
}
break;