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 cp_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 cp_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 cp_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 cp_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 cp_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 cp_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 cp_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 cp_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 cp_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 = cp_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 /* Returns the TINST_LEVEL which gives the original instantiation
6052 outermost_tinst_level (void)
6054 return tree_last (current_tinst_level);
6057 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
6058 vector of template arguments, as for tsubst.
6060 Returns an appropriate tsubst'd friend declaration. */
6063 tsubst_friend_function (tree decl, tree args)
6067 if (TREE_CODE (decl) == FUNCTION_DECL
6068 && DECL_TEMPLATE_INSTANTIATION (decl)
6069 && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
6070 /* This was a friend declared with an explicit template
6071 argument list, e.g.:
6075 to indicate that f was a template instantiation, not a new
6076 function declaration. Now, we have to figure out what
6077 instantiation of what template. */
6079 tree template_id, arglist, fns;
6082 tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
6084 /* Friend functions are looked up in the containing namespace scope.
6085 We must enter that scope, to avoid finding member functions of the
6086 current cless with same name. */
6087 push_nested_namespace (ns);
6088 fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
6089 tf_warning_or_error, NULL_TREE,
6090 /*integral_constant_expression_p=*/false);
6091 pop_nested_namespace (ns);
6092 arglist = tsubst (DECL_TI_ARGS (decl), args,
6093 tf_warning_or_error, NULL_TREE);
6094 template_id = lookup_template_function (fns, arglist);
6096 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6097 tmpl = determine_specialization (template_id, new_friend,
6099 /*need_member_template=*/0,
6100 TREE_VEC_LENGTH (args),
6102 return instantiate_template (tmpl, new_args, tf_error);
6105 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6107 /* The NEW_FRIEND will look like an instantiation, to the
6108 compiler, but is not an instantiation from the point of view of
6109 the language. For example, we might have had:
6111 template <class T> struct S {
6112 template <class U> friend void f(T, U);
6115 Then, in S<int>, template <class U> void f(int, U) is not an
6116 instantiation of anything. */
6117 if (new_friend == error_mark_node)
6118 return error_mark_node;
6120 DECL_USE_TEMPLATE (new_friend) = 0;
6121 if (TREE_CODE (decl) == TEMPLATE_DECL)
6123 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
6124 DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
6125 = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
6128 /* The mangled name for the NEW_FRIEND is incorrect. The function
6129 is not a template instantiation and should not be mangled like
6130 one. Therefore, we forget the mangling here; we'll recompute it
6131 later if we need it. */
6132 if (TREE_CODE (new_friend) != TEMPLATE_DECL)
6134 SET_DECL_RTL (new_friend, NULL_RTX);
6135 SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
6138 if (DECL_NAMESPACE_SCOPE_P (new_friend))
6141 tree new_friend_template_info;
6142 tree new_friend_result_template_info;
6144 int new_friend_is_defn;
6146 /* We must save some information from NEW_FRIEND before calling
6147 duplicate decls since that function will free NEW_FRIEND if
6149 new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
6150 new_friend_is_defn =
6151 (DECL_INITIAL (DECL_TEMPLATE_RESULT
6152 (template_for_substitution (new_friend)))
6154 if (TREE_CODE (new_friend) == TEMPLATE_DECL)
6156 /* This declaration is a `primary' template. */
6157 DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
6159 new_friend_result_template_info
6160 = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
6163 new_friend_result_template_info = NULL_TREE;
6165 /* Make the init_value nonzero so pushdecl knows this is a defn. */
6166 if (new_friend_is_defn)
6167 DECL_INITIAL (new_friend) = error_mark_node;
6169 /* Inside pushdecl_namespace_level, we will push into the
6170 current namespace. However, the friend function should go
6171 into the namespace of the template. */
6172 ns = decl_namespace_context (new_friend);
6173 push_nested_namespace (ns);
6174 old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
6175 pop_nested_namespace (ns);
6177 if (old_decl == error_mark_node)
6178 return error_mark_node;
6180 if (old_decl != new_friend)
6182 /* This new friend declaration matched an existing
6183 declaration. For example, given:
6185 template <class T> void f(T);
6186 template <class U> class C {
6187 template <class T> friend void f(T) {}
6190 the friend declaration actually provides the definition
6191 of `f', once C has been instantiated for some type. So,
6192 old_decl will be the out-of-class template declaration,
6193 while new_friend is the in-class definition.
6195 But, if `f' was called before this point, the
6196 instantiation of `f' will have DECL_TI_ARGS corresponding
6197 to `T' but not to `U', references to which might appear
6198 in the definition of `f'. Previously, the most general
6199 template for an instantiation of `f' was the out-of-class
6200 version; now it is the in-class version. Therefore, we
6201 run through all specialization of `f', adding to their
6202 DECL_TI_ARGS appropriately. In particular, they need a
6203 new set of outer arguments, corresponding to the
6204 arguments for this class instantiation.
6206 The same situation can arise with something like this:
6209 template <class T> class C {
6213 when `C<int>' is instantiated. Now, `f(int)' is defined
6216 if (!new_friend_is_defn)
6217 /* On the other hand, if the in-class declaration does
6218 *not* provide a definition, then we don't want to alter
6219 existing definitions. We can just leave everything
6224 /* Overwrite whatever template info was there before, if
6225 any, with the new template information pertaining to
6227 DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
6229 if (TREE_CODE (old_decl) != TEMPLATE_DECL)
6230 reregister_specialization (new_friend,
6231 most_general_template (old_decl),
6236 tree new_friend_args;
6238 DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
6239 = new_friend_result_template_info;
6241 new_friend_args = TI_ARGS (new_friend_template_info);
6242 for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
6246 tree spec = TREE_VALUE (t);
6249 = add_outermost_template_args (new_friend_args,
6250 DECL_TI_ARGS (spec));
6253 /* Now, since specializations are always supposed to
6254 hang off of the most general template, we must move
6256 t = most_general_template (old_decl);
6259 DECL_TEMPLATE_SPECIALIZATIONS (t)
6260 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
6261 DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
6262 DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
6267 /* The information from NEW_FRIEND has been merged into OLD_DECL
6268 by duplicate_decls. */
6269 new_friend = old_decl;
6274 tree context = DECL_CONTEXT (new_friend);
6278 template <class T> class C {
6279 template <class U> friend void C1<U>::f (); // case 1
6280 friend void C2<T>::f (); // case 2
6282 we only need to make sure CONTEXT is a complete type for
6283 case 2. To distinguish between the two cases, we note that
6284 CONTEXT of case 1 remains dependent type after tsubst while
6285 this isn't true for case 2. */
6286 ++processing_template_decl;
6287 dependent_p = dependent_type_p (context);
6288 --processing_template_decl;
6291 && !complete_type_or_else (context, NULL_TREE))
6292 return error_mark_node;
6294 if (COMPLETE_TYPE_P (context))
6296 /* Check to see that the declaration is really present, and,
6297 possibly obtain an improved declaration. */
6298 tree fn = check_classfn (context,
6299 new_friend, NULL_TREE);
6309 /* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
6310 template arguments, as for tsubst.
6312 Returns an appropriate tsubst'd friend type or error_mark_node on
6316 tsubst_friend_class (tree friend_tmpl, tree args)
6322 context = DECL_CONTEXT (friend_tmpl);
6326 if (TREE_CODE (context) == NAMESPACE_DECL)
6327 push_nested_namespace (context);
6329 push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
6332 /* Look for a class template declaration. We look for hidden names
6333 because two friend declarations of the same template are the
6334 same. For example, in:
6337 template <typename> friend class F;
6339 template <typename> struct B {
6340 template <typename> friend class F;
6343 both F templates are the same. */
6344 tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
6345 /*block_p=*/true, 0,
6346 LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
6348 /* But, if we don't find one, it might be because we're in a
6349 situation like this:
6357 Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
6358 for `S<int>', not the TEMPLATE_DECL. */
6359 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
6361 tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
6362 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
6365 if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
6367 /* The friend template has already been declared. Just
6368 check to see that the declarations match, and install any new
6369 default parameters. We must tsubst the default parameters,
6370 of course. We only need the innermost template parameters
6371 because that is all that redeclare_class_template will look
6373 if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
6374 > TMPL_ARGS_DEPTH (args))
6377 parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
6378 args, tf_warning_or_error);
6379 redeclare_class_template (TREE_TYPE (tmpl), parms);
6382 friend_type = TREE_TYPE (tmpl);
6386 /* The friend template has not already been declared. In this
6387 case, the instantiation of the template class will cause the
6388 injection of this template into the global scope. */
6389 tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
6390 if (tmpl == error_mark_node)
6391 return error_mark_node;
6393 /* The new TMPL is not an instantiation of anything, so we
6394 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE for
6395 the new type because that is supposed to be the corresponding
6396 template decl, i.e., TMPL. */
6397 DECL_USE_TEMPLATE (tmpl) = 0;
6398 DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
6399 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
6400 CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
6401 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
6403 /* Inject this template into the global scope. */
6404 friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
6409 if (TREE_CODE (context) == NAMESPACE_DECL)
6410 pop_nested_namespace (context);
6412 pop_nested_class ();
6418 /* Returns zero if TYPE cannot be completed later due to circularity.
6419 Otherwise returns one. */
6422 can_complete_type_without_circularity (tree type)
6424 if (type == NULL_TREE || type == error_mark_node)
6426 else if (COMPLETE_TYPE_P (type))
6428 else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
6429 return can_complete_type_without_circularity (TREE_TYPE (type));
6430 else if (CLASS_TYPE_P (type)
6431 && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
6438 instantiate_class_template (tree type)
6440 tree template, args, pattern, t, member;
6445 if (type == error_mark_node)
6446 return error_mark_node;
6448 if (TYPE_BEING_DEFINED (type)
6449 || COMPLETE_TYPE_P (type)
6450 || dependent_type_p (type))
6453 /* Figure out which template is being instantiated. */
6454 template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
6455 gcc_assert (TREE_CODE (template) == TEMPLATE_DECL);
6457 /* Determine what specialization of the original template to
6459 t = most_specialized_class (type, template);
6460 if (t == error_mark_node)
6462 TYPE_BEING_DEFINED (type) = 1;
6463 return error_mark_node;
6467 /* This TYPE is actually an instantiation of a partial
6468 specialization. We replace the innermost set of ARGS with
6469 the arguments appropriate for substitution. For example,
6472 template <class T> struct S {};
6473 template <class T> struct S<T*> {};
6475 and supposing that we are instantiating S<int*>, ARGS will
6476 presently be {int*} -- but we need {int}. */
6477 pattern = TREE_TYPE (t);
6478 args = TREE_PURPOSE (t);
6482 pattern = TREE_TYPE (template);
6483 args = CLASSTYPE_TI_ARGS (type);
6486 /* If the template we're instantiating is incomplete, then clearly
6487 there's nothing we can do. */
6488 if (!COMPLETE_TYPE_P (pattern))
6491 /* If we've recursively instantiated too many templates, stop. */
6492 if (! push_tinst_level (type))
6495 /* Now we're really doing the instantiation. Mark the type as in
6496 the process of being defined. */
6497 TYPE_BEING_DEFINED (type) = 1;
6499 /* We may be in the middle of deferred access check. Disable
6501 push_deferring_access_checks (dk_no_deferred);
6503 push_to_top_level ();
6505 SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
6507 /* Set the input location to the template definition. This is needed
6508 if tsubsting causes an error. */
6509 typedecl = TYPE_MAIN_DECL (type);
6510 input_location = DECL_SOURCE_LOCATION (typedecl);
6511 in_system_header = DECL_IN_SYSTEM_HEADER (typedecl);
6513 TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
6514 TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
6515 TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
6516 TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
6517 TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
6518 TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
6519 TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
6520 TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
6521 TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
6522 TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
6523 TYPE_PACKED (type) = TYPE_PACKED (pattern);
6524 TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
6525 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
6526 TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
6527 if (ANON_AGGR_TYPE_P (pattern))
6528 SET_ANON_AGGR_TYPE_P (type);
6529 if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
6531 CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
6532 CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
6535 pbinfo = TYPE_BINFO (pattern);
6537 /* We should never instantiate a nested class before its enclosing
6538 class; we need to look up the nested class by name before we can
6539 instantiate it, and that lookup should instantiate the enclosing
6541 gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
6542 || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
6543 || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
6545 base_list = NULL_TREE;
6546 if (BINFO_N_BASE_BINFOS (pbinfo))
6549 tree context = TYPE_CONTEXT (type);
6553 /* We must enter the scope containing the type, as that is where
6554 the accessibility of types named in dependent bases are
6556 pushed_scope = push_scope (context ? context : global_namespace);
6558 /* Substitute into each of the bases to determine the actual
6560 for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
6563 tree access = BINFO_BASE_ACCESS (pbinfo, i);
6564 tree expanded_bases = NULL_TREE;
6567 if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
6570 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
6571 args, tf_error, NULL_TREE);
6572 if (expanded_bases == error_mark_node)
6575 len = TREE_VEC_LENGTH (expanded_bases);
6578 for (idx = 0; idx < len; idx++)
6581 /* Extract the already-expanded base class. */
6582 base = TREE_VEC_ELT (expanded_bases, idx);
6584 /* Substitute to figure out the base class. */
6585 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error,
6588 if (base == error_mark_node)
6591 base_list = tree_cons (access, base, base_list);
6592 if (BINFO_VIRTUAL_P (pbase_binfo))
6593 TREE_TYPE (base_list) = integer_type_node;
6597 /* The list is now in reverse order; correct that. */
6598 base_list = nreverse (base_list);
6601 pop_scope (pushed_scope);
6603 /* Now call xref_basetypes to set up all the base-class
6605 xref_basetypes (type, base_list);
6608 /* Now that our base classes are set up, enter the scope of the
6609 class, so that name lookups into base classes, etc. will work
6610 correctly. This is precisely analogous to what we do in
6611 begin_class_definition when defining an ordinary non-template
6615 /* Now members are processed in the order of declaration. */
6616 for (member = CLASSTYPE_DECL_LIST (pattern);
6617 member; member = TREE_CHAIN (member))
6619 tree t = TREE_VALUE (member);
6621 if (TREE_PURPOSE (member))
6625 /* Build new CLASSTYPE_NESTED_UTDS. */
6628 bool class_template_p;
6630 class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
6631 && TYPE_LANG_SPECIFIC (t)
6632 && CLASSTYPE_IS_TEMPLATE (t));
6633 /* If the member is a class template, then -- even after
6634 substitution -- there may be dependent types in the
6635 template argument list for the class. We increment
6636 PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
6637 that function will assume that no types are dependent
6638 when outside of a template. */
6639 if (class_template_p)
6640 ++processing_template_decl;
6641 newtag = tsubst (t, args, tf_error, NULL_TREE);
6642 if (class_template_p)
6643 --processing_template_decl;
6644 if (newtag == error_mark_node)
6647 if (TREE_CODE (newtag) != ENUMERAL_TYPE)
6649 tree name = TYPE_IDENTIFIER (t);
6651 if (class_template_p)
6652 /* Unfortunately, lookup_template_class sets
6653 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
6654 instantiation (i.e., for the type of a member
6655 template class nested within a template class.)
6656 This behavior is required for
6657 maybe_process_partial_specialization to work
6658 correctly, but is not accurate in this case;
6659 the TAG is not an instantiation of anything.
6660 (The corresponding TEMPLATE_DECL is an
6661 instantiation, but the TYPE is not.) */
6662 CLASSTYPE_USE_TEMPLATE (newtag) = 0;
6664 /* Now, we call pushtag to put this NEWTAG into the scope of
6665 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
6666 pushtag calling push_template_decl. We don't have to do
6667 this for enums because it will already have been done in
6670 SET_IDENTIFIER_TYPE_VALUE (name, newtag);
6671 pushtag (name, newtag, /*tag_scope=*/ts_current);
6674 else if (TREE_CODE (t) == FUNCTION_DECL
6675 || DECL_FUNCTION_TEMPLATE_P (t))
6677 /* Build new TYPE_METHODS. */
6680 if (TREE_CODE (t) == TEMPLATE_DECL)
6681 ++processing_template_decl;
6682 r = tsubst (t, args, tf_error, NULL_TREE);
6683 if (TREE_CODE (t) == TEMPLATE_DECL)
6684 --processing_template_decl;
6685 set_current_access_from_decl (r);
6686 finish_member_declaration (r);
6690 /* Build new TYPE_FIELDS. */
6691 if (TREE_CODE (t) == STATIC_ASSERT)
6694 tsubst_expr (STATIC_ASSERT_CONDITION (t), args,
6695 tf_warning_or_error, NULL_TREE,
6696 /*integral_constant_expression_p=*/true);
6697 finish_static_assert (condition,
6698 STATIC_ASSERT_MESSAGE (t),
6699 STATIC_ASSERT_SOURCE_LOCATION (t),
6702 else if (TREE_CODE (t) != CONST_DECL)
6706 /* The the file and line for this declaration, to
6707 assist in error message reporting. Since we
6708 called push_tinst_level above, we don't need to
6710 input_location = DECL_SOURCE_LOCATION (t);
6712 if (TREE_CODE (t) == TEMPLATE_DECL)
6713 ++processing_template_decl;
6714 r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
6715 if (TREE_CODE (t) == TEMPLATE_DECL)
6716 --processing_template_decl;
6717 if (TREE_CODE (r) == VAR_DECL)
6721 [t]he initialization (and any associated
6722 side-effects) of a static data member does
6723 not occur unless the static data member is
6724 itself used in a way that requires the
6725 definition of the static data member to
6728 Therefore, we do not substitute into the
6729 initialized for the static data member here. */
6730 finish_static_data_member_decl
6733 /*init_const_expr_p=*/false,
6734 /*asmspec_tree=*/NULL_TREE,
6736 if (DECL_INITIALIZED_IN_CLASS_P (r))
6737 check_static_variable_definition (r, TREE_TYPE (r));
6739 else if (TREE_CODE (r) == FIELD_DECL)
6741 /* Determine whether R has a valid type and can be
6742 completed later. If R is invalid, then it is
6743 replaced by error_mark_node so that it will not be
6744 added to TYPE_FIELDS. */
6745 tree rtype = TREE_TYPE (r);
6746 if (can_complete_type_without_circularity (rtype))
6747 complete_type (rtype);
6749 if (!COMPLETE_TYPE_P (rtype))
6751 cxx_incomplete_type_error (r, rtype);
6752 r = error_mark_node;
6756 /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
6757 such a thing will already have been added to the field
6758 list by tsubst_enum in finish_member_declaration in the
6759 CLASSTYPE_NESTED_UTDS case above. */
6760 if (!(TREE_CODE (r) == TYPE_DECL
6761 && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
6762 && DECL_ARTIFICIAL (r)))
6764 set_current_access_from_decl (r);
6765 finish_member_declaration (r);
6772 if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
6774 /* Build new CLASSTYPE_FRIEND_CLASSES. */
6776 tree friend_type = t;
6777 bool adjust_processing_template_decl = false;
6779 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
6781 /* template <class T> friend class C; */
6782 friend_type = tsubst_friend_class (friend_type, args);
6783 adjust_processing_template_decl = true;
6785 else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
6787 /* template <class T> friend class C::D; */
6788 friend_type = tsubst (friend_type, args,
6789 tf_warning_or_error, NULL_TREE);
6790 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
6791 friend_type = TREE_TYPE (friend_type);
6792 adjust_processing_template_decl = true;
6794 else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
6796 /* This could be either
6800 when dependent_type_p is false or
6802 template <class U> friend class T::C;
6805 friend_type = tsubst (friend_type, args,
6806 tf_warning_or_error, NULL_TREE);
6807 /* Bump processing_template_decl for correct
6808 dependent_type_p calculation. */
6809 ++processing_template_decl;
6810 if (dependent_type_p (friend_type))
6811 adjust_processing_template_decl = true;
6812 --processing_template_decl;
6814 else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
6815 && hidden_name_p (TYPE_NAME (friend_type)))
6819 where C hasn't been declared yet. Let's lookup name
6820 from namespace scope directly, bypassing any name that
6821 come from dependent base class. */
6822 tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
6824 /* The call to xref_tag_from_type does injection for friend
6826 push_nested_namespace (ns);
6828 xref_tag_from_type (friend_type, NULL_TREE,
6829 /*tag_scope=*/ts_current);
6830 pop_nested_namespace (ns);
6832 else if (uses_template_parms (friend_type))
6833 /* friend class C<T>; */
6834 friend_type = tsubst (friend_type, args,
6835 tf_warning_or_error, NULL_TREE);
6840 where C is already declared or
6842 friend class C<int>;
6844 We don't have to do anything in these cases. */
6846 if (adjust_processing_template_decl)
6847 /* Trick make_friend_class into realizing that the friend
6848 we're adding is a template, not an ordinary class. It's
6849 important that we use make_friend_class since it will
6850 perform some error-checking and output cross-reference
6852 ++processing_template_decl;
6854 if (friend_type != error_mark_node)
6855 make_friend_class (type, friend_type, /*complain=*/false);
6857 if (adjust_processing_template_decl)
6858 --processing_template_decl;
6862 /* Build new DECL_FRIENDLIST. */
6865 /* The the file and line for this declaration, to
6866 assist in error message reporting. Since we
6867 called push_tinst_level above, we don't need to
6869 input_location = DECL_SOURCE_LOCATION (t);
6871 if (TREE_CODE (t) == TEMPLATE_DECL)
6873 ++processing_template_decl;
6874 push_deferring_access_checks (dk_no_check);
6877 r = tsubst_friend_function (t, args);
6878 add_friend (type, r, /*complain=*/false);
6879 if (TREE_CODE (t) == TEMPLATE_DECL)
6881 pop_deferring_access_checks ();
6882 --processing_template_decl;
6888 /* Set the file and line number information to whatever is given for
6889 the class itself. This puts error messages involving generated
6890 implicit functions at a predictable point, and the same point
6891 that would be used for non-template classes. */
6892 input_location = DECL_SOURCE_LOCATION (typedecl);
6894 unreverse_member_declarations (type);
6895 finish_struct_1 (type);
6896 TYPE_BEING_DEFINED (type) = 0;
6898 /* Now that the class is complete, instantiate default arguments for
6899 any member functions. We don't do this earlier because the
6900 default arguments may reference members of the class. */
6901 if (!PRIMARY_TEMPLATE_P (template))
6902 for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
6903 if (TREE_CODE (t) == FUNCTION_DECL
6904 /* Implicitly generated member functions will not have template
6905 information; they are not instantiations, but instead are
6906 created "fresh" for each instantiation. */
6907 && DECL_TEMPLATE_INFO (t))
6908 tsubst_default_arguments (t);
6911 pop_from_top_level ();
6912 pop_deferring_access_checks ();
6915 /* The vtable for a template class can be emitted in any translation
6916 unit in which the class is instantiated. When there is no key
6917 method, however, finish_struct_1 will already have added TYPE to
6918 the keyed_classes list. */
6919 if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
6920 keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
6926 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
6932 else if (TYPE_P (t))
6933 r = tsubst (t, args, complain, in_decl);
6936 r = tsubst_expr (t, args, complain, in_decl,
6937 /*integral_constant_expression_p=*/true);
6938 r = fold_non_dependent_expr (r);
6943 /* Substitute ARGS into T, which is an pack expansion
6944 (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
6945 TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
6946 (if only a partial substitution could be performed) or
6947 ERROR_MARK_NODE if there was an error. */
6949 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
6953 tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
6954 tree first_arg_pack; int i, len = -1;
6958 gcc_assert (PACK_EXPANSION_P (t));
6959 pattern = PACK_EXPANSION_PATTERN (t);
6961 /* Determine the argument packs that will instantiate the parameter
6962 packs used in the expansion expression. While we're at it,
6963 compute the number of arguments to be expanded and make sure it
6965 for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack;
6966 pack = TREE_CHAIN (pack))
6968 tree parm_pack = TREE_VALUE (pack);
6969 tree arg_pack = NULL_TREE;
6970 tree orig_arg = NULL_TREE;
6972 if (TREE_CODE (parm_pack) == PARM_DECL)
6974 if (local_specializations)
6975 arg_pack = retrieve_local_specialization (parm_pack);
6979 int level, idx, levels;
6980 template_parm_level_and_index (parm_pack, &level, &idx);
6982 levels = TMPL_ARGS_DEPTH (args);
6983 if (level <= levels)
6984 arg_pack = TMPL_ARG (args, level, idx);
6987 orig_arg = arg_pack;
6988 if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
6989 arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
6991 if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
6992 /* This can only happen if we forget to expand an argument
6993 pack somewhere else. Just return an error, silently. */
6995 result = make_tree_vec (1);
6996 TREE_VEC_ELT (result, 0) = error_mark_node;
7003 TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
7005 /* It's all-or-nothing with incomplete argument packs. */
7006 if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7007 return error_mark_node;
7009 if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7015 first_arg_pack = arg_pack;
7017 else if (len != my_len)
7019 if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
7020 error ("mismatched argument pack lengths while expanding "
7024 error ("mismatched argument pack lengths while expanding "
7027 return error_mark_node;
7030 /* Keep track of the parameter packs and their corresponding
7032 packs = tree_cons (parm_pack, arg_pack, packs);
7033 TREE_TYPE (packs) = orig_arg;
7036 /* We can't substitute for this parameter pack. */
7037 unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
7039 unsubstituted_packs);
7042 /* We cannot expand this expansion expression, because we don't have
7043 all of the argument packs we need. Substitute into the pattern
7044 and return a PACK_EXPANSION_*. The caller will need to deal with
7046 if (unsubstituted_packs)
7047 return make_pack_expansion (tsubst (pattern, args, complain,
7050 /* We could not find any argument packs that work. */
7052 return error_mark_node;
7054 /* For each argument in each argument pack, substitute into the
7056 result = make_tree_vec (len + incomplete);
7057 for (i = 0; i < len + incomplete; ++i)
7059 /* For parameter pack, change the substitution of the parameter
7060 pack to the ith argument in its argument pack, then expand
7062 for (pack = packs; pack; pack = TREE_CHAIN (pack))
7064 tree parm = TREE_PURPOSE (pack);
7066 if (TREE_CODE (parm) == PARM_DECL)
7068 /* Select the Ith argument from the pack. */
7069 tree arg = make_node (ARGUMENT_PACK_SELECT);
7070 ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
7071 ARGUMENT_PACK_SELECT_INDEX (arg) = i;
7073 register_local_specialization (arg, parm);
7079 template_parm_level_and_index (parm, &level, &idx);
7083 /* Select the Ith argument from the pack. */
7084 value = make_node (ARGUMENT_PACK_SELECT);
7085 ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
7086 ARGUMENT_PACK_SELECT_INDEX (value) = i;
7089 /* Update the corresponding argument. */
7090 TMPL_ARG (args, level, idx) = value;
7094 /* Substitute into the PATTERN with the altered arguments. */
7095 if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
7096 TREE_VEC_ELT (result, i) =
7097 tsubst_expr (pattern, args, complain, in_decl,
7098 /*integral_constant_expression_p=*/false);
7100 TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
7103 /* When we have incomplete argument packs, the last "expanded"
7104 result is itself a pack expansion, which allows us
7105 to deduce more arguments. */
7106 TREE_VEC_ELT (result, i) =
7107 make_pack_expansion (TREE_VEC_ELT (result, i));
7109 if (TREE_VEC_ELT (result, i) == error_mark_node)
7111 result = error_mark_node;
7116 /* Update ARGS to restore the substitution from parameter packs to
7117 their argument packs. */
7118 for (pack = packs; pack; pack = TREE_CHAIN (pack))
7120 tree parm = TREE_PURPOSE (pack);
7122 if (TREE_CODE (parm) == PARM_DECL)
7123 register_local_specialization (TREE_TYPE (pack), parm);
7127 template_parm_level_and_index (parm, &level, &idx);
7129 /* Update the corresponding argument. */
7130 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
7131 TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
7134 TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
7141 /* Substitute ARGS into the vector or list of template arguments T. */
7144 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7147 int len = TREE_VEC_LENGTH (t);
7148 int need_new = 0, i, expanded_len_adjust = 0, out;
7149 tree *elts = (tree *) alloca (len * sizeof (tree));
7151 for (i = 0; i < len; i++)
7153 tree orig_arg = TREE_VEC_ELT (t, i);
7156 if (TREE_CODE (orig_arg) == TREE_VEC)
7157 new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
7158 else if (PACK_EXPANSION_P (orig_arg))
7160 /* Substitute into an expansion expression. */
7161 new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
7163 if (TREE_CODE (new_arg) == TREE_VEC)
7164 /* Add to the expanded length adjustment the number of
7165 expanded arguments. We subtract one from this
7166 measurement, because the argument pack expression
7167 itself is already counted as 1 in
7168 LEN. EXPANDED_LEN_ADJUST can actually be negative, if
7169 the argument pack is empty. */
7170 expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
7172 else if (ARGUMENT_PACK_P (orig_arg))
7174 /* Substitute into each of the arguments. */
7175 new_arg = make_node (TREE_CODE (orig_arg));
7177 SET_ARGUMENT_PACK_ARGS (
7179 tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
7180 args, complain, in_decl));
7182 if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
7183 new_arg = error_mark_node;
7185 if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
7186 TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
7188 TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
7190 if (TREE_TYPE (new_arg) == error_mark_node)
7191 new_arg = error_mark_node;
7195 new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
7197 if (new_arg == error_mark_node)
7198 return error_mark_node;
7201 if (new_arg != orig_arg)
7208 /* Make space for the expanded arguments coming from template
7210 t = make_tree_vec (len + expanded_len_adjust);
7211 for (i = 0, out = 0; i < len; i++)
7213 if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
7214 || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
7215 && TREE_CODE (elts[i]) == TREE_VEC)
7219 /* Now expand the template argument pack "in place". */
7220 for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
7221 TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
7225 TREE_VEC_ELT (t, out) = elts[i];
7233 /* Return the result of substituting ARGS into the template parameters
7234 given by PARMS. If there are m levels of ARGS and m + n levels of
7235 PARMS, then the result will contain n levels of PARMS. For
7236 example, if PARMS is `template <class T> template <class U>
7237 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
7238 result will be `template <int*, double, class V>'. */
7241 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
7246 /* When substituting into a template, we must set
7247 PROCESSING_TEMPLATE_DECL as the template parameters may be
7248 dependent if they are based on one-another, and the dependency
7249 predicates are short-circuit outside of templates. */
7250 ++processing_template_decl;
7252 for (new_parms = &r;
7253 TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
7254 new_parms = &(TREE_CHAIN (*new_parms)),
7255 parms = TREE_CHAIN (parms))
7258 make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
7261 for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
7267 if (parms == error_mark_node)
7270 tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
7272 if (tuple == error_mark_node)
7275 default_value = TREE_PURPOSE (tuple);
7276 parm_decl = TREE_VALUE (tuple);
7278 parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
7279 if (TREE_CODE (parm_decl) == PARM_DECL
7280 && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
7281 parm_decl = error_mark_node;
7282 default_value = tsubst_template_arg (default_value, args,
7283 complain, NULL_TREE);
7285 tuple = build_tree_list (default_value, parm_decl);
7286 TREE_VEC_ELT (new_vec, i) = tuple;
7290 tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
7291 - TMPL_ARGS_DEPTH (args)),
7292 new_vec, NULL_TREE);
7295 --processing_template_decl;
7300 /* Substitute the ARGS into the indicated aggregate (or enumeration)
7301 type T. If T is not an aggregate or enumeration type, it is
7302 handled as if by tsubst. IN_DECL is as for tsubst. If
7303 ENTERING_SCOPE is nonzero, T is the context for a template which
7304 we are presently tsubst'ing. Return the substituted value. */
7307 tsubst_aggr_type (tree t,
7309 tsubst_flags_t complain,
7316 switch (TREE_CODE (t))
7319 if (TYPE_PTRMEMFUNC_P (t))
7320 return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
7322 /* Else fall through. */
7325 if (TYPE_TEMPLATE_INFO (t))
7330 bool saved_skip_evaluation;
7332 /* In "sizeof(X<I>)" we need to evaluate "I". */
7333 saved_skip_evaluation = skip_evaluation;
7334 skip_evaluation = false;
7336 /* First, determine the context for the type we are looking
7338 context = TYPE_CONTEXT (t);
7340 context = tsubst_aggr_type (context, args, complain,
7341 in_decl, /*entering_scope=*/1);
7343 /* Then, figure out what arguments are appropriate for the
7344 type we are trying to find. For example, given:
7346 template <class T> struct S;
7347 template <class T, class U> void f(T, U) { S<U> su; }
7349 and supposing that we are instantiating f<int, double>,
7350 then our ARGS will be {int, double}, but, when looking up
7351 S we only want {double}. */
7352 argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
7354 if (argvec == error_mark_node)
7355 r = error_mark_node;
7358 r = lookup_template_class (t, argvec, in_decl, context,
7359 entering_scope, complain);
7360 r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7363 skip_evaluation = saved_skip_evaluation;
7368 /* This is not a template type, so there's nothing to do. */
7372 return tsubst (t, args, complain, in_decl);
7376 /* Substitute into the default argument ARG (a default argument for
7377 FN), which has the indicated TYPE. */
7380 tsubst_default_argument (tree fn, tree type, tree arg)
7382 tree saved_class_ptr = NULL_TREE;
7383 tree saved_class_ref = NULL_TREE;
7385 /* This default argument came from a template. Instantiate the
7386 default argument here, not in tsubst. In the case of
7395 we must be careful to do name lookup in the scope of S<T>,
7396 rather than in the current class. */
7397 push_access_scope (fn);
7398 /* The "this" pointer is not valid in a default argument. */
7401 saved_class_ptr = current_class_ptr;
7402 cp_function_chain->x_current_class_ptr = NULL_TREE;
7403 saved_class_ref = current_class_ref;
7404 cp_function_chain->x_current_class_ref = NULL_TREE;
7407 push_deferring_access_checks(dk_no_deferred);
7408 /* The default argument expression may cause implicitly defined
7409 member functions to be synthesized, which will result in garbage
7410 collection. We must treat this situation as if we were within
7411 the body of function so as to avoid collecting live data on the
7414 arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
7415 tf_warning_or_error, NULL_TREE,
7416 /*integral_constant_expression_p=*/false);
7418 pop_deferring_access_checks();
7420 /* Restore the "this" pointer. */
7423 cp_function_chain->x_current_class_ptr = saved_class_ptr;
7424 cp_function_chain->x_current_class_ref = saved_class_ref;
7427 pop_access_scope (fn);
7429 /* Make sure the default argument is reasonable. */
7430 arg = check_default_argument (type, arg);
7435 /* Substitute into all the default arguments for FN. */
7438 tsubst_default_arguments (tree fn)
7443 tmpl_args = DECL_TI_ARGS (fn);
7445 /* If this function is not yet instantiated, we certainly don't need
7446 its default arguments. */
7447 if (uses_template_parms (tmpl_args))
7450 for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
7452 arg = TREE_CHAIN (arg))
7453 if (TREE_PURPOSE (arg))
7454 TREE_PURPOSE (arg) = tsubst_default_argument (fn,
7456 TREE_PURPOSE (arg));
7459 /* Substitute the ARGS into the T, which is a _DECL. Return the
7460 result of the substitution. Issue error and warning messages under
7461 control of COMPLAIN. */
7464 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
7466 location_t saved_loc;
7470 /* Set the filename and linenumber to improve error-reporting. */
7471 saved_loc = input_location;
7472 input_location = DECL_SOURCE_LOCATION (t);
7474 switch (TREE_CODE (t))
7478 /* We can get here when processing a member function template,
7479 member class template, and template template parameter of
7480 a template class. */
7481 tree decl = DECL_TEMPLATE_RESULT (t);
7486 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7488 /* Template template parameter is treated here. */
7489 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7490 if (new_type == error_mark_node)
7491 return error_mark_node;
7494 TREE_CHAIN (r) = NULL_TREE;
7495 TREE_TYPE (r) = new_type;
7496 DECL_TEMPLATE_RESULT (r)
7497 = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
7498 DECL_TEMPLATE_PARMS (r)
7499 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7501 TYPE_NAME (new_type) = r;
7505 /* We might already have an instance of this template.
7506 The ARGS are for the surrounding class type, so the
7507 full args contain the tsubst'd args for the context,
7508 plus the innermost args from the template decl. */
7509 tmpl_args = DECL_CLASS_TEMPLATE_P (t)
7510 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
7511 : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
7512 /* Because this is a template, the arguments will still be
7513 dependent, even after substitution. If
7514 PROCESSING_TEMPLATE_DECL is not set, the dependency
7515 predicates will short-circuit. */
7516 ++processing_template_decl;
7517 full_args = tsubst_template_args (tmpl_args, args,
7519 --processing_template_decl;
7520 if (full_args == error_mark_node)
7521 return error_mark_node;
7523 /* tsubst_template_args doesn't copy the vector if
7524 nothing changed. But, *something* should have
7526 gcc_assert (full_args != tmpl_args);
7528 spec = retrieve_specialization (t, full_args,
7529 /*class_specializations_p=*/true);
7530 if (spec != NULL_TREE)
7536 /* Make a new template decl. It will be similar to the
7537 original, but will record the current template arguments.
7538 We also create a new function declaration, which is just
7539 like the old one, but points to this new template, rather
7540 than the old one. */
7542 gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
7543 TREE_CHAIN (r) = NULL_TREE;
7545 DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
7547 if (TREE_CODE (decl) == TYPE_DECL)
7550 ++processing_template_decl;
7551 new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7552 --processing_template_decl;
7553 if (new_type == error_mark_node)
7554 return error_mark_node;
7556 TREE_TYPE (r) = new_type;
7557 CLASSTYPE_TI_TEMPLATE (new_type) = r;
7558 DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
7559 DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
7560 DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
7565 ++processing_template_decl;
7566 new_decl = tsubst (decl, args, complain, in_decl);
7567 --processing_template_decl;
7568 if (new_decl == error_mark_node)
7569 return error_mark_node;
7571 DECL_TEMPLATE_RESULT (r) = new_decl;
7572 DECL_TI_TEMPLATE (new_decl) = r;
7573 TREE_TYPE (r) = TREE_TYPE (new_decl);
7574 DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
7575 DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
7578 SET_DECL_IMPLICIT_INSTANTIATION (r);
7579 DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
7580 DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
7582 /* The template parameters for this new template are all the
7583 template parameters for the old template, except the
7584 outermost level of parameters. */
7585 DECL_TEMPLATE_PARMS (r)
7586 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7589 if (PRIMARY_TEMPLATE_P (t))
7590 DECL_PRIMARY_TEMPLATE (r) = r;
7592 if (TREE_CODE (decl) != TYPE_DECL)
7593 /* Record this non-type partial instantiation. */
7594 register_specialization (r, t,
7595 DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
7603 tree argvec = NULL_TREE;
7611 /* Nobody should be tsubst'ing into non-template functions. */
7612 gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
7614 if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
7619 /* If T is not dependent, just return it. We have to
7620 increment PROCESSING_TEMPLATE_DECL because
7621 value_dependent_expression_p assumes that nothing is
7622 dependent when PROCESSING_TEMPLATE_DECL is zero. */
7623 ++processing_template_decl;
7624 dependent_p = value_dependent_expression_p (t);
7625 --processing_template_decl;
7629 /* Calculate the most general template of which R is a
7630 specialization, and the complete set of arguments used to
7632 gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
7633 argvec = tsubst_template_args (DECL_TI_ARGS
7634 (DECL_TEMPLATE_RESULT (gen_tmpl)),
7635 args, complain, in_decl);
7637 /* Check to see if we already have this specialization. */
7638 spec = retrieve_specialization (gen_tmpl, argvec,
7639 /*class_specializations_p=*/false);
7647 /* We can see more levels of arguments than parameters if
7648 there was a specialization of a member template, like
7651 template <class T> struct S { template <class U> void f(); }
7652 template <> template <class U> void S<int>::f(U);
7654 Here, we'll be substituting into the specialization,
7655 because that's where we can find the code we actually
7656 want to generate, but we'll have enough arguments for
7657 the most general template.
7659 We also deal with the peculiar case:
7661 template <class T> struct S {
7662 template <class U> friend void f();
7664 template <class U> void f() {}
7666 template void f<double>();
7668 Here, the ARGS for the instantiation of will be {int,
7669 double}. But, we only need as many ARGS as there are
7670 levels of template parameters in CODE_PATTERN. We are
7671 careful not to get fooled into reducing the ARGS in
7674 template <class T> struct S { template <class U> void f(U); }
7675 template <class T> template <> void S<T>::f(int) {}
7677 which we can spot because the pattern will be a
7678 specialization in this case. */
7679 args_depth = TMPL_ARGS_DEPTH (args);
7681 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
7682 if (args_depth > parms_depth
7683 && !DECL_TEMPLATE_SPECIALIZATION (t))
7684 args = get_innermost_template_args (args, parms_depth);
7688 /* This special case arises when we have something like this:
7690 template <class T> struct S {
7691 friend void f<int>(int, double);
7694 Here, the DECL_TI_TEMPLATE for the friend declaration
7695 will be an IDENTIFIER_NODE. We are being called from
7696 tsubst_friend_function, and we want only to create a
7697 new decl (R) with appropriate types so that we can call
7698 determine_specialization. */
7699 gen_tmpl = NULL_TREE;
7702 if (DECL_CLASS_SCOPE_P (t))
7704 if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
7708 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
7709 complain, t, /*entering_scope=*/1);
7714 ctx = DECL_CONTEXT (t);
7716 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7717 if (type == error_mark_node)
7718 return error_mark_node;
7720 /* We do NOT check for matching decls pushed separately at this
7721 point, as they may not represent instantiations of this
7722 template, and in any case are considered separate under the
7725 DECL_USE_TEMPLATE (r) = 0;
7726 TREE_TYPE (r) = type;
7727 /* Clear out the mangled name and RTL for the instantiation. */
7728 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
7729 SET_DECL_RTL (r, NULL_RTX);
7730 DECL_INITIAL (r) = NULL_TREE;
7731 DECL_CONTEXT (r) = ctx;
7733 if (member && DECL_CONV_FN_P (r))
7734 /* Type-conversion operator. Reconstruct the name, in
7735 case it's the name of one of the template's parameters. */
7736 DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
7738 DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
7740 DECL_RESULT (r) = NULL_TREE;
7742 TREE_STATIC (r) = 0;
7743 TREE_PUBLIC (r) = TREE_PUBLIC (t);
7744 DECL_EXTERNAL (r) = 1;
7745 /* If this is an instantiation of a function with internal
7746 linkage, we already know what object file linkage will be
7747 assigned to the instantiation. */
7748 DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
7749 DECL_DEFER_OUTPUT (r) = 0;
7750 TREE_CHAIN (r) = NULL_TREE;
7751 DECL_PENDING_INLINE_INFO (r) = 0;
7752 DECL_PENDING_INLINE_P (r) = 0;
7753 DECL_SAVED_TREE (r) = NULL_TREE;
7755 if (DECL_CLONED_FUNCTION (r))
7757 DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
7759 TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
7760 TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
7763 /* Set up the DECL_TEMPLATE_INFO for R. There's no need to do
7764 this in the special friend case mentioned above where
7765 GEN_TMPL is NULL. */
7768 DECL_TEMPLATE_INFO (r)
7769 = tree_cons (gen_tmpl, argvec, NULL_TREE);
7770 SET_DECL_IMPLICIT_INSTANTIATION (r);
7771 register_specialization (r, gen_tmpl, argvec, false);
7773 /* We're not supposed to instantiate default arguments
7774 until they are called, for a template. But, for a
7777 template <class T> void f ()
7778 { extern void g(int i = T()); }
7780 we should do the substitution when the template is
7781 instantiated. We handle the member function case in
7782 instantiate_class_template since the default arguments
7783 might refer to other members of the class. */
7785 && !PRIMARY_TEMPLATE_P (gen_tmpl)
7786 && !uses_template_parms (argvec))
7787 tsubst_default_arguments (r);
7790 DECL_TEMPLATE_INFO (r) = NULL_TREE;
7792 /* Copy the list of befriending classes. */
7793 for (friends = &DECL_BEFRIENDING_CLASSES (r);
7795 friends = &TREE_CHAIN (*friends))
7797 *friends = copy_node (*friends);
7798 TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
7803 if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
7805 maybe_retrofit_in_chrg (r);
7806 if (DECL_CONSTRUCTOR_P (r))
7807 grok_ctor_properties (ctx, r);
7808 /* If this is an instantiation of a member template, clone it.
7809 If it isn't, that'll be handled by
7810 clone_constructors_and_destructors. */
7811 if (PRIMARY_TEMPLATE_P (gen_tmpl))
7812 clone_function_decl (r, /*update_method_vec_p=*/0);
7814 else if (IDENTIFIER_OPNAME_P (DECL_NAME (r))
7815 && !grok_op_properties (r, (complain & tf_error) != 0))
7816 return error_mark_node;
7818 if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
7819 SET_DECL_FRIEND_CONTEXT (r,
7820 tsubst (DECL_FRIEND_CONTEXT (t),
7821 args, complain, in_decl));
7823 /* Possibly limit visibility based on template args. */
7824 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
7825 if (DECL_VISIBILITY_SPECIFIED (t))
7827 DECL_VISIBILITY_SPECIFIED (r) = 0;
7829 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
7831 determine_visibility (r);
7837 tree type = NULL_TREE;
7839 tree expanded_types = NULL_TREE;
7840 tree prev_r = NULL_TREE;
7841 tree first_r = NULL_TREE;
7843 if (FUNCTION_PARAMETER_PACK_P (t))
7845 /* If there is a local specialization that isn't a
7846 parameter pack, it means that we're doing a "simple"
7847 substitution from inside tsubst_pack_expansion. Just
7848 return the local specialization (which will be a single
7850 tree spec = NULL_TREE;
7851 if (local_specializations)
7852 spec = retrieve_local_specialization (t);
7854 && TREE_CODE (spec) == PARM_DECL
7855 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
7858 /* Expand the TYPE_PACK_EXPANSION that provides the types for
7859 the parameters in this function parameter pack. */
7860 expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
7862 if (TREE_CODE (expanded_types) == TREE_VEC)
7864 len = TREE_VEC_LENGTH (expanded_types);
7866 /* Zero-length parameter packs are boring. Just substitute
7869 return tsubst (TREE_CHAIN (t), args, complain,
7874 /* All we did was update the type. Make a note of that. */
7875 type = expanded_types;
7876 expanded_types = NULL_TREE;
7880 /* Loop through all of the parameter's we'll build. When T is
7881 a function parameter pack, LEN is the number of expanded
7882 types in EXPANDED_TYPES; otherwise, LEN is 1. */
7884 for (i = 0; i < len; ++i)
7888 if (DECL_TEMPLATE_PARM_P (t))
7889 SET_DECL_TEMPLATE_PARM_P (r);
7892 /* We're on the Ith parameter of the function parameter
7895 /* Get the Ith type. */
7896 type = TREE_VEC_ELT (expanded_types, i);
7899 /* Rename the parameter to include the index. */
7901 make_ith_pack_parameter_name (DECL_NAME (r), i);
7904 /* We're dealing with a normal parameter. */
7905 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7907 type = type_decays_to (type);
7908 TREE_TYPE (r) = type;
7909 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
7911 if (DECL_INITIAL (r))
7913 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
7914 DECL_INITIAL (r) = TREE_TYPE (r);
7916 DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
7920 DECL_CONTEXT (r) = NULL_TREE;
7922 if (!DECL_TEMPLATE_PARM_P (r))
7923 DECL_ARG_TYPE (r) = type_passed_as (type);
7925 /* Keep track of the first new parameter we
7926 generate. That's what will be returned to the
7931 /* Build a proper chain of parameters when substituting
7932 into a function parameter pack. */
7934 TREE_CHAIN (prev_r) = r;
7938 TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
7939 complain, TREE_CHAIN (t));
7941 /* FIRST_R contains the start of the chain we've built. */
7951 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7952 if (type == error_mark_node)
7953 return error_mark_node;
7954 TREE_TYPE (r) = type;
7955 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
7957 /* DECL_INITIAL gives the number of bits in a bit-field. */
7959 = tsubst_expr (DECL_INITIAL (t), args,
7961 /*integral_constant_expression_p=*/true);
7962 /* We don't have to set DECL_CONTEXT here; it is set by
7963 finish_member_declaration. */
7964 TREE_CHAIN (r) = NULL_TREE;
7965 if (VOID_TYPE_P (type))
7966 error ("instantiation of %q+D as type %qT", r, type);
7971 /* We reach here only for member using decls. */
7972 if (DECL_DEPENDENT_P (t))
7974 r = do_class_using_decl
7975 (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
7976 tsubst_copy (DECL_NAME (t), args, complain, in_decl));
7978 r = error_mark_node;
7983 TREE_CHAIN (r) = NULL_TREE;
7990 tree argvec = NULL_TREE;
7991 tree gen_tmpl = NULL_TREE;
7993 tree tmpl = NULL_TREE;
7995 tree type = NULL_TREE;
7998 if (TREE_CODE (t) == TYPE_DECL)
8000 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8001 if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
8002 || t == TYPE_MAIN_DECL (TREE_TYPE (t)))
8004 /* If this is the canonical decl, we don't have to
8005 mess with instantiations, and often we can't (for
8006 typename, template type parms and such). Note that
8007 TYPE_NAME is not correct for the above test if
8008 we've copied the type for a typedef. */
8009 r = TYPE_NAME (type);
8014 /* Check to see if we already have the specialization we
8017 if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
8019 /* T is a static data member or namespace-scope entity.
8020 We have to substitute into namespace-scope variables
8021 (even though such entities are never templates) because
8024 template <class T> void f() { extern T t; }
8026 where the entity referenced is not known until
8027 instantiation time. */
8029 ctx = DECL_CONTEXT (t);
8030 if (DECL_CLASS_SCOPE_P (t))
8032 ctx = tsubst_aggr_type (ctx, args,
8034 in_decl, /*entering_scope=*/1);
8035 /* If CTX is unchanged, then T is in fact the
8036 specialization we want. That situation occurs when
8037 referencing a static data member within in its own
8038 class. We can use pointer equality, rather than
8039 same_type_p, because DECL_CONTEXT is always
8041 if (ctx == DECL_CONTEXT (t))
8047 tmpl = DECL_TI_TEMPLATE (t);
8048 gen_tmpl = most_general_template (tmpl);
8049 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
8050 spec = (retrieve_specialization
8052 /*class_specializations_p=*/false));
8057 /* A local variable. */
8059 /* Subsequent calls to pushdecl will fill this in. */
8061 spec = retrieve_local_specialization (t);
8063 /* If we already have the specialization we need, there is
8064 nothing more to do. */
8071 /* Create a new node for the specialization we need. */
8073 if (TREE_CODE (r) == VAR_DECL)
8075 /* Even if the original location is out of scope, the
8076 newly substituted one is not. */
8077 DECL_DEAD_FOR_LOCAL (r) = 0;
8078 DECL_INITIALIZED_P (r) = 0;
8079 DECL_TEMPLATE_INSTANTIATED (r) = 0;
8080 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8081 if (type == error_mark_node)
8082 return error_mark_node;
8083 if (TREE_CODE (type) == FUNCTION_TYPE)
8085 /* It may seem that this case cannot occur, since:
8090 declares a function, not a variable. However:
8093 template <typename T> void g() { T t; }
8094 template void g<f>();
8096 is an attempt to declare a variable with function
8098 error ("variable %qD has function type",
8099 /* R is not yet sufficiently initialized, so we
8100 just use its name. */
8102 return error_mark_node;
8104 type = complete_type (type);
8105 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
8106 = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
8107 type = check_var_type (DECL_NAME (r), type);
8109 if (DECL_HAS_VALUE_EXPR_P (t))
8111 tree ve = DECL_VALUE_EXPR (t);
8112 ve = tsubst_expr (ve, args, complain, in_decl,
8113 /*constant_expression_p=*/false);
8114 SET_DECL_VALUE_EXPR (r, ve);
8117 else if (DECL_SELF_REFERENCE_P (t))
8118 SET_DECL_SELF_REFERENCE_P (r);
8119 TREE_TYPE (r) = type;
8120 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8121 DECL_CONTEXT (r) = ctx;
8122 /* Clear out the mangled name and RTL for the instantiation. */
8123 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8124 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8125 SET_DECL_RTL (r, NULL_RTX);
8126 /* The initializer must not be expanded until it is required;
8128 DECL_INITIAL (r) = NULL_TREE;
8129 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8130 SET_DECL_RTL (r, NULL_RTX);
8131 DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
8132 if (TREE_CODE (r) == VAR_DECL)
8134 /* Possibly limit visibility based on template args. */
8135 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8136 if (DECL_VISIBILITY_SPECIFIED (t))
8138 DECL_VISIBILITY_SPECIFIED (r) = 0;
8140 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8142 determine_visibility (r);
8147 /* A static data member declaration is always marked
8148 external when it is declared in-class, even if an
8149 initializer is present. We mimic the non-template
8151 DECL_EXTERNAL (r) = 1;
8153 register_specialization (r, gen_tmpl, argvec, false);
8154 DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
8155 SET_DECL_IMPLICIT_INSTANTIATION (r);
8158 register_local_specialization (r, t);
8160 TREE_CHAIN (r) = NULL_TREE;
8169 /* Restore the file and line information. */
8170 input_location = saved_loc;
8175 /* Substitute into the ARG_TYPES of a function type. */
8178 tsubst_arg_types (tree arg_types,
8180 tsubst_flags_t complain,
8183 tree remaining_arg_types;
8184 tree type = NULL_TREE;
8186 tree expanded_args = NULL_TREE;
8189 if (!arg_types || arg_types == void_list_node)
8192 remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
8193 args, complain, in_decl);
8194 if (remaining_arg_types == error_mark_node)
8195 return error_mark_node;
8197 if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
8199 /* For a pack expansion, perform substitution on the
8200 entire expression. Later on, we'll handle the arguments
8202 expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
8203 args, complain, in_decl);
8205 if (TREE_CODE (expanded_args) == TREE_VEC)
8206 /* So that we'll spin through the parameters, one by one. */
8207 i = TREE_VEC_LENGTH (expanded_args);
8210 /* We only partially substituted into the parameter
8211 pack. Our type is TYPE_PACK_EXPANSION. */
8212 type = expanded_args;
8213 expanded_args = NULL_TREE;
8221 type = TREE_VEC_ELT (expanded_args, i);
8223 type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
8225 if (type == error_mark_node)
8226 return error_mark_node;
8227 if (VOID_TYPE_P (type))
8229 if (complain & tf_error)
8231 error ("invalid parameter type %qT", type);
8233 error ("in declaration %q+D", in_decl);
8235 return error_mark_node;
8238 /* Do array-to-pointer, function-to-pointer conversion, and ignore
8239 top-level qualifiers as required. */
8240 type = TYPE_MAIN_VARIANT (type_decays_to (type));
8242 /* We do not substitute into default arguments here. The standard
8243 mandates that they be instantiated only when needed, which is
8244 done in build_over_call. */
8245 default_arg = TREE_PURPOSE (arg_types);
8247 if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
8249 /* We've instantiated a template before its default arguments
8250 have been parsed. This can happen for a nested template
8251 class, and is not an error unless we require the default
8252 argument in a call of this function. */
8253 remaining_arg_types =
8254 tree_cons (default_arg, type, remaining_arg_types);
8255 VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg),
8256 remaining_arg_types);
8259 remaining_arg_types =
8260 hash_tree_cons (default_arg, type, remaining_arg_types);
8263 return remaining_arg_types;
8266 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
8267 *not* handle the exception-specification for FNTYPE, because the
8268 initial substitution of explicitly provided template parameters
8269 during argument deduction forbids substitution into the
8270 exception-specification:
8274 All references in the function type of the function template to the
8275 corresponding template parameters are replaced by the specified tem-
8276 plate argument values. If a substitution in a template parameter or
8277 in the function type of the function template results in an invalid
8278 type, type deduction fails. [Note: The equivalent substitution in
8279 exception specifications is done only when the function is instanti-
8280 ated, at which point a program is ill-formed if the substitution
8281 results in an invalid type.] */
8284 tsubst_function_type (tree t,
8286 tsubst_flags_t complain,
8293 /* The TYPE_CONTEXT is not used for function/method types. */
8294 gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
8296 /* Substitute the return type. */
8297 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8298 if (return_type == error_mark_node)
8299 return error_mark_node;
8300 /* The standard does not presently indicate that creation of a
8301 function type with an invalid return type is a deduction failure.
8302 However, that is clearly analogous to creating an array of "void"
8303 or a reference to a reference. This is core issue #486. */
8304 if (TREE_CODE (return_type) == ARRAY_TYPE
8305 || TREE_CODE (return_type) == FUNCTION_TYPE)
8307 if (complain & tf_error)
8309 if (TREE_CODE (return_type) == ARRAY_TYPE)
8310 error ("function returning an array");
8312 error ("function returning a function");
8314 return error_mark_node;
8317 /* Substitute the argument types. */
8318 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
8320 if (arg_types == error_mark_node)
8321 return error_mark_node;
8323 if (TYPE_QUALS (return_type) != TYPE_UNQUALIFIED
8324 && in_decl != NULL_TREE
8325 && !TREE_NO_WARNING (in_decl)
8326 && (SCALAR_TYPE_P (return_type) || VOID_TYPE_P (return_type)))
8327 warning (OPT_Wreturn_type,
8328 "type qualifiers ignored on function return type");
8330 /* Construct a new type node and return it. */
8331 if (TREE_CODE (t) == FUNCTION_TYPE)
8332 fntype = build_function_type (return_type, arg_types);
8335 tree r = TREE_TYPE (TREE_VALUE (arg_types));
8336 if (! IS_AGGR_TYPE (r))
8340 Type deduction may fail for any of the following
8343 -- Attempting to create "pointer to member of T" when T
8344 is not a class type. */
8345 if (complain & tf_error)
8346 error ("creating pointer to member function of non-class type %qT",
8348 return error_mark_node;
8351 fntype = build_method_type_directly (r, return_type,
8352 TREE_CHAIN (arg_types));
8354 fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
8355 fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
8360 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE. Substitute the template
8361 ARGS into that specification, and return the substituted
8362 specification. If there is no specification, return NULL_TREE. */
8365 tsubst_exception_specification (tree fntype,
8367 tsubst_flags_t complain,
8373 specs = TYPE_RAISES_EXCEPTIONS (fntype);
8374 new_specs = NULL_TREE;
8377 if (! TREE_VALUE (specs))
8384 tree expanded_specs = NULL_TREE;
8386 if (PACK_EXPANSION_P (TREE_VALUE (specs)))
8388 /* Expand the pack expansion type. */
8389 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
8392 len = TREE_VEC_LENGTH (expanded_specs);
8395 for (i = 0; i < len; ++i)
8398 spec = TREE_VEC_ELT (expanded_specs, i);
8400 spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
8401 if (spec == error_mark_node)
8403 new_specs = add_exception_specifier (new_specs, spec,
8407 specs = TREE_CHAIN (specs);
8413 /* Take the tree structure T and replace template parameters used
8414 therein with the argument vector ARGS. IN_DECL is an associated
8415 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
8416 Issue error and warning messages under control of COMPLAIN. Note
8417 that we must be relatively non-tolerant of extensions here, in
8418 order to preserve conformance; if we allow substitutions that
8419 should not be allowed, we may allow argument deductions that should
8420 not succeed, and therefore report ambiguous overload situations
8421 where there are none. In theory, we could allow the substitution,
8422 but indicate that it should have failed, and allow our caller to
8423 make sure that the right thing happens, but we don't try to do this
8426 This function is used for dealing with types, decls and the like;
8427 for expressions, use tsubst_expr or tsubst_copy. */
8430 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8434 if (t == NULL_TREE || t == error_mark_node
8435 || t == integer_type_node
8436 || t == void_type_node
8437 || t == char_type_node
8438 || t == unknown_type_node
8439 || TREE_CODE (t) == NAMESPACE_DECL)
8443 return tsubst_decl (t, args, complain);
8445 if (TREE_CODE (t) == IDENTIFIER_NODE)
8446 type = IDENTIFIER_TYPE_VALUE (t);
8448 type = TREE_TYPE (t);
8450 gcc_assert (type != unknown_type_node);
8453 && TREE_CODE (t) != TYPENAME_TYPE
8454 && TREE_CODE (t) != IDENTIFIER_NODE
8455 && TREE_CODE (t) != FUNCTION_TYPE
8456 && TREE_CODE (t) != METHOD_TYPE)
8457 type = tsubst (type, args, complain, in_decl);
8458 if (type == error_mark_node)
8459 return error_mark_node;
8461 switch (TREE_CODE (t))
8466 return tsubst_aggr_type (t, args, complain, in_decl,
8467 /*entering_scope=*/0);
8470 case IDENTIFIER_NODE:
8482 if (t == integer_type_node)
8485 if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
8486 && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
8490 tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
8492 max = tsubst_expr (omax, args, complain, in_decl,
8493 /*integral_constant_expression_p=*/false);
8494 max = fold_decl_constant_value (max);
8496 if (TREE_CODE (max) != INTEGER_CST
8497 && TREE_CODE (max) != TEMPLATE_PARM_INDEX
8498 && !at_function_scope_p ())
8500 if (complain & tf_error)
8501 error ("array bound is not an integer constant");
8502 return error_mark_node;
8507 Type deduction may fail for any of the following
8510 Attempting to create an array with a size that is
8511 zero or negative. */
8512 if (integer_zerop (max) && !(complain & tf_error))
8513 /* We must fail if performing argument deduction (as
8514 indicated by the state of complain), so that
8515 another substitution can be found. */
8516 return error_mark_node;
8517 else if (TREE_CODE (max) == INTEGER_CST
8518 && INT_CST_LT (max, integer_zero_node))
8520 if (complain & tf_error)
8521 error ("creating array with negative size (%qE)", max);
8523 return error_mark_node;
8526 return compute_array_index_type (NULL_TREE, max);
8529 case TEMPLATE_TYPE_PARM:
8530 case TEMPLATE_TEMPLATE_PARM:
8531 case BOUND_TEMPLATE_TEMPLATE_PARM:
8532 case TEMPLATE_PARM_INDEX:
8537 tree arg = NULL_TREE;
8541 gcc_assert (TREE_VEC_LENGTH (args) > 0);
8542 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
8543 || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
8544 || TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8546 idx = TEMPLATE_TYPE_IDX (t);
8547 level = TEMPLATE_TYPE_LEVEL (t);
8551 idx = TEMPLATE_PARM_IDX (t);
8552 level = TEMPLATE_PARM_LEVEL (t);
8555 levels = TMPL_ARGS_DEPTH (args);
8556 if (level <= levels)
8558 arg = TMPL_ARG (args, level, idx);
8560 if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
8561 /* See through ARGUMENT_PACK_SELECT arguments. */
8562 arg = ARGUMENT_PACK_SELECT_ARG (arg);
8565 if (arg == error_mark_node)
8566 return error_mark_node;
8567 else if (arg != NULL_TREE)
8569 if (ARGUMENT_PACK_P (arg))
8570 /* If ARG is an argument pack, we don't actually want to
8571 perform a substitution here, because substitutions
8572 for argument packs are only done
8573 element-by-element. We can get to this point when
8574 substituting the type of a non-type template
8575 parameter pack, when that type actually contains
8576 template parameter packs from an outer template, e.g.,
8578 template<typename... Types> struct A {
8579 template<Types... Values> struct B { };
8583 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
8586 gcc_assert (TYPE_P (arg));
8588 /* cv-quals from the template are discarded when
8589 substituting in a function or reference type. */
8590 if (TREE_CODE (arg) == FUNCTION_TYPE
8591 || TREE_CODE (arg) == METHOD_TYPE
8592 || TREE_CODE (arg) == REFERENCE_TYPE)
8593 quals = cp_type_quals (arg);
8595 quals = cp_type_quals (arg) | cp_type_quals (t);
8597 return cp_build_qualified_type_real
8598 (arg, quals, complain | tf_ignore_bad_quals);
8600 else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8602 /* We are processing a type constructed from a
8603 template template parameter. */
8604 tree argvec = tsubst (TYPE_TI_ARGS (t),
8605 args, complain, in_decl);
8606 if (argvec == error_mark_node)
8607 return error_mark_node;
8609 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
8610 are resolving nested-types in the signature of a
8611 member function templates. Otherwise ARG is a
8612 TEMPLATE_DECL and is the real template to be
8614 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
8615 arg = TYPE_NAME (arg);
8617 r = lookup_template_class (arg,
8620 /*entering_scope=*/0,
8622 return cp_build_qualified_type_real
8623 (r, TYPE_QUALS (t), complain);
8626 /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX. */
8631 /* This can happen during the attempted tsubst'ing in
8632 unify. This means that we don't yet have any information
8633 about the template parameter in question. */
8636 /* If we get here, we must have been looking at a parm for a
8637 more deeply nested template. Make a new version of this
8638 template parameter, but with a lower level. */
8639 switch (TREE_CODE (t))
8641 case TEMPLATE_TYPE_PARM:
8642 case TEMPLATE_TEMPLATE_PARM:
8643 case BOUND_TEMPLATE_TEMPLATE_PARM:
8644 if (cp_type_quals (t))
8646 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
8647 r = cp_build_qualified_type_real
8648 (r, cp_type_quals (t),
8649 complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
8650 ? tf_ignore_bad_quals : 0));
8655 TEMPLATE_TYPE_PARM_INDEX (r)
8656 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
8658 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
8659 TYPE_MAIN_VARIANT (r) = r;
8660 TYPE_POINTER_TO (r) = NULL_TREE;
8661 TYPE_REFERENCE_TO (r) = NULL_TREE;
8663 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
8664 /* We have reduced the level of the template
8665 template parameter, but not the levels of its
8666 template parameters, so canonical_type_parameter
8667 will not be able to find the canonical template
8668 template parameter for this level. Thus, we
8669 require structural equality checking to compare
8670 TEMPLATE_TEMPLATE_PARMs. */
8671 SET_TYPE_STRUCTURAL_EQUALITY (r);
8672 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
8673 SET_TYPE_STRUCTURAL_EQUALITY (r);
8675 TYPE_CANONICAL (r) = canonical_type_parameter (r);
8677 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8679 tree argvec = tsubst (TYPE_TI_ARGS (t), args,
8681 if (argvec == error_mark_node)
8682 return error_mark_node;
8684 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
8685 = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
8690 case TEMPLATE_PARM_INDEX:
8691 r = reduce_template_parm_level (t, type, levels);
8703 tree purpose, value, chain;
8705 if (t == void_list_node)
8708 purpose = TREE_PURPOSE (t);
8711 purpose = tsubst (purpose, args, complain, in_decl);
8712 if (purpose == error_mark_node)
8713 return error_mark_node;
8715 value = TREE_VALUE (t);
8718 value = tsubst (value, args, complain, in_decl);
8719 if (value == error_mark_node)
8720 return error_mark_node;
8722 chain = TREE_CHAIN (t);
8723 if (chain && chain != void_type_node)
8725 chain = tsubst (chain, args, complain, in_decl);
8726 if (chain == error_mark_node)
8727 return error_mark_node;
8729 if (purpose == TREE_PURPOSE (t)
8730 && value == TREE_VALUE (t)
8731 && chain == TREE_CHAIN (t))
8733 return hash_tree_cons (purpose, value, chain);
8737 /* We should never be tsubsting a binfo. */
8741 /* A vector of template arguments. */
8743 return tsubst_template_args (t, args, complain, in_decl);
8746 case REFERENCE_TYPE:
8748 enum tree_code code;
8750 if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
8753 code = TREE_CODE (t);
8758 Type deduction may fail for any of the following
8761 -- Attempting to create a pointer to reference type.
8762 -- Attempting to create a reference to a reference type or
8763 a reference to void.
8765 Core issue 106 says that creating a reference to a reference
8766 during instantiation is no longer a cause for failure. We
8767 only enforce this check in strict C++98 mode. */
8768 if ((TREE_CODE (type) == REFERENCE_TYPE
8769 && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
8770 || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
8772 static location_t last_loc;
8774 /* We keep track of the last time we issued this error
8775 message to avoid spewing a ton of messages during a
8776 single bad template instantiation. */
8777 if (complain & tf_error
8778 #ifdef USE_MAPPED_LOCATION
8779 && last_loc != input_location
8781 && (last_loc.line != input_line
8782 || last_loc.file != input_filename)
8786 if (TREE_CODE (type) == VOID_TYPE)
8787 error ("forming reference to void");
8789 error ("forming %s to reference type %qT",
8790 (code == POINTER_TYPE) ? "pointer" : "reference",
8792 last_loc = input_location;
8795 return error_mark_node;
8797 else if (code == POINTER_TYPE)
8799 r = build_pointer_type (type);
8800 if (TREE_CODE (type) == METHOD_TYPE)
8801 r = build_ptrmemfunc_type (r);
8803 else if (TREE_CODE (type) == REFERENCE_TYPE)
8804 /* In C++0x, during template argument substitution, when there is an
8805 attempt to create a reference to a reference type, reference
8806 collapsing is applied as described in [14.3.1/4 temp.arg.type]:
8808 "If a template-argument for a template-parameter T names a type
8809 that is a reference to a type A, an attempt to create the type
8810 'lvalue reference to cv T' creates the type 'lvalue reference to
8811 A,' while an attempt to create the type type rvalue reference to
8812 cv T' creates the type T"
8814 r = cp_build_reference_type
8816 TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
8818 r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
8819 r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
8821 if (r != error_mark_node)
8822 /* Will this ever be needed for TYPE_..._TO values? */
8829 r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
8830 if (r == error_mark_node || !IS_AGGR_TYPE (r))
8834 Type deduction may fail for any of the following
8837 -- Attempting to create "pointer to member of T" when T
8838 is not a class type. */
8839 if (complain & tf_error)
8840 error ("creating pointer to member of non-class type %qT", r);
8841 return error_mark_node;
8843 if (TREE_CODE (type) == REFERENCE_TYPE)
8845 if (complain & tf_error)
8846 error ("creating pointer to member reference type %qT", type);
8847 return error_mark_node;
8849 if (TREE_CODE (type) == VOID_TYPE)
8851 if (complain & tf_error)
8852 error ("creating pointer to member of type void");
8853 return error_mark_node;
8855 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
8856 if (TREE_CODE (type) == FUNCTION_TYPE)
8858 /* The type of the implicit object parameter gets its
8859 cv-qualifiers from the FUNCTION_TYPE. */
8861 tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
8862 cp_type_quals (type));
8864 method_type = build_method_type_directly (this_type,
8866 TYPE_ARG_TYPES (type));
8867 memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
8868 return cp_build_qualified_type_real (memptr, cp_type_quals (t),
8872 return cp_build_qualified_type_real (build_ptrmem_type (r, type),
8881 fntype = tsubst_function_type (t, args, complain, in_decl);
8882 if (fntype == error_mark_node)
8883 return error_mark_node;
8885 /* Substitute the exception specification. */
8886 specs = tsubst_exception_specification (t, args, complain,
8888 if (specs == error_mark_node)
8889 return error_mark_node;
8891 fntype = build_exception_variant (fntype, specs);
8896 tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
8897 if (domain == error_mark_node)
8898 return error_mark_node;
8900 /* As an optimization, we avoid regenerating the array type if
8901 it will obviously be the same as T. */
8902 if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
8905 /* These checks should match the ones in grokdeclarator.
8909 The deduction may fail for any of the following reasons:
8911 -- Attempting to create an array with an element type that
8912 is void, a function type, or a reference type, or [DR337]
8913 an abstract class type. */
8914 if (TREE_CODE (type) == VOID_TYPE
8915 || TREE_CODE (type) == FUNCTION_TYPE
8916 || TREE_CODE (type) == REFERENCE_TYPE)
8918 if (complain & tf_error)
8919 error ("creating array of %qT", type);
8920 return error_mark_node;
8922 if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
8924 if (complain & tf_error)
8925 error ("creating array of %qT, which is an abstract class type",
8927 return error_mark_node;
8930 r = build_cplus_array_type (type, domain);
8937 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
8938 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
8940 if (e1 == error_mark_node || e2 == error_mark_node)
8941 return error_mark_node;
8943 return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
8949 tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
8950 if (e == error_mark_node)
8951 return error_mark_node;
8953 return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
8958 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
8959 in_decl, /*entering_scope=*/1);
8960 tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
8963 if (ctx == error_mark_node || f == error_mark_node)
8964 return error_mark_node;
8966 if (!IS_AGGR_TYPE (ctx))
8968 if (complain & tf_error)
8969 error ("%qT is not a class, struct, or union type", ctx);
8970 return error_mark_node;
8972 else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
8974 /* Normally, make_typename_type does not require that the CTX
8975 have complete type in order to allow things like:
8977 template <class T> struct S { typename S<T>::X Y; };
8979 But, such constructs have already been resolved by this
8980 point, so here CTX really should have complete type, unless
8981 it's a partial instantiation. */
8982 ctx = complete_type (ctx);
8983 if (!COMPLETE_TYPE_P (ctx))
8985 if (complain & tf_error)
8986 cxx_incomplete_type_error (NULL_TREE, ctx);
8987 return error_mark_node;
8991 f = make_typename_type (ctx, f, typename_type,
8992 (complain & tf_error) | tf_keep_type_decl);
8993 if (f == error_mark_node)
8995 if (TREE_CODE (f) == TYPE_DECL)
8997 complain |= tf_ignore_bad_quals;
9001 if (TREE_CODE (f) != TYPENAME_TYPE)
9003 if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
9004 error ("%qT resolves to %qT, which is not an enumeration type",
9006 else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
9007 error ("%qT resolves to %qT, which is is not a class type",
9011 return cp_build_qualified_type_real
9012 (f, cp_type_quals (f) | cp_type_quals (t), complain);
9015 case UNBOUND_CLASS_TEMPLATE:
9017 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9018 in_decl, /*entering_scope=*/1);
9019 tree name = TYPE_IDENTIFIER (t);
9020 tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
9022 if (ctx == error_mark_node || name == error_mark_node)
9023 return error_mark_node;
9026 parm_list = tsubst_template_parms (parm_list, args, complain);
9027 return make_unbound_class_template (ctx, name, parm_list, complain);
9037 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9038 tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl,
9039 /*integral_constant_expression_p=*/false);
9040 if (e1 == error_mark_node || e2 == error_mark_node)
9041 return error_mark_node;
9043 return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
9048 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9049 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9050 if (e1 == error_mark_node || e2 == error_mark_node)
9051 return error_mark_node;
9053 return build_qualified_name (/*type=*/NULL_TREE,
9054 e1, e2, QUALIFIED_NAME_IS_TEMPLATE (t));
9061 type = finish_typeof (tsubst_expr
9062 (TYPEOF_TYPE_EXPR (t), args,
9064 /*integral_constant_expression_p=*/false));
9065 return cp_build_qualified_type_real (type,
9067 | cp_type_quals (type),
9076 finish_decltype_type (tsubst_expr
9077 (DECLTYPE_TYPE_EXPR (t), args,
9079 /*integral_constant_expression_p=*/false),
9080 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t));
9081 return cp_build_qualified_type_real (type,
9083 | cp_type_quals (type),
9087 case TYPE_ARGUMENT_PACK:
9088 case NONTYPE_ARGUMENT_PACK:
9090 tree r = make_node (TREE_CODE (t));
9092 tsubst_template_args (ARGUMENT_PACK_ARGS (t),
9096 SET_ARGUMENT_PACK_ARGS (r, packed_out);
9098 /* For template nontype argument packs, also substitute into
9100 if (TREE_CODE (t) == NONTYPE_ARGUMENT_PACK)
9101 TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
9108 sorry ("use of %qs in template",
9109 tree_code_name [(int) TREE_CODE (t)]);
9110 return error_mark_node;
9114 /* Like tsubst_expr for a BASELINK. OBJECT_TYPE, if non-NULL, is the
9115 type of the expression on the left-hand side of the "." or "->"
9119 tsubst_baselink (tree baselink, tree object_type,
9120 tree args, tsubst_flags_t complain, tree in_decl)
9123 tree qualifying_scope;
9126 tree template_args = 0;
9127 bool template_id_p = false;
9129 /* A baselink indicates a function from a base class. Both the
9130 BASELINK_ACCESS_BINFO and the base class referenced may
9131 indicate bases of the template class, rather than the
9132 instantiated class. In addition, lookups that were not
9133 ambiguous before may be ambiguous now. Therefore, we perform
9134 the lookup again. */
9135 qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
9136 qualifying_scope = tsubst (qualifying_scope, args,
9138 fns = BASELINK_FUNCTIONS (baselink);
9139 optype = BASELINK_OPTYPE (baselink);
9140 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
9142 template_id_p = true;
9143 template_args = TREE_OPERAND (fns, 1);
9144 fns = TREE_OPERAND (fns, 0);
9146 template_args = tsubst_template_args (template_args, args,
9149 name = DECL_NAME (get_first_fn (fns));
9150 baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
9152 /* If lookup found a single function, mark it as used at this
9153 point. (If it lookup found multiple functions the one selected
9154 later by overload resolution will be marked as used at that
9156 if (BASELINK_P (baselink))
9157 fns = BASELINK_FUNCTIONS (baselink);
9158 if (!template_id_p && !really_overloaded_fn (fns))
9159 mark_used (OVL_CURRENT (fns));
9161 /* Add back the template arguments, if present. */
9162 if (BASELINK_P (baselink) && template_id_p)
9163 BASELINK_FUNCTIONS (baselink)
9164 = build_nt (TEMPLATE_ID_EXPR,
9165 BASELINK_FUNCTIONS (baselink),
9167 /* Update the conversion operator type. */
9168 BASELINK_OPTYPE (baselink)
9169 = tsubst (optype, args, complain, in_decl);
9172 object_type = current_class_type;
9173 return adjust_result_of_qualified_name_lookup (baselink,
9178 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID. DONE is
9179 true if the qualified-id will be a postfix-expression in-and-of
9180 itself; false if more of the postfix-expression follows the
9181 QUALIFIED_ID. ADDRESS_P is true if the qualified-id is the operand
9185 tsubst_qualified_id (tree qualified_id, tree args,
9186 tsubst_flags_t complain, tree in_decl,
9187 bool done, bool address_p)
9195 gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
9197 /* Figure out what name to look up. */
9198 name = TREE_OPERAND (qualified_id, 1);
9199 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
9202 template_args = TREE_OPERAND (name, 1);
9204 template_args = tsubst_template_args (template_args, args,
9206 name = TREE_OPERAND (name, 0);
9210 is_template = false;
9211 template_args = NULL_TREE;
9214 /* Substitute into the qualifying scope. When there are no ARGS, we
9215 are just trying to simplify a non-dependent expression. In that
9216 case the qualifying scope may be dependent, and, in any case,
9217 substituting will not help. */
9218 scope = TREE_OPERAND (qualified_id, 0);
9221 scope = tsubst (scope, args, complain, in_decl);
9222 expr = tsubst_copy (name, args, complain, in_decl);
9227 if (dependent_type_p (scope))
9228 return build_qualified_name (/*type=*/NULL_TREE,
9230 QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
9232 if (!BASELINK_P (name) && !DECL_P (expr))
9234 if (TREE_CODE (expr) == BIT_NOT_EXPR)
9235 /* If this were actually a destructor call, it would have been
9236 parsed as such by the parser. */
9237 expr = error_mark_node;
9239 expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
9240 if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
9241 ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
9243 if (complain & tf_error)
9245 error ("dependent-name %qE is parsed as a non-type, but "
9246 "instantiation yields a type", qualified_id);
9247 inform ("say %<typename %E%> if a type is meant", qualified_id);
9249 return error_mark_node;
9255 check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
9257 /* Remember that there was a reference to this entity. */
9261 if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
9263 if (complain & tf_error)
9264 qualified_name_lookup_error (scope,
9265 TREE_OPERAND (qualified_id, 1),
9267 return error_mark_node;
9271 expr = lookup_template_function (expr, template_args);
9273 if (expr == error_mark_node && complain & tf_error)
9274 qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
9276 else if (TYPE_P (scope))
9278 expr = (adjust_result_of_qualified_name_lookup
9279 (expr, scope, current_class_type));
9280 expr = (finish_qualified_id_expr
9281 (scope, expr, done, address_p,
9282 QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
9283 /*template_arg_p=*/false));
9286 /* Expressions do not generally have reference type. */
9287 if (TREE_CODE (expr) != SCOPE_REF
9288 /* However, if we're about to form a pointer-to-member, we just
9289 want the referenced member referenced. */
9290 && TREE_CODE (expr) != OFFSET_REF)
9291 expr = convert_from_reference (expr);
9296 /* Like tsubst, but deals with expressions. This function just replaces
9297 template parms; to finish processing the resultant expression, use
9301 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9303 enum tree_code code;
9306 if (t == NULL_TREE || t == error_mark_node)
9309 code = TREE_CODE (t);
9314 r = retrieve_local_specialization (t);
9315 gcc_assert (r != NULL);
9316 if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
9317 r = ARGUMENT_PACK_SELECT_ARG (r);
9326 if (DECL_TEMPLATE_PARM_P (t))
9327 return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
9328 /* There is no need to substitute into namespace-scope
9330 if (DECL_NAMESPACE_SCOPE_P (t))
9332 /* If ARGS is NULL, then T is known to be non-dependent. */
9333 if (args == NULL_TREE)
9334 return integral_constant_value (t);
9336 /* Unfortunately, we cannot just call lookup_name here.
9339 template <int I> int f() {
9341 struct S { void g() { E e = a; } };
9344 When we instantiate f<7>::S::g(), say, lookup_name is not
9345 clever enough to find f<7>::a. */
9347 = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
9348 /*entering_scope=*/0);
9350 for (v = TYPE_VALUES (enum_type);
9353 if (TREE_PURPOSE (v) == DECL_NAME (t))
9354 return TREE_VALUE (v);
9356 /* We didn't find the name. That should never happen; if
9357 name-lookup found it during preliminary parsing, we
9358 should find it again here during instantiation. */
9364 if (DECL_CONTEXT (t))
9368 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
9369 /*entering_scope=*/1);
9370 if (ctx != DECL_CONTEXT (t))
9372 tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
9375 if (complain & tf_error)
9376 error ("using invalid field %qD", t);
9377 return error_mark_node;
9387 if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
9388 || local_variable_p (t))
9389 t = tsubst (t, args, complain, in_decl);
9394 return tsubst_baselink (t, current_class_type, args, complain, in_decl);
9397 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9398 return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
9399 args, complain, in_decl);
9400 else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
9401 return tsubst (t, args, complain, in_decl);
9402 else if (DECL_CLASS_SCOPE_P (t)
9403 && uses_template_parms (DECL_CONTEXT (t)))
9405 /* Template template argument like the following example need
9408 template <template <class> class TT> struct C {};
9409 template <class T> struct D {
9410 template <class U> struct E {};
9415 We are processing the template argument `E' in #1 for
9416 the template instantiation #2. Originally, `E' is a
9417 TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT. Now we
9418 have to substitute this with one having context `D<int>'. */
9420 tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
9421 return lookup_field (context, DECL_NAME(t), 0, false);
9424 /* Ordinary template template argument. */
9428 case REINTERPRET_CAST_EXPR:
9429 case CONST_CAST_EXPR:
9430 case STATIC_CAST_EXPR:
9431 case DYNAMIC_CAST_EXPR:
9434 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9435 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9438 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
9440 /* We only want to compute the number of arguments. */
9441 tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
9443 return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
9449 case TRUTH_NOT_EXPR:
9452 case UNARY_PLUS_EXPR: /* Unary + */
9460 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9461 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9468 object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
9469 name = TREE_OPERAND (t, 1);
9470 if (TREE_CODE (name) == BIT_NOT_EXPR)
9472 name = tsubst_copy (TREE_OPERAND (name, 0), args,
9474 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9476 else if (TREE_CODE (name) == SCOPE_REF
9477 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
9479 tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
9481 name = TREE_OPERAND (name, 1);
9482 name = tsubst_copy (TREE_OPERAND (name, 0), args,
9484 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9485 name = build_qualified_name (/*type=*/NULL_TREE,
9487 /*template_p=*/false);
9489 else if (TREE_CODE (name) == BASELINK)
9490 name = tsubst_baselink (name,
9491 non_reference (TREE_TYPE (object)),
9495 name = tsubst_copy (name, args, complain, in_decl);
9496 return build_nt (COMPONENT_REF, object, name, NULL_TREE);
9502 case TRUNC_DIV_EXPR:
9504 case FLOOR_DIV_EXPR:
9505 case ROUND_DIV_EXPR:
9506 case EXACT_DIV_EXPR:
9510 case TRUNC_MOD_EXPR:
9511 case FLOOR_MOD_EXPR:
9512 case TRUTH_ANDIF_EXPR:
9513 case TRUTH_ORIF_EXPR:
9514 case TRUTH_AND_EXPR:
9531 case PREDECREMENT_EXPR:
9532 case PREINCREMENT_EXPR:
9533 case POSTDECREMENT_EXPR:
9534 case POSTINCREMENT_EXPR:
9536 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9537 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
9540 return build_qualified_name (/*type=*/NULL_TREE,
9541 tsubst_copy (TREE_OPERAND (t, 0),
9542 args, complain, in_decl),
9543 tsubst_copy (TREE_OPERAND (t, 1),
9544 args, complain, in_decl),
9545 QUALIFIED_NAME_IS_TEMPLATE (t));
9550 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9551 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9552 NULL_TREE, NULL_TREE);
9556 int n = VL_EXP_OPERAND_LENGTH (t);
9557 tree result = build_vl_exp (CALL_EXPR, n);
9559 for (i = 0; i < n; i++)
9560 TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
9567 case PSEUDO_DTOR_EXPR:
9570 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9571 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9572 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
9573 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
9580 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9581 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9582 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
9583 NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
9590 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9591 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
9592 DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
9593 DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
9597 case TEMPLATE_ID_EXPR:
9599 /* Substituted template arguments */
9600 tree fn = TREE_OPERAND (t, 0);
9601 tree targs = TREE_OPERAND (t, 1);
9603 fn = tsubst_copy (fn, args, complain, in_decl);
9605 targs = tsubst_template_args (targs, args, complain, in_decl);
9607 return lookup_template_function (fn, targs);
9612 tree purpose, value, chain;
9614 if (t == void_list_node)
9617 purpose = TREE_PURPOSE (t);
9619 purpose = tsubst_copy (purpose, args, complain, in_decl);
9620 value = TREE_VALUE (t);
9622 value = tsubst_copy (value, args, complain, in_decl);
9623 chain = TREE_CHAIN (t);
9624 if (chain && chain != void_type_node)
9625 chain = tsubst_copy (chain, args, complain, in_decl);
9626 if (purpose == TREE_PURPOSE (t)
9627 && value == TREE_VALUE (t)
9628 && chain == TREE_CHAIN (t))
9630 return tree_cons (purpose, value, chain);
9637 case TEMPLATE_TYPE_PARM:
9638 case TEMPLATE_TEMPLATE_PARM:
9639 case BOUND_TEMPLATE_TEMPLATE_PARM:
9640 case TEMPLATE_PARM_INDEX:
9642 case REFERENCE_TYPE:
9648 case UNBOUND_CLASS_TEMPLATE:
9652 return tsubst (t, args, complain, in_decl);
9654 case IDENTIFIER_NODE:
9655 if (IDENTIFIER_TYPENAME_P (t))
9657 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9658 return mangle_conv_op_name_for_type (new_type);
9664 /* This is handled by tsubst_copy_and_build. */
9668 return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
9670 tsubst (TREE_TYPE (t), args, complain, in_decl));
9672 case CLEANUP_POINT_EXPR:
9673 /* We shouldn't have built any of these during initial template
9674 generation. Instead, they should be built during instantiation
9675 in response to the saved STMT_IS_FULL_EXPR_P setting. */
9679 mark_used (TREE_OPERAND (t, 1));
9682 case EXPR_PACK_EXPANSION:
9683 error ("invalid use of pack expansion expression");
9684 return error_mark_node;
9686 case NONTYPE_ARGUMENT_PACK:
9687 error ("use %<...%> to expand argument pack");
9688 return error_mark_node;
9695 /* Like tsubst_copy, but specifically for OpenMP clauses. */
9698 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
9701 tree new_clauses = NULL, nc, oc;
9703 for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
9705 nc = copy_node (oc);
9706 OMP_CLAUSE_CHAIN (nc) = new_clauses;
9709 switch (OMP_CLAUSE_CODE (nc))
9711 case OMP_CLAUSE_PRIVATE:
9712 case OMP_CLAUSE_SHARED:
9713 case OMP_CLAUSE_FIRSTPRIVATE:
9714 case OMP_CLAUSE_LASTPRIVATE:
9715 case OMP_CLAUSE_REDUCTION:
9716 case OMP_CLAUSE_COPYIN:
9717 case OMP_CLAUSE_COPYPRIVATE:
9719 case OMP_CLAUSE_NUM_THREADS:
9720 case OMP_CLAUSE_SCHEDULE:
9721 OMP_CLAUSE_OPERAND (nc, 0)
9722 = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
9723 in_decl, /*integral_constant_expression_p=*/false);
9725 case OMP_CLAUSE_NOWAIT:
9726 case OMP_CLAUSE_ORDERED:
9727 case OMP_CLAUSE_DEFAULT:
9734 return finish_omp_clauses (nreverse (new_clauses));
9737 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes. */
9740 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
9743 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
9745 tree purpose, value, chain;
9750 if (TREE_CODE (t) != TREE_LIST)
9751 return tsubst_copy_and_build (t, args, complain, in_decl,
9752 /*function_p=*/false,
9753 /*integral_constant_expression_p=*/false);
9755 if (t == void_list_node)
9758 purpose = TREE_PURPOSE (t);
9760 purpose = RECUR (purpose);
9761 value = TREE_VALUE (t);
9763 value = RECUR (value);
9764 chain = TREE_CHAIN (t);
9765 if (chain && chain != void_type_node)
9766 chain = RECUR (chain);
9767 return tree_cons (purpose, value, chain);
9771 /* Like tsubst_copy for expressions, etc. but also does semantic
9775 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
9776 bool integral_constant_expression_p)
9778 #define RECUR(NODE) \
9779 tsubst_expr ((NODE), args, complain, in_decl, \
9780 integral_constant_expression_p)
9784 if (t == NULL_TREE || t == error_mark_node)
9787 if (EXPR_HAS_LOCATION (t))
9788 input_location = EXPR_LOCATION (t);
9789 if (STATEMENT_CODE_P (TREE_CODE (t)))
9790 current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
9792 switch (TREE_CODE (t))
9794 case STATEMENT_LIST:
9796 tree_stmt_iterator i;
9797 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
9798 RECUR (tsi_stmt (i));
9802 case CTOR_INITIALIZER:
9803 finish_mem_initializers (tsubst_initializer_list
9804 (TREE_OPERAND (t, 0), args));
9808 finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
9812 tmp = RECUR (EXPR_STMT_EXPR (t));
9813 if (EXPR_STMT_STMT_EXPR_RESULT (t))
9814 finish_stmt_expr_expr (tmp, cur_stmt_expr);
9816 finish_expr_stmt (tmp);
9820 do_using_directive (RECUR (USING_STMT_NAMESPACE (t)));
9828 decl = DECL_EXPR_DECL (t);
9829 if (TREE_CODE (decl) == LABEL_DECL)
9830 finish_label_decl (DECL_NAME (decl));
9831 else if (TREE_CODE (decl) == USING_DECL)
9833 tree scope = USING_DECL_SCOPE (decl);
9834 tree name = DECL_NAME (decl);
9837 scope = RECUR (scope);
9838 decl = lookup_qualified_name (scope, name,
9839 /*is_type_p=*/false,
9840 /*complain=*/false);
9841 if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
9842 qualified_name_lookup_error (scope, name, decl);
9844 do_local_using_decl (decl, scope, name);
9848 init = DECL_INITIAL (decl);
9849 decl = tsubst (decl, args, complain, in_decl);
9850 if (decl != error_mark_node)
9852 /* By marking the declaration as instantiated, we avoid
9853 trying to instantiate it. Since instantiate_decl can't
9854 handle local variables, and since we've already done
9855 all that needs to be done, that's the right thing to
9857 if (TREE_CODE (decl) == VAR_DECL)
9858 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
9859 if (TREE_CODE (decl) == VAR_DECL
9860 && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
9861 /* Anonymous aggregates are a special case. */
9862 finish_anon_union (decl);
9865 maybe_push_decl (decl);
9866 if (TREE_CODE (decl) == VAR_DECL
9867 && DECL_PRETTY_FUNCTION_P (decl))
9869 /* For __PRETTY_FUNCTION__ we have to adjust the
9871 const char *const name
9872 = cxx_printable_name (current_function_decl, 2);
9873 init = cp_fname_init (name, &TREE_TYPE (decl));
9876 init = RECUR (init);
9877 finish_decl (decl, init, NULL_TREE);
9882 /* A DECL_EXPR can also be used as an expression, in the condition
9883 clause of an if/for/while construct. */
9888 stmt = begin_for_stmt ();
9889 RECUR (FOR_INIT_STMT (t));
9890 finish_for_init_stmt (stmt);
9891 tmp = RECUR (FOR_COND (t));
9892 finish_for_cond (tmp, stmt);
9893 tmp = RECUR (FOR_EXPR (t));
9894 finish_for_expr (tmp, stmt);
9895 RECUR (FOR_BODY (t));
9896 finish_for_stmt (stmt);
9900 stmt = begin_while_stmt ();
9901 tmp = RECUR (WHILE_COND (t));
9902 finish_while_stmt_cond (tmp, stmt);
9903 RECUR (WHILE_BODY (t));
9904 finish_while_stmt (stmt);
9908 stmt = begin_do_stmt ();
9909 RECUR (DO_BODY (t));
9910 finish_do_body (stmt);
9911 tmp = RECUR (DO_COND (t));
9912 finish_do_stmt (tmp, stmt);
9916 stmt = begin_if_stmt ();
9917 tmp = RECUR (IF_COND (t));
9918 finish_if_stmt_cond (tmp, stmt);
9919 RECUR (THEN_CLAUSE (t));
9920 finish_then_clause (stmt);
9922 if (ELSE_CLAUSE (t))
9924 begin_else_clause (stmt);
9925 RECUR (ELSE_CLAUSE (t));
9926 finish_else_clause (stmt);
9929 finish_if_stmt (stmt);
9933 if (BIND_EXPR_BODY_BLOCK (t))
9934 stmt = begin_function_body ();
9936 stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
9937 ? BCS_TRY_BLOCK : 0);
9939 RECUR (BIND_EXPR_BODY (t));
9941 if (BIND_EXPR_BODY_BLOCK (t))
9942 finish_function_body (stmt);
9944 finish_compound_stmt (stmt);
9948 finish_break_stmt ();
9952 finish_continue_stmt ();
9956 stmt = begin_switch_stmt ();
9957 tmp = RECUR (SWITCH_STMT_COND (t));
9958 finish_switch_cond (tmp, stmt);
9959 RECUR (SWITCH_STMT_BODY (t));
9960 finish_switch_stmt (stmt);
9963 case CASE_LABEL_EXPR:
9964 finish_case_label (RECUR (CASE_LOW (t)),
9965 RECUR (CASE_HIGH (t)));
9969 finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
9973 tmp = GOTO_DESTINATION (t);
9974 if (TREE_CODE (tmp) != LABEL_DECL)
9975 /* Computed goto's must be tsubst'd into. On the other hand,
9976 non-computed gotos must not be; the identifier in question
9977 will have no binding. */
9980 tmp = DECL_NAME (tmp);
9981 finish_goto_stmt (tmp);
9985 tmp = finish_asm_stmt
9986 (ASM_VOLATILE_P (t),
9987 RECUR (ASM_STRING (t)),
9988 tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
9989 tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
9990 tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl));
9992 tree asm_expr = tmp;
9993 if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
9994 asm_expr = TREE_OPERAND (asm_expr, 0);
9995 ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
10002 stmt = begin_try_block ();
10003 RECUR (TRY_STMTS (t));
10004 finish_cleanup_try_block (stmt);
10005 finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
10009 tree compound_stmt = NULL_TREE;
10011 if (FN_TRY_BLOCK_P (t))
10012 stmt = begin_function_try_block (&compound_stmt);
10014 stmt = begin_try_block ();
10016 RECUR (TRY_STMTS (t));
10018 if (FN_TRY_BLOCK_P (t))
10019 finish_function_try_block (stmt);
10021 finish_try_block (stmt);
10023 RECUR (TRY_HANDLERS (t));
10024 if (FN_TRY_BLOCK_P (t))
10025 finish_function_handler_sequence (stmt, compound_stmt);
10027 finish_handler_sequence (stmt);
10033 tree decl = HANDLER_PARMS (t);
10037 decl = tsubst (decl, args, complain, in_decl);
10038 /* Prevent instantiate_decl from trying to instantiate
10039 this variable. We've already done all that needs to be
10041 if (decl != error_mark_node)
10042 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10044 stmt = begin_handler ();
10045 finish_handler_parms (decl, stmt);
10046 RECUR (HANDLER_BODY (t));
10047 finish_handler (stmt);
10052 tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
10055 case STATIC_ASSERT:
10058 tsubst_expr (STATIC_ASSERT_CONDITION (t),
10061 /*integral_constant_expression_p=*/true);
10062 finish_static_assert (condition,
10063 STATIC_ASSERT_MESSAGE (t),
10064 STATIC_ASSERT_SOURCE_LOCATION (t),
10065 /*member_p=*/false);
10070 tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
10071 args, complain, in_decl);
10072 stmt = begin_omp_parallel ();
10073 RECUR (OMP_PARALLEL_BODY (t));
10074 OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
10075 = OMP_PARALLEL_COMBINED (t);
10080 tree clauses, decl, init, cond, incr, body, pre_body;
10082 clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
10083 args, complain, in_decl);
10084 init = OMP_FOR_INIT (t);
10085 gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
10086 decl = RECUR (TREE_OPERAND (init, 0));
10087 init = RECUR (TREE_OPERAND (init, 1));
10088 cond = RECUR (OMP_FOR_COND (t));
10089 incr = RECUR (OMP_FOR_INCR (t));
10091 stmt = begin_omp_structured_block ();
10093 pre_body = push_stmt_list ();
10094 RECUR (OMP_FOR_PRE_BODY (t));
10095 pre_body = pop_stmt_list (pre_body);
10097 body = push_stmt_list ();
10098 RECUR (OMP_FOR_BODY (t));
10099 body = pop_stmt_list (body);
10101 t = finish_omp_for (EXPR_LOCATION (t), decl, init, cond, incr, body,
10104 OMP_FOR_CLAUSES (t) = clauses;
10106 add_stmt (finish_omp_structured_block (stmt));
10112 tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
10113 stmt = push_stmt_list ();
10114 RECUR (OMP_BODY (t));
10115 stmt = pop_stmt_list (stmt);
10118 OMP_BODY (t) = stmt;
10119 OMP_CLAUSES (t) = tmp;
10127 stmt = push_stmt_list ();
10128 RECUR (OMP_BODY (t));
10129 stmt = pop_stmt_list (stmt);
10132 OMP_BODY (t) = stmt;
10137 if (OMP_ATOMIC_DEPENDENT_P (t))
10139 tree op1 = TREE_OPERAND (t, 1);
10140 tree lhs = RECUR (TREE_OPERAND (op1, 0));
10141 tree rhs = RECUR (TREE_OPERAND (op1, 1));
10142 finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
10146 case EXPR_PACK_EXPANSION:
10147 error ("invalid use of pack expansion expression");
10148 return error_mark_node;
10150 case NONTYPE_ARGUMENT_PACK:
10151 error ("use %<...%> to expand argument pack");
10152 return error_mark_node;
10155 gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
10157 return tsubst_copy_and_build (t, args, complain, in_decl,
10158 /*function_p=*/false,
10159 integral_constant_expression_p);
10166 /* T is a postfix-expression that is not being used in a function
10167 call. Return the substituted version of T. */
10170 tsubst_non_call_postfix_expression (tree t, tree args,
10171 tsubst_flags_t complain,
10174 if (TREE_CODE (t) == SCOPE_REF)
10175 t = tsubst_qualified_id (t, args, complain, in_decl,
10176 /*done=*/false, /*address_p=*/false);
10178 t = tsubst_copy_and_build (t, args, complain, in_decl,
10179 /*function_p=*/false,
10180 /*integral_constant_expression_p=*/false);
10185 /* Like tsubst but deals with expressions and performs semantic
10186 analysis. FUNCTION_P is true if T is the "F" in "F (ARGS)". */
10189 tsubst_copy_and_build (tree t,
10191 tsubst_flags_t complain,
10194 bool integral_constant_expression_p)
10196 #define RECUR(NODE) \
10197 tsubst_copy_and_build (NODE, args, complain, in_decl, \
10198 /*function_p=*/false, \
10199 integral_constant_expression_p)
10203 if (t == NULL_TREE || t == error_mark_node)
10206 switch (TREE_CODE (t))
10210 /* Fall through. */
10211 case IDENTIFIER_NODE:
10215 bool non_integral_constant_expression_p;
10216 const char *error_msg;
10218 if (IDENTIFIER_TYPENAME_P (t))
10220 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10221 t = mangle_conv_op_name_for_type (new_type);
10224 /* Look up the name. */
10225 decl = lookup_name (t);
10227 /* By convention, expressions use ERROR_MARK_NODE to indicate
10228 failure, not NULL_TREE. */
10229 if (decl == NULL_TREE)
10230 decl = error_mark_node;
10232 decl = finish_id_expression (t, decl, NULL_TREE,
10234 integral_constant_expression_p,
10235 /*allow_non_integral_constant_expression_p=*/false,
10236 &non_integral_constant_expression_p,
10237 /*template_p=*/false,
10239 /*address_p=*/false,
10240 /*template_arg_p=*/false,
10244 if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
10245 decl = unqualified_name_lookup_error (decl);
10249 case TEMPLATE_ID_EXPR:
10252 tree template = RECUR (TREE_OPERAND (t, 0));
10253 tree targs = TREE_OPERAND (t, 1);
10256 targs = tsubst_template_args (targs, args, complain, in_decl);
10258 if (TREE_CODE (template) == COMPONENT_REF)
10260 object = TREE_OPERAND (template, 0);
10261 template = TREE_OPERAND (template, 1);
10264 object = NULL_TREE;
10265 template = lookup_template_function (template, targs);
10268 return build3 (COMPONENT_REF, TREE_TYPE (template),
10269 object, template, NULL_TREE);
10271 return baselink_for_fns (template);
10276 tree r = RECUR (TREE_OPERAND (t, 0));
10278 if (REFERENCE_REF_P (t))
10280 /* A type conversion to reference type will be enclosed in
10281 such an indirect ref, but the substitution of the cast
10282 will have also added such an indirect ref. */
10283 if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
10284 r = convert_from_reference (r);
10287 r = build_x_indirect_ref (r, "unary *");
10293 (tsubst (TREE_TYPE (t), args, complain, in_decl),
10294 RECUR (TREE_OPERAND (t, 0)));
10297 case REINTERPRET_CAST_EXPR:
10298 case CONST_CAST_EXPR:
10299 case DYNAMIC_CAST_EXPR:
10300 case STATIC_CAST_EXPR:
10305 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10306 if (integral_constant_expression_p
10307 && !cast_valid_in_integral_constant_expression_p (type))
10309 error ("a cast to a type other than an integral or "
10310 "enumeration type cannot appear in a constant-expression");
10311 return error_mark_node;
10314 op = RECUR (TREE_OPERAND (t, 0));
10316 switch (TREE_CODE (t))
10319 return build_functional_cast (type, op);
10320 case REINTERPRET_CAST_EXPR:
10321 return build_reinterpret_cast (type, op);
10322 case CONST_CAST_EXPR:
10323 return build_const_cast (type, op);
10324 case DYNAMIC_CAST_EXPR:
10325 return build_dynamic_cast (type, op);
10326 case STATIC_CAST_EXPR:
10327 return build_static_cast (type, op);
10329 gcc_unreachable ();
10333 case POSTDECREMENT_EXPR:
10334 case POSTINCREMENT_EXPR:
10335 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10336 args, complain, in_decl);
10337 return build_x_unary_op (TREE_CODE (t), op1);
10339 case PREDECREMENT_EXPR:
10340 case PREINCREMENT_EXPR:
10344 case TRUTH_NOT_EXPR:
10345 case UNARY_PLUS_EXPR: /* Unary + */
10346 case REALPART_EXPR:
10347 case IMAGPART_EXPR:
10348 return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
10351 op1 = TREE_OPERAND (t, 0);
10352 if (TREE_CODE (op1) == SCOPE_REF)
10353 op1 = tsubst_qualified_id (op1, args, complain, in_decl,
10354 /*done=*/true, /*address_p=*/true);
10356 op1 = tsubst_non_call_postfix_expression (op1, args, complain,
10358 if (TREE_CODE (op1) == LABEL_DECL)
10359 return finish_label_address_expr (DECL_NAME (op1));
10360 return build_x_unary_op (ADDR_EXPR, op1);
10365 case TRUNC_DIV_EXPR:
10366 case CEIL_DIV_EXPR:
10367 case FLOOR_DIV_EXPR:
10368 case ROUND_DIV_EXPR:
10369 case EXACT_DIV_EXPR:
10373 case TRUNC_MOD_EXPR:
10374 case FLOOR_MOD_EXPR:
10375 case TRUTH_ANDIF_EXPR:
10376 case TRUTH_ORIF_EXPR:
10377 case TRUTH_AND_EXPR:
10378 case TRUTH_OR_EXPR:
10393 return build_x_binary_op
10395 RECUR (TREE_OPERAND (t, 0)),
10396 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
10398 : TREE_CODE (TREE_OPERAND (t, 0))),
10399 RECUR (TREE_OPERAND (t, 1)),
10400 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
10402 : TREE_CODE (TREE_OPERAND (t, 1))),
10403 /*overloaded_p=*/NULL);
10406 return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
10407 /*address_p=*/false);
10409 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10410 args, complain, in_decl);
10411 return build_x_binary_op (ARRAY_REF, op1,
10412 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
10414 : TREE_CODE (TREE_OPERAND (t, 0))),
10415 RECUR (TREE_OPERAND (t, 1)),
10416 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
10418 : TREE_CODE (TREE_OPERAND (t, 1))),
10419 /*overloaded_p=*/NULL);
10422 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
10424 /* We only want to compute the number of arguments. */
10425 tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
10426 complain, in_decl);
10427 return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
10432 op1 = TREE_OPERAND (t, 0);
10435 /* When there are no ARGS, we are trying to evaluate a
10436 non-dependent expression from the parser. Trying to do
10437 the substitutions may not work. */
10439 op1 = TREE_TYPE (op1);
10444 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
10445 /*function_p=*/false,
10446 /*integral_constant_expression_p=*/false);
10450 return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), true);
10452 return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t));
10456 tree r = build_x_modify_expr
10457 (RECUR (TREE_OPERAND (t, 0)),
10458 TREE_CODE (TREE_OPERAND (t, 1)),
10459 RECUR (TREE_OPERAND (t, 2)));
10460 /* TREE_NO_WARNING must be set if either the expression was
10461 parenthesized or it uses an operator such as >>= rather
10462 than plain assignment. In the former case, it was already
10463 set and must be copied. In the latter case,
10464 build_x_modify_expr sets it and it must not be reset
10466 if (TREE_NO_WARNING (t))
10467 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
10472 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10473 args, complain, in_decl);
10474 /* Remember that there was a reference to this entity. */
10477 return build_x_arrow (op1);
10481 (RECUR (TREE_OPERAND (t, 0)),
10482 RECUR (TREE_OPERAND (t, 1)),
10483 RECUR (TREE_OPERAND (t, 2)),
10484 RECUR (TREE_OPERAND (t, 3)),
10485 NEW_EXPR_USE_GLOBAL (t));
10488 return delete_sanity
10489 (RECUR (TREE_OPERAND (t, 0)),
10490 RECUR (TREE_OPERAND (t, 1)),
10491 DELETE_EXPR_USE_VEC (t),
10492 DELETE_EXPR_USE_GLOBAL (t));
10494 case COMPOUND_EXPR:
10495 return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
10496 RECUR (TREE_OPERAND (t, 1)));
10505 function = CALL_EXPR_FN (t);
10506 /* When we parsed the expression, we determined whether or
10507 not Koenig lookup should be performed. */
10508 koenig_p = KOENIG_LOOKUP_P (t);
10509 if (TREE_CODE (function) == SCOPE_REF)
10511 qualified_p = true;
10512 function = tsubst_qualified_id (function, args, complain, in_decl,
10514 /*address_p=*/false);
10518 if (TREE_CODE (function) == COMPONENT_REF)
10520 tree op = TREE_OPERAND (function, 1);
10522 qualified_p = (TREE_CODE (op) == SCOPE_REF
10523 || (BASELINK_P (op)
10524 && BASELINK_QUALIFIED_P (op)));
10527 qualified_p = false;
10529 function = tsubst_copy_and_build (function, args, complain,
10532 integral_constant_expression_p);
10534 if (BASELINK_P (function))
10535 qualified_p = true;
10538 /* FIXME: Rewrite this so as not to construct an arglist. */
10539 call_args = RECUR (CALL_EXPR_ARGS (t));
10541 /* We do not perform argument-dependent lookup if normal
10542 lookup finds a non-function, in accordance with the
10543 expected resolution of DR 218. */
10545 && ((is_overloaded_fn (function)
10546 /* If lookup found a member function, the Koenig lookup is
10547 not appropriate, even if an unqualified-name was used
10548 to denote the function. */
10549 && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
10550 || TREE_CODE (function) == IDENTIFIER_NODE))
10551 function = perform_koenig_lookup (function, call_args);
10553 if (TREE_CODE (function) == IDENTIFIER_NODE)
10555 unqualified_name_lookup_error (function);
10556 return error_mark_node;
10559 /* Remember that there was a reference to this entity. */
10560 if (DECL_P (function))
10561 mark_used (function);
10563 if (TREE_CODE (function) == OFFSET_REF)
10564 return build_offset_ref_call_from_tree (function, call_args);
10565 if (TREE_CODE (function) == COMPONENT_REF)
10567 if (!BASELINK_P (TREE_OPERAND (function, 1)))
10568 return finish_call_expr (function, call_args,
10569 /*disallow_virtual=*/false,
10570 /*koenig_p=*/false);
10572 return (build_new_method_call
10573 (TREE_OPERAND (function, 0),
10574 TREE_OPERAND (function, 1),
10575 call_args, NULL_TREE,
10576 qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
10579 return finish_call_expr (function, call_args,
10580 /*disallow_virtual=*/qualified_p,
10585 return build_x_conditional_expr
10586 (RECUR (TREE_OPERAND (t, 0)),
10587 RECUR (TREE_OPERAND (t, 1)),
10588 RECUR (TREE_OPERAND (t, 2)));
10590 case PSEUDO_DTOR_EXPR:
10591 return finish_pseudo_destructor_expr
10592 (RECUR (TREE_OPERAND (t, 0)),
10593 RECUR (TREE_OPERAND (t, 1)),
10594 RECUR (TREE_OPERAND (t, 2)));
10598 tree purpose, value, chain;
10600 if (t == void_list_node)
10603 if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
10604 || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
10606 /* We have pack expansions, so expand those and
10607 create a new list out of it. */
10608 tree purposevec = NULL_TREE;
10609 tree valuevec = NULL_TREE;
10613 /* Expand the argument expressions. */
10614 if (TREE_PURPOSE (t))
10615 purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
10616 complain, in_decl);
10617 if (TREE_VALUE (t))
10618 valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
10619 complain, in_decl);
10621 /* Build the rest of the list. */
10622 chain = TREE_CHAIN (t);
10623 if (chain && chain != void_type_node)
10624 chain = RECUR (chain);
10626 /* Determine the number of arguments. */
10627 if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
10629 len = TREE_VEC_LENGTH (purposevec);
10630 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
10632 else if (TREE_CODE (valuevec) == TREE_VEC)
10633 len = TREE_VEC_LENGTH (valuevec);
10636 /* Since we only performed a partial substitution into
10637 the argument pack, we only return a single list
10639 if (purposevec == TREE_PURPOSE (t)
10640 && valuevec == TREE_VALUE (t)
10641 && chain == TREE_CHAIN (t))
10644 return tree_cons (purposevec, valuevec, chain);
10647 /* Convert the argument vectors into a TREE_LIST */
10651 /* Grab the Ith values. */
10653 purpose = purposevec ? TREE_VEC_ELT (purposevec, i)
10656 = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i))
10659 /* Build the list (backwards). */
10660 chain = tree_cons (purpose, value, chain);
10666 purpose = TREE_PURPOSE (t);
10668 purpose = RECUR (purpose);
10669 value = TREE_VALUE (t);
10671 value = RECUR (value);
10672 chain = TREE_CHAIN (t);
10673 if (chain && chain != void_type_node)
10674 chain = RECUR (chain);
10675 if (purpose == TREE_PURPOSE (t)
10676 && value == TREE_VALUE (t)
10677 && chain == TREE_CHAIN (t))
10679 return tree_cons (purpose, value, chain);
10682 case COMPONENT_REF:
10688 object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10689 args, complain, in_decl);
10690 /* Remember that there was a reference to this entity. */
10691 if (DECL_P (object))
10692 mark_used (object);
10693 object_type = TREE_TYPE (object);
10695 member = TREE_OPERAND (t, 1);
10696 if (BASELINK_P (member))
10697 member = tsubst_baselink (member,
10698 non_reference (TREE_TYPE (object)),
10699 args, complain, in_decl);
10701 member = tsubst_copy (member, args, complain, in_decl);
10702 if (member == error_mark_node)
10703 return error_mark_node;
10705 if (object_type && !CLASS_TYPE_P (object_type))
10707 if (TREE_CODE (member) == BIT_NOT_EXPR)
10708 return finish_pseudo_destructor_expr (object,
10711 else if (TREE_CODE (member) == SCOPE_REF
10712 && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
10713 return finish_pseudo_destructor_expr (object,
10717 else if (TREE_CODE (member) == SCOPE_REF
10718 && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
10723 /* Lookup the template functions now that we know what the
10725 tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
10726 args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
10727 member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
10728 /*is_type_p=*/false,
10729 /*complain=*/false);
10730 if (BASELINK_P (member))
10732 BASELINK_FUNCTIONS (member)
10733 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
10735 member = (adjust_result_of_qualified_name_lookup
10736 (member, BINFO_TYPE (BASELINK_BINFO (member)),
10741 qualified_name_lookup_error (object_type, tmpl, member);
10742 return error_mark_node;
10745 else if (TREE_CODE (member) == SCOPE_REF
10746 && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
10747 && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
10749 if (complain & tf_error)
10751 if (TYPE_P (TREE_OPERAND (member, 0)))
10752 error ("%qT is not a class or namespace",
10753 TREE_OPERAND (member, 0));
10755 error ("%qD is not a class or namespace",
10756 TREE_OPERAND (member, 0));
10758 return error_mark_node;
10760 else if (TREE_CODE (member) == FIELD_DECL)
10761 return finish_non_static_data_member (member, object, NULL_TREE);
10763 return finish_class_member_access_expr (object, member,
10764 /*template_p=*/false);
10769 (RECUR (TREE_OPERAND (t, 0)));
10773 VEC(constructor_elt,gc) *n;
10774 constructor_elt *ce;
10775 unsigned HOST_WIDE_INT idx;
10776 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10777 bool process_index_p;
10779 bool need_copy_p = false;
10781 if (type == error_mark_node)
10782 return error_mark_node;
10784 /* digest_init will do the wrong thing if we let it. */
10785 if (type && TYPE_PTRMEMFUNC_P (type))
10788 /* We do not want to process the index of aggregate
10789 initializers as they are identifier nodes which will be
10790 looked up by digest_init. */
10791 process_index_p = !(type && IS_AGGR_TYPE (type));
10793 n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
10794 newlen = VEC_length (constructor_elt, n);
10795 for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
10797 if (ce->index && process_index_p)
10798 ce->index = RECUR (ce->index);
10800 if (PACK_EXPANSION_P (ce->value))
10802 /* Substitute into the pack expansion. */
10803 ce->value = tsubst_pack_expansion (ce->value, args, complain,
10806 if (TREE_VEC_LENGTH (ce->value) == 1)
10807 /* Just move the argument into place. */
10808 ce->value = TREE_VEC_ELT (ce->value, 0);
10811 /* Update the length of the final CONSTRUCTOR
10812 arguments vector, and note that we will need to
10814 newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
10815 need_copy_p = true;
10819 ce->value = RECUR (ce->value);
10824 VEC(constructor_elt,gc) *old_n = n;
10826 n = VEC_alloc (constructor_elt, gc, newlen);
10827 for (idx = 0; VEC_iterate (constructor_elt, old_n, idx, ce);
10830 if (TREE_CODE (ce->value) == TREE_VEC)
10832 int i, len = TREE_VEC_LENGTH (ce->value);
10833 for (i = 0; i < len; ++i)
10834 CONSTRUCTOR_APPEND_ELT (n, 0,
10835 TREE_VEC_ELT (ce->value, i));
10838 CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
10842 if (TREE_HAS_CONSTRUCTOR (t))
10843 return finish_compound_literal (type, n);
10845 return build_constructor (NULL_TREE, n);
10850 tree operand_0 = RECUR (TREE_OPERAND (t, 0));
10851 if (TYPE_P (operand_0))
10852 return get_typeid (operand_0);
10853 return build_typeid (operand_0);
10863 tree r = tsubst_copy (t, args, complain, in_decl);
10865 if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
10866 /* If the original type was a reference, we'll be wrapped in
10867 the appropriate INDIRECT_REF. */
10868 r = convert_from_reference (r);
10873 return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
10874 tsubst_copy (TREE_TYPE (t), args, complain,
10877 case OFFSETOF_EXPR:
10878 return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
10882 tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
10883 complain, in_decl);
10885 tree type2 = TRAIT_EXPR_TYPE2 (t);
10887 type2 = tsubst_copy (type2, args, complain, in_decl);
10889 return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
10894 tree old_stmt_expr = cur_stmt_expr;
10895 tree stmt_expr = begin_stmt_expr ();
10897 cur_stmt_expr = stmt_expr;
10898 tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
10899 integral_constant_expression_p);
10900 stmt_expr = finish_stmt_expr (stmt_expr, false);
10901 cur_stmt_expr = old_stmt_expr;
10907 t = tsubst_copy (t, args, complain, in_decl);
10908 /* As in finish_id_expression, we resolve enumeration constants
10909 to their underlying values. */
10910 if (TREE_CODE (t) == CONST_DECL)
10912 used_types_insert (TREE_TYPE (t));
10913 return DECL_INITIAL (t);
10918 /* Handle Objective-C++ constructs, if appropriate. */
10921 = objcp_tsubst_copy_and_build (t, args, complain,
10922 in_decl, /*function_p=*/false);
10926 return tsubst_copy (t, args, complain, in_decl);
10932 /* Verify that the instantiated ARGS are valid. For type arguments,
10933 make sure that the type's linkage is ok. For non-type arguments,
10934 make sure they are constants if they are integral or enumerations.
10935 Emit an error under control of COMPLAIN, and return TRUE on error. */
10938 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
10940 int ix, len = DECL_NTPARMS (tmpl);
10941 bool result = false;
10943 for (ix = 0; ix != len; ix++)
10945 tree t = TREE_VEC_ELT (args, ix);
10949 /* [basic.link]: A name with no linkage (notably, the name
10950 of a class or enumeration declared in a local scope)
10951 shall not be used to declare an entity with linkage.
10952 This implies that names with no linkage cannot be used as
10953 template arguments. */
10954 tree nt = no_linkage_check (t, /*relaxed_p=*/false);
10958 /* DR 488 makes use of a type with no linkage cause
10959 type deduction to fail. */
10960 if (complain & tf_error)
10962 if (TYPE_ANONYMOUS_P (nt))
10963 error ("%qT is/uses anonymous type", t);
10965 error ("template argument for %qD uses local type %qT",
10970 /* In order to avoid all sorts of complications, we do not
10971 allow variably-modified types as template arguments. */
10972 else if (variably_modified_type_p (t, NULL_TREE))
10974 if (complain & tf_error)
10975 error ("%qT is a variably modified type", t);
10979 /* A non-type argument of integral or enumerated type must be a
10981 else if (TREE_TYPE (t)
10982 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
10983 && !TREE_CONSTANT (t))
10985 if (complain & tf_error)
10986 error ("integral expression %qE is not constant", t);
10990 if (result && (complain & tf_error))
10991 error (" trying to instantiate %qD", tmpl);
10995 /* Instantiate the indicated variable or function template TMPL with
10996 the template arguments in TARG_PTR. */
10999 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
11004 HOST_WIDE_INT saved_processing_template_decl;
11006 if (tmpl == error_mark_node)
11007 return error_mark_node;
11009 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
11011 /* If this function is a clone, handle it specially. */
11012 if (DECL_CLONED_FUNCTION_P (tmpl))
11017 spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
11019 if (spec == error_mark_node)
11020 return error_mark_node;
11022 /* Look for the clone. */
11023 FOR_EACH_CLONE (clone, spec)
11024 if (DECL_NAME (clone) == DECL_NAME (tmpl))
11026 /* We should always have found the clone by now. */
11027 gcc_unreachable ();
11031 /* Check to see if we already have this specialization. */
11032 spec = retrieve_specialization (tmpl, targ_ptr,
11033 /*class_specializations_p=*/false);
11034 if (spec != NULL_TREE)
11037 gen_tmpl = most_general_template (tmpl);
11038 if (tmpl != gen_tmpl)
11040 /* The TMPL is a partial instantiation. To get a full set of
11041 arguments we must add the arguments used to perform the
11042 partial instantiation. */
11043 targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
11046 /* Check to see if we already have this specialization. */
11047 spec = retrieve_specialization (gen_tmpl, targ_ptr,
11048 /*class_specializations_p=*/false);
11049 if (spec != NULL_TREE)
11053 if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
11055 return error_mark_node;
11057 /* We are building a FUNCTION_DECL, during which the access of its
11058 parameters and return types have to be checked. However this
11059 FUNCTION_DECL which is the desired context for access checking
11060 is not built yet. We solve this chicken-and-egg problem by
11061 deferring all checks until we have the FUNCTION_DECL. */
11062 push_deferring_access_checks (dk_deferred);
11064 /* Although PROCESSING_TEMPLATE_DECL may be true at this point
11065 (because, for example, we have encountered a non-dependent
11066 function call in the body of a template function and must now
11067 determine which of several overloaded functions will be called),
11068 within the instantiation itself we are not processing a
11070 saved_processing_template_decl = processing_template_decl;
11071 processing_template_decl = 0;
11072 /* Substitute template parameters to obtain the specialization. */
11073 fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
11074 targ_ptr, complain, gen_tmpl);
11075 processing_template_decl = saved_processing_template_decl;
11076 if (fndecl == error_mark_node)
11077 return error_mark_node;
11079 /* Now we know the specialization, compute access previously
11081 push_access_scope (fndecl);
11082 perform_deferred_access_checks ();
11083 pop_access_scope (fndecl);
11084 pop_deferring_access_checks ();
11086 /* The DECL_TI_TEMPLATE should always be the immediate parent
11087 template, not the most general template. */
11088 DECL_TI_TEMPLATE (fndecl) = tmpl;
11090 /* If we've just instantiated the main entry point for a function,
11091 instantiate all the alternate entry points as well. We do this
11092 by cloning the instantiation of the main entry point, not by
11093 instantiating the template clones. */
11094 if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
11095 clone_function_decl (fndecl, /*update_method_vec_p=*/0);
11100 /* The FN is a TEMPLATE_DECL for a function. The ARGS are the
11101 arguments that are being used when calling it. TARGS is a vector
11102 into which the deduced template arguments are placed.
11104 Return zero for success, 2 for an incomplete match that doesn't resolve
11105 all the types, and 1 for complete failure. An error message will be
11106 printed only for an incomplete match.
11108 If FN is a conversion operator, or we are trying to produce a specific
11109 specialization, RETURN_TYPE is the return type desired.
11111 The EXPLICIT_TARGS are explicit template arguments provided via a
11114 The parameter STRICT is one of:
11117 We are deducing arguments for a function call, as in
11118 [temp.deduct.call].
11121 We are deducing arguments for a conversion function, as in
11122 [temp.deduct.conv].
11125 We are deducing arguments when doing an explicit instantiation
11126 as in [temp.explicit], when determining an explicit specialization
11127 as in [temp.expl.spec], or when taking the address of a function
11128 template, as in [temp.deduct.funcaddr]. */
11131 fn_type_unification (tree fn,
11132 tree explicit_targs,
11136 unification_kind_t strict,
11142 bool incomplete_argument_packs_p = false;
11144 gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
11146 fntype = TREE_TYPE (fn);
11147 if (explicit_targs)
11151 The specified template arguments must match the template
11152 parameters in kind (i.e., type, nontype, template), and there
11153 must not be more arguments than there are parameters;
11154 otherwise type deduction fails.
11156 Nontype arguments must match the types of the corresponding
11157 nontype template parameters, or must be convertible to the
11158 types of the corresponding nontype parameters as specified in
11159 _temp.arg.nontype_, otherwise type deduction fails.
11161 All references in the function type of the function template
11162 to the corresponding template parameters are replaced by the
11163 specified template argument values. If a substitution in a
11164 template parameter or in the function type of the function
11165 template results in an invalid type, type deduction fails. */
11166 tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
11167 int i, len = TREE_VEC_LENGTH (tparms);
11168 tree converted_args;
11169 bool incomplete = false;
11171 if (explicit_targs == error_mark_node)
11175 = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
11176 /*require_all_args=*/false,
11177 /*use_default_args=*/false));
11178 if (converted_args == error_mark_node)
11181 /* Substitute the explicit args into the function type. This is
11182 necessary so that, for instance, explicitly declared function
11183 arguments can match null pointed constants. If we were given
11184 an incomplete set of explicit args, we must not do semantic
11185 processing during substitution as we could create partial
11187 for (i = 0; i < len; i++)
11189 tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11190 bool parameter_pack = false;
11192 /* Dig out the actual parm. */
11193 if (TREE_CODE (parm) == TYPE_DECL
11194 || TREE_CODE (parm) == TEMPLATE_DECL)
11196 parm = TREE_TYPE (parm);
11197 parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
11199 else if (TREE_CODE (parm) == PARM_DECL)
11201 parm = DECL_INITIAL (parm);
11202 parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
11205 if (parameter_pack)
11209 template_parm_level_and_index (parm, &level, &idx);
11211 /* Mark the argument pack as "incomplete". We could
11212 still deduce more arguments during unification. */
11213 targ = TMPL_ARG (converted_args, level, idx);
11216 ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
11217 ARGUMENT_PACK_EXPLICIT_ARGS (targ)
11218 = ARGUMENT_PACK_ARGS (targ);
11221 /* We have some incomplete argument packs. */
11222 incomplete_argument_packs_p = true;
11226 if (incomplete_argument_packs_p)
11227 /* Any substitution is guaranteed to be incomplete if there
11228 are incomplete argument packs, because we can still deduce
11232 incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
11234 processing_template_decl += incomplete;
11235 fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
11236 processing_template_decl -= incomplete;
11238 if (fntype == error_mark_node)
11241 /* Place the explicitly specified arguments in TARGS. */
11242 for (i = NUM_TMPL_ARGS (converted_args); i--;)
11243 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
11246 /* Never do unification on the 'this' parameter. */
11247 parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
11251 parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
11252 args = tree_cons (NULL_TREE, return_type, args);
11255 /* We allow incomplete unification without an error message here
11256 because the standard doesn't seem to explicitly prohibit it. Our
11257 callers must be ready to deal with unification failures in any
11259 result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
11260 targs, parms, args, /*subr=*/0,
11263 if (result == 0 && incomplete_argument_packs_p)
11265 int i, len = NUM_TMPL_ARGS (targs);
11267 /* Clear the "incomplete" flags on all argument packs. */
11268 for (i = 0; i < len; i++)
11270 tree arg = TREE_VEC_ELT (targs, i);
11271 if (ARGUMENT_PACK_P (arg))
11273 ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
11274 ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
11280 /* All is well so far. Now, check:
11284 When all template arguments have been deduced, all uses of
11285 template parameters in nondeduced contexts are replaced with
11286 the corresponding deduced argument values. If the
11287 substitution results in an invalid type, as described above,
11288 type deduction fails. */
11289 if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
11290 == error_mark_node)
11296 /* Adjust types before performing type deduction, as described in
11297 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
11298 sections are symmetric. PARM is the type of a function parameter
11299 or the return type of the conversion function. ARG is the type of
11300 the argument passed to the call, or the type of the value
11301 initialized with the result of the conversion function.
11302 ARG_EXPR is the original argument expression, which may be null. */
11305 maybe_adjust_types_for_deduction (unification_kind_t strict,
11319 /* Swap PARM and ARG throughout the remainder of this
11320 function; the handling is precisely symmetric since PARM
11321 will initialize ARG rather than vice versa. */
11329 /* There is nothing to do in this case. */
11333 gcc_unreachable ();
11336 if (TREE_CODE (*parm) != REFERENCE_TYPE)
11338 /* [temp.deduct.call]
11340 If P is not a reference type:
11342 --If A is an array type, the pointer type produced by the
11343 array-to-pointer standard conversion (_conv.array_) is
11344 used in place of A for type deduction; otherwise,
11346 --If A is a function type, the pointer type produced by
11347 the function-to-pointer standard conversion
11348 (_conv.func_) is used in place of A for type deduction;
11351 --If A is a cv-qualified type, the top level
11352 cv-qualifiers of A's type are ignored for type
11354 if (TREE_CODE (*arg) == ARRAY_TYPE)
11355 *arg = build_pointer_type (TREE_TYPE (*arg));
11356 else if (TREE_CODE (*arg) == FUNCTION_TYPE)
11357 *arg = build_pointer_type (*arg);
11359 *arg = TYPE_MAIN_VARIANT (*arg);
11362 /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
11363 of the form T&&, where T is a template parameter, and the argument
11364 is an lvalue, T is deduced as A& */
11365 if (TREE_CODE (*parm) == REFERENCE_TYPE
11366 && TYPE_REF_IS_RVALUE (*parm)
11367 && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
11368 && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
11369 && arg_expr && real_lvalue_p (arg_expr))
11370 *arg = build_reference_type (*arg);
11372 /* [temp.deduct.call]
11374 If P is a cv-qualified type, the top level cv-qualifiers
11375 of P's type are ignored for type deduction. If P is a
11376 reference type, the type referred to by P is used for
11378 *parm = TYPE_MAIN_VARIANT (*parm);
11379 if (TREE_CODE (*parm) == REFERENCE_TYPE)
11381 *parm = TREE_TYPE (*parm);
11382 result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
11385 /* DR 322. For conversion deduction, remove a reference type on parm
11386 too (which has been swapped into ARG). */
11387 if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
11388 *arg = TREE_TYPE (*arg);
11393 /* Most parms like fn_type_unification.
11395 If SUBR is 1, we're being called recursively (to unify the
11396 arguments of a function or method parameter of a function
11400 type_unification_real (tree tparms,
11405 unification_kind_t strict,
11408 tree parm, arg, arg_expr;
11410 int ntparms = TREE_VEC_LENGTH (tparms);
11412 int saw_undeduced = 0;
11415 gcc_assert (TREE_CODE (tparms) == TREE_VEC);
11416 gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
11417 gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
11418 gcc_assert (ntparms > 0);
11423 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
11424 | UNIFY_ALLOW_DERIVED);
11428 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
11432 sub_strict = UNIFY_ALLOW_NONE;
11436 gcc_unreachable ();
11443 while (parms && parms != void_list_node
11444 && args && args != void_list_node)
11446 if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
11449 parm = TREE_VALUE (parms);
11450 parms = TREE_CHAIN (parms);
11451 arg = TREE_VALUE (args);
11452 args = TREE_CHAIN (args);
11455 if (arg == error_mark_node)
11457 if (arg == unknown_type_node)
11458 /* We can't deduce anything from this, but we might get all the
11459 template args from other function args. */
11462 /* Conversions will be performed on a function argument that
11463 corresponds with a function parameter that contains only
11464 non-deducible template parameters and explicitly specified
11465 template parameters. */
11466 if (!uses_template_parms (parm))
11471 type = TREE_TYPE (arg);
11475 if (same_type_p (parm, type))
11477 if (strict != DEDUCE_EXACT
11478 && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
11487 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
11488 if (type_unknown_p (arg))
11490 /* [temp.deduct.type]
11492 A template-argument can be deduced from a pointer to
11493 function or pointer to member function argument if
11494 the set of overloaded functions does not contain
11495 function templates and at most one of a set of
11496 overloaded functions provides a unique match. */
11497 if (resolve_overloaded_unification
11498 (tparms, targs, parm, arg, strict, sub_strict))
11504 arg = unlowered_expr_type (arg);
11505 if (arg == error_mark_node)
11510 int arg_strict = sub_strict;
11513 arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
11516 if (unify (tparms, targs, parm, arg, arg_strict))
11523 && parms != void_list_node
11524 && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
11526 /* Unify the remaining arguments with the pack expansion type. */
11528 tree parmvec = make_tree_vec (1);
11532 /* Count the number of arguments that remain. */
11533 for (t = args; t && t != void_list_node; t = TREE_CHAIN (t))
11536 /* Allocate a TREE_VEC and copy in all of the arguments */
11537 argvec = make_tree_vec (len);
11538 for (i = 0; args && args != void_list_node; args = TREE_CHAIN (args))
11540 TREE_VEC_ELT (argvec, i) = TREE_VALUE (args);
11544 /* Copy the parameter into parmvec. */
11545 TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
11546 if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
11547 /*call_args_p=*/true, /*subr=*/subr))
11550 /* Advance to the end of the list of parameters. */
11551 parms = TREE_CHAIN (parms);
11554 /* Fail if we've reached the end of the parm list, and more args
11555 are present, and the parm list isn't variadic. */
11556 if (args && args != void_list_node && parms == void_list_node)
11558 /* Fail if parms are left and they don't have default values. */
11559 if (parms && parms != void_list_node
11560 && TREE_PURPOSE (parms) == NULL_TREE)
11564 for (i = 0; i < ntparms; i++)
11565 if (!TREE_VEC_ELT (targs, i))
11569 if (TREE_VEC_ELT (tparms, i) == error_mark_node)
11572 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11574 /* If this is an undeduced nontype parameter that depends on
11575 a type parameter, try another pass; its type may have been
11576 deduced from a later argument than the one from which
11577 this parameter can be deduced. */
11578 if (TREE_CODE (tparm) == PARM_DECL
11579 && uses_template_parms (TREE_TYPE (tparm))
11580 && !saw_undeduced++)
11583 /* Core issue #226 (C++0x) [temp.deduct]:
11585 If a template argument has not been deduced, its
11586 default template argument, if any, is used.
11588 When we are in C++98 mode, TREE_PURPOSE will either
11589 be NULL_TREE or ERROR_MARK_NODE, so we do not need
11590 to explicitly check cxx_dialect here. */
11591 if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
11593 tree arg = tsubst (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)),
11594 targs, tf_none, NULL_TREE);
11595 if (arg == error_mark_node)
11599 TREE_VEC_ELT (targs, i) = arg;
11604 /* If the type parameter is a parameter pack, then it will
11605 be deduced to an empty parameter pack. */
11606 if (template_parameter_pack_p (tparm))
11610 if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
11612 arg = make_node (NONTYPE_ARGUMENT_PACK);
11613 TREE_TYPE (arg) = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
11614 TREE_CONSTANT (arg) = 1;
11617 arg = make_node (TYPE_ARGUMENT_PACK);
11619 SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
11621 TREE_VEC_ELT (targs, i) = arg;
11631 /* Subroutine of type_unification_real. Args are like the variables
11632 at the call site. ARG is an overloaded function (or template-id);
11633 we try deducing template args from each of the overloads, and if
11634 only one succeeds, we go with that. Modifies TARGS and returns
11635 true on success. */
11638 resolve_overloaded_unification (tree tparms,
11642 unification_kind_t strict,
11645 tree tempargs = copy_node (targs);
11649 if (TREE_CODE (arg) == ADDR_EXPR)
11651 arg = TREE_OPERAND (arg, 0);
11657 if (TREE_CODE (arg) == COMPONENT_REF)
11658 /* Handle `&x' where `x' is some static or non-static member
11660 arg = TREE_OPERAND (arg, 1);
11662 if (TREE_CODE (arg) == OFFSET_REF)
11663 arg = TREE_OPERAND (arg, 1);
11665 /* Strip baselink information. */
11666 if (BASELINK_P (arg))
11667 arg = BASELINK_FUNCTIONS (arg);
11669 if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
11671 /* If we got some explicit template args, we need to plug them into
11672 the affected templates before we try to unify, in case the
11673 explicit args will completely resolve the templates in question. */
11675 tree expl_subargs = TREE_OPERAND (arg, 1);
11676 arg = TREE_OPERAND (arg, 0);
11678 for (; arg; arg = OVL_NEXT (arg))
11680 tree fn = OVL_CURRENT (arg);
11681 tree subargs, elem;
11683 if (TREE_CODE (fn) != TEMPLATE_DECL)
11686 subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
11687 expl_subargs, /*check_ret=*/false);
11690 elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
11691 good += try_one_overload (tparms, targs, tempargs, parm,
11692 elem, strict, sub_strict, addr_p);
11696 else if (TREE_CODE (arg) != OVERLOAD
11697 && TREE_CODE (arg) != FUNCTION_DECL)
11698 /* If ARG is, for example, "(0, &f)" then its type will be unknown
11699 -- but the deduction does not succeed because the expression is
11700 not just the function on its own. */
11703 for (; arg; arg = OVL_NEXT (arg))
11704 good += try_one_overload (tparms, targs, tempargs, parm,
11705 TREE_TYPE (OVL_CURRENT (arg)),
11706 strict, sub_strict, addr_p);
11708 /* [temp.deduct.type] A template-argument can be deduced from a pointer
11709 to function or pointer to member function argument if the set of
11710 overloaded functions does not contain function templates and at most
11711 one of a set of overloaded functions provides a unique match.
11713 So if we found multiple possibilities, we return success but don't
11714 deduce anything. */
11718 int i = TREE_VEC_LENGTH (targs);
11720 if (TREE_VEC_ELT (tempargs, i))
11721 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
11729 /* Subroutine of resolve_overloaded_unification; does deduction for a single
11730 overload. Fills TARGS with any deduced arguments, or error_mark_node if
11731 different overloads deduce different arguments for a given parm.
11732 ADDR_P is true if the expression for which deduction is being
11733 performed was of the form "& fn" rather than simply "fn".
11735 Returns 1 on success. */
11738 try_one_overload (tree tparms,
11743 unification_kind_t strict,
11751 /* [temp.deduct.type] A template-argument can be deduced from a pointer
11752 to function or pointer to member function argument if the set of
11753 overloaded functions does not contain function templates and at most
11754 one of a set of overloaded functions provides a unique match.
11756 So if this is a template, just return success. */
11758 if (uses_template_parms (arg))
11761 if (TREE_CODE (arg) == METHOD_TYPE)
11762 arg = build_ptrmemfunc_type (build_pointer_type (arg));
11764 arg = build_pointer_type (arg);
11766 sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
11768 /* We don't copy orig_targs for this because if we have already deduced
11769 some template args from previous args, unify would complain when we
11770 try to deduce a template parameter for the same argument, even though
11771 there isn't really a conflict. */
11772 nargs = TREE_VEC_LENGTH (targs);
11773 tempargs = make_tree_vec (nargs);
11775 if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
11778 /* First make sure we didn't deduce anything that conflicts with
11779 explicitly specified args. */
11780 for (i = nargs; i--; )
11782 tree elt = TREE_VEC_ELT (tempargs, i);
11783 tree oldelt = TREE_VEC_ELT (orig_targs, i);
11787 else if (uses_template_parms (elt))
11788 /* Since we're unifying against ourselves, we will fill in
11789 template args used in the function parm list with our own
11790 template parms. Discard them. */
11791 TREE_VEC_ELT (tempargs, i) = NULL_TREE;
11792 else if (oldelt && !template_args_equal (oldelt, elt))
11796 for (i = nargs; i--; )
11798 tree elt = TREE_VEC_ELT (tempargs, i);
11801 TREE_VEC_ELT (targs, i) = elt;
11807 /* PARM is a template class (perhaps with unbound template
11808 parameters). ARG is a fully instantiated type. If ARG can be
11809 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
11810 TARGS are as for unify. */
11813 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
11815 tree copy_of_targs;
11817 if (!CLASSTYPE_TEMPLATE_INFO (arg)
11818 || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
11819 != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
11822 /* We need to make a new template argument vector for the call to
11823 unify. If we used TARGS, we'd clutter it up with the result of
11824 the attempted unification, even if this class didn't work out.
11825 We also don't want to commit ourselves to all the unifications
11826 we've already done, since unification is supposed to be done on
11827 an argument-by-argument basis. In other words, consider the
11828 following pathological case:
11830 template <int I, int J, int K>
11833 template <int I, int J>
11834 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
11836 template <int I, int J, int K>
11837 void f(S<I, J, K>, S<I, I, I>);
11846 Now, by the time we consider the unification involving `s2', we
11847 already know that we must have `f<0, 0, 0>'. But, even though
11848 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
11849 because there are two ways to unify base classes of S<0, 1, 2>
11850 with S<I, I, I>. If we kept the already deduced knowledge, we
11851 would reject the possibility I=1. */
11852 copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
11854 /* If unification failed, we're done. */
11855 if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
11856 CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
11862 /* Given a template type PARM and a class type ARG, find the unique
11863 base type in ARG that is an instance of PARM. We do not examine
11864 ARG itself; only its base-classes. If there is not exactly one
11865 appropriate base class, return NULL_TREE. PARM may be the type of
11866 a partial specialization, as well as a plain template type. Used
11870 get_template_base (tree tparms, tree targs, tree parm, tree arg)
11872 tree rval = NULL_TREE;
11875 gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)));
11877 binfo = TYPE_BINFO (complete_type (arg));
11879 /* The type could not be completed. */
11882 /* Walk in inheritance graph order. The search order is not
11883 important, and this avoids multiple walks of virtual bases. */
11884 for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
11886 tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
11890 /* If there is more than one satisfactory baseclass, then:
11894 If they yield more than one possible deduced A, the type
11898 if (rval && !same_type_p (r, rval))
11908 /* Returns the level of DECL, which declares a template parameter. */
11911 template_decl_level (tree decl)
11913 switch (TREE_CODE (decl))
11916 case TEMPLATE_DECL:
11917 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
11920 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
11923 gcc_unreachable ();
11928 /* Decide whether ARG can be unified with PARM, considering only the
11929 cv-qualifiers of each type, given STRICT as documented for unify.
11930 Returns nonzero iff the unification is OK on that basis. */
11933 check_cv_quals_for_unify (int strict, tree arg, tree parm)
11935 int arg_quals = cp_type_quals (arg);
11936 int parm_quals = cp_type_quals (parm);
11938 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
11939 && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
11941 /* Although a CVR qualifier is ignored when being applied to a
11942 substituted template parameter ([8.3.2]/1 for example), that
11943 does not apply during deduction [14.8.2.4]/1, (even though
11944 that is not explicitly mentioned, [14.8.2.4]/9 indicates
11945 this). Except when we're allowing additional CV qualifiers
11946 at the outer level [14.8.2.1]/3,1st bullet. */
11947 if ((TREE_CODE (arg) == REFERENCE_TYPE
11948 || TREE_CODE (arg) == FUNCTION_TYPE
11949 || TREE_CODE (arg) == METHOD_TYPE)
11950 && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
11953 if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
11954 && (parm_quals & TYPE_QUAL_RESTRICT))
11958 if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
11959 && (arg_quals & parm_quals) != parm_quals)
11962 if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
11963 && (parm_quals & arg_quals) != arg_quals)
11969 /* Determines the LEVEL and INDEX for the template parameter PARM. */
11971 template_parm_level_and_index (tree parm, int* level, int* index)
11973 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
11974 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
11975 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
11977 *index = TEMPLATE_TYPE_IDX (parm);
11978 *level = TEMPLATE_TYPE_LEVEL (parm);
11982 *index = TEMPLATE_PARM_IDX (parm);
11983 *level = TEMPLATE_PARM_LEVEL (parm);
11987 /* Unifies the remaining arguments in PACKED_ARGS with the pack
11988 expansion at the end of PACKED_PARMS. Returns 0 if the type
11989 deduction succeeds, 1 otherwise. STRICT is the same as in
11990 unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
11991 call argument list. We'll need to adjust the arguments to make them
11992 types. SUBR tells us if this is from a recursive call to
11993 type_unification_real. */
11995 unify_pack_expansion (tree tparms, tree targs, tree packed_parms,
11996 tree packed_args, int strict, bool call_args_p,
12000 = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
12001 tree pattern = PACK_EXPANSION_PATTERN (parm);
12002 tree pack, packs = NULL_TREE;
12003 int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
12004 int len = TREE_VEC_LENGTH (packed_args);
12006 /* Determine the parameter packs we will be deducing from the
12007 pattern, and record their current deductions. */
12008 for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm);
12009 pack; pack = TREE_CHAIN (pack))
12011 tree parm_pack = TREE_VALUE (pack);
12014 /* Determine the index and level of this parameter pack. */
12015 template_parm_level_and_index (parm_pack, &level, &idx);
12017 /* Keep track of the parameter packs and their corresponding
12019 packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
12020 TREE_TYPE (packs) = make_tree_vec (len - start);
12023 /* Loop through all of the arguments that have not yet been
12024 unified and unify each with the pattern. */
12025 for (i = start; i < len; i++)
12027 tree parm = pattern;
12029 /* For each parameter pack, clear out the deduced value so that
12030 we can deduce it again. */
12031 for (pack = packs; pack; pack = TREE_CHAIN (pack))
12034 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12036 TMPL_ARG (targs, level, idx) = NULL_TREE;
12039 /* Unify the pattern with the current argument. */
12041 tree arg = TREE_VEC_ELT (packed_args, i);
12042 int arg_strict = strict;
12043 bool skip_arg_p = false;
12049 /* This mirrors what we do in type_unification_real. */
12053 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL
12054 | UNIFY_ALLOW_MORE_CV_QUAL
12055 | UNIFY_ALLOW_DERIVED);
12059 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12063 sub_strict = UNIFY_ALLOW_NONE;
12067 gcc_unreachable ();
12072 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12073 if (type_unknown_p (arg))
12075 /* [temp.deduct.type] A template-argument can be
12076 deduced from a pointer to function or pointer
12077 to member function argument if the set of
12078 overloaded functions does not contain function
12079 templates and at most one of a set of
12080 overloaded functions provides a unique
12083 if (resolve_overloaded_unification
12084 (tparms, targs, parm, arg, strict, sub_strict)
12092 arg = TREE_TYPE (arg);
12093 if (arg == error_mark_node)
12098 arg_strict = sub_strict;
12102 maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
12107 if (unify (tparms, targs, parm, arg, arg_strict))
12112 /* For each parameter pack, collect the deduced value. */
12113 for (pack = packs; pack; pack = TREE_CHAIN (pack))
12116 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12118 TREE_VEC_ELT (TREE_TYPE (pack), i - start) =
12119 TMPL_ARG (targs, level, idx);
12123 /* Verify that the results of unification with the parameter packs
12124 produce results consistent with what we've seen before, and make
12125 the deduced argument packs available. */
12126 for (pack = packs; pack; pack = TREE_CHAIN (pack))
12128 tree old_pack = TREE_VALUE (pack);
12129 tree new_args = TREE_TYPE (pack);
12131 if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
12133 /* Prepend the explicit arguments onto NEW_ARGS. */
12134 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12135 tree old_args = new_args;
12136 int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
12137 int len = explicit_len + TREE_VEC_LENGTH (old_args);
12139 /* Copy the explicit arguments. */
12140 new_args = make_tree_vec (len);
12141 for (i = 0; i < explicit_len; i++)
12142 TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
12144 /* Copy the deduced arguments. */
12145 for (; i < len; i++)
12146 TREE_VEC_ELT (new_args, i) =
12147 TREE_VEC_ELT (old_args, i - explicit_len);
12155 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12157 /* Build the deduced *_ARGUMENT_PACK. */
12158 if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
12160 result = make_node (NONTYPE_ARGUMENT_PACK);
12161 TREE_TYPE (result) =
12162 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
12163 TREE_CONSTANT (result) = 1;
12166 result = make_node (TYPE_ARGUMENT_PACK);
12168 SET_ARGUMENT_PACK_ARGS (result, new_args);
12170 /* Note the deduced argument packs for this parameter
12172 TMPL_ARG (targs, level, idx) = result;
12174 else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
12175 && (ARGUMENT_PACK_ARGS (old_pack)
12176 == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
12178 /* We only had the explicitly-provided arguments before, but
12179 now we have a complete set of arguments. */
12181 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12182 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12184 /* Keep the original deduced argument pack. */
12185 TMPL_ARG (targs, level, idx) = old_pack;
12187 SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
12188 ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
12189 ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
12191 else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
12193 /* Inconsistent unification of this parameter pack. */
12199 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12201 /* Keep the original deduced argument pack. */
12202 TMPL_ARG (targs, level, idx) = old_pack;
12209 /* Deduce the value of template parameters. TPARMS is the (innermost)
12210 set of template parameters to a template. TARGS is the bindings
12211 for those template parameters, as determined thus far; TARGS may
12212 include template arguments for outer levels of template parameters
12213 as well. PARM is a parameter to a template function, or a
12214 subcomponent of that parameter; ARG is the corresponding argument.
12215 This function attempts to match PARM with ARG in a manner
12216 consistent with the existing assignments in TARGS. If more values
12217 are deduced, then TARGS is updated.
12219 Returns 0 if the type deduction succeeds, 1 otherwise. The
12220 parameter STRICT is a bitwise or of the following flags:
12223 Require an exact match between PARM and ARG.
12224 UNIFY_ALLOW_MORE_CV_QUAL:
12225 Allow the deduced ARG to be more cv-qualified (by qualification
12226 conversion) than ARG.
12227 UNIFY_ALLOW_LESS_CV_QUAL:
12228 Allow the deduced ARG to be less cv-qualified than ARG.
12229 UNIFY_ALLOW_DERIVED:
12230 Allow the deduced ARG to be a template base class of ARG,
12231 or a pointer to a template base class of the type pointed to by
12233 UNIFY_ALLOW_INTEGER:
12234 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
12235 case for more information.
12236 UNIFY_ALLOW_OUTER_LEVEL:
12237 This is the outermost level of a deduction. Used to determine validity
12238 of qualification conversions. A valid qualification conversion must
12239 have const qualified pointers leading up to the inner type which
12240 requires additional CV quals, except at the outer level, where const
12241 is not required [conv.qual]. It would be normal to set this flag in
12242 addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
12243 UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
12244 This is the outermost level of a deduction, and PARM can be more CV
12245 qualified at this point.
12246 UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
12247 This is the outermost level of a deduction, and PARM can be less CV
12248 qualified at this point. */
12251 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
12256 int strict_in = strict;
12258 /* I don't think this will do the right thing with respect to types.
12259 But the only case I've seen it in so far has been array bounds, where
12260 signedness is the only information lost, and I think that will be
12262 while (TREE_CODE (parm) == NOP_EXPR)
12263 parm = TREE_OPERAND (parm, 0);
12265 if (arg == error_mark_node)
12267 if (arg == unknown_type_node)
12268 /* We can't deduce anything from this, but we might get all the
12269 template args from other function args. */
12272 /* If PARM uses template parameters, then we can't bail out here,
12273 even if ARG == PARM, since we won't record unifications for the
12274 template parameters. We might need them if we're trying to
12275 figure out which of two things is more specialized. */
12276 if (arg == parm && !uses_template_parms (parm))
12279 /* Immediately reject some pairs that won't unify because of
12280 cv-qualification mismatches. */
12281 if (TREE_CODE (arg) == TREE_CODE (parm)
12283 /* It is the elements of the array which hold the cv quals of an array
12284 type, and the elements might be template type parms. We'll check
12285 when we recurse. */
12286 && TREE_CODE (arg) != ARRAY_TYPE
12287 /* We check the cv-qualifiers when unifying with template type
12288 parameters below. We want to allow ARG `const T' to unify with
12289 PARM `T' for example, when computing which of two templates
12290 is more specialized, for example. */
12291 && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
12292 && !check_cv_quals_for_unify (strict_in, arg, parm))
12295 if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
12296 && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
12297 strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
12298 strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
12299 strict &= ~UNIFY_ALLOW_DERIVED;
12300 strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
12301 strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
12303 switch (TREE_CODE (parm))
12305 case TYPENAME_TYPE:
12307 case UNBOUND_CLASS_TEMPLATE:
12308 /* In a type which contains a nested-name-specifier, template
12309 argument values cannot be deduced for template parameters used
12310 within the nested-name-specifier. */
12313 case TEMPLATE_TYPE_PARM:
12314 case TEMPLATE_TEMPLATE_PARM:
12315 case BOUND_TEMPLATE_TEMPLATE_PARM:
12316 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
12317 if (tparm == error_mark_node)
12320 if (TEMPLATE_TYPE_LEVEL (parm)
12321 != template_decl_level (tparm))
12322 /* The PARM is not one we're trying to unify. Just check
12323 to see if it matches ARG. */
12324 return (TREE_CODE (arg) == TREE_CODE (parm)
12325 && same_type_p (parm, arg)) ? 0 : 1;
12326 idx = TEMPLATE_TYPE_IDX (parm);
12327 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
12328 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
12330 /* Check for mixed types and values. */
12331 if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12332 && TREE_CODE (tparm) != TYPE_DECL)
12333 || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12334 && TREE_CODE (tparm) != TEMPLATE_DECL))
12337 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12339 /* ARG must be constructed from a template class or a template
12340 template parameter. */
12341 if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
12342 && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
12346 tree parmvec = TYPE_TI_ARGS (parm);
12347 tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
12349 = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
12352 /* The resolution to DR150 makes clear that default
12353 arguments for an N-argument may not be used to bind T
12354 to a template template parameter with fewer than N
12355 parameters. It is not safe to permit the binding of
12356 default arguments as an extension, as that may change
12357 the meaning of a conforming program. Consider:
12359 struct Dense { static const unsigned int dim = 1; };
12361 template <template <typename> class View,
12363 void operator+(float, View<Block> const&);
12365 template <typename Block,
12366 unsigned int Dim = Block::dim>
12367 struct Lvalue_proxy { operator float() const; };
12371 Lvalue_proxy<Dense> p;
12376 Here, if Lvalue_proxy is permitted to bind to View, then
12377 the global operator+ will be used; if they are not, the
12378 Lvalue_proxy will be converted to float. */
12379 if (coerce_template_parms (argtmplvec, parmvec,
12380 TYPE_TI_TEMPLATE (parm),
12382 /*require_all_args=*/true,
12383 /*use_default_args=*/false)
12384 == error_mark_node)
12387 /* Deduce arguments T, i from TT<T> or TT<i>.
12388 We check each element of PARMVEC and ARGVEC individually
12389 rather than the whole TREE_VEC since they can have
12390 different number of elements. */
12392 for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
12394 if (unify (tparms, targs,
12395 TREE_VEC_ELT (parmvec, i),
12396 TREE_VEC_ELT (argvec, i),
12401 arg = TYPE_TI_TEMPLATE (arg);
12403 /* Fall through to deduce template name. */
12406 if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12407 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12409 /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>. */
12411 /* Simple cases: Value already set, does match or doesn't. */
12412 if (targ != NULL_TREE && template_args_equal (targ, arg))
12419 /* If PARM is `const T' and ARG is only `int', we don't have
12420 a match unless we are allowing additional qualification.
12421 If ARG is `const int' and PARM is just `T' that's OK;
12422 that binds `const int' to `T'. */
12423 if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
12427 /* Consider the case where ARG is `const volatile int' and
12428 PARM is `const T'. Then, T should be `volatile int'. */
12429 arg = cp_build_qualified_type_real
12430 (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
12431 if (arg == error_mark_node)
12434 /* Simple cases: Value already set, does match or doesn't. */
12435 if (targ != NULL_TREE && same_type_p (targ, arg))
12440 /* Make sure that ARG is not a variable-sized array. (Note
12441 that were talking about variable-sized arrays (like
12442 `int[n]'), rather than arrays of unknown size (like
12443 `int[]').) We'll get very confused by such a type since
12444 the bound of the array will not be computable in an
12445 instantiation. Besides, such types are not allowed in
12446 ISO C++, so we can do as we please here. */
12447 if (variably_modified_type_p (arg, NULL_TREE))
12451 /* If ARG is a parameter pack or an expansion, we cannot unify
12452 against it unless PARM is also a parameter pack. */
12453 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
12454 && !template_parameter_pack_p (parm))
12457 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
12460 case TEMPLATE_PARM_INDEX:
12461 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
12462 if (tparm == error_mark_node)
12465 if (TEMPLATE_PARM_LEVEL (parm)
12466 != template_decl_level (tparm))
12467 /* The PARM is not one we're trying to unify. Just check
12468 to see if it matches ARG. */
12469 return !(TREE_CODE (arg) == TREE_CODE (parm)
12470 && cp_tree_equal (parm, arg));
12472 idx = TEMPLATE_PARM_IDX (parm);
12473 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
12476 return !cp_tree_equal (targ, arg);
12478 /* [temp.deduct.type] If, in the declaration of a function template
12479 with a non-type template-parameter, the non-type
12480 template-parameter is used in an expression in the function
12481 parameter-list and, if the corresponding template-argument is
12482 deduced, the template-argument type shall match the type of the
12483 template-parameter exactly, except that a template-argument
12484 deduced from an array bound may be of any integral type.
12485 The non-type parameter might use already deduced type parameters. */
12486 tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
12487 if (!TREE_TYPE (arg))
12488 /* Template-parameter dependent expression. Just accept it for now.
12489 It will later be processed in convert_template_argument. */
12491 else if (same_type_p (TREE_TYPE (arg), tparm))
12493 else if ((strict & UNIFY_ALLOW_INTEGER)
12494 && (TREE_CODE (tparm) == INTEGER_TYPE
12495 || TREE_CODE (tparm) == BOOLEAN_TYPE))
12496 /* Convert the ARG to the type of PARM; the deduced non-type
12497 template argument must exactly match the types of the
12498 corresponding parameter. */
12499 arg = fold (build_nop (TREE_TYPE (parm), arg));
12500 else if (uses_template_parms (tparm))
12501 /* We haven't deduced the type of this parameter yet. Try again
12507 /* If ARG is a parameter pack or an expansion, we cannot unify
12508 against it unless PARM is also a parameter pack. */
12509 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
12510 && !TEMPLATE_PARM_PARAMETER_PACK (parm))
12513 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
12518 /* A pointer-to-member constant can be unified only with
12519 another constant. */
12520 if (TREE_CODE (arg) != PTRMEM_CST)
12523 /* Just unify the class member. It would be useless (and possibly
12524 wrong, depending on the strict flags) to unify also
12525 PTRMEM_CST_CLASS, because we want to be sure that both parm and
12526 arg refer to the same variable, even if through different
12527 classes. For instance:
12529 struct A { int x; };
12532 Unification of &A::x and &B::x must succeed. */
12533 return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
12534 PTRMEM_CST_MEMBER (arg), strict);
12539 if (TREE_CODE (arg) != POINTER_TYPE)
12542 /* [temp.deduct.call]
12544 A can be another pointer or pointer to member type that can
12545 be converted to the deduced A via a qualification
12546 conversion (_conv.qual_).
12548 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
12549 This will allow for additional cv-qualification of the
12550 pointed-to types if appropriate. */
12552 if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
12553 /* The derived-to-base conversion only persists through one
12554 level of pointers. */
12555 strict |= (strict_in & UNIFY_ALLOW_DERIVED);
12557 return unify (tparms, targs, TREE_TYPE (parm),
12558 TREE_TYPE (arg), strict);
12561 case REFERENCE_TYPE:
12562 if (TREE_CODE (arg) != REFERENCE_TYPE)
12564 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
12565 strict & UNIFY_ALLOW_MORE_CV_QUAL);
12568 if (TREE_CODE (arg) != ARRAY_TYPE)
12570 if ((TYPE_DOMAIN (parm) == NULL_TREE)
12571 != (TYPE_DOMAIN (arg) == NULL_TREE))
12573 if (TYPE_DOMAIN (parm) != NULL_TREE)
12580 /* Our representation of array types uses "N - 1" as the
12581 TYPE_MAX_VALUE for an array with "N" elements, if "N" is
12582 not an integer constant. We cannot unify arbitrarily
12583 complex expressions, so we eliminate the MINUS_EXPRs
12585 parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
12586 parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
12589 gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
12590 parm_max = TREE_OPERAND (parm_max, 0);
12592 arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
12593 arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
12596 /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
12597 trying to unify the type of a variable with the type
12598 of a template parameter. For example:
12600 template <unsigned int N>
12601 void f (char (&) [N]);
12608 Here, the type of the ARG will be "int [g(i)]", and
12609 may be a SAVE_EXPR, etc. */
12610 if (TREE_CODE (arg_max) != MINUS_EXPR)
12612 arg_max = TREE_OPERAND (arg_max, 0);
12615 /* If only one of the bounds used a MINUS_EXPR, compensate
12616 by adding one to the other bound. */
12617 if (parm_cst && !arg_cst)
12618 parm_max = fold_build2 (PLUS_EXPR,
12622 else if (arg_cst && !parm_cst)
12623 arg_max = fold_build2 (PLUS_EXPR,
12628 if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
12631 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
12632 strict & UNIFY_ALLOW_MORE_CV_QUAL);
12639 case ENUMERAL_TYPE:
12641 if (TREE_CODE (arg) != TREE_CODE (parm))
12644 /* We have already checked cv-qualification at the top of the
12646 if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
12649 /* As far as unification is concerned, this wins. Later checks
12650 will invalidate it if necessary. */
12653 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
12654 /* Type INTEGER_CST can come from ordinary constant template args. */
12656 while (TREE_CODE (arg) == NOP_EXPR)
12657 arg = TREE_OPERAND (arg, 0);
12659 if (TREE_CODE (arg) != INTEGER_CST)
12661 return !tree_int_cst_equal (parm, arg);
12666 if (TREE_CODE (arg) != TREE_VEC)
12668 if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
12670 for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
12671 if (unify (tparms, targs,
12672 TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
12680 if (TREE_CODE (arg) != TREE_CODE (parm))
12683 if (TYPE_PTRMEMFUNC_P (parm))
12685 if (!TYPE_PTRMEMFUNC_P (arg))
12688 return unify (tparms, targs,
12689 TYPE_PTRMEMFUNC_FN_TYPE (parm),
12690 TYPE_PTRMEMFUNC_FN_TYPE (arg),
12694 if (CLASSTYPE_TEMPLATE_INFO (parm))
12696 tree t = NULL_TREE;
12698 if (strict_in & UNIFY_ALLOW_DERIVED)
12700 /* First, we try to unify the PARM and ARG directly. */
12701 t = try_class_unification (tparms, targs,
12706 /* Fallback to the special case allowed in
12707 [temp.deduct.call]:
12709 If P is a class, and P has the form
12710 template-id, then A can be a derived class of
12711 the deduced A. Likewise, if P is a pointer to
12712 a class of the form template-id, A can be a
12713 pointer to a derived class pointed to by the
12715 t = get_template_base (tparms, targs, parm, arg);
12721 else if (CLASSTYPE_TEMPLATE_INFO (arg)
12722 && (CLASSTYPE_TI_TEMPLATE (parm)
12723 == CLASSTYPE_TI_TEMPLATE (arg)))
12724 /* Perhaps PARM is something like S<U> and ARG is S<int>.
12725 Then, we should unify `int' and `U'. */
12728 /* There's no chance of unification succeeding. */
12731 return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
12732 CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
12734 else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
12739 case FUNCTION_TYPE:
12740 if (TREE_CODE (arg) != TREE_CODE (parm))
12743 /* CV qualifications for methods can never be deduced, they must
12744 match exactly. We need to check them explicitly here,
12745 because type_unification_real treats them as any other
12746 cvqualified parameter. */
12747 if (TREE_CODE (parm) == METHOD_TYPE
12748 && (!check_cv_quals_for_unify
12750 TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
12751 TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
12754 if (unify (tparms, targs, TREE_TYPE (parm),
12755 TREE_TYPE (arg), UNIFY_ALLOW_NONE))
12757 return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
12758 TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
12762 /* Unify a pointer to member with a pointer to member function, which
12763 deduces the type of the member as a function type. */
12764 if (TYPE_PTRMEMFUNC_P (arg))
12768 cp_cv_quals cv_quals;
12770 /* Check top-level cv qualifiers */
12771 if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
12774 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
12775 TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
12778 /* Determine the type of the function we are unifying against. */
12779 method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
12781 build_function_type (TREE_TYPE (method_type),
12782 TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
12784 /* Extract the cv-qualifiers of the member function from the
12785 implicit object parameter and place them on the function
12786 type to be restored later. */
12788 cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
12789 fntype = build_qualified_type (fntype, cv_quals);
12790 return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
12793 if (TREE_CODE (arg) != OFFSET_TYPE)
12795 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
12796 TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
12798 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
12802 if (DECL_TEMPLATE_PARM_P (parm))
12803 return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
12804 if (arg != integral_constant_value (parm))
12809 case TEMPLATE_DECL:
12810 /* Matched cases are handled by the ARG == PARM test above. */
12813 case TYPE_ARGUMENT_PACK:
12814 case NONTYPE_ARGUMENT_PACK:
12816 tree packed_parms = ARGUMENT_PACK_ARGS (parm);
12817 tree packed_args = ARGUMENT_PACK_ARGS (arg);
12818 int i, len = TREE_VEC_LENGTH (packed_parms);
12819 int argslen = TREE_VEC_LENGTH (packed_args);
12820 int parm_variadic_p = 0;
12822 /* Check if the parameters end in a pack, making them variadic. */
12824 && PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, len - 1)))
12825 parm_variadic_p = 1;
12827 /* If we don't have enough arguments to satisfy the parameters
12828 (not counting the pack expression at the end), or we have
12829 too many arguments for a parameter list that doesn't end in
12830 a pack expression, we can't unify. */
12831 if (argslen < (len - parm_variadic_p)
12832 || (argslen > len && !parm_variadic_p))
12835 /* Unify all of the parameters that precede the (optional)
12836 pack expression. */
12837 for (i = 0; i < len - parm_variadic_p; ++i)
12839 if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
12840 TREE_VEC_ELT (packed_args, i), strict))
12844 if (parm_variadic_p)
12845 return unify_pack_expansion (tparms, targs,
12846 packed_parms, packed_args,
12847 strict, /*call_args_p=*/false,
12855 case DECLTYPE_TYPE:
12856 /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
12861 gcc_assert (EXPR_P (parm));
12863 /* We must be looking at an expression. This can happen with
12867 void foo(S<I>, S<I + 2>);
12869 This is a "nondeduced context":
12873 The nondeduced contexts are:
12875 --A type that is a template-id in which one or more of
12876 the template-arguments is an expression that references
12877 a template-parameter.
12879 In these cases, we assume deduction succeeded, but don't
12880 actually infer any unifications. */
12882 if (!uses_template_parms (parm)
12883 && !template_args_equal (parm, arg))
12890 /* Note that DECL can be defined in this translation unit, if
12894 mark_definable (tree decl)
12897 DECL_NOT_REALLY_EXTERN (decl) = 1;
12898 FOR_EACH_CLONE (clone, decl)
12899 DECL_NOT_REALLY_EXTERN (clone) = 1;
12902 /* Called if RESULT is explicitly instantiated, or is a member of an
12903 explicitly instantiated class. */
12906 mark_decl_instantiated (tree result, int extern_p)
12908 SET_DECL_EXPLICIT_INSTANTIATION (result);
12910 /* If this entity has already been written out, it's too late to
12911 make any modifications. */
12912 if (TREE_ASM_WRITTEN (result))
12915 if (TREE_CODE (result) != FUNCTION_DECL)
12916 /* The TREE_PUBLIC flag for function declarations will have been
12917 set correctly by tsubst. */
12918 TREE_PUBLIC (result) = 1;
12920 /* This might have been set by an earlier implicit instantiation. */
12921 DECL_COMDAT (result) = 0;
12924 DECL_NOT_REALLY_EXTERN (result) = 0;
12927 mark_definable (result);
12928 /* Always make artificials weak. */
12929 if (DECL_ARTIFICIAL (result) && flag_weak)
12930 comdat_linkage (result);
12931 /* For WIN32 we also want to put explicit instantiations in
12932 linkonce sections. */
12933 else if (TREE_PUBLIC (result))
12934 maybe_make_one_only (result);
12937 /* If EXTERN_P, then this function will not be emitted -- unless
12938 followed by an explicit instantiation, at which point its linkage
12939 will be adjusted. If !EXTERN_P, then this function will be
12940 emitted here. In neither circumstance do we want
12941 import_export_decl to adjust the linkage. */
12942 DECL_INTERFACE_KNOWN (result) = 1;
12945 /* Given two function templates PAT1 and PAT2, return:
12947 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
12948 -1 if PAT2 is more specialized than PAT1.
12949 0 if neither is more specialized.
12951 LEN indicates the number of parameters we should consider
12952 (defaulted parameters should not be considered).
12954 The 1998 std underspecified function template partial ordering, and
12955 DR214 addresses the issue. We take pairs of arguments, one from
12956 each of the templates, and deduce them against each other. One of
12957 the templates will be more specialized if all the *other*
12958 template's arguments deduce against its arguments and at least one
12959 of its arguments *does* *not* deduce against the other template's
12960 corresponding argument. Deduction is done as for class templates.
12961 The arguments used in deduction have reference and top level cv
12962 qualifiers removed. Iff both arguments were originally reference
12963 types *and* deduction succeeds in both directions, the template
12964 with the more cv-qualified argument wins for that pairing (if
12965 neither is more cv-qualified, they both are equal). Unlike regular
12966 deduction, after all the arguments have been deduced in this way,
12967 we do *not* verify the deduced template argument values can be
12968 substituted into non-deduced contexts, nor do we have to verify
12969 that all template arguments have been deduced. */
12972 more_specialized_fn (tree pat1, tree pat2, int len)
12974 tree decl1 = DECL_TEMPLATE_RESULT (pat1);
12975 tree decl2 = DECL_TEMPLATE_RESULT (pat2);
12976 tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
12977 tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
12978 tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
12979 tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
12980 tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
12981 tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
12985 /* Remove the this parameter from non-static member functions. If
12986 one is a non-static member function and the other is not a static
12987 member function, remove the first parameter from that function
12988 also. This situation occurs for operator functions where we
12989 locate both a member function (with this pointer) and non-member
12990 operator (with explicit first operand). */
12991 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
12993 len--; /* LEN is the number of significant arguments for DECL1 */
12994 args1 = TREE_CHAIN (args1);
12995 if (!DECL_STATIC_FUNCTION_P (decl2))
12996 args2 = TREE_CHAIN (args2);
12998 else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
13000 args2 = TREE_CHAIN (args2);
13001 if (!DECL_STATIC_FUNCTION_P (decl1))
13004 args1 = TREE_CHAIN (args1);
13008 /* If only one is a conversion operator, they are unordered. */
13009 if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
13012 /* Consider the return type for a conversion function */
13013 if (DECL_CONV_FN_P (decl1))
13015 args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
13016 args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
13020 processing_template_decl++;
13024 tree arg1 = TREE_VALUE (args1);
13025 tree arg2 = TREE_VALUE (args2);
13026 int deduce1, deduce2;
13030 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13031 && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13033 /* When both arguments are pack expansions, we need only
13034 unify the patterns themselves. */
13035 arg1 = PACK_EXPANSION_PATTERN (arg1);
13036 arg2 = PACK_EXPANSION_PATTERN (arg2);
13038 /* This is the last comparison we need to do. */
13042 if (TREE_CODE (arg1) == REFERENCE_TYPE)
13044 arg1 = TREE_TYPE (arg1);
13045 quals1 = cp_type_quals (arg1);
13048 if (TREE_CODE (arg2) == REFERENCE_TYPE)
13050 arg2 = TREE_TYPE (arg2);
13051 quals2 = cp_type_quals (arg2);
13054 if ((quals1 < 0) != (quals2 < 0))
13056 /* Only of the args is a reference, see if we should apply
13057 array/function pointer decay to it. This is not part of
13058 DR214, but is, IMHO, consistent with the deduction rules
13059 for the function call itself, and with our earlier
13060 implementation of the underspecified partial ordering
13061 rules. (nathan). */
13064 switch (TREE_CODE (arg1))
13067 arg1 = TREE_TYPE (arg1);
13069 case FUNCTION_TYPE:
13070 arg1 = build_pointer_type (arg1);
13079 switch (TREE_CODE (arg2))
13082 arg2 = TREE_TYPE (arg2);
13084 case FUNCTION_TYPE:
13085 arg2 = build_pointer_type (arg2);
13094 arg1 = TYPE_MAIN_VARIANT (arg1);
13095 arg2 = TYPE_MAIN_VARIANT (arg2);
13097 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
13099 int i, len2 = list_length (args2);
13100 tree parmvec = make_tree_vec (1);
13101 tree argvec = make_tree_vec (len2);
13104 /* Setup the parameter vector, which contains only ARG1. */
13105 TREE_VEC_ELT (parmvec, 0) = arg1;
13107 /* Setup the argument vector, which contains the remaining
13109 for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
13110 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13112 deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec,
13113 argvec, UNIFY_ALLOW_NONE,
13114 /*call_args_p=*/false,
13117 /* We cannot deduce in the other direction, because ARG1 is
13118 a pack expansion but ARG2 is not. */
13121 else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13123 int i, len1 = list_length (args1);
13124 tree parmvec = make_tree_vec (1);
13125 tree argvec = make_tree_vec (len1);
13128 /* Setup the parameter vector, which contains only ARG1. */
13129 TREE_VEC_ELT (parmvec, 0) = arg2;
13131 /* Setup the argument vector, which contains the remaining
13133 for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
13134 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13136 deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec,
13137 argvec, UNIFY_ALLOW_NONE,
13138 /*call_args_p=*/false,
13141 /* We cannot deduce in the other direction, because ARG2 is
13142 a pack expansion but ARG1 is not.*/
13148 /* The normal case, where neither argument is a pack
13150 deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
13151 deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
13158 if (better1 < 0 && better2 < 0)
13159 /* We've failed to deduce something in either direction.
13160 These must be unordered. */
13163 if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
13165 /* Deduces in both directions, see if quals can
13166 disambiguate. Pretend the worse one failed to deduce. */
13167 if ((quals1 & quals2) == quals2)
13169 if ((quals1 & quals2) == quals1)
13172 if (deduce1 && !deduce2 && !better2)
13174 if (deduce2 && !deduce1 && !better1)
13177 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13178 || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13179 /* We have already processed all of the arguments in our
13180 handing of the pack expansion type. */
13183 args1 = TREE_CHAIN (args1);
13184 args2 = TREE_CHAIN (args2);
13187 processing_template_decl--;
13189 /* All things being equal, if the next argument is a pack expansion
13190 for one function but not for the other, prefer the
13191 non-variadic function. */
13192 if ((better1 > 0) - (better2 > 0) == 0
13193 && args1 && TREE_VALUE (args1)
13194 && args2 && TREE_VALUE (args2))
13196 if (TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION)
13197 return TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION ? 0 : -1;
13198 else if (TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION)
13202 return (better1 > 0) - (better2 > 0);
13205 /* Determine which of two partial specializations is more specialized.
13207 PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
13208 to the first partial specialization. The TREE_VALUE is the
13209 innermost set of template parameters for the partial
13210 specialization. PAT2 is similar, but for the second template.
13212 Return 1 if the first partial specialization is more specialized;
13213 -1 if the second is more specialized; 0 if neither is more
13216 See [temp.class.order] for information about determining which of
13217 two templates is more specialized. */
13220 more_specialized_class (tree pat1, tree pat2)
13225 bool any_deductions = false;
13227 tmpl1 = TREE_TYPE (pat1);
13228 tmpl2 = TREE_TYPE (pat2);
13230 /* Just like what happens for functions, if we are ordering between
13231 different class template specializations, we may encounter dependent
13232 types in the arguments, and we need our dependency check functions
13233 to behave correctly. */
13234 ++processing_template_decl;
13235 targs = get_class_bindings (TREE_VALUE (pat1),
13236 CLASSTYPE_TI_ARGS (tmpl1),
13237 CLASSTYPE_TI_ARGS (tmpl2));
13241 any_deductions = true;
13244 targs = get_class_bindings (TREE_VALUE (pat2),
13245 CLASSTYPE_TI_ARGS (tmpl2),
13246 CLASSTYPE_TI_ARGS (tmpl1));
13250 any_deductions = true;
13252 --processing_template_decl;
13254 /* In the case of a tie where at least one of the class templates
13255 has a parameter pack at the end, the template with the most
13256 non-packed parameters wins. */
13259 && (template_args_variadic_p (TREE_PURPOSE (pat1))
13260 || template_args_variadic_p (TREE_PURPOSE (pat2))))
13262 tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
13263 tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
13264 int len1 = TREE_VEC_LENGTH (args1);
13265 int len2 = TREE_VEC_LENGTH (args2);
13267 /* We don't count the pack expansion at the end. */
13268 if (template_args_variadic_p (TREE_PURPOSE (pat1)))
13270 if (template_args_variadic_p (TREE_PURPOSE (pat2)))
13275 else if (len1 < len2)
13282 /* Return the template arguments that will produce the function signature
13283 DECL from the function template FN, with the explicit template
13284 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is true, the return type must
13285 also match. Return NULL_TREE if no satisfactory arguments could be
13289 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
13291 int ntparms = DECL_NTPARMS (fn);
13292 tree targs = make_tree_vec (ntparms);
13294 tree decl_arg_types;
13296 /* Substitute the explicit template arguments into the type of DECL.
13297 The call to fn_type_unification will handle substitution into the
13299 decl_type = TREE_TYPE (decl);
13300 if (explicit_args && uses_template_parms (decl_type))
13303 tree converted_args;
13305 if (DECL_TEMPLATE_INFO (decl))
13306 tmpl = DECL_TI_TEMPLATE (decl);
13308 /* We can get here for some invalid specializations. */
13312 = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
13313 explicit_args, NULL_TREE,
13315 /*require_all_args=*/false,
13316 /*use_default_args=*/false);
13317 if (converted_args == error_mark_node)
13320 decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
13321 if (decl_type == error_mark_node)
13325 /* Never do unification on the 'this' parameter. */
13326 decl_arg_types = skip_artificial_parms_for (decl,
13327 TYPE_ARG_TYPES (decl_type));
13329 if (fn_type_unification (fn, explicit_args, targs,
13331 (check_rettype || DECL_CONV_FN_P (fn)
13332 ? TREE_TYPE (decl_type) : NULL_TREE),
13333 DEDUCE_EXACT, LOOKUP_NORMAL))
13339 /* Return the innermost template arguments that, when applied to a
13340 template specialization whose innermost template parameters are
13341 TPARMS, and whose specialization arguments are PARMS, yield the
13344 For example, suppose we have:
13346 template <class T, class U> struct S {};
13347 template <class T> struct S<T*, int> {};
13349 Then, suppose we want to get `S<double*, int>'. The TPARMS will be
13350 {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
13351 int}. The resulting vector will be {double}, indicating that `T'
13352 is bound to `double'. */
13355 get_class_bindings (tree tparms, tree spec_args, tree args)
13357 int i, ntparms = TREE_VEC_LENGTH (tparms);
13359 tree innermost_deduced_args;
13361 innermost_deduced_args = make_tree_vec (ntparms);
13362 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
13364 deduced_args = copy_node (args);
13365 SET_TMPL_ARGS_LEVEL (deduced_args,
13366 TMPL_ARGS_DEPTH (deduced_args),
13367 innermost_deduced_args);
13370 deduced_args = innermost_deduced_args;
13372 if (unify (tparms, deduced_args,
13373 INNERMOST_TEMPLATE_ARGS (spec_args),
13374 INNERMOST_TEMPLATE_ARGS (args),
13378 for (i = 0; i < ntparms; ++i)
13379 if (! TREE_VEC_ELT (innermost_deduced_args, i))
13382 /* Verify that nondeduced template arguments agree with the type
13383 obtained from argument deduction.
13387 struct A { typedef int X; };
13388 template <class T, class U> struct C {};
13389 template <class T> struct C<T, typename T::X> {};
13391 Then with the instantiation `C<A, int>', we can deduce that
13392 `T' is `A' but unify () does not check whether `typename T::X'
13394 spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
13395 if (spec_args == error_mark_node
13396 /* We only need to check the innermost arguments; the other
13397 arguments will always agree. */
13398 || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
13399 INNERMOST_TEMPLATE_ARGS (args)))
13402 return deduced_args;
13405 /* TEMPLATES is a TREE_LIST. Each TREE_VALUE is a TEMPLATE_DECL.
13406 Return the TREE_LIST node with the most specialized template, if
13407 any. If there is no most specialized template, the error_mark_node
13410 Note that this function does not look at, or modify, the
13411 TREE_PURPOSE or TREE_TYPE of any of the nodes. Since the node
13412 returned is one of the elements of INSTANTIATIONS, callers may
13413 store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
13414 and retrieve it from the value returned. */
13417 most_specialized_instantiation (tree templates)
13421 ++processing_template_decl;
13424 for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
13428 if (get_bindings (TREE_VALUE (champ),
13429 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
13430 NULL_TREE, /*check_ret=*/false))
13433 if (get_bindings (TREE_VALUE (fn),
13434 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
13435 NULL_TREE, /*check_ret=*/false))
13442 /* Equally specialized, move to next function. If there
13443 is no next function, nothing's most specialized. */
13444 fn = TREE_CHAIN (fn);
13452 /* Now verify that champ is better than everything earlier in the
13453 instantiation list. */
13454 for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
13455 if (get_bindings (TREE_VALUE (champ),
13456 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
13457 NULL_TREE, /*check_ret=*/false)
13458 || !get_bindings (TREE_VALUE (fn),
13459 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
13460 NULL_TREE, /*check_ret=*/false))
13466 processing_template_decl--;
13469 return error_mark_node;
13474 /* If DECL is a specialization of some template, return the most
13475 general such template. Otherwise, returns NULL_TREE.
13477 For example, given:
13479 template <class T> struct S { template <class U> void f(U); };
13481 if TMPL is `template <class U> void S<int>::f(U)' this will return
13482 the full template. This function will not trace past partial
13483 specializations, however. For example, given in addition:
13485 template <class T> struct S<T*> { template <class U> void f(U); };
13487 if TMPL is `template <class U> void S<int*>::f(U)' this will return
13488 `template <class T> template <class U> S<T*>::f(U)'. */
13491 most_general_template (tree decl)
13493 /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
13494 an immediate specialization. */
13495 if (TREE_CODE (decl) == FUNCTION_DECL)
13497 if (DECL_TEMPLATE_INFO (decl)) {
13498 decl = DECL_TI_TEMPLATE (decl);
13500 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
13501 template friend. */
13502 if (TREE_CODE (decl) != TEMPLATE_DECL)
13508 /* Look for more and more general templates. */
13509 while (DECL_TEMPLATE_INFO (decl))
13511 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
13512 (See cp-tree.h for details.) */
13513 if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
13516 if (CLASS_TYPE_P (TREE_TYPE (decl))
13517 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
13520 /* Stop if we run into an explicitly specialized class template. */
13521 if (!DECL_NAMESPACE_SCOPE_P (decl)
13522 && DECL_CONTEXT (decl)
13523 && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
13526 decl = DECL_TI_TEMPLATE (decl);
13532 /* Return the most specialized of the class template partial
13533 specializations of TMPL which can produce TYPE, a specialization of
13534 TMPL. The value returned is actually a TREE_LIST; the TREE_TYPE is
13535 a _TYPE node corresponding to the partial specialization, while the
13536 TREE_PURPOSE is the set of template arguments that must be
13537 substituted into the TREE_TYPE in order to generate TYPE.
13539 If the choice of partial specialization is ambiguous, a diagnostic
13540 is issued, and the error_mark_node is returned. If there are no
13541 partial specializations of TMPL matching TYPE, then NULL_TREE is
13545 most_specialized_class (tree type, tree tmpl)
13547 tree list = NULL_TREE;
13554 tmpl = most_general_template (tmpl);
13555 args = CLASSTYPE_TI_ARGS (type);
13556 for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
13558 tree partial_spec_args;
13561 partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
13562 spec_args = get_class_bindings (TREE_VALUE (t),
13567 list = tree_cons (spec_args, TREE_VALUE (t), list);
13568 TREE_TYPE (list) = TREE_TYPE (t);
13575 ambiguous_p = false;
13578 t = TREE_CHAIN (t);
13579 for (; t; t = TREE_CHAIN (t))
13581 fate = more_specialized_class (champ, t);
13588 t = TREE_CHAIN (t);
13591 ambiguous_p = true;
13600 for (t = list; t && t != champ; t = TREE_CHAIN (t))
13602 fate = more_specialized_class (champ, t);
13605 ambiguous_p = true;
13612 const char *str = "candidates are:";
13613 error ("ambiguous class template instantiation for %q#T", type);
13614 for (t = list; t; t = TREE_CHAIN (t))
13616 error ("%s %+#T", str, TREE_TYPE (t));
13619 return error_mark_node;
13625 /* Explicitly instantiate DECL. */
13628 do_decl_instantiation (tree decl, tree storage)
13630 tree result = NULL_TREE;
13633 if (!decl || decl == error_mark_node)
13634 /* An error occurred, for which grokdeclarator has already issued
13635 an appropriate message. */
13637 else if (! DECL_LANG_SPECIFIC (decl))
13639 error ("explicit instantiation of non-template %q#D", decl);
13642 else if (TREE_CODE (decl) == VAR_DECL)
13644 /* There is an asymmetry here in the way VAR_DECLs and
13645 FUNCTION_DECLs are handled by grokdeclarator. In the case of
13646 the latter, the DECL we get back will be marked as a
13647 template instantiation, and the appropriate
13648 DECL_TEMPLATE_INFO will be set up. This does not happen for
13649 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
13650 should handle VAR_DECLs as it currently handles
13652 result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
13653 if (!result || TREE_CODE (result) != VAR_DECL)
13655 error ("no matching template for %qD found", decl);
13658 if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
13660 error ("type %qT for explicit instantiation %qD does not match "
13661 "declared type %qT", TREE_TYPE (result), decl,
13666 else if (TREE_CODE (decl) != FUNCTION_DECL)
13668 error ("explicit instantiation of %q#D", decl);
13674 /* Check for various error cases. Note that if the explicit
13675 instantiation is valid the RESULT will currently be marked as an
13676 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
13677 until we get here. */
13679 if (DECL_TEMPLATE_SPECIALIZATION (result))
13681 /* DR 259 [temp.spec].
13683 Both an explicit instantiation and a declaration of an explicit
13684 specialization shall not appear in a program unless the explicit
13685 instantiation follows a declaration of the explicit specialization.
13687 For a given set of template parameters, if an explicit
13688 instantiation of a template appears after a declaration of an
13689 explicit specialization for that template, the explicit
13690 instantiation has no effect. */
13693 else if (DECL_EXPLICIT_INSTANTIATION (result))
13697 No program shall explicitly instantiate any template more
13700 We check DECL_NOT_REALLY_EXTERN so as not to complain when
13701 the first instantiation was `extern' and the second is not,
13702 and EXTERN_P for the opposite case. */
13703 if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
13704 pedwarn ("duplicate explicit instantiation of %q#D", result);
13705 /* If an "extern" explicit instantiation follows an ordinary
13706 explicit instantiation, the template is instantiated. */
13710 else if (!DECL_IMPLICIT_INSTANTIATION (result))
13712 error ("no matching template for %qD found", result);
13715 else if (!DECL_TEMPLATE_INFO (result))
13717 pedwarn ("explicit instantiation of non-template %q#D", result);
13721 if (storage == NULL_TREE)
13723 else if (storage == ridpointers[(int) RID_EXTERN])
13725 if (pedantic && !in_system_header)
13726 pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
13731 error ("storage class %qD applied to template instantiation", storage);
13733 check_explicit_instantiation_namespace (result);
13734 mark_decl_instantiated (result, extern_p);
13736 instantiate_decl (result, /*defer_ok=*/1,
13737 /*expl_inst_class_mem_p=*/false);
13741 mark_class_instantiated (tree t, int extern_p)
13743 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
13744 SET_CLASSTYPE_INTERFACE_KNOWN (t);
13745 CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
13746 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
13749 CLASSTYPE_DEBUG_REQUESTED (t) = 1;
13750 rest_of_type_compilation (t, 1);
13754 /* Called from do_type_instantiation through binding_table_foreach to
13755 do recursive instantiation for the type bound in ENTRY. */
13757 bt_instantiate_type_proc (binding_entry entry, void *data)
13759 tree storage = *(tree *) data;
13761 if (IS_AGGR_TYPE (entry->type)
13762 && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
13763 do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
13766 /* Called from do_type_instantiation to instantiate a member
13767 (a member function or a static member variable) of an
13768 explicitly instantiated class template. */
13770 instantiate_class_member (tree decl, int extern_p)
13772 mark_decl_instantiated (decl, extern_p);
13774 instantiate_decl (decl, /*defer_ok=*/1,
13775 /*expl_inst_class_mem_p=*/true);
13778 /* Perform an explicit instantiation of template class T. STORAGE, if
13779 non-null, is the RID for extern, inline or static. COMPLAIN is
13780 nonzero if this is called from the parser, zero if called recursively,
13781 since the standard is unclear (as detailed below). */
13784 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
13789 int previous_instantiation_extern_p = 0;
13791 if (TREE_CODE (t) == TYPE_DECL)
13794 if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
13796 error ("explicit instantiation of non-template type %qT", t);
13802 if (!COMPLETE_TYPE_P (t))
13804 if (complain & tf_error)
13805 error ("explicit instantiation of %q#T before definition of template",
13810 if (storage != NULL_TREE)
13812 if (pedantic && !in_system_header)
13813 pedwarn("ISO C++ forbids the use of %qE on explicit instantiations",
13816 if (storage == ridpointers[(int) RID_INLINE])
13818 else if (storage == ridpointers[(int) RID_EXTERN])
13820 else if (storage == ridpointers[(int) RID_STATIC])
13824 error ("storage class %qD applied to template instantiation",
13830 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
13832 /* DR 259 [temp.spec].
13834 Both an explicit instantiation and a declaration of an explicit
13835 specialization shall not appear in a program unless the explicit
13836 instantiation follows a declaration of the explicit specialization.
13838 For a given set of template parameters, if an explicit
13839 instantiation of a template appears after a declaration of an
13840 explicit specialization for that template, the explicit
13841 instantiation has no effect. */
13844 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
13848 No program shall explicitly instantiate any template more
13851 If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
13852 instantiation was `extern'. If EXTERN_P then the second is.
13853 These cases are OK. */
13854 previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
13856 if (!previous_instantiation_extern_p && !extern_p
13857 && (complain & tf_error))
13858 pedwarn ("duplicate explicit instantiation of %q#T", t);
13860 /* If we've already instantiated the template, just return now. */
13861 if (!CLASSTYPE_INTERFACE_ONLY (t))
13865 check_explicit_instantiation_namespace (TYPE_NAME (t));
13866 mark_class_instantiated (t, extern_p);
13874 /* In contrast to implicit instantiation, where only the
13875 declarations, and not the definitions, of members are
13876 instantiated, we have here:
13880 The explicit instantiation of a class template specialization
13881 implies the instantiation of all of its members not
13882 previously explicitly specialized in the translation unit
13883 containing the explicit instantiation.
13885 Of course, we can't instantiate member template classes, since
13886 we don't have any arguments for them. Note that the standard
13887 is unclear on whether the instantiation of the members are
13888 *explicit* instantiations or not. However, the most natural
13889 interpretation is that it should be an explicit instantiation. */
13892 for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
13893 if (TREE_CODE (tmp) == FUNCTION_DECL
13894 && DECL_TEMPLATE_INSTANTIATION (tmp))
13895 instantiate_class_member (tmp, extern_p);
13897 for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
13898 if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
13899 instantiate_class_member (tmp, extern_p);
13901 if (CLASSTYPE_NESTED_UTDS (t))
13902 binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
13903 bt_instantiate_type_proc, &storage);
13907 /* Given a function DECL, which is a specialization of TMPL, modify
13908 DECL to be a re-instantiation of TMPL with the same template
13909 arguments. TMPL should be the template into which tsubst'ing
13910 should occur for DECL, not the most general template.
13912 One reason for doing this is a scenario like this:
13915 void f(const T&, int i);
13917 void g() { f(3, 7); }
13920 void f(const T& t, const int i) { }
13922 Note that when the template is first instantiated, with
13923 instantiate_template, the resulting DECL will have no name for the
13924 first parameter, and the wrong type for the second. So, when we go
13925 to instantiate the DECL, we regenerate it. */
13928 regenerate_decl_from_template (tree decl, tree tmpl)
13930 /* The arguments used to instantiate DECL, from the most general
13935 args = DECL_TI_ARGS (decl);
13936 code_pattern = DECL_TEMPLATE_RESULT (tmpl);
13938 /* Make sure that we can see identifiers, and compute access
13940 push_access_scope (decl);
13942 if (TREE_CODE (decl) == FUNCTION_DECL)
13950 args_depth = TMPL_ARGS_DEPTH (args);
13951 parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
13952 if (args_depth > parms_depth)
13953 args = get_innermost_template_args (args, parms_depth);
13955 specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
13956 args, tf_error, NULL_TREE);
13958 TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
13961 /* Merge parameter declarations. */
13962 decl_parm = skip_artificial_parms_for (decl,
13963 DECL_ARGUMENTS (decl));
13965 = skip_artificial_parms_for (code_pattern,
13966 DECL_ARGUMENTS (code_pattern));
13967 while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
13972 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
13973 DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
13974 parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
13976 parm_type = type_decays_to (parm_type);
13977 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
13978 TREE_TYPE (decl_parm) = parm_type;
13979 attributes = DECL_ATTRIBUTES (pattern_parm);
13980 if (DECL_ATTRIBUTES (decl_parm) != attributes)
13982 DECL_ATTRIBUTES (decl_parm) = attributes;
13983 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
13985 decl_parm = TREE_CHAIN (decl_parm);
13986 pattern_parm = TREE_CHAIN (pattern_parm);
13988 /* Merge any parameters that match with the function parameter
13990 if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
13993 tree expanded_types;
13994 /* Expand the TYPE_PACK_EXPANSION that provides the types for
13995 the parameters in this function parameter pack. */
13996 expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm),
13997 args, tf_error, NULL_TREE);
13998 len = TREE_VEC_LENGTH (expanded_types);
13999 for (i = 0; i < len; i++)
14004 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14005 /* Rename the parameter to include the index. */
14006 DECL_NAME (decl_parm) =
14007 make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
14008 parm_type = TREE_VEC_ELT (expanded_types, i);
14009 parm_type = type_decays_to (parm_type);
14010 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14011 TREE_TYPE (decl_parm) = parm_type;
14012 attributes = DECL_ATTRIBUTES (pattern_parm);
14013 if (DECL_ATTRIBUTES (decl_parm) != attributes)
14015 DECL_ATTRIBUTES (decl_parm) = attributes;
14016 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14018 decl_parm = TREE_CHAIN (decl_parm);
14021 /* Merge additional specifiers from the CODE_PATTERN. */
14022 if (DECL_DECLARED_INLINE_P (code_pattern)
14023 && !DECL_DECLARED_INLINE_P (decl))
14024 DECL_DECLARED_INLINE_P (decl) = 1;
14025 if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
14026 DECL_INLINE (decl) = 1;
14028 else if (TREE_CODE (decl) == VAR_DECL)
14029 DECL_INITIAL (decl) =
14030 tsubst_expr (DECL_INITIAL (code_pattern), args,
14031 tf_error, DECL_TI_TEMPLATE (decl),
14032 /*integral_constant_expression_p=*/false);
14034 gcc_unreachable ();
14036 pop_access_scope (decl);
14039 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
14040 substituted to get DECL. */
14043 template_for_substitution (tree decl)
14045 tree tmpl = DECL_TI_TEMPLATE (decl);
14047 /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
14048 for the instantiation. This is not always the most general
14049 template. Consider, for example:
14052 struct S { template <class U> void f();
14053 template <> void f<int>(); };
14055 and an instantiation of S<double>::f<int>. We want TD to be the
14056 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
14057 while (/* An instantiation cannot have a definition, so we need a
14058 more general template. */
14059 DECL_TEMPLATE_INSTANTIATION (tmpl)
14060 /* We must also deal with friend templates. Given:
14062 template <class T> struct S {
14063 template <class U> friend void f() {};
14066 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
14067 so far as the language is concerned, but that's still
14068 where we get the pattern for the instantiation from. On
14069 other hand, if the definition comes outside the class, say:
14071 template <class T> struct S {
14072 template <class U> friend void f();
14074 template <class U> friend void f() {}
14076 we don't need to look any further. That's what the check for
14077 DECL_INITIAL is for. */
14078 || (TREE_CODE (decl) == FUNCTION_DECL
14079 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
14080 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
14082 /* The present template, TD, should not be a definition. If it
14083 were a definition, we should be using it! Note that we
14084 cannot restructure the loop to just keep going until we find
14085 a template with a definition, since that might go too far if
14086 a specialization was declared, but not defined. */
14087 gcc_assert (TREE_CODE (decl) != VAR_DECL
14088 || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
14090 /* Fetch the more general template. */
14091 tmpl = DECL_TI_TEMPLATE (tmpl);
14097 /* Produce the definition of D, a _DECL generated from a template. If
14098 DEFER_OK is nonzero, then we don't have to actually do the
14099 instantiation now; we just have to do it sometime. Normally it is
14100 an error if this is an explicit instantiation but D is undefined.
14101 EXPL_INST_CLASS_MEM_P is true iff D is a member of an
14102 explicitly instantiated class template. */
14105 instantiate_decl (tree d, int defer_ok,
14106 bool expl_inst_class_mem_p)
14108 tree tmpl = DECL_TI_TEMPLATE (d);
14115 bool pattern_defined;
14117 location_t saved_loc = input_location;
14118 int saved_in_system_header = in_system_header;
14121 /* This function should only be used to instantiate templates for
14122 functions and static member variables. */
14123 gcc_assert (TREE_CODE (d) == FUNCTION_DECL
14124 || TREE_CODE (d) == VAR_DECL);
14126 /* Variables are never deferred; if instantiation is required, they
14127 are instantiated right away. That allows for better code in the
14128 case that an expression refers to the value of the variable --
14129 if the variable has a constant value the referring expression can
14130 take advantage of that fact. */
14131 if (TREE_CODE (d) == VAR_DECL)
14134 /* Don't instantiate cloned functions. Instead, instantiate the
14135 functions they cloned. */
14136 if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
14137 d = DECL_CLONED_FUNCTION (d);
14139 if (DECL_TEMPLATE_INSTANTIATED (d))
14140 /* D has already been instantiated. It might seem reasonable to
14141 check whether or not D is an explicit instantiation, and, if so,
14142 stop here. But when an explicit instantiation is deferred
14143 until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
14144 is set, even though we still need to do the instantiation. */
14147 /* If we already have a specialization of this declaration, then
14148 there's no reason to instantiate it. Note that
14149 retrieve_specialization gives us both instantiations and
14150 specializations, so we must explicitly check
14151 DECL_TEMPLATE_SPECIALIZATION. */
14152 gen_tmpl = most_general_template (tmpl);
14153 gen_args = DECL_TI_ARGS (d);
14154 spec = retrieve_specialization (gen_tmpl, gen_args,
14155 /*class_specializations_p=*/false);
14156 if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
14159 /* This needs to happen before any tsubsting. */
14160 if (! push_tinst_level (d))
14163 timevar_push (TV_PARSE);
14165 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
14166 for the instantiation. */
14167 td = template_for_substitution (d);
14168 code_pattern = DECL_TEMPLATE_RESULT (td);
14170 /* We should never be trying to instantiate a member of a class
14171 template or partial specialization. */
14172 gcc_assert (d != code_pattern);
14174 if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
14175 || DECL_TEMPLATE_SPECIALIZATION (td))
14176 /* In the case of a friend template whose definition is provided
14177 outside the class, we may have too many arguments. Drop the
14178 ones we don't need. The same is true for specializations. */
14179 args = get_innermost_template_args
14180 (gen_args, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td)));
14184 if (TREE_CODE (d) == FUNCTION_DECL)
14185 pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
14187 pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
14189 /* We may be in the middle of deferred access check. Disable it now. */
14190 push_deferring_access_checks (dk_no_deferred);
14192 /* Unless an explicit instantiation directive has already determined
14193 the linkage of D, remember that a definition is available for
14195 if (pattern_defined
14196 && !DECL_INTERFACE_KNOWN (d)
14197 && !DECL_NOT_REALLY_EXTERN (d))
14198 mark_definable (d);
14200 input_location = DECL_SOURCE_LOCATION (d);
14201 in_system_header = DECL_IN_SYSTEM_HEADER (d);
14203 /* If D is a member of an explicitly instantiated class template,
14204 and no definition is available, treat it like an implicit
14206 if (!pattern_defined && expl_inst_class_mem_p
14207 && DECL_EXPLICIT_INSTANTIATION (d))
14209 DECL_NOT_REALLY_EXTERN (d) = 0;
14210 DECL_INTERFACE_KNOWN (d) = 0;
14211 SET_DECL_IMPLICIT_INSTANTIATION (d);
14216 /* Recheck the substitutions to obtain any warning messages
14217 about ignoring cv qualifiers. */
14218 tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
14219 tree type = TREE_TYPE (gen);
14221 /* Make sure that we can see identifiers, and compute access
14222 correctly. D is already the target FUNCTION_DECL with the
14224 push_access_scope (d);
14226 if (TREE_CODE (gen) == FUNCTION_DECL)
14228 tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
14229 tsubst_exception_specification (type, gen_args, tf_warning_or_error,
14231 /* Don't simply tsubst the function type, as that will give
14232 duplicate warnings about poor parameter qualifications.
14233 The function arguments are the same as the decl_arguments
14234 without the top level cv qualifiers. */
14235 type = TREE_TYPE (type);
14237 tsubst (type, gen_args, tf_warning_or_error, d);
14239 pop_access_scope (d);
14242 /* Check to see whether we know that this template will be
14243 instantiated in some other file, as with "extern template"
14245 external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
14246 /* In general, we do not instantiate such templates... */
14248 /* ... but we instantiate inline functions so that we can inline
14250 && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d))
14251 /* ... we instantiate static data members whose values are
14252 needed in integral constant expressions. */
14253 && ! (TREE_CODE (d) == VAR_DECL
14254 && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (d)))
14256 /* Defer all other templates, unless we have been explicitly
14257 forbidden from doing so. */
14258 if (/* If there is no definition, we cannot instantiate the
14261 /* If it's OK to postpone instantiation, do so. */
14263 /* If this is a static data member that will be defined
14264 elsewhere, we don't want to instantiate the entire data
14265 member, but we do want to instantiate the initializer so that
14266 we can substitute that elsewhere. */
14267 || (external_p && TREE_CODE (d) == VAR_DECL))
14269 /* The definition of the static data member is now required so
14270 we must substitute the initializer. */
14271 if (TREE_CODE (d) == VAR_DECL
14272 && !DECL_INITIAL (d)
14273 && DECL_INITIAL (code_pattern))
14278 ns = decl_namespace_context (d);
14279 push_nested_namespace (ns);
14280 push_nested_class (DECL_CONTEXT (d));
14281 init = tsubst_expr (DECL_INITIAL (code_pattern),
14283 tf_warning_or_error, NULL_TREE,
14284 /*integral_constant_expression_p=*/false);
14285 cp_finish_decl (d, init, /*init_const_expr_p=*/false,
14286 /*asmspec_tree=*/NULL_TREE,
14287 LOOKUP_ONLYCONVERTING);
14288 pop_nested_class ();
14289 pop_nested_namespace (ns);
14292 /* We restore the source position here because it's used by
14293 add_pending_template. */
14294 input_location = saved_loc;
14296 if (at_eof && !pattern_defined
14297 && DECL_EXPLICIT_INSTANTIATION (d))
14300 The definition of a non-exported function template, a
14301 non-exported member function template, or a non-exported
14302 member function or static data member of a class template
14303 shall be present in every translation unit in which it is
14304 explicitly instantiated. */
14306 ("explicit instantiation of %qD but no definition available", d);
14308 /* ??? Historically, we have instantiated inline functions, even
14309 when marked as "extern template". */
14310 if (!(external_p && TREE_CODE (d) == VAR_DECL))
14311 add_pending_template (d);
14314 /* Tell the repository that D is available in this translation unit
14315 -- and see if it is supposed to be instantiated here. */
14316 if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
14318 /* In a PCH file, despite the fact that the repository hasn't
14319 requested instantiation in the PCH it is still possible that
14320 an instantiation will be required in a file that includes the
14323 add_pending_template (d);
14324 /* Instantiate inline functions so that the inliner can do its
14325 job, even though we'll not be emitting a copy of this
14327 if (!(TREE_CODE (d) == FUNCTION_DECL
14328 && flag_inline_trees
14329 && DECL_DECLARED_INLINE_P (d)))
14333 need_push = !cfun || !global_bindings_p ();
14335 push_to_top_level ();
14337 /* Mark D as instantiated so that recursive calls to
14338 instantiate_decl do not try to instantiate it again. */
14339 DECL_TEMPLATE_INSTANTIATED (d) = 1;
14341 /* Regenerate the declaration in case the template has been modified
14342 by a subsequent redeclaration. */
14343 regenerate_decl_from_template (d, td);
14345 /* We already set the file and line above. Reset them now in case
14346 they changed as a result of calling regenerate_decl_from_template. */
14347 input_location = DECL_SOURCE_LOCATION (d);
14349 if (TREE_CODE (d) == VAR_DECL)
14353 /* Clear out DECL_RTL; whatever was there before may not be right
14354 since we've reset the type of the declaration. */
14355 SET_DECL_RTL (d, NULL_RTX);
14356 DECL_IN_AGGR_P (d) = 0;
14358 /* The initializer is placed in DECL_INITIAL by
14359 regenerate_decl_from_template. Pull it out so that
14360 finish_decl can process it. */
14361 init = DECL_INITIAL (d);
14362 DECL_INITIAL (d) = NULL_TREE;
14363 DECL_INITIALIZED_P (d) = 0;
14365 /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
14366 initializer. That function will defer actual emission until
14367 we have a chance to determine linkage. */
14368 DECL_EXTERNAL (d) = 0;
14370 /* Enter the scope of D so that access-checking works correctly. */
14371 push_nested_class (DECL_CONTEXT (d));
14372 finish_decl (d, init, NULL_TREE);
14373 pop_nested_class ();
14375 else if (TREE_CODE (d) == FUNCTION_DECL)
14377 htab_t saved_local_specializations;
14382 /* Save away the current list, in case we are instantiating one
14383 template from within the body of another. */
14384 saved_local_specializations = local_specializations;
14386 /* Set up the list of local specializations. */
14387 local_specializations = htab_create (37,
14388 hash_local_specialization,
14389 eq_local_specializations,
14392 /* Set up context. */
14393 start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
14395 /* Create substitution entries for the parameters. */
14396 subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
14397 tmpl_parm = DECL_ARGUMENTS (subst_decl);
14398 spec_parm = DECL_ARGUMENTS (d);
14399 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
14401 register_local_specialization (spec_parm, tmpl_parm);
14402 spec_parm = skip_artificial_parms_for (d, spec_parm);
14403 tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
14405 while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
14407 register_local_specialization (spec_parm, tmpl_parm);
14408 tmpl_parm = TREE_CHAIN (tmpl_parm);
14409 spec_parm = TREE_CHAIN (spec_parm);
14411 if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
14413 /* Collect all of the extra "packed" parameters into an
14417 tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
14418 tree argtypepack = make_node (TYPE_ARGUMENT_PACK);
14422 /* Count how many parameters remain. */
14423 for (t = spec_parm; t; t = TREE_CHAIN (t))
14426 /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters. */
14427 parmvec = make_tree_vec (len);
14428 parmtypevec = make_tree_vec (len);
14429 for(i = 0; i < len; i++, spec_parm = TREE_CHAIN (spec_parm))
14431 TREE_VEC_ELT (parmvec, i) = spec_parm;
14432 TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
14435 /* Build the argument packs. */
14436 SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
14437 SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
14438 TREE_TYPE (argpack) = argtypepack;
14440 /* Register the (value) argument pack as a specialization of
14441 TMPL_PARM, then move on. */
14442 register_local_specialization (argpack, tmpl_parm);
14443 tmpl_parm = TREE_CHAIN (tmpl_parm);
14445 gcc_assert (!spec_parm);
14447 /* Substitute into the body of the function. */
14448 tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
14449 tf_warning_or_error, tmpl,
14450 /*integral_constant_expression_p=*/false);
14452 /* Set the current input_location to the end of the function
14453 so that finish_function knows where we are. */
14454 input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
14456 /* We don't need the local specializations any more. */
14457 htab_delete (local_specializations);
14458 local_specializations = saved_local_specializations;
14460 /* Finish the function. */
14461 d = finish_function (0);
14462 expand_or_defer_fn (d);
14465 /* We're not deferring instantiation any more. */
14466 TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
14469 pop_from_top_level ();
14472 input_location = saved_loc;
14473 in_system_header = saved_in_system_header;
14474 pop_deferring_access_checks ();
14475 pop_tinst_level ();
14477 timevar_pop (TV_PARSE);
14482 /* Run through the list of templates that we wish we could
14483 instantiate, and instantiate any we can. RETRIES is the
14484 number of times we retry pending template instantiation. */
14487 instantiate_pending_templates (int retries)
14490 tree last = NULL_TREE;
14492 location_t saved_loc = input_location;
14493 int saved_in_system_header = in_system_header;
14495 /* Instantiating templates may trigger vtable generation. This in turn
14496 may require further template instantiations. We place a limit here
14497 to avoid infinite loop. */
14498 if (pending_templates && retries >= max_tinst_depth)
14500 tree decl = TREE_VALUE (pending_templates);
14502 error ("template instantiation depth exceeds maximum of %d"
14503 " instantiating %q+D, possibly from virtual table generation"
14504 " (use -ftemplate-depth-NN to increase the maximum)",
14505 max_tinst_depth, decl);
14506 if (TREE_CODE (decl) == FUNCTION_DECL)
14507 /* Pretend that we defined it. */
14508 DECL_INITIAL (decl) = error_mark_node;
14516 t = &pending_templates;
14519 tree instantiation = TREE_VALUE (*t);
14521 reopen_tinst_level (TREE_PURPOSE (*t));
14523 if (TYPE_P (instantiation))
14527 if (!COMPLETE_TYPE_P (instantiation))
14529 instantiate_class_template (instantiation);
14530 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
14531 for (fn = TYPE_METHODS (instantiation);
14533 fn = TREE_CHAIN (fn))
14534 if (! DECL_ARTIFICIAL (fn))
14535 instantiate_decl (fn,
14537 /*expl_inst_class_mem_p=*/false);
14538 if (COMPLETE_TYPE_P (instantiation))
14542 if (COMPLETE_TYPE_P (instantiation))
14543 /* If INSTANTIATION has been instantiated, then we don't
14544 need to consider it again in the future. */
14545 *t = TREE_CHAIN (*t);
14549 t = &TREE_CHAIN (*t);
14554 if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
14555 && !DECL_TEMPLATE_INSTANTIATED (instantiation))
14558 = instantiate_decl (instantiation,
14560 /*expl_inst_class_mem_p=*/false);
14561 if (DECL_TEMPLATE_INSTANTIATED (instantiation))
14565 if (DECL_TEMPLATE_SPECIALIZATION (instantiation)
14566 || DECL_TEMPLATE_INSTANTIATED (instantiation))
14567 /* If INSTANTIATION has been instantiated, then we don't
14568 need to consider it again in the future. */
14569 *t = TREE_CHAIN (*t);
14573 t = &TREE_CHAIN (*t);
14577 current_tinst_level = NULL_TREE;
14579 last_pending_template = last;
14581 while (reconsider);
14583 input_location = saved_loc;
14584 in_system_header = saved_in_system_header;
14587 /* Substitute ARGVEC into T, which is a list of initializers for
14588 either base class or a non-static data member. The TREE_PURPOSEs
14589 are DECLs, and the TREE_VALUEs are the initializer values. Used by
14590 instantiate_decl. */
14593 tsubst_initializer_list (tree t, tree argvec)
14595 tree inits = NULL_TREE;
14597 for (; t; t = TREE_CHAIN (t))
14601 tree expanded_bases = NULL_TREE;
14602 tree expanded_arguments = NULL_TREE;
14605 if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
14610 /* Expand the base class expansion type into separate base
14612 expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
14613 tf_warning_or_error,
14615 if (expanded_bases == error_mark_node)
14618 /* We'll be building separate TREE_LISTs of arguments for
14620 len = TREE_VEC_LENGTH (expanded_bases);
14621 expanded_arguments = make_tree_vec (len);
14622 for (i = 0; i < len; i++)
14623 TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
14625 /* Build a dummy EXPR_PACK_EXPANSION that will be used to
14626 expand each argument in the TREE_VALUE of t. */
14627 expr = make_node (EXPR_PACK_EXPANSION);
14628 PACK_EXPANSION_PARAMETER_PACKS (expr) =
14629 PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
14631 /* Substitute parameter packs into each argument in the
14633 in_base_initializer = 1;
14634 for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
14636 tree expanded_exprs;
14638 /* Expand the argument. */
14639 SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
14640 expanded_exprs = tsubst_pack_expansion (expr, argvec,
14641 tf_warning_or_error,
14644 /* Prepend each of the expanded expressions to the
14645 corresponding TREE_LIST in EXPANDED_ARGUMENTS. */
14646 for (i = 0; i < len; i++)
14648 TREE_VEC_ELT (expanded_arguments, i) =
14649 tree_cons (NULL_TREE, TREE_VEC_ELT (expanded_exprs, i),
14650 TREE_VEC_ELT (expanded_arguments, i));
14653 in_base_initializer = 0;
14655 /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
14656 since we built them backwards. */
14657 for (i = 0; i < len; i++)
14659 TREE_VEC_ELT (expanded_arguments, i) =
14660 nreverse (TREE_VEC_ELT (expanded_arguments, i));
14664 for (i = 0; i < len; ++i)
14666 if (expanded_bases)
14668 decl = TREE_VEC_ELT (expanded_bases, i);
14669 decl = expand_member_init (decl);
14670 init = TREE_VEC_ELT (expanded_arguments, i);
14674 decl = tsubst_copy (TREE_PURPOSE (t), argvec,
14675 tf_warning_or_error, NULL_TREE);
14677 decl = expand_member_init (decl);
14678 if (decl && !DECL_P (decl))
14679 in_base_initializer = 1;
14681 init = tsubst_expr (TREE_VALUE (t), argvec,
14682 tf_warning_or_error, NULL_TREE,
14683 /*integral_constant_expression_p=*/false);
14684 in_base_initializer = 0;
14689 init = build_tree_list (decl, init);
14690 TREE_CHAIN (init) = inits;
14698 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
14701 set_current_access_from_decl (tree decl)
14703 if (TREE_PRIVATE (decl))
14704 current_access_specifier = access_private_node;
14705 else if (TREE_PROTECTED (decl))
14706 current_access_specifier = access_protected_node;
14708 current_access_specifier = access_public_node;
14711 /* Instantiate an enumerated type. TAG is the template type, NEWTAG
14712 is the instantiation (which should have been created with
14713 start_enum) and ARGS are the template arguments to use. */
14716 tsubst_enum (tree tag, tree newtag, tree args)
14720 for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
14725 decl = TREE_VALUE (e);
14726 /* Note that in a template enum, the TREE_VALUE is the
14727 CONST_DECL, not the corresponding INTEGER_CST. */
14728 value = tsubst_expr (DECL_INITIAL (decl),
14729 args, tf_warning_or_error, NULL_TREE,
14730 /*integral_constant_expression_p=*/true);
14732 /* Give this enumeration constant the correct access. */
14733 set_current_access_from_decl (decl);
14735 /* Actually build the enumerator itself. */
14736 build_enumerator (DECL_NAME (decl), value, newtag);
14739 finish_enum (newtag);
14740 DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
14741 = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
14744 /* DECL is a FUNCTION_DECL that is a template specialization. Return
14745 its type -- but without substituting the innermost set of template
14746 arguments. So, innermost set of template parameters will appear in
14750 get_mostly_instantiated_function_type (tree decl)
14758 tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
14759 targs = DECL_TI_ARGS (decl);
14760 tparms = DECL_TEMPLATE_PARMS (tmpl);
14761 parm_depth = TMPL_PARMS_DEPTH (tparms);
14763 /* There should be as many levels of arguments as there are levels
14765 gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
14767 fn_type = TREE_TYPE (tmpl);
14769 if (parm_depth == 1)
14770 /* No substitution is necessary. */
14774 int i, save_access_control;
14777 /* Replace the innermost level of the TARGS with NULL_TREEs to
14778 let tsubst know not to substitute for those parameters. */
14779 partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
14780 for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
14781 SET_TMPL_ARGS_LEVEL (partial_args, i,
14782 TMPL_ARGS_LEVEL (targs, i));
14783 SET_TMPL_ARGS_LEVEL (partial_args,
14784 TMPL_ARGS_DEPTH (targs),
14785 make_tree_vec (DECL_NTPARMS (tmpl)));
14787 /* Disable access control as this function is used only during
14789 save_access_control = flag_access_control;
14790 flag_access_control = 0;
14792 ++processing_template_decl;
14793 /* Now, do the (partial) substitution to figure out the
14794 appropriate function type. */
14795 fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
14796 --processing_template_decl;
14798 /* Substitute into the template parameters to obtain the real
14799 innermost set of parameters. This step is important if the
14800 innermost set of template parameters contains value
14801 parameters whose types depend on outer template parameters. */
14802 TREE_VEC_LENGTH (partial_args)--;
14803 tparms = tsubst_template_parms (tparms, partial_args, tf_error);
14805 flag_access_control = save_access_control;
14811 /* Return truthvalue if we're processing a template different from
14812 the last one involved in diagnostics. */
14814 problematic_instantiation_changed (void)
14816 return last_template_error_tick != tinst_level_tick;
14819 /* Remember current template involved in diagnostics. */
14821 record_last_problematic_instantiation (void)
14823 last_template_error_tick = tinst_level_tick;
14827 current_instantiation (void)
14829 return current_tinst_level;
14832 /* [temp.param] Check that template non-type parm TYPE is of an allowable
14833 type. Return zero for ok, nonzero for disallowed. Issue error and
14834 warning messages under control of COMPLAIN. */
14837 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
14839 if (INTEGRAL_TYPE_P (type))
14841 else if (POINTER_TYPE_P (type))
14843 else if (TYPE_PTR_TO_MEMBER_P (type))
14845 else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
14847 else if (TREE_CODE (type) == TYPENAME_TYPE)
14850 if (complain & tf_error)
14851 error ("%q#T is not a valid type for a template constant parameter", type);
14855 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
14856 Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
14859 dependent_type_p_r (tree type)
14865 A type is dependent if it is:
14867 -- a template parameter. Template template parameters are types
14868 for us (since TYPE_P holds true for them) so we handle
14870 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
14871 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
14873 /* -- a qualified-id with a nested-name-specifier which contains a
14874 class-name that names a dependent type or whose unqualified-id
14875 names a dependent type. */
14876 if (TREE_CODE (type) == TYPENAME_TYPE)
14878 /* -- a cv-qualified type where the cv-unqualified type is
14880 type = TYPE_MAIN_VARIANT (type);
14881 /* -- a compound type constructed from any dependent type. */
14882 if (TYPE_PTR_TO_MEMBER_P (type))
14883 return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
14884 || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
14886 else if (TREE_CODE (type) == POINTER_TYPE
14887 || TREE_CODE (type) == REFERENCE_TYPE)
14888 return dependent_type_p (TREE_TYPE (type));
14889 else if (TREE_CODE (type) == FUNCTION_TYPE
14890 || TREE_CODE (type) == METHOD_TYPE)
14894 if (dependent_type_p (TREE_TYPE (type)))
14896 for (arg_type = TYPE_ARG_TYPES (type);
14898 arg_type = TREE_CHAIN (arg_type))
14899 if (dependent_type_p (TREE_VALUE (arg_type)))
14903 /* -- an array type constructed from any dependent type or whose
14904 size is specified by a constant expression that is
14905 value-dependent. */
14906 if (TREE_CODE (type) == ARRAY_TYPE)
14908 if (TYPE_DOMAIN (type)
14909 && ((value_dependent_expression_p
14910 (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
14911 || (type_dependent_expression_p
14912 (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
14914 return dependent_type_p (TREE_TYPE (type));
14917 /* -- a template-id in which either the template name is a template
14919 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
14921 /* ... or any of the template arguments is a dependent type or
14922 an expression that is type-dependent or value-dependent. */
14923 else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
14924 && (any_dependent_template_arguments_p
14925 (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
14928 /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
14929 argument of the `typeof' expression is not type-dependent, then
14930 it should already been have resolved. */
14931 if (TREE_CODE (type) == TYPEOF_TYPE
14932 || TREE_CODE (type) == DECLTYPE_TYPE)
14935 /* A template argument pack is dependent if any of its packed
14937 if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
14939 tree args = ARGUMENT_PACK_ARGS (type);
14940 int i, len = TREE_VEC_LENGTH (args);
14941 for (i = 0; i < len; ++i)
14942 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
14946 /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
14947 be template parameters. */
14948 if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
14951 /* The standard does not specifically mention types that are local
14952 to template functions or local classes, but they should be
14953 considered dependent too. For example:
14955 template <int I> void f() {
14960 The size of `E' cannot be known until the value of `I' has been
14961 determined. Therefore, `E' must be considered dependent. */
14962 scope = TYPE_CONTEXT (type);
14963 if (scope && TYPE_P (scope))
14964 return dependent_type_p (scope);
14965 else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
14966 return type_dependent_expression_p (scope);
14968 /* Other types are non-dependent. */
14972 /* Returns TRUE if TYPE is dependent, in the sense of
14973 [temp.dep.type]. */
14976 dependent_type_p (tree type)
14978 /* If there are no template parameters in scope, then there can't be
14979 any dependent types. */
14980 if (!processing_template_decl)
14982 /* If we are not processing a template, then nobody should be
14983 providing us with a dependent type. */
14985 gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM);
14989 /* If the type is NULL, we have not computed a type for the entity
14990 in question; in that case, the type is dependent. */
14994 /* Erroneous types can be considered non-dependent. */
14995 if (type == error_mark_node)
14998 /* If we have not already computed the appropriate value for TYPE,
15000 if (!TYPE_DEPENDENT_P_VALID (type))
15002 TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
15003 TYPE_DEPENDENT_P_VALID (type) = 1;
15006 return TYPE_DEPENDENT_P (type);
15009 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION. */
15012 dependent_scope_ref_p (tree expression, bool criterion (tree))
15017 gcc_assert (TREE_CODE (expression) == SCOPE_REF);
15019 if (!TYPE_P (TREE_OPERAND (expression, 0)))
15022 scope = TREE_OPERAND (expression, 0);
15023 name = TREE_OPERAND (expression, 1);
15027 An id-expression is type-dependent if it contains a
15028 nested-name-specifier that contains a class-name that names a
15030 /* The suggested resolution to Core Issue 2 implies that if the
15031 qualifying type is the current class, then we must peek
15034 && currently_open_class (scope)
15035 && !criterion (name))
15037 if (dependent_type_p (scope))
15043 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
15044 [temp.dep.constexpr]. EXPRESSION is already known to be a constant
15048 value_dependent_expression_p (tree expression)
15050 if (!processing_template_decl)
15053 /* A name declared with a dependent type. */
15054 if (DECL_P (expression) && type_dependent_expression_p (expression))
15057 switch (TREE_CODE (expression))
15059 case IDENTIFIER_NODE:
15060 /* A name that has not been looked up -- must be dependent. */
15063 case TEMPLATE_PARM_INDEX:
15064 /* A non-type template parm. */
15068 /* A non-type template parm. */
15069 if (DECL_TEMPLATE_PARM_P (expression))
15074 /* A constant with integral or enumeration type and is initialized
15075 with an expression that is value-dependent. */
15076 if (DECL_INITIAL (expression)
15077 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
15078 && value_dependent_expression_p (DECL_INITIAL (expression)))
15082 case DYNAMIC_CAST_EXPR:
15083 case STATIC_CAST_EXPR:
15084 case CONST_CAST_EXPR:
15085 case REINTERPRET_CAST_EXPR:
15087 /* These expressions are value-dependent if the type to which
15088 the cast occurs is dependent or the expression being casted
15089 is value-dependent. */
15091 tree type = TREE_TYPE (expression);
15093 if (dependent_type_p (type))
15096 /* A functional cast has a list of operands. */
15097 expression = TREE_OPERAND (expression, 0);
15100 /* If there are no operands, it must be an expression such
15101 as "int()". This should not happen for aggregate types
15102 because it would form non-constant expressions. */
15103 gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
15108 if (TREE_CODE (expression) == TREE_LIST)
15109 return any_value_dependent_elements_p (expression);
15111 return value_dependent_expression_p (expression);
15116 /* A `sizeof' expression is value-dependent if the operand is
15117 type-dependent or is a pack expansion. */
15118 expression = TREE_OPERAND (expression, 0);
15119 if (PACK_EXPANSION_P (expression))
15121 else if (TYPE_P (expression))
15122 return dependent_type_p (expression);
15123 return type_dependent_expression_p (expression);
15126 return dependent_scope_ref_p (expression, value_dependent_expression_p);
15128 case COMPONENT_REF:
15129 return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
15130 || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
15133 /* A CALL_EXPR may appear in a constant expression if it is a
15134 call to a builtin function, e.g., __builtin_constant_p. All
15135 such calls are value-dependent. */
15138 case NONTYPE_ARGUMENT_PACK:
15139 /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
15140 is value-dependent. */
15142 tree values = ARGUMENT_PACK_ARGS (expression);
15143 int i, len = TREE_VEC_LENGTH (values);
15145 for (i = 0; i < len; ++i)
15146 if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
15154 tree type2 = TRAIT_EXPR_TYPE2 (expression);
15155 return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
15156 || (type2 ? dependent_type_p (type2) : false));
15160 return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
15161 || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
15164 /* A constant expression is value-dependent if any subexpression is
15165 value-dependent. */
15166 switch (TREE_CODE_CLASS (TREE_CODE (expression)))
15168 case tcc_reference:
15170 return (value_dependent_expression_p
15171 (TREE_OPERAND (expression, 0)));
15173 case tcc_comparison:
15175 return ((value_dependent_expression_p
15176 (TREE_OPERAND (expression, 0)))
15177 || (value_dependent_expression_p
15178 (TREE_OPERAND (expression, 1))));
15180 case tcc_expression:
15184 for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
15185 /* In some cases, some of the operands may be missing.
15186 (For example, in the case of PREDECREMENT_EXPR, the
15187 amount to increment by may be missing.) That doesn't
15188 make the expression dependent. */
15189 if (TREE_OPERAND (expression, i)
15190 && (value_dependent_expression_p
15191 (TREE_OPERAND (expression, i))))
15201 /* The expression is not value-dependent. */
15205 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
15206 [temp.dep.expr]. */
15209 type_dependent_expression_p (tree expression)
15211 if (!processing_template_decl)
15214 if (expression == error_mark_node)
15217 /* An unresolved name is always dependent. */
15218 if (TREE_CODE (expression) == IDENTIFIER_NODE
15219 || TREE_CODE (expression) == USING_DECL)
15222 /* Some expression forms are never type-dependent. */
15223 if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
15224 || TREE_CODE (expression) == SIZEOF_EXPR
15225 || TREE_CODE (expression) == ALIGNOF_EXPR
15226 || TREE_CODE (expression) == TRAIT_EXPR
15227 || TREE_CODE (expression) == TYPEID_EXPR
15228 || TREE_CODE (expression) == DELETE_EXPR
15229 || TREE_CODE (expression) == VEC_DELETE_EXPR
15230 || TREE_CODE (expression) == THROW_EXPR)
15233 /* The types of these expressions depends only on the type to which
15234 the cast occurs. */
15235 if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
15236 || TREE_CODE (expression) == STATIC_CAST_EXPR
15237 || TREE_CODE (expression) == CONST_CAST_EXPR
15238 || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
15239 || TREE_CODE (expression) == CAST_EXPR)
15240 return dependent_type_p (TREE_TYPE (expression));
15242 /* The types of these expressions depends only on the type created
15243 by the expression. */
15244 if (TREE_CODE (expression) == NEW_EXPR
15245 || TREE_CODE (expression) == VEC_NEW_EXPR)
15247 /* For NEW_EXPR tree nodes created inside a template, either
15248 the object type itself or a TREE_LIST may appear as the
15250 tree type = TREE_OPERAND (expression, 1);
15251 if (TREE_CODE (type) == TREE_LIST)
15252 /* This is an array type. We need to check array dimensions
15254 return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
15255 || value_dependent_expression_p
15256 (TREE_OPERAND (TREE_VALUE (type), 1));
15258 return dependent_type_p (type);
15261 if (TREE_CODE (expression) == SCOPE_REF
15262 && dependent_scope_ref_p (expression,
15263 type_dependent_expression_p))
15266 if (TREE_CODE (expression) == FUNCTION_DECL
15267 && DECL_LANG_SPECIFIC (expression)
15268 && DECL_TEMPLATE_INFO (expression)
15269 && (any_dependent_template_arguments_p
15270 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
15273 if (TREE_CODE (expression) == TEMPLATE_DECL
15274 && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
15277 if (TREE_TYPE (expression) == unknown_type_node)
15279 if (TREE_CODE (expression) == ADDR_EXPR)
15280 return type_dependent_expression_p (TREE_OPERAND (expression, 0));
15281 if (TREE_CODE (expression) == COMPONENT_REF
15282 || TREE_CODE (expression) == OFFSET_REF)
15284 if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
15286 expression = TREE_OPERAND (expression, 1);
15287 if (TREE_CODE (expression) == IDENTIFIER_NODE)
15290 /* SCOPE_REF with non-null TREE_TYPE is always non-dependent. */
15291 if (TREE_CODE (expression) == SCOPE_REF)
15294 if (TREE_CODE (expression) == BASELINK)
15295 expression = BASELINK_FUNCTIONS (expression);
15297 if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
15299 if (any_dependent_template_arguments_p
15300 (TREE_OPERAND (expression, 1)))
15302 expression = TREE_OPERAND (expression, 0);
15304 gcc_assert (TREE_CODE (expression) == OVERLOAD
15305 || TREE_CODE (expression) == FUNCTION_DECL);
15309 if (type_dependent_expression_p (OVL_CURRENT (expression)))
15311 expression = OVL_NEXT (expression);
15316 gcc_assert (TREE_CODE (expression) != TYPE_DECL);
15318 return (dependent_type_p (TREE_TYPE (expression)));
15321 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
15322 contains a type-dependent expression. */
15325 any_type_dependent_arguments_p (tree args)
15329 tree arg = TREE_VALUE (args);
15331 if (type_dependent_expression_p (arg))
15333 args = TREE_CHAIN (args);
15338 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
15339 expressions) contains any value-dependent expressions. */
15342 any_value_dependent_elements_p (tree list)
15344 for (; list; list = TREE_CHAIN (list))
15345 if (value_dependent_expression_p (TREE_VALUE (list)))
15351 /* Returns TRUE if the ARG (a template argument) is dependent. */
15354 dependent_template_arg_p (tree arg)
15356 if (!processing_template_decl)
15359 if (TREE_CODE (arg) == TEMPLATE_DECL
15360 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15361 return dependent_template_p (arg);
15362 else if (ARGUMENT_PACK_P (arg))
15364 tree args = ARGUMENT_PACK_ARGS (arg);
15365 int i, len = TREE_VEC_LENGTH (args);
15366 for (i = 0; i < len; ++i)
15368 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15374 else if (TYPE_P (arg))
15375 return dependent_type_p (arg);
15377 return (type_dependent_expression_p (arg)
15378 || value_dependent_expression_p (arg));
15381 /* Returns true if ARGS (a collection of template arguments) contains
15382 any types that require structural equality testing. */
15385 any_template_arguments_need_structural_equality_p (tree args)
15392 if (args == error_mark_node)
15395 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
15397 tree level = TMPL_ARGS_LEVEL (args, i + 1);
15398 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
15400 tree arg = TREE_VEC_ELT (level, j);
15401 tree packed_args = NULL_TREE;
15404 if (ARGUMENT_PACK_P (arg))
15406 /* Look inside the argument pack. */
15407 packed_args = ARGUMENT_PACK_ARGS (arg);
15408 len = TREE_VEC_LENGTH (packed_args);
15411 for (k = 0; k < len; ++k)
15414 arg = TREE_VEC_ELT (packed_args, k);
15416 if (error_operand_p (arg))
15418 else if (TREE_CODE (arg) == TEMPLATE_DECL
15419 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15421 else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
15423 else if (!TYPE_P (arg) && TREE_TYPE (arg)
15424 && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
15433 /* Returns true if ARGS (a collection of template arguments) contains
15434 any dependent arguments. */
15437 any_dependent_template_arguments_p (tree args)
15444 if (args == error_mark_node)
15447 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
15449 tree level = TMPL_ARGS_LEVEL (args, i + 1);
15450 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
15451 if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
15458 /* Returns TRUE if the template TMPL is dependent. */
15461 dependent_template_p (tree tmpl)
15463 if (TREE_CODE (tmpl) == OVERLOAD)
15467 if (dependent_template_p (OVL_FUNCTION (tmpl)))
15469 tmpl = OVL_CHAIN (tmpl);
15474 /* Template template parameters are dependent. */
15475 if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
15476 || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
15478 /* So are names that have not been looked up. */
15479 if (TREE_CODE (tmpl) == SCOPE_REF
15480 || TREE_CODE (tmpl) == IDENTIFIER_NODE)
15482 /* So are member templates of dependent classes. */
15483 if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
15484 return dependent_type_p (DECL_CONTEXT (tmpl));
15488 /* Returns TRUE if the specialization TMPL<ARGS> is dependent. */
15491 dependent_template_id_p (tree tmpl, tree args)
15493 return (dependent_template_p (tmpl)
15494 || any_dependent_template_arguments_p (args));
15497 /* TYPE is a TYPENAME_TYPE. Returns the ordinary TYPE to which the
15498 TYPENAME_TYPE corresponds. Returns the original TYPENAME_TYPE if
15499 no such TYPE can be found. Note that this function peers inside
15500 uninstantiated templates and therefore should be used only in
15501 extremely limited situations. ONLY_CURRENT_P restricts this
15502 peering to the currently open classes hierarchy (which is required
15503 when comparing types). */
15506 resolve_typename_type (tree type, bool only_current_p)
15515 gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
15517 scope = TYPE_CONTEXT (type);
15518 name = TYPE_IDENTIFIER (type);
15520 /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
15521 it first before we can figure out what NAME refers to. */
15522 if (TREE_CODE (scope) == TYPENAME_TYPE)
15523 scope = resolve_typename_type (scope, only_current_p);
15524 /* If we don't know what SCOPE refers to, then we cannot resolve the
15526 if (TREE_CODE (scope) == TYPENAME_TYPE)
15528 /* If the SCOPE is a template type parameter, we have no way of
15529 resolving the name. */
15530 if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
15532 /* If the SCOPE is not the current instantiation, there's no reason
15533 to look inside it. */
15534 if (only_current_p && !currently_open_class (scope))
15536 /* If SCOPE is a partial instantiation, it will not have a valid
15537 TYPE_FIELDS list, so use the original template. */
15538 scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
15539 /* Enter the SCOPE so that name lookup will be resolved as if we
15540 were in the class definition. In particular, SCOPE will no
15541 longer be considered a dependent type. */
15542 pushed_scope = push_scope (scope);
15543 /* Look up the declaration. */
15544 decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
15546 result = NULL_TREE;
15548 /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
15549 find a TEMPLATE_DECL. Otherwise, we want to find a TYPE_DECL. */
15552 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
15553 && TREE_CODE (decl) == TYPE_DECL)
15555 result = TREE_TYPE (decl);
15556 if (result == error_mark_node)
15557 result = NULL_TREE;
15559 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
15560 && DECL_CLASS_TEMPLATE_P (decl))
15564 /* Obtain the template and the arguments. */
15565 tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
15566 args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
15567 /* Instantiate the template. */
15568 result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
15569 /*entering_scope=*/0,
15570 tf_error | tf_user);
15571 if (result == error_mark_node)
15572 result = NULL_TREE;
15575 /* Leave the SCOPE. */
15577 pop_scope (pushed_scope);
15579 /* If we failed to resolve it, return the original typename. */
15583 /* If lookup found a typename type, resolve that too. */
15584 if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
15586 /* Ill-formed programs can cause infinite recursion here, so we
15587 must catch that. */
15588 TYPENAME_IS_RESOLVING_P (type) = 1;
15589 result = resolve_typename_type (result, only_current_p);
15590 TYPENAME_IS_RESOLVING_P (type) = 0;
15593 /* Qualify the resulting type. */
15594 quals = cp_type_quals (type);
15596 result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
15601 /* EXPR is an expression which is not type-dependent. Return a proxy
15602 for EXPR that can be used to compute the types of larger
15603 expressions containing EXPR. */
15606 build_non_dependent_expr (tree expr)
15610 /* Preserve null pointer constants so that the type of things like
15611 "p == 0" where "p" is a pointer can be determined. */
15612 if (null_ptr_cst_p (expr))
15614 /* Preserve OVERLOADs; the functions must be available to resolve
15617 if (TREE_CODE (inner_expr) == ADDR_EXPR)
15618 inner_expr = TREE_OPERAND (inner_expr, 0);
15619 if (TREE_CODE (inner_expr) == COMPONENT_REF)
15620 inner_expr = TREE_OPERAND (inner_expr, 1);
15621 if (is_overloaded_fn (inner_expr)
15622 || TREE_CODE (inner_expr) == OFFSET_REF)
15624 /* There is no need to return a proxy for a variable. */
15625 if (TREE_CODE (expr) == VAR_DECL)
15627 /* Preserve string constants; conversions from string constants to
15628 "char *" are allowed, even though normally a "const char *"
15629 cannot be used to initialize a "char *". */
15630 if (TREE_CODE (expr) == STRING_CST)
15632 /* Preserve arithmetic constants, as an optimization -- there is no
15633 reason to create a new node. */
15634 if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
15636 /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
15637 There is at least one place where we want to know that a
15638 particular expression is a throw-expression: when checking a ?:
15639 expression, there are special rules if the second or third
15640 argument is a throw-expression. */
15641 if (TREE_CODE (expr) == THROW_EXPR)
15644 if (TREE_CODE (expr) == COND_EXPR)
15645 return build3 (COND_EXPR,
15647 TREE_OPERAND (expr, 0),
15648 (TREE_OPERAND (expr, 1)
15649 ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
15650 : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
15651 build_non_dependent_expr (TREE_OPERAND (expr, 2)));
15652 if (TREE_CODE (expr) == COMPOUND_EXPR
15653 && !COMPOUND_EXPR_OVERLOADED (expr))
15654 return build2 (COMPOUND_EXPR,
15656 TREE_OPERAND (expr, 0),
15657 build_non_dependent_expr (TREE_OPERAND (expr, 1)));
15659 /* If the type is unknown, it can't really be non-dependent */
15660 gcc_assert (TREE_TYPE (expr) != unknown_type_node);
15662 /* Otherwise, build a NON_DEPENDENT_EXPR.
15664 REFERENCE_TYPEs are not stripped for expressions in templates
15665 because doing so would play havoc with mangling. Consider, for
15668 template <typename T> void f<T& g>() { g(); }
15670 In the body of "f", the expression for "g" will have
15671 REFERENCE_TYPE, even though the standard says that it should
15672 not. The reason is that we must preserve the syntactic form of
15673 the expression so that mangling (say) "f<g>" inside the body of
15674 "f" works out correctly. Therefore, the REFERENCE_TYPE is
15676 return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
15679 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
15680 Return a new TREE_LIST with the various arguments replaced with
15681 equivalent non-dependent expressions. */
15684 build_non_dependent_args (tree args)
15689 new_args = NULL_TREE;
15690 for (a = args; a; a = TREE_CHAIN (a))
15691 new_args = tree_cons (NULL_TREE,
15692 build_non_dependent_expr (TREE_VALUE (a)),
15694 return nreverse (new_args);
15697 #include "gt-cp-pt.h"