1 /* Handle parameterized types (templates) for GNU C++.
2 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
4 Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
5 Rewritten by Jason Merrill (jason@cygnus.com).
7 This file is part of GCC.
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2, or (at your option)
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING. If not, write to
21 the Free Software Foundation, 51 Franklin Street, Fifth Floor,
22 Boston, MA 02110-1301, USA. */
24 /* Known bugs or deficiencies include:
26 all methods must be provided in header files; can't use a source
27 file that contains only the method templates and "just win". */
31 #include "coretypes.h"
35 #include "pointer-set.h"
39 #include "cp-objcp-common.h"
40 #include "tree-inline.h"
47 #include "tree-iterator.h"
49 /* The type of functions taking a tree, and some additional data, and
51 typedef int (*tree_fn_t
) (tree
, void*);
53 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
54 instantiations have been deferred, either because their definitions
55 were not yet available, or because we were putting off doing the work.
56 The TREE_PURPOSE of each entry is either a DECL (for a function or
57 static data member), or a TYPE (for a class) indicating what we are
58 hoping to instantiate. The TREE_VALUE is not used. */
59 static GTY(()) tree pending_templates
;
60 static GTY(()) tree last_pending_template
;
62 int processing_template_parmlist
;
63 static int template_header_count
;
65 static GTY(()) tree saved_trees
;
66 static GTY(()) varray_type inline_parm_levels
;
67 static size_t inline_parm_levels_used
;
69 static GTY(()) tree current_tinst_level
;
71 static GTY(()) tree saved_access_scope
;
73 /* Live only within one (recursive) call to tsubst_expr. We use
74 this to pass the statement expression node from the STMT_EXPR
75 to the EXPR_STMT that is its result. */
76 static tree cur_stmt_expr
;
78 /* A map from local variable declarations in the body of the template
79 presently being instantiated to the corresponding instantiated
81 static htab_t local_specializations
;
83 #define UNIFY_ALLOW_NONE 0
84 #define UNIFY_ALLOW_MORE_CV_QUAL 1
85 #define UNIFY_ALLOW_LESS_CV_QUAL 2
86 #define UNIFY_ALLOW_DERIVED 4
87 #define UNIFY_ALLOW_INTEGER 8
88 #define UNIFY_ALLOW_OUTER_LEVEL 16
89 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
90 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
92 static void push_access_scope (tree
);
93 static void pop_access_scope (tree
);
94 static int resolve_overloaded_unification (tree
, tree
, tree
, tree
,
95 unification_kind_t
, int);
96 static int try_one_overload (tree
, tree
, tree
, tree
, tree
,
97 unification_kind_t
, int, bool);
98 static int unify (tree
, tree
, tree
, tree
, int);
99 static void add_pending_template (tree
);
100 static void reopen_tinst_level (tree
);
101 static tree
classtype_mangled_name (tree
);
102 static char* mangle_class_name_for_template (const char *, tree
, tree
);
103 static tree
tsubst_initializer_list (tree
, tree
);
104 static tree
get_class_bindings (tree
, tree
, tree
);
105 static tree
coerce_template_parms (tree
, tree
, tree
, tsubst_flags_t
, int);
106 static void tsubst_enum (tree
, tree
, tree
);
107 static tree
add_to_template_args (tree
, tree
);
108 static tree
add_outermost_template_args (tree
, tree
);
109 static bool check_instantiated_args (tree
, tree
, tsubst_flags_t
);
110 static int maybe_adjust_types_for_deduction (unification_kind_t
, tree
*, tree
*);
111 static int type_unification_real (tree
, tree
, tree
, tree
,
112 int, unification_kind_t
, int);
113 static void note_template_header (int);
114 static tree
convert_nontype_argument_function (tree
, tree
);
115 static tree
convert_nontype_argument (tree
, tree
);
116 static tree
convert_template_argument (tree
, tree
, tree
,
117 tsubst_flags_t
, int, tree
);
118 static int for_each_template_parm (tree
, tree_fn_t
, void*,
119 struct pointer_set_t
*);
120 static tree
build_template_parm_index (int, int, int, tree
, tree
);
121 static int inline_needs_template_parms (tree
);
122 static void push_inline_template_parms_recursive (tree
, int);
123 static tree
retrieve_local_specialization (tree
);
124 static void register_local_specialization (tree
, tree
);
125 static tree
reduce_template_parm_level (tree
, tree
, int);
126 static int mark_template_parm (tree
, void *);
127 static int template_parm_this_level_p (tree
, void *);
128 static tree
tsubst_friend_function (tree
, tree
);
129 static tree
tsubst_friend_class (tree
, tree
);
130 static int can_complete_type_without_circularity (tree
);
131 static tree
get_bindings (tree
, tree
, tree
, bool);
132 static int template_decl_level (tree
);
133 static int check_cv_quals_for_unify (int, tree
, tree
);
134 static tree
tsubst_template_arg (tree
, tree
, tsubst_flags_t
, tree
);
135 static tree
tsubst_template_args (tree
, tree
, tsubst_flags_t
, tree
);
136 static tree
tsubst_template_parms (tree
, tree
, tsubst_flags_t
);
137 static void regenerate_decl_from_template (tree
, tree
);
138 static tree
most_specialized (tree
, tree
, tree
);
139 static tree
most_specialized_class (tree
, tree
);
140 static int template_class_depth_real (tree
, int);
141 static tree
tsubst_aggr_type (tree
, tree
, tsubst_flags_t
, tree
, int);
142 static tree
tsubst_arg_types (tree
, tree
, tsubst_flags_t
, tree
);
143 static tree
tsubst_function_type (tree
, tree
, tsubst_flags_t
, tree
);
144 static void check_specialization_scope (void);
145 static tree
process_partial_specialization (tree
);
146 static void set_current_access_from_decl (tree
);
147 static void check_default_tmpl_args (tree
, tree
, int, int);
148 static tree
tsubst_call_declarator_parms (tree
, tree
, tsubst_flags_t
, tree
);
149 static tree
get_template_base (tree
, tree
, tree
, tree
);
150 static int verify_class_unification (tree
, tree
, tree
);
151 static tree
try_class_unification (tree
, tree
, tree
, tree
);
152 static int coerce_template_template_parms (tree
, tree
, tsubst_flags_t
,
154 static tree
determine_specialization (tree
, tree
, tree
*, int, int);
155 static int template_args_equal (tree
, tree
);
156 static void tsubst_default_arguments (tree
);
157 static tree
for_each_template_parm_r (tree
*, int *, void *);
158 static tree
copy_default_args_to_explicit_spec_1 (tree
, tree
);
159 static void copy_default_args_to_explicit_spec (tree
);
160 static int invalid_nontype_parm_type_p (tree
, tsubst_flags_t
);
161 static int eq_local_specializations (const void *, const void *);
162 static bool dependent_type_p_r (tree
);
163 static tree
tsubst (tree
, tree
, tsubst_flags_t
, tree
);
164 static tree
tsubst_expr (tree
, tree
, tsubst_flags_t
, tree
);
165 static tree
tsubst_copy (tree
, tree
, tsubst_flags_t
, tree
);
167 /* Make the current scope suitable for access checking when we are
168 processing T. T can be FUNCTION_DECL for instantiated function
169 template, or VAR_DECL for static member variable (need by
170 instantiate_decl). */
173 push_access_scope (tree t
)
175 gcc_assert (TREE_CODE (t
) == FUNCTION_DECL
176 || TREE_CODE (t
) == VAR_DECL
);
178 if (DECL_FRIEND_CONTEXT (t
))
179 push_nested_class (DECL_FRIEND_CONTEXT (t
));
180 else if (DECL_CLASS_SCOPE_P (t
))
181 push_nested_class (DECL_CONTEXT (t
));
183 push_to_top_level ();
185 if (TREE_CODE (t
) == FUNCTION_DECL
)
187 saved_access_scope
= tree_cons
188 (NULL_TREE
, current_function_decl
, saved_access_scope
);
189 current_function_decl
= t
;
193 /* Restore the scope set up by push_access_scope. T is the node we
197 pop_access_scope (tree t
)
199 if (TREE_CODE (t
) == FUNCTION_DECL
)
201 current_function_decl
= TREE_VALUE (saved_access_scope
);
202 saved_access_scope
= TREE_CHAIN (saved_access_scope
);
205 if (DECL_FRIEND_CONTEXT (t
) || DECL_CLASS_SCOPE_P (t
))
208 pop_from_top_level ();
211 /* Do any processing required when DECL (a member template
212 declaration) is finished. Returns the TEMPLATE_DECL corresponding
213 to DECL, unless it is a specialization, in which case the DECL
214 itself is returned. */
217 finish_member_template_decl (tree decl
)
219 if (decl
== error_mark_node
)
220 return error_mark_node
;
222 gcc_assert (DECL_P (decl
));
224 if (TREE_CODE (decl
) == TYPE_DECL
)
228 type
= TREE_TYPE (decl
);
229 if (IS_AGGR_TYPE (type
)
230 && CLASSTYPE_TEMPLATE_INFO (type
)
231 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type
))
233 tree tmpl
= CLASSTYPE_TI_TEMPLATE (type
);
234 check_member_template (tmpl
);
239 else if (TREE_CODE (decl
) == FIELD_DECL
)
240 error ("data member %qD cannot be a member template", decl
);
241 else if (DECL_TEMPLATE_INFO (decl
))
243 if (!DECL_TEMPLATE_SPECIALIZATION (decl
))
245 check_member_template (DECL_TI_TEMPLATE (decl
));
246 return DECL_TI_TEMPLATE (decl
);
252 error ("invalid member template declaration %qD", decl
);
254 return error_mark_node
;
257 /* Returns the template nesting level of the indicated class TYPE.
267 A<T>::B<U> has depth two, while A<T> has depth one.
268 Both A<T>::B<int> and A<int>::B<U> have depth one, if
269 COUNT_SPECIALIZATIONS is 0 or if they are instantiations, not
272 This function is guaranteed to return 0 if passed NULL_TREE so
273 that, for example, `template_class_depth (current_class_type)' is
277 template_class_depth_real (tree type
, int count_specializations
)
282 type
&& TREE_CODE (type
) != NAMESPACE_DECL
;
283 type
= (TREE_CODE (type
) == FUNCTION_DECL
)
284 ? CP_DECL_CONTEXT (type
) : TYPE_CONTEXT (type
))
286 if (TREE_CODE (type
) != FUNCTION_DECL
)
288 if (CLASSTYPE_TEMPLATE_INFO (type
)
289 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type
))
290 && ((count_specializations
291 && CLASSTYPE_TEMPLATE_SPECIALIZATION (type
))
292 || uses_template_parms (CLASSTYPE_TI_ARGS (type
))))
297 if (DECL_TEMPLATE_INFO (type
)
298 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (type
))
299 && ((count_specializations
300 && DECL_TEMPLATE_SPECIALIZATION (type
))
301 || uses_template_parms (DECL_TI_ARGS (type
))))
309 /* Returns the template nesting level of the indicated class TYPE.
310 Like template_class_depth_real, but instantiations do not count in
314 template_class_depth (tree type
)
316 return template_class_depth_real (type
, /*count_specializations=*/0);
319 /* Returns 1 if processing DECL as part of do_pending_inlines
320 needs us to push template parms. */
323 inline_needs_template_parms (tree decl
)
325 if (! DECL_TEMPLATE_INFO (decl
))
328 return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl
)))
329 > (processing_template_decl
+ DECL_TEMPLATE_SPECIALIZATION (decl
)));
332 /* Subroutine of maybe_begin_member_template_processing.
333 Push the template parms in PARMS, starting from LEVELS steps into the
334 chain, and ending at the beginning, since template parms are listed
338 push_inline_template_parms_recursive (tree parmlist
, int levels
)
340 tree parms
= TREE_VALUE (parmlist
);
344 push_inline_template_parms_recursive (TREE_CHAIN (parmlist
), levels
- 1);
346 ++processing_template_decl
;
347 current_template_parms
348 = tree_cons (size_int (processing_template_decl
),
349 parms
, current_template_parms
);
350 TEMPLATE_PARMS_FOR_INLINE (current_template_parms
) = 1;
352 begin_scope (TREE_VEC_LENGTH (parms
) ? sk_template_parms
: sk_template_spec
,
354 for (i
= 0; i
< TREE_VEC_LENGTH (parms
); ++i
)
356 tree parm
= TREE_VALUE (TREE_VEC_ELT (parms
, i
));
357 gcc_assert (DECL_P (parm
));
359 switch (TREE_CODE (parm
))
368 /* Make a CONST_DECL as is done in process_template_parm.
369 It is ugly that we recreate this here; the original
370 version built in process_template_parm is no longer
372 tree decl
= build_decl (CONST_DECL
, DECL_NAME (parm
),
374 DECL_ARTIFICIAL (decl
) = 1;
375 TREE_CONSTANT (decl
) = 1;
376 TREE_INVARIANT (decl
) = 1;
377 TREE_READONLY (decl
) = 1;
378 DECL_INITIAL (decl
) = DECL_INITIAL (parm
);
379 SET_DECL_TEMPLATE_PARM_P (decl
);
390 /* Restore the template parameter context for a member template or
391 a friend template defined in a class definition. */
394 maybe_begin_member_template_processing (tree decl
)
399 if (inline_needs_template_parms (decl
))
401 parms
= DECL_TEMPLATE_PARMS (most_general_template (decl
));
402 levels
= TMPL_PARMS_DEPTH (parms
) - processing_template_decl
;
404 if (DECL_TEMPLATE_SPECIALIZATION (decl
))
407 parms
= TREE_CHAIN (parms
);
410 push_inline_template_parms_recursive (parms
, levels
);
413 /* Remember how many levels of template parameters we pushed so that
414 we can pop them later. */
415 if (!inline_parm_levels
)
416 VARRAY_INT_INIT (inline_parm_levels
, 4, "inline_parm_levels");
417 if (inline_parm_levels_used
== inline_parm_levels
->num_elements
)
418 VARRAY_GROW (inline_parm_levels
, 2 * inline_parm_levels_used
);
419 VARRAY_INT (inline_parm_levels
, inline_parm_levels_used
) = levels
;
420 ++inline_parm_levels_used
;
423 /* Undo the effects of maybe_begin_member_template_processing. */
426 maybe_end_member_template_processing (void)
430 if (!inline_parm_levels_used
)
433 --inline_parm_levels_used
;
435 i
< VARRAY_INT (inline_parm_levels
, inline_parm_levels_used
);
438 --processing_template_decl
;
439 current_template_parms
= TREE_CHAIN (current_template_parms
);
444 /* Return a new template argument vector which contains all of ARGS,
445 but has as its innermost set of arguments the EXTRA_ARGS. */
448 add_to_template_args (tree args
, tree extra_args
)
455 extra_depth
= TMPL_ARGS_DEPTH (extra_args
);
456 new_args
= make_tree_vec (TMPL_ARGS_DEPTH (args
) + extra_depth
);
458 for (i
= 1; i
<= TMPL_ARGS_DEPTH (args
); ++i
)
459 SET_TMPL_ARGS_LEVEL (new_args
, i
, TMPL_ARGS_LEVEL (args
, i
));
461 for (j
= 1; j
<= extra_depth
; ++j
, ++i
)
462 SET_TMPL_ARGS_LEVEL (new_args
, i
, TMPL_ARGS_LEVEL (extra_args
, j
));
467 /* Like add_to_template_args, but only the outermost ARGS are added to
468 the EXTRA_ARGS. In particular, all but TMPL_ARGS_DEPTH
469 (EXTRA_ARGS) levels are added. This function is used to combine
470 the template arguments from a partial instantiation with the
471 template arguments used to attain the full instantiation from the
472 partial instantiation. */
475 add_outermost_template_args (tree args
, tree extra_args
)
479 /* If there are more levels of EXTRA_ARGS than there are ARGS,
480 something very fishy is going on. */
481 gcc_assert (TMPL_ARGS_DEPTH (args
) >= TMPL_ARGS_DEPTH (extra_args
));
483 /* If *all* the new arguments will be the EXTRA_ARGS, just return
485 if (TMPL_ARGS_DEPTH (args
) == TMPL_ARGS_DEPTH (extra_args
))
488 /* For the moment, we make ARGS look like it contains fewer levels. */
489 TREE_VEC_LENGTH (args
) -= TMPL_ARGS_DEPTH (extra_args
);
491 new_args
= add_to_template_args (args
, extra_args
);
493 /* Now, we restore ARGS to its full dimensions. */
494 TREE_VEC_LENGTH (args
) += TMPL_ARGS_DEPTH (extra_args
);
499 /* Return the N levels of innermost template arguments from the ARGS. */
502 get_innermost_template_args (tree args
, int n
)
510 /* If N is 1, just return the innermost set of template arguments. */
512 return TMPL_ARGS_LEVEL (args
, TMPL_ARGS_DEPTH (args
));
514 /* If we're not removing anything, just return the arguments we were
516 extra_levels
= TMPL_ARGS_DEPTH (args
) - n
;
517 gcc_assert (extra_levels
>= 0);
518 if (extra_levels
== 0)
521 /* Make a new set of arguments, not containing the outer arguments. */
522 new_args
= make_tree_vec (n
);
523 for (i
= 1; i
<= n
; ++i
)
524 SET_TMPL_ARGS_LEVEL (new_args
, i
,
525 TMPL_ARGS_LEVEL (args
, i
+ extra_levels
));
530 /* We've got a template header coming up; push to a new level for storing
534 begin_template_parm_list (void)
536 /* We use a non-tag-transparent scope here, which causes pushtag to
537 put tags in this scope, rather than in the enclosing class or
538 namespace scope. This is the right thing, since we want
539 TEMPLATE_DECLS, and not TYPE_DECLS for template classes. For a
540 global template class, push_template_decl handles putting the
541 TEMPLATE_DECL into top-level scope. For a nested template class,
544 template <class T> struct S1 {
545 template <class T> struct S2 {};
548 pushtag contains special code to call pushdecl_with_scope on the
549 TEMPLATE_DECL for S2. */
550 begin_scope (sk_template_parms
, NULL
);
551 ++processing_template_decl
;
552 ++processing_template_parmlist
;
553 note_template_header (0);
556 /* This routine is called when a specialization is declared. If it is
557 invalid to declare a specialization here, an error is reported. */
560 check_specialization_scope (void)
562 tree scope
= current_scope ();
566 An explicit specialization shall be declared in the namespace of
567 which the template is a member, or, for member templates, in the
568 namespace of which the enclosing class or enclosing class
569 template is a member. An explicit specialization of a member
570 function, member class or static data member of a class template
571 shall be declared in the namespace of which the class template
573 if (scope
&& TREE_CODE (scope
) != NAMESPACE_DECL
)
574 error ("explicit specialization in non-namespace scope %qD", scope
);
578 In an explicit specialization declaration for a member of a class
579 template or a member template that appears in namespace scope,
580 the member template and some of its enclosing class templates may
581 remain unspecialized, except that the declaration shall not
582 explicitly specialize a class member template if its enclosing
583 class templates are not explicitly specialized as well. */
584 if (current_template_parms
)
585 error ("enclosing class templates are not explicitly specialized");
588 /* We've just seen template <>. */
591 begin_specialization (void)
593 begin_scope (sk_template_spec
, NULL
);
594 note_template_header (1);
595 check_specialization_scope ();
598 /* Called at then end of processing a declaration preceded by
602 end_specialization (void)
605 reset_specialization ();
608 /* Any template <>'s that we have seen thus far are not referring to a
609 function specialization. */
612 reset_specialization (void)
614 processing_specialization
= 0;
615 template_header_count
= 0;
618 /* We've just seen a template header. If SPECIALIZATION is nonzero,
619 it was of the form template <>. */
622 note_template_header (int specialization
)
624 processing_specialization
= specialization
;
625 template_header_count
++;
628 /* We're beginning an explicit instantiation. */
631 begin_explicit_instantiation (void)
633 gcc_assert (!processing_explicit_instantiation
);
634 processing_explicit_instantiation
= true;
639 end_explicit_instantiation (void)
641 gcc_assert (processing_explicit_instantiation
);
642 processing_explicit_instantiation
= false;
645 /* A explicit specialization or partial specialization TMPL is being
646 declared. Check that the namespace in which the specialization is
647 occurring is permissible. Returns false iff it is invalid to
648 specialize TMPL in the current namespace. */
651 check_specialization_namespace (tree tmpl
)
653 tree tpl_ns
= decl_namespace_context (tmpl
);
657 An explicit specialization shall be declared in the namespace of
658 which the template is a member, or, for member templates, in the
659 namespace of which the enclosing class or enclosing class
660 template is a member. An explicit specialization of a member
661 function, member class or static data member of a class template
662 shall be declared in the namespace of which the class template is
664 if (is_associated_namespace (current_namespace
, tpl_ns
))
665 /* Same or super-using namespace. */
669 pedwarn ("specialization of %qD in different namespace", tmpl
);
670 pedwarn (" from definition of %q+#D", tmpl
);
675 /* The TYPE is being declared. If it is a template type, that means it
676 is a partial specialization. Do appropriate error-checking. */
679 maybe_process_partial_specialization (tree type
)
681 /* TYPE maybe an ERROR_MARK_NODE. */
682 tree context
= TYPE_P (type
) ? TYPE_CONTEXT (type
) : NULL_TREE
;
684 if (CLASS_TYPE_P (type
) && CLASSTYPE_USE_TEMPLATE (type
))
686 /* This is for ordinary explicit specialization and partial
687 specialization of a template class such as:
689 template <> class C<int>;
693 template <class T> class C<T*>;
695 Make sure that `C<int>' and `C<T*>' are implicit instantiations. */
697 if (CLASSTYPE_IMPLICIT_INSTANTIATION (type
)
698 && !COMPLETE_TYPE_P (type
))
700 check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type
));
701 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type
);
702 if (processing_template_decl
)
703 push_template_decl (TYPE_MAIN_DECL (type
));
705 else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type
))
706 error ("specialization of %qT after instantiation", type
);
708 else if (CLASS_TYPE_P (type
)
709 && !CLASSTYPE_USE_TEMPLATE (type
)
710 && CLASSTYPE_TEMPLATE_INFO (type
)
711 && context
&& CLASS_TYPE_P (context
)
712 && CLASSTYPE_TEMPLATE_INFO (context
))
714 /* This is for an explicit specialization of member class
715 template according to [temp.expl.spec/18]:
717 template <> template <class U> class C<int>::D;
719 The context `C<int>' must be an implicit instantiation.
720 Otherwise this is just a member class template declared
723 template <> class C<int> { template <class U> class D; };
724 template <> template <class U> class C<int>::D;
726 In the first case, `C<int>::D' is a specialization of `C<T>::D'
727 while in the second case, `C<int>::D' is a primary template
728 and `C<T>::D' may not exist. */
730 if (CLASSTYPE_IMPLICIT_INSTANTIATION (context
)
731 && !COMPLETE_TYPE_P (type
))
735 if (current_namespace
736 != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type
)))
738 pedwarn ("specializing %q#T in different namespace", type
);
739 pedwarn (" from definition of %q+#D",
740 CLASSTYPE_TI_TEMPLATE (type
));
743 /* Check for invalid specialization after instantiation:
745 template <> template <> class C<int>::D<int>;
746 template <> template <class U> class C<int>::D; */
748 for (t
= DECL_TEMPLATE_INSTANTIATIONS
749 (most_general_template (CLASSTYPE_TI_TEMPLATE (type
)));
750 t
; t
= TREE_CHAIN (t
))
751 if (TREE_VALUE (t
) != type
752 && TYPE_CONTEXT (TREE_VALUE (t
)) == context
)
753 error ("specialization %qT after instantiation %qT",
754 type
, TREE_VALUE (t
));
756 /* Mark TYPE as a specialization. And as a result, we only
757 have one level of template argument for the innermost
759 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type
);
760 CLASSTYPE_TI_ARGS (type
)
761 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type
));
764 else if (processing_specialization
)
765 error ("explicit specialization of non-template %qT", type
);
768 /* Returns nonzero if we can optimize the retrieval of specializations
769 for TMPL, a TEMPLATE_DECL. In particular, for such a template, we
770 do not use DECL_TEMPLATE_SPECIALIZATIONS at all. */
773 optimize_specialization_lookup_p (tree tmpl
)
775 return (DECL_FUNCTION_TEMPLATE_P (tmpl
)
776 && DECL_CLASS_SCOPE_P (tmpl
)
777 /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
779 && CLASS_TYPE_P (DECL_CONTEXT (tmpl
))
780 /* The optimized lookup depends on the fact that the
781 template arguments for the member function template apply
782 purely to the containing class, which is not true if the
783 containing class is an explicit or partial
785 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl
))
786 && !DECL_MEMBER_TEMPLATE_P (tmpl
)
787 && !DECL_CONV_FN_P (tmpl
)
788 /* It is possible to have a template that is not a member
789 template and is not a member of a template class:
791 template <typename T>
792 struct S { friend A::f(); };
794 Here, the friend function is a template, but the context does
795 not have template information. The optimized lookup relies
796 on having ARGS be the template arguments for both the class
797 and the function template. */
798 && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl
)));
801 /* Retrieve the specialization (in the sense of [temp.spec] - a
802 specialization is either an instantiation or an explicit
803 specialization) of TMPL for the given template ARGS. If there is
804 no such specialization, return NULL_TREE. The ARGS are a vector of
805 arguments, or a vector of vectors of arguments, in the case of
806 templates with more than one level of parameters.
808 If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
809 then we search for a partial specialization matching ARGS. This
810 parameter is ignored if TMPL is not a class template. */
813 retrieve_specialization (tree tmpl
, tree args
,
814 bool class_specializations_p
)
816 gcc_assert (TREE_CODE (tmpl
) == TEMPLATE_DECL
);
818 /* There should be as many levels of arguments as there are
819 levels of parameters. */
820 gcc_assert (TMPL_ARGS_DEPTH (args
)
821 == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl
)));
823 if (optimize_specialization_lookup_p (tmpl
))
826 tree class_specialization
;
827 VEC(tree
,gc
) *methods
;
831 /* The template arguments actually apply to the containing
832 class. Find the class specialization with those
834 class_template
= CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl
));
836 = retrieve_specialization (class_template
, args
,
837 /*class_specializations_p=*/false);
838 if (!class_specialization
)
840 /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
841 for the specialization. */
842 idx
= class_method_index_for_fn (class_specialization
, tmpl
);
845 /* Iterate through the methods with the indicated name, looking
846 for the one that has an instance of TMPL. */
847 methods
= CLASSTYPE_METHOD_VEC (class_specialization
);
848 for (fns
= VEC_index (tree
, methods
, idx
); fns
; fns
= OVL_NEXT (fns
))
850 tree fn
= OVL_CURRENT (fns
);
851 if (DECL_TEMPLATE_INFO (fn
) && DECL_TI_TEMPLATE (fn
) == tmpl
)
861 /* Class templates store their instantiations on the
862 DECL_TEMPLATE_INSTANTIATIONS list; other templates use the
863 DECL_TEMPLATE_SPECIALIZATIONS list. */
864 if (!class_specializations_p
865 && TREE_CODE (DECL_TEMPLATE_RESULT (tmpl
)) == TYPE_DECL
)
866 sp
= &DECL_TEMPLATE_INSTANTIATIONS (tmpl
);
868 sp
= &DECL_TEMPLATE_SPECIALIZATIONS (tmpl
);
870 /* Iterate through the list until we find a matching template. */
871 while (*sp
!= NULL_TREE
)
875 if (comp_template_args (TREE_PURPOSE (spec
), args
))
877 /* Use the move-to-front heuristic to speed up future
881 *sp
= TREE_CHAIN (*sp
);
882 TREE_CHAIN (spec
) = *head
;
885 return TREE_VALUE (spec
);
887 sp
= &TREE_CHAIN (spec
);
894 /* Like retrieve_specialization, but for local declarations. */
897 retrieve_local_specialization (tree tmpl
)
899 tree spec
= htab_find_with_hash (local_specializations
, tmpl
,
900 htab_hash_pointer (tmpl
));
901 return spec
? TREE_PURPOSE (spec
) : NULL_TREE
;
904 /* Returns nonzero iff DECL is a specialization of TMPL. */
907 is_specialization_of (tree decl
, tree tmpl
)
911 if (TREE_CODE (decl
) == FUNCTION_DECL
)
915 t
= DECL_TEMPLATE_INFO (t
) ? DECL_TI_TEMPLATE (t
) : NULL_TREE
)
921 gcc_assert (TREE_CODE (decl
) == TYPE_DECL
);
923 for (t
= TREE_TYPE (decl
);
925 t
= CLASSTYPE_USE_TEMPLATE (t
)
926 ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t
)) : NULL_TREE
)
927 if (same_type_ignoring_top_level_qualifiers_p (t
, TREE_TYPE (tmpl
)))
934 /* Returns nonzero iff DECL is a specialization of friend declaration
935 FRIEND according to [temp.friend]. */
938 is_specialization_of_friend (tree decl
, tree
friend)
940 bool need_template
= true;
943 gcc_assert (TREE_CODE (decl
) == FUNCTION_DECL
944 || TREE_CODE (decl
) == TYPE_DECL
);
946 /* For [temp.friend/6] when FRIEND is an ordinary member function
947 of a template class, we want to check if DECL is a specialization
949 if (TREE_CODE (friend) == FUNCTION_DECL
950 && DECL_TEMPLATE_INFO (friend)
951 && !DECL_USE_TEMPLATE (friend))
953 /* We want a TEMPLATE_DECL for `is_specialization_of'. */
954 friend = DECL_TI_TEMPLATE (friend);
955 need_template
= false;
957 else if (TREE_CODE (friend) == TEMPLATE_DECL
958 && !PRIMARY_TEMPLATE_P (friend))
959 need_template
= false;
961 /* There is nothing to do if this is not a template friend. */
962 if (TREE_CODE (friend) != TEMPLATE_DECL
)
965 if (is_specialization_of (decl
, friend))
969 A member of a class template may be declared to be a friend of a
970 non-template class. In this case, the corresponding member of
971 every specialization of the class template is a friend of the
972 class granting friendship.
974 For example, given a template friend declaration
976 template <class T> friend void A<T>::f();
978 the member function below is considered a friend
980 template <> struct A<int> {
984 For this type of template friend, TEMPLATE_DEPTH below will be
985 nonzero. To determine if DECL is a friend of FRIEND, we first
986 check if the enclosing class is a specialization of another. */
988 template_depth
= template_class_depth (DECL_CONTEXT (friend));
990 && DECL_CLASS_SCOPE_P (decl
)
991 && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl
)),
992 CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend))))
994 /* Next, we check the members themselves. In order to handle
995 a few tricky cases, such as when FRIEND's are
997 template <class T> friend void A<T>::g(T t);
998 template <class T> template <T t> friend void A<T>::h();
1002 void A<int>::g(int);
1003 template <int> void A<int>::h();
1005 we need to figure out ARGS, the template arguments from
1006 the context of DECL. This is required for template substitution
1007 of `T' in the function parameter of `g' and template parameter
1008 of `h' in the above examples. Here ARGS corresponds to `int'. */
1010 tree context
= DECL_CONTEXT (decl
);
1011 tree args
= NULL_TREE
;
1012 int current_depth
= 0;
1014 while (current_depth
< template_depth
)
1016 if (CLASSTYPE_TEMPLATE_INFO (context
))
1018 if (current_depth
== 0)
1019 args
= TYPE_TI_ARGS (context
);
1021 args
= add_to_template_args (TYPE_TI_ARGS (context
), args
);
1024 context
= TYPE_CONTEXT (context
);
1027 if (TREE_CODE (decl
) == FUNCTION_DECL
)
1032 tree friend_args_type
;
1033 tree decl_args_type
;
1035 /* Make sure that both DECL and FRIEND are templates or
1037 is_template
= DECL_TEMPLATE_INFO (decl
)
1038 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl
));
1039 if (need_template
^ is_template
)
1041 else if (is_template
)
1043 /* If both are templates, check template parameter list. */
1045 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1047 if (!comp_template_parms
1048 (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl
)),
1052 decl_type
= TREE_TYPE (DECL_TI_TEMPLATE (decl
));
1055 decl_type
= TREE_TYPE (decl
);
1057 friend_type
= tsubst_function_type (TREE_TYPE (friend), args
,
1058 tf_none
, NULL_TREE
);
1059 if (friend_type
== error_mark_node
)
1062 /* Check if return types match. */
1063 if (!same_type_p (TREE_TYPE (decl_type
), TREE_TYPE (friend_type
)))
1066 /* Check if function parameter types match, ignoring the
1067 `this' parameter. */
1068 friend_args_type
= TYPE_ARG_TYPES (friend_type
);
1069 decl_args_type
= TYPE_ARG_TYPES (decl_type
);
1070 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend))
1071 friend_args_type
= TREE_CHAIN (friend_args_type
);
1072 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl
))
1073 decl_args_type
= TREE_CHAIN (decl_args_type
);
1075 return compparms (decl_args_type
, friend_args_type
);
1079 /* DECL is a TYPE_DECL */
1081 tree decl_type
= TREE_TYPE (decl
);
1083 /* Make sure that both DECL and FRIEND are templates or
1086 = CLASSTYPE_TEMPLATE_INFO (decl_type
)
1087 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type
));
1089 if (need_template
^ is_template
)
1091 else if (is_template
)
1094 /* If both are templates, check the name of the two
1095 TEMPLATE_DECL's first because is_friend didn't. */
1096 if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type
))
1097 != DECL_NAME (friend))
1100 /* Now check template parameter list. */
1102 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1104 return comp_template_parms
1105 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type
)),
1109 return (DECL_NAME (decl
)
1110 == DECL_NAME (friend));
1116 /* Register the specialization SPEC as a specialization of TMPL with
1117 the indicated ARGS. Returns SPEC, or an equivalent prior
1118 declaration, if available. */
1121 register_specialization (tree spec
, tree tmpl
, tree args
)
1125 gcc_assert (TREE_CODE (tmpl
) == TEMPLATE_DECL
);
1127 if (TREE_CODE (spec
) == FUNCTION_DECL
1128 && uses_template_parms (DECL_TI_ARGS (spec
)))
1129 /* This is the FUNCTION_DECL for a partial instantiation. Don't
1130 register it; we want the corresponding TEMPLATE_DECL instead.
1131 We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1132 the more obvious `uses_template_parms (spec)' to avoid problems
1133 with default function arguments. In particular, given
1134 something like this:
1136 template <class T> void f(T t1, T t = T())
1138 the default argument expression is not substituted for in an
1139 instantiation unless and until it is actually needed. */
1142 fn
= retrieve_specialization (tmpl
, args
,
1143 /*class_specializations_p=*/false);
1144 /* We can sometimes try to re-register a specialization that we've
1145 already got. In particular, regenerate_decl_from_template calls
1146 duplicate_decls which will update the specialization list. But,
1147 we'll still get called again here anyhow. It's more convenient
1148 to simply allow this than to try to prevent it. */
1151 else if (fn
&& DECL_TEMPLATE_SPECIALIZATION (spec
))
1153 if (DECL_TEMPLATE_INSTANTIATION (fn
))
1156 || DECL_EXPLICIT_INSTANTIATION (fn
))
1158 error ("specialization of %qD after instantiation",
1164 /* This situation should occur only if the first
1165 specialization is an implicit instantiation, the
1166 second is an explicit specialization, and the
1167 implicit instantiation has not yet been used. That
1168 situation can occur if we have implicitly
1169 instantiated a member function and then specialized
1172 We can also wind up here if a friend declaration that
1173 looked like an instantiation turns out to be a
1176 template <class T> void foo(T);
1177 class S { friend void foo<>(int) };
1178 template <> void foo(int);
1180 We transform the existing DECL in place so that any
1181 pointers to it become pointers to the updated
1184 If there was a definition for the template, but not
1185 for the specialization, we want this to look as if
1186 there were no definition, and vice versa. */
1187 DECL_INITIAL (fn
) = NULL_TREE
;
1188 duplicate_decls (spec
, fn
);
1193 else if (DECL_TEMPLATE_SPECIALIZATION (fn
))
1195 if (!duplicate_decls (spec
, fn
) && DECL_INITIAL (spec
))
1196 /* Dup decl failed, but this is a new definition. Set the
1197 line number so any errors match this new
1199 DECL_SOURCE_LOCATION (fn
) = DECL_SOURCE_LOCATION (spec
);
1205 /* A specialization must be declared in the same namespace as the
1206 template it is specializing. */
1207 if (DECL_TEMPLATE_SPECIALIZATION (spec
)
1208 && !check_specialization_namespace (tmpl
))
1209 DECL_CONTEXT (spec
) = decl_namespace_context (tmpl
);
1211 if (!optimize_specialization_lookup_p (tmpl
))
1212 DECL_TEMPLATE_SPECIALIZATIONS (tmpl
)
1213 = tree_cons (args
, spec
, DECL_TEMPLATE_SPECIALIZATIONS (tmpl
));
1218 /* Unregister the specialization SPEC as a specialization of TMPL.
1219 Replace it with NEW_SPEC, if NEW_SPEC is non-NULL. Returns true
1220 if the SPEC was listed as a specialization of TMPL. */
1223 reregister_specialization (tree spec
, tree tmpl
, tree new_spec
)
1227 for (s
= &DECL_TEMPLATE_SPECIALIZATIONS (tmpl
);
1229 s
= &TREE_CHAIN (*s
))
1230 if (TREE_VALUE (*s
) == spec
)
1233 *s
= TREE_CHAIN (*s
);
1235 TREE_VALUE (*s
) = new_spec
;
1242 /* Compare an entry in the local specializations hash table P1 (which
1243 is really a pointer to a TREE_LIST) with P2 (which is really a
1247 eq_local_specializations (const void *p1
, const void *p2
)
1249 return TREE_VALUE ((tree
) p1
) == (tree
) p2
;
1252 /* Hash P1, an entry in the local specializations table. */
1255 hash_local_specialization (const void* p1
)
1257 return htab_hash_pointer (TREE_VALUE ((tree
) p1
));
1260 /* Like register_specialization, but for local declarations. We are
1261 registering SPEC, an instantiation of TMPL. */
1264 register_local_specialization (tree spec
, tree tmpl
)
1268 slot
= htab_find_slot_with_hash (local_specializations
, tmpl
,
1269 htab_hash_pointer (tmpl
), INSERT
);
1270 *slot
= build_tree_list (spec
, tmpl
);
1273 /* Print the list of candidate FNS in an error message. */
1276 print_candidates (tree fns
)
1280 const char *str
= "candidates are:";
1282 for (fn
= fns
; fn
!= NULL_TREE
; fn
= TREE_CHAIN (fn
))
1286 for (f
= TREE_VALUE (fn
); f
; f
= OVL_NEXT (f
))
1287 error ("%s %+#D", str
, OVL_CURRENT (f
));
1292 /* Returns the template (one of the functions given by TEMPLATE_ID)
1293 which can be specialized to match the indicated DECL with the
1294 explicit template args given in TEMPLATE_ID. The DECL may be
1295 NULL_TREE if none is available. In that case, the functions in
1296 TEMPLATE_ID are non-members.
1298 If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1299 specialization of a member template.
1301 The TEMPLATE_COUNT is the number of references to qualifying
1302 template classes that appeared in the name of the function. See
1303 check_explicit_specialization for a more accurate description.
1305 The template args (those explicitly specified and those deduced)
1306 are output in a newly created vector *TARGS_OUT.
1308 If it is impossible to determine the result, an error message is
1309 issued. The error_mark_node is returned to indicate failure. */
1312 determine_specialization (tree template_id
,
1315 int need_member_template
,
1320 tree explicit_targs
;
1321 tree candidates
= NULL_TREE
;
1322 tree templates
= NULL_TREE
;
1324 struct cp_binding_level
*b
;
1326 *targs_out
= NULL_TREE
;
1328 if (template_id
== error_mark_node
)
1329 return error_mark_node
;
1331 fns
= TREE_OPERAND (template_id
, 0);
1332 explicit_targs
= TREE_OPERAND (template_id
, 1);
1334 if (fns
== error_mark_node
)
1335 return error_mark_node
;
1337 /* Check for baselinks. */
1338 if (BASELINK_P (fns
))
1339 fns
= BASELINK_FUNCTIONS (fns
);
1341 if (!is_overloaded_fn (fns
))
1343 error ("%qD is not a function template", fns
);
1344 return error_mark_node
;
1347 /* Count the number of template headers specified for this
1350 for (b
= current_binding_level
;
1351 b
->kind
== sk_template_parms
;
1355 for (; fns
; fns
= OVL_NEXT (fns
))
1357 tree fn
= OVL_CURRENT (fns
);
1359 if (TREE_CODE (fn
) == TEMPLATE_DECL
)
1361 tree decl_arg_types
;
1364 /* DECL might be a specialization of FN. */
1366 /* Adjust the type of DECL in case FN is a static member. */
1367 decl_arg_types
= TYPE_ARG_TYPES (TREE_TYPE (decl
));
1368 if (DECL_STATIC_FUNCTION_P (fn
)
1369 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl
))
1370 decl_arg_types
= TREE_CHAIN (decl_arg_types
);
1372 /* Check that the number of function parameters matches.
1374 template <class T> void f(int i = 0);
1375 template <> void f<int>();
1376 The specialization f<int> is invalid but is not caught
1377 by get_bindings below. */
1379 fn_arg_types
= TYPE_ARG_TYPES (TREE_TYPE (fn
));
1380 if (list_length (fn_arg_types
) != list_length (decl_arg_types
))
1383 /* For a non-static member function, we need to make sure that
1384 the const qualification is the same. This can be done by
1385 checking the 'this' in the argument list. */
1386 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn
)
1387 && !same_type_p (TREE_VALUE (fn_arg_types
),
1388 TREE_VALUE (decl_arg_types
)))
1391 /* In case of explicit specialization, we need to check if
1392 the number of template headers appearing in the specialization
1393 is correct. This is usually done in check_explicit_specialization,
1394 but the check done there cannot be exhaustive when specializing
1395 member functions. Consider the following code:
1397 template <> void A<int>::f(int);
1398 template <> template <> void A<int>::f(int);
1400 Assuming that A<int> is not itself an explicit specialization
1401 already, the first line specializes "f" which is a non-template
1402 member function, whilst the second line specializes "f" which
1403 is a template member function. So both lines are syntactically
1404 correct, and check_explicit_specialization does not reject
1407 Here, we can do better, as we are matching the specialization
1408 against the declarations. We count the number of template
1409 headers, and we check if they match TEMPLATE_COUNT + 1
1410 (TEMPLATE_COUNT is the number of qualifying template classes,
1411 plus there must be another header for the member template
1414 Notice that if header_count is zero, this is not a
1415 specialization but rather a template instantiation, so there
1416 is no check we can perform here. */
1417 if (header_count
&& header_count
!= template_count
+ 1)
1420 /* Check that the number of template arguments at the
1421 innermost level for DECL is the same as for FN. */
1422 if (current_binding_level
->kind
== sk_template_parms
1423 && !current_binding_level
->explicit_spec_p
1424 && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn
))
1425 != TREE_VEC_LENGTH (TREE_VALUE (current_template_parms
))))
1428 /* See whether this function might be a specialization of this
1430 targs
= get_bindings (fn
, decl
, explicit_targs
, /*check_ret=*/true);
1433 /* We cannot deduce template arguments that when used to
1434 specialize TMPL will produce DECL. */
1437 /* Save this template, and the arguments deduced. */
1438 templates
= tree_cons (targs
, fn
, templates
);
1440 else if (need_member_template
)
1441 /* FN is an ordinary member function, and we need a
1442 specialization of a member template. */
1444 else if (TREE_CODE (fn
) != FUNCTION_DECL
)
1445 /* We can get IDENTIFIER_NODEs here in certain erroneous
1448 else if (!DECL_FUNCTION_MEMBER_P (fn
))
1449 /* This is just an ordinary non-member function. Nothing can
1450 be a specialization of that. */
1452 else if (DECL_ARTIFICIAL (fn
))
1453 /* Cannot specialize functions that are created implicitly. */
1457 tree decl_arg_types
;
1459 /* This is an ordinary member function. However, since
1460 we're here, we can assume it's enclosing class is a
1461 template class. For example,
1463 template <typename T> struct S { void f(); };
1464 template <> void S<int>::f() {}
1466 Here, S<int>::f is a non-template, but S<int> is a
1467 template class. If FN has the same type as DECL, we
1468 might be in business. */
1470 if (!DECL_TEMPLATE_INFO (fn
))
1471 /* Its enclosing class is an explicit specialization
1472 of a template class. This is not a candidate. */
1475 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl
)),
1476 TREE_TYPE (TREE_TYPE (fn
))))
1477 /* The return types differ. */
1480 /* Adjust the type of DECL in case FN is a static member. */
1481 decl_arg_types
= TYPE_ARG_TYPES (TREE_TYPE (decl
));
1482 if (DECL_STATIC_FUNCTION_P (fn
)
1483 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl
))
1484 decl_arg_types
= TREE_CHAIN (decl_arg_types
);
1486 if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn
)),
1489 candidates
= tree_cons (NULL_TREE
, fn
, candidates
);
1493 if (templates
&& TREE_CHAIN (templates
))
1499 It is possible for a specialization with a given function
1500 signature to be instantiated from more than one function
1501 template. In such cases, explicit specification of the
1502 template arguments must be used to uniquely identify the
1503 function template specialization being specialized.
1505 Note that here, there's no suggestion that we're supposed to
1506 determine which of the candidate templates is most
1507 specialized. However, we, also have:
1511 Partial ordering of overloaded function template
1512 declarations is used in the following contexts to select
1513 the function template to which a function template
1514 specialization refers:
1516 -- when an explicit specialization refers to a function
1519 So, we do use the partial ordering rules, at least for now.
1520 This extension can only serve to make invalid programs valid,
1521 so it's safe. And, there is strong anecdotal evidence that
1522 the committee intended the partial ordering rules to apply;
1523 the EDG front-end has that behavior, and John Spicer claims
1524 that the committee simply forgot to delete the wording in
1525 [temp.expl.spec]. */
1526 tree tmpl
= most_specialized (templates
, decl
, explicit_targs
);
1527 if (tmpl
&& tmpl
!= error_mark_node
)
1529 targs
= get_bindings (tmpl
, decl
, explicit_targs
, /*check_ret=*/true);
1530 templates
= tree_cons (targs
, tmpl
, NULL_TREE
);
1534 if (templates
== NULL_TREE
&& candidates
== NULL_TREE
)
1536 error ("template-id %qD for %q+D does not match any template "
1537 "declaration", template_id
, decl
);
1538 return error_mark_node
;
1540 else if ((templates
&& TREE_CHAIN (templates
))
1541 || (candidates
&& TREE_CHAIN (candidates
))
1542 || (templates
&& candidates
))
1544 error ("ambiguous template specialization %qD for %q+D",
1546 chainon (candidates
, templates
);
1547 print_candidates (candidates
);
1548 return error_mark_node
;
1551 /* We have one, and exactly one, match. */
1554 /* It was a specialization of an ordinary member function in a
1556 *targs_out
= copy_node (DECL_TI_ARGS (TREE_VALUE (candidates
)));
1557 return DECL_TI_TEMPLATE (TREE_VALUE (candidates
));
1560 /* It was a specialization of a template. */
1561 targs
= DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates
)));
1562 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs
))
1564 *targs_out
= copy_node (targs
);
1565 SET_TMPL_ARGS_LEVEL (*targs_out
,
1566 TMPL_ARGS_DEPTH (*targs_out
),
1567 TREE_PURPOSE (templates
));
1570 *targs_out
= TREE_PURPOSE (templates
);
1571 return TREE_VALUE (templates
);
1574 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1575 but with the default argument values filled in from those in the
1579 copy_default_args_to_explicit_spec_1 (tree spec_types
,
1582 tree new_spec_types
;
1587 if (spec_types
== void_list_node
)
1588 return void_list_node
;
1590 /* Substitute into the rest of the list. */
1592 copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types
),
1593 TREE_CHAIN (tmpl_types
));
1595 /* Add the default argument for this parameter. */
1596 return hash_tree_cons (TREE_PURPOSE (tmpl_types
),
1597 TREE_VALUE (spec_types
),
1601 /* DECL is an explicit specialization. Replicate default arguments
1602 from the template it specializes. (That way, code like:
1604 template <class T> void f(T = 3);
1605 template <> void f(double);
1608 works, as required.) An alternative approach would be to look up
1609 the correct default arguments at the call-site, but this approach
1610 is consistent with how implicit instantiations are handled. */
1613 copy_default_args_to_explicit_spec (tree decl
)
1618 tree new_spec_types
;
1622 tree object_type
= NULL_TREE
;
1623 tree in_charge
= NULL_TREE
;
1624 tree vtt
= NULL_TREE
;
1626 /* See if there's anything we need to do. */
1627 tmpl
= DECL_TI_TEMPLATE (decl
);
1628 tmpl_types
= TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl
)));
1629 for (t
= tmpl_types
; t
; t
= TREE_CHAIN (t
))
1630 if (TREE_PURPOSE (t
))
1635 old_type
= TREE_TYPE (decl
);
1636 spec_types
= TYPE_ARG_TYPES (old_type
);
1638 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl
))
1640 /* Remove the this pointer, but remember the object's type for
1642 object_type
= TREE_TYPE (TREE_VALUE (spec_types
));
1643 spec_types
= TREE_CHAIN (spec_types
);
1644 tmpl_types
= TREE_CHAIN (tmpl_types
);
1646 if (DECL_HAS_IN_CHARGE_PARM_P (decl
))
1648 /* DECL may contain more parameters than TMPL due to the extra
1649 in-charge parameter in constructors and destructors. */
1650 in_charge
= spec_types
;
1651 spec_types
= TREE_CHAIN (spec_types
);
1653 if (DECL_HAS_VTT_PARM_P (decl
))
1656 spec_types
= TREE_CHAIN (spec_types
);
1660 /* Compute the merged default arguments. */
1662 copy_default_args_to_explicit_spec_1 (spec_types
, tmpl_types
);
1664 /* Compute the new FUNCTION_TYPE. */
1668 new_spec_types
= hash_tree_cons (TREE_PURPOSE (vtt
),
1673 /* Put the in-charge parameter back. */
1674 new_spec_types
= hash_tree_cons (TREE_PURPOSE (in_charge
),
1675 TREE_VALUE (in_charge
),
1678 new_type
= build_method_type_directly (object_type
,
1679 TREE_TYPE (old_type
),
1683 new_type
= build_function_type (TREE_TYPE (old_type
),
1685 new_type
= cp_build_type_attribute_variant (new_type
,
1686 TYPE_ATTRIBUTES (old_type
));
1687 new_type
= build_exception_variant (new_type
,
1688 TYPE_RAISES_EXCEPTIONS (old_type
));
1689 TREE_TYPE (decl
) = new_type
;
1692 /* Check to see if the function just declared, as indicated in
1693 DECLARATOR, and in DECL, is a specialization of a function
1694 template. We may also discover that the declaration is an explicit
1695 instantiation at this point.
1697 Returns DECL, or an equivalent declaration that should be used
1698 instead if all goes well. Issues an error message if something is
1699 amiss. Returns error_mark_node if the error is not easily
1702 FLAGS is a bitmask consisting of the following flags:
1704 2: The function has a definition.
1705 4: The function is a friend.
1707 The TEMPLATE_COUNT is the number of references to qualifying
1708 template classes that appeared in the name of the function. For
1711 template <class T> struct S { void f(); };
1714 the TEMPLATE_COUNT would be 1. However, explicitly specialized
1715 classes are not counted in the TEMPLATE_COUNT, so that in
1717 template <class T> struct S {};
1718 template <> struct S<int> { void f(); }
1719 template <> void S<int>::f();
1721 the TEMPLATE_COUNT would be 0. (Note that this declaration is
1722 invalid; there should be no template <>.)
1724 If the function is a specialization, it is marked as such via
1725 DECL_TEMPLATE_SPECIALIZATION. Furthermore, its DECL_TEMPLATE_INFO
1726 is set up correctly, and it is added to the list of specializations
1727 for that template. */
1730 check_explicit_specialization (tree declarator
,
1735 int have_def
= flags
& 2;
1736 int is_friend
= flags
& 4;
1737 int specialization
= 0;
1738 int explicit_instantiation
= 0;
1739 int member_specialization
= 0;
1740 tree ctype
= DECL_CLASS_CONTEXT (decl
);
1741 tree dname
= DECL_NAME (decl
);
1746 if (!processing_specialization
)
1749 tsk
= tsk_excessive_parms
;
1752 tsk
= current_tmpl_spec_kind (template_count
);
1757 if (processing_specialization
)
1760 SET_DECL_TEMPLATE_SPECIALIZATION (decl
);
1762 else if (TREE_CODE (declarator
) == TEMPLATE_ID_EXPR
)
1765 /* This could be something like:
1767 template <class T> void f(T);
1768 class S { friend void f<>(int); } */
1772 /* This case handles bogus declarations like template <>
1773 template <class T> void f<int>(); */
1775 error ("template-id %qD in declaration of primary template",
1782 case tsk_invalid_member_spec
:
1783 /* The error has already been reported in
1784 check_specialization_scope. */
1785 return error_mark_node
;
1787 case tsk_invalid_expl_inst
:
1788 error ("template parameter list used in explicit instantiation");
1794 error ("definition provided for explicit instantiation");
1796 explicit_instantiation
= 1;
1799 case tsk_excessive_parms
:
1800 case tsk_insufficient_parms
:
1801 if (tsk
== tsk_excessive_parms
)
1802 error ("too many template parameter lists in declaration of %qD",
1804 else if (template_header_count
)
1805 error("too few template parameter lists in declaration of %qD", decl
);
1807 error("explicit specialization of %qD must be introduced by "
1808 "%<template <>%>", decl
);
1812 SET_DECL_TEMPLATE_SPECIALIZATION (decl
);
1814 member_specialization
= 1;
1820 if (TREE_CODE (declarator
) == TEMPLATE_ID_EXPR
)
1822 /* This case handles bogus declarations like template <>
1823 template <class T> void f<int>(); */
1825 if (uses_template_parms (declarator
))
1826 error ("function template partial specialization %qD "
1827 "is not allowed", declarator
);
1829 error ("template-id %qD in declaration of primary template",
1834 if (ctype
&& CLASSTYPE_TEMPLATE_INSTANTIATION (ctype
))
1835 /* This is a specialization of a member template, without
1836 specialization the containing class. Something like:
1838 template <class T> struct S {
1839 template <class U> void f (U);
1841 template <> template <class U> void S<int>::f(U) {}
1843 That's a specialization -- but of the entire template. */
1851 if (specialization
|| member_specialization
)
1853 tree t
= TYPE_ARG_TYPES (TREE_TYPE (decl
));
1854 for (; t
; t
= TREE_CHAIN (t
))
1855 if (TREE_PURPOSE (t
))
1858 ("default argument specified in explicit specialization");
1861 if (current_lang_name
== lang_name_c
)
1862 error ("template specialization with C linkage");
1865 if (specialization
|| member_specialization
|| explicit_instantiation
)
1867 tree tmpl
= NULL_TREE
;
1868 tree targs
= NULL_TREE
;
1870 /* Make sure that the declarator is a TEMPLATE_ID_EXPR. */
1871 if (TREE_CODE (declarator
) != TEMPLATE_ID_EXPR
)
1875 gcc_assert (TREE_CODE (declarator
) == IDENTIFIER_NODE
);
1880 /* If there is no class context, the explicit instantiation
1881 must be at namespace scope. */
1882 gcc_assert (DECL_NAMESPACE_SCOPE_P (decl
));
1884 /* Find the namespace binding, using the declaration
1886 fns
= namespace_binding (dname
, CP_DECL_CONTEXT (decl
));
1887 if (!fns
|| !is_overloaded_fn (fns
))
1889 error ("%qD is not a template function", dname
);
1890 fns
= error_mark_node
;
1894 declarator
= lookup_template_function (fns
, NULL_TREE
);
1897 if (declarator
== error_mark_node
)
1898 return error_mark_node
;
1900 if (ctype
!= NULL_TREE
&& TYPE_BEING_DEFINED (ctype
))
1902 if (!explicit_instantiation
)
1903 /* A specialization in class scope. This is invalid,
1904 but the error will already have been flagged by
1905 check_specialization_scope. */
1906 return error_mark_node
;
1909 /* It's not valid to write an explicit instantiation in
1912 class C { template void f(); }
1914 This case is caught by the parser. However, on
1917 template class C { void f(); };
1919 (which is invalid) we can get here. The error will be
1926 else if (ctype
!= NULL_TREE
1927 && (TREE_CODE (TREE_OPERAND (declarator
, 0)) ==
1930 /* Find the list of functions in ctype that have the same
1931 name as the declared function. */
1932 tree name
= TREE_OPERAND (declarator
, 0);
1933 tree fns
= NULL_TREE
;
1936 if (constructor_name_p (name
, ctype
))
1938 int is_constructor
= DECL_CONSTRUCTOR_P (decl
);
1940 if (is_constructor
? !TYPE_HAS_CONSTRUCTOR (ctype
)
1941 : !CLASSTYPE_DESTRUCTORS (ctype
))
1943 /* From [temp.expl.spec]:
1945 If such an explicit specialization for the member
1946 of a class template names an implicitly-declared
1947 special member function (clause _special_), the
1948 program is ill-formed.
1950 Similar language is found in [temp.explicit]. */
1951 error ("specialization of implicitly-declared special member function");
1952 return error_mark_node
;
1955 name
= is_constructor
? ctor_identifier
: dtor_identifier
;
1958 if (!DECL_CONV_FN_P (decl
))
1960 idx
= lookup_fnfields_1 (ctype
, name
);
1962 fns
= VEC_index (tree
, CLASSTYPE_METHOD_VEC (ctype
), idx
);
1966 VEC(tree
,gc
) *methods
;
1969 /* For a type-conversion operator, we cannot do a
1970 name-based lookup. We might be looking for `operator
1971 int' which will be a specialization of `operator T'.
1972 So, we find *all* the conversion operators, and then
1973 select from them. */
1976 methods
= CLASSTYPE_METHOD_VEC (ctype
);
1978 for (idx
= CLASSTYPE_FIRST_CONVERSION_SLOT
;
1979 VEC_iterate (tree
, methods
, idx
, ovl
);
1982 if (!DECL_CONV_FN_P (OVL_CURRENT (ovl
)))
1983 /* There are no more conversion functions. */
1986 /* Glue all these conversion functions together
1987 with those we already have. */
1988 for (; ovl
; ovl
= OVL_NEXT (ovl
))
1989 fns
= ovl_cons (OVL_CURRENT (ovl
), fns
);
1993 if (fns
== NULL_TREE
)
1995 error ("no member function %qD declared in %qT", name
, ctype
);
1996 return error_mark_node
;
1999 TREE_OPERAND (declarator
, 0) = fns
;
2002 /* Figure out what exactly is being specialized at this point.
2003 Note that for an explicit instantiation, even one for a
2004 member function, we cannot tell apriori whether the
2005 instantiation is for a member template, or just a member
2006 function of a template class. Even if a member template is
2007 being instantiated, the member template arguments may be
2008 elided if they can be deduced from the rest of the
2010 tmpl
= determine_specialization (declarator
, decl
,
2012 member_specialization
,
2015 if (!tmpl
|| tmpl
== error_mark_node
)
2016 /* We couldn't figure out what this declaration was
2018 return error_mark_node
;
2021 tree gen_tmpl
= most_general_template (tmpl
);
2023 if (explicit_instantiation
)
2025 /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2026 is done by do_decl_instantiation later. */
2028 int arg_depth
= TMPL_ARGS_DEPTH (targs
);
2029 int parm_depth
= TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl
));
2031 if (arg_depth
> parm_depth
)
2033 /* If TMPL is not the most general template (for
2034 example, if TMPL is a friend template that is
2035 injected into namespace scope), then there will
2036 be too many levels of TARGS. Remove some of them
2041 new_targs
= make_tree_vec (parm_depth
);
2042 for (i
= arg_depth
- parm_depth
; i
< arg_depth
; ++i
)
2043 TREE_VEC_ELT (new_targs
, i
- (arg_depth
- parm_depth
))
2044 = TREE_VEC_ELT (targs
, i
);
2048 return instantiate_template (tmpl
, targs
, tf_error
);
2051 /* If we thought that the DECL was a member function, but it
2052 turns out to be specializing a static member function,
2053 make DECL a static member function as well. */
2054 if (DECL_STATIC_FUNCTION_P (tmpl
)
2055 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl
))
2056 revert_static_member_fn (decl
);
2058 /* If this is a specialization of a member template of a
2059 template class. In we want to return the TEMPLATE_DECL,
2060 not the specialization of it. */
2061 if (tsk
== tsk_template
)
2063 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl
);
2064 DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl
)) = NULL_TREE
;
2067 DECL_SOURCE_LOCATION (tmpl
) = DECL_SOURCE_LOCATION (decl
);
2068 DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl
))
2069 = DECL_SOURCE_LOCATION (decl
);
2070 /* We want to use the argument list specified in the
2071 definition, not in the original declaration. */
2072 DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (tmpl
))
2073 = DECL_ARGUMENTS (decl
);
2078 /* Set up the DECL_TEMPLATE_INFO for DECL. */
2079 DECL_TEMPLATE_INFO (decl
) = tree_cons (tmpl
, targs
, NULL_TREE
);
2081 /* Inherit default function arguments from the template
2082 DECL is specializing. */
2083 copy_default_args_to_explicit_spec (decl
);
2085 /* This specialization has the same protection as the
2086 template it specializes. */
2087 TREE_PRIVATE (decl
) = TREE_PRIVATE (gen_tmpl
);
2088 TREE_PROTECTED (decl
) = TREE_PROTECTED (gen_tmpl
);
2090 if (is_friend
&& !have_def
)
2091 /* This is not really a declaration of a specialization.
2092 It's just the name of an instantiation. But, it's not
2093 a request for an instantiation, either. */
2094 SET_DECL_IMPLICIT_INSTANTIATION (decl
);
2095 else if (DECL_CONSTRUCTOR_P (decl
) || DECL_DESTRUCTOR_P (decl
))
2096 /* This is indeed a specialization. In case of constructors
2097 and destructors, we need in-charge and not-in-charge
2098 versions in V3 ABI. */
2099 clone_function_decl (decl
, /*update_method_vec_p=*/0);
2101 /* Register this specialization so that we can find it
2103 decl
= register_specialization (decl
, gen_tmpl
, targs
);
2110 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2111 parameters. These are represented in the same format used for
2112 DECL_TEMPLATE_PARMS. */
2115 comp_template_parms (tree parms1
, tree parms2
)
2120 if (parms1
== parms2
)
2123 for (p1
= parms1
, p2
= parms2
;
2124 p1
!= NULL_TREE
&& p2
!= NULL_TREE
;
2125 p1
= TREE_CHAIN (p1
), p2
= TREE_CHAIN (p2
))
2127 tree t1
= TREE_VALUE (p1
);
2128 tree t2
= TREE_VALUE (p2
);
2131 gcc_assert (TREE_CODE (t1
) == TREE_VEC
);
2132 gcc_assert (TREE_CODE (t2
) == TREE_VEC
);
2134 if (TREE_VEC_LENGTH (t1
) != TREE_VEC_LENGTH (t2
))
2137 for (i
= 0; i
< TREE_VEC_LENGTH (t2
); ++i
)
2139 tree parm1
= TREE_VALUE (TREE_VEC_ELT (t1
, i
));
2140 tree parm2
= TREE_VALUE (TREE_VEC_ELT (t2
, i
));
2142 if (TREE_CODE (parm1
) != TREE_CODE (parm2
))
2145 if (TREE_CODE (parm1
) == TEMPLATE_TYPE_PARM
)
2147 else if (!same_type_p (TREE_TYPE (parm1
), TREE_TYPE (parm2
)))
2152 if ((p1
!= NULL_TREE
) != (p2
!= NULL_TREE
))
2153 /* One set of parameters has more parameters lists than the
2160 /* Complain if DECL shadows a template parameter.
2162 [temp.local]: A template-parameter shall not be redeclared within its
2163 scope (including nested scopes). */
2166 check_template_shadow (tree decl
)
2170 /* If we're not in a template, we can't possibly shadow a template
2172 if (!current_template_parms
)
2175 /* Figure out what we're shadowing. */
2176 if (TREE_CODE (decl
) == OVERLOAD
)
2177 decl
= OVL_CURRENT (decl
);
2178 olddecl
= innermost_non_namespace_value (DECL_NAME (decl
));
2180 /* If there's no previous binding for this name, we're not shadowing
2181 anything, let alone a template parameter. */
2185 /* If we're not shadowing a template parameter, we're done. Note
2186 that OLDDECL might be an OVERLOAD (or perhaps even an
2187 ERROR_MARK), so we can't just blithely assume it to be a _DECL
2189 if (!DECL_P (olddecl
) || !DECL_TEMPLATE_PARM_P (olddecl
))
2192 /* We check for decl != olddecl to avoid bogus errors for using a
2193 name inside a class. We check TPFI to avoid duplicate errors for
2194 inline member templates. */
2196 || TEMPLATE_PARMS_FOR_INLINE (current_template_parms
))
2199 error ("declaration of %q+#D", decl
);
2200 error (" shadows template parm %q+#D", olddecl
);
2203 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
2204 ORIG_LEVEL, DECL, and TYPE. */
2207 build_template_parm_index (int index
,
2213 tree t
= make_node (TEMPLATE_PARM_INDEX
);
2214 TEMPLATE_PARM_IDX (t
) = index
;
2215 TEMPLATE_PARM_LEVEL (t
) = level
;
2216 TEMPLATE_PARM_ORIG_LEVEL (t
) = orig_level
;
2217 TEMPLATE_PARM_DECL (t
) = decl
;
2218 TREE_TYPE (t
) = type
;
2219 TREE_CONSTANT (t
) = TREE_CONSTANT (decl
);
2220 TREE_INVARIANT (t
) = TREE_INVARIANT (decl
);
2221 TREE_READONLY (t
) = TREE_READONLY (decl
);
2226 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
2227 TEMPLATE_PARM_LEVEL has been decreased by LEVELS. If such a
2228 TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
2229 new one is created. */
2232 reduce_template_parm_level (tree index
, tree type
, int levels
)
2234 if (TEMPLATE_PARM_DESCENDANTS (index
) == NULL_TREE
2235 || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index
))
2236 != TEMPLATE_PARM_LEVEL (index
) - levels
))
2238 tree orig_decl
= TEMPLATE_PARM_DECL (index
);
2241 decl
= build_decl (TREE_CODE (orig_decl
), DECL_NAME (orig_decl
), type
);
2242 TREE_CONSTANT (decl
) = TREE_CONSTANT (orig_decl
);
2243 TREE_INVARIANT (decl
) = TREE_INVARIANT (orig_decl
);
2244 TREE_READONLY (decl
) = TREE_READONLY (orig_decl
);
2245 DECL_ARTIFICIAL (decl
) = 1;
2246 SET_DECL_TEMPLATE_PARM_P (decl
);
2248 t
= build_template_parm_index (TEMPLATE_PARM_IDX (index
),
2249 TEMPLATE_PARM_LEVEL (index
) - levels
,
2250 TEMPLATE_PARM_ORIG_LEVEL (index
),
2252 TEMPLATE_PARM_DESCENDANTS (index
) = t
;
2254 /* Template template parameters need this. */
2255 if (TREE_CODE (decl
) != CONST_DECL
)
2256 DECL_TEMPLATE_PARMS (decl
)
2257 = DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index
));
2260 return TEMPLATE_PARM_DESCENDANTS (index
);
2263 /* Process information from new template parameter NEXT and append it to the
2264 LIST being built. This new parameter is a non-type parameter iff
2265 IS_NON_TYPE is true. */
2268 process_template_parm (tree list
, tree next
, bool is_non_type
)
2276 gcc_assert (TREE_CODE (parm
) == TREE_LIST
);
2277 defval
= TREE_PURPOSE (parm
);
2281 tree p
= TREE_VALUE (tree_last (list
));
2283 if (TREE_CODE (p
) == TYPE_DECL
|| TREE_CODE (p
) == TEMPLATE_DECL
)
2284 idx
= TEMPLATE_TYPE_IDX (TREE_TYPE (p
));
2286 idx
= TEMPLATE_PARM_IDX (DECL_INITIAL (p
));
2294 parm
= TREE_VALUE (parm
);
2296 SET_DECL_TEMPLATE_PARM_P (parm
);
2300 The top-level cv-qualifiers on the template-parameter are
2301 ignored when determining its type. */
2302 TREE_TYPE (parm
) = TYPE_MAIN_VARIANT (TREE_TYPE (parm
));
2304 /* A template parameter is not modifiable. */
2305 TREE_CONSTANT (parm
) = 1;
2306 TREE_INVARIANT (parm
) = 1;
2307 TREE_READONLY (parm
) = 1;
2308 if (invalid_nontype_parm_type_p (TREE_TYPE (parm
), 1))
2309 TREE_TYPE (parm
) = void_type_node
;
2310 decl
= build_decl (CONST_DECL
, DECL_NAME (parm
), TREE_TYPE (parm
));
2311 TREE_CONSTANT (decl
) = 1;
2312 TREE_INVARIANT (decl
) = 1;
2313 TREE_READONLY (decl
) = 1;
2314 DECL_INITIAL (parm
) = DECL_INITIAL (decl
)
2315 = build_template_parm_index (idx
, processing_template_decl
,
2316 processing_template_decl
,
2317 decl
, TREE_TYPE (parm
));
2322 parm
= TREE_VALUE (TREE_VALUE (parm
));
2324 if (parm
&& TREE_CODE (parm
) == TEMPLATE_DECL
)
2326 t
= make_aggr_type (TEMPLATE_TEMPLATE_PARM
);
2327 /* This is for distinguishing between real templates and template
2328 template parameters */
2329 TREE_TYPE (parm
) = t
;
2330 TREE_TYPE (DECL_TEMPLATE_RESULT (parm
)) = t
;
2335 t
= make_aggr_type (TEMPLATE_TYPE_PARM
);
2336 /* parm is either IDENTIFIER_NODE or NULL_TREE. */
2337 decl
= build_decl (TYPE_DECL
, parm
, t
);
2340 TYPE_NAME (t
) = decl
;
2341 TYPE_STUB_DECL (t
) = decl
;
2343 TEMPLATE_TYPE_PARM_INDEX (t
)
2344 = build_template_parm_index (idx
, processing_template_decl
,
2345 processing_template_decl
,
2346 decl
, TREE_TYPE (parm
));
2348 DECL_ARTIFICIAL (decl
) = 1;
2349 SET_DECL_TEMPLATE_PARM_P (decl
);
2351 parm
= build_tree_list (defval
, parm
);
2352 return chainon (list
, parm
);
2355 /* The end of a template parameter list has been reached. Process the
2356 tree list into a parameter vector, converting each parameter into a more
2357 useful form. Type parameters are saved as IDENTIFIER_NODEs, and others
2361 end_template_parm_list (tree parms
)
2365 tree saved_parmlist
= make_tree_vec (list_length (parms
));
2367 current_template_parms
2368 = tree_cons (size_int (processing_template_decl
),
2369 saved_parmlist
, current_template_parms
);
2371 for (parm
= parms
, nparms
= 0; parm
; parm
= next
, nparms
++)
2373 next
= TREE_CHAIN (parm
);
2374 TREE_VEC_ELT (saved_parmlist
, nparms
) = parm
;
2375 TREE_CHAIN (parm
) = NULL_TREE
;
2378 --processing_template_parmlist
;
2380 return saved_parmlist
;
2383 /* end_template_decl is called after a template declaration is seen. */
2386 end_template_decl (void)
2388 reset_specialization ();
2390 if (! processing_template_decl
)
2393 /* This matches the pushlevel in begin_template_parm_list. */
2396 --processing_template_decl
;
2397 current_template_parms
= TREE_CHAIN (current_template_parms
);
2400 /* Given a template argument vector containing the template PARMS.
2401 The innermost PARMS are given first. */
2404 current_template_args (void)
2407 tree args
= NULL_TREE
;
2408 int length
= TMPL_PARMS_DEPTH (current_template_parms
);
2411 /* If there is only one level of template parameters, we do not
2412 create a TREE_VEC of TREE_VECs. Instead, we return a single
2413 TREE_VEC containing the arguments. */
2415 args
= make_tree_vec (length
);
2417 for (header
= current_template_parms
; header
; header
= TREE_CHAIN (header
))
2419 tree a
= copy_node (TREE_VALUE (header
));
2422 TREE_TYPE (a
) = NULL_TREE
;
2423 for (i
= TREE_VEC_LENGTH (a
) - 1; i
>= 0; --i
)
2425 tree t
= TREE_VEC_ELT (a
, i
);
2427 /* T will be a list if we are called from within a
2428 begin/end_template_parm_list pair, but a vector directly
2429 if within a begin/end_member_template_processing pair. */
2430 if (TREE_CODE (t
) == TREE_LIST
)
2434 if (TREE_CODE (t
) == TYPE_DECL
2435 || TREE_CODE (t
) == TEMPLATE_DECL
)
2438 t
= DECL_INITIAL (t
);
2439 TREE_VEC_ELT (a
, i
) = t
;
2444 TREE_VEC_ELT (args
, --l
) = a
;
2452 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
2453 template PARMS. If MEMBER_TEMPLATE_P is true, the new template is
2454 a member template. Used by push_template_decl below. */
2457 build_template_decl (tree decl
, tree parms
, bool member_template_p
)
2459 tree tmpl
= build_lang_decl (TEMPLATE_DECL
, DECL_NAME (decl
), NULL_TREE
);
2460 DECL_TEMPLATE_PARMS (tmpl
) = parms
;
2461 DECL_CONTEXT (tmpl
) = DECL_CONTEXT (decl
);
2462 DECL_MEMBER_TEMPLATE_P (tmpl
) = member_template_p
;
2463 if (DECL_LANG_SPECIFIC (decl
))
2465 DECL_STATIC_FUNCTION_P (tmpl
) = DECL_STATIC_FUNCTION_P (decl
);
2466 DECL_CONSTRUCTOR_P (tmpl
) = DECL_CONSTRUCTOR_P (decl
);
2467 DECL_DESTRUCTOR_P (tmpl
) = DECL_DESTRUCTOR_P (decl
);
2468 DECL_NONCONVERTING_P (tmpl
) = DECL_NONCONVERTING_P (decl
);
2469 DECL_ASSIGNMENT_OPERATOR_P (tmpl
) = DECL_ASSIGNMENT_OPERATOR_P (decl
);
2470 if (DECL_OVERLOADED_OPERATOR_P (decl
))
2471 SET_OVERLOADED_OPERATOR_CODE (tmpl
,
2472 DECL_OVERLOADED_OPERATOR_P (decl
));
2478 struct template_parm_data
2480 /* The level of the template parameters we are currently
2484 /* The index of the specialization argument we are currently
2488 /* An array whose size is the number of template parameters. The
2489 elements are nonzero if the parameter has been used in any one
2490 of the arguments processed so far. */
2493 /* An array whose size is the number of template arguments. The
2494 elements are nonzero if the argument makes use of template
2495 parameters of this level. */
2496 int* arg_uses_template_parms
;
2499 /* Subroutine of push_template_decl used to see if each template
2500 parameter in a partial specialization is used in the explicit
2501 argument list. If T is of the LEVEL given in DATA (which is
2502 treated as a template_parm_data*), then DATA->PARMS is marked
2506 mark_template_parm (tree t
, void* data
)
2510 struct template_parm_data
* tpd
= (struct template_parm_data
*) data
;
2512 if (TREE_CODE (t
) == TEMPLATE_PARM_INDEX
)
2514 level
= TEMPLATE_PARM_LEVEL (t
);
2515 idx
= TEMPLATE_PARM_IDX (t
);
2519 level
= TEMPLATE_TYPE_LEVEL (t
);
2520 idx
= TEMPLATE_TYPE_IDX (t
);
2523 if (level
== tpd
->level
)
2525 tpd
->parms
[idx
] = 1;
2526 tpd
->arg_uses_template_parms
[tpd
->current_arg
] = 1;
2529 /* Return zero so that for_each_template_parm will continue the
2530 traversal of the tree; we want to mark *every* template parm. */
2534 /* Process the partial specialization DECL. */
2537 process_partial_specialization (tree decl
)
2539 tree type
= TREE_TYPE (decl
);
2540 tree maintmpl
= CLASSTYPE_TI_TEMPLATE (type
);
2541 tree specargs
= CLASSTYPE_TI_ARGS (type
);
2542 tree inner_args
= INNERMOST_TEMPLATE_ARGS (specargs
);
2543 tree inner_parms
= INNERMOST_TEMPLATE_PARMS (current_template_parms
);
2544 tree main_inner_parms
= DECL_INNERMOST_TEMPLATE_PARMS (maintmpl
);
2545 int nargs
= TREE_VEC_LENGTH (inner_args
);
2546 int ntparms
= TREE_VEC_LENGTH (inner_parms
);
2548 int did_error_intro
= 0;
2549 struct template_parm_data tpd
;
2550 struct template_parm_data tpd2
;
2552 /* We check that each of the template parameters given in the
2553 partial specialization is used in the argument list to the
2554 specialization. For example:
2556 template <class T> struct S;
2557 template <class T> struct S<T*>;
2559 The second declaration is OK because `T*' uses the template
2560 parameter T, whereas
2562 template <class T> struct S<int>;
2564 is no good. Even trickier is:
2575 The S2<T> declaration is actually invalid; it is a
2576 full-specialization. Of course,
2579 struct S2<T (*)(U)>;
2581 or some such would have been OK. */
2582 tpd
.level
= TMPL_PARMS_DEPTH (current_template_parms
);
2583 tpd
.parms
= alloca (sizeof (int) * ntparms
);
2584 memset (tpd
.parms
, 0, sizeof (int) * ntparms
);
2586 tpd
.arg_uses_template_parms
= alloca (sizeof (int) * nargs
);
2587 memset (tpd
.arg_uses_template_parms
, 0, sizeof (int) * nargs
);
2588 for (i
= 0; i
< nargs
; ++i
)
2590 tpd
.current_arg
= i
;
2591 for_each_template_parm (TREE_VEC_ELT (inner_args
, i
),
2592 &mark_template_parm
,
2596 for (i
= 0; i
< ntparms
; ++i
)
2597 if (tpd
.parms
[i
] == 0)
2599 /* One of the template parms was not used in the
2601 if (!did_error_intro
)
2603 error ("template parameters not used in partial specialization:");
2604 did_error_intro
= 1;
2607 error (" %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms
, i
)));
2610 /* [temp.class.spec]
2612 The argument list of the specialization shall not be identical to
2613 the implicit argument list of the primary template. */
2614 if (comp_template_args
2616 INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
2618 error ("partial specialization %qT does not specialize any template arguments", type
);
2620 /* [temp.class.spec]
2622 A partially specialized non-type argument expression shall not
2623 involve template parameters of the partial specialization except
2624 when the argument expression is a simple identifier.
2626 The type of a template parameter corresponding to a specialized
2627 non-type argument shall not be dependent on a parameter of the
2629 gcc_assert (nargs
== DECL_NTPARMS (maintmpl
));
2631 for (i
= 0; i
< nargs
; ++i
)
2633 tree arg
= TREE_VEC_ELT (inner_args
, i
);
2634 if (/* These first two lines are the `non-type' bit. */
2636 && TREE_CODE (arg
) != TEMPLATE_DECL
2637 /* This next line is the `argument expression is not just a
2638 simple identifier' condition and also the `specialized
2639 non-type argument' bit. */
2640 && TREE_CODE (arg
) != TEMPLATE_PARM_INDEX
)
2642 if (tpd
.arg_uses_template_parms
[i
])
2643 error ("template argument %qE involves template parameter(s)", arg
);
2646 /* Look at the corresponding template parameter,
2647 marking which template parameters its type depends
2650 TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (main_inner_parms
,
2655 /* We haven't yet initialized TPD2. Do so now. */
2656 tpd2
.arg_uses_template_parms
2657 = alloca (sizeof (int) * nargs
);
2658 /* The number of parameters here is the number in the
2659 main template, which, as checked in the assertion
2661 tpd2
.parms
= alloca (sizeof (int) * nargs
);
2663 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl
));
2666 /* Mark the template parameters. But this time, we're
2667 looking for the template parameters of the main
2668 template, not in the specialization. */
2669 tpd2
.current_arg
= i
;
2670 tpd2
.arg_uses_template_parms
[i
] = 0;
2671 memset (tpd2
.parms
, 0, sizeof (int) * nargs
);
2672 for_each_template_parm (type
,
2673 &mark_template_parm
,
2677 if (tpd2
.arg_uses_template_parms
[i
])
2679 /* The type depended on some template parameters.
2680 If they are fully specialized in the
2681 specialization, that's OK. */
2683 for (j
= 0; j
< nargs
; ++j
)
2684 if (tpd2
.parms
[j
] != 0
2685 && tpd
.arg_uses_template_parms
[j
])
2687 error ("type %qT of template argument %qE depends "
2688 "on template parameter(s)",
2698 if (retrieve_specialization (maintmpl
, specargs
,
2699 /*class_specializations_p=*/true))
2700 /* We've already got this specialization. */
2703 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl
)
2704 = tree_cons (inner_args
, inner_parms
,
2705 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl
));
2706 TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl
)) = type
;
2710 /* Check that a template declaration's use of default arguments is not
2711 invalid. Here, PARMS are the template parameters. IS_PRIMARY is
2712 nonzero if DECL is the thing declared by a primary template.
2713 IS_PARTIAL is nonzero if DECL is a partial specialization. */
2716 check_default_tmpl_args (tree decl
, tree parms
, int is_primary
, int is_partial
)
2719 int last_level_to_check
;
2724 A default template-argument shall not be specified in a
2725 function template declaration or a function template definition, nor
2726 in the template-parameter-list of the definition of a member of a
2729 if (TREE_CODE (CP_DECL_CONTEXT (decl
)) == FUNCTION_DECL
)
2730 /* You can't have a function template declaration in a local
2731 scope, nor you can you define a member of a class template in a
2735 if (current_class_type
2736 && !TYPE_BEING_DEFINED (current_class_type
)
2737 && DECL_LANG_SPECIFIC (decl
)
2738 /* If this is either a friend defined in the scope of the class
2739 or a member function. */
2740 && (DECL_FUNCTION_MEMBER_P (decl
)
2741 ? same_type_p (DECL_CONTEXT (decl
), current_class_type
)
2742 : DECL_FRIEND_CONTEXT (decl
)
2743 ? same_type_p (DECL_FRIEND_CONTEXT (decl
), current_class_type
)
2745 /* And, if it was a member function, it really was defined in
2746 the scope of the class. */
2747 && (!DECL_FUNCTION_MEMBER_P (decl
)
2748 || DECL_INITIALIZED_IN_CLASS_P (decl
)))
2749 /* We already checked these parameters when the template was
2750 declared, so there's no need to do it again now. This function
2751 was defined in class scope, but we're processing it's body now
2752 that the class is complete. */
2757 If a template-parameter has a default template-argument, all
2758 subsequent template-parameters shall have a default
2759 template-argument supplied. */
2760 for (parm_level
= parms
; parm_level
; parm_level
= TREE_CHAIN (parm_level
))
2762 tree inner_parms
= TREE_VALUE (parm_level
);
2763 int ntparms
= TREE_VEC_LENGTH (inner_parms
);
2764 int seen_def_arg_p
= 0;
2767 for (i
= 0; i
< ntparms
; ++i
)
2769 tree parm
= TREE_VEC_ELT (inner_parms
, i
);
2770 if (TREE_PURPOSE (parm
))
2772 else if (seen_def_arg_p
)
2774 error ("no default argument for %qD", TREE_VALUE (parm
));
2775 /* For better subsequent error-recovery, we indicate that
2776 there should have been a default argument. */
2777 TREE_PURPOSE (parm
) = error_mark_node
;
2782 if (TREE_CODE (decl
) != TYPE_DECL
|| is_partial
|| !is_primary
)
2783 /* For an ordinary class template, default template arguments are
2784 allowed at the innermost level, e.g.:
2785 template <class T = int>
2787 but, in a partial specialization, they're not allowed even
2788 there, as we have in [temp.class.spec]:
2790 The template parameter list of a specialization shall not
2791 contain default template argument values.
2793 So, for a partial specialization, or for a function template,
2794 we look at all of them. */
2797 /* But, for a primary class template that is not a partial
2798 specialization we look at all template parameters except the
2800 parms
= TREE_CHAIN (parms
);
2802 /* Figure out what error message to issue. */
2803 if (TREE_CODE (decl
) == FUNCTION_DECL
)
2804 msg
= "default template arguments may not be used in function templates";
2805 else if (is_partial
)
2806 msg
= "default template arguments may not be used in partial specializations";
2808 msg
= "default argument for template parameter for class enclosing %qD";
2810 if (current_class_type
&& TYPE_BEING_DEFINED (current_class_type
))
2811 /* If we're inside a class definition, there's no need to
2812 examine the parameters to the class itself. On the one
2813 hand, they will be checked when the class is defined, and,
2814 on the other, default arguments are valid in things like:
2815 template <class T = double>
2816 struct S { template <class U> void f(U); };
2817 Here the default argument for `S' has no bearing on the
2818 declaration of `f'. */
2819 last_level_to_check
= template_class_depth (current_class_type
) + 1;
2821 /* Check everything. */
2822 last_level_to_check
= 0;
2824 for (parm_level
= parms
;
2825 parm_level
&& TMPL_PARMS_DEPTH (parm_level
) >= last_level_to_check
;
2826 parm_level
= TREE_CHAIN (parm_level
))
2828 tree inner_parms
= TREE_VALUE (parm_level
);
2832 ntparms
= TREE_VEC_LENGTH (inner_parms
);
2833 for (i
= 0; i
< ntparms
; ++i
)
2834 if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms
, i
)))
2842 /* Clear out the default argument so that we are not
2844 TREE_PURPOSE (TREE_VEC_ELT (inner_parms
, i
)) = NULL_TREE
;
2847 /* At this point, if we're still interested in issuing messages,
2848 they must apply to classes surrounding the object declared. */
2850 msg
= "default argument for template parameter for class enclosing %qD";
2854 /* Worker for push_template_decl_real, called via
2855 for_each_template_parm. DATA is really an int, indicating the
2856 level of the parameters we are interested in. If T is a template
2857 parameter of that level, return nonzero. */
2860 template_parm_this_level_p (tree t
, void* data
)
2862 int this_level
= *(int *)data
;
2865 if (TREE_CODE (t
) == TEMPLATE_PARM_INDEX
)
2866 level
= TEMPLATE_PARM_LEVEL (t
);
2868 level
= TEMPLATE_TYPE_LEVEL (t
);
2869 return level
== this_level
;
2872 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
2873 parameters given by current_template_args, or reuses a
2874 previously existing one, if appropriate. Returns the DECL, or an
2875 equivalent one, if it is replaced via a call to duplicate_decls.
2877 If IS_FRIEND is nonzero, DECL is a friend declaration. */
2880 push_template_decl_real (tree decl
, int is_friend
)
2888 int new_template_p
= 0;
2889 /* True if the template is a member template, in the sense of
2891 bool member_template_p
= false;
2893 if (decl
== error_mark_node
)
2896 /* See if this is a partial specialization. */
2897 is_partial
= (DECL_IMPLICIT_TYPEDEF_P (decl
)
2898 && TREE_CODE (TREE_TYPE (decl
)) != ENUMERAL_TYPE
2899 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl
)));
2901 is_friend
|= (TREE_CODE (decl
) == FUNCTION_DECL
&& DECL_FRIEND_P (decl
));
2904 /* For a friend, we want the context of the friend function, not
2905 the type of which it is a friend. */
2906 ctx
= DECL_CONTEXT (decl
);
2907 else if (CP_DECL_CONTEXT (decl
)
2908 && TREE_CODE (CP_DECL_CONTEXT (decl
)) != NAMESPACE_DECL
)
2909 /* In the case of a virtual function, we want the class in which
2911 ctx
= CP_DECL_CONTEXT (decl
);
2913 /* Otherwise, if we're currently defining some class, the DECL
2914 is assumed to be a member of the class. */
2915 ctx
= current_scope ();
2917 if (ctx
&& TREE_CODE (ctx
) == NAMESPACE_DECL
)
2920 if (!DECL_CONTEXT (decl
))
2921 DECL_CONTEXT (decl
) = FROB_CONTEXT (current_namespace
);
2923 /* See if this is a primary template. */
2924 primary
= template_parm_scope_p ();
2928 if (DECL_CLASS_SCOPE_P (decl
))
2929 member_template_p
= true;
2930 if (current_lang_name
== lang_name_c
)
2931 error ("template with C linkage");
2932 else if (TREE_CODE (decl
) == TYPE_DECL
2933 && ANON_AGGRNAME_P (DECL_NAME (decl
)))
2934 error ("template class without a name");
2935 else if (TREE_CODE (decl
) == FUNCTION_DECL
)
2937 if (DECL_DESTRUCTOR_P (decl
))
2941 A destructor shall not be a member template. */
2942 error ("destructor %qD declared as member template", decl
);
2943 return error_mark_node
;
2945 if (NEW_DELETE_OPNAME_P (DECL_NAME (decl
))
2946 && (!TYPE_ARG_TYPES (TREE_TYPE (decl
))
2947 || TYPE_ARG_TYPES (TREE_TYPE (decl
)) == void_list_node
2948 || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl
)))
2949 || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl
))))
2950 == void_list_node
)))
2952 /* [basic.stc.dynamic.allocation]
2954 An allocation function can be a function
2955 template. ... Template allocation functions shall
2956 have two or more parameters. */
2957 error ("invalid template declaration of %qD", decl
);
2961 else if ((DECL_IMPLICIT_TYPEDEF_P (decl
)
2962 && CLASS_TYPE_P (TREE_TYPE (decl
)))
2963 || (TREE_CODE (decl
) == VAR_DECL
&& ctx
&& CLASS_TYPE_P (ctx
)))
2967 error ("template declaration of %q#D", decl
);
2968 return error_mark_node
;
2972 /* Check to see that the rules regarding the use of default
2973 arguments are not being violated. */
2974 check_default_tmpl_args (decl
, current_template_parms
,
2975 primary
, is_partial
);
2978 return process_partial_specialization (decl
);
2980 args
= current_template_args ();
2983 || TREE_CODE (ctx
) == FUNCTION_DECL
2984 || (CLASS_TYPE_P (ctx
) && TYPE_BEING_DEFINED (ctx
))
2985 || (is_friend
&& !DECL_TEMPLATE_INFO (decl
)))
2987 if (DECL_LANG_SPECIFIC (decl
)
2988 && DECL_TEMPLATE_INFO (decl
)
2989 && DECL_TI_TEMPLATE (decl
))
2990 tmpl
= DECL_TI_TEMPLATE (decl
);
2991 /* If DECL is a TYPE_DECL for a class-template, then there won't
2992 be DECL_LANG_SPECIFIC. The information equivalent to
2993 DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead. */
2994 else if (DECL_IMPLICIT_TYPEDEF_P (decl
)
2995 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl
))
2996 && TYPE_TI_TEMPLATE (TREE_TYPE (decl
)))
2998 /* Since a template declaration already existed for this
2999 class-type, we must be redeclaring it here. Make sure
3000 that the redeclaration is valid. */
3001 redeclare_class_template (TREE_TYPE (decl
),
3002 current_template_parms
);
3003 /* We don't need to create a new TEMPLATE_DECL; just use the
3004 one we already had. */
3005 tmpl
= TYPE_TI_TEMPLATE (TREE_TYPE (decl
));
3009 tmpl
= build_template_decl (decl
, current_template_parms
,
3013 if (DECL_LANG_SPECIFIC (decl
)
3014 && DECL_TEMPLATE_SPECIALIZATION (decl
))
3016 /* A specialization of a member template of a template
3018 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl
);
3019 DECL_TEMPLATE_INFO (tmpl
) = DECL_TEMPLATE_INFO (decl
);
3020 DECL_TEMPLATE_INFO (decl
) = NULL_TREE
;
3026 tree a
, t
, current
, parms
;
3029 if (TREE_CODE (decl
) == TYPE_DECL
)
3031 if ((IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (decl
)))
3032 || TREE_CODE (TREE_TYPE (decl
)) == ENUMERAL_TYPE
)
3033 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl
))
3034 && TYPE_TI_TEMPLATE (TREE_TYPE (decl
)))
3035 tmpl
= TYPE_TI_TEMPLATE (TREE_TYPE (decl
));
3038 error ("%qD does not declare a template type", decl
);
3042 else if (!DECL_LANG_SPECIFIC (decl
) || !DECL_TEMPLATE_INFO (decl
))
3044 error ("template definition of non-template %q#D", decl
);
3048 tmpl
= DECL_TI_TEMPLATE (decl
);
3050 if (DECL_FUNCTION_TEMPLATE_P (tmpl
)
3051 && DECL_TEMPLATE_INFO (decl
) && DECL_TI_ARGS (decl
)
3052 && DECL_TEMPLATE_SPECIALIZATION (decl
)
3053 && DECL_MEMBER_TEMPLATE_P (tmpl
))
3057 /* The declaration is a specialization of a member
3058 template, declared outside the class. Therefore, the
3059 innermost template arguments will be NULL, so we
3060 replace them with the arguments determined by the
3061 earlier call to check_explicit_specialization. */
3062 args
= DECL_TI_ARGS (decl
);
3065 = build_template_decl (decl
, current_template_parms
,
3067 DECL_TEMPLATE_RESULT (new_tmpl
) = decl
;
3068 TREE_TYPE (new_tmpl
) = TREE_TYPE (decl
);
3069 DECL_TI_TEMPLATE (decl
) = new_tmpl
;
3070 SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl
);
3071 DECL_TEMPLATE_INFO (new_tmpl
)
3072 = tree_cons (tmpl
, args
, NULL_TREE
);
3074 register_specialization (new_tmpl
,
3075 most_general_template (tmpl
),
3080 /* Make sure the template headers we got make sense. */
3082 parms
= DECL_TEMPLATE_PARMS (tmpl
);
3083 i
= TMPL_PARMS_DEPTH (parms
);
3084 if (TMPL_ARGS_DEPTH (args
) != i
)
3086 error ("expected %d levels of template parms for %q#D, got %d",
3087 i
, decl
, TMPL_ARGS_DEPTH (args
));
3090 for (current
= decl
; i
> 0; --i
, parms
= TREE_CHAIN (parms
))
3092 a
= TMPL_ARGS_LEVEL (args
, i
);
3093 t
= INNERMOST_TEMPLATE_PARMS (parms
);
3095 if (TREE_VEC_LENGTH (t
) != TREE_VEC_LENGTH (a
))
3097 if (current
== decl
)
3098 error ("got %d template parameters for %q#D",
3099 TREE_VEC_LENGTH (a
), decl
);
3101 error ("got %d template parameters for %q#T",
3102 TREE_VEC_LENGTH (a
), current
);
3103 error (" but %d required", TREE_VEC_LENGTH (t
));
3106 /* Perhaps we should also check that the parms are used in the
3107 appropriate qualifying scopes in the declarator? */
3109 if (current
== decl
)
3112 current
= TYPE_CONTEXT (current
);
3116 DECL_TEMPLATE_RESULT (tmpl
) = decl
;
3117 TREE_TYPE (tmpl
) = TREE_TYPE (decl
);
3119 /* Push template declarations for global functions and types. Note
3120 that we do not try to push a global template friend declared in a
3121 template class; such a thing may well depend on the template
3122 parameters of the class. */
3123 if (new_template_p
&& !ctx
3124 && !(is_friend
&& template_class_depth (current_class_type
) > 0))
3126 tmpl
= pushdecl_namespace_level (tmpl
);
3127 if (tmpl
== error_mark_node
)
3128 return error_mark_node
;
3130 /* Hide template friend classes that haven't been declared yet. */
3131 if (is_friend
&& TREE_CODE (decl
) == TYPE_DECL
)
3133 DECL_ANTICIPATED (tmpl
) = 1;
3134 DECL_FRIEND_P (tmpl
) = 1;
3140 DECL_PRIMARY_TEMPLATE (tmpl
) = tmpl
;
3141 if (DECL_CONV_FN_P (tmpl
))
3143 int depth
= TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl
));
3145 /* It is a conversion operator. See if the type converted to
3146 depends on innermost template operands. */
3148 if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl
)),
3150 DECL_TEMPLATE_CONV_FN_P (tmpl
) = 1;
3154 /* The DECL_TI_ARGS of DECL contains full set of arguments referring
3155 back to its most general template. If TMPL is a specialization,
3156 ARGS may only have the innermost set of arguments. Add the missing
3157 argument levels if necessary. */
3158 if (DECL_TEMPLATE_INFO (tmpl
))
3159 args
= add_outermost_template_args (DECL_TI_ARGS (tmpl
), args
);
3161 info
= tree_cons (tmpl
, args
, NULL_TREE
);
3163 if (DECL_IMPLICIT_TYPEDEF_P (decl
))
3165 SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl
), info
);
3166 if ((!ctx
|| TREE_CODE (ctx
) != FUNCTION_DECL
)
3167 && TREE_CODE (TREE_TYPE (decl
)) != ENUMERAL_TYPE
3168 /* Don't change the name if we've already set it up. */
3169 && !IDENTIFIER_TEMPLATE (DECL_NAME (decl
)))
3170 DECL_NAME (decl
) = classtype_mangled_name (TREE_TYPE (decl
));
3172 else if (DECL_LANG_SPECIFIC (decl
))
3173 DECL_TEMPLATE_INFO (decl
) = info
;
3175 return DECL_TEMPLATE_RESULT (tmpl
);
3179 push_template_decl (tree decl
)
3181 return push_template_decl_real (decl
, 0);
3184 /* Called when a class template TYPE is redeclared with the indicated
3185 template PARMS, e.g.:
3187 template <class T> struct S;
3188 template <class T> struct S {}; */
3191 redeclare_class_template (tree type
, tree parms
)
3197 if (!TYPE_TEMPLATE_INFO (type
))
3199 error ("%qT is not a template type", type
);
3203 tmpl
= TYPE_TI_TEMPLATE (type
);
3204 if (!PRIMARY_TEMPLATE_P (tmpl
))
3205 /* The type is nested in some template class. Nothing to worry
3206 about here; there are no new template parameters for the nested
3212 error ("template specifiers not specified in declaration of %qD",
3217 parms
= INNERMOST_TEMPLATE_PARMS (parms
);
3218 tmpl_parms
= DECL_INNERMOST_TEMPLATE_PARMS (tmpl
);
3220 if (TREE_VEC_LENGTH (parms
) != TREE_VEC_LENGTH (tmpl_parms
))
3222 error ("previous declaration %q+D", tmpl
);
3223 error ("used %d template parameter(s) instead of %d",
3224 TREE_VEC_LENGTH (tmpl_parms
),
3225 TREE_VEC_LENGTH (parms
));
3229 for (i
= 0; i
< TREE_VEC_LENGTH (tmpl_parms
); ++i
)
3231 tree tmpl_parm
= TREE_VALUE (TREE_VEC_ELT (tmpl_parms
, i
));
3232 tree parm
= TREE_VALUE (TREE_VEC_ELT (parms
, i
));
3233 tree tmpl_default
= TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms
, i
));
3234 tree parm_default
= TREE_PURPOSE (TREE_VEC_ELT (parms
, i
));
3236 /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
3238 if (TREE_CODE (tmpl_parm
) != TREE_CODE (parm
)
3239 || (TREE_CODE (tmpl_parm
) != TYPE_DECL
3240 && !same_type_p (TREE_TYPE (tmpl_parm
), TREE_TYPE (parm
))))
3242 error ("template parameter %q+#D", tmpl_parm
);
3243 error ("redeclared here as %q#D", parm
);
3247 if (tmpl_default
!= NULL_TREE
&& parm_default
!= NULL_TREE
)
3249 /* We have in [temp.param]:
3251 A template-parameter may not be given default arguments
3252 by two different declarations in the same scope. */
3253 error ("redefinition of default argument for %q#D", parm
);
3254 error ("%J original definition appeared here", tmpl_parm
);
3258 if (parm_default
!= NULL_TREE
)
3259 /* Update the previous template parameters (which are the ones
3260 that will really count) with the new default value. */
3261 TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms
, i
)) = parm_default
;
3262 else if (tmpl_default
!= NULL_TREE
)
3263 /* Update the new parameters, too; they'll be used as the
3264 parameters for any members. */
3265 TREE_PURPOSE (TREE_VEC_ELT (parms
, i
)) = tmpl_default
;
3269 /* Simplify EXPR if it is a non-dependent expression. Returns the
3270 (possibly simplified) expression. */
3273 fold_non_dependent_expr (tree expr
)
3275 /* If we're in a template, but EXPR isn't value dependent, simplify
3276 it. We're supposed to treat:
3278 template <typename T> void f(T[1 + 1]);
3279 template <typename T> void f(T[2]);
3281 as two declarations of the same function, for example. */
3282 if (processing_template_decl
3283 && !type_dependent_expression_p (expr
)
3284 && !value_dependent_expression_p (expr
))
3286 HOST_WIDE_INT saved_processing_template_decl
;
3288 saved_processing_template_decl
= processing_template_decl
;
3289 processing_template_decl
= 0;
3290 expr
= tsubst_copy_and_build (expr
,
3293 /*in_decl=*/NULL_TREE
,
3294 /*function_p=*/false);
3295 processing_template_decl
= saved_processing_template_decl
;
3300 /* EXPR is an expression which is used in a constant-expression context.
3301 For instance, it could be a VAR_DECL with a constant initializer.
3302 Extract the innest constant expression.
3304 This is basically a more powerful version of
3305 integral_constant_value, which can be used also in templates where
3306 initializers can maintain a syntactic rather than semantic form
3307 (even if they are non-dependent, for access-checking purposes). */
3310 fold_decl_constant_value (tree expr
)
3312 tree const_expr
= expr
;
3315 expr
= fold_non_dependent_expr (const_expr
);
3316 const_expr
= integral_constant_value (expr
);
3318 while (expr
!= const_expr
);
3323 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
3324 must be a function or a pointer-to-function type, as specified
3325 in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
3326 and check that the resulting function has external linkage. */
3329 convert_nontype_argument_function (tree type
, tree expr
)
3334 fn
= instantiate_type (type
, fns
, tf_none
);
3335 if (fn
== error_mark_node
)
3336 return error_mark_node
;
3339 if (TREE_CODE (fn_no_ptr
) == ADDR_EXPR
)
3340 fn_no_ptr
= TREE_OPERAND (fn_no_ptr
, 0);
3342 /* [temp.arg.nontype]/1
3344 A template-argument for a non-type, non-template template-parameter
3347 -- the address of an object or function with external linkage. */
3348 if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr
))
3350 error ("%qE is not a valid template argument for type %qT "
3351 "because function %qD has not external linkage",
3352 expr
, type
, fn_no_ptr
);
3359 /* Attempt to convert the non-type template parameter EXPR to the
3360 indicated TYPE. If the conversion is successful, return the
3361 converted value. If the conversion is unsuccessful, return
3362 NULL_TREE if we issued an error message, or error_mark_node if we
3363 did not. We issue error messages for out-and-out bad template
3364 parameters, but not simply because the conversion failed, since we
3365 might be just trying to do argument deduction. Both TYPE and EXPR
3366 must be non-dependent.
3368 The conversion follows the special rules described in
3369 [temp.arg.nontype], and it is much more strict than an implicit
3372 This function is called twice for each template argument (see
3373 lookup_template_class for a more accurate description of this
3374 problem). This means that we need to handle expressions which
3375 are not valid in a C++ source, but can be created from the
3376 first call (for instance, casts to perform conversions). These
3377 hacks can go away after we fix the double coercion problem. */
3380 convert_nontype_argument (tree type
, tree expr
)
3384 /* Detect immediately string literals as invalid non-type argument.
3385 This special-case is not needed for correctness (we would easily
3386 catch this later), but only to provide better diagnostic for this
3387 common user mistake. As suggested by DR 100, we do not mention
3388 linkage issues in the diagnostic as this is not the point. */
3389 if (TREE_CODE (expr
) == STRING_CST
)
3391 error ("%qE is not a valid template argument for type %qT "
3392 "because string literals can never be used in this context",
3397 /* If we are in a template, EXPR may be non-dependent, but still
3398 have a syntactic, rather than semantic, form. For example, EXPR
3399 might be a SCOPE_REF, rather than the VAR_DECL to which the
3400 SCOPE_REF refers. Preserving the qualifying scope is necessary
3401 so that access checking can be performed when the template is
3402 instantiated -- but here we need the resolved form so that we can
3403 convert the argument. */
3404 expr
= fold_non_dependent_expr (expr
);
3405 expr_type
= TREE_TYPE (expr
);
3407 /* HACK: Due to double coercion, we can get a
3408 NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
3409 which is the tree that we built on the first call (see
3410 below when coercing to reference to object or to reference to
3411 function). We just strip everything and get to the arg.
3412 See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
3414 if (TREE_CODE (expr
) == NOP_EXPR
)
3416 if (TYPE_REF_OBJ_P (type
) || TYPE_REFFN_P (type
))
3418 /* ??? Maybe we could use convert_from_reference here, but we
3419 would need to relax its constraints because the NOP_EXPR
3420 could actually change the type to something more cv-qualified,
3421 and this is not folded by convert_from_reference. */
3422 tree addr
= TREE_OPERAND (expr
, 0);
3423 gcc_assert (TREE_CODE (expr_type
) == REFERENCE_TYPE
);
3424 gcc_assert (TREE_CODE (addr
) == ADDR_EXPR
);
3425 gcc_assert (TREE_CODE (TREE_TYPE (addr
)) == POINTER_TYPE
);
3426 gcc_assert (same_type_ignoring_top_level_qualifiers_p
3427 (TREE_TYPE (expr_type
),
3428 TREE_TYPE (TREE_TYPE (addr
))));
3430 expr
= TREE_OPERAND (addr
, 0);
3431 expr_type
= TREE_TYPE (expr
);
3434 /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
3435 parameter is a pointer to object, through decay and
3436 qualification conversion. Let's strip everything. */
3437 else if (TYPE_PTROBV_P (type
))
3440 gcc_assert (TREE_CODE (expr
) == ADDR_EXPR
);
3441 gcc_assert (TREE_CODE (TREE_TYPE (expr
)) == POINTER_TYPE
);
3442 /* Skip the ADDR_EXPR only if it is part of the decay for
3443 an array. Otherwise, it is part of the original argument
3444 in the source code. */
3445 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr
, 0))) == ARRAY_TYPE
)
3446 expr
= TREE_OPERAND (expr
, 0);
3447 expr_type
= TREE_TYPE (expr
);
3451 /* [temp.arg.nontype]/5, bullet 1
3453 For a non-type template-parameter of integral or enumeration type,
3454 integral promotions (_conv.prom_) and integral conversions
3455 (_conv.integral_) are applied. */
3456 if (INTEGRAL_TYPE_P (type
))
3458 if (!INTEGRAL_TYPE_P (expr_type
))
3459 return error_mark_node
;
3461 expr
= fold_decl_constant_value (expr
);
3462 /* Notice that there are constant expressions like '4 % 0' which
3463 do not fold into integer constants. */
3464 if (TREE_CODE (expr
) != INTEGER_CST
)
3466 error ("%qE is not a valid template argument for type %qT "
3467 "because it is a non-constant expression", expr
, type
);
3471 /* At this point, an implicit conversion does what we want,
3472 because we already know that the expression is of integral
3474 expr
= ocp_convert (type
, expr
, CONV_IMPLICIT
, LOOKUP_PROTECT
);
3475 if (expr
== error_mark_node
)
3476 return error_mark_node
;
3478 /* Conversion was allowed: fold it to a bare integer constant. */
3481 /* [temp.arg.nontype]/5, bullet 2
3483 For a non-type template-parameter of type pointer to object,
3484 qualification conversions (_conv.qual_) and the array-to-pointer
3485 conversion (_conv.array_) are applied. */
3486 else if (TYPE_PTROBV_P (type
))
3488 /* [temp.arg.nontype]/1 (TC1 version, DR 49):
3490 A template-argument for a non-type, non-template template-parameter
3491 shall be one of: [...]
3493 -- the name of a non-type template-parameter;
3494 -- the address of an object or function with external linkage, [...]
3495 expressed as "& id-expression" where the & is optional if the name
3496 refers to a function or array, or if the corresponding
3497 template-parameter is a reference.
3499 Here, we do not care about functions, as they are invalid anyway
3500 for a parameter of type pointer-to-object. */
3501 bool constant_address_p
=
3502 (TREE_CODE (expr
) == ADDR_EXPR
3503 || TREE_CODE (expr_type
) == ARRAY_TYPE
3504 || (DECL_P (expr
) && DECL_TEMPLATE_PARM_P (expr
)));
3506 expr
= decay_conversion (expr
);
3507 if (expr
== error_mark_node
)
3508 return error_mark_node
;
3510 expr
= perform_qualification_conversions (type
, expr
);
3511 if (expr
== error_mark_node
)
3512 return error_mark_node
;
3514 if (!constant_address_p
)
3516 error ("%qE is not a valid template argument for type %qT "
3517 "because it is not a constant pointer", expr
, type
);
3521 /* [temp.arg.nontype]/5, bullet 3
3523 For a non-type template-parameter of type reference to object, no
3524 conversions apply. The type referred to by the reference may be more
3525 cv-qualified than the (otherwise identical) type of the
3526 template-argument. The template-parameter is bound directly to the
3527 template-argument, which must be an lvalue. */
3528 else if (TYPE_REF_OBJ_P (type
))
3530 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type
),
3532 return error_mark_node
;
3534 if (!at_least_as_qualified_p (TREE_TYPE (type
), expr_type
))
3536 error ("%qE is not a valid template argument for type %qT "
3537 "because of conflicts in cv-qualification", expr
, type
);
3541 if (!real_lvalue_p (expr
))
3543 error ("%qE is not a valid template argument for type %qT "
3544 "because it is not a lvalue", expr
, type
);
3548 /* [temp.arg.nontype]/1
3550 A template-argument for a non-type, non-template template-parameter
3551 shall be one of: [...]
3553 -- the address of an object or function with external linkage. */
3554 if (!DECL_EXTERNAL_LINKAGE_P (expr
))
3556 error ("%qE is not a valid template argument for type %qT "
3557 "because object %qD has not external linkage",
3562 expr
= build_nop (type
, build_address (expr
));
3564 /* [temp.arg.nontype]/5, bullet 4
3566 For a non-type template-parameter of type pointer to function, only
3567 the function-to-pointer conversion (_conv.func_) is applied. If the
3568 template-argument represents a set of overloaded functions (or a
3569 pointer to such), the matching function is selected from the set
3571 else if (TYPE_PTRFN_P (type
))
3573 /* If the argument is a template-id, we might not have enough
3574 context information to decay the pointer.
3575 ??? Why static5.C requires decay and subst1.C works fine
3577 if (!type_unknown_p (expr_type
))
3579 expr
= decay_conversion (expr
);
3580 if (expr
== error_mark_node
)
3581 return error_mark_node
;
3584 expr
= convert_nontype_argument_function (type
, expr
);
3585 if (!expr
|| expr
== error_mark_node
)
3588 /* [temp.arg.nontype]/5, bullet 5
3590 For a non-type template-parameter of type reference to function, no
3591 conversions apply. If the template-argument represents a set of
3592 overloaded functions, the matching function is selected from the set
3594 else if (TYPE_REFFN_P (type
))
3596 if (TREE_CODE (expr
) == ADDR_EXPR
)
3598 error ("%qE is not a valid template argument for type %qT "
3599 "because it is a pointer", expr
, type
);
3600 inform ("try using %qE instead", TREE_OPERAND (expr
, 0));
3604 expr
= convert_nontype_argument_function (TREE_TYPE (type
), expr
);
3605 if (!expr
|| expr
== error_mark_node
)
3608 expr
= build_nop (type
, build_address (expr
));
3610 /* [temp.arg.nontype]/5, bullet 6
3612 For a non-type template-parameter of type pointer to member function,
3613 no conversions apply. If the template-argument represents a set of
3614 overloaded member functions, the matching member function is selected
3615 from the set (_over.over_). */
3616 else if (TYPE_PTRMEMFUNC_P (type
))
3618 expr
= instantiate_type (type
, expr
, tf_none
);
3619 if (expr
== error_mark_node
)
3620 return error_mark_node
;
3622 /* There is no way to disable standard conversions in
3623 resolve_address_of_overloaded_function (called by
3624 instantiate_type). It is possible that the call succeeded by
3625 converting &B::I to &D::I (where B is a base of D), so we need
3626 to reject this conversion here.
3628 Actually, even if there was a way to disable standard conversions,
3629 it would still be better to reject them here so that we can
3630 provide a superior diagnostic. */
3631 if (!same_type_p (TREE_TYPE (expr
), type
))
3633 /* Make sure we are just one standard conversion off. */
3634 gcc_assert (can_convert (type
, TREE_TYPE (expr
)));
3635 error ("%qE is not a valid template argument for type %qT "
3636 "because it is of type %qT", expr
, type
,
3638 inform ("standard conversions are not allowed in this context");
3642 /* [temp.arg.nontype]/5, bullet 7
3644 For a non-type template-parameter of type pointer to data member,
3645 qualification conversions (_conv.qual_) are applied. */
3646 else if (TYPE_PTRMEM_P (type
))
3648 expr
= perform_qualification_conversions (type
, expr
);
3649 if (expr
== error_mark_node
)
3652 /* A template non-type parameter must be one of the above. */
3656 /* Sanity check: did we actually convert the argument to the
3658 gcc_assert (same_type_p (type
, TREE_TYPE (expr
)));
3663 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
3664 template template parameters. Both PARM_PARMS and ARG_PARMS are
3665 vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
3668 ARG_PARMS may contain more parameters than PARM_PARMS. If this is
3669 the case, then extra parameters must have default arguments.
3671 Consider the example:
3672 template <class T, class Allocator = allocator> class vector;
3673 template<template <class U> class TT> class C;
3675 C<vector> is a valid instantiation. PARM_PARMS for the above code
3676 contains a TYPE_DECL (for U), ARG_PARMS contains two TYPE_DECLs (for
3677 T and Allocator) and OUTER_ARGS contains the argument that is used to
3678 substitute the TT parameter. */
3681 coerce_template_template_parms (tree parm_parms
,
3683 tsubst_flags_t complain
,
3687 int nparms
, nargs
, i
;
3690 gcc_assert (TREE_CODE (parm_parms
) == TREE_VEC
);
3691 gcc_assert (TREE_CODE (arg_parms
) == TREE_VEC
);
3693 nparms
= TREE_VEC_LENGTH (parm_parms
);
3694 nargs
= TREE_VEC_LENGTH (arg_parms
);
3696 /* The rule here is opposite of coerce_template_parms. */
3699 && TREE_PURPOSE (TREE_VEC_ELT (arg_parms
, nparms
)) == NULL_TREE
))
3702 for (i
= 0; i
< nparms
; ++i
)
3704 parm
= TREE_VALUE (TREE_VEC_ELT (parm_parms
, i
));
3705 arg
= TREE_VALUE (TREE_VEC_ELT (arg_parms
, i
));
3707 if (arg
== NULL_TREE
|| arg
== error_mark_node
3708 || parm
== NULL_TREE
|| parm
== error_mark_node
)
3711 if (TREE_CODE (arg
) != TREE_CODE (parm
))
3714 switch (TREE_CODE (parm
))
3720 /* We encounter instantiations of templates like
3721 template <template <template <class> class> class TT>
3724 tree parmparm
= DECL_INNERMOST_TEMPLATE_PARMS (parm
);
3725 tree argparm
= DECL_INNERMOST_TEMPLATE_PARMS (arg
);
3727 if (!coerce_template_template_parms
3728 (parmparm
, argparm
, complain
, in_decl
, outer_args
))
3734 /* The tsubst call is used to handle cases such as
3736 template <int> class C {};
3737 template <class T, template <T> class TT> class D {};
3740 i.e. the parameter list of TT depends on earlier parameters. */
3741 if (!dependent_type_p (TREE_TYPE (arg
))
3743 (tsubst (TREE_TYPE (parm
), outer_args
, complain
, in_decl
),
3755 /* Convert the indicated template ARG as necessary to match the
3756 indicated template PARM. Returns the converted ARG, or
3757 error_mark_node if the conversion was unsuccessful. Error and
3758 warning messages are issued under control of COMPLAIN. This
3759 conversion is for the Ith parameter in the parameter list. ARGS is
3760 the full set of template arguments deduced so far. */
3763 convert_template_argument (tree parm
,
3766 tsubst_flags_t complain
,
3772 int is_type
, requires_type
, is_tmpl_type
, requires_tmpl_type
;
3774 inner_args
= INNERMOST_TEMPLATE_ARGS (args
);
3776 if (TREE_CODE (arg
) == TREE_LIST
3777 && TREE_CODE (TREE_VALUE (arg
)) == OFFSET_REF
)
3779 /* The template argument was the name of some
3780 member function. That's usually
3781 invalid, but static members are OK. In any
3782 case, grab the underlying fields/functions
3783 and issue an error later if required. */
3784 arg
= TREE_VALUE (arg
);
3785 TREE_TYPE (arg
) = unknown_type_node
;
3788 requires_tmpl_type
= TREE_CODE (parm
) == TEMPLATE_DECL
;
3789 requires_type
= (TREE_CODE (parm
) == TYPE_DECL
3790 || requires_tmpl_type
);
3792 is_tmpl_type
= ((TREE_CODE (arg
) == TEMPLATE_DECL
3793 && TREE_CODE (DECL_TEMPLATE_RESULT (arg
)) == TYPE_DECL
)
3794 || TREE_CODE (arg
) == TEMPLATE_TEMPLATE_PARM
3795 || TREE_CODE (arg
) == UNBOUND_CLASS_TEMPLATE
);
3798 && (TREE_CODE (arg
) == TEMPLATE_TEMPLATE_PARM
3799 || TREE_CODE (arg
) == UNBOUND_CLASS_TEMPLATE
))
3800 arg
= TYPE_STUB_DECL (arg
);
3802 is_type
= TYPE_P (arg
) || is_tmpl_type
;
3804 if (requires_type
&& ! is_type
&& TREE_CODE (arg
) == SCOPE_REF
3805 && TREE_CODE (TREE_OPERAND (arg
, 0)) == TEMPLATE_TYPE_PARM
)
3807 pedwarn ("to refer to a type member of a template parameter, "
3808 "use %<typename %E%>", arg
);
3810 arg
= make_typename_type (TREE_OPERAND (arg
, 0),
3811 TREE_OPERAND (arg
, 1),
3813 complain
& tf_error
);
3816 if (is_type
!= requires_type
)
3820 if (complain
& tf_error
)
3822 error ("type/value mismatch at argument %d in template "
3823 "parameter list for %qD",
3826 error (" expected a constant of type %qT, got %qT",
3828 (is_tmpl_type
? DECL_NAME (arg
) : arg
));
3829 else if (requires_tmpl_type
)
3830 error (" expected a class template, got %qE", arg
);
3832 error (" expected a type, got %qE", arg
);
3835 return error_mark_node
;
3837 if (is_tmpl_type
^ requires_tmpl_type
)
3839 if (in_decl
&& (complain
& tf_error
))
3841 error ("type/value mismatch at argument %d in template "
3842 "parameter list for %qD",
3845 error (" expected a type, got %qT", DECL_NAME (arg
));
3847 error (" expected a class template, got %qT", arg
);
3849 return error_mark_node
;
3854 if (requires_tmpl_type
)
3856 if (TREE_CODE (TREE_TYPE (arg
)) == UNBOUND_CLASS_TEMPLATE
)
3857 /* The number of argument required is not known yet.
3858 Just accept it for now. */
3859 val
= TREE_TYPE (arg
);
3862 tree parmparm
= DECL_INNERMOST_TEMPLATE_PARMS (parm
);
3863 tree argparm
= DECL_INNERMOST_TEMPLATE_PARMS (arg
);
3865 if (coerce_template_template_parms (parmparm
, argparm
,
3871 /* TEMPLATE_TEMPLATE_PARM node is preferred over
3873 if (val
!= error_mark_node
3874 && DECL_TEMPLATE_TEMPLATE_PARM_P (val
))
3875 val
= TREE_TYPE (val
);
3879 if (in_decl
&& (complain
& tf_error
))
3881 error ("type/value mismatch at argument %d in "
3882 "template parameter list for %qD",
3884 error (" expected a template of type %qD, got %qD",
3888 val
= error_mark_node
;
3897 tree t
= tsubst (TREE_TYPE (parm
), args
, complain
, in_decl
);
3899 if (invalid_nontype_parm_type_p (t
, complain
))
3900 return error_mark_node
;
3902 if (!uses_template_parms (arg
) && !uses_template_parms (t
))
3903 /* We used to call digest_init here. However, digest_init
3904 will report errors, which we don't want when complain
3905 is zero. More importantly, digest_init will try too
3906 hard to convert things: for example, `0' should not be
3907 converted to pointer type at this point according to
3908 the standard. Accepting this is not merely an
3909 extension, since deciding whether or not these
3910 conversions can occur is part of determining which
3911 function template to call, or whether a given explicit
3912 argument specification is valid. */
3913 val
= convert_nontype_argument (t
, arg
);
3917 if (val
== NULL_TREE
)
3918 val
= error_mark_node
;
3919 else if (val
== error_mark_node
&& (complain
& tf_error
))
3920 error ("could not convert template argument %qE to %qT", arg
, t
);
3926 /* Convert all template arguments to their appropriate types, and
3927 return a vector containing the innermost resulting template
3928 arguments. If any error occurs, return error_mark_node. Error and
3929 warning messages are issued under control of COMPLAIN.
3931 If REQUIRE_ALL_ARGUMENTS is nonzero, all arguments must be
3932 provided in ARGLIST, or else trailing parameters must have default
3933 values. If REQUIRE_ALL_ARGUMENTS is zero, we will attempt argument
3934 deduction for any unspecified trailing arguments. */
3937 coerce_template_parms (tree parms
,
3940 tsubst_flags_t complain
,
3941 int require_all_arguments
)
3943 int nparms
, nargs
, i
, lost
= 0;
3946 tree new_inner_args
;
3948 inner_args
= INNERMOST_TEMPLATE_ARGS (args
);
3949 nargs
= inner_args
? NUM_TMPL_ARGS (inner_args
) : 0;
3950 nparms
= TREE_VEC_LENGTH (parms
);
3954 && require_all_arguments
3955 && TREE_PURPOSE (TREE_VEC_ELT (parms
, nargs
)) == NULL_TREE
))
3957 if (complain
& tf_error
)
3959 error ("wrong number of template arguments (%d, should be %d)",
3963 error ("provided for %q+D", in_decl
);
3966 return error_mark_node
;
3969 new_inner_args
= make_tree_vec (nparms
);
3970 new_args
= add_outermost_template_args (args
, new_inner_args
);
3971 for (i
= 0; i
< nparms
; i
++)
3976 /* Get the Ith template parameter. */
3977 parm
= TREE_VEC_ELT (parms
, i
);
3979 /* Calculate the Ith argument. */
3981 arg
= TREE_VEC_ELT (inner_args
, i
);
3982 else if (require_all_arguments
)
3983 /* There must be a default arg in this case. */
3984 arg
= tsubst_template_arg (TREE_PURPOSE (parm
), new_args
,
3990 if (arg
== error_mark_node
)
3992 if (complain
& tf_error
)
3993 error ("template argument %d is invalid", i
+ 1);
3996 arg
= convert_template_argument (TREE_VALUE (parm
),
3997 arg
, new_args
, complain
, i
,
4000 if (arg
== error_mark_node
)
4002 TREE_VEC_ELT (new_inner_args
, i
) = arg
;
4006 return error_mark_node
;
4008 return new_inner_args
;
4011 /* Returns 1 if template args OT and NT are equivalent. */
4014 template_args_equal (tree ot
, tree nt
)
4019 if (TREE_CODE (nt
) == TREE_VEC
)
4020 /* For member templates */
4021 return TREE_CODE (ot
) == TREE_VEC
&& comp_template_args (ot
, nt
);
4022 else if (TYPE_P (nt
))
4023 return TYPE_P (ot
) && same_type_p (ot
, nt
);
4024 else if (TREE_CODE (ot
) == TREE_VEC
|| TYPE_P (ot
))
4027 return cp_tree_equal (ot
, nt
);
4030 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
4031 of template arguments. Returns 0 otherwise. */
4034 comp_template_args (tree oldargs
, tree newargs
)
4038 if (TREE_VEC_LENGTH (oldargs
) != TREE_VEC_LENGTH (newargs
))
4041 for (i
= 0; i
< TREE_VEC_LENGTH (oldargs
); ++i
)
4043 tree nt
= TREE_VEC_ELT (newargs
, i
);
4044 tree ot
= TREE_VEC_ELT (oldargs
, i
);
4046 if (! template_args_equal (ot
, nt
))
4052 /* Given class template name and parameter list, produce a user-friendly name
4053 for the instantiation. */
4056 mangle_class_name_for_template (const char* name
, tree parms
, tree arglist
)
4058 static struct obstack scratch_obstack
;
4059 static char *scratch_firstobj
;
4062 if (!scratch_firstobj
)
4063 gcc_obstack_init (&scratch_obstack
);
4065 obstack_free (&scratch_obstack
, scratch_firstobj
);
4066 scratch_firstobj
= obstack_alloc (&scratch_obstack
, 1);
4068 #define ccat(C) obstack_1grow (&scratch_obstack, (C));
4069 #define cat(S) obstack_grow (&scratch_obstack, (S), strlen (S))
4073 nparms
= TREE_VEC_LENGTH (parms
);
4074 arglist
= INNERMOST_TEMPLATE_ARGS (arglist
);
4075 gcc_assert (nparms
== TREE_VEC_LENGTH (arglist
));
4076 for (i
= 0; i
< nparms
; i
++)
4078 tree parm
= TREE_VALUE (TREE_VEC_ELT (parms
, i
));
4079 tree arg
= TREE_VEC_ELT (arglist
, i
);
4084 if (TREE_CODE (parm
) == TYPE_DECL
)
4086 cat (type_as_string (arg
, TFF_CHASE_TYPEDEF
));
4089 else if (TREE_CODE (parm
) == TEMPLATE_DECL
)
4091 if (TREE_CODE (arg
) == TEMPLATE_DECL
)
4093 /* Already substituted with real template. Just output
4094 the template name here */
4095 tree context
= DECL_CONTEXT (arg
);
4098 /* The template may be defined in a namespace, or
4099 may be a member template. */
4100 gcc_assert (TREE_CODE (context
) == NAMESPACE_DECL
4101 || CLASS_TYPE_P (context
));
4102 cat (decl_as_string (DECL_CONTEXT (arg
),
4103 TFF_PLAIN_IDENTIFIER
));
4106 cat (IDENTIFIER_POINTER (DECL_NAME (arg
)));
4109 /* Output the parameter declaration. */
4110 cat (type_as_string (arg
, TFF_CHASE_TYPEDEF
));
4114 gcc_assert (TREE_CODE (parm
) == PARM_DECL
);
4116 /* No need to check arglist against parmlist here; we did that
4117 in coerce_template_parms, called from lookup_template_class. */
4118 cat (expr_as_string (arg
, TFF_PLAIN_IDENTIFIER
));
4121 char *bufp
= obstack_next_free (&scratch_obstack
);
4123 while (bufp
[offset
- 1] == ' ')
4125 obstack_blank_fast (&scratch_obstack
, offset
);
4127 /* B<C<char> >, not B<C<char>> */
4128 if (bufp
[offset
- 1] == '>')
4133 return (char *) obstack_base (&scratch_obstack
);
4137 classtype_mangled_name (tree t
)
4139 if (CLASSTYPE_TEMPLATE_INFO (t
)
4140 /* Specializations have already had their names set up in
4141 lookup_template_class. */
4142 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (t
))
4144 tree tmpl
= most_general_template (CLASSTYPE_TI_TEMPLATE (t
));
4146 /* For non-primary templates, the template parameters are
4147 implicit from their surrounding context. */
4148 if (PRIMARY_TEMPLATE_P (tmpl
))
4150 tree name
= DECL_NAME (tmpl
);
4151 char *mangled_name
= mangle_class_name_for_template
4152 (IDENTIFIER_POINTER (name
),
4153 DECL_INNERMOST_TEMPLATE_PARMS (tmpl
),
4154 CLASSTYPE_TI_ARGS (t
));
4155 tree id
= get_identifier (mangled_name
);
4156 IDENTIFIER_TEMPLATE (id
) = name
;
4161 return TYPE_IDENTIFIER (t
);
4165 add_pending_template (tree d
)
4167 tree ti
= (TYPE_P (d
)
4168 ? CLASSTYPE_TEMPLATE_INFO (d
)
4169 : DECL_TEMPLATE_INFO (d
));
4173 if (TI_PENDING_TEMPLATE_FLAG (ti
))
4176 /* We are called both from instantiate_decl, where we've already had a
4177 tinst_level pushed, and instantiate_template, where we haven't.
4179 level
= !(current_tinst_level
&& TINST_DECL (current_tinst_level
) == d
);
4182 push_tinst_level (d
);
4184 pt
= tree_cons (current_tinst_level
, d
, NULL_TREE
);
4185 if (last_pending_template
)
4186 TREE_CHAIN (last_pending_template
) = pt
;
4188 pending_templates
= pt
;
4190 last_pending_template
= pt
;
4192 TI_PENDING_TEMPLATE_FLAG (ti
) = 1;
4199 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
4200 ARGLIST. Valid choices for FNS are given in the cp-tree.def
4201 documentation for TEMPLATE_ID_EXPR. */
4204 lookup_template_function (tree fns
, tree arglist
)
4208 if (fns
== error_mark_node
|| arglist
== error_mark_node
)
4209 return error_mark_node
;
4211 gcc_assert (!arglist
|| TREE_CODE (arglist
) == TREE_VEC
);
4212 gcc_assert (fns
&& (is_overloaded_fn (fns
)
4213 || TREE_CODE (fns
) == IDENTIFIER_NODE
));
4215 if (BASELINK_P (fns
))
4217 BASELINK_FUNCTIONS (fns
) = build2 (TEMPLATE_ID_EXPR
,
4219 BASELINK_FUNCTIONS (fns
),
4224 type
= TREE_TYPE (fns
);
4225 if (TREE_CODE (fns
) == OVERLOAD
|| !type
)
4226 type
= unknown_type_node
;
4228 return build2 (TEMPLATE_ID_EXPR
, type
, fns
, arglist
);
4231 /* Within the scope of a template class S<T>, the name S gets bound
4232 (in build_self_reference) to a TYPE_DECL for the class, not a
4233 TEMPLATE_DECL. If DECL is a TYPE_DECL for current_class_type,
4234 or one of its enclosing classes, and that type is a template,
4235 return the associated TEMPLATE_DECL. Otherwise, the original
4236 DECL is returned. */
4239 maybe_get_template_decl_from_type_decl (tree decl
)
4241 return (decl
!= NULL_TREE
4242 && TREE_CODE (decl
) == TYPE_DECL
4243 && DECL_ARTIFICIAL (decl
)
4244 && CLASS_TYPE_P (TREE_TYPE (decl
))
4245 && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl
)))
4246 ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl
)) : decl
;
4249 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
4250 parameters, find the desired type.
4252 D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
4254 IN_DECL, if non-NULL, is the template declaration we are trying to
4257 If ENTERING_SCOPE is nonzero, we are about to enter the scope of
4258 the class we are looking up.
4260 Issue error and warning messages under control of COMPLAIN.
4262 If the template class is really a local class in a template
4263 function, then the FUNCTION_CONTEXT is the function in which it is
4266 ??? Note that this function is currently called *twice* for each
4267 template-id: the first time from the parser, while creating the
4268 incomplete type (finish_template_type), and the second type during the
4269 real instantiation (instantiate_template_class). This is surely something
4270 that we want to avoid. It also causes some problems with argument
4271 coercion (see convert_nontype_argument for more information on this). */
4274 lookup_template_class (tree d1
,
4279 tsubst_flags_t complain
)
4281 tree
template = NULL_TREE
, parmlist
;
4284 timevar_push (TV_NAME_LOOKUP
);
4286 if (TREE_CODE (d1
) == IDENTIFIER_NODE
)
4288 tree value
= innermost_non_namespace_value (d1
);
4289 if (value
&& DECL_TEMPLATE_TEMPLATE_PARM_P (value
))
4294 push_decl_namespace (context
);
4295 template = lookup_name (d1
, /*prefer_type=*/0);
4296 template = maybe_get_template_decl_from_type_decl (template);
4298 pop_decl_namespace ();
4301 context
= DECL_CONTEXT (template);
4303 else if (TREE_CODE (d1
) == TYPE_DECL
&& IS_AGGR_TYPE (TREE_TYPE (d1
)))
4305 tree type
= TREE_TYPE (d1
);
4307 /* If we are declaring a constructor, say A<T>::A<T>, we will get
4308 an implicit typename for the second A. Deal with it. */
4309 if (TREE_CODE (type
) == TYPENAME_TYPE
&& TREE_TYPE (type
))
4310 type
= TREE_TYPE (type
);
4312 if (CLASSTYPE_TEMPLATE_INFO (type
))
4314 template = CLASSTYPE_TI_TEMPLATE (type
);
4315 d1
= DECL_NAME (template);
4318 else if (TREE_CODE (d1
) == ENUMERAL_TYPE
4319 || (TYPE_P (d1
) && IS_AGGR_TYPE (d1
)))
4321 template = TYPE_TI_TEMPLATE (d1
);
4322 d1
= DECL_NAME (template);
4324 else if (TREE_CODE (d1
) == TEMPLATE_DECL
4325 && TREE_CODE (DECL_TEMPLATE_RESULT (d1
)) == TYPE_DECL
)
4328 d1
= DECL_NAME (template);
4329 context
= DECL_CONTEXT (template);
4332 /* Issue an error message if we didn't find a template. */
4335 if (complain
& tf_error
)
4336 error ("%qT is not a template", d1
);
4337 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, error_mark_node
);
4340 if (TREE_CODE (template) != TEMPLATE_DECL
4341 /* Make sure it's a user visible template, if it was named by
4343 || ((complain
& tf_user
) && !DECL_TEMPLATE_PARM_P (template)
4344 && !PRIMARY_TEMPLATE_P (template)))
4346 if (complain
& tf_error
)
4348 error ("non-template type %qT used as a template", d1
);
4350 error ("for template declaration %q+D", in_decl
);
4352 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, error_mark_node
);
4355 complain
&= ~tf_user
;
4357 if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
4359 /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
4360 template arguments */
4365 parmlist
= DECL_INNERMOST_TEMPLATE_PARMS (template);
4367 /* Consider an example where a template template parameter declared as
4369 template <class T, class U = std::allocator<T> > class TT
4371 The template parameter level of T and U are one level larger than
4372 of TT. To proper process the default argument of U, say when an
4373 instantiation `TT<int>' is seen, we need to build the full
4374 arguments containing {int} as the innermost level. Outer levels,
4375 available when not appearing as default template argument, can be
4376 obtained from `current_template_args ()'.
4378 Suppose that TT is later substituted with std::vector. The above
4379 instantiation is `TT<int, std::allocator<T> >' with TT at
4380 level 1, and T at level 2, while the template arguments at level 1
4381 becomes {std::vector} and the inner level 2 is {int}. */
4383 if (current_template_parms
)
4384 arglist
= add_to_template_args (current_template_args (), arglist
);
4386 arglist2
= coerce_template_parms (parmlist
, arglist
, template,
4387 complain
, /*require_all_args=*/1);
4388 if (arglist2
== error_mark_node
4389 || (!uses_template_parms (arglist2
)
4390 && check_instantiated_args (template, arglist2
, complain
)))
4391 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, error_mark_node
);
4393 parm
= bind_template_template_parm (TREE_TYPE (template), arglist2
);
4394 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, parm
);
4398 tree template_type
= TREE_TYPE (template);
4401 tree found
= NULL_TREE
;
4404 int is_partial_instantiation
;
4406 gen_tmpl
= most_general_template (template);
4407 parmlist
= DECL_TEMPLATE_PARMS (gen_tmpl
);
4408 parm_depth
= TMPL_PARMS_DEPTH (parmlist
);
4409 arg_depth
= TMPL_ARGS_DEPTH (arglist
);
4411 if (arg_depth
== 1 && parm_depth
> 1)
4413 /* We've been given an incomplete set of template arguments.
4416 template <class T> struct S1 {
4417 template <class U> struct S2 {};
4418 template <class U> struct S2<U*> {};
4421 we will be called with an ARGLIST of `U*', but the
4422 TEMPLATE will be `template <class T> template
4423 <class U> struct S1<T>::S2'. We must fill in the missing
4426 = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
4428 arg_depth
= TMPL_ARGS_DEPTH (arglist
);
4431 /* Now we should have enough arguments. */
4432 gcc_assert (parm_depth
== arg_depth
);
4434 /* From here on, we're only interested in the most general
4436 template = gen_tmpl
;
4438 /* Calculate the BOUND_ARGS. These will be the args that are
4439 actually tsubst'd into the definition to create the
4443 /* We have multiple levels of arguments to coerce, at once. */
4445 int saved_depth
= TMPL_ARGS_DEPTH (arglist
);
4447 tree bound_args
= make_tree_vec (parm_depth
);
4449 for (i
= saved_depth
,
4450 t
= DECL_TEMPLATE_PARMS (template);
4451 i
> 0 && t
!= NULL_TREE
;
4452 --i
, t
= TREE_CHAIN (t
))
4454 tree a
= coerce_template_parms (TREE_VALUE (t
),
4456 complain
, /*require_all_args=*/1);
4458 /* Don't process further if one of the levels fails. */
4459 if (a
== error_mark_node
)
4461 /* Restore the ARGLIST to its full size. */
4462 TREE_VEC_LENGTH (arglist
) = saved_depth
;
4463 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, error_mark_node
);
4466 SET_TMPL_ARGS_LEVEL (bound_args
, i
, a
);
4468 /* We temporarily reduce the length of the ARGLIST so
4469 that coerce_template_parms will see only the arguments
4470 corresponding to the template parameters it is
4472 TREE_VEC_LENGTH (arglist
)--;
4475 /* Restore the ARGLIST to its full size. */
4476 TREE_VEC_LENGTH (arglist
) = saved_depth
;
4478 arglist
= bound_args
;
4482 = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist
),
4483 INNERMOST_TEMPLATE_ARGS (arglist
),
4485 complain
, /*require_all_args=*/1);
4487 if (arglist
== error_mark_node
)
4488 /* We were unable to bind the arguments. */
4489 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, error_mark_node
);
4491 /* In the scope of a template class, explicit references to the
4492 template class refer to the type of the template, not any
4493 instantiation of it. For example, in:
4495 template <class T> class C { void f(C<T>); }
4497 the `C<T>' is just the same as `C'. Outside of the
4498 class, however, such a reference is an instantiation. */
4499 if (comp_template_args (TYPE_TI_ARGS (template_type
),
4502 found
= template_type
;
4504 if (!entering_scope
&& PRIMARY_TEMPLATE_P (template))
4508 for (ctx
= current_class_type
;
4509 ctx
&& TREE_CODE (ctx
) != NAMESPACE_DECL
;
4511 ? TYPE_CONTEXT (ctx
)
4512 : DECL_CONTEXT (ctx
)))
4513 if (TYPE_P (ctx
) && same_type_p (ctx
, template_type
))
4516 /* We're not in the scope of the class, so the
4517 TEMPLATE_TYPE is not the type we want after all. */
4523 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, found
);
4525 /* If we already have this specialization, return it. */
4526 found
= retrieve_specialization (template, arglist
,
4527 /*class_specializations_p=*/false);
4529 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, found
);
4531 /* This type is a "partial instantiation" if any of the template
4532 arguments still involve template parameters. Note that we set
4533 IS_PARTIAL_INSTANTIATION for partial specializations as
4535 is_partial_instantiation
= uses_template_parms (arglist
);
4537 /* If the deduced arguments are invalid, then the binding
4539 if (!is_partial_instantiation
4540 && check_instantiated_args (template,
4541 INNERMOST_TEMPLATE_ARGS (arglist
),
4543 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, error_mark_node
);
4545 if (!is_partial_instantiation
4546 && !PRIMARY_TEMPLATE_P (template)
4547 && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL
)
4549 found
= xref_tag_from_type (TREE_TYPE (template),
4550 DECL_NAME (template),
4551 /*tag_scope=*/ts_global
);
4552 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, found
);
4555 context
= tsubst (DECL_CONTEXT (template), arglist
,
4558 context
= global_namespace
;
4560 /* Create the type. */
4561 if (TREE_CODE (template_type
) == ENUMERAL_TYPE
)
4563 if (!is_partial_instantiation
)
4565 set_current_access_from_decl (TYPE_NAME (template_type
));
4566 t
= start_enum (TYPE_IDENTIFIER (template_type
));
4569 /* We don't want to call start_enum for this type, since
4570 the values for the enumeration constants may involve
4571 template parameters. And, no one should be interested
4572 in the enumeration constants for such a type. */
4573 t
= make_node (ENUMERAL_TYPE
);
4577 t
= make_aggr_type (TREE_CODE (template_type
));
4578 CLASSTYPE_DECLARED_CLASS (t
)
4579 = CLASSTYPE_DECLARED_CLASS (template_type
);
4580 SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t
);
4581 TYPE_FOR_JAVA (t
) = TYPE_FOR_JAVA (template_type
);
4583 /* A local class. Make sure the decl gets registered properly. */
4584 if (context
== current_function_decl
)
4585 pushtag (DECL_NAME (template), t
, /*tag_scope=*/ts_current
);
4588 /* If we called start_enum or pushtag above, this information
4589 will already be set up. */
4592 TYPE_CONTEXT (t
) = FROB_CONTEXT (context
);
4594 type_decl
= create_implicit_typedef (DECL_NAME (template), t
);
4595 DECL_CONTEXT (type_decl
) = TYPE_CONTEXT (t
);
4596 TYPE_STUB_DECL (t
) = type_decl
;
4597 DECL_SOURCE_LOCATION (type_decl
)
4598 = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type
));
4601 type_decl
= TYPE_NAME (t
);
4603 TREE_PRIVATE (type_decl
)
4604 = TREE_PRIVATE (TYPE_STUB_DECL (template_type
));
4605 TREE_PROTECTED (type_decl
)
4606 = TREE_PROTECTED (TYPE_STUB_DECL (template_type
));
4607 DECL_IN_SYSTEM_HEADER (type_decl
)
4608 = DECL_IN_SYSTEM_HEADER (template);
4610 /* Set up the template information. We have to figure out which
4611 template is the immediate parent if this is a full
4613 if (parm_depth
== 1 || is_partial_instantiation
4614 || !PRIMARY_TEMPLATE_P (template))
4615 /* This case is easy; there are no member templates involved. */
4619 /* This is a full instantiation of a member template. Look
4620 for a partial instantiation of which this is an instance. */
4622 for (found
= DECL_TEMPLATE_INSTANTIATIONS (template);
4623 found
; found
= TREE_CHAIN (found
))
4626 tree tmpl
= CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found
));
4628 /* We only want partial instantiations, here, not
4629 specializations or full instantiations. */
4630 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found
))
4631 || !uses_template_parms (TREE_VALUE (found
)))
4634 /* Temporarily reduce by one the number of levels in the
4635 ARGLIST and in FOUND so as to avoid comparing the
4636 last set of arguments. */
4637 TREE_VEC_LENGTH (arglist
)--;
4638 TREE_VEC_LENGTH (TREE_PURPOSE (found
)) --;
4640 /* See if the arguments match. If they do, then TMPL is
4641 the partial instantiation we want. */
4642 success
= comp_template_args (TREE_PURPOSE (found
), arglist
);
4644 /* Restore the argument vectors to their full size. */
4645 TREE_VEC_LENGTH (arglist
)++;
4646 TREE_VEC_LENGTH (TREE_PURPOSE (found
))++;
4657 /* There was no partial instantiation. This happens
4658 where C<T> is a member template of A<T> and it's used
4661 template <typename T> struct B { A<T>::C<int> m; };
4664 Create the partial instantiation.
4666 TREE_VEC_LENGTH (arglist
)--;
4667 found
= tsubst (template, arglist
, complain
, NULL_TREE
);
4668 TREE_VEC_LENGTH (arglist
)++;
4672 SET_TYPE_TEMPLATE_INFO (t
, tree_cons (found
, arglist
, NULL_TREE
));
4673 DECL_TEMPLATE_INSTANTIATIONS (template)
4674 = tree_cons (arglist
, t
,
4675 DECL_TEMPLATE_INSTANTIATIONS (template));
4677 if (TREE_CODE (t
) == ENUMERAL_TYPE
4678 && !is_partial_instantiation
)
4679 /* Now that the type has been registered on the instantiations
4680 list, we set up the enumerators. Because the enumeration
4681 constants may involve the enumeration type itself, we make
4682 sure to register the type first, and then create the
4683 constants. That way, doing tsubst_expr for the enumeration
4684 constants won't result in recursive calls here; we'll find
4685 the instantiation and exit above. */
4686 tsubst_enum (template_type
, t
, arglist
);
4688 /* Reset the name of the type, now that CLASSTYPE_TEMPLATE_INFO
4690 if (TREE_CODE (t
) != ENUMERAL_TYPE
)
4691 DECL_NAME (type_decl
) = classtype_mangled_name (t
);
4692 if (is_partial_instantiation
)
4693 /* If the type makes use of template parameters, the
4694 code that generates debugging information will crash. */
4695 DECL_IGNORED_P (TYPE_STUB_DECL (t
)) = 1;
4697 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, t
);
4699 timevar_pop (TV_NAME_LOOKUP
);
4706 struct pointer_set_t
*visited
;
4709 /* Called from for_each_template_parm via walk_tree. */
4712 for_each_template_parm_r (tree
*tp
, int *walk_subtrees
, void *d
)
4715 struct pair_fn_data
*pfd
= (struct pair_fn_data
*) d
;
4716 tree_fn_t fn
= pfd
->fn
;
4717 void *data
= pfd
->data
;
4720 && for_each_template_parm (TYPE_CONTEXT (t
), fn
, data
, pfd
->visited
))
4721 return error_mark_node
;
4723 switch (TREE_CODE (t
))
4726 if (TYPE_PTRMEMFUNC_P (t
))
4732 if (!TYPE_TEMPLATE_INFO (t
))
4734 else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t
)),
4735 fn
, data
, pfd
->visited
))
4736 return error_mark_node
;
4740 /* Since we're not going to walk subtrees, we have to do this
4742 if (for_each_template_parm (TYPE_METHOD_BASETYPE (t
), fn
, data
,
4744 return error_mark_node
;
4748 /* Check the return type. */
4749 if (for_each_template_parm (TREE_TYPE (t
), fn
, data
, pfd
->visited
))
4750 return error_mark_node
;
4752 /* Check the parameter types. Since default arguments are not
4753 instantiated until they are needed, the TYPE_ARG_TYPES may
4754 contain expressions that involve template parameters. But,
4755 no-one should be looking at them yet. And, once they're
4756 instantiated, they don't contain template parameters, so
4757 there's no point in looking at them then, either. */
4761 for (parm
= TYPE_ARG_TYPES (t
); parm
; parm
= TREE_CHAIN (parm
))
4762 if (for_each_template_parm (TREE_VALUE (parm
), fn
, data
,
4764 return error_mark_node
;
4766 /* Since we've already handled the TYPE_ARG_TYPES, we don't
4767 want walk_tree walking into them itself. */
4773 if (for_each_template_parm (TYPE_FIELDS (t
), fn
, data
,
4775 return error_mark_node
;
4780 if (DECL_LANG_SPECIFIC (t
) && DECL_TEMPLATE_INFO (t
)
4781 && for_each_template_parm (DECL_TI_ARGS (t
), fn
, data
,
4783 return error_mark_node
;
4788 if (TREE_CODE (t
) == CONST_DECL
&& DECL_TEMPLATE_PARM_P (t
)
4789 && for_each_template_parm (DECL_INITIAL (t
), fn
, data
,
4791 return error_mark_node
;
4792 if (DECL_CONTEXT (t
)
4793 && for_each_template_parm (DECL_CONTEXT (t
), fn
, data
,
4795 return error_mark_node
;
4798 case BOUND_TEMPLATE_TEMPLATE_PARM
:
4799 /* Record template parameters such as `T' inside `TT<T>'. */
4800 if (for_each_template_parm (TYPE_TI_ARGS (t
), fn
, data
, pfd
->visited
))
4801 return error_mark_node
;
4804 case TEMPLATE_TEMPLATE_PARM
:
4805 case TEMPLATE_TYPE_PARM
:
4806 case TEMPLATE_PARM_INDEX
:
4807 if (fn
&& (*fn
)(t
, data
))
4808 return error_mark_node
;
4810 return error_mark_node
;
4814 /* A template template parameter is encountered. */
4815 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t
)
4816 && for_each_template_parm (TREE_TYPE (t
), fn
, data
, pfd
->visited
))
4817 return error_mark_node
;
4819 /* Already substituted template template parameter */
4825 || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t
), fn
,
4826 data
, pfd
->visited
))
4827 return error_mark_node
;
4831 if (TREE_TYPE (t
) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t
))
4832 && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
4833 (TREE_TYPE (t
)), fn
, data
,
4835 return error_mark_node
;
4840 /* If there's no type, then this thing must be some expression
4841 involving template parameters. */
4842 if (!fn
&& !TREE_TYPE (t
))
4843 return error_mark_node
;
4848 case REINTERPRET_CAST_EXPR
:
4849 case CONST_CAST_EXPR
:
4850 case STATIC_CAST_EXPR
:
4851 case DYNAMIC_CAST_EXPR
:
4855 case PSEUDO_DTOR_EXPR
:
4857 return error_mark_node
;
4861 /* If we do not handle this case specially, we end up walking
4862 the BINFO hierarchy, which is circular, and therefore
4863 confuses walk_tree. */
4865 if (for_each_template_parm (BASELINK_FUNCTIONS (*tp
), fn
, data
,
4867 return error_mark_node
;
4874 /* We didn't find any template parameters we liked. */
4878 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
4879 BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
4880 call FN with the parameter and the DATA.
4881 If FN returns nonzero, the iteration is terminated, and
4882 for_each_template_parm returns 1. Otherwise, the iteration
4883 continues. If FN never returns a nonzero value, the value
4884 returned by for_each_template_parm is 0. If FN is NULL, it is
4885 considered to be the function which always returns 1. */
4888 for_each_template_parm (tree t
, tree_fn_t fn
, void* data
,
4889 struct pointer_set_t
*visited
)
4891 struct pair_fn_data pfd
;
4898 /* Walk the tree. (Conceptually, we would like to walk without
4899 duplicates, but for_each_template_parm_r recursively calls
4900 for_each_template_parm, so we would need to reorganize a fair
4901 bit to use walk_tree_without_duplicates, so we keep our own
4904 pfd
.visited
= visited
;
4906 pfd
.visited
= pointer_set_create ();
4907 result
= walk_tree (&t
,
4908 for_each_template_parm_r
,
4910 pfd
.visited
) != NULL_TREE
;
4915 pointer_set_destroy (pfd
.visited
);
4922 /* Returns true if T depends on any template parameter. */
4925 uses_template_parms (tree t
)
4928 int saved_processing_template_decl
;
4930 saved_processing_template_decl
= processing_template_decl
;
4931 if (!saved_processing_template_decl
)
4932 processing_template_decl
= 1;
4934 dependent_p
= dependent_type_p (t
);
4935 else if (TREE_CODE (t
) == TREE_VEC
)
4936 dependent_p
= any_dependent_template_arguments_p (t
);
4937 else if (TREE_CODE (t
) == TREE_LIST
)
4938 dependent_p
= (uses_template_parms (TREE_VALUE (t
))
4939 || uses_template_parms (TREE_CHAIN (t
)));
4942 || TREE_CODE (t
) == TEMPLATE_PARM_INDEX
4943 || TREE_CODE (t
) == OVERLOAD
4944 || TREE_CODE (t
) == BASELINK
4945 || CONSTANT_CLASS_P (t
))
4946 dependent_p
= (type_dependent_expression_p (t
)
4947 || value_dependent_expression_p (t
));
4950 gcc_assert (t
== error_mark_node
);
4951 dependent_p
= false;
4954 processing_template_decl
= saved_processing_template_decl
;
4959 /* Returns true if T depends on any template parameter with level LEVEL. */
4962 uses_template_parms_level (tree t
, int level
)
4964 return for_each_template_parm (t
, template_parm_this_level_p
, &level
, NULL
);
4967 static int tinst_depth
;
4968 extern int max_tinst_depth
;
4969 #ifdef GATHER_STATISTICS
4972 static int tinst_level_tick
;
4973 static int last_template_error_tick
;
4975 /* We're starting to instantiate D; record the template instantiation context
4976 for diagnostics and to restore it later. */
4979 push_tinst_level (tree d
)
4983 if (tinst_depth
>= max_tinst_depth
)
4985 /* If the instantiation in question still has unbound template parms,
4986 we don't really care if we can't instantiate it, so just return.
4987 This happens with base instantiation for implicit `typename'. */
4988 if (uses_template_parms (d
))
4991 last_template_error_tick
= tinst_level_tick
;
4992 error ("template instantiation depth exceeds maximum of %d (use "
4993 "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
4994 max_tinst_depth
, d
);
4996 print_instantiation_context ();
5001 new = make_node (TINST_LEVEL
);
5002 TINST_DECL (new) = d
;
5003 TINST_LOCATION (new) = input_location
;
5004 TINST_IN_SYSTEM_HEADER_P (new) = in_system_header
;
5005 TREE_CHAIN (new) = current_tinst_level
;
5006 current_tinst_level
= new;
5009 #ifdef GATHER_STATISTICS
5010 if (tinst_depth
> depth_reached
)
5011 depth_reached
= tinst_depth
;
5018 /* We're done instantiating this template; return to the instantiation
5022 pop_tinst_level (void)
5024 tree old
= current_tinst_level
;
5026 /* Restore the filename and line number stashed away when we started
5027 this instantiation. */
5028 input_location
= TINST_LOCATION (old
);
5029 in_system_header
= TINST_IN_SYSTEM_HEADER_P (old
);
5030 current_tinst_level
= TREE_CHAIN (old
);
5035 /* We're instantiating a deferred template; restore the template
5036 instantiation context in which the instantiation was requested, which
5037 is one step out from LEVEL. */
5040 reopen_tinst_level (tree level
)
5045 for (t
= level
; t
; t
= TREE_CHAIN (t
))
5048 current_tinst_level
= level
;
5052 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
5053 vector of template arguments, as for tsubst.
5055 Returns an appropriate tsubst'd friend declaration. */
5058 tsubst_friend_function (tree decl
, tree args
)
5062 if (TREE_CODE (decl
) == FUNCTION_DECL
5063 && DECL_TEMPLATE_INSTANTIATION (decl
)
5064 && TREE_CODE (DECL_TI_TEMPLATE (decl
)) != TEMPLATE_DECL
)
5065 /* This was a friend declared with an explicit template
5066 argument list, e.g.:
5070 to indicate that f was a template instantiation, not a new
5071 function declaration. Now, we have to figure out what
5072 instantiation of what template. */
5074 tree template_id
, arglist
, fns
;
5077 tree ns
= decl_namespace_context (TYPE_MAIN_DECL (current_class_type
));
5079 /* Friend functions are looked up in the containing namespace scope.
5080 We must enter that scope, to avoid finding member functions of the
5081 current cless with same name. */
5082 push_nested_namespace (ns
);
5083 fns
= tsubst_expr (DECL_TI_TEMPLATE (decl
), args
,
5084 tf_error
| tf_warning
, NULL_TREE
);
5085 pop_nested_namespace (ns
);
5086 arglist
= tsubst (DECL_TI_ARGS (decl
), args
,
5087 tf_error
| tf_warning
, NULL_TREE
);
5088 template_id
= lookup_template_function (fns
, arglist
);
5090 new_friend
= tsubst (decl
, args
, tf_error
| tf_warning
, NULL_TREE
);
5091 tmpl
= determine_specialization (template_id
, new_friend
,
5093 /*need_member_template=*/0,
5094 TREE_VEC_LENGTH (args
));
5095 return instantiate_template (tmpl
, new_args
, tf_error
);
5098 new_friend
= tsubst (decl
, args
, tf_error
| tf_warning
, NULL_TREE
);
5100 /* The NEW_FRIEND will look like an instantiation, to the
5101 compiler, but is not an instantiation from the point of view of
5102 the language. For example, we might have had:
5104 template <class T> struct S {
5105 template <class U> friend void f(T, U);
5108 Then, in S<int>, template <class U> void f(int, U) is not an
5109 instantiation of anything. */
5110 if (new_friend
== error_mark_node
)
5111 return error_mark_node
;
5113 DECL_USE_TEMPLATE (new_friend
) = 0;
5114 if (TREE_CODE (decl
) == TEMPLATE_DECL
)
5116 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend
)) = 0;
5117 DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend
))
5118 = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl
));
5121 /* The mangled name for the NEW_FRIEND is incorrect. The function
5122 is not a template instantiation and should not be mangled like
5123 one. Therefore, we forget the mangling here; we'll recompute it
5124 later if we need it. */
5125 if (TREE_CODE (new_friend
) != TEMPLATE_DECL
)
5127 SET_DECL_RTL (new_friend
, NULL_RTX
);
5128 SET_DECL_ASSEMBLER_NAME (new_friend
, NULL_TREE
);
5131 if (DECL_NAMESPACE_SCOPE_P (new_friend
))
5134 tree new_friend_template_info
;
5135 tree new_friend_result_template_info
;
5137 int new_friend_is_defn
;
5139 /* We must save some information from NEW_FRIEND before calling
5140 duplicate decls since that function will free NEW_FRIEND if
5142 new_friend_template_info
= DECL_TEMPLATE_INFO (new_friend
);
5143 new_friend_is_defn
=
5144 (DECL_INITIAL (DECL_TEMPLATE_RESULT
5145 (template_for_substitution (new_friend
)))
5147 if (TREE_CODE (new_friend
) == TEMPLATE_DECL
)
5149 /* This declaration is a `primary' template. */
5150 DECL_PRIMARY_TEMPLATE (new_friend
) = new_friend
;
5152 new_friend_result_template_info
5153 = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend
));
5156 new_friend_result_template_info
= NULL_TREE
;
5158 /* Inside pushdecl_namespace_level, we will push into the
5159 current namespace. However, the friend function should go
5160 into the namespace of the template. */
5161 ns
= decl_namespace_context (new_friend
);
5162 push_nested_namespace (ns
);
5163 old_decl
= pushdecl_namespace_level (new_friend
);
5164 pop_nested_namespace (ns
);
5166 if (old_decl
!= new_friend
)
5168 /* This new friend declaration matched an existing
5169 declaration. For example, given:
5171 template <class T> void f(T);
5172 template <class U> class C {
5173 template <class T> friend void f(T) {}
5176 the friend declaration actually provides the definition
5177 of `f', once C has been instantiated for some type. So,
5178 old_decl will be the out-of-class template declaration,
5179 while new_friend is the in-class definition.
5181 But, if `f' was called before this point, the
5182 instantiation of `f' will have DECL_TI_ARGS corresponding
5183 to `T' but not to `U', references to which might appear
5184 in the definition of `f'. Previously, the most general
5185 template for an instantiation of `f' was the out-of-class
5186 version; now it is the in-class version. Therefore, we
5187 run through all specialization of `f', adding to their
5188 DECL_TI_ARGS appropriately. In particular, they need a
5189 new set of outer arguments, corresponding to the
5190 arguments for this class instantiation.
5192 The same situation can arise with something like this:
5195 template <class T> class C {
5199 when `C<int>' is instantiated. Now, `f(int)' is defined
5202 if (!new_friend_is_defn
)
5203 /* On the other hand, if the in-class declaration does
5204 *not* provide a definition, then we don't want to alter
5205 existing definitions. We can just leave everything
5210 /* Overwrite whatever template info was there before, if
5211 any, with the new template information pertaining to
5213 DECL_TEMPLATE_INFO (old_decl
) = new_friend_template_info
;
5215 if (TREE_CODE (old_decl
) != TEMPLATE_DECL
)
5216 reregister_specialization (new_friend
,
5217 most_general_template (old_decl
),
5222 tree new_friend_args
;
5224 DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl
))
5225 = new_friend_result_template_info
;
5227 new_friend_args
= TI_ARGS (new_friend_template_info
);
5228 for (t
= DECL_TEMPLATE_SPECIALIZATIONS (old_decl
);
5232 tree spec
= TREE_VALUE (t
);
5235 = add_outermost_template_args (new_friend_args
,
5236 DECL_TI_ARGS (spec
));
5239 /* Now, since specializations are always supposed to
5240 hang off of the most general template, we must move
5242 t
= most_general_template (old_decl
);
5245 DECL_TEMPLATE_SPECIALIZATIONS (t
)
5246 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t
),
5247 DECL_TEMPLATE_SPECIALIZATIONS (old_decl
));
5248 DECL_TEMPLATE_SPECIALIZATIONS (old_decl
) = NULL_TREE
;
5253 /* The information from NEW_FRIEND has been merged into OLD_DECL
5254 by duplicate_decls. */
5255 new_friend
= old_decl
;
5260 tree context
= DECL_CONTEXT (new_friend
);
5264 template <class T> class C {
5265 template <class U> friend void C1<U>::f (); // case 1
5266 friend void C2<T>::f (); // case 2
5268 we only need to make sure CONTEXT is a complete type for
5269 case 2. To distinguish between the two cases, we note that
5270 CONTEXT of case 1 remains dependent type after tsubst while
5271 this isn't true for case 2. */
5272 ++processing_template_decl
;
5273 dependent_p
= dependent_type_p (context
);
5274 --processing_template_decl
;
5277 && !complete_type_or_else (context
, NULL_TREE
))
5278 return error_mark_node
;
5280 if (COMPLETE_TYPE_P (context
))
5282 /* Check to see that the declaration is really present, and,
5283 possibly obtain an improved declaration. */
5284 tree fn
= check_classfn (context
,
5285 new_friend
, NULL_TREE
);
5295 /* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
5296 template arguments, as for tsubst.
5298 Returns an appropriate tsubst'd friend type or error_mark_node on
5302 tsubst_friend_class (tree friend_tmpl
, tree args
)
5308 context
= DECL_CONTEXT (friend_tmpl
);
5312 if (TREE_CODE (context
) == NAMESPACE_DECL
)
5313 push_nested_namespace (context
);
5315 push_nested_class (tsubst (context
, args
, tf_none
, NULL_TREE
));
5318 /* First, we look for a class template. */
5319 tmpl
= lookup_name (DECL_NAME (friend_tmpl
), /*prefer_type=*/0);
5321 /* But, if we don't find one, it might be because we're in a
5322 situation like this:
5330 Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
5331 for `S<int>', not the TEMPLATE_DECL. */
5332 if (!tmpl
|| !DECL_CLASS_TEMPLATE_P (tmpl
))
5334 tmpl
= lookup_name (DECL_NAME (friend_tmpl
), /*prefer_type=*/1);
5335 tmpl
= maybe_get_template_decl_from_type_decl (tmpl
);
5338 if (tmpl
&& DECL_CLASS_TEMPLATE_P (tmpl
))
5340 /* The friend template has already been declared. Just
5341 check to see that the declarations match, and install any new
5342 default parameters. We must tsubst the default parameters,
5343 of course. We only need the innermost template parameters
5344 because that is all that redeclare_class_template will look
5346 if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl
))
5347 > TMPL_ARGS_DEPTH (args
))
5350 parms
= tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl
),
5351 args
, tf_error
| tf_warning
);
5352 redeclare_class_template (TREE_TYPE (tmpl
), parms
);
5355 friend_type
= TREE_TYPE (tmpl
);
5359 /* The friend template has not already been declared. In this
5360 case, the instantiation of the template class will cause the
5361 injection of this template into the global scope. */
5362 tmpl
= tsubst (friend_tmpl
, args
, tf_error
| tf_warning
, NULL_TREE
);
5364 /* The new TMPL is not an instantiation of anything, so we
5365 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE for
5366 the new type because that is supposed to be the corresponding
5367 template decl, i.e., TMPL. */
5368 DECL_USE_TEMPLATE (tmpl
) = 0;
5369 DECL_TEMPLATE_INFO (tmpl
) = NULL_TREE
;
5370 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl
)) = 0;
5371 CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl
))
5372 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl
)));
5374 /* Inject this template into the global scope. */
5375 friend_type
= TREE_TYPE (pushdecl_top_level (tmpl
));
5380 if (TREE_CODE (context
) == NAMESPACE_DECL
)
5381 pop_nested_namespace (context
);
5383 pop_nested_class ();
5389 /* Returns zero if TYPE cannot be completed later due to circularity.
5390 Otherwise returns one. */
5393 can_complete_type_without_circularity (tree type
)
5395 if (type
== NULL_TREE
|| type
== error_mark_node
)
5397 else if (COMPLETE_TYPE_P (type
))
5399 else if (TREE_CODE (type
) == ARRAY_TYPE
&& TYPE_DOMAIN (type
))
5400 return can_complete_type_without_circularity (TREE_TYPE (type
));
5401 else if (CLASS_TYPE_P (type
)
5402 && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type
)))
5409 instantiate_class_template (tree type
)
5411 tree
template, args
, pattern
, t
, member
;
5416 if (type
== error_mark_node
)
5417 return error_mark_node
;
5419 if (TYPE_BEING_DEFINED (type
)
5420 || COMPLETE_TYPE_P (type
)
5421 || dependent_type_p (type
))
5424 /* Figure out which template is being instantiated. */
5425 template = most_general_template (CLASSTYPE_TI_TEMPLATE (type
));
5426 gcc_assert (TREE_CODE (template) == TEMPLATE_DECL
);
5428 /* Figure out which arguments are being used to do the
5430 args
= CLASSTYPE_TI_ARGS (type
);
5432 /* Determine what specialization of the original template to
5434 t
= most_specialized_class (template, args
);
5435 if (t
== error_mark_node
)
5437 const char *str
= "candidates are:";
5438 error ("ambiguous class template instantiation for %q#T", type
);
5439 for (t
= DECL_TEMPLATE_SPECIALIZATIONS (template); t
;
5442 if (get_class_bindings (TREE_VALUE (t
), TREE_PURPOSE (t
), args
))
5444 error ("%s %+#T", str
, TREE_TYPE (t
));
5448 TYPE_BEING_DEFINED (type
) = 1;
5449 return error_mark_node
;
5453 pattern
= TREE_TYPE (t
);
5455 pattern
= TREE_TYPE (template);
5457 /* If the template we're instantiating is incomplete, then clearly
5458 there's nothing we can do. */
5459 if (!COMPLETE_TYPE_P (pattern
))
5462 /* If we've recursively instantiated too many templates, stop. */
5463 if (! push_tinst_level (type
))
5466 /* Now we're really doing the instantiation. Mark the type as in
5467 the process of being defined. */
5468 TYPE_BEING_DEFINED (type
) = 1;
5470 /* We may be in the middle of deferred access check. Disable
5472 push_deferring_access_checks (dk_no_deferred
);
5474 push_to_top_level ();
5478 /* This TYPE is actually an instantiation of a partial
5479 specialization. We replace the innermost set of ARGS with
5480 the arguments appropriate for substitution. For example,
5483 template <class T> struct S {};
5484 template <class T> struct S<T*> {};
5486 and supposing that we are instantiating S<int*>, ARGS will
5487 present be {int*} but we need {int}. */
5489 = get_class_bindings (TREE_VALUE (t
), TREE_PURPOSE (t
),
5492 /* If there were multiple levels in ARGS, replacing the
5493 innermost level would alter CLASSTYPE_TI_ARGS, which we don't
5494 want, so we make a copy first. */
5495 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args
))
5497 args
= copy_node (args
);
5498 SET_TMPL_ARGS_LEVEL (args
, TMPL_ARGS_DEPTH (args
), inner_args
);
5504 SET_CLASSTYPE_INTERFACE_UNKNOWN (type
);
5506 /* Set the input location to the template definition. This is needed
5507 if tsubsting causes an error. */
5508 typedecl
= TYPE_MAIN_DECL (type
);
5509 input_location
= DECL_SOURCE_LOCATION (typedecl
);
5510 in_system_header
= DECL_IN_SYSTEM_HEADER (typedecl
);
5512 TYPE_HAS_CONSTRUCTOR (type
) = TYPE_HAS_CONSTRUCTOR (pattern
);
5513 TYPE_HAS_NEW_OPERATOR (type
) = TYPE_HAS_NEW_OPERATOR (pattern
);
5514 TYPE_HAS_ARRAY_NEW_OPERATOR (type
) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern
);
5515 TYPE_GETS_DELETE (type
) = TYPE_GETS_DELETE (pattern
);
5516 TYPE_HAS_ASSIGN_REF (type
) = TYPE_HAS_ASSIGN_REF (pattern
);
5517 TYPE_HAS_CONST_ASSIGN_REF (type
) = TYPE_HAS_CONST_ASSIGN_REF (pattern
);
5518 TYPE_HAS_INIT_REF (type
) = TYPE_HAS_INIT_REF (pattern
);
5519 TYPE_HAS_CONST_INIT_REF (type
) = TYPE_HAS_CONST_INIT_REF (pattern
);
5520 TYPE_HAS_DEFAULT_CONSTRUCTOR (type
) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern
);
5521 TYPE_HAS_CONVERSION (type
) = TYPE_HAS_CONVERSION (pattern
);
5522 TYPE_PACKED (type
) = TYPE_PACKED (pattern
);
5523 TYPE_ALIGN (type
) = TYPE_ALIGN (pattern
);
5524 TYPE_USER_ALIGN (type
) = TYPE_USER_ALIGN (pattern
);
5525 TYPE_FOR_JAVA (type
) = TYPE_FOR_JAVA (pattern
); /* For libjava's JArray<T> */
5526 if (ANON_AGGR_TYPE_P (pattern
))
5527 SET_ANON_AGGR_TYPE_P (type
);
5529 pbinfo
= TYPE_BINFO (pattern
);
5531 /* We should never instantiate a nested class before its enclosing
5532 class; we need to look up the nested class by name before we can
5533 instantiate it, and that lookup should instantiate the enclosing
5535 gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern
))
5536 || COMPLETE_TYPE_P (TYPE_CONTEXT (type
))
5537 || TYPE_BEING_DEFINED (TYPE_CONTEXT (type
)));
5539 base_list
= NULL_TREE
;
5540 if (BINFO_N_BASE_BINFOS (pbinfo
))
5543 tree context
= TYPE_CONTEXT (type
);
5547 /* We must enter the scope containing the type, as that is where
5548 the accessibility of types named in dependent bases are
5550 pushed_scope
= push_scope (context
? context
: global_namespace
);
5552 /* Substitute into each of the bases to determine the actual
5554 for (i
= 0; BINFO_BASE_ITERATE (pbinfo
, i
, pbase_binfo
); i
++)
5557 tree access
= BINFO_BASE_ACCESS (pbinfo
, i
);
5559 /* Substitute to figure out the base class. */
5560 base
= tsubst (BINFO_TYPE (pbase_binfo
), args
, tf_error
, NULL_TREE
);
5561 if (base
== error_mark_node
)
5564 base_list
= tree_cons (access
, base
, base_list
);
5565 if (BINFO_VIRTUAL_P (pbase_binfo
))
5566 TREE_TYPE (base_list
) = integer_type_node
;
5569 /* The list is now in reverse order; correct that. */
5570 base_list
= nreverse (base_list
);
5573 pop_scope (pushed_scope
);
5575 /* Now call xref_basetypes to set up all the base-class
5577 xref_basetypes (type
, base_list
);
5580 /* Now that our base classes are set up, enter the scope of the
5581 class, so that name lookups into base classes, etc. will work
5582 correctly. This is precisely analogous to what we do in
5583 begin_class_definition when defining an ordinary non-template
5587 /* Now members are processed in the order of declaration. */
5588 for (member
= CLASSTYPE_DECL_LIST (pattern
);
5589 member
; member
= TREE_CHAIN (member
))
5591 tree t
= TREE_VALUE (member
);
5593 if (TREE_PURPOSE (member
))
5597 /* Build new CLASSTYPE_NESTED_UTDS. */
5600 tree name
= TYPE_IDENTIFIER (tag
);
5602 bool class_template_p
;
5604 class_template_p
= (TREE_CODE (tag
) != ENUMERAL_TYPE
5605 && TYPE_LANG_SPECIFIC (tag
)
5606 && CLASSTYPE_IS_TEMPLATE (tag
));
5607 /* If the member is a class template, then -- even after
5608 substitution -- there may be dependent types in the
5609 template argument list for the class. We increment
5610 PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
5611 that function will assume that no types are dependent
5612 when outside of a template. */
5613 if (class_template_p
)
5614 ++processing_template_decl
;
5615 newtag
= tsubst (tag
, args
, tf_error
, NULL_TREE
);
5616 if (class_template_p
)
5617 --processing_template_decl
;
5618 if (newtag
== error_mark_node
)
5621 if (TREE_CODE (newtag
) != ENUMERAL_TYPE
)
5623 if (class_template_p
)
5624 /* Unfortunately, lookup_template_class sets
5625 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
5626 instantiation (i.e., for the type of a member
5627 template class nested within a template class.)
5628 This behavior is required for
5629 maybe_process_partial_specialization to work
5630 correctly, but is not accurate in this case;
5631 the TAG is not an instantiation of anything.
5632 (The corresponding TEMPLATE_DECL is an
5633 instantiation, but the TYPE is not.) */
5634 CLASSTYPE_USE_TEMPLATE (newtag
) = 0;
5636 /* Now, we call pushtag to put this NEWTAG into the scope of
5637 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
5638 pushtag calling push_template_decl. We don't have to do
5639 this for enums because it will already have been done in
5642 SET_IDENTIFIER_TYPE_VALUE (name
, newtag
);
5643 pushtag (name
, newtag
, /*tag_scope=*/ts_current
);
5646 else if (TREE_CODE (t
) == FUNCTION_DECL
5647 || DECL_FUNCTION_TEMPLATE_P (t
))
5649 /* Build new TYPE_METHODS. */
5652 if (TREE_CODE (t
) == TEMPLATE_DECL
)
5653 ++processing_template_decl
;
5654 r
= tsubst (t
, args
, tf_error
, NULL_TREE
);
5655 if (TREE_CODE (t
) == TEMPLATE_DECL
)
5656 --processing_template_decl
;
5657 set_current_access_from_decl (r
);
5658 grok_special_member_properties (r
);
5659 finish_member_declaration (r
);
5663 /* Build new TYPE_FIELDS. */
5665 if (TREE_CODE (t
) != CONST_DECL
)
5669 /* The the file and line for this declaration, to
5670 assist in error message reporting. Since we
5671 called push_tinst_level above, we don't need to
5673 input_location
= DECL_SOURCE_LOCATION (t
);
5675 if (TREE_CODE (t
) == TEMPLATE_DECL
)
5676 ++processing_template_decl
;
5677 r
= tsubst (t
, args
, tf_error
| tf_warning
, NULL_TREE
);
5678 if (TREE_CODE (t
) == TEMPLATE_DECL
)
5679 --processing_template_decl
;
5680 if (TREE_CODE (r
) == VAR_DECL
)
5684 if (DECL_INITIALIZED_IN_CLASS_P (r
))
5685 init
= tsubst_expr (DECL_INITIAL (t
), args
,
5686 tf_error
| tf_warning
, NULL_TREE
);
5690 finish_static_data_member_decl
5691 (r
, init
, /*asmspec_tree=*/NULL_TREE
, /*flags=*/0);
5693 if (DECL_INITIALIZED_IN_CLASS_P (r
))
5694 check_static_variable_definition (r
, TREE_TYPE (r
));
5696 else if (TREE_CODE (r
) == FIELD_DECL
)
5698 /* Determine whether R has a valid type and can be
5699 completed later. If R is invalid, then it is
5700 replaced by error_mark_node so that it will not be
5701 added to TYPE_FIELDS. */
5702 tree rtype
= TREE_TYPE (r
);
5703 if (can_complete_type_without_circularity (rtype
))
5704 complete_type (rtype
);
5706 if (!COMPLETE_TYPE_P (rtype
))
5708 cxx_incomplete_type_error (r
, rtype
);
5709 r
= error_mark_node
;
5713 /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
5714 such a thing will already have been added to the field
5715 list by tsubst_enum in finish_member_declaration in the
5716 CLASSTYPE_NESTED_UTDS case above. */
5717 if (!(TREE_CODE (r
) == TYPE_DECL
5718 && TREE_CODE (TREE_TYPE (r
)) == ENUMERAL_TYPE
5719 && DECL_ARTIFICIAL (r
)))
5721 set_current_access_from_decl (r
);
5722 finish_member_declaration (r
);
5729 if (TYPE_P (t
) || DECL_CLASS_TEMPLATE_P (t
))
5731 /* Build new CLASSTYPE_FRIEND_CLASSES. */
5733 tree friend_type
= t
;
5734 bool adjust_processing_template_decl
= false;
5736 if (TREE_CODE (friend_type
) == TEMPLATE_DECL
)
5738 /* template <class T> friend class C; */
5739 friend_type
= tsubst_friend_class (friend_type
, args
);
5740 adjust_processing_template_decl
= true;
5742 else if (TREE_CODE (friend_type
) == UNBOUND_CLASS_TEMPLATE
)
5744 /* template <class T> friend class C::D; */
5745 friend_type
= tsubst (friend_type
, args
,
5746 tf_error
| tf_warning
, NULL_TREE
);
5747 if (TREE_CODE (friend_type
) == TEMPLATE_DECL
)
5748 friend_type
= TREE_TYPE (friend_type
);
5749 adjust_processing_template_decl
= true;
5751 else if (TREE_CODE (friend_type
) == TYPENAME_TYPE
)
5753 /* This could be either
5757 when dependent_type_p is false or
5759 template <class U> friend class T::C;
5762 friend_type
= tsubst (friend_type
, args
,
5763 tf_error
| tf_warning
, NULL_TREE
);
5764 /* Bump processing_template_decl for correct
5765 dependent_type_p calculation. */
5766 ++processing_template_decl
;
5767 if (dependent_type_p (friend_type
))
5768 adjust_processing_template_decl
= true;
5769 --processing_template_decl
;
5771 else if (!CLASSTYPE_USE_TEMPLATE (friend_type
)
5772 && hidden_name_p (TYPE_NAME (friend_type
)))
5776 where C hasn't been declared yet. Let's lookup name
5777 from namespace scope directly, bypassing any name that
5778 come from dependent base class. */
5779 tree ns
= decl_namespace_context (TYPE_MAIN_DECL (friend_type
));
5781 /* The call to xref_tag_from_type does injection for friend
5783 push_nested_namespace (ns
);
5785 xref_tag_from_type (friend_type
, NULL_TREE
,
5786 /*tag_scope=*/ts_current
);
5787 pop_nested_namespace (ns
);
5789 else if (uses_template_parms (friend_type
))
5790 /* friend class C<T>; */
5791 friend_type
= tsubst (friend_type
, args
,
5792 tf_error
| tf_warning
, NULL_TREE
);
5797 where C is already declared or
5799 friend class C<int>;
5801 We don't have to do anything in these cases. */
5803 if (adjust_processing_template_decl
)
5804 /* Trick make_friend_class into realizing that the friend
5805 we're adding is a template, not an ordinary class. It's
5806 important that we use make_friend_class since it will
5807 perform some error-checking and output cross-reference
5809 ++processing_template_decl
;
5811 if (friend_type
!= error_mark_node
)
5812 make_friend_class (type
, friend_type
, /*complain=*/false);
5814 if (adjust_processing_template_decl
)
5815 --processing_template_decl
;
5819 /* Build new DECL_FRIENDLIST. */
5822 /* The the file and line for this declaration, to
5823 assist in error message reporting. Since we
5824 called push_tinst_level above, we don't need to
5826 input_location
= DECL_SOURCE_LOCATION (t
);
5828 if (TREE_CODE (t
) == TEMPLATE_DECL
)
5830 ++processing_template_decl
;
5831 push_deferring_access_checks (dk_no_check
);
5834 r
= tsubst_friend_function (t
, args
);
5835 add_friend (type
, r
, /*complain=*/false);
5836 if (TREE_CODE (t
) == TEMPLATE_DECL
)
5838 pop_deferring_access_checks ();
5839 --processing_template_decl
;
5845 /* Set the file and line number information to whatever is given for
5846 the class itself. This puts error messages involving generated
5847 implicit functions at a predictable point, and the same point
5848 that would be used for non-template classes. */
5849 input_location
= DECL_SOURCE_LOCATION (typedecl
);
5851 unreverse_member_declarations (type
);
5852 finish_struct_1 (type
);
5853 TYPE_BEING_DEFINED (type
) = 0;
5855 /* Now that the class is complete, instantiate default arguments for
5856 any member functions. We don't do this earlier because the
5857 default arguments may reference members of the class. */
5858 if (!PRIMARY_TEMPLATE_P (template))
5859 for (t
= TYPE_METHODS (type
); t
; t
= TREE_CHAIN (t
))
5860 if (TREE_CODE (t
) == FUNCTION_DECL
5861 /* Implicitly generated member functions will not have template
5862 information; they are not instantiations, but instead are
5863 created "fresh" for each instantiation. */
5864 && DECL_TEMPLATE_INFO (t
))
5865 tsubst_default_arguments (t
);
5868 pop_from_top_level ();
5869 pop_deferring_access_checks ();
5872 /* The vtable for a template class can be emitted in any translation
5873 unit in which the class is instantiated. When there is no key
5874 method, however, finish_struct_1 will already have added TYPE to
5875 the keyed_classes list. */
5876 if (TYPE_CONTAINS_VPTR_P (type
) && CLASSTYPE_KEY_METHOD (type
))
5877 keyed_classes
= tree_cons (NULL_TREE
, type
, keyed_classes
);
5883 tsubst_template_arg (tree t
, tree args
, tsubst_flags_t complain
, tree in_decl
)
5889 else if (TYPE_P (t
))
5890 r
= tsubst (t
, args
, complain
, in_decl
);
5893 r
= tsubst_expr (t
, args
, complain
, in_decl
);
5895 if (!uses_template_parms (r
))
5897 /* Sometimes, one of the args was an expression involving a
5898 template constant parameter, like N - 1. Now that we've
5899 tsubst'd, we might have something like 2 - 1. This will
5900 confuse lookup_template_class, so we do constant folding
5901 here. We have to unset processing_template_decl, to fool
5902 tsubst_copy_and_build() into building an actual tree. */
5904 /* If the TREE_TYPE of ARG is not NULL_TREE, ARG is already
5905 as simple as it's going to get, and trying to reprocess
5906 the trees will break. Once tsubst_expr et al DTRT for
5907 non-dependent exprs, this code can go away, as the type
5908 will always be set. */
5911 int saved_processing_template_decl
= processing_template_decl
;
5912 processing_template_decl
= 0;
5913 r
= tsubst_copy_and_build (r
, /*args=*/NULL_TREE
,
5914 tf_error
, /*in_decl=*/NULL_TREE
,
5915 /*function_p=*/false);
5916 processing_template_decl
= saved_processing_template_decl
;
5924 /* Substitute ARGS into the vector or list of template arguments T. */
5927 tsubst_template_args (tree t
, tree args
, tsubst_flags_t complain
, tree in_decl
)
5929 int len
= TREE_VEC_LENGTH (t
);
5930 int need_new
= 0, i
;
5931 tree
*elts
= alloca (len
* sizeof (tree
));
5933 for (i
= 0; i
< len
; i
++)
5935 tree orig_arg
= TREE_VEC_ELT (t
, i
);
5938 if (TREE_CODE (orig_arg
) == TREE_VEC
)
5939 new_arg
= tsubst_template_args (orig_arg
, args
, complain
, in_decl
);
5941 new_arg
= tsubst_template_arg (orig_arg
, args
, complain
, in_decl
);
5943 if (new_arg
== error_mark_node
)
5944 return error_mark_node
;
5947 if (new_arg
!= orig_arg
)
5954 t
= make_tree_vec (len
);
5955 for (i
= 0; i
< len
; i
++)
5956 TREE_VEC_ELT (t
, i
) = elts
[i
];
5961 /* Return the result of substituting ARGS into the template parameters
5962 given by PARMS. If there are m levels of ARGS and m + n levels of
5963 PARMS, then the result will contain n levels of PARMS. For
5964 example, if PARMS is `template <class T> template <class U>
5965 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
5966 result will be `template <int*, double, class V>'. */
5969 tsubst_template_parms (tree parms
, tree args
, tsubst_flags_t complain
)
5974 for (new_parms
= &r
;
5975 TMPL_PARMS_DEPTH (parms
) > TMPL_ARGS_DEPTH (args
);
5976 new_parms
= &(TREE_CHAIN (*new_parms
)),
5977 parms
= TREE_CHAIN (parms
))
5980 make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms
)));
5983 for (i
= 0; i
< TREE_VEC_LENGTH (new_vec
); ++i
)
5985 tree tuple
= TREE_VEC_ELT (TREE_VALUE (parms
), i
);
5986 tree default_value
= TREE_PURPOSE (tuple
);
5987 tree parm_decl
= TREE_VALUE (tuple
);
5989 parm_decl
= tsubst (parm_decl
, args
, complain
, NULL_TREE
);
5990 if (TREE_CODE (parm_decl
) == PARM_DECL
5991 && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl
), complain
))
5992 parm_decl
= error_mark_node
;
5993 default_value
= tsubst_template_arg (default_value
, args
,
5994 complain
, NULL_TREE
);
5996 tuple
= build_tree_list (default_value
, parm_decl
);
5997 TREE_VEC_ELT (new_vec
, i
) = tuple
;
6001 tree_cons (size_int (TMPL_PARMS_DEPTH (parms
)
6002 - TMPL_ARGS_DEPTH (args
)),
6003 new_vec
, NULL_TREE
);
6009 /* Substitute the ARGS into the indicated aggregate (or enumeration)
6010 type T. If T is not an aggregate or enumeration type, it is
6011 handled as if by tsubst. IN_DECL is as for tsubst. If
6012 ENTERING_SCOPE is nonzero, T is the context for a template which
6013 we are presently tsubst'ing. Return the substituted value. */
6016 tsubst_aggr_type (tree t
,
6018 tsubst_flags_t complain
,
6025 switch (TREE_CODE (t
))
6028 if (TYPE_PTRMEMFUNC_P (t
))
6029 return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t
), args
, complain
, in_decl
);
6031 /* Else fall through. */
6034 if (TYPE_TEMPLATE_INFO (t
))
6040 /* First, determine the context for the type we are looking
6042 context
= TYPE_CONTEXT (t
);
6044 context
= tsubst_aggr_type (context
, args
, complain
,
6045 in_decl
, /*entering_scope=*/1);
6047 /* Then, figure out what arguments are appropriate for the
6048 type we are trying to find. For example, given:
6050 template <class T> struct S;
6051 template <class T, class U> void f(T, U) { S<U> su; }
6053 and supposing that we are instantiating f<int, double>,
6054 then our ARGS will be {int, double}, but, when looking up
6055 S we only want {double}. */
6056 argvec
= tsubst_template_args (TYPE_TI_ARGS (t
), args
,
6058 if (argvec
== error_mark_node
)
6059 return error_mark_node
;
6061 r
= lookup_template_class (t
, argvec
, in_decl
, context
,
6062 entering_scope
, complain
);
6064 return cp_build_qualified_type_real (r
, TYPE_QUALS (t
), complain
);
6067 /* This is not a template type, so there's nothing to do. */
6071 return tsubst (t
, args
, complain
, in_decl
);
6075 /* Substitute into the default argument ARG (a default argument for
6076 FN), which has the indicated TYPE. */
6079 tsubst_default_argument (tree fn
, tree type
, tree arg
)
6081 tree saved_class_ptr
= NULL_TREE
;
6082 tree saved_class_ref
= NULL_TREE
;
6084 /* This default argument came from a template. Instantiate the
6085 default argument here, not in tsubst. In the case of
6094 we must be careful to do name lookup in the scope of S<T>,
6095 rather than in the current class. */
6096 push_access_scope (fn
);
6097 /* The default argument expression should not be considered to be
6098 within the scope of FN. Since push_access_scope sets
6099 current_function_decl, we must explicitly clear it here. */
6100 current_function_decl
= NULL_TREE
;
6101 /* The "this" pointer is not valid in a default argument. */
6104 saved_class_ptr
= current_class_ptr
;
6105 cp_function_chain
->x_current_class_ptr
= NULL_TREE
;
6106 saved_class_ref
= current_class_ref
;
6107 cp_function_chain
->x_current_class_ref
= NULL_TREE
;
6110 push_deferring_access_checks(dk_no_deferred
);
6111 arg
= tsubst_expr (arg
, DECL_TI_ARGS (fn
),
6112 tf_error
| tf_warning
, NULL_TREE
);
6113 pop_deferring_access_checks();
6115 /* Restore the "this" pointer. */
6118 cp_function_chain
->x_current_class_ptr
= saved_class_ptr
;
6119 cp_function_chain
->x_current_class_ref
= saved_class_ref
;
6122 pop_access_scope (fn
);
6124 /* Make sure the default argument is reasonable. */
6125 arg
= check_default_argument (type
, arg
);
6130 /* Substitute into all the default arguments for FN. */
6133 tsubst_default_arguments (tree fn
)
6138 tmpl_args
= DECL_TI_ARGS (fn
);
6140 /* If this function is not yet instantiated, we certainly don't need
6141 its default arguments. */
6142 if (uses_template_parms (tmpl_args
))
6145 for (arg
= TYPE_ARG_TYPES (TREE_TYPE (fn
));
6147 arg
= TREE_CHAIN (arg
))
6148 if (TREE_PURPOSE (arg
))
6149 TREE_PURPOSE (arg
) = tsubst_default_argument (fn
,
6151 TREE_PURPOSE (arg
));
6154 /* Substitute the ARGS into the T, which is a _DECL. Return the
6155 result of the substitution. Issue error and warning messages under
6156 control of COMPLAIN. */
6159 tsubst_decl (tree t
, tree args
, tsubst_flags_t complain
)
6161 location_t saved_loc
;
6165 /* Set the filename and linenumber to improve error-reporting. */
6166 saved_loc
= input_location
;
6167 input_location
= DECL_SOURCE_LOCATION (t
);
6169 switch (TREE_CODE (t
))
6173 /* We can get here when processing a member function template,
6174 member class template, and template template parameter of
6175 a template class. */
6176 tree decl
= DECL_TEMPLATE_RESULT (t
);
6181 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t
))
6183 /* Template template parameter is treated here. */
6184 tree new_type
= tsubst (TREE_TYPE (t
), args
, complain
, in_decl
);
6185 if (new_type
== error_mark_node
)
6186 return error_mark_node
;
6189 TREE_CHAIN (r
) = NULL_TREE
;
6190 TREE_TYPE (r
) = new_type
;
6191 DECL_TEMPLATE_RESULT (r
)
6192 = build_decl (TYPE_DECL
, DECL_NAME (decl
), new_type
);
6193 DECL_TEMPLATE_PARMS (r
)
6194 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t
), args
,
6196 TYPE_NAME (new_type
) = r
;
6200 /* We might already have an instance of this template.
6201 The ARGS are for the surrounding class type, so the
6202 full args contain the tsubst'd args for the context,
6203 plus the innermost args from the template decl. */
6204 tmpl_args
= DECL_CLASS_TEMPLATE_P (t
)
6205 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t
))
6206 : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t
));
6207 full_args
= tsubst_template_args (tmpl_args
, args
,
6210 /* tsubst_template_args doesn't copy the vector if
6211 nothing changed. But, *something* should have
6213 gcc_assert (full_args
!= tmpl_args
);
6215 spec
= retrieve_specialization (t
, full_args
,
6216 /*class_specializations_p=*/true);
6217 if (spec
!= NULL_TREE
)
6223 /* Make a new template decl. It will be similar to the
6224 original, but will record the current template arguments.
6225 We also create a new function declaration, which is just
6226 like the old one, but points to this new template, rather
6227 than the old one. */
6229 gcc_assert (DECL_LANG_SPECIFIC (r
) != 0);
6230 TREE_CHAIN (r
) = NULL_TREE
;
6233 = tsubst_aggr_type (DECL_CONTEXT (t
), args
,
6235 /*entering_scope=*/1);
6236 DECL_TEMPLATE_INFO (r
) = build_tree_list (t
, args
);
6238 if (TREE_CODE (decl
) == TYPE_DECL
)
6240 tree new_type
= tsubst (TREE_TYPE (t
), args
, complain
, in_decl
);
6241 if (new_type
== error_mark_node
)
6242 return error_mark_node
;
6244 TREE_TYPE (r
) = new_type
;
6245 CLASSTYPE_TI_TEMPLATE (new_type
) = r
;
6246 DECL_TEMPLATE_RESULT (r
) = TYPE_MAIN_DECL (new_type
);
6247 DECL_TI_ARGS (r
) = CLASSTYPE_TI_ARGS (new_type
);
6251 tree new_decl
= tsubst (decl
, args
, complain
, in_decl
);
6252 if (new_decl
== error_mark_node
)
6253 return error_mark_node
;
6255 DECL_TEMPLATE_RESULT (r
) = new_decl
;
6256 DECL_TI_TEMPLATE (new_decl
) = r
;
6257 TREE_TYPE (r
) = TREE_TYPE (new_decl
);
6258 DECL_TI_ARGS (r
) = DECL_TI_ARGS (new_decl
);
6261 SET_DECL_IMPLICIT_INSTANTIATION (r
);
6262 DECL_TEMPLATE_INSTANTIATIONS (r
) = NULL_TREE
;
6263 DECL_TEMPLATE_SPECIALIZATIONS (r
) = NULL_TREE
;
6265 /* The template parameters for this new template are all the
6266 template parameters for the old template, except the
6267 outermost level of parameters. */
6268 DECL_TEMPLATE_PARMS (r
)
6269 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t
), args
,
6272 if (PRIMARY_TEMPLATE_P (t
))
6273 DECL_PRIMARY_TEMPLATE (r
) = r
;
6275 if (TREE_CODE (decl
) != TYPE_DECL
)
6276 /* Record this non-type partial instantiation. */
6277 register_specialization (r
, t
,
6278 DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r
)));
6285 tree argvec
= NULL_TREE
;
6293 /* Nobody should be tsubst'ing into non-template functions. */
6294 gcc_assert (DECL_TEMPLATE_INFO (t
) != NULL_TREE
);
6296 if (TREE_CODE (DECL_TI_TEMPLATE (t
)) == TEMPLATE_DECL
)
6301 /* If T is not dependent, just return it. We have to
6302 increment PROCESSING_TEMPLATE_DECL because
6303 value_dependent_expression_p assumes that nothing is
6304 dependent when PROCESSING_TEMPLATE_DECL is zero. */
6305 ++processing_template_decl
;
6306 dependent_p
= value_dependent_expression_p (t
);
6307 --processing_template_decl
;
6311 /* Calculate the most general template of which R is a
6312 specialization, and the complete set of arguments used to
6314 gen_tmpl
= most_general_template (DECL_TI_TEMPLATE (t
));
6315 argvec
= tsubst_template_args (DECL_TI_ARGS
6316 (DECL_TEMPLATE_RESULT (gen_tmpl
)),
6317 args
, complain
, in_decl
);
6319 /* Check to see if we already have this specialization. */
6320 spec
= retrieve_specialization (gen_tmpl
, argvec
,
6321 /*class_specializations_p=*/false);
6329 /* We can see more levels of arguments than parameters if
6330 there was a specialization of a member template, like
6333 template <class T> struct S { template <class U> void f(); }
6334 template <> template <class U> void S<int>::f(U);
6336 Here, we'll be substituting into the specialization,
6337 because that's where we can find the code we actually
6338 want to generate, but we'll have enough arguments for
6339 the most general template.
6341 We also deal with the peculiar case:
6343 template <class T> struct S {
6344 template <class U> friend void f();
6346 template <class U> void f() {}
6348 template void f<double>();
6350 Here, the ARGS for the instantiation of will be {int,
6351 double}. But, we only need as many ARGS as there are
6352 levels of template parameters in CODE_PATTERN. We are
6353 careful not to get fooled into reducing the ARGS in
6356 template <class T> struct S { template <class U> void f(U); }
6357 template <class T> template <> void S<T>::f(int) {}
6359 which we can spot because the pattern will be a
6360 specialization in this case. */
6361 args_depth
= TMPL_ARGS_DEPTH (args
);
6363 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t
)));
6364 if (args_depth
> parms_depth
6365 && !DECL_TEMPLATE_SPECIALIZATION (t
))
6366 args
= get_innermost_template_args (args
, parms_depth
);
6370 /* This special case arises when we have something like this:
6372 template <class T> struct S {
6373 friend void f<int>(int, double);
6376 Here, the DECL_TI_TEMPLATE for the friend declaration
6377 will be an IDENTIFIER_NODE. We are being called from
6378 tsubst_friend_function, and we want only to create a
6379 new decl (R) with appropriate types so that we can call
6380 determine_specialization. */
6381 gen_tmpl
= NULL_TREE
;
6384 if (DECL_CLASS_SCOPE_P (t
))
6386 if (DECL_NAME (t
) == constructor_name (DECL_CONTEXT (t
)))
6390 ctx
= tsubst_aggr_type (DECL_CONTEXT (t
), args
,
6391 complain
, t
, /*entering_scope=*/1);
6396 ctx
= DECL_CONTEXT (t
);
6398 type
= tsubst (TREE_TYPE (t
), args
, complain
, in_decl
);
6399 if (type
== error_mark_node
)
6400 return error_mark_node
;
6402 /* We do NOT check for matching decls pushed separately at this
6403 point, as they may not represent instantiations of this
6404 template, and in any case are considered separate under the
6407 DECL_USE_TEMPLATE (r
) = 0;
6408 TREE_TYPE (r
) = type
;
6409 /* Clear out the mangled name and RTL for the instantiation. */
6410 SET_DECL_ASSEMBLER_NAME (r
, NULL_TREE
);
6411 SET_DECL_RTL (r
, NULL_RTX
);
6412 DECL_INITIAL (r
) = NULL_TREE
;
6413 DECL_CONTEXT (r
) = ctx
;
6415 if (member
&& DECL_CONV_FN_P (r
))
6416 /* Type-conversion operator. Reconstruct the name, in
6417 case it's the name of one of the template's parameters. */
6418 DECL_NAME (r
) = mangle_conv_op_name_for_type (TREE_TYPE (type
));
6420 DECL_ARGUMENTS (r
) = tsubst (DECL_ARGUMENTS (t
), args
,
6422 DECL_RESULT (r
) = NULL_TREE
;
6424 TREE_STATIC (r
) = 0;
6425 TREE_PUBLIC (r
) = TREE_PUBLIC (t
);
6426 DECL_EXTERNAL (r
) = 1;
6427 /* If this is an instantiation of a function with internal
6428 linkage, we already know what object file linkage will be
6429 assigned to the instantiation. */
6430 DECL_INTERFACE_KNOWN (r
) = !TREE_PUBLIC (r
);
6431 DECL_DEFER_OUTPUT (r
) = 0;
6432 TREE_CHAIN (r
) = NULL_TREE
;
6433 DECL_PENDING_INLINE_INFO (r
) = 0;
6434 DECL_PENDING_INLINE_P (r
) = 0;
6435 DECL_SAVED_TREE (r
) = NULL_TREE
;
6437 if (DECL_CLONED_FUNCTION (r
))
6439 DECL_CLONED_FUNCTION (r
) = tsubst (DECL_CLONED_FUNCTION (t
),
6441 TREE_CHAIN (r
) = TREE_CHAIN (DECL_CLONED_FUNCTION (r
));
6442 TREE_CHAIN (DECL_CLONED_FUNCTION (r
)) = r
;
6445 /* Set up the DECL_TEMPLATE_INFO for R. There's no need to do
6446 this in the special friend case mentioned above where
6447 GEN_TMPL is NULL. */
6450 DECL_TEMPLATE_INFO (r
)
6451 = tree_cons (gen_tmpl
, argvec
, NULL_TREE
);
6452 SET_DECL_IMPLICIT_INSTANTIATION (r
);
6453 register_specialization (r
, gen_tmpl
, argvec
);
6455 /* We're not supposed to instantiate default arguments
6456 until they are called, for a template. But, for a
6459 template <class T> void f ()
6460 { extern void g(int i = T()); }
6462 we should do the substitution when the template is
6463 instantiated. We handle the member function case in
6464 instantiate_class_template since the default arguments
6465 might refer to other members of the class. */
6467 && !PRIMARY_TEMPLATE_P (gen_tmpl
)
6468 && !uses_template_parms (argvec
))
6469 tsubst_default_arguments (r
);
6472 /* Copy the list of befriending classes. */
6473 for (friends
= &DECL_BEFRIENDING_CLASSES (r
);
6475 friends
= &TREE_CHAIN (*friends
))
6477 *friends
= copy_node (*friends
);
6478 TREE_VALUE (*friends
) = tsubst (TREE_VALUE (*friends
),
6483 if (DECL_CONSTRUCTOR_P (r
) || DECL_DESTRUCTOR_P (r
))
6485 maybe_retrofit_in_chrg (r
);
6486 if (DECL_CONSTRUCTOR_P (r
))
6487 grok_ctor_properties (ctx
, r
);
6488 /* If this is an instantiation of a member template, clone it.
6489 If it isn't, that'll be handled by
6490 clone_constructors_and_destructors. */
6491 if (PRIMARY_TEMPLATE_P (gen_tmpl
))
6492 clone_function_decl (r
, /*update_method_vec_p=*/0);
6494 else if (IDENTIFIER_OPNAME_P (DECL_NAME (r
)))
6495 grok_op_properties (r
, (complain
& tf_error
) != 0);
6497 if (DECL_FRIEND_P (t
) && DECL_FRIEND_CONTEXT (t
))
6498 SET_DECL_FRIEND_CONTEXT (r
,
6499 tsubst (DECL_FRIEND_CONTEXT (t
),
6500 args
, complain
, in_decl
));
6509 if (DECL_TEMPLATE_PARM_P (t
))
6510 SET_DECL_TEMPLATE_PARM_P (r
);
6512 type
= tsubst (TREE_TYPE (t
), args
, complain
, in_decl
);
6513 type
= type_decays_to (type
);
6514 TREE_TYPE (r
) = type
;
6515 cp_apply_type_quals_to_decl (cp_type_quals (type
), r
);
6517 if (DECL_INITIAL (r
))
6519 if (TREE_CODE (DECL_INITIAL (r
)) != TEMPLATE_PARM_INDEX
)
6520 DECL_INITIAL (r
) = TREE_TYPE (r
);
6522 DECL_INITIAL (r
) = tsubst (DECL_INITIAL (r
), args
,
6526 DECL_CONTEXT (r
) = NULL_TREE
;
6528 if (!DECL_TEMPLATE_PARM_P (r
))
6529 DECL_ARG_TYPE (r
) = type_passed_as (type
);
6531 TREE_CHAIN (r
) = tsubst (TREE_CHAIN (t
), args
,
6532 complain
, TREE_CHAIN (t
));
6541 type
= tsubst (TREE_TYPE (t
), args
, complain
, in_decl
);
6542 if (type
== error_mark_node
)
6543 return error_mark_node
;
6544 TREE_TYPE (r
) = type
;
6545 cp_apply_type_quals_to_decl (cp_type_quals (type
), r
);
6547 /* We don't have to set DECL_CONTEXT here; it is set by
6548 finish_member_declaration. */
6549 DECL_INITIAL (r
) = tsubst_expr (DECL_INITIAL (t
), args
,
6551 TREE_CHAIN (r
) = NULL_TREE
;
6552 if (VOID_TYPE_P (type
))
6553 error ("instantiation of %q+D as type %qT", r
, type
);
6558 /* We reach here only for member using decls. */
6559 if (DECL_DEPENDENT_P (t
))
6561 r
= do_class_using_decl
6562 (tsubst_copy (USING_DECL_SCOPE (t
), args
, complain
, in_decl
),
6563 tsubst_copy (DECL_NAME (t
), args
, complain
, in_decl
));
6565 r
= error_mark_node
;
6570 TREE_CHAIN (r
) = NULL_TREE
;
6577 tree argvec
= NULL_TREE
;
6578 tree gen_tmpl
= NULL_TREE
;
6580 tree tmpl
= NULL_TREE
;
6582 tree type
= NULL_TREE
;
6585 if (TREE_CODE (t
) == TYPE_DECL
)
6587 type
= tsubst (TREE_TYPE (t
), args
, complain
, in_decl
);
6588 if (TREE_CODE (type
) == TEMPLATE_TEMPLATE_PARM
6589 || t
== TYPE_MAIN_DECL (TREE_TYPE (t
)))
6591 /* If this is the canonical decl, we don't have to
6592 mess with instantiations, and often we can't (for
6593 typename, template type parms and such). Note that
6594 TYPE_NAME is not correct for the above test if
6595 we've copied the type for a typedef. */
6596 r
= TYPE_NAME (type
);
6601 /* Assume this is a non-local variable. */
6604 if (TYPE_P (CP_DECL_CONTEXT (t
)))
6605 ctx
= tsubst_aggr_type (DECL_CONTEXT (t
), args
,
6607 in_decl
, /*entering_scope=*/1);
6608 else if (DECL_NAMESPACE_SCOPE_P (t
))
6609 ctx
= DECL_CONTEXT (t
);
6612 /* Subsequent calls to pushdecl will fill this in. */
6617 /* Check to see if we already have this specialization. */
6620 tmpl
= DECL_TI_TEMPLATE (t
);
6621 gen_tmpl
= most_general_template (tmpl
);
6622 argvec
= tsubst (DECL_TI_ARGS (t
), args
, complain
, in_decl
);
6623 spec
= retrieve_specialization (gen_tmpl
, argvec
,
6624 /*class_specializations_p=*/false);
6627 spec
= retrieve_local_specialization (t
);
6636 if (TREE_CODE (r
) == VAR_DECL
)
6638 type
= tsubst (TREE_TYPE (t
), args
, complain
, in_decl
);
6639 if (type
== error_mark_node
)
6640 return error_mark_node
;
6641 type
= complete_type (type
);
6642 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r
)
6643 = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t
);
6644 type
= check_var_type (DECL_NAME (r
), type
);
6646 else if (DECL_SELF_REFERENCE_P (t
))
6647 SET_DECL_SELF_REFERENCE_P (r
);
6648 TREE_TYPE (r
) = type
;
6649 cp_apply_type_quals_to_decl (cp_type_quals (type
), r
);
6650 DECL_CONTEXT (r
) = ctx
;
6651 /* Clear out the mangled name and RTL for the instantiation. */
6652 SET_DECL_ASSEMBLER_NAME (r
, NULL_TREE
);
6653 if (CODE_CONTAINS_STRUCT (TREE_CODE (t
), TS_DECL_WRTL
))
6654 SET_DECL_RTL (r
, NULL_RTX
);
6656 /* Don't try to expand the initializer until someone tries to use
6657 this variable; otherwise we run into circular dependencies. */
6658 DECL_INITIAL (r
) = NULL_TREE
;
6659 if (CODE_CONTAINS_STRUCT (TREE_CODE (t
), TS_DECL_WRTL
))
6660 SET_DECL_RTL (r
, NULL_RTX
);
6661 DECL_SIZE (r
) = DECL_SIZE_UNIT (r
) = 0;
6663 /* Even if the original location is out of scope, the newly
6664 substituted one is not. */
6665 if (TREE_CODE (r
) == VAR_DECL
)
6667 DECL_DEAD_FOR_LOCAL (r
) = 0;
6668 DECL_INITIALIZED_P (r
) = 0;
6673 /* A static data member declaration is always marked
6674 external when it is declared in-class, even if an
6675 initializer is present. We mimic the non-template
6677 DECL_EXTERNAL (r
) = 1;
6679 register_specialization (r
, gen_tmpl
, argvec
);
6680 DECL_TEMPLATE_INFO (r
) = tree_cons (tmpl
, argvec
, NULL_TREE
);
6681 SET_DECL_IMPLICIT_INSTANTIATION (r
);
6684 register_local_specialization (r
, t
);
6686 TREE_CHAIN (r
) = NULL_TREE
;
6695 /* Restore the file and line information. */
6696 input_location
= saved_loc
;
6701 /* Substitute into the ARG_TYPES of a function type. */
6704 tsubst_arg_types (tree arg_types
,
6706 tsubst_flags_t complain
,
6709 tree remaining_arg_types
;
6712 tree result
= NULL_TREE
;
6714 if (!arg_types
|| arg_types
== void_list_node
)
6717 remaining_arg_types
= tsubst_arg_types (TREE_CHAIN (arg_types
),
6718 args
, complain
, in_decl
);
6719 if (remaining_arg_types
== error_mark_node
)
6720 return error_mark_node
;
6722 type
= tsubst (TREE_VALUE (arg_types
), args
, complain
, in_decl
);
6723 if (type
== error_mark_node
)
6724 return error_mark_node
;
6725 if (VOID_TYPE_P (type
))
6727 if (complain
& tf_error
)
6729 error ("invalid parameter type %qT", type
);
6731 error ("in declaration %q+D", in_decl
);
6733 return error_mark_node
;
6736 /* Do array-to-pointer, function-to-pointer conversion, and ignore
6737 top-level qualifiers as required. */
6738 type
= TYPE_MAIN_VARIANT (type_decays_to (type
));
6740 /* We do not substitute into default arguments here. The standard
6741 mandates that they be instantiated only when needed, which is
6742 done in build_over_call. */
6743 default_arg
= TREE_PURPOSE (arg_types
);
6745 if (default_arg
&& TREE_CODE (default_arg
) == DEFAULT_ARG
)
6747 /* We've instantiated a template before its default arguments
6748 have been parsed. This can happen for a nested template
6749 class, and is not an error unless we require the default
6750 argument in a call of this function. */
6751 result
= tree_cons (default_arg
, type
, remaining_arg_types
);
6752 VEC_safe_push (tree
, gc
, DEFARG_INSTANTIATIONS (default_arg
), result
);
6755 result
= hash_tree_cons (default_arg
, type
, remaining_arg_types
);
6760 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
6761 *not* handle the exception-specification for FNTYPE, because the
6762 initial substitution of explicitly provided template parameters
6763 during argument deduction forbids substitution into the
6764 exception-specification:
6768 All references in the function type of the function template to the
6769 corresponding template parameters are replaced by the specified tem-
6770 plate argument values. If a substitution in a template parameter or
6771 in the function type of the function template results in an invalid
6772 type, type deduction fails. [Note: The equivalent substitution in
6773 exception specifications is done only when the function is instanti-
6774 ated, at which point a program is ill-formed if the substitution
6775 results in an invalid type.] */
6778 tsubst_function_type (tree t
,
6780 tsubst_flags_t complain
,
6787 /* The TYPE_CONTEXT is not used for function/method types. */
6788 gcc_assert (TYPE_CONTEXT (t
) == NULL_TREE
);
6790 /* Substitute the return type. */
6791 return_type
= tsubst (TREE_TYPE (t
), args
, complain
, in_decl
);
6792 if (return_type
== error_mark_node
)
6793 return error_mark_node
;
6794 /* The standard does not presently indicate that creation of a
6795 function type with an invalid return type is a deduction failure.
6796 However, that is clearly analogous to creating an array of "void"
6797 or a reference to a reference. This is core issue #486. */
6798 if (TREE_CODE (return_type
) == ARRAY_TYPE
6799 || TREE_CODE (return_type
) == FUNCTION_TYPE
)
6801 if (complain
& tf_error
)
6803 if (TREE_CODE (return_type
) == ARRAY_TYPE
)
6804 error ("function returning an array");
6806 error ("function returning a function");
6808 return error_mark_node
;
6811 /* Substitute the argument types. */
6812 arg_types
= tsubst_arg_types (TYPE_ARG_TYPES (t
), args
,
6814 if (arg_types
== error_mark_node
)
6815 return error_mark_node
;
6817 /* Construct a new type node and return it. */
6818 if (TREE_CODE (t
) == FUNCTION_TYPE
)
6819 fntype
= build_function_type (return_type
, arg_types
);
6822 tree r
= TREE_TYPE (TREE_VALUE (arg_types
));
6823 if (! IS_AGGR_TYPE (r
))
6827 Type deduction may fail for any of the following
6830 -- Attempting to create "pointer to member of T" when T
6831 is not a class type. */
6832 if (complain
& tf_error
)
6833 error ("creating pointer to member function of non-class type %qT",
6835 return error_mark_node
;
6838 fntype
= build_method_type_directly (r
, return_type
,
6839 TREE_CHAIN (arg_types
));
6841 fntype
= cp_build_qualified_type_real (fntype
, TYPE_QUALS (t
), complain
);
6842 fntype
= cp_build_type_attribute_variant (fntype
, TYPE_ATTRIBUTES (t
));
6847 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE. Substitute the template
6848 ARGS into that specification, and return the substituted
6849 specification. If there is no specification, return NULL_TREE. */
6852 tsubst_exception_specification (tree fntype
,
6854 tsubst_flags_t complain
,
6860 specs
= TYPE_RAISES_EXCEPTIONS (fntype
);
6861 new_specs
= NULL_TREE
;
6864 if (! TREE_VALUE (specs
))
6870 spec
= tsubst (TREE_VALUE (specs
), args
, complain
, in_decl
);
6871 if (spec
== error_mark_node
)
6873 new_specs
= add_exception_specifier (new_specs
, spec
, complain
);
6874 specs
= TREE_CHAIN (specs
);
6880 /* Substitute into the PARMS of a call-declarator. */
6883 tsubst_call_declarator_parms (tree parms
,
6885 tsubst_flags_t complain
,
6892 if (!parms
|| parms
== void_list_node
)
6895 new_parms
= tsubst_call_declarator_parms (TREE_CHAIN (parms
),
6896 args
, complain
, in_decl
);
6898 /* Figure out the type of this parameter. */
6899 type
= tsubst (TREE_VALUE (parms
), args
, complain
, in_decl
);
6901 /* Figure out the default argument as well. Note that we use
6902 tsubst_expr since the default argument is really an expression. */
6903 defarg
= tsubst_expr (TREE_PURPOSE (parms
), args
, complain
, in_decl
);
6905 /* Chain this parameter on to the front of those we have already
6906 processed. We don't use hash_tree_cons because that function
6907 doesn't check TREE_PARMLIST. */
6908 new_parms
= tree_cons (defarg
, type
, new_parms
);
6913 /* Take the tree structure T and replace template parameters used
6914 therein with the argument vector ARGS. IN_DECL is an associated
6915 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
6916 Issue error and warning messages under control of COMPLAIN. Note
6917 that we must be relatively non-tolerant of extensions here, in
6918 order to preserve conformance; if we allow substitutions that
6919 should not be allowed, we may allow argument deductions that should
6920 not succeed, and therefore report ambiguous overload situations
6921 where there are none. In theory, we could allow the substitution,
6922 but indicate that it should have failed, and allow our caller to
6923 make sure that the right thing happens, but we don't try to do this
6926 This function is used for dealing with types, decls and the like;
6927 for expressions, use tsubst_expr or tsubst_copy. */
6930 tsubst (tree t
, tree args
, tsubst_flags_t complain
, tree in_decl
)
6934 if (t
== NULL_TREE
|| t
== error_mark_node
6935 || t
== integer_type_node
6936 || t
== void_type_node
6937 || t
== char_type_node
6938 || t
== unknown_type_node
6939 || TREE_CODE (t
) == NAMESPACE_DECL
)
6943 return tsubst_decl (t
, args
, complain
);
6945 if (TREE_CODE (t
) == IDENTIFIER_NODE
)
6946 type
= IDENTIFIER_TYPE_VALUE (t
);
6948 type
= TREE_TYPE (t
);
6950 gcc_assert (type
!= unknown_type_node
);
6953 && TREE_CODE (t
) != TYPENAME_TYPE
6954 && TREE_CODE (t
) != IDENTIFIER_NODE
6955 && TREE_CODE (t
) != FUNCTION_TYPE
6956 && TREE_CODE (t
) != METHOD_TYPE
)
6957 type
= tsubst (type
, args
, complain
, in_decl
);
6958 if (type
== error_mark_node
)
6959 return error_mark_node
;
6961 switch (TREE_CODE (t
))
6966 return tsubst_aggr_type (t
, args
, complain
, in_decl
,
6967 /*entering_scope=*/0);
6970 case IDENTIFIER_NODE
:
6982 if (t
== integer_type_node
)
6985 if (TREE_CODE (TYPE_MIN_VALUE (t
)) == INTEGER_CST
6986 && TREE_CODE (TYPE_MAX_VALUE (t
)) == INTEGER_CST
)
6990 tree max
, omax
= TREE_OPERAND (TYPE_MAX_VALUE (t
), 0);
6992 /* The array dimension behaves like a non-type template arg,
6993 in that we want to fold it as much as possible. */
6994 max
= tsubst_template_arg (omax
, args
, complain
, in_decl
);
6995 max
= fold_decl_constant_value (max
);
6997 if (integer_zerop (omax
))
6999 /* Still allow an explicit array of size zero. */
7001 pedwarn ("creating array with size zero");
7003 else if (integer_zerop (max
)
7004 || (TREE_CODE (max
) == INTEGER_CST
7005 && INT_CST_LT (max
, integer_zero_node
)))
7009 Type deduction may fail for any of the following
7012 Attempting to create an array with a size that is
7013 zero or negative. */
7014 if (complain
& tf_error
)
7015 error ("creating array with size zero (%qE)", max
);
7017 return error_mark_node
;
7020 return compute_array_index_type (NULL_TREE
, max
);
7023 case TEMPLATE_TYPE_PARM
:
7024 case TEMPLATE_TEMPLATE_PARM
:
7025 case BOUND_TEMPLATE_TEMPLATE_PARM
:
7026 case TEMPLATE_PARM_INDEX
:
7031 tree arg
= NULL_TREE
;
7035 gcc_assert (TREE_VEC_LENGTH (args
) > 0);
7036 if (TREE_CODE (t
) == TEMPLATE_TYPE_PARM
7037 || TREE_CODE (t
) == TEMPLATE_TEMPLATE_PARM
7038 || TREE_CODE (t
) == BOUND_TEMPLATE_TEMPLATE_PARM
)
7040 idx
= TEMPLATE_TYPE_IDX (t
);
7041 level
= TEMPLATE_TYPE_LEVEL (t
);
7045 idx
= TEMPLATE_PARM_IDX (t
);
7046 level
= TEMPLATE_PARM_LEVEL (t
);
7049 levels
= TMPL_ARGS_DEPTH (args
);
7050 if (level
<= levels
)
7051 arg
= TMPL_ARG (args
, level
, idx
);
7053 if (arg
== error_mark_node
)
7054 return error_mark_node
;
7055 else if (arg
!= NULL_TREE
)
7057 if (TREE_CODE (t
) == TEMPLATE_TYPE_PARM
)
7059 gcc_assert (TYPE_P (arg
));
7060 return cp_build_qualified_type_real
7061 (arg
, cp_type_quals (arg
) | cp_type_quals (t
),
7062 complain
| tf_ignore_bad_quals
);
7064 else if (TREE_CODE (t
) == BOUND_TEMPLATE_TEMPLATE_PARM
)
7066 /* We are processing a type constructed from a
7067 template template parameter. */
7068 tree argvec
= tsubst (TYPE_TI_ARGS (t
),
7069 args
, complain
, in_decl
);
7070 if (argvec
== error_mark_node
)
7071 return error_mark_node
;
7073 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
7074 are resolving nested-types in the signature of a
7075 member function templates. Otherwise ARG is a
7076 TEMPLATE_DECL and is the real template to be
7078 if (TREE_CODE (arg
) == TEMPLATE_TEMPLATE_PARM
)
7079 arg
= TYPE_NAME (arg
);
7081 r
= lookup_template_class (arg
,
7084 /*entering_scope=*/0,
7086 return cp_build_qualified_type_real
7087 (r
, TYPE_QUALS (t
), complain
);
7090 /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX. */
7095 /* This can happen during the attempted tsubst'ing in
7096 unify. This means that we don't yet have any information
7097 about the template parameter in question. */
7100 /* If we get here, we must have been looking at a parm for a
7101 more deeply nested template. Make a new version of this
7102 template parameter, but with a lower level. */
7103 switch (TREE_CODE (t
))
7105 case TEMPLATE_TYPE_PARM
:
7106 case TEMPLATE_TEMPLATE_PARM
:
7107 case BOUND_TEMPLATE_TEMPLATE_PARM
:
7108 if (cp_type_quals (t
))
7110 r
= tsubst (TYPE_MAIN_VARIANT (t
), args
, complain
, in_decl
);
7111 r
= cp_build_qualified_type_real
7112 (r
, cp_type_quals (t
),
7113 complain
| (TREE_CODE (t
) == TEMPLATE_TYPE_PARM
7114 ? tf_ignore_bad_quals
: 0));
7119 TEMPLATE_TYPE_PARM_INDEX (r
)
7120 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t
),
7122 TYPE_STUB_DECL (r
) = TYPE_NAME (r
) = TEMPLATE_TYPE_DECL (r
);
7123 TYPE_MAIN_VARIANT (r
) = r
;
7124 TYPE_POINTER_TO (r
) = NULL_TREE
;
7125 TYPE_REFERENCE_TO (r
) = NULL_TREE
;
7127 if (TREE_CODE (t
) == BOUND_TEMPLATE_TEMPLATE_PARM
)
7129 tree argvec
= tsubst (TYPE_TI_ARGS (t
), args
,
7131 if (argvec
== error_mark_node
)
7132 return error_mark_node
;
7134 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r
)
7135 = tree_cons (TYPE_TI_TEMPLATE (t
), argvec
, NULL_TREE
);
7140 case TEMPLATE_PARM_INDEX
:
7141 r
= reduce_template_parm_level (t
, type
, levels
);
7153 tree purpose
, value
, chain
;
7155 if (t
== void_list_node
)
7158 purpose
= TREE_PURPOSE (t
);
7161 purpose
= tsubst (purpose
, args
, complain
, in_decl
);
7162 if (purpose
== error_mark_node
)
7163 return error_mark_node
;
7165 value
= TREE_VALUE (t
);
7168 value
= tsubst (value
, args
, complain
, in_decl
);
7169 if (value
== error_mark_node
)
7170 return error_mark_node
;
7172 chain
= TREE_CHAIN (t
);
7173 if (chain
&& chain
!= void_type_node
)
7175 chain
= tsubst (chain
, args
, complain
, in_decl
);
7176 if (chain
== error_mark_node
)
7177 return error_mark_node
;
7179 if (purpose
== TREE_PURPOSE (t
)
7180 && value
== TREE_VALUE (t
)
7181 && chain
== TREE_CHAIN (t
))
7183 return hash_tree_cons (purpose
, value
, chain
);
7187 /* We should never be tsubsting a binfo. */
7191 /* A vector of template arguments. */
7193 return tsubst_template_args (t
, args
, complain
, in_decl
);
7196 case REFERENCE_TYPE
:
7198 enum tree_code code
;
7200 if (type
== TREE_TYPE (t
) && TREE_CODE (type
) != METHOD_TYPE
)
7203 code
= TREE_CODE (t
);
7208 Type deduction may fail for any of the following
7211 -- Attempting to create a pointer to reference type.
7212 -- Attempting to create a reference to a reference type or
7213 a reference to void. */
7214 if (TREE_CODE (type
) == REFERENCE_TYPE
7215 || (code
== REFERENCE_TYPE
&& TREE_CODE (type
) == VOID_TYPE
))
7217 static location_t last_loc
;
7219 /* We keep track of the last time we issued this error
7220 message to avoid spewing a ton of messages during a
7221 single bad template instantiation. */
7222 if (complain
& tf_error
7223 #ifdef USE_MAPPED_LOCATION
7224 && last_loc
!= input_location
7226 && (last_loc
.line
!= input_line
7227 || last_loc
.file
!= input_filename
)
7231 if (TREE_CODE (type
) == VOID_TYPE
)
7232 error ("forming reference to void");
7234 error ("forming %s to reference type %qT",
7235 (code
== POINTER_TYPE
) ? "pointer" : "reference",
7237 last_loc
= input_location
;
7240 return error_mark_node
;
7242 else if (code
== POINTER_TYPE
)
7244 r
= build_pointer_type (type
);
7245 if (TREE_CODE (type
) == METHOD_TYPE
)
7246 r
= build_ptrmemfunc_type (r
);
7249 r
= build_reference_type (type
);
7250 r
= cp_build_qualified_type_real (r
, TYPE_QUALS (t
), complain
);
7252 if (r
!= error_mark_node
)
7253 /* Will this ever be needed for TYPE_..._TO values? */
7260 r
= tsubst (TYPE_OFFSET_BASETYPE (t
), args
, complain
, in_decl
);
7261 if (r
== error_mark_node
|| !IS_AGGR_TYPE (r
))
7265 Type deduction may fail for any of the following
7268 -- Attempting to create "pointer to member of T" when T
7269 is not a class type. */
7270 if (complain
& tf_error
)
7271 error ("creating pointer to member of non-class type %qT", r
);
7272 return error_mark_node
;
7274 if (TREE_CODE (type
) == REFERENCE_TYPE
)
7276 if (complain
& tf_error
)
7277 error ("creating pointer to member reference type %qT", type
);
7278 return error_mark_node
;
7280 if (TREE_CODE (type
) == VOID_TYPE
)
7282 if (complain
& tf_error
)
7283 error ("creating pointer to member of type void");
7284 return error_mark_node
;
7286 gcc_assert (TREE_CODE (type
) != METHOD_TYPE
);
7287 if (TREE_CODE (type
) == FUNCTION_TYPE
)
7289 /* The type of the implicit object parameter gets its
7290 cv-qualifiers from the FUNCTION_TYPE. */
7292 tree this_type
= cp_build_qualified_type (TYPE_MAIN_VARIANT (r
),
7293 cp_type_quals (type
));
7295 method_type
= build_method_type_directly (this_type
,
7297 TYPE_ARG_TYPES (type
));
7298 memptr
= build_ptrmemfunc_type (build_pointer_type (method_type
));
7299 return cp_build_qualified_type_real (memptr
, cp_type_quals (t
),
7303 return cp_build_qualified_type_real (build_ptrmem_type (r
, type
),
7312 fntype
= tsubst_function_type (t
, args
, complain
, in_decl
);
7313 if (fntype
== error_mark_node
)
7314 return error_mark_node
;
7316 /* Substitute the exception specification. */
7317 specs
= tsubst_exception_specification (t
, args
, complain
,
7320 fntype
= build_exception_variant (fntype
, specs
);
7325 tree domain
= tsubst (TYPE_DOMAIN (t
), args
, complain
, in_decl
);
7326 if (domain
== error_mark_node
)
7327 return error_mark_node
;
7329 /* As an optimization, we avoid regenerating the array type if
7330 it will obviously be the same as T. */
7331 if (type
== TREE_TYPE (t
) && domain
== TYPE_DOMAIN (t
))
7334 /* These checks should match the ones in grokdeclarator.
7338 The deduction may fail for any of the following reasons:
7340 -- Attempting to create an array with an element type that
7341 is void, a function type, or a reference type, or [DR337]
7342 an abstract class type. */
7343 if (TREE_CODE (type
) == VOID_TYPE
7344 || TREE_CODE (type
) == FUNCTION_TYPE
7345 || TREE_CODE (type
) == REFERENCE_TYPE
)
7347 if (complain
& tf_error
)
7348 error ("creating array of %qT", type
);
7349 return error_mark_node
;
7351 if (CLASS_TYPE_P (type
) && CLASSTYPE_PURE_VIRTUALS (type
))
7353 if (complain
& tf_error
)
7354 error ("creating array of %qT, which is an abstract class type",
7356 return error_mark_node
;
7359 r
= build_cplus_array_type (type
, domain
);
7366 tree e1
= tsubst (TREE_OPERAND (t
, 0), args
, complain
, in_decl
);
7367 tree e2
= tsubst (TREE_OPERAND (t
, 1), args
, complain
, in_decl
);
7369 if (e1
== error_mark_node
|| e2
== error_mark_node
)
7370 return error_mark_node
;
7372 return fold_build2 (TREE_CODE (t
), TREE_TYPE (t
), e1
, e2
);
7378 tree e
= tsubst (TREE_OPERAND (t
, 0), args
, complain
, in_decl
);
7379 if (e
== error_mark_node
)
7380 return error_mark_node
;
7382 return fold_build1 (TREE_CODE (t
), TREE_TYPE (t
), e
);
7387 tree ctx
= tsubst_aggr_type (TYPE_CONTEXT (t
), args
, complain
,
7388 in_decl
, /*entering_scope=*/1);
7389 tree f
= tsubst_copy (TYPENAME_TYPE_FULLNAME (t
), args
,
7392 if (ctx
== error_mark_node
|| f
== error_mark_node
)
7393 return error_mark_node
;
7395 if (!IS_AGGR_TYPE (ctx
))
7397 if (complain
& tf_error
)
7398 error ("%qT is not a class, struct, or union type", ctx
);
7399 return error_mark_node
;
7401 else if (!uses_template_parms (ctx
) && !TYPE_BEING_DEFINED (ctx
))
7403 /* Normally, make_typename_type does not require that the CTX
7404 have complete type in order to allow things like:
7406 template <class T> struct S { typename S<T>::X Y; };
7408 But, such constructs have already been resolved by this
7409 point, so here CTX really should have complete type, unless
7410 it's a partial instantiation. */
7411 ctx
= complete_type (ctx
);
7412 if (!COMPLETE_TYPE_P (ctx
))
7414 if (complain
& tf_error
)
7415 cxx_incomplete_type_error (NULL_TREE
, ctx
);
7416 return error_mark_node
;
7420 f
= make_typename_type (ctx
, f
, typename_type
,
7421 (complain
& tf_error
) | tf_keep_type_decl
);
7422 if (f
== error_mark_node
)
7424 if (TREE_CODE (f
) == TYPE_DECL
)
7426 complain
|= tf_ignore_bad_quals
;
7430 if (TREE_CODE (f
) != TYPENAME_TYPE
)
7432 if (TYPENAME_IS_ENUM_P (t
) && TREE_CODE (f
) != ENUMERAL_TYPE
)
7433 error ("%qT resolves to %qT, which is not an enumeration type",
7435 else if (TYPENAME_IS_CLASS_P (t
) && !CLASS_TYPE_P (f
))
7436 error ("%qT resolves to %qT, which is is not a class type",
7440 return cp_build_qualified_type_real
7441 (f
, cp_type_quals (f
) | cp_type_quals (t
), complain
);
7444 case UNBOUND_CLASS_TEMPLATE
:
7446 tree ctx
= tsubst_aggr_type (TYPE_CONTEXT (t
), args
, complain
,
7447 in_decl
, /*entering_scope=*/1);
7448 tree name
= TYPE_IDENTIFIER (t
);
7449 tree parm_list
= DECL_TEMPLATE_PARMS (TYPE_NAME (t
));
7451 if (ctx
== error_mark_node
|| name
== error_mark_node
)
7452 return error_mark_node
;
7455 parm_list
= tsubst_template_parms (parm_list
, args
, complain
);
7456 return make_unbound_class_template (ctx
, name
, parm_list
, complain
);
7466 tree e1
= tsubst (TREE_OPERAND (t
, 0), args
, complain
, in_decl
);
7467 tree e2
= tsubst_expr (TREE_OPERAND (t
, 1), args
, complain
, in_decl
);
7468 if (e1
== error_mark_node
|| e2
== error_mark_node
)
7469 return error_mark_node
;
7471 return build_nt (ARRAY_REF
, e1
, e2
, NULL_TREE
, NULL_TREE
);
7476 tree e1
= tsubst (TREE_OPERAND (t
, 0), args
, complain
, in_decl
);
7477 tree e2
= tsubst (TREE_OPERAND (t
, 1), args
, complain
, in_decl
);
7478 if (e1
== error_mark_node
|| e2
== error_mark_node
)
7479 return error_mark_node
;
7481 return build_nt (TREE_CODE (t
), e1
, e2
);
7488 type
= finish_typeof (tsubst_expr (TYPEOF_TYPE_EXPR (t
), args
,
7489 complain
, in_decl
));
7490 return cp_build_qualified_type_real (type
,
7492 | cp_type_quals (type
),
7497 sorry ("use of %qs in template",
7498 tree_code_name
[(int) TREE_CODE (t
)]);
7499 return error_mark_node
;
7503 /* Like tsubst_expr for a BASELINK. OBJECT_TYPE, if non-NULL, is the
7504 type of the expression on the left-hand side of the "." or "->"
7508 tsubst_baselink (tree baselink
, tree object_type
,
7509 tree args
, tsubst_flags_t complain
, tree in_decl
)
7512 tree qualifying_scope
;
7514 tree template_args
= 0;
7515 bool template_id_p
= false;
7517 /* A baselink indicates a function from a base class. The
7518 BASELINK_ACCESS_BINFO and BASELINK_BINFO are going to have
7519 non-dependent types; otherwise, the lookup could not have
7520 succeeded. However, they may indicate bases of the template
7521 class, rather than the instantiated class.
7523 In addition, lookups that were not ambiguous before may be
7524 ambiguous now. Therefore, we perform the lookup again. */
7525 qualifying_scope
= BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink
));
7526 fns
= BASELINK_FUNCTIONS (baselink
);
7527 if (TREE_CODE (fns
) == TEMPLATE_ID_EXPR
)
7529 template_id_p
= true;
7530 template_args
= TREE_OPERAND (fns
, 1);
7531 fns
= TREE_OPERAND (fns
, 0);
7533 template_args
= tsubst_template_args (template_args
, args
,
7536 name
= DECL_NAME (get_first_fn (fns
));
7537 baselink
= lookup_fnfields (qualifying_scope
, name
, /*protect=*/1);
7539 /* If lookup found a single function, mark it as used at this
7540 point. (If it lookup found multiple functions the one selected
7541 later by overload resolution will be marked as used at that
7543 if (BASELINK_P (baselink
))
7544 fns
= BASELINK_FUNCTIONS (baselink
);
7545 if (!template_id_p
&& !really_overloaded_fn (fns
))
7546 mark_used (OVL_CURRENT (fns
));
7548 /* Add back the template arguments, if present. */
7549 if (BASELINK_P (baselink
) && template_id_p
)
7550 BASELINK_FUNCTIONS (baselink
)
7551 = build_nt (TEMPLATE_ID_EXPR
,
7552 BASELINK_FUNCTIONS (baselink
),
7556 object_type
= current_class_type
;
7557 return adjust_result_of_qualified_name_lookup (baselink
,
7562 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID. DONE is
7563 true if the qualified-id will be a postfix-expression in-and-of
7564 itself; false if more of the postfix-expression follows the
7565 QUALIFIED_ID. ADDRESS_P is true if the qualified-id is the operand
7569 tsubst_qualified_id (tree qualified_id
, tree args
,
7570 tsubst_flags_t complain
, tree in_decl
,
7571 bool done
, bool address_p
)
7579 gcc_assert (TREE_CODE (qualified_id
) == SCOPE_REF
);
7581 /* Figure out what name to look up. */
7582 name
= TREE_OPERAND (qualified_id
, 1);
7583 if (TREE_CODE (name
) == TEMPLATE_ID_EXPR
)
7586 template_args
= TREE_OPERAND (name
, 1);
7588 template_args
= tsubst_template_args (template_args
, args
,
7590 name
= TREE_OPERAND (name
, 0);
7594 is_template
= false;
7595 template_args
= NULL_TREE
;
7598 /* Substitute into the qualifying scope. When there are no ARGS, we
7599 are just trying to simplify a non-dependent expression. In that
7600 case the qualifying scope may be dependent, and, in any case,
7601 substituting will not help. */
7602 scope
= TREE_OPERAND (qualified_id
, 0);
7605 scope
= tsubst (scope
, args
, complain
, in_decl
);
7606 expr
= tsubst_copy (name
, args
, complain
, in_decl
);
7611 if (dependent_type_p (scope
))
7612 return build_nt (SCOPE_REF
, scope
, expr
);
7614 if (!BASELINK_P (name
) && !DECL_P (expr
))
7616 expr
= lookup_qualified_name (scope
, expr
, /*is_type_p=*/0, false);
7617 if (TREE_CODE (TREE_CODE (expr
) == TEMPLATE_DECL
7618 ? DECL_TEMPLATE_RESULT (expr
) : expr
) == TYPE_DECL
)
7620 if (complain
& tf_error
)
7622 error ("dependent-name %qE is parsed as a non-type, but "
7623 "instantiation yields a type", qualified_id
);
7624 inform ("say %<typename %E%> if a type is meant", qualified_id
);
7626 return error_mark_node
;
7632 check_accessibility_of_qualified_id (expr
, /*object_type=*/NULL_TREE
,
7634 /* Remember that there was a reference to this entity. */
7638 if (expr
== error_mark_node
|| TREE_CODE (expr
) == TREE_LIST
)
7640 if (complain
& tf_error
)
7641 qualified_name_lookup_error (scope
,
7642 TREE_OPERAND (qualified_id
, 1),
7644 return error_mark_node
;
7648 expr
= lookup_template_function (expr
, template_args
);
7650 if (expr
== error_mark_node
&& complain
& tf_error
)
7651 qualified_name_lookup_error (scope
, TREE_OPERAND (qualified_id
, 1),
7653 else if (TYPE_P (scope
))
7655 expr
= (adjust_result_of_qualified_name_lookup
7656 (expr
, scope
, current_class_type
));
7657 expr
= finish_qualified_id_expr (scope
, expr
, done
, address_p
);
7660 expr
= convert_from_reference (expr
);
7665 /* Like tsubst, but deals with expressions. This function just replaces
7666 template parms; to finish processing the resultant expression, use
7670 tsubst_copy (tree t
, tree args
, tsubst_flags_t complain
, tree in_decl
)
7672 enum tree_code code
;
7675 if (t
== NULL_TREE
|| t
== error_mark_node
)
7678 code
= TREE_CODE (t
);
7683 r
= retrieve_local_specialization (t
);
7684 gcc_assert (r
!= NULL
);
7693 if (DECL_TEMPLATE_PARM_P (t
))
7694 return tsubst_copy (DECL_INITIAL (t
), args
, complain
, in_decl
);
7695 /* There is no need to substitute into namespace-scope
7697 if (DECL_NAMESPACE_SCOPE_P (t
))
7699 /* If ARGS is NULL, then T is known to be non-dependent. */
7700 if (args
== NULL_TREE
)
7701 return integral_constant_value (t
);
7703 /* Unfortunately, we cannot just call lookup_name here.
7706 template <int I> int f() {
7708 struct S { void g() { E e = a; } };
7711 When we instantiate f<7>::S::g(), say, lookup_name is not
7712 clever enough to find f<7>::a. */
7714 = tsubst_aggr_type (TREE_TYPE (t
), args
, complain
, in_decl
,
7715 /*entering_scope=*/0);
7717 for (v
= TYPE_VALUES (enum_type
);
7720 if (TREE_PURPOSE (v
) == DECL_NAME (t
))
7721 return TREE_VALUE (v
);
7723 /* We didn't find the name. That should never happen; if
7724 name-lookup found it during preliminary parsing, we
7725 should find it again here during instantiation. */
7731 if (DECL_CONTEXT (t
))
7735 ctx
= tsubst_aggr_type (DECL_CONTEXT (t
), args
, complain
, in_decl
,
7736 /*entering_scope=*/1);
7737 if (ctx
!= DECL_CONTEXT (t
))
7739 tree r
= lookup_field (ctx
, DECL_NAME (t
), 0, false);
7742 if (complain
& tf_error
)
7743 error ("using invalid field %qD", t
);
7744 return error_mark_node
;
7754 if ((DECL_LANG_SPECIFIC (t
) && DECL_TEMPLATE_INFO (t
))
7755 || local_variable_p (t
))
7756 t
= tsubst (t
, args
, complain
, in_decl
);
7761 return tsubst_baselink (t
, current_class_type
, args
, complain
, in_decl
);
7764 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t
))
7765 return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t
)),
7766 args
, complain
, in_decl
);
7767 else if (DECL_FUNCTION_TEMPLATE_P (t
) && DECL_MEMBER_TEMPLATE_P (t
))
7768 return tsubst (t
, args
, complain
, in_decl
);
7769 else if (DECL_CLASS_SCOPE_P (t
)
7770 && uses_template_parms (DECL_CONTEXT (t
)))
7772 /* Template template argument like the following example need
7775 template <template <class> class TT> struct C {};
7776 template <class T> struct D {
7777 template <class U> struct E {};
7782 We are processing the template argument `E' in #1 for
7783 the template instantiation #2. Originally, `E' is a
7784 TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT. Now we
7785 have to substitute this with one having context `D<int>'. */
7787 tree context
= tsubst (DECL_CONTEXT (t
), args
, complain
, in_decl
);
7788 return lookup_field (context
, DECL_NAME(t
), 0, false);
7791 /* Ordinary template template argument. */
7795 case REINTERPRET_CAST_EXPR
:
7796 case CONST_CAST_EXPR
:
7797 case STATIC_CAST_EXPR
:
7798 case DYNAMIC_CAST_EXPR
:
7801 (code
, tsubst (TREE_TYPE (t
), args
, complain
, in_decl
),
7802 tsubst_copy (TREE_OPERAND (t
, 0), args
, complain
, in_decl
));
7806 case TRUTH_NOT_EXPR
:
7809 case UNARY_PLUS_EXPR
: /* Unary + */
7818 (code
, tsubst (TREE_TYPE (t
), args
, complain
, in_decl
),
7819 tsubst_copy (TREE_OPERAND (t
, 0), args
, complain
, in_decl
));
7826 object
= tsubst_copy (TREE_OPERAND (t
, 0), args
, complain
, in_decl
);
7827 name
= TREE_OPERAND (t
, 1);
7828 if (TREE_CODE (name
) == BIT_NOT_EXPR
)
7830 name
= tsubst_copy (TREE_OPERAND (name
, 0), args
,
7832 name
= build1 (BIT_NOT_EXPR
, NULL_TREE
, name
);
7834 else if (TREE_CODE (name
) == SCOPE_REF
7835 && TREE_CODE (TREE_OPERAND (name
, 1)) == BIT_NOT_EXPR
)
7837 tree base
= tsubst_copy (TREE_OPERAND (name
, 0), args
,
7839 name
= TREE_OPERAND (name
, 1);
7840 name
= tsubst_copy (TREE_OPERAND (name
, 0), args
,
7842 name
= build1 (BIT_NOT_EXPR
, NULL_TREE
, name
);
7843 name
= build_nt (SCOPE_REF
, base
, name
);
7845 else if (TREE_CODE (name
) == BASELINK
)
7846 name
= tsubst_baselink (name
,
7847 non_reference (TREE_TYPE (object
)),
7851 name
= tsubst_copy (name
, args
, complain
, in_decl
);
7852 return build_nt (COMPONENT_REF
, object
, name
, NULL_TREE
);
7858 case TRUNC_DIV_EXPR
:
7860 case FLOOR_DIV_EXPR
:
7861 case ROUND_DIV_EXPR
:
7862 case EXACT_DIV_EXPR
:
7866 case TRUNC_MOD_EXPR
:
7867 case FLOOR_MOD_EXPR
:
7868 case TRUTH_ANDIF_EXPR
:
7869 case TRUTH_ORIF_EXPR
:
7870 case TRUTH_AND_EXPR
:
7888 case PREDECREMENT_EXPR
:
7889 case PREINCREMENT_EXPR
:
7890 case POSTDECREMENT_EXPR
:
7891 case POSTINCREMENT_EXPR
:
7893 (code
, tsubst_copy (TREE_OPERAND (t
, 0), args
, complain
, in_decl
),
7894 tsubst_copy (TREE_OPERAND (t
, 1), args
, complain
, in_decl
));
7899 tsubst_copy (TREE_OPERAND (t
, 0), args
, complain
, in_decl
),
7900 tsubst_copy (TREE_OPERAND (t
, 1), args
, complain
, in_decl
),
7901 NULL_TREE
, NULL_TREE
);
7904 return build_nt (code
,
7905 tsubst_copy (TREE_OPERAND (t
, 0), args
,
7907 tsubst_copy (TREE_OPERAND (t
, 1), args
, complain
,
7913 case PSEUDO_DTOR_EXPR
:
7916 (code
, tsubst_copy (TREE_OPERAND (t
, 0), args
, complain
, in_decl
),
7917 tsubst_copy (TREE_OPERAND (t
, 1), args
, complain
, in_decl
),
7918 tsubst_copy (TREE_OPERAND (t
, 2), args
, complain
, in_decl
));
7919 TREE_NO_WARNING (r
) = TREE_NO_WARNING (t
);
7926 (code
, tsubst_copy (TREE_OPERAND (t
, 0), args
, complain
, in_decl
),
7927 tsubst_copy (TREE_OPERAND (t
, 1), args
, complain
, in_decl
),
7928 tsubst_copy (TREE_OPERAND (t
, 2), args
, complain
, in_decl
));
7929 NEW_EXPR_USE_GLOBAL (r
) = NEW_EXPR_USE_GLOBAL (t
);
7936 (code
, tsubst_copy (TREE_OPERAND (t
, 0), args
, complain
, in_decl
),
7937 tsubst_copy (TREE_OPERAND (t
, 1), args
, complain
, in_decl
));
7938 DELETE_EXPR_USE_GLOBAL (r
) = DELETE_EXPR_USE_GLOBAL (t
);
7939 DELETE_EXPR_USE_VEC (r
) = DELETE_EXPR_USE_VEC (t
);
7943 case TEMPLATE_ID_EXPR
:
7945 /* Substituted template arguments */
7946 tree fn
= TREE_OPERAND (t
, 0);
7947 tree targs
= TREE_OPERAND (t
, 1);
7949 fn
= tsubst_copy (fn
, args
, complain
, in_decl
);
7951 targs
= tsubst_template_args (targs
, args
, complain
, in_decl
);
7953 return lookup_template_function (fn
, targs
);
7958 tree purpose
, value
, chain
;
7960 if (t
== void_list_node
)
7963 purpose
= TREE_PURPOSE (t
);
7965 purpose
= tsubst_copy (purpose
, args
, complain
, in_decl
);
7966 value
= TREE_VALUE (t
);
7968 value
= tsubst_copy (value
, args
, complain
, in_decl
);
7969 chain
= TREE_CHAIN (t
);
7970 if (chain
&& chain
!= void_type_node
)
7971 chain
= tsubst_copy (chain
, args
, complain
, in_decl
);
7972 if (purpose
== TREE_PURPOSE (t
)
7973 && value
== TREE_VALUE (t
)
7974 && chain
== TREE_CHAIN (t
))
7976 return tree_cons (purpose
, value
, chain
);
7983 case TEMPLATE_TYPE_PARM
:
7984 case TEMPLATE_TEMPLATE_PARM
:
7985 case BOUND_TEMPLATE_TEMPLATE_PARM
:
7986 case TEMPLATE_PARM_INDEX
:
7988 case REFERENCE_TYPE
:
7994 case UNBOUND_CLASS_TEMPLATE
:
7997 return tsubst (t
, args
, complain
, in_decl
);
7999 case IDENTIFIER_NODE
:
8000 if (IDENTIFIER_TYPENAME_P (t
))
8002 tree new_type
= tsubst (TREE_TYPE (t
), args
, complain
, in_decl
);
8003 return mangle_conv_op_name_for_type (new_type
);
8009 /* This is handled by tsubst_copy_and_build. */
8013 return build_x_va_arg (tsubst_copy (TREE_OPERAND (t
, 0), args
, complain
,
8015 tsubst (TREE_TYPE (t
), args
, complain
, in_decl
));
8017 case CLEANUP_POINT_EXPR
:
8018 /* We shouldn't have built any of these during initial template
8019 generation. Instead, they should be built during instantiation
8020 in response to the saved STMT_IS_FULL_EXPR_P setting. */
8028 /* Like tsubst_copy for expressions, etc. but also does semantic
8032 tsubst_expr (tree t
, tree args
, tsubst_flags_t complain
, tree in_decl
)
8036 if (t
== NULL_TREE
|| t
== error_mark_node
)
8039 if (EXPR_HAS_LOCATION (t
))
8040 input_location
= EXPR_LOCATION (t
);
8041 if (STATEMENT_CODE_P (TREE_CODE (t
)))
8042 current_stmt_tree ()->stmts_are_full_exprs_p
= STMT_IS_FULL_EXPR_P (t
);
8044 switch (TREE_CODE (t
))
8046 case STATEMENT_LIST
:
8048 tree_stmt_iterator i
;
8049 for (i
= tsi_start (t
); !tsi_end_p (i
); tsi_next (&i
))
8050 tsubst_expr (tsi_stmt (i
), args
, complain
, in_decl
);
8054 case CTOR_INITIALIZER
:
8055 finish_mem_initializers (tsubst_initializer_list
8056 (TREE_OPERAND (t
, 0), args
));
8060 finish_return_stmt (tsubst_expr (TREE_OPERAND (t
, 0),
8061 args
, complain
, in_decl
));
8065 tmp
= tsubst_expr (EXPR_STMT_EXPR (t
), args
, complain
, in_decl
);
8066 if (EXPR_STMT_STMT_EXPR_RESULT (t
))
8067 finish_stmt_expr_expr (tmp
, cur_stmt_expr
);
8069 finish_expr_stmt (tmp
);
8073 do_using_directive (tsubst_expr (USING_STMT_NAMESPACE (t
),
8074 args
, complain
, in_decl
));
8082 decl
= DECL_EXPR_DECL (t
);
8083 if (TREE_CODE (decl
) == LABEL_DECL
)
8084 finish_label_decl (DECL_NAME (decl
));
8085 else if (TREE_CODE (decl
) == USING_DECL
)
8087 tree scope
= USING_DECL_SCOPE (decl
);
8088 tree name
= DECL_NAME (decl
);
8091 scope
= tsubst_expr (scope
, args
, complain
, in_decl
);
8092 decl
= lookup_qualified_name (scope
, name
,
8093 /*is_type_p=*/false,
8094 /*complain=*/false);
8095 if (decl
== error_mark_node
|| TREE_CODE (decl
) == TREE_LIST
)
8096 qualified_name_lookup_error (scope
, name
, decl
);
8098 do_local_using_decl (decl
, scope
, name
);
8102 init
= DECL_INITIAL (decl
);
8103 decl
= tsubst (decl
, args
, complain
, in_decl
);
8104 if (decl
!= error_mark_node
)
8107 DECL_INITIAL (decl
) = error_mark_node
;
8108 /* By marking the declaration as instantiated, we avoid
8109 trying to instantiate it. Since instantiate_decl can't
8110 handle local variables, and since we've already done
8111 all that needs to be done, that's the right thing to
8113 if (TREE_CODE (decl
) == VAR_DECL
)
8114 DECL_TEMPLATE_INSTANTIATED (decl
) = 1;
8115 if (TREE_CODE (decl
) == VAR_DECL
8116 && ANON_AGGR_TYPE_P (TREE_TYPE (decl
)))
8117 /* Anonymous aggregates are a special case. */
8118 finish_anon_union (decl
);
8121 maybe_push_decl (decl
);
8122 if (TREE_CODE (decl
) == VAR_DECL
8123 && DECL_PRETTY_FUNCTION_P (decl
))
8125 /* For __PRETTY_FUNCTION__ we have to adjust the
8127 const char *const name
8128 = cxx_printable_name (current_function_decl
, 2);
8129 init
= cp_fname_init (name
, &TREE_TYPE (decl
));
8132 init
= tsubst_expr (init
, args
, complain
, in_decl
);
8133 cp_finish_decl (decl
, init
, NULL_TREE
, 0);
8138 /* A DECL_EXPR can also be used as an expression, in the condition
8139 clause of an if/for/while construct. */
8144 stmt
= begin_for_stmt ();
8145 tsubst_expr (FOR_INIT_STMT (t
), args
, complain
, in_decl
);
8146 finish_for_init_stmt (stmt
);
8147 tmp
= tsubst_expr (FOR_COND (t
), args
, complain
, in_decl
);
8148 finish_for_cond (tmp
, stmt
);
8149 tmp
= tsubst_expr (FOR_EXPR (t
), args
, complain
, in_decl
);
8150 finish_for_expr (tmp
, stmt
);
8151 tsubst_expr (FOR_BODY (t
), args
, complain
, in_decl
);
8152 finish_for_stmt (stmt
);
8156 stmt
= begin_while_stmt ();
8157 tmp
= tsubst_expr (WHILE_COND (t
), args
, complain
, in_decl
);
8158 finish_while_stmt_cond (tmp
, stmt
);
8159 tsubst_expr (WHILE_BODY (t
), args
, complain
, in_decl
);
8160 finish_while_stmt (stmt
);
8164 stmt
= begin_do_stmt ();
8165 tsubst_expr (DO_BODY (t
), args
, complain
, in_decl
);
8166 finish_do_body (stmt
);
8167 tmp
= tsubst_expr (DO_COND (t
), args
, complain
, in_decl
);
8168 finish_do_stmt (tmp
, stmt
);
8172 stmt
= begin_if_stmt ();
8173 tmp
= tsubst_expr (IF_COND (t
), args
, complain
, in_decl
);
8174 finish_if_stmt_cond (tmp
, stmt
);
8175 tsubst_expr (THEN_CLAUSE (t
), args
, complain
, in_decl
);
8176 finish_then_clause (stmt
);
8178 if (ELSE_CLAUSE (t
))
8180 begin_else_clause (stmt
);
8181 tsubst_expr (ELSE_CLAUSE (t
), args
, complain
, in_decl
);
8182 finish_else_clause (stmt
);
8185 finish_if_stmt (stmt
);
8189 if (BIND_EXPR_BODY_BLOCK (t
))
8190 stmt
= begin_function_body ();
8192 stmt
= begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t
)
8193 ? BCS_TRY_BLOCK
: 0);
8195 tsubst_expr (BIND_EXPR_BODY (t
), args
, complain
, in_decl
);
8197 if (BIND_EXPR_BODY_BLOCK (t
))
8198 finish_function_body (stmt
);
8200 finish_compound_stmt (stmt
);
8204 finish_break_stmt ();
8208 finish_continue_stmt ();
8212 stmt
= begin_switch_stmt ();
8213 tmp
= tsubst_expr (SWITCH_STMT_COND (t
), args
, complain
, in_decl
);
8214 finish_switch_cond (tmp
, stmt
);
8215 tsubst_expr (SWITCH_STMT_BODY (t
), args
, complain
, in_decl
);
8216 finish_switch_stmt (stmt
);
8219 case CASE_LABEL_EXPR
:
8220 finish_case_label (tsubst_expr (CASE_LOW (t
), args
, complain
, in_decl
),
8221 tsubst_expr (CASE_HIGH (t
), args
, complain
,
8226 finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t
)));
8230 tmp
= GOTO_DESTINATION (t
);
8231 if (TREE_CODE (tmp
) != LABEL_DECL
)
8232 /* Computed goto's must be tsubst'd into. On the other hand,
8233 non-computed gotos must not be; the identifier in question
8234 will have no binding. */
8235 tmp
= tsubst_expr (tmp
, args
, complain
, in_decl
);
8237 tmp
= DECL_NAME (tmp
);
8238 finish_goto_stmt (tmp
);
8242 tmp
= finish_asm_stmt
8243 (ASM_VOLATILE_P (t
),
8244 tsubst_expr (ASM_STRING (t
), args
, complain
, in_decl
),
8245 tsubst_expr (ASM_OUTPUTS (t
), args
, complain
, in_decl
),
8246 tsubst_expr (ASM_INPUTS (t
), args
, complain
, in_decl
),
8247 tsubst_expr (ASM_CLOBBERS (t
), args
, complain
, in_decl
));
8249 tree asm_expr
= tmp
;
8250 if (TREE_CODE (asm_expr
) == CLEANUP_POINT_EXPR
)
8251 asm_expr
= TREE_OPERAND (asm_expr
, 0);
8252 ASM_INPUT_P (asm_expr
) = ASM_INPUT_P (t
);
8259 stmt
= begin_try_block ();
8260 tsubst_expr (TRY_STMTS (t
), args
, complain
, in_decl
);
8261 finish_cleanup_try_block (stmt
);
8262 finish_cleanup (tsubst_expr (TRY_HANDLERS (t
), args
,
8268 if (FN_TRY_BLOCK_P (t
))
8269 stmt
= begin_function_try_block ();
8271 stmt
= begin_try_block ();
8273 tsubst_expr (TRY_STMTS (t
), args
, complain
, in_decl
);
8275 if (FN_TRY_BLOCK_P (t
))
8276 finish_function_try_block (stmt
);
8278 finish_try_block (stmt
);
8280 tsubst_expr (TRY_HANDLERS (t
), args
, complain
, in_decl
);
8281 if (FN_TRY_BLOCK_P (t
))
8282 finish_function_handler_sequence (stmt
);
8284 finish_handler_sequence (stmt
);
8292 stmt
= begin_handler ();
8293 if (HANDLER_PARMS (t
))
8295 decl
= HANDLER_PARMS (t
);
8296 decl
= tsubst (decl
, args
, complain
, in_decl
);
8297 /* Prevent instantiate_decl from trying to instantiate
8298 this variable. We've already done all that needs to be
8300 DECL_TEMPLATE_INSTANTIATED (decl
) = 1;
8304 finish_handler_parms (decl
, stmt
);
8305 tsubst_expr (HANDLER_BODY (t
), args
, complain
, in_decl
);
8306 finish_handler (stmt
);
8311 tsubst (TREE_TYPE (t
), args
, complain
, NULL_TREE
);
8315 gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t
)));
8317 return tsubst_copy_and_build (t
, args
, complain
, in_decl
,
8318 /*function_p=*/false);
8324 /* T is a postfix-expression that is not being used in a function
8325 call. Return the substituted version of T. */
8328 tsubst_non_call_postfix_expression (tree t
, tree args
,
8329 tsubst_flags_t complain
,
8332 if (TREE_CODE (t
) == SCOPE_REF
)
8333 t
= tsubst_qualified_id (t
, args
, complain
, in_decl
,
8334 /*done=*/false, /*address_p=*/false);
8336 t
= tsubst_copy_and_build (t
, args
, complain
, in_decl
,
8337 /*function_p=*/false);
8342 /* Like tsubst but deals with expressions and performs semantic
8343 analysis. FUNCTION_P is true if T is the "F" in "F (ARGS)". */
8346 tsubst_copy_and_build (tree t
,
8348 tsubst_flags_t complain
,
8352 #define RECUR(NODE) \
8353 tsubst_copy_and_build (NODE, args, complain, in_decl, /*function_p=*/false)
8357 if (t
== NULL_TREE
|| t
== error_mark_node
)
8360 switch (TREE_CODE (t
))
8365 case IDENTIFIER_NODE
:
8369 tree qualifying_class
;
8370 bool non_integral_constant_expression_p
;
8371 const char *error_msg
;
8373 if (IDENTIFIER_TYPENAME_P (t
))
8375 tree new_type
= tsubst (TREE_TYPE (t
), args
, complain
, in_decl
);
8376 t
= mangle_conv_op_name_for_type (new_type
);
8379 /* Look up the name. */
8380 decl
= lookup_name (t
, 0);
8382 /* By convention, expressions use ERROR_MARK_NODE to indicate
8383 failure, not NULL_TREE. */
8384 if (decl
== NULL_TREE
)
8385 decl
= error_mark_node
;
8387 decl
= finish_id_expression (t
, decl
, NULL_TREE
,
8390 /*integral_constant_expression_p=*/false,
8391 /*allow_non_integral_constant_expression_p=*/false,
8392 &non_integral_constant_expression_p
,
8396 if (!function_p
&& TREE_CODE (decl
) == IDENTIFIER_NODE
)
8397 decl
= unqualified_name_lookup_error (decl
);
8401 case TEMPLATE_ID_EXPR
:
8404 tree
template = RECUR (TREE_OPERAND (t
, 0));
8405 tree targs
= TREE_OPERAND (t
, 1);
8408 targs
= tsubst_template_args (targs
, args
, complain
, in_decl
);
8410 if (TREE_CODE (template) == COMPONENT_REF
)
8412 object
= TREE_OPERAND (template, 0);
8413 template = TREE_OPERAND (template, 1);
8417 template = lookup_template_function (template, targs
);
8420 return build3 (COMPONENT_REF
, TREE_TYPE (template),
8421 object
, template, NULL_TREE
);
8428 tree r
= RECUR (TREE_OPERAND (t
, 0));
8430 if (REFERENCE_REF_P (t
))
8432 /* A type conversion to reference type will be enclosed in
8433 such an indirect ref, but the substitution of the cast
8434 will have also added such an indirect ref. */
8435 if (TREE_CODE (TREE_TYPE (r
)) == REFERENCE_TYPE
)
8436 r
= convert_from_reference (r
);
8439 r
= build_x_indirect_ref (r
, "unary *");
8445 (tsubst (TREE_TYPE (t
), args
, complain
, in_decl
),
8446 RECUR (TREE_OPERAND (t
, 0)));
8449 return build_functional_cast
8450 (tsubst (TREE_TYPE (t
), args
, complain
, in_decl
),
8451 RECUR (TREE_OPERAND (t
, 0)));
8453 case REINTERPRET_CAST_EXPR
:
8454 return build_reinterpret_cast
8455 (tsubst (TREE_TYPE (t
), args
, complain
, in_decl
),
8456 RECUR (TREE_OPERAND (t
, 0)));
8458 case CONST_CAST_EXPR
:
8459 return build_const_cast
8460 (tsubst (TREE_TYPE (t
), args
, complain
, in_decl
),
8461 RECUR (TREE_OPERAND (t
, 0)));
8463 case DYNAMIC_CAST_EXPR
:
8464 return build_dynamic_cast
8465 (tsubst (TREE_TYPE (t
), args
, complain
, in_decl
),
8466 RECUR (TREE_OPERAND (t
, 0)));
8468 case STATIC_CAST_EXPR
:
8469 return build_static_cast
8470 (tsubst (TREE_TYPE (t
), args
, complain
, in_decl
),
8471 RECUR (TREE_OPERAND (t
, 0)));
8473 case POSTDECREMENT_EXPR
:
8474 case POSTINCREMENT_EXPR
:
8475 op1
= tsubst_non_call_postfix_expression (TREE_OPERAND (t
, 0),
8476 args
, complain
, in_decl
);
8477 return build_x_unary_op (TREE_CODE (t
), op1
);
8479 case PREDECREMENT_EXPR
:
8480 case PREINCREMENT_EXPR
:
8484 case TRUTH_NOT_EXPR
:
8485 case UNARY_PLUS_EXPR
: /* Unary + */
8488 return build_x_unary_op (TREE_CODE (t
), RECUR (TREE_OPERAND (t
, 0)));
8491 op1
= TREE_OPERAND (t
, 0);
8492 if (TREE_CODE (op1
) == SCOPE_REF
)
8493 op1
= tsubst_qualified_id (op1
, args
, complain
, in_decl
,
8494 /*done=*/true, /*address_p=*/true);
8496 op1
= tsubst_non_call_postfix_expression (op1
, args
, complain
,
8498 if (TREE_CODE (op1
) == LABEL_DECL
)
8499 return finish_label_address_expr (DECL_NAME (op1
));
8500 return build_x_unary_op (ADDR_EXPR
, op1
);
8505 case TRUNC_DIV_EXPR
:
8507 case FLOOR_DIV_EXPR
:
8508 case ROUND_DIV_EXPR
:
8509 case EXACT_DIV_EXPR
:
8513 case TRUNC_MOD_EXPR
:
8514 case FLOOR_MOD_EXPR
:
8515 case TRUTH_ANDIF_EXPR
:
8516 case TRUTH_ORIF_EXPR
:
8517 case TRUTH_AND_EXPR
:
8533 return build_x_binary_op
8535 RECUR (TREE_OPERAND (t
, 0)),
8536 RECUR (TREE_OPERAND (t
, 1)),
8537 /*overloaded_p=*/NULL
);
8540 return tsubst_qualified_id (t
, args
, complain
, in_decl
, /*done=*/true,
8541 /*address_p=*/false);
8543 op1
= tsubst_non_call_postfix_expression (TREE_OPERAND (t
, 0),
8544 args
, complain
, in_decl
);
8545 return build_x_binary_op (ARRAY_REF
, op1
, RECUR (TREE_OPERAND (t
, 1)),
8546 /*overloaded_p=*/NULL
);
8550 op1
= TREE_OPERAND (t
, 0);
8553 /* When there are no ARGS, we are trying to evaluate a
8554 non-dependent expression from the parser. Trying to do
8555 the substitutions may not work. */
8557 op1
= TREE_TYPE (op1
);
8566 return cxx_sizeof_or_alignof_type (op1
, TREE_CODE (t
), true);
8568 return cxx_sizeof_or_alignof_expr (op1
, TREE_CODE (t
));
8572 tree r
= build_x_modify_expr
8573 (RECUR (TREE_OPERAND (t
, 0)),
8574 TREE_CODE (TREE_OPERAND (t
, 1)),
8575 RECUR (TREE_OPERAND (t
, 2)));
8576 /* TREE_NO_WARNING must be set if either the expression was
8577 parenthesized or it uses an operator such as >>= rather
8578 than plain assignment. In the former case, it was already
8579 set and must be copied. In the latter case,
8580 build_x_modify_expr sets it and it must not be reset
8582 if (TREE_NO_WARNING (t
))
8583 TREE_NO_WARNING (r
) = TREE_NO_WARNING (t
);
8588 op1
= tsubst_non_call_postfix_expression (TREE_OPERAND (t
, 0),
8589 args
, complain
, in_decl
);
8590 /* Remember that there was a reference to this entity. */
8593 return build_x_arrow (op1
);
8597 (RECUR (TREE_OPERAND (t
, 0)),
8598 RECUR (TREE_OPERAND (t
, 1)),
8599 RECUR (TREE_OPERAND (t
, 2)),
8600 RECUR (TREE_OPERAND (t
, 3)),
8601 NEW_EXPR_USE_GLOBAL (t
));
8604 return delete_sanity
8605 (RECUR (TREE_OPERAND (t
, 0)),
8606 RECUR (TREE_OPERAND (t
, 1)),
8607 DELETE_EXPR_USE_VEC (t
),
8608 DELETE_EXPR_USE_GLOBAL (t
));
8611 return build_x_compound_expr (RECUR (TREE_OPERAND (t
, 0)),
8612 RECUR (TREE_OPERAND (t
, 1)));
8621 function
= TREE_OPERAND (t
, 0);
8622 /* When we parsed the expression, we determined whether or
8623 not Koenig lookup should be performed. */
8624 koenig_p
= KOENIG_LOOKUP_P (t
);
8625 if (TREE_CODE (function
) == SCOPE_REF
)
8628 function
= tsubst_qualified_id (function
, args
, complain
, in_decl
,
8630 /*address_p=*/false);
8634 qualified_p
= (TREE_CODE (function
) == COMPONENT_REF
8635 && (TREE_CODE (TREE_OPERAND (function
, 1))
8637 function
= tsubst_copy_and_build (function
, args
, complain
,
8640 if (BASELINK_P (function
))
8644 call_args
= RECUR (TREE_OPERAND (t
, 1));
8646 /* We do not perform argument-dependent lookup if normal
8647 lookup finds a non-function, in accordance with the
8648 expected resolution of DR 218. */
8650 && ((is_overloaded_fn (function
)
8651 /* If lookup found a member function, the Koenig lookup is
8652 not appropriate, even if an unqualified-name was used
8653 to denote the function. */
8654 && !DECL_FUNCTION_MEMBER_P (get_first_fn (function
)))
8655 || TREE_CODE (function
) == IDENTIFIER_NODE
))
8656 function
= perform_koenig_lookup (function
, call_args
);
8658 if (TREE_CODE (function
) == IDENTIFIER_NODE
)
8660 unqualified_name_lookup_error (function
);
8661 return error_mark_node
;
8664 /* Remember that there was a reference to this entity. */
8665 if (DECL_P (function
))
8666 mark_used (function
);
8668 if (TREE_CODE (function
) == OFFSET_REF
)
8669 return build_offset_ref_call_from_tree (function
, call_args
);
8670 if (TREE_CODE (function
) == COMPONENT_REF
)
8672 if (!BASELINK_P (TREE_OPERAND (function
, 1)))
8673 return finish_call_expr (function
, call_args
,
8674 /*disallow_virtual=*/false,
8675 /*koenig_p=*/false);
8677 return (build_new_method_call
8678 (TREE_OPERAND (function
, 0),
8679 TREE_OPERAND (function
, 1),
8680 call_args
, NULL_TREE
,
8681 qualified_p
? LOOKUP_NONVIRTUAL
: LOOKUP_NORMAL
));
8683 return finish_call_expr (function
, call_args
,
8684 /*disallow_virtual=*/qualified_p
,
8689 return build_x_conditional_expr
8690 (RECUR (TREE_OPERAND (t
, 0)),
8691 RECUR (TREE_OPERAND (t
, 1)),
8692 RECUR (TREE_OPERAND (t
, 2)));
8694 case PSEUDO_DTOR_EXPR
:
8695 return finish_pseudo_destructor_expr
8696 (RECUR (TREE_OPERAND (t
, 0)),
8697 RECUR (TREE_OPERAND (t
, 1)),
8698 RECUR (TREE_OPERAND (t
, 2)));
8702 tree purpose
, value
, chain
;
8704 if (t
== void_list_node
)
8707 purpose
= TREE_PURPOSE (t
);
8709 purpose
= RECUR (purpose
);
8710 value
= TREE_VALUE (t
);
8712 value
= RECUR (value
);
8713 chain
= TREE_CHAIN (t
);
8714 if (chain
&& chain
!= void_type_node
)
8715 chain
= RECUR (chain
);
8716 if (purpose
== TREE_PURPOSE (t
)
8717 && value
== TREE_VALUE (t
)
8718 && chain
== TREE_CHAIN (t
))
8720 return tree_cons (purpose
, value
, chain
);
8728 object
= tsubst_non_call_postfix_expression (TREE_OPERAND (t
, 0),
8729 args
, complain
, in_decl
);
8730 /* Remember that there was a reference to this entity. */
8731 if (DECL_P (object
))
8734 member
= TREE_OPERAND (t
, 1);
8735 if (BASELINK_P (member
))
8736 member
= tsubst_baselink (member
,
8737 non_reference (TREE_TYPE (object
)),
8738 args
, complain
, in_decl
);
8740 member
= tsubst_copy (member
, args
, complain
, in_decl
);
8742 if (member
== error_mark_node
)
8743 return error_mark_node
;
8744 else if (!CLASS_TYPE_P (TREE_TYPE (object
)))
8746 if (TREE_CODE (member
) == BIT_NOT_EXPR
)
8747 return finish_pseudo_destructor_expr (object
,
8749 TREE_TYPE (object
));
8750 else if (TREE_CODE (member
) == SCOPE_REF
8751 && (TREE_CODE (TREE_OPERAND (member
, 1)) == BIT_NOT_EXPR
))
8752 return finish_pseudo_destructor_expr (object
,
8754 TREE_TYPE (object
));
8756 else if (TREE_CODE (member
) == SCOPE_REF
8757 && TREE_CODE (TREE_OPERAND (member
, 1)) == TEMPLATE_ID_EXPR
)
8762 /* Lookup the template functions now that we know what the
8764 tmpl
= TREE_OPERAND (TREE_OPERAND (member
, 1), 0);
8765 args
= TREE_OPERAND (TREE_OPERAND (member
, 1), 1);
8766 member
= lookup_qualified_name (TREE_OPERAND (member
, 0), tmpl
,
8767 /*is_type_p=*/false,
8768 /*complain=*/false);
8769 if (BASELINK_P (member
))
8771 BASELINK_FUNCTIONS (member
)
8772 = build_nt (TEMPLATE_ID_EXPR
, BASELINK_FUNCTIONS (member
),
8774 member
= (adjust_result_of_qualified_name_lookup
8775 (member
, BINFO_TYPE (BASELINK_BINFO (member
)),
8776 TREE_TYPE (object
)));
8780 qualified_name_lookup_error (TREE_TYPE (object
), tmpl
,
8782 return error_mark_node
;
8785 else if (TREE_CODE (member
) == SCOPE_REF
8786 && !CLASS_TYPE_P (TREE_OPERAND (member
, 0))
8787 && TREE_CODE (TREE_OPERAND (member
, 0)) != NAMESPACE_DECL
)
8789 if (complain
& tf_error
)
8791 if (TYPE_P (TREE_OPERAND (member
, 0)))
8792 error ("%qT is not a class or namespace",
8793 TREE_OPERAND (member
, 0));
8795 error ("%qD is not a class or namespace",
8796 TREE_OPERAND (member
, 0));
8798 return error_mark_node
;
8800 else if (TREE_CODE (member
) == FIELD_DECL
)
8801 return finish_non_static_data_member (member
, object
, NULL_TREE
);
8803 return finish_class_member_access_expr (object
, member
);
8808 (RECUR (TREE_OPERAND (t
, 0)));
8812 VEC(constructor_elt
,gc
) *n
;
8813 constructor_elt
*ce
;
8814 unsigned HOST_WIDE_INT idx
;
8816 tree type
= tsubst (TREE_TYPE (t
), args
, complain
, in_decl
);
8817 bool process_index_p
;
8819 /* digest_init will do the wrong thing if we let it. */
8820 if (type
&& TYPE_PTRMEMFUNC_P (type
))
8823 /* We do not want to process the index of aggregate
8824 initializers as they are identifier nodes which will be
8825 looked up by digest_init. */
8826 process_index_p
= !(type
&& IS_AGGR_TYPE (type
));
8828 n
= VEC_copy (constructor_elt
, gc
, CONSTRUCTOR_ELTS (t
));
8829 for (idx
= 0; VEC_iterate (constructor_elt
, n
, idx
, ce
); idx
++)
8831 if (ce
->index
&& process_index_p
)
8832 ce
->index
= RECUR (ce
->index
);
8833 ce
->value
= RECUR (ce
->value
);
8836 r
= build_constructor (NULL_TREE
, n
);
8837 TREE_HAS_CONSTRUCTOR (r
) = TREE_HAS_CONSTRUCTOR (t
);
8840 return digest_init (type
, r
);
8846 tree operand_0
= RECUR (TREE_OPERAND (t
, 0));
8847 if (TYPE_P (operand_0
))
8848 return get_typeid (operand_0
);
8849 return build_typeid (operand_0
);
8859 tree r
= tsubst_copy (t
, args
, complain
, in_decl
);
8861 if (TREE_CODE (TREE_TYPE (t
)) != REFERENCE_TYPE
)
8862 /* If the original type was a reference, we'll be wrapped in
8863 the appropriate INDIRECT_REF. */
8864 r
= convert_from_reference (r
);
8869 return build_x_va_arg (RECUR (TREE_OPERAND (t
, 0)),
8870 tsubst_copy (TREE_TYPE (t
), args
, complain
,
8874 return fold_offsetof (RECUR (TREE_OPERAND (t
, 0)));
8878 tree old_stmt_expr
= cur_stmt_expr
;
8879 tree stmt_expr
= begin_stmt_expr ();
8881 cur_stmt_expr
= stmt_expr
;
8882 tsubst_expr (STMT_EXPR_STMT (t
), args
, complain
, in_decl
);
8883 stmt_expr
= finish_stmt_expr (stmt_expr
, false);
8884 cur_stmt_expr
= old_stmt_expr
;
8890 t
= tsubst_copy (t
, args
, complain
, in_decl
);
8891 /* As in finish_id_expression, we resolve enumeration constants
8892 to their underlying values. */
8893 if (TREE_CODE (t
) == CONST_DECL
)
8894 return DECL_INITIAL (t
);
8898 /* Handle Objective-C++ constructs, if appropriate. */
8901 = objcp_tsubst_copy_and_build (t
, args
, complain
,
8902 in_decl
, /*function_p=*/false);
8906 return tsubst_copy (t
, args
, complain
, in_decl
);
8912 /* Verify that the instantiated ARGS are valid. For type arguments,
8913 make sure that the type's linkage is ok. For non-type arguments,
8914 make sure they are constants if they are integral or enumerations.
8915 Emit an error under control of COMPLAIN, and return TRUE on error. */
8918 check_instantiated_args (tree tmpl
, tree args
, tsubst_flags_t complain
)
8920 int ix
, len
= DECL_NTPARMS (tmpl
);
8921 bool result
= false;
8922 bool error_p
= complain
& tf_error
;
8924 for (ix
= 0; ix
!= len
; ix
++)
8926 tree t
= TREE_VEC_ELT (args
, ix
);
8930 /* [basic.link]: A name with no linkage (notably, the name
8931 of a class or enumeration declared in a local scope)
8932 shall not be used to declare an entity with linkage.
8933 This implies that names with no linkage cannot be used as
8934 template arguments. */
8935 tree nt
= no_linkage_check (t
, /*relaxed_p=*/false);
8939 if (TYPE_ANONYMOUS_P (nt
))
8940 error ("%qT is/uses anonymous type", t
);
8942 error ("%qT uses local type %qT", t
, nt
);
8946 /* In order to avoid all sorts of complications, we do not
8947 allow variably-modified types as template arguments. */
8948 else if (variably_modified_type_p (t
, NULL_TREE
))
8950 if (complain
& tf_error
)
8951 error ("%qT is a variably modified type", t
);
8955 /* A non-type argument of integral or enumerated type must be a
8957 else if (TREE_TYPE (t
)
8958 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t
))
8959 && !TREE_CONSTANT (t
))
8961 if (complain
& tf_error
)
8962 error ("integral expression %qE is not constant", t
);
8966 if (result
&& error_p
)
8967 error (" trying to instantiate %qD", tmpl
);
8971 /* Instantiate the indicated variable or function template TMPL with
8972 the template arguments in TARG_PTR. */
8975 instantiate_template (tree tmpl
, tree targ_ptr
, tsubst_flags_t complain
)
8981 if (tmpl
== error_mark_node
)
8982 return error_mark_node
;
8984 gcc_assert (TREE_CODE (tmpl
) == TEMPLATE_DECL
);
8986 /* If this function is a clone, handle it specially. */
8987 if (DECL_CLONED_FUNCTION_P (tmpl
))
8992 spec
= instantiate_template (DECL_CLONED_FUNCTION (tmpl
), targ_ptr
,
8994 if (spec
== error_mark_node
)
8995 return error_mark_node
;
8997 /* Look for the clone. */
8998 FOR_EACH_CLONE (clone
, spec
)
8999 if (DECL_NAME (clone
) == DECL_NAME (tmpl
))
9001 /* We should always have found the clone by now. */
9006 /* Check to see if we already have this specialization. */
9007 spec
= retrieve_specialization (tmpl
, targ_ptr
,
9008 /*class_specializations_p=*/false);
9009 if (spec
!= NULL_TREE
)
9012 gen_tmpl
= most_general_template (tmpl
);
9013 if (tmpl
!= gen_tmpl
)
9015 /* The TMPL is a partial instantiation. To get a full set of
9016 arguments we must add the arguments used to perform the
9017 partial instantiation. */
9018 targ_ptr
= add_outermost_template_args (DECL_TI_ARGS (tmpl
),
9021 /* Check to see if we already have this specialization. */
9022 spec
= retrieve_specialization (gen_tmpl
, targ_ptr
,
9023 /*class_specializations_p=*/false);
9024 if (spec
!= NULL_TREE
)
9028 if (check_instantiated_args (gen_tmpl
, INNERMOST_TEMPLATE_ARGS (targ_ptr
),
9030 return error_mark_node
;
9032 /* We are building a FUNCTION_DECL, during which the access of its
9033 parameters and return types have to be checked. However this
9034 FUNCTION_DECL which is the desired context for access checking
9035 is not built yet. We solve this chicken-and-egg problem by
9036 deferring all checks until we have the FUNCTION_DECL. */
9037 push_deferring_access_checks (dk_deferred
);
9039 /* Substitute template parameters. */
9040 fndecl
= tsubst (DECL_TEMPLATE_RESULT (gen_tmpl
),
9041 targ_ptr
, complain
, gen_tmpl
);
9043 /* Now we know the specialization, compute access previously
9045 push_access_scope (fndecl
);
9046 perform_deferred_access_checks ();
9047 pop_access_scope (fndecl
);
9048 pop_deferring_access_checks ();
9050 /* The DECL_TI_TEMPLATE should always be the immediate parent
9051 template, not the most general template. */
9052 DECL_TI_TEMPLATE (fndecl
) = tmpl
;
9054 /* If we've just instantiated the main entry point for a function,
9055 instantiate all the alternate entry points as well. We do this
9056 by cloning the instantiation of the main entry point, not by
9057 instantiating the template clones. */
9058 if (TREE_CHAIN (gen_tmpl
) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl
)))
9059 clone_function_decl (fndecl
, /*update_method_vec_p=*/0);
9064 /* The FN is a TEMPLATE_DECL for a function. The ARGS are the
9065 arguments that are being used when calling it. TARGS is a vector
9066 into which the deduced template arguments are placed.
9068 Return zero for success, 2 for an incomplete match that doesn't resolve
9069 all the types, and 1 for complete failure. An error message will be
9070 printed only for an incomplete match.
9072 If FN is a conversion operator, or we are trying to produce a specific
9073 specialization, RETURN_TYPE is the return type desired.
9075 The EXPLICIT_TARGS are explicit template arguments provided via a
9078 The parameter STRICT is one of:
9081 We are deducing arguments for a function call, as in
9085 We are deducing arguments for a conversion function, as in
9089 We are deducing arguments when doing an explicit instantiation
9090 as in [temp.explicit], when determining an explicit specialization
9091 as in [temp.expl.spec], or when taking the address of a function
9092 template, as in [temp.deduct.funcaddr]. */
9095 fn_type_unification (tree fn
,
9096 tree explicit_targs
,
9100 unification_kind_t strict
)
9106 gcc_assert (TREE_CODE (fn
) == TEMPLATE_DECL
);
9108 fntype
= TREE_TYPE (fn
);
9113 The specified template arguments must match the template
9114 parameters in kind (i.e., type, nontype, template), and there
9115 must not be more arguments than there are parameters;
9116 otherwise type deduction fails.
9118 Nontype arguments must match the types of the corresponding
9119 nontype template parameters, or must be convertible to the
9120 types of the corresponding nontype parameters as specified in
9121 _temp.arg.nontype_, otherwise type deduction fails.
9123 All references in the function type of the function template
9124 to the corresponding template parameters are replaced by the
9125 specified template argument values. If a substitution in a
9126 template parameter or in the function type of the function
9127 template results in an invalid type, type deduction fails. */
9129 tree converted_args
;
9132 if (explicit_targs
== error_mark_node
)
9136 = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn
),
9137 explicit_targs
, NULL_TREE
, tf_none
,
9138 /*require_all_arguments=*/0));
9139 if (converted_args
== error_mark_node
)
9142 /* Substitute the explicit args into the function type. This is
9143 necessary so that, for instance, explicitly declared function
9144 arguments can match null pointed constants. If we were given
9145 an incomplete set of explicit args, we must not do semantic
9146 processing during substitution as we could create partial
9148 incomplete
= NUM_TMPL_ARGS (explicit_targs
) != NUM_TMPL_ARGS (targs
);
9149 processing_template_decl
+= incomplete
;
9150 fntype
= tsubst (fntype
, converted_args
, tf_none
, NULL_TREE
);
9151 processing_template_decl
-= incomplete
;
9153 if (fntype
== error_mark_node
)
9156 /* Place the explicitly specified arguments in TARGS. */
9157 for (i
= NUM_TMPL_ARGS (converted_args
); i
--;)
9158 TREE_VEC_ELT (targs
, i
) = TREE_VEC_ELT (converted_args
, i
);
9161 parms
= TYPE_ARG_TYPES (fntype
);
9162 /* Never do unification on the 'this' parameter. */
9163 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn
))
9164 parms
= TREE_CHAIN (parms
);
9168 parms
= tree_cons (NULL_TREE
, TREE_TYPE (fntype
), parms
);
9169 args
= tree_cons (NULL_TREE
, return_type
, args
);
9172 /* We allow incomplete unification without an error message here
9173 because the standard doesn't seem to explicitly prohibit it. Our
9174 callers must be ready to deal with unification failures in any
9176 result
= type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn
),
9177 targs
, parms
, args
, /*subr=*/0,
9181 /* All is well so far. Now, check:
9185 When all template arguments have been deduced, all uses of
9186 template parameters in nondeduced contexts are replaced with
9187 the corresponding deduced argument values. If the
9188 substitution results in an invalid type, as described above,
9189 type deduction fails. */
9190 if (tsubst (TREE_TYPE (fn
), targs
, tf_none
, NULL_TREE
)
9197 /* Adjust types before performing type deduction, as described in
9198 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
9199 sections are symmetric. PARM is the type of a function parameter
9200 or the return type of the conversion function. ARG is the type of
9201 the argument passed to the call, or the type of the value
9202 initialized with the result of the conversion function. */
9205 maybe_adjust_types_for_deduction (unification_kind_t strict
,
9218 /* Swap PARM and ARG throughout the remainder of this
9219 function; the handling is precisely symmetric since PARM
9220 will initialize ARG rather than vice versa. */
9228 /* There is nothing to do in this case. */
9235 if (TREE_CODE (*parm
) != REFERENCE_TYPE
)
9237 /* [temp.deduct.call]
9239 If P is not a reference type:
9241 --If A is an array type, the pointer type produced by the
9242 array-to-pointer standard conversion (_conv.array_) is
9243 used in place of A for type deduction; otherwise,
9245 --If A is a function type, the pointer type produced by
9246 the function-to-pointer standard conversion
9247 (_conv.func_) is used in place of A for type deduction;
9250 --If A is a cv-qualified type, the top level
9251 cv-qualifiers of A's type are ignored for type
9253 if (TREE_CODE (*arg
) == ARRAY_TYPE
)
9254 *arg
= build_pointer_type (TREE_TYPE (*arg
));
9255 else if (TREE_CODE (*arg
) == FUNCTION_TYPE
)
9256 *arg
= build_pointer_type (*arg
);
9258 *arg
= TYPE_MAIN_VARIANT (*arg
);
9261 /* [temp.deduct.call]
9263 If P is a cv-qualified type, the top level cv-qualifiers
9264 of P's type are ignored for type deduction. If P is a
9265 reference type, the type referred to by P is used for
9267 *parm
= TYPE_MAIN_VARIANT (*parm
);
9268 if (TREE_CODE (*parm
) == REFERENCE_TYPE
)
9270 *parm
= TREE_TYPE (*parm
);
9271 result
|= UNIFY_ALLOW_OUTER_MORE_CV_QUAL
;
9274 /* DR 322. For conversion deduction, remove a reference type on parm
9275 too (which has been swapped into ARG). */
9276 if (strict
== DEDUCE_CONV
&& TREE_CODE (*arg
) == REFERENCE_TYPE
)
9277 *arg
= TREE_TYPE (*arg
);
9282 /* Most parms like fn_type_unification.
9284 If SUBR is 1, we're being called recursively (to unify the
9285 arguments of a function or method parameter of a function
9286 template). If IS_METHOD is true, XPARMS are the parms of a
9287 member function, and special rules apply to cv qualification
9288 deduction on the this parameter. */
9291 type_unification_real (tree tparms
,
9296 unification_kind_t strict
,
9301 int ntparms
= TREE_VEC_LENGTH (tparms
);
9303 int saw_undeduced
= 0;
9306 gcc_assert (TREE_CODE (tparms
) == TREE_VEC
);
9307 gcc_assert (xparms
== NULL_TREE
|| TREE_CODE (xparms
) == TREE_LIST
);
9308 gcc_assert (!xargs
|| TREE_CODE (xargs
) == TREE_LIST
);
9309 gcc_assert (ntparms
> 0);
9314 sub_strict
= (UNIFY_ALLOW_OUTER_LEVEL
| UNIFY_ALLOW_MORE_CV_QUAL
9315 | UNIFY_ALLOW_DERIVED
);
9319 sub_strict
= UNIFY_ALLOW_LESS_CV_QUAL
;
9323 sub_strict
= UNIFY_ALLOW_NONE
;
9334 while (parms
&& parms
!= void_list_node
9335 && args
&& args
!= void_list_node
)
9337 parm
= TREE_VALUE (parms
);
9338 parms
= TREE_CHAIN (parms
);
9339 arg
= TREE_VALUE (args
);
9340 args
= TREE_CHAIN (args
);
9342 if (arg
== error_mark_node
)
9344 if (arg
== unknown_type_node
)
9345 /* We can't deduce anything from this, but we might get all the
9346 template args from other function args. */
9351 /* The cv qualifiers on the this pointer argument must match
9352 exactly. We cannot deduce a T as const X against a const
9353 member function for instance. */
9354 gcc_assert (TREE_CODE (parm
) == POINTER_TYPE
);
9355 gcc_assert (TREE_CODE (arg
) == POINTER_TYPE
);
9356 /* The restrict qualifier will be on the pointer. */
9357 if (cp_type_quals (parm
) != cp_type_quals (arg
))
9359 parm
= TREE_TYPE (parm
);
9360 arg
= TREE_TYPE (arg
);
9361 if (cp_type_quals (parm
) != cp_type_quals (arg
))
9364 parm
= TYPE_MAIN_VARIANT (parm
);
9365 arg
= TYPE_MAIN_VARIANT (arg
);
9369 /* Conversions will be performed on a function argument that
9370 corresponds with a function parameter that contains only
9371 non-deducible template parameters and explicitly specified
9372 template parameters. */
9373 if (!uses_template_parms (parm
))
9378 type
= TREE_TYPE (arg
);
9382 if (same_type_p (parm
, type
))
9384 if (strict
!= DEDUCE_EXACT
9385 && can_convert_arg (parm
, type
, TYPE_P (arg
) ? NULL_TREE
: arg
))
9393 gcc_assert (TREE_TYPE (arg
) != NULL_TREE
);
9394 if (type_unknown_p (arg
))
9396 /* [temp.deduct.type] A template-argument can be deduced from
9397 a pointer to function or pointer to member function
9398 argument if the set of overloaded functions does not
9399 contain function templates and at most one of a set of
9400 overloaded functions provides a unique match. */
9402 if (resolve_overloaded_unification
9403 (tparms
, targs
, parm
, arg
, strict
, sub_strict
)
9408 arg
= TREE_TYPE (arg
);
9409 if (arg
== error_mark_node
)
9414 int arg_strict
= sub_strict
;
9417 arg_strict
|= maybe_adjust_types_for_deduction (strict
, &parm
, &arg
);
9419 if (unify (tparms
, targs
, parm
, arg
, arg_strict
))
9424 /* Fail if we've reached the end of the parm list, and more args
9425 are present, and the parm list isn't variadic. */
9426 if (args
&& args
!= void_list_node
&& parms
== void_list_node
)
9428 /* Fail if parms are left and they don't have default values. */
9429 if (parms
&& parms
!= void_list_node
9430 && TREE_PURPOSE (parms
) == NULL_TREE
)
9434 for (i
= 0; i
< ntparms
; i
++)
9435 if (!TREE_VEC_ELT (targs
, i
))
9437 tree tparm
= TREE_VALUE (TREE_VEC_ELT (tparms
, i
));
9439 /* If this is an undeduced nontype parameter that depends on
9440 a type parameter, try another pass; its type may have been
9441 deduced from a later argument than the one from which
9442 this parameter can be deduced. */
9443 if (TREE_CODE (tparm
) == PARM_DECL
9444 && uses_template_parms (TREE_TYPE (tparm
))
9445 && !saw_undeduced
++)
9454 /* Subroutine of type_unification_real. Args are like the variables at the
9455 call site. ARG is an overloaded function (or template-id); we try
9456 deducing template args from each of the overloads, and if only one
9457 succeeds, we go with that. Modifies TARGS and returns 0 on success. */
9460 resolve_overloaded_unification (tree tparms
,
9464 unification_kind_t strict
,
9467 tree tempargs
= copy_node (targs
);
9471 if (TREE_CODE (arg
) == ADDR_EXPR
)
9473 arg
= TREE_OPERAND (arg
, 0);
9479 if (TREE_CODE (arg
) == COMPONENT_REF
)
9480 /* Handle `&x' where `x' is some static or non-static member
9482 arg
= TREE_OPERAND (arg
, 1);
9484 if (TREE_CODE (arg
) == OFFSET_REF
)
9485 arg
= TREE_OPERAND (arg
, 1);
9487 /* Strip baselink information. */
9488 if (BASELINK_P (arg
))
9489 arg
= BASELINK_FUNCTIONS (arg
);
9491 if (TREE_CODE (arg
) == TEMPLATE_ID_EXPR
)
9493 /* If we got some explicit template args, we need to plug them into
9494 the affected templates before we try to unify, in case the
9495 explicit args will completely resolve the templates in question. */
9497 tree expl_subargs
= TREE_OPERAND (arg
, 1);
9498 arg
= TREE_OPERAND (arg
, 0);
9500 for (; arg
; arg
= OVL_NEXT (arg
))
9502 tree fn
= OVL_CURRENT (arg
);
9505 if (TREE_CODE (fn
) != TEMPLATE_DECL
)
9508 subargs
= get_bindings (fn
, DECL_TEMPLATE_RESULT (fn
),
9509 expl_subargs
, /*check_ret=*/false);
9512 elem
= tsubst (TREE_TYPE (fn
), subargs
, tf_none
, NULL_TREE
);
9513 good
+= try_one_overload (tparms
, targs
, tempargs
, parm
,
9514 elem
, strict
, sub_strict
, addr_p
);
9520 gcc_assert (TREE_CODE (arg
) == OVERLOAD
9521 || TREE_CODE (arg
) == FUNCTION_DECL
);
9523 for (; arg
; arg
= OVL_NEXT (arg
))
9524 good
+= try_one_overload (tparms
, targs
, tempargs
, parm
,
9525 TREE_TYPE (OVL_CURRENT (arg
)),
9526 strict
, sub_strict
, addr_p
);
9529 /* [temp.deduct.type] A template-argument can be deduced from a pointer
9530 to function or pointer to member function argument if the set of
9531 overloaded functions does not contain function templates and at most
9532 one of a set of overloaded functions provides a unique match.
9534 So if we found multiple possibilities, we return success but don't
9539 int i
= TREE_VEC_LENGTH (targs
);
9541 if (TREE_VEC_ELT (tempargs
, i
))
9542 TREE_VEC_ELT (targs
, i
) = TREE_VEC_ELT (tempargs
, i
);
9550 /* Subroutine of resolve_overloaded_unification; does deduction for a single
9551 overload. Fills TARGS with any deduced arguments, or error_mark_node if
9552 different overloads deduce different arguments for a given parm.
9553 ADDR_P is true if the expression for which deduction is being
9554 performed was of the form "& fn" rather than simply "fn".
9556 Returns 1 on success. */
9559 try_one_overload (tree tparms
,
9564 unification_kind_t strict
,
9572 /* [temp.deduct.type] A template-argument can be deduced from a pointer
9573 to function or pointer to member function argument if the set of
9574 overloaded functions does not contain function templates and at most
9575 one of a set of overloaded functions provides a unique match.
9577 So if this is a template, just return success. */
9579 if (uses_template_parms (arg
))
9582 if (TREE_CODE (arg
) == METHOD_TYPE
)
9583 arg
= build_ptrmemfunc_type (build_pointer_type (arg
));
9585 arg
= build_pointer_type (arg
);
9587 sub_strict
|= maybe_adjust_types_for_deduction (strict
, &parm
, &arg
);
9589 /* We don't copy orig_targs for this because if we have already deduced
9590 some template args from previous args, unify would complain when we
9591 try to deduce a template parameter for the same argument, even though
9592 there isn't really a conflict. */
9593 nargs
= TREE_VEC_LENGTH (targs
);
9594 tempargs
= make_tree_vec (nargs
);
9596 if (unify (tparms
, tempargs
, parm
, arg
, sub_strict
) != 0)
9599 /* First make sure we didn't deduce anything that conflicts with
9600 explicitly specified args. */
9601 for (i
= nargs
; i
--; )
9603 tree elt
= TREE_VEC_ELT (tempargs
, i
);
9604 tree oldelt
= TREE_VEC_ELT (orig_targs
, i
);
9608 else if (uses_template_parms (elt
))
9609 /* Since we're unifying against ourselves, we will fill in
9610 template args used in the function parm list with our own
9611 template parms. Discard them. */
9612 TREE_VEC_ELT (tempargs
, i
) = NULL_TREE
;
9613 else if (oldelt
&& !template_args_equal (oldelt
, elt
))
9617 for (i
= nargs
; i
--; )
9619 tree elt
= TREE_VEC_ELT (tempargs
, i
);
9622 TREE_VEC_ELT (targs
, i
) = elt
;
9628 /* Verify that nondeduce template argument agrees with the type
9629 obtained from argument deduction. Return nonzero if the
9634 struct A { typedef int X; };
9635 template <class T, class U> struct C {};
9636 template <class T> struct C<T, typename T::X> {};
9638 Then with the instantiation `C<A, int>', we can deduce that
9639 `T' is `A' but unify () does not check whether `typename T::X'
9640 is `int'. This function ensure that they agree.
9642 TARGS, PARMS are the same as the arguments of unify.
9643 ARGS contains template arguments from all levels. */
9646 verify_class_unification (tree targs
, tree parms
, tree args
)
9648 parms
= tsubst (parms
, add_outermost_template_args (args
, targs
),
9649 tf_none
, NULL_TREE
);
9650 if (parms
== error_mark_node
)
9653 return !comp_template_args (parms
, INNERMOST_TEMPLATE_ARGS (args
));
9656 /* PARM is a template class (perhaps with unbound template
9657 parameters). ARG is a fully instantiated type. If ARG can be
9658 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
9659 TARGS are as for unify. */
9662 try_class_unification (tree tparms
, tree targs
, tree parm
, tree arg
)
9666 if (!CLASSTYPE_TEMPLATE_INFO (arg
)
9667 || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg
))
9668 != most_general_template (CLASSTYPE_TI_TEMPLATE (parm
))))
9671 /* We need to make a new template argument vector for the call to
9672 unify. If we used TARGS, we'd clutter it up with the result of
9673 the attempted unification, even if this class didn't work out.
9674 We also don't want to commit ourselves to all the unifications
9675 we've already done, since unification is supposed to be done on
9676 an argument-by-argument basis. In other words, consider the
9677 following pathological case:
9679 template <int I, int J, int K>
9682 template <int I, int J>
9683 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
9685 template <int I, int J, int K>
9686 void f(S<I, J, K>, S<I, I, I>);
9695 Now, by the time we consider the unification involving `s2', we
9696 already know that we must have `f<0, 0, 0>'. But, even though
9697 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
9698 because there are two ways to unify base classes of S<0, 1, 2>
9699 with S<I, I, I>. If we kept the already deduced knowledge, we
9700 would reject the possibility I=1. */
9701 copy_of_targs
= make_tree_vec (TREE_VEC_LENGTH (targs
));
9703 /* If unification failed, we're done. */
9704 if (unify (tparms
, copy_of_targs
, CLASSTYPE_TI_ARGS (parm
),
9705 CLASSTYPE_TI_ARGS (arg
), UNIFY_ALLOW_NONE
))
9711 /* Given a template type PARM and a class type ARG, find the unique
9712 base type in ARG that is an instance of PARM. We do not examine
9713 ARG itself; only its base-classes. If there is not exactly one
9714 appropriate base class, return NULL_TREE. PARM may be the type of
9715 a partial specialization, as well as a plain template type. Used
9719 get_template_base (tree tparms
, tree targs
, tree parm
, tree arg
)
9721 tree rval
= NULL_TREE
;
9724 gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg
)));
9726 binfo
= TYPE_BINFO (complete_type (arg
));
9728 /* The type could not be completed. */
9731 /* Walk in inheritance graph order. The search order is not
9732 important, and this avoids multiple walks of virtual bases. */
9733 for (binfo
= TREE_CHAIN (binfo
); binfo
; binfo
= TREE_CHAIN (binfo
))
9735 tree r
= try_class_unification (tparms
, targs
, parm
, BINFO_TYPE (binfo
));
9739 /* If there is more than one satisfactory baseclass, then:
9743 If they yield more than one possible deduced A, the type
9747 if (rval
&& !same_type_p (r
, rval
))
9757 /* Returns the level of DECL, which declares a template parameter. */
9760 template_decl_level (tree decl
)
9762 switch (TREE_CODE (decl
))
9766 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl
));
9769 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl
));
9777 /* Decide whether ARG can be unified with PARM, considering only the
9778 cv-qualifiers of each type, given STRICT as documented for unify.
9779 Returns nonzero iff the unification is OK on that basis. */
9782 check_cv_quals_for_unify (int strict
, tree arg
, tree parm
)
9784 int arg_quals
= cp_type_quals (arg
);
9785 int parm_quals
= cp_type_quals (parm
);
9787 if (TREE_CODE (parm
) == TEMPLATE_TYPE_PARM
9788 && !(strict
& UNIFY_ALLOW_OUTER_MORE_CV_QUAL
))
9790 /* Although a CVR qualifier is ignored when being applied to a
9791 substituted template parameter ([8.3.2]/1 for example), that
9792 does not apply during deduction [14.8.2.4]/1, (even though
9793 that is not explicitly mentioned, [14.8.2.4]/9 indicates
9794 this). Except when we're allowing additional CV qualifiers
9795 at the outer level [14.8.2.1]/3,1st bullet. */
9796 if ((TREE_CODE (arg
) == REFERENCE_TYPE
9797 || TREE_CODE (arg
) == FUNCTION_TYPE
9798 || TREE_CODE (arg
) == METHOD_TYPE
)
9799 && (parm_quals
& (TYPE_QUAL_CONST
| TYPE_QUAL_VOLATILE
)))
9802 if ((!POINTER_TYPE_P (arg
) && TREE_CODE (arg
) != TEMPLATE_TYPE_PARM
)
9803 && (parm_quals
& TYPE_QUAL_RESTRICT
))
9807 if (!(strict
& (UNIFY_ALLOW_MORE_CV_QUAL
| UNIFY_ALLOW_OUTER_MORE_CV_QUAL
))
9808 && (arg_quals
& parm_quals
) != parm_quals
)
9811 if (!(strict
& (UNIFY_ALLOW_LESS_CV_QUAL
| UNIFY_ALLOW_OUTER_LESS_CV_QUAL
))
9812 && (parm_quals
& arg_quals
) != arg_quals
)
9818 /* Takes parameters as for type_unification. Returns 0 if the
9819 type deduction succeeds, 1 otherwise. The parameter STRICT is a
9820 bitwise or of the following flags:
9823 Require an exact match between PARM and ARG.
9824 UNIFY_ALLOW_MORE_CV_QUAL:
9825 Allow the deduced ARG to be more cv-qualified (by qualification
9826 conversion) than ARG.
9827 UNIFY_ALLOW_LESS_CV_QUAL:
9828 Allow the deduced ARG to be less cv-qualified than ARG.
9829 UNIFY_ALLOW_DERIVED:
9830 Allow the deduced ARG to be a template base class of ARG,
9831 or a pointer to a template base class of the type pointed to by
9833 UNIFY_ALLOW_INTEGER:
9834 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
9835 case for more information.
9836 UNIFY_ALLOW_OUTER_LEVEL:
9837 This is the outermost level of a deduction. Used to determine validity
9838 of qualification conversions. A valid qualification conversion must
9839 have const qualified pointers leading up to the inner type which
9840 requires additional CV quals, except at the outer level, where const
9841 is not required [conv.qual]. It would be normal to set this flag in
9842 addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
9843 UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
9844 This is the outermost level of a deduction, and PARM can be more CV
9845 qualified at this point.
9846 UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
9847 This is the outermost level of a deduction, and PARM can be less CV
9848 qualified at this point. */
9851 unify (tree tparms
, tree targs
, tree parm
, tree arg
, int strict
)
9856 int strict_in
= strict
;
9858 /* I don't think this will do the right thing with respect to types.
9859 But the only case I've seen it in so far has been array bounds, where
9860 signedness is the only information lost, and I think that will be
9862 while (TREE_CODE (parm
) == NOP_EXPR
)
9863 parm
= TREE_OPERAND (parm
, 0);
9865 if (arg
== error_mark_node
)
9867 if (arg
== unknown_type_node
)
9868 /* We can't deduce anything from this, but we might get all the
9869 template args from other function args. */
9872 /* If PARM uses template parameters, then we can't bail out here,
9873 even if ARG == PARM, since we won't record unifications for the
9874 template parameters. We might need them if we're trying to
9875 figure out which of two things is more specialized. */
9876 if (arg
== parm
&& !uses_template_parms (parm
))
9879 /* Immediately reject some pairs that won't unify because of
9880 cv-qualification mismatches. */
9881 if (TREE_CODE (arg
) == TREE_CODE (parm
)
9883 /* It is the elements of the array which hold the cv quals of an array
9884 type, and the elements might be template type parms. We'll check
9886 && TREE_CODE (arg
) != ARRAY_TYPE
9887 /* We check the cv-qualifiers when unifying with template type
9888 parameters below. We want to allow ARG `const T' to unify with
9889 PARM `T' for example, when computing which of two templates
9890 is more specialized, for example. */
9891 && TREE_CODE (arg
) != TEMPLATE_TYPE_PARM
9892 && !check_cv_quals_for_unify (strict_in
, arg
, parm
))
9895 if (!(strict
& UNIFY_ALLOW_OUTER_LEVEL
)
9896 && TYPE_P (parm
) && !CP_TYPE_CONST_P (parm
))
9897 strict
&= ~UNIFY_ALLOW_MORE_CV_QUAL
;
9898 strict
&= ~UNIFY_ALLOW_OUTER_LEVEL
;
9899 strict
&= ~UNIFY_ALLOW_DERIVED
;
9900 strict
&= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL
;
9901 strict
&= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL
;
9903 switch (TREE_CODE (parm
))
9907 case UNBOUND_CLASS_TEMPLATE
:
9908 /* In a type which contains a nested-name-specifier, template
9909 argument values cannot be deduced for template parameters used
9910 within the nested-name-specifier. */
9913 case TEMPLATE_TYPE_PARM
:
9914 case TEMPLATE_TEMPLATE_PARM
:
9915 case BOUND_TEMPLATE_TEMPLATE_PARM
:
9916 tparm
= TREE_VALUE (TREE_VEC_ELT (tparms
, 0));
9918 if (TEMPLATE_TYPE_LEVEL (parm
)
9919 != template_decl_level (tparm
))
9920 /* The PARM is not one we're trying to unify. Just check
9921 to see if it matches ARG. */
9922 return (TREE_CODE (arg
) == TREE_CODE (parm
)
9923 && same_type_p (parm
, arg
)) ? 0 : 1;
9924 idx
= TEMPLATE_TYPE_IDX (parm
);
9925 targ
= TREE_VEC_ELT (targs
, idx
);
9926 tparm
= TREE_VALUE (TREE_VEC_ELT (tparms
, idx
));
9928 /* Check for mixed types and values. */
9929 if ((TREE_CODE (parm
) == TEMPLATE_TYPE_PARM
9930 && TREE_CODE (tparm
) != TYPE_DECL
)
9931 || (TREE_CODE (parm
) == TEMPLATE_TEMPLATE_PARM
9932 && TREE_CODE (tparm
) != TEMPLATE_DECL
))
9935 if (TREE_CODE (parm
) == BOUND_TEMPLATE_TEMPLATE_PARM
)
9937 /* ARG must be constructed from a template class or a template
9938 template parameter. */
9939 if (TREE_CODE (arg
) != BOUND_TEMPLATE_TEMPLATE_PARM
9940 && (TREE_CODE (arg
) != RECORD_TYPE
|| !CLASSTYPE_TEMPLATE_INFO (arg
)))
9944 tree parmtmpl
= TYPE_TI_TEMPLATE (parm
);
9945 tree parmvec
= TYPE_TI_ARGS (parm
);
9946 tree argvec
= INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg
));
9948 = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg
));
9951 /* The parameter and argument roles have to be switched here
9952 in order to handle default arguments properly. For example,
9953 template<template <class> class TT> void f(TT<int>)
9954 should be able to accept vector<int> which comes from
9955 template <class T, class Allocator = allocator>
9958 if (coerce_template_parms (argtmplvec
, parmvec
, parmtmpl
, 0, 1)
9962 /* Deduce arguments T, i from TT<T> or TT<i>.
9963 We check each element of PARMVEC and ARGVEC individually
9964 rather than the whole TREE_VEC since they can have
9965 different number of elements. */
9967 for (i
= 0; i
< TREE_VEC_LENGTH (parmvec
); ++i
)
9969 if (unify (tparms
, targs
,
9970 TREE_VEC_ELT (parmvec
, i
),
9971 TREE_VEC_ELT (argvec
, i
),
9976 arg
= TYPE_TI_TEMPLATE (arg
);
9978 /* Fall through to deduce template name. */
9981 if (TREE_CODE (parm
) == TEMPLATE_TEMPLATE_PARM
9982 || TREE_CODE (parm
) == BOUND_TEMPLATE_TEMPLATE_PARM
)
9984 /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>. */
9986 /* Simple cases: Value already set, does match or doesn't. */
9987 if (targ
!= NULL_TREE
&& template_args_equal (targ
, arg
))
9994 /* If PARM is `const T' and ARG is only `int', we don't have
9995 a match unless we are allowing additional qualification.
9996 If ARG is `const int' and PARM is just `T' that's OK;
9997 that binds `const int' to `T'. */
9998 if (!check_cv_quals_for_unify (strict_in
| UNIFY_ALLOW_LESS_CV_QUAL
,
10002 /* Consider the case where ARG is `const volatile int' and
10003 PARM is `const T'. Then, T should be `volatile int'. */
10004 arg
= cp_build_qualified_type_real
10005 (arg
, cp_type_quals (arg
) & ~cp_type_quals (parm
), tf_none
);
10006 if (arg
== error_mark_node
)
10009 /* Simple cases: Value already set, does match or doesn't. */
10010 if (targ
!= NULL_TREE
&& same_type_p (targ
, arg
))
10015 /* Make sure that ARG is not a variable-sized array. (Note
10016 that were talking about variable-sized arrays (like
10017 `int[n]'), rather than arrays of unknown size (like
10018 `int[]').) We'll get very confused by such a type since
10019 the bound of the array will not be computable in an
10020 instantiation. Besides, such types are not allowed in
10021 ISO C++, so we can do as we please here. */
10022 if (variably_modified_type_p (arg
, NULL_TREE
))
10026 TREE_VEC_ELT (targs
, idx
) = arg
;
10029 case TEMPLATE_PARM_INDEX
:
10030 tparm
= TREE_VALUE (TREE_VEC_ELT (tparms
, 0));
10032 if (TEMPLATE_PARM_LEVEL (parm
)
10033 != template_decl_level (tparm
))
10034 /* The PARM is not one we're trying to unify. Just check
10035 to see if it matches ARG. */
10036 return !(TREE_CODE (arg
) == TREE_CODE (parm
)
10037 && cp_tree_equal (parm
, arg
));
10039 idx
= TEMPLATE_PARM_IDX (parm
);
10040 targ
= TREE_VEC_ELT (targs
, idx
);
10043 return !cp_tree_equal (targ
, arg
);
10045 /* [temp.deduct.type] If, in the declaration of a function template
10046 with a non-type template-parameter, the non-type
10047 template-parameter is used in an expression in the function
10048 parameter-list and, if the corresponding template-argument is
10049 deduced, the template-argument type shall match the type of the
10050 template-parameter exactly, except that a template-argument
10051 deduced from an array bound may be of any integral type.
10052 The non-type parameter might use already deduced type parameters. */
10053 tparm
= tsubst (TREE_TYPE (parm
), targs
, 0, NULL_TREE
);
10054 if (!TREE_TYPE (arg
))
10055 /* Template-parameter dependent expression. Just accept it for now.
10056 It will later be processed in convert_template_argument. */
10058 else if (same_type_p (TREE_TYPE (arg
), tparm
))
10060 else if ((strict
& UNIFY_ALLOW_INTEGER
)
10061 && (TREE_CODE (tparm
) == INTEGER_TYPE
10062 || TREE_CODE (tparm
) == BOOLEAN_TYPE
))
10063 /* Convert the ARG to the type of PARM; the deduced non-type
10064 template argument must exactly match the types of the
10065 corresponding parameter. */
10066 arg
= fold (build_nop (TREE_TYPE (parm
), arg
));
10067 else if (uses_template_parms (tparm
))
10068 /* We haven't deduced the type of this parameter yet. Try again
10074 TREE_VEC_ELT (targs
, idx
) = arg
;
10079 /* A pointer-to-member constant can be unified only with
10080 another constant. */
10081 if (TREE_CODE (arg
) != PTRMEM_CST
)
10084 /* Just unify the class member. It would be useless (and possibly
10085 wrong, depending on the strict flags) to unify also
10086 PTRMEM_CST_CLASS, because we want to be sure that both parm and
10087 arg refer to the same variable, even if through different
10088 classes. For instance:
10090 struct A { int x; };
10093 Unification of &A::x and &B::x must succeed. */
10094 return unify (tparms
, targs
, PTRMEM_CST_MEMBER (parm
),
10095 PTRMEM_CST_MEMBER (arg
), strict
);
10100 if (TREE_CODE (arg
) != POINTER_TYPE
)
10103 /* [temp.deduct.call]
10105 A can be another pointer or pointer to member type that can
10106 be converted to the deduced A via a qualification
10107 conversion (_conv.qual_).
10109 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
10110 This will allow for additional cv-qualification of the
10111 pointed-to types if appropriate. */
10113 if (TREE_CODE (TREE_TYPE (arg
)) == RECORD_TYPE
)
10114 /* The derived-to-base conversion only persists through one
10115 level of pointers. */
10116 strict
|= (strict_in
& UNIFY_ALLOW_DERIVED
);
10118 return unify (tparms
, targs
, TREE_TYPE (parm
),
10119 TREE_TYPE (arg
), strict
);
10122 case REFERENCE_TYPE
:
10123 if (TREE_CODE (arg
) != REFERENCE_TYPE
)
10125 return unify (tparms
, targs
, TREE_TYPE (parm
), TREE_TYPE (arg
),
10126 strict
& UNIFY_ALLOW_MORE_CV_QUAL
);
10129 if (TREE_CODE (arg
) != ARRAY_TYPE
)
10131 if ((TYPE_DOMAIN (parm
) == NULL_TREE
)
10132 != (TYPE_DOMAIN (arg
) == NULL_TREE
))
10134 if (TYPE_DOMAIN (parm
) != NULL_TREE
)
10139 parm_max
= TYPE_MAX_VALUE (TYPE_DOMAIN (parm
));
10140 arg_max
= TYPE_MAX_VALUE (TYPE_DOMAIN (arg
));
10142 /* Our representation of array types uses "N - 1" as the
10143 TYPE_MAX_VALUE for an array with "N" elements, if "N" is
10144 not an integer constant. */
10145 if (TREE_CODE (parm_max
) == MINUS_EXPR
)
10147 arg_max
= fold_build2 (PLUS_EXPR
,
10150 TREE_OPERAND (parm_max
, 1));
10151 parm_max
= TREE_OPERAND (parm_max
, 0);
10154 if (unify (tparms
, targs
, parm_max
, arg_max
, UNIFY_ALLOW_INTEGER
))
10157 return unify (tparms
, targs
, TREE_TYPE (parm
), TREE_TYPE (arg
),
10158 strict
& UNIFY_ALLOW_MORE_CV_QUAL
);
10165 case ENUMERAL_TYPE
:
10167 if (TREE_CODE (arg
) != TREE_CODE (parm
))
10170 /* We have already checked cv-qualification at the top of the
10172 if (!same_type_ignoring_top_level_qualifiers_p (arg
, parm
))
10175 /* As far as unification is concerned, this wins. Later checks
10176 will invalidate it if necessary. */
10179 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
10180 /* Type INTEGER_CST can come from ordinary constant template args. */
10182 while (TREE_CODE (arg
) == NOP_EXPR
)
10183 arg
= TREE_OPERAND (arg
, 0);
10185 if (TREE_CODE (arg
) != INTEGER_CST
)
10187 return !tree_int_cst_equal (parm
, arg
);
10192 if (TREE_CODE (arg
) != TREE_VEC
)
10194 if (TREE_VEC_LENGTH (parm
) != TREE_VEC_LENGTH (arg
))
10196 for (i
= 0; i
< TREE_VEC_LENGTH (parm
); ++i
)
10197 if (unify (tparms
, targs
,
10198 TREE_VEC_ELT (parm
, i
), TREE_VEC_ELT (arg
, i
),
10206 if (TREE_CODE (arg
) != TREE_CODE (parm
))
10209 if (TYPE_PTRMEMFUNC_P (parm
))
10211 if (!TYPE_PTRMEMFUNC_P (arg
))
10214 return unify (tparms
, targs
,
10215 TYPE_PTRMEMFUNC_FN_TYPE (parm
),
10216 TYPE_PTRMEMFUNC_FN_TYPE (arg
),
10220 if (CLASSTYPE_TEMPLATE_INFO (parm
))
10222 tree t
= NULL_TREE
;
10224 if (strict_in
& UNIFY_ALLOW_DERIVED
)
10226 /* First, we try to unify the PARM and ARG directly. */
10227 t
= try_class_unification (tparms
, targs
,
10232 /* Fallback to the special case allowed in
10233 [temp.deduct.call]:
10235 If P is a class, and P has the form
10236 template-id, then A can be a derived class of
10237 the deduced A. Likewise, if P is a pointer to
10238 a class of the form template-id, A can be a
10239 pointer to a derived class pointed to by the
10241 t
= get_template_base (tparms
, targs
, parm
, arg
);
10247 else if (CLASSTYPE_TEMPLATE_INFO (arg
)
10248 && (CLASSTYPE_TI_TEMPLATE (parm
)
10249 == CLASSTYPE_TI_TEMPLATE (arg
)))
10250 /* Perhaps PARM is something like S<U> and ARG is S<int>.
10251 Then, we should unify `int' and `U'. */
10254 /* There's no chance of unification succeeding. */
10257 return unify (tparms
, targs
, CLASSTYPE_TI_ARGS (parm
),
10258 CLASSTYPE_TI_ARGS (t
), UNIFY_ALLOW_NONE
);
10260 else if (!same_type_ignoring_top_level_qualifiers_p (parm
, arg
))
10265 case FUNCTION_TYPE
:
10266 if (TREE_CODE (arg
) != TREE_CODE (parm
))
10269 if (unify (tparms
, targs
, TREE_TYPE (parm
),
10270 TREE_TYPE (arg
), UNIFY_ALLOW_NONE
))
10272 return type_unification_real (tparms
, targs
, TYPE_ARG_TYPES (parm
),
10273 TYPE_ARG_TYPES (arg
), 1, DEDUCE_EXACT
,
10274 TREE_CODE (parm
) == METHOD_TYPE
);
10277 /* Unify a pointer to member with a pointer to member function, which
10278 deduces the type of the member as a function type. */
10279 if (TYPE_PTRMEMFUNC_P (arg
))
10283 cp_cv_quals cv_quals
;
10285 /* Check top-level cv qualifiers */
10286 if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE
, arg
, parm
))
10289 if (unify (tparms
, targs
, TYPE_OFFSET_BASETYPE (parm
),
10290 TYPE_PTRMEMFUNC_OBJECT_TYPE (arg
), UNIFY_ALLOW_NONE
))
10293 /* Determine the type of the function we are unifying against. */
10294 method_type
= TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg
));
10296 build_function_type (TREE_TYPE (method_type
),
10297 TREE_CHAIN (TYPE_ARG_TYPES (method_type
)));
10299 /* Extract the cv-qualifiers of the member function from the
10300 implicit object parameter and place them on the function
10301 type to be restored later. */
10303 cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type
))));
10304 fntype
= build_qualified_type (fntype
, cv_quals
);
10305 return unify (tparms
, targs
, TREE_TYPE (parm
), fntype
, strict
);
10308 if (TREE_CODE (arg
) != OFFSET_TYPE
)
10310 if (unify (tparms
, targs
, TYPE_OFFSET_BASETYPE (parm
),
10311 TYPE_OFFSET_BASETYPE (arg
), UNIFY_ALLOW_NONE
))
10313 return unify (tparms
, targs
, TREE_TYPE (parm
), TREE_TYPE (arg
),
10317 if (DECL_TEMPLATE_PARM_P (parm
))
10318 return unify (tparms
, targs
, DECL_INITIAL (parm
), arg
, strict
);
10319 if (arg
!= integral_constant_value (parm
))
10324 case TEMPLATE_DECL
:
10325 /* Matched cases are handled by the ARG == PARM test above. */
10329 gcc_assert (EXPR_P (parm
));
10331 /* We must be looking at an expression. This can happen with
10335 void foo(S<I>, S<I + 2>);
10337 This is a "nondeduced context":
10341 The nondeduced contexts are:
10343 --A type that is a template-id in which one or more of
10344 the template-arguments is an expression that references
10345 a template-parameter.
10347 In these cases, we assume deduction succeeded, but don't
10348 actually infer any unifications. */
10350 if (!uses_template_parms (parm
)
10351 && !template_args_equal (parm
, arg
))
10358 /* Note that DECL can be defined in this translation unit, if
10362 mark_definable (tree decl
)
10365 DECL_NOT_REALLY_EXTERN (decl
) = 1;
10366 FOR_EACH_CLONE (clone
, decl
)
10367 DECL_NOT_REALLY_EXTERN (clone
) = 1;
10370 /* Called if RESULT is explicitly instantiated, or is a member of an
10371 explicitly instantiated class. */
10374 mark_decl_instantiated (tree result
, int extern_p
)
10376 SET_DECL_EXPLICIT_INSTANTIATION (result
);
10378 /* If this entity has already been written out, it's too late to
10379 make any modifications. */
10380 if (TREE_ASM_WRITTEN (result
))
10383 if (TREE_CODE (result
) != FUNCTION_DECL
)
10384 /* The TREE_PUBLIC flag for function declarations will have been
10385 set correctly by tsubst. */
10386 TREE_PUBLIC (result
) = 1;
10388 /* This might have been set by an earlier implicit instantiation. */
10389 DECL_COMDAT (result
) = 0;
10392 DECL_NOT_REALLY_EXTERN (result
) = 0;
10395 mark_definable (result
);
10396 /* Always make artificials weak. */
10397 if (DECL_ARTIFICIAL (result
) && flag_weak
)
10398 comdat_linkage (result
);
10399 /* For WIN32 we also want to put explicit instantiations in
10400 linkonce sections. */
10401 else if (TREE_PUBLIC (result
))
10402 maybe_make_one_only (result
);
10405 /* If EXTERN_P, then this function will not be emitted -- unless
10406 followed by an explicit instantiation, at which point its linkage
10407 will be adjusted. If !EXTERN_P, then this function will be
10408 emitted here. In neither circumstance do we want
10409 import_export_decl to adjust the linkage. */
10410 DECL_INTERFACE_KNOWN (result
) = 1;
10413 /* Given two function templates PAT1 and PAT2, return:
10415 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
10416 -1 if PAT2 is more specialized than PAT1.
10417 0 if neither is more specialized.
10419 LEN indicates the number of parameters we should consider
10420 (defaulted parameters should not be considered).
10422 The 1998 std underspecified function template partial ordering, and
10423 DR214 addresses the issue. We take pairs of arguments, one from
10424 each of the templates, and deduce them against each other. One of
10425 the templates will be more specialized if all the *other*
10426 template's arguments deduce against its arguments and at least one
10427 of its arguments *does* *not* deduce against the other template's
10428 corresponding argument. Deduction is done as for class templates.
10429 The arguments used in deduction have reference and top level cv
10430 qualifiers removed. Iff both arguments were originally reference
10431 types *and* deduction succeeds in both directions, the template
10432 with the more cv-qualified argument wins for that pairing (if
10433 neither is more cv-qualified, they both are equal). Unlike regular
10434 deduction, after all the arguments have been deduced in this way,
10435 we do *not* verify the deduced template argument values can be
10436 substituted into non-deduced contexts, nor do we have to verify
10437 that all template arguments have been deduced. */
10440 more_specialized_fn (tree pat1
, tree pat2
, int len
)
10442 tree decl1
= DECL_TEMPLATE_RESULT (pat1
);
10443 tree decl2
= DECL_TEMPLATE_RESULT (pat2
);
10444 tree targs1
= make_tree_vec (DECL_NTPARMS (pat1
));
10445 tree targs2
= make_tree_vec (DECL_NTPARMS (pat2
));
10446 tree tparms1
= DECL_INNERMOST_TEMPLATE_PARMS (pat1
);
10447 tree tparms2
= DECL_INNERMOST_TEMPLATE_PARMS (pat2
);
10448 tree args1
= TYPE_ARG_TYPES (TREE_TYPE (decl1
));
10449 tree args2
= TYPE_ARG_TYPES (TREE_TYPE (decl2
));
10453 /* If only one is a member function, they are unordered. */
10454 if (DECL_FUNCTION_MEMBER_P (decl1
) != DECL_FUNCTION_MEMBER_P (decl2
))
10457 /* Don't consider 'this' parameter. */
10458 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1
))
10459 args1
= TREE_CHAIN (args1
);
10460 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2
))
10461 args2
= TREE_CHAIN (args2
);
10463 /* If only one is a conversion operator, they are unordered. */
10464 if (DECL_CONV_FN_P (decl1
) != DECL_CONV_FN_P (decl2
))
10467 /* Consider the return type for a conversion function */
10468 if (DECL_CONV_FN_P (decl1
))
10470 args1
= tree_cons (NULL_TREE
, TREE_TYPE (TREE_TYPE (decl1
)), args1
);
10471 args2
= tree_cons (NULL_TREE
, TREE_TYPE (TREE_TYPE (decl2
)), args2
);
10475 processing_template_decl
++;
10479 tree arg1
= TREE_VALUE (args1
);
10480 tree arg2
= TREE_VALUE (args2
);
10481 int deduce1
, deduce2
;
10485 if (TREE_CODE (arg1
) == REFERENCE_TYPE
)
10487 arg1
= TREE_TYPE (arg1
);
10488 quals1
= cp_type_quals (arg1
);
10491 if (TREE_CODE (arg2
) == REFERENCE_TYPE
)
10493 arg2
= TREE_TYPE (arg2
);
10494 quals2
= cp_type_quals (arg2
);
10497 if ((quals1
< 0) != (quals2
< 0))
10499 /* Only of the args is a reference, see if we should apply
10500 array/function pointer decay to it. This is not part of
10501 DR214, but is, IMHO, consistent with the deduction rules
10502 for the function call itself, and with our earlier
10503 implementation of the underspecified partial ordering
10504 rules. (nathan). */
10507 switch (TREE_CODE (arg1
))
10510 arg1
= TREE_TYPE (arg1
);
10512 case FUNCTION_TYPE
:
10513 arg1
= build_pointer_type (arg1
);
10522 switch (TREE_CODE (arg2
))
10525 arg2
= TREE_TYPE (arg2
);
10527 case FUNCTION_TYPE
:
10528 arg2
= build_pointer_type (arg2
);
10537 arg1
= TYPE_MAIN_VARIANT (arg1
);
10538 arg2
= TYPE_MAIN_VARIANT (arg2
);
10540 deduce1
= !unify (tparms1
, targs1
, arg1
, arg2
, UNIFY_ALLOW_NONE
);
10541 deduce2
= !unify (tparms2
, targs2
, arg2
, arg1
, UNIFY_ALLOW_NONE
);
10547 if (better1
< 0 && better2
< 0)
10548 /* We've failed to deduce something in either direction.
10549 These must be unordered. */
10552 if (deduce1
&& deduce2
&& quals1
>= 0 && quals2
>= 0)
10554 /* Deduces in both directions, see if quals can
10555 disambiguate. Pretend the worse one failed to deduce. */
10556 if ((quals1
& quals2
) == quals2
)
10558 if ((quals1
& quals2
) == quals1
)
10561 if (deduce1
&& !deduce2
&& !better2
)
10563 if (deduce2
&& !deduce1
&& !better1
)
10566 args1
= TREE_CHAIN (args1
);
10567 args2
= TREE_CHAIN (args2
);
10570 processing_template_decl
--;
10572 return (better1
> 0) - (better2
> 0);
10575 /* Given two class template specialization list nodes PAT1 and PAT2, return:
10577 1 if PAT1 is more specialized than PAT2 as described in [temp.class.order].
10578 -1 if PAT2 is more specialized than PAT1.
10579 0 if neither is more specialized.
10581 FULL_ARGS is the full set of template arguments that triggers this
10582 partial ordering. */
10585 more_specialized_class (tree pat1
, tree pat2
, tree full_args
)
10590 /* Just like what happens for functions, if we are ordering between
10591 different class template specializations, we may encounter dependent
10592 types in the arguments, and we need our dependency check functions
10593 to behave correctly. */
10594 ++processing_template_decl
;
10595 targs
= get_class_bindings (TREE_VALUE (pat1
), TREE_PURPOSE (pat1
),
10596 add_outermost_template_args (full_args
, TREE_PURPOSE (pat2
)));
10600 targs
= get_class_bindings (TREE_VALUE (pat2
), TREE_PURPOSE (pat2
),
10601 add_outermost_template_args (full_args
, TREE_PURPOSE (pat1
)));
10604 --processing_template_decl
;
10609 /* Return the template arguments that will produce the function signature
10610 DECL from the function template FN, with the explicit template
10611 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is true, the return type must
10612 also match. Return NULL_TREE if no satisfactory arguments could be
10616 get_bindings (tree fn
, tree decl
, tree explicit_args
, bool check_rettype
)
10618 int ntparms
= DECL_NTPARMS (fn
);
10619 tree targs
= make_tree_vec (ntparms
);
10621 tree decl_arg_types
;
10623 /* Substitute the explicit template arguments into the type of DECL.
10624 The call to fn_type_unification will handle substitution into the
10626 decl_type
= TREE_TYPE (decl
);
10627 if (explicit_args
&& uses_template_parms (decl_type
))
10630 tree converted_args
;
10632 if (DECL_TEMPLATE_INFO (decl
))
10633 tmpl
= DECL_TI_TEMPLATE (decl
);
10635 /* We can get here for some invalid specializations. */
10639 = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl
),
10640 explicit_args
, NULL_TREE
,
10641 tf_none
, /*require_all_arguments=*/0));
10642 if (converted_args
== error_mark_node
)
10645 decl_type
= tsubst (decl_type
, converted_args
, tf_none
, NULL_TREE
);
10646 if (decl_type
== error_mark_node
)
10650 decl_arg_types
= TYPE_ARG_TYPES (decl_type
);
10651 /* Never do unification on the 'this' parameter. */
10652 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl
))
10653 decl_arg_types
= TREE_CHAIN (decl_arg_types
);
10655 if (fn_type_unification (fn
, explicit_args
, targs
,
10657 (check_rettype
|| DECL_CONV_FN_P (fn
)
10658 ? TREE_TYPE (decl_type
) : NULL_TREE
),
10665 /* Return the innermost template arguments that, when applied to a
10666 template specialization whose innermost template parameters are
10667 TPARMS, and whose specialization arguments are PARMS, yield the
10670 For example, suppose we have:
10672 template <class T, class U> struct S {};
10673 template <class T> struct S<T*, int> {};
10675 Then, suppose we want to get `S<double*, int>'. The TPARMS will be
10676 {T}, the PARMS will be {T*, int} and the ARGS will be {double*,
10677 int}. The resulting vector will be {double}, indicating that `T'
10678 is bound to `double'. */
10681 get_class_bindings (tree tparms
, tree parms
, tree args
)
10683 int i
, ntparms
= TREE_VEC_LENGTH (tparms
);
10684 tree vec
= make_tree_vec (ntparms
);
10686 if (unify (tparms
, vec
, parms
, INNERMOST_TEMPLATE_ARGS (args
),
10690 for (i
= 0; i
< ntparms
; ++i
)
10691 if (! TREE_VEC_ELT (vec
, i
))
10694 if (verify_class_unification (vec
, parms
, args
))
10700 /* In INSTANTIATIONS is a list of <INSTANTIATION, TEMPLATE> pairs.
10701 Pick the most specialized template, and return the corresponding
10702 instantiation, or if there is no corresponding instantiation, the
10703 template itself. If there is no most specialized template,
10704 error_mark_node is returned. If there are no templates at all,
10705 NULL_TREE is returned. */
10708 most_specialized_instantiation (tree instantiations
)
10712 if (!instantiations
)
10715 ++processing_template_decl
;
10717 champ
= instantiations
;
10718 for (fn
= TREE_CHAIN (instantiations
); fn
; fn
= TREE_CHAIN (fn
))
10722 if (get_bindings (TREE_VALUE (champ
),
10723 DECL_TEMPLATE_RESULT (TREE_VALUE (fn
)),
10724 NULL_TREE
, /*check_ret=*/false))
10727 if (get_bindings (TREE_VALUE (fn
),
10728 DECL_TEMPLATE_RESULT (TREE_VALUE (champ
)),
10729 NULL_TREE
, /*check_ret=*/false))
10735 /* Equally specialized, move to next function. If there
10736 is no next function, nothing's most specialized. */
10737 fn
= TREE_CHAIN (fn
);
10743 /* Now verify that champ is better than everything earlier in the
10744 instantiation list. */
10745 for (fn
= instantiations
; fn
!= champ
; fn
= TREE_CHAIN (fn
))
10746 if (get_bindings (TREE_VALUE (champ
),
10747 DECL_TEMPLATE_RESULT (TREE_VALUE (fn
)),
10748 NULL_TREE
, /*check_ret=*/false)
10749 || !get_bindings (TREE_VALUE (fn
),
10750 DECL_TEMPLATE_RESULT (TREE_VALUE (champ
)),
10751 NULL_TREE
, /*check_ret=*/false))
10757 processing_template_decl
--;
10760 return error_mark_node
;
10762 return TREE_PURPOSE (champ
) ? TREE_PURPOSE (champ
) : TREE_VALUE (champ
);
10765 /* Return the most specialized of the list of templates in FNS that can
10766 produce an instantiation matching DECL, given the explicit template
10767 arguments EXPLICIT_ARGS. */
10770 most_specialized (tree fns
, tree decl
, tree explicit_args
)
10772 tree candidates
= NULL_TREE
;
10775 for (fn
= fns
; fn
; fn
= TREE_CHAIN (fn
))
10777 tree candidate
= TREE_VALUE (fn
);
10779 args
= get_bindings (candidate
, decl
, explicit_args
, /*check_ret=*/true);
10781 candidates
= tree_cons (NULL_TREE
, candidate
, candidates
);
10784 return most_specialized_instantiation (candidates
);
10787 /* If DECL is a specialization of some template, return the most
10788 general such template. Otherwise, returns NULL_TREE.
10790 For example, given:
10792 template <class T> struct S { template <class U> void f(U); };
10794 if TMPL is `template <class U> void S<int>::f(U)' this will return
10795 the full template. This function will not trace past partial
10796 specializations, however. For example, given in addition:
10798 template <class T> struct S<T*> { template <class U> void f(U); };
10800 if TMPL is `template <class U> void S<int*>::f(U)' this will return
10801 `template <class T> template <class U> S<T*>::f(U)'. */
10804 most_general_template (tree decl
)
10806 /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
10807 an immediate specialization. */
10808 if (TREE_CODE (decl
) == FUNCTION_DECL
)
10810 if (DECL_TEMPLATE_INFO (decl
)) {
10811 decl
= DECL_TI_TEMPLATE (decl
);
10813 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
10814 template friend. */
10815 if (TREE_CODE (decl
) != TEMPLATE_DECL
)
10821 /* Look for more and more general templates. */
10822 while (DECL_TEMPLATE_INFO (decl
))
10824 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
10825 (See cp-tree.h for details.) */
10826 if (TREE_CODE (DECL_TI_TEMPLATE (decl
)) != TEMPLATE_DECL
)
10829 if (CLASS_TYPE_P (TREE_TYPE (decl
))
10830 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl
)))
10833 /* Stop if we run into an explicitly specialized class template. */
10834 if (!DECL_NAMESPACE_SCOPE_P (decl
)
10835 && DECL_CONTEXT (decl
)
10836 && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl
)))
10839 decl
= DECL_TI_TEMPLATE (decl
);
10845 /* Return the most specialized of the class template specializations
10846 of TMPL which can produce an instantiation matching ARGS, or
10847 error_mark_node if the choice is ambiguous. */
10850 most_specialized_class (tree tmpl
, tree args
)
10852 tree list
= NULL_TREE
;
10857 tmpl
= most_general_template (tmpl
);
10858 for (t
= DECL_TEMPLATE_SPECIALIZATIONS (tmpl
); t
; t
= TREE_CHAIN (t
))
10861 = get_class_bindings (TREE_VALUE (t
), TREE_PURPOSE (t
), args
);
10864 list
= tree_cons (TREE_PURPOSE (t
), TREE_VALUE (t
), list
);
10865 TREE_TYPE (list
) = TREE_TYPE (t
);
10874 t
= TREE_CHAIN (t
);
10875 for (; t
; t
= TREE_CHAIN (t
))
10877 fate
= more_specialized_class (champ
, t
, args
);
10884 t
= TREE_CHAIN (t
);
10886 return error_mark_node
;
10892 for (t
= list
; t
&& t
!= champ
; t
= TREE_CHAIN (t
))
10894 fate
= more_specialized_class (champ
, t
, args
);
10896 return error_mark_node
;
10902 /* Explicitly instantiate DECL. */
10905 do_decl_instantiation (tree decl
, tree storage
)
10907 tree result
= NULL_TREE
;
10911 /* An error occurred, for which grokdeclarator has already issued
10912 an appropriate message. */
10914 else if (! DECL_LANG_SPECIFIC (decl
))
10916 error ("explicit instantiation of non-template %q#D", decl
);
10919 else if (TREE_CODE (decl
) == VAR_DECL
)
10921 /* There is an asymmetry here in the way VAR_DECLs and
10922 FUNCTION_DECLs are handled by grokdeclarator. In the case of
10923 the latter, the DECL we get back will be marked as a
10924 template instantiation, and the appropriate
10925 DECL_TEMPLATE_INFO will be set up. This does not happen for
10926 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
10927 should handle VAR_DECLs as it currently handles
10929 result
= lookup_field (DECL_CONTEXT (decl
), DECL_NAME (decl
), 0, false);
10930 if (!result
|| TREE_CODE (result
) != VAR_DECL
)
10932 error ("no matching template for %qD found", decl
);
10936 else if (TREE_CODE (decl
) != FUNCTION_DECL
)
10938 error ("explicit instantiation of %q#D", decl
);
10944 /* Check for various error cases. Note that if the explicit
10945 instantiation is valid the RESULT will currently be marked as an
10946 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
10947 until we get here. */
10949 if (DECL_TEMPLATE_SPECIALIZATION (result
))
10951 /* DR 259 [temp.spec].
10953 Both an explicit instantiation and a declaration of an explicit
10954 specialization shall not appear in a program unless the explicit
10955 instantiation follows a declaration of the explicit specialization.
10957 For a given set of template parameters, if an explicit
10958 instantiation of a template appears after a declaration of an
10959 explicit specialization for that template, the explicit
10960 instantiation has no effect. */
10963 else if (DECL_EXPLICIT_INSTANTIATION (result
))
10967 No program shall explicitly instantiate any template more
10970 We check DECL_NOT_REALLY_EXTERN so as not to complain when
10971 the first instantiation was `extern' and the second is not,
10972 and EXTERN_P for the opposite case. */
10973 if (DECL_NOT_REALLY_EXTERN (result
) && !extern_p
)
10974 pedwarn ("duplicate explicit instantiation of %q#D", result
);
10975 /* If an "extern" explicit instantiation follows an ordinary
10976 explicit instantiation, the template is instantiated. */
10980 else if (!DECL_IMPLICIT_INSTANTIATION (result
))
10982 error ("no matching template for %qD found", result
);
10985 else if (!DECL_TEMPLATE_INFO (result
))
10987 pedwarn ("explicit instantiation of non-template %q#D", result
);
10991 if (storage
== NULL_TREE
)
10993 else if (storage
== ridpointers
[(int) RID_EXTERN
])
10995 if (pedantic
&& !in_system_header
)
10996 pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
11001 error ("storage class %qD applied to template instantiation", storage
);
11003 mark_decl_instantiated (result
, extern_p
);
11005 instantiate_decl (result
, /*defer_ok=*/1,
11006 /*expl_inst_class_mem_p=*/false);
11010 mark_class_instantiated (tree t
, int extern_p
)
11012 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t
);
11013 SET_CLASSTYPE_INTERFACE_KNOWN (t
);
11014 CLASSTYPE_INTERFACE_ONLY (t
) = extern_p
;
11015 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t
)) = extern_p
;
11018 CLASSTYPE_DEBUG_REQUESTED (t
) = 1;
11019 rest_of_type_compilation (t
, 1);
11023 /* Called from do_type_instantiation through binding_table_foreach to
11024 do recursive instantiation for the type bound in ENTRY. */
11026 bt_instantiate_type_proc (binding_entry entry
, void *data
)
11028 tree storage
= *(tree
*) data
;
11030 if (IS_AGGR_TYPE (entry
->type
)
11031 && !uses_template_parms (CLASSTYPE_TI_ARGS (entry
->type
)))
11032 do_type_instantiation (TYPE_MAIN_DECL (entry
->type
), storage
, 0);
11035 /* Called from do_type_instantiation to instantiate a member
11036 (a member function or a static member variable) of an
11037 explicitly instantiated class template. */
11039 instantiate_class_member (tree decl
, int extern_p
)
11041 mark_decl_instantiated (decl
, extern_p
);
11043 instantiate_decl (decl
, /*defer_ok=*/1,
11044 /*expl_inst_class_mem_p=*/true);
11047 /* Perform an explicit instantiation of template class T. STORAGE, if
11048 non-null, is the RID for extern, inline or static. COMPLAIN is
11049 nonzero if this is called from the parser, zero if called recursively,
11050 since the standard is unclear (as detailed below). */
11053 do_type_instantiation (tree t
, tree storage
, tsubst_flags_t complain
)
11058 int previous_instantiation_extern_p
= 0;
11060 if (TREE_CODE (t
) == TYPE_DECL
)
11063 if (! CLASS_TYPE_P (t
) || ! CLASSTYPE_TEMPLATE_INFO (t
))
11065 error ("explicit instantiation of non-template type %qT", t
);
11071 if (!COMPLETE_TYPE_P (t
))
11073 if (complain
& tf_error
)
11074 error ("explicit instantiation of %q#T before definition of template",
11079 if (storage
!= NULL_TREE
)
11081 if (pedantic
&& !in_system_header
)
11082 pedwarn("ISO C++ forbids the use of %qE on explicit instantiations",
11085 if (storage
== ridpointers
[(int) RID_INLINE
])
11087 else if (storage
== ridpointers
[(int) RID_EXTERN
])
11089 else if (storage
== ridpointers
[(int) RID_STATIC
])
11093 error ("storage class %qD applied to template instantiation",
11099 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t
))
11101 /* DR 259 [temp.spec].
11103 Both an explicit instantiation and a declaration of an explicit
11104 specialization shall not appear in a program unless the explicit
11105 instantiation follows a declaration of the explicit specialization.
11107 For a given set of template parameters, if an explicit
11108 instantiation of a template appears after a declaration of an
11109 explicit specialization for that template, the explicit
11110 instantiation has no effect. */
11113 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t
))
11117 No program shall explicitly instantiate any template more
11120 If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
11121 instantiation was `extern'. If EXTERN_P then the second is.
11122 These cases are OK. */
11123 previous_instantiation_extern_p
= CLASSTYPE_INTERFACE_ONLY (t
);
11125 if (!previous_instantiation_extern_p
&& !extern_p
11126 && (complain
& tf_error
))
11127 pedwarn ("duplicate explicit instantiation of %q#T", t
);
11129 /* If we've already instantiated the template, just return now. */
11130 if (!CLASSTYPE_INTERFACE_ONLY (t
))
11134 mark_class_instantiated (t
, extern_p
);
11142 /* In contrast to implicit instantiation, where only the
11143 declarations, and not the definitions, of members are
11144 instantiated, we have here:
11148 The explicit instantiation of a class template specialization
11149 implies the instantiation of all of its members not
11150 previously explicitly specialized in the translation unit
11151 containing the explicit instantiation.
11153 Of course, we can't instantiate member template classes, since
11154 we don't have any arguments for them. Note that the standard
11155 is unclear on whether the instantiation of the members are
11156 *explicit* instantiations or not. However, the most natural
11157 interpretation is that it should be an explicit instantiation. */
11160 for (tmp
= TYPE_METHODS (t
); tmp
; tmp
= TREE_CHAIN (tmp
))
11161 if (TREE_CODE (tmp
) == FUNCTION_DECL
11162 && DECL_TEMPLATE_INSTANTIATION (tmp
))
11163 instantiate_class_member (tmp
, extern_p
);
11165 for (tmp
= TYPE_FIELDS (t
); tmp
; tmp
= TREE_CHAIN (tmp
))
11166 if (TREE_CODE (tmp
) == VAR_DECL
&& DECL_TEMPLATE_INSTANTIATION (tmp
))
11167 instantiate_class_member (tmp
, extern_p
);
11169 if (CLASSTYPE_NESTED_UTDS (t
))
11170 binding_table_foreach (CLASSTYPE_NESTED_UTDS (t
),
11171 bt_instantiate_type_proc
, &storage
);
11175 /* Given a function DECL, which is a specialization of TMPL, modify
11176 DECL to be a re-instantiation of TMPL with the same template
11177 arguments. TMPL should be the template into which tsubst'ing
11178 should occur for DECL, not the most general template.
11180 One reason for doing this is a scenario like this:
11183 void f(const T&, int i);
11185 void g() { f(3, 7); }
11188 void f(const T& t, const int i) { }
11190 Note that when the template is first instantiated, with
11191 instantiate_template, the resulting DECL will have no name for the
11192 first parameter, and the wrong type for the second. So, when we go
11193 to instantiate the DECL, we regenerate it. */
11196 regenerate_decl_from_template (tree decl
, tree tmpl
)
11198 /* The arguments used to instantiate DECL, from the most general
11203 args
= DECL_TI_ARGS (decl
);
11204 code_pattern
= DECL_TEMPLATE_RESULT (tmpl
);
11206 /* Make sure that we can see identifiers, and compute access
11208 push_access_scope (decl
);
11210 if (TREE_CODE (decl
) == FUNCTION_DECL
)
11218 args_depth
= TMPL_ARGS_DEPTH (args
);
11219 parms_depth
= TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl
));
11220 if (args_depth
> parms_depth
)
11221 args
= get_innermost_template_args (args
, parms_depth
);
11223 specs
= tsubst_exception_specification (TREE_TYPE (code_pattern
),
11224 args
, tf_error
, NULL_TREE
);
11226 TREE_TYPE (decl
) = build_exception_variant (TREE_TYPE (decl
),
11229 /* Merge parameter declarations. */
11230 decl_parm
= skip_artificial_parms_for (decl
,
11231 DECL_ARGUMENTS (decl
));
11233 = skip_artificial_parms_for (code_pattern
,
11234 DECL_ARGUMENTS (code_pattern
));
11240 if (DECL_NAME (decl_parm
) != DECL_NAME (pattern_parm
))
11241 DECL_NAME (decl_parm
) = DECL_NAME (pattern_parm
);
11242 parm_type
= tsubst (TREE_TYPE (pattern_parm
), args
, tf_error
,
11244 parm_type
= type_decays_to (parm_type
);
11245 if (!same_type_p (TREE_TYPE (decl_parm
), parm_type
))
11246 TREE_TYPE (decl_parm
) = parm_type
;
11247 attributes
= DECL_ATTRIBUTES (pattern_parm
);
11248 if (DECL_ATTRIBUTES (decl_parm
) != attributes
)
11250 DECL_ATTRIBUTES (decl_parm
) = attributes
;
11251 cplus_decl_attributes (&decl_parm
, attributes
, /*flags=*/0);
11253 decl_parm
= TREE_CHAIN (decl_parm
);
11254 pattern_parm
= TREE_CHAIN (pattern_parm
);
11257 /* Merge additional specifiers from the CODE_PATTERN. */
11258 if (DECL_DECLARED_INLINE_P (code_pattern
)
11259 && !DECL_DECLARED_INLINE_P (decl
))
11260 DECL_DECLARED_INLINE_P (decl
) = 1;
11261 if (DECL_INLINE (code_pattern
) && !DECL_INLINE (decl
))
11262 DECL_INLINE (decl
) = 1;
11264 else if (TREE_CODE (decl
) == VAR_DECL
)
11266 if (!DECL_INITIALIZED_IN_CLASS_P (decl
)
11267 && DECL_INITIAL (code_pattern
))
11268 DECL_INITIAL (decl
) =
11269 tsubst_expr (DECL_INITIAL (code_pattern
), args
,
11270 tf_error
, DECL_TI_TEMPLATE (decl
));
11273 gcc_unreachable ();
11275 pop_access_scope (decl
);
11278 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
11279 substituted to get DECL. */
11282 template_for_substitution (tree decl
)
11284 tree tmpl
= DECL_TI_TEMPLATE (decl
);
11286 /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
11287 for the instantiation. This is not always the most general
11288 template. Consider, for example:
11291 struct S { template <class U> void f();
11292 template <> void f<int>(); };
11294 and an instantiation of S<double>::f<int>. We want TD to be the
11295 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
11296 while (/* An instantiation cannot have a definition, so we need a
11297 more general template. */
11298 DECL_TEMPLATE_INSTANTIATION (tmpl
)
11299 /* We must also deal with friend templates. Given:
11301 template <class T> struct S {
11302 template <class U> friend void f() {};
11305 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
11306 so far as the language is concerned, but that's still
11307 where we get the pattern for the instantiation from. On
11308 other hand, if the definition comes outside the class, say:
11310 template <class T> struct S {
11311 template <class U> friend void f();
11313 template <class U> friend void f() {}
11315 we don't need to look any further. That's what the check for
11316 DECL_INITIAL is for. */
11317 || (TREE_CODE (decl
) == FUNCTION_DECL
11318 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl
)
11319 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl
))))
11321 /* The present template, TD, should not be a definition. If it
11322 were a definition, we should be using it! Note that we
11323 cannot restructure the loop to just keep going until we find
11324 a template with a definition, since that might go too far if
11325 a specialization was declared, but not defined. */
11326 gcc_assert (TREE_CODE (decl
) != VAR_DECL
11327 || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl
)));
11329 /* Fetch the more general template. */
11330 tmpl
= DECL_TI_TEMPLATE (tmpl
);
11336 /* Produce the definition of D, a _DECL generated from a template. If
11337 DEFER_OK is nonzero, then we don't have to actually do the
11338 instantiation now; we just have to do it sometime. Normally it is
11339 an error if this is an explicit instantiation but D is undefined.
11340 EXPL_INST_CLASS_MEM_P is true iff D is a member of an
11341 explicitly instantiated class template. */
11344 instantiate_decl (tree d
, int defer_ok
,
11345 bool expl_inst_class_mem_p
)
11347 tree tmpl
= DECL_TI_TEMPLATE (d
);
11354 int pattern_defined
;
11356 location_t saved_loc
= input_location
;
11358 /* This function should only be used to instantiate templates for
11359 functions and static member variables. */
11360 gcc_assert (TREE_CODE (d
) == FUNCTION_DECL
11361 || TREE_CODE (d
) == VAR_DECL
);
11363 /* Variables are never deferred; if instantiation is required, they
11364 are instantiated right away. That allows for better code in the
11365 case that an expression refers to the value of the variable --
11366 if the variable has a constant value the referring expression can
11367 take advantage of that fact. */
11368 if (TREE_CODE (d
) == VAR_DECL
)
11371 /* Don't instantiate cloned functions. Instead, instantiate the
11372 functions they cloned. */
11373 if (TREE_CODE (d
) == FUNCTION_DECL
&& DECL_CLONED_FUNCTION_P (d
))
11374 d
= DECL_CLONED_FUNCTION (d
);
11376 if (DECL_TEMPLATE_INSTANTIATED (d
))
11377 /* D has already been instantiated. It might seem reasonable to
11378 check whether or not D is an explicit instantiation, and, if so,
11379 stop here. But when an explicit instantiation is deferred
11380 until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
11381 is set, even though we still need to do the instantiation. */
11384 /* If we already have a specialization of this declaration, then
11385 there's no reason to instantiate it. Note that
11386 retrieve_specialization gives us both instantiations and
11387 specializations, so we must explicitly check
11388 DECL_TEMPLATE_SPECIALIZATION. */
11389 gen_tmpl
= most_general_template (tmpl
);
11390 gen_args
= DECL_TI_ARGS (d
);
11391 spec
= retrieve_specialization (gen_tmpl
, gen_args
,
11392 /*class_specializations_p=*/false);
11393 if (spec
!= NULL_TREE
&& DECL_TEMPLATE_SPECIALIZATION (spec
))
11396 /* This needs to happen before any tsubsting. */
11397 if (! push_tinst_level (d
))
11400 timevar_push (TV_PARSE
);
11402 /* We may be in the middle of deferred access check. Disable it now. */
11403 push_deferring_access_checks (dk_no_deferred
);
11405 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
11406 for the instantiation. */
11407 td
= template_for_substitution (d
);
11408 code_pattern
= DECL_TEMPLATE_RESULT (td
);
11410 if ((DECL_NAMESPACE_SCOPE_P (d
) && !DECL_INITIALIZED_IN_CLASS_P (d
))
11411 || DECL_TEMPLATE_SPECIALIZATION (td
))
11412 /* In the case of a friend template whose definition is provided
11413 outside the class, we may have too many arguments. Drop the
11414 ones we don't need. The same is true for specializations. */
11415 args
= get_innermost_template_args
11416 (gen_args
, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td
)));
11420 if (TREE_CODE (d
) == FUNCTION_DECL
)
11421 pattern_defined
= (DECL_SAVED_TREE (code_pattern
) != NULL_TREE
);
11423 pattern_defined
= ! DECL_IN_AGGR_P (code_pattern
);
11424 /* Unless an explicit instantiation directive has already determined
11425 the linkage of D, remember that a definition is available for
11427 if (pattern_defined
11428 && !DECL_INTERFACE_KNOWN (d
)
11429 && !DECL_NOT_REALLY_EXTERN (d
))
11430 mark_definable (d
);
11432 input_location
= DECL_SOURCE_LOCATION (d
);
11434 /* If D is a member of an explicitly instantiated class template,
11435 and no definition is available, treat it like an implicit
11437 if (!pattern_defined
&& expl_inst_class_mem_p
11438 && DECL_EXPLICIT_INSTANTIATION (d
))
11440 DECL_NOT_REALLY_EXTERN (d
) = 0;
11441 DECL_INTERFACE_KNOWN (d
) = 0;
11442 SET_DECL_IMPLICIT_INSTANTIATION (d
);
11447 /* Recheck the substitutions to obtain any warning messages
11448 about ignoring cv qualifiers. */
11449 tree gen
= DECL_TEMPLATE_RESULT (gen_tmpl
);
11450 tree type
= TREE_TYPE (gen
);
11452 /* Make sure that we can see identifiers, and compute access
11453 correctly. D is already the target FUNCTION_DECL with the
11455 push_access_scope (d
);
11457 if (TREE_CODE (gen
) == FUNCTION_DECL
)
11459 tsubst (DECL_ARGUMENTS (gen
), gen_args
, tf_error
| tf_warning
, d
);
11460 tsubst (TYPE_RAISES_EXCEPTIONS (type
), gen_args
,
11461 tf_error
| tf_warning
, d
);
11462 /* Don't simply tsubst the function type, as that will give
11463 duplicate warnings about poor parameter qualifications.
11464 The function arguments are the same as the decl_arguments
11465 without the top level cv qualifiers. */
11466 type
= TREE_TYPE (type
);
11468 tsubst (type
, gen_args
, tf_error
| tf_warning
, d
);
11470 pop_access_scope (d
);
11473 /* We should have set up DECL_INITIAL in instantiate_class_template
11474 for in-class definitions of static data members. */
11475 gcc_assert (!(TREE_CODE (d
) == VAR_DECL
11476 && DECL_INITIALIZED_IN_CLASS_P (d
)
11477 && DECL_INITIAL (d
) == NULL_TREE
));
11479 /* Do not instantiate templates that we know will be defined
11481 if (DECL_INTERFACE_KNOWN (d
)
11482 && DECL_REALLY_EXTERN (d
)
11483 && ! (TREE_CODE (d
) == FUNCTION_DECL
11484 && DECL_INLINE (d
)))
11486 /* Defer all other templates, unless we have been explicitly
11487 forbidden from doing so. We restore the source position here
11488 because it's used by add_pending_template. */
11489 else if (! pattern_defined
|| defer_ok
)
11491 input_location
= saved_loc
;
11493 if (at_eof
&& !pattern_defined
11494 && DECL_EXPLICIT_INSTANTIATION (d
))
11497 The definition of a non-exported function template, a
11498 non-exported member function template, or a non-exported
11499 member function or static data member of a class template
11500 shall be present in every translation unit in which it is
11501 explicitly instantiated. */
11503 ("explicit instantiation of %qD but no definition available", d
);
11505 add_pending_template (d
);
11508 /* Tell the repository that D is available in this translation unit
11509 -- and see if it is supposed to be instantiated here. */
11510 if (TREE_PUBLIC (d
) && !DECL_REALLY_EXTERN (d
) && !repo_emit_p (d
))
11512 /* In a PCH file, despite the fact that the repository hasn't
11513 requested instantiation in the PCH it is still possible that
11514 an instantiation will be required in a file that includes the
11517 add_pending_template (d
);
11518 /* Instantiate inline functions so that the inliner can do its
11519 job, even though we'll not be emitting a copy of this
11521 if (!(TREE_CODE (d
) == FUNCTION_DECL
11522 && flag_inline_trees
11523 && DECL_DECLARED_INLINE_P (d
)))
11527 need_push
= !cfun
|| !global_bindings_p ();
11529 push_to_top_level ();
11531 /* Mark D as instantiated so that recursive calls to
11532 instantiate_decl do not try to instantiate it again. */
11533 DECL_TEMPLATE_INSTANTIATED (d
) = 1;
11535 /* Regenerate the declaration in case the template has been modified
11536 by a subsequent redeclaration. */
11537 regenerate_decl_from_template (d
, td
);
11539 /* We already set the file and line above. Reset them now in case
11540 they changed as a result of calling regenerate_decl_from_template. */
11541 input_location
= DECL_SOURCE_LOCATION (d
);
11543 if (TREE_CODE (d
) == VAR_DECL
)
11545 /* Clear out DECL_RTL; whatever was there before may not be right
11546 since we've reset the type of the declaration. */
11547 SET_DECL_RTL (d
, NULL_RTX
);
11548 DECL_IN_AGGR_P (d
) = 0;
11550 /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
11551 initializer. That function will defer actual emission until
11552 we have a chance to determine linkage. */
11553 DECL_EXTERNAL (d
) = 0;
11555 /* Enter the scope of D so that access-checking works correctly. */
11556 push_nested_class (DECL_CONTEXT (d
));
11558 (!DECL_INITIALIZED_IN_CLASS_P (d
)
11559 ? DECL_INITIAL (d
) : NULL_TREE
),
11561 pop_nested_class ();
11563 else if (TREE_CODE (d
) == FUNCTION_DECL
)
11565 htab_t saved_local_specializations
;
11570 /* Save away the current list, in case we are instantiating one
11571 template from within the body of another. */
11572 saved_local_specializations
= local_specializations
;
11574 /* Set up the list of local specializations. */
11575 local_specializations
= htab_create (37,
11576 hash_local_specialization
,
11577 eq_local_specializations
,
11580 /* Set up context. */
11581 start_preparsed_function (d
, NULL_TREE
, SF_PRE_PARSED
);
11583 /* Create substitution entries for the parameters. */
11584 subst_decl
= DECL_TEMPLATE_RESULT (template_for_substitution (d
));
11585 tmpl_parm
= DECL_ARGUMENTS (subst_decl
);
11586 spec_parm
= DECL_ARGUMENTS (d
);
11587 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d
))
11589 register_local_specialization (spec_parm
, tmpl_parm
);
11590 spec_parm
= skip_artificial_parms_for (d
, spec_parm
);
11591 tmpl_parm
= skip_artificial_parms_for (subst_decl
, tmpl_parm
);
11595 register_local_specialization (spec_parm
, tmpl_parm
);
11596 tmpl_parm
= TREE_CHAIN (tmpl_parm
);
11597 spec_parm
= TREE_CHAIN (spec_parm
);
11599 gcc_assert (!spec_parm
);
11601 /* Substitute into the body of the function. */
11602 tsubst_expr (DECL_SAVED_TREE (code_pattern
), args
,
11603 tf_error
| tf_warning
, tmpl
);
11605 /* We don't need the local specializations any more. */
11606 htab_delete (local_specializations
);
11607 local_specializations
= saved_local_specializations
;
11609 /* Finish the function. */
11610 d
= finish_function (0);
11611 expand_or_defer_fn (d
);
11614 /* We're not deferring instantiation any more. */
11615 TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d
)) = 0;
11618 pop_from_top_level ();
11621 input_location
= saved_loc
;
11622 pop_deferring_access_checks ();
11623 pop_tinst_level ();
11625 timevar_pop (TV_PARSE
);
11630 /* Run through the list of templates that we wish we could
11631 instantiate, and instantiate any we can. RETRIES is the
11632 number of times we retry pending template instantiation. */
11635 instantiate_pending_templates (int retries
)
11638 tree last
= NULL_TREE
;
11640 location_t saved_loc
= input_location
;
11641 int saved_in_system_header
= in_system_header
;
11643 /* Instantiating templates may trigger vtable generation. This in turn
11644 may require further template instantiations. We place a limit here
11645 to avoid infinite loop. */
11646 if (pending_templates
&& retries
>= max_tinst_depth
)
11648 error ("template instantiation depth exceeds maximum of %d"
11649 " instantiating %q+D, possibly from virtual table generation"
11650 " (use -ftemplate-depth-NN to increase the maximum)",
11651 max_tinst_depth
, TREE_VALUE (pending_templates
));
11659 t
= &pending_templates
;
11662 tree instantiation
= TREE_VALUE (*t
);
11664 reopen_tinst_level (TREE_PURPOSE (*t
));
11666 if (TYPE_P (instantiation
))
11670 if (!COMPLETE_TYPE_P (instantiation
))
11672 instantiate_class_template (instantiation
);
11673 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation
))
11674 for (fn
= TYPE_METHODS (instantiation
);
11676 fn
= TREE_CHAIN (fn
))
11677 if (! DECL_ARTIFICIAL (fn
))
11678 instantiate_decl (fn
,
11680 /*expl_inst_class_mem_p=*/false);
11681 if (COMPLETE_TYPE_P (instantiation
))
11685 if (COMPLETE_TYPE_P (instantiation
))
11686 /* If INSTANTIATION has been instantiated, then we don't
11687 need to consider it again in the future. */
11688 *t
= TREE_CHAIN (*t
);
11692 t
= &TREE_CHAIN (*t
);
11697 if (!DECL_TEMPLATE_SPECIALIZATION (instantiation
)
11698 && !DECL_TEMPLATE_INSTANTIATED (instantiation
))
11701 = instantiate_decl (instantiation
,
11703 /*expl_inst_class_mem_p=*/false);
11704 if (DECL_TEMPLATE_INSTANTIATED (instantiation
))
11708 if (DECL_TEMPLATE_SPECIALIZATION (instantiation
)
11709 || DECL_TEMPLATE_INSTANTIATED (instantiation
))
11710 /* If INSTANTIATION has been instantiated, then we don't
11711 need to consider it again in the future. */
11712 *t
= TREE_CHAIN (*t
);
11716 t
= &TREE_CHAIN (*t
);
11720 current_tinst_level
= NULL_TREE
;
11722 last_pending_template
= last
;
11724 while (reconsider
);
11726 input_location
= saved_loc
;
11727 in_system_header
= saved_in_system_header
;
11730 /* Substitute ARGVEC into T, which is a list of initializers for
11731 either base class or a non-static data member. The TREE_PURPOSEs
11732 are DECLs, and the TREE_VALUEs are the initializer values. Used by
11733 instantiate_decl. */
11736 tsubst_initializer_list (tree t
, tree argvec
)
11738 tree inits
= NULL_TREE
;
11740 for (; t
; t
= TREE_CHAIN (t
))
11745 decl
= tsubst_copy (TREE_PURPOSE (t
), argvec
, tf_error
| tf_warning
,
11747 decl
= expand_member_init (decl
);
11748 if (decl
&& !DECL_P (decl
))
11749 in_base_initializer
= 1;
11751 init
= tsubst_expr (TREE_VALUE (t
), argvec
, tf_error
| tf_warning
,
11753 in_base_initializer
= 0;
11757 init
= build_tree_list (decl
, init
);
11758 TREE_CHAIN (init
) = inits
;
11765 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
11768 set_current_access_from_decl (tree decl
)
11770 if (TREE_PRIVATE (decl
))
11771 current_access_specifier
= access_private_node
;
11772 else if (TREE_PROTECTED (decl
))
11773 current_access_specifier
= access_protected_node
;
11775 current_access_specifier
= access_public_node
;
11778 /* Instantiate an enumerated type. TAG is the template type, NEWTAG
11779 is the instantiation (which should have been created with
11780 start_enum) and ARGS are the template arguments to use. */
11783 tsubst_enum (tree tag
, tree newtag
, tree args
)
11787 for (e
= TYPE_VALUES (tag
); e
; e
= TREE_CHAIN (e
))
11792 decl
= TREE_VALUE (e
);
11793 /* Note that in a template enum, the TREE_VALUE is the
11794 CONST_DECL, not the corresponding INTEGER_CST. */
11795 value
= tsubst_expr (DECL_INITIAL (decl
),
11796 args
, tf_error
| tf_warning
,
11799 /* Give this enumeration constant the correct access. */
11800 set_current_access_from_decl (decl
);
11802 /* Actually build the enumerator itself. */
11803 build_enumerator (DECL_NAME (decl
), value
, newtag
);
11806 finish_enum (newtag
);
11807 DECL_SOURCE_LOCATION (TYPE_NAME (newtag
))
11808 = DECL_SOURCE_LOCATION (TYPE_NAME (tag
));
11811 /* DECL is a FUNCTION_DECL that is a template specialization. Return
11812 its type -- but without substituting the innermost set of template
11813 arguments. So, innermost set of template parameters will appear in
11817 get_mostly_instantiated_function_type (tree decl
)
11825 tmpl
= most_general_template (DECL_TI_TEMPLATE (decl
));
11826 targs
= DECL_TI_ARGS (decl
);
11827 tparms
= DECL_TEMPLATE_PARMS (tmpl
);
11828 parm_depth
= TMPL_PARMS_DEPTH (tparms
);
11830 /* There should be as many levels of arguments as there are levels
11832 gcc_assert (parm_depth
== TMPL_ARGS_DEPTH (targs
));
11834 fn_type
= TREE_TYPE (tmpl
);
11836 if (parm_depth
== 1)
11837 /* No substitution is necessary. */
11841 int i
, save_access_control
;
11844 /* Replace the innermost level of the TARGS with NULL_TREEs to
11845 let tsubst know not to substitute for those parameters. */
11846 partial_args
= make_tree_vec (TREE_VEC_LENGTH (targs
));
11847 for (i
= 1; i
< TMPL_ARGS_DEPTH (targs
); ++i
)
11848 SET_TMPL_ARGS_LEVEL (partial_args
, i
,
11849 TMPL_ARGS_LEVEL (targs
, i
));
11850 SET_TMPL_ARGS_LEVEL (partial_args
,
11851 TMPL_ARGS_DEPTH (targs
),
11852 make_tree_vec (DECL_NTPARMS (tmpl
)));
11854 /* Disable access control as this function is used only during
11856 save_access_control
= flag_access_control
;
11857 flag_access_control
= 0;
11859 ++processing_template_decl
;
11860 /* Now, do the (partial) substitution to figure out the
11861 appropriate function type. */
11862 fn_type
= tsubst (fn_type
, partial_args
, tf_error
, NULL_TREE
);
11863 --processing_template_decl
;
11865 /* Substitute into the template parameters to obtain the real
11866 innermost set of parameters. This step is important if the
11867 innermost set of template parameters contains value
11868 parameters whose types depend on outer template parameters. */
11869 TREE_VEC_LENGTH (partial_args
)--;
11870 tparms
= tsubst_template_parms (tparms
, partial_args
, tf_error
);
11872 flag_access_control
= save_access_control
;
11878 /* Return truthvalue if we're processing a template different from
11879 the last one involved in diagnostics. */
11881 problematic_instantiation_changed (void)
11883 return last_template_error_tick
!= tinst_level_tick
;
11886 /* Remember current template involved in diagnostics. */
11888 record_last_problematic_instantiation (void)
11890 last_template_error_tick
= tinst_level_tick
;
11894 current_instantiation (void)
11896 return current_tinst_level
;
11899 /* [temp.param] Check that template non-type parm TYPE is of an allowable
11900 type. Return zero for ok, nonzero for disallowed. Issue error and
11901 warning messages under control of COMPLAIN. */
11904 invalid_nontype_parm_type_p (tree type
, tsubst_flags_t complain
)
11906 if (INTEGRAL_TYPE_P (type
))
11908 else if (POINTER_TYPE_P (type
))
11910 else if (TYPE_PTR_TO_MEMBER_P (type
))
11912 else if (TREE_CODE (type
) == TEMPLATE_TYPE_PARM
)
11914 else if (TREE_CODE (type
) == TYPENAME_TYPE
)
11917 if (complain
& tf_error
)
11918 error ("%q#T is not a valid type for a template constant parameter", type
);
11922 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
11923 Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
11926 dependent_type_p_r (tree type
)
11932 A type is dependent if it is:
11934 -- a template parameter. Template template parameters are types
11935 for us (since TYPE_P holds true for them) so we handle
11937 if (TREE_CODE (type
) == TEMPLATE_TYPE_PARM
11938 || TREE_CODE (type
) == TEMPLATE_TEMPLATE_PARM
)
11940 /* -- a qualified-id with a nested-name-specifier which contains a
11941 class-name that names a dependent type or whose unqualified-id
11942 names a dependent type. */
11943 if (TREE_CODE (type
) == TYPENAME_TYPE
)
11945 /* -- a cv-qualified type where the cv-unqualified type is
11947 type
= TYPE_MAIN_VARIANT (type
);
11948 /* -- a compound type constructed from any dependent type. */
11949 if (TYPE_PTR_TO_MEMBER_P (type
))
11950 return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type
))
11951 || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
11953 else if (TREE_CODE (type
) == POINTER_TYPE
11954 || TREE_CODE (type
) == REFERENCE_TYPE
)
11955 return dependent_type_p (TREE_TYPE (type
));
11956 else if (TREE_CODE (type
) == FUNCTION_TYPE
11957 || TREE_CODE (type
) == METHOD_TYPE
)
11961 if (dependent_type_p (TREE_TYPE (type
)))
11963 for (arg_type
= TYPE_ARG_TYPES (type
);
11965 arg_type
= TREE_CHAIN (arg_type
))
11966 if (dependent_type_p (TREE_VALUE (arg_type
)))
11970 /* -- an array type constructed from any dependent type or whose
11971 size is specified by a constant expression that is
11972 value-dependent. */
11973 if (TREE_CODE (type
) == ARRAY_TYPE
)
11975 if (TYPE_DOMAIN (type
)
11976 && ((value_dependent_expression_p
11977 (TYPE_MAX_VALUE (TYPE_DOMAIN (type
))))
11978 || (type_dependent_expression_p
11979 (TYPE_MAX_VALUE (TYPE_DOMAIN (type
))))))
11981 return dependent_type_p (TREE_TYPE (type
));
11984 /* -- a template-id in which either the template name is a template
11986 if (TREE_CODE (type
) == BOUND_TEMPLATE_TEMPLATE_PARM
)
11988 /* ... or any of the template arguments is a dependent type or
11989 an expression that is type-dependent or value-dependent. */
11990 else if (CLASS_TYPE_P (type
) && CLASSTYPE_TEMPLATE_INFO (type
)
11991 && (any_dependent_template_arguments_p
11992 (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type
)))))
11995 /* All TYPEOF_TYPEs are dependent; if the argument of the `typeof'
11996 expression is not type-dependent, then it should already been
11998 if (TREE_CODE (type
) == TYPEOF_TYPE
)
12001 /* The standard does not specifically mention types that are local
12002 to template functions or local classes, but they should be
12003 considered dependent too. For example:
12005 template <int I> void f() {
12010 The size of `E' cannot be known until the value of `I' has been
12011 determined. Therefore, `E' must be considered dependent. */
12012 scope
= TYPE_CONTEXT (type
);
12013 if (scope
&& TYPE_P (scope
))
12014 return dependent_type_p (scope
);
12015 else if (scope
&& TREE_CODE (scope
) == FUNCTION_DECL
)
12016 return type_dependent_expression_p (scope
);
12018 /* Other types are non-dependent. */
12022 /* Returns TRUE if TYPE is dependent, in the sense of
12023 [temp.dep.type]. */
12026 dependent_type_p (tree type
)
12028 /* If there are no template parameters in scope, then there can't be
12029 any dependent types. */
12030 if (!processing_template_decl
)
12033 /* If the type is NULL, we have not computed a type for the entity
12034 in question; in that case, the type is dependent. */
12038 /* Erroneous types can be considered non-dependent. */
12039 if (type
== error_mark_node
)
12042 /* If we have not already computed the appropriate value for TYPE,
12044 if (!TYPE_DEPENDENT_P_VALID (type
))
12046 TYPE_DEPENDENT_P (type
) = dependent_type_p_r (type
);
12047 TYPE_DEPENDENT_P_VALID (type
) = 1;
12050 return TYPE_DEPENDENT_P (type
);
12053 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION. */
12056 dependent_scope_ref_p (tree expression
, bool criterion (tree
))
12061 gcc_assert (TREE_CODE (expression
) == SCOPE_REF
);
12063 if (!TYPE_P (TREE_OPERAND (expression
, 0)))
12066 scope
= TREE_OPERAND (expression
, 0);
12067 name
= TREE_OPERAND (expression
, 1);
12071 An id-expression is type-dependent if it contains a
12072 nested-name-specifier that contains a class-name that names a
12074 /* The suggested resolution to Core Issue 2 implies that if the
12075 qualifying type is the current class, then we must peek
12078 && currently_open_class (scope
)
12079 && !criterion (name
))
12081 if (dependent_type_p (scope
))
12087 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
12088 [temp.dep.constexpr] */
12091 value_dependent_expression_p (tree expression
)
12093 if (!processing_template_decl
)
12096 /* A name declared with a dependent type. */
12097 if (DECL_P (expression
) && type_dependent_expression_p (expression
))
12100 switch (TREE_CODE (expression
))
12102 case IDENTIFIER_NODE
:
12103 /* A name that has not been looked up -- must be dependent. */
12106 case TEMPLATE_PARM_INDEX
:
12107 /* A non-type template parm. */
12111 /* A non-type template parm. */
12112 if (DECL_TEMPLATE_PARM_P (expression
))
12117 /* A constant with integral or enumeration type and is initialized
12118 with an expression that is value-dependent. */
12119 if (DECL_INITIAL (expression
)
12120 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression
))
12121 && value_dependent_expression_p (DECL_INITIAL (expression
)))
12125 case DYNAMIC_CAST_EXPR
:
12126 case STATIC_CAST_EXPR
:
12127 case CONST_CAST_EXPR
:
12128 case REINTERPRET_CAST_EXPR
:
12130 /* These expressions are value-dependent if the type to which
12131 the cast occurs is dependent or the expression being casted
12132 is value-dependent. */
12134 tree type
= TREE_TYPE (expression
);
12136 if (dependent_type_p (type
))
12139 /* A functional cast has a list of operands. */
12140 expression
= TREE_OPERAND (expression
, 0);
12143 /* If there are no operands, it must be an expression such
12144 as "int()". This should not happen for aggregate types
12145 because it would form non-constant expressions. */
12146 gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type
));
12151 if (TREE_CODE (expression
) == TREE_LIST
)
12153 for (; expression
; expression
= TREE_CHAIN (expression
))
12154 if (value_dependent_expression_p (TREE_VALUE (expression
)))
12159 return value_dependent_expression_p (expression
);
12164 /* A `sizeof' expression is value-dependent if the operand is
12166 expression
= TREE_OPERAND (expression
, 0);
12167 if (TYPE_P (expression
))
12168 return dependent_type_p (expression
);
12169 return type_dependent_expression_p (expression
);
12172 return dependent_scope_ref_p (expression
, value_dependent_expression_p
);
12174 case COMPONENT_REF
:
12175 return (value_dependent_expression_p (TREE_OPERAND (expression
, 0))
12176 || value_dependent_expression_p (TREE_OPERAND (expression
, 1)));
12179 /* A CALL_EXPR is value-dependent if any argument is
12180 value-dependent. Why do we have to handle CALL_EXPRs in this
12181 function at all? First, some function calls, those for which
12182 value_dependent_expression_p is true, man appear in constant
12183 expressions. Second, there appear to be bugs which result in
12184 other CALL_EXPRs reaching this point. */
12186 tree function
= TREE_OPERAND (expression
, 0);
12187 tree args
= TREE_OPERAND (expression
, 1);
12189 if (value_dependent_expression_p (function
))
12195 if (TREE_CODE (args
) == TREE_LIST
)
12197 for (; args
; args
= TREE_CHAIN (args
))
12198 if (value_dependent_expression_p (TREE_VALUE (args
)))
12203 return value_dependent_expression_p (args
);
12207 /* A constant expression is value-dependent if any subexpression is
12208 value-dependent. */
12209 switch (TREE_CODE_CLASS (TREE_CODE (expression
)))
12211 case tcc_reference
:
12213 return (value_dependent_expression_p
12214 (TREE_OPERAND (expression
, 0)));
12216 case tcc_comparison
:
12218 return ((value_dependent_expression_p
12219 (TREE_OPERAND (expression
, 0)))
12220 || (value_dependent_expression_p
12221 (TREE_OPERAND (expression
, 1))));
12223 case tcc_expression
:
12226 for (i
= 0; i
< TREE_CODE_LENGTH (TREE_CODE (expression
)); ++i
)
12227 /* In some cases, some of the operands may be missing.
12228 (For example, in the case of PREDECREMENT_EXPR, the
12229 amount to increment by may be missing.) That doesn't
12230 make the expression dependent. */
12231 if (TREE_OPERAND (expression
, i
)
12232 && (value_dependent_expression_p
12233 (TREE_OPERAND (expression
, i
))))
12243 /* The expression is not value-dependent. */
12247 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
12248 [temp.dep.expr]. */
12251 type_dependent_expression_p (tree expression
)
12253 if (!processing_template_decl
)
12256 if (expression
== error_mark_node
)
12259 /* An unresolved name is always dependent. */
12260 if (TREE_CODE (expression
) == IDENTIFIER_NODE
)
12263 /* Some expression forms are never type-dependent. */
12264 if (TREE_CODE (expression
) == PSEUDO_DTOR_EXPR
12265 || TREE_CODE (expression
) == SIZEOF_EXPR
12266 || TREE_CODE (expression
) == ALIGNOF_EXPR
12267 || TREE_CODE (expression
) == TYPEID_EXPR
12268 || TREE_CODE (expression
) == DELETE_EXPR
12269 || TREE_CODE (expression
) == VEC_DELETE_EXPR
12270 || TREE_CODE (expression
) == THROW_EXPR
)
12273 /* The types of these expressions depends only on the type to which
12274 the cast occurs. */
12275 if (TREE_CODE (expression
) == DYNAMIC_CAST_EXPR
12276 || TREE_CODE (expression
) == STATIC_CAST_EXPR
12277 || TREE_CODE (expression
) == CONST_CAST_EXPR
12278 || TREE_CODE (expression
) == REINTERPRET_CAST_EXPR
12279 || TREE_CODE (expression
) == CAST_EXPR
)
12280 return dependent_type_p (TREE_TYPE (expression
));
12282 /* The types of these expressions depends only on the type created
12283 by the expression. */
12284 if (TREE_CODE (expression
) == NEW_EXPR
12285 || TREE_CODE (expression
) == VEC_NEW_EXPR
)
12287 /* For NEW_EXPR tree nodes created inside a template, either
12288 the object type itself or a TREE_LIST may appear as the
12290 tree type
= TREE_OPERAND (expression
, 1);
12291 if (TREE_CODE (type
) == TREE_LIST
)
12292 /* This is an array type. We need to check array dimensions
12294 return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type
)))
12295 || value_dependent_expression_p
12296 (TREE_OPERAND (TREE_VALUE (type
), 1));
12298 return dependent_type_p (type
);
12301 if (TREE_CODE (expression
) == SCOPE_REF
12302 && dependent_scope_ref_p (expression
,
12303 type_dependent_expression_p
))
12306 if (TREE_CODE (expression
) == FUNCTION_DECL
12307 && DECL_LANG_SPECIFIC (expression
)
12308 && DECL_TEMPLATE_INFO (expression
)
12309 && (any_dependent_template_arguments_p
12310 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression
)))))
12313 if (TREE_CODE (expression
) == TEMPLATE_DECL
12314 && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression
))
12317 if (TREE_TYPE (expression
) == unknown_type_node
)
12319 if (TREE_CODE (expression
) == ADDR_EXPR
)
12320 return type_dependent_expression_p (TREE_OPERAND (expression
, 0));
12321 if (TREE_CODE (expression
) == COMPONENT_REF
12322 || TREE_CODE (expression
) == OFFSET_REF
)
12324 if (type_dependent_expression_p (TREE_OPERAND (expression
, 0)))
12326 expression
= TREE_OPERAND (expression
, 1);
12327 if (TREE_CODE (expression
) == IDENTIFIER_NODE
)
12330 /* SCOPE_REF with non-null TREE_TYPE is always non-dependent. */
12331 if (TREE_CODE (expression
) == SCOPE_REF
)
12334 if (TREE_CODE (expression
) == BASELINK
)
12335 expression
= BASELINK_FUNCTIONS (expression
);
12337 if (TREE_CODE (expression
) == TEMPLATE_ID_EXPR
)
12339 if (any_dependent_template_arguments_p
12340 (TREE_OPERAND (expression
, 1)))
12342 expression
= TREE_OPERAND (expression
, 0);
12344 gcc_assert (TREE_CODE (expression
) == OVERLOAD
);
12348 if (type_dependent_expression_p (OVL_CURRENT (expression
)))
12350 expression
= OVL_NEXT (expression
);
12355 return (dependent_type_p (TREE_TYPE (expression
)));
12358 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
12359 contains a type-dependent expression. */
12362 any_type_dependent_arguments_p (tree args
)
12366 tree arg
= TREE_VALUE (args
);
12368 if (type_dependent_expression_p (arg
))
12370 args
= TREE_CHAIN (args
);
12375 /* Returns TRUE if the ARG (a template argument) is dependent. */
12378 dependent_template_arg_p (tree arg
)
12380 if (!processing_template_decl
)
12383 if (TREE_CODE (arg
) == TEMPLATE_DECL
12384 || TREE_CODE (arg
) == TEMPLATE_TEMPLATE_PARM
)
12385 return dependent_template_p (arg
);
12386 else if (TYPE_P (arg
))
12387 return dependent_type_p (arg
);
12389 return (type_dependent_expression_p (arg
)
12390 || value_dependent_expression_p (arg
));
12393 /* Returns true if ARGS (a collection of template arguments) contains
12394 any dependent arguments. */
12397 any_dependent_template_arguments_p (tree args
)
12405 for (i
= 0; i
< TMPL_ARGS_DEPTH (args
); ++i
)
12407 tree level
= TMPL_ARGS_LEVEL (args
, i
+ 1);
12408 for (j
= 0; j
< TREE_VEC_LENGTH (level
); ++j
)
12409 if (dependent_template_arg_p (TREE_VEC_ELT (level
, j
)))
12416 /* Returns TRUE if the template TMPL is dependent. */
12419 dependent_template_p (tree tmpl
)
12421 if (TREE_CODE (tmpl
) == OVERLOAD
)
12425 if (dependent_template_p (OVL_FUNCTION (tmpl
)))
12427 tmpl
= OVL_CHAIN (tmpl
);
12432 /* Template template parameters are dependent. */
12433 if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl
)
12434 || TREE_CODE (tmpl
) == TEMPLATE_TEMPLATE_PARM
)
12436 /* So are names that have not been looked up. */
12437 if (TREE_CODE (tmpl
) == SCOPE_REF
12438 || TREE_CODE (tmpl
) == IDENTIFIER_NODE
)
12440 /* So are member templates of dependent classes. */
12441 if (TYPE_P (CP_DECL_CONTEXT (tmpl
)))
12442 return dependent_type_p (DECL_CONTEXT (tmpl
));
12446 /* Returns TRUE if the specialization TMPL<ARGS> is dependent. */
12449 dependent_template_id_p (tree tmpl
, tree args
)
12451 return (dependent_template_p (tmpl
)
12452 || any_dependent_template_arguments_p (args
));
12455 /* TYPE is a TYPENAME_TYPE. Returns the ordinary TYPE to which the
12456 TYPENAME_TYPE corresponds. Returns ERROR_MARK_NODE if no such TYPE
12457 can be found. Note that this function peers inside uninstantiated
12458 templates and therefore should be used only in extremely limited
12459 situations. ONLY_CURRENT_P restricts this peering to the currently
12460 open classes hierarchy (which is required when comparing types). */
12463 resolve_typename_type (tree type
, bool only_current_p
)
12471 gcc_assert (TREE_CODE (type
) == TYPENAME_TYPE
);
12473 scope
= TYPE_CONTEXT (type
);
12474 name
= TYPE_IDENTIFIER (type
);
12476 /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
12477 it first before we can figure out what NAME refers to. */
12478 if (TREE_CODE (scope
) == TYPENAME_TYPE
)
12479 scope
= resolve_typename_type (scope
, only_current_p
);
12480 /* If we don't know what SCOPE refers to, then we cannot resolve the
12482 if (scope
== error_mark_node
|| TREE_CODE (scope
) == TYPENAME_TYPE
)
12483 return error_mark_node
;
12484 /* If the SCOPE is a template type parameter, we have no way of
12485 resolving the name. */
12486 if (TREE_CODE (scope
) == TEMPLATE_TYPE_PARM
)
12488 /* If the SCOPE is not the current instantiation, there's no reason
12489 to look inside it. */
12490 if (only_current_p
&& !currently_open_class (scope
))
12491 return error_mark_node
;
12492 /* If SCOPE is a partial instantiation, it will not have a valid
12493 TYPE_FIELDS list, so use the original template. */
12494 scope
= CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope
);
12495 /* Enter the SCOPE so that name lookup will be resolved as if we
12496 were in the class definition. In particular, SCOPE will no
12497 longer be considered a dependent type. */
12498 pushed_scope
= push_scope (scope
);
12499 /* Look up the declaration. */
12500 decl
= lookup_member (scope
, name
, /*protect=*/0, /*want_type=*/true);
12501 /* Obtain the set of qualifiers applied to the TYPE. */
12502 quals
= cp_type_quals (type
);
12503 /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
12504 find a TEMPLATE_DECL. Otherwise, we want to find a TYPE_DECL. */
12506 type
= error_mark_node
;
12507 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type
)) == IDENTIFIER_NODE
12508 && TREE_CODE (decl
) == TYPE_DECL
)
12509 type
= TREE_TYPE (decl
);
12510 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type
)) == TEMPLATE_ID_EXPR
12511 && DECL_CLASS_TEMPLATE_P (decl
))
12515 /* Obtain the template and the arguments. */
12516 tmpl
= TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type
), 0);
12517 args
= TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type
), 1);
12518 /* Instantiate the template. */
12519 type
= lookup_template_class (tmpl
, args
, NULL_TREE
, NULL_TREE
,
12520 /*entering_scope=*/0, tf_error
| tf_user
);
12523 type
= error_mark_node
;
12524 /* Qualify the resulting type. */
12525 if (type
!= error_mark_node
&& quals
)
12526 type
= cp_build_qualified_type (type
, quals
);
12527 /* Leave the SCOPE. */
12529 pop_scope (pushed_scope
);
12534 /* EXPR is an expression which is not type-dependent. Return a proxy
12535 for EXPR that can be used to compute the types of larger
12536 expressions containing EXPR. */
12539 build_non_dependent_expr (tree expr
)
12543 /* Preserve null pointer constants so that the type of things like
12544 "p == 0" where "p" is a pointer can be determined. */
12545 if (null_ptr_cst_p (expr
))
12547 /* Preserve OVERLOADs; the functions must be available to resolve
12549 inner_expr
= (TREE_CODE (expr
) == ADDR_EXPR
?
12550 TREE_OPERAND (expr
, 0) : expr
);
12551 if (is_overloaded_fn (inner_expr
)
12552 || TREE_CODE (inner_expr
) == OFFSET_REF
)
12554 /* There is no need to return a proxy for a variable. */
12555 if (TREE_CODE (expr
) == VAR_DECL
)
12557 /* Preserve string constants; conversions from string constants to
12558 "char *" are allowed, even though normally a "const char *"
12559 cannot be used to initialize a "char *". */
12560 if (TREE_CODE (expr
) == STRING_CST
)
12562 /* Preserve arithmetic constants, as an optimization -- there is no
12563 reason to create a new node. */
12564 if (TREE_CODE (expr
) == INTEGER_CST
|| TREE_CODE (expr
) == REAL_CST
)
12566 /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
12567 There is at least one place where we want to know that a
12568 particular expression is a throw-expression: when checking a ?:
12569 expression, there are special rules if the second or third
12570 argument is a throw-expression. */
12571 if (TREE_CODE (expr
) == THROW_EXPR
)
12574 if (TREE_CODE (expr
) == COND_EXPR
)
12575 return build3 (COND_EXPR
,
12577 TREE_OPERAND (expr
, 0),
12578 (TREE_OPERAND (expr
, 1)
12579 ? build_non_dependent_expr (TREE_OPERAND (expr
, 1))
12580 : build_non_dependent_expr (TREE_OPERAND (expr
, 0))),
12581 build_non_dependent_expr (TREE_OPERAND (expr
, 2)));
12582 if (TREE_CODE (expr
) == COMPOUND_EXPR
12583 && !COMPOUND_EXPR_OVERLOADED (expr
))
12584 return build2 (COMPOUND_EXPR
,
12586 TREE_OPERAND (expr
, 0),
12587 build_non_dependent_expr (TREE_OPERAND (expr
, 1)));
12589 /* Otherwise, build a NON_DEPENDENT_EXPR.
12591 REFERENCE_TYPEs are not stripped for expressions in templates
12592 because doing so would play havoc with mangling. Consider, for
12595 template <typename T> void f<T& g>() { g(); }
12597 In the body of "f", the expression for "g" will have
12598 REFERENCE_TYPE, even though the standard says that it should
12599 not. The reason is that we must preserve the syntactic form of
12600 the expression so that mangling (say) "f<g>" inside the body of
12601 "f" works out correctly. Therefore, the REFERENCE_TYPE is
12603 return build1 (NON_DEPENDENT_EXPR
, non_reference (TREE_TYPE (expr
)), expr
);
12606 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
12607 Return a new TREE_LIST with the various arguments replaced with
12608 equivalent non-dependent expressions. */
12611 build_non_dependent_args (tree args
)
12616 new_args
= NULL_TREE
;
12617 for (a
= args
; a
; a
= TREE_CHAIN (a
))
12618 new_args
= tree_cons (NULL_TREE
,
12619 build_non_dependent_expr (TREE_VALUE (a
)),
12621 return nreverse (new_args
);
12624 #include "gt-cp-pt.h"