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, 2007 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 3, 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 COPYING3. If not see
21 <http://www.gnu.org/licenses/>. */
23 /* Known bugs or deficiencies include:
25 all methods must be provided in header files; can't use a source
26 file that contains only the method templates and "just win". */
30 #include "coretypes.h"
34 #include "pointer-set.h"
38 #include "cp-objcp-common.h"
39 #include "tree-inline.h"
46 #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 VEC(int,heap) *inline_parm_levels;
68 static GTY(()) tree current_tinst_level;
70 static GTY(()) tree saved_access_scope;
72 /* Live only within one (recursive) call to tsubst_expr. We use
73 this to pass the statement expression node from the STMT_EXPR
74 to the EXPR_STMT that is its result. */
75 static tree cur_stmt_expr;
77 /* A map from local variable declarations in the body of the template
78 presently being instantiated to the corresponding instantiated
80 static htab_t local_specializations;
82 /* Contains canonical template parameter types. The vector is indexed by
83 the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
84 TREE_LIST, whose TREE_VALUEs contain the canonical template
85 parameters of various types and levels. */
86 static GTY(()) VEC(tree,gc) *canonical_template_parms;
88 #define UNIFY_ALLOW_NONE 0
89 #define UNIFY_ALLOW_MORE_CV_QUAL 1
90 #define UNIFY_ALLOW_LESS_CV_QUAL 2
91 #define UNIFY_ALLOW_DERIVED 4
92 #define UNIFY_ALLOW_INTEGER 8
93 #define UNIFY_ALLOW_OUTER_LEVEL 16
94 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
95 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
97 static void push_access_scope (tree);
98 static void pop_access_scope (tree);
99 static bool resolve_overloaded_unification (tree, tree, tree, tree,
100 unification_kind_t, int);
101 static int try_one_overload (tree, tree, tree, tree, tree,
102 unification_kind_t, int, bool);
103 static int unify (tree, tree, tree, tree, int);
104 static void add_pending_template (tree);
105 static int push_tinst_level (tree);
106 static void pop_tinst_level (void);
107 static void reopen_tinst_level (tree);
108 static tree tsubst_initializer_list (tree, tree);
109 static tree get_class_bindings (tree, tree, tree);
110 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
112 static void tsubst_enum (tree, tree, tree);
113 static tree add_to_template_args (tree, tree);
114 static tree add_outermost_template_args (tree, tree);
115 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
116 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
118 static int type_unification_real (tree, tree, tree, tree,
119 int, unification_kind_t, int);
120 static void note_template_header (int);
121 static tree convert_nontype_argument_function (tree, tree);
122 static tree convert_nontype_argument (tree, tree);
123 static tree convert_template_argument (tree, tree, tree,
124 tsubst_flags_t, int, tree);
125 static int for_each_template_parm (tree, tree_fn_t, void*,
126 struct pointer_set_t*);
127 static tree expand_template_argument_pack (tree);
128 static tree build_template_parm_index (int, int, int, tree, tree);
129 static bool inline_needs_template_parms (tree);
130 static void push_inline_template_parms_recursive (tree, int);
131 static tree retrieve_local_specialization (tree);
132 static void register_local_specialization (tree, tree);
133 static tree reduce_template_parm_level (tree, tree, int);
134 static int mark_template_parm (tree, void *);
135 static int template_parm_this_level_p (tree, void *);
136 static tree tsubst_friend_function (tree, tree);
137 static tree tsubst_friend_class (tree, tree);
138 static int can_complete_type_without_circularity (tree);
139 static tree get_bindings (tree, tree, tree, bool);
140 static int template_decl_level (tree);
141 static int check_cv_quals_for_unify (int, tree, tree);
142 static void template_parm_level_and_index (tree, int*, int*);
143 static int unify_pack_expansion (tree, tree, tree, tree, int, bool, bool);
144 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
145 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
146 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
147 static void regenerate_decl_from_template (tree, tree);
148 static tree most_specialized_class (tree, tree);
149 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
150 static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
151 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
152 static bool check_specialization_scope (void);
153 static tree process_partial_specialization (tree);
154 static void set_current_access_from_decl (tree);
155 static tree get_template_base (tree, tree, tree, tree);
156 static tree try_class_unification (tree, tree, tree, tree);
157 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
159 static int template_args_equal (tree, tree);
160 static void tsubst_default_arguments (tree);
161 static tree for_each_template_parm_r (tree *, int *, void *);
162 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
163 static void copy_default_args_to_explicit_spec (tree);
164 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
165 static int eq_local_specializations (const void *, const void *);
166 static bool dependent_template_arg_p (tree);
167 static bool any_template_arguments_need_structural_equality_p (tree);
168 static bool dependent_type_p_r (tree);
169 static tree tsubst (tree, tree, tsubst_flags_t, tree);
170 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
171 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
172 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
174 /* Make the current scope suitable for access checking when we are
175 processing T. T can be FUNCTION_DECL for instantiated function
176 template, or VAR_DECL for static member variable (need by
177 instantiate_decl). */
180 push_access_scope (tree t)
182 gcc_assert (TREE_CODE (t) == FUNCTION_DECL
183 || TREE_CODE (t) == VAR_DECL);
185 if (DECL_FRIEND_CONTEXT (t))
186 push_nested_class (DECL_FRIEND_CONTEXT (t));
187 else if (DECL_CLASS_SCOPE_P (t))
188 push_nested_class (DECL_CONTEXT (t));
190 push_to_top_level ();
192 if (TREE_CODE (t) == FUNCTION_DECL)
194 saved_access_scope = tree_cons
195 (NULL_TREE, current_function_decl, saved_access_scope);
196 current_function_decl = t;
200 /* Restore the scope set up by push_access_scope. T is the node we
204 pop_access_scope (tree t)
206 if (TREE_CODE (t) == FUNCTION_DECL)
208 current_function_decl = TREE_VALUE (saved_access_scope);
209 saved_access_scope = TREE_CHAIN (saved_access_scope);
212 if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
215 pop_from_top_level ();
218 /* Do any processing required when DECL (a member template
219 declaration) is finished. Returns the TEMPLATE_DECL corresponding
220 to DECL, unless it is a specialization, in which case the DECL
221 itself is returned. */
224 finish_member_template_decl (tree decl)
226 if (decl == error_mark_node)
227 return error_mark_node;
229 gcc_assert (DECL_P (decl));
231 if (TREE_CODE (decl) == TYPE_DECL)
235 type = TREE_TYPE (decl);
236 if (IS_AGGR_TYPE (type)
237 && CLASSTYPE_TEMPLATE_INFO (type)
238 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
240 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
241 check_member_template (tmpl);
246 else if (TREE_CODE (decl) == FIELD_DECL)
247 error ("data member %qD cannot be a member template", decl);
248 else if (DECL_TEMPLATE_INFO (decl))
250 if (!DECL_TEMPLATE_SPECIALIZATION (decl))
252 check_member_template (DECL_TI_TEMPLATE (decl));
253 return DECL_TI_TEMPLATE (decl);
259 error ("invalid member template declaration %qD", decl);
261 return error_mark_node;
264 /* Returns the template nesting level of the indicated class TYPE.
274 A<T>::B<U> has depth two, while A<T> has depth one.
275 Both A<T>::B<int> and A<int>::B<U> have depth one, if
276 they are instantiations, not specializations.
278 This function is guaranteed to return 0 if passed NULL_TREE so
279 that, for example, `template_class_depth (current_class_type)' is
283 template_class_depth (tree type)
288 type && TREE_CODE (type) != NAMESPACE_DECL;
289 type = (TREE_CODE (type) == FUNCTION_DECL)
290 ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
292 if (TREE_CODE (type) != FUNCTION_DECL)
294 if (CLASSTYPE_TEMPLATE_INFO (type)
295 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type))
296 && uses_template_parms (CLASSTYPE_TI_ARGS (type)))
301 if (DECL_TEMPLATE_INFO (type)
302 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (type))
303 && uses_template_parms (DECL_TI_ARGS (type)))
311 /* Subroutine of maybe_begin_member_template_processing.
312 Returns true if processing DECL needs us to push template parms. */
315 inline_needs_template_parms (tree decl)
317 if (! DECL_TEMPLATE_INFO (decl))
320 return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
321 > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
324 /* Subroutine of maybe_begin_member_template_processing.
325 Push the template parms in PARMS, starting from LEVELS steps into the
326 chain, and ending at the beginning, since template parms are listed
330 push_inline_template_parms_recursive (tree parmlist, int levels)
332 tree parms = TREE_VALUE (parmlist);
336 push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
338 ++processing_template_decl;
339 current_template_parms
340 = tree_cons (size_int (processing_template_decl),
341 parms, current_template_parms);
342 TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
344 begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
346 for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
348 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
350 if (parm == error_mark_node)
353 gcc_assert (DECL_P (parm));
355 switch (TREE_CODE (parm))
364 /* Make a CONST_DECL as is done in process_template_parm.
365 It is ugly that we recreate this here; the original
366 version built in process_template_parm is no longer
368 tree decl = build_decl (CONST_DECL, DECL_NAME (parm),
370 DECL_ARTIFICIAL (decl) = 1;
371 TREE_CONSTANT (decl) = 1;
372 TREE_INVARIANT (decl) = 1;
373 TREE_READONLY (decl) = 1;
374 DECL_INITIAL (decl) = DECL_INITIAL (parm);
375 SET_DECL_TEMPLATE_PARM_P (decl);
386 /* Restore the template parameter context for a member template or
387 a friend template defined in a class definition. */
390 maybe_begin_member_template_processing (tree decl)
395 if (inline_needs_template_parms (decl))
397 parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
398 levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
400 if (DECL_TEMPLATE_SPECIALIZATION (decl))
403 parms = TREE_CHAIN (parms);
406 push_inline_template_parms_recursive (parms, levels);
409 /* Remember how many levels of template parameters we pushed so that
410 we can pop them later. */
411 VEC_safe_push (int, heap, inline_parm_levels, levels);
414 /* Undo the effects of maybe_begin_member_template_processing. */
417 maybe_end_member_template_processing (void)
422 if (VEC_length (int, inline_parm_levels) == 0)
425 last = VEC_pop (int, inline_parm_levels);
426 for (i = 0; i < last; ++i)
428 --processing_template_decl;
429 current_template_parms = TREE_CHAIN (current_template_parms);
434 /* Return a new template argument vector which contains all of ARGS,
435 but has as its innermost set of arguments the EXTRA_ARGS. */
438 add_to_template_args (tree args, tree extra_args)
445 extra_depth = TMPL_ARGS_DEPTH (extra_args);
446 new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
448 for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
449 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
451 for (j = 1; j <= extra_depth; ++j, ++i)
452 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
457 /* Like add_to_template_args, but only the outermost ARGS are added to
458 the EXTRA_ARGS. In particular, all but TMPL_ARGS_DEPTH
459 (EXTRA_ARGS) levels are added. This function is used to combine
460 the template arguments from a partial instantiation with the
461 template arguments used to attain the full instantiation from the
462 partial instantiation. */
465 add_outermost_template_args (tree args, tree extra_args)
469 /* If there are more levels of EXTRA_ARGS than there are ARGS,
470 something very fishy is going on. */
471 gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
473 /* If *all* the new arguments will be the EXTRA_ARGS, just return
475 if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
478 /* For the moment, we make ARGS look like it contains fewer levels. */
479 TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
481 new_args = add_to_template_args (args, extra_args);
483 /* Now, we restore ARGS to its full dimensions. */
484 TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
489 /* Return the N levels of innermost template arguments from the ARGS. */
492 get_innermost_template_args (tree args, int n)
500 /* If N is 1, just return the innermost set of template arguments. */
502 return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
504 /* If we're not removing anything, just return the arguments we were
506 extra_levels = TMPL_ARGS_DEPTH (args) - n;
507 gcc_assert (extra_levels >= 0);
508 if (extra_levels == 0)
511 /* Make a new set of arguments, not containing the outer arguments. */
512 new_args = make_tree_vec (n);
513 for (i = 1; i <= n; ++i)
514 SET_TMPL_ARGS_LEVEL (new_args, i,
515 TMPL_ARGS_LEVEL (args, i + extra_levels));
520 /* We've got a template header coming up; push to a new level for storing
524 begin_template_parm_list (void)
526 /* We use a non-tag-transparent scope here, which causes pushtag to
527 put tags in this scope, rather than in the enclosing class or
528 namespace scope. This is the right thing, since we want
529 TEMPLATE_DECLS, and not TYPE_DECLS for template classes. For a
530 global template class, push_template_decl handles putting the
531 TEMPLATE_DECL into top-level scope. For a nested template class,
534 template <class T> struct S1 {
535 template <class T> struct S2 {};
538 pushtag contains special code to call pushdecl_with_scope on the
539 TEMPLATE_DECL for S2. */
540 begin_scope (sk_template_parms, NULL);
541 ++processing_template_decl;
542 ++processing_template_parmlist;
543 note_template_header (0);
546 /* This routine is called when a specialization is declared. If it is
547 invalid to declare a specialization here, an error is reported and
548 false is returned, otherwise this routine will return true. */
551 check_specialization_scope (void)
553 tree scope = current_scope ();
557 An explicit specialization shall be declared in the namespace of
558 which the template is a member, or, for member templates, in the
559 namespace of which the enclosing class or enclosing class
560 template is a member. An explicit specialization of a member
561 function, member class or static data member of a class template
562 shall be declared in the namespace of which the class template
564 if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
566 error ("explicit specialization in non-namespace scope %qD", scope);
572 In an explicit specialization declaration for a member of a class
573 template or a member template that appears in namespace scope,
574 the member template and some of its enclosing class templates may
575 remain unspecialized, except that the declaration shall not
576 explicitly specialize a class member template if its enclosing
577 class templates are not explicitly specialized as well. */
578 if (current_template_parms)
580 error ("enclosing class templates are not explicitly specialized");
587 /* We've just seen template <>. */
590 begin_specialization (void)
592 begin_scope (sk_template_spec, NULL);
593 note_template_header (1);
594 return check_specialization_scope ();
597 /* Called at then end of processing a declaration preceded by
601 end_specialization (void)
604 reset_specialization ();
607 /* Any template <>'s that we have seen thus far are not referring to a
608 function specialization. */
611 reset_specialization (void)
613 processing_specialization = 0;
614 template_header_count = 0;
617 /* We've just seen a template header. If SPECIALIZATION is nonzero,
618 it was of the form template <>. */
621 note_template_header (int specialization)
623 processing_specialization = specialization;
624 template_header_count++;
627 /* We're beginning an explicit instantiation. */
630 begin_explicit_instantiation (void)
632 gcc_assert (!processing_explicit_instantiation);
633 processing_explicit_instantiation = true;
638 end_explicit_instantiation (void)
640 gcc_assert (processing_explicit_instantiation);
641 processing_explicit_instantiation = false;
644 /* An explicit specialization or partial specialization TMPL is being
645 declared. Check that the namespace in which the specialization is
646 occurring is permissible. Returns false iff it is invalid to
647 specialize TMPL in the current namespace. */
650 check_specialization_namespace (tree tmpl)
652 tree tpl_ns = decl_namespace_context (tmpl);
656 An explicit specialization shall be declared in the namespace of
657 which the template is a member, or, for member templates, in the
658 namespace of which the enclosing class or enclosing class
659 template is a member. An explicit specialization of a member
660 function, member class or static data member of a class template
661 shall be declared in the namespace of which the class template is
663 if (is_associated_namespace (current_namespace, tpl_ns))
664 /* Same or super-using namespace. */
668 pedwarn ("specialization of %qD in different namespace", tmpl);
669 pedwarn (" from definition of %q+#D", tmpl);
674 /* SPEC is an explicit instantiation. Check that it is valid to
675 perform this explicit instantiation in the current namespace. */
678 check_explicit_instantiation_namespace (tree spec)
682 /* DR 275: An explicit instantiation shall appear in an enclosing
683 namespace of its template. */
684 ns = decl_namespace_context (spec);
685 if (!is_ancestor (current_namespace, ns))
686 pedwarn ("explicit instantiation of %qD in namespace %qD "
687 "(which does not enclose namespace %qD)",
688 spec, current_namespace, ns);
691 /* The TYPE is being declared. If it is a template type, that means it
692 is a partial specialization. Do appropriate error-checking. */
695 maybe_process_partial_specialization (tree type)
699 if (type == error_mark_node)
700 return error_mark_node;
702 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
704 error ("name of class shadows template template parameter %qD",
706 return error_mark_node;
709 context = TYPE_CONTEXT (type);
711 if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
713 /* This is for ordinary explicit specialization and partial
714 specialization of a template class such as:
716 template <> class C<int>;
720 template <class T> class C<T*>;
722 Make sure that `C<int>' and `C<T*>' are implicit instantiations. */
724 if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
725 && !COMPLETE_TYPE_P (type))
727 check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
728 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
729 if (processing_template_decl)
730 push_template_decl (TYPE_MAIN_DECL (type));
732 else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
733 error ("specialization of %qT after instantiation", type);
735 else if (CLASS_TYPE_P (type)
736 && !CLASSTYPE_USE_TEMPLATE (type)
737 && CLASSTYPE_TEMPLATE_INFO (type)
738 && context && CLASS_TYPE_P (context)
739 && CLASSTYPE_TEMPLATE_INFO (context))
741 /* This is for an explicit specialization of member class
742 template according to [temp.expl.spec/18]:
744 template <> template <class U> class C<int>::D;
746 The context `C<int>' must be an implicit instantiation.
747 Otherwise this is just a member class template declared
750 template <> class C<int> { template <class U> class D; };
751 template <> template <class U> class C<int>::D;
753 In the first case, `C<int>::D' is a specialization of `C<T>::D'
754 while in the second case, `C<int>::D' is a primary template
755 and `C<T>::D' may not exist. */
757 if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
758 && !COMPLETE_TYPE_P (type))
762 if (current_namespace
763 != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
765 pedwarn ("specializing %q#T in different namespace", type);
766 pedwarn (" from definition of %q+#D",
767 CLASSTYPE_TI_TEMPLATE (type));
770 /* Check for invalid specialization after instantiation:
772 template <> template <> class C<int>::D<int>;
773 template <> template <class U> class C<int>::D; */
775 for (t = DECL_TEMPLATE_INSTANTIATIONS
776 (most_general_template (CLASSTYPE_TI_TEMPLATE (type)));
777 t; t = TREE_CHAIN (t))
778 if (TREE_VALUE (t) != type
779 && TYPE_CONTEXT (TREE_VALUE (t)) == context)
780 error ("specialization %qT after instantiation %qT",
781 type, TREE_VALUE (t));
783 /* Mark TYPE as a specialization. And as a result, we only
784 have one level of template argument for the innermost
786 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
787 CLASSTYPE_TI_ARGS (type)
788 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
791 else if (processing_specialization)
793 error ("explicit specialization of non-template %qT", type);
794 return error_mark_node;
800 /* Returns nonzero if we can optimize the retrieval of specializations
801 for TMPL, a TEMPLATE_DECL. In particular, for such a template, we
802 do not use DECL_TEMPLATE_SPECIALIZATIONS at all. */
805 optimize_specialization_lookup_p (tree tmpl)
807 return (DECL_FUNCTION_TEMPLATE_P (tmpl)
808 && DECL_CLASS_SCOPE_P (tmpl)
809 /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
811 && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
812 /* The optimized lookup depends on the fact that the
813 template arguments for the member function template apply
814 purely to the containing class, which is not true if the
815 containing class is an explicit or partial
817 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
818 && !DECL_MEMBER_TEMPLATE_P (tmpl)
819 && !DECL_CONV_FN_P (tmpl)
820 /* It is possible to have a template that is not a member
821 template and is not a member of a template class:
823 template <typename T>
824 struct S { friend A::f(); };
826 Here, the friend function is a template, but the context does
827 not have template information. The optimized lookup relies
828 on having ARGS be the template arguments for both the class
829 and the function template. */
830 && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
833 /* Retrieve the specialization (in the sense of [temp.spec] - a
834 specialization is either an instantiation or an explicit
835 specialization) of TMPL for the given template ARGS. If there is
836 no such specialization, return NULL_TREE. The ARGS are a vector of
837 arguments, or a vector of vectors of arguments, in the case of
838 templates with more than one level of parameters.
840 If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
841 then we search for a partial specialization matching ARGS. This
842 parameter is ignored if TMPL is not a class template. */
845 retrieve_specialization (tree tmpl, tree args,
846 bool class_specializations_p)
848 if (args == error_mark_node)
851 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
853 /* There should be as many levels of arguments as there are
854 levels of parameters. */
855 gcc_assert (TMPL_ARGS_DEPTH (args)
856 == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
858 if (optimize_specialization_lookup_p (tmpl))
861 tree class_specialization;
862 VEC(tree,gc) *methods;
866 /* The template arguments actually apply to the containing
867 class. Find the class specialization with those
869 class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
871 = retrieve_specialization (class_template, args,
872 /*class_specializations_p=*/false);
873 if (!class_specialization)
875 /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
876 for the specialization. */
877 idx = class_method_index_for_fn (class_specialization, tmpl);
880 /* Iterate through the methods with the indicated name, looking
881 for the one that has an instance of TMPL. */
882 methods = CLASSTYPE_METHOD_VEC (class_specialization);
883 for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
885 tree fn = OVL_CURRENT (fns);
886 if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl)
896 /* Class templates store their instantiations on the
897 DECL_TEMPLATE_INSTANTIATIONS list; other templates use the
898 DECL_TEMPLATE_SPECIALIZATIONS list. */
899 if (!class_specializations_p
900 && TREE_CODE (DECL_TEMPLATE_RESULT (tmpl)) == TYPE_DECL)
901 sp = &DECL_TEMPLATE_INSTANTIATIONS (tmpl);
903 sp = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
905 /* Iterate through the list until we find a matching template. */
906 while (*sp != NULL_TREE)
910 if (comp_template_args (TREE_PURPOSE (spec), args))
912 /* Use the move-to-front heuristic to speed up future
916 *sp = TREE_CHAIN (*sp);
917 TREE_CHAIN (spec) = *head;
920 return TREE_VALUE (spec);
922 sp = &TREE_CHAIN (spec);
929 /* Like retrieve_specialization, but for local declarations. */
932 retrieve_local_specialization (tree tmpl)
934 tree spec = (tree) htab_find_with_hash (local_specializations, tmpl,
935 htab_hash_pointer (tmpl));
936 return spec ? TREE_PURPOSE (spec) : NULL_TREE;
939 /* Returns nonzero iff DECL is a specialization of TMPL. */
942 is_specialization_of (tree decl, tree tmpl)
946 if (TREE_CODE (decl) == FUNCTION_DECL)
950 t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
956 gcc_assert (TREE_CODE (decl) == TYPE_DECL);
958 for (t = TREE_TYPE (decl);
960 t = CLASSTYPE_USE_TEMPLATE (t)
961 ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
962 if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
969 /* Returns nonzero iff DECL is a specialization of friend declaration
970 FRIEND according to [temp.friend]. */
973 is_specialization_of_friend (tree decl, tree friend)
975 bool need_template = true;
978 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
979 || TREE_CODE (decl) == TYPE_DECL);
981 /* For [temp.friend/6] when FRIEND is an ordinary member function
982 of a template class, we want to check if DECL is a specialization
984 if (TREE_CODE (friend) == FUNCTION_DECL
985 && DECL_TEMPLATE_INFO (friend)
986 && !DECL_USE_TEMPLATE (friend))
988 /* We want a TEMPLATE_DECL for `is_specialization_of'. */
989 friend = DECL_TI_TEMPLATE (friend);
990 need_template = false;
992 else if (TREE_CODE (friend) == TEMPLATE_DECL
993 && !PRIMARY_TEMPLATE_P (friend))
994 need_template = false;
996 /* There is nothing to do if this is not a template friend. */
997 if (TREE_CODE (friend) != TEMPLATE_DECL)
1000 if (is_specialization_of (decl, friend))
1004 A member of a class template may be declared to be a friend of a
1005 non-template class. In this case, the corresponding member of
1006 every specialization of the class template is a friend of the
1007 class granting friendship.
1009 For example, given a template friend declaration
1011 template <class T> friend void A<T>::f();
1013 the member function below is considered a friend
1015 template <> struct A<int> {
1019 For this type of template friend, TEMPLATE_DEPTH below will be
1020 nonzero. To determine if DECL is a friend of FRIEND, we first
1021 check if the enclosing class is a specialization of another. */
1023 template_depth = template_class_depth (DECL_CONTEXT (friend));
1025 && DECL_CLASS_SCOPE_P (decl)
1026 && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1027 CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend))))
1029 /* Next, we check the members themselves. In order to handle
1030 a few tricky cases, such as when FRIEND's are
1032 template <class T> friend void A<T>::g(T t);
1033 template <class T> template <T t> friend void A<T>::h();
1037 void A<int>::g(int);
1038 template <int> void A<int>::h();
1040 we need to figure out ARGS, the template arguments from
1041 the context of DECL. This is required for template substitution
1042 of `T' in the function parameter of `g' and template parameter
1043 of `h' in the above examples. Here ARGS corresponds to `int'. */
1045 tree context = DECL_CONTEXT (decl);
1046 tree args = NULL_TREE;
1047 int current_depth = 0;
1049 while (current_depth < template_depth)
1051 if (CLASSTYPE_TEMPLATE_INFO (context))
1053 if (current_depth == 0)
1054 args = TYPE_TI_ARGS (context);
1056 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1059 context = TYPE_CONTEXT (context);
1062 if (TREE_CODE (decl) == FUNCTION_DECL)
1067 tree friend_args_type;
1068 tree decl_args_type;
1070 /* Make sure that both DECL and FRIEND are templates or
1072 is_template = DECL_TEMPLATE_INFO (decl)
1073 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1074 if (need_template ^ is_template)
1076 else if (is_template)
1078 /* If both are templates, check template parameter list. */
1080 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1082 if (!comp_template_parms
1083 (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1087 decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1090 decl_type = TREE_TYPE (decl);
1092 friend_type = tsubst_function_type (TREE_TYPE (friend), args,
1093 tf_none, NULL_TREE);
1094 if (friend_type == error_mark_node)
1097 /* Check if return types match. */
1098 if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1101 /* Check if function parameter types match, ignoring the
1102 `this' parameter. */
1103 friend_args_type = TYPE_ARG_TYPES (friend_type);
1104 decl_args_type = TYPE_ARG_TYPES (decl_type);
1105 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend))
1106 friend_args_type = TREE_CHAIN (friend_args_type);
1107 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1108 decl_args_type = TREE_CHAIN (decl_args_type);
1110 return compparms (decl_args_type, friend_args_type);
1114 /* DECL is a TYPE_DECL */
1116 tree decl_type = TREE_TYPE (decl);
1118 /* Make sure that both DECL and FRIEND are templates or
1121 = CLASSTYPE_TEMPLATE_INFO (decl_type)
1122 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1124 if (need_template ^ is_template)
1126 else if (is_template)
1129 /* If both are templates, check the name of the two
1130 TEMPLATE_DECL's first because is_friend didn't. */
1131 if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1132 != DECL_NAME (friend))
1135 /* Now check template parameter list. */
1137 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1139 return comp_template_parms
1140 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1144 return (DECL_NAME (decl)
1145 == DECL_NAME (friend));
1151 /* Register the specialization SPEC as a specialization of TMPL with
1152 the indicated ARGS. IS_FRIEND indicates whether the specialization
1153 is actually just a friend declaration. Returns SPEC, or an
1154 equivalent prior declaration, if available. */
1157 register_specialization (tree spec, tree tmpl, tree args, bool is_friend)
1161 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
1163 if (TREE_CODE (spec) == FUNCTION_DECL
1164 && uses_template_parms (DECL_TI_ARGS (spec)))
1165 /* This is the FUNCTION_DECL for a partial instantiation. Don't
1166 register it; we want the corresponding TEMPLATE_DECL instead.
1167 We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1168 the more obvious `uses_template_parms (spec)' to avoid problems
1169 with default function arguments. In particular, given
1170 something like this:
1172 template <class T> void f(T t1, T t = T())
1174 the default argument expression is not substituted for in an
1175 instantiation unless and until it is actually needed. */
1178 fn = retrieve_specialization (tmpl, args,
1179 /*class_specializations_p=*/false);
1180 /* We can sometimes try to re-register a specialization that we've
1181 already got. In particular, regenerate_decl_from_template calls
1182 duplicate_decls which will update the specialization list. But,
1183 we'll still get called again here anyhow. It's more convenient
1184 to simply allow this than to try to prevent it. */
1187 else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1189 if (DECL_TEMPLATE_INSTANTIATION (fn))
1192 || DECL_EXPLICIT_INSTANTIATION (fn))
1194 error ("specialization of %qD after instantiation",
1196 return error_mark_node;
1201 /* This situation should occur only if the first
1202 specialization is an implicit instantiation, the
1203 second is an explicit specialization, and the
1204 implicit instantiation has not yet been used. That
1205 situation can occur if we have implicitly
1206 instantiated a member function and then specialized
1209 We can also wind up here if a friend declaration that
1210 looked like an instantiation turns out to be a
1213 template <class T> void foo(T);
1214 class S { friend void foo<>(int) };
1215 template <> void foo(int);
1217 We transform the existing DECL in place so that any
1218 pointers to it become pointers to the updated
1221 If there was a definition for the template, but not
1222 for the specialization, we want this to look as if
1223 there were no definition, and vice versa. */
1224 DECL_INITIAL (fn) = NULL_TREE;
1225 duplicate_decls (spec, fn, is_friend);
1226 /* The call to duplicate_decls will have applied
1229 An explicit specialization of a function template
1230 is inline only if it is explicitly declared to be,
1231 and independently of whether its function template
1234 to the primary function; now copy the inline bits to
1235 the various clones. */
1236 FOR_EACH_CLONE (clone, fn)
1238 DECL_DECLARED_INLINE_P (clone)
1239 = DECL_DECLARED_INLINE_P (fn);
1243 check_specialization_namespace (fn);
1248 else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1250 if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1251 /* Dup decl failed, but this is a new definition. Set the
1252 line number so any errors match this new
1254 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1260 /* A specialization must be declared in the same namespace as the
1261 template it is specializing. */
1262 if (DECL_TEMPLATE_SPECIALIZATION (spec)
1263 && !check_specialization_namespace (tmpl))
1264 DECL_CONTEXT (spec) = FROB_CONTEXT (decl_namespace_context (tmpl));
1266 if (!optimize_specialization_lookup_p (tmpl))
1267 DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
1268 = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
1273 /* Unregister the specialization SPEC as a specialization of TMPL.
1274 Replace it with NEW_SPEC, if NEW_SPEC is non-NULL. Returns true
1275 if the SPEC was listed as a specialization of TMPL. */
1278 reregister_specialization (tree spec, tree tmpl, tree new_spec)
1282 for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
1284 s = &TREE_CHAIN (*s))
1285 if (TREE_VALUE (*s) == spec)
1288 *s = TREE_CHAIN (*s);
1290 TREE_VALUE (*s) = new_spec;
1297 /* Compare an entry in the local specializations hash table P1 (which
1298 is really a pointer to a TREE_LIST) with P2 (which is really a
1302 eq_local_specializations (const void *p1, const void *p2)
1304 return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1307 /* Hash P1, an entry in the local specializations table. */
1310 hash_local_specialization (const void* p1)
1312 return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1315 /* Like register_specialization, but for local declarations. We are
1316 registering SPEC, an instantiation of TMPL. */
1319 register_local_specialization (tree spec, tree tmpl)
1323 slot = htab_find_slot_with_hash (local_specializations, tmpl,
1324 htab_hash_pointer (tmpl), INSERT);
1325 *slot = build_tree_list (spec, tmpl);
1328 /* TYPE is a class type. Returns true if TYPE is an explicitly
1329 specialized class. */
1332 explicit_class_specialization_p (tree type)
1334 if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1336 return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1339 /* Print the list of candidate FNS in an error message. */
1342 print_candidates (tree fns)
1346 const char *str = "candidates are:";
1348 for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
1352 for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
1353 error ("%s %+#D", str, OVL_CURRENT (f));
1358 /* Returns the template (one of the functions given by TEMPLATE_ID)
1359 which can be specialized to match the indicated DECL with the
1360 explicit template args given in TEMPLATE_ID. The DECL may be
1361 NULL_TREE if none is available. In that case, the functions in
1362 TEMPLATE_ID are non-members.
1364 If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1365 specialization of a member template.
1367 The TEMPLATE_COUNT is the number of references to qualifying
1368 template classes that appeared in the name of the function. See
1369 check_explicit_specialization for a more accurate description.
1371 TSK indicates what kind of template declaration (if any) is being
1372 declared. TSK_TEMPLATE indicates that the declaration given by
1373 DECL, though a FUNCTION_DECL, has template parameters, and is
1374 therefore a template function.
1376 The template args (those explicitly specified and those deduced)
1377 are output in a newly created vector *TARGS_OUT.
1379 If it is impossible to determine the result, an error message is
1380 issued. The error_mark_node is returned to indicate failure. */
1383 determine_specialization (tree template_id,
1386 int need_member_template,
1392 tree explicit_targs;
1393 tree candidates = NULL_TREE;
1394 /* A TREE_LIST of templates of which DECL may be a specialization.
1395 The TREE_VALUE of each node is a TEMPLATE_DECL. The
1396 corresponding TREE_PURPOSE is the set of template arguments that,
1397 when used to instantiate the template, would produce a function
1398 with the signature of DECL. */
1399 tree templates = NULL_TREE;
1401 struct cp_binding_level *b;
1403 *targs_out = NULL_TREE;
1405 if (template_id == error_mark_node || decl == error_mark_node)
1406 return error_mark_node;
1408 fns = TREE_OPERAND (template_id, 0);
1409 explicit_targs = TREE_OPERAND (template_id, 1);
1411 if (fns == error_mark_node)
1412 return error_mark_node;
1414 /* Check for baselinks. */
1415 if (BASELINK_P (fns))
1416 fns = BASELINK_FUNCTIONS (fns);
1418 if (!is_overloaded_fn (fns))
1420 error ("%qD is not a function template", fns);
1421 return error_mark_node;
1424 /* Count the number of template headers specified for this
1427 for (b = current_binding_level;
1428 b->kind == sk_template_parms;
1432 for (; fns; fns = OVL_NEXT (fns))
1434 tree fn = OVL_CURRENT (fns);
1436 if (TREE_CODE (fn) == TEMPLATE_DECL)
1438 tree decl_arg_types;
1441 /* In case of explicit specialization, we need to check if
1442 the number of template headers appearing in the specialization
1443 is correct. This is usually done in check_explicit_specialization,
1444 but the check done there cannot be exhaustive when specializing
1445 member functions. Consider the following code:
1447 template <> void A<int>::f(int);
1448 template <> template <> void A<int>::f(int);
1450 Assuming that A<int> is not itself an explicit specialization
1451 already, the first line specializes "f" which is a non-template
1452 member function, whilst the second line specializes "f" which
1453 is a template member function. So both lines are syntactically
1454 correct, and check_explicit_specialization does not reject
1457 Here, we can do better, as we are matching the specialization
1458 against the declarations. We count the number of template
1459 headers, and we check if they match TEMPLATE_COUNT + 1
1460 (TEMPLATE_COUNT is the number of qualifying template classes,
1461 plus there must be another header for the member template
1464 Notice that if header_count is zero, this is not a
1465 specialization but rather a template instantiation, so there
1466 is no check we can perform here. */
1467 if (header_count && header_count != template_count + 1)
1470 /* Check that the number of template arguments at the
1471 innermost level for DECL is the same as for FN. */
1472 if (current_binding_level->kind == sk_template_parms
1473 && !current_binding_level->explicit_spec_p
1474 && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1475 != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1476 (current_template_parms))))
1479 /* DECL might be a specialization of FN. */
1480 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1481 fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1483 /* For a non-static member function, we need to make sure
1484 that the const qualification is the same. Since
1485 get_bindings does not try to merge the "this" parameter,
1486 we must do the comparison explicitly. */
1487 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1488 && !same_type_p (TREE_VALUE (fn_arg_types),
1489 TREE_VALUE (decl_arg_types)))
1492 /* Skip the "this" parameter and, for constructors of
1493 classes with virtual bases, the VTT parameter. A
1494 full specialization of a constructor will have a VTT
1495 parameter, but a template never will. */
1497 = skip_artificial_parms_for (decl, decl_arg_types);
1499 = skip_artificial_parms_for (fn, fn_arg_types);
1501 /* Check that the number of function parameters matches.
1503 template <class T> void f(int i = 0);
1504 template <> void f<int>();
1505 The specialization f<int> is invalid but is not caught
1506 by get_bindings below. */
1507 if (list_length (fn_arg_types) != list_length (decl_arg_types))
1510 /* Function templates cannot be specializations; there are
1511 no partial specializations of functions. Therefore, if
1512 the type of DECL does not match FN, there is no
1514 if (tsk == tsk_template)
1516 if (compparms (fn_arg_types, decl_arg_types))
1517 candidates = tree_cons (NULL_TREE, fn, candidates);
1521 /* See whether this function might be a specialization of this
1523 targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1526 /* We cannot deduce template arguments that when used to
1527 specialize TMPL will produce DECL. */
1530 /* Save this template, and the arguments deduced. */
1531 templates = tree_cons (targs, fn, templates);
1533 else if (need_member_template)
1534 /* FN is an ordinary member function, and we need a
1535 specialization of a member template. */
1537 else if (TREE_CODE (fn) != FUNCTION_DECL)
1538 /* We can get IDENTIFIER_NODEs here in certain erroneous
1541 else if (!DECL_FUNCTION_MEMBER_P (fn))
1542 /* This is just an ordinary non-member function. Nothing can
1543 be a specialization of that. */
1545 else if (DECL_ARTIFICIAL (fn))
1546 /* Cannot specialize functions that are created implicitly. */
1550 tree decl_arg_types;
1552 /* This is an ordinary member function. However, since
1553 we're here, we can assume it's enclosing class is a
1554 template class. For example,
1556 template <typename T> struct S { void f(); };
1557 template <> void S<int>::f() {}
1559 Here, S<int>::f is a non-template, but S<int> is a
1560 template class. If FN has the same type as DECL, we
1561 might be in business. */
1563 if (!DECL_TEMPLATE_INFO (fn))
1564 /* Its enclosing class is an explicit specialization
1565 of a template class. This is not a candidate. */
1568 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1569 TREE_TYPE (TREE_TYPE (fn))))
1570 /* The return types differ. */
1573 /* Adjust the type of DECL in case FN is a static member. */
1574 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1575 if (DECL_STATIC_FUNCTION_P (fn)
1576 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1577 decl_arg_types = TREE_CHAIN (decl_arg_types);
1579 if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1582 candidates = tree_cons (NULL_TREE, fn, candidates);
1586 if (templates && TREE_CHAIN (templates))
1592 It is possible for a specialization with a given function
1593 signature to be instantiated from more than one function
1594 template. In such cases, explicit specification of the
1595 template arguments must be used to uniquely identify the
1596 function template specialization being specialized.
1598 Note that here, there's no suggestion that we're supposed to
1599 determine which of the candidate templates is most
1600 specialized. However, we, also have:
1604 Partial ordering of overloaded function template
1605 declarations is used in the following contexts to select
1606 the function template to which a function template
1607 specialization refers:
1609 -- when an explicit specialization refers to a function
1612 So, we do use the partial ordering rules, at least for now.
1613 This extension can only serve to make invalid programs valid,
1614 so it's safe. And, there is strong anecdotal evidence that
1615 the committee intended the partial ordering rules to apply;
1616 the EDG front end has that behavior, and John Spicer claims
1617 that the committee simply forgot to delete the wording in
1618 [temp.expl.spec]. */
1619 tree tmpl = most_specialized_instantiation (templates);
1620 if (tmpl != error_mark_node)
1623 TREE_CHAIN (templates) = NULL_TREE;
1627 if (templates == NULL_TREE && candidates == NULL_TREE)
1629 error ("template-id %qD for %q+D does not match any template "
1630 "declaration", template_id, decl);
1631 return error_mark_node;
1633 else if ((templates && TREE_CHAIN (templates))
1634 || (candidates && TREE_CHAIN (candidates))
1635 || (templates && candidates))
1637 error ("ambiguous template specialization %qD for %q+D",
1639 chainon (candidates, templates);
1640 print_candidates (candidates);
1641 return error_mark_node;
1644 /* We have one, and exactly one, match. */
1647 tree fn = TREE_VALUE (candidates);
1648 /* DECL is a re-declaration of a template function. */
1649 if (TREE_CODE (fn) == TEMPLATE_DECL)
1651 /* It was a specialization of an ordinary member function in a
1653 *targs_out = copy_node (DECL_TI_ARGS (fn));
1654 return DECL_TI_TEMPLATE (fn);
1657 /* It was a specialization of a template. */
1658 targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
1659 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1661 *targs_out = copy_node (targs);
1662 SET_TMPL_ARGS_LEVEL (*targs_out,
1663 TMPL_ARGS_DEPTH (*targs_out),
1664 TREE_PURPOSE (templates));
1667 *targs_out = TREE_PURPOSE (templates);
1668 return TREE_VALUE (templates);
1671 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1672 but with the default argument values filled in from those in the
1676 copy_default_args_to_explicit_spec_1 (tree spec_types,
1679 tree new_spec_types;
1684 if (spec_types == void_list_node)
1685 return void_list_node;
1687 /* Substitute into the rest of the list. */
1689 copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
1690 TREE_CHAIN (tmpl_types));
1692 /* Add the default argument for this parameter. */
1693 return hash_tree_cons (TREE_PURPOSE (tmpl_types),
1694 TREE_VALUE (spec_types),
1698 /* DECL is an explicit specialization. Replicate default arguments
1699 from the template it specializes. (That way, code like:
1701 template <class T> void f(T = 3);
1702 template <> void f(double);
1705 works, as required.) An alternative approach would be to look up
1706 the correct default arguments at the call-site, but this approach
1707 is consistent with how implicit instantiations are handled. */
1710 copy_default_args_to_explicit_spec (tree decl)
1715 tree new_spec_types;
1719 tree object_type = NULL_TREE;
1720 tree in_charge = NULL_TREE;
1721 tree vtt = NULL_TREE;
1723 /* See if there's anything we need to do. */
1724 tmpl = DECL_TI_TEMPLATE (decl);
1725 tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
1726 for (t = tmpl_types; t; t = TREE_CHAIN (t))
1727 if (TREE_PURPOSE (t))
1732 old_type = TREE_TYPE (decl);
1733 spec_types = TYPE_ARG_TYPES (old_type);
1735 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1737 /* Remove the this pointer, but remember the object's type for
1739 object_type = TREE_TYPE (TREE_VALUE (spec_types));
1740 spec_types = TREE_CHAIN (spec_types);
1741 tmpl_types = TREE_CHAIN (tmpl_types);
1743 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
1745 /* DECL may contain more parameters than TMPL due to the extra
1746 in-charge parameter in constructors and destructors. */
1747 in_charge = spec_types;
1748 spec_types = TREE_CHAIN (spec_types);
1750 if (DECL_HAS_VTT_PARM_P (decl))
1753 spec_types = TREE_CHAIN (spec_types);
1757 /* Compute the merged default arguments. */
1759 copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
1761 /* Compute the new FUNCTION_TYPE. */
1765 new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
1770 /* Put the in-charge parameter back. */
1771 new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
1772 TREE_VALUE (in_charge),
1775 new_type = build_method_type_directly (object_type,
1776 TREE_TYPE (old_type),
1780 new_type = build_function_type (TREE_TYPE (old_type),
1782 new_type = cp_build_type_attribute_variant (new_type,
1783 TYPE_ATTRIBUTES (old_type));
1784 new_type = build_exception_variant (new_type,
1785 TYPE_RAISES_EXCEPTIONS (old_type));
1786 TREE_TYPE (decl) = new_type;
1789 /* Check to see if the function just declared, as indicated in
1790 DECLARATOR, and in DECL, is a specialization of a function
1791 template. We may also discover that the declaration is an explicit
1792 instantiation at this point.
1794 Returns DECL, or an equivalent declaration that should be used
1795 instead if all goes well. Issues an error message if something is
1796 amiss. Returns error_mark_node if the error is not easily
1799 FLAGS is a bitmask consisting of the following flags:
1801 2: The function has a definition.
1802 4: The function is a friend.
1804 The TEMPLATE_COUNT is the number of references to qualifying
1805 template classes that appeared in the name of the function. For
1808 template <class T> struct S { void f(); };
1811 the TEMPLATE_COUNT would be 1. However, explicitly specialized
1812 classes are not counted in the TEMPLATE_COUNT, so that in
1814 template <class T> struct S {};
1815 template <> struct S<int> { void f(); }
1816 template <> void S<int>::f();
1818 the TEMPLATE_COUNT would be 0. (Note that this declaration is
1819 invalid; there should be no template <>.)
1821 If the function is a specialization, it is marked as such via
1822 DECL_TEMPLATE_SPECIALIZATION. Furthermore, its DECL_TEMPLATE_INFO
1823 is set up correctly, and it is added to the list of specializations
1824 for that template. */
1827 check_explicit_specialization (tree declarator,
1832 int have_def = flags & 2;
1833 int is_friend = flags & 4;
1834 int specialization = 0;
1835 int explicit_instantiation = 0;
1836 int member_specialization = 0;
1837 tree ctype = DECL_CLASS_CONTEXT (decl);
1838 tree dname = DECL_NAME (decl);
1843 if (!processing_specialization)
1846 tsk = tsk_excessive_parms;
1849 tsk = current_tmpl_spec_kind (template_count);
1854 if (processing_specialization)
1857 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1859 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1862 /* This could be something like:
1864 template <class T> void f(T);
1865 class S { friend void f<>(int); } */
1869 /* This case handles bogus declarations like template <>
1870 template <class T> void f<int>(); */
1872 error ("template-id %qD in declaration of primary template",
1879 case tsk_invalid_member_spec:
1880 /* The error has already been reported in
1881 check_specialization_scope. */
1882 return error_mark_node;
1884 case tsk_invalid_expl_inst:
1885 error ("template parameter list used in explicit instantiation");
1891 error ("definition provided for explicit instantiation");
1893 explicit_instantiation = 1;
1896 case tsk_excessive_parms:
1897 case tsk_insufficient_parms:
1898 if (tsk == tsk_excessive_parms)
1899 error ("too many template parameter lists in declaration of %qD",
1901 else if (template_header_count)
1902 error("too few template parameter lists in declaration of %qD", decl);
1904 error("explicit specialization of %qD must be introduced by "
1905 "%<template <>%>", decl);
1909 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1911 member_specialization = 1;
1917 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1919 /* This case handles bogus declarations like template <>
1920 template <class T> void f<int>(); */
1922 if (uses_template_parms (declarator))
1923 error ("function template partial specialization %qD "
1924 "is not allowed", declarator);
1926 error ("template-id %qD in declaration of primary template",
1931 if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1932 /* This is a specialization of a member template, without
1933 specialization the containing class. Something like:
1935 template <class T> struct S {
1936 template <class U> void f (U);
1938 template <> template <class U> void S<int>::f(U) {}
1940 That's a specialization -- but of the entire template. */
1948 if (specialization || member_specialization)
1950 tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
1951 for (; t; t = TREE_CHAIN (t))
1952 if (TREE_PURPOSE (t))
1955 ("default argument specified in explicit specialization");
1960 if (specialization || member_specialization || explicit_instantiation)
1962 tree tmpl = NULL_TREE;
1963 tree targs = NULL_TREE;
1965 /* Make sure that the declarator is a TEMPLATE_ID_EXPR. */
1966 if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
1970 gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
1975 /* If there is no class context, the explicit instantiation
1976 must be at namespace scope. */
1977 gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
1979 /* Find the namespace binding, using the declaration
1981 fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
1983 if (!fns || !is_overloaded_fn (fns))
1985 error ("%qD is not a template function", dname);
1986 fns = error_mark_node;
1990 tree fn = OVL_CURRENT (fns);
1991 if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
1992 CP_DECL_CONTEXT (fn)))
1993 error ("%qD is not declared in %qD",
1994 decl, current_namespace);
1998 declarator = lookup_template_function (fns, NULL_TREE);
2001 if (declarator == error_mark_node)
2002 return error_mark_node;
2004 if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2006 if (!explicit_instantiation)
2007 /* A specialization in class scope. This is invalid,
2008 but the error will already have been flagged by
2009 check_specialization_scope. */
2010 return error_mark_node;
2013 /* It's not valid to write an explicit instantiation in
2016 class C { template void f(); }
2018 This case is caught by the parser. However, on
2021 template class C { void f(); };
2023 (which is invalid) we can get here. The error will be
2030 else if (ctype != NULL_TREE
2031 && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2034 /* Find the list of functions in ctype that have the same
2035 name as the declared function. */
2036 tree name = TREE_OPERAND (declarator, 0);
2037 tree fns = NULL_TREE;
2040 if (constructor_name_p (name, ctype))
2042 int is_constructor = DECL_CONSTRUCTOR_P (decl);
2044 if (is_constructor ? !TYPE_HAS_CONSTRUCTOR (ctype)
2045 : !CLASSTYPE_DESTRUCTORS (ctype))
2047 /* From [temp.expl.spec]:
2049 If such an explicit specialization for the member
2050 of a class template names an implicitly-declared
2051 special member function (clause _special_), the
2052 program is ill-formed.
2054 Similar language is found in [temp.explicit]. */
2055 error ("specialization of implicitly-declared special member function");
2056 return error_mark_node;
2059 name = is_constructor ? ctor_identifier : dtor_identifier;
2062 if (!DECL_CONV_FN_P (decl))
2064 idx = lookup_fnfields_1 (ctype, name);
2066 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2070 VEC(tree,gc) *methods;
2073 /* For a type-conversion operator, we cannot do a
2074 name-based lookup. We might be looking for `operator
2075 int' which will be a specialization of `operator T'.
2076 So, we find *all* the conversion operators, and then
2077 select from them. */
2080 methods = CLASSTYPE_METHOD_VEC (ctype);
2082 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2083 VEC_iterate (tree, methods, idx, ovl);
2086 if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2087 /* There are no more conversion functions. */
2090 /* Glue all these conversion functions together
2091 with those we already have. */
2092 for (; ovl; ovl = OVL_NEXT (ovl))
2093 fns = ovl_cons (OVL_CURRENT (ovl), fns);
2097 if (fns == NULL_TREE)
2099 error ("no member function %qD declared in %qT", name, ctype);
2100 return error_mark_node;
2103 TREE_OPERAND (declarator, 0) = fns;
2106 /* Figure out what exactly is being specialized at this point.
2107 Note that for an explicit instantiation, even one for a
2108 member function, we cannot tell apriori whether the
2109 instantiation is for a member template, or just a member
2110 function of a template class. Even if a member template is
2111 being instantiated, the member template arguments may be
2112 elided if they can be deduced from the rest of the
2114 tmpl = determine_specialization (declarator, decl,
2116 member_specialization,
2120 if (!tmpl || tmpl == error_mark_node)
2121 /* We couldn't figure out what this declaration was
2123 return error_mark_node;
2126 tree gen_tmpl = most_general_template (tmpl);
2128 if (explicit_instantiation)
2130 /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2131 is done by do_decl_instantiation later. */
2133 int arg_depth = TMPL_ARGS_DEPTH (targs);
2134 int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2136 if (arg_depth > parm_depth)
2138 /* If TMPL is not the most general template (for
2139 example, if TMPL is a friend template that is
2140 injected into namespace scope), then there will
2141 be too many levels of TARGS. Remove some of them
2146 new_targs = make_tree_vec (parm_depth);
2147 for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2148 TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2149 = TREE_VEC_ELT (targs, i);
2153 return instantiate_template (tmpl, targs, tf_error);
2156 /* If we thought that the DECL was a member function, but it
2157 turns out to be specializing a static member function,
2158 make DECL a static member function as well. */
2159 if (DECL_STATIC_FUNCTION_P (tmpl)
2160 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2161 revert_static_member_fn (decl);
2163 /* If this is a specialization of a member template of a
2164 template class, we want to return the TEMPLATE_DECL, not
2165 the specialization of it. */
2166 if (tsk == tsk_template)
2168 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2169 DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE;
2172 DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2173 DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl))
2174 = DECL_SOURCE_LOCATION (decl);
2175 /* We want to use the argument list specified in the
2176 definition, not in the original declaration. */
2177 DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (tmpl))
2178 = DECL_ARGUMENTS (decl);
2183 /* Set up the DECL_TEMPLATE_INFO for DECL. */
2184 DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
2186 /* Inherit default function arguments from the template
2187 DECL is specializing. */
2188 copy_default_args_to_explicit_spec (decl);
2190 /* This specialization has the same protection as the
2191 template it specializes. */
2192 TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2193 TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2195 /* 7.1.1-1 [dcl.stc]
2197 A storage-class-specifier shall not be specified in an
2198 explicit specialization...
2200 The parser rejects these, so unless action is taken here,
2201 explicit function specializations will always appear with
2204 The action recommended by the C++ CWG in response to C++
2205 defect report 605 is to make the storage class and linkage
2206 of the explicit specialization match the templated function:
2208 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2210 if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2212 tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2213 gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2215 /* This specialization has the same linkage and visibility as
2216 the function template it specializes. */
2217 TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2218 DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2219 if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2221 DECL_VISIBILITY_SPECIFIED (decl) = 1;
2222 DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2226 /* If DECL is a friend declaration, declared using an
2227 unqualified name, the namespace associated with DECL may
2228 have been set incorrectly. For example, in:
2230 template <typename T> void f(T);
2232 struct S { friend void f<int>(int); }
2235 we will have set the DECL_CONTEXT for the friend
2236 declaration to N, rather than to the global namespace. */
2237 if (DECL_NAMESPACE_SCOPE_P (decl))
2238 DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2240 if (is_friend && !have_def)
2241 /* This is not really a declaration of a specialization.
2242 It's just the name of an instantiation. But, it's not
2243 a request for an instantiation, either. */
2244 SET_DECL_IMPLICIT_INSTANTIATION (decl);
2245 else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2246 /* This is indeed a specialization. In case of constructors
2247 and destructors, we need in-charge and not-in-charge
2248 versions in V3 ABI. */
2249 clone_function_decl (decl, /*update_method_vec_p=*/0);
2251 /* Register this specialization so that we can find it
2253 decl = register_specialization (decl, gen_tmpl, targs, is_friend);
2260 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2261 parameters. These are represented in the same format used for
2262 DECL_TEMPLATE_PARMS. */
2265 comp_template_parms (tree parms1, tree parms2)
2270 if (parms1 == parms2)
2273 for (p1 = parms1, p2 = parms2;
2274 p1 != NULL_TREE && p2 != NULL_TREE;
2275 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2277 tree t1 = TREE_VALUE (p1);
2278 tree t2 = TREE_VALUE (p2);
2281 gcc_assert (TREE_CODE (t1) == TREE_VEC);
2282 gcc_assert (TREE_CODE (t2) == TREE_VEC);
2284 if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2287 for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2289 tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2290 tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2292 /* If either of the template parameters are invalid, assume
2293 they match for the sake of error recovery. */
2294 if (parm1 == error_mark_node || parm2 == error_mark_node)
2297 if (TREE_CODE (parm1) != TREE_CODE (parm2))
2300 if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2301 && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2302 == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2304 else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2309 if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2310 /* One set of parameters has more parameters lists than the
2317 /* Determine whether PARM is a parameter pack. */
2319 template_parameter_pack_p (tree parm)
2321 /* Determine if we have a non-type template parameter pack. */
2322 if (TREE_CODE (parm) == PARM_DECL)
2323 return (DECL_TEMPLATE_PARM_P (parm)
2324 && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2326 /* If this is a list of template parameters, we could get a
2327 TYPE_DECL or a TEMPLATE_DECL. */
2328 if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2329 parm = TREE_TYPE (parm);
2331 return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2332 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2333 && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2336 /* Determine whether ARGS describes a variadic template args list,
2337 i.e., one that is terminated by a template argument pack. */
2339 template_args_variadic_p (tree args)
2344 if (args == NULL_TREE)
2347 args = INNERMOST_TEMPLATE_ARGS (args);
2348 nargs = TREE_VEC_LENGTH (args);
2353 last_parm = TREE_VEC_ELT (args, nargs - 1);
2355 return ARGUMENT_PACK_P (last_parm);
2358 /* Generate a new name for the parameter pack name NAME (an
2359 IDENTIFIER_NODE) that incorporates its */
2361 make_ith_pack_parameter_name (tree name, int i)
2363 /* Munge the name to include the parameter index. */
2367 sprintf(numbuf, "%i", i);
2368 newname = (char*)alloca (IDENTIFIER_LENGTH (name) + strlen(numbuf) + 2);
2369 sprintf(newname, "%s#%i", IDENTIFIER_POINTER (name), i);
2370 return get_identifier (newname);
2373 /* Structure used to track the progress of find_parameter_pack_r. */
2374 struct find_parameter_pack_data
2376 tree* parameter_packs;
2377 struct pointer_set_t *visited;
2380 /* Identifiers all of the argument packs that occur in a template
2381 argument and appends them to the TREE_LIST inside DATA, which is a
2382 find_parameter_pack_Data structure. This is a subroutine of
2383 make_pack_expansion and uses_parameter_packs. */
2385 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2388 struct find_parameter_pack_data* ppd =
2389 (struct find_parameter_pack_data*)data;
2393 tree context = TYPE_CONTEXT (t);
2394 walk_tree (&context, &find_parameter_packs_r, ppd, ppd->visited);
2397 /* This switch statement will return immediately if we don't find a
2399 switch (TREE_CODE (t))
2401 case TEMPLATE_PARM_INDEX:
2402 if (TEMPLATE_PARM_PARAMETER_PACK (t))
2406 case BOUND_TEMPLATE_TEMPLATE_PARM:
2407 /* Check the template arguments. */
2408 walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd,
2411 /* Dig out the underlying TEMPLATE_TEMPLATE_PARM. */
2412 t = TYPE_TI_TEMPLATE (t);
2413 if (DECL_P (t) && TREE_TYPE (t))
2419 case TEMPLATE_TYPE_PARM:
2420 case TEMPLATE_TEMPLATE_PARM:
2421 if (TEMPLATE_TYPE_PARAMETER_PACK (t))
2426 if (FUNCTION_PARAMETER_PACK_P (t))
2428 /* We don't want to walk into the type of a PARM_DECL,
2429 because we don't want to see the type parameter pack.*/
2436 if (TYPE_PTRMEMFUNC_P (t))
2442 if (TYPE_TEMPLATE_INFO (t))
2444 tree args = TREE_VALUE (TYPE_TEMPLATE_INFO (t));
2445 walk_tree (&args, &find_parameter_packs_r, ppd, ppd->visited);
2452 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
2453 && TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (t)))
2459 case TYPE_PACK_EXPANSION:
2460 case EXPR_PACK_EXPANSION:
2465 walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r,
2474 /* Add this parameter pack to the list. */
2475 *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
2480 /* Determines if the expression or type T uses any parameter packs. */
2482 uses_parameter_packs (tree t)
2484 tree parameter_packs = NULL_TREE;
2485 struct find_parameter_pack_data ppd;
2486 ppd.parameter_packs = ¶meter_packs;
2487 ppd.visited = pointer_set_create ();
2488 walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
2489 pointer_set_destroy (ppd.visited);
2490 return parameter_packs != NULL_TREE;
2493 /* Turn ARG, which may be an expression, type, or a TREE_LIST
2494 representation a base-class initializer into a parameter pack
2495 expansion. If all goes well, the resulting node will be an
2496 EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
2499 make_pack_expansion (tree arg)
2502 tree parameter_packs = NULL_TREE;
2503 bool for_types = false;
2504 struct find_parameter_pack_data ppd;
2506 if (!arg || arg == error_mark_node)
2509 if (TREE_CODE (arg) == TREE_LIST)
2511 /* The only time we will see a TREE_LIST here is for a base
2512 class initializer. In this case, the TREE_PURPOSE will be a
2513 _TYPE node (representing the base class expansion we're
2514 initializing) and the TREE_VALUE will be a TREE_LIST
2515 containing the initialization arguments.
2517 The resulting expansion looks somewhat different from most
2518 expansions. Rather than returning just one _EXPANSION, we
2519 return a TREE_LIST whose TREE_PURPOSE is a
2520 TYPE_PACK_EXPANSION containing the bases that will be
2521 initialized. The TREE_VALUE will be identical to the
2522 original TREE_VALUE, which is a list of arguments that will
2523 be passed to each base. We do not introduce any new pack
2524 expansion nodes into the TREE_VALUE (although it is possible
2525 that some already exist), because the TREE_PURPOSE and
2526 TREE_VALUE all need to be expanded together with the same
2527 _EXPANSION node. Note that the TYPE_PACK_EXPANSION in the
2528 resulting TREE_PURPOSE will mention the parameter packs in
2529 both the bases and the arguments to the bases. */
2532 tree parameter_packs = NULL_TREE;
2534 /* Determine which parameter packs will be used by the base
2536 ppd.visited = pointer_set_create ();
2537 ppd.parameter_packs = ¶meter_packs;
2538 walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r,
2541 if (parameter_packs == NULL_TREE)
2543 error ("base initializer expansion %<%T%> contains no parameter packs", arg);
2544 pointer_set_destroy (ppd.visited);
2545 return error_mark_node;
2548 if (TREE_VALUE (arg) != void_type_node)
2550 /* Collect the sets of parameter packs used in each of the
2551 initialization arguments. */
2552 for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
2554 /* Determine which parameter packs will be expanded in this
2556 walk_tree (&TREE_VALUE (value), &find_parameter_packs_r,
2561 pointer_set_destroy (ppd.visited);
2563 /* Create the pack expansion type for the base type. */
2564 purpose = make_node (TYPE_PACK_EXPANSION);
2565 SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
2566 PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
2568 /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2569 they will rarely be compared to anything. */
2570 SET_TYPE_STRUCTURAL_EQUALITY (purpose);
2572 return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
2575 if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
2578 /* Build the PACK_EXPANSION_* node. */
2579 result = make_node (for_types ? TYPE_PACK_EXPANSION : EXPR_PACK_EXPANSION);
2580 SET_PACK_EXPANSION_PATTERN (result, arg);
2581 if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
2583 /* Propagate type and const-expression information. */
2584 TREE_TYPE (result) = TREE_TYPE (arg);
2585 TREE_CONSTANT (result) = TREE_CONSTANT (arg);
2588 /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2589 they will rarely be compared to anything. */
2590 SET_TYPE_STRUCTURAL_EQUALITY (result);
2592 /* Determine which parameter packs will be expanded. */
2593 ppd.parameter_packs = ¶meter_packs;
2594 ppd.visited = pointer_set_create ();
2595 walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
2596 pointer_set_destroy (ppd.visited);
2598 /* Make sure we found some parameter packs. */
2599 if (parameter_packs == NULL_TREE)
2602 error ("expansion pattern %<%T%> contains no argument packs", arg);
2604 error ("expansion pattern %<%E%> contains no argument packs", arg);
2605 return error_mark_node;
2607 PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
2612 /* Checks T for any "bare" parameter packs, which have not yet been
2613 expanded, and issues an error if any are found. This operation can
2614 only be done on full expressions or types (e.g., an expression
2615 statement, "if" condition, etc.), because we could have expressions like:
2617 foo(f(g(h(args)))...)
2619 where "args" is a parameter pack. check_for_bare_parameter_packs
2620 should not be called for the subexpressions args, h(args),
2621 g(h(args)), or f(g(h(args))), because we would produce erroneous
2624 Returns TRUE if there were no bare parameter packs, returns FALSE
2625 (and emits an error) if there were bare parameter packs.*/
2627 check_for_bare_parameter_packs (tree t)
2629 tree parameter_packs = NULL_TREE;
2630 struct find_parameter_pack_data ppd;
2632 if (!processing_template_decl || !t || t == error_mark_node)
2635 if (TREE_CODE (t) == TYPE_DECL)
2638 ppd.parameter_packs = ¶meter_packs;
2639 ppd.visited = pointer_set_create ();
2640 walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
2641 pointer_set_destroy (ppd.visited);
2643 if (parameter_packs)
2645 error ("parameter packs not expanded with `...':");
2646 while (parameter_packs)
2648 tree pack = TREE_VALUE (parameter_packs);
2649 tree name = NULL_TREE;
2651 if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
2652 || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
2653 name = TYPE_NAME (pack);
2654 else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
2655 name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
2657 name = DECL_NAME (pack);
2658 inform (" %qD", name);
2660 parameter_packs = TREE_CHAIN (parameter_packs);
2669 /* Expand any parameter packs that occur in the template arguments in
2672 expand_template_argument_pack (tree args)
2674 tree result_args = NULL_TREE;
2675 int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
2676 int num_result_args = -1;
2678 /* First, determine if we need to expand anything, and the number of
2679 slots we'll need. */
2680 for (in_arg = 0; in_arg < nargs; ++in_arg)
2682 tree arg = TREE_VEC_ELT (args, in_arg);
2683 if (ARGUMENT_PACK_P (arg))
2685 int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
2686 if (num_result_args < 0)
2687 num_result_args = in_arg + num_packed;
2689 num_result_args += num_packed;
2693 if (num_result_args >= 0)
2698 /* If no expansion is necessary, we're done. */
2699 if (num_result_args < 0)
2702 /* Expand arguments. */
2703 result_args = make_tree_vec (num_result_args);
2704 for (in_arg = 0; in_arg < nargs; ++in_arg)
2706 tree arg = TREE_VEC_ELT (args, in_arg);
2707 if (ARGUMENT_PACK_P (arg))
2709 tree packed = ARGUMENT_PACK_ARGS (arg);
2710 int i, num_packed = TREE_VEC_LENGTH (packed);
2711 for (i = 0; i < num_packed; ++i, ++out_arg)
2712 TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
2716 TREE_VEC_ELT (result_args, out_arg) = arg;
2724 /* Complain if DECL shadows a template parameter.
2726 [temp.local]: A template-parameter shall not be redeclared within its
2727 scope (including nested scopes). */
2730 check_template_shadow (tree decl)
2734 /* If we're not in a template, we can't possibly shadow a template
2736 if (!current_template_parms)
2739 /* Figure out what we're shadowing. */
2740 if (TREE_CODE (decl) == OVERLOAD)
2741 decl = OVL_CURRENT (decl);
2742 olddecl = innermost_non_namespace_value (DECL_NAME (decl));
2744 /* If there's no previous binding for this name, we're not shadowing
2745 anything, let alone a template parameter. */
2749 /* If we're not shadowing a template parameter, we're done. Note
2750 that OLDDECL might be an OVERLOAD (or perhaps even an
2751 ERROR_MARK), so we can't just blithely assume it to be a _DECL
2753 if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
2756 /* We check for decl != olddecl to avoid bogus errors for using a
2757 name inside a class. We check TPFI to avoid duplicate errors for
2758 inline member templates. */
2760 || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
2763 error ("declaration of %q+#D", decl);
2764 error (" shadows template parm %q+#D", olddecl);
2767 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
2768 ORIG_LEVEL, DECL, and TYPE. */
2771 build_template_parm_index (int index,
2777 tree t = make_node (TEMPLATE_PARM_INDEX);
2778 TEMPLATE_PARM_IDX (t) = index;
2779 TEMPLATE_PARM_LEVEL (t) = level;
2780 TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
2781 TEMPLATE_PARM_DECL (t) = decl;
2782 TREE_TYPE (t) = type;
2783 TREE_CONSTANT (t) = TREE_CONSTANT (decl);
2784 TREE_INVARIANT (t) = TREE_INVARIANT (decl);
2785 TREE_READONLY (t) = TREE_READONLY (decl);
2790 /* Find the canonical type parameter for the given template type
2791 parameter. Returns the canonical type parameter, which may be TYPE
2792 if no such parameter existed. */
2794 canonical_type_parameter (tree type)
2797 int idx = TEMPLATE_TYPE_IDX (type);
2798 if (!canonical_template_parms)
2799 canonical_template_parms = VEC_alloc (tree, gc, idx+1);
2801 while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
2802 VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
2804 list = VEC_index (tree, canonical_template_parms, idx);
2805 while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
2806 list = TREE_CHAIN (list);
2809 return TREE_VALUE (list);
2812 VEC_replace(tree, canonical_template_parms, idx,
2813 tree_cons (NULL_TREE, type,
2814 VEC_index (tree, canonical_template_parms, idx)));
2819 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
2820 TEMPLATE_PARM_LEVEL has been decreased by LEVELS. If such a
2821 TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
2822 new one is created. */
2825 reduce_template_parm_level (tree index, tree type, int levels)
2827 if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
2828 || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
2829 != TEMPLATE_PARM_LEVEL (index) - levels))
2831 tree orig_decl = TEMPLATE_PARM_DECL (index);
2834 decl = build_decl (TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
2835 TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
2836 TREE_INVARIANT (decl) = TREE_INVARIANT (orig_decl);
2837 TREE_READONLY (decl) = TREE_READONLY (orig_decl);
2838 DECL_ARTIFICIAL (decl) = 1;
2839 SET_DECL_TEMPLATE_PARM_P (decl);
2841 t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
2842 TEMPLATE_PARM_LEVEL (index) - levels,
2843 TEMPLATE_PARM_ORIG_LEVEL (index),
2845 TEMPLATE_PARM_DESCENDANTS (index) = t;
2846 TEMPLATE_PARM_PARAMETER_PACK (t)
2847 = TEMPLATE_PARM_PARAMETER_PACK (index);
2849 /* Template template parameters need this. */
2850 if (TREE_CODE (decl) != CONST_DECL)
2851 DECL_TEMPLATE_PARMS (decl)
2852 = DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index));
2855 return TEMPLATE_PARM_DESCENDANTS (index);
2858 /* Process information from new template parameter PARM and append it to the
2859 LIST being built. This new parameter is a non-type parameter iff
2860 IS_NON_TYPE is true. This new parameter is a parameter
2861 pack iff IS_PARAMETER_PACK is true. */
2864 process_template_parm (tree list, tree parm, bool is_non_type,
2865 bool is_parameter_pack)
2872 gcc_assert (TREE_CODE (parm) == TREE_LIST);
2873 defval = TREE_PURPOSE (parm);
2877 tree p = tree_last (list);
2879 if (p && TREE_VALUE (p) != error_mark_node)
2882 if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
2883 idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
2885 idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
2895 parm = TREE_VALUE (parm);
2897 SET_DECL_TEMPLATE_PARM_P (parm);
2899 if (TREE_TYPE (parm) == error_mark_node)
2901 err_parm_list = build_tree_list (defval, parm);
2902 TREE_VALUE (err_parm_list) = error_mark_node;
2903 return chainon (list, err_parm_list);
2909 The top-level cv-qualifiers on the template-parameter are
2910 ignored when determining its type. */
2911 TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
2912 if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
2914 err_parm_list = build_tree_list (defval, parm);
2915 TREE_VALUE (err_parm_list) = error_mark_node;
2916 return chainon (list, err_parm_list);
2919 if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
2921 /* This template parameter is not a parameter pack, but it
2922 should be. Complain about "bare" parameter packs. */
2923 check_for_bare_parameter_packs (TREE_TYPE (parm));
2925 /* Recover by calling this a parameter pack. */
2926 is_parameter_pack = true;
2930 /* A template parameter is not modifiable. */
2931 TREE_CONSTANT (parm) = 1;
2932 TREE_INVARIANT (parm) = 1;
2933 TREE_READONLY (parm) = 1;
2934 decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
2935 TREE_CONSTANT (decl) = 1;
2936 TREE_INVARIANT (decl) = 1;
2937 TREE_READONLY (decl) = 1;
2938 DECL_INITIAL (parm) = DECL_INITIAL (decl)
2939 = build_template_parm_index (idx, processing_template_decl,
2940 processing_template_decl,
2941 decl, TREE_TYPE (parm));
2943 TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
2944 = is_parameter_pack;
2949 parm = TREE_VALUE (TREE_VALUE (parm));
2951 if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
2953 t = make_aggr_type (TEMPLATE_TEMPLATE_PARM);
2954 /* This is for distinguishing between real templates and template
2955 template parameters */
2956 TREE_TYPE (parm) = t;
2957 TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
2962 t = make_aggr_type (TEMPLATE_TYPE_PARM);
2963 /* parm is either IDENTIFIER_NODE or NULL_TREE. */
2964 decl = build_decl (TYPE_DECL, parm, t);
2967 TYPE_NAME (t) = decl;
2968 TYPE_STUB_DECL (t) = decl;
2970 TEMPLATE_TYPE_PARM_INDEX (t)
2971 = build_template_parm_index (idx, processing_template_decl,
2972 processing_template_decl,
2973 decl, TREE_TYPE (parm));
2974 TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
2975 TYPE_CANONICAL (t) = canonical_type_parameter (t);
2977 DECL_ARTIFICIAL (decl) = 1;
2978 SET_DECL_TEMPLATE_PARM_P (decl);
2980 parm = build_tree_list (defval, parm);
2981 return chainon (list, parm);
2984 /* The end of a template parameter list has been reached. Process the
2985 tree list into a parameter vector, converting each parameter into a more
2986 useful form. Type parameters are saved as IDENTIFIER_NODEs, and others
2990 end_template_parm_list (tree parms)
2994 tree saved_parmlist = make_tree_vec (list_length (parms));
2996 current_template_parms
2997 = tree_cons (size_int (processing_template_decl),
2998 saved_parmlist, current_template_parms);
3000 for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3002 next = TREE_CHAIN (parm);
3003 TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3004 TREE_CHAIN (parm) = NULL_TREE;
3007 --processing_template_parmlist;
3009 return saved_parmlist;
3012 /* end_template_decl is called after a template declaration is seen. */
3015 end_template_decl (void)
3017 reset_specialization ();
3019 if (! processing_template_decl)
3022 /* This matches the pushlevel in begin_template_parm_list. */
3025 --processing_template_decl;
3026 current_template_parms = TREE_CHAIN (current_template_parms);
3029 /* Within the declaration of a template, return all levels of template
3030 parameters that apply. The template parameters are represented as
3031 a TREE_VEC, in the form documented in cp-tree.h for template
3035 current_template_args (void)
3038 tree args = NULL_TREE;
3039 int length = TMPL_PARMS_DEPTH (current_template_parms);
3042 /* If there is only one level of template parameters, we do not
3043 create a TREE_VEC of TREE_VECs. Instead, we return a single
3044 TREE_VEC containing the arguments. */
3046 args = make_tree_vec (length);
3048 for (header = current_template_parms; header; header = TREE_CHAIN (header))
3050 tree a = copy_node (TREE_VALUE (header));
3053 TREE_TYPE (a) = NULL_TREE;
3054 for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
3056 tree t = TREE_VEC_ELT (a, i);
3058 /* T will be a list if we are called from within a
3059 begin/end_template_parm_list pair, but a vector directly
3060 if within a begin/end_member_template_processing pair. */
3061 if (TREE_CODE (t) == TREE_LIST)
3065 if (t != error_mark_node)
3067 if (TREE_CODE (t) == TYPE_DECL
3068 || TREE_CODE (t) == TEMPLATE_DECL)
3072 if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3074 /* Turn this argument into a TYPE_ARGUMENT_PACK
3075 with a single element, which expands T. */
3076 tree vec = make_tree_vec (1);
3077 TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3079 t = make_node (TYPE_ARGUMENT_PACK);
3080 SET_ARGUMENT_PACK_ARGS (t, vec);
3085 t = DECL_INITIAL (t);
3087 if (TEMPLATE_PARM_PARAMETER_PACK (t))
3089 /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3090 with a single element, which expands T. */
3091 tree vec = make_tree_vec (1);
3092 tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3093 TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3095 t = make_node (NONTYPE_ARGUMENT_PACK);
3096 SET_ARGUMENT_PACK_ARGS (t, vec);
3097 TREE_TYPE (t) = type;
3101 TREE_VEC_ELT (a, i) = t;
3106 TREE_VEC_ELT (args, --l) = a;
3114 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
3115 template PARMS. If MEMBER_TEMPLATE_P is true, the new template is
3116 a member template. Used by push_template_decl below. */
3119 build_template_decl (tree decl, tree parms, bool member_template_p)
3121 tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
3122 DECL_TEMPLATE_PARMS (tmpl) = parms;
3123 DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
3124 DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
3125 if (DECL_LANG_SPECIFIC (decl))
3127 DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
3128 DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
3129 DECL_DESTRUCTOR_P (tmpl) = DECL_DESTRUCTOR_P (decl);
3130 DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
3131 DECL_ASSIGNMENT_OPERATOR_P (tmpl) = DECL_ASSIGNMENT_OPERATOR_P (decl);
3132 if (DECL_OVERLOADED_OPERATOR_P (decl))
3133 SET_OVERLOADED_OPERATOR_CODE (tmpl,
3134 DECL_OVERLOADED_OPERATOR_P (decl));
3140 struct template_parm_data
3142 /* The level of the template parameters we are currently
3146 /* The index of the specialization argument we are currently
3150 /* An array whose size is the number of template parameters. The
3151 elements are nonzero if the parameter has been used in any one
3152 of the arguments processed so far. */
3155 /* An array whose size is the number of template arguments. The
3156 elements are nonzero if the argument makes use of template
3157 parameters of this level. */
3158 int* arg_uses_template_parms;
3161 /* Subroutine of push_template_decl used to see if each template
3162 parameter in a partial specialization is used in the explicit
3163 argument list. If T is of the LEVEL given in DATA (which is
3164 treated as a template_parm_data*), then DATA->PARMS is marked
3168 mark_template_parm (tree t, void* data)
3172 struct template_parm_data* tpd = (struct template_parm_data*) data;
3174 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3176 level = TEMPLATE_PARM_LEVEL (t);
3177 idx = TEMPLATE_PARM_IDX (t);
3181 level = TEMPLATE_TYPE_LEVEL (t);
3182 idx = TEMPLATE_TYPE_IDX (t);
3185 if (level == tpd->level)
3187 tpd->parms[idx] = 1;
3188 tpd->arg_uses_template_parms[tpd->current_arg] = 1;
3191 /* Return zero so that for_each_template_parm will continue the
3192 traversal of the tree; we want to mark *every* template parm. */
3196 /* Process the partial specialization DECL. */
3199 process_partial_specialization (tree decl)
3201 tree type = TREE_TYPE (decl);
3202 tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
3203 tree specargs = CLASSTYPE_TI_ARGS (type);
3204 tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
3205 tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3206 tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
3207 int nargs = TREE_VEC_LENGTH (inner_args);
3208 int ntparms = TREE_VEC_LENGTH (inner_parms);
3210 int did_error_intro = 0;
3211 struct template_parm_data tpd;
3212 struct template_parm_data tpd2;
3214 /* We check that each of the template parameters given in the
3215 partial specialization is used in the argument list to the
3216 specialization. For example:
3218 template <class T> struct S;
3219 template <class T> struct S<T*>;
3221 The second declaration is OK because `T*' uses the template
3222 parameter T, whereas
3224 template <class T> struct S<int>;
3226 is no good. Even trickier is:
3237 The S2<T> declaration is actually invalid; it is a
3238 full-specialization. Of course,
3241 struct S2<T (*)(U)>;
3243 or some such would have been OK. */
3244 tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
3245 tpd.parms = (int *) alloca (sizeof (int) * ntparms);
3246 memset (tpd.parms, 0, sizeof (int) * ntparms);
3248 tpd.arg_uses_template_parms = (int *) alloca (sizeof (int) * nargs);
3249 memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
3250 for (i = 0; i < nargs; ++i)
3252 tpd.current_arg = i;
3253 for_each_template_parm (TREE_VEC_ELT (inner_args, i),
3254 &mark_template_parm,
3258 for (i = 0; i < ntparms; ++i)
3259 if (tpd.parms[i] == 0)
3261 /* One of the template parms was not used in the
3263 if (!did_error_intro)
3265 error ("template parameters not used in partial specialization:");
3266 did_error_intro = 1;
3269 error (" %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
3272 /* [temp.class.spec]
3274 The argument list of the specialization shall not be identical to
3275 the implicit argument list of the primary template. */
3276 if (comp_template_args
3278 INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
3280 error ("partial specialization %qT does not specialize any template arguments", type);
3282 /* [temp.class.spec]
3284 A partially specialized non-type argument expression shall not
3285 involve template parameters of the partial specialization except
3286 when the argument expression is a simple identifier.
3288 The type of a template parameter corresponding to a specialized
3289 non-type argument shall not be dependent on a parameter of the
3292 Also, we verify that pack expansions only occur at the
3293 end of the argument list. */
3294 gcc_assert (nargs == DECL_NTPARMS (maintmpl));
3296 for (i = 0; i < nargs; ++i)
3298 tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
3299 tree arg = TREE_VEC_ELT (inner_args, i);
3300 tree packed_args = NULL_TREE;
3303 if (ARGUMENT_PACK_P (arg))
3305 /* Extract the arguments from the argument pack. We'll be
3306 iterating over these in the following loop. */
3307 packed_args = ARGUMENT_PACK_ARGS (arg);
3308 len = TREE_VEC_LENGTH (packed_args);
3311 for (j = 0; j < len; j++)
3314 /* Get the Jth argument in the parameter pack. */
3315 arg = TREE_VEC_ELT (packed_args, j);
3317 if (PACK_EXPANSION_P (arg))
3319 /* Pack expansions must come at the end of the
3321 if ((packed_args && j < len - 1)
3322 || (!packed_args && i < nargs - 1))
3324 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3325 error ("parameter pack argument %qE must be at the end of the template argument list", arg);
3327 error ("parameter pack argument %qT must be at the end of the template argument list", arg);
3331 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3332 /* We only care about the pattern. */
3333 arg = PACK_EXPANSION_PATTERN (arg);
3335 if (/* These first two lines are the `non-type' bit. */
3337 && TREE_CODE (arg) != TEMPLATE_DECL
3338 /* This next line is the `argument expression is not just a
3339 simple identifier' condition and also the `specialized
3340 non-type argument' bit. */
3341 && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
3343 if ((!packed_args && tpd.arg_uses_template_parms[i])
3344 || (packed_args && uses_template_parms (arg)))
3345 error ("template argument %qE involves template parameter(s)",
3349 /* Look at the corresponding template parameter,
3350 marking which template parameters its type depends
3352 tree type = TREE_TYPE (parm);
3356 /* We haven't yet initialized TPD2. Do so now. */
3357 tpd2.arg_uses_template_parms
3358 = (int *) alloca (sizeof (int) * nargs);
3359 /* The number of parameters here is the number in the
3360 main template, which, as checked in the assertion
3362 tpd2.parms = (int *) alloca (sizeof (int) * nargs);
3364 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
3367 /* Mark the template parameters. But this time, we're
3368 looking for the template parameters of the main
3369 template, not in the specialization. */
3370 tpd2.current_arg = i;
3371 tpd2.arg_uses_template_parms[i] = 0;
3372 memset (tpd2.parms, 0, sizeof (int) * nargs);
3373 for_each_template_parm (type,
3374 &mark_template_parm,
3378 if (tpd2.arg_uses_template_parms [i])
3380 /* The type depended on some template parameters.
3381 If they are fully specialized in the
3382 specialization, that's OK. */
3384 for (j = 0; j < nargs; ++j)
3385 if (tpd2.parms[j] != 0
3386 && tpd.arg_uses_template_parms [j])
3388 error ("type %qT of template argument %qE depends "
3389 "on template parameter(s)",
3400 if (retrieve_specialization (maintmpl, specargs,
3401 /*class_specializations_p=*/true))
3402 /* We've already got this specialization. */
3405 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
3406 = tree_cons (specargs, inner_parms,
3407 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
3408 TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
3412 /* Check that a template declaration's use of default arguments is not
3413 invalid. Here, PARMS are the template parameters. IS_PRIMARY is
3414 nonzero if DECL is the thing declared by a primary template.
3415 IS_PARTIAL is nonzero if DECL is a partial specialization.
3418 IS_FRIEND_DECL is nonzero if DECL is a friend function template
3419 declaration (but not a definition); 1 indicates a declaration, 2
3420 indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
3421 emitted for extraneous default arguments.
3423 Returns TRUE if there were no errors found, FALSE otherwise. */
3426 check_default_tmpl_args (tree decl, tree parms, int is_primary,
3427 int is_partial, int is_friend_decl)
3430 int last_level_to_check;
3432 bool no_errors = true;
3436 A default template-argument shall not be specified in a
3437 function template declaration or a function template definition, nor
3438 in the template-parameter-list of the definition of a member of a
3441 if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
3442 /* You can't have a function template declaration in a local
3443 scope, nor you can you define a member of a class template in a
3447 if (current_class_type
3448 && !TYPE_BEING_DEFINED (current_class_type)
3449 && DECL_LANG_SPECIFIC (decl)
3450 /* If this is either a friend defined in the scope of the class
3451 or a member function. */
3452 && (DECL_FUNCTION_MEMBER_P (decl)
3453 ? same_type_p (DECL_CONTEXT (decl), current_class_type)
3454 : DECL_FRIEND_CONTEXT (decl)
3455 ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
3457 /* And, if it was a member function, it really was defined in
3458 the scope of the class. */
3459 && (!DECL_FUNCTION_MEMBER_P (decl)
3460 || DECL_INITIALIZED_IN_CLASS_P (decl)))
3461 /* We already checked these parameters when the template was
3462 declared, so there's no need to do it again now. This function
3463 was defined in class scope, but we're processing it's body now
3464 that the class is complete. */
3467 /* Core issue 226 (C++0x only): the following only applies to class
3469 if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
3473 If a template-parameter has a default template-argument, all
3474 subsequent template-parameters shall have a default
3475 template-argument supplied. */
3476 for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
3478 tree inner_parms = TREE_VALUE (parm_level);
3479 int ntparms = TREE_VEC_LENGTH (inner_parms);
3480 int seen_def_arg_p = 0;
3483 for (i = 0; i < ntparms; ++i)
3485 tree parm = TREE_VEC_ELT (inner_parms, i);
3487 if (parm == error_mark_node)
3490 if (TREE_PURPOSE (parm))
3492 else if (seen_def_arg_p)
3494 error ("no default argument for %qD", TREE_VALUE (parm));
3495 /* For better subsequent error-recovery, we indicate that
3496 there should have been a default argument. */
3497 TREE_PURPOSE (parm) = error_mark_node;
3504 if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
3508 /* For an ordinary class template, default template arguments are
3509 allowed at the innermost level, e.g.:
3510 template <class T = int>
3512 but, in a partial specialization, they're not allowed even
3513 there, as we have in [temp.class.spec]:
3515 The template parameter list of a specialization shall not
3516 contain default template argument values.
3518 So, for a partial specialization, or for a function template
3519 (in C++98/C++03), we look at all of them. */
3522 /* But, for a primary class template that is not a partial
3523 specialization we look at all template parameters except the
3525 parms = TREE_CHAIN (parms);
3527 /* Figure out what error message to issue. */
3528 if (is_friend_decl == 2)
3529 msg = "default template arguments may not be used in function template friend re-declaration";
3530 else if (is_friend_decl)
3531 msg = "default template arguments may not be used in function template friend declarations";
3532 else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
3533 msg = "default template arguments may not be used in function templates";
3534 else if (is_partial)
3535 msg = "default template arguments may not be used in partial specializations";
3537 msg = "default argument for template parameter for class enclosing %qD";
3539 if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
3540 /* If we're inside a class definition, there's no need to
3541 examine the parameters to the class itself. On the one
3542 hand, they will be checked when the class is defined, and,
3543 on the other, default arguments are valid in things like:
3544 template <class T = double>
3545 struct S { template <class U> void f(U); };
3546 Here the default argument for `S' has no bearing on the
3547 declaration of `f'. */
3548 last_level_to_check = template_class_depth (current_class_type) + 1;
3550 /* Check everything. */
3551 last_level_to_check = 0;
3553 for (parm_level = parms;
3554 parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
3555 parm_level = TREE_CHAIN (parm_level))
3557 tree inner_parms = TREE_VALUE (parm_level);
3561 ntparms = TREE_VEC_LENGTH (inner_parms);
3562 for (i = 0; i < ntparms; ++i)
3564 if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
3567 if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
3572 if (is_friend_decl == 2)
3579 /* Clear out the default argument so that we are not
3581 TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
3585 /* At this point, if we're still interested in issuing messages,
3586 they must apply to classes surrounding the object declared. */
3588 msg = "default argument for template parameter for class enclosing %qD";
3594 /* Worker for push_template_decl_real, called via
3595 for_each_template_parm. DATA is really an int, indicating the
3596 level of the parameters we are interested in. If T is a template
3597 parameter of that level, return nonzero. */
3600 template_parm_this_level_p (tree t, void* data)
3602 int this_level = *(int *)data;
3605 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3606 level = TEMPLATE_PARM_LEVEL (t);
3608 level = TEMPLATE_TYPE_LEVEL (t);
3609 return level == this_level;
3612 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
3613 parameters given by current_template_args, or reuses a
3614 previously existing one, if appropriate. Returns the DECL, or an
3615 equivalent one, if it is replaced via a call to duplicate_decls.
3617 If IS_FRIEND is true, DECL is a friend declaration. */
3620 push_template_decl_real (tree decl, bool is_friend)
3628 int new_template_p = 0;
3629 /* True if the template is a member template, in the sense of
3631 bool member_template_p = false;
3633 if (decl == error_mark_node)
3636 /* See if this is a partial specialization. */
3637 is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
3638 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
3639 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
3641 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
3645 /* For a friend, we want the context of the friend function, not
3646 the type of which it is a friend. */
3647 ctx = DECL_CONTEXT (decl);
3648 else if (CP_DECL_CONTEXT (decl)
3649 && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
3650 /* In the case of a virtual function, we want the class in which
3652 ctx = CP_DECL_CONTEXT (decl);
3654 /* Otherwise, if we're currently defining some class, the DECL
3655 is assumed to be a member of the class. */
3656 ctx = current_scope ();
3658 if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
3661 if (!DECL_CONTEXT (decl))
3662 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
3664 /* See if this is a primary template. */
3665 if (is_friend && ctx)
3666 /* A friend template that specifies a class context, i.e.
3667 template <typename T> friend void A<T>::f();
3671 primary = template_parm_scope_p ();
3675 if (DECL_CLASS_SCOPE_P (decl))
3676 member_template_p = true;
3677 if (TREE_CODE (decl) == TYPE_DECL
3678 && ANON_AGGRNAME_P (DECL_NAME (decl)))
3679 error ("template class without a name");
3680 else if (TREE_CODE (decl) == FUNCTION_DECL)
3682 if (DECL_DESTRUCTOR_P (decl))
3686 A destructor shall not be a member template. */
3687 error ("destructor %qD declared as member template", decl);
3688 return error_mark_node;
3690 if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
3691 && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
3692 || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
3693 || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
3694 || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
3695 == void_list_node)))
3697 /* [basic.stc.dynamic.allocation]
3699 An allocation function can be a function
3700 template. ... Template allocation functions shall
3701 have two or more parameters. */
3702 error ("invalid template declaration of %qD", decl);
3703 return error_mark_node;
3706 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3707 && CLASS_TYPE_P (TREE_TYPE (decl)))
3711 error ("template declaration of %q#D", decl);
3712 return error_mark_node;
3716 /* Check to see that the rules regarding the use of default
3717 arguments are not being violated. */
3718 check_default_tmpl_args (decl, current_template_parms,
3719 primary, is_partial, /*is_friend_decl=*/0);
3721 /* Ensure that there are no parameter packs in the type of this
3722 declaration that have not been expanded. */
3723 if (TREE_CODE (decl) == FUNCTION_DECL)
3725 /* Check each of the arguments individually to see if there are
3726 any bare parameter packs. */
3727 tree type = TREE_TYPE (decl);
3728 tree arg = DECL_ARGUMENTS (decl);
3729 tree argtype = TYPE_ARG_TYPES (type);
3731 while (arg && argtype)
3733 if (!FUNCTION_PARAMETER_PACK_P (arg)
3734 && !check_for_bare_parameter_packs (TREE_TYPE (arg)))
3736 /* This is a PARM_DECL that contains unexpanded parameter
3737 packs. We have already complained about this in the
3738 check_for_bare_parameter_packs call, so just replace
3739 these types with ERROR_MARK_NODE. */
3740 TREE_TYPE (arg) = error_mark_node;
3741 TREE_VALUE (argtype) = error_mark_node;
3744 arg = TREE_CHAIN (arg);
3745 argtype = TREE_CHAIN (argtype);
3748 /* Check for bare parameter packs in the return type and the
3749 exception specifiers. */
3750 check_for_bare_parameter_packs (TREE_TYPE (type));
3751 check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type));
3754 check_for_bare_parameter_packs (TREE_TYPE (decl));
3757 return process_partial_specialization (decl);
3759 /* A primary class template can only have one parameter pack, at the
3760 end of the template parameter list. */
3761 if (primary && TREE_CODE (decl) == TYPE_DECL)
3764 = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3765 int i, len = TREE_VEC_LENGTH (inner_parms);
3766 for (i = 0; i < len - 1; i++)
3768 tree parm = TREE_VALUE (TREE_VEC_ELT (inner_parms, i));
3770 if (template_parameter_pack_p (parm))
3772 if (TREE_CODE (parm) == PARM_DECL)
3773 error ("parameter pack %qE must be at the end of the"
3774 " template parameter list", parm);
3776 error ("parameter pack %qT must be at the end of the"
3777 " template parameter list", TREE_TYPE (parm));
3782 args = current_template_args ();
3785 || TREE_CODE (ctx) == FUNCTION_DECL
3786 || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
3787 || (is_friend && !DECL_TEMPLATE_INFO (decl)))
3789 if (DECL_LANG_SPECIFIC (decl)
3790 && DECL_TEMPLATE_INFO (decl)
3791 && DECL_TI_TEMPLATE (decl))
3792 tmpl = DECL_TI_TEMPLATE (decl);
3793 /* If DECL is a TYPE_DECL for a class-template, then there won't
3794 be DECL_LANG_SPECIFIC. The information equivalent to
3795 DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead. */
3796 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3797 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3798 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3800 /* Since a template declaration already existed for this
3801 class-type, we must be redeclaring it here. Make sure
3802 that the redeclaration is valid. */
3803 redeclare_class_template (TREE_TYPE (decl),
3804 current_template_parms);
3805 /* We don't need to create a new TEMPLATE_DECL; just use the
3806 one we already had. */
3807 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3811 tmpl = build_template_decl (decl, current_template_parms,
3815 if (DECL_LANG_SPECIFIC (decl)
3816 && DECL_TEMPLATE_SPECIALIZATION (decl))
3818 /* A specialization of a member template of a template
3820 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3821 DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
3822 DECL_TEMPLATE_INFO (decl) = NULL_TREE;
3828 tree a, t, current, parms;
3831 if (TREE_CODE (decl) == TYPE_DECL)
3833 if ((IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (decl)))
3834 || TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
3835 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3836 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3837 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3840 error ("%qD does not declare a template type", decl);
3844 else if (!DECL_LANG_SPECIFIC (decl) || !DECL_TEMPLATE_INFO (decl))
3846 error ("template definition of non-template %q#D", decl);
3850 tmpl = DECL_TI_TEMPLATE (decl);
3852 if (DECL_FUNCTION_TEMPLATE_P (tmpl)
3853 && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
3854 && DECL_TEMPLATE_SPECIALIZATION (decl)
3855 && DECL_MEMBER_TEMPLATE_P (tmpl))
3859 /* The declaration is a specialization of a member
3860 template, declared outside the class. Therefore, the
3861 innermost template arguments will be NULL, so we
3862 replace them with the arguments determined by the
3863 earlier call to check_explicit_specialization. */
3864 args = DECL_TI_ARGS (decl);
3867 = build_template_decl (decl, current_template_parms,
3869 DECL_TEMPLATE_RESULT (new_tmpl) = decl;
3870 TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
3871 DECL_TI_TEMPLATE (decl) = new_tmpl;
3872 SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
3873 DECL_TEMPLATE_INFO (new_tmpl)
3874 = tree_cons (tmpl, args, NULL_TREE);
3876 register_specialization (new_tmpl,
3877 most_general_template (tmpl),
3883 /* Make sure the template headers we got make sense. */
3885 parms = DECL_TEMPLATE_PARMS (tmpl);
3886 i = TMPL_PARMS_DEPTH (parms);
3887 if (TMPL_ARGS_DEPTH (args) != i)
3889 error ("expected %d levels of template parms for %q#D, got %d",
3890 i, decl, TMPL_ARGS_DEPTH (args));
3893 for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
3895 a = TMPL_ARGS_LEVEL (args, i);
3896 t = INNERMOST_TEMPLATE_PARMS (parms);
3898 if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
3900 if (current == decl)
3901 error ("got %d template parameters for %q#D",
3902 TREE_VEC_LENGTH (a), decl);
3904 error ("got %d template parameters for %q#T",
3905 TREE_VEC_LENGTH (a), current);
3906 error (" but %d required", TREE_VEC_LENGTH (t));
3907 return error_mark_node;
3910 /* Perhaps we should also check that the parms are used in the
3911 appropriate qualifying scopes in the declarator? */
3913 if (current == decl)
3916 current = (TYPE_P (current)
3917 ? TYPE_CONTEXT (current)
3918 : DECL_CONTEXT (current));
3922 DECL_TEMPLATE_RESULT (tmpl) = decl;
3923 TREE_TYPE (tmpl) = TREE_TYPE (decl);
3925 /* Push template declarations for global functions and types. Note
3926 that we do not try to push a global template friend declared in a
3927 template class; such a thing may well depend on the template
3928 parameters of the class. */
3929 if (new_template_p && !ctx
3930 && !(is_friend && template_class_depth (current_class_type) > 0))
3932 tmpl = pushdecl_namespace_level (tmpl, is_friend);
3933 if (tmpl == error_mark_node)
3934 return error_mark_node;
3936 /* Hide template friend classes that haven't been declared yet. */
3937 if (is_friend && TREE_CODE (decl) == TYPE_DECL)
3939 DECL_ANTICIPATED (tmpl) = 1;
3940 DECL_FRIEND_P (tmpl) = 1;
3946 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
3947 if (DECL_CONV_FN_P (tmpl))
3949 int depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
3951 /* It is a conversion operator. See if the type converted to
3952 depends on innermost template operands. */
3954 if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
3956 DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
3960 /* The DECL_TI_ARGS of DECL contains full set of arguments referring
3961 back to its most general template. If TMPL is a specialization,
3962 ARGS may only have the innermost set of arguments. Add the missing
3963 argument levels if necessary. */
3964 if (DECL_TEMPLATE_INFO (tmpl))
3965 args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
3967 info = tree_cons (tmpl, args, NULL_TREE);
3969 if (DECL_IMPLICIT_TYPEDEF_P (decl))
3970 SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
3971 else if (DECL_LANG_SPECIFIC (decl))
3972 DECL_TEMPLATE_INFO (decl) = info;
3974 return DECL_TEMPLATE_RESULT (tmpl);
3978 push_template_decl (tree decl)
3980 return push_template_decl_real (decl, false);
3983 /* Called when a class template TYPE is redeclared with the indicated
3984 template PARMS, e.g.:
3986 template <class T> struct S;
3987 template <class T> struct S {}; */
3990 redeclare_class_template (tree type, tree parms)
3996 if (!TYPE_TEMPLATE_INFO (type))
3998 error ("%qT is not a template type", type);
4002 tmpl = TYPE_TI_TEMPLATE (type);
4003 if (!PRIMARY_TEMPLATE_P (tmpl))
4004 /* The type is nested in some template class. Nothing to worry
4005 about here; there are no new template parameters for the nested
4011 error ("template specifiers not specified in declaration of %qD",
4016 parms = INNERMOST_TEMPLATE_PARMS (parms);
4017 tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
4019 if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
4021 error ("previous declaration %q+D", tmpl);
4022 error ("used %d template parameter(s) instead of %d",
4023 TREE_VEC_LENGTH (tmpl_parms),
4024 TREE_VEC_LENGTH (parms));
4028 for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
4035 if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
4036 || TREE_VEC_ELT (parms, i) == error_mark_node)
4039 tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
4040 parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4041 tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
4042 parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
4044 /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
4046 if (tmpl_parm != error_mark_node
4047 && (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
4048 || (TREE_CODE (tmpl_parm) != TYPE_DECL
4049 && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))))
4051 error ("template parameter %q+#D", tmpl_parm);
4052 error ("redeclared here as %q#D", parm);
4056 if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
4058 /* We have in [temp.param]:
4060 A template-parameter may not be given default arguments
4061 by two different declarations in the same scope. */
4062 error ("redefinition of default argument for %q#D", parm);
4063 error ("%J original definition appeared here", tmpl_parm);
4067 if (parm_default != NULL_TREE)
4068 /* Update the previous template parameters (which are the ones
4069 that will really count) with the new default value. */
4070 TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
4071 else if (tmpl_default != NULL_TREE)
4072 /* Update the new parameters, too; they'll be used as the
4073 parameters for any members. */
4074 TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
4080 /* Simplify EXPR if it is a non-dependent expression. Returns the
4081 (possibly simplified) expression. */
4084 fold_non_dependent_expr (tree expr)
4086 if (expr == NULL_TREE)
4089 /* If we're in a template, but EXPR isn't value dependent, simplify
4090 it. We're supposed to treat:
4092 template <typename T> void f(T[1 + 1]);
4093 template <typename T> void f(T[2]);
4095 as two declarations of the same function, for example. */
4096 if (processing_template_decl
4097 && !type_dependent_expression_p (expr)
4098 && !value_dependent_expression_p (expr))
4100 HOST_WIDE_INT saved_processing_template_decl;
4102 saved_processing_template_decl = processing_template_decl;
4103 processing_template_decl = 0;
4104 expr = tsubst_copy_and_build (expr,
4107 /*in_decl=*/NULL_TREE,
4108 /*function_p=*/false,
4109 /*integral_constant_expression_p=*/true);
4110 processing_template_decl = saved_processing_template_decl;
4115 /* EXPR is an expression which is used in a constant-expression context.
4116 For instance, it could be a VAR_DECL with a constant initializer.
4117 Extract the innest constant expression.
4119 This is basically a more powerful version of
4120 integral_constant_value, which can be used also in templates where
4121 initializers can maintain a syntactic rather than semantic form
4122 (even if they are non-dependent, for access-checking purposes). */
4125 fold_decl_constant_value (tree expr)
4127 tree const_expr = expr;
4130 expr = fold_non_dependent_expr (const_expr);
4131 const_expr = integral_constant_value (expr);
4133 while (expr != const_expr);
4138 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
4139 must be a function or a pointer-to-function type, as specified
4140 in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
4141 and check that the resulting function has external linkage. */
4144 convert_nontype_argument_function (tree type, tree expr)
4149 fn = instantiate_type (type, fns, tf_none);
4150 if (fn == error_mark_node)
4151 return error_mark_node;
4154 if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
4155 fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
4156 if (TREE_CODE (fn_no_ptr) == BASELINK)
4157 fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
4159 /* [temp.arg.nontype]/1
4161 A template-argument for a non-type, non-template template-parameter
4164 -- the address of an object or function with external linkage. */
4165 if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
4167 error ("%qE is not a valid template argument for type %qT "
4168 "because function %qD has not external linkage",
4169 expr, type, fn_no_ptr);
4176 /* Attempt to convert the non-type template parameter EXPR to the
4177 indicated TYPE. If the conversion is successful, return the
4178 converted value. If the conversion is unsuccessful, return
4179 NULL_TREE if we issued an error message, or error_mark_node if we
4180 did not. We issue error messages for out-and-out bad template
4181 parameters, but not simply because the conversion failed, since we
4182 might be just trying to do argument deduction. Both TYPE and EXPR
4183 must be non-dependent.
4185 The conversion follows the special rules described in
4186 [temp.arg.nontype], and it is much more strict than an implicit
4189 This function is called twice for each template argument (see
4190 lookup_template_class for a more accurate description of this
4191 problem). This means that we need to handle expressions which
4192 are not valid in a C++ source, but can be created from the
4193 first call (for instance, casts to perform conversions). These
4194 hacks can go away after we fix the double coercion problem. */
4197 convert_nontype_argument (tree type, tree expr)
4201 /* Detect immediately string literals as invalid non-type argument.
4202 This special-case is not needed for correctness (we would easily
4203 catch this later), but only to provide better diagnostic for this
4204 common user mistake. As suggested by DR 100, we do not mention
4205 linkage issues in the diagnostic as this is not the point. */
4206 if (TREE_CODE (expr) == STRING_CST)
4208 error ("%qE is not a valid template argument for type %qT "
4209 "because string literals can never be used in this context",
4214 /* If we are in a template, EXPR may be non-dependent, but still
4215 have a syntactic, rather than semantic, form. For example, EXPR
4216 might be a SCOPE_REF, rather than the VAR_DECL to which the
4217 SCOPE_REF refers. Preserving the qualifying scope is necessary
4218 so that access checking can be performed when the template is
4219 instantiated -- but here we need the resolved form so that we can
4220 convert the argument. */
4221 expr = fold_non_dependent_expr (expr);
4222 if (error_operand_p (expr))
4223 return error_mark_node;
4224 expr_type = TREE_TYPE (expr);
4226 /* HACK: Due to double coercion, we can get a
4227 NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
4228 which is the tree that we built on the first call (see
4229 below when coercing to reference to object or to reference to
4230 function). We just strip everything and get to the arg.
4231 See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
4233 if (TREE_CODE (expr) == NOP_EXPR)
4235 if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
4237 /* ??? Maybe we could use convert_from_reference here, but we
4238 would need to relax its constraints because the NOP_EXPR
4239 could actually change the type to something more cv-qualified,
4240 and this is not folded by convert_from_reference. */
4241 tree addr = TREE_OPERAND (expr, 0);
4242 gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
4243 gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
4244 gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
4245 gcc_assert (same_type_ignoring_top_level_qualifiers_p
4246 (TREE_TYPE (expr_type),
4247 TREE_TYPE (TREE_TYPE (addr))));
4249 expr = TREE_OPERAND (addr, 0);
4250 expr_type = TREE_TYPE (expr);
4253 /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
4254 parameter is a pointer to object, through decay and
4255 qualification conversion. Let's strip everything. */
4256 else if (TYPE_PTROBV_P (type))
4259 gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
4260 gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
4261 /* Skip the ADDR_EXPR only if it is part of the decay for
4262 an array. Otherwise, it is part of the original argument
4263 in the source code. */
4264 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
4265 expr = TREE_OPERAND (expr, 0);
4266 expr_type = TREE_TYPE (expr);
4270 /* [temp.arg.nontype]/5, bullet 1
4272 For a non-type template-parameter of integral or enumeration type,
4273 integral promotions (_conv.prom_) and integral conversions
4274 (_conv.integral_) are applied. */
4275 if (INTEGRAL_TYPE_P (type))
4277 if (!INTEGRAL_TYPE_P (expr_type))
4278 return error_mark_node;
4280 expr = fold_decl_constant_value (expr);
4281 /* Notice that there are constant expressions like '4 % 0' which
4282 do not fold into integer constants. */
4283 if (TREE_CODE (expr) != INTEGER_CST)
4285 error ("%qE is not a valid template argument for type %qT "
4286 "because it is a non-constant expression", expr, type);
4290 /* At this point, an implicit conversion does what we want,
4291 because we already know that the expression is of integral
4293 expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
4294 if (expr == error_mark_node)
4295 return error_mark_node;
4297 /* Conversion was allowed: fold it to a bare integer constant. */
4300 /* [temp.arg.nontype]/5, bullet 2
4302 For a non-type template-parameter of type pointer to object,
4303 qualification conversions (_conv.qual_) and the array-to-pointer
4304 conversion (_conv.array_) are applied. */
4305 else if (TYPE_PTROBV_P (type))
4307 /* [temp.arg.nontype]/1 (TC1 version, DR 49):
4309 A template-argument for a non-type, non-template template-parameter
4310 shall be one of: [...]
4312 -- the name of a non-type template-parameter;
4313 -- the address of an object or function with external linkage, [...]
4314 expressed as "& id-expression" where the & is optional if the name
4315 refers to a function or array, or if the corresponding
4316 template-parameter is a reference.
4318 Here, we do not care about functions, as they are invalid anyway
4319 for a parameter of type pointer-to-object. */
4321 if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
4322 /* Non-type template parameters are OK. */
4324 else if (TREE_CODE (expr) != ADDR_EXPR
4325 && TREE_CODE (expr_type) != ARRAY_TYPE)
4327 if (TREE_CODE (expr) == VAR_DECL)
4329 error ("%qD is not a valid template argument "
4330 "because %qD is a variable, not the address of "
4335 /* Other values, like integer constants, might be valid
4336 non-type arguments of some other type. */
4337 return error_mark_node;
4343 decl = ((TREE_CODE (expr) == ADDR_EXPR)
4344 ? TREE_OPERAND (expr, 0) : expr);
4345 if (TREE_CODE (decl) != VAR_DECL)
4347 error ("%qE is not a valid template argument of type %qT "
4348 "because %qE is not a variable",
4352 else if (!DECL_EXTERNAL_LINKAGE_P (decl))
4354 error ("%qE is not a valid template argument of type %qT "
4355 "because %qD does not have external linkage",
4361 expr = decay_conversion (expr);
4362 if (expr == error_mark_node)
4363 return error_mark_node;
4365 expr = perform_qualification_conversions (type, expr);
4366 if (expr == error_mark_node)
4367 return error_mark_node;
4369 /* [temp.arg.nontype]/5, bullet 3
4371 For a non-type template-parameter of type reference to object, no
4372 conversions apply. The type referred to by the reference may be more
4373 cv-qualified than the (otherwise identical) type of the
4374 template-argument. The template-parameter is bound directly to the
4375 template-argument, which must be an lvalue. */
4376 else if (TYPE_REF_OBJ_P (type))
4378 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
4380 return error_mark_node;
4382 if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
4384 error ("%qE is not a valid template argument for type %qT "
4385 "because of conflicts in cv-qualification", expr, type);
4389 if (!real_lvalue_p (expr))
4391 error ("%qE is not a valid template argument for type %qT "
4392 "because it is not an lvalue", expr, type);
4396 /* [temp.arg.nontype]/1
4398 A template-argument for a non-type, non-template template-parameter
4399 shall be one of: [...]
4401 -- the address of an object or function with external linkage. */
4402 if (!DECL_EXTERNAL_LINKAGE_P (expr))
4404 error ("%qE is not a valid template argument for type %qT "
4405 "because object %qD has not external linkage",
4410 expr = build_nop (type, build_address (expr));
4412 /* [temp.arg.nontype]/5, bullet 4
4414 For a non-type template-parameter of type pointer to function, only
4415 the function-to-pointer conversion (_conv.func_) is applied. If the
4416 template-argument represents a set of overloaded functions (or a
4417 pointer to such), the matching function is selected from the set
4419 else if (TYPE_PTRFN_P (type))
4421 /* If the argument is a template-id, we might not have enough
4422 context information to decay the pointer. */
4423 if (!type_unknown_p (expr_type))
4425 expr = decay_conversion (expr);
4426 if (expr == error_mark_node)
4427 return error_mark_node;
4430 expr = convert_nontype_argument_function (type, expr);
4431 if (!expr || expr == error_mark_node)
4434 /* [temp.arg.nontype]/5, bullet 5
4436 For a non-type template-parameter of type reference to function, no
4437 conversions apply. If the template-argument represents a set of
4438 overloaded functions, the matching function is selected from the set
4440 else if (TYPE_REFFN_P (type))
4442 if (TREE_CODE (expr) == ADDR_EXPR)
4444 error ("%qE is not a valid template argument for type %qT "
4445 "because it is a pointer", expr, type);
4446 inform ("try using %qE instead", TREE_OPERAND (expr, 0));
4450 expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
4451 if (!expr || expr == error_mark_node)
4454 expr = build_nop (type, build_address (expr));
4456 /* [temp.arg.nontype]/5, bullet 6
4458 For a non-type template-parameter of type pointer to member function,
4459 no conversions apply. If the template-argument represents a set of
4460 overloaded member functions, the matching member function is selected
4461 from the set (_over.over_). */
4462 else if (TYPE_PTRMEMFUNC_P (type))
4464 expr = instantiate_type (type, expr, tf_none);
4465 if (expr == error_mark_node)
4466 return error_mark_node;
4468 /* There is no way to disable standard conversions in
4469 resolve_address_of_overloaded_function (called by
4470 instantiate_type). It is possible that the call succeeded by
4471 converting &B::I to &D::I (where B is a base of D), so we need
4472 to reject this conversion here.
4474 Actually, even if there was a way to disable standard conversions,
4475 it would still be better to reject them here so that we can
4476 provide a superior diagnostic. */
4477 if (!same_type_p (TREE_TYPE (expr), type))
4479 /* Make sure we are just one standard conversion off. */
4480 gcc_assert (can_convert (type, TREE_TYPE (expr)));
4481 error ("%qE is not a valid template argument for type %qT "
4482 "because it is of type %qT", expr, type,
4484 inform ("standard conversions are not allowed in this context");
4488 /* [temp.arg.nontype]/5, bullet 7
4490 For a non-type template-parameter of type pointer to data member,
4491 qualification conversions (_conv.qual_) are applied. */
4492 else if (TYPE_PTRMEM_P (type))
4494 expr = perform_qualification_conversions (type, expr);
4495 if (expr == error_mark_node)
4498 /* A template non-type parameter must be one of the above. */
4502 /* Sanity check: did we actually convert the argument to the
4504 gcc_assert (same_type_p (type, TREE_TYPE (expr)));
4509 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
4510 template template parameters. Both PARM_PARMS and ARG_PARMS are
4511 vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
4514 Consider the example:
4515 template <class T> class A;
4516 template<template <class U> class TT> class B;
4518 For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
4519 the parameters to A, and OUTER_ARGS contains A. */
4522 coerce_template_template_parms (tree parm_parms,
4524 tsubst_flags_t complain,
4528 int nparms, nargs, i;
4531 gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
4532 gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
4534 nparms = TREE_VEC_LENGTH (parm_parms);
4535 nargs = TREE_VEC_LENGTH (arg_parms);
4537 if (nargs != nparms)
4540 for (i = 0; i < nparms; ++i)
4542 if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
4543 || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
4546 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
4547 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
4549 if (arg == NULL_TREE || arg == error_mark_node
4550 || parm == NULL_TREE || parm == error_mark_node)
4553 if (TREE_CODE (arg) != TREE_CODE (parm))
4556 switch (TREE_CODE (parm))
4559 /* We encounter instantiations of templates like
4560 template <template <template <class> class> class TT>
4563 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4564 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
4566 if (!coerce_template_template_parms
4567 (parmparm, argparm, complain, in_decl, outer_args))
4573 if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))
4574 != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg)))
4575 /* One is a parameter pack, the other is not. */
4580 /* The tsubst call is used to handle cases such as
4582 template <int> class C {};
4583 template <class T, template <T> class TT> class D {};
4586 i.e. the parameter list of TT depends on earlier parameters. */
4587 if (!dependent_type_p (TREE_TYPE (arg))
4589 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
4593 if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
4594 != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg)))
4595 /* One is a parameter pack, the other is not. */
4606 /* Convert the indicated template ARG as necessary to match the
4607 indicated template PARM. Returns the converted ARG, or
4608 error_mark_node if the conversion was unsuccessful. Error and
4609 warning messages are issued under control of COMPLAIN. This
4610 conversion is for the Ith parameter in the parameter list. ARGS is
4611 the full set of template arguments deduced so far. */
4614 convert_template_argument (tree parm,
4617 tsubst_flags_t complain,
4622 int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
4623 tree check_arg = arg;
4625 if (TREE_CODE (arg) == TREE_LIST
4626 && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
4628 /* The template argument was the name of some
4629 member function. That's usually
4630 invalid, but static members are OK. In any
4631 case, grab the underlying fields/functions
4632 and issue an error later if required. */
4633 arg = TREE_VALUE (arg);
4634 TREE_TYPE (arg) = unknown_type_node;
4637 requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
4638 requires_type = (TREE_CODE (parm) == TYPE_DECL
4639 || requires_tmpl_type);
4641 /* When determining whether an argument pack expansion is a template,
4642 look at the pattern. */
4643 if (TREE_CODE (check_arg) == TYPE_PACK_EXPANSION)
4644 check_arg = PACK_EXPANSION_PATTERN (check_arg);
4647 ((TREE_CODE (check_arg) == TEMPLATE_DECL
4648 && TREE_CODE (DECL_TEMPLATE_RESULT (check_arg)) == TYPE_DECL)
4649 || TREE_CODE (check_arg) == TEMPLATE_TEMPLATE_PARM
4650 || TREE_CODE (check_arg) == UNBOUND_CLASS_TEMPLATE);
4653 && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4654 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
4655 arg = TYPE_STUB_DECL (arg);
4657 is_type = TYPE_P (arg) || is_tmpl_type;
4659 if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
4660 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
4662 pedwarn ("to refer to a type member of a template parameter, "
4663 "use %<typename %E%>", arg);
4665 arg = make_typename_type (TREE_OPERAND (arg, 0),
4666 TREE_OPERAND (arg, 1),
4668 complain & tf_error);
4671 if (is_type != requires_type)
4675 if (complain & tf_error)
4677 error ("type/value mismatch at argument %d in template "
4678 "parameter list for %qD",
4681 error (" expected a constant of type %qT, got %qT",
4683 (is_tmpl_type ? DECL_NAME (arg) : arg));
4684 else if (requires_tmpl_type)
4685 error (" expected a class template, got %qE", arg);
4687 error (" expected a type, got %qE", arg);
4690 return error_mark_node;
4692 if (is_tmpl_type ^ requires_tmpl_type)
4694 if (in_decl && (complain & tf_error))
4696 error ("type/value mismatch at argument %d in template "
4697 "parameter list for %qD",
4700 error (" expected a type, got %qT", DECL_NAME (arg));
4702 error (" expected a class template, got %qT", arg);
4704 return error_mark_node;
4709 if (requires_tmpl_type)
4711 if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
4712 /* The number of argument required is not known yet.
4713 Just accept it for now. */
4714 val = TREE_TYPE (arg);
4717 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4721 /* When determining whether a pack expansion is a template,
4722 look at the pattern. */
4723 if (TREE_CODE (check_arg) == TYPE_PACK_EXPANSION)
4724 check_arg = PACK_EXPANSION_PATTERN (check_arg);
4726 argparm = DECL_INNERMOST_TEMPLATE_PARMS (check_arg);
4728 if (coerce_template_template_parms (parmparm, argparm,
4734 /* TEMPLATE_TEMPLATE_PARM node is preferred over
4736 if (val != error_mark_node)
4738 if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
4739 val = TREE_TYPE (val);
4740 else if (TREE_CODE (val) == TYPE_PACK_EXPANSION
4741 && DECL_TEMPLATE_TEMPLATE_PARM_P (check_arg))
4743 val = TREE_TYPE (check_arg);
4744 val = make_pack_expansion (val);
4750 if (in_decl && (complain & tf_error))
4752 error ("type/value mismatch at argument %d in "
4753 "template parameter list for %qD",
4755 error (" expected a template of type %qD, got %qD",
4759 val = error_mark_node;
4765 /* We only form one instance of each template specialization.
4766 Therefore, if we use a non-canonical variant (i.e., a
4767 typedef), any future messages referring to the type will use
4768 the typedef, which is confusing if those future uses do not
4769 themselves also use the typedef. */
4771 val = canonical_type_variant (val);
4775 tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
4777 if (invalid_nontype_parm_type_p (t, complain))
4778 return error_mark_node;
4780 if (!uses_template_parms (arg) && !uses_template_parms (t))
4781 /* We used to call digest_init here. However, digest_init
4782 will report errors, which we don't want when complain
4783 is zero. More importantly, digest_init will try too
4784 hard to convert things: for example, `0' should not be
4785 converted to pointer type at this point according to
4786 the standard. Accepting this is not merely an
4787 extension, since deciding whether or not these
4788 conversions can occur is part of determining which
4789 function template to call, or whether a given explicit
4790 argument specification is valid. */
4791 val = convert_nontype_argument (t, arg);
4795 if (val == NULL_TREE)
4796 val = error_mark_node;
4797 else if (val == error_mark_node && (complain & tf_error))
4798 error ("could not convert template argument %qE to %qT", arg, t);
4804 /* Coerces the remaining template arguments in INNER_ARGS (from
4805 ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
4806 Returns the coerced argument pack. PARM_IDX is the position of this
4807 parameter in the template parameter list. ARGS is the original
4808 template argument list. */
4810 coerce_template_parameter_pack (tree parms,
4818 tsubst_flags_t complain)
4820 tree parm = TREE_VEC_ELT (parms, parm_idx);
4821 int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
4824 tree packed_types = NULL_TREE;
4826 if (arg_idx > nargs)
4829 packed_args = make_tree_vec (nargs - arg_idx);
4831 if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
4832 && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
4834 /* When the template parameter is a non-type template
4835 parameter pack whose type uses parameter packs, we need
4836 to look at each of the template arguments
4837 separately. Build a vector of the types for these
4838 non-type template parameters in PACKED_TYPES. */
4840 = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
4841 packed_types = tsubst_pack_expansion (expansion, args,
4844 if (packed_types == error_mark_node)
4845 return error_mark_node;
4847 /* Check that we have the right number of arguments. */
4849 && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
4850 && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
4853 = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
4854 error ("wrong number of template arguments (%d, should be %d)",
4855 nargs, needed_parms);
4856 return error_mark_node;
4859 /* If we aren't able to check the actual arguments now
4860 (because they haven't been expanded yet), we can at least
4861 verify that all of the types used for the non-type
4862 template parameter pack are, in fact, valid for non-type
4863 template parameters. */
4865 && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
4867 int j, len = TREE_VEC_LENGTH (packed_types);
4868 for (j = 0; j < len; ++j)
4870 tree t = TREE_VEC_ELT (packed_types, j);
4871 if (invalid_nontype_parm_type_p (t, complain))
4872 return error_mark_node;
4877 /* Convert the remaining arguments, which will be a part of the
4878 parameter pack "parm". */
4879 for (; arg_idx < nargs; ++arg_idx)
4881 tree arg = TREE_VEC_ELT (inner_args, arg_idx);
4882 tree actual_parm = TREE_VALUE (parm);
4884 if (packed_types && !PACK_EXPANSION_P (arg))
4886 /* When we have a vector of types (corresponding to the
4887 non-type template parameter pack that uses parameter
4888 packs in its type, as mention above), and the
4889 argument is not an expansion (which expands to a
4890 currently unknown number of arguments), clone the
4891 parm and give it the next type in PACKED_TYPES. */
4892 actual_parm = copy_node (actual_parm);
4893 TREE_TYPE (actual_parm) =
4894 TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
4897 arg = convert_template_argument (actual_parm,
4898 arg, new_args, complain, parm_idx,
4900 if (arg == error_mark_node)
4902 TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg;
4905 if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
4906 || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
4907 argument_pack = make_node (TYPE_ARGUMENT_PACK);
4910 argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
4911 TREE_TYPE (argument_pack) = TREE_TYPE (TREE_VALUE (parm));
4912 TREE_CONSTANT (argument_pack) = 1;
4915 SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
4916 return argument_pack;
4919 /* Convert all template arguments to their appropriate types, and
4920 return a vector containing the innermost resulting template
4921 arguments. If any error occurs, return error_mark_node. Error and
4922 warning messages are issued under control of COMPLAIN.
4924 If REQUIRE_ALL_ARGS is false, argument deduction will be performed
4925 for arguments not specified in ARGS. Otherwise, if
4926 USE_DEFAULT_ARGS is true, default arguments will be used to fill in
4927 unspecified arguments. If REQUIRE_ALL_ARGS is true, but
4928 USE_DEFAULT_ARGS is false, then all arguments must be specified in
4932 coerce_template_parms (tree parms,
4935 tsubst_flags_t complain,
4936 bool require_all_args,
4937 bool use_default_args)
4939 int nparms, nargs, parm_idx, arg_idx, lost = 0;
4942 tree new_inner_args;
4943 bool saved_skip_evaluation;
4945 /* When used as a boolean value, indicates whether this is a
4946 variadic template parameter list. Since it's an int, we can also
4947 subtract it from nparms to get the number of non-variadic
4952 = expand_template_argument_pack (INNERMOST_TEMPLATE_ARGS (args));
4954 nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
4955 nparms = TREE_VEC_LENGTH (parms);
4957 /* Determine if there are any parameter packs. */
4958 for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
4960 tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
4961 if (template_parameter_pack_p (tparm))
4968 if ((nargs > nparms - variadic_p && !variadic_p)
4969 || (nargs < nparms - variadic_p
4971 && (!use_default_args
4972 || (TREE_VEC_ELT (parms, nargs) != error_mark_node
4973 && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
4975 if (complain & tf_error)
4977 const char *or_more = "";
4980 or_more = " or more";
4984 error ("wrong number of template arguments (%d, should be %d%s)",
4985 nargs, nparms, or_more);
4988 error ("provided for %q+D", in_decl);
4991 return error_mark_node;
4994 /* We need to evaluate the template arguments, even though this
4995 template-id may be nested within a "sizeof". */
4996 saved_skip_evaluation = skip_evaluation;
4997 skip_evaluation = false;
4998 new_inner_args = make_tree_vec (nparms);
4999 new_args = add_outermost_template_args (args, new_inner_args);
5000 for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
5005 /* Get the Ith template parameter. */
5006 parm = TREE_VEC_ELT (parms, parm_idx);
5008 if (parm == error_mark_node)
5010 TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
5014 /* Calculate the next argument. */
5015 if (template_parameter_pack_p (TREE_VALUE (parm)))
5017 /* All remaining arguments will be placed in the
5018 template parameter pack PARM. */
5019 arg = coerce_template_parameter_pack (parms, parm_idx, args,
5020 inner_args, arg_idx,
5024 /* Store this argument. */
5025 if (arg == error_mark_node)
5027 TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
5029 /* We are done with all of the arguments. */
5034 else if (arg_idx < nargs)
5036 arg = TREE_VEC_ELT (inner_args, arg_idx);
5038 if (arg && PACK_EXPANSION_P (arg))
5040 /* If ARG is a pack expansion, but PARM is not a
5041 template parameter pack (if it were, we would have
5042 handled it above), we're trying to expand into a
5043 fixed-length argument list. */
5044 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
5045 error ("cannot expand %<%E%> into a fixed-length "
5046 "argument list", arg);
5048 error ("cannot expand %<%T%> into a fixed-length "
5049 "argument list", arg);
5052 else if (require_all_args)
5053 /* There must be a default arg in this case. */
5054 arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
5059 if (arg == error_mark_node)
5061 if (complain & tf_error)
5062 error ("template argument %d is invalid", arg_idx + 1);
5065 /* This only occurs if there was an error in the template
5066 parameter list itself (which we would already have
5067 reported) that we are trying to recover from, e.g., a class
5068 template with a parameter list such as
5069 template<typename..., typename>. */
5070 return error_mark_node;
5072 arg = convert_template_argument (TREE_VALUE (parm),
5073 arg, new_args, complain,
5076 if (arg == error_mark_node)
5078 TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
5080 skip_evaluation = saved_skip_evaluation;
5083 return error_mark_node;
5085 return new_inner_args;
5088 /* Returns 1 if template args OT and NT are equivalent. */
5091 template_args_equal (tree ot, tree nt)
5096 if (TREE_CODE (nt) == TREE_VEC)
5097 /* For member templates */
5098 return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
5099 else if (PACK_EXPANSION_P (ot))
5100 return PACK_EXPANSION_P (nt)
5101 && template_args_equal (PACK_EXPANSION_PATTERN (ot),
5102 PACK_EXPANSION_PATTERN (nt));
5103 else if (TYPE_P (nt))
5104 return TYPE_P (ot) && same_type_p (ot, nt);
5105 else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
5108 return cp_tree_equal (ot, nt);
5111 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
5112 of template arguments. Returns 0 otherwise. */
5115 comp_template_args (tree oldargs, tree newargs)
5119 oldargs = expand_template_argument_pack (oldargs);
5120 newargs = expand_template_argument_pack (newargs);
5122 if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
5125 for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
5127 tree nt = TREE_VEC_ELT (newargs, i);
5128 tree ot = TREE_VEC_ELT (oldargs, i);
5130 if (! template_args_equal (ot, nt))
5137 add_pending_template (tree d)
5139 tree ti = (TYPE_P (d)
5140 ? CLASSTYPE_TEMPLATE_INFO (d)
5141 : DECL_TEMPLATE_INFO (d));
5145 if (TI_PENDING_TEMPLATE_FLAG (ti))
5148 /* We are called both from instantiate_decl, where we've already had a
5149 tinst_level pushed, and instantiate_template, where we haven't.
5151 level = !(current_tinst_level && TINST_DECL (current_tinst_level) == d);
5154 push_tinst_level (d);
5156 pt = tree_cons (current_tinst_level, d, NULL_TREE);
5157 if (last_pending_template)
5158 TREE_CHAIN (last_pending_template) = pt;
5160 pending_templates = pt;
5162 last_pending_template = pt;
5164 TI_PENDING_TEMPLATE_FLAG (ti) = 1;
5171 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
5172 ARGLIST. Valid choices for FNS are given in the cp-tree.def
5173 documentation for TEMPLATE_ID_EXPR. */
5176 lookup_template_function (tree fns, tree arglist)
5180 if (fns == error_mark_node || arglist == error_mark_node)
5181 return error_mark_node;
5183 gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
5184 gcc_assert (fns && (is_overloaded_fn (fns)
5185 || TREE_CODE (fns) == IDENTIFIER_NODE));
5187 if (BASELINK_P (fns))
5189 BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
5191 BASELINK_FUNCTIONS (fns),
5196 type = TREE_TYPE (fns);
5197 if (TREE_CODE (fns) == OVERLOAD || !type)
5198 type = unknown_type_node;
5200 return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
5203 /* Within the scope of a template class S<T>, the name S gets bound
5204 (in build_self_reference) to a TYPE_DECL for the class, not a
5205 TEMPLATE_DECL. If DECL is a TYPE_DECL for current_class_type,
5206 or one of its enclosing classes, and that type is a template,
5207 return the associated TEMPLATE_DECL. Otherwise, the original
5208 DECL is returned. */
5211 maybe_get_template_decl_from_type_decl (tree decl)
5213 return (decl != NULL_TREE
5214 && TREE_CODE (decl) == TYPE_DECL
5215 && DECL_ARTIFICIAL (decl)
5216 && CLASS_TYPE_P (TREE_TYPE (decl))
5217 && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
5218 ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
5221 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
5222 parameters, find the desired type.
5224 D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
5226 IN_DECL, if non-NULL, is the template declaration we are trying to
5229 If ENTERING_SCOPE is nonzero, we are about to enter the scope of
5230 the class we are looking up.
5232 Issue error and warning messages under control of COMPLAIN.
5234 If the template class is really a local class in a template
5235 function, then the FUNCTION_CONTEXT is the function in which it is
5238 ??? Note that this function is currently called *twice* for each
5239 template-id: the first time from the parser, while creating the
5240 incomplete type (finish_template_type), and the second type during the
5241 real instantiation (instantiate_template_class). This is surely something
5242 that we want to avoid. It also causes some problems with argument
5243 coercion (see convert_nontype_argument for more information on this). */
5246 lookup_template_class (tree d1,
5251 tsubst_flags_t complain)
5253 tree template = NULL_TREE, parmlist;
5256 timevar_push (TV_NAME_LOOKUP);
5258 if (TREE_CODE (d1) == IDENTIFIER_NODE)
5260 tree value = innermost_non_namespace_value (d1);
5261 if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
5266 push_decl_namespace (context);
5267 template = lookup_name (d1);
5268 template = maybe_get_template_decl_from_type_decl (template);
5270 pop_decl_namespace ();
5273 context = DECL_CONTEXT (template);
5275 else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
5277 tree type = TREE_TYPE (d1);
5279 /* If we are declaring a constructor, say A<T>::A<T>, we will get
5280 an implicit typename for the second A. Deal with it. */
5281 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5282 type = TREE_TYPE (type);
5284 if (CLASSTYPE_TEMPLATE_INFO (type))
5286 template = CLASSTYPE_TI_TEMPLATE (type);
5287 d1 = DECL_NAME (template);
5290 else if (TREE_CODE (d1) == ENUMERAL_TYPE
5291 || (TYPE_P (d1) && IS_AGGR_TYPE (d1)))
5293 template = TYPE_TI_TEMPLATE (d1);
5294 d1 = DECL_NAME (template);
5296 else if (TREE_CODE (d1) == TEMPLATE_DECL
5297 && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
5300 d1 = DECL_NAME (template);
5301 context = DECL_CONTEXT (template);
5304 /* Issue an error message if we didn't find a template. */
5307 if (complain & tf_error)
5308 error ("%qT is not a template", d1);
5309 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5312 if (TREE_CODE (template) != TEMPLATE_DECL
5313 /* Make sure it's a user visible template, if it was named by
5315 || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (template)
5316 && !PRIMARY_TEMPLATE_P (template)))
5318 if (complain & tf_error)
5320 error ("non-template type %qT used as a template", d1);
5322 error ("for template declaration %q+D", in_decl);
5324 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5327 complain &= ~tf_user;
5329 if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
5331 /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
5332 template arguments */
5337 parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
5339 /* Consider an example where a template template parameter declared as
5341 template <class T, class U = std::allocator<T> > class TT
5343 The template parameter level of T and U are one level larger than
5344 of TT. To proper process the default argument of U, say when an
5345 instantiation `TT<int>' is seen, we need to build the full
5346 arguments containing {int} as the innermost level. Outer levels,
5347 available when not appearing as default template argument, can be
5348 obtained from `current_template_args ()'.
5350 Suppose that TT is later substituted with std::vector. The above
5351 instantiation is `TT<int, std::allocator<T> >' with TT at
5352 level 1, and T at level 2, while the template arguments at level 1
5353 becomes {std::vector} and the inner level 2 is {int}. */
5355 if (current_template_parms)
5356 arglist = add_to_template_args (current_template_args (), arglist);
5358 arglist2 = coerce_template_parms (parmlist, arglist, template,
5360 /*require_all_args=*/true,
5361 /*use_default_args=*/true);
5362 if (arglist2 == error_mark_node
5363 || (!uses_template_parms (arglist2)
5364 && check_instantiated_args (template, arglist2, complain)))
5365 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5367 parm = bind_template_template_parm (TREE_TYPE (template), arglist2);
5368 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
5372 tree template_type = TREE_TYPE (template);
5375 tree found = NULL_TREE;
5378 int is_partial_instantiation;
5380 gen_tmpl = most_general_template (template);
5381 parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
5382 parm_depth = TMPL_PARMS_DEPTH (parmlist);
5383 arg_depth = TMPL_ARGS_DEPTH (arglist);
5385 if (arg_depth == 1 && parm_depth > 1)
5387 /* We've been given an incomplete set of template arguments.
5390 template <class T> struct S1 {
5391 template <class U> struct S2 {};
5392 template <class U> struct S2<U*> {};
5395 we will be called with an ARGLIST of `U*', but the
5396 TEMPLATE will be `template <class T> template
5397 <class U> struct S1<T>::S2'. We must fill in the missing
5400 = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
5402 arg_depth = TMPL_ARGS_DEPTH (arglist);
5405 /* Now we should have enough arguments. */
5406 gcc_assert (parm_depth == arg_depth);
5408 /* From here on, we're only interested in the most general
5410 template = gen_tmpl;
5412 /* Calculate the BOUND_ARGS. These will be the args that are
5413 actually tsubst'd into the definition to create the
5417 /* We have multiple levels of arguments to coerce, at once. */
5419 int saved_depth = TMPL_ARGS_DEPTH (arglist);
5421 tree bound_args = make_tree_vec (parm_depth);
5423 for (i = saved_depth,
5424 t = DECL_TEMPLATE_PARMS (template);
5425 i > 0 && t != NULL_TREE;
5426 --i, t = TREE_CHAIN (t))
5428 tree a = coerce_template_parms (TREE_VALUE (t),
5431 /*require_all_args=*/true,
5432 /*use_default_args=*/true);
5434 /* Don't process further if one of the levels fails. */
5435 if (a == error_mark_node)
5437 /* Restore the ARGLIST to its full size. */
5438 TREE_VEC_LENGTH (arglist) = saved_depth;
5439 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5442 SET_TMPL_ARGS_LEVEL (bound_args, i, a);
5444 /* We temporarily reduce the length of the ARGLIST so
5445 that coerce_template_parms will see only the arguments
5446 corresponding to the template parameters it is
5448 TREE_VEC_LENGTH (arglist)--;
5451 /* Restore the ARGLIST to its full size. */
5452 TREE_VEC_LENGTH (arglist) = saved_depth;
5454 arglist = bound_args;
5458 = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
5459 INNERMOST_TEMPLATE_ARGS (arglist),
5462 /*require_all_args=*/true,
5463 /*use_default_args=*/true);
5465 if (arglist == error_mark_node)
5466 /* We were unable to bind the arguments. */
5467 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5469 /* In the scope of a template class, explicit references to the
5470 template class refer to the type of the template, not any
5471 instantiation of it. For example, in:
5473 template <class T> class C { void f(C<T>); }
5475 the `C<T>' is just the same as `C'. Outside of the
5476 class, however, such a reference is an instantiation. */
5477 if (comp_template_args (TYPE_TI_ARGS (template_type),
5480 found = template_type;
5482 if (!entering_scope && PRIMARY_TEMPLATE_P (template))
5486 for (ctx = current_class_type;
5487 ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
5489 ? TYPE_CONTEXT (ctx)
5490 : DECL_CONTEXT (ctx)))
5491 if (TYPE_P (ctx) && same_type_p (ctx, template_type))
5494 /* We're not in the scope of the class, so the
5495 TEMPLATE_TYPE is not the type we want after all. */
5501 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5503 /* If we already have this specialization, return it. */
5504 found = retrieve_specialization (template, arglist,
5505 /*class_specializations_p=*/false);
5507 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5509 /* This type is a "partial instantiation" if any of the template
5510 arguments still involve template parameters. Note that we set
5511 IS_PARTIAL_INSTANTIATION for partial specializations as
5513 is_partial_instantiation = uses_template_parms (arglist);
5515 /* If the deduced arguments are invalid, then the binding
5517 if (!is_partial_instantiation
5518 && check_instantiated_args (template,
5519 INNERMOST_TEMPLATE_ARGS (arglist),
5521 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5523 if (!is_partial_instantiation
5524 && !PRIMARY_TEMPLATE_P (template)
5525 && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
5527 found = xref_tag_from_type (TREE_TYPE (template),
5528 DECL_NAME (template),
5529 /*tag_scope=*/ts_global);
5530 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5533 context = tsubst (DECL_CONTEXT (template), arglist,
5536 context = global_namespace;
5538 /* Create the type. */
5539 if (TREE_CODE (template_type) == ENUMERAL_TYPE)
5541 if (!is_partial_instantiation)
5543 set_current_access_from_decl (TYPE_NAME (template_type));
5544 t = start_enum (TYPE_IDENTIFIER (template_type));
5547 /* We don't want to call start_enum for this type, since
5548 the values for the enumeration constants may involve
5549 template parameters. And, no one should be interested
5550 in the enumeration constants for such a type. */
5551 t = make_node (ENUMERAL_TYPE);
5555 t = make_aggr_type (TREE_CODE (template_type));
5556 CLASSTYPE_DECLARED_CLASS (t)
5557 = CLASSTYPE_DECLARED_CLASS (template_type);
5558 SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
5559 TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
5561 /* A local class. Make sure the decl gets registered properly. */
5562 if (context == current_function_decl)
5563 pushtag (DECL_NAME (template), t, /*tag_scope=*/ts_current);
5565 if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
5566 /* This instantiation is another name for the primary
5567 template type. Set the TYPE_CANONICAL field
5569 TYPE_CANONICAL (t) = template_type;
5570 else if (any_template_arguments_need_structural_equality_p (arglist))
5571 /* Some of the template arguments require structural
5572 equality testing, so this template class requires
5573 structural equality testing. */
5574 SET_TYPE_STRUCTURAL_EQUALITY (t);
5577 /* If we called start_enum or pushtag above, this information
5578 will already be set up. */
5581 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5583 type_decl = create_implicit_typedef (DECL_NAME (template), t);
5584 DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
5585 TYPE_STUB_DECL (t) = type_decl;
5586 DECL_SOURCE_LOCATION (type_decl)
5587 = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
5590 type_decl = TYPE_NAME (t);
5592 TREE_PRIVATE (type_decl)
5593 = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
5594 TREE_PROTECTED (type_decl)
5595 = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
5596 DECL_IN_SYSTEM_HEADER (type_decl)
5597 = DECL_IN_SYSTEM_HEADER (template);
5598 if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
5600 DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
5601 DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
5604 /* Set up the template information. We have to figure out which
5605 template is the immediate parent if this is a full
5607 if (parm_depth == 1 || is_partial_instantiation
5608 || !PRIMARY_TEMPLATE_P (template))
5609 /* This case is easy; there are no member templates involved. */
5613 /* This is a full instantiation of a member template. Look
5614 for a partial instantiation of which this is an instance. */
5616 for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
5617 found; found = TREE_CHAIN (found))
5620 tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
5622 /* We only want partial instantiations, here, not
5623 specializations or full instantiations. */
5624 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
5625 || !uses_template_parms (TREE_VALUE (found)))
5628 /* Temporarily reduce by one the number of levels in the
5629 ARGLIST and in FOUND so as to avoid comparing the
5630 last set of arguments. */
5631 TREE_VEC_LENGTH (arglist)--;
5632 TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
5634 /* See if the arguments match. If they do, then TMPL is
5635 the partial instantiation we want. */
5636 success = comp_template_args (TREE_PURPOSE (found), arglist);
5638 /* Restore the argument vectors to their full size. */
5639 TREE_VEC_LENGTH (arglist)++;
5640 TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
5651 /* There was no partial instantiation. This happens
5652 where C<T> is a member template of A<T> and it's used
5655 template <typename T> struct B { A<T>::C<int> m; };
5658 Create the partial instantiation.
5660 TREE_VEC_LENGTH (arglist)--;
5661 found = tsubst (template, arglist, complain, NULL_TREE);
5662 TREE_VEC_LENGTH (arglist)++;
5666 SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
5667 DECL_TEMPLATE_INSTANTIATIONS (template)
5668 = tree_cons (arglist, t,
5669 DECL_TEMPLATE_INSTANTIATIONS (template));
5671 if (TREE_CODE (t) == ENUMERAL_TYPE
5672 && !is_partial_instantiation)
5673 /* Now that the type has been registered on the instantiations
5674 list, we set up the enumerators. Because the enumeration
5675 constants may involve the enumeration type itself, we make
5676 sure to register the type first, and then create the
5677 constants. That way, doing tsubst_expr for the enumeration
5678 constants won't result in recursive calls here; we'll find
5679 the instantiation and exit above. */
5680 tsubst_enum (template_type, t, arglist);
5682 if (is_partial_instantiation)
5683 /* If the type makes use of template parameters, the
5684 code that generates debugging information will crash. */
5685 DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
5687 /* Possibly limit visibility based on template args. */
5688 TREE_PUBLIC (type_decl) = 1;
5689 determine_visibility (type_decl);
5691 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
5693 timevar_pop (TV_NAME_LOOKUP);
5700 struct pointer_set_t *visited;
5703 /* Called from for_each_template_parm via walk_tree. */
5706 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
5709 struct pair_fn_data *pfd = (struct pair_fn_data *) d;
5710 tree_fn_t fn = pfd->fn;
5711 void *data = pfd->data;
5714 && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited))
5715 return error_mark_node;
5717 switch (TREE_CODE (t))
5720 if (TYPE_PTRMEMFUNC_P (t))
5726 if (!TYPE_TEMPLATE_INFO (t))
5728 else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
5729 fn, data, pfd->visited))
5730 return error_mark_node;
5734 if (for_each_template_parm (TYPE_MIN_VALUE (t),
5735 fn, data, pfd->visited)
5736 || for_each_template_parm (TYPE_MAX_VALUE (t),
5737 fn, data, pfd->visited))
5738 return error_mark_node;
5742 /* Since we're not going to walk subtrees, we have to do this
5744 if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
5746 return error_mark_node;
5750 /* Check the return type. */
5751 if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
5752 return error_mark_node;
5754 /* Check the parameter types. Since default arguments are not
5755 instantiated until they are needed, the TYPE_ARG_TYPES may
5756 contain expressions that involve template parameters. But,
5757 no-one should be looking at them yet. And, once they're
5758 instantiated, they don't contain template parameters, so
5759 there's no point in looking at them then, either. */
5763 for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
5764 if (for_each_template_parm (TREE_VALUE (parm), fn, data,
5766 return error_mark_node;
5768 /* Since we've already handled the TYPE_ARG_TYPES, we don't
5769 want walk_tree walking into them itself. */
5775 if (for_each_template_parm (TYPE_FIELDS (t), fn, data,
5777 return error_mark_node;
5782 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
5783 && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
5785 return error_mark_node;
5790 if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
5791 && for_each_template_parm (DECL_INITIAL (t), fn, data,
5793 return error_mark_node;
5794 if (DECL_CONTEXT (t)
5795 && for_each_template_parm (DECL_CONTEXT (t), fn, data,
5797 return error_mark_node;
5800 case BOUND_TEMPLATE_TEMPLATE_PARM:
5801 /* Record template parameters such as `T' inside `TT<T>'. */
5802 if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited))
5803 return error_mark_node;
5806 case TEMPLATE_TEMPLATE_PARM:
5807 case TEMPLATE_TYPE_PARM:
5808 case TEMPLATE_PARM_INDEX:
5809 if (fn && (*fn)(t, data))
5810 return error_mark_node;
5812 return error_mark_node;
5816 /* A template template parameter is encountered. */
5817 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
5818 && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
5819 return error_mark_node;
5821 /* Already substituted template template parameter */
5827 || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
5828 data, pfd->visited))
5829 return error_mark_node;
5833 if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
5834 && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
5835 (TREE_TYPE (t)), fn, data,
5837 return error_mark_node;
5842 /* If there's no type, then this thing must be some expression
5843 involving template parameters. */
5844 if (!fn && !TREE_TYPE (t))
5845 return error_mark_node;
5850 case REINTERPRET_CAST_EXPR:
5851 case CONST_CAST_EXPR:
5852 case STATIC_CAST_EXPR:
5853 case DYNAMIC_CAST_EXPR:
5857 case PSEUDO_DTOR_EXPR:
5859 return error_mark_node;
5866 /* We didn't find any template parameters we liked. */
5870 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
5871 BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
5872 call FN with the parameter and the DATA.
5873 If FN returns nonzero, the iteration is terminated, and
5874 for_each_template_parm returns 1. Otherwise, the iteration
5875 continues. If FN never returns a nonzero value, the value
5876 returned by for_each_template_parm is 0. If FN is NULL, it is
5877 considered to be the function which always returns 1. */
5880 for_each_template_parm (tree t, tree_fn_t fn, void* data,
5881 struct pointer_set_t *visited)
5883 struct pair_fn_data pfd;
5890 /* Walk the tree. (Conceptually, we would like to walk without
5891 duplicates, but for_each_template_parm_r recursively calls
5892 for_each_template_parm, so we would need to reorganize a fair
5893 bit to use walk_tree_without_duplicates, so we keep our own
5896 pfd.visited = visited;
5898 pfd.visited = pointer_set_create ();
5899 result = walk_tree (&t,
5900 for_each_template_parm_r,
5902 pfd.visited) != NULL_TREE;
5907 pointer_set_destroy (pfd.visited);
5914 /* Returns true if T depends on any template parameter. */
5917 uses_template_parms (tree t)
5920 int saved_processing_template_decl;
5922 saved_processing_template_decl = processing_template_decl;
5923 if (!saved_processing_template_decl)
5924 processing_template_decl = 1;
5926 dependent_p = dependent_type_p (t);
5927 else if (TREE_CODE (t) == TREE_VEC)
5928 dependent_p = any_dependent_template_arguments_p (t);
5929 else if (TREE_CODE (t) == TREE_LIST)
5930 dependent_p = (uses_template_parms (TREE_VALUE (t))
5931 || uses_template_parms (TREE_CHAIN (t)));
5932 else if (TREE_CODE (t) == TYPE_DECL)
5933 dependent_p = dependent_type_p (TREE_TYPE (t));
5936 || TREE_CODE (t) == TEMPLATE_PARM_INDEX
5937 || TREE_CODE (t) == OVERLOAD
5938 || TREE_CODE (t) == BASELINK
5939 || TREE_CODE (t) == IDENTIFIER_NODE
5940 || TREE_CODE (t) == TRAIT_EXPR
5941 || CONSTANT_CLASS_P (t))
5942 dependent_p = (type_dependent_expression_p (t)
5943 || value_dependent_expression_p (t));
5946 gcc_assert (t == error_mark_node);
5947 dependent_p = false;
5950 processing_template_decl = saved_processing_template_decl;
5955 /* Returns true if T depends on any template parameter with level LEVEL. */
5958 uses_template_parms_level (tree t, int level)
5960 return for_each_template_parm (t, template_parm_this_level_p, &level, NULL);
5963 static int tinst_depth;
5964 extern int max_tinst_depth;
5965 #ifdef GATHER_STATISTICS
5968 static int tinst_level_tick;
5969 static int last_template_error_tick;
5971 /* We're starting to instantiate D; record the template instantiation context
5972 for diagnostics and to restore it later. */
5975 push_tinst_level (tree d)
5979 if (tinst_depth >= max_tinst_depth)
5981 /* If the instantiation in question still has unbound template parms,
5982 we don't really care if we can't instantiate it, so just return.
5983 This happens with base instantiation for implicit `typename'. */
5984 if (uses_template_parms (d))
5987 last_template_error_tick = tinst_level_tick;
5988 error ("template instantiation depth exceeds maximum of %d (use "
5989 "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
5990 max_tinst_depth, d);
5992 print_instantiation_context ();
5997 new = make_node (TINST_LEVEL);
5998 TINST_DECL (new) = d;
5999 TINST_LOCATION (new) = input_location;
6000 TINST_IN_SYSTEM_HEADER_P (new) = in_system_header;
6001 TREE_CHAIN (new) = current_tinst_level;
6002 current_tinst_level = new;
6005 #ifdef GATHER_STATISTICS
6006 if (tinst_depth > depth_reached)
6007 depth_reached = tinst_depth;
6014 /* We're done instantiating this template; return to the instantiation
6018 pop_tinst_level (void)
6020 tree old = current_tinst_level;
6022 /* Restore the filename and line number stashed away when we started
6023 this instantiation. */
6024 input_location = TINST_LOCATION (old);
6025 in_system_header = TINST_IN_SYSTEM_HEADER_P (old);
6026 current_tinst_level = TREE_CHAIN (old);
6031 /* We're instantiating a deferred template; restore the template
6032 instantiation context in which the instantiation was requested, which
6033 is one step out from LEVEL. */
6036 reopen_tinst_level (tree level)
6041 for (t = level; t; t = TREE_CHAIN (t))
6044 current_tinst_level = level;
6048 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
6049 vector of template arguments, as for tsubst.
6051 Returns an appropriate tsubst'd friend declaration. */
6054 tsubst_friend_function (tree decl, tree args)
6058 if (TREE_CODE (decl) == FUNCTION_DECL
6059 && DECL_TEMPLATE_INSTANTIATION (decl)
6060 && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
6061 /* This was a friend declared with an explicit template
6062 argument list, e.g.:
6066 to indicate that f was a template instantiation, not a new
6067 function declaration. Now, we have to figure out what
6068 instantiation of what template. */
6070 tree template_id, arglist, fns;
6073 tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
6075 /* Friend functions are looked up in the containing namespace scope.
6076 We must enter that scope, to avoid finding member functions of the
6077 current cless with same name. */
6078 push_nested_namespace (ns);
6079 fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
6080 tf_warning_or_error, NULL_TREE,
6081 /*integral_constant_expression_p=*/false);
6082 pop_nested_namespace (ns);
6083 arglist = tsubst (DECL_TI_ARGS (decl), args,
6084 tf_warning_or_error, NULL_TREE);
6085 template_id = lookup_template_function (fns, arglist);
6087 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6088 tmpl = determine_specialization (template_id, new_friend,
6090 /*need_member_template=*/0,
6091 TREE_VEC_LENGTH (args),
6093 return instantiate_template (tmpl, new_args, tf_error);
6096 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6098 /* The NEW_FRIEND will look like an instantiation, to the
6099 compiler, but is not an instantiation from the point of view of
6100 the language. For example, we might have had:
6102 template <class T> struct S {
6103 template <class U> friend void f(T, U);
6106 Then, in S<int>, template <class U> void f(int, U) is not an
6107 instantiation of anything. */
6108 if (new_friend == error_mark_node)
6109 return error_mark_node;
6111 DECL_USE_TEMPLATE (new_friend) = 0;
6112 if (TREE_CODE (decl) == TEMPLATE_DECL)
6114 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
6115 DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
6116 = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
6119 /* The mangled name for the NEW_FRIEND is incorrect. The function
6120 is not a template instantiation and should not be mangled like
6121 one. Therefore, we forget the mangling here; we'll recompute it
6122 later if we need it. */
6123 if (TREE_CODE (new_friend) != TEMPLATE_DECL)
6125 SET_DECL_RTL (new_friend, NULL_RTX);
6126 SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
6129 if (DECL_NAMESPACE_SCOPE_P (new_friend))
6132 tree new_friend_template_info;
6133 tree new_friend_result_template_info;
6135 int new_friend_is_defn;
6137 /* We must save some information from NEW_FRIEND before calling
6138 duplicate decls since that function will free NEW_FRIEND if
6140 new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
6141 new_friend_is_defn =
6142 (DECL_INITIAL (DECL_TEMPLATE_RESULT
6143 (template_for_substitution (new_friend)))
6145 if (TREE_CODE (new_friend) == TEMPLATE_DECL)
6147 /* This declaration is a `primary' template. */
6148 DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
6150 new_friend_result_template_info
6151 = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
6154 new_friend_result_template_info = NULL_TREE;
6156 /* Make the init_value nonzero so pushdecl knows this is a defn. */
6157 if (new_friend_is_defn)
6158 DECL_INITIAL (new_friend) = error_mark_node;
6160 /* Inside pushdecl_namespace_level, we will push into the
6161 current namespace. However, the friend function should go
6162 into the namespace of the template. */
6163 ns = decl_namespace_context (new_friend);
6164 push_nested_namespace (ns);
6165 old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
6166 pop_nested_namespace (ns);
6168 if (old_decl == error_mark_node)
6169 return error_mark_node;
6171 if (old_decl != new_friend)
6173 /* This new friend declaration matched an existing
6174 declaration. For example, given:
6176 template <class T> void f(T);
6177 template <class U> class C {
6178 template <class T> friend void f(T) {}
6181 the friend declaration actually provides the definition
6182 of `f', once C has been instantiated for some type. So,
6183 old_decl will be the out-of-class template declaration,
6184 while new_friend is the in-class definition.
6186 But, if `f' was called before this point, the
6187 instantiation of `f' will have DECL_TI_ARGS corresponding
6188 to `T' but not to `U', references to which might appear
6189 in the definition of `f'. Previously, the most general
6190 template for an instantiation of `f' was the out-of-class
6191 version; now it is the in-class version. Therefore, we
6192 run through all specialization of `f', adding to their
6193 DECL_TI_ARGS appropriately. In particular, they need a
6194 new set of outer arguments, corresponding to the
6195 arguments for this class instantiation.
6197 The same situation can arise with something like this:
6200 template <class T> class C {
6204 when `C<int>' is instantiated. Now, `f(int)' is defined
6207 if (!new_friend_is_defn)
6208 /* On the other hand, if the in-class declaration does
6209 *not* provide a definition, then we don't want to alter
6210 existing definitions. We can just leave everything
6215 /* Overwrite whatever template info was there before, if
6216 any, with the new template information pertaining to
6218 DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
6220 if (TREE_CODE (old_decl) != TEMPLATE_DECL)
6221 reregister_specialization (new_friend,
6222 most_general_template (old_decl),
6227 tree new_friend_args;
6229 DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
6230 = new_friend_result_template_info;
6232 new_friend_args = TI_ARGS (new_friend_template_info);
6233 for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
6237 tree spec = TREE_VALUE (t);
6240 = add_outermost_template_args (new_friend_args,
6241 DECL_TI_ARGS (spec));
6244 /* Now, since specializations are always supposed to
6245 hang off of the most general template, we must move
6247 t = most_general_template (old_decl);
6250 DECL_TEMPLATE_SPECIALIZATIONS (t)
6251 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
6252 DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
6253 DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
6258 /* The information from NEW_FRIEND has been merged into OLD_DECL
6259 by duplicate_decls. */
6260 new_friend = old_decl;
6265 tree context = DECL_CONTEXT (new_friend);
6269 template <class T> class C {
6270 template <class U> friend void C1<U>::f (); // case 1
6271 friend void C2<T>::f (); // case 2
6273 we only need to make sure CONTEXT is a complete type for
6274 case 2. To distinguish between the two cases, we note that
6275 CONTEXT of case 1 remains dependent type after tsubst while
6276 this isn't true for case 2. */
6277 ++processing_template_decl;
6278 dependent_p = dependent_type_p (context);
6279 --processing_template_decl;
6282 && !complete_type_or_else (context, NULL_TREE))
6283 return error_mark_node;
6285 if (COMPLETE_TYPE_P (context))
6287 /* Check to see that the declaration is really present, and,
6288 possibly obtain an improved declaration. */
6289 tree fn = check_classfn (context,
6290 new_friend, NULL_TREE);
6292 if (fn && fn != error_mark_node)
6300 /* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
6301 template arguments, as for tsubst.
6303 Returns an appropriate tsubst'd friend type or error_mark_node on
6307 tsubst_friend_class (tree friend_tmpl, tree args)
6313 context = DECL_CONTEXT (friend_tmpl);
6317 if (TREE_CODE (context) == NAMESPACE_DECL)
6318 push_nested_namespace (context);
6320 push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
6323 /* Look for a class template declaration. We look for hidden names
6324 because two friend declarations of the same template are the
6325 same. For example, in:
6328 template <typename> friend class F;
6330 template <typename> struct B {
6331 template <typename> friend class F;
6334 both F templates are the same. */
6335 tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
6336 /*block_p=*/true, 0,
6337 LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
6339 /* But, if we don't find one, it might be because we're in a
6340 situation like this:
6348 Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
6349 for `S<int>', not the TEMPLATE_DECL. */
6350 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
6352 tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
6353 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
6356 if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
6358 /* The friend template has already been declared. Just
6359 check to see that the declarations match, and install any new
6360 default parameters. We must tsubst the default parameters,
6361 of course. We only need the innermost template parameters
6362 because that is all that redeclare_class_template will look
6364 if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
6365 > TMPL_ARGS_DEPTH (args))
6368 parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
6369 args, tf_warning_or_error);
6370 redeclare_class_template (TREE_TYPE (tmpl), parms);
6373 friend_type = TREE_TYPE (tmpl);
6377 /* The friend template has not already been declared. In this
6378 case, the instantiation of the template class will cause the
6379 injection of this template into the global scope. */
6380 tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
6381 if (tmpl == error_mark_node)
6382 return error_mark_node;
6384 /* The new TMPL is not an instantiation of anything, so we
6385 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE for
6386 the new type because that is supposed to be the corresponding
6387 template decl, i.e., TMPL. */
6388 DECL_USE_TEMPLATE (tmpl) = 0;
6389 DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
6390 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
6391 CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
6392 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
6394 /* Inject this template into the global scope. */
6395 friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
6400 if (TREE_CODE (context) == NAMESPACE_DECL)
6401 pop_nested_namespace (context);
6403 pop_nested_class ();
6409 /* Returns zero if TYPE cannot be completed later due to circularity.
6410 Otherwise returns one. */
6413 can_complete_type_without_circularity (tree type)
6415 if (type == NULL_TREE || type == error_mark_node)
6417 else if (COMPLETE_TYPE_P (type))
6419 else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
6420 return can_complete_type_without_circularity (TREE_TYPE (type));
6421 else if (CLASS_TYPE_P (type)
6422 && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
6429 instantiate_class_template (tree type)
6431 tree template, args, pattern, t, member;
6436 if (type == error_mark_node)
6437 return error_mark_node;
6439 if (TYPE_BEING_DEFINED (type)
6440 || COMPLETE_TYPE_P (type)
6441 || dependent_type_p (type))
6444 /* Figure out which template is being instantiated. */
6445 template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
6446 gcc_assert (TREE_CODE (template) == TEMPLATE_DECL);
6448 /* Determine what specialization of the original template to
6450 t = most_specialized_class (type, template);
6451 if (t == error_mark_node)
6453 TYPE_BEING_DEFINED (type) = 1;
6454 return error_mark_node;
6458 /* This TYPE is actually an instantiation of a partial
6459 specialization. We replace the innermost set of ARGS with
6460 the arguments appropriate for substitution. For example,
6463 template <class T> struct S {};
6464 template <class T> struct S<T*> {};
6466 and supposing that we are instantiating S<int*>, ARGS will
6467 presently be {int*} -- but we need {int}. */
6468 pattern = TREE_TYPE (t);
6469 args = TREE_PURPOSE (t);
6473 pattern = TREE_TYPE (template);
6474 args = CLASSTYPE_TI_ARGS (type);
6477 /* If the template we're instantiating is incomplete, then clearly
6478 there's nothing we can do. */
6479 if (!COMPLETE_TYPE_P (pattern))
6482 /* If we've recursively instantiated too many templates, stop. */
6483 if (! push_tinst_level (type))
6486 /* Now we're really doing the instantiation. Mark the type as in
6487 the process of being defined. */
6488 TYPE_BEING_DEFINED (type) = 1;
6490 /* We may be in the middle of deferred access check. Disable
6492 push_deferring_access_checks (dk_no_deferred);
6494 push_to_top_level ();
6496 SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
6498 /* Set the input location to the template definition. This is needed
6499 if tsubsting causes an error. */
6500 typedecl = TYPE_MAIN_DECL (type);
6501 input_location = DECL_SOURCE_LOCATION (typedecl);
6502 in_system_header = DECL_IN_SYSTEM_HEADER (typedecl);
6504 TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
6505 TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
6506 TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
6507 TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
6508 TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
6509 TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
6510 TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
6511 TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
6512 TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
6513 TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
6514 TYPE_PACKED (type) = TYPE_PACKED (pattern);
6515 TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
6516 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
6517 TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
6518 if (ANON_AGGR_TYPE_P (pattern))
6519 SET_ANON_AGGR_TYPE_P (type);
6520 if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
6522 CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
6523 CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
6526 pbinfo = TYPE_BINFO (pattern);
6528 /* We should never instantiate a nested class before its enclosing
6529 class; we need to look up the nested class by name before we can
6530 instantiate it, and that lookup should instantiate the enclosing
6532 gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
6533 || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
6534 || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
6536 base_list = NULL_TREE;
6537 if (BINFO_N_BASE_BINFOS (pbinfo))
6540 tree context = TYPE_CONTEXT (type);
6544 /* We must enter the scope containing the type, as that is where
6545 the accessibility of types named in dependent bases are
6547 pushed_scope = push_scope (context ? context : global_namespace);
6549 /* Substitute into each of the bases to determine the actual
6551 for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
6554 tree access = BINFO_BASE_ACCESS (pbinfo, i);
6555 tree expanded_bases = NULL_TREE;
6558 if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
6561 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
6562 args, tf_error, NULL_TREE);
6563 if (expanded_bases == error_mark_node)
6566 len = TREE_VEC_LENGTH (expanded_bases);
6569 for (idx = 0; idx < len; idx++)
6572 /* Extract the already-expanded base class. */
6573 base = TREE_VEC_ELT (expanded_bases, idx);
6575 /* Substitute to figure out the base class. */
6576 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error,
6579 if (base == error_mark_node)
6582 base_list = tree_cons (access, base, base_list);
6583 if (BINFO_VIRTUAL_P (pbase_binfo))
6584 TREE_TYPE (base_list) = integer_type_node;
6588 /* The list is now in reverse order; correct that. */
6589 base_list = nreverse (base_list);
6592 pop_scope (pushed_scope);
6594 /* Now call xref_basetypes to set up all the base-class
6596 xref_basetypes (type, base_list);
6599 /* Now that our base classes are set up, enter the scope of the
6600 class, so that name lookups into base classes, etc. will work
6601 correctly. This is precisely analogous to what we do in
6602 begin_class_definition when defining an ordinary non-template
6606 /* Now members are processed in the order of declaration. */
6607 for (member = CLASSTYPE_DECL_LIST (pattern);
6608 member; member = TREE_CHAIN (member))
6610 tree t = TREE_VALUE (member);
6612 if (TREE_PURPOSE (member))
6616 /* Build new CLASSTYPE_NESTED_UTDS. */
6619 bool class_template_p;
6621 class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
6622 && TYPE_LANG_SPECIFIC (t)
6623 && CLASSTYPE_IS_TEMPLATE (t));
6624 /* If the member is a class template, then -- even after
6625 substitution -- there may be dependent types in the
6626 template argument list for the class. We increment
6627 PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
6628 that function will assume that no types are dependent
6629 when outside of a template. */
6630 if (class_template_p)
6631 ++processing_template_decl;
6632 newtag = tsubst (t, args, tf_error, NULL_TREE);
6633 if (class_template_p)
6634 --processing_template_decl;
6635 if (newtag == error_mark_node)
6638 if (TREE_CODE (newtag) != ENUMERAL_TYPE)
6640 tree name = TYPE_IDENTIFIER (t);
6642 if (class_template_p)
6643 /* Unfortunately, lookup_template_class sets
6644 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
6645 instantiation (i.e., for the type of a member
6646 template class nested within a template class.)
6647 This behavior is required for
6648 maybe_process_partial_specialization to work
6649 correctly, but is not accurate in this case;
6650 the TAG is not an instantiation of anything.
6651 (The corresponding TEMPLATE_DECL is an
6652 instantiation, but the TYPE is not.) */
6653 CLASSTYPE_USE_TEMPLATE (newtag) = 0;
6655 /* Now, we call pushtag to put this NEWTAG into the scope of
6656 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
6657 pushtag calling push_template_decl. We don't have to do
6658 this for enums because it will already have been done in
6661 SET_IDENTIFIER_TYPE_VALUE (name, newtag);
6662 pushtag (name, newtag, /*tag_scope=*/ts_current);
6665 else if (TREE_CODE (t) == FUNCTION_DECL
6666 || DECL_FUNCTION_TEMPLATE_P (t))
6668 /* Build new TYPE_METHODS. */
6671 if (TREE_CODE (t) == TEMPLATE_DECL)
6672 ++processing_template_decl;
6673 r = tsubst (t, args, tf_error, NULL_TREE);
6674 if (TREE_CODE (t) == TEMPLATE_DECL)
6675 --processing_template_decl;
6676 set_current_access_from_decl (r);
6677 finish_member_declaration (r);
6681 /* Build new TYPE_FIELDS. */
6682 if (TREE_CODE (t) == STATIC_ASSERT)
6685 tsubst_expr (STATIC_ASSERT_CONDITION (t), args,
6686 tf_warning_or_error, NULL_TREE,
6687 /*integral_constant_expression_p=*/true);
6688 finish_static_assert (condition,
6689 STATIC_ASSERT_MESSAGE (t),
6690 STATIC_ASSERT_SOURCE_LOCATION (t),
6693 else if (TREE_CODE (t) != CONST_DECL)
6697 /* The the file and line for this declaration, to
6698 assist in error message reporting. Since we
6699 called push_tinst_level above, we don't need to
6701 input_location = DECL_SOURCE_LOCATION (t);
6703 if (TREE_CODE (t) == TEMPLATE_DECL)
6704 ++processing_template_decl;
6705 r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
6706 if (TREE_CODE (t) == TEMPLATE_DECL)
6707 --processing_template_decl;
6708 if (TREE_CODE (r) == VAR_DECL)
6712 [t]he initialization (and any associated
6713 side-effects) of a static data member does
6714 not occur unless the static data member is
6715 itself used in a way that requires the
6716 definition of the static data member to
6719 Therefore, we do not substitute into the
6720 initialized for the static data member here. */
6721 finish_static_data_member_decl
6724 /*init_const_expr_p=*/false,
6725 /*asmspec_tree=*/NULL_TREE,
6727 if (DECL_INITIALIZED_IN_CLASS_P (r))
6728 check_static_variable_definition (r, TREE_TYPE (r));
6730 else if (TREE_CODE (r) == FIELD_DECL)
6732 /* Determine whether R has a valid type and can be
6733 completed later. If R is invalid, then it is
6734 replaced by error_mark_node so that it will not be
6735 added to TYPE_FIELDS. */
6736 tree rtype = TREE_TYPE (r);
6737 if (can_complete_type_without_circularity (rtype))
6738 complete_type (rtype);
6740 if (!COMPLETE_TYPE_P (rtype))
6742 cxx_incomplete_type_error (r, rtype);
6743 r = error_mark_node;
6747 /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
6748 such a thing will already have been added to the field
6749 list by tsubst_enum in finish_member_declaration in the
6750 CLASSTYPE_NESTED_UTDS case above. */
6751 if (!(TREE_CODE (r) == TYPE_DECL
6752 && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
6753 && DECL_ARTIFICIAL (r)))
6755 set_current_access_from_decl (r);
6756 finish_member_declaration (r);
6763 if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
6765 /* Build new CLASSTYPE_FRIEND_CLASSES. */
6767 tree friend_type = t;
6768 bool adjust_processing_template_decl = false;
6770 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
6772 /* template <class T> friend class C; */
6773 friend_type = tsubst_friend_class (friend_type, args);
6774 adjust_processing_template_decl = true;
6776 else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
6778 /* template <class T> friend class C::D; */
6779 friend_type = tsubst (friend_type, args,
6780 tf_warning_or_error, NULL_TREE);
6781 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
6782 friend_type = TREE_TYPE (friend_type);
6783 adjust_processing_template_decl = true;
6785 else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
6787 /* This could be either
6791 when dependent_type_p is false or
6793 template <class U> friend class T::C;
6796 friend_type = tsubst (friend_type, args,
6797 tf_warning_or_error, NULL_TREE);
6798 /* Bump processing_template_decl for correct
6799 dependent_type_p calculation. */
6800 ++processing_template_decl;
6801 if (dependent_type_p (friend_type))
6802 adjust_processing_template_decl = true;
6803 --processing_template_decl;
6805 else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
6806 && hidden_name_p (TYPE_NAME (friend_type)))
6810 where C hasn't been declared yet. Let's lookup name
6811 from namespace scope directly, bypassing any name that
6812 come from dependent base class. */
6813 tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
6815 /* The call to xref_tag_from_type does injection for friend
6817 push_nested_namespace (ns);
6819 xref_tag_from_type (friend_type, NULL_TREE,
6820 /*tag_scope=*/ts_current);
6821 pop_nested_namespace (ns);
6823 else if (uses_template_parms (friend_type))
6824 /* friend class C<T>; */
6825 friend_type = tsubst (friend_type, args,
6826 tf_warning_or_error, NULL_TREE);
6831 where C is already declared or
6833 friend class C<int>;
6835 We don't have to do anything in these cases. */
6837 if (adjust_processing_template_decl)
6838 /* Trick make_friend_class into realizing that the friend
6839 we're adding is a template, not an ordinary class. It's
6840 important that we use make_friend_class since it will
6841 perform some error-checking and output cross-reference
6843 ++processing_template_decl;
6845 if (friend_type != error_mark_node)
6846 make_friend_class (type, friend_type, /*complain=*/false);
6848 if (adjust_processing_template_decl)
6849 --processing_template_decl;
6853 /* Build new DECL_FRIENDLIST. */
6856 /* The the file and line for this declaration, to
6857 assist in error message reporting. Since we
6858 called push_tinst_level above, we don't need to
6860 input_location = DECL_SOURCE_LOCATION (t);
6862 if (TREE_CODE (t) == TEMPLATE_DECL)
6864 ++processing_template_decl;
6865 push_deferring_access_checks (dk_no_check);
6868 r = tsubst_friend_function (t, args);
6869 add_friend (type, r, /*complain=*/false);
6870 if (TREE_CODE (t) == TEMPLATE_DECL)
6872 pop_deferring_access_checks ();
6873 --processing_template_decl;
6879 /* Set the file and line number information to whatever is given for
6880 the class itself. This puts error messages involving generated
6881 implicit functions at a predictable point, and the same point
6882 that would be used for non-template classes. */
6883 input_location = DECL_SOURCE_LOCATION (typedecl);
6885 unreverse_member_declarations (type);
6886 finish_struct_1 (type);
6887 TYPE_BEING_DEFINED (type) = 0;
6889 /* Now that the class is complete, instantiate default arguments for
6890 any member functions. We don't do this earlier because the
6891 default arguments may reference members of the class. */
6892 if (!PRIMARY_TEMPLATE_P (template))
6893 for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
6894 if (TREE_CODE (t) == FUNCTION_DECL
6895 /* Implicitly generated member functions will not have template
6896 information; they are not instantiations, but instead are
6897 created "fresh" for each instantiation. */
6898 && DECL_TEMPLATE_INFO (t))
6899 tsubst_default_arguments (t);
6902 pop_from_top_level ();
6903 pop_deferring_access_checks ();
6906 /* The vtable for a template class can be emitted in any translation
6907 unit in which the class is instantiated. When there is no key
6908 method, however, finish_struct_1 will already have added TYPE to
6909 the keyed_classes list. */
6910 if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
6911 keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
6917 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
6923 else if (TYPE_P (t))
6924 r = tsubst (t, args, complain, in_decl);
6927 r = tsubst_expr (t, args, complain, in_decl,
6928 /*integral_constant_expression_p=*/true);
6929 r = fold_non_dependent_expr (r);
6934 /* Substitute ARGS into T, which is an pack expansion
6935 (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
6936 TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
6937 (if only a partial substitution could be performed) or
6938 ERROR_MARK_NODE if there was an error. */
6940 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
6944 tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
6945 tree first_arg_pack; int i, len = -1;
6949 gcc_assert (PACK_EXPANSION_P (t));
6950 pattern = PACK_EXPANSION_PATTERN (t);
6952 /* Determine the argument packs that will instantiate the parameter
6953 packs used in the expansion expression. While we're at it,
6954 compute the number of arguments to be expanded and make sure it
6956 for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack;
6957 pack = TREE_CHAIN (pack))
6959 tree parm_pack = TREE_VALUE (pack);
6960 tree arg_pack = NULL_TREE;
6961 tree orig_arg = NULL_TREE;
6963 if (TREE_CODE (parm_pack) == PARM_DECL)
6965 if (local_specializations)
6966 arg_pack = retrieve_local_specialization (parm_pack);
6970 int level, idx, levels;
6971 template_parm_level_and_index (parm_pack, &level, &idx);
6973 levels = TMPL_ARGS_DEPTH (args);
6974 if (level <= levels)
6975 arg_pack = TMPL_ARG (args, level, idx);
6978 orig_arg = arg_pack;
6979 if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
6980 arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
6982 if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
6983 /* This can only happen if we forget to expand an argument
6984 pack somewhere else. Just return an error, silently. */
6986 result = make_tree_vec (1);
6987 TREE_VEC_ELT (result, 0) = error_mark_node;
6994 TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
6996 /* It's all-or-nothing with incomplete argument packs. */
6997 if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
6998 return error_mark_node;
7000 if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7006 first_arg_pack = arg_pack;
7008 else if (len != my_len)
7010 if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
7011 error ("mismatched argument pack lengths while expanding "
7015 error ("mismatched argument pack lengths while expanding "
7018 return error_mark_node;
7021 /* Keep track of the parameter packs and their corresponding
7023 packs = tree_cons (parm_pack, arg_pack, packs);
7024 TREE_TYPE (packs) = orig_arg;
7027 /* We can't substitute for this parameter pack. */
7028 unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
7030 unsubstituted_packs);
7033 /* We cannot expand this expansion expression, because we don't have
7034 all of the argument packs we need. Substitute into the pattern
7035 and return a PACK_EXPANSION_*. The caller will need to deal with
7037 if (unsubstituted_packs)
7038 return make_pack_expansion (tsubst (pattern, args, complain,
7041 /* We could not find any argument packs that work. */
7043 return error_mark_node;
7045 /* For each argument in each argument pack, substitute into the
7047 result = make_tree_vec (len + incomplete);
7048 for (i = 0; i < len + incomplete; ++i)
7050 /* For parameter pack, change the substitution of the parameter
7051 pack to the ith argument in its argument pack, then expand
7053 for (pack = packs; pack; pack = TREE_CHAIN (pack))
7055 tree parm = TREE_PURPOSE (pack);
7057 if (TREE_CODE (parm) == PARM_DECL)
7059 /* Select the Ith argument from the pack. */
7060 tree arg = make_node (ARGUMENT_PACK_SELECT);
7061 ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
7062 ARGUMENT_PACK_SELECT_INDEX (arg) = i;
7064 register_local_specialization (arg, parm);
7070 template_parm_level_and_index (parm, &level, &idx);
7074 /* Select the Ith argument from the pack. */
7075 value = make_node (ARGUMENT_PACK_SELECT);
7076 ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
7077 ARGUMENT_PACK_SELECT_INDEX (value) = i;
7080 /* Update the corresponding argument. */
7081 TMPL_ARG (args, level, idx) = value;
7085 /* Substitute into the PATTERN with the altered arguments. */
7086 if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
7087 TREE_VEC_ELT (result, i) =
7088 tsubst_expr (pattern, args, complain, in_decl,
7089 /*integral_constant_expression_p=*/false);
7091 TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
7094 /* When we have incomplete argument packs, the last "expanded"
7095 result is itself a pack expansion, which allows us
7096 to deduce more arguments. */
7097 TREE_VEC_ELT (result, i) =
7098 make_pack_expansion (TREE_VEC_ELT (result, i));
7100 if (TREE_VEC_ELT (result, i) == error_mark_node)
7102 result = error_mark_node;
7107 /* Update ARGS to restore the substitution from parameter packs to
7108 their argument packs. */
7109 for (pack = packs; pack; pack = TREE_CHAIN (pack))
7111 tree parm = TREE_PURPOSE (pack);
7113 if (TREE_CODE (parm) == PARM_DECL)
7114 register_local_specialization (TREE_TYPE (pack), parm);
7118 template_parm_level_and_index (parm, &level, &idx);
7120 /* Update the corresponding argument. */
7121 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
7122 TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
7125 TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
7132 /* Substitute ARGS into the vector or list of template arguments T. */
7135 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7138 int len = TREE_VEC_LENGTH (t);
7139 int need_new = 0, i, expanded_len_adjust = 0, out;
7140 tree *elts = (tree *) alloca (len * sizeof (tree));
7142 for (i = 0; i < len; i++)
7144 tree orig_arg = TREE_VEC_ELT (t, i);
7147 if (TREE_CODE (orig_arg) == TREE_VEC)
7148 new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
7149 else if (PACK_EXPANSION_P (orig_arg))
7151 /* Substitute into an expansion expression. */
7152 new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
7154 if (TREE_CODE (new_arg) == TREE_VEC)
7155 /* Add to the expanded length adjustment the number of
7156 expanded arguments. We subtract one from this
7157 measurement, because the argument pack expression
7158 itself is already counted as 1 in
7159 LEN. EXPANDED_LEN_ADJUST can actually be negative, if
7160 the argument pack is empty. */
7161 expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
7163 else if (ARGUMENT_PACK_P (orig_arg))
7165 /* Substitute into each of the arguments. */
7166 new_arg = make_node (TREE_CODE (orig_arg));
7168 SET_ARGUMENT_PACK_ARGS (
7170 tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
7171 args, complain, in_decl));
7173 if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
7174 new_arg = error_mark_node;
7176 if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
7177 TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
7179 TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
7181 if (TREE_TYPE (new_arg) == error_mark_node)
7182 new_arg = error_mark_node;
7186 new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
7188 if (new_arg == error_mark_node)
7189 return error_mark_node;
7192 if (new_arg != orig_arg)
7199 /* Make space for the expanded arguments coming from template
7201 t = make_tree_vec (len + expanded_len_adjust);
7202 for (i = 0, out = 0; i < len; i++)
7204 if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
7205 || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
7206 && TREE_CODE (elts[i]) == TREE_VEC)
7210 /* Now expand the template argument pack "in place". */
7211 for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
7212 TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
7216 TREE_VEC_ELT (t, out) = elts[i];
7224 /* Return the result of substituting ARGS into the template parameters
7225 given by PARMS. If there are m levels of ARGS and m + n levels of
7226 PARMS, then the result will contain n levels of PARMS. For
7227 example, if PARMS is `template <class T> template <class U>
7228 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
7229 result will be `template <int*, double, class V>'. */
7232 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
7237 /* When substituting into a template, we must set
7238 PROCESSING_TEMPLATE_DECL as the template parameters may be
7239 dependent if they are based on one-another, and the dependency
7240 predicates are short-circuit outside of templates. */
7241 ++processing_template_decl;
7243 for (new_parms = &r;
7244 TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
7245 new_parms = &(TREE_CHAIN (*new_parms)),
7246 parms = TREE_CHAIN (parms))
7249 make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
7252 for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
7258 if (parms == error_mark_node)
7261 tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
7263 if (tuple == error_mark_node)
7266 default_value = TREE_PURPOSE (tuple);
7267 parm_decl = TREE_VALUE (tuple);
7269 parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
7270 if (TREE_CODE (parm_decl) == PARM_DECL
7271 && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
7272 parm_decl = error_mark_node;
7273 default_value = tsubst_template_arg (default_value, args,
7274 complain, NULL_TREE);
7276 tuple = build_tree_list (default_value, parm_decl);
7277 TREE_VEC_ELT (new_vec, i) = tuple;
7281 tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
7282 - TMPL_ARGS_DEPTH (args)),
7283 new_vec, NULL_TREE);
7286 --processing_template_decl;
7291 /* Substitute the ARGS into the indicated aggregate (or enumeration)
7292 type T. If T is not an aggregate or enumeration type, it is
7293 handled as if by tsubst. IN_DECL is as for tsubst. If
7294 ENTERING_SCOPE is nonzero, T is the context for a template which
7295 we are presently tsubst'ing. Return the substituted value. */
7298 tsubst_aggr_type (tree t,
7300 tsubst_flags_t complain,
7307 switch (TREE_CODE (t))
7310 if (TYPE_PTRMEMFUNC_P (t))
7311 return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
7313 /* Else fall through. */
7316 if (TYPE_TEMPLATE_INFO (t))
7321 bool saved_skip_evaluation;
7323 /* In "sizeof(X<I>)" we need to evaluate "I". */
7324 saved_skip_evaluation = skip_evaluation;
7325 skip_evaluation = false;
7327 /* First, determine the context for the type we are looking
7329 context = TYPE_CONTEXT (t);
7331 context = tsubst_aggr_type (context, args, complain,
7332 in_decl, /*entering_scope=*/1);
7334 /* Then, figure out what arguments are appropriate for the
7335 type we are trying to find. For example, given:
7337 template <class T> struct S;
7338 template <class T, class U> void f(T, U) { S<U> su; }
7340 and supposing that we are instantiating f<int, double>,
7341 then our ARGS will be {int, double}, but, when looking up
7342 S we only want {double}. */
7343 argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
7345 if (argvec == error_mark_node)
7346 r = error_mark_node;
7349 r = lookup_template_class (t, argvec, in_decl, context,
7350 entering_scope, complain);
7351 r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7354 skip_evaluation = saved_skip_evaluation;
7359 /* This is not a template type, so there's nothing to do. */
7363 return tsubst (t, args, complain, in_decl);
7367 /* Substitute into the default argument ARG (a default argument for
7368 FN), which has the indicated TYPE. */
7371 tsubst_default_argument (tree fn, tree type, tree arg)
7373 tree saved_class_ptr = NULL_TREE;
7374 tree saved_class_ref = NULL_TREE;
7376 /* This default argument came from a template. Instantiate the
7377 default argument here, not in tsubst. In the case of
7386 we must be careful to do name lookup in the scope of S<T>,
7387 rather than in the current class. */
7388 push_access_scope (fn);
7389 /* The "this" pointer is not valid in a default argument. */
7392 saved_class_ptr = current_class_ptr;
7393 cp_function_chain->x_current_class_ptr = NULL_TREE;
7394 saved_class_ref = current_class_ref;
7395 cp_function_chain->x_current_class_ref = NULL_TREE;
7398 push_deferring_access_checks(dk_no_deferred);
7399 /* The default argument expression may cause implicitly defined
7400 member functions to be synthesized, which will result in garbage
7401 collection. We must treat this situation as if we were within
7402 the body of function so as to avoid collecting live data on the
7405 arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
7406 tf_warning_or_error, NULL_TREE,
7407 /*integral_constant_expression_p=*/false);
7409 pop_deferring_access_checks();
7411 /* Restore the "this" pointer. */
7414 cp_function_chain->x_current_class_ptr = saved_class_ptr;
7415 cp_function_chain->x_current_class_ref = saved_class_ref;
7418 pop_access_scope (fn);
7420 /* Make sure the default argument is reasonable. */
7421 arg = check_default_argument (type, arg);
7426 /* Substitute into all the default arguments for FN. */
7429 tsubst_default_arguments (tree fn)
7434 tmpl_args = DECL_TI_ARGS (fn);
7436 /* If this function is not yet instantiated, we certainly don't need
7437 its default arguments. */
7438 if (uses_template_parms (tmpl_args))
7441 for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
7443 arg = TREE_CHAIN (arg))
7444 if (TREE_PURPOSE (arg))
7445 TREE_PURPOSE (arg) = tsubst_default_argument (fn,
7447 TREE_PURPOSE (arg));
7450 /* Substitute the ARGS into the T, which is a _DECL. Return the
7451 result of the substitution. Issue error and warning messages under
7452 control of COMPLAIN. */
7455 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
7457 location_t saved_loc;
7461 /* Set the filename and linenumber to improve error-reporting. */
7462 saved_loc = input_location;
7463 input_location = DECL_SOURCE_LOCATION (t);
7465 switch (TREE_CODE (t))
7469 /* We can get here when processing a member function template,
7470 member class template, and template template parameter of
7471 a template class. */
7472 tree decl = DECL_TEMPLATE_RESULT (t);
7477 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7479 /* Template template parameter is treated here. */
7480 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7481 if (new_type == error_mark_node)
7482 return error_mark_node;
7485 TREE_CHAIN (r) = NULL_TREE;
7486 TREE_TYPE (r) = new_type;
7487 DECL_TEMPLATE_RESULT (r)
7488 = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
7489 DECL_TEMPLATE_PARMS (r)
7490 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7492 TYPE_NAME (new_type) = r;
7496 /* We might already have an instance of this template.
7497 The ARGS are for the surrounding class type, so the
7498 full args contain the tsubst'd args for the context,
7499 plus the innermost args from the template decl. */
7500 tmpl_args = DECL_CLASS_TEMPLATE_P (t)
7501 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
7502 : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
7503 /* Because this is a template, the arguments will still be
7504 dependent, even after substitution. If
7505 PROCESSING_TEMPLATE_DECL is not set, the dependency
7506 predicates will short-circuit. */
7507 ++processing_template_decl;
7508 full_args = tsubst_template_args (tmpl_args, args,
7510 --processing_template_decl;
7511 if (full_args == error_mark_node)
7512 return error_mark_node;
7514 /* tsubst_template_args doesn't copy the vector if
7515 nothing changed. But, *something* should have
7517 gcc_assert (full_args != tmpl_args);
7519 spec = retrieve_specialization (t, full_args,
7520 /*class_specializations_p=*/true);
7521 if (spec != NULL_TREE)
7527 /* Make a new template decl. It will be similar to the
7528 original, but will record the current template arguments.
7529 We also create a new function declaration, which is just
7530 like the old one, but points to this new template, rather
7531 than the old one. */
7533 gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
7534 TREE_CHAIN (r) = NULL_TREE;
7536 DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
7538 if (TREE_CODE (decl) == TYPE_DECL)
7541 ++processing_template_decl;
7542 new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7543 --processing_template_decl;
7544 if (new_type == error_mark_node)
7545 return error_mark_node;
7547 TREE_TYPE (r) = new_type;
7548 CLASSTYPE_TI_TEMPLATE (new_type) = r;
7549 DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
7550 DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
7551 DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
7556 ++processing_template_decl;
7557 new_decl = tsubst (decl, args, complain, in_decl);
7558 --processing_template_decl;
7559 if (new_decl == error_mark_node)
7560 return error_mark_node;
7562 DECL_TEMPLATE_RESULT (r) = new_decl;
7563 DECL_TI_TEMPLATE (new_decl) = r;
7564 TREE_TYPE (r) = TREE_TYPE (new_decl);
7565 DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
7566 DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
7569 SET_DECL_IMPLICIT_INSTANTIATION (r);
7570 DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
7571 DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
7573 /* The template parameters for this new template are all the
7574 template parameters for the old template, except the
7575 outermost level of parameters. */
7576 DECL_TEMPLATE_PARMS (r)
7577 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7580 if (PRIMARY_TEMPLATE_P (t))
7581 DECL_PRIMARY_TEMPLATE (r) = r;
7583 if (TREE_CODE (decl) != TYPE_DECL)
7584 /* Record this non-type partial instantiation. */
7585 register_specialization (r, t,
7586 DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
7594 tree argvec = NULL_TREE;
7602 /* Nobody should be tsubst'ing into non-template functions. */
7603 gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
7605 if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
7610 /* If T is not dependent, just return it. We have to
7611 increment PROCESSING_TEMPLATE_DECL because
7612 value_dependent_expression_p assumes that nothing is
7613 dependent when PROCESSING_TEMPLATE_DECL is zero. */
7614 ++processing_template_decl;
7615 dependent_p = value_dependent_expression_p (t);
7616 --processing_template_decl;
7620 /* Calculate the most general template of which R is a
7621 specialization, and the complete set of arguments used to
7623 gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
7624 argvec = tsubst_template_args (DECL_TI_ARGS
7625 (DECL_TEMPLATE_RESULT (gen_tmpl)),
7626 args, complain, in_decl);
7628 /* Check to see if we already have this specialization. */
7629 spec = retrieve_specialization (gen_tmpl, argvec,
7630 /*class_specializations_p=*/false);
7638 /* We can see more levels of arguments than parameters if
7639 there was a specialization of a member template, like
7642 template <class T> struct S { template <class U> void f(); }
7643 template <> template <class U> void S<int>::f(U);
7645 Here, we'll be substituting into the specialization,
7646 because that's where we can find the code we actually
7647 want to generate, but we'll have enough arguments for
7648 the most general template.
7650 We also deal with the peculiar case:
7652 template <class T> struct S {
7653 template <class U> friend void f();
7655 template <class U> void f() {}
7657 template void f<double>();
7659 Here, the ARGS for the instantiation of will be {int,
7660 double}. But, we only need as many ARGS as there are
7661 levels of template parameters in CODE_PATTERN. We are
7662 careful not to get fooled into reducing the ARGS in
7665 template <class T> struct S { template <class U> void f(U); }
7666 template <class T> template <> void S<T>::f(int) {}
7668 which we can spot because the pattern will be a
7669 specialization in this case. */
7670 args_depth = TMPL_ARGS_DEPTH (args);
7672 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
7673 if (args_depth > parms_depth
7674 && !DECL_TEMPLATE_SPECIALIZATION (t))
7675 args = get_innermost_template_args (args, parms_depth);
7679 /* This special case arises when we have something like this:
7681 template <class T> struct S {
7682 friend void f<int>(int, double);
7685 Here, the DECL_TI_TEMPLATE for the friend declaration
7686 will be an IDENTIFIER_NODE. We are being called from
7687 tsubst_friend_function, and we want only to create a
7688 new decl (R) with appropriate types so that we can call
7689 determine_specialization. */
7690 gen_tmpl = NULL_TREE;
7693 if (DECL_CLASS_SCOPE_P (t))
7695 if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
7699 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
7700 complain, t, /*entering_scope=*/1);
7705 ctx = DECL_CONTEXT (t);
7707 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7708 if (type == error_mark_node)
7709 return error_mark_node;
7711 /* We do NOT check for matching decls pushed separately at this
7712 point, as they may not represent instantiations of this
7713 template, and in any case are considered separate under the
7716 DECL_USE_TEMPLATE (r) = 0;
7717 TREE_TYPE (r) = type;
7718 /* Clear out the mangled name and RTL for the instantiation. */
7719 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
7720 SET_DECL_RTL (r, NULL_RTX);
7721 DECL_INITIAL (r) = NULL_TREE;
7722 DECL_CONTEXT (r) = ctx;
7724 if (member && DECL_CONV_FN_P (r))
7725 /* Type-conversion operator. Reconstruct the name, in
7726 case it's the name of one of the template's parameters. */
7727 DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
7729 DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
7731 DECL_RESULT (r) = NULL_TREE;
7733 TREE_STATIC (r) = 0;
7734 TREE_PUBLIC (r) = TREE_PUBLIC (t);
7735 DECL_EXTERNAL (r) = 1;
7736 /* If this is an instantiation of a function with internal
7737 linkage, we already know what object file linkage will be
7738 assigned to the instantiation. */
7739 DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
7740 DECL_DEFER_OUTPUT (r) = 0;
7741 TREE_CHAIN (r) = NULL_TREE;
7742 DECL_PENDING_INLINE_INFO (r) = 0;
7743 DECL_PENDING_INLINE_P (r) = 0;
7744 DECL_SAVED_TREE (r) = NULL_TREE;
7746 if (DECL_CLONED_FUNCTION (r))
7748 DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
7750 TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
7751 TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
7754 /* Set up the DECL_TEMPLATE_INFO for R. There's no need to do
7755 this in the special friend case mentioned above where
7756 GEN_TMPL is NULL. */
7759 DECL_TEMPLATE_INFO (r)
7760 = tree_cons (gen_tmpl, argvec, NULL_TREE);
7761 SET_DECL_IMPLICIT_INSTANTIATION (r);
7762 register_specialization (r, gen_tmpl, argvec, false);
7764 /* We're not supposed to instantiate default arguments
7765 until they are called, for a template. But, for a
7768 template <class T> void f ()
7769 { extern void g(int i = T()); }
7771 we should do the substitution when the template is
7772 instantiated. We handle the member function case in
7773 instantiate_class_template since the default arguments
7774 might refer to other members of the class. */
7776 && !PRIMARY_TEMPLATE_P (gen_tmpl)
7777 && !uses_template_parms (argvec))
7778 tsubst_default_arguments (r);
7781 DECL_TEMPLATE_INFO (r) = NULL_TREE;
7783 /* Copy the list of befriending classes. */
7784 for (friends = &DECL_BEFRIENDING_CLASSES (r);
7786 friends = &TREE_CHAIN (*friends))
7788 *friends = copy_node (*friends);
7789 TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
7794 if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
7796 maybe_retrofit_in_chrg (r);
7797 if (DECL_CONSTRUCTOR_P (r))
7798 grok_ctor_properties (ctx, r);
7799 /* If this is an instantiation of a member template, clone it.
7800 If it isn't, that'll be handled by
7801 clone_constructors_and_destructors. */
7802 if (PRIMARY_TEMPLATE_P (gen_tmpl))
7803 clone_function_decl (r, /*update_method_vec_p=*/0);
7805 else if (IDENTIFIER_OPNAME_P (DECL_NAME (r))
7806 && !grok_op_properties (r, (complain & tf_error) != 0))
7807 return error_mark_node;
7809 if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
7810 SET_DECL_FRIEND_CONTEXT (r,
7811 tsubst (DECL_FRIEND_CONTEXT (t),
7812 args, complain, in_decl));
7814 /* Possibly limit visibility based on template args. */
7815 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
7816 if (DECL_VISIBILITY_SPECIFIED (t))
7818 DECL_VISIBILITY_SPECIFIED (r) = 0;
7820 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
7822 determine_visibility (r);
7828 tree type = NULL_TREE;
7830 tree expanded_types = NULL_TREE;
7831 tree prev_r = NULL_TREE;
7832 tree first_r = NULL_TREE;
7834 if (FUNCTION_PARAMETER_PACK_P (t))
7836 /* If there is a local specialization that isn't a
7837 parameter pack, it means that we're doing a "simple"
7838 substitution from inside tsubst_pack_expansion. Just
7839 return the local specialization (which will be a single
7841 tree spec = NULL_TREE;
7842 if (local_specializations)
7843 spec = retrieve_local_specialization (t);
7845 && TREE_CODE (spec) == PARM_DECL
7846 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
7849 /* Expand the TYPE_PACK_EXPANSION that provides the types for
7850 the parameters in this function parameter pack. */
7851 expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
7853 if (TREE_CODE (expanded_types) == TREE_VEC)
7855 len = TREE_VEC_LENGTH (expanded_types);
7857 /* Zero-length parameter packs are boring. Just substitute
7860 return tsubst (TREE_CHAIN (t), args, complain,
7865 /* All we did was update the type. Make a note of that. */
7866 type = expanded_types;
7867 expanded_types = NULL_TREE;
7871 /* Loop through all of the parameter's we'll build. When T is
7872 a function parameter pack, LEN is the number of expanded
7873 types in EXPANDED_TYPES; otherwise, LEN is 1. */
7875 for (i = 0; i < len; ++i)
7879 if (DECL_TEMPLATE_PARM_P (t))
7880 SET_DECL_TEMPLATE_PARM_P (r);
7883 /* We're on the Ith parameter of the function parameter
7886 /* Get the Ith type. */
7887 type = TREE_VEC_ELT (expanded_types, i);
7890 /* Rename the parameter to include the index. */
7892 make_ith_pack_parameter_name (DECL_NAME (r), i);
7895 /* We're dealing with a normal parameter. */
7896 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7898 type = type_decays_to (type);
7899 TREE_TYPE (r) = type;
7900 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
7902 if (DECL_INITIAL (r))
7904 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
7905 DECL_INITIAL (r) = TREE_TYPE (r);
7907 DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
7911 DECL_CONTEXT (r) = NULL_TREE;
7913 if (!DECL_TEMPLATE_PARM_P (r))
7914 DECL_ARG_TYPE (r) = type_passed_as (type);
7916 /* Keep track of the first new parameter we
7917 generate. That's what will be returned to the
7922 /* Build a proper chain of parameters when substituting
7923 into a function parameter pack. */
7925 TREE_CHAIN (prev_r) = r;
7929 TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
7930 complain, TREE_CHAIN (t));
7932 /* FIRST_R contains the start of the chain we've built. */
7942 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7943 if (type == error_mark_node)
7944 return error_mark_node;
7945 TREE_TYPE (r) = type;
7946 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
7948 /* DECL_INITIAL gives the number of bits in a bit-field. */
7950 = tsubst_expr (DECL_INITIAL (t), args,
7952 /*integral_constant_expression_p=*/true);
7953 /* We don't have to set DECL_CONTEXT here; it is set by
7954 finish_member_declaration. */
7955 TREE_CHAIN (r) = NULL_TREE;
7956 if (VOID_TYPE_P (type))
7957 error ("instantiation of %q+D as type %qT", r, type);
7962 /* We reach here only for member using decls. */
7963 if (DECL_DEPENDENT_P (t))
7965 r = do_class_using_decl
7966 (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
7967 tsubst_copy (DECL_NAME (t), args, complain, in_decl));
7969 r = error_mark_node;
7974 TREE_CHAIN (r) = NULL_TREE;
7981 tree argvec = NULL_TREE;
7982 tree gen_tmpl = NULL_TREE;
7984 tree tmpl = NULL_TREE;
7986 tree type = NULL_TREE;
7989 if (TREE_CODE (t) == TYPE_DECL)
7991 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7992 if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
7993 || t == TYPE_MAIN_DECL (TREE_TYPE (t)))
7995 /* If this is the canonical decl, we don't have to
7996 mess with instantiations, and often we can't (for
7997 typename, template type parms and such). Note that
7998 TYPE_NAME is not correct for the above test if
7999 we've copied the type for a typedef. */
8000 r = TYPE_NAME (type);
8005 /* Check to see if we already have the specialization we
8008 if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
8010 /* T is a static data member or namespace-scope entity.
8011 We have to substitute into namespace-scope variables
8012 (even though such entities are never templates) because
8015 template <class T> void f() { extern T t; }
8017 where the entity referenced is not known until
8018 instantiation time. */
8020 ctx = DECL_CONTEXT (t);
8021 if (DECL_CLASS_SCOPE_P (t))
8023 ctx = tsubst_aggr_type (ctx, args,
8025 in_decl, /*entering_scope=*/1);
8026 /* If CTX is unchanged, then T is in fact the
8027 specialization we want. That situation occurs when
8028 referencing a static data member within in its own
8029 class. We can use pointer equality, rather than
8030 same_type_p, because DECL_CONTEXT is always
8032 if (ctx == DECL_CONTEXT (t))
8038 tmpl = DECL_TI_TEMPLATE (t);
8039 gen_tmpl = most_general_template (tmpl);
8040 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
8041 spec = (retrieve_specialization
8043 /*class_specializations_p=*/false));
8048 /* A local variable. */
8050 /* Subsequent calls to pushdecl will fill this in. */
8052 spec = retrieve_local_specialization (t);
8054 /* If we already have the specialization we need, there is
8055 nothing more to do. */
8062 /* Create a new node for the specialization we need. */
8064 if (TREE_CODE (r) == VAR_DECL)
8066 /* Even if the original location is out of scope, the
8067 newly substituted one is not. */
8068 DECL_DEAD_FOR_LOCAL (r) = 0;
8069 DECL_INITIALIZED_P (r) = 0;
8070 DECL_TEMPLATE_INSTANTIATED (r) = 0;
8071 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8072 if (type == error_mark_node)
8073 return error_mark_node;
8074 if (TREE_CODE (type) == FUNCTION_TYPE)
8076 /* It may seem that this case cannot occur, since:
8081 declares a function, not a variable. However:
8084 template <typename T> void g() { T t; }
8085 template void g<f>();
8087 is an attempt to declare a variable with function
8089 error ("variable %qD has function type",
8090 /* R is not yet sufficiently initialized, so we
8091 just use its name. */
8093 return error_mark_node;
8095 type = complete_type (type);
8096 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
8097 = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
8098 type = check_var_type (DECL_NAME (r), type);
8100 if (DECL_HAS_VALUE_EXPR_P (t))
8102 tree ve = DECL_VALUE_EXPR (t);
8103 ve = tsubst_expr (ve, args, complain, in_decl,
8104 /*constant_expression_p=*/false);
8105 SET_DECL_VALUE_EXPR (r, ve);
8108 else if (DECL_SELF_REFERENCE_P (t))
8109 SET_DECL_SELF_REFERENCE_P (r);
8110 TREE_TYPE (r) = type;
8111 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8112 DECL_CONTEXT (r) = ctx;
8113 /* Clear out the mangled name and RTL for the instantiation. */
8114 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8115 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8116 SET_DECL_RTL (r, NULL_RTX);
8117 /* The initializer must not be expanded until it is required;
8119 DECL_INITIAL (r) = NULL_TREE;
8120 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8121 SET_DECL_RTL (r, NULL_RTX);
8122 DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
8123 if (TREE_CODE (r) == VAR_DECL)
8125 /* Possibly limit visibility based on template args. */
8126 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8127 if (DECL_VISIBILITY_SPECIFIED (t))
8129 DECL_VISIBILITY_SPECIFIED (r) = 0;
8131 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8133 determine_visibility (r);
8138 /* A static data member declaration is always marked
8139 external when it is declared in-class, even if an
8140 initializer is present. We mimic the non-template
8142 DECL_EXTERNAL (r) = 1;
8144 register_specialization (r, gen_tmpl, argvec, false);
8145 DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
8146 SET_DECL_IMPLICIT_INSTANTIATION (r);
8149 register_local_specialization (r, t);
8151 TREE_CHAIN (r) = NULL_TREE;
8160 /* Restore the file and line information. */
8161 input_location = saved_loc;
8166 /* Substitute into the ARG_TYPES of a function type. */
8169 tsubst_arg_types (tree arg_types,
8171 tsubst_flags_t complain,
8174 tree remaining_arg_types;
8175 tree type = NULL_TREE;
8177 tree expanded_args = NULL_TREE;
8180 if (!arg_types || arg_types == void_list_node)
8183 remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
8184 args, complain, in_decl);
8185 if (remaining_arg_types == error_mark_node)
8186 return error_mark_node;
8188 if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
8190 /* For a pack expansion, perform substitution on the
8191 entire expression. Later on, we'll handle the arguments
8193 expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
8194 args, complain, in_decl);
8196 if (TREE_CODE (expanded_args) == TREE_VEC)
8197 /* So that we'll spin through the parameters, one by one. */
8198 i = TREE_VEC_LENGTH (expanded_args);
8201 /* We only partially substituted into the parameter
8202 pack. Our type is TYPE_PACK_EXPANSION. */
8203 type = expanded_args;
8204 expanded_args = NULL_TREE;
8212 type = TREE_VEC_ELT (expanded_args, i);
8214 type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
8216 if (type == error_mark_node)
8217 return error_mark_node;
8218 if (VOID_TYPE_P (type))
8220 if (complain & tf_error)
8222 error ("invalid parameter type %qT", type);
8224 error ("in declaration %q+D", in_decl);
8226 return error_mark_node;
8229 /* Do array-to-pointer, function-to-pointer conversion, and ignore
8230 top-level qualifiers as required. */
8231 type = TYPE_MAIN_VARIANT (type_decays_to (type));
8233 /* We do not substitute into default arguments here. The standard
8234 mandates that they be instantiated only when needed, which is
8235 done in build_over_call. */
8236 default_arg = TREE_PURPOSE (arg_types);
8238 if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
8240 /* We've instantiated a template before its default arguments
8241 have been parsed. This can happen for a nested template
8242 class, and is not an error unless we require the default
8243 argument in a call of this function. */
8244 remaining_arg_types =
8245 tree_cons (default_arg, type, remaining_arg_types);
8246 VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg),
8247 remaining_arg_types);
8250 remaining_arg_types =
8251 hash_tree_cons (default_arg, type, remaining_arg_types);
8254 return remaining_arg_types;
8257 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
8258 *not* handle the exception-specification for FNTYPE, because the
8259 initial substitution of explicitly provided template parameters
8260 during argument deduction forbids substitution into the
8261 exception-specification:
8265 All references in the function type of the function template to the
8266 corresponding template parameters are replaced by the specified tem-
8267 plate argument values. If a substitution in a template parameter or
8268 in the function type of the function template results in an invalid
8269 type, type deduction fails. [Note: The equivalent substitution in
8270 exception specifications is done only when the function is instanti-
8271 ated, at which point a program is ill-formed if the substitution
8272 results in an invalid type.] */
8275 tsubst_function_type (tree t,
8277 tsubst_flags_t complain,
8284 /* The TYPE_CONTEXT is not used for function/method types. */
8285 gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
8287 /* Substitute the return type. */
8288 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8289 if (return_type == error_mark_node)
8290 return error_mark_node;
8291 /* The standard does not presently indicate that creation of a
8292 function type with an invalid return type is a deduction failure.
8293 However, that is clearly analogous to creating an array of "void"
8294 or a reference to a reference. This is core issue #486. */
8295 if (TREE_CODE (return_type) == ARRAY_TYPE
8296 || TREE_CODE (return_type) == FUNCTION_TYPE)
8298 if (complain & tf_error)
8300 if (TREE_CODE (return_type) == ARRAY_TYPE)
8301 error ("function returning an array");
8303 error ("function returning a function");
8305 return error_mark_node;
8308 /* Substitute the argument types. */
8309 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
8311 if (arg_types == error_mark_node)
8312 return error_mark_node;
8314 if (TYPE_QUALS (return_type) != TYPE_UNQUALIFIED
8315 && in_decl != NULL_TREE
8316 && !TREE_NO_WARNING (in_decl)
8317 && (SCALAR_TYPE_P (return_type) || VOID_TYPE_P (return_type)))
8318 warning (OPT_Wreturn_type,
8319 "type qualifiers ignored on function return type");
8321 /* Construct a new type node and return it. */
8322 if (TREE_CODE (t) == FUNCTION_TYPE)
8323 fntype = build_function_type (return_type, arg_types);
8326 tree r = TREE_TYPE (TREE_VALUE (arg_types));
8327 if (! IS_AGGR_TYPE (r))
8331 Type deduction may fail for any of the following
8334 -- Attempting to create "pointer to member of T" when T
8335 is not a class type. */
8336 if (complain & tf_error)
8337 error ("creating pointer to member function of non-class type %qT",
8339 return error_mark_node;
8342 fntype = build_method_type_directly (r, return_type,
8343 TREE_CHAIN (arg_types));
8345 fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
8346 fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
8351 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE. Substitute the template
8352 ARGS into that specification, and return the substituted
8353 specification. If there is no specification, return NULL_TREE. */
8356 tsubst_exception_specification (tree fntype,
8358 tsubst_flags_t complain,
8364 specs = TYPE_RAISES_EXCEPTIONS (fntype);
8365 new_specs = NULL_TREE;
8368 if (! TREE_VALUE (specs))
8375 tree expanded_specs = NULL_TREE;
8377 if (PACK_EXPANSION_P (TREE_VALUE (specs)))
8379 /* Expand the pack expansion type. */
8380 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
8383 len = TREE_VEC_LENGTH (expanded_specs);
8386 for (i = 0; i < len; ++i)
8389 spec = TREE_VEC_ELT (expanded_specs, i);
8391 spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
8392 if (spec == error_mark_node)
8394 new_specs = add_exception_specifier (new_specs, spec,
8398 specs = TREE_CHAIN (specs);
8404 /* Take the tree structure T and replace template parameters used
8405 therein with the argument vector ARGS. IN_DECL is an associated
8406 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
8407 Issue error and warning messages under control of COMPLAIN. Note
8408 that we must be relatively non-tolerant of extensions here, in
8409 order to preserve conformance; if we allow substitutions that
8410 should not be allowed, we may allow argument deductions that should
8411 not succeed, and therefore report ambiguous overload situations
8412 where there are none. In theory, we could allow the substitution,
8413 but indicate that it should have failed, and allow our caller to
8414 make sure that the right thing happens, but we don't try to do this
8417 This function is used for dealing with types, decls and the like;
8418 for expressions, use tsubst_expr or tsubst_copy. */
8421 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8425 if (t == NULL_TREE || t == error_mark_node
8426 || t == integer_type_node
8427 || t == void_type_node
8428 || t == char_type_node
8429 || t == unknown_type_node
8430 || TREE_CODE (t) == NAMESPACE_DECL)
8434 return tsubst_decl (t, args, complain);
8436 if (TREE_CODE (t) == IDENTIFIER_NODE)
8437 type = IDENTIFIER_TYPE_VALUE (t);
8439 type = TREE_TYPE (t);
8441 gcc_assert (type != unknown_type_node);
8444 && TREE_CODE (t) != TYPENAME_TYPE
8445 && TREE_CODE (t) != IDENTIFIER_NODE
8446 && TREE_CODE (t) != FUNCTION_TYPE
8447 && TREE_CODE (t) != METHOD_TYPE)
8448 type = tsubst (type, args, complain, in_decl);
8449 if (type == error_mark_node)
8450 return error_mark_node;
8452 switch (TREE_CODE (t))
8457 return tsubst_aggr_type (t, args, complain, in_decl,
8458 /*entering_scope=*/0);
8461 case IDENTIFIER_NODE:
8473 if (t == integer_type_node)
8476 if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
8477 && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
8481 tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
8483 max = tsubst_expr (omax, args, complain, in_decl,
8484 /*integral_constant_expression_p=*/false);
8485 max = fold_decl_constant_value (max);
8487 if (TREE_CODE (max) != INTEGER_CST
8488 && TREE_CODE (max) != TEMPLATE_PARM_INDEX
8489 && !at_function_scope_p ())
8491 if (complain & tf_error)
8492 error ("array bound is not an integer constant");
8493 return error_mark_node;
8498 Type deduction may fail for any of the following
8501 Attempting to create an array with a size that is
8502 zero or negative. */
8503 if (integer_zerop (max) && !(complain & tf_error))
8504 /* We must fail if performing argument deduction (as
8505 indicated by the state of complain), so that
8506 another substitution can be found. */
8507 return error_mark_node;
8508 else if (TREE_CODE (max) == INTEGER_CST
8509 && INT_CST_LT (max, integer_zero_node))
8511 if (complain & tf_error)
8512 error ("creating array with negative size (%qE)", max);
8514 return error_mark_node;
8517 return compute_array_index_type (NULL_TREE, max);
8520 case TEMPLATE_TYPE_PARM:
8521 case TEMPLATE_TEMPLATE_PARM:
8522 case BOUND_TEMPLATE_TEMPLATE_PARM:
8523 case TEMPLATE_PARM_INDEX:
8528 tree arg = NULL_TREE;
8532 gcc_assert (TREE_VEC_LENGTH (args) > 0);
8533 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
8534 || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
8535 || TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8537 idx = TEMPLATE_TYPE_IDX (t);
8538 level = TEMPLATE_TYPE_LEVEL (t);
8542 idx = TEMPLATE_PARM_IDX (t);
8543 level = TEMPLATE_PARM_LEVEL (t);
8546 levels = TMPL_ARGS_DEPTH (args);
8547 if (level <= levels)
8549 arg = TMPL_ARG (args, level, idx);
8551 if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
8552 /* See through ARGUMENT_PACK_SELECT arguments. */
8553 arg = ARGUMENT_PACK_SELECT_ARG (arg);
8556 if (arg == error_mark_node)
8557 return error_mark_node;
8558 else if (arg != NULL_TREE)
8560 if (ARGUMENT_PACK_P (arg))
8561 /* If ARG is an argument pack, we don't actually want to
8562 perform a substitution here, because substitutions
8563 for argument packs are only done
8564 element-by-element. We can get to this point when
8565 substituting the type of a non-type template
8566 parameter pack, when that type actually contains
8567 template parameter packs from an outer template, e.g.,
8569 template<typename... Types> struct A {
8570 template<Types... Values> struct B { };
8574 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
8577 gcc_assert (TYPE_P (arg));
8579 /* cv-quals from the template are discarded when
8580 substituting in a function or reference type. */
8581 if (TREE_CODE (arg) == FUNCTION_TYPE
8582 || TREE_CODE (arg) == METHOD_TYPE
8583 || TREE_CODE (arg) == REFERENCE_TYPE)
8584 quals = cp_type_quals (arg);
8586 quals = cp_type_quals (arg) | cp_type_quals (t);
8588 return cp_build_qualified_type_real
8589 (arg, quals, complain | tf_ignore_bad_quals);
8591 else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8593 /* We are processing a type constructed from a
8594 template template parameter. */
8595 tree argvec = tsubst (TYPE_TI_ARGS (t),
8596 args, complain, in_decl);
8597 if (argvec == error_mark_node)
8598 return error_mark_node;
8600 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
8601 are resolving nested-types in the signature of a
8602 member function templates. Otherwise ARG is a
8603 TEMPLATE_DECL and is the real template to be
8605 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
8606 arg = TYPE_NAME (arg);
8608 r = lookup_template_class (arg,
8611 /*entering_scope=*/0,
8613 return cp_build_qualified_type_real
8614 (r, TYPE_QUALS (t), complain);
8617 /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX. */
8622 /* This can happen during the attempted tsubst'ing in
8623 unify. This means that we don't yet have any information
8624 about the template parameter in question. */
8627 /* If we get here, we must have been looking at a parm for a
8628 more deeply nested template. Make a new version of this
8629 template parameter, but with a lower level. */
8630 switch (TREE_CODE (t))
8632 case TEMPLATE_TYPE_PARM:
8633 case TEMPLATE_TEMPLATE_PARM:
8634 case BOUND_TEMPLATE_TEMPLATE_PARM:
8635 if (cp_type_quals (t))
8637 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
8638 r = cp_build_qualified_type_real
8639 (r, cp_type_quals (t),
8640 complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
8641 ? tf_ignore_bad_quals : 0));
8646 TEMPLATE_TYPE_PARM_INDEX (r)
8647 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
8649 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
8650 TYPE_MAIN_VARIANT (r) = r;
8651 TYPE_POINTER_TO (r) = NULL_TREE;
8652 TYPE_REFERENCE_TO (r) = NULL_TREE;
8654 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
8655 /* We have reduced the level of the template
8656 template parameter, but not the levels of its
8657 template parameters, so canonical_type_parameter
8658 will not be able to find the canonical template
8659 template parameter for this level. Thus, we
8660 require structural equality checking to compare
8661 TEMPLATE_TEMPLATE_PARMs. */
8662 SET_TYPE_STRUCTURAL_EQUALITY (r);
8663 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
8664 SET_TYPE_STRUCTURAL_EQUALITY (r);
8666 TYPE_CANONICAL (r) = canonical_type_parameter (r);
8668 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8670 tree argvec = tsubst (TYPE_TI_ARGS (t), args,
8672 if (argvec == error_mark_node)
8673 return error_mark_node;
8675 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
8676 = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
8681 case TEMPLATE_PARM_INDEX:
8682 r = reduce_template_parm_level (t, type, levels);
8694 tree purpose, value, chain;
8696 if (t == void_list_node)
8699 purpose = TREE_PURPOSE (t);
8702 purpose = tsubst (purpose, args, complain, in_decl);
8703 if (purpose == error_mark_node)
8704 return error_mark_node;
8706 value = TREE_VALUE (t);
8709 value = tsubst (value, args, complain, in_decl);
8710 if (value == error_mark_node)
8711 return error_mark_node;
8713 chain = TREE_CHAIN (t);
8714 if (chain && chain != void_type_node)
8716 chain = tsubst (chain, args, complain, in_decl);
8717 if (chain == error_mark_node)
8718 return error_mark_node;
8720 if (purpose == TREE_PURPOSE (t)
8721 && value == TREE_VALUE (t)
8722 && chain == TREE_CHAIN (t))
8724 return hash_tree_cons (purpose, value, chain);
8728 /* We should never be tsubsting a binfo. */
8732 /* A vector of template arguments. */
8734 return tsubst_template_args (t, args, complain, in_decl);
8737 case REFERENCE_TYPE:
8739 enum tree_code code;
8741 if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
8744 code = TREE_CODE (t);
8749 Type deduction may fail for any of the following
8752 -- Attempting to create a pointer to reference type.
8753 -- Attempting to create a reference to a reference type or
8754 a reference to void.
8756 Core issue 106 says that creating a reference to a reference
8757 during instantiation is no longer a cause for failure. We
8758 only enforce this check in strict C++98 mode. */
8759 if ((TREE_CODE (type) == REFERENCE_TYPE
8760 && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
8761 || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
8763 static location_t last_loc;
8765 /* We keep track of the last time we issued this error
8766 message to avoid spewing a ton of messages during a
8767 single bad template instantiation. */
8768 if (complain & tf_error
8769 #ifdef USE_MAPPED_LOCATION
8770 && last_loc != input_location
8772 && (last_loc.line != input_line
8773 || last_loc.file != input_filename)
8777 if (TREE_CODE (type) == VOID_TYPE)
8778 error ("forming reference to void");
8780 error ("forming %s to reference type %qT",
8781 (code == POINTER_TYPE) ? "pointer" : "reference",
8783 last_loc = input_location;
8786 return error_mark_node;
8788 else if (code == POINTER_TYPE)
8790 r = build_pointer_type (type);
8791 if (TREE_CODE (type) == METHOD_TYPE)
8792 r = build_ptrmemfunc_type (r);
8794 else if (TREE_CODE (type) == REFERENCE_TYPE)
8795 /* In C++0x, during template argument substitution, when there is an
8796 attempt to create a reference to a reference type, reference
8797 collapsing is applied as described in [14.3.1/4 temp.arg.type]:
8799 "If a template-argument for a template-parameter T names a type
8800 that is a reference to a type A, an attempt to create the type
8801 'lvalue reference to cv T' creates the type 'lvalue reference to
8802 A,' while an attempt to create the type type rvalue reference to
8803 cv T' creates the type T"
8805 r = cp_build_reference_type
8807 TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
8809 r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
8810 r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
8812 if (r != error_mark_node)
8813 /* Will this ever be needed for TYPE_..._TO values? */
8820 r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
8821 if (r == error_mark_node || !IS_AGGR_TYPE (r))
8825 Type deduction may fail for any of the following
8828 -- Attempting to create "pointer to member of T" when T
8829 is not a class type. */
8830 if (complain & tf_error)
8831 error ("creating pointer to member of non-class type %qT", r);
8832 return error_mark_node;
8834 if (TREE_CODE (type) == REFERENCE_TYPE)
8836 if (complain & tf_error)
8837 error ("creating pointer to member reference type %qT", type);
8838 return error_mark_node;
8840 if (TREE_CODE (type) == VOID_TYPE)
8842 if (complain & tf_error)
8843 error ("creating pointer to member of type void");
8844 return error_mark_node;
8846 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
8847 if (TREE_CODE (type) == FUNCTION_TYPE)
8849 /* The type of the implicit object parameter gets its
8850 cv-qualifiers from the FUNCTION_TYPE. */
8852 tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
8853 cp_type_quals (type));
8855 method_type = build_method_type_directly (this_type,
8857 TYPE_ARG_TYPES (type));
8858 memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
8859 return cp_build_qualified_type_real (memptr, cp_type_quals (t),
8863 return cp_build_qualified_type_real (build_ptrmem_type (r, type),
8872 fntype = tsubst_function_type (t, args, complain, in_decl);
8873 if (fntype == error_mark_node)
8874 return error_mark_node;
8876 /* Substitute the exception specification. */
8877 specs = tsubst_exception_specification (t, args, complain,
8879 if (specs == error_mark_node)
8880 return error_mark_node;
8882 fntype = build_exception_variant (fntype, specs);
8887 tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
8888 if (domain == error_mark_node)
8889 return error_mark_node;
8891 /* As an optimization, we avoid regenerating the array type if
8892 it will obviously be the same as T. */
8893 if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
8896 /* These checks should match the ones in grokdeclarator.
8900 The deduction may fail for any of the following reasons:
8902 -- Attempting to create an array with an element type that
8903 is void, a function type, or a reference type, or [DR337]
8904 an abstract class type. */
8905 if (TREE_CODE (type) == VOID_TYPE
8906 || TREE_CODE (type) == FUNCTION_TYPE
8907 || TREE_CODE (type) == REFERENCE_TYPE)
8909 if (complain & tf_error)
8910 error ("creating array of %qT", type);
8911 return error_mark_node;
8913 if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
8915 if (complain & tf_error)
8916 error ("creating array of %qT, which is an abstract class type",
8918 return error_mark_node;
8921 r = build_cplus_array_type (type, domain);
8928 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
8929 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
8931 if (e1 == error_mark_node || e2 == error_mark_node)
8932 return error_mark_node;
8934 return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
8940 tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
8941 if (e == error_mark_node)
8942 return error_mark_node;
8944 return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
8949 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
8950 in_decl, /*entering_scope=*/1);
8951 tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
8954 if (ctx == error_mark_node || f == error_mark_node)
8955 return error_mark_node;
8957 if (!IS_AGGR_TYPE (ctx))
8959 if (complain & tf_error)
8960 error ("%qT is not a class, struct, or union type", ctx);
8961 return error_mark_node;
8963 else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
8965 /* Normally, make_typename_type does not require that the CTX
8966 have complete type in order to allow things like:
8968 template <class T> struct S { typename S<T>::X Y; };
8970 But, such constructs have already been resolved by this
8971 point, so here CTX really should have complete type, unless
8972 it's a partial instantiation. */
8973 ctx = complete_type (ctx);
8974 if (!COMPLETE_TYPE_P (ctx))
8976 if (complain & tf_error)
8977 cxx_incomplete_type_error (NULL_TREE, ctx);
8978 return error_mark_node;
8982 f = make_typename_type (ctx, f, typename_type,
8983 (complain & tf_error) | tf_keep_type_decl);
8984 if (f == error_mark_node)
8986 if (TREE_CODE (f) == TYPE_DECL)
8988 complain |= tf_ignore_bad_quals;
8992 if (TREE_CODE (f) != TYPENAME_TYPE)
8994 if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
8995 error ("%qT resolves to %qT, which is not an enumeration type",
8997 else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
8998 error ("%qT resolves to %qT, which is is not a class type",
9002 return cp_build_qualified_type_real
9003 (f, cp_type_quals (f) | cp_type_quals (t), complain);
9006 case UNBOUND_CLASS_TEMPLATE:
9008 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9009 in_decl, /*entering_scope=*/1);
9010 tree name = TYPE_IDENTIFIER (t);
9011 tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
9013 if (ctx == error_mark_node || name == error_mark_node)
9014 return error_mark_node;
9017 parm_list = tsubst_template_parms (parm_list, args, complain);
9018 return make_unbound_class_template (ctx, name, parm_list, complain);
9028 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9029 tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl,
9030 /*integral_constant_expression_p=*/false);
9031 if (e1 == error_mark_node || e2 == error_mark_node)
9032 return error_mark_node;
9034 return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
9039 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9040 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9041 if (e1 == error_mark_node || e2 == error_mark_node)
9042 return error_mark_node;
9044 return build_qualified_name (/*type=*/NULL_TREE,
9045 e1, e2, QUALIFIED_NAME_IS_TEMPLATE (t));
9052 type = finish_typeof (tsubst_expr
9053 (TYPEOF_TYPE_EXPR (t), args,
9055 /*integral_constant_expression_p=*/false));
9056 return cp_build_qualified_type_real (type,
9058 | cp_type_quals (type),
9067 finish_decltype_type (tsubst_expr
9068 (DECLTYPE_TYPE_EXPR (t), args,
9070 /*integral_constant_expression_p=*/false),
9071 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t));
9072 return cp_build_qualified_type_real (type,
9074 | cp_type_quals (type),
9078 case TYPE_ARGUMENT_PACK:
9079 case NONTYPE_ARGUMENT_PACK:
9081 tree r = make_node (TREE_CODE (t));
9083 tsubst_template_args (ARGUMENT_PACK_ARGS (t),
9087 SET_ARGUMENT_PACK_ARGS (r, packed_out);
9089 /* For template nontype argument packs, also substitute into
9091 if (TREE_CODE (t) == NONTYPE_ARGUMENT_PACK)
9092 TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
9099 sorry ("use of %qs in template",
9100 tree_code_name [(int) TREE_CODE (t)]);
9101 return error_mark_node;
9105 /* Like tsubst_expr for a BASELINK. OBJECT_TYPE, if non-NULL, is the
9106 type of the expression on the left-hand side of the "." or "->"
9110 tsubst_baselink (tree baselink, tree object_type,
9111 tree args, tsubst_flags_t complain, tree in_decl)
9114 tree qualifying_scope;
9117 tree template_args = 0;
9118 bool template_id_p = false;
9120 /* A baselink indicates a function from a base class. Both the
9121 BASELINK_ACCESS_BINFO and the base class referenced may
9122 indicate bases of the template class, rather than the
9123 instantiated class. In addition, lookups that were not
9124 ambiguous before may be ambiguous now. Therefore, we perform
9125 the lookup again. */
9126 qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
9127 qualifying_scope = tsubst (qualifying_scope, args,
9129 fns = BASELINK_FUNCTIONS (baselink);
9130 optype = BASELINK_OPTYPE (baselink);
9131 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
9133 template_id_p = true;
9134 template_args = TREE_OPERAND (fns, 1);
9135 fns = TREE_OPERAND (fns, 0);
9137 template_args = tsubst_template_args (template_args, args,
9140 name = DECL_NAME (get_first_fn (fns));
9141 baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
9143 /* If lookup found a single function, mark it as used at this
9144 point. (If it lookup found multiple functions the one selected
9145 later by overload resolution will be marked as used at that
9147 if (BASELINK_P (baselink))
9148 fns = BASELINK_FUNCTIONS (baselink);
9149 if (!template_id_p && !really_overloaded_fn (fns))
9150 mark_used (OVL_CURRENT (fns));
9152 /* Add back the template arguments, if present. */
9153 if (BASELINK_P (baselink) && template_id_p)
9154 BASELINK_FUNCTIONS (baselink)
9155 = build_nt (TEMPLATE_ID_EXPR,
9156 BASELINK_FUNCTIONS (baselink),
9158 /* Update the conversion operator type. */
9159 BASELINK_OPTYPE (baselink)
9160 = tsubst (optype, args, complain, in_decl);
9163 object_type = current_class_type;
9164 return adjust_result_of_qualified_name_lookup (baselink,
9169 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID. DONE is
9170 true if the qualified-id will be a postfix-expression in-and-of
9171 itself; false if more of the postfix-expression follows the
9172 QUALIFIED_ID. ADDRESS_P is true if the qualified-id is the operand
9176 tsubst_qualified_id (tree qualified_id, tree args,
9177 tsubst_flags_t complain, tree in_decl,
9178 bool done, bool address_p)
9186 gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
9188 /* Figure out what name to look up. */
9189 name = TREE_OPERAND (qualified_id, 1);
9190 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
9193 template_args = TREE_OPERAND (name, 1);
9195 template_args = tsubst_template_args (template_args, args,
9197 name = TREE_OPERAND (name, 0);
9201 is_template = false;
9202 template_args = NULL_TREE;
9205 /* Substitute into the qualifying scope. When there are no ARGS, we
9206 are just trying to simplify a non-dependent expression. In that
9207 case the qualifying scope may be dependent, and, in any case,
9208 substituting will not help. */
9209 scope = TREE_OPERAND (qualified_id, 0);
9212 scope = tsubst (scope, args, complain, in_decl);
9213 expr = tsubst_copy (name, args, complain, in_decl);
9218 if (dependent_type_p (scope))
9219 return build_qualified_name (/*type=*/NULL_TREE,
9221 QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
9223 if (!BASELINK_P (name) && !DECL_P (expr))
9225 if (TREE_CODE (expr) == BIT_NOT_EXPR)
9226 /* If this were actually a destructor call, it would have been
9227 parsed as such by the parser. */
9228 expr = error_mark_node;
9230 expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
9231 if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
9232 ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
9234 if (complain & tf_error)
9236 error ("dependent-name %qE is parsed as a non-type, but "
9237 "instantiation yields a type", qualified_id);
9238 inform ("say %<typename %E%> if a type is meant", qualified_id);
9240 return error_mark_node;
9246 check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
9248 /* Remember that there was a reference to this entity. */
9252 if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
9254 if (complain & tf_error)
9255 qualified_name_lookup_error (scope,
9256 TREE_OPERAND (qualified_id, 1),
9258 return error_mark_node;
9262 expr = lookup_template_function (expr, template_args);
9264 if (expr == error_mark_node && complain & tf_error)
9265 qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
9267 else if (TYPE_P (scope))
9269 expr = (adjust_result_of_qualified_name_lookup
9270 (expr, scope, current_class_type));
9271 expr = (finish_qualified_id_expr
9272 (scope, expr, done, address_p,
9273 QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
9274 /*template_arg_p=*/false));
9277 /* Expressions do not generally have reference type. */
9278 if (TREE_CODE (expr) != SCOPE_REF
9279 /* However, if we're about to form a pointer-to-member, we just
9280 want the referenced member referenced. */
9281 && TREE_CODE (expr) != OFFSET_REF)
9282 expr = convert_from_reference (expr);
9287 /* Like tsubst, but deals with expressions. This function just replaces
9288 template parms; to finish processing the resultant expression, use
9292 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9294 enum tree_code code;
9297 if (t == NULL_TREE || t == error_mark_node)
9300 code = TREE_CODE (t);
9305 r = retrieve_local_specialization (t);
9306 gcc_assert (r != NULL);
9307 if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
9308 r = ARGUMENT_PACK_SELECT_ARG (r);
9317 if (DECL_TEMPLATE_PARM_P (t))
9318 return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
9319 /* There is no need to substitute into namespace-scope
9321 if (DECL_NAMESPACE_SCOPE_P (t))
9323 /* If ARGS is NULL, then T is known to be non-dependent. */
9324 if (args == NULL_TREE)
9325 return integral_constant_value (t);
9327 /* Unfortunately, we cannot just call lookup_name here.
9330 template <int I> int f() {
9332 struct S { void g() { E e = a; } };
9335 When we instantiate f<7>::S::g(), say, lookup_name is not
9336 clever enough to find f<7>::a. */
9338 = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
9339 /*entering_scope=*/0);
9341 for (v = TYPE_VALUES (enum_type);
9344 if (TREE_PURPOSE (v) == DECL_NAME (t))
9345 return TREE_VALUE (v);
9347 /* We didn't find the name. That should never happen; if
9348 name-lookup found it during preliminary parsing, we
9349 should find it again here during instantiation. */
9355 if (DECL_CONTEXT (t))
9359 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
9360 /*entering_scope=*/1);
9361 if (ctx != DECL_CONTEXT (t))
9363 tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
9366 if (complain & tf_error)
9367 error ("using invalid field %qD", t);
9368 return error_mark_node;
9378 if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
9379 || local_variable_p (t))
9380 t = tsubst (t, args, complain, in_decl);
9385 return tsubst_baselink (t, current_class_type, args, complain, in_decl);
9388 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9389 return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
9390 args, complain, in_decl);
9391 else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
9392 return tsubst (t, args, complain, in_decl);
9393 else if (DECL_CLASS_SCOPE_P (t)
9394 && uses_template_parms (DECL_CONTEXT (t)))
9396 /* Template template argument like the following example need
9399 template <template <class> class TT> struct C {};
9400 template <class T> struct D {
9401 template <class U> struct E {};
9406 We are processing the template argument `E' in #1 for
9407 the template instantiation #2. Originally, `E' is a
9408 TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT. Now we
9409 have to substitute this with one having context `D<int>'. */
9411 tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
9412 return lookup_field (context, DECL_NAME(t), 0, false);
9415 /* Ordinary template template argument. */
9419 case REINTERPRET_CAST_EXPR:
9420 case CONST_CAST_EXPR:
9421 case STATIC_CAST_EXPR:
9422 case DYNAMIC_CAST_EXPR:
9425 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9426 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9429 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
9431 /* We only want to compute the number of arguments. */
9432 tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
9434 return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
9440 case TRUTH_NOT_EXPR:
9443 case UNARY_PLUS_EXPR: /* Unary + */
9451 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9452 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9459 object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
9460 name = TREE_OPERAND (t, 1);
9461 if (TREE_CODE (name) == BIT_NOT_EXPR)
9463 name = tsubst_copy (TREE_OPERAND (name, 0), args,
9465 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9467 else if (TREE_CODE (name) == SCOPE_REF
9468 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
9470 tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
9472 name = TREE_OPERAND (name, 1);
9473 name = tsubst_copy (TREE_OPERAND (name, 0), args,
9475 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9476 name = build_qualified_name (/*type=*/NULL_TREE,
9478 /*template_p=*/false);
9480 else if (TREE_CODE (name) == BASELINK)
9481 name = tsubst_baselink (name,
9482 non_reference (TREE_TYPE (object)),
9486 name = tsubst_copy (name, args, complain, in_decl);
9487 return build_nt (COMPONENT_REF, object, name, NULL_TREE);
9493 case TRUNC_DIV_EXPR:
9495 case FLOOR_DIV_EXPR:
9496 case ROUND_DIV_EXPR:
9497 case EXACT_DIV_EXPR:
9501 case TRUNC_MOD_EXPR:
9502 case FLOOR_MOD_EXPR:
9503 case TRUTH_ANDIF_EXPR:
9504 case TRUTH_ORIF_EXPR:
9505 case TRUTH_AND_EXPR:
9522 case PREDECREMENT_EXPR:
9523 case PREINCREMENT_EXPR:
9524 case POSTDECREMENT_EXPR:
9525 case POSTINCREMENT_EXPR:
9527 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9528 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
9531 return build_qualified_name (/*type=*/NULL_TREE,
9532 tsubst_copy (TREE_OPERAND (t, 0),
9533 args, complain, in_decl),
9534 tsubst_copy (TREE_OPERAND (t, 1),
9535 args, complain, in_decl),
9536 QUALIFIED_NAME_IS_TEMPLATE (t));
9541 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9542 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9543 NULL_TREE, NULL_TREE);
9547 int n = VL_EXP_OPERAND_LENGTH (t);
9548 tree result = build_vl_exp (CALL_EXPR, n);
9550 for (i = 0; i < n; i++)
9551 TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
9558 case PSEUDO_DTOR_EXPR:
9561 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9562 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9563 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
9564 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
9571 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9572 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9573 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
9574 NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
9581 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9582 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
9583 DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
9584 DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
9588 case TEMPLATE_ID_EXPR:
9590 /* Substituted template arguments */
9591 tree fn = TREE_OPERAND (t, 0);
9592 tree targs = TREE_OPERAND (t, 1);
9594 fn = tsubst_copy (fn, args, complain, in_decl);
9596 targs = tsubst_template_args (targs, args, complain, in_decl);
9598 return lookup_template_function (fn, targs);
9603 tree purpose, value, chain;
9605 if (t == void_list_node)
9608 purpose = TREE_PURPOSE (t);
9610 purpose = tsubst_copy (purpose, args, complain, in_decl);
9611 value = TREE_VALUE (t);
9613 value = tsubst_copy (value, args, complain, in_decl);
9614 chain = TREE_CHAIN (t);
9615 if (chain && chain != void_type_node)
9616 chain = tsubst_copy (chain, args, complain, in_decl);
9617 if (purpose == TREE_PURPOSE (t)
9618 && value == TREE_VALUE (t)
9619 && chain == TREE_CHAIN (t))
9621 return tree_cons (purpose, value, chain);
9628 case TEMPLATE_TYPE_PARM:
9629 case TEMPLATE_TEMPLATE_PARM:
9630 case BOUND_TEMPLATE_TEMPLATE_PARM:
9631 case TEMPLATE_PARM_INDEX:
9633 case REFERENCE_TYPE:
9639 case UNBOUND_CLASS_TEMPLATE:
9643 return tsubst (t, args, complain, in_decl);
9645 case IDENTIFIER_NODE:
9646 if (IDENTIFIER_TYPENAME_P (t))
9648 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9649 return mangle_conv_op_name_for_type (new_type);
9655 /* This is handled by tsubst_copy_and_build. */
9659 return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
9661 tsubst (TREE_TYPE (t), args, complain, in_decl));
9663 case CLEANUP_POINT_EXPR:
9664 /* We shouldn't have built any of these during initial template
9665 generation. Instead, they should be built during instantiation
9666 in response to the saved STMT_IS_FULL_EXPR_P setting. */
9670 mark_used (TREE_OPERAND (t, 1));
9673 case EXPR_PACK_EXPANSION:
9674 error ("invalid use of pack expansion expression");
9675 return error_mark_node;
9677 case NONTYPE_ARGUMENT_PACK:
9678 error ("use %<...%> to expand argument pack");
9679 return error_mark_node;
9686 /* Like tsubst_copy, but specifically for OpenMP clauses. */
9689 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
9692 tree new_clauses = NULL, nc, oc;
9694 for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
9696 nc = copy_node (oc);
9697 OMP_CLAUSE_CHAIN (nc) = new_clauses;
9700 switch (OMP_CLAUSE_CODE (nc))
9702 case OMP_CLAUSE_PRIVATE:
9703 case OMP_CLAUSE_SHARED:
9704 case OMP_CLAUSE_FIRSTPRIVATE:
9705 case OMP_CLAUSE_LASTPRIVATE:
9706 case OMP_CLAUSE_REDUCTION:
9707 case OMP_CLAUSE_COPYIN:
9708 case OMP_CLAUSE_COPYPRIVATE:
9710 case OMP_CLAUSE_NUM_THREADS:
9711 case OMP_CLAUSE_SCHEDULE:
9712 OMP_CLAUSE_OPERAND (nc, 0)
9713 = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
9714 in_decl, /*integral_constant_expression_p=*/false);
9716 case OMP_CLAUSE_NOWAIT:
9717 case OMP_CLAUSE_ORDERED:
9718 case OMP_CLAUSE_DEFAULT:
9725 return finish_omp_clauses (nreverse (new_clauses));
9728 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes. */
9731 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
9734 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
9736 tree purpose, value, chain;
9741 if (TREE_CODE (t) != TREE_LIST)
9742 return tsubst_copy_and_build (t, args, complain, in_decl,
9743 /*function_p=*/false,
9744 /*integral_constant_expression_p=*/false);
9746 if (t == void_list_node)
9749 purpose = TREE_PURPOSE (t);
9751 purpose = RECUR (purpose);
9752 value = TREE_VALUE (t);
9754 value = RECUR (value);
9755 chain = TREE_CHAIN (t);
9756 if (chain && chain != void_type_node)
9757 chain = RECUR (chain);
9758 return tree_cons (purpose, value, chain);
9762 /* Like tsubst_copy for expressions, etc. but also does semantic
9766 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
9767 bool integral_constant_expression_p)
9769 #define RECUR(NODE) \
9770 tsubst_expr ((NODE), args, complain, in_decl, \
9771 integral_constant_expression_p)
9775 if (t == NULL_TREE || t == error_mark_node)
9778 if (EXPR_HAS_LOCATION (t))
9779 input_location = EXPR_LOCATION (t);
9780 if (STATEMENT_CODE_P (TREE_CODE (t)))
9781 current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
9783 switch (TREE_CODE (t))
9785 case STATEMENT_LIST:
9787 tree_stmt_iterator i;
9788 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
9789 RECUR (tsi_stmt (i));
9793 case CTOR_INITIALIZER:
9794 finish_mem_initializers (tsubst_initializer_list
9795 (TREE_OPERAND (t, 0), args));
9799 finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
9803 tmp = RECUR (EXPR_STMT_EXPR (t));
9804 if (EXPR_STMT_STMT_EXPR_RESULT (t))
9805 finish_stmt_expr_expr (tmp, cur_stmt_expr);
9807 finish_expr_stmt (tmp);
9811 do_using_directive (RECUR (USING_STMT_NAMESPACE (t)));
9819 decl = DECL_EXPR_DECL (t);
9820 if (TREE_CODE (decl) == LABEL_DECL)
9821 finish_label_decl (DECL_NAME (decl));
9822 else if (TREE_CODE (decl) == USING_DECL)
9824 tree scope = USING_DECL_SCOPE (decl);
9825 tree name = DECL_NAME (decl);
9828 scope = RECUR (scope);
9829 decl = lookup_qualified_name (scope, name,
9830 /*is_type_p=*/false,
9831 /*complain=*/false);
9832 if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
9833 qualified_name_lookup_error (scope, name, decl);
9835 do_local_using_decl (decl, scope, name);
9839 init = DECL_INITIAL (decl);
9840 decl = tsubst (decl, args, complain, in_decl);
9841 if (decl != error_mark_node)
9843 /* By marking the declaration as instantiated, we avoid
9844 trying to instantiate it. Since instantiate_decl can't
9845 handle local variables, and since we've already done
9846 all that needs to be done, that's the right thing to
9848 if (TREE_CODE (decl) == VAR_DECL)
9849 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
9850 if (TREE_CODE (decl) == VAR_DECL
9851 && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
9852 /* Anonymous aggregates are a special case. */
9853 finish_anon_union (decl);
9856 maybe_push_decl (decl);
9857 if (TREE_CODE (decl) == VAR_DECL
9858 && DECL_PRETTY_FUNCTION_P (decl))
9860 /* For __PRETTY_FUNCTION__ we have to adjust the
9862 const char *const name
9863 = cxx_printable_name (current_function_decl, 2);
9864 init = cp_fname_init (name, &TREE_TYPE (decl));
9867 init = RECUR (init);
9868 finish_decl (decl, init, NULL_TREE);
9873 /* A DECL_EXPR can also be used as an expression, in the condition
9874 clause of an if/for/while construct. */
9879 stmt = begin_for_stmt ();
9880 RECUR (FOR_INIT_STMT (t));
9881 finish_for_init_stmt (stmt);
9882 tmp = RECUR (FOR_COND (t));
9883 finish_for_cond (tmp, stmt);
9884 tmp = RECUR (FOR_EXPR (t));
9885 finish_for_expr (tmp, stmt);
9886 RECUR (FOR_BODY (t));
9887 finish_for_stmt (stmt);
9891 stmt = begin_while_stmt ();
9892 tmp = RECUR (WHILE_COND (t));
9893 finish_while_stmt_cond (tmp, stmt);
9894 RECUR (WHILE_BODY (t));
9895 finish_while_stmt (stmt);
9899 stmt = begin_do_stmt ();
9900 RECUR (DO_BODY (t));
9901 finish_do_body (stmt);
9902 tmp = RECUR (DO_COND (t));
9903 finish_do_stmt (tmp, stmt);
9907 stmt = begin_if_stmt ();
9908 tmp = RECUR (IF_COND (t));
9909 finish_if_stmt_cond (tmp, stmt);
9910 RECUR (THEN_CLAUSE (t));
9911 finish_then_clause (stmt);
9913 if (ELSE_CLAUSE (t))
9915 begin_else_clause (stmt);
9916 RECUR (ELSE_CLAUSE (t));
9917 finish_else_clause (stmt);
9920 finish_if_stmt (stmt);
9924 if (BIND_EXPR_BODY_BLOCK (t))
9925 stmt = begin_function_body ();
9927 stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
9928 ? BCS_TRY_BLOCK : 0);
9930 RECUR (BIND_EXPR_BODY (t));
9932 if (BIND_EXPR_BODY_BLOCK (t))
9933 finish_function_body (stmt);
9935 finish_compound_stmt (stmt);
9939 finish_break_stmt ();
9943 finish_continue_stmt ();
9947 stmt = begin_switch_stmt ();
9948 tmp = RECUR (SWITCH_STMT_COND (t));
9949 finish_switch_cond (tmp, stmt);
9950 RECUR (SWITCH_STMT_BODY (t));
9951 finish_switch_stmt (stmt);
9954 case CASE_LABEL_EXPR:
9955 finish_case_label (RECUR (CASE_LOW (t)),
9956 RECUR (CASE_HIGH (t)));
9960 finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
9964 tmp = GOTO_DESTINATION (t);
9965 if (TREE_CODE (tmp) != LABEL_DECL)
9966 /* Computed goto's must be tsubst'd into. On the other hand,
9967 non-computed gotos must not be; the identifier in question
9968 will have no binding. */
9971 tmp = DECL_NAME (tmp);
9972 finish_goto_stmt (tmp);
9976 tmp = finish_asm_stmt
9977 (ASM_VOLATILE_P (t),
9978 RECUR (ASM_STRING (t)),
9979 tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
9980 tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
9981 tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl));
9983 tree asm_expr = tmp;
9984 if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
9985 asm_expr = TREE_OPERAND (asm_expr, 0);
9986 ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
9993 stmt = begin_try_block ();
9994 RECUR (TRY_STMTS (t));
9995 finish_cleanup_try_block (stmt);
9996 finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
10000 tree compound_stmt = NULL_TREE;
10002 if (FN_TRY_BLOCK_P (t))
10003 stmt = begin_function_try_block (&compound_stmt);
10005 stmt = begin_try_block ();
10007 RECUR (TRY_STMTS (t));
10009 if (FN_TRY_BLOCK_P (t))
10010 finish_function_try_block (stmt);
10012 finish_try_block (stmt);
10014 RECUR (TRY_HANDLERS (t));
10015 if (FN_TRY_BLOCK_P (t))
10016 finish_function_handler_sequence (stmt, compound_stmt);
10018 finish_handler_sequence (stmt);
10024 tree decl = HANDLER_PARMS (t);
10028 decl = tsubst (decl, args, complain, in_decl);
10029 /* Prevent instantiate_decl from trying to instantiate
10030 this variable. We've already done all that needs to be
10032 if (decl != error_mark_node)
10033 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10035 stmt = begin_handler ();
10036 finish_handler_parms (decl, stmt);
10037 RECUR (HANDLER_BODY (t));
10038 finish_handler (stmt);
10043 tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
10046 case STATIC_ASSERT:
10049 tsubst_expr (STATIC_ASSERT_CONDITION (t),
10052 /*integral_constant_expression_p=*/true);
10053 finish_static_assert (condition,
10054 STATIC_ASSERT_MESSAGE (t),
10055 STATIC_ASSERT_SOURCE_LOCATION (t),
10056 /*member_p=*/false);
10061 tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
10062 args, complain, in_decl);
10063 stmt = begin_omp_parallel ();
10064 RECUR (OMP_PARALLEL_BODY (t));
10065 OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
10066 = OMP_PARALLEL_COMBINED (t);
10071 tree clauses, decl, init, cond, incr, body, pre_body;
10073 clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
10074 args, complain, in_decl);
10075 init = OMP_FOR_INIT (t);
10076 gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
10077 decl = RECUR (TREE_OPERAND (init, 0));
10078 init = RECUR (TREE_OPERAND (init, 1));
10079 cond = RECUR (OMP_FOR_COND (t));
10080 incr = RECUR (OMP_FOR_INCR (t));
10082 stmt = begin_omp_structured_block ();
10084 pre_body = push_stmt_list ();
10085 RECUR (OMP_FOR_PRE_BODY (t));
10086 pre_body = pop_stmt_list (pre_body);
10088 body = push_stmt_list ();
10089 RECUR (OMP_FOR_BODY (t));
10090 body = pop_stmt_list (body);
10092 t = finish_omp_for (EXPR_LOCATION (t), decl, init, cond, incr, body,
10095 OMP_FOR_CLAUSES (t) = clauses;
10097 add_stmt (finish_omp_structured_block (stmt));
10103 tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
10104 stmt = push_stmt_list ();
10105 RECUR (OMP_BODY (t));
10106 stmt = pop_stmt_list (stmt);
10109 OMP_BODY (t) = stmt;
10110 OMP_CLAUSES (t) = tmp;
10118 stmt = push_stmt_list ();
10119 RECUR (OMP_BODY (t));
10120 stmt = pop_stmt_list (stmt);
10123 OMP_BODY (t) = stmt;
10128 if (OMP_ATOMIC_DEPENDENT_P (t))
10130 tree op1 = TREE_OPERAND (t, 1);
10131 tree lhs = RECUR (TREE_OPERAND (op1, 0));
10132 tree rhs = RECUR (TREE_OPERAND (op1, 1));
10133 finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
10137 case EXPR_PACK_EXPANSION:
10138 error ("invalid use of pack expansion expression");
10139 return error_mark_node;
10141 case NONTYPE_ARGUMENT_PACK:
10142 error ("use %<...%> to expand argument pack");
10143 return error_mark_node;
10146 gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
10148 return tsubst_copy_and_build (t, args, complain, in_decl,
10149 /*function_p=*/false,
10150 integral_constant_expression_p);
10157 /* T is a postfix-expression that is not being used in a function
10158 call. Return the substituted version of T. */
10161 tsubst_non_call_postfix_expression (tree t, tree args,
10162 tsubst_flags_t complain,
10165 if (TREE_CODE (t) == SCOPE_REF)
10166 t = tsubst_qualified_id (t, args, complain, in_decl,
10167 /*done=*/false, /*address_p=*/false);
10169 t = tsubst_copy_and_build (t, args, complain, in_decl,
10170 /*function_p=*/false,
10171 /*integral_constant_expression_p=*/false);
10176 /* Like tsubst but deals with expressions and performs semantic
10177 analysis. FUNCTION_P is true if T is the "F" in "F (ARGS)". */
10180 tsubst_copy_and_build (tree t,
10182 tsubst_flags_t complain,
10185 bool integral_constant_expression_p)
10187 #define RECUR(NODE) \
10188 tsubst_copy_and_build (NODE, args, complain, in_decl, \
10189 /*function_p=*/false, \
10190 integral_constant_expression_p)
10194 if (t == NULL_TREE || t == error_mark_node)
10197 switch (TREE_CODE (t))
10201 /* Fall through. */
10202 case IDENTIFIER_NODE:
10206 bool non_integral_constant_expression_p;
10207 const char *error_msg;
10209 if (IDENTIFIER_TYPENAME_P (t))
10211 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10212 t = mangle_conv_op_name_for_type (new_type);
10215 /* Look up the name. */
10216 decl = lookup_name (t);
10218 /* By convention, expressions use ERROR_MARK_NODE to indicate
10219 failure, not NULL_TREE. */
10220 if (decl == NULL_TREE)
10221 decl = error_mark_node;
10223 decl = finish_id_expression (t, decl, NULL_TREE,
10225 integral_constant_expression_p,
10226 /*allow_non_integral_constant_expression_p=*/false,
10227 &non_integral_constant_expression_p,
10228 /*template_p=*/false,
10230 /*address_p=*/false,
10231 /*template_arg_p=*/false,
10235 if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
10236 decl = unqualified_name_lookup_error (decl);
10240 case TEMPLATE_ID_EXPR:
10243 tree template = RECUR (TREE_OPERAND (t, 0));
10244 tree targs = TREE_OPERAND (t, 1);
10247 targs = tsubst_template_args (targs, args, complain, in_decl);
10249 if (TREE_CODE (template) == COMPONENT_REF)
10251 object = TREE_OPERAND (template, 0);
10252 template = TREE_OPERAND (template, 1);
10255 object = NULL_TREE;
10256 template = lookup_template_function (template, targs);
10259 return build3 (COMPONENT_REF, TREE_TYPE (template),
10260 object, template, NULL_TREE);
10262 return baselink_for_fns (template);
10267 tree r = RECUR (TREE_OPERAND (t, 0));
10269 if (REFERENCE_REF_P (t))
10271 /* A type conversion to reference type will be enclosed in
10272 such an indirect ref, but the substitution of the cast
10273 will have also added such an indirect ref. */
10274 if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
10275 r = convert_from_reference (r);
10278 r = build_x_indirect_ref (r, "unary *");
10284 (tsubst (TREE_TYPE (t), args, complain, in_decl),
10285 RECUR (TREE_OPERAND (t, 0)));
10288 case REINTERPRET_CAST_EXPR:
10289 case CONST_CAST_EXPR:
10290 case DYNAMIC_CAST_EXPR:
10291 case STATIC_CAST_EXPR:
10296 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10297 if (integral_constant_expression_p
10298 && !cast_valid_in_integral_constant_expression_p (type))
10300 error ("a cast to a type other than an integral or "
10301 "enumeration type cannot appear in a constant-expression");
10302 return error_mark_node;
10305 op = RECUR (TREE_OPERAND (t, 0));
10307 switch (TREE_CODE (t))
10310 return build_functional_cast (type, op);
10311 case REINTERPRET_CAST_EXPR:
10312 return build_reinterpret_cast (type, op);
10313 case CONST_CAST_EXPR:
10314 return build_const_cast (type, op);
10315 case DYNAMIC_CAST_EXPR:
10316 return build_dynamic_cast (type, op);
10317 case STATIC_CAST_EXPR:
10318 return build_static_cast (type, op);
10320 gcc_unreachable ();
10324 case POSTDECREMENT_EXPR:
10325 case POSTINCREMENT_EXPR:
10326 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10327 args, complain, in_decl);
10328 return build_x_unary_op (TREE_CODE (t), op1);
10330 case PREDECREMENT_EXPR:
10331 case PREINCREMENT_EXPR:
10335 case TRUTH_NOT_EXPR:
10336 case UNARY_PLUS_EXPR: /* Unary + */
10337 case REALPART_EXPR:
10338 case IMAGPART_EXPR:
10339 return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
10342 op1 = TREE_OPERAND (t, 0);
10343 if (TREE_CODE (op1) == SCOPE_REF)
10344 op1 = tsubst_qualified_id (op1, args, complain, in_decl,
10345 /*done=*/true, /*address_p=*/true);
10347 op1 = tsubst_non_call_postfix_expression (op1, args, complain,
10349 if (TREE_CODE (op1) == LABEL_DECL)
10350 return finish_label_address_expr (DECL_NAME (op1));
10351 return build_x_unary_op (ADDR_EXPR, op1);
10356 case TRUNC_DIV_EXPR:
10357 case CEIL_DIV_EXPR:
10358 case FLOOR_DIV_EXPR:
10359 case ROUND_DIV_EXPR:
10360 case EXACT_DIV_EXPR:
10364 case TRUNC_MOD_EXPR:
10365 case FLOOR_MOD_EXPR:
10366 case TRUTH_ANDIF_EXPR:
10367 case TRUTH_ORIF_EXPR:
10368 case TRUTH_AND_EXPR:
10369 case TRUTH_OR_EXPR:
10384 return build_x_binary_op
10386 RECUR (TREE_OPERAND (t, 0)),
10387 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
10389 : TREE_CODE (TREE_OPERAND (t, 0))),
10390 RECUR (TREE_OPERAND (t, 1)),
10391 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
10393 : TREE_CODE (TREE_OPERAND (t, 1))),
10394 /*overloaded_p=*/NULL);
10397 return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
10398 /*address_p=*/false);
10400 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10401 args, complain, in_decl);
10402 return build_x_binary_op (ARRAY_REF, op1,
10403 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
10405 : TREE_CODE (TREE_OPERAND (t, 0))),
10406 RECUR (TREE_OPERAND (t, 1)),
10407 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
10409 : TREE_CODE (TREE_OPERAND (t, 1))),
10410 /*overloaded_p=*/NULL);
10413 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
10415 /* We only want to compute the number of arguments. */
10416 tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
10417 complain, in_decl);
10418 return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
10423 op1 = TREE_OPERAND (t, 0);
10426 /* When there are no ARGS, we are trying to evaluate a
10427 non-dependent expression from the parser. Trying to do
10428 the substitutions may not work. */
10430 op1 = TREE_TYPE (op1);
10435 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
10436 /*function_p=*/false,
10437 /*integral_constant_expression_p=*/false);
10441 return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), true);
10443 return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t));
10447 tree r = build_x_modify_expr
10448 (RECUR (TREE_OPERAND (t, 0)),
10449 TREE_CODE (TREE_OPERAND (t, 1)),
10450 RECUR (TREE_OPERAND (t, 2)));
10451 /* TREE_NO_WARNING must be set if either the expression was
10452 parenthesized or it uses an operator such as >>= rather
10453 than plain assignment. In the former case, it was already
10454 set and must be copied. In the latter case,
10455 build_x_modify_expr sets it and it must not be reset
10457 if (TREE_NO_WARNING (t))
10458 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
10463 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10464 args, complain, in_decl);
10465 /* Remember that there was a reference to this entity. */
10468 return build_x_arrow (op1);
10472 (RECUR (TREE_OPERAND (t, 0)),
10473 RECUR (TREE_OPERAND (t, 1)),
10474 RECUR (TREE_OPERAND (t, 2)),
10475 RECUR (TREE_OPERAND (t, 3)),
10476 NEW_EXPR_USE_GLOBAL (t));
10479 return delete_sanity
10480 (RECUR (TREE_OPERAND (t, 0)),
10481 RECUR (TREE_OPERAND (t, 1)),
10482 DELETE_EXPR_USE_VEC (t),
10483 DELETE_EXPR_USE_GLOBAL (t));
10485 case COMPOUND_EXPR:
10486 return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
10487 RECUR (TREE_OPERAND (t, 1)));
10496 function = CALL_EXPR_FN (t);
10497 /* When we parsed the expression, we determined whether or
10498 not Koenig lookup should be performed. */
10499 koenig_p = KOENIG_LOOKUP_P (t);
10500 if (TREE_CODE (function) == SCOPE_REF)
10502 qualified_p = true;
10503 function = tsubst_qualified_id (function, args, complain, in_decl,
10505 /*address_p=*/false);
10509 if (TREE_CODE (function) == COMPONENT_REF)
10511 tree op = TREE_OPERAND (function, 1);
10513 qualified_p = (TREE_CODE (op) == SCOPE_REF
10514 || (BASELINK_P (op)
10515 && BASELINK_QUALIFIED_P (op)));
10518 qualified_p = false;
10520 function = tsubst_copy_and_build (function, args, complain,
10523 integral_constant_expression_p);
10525 if (BASELINK_P (function))
10526 qualified_p = true;
10529 /* FIXME: Rewrite this so as not to construct an arglist. */
10530 call_args = RECUR (CALL_EXPR_ARGS (t));
10532 /* We do not perform argument-dependent lookup if normal
10533 lookup finds a non-function, in accordance with the
10534 expected resolution of DR 218. */
10536 && ((is_overloaded_fn (function)
10537 /* If lookup found a member function, the Koenig lookup is
10538 not appropriate, even if an unqualified-name was used
10539 to denote the function. */
10540 && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
10541 || TREE_CODE (function) == IDENTIFIER_NODE))
10542 function = perform_koenig_lookup (function, call_args);
10544 if (TREE_CODE (function) == IDENTIFIER_NODE)
10546 unqualified_name_lookup_error (function);
10547 return error_mark_node;
10550 /* Remember that there was a reference to this entity. */
10551 if (DECL_P (function))
10552 mark_used (function);
10554 if (TREE_CODE (function) == OFFSET_REF)
10555 return build_offset_ref_call_from_tree (function, call_args);
10556 if (TREE_CODE (function) == COMPONENT_REF)
10558 if (!BASELINK_P (TREE_OPERAND (function, 1)))
10559 return finish_call_expr (function, call_args,
10560 /*disallow_virtual=*/false,
10561 /*koenig_p=*/false);
10563 return (build_new_method_call
10564 (TREE_OPERAND (function, 0),
10565 TREE_OPERAND (function, 1),
10566 call_args, NULL_TREE,
10567 qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
10570 return finish_call_expr (function, call_args,
10571 /*disallow_virtual=*/qualified_p,
10576 return build_x_conditional_expr
10577 (RECUR (TREE_OPERAND (t, 0)),
10578 RECUR (TREE_OPERAND (t, 1)),
10579 RECUR (TREE_OPERAND (t, 2)));
10581 case PSEUDO_DTOR_EXPR:
10582 return finish_pseudo_destructor_expr
10583 (RECUR (TREE_OPERAND (t, 0)),
10584 RECUR (TREE_OPERAND (t, 1)),
10585 RECUR (TREE_OPERAND (t, 2)));
10589 tree purpose, value, chain;
10591 if (t == void_list_node)
10594 if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
10595 || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
10597 /* We have pack expansions, so expand those and
10598 create a new list out of it. */
10599 tree purposevec = NULL_TREE;
10600 tree valuevec = NULL_TREE;
10604 /* Expand the argument expressions. */
10605 if (TREE_PURPOSE (t))
10606 purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
10607 complain, in_decl);
10608 if (TREE_VALUE (t))
10609 valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
10610 complain, in_decl);
10612 /* Build the rest of the list. */
10613 chain = TREE_CHAIN (t);
10614 if (chain && chain != void_type_node)
10615 chain = RECUR (chain);
10617 /* Determine the number of arguments. */
10618 if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
10620 len = TREE_VEC_LENGTH (purposevec);
10621 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
10623 else if (TREE_CODE (valuevec) == TREE_VEC)
10624 len = TREE_VEC_LENGTH (valuevec);
10627 /* Since we only performed a partial substitution into
10628 the argument pack, we only return a single list
10630 if (purposevec == TREE_PURPOSE (t)
10631 && valuevec == TREE_VALUE (t)
10632 && chain == TREE_CHAIN (t))
10635 return tree_cons (purposevec, valuevec, chain);
10638 /* Convert the argument vectors into a TREE_LIST */
10642 /* Grab the Ith values. */
10644 purpose = purposevec ? TREE_VEC_ELT (purposevec, i)
10647 = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i))
10650 /* Build the list (backwards). */
10651 chain = tree_cons (purpose, value, chain);
10657 purpose = TREE_PURPOSE (t);
10659 purpose = RECUR (purpose);
10660 value = TREE_VALUE (t);
10662 value = RECUR (value);
10663 chain = TREE_CHAIN (t);
10664 if (chain && chain != void_type_node)
10665 chain = RECUR (chain);
10666 if (purpose == TREE_PURPOSE (t)
10667 && value == TREE_VALUE (t)
10668 && chain == TREE_CHAIN (t))
10670 return tree_cons (purpose, value, chain);
10673 case COMPONENT_REF:
10679 object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10680 args, complain, in_decl);
10681 /* Remember that there was a reference to this entity. */
10682 if (DECL_P (object))
10683 mark_used (object);
10684 object_type = TREE_TYPE (object);
10686 member = TREE_OPERAND (t, 1);
10687 if (BASELINK_P (member))
10688 member = tsubst_baselink (member,
10689 non_reference (TREE_TYPE (object)),
10690 args, complain, in_decl);
10692 member = tsubst_copy (member, args, complain, in_decl);
10693 if (member == error_mark_node)
10694 return error_mark_node;
10696 if (object_type && !CLASS_TYPE_P (object_type))
10698 if (TREE_CODE (member) == BIT_NOT_EXPR)
10699 return finish_pseudo_destructor_expr (object,
10702 else if (TREE_CODE (member) == SCOPE_REF
10703 && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
10704 return finish_pseudo_destructor_expr (object,
10708 else if (TREE_CODE (member) == SCOPE_REF
10709 && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
10714 /* Lookup the template functions now that we know what the
10716 tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
10717 args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
10718 member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
10719 /*is_type_p=*/false,
10720 /*complain=*/false);
10721 if (BASELINK_P (member))
10723 BASELINK_FUNCTIONS (member)
10724 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
10726 member = (adjust_result_of_qualified_name_lookup
10727 (member, BINFO_TYPE (BASELINK_BINFO (member)),
10732 qualified_name_lookup_error (object_type, tmpl, member);
10733 return error_mark_node;
10736 else if (TREE_CODE (member) == SCOPE_REF
10737 && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
10738 && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
10740 if (complain & tf_error)
10742 if (TYPE_P (TREE_OPERAND (member, 0)))
10743 error ("%qT is not a class or namespace",
10744 TREE_OPERAND (member, 0));
10746 error ("%qD is not a class or namespace",
10747 TREE_OPERAND (member, 0));
10749 return error_mark_node;
10751 else if (TREE_CODE (member) == FIELD_DECL)
10752 return finish_non_static_data_member (member, object, NULL_TREE);
10754 return finish_class_member_access_expr (object, member,
10755 /*template_p=*/false);
10760 (RECUR (TREE_OPERAND (t, 0)));
10764 VEC(constructor_elt,gc) *n;
10765 constructor_elt *ce;
10766 unsigned HOST_WIDE_INT idx;
10767 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10768 bool process_index_p;
10770 bool need_copy_p = false;
10772 if (type == error_mark_node)
10773 return error_mark_node;
10775 /* digest_init will do the wrong thing if we let it. */
10776 if (type && TYPE_PTRMEMFUNC_P (type))
10779 /* We do not want to process the index of aggregate
10780 initializers as they are identifier nodes which will be
10781 looked up by digest_init. */
10782 process_index_p = !(type && IS_AGGR_TYPE (type));
10784 n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
10785 newlen = VEC_length (constructor_elt, n);
10786 for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
10788 if (ce->index && process_index_p)
10789 ce->index = RECUR (ce->index);
10791 if (PACK_EXPANSION_P (ce->value))
10793 /* Substitute into the pack expansion. */
10794 ce->value = tsubst_pack_expansion (ce->value, args, complain,
10797 if (TREE_VEC_LENGTH (ce->value) == 1)
10798 /* Just move the argument into place. */
10799 ce->value = TREE_VEC_ELT (ce->value, 0);
10802 /* Update the length of the final CONSTRUCTOR
10803 arguments vector, and note that we will need to
10805 newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
10806 need_copy_p = true;
10810 ce->value = RECUR (ce->value);
10815 VEC(constructor_elt,gc) *old_n = n;
10817 n = VEC_alloc (constructor_elt, gc, newlen);
10818 for (idx = 0; VEC_iterate (constructor_elt, old_n, idx, ce);
10821 if (TREE_CODE (ce->value) == TREE_VEC)
10823 int i, len = TREE_VEC_LENGTH (ce->value);
10824 for (i = 0; i < len; ++i)
10825 CONSTRUCTOR_APPEND_ELT (n, 0,
10826 TREE_VEC_ELT (ce->value, i));
10829 CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
10833 if (TREE_HAS_CONSTRUCTOR (t))
10834 return finish_compound_literal (type, n);
10836 return build_constructor (NULL_TREE, n);
10841 tree operand_0 = RECUR (TREE_OPERAND (t, 0));
10842 if (TYPE_P (operand_0))
10843 return get_typeid (operand_0);
10844 return build_typeid (operand_0);
10854 tree r = tsubst_copy (t, args, complain, in_decl);
10856 if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
10857 /* If the original type was a reference, we'll be wrapped in
10858 the appropriate INDIRECT_REF. */
10859 r = convert_from_reference (r);
10864 return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
10865 tsubst_copy (TREE_TYPE (t), args, complain,
10868 case OFFSETOF_EXPR:
10869 return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
10873 tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
10874 complain, in_decl);
10876 tree type2 = TRAIT_EXPR_TYPE2 (t);
10878 type2 = tsubst_copy (type2, args, complain, in_decl);
10880 return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
10885 tree old_stmt_expr = cur_stmt_expr;
10886 tree stmt_expr = begin_stmt_expr ();
10888 cur_stmt_expr = stmt_expr;
10889 tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
10890 integral_constant_expression_p);
10891 stmt_expr = finish_stmt_expr (stmt_expr, false);
10892 cur_stmt_expr = old_stmt_expr;
10898 t = tsubst_copy (t, args, complain, in_decl);
10899 /* As in finish_id_expression, we resolve enumeration constants
10900 to their underlying values. */
10901 if (TREE_CODE (t) == CONST_DECL)
10903 used_types_insert (TREE_TYPE (t));
10904 return DECL_INITIAL (t);
10909 /* Handle Objective-C++ constructs, if appropriate. */
10912 = objcp_tsubst_copy_and_build (t, args, complain,
10913 in_decl, /*function_p=*/false);
10917 return tsubst_copy (t, args, complain, in_decl);
10923 /* Verify that the instantiated ARGS are valid. For type arguments,
10924 make sure that the type's linkage is ok. For non-type arguments,
10925 make sure they are constants if they are integral or enumerations.
10926 Emit an error under control of COMPLAIN, and return TRUE on error. */
10929 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
10931 int ix, len = DECL_NTPARMS (tmpl);
10932 bool result = false;
10934 for (ix = 0; ix != len; ix++)
10936 tree t = TREE_VEC_ELT (args, ix);
10940 /* [basic.link]: A name with no linkage (notably, the name
10941 of a class or enumeration declared in a local scope)
10942 shall not be used to declare an entity with linkage.
10943 This implies that names with no linkage cannot be used as
10944 template arguments. */
10945 tree nt = no_linkage_check (t, /*relaxed_p=*/false);
10949 /* DR 488 makes use of a type with no linkage cause
10950 type deduction to fail. */
10951 if (complain & tf_error)
10953 if (TYPE_ANONYMOUS_P (nt))
10954 error ("%qT is/uses anonymous type", t);
10956 error ("template argument for %qD uses local type %qT",
10961 /* In order to avoid all sorts of complications, we do not
10962 allow variably-modified types as template arguments. */
10963 else if (variably_modified_type_p (t, NULL_TREE))
10965 if (complain & tf_error)
10966 error ("%qT is a variably modified type", t);
10970 /* A non-type argument of integral or enumerated type must be a
10972 else if (TREE_TYPE (t)
10973 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
10974 && !TREE_CONSTANT (t))
10976 if (complain & tf_error)
10977 error ("integral expression %qE is not constant", t);
10981 if (result && (complain & tf_error))
10982 error (" trying to instantiate %qD", tmpl);
10986 /* Instantiate the indicated variable or function template TMPL with
10987 the template arguments in TARG_PTR. */
10990 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
10995 HOST_WIDE_INT saved_processing_template_decl;
10997 if (tmpl == error_mark_node)
10998 return error_mark_node;
11000 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
11002 /* If this function is a clone, handle it specially. */
11003 if (DECL_CLONED_FUNCTION_P (tmpl))
11008 spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
11010 if (spec == error_mark_node)
11011 return error_mark_node;
11013 /* Look for the clone. */
11014 FOR_EACH_CLONE (clone, spec)
11015 if (DECL_NAME (clone) == DECL_NAME (tmpl))
11017 /* We should always have found the clone by now. */
11018 gcc_unreachable ();
11022 /* Check to see if we already have this specialization. */
11023 spec = retrieve_specialization (tmpl, targ_ptr,
11024 /*class_specializations_p=*/false);
11025 if (spec != NULL_TREE)
11028 gen_tmpl = most_general_template (tmpl);
11029 if (tmpl != gen_tmpl)
11031 /* The TMPL is a partial instantiation. To get a full set of
11032 arguments we must add the arguments used to perform the
11033 partial instantiation. */
11034 targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
11037 /* Check to see if we already have this specialization. */
11038 spec = retrieve_specialization (gen_tmpl, targ_ptr,
11039 /*class_specializations_p=*/false);
11040 if (spec != NULL_TREE)
11044 if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
11046 return error_mark_node;
11048 /* We are building a FUNCTION_DECL, during which the access of its
11049 parameters and return types have to be checked. However this
11050 FUNCTION_DECL which is the desired context for access checking
11051 is not built yet. We solve this chicken-and-egg problem by
11052 deferring all checks until we have the FUNCTION_DECL. */
11053 push_deferring_access_checks (dk_deferred);
11055 /* Although PROCESSING_TEMPLATE_DECL may be true at this point
11056 (because, for example, we have encountered a non-dependent
11057 function call in the body of a template function and must now
11058 determine which of several overloaded functions will be called),
11059 within the instantiation itself we are not processing a
11061 saved_processing_template_decl = processing_template_decl;
11062 processing_template_decl = 0;
11063 /* Substitute template parameters to obtain the specialization. */
11064 fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
11065 targ_ptr, complain, gen_tmpl);
11066 processing_template_decl = saved_processing_template_decl;
11067 if (fndecl == error_mark_node)
11068 return error_mark_node;
11070 /* Now we know the specialization, compute access previously
11072 push_access_scope (fndecl);
11073 perform_deferred_access_checks ();
11074 pop_access_scope (fndecl);
11075 pop_deferring_access_checks ();
11077 /* The DECL_TI_TEMPLATE should always be the immediate parent
11078 template, not the most general template. */
11079 DECL_TI_TEMPLATE (fndecl) = tmpl;
11081 /* If we've just instantiated the main entry point for a function,
11082 instantiate all the alternate entry points as well. We do this
11083 by cloning the instantiation of the main entry point, not by
11084 instantiating the template clones. */
11085 if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
11086 clone_function_decl (fndecl, /*update_method_vec_p=*/0);
11091 /* The FN is a TEMPLATE_DECL for a function. The ARGS are the
11092 arguments that are being used when calling it. TARGS is a vector
11093 into which the deduced template arguments are placed.
11095 Return zero for success, 2 for an incomplete match that doesn't resolve
11096 all the types, and 1 for complete failure. An error message will be
11097 printed only for an incomplete match.
11099 If FN is a conversion operator, or we are trying to produce a specific
11100 specialization, RETURN_TYPE is the return type desired.
11102 The EXPLICIT_TARGS are explicit template arguments provided via a
11105 The parameter STRICT is one of:
11108 We are deducing arguments for a function call, as in
11109 [temp.deduct.call].
11112 We are deducing arguments for a conversion function, as in
11113 [temp.deduct.conv].
11116 We are deducing arguments when doing an explicit instantiation
11117 as in [temp.explicit], when determining an explicit specialization
11118 as in [temp.expl.spec], or when taking the address of a function
11119 template, as in [temp.deduct.funcaddr]. */
11122 fn_type_unification (tree fn,
11123 tree explicit_targs,
11127 unification_kind_t strict,
11133 bool incomplete_argument_packs_p = false;
11135 gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
11137 fntype = TREE_TYPE (fn);
11138 if (explicit_targs)
11142 The specified template arguments must match the template
11143 parameters in kind (i.e., type, nontype, template), and there
11144 must not be more arguments than there are parameters;
11145 otherwise type deduction fails.
11147 Nontype arguments must match the types of the corresponding
11148 nontype template parameters, or must be convertible to the
11149 types of the corresponding nontype parameters as specified in
11150 _temp.arg.nontype_, otherwise type deduction fails.
11152 All references in the function type of the function template
11153 to the corresponding template parameters are replaced by the
11154 specified template argument values. If a substitution in a
11155 template parameter or in the function type of the function
11156 template results in an invalid type, type deduction fails. */
11157 tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
11158 int i, len = TREE_VEC_LENGTH (tparms);
11159 tree converted_args;
11160 bool incomplete = false;
11162 if (explicit_targs == error_mark_node)
11166 = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
11167 /*require_all_args=*/false,
11168 /*use_default_args=*/false));
11169 if (converted_args == error_mark_node)
11172 /* Substitute the explicit args into the function type. This is
11173 necessary so that, for instance, explicitly declared function
11174 arguments can match null pointed constants. If we were given
11175 an incomplete set of explicit args, we must not do semantic
11176 processing during substitution as we could create partial
11178 for (i = 0; i < len; i++)
11180 tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11181 bool parameter_pack = false;
11183 /* Dig out the actual parm. */
11184 if (TREE_CODE (parm) == TYPE_DECL
11185 || TREE_CODE (parm) == TEMPLATE_DECL)
11187 parm = TREE_TYPE (parm);
11188 parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
11190 else if (TREE_CODE (parm) == PARM_DECL)
11192 parm = DECL_INITIAL (parm);
11193 parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
11196 if (parameter_pack)
11200 template_parm_level_and_index (parm, &level, &idx);
11202 /* Mark the argument pack as "incomplete". We could
11203 still deduce more arguments during unification. */
11204 targ = TMPL_ARG (converted_args, level, idx);
11207 ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
11208 ARGUMENT_PACK_EXPLICIT_ARGS (targ)
11209 = ARGUMENT_PACK_ARGS (targ);
11212 /* We have some incomplete argument packs. */
11213 incomplete_argument_packs_p = true;
11217 if (incomplete_argument_packs_p)
11218 /* Any substitution is guaranteed to be incomplete if there
11219 are incomplete argument packs, because we can still deduce
11223 incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
11225 processing_template_decl += incomplete;
11226 fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
11227 processing_template_decl -= incomplete;
11229 if (fntype == error_mark_node)
11232 /* Place the explicitly specified arguments in TARGS. */
11233 for (i = NUM_TMPL_ARGS (converted_args); i--;)
11234 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
11237 /* Never do unification on the 'this' parameter. */
11238 parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
11242 parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
11243 args = tree_cons (NULL_TREE, return_type, args);
11246 /* We allow incomplete unification without an error message here
11247 because the standard doesn't seem to explicitly prohibit it. Our
11248 callers must be ready to deal with unification failures in any
11250 result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
11251 targs, parms, args, /*subr=*/0,
11254 if (result == 0 && incomplete_argument_packs_p)
11256 int i, len = NUM_TMPL_ARGS (targs);
11258 /* Clear the "incomplete" flags on all argument packs. */
11259 for (i = 0; i < len; i++)
11261 tree arg = TREE_VEC_ELT (targs, i);
11262 if (ARGUMENT_PACK_P (arg))
11264 ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
11265 ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
11271 /* All is well so far. Now, check:
11275 When all template arguments have been deduced, all uses of
11276 template parameters in nondeduced contexts are replaced with
11277 the corresponding deduced argument values. If the
11278 substitution results in an invalid type, as described above,
11279 type deduction fails. */
11280 if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
11281 == error_mark_node)
11287 /* Adjust types before performing type deduction, as described in
11288 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
11289 sections are symmetric. PARM is the type of a function parameter
11290 or the return type of the conversion function. ARG is the type of
11291 the argument passed to the call, or the type of the value
11292 initialized with the result of the conversion function.
11293 ARG_EXPR is the original argument expression, which may be null. */
11296 maybe_adjust_types_for_deduction (unification_kind_t strict,
11310 /* Swap PARM and ARG throughout the remainder of this
11311 function; the handling is precisely symmetric since PARM
11312 will initialize ARG rather than vice versa. */
11320 /* There is nothing to do in this case. */
11324 gcc_unreachable ();
11327 if (TREE_CODE (*parm) != REFERENCE_TYPE)
11329 /* [temp.deduct.call]
11331 If P is not a reference type:
11333 --If A is an array type, the pointer type produced by the
11334 array-to-pointer standard conversion (_conv.array_) is
11335 used in place of A for type deduction; otherwise,
11337 --If A is a function type, the pointer type produced by
11338 the function-to-pointer standard conversion
11339 (_conv.func_) is used in place of A for type deduction;
11342 --If A is a cv-qualified type, the top level
11343 cv-qualifiers of A's type are ignored for type
11345 if (TREE_CODE (*arg) == ARRAY_TYPE)
11346 *arg = build_pointer_type (TREE_TYPE (*arg));
11347 else if (TREE_CODE (*arg) == FUNCTION_TYPE)
11348 *arg = build_pointer_type (*arg);
11350 *arg = TYPE_MAIN_VARIANT (*arg);
11353 /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
11354 of the form T&&, where T is a template parameter, and the argument
11355 is an lvalue, T is deduced as A& */
11356 if (TREE_CODE (*parm) == REFERENCE_TYPE
11357 && TYPE_REF_IS_RVALUE (*parm)
11358 && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
11359 && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
11360 && arg_expr && real_lvalue_p (arg_expr))
11361 *arg = build_reference_type (*arg);
11363 /* [temp.deduct.call]
11365 If P is a cv-qualified type, the top level cv-qualifiers
11366 of P's type are ignored for type deduction. If P is a
11367 reference type, the type referred to by P is used for
11369 *parm = TYPE_MAIN_VARIANT (*parm);
11370 if (TREE_CODE (*parm) == REFERENCE_TYPE)
11372 *parm = TREE_TYPE (*parm);
11373 result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
11376 /* DR 322. For conversion deduction, remove a reference type on parm
11377 too (which has been swapped into ARG). */
11378 if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
11379 *arg = TREE_TYPE (*arg);
11384 /* Most parms like fn_type_unification.
11386 If SUBR is 1, we're being called recursively (to unify the
11387 arguments of a function or method parameter of a function
11391 type_unification_real (tree tparms,
11396 unification_kind_t strict,
11399 tree parm, arg, arg_expr;
11401 int ntparms = TREE_VEC_LENGTH (tparms);
11403 int saw_undeduced = 0;
11406 gcc_assert (TREE_CODE (tparms) == TREE_VEC);
11407 gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
11408 gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
11409 gcc_assert (ntparms > 0);
11414 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
11415 | UNIFY_ALLOW_DERIVED);
11419 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
11423 sub_strict = UNIFY_ALLOW_NONE;
11427 gcc_unreachable ();
11434 while (parms && parms != void_list_node
11435 && args && args != void_list_node)
11437 if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
11440 parm = TREE_VALUE (parms);
11441 parms = TREE_CHAIN (parms);
11442 arg = TREE_VALUE (args);
11443 args = TREE_CHAIN (args);
11446 if (arg == error_mark_node)
11448 if (arg == unknown_type_node)
11449 /* We can't deduce anything from this, but we might get all the
11450 template args from other function args. */
11453 /* Conversions will be performed on a function argument that
11454 corresponds with a function parameter that contains only
11455 non-deducible template parameters and explicitly specified
11456 template parameters. */
11457 if (!uses_template_parms (parm))
11462 type = TREE_TYPE (arg);
11466 if (same_type_p (parm, type))
11468 if (strict != DEDUCE_EXACT
11469 && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
11478 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
11479 if (type_unknown_p (arg))
11481 /* [temp.deduct.type]
11483 A template-argument can be deduced from a pointer to
11484 function or pointer to member function argument if
11485 the set of overloaded functions does not contain
11486 function templates and at most one of a set of
11487 overloaded functions provides a unique match. */
11488 if (resolve_overloaded_unification
11489 (tparms, targs, parm, arg, strict, sub_strict))
11495 arg = unlowered_expr_type (arg);
11496 if (arg == error_mark_node)
11501 int arg_strict = sub_strict;
11504 arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
11507 if (unify (tparms, targs, parm, arg, arg_strict))
11514 && parms != void_list_node
11515 && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
11517 /* Unify the remaining arguments with the pack expansion type. */
11519 tree parmvec = make_tree_vec (1);
11523 /* Count the number of arguments that remain. */
11524 for (t = args; t && t != void_list_node; t = TREE_CHAIN (t))
11527 /* Allocate a TREE_VEC and copy in all of the arguments */
11528 argvec = make_tree_vec (len);
11529 for (i = 0; args && args != void_list_node; args = TREE_CHAIN (args))
11531 TREE_VEC_ELT (argvec, i) = TREE_VALUE (args);
11535 /* Copy the parameter into parmvec. */
11536 TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
11537 if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
11538 /*call_args_p=*/true, /*subr=*/subr))
11541 /* Advance to the end of the list of parameters. */
11542 parms = TREE_CHAIN (parms);
11545 /* Fail if we've reached the end of the parm list, and more args
11546 are present, and the parm list isn't variadic. */
11547 if (args && args != void_list_node && parms == void_list_node)
11549 /* Fail if parms are left and they don't have default values. */
11550 if (parms && parms != void_list_node
11551 && TREE_PURPOSE (parms) == NULL_TREE)
11555 for (i = 0; i < ntparms; i++)
11556 if (!TREE_VEC_ELT (targs, i))
11560 if (TREE_VEC_ELT (tparms, i) == error_mark_node)
11563 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11565 /* If this is an undeduced nontype parameter that depends on
11566 a type parameter, try another pass; its type may have been
11567 deduced from a later argument than the one from which
11568 this parameter can be deduced. */
11569 if (TREE_CODE (tparm) == PARM_DECL
11570 && uses_template_parms (TREE_TYPE (tparm))
11571 && !saw_undeduced++)
11574 /* Core issue #226 (C++0x) [temp.deduct]:
11576 If a template argument has not been deduced, its
11577 default template argument, if any, is used.
11579 When we are in C++98 mode, TREE_PURPOSE will either
11580 be NULL_TREE or ERROR_MARK_NODE, so we do not need
11581 to explicitly check cxx_dialect here. */
11582 if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
11584 tree arg = tsubst (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)),
11585 targs, tf_none, NULL_TREE);
11586 if (arg == error_mark_node)
11590 TREE_VEC_ELT (targs, i) = arg;
11595 /* If the type parameter is a parameter pack, then it will
11596 be deduced to an empty parameter pack. */
11597 if (template_parameter_pack_p (tparm))
11601 if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
11603 arg = make_node (NONTYPE_ARGUMENT_PACK);
11604 TREE_TYPE (arg) = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
11605 TREE_CONSTANT (arg) = 1;
11608 arg = make_node (TYPE_ARGUMENT_PACK);
11610 SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
11612 TREE_VEC_ELT (targs, i) = arg;
11622 /* Subroutine of type_unification_real. Args are like the variables
11623 at the call site. ARG is an overloaded function (or template-id);
11624 we try deducing template args from each of the overloads, and if
11625 only one succeeds, we go with that. Modifies TARGS and returns
11626 true on success. */
11629 resolve_overloaded_unification (tree tparms,
11633 unification_kind_t strict,
11636 tree tempargs = copy_node (targs);
11640 if (TREE_CODE (arg) == ADDR_EXPR)
11642 arg = TREE_OPERAND (arg, 0);
11648 if (TREE_CODE (arg) == COMPONENT_REF)
11649 /* Handle `&x' where `x' is some static or non-static member
11651 arg = TREE_OPERAND (arg, 1);
11653 if (TREE_CODE (arg) == OFFSET_REF)
11654 arg = TREE_OPERAND (arg, 1);
11656 /* Strip baselink information. */
11657 if (BASELINK_P (arg))
11658 arg = BASELINK_FUNCTIONS (arg);
11660 if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
11662 /* If we got some explicit template args, we need to plug them into
11663 the affected templates before we try to unify, in case the
11664 explicit args will completely resolve the templates in question. */
11666 tree expl_subargs = TREE_OPERAND (arg, 1);
11667 arg = TREE_OPERAND (arg, 0);
11669 for (; arg; arg = OVL_NEXT (arg))
11671 tree fn = OVL_CURRENT (arg);
11672 tree subargs, elem;
11674 if (TREE_CODE (fn) != TEMPLATE_DECL)
11677 subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
11678 expl_subargs, /*check_ret=*/false);
11681 elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
11682 good += try_one_overload (tparms, targs, tempargs, parm,
11683 elem, strict, sub_strict, addr_p);
11687 else if (TREE_CODE (arg) != OVERLOAD
11688 && TREE_CODE (arg) != FUNCTION_DECL)
11689 /* If ARG is, for example, "(0, &f)" then its type will be unknown
11690 -- but the deduction does not succeed because the expression is
11691 not just the function on its own. */
11694 for (; arg; arg = OVL_NEXT (arg))
11695 good += try_one_overload (tparms, targs, tempargs, parm,
11696 TREE_TYPE (OVL_CURRENT (arg)),
11697 strict, sub_strict, addr_p);
11699 /* [temp.deduct.type] A template-argument can be deduced from a pointer
11700 to function or pointer to member function argument if the set of
11701 overloaded functions does not contain function templates and at most
11702 one of a set of overloaded functions provides a unique match.
11704 So if we found multiple possibilities, we return success but don't
11705 deduce anything. */
11709 int i = TREE_VEC_LENGTH (targs);
11711 if (TREE_VEC_ELT (tempargs, i))
11712 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
11720 /* Subroutine of resolve_overloaded_unification; does deduction for a single
11721 overload. Fills TARGS with any deduced arguments, or error_mark_node if
11722 different overloads deduce different arguments for a given parm.
11723 ADDR_P is true if the expression for which deduction is being
11724 performed was of the form "& fn" rather than simply "fn".
11726 Returns 1 on success. */
11729 try_one_overload (tree tparms,
11734 unification_kind_t strict,
11742 /* [temp.deduct.type] A template-argument can be deduced from a pointer
11743 to function or pointer to member function argument if the set of
11744 overloaded functions does not contain function templates and at most
11745 one of a set of overloaded functions provides a unique match.
11747 So if this is a template, just return success. */
11749 if (uses_template_parms (arg))
11752 if (TREE_CODE (arg) == METHOD_TYPE)
11753 arg = build_ptrmemfunc_type (build_pointer_type (arg));
11755 arg = build_pointer_type (arg);
11757 sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
11759 /* We don't copy orig_targs for this because if we have already deduced
11760 some template args from previous args, unify would complain when we
11761 try to deduce a template parameter for the same argument, even though
11762 there isn't really a conflict. */
11763 nargs = TREE_VEC_LENGTH (targs);
11764 tempargs = make_tree_vec (nargs);
11766 if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
11769 /* First make sure we didn't deduce anything that conflicts with
11770 explicitly specified args. */
11771 for (i = nargs; i--; )
11773 tree elt = TREE_VEC_ELT (tempargs, i);
11774 tree oldelt = TREE_VEC_ELT (orig_targs, i);
11778 else if (uses_template_parms (elt))
11779 /* Since we're unifying against ourselves, we will fill in
11780 template args used in the function parm list with our own
11781 template parms. Discard them. */
11782 TREE_VEC_ELT (tempargs, i) = NULL_TREE;
11783 else if (oldelt && !template_args_equal (oldelt, elt))
11787 for (i = nargs; i--; )
11789 tree elt = TREE_VEC_ELT (tempargs, i);
11792 TREE_VEC_ELT (targs, i) = elt;
11798 /* PARM is a template class (perhaps with unbound template
11799 parameters). ARG is a fully instantiated type. If ARG can be
11800 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
11801 TARGS are as for unify. */
11804 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
11806 tree copy_of_targs;
11808 if (!CLASSTYPE_TEMPLATE_INFO (arg)
11809 || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
11810 != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
11813 /* We need to make a new template argument vector for the call to
11814 unify. If we used TARGS, we'd clutter it up with the result of
11815 the attempted unification, even if this class didn't work out.
11816 We also don't want to commit ourselves to all the unifications
11817 we've already done, since unification is supposed to be done on
11818 an argument-by-argument basis. In other words, consider the
11819 following pathological case:
11821 template <int I, int J, int K>
11824 template <int I, int J>
11825 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
11827 template <int I, int J, int K>
11828 void f(S<I, J, K>, S<I, I, I>);
11837 Now, by the time we consider the unification involving `s2', we
11838 already know that we must have `f<0, 0, 0>'. But, even though
11839 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
11840 because there are two ways to unify base classes of S<0, 1, 2>
11841 with S<I, I, I>. If we kept the already deduced knowledge, we
11842 would reject the possibility I=1. */
11843 copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
11845 /* If unification failed, we're done. */
11846 if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
11847 CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
11853 /* Given a template type PARM and a class type ARG, find the unique
11854 base type in ARG that is an instance of PARM. We do not examine
11855 ARG itself; only its base-classes. If there is not exactly one
11856 appropriate base class, return NULL_TREE. PARM may be the type of
11857 a partial specialization, as well as a plain template type. Used
11861 get_template_base (tree tparms, tree targs, tree parm, tree arg)
11863 tree rval = NULL_TREE;
11866 gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)));
11868 binfo = TYPE_BINFO (complete_type (arg));
11870 /* The type could not be completed. */
11873 /* Walk in inheritance graph order. The search order is not
11874 important, and this avoids multiple walks of virtual bases. */
11875 for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
11877 tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
11881 /* If there is more than one satisfactory baseclass, then:
11885 If they yield more than one possible deduced A, the type
11889 if (rval && !same_type_p (r, rval))
11899 /* Returns the level of DECL, which declares a template parameter. */
11902 template_decl_level (tree decl)
11904 switch (TREE_CODE (decl))
11907 case TEMPLATE_DECL:
11908 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
11911 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
11914 gcc_unreachable ();
11919 /* Decide whether ARG can be unified with PARM, considering only the
11920 cv-qualifiers of each type, given STRICT as documented for unify.
11921 Returns nonzero iff the unification is OK on that basis. */
11924 check_cv_quals_for_unify (int strict, tree arg, tree parm)
11926 int arg_quals = cp_type_quals (arg);
11927 int parm_quals = cp_type_quals (parm);
11929 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
11930 && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
11932 /* Although a CVR qualifier is ignored when being applied to a
11933 substituted template parameter ([8.3.2]/1 for example), that
11934 does not apply during deduction [14.8.2.4]/1, (even though
11935 that is not explicitly mentioned, [14.8.2.4]/9 indicates
11936 this). Except when we're allowing additional CV qualifiers
11937 at the outer level [14.8.2.1]/3,1st bullet. */
11938 if ((TREE_CODE (arg) == REFERENCE_TYPE
11939 || TREE_CODE (arg) == FUNCTION_TYPE
11940 || TREE_CODE (arg) == METHOD_TYPE)
11941 && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
11944 if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
11945 && (parm_quals & TYPE_QUAL_RESTRICT))
11949 if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
11950 && (arg_quals & parm_quals) != parm_quals)
11953 if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
11954 && (parm_quals & arg_quals) != arg_quals)
11960 /* Determines the LEVEL and INDEX for the template parameter PARM. */
11962 template_parm_level_and_index (tree parm, int* level, int* index)
11964 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
11965 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
11966 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
11968 *index = TEMPLATE_TYPE_IDX (parm);
11969 *level = TEMPLATE_TYPE_LEVEL (parm);
11973 *index = TEMPLATE_PARM_IDX (parm);
11974 *level = TEMPLATE_PARM_LEVEL (parm);
11978 /* Unifies the remaining arguments in PACKED_ARGS with the pack
11979 expansion at the end of PACKED_PARMS. Returns 0 if the type
11980 deduction succeeds, 1 otherwise. STRICT is the same as in
11981 unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
11982 call argument list. We'll need to adjust the arguments to make them
11983 types. SUBR tells us if this is from a recursive call to
11984 type_unification_real. */
11986 unify_pack_expansion (tree tparms, tree targs, tree packed_parms,
11987 tree packed_args, int strict, bool call_args_p,
11991 = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
11992 tree pattern = PACK_EXPANSION_PATTERN (parm);
11993 tree pack, packs = NULL_TREE;
11994 int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
11995 int len = TREE_VEC_LENGTH (packed_args);
11997 /* Determine the parameter packs we will be deducing from the
11998 pattern, and record their current deductions. */
11999 for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm);
12000 pack; pack = TREE_CHAIN (pack))
12002 tree parm_pack = TREE_VALUE (pack);
12005 /* Determine the index and level of this parameter pack. */
12006 template_parm_level_and_index (parm_pack, &level, &idx);
12008 /* Keep track of the parameter packs and their corresponding
12010 packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
12011 TREE_TYPE (packs) = make_tree_vec (len - start);
12014 /* Loop through all of the arguments that have not yet been
12015 unified and unify each with the pattern. */
12016 for (i = start; i < len; i++)
12018 tree parm = pattern;
12020 /* For each parameter pack, clear out the deduced value so that
12021 we can deduce it again. */
12022 for (pack = packs; pack; pack = TREE_CHAIN (pack))
12025 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12027 TMPL_ARG (targs, level, idx) = NULL_TREE;
12030 /* Unify the pattern with the current argument. */
12032 tree arg = TREE_VEC_ELT (packed_args, i);
12033 int arg_strict = strict;
12034 bool skip_arg_p = false;
12040 /* This mirrors what we do in type_unification_real. */
12044 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL
12045 | UNIFY_ALLOW_MORE_CV_QUAL
12046 | UNIFY_ALLOW_DERIVED);
12050 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12054 sub_strict = UNIFY_ALLOW_NONE;
12058 gcc_unreachable ();
12063 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12064 if (type_unknown_p (arg))
12066 /* [temp.deduct.type] A template-argument can be
12067 deduced from a pointer to function or pointer
12068 to member function argument if the set of
12069 overloaded functions does not contain function
12070 templates and at most one of a set of
12071 overloaded functions provides a unique
12074 if (resolve_overloaded_unification
12075 (tparms, targs, parm, arg, strict, sub_strict)
12083 arg = TREE_TYPE (arg);
12084 if (arg == error_mark_node)
12089 arg_strict = sub_strict;
12093 maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
12098 if (unify (tparms, targs, parm, arg, arg_strict))
12103 /* For each parameter pack, collect the deduced value. */
12104 for (pack = packs; pack; pack = TREE_CHAIN (pack))
12107 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12109 TREE_VEC_ELT (TREE_TYPE (pack), i - start) =
12110 TMPL_ARG (targs, level, idx);
12114 /* Verify that the results of unification with the parameter packs
12115 produce results consistent with what we've seen before, and make
12116 the deduced argument packs available. */
12117 for (pack = packs; pack; pack = TREE_CHAIN (pack))
12119 tree old_pack = TREE_VALUE (pack);
12120 tree new_args = TREE_TYPE (pack);
12122 if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
12124 /* Prepend the explicit arguments onto NEW_ARGS. */
12125 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12126 tree old_args = new_args;
12127 int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
12128 int len = explicit_len + TREE_VEC_LENGTH (old_args);
12130 /* Copy the explicit arguments. */
12131 new_args = make_tree_vec (len);
12132 for (i = 0; i < explicit_len; i++)
12133 TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
12135 /* Copy the deduced arguments. */
12136 for (; i < len; i++)
12137 TREE_VEC_ELT (new_args, i) =
12138 TREE_VEC_ELT (old_args, i - explicit_len);
12146 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12148 /* Build the deduced *_ARGUMENT_PACK. */
12149 if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
12151 result = make_node (NONTYPE_ARGUMENT_PACK);
12152 TREE_TYPE (result) =
12153 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
12154 TREE_CONSTANT (result) = 1;
12157 result = make_node (TYPE_ARGUMENT_PACK);
12159 SET_ARGUMENT_PACK_ARGS (result, new_args);
12161 /* Note the deduced argument packs for this parameter
12163 TMPL_ARG (targs, level, idx) = result;
12165 else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
12166 && (ARGUMENT_PACK_ARGS (old_pack)
12167 == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
12169 /* We only had the explicitly-provided arguments before, but
12170 now we have a complete set of arguments. */
12172 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12173 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12175 /* Keep the original deduced argument pack. */
12176 TMPL_ARG (targs, level, idx) = old_pack;
12178 SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
12179 ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
12180 ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
12182 else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
12184 /* Inconsistent unification of this parameter pack. */
12190 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12192 /* Keep the original deduced argument pack. */
12193 TMPL_ARG (targs, level, idx) = old_pack;
12200 /* Deduce the value of template parameters. TPARMS is the (innermost)
12201 set of template parameters to a template. TARGS is the bindings
12202 for those template parameters, as determined thus far; TARGS may
12203 include template arguments for outer levels of template parameters
12204 as well. PARM is a parameter to a template function, or a
12205 subcomponent of that parameter; ARG is the corresponding argument.
12206 This function attempts to match PARM with ARG in a manner
12207 consistent with the existing assignments in TARGS. If more values
12208 are deduced, then TARGS is updated.
12210 Returns 0 if the type deduction succeeds, 1 otherwise. The
12211 parameter STRICT is a bitwise or of the following flags:
12214 Require an exact match between PARM and ARG.
12215 UNIFY_ALLOW_MORE_CV_QUAL:
12216 Allow the deduced ARG to be more cv-qualified (by qualification
12217 conversion) than ARG.
12218 UNIFY_ALLOW_LESS_CV_QUAL:
12219 Allow the deduced ARG to be less cv-qualified than ARG.
12220 UNIFY_ALLOW_DERIVED:
12221 Allow the deduced ARG to be a template base class of ARG,
12222 or a pointer to a template base class of the type pointed to by
12224 UNIFY_ALLOW_INTEGER:
12225 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
12226 case for more information.
12227 UNIFY_ALLOW_OUTER_LEVEL:
12228 This is the outermost level of a deduction. Used to determine validity
12229 of qualification conversions. A valid qualification conversion must
12230 have const qualified pointers leading up to the inner type which
12231 requires additional CV quals, except at the outer level, where const
12232 is not required [conv.qual]. It would be normal to set this flag in
12233 addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
12234 UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
12235 This is the outermost level of a deduction, and PARM can be more CV
12236 qualified at this point.
12237 UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
12238 This is the outermost level of a deduction, and PARM can be less CV
12239 qualified at this point. */
12242 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
12247 int strict_in = strict;
12249 /* I don't think this will do the right thing with respect to types.
12250 But the only case I've seen it in so far has been array bounds, where
12251 signedness is the only information lost, and I think that will be
12253 while (TREE_CODE (parm) == NOP_EXPR)
12254 parm = TREE_OPERAND (parm, 0);
12256 if (arg == error_mark_node)
12258 if (arg == unknown_type_node)
12259 /* We can't deduce anything from this, but we might get all the
12260 template args from other function args. */
12263 /* If PARM uses template parameters, then we can't bail out here,
12264 even if ARG == PARM, since we won't record unifications for the
12265 template parameters. We might need them if we're trying to
12266 figure out which of two things is more specialized. */
12267 if (arg == parm && !uses_template_parms (parm))
12270 /* Immediately reject some pairs that won't unify because of
12271 cv-qualification mismatches. */
12272 if (TREE_CODE (arg) == TREE_CODE (parm)
12274 /* It is the elements of the array which hold the cv quals of an array
12275 type, and the elements might be template type parms. We'll check
12276 when we recurse. */
12277 && TREE_CODE (arg) != ARRAY_TYPE
12278 /* We check the cv-qualifiers when unifying with template type
12279 parameters below. We want to allow ARG `const T' to unify with
12280 PARM `T' for example, when computing which of two templates
12281 is more specialized, for example. */
12282 && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
12283 && !check_cv_quals_for_unify (strict_in, arg, parm))
12286 if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
12287 && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
12288 strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
12289 strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
12290 strict &= ~UNIFY_ALLOW_DERIVED;
12291 strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
12292 strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
12294 switch (TREE_CODE (parm))
12296 case TYPENAME_TYPE:
12298 case UNBOUND_CLASS_TEMPLATE:
12299 /* In a type which contains a nested-name-specifier, template
12300 argument values cannot be deduced for template parameters used
12301 within the nested-name-specifier. */
12304 case TEMPLATE_TYPE_PARM:
12305 case TEMPLATE_TEMPLATE_PARM:
12306 case BOUND_TEMPLATE_TEMPLATE_PARM:
12307 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
12308 if (tparm == error_mark_node)
12311 if (TEMPLATE_TYPE_LEVEL (parm)
12312 != template_decl_level (tparm))
12313 /* The PARM is not one we're trying to unify. Just check
12314 to see if it matches ARG. */
12315 return (TREE_CODE (arg) == TREE_CODE (parm)
12316 && same_type_p (parm, arg)) ? 0 : 1;
12317 idx = TEMPLATE_TYPE_IDX (parm);
12318 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
12319 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
12321 /* Check for mixed types and values. */
12322 if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12323 && TREE_CODE (tparm) != TYPE_DECL)
12324 || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12325 && TREE_CODE (tparm) != TEMPLATE_DECL))
12328 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12330 /* ARG must be constructed from a template class or a template
12331 template parameter. */
12332 if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
12333 && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
12337 tree parmvec = TYPE_TI_ARGS (parm);
12338 tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
12340 = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
12343 /* The resolution to DR150 makes clear that default
12344 arguments for an N-argument may not be used to bind T
12345 to a template template parameter with fewer than N
12346 parameters. It is not safe to permit the binding of
12347 default arguments as an extension, as that may change
12348 the meaning of a conforming program. Consider:
12350 struct Dense { static const unsigned int dim = 1; };
12352 template <template <typename> class View,
12354 void operator+(float, View<Block> const&);
12356 template <typename Block,
12357 unsigned int Dim = Block::dim>
12358 struct Lvalue_proxy { operator float() const; };
12362 Lvalue_proxy<Dense> p;
12367 Here, if Lvalue_proxy is permitted to bind to View, then
12368 the global operator+ will be used; if they are not, the
12369 Lvalue_proxy will be converted to float. */
12370 if (coerce_template_parms (argtmplvec, parmvec,
12371 TYPE_TI_TEMPLATE (parm),
12373 /*require_all_args=*/true,
12374 /*use_default_args=*/false)
12375 == error_mark_node)
12378 /* Deduce arguments T, i from TT<T> or TT<i>.
12379 We check each element of PARMVEC and ARGVEC individually
12380 rather than the whole TREE_VEC since they can have
12381 different number of elements. */
12383 for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
12385 if (unify (tparms, targs,
12386 TREE_VEC_ELT (parmvec, i),
12387 TREE_VEC_ELT (argvec, i),
12392 arg = TYPE_TI_TEMPLATE (arg);
12394 /* Fall through to deduce template name. */
12397 if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12398 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12400 /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>. */
12402 /* Simple cases: Value already set, does match or doesn't. */
12403 if (targ != NULL_TREE && template_args_equal (targ, arg))
12410 /* If PARM is `const T' and ARG is only `int', we don't have
12411 a match unless we are allowing additional qualification.
12412 If ARG is `const int' and PARM is just `T' that's OK;
12413 that binds `const int' to `T'. */
12414 if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
12418 /* Consider the case where ARG is `const volatile int' and
12419 PARM is `const T'. Then, T should be `volatile int'. */
12420 arg = cp_build_qualified_type_real
12421 (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
12422 if (arg == error_mark_node)
12425 /* Simple cases: Value already set, does match or doesn't. */
12426 if (targ != NULL_TREE && same_type_p (targ, arg))
12431 /* Make sure that ARG is not a variable-sized array. (Note
12432 that were talking about variable-sized arrays (like
12433 `int[n]'), rather than arrays of unknown size (like
12434 `int[]').) We'll get very confused by such a type since
12435 the bound of the array will not be computable in an
12436 instantiation. Besides, such types are not allowed in
12437 ISO C++, so we can do as we please here. */
12438 if (variably_modified_type_p (arg, NULL_TREE))
12442 /* If ARG is a parameter pack or an expansion, we cannot unify
12443 against it unless PARM is also a parameter pack. */
12444 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
12445 && !template_parameter_pack_p (parm))
12448 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
12451 case TEMPLATE_PARM_INDEX:
12452 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
12453 if (tparm == error_mark_node)
12456 if (TEMPLATE_PARM_LEVEL (parm)
12457 != template_decl_level (tparm))
12458 /* The PARM is not one we're trying to unify. Just check
12459 to see if it matches ARG. */
12460 return !(TREE_CODE (arg) == TREE_CODE (parm)
12461 && cp_tree_equal (parm, arg));
12463 idx = TEMPLATE_PARM_IDX (parm);
12464 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
12467 return !cp_tree_equal (targ, arg);
12469 /* [temp.deduct.type] If, in the declaration of a function template
12470 with a non-type template-parameter, the non-type
12471 template-parameter is used in an expression in the function
12472 parameter-list and, if the corresponding template-argument is
12473 deduced, the template-argument type shall match the type of the
12474 template-parameter exactly, except that a template-argument
12475 deduced from an array bound may be of any integral type.
12476 The non-type parameter might use already deduced type parameters. */
12477 tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
12478 if (!TREE_TYPE (arg))
12479 /* Template-parameter dependent expression. Just accept it for now.
12480 It will later be processed in convert_template_argument. */
12482 else if (same_type_p (TREE_TYPE (arg), tparm))
12484 else if ((strict & UNIFY_ALLOW_INTEGER)
12485 && (TREE_CODE (tparm) == INTEGER_TYPE
12486 || TREE_CODE (tparm) == BOOLEAN_TYPE))
12487 /* Convert the ARG to the type of PARM; the deduced non-type
12488 template argument must exactly match the types of the
12489 corresponding parameter. */
12490 arg = fold (build_nop (TREE_TYPE (parm), arg));
12491 else if (uses_template_parms (tparm))
12492 /* We haven't deduced the type of this parameter yet. Try again
12498 /* If ARG is a parameter pack or an expansion, we cannot unify
12499 against it unless PARM is also a parameter pack. */
12500 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
12501 && !TEMPLATE_PARM_PARAMETER_PACK (parm))
12504 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
12509 /* A pointer-to-member constant can be unified only with
12510 another constant. */
12511 if (TREE_CODE (arg) != PTRMEM_CST)
12514 /* Just unify the class member. It would be useless (and possibly
12515 wrong, depending on the strict flags) to unify also
12516 PTRMEM_CST_CLASS, because we want to be sure that both parm and
12517 arg refer to the same variable, even if through different
12518 classes. For instance:
12520 struct A { int x; };
12523 Unification of &A::x and &B::x must succeed. */
12524 return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
12525 PTRMEM_CST_MEMBER (arg), strict);
12530 if (TREE_CODE (arg) != POINTER_TYPE)
12533 /* [temp.deduct.call]
12535 A can be another pointer or pointer to member type that can
12536 be converted to the deduced A via a qualification
12537 conversion (_conv.qual_).
12539 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
12540 This will allow for additional cv-qualification of the
12541 pointed-to types if appropriate. */
12543 if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
12544 /* The derived-to-base conversion only persists through one
12545 level of pointers. */
12546 strict |= (strict_in & UNIFY_ALLOW_DERIVED);
12548 return unify (tparms, targs, TREE_TYPE (parm),
12549 TREE_TYPE (arg), strict);
12552 case REFERENCE_TYPE:
12553 if (TREE_CODE (arg) != REFERENCE_TYPE)
12555 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
12556 strict & UNIFY_ALLOW_MORE_CV_QUAL);
12559 if (TREE_CODE (arg) != ARRAY_TYPE)
12561 if ((TYPE_DOMAIN (parm) == NULL_TREE)
12562 != (TYPE_DOMAIN (arg) == NULL_TREE))
12564 if (TYPE_DOMAIN (parm) != NULL_TREE)
12571 /* Our representation of array types uses "N - 1" as the
12572 TYPE_MAX_VALUE for an array with "N" elements, if "N" is
12573 not an integer constant. We cannot unify arbitrarily
12574 complex expressions, so we eliminate the MINUS_EXPRs
12576 parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
12577 parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
12580 gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
12581 parm_max = TREE_OPERAND (parm_max, 0);
12583 arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
12584 arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
12587 /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
12588 trying to unify the type of a variable with the type
12589 of a template parameter. For example:
12591 template <unsigned int N>
12592 void f (char (&) [N]);
12599 Here, the type of the ARG will be "int [g(i)]", and
12600 may be a SAVE_EXPR, etc. */
12601 if (TREE_CODE (arg_max) != MINUS_EXPR)
12603 arg_max = TREE_OPERAND (arg_max, 0);
12606 /* If only one of the bounds used a MINUS_EXPR, compensate
12607 by adding one to the other bound. */
12608 if (parm_cst && !arg_cst)
12609 parm_max = fold_build2 (PLUS_EXPR,
12613 else if (arg_cst && !parm_cst)
12614 arg_max = fold_build2 (PLUS_EXPR,
12619 if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
12622 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
12623 strict & UNIFY_ALLOW_MORE_CV_QUAL);
12630 case ENUMERAL_TYPE:
12632 if (TREE_CODE (arg) != TREE_CODE (parm))
12635 /* We have already checked cv-qualification at the top of the
12637 if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
12640 /* As far as unification is concerned, this wins. Later checks
12641 will invalidate it if necessary. */
12644 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
12645 /* Type INTEGER_CST can come from ordinary constant template args. */
12647 while (TREE_CODE (arg) == NOP_EXPR)
12648 arg = TREE_OPERAND (arg, 0);
12650 if (TREE_CODE (arg) != INTEGER_CST)
12652 return !tree_int_cst_equal (parm, arg);
12657 if (TREE_CODE (arg) != TREE_VEC)
12659 if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
12661 for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
12662 if (unify (tparms, targs,
12663 TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
12671 if (TREE_CODE (arg) != TREE_CODE (parm))
12674 if (TYPE_PTRMEMFUNC_P (parm))
12676 if (!TYPE_PTRMEMFUNC_P (arg))
12679 return unify (tparms, targs,
12680 TYPE_PTRMEMFUNC_FN_TYPE (parm),
12681 TYPE_PTRMEMFUNC_FN_TYPE (arg),
12685 if (CLASSTYPE_TEMPLATE_INFO (parm))
12687 tree t = NULL_TREE;
12689 if (strict_in & UNIFY_ALLOW_DERIVED)
12691 /* First, we try to unify the PARM and ARG directly. */
12692 t = try_class_unification (tparms, targs,
12697 /* Fallback to the special case allowed in
12698 [temp.deduct.call]:
12700 If P is a class, and P has the form
12701 template-id, then A can be a derived class of
12702 the deduced A. Likewise, if P is a pointer to
12703 a class of the form template-id, A can be a
12704 pointer to a derived class pointed to by the
12706 t = get_template_base (tparms, targs, parm, arg);
12712 else if (CLASSTYPE_TEMPLATE_INFO (arg)
12713 && (CLASSTYPE_TI_TEMPLATE (parm)
12714 == CLASSTYPE_TI_TEMPLATE (arg)))
12715 /* Perhaps PARM is something like S<U> and ARG is S<int>.
12716 Then, we should unify `int' and `U'. */
12719 /* There's no chance of unification succeeding. */
12722 return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
12723 CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
12725 else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
12730 case FUNCTION_TYPE:
12731 if (TREE_CODE (arg) != TREE_CODE (parm))
12734 /* CV qualifications for methods can never be deduced, they must
12735 match exactly. We need to check them explicitly here,
12736 because type_unification_real treats them as any other
12737 cvqualified parameter. */
12738 if (TREE_CODE (parm) == METHOD_TYPE
12739 && (!check_cv_quals_for_unify
12741 TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
12742 TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
12745 if (unify (tparms, targs, TREE_TYPE (parm),
12746 TREE_TYPE (arg), UNIFY_ALLOW_NONE))
12748 return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
12749 TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
12753 /* Unify a pointer to member with a pointer to member function, which
12754 deduces the type of the member as a function type. */
12755 if (TYPE_PTRMEMFUNC_P (arg))
12759 cp_cv_quals cv_quals;
12761 /* Check top-level cv qualifiers */
12762 if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
12765 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
12766 TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
12769 /* Determine the type of the function we are unifying against. */
12770 method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
12772 build_function_type (TREE_TYPE (method_type),
12773 TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
12775 /* Extract the cv-qualifiers of the member function from the
12776 implicit object parameter and place them on the function
12777 type to be restored later. */
12779 cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
12780 fntype = build_qualified_type (fntype, cv_quals);
12781 return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
12784 if (TREE_CODE (arg) != OFFSET_TYPE)
12786 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
12787 TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
12789 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
12793 if (DECL_TEMPLATE_PARM_P (parm))
12794 return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
12795 if (arg != integral_constant_value (parm))
12800 case TEMPLATE_DECL:
12801 /* Matched cases are handled by the ARG == PARM test above. */
12804 case TYPE_ARGUMENT_PACK:
12805 case NONTYPE_ARGUMENT_PACK:
12807 tree packed_parms = ARGUMENT_PACK_ARGS (parm);
12808 tree packed_args = ARGUMENT_PACK_ARGS (arg);
12809 int i, len = TREE_VEC_LENGTH (packed_parms);
12810 int argslen = TREE_VEC_LENGTH (packed_args);
12811 int parm_variadic_p = 0;
12813 /* Check if the parameters end in a pack, making them variadic. */
12815 && PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, len - 1)))
12816 parm_variadic_p = 1;
12818 /* If we don't have enough arguments to satisfy the parameters
12819 (not counting the pack expression at the end), or we have
12820 too many arguments for a parameter list that doesn't end in
12821 a pack expression, we can't unify. */
12822 if (argslen < (len - parm_variadic_p)
12823 || (argslen > len && !parm_variadic_p))
12826 /* Unify all of the parameters that precede the (optional)
12827 pack expression. */
12828 for (i = 0; i < len - parm_variadic_p; ++i)
12830 if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
12831 TREE_VEC_ELT (packed_args, i), strict))
12835 if (parm_variadic_p)
12836 return unify_pack_expansion (tparms, targs,
12837 packed_parms, packed_args,
12838 strict, /*call_args_p=*/false,
12846 case DECLTYPE_TYPE:
12847 /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
12852 gcc_assert (EXPR_P (parm));
12854 /* We must be looking at an expression. This can happen with
12858 void foo(S<I>, S<I + 2>);
12860 This is a "nondeduced context":
12864 The nondeduced contexts are:
12866 --A type that is a template-id in which one or more of
12867 the template-arguments is an expression that references
12868 a template-parameter.
12870 In these cases, we assume deduction succeeded, but don't
12871 actually infer any unifications. */
12873 if (!uses_template_parms (parm)
12874 && !template_args_equal (parm, arg))
12881 /* Note that DECL can be defined in this translation unit, if
12885 mark_definable (tree decl)
12888 DECL_NOT_REALLY_EXTERN (decl) = 1;
12889 FOR_EACH_CLONE (clone, decl)
12890 DECL_NOT_REALLY_EXTERN (clone) = 1;
12893 /* Called if RESULT is explicitly instantiated, or is a member of an
12894 explicitly instantiated class. */
12897 mark_decl_instantiated (tree result, int extern_p)
12899 SET_DECL_EXPLICIT_INSTANTIATION (result);
12901 /* If this entity has already been written out, it's too late to
12902 make any modifications. */
12903 if (TREE_ASM_WRITTEN (result))
12906 if (TREE_CODE (result) != FUNCTION_DECL)
12907 /* The TREE_PUBLIC flag for function declarations will have been
12908 set correctly by tsubst. */
12909 TREE_PUBLIC (result) = 1;
12911 /* This might have been set by an earlier implicit instantiation. */
12912 DECL_COMDAT (result) = 0;
12915 DECL_NOT_REALLY_EXTERN (result) = 0;
12918 mark_definable (result);
12919 /* Always make artificials weak. */
12920 if (DECL_ARTIFICIAL (result) && flag_weak)
12921 comdat_linkage (result);
12922 /* For WIN32 we also want to put explicit instantiations in
12923 linkonce sections. */
12924 else if (TREE_PUBLIC (result))
12925 maybe_make_one_only (result);
12928 /* If EXTERN_P, then this function will not be emitted -- unless
12929 followed by an explicit instantiation, at which point its linkage
12930 will be adjusted. If !EXTERN_P, then this function will be
12931 emitted here. In neither circumstance do we want
12932 import_export_decl to adjust the linkage. */
12933 DECL_INTERFACE_KNOWN (result) = 1;
12936 /* Given two function templates PAT1 and PAT2, return:
12938 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
12939 -1 if PAT2 is more specialized than PAT1.
12940 0 if neither is more specialized.
12942 LEN indicates the number of parameters we should consider
12943 (defaulted parameters should not be considered).
12945 The 1998 std underspecified function template partial ordering, and
12946 DR214 addresses the issue. We take pairs of arguments, one from
12947 each of the templates, and deduce them against each other. One of
12948 the templates will be more specialized if all the *other*
12949 template's arguments deduce against its arguments and at least one
12950 of its arguments *does* *not* deduce against the other template's
12951 corresponding argument. Deduction is done as for class templates.
12952 The arguments used in deduction have reference and top level cv
12953 qualifiers removed. Iff both arguments were originally reference
12954 types *and* deduction succeeds in both directions, the template
12955 with the more cv-qualified argument wins for that pairing (if
12956 neither is more cv-qualified, they both are equal). Unlike regular
12957 deduction, after all the arguments have been deduced in this way,
12958 we do *not* verify the deduced template argument values can be
12959 substituted into non-deduced contexts, nor do we have to verify
12960 that all template arguments have been deduced. */
12963 more_specialized_fn (tree pat1, tree pat2, int len)
12965 tree decl1 = DECL_TEMPLATE_RESULT (pat1);
12966 tree decl2 = DECL_TEMPLATE_RESULT (pat2);
12967 tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
12968 tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
12969 tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
12970 tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
12971 tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
12972 tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
12976 /* Remove the this parameter from non-static member functions. If
12977 one is a non-static member function and the other is not a static
12978 member function, remove the first parameter from that function
12979 also. This situation occurs for operator functions where we
12980 locate both a member function (with this pointer) and non-member
12981 operator (with explicit first operand). */
12982 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
12984 len--; /* LEN is the number of significant arguments for DECL1 */
12985 args1 = TREE_CHAIN (args1);
12986 if (!DECL_STATIC_FUNCTION_P (decl2))
12987 args2 = TREE_CHAIN (args2);
12989 else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
12991 args2 = TREE_CHAIN (args2);
12992 if (!DECL_STATIC_FUNCTION_P (decl1))
12995 args1 = TREE_CHAIN (args1);
12999 /* If only one is a conversion operator, they are unordered. */
13000 if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
13003 /* Consider the return type for a conversion function */
13004 if (DECL_CONV_FN_P (decl1))
13006 args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
13007 args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
13011 processing_template_decl++;
13015 tree arg1 = TREE_VALUE (args1);
13016 tree arg2 = TREE_VALUE (args2);
13017 int deduce1, deduce2;
13021 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13022 && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13024 /* When both arguments are pack expansions, we need only
13025 unify the patterns themselves. */
13026 arg1 = PACK_EXPANSION_PATTERN (arg1);
13027 arg2 = PACK_EXPANSION_PATTERN (arg2);
13029 /* This is the last comparison we need to do. */
13033 if (TREE_CODE (arg1) == REFERENCE_TYPE)
13035 arg1 = TREE_TYPE (arg1);
13036 quals1 = cp_type_quals (arg1);
13039 if (TREE_CODE (arg2) == REFERENCE_TYPE)
13041 arg2 = TREE_TYPE (arg2);
13042 quals2 = cp_type_quals (arg2);
13045 if ((quals1 < 0) != (quals2 < 0))
13047 /* Only of the args is a reference, see if we should apply
13048 array/function pointer decay to it. This is not part of
13049 DR214, but is, IMHO, consistent with the deduction rules
13050 for the function call itself, and with our earlier
13051 implementation of the underspecified partial ordering
13052 rules. (nathan). */
13055 switch (TREE_CODE (arg1))
13058 arg1 = TREE_TYPE (arg1);
13060 case FUNCTION_TYPE:
13061 arg1 = build_pointer_type (arg1);
13070 switch (TREE_CODE (arg2))
13073 arg2 = TREE_TYPE (arg2);
13075 case FUNCTION_TYPE:
13076 arg2 = build_pointer_type (arg2);
13085 arg1 = TYPE_MAIN_VARIANT (arg1);
13086 arg2 = TYPE_MAIN_VARIANT (arg2);
13088 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
13090 int i, len2 = list_length (args2);
13091 tree parmvec = make_tree_vec (1);
13092 tree argvec = make_tree_vec (len2);
13095 /* Setup the parameter vector, which contains only ARG1. */
13096 TREE_VEC_ELT (parmvec, 0) = arg1;
13098 /* Setup the argument vector, which contains the remaining
13100 for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
13101 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13103 deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec,
13104 argvec, UNIFY_ALLOW_NONE,
13105 /*call_args_p=*/false,
13108 /* We cannot deduce in the other direction, because ARG1 is
13109 a pack expansion but ARG2 is not. */
13112 else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13114 int i, len1 = list_length (args1);
13115 tree parmvec = make_tree_vec (1);
13116 tree argvec = make_tree_vec (len1);
13119 /* Setup the parameter vector, which contains only ARG1. */
13120 TREE_VEC_ELT (parmvec, 0) = arg2;
13122 /* Setup the argument vector, which contains the remaining
13124 for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
13125 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13127 deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec,
13128 argvec, UNIFY_ALLOW_NONE,
13129 /*call_args_p=*/false,
13132 /* We cannot deduce in the other direction, because ARG2 is
13133 a pack expansion but ARG1 is not.*/
13139 /* The normal case, where neither argument is a pack
13141 deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
13142 deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
13149 if (better1 < 0 && better2 < 0)
13150 /* We've failed to deduce something in either direction.
13151 These must be unordered. */
13154 if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
13156 /* Deduces in both directions, see if quals can
13157 disambiguate. Pretend the worse one failed to deduce. */
13158 if ((quals1 & quals2) == quals2)
13160 if ((quals1 & quals2) == quals1)
13163 if (deduce1 && !deduce2 && !better2)
13165 if (deduce2 && !deduce1 && !better1)
13168 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13169 || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13170 /* We have already processed all of the arguments in our
13171 handing of the pack expansion type. */
13174 args1 = TREE_CHAIN (args1);
13175 args2 = TREE_CHAIN (args2);
13178 processing_template_decl--;
13180 /* All things being equal, if the next argument is a pack expansion
13181 for one function but not for the other, prefer the
13182 non-variadic function. */
13183 if ((better1 > 0) - (better2 > 0) == 0
13184 && args1 && TREE_VALUE (args1)
13185 && args2 && TREE_VALUE (args2))
13187 if (TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION)
13188 return TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION ? 0 : -1;
13189 else if (TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION)
13193 return (better1 > 0) - (better2 > 0);
13196 /* Determine which of two partial specializations is more specialized.
13198 PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
13199 to the first partial specialization. The TREE_VALUE is the
13200 innermost set of template parameters for the partial
13201 specialization. PAT2 is similar, but for the second template.
13203 Return 1 if the first partial specialization is more specialized;
13204 -1 if the second is more specialized; 0 if neither is more
13207 See [temp.class.order] for information about determining which of
13208 two templates is more specialized. */
13211 more_specialized_class (tree pat1, tree pat2)
13216 bool any_deductions = false;
13218 tmpl1 = TREE_TYPE (pat1);
13219 tmpl2 = TREE_TYPE (pat2);
13221 /* Just like what happens for functions, if we are ordering between
13222 different class template specializations, we may encounter dependent
13223 types in the arguments, and we need our dependency check functions
13224 to behave correctly. */
13225 ++processing_template_decl;
13226 targs = get_class_bindings (TREE_VALUE (pat1),
13227 CLASSTYPE_TI_ARGS (tmpl1),
13228 CLASSTYPE_TI_ARGS (tmpl2));
13232 any_deductions = true;
13235 targs = get_class_bindings (TREE_VALUE (pat2),
13236 CLASSTYPE_TI_ARGS (tmpl2),
13237 CLASSTYPE_TI_ARGS (tmpl1));
13241 any_deductions = true;
13243 --processing_template_decl;
13245 /* In the case of a tie where at least one of the class templates
13246 has a parameter pack at the end, the template with the most
13247 non-packed parameters wins. */
13250 && (template_args_variadic_p (TREE_PURPOSE (pat1))
13251 || template_args_variadic_p (TREE_PURPOSE (pat2))))
13253 tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
13254 tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
13255 int len1 = TREE_VEC_LENGTH (args1);
13256 int len2 = TREE_VEC_LENGTH (args2);
13258 /* We don't count the pack expansion at the end. */
13259 if (template_args_variadic_p (TREE_PURPOSE (pat1)))
13261 if (template_args_variadic_p (TREE_PURPOSE (pat2)))
13266 else if (len1 < len2)
13273 /* Return the template arguments that will produce the function signature
13274 DECL from the function template FN, with the explicit template
13275 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is true, the return type must
13276 also match. Return NULL_TREE if no satisfactory arguments could be
13280 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
13282 int ntparms = DECL_NTPARMS (fn);
13283 tree targs = make_tree_vec (ntparms);
13285 tree decl_arg_types;
13287 /* Substitute the explicit template arguments into the type of DECL.
13288 The call to fn_type_unification will handle substitution into the
13290 decl_type = TREE_TYPE (decl);
13291 if (explicit_args && uses_template_parms (decl_type))
13294 tree converted_args;
13296 if (DECL_TEMPLATE_INFO (decl))
13297 tmpl = DECL_TI_TEMPLATE (decl);
13299 /* We can get here for some invalid specializations. */
13303 = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
13304 explicit_args, NULL_TREE,
13306 /*require_all_args=*/false,
13307 /*use_default_args=*/false);
13308 if (converted_args == error_mark_node)
13311 decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
13312 if (decl_type == error_mark_node)
13316 /* Never do unification on the 'this' parameter. */
13317 decl_arg_types = skip_artificial_parms_for (decl,
13318 TYPE_ARG_TYPES (decl_type));
13320 if (fn_type_unification (fn, explicit_args, targs,
13322 (check_rettype || DECL_CONV_FN_P (fn)
13323 ? TREE_TYPE (decl_type) : NULL_TREE),
13324 DEDUCE_EXACT, LOOKUP_NORMAL))
13330 /* Return the innermost template arguments that, when applied to a
13331 template specialization whose innermost template parameters are
13332 TPARMS, and whose specialization arguments are PARMS, yield the
13335 For example, suppose we have:
13337 template <class T, class U> struct S {};
13338 template <class T> struct S<T*, int> {};
13340 Then, suppose we want to get `S<double*, int>'. The TPARMS will be
13341 {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
13342 int}. The resulting vector will be {double}, indicating that `T'
13343 is bound to `double'. */
13346 get_class_bindings (tree tparms, tree spec_args, tree args)
13348 int i, ntparms = TREE_VEC_LENGTH (tparms);
13350 tree innermost_deduced_args;
13352 innermost_deduced_args = make_tree_vec (ntparms);
13353 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
13355 deduced_args = copy_node (args);
13356 SET_TMPL_ARGS_LEVEL (deduced_args,
13357 TMPL_ARGS_DEPTH (deduced_args),
13358 innermost_deduced_args);
13361 deduced_args = innermost_deduced_args;
13363 if (unify (tparms, deduced_args,
13364 INNERMOST_TEMPLATE_ARGS (spec_args),
13365 INNERMOST_TEMPLATE_ARGS (args),
13369 for (i = 0; i < ntparms; ++i)
13370 if (! TREE_VEC_ELT (innermost_deduced_args, i))
13373 /* Verify that nondeduced template arguments agree with the type
13374 obtained from argument deduction.
13378 struct A { typedef int X; };
13379 template <class T, class U> struct C {};
13380 template <class T> struct C<T, typename T::X> {};
13382 Then with the instantiation `C<A, int>', we can deduce that
13383 `T' is `A' but unify () does not check whether `typename T::X'
13385 spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
13386 if (spec_args == error_mark_node
13387 /* We only need to check the innermost arguments; the other
13388 arguments will always agree. */
13389 || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
13390 INNERMOST_TEMPLATE_ARGS (args)))
13393 return deduced_args;
13396 /* TEMPLATES is a TREE_LIST. Each TREE_VALUE is a TEMPLATE_DECL.
13397 Return the TREE_LIST node with the most specialized template, if
13398 any. If there is no most specialized template, the error_mark_node
13401 Note that this function does not look at, or modify, the
13402 TREE_PURPOSE or TREE_TYPE of any of the nodes. Since the node
13403 returned is one of the elements of INSTANTIATIONS, callers may
13404 store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
13405 and retrieve it from the value returned. */
13408 most_specialized_instantiation (tree templates)
13412 ++processing_template_decl;
13415 for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
13419 if (get_bindings (TREE_VALUE (champ),
13420 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
13421 NULL_TREE, /*check_ret=*/false))
13424 if (get_bindings (TREE_VALUE (fn),
13425 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
13426 NULL_TREE, /*check_ret=*/false))
13433 /* Equally specialized, move to next function. If there
13434 is no next function, nothing's most specialized. */
13435 fn = TREE_CHAIN (fn);
13443 /* Now verify that champ is better than everything earlier in the
13444 instantiation list. */
13445 for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
13446 if (get_bindings (TREE_VALUE (champ),
13447 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
13448 NULL_TREE, /*check_ret=*/false)
13449 || !get_bindings (TREE_VALUE (fn),
13450 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
13451 NULL_TREE, /*check_ret=*/false))
13457 processing_template_decl--;
13460 return error_mark_node;
13465 /* If DECL is a specialization of some template, return the most
13466 general such template. Otherwise, returns NULL_TREE.
13468 For example, given:
13470 template <class T> struct S { template <class U> void f(U); };
13472 if TMPL is `template <class U> void S<int>::f(U)' this will return
13473 the full template. This function will not trace past partial
13474 specializations, however. For example, given in addition:
13476 template <class T> struct S<T*> { template <class U> void f(U); };
13478 if TMPL is `template <class U> void S<int*>::f(U)' this will return
13479 `template <class T> template <class U> S<T*>::f(U)'. */
13482 most_general_template (tree decl)
13484 /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
13485 an immediate specialization. */
13486 if (TREE_CODE (decl) == FUNCTION_DECL)
13488 if (DECL_TEMPLATE_INFO (decl)) {
13489 decl = DECL_TI_TEMPLATE (decl);
13491 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
13492 template friend. */
13493 if (TREE_CODE (decl) != TEMPLATE_DECL)
13499 /* Look for more and more general templates. */
13500 while (DECL_TEMPLATE_INFO (decl))
13502 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
13503 (See cp-tree.h for details.) */
13504 if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
13507 if (CLASS_TYPE_P (TREE_TYPE (decl))
13508 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
13511 /* Stop if we run into an explicitly specialized class template. */
13512 if (!DECL_NAMESPACE_SCOPE_P (decl)
13513 && DECL_CONTEXT (decl)
13514 && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
13517 decl = DECL_TI_TEMPLATE (decl);
13523 /* Return the most specialized of the class template partial
13524 specializations of TMPL which can produce TYPE, a specialization of
13525 TMPL. The value returned is actually a TREE_LIST; the TREE_TYPE is
13526 a _TYPE node corresponding to the partial specialization, while the
13527 TREE_PURPOSE is the set of template arguments that must be
13528 substituted into the TREE_TYPE in order to generate TYPE.
13530 If the choice of partial specialization is ambiguous, a diagnostic
13531 is issued, and the error_mark_node is returned. If there are no
13532 partial specializations of TMPL matching TYPE, then NULL_TREE is
13536 most_specialized_class (tree type, tree tmpl)
13538 tree list = NULL_TREE;
13545 tmpl = most_general_template (tmpl);
13546 args = CLASSTYPE_TI_ARGS (type);
13547 for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
13549 tree partial_spec_args;
13552 partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
13553 spec_args = get_class_bindings (TREE_VALUE (t),
13558 list = tree_cons (spec_args, TREE_VALUE (t), list);
13559 TREE_TYPE (list) = TREE_TYPE (t);
13566 ambiguous_p = false;
13569 t = TREE_CHAIN (t);
13570 for (; t; t = TREE_CHAIN (t))
13572 fate = more_specialized_class (champ, t);
13579 t = TREE_CHAIN (t);
13582 ambiguous_p = true;
13591 for (t = list; t && t != champ; t = TREE_CHAIN (t))
13593 fate = more_specialized_class (champ, t);
13596 ambiguous_p = true;
13603 const char *str = "candidates are:";
13604 error ("ambiguous class template instantiation for %q#T", type);
13605 for (t = list; t; t = TREE_CHAIN (t))
13607 error ("%s %+#T", str, TREE_TYPE (t));
13610 return error_mark_node;
13616 /* Explicitly instantiate DECL. */
13619 do_decl_instantiation (tree decl, tree storage)
13621 tree result = NULL_TREE;
13624 if (!decl || decl == error_mark_node)
13625 /* An error occurred, for which grokdeclarator has already issued
13626 an appropriate message. */
13628 else if (! DECL_LANG_SPECIFIC (decl))
13630 error ("explicit instantiation of non-template %q#D", decl);
13633 else if (TREE_CODE (decl) == VAR_DECL)
13635 /* There is an asymmetry here in the way VAR_DECLs and
13636 FUNCTION_DECLs are handled by grokdeclarator. In the case of
13637 the latter, the DECL we get back will be marked as a
13638 template instantiation, and the appropriate
13639 DECL_TEMPLATE_INFO will be set up. This does not happen for
13640 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
13641 should handle VAR_DECLs as it currently handles
13643 result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
13644 if (!result || TREE_CODE (result) != VAR_DECL)
13646 error ("no matching template for %qD found", decl);
13649 if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
13651 error ("type %qT for explicit instantiation %qD does not match "
13652 "declared type %qT", TREE_TYPE (result), decl,
13657 else if (TREE_CODE (decl) != FUNCTION_DECL)
13659 error ("explicit instantiation of %q#D", decl);
13665 /* Check for various error cases. Note that if the explicit
13666 instantiation is valid the RESULT will currently be marked as an
13667 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
13668 until we get here. */
13670 if (DECL_TEMPLATE_SPECIALIZATION (result))
13672 /* DR 259 [temp.spec].
13674 Both an explicit instantiation and a declaration of an explicit
13675 specialization shall not appear in a program unless the explicit
13676 instantiation follows a declaration of the explicit specialization.
13678 For a given set of template parameters, if an explicit
13679 instantiation of a template appears after a declaration of an
13680 explicit specialization for that template, the explicit
13681 instantiation has no effect. */
13684 else if (DECL_EXPLICIT_INSTANTIATION (result))
13688 No program shall explicitly instantiate any template more
13691 We check DECL_NOT_REALLY_EXTERN so as not to complain when
13692 the first instantiation was `extern' and the second is not,
13693 and EXTERN_P for the opposite case. */
13694 if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
13695 pedwarn ("duplicate explicit instantiation of %q#D", result);
13696 /* If an "extern" explicit instantiation follows an ordinary
13697 explicit instantiation, the template is instantiated. */
13701 else if (!DECL_IMPLICIT_INSTANTIATION (result))
13703 error ("no matching template for %qD found", result);
13706 else if (!DECL_TEMPLATE_INFO (result))
13708 pedwarn ("explicit instantiation of non-template %q#D", result);
13712 if (storage == NULL_TREE)
13714 else if (storage == ridpointers[(int) RID_EXTERN])
13716 if (pedantic && !in_system_header)
13717 pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
13722 error ("storage class %qD applied to template instantiation", storage);
13724 check_explicit_instantiation_namespace (result);
13725 mark_decl_instantiated (result, extern_p);
13727 instantiate_decl (result, /*defer_ok=*/1,
13728 /*expl_inst_class_mem_p=*/false);
13732 mark_class_instantiated (tree t, int extern_p)
13734 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
13735 SET_CLASSTYPE_INTERFACE_KNOWN (t);
13736 CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
13737 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
13740 CLASSTYPE_DEBUG_REQUESTED (t) = 1;
13741 rest_of_type_compilation (t, 1);
13745 /* Called from do_type_instantiation through binding_table_foreach to
13746 do recursive instantiation for the type bound in ENTRY. */
13748 bt_instantiate_type_proc (binding_entry entry, void *data)
13750 tree storage = *(tree *) data;
13752 if (IS_AGGR_TYPE (entry->type)
13753 && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
13754 do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
13757 /* Called from do_type_instantiation to instantiate a member
13758 (a member function or a static member variable) of an
13759 explicitly instantiated class template. */
13761 instantiate_class_member (tree decl, int extern_p)
13763 mark_decl_instantiated (decl, extern_p);
13765 instantiate_decl (decl, /*defer_ok=*/1,
13766 /*expl_inst_class_mem_p=*/true);
13769 /* Perform an explicit instantiation of template class T. STORAGE, if
13770 non-null, is the RID for extern, inline or static. COMPLAIN is
13771 nonzero if this is called from the parser, zero if called recursively,
13772 since the standard is unclear (as detailed below). */
13775 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
13780 int previous_instantiation_extern_p = 0;
13782 if (TREE_CODE (t) == TYPE_DECL)
13785 if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
13787 error ("explicit instantiation of non-template type %qT", t);
13793 if (!COMPLETE_TYPE_P (t))
13795 if (complain & tf_error)
13796 error ("explicit instantiation of %q#T before definition of template",
13801 if (storage != NULL_TREE)
13803 if (pedantic && !in_system_header)
13804 pedwarn("ISO C++ forbids the use of %qE on explicit instantiations",
13807 if (storage == ridpointers[(int) RID_INLINE])
13809 else if (storage == ridpointers[(int) RID_EXTERN])
13811 else if (storage == ridpointers[(int) RID_STATIC])
13815 error ("storage class %qD applied to template instantiation",
13821 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
13823 /* DR 259 [temp.spec].
13825 Both an explicit instantiation and a declaration of an explicit
13826 specialization shall not appear in a program unless the explicit
13827 instantiation follows a declaration of the explicit specialization.
13829 For a given set of template parameters, if an explicit
13830 instantiation of a template appears after a declaration of an
13831 explicit specialization for that template, the explicit
13832 instantiation has no effect. */
13835 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
13839 No program shall explicitly instantiate any template more
13842 If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
13843 instantiation was `extern'. If EXTERN_P then the second is.
13844 These cases are OK. */
13845 previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
13847 if (!previous_instantiation_extern_p && !extern_p
13848 && (complain & tf_error))
13849 pedwarn ("duplicate explicit instantiation of %q#T", t);
13851 /* If we've already instantiated the template, just return now. */
13852 if (!CLASSTYPE_INTERFACE_ONLY (t))
13856 check_explicit_instantiation_namespace (TYPE_NAME (t));
13857 mark_class_instantiated (t, extern_p);
13865 /* In contrast to implicit instantiation, where only the
13866 declarations, and not the definitions, of members are
13867 instantiated, we have here:
13871 The explicit instantiation of a class template specialization
13872 implies the instantiation of all of its members not
13873 previously explicitly specialized in the translation unit
13874 containing the explicit instantiation.
13876 Of course, we can't instantiate member template classes, since
13877 we don't have any arguments for them. Note that the standard
13878 is unclear on whether the instantiation of the members are
13879 *explicit* instantiations or not. However, the most natural
13880 interpretation is that it should be an explicit instantiation. */
13883 for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
13884 if (TREE_CODE (tmp) == FUNCTION_DECL
13885 && DECL_TEMPLATE_INSTANTIATION (tmp))
13886 instantiate_class_member (tmp, extern_p);
13888 for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
13889 if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
13890 instantiate_class_member (tmp, extern_p);
13892 if (CLASSTYPE_NESTED_UTDS (t))
13893 binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
13894 bt_instantiate_type_proc, &storage);
13898 /* Given a function DECL, which is a specialization of TMPL, modify
13899 DECL to be a re-instantiation of TMPL with the same template
13900 arguments. TMPL should be the template into which tsubst'ing
13901 should occur for DECL, not the most general template.
13903 One reason for doing this is a scenario like this:
13906 void f(const T&, int i);
13908 void g() { f(3, 7); }
13911 void f(const T& t, const int i) { }
13913 Note that when the template is first instantiated, with
13914 instantiate_template, the resulting DECL will have no name for the
13915 first parameter, and the wrong type for the second. So, when we go
13916 to instantiate the DECL, we regenerate it. */
13919 regenerate_decl_from_template (tree decl, tree tmpl)
13921 /* The arguments used to instantiate DECL, from the most general
13926 args = DECL_TI_ARGS (decl);
13927 code_pattern = DECL_TEMPLATE_RESULT (tmpl);
13929 /* Make sure that we can see identifiers, and compute access
13931 push_access_scope (decl);
13933 if (TREE_CODE (decl) == FUNCTION_DECL)
13941 args_depth = TMPL_ARGS_DEPTH (args);
13942 parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
13943 if (args_depth > parms_depth)
13944 args = get_innermost_template_args (args, parms_depth);
13946 specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
13947 args, tf_error, NULL_TREE);
13949 TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
13952 /* Merge parameter declarations. */
13953 decl_parm = skip_artificial_parms_for (decl,
13954 DECL_ARGUMENTS (decl));
13956 = skip_artificial_parms_for (code_pattern,
13957 DECL_ARGUMENTS (code_pattern));
13958 while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
13963 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
13964 DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
13965 parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
13967 parm_type = type_decays_to (parm_type);
13968 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
13969 TREE_TYPE (decl_parm) = parm_type;
13970 attributes = DECL_ATTRIBUTES (pattern_parm);
13971 if (DECL_ATTRIBUTES (decl_parm) != attributes)
13973 DECL_ATTRIBUTES (decl_parm) = attributes;
13974 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
13976 decl_parm = TREE_CHAIN (decl_parm);
13977 pattern_parm = TREE_CHAIN (pattern_parm);
13979 /* Merge any parameters that match with the function parameter
13981 if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
13984 tree expanded_types;
13985 /* Expand the TYPE_PACK_EXPANSION that provides the types for
13986 the parameters in this function parameter pack. */
13987 expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm),
13988 args, tf_error, NULL_TREE);
13989 len = TREE_VEC_LENGTH (expanded_types);
13990 for (i = 0; i < len; i++)
13995 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
13996 /* Rename the parameter to include the index. */
13997 DECL_NAME (decl_parm) =
13998 make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
13999 parm_type = TREE_VEC_ELT (expanded_types, i);
14000 parm_type = type_decays_to (parm_type);
14001 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14002 TREE_TYPE (decl_parm) = parm_type;
14003 attributes = DECL_ATTRIBUTES (pattern_parm);
14004 if (DECL_ATTRIBUTES (decl_parm) != attributes)
14006 DECL_ATTRIBUTES (decl_parm) = attributes;
14007 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14009 decl_parm = TREE_CHAIN (decl_parm);
14012 /* Merge additional specifiers from the CODE_PATTERN. */
14013 if (DECL_DECLARED_INLINE_P (code_pattern)
14014 && !DECL_DECLARED_INLINE_P (decl))
14015 DECL_DECLARED_INLINE_P (decl) = 1;
14016 if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
14017 DECL_INLINE (decl) = 1;
14019 else if (TREE_CODE (decl) == VAR_DECL)
14020 DECL_INITIAL (decl) =
14021 tsubst_expr (DECL_INITIAL (code_pattern), args,
14022 tf_error, DECL_TI_TEMPLATE (decl),
14023 /*integral_constant_expression_p=*/false);
14025 gcc_unreachable ();
14027 pop_access_scope (decl);
14030 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
14031 substituted to get DECL. */
14034 template_for_substitution (tree decl)
14036 tree tmpl = DECL_TI_TEMPLATE (decl);
14038 /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
14039 for the instantiation. This is not always the most general
14040 template. Consider, for example:
14043 struct S { template <class U> void f();
14044 template <> void f<int>(); };
14046 and an instantiation of S<double>::f<int>. We want TD to be the
14047 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
14048 while (/* An instantiation cannot have a definition, so we need a
14049 more general template. */
14050 DECL_TEMPLATE_INSTANTIATION (tmpl)
14051 /* We must also deal with friend templates. Given:
14053 template <class T> struct S {
14054 template <class U> friend void f() {};
14057 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
14058 so far as the language is concerned, but that's still
14059 where we get the pattern for the instantiation from. On
14060 other hand, if the definition comes outside the class, say:
14062 template <class T> struct S {
14063 template <class U> friend void f();
14065 template <class U> friend void f() {}
14067 we don't need to look any further. That's what the check for
14068 DECL_INITIAL is for. */
14069 || (TREE_CODE (decl) == FUNCTION_DECL
14070 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
14071 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
14073 /* The present template, TD, should not be a definition. If it
14074 were a definition, we should be using it! Note that we
14075 cannot restructure the loop to just keep going until we find
14076 a template with a definition, since that might go too far if
14077 a specialization was declared, but not defined. */
14078 gcc_assert (TREE_CODE (decl) != VAR_DECL
14079 || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
14081 /* Fetch the more general template. */
14082 tmpl = DECL_TI_TEMPLATE (tmpl);
14088 /* Produce the definition of D, a _DECL generated from a template. If
14089 DEFER_OK is nonzero, then we don't have to actually do the
14090 instantiation now; we just have to do it sometime. Normally it is
14091 an error if this is an explicit instantiation but D is undefined.
14092 EXPL_INST_CLASS_MEM_P is true iff D is a member of an
14093 explicitly instantiated class template. */
14096 instantiate_decl (tree d, int defer_ok,
14097 bool expl_inst_class_mem_p)
14099 tree tmpl = DECL_TI_TEMPLATE (d);
14106 bool pattern_defined;
14108 location_t saved_loc = input_location;
14109 int saved_in_system_header = in_system_header;
14112 /* This function should only be used to instantiate templates for
14113 functions and static member variables. */
14114 gcc_assert (TREE_CODE (d) == FUNCTION_DECL
14115 || TREE_CODE (d) == VAR_DECL);
14117 /* Variables are never deferred; if instantiation is required, they
14118 are instantiated right away. That allows for better code in the
14119 case that an expression refers to the value of the variable --
14120 if the variable has a constant value the referring expression can
14121 take advantage of that fact. */
14122 if (TREE_CODE (d) == VAR_DECL)
14125 /* Don't instantiate cloned functions. Instead, instantiate the
14126 functions they cloned. */
14127 if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
14128 d = DECL_CLONED_FUNCTION (d);
14130 if (DECL_TEMPLATE_INSTANTIATED (d))
14131 /* D has already been instantiated. It might seem reasonable to
14132 check whether or not D is an explicit instantiation, and, if so,
14133 stop here. But when an explicit instantiation is deferred
14134 until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
14135 is set, even though we still need to do the instantiation. */
14138 /* If we already have a specialization of this declaration, then
14139 there's no reason to instantiate it. Note that
14140 retrieve_specialization gives us both instantiations and
14141 specializations, so we must explicitly check
14142 DECL_TEMPLATE_SPECIALIZATION. */
14143 gen_tmpl = most_general_template (tmpl);
14144 gen_args = DECL_TI_ARGS (d);
14145 spec = retrieve_specialization (gen_tmpl, gen_args,
14146 /*class_specializations_p=*/false);
14147 if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
14150 /* This needs to happen before any tsubsting. */
14151 if (! push_tinst_level (d))
14154 timevar_push (TV_PARSE);
14156 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
14157 for the instantiation. */
14158 td = template_for_substitution (d);
14159 code_pattern = DECL_TEMPLATE_RESULT (td);
14161 /* We should never be trying to instantiate a member of a class
14162 template or partial specialization. */
14163 gcc_assert (d != code_pattern);
14165 if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
14166 || DECL_TEMPLATE_SPECIALIZATION (td))
14167 /* In the case of a friend template whose definition is provided
14168 outside the class, we may have too many arguments. Drop the
14169 ones we don't need. The same is true for specializations. */
14170 args = get_innermost_template_args
14171 (gen_args, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td)));
14175 if (TREE_CODE (d) == FUNCTION_DECL)
14176 pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
14178 pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
14180 /* We may be in the middle of deferred access check. Disable it now. */
14181 push_deferring_access_checks (dk_no_deferred);
14183 /* Unless an explicit instantiation directive has already determined
14184 the linkage of D, remember that a definition is available for
14186 if (pattern_defined
14187 && !DECL_INTERFACE_KNOWN (d)
14188 && !DECL_NOT_REALLY_EXTERN (d))
14189 mark_definable (d);
14191 input_location = DECL_SOURCE_LOCATION (d);
14192 in_system_header = DECL_IN_SYSTEM_HEADER (d);
14194 /* If D is a member of an explicitly instantiated class template,
14195 and no definition is available, treat it like an implicit
14197 if (!pattern_defined && expl_inst_class_mem_p
14198 && DECL_EXPLICIT_INSTANTIATION (d))
14200 DECL_NOT_REALLY_EXTERN (d) = 0;
14201 DECL_INTERFACE_KNOWN (d) = 0;
14202 SET_DECL_IMPLICIT_INSTANTIATION (d);
14207 /* Recheck the substitutions to obtain any warning messages
14208 about ignoring cv qualifiers. */
14209 tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
14210 tree type = TREE_TYPE (gen);
14212 /* Make sure that we can see identifiers, and compute access
14213 correctly. D is already the target FUNCTION_DECL with the
14215 push_access_scope (d);
14217 if (TREE_CODE (gen) == FUNCTION_DECL)
14219 tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
14220 tsubst_exception_specification (type, gen_args, tf_warning_or_error,
14222 /* Don't simply tsubst the function type, as that will give
14223 duplicate warnings about poor parameter qualifications.
14224 The function arguments are the same as the decl_arguments
14225 without the top level cv qualifiers. */
14226 type = TREE_TYPE (type);
14228 tsubst (type, gen_args, tf_warning_or_error, d);
14230 pop_access_scope (d);
14233 /* Check to see whether we know that this template will be
14234 instantiated in some other file, as with "extern template"
14236 external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
14237 /* In general, we do not instantiate such templates... */
14239 /* ... but we instantiate inline functions so that we can inline
14241 && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d))
14242 /* ... we instantiate static data members whose values are
14243 needed in integral constant expressions. */
14244 && ! (TREE_CODE (d) == VAR_DECL
14245 && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (d)))
14247 /* Defer all other templates, unless we have been explicitly
14248 forbidden from doing so. */
14249 if (/* If there is no definition, we cannot instantiate the
14252 /* If it's OK to postpone instantiation, do so. */
14254 /* If this is a static data member that will be defined
14255 elsewhere, we don't want to instantiate the entire data
14256 member, but we do want to instantiate the initializer so that
14257 we can substitute that elsewhere. */
14258 || (external_p && TREE_CODE (d) == VAR_DECL))
14260 /* The definition of the static data member is now required so
14261 we must substitute the initializer. */
14262 if (TREE_CODE (d) == VAR_DECL
14263 && !DECL_INITIAL (d)
14264 && DECL_INITIAL (code_pattern))
14269 ns = decl_namespace_context (d);
14270 push_nested_namespace (ns);
14271 push_nested_class (DECL_CONTEXT (d));
14272 init = tsubst_expr (DECL_INITIAL (code_pattern),
14274 tf_warning_or_error, NULL_TREE,
14275 /*integral_constant_expression_p=*/false);
14276 cp_finish_decl (d, init, /*init_const_expr_p=*/false,
14277 /*asmspec_tree=*/NULL_TREE,
14278 LOOKUP_ONLYCONVERTING);
14279 pop_nested_class ();
14280 pop_nested_namespace (ns);
14283 /* We restore the source position here because it's used by
14284 add_pending_template. */
14285 input_location = saved_loc;
14287 if (at_eof && !pattern_defined
14288 && DECL_EXPLICIT_INSTANTIATION (d))
14291 The definition of a non-exported function template, a
14292 non-exported member function template, or a non-exported
14293 member function or static data member of a class template
14294 shall be present in every translation unit in which it is
14295 explicitly instantiated. */
14297 ("explicit instantiation of %qD but no definition available", d);
14299 /* ??? Historically, we have instantiated inline functions, even
14300 when marked as "extern template". */
14301 if (!(external_p && TREE_CODE (d) == VAR_DECL))
14302 add_pending_template (d);
14305 /* Tell the repository that D is available in this translation unit
14306 -- and see if it is supposed to be instantiated here. */
14307 if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
14309 /* In a PCH file, despite the fact that the repository hasn't
14310 requested instantiation in the PCH it is still possible that
14311 an instantiation will be required in a file that includes the
14314 add_pending_template (d);
14315 /* Instantiate inline functions so that the inliner can do its
14316 job, even though we'll not be emitting a copy of this
14318 if (!(TREE_CODE (d) == FUNCTION_DECL
14319 && flag_inline_trees
14320 && DECL_DECLARED_INLINE_P (d)))
14324 need_push = !cfun || !global_bindings_p ();
14326 push_to_top_level ();
14328 /* Mark D as instantiated so that recursive calls to
14329 instantiate_decl do not try to instantiate it again. */
14330 DECL_TEMPLATE_INSTANTIATED (d) = 1;
14332 /* Regenerate the declaration in case the template has been modified
14333 by a subsequent redeclaration. */
14334 regenerate_decl_from_template (d, td);
14336 /* We already set the file and line above. Reset them now in case
14337 they changed as a result of calling regenerate_decl_from_template. */
14338 input_location = DECL_SOURCE_LOCATION (d);
14340 if (TREE_CODE (d) == VAR_DECL)
14344 /* Clear out DECL_RTL; whatever was there before may not be right
14345 since we've reset the type of the declaration. */
14346 SET_DECL_RTL (d, NULL_RTX);
14347 DECL_IN_AGGR_P (d) = 0;
14349 /* The initializer is placed in DECL_INITIAL by
14350 regenerate_decl_from_template. Pull it out so that
14351 finish_decl can process it. */
14352 init = DECL_INITIAL (d);
14353 DECL_INITIAL (d) = NULL_TREE;
14354 DECL_INITIALIZED_P (d) = 0;
14356 /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
14357 initializer. That function will defer actual emission until
14358 we have a chance to determine linkage. */
14359 DECL_EXTERNAL (d) = 0;
14361 /* Enter the scope of D so that access-checking works correctly. */
14362 push_nested_class (DECL_CONTEXT (d));
14363 finish_decl (d, init, NULL_TREE);
14364 pop_nested_class ();
14366 else if (TREE_CODE (d) == FUNCTION_DECL)
14368 htab_t saved_local_specializations;
14373 /* Save away the current list, in case we are instantiating one
14374 template from within the body of another. */
14375 saved_local_specializations = local_specializations;
14377 /* Set up the list of local specializations. */
14378 local_specializations = htab_create (37,
14379 hash_local_specialization,
14380 eq_local_specializations,
14383 /* Set up context. */
14384 start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
14386 /* Create substitution entries for the parameters. */
14387 subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
14388 tmpl_parm = DECL_ARGUMENTS (subst_decl);
14389 spec_parm = DECL_ARGUMENTS (d);
14390 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
14392 register_local_specialization (spec_parm, tmpl_parm);
14393 spec_parm = skip_artificial_parms_for (d, spec_parm);
14394 tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
14396 while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
14398 register_local_specialization (spec_parm, tmpl_parm);
14399 tmpl_parm = TREE_CHAIN (tmpl_parm);
14400 spec_parm = TREE_CHAIN (spec_parm);
14402 if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
14404 /* Collect all of the extra "packed" parameters into an
14408 tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
14409 tree argtypepack = make_node (TYPE_ARGUMENT_PACK);
14413 /* Count how many parameters remain. */
14414 for (t = spec_parm; t; t = TREE_CHAIN (t))
14417 /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters. */
14418 parmvec = make_tree_vec (len);
14419 parmtypevec = make_tree_vec (len);
14420 for(i = 0; i < len; i++, spec_parm = TREE_CHAIN (spec_parm))
14422 TREE_VEC_ELT (parmvec, i) = spec_parm;
14423 TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
14426 /* Build the argument packs. */
14427 SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
14428 SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
14429 TREE_TYPE (argpack) = argtypepack;
14431 /* Register the (value) argument pack as a specialization of
14432 TMPL_PARM, then move on. */
14433 register_local_specialization (argpack, tmpl_parm);
14434 tmpl_parm = TREE_CHAIN (tmpl_parm);
14436 gcc_assert (!spec_parm);
14438 /* Substitute into the body of the function. */
14439 tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
14440 tf_warning_or_error, tmpl,
14441 /*integral_constant_expression_p=*/false);
14443 /* We don't need the local specializations any more. */
14444 htab_delete (local_specializations);
14445 local_specializations = saved_local_specializations;
14447 /* Finish the function. */
14448 d = finish_function (0);
14449 expand_or_defer_fn (d);
14452 /* We're not deferring instantiation any more. */
14453 TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
14456 pop_from_top_level ();
14459 input_location = saved_loc;
14460 in_system_header = saved_in_system_header;
14461 pop_deferring_access_checks ();
14462 pop_tinst_level ();
14464 timevar_pop (TV_PARSE);
14469 /* Run through the list of templates that we wish we could
14470 instantiate, and instantiate any we can. RETRIES is the
14471 number of times we retry pending template instantiation. */
14474 instantiate_pending_templates (int retries)
14477 tree last = NULL_TREE;
14479 location_t saved_loc = input_location;
14480 int saved_in_system_header = in_system_header;
14482 /* Instantiating templates may trigger vtable generation. This in turn
14483 may require further template instantiations. We place a limit here
14484 to avoid infinite loop. */
14485 if (pending_templates && retries >= max_tinst_depth)
14487 tree decl = TREE_VALUE (pending_templates);
14489 error ("template instantiation depth exceeds maximum of %d"
14490 " instantiating %q+D, possibly from virtual table generation"
14491 " (use -ftemplate-depth-NN to increase the maximum)",
14492 max_tinst_depth, decl);
14493 if (TREE_CODE (decl) == FUNCTION_DECL)
14494 /* Pretend that we defined it. */
14495 DECL_INITIAL (decl) = error_mark_node;
14503 t = &pending_templates;
14506 tree instantiation = TREE_VALUE (*t);
14508 reopen_tinst_level (TREE_PURPOSE (*t));
14510 if (TYPE_P (instantiation))
14514 if (!COMPLETE_TYPE_P (instantiation))
14516 instantiate_class_template (instantiation);
14517 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
14518 for (fn = TYPE_METHODS (instantiation);
14520 fn = TREE_CHAIN (fn))
14521 if (! DECL_ARTIFICIAL (fn))
14522 instantiate_decl (fn,
14524 /*expl_inst_class_mem_p=*/false);
14525 if (COMPLETE_TYPE_P (instantiation))
14529 if (COMPLETE_TYPE_P (instantiation))
14530 /* If INSTANTIATION has been instantiated, then we don't
14531 need to consider it again in the future. */
14532 *t = TREE_CHAIN (*t);
14536 t = &TREE_CHAIN (*t);
14541 if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
14542 && !DECL_TEMPLATE_INSTANTIATED (instantiation))
14545 = instantiate_decl (instantiation,
14547 /*expl_inst_class_mem_p=*/false);
14548 if (DECL_TEMPLATE_INSTANTIATED (instantiation))
14552 if (DECL_TEMPLATE_SPECIALIZATION (instantiation)
14553 || DECL_TEMPLATE_INSTANTIATED (instantiation))
14554 /* If INSTANTIATION has been instantiated, then we don't
14555 need to consider it again in the future. */
14556 *t = TREE_CHAIN (*t);
14560 t = &TREE_CHAIN (*t);
14564 current_tinst_level = NULL_TREE;
14566 last_pending_template = last;
14568 while (reconsider);
14570 input_location = saved_loc;
14571 in_system_header = saved_in_system_header;
14574 /* Substitute ARGVEC into T, which is a list of initializers for
14575 either base class or a non-static data member. The TREE_PURPOSEs
14576 are DECLs, and the TREE_VALUEs are the initializer values. Used by
14577 instantiate_decl. */
14580 tsubst_initializer_list (tree t, tree argvec)
14582 tree inits = NULL_TREE;
14584 for (; t; t = TREE_CHAIN (t))
14588 tree expanded_bases = NULL_TREE;
14589 tree expanded_arguments = NULL_TREE;
14592 if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
14597 /* Expand the base class expansion type into separate base
14599 expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
14600 tf_warning_or_error,
14602 if (expanded_bases == error_mark_node)
14605 /* We'll be building separate TREE_LISTs of arguments for
14607 len = TREE_VEC_LENGTH (expanded_bases);
14608 expanded_arguments = make_tree_vec (len);
14609 for (i = 0; i < len; i++)
14610 TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
14612 /* Build a dummy EXPR_PACK_EXPANSION that will be used to
14613 expand each argument in the TREE_VALUE of t. */
14614 expr = make_node (EXPR_PACK_EXPANSION);
14615 PACK_EXPANSION_PARAMETER_PACKS (expr) =
14616 PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
14618 /* Substitute parameter packs into each argument in the
14620 in_base_initializer = 1;
14621 for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
14623 tree expanded_exprs;
14625 /* Expand the argument. */
14626 SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
14627 expanded_exprs = tsubst_pack_expansion (expr, argvec,
14628 tf_warning_or_error,
14631 /* Prepend each of the expanded expressions to the
14632 corresponding TREE_LIST in EXPANDED_ARGUMENTS. */
14633 for (i = 0; i < len; i++)
14635 TREE_VEC_ELT (expanded_arguments, i) =
14636 tree_cons (NULL_TREE, TREE_VEC_ELT (expanded_exprs, i),
14637 TREE_VEC_ELT (expanded_arguments, i));
14640 in_base_initializer = 0;
14642 /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
14643 since we built them backwards. */
14644 for (i = 0; i < len; i++)
14646 TREE_VEC_ELT (expanded_arguments, i) =
14647 nreverse (TREE_VEC_ELT (expanded_arguments, i));
14651 for (i = 0; i < len; ++i)
14653 if (expanded_bases)
14655 decl = TREE_VEC_ELT (expanded_bases, i);
14656 decl = expand_member_init (decl);
14657 init = TREE_VEC_ELT (expanded_arguments, i);
14661 decl = tsubst_copy (TREE_PURPOSE (t), argvec,
14662 tf_warning_or_error, NULL_TREE);
14664 decl = expand_member_init (decl);
14665 if (decl && !DECL_P (decl))
14666 in_base_initializer = 1;
14668 init = tsubst_expr (TREE_VALUE (t), argvec,
14669 tf_warning_or_error, NULL_TREE,
14670 /*integral_constant_expression_p=*/false);
14671 in_base_initializer = 0;
14676 init = build_tree_list (decl, init);
14677 TREE_CHAIN (init) = inits;
14685 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
14688 set_current_access_from_decl (tree decl)
14690 if (TREE_PRIVATE (decl))
14691 current_access_specifier = access_private_node;
14692 else if (TREE_PROTECTED (decl))
14693 current_access_specifier = access_protected_node;
14695 current_access_specifier = access_public_node;
14698 /* Instantiate an enumerated type. TAG is the template type, NEWTAG
14699 is the instantiation (which should have been created with
14700 start_enum) and ARGS are the template arguments to use. */
14703 tsubst_enum (tree tag, tree newtag, tree args)
14707 for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
14712 decl = TREE_VALUE (e);
14713 /* Note that in a template enum, the TREE_VALUE is the
14714 CONST_DECL, not the corresponding INTEGER_CST. */
14715 value = tsubst_expr (DECL_INITIAL (decl),
14716 args, tf_warning_or_error, NULL_TREE,
14717 /*integral_constant_expression_p=*/true);
14719 /* Give this enumeration constant the correct access. */
14720 set_current_access_from_decl (decl);
14722 /* Actually build the enumerator itself. */
14723 build_enumerator (DECL_NAME (decl), value, newtag);
14726 finish_enum (newtag);
14727 DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
14728 = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
14731 /* DECL is a FUNCTION_DECL that is a template specialization. Return
14732 its type -- but without substituting the innermost set of template
14733 arguments. So, innermost set of template parameters will appear in
14737 get_mostly_instantiated_function_type (tree decl)
14745 tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
14746 targs = DECL_TI_ARGS (decl);
14747 tparms = DECL_TEMPLATE_PARMS (tmpl);
14748 parm_depth = TMPL_PARMS_DEPTH (tparms);
14750 /* There should be as many levels of arguments as there are levels
14752 gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
14754 fn_type = TREE_TYPE (tmpl);
14756 if (parm_depth == 1)
14757 /* No substitution is necessary. */
14761 int i, save_access_control;
14764 /* Replace the innermost level of the TARGS with NULL_TREEs to
14765 let tsubst know not to substitute for those parameters. */
14766 partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
14767 for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
14768 SET_TMPL_ARGS_LEVEL (partial_args, i,
14769 TMPL_ARGS_LEVEL (targs, i));
14770 SET_TMPL_ARGS_LEVEL (partial_args,
14771 TMPL_ARGS_DEPTH (targs),
14772 make_tree_vec (DECL_NTPARMS (tmpl)));
14774 /* Disable access control as this function is used only during
14776 save_access_control = flag_access_control;
14777 flag_access_control = 0;
14779 ++processing_template_decl;
14780 /* Now, do the (partial) substitution to figure out the
14781 appropriate function type. */
14782 fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
14783 --processing_template_decl;
14785 /* Substitute into the template parameters to obtain the real
14786 innermost set of parameters. This step is important if the
14787 innermost set of template parameters contains value
14788 parameters whose types depend on outer template parameters. */
14789 TREE_VEC_LENGTH (partial_args)--;
14790 tparms = tsubst_template_parms (tparms, partial_args, tf_error);
14792 flag_access_control = save_access_control;
14798 /* Return truthvalue if we're processing a template different from
14799 the last one involved in diagnostics. */
14801 problematic_instantiation_changed (void)
14803 return last_template_error_tick != tinst_level_tick;
14806 /* Remember current template involved in diagnostics. */
14808 record_last_problematic_instantiation (void)
14810 last_template_error_tick = tinst_level_tick;
14814 current_instantiation (void)
14816 return current_tinst_level;
14819 /* [temp.param] Check that template non-type parm TYPE is of an allowable
14820 type. Return zero for ok, nonzero for disallowed. Issue error and
14821 warning messages under control of COMPLAIN. */
14824 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
14826 if (INTEGRAL_TYPE_P (type))
14828 else if (POINTER_TYPE_P (type))
14830 else if (TYPE_PTR_TO_MEMBER_P (type))
14832 else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
14834 else if (TREE_CODE (type) == TYPENAME_TYPE)
14837 if (complain & tf_error)
14838 error ("%q#T is not a valid type for a template constant parameter", type);
14842 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
14843 Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
14846 dependent_type_p_r (tree type)
14852 A type is dependent if it is:
14854 -- a template parameter. Template template parameters are types
14855 for us (since TYPE_P holds true for them) so we handle
14857 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
14858 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
14860 /* -- a qualified-id with a nested-name-specifier which contains a
14861 class-name that names a dependent type or whose unqualified-id
14862 names a dependent type. */
14863 if (TREE_CODE (type) == TYPENAME_TYPE)
14865 /* -- a cv-qualified type where the cv-unqualified type is
14867 type = TYPE_MAIN_VARIANT (type);
14868 /* -- a compound type constructed from any dependent type. */
14869 if (TYPE_PTR_TO_MEMBER_P (type))
14870 return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
14871 || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
14873 else if (TREE_CODE (type) == POINTER_TYPE
14874 || TREE_CODE (type) == REFERENCE_TYPE)
14875 return dependent_type_p (TREE_TYPE (type));
14876 else if (TREE_CODE (type) == FUNCTION_TYPE
14877 || TREE_CODE (type) == METHOD_TYPE)
14881 if (dependent_type_p (TREE_TYPE (type)))
14883 for (arg_type = TYPE_ARG_TYPES (type);
14885 arg_type = TREE_CHAIN (arg_type))
14886 if (dependent_type_p (TREE_VALUE (arg_type)))
14890 /* -- an array type constructed from any dependent type or whose
14891 size is specified by a constant expression that is
14892 value-dependent. */
14893 if (TREE_CODE (type) == ARRAY_TYPE)
14895 if (TYPE_DOMAIN (type)
14896 && ((value_dependent_expression_p
14897 (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
14898 || (type_dependent_expression_p
14899 (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
14901 return dependent_type_p (TREE_TYPE (type));
14904 /* -- a template-id in which either the template name is a template
14906 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
14908 /* ... or any of the template arguments is a dependent type or
14909 an expression that is type-dependent or value-dependent. */
14910 else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
14911 && (any_dependent_template_arguments_p
14912 (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
14915 /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
14916 argument of the `typeof' expression is not type-dependent, then
14917 it should already been have resolved. */
14918 if (TREE_CODE (type) == TYPEOF_TYPE
14919 || TREE_CODE (type) == DECLTYPE_TYPE)
14922 /* A template argument pack is dependent if any of its packed
14924 if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
14926 tree args = ARGUMENT_PACK_ARGS (type);
14927 int i, len = TREE_VEC_LENGTH (args);
14928 for (i = 0; i < len; ++i)
14929 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
14933 /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
14934 be template parameters. */
14935 if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
14938 /* The standard does not specifically mention types that are local
14939 to template functions or local classes, but they should be
14940 considered dependent too. For example:
14942 template <int I> void f() {
14947 The size of `E' cannot be known until the value of `I' has been
14948 determined. Therefore, `E' must be considered dependent. */
14949 scope = TYPE_CONTEXT (type);
14950 if (scope && TYPE_P (scope))
14951 return dependent_type_p (scope);
14952 else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
14953 return type_dependent_expression_p (scope);
14955 /* Other types are non-dependent. */
14959 /* Returns TRUE if TYPE is dependent, in the sense of
14960 [temp.dep.type]. */
14963 dependent_type_p (tree type)
14965 /* If there are no template parameters in scope, then there can't be
14966 any dependent types. */
14967 if (!processing_template_decl)
14969 /* If we are not processing a template, then nobody should be
14970 providing us with a dependent type. */
14972 gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM);
14976 /* If the type is NULL, we have not computed a type for the entity
14977 in question; in that case, the type is dependent. */
14981 /* Erroneous types can be considered non-dependent. */
14982 if (type == error_mark_node)
14985 /* If we have not already computed the appropriate value for TYPE,
14987 if (!TYPE_DEPENDENT_P_VALID (type))
14989 TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
14990 TYPE_DEPENDENT_P_VALID (type) = 1;
14993 return TYPE_DEPENDENT_P (type);
14996 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION. */
14999 dependent_scope_ref_p (tree expression, bool criterion (tree))
15004 gcc_assert (TREE_CODE (expression) == SCOPE_REF);
15006 if (!TYPE_P (TREE_OPERAND (expression, 0)))
15009 scope = TREE_OPERAND (expression, 0);
15010 name = TREE_OPERAND (expression, 1);
15014 An id-expression is type-dependent if it contains a
15015 nested-name-specifier that contains a class-name that names a
15017 /* The suggested resolution to Core Issue 2 implies that if the
15018 qualifying type is the current class, then we must peek
15021 && currently_open_class (scope)
15022 && !criterion (name))
15024 if (dependent_type_p (scope))
15030 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
15031 [temp.dep.constexpr]. EXPRESSION is already known to be a constant
15035 value_dependent_expression_p (tree expression)
15037 if (!processing_template_decl)
15040 /* A name declared with a dependent type. */
15041 if (DECL_P (expression) && type_dependent_expression_p (expression))
15044 switch (TREE_CODE (expression))
15046 case IDENTIFIER_NODE:
15047 /* A name that has not been looked up -- must be dependent. */
15050 case TEMPLATE_PARM_INDEX:
15051 /* A non-type template parm. */
15055 /* A non-type template parm. */
15056 if (DECL_TEMPLATE_PARM_P (expression))
15061 /* A constant with integral or enumeration type and is initialized
15062 with an expression that is value-dependent. */
15063 if (DECL_INITIAL (expression)
15064 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
15065 && value_dependent_expression_p (DECL_INITIAL (expression)))
15069 case DYNAMIC_CAST_EXPR:
15070 case STATIC_CAST_EXPR:
15071 case CONST_CAST_EXPR:
15072 case REINTERPRET_CAST_EXPR:
15074 /* These expressions are value-dependent if the type to which
15075 the cast occurs is dependent or the expression being casted
15076 is value-dependent. */
15078 tree type = TREE_TYPE (expression);
15080 if (dependent_type_p (type))
15083 /* A functional cast has a list of operands. */
15084 expression = TREE_OPERAND (expression, 0);
15087 /* If there are no operands, it must be an expression such
15088 as "int()". This should not happen for aggregate types
15089 because it would form non-constant expressions. */
15090 gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
15095 if (TREE_CODE (expression) == TREE_LIST)
15096 return any_value_dependent_elements_p (expression);
15098 return value_dependent_expression_p (expression);
15103 /* A `sizeof' expression is value-dependent if the operand is
15104 type-dependent or is a pack expansion. */
15105 expression = TREE_OPERAND (expression, 0);
15106 if (PACK_EXPANSION_P (expression))
15108 else if (TYPE_P (expression))
15109 return dependent_type_p (expression);
15110 return type_dependent_expression_p (expression);
15113 return dependent_scope_ref_p (expression, value_dependent_expression_p);
15115 case COMPONENT_REF:
15116 return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
15117 || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
15120 /* A CALL_EXPR may appear in a constant expression if it is a
15121 call to a builtin function, e.g., __builtin_constant_p. All
15122 such calls are value-dependent. */
15125 case NONTYPE_ARGUMENT_PACK:
15126 /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
15127 is value-dependent. */
15129 tree values = ARGUMENT_PACK_ARGS (expression);
15130 int i, len = TREE_VEC_LENGTH (values);
15132 for (i = 0; i < len; ++i)
15133 if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
15141 tree type2 = TRAIT_EXPR_TYPE2 (expression);
15142 return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
15143 || (type2 ? dependent_type_p (type2) : false));
15147 return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
15148 || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
15151 /* A constant expression is value-dependent if any subexpression is
15152 value-dependent. */
15153 switch (TREE_CODE_CLASS (TREE_CODE (expression)))
15155 case tcc_reference:
15157 return (value_dependent_expression_p
15158 (TREE_OPERAND (expression, 0)));
15160 case tcc_comparison:
15162 return ((value_dependent_expression_p
15163 (TREE_OPERAND (expression, 0)))
15164 || (value_dependent_expression_p
15165 (TREE_OPERAND (expression, 1))));
15167 case tcc_expression:
15171 for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
15172 /* In some cases, some of the operands may be missing.
15173 (For example, in the case of PREDECREMENT_EXPR, the
15174 amount to increment by may be missing.) That doesn't
15175 make the expression dependent. */
15176 if (TREE_OPERAND (expression, i)
15177 && (value_dependent_expression_p
15178 (TREE_OPERAND (expression, i))))
15188 /* The expression is not value-dependent. */
15192 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
15193 [temp.dep.expr]. */
15196 type_dependent_expression_p (tree expression)
15198 if (!processing_template_decl)
15201 if (expression == error_mark_node)
15204 /* An unresolved name is always dependent. */
15205 if (TREE_CODE (expression) == IDENTIFIER_NODE
15206 || TREE_CODE (expression) == USING_DECL)
15209 /* Some expression forms are never type-dependent. */
15210 if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
15211 || TREE_CODE (expression) == SIZEOF_EXPR
15212 || TREE_CODE (expression) == ALIGNOF_EXPR
15213 || TREE_CODE (expression) == TRAIT_EXPR
15214 || TREE_CODE (expression) == TYPEID_EXPR
15215 || TREE_CODE (expression) == DELETE_EXPR
15216 || TREE_CODE (expression) == VEC_DELETE_EXPR
15217 || TREE_CODE (expression) == THROW_EXPR)
15220 /* The types of these expressions depends only on the type to which
15221 the cast occurs. */
15222 if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
15223 || TREE_CODE (expression) == STATIC_CAST_EXPR
15224 || TREE_CODE (expression) == CONST_CAST_EXPR
15225 || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
15226 || TREE_CODE (expression) == CAST_EXPR)
15227 return dependent_type_p (TREE_TYPE (expression));
15229 /* The types of these expressions depends only on the type created
15230 by the expression. */
15231 if (TREE_CODE (expression) == NEW_EXPR
15232 || TREE_CODE (expression) == VEC_NEW_EXPR)
15234 /* For NEW_EXPR tree nodes created inside a template, either
15235 the object type itself or a TREE_LIST may appear as the
15237 tree type = TREE_OPERAND (expression, 1);
15238 if (TREE_CODE (type) == TREE_LIST)
15239 /* This is an array type. We need to check array dimensions
15241 return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
15242 || value_dependent_expression_p
15243 (TREE_OPERAND (TREE_VALUE (type), 1));
15245 return dependent_type_p (type);
15248 if (TREE_CODE (expression) == SCOPE_REF
15249 && dependent_scope_ref_p (expression,
15250 type_dependent_expression_p))
15253 if (TREE_CODE (expression) == FUNCTION_DECL
15254 && DECL_LANG_SPECIFIC (expression)
15255 && DECL_TEMPLATE_INFO (expression)
15256 && (any_dependent_template_arguments_p
15257 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
15260 if (TREE_CODE (expression) == TEMPLATE_DECL
15261 && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
15264 if (TREE_TYPE (expression) == unknown_type_node)
15266 if (TREE_CODE (expression) == ADDR_EXPR)
15267 return type_dependent_expression_p (TREE_OPERAND (expression, 0));
15268 if (TREE_CODE (expression) == COMPONENT_REF
15269 || TREE_CODE (expression) == OFFSET_REF)
15271 if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
15273 expression = TREE_OPERAND (expression, 1);
15274 if (TREE_CODE (expression) == IDENTIFIER_NODE)
15277 /* SCOPE_REF with non-null TREE_TYPE is always non-dependent. */
15278 if (TREE_CODE (expression) == SCOPE_REF)
15281 if (TREE_CODE (expression) == BASELINK)
15282 expression = BASELINK_FUNCTIONS (expression);
15284 if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
15286 if (any_dependent_template_arguments_p
15287 (TREE_OPERAND (expression, 1)))
15289 expression = TREE_OPERAND (expression, 0);
15291 gcc_assert (TREE_CODE (expression) == OVERLOAD
15292 || TREE_CODE (expression) == FUNCTION_DECL);
15296 if (type_dependent_expression_p (OVL_CURRENT (expression)))
15298 expression = OVL_NEXT (expression);
15303 gcc_assert (TREE_CODE (expression) != TYPE_DECL);
15305 return (dependent_type_p (TREE_TYPE (expression)));
15308 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
15309 contains a type-dependent expression. */
15312 any_type_dependent_arguments_p (tree args)
15316 tree arg = TREE_VALUE (args);
15318 if (type_dependent_expression_p (arg))
15320 args = TREE_CHAIN (args);
15325 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
15326 expressions) contains any value-dependent expressions. */
15329 any_value_dependent_elements_p (tree list)
15331 for (; list; list = TREE_CHAIN (list))
15332 if (value_dependent_expression_p (TREE_VALUE (list)))
15338 /* Returns TRUE if the ARG (a template argument) is dependent. */
15341 dependent_template_arg_p (tree arg)
15343 if (!processing_template_decl)
15346 if (TREE_CODE (arg) == TEMPLATE_DECL
15347 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15348 return dependent_template_p (arg);
15349 else if (ARGUMENT_PACK_P (arg))
15351 tree args = ARGUMENT_PACK_ARGS (arg);
15352 int i, len = TREE_VEC_LENGTH (args);
15353 for (i = 0; i < len; ++i)
15355 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15361 else if (TYPE_P (arg))
15362 return dependent_type_p (arg);
15364 return (type_dependent_expression_p (arg)
15365 || value_dependent_expression_p (arg));
15368 /* Returns true if ARGS (a collection of template arguments) contains
15369 any types that require structural equality testing. */
15372 any_template_arguments_need_structural_equality_p (tree args)
15379 if (args == error_mark_node)
15382 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
15384 tree level = TMPL_ARGS_LEVEL (args, i + 1);
15385 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
15387 tree arg = TREE_VEC_ELT (level, j);
15388 tree packed_args = NULL_TREE;
15391 if (ARGUMENT_PACK_P (arg))
15393 /* Look inside the argument pack. */
15394 packed_args = ARGUMENT_PACK_ARGS (arg);
15395 len = TREE_VEC_LENGTH (packed_args);
15398 for (k = 0; k < len; ++k)
15401 arg = TREE_VEC_ELT (packed_args, k);
15403 if (error_operand_p (arg))
15405 else if (TREE_CODE (arg) == TEMPLATE_DECL
15406 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15408 else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
15410 else if (!TYPE_P (arg) && TREE_TYPE (arg)
15411 && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
15420 /* Returns true if ARGS (a collection of template arguments) contains
15421 any dependent arguments. */
15424 any_dependent_template_arguments_p (tree args)
15431 if (args == error_mark_node)
15434 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
15436 tree level = TMPL_ARGS_LEVEL (args, i + 1);
15437 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
15438 if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
15445 /* Returns TRUE if the template TMPL is dependent. */
15448 dependent_template_p (tree tmpl)
15450 if (TREE_CODE (tmpl) == OVERLOAD)
15454 if (dependent_template_p (OVL_FUNCTION (tmpl)))
15456 tmpl = OVL_CHAIN (tmpl);
15461 /* Template template parameters are dependent. */
15462 if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
15463 || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
15465 /* So are names that have not been looked up. */
15466 if (TREE_CODE (tmpl) == SCOPE_REF
15467 || TREE_CODE (tmpl) == IDENTIFIER_NODE)
15469 /* So are member templates of dependent classes. */
15470 if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
15471 return dependent_type_p (DECL_CONTEXT (tmpl));
15475 /* Returns TRUE if the specialization TMPL<ARGS> is dependent. */
15478 dependent_template_id_p (tree tmpl, tree args)
15480 return (dependent_template_p (tmpl)
15481 || any_dependent_template_arguments_p (args));
15484 /* TYPE is a TYPENAME_TYPE. Returns the ordinary TYPE to which the
15485 TYPENAME_TYPE corresponds. Returns the original TYPENAME_TYPE if
15486 no such TYPE can be found. Note that this function peers inside
15487 uninstantiated templates and therefore should be used only in
15488 extremely limited situations. ONLY_CURRENT_P restricts this
15489 peering to the currently open classes hierarchy (which is required
15490 when comparing types). */
15493 resolve_typename_type (tree type, bool only_current_p)
15502 gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
15504 scope = TYPE_CONTEXT (type);
15505 name = TYPE_IDENTIFIER (type);
15507 /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
15508 it first before we can figure out what NAME refers to. */
15509 if (TREE_CODE (scope) == TYPENAME_TYPE)
15510 scope = resolve_typename_type (scope, only_current_p);
15511 /* If we don't know what SCOPE refers to, then we cannot resolve the
15513 if (TREE_CODE (scope) == TYPENAME_TYPE)
15515 /* If the SCOPE is a template type parameter, we have no way of
15516 resolving the name. */
15517 if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
15519 /* If the SCOPE is not the current instantiation, there's no reason
15520 to look inside it. */
15521 if (only_current_p && !currently_open_class (scope))
15523 /* If SCOPE is a partial instantiation, it will not have a valid
15524 TYPE_FIELDS list, so use the original template. */
15525 scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
15526 /* Enter the SCOPE so that name lookup will be resolved as if we
15527 were in the class definition. In particular, SCOPE will no
15528 longer be considered a dependent type. */
15529 pushed_scope = push_scope (scope);
15530 /* Look up the declaration. */
15531 decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
15533 result = NULL_TREE;
15535 /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
15536 find a TEMPLATE_DECL. Otherwise, we want to find a TYPE_DECL. */
15539 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
15540 && TREE_CODE (decl) == TYPE_DECL)
15542 result = TREE_TYPE (decl);
15543 if (result == error_mark_node)
15544 result = NULL_TREE;
15546 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
15547 && DECL_CLASS_TEMPLATE_P (decl))
15551 /* Obtain the template and the arguments. */
15552 tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
15553 args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
15554 /* Instantiate the template. */
15555 result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
15556 /*entering_scope=*/0,
15557 tf_error | tf_user);
15558 if (result == error_mark_node)
15559 result = NULL_TREE;
15562 /* Leave the SCOPE. */
15564 pop_scope (pushed_scope);
15566 /* If we failed to resolve it, return the original typename. */
15570 /* If lookup found a typename type, resolve that too. */
15571 if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
15573 /* Ill-formed programs can cause infinite recursion here, so we
15574 must catch that. */
15575 TYPENAME_IS_RESOLVING_P (type) = 1;
15576 result = resolve_typename_type (result, only_current_p);
15577 TYPENAME_IS_RESOLVING_P (type) = 0;
15580 /* Qualify the resulting type. */
15581 quals = cp_type_quals (type);
15583 result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
15588 /* EXPR is an expression which is not type-dependent. Return a proxy
15589 for EXPR that can be used to compute the types of larger
15590 expressions containing EXPR. */
15593 build_non_dependent_expr (tree expr)
15597 /* Preserve null pointer constants so that the type of things like
15598 "p == 0" where "p" is a pointer can be determined. */
15599 if (null_ptr_cst_p (expr))
15601 /* Preserve OVERLOADs; the functions must be available to resolve
15604 if (TREE_CODE (inner_expr) == ADDR_EXPR)
15605 inner_expr = TREE_OPERAND (inner_expr, 0);
15606 if (TREE_CODE (inner_expr) == COMPONENT_REF)
15607 inner_expr = TREE_OPERAND (inner_expr, 1);
15608 if (is_overloaded_fn (inner_expr)
15609 || TREE_CODE (inner_expr) == OFFSET_REF)
15611 /* There is no need to return a proxy for a variable. */
15612 if (TREE_CODE (expr) == VAR_DECL)
15614 /* Preserve string constants; conversions from string constants to
15615 "char *" are allowed, even though normally a "const char *"
15616 cannot be used to initialize a "char *". */
15617 if (TREE_CODE (expr) == STRING_CST)
15619 /* Preserve arithmetic constants, as an optimization -- there is no
15620 reason to create a new node. */
15621 if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
15623 /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
15624 There is at least one place where we want to know that a
15625 particular expression is a throw-expression: when checking a ?:
15626 expression, there are special rules if the second or third
15627 argument is a throw-expression. */
15628 if (TREE_CODE (expr) == THROW_EXPR)
15631 if (TREE_CODE (expr) == COND_EXPR)
15632 return build3 (COND_EXPR,
15634 TREE_OPERAND (expr, 0),
15635 (TREE_OPERAND (expr, 1)
15636 ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
15637 : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
15638 build_non_dependent_expr (TREE_OPERAND (expr, 2)));
15639 if (TREE_CODE (expr) == COMPOUND_EXPR
15640 && !COMPOUND_EXPR_OVERLOADED (expr))
15641 return build2 (COMPOUND_EXPR,
15643 TREE_OPERAND (expr, 0),
15644 build_non_dependent_expr (TREE_OPERAND (expr, 1)));
15646 /* If the type is unknown, it can't really be non-dependent */
15647 gcc_assert (TREE_TYPE (expr) != unknown_type_node);
15649 /* Otherwise, build a NON_DEPENDENT_EXPR.
15651 REFERENCE_TYPEs are not stripped for expressions in templates
15652 because doing so would play havoc with mangling. Consider, for
15655 template <typename T> void f<T& g>() { g(); }
15657 In the body of "f", the expression for "g" will have
15658 REFERENCE_TYPE, even though the standard says that it should
15659 not. The reason is that we must preserve the syntactic form of
15660 the expression so that mangling (say) "f<g>" inside the body of
15661 "f" works out correctly. Therefore, the REFERENCE_TYPE is
15663 return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
15666 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
15667 Return a new TREE_LIST with the various arguments replaced with
15668 equivalent non-dependent expressions. */
15671 build_non_dependent_args (tree args)
15676 new_args = NULL_TREE;
15677 for (a = args; a; a = TREE_CHAIN (a))
15678 new_args = tree_cons (NULL_TREE,
15679 build_non_dependent_expr (TREE_VALUE (a)),
15681 return nreverse (new_args);
15684 #include "gt-cp-pt.h"