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 struct pending_template
GTY (()) {
57 struct pending_template
*next
;
58 struct tinst_level
*tinst
;
61 static GTY(()) struct pending_template
*pending_templates
;
62 static GTY(()) struct pending_template
*last_pending_template
;
64 int processing_template_parmlist
;
65 static int template_header_count
;
67 static GTY(()) tree saved_trees
;
68 static VEC(int,heap
) *inline_parm_levels
;
70 static GTY(()) struct tinst_level
*current_tinst_level
;
72 static GTY(()) tree saved_access_scope
;
74 /* Live only within one (recursive) call to tsubst_expr. We use
75 this to pass the statement expression node from the STMT_EXPR
76 to the EXPR_STMT that is its result. */
77 static tree cur_stmt_expr
;
79 /* A map from local variable declarations in the body of the template
80 presently being instantiated to the corresponding instantiated
82 static htab_t local_specializations
;
84 /* Contains canonical template parameter types. The vector is indexed by
85 the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
86 TREE_LIST, whose TREE_VALUEs contain the canonical template
87 parameters of various types and levels. */
88 static GTY(()) VEC(tree
,gc
) *canonical_template_parms
;
90 #define UNIFY_ALLOW_NONE 0
91 #define UNIFY_ALLOW_MORE_CV_QUAL 1
92 #define UNIFY_ALLOW_LESS_CV_QUAL 2
93 #define UNIFY_ALLOW_DERIVED 4
94 #define UNIFY_ALLOW_INTEGER 8
95 #define UNIFY_ALLOW_OUTER_LEVEL 16
96 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
97 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
99 static void push_access_scope (tree
);
100 static void pop_access_scope (tree
);
101 static bool resolve_overloaded_unification (tree
, tree
, tree
, tree
,
102 unification_kind_t
, int);
103 static int try_one_overload (tree
, tree
, tree
, tree
, tree
,
104 unification_kind_t
, int, bool);
105 static int unify (tree
, tree
, tree
, tree
, int);
106 static void add_pending_template (tree
);
107 static int push_tinst_level (tree
);
108 static void pop_tinst_level (void);
109 static tree
reopen_tinst_level (struct tinst_level
*);
110 static tree
tsubst_initializer_list (tree
, tree
);
111 static tree
get_class_bindings (tree
, tree
, tree
);
112 static tree
coerce_template_parms (tree
, tree
, tree
, tsubst_flags_t
,
114 static void tsubst_enum (tree
, tree
, tree
);
115 static tree
add_to_template_args (tree
, tree
);
116 static tree
add_outermost_template_args (tree
, tree
);
117 static bool check_instantiated_args (tree
, tree
, tsubst_flags_t
);
118 static int maybe_adjust_types_for_deduction (unification_kind_t
, tree
*, tree
*,
120 static int type_unification_real (tree
, tree
, tree
, tree
,
121 int, unification_kind_t
, int);
122 static void note_template_header (int);
123 static tree
convert_nontype_argument_function (tree
, tree
);
124 static tree
convert_nontype_argument (tree
, tree
);
125 static tree
convert_template_argument (tree
, tree
, tree
,
126 tsubst_flags_t
, int, tree
);
127 static int for_each_template_parm (tree
, tree_fn_t
, void*,
128 struct pointer_set_t
*);
129 static tree
expand_template_argument_pack (tree
);
130 static tree
build_template_parm_index (int, int, int, tree
, tree
);
131 static bool inline_needs_template_parms (tree
);
132 static void push_inline_template_parms_recursive (tree
, int);
133 static tree
retrieve_local_specialization (tree
);
134 static void register_local_specialization (tree
, tree
);
135 static tree
reduce_template_parm_level (tree
, tree
, int);
136 static int mark_template_parm (tree
, void *);
137 static int template_parm_this_level_p (tree
, void *);
138 static tree
tsubst_friend_function (tree
, tree
);
139 static tree
tsubst_friend_class (tree
, tree
);
140 static int can_complete_type_without_circularity (tree
);
141 static tree
get_bindings (tree
, tree
, tree
, bool);
142 static int template_decl_level (tree
);
143 static int check_cv_quals_for_unify (int, tree
, tree
);
144 static void template_parm_level_and_index (tree
, int*, int*);
145 static int unify_pack_expansion (tree
, tree
, tree
, tree
, int, bool, bool);
146 static tree
tsubst_template_arg (tree
, tree
, tsubst_flags_t
, tree
);
147 static tree
tsubst_template_args (tree
, tree
, tsubst_flags_t
, tree
);
148 static tree
tsubst_template_parms (tree
, tree
, tsubst_flags_t
);
149 static void regenerate_decl_from_template (tree
, tree
);
150 static tree
most_specialized_class (tree
, tree
);
151 static tree
tsubst_aggr_type (tree
, tree
, tsubst_flags_t
, tree
, int);
152 static tree
tsubst_arg_types (tree
, tree
, tsubst_flags_t
, tree
);
153 static tree
tsubst_function_type (tree
, tree
, tsubst_flags_t
, tree
);
154 static bool check_specialization_scope (void);
155 static tree
process_partial_specialization (tree
);
156 static void set_current_access_from_decl (tree
);
157 static tree
get_template_base (tree
, tree
, tree
, tree
);
158 static tree
try_class_unification (tree
, tree
, tree
, tree
);
159 static int coerce_template_template_parms (tree
, tree
, tsubst_flags_t
,
161 static int template_args_equal (tree
, tree
);
162 static void tsubst_default_arguments (tree
);
163 static tree
for_each_template_parm_r (tree
*, int *, void *);
164 static tree
copy_default_args_to_explicit_spec_1 (tree
, tree
);
165 static void copy_default_args_to_explicit_spec (tree
);
166 static int invalid_nontype_parm_type_p (tree
, tsubst_flags_t
);
167 static int eq_local_specializations (const void *, const void *);
168 static bool dependent_template_arg_p (tree
);
169 static bool any_template_arguments_need_structural_equality_p (tree
);
170 static bool dependent_type_p_r (tree
);
171 static tree
tsubst (tree
, tree
, tsubst_flags_t
, tree
);
172 static tree
tsubst_expr (tree
, tree
, tsubst_flags_t
, tree
, bool);
173 static tree
tsubst_copy (tree
, tree
, tsubst_flags_t
, tree
);
174 static tree
tsubst_pack_expansion (tree
, tree
, tsubst_flags_t
, tree
);
176 /* Make the current scope suitable for access checking when we are
177 processing T. T can be FUNCTION_DECL for instantiated function
178 template, or VAR_DECL for static member variable (need by
179 instantiate_decl). */
182 push_access_scope (tree t
)
184 gcc_assert (TREE_CODE (t
) == FUNCTION_DECL
185 || TREE_CODE (t
) == VAR_DECL
);
187 if (DECL_FRIEND_CONTEXT (t
))
188 push_nested_class (DECL_FRIEND_CONTEXT (t
));
189 else if (DECL_CLASS_SCOPE_P (t
))
190 push_nested_class (DECL_CONTEXT (t
));
192 push_to_top_level ();
194 if (TREE_CODE (t
) == FUNCTION_DECL
)
196 saved_access_scope
= tree_cons
197 (NULL_TREE
, current_function_decl
, saved_access_scope
);
198 current_function_decl
= t
;
202 /* Restore the scope set up by push_access_scope. T is the node we
206 pop_access_scope (tree t
)
208 if (TREE_CODE (t
) == FUNCTION_DECL
)
210 current_function_decl
= TREE_VALUE (saved_access_scope
);
211 saved_access_scope
= TREE_CHAIN (saved_access_scope
);
214 if (DECL_FRIEND_CONTEXT (t
) || DECL_CLASS_SCOPE_P (t
))
217 pop_from_top_level ();
220 /* Do any processing required when DECL (a member template
221 declaration) is finished. Returns the TEMPLATE_DECL corresponding
222 to DECL, unless it is a specialization, in which case the DECL
223 itself is returned. */
226 finish_member_template_decl (tree decl
)
228 if (decl
== error_mark_node
)
229 return error_mark_node
;
231 gcc_assert (DECL_P (decl
));
233 if (TREE_CODE (decl
) == TYPE_DECL
)
237 type
= TREE_TYPE (decl
);
238 if (IS_AGGR_TYPE (type
)
239 && CLASSTYPE_TEMPLATE_INFO (type
)
240 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type
))
242 tree tmpl
= CLASSTYPE_TI_TEMPLATE (type
);
243 check_member_template (tmpl
);
248 else if (TREE_CODE (decl
) == FIELD_DECL
)
249 error ("data member %qD cannot be a member template", decl
);
250 else if (DECL_TEMPLATE_INFO (decl
))
252 if (!DECL_TEMPLATE_SPECIALIZATION (decl
))
254 check_member_template (DECL_TI_TEMPLATE (decl
));
255 return DECL_TI_TEMPLATE (decl
);
261 error ("invalid member template declaration %qD", decl
);
263 return error_mark_node
;
266 /* Returns the template nesting level of the indicated class TYPE.
276 A<T>::B<U> has depth two, while A<T> has depth one.
277 Both A<T>::B<int> and A<int>::B<U> have depth one, if
278 they are instantiations, not specializations.
280 This function is guaranteed to return 0 if passed NULL_TREE so
281 that, for example, `template_class_depth (current_class_type)' is
285 template_class_depth (tree type
)
290 type
&& TREE_CODE (type
) != NAMESPACE_DECL
;
291 type
= (TREE_CODE (type
) == FUNCTION_DECL
)
292 ? CP_DECL_CONTEXT (type
) : TYPE_CONTEXT (type
))
294 if (TREE_CODE (type
) != FUNCTION_DECL
)
296 if (CLASSTYPE_TEMPLATE_INFO (type
)
297 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type
))
298 && uses_template_parms (CLASSTYPE_TI_ARGS (type
)))
303 if (DECL_TEMPLATE_INFO (type
)
304 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (type
))
305 && uses_template_parms (DECL_TI_ARGS (type
)))
313 /* Subroutine of maybe_begin_member_template_processing.
314 Returns true if processing DECL needs us to push template parms. */
317 inline_needs_template_parms (tree decl
)
319 if (! DECL_TEMPLATE_INFO (decl
))
322 return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl
)))
323 > (processing_template_decl
+ DECL_TEMPLATE_SPECIALIZATION (decl
)));
326 /* Subroutine of maybe_begin_member_template_processing.
327 Push the template parms in PARMS, starting from LEVELS steps into the
328 chain, and ending at the beginning, since template parms are listed
332 push_inline_template_parms_recursive (tree parmlist
, int levels
)
334 tree parms
= TREE_VALUE (parmlist
);
338 push_inline_template_parms_recursive (TREE_CHAIN (parmlist
), levels
- 1);
340 ++processing_template_decl
;
341 current_template_parms
342 = tree_cons (size_int (processing_template_decl
),
343 parms
, current_template_parms
);
344 TEMPLATE_PARMS_FOR_INLINE (current_template_parms
) = 1;
346 begin_scope (TREE_VEC_LENGTH (parms
) ? sk_template_parms
: sk_template_spec
,
348 for (i
= 0; i
< TREE_VEC_LENGTH (parms
); ++i
)
350 tree parm
= TREE_VALUE (TREE_VEC_ELT (parms
, i
));
352 if (parm
== error_mark_node
)
355 gcc_assert (DECL_P (parm
));
357 switch (TREE_CODE (parm
))
366 /* Make a CONST_DECL as is done in process_template_parm.
367 It is ugly that we recreate this here; the original
368 version built in process_template_parm is no longer
370 tree decl
= build_decl (CONST_DECL
, DECL_NAME (parm
),
372 DECL_ARTIFICIAL (decl
) = 1;
373 TREE_CONSTANT (decl
) = 1;
374 TREE_INVARIANT (decl
) = 1;
375 TREE_READONLY (decl
) = 1;
376 DECL_INITIAL (decl
) = DECL_INITIAL (parm
);
377 SET_DECL_TEMPLATE_PARM_P (decl
);
388 /* Restore the template parameter context for a member template or
389 a friend template defined in a class definition. */
392 maybe_begin_member_template_processing (tree decl
)
397 if (inline_needs_template_parms (decl
))
399 parms
= DECL_TEMPLATE_PARMS (most_general_template (decl
));
400 levels
= TMPL_PARMS_DEPTH (parms
) - processing_template_decl
;
402 if (DECL_TEMPLATE_SPECIALIZATION (decl
))
405 parms
= TREE_CHAIN (parms
);
408 push_inline_template_parms_recursive (parms
, levels
);
411 /* Remember how many levels of template parameters we pushed so that
412 we can pop them later. */
413 VEC_safe_push (int, heap
, inline_parm_levels
, levels
);
416 /* Undo the effects of maybe_begin_member_template_processing. */
419 maybe_end_member_template_processing (void)
424 if (VEC_length (int, inline_parm_levels
) == 0)
427 last
= VEC_pop (int, inline_parm_levels
);
428 for (i
= 0; i
< last
; ++i
)
430 --processing_template_decl
;
431 current_template_parms
= TREE_CHAIN (current_template_parms
);
436 /* Return a new template argument vector which contains all of ARGS,
437 but has as its innermost set of arguments the EXTRA_ARGS. */
440 add_to_template_args (tree args
, tree extra_args
)
447 extra_depth
= TMPL_ARGS_DEPTH (extra_args
);
448 new_args
= make_tree_vec (TMPL_ARGS_DEPTH (args
) + extra_depth
);
450 for (i
= 1; i
<= TMPL_ARGS_DEPTH (args
); ++i
)
451 SET_TMPL_ARGS_LEVEL (new_args
, i
, TMPL_ARGS_LEVEL (args
, i
));
453 for (j
= 1; j
<= extra_depth
; ++j
, ++i
)
454 SET_TMPL_ARGS_LEVEL (new_args
, i
, TMPL_ARGS_LEVEL (extra_args
, j
));
459 /* Like add_to_template_args, but only the outermost ARGS are added to
460 the EXTRA_ARGS. In particular, all but TMPL_ARGS_DEPTH
461 (EXTRA_ARGS) levels are added. This function is used to combine
462 the template arguments from a partial instantiation with the
463 template arguments used to attain the full instantiation from the
464 partial instantiation. */
467 add_outermost_template_args (tree args
, tree extra_args
)
471 /* If there are more levels of EXTRA_ARGS than there are ARGS,
472 something very fishy is going on. */
473 gcc_assert (TMPL_ARGS_DEPTH (args
) >= TMPL_ARGS_DEPTH (extra_args
));
475 /* If *all* the new arguments will be the EXTRA_ARGS, just return
477 if (TMPL_ARGS_DEPTH (args
) == TMPL_ARGS_DEPTH (extra_args
))
480 /* For the moment, we make ARGS look like it contains fewer levels. */
481 TREE_VEC_LENGTH (args
) -= TMPL_ARGS_DEPTH (extra_args
);
483 new_args
= add_to_template_args (args
, extra_args
);
485 /* Now, we restore ARGS to its full dimensions. */
486 TREE_VEC_LENGTH (args
) += TMPL_ARGS_DEPTH (extra_args
);
491 /* Return the N levels of innermost template arguments from the ARGS. */
494 get_innermost_template_args (tree args
, int n
)
502 /* If N is 1, just return the innermost set of template arguments. */
504 return TMPL_ARGS_LEVEL (args
, TMPL_ARGS_DEPTH (args
));
506 /* If we're not removing anything, just return the arguments we were
508 extra_levels
= TMPL_ARGS_DEPTH (args
) - n
;
509 gcc_assert (extra_levels
>= 0);
510 if (extra_levels
== 0)
513 /* Make a new set of arguments, not containing the outer arguments. */
514 new_args
= make_tree_vec (n
);
515 for (i
= 1; i
<= n
; ++i
)
516 SET_TMPL_ARGS_LEVEL (new_args
, i
,
517 TMPL_ARGS_LEVEL (args
, i
+ extra_levels
));
522 /* The inverse of get_innermost_template_args: Return all but the innermost
523 EXTRA_LEVELS levels of template arguments from the ARGS. */
526 strip_innermost_template_args (tree args
, int extra_levels
)
529 int n
= TMPL_ARGS_DEPTH (args
) - extra_levels
;
534 /* If N is 1, just return the outermost set of template arguments. */
536 return TMPL_ARGS_LEVEL (args
, 1);
538 /* If we're not removing anything, just return the arguments we were
540 gcc_assert (extra_levels
>= 0);
541 if (extra_levels
== 0)
544 /* Make a new set of arguments, not containing the inner arguments. */
545 new_args
= make_tree_vec (n
);
546 for (i
= 1; i
<= n
; ++i
)
547 SET_TMPL_ARGS_LEVEL (new_args
, i
,
548 TMPL_ARGS_LEVEL (args
, i
));
553 /* We've got a template header coming up; push to a new level for storing
557 begin_template_parm_list (void)
559 /* We use a non-tag-transparent scope here, which causes pushtag to
560 put tags in this scope, rather than in the enclosing class or
561 namespace scope. This is the right thing, since we want
562 TEMPLATE_DECLS, and not TYPE_DECLS for template classes. For a
563 global template class, push_template_decl handles putting the
564 TEMPLATE_DECL into top-level scope. For a nested template class,
567 template <class T> struct S1 {
568 template <class T> struct S2 {};
571 pushtag contains special code to call pushdecl_with_scope on the
572 TEMPLATE_DECL for S2. */
573 begin_scope (sk_template_parms
, NULL
);
574 ++processing_template_decl
;
575 ++processing_template_parmlist
;
576 note_template_header (0);
579 /* This routine is called when a specialization is declared. If it is
580 invalid to declare a specialization here, an error is reported and
581 false is returned, otherwise this routine will return true. */
584 check_specialization_scope (void)
586 tree scope
= current_scope ();
590 An explicit specialization shall be declared in the namespace of
591 which the template is a member, or, for member templates, in the
592 namespace of which the enclosing class or enclosing class
593 template is a member. An explicit specialization of a member
594 function, member class or static data member of a class template
595 shall be declared in the namespace of which the class template
597 if (scope
&& TREE_CODE (scope
) != NAMESPACE_DECL
)
599 error ("explicit specialization in non-namespace scope %qD", scope
);
605 In an explicit specialization declaration for a member of a class
606 template or a member template that appears in namespace scope,
607 the member template and some of its enclosing class templates may
608 remain unspecialized, except that the declaration shall not
609 explicitly specialize a class member template if its enclosing
610 class templates are not explicitly specialized as well. */
611 if (current_template_parms
)
613 error ("enclosing class templates are not explicitly specialized");
620 /* We've just seen template <>. */
623 begin_specialization (void)
625 begin_scope (sk_template_spec
, NULL
);
626 note_template_header (1);
627 return check_specialization_scope ();
630 /* Called at then end of processing a declaration preceded by
634 end_specialization (void)
637 reset_specialization ();
640 /* Any template <>'s that we have seen thus far are not referring to a
641 function specialization. */
644 reset_specialization (void)
646 processing_specialization
= 0;
647 template_header_count
= 0;
650 /* We've just seen a template header. If SPECIALIZATION is nonzero,
651 it was of the form template <>. */
654 note_template_header (int specialization
)
656 processing_specialization
= specialization
;
657 template_header_count
++;
660 /* We're beginning an explicit instantiation. */
663 begin_explicit_instantiation (void)
665 gcc_assert (!processing_explicit_instantiation
);
666 processing_explicit_instantiation
= true;
671 end_explicit_instantiation (void)
673 gcc_assert (processing_explicit_instantiation
);
674 processing_explicit_instantiation
= false;
677 /* An explicit specialization or partial specialization TMPL is being
678 declared. Check that the namespace in which the specialization is
679 occurring is permissible. Returns false iff it is invalid to
680 specialize TMPL in the current namespace. */
683 check_specialization_namespace (tree tmpl
)
685 tree tpl_ns
= decl_namespace_context (tmpl
);
689 An explicit specialization shall be declared in the namespace of
690 which the template is a member, or, for member templates, in the
691 namespace of which the enclosing class or enclosing class
692 template is a member. An explicit specialization of a member
693 function, member class or static data member of a class template
694 shall be declared in the namespace of which the class template is
696 if (is_associated_namespace (current_namespace
, tpl_ns
))
697 /* Same or super-using namespace. */
701 pedwarn ("specialization of %qD in different namespace", tmpl
);
702 pedwarn (" from definition of %q+#D", tmpl
);
707 /* SPEC is an explicit instantiation. Check that it is valid to
708 perform this explicit instantiation in the current namespace. */
711 check_explicit_instantiation_namespace (tree spec
)
715 /* DR 275: An explicit instantiation shall appear in an enclosing
716 namespace of its template. */
717 ns
= decl_namespace_context (spec
);
718 if (!is_ancestor (current_namespace
, ns
))
719 pedwarn ("explicit instantiation of %qD in namespace %qD "
720 "(which does not enclose namespace %qD)",
721 spec
, current_namespace
, ns
);
724 /* The TYPE is being declared. If it is a template type, that means it
725 is a partial specialization. Do appropriate error-checking. */
728 maybe_process_partial_specialization (tree type
)
732 if (type
== error_mark_node
)
733 return error_mark_node
;
735 if (TREE_CODE (type
) == BOUND_TEMPLATE_TEMPLATE_PARM
)
737 error ("name of class shadows template template parameter %qD",
739 return error_mark_node
;
742 context
= TYPE_CONTEXT (type
);
744 if (CLASS_TYPE_P (type
) && CLASSTYPE_USE_TEMPLATE (type
))
746 /* This is for ordinary explicit specialization and partial
747 specialization of a template class such as:
749 template <> class C<int>;
753 template <class T> class C<T*>;
755 Make sure that `C<int>' and `C<T*>' are implicit instantiations. */
757 if (CLASSTYPE_IMPLICIT_INSTANTIATION (type
)
758 && !COMPLETE_TYPE_P (type
))
760 check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type
));
761 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type
);
762 if (processing_template_decl
)
763 push_template_decl (TYPE_MAIN_DECL (type
));
765 else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type
))
766 error ("specialization of %qT after instantiation", type
);
768 else if (CLASS_TYPE_P (type
)
769 && !CLASSTYPE_USE_TEMPLATE (type
)
770 && CLASSTYPE_TEMPLATE_INFO (type
)
771 && context
&& CLASS_TYPE_P (context
)
772 && CLASSTYPE_TEMPLATE_INFO (context
))
774 /* This is for an explicit specialization of member class
775 template according to [temp.expl.spec/18]:
777 template <> template <class U> class C<int>::D;
779 The context `C<int>' must be an implicit instantiation.
780 Otherwise this is just a member class template declared
783 template <> class C<int> { template <class U> class D; };
784 template <> template <class U> class C<int>::D;
786 In the first case, `C<int>::D' is a specialization of `C<T>::D'
787 while in the second case, `C<int>::D' is a primary template
788 and `C<T>::D' may not exist. */
790 if (CLASSTYPE_IMPLICIT_INSTANTIATION (context
)
791 && !COMPLETE_TYPE_P (type
))
795 if (current_namespace
796 != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type
)))
798 pedwarn ("specializing %q#T in different namespace", type
);
799 pedwarn (" from definition of %q+#D",
800 CLASSTYPE_TI_TEMPLATE (type
));
803 /* Check for invalid specialization after instantiation:
805 template <> template <> class C<int>::D<int>;
806 template <> template <class U> class C<int>::D; */
808 for (t
= DECL_TEMPLATE_INSTANTIATIONS
809 (most_general_template (CLASSTYPE_TI_TEMPLATE (type
)));
810 t
; t
= TREE_CHAIN (t
))
811 if (TREE_VALUE (t
) != type
812 && TYPE_CONTEXT (TREE_VALUE (t
)) == context
)
813 error ("specialization %qT after instantiation %qT",
814 type
, TREE_VALUE (t
));
816 /* Mark TYPE as a specialization. And as a result, we only
817 have one level of template argument for the innermost
819 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type
);
820 CLASSTYPE_TI_ARGS (type
)
821 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type
));
824 else if (processing_specialization
)
826 error ("explicit specialization of non-template %qT", type
);
827 return error_mark_node
;
833 /* Returns nonzero if we can optimize the retrieval of specializations
834 for TMPL, a TEMPLATE_DECL. In particular, for such a template, we
835 do not use DECL_TEMPLATE_SPECIALIZATIONS at all. */
838 optimize_specialization_lookup_p (tree tmpl
)
840 return (DECL_FUNCTION_TEMPLATE_P (tmpl
)
841 && DECL_CLASS_SCOPE_P (tmpl
)
842 /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
844 && CLASS_TYPE_P (DECL_CONTEXT (tmpl
))
845 /* The optimized lookup depends on the fact that the
846 template arguments for the member function template apply
847 purely to the containing class, which is not true if the
848 containing class is an explicit or partial
850 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl
))
851 && !DECL_MEMBER_TEMPLATE_P (tmpl
)
852 && !DECL_CONV_FN_P (tmpl
)
853 /* It is possible to have a template that is not a member
854 template and is not a member of a template class:
856 template <typename T>
857 struct S { friend A::f(); };
859 Here, the friend function is a template, but the context does
860 not have template information. The optimized lookup relies
861 on having ARGS be the template arguments for both the class
862 and the function template. */
863 && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl
)));
866 /* Retrieve the specialization (in the sense of [temp.spec] - a
867 specialization is either an instantiation or an explicit
868 specialization) of TMPL for the given template ARGS. If there is
869 no such specialization, return NULL_TREE. The ARGS are a vector of
870 arguments, or a vector of vectors of arguments, in the case of
871 templates with more than one level of parameters.
873 If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
874 then we search for a partial specialization matching ARGS. This
875 parameter is ignored if TMPL is not a class template. */
878 retrieve_specialization (tree tmpl
, tree args
,
879 bool class_specializations_p
)
881 if (args
== error_mark_node
)
884 gcc_assert (TREE_CODE (tmpl
) == TEMPLATE_DECL
);
886 /* There should be as many levels of arguments as there are
887 levels of parameters. */
888 gcc_assert (TMPL_ARGS_DEPTH (args
)
889 == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl
)));
891 if (optimize_specialization_lookup_p (tmpl
))
894 tree class_specialization
;
895 VEC(tree
,gc
) *methods
;
899 /* The template arguments actually apply to the containing
900 class. Find the class specialization with those
902 class_template
= CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl
));
904 = retrieve_specialization (class_template
, args
,
905 /*class_specializations_p=*/false);
906 if (!class_specialization
)
908 /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
909 for the specialization. */
910 idx
= class_method_index_for_fn (class_specialization
, tmpl
);
913 /* Iterate through the methods with the indicated name, looking
914 for the one that has an instance of TMPL. */
915 methods
= CLASSTYPE_METHOD_VEC (class_specialization
);
916 for (fns
= VEC_index (tree
, methods
, idx
); fns
; fns
= OVL_NEXT (fns
))
918 tree fn
= OVL_CURRENT (fns
);
919 if (DECL_TEMPLATE_INFO (fn
) && DECL_TI_TEMPLATE (fn
) == tmpl
)
929 /* Class templates store their instantiations on the
930 DECL_TEMPLATE_INSTANTIATIONS list; other templates use the
931 DECL_TEMPLATE_SPECIALIZATIONS list. */
932 if (!class_specializations_p
933 && TREE_CODE (DECL_TEMPLATE_RESULT (tmpl
)) == TYPE_DECL
934 && TAGGED_TYPE_P (TREE_TYPE (tmpl
)))
935 sp
= &DECL_TEMPLATE_INSTANTIATIONS (tmpl
);
937 sp
= &DECL_TEMPLATE_SPECIALIZATIONS (tmpl
);
939 /* Iterate through the list until we find a matching template. */
940 while (*sp
!= NULL_TREE
)
944 if (comp_template_args (TREE_PURPOSE (spec
), args
))
946 /* Use the move-to-front heuristic to speed up future
950 *sp
= TREE_CHAIN (*sp
);
951 TREE_CHAIN (spec
) = *head
;
954 return TREE_VALUE (spec
);
956 sp
= &TREE_CHAIN (spec
);
963 /* Like retrieve_specialization, but for local declarations. */
966 retrieve_local_specialization (tree tmpl
)
968 tree spec
= (tree
) htab_find_with_hash (local_specializations
, tmpl
,
969 htab_hash_pointer (tmpl
));
970 return spec
? TREE_PURPOSE (spec
) : NULL_TREE
;
973 /* Returns nonzero iff DECL is a specialization of TMPL. */
976 is_specialization_of (tree decl
, tree tmpl
)
980 if (TREE_CODE (decl
) == FUNCTION_DECL
)
984 t
= DECL_TEMPLATE_INFO (t
) ? DECL_TI_TEMPLATE (t
) : NULL_TREE
)
990 gcc_assert (TREE_CODE (decl
) == TYPE_DECL
);
992 for (t
= TREE_TYPE (decl
);
994 t
= CLASSTYPE_USE_TEMPLATE (t
)
995 ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t
)) : NULL_TREE
)
996 if (same_type_ignoring_top_level_qualifiers_p (t
, TREE_TYPE (tmpl
)))
1003 /* Returns nonzero iff DECL is a specialization of friend declaration
1004 FRIEND according to [temp.friend]. */
1007 is_specialization_of_friend (tree decl
, tree
friend)
1009 bool need_template
= true;
1012 gcc_assert (TREE_CODE (decl
) == FUNCTION_DECL
1013 || TREE_CODE (decl
) == TYPE_DECL
);
1015 /* For [temp.friend/6] when FRIEND is an ordinary member function
1016 of a template class, we want to check if DECL is a specialization
1018 if (TREE_CODE (friend) == FUNCTION_DECL
1019 && DECL_TEMPLATE_INFO (friend)
1020 && !DECL_USE_TEMPLATE (friend))
1022 /* We want a TEMPLATE_DECL for `is_specialization_of'. */
1023 friend = DECL_TI_TEMPLATE (friend);
1024 need_template
= false;
1026 else if (TREE_CODE (friend) == TEMPLATE_DECL
1027 && !PRIMARY_TEMPLATE_P (friend))
1028 need_template
= false;
1030 /* There is nothing to do if this is not a template friend. */
1031 if (TREE_CODE (friend) != TEMPLATE_DECL
)
1034 if (is_specialization_of (decl
, friend))
1038 A member of a class template may be declared to be a friend of a
1039 non-template class. In this case, the corresponding member of
1040 every specialization of the class template is a friend of the
1041 class granting friendship.
1043 For example, given a template friend declaration
1045 template <class T> friend void A<T>::f();
1047 the member function below is considered a friend
1049 template <> struct A<int> {
1053 For this type of template friend, TEMPLATE_DEPTH below will be
1054 nonzero. To determine if DECL is a friend of FRIEND, we first
1055 check if the enclosing class is a specialization of another. */
1057 template_depth
= template_class_depth (DECL_CONTEXT (friend));
1059 && DECL_CLASS_SCOPE_P (decl
)
1060 && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl
)),
1061 CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend))))
1063 /* Next, we check the members themselves. In order to handle
1064 a few tricky cases, such as when FRIEND's are
1066 template <class T> friend void A<T>::g(T t);
1067 template <class T> template <T t> friend void A<T>::h();
1071 void A<int>::g(int);
1072 template <int> void A<int>::h();
1074 we need to figure out ARGS, the template arguments from
1075 the context of DECL. This is required for template substitution
1076 of `T' in the function parameter of `g' and template parameter
1077 of `h' in the above examples. Here ARGS corresponds to `int'. */
1079 tree context
= DECL_CONTEXT (decl
);
1080 tree args
= NULL_TREE
;
1081 int current_depth
= 0;
1083 while (current_depth
< template_depth
)
1085 if (CLASSTYPE_TEMPLATE_INFO (context
))
1087 if (current_depth
== 0)
1088 args
= TYPE_TI_ARGS (context
);
1090 args
= add_to_template_args (TYPE_TI_ARGS (context
), args
);
1093 context
= TYPE_CONTEXT (context
);
1096 if (TREE_CODE (decl
) == FUNCTION_DECL
)
1101 tree friend_args_type
;
1102 tree decl_args_type
;
1104 /* Make sure that both DECL and FRIEND are templates or
1106 is_template
= DECL_TEMPLATE_INFO (decl
)
1107 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl
));
1108 if (need_template
^ is_template
)
1110 else if (is_template
)
1112 /* If both are templates, check template parameter list. */
1114 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1116 if (!comp_template_parms
1117 (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl
)),
1121 decl_type
= TREE_TYPE (DECL_TI_TEMPLATE (decl
));
1124 decl_type
= TREE_TYPE (decl
);
1126 friend_type
= tsubst_function_type (TREE_TYPE (friend), args
,
1127 tf_none
, NULL_TREE
);
1128 if (friend_type
== error_mark_node
)
1131 /* Check if return types match. */
1132 if (!same_type_p (TREE_TYPE (decl_type
), TREE_TYPE (friend_type
)))
1135 /* Check if function parameter types match, ignoring the
1136 `this' parameter. */
1137 friend_args_type
= TYPE_ARG_TYPES (friend_type
);
1138 decl_args_type
= TYPE_ARG_TYPES (decl_type
);
1139 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend))
1140 friend_args_type
= TREE_CHAIN (friend_args_type
);
1141 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl
))
1142 decl_args_type
= TREE_CHAIN (decl_args_type
);
1144 return compparms (decl_args_type
, friend_args_type
);
1148 /* DECL is a TYPE_DECL */
1150 tree decl_type
= TREE_TYPE (decl
);
1152 /* Make sure that both DECL and FRIEND are templates or
1155 = CLASSTYPE_TEMPLATE_INFO (decl_type
)
1156 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type
));
1158 if (need_template
^ is_template
)
1160 else if (is_template
)
1163 /* If both are templates, check the name of the two
1164 TEMPLATE_DECL's first because is_friend didn't. */
1165 if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type
))
1166 != DECL_NAME (friend))
1169 /* Now check template parameter list. */
1171 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1173 return comp_template_parms
1174 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type
)),
1178 return (DECL_NAME (decl
)
1179 == DECL_NAME (friend));
1185 /* Register the specialization SPEC as a specialization of TMPL with
1186 the indicated ARGS. IS_FRIEND indicates whether the specialization
1187 is actually just a friend declaration. Returns SPEC, or an
1188 equivalent prior declaration, if available. */
1191 register_specialization (tree spec
, tree tmpl
, tree args
, bool is_friend
)
1195 gcc_assert (TREE_CODE (tmpl
) == TEMPLATE_DECL
);
1197 if (TREE_CODE (spec
) == FUNCTION_DECL
1198 && uses_template_parms (DECL_TI_ARGS (spec
)))
1199 /* This is the FUNCTION_DECL for a partial instantiation. Don't
1200 register it; we want the corresponding TEMPLATE_DECL instead.
1201 We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1202 the more obvious `uses_template_parms (spec)' to avoid problems
1203 with default function arguments. In particular, given
1204 something like this:
1206 template <class T> void f(T t1, T t = T())
1208 the default argument expression is not substituted for in an
1209 instantiation unless and until it is actually needed. */
1212 fn
= retrieve_specialization (tmpl
, args
,
1213 /*class_specializations_p=*/false);
1214 /* We can sometimes try to re-register a specialization that we've
1215 already got. In particular, regenerate_decl_from_template calls
1216 duplicate_decls which will update the specialization list. But,
1217 we'll still get called again here anyhow. It's more convenient
1218 to simply allow this than to try to prevent it. */
1221 else if (fn
&& DECL_TEMPLATE_SPECIALIZATION (spec
))
1223 if (DECL_TEMPLATE_INSTANTIATION (fn
))
1226 || DECL_EXPLICIT_INSTANTIATION (fn
))
1228 error ("specialization of %qD after instantiation",
1230 return error_mark_node
;
1235 /* This situation should occur only if the first
1236 specialization is an implicit instantiation, the
1237 second is an explicit specialization, and the
1238 implicit instantiation has not yet been used. That
1239 situation can occur if we have implicitly
1240 instantiated a member function and then specialized
1243 We can also wind up here if a friend declaration that
1244 looked like an instantiation turns out to be a
1247 template <class T> void foo(T);
1248 class S { friend void foo<>(int) };
1249 template <> void foo(int);
1251 We transform the existing DECL in place so that any
1252 pointers to it become pointers to the updated
1255 If there was a definition for the template, but not
1256 for the specialization, we want this to look as if
1257 there were no definition, and vice versa. */
1258 DECL_INITIAL (fn
) = NULL_TREE
;
1259 duplicate_decls (spec
, fn
, is_friend
);
1260 /* The call to duplicate_decls will have applied
1263 An explicit specialization of a function template
1264 is inline only if it is explicitly declared to be,
1265 and independently of whether its function template
1268 to the primary function; now copy the inline bits to
1269 the various clones. */
1270 FOR_EACH_CLONE (clone
, fn
)
1272 DECL_DECLARED_INLINE_P (clone
)
1273 = DECL_DECLARED_INLINE_P (fn
);
1277 check_specialization_namespace (fn
);
1282 else if (DECL_TEMPLATE_SPECIALIZATION (fn
))
1284 if (!duplicate_decls (spec
, fn
, is_friend
) && DECL_INITIAL (spec
))
1285 /* Dup decl failed, but this is a new definition. Set the
1286 line number so any errors match this new
1288 DECL_SOURCE_LOCATION (fn
) = DECL_SOURCE_LOCATION (spec
);
1294 /* A specialization must be declared in the same namespace as the
1295 template it is specializing. */
1296 if (DECL_TEMPLATE_SPECIALIZATION (spec
)
1297 && !check_specialization_namespace (tmpl
))
1298 DECL_CONTEXT (spec
) = FROB_CONTEXT (decl_namespace_context (tmpl
));
1300 if (!optimize_specialization_lookup_p (tmpl
))
1301 DECL_TEMPLATE_SPECIALIZATIONS (tmpl
)
1302 = tree_cons (args
, spec
, DECL_TEMPLATE_SPECIALIZATIONS (tmpl
));
1307 /* Unregister the specialization SPEC as a specialization of TMPL.
1308 Replace it with NEW_SPEC, if NEW_SPEC is non-NULL. Returns true
1309 if the SPEC was listed as a specialization of TMPL. */
1312 reregister_specialization (tree spec
, tree tmpl
, tree new_spec
)
1316 for (s
= &DECL_TEMPLATE_SPECIALIZATIONS (tmpl
);
1318 s
= &TREE_CHAIN (*s
))
1319 if (TREE_VALUE (*s
) == spec
)
1322 *s
= TREE_CHAIN (*s
);
1324 TREE_VALUE (*s
) = new_spec
;
1331 /* Compare an entry in the local specializations hash table P1 (which
1332 is really a pointer to a TREE_LIST) with P2 (which is really a
1336 eq_local_specializations (const void *p1
, const void *p2
)
1338 return TREE_VALUE ((const_tree
) p1
) == (const_tree
) p2
;
1341 /* Hash P1, an entry in the local specializations table. */
1344 hash_local_specialization (const void* p1
)
1346 return htab_hash_pointer (TREE_VALUE ((const_tree
) p1
));
1349 /* Like register_specialization, but for local declarations. We are
1350 registering SPEC, an instantiation of TMPL. */
1353 register_local_specialization (tree spec
, tree tmpl
)
1357 slot
= htab_find_slot_with_hash (local_specializations
, tmpl
,
1358 htab_hash_pointer (tmpl
), INSERT
);
1359 *slot
= build_tree_list (spec
, tmpl
);
1362 /* TYPE is a class type. Returns true if TYPE is an explicitly
1363 specialized class. */
1366 explicit_class_specialization_p (tree type
)
1368 if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type
))
1370 return !uses_template_parms (CLASSTYPE_TI_ARGS (type
));
1373 /* Print the list of candidate FNS in an error message. */
1376 print_candidates (tree fns
)
1380 const char *str
= "candidates are:";
1382 for (fn
= fns
; fn
!= NULL_TREE
; fn
= TREE_CHAIN (fn
))
1386 for (f
= TREE_VALUE (fn
); f
; f
= OVL_NEXT (f
))
1387 error ("%s %+#D", str
, OVL_CURRENT (f
));
1392 /* Returns the template (one of the functions given by TEMPLATE_ID)
1393 which can be specialized to match the indicated DECL with the
1394 explicit template args given in TEMPLATE_ID. The DECL may be
1395 NULL_TREE if none is available. In that case, the functions in
1396 TEMPLATE_ID are non-members.
1398 If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1399 specialization of a member template.
1401 The TEMPLATE_COUNT is the number of references to qualifying
1402 template classes that appeared in the name of the function. See
1403 check_explicit_specialization for a more accurate description.
1405 TSK indicates what kind of template declaration (if any) is being
1406 declared. TSK_TEMPLATE indicates that the declaration given by
1407 DECL, though a FUNCTION_DECL, has template parameters, and is
1408 therefore a template function.
1410 The template args (those explicitly specified and those deduced)
1411 are output in a newly created vector *TARGS_OUT.
1413 If it is impossible to determine the result, an error message is
1414 issued. The error_mark_node is returned to indicate failure. */
1417 determine_specialization (tree template_id
,
1420 int need_member_template
,
1426 tree explicit_targs
;
1427 tree candidates
= NULL_TREE
;
1428 /* A TREE_LIST of templates of which DECL may be a specialization.
1429 The TREE_VALUE of each node is a TEMPLATE_DECL. The
1430 corresponding TREE_PURPOSE is the set of template arguments that,
1431 when used to instantiate the template, would produce a function
1432 with the signature of DECL. */
1433 tree templates
= NULL_TREE
;
1435 struct cp_binding_level
*b
;
1437 *targs_out
= NULL_TREE
;
1439 if (template_id
== error_mark_node
|| decl
== error_mark_node
)
1440 return error_mark_node
;
1442 fns
= TREE_OPERAND (template_id
, 0);
1443 explicit_targs
= TREE_OPERAND (template_id
, 1);
1445 if (fns
== error_mark_node
)
1446 return error_mark_node
;
1448 /* Check for baselinks. */
1449 if (BASELINK_P (fns
))
1450 fns
= BASELINK_FUNCTIONS (fns
);
1452 if (!is_overloaded_fn (fns
))
1454 error ("%qD is not a function template", fns
);
1455 return error_mark_node
;
1458 /* Count the number of template headers specified for this
1461 for (b
= current_binding_level
;
1462 b
->kind
== sk_template_parms
;
1466 for (; fns
; fns
= OVL_NEXT (fns
))
1468 tree fn
= OVL_CURRENT (fns
);
1470 if (TREE_CODE (fn
) == TEMPLATE_DECL
)
1472 tree decl_arg_types
;
1475 /* In case of explicit specialization, we need to check if
1476 the number of template headers appearing in the specialization
1477 is correct. This is usually done in check_explicit_specialization,
1478 but the check done there cannot be exhaustive when specializing
1479 member functions. Consider the following code:
1481 template <> void A<int>::f(int);
1482 template <> template <> void A<int>::f(int);
1484 Assuming that A<int> is not itself an explicit specialization
1485 already, the first line specializes "f" which is a non-template
1486 member function, whilst the second line specializes "f" which
1487 is a template member function. So both lines are syntactically
1488 correct, and check_explicit_specialization does not reject
1491 Here, we can do better, as we are matching the specialization
1492 against the declarations. We count the number of template
1493 headers, and we check if they match TEMPLATE_COUNT + 1
1494 (TEMPLATE_COUNT is the number of qualifying template classes,
1495 plus there must be another header for the member template
1498 Notice that if header_count is zero, this is not a
1499 specialization but rather a template instantiation, so there
1500 is no check we can perform here. */
1501 if (header_count
&& header_count
!= template_count
+ 1)
1504 /* Check that the number of template arguments at the
1505 innermost level for DECL is the same as for FN. */
1506 if (current_binding_level
->kind
== sk_template_parms
1507 && !current_binding_level
->explicit_spec_p
1508 && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn
))
1509 != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1510 (current_template_parms
))))
1513 /* DECL might be a specialization of FN. */
1514 decl_arg_types
= TYPE_ARG_TYPES (TREE_TYPE (decl
));
1515 fn_arg_types
= TYPE_ARG_TYPES (TREE_TYPE (fn
));
1517 /* For a non-static member function, we need to make sure
1518 that the const qualification is the same. Since
1519 get_bindings does not try to merge the "this" parameter,
1520 we must do the comparison explicitly. */
1521 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn
)
1522 && !same_type_p (TREE_VALUE (fn_arg_types
),
1523 TREE_VALUE (decl_arg_types
)))
1526 /* Skip the "this" parameter and, for constructors of
1527 classes with virtual bases, the VTT parameter. A
1528 full specialization of a constructor will have a VTT
1529 parameter, but a template never will. */
1531 = skip_artificial_parms_for (decl
, decl_arg_types
);
1533 = skip_artificial_parms_for (fn
, fn_arg_types
);
1535 /* Check that the number of function parameters matches.
1537 template <class T> void f(int i = 0);
1538 template <> void f<int>();
1539 The specialization f<int> is invalid but is not caught
1540 by get_bindings below. */
1541 if (list_length (fn_arg_types
) != list_length (decl_arg_types
))
1544 /* Function templates cannot be specializations; there are
1545 no partial specializations of functions. Therefore, if
1546 the type of DECL does not match FN, there is no
1548 if (tsk
== tsk_template
)
1550 if (compparms (fn_arg_types
, decl_arg_types
))
1551 candidates
= tree_cons (NULL_TREE
, fn
, candidates
);
1555 /* See whether this function might be a specialization of this
1557 targs
= get_bindings (fn
, decl
, explicit_targs
, /*check_ret=*/true);
1560 /* We cannot deduce template arguments that when used to
1561 specialize TMPL will produce DECL. */
1564 /* Save this template, and the arguments deduced. */
1565 templates
= tree_cons (targs
, fn
, templates
);
1567 else if (need_member_template
)
1568 /* FN is an ordinary member function, and we need a
1569 specialization of a member template. */
1571 else if (TREE_CODE (fn
) != FUNCTION_DECL
)
1572 /* We can get IDENTIFIER_NODEs here in certain erroneous
1575 else if (!DECL_FUNCTION_MEMBER_P (fn
))
1576 /* This is just an ordinary non-member function. Nothing can
1577 be a specialization of that. */
1579 else if (DECL_ARTIFICIAL (fn
))
1580 /* Cannot specialize functions that are created implicitly. */
1584 tree decl_arg_types
;
1586 /* This is an ordinary member function. However, since
1587 we're here, we can assume it's enclosing class is a
1588 template class. For example,
1590 template <typename T> struct S { void f(); };
1591 template <> void S<int>::f() {}
1593 Here, S<int>::f is a non-template, but S<int> is a
1594 template class. If FN has the same type as DECL, we
1595 might be in business. */
1597 if (!DECL_TEMPLATE_INFO (fn
))
1598 /* Its enclosing class is an explicit specialization
1599 of a template class. This is not a candidate. */
1602 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl
)),
1603 TREE_TYPE (TREE_TYPE (fn
))))
1604 /* The return types differ. */
1607 /* Adjust the type of DECL in case FN is a static member. */
1608 decl_arg_types
= TYPE_ARG_TYPES (TREE_TYPE (decl
));
1609 if (DECL_STATIC_FUNCTION_P (fn
)
1610 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl
))
1611 decl_arg_types
= TREE_CHAIN (decl_arg_types
);
1613 if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn
)),
1616 candidates
= tree_cons (NULL_TREE
, fn
, candidates
);
1620 if (templates
&& TREE_CHAIN (templates
))
1626 It is possible for a specialization with a given function
1627 signature to be instantiated from more than one function
1628 template. In such cases, explicit specification of the
1629 template arguments must be used to uniquely identify the
1630 function template specialization being specialized.
1632 Note that here, there's no suggestion that we're supposed to
1633 determine which of the candidate templates is most
1634 specialized. However, we, also have:
1638 Partial ordering of overloaded function template
1639 declarations is used in the following contexts to select
1640 the function template to which a function template
1641 specialization refers:
1643 -- when an explicit specialization refers to a function
1646 So, we do use the partial ordering rules, at least for now.
1647 This extension can only serve to make invalid programs valid,
1648 so it's safe. And, there is strong anecdotal evidence that
1649 the committee intended the partial ordering rules to apply;
1650 the EDG front end has that behavior, and John Spicer claims
1651 that the committee simply forgot to delete the wording in
1652 [temp.expl.spec]. */
1653 tree tmpl
= most_specialized_instantiation (templates
);
1654 if (tmpl
!= error_mark_node
)
1657 TREE_CHAIN (templates
) = NULL_TREE
;
1661 if (templates
== NULL_TREE
&& candidates
== NULL_TREE
)
1663 error ("template-id %qD for %q+D does not match any template "
1664 "declaration", template_id
, decl
);
1665 return error_mark_node
;
1667 else if ((templates
&& TREE_CHAIN (templates
))
1668 || (candidates
&& TREE_CHAIN (candidates
))
1669 || (templates
&& candidates
))
1671 error ("ambiguous template specialization %qD for %q+D",
1673 chainon (candidates
, templates
);
1674 print_candidates (candidates
);
1675 return error_mark_node
;
1678 /* We have one, and exactly one, match. */
1681 tree fn
= TREE_VALUE (candidates
);
1682 /* DECL is a re-declaration of a template function. */
1683 if (TREE_CODE (fn
) == TEMPLATE_DECL
)
1685 /* It was a specialization of an ordinary member function in a
1687 *targs_out
= copy_node (DECL_TI_ARGS (fn
));
1688 return DECL_TI_TEMPLATE (fn
);
1691 /* It was a specialization of a template. */
1692 targs
= DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates
)));
1693 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs
))
1695 *targs_out
= copy_node (targs
);
1696 SET_TMPL_ARGS_LEVEL (*targs_out
,
1697 TMPL_ARGS_DEPTH (*targs_out
),
1698 TREE_PURPOSE (templates
));
1701 *targs_out
= TREE_PURPOSE (templates
);
1702 return TREE_VALUE (templates
);
1705 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1706 but with the default argument values filled in from those in the
1710 copy_default_args_to_explicit_spec_1 (tree spec_types
,
1713 tree new_spec_types
;
1718 if (spec_types
== void_list_node
)
1719 return void_list_node
;
1721 /* Substitute into the rest of the list. */
1723 copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types
),
1724 TREE_CHAIN (tmpl_types
));
1726 /* Add the default argument for this parameter. */
1727 return hash_tree_cons (TREE_PURPOSE (tmpl_types
),
1728 TREE_VALUE (spec_types
),
1732 /* DECL is an explicit specialization. Replicate default arguments
1733 from the template it specializes. (That way, code like:
1735 template <class T> void f(T = 3);
1736 template <> void f(double);
1739 works, as required.) An alternative approach would be to look up
1740 the correct default arguments at the call-site, but this approach
1741 is consistent with how implicit instantiations are handled. */
1744 copy_default_args_to_explicit_spec (tree decl
)
1749 tree new_spec_types
;
1753 tree object_type
= NULL_TREE
;
1754 tree in_charge
= NULL_TREE
;
1755 tree vtt
= NULL_TREE
;
1757 /* See if there's anything we need to do. */
1758 tmpl
= DECL_TI_TEMPLATE (decl
);
1759 tmpl_types
= TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl
)));
1760 for (t
= tmpl_types
; t
; t
= TREE_CHAIN (t
))
1761 if (TREE_PURPOSE (t
))
1766 old_type
= TREE_TYPE (decl
);
1767 spec_types
= TYPE_ARG_TYPES (old_type
);
1769 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl
))
1771 /* Remove the this pointer, but remember the object's type for
1773 object_type
= TREE_TYPE (TREE_VALUE (spec_types
));
1774 spec_types
= TREE_CHAIN (spec_types
);
1775 tmpl_types
= TREE_CHAIN (tmpl_types
);
1777 if (DECL_HAS_IN_CHARGE_PARM_P (decl
))
1779 /* DECL may contain more parameters than TMPL due to the extra
1780 in-charge parameter in constructors and destructors. */
1781 in_charge
= spec_types
;
1782 spec_types
= TREE_CHAIN (spec_types
);
1784 if (DECL_HAS_VTT_PARM_P (decl
))
1787 spec_types
= TREE_CHAIN (spec_types
);
1791 /* Compute the merged default arguments. */
1793 copy_default_args_to_explicit_spec_1 (spec_types
, tmpl_types
);
1795 /* Compute the new FUNCTION_TYPE. */
1799 new_spec_types
= hash_tree_cons (TREE_PURPOSE (vtt
),
1804 /* Put the in-charge parameter back. */
1805 new_spec_types
= hash_tree_cons (TREE_PURPOSE (in_charge
),
1806 TREE_VALUE (in_charge
),
1809 new_type
= build_method_type_directly (object_type
,
1810 TREE_TYPE (old_type
),
1814 new_type
= build_function_type (TREE_TYPE (old_type
),
1816 new_type
= cp_build_type_attribute_variant (new_type
,
1817 TYPE_ATTRIBUTES (old_type
));
1818 new_type
= build_exception_variant (new_type
,
1819 TYPE_RAISES_EXCEPTIONS (old_type
));
1820 TREE_TYPE (decl
) = new_type
;
1823 /* Check to see if the function just declared, as indicated in
1824 DECLARATOR, and in DECL, is a specialization of a function
1825 template. We may also discover that the declaration is an explicit
1826 instantiation at this point.
1828 Returns DECL, or an equivalent declaration that should be used
1829 instead if all goes well. Issues an error message if something is
1830 amiss. Returns error_mark_node if the error is not easily
1833 FLAGS is a bitmask consisting of the following flags:
1835 2: The function has a definition.
1836 4: The function is a friend.
1838 The TEMPLATE_COUNT is the number of references to qualifying
1839 template classes that appeared in the name of the function. For
1842 template <class T> struct S { void f(); };
1845 the TEMPLATE_COUNT would be 1. However, explicitly specialized
1846 classes are not counted in the TEMPLATE_COUNT, so that in
1848 template <class T> struct S {};
1849 template <> struct S<int> { void f(); }
1850 template <> void S<int>::f();
1852 the TEMPLATE_COUNT would be 0. (Note that this declaration is
1853 invalid; there should be no template <>.)
1855 If the function is a specialization, it is marked as such via
1856 DECL_TEMPLATE_SPECIALIZATION. Furthermore, its DECL_TEMPLATE_INFO
1857 is set up correctly, and it is added to the list of specializations
1858 for that template. */
1861 check_explicit_specialization (tree declarator
,
1866 int have_def
= flags
& 2;
1867 int is_friend
= flags
& 4;
1868 int specialization
= 0;
1869 int explicit_instantiation
= 0;
1870 int member_specialization
= 0;
1871 tree ctype
= DECL_CLASS_CONTEXT (decl
);
1872 tree dname
= DECL_NAME (decl
);
1877 if (!processing_specialization
)
1880 tsk
= tsk_excessive_parms
;
1883 tsk
= current_tmpl_spec_kind (template_count
);
1888 if (processing_specialization
)
1891 SET_DECL_TEMPLATE_SPECIALIZATION (decl
);
1893 else if (TREE_CODE (declarator
) == TEMPLATE_ID_EXPR
)
1896 /* This could be something like:
1898 template <class T> void f(T);
1899 class S { friend void f<>(int); } */
1903 /* This case handles bogus declarations like template <>
1904 template <class T> void f<int>(); */
1906 error ("template-id %qD in declaration of primary template",
1913 case tsk_invalid_member_spec
:
1914 /* The error has already been reported in
1915 check_specialization_scope. */
1916 return error_mark_node
;
1918 case tsk_invalid_expl_inst
:
1919 error ("template parameter list used in explicit instantiation");
1925 error ("definition provided for explicit instantiation");
1927 explicit_instantiation
= 1;
1930 case tsk_excessive_parms
:
1931 case tsk_insufficient_parms
:
1932 if (tsk
== tsk_excessive_parms
)
1933 error ("too many template parameter lists in declaration of %qD",
1935 else if (template_header_count
)
1936 error("too few template parameter lists in declaration of %qD", decl
);
1938 error("explicit specialization of %qD must be introduced by "
1939 "%<template <>%>", decl
);
1943 SET_DECL_TEMPLATE_SPECIALIZATION (decl
);
1945 member_specialization
= 1;
1951 if (TREE_CODE (declarator
) == TEMPLATE_ID_EXPR
)
1953 /* This case handles bogus declarations like template <>
1954 template <class T> void f<int>(); */
1956 if (uses_template_parms (declarator
))
1957 error ("function template partial specialization %qD "
1958 "is not allowed", declarator
);
1960 error ("template-id %qD in declaration of primary template",
1965 if (ctype
&& CLASSTYPE_TEMPLATE_INSTANTIATION (ctype
))
1966 /* This is a specialization of a member template, without
1967 specialization the containing class. Something like:
1969 template <class T> struct S {
1970 template <class U> void f (U);
1972 template <> template <class U> void S<int>::f(U) {}
1974 That's a specialization -- but of the entire template. */
1982 if (specialization
|| member_specialization
)
1984 tree t
= TYPE_ARG_TYPES (TREE_TYPE (decl
));
1985 for (; t
; t
= TREE_CHAIN (t
))
1986 if (TREE_PURPOSE (t
))
1989 ("default argument specified in explicit specialization");
1994 if (specialization
|| member_specialization
|| explicit_instantiation
)
1996 tree tmpl
= NULL_TREE
;
1997 tree targs
= NULL_TREE
;
1999 /* Make sure that the declarator is a TEMPLATE_ID_EXPR. */
2000 if (TREE_CODE (declarator
) != TEMPLATE_ID_EXPR
)
2004 gcc_assert (TREE_CODE (declarator
) == IDENTIFIER_NODE
);
2009 /* If there is no class context, the explicit instantiation
2010 must be at namespace scope. */
2011 gcc_assert (DECL_NAMESPACE_SCOPE_P (decl
));
2013 /* Find the namespace binding, using the declaration
2015 fns
= lookup_qualified_name (CP_DECL_CONTEXT (decl
), dname
,
2017 if (fns
== error_mark_node
|| !is_overloaded_fn (fns
))
2019 error ("%qD is not a template function", dname
);
2020 fns
= error_mark_node
;
2024 tree fn
= OVL_CURRENT (fns
);
2025 if (!is_associated_namespace (CP_DECL_CONTEXT (decl
),
2026 CP_DECL_CONTEXT (fn
)))
2027 error ("%qD is not declared in %qD",
2028 decl
, current_namespace
);
2032 declarator
= lookup_template_function (fns
, NULL_TREE
);
2035 if (declarator
== error_mark_node
)
2036 return error_mark_node
;
2038 if (ctype
!= NULL_TREE
&& TYPE_BEING_DEFINED (ctype
))
2040 if (!explicit_instantiation
)
2041 /* A specialization in class scope. This is invalid,
2042 but the error will already have been flagged by
2043 check_specialization_scope. */
2044 return error_mark_node
;
2047 /* It's not valid to write an explicit instantiation in
2050 class C { template void f(); }
2052 This case is caught by the parser. However, on
2055 template class C { void f(); };
2057 (which is invalid) we can get here. The error will be
2064 else if (ctype
!= NULL_TREE
2065 && (TREE_CODE (TREE_OPERAND (declarator
, 0)) ==
2068 /* Find the list of functions in ctype that have the same
2069 name as the declared function. */
2070 tree name
= TREE_OPERAND (declarator
, 0);
2071 tree fns
= NULL_TREE
;
2074 if (constructor_name_p (name
, ctype
))
2076 int is_constructor
= DECL_CONSTRUCTOR_P (decl
);
2078 if (is_constructor
? !TYPE_HAS_CONSTRUCTOR (ctype
)
2079 : !CLASSTYPE_DESTRUCTORS (ctype
))
2081 /* From [temp.expl.spec]:
2083 If such an explicit specialization for the member
2084 of a class template names an implicitly-declared
2085 special member function (clause _special_), the
2086 program is ill-formed.
2088 Similar language is found in [temp.explicit]. */
2089 error ("specialization of implicitly-declared special member function");
2090 return error_mark_node
;
2093 name
= is_constructor
? ctor_identifier
: dtor_identifier
;
2096 if (!DECL_CONV_FN_P (decl
))
2098 idx
= lookup_fnfields_1 (ctype
, name
);
2100 fns
= VEC_index (tree
, CLASSTYPE_METHOD_VEC (ctype
), idx
);
2104 VEC(tree
,gc
) *methods
;
2107 /* For a type-conversion operator, we cannot do a
2108 name-based lookup. We might be looking for `operator
2109 int' which will be a specialization of `operator T'.
2110 So, we find *all* the conversion operators, and then
2111 select from them. */
2114 methods
= CLASSTYPE_METHOD_VEC (ctype
);
2116 for (idx
= CLASSTYPE_FIRST_CONVERSION_SLOT
;
2117 VEC_iterate (tree
, methods
, idx
, ovl
);
2120 if (!DECL_CONV_FN_P (OVL_CURRENT (ovl
)))
2121 /* There are no more conversion functions. */
2124 /* Glue all these conversion functions together
2125 with those we already have. */
2126 for (; ovl
; ovl
= OVL_NEXT (ovl
))
2127 fns
= ovl_cons (OVL_CURRENT (ovl
), fns
);
2131 if (fns
== NULL_TREE
)
2133 error ("no member function %qD declared in %qT", name
, ctype
);
2134 return error_mark_node
;
2137 TREE_OPERAND (declarator
, 0) = fns
;
2140 /* Figure out what exactly is being specialized at this point.
2141 Note that for an explicit instantiation, even one for a
2142 member function, we cannot tell apriori whether the
2143 instantiation is for a member template, or just a member
2144 function of a template class. Even if a member template is
2145 being instantiated, the member template arguments may be
2146 elided if they can be deduced from the rest of the
2148 tmpl
= determine_specialization (declarator
, decl
,
2150 member_specialization
,
2154 if (!tmpl
|| tmpl
== error_mark_node
)
2155 /* We couldn't figure out what this declaration was
2157 return error_mark_node
;
2160 tree gen_tmpl
= most_general_template (tmpl
);
2162 if (explicit_instantiation
)
2164 /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2165 is done by do_decl_instantiation later. */
2167 int arg_depth
= TMPL_ARGS_DEPTH (targs
);
2168 int parm_depth
= TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl
));
2170 if (arg_depth
> parm_depth
)
2172 /* If TMPL is not the most general template (for
2173 example, if TMPL is a friend template that is
2174 injected into namespace scope), then there will
2175 be too many levels of TARGS. Remove some of them
2180 new_targs
= make_tree_vec (parm_depth
);
2181 for (i
= arg_depth
- parm_depth
; i
< arg_depth
; ++i
)
2182 TREE_VEC_ELT (new_targs
, i
- (arg_depth
- parm_depth
))
2183 = TREE_VEC_ELT (targs
, i
);
2187 return instantiate_template (tmpl
, targs
, tf_error
);
2190 /* If we thought that the DECL was a member function, but it
2191 turns out to be specializing a static member function,
2192 make DECL a static member function as well. */
2193 if (DECL_STATIC_FUNCTION_P (tmpl
)
2194 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl
))
2195 revert_static_member_fn (decl
);
2197 /* If this is a specialization of a member template of a
2198 template class, we want to return the TEMPLATE_DECL, not
2199 the specialization of it. */
2200 if (tsk
== tsk_template
)
2202 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl
);
2203 DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl
)) = NULL_TREE
;
2206 DECL_SOURCE_LOCATION (tmpl
) = DECL_SOURCE_LOCATION (decl
);
2207 DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl
))
2208 = DECL_SOURCE_LOCATION (decl
);
2209 /* We want to use the argument list specified in the
2210 definition, not in the original declaration. */
2211 DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (tmpl
))
2212 = DECL_ARGUMENTS (decl
);
2217 /* Set up the DECL_TEMPLATE_INFO for DECL. */
2218 DECL_TEMPLATE_INFO (decl
) = tree_cons (tmpl
, targs
, NULL_TREE
);
2220 /* Inherit default function arguments from the template
2221 DECL is specializing. */
2222 copy_default_args_to_explicit_spec (decl
);
2224 /* This specialization has the same protection as the
2225 template it specializes. */
2226 TREE_PRIVATE (decl
) = TREE_PRIVATE (gen_tmpl
);
2227 TREE_PROTECTED (decl
) = TREE_PROTECTED (gen_tmpl
);
2229 /* 7.1.1-1 [dcl.stc]
2231 A storage-class-specifier shall not be specified in an
2232 explicit specialization...
2234 The parser rejects these, so unless action is taken here,
2235 explicit function specializations will always appear with
2238 The action recommended by the C++ CWG in response to C++
2239 defect report 605 is to make the storage class and linkage
2240 of the explicit specialization match the templated function:
2242 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2244 if (tsk
== tsk_expl_spec
&& DECL_FUNCTION_TEMPLATE_P (gen_tmpl
))
2246 tree tmpl_func
= DECL_TEMPLATE_RESULT (gen_tmpl
);
2247 gcc_assert (TREE_CODE (tmpl_func
) == FUNCTION_DECL
);
2249 /* This specialization has the same linkage and visibility as
2250 the function template it specializes. */
2251 TREE_PUBLIC (decl
) = TREE_PUBLIC (tmpl_func
);
2252 if (! TREE_PUBLIC (decl
))
2254 DECL_INTERFACE_KNOWN (decl
) = 1;
2255 DECL_NOT_REALLY_EXTERN (decl
) = 1;
2257 DECL_THIS_STATIC (decl
) = DECL_THIS_STATIC (tmpl_func
);
2258 if (DECL_VISIBILITY_SPECIFIED (tmpl_func
))
2260 DECL_VISIBILITY_SPECIFIED (decl
) = 1;
2261 DECL_VISIBILITY (decl
) = DECL_VISIBILITY (tmpl_func
);
2265 /* If DECL is a friend declaration, declared using an
2266 unqualified name, the namespace associated with DECL may
2267 have been set incorrectly. For example, in:
2269 template <typename T> void f(T);
2271 struct S { friend void f<int>(int); }
2274 we will have set the DECL_CONTEXT for the friend
2275 declaration to N, rather than to the global namespace. */
2276 if (DECL_NAMESPACE_SCOPE_P (decl
))
2277 DECL_CONTEXT (decl
) = DECL_CONTEXT (tmpl
);
2279 if (is_friend
&& !have_def
)
2280 /* This is not really a declaration of a specialization.
2281 It's just the name of an instantiation. But, it's not
2282 a request for an instantiation, either. */
2283 SET_DECL_IMPLICIT_INSTANTIATION (decl
);
2284 else if (DECL_CONSTRUCTOR_P (decl
) || DECL_DESTRUCTOR_P (decl
))
2285 /* This is indeed a specialization. In case of constructors
2286 and destructors, we need in-charge and not-in-charge
2287 versions in V3 ABI. */
2288 clone_function_decl (decl
, /*update_method_vec_p=*/0);
2290 /* Register this specialization so that we can find it
2292 decl
= register_specialization (decl
, gen_tmpl
, targs
, is_friend
);
2299 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2300 parameters. These are represented in the same format used for
2301 DECL_TEMPLATE_PARMS. */
2304 comp_template_parms (const_tree parms1
, const_tree parms2
)
2309 if (parms1
== parms2
)
2312 for (p1
= parms1
, p2
= parms2
;
2313 p1
!= NULL_TREE
&& p2
!= NULL_TREE
;
2314 p1
= TREE_CHAIN (p1
), p2
= TREE_CHAIN (p2
))
2316 tree t1
= TREE_VALUE (p1
);
2317 tree t2
= TREE_VALUE (p2
);
2320 gcc_assert (TREE_CODE (t1
) == TREE_VEC
);
2321 gcc_assert (TREE_CODE (t2
) == TREE_VEC
);
2323 if (TREE_VEC_LENGTH (t1
) != TREE_VEC_LENGTH (t2
))
2326 for (i
= 0; i
< TREE_VEC_LENGTH (t2
); ++i
)
2328 tree parm1
= TREE_VALUE (TREE_VEC_ELT (t1
, i
));
2329 tree parm2
= TREE_VALUE (TREE_VEC_ELT (t2
, i
));
2331 /* If either of the template parameters are invalid, assume
2332 they match for the sake of error recovery. */
2333 if (parm1
== error_mark_node
|| parm2
== error_mark_node
)
2336 if (TREE_CODE (parm1
) != TREE_CODE (parm2
))
2339 if (TREE_CODE (parm1
) == TEMPLATE_TYPE_PARM
2340 && (TEMPLATE_TYPE_PARAMETER_PACK (parm1
)
2341 == TEMPLATE_TYPE_PARAMETER_PACK (parm2
)))
2343 else if (!same_type_p (TREE_TYPE (parm1
), TREE_TYPE (parm2
)))
2348 if ((p1
!= NULL_TREE
) != (p2
!= NULL_TREE
))
2349 /* One set of parameters has more parameters lists than the
2356 /* Determine whether PARM is a parameter pack. */
2358 template_parameter_pack_p (const_tree parm
)
2360 /* Determine if we have a non-type template parameter pack. */
2361 if (TREE_CODE (parm
) == PARM_DECL
)
2362 return (DECL_TEMPLATE_PARM_P (parm
)
2363 && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm
)));
2365 /* If this is a list of template parameters, we could get a
2366 TYPE_DECL or a TEMPLATE_DECL. */
2367 if (TREE_CODE (parm
) == TYPE_DECL
|| TREE_CODE (parm
) == TEMPLATE_DECL
)
2368 parm
= TREE_TYPE (parm
);
2370 return ((TREE_CODE (parm
) == TEMPLATE_TYPE_PARM
2371 || TREE_CODE (parm
) == TEMPLATE_TEMPLATE_PARM
)
2372 && TEMPLATE_TYPE_PARAMETER_PACK (parm
));
2375 /* Determine whether ARGS describes a variadic template args list,
2376 i.e., one that is terminated by a template argument pack. */
2378 template_args_variadic_p (tree args
)
2383 if (args
== NULL_TREE
)
2386 args
= INNERMOST_TEMPLATE_ARGS (args
);
2387 nargs
= TREE_VEC_LENGTH (args
);
2392 last_parm
= TREE_VEC_ELT (args
, nargs
- 1);
2394 return ARGUMENT_PACK_P (last_parm
);
2397 /* Generate a new name for the parameter pack name NAME (an
2398 IDENTIFIER_NODE) that incorporates its */
2400 make_ith_pack_parameter_name (tree name
, int i
)
2402 /* Munge the name to include the parameter index. */
2406 sprintf(numbuf
, "%i", i
);
2407 newname
= (char*)alloca (IDENTIFIER_LENGTH (name
) + strlen(numbuf
) + 2);
2408 sprintf(newname
, "%s#%i", IDENTIFIER_POINTER (name
), i
);
2409 return get_identifier (newname
);
2412 /* Structure used to track the progress of find_parameter_pack_r. */
2413 struct find_parameter_pack_data
2415 tree
* parameter_packs
;
2416 struct pointer_set_t
*visited
;
2419 /* Identifiers all of the argument packs that occur in a template
2420 argument and appends them to the TREE_LIST inside DATA, which is a
2421 find_parameter_pack_Data structure. This is a subroutine of
2422 make_pack_expansion and uses_parameter_packs. */
2424 find_parameter_packs_r (tree
*tp
, int *walk_subtrees
, void* data
)
2427 struct find_parameter_pack_data
* ppd
=
2428 (struct find_parameter_pack_data
*)data
;
2432 tree context
= TYPE_CONTEXT (t
);
2433 cp_walk_tree (&context
, &find_parameter_packs_r
, ppd
, ppd
->visited
);
2436 /* This switch statement will return immediately if we don't find a
2438 switch (TREE_CODE (t
))
2440 case TEMPLATE_PARM_INDEX
:
2441 if (TEMPLATE_PARM_PARAMETER_PACK (t
))
2445 case BOUND_TEMPLATE_TEMPLATE_PARM
:
2446 /* Check the template arguments. */
2447 cp_walk_tree (&TYPE_TI_ARGS (t
), &find_parameter_packs_r
, ppd
,
2450 /* Dig out the underlying TEMPLATE_TEMPLATE_PARM. */
2451 t
= TYPE_TI_TEMPLATE (t
);
2452 if (DECL_P (t
) && TREE_TYPE (t
))
2458 case TEMPLATE_TYPE_PARM
:
2459 case TEMPLATE_TEMPLATE_PARM
:
2460 if (TEMPLATE_TYPE_PARAMETER_PACK (t
))
2465 if (FUNCTION_PARAMETER_PACK_P (t
))
2467 /* We don't want to walk into the type of a PARM_DECL,
2468 because we don't want to see the type parameter pack.*/
2475 if (TYPE_PTRMEMFUNC_P (t
))
2481 if (TYPE_TEMPLATE_INFO (t
))
2483 tree args
= TREE_VALUE (TYPE_TEMPLATE_INFO (t
));
2484 cp_walk_tree (&args
, &find_parameter_packs_r
, ppd
, ppd
->visited
);
2491 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t
)
2492 && TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (t
)))
2498 case TYPE_PACK_EXPANSION
:
2499 case EXPR_PACK_EXPANSION
:
2504 cp_walk_tree (&TYPE_MAX_VALUE (t
), &find_parameter_packs_r
,
2513 /* Add this parameter pack to the list. */
2514 *ppd
->parameter_packs
= tree_cons (NULL_TREE
, t
, *ppd
->parameter_packs
);
2519 /* Determines if the expression or type T uses any parameter packs. */
2521 uses_parameter_packs (tree t
)
2523 tree parameter_packs
= NULL_TREE
;
2524 struct find_parameter_pack_data ppd
;
2525 ppd
.parameter_packs
= ¶meter_packs
;
2526 ppd
.visited
= pointer_set_create ();
2527 cp_walk_tree (&t
, &find_parameter_packs_r
, &ppd
, ppd
.visited
);
2528 pointer_set_destroy (ppd
.visited
);
2529 return parameter_packs
!= NULL_TREE
;
2532 /* Turn ARG, which may be an expression, type, or a TREE_LIST
2533 representation a base-class initializer into a parameter pack
2534 expansion. If all goes well, the resulting node will be an
2535 EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
2538 make_pack_expansion (tree arg
)
2541 tree parameter_packs
= NULL_TREE
;
2542 bool for_types
= false;
2543 struct find_parameter_pack_data ppd
;
2545 if (!arg
|| arg
== error_mark_node
)
2548 if (TREE_CODE (arg
) == TREE_LIST
)
2550 /* The only time we will see a TREE_LIST here is for a base
2551 class initializer. In this case, the TREE_PURPOSE will be a
2552 _TYPE node (representing the base class expansion we're
2553 initializing) and the TREE_VALUE will be a TREE_LIST
2554 containing the initialization arguments.
2556 The resulting expansion looks somewhat different from most
2557 expansions. Rather than returning just one _EXPANSION, we
2558 return a TREE_LIST whose TREE_PURPOSE is a
2559 TYPE_PACK_EXPANSION containing the bases that will be
2560 initialized. The TREE_VALUE will be identical to the
2561 original TREE_VALUE, which is a list of arguments that will
2562 be passed to each base. We do not introduce any new pack
2563 expansion nodes into the TREE_VALUE (although it is possible
2564 that some already exist), because the TREE_PURPOSE and
2565 TREE_VALUE all need to be expanded together with the same
2566 _EXPANSION node. Note that the TYPE_PACK_EXPANSION in the
2567 resulting TREE_PURPOSE will mention the parameter packs in
2568 both the bases and the arguments to the bases. */
2571 tree parameter_packs
= NULL_TREE
;
2573 /* Determine which parameter packs will be used by the base
2575 ppd
.visited
= pointer_set_create ();
2576 ppd
.parameter_packs
= ¶meter_packs
;
2577 cp_walk_tree (&TREE_PURPOSE (arg
), &find_parameter_packs_r
,
2580 if (parameter_packs
== NULL_TREE
)
2582 error ("base initializer expansion %<%T%> contains no parameter packs", arg
);
2583 pointer_set_destroy (ppd
.visited
);
2584 return error_mark_node
;
2587 if (TREE_VALUE (arg
) != void_type_node
)
2589 /* Collect the sets of parameter packs used in each of the
2590 initialization arguments. */
2591 for (value
= TREE_VALUE (arg
); value
; value
= TREE_CHAIN (value
))
2593 /* Determine which parameter packs will be expanded in this
2595 cp_walk_tree (&TREE_VALUE (value
), &find_parameter_packs_r
,
2600 pointer_set_destroy (ppd
.visited
);
2602 /* Create the pack expansion type for the base type. */
2603 purpose
= make_node (TYPE_PACK_EXPANSION
);
2604 SET_PACK_EXPANSION_PATTERN (purpose
, TREE_PURPOSE (arg
));
2605 PACK_EXPANSION_PARAMETER_PACKS (purpose
) = parameter_packs
;
2607 /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2608 they will rarely be compared to anything. */
2609 SET_TYPE_STRUCTURAL_EQUALITY (purpose
);
2611 return tree_cons (purpose
, TREE_VALUE (arg
), NULL_TREE
);
2614 if (TYPE_P (arg
) || TREE_CODE (arg
) == TEMPLATE_DECL
)
2617 /* Build the PACK_EXPANSION_* node. */
2618 result
= make_node (for_types
? TYPE_PACK_EXPANSION
: EXPR_PACK_EXPANSION
);
2619 SET_PACK_EXPANSION_PATTERN (result
, arg
);
2620 if (TREE_CODE (result
) == EXPR_PACK_EXPANSION
)
2622 /* Propagate type and const-expression information. */
2623 TREE_TYPE (result
) = TREE_TYPE (arg
);
2624 TREE_CONSTANT (result
) = TREE_CONSTANT (arg
);
2627 /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2628 they will rarely be compared to anything. */
2629 SET_TYPE_STRUCTURAL_EQUALITY (result
);
2631 /* Determine which parameter packs will be expanded. */
2632 ppd
.parameter_packs
= ¶meter_packs
;
2633 ppd
.visited
= pointer_set_create ();
2634 cp_walk_tree (&arg
, &find_parameter_packs_r
, &ppd
, ppd
.visited
);
2635 pointer_set_destroy (ppd
.visited
);
2637 /* Make sure we found some parameter packs. */
2638 if (parameter_packs
== NULL_TREE
)
2641 error ("expansion pattern %<%T%> contains no argument packs", arg
);
2643 error ("expansion pattern %<%E%> contains no argument packs", arg
);
2644 return error_mark_node
;
2646 PACK_EXPANSION_PARAMETER_PACKS (result
) = parameter_packs
;
2651 /* Checks T for any "bare" parameter packs, which have not yet been
2652 expanded, and issues an error if any are found. This operation can
2653 only be done on full expressions or types (e.g., an expression
2654 statement, "if" condition, etc.), because we could have expressions like:
2656 foo(f(g(h(args)))...)
2658 where "args" is a parameter pack. check_for_bare_parameter_packs
2659 should not be called for the subexpressions args, h(args),
2660 g(h(args)), or f(g(h(args))), because we would produce erroneous
2663 Returns TRUE if there were no bare parameter packs, returns FALSE
2664 (and emits an error) if there were bare parameter packs.*/
2666 check_for_bare_parameter_packs (tree t
)
2668 tree parameter_packs
= NULL_TREE
;
2669 struct find_parameter_pack_data ppd
;
2671 if (!processing_template_decl
|| !t
|| t
== error_mark_node
)
2674 if (TREE_CODE (t
) == TYPE_DECL
)
2677 ppd
.parameter_packs
= ¶meter_packs
;
2678 ppd
.visited
= pointer_set_create ();
2679 cp_walk_tree (&t
, &find_parameter_packs_r
, &ppd
, ppd
.visited
);
2680 pointer_set_destroy (ppd
.visited
);
2682 if (parameter_packs
)
2684 error ("parameter packs not expanded with `...':");
2685 while (parameter_packs
)
2687 tree pack
= TREE_VALUE (parameter_packs
);
2688 tree name
= NULL_TREE
;
2690 if (TREE_CODE (pack
) == TEMPLATE_TYPE_PARM
2691 || TREE_CODE (pack
) == TEMPLATE_TEMPLATE_PARM
)
2692 name
= TYPE_NAME (pack
);
2693 else if (TREE_CODE (pack
) == TEMPLATE_PARM_INDEX
)
2694 name
= DECL_NAME (TEMPLATE_PARM_DECL (pack
));
2696 name
= DECL_NAME (pack
);
2697 inform (" %qD", name
);
2699 parameter_packs
= TREE_CHAIN (parameter_packs
);
2708 /* Expand any parameter packs that occur in the template arguments in
2711 expand_template_argument_pack (tree args
)
2713 tree result_args
= NULL_TREE
;
2714 int in_arg
, out_arg
= 0, nargs
= args
? TREE_VEC_LENGTH (args
) : 0;
2715 int num_result_args
= -1;
2717 /* First, determine if we need to expand anything, and the number of
2718 slots we'll need. */
2719 for (in_arg
= 0; in_arg
< nargs
; ++in_arg
)
2721 tree arg
= TREE_VEC_ELT (args
, in_arg
);
2722 if (ARGUMENT_PACK_P (arg
))
2724 int num_packed
= TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg
));
2725 if (num_result_args
< 0)
2726 num_result_args
= in_arg
+ num_packed
;
2728 num_result_args
+= num_packed
;
2732 if (num_result_args
>= 0)
2737 /* If no expansion is necessary, we're done. */
2738 if (num_result_args
< 0)
2741 /* Expand arguments. */
2742 result_args
= make_tree_vec (num_result_args
);
2743 for (in_arg
= 0; in_arg
< nargs
; ++in_arg
)
2745 tree arg
= TREE_VEC_ELT (args
, in_arg
);
2746 if (ARGUMENT_PACK_P (arg
))
2748 tree packed
= ARGUMENT_PACK_ARGS (arg
);
2749 int i
, num_packed
= TREE_VEC_LENGTH (packed
);
2750 for (i
= 0; i
< num_packed
; ++i
, ++out_arg
)
2751 TREE_VEC_ELT (result_args
, out_arg
) = TREE_VEC_ELT(packed
, i
);
2755 TREE_VEC_ELT (result_args
, out_arg
) = arg
;
2763 /* Complain if DECL shadows a template parameter.
2765 [temp.local]: A template-parameter shall not be redeclared within its
2766 scope (including nested scopes). */
2769 check_template_shadow (tree decl
)
2773 /* If we're not in a template, we can't possibly shadow a template
2775 if (!current_template_parms
)
2778 /* Figure out what we're shadowing. */
2779 if (TREE_CODE (decl
) == OVERLOAD
)
2780 decl
= OVL_CURRENT (decl
);
2781 olddecl
= innermost_non_namespace_value (DECL_NAME (decl
));
2783 /* If there's no previous binding for this name, we're not shadowing
2784 anything, let alone a template parameter. */
2788 /* If we're not shadowing a template parameter, we're done. Note
2789 that OLDDECL might be an OVERLOAD (or perhaps even an
2790 ERROR_MARK), so we can't just blithely assume it to be a _DECL
2792 if (!DECL_P (olddecl
) || !DECL_TEMPLATE_PARM_P (olddecl
))
2795 /* We check for decl != olddecl to avoid bogus errors for using a
2796 name inside a class. We check TPFI to avoid duplicate errors for
2797 inline member templates. */
2799 || TEMPLATE_PARMS_FOR_INLINE (current_template_parms
))
2802 error ("declaration of %q+#D", decl
);
2803 error (" shadows template parm %q+#D", olddecl
);
2806 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
2807 ORIG_LEVEL, DECL, and TYPE. */
2810 build_template_parm_index (int index
,
2816 tree t
= make_node (TEMPLATE_PARM_INDEX
);
2817 TEMPLATE_PARM_IDX (t
) = index
;
2818 TEMPLATE_PARM_LEVEL (t
) = level
;
2819 TEMPLATE_PARM_ORIG_LEVEL (t
) = orig_level
;
2820 TEMPLATE_PARM_DECL (t
) = decl
;
2821 TREE_TYPE (t
) = type
;
2822 TREE_CONSTANT (t
) = TREE_CONSTANT (decl
);
2823 TREE_INVARIANT (t
) = TREE_INVARIANT (decl
);
2824 TREE_READONLY (t
) = TREE_READONLY (decl
);
2829 /* Find the canonical type parameter for the given template type
2830 parameter. Returns the canonical type parameter, which may be TYPE
2831 if no such parameter existed. */
2833 canonical_type_parameter (tree type
)
2836 int idx
= TEMPLATE_TYPE_IDX (type
);
2837 if (!canonical_template_parms
)
2838 canonical_template_parms
= VEC_alloc (tree
, gc
, idx
+1);
2840 while (VEC_length (tree
, canonical_template_parms
) <= (unsigned)idx
)
2841 VEC_safe_push (tree
, gc
, canonical_template_parms
, NULL_TREE
);
2843 list
= VEC_index (tree
, canonical_template_parms
, idx
);
2844 while (list
&& !comptypes (type
, TREE_VALUE (list
), COMPARE_STRUCTURAL
))
2845 list
= TREE_CHAIN (list
);
2848 return TREE_VALUE (list
);
2851 VEC_replace(tree
, canonical_template_parms
, idx
,
2852 tree_cons (NULL_TREE
, type
,
2853 VEC_index (tree
, canonical_template_parms
, idx
)));
2858 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
2859 TEMPLATE_PARM_LEVEL has been decreased by LEVELS. If such a
2860 TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
2861 new one is created. */
2864 reduce_template_parm_level (tree index
, tree type
, int levels
)
2866 if (TEMPLATE_PARM_DESCENDANTS (index
) == NULL_TREE
2867 || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index
))
2868 != TEMPLATE_PARM_LEVEL (index
) - levels
))
2870 tree orig_decl
= TEMPLATE_PARM_DECL (index
);
2873 decl
= build_decl (TREE_CODE (orig_decl
), DECL_NAME (orig_decl
), type
);
2874 TREE_CONSTANT (decl
) = TREE_CONSTANT (orig_decl
);
2875 TREE_INVARIANT (decl
) = TREE_INVARIANT (orig_decl
);
2876 TREE_READONLY (decl
) = TREE_READONLY (orig_decl
);
2877 DECL_ARTIFICIAL (decl
) = 1;
2878 SET_DECL_TEMPLATE_PARM_P (decl
);
2880 t
= build_template_parm_index (TEMPLATE_PARM_IDX (index
),
2881 TEMPLATE_PARM_LEVEL (index
) - levels
,
2882 TEMPLATE_PARM_ORIG_LEVEL (index
),
2884 TEMPLATE_PARM_DESCENDANTS (index
) = t
;
2885 TEMPLATE_PARM_PARAMETER_PACK (t
)
2886 = TEMPLATE_PARM_PARAMETER_PACK (index
);
2888 /* Template template parameters need this. */
2889 if (TREE_CODE (decl
) != CONST_DECL
)
2890 DECL_TEMPLATE_PARMS (decl
)
2891 = DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index
));
2894 return TEMPLATE_PARM_DESCENDANTS (index
);
2897 /* Process information from new template parameter PARM and append it to the
2898 LIST being built. This new parameter is a non-type parameter iff
2899 IS_NON_TYPE is true. This new parameter is a parameter
2900 pack iff IS_PARAMETER_PACK is true. */
2903 process_template_parm (tree list
, tree parm
, bool is_non_type
,
2904 bool is_parameter_pack
)
2911 gcc_assert (TREE_CODE (parm
) == TREE_LIST
);
2912 defval
= TREE_PURPOSE (parm
);
2916 tree p
= tree_last (list
);
2918 if (p
&& TREE_VALUE (p
) != error_mark_node
)
2921 if (TREE_CODE (p
) == TYPE_DECL
|| TREE_CODE (p
) == TEMPLATE_DECL
)
2922 idx
= TEMPLATE_TYPE_IDX (TREE_TYPE (p
));
2924 idx
= TEMPLATE_PARM_IDX (DECL_INITIAL (p
));
2934 parm
= TREE_VALUE (parm
);
2936 SET_DECL_TEMPLATE_PARM_P (parm
);
2938 if (TREE_TYPE (parm
) == error_mark_node
)
2940 err_parm_list
= build_tree_list (defval
, parm
);
2941 TREE_VALUE (err_parm_list
) = error_mark_node
;
2942 return chainon (list
, err_parm_list
);
2948 The top-level cv-qualifiers on the template-parameter are
2949 ignored when determining its type. */
2950 TREE_TYPE (parm
) = TYPE_MAIN_VARIANT (TREE_TYPE (parm
));
2951 if (invalid_nontype_parm_type_p (TREE_TYPE (parm
), 1))
2953 err_parm_list
= build_tree_list (defval
, parm
);
2954 TREE_VALUE (err_parm_list
) = error_mark_node
;
2955 return chainon (list
, err_parm_list
);
2958 if (uses_parameter_packs (TREE_TYPE (parm
)) && !is_parameter_pack
)
2960 /* This template parameter is not a parameter pack, but it
2961 should be. Complain about "bare" parameter packs. */
2962 check_for_bare_parameter_packs (TREE_TYPE (parm
));
2964 /* Recover by calling this a parameter pack. */
2965 is_parameter_pack
= true;
2969 /* A template parameter is not modifiable. */
2970 TREE_CONSTANT (parm
) = 1;
2971 TREE_INVARIANT (parm
) = 1;
2972 TREE_READONLY (parm
) = 1;
2973 decl
= build_decl (CONST_DECL
, DECL_NAME (parm
), TREE_TYPE (parm
));
2974 TREE_CONSTANT (decl
) = 1;
2975 TREE_INVARIANT (decl
) = 1;
2976 TREE_READONLY (decl
) = 1;
2977 DECL_INITIAL (parm
) = DECL_INITIAL (decl
)
2978 = build_template_parm_index (idx
, processing_template_decl
,
2979 processing_template_decl
,
2980 decl
, TREE_TYPE (parm
));
2982 TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm
))
2983 = is_parameter_pack
;
2988 parm
= TREE_VALUE (TREE_VALUE (parm
));
2990 if (parm
&& TREE_CODE (parm
) == TEMPLATE_DECL
)
2992 t
= make_aggr_type (TEMPLATE_TEMPLATE_PARM
);
2993 /* This is for distinguishing between real templates and template
2994 template parameters */
2995 TREE_TYPE (parm
) = t
;
2996 TREE_TYPE (DECL_TEMPLATE_RESULT (parm
)) = t
;
3001 t
= make_aggr_type (TEMPLATE_TYPE_PARM
);
3002 /* parm is either IDENTIFIER_NODE or NULL_TREE. */
3003 decl
= build_decl (TYPE_DECL
, parm
, t
);
3006 TYPE_NAME (t
) = decl
;
3007 TYPE_STUB_DECL (t
) = decl
;
3009 TEMPLATE_TYPE_PARM_INDEX (t
)
3010 = build_template_parm_index (idx
, processing_template_decl
,
3011 processing_template_decl
,
3012 decl
, TREE_TYPE (parm
));
3013 TEMPLATE_TYPE_PARAMETER_PACK (t
) = is_parameter_pack
;
3014 TYPE_CANONICAL (t
) = canonical_type_parameter (t
);
3016 DECL_ARTIFICIAL (decl
) = 1;
3017 SET_DECL_TEMPLATE_PARM_P (decl
);
3019 parm
= build_tree_list (defval
, parm
);
3020 return chainon (list
, parm
);
3023 /* The end of a template parameter list has been reached. Process the
3024 tree list into a parameter vector, converting each parameter into a more
3025 useful form. Type parameters are saved as IDENTIFIER_NODEs, and others
3029 end_template_parm_list (tree parms
)
3033 tree saved_parmlist
= make_tree_vec (list_length (parms
));
3035 current_template_parms
3036 = tree_cons (size_int (processing_template_decl
),
3037 saved_parmlist
, current_template_parms
);
3039 for (parm
= parms
, nparms
= 0; parm
; parm
= next
, nparms
++)
3041 next
= TREE_CHAIN (parm
);
3042 TREE_VEC_ELT (saved_parmlist
, nparms
) = parm
;
3043 TREE_CHAIN (parm
) = NULL_TREE
;
3046 --processing_template_parmlist
;
3048 return saved_parmlist
;
3051 /* end_template_decl is called after a template declaration is seen. */
3054 end_template_decl (void)
3056 reset_specialization ();
3058 if (! processing_template_decl
)
3061 /* This matches the pushlevel in begin_template_parm_list. */
3064 --processing_template_decl
;
3065 current_template_parms
= TREE_CHAIN (current_template_parms
);
3068 /* Within the declaration of a template, return all levels of template
3069 parameters that apply. The template parameters are represented as
3070 a TREE_VEC, in the form documented in cp-tree.h for template
3074 current_template_args (void)
3077 tree args
= NULL_TREE
;
3078 int length
= TMPL_PARMS_DEPTH (current_template_parms
);
3081 /* If there is only one level of template parameters, we do not
3082 create a TREE_VEC of TREE_VECs. Instead, we return a single
3083 TREE_VEC containing the arguments. */
3085 args
= make_tree_vec (length
);
3087 for (header
= current_template_parms
; header
; header
= TREE_CHAIN (header
))
3089 tree a
= copy_node (TREE_VALUE (header
));
3092 TREE_TYPE (a
) = NULL_TREE
;
3093 for (i
= TREE_VEC_LENGTH (a
) - 1; i
>= 0; --i
)
3095 tree t
= TREE_VEC_ELT (a
, i
);
3097 /* T will be a list if we are called from within a
3098 begin/end_template_parm_list pair, but a vector directly
3099 if within a begin/end_member_template_processing pair. */
3100 if (TREE_CODE (t
) == TREE_LIST
)
3104 if (t
!= error_mark_node
)
3106 if (TREE_CODE (t
) == TYPE_DECL
3107 || TREE_CODE (t
) == TEMPLATE_DECL
)
3111 if (TEMPLATE_TYPE_PARAMETER_PACK (t
))
3113 /* Turn this argument into a TYPE_ARGUMENT_PACK
3114 with a single element, which expands T. */
3115 tree vec
= make_tree_vec (1);
3116 TREE_VEC_ELT (vec
, 0) = make_pack_expansion (t
);
3118 t
= make_node (TYPE_ARGUMENT_PACK
);
3119 SET_ARGUMENT_PACK_ARGS (t
, vec
);
3124 t
= DECL_INITIAL (t
);
3126 if (TEMPLATE_PARM_PARAMETER_PACK (t
))
3128 /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3129 with a single element, which expands T. */
3130 tree vec
= make_tree_vec (1);
3131 tree type
= TREE_TYPE (TEMPLATE_PARM_DECL (t
));
3132 TREE_VEC_ELT (vec
, 0) = make_pack_expansion (t
);
3134 t
= make_node (NONTYPE_ARGUMENT_PACK
);
3135 SET_ARGUMENT_PACK_ARGS (t
, vec
);
3136 TREE_TYPE (t
) = type
;
3140 TREE_VEC_ELT (a
, i
) = t
;
3145 TREE_VEC_ELT (args
, --l
) = a
;
3153 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
3154 template PARMS. If MEMBER_TEMPLATE_P is true, the new template is
3155 a member template. Used by push_template_decl below. */
3158 build_template_decl (tree decl
, tree parms
, bool member_template_p
)
3160 tree tmpl
= build_lang_decl (TEMPLATE_DECL
, DECL_NAME (decl
), NULL_TREE
);
3161 DECL_TEMPLATE_PARMS (tmpl
) = parms
;
3162 DECL_CONTEXT (tmpl
) = DECL_CONTEXT (decl
);
3163 DECL_MEMBER_TEMPLATE_P (tmpl
) = member_template_p
;
3164 if (DECL_LANG_SPECIFIC (decl
))
3166 DECL_STATIC_FUNCTION_P (tmpl
) = DECL_STATIC_FUNCTION_P (decl
);
3167 DECL_CONSTRUCTOR_P (tmpl
) = DECL_CONSTRUCTOR_P (decl
);
3168 DECL_DESTRUCTOR_P (tmpl
) = DECL_DESTRUCTOR_P (decl
);
3169 DECL_NONCONVERTING_P (tmpl
) = DECL_NONCONVERTING_P (decl
);
3170 DECL_ASSIGNMENT_OPERATOR_P (tmpl
) = DECL_ASSIGNMENT_OPERATOR_P (decl
);
3171 if (DECL_OVERLOADED_OPERATOR_P (decl
))
3172 SET_OVERLOADED_OPERATOR_CODE (tmpl
,
3173 DECL_OVERLOADED_OPERATOR_P (decl
));
3179 struct template_parm_data
3181 /* The level of the template parameters we are currently
3185 /* The index of the specialization argument we are currently
3189 /* An array whose size is the number of template parameters. The
3190 elements are nonzero if the parameter has been used in any one
3191 of the arguments processed so far. */
3194 /* An array whose size is the number of template arguments. The
3195 elements are nonzero if the argument makes use of template
3196 parameters of this level. */
3197 int* arg_uses_template_parms
;
3200 /* Subroutine of push_template_decl used to see if each template
3201 parameter in a partial specialization is used in the explicit
3202 argument list. If T is of the LEVEL given in DATA (which is
3203 treated as a template_parm_data*), then DATA->PARMS is marked
3207 mark_template_parm (tree t
, void* data
)
3211 struct template_parm_data
* tpd
= (struct template_parm_data
*) data
;
3213 if (TREE_CODE (t
) == TEMPLATE_PARM_INDEX
)
3215 level
= TEMPLATE_PARM_LEVEL (t
);
3216 idx
= TEMPLATE_PARM_IDX (t
);
3220 level
= TEMPLATE_TYPE_LEVEL (t
);
3221 idx
= TEMPLATE_TYPE_IDX (t
);
3224 if (level
== tpd
->level
)
3226 tpd
->parms
[idx
] = 1;
3227 tpd
->arg_uses_template_parms
[tpd
->current_arg
] = 1;
3230 /* Return zero so that for_each_template_parm will continue the
3231 traversal of the tree; we want to mark *every* template parm. */
3235 /* Process the partial specialization DECL. */
3238 process_partial_specialization (tree decl
)
3240 tree type
= TREE_TYPE (decl
);
3241 tree maintmpl
= CLASSTYPE_TI_TEMPLATE (type
);
3242 tree specargs
= CLASSTYPE_TI_ARGS (type
);
3243 tree inner_args
= INNERMOST_TEMPLATE_ARGS (specargs
);
3244 tree inner_parms
= INNERMOST_TEMPLATE_PARMS (current_template_parms
);
3245 tree main_inner_parms
= DECL_INNERMOST_TEMPLATE_PARMS (maintmpl
);
3246 int nargs
= TREE_VEC_LENGTH (inner_args
);
3247 int ntparms
= TREE_VEC_LENGTH (inner_parms
);
3249 int did_error_intro
= 0;
3250 struct template_parm_data tpd
;
3251 struct template_parm_data tpd2
;
3253 /* We check that each of the template parameters given in the
3254 partial specialization is used in the argument list to the
3255 specialization. For example:
3257 template <class T> struct S;
3258 template <class T> struct S<T*>;
3260 The second declaration is OK because `T*' uses the template
3261 parameter T, whereas
3263 template <class T> struct S<int>;
3265 is no good. Even trickier is:
3276 The S2<T> declaration is actually invalid; it is a
3277 full-specialization. Of course,
3280 struct S2<T (*)(U)>;
3282 or some such would have been OK. */
3283 tpd
.level
= TMPL_PARMS_DEPTH (current_template_parms
);
3284 tpd
.parms
= (int *) alloca (sizeof (int) * ntparms
);
3285 memset (tpd
.parms
, 0, sizeof (int) * ntparms
);
3287 tpd
.arg_uses_template_parms
= (int *) alloca (sizeof (int) * nargs
);
3288 memset (tpd
.arg_uses_template_parms
, 0, sizeof (int) * nargs
);
3289 for (i
= 0; i
< nargs
; ++i
)
3291 tpd
.current_arg
= i
;
3292 for_each_template_parm (TREE_VEC_ELT (inner_args
, i
),
3293 &mark_template_parm
,
3297 for (i
= 0; i
< ntparms
; ++i
)
3298 if (tpd
.parms
[i
] == 0)
3300 /* One of the template parms was not used in the
3302 if (!did_error_intro
)
3304 error ("template parameters not used in partial specialization:");
3305 did_error_intro
= 1;
3308 error (" %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms
, i
)));
3311 /* [temp.class.spec]
3313 The argument list of the specialization shall not be identical to
3314 the implicit argument list of the primary template. */
3315 if (comp_template_args
3317 INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
3319 error ("partial specialization %qT does not specialize any template arguments", type
);
3321 /* [temp.class.spec]
3323 A partially specialized non-type argument expression shall not
3324 involve template parameters of the partial specialization except
3325 when the argument expression is a simple identifier.
3327 The type of a template parameter corresponding to a specialized
3328 non-type argument shall not be dependent on a parameter of the
3331 Also, we verify that pack expansions only occur at the
3332 end of the argument list. */
3333 gcc_assert (nargs
== DECL_NTPARMS (maintmpl
));
3335 for (i
= 0; i
< nargs
; ++i
)
3337 tree parm
= TREE_VALUE (TREE_VEC_ELT (main_inner_parms
, i
));
3338 tree arg
= TREE_VEC_ELT (inner_args
, i
);
3339 tree packed_args
= NULL_TREE
;
3342 if (ARGUMENT_PACK_P (arg
))
3344 /* Extract the arguments from the argument pack. We'll be
3345 iterating over these in the following loop. */
3346 packed_args
= ARGUMENT_PACK_ARGS (arg
);
3347 len
= TREE_VEC_LENGTH (packed_args
);
3350 for (j
= 0; j
< len
; j
++)
3353 /* Get the Jth argument in the parameter pack. */
3354 arg
= TREE_VEC_ELT (packed_args
, j
);
3356 if (PACK_EXPANSION_P (arg
))
3358 /* Pack expansions must come at the end of the
3360 if ((packed_args
&& j
< len
- 1)
3361 || (!packed_args
&& i
< nargs
- 1))
3363 if (TREE_CODE (arg
) == EXPR_PACK_EXPANSION
)
3364 error ("parameter pack argument %qE must be at the end of the template argument list", arg
);
3366 error ("parameter pack argument %qT must be at the end of the template argument list", arg
);
3370 if (TREE_CODE (arg
) == EXPR_PACK_EXPANSION
)
3371 /* We only care about the pattern. */
3372 arg
= PACK_EXPANSION_PATTERN (arg
);
3374 if (/* These first two lines are the `non-type' bit. */
3376 && TREE_CODE (arg
) != TEMPLATE_DECL
3377 /* This next line is the `argument expression is not just a
3378 simple identifier' condition and also the `specialized
3379 non-type argument' bit. */
3380 && TREE_CODE (arg
) != TEMPLATE_PARM_INDEX
)
3382 if ((!packed_args
&& tpd
.arg_uses_template_parms
[i
])
3383 || (packed_args
&& uses_template_parms (arg
)))
3384 error ("template argument %qE involves template parameter(s)",
3388 /* Look at the corresponding template parameter,
3389 marking which template parameters its type depends
3391 tree type
= TREE_TYPE (parm
);
3395 /* We haven't yet initialized TPD2. Do so now. */
3396 tpd2
.arg_uses_template_parms
3397 = (int *) alloca (sizeof (int) * nargs
);
3398 /* The number of parameters here is the number in the
3399 main template, which, as checked in the assertion
3401 tpd2
.parms
= (int *) alloca (sizeof (int) * nargs
);
3403 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl
));
3406 /* Mark the template parameters. But this time, we're
3407 looking for the template parameters of the main
3408 template, not in the specialization. */
3409 tpd2
.current_arg
= i
;
3410 tpd2
.arg_uses_template_parms
[i
] = 0;
3411 memset (tpd2
.parms
, 0, sizeof (int) * nargs
);
3412 for_each_template_parm (type
,
3413 &mark_template_parm
,
3417 if (tpd2
.arg_uses_template_parms
[i
])
3419 /* The type depended on some template parameters.
3420 If they are fully specialized in the
3421 specialization, that's OK. */
3423 for (j
= 0; j
< nargs
; ++j
)
3424 if (tpd2
.parms
[j
] != 0
3425 && tpd
.arg_uses_template_parms
[j
])
3427 error ("type %qT of template argument %qE depends "
3428 "on template parameter(s)",
3439 if (retrieve_specialization (maintmpl
, specargs
,
3440 /*class_specializations_p=*/true))
3441 /* We've already got this specialization. */
3444 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl
)
3445 = tree_cons (specargs
, inner_parms
,
3446 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl
));
3447 TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl
)) = type
;
3451 /* Check that a template declaration's use of default arguments is not
3452 invalid. Here, PARMS are the template parameters. IS_PRIMARY is
3453 nonzero if DECL is the thing declared by a primary template.
3454 IS_PARTIAL is nonzero if DECL is a partial specialization.
3457 IS_FRIEND_DECL is nonzero if DECL is a friend function template
3458 declaration (but not a definition); 1 indicates a declaration, 2
3459 indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
3460 emitted for extraneous default arguments.
3462 Returns TRUE if there were no errors found, FALSE otherwise. */
3465 check_default_tmpl_args (tree decl
, tree parms
, int is_primary
,
3466 int is_partial
, int is_friend_decl
)
3469 int last_level_to_check
;
3471 bool no_errors
= true;
3475 A default template-argument shall not be specified in a
3476 function template declaration or a function template definition, nor
3477 in the template-parameter-list of the definition of a member of a
3480 if (TREE_CODE (CP_DECL_CONTEXT (decl
)) == FUNCTION_DECL
)
3481 /* You can't have a function template declaration in a local
3482 scope, nor you can you define a member of a class template in a
3486 if (current_class_type
3487 && !TYPE_BEING_DEFINED (current_class_type
)
3488 && DECL_LANG_SPECIFIC (decl
)
3489 /* If this is either a friend defined in the scope of the class
3490 or a member function. */
3491 && (DECL_FUNCTION_MEMBER_P (decl
)
3492 ? same_type_p (DECL_CONTEXT (decl
), current_class_type
)
3493 : DECL_FRIEND_CONTEXT (decl
)
3494 ? same_type_p (DECL_FRIEND_CONTEXT (decl
), current_class_type
)
3496 /* And, if it was a member function, it really was defined in
3497 the scope of the class. */
3498 && (!DECL_FUNCTION_MEMBER_P (decl
)
3499 || DECL_INITIALIZED_IN_CLASS_P (decl
)))
3500 /* We already checked these parameters when the template was
3501 declared, so there's no need to do it again now. This function
3502 was defined in class scope, but we're processing it's body now
3503 that the class is complete. */
3506 /* Core issue 226 (C++0x only): the following only applies to class
3508 if ((cxx_dialect
== cxx98
) || TREE_CODE (decl
) != FUNCTION_DECL
)
3512 If a template-parameter has a default template-argument, all
3513 subsequent template-parameters shall have a default
3514 template-argument supplied. */
3515 for (parm_level
= parms
; parm_level
; parm_level
= TREE_CHAIN (parm_level
))
3517 tree inner_parms
= TREE_VALUE (parm_level
);
3518 int ntparms
= TREE_VEC_LENGTH (inner_parms
);
3519 int seen_def_arg_p
= 0;
3522 for (i
= 0; i
< ntparms
; ++i
)
3524 tree parm
= TREE_VEC_ELT (inner_parms
, i
);
3526 if (parm
== error_mark_node
)
3529 if (TREE_PURPOSE (parm
))
3531 else if (seen_def_arg_p
)
3533 error ("no default argument for %qD", TREE_VALUE (parm
));
3534 /* For better subsequent error-recovery, we indicate that
3535 there should have been a default argument. */
3536 TREE_PURPOSE (parm
) = error_mark_node
;
3543 if (((cxx_dialect
== cxx98
) && TREE_CODE (decl
) != TYPE_DECL
)
3547 /* For an ordinary class template, default template arguments are
3548 allowed at the innermost level, e.g.:
3549 template <class T = int>
3551 but, in a partial specialization, they're not allowed even
3552 there, as we have in [temp.class.spec]:
3554 The template parameter list of a specialization shall not
3555 contain default template argument values.
3557 So, for a partial specialization, or for a function template
3558 (in C++98/C++03), we look at all of them. */
3561 /* But, for a primary class template that is not a partial
3562 specialization we look at all template parameters except the
3564 parms
= TREE_CHAIN (parms
);
3566 /* Figure out what error message to issue. */
3567 if (is_friend_decl
== 2)
3568 msg
= "default template arguments may not be used in function template friend re-declaration";
3569 else if (is_friend_decl
)
3570 msg
= "default template arguments may not be used in function template friend declarations";
3571 else if (TREE_CODE (decl
) == FUNCTION_DECL
&& (cxx_dialect
== cxx98
))
3572 msg
= "default template arguments may not be used in function templates";
3573 else if (is_partial
)
3574 msg
= "default template arguments may not be used in partial specializations";
3576 msg
= "default argument for template parameter for class enclosing %qD";
3578 if (current_class_type
&& TYPE_BEING_DEFINED (current_class_type
))
3579 /* If we're inside a class definition, there's no need to
3580 examine the parameters to the class itself. On the one
3581 hand, they will be checked when the class is defined, and,
3582 on the other, default arguments are valid in things like:
3583 template <class T = double>
3584 struct S { template <class U> void f(U); };
3585 Here the default argument for `S' has no bearing on the
3586 declaration of `f'. */
3587 last_level_to_check
= template_class_depth (current_class_type
) + 1;
3589 /* Check everything. */
3590 last_level_to_check
= 0;
3592 for (parm_level
= parms
;
3593 parm_level
&& TMPL_PARMS_DEPTH (parm_level
) >= last_level_to_check
;
3594 parm_level
= TREE_CHAIN (parm_level
))
3596 tree inner_parms
= TREE_VALUE (parm_level
);
3600 ntparms
= TREE_VEC_LENGTH (inner_parms
);
3601 for (i
= 0; i
< ntparms
; ++i
)
3603 if (TREE_VEC_ELT (inner_parms
, i
) == error_mark_node
)
3606 if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms
, i
)))
3611 if (is_friend_decl
== 2)
3618 /* Clear out the default argument so that we are not
3620 TREE_PURPOSE (TREE_VEC_ELT (inner_parms
, i
)) = NULL_TREE
;
3624 /* At this point, if we're still interested in issuing messages,
3625 they must apply to classes surrounding the object declared. */
3627 msg
= "default argument for template parameter for class enclosing %qD";
3633 /* Worker for push_template_decl_real, called via
3634 for_each_template_parm. DATA is really an int, indicating the
3635 level of the parameters we are interested in. If T is a template
3636 parameter of that level, return nonzero. */
3639 template_parm_this_level_p (tree t
, void* data
)
3641 int this_level
= *(int *)data
;
3644 if (TREE_CODE (t
) == TEMPLATE_PARM_INDEX
)
3645 level
= TEMPLATE_PARM_LEVEL (t
);
3647 level
= TEMPLATE_TYPE_LEVEL (t
);
3648 return level
== this_level
;
3651 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
3652 parameters given by current_template_args, or reuses a
3653 previously existing one, if appropriate. Returns the DECL, or an
3654 equivalent one, if it is replaced via a call to duplicate_decls.
3656 If IS_FRIEND is true, DECL is a friend declaration. */
3659 push_template_decl_real (tree decl
, bool is_friend
)
3667 int new_template_p
= 0;
3668 /* True if the template is a member template, in the sense of
3670 bool member_template_p
= false;
3672 if (decl
== error_mark_node
)
3675 /* See if this is a partial specialization. */
3676 is_partial
= (DECL_IMPLICIT_TYPEDEF_P (decl
)
3677 && TREE_CODE (TREE_TYPE (decl
)) != ENUMERAL_TYPE
3678 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl
)));
3680 if (TREE_CODE (decl
) == FUNCTION_DECL
&& DECL_FRIEND_P (decl
))
3684 /* For a friend, we want the context of the friend function, not
3685 the type of which it is a friend. */
3686 ctx
= DECL_CONTEXT (decl
);
3687 else if (CP_DECL_CONTEXT (decl
)
3688 && TREE_CODE (CP_DECL_CONTEXT (decl
)) != NAMESPACE_DECL
)
3689 /* In the case of a virtual function, we want the class in which
3691 ctx
= CP_DECL_CONTEXT (decl
);
3693 /* Otherwise, if we're currently defining some class, the DECL
3694 is assumed to be a member of the class. */
3695 ctx
= current_scope ();
3697 if (ctx
&& TREE_CODE (ctx
) == NAMESPACE_DECL
)
3700 if (!DECL_CONTEXT (decl
))
3701 DECL_CONTEXT (decl
) = FROB_CONTEXT (current_namespace
);
3703 /* See if this is a primary template. */
3704 if (is_friend
&& ctx
)
3705 /* A friend template that specifies a class context, i.e.
3706 template <typename T> friend void A<T>::f();
3710 primary
= template_parm_scope_p ();
3714 if (DECL_CLASS_SCOPE_P (decl
))
3715 member_template_p
= true;
3716 if (TREE_CODE (decl
) == TYPE_DECL
3717 && ANON_AGGRNAME_P (DECL_NAME (decl
)))
3718 error ("template class without a name");
3719 else if (TREE_CODE (decl
) == FUNCTION_DECL
)
3721 if (DECL_DESTRUCTOR_P (decl
))
3725 A destructor shall not be a member template. */
3726 error ("destructor %qD declared as member template", decl
);
3727 return error_mark_node
;
3729 if (NEW_DELETE_OPNAME_P (DECL_NAME (decl
))
3730 && (!TYPE_ARG_TYPES (TREE_TYPE (decl
))
3731 || TYPE_ARG_TYPES (TREE_TYPE (decl
)) == void_list_node
3732 || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl
)))
3733 || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl
))))
3734 == void_list_node
)))
3736 /* [basic.stc.dynamic.allocation]
3738 An allocation function can be a function
3739 template. ... Template allocation functions shall
3740 have two or more parameters. */
3741 error ("invalid template declaration of %qD", decl
);
3742 return error_mark_node
;
3745 else if (DECL_IMPLICIT_TYPEDEF_P (decl
)
3746 && CLASS_TYPE_P (TREE_TYPE (decl
)))
3750 error ("template declaration of %q#D", decl
);
3751 return error_mark_node
;
3755 /* Check to see that the rules regarding the use of default
3756 arguments are not being violated. */
3757 check_default_tmpl_args (decl
, current_template_parms
,
3758 primary
, is_partial
, /*is_friend_decl=*/0);
3760 /* Ensure that there are no parameter packs in the type of this
3761 declaration that have not been expanded. */
3762 if (TREE_CODE (decl
) == FUNCTION_DECL
)
3764 /* Check each of the arguments individually to see if there are
3765 any bare parameter packs. */
3766 tree type
= TREE_TYPE (decl
);
3767 tree arg
= DECL_ARGUMENTS (decl
);
3768 tree argtype
= TYPE_ARG_TYPES (type
);
3770 while (arg
&& argtype
)
3772 if (!FUNCTION_PARAMETER_PACK_P (arg
)
3773 && !check_for_bare_parameter_packs (TREE_TYPE (arg
)))
3775 /* This is a PARM_DECL that contains unexpanded parameter
3776 packs. We have already complained about this in the
3777 check_for_bare_parameter_packs call, so just replace
3778 these types with ERROR_MARK_NODE. */
3779 TREE_TYPE (arg
) = error_mark_node
;
3780 TREE_VALUE (argtype
) = error_mark_node
;
3783 arg
= TREE_CHAIN (arg
);
3784 argtype
= TREE_CHAIN (argtype
);
3787 /* Check for bare parameter packs in the return type and the
3788 exception specifiers. */
3789 check_for_bare_parameter_packs (TREE_TYPE (type
));
3790 check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type
));
3793 check_for_bare_parameter_packs (TREE_TYPE (decl
));
3796 return process_partial_specialization (decl
);
3798 /* A primary class template can only have one parameter pack, at the
3799 end of the template parameter list. */
3800 if (primary
&& TREE_CODE (decl
) == TYPE_DECL
)
3803 = INNERMOST_TEMPLATE_PARMS (current_template_parms
);
3804 int i
, len
= TREE_VEC_LENGTH (inner_parms
);
3805 for (i
= 0; i
< len
- 1; i
++)
3807 tree parm
= TREE_VALUE (TREE_VEC_ELT (inner_parms
, i
));
3809 if (template_parameter_pack_p (parm
))
3811 if (TREE_CODE (parm
) == PARM_DECL
)
3812 error ("parameter pack %qE must be at the end of the"
3813 " template parameter list", parm
);
3815 error ("parameter pack %qT must be at the end of the"
3816 " template parameter list", TREE_TYPE (parm
));
3821 args
= current_template_args ();
3824 || TREE_CODE (ctx
) == FUNCTION_DECL
3825 || (CLASS_TYPE_P (ctx
) && TYPE_BEING_DEFINED (ctx
))
3826 || (is_friend
&& !DECL_TEMPLATE_INFO (decl
)))
3828 if (DECL_LANG_SPECIFIC (decl
)
3829 && DECL_TEMPLATE_INFO (decl
)
3830 && DECL_TI_TEMPLATE (decl
))
3831 tmpl
= DECL_TI_TEMPLATE (decl
);
3832 /* If DECL is a TYPE_DECL for a class-template, then there won't
3833 be DECL_LANG_SPECIFIC. The information equivalent to
3834 DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead. */
3835 else if (DECL_IMPLICIT_TYPEDEF_P (decl
)
3836 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl
))
3837 && TYPE_TI_TEMPLATE (TREE_TYPE (decl
)))
3839 /* Since a template declaration already existed for this
3840 class-type, we must be redeclaring it here. Make sure
3841 that the redeclaration is valid. */
3842 redeclare_class_template (TREE_TYPE (decl
),
3843 current_template_parms
);
3844 /* We don't need to create a new TEMPLATE_DECL; just use the
3845 one we already had. */
3846 tmpl
= TYPE_TI_TEMPLATE (TREE_TYPE (decl
));
3850 tmpl
= build_template_decl (decl
, current_template_parms
,
3854 if (DECL_LANG_SPECIFIC (decl
)
3855 && DECL_TEMPLATE_SPECIALIZATION (decl
))
3857 /* A specialization of a member template of a template
3859 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl
);
3860 DECL_TEMPLATE_INFO (tmpl
) = DECL_TEMPLATE_INFO (decl
);
3861 DECL_TEMPLATE_INFO (decl
) = NULL_TREE
;
3867 tree a
, t
, current
, parms
;
3870 if (TREE_CODE (decl
) == TYPE_DECL
)
3872 if ((IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (decl
)))
3873 || TREE_CODE (TREE_TYPE (decl
)) == ENUMERAL_TYPE
)
3874 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl
))
3875 && TYPE_TI_TEMPLATE (TREE_TYPE (decl
)))
3876 tmpl
= TYPE_TI_TEMPLATE (TREE_TYPE (decl
));
3879 error ("%qD does not declare a template type", decl
);
3883 else if (!DECL_LANG_SPECIFIC (decl
) || !DECL_TEMPLATE_INFO (decl
))
3885 error ("template definition of non-template %q#D", decl
);
3889 tmpl
= DECL_TI_TEMPLATE (decl
);
3891 if (DECL_FUNCTION_TEMPLATE_P (tmpl
)
3892 && DECL_TEMPLATE_INFO (decl
) && DECL_TI_ARGS (decl
)
3893 && DECL_TEMPLATE_SPECIALIZATION (decl
)
3894 && DECL_MEMBER_TEMPLATE_P (tmpl
))
3898 /* The declaration is a specialization of a member
3899 template, declared outside the class. Therefore, the
3900 innermost template arguments will be NULL, so we
3901 replace them with the arguments determined by the
3902 earlier call to check_explicit_specialization. */
3903 args
= DECL_TI_ARGS (decl
);
3906 = build_template_decl (decl
, current_template_parms
,
3908 DECL_TEMPLATE_RESULT (new_tmpl
) = decl
;
3909 TREE_TYPE (new_tmpl
) = TREE_TYPE (decl
);
3910 DECL_TI_TEMPLATE (decl
) = new_tmpl
;
3911 SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl
);
3912 DECL_TEMPLATE_INFO (new_tmpl
)
3913 = tree_cons (tmpl
, args
, NULL_TREE
);
3915 register_specialization (new_tmpl
,
3916 most_general_template (tmpl
),
3922 /* Make sure the template headers we got make sense. */
3924 parms
= DECL_TEMPLATE_PARMS (tmpl
);
3925 i
= TMPL_PARMS_DEPTH (parms
);
3926 if (TMPL_ARGS_DEPTH (args
) != i
)
3928 error ("expected %d levels of template parms for %q#D, got %d",
3929 i
, decl
, TMPL_ARGS_DEPTH (args
));
3932 for (current
= decl
; i
> 0; --i
, parms
= TREE_CHAIN (parms
))
3934 a
= TMPL_ARGS_LEVEL (args
, i
);
3935 t
= INNERMOST_TEMPLATE_PARMS (parms
);
3937 if (TREE_VEC_LENGTH (t
) != TREE_VEC_LENGTH (a
))
3939 if (current
== decl
)
3940 error ("got %d template parameters for %q#D",
3941 TREE_VEC_LENGTH (a
), decl
);
3943 error ("got %d template parameters for %q#T",
3944 TREE_VEC_LENGTH (a
), current
);
3945 error (" but %d required", TREE_VEC_LENGTH (t
));
3946 return error_mark_node
;
3949 /* Perhaps we should also check that the parms are used in the
3950 appropriate qualifying scopes in the declarator? */
3952 if (current
== decl
)
3955 current
= (TYPE_P (current
)
3956 ? TYPE_CONTEXT (current
)
3957 : DECL_CONTEXT (current
));
3961 DECL_TEMPLATE_RESULT (tmpl
) = decl
;
3962 TREE_TYPE (tmpl
) = TREE_TYPE (decl
);
3964 /* Push template declarations for global functions and types. Note
3965 that we do not try to push a global template friend declared in a
3966 template class; such a thing may well depend on the template
3967 parameters of the class. */
3968 if (new_template_p
&& !ctx
3969 && !(is_friend
&& template_class_depth (current_class_type
) > 0))
3971 tmpl
= pushdecl_namespace_level (tmpl
, is_friend
);
3972 if (tmpl
== error_mark_node
)
3973 return error_mark_node
;
3975 /* Hide template friend classes that haven't been declared yet. */
3976 if (is_friend
&& TREE_CODE (decl
) == TYPE_DECL
)
3978 DECL_ANTICIPATED (tmpl
) = 1;
3979 DECL_FRIEND_P (tmpl
) = 1;
3985 DECL_PRIMARY_TEMPLATE (tmpl
) = tmpl
;
3986 if (DECL_CONV_FN_P (tmpl
))
3988 int depth
= TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl
));
3990 /* It is a conversion operator. See if the type converted to
3991 depends on innermost template operands. */
3993 if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl
)),
3995 DECL_TEMPLATE_CONV_FN_P (tmpl
) = 1;
3999 /* The DECL_TI_ARGS of DECL contains full set of arguments referring
4000 back to its most general template. If TMPL is a specialization,
4001 ARGS may only have the innermost set of arguments. Add the missing
4002 argument levels if necessary. */
4003 if (DECL_TEMPLATE_INFO (tmpl
))
4004 args
= add_outermost_template_args (DECL_TI_ARGS (tmpl
), args
);
4006 info
= tree_cons (tmpl
, args
, NULL_TREE
);
4008 if (DECL_IMPLICIT_TYPEDEF_P (decl
))
4009 SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl
), info
);
4010 else if (DECL_LANG_SPECIFIC (decl
))
4011 DECL_TEMPLATE_INFO (decl
) = info
;
4013 return DECL_TEMPLATE_RESULT (tmpl
);
4017 push_template_decl (tree decl
)
4019 return push_template_decl_real (decl
, false);
4022 /* Called when a class template TYPE is redeclared with the indicated
4023 template PARMS, e.g.:
4025 template <class T> struct S;
4026 template <class T> struct S {}; */
4029 redeclare_class_template (tree type
, tree parms
)
4035 if (!TYPE_TEMPLATE_INFO (type
))
4037 error ("%qT is not a template type", type
);
4041 tmpl
= TYPE_TI_TEMPLATE (type
);
4042 if (!PRIMARY_TEMPLATE_P (tmpl
))
4043 /* The type is nested in some template class. Nothing to worry
4044 about here; there are no new template parameters for the nested
4050 error ("template specifiers not specified in declaration of %qD",
4055 parms
= INNERMOST_TEMPLATE_PARMS (parms
);
4056 tmpl_parms
= DECL_INNERMOST_TEMPLATE_PARMS (tmpl
);
4058 if (TREE_VEC_LENGTH (parms
) != TREE_VEC_LENGTH (tmpl_parms
))
4060 error ("previous declaration %q+D", tmpl
);
4061 error ("used %d template parameter(s) instead of %d",
4062 TREE_VEC_LENGTH (tmpl_parms
),
4063 TREE_VEC_LENGTH (parms
));
4067 for (i
= 0; i
< TREE_VEC_LENGTH (tmpl_parms
); ++i
)
4074 if (TREE_VEC_ELT (tmpl_parms
, i
) == error_mark_node
4075 || TREE_VEC_ELT (parms
, i
) == error_mark_node
)
4078 tmpl_parm
= TREE_VALUE (TREE_VEC_ELT (tmpl_parms
, i
));
4079 parm
= TREE_VALUE (TREE_VEC_ELT (parms
, i
));
4080 tmpl_default
= TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms
, i
));
4081 parm_default
= TREE_PURPOSE (TREE_VEC_ELT (parms
, i
));
4083 /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
4085 if (tmpl_parm
!= error_mark_node
4086 && (TREE_CODE (tmpl_parm
) != TREE_CODE (parm
)
4087 || (TREE_CODE (tmpl_parm
) != TYPE_DECL
4088 && !same_type_p (TREE_TYPE (tmpl_parm
), TREE_TYPE (parm
)))))
4090 error ("template parameter %q+#D", tmpl_parm
);
4091 error ("redeclared here as %q#D", parm
);
4095 if (tmpl_default
!= NULL_TREE
&& parm_default
!= NULL_TREE
)
4097 /* We have in [temp.param]:
4099 A template-parameter may not be given default arguments
4100 by two different declarations in the same scope. */
4101 error ("redefinition of default argument for %q#D", parm
);
4102 error ("%J original definition appeared here", tmpl_parm
);
4106 if (parm_default
!= NULL_TREE
)
4107 /* Update the previous template parameters (which are the ones
4108 that will really count) with the new default value. */
4109 TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms
, i
)) = parm_default
;
4110 else if (tmpl_default
!= NULL_TREE
)
4111 /* Update the new parameters, too; they'll be used as the
4112 parameters for any members. */
4113 TREE_PURPOSE (TREE_VEC_ELT (parms
, i
)) = tmpl_default
;
4119 /* Simplify EXPR if it is a non-dependent expression. Returns the
4120 (possibly simplified) expression. */
4123 fold_non_dependent_expr (tree expr
)
4125 if (expr
== NULL_TREE
)
4128 /* If we're in a template, but EXPR isn't value dependent, simplify
4129 it. We're supposed to treat:
4131 template <typename T> void f(T[1 + 1]);
4132 template <typename T> void f(T[2]);
4134 as two declarations of the same function, for example. */
4135 if (processing_template_decl
4136 && !type_dependent_expression_p (expr
)
4137 && !value_dependent_expression_p (expr
))
4139 HOST_WIDE_INT saved_processing_template_decl
;
4141 saved_processing_template_decl
= processing_template_decl
;
4142 processing_template_decl
= 0;
4143 expr
= tsubst_copy_and_build (expr
,
4146 /*in_decl=*/NULL_TREE
,
4147 /*function_p=*/false,
4148 /*integral_constant_expression_p=*/true);
4149 processing_template_decl
= saved_processing_template_decl
;
4154 /* EXPR is an expression which is used in a constant-expression context.
4155 For instance, it could be a VAR_DECL with a constant initializer.
4156 Extract the innest constant expression.
4158 This is basically a more powerful version of
4159 integral_constant_value, which can be used also in templates where
4160 initializers can maintain a syntactic rather than semantic form
4161 (even if they are non-dependent, for access-checking purposes). */
4164 fold_decl_constant_value (tree expr
)
4166 tree const_expr
= expr
;
4169 expr
= fold_non_dependent_expr (const_expr
);
4170 const_expr
= integral_constant_value (expr
);
4172 while (expr
!= const_expr
);
4177 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
4178 must be a function or a pointer-to-function type, as specified
4179 in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
4180 and check that the resulting function has external linkage. */
4183 convert_nontype_argument_function (tree type
, tree expr
)
4188 fn
= instantiate_type (type
, fns
, tf_none
);
4189 if (fn
== error_mark_node
)
4190 return error_mark_node
;
4193 if (TREE_CODE (fn_no_ptr
) == ADDR_EXPR
)
4194 fn_no_ptr
= TREE_OPERAND (fn_no_ptr
, 0);
4195 if (TREE_CODE (fn_no_ptr
) == BASELINK
)
4196 fn_no_ptr
= BASELINK_FUNCTIONS (fn_no_ptr
);
4198 /* [temp.arg.nontype]/1
4200 A template-argument for a non-type, non-template template-parameter
4203 -- the address of an object or function with external linkage. */
4204 if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr
))
4206 error ("%qE is not a valid template argument for type %qT "
4207 "because function %qD has not external linkage",
4208 expr
, type
, fn_no_ptr
);
4215 /* Attempt to convert the non-type template parameter EXPR to the
4216 indicated TYPE. If the conversion is successful, return the
4217 converted value. If the conversion is unsuccessful, return
4218 NULL_TREE if we issued an error message, or error_mark_node if we
4219 did not. We issue error messages for out-and-out bad template
4220 parameters, but not simply because the conversion failed, since we
4221 might be just trying to do argument deduction. Both TYPE and EXPR
4222 must be non-dependent.
4224 The conversion follows the special rules described in
4225 [temp.arg.nontype], and it is much more strict than an implicit
4228 This function is called twice for each template argument (see
4229 lookup_template_class for a more accurate description of this
4230 problem). This means that we need to handle expressions which
4231 are not valid in a C++ source, but can be created from the
4232 first call (for instance, casts to perform conversions). These
4233 hacks can go away after we fix the double coercion problem. */
4236 convert_nontype_argument (tree type
, tree expr
)
4240 /* Detect immediately string literals as invalid non-type argument.
4241 This special-case is not needed for correctness (we would easily
4242 catch this later), but only to provide better diagnostic for this
4243 common user mistake. As suggested by DR 100, we do not mention
4244 linkage issues in the diagnostic as this is not the point. */
4245 if (TREE_CODE (expr
) == STRING_CST
)
4247 error ("%qE is not a valid template argument for type %qT "
4248 "because string literals can never be used in this context",
4253 /* If we are in a template, EXPR may be non-dependent, but still
4254 have a syntactic, rather than semantic, form. For example, EXPR
4255 might be a SCOPE_REF, rather than the VAR_DECL to which the
4256 SCOPE_REF refers. Preserving the qualifying scope is necessary
4257 so that access checking can be performed when the template is
4258 instantiated -- but here we need the resolved form so that we can
4259 convert the argument. */
4260 expr
= fold_non_dependent_expr (expr
);
4261 if (error_operand_p (expr
))
4262 return error_mark_node
;
4263 expr_type
= TREE_TYPE (expr
);
4265 /* HACK: Due to double coercion, we can get a
4266 NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
4267 which is the tree that we built on the first call (see
4268 below when coercing to reference to object or to reference to
4269 function). We just strip everything and get to the arg.
4270 See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
4272 if (TREE_CODE (expr
) == NOP_EXPR
)
4274 if (TYPE_REF_OBJ_P (type
) || TYPE_REFFN_P (type
))
4276 /* ??? Maybe we could use convert_from_reference here, but we
4277 would need to relax its constraints because the NOP_EXPR
4278 could actually change the type to something more cv-qualified,
4279 and this is not folded by convert_from_reference. */
4280 tree addr
= TREE_OPERAND (expr
, 0);
4281 gcc_assert (TREE_CODE (expr_type
) == REFERENCE_TYPE
);
4282 gcc_assert (TREE_CODE (addr
) == ADDR_EXPR
);
4283 gcc_assert (TREE_CODE (TREE_TYPE (addr
)) == POINTER_TYPE
);
4284 gcc_assert (same_type_ignoring_top_level_qualifiers_p
4285 (TREE_TYPE (expr_type
),
4286 TREE_TYPE (TREE_TYPE (addr
))));
4288 expr
= TREE_OPERAND (addr
, 0);
4289 expr_type
= TREE_TYPE (expr
);
4292 /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
4293 parameter is a pointer to object, through decay and
4294 qualification conversion. Let's strip everything. */
4295 else if (TYPE_PTROBV_P (type
))
4298 gcc_assert (TREE_CODE (expr
) == ADDR_EXPR
);
4299 gcc_assert (TREE_CODE (TREE_TYPE (expr
)) == POINTER_TYPE
);
4300 /* Skip the ADDR_EXPR only if it is part of the decay for
4301 an array. Otherwise, it is part of the original argument
4302 in the source code. */
4303 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr
, 0))) == ARRAY_TYPE
)
4304 expr
= TREE_OPERAND (expr
, 0);
4305 expr_type
= TREE_TYPE (expr
);
4309 /* [temp.arg.nontype]/5, bullet 1
4311 For a non-type template-parameter of integral or enumeration type,
4312 integral promotions (_conv.prom_) and integral conversions
4313 (_conv.integral_) are applied. */
4314 if (INTEGRAL_TYPE_P (type
))
4316 if (!INTEGRAL_TYPE_P (expr_type
))
4317 return error_mark_node
;
4319 expr
= fold_decl_constant_value (expr
);
4320 /* Notice that there are constant expressions like '4 % 0' which
4321 do not fold into integer constants. */
4322 if (TREE_CODE (expr
) != INTEGER_CST
)
4324 error ("%qE is not a valid template argument for type %qT "
4325 "because it is a non-constant expression", expr
, type
);
4329 /* At this point, an implicit conversion does what we want,
4330 because we already know that the expression is of integral
4332 expr
= ocp_convert (type
, expr
, CONV_IMPLICIT
, LOOKUP_PROTECT
);
4333 if (expr
== error_mark_node
)
4334 return error_mark_node
;
4336 /* Conversion was allowed: fold it to a bare integer constant. */
4339 /* [temp.arg.nontype]/5, bullet 2
4341 For a non-type template-parameter of type pointer to object,
4342 qualification conversions (_conv.qual_) and the array-to-pointer
4343 conversion (_conv.array_) are applied. */
4344 else if (TYPE_PTROBV_P (type
))
4346 /* [temp.arg.nontype]/1 (TC1 version, DR 49):
4348 A template-argument for a non-type, non-template template-parameter
4349 shall be one of: [...]
4351 -- the name of a non-type template-parameter;
4352 -- the address of an object or function with external linkage, [...]
4353 expressed as "& id-expression" where the & is optional if the name
4354 refers to a function or array, or if the corresponding
4355 template-parameter is a reference.
4357 Here, we do not care about functions, as they are invalid anyway
4358 for a parameter of type pointer-to-object. */
4360 if (DECL_P (expr
) && DECL_TEMPLATE_PARM_P (expr
))
4361 /* Non-type template parameters are OK. */
4363 else if (TREE_CODE (expr
) != ADDR_EXPR
4364 && TREE_CODE (expr_type
) != ARRAY_TYPE
)
4366 if (TREE_CODE (expr
) == VAR_DECL
)
4368 error ("%qD is not a valid template argument "
4369 "because %qD is a variable, not the address of "
4374 /* Other values, like integer constants, might be valid
4375 non-type arguments of some other type. */
4376 return error_mark_node
;
4382 decl
= ((TREE_CODE (expr
) == ADDR_EXPR
)
4383 ? TREE_OPERAND (expr
, 0) : expr
);
4384 if (TREE_CODE (decl
) != VAR_DECL
)
4386 error ("%qE is not a valid template argument of type %qT "
4387 "because %qE is not a variable",
4391 else if (!DECL_EXTERNAL_LINKAGE_P (decl
))
4393 error ("%qE is not a valid template argument of type %qT "
4394 "because %qD does not have external linkage",
4400 expr
= decay_conversion (expr
);
4401 if (expr
== error_mark_node
)
4402 return error_mark_node
;
4404 expr
= perform_qualification_conversions (type
, expr
);
4405 if (expr
== error_mark_node
)
4406 return error_mark_node
;
4408 /* [temp.arg.nontype]/5, bullet 3
4410 For a non-type template-parameter of type reference to object, no
4411 conversions apply. The type referred to by the reference may be more
4412 cv-qualified than the (otherwise identical) type of the
4413 template-argument. The template-parameter is bound directly to the
4414 template-argument, which must be an lvalue. */
4415 else if (TYPE_REF_OBJ_P (type
))
4417 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type
),
4419 return error_mark_node
;
4421 if (!at_least_as_qualified_p (TREE_TYPE (type
), expr_type
))
4423 error ("%qE is not a valid template argument for type %qT "
4424 "because of conflicts in cv-qualification", expr
, type
);
4428 if (!real_lvalue_p (expr
))
4430 error ("%qE is not a valid template argument for type %qT "
4431 "because it is not an lvalue", expr
, type
);
4435 /* [temp.arg.nontype]/1
4437 A template-argument for a non-type, non-template template-parameter
4438 shall be one of: [...]
4440 -- the address of an object or function with external linkage. */
4441 if (!DECL_EXTERNAL_LINKAGE_P (expr
))
4443 error ("%qE is not a valid template argument for type %qT "
4444 "because object %qD has not external linkage",
4449 expr
= build_nop (type
, build_address (expr
));
4451 /* [temp.arg.nontype]/5, bullet 4
4453 For a non-type template-parameter of type pointer to function, only
4454 the function-to-pointer conversion (_conv.func_) is applied. If the
4455 template-argument represents a set of overloaded functions (or a
4456 pointer to such), the matching function is selected from the set
4458 else if (TYPE_PTRFN_P (type
))
4460 /* If the argument is a template-id, we might not have enough
4461 context information to decay the pointer. */
4462 if (!type_unknown_p (expr_type
))
4464 expr
= decay_conversion (expr
);
4465 if (expr
== error_mark_node
)
4466 return error_mark_node
;
4469 expr
= convert_nontype_argument_function (type
, expr
);
4470 if (!expr
|| expr
== error_mark_node
)
4473 /* [temp.arg.nontype]/5, bullet 5
4475 For a non-type template-parameter of type reference to function, no
4476 conversions apply. If the template-argument represents a set of
4477 overloaded functions, the matching function is selected from the set
4479 else if (TYPE_REFFN_P (type
))
4481 if (TREE_CODE (expr
) == ADDR_EXPR
)
4483 error ("%qE is not a valid template argument for type %qT "
4484 "because it is a pointer", expr
, type
);
4485 inform ("try using %qE instead", TREE_OPERAND (expr
, 0));
4489 expr
= convert_nontype_argument_function (TREE_TYPE (type
), expr
);
4490 if (!expr
|| expr
== error_mark_node
)
4493 expr
= build_nop (type
, build_address (expr
));
4495 /* [temp.arg.nontype]/5, bullet 6
4497 For a non-type template-parameter of type pointer to member function,
4498 no conversions apply. If the template-argument represents a set of
4499 overloaded member functions, the matching member function is selected
4500 from the set (_over.over_). */
4501 else if (TYPE_PTRMEMFUNC_P (type
))
4503 expr
= instantiate_type (type
, expr
, tf_none
);
4504 if (expr
== error_mark_node
)
4505 return error_mark_node
;
4507 /* There is no way to disable standard conversions in
4508 resolve_address_of_overloaded_function (called by
4509 instantiate_type). It is possible that the call succeeded by
4510 converting &B::I to &D::I (where B is a base of D), so we need
4511 to reject this conversion here.
4513 Actually, even if there was a way to disable standard conversions,
4514 it would still be better to reject them here so that we can
4515 provide a superior diagnostic. */
4516 if (!same_type_p (TREE_TYPE (expr
), type
))
4518 /* Make sure we are just one standard conversion off. */
4519 gcc_assert (can_convert (type
, TREE_TYPE (expr
)));
4520 error ("%qE is not a valid template argument for type %qT "
4521 "because it is of type %qT", expr
, type
,
4523 inform ("standard conversions are not allowed in this context");
4527 /* [temp.arg.nontype]/5, bullet 7
4529 For a non-type template-parameter of type pointer to data member,
4530 qualification conversions (_conv.qual_) are applied. */
4531 else if (TYPE_PTRMEM_P (type
))
4533 expr
= perform_qualification_conversions (type
, expr
);
4534 if (expr
== error_mark_node
)
4537 /* A template non-type parameter must be one of the above. */
4541 /* Sanity check: did we actually convert the argument to the
4543 gcc_assert (same_type_p (type
, TREE_TYPE (expr
)));
4548 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
4549 template template parameters. Both PARM_PARMS and ARG_PARMS are
4550 vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
4553 Consider the example:
4554 template <class T> class A;
4555 template<template <class U> class TT> class B;
4557 For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
4558 the parameters to A, and OUTER_ARGS contains A. */
4561 coerce_template_template_parms (tree parm_parms
,
4563 tsubst_flags_t complain
,
4567 int nparms
, nargs
, i
;
4570 gcc_assert (TREE_CODE (parm_parms
) == TREE_VEC
);
4571 gcc_assert (TREE_CODE (arg_parms
) == TREE_VEC
);
4573 nparms
= TREE_VEC_LENGTH (parm_parms
);
4574 nargs
= TREE_VEC_LENGTH (arg_parms
);
4576 if (nargs
!= nparms
)
4579 for (i
= 0; i
< nparms
; ++i
)
4581 if (TREE_VEC_ELT (parm_parms
, i
) == error_mark_node
4582 || TREE_VEC_ELT (arg_parms
, i
) == error_mark_node
)
4585 parm
= TREE_VALUE (TREE_VEC_ELT (parm_parms
, i
));
4586 arg
= TREE_VALUE (TREE_VEC_ELT (arg_parms
, i
));
4588 if (arg
== NULL_TREE
|| arg
== error_mark_node
4589 || parm
== NULL_TREE
|| parm
== error_mark_node
)
4592 if (TREE_CODE (arg
) != TREE_CODE (parm
))
4595 switch (TREE_CODE (parm
))
4598 /* We encounter instantiations of templates like
4599 template <template <template <class> class> class TT>
4602 tree parmparm
= DECL_INNERMOST_TEMPLATE_PARMS (parm
);
4603 tree argparm
= DECL_INNERMOST_TEMPLATE_PARMS (arg
);
4605 if (!coerce_template_template_parms
4606 (parmparm
, argparm
, complain
, in_decl
, outer_args
))
4612 if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm
))
4613 != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg
)))
4614 /* One is a parameter pack, the other is not. */
4619 /* The tsubst call is used to handle cases such as
4621 template <int> class C {};
4622 template <class T, template <T> class TT> class D {};
4625 i.e. the parameter list of TT depends on earlier parameters. */
4626 if (!dependent_type_p (TREE_TYPE (arg
))
4628 (tsubst (TREE_TYPE (parm
), outer_args
, complain
, in_decl
),
4632 if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm
))
4633 != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg
)))
4634 /* One is a parameter pack, the other is not. */
4645 /* Convert the indicated template ARG as necessary to match the
4646 indicated template PARM. Returns the converted ARG, or
4647 error_mark_node if the conversion was unsuccessful. Error and
4648 warning messages are issued under control of COMPLAIN. This
4649 conversion is for the Ith parameter in the parameter list. ARGS is
4650 the full set of template arguments deduced so far. */
4653 convert_template_argument (tree parm
,
4656 tsubst_flags_t complain
,
4661 int is_type
, requires_type
, is_tmpl_type
, requires_tmpl_type
;
4662 tree check_arg
= arg
;
4664 if (TREE_CODE (arg
) == TREE_LIST
4665 && TREE_CODE (TREE_VALUE (arg
)) == OFFSET_REF
)
4667 /* The template argument was the name of some
4668 member function. That's usually
4669 invalid, but static members are OK. In any
4670 case, grab the underlying fields/functions
4671 and issue an error later if required. */
4672 arg
= TREE_VALUE (arg
);
4673 TREE_TYPE (arg
) = unknown_type_node
;
4676 requires_tmpl_type
= TREE_CODE (parm
) == TEMPLATE_DECL
;
4677 requires_type
= (TREE_CODE (parm
) == TYPE_DECL
4678 || requires_tmpl_type
);
4680 /* When determining whether an argument pack expansion is a template,
4681 look at the pattern. */
4682 if (TREE_CODE (check_arg
) == TYPE_PACK_EXPANSION
)
4683 check_arg
= PACK_EXPANSION_PATTERN (check_arg
);
4686 ((TREE_CODE (check_arg
) == TEMPLATE_DECL
4687 && TREE_CODE (DECL_TEMPLATE_RESULT (check_arg
)) == TYPE_DECL
)
4688 || TREE_CODE (check_arg
) == TEMPLATE_TEMPLATE_PARM
4689 || TREE_CODE (check_arg
) == UNBOUND_CLASS_TEMPLATE
);
4692 && (TREE_CODE (arg
) == TEMPLATE_TEMPLATE_PARM
4693 || TREE_CODE (arg
) == UNBOUND_CLASS_TEMPLATE
))
4694 arg
= TYPE_STUB_DECL (arg
);
4696 is_type
= TYPE_P (arg
) || is_tmpl_type
;
4698 if (requires_type
&& ! is_type
&& TREE_CODE (arg
) == SCOPE_REF
4699 && TREE_CODE (TREE_OPERAND (arg
, 0)) == TEMPLATE_TYPE_PARM
)
4701 pedwarn ("to refer to a type member of a template parameter, "
4702 "use %<typename %E%>", arg
);
4704 arg
= make_typename_type (TREE_OPERAND (arg
, 0),
4705 TREE_OPERAND (arg
, 1),
4707 complain
& tf_error
);
4710 if (is_type
!= requires_type
)
4714 if (complain
& tf_error
)
4716 error ("type/value mismatch at argument %d in template "
4717 "parameter list for %qD",
4720 error (" expected a constant of type %qT, got %qT",
4722 (is_tmpl_type
? DECL_NAME (arg
) : arg
));
4723 else if (requires_tmpl_type
)
4724 error (" expected a class template, got %qE", arg
);
4726 error (" expected a type, got %qE", arg
);
4729 return error_mark_node
;
4731 if (is_tmpl_type
^ requires_tmpl_type
)
4733 if (in_decl
&& (complain
& tf_error
))
4735 error ("type/value mismatch at argument %d in template "
4736 "parameter list for %qD",
4739 error (" expected a type, got %qT", DECL_NAME (arg
));
4741 error (" expected a class template, got %qT", arg
);
4743 return error_mark_node
;
4748 if (requires_tmpl_type
)
4750 if (TREE_CODE (TREE_TYPE (arg
)) == UNBOUND_CLASS_TEMPLATE
)
4751 /* The number of argument required is not known yet.
4752 Just accept it for now. */
4753 val
= TREE_TYPE (arg
);
4756 tree parmparm
= DECL_INNERMOST_TEMPLATE_PARMS (parm
);
4760 /* When determining whether a pack expansion is a template,
4761 look at the pattern. */
4762 if (TREE_CODE (check_arg
) == TYPE_PACK_EXPANSION
)
4763 check_arg
= PACK_EXPANSION_PATTERN (check_arg
);
4765 argparm
= DECL_INNERMOST_TEMPLATE_PARMS (check_arg
);
4767 if (coerce_template_template_parms (parmparm
, argparm
,
4773 /* TEMPLATE_TEMPLATE_PARM node is preferred over
4775 if (val
!= error_mark_node
)
4777 if (DECL_TEMPLATE_TEMPLATE_PARM_P (val
))
4778 val
= TREE_TYPE (val
);
4779 else if (TREE_CODE (val
) == TYPE_PACK_EXPANSION
4780 && DECL_TEMPLATE_TEMPLATE_PARM_P (check_arg
))
4782 val
= TREE_TYPE (check_arg
);
4783 val
= make_pack_expansion (val
);
4789 if (in_decl
&& (complain
& tf_error
))
4791 error ("type/value mismatch at argument %d in "
4792 "template parameter list for %qD",
4794 error (" expected a template of type %qD, got %qD",
4798 val
= error_mark_node
;
4804 /* We only form one instance of each template specialization.
4805 Therefore, if we use a non-canonical variant (i.e., a
4806 typedef), any future messages referring to the type will use
4807 the typedef, which is confusing if those future uses do not
4808 themselves also use the typedef. */
4810 val
= canonical_type_variant (val
);
4814 tree t
= tsubst (TREE_TYPE (parm
), args
, complain
, in_decl
);
4816 if (invalid_nontype_parm_type_p (t
, complain
))
4817 return error_mark_node
;
4819 if (!uses_template_parms (arg
) && !uses_template_parms (t
))
4820 /* We used to call digest_init here. However, digest_init
4821 will report errors, which we don't want when complain
4822 is zero. More importantly, digest_init will try too
4823 hard to convert things: for example, `0' should not be
4824 converted to pointer type at this point according to
4825 the standard. Accepting this is not merely an
4826 extension, since deciding whether or not these
4827 conversions can occur is part of determining which
4828 function template to call, or whether a given explicit
4829 argument specification is valid. */
4830 val
= convert_nontype_argument (t
, arg
);
4834 if (val
== NULL_TREE
)
4835 val
= error_mark_node
;
4836 else if (val
== error_mark_node
&& (complain
& tf_error
))
4837 error ("could not convert template argument %qE to %qT", arg
, t
);
4843 /* Coerces the remaining template arguments in INNER_ARGS (from
4844 ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
4845 Returns the coerced argument pack. PARM_IDX is the position of this
4846 parameter in the template parameter list. ARGS is the original
4847 template argument list. */
4849 coerce_template_parameter_pack (tree parms
,
4857 tsubst_flags_t complain
)
4859 tree parm
= TREE_VEC_ELT (parms
, parm_idx
);
4860 int nargs
= inner_args
? NUM_TMPL_ARGS (inner_args
) : 0;
4863 tree packed_types
= NULL_TREE
;
4865 if (arg_idx
> nargs
)
4868 packed_args
= make_tree_vec (nargs
- arg_idx
);
4870 if (TREE_CODE (TREE_VALUE (parm
)) == PARM_DECL
4871 && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm
))))
4873 /* When the template parameter is a non-type template
4874 parameter pack whose type uses parameter packs, we need
4875 to look at each of the template arguments
4876 separately. Build a vector of the types for these
4877 non-type template parameters in PACKED_TYPES. */
4879 = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm
)));
4880 packed_types
= tsubst_pack_expansion (expansion
, args
,
4883 if (packed_types
== error_mark_node
)
4884 return error_mark_node
;
4886 /* Check that we have the right number of arguments. */
4888 && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args
, arg_idx
))
4889 && nargs
- arg_idx
!= TREE_VEC_LENGTH (packed_types
))
4892 = TREE_VEC_LENGTH (parms
) - 1 + TREE_VEC_LENGTH (packed_types
);
4893 error ("wrong number of template arguments (%d, should be %d)",
4894 nargs
, needed_parms
);
4895 return error_mark_node
;
4898 /* If we aren't able to check the actual arguments now
4899 (because they haven't been expanded yet), we can at least
4900 verify that all of the types used for the non-type
4901 template parameter pack are, in fact, valid for non-type
4902 template parameters. */
4904 && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args
, arg_idx
)))
4906 int j
, len
= TREE_VEC_LENGTH (packed_types
);
4907 for (j
= 0; j
< len
; ++j
)
4909 tree t
= TREE_VEC_ELT (packed_types
, j
);
4910 if (invalid_nontype_parm_type_p (t
, complain
))
4911 return error_mark_node
;
4916 /* Convert the remaining arguments, which will be a part of the
4917 parameter pack "parm". */
4918 for (; arg_idx
< nargs
; ++arg_idx
)
4920 tree arg
= TREE_VEC_ELT (inner_args
, arg_idx
);
4921 tree actual_parm
= TREE_VALUE (parm
);
4923 if (packed_types
&& !PACK_EXPANSION_P (arg
))
4925 /* When we have a vector of types (corresponding to the
4926 non-type template parameter pack that uses parameter
4927 packs in its type, as mention above), and the
4928 argument is not an expansion (which expands to a
4929 currently unknown number of arguments), clone the
4930 parm and give it the next type in PACKED_TYPES. */
4931 actual_parm
= copy_node (actual_parm
);
4932 TREE_TYPE (actual_parm
) =
4933 TREE_VEC_ELT (packed_types
, arg_idx
- parm_idx
);
4936 arg
= convert_template_argument (actual_parm
,
4937 arg
, new_args
, complain
, parm_idx
,
4939 if (arg
== error_mark_node
)
4941 TREE_VEC_ELT (packed_args
, arg_idx
- parm_idx
) = arg
;
4944 if (TREE_CODE (TREE_VALUE (parm
)) == TYPE_DECL
4945 || TREE_CODE (TREE_VALUE (parm
)) == TEMPLATE_DECL
)
4946 argument_pack
= make_node (TYPE_ARGUMENT_PACK
);
4949 argument_pack
= make_node (NONTYPE_ARGUMENT_PACK
);
4950 TREE_TYPE (argument_pack
) = TREE_TYPE (TREE_VALUE (parm
));
4951 TREE_CONSTANT (argument_pack
) = 1;
4954 SET_ARGUMENT_PACK_ARGS (argument_pack
, packed_args
);
4955 return argument_pack
;
4958 /* Convert all template arguments to their appropriate types, and
4959 return a vector containing the innermost resulting template
4960 arguments. If any error occurs, return error_mark_node. Error and
4961 warning messages are issued under control of COMPLAIN.
4963 If REQUIRE_ALL_ARGS is false, argument deduction will be performed
4964 for arguments not specified in ARGS. Otherwise, if
4965 USE_DEFAULT_ARGS is true, default arguments will be used to fill in
4966 unspecified arguments. If REQUIRE_ALL_ARGS is true, but
4967 USE_DEFAULT_ARGS is false, then all arguments must be specified in
4971 coerce_template_parms (tree parms
,
4974 tsubst_flags_t complain
,
4975 bool require_all_args
,
4976 bool use_default_args
)
4978 int nparms
, nargs
, parm_idx
, arg_idx
, lost
= 0;
4981 tree new_inner_args
;
4982 bool saved_skip_evaluation
;
4984 /* When used as a boolean value, indicates whether this is a
4985 variadic template parameter list. Since it's an int, we can also
4986 subtract it from nparms to get the number of non-variadic
4991 = expand_template_argument_pack (INNERMOST_TEMPLATE_ARGS (args
));
4993 nargs
= inner_args
? NUM_TMPL_ARGS (inner_args
) : 0;
4994 nparms
= TREE_VEC_LENGTH (parms
);
4996 /* Determine if there are any parameter packs. */
4997 for (parm_idx
= 0; parm_idx
< nparms
; ++parm_idx
)
4999 tree tparm
= TREE_VALUE (TREE_VEC_ELT (parms
, parm_idx
));
5000 if (template_parameter_pack_p (tparm
))
5007 if ((nargs
> nparms
- variadic_p
&& !variadic_p
)
5008 || (nargs
< nparms
- variadic_p
5010 && (!use_default_args
5011 || (TREE_VEC_ELT (parms
, nargs
) != error_mark_node
5012 && !TREE_PURPOSE (TREE_VEC_ELT (parms
, nargs
))))))
5014 if (complain
& tf_error
)
5016 const char *or_more
= "";
5019 or_more
= " or more";
5023 error ("wrong number of template arguments (%d, should be %d%s)",
5024 nargs
, nparms
, or_more
);
5027 error ("provided for %q+D", in_decl
);
5030 return error_mark_node
;
5033 /* We need to evaluate the template arguments, even though this
5034 template-id may be nested within a "sizeof". */
5035 saved_skip_evaluation
= skip_evaluation
;
5036 skip_evaluation
= false;
5037 new_inner_args
= make_tree_vec (nparms
);
5038 new_args
= add_outermost_template_args (args
, new_inner_args
);
5039 for (parm_idx
= 0, arg_idx
= 0; parm_idx
< nparms
; parm_idx
++, arg_idx
++)
5044 /* Get the Ith template parameter. */
5045 parm
= TREE_VEC_ELT (parms
, parm_idx
);
5047 if (parm
== error_mark_node
)
5049 TREE_VEC_ELT (new_inner_args
, arg_idx
) = error_mark_node
;
5053 /* Calculate the next argument. */
5054 if (template_parameter_pack_p (TREE_VALUE (parm
)))
5056 /* All remaining arguments will be placed in the
5057 template parameter pack PARM. */
5058 arg
= coerce_template_parameter_pack (parms
, parm_idx
, args
,
5059 inner_args
, arg_idx
,
5063 /* Store this argument. */
5064 if (arg
== error_mark_node
)
5066 TREE_VEC_ELT (new_inner_args
, parm_idx
) = arg
;
5068 /* We are done with all of the arguments. */
5073 else if (arg_idx
< nargs
)
5075 arg
= TREE_VEC_ELT (inner_args
, arg_idx
);
5077 if (arg
&& PACK_EXPANSION_P (arg
))
5079 /* If ARG is a pack expansion, but PARM is not a
5080 template parameter pack (if it were, we would have
5081 handled it above), we're trying to expand into a
5082 fixed-length argument list. */
5083 if (TREE_CODE (arg
) == EXPR_PACK_EXPANSION
)
5084 error ("cannot expand %<%E%> into a fixed-length "
5085 "argument list", arg
);
5087 error ("cannot expand %<%T%> into a fixed-length "
5088 "argument list", arg
);
5091 else if (require_all_args
)
5092 /* There must be a default arg in this case. */
5093 arg
= tsubst_template_arg (TREE_PURPOSE (parm
), new_args
,
5098 if (arg
== error_mark_node
)
5100 if (complain
& tf_error
)
5101 error ("template argument %d is invalid", arg_idx
+ 1);
5104 /* This only occurs if there was an error in the template
5105 parameter list itself (which we would already have
5106 reported) that we are trying to recover from, e.g., a class
5107 template with a parameter list such as
5108 template<typename..., typename>. */
5109 return error_mark_node
;
5111 arg
= convert_template_argument (TREE_VALUE (parm
),
5112 arg
, new_args
, complain
,
5115 if (arg
== error_mark_node
)
5117 TREE_VEC_ELT (new_inner_args
, arg_idx
) = arg
;
5119 skip_evaluation
= saved_skip_evaluation
;
5122 return error_mark_node
;
5124 return new_inner_args
;
5127 /* Returns 1 if template args OT and NT are equivalent. */
5130 template_args_equal (tree ot
, tree nt
)
5135 if (TREE_CODE (nt
) == TREE_VEC
)
5136 /* For member templates */
5137 return TREE_CODE (ot
) == TREE_VEC
&& comp_template_args (ot
, nt
);
5138 else if (PACK_EXPANSION_P (ot
))
5139 return PACK_EXPANSION_P (nt
)
5140 && template_args_equal (PACK_EXPANSION_PATTERN (ot
),
5141 PACK_EXPANSION_PATTERN (nt
));
5142 else if (TYPE_P (nt
))
5143 return TYPE_P (ot
) && same_type_p (ot
, nt
);
5144 else if (TREE_CODE (ot
) == TREE_VEC
|| TYPE_P (ot
))
5147 return cp_tree_equal (ot
, nt
);
5150 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
5151 of template arguments. Returns 0 otherwise. */
5154 comp_template_args (tree oldargs
, tree newargs
)
5158 oldargs
= expand_template_argument_pack (oldargs
);
5159 newargs
= expand_template_argument_pack (newargs
);
5161 if (TREE_VEC_LENGTH (oldargs
) != TREE_VEC_LENGTH (newargs
))
5164 for (i
= 0; i
< TREE_VEC_LENGTH (oldargs
); ++i
)
5166 tree nt
= TREE_VEC_ELT (newargs
, i
);
5167 tree ot
= TREE_VEC_ELT (oldargs
, i
);
5169 if (! template_args_equal (ot
, nt
))
5176 add_pending_template (tree d
)
5178 tree ti
= (TYPE_P (d
)
5179 ? CLASSTYPE_TEMPLATE_INFO (d
)
5180 : DECL_TEMPLATE_INFO (d
));
5181 struct pending_template
*pt
;
5184 if (TI_PENDING_TEMPLATE_FLAG (ti
))
5187 /* We are called both from instantiate_decl, where we've already had a
5188 tinst_level pushed, and instantiate_template, where we haven't.
5190 level
= !current_tinst_level
|| current_tinst_level
->decl
!= d
;
5193 push_tinst_level (d
);
5195 pt
= GGC_NEW (struct pending_template
);
5197 pt
->tinst
= current_tinst_level
;
5198 if (last_pending_template
)
5199 last_pending_template
->next
= pt
;
5201 pending_templates
= pt
;
5203 last_pending_template
= pt
;
5205 TI_PENDING_TEMPLATE_FLAG (ti
) = 1;
5212 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
5213 ARGLIST. Valid choices for FNS are given in the cp-tree.def
5214 documentation for TEMPLATE_ID_EXPR. */
5217 lookup_template_function (tree fns
, tree arglist
)
5221 if (fns
== error_mark_node
|| arglist
== error_mark_node
)
5222 return error_mark_node
;
5224 gcc_assert (!arglist
|| TREE_CODE (arglist
) == TREE_VEC
);
5225 gcc_assert (fns
&& (is_overloaded_fn (fns
)
5226 || TREE_CODE (fns
) == IDENTIFIER_NODE
));
5228 if (BASELINK_P (fns
))
5230 BASELINK_FUNCTIONS (fns
) = build2 (TEMPLATE_ID_EXPR
,
5232 BASELINK_FUNCTIONS (fns
),
5237 type
= TREE_TYPE (fns
);
5238 if (TREE_CODE (fns
) == OVERLOAD
|| !type
)
5239 type
= unknown_type_node
;
5241 return build2 (TEMPLATE_ID_EXPR
, type
, fns
, arglist
);
5244 /* Within the scope of a template class S<T>, the name S gets bound
5245 (in build_self_reference) to a TYPE_DECL for the class, not a
5246 TEMPLATE_DECL. If DECL is a TYPE_DECL for current_class_type,
5247 or one of its enclosing classes, and that type is a template,
5248 return the associated TEMPLATE_DECL. Otherwise, the original
5249 DECL is returned. */
5252 maybe_get_template_decl_from_type_decl (tree decl
)
5254 return (decl
!= NULL_TREE
5255 && TREE_CODE (decl
) == TYPE_DECL
5256 && DECL_ARTIFICIAL (decl
)
5257 && CLASS_TYPE_P (TREE_TYPE (decl
))
5258 && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl
)))
5259 ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl
)) : decl
;
5262 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
5263 parameters, find the desired type.
5265 D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
5267 IN_DECL, if non-NULL, is the template declaration we are trying to
5270 If ENTERING_SCOPE is nonzero, we are about to enter the scope of
5271 the class we are looking up.
5273 Issue error and warning messages under control of COMPLAIN.
5275 If the template class is really a local class in a template
5276 function, then the FUNCTION_CONTEXT is the function in which it is
5279 ??? Note that this function is currently called *twice* for each
5280 template-id: the first time from the parser, while creating the
5281 incomplete type (finish_template_type), and the second type during the
5282 real instantiation (instantiate_template_class). This is surely something
5283 that we want to avoid. It also causes some problems with argument
5284 coercion (see convert_nontype_argument for more information on this). */
5287 lookup_template_class (tree d1
,
5292 tsubst_flags_t complain
)
5294 tree
template = NULL_TREE
, parmlist
;
5297 timevar_push (TV_NAME_LOOKUP
);
5299 if (TREE_CODE (d1
) == IDENTIFIER_NODE
)
5301 tree value
= innermost_non_namespace_value (d1
);
5302 if (value
&& DECL_TEMPLATE_TEMPLATE_PARM_P (value
))
5307 push_decl_namespace (context
);
5308 template = lookup_name (d1
);
5309 template = maybe_get_template_decl_from_type_decl (template);
5311 pop_decl_namespace ();
5314 context
= DECL_CONTEXT (template);
5316 else if (TREE_CODE (d1
) == TYPE_DECL
&& IS_AGGR_TYPE (TREE_TYPE (d1
)))
5318 tree type
= TREE_TYPE (d1
);
5320 /* If we are declaring a constructor, say A<T>::A<T>, we will get
5321 an implicit typename for the second A. Deal with it. */
5322 if (TREE_CODE (type
) == TYPENAME_TYPE
&& TREE_TYPE (type
))
5323 type
= TREE_TYPE (type
);
5325 if (CLASSTYPE_TEMPLATE_INFO (type
))
5327 template = CLASSTYPE_TI_TEMPLATE (type
);
5328 d1
= DECL_NAME (template);
5331 else if (TREE_CODE (d1
) == ENUMERAL_TYPE
5332 || (TYPE_P (d1
) && IS_AGGR_TYPE (d1
)))
5334 template = TYPE_TI_TEMPLATE (d1
);
5335 d1
= DECL_NAME (template);
5337 else if (TREE_CODE (d1
) == TEMPLATE_DECL
5338 && TREE_CODE (DECL_TEMPLATE_RESULT (d1
)) == TYPE_DECL
)
5341 d1
= DECL_NAME (template);
5342 context
= DECL_CONTEXT (template);
5345 /* Issue an error message if we didn't find a template. */
5348 if (complain
& tf_error
)
5349 error ("%qT is not a template", d1
);
5350 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, error_mark_node
);
5353 if (TREE_CODE (template) != TEMPLATE_DECL
5354 /* Make sure it's a user visible template, if it was named by
5356 || ((complain
& tf_user
) && !DECL_TEMPLATE_PARM_P (template)
5357 && !PRIMARY_TEMPLATE_P (template)))
5359 if (complain
& tf_error
)
5361 error ("non-template type %qT used as a template", d1
);
5363 error ("for template declaration %q+D", in_decl
);
5365 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, error_mark_node
);
5368 complain
&= ~tf_user
;
5370 if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
5372 /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
5373 template arguments */
5378 parmlist
= DECL_INNERMOST_TEMPLATE_PARMS (template);
5380 /* Consider an example where a template template parameter declared as
5382 template <class T, class U = std::allocator<T> > class TT
5384 The template parameter level of T and U are one level larger than
5385 of TT. To proper process the default argument of U, say when an
5386 instantiation `TT<int>' is seen, we need to build the full
5387 arguments containing {int} as the innermost level. Outer levels,
5388 available when not appearing as default template argument, can be
5389 obtained from `current_template_args ()'.
5391 Suppose that TT is later substituted with std::vector. The above
5392 instantiation is `TT<int, std::allocator<T> >' with TT at
5393 level 1, and T at level 2, while the template arguments at level 1
5394 becomes {std::vector} and the inner level 2 is {int}. */
5396 if (current_template_parms
)
5397 arglist
= add_to_template_args (current_template_args (), arglist
);
5399 arglist2
= coerce_template_parms (parmlist
, arglist
, template,
5401 /*require_all_args=*/true,
5402 /*use_default_args=*/true);
5403 if (arglist2
== error_mark_node
5404 || (!uses_template_parms (arglist2
)
5405 && check_instantiated_args (template, arglist2
, complain
)))
5406 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, error_mark_node
);
5408 parm
= bind_template_template_parm (TREE_TYPE (template), arglist2
);
5409 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, parm
);
5413 tree template_type
= TREE_TYPE (template);
5416 tree found
= NULL_TREE
;
5419 int is_partial_instantiation
;
5421 gen_tmpl
= most_general_template (template);
5422 parmlist
= DECL_TEMPLATE_PARMS (gen_tmpl
);
5423 parm_depth
= TMPL_PARMS_DEPTH (parmlist
);
5424 arg_depth
= TMPL_ARGS_DEPTH (arglist
);
5426 if (arg_depth
== 1 && parm_depth
> 1)
5428 /* We've been given an incomplete set of template arguments.
5431 template <class T> struct S1 {
5432 template <class U> struct S2 {};
5433 template <class U> struct S2<U*> {};
5436 we will be called with an ARGLIST of `U*', but the
5437 TEMPLATE will be `template <class T> template
5438 <class U> struct S1<T>::S2'. We must fill in the missing
5441 = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
5443 arg_depth
= TMPL_ARGS_DEPTH (arglist
);
5446 /* Now we should have enough arguments. */
5447 gcc_assert (parm_depth
== arg_depth
);
5449 /* From here on, we're only interested in the most general
5451 template = gen_tmpl
;
5453 /* Calculate the BOUND_ARGS. These will be the args that are
5454 actually tsubst'd into the definition to create the
5458 /* We have multiple levels of arguments to coerce, at once. */
5460 int saved_depth
= TMPL_ARGS_DEPTH (arglist
);
5462 tree bound_args
= make_tree_vec (parm_depth
);
5464 for (i
= saved_depth
,
5465 t
= DECL_TEMPLATE_PARMS (template);
5466 i
> 0 && t
!= NULL_TREE
;
5467 --i
, t
= TREE_CHAIN (t
))
5469 tree a
= coerce_template_parms (TREE_VALUE (t
),
5472 /*require_all_args=*/true,
5473 /*use_default_args=*/true);
5475 /* Don't process further if one of the levels fails. */
5476 if (a
== error_mark_node
)
5478 /* Restore the ARGLIST to its full size. */
5479 TREE_VEC_LENGTH (arglist
) = saved_depth
;
5480 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, error_mark_node
);
5483 SET_TMPL_ARGS_LEVEL (bound_args
, i
, a
);
5485 /* We temporarily reduce the length of the ARGLIST so
5486 that coerce_template_parms will see only the arguments
5487 corresponding to the template parameters it is
5489 TREE_VEC_LENGTH (arglist
)--;
5492 /* Restore the ARGLIST to its full size. */
5493 TREE_VEC_LENGTH (arglist
) = saved_depth
;
5495 arglist
= bound_args
;
5499 = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist
),
5500 INNERMOST_TEMPLATE_ARGS (arglist
),
5503 /*require_all_args=*/true,
5504 /*use_default_args=*/true);
5506 if (arglist
== error_mark_node
)
5507 /* We were unable to bind the arguments. */
5508 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, error_mark_node
);
5510 /* In the scope of a template class, explicit references to the
5511 template class refer to the type of the template, not any
5512 instantiation of it. For example, in:
5514 template <class T> class C { void f(C<T>); }
5516 the `C<T>' is just the same as `C'. Outside of the
5517 class, however, such a reference is an instantiation. */
5518 if (comp_template_args (TYPE_TI_ARGS (template_type
),
5521 found
= template_type
;
5523 if (!entering_scope
&& PRIMARY_TEMPLATE_P (template))
5527 for (ctx
= current_class_type
;
5528 ctx
&& TREE_CODE (ctx
) != NAMESPACE_DECL
;
5530 ? TYPE_CONTEXT (ctx
)
5531 : DECL_CONTEXT (ctx
)))
5532 if (TYPE_P (ctx
) && same_type_p (ctx
, template_type
))
5535 /* We're not in the scope of the class, so the
5536 TEMPLATE_TYPE is not the type we want after all. */
5542 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, found
);
5544 /* If we already have this specialization, return it. */
5545 found
= retrieve_specialization (template, arglist
,
5546 /*class_specializations_p=*/false);
5548 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, found
);
5550 /* This type is a "partial instantiation" if any of the template
5551 arguments still involve template parameters. Note that we set
5552 IS_PARTIAL_INSTANTIATION for partial specializations as
5554 is_partial_instantiation
= uses_template_parms (arglist
);
5556 /* If the deduced arguments are invalid, then the binding
5558 if (!is_partial_instantiation
5559 && check_instantiated_args (template,
5560 INNERMOST_TEMPLATE_ARGS (arglist
),
5562 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, error_mark_node
);
5564 if (!is_partial_instantiation
5565 && !PRIMARY_TEMPLATE_P (template)
5566 && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL
)
5568 found
= xref_tag_from_type (TREE_TYPE (template),
5569 DECL_NAME (template),
5570 /*tag_scope=*/ts_global
);
5571 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, found
);
5574 context
= tsubst (DECL_CONTEXT (template), arglist
,
5577 context
= global_namespace
;
5579 /* Create the type. */
5580 if (TREE_CODE (template_type
) == ENUMERAL_TYPE
)
5582 if (!is_partial_instantiation
)
5584 set_current_access_from_decl (TYPE_NAME (template_type
));
5585 t
= start_enum (TYPE_IDENTIFIER (template_type
));
5588 /* We don't want to call start_enum for this type, since
5589 the values for the enumeration constants may involve
5590 template parameters. And, no one should be interested
5591 in the enumeration constants for such a type. */
5592 t
= make_node (ENUMERAL_TYPE
);
5596 t
= make_aggr_type (TREE_CODE (template_type
));
5597 CLASSTYPE_DECLARED_CLASS (t
)
5598 = CLASSTYPE_DECLARED_CLASS (template_type
);
5599 SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t
);
5600 TYPE_FOR_JAVA (t
) = TYPE_FOR_JAVA (template_type
);
5602 /* A local class. Make sure the decl gets registered properly. */
5603 if (context
== current_function_decl
)
5604 pushtag (DECL_NAME (template), t
, /*tag_scope=*/ts_current
);
5606 if (comp_template_args (CLASSTYPE_TI_ARGS (template_type
), arglist
))
5607 /* This instantiation is another name for the primary
5608 template type. Set the TYPE_CANONICAL field
5610 TYPE_CANONICAL (t
) = template_type
;
5611 else if (any_template_arguments_need_structural_equality_p (arglist
))
5612 /* Some of the template arguments require structural
5613 equality testing, so this template class requires
5614 structural equality testing. */
5615 SET_TYPE_STRUCTURAL_EQUALITY (t
);
5618 /* If we called start_enum or pushtag above, this information
5619 will already be set up. */
5622 TYPE_CONTEXT (t
) = FROB_CONTEXT (context
);
5624 type_decl
= create_implicit_typedef (DECL_NAME (template), t
);
5625 DECL_CONTEXT (type_decl
) = TYPE_CONTEXT (t
);
5626 TYPE_STUB_DECL (t
) = type_decl
;
5627 DECL_SOURCE_LOCATION (type_decl
)
5628 = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type
));
5631 type_decl
= TYPE_NAME (t
);
5633 TREE_PRIVATE (type_decl
)
5634 = TREE_PRIVATE (TYPE_STUB_DECL (template_type
));
5635 TREE_PROTECTED (type_decl
)
5636 = TREE_PROTECTED (TYPE_STUB_DECL (template_type
));
5637 DECL_IN_SYSTEM_HEADER (type_decl
)
5638 = DECL_IN_SYSTEM_HEADER (template);
5639 if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type
))
5641 DECL_VISIBILITY_SPECIFIED (type_decl
) = 1;
5642 DECL_VISIBILITY (type_decl
) = CLASSTYPE_VISIBILITY (template_type
);
5645 /* Set up the template information. We have to figure out which
5646 template is the immediate parent if this is a full
5648 if (parm_depth
== 1 || is_partial_instantiation
5649 || !PRIMARY_TEMPLATE_P (template))
5650 /* This case is easy; there are no member templates involved. */
5654 /* This is a full instantiation of a member template. Look
5655 for a partial instantiation of which this is an instance. */
5657 for (found
= DECL_TEMPLATE_INSTANTIATIONS (template);
5658 found
; found
= TREE_CHAIN (found
))
5661 tree tmpl
= CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found
));
5663 /* We only want partial instantiations, here, not
5664 specializations or full instantiations. */
5665 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found
))
5666 || !uses_template_parms (TREE_VALUE (found
)))
5669 /* Temporarily reduce by one the number of levels in the
5670 ARGLIST and in FOUND so as to avoid comparing the
5671 last set of arguments. */
5672 TREE_VEC_LENGTH (arglist
)--;
5673 TREE_VEC_LENGTH (TREE_PURPOSE (found
)) --;
5675 /* See if the arguments match. If they do, then TMPL is
5676 the partial instantiation we want. */
5677 success
= comp_template_args (TREE_PURPOSE (found
), arglist
);
5679 /* Restore the argument vectors to their full size. */
5680 TREE_VEC_LENGTH (arglist
)++;
5681 TREE_VEC_LENGTH (TREE_PURPOSE (found
))++;
5692 /* There was no partial instantiation. This happens
5693 where C<T> is a member template of A<T> and it's used
5696 template <typename T> struct B { A<T>::C<int> m; };
5699 Create the partial instantiation.
5701 TREE_VEC_LENGTH (arglist
)--;
5702 found
= tsubst (template, arglist
, complain
, NULL_TREE
);
5703 TREE_VEC_LENGTH (arglist
)++;
5707 SET_TYPE_TEMPLATE_INFO (t
, tree_cons (found
, arglist
, NULL_TREE
));
5708 DECL_TEMPLATE_INSTANTIATIONS (template)
5709 = tree_cons (arglist
, t
,
5710 DECL_TEMPLATE_INSTANTIATIONS (template));
5712 if (TREE_CODE (t
) == ENUMERAL_TYPE
5713 && !is_partial_instantiation
)
5714 /* Now that the type has been registered on the instantiations
5715 list, we set up the enumerators. Because the enumeration
5716 constants may involve the enumeration type itself, we make
5717 sure to register the type first, and then create the
5718 constants. That way, doing tsubst_expr for the enumeration
5719 constants won't result in recursive calls here; we'll find
5720 the instantiation and exit above. */
5721 tsubst_enum (template_type
, t
, arglist
);
5723 if (is_partial_instantiation
)
5724 /* If the type makes use of template parameters, the
5725 code that generates debugging information will crash. */
5726 DECL_IGNORED_P (TYPE_STUB_DECL (t
)) = 1;
5728 /* Possibly limit visibility based on template args. */
5729 TREE_PUBLIC (type_decl
) = 1;
5730 determine_visibility (type_decl
);
5732 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, t
);
5734 timevar_pop (TV_NAME_LOOKUP
);
5741 struct pointer_set_t
*visited
;
5744 /* Called from for_each_template_parm via walk_tree. */
5747 for_each_template_parm_r (tree
*tp
, int *walk_subtrees
, void *d
)
5750 struct pair_fn_data
*pfd
= (struct pair_fn_data
*) d
;
5751 tree_fn_t fn
= pfd
->fn
;
5752 void *data
= pfd
->data
;
5755 && for_each_template_parm (TYPE_CONTEXT (t
), fn
, data
, pfd
->visited
))
5756 return error_mark_node
;
5758 switch (TREE_CODE (t
))
5761 if (TYPE_PTRMEMFUNC_P (t
))
5767 if (!TYPE_TEMPLATE_INFO (t
))
5769 else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t
)),
5770 fn
, data
, pfd
->visited
))
5771 return error_mark_node
;
5775 if (for_each_template_parm (TYPE_MIN_VALUE (t
),
5776 fn
, data
, pfd
->visited
)
5777 || for_each_template_parm (TYPE_MAX_VALUE (t
),
5778 fn
, data
, pfd
->visited
))
5779 return error_mark_node
;
5783 /* Since we're not going to walk subtrees, we have to do this
5785 if (for_each_template_parm (TYPE_METHOD_BASETYPE (t
), fn
, data
,
5787 return error_mark_node
;
5791 /* Check the return type. */
5792 if (for_each_template_parm (TREE_TYPE (t
), fn
, data
, pfd
->visited
))
5793 return error_mark_node
;
5795 /* Check the parameter types. Since default arguments are not
5796 instantiated until they are needed, the TYPE_ARG_TYPES may
5797 contain expressions that involve template parameters. But,
5798 no-one should be looking at them yet. And, once they're
5799 instantiated, they don't contain template parameters, so
5800 there's no point in looking at them then, either. */
5804 for (parm
= TYPE_ARG_TYPES (t
); parm
; parm
= TREE_CHAIN (parm
))
5805 if (for_each_template_parm (TREE_VALUE (parm
), fn
, data
,
5807 return error_mark_node
;
5809 /* Since we've already handled the TYPE_ARG_TYPES, we don't
5810 want walk_tree walking into them itself. */
5816 if (for_each_template_parm (TYPE_FIELDS (t
), fn
, data
,
5818 return error_mark_node
;
5823 if (DECL_LANG_SPECIFIC (t
) && DECL_TEMPLATE_INFO (t
)
5824 && for_each_template_parm (DECL_TI_ARGS (t
), fn
, data
,
5826 return error_mark_node
;
5831 if (TREE_CODE (t
) == CONST_DECL
&& DECL_TEMPLATE_PARM_P (t
)
5832 && for_each_template_parm (DECL_INITIAL (t
), fn
, data
,
5834 return error_mark_node
;
5835 if (DECL_CONTEXT (t
)
5836 && for_each_template_parm (DECL_CONTEXT (t
), fn
, data
,
5838 return error_mark_node
;
5841 case BOUND_TEMPLATE_TEMPLATE_PARM
:
5842 /* Record template parameters such as `T' inside `TT<T>'. */
5843 if (for_each_template_parm (TYPE_TI_ARGS (t
), fn
, data
, pfd
->visited
))
5844 return error_mark_node
;
5847 case TEMPLATE_TEMPLATE_PARM
:
5848 case TEMPLATE_TYPE_PARM
:
5849 case TEMPLATE_PARM_INDEX
:
5850 if (fn
&& (*fn
)(t
, data
))
5851 return error_mark_node
;
5853 return error_mark_node
;
5857 /* A template template parameter is encountered. */
5858 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t
)
5859 && for_each_template_parm (TREE_TYPE (t
), fn
, data
, pfd
->visited
))
5860 return error_mark_node
;
5862 /* Already substituted template template parameter */
5868 || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t
), fn
,
5869 data
, pfd
->visited
))
5870 return error_mark_node
;
5874 if (TREE_TYPE (t
) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t
))
5875 && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
5876 (TREE_TYPE (t
)), fn
, data
,
5878 return error_mark_node
;
5883 /* If there's no type, then this thing must be some expression
5884 involving template parameters. */
5885 if (!fn
&& !TREE_TYPE (t
))
5886 return error_mark_node
;
5891 case REINTERPRET_CAST_EXPR
:
5892 case CONST_CAST_EXPR
:
5893 case STATIC_CAST_EXPR
:
5894 case DYNAMIC_CAST_EXPR
:
5898 case PSEUDO_DTOR_EXPR
:
5900 return error_mark_node
;
5907 /* We didn't find any template parameters we liked. */
5911 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
5912 BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
5913 call FN with the parameter and the DATA.
5914 If FN returns nonzero, the iteration is terminated, and
5915 for_each_template_parm returns 1. Otherwise, the iteration
5916 continues. If FN never returns a nonzero value, the value
5917 returned by for_each_template_parm is 0. If FN is NULL, it is
5918 considered to be the function which always returns 1. */
5921 for_each_template_parm (tree t
, tree_fn_t fn
, void* data
,
5922 struct pointer_set_t
*visited
)
5924 struct pair_fn_data pfd
;
5931 /* Walk the tree. (Conceptually, we would like to walk without
5932 duplicates, but for_each_template_parm_r recursively calls
5933 for_each_template_parm, so we would need to reorganize a fair
5934 bit to use walk_tree_without_duplicates, so we keep our own
5937 pfd
.visited
= visited
;
5939 pfd
.visited
= pointer_set_create ();
5940 result
= cp_walk_tree (&t
,
5941 for_each_template_parm_r
,
5943 pfd
.visited
) != NULL_TREE
;
5948 pointer_set_destroy (pfd
.visited
);
5955 /* Returns true if T depends on any template parameter. */
5958 uses_template_parms (tree t
)
5961 int saved_processing_template_decl
;
5963 saved_processing_template_decl
= processing_template_decl
;
5964 if (!saved_processing_template_decl
)
5965 processing_template_decl
= 1;
5967 dependent_p
= dependent_type_p (t
);
5968 else if (TREE_CODE (t
) == TREE_VEC
)
5969 dependent_p
= any_dependent_template_arguments_p (t
);
5970 else if (TREE_CODE (t
) == TREE_LIST
)
5971 dependent_p
= (uses_template_parms (TREE_VALUE (t
))
5972 || uses_template_parms (TREE_CHAIN (t
)));
5973 else if (TREE_CODE (t
) == TYPE_DECL
)
5974 dependent_p
= dependent_type_p (TREE_TYPE (t
));
5977 || TREE_CODE (t
) == TEMPLATE_PARM_INDEX
5978 || TREE_CODE (t
) == OVERLOAD
5979 || TREE_CODE (t
) == BASELINK
5980 || TREE_CODE (t
) == IDENTIFIER_NODE
5981 || TREE_CODE (t
) == TRAIT_EXPR
5982 || CONSTANT_CLASS_P (t
))
5983 dependent_p
= (type_dependent_expression_p (t
)
5984 || value_dependent_expression_p (t
));
5987 gcc_assert (t
== error_mark_node
);
5988 dependent_p
= false;
5991 processing_template_decl
= saved_processing_template_decl
;
5996 /* Returns true if T depends on any template parameter with level LEVEL. */
5999 uses_template_parms_level (tree t
, int level
)
6001 return for_each_template_parm (t
, template_parm_this_level_p
, &level
, NULL
);
6004 static int tinst_depth
;
6005 extern int max_tinst_depth
;
6006 #ifdef GATHER_STATISTICS
6009 static int tinst_level_tick
;
6010 static int last_template_error_tick
;
6012 /* We're starting to instantiate D; record the template instantiation context
6013 for diagnostics and to restore it later. */
6016 push_tinst_level (tree d
)
6018 struct tinst_level
*new;
6020 if (tinst_depth
>= max_tinst_depth
)
6022 /* If the instantiation in question still has unbound template parms,
6023 we don't really care if we can't instantiate it, so just return.
6024 This happens with base instantiation for implicit `typename'. */
6025 if (uses_template_parms (d
))
6028 last_template_error_tick
= tinst_level_tick
;
6029 error ("template instantiation depth exceeds maximum of %d (use "
6030 "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
6031 max_tinst_depth
, d
);
6033 print_instantiation_context ();
6038 new = GGC_NEW (struct tinst_level
);
6040 new->locus
= input_location
;
6041 new->in_system_header_p
= in_system_header
;
6042 new->next
= current_tinst_level
;
6043 current_tinst_level
= new;
6046 #ifdef GATHER_STATISTICS
6047 if (tinst_depth
> depth_reached
)
6048 depth_reached
= tinst_depth
;
6055 /* We're done instantiating this template; return to the instantiation
6059 pop_tinst_level (void)
6061 /* Restore the filename and line number stashed away when we started
6062 this instantiation. */
6063 input_location
= current_tinst_level
->locus
;
6064 in_system_header
= current_tinst_level
->in_system_header_p
;
6065 current_tinst_level
= current_tinst_level
->next
;
6070 /* We're instantiating a deferred template; restore the template
6071 instantiation context in which the instantiation was requested, which
6072 is one step out from LEVEL. Return the corresponding DECL or TYPE. */
6075 reopen_tinst_level (struct tinst_level
*level
)
6077 struct tinst_level
*t
;
6080 for (t
= level
; t
; t
= t
->next
)
6083 current_tinst_level
= level
;
6088 /* Returns the TINST_LEVEL which gives the original instantiation
6091 struct tinst_level
*
6092 outermost_tinst_level (void)
6094 struct tinst_level
*level
= current_tinst_level
;
6097 level
= level
->next
;
6101 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
6102 vector of template arguments, as for tsubst.
6104 Returns an appropriate tsubst'd friend declaration. */
6107 tsubst_friend_function (tree decl
, tree args
)
6111 if (TREE_CODE (decl
) == FUNCTION_DECL
6112 && DECL_TEMPLATE_INSTANTIATION (decl
)
6113 && TREE_CODE (DECL_TI_TEMPLATE (decl
)) != TEMPLATE_DECL
)
6114 /* This was a friend declared with an explicit template
6115 argument list, e.g.:
6119 to indicate that f was a template instantiation, not a new
6120 function declaration. Now, we have to figure out what
6121 instantiation of what template. */
6123 tree template_id
, arglist
, fns
;
6126 tree ns
= decl_namespace_context (TYPE_MAIN_DECL (current_class_type
));
6128 /* Friend functions are looked up in the containing namespace scope.
6129 We must enter that scope, to avoid finding member functions of the
6130 current cless with same name. */
6131 push_nested_namespace (ns
);
6132 fns
= tsubst_expr (DECL_TI_TEMPLATE (decl
), args
,
6133 tf_warning_or_error
, NULL_TREE
,
6134 /*integral_constant_expression_p=*/false);
6135 pop_nested_namespace (ns
);
6136 arglist
= tsubst (DECL_TI_ARGS (decl
), args
,
6137 tf_warning_or_error
, NULL_TREE
);
6138 template_id
= lookup_template_function (fns
, arglist
);
6140 new_friend
= tsubst (decl
, args
, tf_warning_or_error
, NULL_TREE
);
6141 tmpl
= determine_specialization (template_id
, new_friend
,
6143 /*need_member_template=*/0,
6144 TREE_VEC_LENGTH (args
),
6146 return instantiate_template (tmpl
, new_args
, tf_error
);
6149 new_friend
= tsubst (decl
, args
, tf_warning_or_error
, NULL_TREE
);
6151 /* The NEW_FRIEND will look like an instantiation, to the
6152 compiler, but is not an instantiation from the point of view of
6153 the language. For example, we might have had:
6155 template <class T> struct S {
6156 template <class U> friend void f(T, U);
6159 Then, in S<int>, template <class U> void f(int, U) is not an
6160 instantiation of anything. */
6161 if (new_friend
== error_mark_node
)
6162 return error_mark_node
;
6164 DECL_USE_TEMPLATE (new_friend
) = 0;
6165 if (TREE_CODE (decl
) == TEMPLATE_DECL
)
6167 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend
)) = 0;
6168 DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend
))
6169 = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl
));
6172 /* The mangled name for the NEW_FRIEND is incorrect. The function
6173 is not a template instantiation and should not be mangled like
6174 one. Therefore, we forget the mangling here; we'll recompute it
6175 later if we need it. */
6176 if (TREE_CODE (new_friend
) != TEMPLATE_DECL
)
6178 SET_DECL_RTL (new_friend
, NULL_RTX
);
6179 SET_DECL_ASSEMBLER_NAME (new_friend
, NULL_TREE
);
6182 if (DECL_NAMESPACE_SCOPE_P (new_friend
))
6185 tree new_friend_template_info
;
6186 tree new_friend_result_template_info
;
6188 int new_friend_is_defn
;
6190 /* We must save some information from NEW_FRIEND before calling
6191 duplicate decls since that function will free NEW_FRIEND if
6193 new_friend_template_info
= DECL_TEMPLATE_INFO (new_friend
);
6194 new_friend_is_defn
=
6195 (DECL_INITIAL (DECL_TEMPLATE_RESULT
6196 (template_for_substitution (new_friend
)))
6198 if (TREE_CODE (new_friend
) == TEMPLATE_DECL
)
6200 /* This declaration is a `primary' template. */
6201 DECL_PRIMARY_TEMPLATE (new_friend
) = new_friend
;
6203 new_friend_result_template_info
6204 = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend
));
6207 new_friend_result_template_info
= NULL_TREE
;
6209 /* Make the init_value nonzero so pushdecl knows this is a defn. */
6210 if (new_friend_is_defn
)
6211 DECL_INITIAL (new_friend
) = error_mark_node
;
6213 /* Inside pushdecl_namespace_level, we will push into the
6214 current namespace. However, the friend function should go
6215 into the namespace of the template. */
6216 ns
= decl_namespace_context (new_friend
);
6217 push_nested_namespace (ns
);
6218 old_decl
= pushdecl_namespace_level (new_friend
, /*is_friend=*/true);
6219 pop_nested_namespace (ns
);
6221 if (old_decl
== error_mark_node
)
6222 return error_mark_node
;
6224 if (old_decl
!= new_friend
)
6226 /* This new friend declaration matched an existing
6227 declaration. For example, given:
6229 template <class T> void f(T);
6230 template <class U> class C {
6231 template <class T> friend void f(T) {}
6234 the friend declaration actually provides the definition
6235 of `f', once C has been instantiated for some type. So,
6236 old_decl will be the out-of-class template declaration,
6237 while new_friend is the in-class definition.
6239 But, if `f' was called before this point, the
6240 instantiation of `f' will have DECL_TI_ARGS corresponding
6241 to `T' but not to `U', references to which might appear
6242 in the definition of `f'. Previously, the most general
6243 template for an instantiation of `f' was the out-of-class
6244 version; now it is the in-class version. Therefore, we
6245 run through all specialization of `f', adding to their
6246 DECL_TI_ARGS appropriately. In particular, they need a
6247 new set of outer arguments, corresponding to the
6248 arguments for this class instantiation.
6250 The same situation can arise with something like this:
6253 template <class T> class C {
6257 when `C<int>' is instantiated. Now, `f(int)' is defined
6260 if (!new_friend_is_defn
)
6261 /* On the other hand, if the in-class declaration does
6262 *not* provide a definition, then we don't want to alter
6263 existing definitions. We can just leave everything
6268 /* Overwrite whatever template info was there before, if
6269 any, with the new template information pertaining to
6271 DECL_TEMPLATE_INFO (old_decl
) = new_friend_template_info
;
6273 if (TREE_CODE (old_decl
) != TEMPLATE_DECL
)
6274 reregister_specialization (new_friend
,
6275 most_general_template (old_decl
),
6280 tree new_friend_args
;
6282 DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl
))
6283 = new_friend_result_template_info
;
6285 new_friend_args
= TI_ARGS (new_friend_template_info
);
6286 for (t
= DECL_TEMPLATE_SPECIALIZATIONS (old_decl
);
6290 tree spec
= TREE_VALUE (t
);
6293 = add_outermost_template_args (new_friend_args
,
6294 DECL_TI_ARGS (spec
));
6297 /* Now, since specializations are always supposed to
6298 hang off of the most general template, we must move
6300 t
= most_general_template (old_decl
);
6303 DECL_TEMPLATE_SPECIALIZATIONS (t
)
6304 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t
),
6305 DECL_TEMPLATE_SPECIALIZATIONS (old_decl
));
6306 DECL_TEMPLATE_SPECIALIZATIONS (old_decl
) = NULL_TREE
;
6311 /* The information from NEW_FRIEND has been merged into OLD_DECL
6312 by duplicate_decls. */
6313 new_friend
= old_decl
;
6318 tree context
= DECL_CONTEXT (new_friend
);
6322 template <class T> class C {
6323 template <class U> friend void C1<U>::f (); // case 1
6324 friend void C2<T>::f (); // case 2
6326 we only need to make sure CONTEXT is a complete type for
6327 case 2. To distinguish between the two cases, we note that
6328 CONTEXT of case 1 remains dependent type after tsubst while
6329 this isn't true for case 2. */
6330 ++processing_template_decl
;
6331 dependent_p
= dependent_type_p (context
);
6332 --processing_template_decl
;
6335 && !complete_type_or_else (context
, NULL_TREE
))
6336 return error_mark_node
;
6338 if (COMPLETE_TYPE_P (context
))
6340 /* Check to see that the declaration is really present, and,
6341 possibly obtain an improved declaration. */
6342 tree fn
= check_classfn (context
,
6343 new_friend
, NULL_TREE
);
6353 /* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
6354 template arguments, as for tsubst.
6356 Returns an appropriate tsubst'd friend type or error_mark_node on
6360 tsubst_friend_class (tree friend_tmpl
, tree args
)
6366 context
= DECL_CONTEXT (friend_tmpl
);
6370 if (TREE_CODE (context
) == NAMESPACE_DECL
)
6371 push_nested_namespace (context
);
6373 push_nested_class (tsubst (context
, args
, tf_none
, NULL_TREE
));
6376 /* Look for a class template declaration. We look for hidden names
6377 because two friend declarations of the same template are the
6378 same. For example, in:
6381 template <typename> friend class F;
6383 template <typename> struct B {
6384 template <typename> friend class F;
6387 both F templates are the same. */
6388 tmpl
= lookup_name_real (DECL_NAME (friend_tmpl
), 0, 0,
6389 /*block_p=*/true, 0,
6390 LOOKUP_COMPLAIN
| LOOKUP_HIDDEN
);
6392 /* But, if we don't find one, it might be because we're in a
6393 situation like this:
6401 Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
6402 for `S<int>', not the TEMPLATE_DECL. */
6403 if (!tmpl
|| !DECL_CLASS_TEMPLATE_P (tmpl
))
6405 tmpl
= lookup_name_prefer_type (DECL_NAME (friend_tmpl
), 1);
6406 tmpl
= maybe_get_template_decl_from_type_decl (tmpl
);
6409 if (tmpl
&& DECL_CLASS_TEMPLATE_P (tmpl
))
6411 /* The friend template has already been declared. Just
6412 check to see that the declarations match, and install any new
6413 default parameters. We must tsubst the default parameters,
6414 of course. We only need the innermost template parameters
6415 because that is all that redeclare_class_template will look
6417 if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl
))
6418 > TMPL_ARGS_DEPTH (args
))
6421 parms
= tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl
),
6422 args
, tf_warning_or_error
);
6423 redeclare_class_template (TREE_TYPE (tmpl
), parms
);
6426 friend_type
= TREE_TYPE (tmpl
);
6430 /* The friend template has not already been declared. In this
6431 case, the instantiation of the template class will cause the
6432 injection of this template into the global scope. */
6433 tmpl
= tsubst (friend_tmpl
, args
, tf_warning_or_error
, NULL_TREE
);
6434 if (tmpl
== error_mark_node
)
6435 return error_mark_node
;
6437 /* The new TMPL is not an instantiation of anything, so we
6438 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE for
6439 the new type because that is supposed to be the corresponding
6440 template decl, i.e., TMPL. */
6441 DECL_USE_TEMPLATE (tmpl
) = 0;
6442 DECL_TEMPLATE_INFO (tmpl
) = NULL_TREE
;
6443 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl
)) = 0;
6444 CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl
))
6445 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl
)));
6447 /* Inject this template into the global scope. */
6448 friend_type
= TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl
, true));
6453 if (TREE_CODE (context
) == NAMESPACE_DECL
)
6454 pop_nested_namespace (context
);
6456 pop_nested_class ();
6462 /* Returns zero if TYPE cannot be completed later due to circularity.
6463 Otherwise returns one. */
6466 can_complete_type_without_circularity (tree type
)
6468 if (type
== NULL_TREE
|| type
== error_mark_node
)
6470 else if (COMPLETE_TYPE_P (type
))
6472 else if (TREE_CODE (type
) == ARRAY_TYPE
&& TYPE_DOMAIN (type
))
6473 return can_complete_type_without_circularity (TREE_TYPE (type
));
6474 else if (CLASS_TYPE_P (type
)
6475 && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type
)))
6481 /* Apply any attributes which had to be deferred until instantiation
6482 time. DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
6483 ARGS, COMPLAIN, IN_DECL are as tsubst. */
6486 apply_late_template_attributes (tree
*decl_p
, tree attributes
, int attr_flags
,
6487 tree args
, tsubst_flags_t complain
, tree in_decl
)
6489 tree late_attrs
= NULL_TREE
;
6492 if (DECL_P (*decl_p
))
6493 DECL_ATTRIBUTES (*decl_p
) = attributes
;
6495 TYPE_ATTRIBUTES (*decl_p
) = attributes
;
6497 for (t
= attributes
; t
; t
= TREE_CHAIN (t
))
6498 if (ATTR_IS_DEPENDENT (t
))
6499 late_attrs
= tree_cons
6501 tsubst_expr (TREE_VALUE (t
), args
, complain
, in_decl
,
6502 /*integral_constant_expression_p=*/false),
6505 cplus_decl_attributes (decl_p
, late_attrs
, attr_flags
);
6509 instantiate_class_template (tree type
)
6511 tree
template, args
, pattern
, t
, member
;
6516 if (type
== error_mark_node
)
6517 return error_mark_node
;
6519 if (TYPE_BEING_DEFINED (type
)
6520 || COMPLETE_TYPE_P (type
)
6521 || dependent_type_p (type
))
6524 /* Figure out which template is being instantiated. */
6525 template = most_general_template (CLASSTYPE_TI_TEMPLATE (type
));
6526 gcc_assert (TREE_CODE (template) == TEMPLATE_DECL
);
6528 /* Determine what specialization of the original template to
6530 t
= most_specialized_class (type
, template);
6531 if (t
== error_mark_node
)
6533 TYPE_BEING_DEFINED (type
) = 1;
6534 return error_mark_node
;
6538 /* This TYPE is actually an instantiation of a partial
6539 specialization. We replace the innermost set of ARGS with
6540 the arguments appropriate for substitution. For example,
6543 template <class T> struct S {};
6544 template <class T> struct S<T*> {};
6546 and supposing that we are instantiating S<int*>, ARGS will
6547 presently be {int*} -- but we need {int}. */
6548 pattern
= TREE_TYPE (t
);
6549 args
= TREE_PURPOSE (t
);
6553 pattern
= TREE_TYPE (template);
6554 args
= CLASSTYPE_TI_ARGS (type
);
6557 /* If the template we're instantiating is incomplete, then clearly
6558 there's nothing we can do. */
6559 if (!COMPLETE_TYPE_P (pattern
))
6562 /* If we've recursively instantiated too many templates, stop. */
6563 if (! push_tinst_level (type
))
6566 /* Now we're really doing the instantiation. Mark the type as in
6567 the process of being defined. */
6568 TYPE_BEING_DEFINED (type
) = 1;
6570 /* We may be in the middle of deferred access check. Disable
6572 push_deferring_access_checks (dk_no_deferred
);
6574 push_to_top_level ();
6576 SET_CLASSTYPE_INTERFACE_UNKNOWN (type
);
6578 /* Set the input location to the template definition. This is needed
6579 if tsubsting causes an error. */
6580 typedecl
= TYPE_MAIN_DECL (type
);
6581 input_location
= DECL_SOURCE_LOCATION (typedecl
);
6582 in_system_header
= DECL_IN_SYSTEM_HEADER (typedecl
);
6584 TYPE_HAS_CONSTRUCTOR (type
) = TYPE_HAS_CONSTRUCTOR (pattern
);
6585 TYPE_HAS_NEW_OPERATOR (type
) = TYPE_HAS_NEW_OPERATOR (pattern
);
6586 TYPE_HAS_ARRAY_NEW_OPERATOR (type
) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern
);
6587 TYPE_GETS_DELETE (type
) = TYPE_GETS_DELETE (pattern
);
6588 TYPE_HAS_ASSIGN_REF (type
) = TYPE_HAS_ASSIGN_REF (pattern
);
6589 TYPE_HAS_CONST_ASSIGN_REF (type
) = TYPE_HAS_CONST_ASSIGN_REF (pattern
);
6590 TYPE_HAS_INIT_REF (type
) = TYPE_HAS_INIT_REF (pattern
);
6591 TYPE_HAS_CONST_INIT_REF (type
) = TYPE_HAS_CONST_INIT_REF (pattern
);
6592 TYPE_HAS_DEFAULT_CONSTRUCTOR (type
) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern
);
6593 TYPE_HAS_CONVERSION (type
) = TYPE_HAS_CONVERSION (pattern
);
6594 TYPE_PACKED (type
) = TYPE_PACKED (pattern
);
6595 TYPE_ALIGN (type
) = TYPE_ALIGN (pattern
);
6596 TYPE_USER_ALIGN (type
) = TYPE_USER_ALIGN (pattern
);
6597 TYPE_FOR_JAVA (type
) = TYPE_FOR_JAVA (pattern
); /* For libjava's JArray<T> */
6598 if (ANON_AGGR_TYPE_P (pattern
))
6599 SET_ANON_AGGR_TYPE_P (type
);
6600 if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern
))
6602 CLASSTYPE_VISIBILITY_SPECIFIED (type
) = 1;
6603 CLASSTYPE_VISIBILITY (type
) = CLASSTYPE_VISIBILITY (pattern
);
6606 pbinfo
= TYPE_BINFO (pattern
);
6608 /* We should never instantiate a nested class before its enclosing
6609 class; we need to look up the nested class by name before we can
6610 instantiate it, and that lookup should instantiate the enclosing
6612 gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern
))
6613 || COMPLETE_TYPE_P (TYPE_CONTEXT (type
))
6614 || TYPE_BEING_DEFINED (TYPE_CONTEXT (type
)));
6616 base_list
= NULL_TREE
;
6617 if (BINFO_N_BASE_BINFOS (pbinfo
))
6620 tree context
= TYPE_CONTEXT (type
);
6624 /* We must enter the scope containing the type, as that is where
6625 the accessibility of types named in dependent bases are
6627 pushed_scope
= push_scope (context
? context
: global_namespace
);
6629 /* Substitute into each of the bases to determine the actual
6631 for (i
= 0; BINFO_BASE_ITERATE (pbinfo
, i
, pbase_binfo
); i
++)
6634 tree access
= BINFO_BASE_ACCESS (pbinfo
, i
);
6635 tree expanded_bases
= NULL_TREE
;
6638 if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo
)))
6641 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo
),
6642 args
, tf_error
, NULL_TREE
);
6643 if (expanded_bases
== error_mark_node
)
6646 len
= TREE_VEC_LENGTH (expanded_bases
);
6649 for (idx
= 0; idx
< len
; idx
++)
6652 /* Extract the already-expanded base class. */
6653 base
= TREE_VEC_ELT (expanded_bases
, idx
);
6655 /* Substitute to figure out the base class. */
6656 base
= tsubst (BINFO_TYPE (pbase_binfo
), args
, tf_error
,
6659 if (base
== error_mark_node
)
6662 base_list
= tree_cons (access
, base
, base_list
);
6663 if (BINFO_VIRTUAL_P (pbase_binfo
))
6664 TREE_TYPE (base_list
) = integer_type_node
;
6668 /* The list is now in reverse order; correct that. */
6669 base_list
= nreverse (base_list
);
6672 pop_scope (pushed_scope
);
6674 /* Now call xref_basetypes to set up all the base-class
6676 xref_basetypes (type
, base_list
);
6678 apply_late_template_attributes (&type
, TYPE_ATTRIBUTES (pattern
),
6679 (int) ATTR_FLAG_TYPE_IN_PLACE
,
6680 args
, tf_error
, NULL_TREE
);
6682 /* Now that our base classes are set up, enter the scope of the
6683 class, so that name lookups into base classes, etc. will work
6684 correctly. This is precisely analogous to what we do in
6685 begin_class_definition when defining an ordinary non-template
6686 class, except we also need to push the enclosing classes. */
6687 push_nested_class (type
);
6689 /* Now members are processed in the order of declaration. */
6690 for (member
= CLASSTYPE_DECL_LIST (pattern
);
6691 member
; member
= TREE_CHAIN (member
))
6693 tree t
= TREE_VALUE (member
);
6695 if (TREE_PURPOSE (member
))
6699 /* Build new CLASSTYPE_NESTED_UTDS. */
6702 bool class_template_p
;
6704 class_template_p
= (TREE_CODE (t
) != ENUMERAL_TYPE
6705 && TYPE_LANG_SPECIFIC (t
)
6706 && CLASSTYPE_IS_TEMPLATE (t
));
6707 /* If the member is a class template, then -- even after
6708 substitution -- there may be dependent types in the
6709 template argument list for the class. We increment
6710 PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
6711 that function will assume that no types are dependent
6712 when outside of a template. */
6713 if (class_template_p
)
6714 ++processing_template_decl
;
6715 newtag
= tsubst (t
, args
, tf_error
, NULL_TREE
);
6716 if (class_template_p
)
6717 --processing_template_decl
;
6718 if (newtag
== error_mark_node
)
6721 if (TREE_CODE (newtag
) != ENUMERAL_TYPE
)
6723 tree name
= TYPE_IDENTIFIER (t
);
6725 if (class_template_p
)
6726 /* Unfortunately, lookup_template_class sets
6727 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
6728 instantiation (i.e., for the type of a member
6729 template class nested within a template class.)
6730 This behavior is required for
6731 maybe_process_partial_specialization to work
6732 correctly, but is not accurate in this case;
6733 the TAG is not an instantiation of anything.
6734 (The corresponding TEMPLATE_DECL is an
6735 instantiation, but the TYPE is not.) */
6736 CLASSTYPE_USE_TEMPLATE (newtag
) = 0;
6738 /* Now, we call pushtag to put this NEWTAG into the scope of
6739 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
6740 pushtag calling push_template_decl. We don't have to do
6741 this for enums because it will already have been done in
6744 SET_IDENTIFIER_TYPE_VALUE (name
, newtag
);
6745 pushtag (name
, newtag
, /*tag_scope=*/ts_current
);
6748 else if (TREE_CODE (t
) == FUNCTION_DECL
6749 || DECL_FUNCTION_TEMPLATE_P (t
))
6751 /* Build new TYPE_METHODS. */
6754 if (TREE_CODE (t
) == TEMPLATE_DECL
)
6755 ++processing_template_decl
;
6756 r
= tsubst (t
, args
, tf_error
, NULL_TREE
);
6757 if (TREE_CODE (t
) == TEMPLATE_DECL
)
6758 --processing_template_decl
;
6759 set_current_access_from_decl (r
);
6760 finish_member_declaration (r
);
6764 /* Build new TYPE_FIELDS. */
6765 if (TREE_CODE (t
) == STATIC_ASSERT
)
6768 tsubst_expr (STATIC_ASSERT_CONDITION (t
), args
,
6769 tf_warning_or_error
, NULL_TREE
,
6770 /*integral_constant_expression_p=*/true);
6771 finish_static_assert (condition
,
6772 STATIC_ASSERT_MESSAGE (t
),
6773 STATIC_ASSERT_SOURCE_LOCATION (t
),
6776 else if (TREE_CODE (t
) != CONST_DECL
)
6780 /* The the file and line for this declaration, to
6781 assist in error message reporting. Since we
6782 called push_tinst_level above, we don't need to
6784 input_location
= DECL_SOURCE_LOCATION (t
);
6786 if (TREE_CODE (t
) == TEMPLATE_DECL
)
6787 ++processing_template_decl
;
6788 r
= tsubst (t
, args
, tf_warning_or_error
, NULL_TREE
);
6789 if (TREE_CODE (t
) == TEMPLATE_DECL
)
6790 --processing_template_decl
;
6791 if (TREE_CODE (r
) == VAR_DECL
)
6795 [t]he initialization (and any associated
6796 side-effects) of a static data member does
6797 not occur unless the static data member is
6798 itself used in a way that requires the
6799 definition of the static data member to
6802 Therefore, we do not substitute into the
6803 initialized for the static data member here. */
6804 finish_static_data_member_decl
6807 /*init_const_expr_p=*/false,
6808 /*asmspec_tree=*/NULL_TREE
,
6810 if (DECL_INITIALIZED_IN_CLASS_P (r
))
6811 check_static_variable_definition (r
, TREE_TYPE (r
));
6813 else if (TREE_CODE (r
) == FIELD_DECL
)
6815 /* Determine whether R has a valid type and can be
6816 completed later. If R is invalid, then it is
6817 replaced by error_mark_node so that it will not be
6818 added to TYPE_FIELDS. */
6819 tree rtype
= TREE_TYPE (r
);
6820 if (can_complete_type_without_circularity (rtype
))
6821 complete_type (rtype
);
6823 if (!COMPLETE_TYPE_P (rtype
))
6825 cxx_incomplete_type_error (r
, rtype
);
6826 r
= error_mark_node
;
6830 /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
6831 such a thing will already have been added to the field
6832 list by tsubst_enum in finish_member_declaration in the
6833 CLASSTYPE_NESTED_UTDS case above. */
6834 if (!(TREE_CODE (r
) == TYPE_DECL
6835 && TREE_CODE (TREE_TYPE (r
)) == ENUMERAL_TYPE
6836 && DECL_ARTIFICIAL (r
)))
6838 set_current_access_from_decl (r
);
6839 finish_member_declaration (r
);
6846 if (TYPE_P (t
) || DECL_CLASS_TEMPLATE_P (t
))
6848 /* Build new CLASSTYPE_FRIEND_CLASSES. */
6850 tree friend_type
= t
;
6851 bool adjust_processing_template_decl
= false;
6853 if (TREE_CODE (friend_type
) == TEMPLATE_DECL
)
6855 /* template <class T> friend class C; */
6856 friend_type
= tsubst_friend_class (friend_type
, args
);
6857 adjust_processing_template_decl
= true;
6859 else if (TREE_CODE (friend_type
) == UNBOUND_CLASS_TEMPLATE
)
6861 /* template <class T> friend class C::D; */
6862 friend_type
= tsubst (friend_type
, args
,
6863 tf_warning_or_error
, NULL_TREE
);
6864 if (TREE_CODE (friend_type
) == TEMPLATE_DECL
)
6865 friend_type
= TREE_TYPE (friend_type
);
6866 adjust_processing_template_decl
= true;
6868 else if (TREE_CODE (friend_type
) == TYPENAME_TYPE
)
6870 /* This could be either
6874 when dependent_type_p is false or
6876 template <class U> friend class T::C;
6879 friend_type
= tsubst (friend_type
, args
,
6880 tf_warning_or_error
, NULL_TREE
);
6881 /* Bump processing_template_decl for correct
6882 dependent_type_p calculation. */
6883 ++processing_template_decl
;
6884 if (dependent_type_p (friend_type
))
6885 adjust_processing_template_decl
= true;
6886 --processing_template_decl
;
6888 else if (!CLASSTYPE_USE_TEMPLATE (friend_type
)
6889 && hidden_name_p (TYPE_NAME (friend_type
)))
6893 where C hasn't been declared yet. Let's lookup name
6894 from namespace scope directly, bypassing any name that
6895 come from dependent base class. */
6896 tree ns
= decl_namespace_context (TYPE_MAIN_DECL (friend_type
));
6898 /* The call to xref_tag_from_type does injection for friend
6900 push_nested_namespace (ns
);
6902 xref_tag_from_type (friend_type
, NULL_TREE
,
6903 /*tag_scope=*/ts_current
);
6904 pop_nested_namespace (ns
);
6906 else if (uses_template_parms (friend_type
))
6907 /* friend class C<T>; */
6908 friend_type
= tsubst (friend_type
, args
,
6909 tf_warning_or_error
, NULL_TREE
);
6914 where C is already declared or
6916 friend class C<int>;
6918 We don't have to do anything in these cases. */
6920 if (adjust_processing_template_decl
)
6921 /* Trick make_friend_class into realizing that the friend
6922 we're adding is a template, not an ordinary class. It's
6923 important that we use make_friend_class since it will
6924 perform some error-checking and output cross-reference
6926 ++processing_template_decl
;
6928 if (friend_type
!= error_mark_node
)
6929 make_friend_class (type
, friend_type
, /*complain=*/false);
6931 if (adjust_processing_template_decl
)
6932 --processing_template_decl
;
6936 /* Build new DECL_FRIENDLIST. */
6939 /* The the file and line for this declaration, to
6940 assist in error message reporting. Since we
6941 called push_tinst_level above, we don't need to
6943 input_location
= DECL_SOURCE_LOCATION (t
);
6945 if (TREE_CODE (t
) == TEMPLATE_DECL
)
6947 ++processing_template_decl
;
6948 push_deferring_access_checks (dk_no_check
);
6951 r
= tsubst_friend_function (t
, args
);
6952 add_friend (type
, r
, /*complain=*/false);
6953 if (TREE_CODE (t
) == TEMPLATE_DECL
)
6955 pop_deferring_access_checks ();
6956 --processing_template_decl
;
6962 /* Set the file and line number information to whatever is given for
6963 the class itself. This puts error messages involving generated
6964 implicit functions at a predictable point, and the same point
6965 that would be used for non-template classes. */
6966 input_location
= DECL_SOURCE_LOCATION (typedecl
);
6968 unreverse_member_declarations (type
);
6969 finish_struct_1 (type
);
6970 TYPE_BEING_DEFINED (type
) = 0;
6972 /* Now that the class is complete, instantiate default arguments for
6973 any member functions. We don't do this earlier because the
6974 default arguments may reference members of the class. */
6975 if (!PRIMARY_TEMPLATE_P (template))
6976 for (t
= TYPE_METHODS (type
); t
; t
= TREE_CHAIN (t
))
6977 if (TREE_CODE (t
) == FUNCTION_DECL
6978 /* Implicitly generated member functions will not have template
6979 information; they are not instantiations, but instead are
6980 created "fresh" for each instantiation. */
6981 && DECL_TEMPLATE_INFO (t
))
6982 tsubst_default_arguments (t
);
6984 pop_nested_class ();
6985 pop_from_top_level ();
6986 pop_deferring_access_checks ();
6989 /* The vtable for a template class can be emitted in any translation
6990 unit in which the class is instantiated. When there is no key
6991 method, however, finish_struct_1 will already have added TYPE to
6992 the keyed_classes list. */
6993 if (TYPE_CONTAINS_VPTR_P (type
) && CLASSTYPE_KEY_METHOD (type
))
6994 keyed_classes
= tree_cons (NULL_TREE
, type
, keyed_classes
);
7000 tsubst_template_arg (tree t
, tree args
, tsubst_flags_t complain
, tree in_decl
)
7006 else if (TYPE_P (t
))
7007 r
= tsubst (t
, args
, complain
, in_decl
);
7010 r
= tsubst_expr (t
, args
, complain
, in_decl
,
7011 /*integral_constant_expression_p=*/true);
7012 r
= fold_non_dependent_expr (r
);
7017 /* Substitute ARGS into T, which is an pack expansion
7018 (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
7019 TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
7020 (if only a partial substitution could be performed) or
7021 ERROR_MARK_NODE if there was an error. */
7023 tsubst_pack_expansion (tree t
, tree args
, tsubst_flags_t complain
,
7027 tree pack
, packs
= NULL_TREE
, unsubstituted_packs
= NULL_TREE
;
7028 tree first_arg_pack
; int i
, len
= -1;
7032 gcc_assert (PACK_EXPANSION_P (t
));
7033 pattern
= PACK_EXPANSION_PATTERN (t
);
7035 /* Determine the argument packs that will instantiate the parameter
7036 packs used in the expansion expression. While we're at it,
7037 compute the number of arguments to be expanded and make sure it
7039 for (pack
= PACK_EXPANSION_PARAMETER_PACKS (t
); pack
;
7040 pack
= TREE_CHAIN (pack
))
7042 tree parm_pack
= TREE_VALUE (pack
);
7043 tree arg_pack
= NULL_TREE
;
7044 tree orig_arg
= NULL_TREE
;
7046 if (TREE_CODE (parm_pack
) == PARM_DECL
)
7048 if (local_specializations
)
7049 arg_pack
= retrieve_local_specialization (parm_pack
);
7053 int level
, idx
, levels
;
7054 template_parm_level_and_index (parm_pack
, &level
, &idx
);
7056 levels
= TMPL_ARGS_DEPTH (args
);
7057 if (level
<= levels
)
7058 arg_pack
= TMPL_ARG (args
, level
, idx
);
7061 orig_arg
= arg_pack
;
7062 if (arg_pack
&& TREE_CODE (arg_pack
) == ARGUMENT_PACK_SELECT
)
7063 arg_pack
= ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack
);
7065 if (arg_pack
&& !ARGUMENT_PACK_P (arg_pack
))
7066 /* This can only happen if we forget to expand an argument
7067 pack somewhere else. Just return an error, silently. */
7069 result
= make_tree_vec (1);
7070 TREE_VEC_ELT (result
, 0) = error_mark_node
;
7077 TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack
));
7079 /* It's all-or-nothing with incomplete argument packs. */
7080 if (incomplete
&& !ARGUMENT_PACK_INCOMPLETE_P (arg_pack
))
7081 return error_mark_node
;
7083 if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack
))
7089 first_arg_pack
= arg_pack
;
7091 else if (len
!= my_len
)
7093 if (TREE_CODE (t
) == TYPE_PACK_EXPANSION
)
7094 error ("mismatched argument pack lengths while expanding "
7098 error ("mismatched argument pack lengths while expanding "
7101 return error_mark_node
;
7104 /* Keep track of the parameter packs and their corresponding
7106 packs
= tree_cons (parm_pack
, arg_pack
, packs
);
7107 TREE_TYPE (packs
) = orig_arg
;
7110 /* We can't substitute for this parameter pack. */
7111 unsubstituted_packs
= tree_cons (TREE_PURPOSE (pack
),
7113 unsubstituted_packs
);
7116 /* We cannot expand this expansion expression, because we don't have
7117 all of the argument packs we need. Substitute into the pattern
7118 and return a PACK_EXPANSION_*. The caller will need to deal with
7120 if (unsubstituted_packs
)
7121 return make_pack_expansion (tsubst (pattern
, args
, complain
,
7124 /* We could not find any argument packs that work. */
7126 return error_mark_node
;
7128 /* For each argument in each argument pack, substitute into the
7130 result
= make_tree_vec (len
+ incomplete
);
7131 for (i
= 0; i
< len
+ incomplete
; ++i
)
7133 /* For parameter pack, change the substitution of the parameter
7134 pack to the ith argument in its argument pack, then expand
7136 for (pack
= packs
; pack
; pack
= TREE_CHAIN (pack
))
7138 tree parm
= TREE_PURPOSE (pack
);
7140 if (TREE_CODE (parm
) == PARM_DECL
)
7142 /* Select the Ith argument from the pack. */
7143 tree arg
= make_node (ARGUMENT_PACK_SELECT
);
7144 ARGUMENT_PACK_SELECT_FROM_PACK (arg
) = TREE_VALUE (pack
);
7145 ARGUMENT_PACK_SELECT_INDEX (arg
) = i
;
7147 register_local_specialization (arg
, parm
);
7153 template_parm_level_and_index (parm
, &level
, &idx
);
7157 /* Select the Ith argument from the pack. */
7158 value
= make_node (ARGUMENT_PACK_SELECT
);
7159 ARGUMENT_PACK_SELECT_FROM_PACK (value
) = TREE_VALUE (pack
);
7160 ARGUMENT_PACK_SELECT_INDEX (value
) = i
;
7163 /* Update the corresponding argument. */
7164 TMPL_ARG (args
, level
, idx
) = value
;
7168 /* Substitute into the PATTERN with the altered arguments. */
7169 if (TREE_CODE (t
) == EXPR_PACK_EXPANSION
)
7170 TREE_VEC_ELT (result
, i
) =
7171 tsubst_expr (pattern
, args
, complain
, in_decl
,
7172 /*integral_constant_expression_p=*/false);
7174 TREE_VEC_ELT (result
, i
) = tsubst (pattern
, args
, complain
, in_decl
);
7177 /* When we have incomplete argument packs, the last "expanded"
7178 result is itself a pack expansion, which allows us
7179 to deduce more arguments. */
7180 TREE_VEC_ELT (result
, i
) =
7181 make_pack_expansion (TREE_VEC_ELT (result
, i
));
7183 if (TREE_VEC_ELT (result
, i
) == error_mark_node
)
7185 result
= error_mark_node
;
7190 /* Update ARGS to restore the substitution from parameter packs to
7191 their argument packs. */
7192 for (pack
= packs
; pack
; pack
= TREE_CHAIN (pack
))
7194 tree parm
= TREE_PURPOSE (pack
);
7196 if (TREE_CODE (parm
) == PARM_DECL
)
7197 register_local_specialization (TREE_TYPE (pack
), parm
);
7201 template_parm_level_and_index (parm
, &level
, &idx
);
7203 /* Update the corresponding argument. */
7204 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args
))
7205 TREE_VEC_ELT (TREE_VEC_ELT (args
, level
-1 ), idx
) =
7208 TREE_VEC_ELT (args
, idx
) = TREE_TYPE (pack
);
7215 /* Substitute ARGS into the vector or list of template arguments T. */
7218 tsubst_template_args (tree t
, tree args
, tsubst_flags_t complain
, tree in_decl
)
7221 int len
= TREE_VEC_LENGTH (t
);
7222 int need_new
= 0, i
, expanded_len_adjust
= 0, out
;
7223 tree
*elts
= (tree
*) alloca (len
* sizeof (tree
));
7225 for (i
= 0; i
< len
; i
++)
7227 tree orig_arg
= TREE_VEC_ELT (t
, i
);
7230 if (TREE_CODE (orig_arg
) == TREE_VEC
)
7231 new_arg
= tsubst_template_args (orig_arg
, args
, complain
, in_decl
);
7232 else if (PACK_EXPANSION_P (orig_arg
))
7234 /* Substitute into an expansion expression. */
7235 new_arg
= tsubst_pack_expansion (orig_arg
, args
, complain
, in_decl
);
7237 if (TREE_CODE (new_arg
) == TREE_VEC
)
7238 /* Add to the expanded length adjustment the number of
7239 expanded arguments. We subtract one from this
7240 measurement, because the argument pack expression
7241 itself is already counted as 1 in
7242 LEN. EXPANDED_LEN_ADJUST can actually be negative, if
7243 the argument pack is empty. */
7244 expanded_len_adjust
+= TREE_VEC_LENGTH (new_arg
) - 1;
7246 else if (ARGUMENT_PACK_P (orig_arg
))
7248 /* Substitute into each of the arguments. */
7249 new_arg
= make_node (TREE_CODE (orig_arg
));
7251 SET_ARGUMENT_PACK_ARGS (
7253 tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg
),
7254 args
, complain
, in_decl
));
7256 if (ARGUMENT_PACK_ARGS (new_arg
) == error_mark_node
)
7257 new_arg
= error_mark_node
;
7259 if (TREE_CODE (new_arg
) == NONTYPE_ARGUMENT_PACK
) {
7260 TREE_TYPE (new_arg
) = tsubst (TREE_TYPE (orig_arg
), args
,
7262 TREE_CONSTANT (new_arg
) = TREE_CONSTANT (orig_arg
);
7264 if (TREE_TYPE (new_arg
) == error_mark_node
)
7265 new_arg
= error_mark_node
;
7269 new_arg
= tsubst_template_arg (orig_arg
, args
, complain
, in_decl
);
7271 if (new_arg
== error_mark_node
)
7272 return error_mark_node
;
7275 if (new_arg
!= orig_arg
)
7282 /* Make space for the expanded arguments coming from template
7284 t
= make_tree_vec (len
+ expanded_len_adjust
);
7285 for (i
= 0, out
= 0; i
< len
; i
++)
7287 if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t
, i
))
7288 || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t
, i
)))
7289 && TREE_CODE (elts
[i
]) == TREE_VEC
)
7293 /* Now expand the template argument pack "in place". */
7294 for (idx
= 0; idx
< TREE_VEC_LENGTH (elts
[i
]); idx
++, out
++)
7295 TREE_VEC_ELT (t
, out
) = TREE_VEC_ELT (elts
[i
], idx
);
7299 TREE_VEC_ELT (t
, out
) = elts
[i
];
7307 /* Return the result of substituting ARGS into the template parameters
7308 given by PARMS. If there are m levels of ARGS and m + n levels of
7309 PARMS, then the result will contain n levels of PARMS. For
7310 example, if PARMS is `template <class T> template <class U>
7311 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
7312 result will be `template <int*, double, class V>'. */
7315 tsubst_template_parms (tree parms
, tree args
, tsubst_flags_t complain
)
7320 /* When substituting into a template, we must set
7321 PROCESSING_TEMPLATE_DECL as the template parameters may be
7322 dependent if they are based on one-another, and the dependency
7323 predicates are short-circuit outside of templates. */
7324 ++processing_template_decl
;
7326 for (new_parms
= &r
;
7327 TMPL_PARMS_DEPTH (parms
) > TMPL_ARGS_DEPTH (args
);
7328 new_parms
= &(TREE_CHAIN (*new_parms
)),
7329 parms
= TREE_CHAIN (parms
))
7332 make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms
)));
7335 for (i
= 0; i
< TREE_VEC_LENGTH (new_vec
); ++i
)
7341 if (parms
== error_mark_node
)
7344 tuple
= TREE_VEC_ELT (TREE_VALUE (parms
), i
);
7346 if (tuple
== error_mark_node
)
7349 default_value
= TREE_PURPOSE (tuple
);
7350 parm_decl
= TREE_VALUE (tuple
);
7352 parm_decl
= tsubst (parm_decl
, args
, complain
, NULL_TREE
);
7353 if (TREE_CODE (parm_decl
) == PARM_DECL
7354 && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl
), complain
))
7355 parm_decl
= error_mark_node
;
7356 default_value
= tsubst_template_arg (default_value
, args
,
7357 complain
, NULL_TREE
);
7359 tuple
= build_tree_list (default_value
, parm_decl
);
7360 TREE_VEC_ELT (new_vec
, i
) = tuple
;
7364 tree_cons (size_int (TMPL_PARMS_DEPTH (parms
)
7365 - TMPL_ARGS_DEPTH (args
)),
7366 new_vec
, NULL_TREE
);
7369 --processing_template_decl
;
7374 /* Substitute the ARGS into the indicated aggregate (or enumeration)
7375 type T. If T is not an aggregate or enumeration type, it is
7376 handled as if by tsubst. IN_DECL is as for tsubst. If
7377 ENTERING_SCOPE is nonzero, T is the context for a template which
7378 we are presently tsubst'ing. Return the substituted value. */
7381 tsubst_aggr_type (tree t
,
7383 tsubst_flags_t complain
,
7390 switch (TREE_CODE (t
))
7393 if (TYPE_PTRMEMFUNC_P (t
))
7394 return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t
), args
, complain
, in_decl
);
7396 /* Else fall through. */
7399 if (TYPE_TEMPLATE_INFO (t
))
7404 bool saved_skip_evaluation
;
7406 /* In "sizeof(X<I>)" we need to evaluate "I". */
7407 saved_skip_evaluation
= skip_evaluation
;
7408 skip_evaluation
= false;
7410 /* First, determine the context for the type we are looking
7412 context
= TYPE_CONTEXT (t
);
7414 context
= tsubst_aggr_type (context
, args
, complain
,
7415 in_decl
, /*entering_scope=*/1);
7417 /* Then, figure out what arguments are appropriate for the
7418 type we are trying to find. For example, given:
7420 template <class T> struct S;
7421 template <class T, class U> void f(T, U) { S<U> su; }
7423 and supposing that we are instantiating f<int, double>,
7424 then our ARGS will be {int, double}, but, when looking up
7425 S we only want {double}. */
7426 argvec
= tsubst_template_args (TYPE_TI_ARGS (t
), args
,
7428 if (argvec
== error_mark_node
)
7429 r
= error_mark_node
;
7432 r
= lookup_template_class (t
, argvec
, in_decl
, context
,
7433 entering_scope
, complain
);
7434 r
= cp_build_qualified_type_real (r
, TYPE_QUALS (t
), complain
);
7437 skip_evaluation
= saved_skip_evaluation
;
7442 /* This is not a template type, so there's nothing to do. */
7446 return tsubst (t
, args
, complain
, in_decl
);
7450 /* Substitute into the default argument ARG (a default argument for
7451 FN), which has the indicated TYPE. */
7454 tsubst_default_argument (tree fn
, tree type
, tree arg
)
7456 tree saved_class_ptr
= NULL_TREE
;
7457 tree saved_class_ref
= NULL_TREE
;
7459 /* This default argument came from a template. Instantiate the
7460 default argument here, not in tsubst. In the case of
7469 we must be careful to do name lookup in the scope of S<T>,
7470 rather than in the current class. */
7471 push_access_scope (fn
);
7472 /* The "this" pointer is not valid in a default argument. */
7475 saved_class_ptr
= current_class_ptr
;
7476 cp_function_chain
->x_current_class_ptr
= NULL_TREE
;
7477 saved_class_ref
= current_class_ref
;
7478 cp_function_chain
->x_current_class_ref
= NULL_TREE
;
7481 push_deferring_access_checks(dk_no_deferred
);
7482 /* The default argument expression may cause implicitly defined
7483 member functions to be synthesized, which will result in garbage
7484 collection. We must treat this situation as if we were within
7485 the body of function so as to avoid collecting live data on the
7488 arg
= tsubst_expr (arg
, DECL_TI_ARGS (fn
),
7489 tf_warning_or_error
, NULL_TREE
,
7490 /*integral_constant_expression_p=*/false);
7492 pop_deferring_access_checks();
7494 /* Restore the "this" pointer. */
7497 cp_function_chain
->x_current_class_ptr
= saved_class_ptr
;
7498 cp_function_chain
->x_current_class_ref
= saved_class_ref
;
7501 pop_access_scope (fn
);
7503 /* Make sure the default argument is reasonable. */
7504 arg
= check_default_argument (type
, arg
);
7509 /* Substitute into all the default arguments for FN. */
7512 tsubst_default_arguments (tree fn
)
7517 tmpl_args
= DECL_TI_ARGS (fn
);
7519 /* If this function is not yet instantiated, we certainly don't need
7520 its default arguments. */
7521 if (uses_template_parms (tmpl_args
))
7524 for (arg
= TYPE_ARG_TYPES (TREE_TYPE (fn
));
7526 arg
= TREE_CHAIN (arg
))
7527 if (TREE_PURPOSE (arg
))
7528 TREE_PURPOSE (arg
) = tsubst_default_argument (fn
,
7530 TREE_PURPOSE (arg
));
7533 /* Substitute the ARGS into the T, which is a _DECL. Return the
7534 result of the substitution. Issue error and warning messages under
7535 control of COMPLAIN. */
7538 tsubst_decl (tree t
, tree args
, tsubst_flags_t complain
)
7540 location_t saved_loc
;
7544 /* Set the filename and linenumber to improve error-reporting. */
7545 saved_loc
= input_location
;
7546 input_location
= DECL_SOURCE_LOCATION (t
);
7548 switch (TREE_CODE (t
))
7552 /* We can get here when processing a member function template,
7553 member class template, and template template parameter of
7554 a template class. */
7555 tree decl
= DECL_TEMPLATE_RESULT (t
);
7560 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t
))
7562 /* Template template parameter is treated here. */
7563 tree new_type
= tsubst (TREE_TYPE (t
), args
, complain
, in_decl
);
7564 if (new_type
== error_mark_node
)
7565 return error_mark_node
;
7568 TREE_CHAIN (r
) = NULL_TREE
;
7569 TREE_TYPE (r
) = new_type
;
7570 DECL_TEMPLATE_RESULT (r
)
7571 = build_decl (TYPE_DECL
, DECL_NAME (decl
), new_type
);
7572 DECL_TEMPLATE_PARMS (r
)
7573 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t
), args
,
7575 TYPE_NAME (new_type
) = r
;
7579 /* We might already have an instance of this template.
7580 The ARGS are for the surrounding class type, so the
7581 full args contain the tsubst'd args for the context,
7582 plus the innermost args from the template decl. */
7583 tmpl_args
= DECL_CLASS_TEMPLATE_P (t
)
7584 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t
))
7585 : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t
));
7586 /* Because this is a template, the arguments will still be
7587 dependent, even after substitution. If
7588 PROCESSING_TEMPLATE_DECL is not set, the dependency
7589 predicates will short-circuit. */
7590 ++processing_template_decl
;
7591 full_args
= tsubst_template_args (tmpl_args
, args
,
7593 --processing_template_decl
;
7594 if (full_args
== error_mark_node
)
7595 return error_mark_node
;
7597 /* tsubst_template_args doesn't copy the vector if
7598 nothing changed. But, *something* should have
7600 gcc_assert (full_args
!= tmpl_args
);
7602 spec
= retrieve_specialization (t
, full_args
,
7603 /*class_specializations_p=*/true);
7604 if (spec
!= NULL_TREE
)
7610 /* Make a new template decl. It will be similar to the
7611 original, but will record the current template arguments.
7612 We also create a new function declaration, which is just
7613 like the old one, but points to this new template, rather
7614 than the old one. */
7616 gcc_assert (DECL_LANG_SPECIFIC (r
) != 0);
7617 TREE_CHAIN (r
) = NULL_TREE
;
7619 DECL_TEMPLATE_INFO (r
) = build_tree_list (t
, args
);
7621 if (TREE_CODE (decl
) == TYPE_DECL
)
7624 ++processing_template_decl
;
7625 new_type
= tsubst (TREE_TYPE (t
), args
, complain
, in_decl
);
7626 --processing_template_decl
;
7627 if (new_type
== error_mark_node
)
7628 return error_mark_node
;
7630 TREE_TYPE (r
) = new_type
;
7631 CLASSTYPE_TI_TEMPLATE (new_type
) = r
;
7632 DECL_TEMPLATE_RESULT (r
) = TYPE_MAIN_DECL (new_type
);
7633 DECL_TI_ARGS (r
) = CLASSTYPE_TI_ARGS (new_type
);
7634 DECL_CONTEXT (r
) = TYPE_CONTEXT (new_type
);
7639 ++processing_template_decl
;
7640 new_decl
= tsubst (decl
, args
, complain
, in_decl
);
7641 --processing_template_decl
;
7642 if (new_decl
== error_mark_node
)
7643 return error_mark_node
;
7645 DECL_TEMPLATE_RESULT (r
) = new_decl
;
7646 DECL_TI_TEMPLATE (new_decl
) = r
;
7647 TREE_TYPE (r
) = TREE_TYPE (new_decl
);
7648 DECL_TI_ARGS (r
) = DECL_TI_ARGS (new_decl
);
7649 DECL_CONTEXT (r
) = DECL_CONTEXT (new_decl
);
7652 SET_DECL_IMPLICIT_INSTANTIATION (r
);
7653 DECL_TEMPLATE_INSTANTIATIONS (r
) = NULL_TREE
;
7654 DECL_TEMPLATE_SPECIALIZATIONS (r
) = NULL_TREE
;
7656 /* The template parameters for this new template are all the
7657 template parameters for the old template, except the
7658 outermost level of parameters. */
7659 DECL_TEMPLATE_PARMS (r
)
7660 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t
), args
,
7663 if (PRIMARY_TEMPLATE_P (t
))
7664 DECL_PRIMARY_TEMPLATE (r
) = r
;
7666 if (TREE_CODE (decl
) != TYPE_DECL
)
7667 /* Record this non-type partial instantiation. */
7668 register_specialization (r
, t
,
7669 DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r
)),
7677 tree argvec
= NULL_TREE
;
7685 /* Nobody should be tsubst'ing into non-template functions. */
7686 gcc_assert (DECL_TEMPLATE_INFO (t
) != NULL_TREE
);
7688 if (TREE_CODE (DECL_TI_TEMPLATE (t
)) == TEMPLATE_DECL
)
7693 /* If T is not dependent, just return it. We have to
7694 increment PROCESSING_TEMPLATE_DECL because
7695 value_dependent_expression_p assumes that nothing is
7696 dependent when PROCESSING_TEMPLATE_DECL is zero. */
7697 ++processing_template_decl
;
7698 dependent_p
= value_dependent_expression_p (t
);
7699 --processing_template_decl
;
7703 /* Calculate the most general template of which R is a
7704 specialization, and the complete set of arguments used to
7706 gen_tmpl
= most_general_template (DECL_TI_TEMPLATE (t
));
7707 argvec
= tsubst_template_args (DECL_TI_ARGS
7708 (DECL_TEMPLATE_RESULT (gen_tmpl
)),
7709 args
, complain
, in_decl
);
7711 /* Check to see if we already have this specialization. */
7712 spec
= retrieve_specialization (gen_tmpl
, argvec
,
7713 /*class_specializations_p=*/false);
7721 /* We can see more levels of arguments than parameters if
7722 there was a specialization of a member template, like
7725 template <class T> struct S { template <class U> void f(); }
7726 template <> template <class U> void S<int>::f(U);
7728 Here, we'll be substituting into the specialization,
7729 because that's where we can find the code we actually
7730 want to generate, but we'll have enough arguments for
7731 the most general template.
7733 We also deal with the peculiar case:
7735 template <class T> struct S {
7736 template <class U> friend void f();
7738 template <class U> void f() {}
7740 template void f<double>();
7742 Here, the ARGS for the instantiation of will be {int,
7743 double}. But, we only need as many ARGS as there are
7744 levels of template parameters in CODE_PATTERN. We are
7745 careful not to get fooled into reducing the ARGS in
7748 template <class T> struct S { template <class U> void f(U); }
7749 template <class T> template <> void S<T>::f(int) {}
7751 which we can spot because the pattern will be a
7752 specialization in this case. */
7753 args_depth
= TMPL_ARGS_DEPTH (args
);
7755 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t
)));
7756 if (args_depth
> parms_depth
7757 && !DECL_TEMPLATE_SPECIALIZATION (t
))
7758 args
= get_innermost_template_args (args
, parms_depth
);
7762 /* This special case arises when we have something like this:
7764 template <class T> struct S {
7765 friend void f<int>(int, double);
7768 Here, the DECL_TI_TEMPLATE for the friend declaration
7769 will be an IDENTIFIER_NODE. We are being called from
7770 tsubst_friend_function, and we want only to create a
7771 new decl (R) with appropriate types so that we can call
7772 determine_specialization. */
7773 gen_tmpl
= NULL_TREE
;
7776 if (DECL_CLASS_SCOPE_P (t
))
7778 if (DECL_NAME (t
) == constructor_name (DECL_CONTEXT (t
)))
7782 ctx
= tsubst_aggr_type (DECL_CONTEXT (t
), args
,
7783 complain
, t
, /*entering_scope=*/1);
7788 ctx
= DECL_CONTEXT (t
);
7790 type
= tsubst (TREE_TYPE (t
), args
, complain
, in_decl
);
7791 if (type
== error_mark_node
)
7792 return error_mark_node
;
7794 /* We do NOT check for matching decls pushed separately at this
7795 point, as they may not represent instantiations of this
7796 template, and in any case are considered separate under the
7799 DECL_USE_TEMPLATE (r
) = 0;
7800 TREE_TYPE (r
) = type
;
7801 /* Clear out the mangled name and RTL for the instantiation. */
7802 SET_DECL_ASSEMBLER_NAME (r
, NULL_TREE
);
7803 SET_DECL_RTL (r
, NULL_RTX
);
7804 DECL_INITIAL (r
) = NULL_TREE
;
7805 DECL_CONTEXT (r
) = ctx
;
7807 if (member
&& DECL_CONV_FN_P (r
))
7808 /* Type-conversion operator. Reconstruct the name, in
7809 case it's the name of one of the template's parameters. */
7810 DECL_NAME (r
) = mangle_conv_op_name_for_type (TREE_TYPE (type
));
7812 DECL_ARGUMENTS (r
) = tsubst (DECL_ARGUMENTS (t
), args
,
7814 DECL_RESULT (r
) = NULL_TREE
;
7816 TREE_STATIC (r
) = 0;
7817 TREE_PUBLIC (r
) = TREE_PUBLIC (t
);
7818 DECL_EXTERNAL (r
) = 1;
7819 /* If this is an instantiation of a function with internal
7820 linkage, we already know what object file linkage will be
7821 assigned to the instantiation. */
7822 DECL_INTERFACE_KNOWN (r
) = !TREE_PUBLIC (r
);
7823 DECL_DEFER_OUTPUT (r
) = 0;
7824 TREE_CHAIN (r
) = NULL_TREE
;
7825 DECL_PENDING_INLINE_INFO (r
) = 0;
7826 DECL_PENDING_INLINE_P (r
) = 0;
7827 DECL_SAVED_TREE (r
) = NULL_TREE
;
7829 if (DECL_CLONED_FUNCTION (r
))
7831 DECL_CLONED_FUNCTION (r
) = tsubst (DECL_CLONED_FUNCTION (t
),
7833 TREE_CHAIN (r
) = TREE_CHAIN (DECL_CLONED_FUNCTION (r
));
7834 TREE_CHAIN (DECL_CLONED_FUNCTION (r
)) = r
;
7837 /* Set up the DECL_TEMPLATE_INFO for R. There's no need to do
7838 this in the special friend case mentioned above where
7839 GEN_TMPL is NULL. */
7842 DECL_TEMPLATE_INFO (r
)
7843 = tree_cons (gen_tmpl
, argvec
, NULL_TREE
);
7844 SET_DECL_IMPLICIT_INSTANTIATION (r
);
7845 register_specialization (r
, gen_tmpl
, argvec
, false);
7847 /* We're not supposed to instantiate default arguments
7848 until they are called, for a template. But, for a
7851 template <class T> void f ()
7852 { extern void g(int i = T()); }
7854 we should do the substitution when the template is
7855 instantiated. We handle the member function case in
7856 instantiate_class_template since the default arguments
7857 might refer to other members of the class. */
7859 && !PRIMARY_TEMPLATE_P (gen_tmpl
)
7860 && !uses_template_parms (argvec
))
7861 tsubst_default_arguments (r
);
7864 DECL_TEMPLATE_INFO (r
) = NULL_TREE
;
7866 /* Copy the list of befriending classes. */
7867 for (friends
= &DECL_BEFRIENDING_CLASSES (r
);
7869 friends
= &TREE_CHAIN (*friends
))
7871 *friends
= copy_node (*friends
);
7872 TREE_VALUE (*friends
) = tsubst (TREE_VALUE (*friends
),
7877 if (DECL_CONSTRUCTOR_P (r
) || DECL_DESTRUCTOR_P (r
))
7879 maybe_retrofit_in_chrg (r
);
7880 if (DECL_CONSTRUCTOR_P (r
))
7881 grok_ctor_properties (ctx
, r
);
7882 /* If this is an instantiation of a member template, clone it.
7883 If it isn't, that'll be handled by
7884 clone_constructors_and_destructors. */
7885 if (PRIMARY_TEMPLATE_P (gen_tmpl
))
7886 clone_function_decl (r
, /*update_method_vec_p=*/0);
7888 else if (IDENTIFIER_OPNAME_P (DECL_NAME (r
))
7889 && !grok_op_properties (r
, (complain
& tf_error
) != 0))
7890 return error_mark_node
;
7892 if (DECL_FRIEND_P (t
) && DECL_FRIEND_CONTEXT (t
))
7893 SET_DECL_FRIEND_CONTEXT (r
,
7894 tsubst (DECL_FRIEND_CONTEXT (t
),
7895 args
, complain
, in_decl
));
7897 /* Possibly limit visibility based on template args. */
7898 DECL_VISIBILITY (r
) = VISIBILITY_DEFAULT
;
7899 if (DECL_VISIBILITY_SPECIFIED (t
))
7901 DECL_VISIBILITY_SPECIFIED (r
) = 0;
7903 = remove_attribute ("visibility", DECL_ATTRIBUTES (r
));
7905 determine_visibility (r
);
7907 apply_late_template_attributes (&r
, DECL_ATTRIBUTES (r
), 0,
7908 args
, complain
, in_decl
);
7914 tree type
= NULL_TREE
;
7916 tree expanded_types
= NULL_TREE
;
7917 tree prev_r
= NULL_TREE
;
7918 tree first_r
= NULL_TREE
;
7920 if (FUNCTION_PARAMETER_PACK_P (t
))
7922 /* If there is a local specialization that isn't a
7923 parameter pack, it means that we're doing a "simple"
7924 substitution from inside tsubst_pack_expansion. Just
7925 return the local specialization (which will be a single
7927 tree spec
= NULL_TREE
;
7928 if (local_specializations
)
7929 spec
= retrieve_local_specialization (t
);
7931 && TREE_CODE (spec
) == PARM_DECL
7932 && TREE_CODE (TREE_TYPE (spec
)) != TYPE_PACK_EXPANSION
)
7935 /* Expand the TYPE_PACK_EXPANSION that provides the types for
7936 the parameters in this function parameter pack. */
7937 expanded_types
= tsubst_pack_expansion (TREE_TYPE (t
), args
,
7939 if (TREE_CODE (expanded_types
) == TREE_VEC
)
7941 len
= TREE_VEC_LENGTH (expanded_types
);
7943 /* Zero-length parameter packs are boring. Just substitute
7946 return tsubst (TREE_CHAIN (t
), args
, complain
,
7951 /* All we did was update the type. Make a note of that. */
7952 type
= expanded_types
;
7953 expanded_types
= NULL_TREE
;
7957 /* Loop through all of the parameter's we'll build. When T is
7958 a function parameter pack, LEN is the number of expanded
7959 types in EXPANDED_TYPES; otherwise, LEN is 1. */
7961 for (i
= 0; i
< len
; ++i
)
7965 if (DECL_TEMPLATE_PARM_P (t
))
7966 SET_DECL_TEMPLATE_PARM_P (r
);
7969 /* We're on the Ith parameter of the function parameter
7972 /* Get the Ith type. */
7973 type
= TREE_VEC_ELT (expanded_types
, i
);
7976 /* Rename the parameter to include the index. */
7978 make_ith_pack_parameter_name (DECL_NAME (r
), i
);
7981 /* We're dealing with a normal parameter. */
7982 type
= tsubst (TREE_TYPE (t
), args
, complain
, in_decl
);
7984 type
= type_decays_to (type
);
7985 TREE_TYPE (r
) = type
;
7986 cp_apply_type_quals_to_decl (cp_type_quals (type
), r
);
7988 if (DECL_INITIAL (r
))
7990 if (TREE_CODE (DECL_INITIAL (r
)) != TEMPLATE_PARM_INDEX
)
7991 DECL_INITIAL (r
) = TREE_TYPE (r
);
7993 DECL_INITIAL (r
) = tsubst (DECL_INITIAL (r
), args
,
7997 DECL_CONTEXT (r
) = NULL_TREE
;
7999 if (!DECL_TEMPLATE_PARM_P (r
))
8000 DECL_ARG_TYPE (r
) = type_passed_as (type
);
8002 apply_late_template_attributes (&r
, DECL_ATTRIBUTES (r
), 0,
8003 args
, complain
, in_decl
);
8005 /* Keep track of the first new parameter we
8006 generate. That's what will be returned to the
8011 /* Build a proper chain of parameters when substituting
8012 into a function parameter pack. */
8014 TREE_CHAIN (prev_r
) = r
;
8018 TREE_CHAIN (r
) = tsubst (TREE_CHAIN (t
), args
,
8019 complain
, TREE_CHAIN (t
));
8021 /* FIRST_R contains the start of the chain we've built. */
8031 type
= tsubst (TREE_TYPE (t
), args
, complain
, in_decl
);
8032 if (type
== error_mark_node
)
8033 return error_mark_node
;
8034 TREE_TYPE (r
) = type
;
8035 cp_apply_type_quals_to_decl (cp_type_quals (type
), r
);
8037 /* DECL_INITIAL gives the number of bits in a bit-field. */
8039 = tsubst_expr (DECL_INITIAL (t
), args
,
8041 /*integral_constant_expression_p=*/true);
8042 /* We don't have to set DECL_CONTEXT here; it is set by
8043 finish_member_declaration. */
8044 TREE_CHAIN (r
) = NULL_TREE
;
8045 if (VOID_TYPE_P (type
))
8046 error ("instantiation of %q+D as type %qT", r
, type
);
8048 apply_late_template_attributes (&r
, DECL_ATTRIBUTES (r
), 0,
8049 args
, complain
, in_decl
);
8054 /* We reach here only for member using decls. */
8055 if (DECL_DEPENDENT_P (t
))
8057 r
= do_class_using_decl
8058 (tsubst_copy (USING_DECL_SCOPE (t
), args
, complain
, in_decl
),
8059 tsubst_copy (DECL_NAME (t
), args
, complain
, in_decl
));
8061 r
= error_mark_node
;
8066 TREE_CHAIN (r
) = NULL_TREE
;
8073 tree argvec
= NULL_TREE
;
8074 tree gen_tmpl
= NULL_TREE
;
8076 tree tmpl
= NULL_TREE
;
8078 tree type
= NULL_TREE
;
8081 if (TREE_CODE (t
) == TYPE_DECL
8082 && t
== TYPE_MAIN_DECL (TREE_TYPE (t
)))
8084 /* If this is the canonical decl, we don't have to
8085 mess with instantiations, and often we can't (for
8086 typename, template type parms and such). Note that
8087 TYPE_NAME is not correct for the above test if
8088 we've copied the type for a typedef. */
8089 type
= tsubst (TREE_TYPE (t
), args
, complain
, in_decl
);
8090 r
= TYPE_NAME (type
);
8094 /* Check to see if we already have the specialization we
8097 if (DECL_CLASS_SCOPE_P (t
) || DECL_NAMESPACE_SCOPE_P (t
))
8099 /* T is a static data member or namespace-scope entity.
8100 We have to substitute into namespace-scope variables
8101 (even though such entities are never templates) because
8104 template <class T> void f() { extern T t; }
8106 where the entity referenced is not known until
8107 instantiation time. */
8109 ctx
= DECL_CONTEXT (t
);
8110 if (DECL_CLASS_SCOPE_P (t
))
8112 ctx
= tsubst_aggr_type (ctx
, args
,
8114 in_decl
, /*entering_scope=*/1);
8115 /* If CTX is unchanged, then T is in fact the
8116 specialization we want. That situation occurs when
8117 referencing a static data member within in its own
8118 class. We can use pointer equality, rather than
8119 same_type_p, because DECL_CONTEXT is always
8121 if (ctx
== DECL_CONTEXT (t
))
8127 tmpl
= DECL_TI_TEMPLATE (t
);
8128 gen_tmpl
= most_general_template (tmpl
);
8129 argvec
= tsubst (DECL_TI_ARGS (t
), args
, complain
, in_decl
);
8130 spec
= (retrieve_specialization
8132 /*class_specializations_p=*/false));
8137 /* A local variable. */
8139 /* Subsequent calls to pushdecl will fill this in. */
8141 spec
= retrieve_local_specialization (t
);
8143 /* If we already have the specialization we need, there is
8144 nothing more to do. */
8151 /* Create a new node for the specialization we need. */
8153 if (type
== NULL_TREE
)
8154 type
= tsubst (TREE_TYPE (t
), args
, complain
, in_decl
);
8155 if (TREE_CODE (r
) == VAR_DECL
)
8157 /* Even if the original location is out of scope, the
8158 newly substituted one is not. */
8159 DECL_DEAD_FOR_LOCAL (r
) = 0;
8160 DECL_INITIALIZED_P (r
) = 0;
8161 DECL_TEMPLATE_INSTANTIATED (r
) = 0;
8162 if (type
== error_mark_node
)
8163 return error_mark_node
;
8164 if (TREE_CODE (type
) == FUNCTION_TYPE
)
8166 /* It may seem that this case cannot occur, since:
8171 declares a function, not a variable. However:
8174 template <typename T> void g() { T t; }
8175 template void g<f>();
8177 is an attempt to declare a variable with function
8179 error ("variable %qD has function type",
8180 /* R is not yet sufficiently initialized, so we
8181 just use its name. */
8183 return error_mark_node
;
8185 type
= complete_type (type
);
8186 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r
)
8187 = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t
);
8188 type
= check_var_type (DECL_NAME (r
), type
);
8190 if (DECL_HAS_VALUE_EXPR_P (t
))
8192 tree ve
= DECL_VALUE_EXPR (t
);
8193 ve
= tsubst_expr (ve
, args
, complain
, in_decl
,
8194 /*constant_expression_p=*/false);
8195 SET_DECL_VALUE_EXPR (r
, ve
);
8198 else if (DECL_SELF_REFERENCE_P (t
))
8199 SET_DECL_SELF_REFERENCE_P (r
);
8200 TREE_TYPE (r
) = type
;
8201 cp_apply_type_quals_to_decl (cp_type_quals (type
), r
);
8202 DECL_CONTEXT (r
) = ctx
;
8203 /* Clear out the mangled name and RTL for the instantiation. */
8204 SET_DECL_ASSEMBLER_NAME (r
, NULL_TREE
);
8205 if (CODE_CONTAINS_STRUCT (TREE_CODE (t
), TS_DECL_WRTL
))
8206 SET_DECL_RTL (r
, NULL_RTX
);
8207 /* The initializer must not be expanded until it is required;
8209 DECL_INITIAL (r
) = NULL_TREE
;
8210 if (CODE_CONTAINS_STRUCT (TREE_CODE (t
), TS_DECL_WRTL
))
8211 SET_DECL_RTL (r
, NULL_RTX
);
8212 DECL_SIZE (r
) = DECL_SIZE_UNIT (r
) = 0;
8213 if (TREE_CODE (r
) == VAR_DECL
)
8215 /* Possibly limit visibility based on template args. */
8216 DECL_VISIBILITY (r
) = VISIBILITY_DEFAULT
;
8217 if (DECL_VISIBILITY_SPECIFIED (t
))
8219 DECL_VISIBILITY_SPECIFIED (r
) = 0;
8221 = remove_attribute ("visibility", DECL_ATTRIBUTES (r
));
8223 determine_visibility (r
);
8225 /* Preserve a typedef that names a type. */
8226 else if (TREE_CODE (r
) == TYPE_DECL
8227 && DECL_ORIGINAL_TYPE (t
)
8228 && type
!= error_mark_node
)
8230 DECL_ORIGINAL_TYPE (r
) = tsubst (DECL_ORIGINAL_TYPE (t
),
8231 args
, complain
, in_decl
);
8232 TREE_TYPE (r
) = type
= build_variant_type_copy (type
);
8233 TYPE_NAME (type
) = r
;
8238 /* A static data member declaration is always marked
8239 external when it is declared in-class, even if an
8240 initializer is present. We mimic the non-template
8242 DECL_EXTERNAL (r
) = 1;
8244 register_specialization (r
, gen_tmpl
, argvec
, false);
8245 DECL_TEMPLATE_INFO (r
) = tree_cons (tmpl
, argvec
, NULL_TREE
);
8246 SET_DECL_IMPLICIT_INSTANTIATION (r
);
8249 register_local_specialization (r
, t
);
8251 TREE_CHAIN (r
) = NULL_TREE
;
8253 apply_late_template_attributes (&r
, DECL_ATTRIBUTES (r
),
8254 (int) ATTR_FLAG_TYPE_IN_PLACE
,
8255 args
, complain
, in_decl
);
8264 /* Restore the file and line information. */
8265 input_location
= saved_loc
;
8270 /* Substitute into the ARG_TYPES of a function type. */
8273 tsubst_arg_types (tree arg_types
,
8275 tsubst_flags_t complain
,
8278 tree remaining_arg_types
;
8279 tree type
= NULL_TREE
;
8281 tree expanded_args
= NULL_TREE
;
8284 if (!arg_types
|| arg_types
== void_list_node
)
8287 remaining_arg_types
= tsubst_arg_types (TREE_CHAIN (arg_types
),
8288 args
, complain
, in_decl
);
8289 if (remaining_arg_types
== error_mark_node
)
8290 return error_mark_node
;
8292 if (PACK_EXPANSION_P (TREE_VALUE (arg_types
)))
8294 /* For a pack expansion, perform substitution on the
8295 entire expression. Later on, we'll handle the arguments
8297 expanded_args
= tsubst_pack_expansion (TREE_VALUE (arg_types
),
8298 args
, complain
, in_decl
);
8300 if (TREE_CODE (expanded_args
) == TREE_VEC
)
8301 /* So that we'll spin through the parameters, one by one. */
8302 i
= TREE_VEC_LENGTH (expanded_args
);
8305 /* We only partially substituted into the parameter
8306 pack. Our type is TYPE_PACK_EXPANSION. */
8307 type
= expanded_args
;
8308 expanded_args
= NULL_TREE
;
8316 type
= TREE_VEC_ELT (expanded_args
, i
);
8318 type
= tsubst (TREE_VALUE (arg_types
), args
, complain
, in_decl
);
8320 if (type
== error_mark_node
)
8321 return error_mark_node
;
8322 if (VOID_TYPE_P (type
))
8324 if (complain
& tf_error
)
8326 error ("invalid parameter type %qT", type
);
8328 error ("in declaration %q+D", in_decl
);
8330 return error_mark_node
;
8333 /* Do array-to-pointer, function-to-pointer conversion, and ignore
8334 top-level qualifiers as required. */
8335 type
= TYPE_MAIN_VARIANT (type_decays_to (type
));
8337 /* We do not substitute into default arguments here. The standard
8338 mandates that they be instantiated only when needed, which is
8339 done in build_over_call. */
8340 default_arg
= TREE_PURPOSE (arg_types
);
8342 if (default_arg
&& TREE_CODE (default_arg
) == DEFAULT_ARG
)
8344 /* We've instantiated a template before its default arguments
8345 have been parsed. This can happen for a nested template
8346 class, and is not an error unless we require the default
8347 argument in a call of this function. */
8348 remaining_arg_types
=
8349 tree_cons (default_arg
, type
, remaining_arg_types
);
8350 VEC_safe_push (tree
, gc
, DEFARG_INSTANTIATIONS (default_arg
),
8351 remaining_arg_types
);
8354 remaining_arg_types
=
8355 hash_tree_cons (default_arg
, type
, remaining_arg_types
);
8358 return remaining_arg_types
;
8361 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
8362 *not* handle the exception-specification for FNTYPE, because the
8363 initial substitution of explicitly provided template parameters
8364 during argument deduction forbids substitution into the
8365 exception-specification:
8369 All references in the function type of the function template to the
8370 corresponding template parameters are replaced by the specified tem-
8371 plate argument values. If a substitution in a template parameter or
8372 in the function type of the function template results in an invalid
8373 type, type deduction fails. [Note: The equivalent substitution in
8374 exception specifications is done only when the function is instanti-
8375 ated, at which point a program is ill-formed if the substitution
8376 results in an invalid type.] */
8379 tsubst_function_type (tree t
,
8381 tsubst_flags_t complain
,
8388 /* The TYPE_CONTEXT is not used for function/method types. */
8389 gcc_assert (TYPE_CONTEXT (t
) == NULL_TREE
);
8391 /* Substitute the return type. */
8392 return_type
= tsubst (TREE_TYPE (t
), args
, complain
, in_decl
);
8393 if (return_type
== error_mark_node
)
8394 return error_mark_node
;
8395 /* The standard does not presently indicate that creation of a
8396 function type with an invalid return type is a deduction failure.
8397 However, that is clearly analogous to creating an array of "void"
8398 or a reference to a reference. This is core issue #486. */
8399 if (TREE_CODE (return_type
) == ARRAY_TYPE
8400 || TREE_CODE (return_type
) == FUNCTION_TYPE
)
8402 if (complain
& tf_error
)
8404 if (TREE_CODE (return_type
) == ARRAY_TYPE
)
8405 error ("function returning an array");
8407 error ("function returning a function");
8409 return error_mark_node
;
8412 /* Substitute the argument types. */
8413 arg_types
= tsubst_arg_types (TYPE_ARG_TYPES (t
), args
,
8415 if (arg_types
== error_mark_node
)
8416 return error_mark_node
;
8418 if (TYPE_QUALS (return_type
) != TYPE_UNQUALIFIED
8419 && in_decl
!= NULL_TREE
8420 && !TREE_NO_WARNING (in_decl
)
8421 && (SCALAR_TYPE_P (return_type
) || VOID_TYPE_P (return_type
)))
8422 warning (OPT_Wreturn_type
,
8423 "type qualifiers ignored on function return type");
8425 /* Construct a new type node and return it. */
8426 if (TREE_CODE (t
) == FUNCTION_TYPE
)
8427 fntype
= build_function_type (return_type
, arg_types
);
8430 tree r
= TREE_TYPE (TREE_VALUE (arg_types
));
8431 if (! IS_AGGR_TYPE (r
))
8435 Type deduction may fail for any of the following
8438 -- Attempting to create "pointer to member of T" when T
8439 is not a class type. */
8440 if (complain
& tf_error
)
8441 error ("creating pointer to member function of non-class type %qT",
8443 return error_mark_node
;
8446 fntype
= build_method_type_directly (r
, return_type
,
8447 TREE_CHAIN (arg_types
));
8449 fntype
= cp_build_qualified_type_real (fntype
, TYPE_QUALS (t
), complain
);
8450 fntype
= cp_build_type_attribute_variant (fntype
, TYPE_ATTRIBUTES (t
));
8455 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE. Substitute the template
8456 ARGS into that specification, and return the substituted
8457 specification. If there is no specification, return NULL_TREE. */
8460 tsubst_exception_specification (tree fntype
,
8462 tsubst_flags_t complain
,
8468 specs
= TYPE_RAISES_EXCEPTIONS (fntype
);
8469 new_specs
= NULL_TREE
;
8472 if (! TREE_VALUE (specs
))
8479 tree expanded_specs
= NULL_TREE
;
8481 if (PACK_EXPANSION_P (TREE_VALUE (specs
)))
8483 /* Expand the pack expansion type. */
8484 expanded_specs
= tsubst_pack_expansion (TREE_VALUE (specs
),
8487 len
= TREE_VEC_LENGTH (expanded_specs
);
8490 for (i
= 0; i
< len
; ++i
)
8493 spec
= TREE_VEC_ELT (expanded_specs
, i
);
8495 spec
= tsubst (TREE_VALUE (specs
), args
, complain
, in_decl
);
8496 if (spec
== error_mark_node
)
8498 new_specs
= add_exception_specifier (new_specs
, spec
,
8502 specs
= TREE_CHAIN (specs
);
8508 /* Take the tree structure T and replace template parameters used
8509 therein with the argument vector ARGS. IN_DECL is an associated
8510 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
8511 Issue error and warning messages under control of COMPLAIN. Note
8512 that we must be relatively non-tolerant of extensions here, in
8513 order to preserve conformance; if we allow substitutions that
8514 should not be allowed, we may allow argument deductions that should
8515 not succeed, and therefore report ambiguous overload situations
8516 where there are none. In theory, we could allow the substitution,
8517 but indicate that it should have failed, and allow our caller to
8518 make sure that the right thing happens, but we don't try to do this
8521 This function is used for dealing with types, decls and the like;
8522 for expressions, use tsubst_expr or tsubst_copy. */
8525 tsubst (tree t
, tree args
, tsubst_flags_t complain
, tree in_decl
)
8529 if (t
== NULL_TREE
|| t
== error_mark_node
8530 || t
== integer_type_node
8531 || t
== void_type_node
8532 || t
== char_type_node
8533 || t
== unknown_type_node
8534 || TREE_CODE (t
) == NAMESPACE_DECL
)
8538 return tsubst_decl (t
, args
, complain
);
8540 if (TREE_CODE (t
) == IDENTIFIER_NODE
)
8541 type
= IDENTIFIER_TYPE_VALUE (t
);
8543 type
= TREE_TYPE (t
);
8545 gcc_assert (type
!= unknown_type_node
);
8547 /* Reuse typedefs. We need to do this to handle dependent attributes,
8548 such as attribute aligned. */
8551 && TYPE_NAME (t
) != TYPE_MAIN_DECL (t
))
8553 tree decl
= TYPE_NAME (t
);
8555 if (DECL_CLASS_SCOPE_P (decl
)
8556 && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl
)))
8558 tree tmpl
= most_general_template (DECL_TI_TEMPLATE (decl
));
8559 tree gen_args
= tsubst (DECL_TI_ARGS (decl
), args
, complain
, in_decl
);
8560 r
= retrieve_specialization (tmpl
, gen_args
, false);
8562 else if (DECL_FUNCTION_SCOPE_P (decl
))
8563 r
= retrieve_local_specialization (decl
);
8570 r
= cp_build_qualified_type_real
8571 (r
, cp_type_quals (t
) | cp_type_quals (r
),
8572 complain
| tf_ignore_bad_quals
);
8575 /* Else we must be instantiating the typedef, so fall through. */
8579 && TREE_CODE (t
) != TYPENAME_TYPE
8580 && TREE_CODE (t
) != IDENTIFIER_NODE
8581 && TREE_CODE (t
) != FUNCTION_TYPE
8582 && TREE_CODE (t
) != METHOD_TYPE
)
8583 type
= tsubst (type
, args
, complain
, in_decl
);
8584 if (type
== error_mark_node
)
8585 return error_mark_node
;
8587 switch (TREE_CODE (t
))
8592 return tsubst_aggr_type (t
, args
, complain
, in_decl
,
8593 /*entering_scope=*/0);
8596 case IDENTIFIER_NODE
:
8608 if (t
== integer_type_node
)
8611 if (TREE_CODE (TYPE_MIN_VALUE (t
)) == INTEGER_CST
8612 && TREE_CODE (TYPE_MAX_VALUE (t
)) == INTEGER_CST
)
8616 tree max
, omax
= TREE_OPERAND (TYPE_MAX_VALUE (t
), 0);
8618 max
= tsubst_expr (omax
, args
, complain
, in_decl
,
8619 /*integral_constant_expression_p=*/false);
8620 max
= fold_decl_constant_value (max
);
8622 if (TREE_CODE (max
) != INTEGER_CST
8623 && TREE_CODE (max
) != TEMPLATE_PARM_INDEX
8624 && !at_function_scope_p ())
8626 if (complain
& tf_error
)
8627 error ("array bound is not an integer constant");
8628 return error_mark_node
;
8633 Type deduction may fail for any of the following
8636 Attempting to create an array with a size that is
8637 zero or negative. */
8638 if (integer_zerop (max
) && !(complain
& tf_error
))
8639 /* We must fail if performing argument deduction (as
8640 indicated by the state of complain), so that
8641 another substitution can be found. */
8642 return error_mark_node
;
8643 else if (TREE_CODE (max
) == INTEGER_CST
8644 && INT_CST_LT (max
, integer_zero_node
))
8646 if (complain
& tf_error
)
8647 error ("creating array with negative size (%qE)", max
);
8649 return error_mark_node
;
8652 return compute_array_index_type (NULL_TREE
, max
);
8655 case TEMPLATE_TYPE_PARM
:
8656 case TEMPLATE_TEMPLATE_PARM
:
8657 case BOUND_TEMPLATE_TEMPLATE_PARM
:
8658 case TEMPLATE_PARM_INDEX
:
8663 tree arg
= NULL_TREE
;
8667 gcc_assert (TREE_VEC_LENGTH (args
) > 0);
8668 if (TREE_CODE (t
) == TEMPLATE_TYPE_PARM
8669 || TREE_CODE (t
) == TEMPLATE_TEMPLATE_PARM
8670 || TREE_CODE (t
) == BOUND_TEMPLATE_TEMPLATE_PARM
)
8672 idx
= TEMPLATE_TYPE_IDX (t
);
8673 level
= TEMPLATE_TYPE_LEVEL (t
);
8677 idx
= TEMPLATE_PARM_IDX (t
);
8678 level
= TEMPLATE_PARM_LEVEL (t
);
8681 levels
= TMPL_ARGS_DEPTH (args
);
8682 if (level
<= levels
)
8684 arg
= TMPL_ARG (args
, level
, idx
);
8686 if (arg
&& TREE_CODE (arg
) == ARGUMENT_PACK_SELECT
)
8687 /* See through ARGUMENT_PACK_SELECT arguments. */
8688 arg
= ARGUMENT_PACK_SELECT_ARG (arg
);
8691 if (arg
== error_mark_node
)
8692 return error_mark_node
;
8693 else if (arg
!= NULL_TREE
)
8695 if (ARGUMENT_PACK_P (arg
))
8696 /* If ARG is an argument pack, we don't actually want to
8697 perform a substitution here, because substitutions
8698 for argument packs are only done
8699 element-by-element. We can get to this point when
8700 substituting the type of a non-type template
8701 parameter pack, when that type actually contains
8702 template parameter packs from an outer template, e.g.,
8704 template<typename... Types> struct A {
8705 template<Types... Values> struct B { };
8709 if (TREE_CODE (t
) == TEMPLATE_TYPE_PARM
)
8712 gcc_assert (TYPE_P (arg
));
8714 /* cv-quals from the template are discarded when
8715 substituting in a function or reference type. */
8716 if (TREE_CODE (arg
) == FUNCTION_TYPE
8717 || TREE_CODE (arg
) == METHOD_TYPE
8718 || TREE_CODE (arg
) == REFERENCE_TYPE
)
8719 quals
= cp_type_quals (arg
);
8721 quals
= cp_type_quals (arg
) | cp_type_quals (t
);
8723 return cp_build_qualified_type_real
8724 (arg
, quals
, complain
| tf_ignore_bad_quals
);
8726 else if (TREE_CODE (t
) == BOUND_TEMPLATE_TEMPLATE_PARM
)
8728 /* We are processing a type constructed from a
8729 template template parameter. */
8730 tree argvec
= tsubst (TYPE_TI_ARGS (t
),
8731 args
, complain
, in_decl
);
8732 if (argvec
== error_mark_node
)
8733 return error_mark_node
;
8735 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
8736 are resolving nested-types in the signature of a
8737 member function templates. Otherwise ARG is a
8738 TEMPLATE_DECL and is the real template to be
8740 if (TREE_CODE (arg
) == TEMPLATE_TEMPLATE_PARM
)
8741 arg
= TYPE_NAME (arg
);
8743 r
= lookup_template_class (arg
,
8746 /*entering_scope=*/0,
8748 return cp_build_qualified_type_real
8749 (r
, TYPE_QUALS (t
), complain
);
8752 /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX. */
8757 /* This can happen during the attempted tsubst'ing in
8758 unify. This means that we don't yet have any information
8759 about the template parameter in question. */
8762 /* If we get here, we must have been looking at a parm for a
8763 more deeply nested template. Make a new version of this
8764 template parameter, but with a lower level. */
8765 switch (TREE_CODE (t
))
8767 case TEMPLATE_TYPE_PARM
:
8768 case TEMPLATE_TEMPLATE_PARM
:
8769 case BOUND_TEMPLATE_TEMPLATE_PARM
:
8770 if (cp_type_quals (t
))
8772 r
= tsubst (TYPE_MAIN_VARIANT (t
), args
, complain
, in_decl
);
8773 r
= cp_build_qualified_type_real
8774 (r
, cp_type_quals (t
),
8775 complain
| (TREE_CODE (t
) == TEMPLATE_TYPE_PARM
8776 ? tf_ignore_bad_quals
: 0));
8781 TEMPLATE_TYPE_PARM_INDEX (r
)
8782 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t
),
8784 TYPE_STUB_DECL (r
) = TYPE_NAME (r
) = TEMPLATE_TYPE_DECL (r
);
8785 TYPE_MAIN_VARIANT (r
) = r
;
8786 TYPE_POINTER_TO (r
) = NULL_TREE
;
8787 TYPE_REFERENCE_TO (r
) = NULL_TREE
;
8789 if (TREE_CODE (r
) == TEMPLATE_TEMPLATE_PARM
)
8790 /* We have reduced the level of the template
8791 template parameter, but not the levels of its
8792 template parameters, so canonical_type_parameter
8793 will not be able to find the canonical template
8794 template parameter for this level. Thus, we
8795 require structural equality checking to compare
8796 TEMPLATE_TEMPLATE_PARMs. */
8797 SET_TYPE_STRUCTURAL_EQUALITY (r
);
8798 else if (TYPE_STRUCTURAL_EQUALITY_P (t
))
8799 SET_TYPE_STRUCTURAL_EQUALITY (r
);
8801 TYPE_CANONICAL (r
) = canonical_type_parameter (r
);
8803 if (TREE_CODE (t
) == BOUND_TEMPLATE_TEMPLATE_PARM
)
8805 tree argvec
= tsubst (TYPE_TI_ARGS (t
), args
,
8807 if (argvec
== error_mark_node
)
8808 return error_mark_node
;
8810 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r
)
8811 = tree_cons (TYPE_TI_TEMPLATE (t
), argvec
, NULL_TREE
);
8816 case TEMPLATE_PARM_INDEX
:
8817 r
= reduce_template_parm_level (t
, type
, levels
);
8829 tree purpose
, value
, chain
;
8831 if (t
== void_list_node
)
8834 purpose
= TREE_PURPOSE (t
);
8837 purpose
= tsubst (purpose
, args
, complain
, in_decl
);
8838 if (purpose
== error_mark_node
)
8839 return error_mark_node
;
8841 value
= TREE_VALUE (t
);
8844 value
= tsubst (value
, args
, complain
, in_decl
);
8845 if (value
== error_mark_node
)
8846 return error_mark_node
;
8848 chain
= TREE_CHAIN (t
);
8849 if (chain
&& chain
!= void_type_node
)
8851 chain
= tsubst (chain
, args
, complain
, in_decl
);
8852 if (chain
== error_mark_node
)
8853 return error_mark_node
;
8855 if (purpose
== TREE_PURPOSE (t
)
8856 && value
== TREE_VALUE (t
)
8857 && chain
== TREE_CHAIN (t
))
8859 return hash_tree_cons (purpose
, value
, chain
);
8863 /* We should never be tsubsting a binfo. */
8867 /* A vector of template arguments. */
8869 return tsubst_template_args (t
, args
, complain
, in_decl
);
8872 case REFERENCE_TYPE
:
8874 enum tree_code code
;
8876 if (type
== TREE_TYPE (t
) && TREE_CODE (type
) != METHOD_TYPE
)
8879 code
= TREE_CODE (t
);
8884 Type deduction may fail for any of the following
8887 -- Attempting to create a pointer to reference type.
8888 -- Attempting to create a reference to a reference type or
8889 a reference to void.
8891 Core issue 106 says that creating a reference to a reference
8892 during instantiation is no longer a cause for failure. We
8893 only enforce this check in strict C++98 mode. */
8894 if ((TREE_CODE (type
) == REFERENCE_TYPE
8895 && (((cxx_dialect
== cxx98
) && flag_iso
) || code
!= REFERENCE_TYPE
))
8896 || (code
== REFERENCE_TYPE
&& TREE_CODE (type
) == VOID_TYPE
))
8898 static location_t last_loc
;
8900 /* We keep track of the last time we issued this error
8901 message to avoid spewing a ton of messages during a
8902 single bad template instantiation. */
8903 if (complain
& tf_error
8904 #ifdef USE_MAPPED_LOCATION
8905 && last_loc
!= input_location
8907 && (last_loc
.line
!= input_line
8908 || last_loc
.file
!= input_filename
)
8912 if (TREE_CODE (type
) == VOID_TYPE
)
8913 error ("forming reference to void");
8915 error ("forming %s to reference type %qT",
8916 (code
== POINTER_TYPE
) ? "pointer" : "reference",
8918 last_loc
= input_location
;
8921 return error_mark_node
;
8923 else if (code
== POINTER_TYPE
)
8925 r
= build_pointer_type (type
);
8926 if (TREE_CODE (type
) == METHOD_TYPE
)
8927 r
= build_ptrmemfunc_type (r
);
8929 else if (TREE_CODE (type
) == REFERENCE_TYPE
)
8930 /* In C++0x, during template argument substitution, when there is an
8931 attempt to create a reference to a reference type, reference
8932 collapsing is applied as described in [14.3.1/4 temp.arg.type]:
8934 "If a template-argument for a template-parameter T names a type
8935 that is a reference to a type A, an attempt to create the type
8936 'lvalue reference to cv T' creates the type 'lvalue reference to
8937 A,' while an attempt to create the type type rvalue reference to
8938 cv T' creates the type T"
8940 r
= cp_build_reference_type
8942 TYPE_REF_IS_RVALUE (t
) && TYPE_REF_IS_RVALUE (type
));
8944 r
= cp_build_reference_type (type
, TYPE_REF_IS_RVALUE (t
));
8945 r
= cp_build_qualified_type_real (r
, TYPE_QUALS (t
), complain
);
8947 if (r
!= error_mark_node
)
8948 /* Will this ever be needed for TYPE_..._TO values? */
8955 r
= tsubst (TYPE_OFFSET_BASETYPE (t
), args
, complain
, in_decl
);
8956 if (r
== error_mark_node
|| !IS_AGGR_TYPE (r
))
8960 Type deduction may fail for any of the following
8963 -- Attempting to create "pointer to member of T" when T
8964 is not a class type. */
8965 if (complain
& tf_error
)
8966 error ("creating pointer to member of non-class type %qT", r
);
8967 return error_mark_node
;
8969 if (TREE_CODE (type
) == REFERENCE_TYPE
)
8971 if (complain
& tf_error
)
8972 error ("creating pointer to member reference type %qT", type
);
8973 return error_mark_node
;
8975 if (TREE_CODE (type
) == VOID_TYPE
)
8977 if (complain
& tf_error
)
8978 error ("creating pointer to member of type void");
8979 return error_mark_node
;
8981 gcc_assert (TREE_CODE (type
) != METHOD_TYPE
);
8982 if (TREE_CODE (type
) == FUNCTION_TYPE
)
8984 /* The type of the implicit object parameter gets its
8985 cv-qualifiers from the FUNCTION_TYPE. */
8987 tree this_type
= cp_build_qualified_type (TYPE_MAIN_VARIANT (r
),
8988 cp_type_quals (type
));
8990 method_type
= build_method_type_directly (this_type
,
8992 TYPE_ARG_TYPES (type
));
8993 memptr
= build_ptrmemfunc_type (build_pointer_type (method_type
));
8994 return cp_build_qualified_type_real (memptr
, cp_type_quals (t
),
8998 return cp_build_qualified_type_real (build_ptrmem_type (r
, type
),
9007 fntype
= tsubst_function_type (t
, args
, complain
, in_decl
);
9008 if (fntype
== error_mark_node
)
9009 return error_mark_node
;
9011 /* Substitute the exception specification. */
9012 specs
= tsubst_exception_specification (t
, args
, complain
,
9014 if (specs
== error_mark_node
)
9015 return error_mark_node
;
9017 fntype
= build_exception_variant (fntype
, specs
);
9022 tree domain
= tsubst (TYPE_DOMAIN (t
), args
, complain
, in_decl
);
9023 if (domain
== error_mark_node
)
9024 return error_mark_node
;
9026 /* As an optimization, we avoid regenerating the array type if
9027 it will obviously be the same as T. */
9028 if (type
== TREE_TYPE (t
) && domain
== TYPE_DOMAIN (t
))
9031 /* These checks should match the ones in grokdeclarator.
9035 The deduction may fail for any of the following reasons:
9037 -- Attempting to create an array with an element type that
9038 is void, a function type, or a reference type, or [DR337]
9039 an abstract class type. */
9040 if (TREE_CODE (type
) == VOID_TYPE
9041 || TREE_CODE (type
) == FUNCTION_TYPE
9042 || TREE_CODE (type
) == REFERENCE_TYPE
)
9044 if (complain
& tf_error
)
9045 error ("creating array of %qT", type
);
9046 return error_mark_node
;
9048 if (CLASS_TYPE_P (type
) && CLASSTYPE_PURE_VIRTUALS (type
))
9050 if (complain
& tf_error
)
9051 error ("creating array of %qT, which is an abstract class type",
9053 return error_mark_node
;
9056 r
= build_cplus_array_type (type
, domain
);
9058 if (TYPE_USER_ALIGN (t
))
9060 TYPE_ALIGN (r
) = TYPE_ALIGN (t
);
9061 TYPE_USER_ALIGN (r
) = 1;
9070 tree e1
= tsubst (TREE_OPERAND (t
, 0), args
, complain
, in_decl
);
9071 tree e2
= tsubst (TREE_OPERAND (t
, 1), args
, complain
, in_decl
);
9073 if (e1
== error_mark_node
|| e2
== error_mark_node
)
9074 return error_mark_node
;
9076 return fold_build2 (TREE_CODE (t
), TREE_TYPE (t
), e1
, e2
);
9082 tree e
= tsubst (TREE_OPERAND (t
, 0), args
, complain
, in_decl
);
9083 if (e
== error_mark_node
)
9084 return error_mark_node
;
9086 return fold_build1 (TREE_CODE (t
), TREE_TYPE (t
), e
);
9091 tree ctx
= tsubst_aggr_type (TYPE_CONTEXT (t
), args
, complain
,
9092 in_decl
, /*entering_scope=*/1);
9093 tree f
= tsubst_copy (TYPENAME_TYPE_FULLNAME (t
), args
,
9096 if (ctx
== error_mark_node
|| f
== error_mark_node
)
9097 return error_mark_node
;
9099 if (!IS_AGGR_TYPE (ctx
))
9101 if (complain
& tf_error
)
9102 error ("%qT is not a class, struct, or union type", ctx
);
9103 return error_mark_node
;
9105 else if (!uses_template_parms (ctx
) && !TYPE_BEING_DEFINED (ctx
))
9107 /* Normally, make_typename_type does not require that the CTX
9108 have complete type in order to allow things like:
9110 template <class T> struct S { typename S<T>::X Y; };
9112 But, such constructs have already been resolved by this
9113 point, so here CTX really should have complete type, unless
9114 it's a partial instantiation. */
9115 ctx
= complete_type (ctx
);
9116 if (!COMPLETE_TYPE_P (ctx
))
9118 if (complain
& tf_error
)
9119 cxx_incomplete_type_error (NULL_TREE
, ctx
);
9120 return error_mark_node
;
9124 f
= make_typename_type (ctx
, f
, typename_type
,
9125 (complain
& tf_error
) | tf_keep_type_decl
);
9126 if (f
== error_mark_node
)
9128 if (TREE_CODE (f
) == TYPE_DECL
)
9130 complain
|= tf_ignore_bad_quals
;
9134 if (TREE_CODE (f
) != TYPENAME_TYPE
)
9136 if (TYPENAME_IS_ENUM_P (t
) && TREE_CODE (f
) != ENUMERAL_TYPE
)
9137 error ("%qT resolves to %qT, which is not an enumeration type",
9139 else if (TYPENAME_IS_CLASS_P (t
) && !CLASS_TYPE_P (f
))
9140 error ("%qT resolves to %qT, which is is not a class type",
9144 return cp_build_qualified_type_real
9145 (f
, cp_type_quals (f
) | cp_type_quals (t
), complain
);
9148 case UNBOUND_CLASS_TEMPLATE
:
9150 tree ctx
= tsubst_aggr_type (TYPE_CONTEXT (t
), args
, complain
,
9151 in_decl
, /*entering_scope=*/1);
9152 tree name
= TYPE_IDENTIFIER (t
);
9153 tree parm_list
= DECL_TEMPLATE_PARMS (TYPE_NAME (t
));
9155 if (ctx
== error_mark_node
|| name
== error_mark_node
)
9156 return error_mark_node
;
9159 parm_list
= tsubst_template_parms (parm_list
, args
, complain
);
9160 return make_unbound_class_template (ctx
, name
, parm_list
, complain
);
9170 tree e1
= tsubst (TREE_OPERAND (t
, 0), args
, complain
, in_decl
);
9171 tree e2
= tsubst_expr (TREE_OPERAND (t
, 1), args
, complain
, in_decl
,
9172 /*integral_constant_expression_p=*/false);
9173 if (e1
== error_mark_node
|| e2
== error_mark_node
)
9174 return error_mark_node
;
9176 return build_nt (ARRAY_REF
, e1
, e2
, NULL_TREE
, NULL_TREE
);
9181 tree e1
= tsubst (TREE_OPERAND (t
, 0), args
, complain
, in_decl
);
9182 tree e2
= tsubst (TREE_OPERAND (t
, 1), args
, complain
, in_decl
);
9183 if (e1
== error_mark_node
|| e2
== error_mark_node
)
9184 return error_mark_node
;
9186 return build_qualified_name (/*type=*/NULL_TREE
,
9187 e1
, e2
, QUALIFIED_NAME_IS_TEMPLATE (t
));
9194 type
= finish_typeof (tsubst_expr
9195 (TYPEOF_TYPE_EXPR (t
), args
,
9197 /*integral_constant_expression_p=*/false));
9198 return cp_build_qualified_type_real (type
,
9200 | cp_type_quals (type
),
9209 finish_decltype_type (tsubst_expr
9210 (DECLTYPE_TYPE_EXPR (t
), args
,
9212 /*integral_constant_expression_p=*/false),
9213 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t
));
9214 return cp_build_qualified_type_real (type
,
9216 | cp_type_quals (type
),
9220 case TYPE_ARGUMENT_PACK
:
9221 case NONTYPE_ARGUMENT_PACK
:
9223 tree r
= make_node (TREE_CODE (t
));
9225 tsubst_template_args (ARGUMENT_PACK_ARGS (t
),
9229 SET_ARGUMENT_PACK_ARGS (r
, packed_out
);
9231 /* For template nontype argument packs, also substitute into
9233 if (TREE_CODE (t
) == NONTYPE_ARGUMENT_PACK
)
9234 TREE_TYPE (r
) = tsubst (TREE_TYPE (t
), args
, complain
, in_decl
);
9241 sorry ("use of %qs in template",
9242 tree_code_name
[(int) TREE_CODE (t
)]);
9243 return error_mark_node
;
9247 /* Like tsubst_expr for a BASELINK. OBJECT_TYPE, if non-NULL, is the
9248 type of the expression on the left-hand side of the "." or "->"
9252 tsubst_baselink (tree baselink
, tree object_type
,
9253 tree args
, tsubst_flags_t complain
, tree in_decl
)
9256 tree qualifying_scope
;
9259 tree template_args
= 0;
9260 bool template_id_p
= false;
9262 /* A baselink indicates a function from a base class. Both the
9263 BASELINK_ACCESS_BINFO and the base class referenced may
9264 indicate bases of the template class, rather than the
9265 instantiated class. In addition, lookups that were not
9266 ambiguous before may be ambiguous now. Therefore, we perform
9267 the lookup again. */
9268 qualifying_scope
= BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink
));
9269 qualifying_scope
= tsubst (qualifying_scope
, args
,
9271 fns
= BASELINK_FUNCTIONS (baselink
);
9272 optype
= BASELINK_OPTYPE (baselink
);
9273 if (TREE_CODE (fns
) == TEMPLATE_ID_EXPR
)
9275 template_id_p
= true;
9276 template_args
= TREE_OPERAND (fns
, 1);
9277 fns
= TREE_OPERAND (fns
, 0);
9279 template_args
= tsubst_template_args (template_args
, args
,
9282 name
= DECL_NAME (get_first_fn (fns
));
9283 baselink
= lookup_fnfields (qualifying_scope
, name
, /*protect=*/1);
9285 /* If lookup found a single function, mark it as used at this
9286 point. (If it lookup found multiple functions the one selected
9287 later by overload resolution will be marked as used at that
9289 if (BASELINK_P (baselink
))
9290 fns
= BASELINK_FUNCTIONS (baselink
);
9291 if (!template_id_p
&& !really_overloaded_fn (fns
))
9292 mark_used (OVL_CURRENT (fns
));
9294 /* Add back the template arguments, if present. */
9295 if (BASELINK_P (baselink
) && template_id_p
)
9296 BASELINK_FUNCTIONS (baselink
)
9297 = build_nt (TEMPLATE_ID_EXPR
,
9298 BASELINK_FUNCTIONS (baselink
),
9300 /* Update the conversion operator type. */
9301 BASELINK_OPTYPE (baselink
)
9302 = tsubst (optype
, args
, complain
, in_decl
);
9305 object_type
= current_class_type
;
9306 return adjust_result_of_qualified_name_lookup (baselink
,
9311 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID. DONE is
9312 true if the qualified-id will be a postfix-expression in-and-of
9313 itself; false if more of the postfix-expression follows the
9314 QUALIFIED_ID. ADDRESS_P is true if the qualified-id is the operand
9318 tsubst_qualified_id (tree qualified_id
, tree args
,
9319 tsubst_flags_t complain
, tree in_decl
,
9320 bool done
, bool address_p
)
9328 gcc_assert (TREE_CODE (qualified_id
) == SCOPE_REF
);
9330 /* Figure out what name to look up. */
9331 name
= TREE_OPERAND (qualified_id
, 1);
9332 if (TREE_CODE (name
) == TEMPLATE_ID_EXPR
)
9335 template_args
= TREE_OPERAND (name
, 1);
9337 template_args
= tsubst_template_args (template_args
, args
,
9339 name
= TREE_OPERAND (name
, 0);
9343 is_template
= false;
9344 template_args
= NULL_TREE
;
9347 /* Substitute into the qualifying scope. When there are no ARGS, we
9348 are just trying to simplify a non-dependent expression. In that
9349 case the qualifying scope may be dependent, and, in any case,
9350 substituting will not help. */
9351 scope
= TREE_OPERAND (qualified_id
, 0);
9354 scope
= tsubst (scope
, args
, complain
, in_decl
);
9355 expr
= tsubst_copy (name
, args
, complain
, in_decl
);
9360 if (dependent_type_p (scope
))
9361 return build_qualified_name (/*type=*/NULL_TREE
,
9363 QUALIFIED_NAME_IS_TEMPLATE (qualified_id
));
9365 if (!BASELINK_P (name
) && !DECL_P (expr
))
9367 if (TREE_CODE (expr
) == BIT_NOT_EXPR
)
9368 /* If this were actually a destructor call, it would have been
9369 parsed as such by the parser. */
9370 expr
= error_mark_node
;
9372 expr
= lookup_qualified_name (scope
, expr
, /*is_type_p=*/0, false);
9373 if (TREE_CODE (TREE_CODE (expr
) == TEMPLATE_DECL
9374 ? DECL_TEMPLATE_RESULT (expr
) : expr
) == TYPE_DECL
)
9376 if (complain
& tf_error
)
9378 error ("dependent-name %qE is parsed as a non-type, but "
9379 "instantiation yields a type", qualified_id
);
9380 inform ("say %<typename %E%> if a type is meant", qualified_id
);
9382 return error_mark_node
;
9388 check_accessibility_of_qualified_id (expr
, /*object_type=*/NULL_TREE
,
9390 /* Remember that there was a reference to this entity. */
9394 if (expr
== error_mark_node
|| TREE_CODE (expr
) == TREE_LIST
)
9396 if (complain
& tf_error
)
9397 qualified_name_lookup_error (scope
,
9398 TREE_OPERAND (qualified_id
, 1),
9400 return error_mark_node
;
9404 expr
= lookup_template_function (expr
, template_args
);
9406 if (expr
== error_mark_node
&& complain
& tf_error
)
9407 qualified_name_lookup_error (scope
, TREE_OPERAND (qualified_id
, 1),
9409 else if (TYPE_P (scope
))
9411 expr
= (adjust_result_of_qualified_name_lookup
9412 (expr
, scope
, current_class_type
));
9413 expr
= (finish_qualified_id_expr
9414 (scope
, expr
, done
, address_p
,
9415 QUALIFIED_NAME_IS_TEMPLATE (qualified_id
),
9416 /*template_arg_p=*/false));
9419 /* Expressions do not generally have reference type. */
9420 if (TREE_CODE (expr
) != SCOPE_REF
9421 /* However, if we're about to form a pointer-to-member, we just
9422 want the referenced member referenced. */
9423 && TREE_CODE (expr
) != OFFSET_REF
)
9424 expr
= convert_from_reference (expr
);
9429 /* Like tsubst, but deals with expressions. This function just replaces
9430 template parms; to finish processing the resultant expression, use
9434 tsubst_copy (tree t
, tree args
, tsubst_flags_t complain
, tree in_decl
)
9436 enum tree_code code
;
9439 if (t
== NULL_TREE
|| t
== error_mark_node
)
9442 code
= TREE_CODE (t
);
9447 r
= retrieve_local_specialization (t
);
9448 gcc_assert (r
!= NULL
);
9449 if (TREE_CODE (r
) == ARGUMENT_PACK_SELECT
)
9450 r
= ARGUMENT_PACK_SELECT_ARG (r
);
9459 if (DECL_TEMPLATE_PARM_P (t
))
9460 return tsubst_copy (DECL_INITIAL (t
), args
, complain
, in_decl
);
9461 /* There is no need to substitute into namespace-scope
9463 if (DECL_NAMESPACE_SCOPE_P (t
))
9465 /* If ARGS is NULL, then T is known to be non-dependent. */
9466 if (args
== NULL_TREE
)
9467 return integral_constant_value (t
);
9469 /* Unfortunately, we cannot just call lookup_name here.
9472 template <int I> int f() {
9474 struct S { void g() { E e = a; } };
9477 When we instantiate f<7>::S::g(), say, lookup_name is not
9478 clever enough to find f<7>::a. */
9480 = tsubst_aggr_type (TREE_TYPE (t
), args
, complain
, in_decl
,
9481 /*entering_scope=*/0);
9483 for (v
= TYPE_VALUES (enum_type
);
9486 if (TREE_PURPOSE (v
) == DECL_NAME (t
))
9487 return TREE_VALUE (v
);
9489 /* We didn't find the name. That should never happen; if
9490 name-lookup found it during preliminary parsing, we
9491 should find it again here during instantiation. */
9497 if (DECL_CONTEXT (t
))
9501 ctx
= tsubst_aggr_type (DECL_CONTEXT (t
), args
, complain
, in_decl
,
9502 /*entering_scope=*/1);
9503 if (ctx
!= DECL_CONTEXT (t
))
9505 tree r
= lookup_field (ctx
, DECL_NAME (t
), 0, false);
9508 if (complain
& tf_error
)
9509 error ("using invalid field %qD", t
);
9510 return error_mark_node
;
9520 if ((DECL_LANG_SPECIFIC (t
) && DECL_TEMPLATE_INFO (t
))
9521 || local_variable_p (t
))
9522 t
= tsubst (t
, args
, complain
, in_decl
);
9527 return tsubst_baselink (t
, current_class_type
, args
, complain
, in_decl
);
9530 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t
))
9531 return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t
)),
9532 args
, complain
, in_decl
);
9533 else if (DECL_FUNCTION_TEMPLATE_P (t
) && DECL_MEMBER_TEMPLATE_P (t
))
9534 return tsubst (t
, args
, complain
, in_decl
);
9535 else if (DECL_CLASS_SCOPE_P (t
)
9536 && uses_template_parms (DECL_CONTEXT (t
)))
9538 /* Template template argument like the following example need
9541 template <template <class> class TT> struct C {};
9542 template <class T> struct D {
9543 template <class U> struct E {};
9548 We are processing the template argument `E' in #1 for
9549 the template instantiation #2. Originally, `E' is a
9550 TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT. Now we
9551 have to substitute this with one having context `D<int>'. */
9553 tree context
= tsubst (DECL_CONTEXT (t
), args
, complain
, in_decl
);
9554 return lookup_field (context
, DECL_NAME(t
), 0, false);
9557 /* Ordinary template template argument. */
9561 case REINTERPRET_CAST_EXPR
:
9562 case CONST_CAST_EXPR
:
9563 case STATIC_CAST_EXPR
:
9564 case DYNAMIC_CAST_EXPR
:
9567 (code
, tsubst (TREE_TYPE (t
), args
, complain
, in_decl
),
9568 tsubst_copy (TREE_OPERAND (t
, 0), args
, complain
, in_decl
));
9571 if (PACK_EXPANSION_P (TREE_OPERAND (t
, 0)))
9573 /* We only want to compute the number of arguments. */
9574 tree expanded
= tsubst_pack_expansion (TREE_OPERAND (t
, 0), args
,
9576 if (expanded
== error_mark_node
)
9577 return error_mark_node
;
9578 return build_int_cst (size_type_node
, TREE_VEC_LENGTH (expanded
));
9584 case TRUTH_NOT_EXPR
:
9587 case UNARY_PLUS_EXPR
: /* Unary + */
9595 (code
, tsubst (TREE_TYPE (t
), args
, complain
, in_decl
),
9596 tsubst_copy (TREE_OPERAND (t
, 0), args
, complain
, in_decl
));
9603 object
= tsubst_copy (TREE_OPERAND (t
, 0), args
, complain
, in_decl
);
9604 name
= TREE_OPERAND (t
, 1);
9605 if (TREE_CODE (name
) == BIT_NOT_EXPR
)
9607 name
= tsubst_copy (TREE_OPERAND (name
, 0), args
,
9609 name
= build1 (BIT_NOT_EXPR
, NULL_TREE
, name
);
9611 else if (TREE_CODE (name
) == SCOPE_REF
9612 && TREE_CODE (TREE_OPERAND (name
, 1)) == BIT_NOT_EXPR
)
9614 tree base
= tsubst_copy (TREE_OPERAND (name
, 0), args
,
9616 name
= TREE_OPERAND (name
, 1);
9617 name
= tsubst_copy (TREE_OPERAND (name
, 0), args
,
9619 name
= build1 (BIT_NOT_EXPR
, NULL_TREE
, name
);
9620 name
= build_qualified_name (/*type=*/NULL_TREE
,
9622 /*template_p=*/false);
9624 else if (TREE_CODE (name
) == BASELINK
)
9625 name
= tsubst_baselink (name
,
9626 non_reference (TREE_TYPE (object
)),
9630 name
= tsubst_copy (name
, args
, complain
, in_decl
);
9631 return build_nt (COMPONENT_REF
, object
, name
, NULL_TREE
);
9637 case TRUNC_DIV_EXPR
:
9639 case FLOOR_DIV_EXPR
:
9640 case ROUND_DIV_EXPR
:
9641 case EXACT_DIV_EXPR
:
9645 case TRUNC_MOD_EXPR
:
9646 case FLOOR_MOD_EXPR
:
9647 case TRUTH_ANDIF_EXPR
:
9648 case TRUTH_ORIF_EXPR
:
9649 case TRUTH_AND_EXPR
:
9666 case PREDECREMENT_EXPR
:
9667 case PREINCREMENT_EXPR
:
9668 case POSTDECREMENT_EXPR
:
9669 case POSTINCREMENT_EXPR
:
9671 (code
, tsubst_copy (TREE_OPERAND (t
, 0), args
, complain
, in_decl
),
9672 tsubst_copy (TREE_OPERAND (t
, 1), args
, complain
, in_decl
));
9675 return build_qualified_name (/*type=*/NULL_TREE
,
9676 tsubst_copy (TREE_OPERAND (t
, 0),
9677 args
, complain
, in_decl
),
9678 tsubst_copy (TREE_OPERAND (t
, 1),
9679 args
, complain
, in_decl
),
9680 QUALIFIED_NAME_IS_TEMPLATE (t
));
9685 tsubst_copy (TREE_OPERAND (t
, 0), args
, complain
, in_decl
),
9686 tsubst_copy (TREE_OPERAND (t
, 1), args
, complain
, in_decl
),
9687 NULL_TREE
, NULL_TREE
);
9691 int n
= VL_EXP_OPERAND_LENGTH (t
);
9692 tree result
= build_vl_exp (CALL_EXPR
, n
);
9694 for (i
= 0; i
< n
; i
++)
9695 TREE_OPERAND (t
, i
) = tsubst_copy (TREE_OPERAND (t
, i
), args
,
9702 case PSEUDO_DTOR_EXPR
:
9705 (code
, tsubst_copy (TREE_OPERAND (t
, 0), args
, complain
, in_decl
),
9706 tsubst_copy (TREE_OPERAND (t
, 1), args
, complain
, in_decl
),
9707 tsubst_copy (TREE_OPERAND (t
, 2), args
, complain
, in_decl
));
9708 TREE_NO_WARNING (r
) = TREE_NO_WARNING (t
);
9715 (code
, tsubst_copy (TREE_OPERAND (t
, 0), args
, complain
, in_decl
),
9716 tsubst_copy (TREE_OPERAND (t
, 1), args
, complain
, in_decl
),
9717 tsubst_copy (TREE_OPERAND (t
, 2), args
, complain
, in_decl
));
9718 NEW_EXPR_USE_GLOBAL (r
) = NEW_EXPR_USE_GLOBAL (t
);
9725 (code
, tsubst_copy (TREE_OPERAND (t
, 0), args
, complain
, in_decl
),
9726 tsubst_copy (TREE_OPERAND (t
, 1), args
, complain
, in_decl
));
9727 DELETE_EXPR_USE_GLOBAL (r
) = DELETE_EXPR_USE_GLOBAL (t
);
9728 DELETE_EXPR_USE_VEC (r
) = DELETE_EXPR_USE_VEC (t
);
9732 case TEMPLATE_ID_EXPR
:
9734 /* Substituted template arguments */
9735 tree fn
= TREE_OPERAND (t
, 0);
9736 tree targs
= TREE_OPERAND (t
, 1);
9738 fn
= tsubst_copy (fn
, args
, complain
, in_decl
);
9740 targs
= tsubst_template_args (targs
, args
, complain
, in_decl
);
9742 return lookup_template_function (fn
, targs
);
9747 tree purpose
, value
, chain
;
9749 if (t
== void_list_node
)
9752 purpose
= TREE_PURPOSE (t
);
9754 purpose
= tsubst_copy (purpose
, args
, complain
, in_decl
);
9755 value
= TREE_VALUE (t
);
9757 value
= tsubst_copy (value
, args
, complain
, in_decl
);
9758 chain
= TREE_CHAIN (t
);
9759 if (chain
&& chain
!= void_type_node
)
9760 chain
= tsubst_copy (chain
, args
, complain
, in_decl
);
9761 if (purpose
== TREE_PURPOSE (t
)
9762 && value
== TREE_VALUE (t
)
9763 && chain
== TREE_CHAIN (t
))
9765 return tree_cons (purpose
, value
, chain
);
9772 case TEMPLATE_TYPE_PARM
:
9773 case TEMPLATE_TEMPLATE_PARM
:
9774 case BOUND_TEMPLATE_TEMPLATE_PARM
:
9775 case TEMPLATE_PARM_INDEX
:
9777 case REFERENCE_TYPE
:
9783 case UNBOUND_CLASS_TEMPLATE
:
9787 return tsubst (t
, args
, complain
, in_decl
);
9789 case IDENTIFIER_NODE
:
9790 if (IDENTIFIER_TYPENAME_P (t
))
9792 tree new_type
= tsubst (TREE_TYPE (t
), args
, complain
, in_decl
);
9793 return mangle_conv_op_name_for_type (new_type
);
9799 /* This is handled by tsubst_copy_and_build. */
9803 return build_x_va_arg (tsubst_copy (TREE_OPERAND (t
, 0), args
, complain
,
9805 tsubst (TREE_TYPE (t
), args
, complain
, in_decl
));
9807 case CLEANUP_POINT_EXPR
:
9808 /* We shouldn't have built any of these during initial template
9809 generation. Instead, they should be built during instantiation
9810 in response to the saved STMT_IS_FULL_EXPR_P setting. */
9814 mark_used (TREE_OPERAND (t
, 1));
9817 case EXPR_PACK_EXPANSION
:
9818 error ("invalid use of pack expansion expression");
9819 return error_mark_node
;
9821 case NONTYPE_ARGUMENT_PACK
:
9822 error ("use %<...%> to expand argument pack");
9823 return error_mark_node
;
9830 /* Like tsubst_copy, but specifically for OpenMP clauses. */
9833 tsubst_omp_clauses (tree clauses
, tree args
, tsubst_flags_t complain
,
9836 tree new_clauses
= NULL
, nc
, oc
;
9838 for (oc
= clauses
; oc
; oc
= OMP_CLAUSE_CHAIN (oc
))
9840 nc
= copy_node (oc
);
9841 OMP_CLAUSE_CHAIN (nc
) = new_clauses
;
9844 switch (OMP_CLAUSE_CODE (nc
))
9846 case OMP_CLAUSE_PRIVATE
:
9847 case OMP_CLAUSE_SHARED
:
9848 case OMP_CLAUSE_FIRSTPRIVATE
:
9849 case OMP_CLAUSE_LASTPRIVATE
:
9850 case OMP_CLAUSE_REDUCTION
:
9851 case OMP_CLAUSE_COPYIN
:
9852 case OMP_CLAUSE_COPYPRIVATE
:
9854 case OMP_CLAUSE_NUM_THREADS
:
9855 case OMP_CLAUSE_SCHEDULE
:
9856 OMP_CLAUSE_OPERAND (nc
, 0)
9857 = tsubst_expr (OMP_CLAUSE_OPERAND (oc
, 0), args
, complain
,
9858 in_decl
, /*integral_constant_expression_p=*/false);
9860 case OMP_CLAUSE_NOWAIT
:
9861 case OMP_CLAUSE_ORDERED
:
9862 case OMP_CLAUSE_DEFAULT
:
9869 return finish_omp_clauses (nreverse (new_clauses
));
9872 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes. */
9875 tsubst_copy_asm_operands (tree t
, tree args
, tsubst_flags_t complain
,
9878 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
9880 tree purpose
, value
, chain
;
9885 if (TREE_CODE (t
) != TREE_LIST
)
9886 return tsubst_copy_and_build (t
, args
, complain
, in_decl
,
9887 /*function_p=*/false,
9888 /*integral_constant_expression_p=*/false);
9890 if (t
== void_list_node
)
9893 purpose
= TREE_PURPOSE (t
);
9895 purpose
= RECUR (purpose
);
9896 value
= TREE_VALUE (t
);
9898 value
= RECUR (value
);
9899 chain
= TREE_CHAIN (t
);
9900 if (chain
&& chain
!= void_type_node
)
9901 chain
= RECUR (chain
);
9902 return tree_cons (purpose
, value
, chain
);
9906 /* Like tsubst_copy for expressions, etc. but also does semantic
9910 tsubst_expr (tree t
, tree args
, tsubst_flags_t complain
, tree in_decl
,
9911 bool integral_constant_expression_p
)
9913 #define RECUR(NODE) \
9914 tsubst_expr ((NODE), args, complain, in_decl, \
9915 integral_constant_expression_p)
9919 if (t
== NULL_TREE
|| t
== error_mark_node
)
9922 if (EXPR_HAS_LOCATION (t
))
9923 input_location
= EXPR_LOCATION (t
);
9924 if (STATEMENT_CODE_P (TREE_CODE (t
)))
9925 current_stmt_tree ()->stmts_are_full_exprs_p
= STMT_IS_FULL_EXPR_P (t
);
9927 switch (TREE_CODE (t
))
9929 case STATEMENT_LIST
:
9931 tree_stmt_iterator i
;
9932 for (i
= tsi_start (t
); !tsi_end_p (i
); tsi_next (&i
))
9933 RECUR (tsi_stmt (i
));
9937 case CTOR_INITIALIZER
:
9938 finish_mem_initializers (tsubst_initializer_list
9939 (TREE_OPERAND (t
, 0), args
));
9943 finish_return_stmt (RECUR (TREE_OPERAND (t
, 0)));
9947 tmp
= RECUR (EXPR_STMT_EXPR (t
));
9948 if (EXPR_STMT_STMT_EXPR_RESULT (t
))
9949 finish_stmt_expr_expr (tmp
, cur_stmt_expr
);
9951 finish_expr_stmt (tmp
);
9955 do_using_directive (RECUR (USING_STMT_NAMESPACE (t
)));
9963 decl
= DECL_EXPR_DECL (t
);
9964 if (TREE_CODE (decl
) == LABEL_DECL
)
9965 finish_label_decl (DECL_NAME (decl
));
9966 else if (TREE_CODE (decl
) == USING_DECL
)
9968 tree scope
= USING_DECL_SCOPE (decl
);
9969 tree name
= DECL_NAME (decl
);
9972 scope
= RECUR (scope
);
9973 decl
= lookup_qualified_name (scope
, name
,
9974 /*is_type_p=*/false,
9975 /*complain=*/false);
9976 if (decl
== error_mark_node
|| TREE_CODE (decl
) == TREE_LIST
)
9977 qualified_name_lookup_error (scope
, name
, decl
);
9979 do_local_using_decl (decl
, scope
, name
);
9983 init
= DECL_INITIAL (decl
);
9984 decl
= tsubst (decl
, args
, complain
, in_decl
);
9985 if (decl
!= error_mark_node
)
9987 /* By marking the declaration as instantiated, we avoid
9988 trying to instantiate it. Since instantiate_decl can't
9989 handle local variables, and since we've already done
9990 all that needs to be done, that's the right thing to
9992 if (TREE_CODE (decl
) == VAR_DECL
)
9993 DECL_TEMPLATE_INSTANTIATED (decl
) = 1;
9994 if (TREE_CODE (decl
) == VAR_DECL
9995 && ANON_AGGR_TYPE_P (TREE_TYPE (decl
)))
9996 /* Anonymous aggregates are a special case. */
9997 finish_anon_union (decl
);
10000 maybe_push_decl (decl
);
10001 if (TREE_CODE (decl
) == VAR_DECL
10002 && DECL_PRETTY_FUNCTION_P (decl
))
10004 /* For __PRETTY_FUNCTION__ we have to adjust the
10006 const char *const name
10007 = cxx_printable_name (current_function_decl
, 2);
10008 init
= cp_fname_init (name
, &TREE_TYPE (decl
));
10012 tree t
= RECUR (init
);
10015 /* If we had an initializer but it
10016 instantiated to nothing,
10017 value-initialize the object. This will
10018 only occur when the initializer was a
10019 pack expansion where the parameter packs
10020 used in that expansion were of length
10022 init
= build_default_init (TREE_TYPE (decl
),
10028 finish_decl (decl
, init
, NULL_TREE
);
10033 /* A DECL_EXPR can also be used as an expression, in the condition
10034 clause of an if/for/while construct. */
10039 stmt
= begin_for_stmt ();
10040 RECUR (FOR_INIT_STMT (t
));
10041 finish_for_init_stmt (stmt
);
10042 tmp
= RECUR (FOR_COND (t
));
10043 finish_for_cond (tmp
, stmt
);
10044 tmp
= RECUR (FOR_EXPR (t
));
10045 finish_for_expr (tmp
, stmt
);
10046 RECUR (FOR_BODY (t
));
10047 finish_for_stmt (stmt
);
10051 stmt
= begin_while_stmt ();
10052 tmp
= RECUR (WHILE_COND (t
));
10053 finish_while_stmt_cond (tmp
, stmt
);
10054 RECUR (WHILE_BODY (t
));
10055 finish_while_stmt (stmt
);
10059 stmt
= begin_do_stmt ();
10060 RECUR (DO_BODY (t
));
10061 finish_do_body (stmt
);
10062 tmp
= RECUR (DO_COND (t
));
10063 finish_do_stmt (tmp
, stmt
);
10067 stmt
= begin_if_stmt ();
10068 tmp
= RECUR (IF_COND (t
));
10069 finish_if_stmt_cond (tmp
, stmt
);
10070 RECUR (THEN_CLAUSE (t
));
10071 finish_then_clause (stmt
);
10073 if (ELSE_CLAUSE (t
))
10075 begin_else_clause (stmt
);
10076 RECUR (ELSE_CLAUSE (t
));
10077 finish_else_clause (stmt
);
10080 finish_if_stmt (stmt
);
10084 if (BIND_EXPR_BODY_BLOCK (t
))
10085 stmt
= begin_function_body ();
10087 stmt
= begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t
)
10088 ? BCS_TRY_BLOCK
: 0);
10090 RECUR (BIND_EXPR_BODY (t
));
10092 if (BIND_EXPR_BODY_BLOCK (t
))
10093 finish_function_body (stmt
);
10095 finish_compound_stmt (stmt
);
10099 finish_break_stmt ();
10102 case CONTINUE_STMT
:
10103 finish_continue_stmt ();
10107 stmt
= begin_switch_stmt ();
10108 tmp
= RECUR (SWITCH_STMT_COND (t
));
10109 finish_switch_cond (tmp
, stmt
);
10110 RECUR (SWITCH_STMT_BODY (t
));
10111 finish_switch_stmt (stmt
);
10114 case CASE_LABEL_EXPR
:
10115 finish_case_label (RECUR (CASE_LOW (t
)),
10116 RECUR (CASE_HIGH (t
)));
10120 finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t
)));
10124 tmp
= GOTO_DESTINATION (t
);
10125 if (TREE_CODE (tmp
) != LABEL_DECL
)
10126 /* Computed goto's must be tsubst'd into. On the other hand,
10127 non-computed gotos must not be; the identifier in question
10128 will have no binding. */
10131 tmp
= DECL_NAME (tmp
);
10132 finish_goto_stmt (tmp
);
10136 tmp
= finish_asm_stmt
10137 (ASM_VOLATILE_P (t
),
10138 RECUR (ASM_STRING (t
)),
10139 tsubst_copy_asm_operands (ASM_OUTPUTS (t
), args
, complain
, in_decl
),
10140 tsubst_copy_asm_operands (ASM_INPUTS (t
), args
, complain
, in_decl
),
10141 tsubst_copy_asm_operands (ASM_CLOBBERS (t
), args
, complain
, in_decl
));
10143 tree asm_expr
= tmp
;
10144 if (TREE_CODE (asm_expr
) == CLEANUP_POINT_EXPR
)
10145 asm_expr
= TREE_OPERAND (asm_expr
, 0);
10146 ASM_INPUT_P (asm_expr
) = ASM_INPUT_P (t
);
10153 stmt
= begin_try_block ();
10154 RECUR (TRY_STMTS (t
));
10155 finish_cleanup_try_block (stmt
);
10156 finish_cleanup (RECUR (TRY_HANDLERS (t
)), stmt
);
10160 tree compound_stmt
= NULL_TREE
;
10162 if (FN_TRY_BLOCK_P (t
))
10163 stmt
= begin_function_try_block (&compound_stmt
);
10165 stmt
= begin_try_block ();
10167 RECUR (TRY_STMTS (t
));
10169 if (FN_TRY_BLOCK_P (t
))
10170 finish_function_try_block (stmt
);
10172 finish_try_block (stmt
);
10174 RECUR (TRY_HANDLERS (t
));
10175 if (FN_TRY_BLOCK_P (t
))
10176 finish_function_handler_sequence (stmt
, compound_stmt
);
10178 finish_handler_sequence (stmt
);
10184 tree decl
= HANDLER_PARMS (t
);
10188 decl
= tsubst (decl
, args
, complain
, in_decl
);
10189 /* Prevent instantiate_decl from trying to instantiate
10190 this variable. We've already done all that needs to be
10192 if (decl
!= error_mark_node
)
10193 DECL_TEMPLATE_INSTANTIATED (decl
) = 1;
10195 stmt
= begin_handler ();
10196 finish_handler_parms (decl
, stmt
);
10197 RECUR (HANDLER_BODY (t
));
10198 finish_handler (stmt
);
10203 tsubst (TREE_TYPE (t
), args
, complain
, NULL_TREE
);
10206 case STATIC_ASSERT
:
10209 tsubst_expr (STATIC_ASSERT_CONDITION (t
),
10212 /*integral_constant_expression_p=*/true);
10213 finish_static_assert (condition
,
10214 STATIC_ASSERT_MESSAGE (t
),
10215 STATIC_ASSERT_SOURCE_LOCATION (t
),
10216 /*member_p=*/false);
10221 tmp
= tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t
),
10222 args
, complain
, in_decl
);
10223 stmt
= begin_omp_parallel ();
10224 RECUR (OMP_PARALLEL_BODY (t
));
10225 OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp
, stmt
))
10226 = OMP_PARALLEL_COMBINED (t
);
10231 tree clauses
, decl
, init
, cond
, incr
, body
, pre_body
;
10233 clauses
= tsubst_omp_clauses (OMP_FOR_CLAUSES (t
),
10234 args
, complain
, in_decl
);
10235 init
= OMP_FOR_INIT (t
);
10236 gcc_assert (TREE_CODE (init
) == MODIFY_EXPR
);
10237 decl
= RECUR (TREE_OPERAND (init
, 0));
10238 init
= RECUR (TREE_OPERAND (init
, 1));
10239 cond
= RECUR (OMP_FOR_COND (t
));
10240 incr
= RECUR (OMP_FOR_INCR (t
));
10242 stmt
= begin_omp_structured_block ();
10244 pre_body
= push_stmt_list ();
10245 RECUR (OMP_FOR_PRE_BODY (t
));
10246 pre_body
= pop_stmt_list (pre_body
);
10248 body
= push_stmt_list ();
10249 RECUR (OMP_FOR_BODY (t
));
10250 body
= pop_stmt_list (body
);
10252 t
= finish_omp_for (EXPR_LOCATION (t
), decl
, init
, cond
, incr
, body
,
10255 OMP_FOR_CLAUSES (t
) = clauses
;
10257 add_stmt (finish_omp_structured_block (stmt
));
10263 tmp
= tsubst_omp_clauses (OMP_CLAUSES (t
), args
, complain
, in_decl
);
10264 stmt
= push_stmt_list ();
10265 RECUR (OMP_BODY (t
));
10266 stmt
= pop_stmt_list (stmt
);
10269 OMP_BODY (t
) = stmt
;
10270 OMP_CLAUSES (t
) = tmp
;
10278 stmt
= push_stmt_list ();
10279 RECUR (OMP_BODY (t
));
10280 stmt
= pop_stmt_list (stmt
);
10283 OMP_BODY (t
) = stmt
;
10288 if (OMP_ATOMIC_DEPENDENT_P (t
))
10290 tree op1
= TREE_OPERAND (t
, 1);
10291 tree lhs
= RECUR (TREE_OPERAND (op1
, 0));
10292 tree rhs
= RECUR (TREE_OPERAND (op1
, 1));
10293 finish_omp_atomic (TREE_CODE (op1
), lhs
, rhs
);
10297 case EXPR_PACK_EXPANSION
:
10298 error ("invalid use of pack expansion expression");
10299 return error_mark_node
;
10301 case NONTYPE_ARGUMENT_PACK
:
10302 error ("use %<...%> to expand argument pack");
10303 return error_mark_node
;
10306 gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t
)));
10308 return tsubst_copy_and_build (t
, args
, complain
, in_decl
,
10309 /*function_p=*/false,
10310 integral_constant_expression_p
);
10317 /* T is a postfix-expression that is not being used in a function
10318 call. Return the substituted version of T. */
10321 tsubst_non_call_postfix_expression (tree t
, tree args
,
10322 tsubst_flags_t complain
,
10325 if (TREE_CODE (t
) == SCOPE_REF
)
10326 t
= tsubst_qualified_id (t
, args
, complain
, in_decl
,
10327 /*done=*/false, /*address_p=*/false);
10329 t
= tsubst_copy_and_build (t
, args
, complain
, in_decl
,
10330 /*function_p=*/false,
10331 /*integral_constant_expression_p=*/false);
10336 /* Like tsubst but deals with expressions and performs semantic
10337 analysis. FUNCTION_P is true if T is the "F" in "F (ARGS)". */
10340 tsubst_copy_and_build (tree t
,
10342 tsubst_flags_t complain
,
10345 bool integral_constant_expression_p
)
10347 #define RECUR(NODE) \
10348 tsubst_copy_and_build (NODE, args, complain, in_decl, \
10349 /*function_p=*/false, \
10350 integral_constant_expression_p)
10354 if (t
== NULL_TREE
|| t
== error_mark_node
)
10357 switch (TREE_CODE (t
))
10361 /* Fall through. */
10362 case IDENTIFIER_NODE
:
10366 bool non_integral_constant_expression_p
;
10367 const char *error_msg
;
10369 if (IDENTIFIER_TYPENAME_P (t
))
10371 tree new_type
= tsubst (TREE_TYPE (t
), args
, complain
, in_decl
);
10372 t
= mangle_conv_op_name_for_type (new_type
);
10375 /* Look up the name. */
10376 decl
= lookup_name (t
);
10378 /* By convention, expressions use ERROR_MARK_NODE to indicate
10379 failure, not NULL_TREE. */
10380 if (decl
== NULL_TREE
)
10381 decl
= error_mark_node
;
10383 decl
= finish_id_expression (t
, decl
, NULL_TREE
,
10385 integral_constant_expression_p
,
10386 /*allow_non_integral_constant_expression_p=*/false,
10387 &non_integral_constant_expression_p
,
10388 /*template_p=*/false,
10390 /*address_p=*/false,
10391 /*template_arg_p=*/false,
10395 if (!function_p
&& TREE_CODE (decl
) == IDENTIFIER_NODE
)
10396 decl
= unqualified_name_lookup_error (decl
);
10400 case TEMPLATE_ID_EXPR
:
10403 tree
template = RECUR (TREE_OPERAND (t
, 0));
10404 tree targs
= TREE_OPERAND (t
, 1);
10407 targs
= tsubst_template_args (targs
, args
, complain
, in_decl
);
10409 if (TREE_CODE (template) == COMPONENT_REF
)
10411 object
= TREE_OPERAND (template, 0);
10412 template = TREE_OPERAND (template, 1);
10415 object
= NULL_TREE
;
10416 template = lookup_template_function (template, targs
);
10419 return build3 (COMPONENT_REF
, TREE_TYPE (template),
10420 object
, template, NULL_TREE
);
10422 return baselink_for_fns (template);
10427 tree r
= RECUR (TREE_OPERAND (t
, 0));
10429 if (REFERENCE_REF_P (t
))
10431 /* A type conversion to reference type will be enclosed in
10432 such an indirect ref, but the substitution of the cast
10433 will have also added such an indirect ref. */
10434 if (TREE_CODE (TREE_TYPE (r
)) == REFERENCE_TYPE
)
10435 r
= convert_from_reference (r
);
10438 r
= build_x_indirect_ref (r
, "unary *");
10444 (tsubst (TREE_TYPE (t
), args
, complain
, in_decl
),
10445 RECUR (TREE_OPERAND (t
, 0)));
10448 case REINTERPRET_CAST_EXPR
:
10449 case CONST_CAST_EXPR
:
10450 case DYNAMIC_CAST_EXPR
:
10451 case STATIC_CAST_EXPR
:
10456 type
= tsubst (TREE_TYPE (t
), args
, complain
, in_decl
);
10457 if (integral_constant_expression_p
10458 && !cast_valid_in_integral_constant_expression_p (type
))
10460 error ("a cast to a type other than an integral or "
10461 "enumeration type cannot appear in a constant-expression");
10462 return error_mark_node
;
10465 op
= RECUR (TREE_OPERAND (t
, 0));
10467 switch (TREE_CODE (t
))
10470 return build_functional_cast (type
, op
);
10471 case REINTERPRET_CAST_EXPR
:
10472 return build_reinterpret_cast (type
, op
);
10473 case CONST_CAST_EXPR
:
10474 return build_const_cast (type
, op
);
10475 case DYNAMIC_CAST_EXPR
:
10476 return build_dynamic_cast (type
, op
);
10477 case STATIC_CAST_EXPR
:
10478 return build_static_cast (type
, op
);
10480 gcc_unreachable ();
10484 case POSTDECREMENT_EXPR
:
10485 case POSTINCREMENT_EXPR
:
10486 op1
= tsubst_non_call_postfix_expression (TREE_OPERAND (t
, 0),
10487 args
, complain
, in_decl
);
10488 return build_x_unary_op (TREE_CODE (t
), op1
);
10490 case PREDECREMENT_EXPR
:
10491 case PREINCREMENT_EXPR
:
10495 case TRUTH_NOT_EXPR
:
10496 case UNARY_PLUS_EXPR
: /* Unary + */
10497 case REALPART_EXPR
:
10498 case IMAGPART_EXPR
:
10499 return build_x_unary_op (TREE_CODE (t
), RECUR (TREE_OPERAND (t
, 0)));
10502 op1
= TREE_OPERAND (t
, 0);
10503 if (TREE_CODE (op1
) == SCOPE_REF
)
10504 op1
= tsubst_qualified_id (op1
, args
, complain
, in_decl
,
10505 /*done=*/true, /*address_p=*/true);
10507 op1
= tsubst_non_call_postfix_expression (op1
, args
, complain
,
10509 if (TREE_CODE (op1
) == LABEL_DECL
)
10510 return finish_label_address_expr (DECL_NAME (op1
));
10511 return build_x_unary_op (ADDR_EXPR
, op1
);
10516 case TRUNC_DIV_EXPR
:
10517 case CEIL_DIV_EXPR
:
10518 case FLOOR_DIV_EXPR
:
10519 case ROUND_DIV_EXPR
:
10520 case EXACT_DIV_EXPR
:
10524 case TRUNC_MOD_EXPR
:
10525 case FLOOR_MOD_EXPR
:
10526 case TRUTH_ANDIF_EXPR
:
10527 case TRUTH_ORIF_EXPR
:
10528 case TRUTH_AND_EXPR
:
10529 case TRUTH_OR_EXPR
:
10544 return build_x_binary_op
10546 RECUR (TREE_OPERAND (t
, 0)),
10547 (TREE_NO_WARNING (TREE_OPERAND (t
, 0))
10549 : TREE_CODE (TREE_OPERAND (t
, 0))),
10550 RECUR (TREE_OPERAND (t
, 1)),
10551 (TREE_NO_WARNING (TREE_OPERAND (t
, 1))
10553 : TREE_CODE (TREE_OPERAND (t
, 1))),
10554 /*overloaded_p=*/NULL
);
10557 return tsubst_qualified_id (t
, args
, complain
, in_decl
, /*done=*/true,
10558 /*address_p=*/false);
10560 op1
= tsubst_non_call_postfix_expression (TREE_OPERAND (t
, 0),
10561 args
, complain
, in_decl
);
10562 return build_x_binary_op (ARRAY_REF
, op1
,
10563 (TREE_NO_WARNING (TREE_OPERAND (t
, 0))
10565 : TREE_CODE (TREE_OPERAND (t
, 0))),
10566 RECUR (TREE_OPERAND (t
, 1)),
10567 (TREE_NO_WARNING (TREE_OPERAND (t
, 1))
10569 : TREE_CODE (TREE_OPERAND (t
, 1))),
10570 /*overloaded_p=*/NULL
);
10573 if (PACK_EXPANSION_P (TREE_OPERAND (t
, 0)))
10575 /* We only want to compute the number of arguments. */
10576 tree expanded
= tsubst_pack_expansion (TREE_OPERAND (t
, 0), args
,
10577 complain
, in_decl
);
10578 if (expanded
== error_mark_node
)
10579 return error_mark_node
;
10580 return build_int_cst (size_type_node
, TREE_VEC_LENGTH (expanded
));
10585 op1
= TREE_OPERAND (t
, 0);
10588 /* When there are no ARGS, we are trying to evaluate a
10589 non-dependent expression from the parser. Trying to do
10590 the substitutions may not work. */
10592 op1
= TREE_TYPE (op1
);
10597 op1
= tsubst_copy_and_build (op1
, args
, complain
, in_decl
,
10598 /*function_p=*/false,
10599 /*integral_constant_expression_p=*/false);
10603 return cxx_sizeof_or_alignof_type (op1
, TREE_CODE (t
), true);
10605 return cxx_sizeof_or_alignof_expr (op1
, TREE_CODE (t
));
10609 tree r
= build_x_modify_expr
10610 (RECUR (TREE_OPERAND (t
, 0)),
10611 TREE_CODE (TREE_OPERAND (t
, 1)),
10612 RECUR (TREE_OPERAND (t
, 2)));
10613 /* TREE_NO_WARNING must be set if either the expression was
10614 parenthesized or it uses an operator such as >>= rather
10615 than plain assignment. In the former case, it was already
10616 set and must be copied. In the latter case,
10617 build_x_modify_expr sets it and it must not be reset
10619 if (TREE_NO_WARNING (t
))
10620 TREE_NO_WARNING (r
) = TREE_NO_WARNING (t
);
10625 op1
= tsubst_non_call_postfix_expression (TREE_OPERAND (t
, 0),
10626 args
, complain
, in_decl
);
10627 /* Remember that there was a reference to this entity. */
10630 return build_x_arrow (op1
);
10634 tree init
= RECUR (TREE_OPERAND (t
, 3));
10636 if (TREE_OPERAND (t
, 3) && !init
)
10637 /* If there was an initializer in the the original tree, but
10638 it instantiated to an empty list, then we should pass on
10639 VOID_ZERO_NODE to tell build_new that it was an empty
10640 initializer () rather than no initializer. This can only
10641 happen when the initializer is a pack expansion whose
10642 parameter packs are of length zero. */
10643 init
= void_zero_node
;
10646 (RECUR (TREE_OPERAND (t
, 0)),
10647 RECUR (TREE_OPERAND (t
, 1)),
10648 RECUR (TREE_OPERAND (t
, 2)),
10650 NEW_EXPR_USE_GLOBAL (t
));
10654 return delete_sanity
10655 (RECUR (TREE_OPERAND (t
, 0)),
10656 RECUR (TREE_OPERAND (t
, 1)),
10657 DELETE_EXPR_USE_VEC (t
),
10658 DELETE_EXPR_USE_GLOBAL (t
));
10660 case COMPOUND_EXPR
:
10661 return build_x_compound_expr (RECUR (TREE_OPERAND (t
, 0)),
10662 RECUR (TREE_OPERAND (t
, 1)));
10671 function
= CALL_EXPR_FN (t
);
10672 /* When we parsed the expression, we determined whether or
10673 not Koenig lookup should be performed. */
10674 koenig_p
= KOENIG_LOOKUP_P (t
);
10675 if (TREE_CODE (function
) == SCOPE_REF
)
10677 qualified_p
= true;
10678 function
= tsubst_qualified_id (function
, args
, complain
, in_decl
,
10680 /*address_p=*/false);
10684 if (TREE_CODE (function
) == COMPONENT_REF
)
10686 tree op
= TREE_OPERAND (function
, 1);
10688 qualified_p
= (TREE_CODE (op
) == SCOPE_REF
10689 || (BASELINK_P (op
)
10690 && BASELINK_QUALIFIED_P (op
)));
10693 qualified_p
= false;
10695 function
= tsubst_copy_and_build (function
, args
, complain
,
10698 integral_constant_expression_p
);
10700 if (BASELINK_P (function
))
10701 qualified_p
= true;
10704 /* FIXME: Rewrite this so as not to construct an arglist. */
10705 call_args
= RECUR (CALL_EXPR_ARGS (t
));
10707 /* We do not perform argument-dependent lookup if normal
10708 lookup finds a non-function, in accordance with the
10709 expected resolution of DR 218. */
10711 && ((is_overloaded_fn (function
)
10712 /* If lookup found a member function, the Koenig lookup is
10713 not appropriate, even if an unqualified-name was used
10714 to denote the function. */
10715 && !DECL_FUNCTION_MEMBER_P (get_first_fn (function
)))
10716 || TREE_CODE (function
) == IDENTIFIER_NODE
))
10717 function
= perform_koenig_lookup (function
, call_args
);
10719 if (TREE_CODE (function
) == IDENTIFIER_NODE
)
10721 unqualified_name_lookup_error (function
);
10722 return error_mark_node
;
10725 /* Remember that there was a reference to this entity. */
10726 if (DECL_P (function
))
10727 mark_used (function
);
10729 if (TREE_CODE (function
) == OFFSET_REF
)
10730 return build_offset_ref_call_from_tree (function
, call_args
);
10731 if (TREE_CODE (function
) == COMPONENT_REF
)
10733 if (!BASELINK_P (TREE_OPERAND (function
, 1)))
10734 return finish_call_expr (function
, call_args
,
10735 /*disallow_virtual=*/false,
10736 /*koenig_p=*/false);
10738 return (build_new_method_call
10739 (TREE_OPERAND (function
, 0),
10740 TREE_OPERAND (function
, 1),
10741 call_args
, NULL_TREE
,
10742 qualified_p
? LOOKUP_NONVIRTUAL
: LOOKUP_NORMAL
,
10745 return finish_call_expr (function
, call_args
,
10746 /*disallow_virtual=*/qualified_p
,
10751 return build_x_conditional_expr
10752 (RECUR (TREE_OPERAND (t
, 0)),
10753 RECUR (TREE_OPERAND (t
, 1)),
10754 RECUR (TREE_OPERAND (t
, 2)));
10756 case PSEUDO_DTOR_EXPR
:
10757 return finish_pseudo_destructor_expr
10758 (RECUR (TREE_OPERAND (t
, 0)),
10759 RECUR (TREE_OPERAND (t
, 1)),
10760 RECUR (TREE_OPERAND (t
, 2)));
10764 tree purpose
, value
, chain
;
10766 if (t
== void_list_node
)
10769 if ((TREE_PURPOSE (t
) && PACK_EXPANSION_P (TREE_PURPOSE (t
)))
10770 || (TREE_VALUE (t
) && PACK_EXPANSION_P (TREE_VALUE (t
))))
10772 /* We have pack expansions, so expand those and
10773 create a new list out of it. */
10774 tree purposevec
= NULL_TREE
;
10775 tree valuevec
= NULL_TREE
;
10779 /* Expand the argument expressions. */
10780 if (TREE_PURPOSE (t
))
10781 purposevec
= tsubst_pack_expansion (TREE_PURPOSE (t
), args
,
10782 complain
, in_decl
);
10783 if (TREE_VALUE (t
))
10784 valuevec
= tsubst_pack_expansion (TREE_VALUE (t
), args
,
10785 complain
, in_decl
);
10787 /* Build the rest of the list. */
10788 chain
= TREE_CHAIN (t
);
10789 if (chain
&& chain
!= void_type_node
)
10790 chain
= RECUR (chain
);
10792 /* Determine the number of arguments. */
10793 if (purposevec
&& TREE_CODE (purposevec
) == TREE_VEC
)
10795 len
= TREE_VEC_LENGTH (purposevec
);
10796 gcc_assert (!valuevec
|| len
== TREE_VEC_LENGTH (valuevec
));
10798 else if (TREE_CODE (valuevec
) == TREE_VEC
)
10799 len
= TREE_VEC_LENGTH (valuevec
);
10802 /* Since we only performed a partial substitution into
10803 the argument pack, we only return a single list
10805 if (purposevec
== TREE_PURPOSE (t
)
10806 && valuevec
== TREE_VALUE (t
)
10807 && chain
== TREE_CHAIN (t
))
10810 return tree_cons (purposevec
, valuevec
, chain
);
10813 /* Convert the argument vectors into a TREE_LIST */
10817 /* Grab the Ith values. */
10819 purpose
= purposevec
? TREE_VEC_ELT (purposevec
, i
)
10822 = valuevec
? convert_from_reference (TREE_VEC_ELT (valuevec
, i
))
10825 /* Build the list (backwards). */
10826 chain
= tree_cons (purpose
, value
, chain
);
10832 purpose
= TREE_PURPOSE (t
);
10834 purpose
= RECUR (purpose
);
10835 value
= TREE_VALUE (t
);
10837 value
= RECUR (value
);
10838 chain
= TREE_CHAIN (t
);
10839 if (chain
&& chain
!= void_type_node
)
10840 chain
= RECUR (chain
);
10841 if (purpose
== TREE_PURPOSE (t
)
10842 && value
== TREE_VALUE (t
)
10843 && chain
== TREE_CHAIN (t
))
10845 return tree_cons (purpose
, value
, chain
);
10848 case COMPONENT_REF
:
10854 object
= tsubst_non_call_postfix_expression (TREE_OPERAND (t
, 0),
10855 args
, complain
, in_decl
);
10856 /* Remember that there was a reference to this entity. */
10857 if (DECL_P (object
))
10858 mark_used (object
);
10859 object_type
= TREE_TYPE (object
);
10861 member
= TREE_OPERAND (t
, 1);
10862 if (BASELINK_P (member
))
10863 member
= tsubst_baselink (member
,
10864 non_reference (TREE_TYPE (object
)),
10865 args
, complain
, in_decl
);
10867 member
= tsubst_copy (member
, args
, complain
, in_decl
);
10868 if (member
== error_mark_node
)
10869 return error_mark_node
;
10871 if (object_type
&& !CLASS_TYPE_P (object_type
))
10873 if (TREE_CODE (member
) == BIT_NOT_EXPR
)
10874 return finish_pseudo_destructor_expr (object
,
10877 else if (TREE_CODE (member
) == SCOPE_REF
10878 && (TREE_CODE (TREE_OPERAND (member
, 1)) == BIT_NOT_EXPR
))
10879 return finish_pseudo_destructor_expr (object
,
10883 else if (TREE_CODE (member
) == SCOPE_REF
10884 && TREE_CODE (TREE_OPERAND (member
, 1)) == TEMPLATE_ID_EXPR
)
10889 /* Lookup the template functions now that we know what the
10891 tmpl
= TREE_OPERAND (TREE_OPERAND (member
, 1), 0);
10892 args
= TREE_OPERAND (TREE_OPERAND (member
, 1), 1);
10893 member
= lookup_qualified_name (TREE_OPERAND (member
, 0), tmpl
,
10894 /*is_type_p=*/false,
10895 /*complain=*/false);
10896 if (BASELINK_P (member
))
10898 BASELINK_FUNCTIONS (member
)
10899 = build_nt (TEMPLATE_ID_EXPR
, BASELINK_FUNCTIONS (member
),
10901 member
= (adjust_result_of_qualified_name_lookup
10902 (member
, BINFO_TYPE (BASELINK_BINFO (member
)),
10907 qualified_name_lookup_error (object_type
, tmpl
, member
);
10908 return error_mark_node
;
10911 else if (TREE_CODE (member
) == SCOPE_REF
10912 && !CLASS_TYPE_P (TREE_OPERAND (member
, 0))
10913 && TREE_CODE (TREE_OPERAND (member
, 0)) != NAMESPACE_DECL
)
10915 if (complain
& tf_error
)
10917 if (TYPE_P (TREE_OPERAND (member
, 0)))
10918 error ("%qT is not a class or namespace",
10919 TREE_OPERAND (member
, 0));
10921 error ("%qD is not a class or namespace",
10922 TREE_OPERAND (member
, 0));
10924 return error_mark_node
;
10926 else if (TREE_CODE (member
) == FIELD_DECL
)
10927 return finish_non_static_data_member (member
, object
, NULL_TREE
);
10929 return finish_class_member_access_expr (object
, member
,
10930 /*template_p=*/false);
10935 (RECUR (TREE_OPERAND (t
, 0)));
10939 VEC(constructor_elt
,gc
) *n
;
10940 constructor_elt
*ce
;
10941 unsigned HOST_WIDE_INT idx
;
10942 tree type
= tsubst (TREE_TYPE (t
), args
, complain
, in_decl
);
10943 bool process_index_p
;
10945 bool need_copy_p
= false;
10947 if (type
== error_mark_node
)
10948 return error_mark_node
;
10950 /* digest_init will do the wrong thing if we let it. */
10951 if (type
&& TYPE_PTRMEMFUNC_P (type
))
10954 /* We do not want to process the index of aggregate
10955 initializers as they are identifier nodes which will be
10956 looked up by digest_init. */
10957 process_index_p
= !(type
&& IS_AGGR_TYPE (type
));
10959 n
= VEC_copy (constructor_elt
, gc
, CONSTRUCTOR_ELTS (t
));
10960 newlen
= VEC_length (constructor_elt
, n
);
10961 for (idx
= 0; VEC_iterate (constructor_elt
, n
, idx
, ce
); idx
++)
10963 if (ce
->index
&& process_index_p
)
10964 ce
->index
= RECUR (ce
->index
);
10966 if (PACK_EXPANSION_P (ce
->value
))
10968 /* Substitute into the pack expansion. */
10969 ce
->value
= tsubst_pack_expansion (ce
->value
, args
, complain
,
10972 if (ce
->value
== error_mark_node
)
10974 else if (TREE_VEC_LENGTH (ce
->value
) == 1)
10975 /* Just move the argument into place. */
10976 ce
->value
= TREE_VEC_ELT (ce
->value
, 0);
10979 /* Update the length of the final CONSTRUCTOR
10980 arguments vector, and note that we will need to
10982 newlen
= newlen
+ TREE_VEC_LENGTH (ce
->value
) - 1;
10983 need_copy_p
= true;
10987 ce
->value
= RECUR (ce
->value
);
10992 VEC(constructor_elt
,gc
) *old_n
= n
;
10994 n
= VEC_alloc (constructor_elt
, gc
, newlen
);
10995 for (idx
= 0; VEC_iterate (constructor_elt
, old_n
, idx
, ce
);
10998 if (TREE_CODE (ce
->value
) == TREE_VEC
)
11000 int i
, len
= TREE_VEC_LENGTH (ce
->value
);
11001 for (i
= 0; i
< len
; ++i
)
11002 CONSTRUCTOR_APPEND_ELT (n
, 0,
11003 TREE_VEC_ELT (ce
->value
, i
));
11006 CONSTRUCTOR_APPEND_ELT (n
, 0, ce
->value
);
11010 if (TREE_HAS_CONSTRUCTOR (t
))
11011 return finish_compound_literal (type
, n
);
11013 return build_constructor (NULL_TREE
, n
);
11018 tree operand_0
= RECUR (TREE_OPERAND (t
, 0));
11019 if (TYPE_P (operand_0
))
11020 return get_typeid (operand_0
);
11021 return build_typeid (operand_0
);
11031 tree r
= tsubst_copy (t
, args
, complain
, in_decl
);
11033 if (TREE_CODE (TREE_TYPE (t
)) != REFERENCE_TYPE
)
11034 /* If the original type was a reference, we'll be wrapped in
11035 the appropriate INDIRECT_REF. */
11036 r
= convert_from_reference (r
);
11041 return build_x_va_arg (RECUR (TREE_OPERAND (t
, 0)),
11042 tsubst_copy (TREE_TYPE (t
), args
, complain
,
11045 case OFFSETOF_EXPR
:
11046 return finish_offsetof (RECUR (TREE_OPERAND (t
, 0)));
11050 tree type1
= tsubst_copy (TRAIT_EXPR_TYPE1 (t
), args
,
11051 complain
, in_decl
);
11053 tree type2
= TRAIT_EXPR_TYPE2 (t
);
11055 type2
= tsubst_copy (type2
, args
, complain
, in_decl
);
11057 return finish_trait_expr (TRAIT_EXPR_KIND (t
), type1
, type2
);
11062 tree old_stmt_expr
= cur_stmt_expr
;
11063 tree stmt_expr
= begin_stmt_expr ();
11065 cur_stmt_expr
= stmt_expr
;
11066 tsubst_expr (STMT_EXPR_STMT (t
), args
, complain
, in_decl
,
11067 integral_constant_expression_p
);
11068 stmt_expr
= finish_stmt_expr (stmt_expr
, false);
11069 cur_stmt_expr
= old_stmt_expr
;
11075 t
= tsubst_copy (t
, args
, complain
, in_decl
);
11076 /* As in finish_id_expression, we resolve enumeration constants
11077 to their underlying values. */
11078 if (TREE_CODE (t
) == CONST_DECL
)
11080 used_types_insert (TREE_TYPE (t
));
11081 return DECL_INITIAL (t
);
11086 /* Handle Objective-C++ constructs, if appropriate. */
11089 = objcp_tsubst_copy_and_build (t
, args
, complain
,
11090 in_decl
, /*function_p=*/false);
11094 return tsubst_copy (t
, args
, complain
, in_decl
);
11100 /* Verify that the instantiated ARGS are valid. For type arguments,
11101 make sure that the type's linkage is ok. For non-type arguments,
11102 make sure they are constants if they are integral or enumerations.
11103 Emit an error under control of COMPLAIN, and return TRUE on error. */
11106 check_instantiated_args (tree tmpl
, tree args
, tsubst_flags_t complain
)
11108 int ix
, len
= DECL_NTPARMS (tmpl
);
11109 bool result
= false;
11111 for (ix
= 0; ix
!= len
; ix
++)
11113 tree t
= TREE_VEC_ELT (args
, ix
);
11117 /* [basic.link]: A name with no linkage (notably, the name
11118 of a class or enumeration declared in a local scope)
11119 shall not be used to declare an entity with linkage.
11120 This implies that names with no linkage cannot be used as
11121 template arguments. */
11122 tree nt
= no_linkage_check (t
, /*relaxed_p=*/false);
11126 /* DR 488 makes use of a type with no linkage cause
11127 type deduction to fail. */
11128 if (complain
& tf_error
)
11130 if (TYPE_ANONYMOUS_P (nt
))
11131 error ("%qT is/uses anonymous type", t
);
11133 error ("template argument for %qD uses local type %qT",
11138 /* In order to avoid all sorts of complications, we do not
11139 allow variably-modified types as template arguments. */
11140 else if (variably_modified_type_p (t
, NULL_TREE
))
11142 if (complain
& tf_error
)
11143 error ("%qT is a variably modified type", t
);
11147 /* A non-type argument of integral or enumerated type must be a
11149 else if (TREE_TYPE (t
)
11150 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t
))
11151 && !TREE_CONSTANT (t
))
11153 if (complain
& tf_error
)
11154 error ("integral expression %qE is not constant", t
);
11158 if (result
&& (complain
& tf_error
))
11159 error (" trying to instantiate %qD", tmpl
);
11163 /* Instantiate the indicated variable or function template TMPL with
11164 the template arguments in TARG_PTR. */
11167 instantiate_template (tree tmpl
, tree targ_ptr
, tsubst_flags_t complain
)
11172 HOST_WIDE_INT saved_processing_template_decl
;
11174 if (tmpl
== error_mark_node
)
11175 return error_mark_node
;
11177 gcc_assert (TREE_CODE (tmpl
) == TEMPLATE_DECL
);
11179 /* If this function is a clone, handle it specially. */
11180 if (DECL_CLONED_FUNCTION_P (tmpl
))
11185 spec
= instantiate_template (DECL_CLONED_FUNCTION (tmpl
), targ_ptr
,
11187 if (spec
== error_mark_node
)
11188 return error_mark_node
;
11190 /* Look for the clone. */
11191 FOR_EACH_CLONE (clone
, spec
)
11192 if (DECL_NAME (clone
) == DECL_NAME (tmpl
))
11194 /* We should always have found the clone by now. */
11195 gcc_unreachable ();
11199 /* Check to see if we already have this specialization. */
11200 spec
= retrieve_specialization (tmpl
, targ_ptr
,
11201 /*class_specializations_p=*/false);
11202 if (spec
!= NULL_TREE
)
11205 gen_tmpl
= most_general_template (tmpl
);
11206 if (tmpl
!= gen_tmpl
)
11208 /* The TMPL is a partial instantiation. To get a full set of
11209 arguments we must add the arguments used to perform the
11210 partial instantiation. */
11211 targ_ptr
= add_outermost_template_args (DECL_TI_ARGS (tmpl
),
11214 /* Check to see if we already have this specialization. */
11215 spec
= retrieve_specialization (gen_tmpl
, targ_ptr
,
11216 /*class_specializations_p=*/false);
11217 if (spec
!= NULL_TREE
)
11221 if (check_instantiated_args (gen_tmpl
, INNERMOST_TEMPLATE_ARGS (targ_ptr
),
11223 return error_mark_node
;
11225 /* We are building a FUNCTION_DECL, during which the access of its
11226 parameters and return types have to be checked. However this
11227 FUNCTION_DECL which is the desired context for access checking
11228 is not built yet. We solve this chicken-and-egg problem by
11229 deferring all checks until we have the FUNCTION_DECL. */
11230 push_deferring_access_checks (dk_deferred
);
11232 /* Although PROCESSING_TEMPLATE_DECL may be true at this point
11233 (because, for example, we have encountered a non-dependent
11234 function call in the body of a template function and must now
11235 determine which of several overloaded functions will be called),
11236 within the instantiation itself we are not processing a
11238 saved_processing_template_decl
= processing_template_decl
;
11239 processing_template_decl
= 0;
11240 /* Substitute template parameters to obtain the specialization. */
11241 fndecl
= tsubst (DECL_TEMPLATE_RESULT (gen_tmpl
),
11242 targ_ptr
, complain
, gen_tmpl
);
11243 processing_template_decl
= saved_processing_template_decl
;
11244 if (fndecl
== error_mark_node
)
11245 return error_mark_node
;
11247 /* Now we know the specialization, compute access previously
11249 push_access_scope (fndecl
);
11250 perform_deferred_access_checks ();
11251 pop_access_scope (fndecl
);
11252 pop_deferring_access_checks ();
11254 /* The DECL_TI_TEMPLATE should always be the immediate parent
11255 template, not the most general template. */
11256 DECL_TI_TEMPLATE (fndecl
) = tmpl
;
11258 /* If we've just instantiated the main entry point for a function,
11259 instantiate all the alternate entry points as well. We do this
11260 by cloning the instantiation of the main entry point, not by
11261 instantiating the template clones. */
11262 if (TREE_CHAIN (gen_tmpl
) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl
)))
11263 clone_function_decl (fndecl
, /*update_method_vec_p=*/0);
11268 /* The FN is a TEMPLATE_DECL for a function. The ARGS are the
11269 arguments that are being used when calling it. TARGS is a vector
11270 into which the deduced template arguments are placed.
11272 Return zero for success, 2 for an incomplete match that doesn't resolve
11273 all the types, and 1 for complete failure. An error message will be
11274 printed only for an incomplete match.
11276 If FN is a conversion operator, or we are trying to produce a specific
11277 specialization, RETURN_TYPE is the return type desired.
11279 The EXPLICIT_TARGS are explicit template arguments provided via a
11282 The parameter STRICT is one of:
11285 We are deducing arguments for a function call, as in
11286 [temp.deduct.call].
11289 We are deducing arguments for a conversion function, as in
11290 [temp.deduct.conv].
11293 We are deducing arguments when doing an explicit instantiation
11294 as in [temp.explicit], when determining an explicit specialization
11295 as in [temp.expl.spec], or when taking the address of a function
11296 template, as in [temp.deduct.funcaddr]. */
11299 fn_type_unification (tree fn
,
11300 tree explicit_targs
,
11304 unification_kind_t strict
,
11310 bool incomplete_argument_packs_p
= false;
11312 gcc_assert (TREE_CODE (fn
) == TEMPLATE_DECL
);
11314 fntype
= TREE_TYPE (fn
);
11315 if (explicit_targs
)
11319 The specified template arguments must match the template
11320 parameters in kind (i.e., type, nontype, template), and there
11321 must not be more arguments than there are parameters;
11322 otherwise type deduction fails.
11324 Nontype arguments must match the types of the corresponding
11325 nontype template parameters, or must be convertible to the
11326 types of the corresponding nontype parameters as specified in
11327 _temp.arg.nontype_, otherwise type deduction fails.
11329 All references in the function type of the function template
11330 to the corresponding template parameters are replaced by the
11331 specified template argument values. If a substitution in a
11332 template parameter or in the function type of the function
11333 template results in an invalid type, type deduction fails. */
11334 tree tparms
= DECL_INNERMOST_TEMPLATE_PARMS (fn
);
11335 int i
, len
= TREE_VEC_LENGTH (tparms
);
11336 tree converted_args
;
11337 bool incomplete
= false;
11339 if (explicit_targs
== error_mark_node
)
11343 = (coerce_template_parms (tparms
, explicit_targs
, NULL_TREE
, tf_none
,
11344 /*require_all_args=*/false,
11345 /*use_default_args=*/false));
11346 if (converted_args
== error_mark_node
)
11349 /* Substitute the explicit args into the function type. This is
11350 necessary so that, for instance, explicitly declared function
11351 arguments can match null pointed constants. If we were given
11352 an incomplete set of explicit args, we must not do semantic
11353 processing during substitution as we could create partial
11355 for (i
= 0; i
< len
; i
++)
11357 tree parm
= TREE_VALUE (TREE_VEC_ELT (tparms
, i
));
11358 bool parameter_pack
= false;
11360 /* Dig out the actual parm. */
11361 if (TREE_CODE (parm
) == TYPE_DECL
11362 || TREE_CODE (parm
) == TEMPLATE_DECL
)
11364 parm
= TREE_TYPE (parm
);
11365 parameter_pack
= TEMPLATE_TYPE_PARAMETER_PACK (parm
);
11367 else if (TREE_CODE (parm
) == PARM_DECL
)
11369 parm
= DECL_INITIAL (parm
);
11370 parameter_pack
= TEMPLATE_PARM_PARAMETER_PACK (parm
);
11373 if (parameter_pack
)
11377 template_parm_level_and_index (parm
, &level
, &idx
);
11379 /* Mark the argument pack as "incomplete". We could
11380 still deduce more arguments during unification. */
11381 targ
= TMPL_ARG (converted_args
, level
, idx
);
11384 ARGUMENT_PACK_INCOMPLETE_P(targ
) = 1;
11385 ARGUMENT_PACK_EXPLICIT_ARGS (targ
)
11386 = ARGUMENT_PACK_ARGS (targ
);
11389 /* We have some incomplete argument packs. */
11390 incomplete_argument_packs_p
= true;
11394 if (incomplete_argument_packs_p
)
11395 /* Any substitution is guaranteed to be incomplete if there
11396 are incomplete argument packs, because we can still deduce
11400 incomplete
= NUM_TMPL_ARGS (explicit_targs
) != NUM_TMPL_ARGS (targs
);
11402 processing_template_decl
+= incomplete
;
11403 fntype
= tsubst (fntype
, converted_args
, tf_none
, NULL_TREE
);
11404 processing_template_decl
-= incomplete
;
11406 if (fntype
== error_mark_node
)
11409 /* Place the explicitly specified arguments in TARGS. */
11410 for (i
= NUM_TMPL_ARGS (converted_args
); i
--;)
11411 TREE_VEC_ELT (targs
, i
) = TREE_VEC_ELT (converted_args
, i
);
11414 /* Never do unification on the 'this' parameter. */
11415 parms
= skip_artificial_parms_for (fn
, TYPE_ARG_TYPES (fntype
));
11419 parms
= tree_cons (NULL_TREE
, TREE_TYPE (fntype
), parms
);
11420 args
= tree_cons (NULL_TREE
, return_type
, args
);
11423 /* We allow incomplete unification without an error message here
11424 because the standard doesn't seem to explicitly prohibit it. Our
11425 callers must be ready to deal with unification failures in any
11427 result
= type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn
),
11428 targs
, parms
, args
, /*subr=*/0,
11431 if (result
== 0 && incomplete_argument_packs_p
)
11433 int i
, len
= NUM_TMPL_ARGS (targs
);
11435 /* Clear the "incomplete" flags on all argument packs. */
11436 for (i
= 0; i
< len
; i
++)
11438 tree arg
= TREE_VEC_ELT (targs
, i
);
11439 if (ARGUMENT_PACK_P (arg
))
11441 ARGUMENT_PACK_INCOMPLETE_P (arg
) = 0;
11442 ARGUMENT_PACK_EXPLICIT_ARGS (arg
) = NULL_TREE
;
11448 /* All is well so far. Now, check:
11452 When all template arguments have been deduced, all uses of
11453 template parameters in nondeduced contexts are replaced with
11454 the corresponding deduced argument values. If the
11455 substitution results in an invalid type, as described above,
11456 type deduction fails. */
11457 if (tsubst (TREE_TYPE (fn
), targs
, tf_none
, NULL_TREE
)
11458 == error_mark_node
)
11464 /* Adjust types before performing type deduction, as described in
11465 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
11466 sections are symmetric. PARM is the type of a function parameter
11467 or the return type of the conversion function. ARG is the type of
11468 the argument passed to the call, or the type of the value
11469 initialized with the result of the conversion function.
11470 ARG_EXPR is the original argument expression, which may be null. */
11473 maybe_adjust_types_for_deduction (unification_kind_t strict
,
11487 /* Swap PARM and ARG throughout the remainder of this
11488 function; the handling is precisely symmetric since PARM
11489 will initialize ARG rather than vice versa. */
11497 /* There is nothing to do in this case. */
11501 gcc_unreachable ();
11504 if (TREE_CODE (*parm
) != REFERENCE_TYPE
)
11506 /* [temp.deduct.call]
11508 If P is not a reference type:
11510 --If A is an array type, the pointer type produced by the
11511 array-to-pointer standard conversion (_conv.array_) is
11512 used in place of A for type deduction; otherwise,
11514 --If A is a function type, the pointer type produced by
11515 the function-to-pointer standard conversion
11516 (_conv.func_) is used in place of A for type deduction;
11519 --If A is a cv-qualified type, the top level
11520 cv-qualifiers of A's type are ignored for type
11522 if (TREE_CODE (*arg
) == ARRAY_TYPE
)
11523 *arg
= build_pointer_type (TREE_TYPE (*arg
));
11524 else if (TREE_CODE (*arg
) == FUNCTION_TYPE
)
11525 *arg
= build_pointer_type (*arg
);
11527 *arg
= TYPE_MAIN_VARIANT (*arg
);
11530 /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
11531 of the form T&&, where T is a template parameter, and the argument
11532 is an lvalue, T is deduced as A& */
11533 if (TREE_CODE (*parm
) == REFERENCE_TYPE
11534 && TYPE_REF_IS_RVALUE (*parm
)
11535 && TREE_CODE (TREE_TYPE (*parm
)) == TEMPLATE_TYPE_PARM
11536 && cp_type_quals (TREE_TYPE (*parm
)) == TYPE_UNQUALIFIED
11537 && arg_expr
&& real_lvalue_p (arg_expr
))
11538 *arg
= build_reference_type (*arg
);
11540 /* [temp.deduct.call]
11542 If P is a cv-qualified type, the top level cv-qualifiers
11543 of P's type are ignored for type deduction. If P is a
11544 reference type, the type referred to by P is used for
11546 *parm
= TYPE_MAIN_VARIANT (*parm
);
11547 if (TREE_CODE (*parm
) == REFERENCE_TYPE
)
11549 *parm
= TREE_TYPE (*parm
);
11550 result
|= UNIFY_ALLOW_OUTER_MORE_CV_QUAL
;
11553 /* DR 322. For conversion deduction, remove a reference type on parm
11554 too (which has been swapped into ARG). */
11555 if (strict
== DEDUCE_CONV
&& TREE_CODE (*arg
) == REFERENCE_TYPE
)
11556 *arg
= TREE_TYPE (*arg
);
11561 /* Most parms like fn_type_unification.
11563 If SUBR is 1, we're being called recursively (to unify the
11564 arguments of a function or method parameter of a function
11568 type_unification_real (tree tparms
,
11573 unification_kind_t strict
,
11576 tree parm
, arg
, arg_expr
;
11578 int ntparms
= TREE_VEC_LENGTH (tparms
);
11580 int saw_undeduced
= 0;
11583 gcc_assert (TREE_CODE (tparms
) == TREE_VEC
);
11584 gcc_assert (xparms
== NULL_TREE
|| TREE_CODE (xparms
) == TREE_LIST
);
11585 gcc_assert (!xargs
|| TREE_CODE (xargs
) == TREE_LIST
);
11586 gcc_assert (ntparms
> 0);
11591 sub_strict
= (UNIFY_ALLOW_OUTER_LEVEL
| UNIFY_ALLOW_MORE_CV_QUAL
11592 | UNIFY_ALLOW_DERIVED
);
11596 sub_strict
= UNIFY_ALLOW_LESS_CV_QUAL
;
11600 sub_strict
= UNIFY_ALLOW_NONE
;
11604 gcc_unreachable ();
11611 while (parms
&& parms
!= void_list_node
11612 && args
&& args
!= void_list_node
)
11614 if (TREE_CODE (TREE_VALUE (parms
)) == TYPE_PACK_EXPANSION
)
11617 parm
= TREE_VALUE (parms
);
11618 parms
= TREE_CHAIN (parms
);
11619 arg
= TREE_VALUE (args
);
11620 args
= TREE_CHAIN (args
);
11623 if (arg
== error_mark_node
)
11625 if (arg
== unknown_type_node
)
11626 /* We can't deduce anything from this, but we might get all the
11627 template args from other function args. */
11630 /* Conversions will be performed on a function argument that
11631 corresponds with a function parameter that contains only
11632 non-deducible template parameters and explicitly specified
11633 template parameters. */
11634 if (!uses_template_parms (parm
))
11639 type
= TREE_TYPE (arg
);
11643 if (same_type_p (parm
, type
))
11645 if (strict
!= DEDUCE_EXACT
11646 && can_convert_arg (parm
, type
, TYPE_P (arg
) ? NULL_TREE
: arg
,
11655 gcc_assert (TREE_TYPE (arg
) != NULL_TREE
);
11656 if (type_unknown_p (arg
))
11658 /* [temp.deduct.type]
11660 A template-argument can be deduced from a pointer to
11661 function or pointer to member function argument if
11662 the set of overloaded functions does not contain
11663 function templates and at most one of a set of
11664 overloaded functions provides a unique match. */
11665 if (resolve_overloaded_unification
11666 (tparms
, targs
, parm
, arg
, strict
, sub_strict
))
11672 arg
= unlowered_expr_type (arg
);
11673 if (arg
== error_mark_node
)
11678 int arg_strict
= sub_strict
;
11681 arg_strict
|= maybe_adjust_types_for_deduction (strict
, &parm
, &arg
,
11684 if (unify (tparms
, targs
, parm
, arg
, arg_strict
))
11691 && parms
!= void_list_node
11692 && TREE_CODE (TREE_VALUE (parms
)) == TYPE_PACK_EXPANSION
)
11694 /* Unify the remaining arguments with the pack expansion type. */
11696 tree parmvec
= make_tree_vec (1);
11700 /* Count the number of arguments that remain. */
11701 for (t
= args
; t
&& t
!= void_list_node
; t
= TREE_CHAIN (t
))
11704 /* Allocate a TREE_VEC and copy in all of the arguments */
11705 argvec
= make_tree_vec (len
);
11706 for (i
= 0; args
&& args
!= void_list_node
; args
= TREE_CHAIN (args
))
11708 TREE_VEC_ELT (argvec
, i
) = TREE_VALUE (args
);
11712 /* Copy the parameter into parmvec. */
11713 TREE_VEC_ELT (parmvec
, 0) = TREE_VALUE (parms
);
11714 if (unify_pack_expansion (tparms
, targs
, parmvec
, argvec
, strict
,
11715 /*call_args_p=*/true, /*subr=*/subr
))
11718 /* Advance to the end of the list of parameters. */
11719 parms
= TREE_CHAIN (parms
);
11722 /* Fail if we've reached the end of the parm list, and more args
11723 are present, and the parm list isn't variadic. */
11724 if (args
&& args
!= void_list_node
&& parms
== void_list_node
)
11726 /* Fail if parms are left and they don't have default values. */
11727 if (parms
&& parms
!= void_list_node
11728 && TREE_PURPOSE (parms
) == NULL_TREE
)
11732 for (i
= 0; i
< ntparms
; i
++)
11733 if (!TREE_VEC_ELT (targs
, i
))
11737 if (TREE_VEC_ELT (tparms
, i
) == error_mark_node
)
11740 tparm
= TREE_VALUE (TREE_VEC_ELT (tparms
, i
));
11742 /* If this is an undeduced nontype parameter that depends on
11743 a type parameter, try another pass; its type may have been
11744 deduced from a later argument than the one from which
11745 this parameter can be deduced. */
11746 if (TREE_CODE (tparm
) == PARM_DECL
11747 && uses_template_parms (TREE_TYPE (tparm
))
11748 && !saw_undeduced
++)
11751 /* Core issue #226 (C++0x) [temp.deduct]:
11753 If a template argument has not been deduced, its
11754 default template argument, if any, is used.
11756 When we are in C++98 mode, TREE_PURPOSE will either
11757 be NULL_TREE or ERROR_MARK_NODE, so we do not need
11758 to explicitly check cxx_dialect here. */
11759 if (TREE_PURPOSE (TREE_VEC_ELT (tparms
, i
)))
11761 tree arg
= tsubst (TREE_PURPOSE (TREE_VEC_ELT (tparms
, i
)),
11762 targs
, tf_none
, NULL_TREE
);
11763 if (arg
== error_mark_node
)
11767 TREE_VEC_ELT (targs
, i
) = arg
;
11772 /* If the type parameter is a parameter pack, then it will
11773 be deduced to an empty parameter pack. */
11774 if (template_parameter_pack_p (tparm
))
11778 if (TREE_CODE (tparm
) == TEMPLATE_PARM_INDEX
)
11780 arg
= make_node (NONTYPE_ARGUMENT_PACK
);
11781 TREE_TYPE (arg
) = TREE_TYPE (TEMPLATE_PARM_DECL (tparm
));
11782 TREE_CONSTANT (arg
) = 1;
11785 arg
= make_node (TYPE_ARGUMENT_PACK
);
11787 SET_ARGUMENT_PACK_ARGS (arg
, make_tree_vec (0));
11789 TREE_VEC_ELT (targs
, i
) = arg
;
11799 /* Subroutine of type_unification_real. Args are like the variables
11800 at the call site. ARG is an overloaded function (or template-id);
11801 we try deducing template args from each of the overloads, and if
11802 only one succeeds, we go with that. Modifies TARGS and returns
11803 true on success. */
11806 resolve_overloaded_unification (tree tparms
,
11810 unification_kind_t strict
,
11813 tree tempargs
= copy_node (targs
);
11817 if (TREE_CODE (arg
) == ADDR_EXPR
)
11819 arg
= TREE_OPERAND (arg
, 0);
11825 if (TREE_CODE (arg
) == COMPONENT_REF
)
11826 /* Handle `&x' where `x' is some static or non-static member
11828 arg
= TREE_OPERAND (arg
, 1);
11830 if (TREE_CODE (arg
) == OFFSET_REF
)
11831 arg
= TREE_OPERAND (arg
, 1);
11833 /* Strip baselink information. */
11834 if (BASELINK_P (arg
))
11835 arg
= BASELINK_FUNCTIONS (arg
);
11837 if (TREE_CODE (arg
) == TEMPLATE_ID_EXPR
)
11839 /* If we got some explicit template args, we need to plug them into
11840 the affected templates before we try to unify, in case the
11841 explicit args will completely resolve the templates in question. */
11843 tree expl_subargs
= TREE_OPERAND (arg
, 1);
11844 arg
= TREE_OPERAND (arg
, 0);
11846 for (; arg
; arg
= OVL_NEXT (arg
))
11848 tree fn
= OVL_CURRENT (arg
);
11849 tree subargs
, elem
;
11851 if (TREE_CODE (fn
) != TEMPLATE_DECL
)
11854 subargs
= get_bindings (fn
, DECL_TEMPLATE_RESULT (fn
),
11855 expl_subargs
, /*check_ret=*/false);
11858 elem
= tsubst (TREE_TYPE (fn
), subargs
, tf_none
, NULL_TREE
);
11859 good
+= try_one_overload (tparms
, targs
, tempargs
, parm
,
11860 elem
, strict
, sub_strict
, addr_p
);
11864 else if (TREE_CODE (arg
) != OVERLOAD
11865 && TREE_CODE (arg
) != FUNCTION_DECL
)
11866 /* If ARG is, for example, "(0, &f)" then its type will be unknown
11867 -- but the deduction does not succeed because the expression is
11868 not just the function on its own. */
11871 for (; arg
; arg
= OVL_NEXT (arg
))
11872 good
+= try_one_overload (tparms
, targs
, tempargs
, parm
,
11873 TREE_TYPE (OVL_CURRENT (arg
)),
11874 strict
, sub_strict
, addr_p
);
11876 /* [temp.deduct.type] A template-argument can be deduced from a pointer
11877 to function or pointer to member function argument if the set of
11878 overloaded functions does not contain function templates and at most
11879 one of a set of overloaded functions provides a unique match.
11881 So if we found multiple possibilities, we return success but don't
11882 deduce anything. */
11886 int i
= TREE_VEC_LENGTH (targs
);
11888 if (TREE_VEC_ELT (tempargs
, i
))
11889 TREE_VEC_ELT (targs
, i
) = TREE_VEC_ELT (tempargs
, i
);
11897 /* Subroutine of resolve_overloaded_unification; does deduction for a single
11898 overload. Fills TARGS with any deduced arguments, or error_mark_node if
11899 different overloads deduce different arguments for a given parm.
11900 ADDR_P is true if the expression for which deduction is being
11901 performed was of the form "& fn" rather than simply "fn".
11903 Returns 1 on success. */
11906 try_one_overload (tree tparms
,
11911 unification_kind_t strict
,
11919 /* [temp.deduct.type] A template-argument can be deduced from a pointer
11920 to function or pointer to member function argument if the set of
11921 overloaded functions does not contain function templates and at most
11922 one of a set of overloaded functions provides a unique match.
11924 So if this is a template, just return success. */
11926 if (uses_template_parms (arg
))
11929 if (TREE_CODE (arg
) == METHOD_TYPE
)
11930 arg
= build_ptrmemfunc_type (build_pointer_type (arg
));
11932 arg
= build_pointer_type (arg
);
11934 sub_strict
|= maybe_adjust_types_for_deduction (strict
, &parm
, &arg
, NULL
);
11936 /* We don't copy orig_targs for this because if we have already deduced
11937 some template args from previous args, unify would complain when we
11938 try to deduce a template parameter for the same argument, even though
11939 there isn't really a conflict. */
11940 nargs
= TREE_VEC_LENGTH (targs
);
11941 tempargs
= make_tree_vec (nargs
);
11943 if (unify (tparms
, tempargs
, parm
, arg
, sub_strict
) != 0)
11946 /* First make sure we didn't deduce anything that conflicts with
11947 explicitly specified args. */
11948 for (i
= nargs
; i
--; )
11950 tree elt
= TREE_VEC_ELT (tempargs
, i
);
11951 tree oldelt
= TREE_VEC_ELT (orig_targs
, i
);
11955 else if (uses_template_parms (elt
))
11956 /* Since we're unifying against ourselves, we will fill in
11957 template args used in the function parm list with our own
11958 template parms. Discard them. */
11959 TREE_VEC_ELT (tempargs
, i
) = NULL_TREE
;
11960 else if (oldelt
&& !template_args_equal (oldelt
, elt
))
11964 for (i
= nargs
; i
--; )
11966 tree elt
= TREE_VEC_ELT (tempargs
, i
);
11969 TREE_VEC_ELT (targs
, i
) = elt
;
11975 /* PARM is a template class (perhaps with unbound template
11976 parameters). ARG is a fully instantiated type. If ARG can be
11977 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
11978 TARGS are as for unify. */
11981 try_class_unification (tree tparms
, tree targs
, tree parm
, tree arg
)
11983 tree copy_of_targs
;
11985 if (!CLASSTYPE_TEMPLATE_INFO (arg
)
11986 || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg
))
11987 != most_general_template (CLASSTYPE_TI_TEMPLATE (parm
))))
11990 /* We need to make a new template argument vector for the call to
11991 unify. If we used TARGS, we'd clutter it up with the result of
11992 the attempted unification, even if this class didn't work out.
11993 We also don't want to commit ourselves to all the unifications
11994 we've already done, since unification is supposed to be done on
11995 an argument-by-argument basis. In other words, consider the
11996 following pathological case:
11998 template <int I, int J, int K>
12001 template <int I, int J>
12002 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
12004 template <int I, int J, int K>
12005 void f(S<I, J, K>, S<I, I, I>);
12014 Now, by the time we consider the unification involving `s2', we
12015 already know that we must have `f<0, 0, 0>'. But, even though
12016 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
12017 because there are two ways to unify base classes of S<0, 1, 2>
12018 with S<I, I, I>. If we kept the already deduced knowledge, we
12019 would reject the possibility I=1. */
12020 copy_of_targs
= make_tree_vec (TREE_VEC_LENGTH (targs
));
12022 /* If unification failed, we're done. */
12023 if (unify (tparms
, copy_of_targs
, CLASSTYPE_TI_ARGS (parm
),
12024 CLASSTYPE_TI_ARGS (arg
), UNIFY_ALLOW_NONE
))
12030 /* Given a template type PARM and a class type ARG, find the unique
12031 base type in ARG that is an instance of PARM. We do not examine
12032 ARG itself; only its base-classes. If there is not exactly one
12033 appropriate base class, return NULL_TREE. PARM may be the type of
12034 a partial specialization, as well as a plain template type. Used
12038 get_template_base (tree tparms
, tree targs
, tree parm
, tree arg
)
12040 tree rval
= NULL_TREE
;
12043 gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg
)));
12045 binfo
= TYPE_BINFO (complete_type (arg
));
12047 /* The type could not be completed. */
12050 /* Walk in inheritance graph order. The search order is not
12051 important, and this avoids multiple walks of virtual bases. */
12052 for (binfo
= TREE_CHAIN (binfo
); binfo
; binfo
= TREE_CHAIN (binfo
))
12054 tree r
= try_class_unification (tparms
, targs
, parm
, BINFO_TYPE (binfo
));
12058 /* If there is more than one satisfactory baseclass, then:
12062 If they yield more than one possible deduced A, the type
12066 if (rval
&& !same_type_p (r
, rval
))
12076 /* Returns the level of DECL, which declares a template parameter. */
12079 template_decl_level (tree decl
)
12081 switch (TREE_CODE (decl
))
12084 case TEMPLATE_DECL
:
12085 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl
));
12088 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl
));
12091 gcc_unreachable ();
12096 /* Decide whether ARG can be unified with PARM, considering only the
12097 cv-qualifiers of each type, given STRICT as documented for unify.
12098 Returns nonzero iff the unification is OK on that basis. */
12101 check_cv_quals_for_unify (int strict
, tree arg
, tree parm
)
12103 int arg_quals
= cp_type_quals (arg
);
12104 int parm_quals
= cp_type_quals (parm
);
12106 if (TREE_CODE (parm
) == TEMPLATE_TYPE_PARM
12107 && !(strict
& UNIFY_ALLOW_OUTER_MORE_CV_QUAL
))
12109 /* Although a CVR qualifier is ignored when being applied to a
12110 substituted template parameter ([8.3.2]/1 for example), that
12111 does not apply during deduction [14.8.2.4]/1, (even though
12112 that is not explicitly mentioned, [14.8.2.4]/9 indicates
12113 this). Except when we're allowing additional CV qualifiers
12114 at the outer level [14.8.2.1]/3,1st bullet. */
12115 if ((TREE_CODE (arg
) == REFERENCE_TYPE
12116 || TREE_CODE (arg
) == FUNCTION_TYPE
12117 || TREE_CODE (arg
) == METHOD_TYPE
)
12118 && (parm_quals
& (TYPE_QUAL_CONST
| TYPE_QUAL_VOLATILE
)))
12121 if ((!POINTER_TYPE_P (arg
) && TREE_CODE (arg
) != TEMPLATE_TYPE_PARM
)
12122 && (parm_quals
& TYPE_QUAL_RESTRICT
))
12126 if (!(strict
& (UNIFY_ALLOW_MORE_CV_QUAL
| UNIFY_ALLOW_OUTER_MORE_CV_QUAL
))
12127 && (arg_quals
& parm_quals
) != parm_quals
)
12130 if (!(strict
& (UNIFY_ALLOW_LESS_CV_QUAL
| UNIFY_ALLOW_OUTER_LESS_CV_QUAL
))
12131 && (parm_quals
& arg_quals
) != arg_quals
)
12137 /* Determines the LEVEL and INDEX for the template parameter PARM. */
12139 template_parm_level_and_index (tree parm
, int* level
, int* index
)
12141 if (TREE_CODE (parm
) == TEMPLATE_TYPE_PARM
12142 || TREE_CODE (parm
) == TEMPLATE_TEMPLATE_PARM
12143 || TREE_CODE (parm
) == BOUND_TEMPLATE_TEMPLATE_PARM
)
12145 *index
= TEMPLATE_TYPE_IDX (parm
);
12146 *level
= TEMPLATE_TYPE_LEVEL (parm
);
12150 *index
= TEMPLATE_PARM_IDX (parm
);
12151 *level
= TEMPLATE_PARM_LEVEL (parm
);
12155 /* Unifies the remaining arguments in PACKED_ARGS with the pack
12156 expansion at the end of PACKED_PARMS. Returns 0 if the type
12157 deduction succeeds, 1 otherwise. STRICT is the same as in
12158 unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
12159 call argument list. We'll need to adjust the arguments to make them
12160 types. SUBR tells us if this is from a recursive call to
12161 type_unification_real. */
12163 unify_pack_expansion (tree tparms
, tree targs
, tree packed_parms
,
12164 tree packed_args
, int strict
, bool call_args_p
,
12168 = TREE_VEC_ELT (packed_parms
, TREE_VEC_LENGTH (packed_parms
) - 1);
12169 tree pattern
= PACK_EXPANSION_PATTERN (parm
);
12170 tree pack
, packs
= NULL_TREE
;
12171 int i
, start
= TREE_VEC_LENGTH (packed_parms
) - 1;
12172 int len
= TREE_VEC_LENGTH (packed_args
);
12174 /* Determine the parameter packs we will be deducing from the
12175 pattern, and record their current deductions. */
12176 for (pack
= PACK_EXPANSION_PARAMETER_PACKS (parm
);
12177 pack
; pack
= TREE_CHAIN (pack
))
12179 tree parm_pack
= TREE_VALUE (pack
);
12182 /* Determine the index and level of this parameter pack. */
12183 template_parm_level_and_index (parm_pack
, &level
, &idx
);
12185 /* Keep track of the parameter packs and their corresponding
12187 packs
= tree_cons (parm_pack
, TMPL_ARG (targs
, level
, idx
), packs
);
12188 TREE_TYPE (packs
) = make_tree_vec (len
- start
);
12191 /* Loop through all of the arguments that have not yet been
12192 unified and unify each with the pattern. */
12193 for (i
= start
; i
< len
; i
++)
12195 tree parm
= pattern
;
12197 /* For each parameter pack, clear out the deduced value so that
12198 we can deduce it again. */
12199 for (pack
= packs
; pack
; pack
= TREE_CHAIN (pack
))
12202 template_parm_level_and_index (TREE_PURPOSE (pack
), &level
, &idx
);
12204 TMPL_ARG (targs
, level
, idx
) = NULL_TREE
;
12207 /* Unify the pattern with the current argument. */
12209 tree arg
= TREE_VEC_ELT (packed_args
, i
);
12210 int arg_strict
= strict
;
12211 bool skip_arg_p
= false;
12217 /* This mirrors what we do in type_unification_real. */
12221 sub_strict
= (UNIFY_ALLOW_OUTER_LEVEL
12222 | UNIFY_ALLOW_MORE_CV_QUAL
12223 | UNIFY_ALLOW_DERIVED
);
12227 sub_strict
= UNIFY_ALLOW_LESS_CV_QUAL
;
12231 sub_strict
= UNIFY_ALLOW_NONE
;
12235 gcc_unreachable ();
12240 gcc_assert (TREE_TYPE (arg
) != NULL_TREE
);
12241 if (type_unknown_p (arg
))
12243 /* [temp.deduct.type] A template-argument can be
12244 deduced from a pointer to function or pointer
12245 to member function argument if the set of
12246 overloaded functions does not contain function
12247 templates and at most one of a set of
12248 overloaded functions provides a unique
12251 if (resolve_overloaded_unification
12252 (tparms
, targs
, parm
, arg
, strict
, sub_strict
)
12260 arg
= TREE_TYPE (arg
);
12261 if (arg
== error_mark_node
)
12266 arg_strict
= sub_strict
;
12270 maybe_adjust_types_for_deduction (strict
, &parm
, &arg
, NULL
);
12275 if (unify (tparms
, targs
, parm
, arg
, arg_strict
))
12280 /* For each parameter pack, collect the deduced value. */
12281 for (pack
= packs
; pack
; pack
= TREE_CHAIN (pack
))
12284 template_parm_level_and_index (TREE_PURPOSE (pack
), &level
, &idx
);
12286 TREE_VEC_ELT (TREE_TYPE (pack
), i
- start
) =
12287 TMPL_ARG (targs
, level
, idx
);
12291 /* Verify that the results of unification with the parameter packs
12292 produce results consistent with what we've seen before, and make
12293 the deduced argument packs available. */
12294 for (pack
= packs
; pack
; pack
= TREE_CHAIN (pack
))
12296 tree old_pack
= TREE_VALUE (pack
);
12297 tree new_args
= TREE_TYPE (pack
);
12299 if (old_pack
&& ARGUMENT_PACK_INCOMPLETE_P (old_pack
))
12301 /* Prepend the explicit arguments onto NEW_ARGS. */
12302 tree explicit_args
= ARGUMENT_PACK_EXPLICIT_ARGS (old_pack
);
12303 tree old_args
= new_args
;
12304 int i
, explicit_len
= TREE_VEC_LENGTH (explicit_args
);
12305 int len
= explicit_len
+ TREE_VEC_LENGTH (old_args
);
12307 /* Copy the explicit arguments. */
12308 new_args
= make_tree_vec (len
);
12309 for (i
= 0; i
< explicit_len
; i
++)
12310 TREE_VEC_ELT (new_args
, i
) = TREE_VEC_ELT (explicit_args
, i
);
12312 /* Copy the deduced arguments. */
12313 for (; i
< len
; i
++)
12314 TREE_VEC_ELT (new_args
, i
) =
12315 TREE_VEC_ELT (old_args
, i
- explicit_len
);
12323 template_parm_level_and_index (TREE_PURPOSE (pack
), &level
, &idx
);
12325 /* Build the deduced *_ARGUMENT_PACK. */
12326 if (TREE_CODE (TREE_PURPOSE (pack
)) == TEMPLATE_PARM_INDEX
)
12328 result
= make_node (NONTYPE_ARGUMENT_PACK
);
12329 TREE_TYPE (result
) =
12330 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack
)));
12331 TREE_CONSTANT (result
) = 1;
12334 result
= make_node (TYPE_ARGUMENT_PACK
);
12336 SET_ARGUMENT_PACK_ARGS (result
, new_args
);
12338 /* Note the deduced argument packs for this parameter
12340 TMPL_ARG (targs
, level
, idx
) = result
;
12342 else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack
)
12343 && (ARGUMENT_PACK_ARGS (old_pack
)
12344 == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack
)))
12346 /* We only had the explicitly-provided arguments before, but
12347 now we have a complete set of arguments. */
12349 tree explicit_args
= ARGUMENT_PACK_EXPLICIT_ARGS (old_pack
);
12350 template_parm_level_and_index (TREE_PURPOSE (pack
), &level
, &idx
);
12352 /* Keep the original deduced argument pack. */
12353 TMPL_ARG (targs
, level
, idx
) = old_pack
;
12355 SET_ARGUMENT_PACK_ARGS (old_pack
, new_args
);
12356 ARGUMENT_PACK_INCOMPLETE_P (old_pack
) = 1;
12357 ARGUMENT_PACK_EXPLICIT_ARGS (old_pack
) = explicit_args
;
12359 else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack
),
12361 /* Inconsistent unification of this parameter pack. */
12367 template_parm_level_and_index (TREE_PURPOSE (pack
), &level
, &idx
);
12369 /* Keep the original deduced argument pack. */
12370 TMPL_ARG (targs
, level
, idx
) = old_pack
;
12377 /* Deduce the value of template parameters. TPARMS is the (innermost)
12378 set of template parameters to a template. TARGS is the bindings
12379 for those template parameters, as determined thus far; TARGS may
12380 include template arguments for outer levels of template parameters
12381 as well. PARM is a parameter to a template function, or a
12382 subcomponent of that parameter; ARG is the corresponding argument.
12383 This function attempts to match PARM with ARG in a manner
12384 consistent with the existing assignments in TARGS. If more values
12385 are deduced, then TARGS is updated.
12387 Returns 0 if the type deduction succeeds, 1 otherwise. The
12388 parameter STRICT is a bitwise or of the following flags:
12391 Require an exact match between PARM and ARG.
12392 UNIFY_ALLOW_MORE_CV_QUAL:
12393 Allow the deduced ARG to be more cv-qualified (by qualification
12394 conversion) than ARG.
12395 UNIFY_ALLOW_LESS_CV_QUAL:
12396 Allow the deduced ARG to be less cv-qualified than ARG.
12397 UNIFY_ALLOW_DERIVED:
12398 Allow the deduced ARG to be a template base class of ARG,
12399 or a pointer to a template base class of the type pointed to by
12401 UNIFY_ALLOW_INTEGER:
12402 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
12403 case for more information.
12404 UNIFY_ALLOW_OUTER_LEVEL:
12405 This is the outermost level of a deduction. Used to determine validity
12406 of qualification conversions. A valid qualification conversion must
12407 have const qualified pointers leading up to the inner type which
12408 requires additional CV quals, except at the outer level, where const
12409 is not required [conv.qual]. It would be normal to set this flag in
12410 addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
12411 UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
12412 This is the outermost level of a deduction, and PARM can be more CV
12413 qualified at this point.
12414 UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
12415 This is the outermost level of a deduction, and PARM can be less CV
12416 qualified at this point. */
12419 unify (tree tparms
, tree targs
, tree parm
, tree arg
, int strict
)
12424 int strict_in
= strict
;
12426 /* I don't think this will do the right thing with respect to types.
12427 But the only case I've seen it in so far has been array bounds, where
12428 signedness is the only information lost, and I think that will be
12430 while (TREE_CODE (parm
) == NOP_EXPR
)
12431 parm
= TREE_OPERAND (parm
, 0);
12433 if (arg
== error_mark_node
)
12435 if (arg
== unknown_type_node
)
12436 /* We can't deduce anything from this, but we might get all the
12437 template args from other function args. */
12440 /* If PARM uses template parameters, then we can't bail out here,
12441 even if ARG == PARM, since we won't record unifications for the
12442 template parameters. We might need them if we're trying to
12443 figure out which of two things is more specialized. */
12444 if (arg
== parm
&& !uses_template_parms (parm
))
12447 /* Immediately reject some pairs that won't unify because of
12448 cv-qualification mismatches. */
12449 if (TREE_CODE (arg
) == TREE_CODE (parm
)
12451 /* It is the elements of the array which hold the cv quals of an array
12452 type, and the elements might be template type parms. We'll check
12453 when we recurse. */
12454 && TREE_CODE (arg
) != ARRAY_TYPE
12455 /* We check the cv-qualifiers when unifying with template type
12456 parameters below. We want to allow ARG `const T' to unify with
12457 PARM `T' for example, when computing which of two templates
12458 is more specialized, for example. */
12459 && TREE_CODE (arg
) != TEMPLATE_TYPE_PARM
12460 && !check_cv_quals_for_unify (strict_in
, arg
, parm
))
12463 if (!(strict
& UNIFY_ALLOW_OUTER_LEVEL
)
12464 && TYPE_P (parm
) && !CP_TYPE_CONST_P (parm
))
12465 strict
&= ~UNIFY_ALLOW_MORE_CV_QUAL
;
12466 strict
&= ~UNIFY_ALLOW_OUTER_LEVEL
;
12467 strict
&= ~UNIFY_ALLOW_DERIVED
;
12468 strict
&= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL
;
12469 strict
&= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL
;
12471 switch (TREE_CODE (parm
))
12473 case TYPENAME_TYPE
:
12475 case UNBOUND_CLASS_TEMPLATE
:
12476 /* In a type which contains a nested-name-specifier, template
12477 argument values cannot be deduced for template parameters used
12478 within the nested-name-specifier. */
12481 case TEMPLATE_TYPE_PARM
:
12482 case TEMPLATE_TEMPLATE_PARM
:
12483 case BOUND_TEMPLATE_TEMPLATE_PARM
:
12484 tparm
= TREE_VALUE (TREE_VEC_ELT (tparms
, 0));
12485 if (tparm
== error_mark_node
)
12488 if (TEMPLATE_TYPE_LEVEL (parm
)
12489 != template_decl_level (tparm
))
12490 /* The PARM is not one we're trying to unify. Just check
12491 to see if it matches ARG. */
12492 return (TREE_CODE (arg
) == TREE_CODE (parm
)
12493 && same_type_p (parm
, arg
)) ? 0 : 1;
12494 idx
= TEMPLATE_TYPE_IDX (parm
);
12495 targ
= TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs
), idx
);
12496 tparm
= TREE_VALUE (TREE_VEC_ELT (tparms
, idx
));
12498 /* Check for mixed types and values. */
12499 if ((TREE_CODE (parm
) == TEMPLATE_TYPE_PARM
12500 && TREE_CODE (tparm
) != TYPE_DECL
)
12501 || (TREE_CODE (parm
) == TEMPLATE_TEMPLATE_PARM
12502 && TREE_CODE (tparm
) != TEMPLATE_DECL
))
12505 if (TREE_CODE (parm
) == BOUND_TEMPLATE_TEMPLATE_PARM
)
12507 /* ARG must be constructed from a template class or a template
12508 template parameter. */
12509 if (TREE_CODE (arg
) != BOUND_TEMPLATE_TEMPLATE_PARM
12510 && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg
))
12514 tree parmvec
= TYPE_TI_ARGS (parm
);
12515 tree argvec
= INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg
));
12517 = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg
));
12520 /* The resolution to DR150 makes clear that default
12521 arguments for an N-argument may not be used to bind T
12522 to a template template parameter with fewer than N
12523 parameters. It is not safe to permit the binding of
12524 default arguments as an extension, as that may change
12525 the meaning of a conforming program. Consider:
12527 struct Dense { static const unsigned int dim = 1; };
12529 template <template <typename> class View,
12531 void operator+(float, View<Block> const&);
12533 template <typename Block,
12534 unsigned int Dim = Block::dim>
12535 struct Lvalue_proxy { operator float() const; };
12539 Lvalue_proxy<Dense> p;
12544 Here, if Lvalue_proxy is permitted to bind to View, then
12545 the global operator+ will be used; if they are not, the
12546 Lvalue_proxy will be converted to float. */
12547 if (coerce_template_parms (argtmplvec
, parmvec
,
12548 TYPE_TI_TEMPLATE (parm
),
12550 /*require_all_args=*/true,
12551 /*use_default_args=*/false)
12552 == error_mark_node
)
12555 /* Deduce arguments T, i from TT<T> or TT<i>.
12556 We check each element of PARMVEC and ARGVEC individually
12557 rather than the whole TREE_VEC since they can have
12558 different number of elements. */
12560 for (i
= 0; i
< TREE_VEC_LENGTH (parmvec
); ++i
)
12562 if (unify (tparms
, targs
,
12563 TREE_VEC_ELT (parmvec
, i
),
12564 TREE_VEC_ELT (argvec
, i
),
12569 arg
= TYPE_TI_TEMPLATE (arg
);
12571 /* Fall through to deduce template name. */
12574 if (TREE_CODE (parm
) == TEMPLATE_TEMPLATE_PARM
12575 || TREE_CODE (parm
) == BOUND_TEMPLATE_TEMPLATE_PARM
)
12577 /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>. */
12579 /* Simple cases: Value already set, does match or doesn't. */
12580 if (targ
!= NULL_TREE
&& template_args_equal (targ
, arg
))
12587 /* If PARM is `const T' and ARG is only `int', we don't have
12588 a match unless we are allowing additional qualification.
12589 If ARG is `const int' and PARM is just `T' that's OK;
12590 that binds `const int' to `T'. */
12591 if (!check_cv_quals_for_unify (strict_in
| UNIFY_ALLOW_LESS_CV_QUAL
,
12595 /* Consider the case where ARG is `const volatile int' and
12596 PARM is `const T'. Then, T should be `volatile int'. */
12597 arg
= cp_build_qualified_type_real
12598 (arg
, cp_type_quals (arg
) & ~cp_type_quals (parm
), tf_none
);
12599 if (arg
== error_mark_node
)
12602 /* Simple cases: Value already set, does match or doesn't. */
12603 if (targ
!= NULL_TREE
&& same_type_p (targ
, arg
))
12608 /* Make sure that ARG is not a variable-sized array. (Note
12609 that were talking about variable-sized arrays (like
12610 `int[n]'), rather than arrays of unknown size (like
12611 `int[]').) We'll get very confused by such a type since
12612 the bound of the array will not be computable in an
12613 instantiation. Besides, such types are not allowed in
12614 ISO C++, so we can do as we please here. */
12615 if (variably_modified_type_p (arg
, NULL_TREE
))
12619 /* If ARG is a parameter pack or an expansion, we cannot unify
12620 against it unless PARM is also a parameter pack. */
12621 if ((template_parameter_pack_p (arg
) || PACK_EXPANSION_P (arg
))
12622 && !template_parameter_pack_p (parm
))
12625 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs
), idx
) = arg
;
12628 case TEMPLATE_PARM_INDEX
:
12629 tparm
= TREE_VALUE (TREE_VEC_ELT (tparms
, 0));
12630 if (tparm
== error_mark_node
)
12633 if (TEMPLATE_PARM_LEVEL (parm
)
12634 != template_decl_level (tparm
))
12635 /* The PARM is not one we're trying to unify. Just check
12636 to see if it matches ARG. */
12637 return !(TREE_CODE (arg
) == TREE_CODE (parm
)
12638 && cp_tree_equal (parm
, arg
));
12640 idx
= TEMPLATE_PARM_IDX (parm
);
12641 targ
= TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs
), idx
);
12644 return !cp_tree_equal (targ
, arg
);
12646 /* [temp.deduct.type] If, in the declaration of a function template
12647 with a non-type template-parameter, the non-type
12648 template-parameter is used in an expression in the function
12649 parameter-list and, if the corresponding template-argument is
12650 deduced, the template-argument type shall match the type of the
12651 template-parameter exactly, except that a template-argument
12652 deduced from an array bound may be of any integral type.
12653 The non-type parameter might use already deduced type parameters. */
12654 tparm
= tsubst (TREE_TYPE (parm
), targs
, 0, NULL_TREE
);
12655 if (!TREE_TYPE (arg
))
12656 /* Template-parameter dependent expression. Just accept it for now.
12657 It will later be processed in convert_template_argument. */
12659 else if (same_type_p (TREE_TYPE (arg
), tparm
))
12661 else if ((strict
& UNIFY_ALLOW_INTEGER
)
12662 && (TREE_CODE (tparm
) == INTEGER_TYPE
12663 || TREE_CODE (tparm
) == BOOLEAN_TYPE
))
12664 /* Convert the ARG to the type of PARM; the deduced non-type
12665 template argument must exactly match the types of the
12666 corresponding parameter. */
12667 arg
= fold (build_nop (TREE_TYPE (parm
), arg
));
12668 else if (uses_template_parms (tparm
))
12669 /* We haven't deduced the type of this parameter yet. Try again
12675 /* If ARG is a parameter pack or an expansion, we cannot unify
12676 against it unless PARM is also a parameter pack. */
12677 if ((template_parameter_pack_p (arg
) || PACK_EXPANSION_P (arg
))
12678 && !TEMPLATE_PARM_PARAMETER_PACK (parm
))
12681 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs
), idx
) = arg
;
12686 /* A pointer-to-member constant can be unified only with
12687 another constant. */
12688 if (TREE_CODE (arg
) != PTRMEM_CST
)
12691 /* Just unify the class member. It would be useless (and possibly
12692 wrong, depending on the strict flags) to unify also
12693 PTRMEM_CST_CLASS, because we want to be sure that both parm and
12694 arg refer to the same variable, even if through different
12695 classes. For instance:
12697 struct A { int x; };
12700 Unification of &A::x and &B::x must succeed. */
12701 return unify (tparms
, targs
, PTRMEM_CST_MEMBER (parm
),
12702 PTRMEM_CST_MEMBER (arg
), strict
);
12707 if (TREE_CODE (arg
) != POINTER_TYPE
)
12710 /* [temp.deduct.call]
12712 A can be another pointer or pointer to member type that can
12713 be converted to the deduced A via a qualification
12714 conversion (_conv.qual_).
12716 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
12717 This will allow for additional cv-qualification of the
12718 pointed-to types if appropriate. */
12720 if (TREE_CODE (TREE_TYPE (arg
)) == RECORD_TYPE
)
12721 /* The derived-to-base conversion only persists through one
12722 level of pointers. */
12723 strict
|= (strict_in
& UNIFY_ALLOW_DERIVED
);
12725 return unify (tparms
, targs
, TREE_TYPE (parm
),
12726 TREE_TYPE (arg
), strict
);
12729 case REFERENCE_TYPE
:
12730 if (TREE_CODE (arg
) != REFERENCE_TYPE
)
12732 return unify (tparms
, targs
, TREE_TYPE (parm
), TREE_TYPE (arg
),
12733 strict
& UNIFY_ALLOW_MORE_CV_QUAL
);
12736 if (TREE_CODE (arg
) != ARRAY_TYPE
)
12738 if ((TYPE_DOMAIN (parm
) == NULL_TREE
)
12739 != (TYPE_DOMAIN (arg
) == NULL_TREE
))
12741 if (TYPE_DOMAIN (parm
) != NULL_TREE
)
12748 /* Our representation of array types uses "N - 1" as the
12749 TYPE_MAX_VALUE for an array with "N" elements, if "N" is
12750 not an integer constant. We cannot unify arbitrarily
12751 complex expressions, so we eliminate the MINUS_EXPRs
12753 parm_max
= TYPE_MAX_VALUE (TYPE_DOMAIN (parm
));
12754 parm_cst
= TREE_CODE (parm_max
) == INTEGER_CST
;
12757 gcc_assert (TREE_CODE (parm_max
) == MINUS_EXPR
);
12758 parm_max
= TREE_OPERAND (parm_max
, 0);
12760 arg_max
= TYPE_MAX_VALUE (TYPE_DOMAIN (arg
));
12761 arg_cst
= TREE_CODE (arg_max
) == INTEGER_CST
;
12764 /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
12765 trying to unify the type of a variable with the type
12766 of a template parameter. For example:
12768 template <unsigned int N>
12769 void f (char (&) [N]);
12776 Here, the type of the ARG will be "int [g(i)]", and
12777 may be a SAVE_EXPR, etc. */
12778 if (TREE_CODE (arg_max
) != MINUS_EXPR
)
12780 arg_max
= TREE_OPERAND (arg_max
, 0);
12783 /* If only one of the bounds used a MINUS_EXPR, compensate
12784 by adding one to the other bound. */
12785 if (parm_cst
&& !arg_cst
)
12786 parm_max
= fold_build2 (PLUS_EXPR
,
12790 else if (arg_cst
&& !parm_cst
)
12791 arg_max
= fold_build2 (PLUS_EXPR
,
12796 if (unify (tparms
, targs
, parm_max
, arg_max
, UNIFY_ALLOW_INTEGER
))
12799 return unify (tparms
, targs
, TREE_TYPE (parm
), TREE_TYPE (arg
),
12800 strict
& UNIFY_ALLOW_MORE_CV_QUAL
);
12807 case ENUMERAL_TYPE
:
12809 if (TREE_CODE (arg
) != TREE_CODE (parm
))
12812 /* We have already checked cv-qualification at the top of the
12814 if (!same_type_ignoring_top_level_qualifiers_p (arg
, parm
))
12817 /* As far as unification is concerned, this wins. Later checks
12818 will invalidate it if necessary. */
12821 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
12822 /* Type INTEGER_CST can come from ordinary constant template args. */
12824 while (TREE_CODE (arg
) == NOP_EXPR
)
12825 arg
= TREE_OPERAND (arg
, 0);
12827 if (TREE_CODE (arg
) != INTEGER_CST
)
12829 return !tree_int_cst_equal (parm
, arg
);
12834 if (TREE_CODE (arg
) != TREE_VEC
)
12836 if (TREE_VEC_LENGTH (parm
) != TREE_VEC_LENGTH (arg
))
12838 for (i
= 0; i
< TREE_VEC_LENGTH (parm
); ++i
)
12839 if (unify (tparms
, targs
,
12840 TREE_VEC_ELT (parm
, i
), TREE_VEC_ELT (arg
, i
),
12848 if (TREE_CODE (arg
) != TREE_CODE (parm
))
12851 if (TYPE_PTRMEMFUNC_P (parm
))
12853 if (!TYPE_PTRMEMFUNC_P (arg
))
12856 return unify (tparms
, targs
,
12857 TYPE_PTRMEMFUNC_FN_TYPE (parm
),
12858 TYPE_PTRMEMFUNC_FN_TYPE (arg
),
12862 if (CLASSTYPE_TEMPLATE_INFO (parm
))
12864 tree t
= NULL_TREE
;
12866 if (strict_in
& UNIFY_ALLOW_DERIVED
)
12868 /* First, we try to unify the PARM and ARG directly. */
12869 t
= try_class_unification (tparms
, targs
,
12874 /* Fallback to the special case allowed in
12875 [temp.deduct.call]:
12877 If P is a class, and P has the form
12878 template-id, then A can be a derived class of
12879 the deduced A. Likewise, if P is a pointer to
12880 a class of the form template-id, A can be a
12881 pointer to a derived class pointed to by the
12883 t
= get_template_base (tparms
, targs
, parm
, arg
);
12889 else if (CLASSTYPE_TEMPLATE_INFO (arg
)
12890 && (CLASSTYPE_TI_TEMPLATE (parm
)
12891 == CLASSTYPE_TI_TEMPLATE (arg
)))
12892 /* Perhaps PARM is something like S<U> and ARG is S<int>.
12893 Then, we should unify `int' and `U'. */
12896 /* There's no chance of unification succeeding. */
12899 return unify (tparms
, targs
, CLASSTYPE_TI_ARGS (parm
),
12900 CLASSTYPE_TI_ARGS (t
), UNIFY_ALLOW_NONE
);
12902 else if (!same_type_ignoring_top_level_qualifiers_p (parm
, arg
))
12907 case FUNCTION_TYPE
:
12908 if (TREE_CODE (arg
) != TREE_CODE (parm
))
12911 /* CV qualifications for methods can never be deduced, they must
12912 match exactly. We need to check them explicitly here,
12913 because type_unification_real treats them as any other
12914 cvqualified parameter. */
12915 if (TREE_CODE (parm
) == METHOD_TYPE
12916 && (!check_cv_quals_for_unify
12918 TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg
))),
12919 TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm
))))))
12922 if (unify (tparms
, targs
, TREE_TYPE (parm
),
12923 TREE_TYPE (arg
), UNIFY_ALLOW_NONE
))
12925 return type_unification_real (tparms
, targs
, TYPE_ARG_TYPES (parm
),
12926 TYPE_ARG_TYPES (arg
), 1, DEDUCE_EXACT
,
12930 /* Unify a pointer to member with a pointer to member function, which
12931 deduces the type of the member as a function type. */
12932 if (TYPE_PTRMEMFUNC_P (arg
))
12936 cp_cv_quals cv_quals
;
12938 /* Check top-level cv qualifiers */
12939 if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE
, arg
, parm
))
12942 if (unify (tparms
, targs
, TYPE_OFFSET_BASETYPE (parm
),
12943 TYPE_PTRMEMFUNC_OBJECT_TYPE (arg
), UNIFY_ALLOW_NONE
))
12946 /* Determine the type of the function we are unifying against. */
12947 method_type
= TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg
));
12949 build_function_type (TREE_TYPE (method_type
),
12950 TREE_CHAIN (TYPE_ARG_TYPES (method_type
)));
12952 /* Extract the cv-qualifiers of the member function from the
12953 implicit object parameter and place them on the function
12954 type to be restored later. */
12956 cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type
))));
12957 fntype
= build_qualified_type (fntype
, cv_quals
);
12958 return unify (tparms
, targs
, TREE_TYPE (parm
), fntype
, strict
);
12961 if (TREE_CODE (arg
) != OFFSET_TYPE
)
12963 if (unify (tparms
, targs
, TYPE_OFFSET_BASETYPE (parm
),
12964 TYPE_OFFSET_BASETYPE (arg
), UNIFY_ALLOW_NONE
))
12966 return unify (tparms
, targs
, TREE_TYPE (parm
), TREE_TYPE (arg
),
12970 if (DECL_TEMPLATE_PARM_P (parm
))
12971 return unify (tparms
, targs
, DECL_INITIAL (parm
), arg
, strict
);
12972 if (arg
!= integral_constant_value (parm
))
12977 case TEMPLATE_DECL
:
12978 /* Matched cases are handled by the ARG == PARM test above. */
12981 case TYPE_ARGUMENT_PACK
:
12982 case NONTYPE_ARGUMENT_PACK
:
12984 tree packed_parms
= ARGUMENT_PACK_ARGS (parm
);
12985 tree packed_args
= ARGUMENT_PACK_ARGS (arg
);
12986 int i
, len
= TREE_VEC_LENGTH (packed_parms
);
12987 int argslen
= TREE_VEC_LENGTH (packed_args
);
12988 int parm_variadic_p
= 0;
12990 /* Check if the parameters end in a pack, making them variadic. */
12992 && PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms
, len
- 1)))
12993 parm_variadic_p
= 1;
12995 /* If we don't have enough arguments to satisfy the parameters
12996 (not counting the pack expression at the end), or we have
12997 too many arguments for a parameter list that doesn't end in
12998 a pack expression, we can't unify. */
12999 if (argslen
< (len
- parm_variadic_p
)
13000 || (argslen
> len
&& !parm_variadic_p
))
13003 /* Unify all of the parameters that precede the (optional)
13004 pack expression. */
13005 for (i
= 0; i
< len
- parm_variadic_p
; ++i
)
13007 if (unify (tparms
, targs
, TREE_VEC_ELT (packed_parms
, i
),
13008 TREE_VEC_ELT (packed_args
, i
), strict
))
13012 if (parm_variadic_p
)
13013 return unify_pack_expansion (tparms
, targs
,
13014 packed_parms
, packed_args
,
13015 strict
, /*call_args_p=*/false,
13023 case DECLTYPE_TYPE
:
13024 /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
13029 gcc_assert (EXPR_P (parm
));
13031 /* We must be looking at an expression. This can happen with
13035 void foo(S<I>, S<I + 2>);
13037 This is a "nondeduced context":
13041 The nondeduced contexts are:
13043 --A type that is a template-id in which one or more of
13044 the template-arguments is an expression that references
13045 a template-parameter.
13047 In these cases, we assume deduction succeeded, but don't
13048 actually infer any unifications. */
13050 if (!uses_template_parms (parm
)
13051 && !template_args_equal (parm
, arg
))
13058 /* Note that DECL can be defined in this translation unit, if
13062 mark_definable (tree decl
)
13065 DECL_NOT_REALLY_EXTERN (decl
) = 1;
13066 FOR_EACH_CLONE (clone
, decl
)
13067 DECL_NOT_REALLY_EXTERN (clone
) = 1;
13070 /* Called if RESULT is explicitly instantiated, or is a member of an
13071 explicitly instantiated class. */
13074 mark_decl_instantiated (tree result
, int extern_p
)
13076 SET_DECL_EXPLICIT_INSTANTIATION (result
);
13078 /* If this entity has already been written out, it's too late to
13079 make any modifications. */
13080 if (TREE_ASM_WRITTEN (result
))
13083 if (TREE_CODE (result
) != FUNCTION_DECL
)
13084 /* The TREE_PUBLIC flag for function declarations will have been
13085 set correctly by tsubst. */
13086 TREE_PUBLIC (result
) = 1;
13088 /* This might have been set by an earlier implicit instantiation. */
13089 DECL_COMDAT (result
) = 0;
13092 DECL_NOT_REALLY_EXTERN (result
) = 0;
13095 mark_definable (result
);
13096 /* Always make artificials weak. */
13097 if (DECL_ARTIFICIAL (result
) && flag_weak
)
13098 comdat_linkage (result
);
13099 /* For WIN32 we also want to put explicit instantiations in
13100 linkonce sections. */
13101 else if (TREE_PUBLIC (result
))
13102 maybe_make_one_only (result
);
13105 /* If EXTERN_P, then this function will not be emitted -- unless
13106 followed by an explicit instantiation, at which point its linkage
13107 will be adjusted. If !EXTERN_P, then this function will be
13108 emitted here. In neither circumstance do we want
13109 import_export_decl to adjust the linkage. */
13110 DECL_INTERFACE_KNOWN (result
) = 1;
13113 /* Given two function templates PAT1 and PAT2, return:
13115 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
13116 -1 if PAT2 is more specialized than PAT1.
13117 0 if neither is more specialized.
13119 LEN indicates the number of parameters we should consider
13120 (defaulted parameters should not be considered).
13122 The 1998 std underspecified function template partial ordering, and
13123 DR214 addresses the issue. We take pairs of arguments, one from
13124 each of the templates, and deduce them against each other. One of
13125 the templates will be more specialized if all the *other*
13126 template's arguments deduce against its arguments and at least one
13127 of its arguments *does* *not* deduce against the other template's
13128 corresponding argument. Deduction is done as for class templates.
13129 The arguments used in deduction have reference and top level cv
13130 qualifiers removed. Iff both arguments were originally reference
13131 types *and* deduction succeeds in both directions, the template
13132 with the more cv-qualified argument wins for that pairing (if
13133 neither is more cv-qualified, they both are equal). Unlike regular
13134 deduction, after all the arguments have been deduced in this way,
13135 we do *not* verify the deduced template argument values can be
13136 substituted into non-deduced contexts, nor do we have to verify
13137 that all template arguments have been deduced. */
13140 more_specialized_fn (tree pat1
, tree pat2
, int len
)
13142 tree decl1
= DECL_TEMPLATE_RESULT (pat1
);
13143 tree decl2
= DECL_TEMPLATE_RESULT (pat2
);
13144 tree targs1
= make_tree_vec (DECL_NTPARMS (pat1
));
13145 tree targs2
= make_tree_vec (DECL_NTPARMS (pat2
));
13146 tree tparms1
= DECL_INNERMOST_TEMPLATE_PARMS (pat1
);
13147 tree tparms2
= DECL_INNERMOST_TEMPLATE_PARMS (pat2
);
13148 tree args1
= TYPE_ARG_TYPES (TREE_TYPE (decl1
));
13149 tree args2
= TYPE_ARG_TYPES (TREE_TYPE (decl2
));
13153 /* Remove the this parameter from non-static member functions. If
13154 one is a non-static member function and the other is not a static
13155 member function, remove the first parameter from that function
13156 also. This situation occurs for operator functions where we
13157 locate both a member function (with this pointer) and non-member
13158 operator (with explicit first operand). */
13159 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1
))
13161 len
--; /* LEN is the number of significant arguments for DECL1 */
13162 args1
= TREE_CHAIN (args1
);
13163 if (!DECL_STATIC_FUNCTION_P (decl2
))
13164 args2
= TREE_CHAIN (args2
);
13166 else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2
))
13168 args2
= TREE_CHAIN (args2
);
13169 if (!DECL_STATIC_FUNCTION_P (decl1
))
13172 args1
= TREE_CHAIN (args1
);
13176 /* If only one is a conversion operator, they are unordered. */
13177 if (DECL_CONV_FN_P (decl1
) != DECL_CONV_FN_P (decl2
))
13180 /* Consider the return type for a conversion function */
13181 if (DECL_CONV_FN_P (decl1
))
13183 args1
= tree_cons (NULL_TREE
, TREE_TYPE (TREE_TYPE (decl1
)), args1
);
13184 args2
= tree_cons (NULL_TREE
, TREE_TYPE (TREE_TYPE (decl2
)), args2
);
13188 processing_template_decl
++;
13192 tree arg1
= TREE_VALUE (args1
);
13193 tree arg2
= TREE_VALUE (args2
);
13194 int deduce1
, deduce2
;
13198 if (TREE_CODE (arg1
) == TYPE_PACK_EXPANSION
13199 && TREE_CODE (arg2
) == TYPE_PACK_EXPANSION
)
13201 /* When both arguments are pack expansions, we need only
13202 unify the patterns themselves. */
13203 arg1
= PACK_EXPANSION_PATTERN (arg1
);
13204 arg2
= PACK_EXPANSION_PATTERN (arg2
);
13206 /* This is the last comparison we need to do. */
13210 if (TREE_CODE (arg1
) == REFERENCE_TYPE
)
13212 arg1
= TREE_TYPE (arg1
);
13213 quals1
= cp_type_quals (arg1
);
13216 if (TREE_CODE (arg2
) == REFERENCE_TYPE
)
13218 arg2
= TREE_TYPE (arg2
);
13219 quals2
= cp_type_quals (arg2
);
13222 if ((quals1
< 0) != (quals2
< 0))
13224 /* Only of the args is a reference, see if we should apply
13225 array/function pointer decay to it. This is not part of
13226 DR214, but is, IMHO, consistent with the deduction rules
13227 for the function call itself, and with our earlier
13228 implementation of the underspecified partial ordering
13229 rules. (nathan). */
13232 switch (TREE_CODE (arg1
))
13235 arg1
= TREE_TYPE (arg1
);
13237 case FUNCTION_TYPE
:
13238 arg1
= build_pointer_type (arg1
);
13247 switch (TREE_CODE (arg2
))
13250 arg2
= TREE_TYPE (arg2
);
13252 case FUNCTION_TYPE
:
13253 arg2
= build_pointer_type (arg2
);
13262 arg1
= TYPE_MAIN_VARIANT (arg1
);
13263 arg2
= TYPE_MAIN_VARIANT (arg2
);
13265 if (TREE_CODE (arg1
) == TYPE_PACK_EXPANSION
)
13267 int i
, len2
= list_length (args2
);
13268 tree parmvec
= make_tree_vec (1);
13269 tree argvec
= make_tree_vec (len2
);
13272 /* Setup the parameter vector, which contains only ARG1. */
13273 TREE_VEC_ELT (parmvec
, 0) = arg1
;
13275 /* Setup the argument vector, which contains the remaining
13277 for (i
= 0; i
< len2
; i
++, ta
= TREE_CHAIN (ta
))
13278 TREE_VEC_ELT (argvec
, i
) = TREE_VALUE (ta
);
13280 deduce1
= !unify_pack_expansion (tparms1
, targs1
, parmvec
,
13281 argvec
, UNIFY_ALLOW_NONE
,
13282 /*call_args_p=*/false,
13285 /* We cannot deduce in the other direction, because ARG1 is
13286 a pack expansion but ARG2 is not. */
13289 else if (TREE_CODE (arg2
) == TYPE_PACK_EXPANSION
)
13291 int i
, len1
= list_length (args1
);
13292 tree parmvec
= make_tree_vec (1);
13293 tree argvec
= make_tree_vec (len1
);
13296 /* Setup the parameter vector, which contains only ARG1. */
13297 TREE_VEC_ELT (parmvec
, 0) = arg2
;
13299 /* Setup the argument vector, which contains the remaining
13301 for (i
= 0; i
< len1
; i
++, ta
= TREE_CHAIN (ta
))
13302 TREE_VEC_ELT (argvec
, i
) = TREE_VALUE (ta
);
13304 deduce2
= !unify_pack_expansion (tparms2
, targs2
, parmvec
,
13305 argvec
, UNIFY_ALLOW_NONE
,
13306 /*call_args_p=*/false,
13309 /* We cannot deduce in the other direction, because ARG2 is
13310 a pack expansion but ARG1 is not.*/
13316 /* The normal case, where neither argument is a pack
13318 deduce1
= !unify (tparms1
, targs1
, arg1
, arg2
, UNIFY_ALLOW_NONE
);
13319 deduce2
= !unify (tparms2
, targs2
, arg2
, arg1
, UNIFY_ALLOW_NONE
);
13326 if (better1
< 0 && better2
< 0)
13327 /* We've failed to deduce something in either direction.
13328 These must be unordered. */
13331 if (deduce1
&& deduce2
&& quals1
>= 0 && quals2
>= 0)
13333 /* Deduces in both directions, see if quals can
13334 disambiguate. Pretend the worse one failed to deduce. */
13335 if ((quals1
& quals2
) == quals2
)
13337 if ((quals1
& quals2
) == quals1
)
13340 if (deduce1
&& !deduce2
&& !better2
)
13342 if (deduce2
&& !deduce1
&& !better1
)
13345 if (TREE_CODE (arg1
) == TYPE_PACK_EXPANSION
13346 || TREE_CODE (arg2
) == TYPE_PACK_EXPANSION
)
13347 /* We have already processed all of the arguments in our
13348 handing of the pack expansion type. */
13351 args1
= TREE_CHAIN (args1
);
13352 args2
= TREE_CHAIN (args2
);
13355 processing_template_decl
--;
13357 /* All things being equal, if the next argument is a pack expansion
13358 for one function but not for the other, prefer the
13359 non-variadic function. */
13360 if ((better1
> 0) - (better2
> 0) == 0
13361 && args1
&& TREE_VALUE (args1
)
13362 && args2
&& TREE_VALUE (args2
))
13364 if (TREE_CODE (TREE_VALUE (args1
)) == TYPE_PACK_EXPANSION
)
13365 return TREE_CODE (TREE_VALUE (args2
)) == TYPE_PACK_EXPANSION
? 0 : -1;
13366 else if (TREE_CODE (TREE_VALUE (args2
)) == TYPE_PACK_EXPANSION
)
13370 return (better1
> 0) - (better2
> 0);
13373 /* Determine which of two partial specializations is more specialized.
13375 PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
13376 to the first partial specialization. The TREE_VALUE is the
13377 innermost set of template parameters for the partial
13378 specialization. PAT2 is similar, but for the second template.
13380 Return 1 if the first partial specialization is more specialized;
13381 -1 if the second is more specialized; 0 if neither is more
13384 See [temp.class.order] for information about determining which of
13385 two templates is more specialized. */
13388 more_specialized_class (tree pat1
, tree pat2
)
13393 bool any_deductions
= false;
13395 tmpl1
= TREE_TYPE (pat1
);
13396 tmpl2
= TREE_TYPE (pat2
);
13398 /* Just like what happens for functions, if we are ordering between
13399 different class template specializations, we may encounter dependent
13400 types in the arguments, and we need our dependency check functions
13401 to behave correctly. */
13402 ++processing_template_decl
;
13403 targs
= get_class_bindings (TREE_VALUE (pat1
),
13404 CLASSTYPE_TI_ARGS (tmpl1
),
13405 CLASSTYPE_TI_ARGS (tmpl2
));
13409 any_deductions
= true;
13412 targs
= get_class_bindings (TREE_VALUE (pat2
),
13413 CLASSTYPE_TI_ARGS (tmpl2
),
13414 CLASSTYPE_TI_ARGS (tmpl1
));
13418 any_deductions
= true;
13420 --processing_template_decl
;
13422 /* In the case of a tie where at least one of the class templates
13423 has a parameter pack at the end, the template with the most
13424 non-packed parameters wins. */
13427 && (template_args_variadic_p (TREE_PURPOSE (pat1
))
13428 || template_args_variadic_p (TREE_PURPOSE (pat2
))))
13430 tree args1
= INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1
));
13431 tree args2
= INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2
));
13432 int len1
= TREE_VEC_LENGTH (args1
);
13433 int len2
= TREE_VEC_LENGTH (args2
);
13435 /* We don't count the pack expansion at the end. */
13436 if (template_args_variadic_p (TREE_PURPOSE (pat1
)))
13438 if (template_args_variadic_p (TREE_PURPOSE (pat2
)))
13443 else if (len1
< len2
)
13450 /* Return the template arguments that will produce the function signature
13451 DECL from the function template FN, with the explicit template
13452 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is true, the return type must
13453 also match. Return NULL_TREE if no satisfactory arguments could be
13457 get_bindings (tree fn
, tree decl
, tree explicit_args
, bool check_rettype
)
13459 int ntparms
= DECL_NTPARMS (fn
);
13460 tree targs
= make_tree_vec (ntparms
);
13462 tree decl_arg_types
;
13464 /* Substitute the explicit template arguments into the type of DECL.
13465 The call to fn_type_unification will handle substitution into the
13467 decl_type
= TREE_TYPE (decl
);
13468 if (explicit_args
&& uses_template_parms (decl_type
))
13471 tree converted_args
;
13473 if (DECL_TEMPLATE_INFO (decl
))
13474 tmpl
= DECL_TI_TEMPLATE (decl
);
13476 /* We can get here for some invalid specializations. */
13480 = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl
),
13481 explicit_args
, NULL_TREE
,
13483 /*require_all_args=*/false,
13484 /*use_default_args=*/false);
13485 if (converted_args
== error_mark_node
)
13488 decl_type
= tsubst (decl_type
, converted_args
, tf_none
, NULL_TREE
);
13489 if (decl_type
== error_mark_node
)
13493 /* Never do unification on the 'this' parameter. */
13494 decl_arg_types
= skip_artificial_parms_for (decl
,
13495 TYPE_ARG_TYPES (decl_type
));
13497 if (fn_type_unification (fn
, explicit_args
, targs
,
13499 (check_rettype
|| DECL_CONV_FN_P (fn
)
13500 ? TREE_TYPE (decl_type
) : NULL_TREE
),
13501 DEDUCE_EXACT
, LOOKUP_NORMAL
))
13507 /* Return the innermost template arguments that, when applied to a
13508 template specialization whose innermost template parameters are
13509 TPARMS, and whose specialization arguments are PARMS, yield the
13512 For example, suppose we have:
13514 template <class T, class U> struct S {};
13515 template <class T> struct S<T*, int> {};
13517 Then, suppose we want to get `S<double*, int>'. The TPARMS will be
13518 {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
13519 int}. The resulting vector will be {double}, indicating that `T'
13520 is bound to `double'. */
13523 get_class_bindings (tree tparms
, tree spec_args
, tree args
)
13525 int i
, ntparms
= TREE_VEC_LENGTH (tparms
);
13527 tree innermost_deduced_args
;
13529 innermost_deduced_args
= make_tree_vec (ntparms
);
13530 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args
))
13532 deduced_args
= copy_node (args
);
13533 SET_TMPL_ARGS_LEVEL (deduced_args
,
13534 TMPL_ARGS_DEPTH (deduced_args
),
13535 innermost_deduced_args
);
13538 deduced_args
= innermost_deduced_args
;
13540 if (unify (tparms
, deduced_args
,
13541 INNERMOST_TEMPLATE_ARGS (spec_args
),
13542 INNERMOST_TEMPLATE_ARGS (args
),
13546 for (i
= 0; i
< ntparms
; ++i
)
13547 if (! TREE_VEC_ELT (innermost_deduced_args
, i
))
13550 /* Verify that nondeduced template arguments agree with the type
13551 obtained from argument deduction.
13555 struct A { typedef int X; };
13556 template <class T, class U> struct C {};
13557 template <class T> struct C<T, typename T::X> {};
13559 Then with the instantiation `C<A, int>', we can deduce that
13560 `T' is `A' but unify () does not check whether `typename T::X'
13562 spec_args
= tsubst (spec_args
, deduced_args
, tf_none
, NULL_TREE
);
13563 if (spec_args
== error_mark_node
13564 /* We only need to check the innermost arguments; the other
13565 arguments will always agree. */
13566 || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args
),
13567 INNERMOST_TEMPLATE_ARGS (args
)))
13570 return deduced_args
;
13573 /* TEMPLATES is a TREE_LIST. Each TREE_VALUE is a TEMPLATE_DECL.
13574 Return the TREE_LIST node with the most specialized template, if
13575 any. If there is no most specialized template, the error_mark_node
13578 Note that this function does not look at, or modify, the
13579 TREE_PURPOSE or TREE_TYPE of any of the nodes. Since the node
13580 returned is one of the elements of INSTANTIATIONS, callers may
13581 store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
13582 and retrieve it from the value returned. */
13585 most_specialized_instantiation (tree templates
)
13589 ++processing_template_decl
;
13592 for (fn
= TREE_CHAIN (templates
); fn
; fn
= TREE_CHAIN (fn
))
13596 if (get_bindings (TREE_VALUE (champ
),
13597 DECL_TEMPLATE_RESULT (TREE_VALUE (fn
)),
13598 NULL_TREE
, /*check_ret=*/false))
13601 if (get_bindings (TREE_VALUE (fn
),
13602 DECL_TEMPLATE_RESULT (TREE_VALUE (champ
)),
13603 NULL_TREE
, /*check_ret=*/false))
13610 /* Equally specialized, move to next function. If there
13611 is no next function, nothing's most specialized. */
13612 fn
= TREE_CHAIN (fn
);
13620 /* Now verify that champ is better than everything earlier in the
13621 instantiation list. */
13622 for (fn
= templates
; fn
!= champ
; fn
= TREE_CHAIN (fn
))
13623 if (get_bindings (TREE_VALUE (champ
),
13624 DECL_TEMPLATE_RESULT (TREE_VALUE (fn
)),
13625 NULL_TREE
, /*check_ret=*/false)
13626 || !get_bindings (TREE_VALUE (fn
),
13627 DECL_TEMPLATE_RESULT (TREE_VALUE (champ
)),
13628 NULL_TREE
, /*check_ret=*/false))
13634 processing_template_decl
--;
13637 return error_mark_node
;
13642 /* If DECL is a specialization of some template, return the most
13643 general such template. Otherwise, returns NULL_TREE.
13645 For example, given:
13647 template <class T> struct S { template <class U> void f(U); };
13649 if TMPL is `template <class U> void S<int>::f(U)' this will return
13650 the full template. This function will not trace past partial
13651 specializations, however. For example, given in addition:
13653 template <class T> struct S<T*> { template <class U> void f(U); };
13655 if TMPL is `template <class U> void S<int*>::f(U)' this will return
13656 `template <class T> template <class U> S<T*>::f(U)'. */
13659 most_general_template (tree decl
)
13661 /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
13662 an immediate specialization. */
13663 if (TREE_CODE (decl
) == FUNCTION_DECL
)
13665 if (DECL_TEMPLATE_INFO (decl
)) {
13666 decl
= DECL_TI_TEMPLATE (decl
);
13668 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
13669 template friend. */
13670 if (TREE_CODE (decl
) != TEMPLATE_DECL
)
13676 /* Look for more and more general templates. */
13677 while (DECL_TEMPLATE_INFO (decl
))
13679 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
13680 (See cp-tree.h for details.) */
13681 if (TREE_CODE (DECL_TI_TEMPLATE (decl
)) != TEMPLATE_DECL
)
13684 if (CLASS_TYPE_P (TREE_TYPE (decl
))
13685 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl
)))
13688 /* Stop if we run into an explicitly specialized class template. */
13689 if (!DECL_NAMESPACE_SCOPE_P (decl
)
13690 && DECL_CONTEXT (decl
)
13691 && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl
)))
13694 decl
= DECL_TI_TEMPLATE (decl
);
13700 /* Return the most specialized of the class template partial
13701 specializations of TMPL which can produce TYPE, a specialization of
13702 TMPL. The value returned is actually a TREE_LIST; the TREE_TYPE is
13703 a _TYPE node corresponding to the partial specialization, while the
13704 TREE_PURPOSE is the set of template arguments that must be
13705 substituted into the TREE_TYPE in order to generate TYPE.
13707 If the choice of partial specialization is ambiguous, a diagnostic
13708 is issued, and the error_mark_node is returned. If there are no
13709 partial specializations of TMPL matching TYPE, then NULL_TREE is
13713 most_specialized_class (tree type
, tree tmpl
)
13715 tree list
= NULL_TREE
;
13721 tree outer_args
= NULL_TREE
;
13723 tmpl
= most_general_template (tmpl
);
13724 args
= CLASSTYPE_TI_ARGS (type
);
13726 /* For determining which partial specialization to use, only the
13727 innermost args are interesting. */
13728 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args
))
13730 outer_args
= strip_innermost_template_args (args
, 1);
13731 args
= INNERMOST_TEMPLATE_ARGS (args
);
13734 for (t
= DECL_TEMPLATE_SPECIALIZATIONS (tmpl
); t
; t
= TREE_CHAIN (t
))
13736 tree partial_spec_args
;
13738 tree parms
= TREE_VALUE (t
);
13740 partial_spec_args
= CLASSTYPE_TI_ARGS (TREE_TYPE (t
));
13745 ++processing_template_decl
;
13747 /* Discard the outer levels of args, and then substitute in the
13748 template args from the enclosing class. */
13749 partial_spec_args
= INNERMOST_TEMPLATE_ARGS (partial_spec_args
);
13750 partial_spec_args
= tsubst_template_args
13751 (partial_spec_args
, outer_args
, tf_none
, NULL_TREE
);
13753 /* PARMS already refers to just the innermost parms, but the
13754 template parms in partial_spec_args had their levels lowered
13755 by tsubst, so we need to do the same for the parm list. We
13756 can't just tsubst the TREE_VEC itself, as tsubst wants to
13757 treat a TREE_VEC as an argument vector. */
13758 parms
= copy_node (parms
);
13759 for (i
= TREE_VEC_LENGTH (parms
) - 1; i
>= 0; --i
)
13760 TREE_VEC_ELT (parms
, i
) =
13761 tsubst (TREE_VEC_ELT (parms
, i
), outer_args
, tf_none
, NULL_TREE
);
13763 --processing_template_decl
;
13765 spec_args
= get_class_bindings (parms
,
13771 spec_args
= add_to_template_args (outer_args
, spec_args
);
13772 list
= tree_cons (spec_args
, TREE_VALUE (t
), list
);
13773 TREE_TYPE (list
) = TREE_TYPE (t
);
13780 ambiguous_p
= false;
13783 t
= TREE_CHAIN (t
);
13784 for (; t
; t
= TREE_CHAIN (t
))
13786 fate
= more_specialized_class (champ
, t
);
13793 t
= TREE_CHAIN (t
);
13796 ambiguous_p
= true;
13805 for (t
= list
; t
&& t
!= champ
; t
= TREE_CHAIN (t
))
13807 fate
= more_specialized_class (champ
, t
);
13810 ambiguous_p
= true;
13817 const char *str
= "candidates are:";
13818 error ("ambiguous class template instantiation for %q#T", type
);
13819 for (t
= list
; t
; t
= TREE_CHAIN (t
))
13821 error ("%s %+#T", str
, TREE_TYPE (t
));
13824 return error_mark_node
;
13830 /* Explicitly instantiate DECL. */
13833 do_decl_instantiation (tree decl
, tree storage
)
13835 tree result
= NULL_TREE
;
13838 if (!decl
|| decl
== error_mark_node
)
13839 /* An error occurred, for which grokdeclarator has already issued
13840 an appropriate message. */
13842 else if (! DECL_LANG_SPECIFIC (decl
))
13844 error ("explicit instantiation of non-template %q#D", decl
);
13847 else if (TREE_CODE (decl
) == VAR_DECL
)
13849 /* There is an asymmetry here in the way VAR_DECLs and
13850 FUNCTION_DECLs are handled by grokdeclarator. In the case of
13851 the latter, the DECL we get back will be marked as a
13852 template instantiation, and the appropriate
13853 DECL_TEMPLATE_INFO will be set up. This does not happen for
13854 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
13855 should handle VAR_DECLs as it currently handles
13857 result
= lookup_field (DECL_CONTEXT (decl
), DECL_NAME (decl
), 0, false);
13858 if (!result
|| TREE_CODE (result
) != VAR_DECL
)
13860 error ("no matching template for %qD found", decl
);
13863 if (!same_type_p (TREE_TYPE (result
), TREE_TYPE (decl
)))
13865 error ("type %qT for explicit instantiation %qD does not match "
13866 "declared type %qT", TREE_TYPE (result
), decl
,
13871 else if (TREE_CODE (decl
) != FUNCTION_DECL
)
13873 error ("explicit instantiation of %q#D", decl
);
13879 /* Check for various error cases. Note that if the explicit
13880 instantiation is valid the RESULT will currently be marked as an
13881 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
13882 until we get here. */
13884 if (DECL_TEMPLATE_SPECIALIZATION (result
))
13886 /* DR 259 [temp.spec].
13888 Both an explicit instantiation and a declaration of an explicit
13889 specialization shall not appear in a program unless the explicit
13890 instantiation follows a declaration of the explicit specialization.
13892 For a given set of template parameters, if an explicit
13893 instantiation of a template appears after a declaration of an
13894 explicit specialization for that template, the explicit
13895 instantiation has no effect. */
13898 else if (DECL_EXPLICIT_INSTANTIATION (result
))
13902 No program shall explicitly instantiate any template more
13905 We check DECL_NOT_REALLY_EXTERN so as not to complain when
13906 the first instantiation was `extern' and the second is not,
13907 and EXTERN_P for the opposite case. */
13908 if (DECL_NOT_REALLY_EXTERN (result
) && !extern_p
)
13909 pedwarn ("duplicate explicit instantiation of %q#D", result
);
13910 /* If an "extern" explicit instantiation follows an ordinary
13911 explicit instantiation, the template is instantiated. */
13915 else if (!DECL_IMPLICIT_INSTANTIATION (result
))
13917 error ("no matching template for %qD found", result
);
13920 else if (!DECL_TEMPLATE_INFO (result
))
13922 pedwarn ("explicit instantiation of non-template %q#D", result
);
13926 if (storage
== NULL_TREE
)
13928 else if (storage
== ridpointers
[(int) RID_EXTERN
])
13930 if (pedantic
&& !in_system_header
)
13931 pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
13936 error ("storage class %qD applied to template instantiation", storage
);
13938 check_explicit_instantiation_namespace (result
);
13939 mark_decl_instantiated (result
, extern_p
);
13941 instantiate_decl (result
, /*defer_ok=*/1,
13942 /*expl_inst_class_mem_p=*/false);
13946 mark_class_instantiated (tree t
, int extern_p
)
13948 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t
);
13949 SET_CLASSTYPE_INTERFACE_KNOWN (t
);
13950 CLASSTYPE_INTERFACE_ONLY (t
) = extern_p
;
13951 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t
)) = extern_p
;
13954 CLASSTYPE_DEBUG_REQUESTED (t
) = 1;
13955 rest_of_type_compilation (t
, 1);
13959 /* Called from do_type_instantiation through binding_table_foreach to
13960 do recursive instantiation for the type bound in ENTRY. */
13962 bt_instantiate_type_proc (binding_entry entry
, void *data
)
13964 tree storage
= *(tree
*) data
;
13966 if (IS_AGGR_TYPE (entry
->type
)
13967 && !uses_template_parms (CLASSTYPE_TI_ARGS (entry
->type
)))
13968 do_type_instantiation (TYPE_MAIN_DECL (entry
->type
), storage
, 0);
13971 /* Called from do_type_instantiation to instantiate a member
13972 (a member function or a static member variable) of an
13973 explicitly instantiated class template. */
13975 instantiate_class_member (tree decl
, int extern_p
)
13977 mark_decl_instantiated (decl
, extern_p
);
13979 instantiate_decl (decl
, /*defer_ok=*/1,
13980 /*expl_inst_class_mem_p=*/true);
13983 /* Perform an explicit instantiation of template class T. STORAGE, if
13984 non-null, is the RID for extern, inline or static. COMPLAIN is
13985 nonzero if this is called from the parser, zero if called recursively,
13986 since the standard is unclear (as detailed below). */
13989 do_type_instantiation (tree t
, tree storage
, tsubst_flags_t complain
)
13994 int previous_instantiation_extern_p
= 0;
13996 if (TREE_CODE (t
) == TYPE_DECL
)
13999 if (! CLASS_TYPE_P (t
) || ! CLASSTYPE_TEMPLATE_INFO (t
))
14001 error ("explicit instantiation of non-template type %qT", t
);
14007 if (!COMPLETE_TYPE_P (t
))
14009 if (complain
& tf_error
)
14010 error ("explicit instantiation of %q#T before definition of template",
14015 if (storage
!= NULL_TREE
)
14017 if (pedantic
&& !in_system_header
)
14018 pedwarn("ISO C++ forbids the use of %qE on explicit instantiations",
14021 if (storage
== ridpointers
[(int) RID_INLINE
])
14023 else if (storage
== ridpointers
[(int) RID_EXTERN
])
14025 else if (storage
== ridpointers
[(int) RID_STATIC
])
14029 error ("storage class %qD applied to template instantiation",
14035 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t
))
14037 /* DR 259 [temp.spec].
14039 Both an explicit instantiation and a declaration of an explicit
14040 specialization shall not appear in a program unless the explicit
14041 instantiation follows a declaration of the explicit specialization.
14043 For a given set of template parameters, if an explicit
14044 instantiation of a template appears after a declaration of an
14045 explicit specialization for that template, the explicit
14046 instantiation has no effect. */
14049 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t
))
14053 No program shall explicitly instantiate any template more
14056 If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
14057 instantiation was `extern'. If EXTERN_P then the second is.
14058 These cases are OK. */
14059 previous_instantiation_extern_p
= CLASSTYPE_INTERFACE_ONLY (t
);
14061 if (!previous_instantiation_extern_p
&& !extern_p
14062 && (complain
& tf_error
))
14063 pedwarn ("duplicate explicit instantiation of %q#T", t
);
14065 /* If we've already instantiated the template, just return now. */
14066 if (!CLASSTYPE_INTERFACE_ONLY (t
))
14070 check_explicit_instantiation_namespace (TYPE_NAME (t
));
14071 mark_class_instantiated (t
, extern_p
);
14079 /* In contrast to implicit instantiation, where only the
14080 declarations, and not the definitions, of members are
14081 instantiated, we have here:
14085 The explicit instantiation of a class template specialization
14086 implies the instantiation of all of its members not
14087 previously explicitly specialized in the translation unit
14088 containing the explicit instantiation.
14090 Of course, we can't instantiate member template classes, since
14091 we don't have any arguments for them. Note that the standard
14092 is unclear on whether the instantiation of the members are
14093 *explicit* instantiations or not. However, the most natural
14094 interpretation is that it should be an explicit instantiation. */
14097 for (tmp
= TYPE_METHODS (t
); tmp
; tmp
= TREE_CHAIN (tmp
))
14098 if (TREE_CODE (tmp
) == FUNCTION_DECL
14099 && DECL_TEMPLATE_INSTANTIATION (tmp
))
14100 instantiate_class_member (tmp
, extern_p
);
14102 for (tmp
= TYPE_FIELDS (t
); tmp
; tmp
= TREE_CHAIN (tmp
))
14103 if (TREE_CODE (tmp
) == VAR_DECL
&& DECL_TEMPLATE_INSTANTIATION (tmp
))
14104 instantiate_class_member (tmp
, extern_p
);
14106 if (CLASSTYPE_NESTED_UTDS (t
))
14107 binding_table_foreach (CLASSTYPE_NESTED_UTDS (t
),
14108 bt_instantiate_type_proc
, &storage
);
14112 /* Given a function DECL, which is a specialization of TMPL, modify
14113 DECL to be a re-instantiation of TMPL with the same template
14114 arguments. TMPL should be the template into which tsubst'ing
14115 should occur for DECL, not the most general template.
14117 One reason for doing this is a scenario like this:
14120 void f(const T&, int i);
14122 void g() { f(3, 7); }
14125 void f(const T& t, const int i) { }
14127 Note that when the template is first instantiated, with
14128 instantiate_template, the resulting DECL will have no name for the
14129 first parameter, and the wrong type for the second. So, when we go
14130 to instantiate the DECL, we regenerate it. */
14133 regenerate_decl_from_template (tree decl
, tree tmpl
)
14135 /* The arguments used to instantiate DECL, from the most general
14140 args
= DECL_TI_ARGS (decl
);
14141 code_pattern
= DECL_TEMPLATE_RESULT (tmpl
);
14143 /* Make sure that we can see identifiers, and compute access
14145 push_access_scope (decl
);
14147 if (TREE_CODE (decl
) == FUNCTION_DECL
)
14155 args_depth
= TMPL_ARGS_DEPTH (args
);
14156 parms_depth
= TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl
));
14157 if (args_depth
> parms_depth
)
14158 args
= get_innermost_template_args (args
, parms_depth
);
14160 specs
= tsubst_exception_specification (TREE_TYPE (code_pattern
),
14161 args
, tf_error
, NULL_TREE
);
14163 TREE_TYPE (decl
) = build_exception_variant (TREE_TYPE (decl
),
14166 /* Merge parameter declarations. */
14167 decl_parm
= skip_artificial_parms_for (decl
,
14168 DECL_ARGUMENTS (decl
));
14170 = skip_artificial_parms_for (code_pattern
,
14171 DECL_ARGUMENTS (code_pattern
));
14172 while (decl_parm
&& !FUNCTION_PARAMETER_PACK_P (pattern_parm
))
14177 if (DECL_NAME (decl_parm
) != DECL_NAME (pattern_parm
))
14178 DECL_NAME (decl_parm
) = DECL_NAME (pattern_parm
);
14179 parm_type
= tsubst (TREE_TYPE (pattern_parm
), args
, tf_error
,
14181 parm_type
= type_decays_to (parm_type
);
14182 if (!same_type_p (TREE_TYPE (decl_parm
), parm_type
))
14183 TREE_TYPE (decl_parm
) = parm_type
;
14184 attributes
= DECL_ATTRIBUTES (pattern_parm
);
14185 if (DECL_ATTRIBUTES (decl_parm
) != attributes
)
14187 DECL_ATTRIBUTES (decl_parm
) = attributes
;
14188 cplus_decl_attributes (&decl_parm
, attributes
, /*flags=*/0);
14190 decl_parm
= TREE_CHAIN (decl_parm
);
14191 pattern_parm
= TREE_CHAIN (pattern_parm
);
14193 /* Merge any parameters that match with the function parameter
14195 if (pattern_parm
&& FUNCTION_PARAMETER_PACK_P (pattern_parm
))
14198 tree expanded_types
;
14199 /* Expand the TYPE_PACK_EXPANSION that provides the types for
14200 the parameters in this function parameter pack. */
14201 expanded_types
= tsubst_pack_expansion (TREE_TYPE (pattern_parm
),
14202 args
, tf_error
, NULL_TREE
);
14203 len
= TREE_VEC_LENGTH (expanded_types
);
14204 for (i
= 0; i
< len
; i
++)
14209 if (DECL_NAME (decl_parm
) != DECL_NAME (pattern_parm
))
14210 /* Rename the parameter to include the index. */
14211 DECL_NAME (decl_parm
) =
14212 make_ith_pack_parameter_name (DECL_NAME (pattern_parm
), i
);
14213 parm_type
= TREE_VEC_ELT (expanded_types
, i
);
14214 parm_type
= type_decays_to (parm_type
);
14215 if (!same_type_p (TREE_TYPE (decl_parm
), parm_type
))
14216 TREE_TYPE (decl_parm
) = parm_type
;
14217 attributes
= DECL_ATTRIBUTES (pattern_parm
);
14218 if (DECL_ATTRIBUTES (decl_parm
) != attributes
)
14220 DECL_ATTRIBUTES (decl_parm
) = attributes
;
14221 cplus_decl_attributes (&decl_parm
, attributes
, /*flags=*/0);
14223 decl_parm
= TREE_CHAIN (decl_parm
);
14226 /* Merge additional specifiers from the CODE_PATTERN. */
14227 if (DECL_DECLARED_INLINE_P (code_pattern
)
14228 && !DECL_DECLARED_INLINE_P (decl
))
14229 DECL_DECLARED_INLINE_P (decl
) = 1;
14230 if (DECL_INLINE (code_pattern
) && !DECL_INLINE (decl
))
14231 DECL_INLINE (decl
) = 1;
14233 else if (TREE_CODE (decl
) == VAR_DECL
)
14234 DECL_INITIAL (decl
) =
14235 tsubst_expr (DECL_INITIAL (code_pattern
), args
,
14236 tf_error
, DECL_TI_TEMPLATE (decl
),
14237 /*integral_constant_expression_p=*/false);
14239 gcc_unreachable ();
14241 pop_access_scope (decl
);
14244 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
14245 substituted to get DECL. */
14248 template_for_substitution (tree decl
)
14250 tree tmpl
= DECL_TI_TEMPLATE (decl
);
14252 /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
14253 for the instantiation. This is not always the most general
14254 template. Consider, for example:
14257 struct S { template <class U> void f();
14258 template <> void f<int>(); };
14260 and an instantiation of S<double>::f<int>. We want TD to be the
14261 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
14262 while (/* An instantiation cannot have a definition, so we need a
14263 more general template. */
14264 DECL_TEMPLATE_INSTANTIATION (tmpl
)
14265 /* We must also deal with friend templates. Given:
14267 template <class T> struct S {
14268 template <class U> friend void f() {};
14271 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
14272 so far as the language is concerned, but that's still
14273 where we get the pattern for the instantiation from. On
14274 other hand, if the definition comes outside the class, say:
14276 template <class T> struct S {
14277 template <class U> friend void f();
14279 template <class U> friend void f() {}
14281 we don't need to look any further. That's what the check for
14282 DECL_INITIAL is for. */
14283 || (TREE_CODE (decl
) == FUNCTION_DECL
14284 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl
)
14285 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl
))))
14287 /* The present template, TD, should not be a definition. If it
14288 were a definition, we should be using it! Note that we
14289 cannot restructure the loop to just keep going until we find
14290 a template with a definition, since that might go too far if
14291 a specialization was declared, but not defined. */
14292 gcc_assert (TREE_CODE (decl
) != VAR_DECL
14293 || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl
)));
14295 /* Fetch the more general template. */
14296 tmpl
= DECL_TI_TEMPLATE (tmpl
);
14302 /* Produce the definition of D, a _DECL generated from a template. If
14303 DEFER_OK is nonzero, then we don't have to actually do the
14304 instantiation now; we just have to do it sometime. Normally it is
14305 an error if this is an explicit instantiation but D is undefined.
14306 EXPL_INST_CLASS_MEM_P is true iff D is a member of an
14307 explicitly instantiated class template. */
14310 instantiate_decl (tree d
, int defer_ok
,
14311 bool expl_inst_class_mem_p
)
14313 tree tmpl
= DECL_TI_TEMPLATE (d
);
14320 bool pattern_defined
;
14322 location_t saved_loc
= input_location
;
14323 int saved_in_system_header
= in_system_header
;
14326 /* This function should only be used to instantiate templates for
14327 functions and static member variables. */
14328 gcc_assert (TREE_CODE (d
) == FUNCTION_DECL
14329 || TREE_CODE (d
) == VAR_DECL
);
14331 /* Variables are never deferred; if instantiation is required, they
14332 are instantiated right away. That allows for better code in the
14333 case that an expression refers to the value of the variable --
14334 if the variable has a constant value the referring expression can
14335 take advantage of that fact. */
14336 if (TREE_CODE (d
) == VAR_DECL
)
14339 /* Don't instantiate cloned functions. Instead, instantiate the
14340 functions they cloned. */
14341 if (TREE_CODE (d
) == FUNCTION_DECL
&& DECL_CLONED_FUNCTION_P (d
))
14342 d
= DECL_CLONED_FUNCTION (d
);
14344 if (DECL_TEMPLATE_INSTANTIATED (d
))
14345 /* D has already been instantiated. It might seem reasonable to
14346 check whether or not D is an explicit instantiation, and, if so,
14347 stop here. But when an explicit instantiation is deferred
14348 until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
14349 is set, even though we still need to do the instantiation. */
14352 /* If we already have a specialization of this declaration, then
14353 there's no reason to instantiate it. Note that
14354 retrieve_specialization gives us both instantiations and
14355 specializations, so we must explicitly check
14356 DECL_TEMPLATE_SPECIALIZATION. */
14357 gen_tmpl
= most_general_template (tmpl
);
14358 gen_args
= DECL_TI_ARGS (d
);
14359 spec
= retrieve_specialization (gen_tmpl
, gen_args
,
14360 /*class_specializations_p=*/false);
14361 if (spec
!= NULL_TREE
&& DECL_TEMPLATE_SPECIALIZATION (spec
))
14364 /* This needs to happen before any tsubsting. */
14365 if (! push_tinst_level (d
))
14368 timevar_push (TV_PARSE
);
14370 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
14371 for the instantiation. */
14372 td
= template_for_substitution (d
);
14373 code_pattern
= DECL_TEMPLATE_RESULT (td
);
14375 /* We should never be trying to instantiate a member of a class
14376 template or partial specialization. */
14377 gcc_assert (d
!= code_pattern
);
14379 if ((DECL_NAMESPACE_SCOPE_P (d
) && !DECL_INITIALIZED_IN_CLASS_P (d
))
14380 || DECL_TEMPLATE_SPECIALIZATION (td
))
14381 /* In the case of a friend template whose definition is provided
14382 outside the class, we may have too many arguments. Drop the
14383 ones we don't need. The same is true for specializations. */
14384 args
= get_innermost_template_args
14385 (gen_args
, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td
)));
14389 if (TREE_CODE (d
) == FUNCTION_DECL
)
14390 pattern_defined
= (DECL_SAVED_TREE (code_pattern
) != NULL_TREE
);
14392 pattern_defined
= ! DECL_IN_AGGR_P (code_pattern
);
14394 /* We may be in the middle of deferred access check. Disable it now. */
14395 push_deferring_access_checks (dk_no_deferred
);
14397 /* Unless an explicit instantiation directive has already determined
14398 the linkage of D, remember that a definition is available for
14400 if (pattern_defined
14401 && !DECL_INTERFACE_KNOWN (d
)
14402 && !DECL_NOT_REALLY_EXTERN (d
))
14403 mark_definable (d
);
14405 input_location
= DECL_SOURCE_LOCATION (d
);
14406 in_system_header
= DECL_IN_SYSTEM_HEADER (d
);
14408 /* If D is a member of an explicitly instantiated class template,
14409 and no definition is available, treat it like an implicit
14411 if (!pattern_defined
&& expl_inst_class_mem_p
14412 && DECL_EXPLICIT_INSTANTIATION (d
))
14414 DECL_NOT_REALLY_EXTERN (d
) = 0;
14415 DECL_INTERFACE_KNOWN (d
) = 0;
14416 SET_DECL_IMPLICIT_INSTANTIATION (d
);
14421 /* Recheck the substitutions to obtain any warning messages
14422 about ignoring cv qualifiers. */
14423 tree gen
= DECL_TEMPLATE_RESULT (gen_tmpl
);
14424 tree type
= TREE_TYPE (gen
);
14426 /* Make sure that we can see identifiers, and compute access
14427 correctly. D is already the target FUNCTION_DECL with the
14429 push_access_scope (d
);
14431 if (TREE_CODE (gen
) == FUNCTION_DECL
)
14433 tsubst (DECL_ARGUMENTS (gen
), gen_args
, tf_warning_or_error
, d
);
14434 tsubst_exception_specification (type
, gen_args
, tf_warning_or_error
,
14436 /* Don't simply tsubst the function type, as that will give
14437 duplicate warnings about poor parameter qualifications.
14438 The function arguments are the same as the decl_arguments
14439 without the top level cv qualifiers. */
14440 type
= TREE_TYPE (type
);
14442 tsubst (type
, gen_args
, tf_warning_or_error
, d
);
14444 pop_access_scope (d
);
14447 /* Check to see whether we know that this template will be
14448 instantiated in some other file, as with "extern template"
14450 external_p
= (DECL_INTERFACE_KNOWN (d
) && DECL_REALLY_EXTERN (d
));
14451 /* In general, we do not instantiate such templates... */
14453 /* ... but we instantiate inline functions so that we can inline
14455 && ! (TREE_CODE (d
) == FUNCTION_DECL
&& DECL_INLINE (d
))
14456 /* ... we instantiate static data members whose values are
14457 needed in integral constant expressions. */
14458 && ! (TREE_CODE (d
) == VAR_DECL
14459 && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (d
)))
14461 /* Defer all other templates, unless we have been explicitly
14462 forbidden from doing so. */
14463 if (/* If there is no definition, we cannot instantiate the
14466 /* If it's OK to postpone instantiation, do so. */
14468 /* If this is a static data member that will be defined
14469 elsewhere, we don't want to instantiate the entire data
14470 member, but we do want to instantiate the initializer so that
14471 we can substitute that elsewhere. */
14472 || (external_p
&& TREE_CODE (d
) == VAR_DECL
))
14474 /* The definition of the static data member is now required so
14475 we must substitute the initializer. */
14476 if (TREE_CODE (d
) == VAR_DECL
14477 && !DECL_INITIAL (d
)
14478 && DECL_INITIAL (code_pattern
))
14483 ns
= decl_namespace_context (d
);
14484 push_nested_namespace (ns
);
14485 push_nested_class (DECL_CONTEXT (d
));
14486 init
= tsubst_expr (DECL_INITIAL (code_pattern
),
14488 tf_warning_or_error
, NULL_TREE
,
14489 /*integral_constant_expression_p=*/false);
14490 cp_finish_decl (d
, init
, /*init_const_expr_p=*/false,
14491 /*asmspec_tree=*/NULL_TREE
,
14492 LOOKUP_ONLYCONVERTING
);
14493 pop_nested_class ();
14494 pop_nested_namespace (ns
);
14497 /* We restore the source position here because it's used by
14498 add_pending_template. */
14499 input_location
= saved_loc
;
14501 if (at_eof
&& !pattern_defined
14502 && DECL_EXPLICIT_INSTANTIATION (d
))
14505 The definition of a non-exported function template, a
14506 non-exported member function template, or a non-exported
14507 member function or static data member of a class template
14508 shall be present in every translation unit in which it is
14509 explicitly instantiated. */
14511 ("explicit instantiation of %qD but no definition available", d
);
14513 /* ??? Historically, we have instantiated inline functions, even
14514 when marked as "extern template". */
14515 if (!(external_p
&& TREE_CODE (d
) == VAR_DECL
))
14516 add_pending_template (d
);
14519 /* Tell the repository that D is available in this translation unit
14520 -- and see if it is supposed to be instantiated here. */
14521 if (TREE_PUBLIC (d
) && !DECL_REALLY_EXTERN (d
) && !repo_emit_p (d
))
14523 /* In a PCH file, despite the fact that the repository hasn't
14524 requested instantiation in the PCH it is still possible that
14525 an instantiation will be required in a file that includes the
14528 add_pending_template (d
);
14529 /* Instantiate inline functions so that the inliner can do its
14530 job, even though we'll not be emitting a copy of this
14532 if (!(TREE_CODE (d
) == FUNCTION_DECL
14533 && flag_inline_trees
14534 && DECL_DECLARED_INLINE_P (d
)))
14538 need_push
= !cfun
|| !global_bindings_p ();
14540 push_to_top_level ();
14542 /* Mark D as instantiated so that recursive calls to
14543 instantiate_decl do not try to instantiate it again. */
14544 DECL_TEMPLATE_INSTANTIATED (d
) = 1;
14546 /* Regenerate the declaration in case the template has been modified
14547 by a subsequent redeclaration. */
14548 regenerate_decl_from_template (d
, td
);
14550 /* We already set the file and line above. Reset them now in case
14551 they changed as a result of calling regenerate_decl_from_template. */
14552 input_location
= DECL_SOURCE_LOCATION (d
);
14554 if (TREE_CODE (d
) == VAR_DECL
)
14558 /* Clear out DECL_RTL; whatever was there before may not be right
14559 since we've reset the type of the declaration. */
14560 SET_DECL_RTL (d
, NULL_RTX
);
14561 DECL_IN_AGGR_P (d
) = 0;
14563 /* The initializer is placed in DECL_INITIAL by
14564 regenerate_decl_from_template. Pull it out so that
14565 finish_decl can process it. */
14566 init
= DECL_INITIAL (d
);
14567 DECL_INITIAL (d
) = NULL_TREE
;
14568 DECL_INITIALIZED_P (d
) = 0;
14570 /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
14571 initializer. That function will defer actual emission until
14572 we have a chance to determine linkage. */
14573 DECL_EXTERNAL (d
) = 0;
14575 /* Enter the scope of D so that access-checking works correctly. */
14576 push_nested_class (DECL_CONTEXT (d
));
14577 finish_decl (d
, init
, NULL_TREE
);
14578 pop_nested_class ();
14580 else if (TREE_CODE (d
) == FUNCTION_DECL
)
14582 htab_t saved_local_specializations
;
14587 /* Save away the current list, in case we are instantiating one
14588 template from within the body of another. */
14589 saved_local_specializations
= local_specializations
;
14591 /* Set up the list of local specializations. */
14592 local_specializations
= htab_create (37,
14593 hash_local_specialization
,
14594 eq_local_specializations
,
14597 /* Set up context. */
14598 start_preparsed_function (d
, NULL_TREE
, SF_PRE_PARSED
);
14600 /* Create substitution entries for the parameters. */
14601 subst_decl
= DECL_TEMPLATE_RESULT (template_for_substitution (d
));
14602 tmpl_parm
= DECL_ARGUMENTS (subst_decl
);
14603 spec_parm
= DECL_ARGUMENTS (d
);
14604 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d
))
14606 register_local_specialization (spec_parm
, tmpl_parm
);
14607 spec_parm
= skip_artificial_parms_for (d
, spec_parm
);
14608 tmpl_parm
= skip_artificial_parms_for (subst_decl
, tmpl_parm
);
14610 while (tmpl_parm
&& !FUNCTION_PARAMETER_PACK_P (tmpl_parm
))
14612 register_local_specialization (spec_parm
, tmpl_parm
);
14613 tmpl_parm
= TREE_CHAIN (tmpl_parm
);
14614 spec_parm
= TREE_CHAIN (spec_parm
);
14616 if (tmpl_parm
&& FUNCTION_PARAMETER_PACK_P (tmpl_parm
))
14618 /* Collect all of the extra "packed" parameters into an
14622 tree argpack
= make_node (NONTYPE_ARGUMENT_PACK
);
14623 tree argtypepack
= make_node (TYPE_ARGUMENT_PACK
);
14627 /* Count how many parameters remain. */
14628 for (t
= spec_parm
; t
; t
= TREE_CHAIN (t
))
14631 /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters. */
14632 parmvec
= make_tree_vec (len
);
14633 parmtypevec
= make_tree_vec (len
);
14634 for(i
= 0; i
< len
; i
++, spec_parm
= TREE_CHAIN (spec_parm
))
14636 TREE_VEC_ELT (parmvec
, i
) = spec_parm
;
14637 TREE_VEC_ELT (parmtypevec
, i
) = TREE_TYPE (spec_parm
);
14640 /* Build the argument packs. */
14641 SET_ARGUMENT_PACK_ARGS (argpack
, parmvec
);
14642 SET_ARGUMENT_PACK_ARGS (argtypepack
, parmtypevec
);
14643 TREE_TYPE (argpack
) = argtypepack
;
14645 /* Register the (value) argument pack as a specialization of
14646 TMPL_PARM, then move on. */
14647 register_local_specialization (argpack
, tmpl_parm
);
14648 tmpl_parm
= TREE_CHAIN (tmpl_parm
);
14650 gcc_assert (!spec_parm
);
14652 /* Substitute into the body of the function. */
14653 tsubst_expr (DECL_SAVED_TREE (code_pattern
), args
,
14654 tf_warning_or_error
, tmpl
,
14655 /*integral_constant_expression_p=*/false);
14657 /* Set the current input_location to the end of the function
14658 so that finish_function knows where we are. */
14659 input_location
= DECL_STRUCT_FUNCTION (code_pattern
)->function_end_locus
;
14661 /* We don't need the local specializations any more. */
14662 htab_delete (local_specializations
);
14663 local_specializations
= saved_local_specializations
;
14665 /* Finish the function. */
14666 d
= finish_function (0);
14667 expand_or_defer_fn (d
);
14670 /* We're not deferring instantiation any more. */
14671 TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d
)) = 0;
14674 pop_from_top_level ();
14677 input_location
= saved_loc
;
14678 in_system_header
= saved_in_system_header
;
14679 pop_deferring_access_checks ();
14680 pop_tinst_level ();
14682 timevar_pop (TV_PARSE
);
14687 /* Run through the list of templates that we wish we could
14688 instantiate, and instantiate any we can. RETRIES is the
14689 number of times we retry pending template instantiation. */
14692 instantiate_pending_templates (int retries
)
14695 location_t saved_loc
= input_location
;
14696 int saved_in_system_header
= in_system_header
;
14698 /* Instantiating templates may trigger vtable generation. This in turn
14699 may require further template instantiations. We place a limit here
14700 to avoid infinite loop. */
14701 if (pending_templates
&& retries
>= max_tinst_depth
)
14703 tree decl
= pending_templates
->tinst
->decl
;
14705 error ("template instantiation depth exceeds maximum of %d"
14706 " instantiating %q+D, possibly from virtual table generation"
14707 " (use -ftemplate-depth-NN to increase the maximum)",
14708 max_tinst_depth
, decl
);
14709 if (TREE_CODE (decl
) == FUNCTION_DECL
)
14710 /* Pretend that we defined it. */
14711 DECL_INITIAL (decl
) = error_mark_node
;
14717 struct pending_template
**t
= &pending_templates
;
14718 struct pending_template
*last
= NULL
;
14722 tree instantiation
= reopen_tinst_level ((*t
)->tinst
);
14723 bool complete
= false;
14725 if (TYPE_P (instantiation
))
14729 if (!COMPLETE_TYPE_P (instantiation
))
14731 instantiate_class_template (instantiation
);
14732 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation
))
14733 for (fn
= TYPE_METHODS (instantiation
);
14735 fn
= TREE_CHAIN (fn
))
14736 if (! DECL_ARTIFICIAL (fn
))
14737 instantiate_decl (fn
,
14739 /*expl_inst_class_mem_p=*/false);
14740 if (COMPLETE_TYPE_P (instantiation
))
14744 complete
= COMPLETE_TYPE_P (instantiation
);
14748 if (!DECL_TEMPLATE_SPECIALIZATION (instantiation
)
14749 && !DECL_TEMPLATE_INSTANTIATED (instantiation
))
14752 = instantiate_decl (instantiation
,
14754 /*expl_inst_class_mem_p=*/false);
14755 if (DECL_TEMPLATE_INSTANTIATED (instantiation
))
14759 complete
= (DECL_TEMPLATE_SPECIALIZATION (instantiation
)
14760 || DECL_TEMPLATE_INSTANTIATED (instantiation
));
14764 /* If INSTANTIATION has been instantiated, then we don't
14765 need to consider it again in the future. */
14773 current_tinst_level
= NULL
;
14775 last_pending_template
= last
;
14777 while (reconsider
);
14779 input_location
= saved_loc
;
14780 in_system_header
= saved_in_system_header
;
14783 /* Substitute ARGVEC into T, which is a list of initializers for
14784 either base class or a non-static data member. The TREE_PURPOSEs
14785 are DECLs, and the TREE_VALUEs are the initializer values. Used by
14786 instantiate_decl. */
14789 tsubst_initializer_list (tree t
, tree argvec
)
14791 tree inits
= NULL_TREE
;
14793 for (; t
; t
= TREE_CHAIN (t
))
14797 tree expanded_bases
= NULL_TREE
;
14798 tree expanded_arguments
= NULL_TREE
;
14801 if (TREE_CODE (TREE_PURPOSE (t
)) == TYPE_PACK_EXPANSION
)
14806 /* Expand the base class expansion type into separate base
14808 expanded_bases
= tsubst_pack_expansion (TREE_PURPOSE (t
), argvec
,
14809 tf_warning_or_error
,
14811 if (expanded_bases
== error_mark_node
)
14814 /* We'll be building separate TREE_LISTs of arguments for
14816 len
= TREE_VEC_LENGTH (expanded_bases
);
14817 expanded_arguments
= make_tree_vec (len
);
14818 for (i
= 0; i
< len
; i
++)
14819 TREE_VEC_ELT (expanded_arguments
, i
) = NULL_TREE
;
14821 /* Build a dummy EXPR_PACK_EXPANSION that will be used to
14822 expand each argument in the TREE_VALUE of t. */
14823 expr
= make_node (EXPR_PACK_EXPANSION
);
14824 PACK_EXPANSION_PARAMETER_PACKS (expr
) =
14825 PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t
));
14827 /* Substitute parameter packs into each argument in the
14829 in_base_initializer
= 1;
14830 for (arg
= TREE_VALUE (t
); arg
; arg
= TREE_CHAIN (arg
))
14832 tree expanded_exprs
;
14834 /* Expand the argument. */
14835 SET_PACK_EXPANSION_PATTERN (expr
, TREE_VALUE (arg
));
14836 expanded_exprs
= tsubst_pack_expansion (expr
, argvec
,
14837 tf_warning_or_error
,
14840 /* Prepend each of the expanded expressions to the
14841 corresponding TREE_LIST in EXPANDED_ARGUMENTS. */
14842 for (i
= 0; i
< len
; i
++)
14844 TREE_VEC_ELT (expanded_arguments
, i
) =
14845 tree_cons (NULL_TREE
, TREE_VEC_ELT (expanded_exprs
, i
),
14846 TREE_VEC_ELT (expanded_arguments
, i
));
14849 in_base_initializer
= 0;
14851 /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
14852 since we built them backwards. */
14853 for (i
= 0; i
< len
; i
++)
14855 TREE_VEC_ELT (expanded_arguments
, i
) =
14856 nreverse (TREE_VEC_ELT (expanded_arguments
, i
));
14860 for (i
= 0; i
< len
; ++i
)
14862 if (expanded_bases
)
14864 decl
= TREE_VEC_ELT (expanded_bases
, i
);
14865 decl
= expand_member_init (decl
);
14866 init
= TREE_VEC_ELT (expanded_arguments
, i
);
14870 decl
= tsubst_copy (TREE_PURPOSE (t
), argvec
,
14871 tf_warning_or_error
, NULL_TREE
);
14873 decl
= expand_member_init (decl
);
14874 if (decl
&& !DECL_P (decl
))
14875 in_base_initializer
= 1;
14877 init
= tsubst_expr (TREE_VALUE (t
), argvec
,
14878 tf_warning_or_error
, NULL_TREE
,
14879 /*integral_constant_expression_p=*/false);
14880 in_base_initializer
= 0;
14885 init
= build_tree_list (decl
, init
);
14886 TREE_CHAIN (init
) = inits
;
14894 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
14897 set_current_access_from_decl (tree decl
)
14899 if (TREE_PRIVATE (decl
))
14900 current_access_specifier
= access_private_node
;
14901 else if (TREE_PROTECTED (decl
))
14902 current_access_specifier
= access_protected_node
;
14904 current_access_specifier
= access_public_node
;
14907 /* Instantiate an enumerated type. TAG is the template type, NEWTAG
14908 is the instantiation (which should have been created with
14909 start_enum) and ARGS are the template arguments to use. */
14912 tsubst_enum (tree tag
, tree newtag
, tree args
)
14916 for (e
= TYPE_VALUES (tag
); e
; e
= TREE_CHAIN (e
))
14921 decl
= TREE_VALUE (e
);
14922 /* Note that in a template enum, the TREE_VALUE is the
14923 CONST_DECL, not the corresponding INTEGER_CST. */
14924 value
= tsubst_expr (DECL_INITIAL (decl
),
14925 args
, tf_warning_or_error
, NULL_TREE
,
14926 /*integral_constant_expression_p=*/true);
14928 /* Give this enumeration constant the correct access. */
14929 set_current_access_from_decl (decl
);
14931 /* Actually build the enumerator itself. */
14932 build_enumerator (DECL_NAME (decl
), value
, newtag
);
14935 finish_enum (newtag
);
14936 DECL_SOURCE_LOCATION (TYPE_NAME (newtag
))
14937 = DECL_SOURCE_LOCATION (TYPE_NAME (tag
));
14940 /* DECL is a FUNCTION_DECL that is a template specialization. Return
14941 its type -- but without substituting the innermost set of template
14942 arguments. So, innermost set of template parameters will appear in
14946 get_mostly_instantiated_function_type (tree decl
)
14954 tmpl
= most_general_template (DECL_TI_TEMPLATE (decl
));
14955 targs
= DECL_TI_ARGS (decl
);
14956 tparms
= DECL_TEMPLATE_PARMS (tmpl
);
14957 parm_depth
= TMPL_PARMS_DEPTH (tparms
);
14959 /* There should be as many levels of arguments as there are levels
14961 gcc_assert (parm_depth
== TMPL_ARGS_DEPTH (targs
));
14963 fn_type
= TREE_TYPE (tmpl
);
14965 if (parm_depth
== 1)
14966 /* No substitution is necessary. */
14970 int i
, save_access_control
;
14973 /* Replace the innermost level of the TARGS with NULL_TREEs to
14974 let tsubst know not to substitute for those parameters. */
14975 partial_args
= make_tree_vec (TREE_VEC_LENGTH (targs
));
14976 for (i
= 1; i
< TMPL_ARGS_DEPTH (targs
); ++i
)
14977 SET_TMPL_ARGS_LEVEL (partial_args
, i
,
14978 TMPL_ARGS_LEVEL (targs
, i
));
14979 SET_TMPL_ARGS_LEVEL (partial_args
,
14980 TMPL_ARGS_DEPTH (targs
),
14981 make_tree_vec (DECL_NTPARMS (tmpl
)));
14983 /* Disable access control as this function is used only during
14985 save_access_control
= flag_access_control
;
14986 flag_access_control
= 0;
14988 ++processing_template_decl
;
14989 /* Now, do the (partial) substitution to figure out the
14990 appropriate function type. */
14991 fn_type
= tsubst (fn_type
, partial_args
, tf_error
, NULL_TREE
);
14992 --processing_template_decl
;
14994 /* Substitute into the template parameters to obtain the real
14995 innermost set of parameters. This step is important if the
14996 innermost set of template parameters contains value
14997 parameters whose types depend on outer template parameters. */
14998 TREE_VEC_LENGTH (partial_args
)--;
14999 tparms
= tsubst_template_parms (tparms
, partial_args
, tf_error
);
15001 flag_access_control
= save_access_control
;
15007 /* Return truthvalue if we're processing a template different from
15008 the last one involved in diagnostics. */
15010 problematic_instantiation_changed (void)
15012 return last_template_error_tick
!= tinst_level_tick
;
15015 /* Remember current template involved in diagnostics. */
15017 record_last_problematic_instantiation (void)
15019 last_template_error_tick
= tinst_level_tick
;
15022 struct tinst_level
*
15023 current_instantiation (void)
15025 return current_tinst_level
;
15028 /* [temp.param] Check that template non-type parm TYPE is of an allowable
15029 type. Return zero for ok, nonzero for disallowed. Issue error and
15030 warning messages under control of COMPLAIN. */
15033 invalid_nontype_parm_type_p (tree type
, tsubst_flags_t complain
)
15035 if (INTEGRAL_TYPE_P (type
))
15037 else if (POINTER_TYPE_P (type
))
15039 else if (TYPE_PTR_TO_MEMBER_P (type
))
15041 else if (TREE_CODE (type
) == TEMPLATE_TYPE_PARM
)
15043 else if (TREE_CODE (type
) == TYPENAME_TYPE
)
15046 if (complain
& tf_error
)
15047 error ("%q#T is not a valid type for a template constant parameter", type
);
15051 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
15052 Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
15055 dependent_type_p_r (tree type
)
15061 A type is dependent if it is:
15063 -- a template parameter. Template template parameters are types
15064 for us (since TYPE_P holds true for them) so we handle
15066 if (TREE_CODE (type
) == TEMPLATE_TYPE_PARM
15067 || TREE_CODE (type
) == TEMPLATE_TEMPLATE_PARM
)
15069 /* -- a qualified-id with a nested-name-specifier which contains a
15070 class-name that names a dependent type or whose unqualified-id
15071 names a dependent type. */
15072 if (TREE_CODE (type
) == TYPENAME_TYPE
)
15074 /* -- a cv-qualified type where the cv-unqualified type is
15076 type
= TYPE_MAIN_VARIANT (type
);
15077 /* -- a compound type constructed from any dependent type. */
15078 if (TYPE_PTR_TO_MEMBER_P (type
))
15079 return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type
))
15080 || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
15082 else if (TREE_CODE (type
) == POINTER_TYPE
15083 || TREE_CODE (type
) == REFERENCE_TYPE
)
15084 return dependent_type_p (TREE_TYPE (type
));
15085 else if (TREE_CODE (type
) == FUNCTION_TYPE
15086 || TREE_CODE (type
) == METHOD_TYPE
)
15090 if (dependent_type_p (TREE_TYPE (type
)))
15092 for (arg_type
= TYPE_ARG_TYPES (type
);
15094 arg_type
= TREE_CHAIN (arg_type
))
15095 if (dependent_type_p (TREE_VALUE (arg_type
)))
15099 /* -- an array type constructed from any dependent type or whose
15100 size is specified by a constant expression that is
15101 value-dependent. */
15102 if (TREE_CODE (type
) == ARRAY_TYPE
)
15104 if (TYPE_DOMAIN (type
)
15105 && ((value_dependent_expression_p
15106 (TYPE_MAX_VALUE (TYPE_DOMAIN (type
))))
15107 || (type_dependent_expression_p
15108 (TYPE_MAX_VALUE (TYPE_DOMAIN (type
))))))
15110 return dependent_type_p (TREE_TYPE (type
));
15113 /* -- a template-id in which either the template name is a template
15115 if (TREE_CODE (type
) == BOUND_TEMPLATE_TEMPLATE_PARM
)
15117 /* ... or any of the template arguments is a dependent type or
15118 an expression that is type-dependent or value-dependent. */
15119 else if (CLASS_TYPE_P (type
) && CLASSTYPE_TEMPLATE_INFO (type
)
15120 && (any_dependent_template_arguments_p
15121 (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type
)))))
15124 /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
15125 argument of the `typeof' expression is not type-dependent, then
15126 it should already been have resolved. */
15127 if (TREE_CODE (type
) == TYPEOF_TYPE
15128 || TREE_CODE (type
) == DECLTYPE_TYPE
)
15131 /* A template argument pack is dependent if any of its packed
15133 if (TREE_CODE (type
) == TYPE_ARGUMENT_PACK
)
15135 tree args
= ARGUMENT_PACK_ARGS (type
);
15136 int i
, len
= TREE_VEC_LENGTH (args
);
15137 for (i
= 0; i
< len
; ++i
)
15138 if (dependent_template_arg_p (TREE_VEC_ELT (args
, i
)))
15142 /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
15143 be template parameters. */
15144 if (TREE_CODE (type
) == TYPE_PACK_EXPANSION
)
15147 /* The standard does not specifically mention types that are local
15148 to template functions or local classes, but they should be
15149 considered dependent too. For example:
15151 template <int I> void f() {
15156 The size of `E' cannot be known until the value of `I' has been
15157 determined. Therefore, `E' must be considered dependent. */
15158 scope
= TYPE_CONTEXT (type
);
15159 if (scope
&& TYPE_P (scope
))
15160 return dependent_type_p (scope
);
15161 else if (scope
&& TREE_CODE (scope
) == FUNCTION_DECL
)
15162 return type_dependent_expression_p (scope
);
15164 /* Other types are non-dependent. */
15168 /* Returns TRUE if TYPE is dependent, in the sense of
15169 [temp.dep.type]. */
15172 dependent_type_p (tree type
)
15174 /* If there are no template parameters in scope, then there can't be
15175 any dependent types. */
15176 if (!processing_template_decl
)
15178 /* If we are not processing a template, then nobody should be
15179 providing us with a dependent type. */
15181 gcc_assert (TREE_CODE (type
) != TEMPLATE_TYPE_PARM
);
15185 /* If the type is NULL, we have not computed a type for the entity
15186 in question; in that case, the type is dependent. */
15190 /* Erroneous types can be considered non-dependent. */
15191 if (type
== error_mark_node
)
15194 /* If we have not already computed the appropriate value for TYPE,
15196 if (!TYPE_DEPENDENT_P_VALID (type
))
15198 TYPE_DEPENDENT_P (type
) = dependent_type_p_r (type
);
15199 TYPE_DEPENDENT_P_VALID (type
) = 1;
15202 return TYPE_DEPENDENT_P (type
);
15205 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION. */
15208 dependent_scope_ref_p (tree expression
, bool criterion (tree
))
15213 gcc_assert (TREE_CODE (expression
) == SCOPE_REF
);
15215 if (!TYPE_P (TREE_OPERAND (expression
, 0)))
15218 scope
= TREE_OPERAND (expression
, 0);
15219 name
= TREE_OPERAND (expression
, 1);
15223 An id-expression is type-dependent if it contains a
15224 nested-name-specifier that contains a class-name that names a
15226 /* The suggested resolution to Core Issue 2 implies that if the
15227 qualifying type is the current class, then we must peek
15230 && currently_open_class (scope
)
15231 && !criterion (name
))
15233 if (dependent_type_p (scope
))
15239 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
15240 [temp.dep.constexpr]. EXPRESSION is already known to be a constant
15244 value_dependent_expression_p (tree expression
)
15246 if (!processing_template_decl
)
15249 /* A name declared with a dependent type. */
15250 if (DECL_P (expression
) && type_dependent_expression_p (expression
))
15253 switch (TREE_CODE (expression
))
15255 case IDENTIFIER_NODE
:
15256 /* A name that has not been looked up -- must be dependent. */
15259 case TEMPLATE_PARM_INDEX
:
15260 /* A non-type template parm. */
15264 /* A non-type template parm. */
15265 if (DECL_TEMPLATE_PARM_P (expression
))
15270 /* A constant with integral or enumeration type and is initialized
15271 with an expression that is value-dependent. */
15272 if (DECL_INITIAL (expression
)
15273 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression
))
15274 && value_dependent_expression_p (DECL_INITIAL (expression
)))
15278 case DYNAMIC_CAST_EXPR
:
15279 case STATIC_CAST_EXPR
:
15280 case CONST_CAST_EXPR
:
15281 case REINTERPRET_CAST_EXPR
:
15283 /* These expressions are value-dependent if the type to which
15284 the cast occurs is dependent or the expression being casted
15285 is value-dependent. */
15287 tree type
= TREE_TYPE (expression
);
15289 if (dependent_type_p (type
))
15292 /* A functional cast has a list of operands. */
15293 expression
= TREE_OPERAND (expression
, 0);
15296 /* If there are no operands, it must be an expression such
15297 as "int()". This should not happen for aggregate types
15298 because it would form non-constant expressions. */
15299 gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type
));
15304 if (TREE_CODE (expression
) == TREE_LIST
)
15305 return any_value_dependent_elements_p (expression
);
15307 return value_dependent_expression_p (expression
);
15312 /* A `sizeof' expression is value-dependent if the operand is
15313 type-dependent or is a pack expansion. */
15314 expression
= TREE_OPERAND (expression
, 0);
15315 if (PACK_EXPANSION_P (expression
))
15317 else if (TYPE_P (expression
))
15318 return dependent_type_p (expression
);
15319 return type_dependent_expression_p (expression
);
15322 return dependent_scope_ref_p (expression
, value_dependent_expression_p
);
15324 case COMPONENT_REF
:
15325 return (value_dependent_expression_p (TREE_OPERAND (expression
, 0))
15326 || value_dependent_expression_p (TREE_OPERAND (expression
, 1)));
15329 /* A CALL_EXPR may appear in a constant expression if it is a
15330 call to a builtin function, e.g., __builtin_constant_p. All
15331 such calls are value-dependent. */
15334 case NONTYPE_ARGUMENT_PACK
:
15335 /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
15336 is value-dependent. */
15338 tree values
= ARGUMENT_PACK_ARGS (expression
);
15339 int i
, len
= TREE_VEC_LENGTH (values
);
15341 for (i
= 0; i
< len
; ++i
)
15342 if (value_dependent_expression_p (TREE_VEC_ELT (values
, i
)))
15350 tree type2
= TRAIT_EXPR_TYPE2 (expression
);
15351 return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression
))
15352 || (type2
? dependent_type_p (type2
) : false));
15356 return ((value_dependent_expression_p (TREE_OPERAND (expression
, 0)))
15357 || (value_dependent_expression_p (TREE_OPERAND (expression
, 2))));
15360 /* A constant expression is value-dependent if any subexpression is
15361 value-dependent. */
15362 switch (TREE_CODE_CLASS (TREE_CODE (expression
)))
15364 case tcc_reference
:
15366 return (value_dependent_expression_p
15367 (TREE_OPERAND (expression
, 0)));
15369 case tcc_comparison
:
15371 return ((value_dependent_expression_p
15372 (TREE_OPERAND (expression
, 0)))
15373 || (value_dependent_expression_p
15374 (TREE_OPERAND (expression
, 1))));
15376 case tcc_expression
:
15380 for (i
= 0; i
< TREE_OPERAND_LENGTH (expression
); ++i
)
15381 /* In some cases, some of the operands may be missing.
15382 (For example, in the case of PREDECREMENT_EXPR, the
15383 amount to increment by may be missing.) That doesn't
15384 make the expression dependent. */
15385 if (TREE_OPERAND (expression
, i
)
15386 && (value_dependent_expression_p
15387 (TREE_OPERAND (expression
, i
))))
15397 /* The expression is not value-dependent. */
15401 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
15402 [temp.dep.expr]. */
15405 type_dependent_expression_p (tree expression
)
15407 if (!processing_template_decl
)
15410 if (expression
== error_mark_node
)
15413 /* An unresolved name is always dependent. */
15414 if (TREE_CODE (expression
) == IDENTIFIER_NODE
15415 || TREE_CODE (expression
) == USING_DECL
)
15418 /* Some expression forms are never type-dependent. */
15419 if (TREE_CODE (expression
) == PSEUDO_DTOR_EXPR
15420 || TREE_CODE (expression
) == SIZEOF_EXPR
15421 || TREE_CODE (expression
) == ALIGNOF_EXPR
15422 || TREE_CODE (expression
) == TRAIT_EXPR
15423 || TREE_CODE (expression
) == TYPEID_EXPR
15424 || TREE_CODE (expression
) == DELETE_EXPR
15425 || TREE_CODE (expression
) == VEC_DELETE_EXPR
15426 || TREE_CODE (expression
) == THROW_EXPR
)
15429 /* The types of these expressions depends only on the type to which
15430 the cast occurs. */
15431 if (TREE_CODE (expression
) == DYNAMIC_CAST_EXPR
15432 || TREE_CODE (expression
) == STATIC_CAST_EXPR
15433 || TREE_CODE (expression
) == CONST_CAST_EXPR
15434 || TREE_CODE (expression
) == REINTERPRET_CAST_EXPR
15435 || TREE_CODE (expression
) == CAST_EXPR
)
15436 return dependent_type_p (TREE_TYPE (expression
));
15438 /* The types of these expressions depends only on the type created
15439 by the expression. */
15440 if (TREE_CODE (expression
) == NEW_EXPR
15441 || TREE_CODE (expression
) == VEC_NEW_EXPR
)
15443 /* For NEW_EXPR tree nodes created inside a template, either
15444 the object type itself or a TREE_LIST may appear as the
15446 tree type
= TREE_OPERAND (expression
, 1);
15447 if (TREE_CODE (type
) == TREE_LIST
)
15448 /* This is an array type. We need to check array dimensions
15450 return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type
)))
15451 || value_dependent_expression_p
15452 (TREE_OPERAND (TREE_VALUE (type
), 1));
15454 return dependent_type_p (type
);
15457 if (TREE_CODE (expression
) == SCOPE_REF
15458 && dependent_scope_ref_p (expression
,
15459 type_dependent_expression_p
))
15462 if (TREE_CODE (expression
) == FUNCTION_DECL
15463 && DECL_LANG_SPECIFIC (expression
)
15464 && DECL_TEMPLATE_INFO (expression
)
15465 && (any_dependent_template_arguments_p
15466 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression
)))))
15469 if (TREE_CODE (expression
) == TEMPLATE_DECL
15470 && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression
))
15473 if (TREE_CODE (expression
) == STMT_EXPR
)
15474 expression
= stmt_expr_value_expr (expression
);
15476 if (TREE_TYPE (expression
) == unknown_type_node
)
15478 if (TREE_CODE (expression
) == ADDR_EXPR
)
15479 return type_dependent_expression_p (TREE_OPERAND (expression
, 0));
15480 if (TREE_CODE (expression
) == COMPONENT_REF
15481 || TREE_CODE (expression
) == OFFSET_REF
)
15483 if (type_dependent_expression_p (TREE_OPERAND (expression
, 0)))
15485 expression
= TREE_OPERAND (expression
, 1);
15486 if (TREE_CODE (expression
) == IDENTIFIER_NODE
)
15489 /* SCOPE_REF with non-null TREE_TYPE is always non-dependent. */
15490 if (TREE_CODE (expression
) == SCOPE_REF
)
15493 if (TREE_CODE (expression
) == BASELINK
)
15494 expression
= BASELINK_FUNCTIONS (expression
);
15496 if (TREE_CODE (expression
) == TEMPLATE_ID_EXPR
)
15498 if (any_dependent_template_arguments_p
15499 (TREE_OPERAND (expression
, 1)))
15501 expression
= TREE_OPERAND (expression
, 0);
15503 gcc_assert (TREE_CODE (expression
) == OVERLOAD
15504 || TREE_CODE (expression
) == FUNCTION_DECL
);
15508 if (type_dependent_expression_p (OVL_CURRENT (expression
)))
15510 expression
= OVL_NEXT (expression
);
15515 gcc_assert (TREE_CODE (expression
) != TYPE_DECL
);
15517 return (dependent_type_p (TREE_TYPE (expression
)));
15520 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
15521 contains a type-dependent expression. */
15524 any_type_dependent_arguments_p (const_tree args
)
15528 tree arg
= TREE_VALUE (args
);
15530 if (type_dependent_expression_p (arg
))
15532 args
= TREE_CHAIN (args
);
15537 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
15538 expressions) contains any value-dependent expressions. */
15541 any_value_dependent_elements_p (const_tree list
)
15543 for (; list
; list
= TREE_CHAIN (list
))
15544 if (value_dependent_expression_p (TREE_VALUE (list
)))
15550 /* Returns TRUE if the ARG (a template argument) is dependent. */
15553 dependent_template_arg_p (tree arg
)
15555 if (!processing_template_decl
)
15558 if (TREE_CODE (arg
) == TEMPLATE_DECL
15559 || TREE_CODE (arg
) == TEMPLATE_TEMPLATE_PARM
)
15560 return dependent_template_p (arg
);
15561 else if (ARGUMENT_PACK_P (arg
))
15563 tree args
= ARGUMENT_PACK_ARGS (arg
);
15564 int i
, len
= TREE_VEC_LENGTH (args
);
15565 for (i
= 0; i
< len
; ++i
)
15567 if (dependent_template_arg_p (TREE_VEC_ELT (args
, i
)))
15573 else if (TYPE_P (arg
))
15574 return dependent_type_p (arg
);
15576 return (type_dependent_expression_p (arg
)
15577 || value_dependent_expression_p (arg
));
15580 /* Returns true if ARGS (a collection of template arguments) contains
15581 any types that require structural equality testing. */
15584 any_template_arguments_need_structural_equality_p (tree args
)
15591 if (args
== error_mark_node
)
15594 for (i
= 0; i
< TMPL_ARGS_DEPTH (args
); ++i
)
15596 tree level
= TMPL_ARGS_LEVEL (args
, i
+ 1);
15597 for (j
= 0; j
< TREE_VEC_LENGTH (level
); ++j
)
15599 tree arg
= TREE_VEC_ELT (level
, j
);
15600 tree packed_args
= NULL_TREE
;
15603 if (ARGUMENT_PACK_P (arg
))
15605 /* Look inside the argument pack. */
15606 packed_args
= ARGUMENT_PACK_ARGS (arg
);
15607 len
= TREE_VEC_LENGTH (packed_args
);
15610 for (k
= 0; k
< len
; ++k
)
15613 arg
= TREE_VEC_ELT (packed_args
, k
);
15615 if (error_operand_p (arg
))
15617 else if (TREE_CODE (arg
) == TEMPLATE_DECL
15618 || TREE_CODE (arg
) == TEMPLATE_TEMPLATE_PARM
)
15620 else if (TYPE_P (arg
) && TYPE_STRUCTURAL_EQUALITY_P (arg
))
15622 else if (!TYPE_P (arg
) && TREE_TYPE (arg
)
15623 && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg
)))
15632 /* Returns true if ARGS (a collection of template arguments) contains
15633 any dependent arguments. */
15636 any_dependent_template_arguments_p (const_tree args
)
15643 if (args
== error_mark_node
)
15646 for (i
= 0; i
< TMPL_ARGS_DEPTH (args
); ++i
)
15648 const_tree level
= TMPL_ARGS_LEVEL (args
, i
+ 1);
15649 for (j
= 0; j
< TREE_VEC_LENGTH (level
); ++j
)
15650 if (dependent_template_arg_p (TREE_VEC_ELT (level
, j
)))
15657 /* Returns TRUE if the template TMPL is dependent. */
15660 dependent_template_p (tree tmpl
)
15662 if (TREE_CODE (tmpl
) == OVERLOAD
)
15666 if (dependent_template_p (OVL_FUNCTION (tmpl
)))
15668 tmpl
= OVL_CHAIN (tmpl
);
15673 /* Template template parameters are dependent. */
15674 if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl
)
15675 || TREE_CODE (tmpl
) == TEMPLATE_TEMPLATE_PARM
)
15677 /* So are names that have not been looked up. */
15678 if (TREE_CODE (tmpl
) == SCOPE_REF
15679 || TREE_CODE (tmpl
) == IDENTIFIER_NODE
)
15681 /* So are member templates of dependent classes. */
15682 if (TYPE_P (CP_DECL_CONTEXT (tmpl
)))
15683 return dependent_type_p (DECL_CONTEXT (tmpl
));
15687 /* Returns TRUE if the specialization TMPL<ARGS> is dependent. */
15690 dependent_template_id_p (tree tmpl
, tree args
)
15692 return (dependent_template_p (tmpl
)
15693 || any_dependent_template_arguments_p (args
));
15696 /* TYPE is a TYPENAME_TYPE. Returns the ordinary TYPE to which the
15697 TYPENAME_TYPE corresponds. Returns the original TYPENAME_TYPE if
15698 no such TYPE can be found. Note that this function peers inside
15699 uninstantiated templates and therefore should be used only in
15700 extremely limited situations. ONLY_CURRENT_P restricts this
15701 peering to the currently open classes hierarchy (which is required
15702 when comparing types). */
15705 resolve_typename_type (tree type
, bool only_current_p
)
15714 gcc_assert (TREE_CODE (type
) == TYPENAME_TYPE
);
15716 scope
= TYPE_CONTEXT (type
);
15717 name
= TYPE_IDENTIFIER (type
);
15719 /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
15720 it first before we can figure out what NAME refers to. */
15721 if (TREE_CODE (scope
) == TYPENAME_TYPE
)
15722 scope
= resolve_typename_type (scope
, only_current_p
);
15723 /* If we don't know what SCOPE refers to, then we cannot resolve the
15725 if (TREE_CODE (scope
) == TYPENAME_TYPE
)
15727 /* If the SCOPE is a template type parameter, we have no way of
15728 resolving the name. */
15729 if (TREE_CODE (scope
) == TEMPLATE_TYPE_PARM
)
15731 /* If the SCOPE is not the current instantiation, there's no reason
15732 to look inside it. */
15733 if (only_current_p
&& !currently_open_class (scope
))
15735 /* If SCOPE is a partial instantiation, it will not have a valid
15736 TYPE_FIELDS list, so use the original template. */
15737 scope
= CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope
);
15738 /* Enter the SCOPE so that name lookup will be resolved as if we
15739 were in the class definition. In particular, SCOPE will no
15740 longer be considered a dependent type. */
15741 pushed_scope
= push_scope (scope
);
15742 /* Look up the declaration. */
15743 decl
= lookup_member (scope
, name
, /*protect=*/0, /*want_type=*/true);
15745 result
= NULL_TREE
;
15747 /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
15748 find a TEMPLATE_DECL. Otherwise, we want to find a TYPE_DECL. */
15751 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type
)) == IDENTIFIER_NODE
15752 && TREE_CODE (decl
) == TYPE_DECL
)
15754 result
= TREE_TYPE (decl
);
15755 if (result
== error_mark_node
)
15756 result
= NULL_TREE
;
15758 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type
)) == TEMPLATE_ID_EXPR
15759 && DECL_CLASS_TEMPLATE_P (decl
))
15763 /* Obtain the template and the arguments. */
15764 tmpl
= TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type
), 0);
15765 args
= TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type
), 1);
15766 /* Instantiate the template. */
15767 result
= lookup_template_class (tmpl
, args
, NULL_TREE
, NULL_TREE
,
15768 /*entering_scope=*/0,
15769 tf_error
| tf_user
);
15770 if (result
== error_mark_node
)
15771 result
= NULL_TREE
;
15774 /* Leave the SCOPE. */
15776 pop_scope (pushed_scope
);
15778 /* If we failed to resolve it, return the original typename. */
15782 /* If lookup found a typename type, resolve that too. */
15783 if (TREE_CODE (result
) == TYPENAME_TYPE
&& !TYPENAME_IS_RESOLVING_P (result
))
15785 /* Ill-formed programs can cause infinite recursion here, so we
15786 must catch that. */
15787 TYPENAME_IS_RESOLVING_P (type
) = 1;
15788 result
= resolve_typename_type (result
, only_current_p
);
15789 TYPENAME_IS_RESOLVING_P (type
) = 0;
15792 /* Qualify the resulting type. */
15793 quals
= cp_type_quals (type
);
15795 result
= cp_build_qualified_type (result
, cp_type_quals (result
) | quals
);
15800 /* EXPR is an expression which is not type-dependent. Return a proxy
15801 for EXPR that can be used to compute the types of larger
15802 expressions containing EXPR. */
15805 build_non_dependent_expr (tree expr
)
15809 /* Preserve null pointer constants so that the type of things like
15810 "p == 0" where "p" is a pointer can be determined. */
15811 if (null_ptr_cst_p (expr
))
15813 /* Preserve OVERLOADs; the functions must be available to resolve
15816 if (TREE_CODE (inner_expr
) == STMT_EXPR
)
15817 inner_expr
= stmt_expr_value_expr (inner_expr
);
15818 if (TREE_CODE (inner_expr
) == ADDR_EXPR
)
15819 inner_expr
= TREE_OPERAND (inner_expr
, 0);
15820 if (TREE_CODE (inner_expr
) == COMPONENT_REF
)
15821 inner_expr
= TREE_OPERAND (inner_expr
, 1);
15822 if (is_overloaded_fn (inner_expr
)
15823 || TREE_CODE (inner_expr
) == OFFSET_REF
)
15825 /* There is no need to return a proxy for a variable. */
15826 if (TREE_CODE (expr
) == VAR_DECL
)
15828 /* Preserve string constants; conversions from string constants to
15829 "char *" are allowed, even though normally a "const char *"
15830 cannot be used to initialize a "char *". */
15831 if (TREE_CODE (expr
) == STRING_CST
)
15833 /* Preserve arithmetic constants, as an optimization -- there is no
15834 reason to create a new node. */
15835 if (TREE_CODE (expr
) == INTEGER_CST
|| TREE_CODE (expr
) == REAL_CST
)
15837 /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
15838 There is at least one place where we want to know that a
15839 particular expression is a throw-expression: when checking a ?:
15840 expression, there are special rules if the second or third
15841 argument is a throw-expression. */
15842 if (TREE_CODE (expr
) == THROW_EXPR
)
15845 if (TREE_CODE (expr
) == COND_EXPR
)
15846 return build3 (COND_EXPR
,
15848 TREE_OPERAND (expr
, 0),
15849 (TREE_OPERAND (expr
, 1)
15850 ? build_non_dependent_expr (TREE_OPERAND (expr
, 1))
15851 : build_non_dependent_expr (TREE_OPERAND (expr
, 0))),
15852 build_non_dependent_expr (TREE_OPERAND (expr
, 2)));
15853 if (TREE_CODE (expr
) == COMPOUND_EXPR
15854 && !COMPOUND_EXPR_OVERLOADED (expr
))
15855 return build2 (COMPOUND_EXPR
,
15857 TREE_OPERAND (expr
, 0),
15858 build_non_dependent_expr (TREE_OPERAND (expr
, 1)));
15860 /* If the type is unknown, it can't really be non-dependent */
15861 gcc_assert (TREE_TYPE (expr
) != unknown_type_node
);
15863 /* Otherwise, build a NON_DEPENDENT_EXPR.
15865 REFERENCE_TYPEs are not stripped for expressions in templates
15866 because doing so would play havoc with mangling. Consider, for
15869 template <typename T> void f<T& g>() { g(); }
15871 In the body of "f", the expression for "g" will have
15872 REFERENCE_TYPE, even though the standard says that it should
15873 not. The reason is that we must preserve the syntactic form of
15874 the expression so that mangling (say) "f<g>" inside the body of
15875 "f" works out correctly. Therefore, the REFERENCE_TYPE is
15877 return build1 (NON_DEPENDENT_EXPR
, non_reference (TREE_TYPE (expr
)), expr
);
15880 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
15881 Return a new TREE_LIST with the various arguments replaced with
15882 equivalent non-dependent expressions. */
15885 build_non_dependent_args (tree args
)
15890 new_args
= NULL_TREE
;
15891 for (a
= args
; a
; a
= TREE_CHAIN (a
))
15892 new_args
= tree_cons (NULL_TREE
,
15893 build_non_dependent_expr (TREE_VALUE (a
)),
15895 return nreverse (new_args
);
15898 #include "gt-cp-pt.h"