diff options
author | Mark Mitchell <mark@codesourcery.com> | 2000-06-28 20:41:27 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2000-06-28 20:41:27 +0000 |
commit | 9ccf6541557f9492c75dddd298edbeb74d90eecb (patch) | |
tree | dcfde40786edc1f7e053127993fe997bdbd802b8 /gcc/cp/pt.c | |
parent | 6883b3aecacf6dd0dfe604f0b774ae583b5d7ef5 (diff) | |
download | gcc-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.c | 43 |
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; |