c-decl.c: (grokdeclarator): Use OPT_Wignored_qualifiers instead of OPT_Wreturn_type...
[official-gcc.git] / gcc / cp / pt.c
blobf25f2c403049143eeba64fb8da4bc256607183a0
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)
12 any later version.
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". */
28 #include "config.h"
29 #include "system.h"
30 #include "coretypes.h"
31 #include "tm.h"
32 #include "obstack.h"
33 #include "tree.h"
34 #include "pointer-set.h"
35 #include "flags.h"
36 #include "c-common.h"
37 #include "cp-tree.h"
38 #include "cp-objcp-common.h"
39 #include "tree-inline.h"
40 #include "decl.h"
41 #include "output.h"
42 #include "except.h"
43 #include "toplev.h"
44 #include "rtl.h"
45 #include "timevar.h"
46 #include "tree-iterator.h"
47 #include "vecprim.h"
49 /* The type of functions taking a tree, and some additional data, and
50 returning an int. */
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
81 local variables. */
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,
113 bool, bool);
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*,
119 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, tree, tsubst_flags_t);
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,
160 tree, tree);
161 static bool template_template_parm_bindings_ok_p (tree, tree);
162 static int template_args_equal (tree, tree);
163 static void tsubst_default_arguments (tree);
164 static tree for_each_template_parm_r (tree *, int *, void *);
165 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
166 static void copy_default_args_to_explicit_spec (tree);
167 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
168 static int eq_local_specializations (const void *, const void *);
169 static bool dependent_template_arg_p (tree);
170 static bool any_template_arguments_need_structural_equality_p (tree);
171 static bool dependent_type_p_r (tree);
172 static tree tsubst (tree, tree, tsubst_flags_t, tree);
173 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
174 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
175 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
177 /* Make the current scope suitable for access checking when we are
178 processing T. T can be FUNCTION_DECL for instantiated function
179 template, or VAR_DECL for static member variable (need by
180 instantiate_decl). */
182 static void
183 push_access_scope (tree t)
185 gcc_assert (TREE_CODE (t) == FUNCTION_DECL
186 || TREE_CODE (t) == VAR_DECL);
188 if (DECL_FRIEND_CONTEXT (t))
189 push_nested_class (DECL_FRIEND_CONTEXT (t));
190 else if (DECL_CLASS_SCOPE_P (t))
191 push_nested_class (DECL_CONTEXT (t));
192 else
193 push_to_top_level ();
195 if (TREE_CODE (t) == FUNCTION_DECL)
197 saved_access_scope = tree_cons
198 (NULL_TREE, current_function_decl, saved_access_scope);
199 current_function_decl = t;
203 /* Restore the scope set up by push_access_scope. T is the node we
204 are processing. */
206 static void
207 pop_access_scope (tree t)
209 if (TREE_CODE (t) == FUNCTION_DECL)
211 current_function_decl = TREE_VALUE (saved_access_scope);
212 saved_access_scope = TREE_CHAIN (saved_access_scope);
215 if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
216 pop_nested_class ();
217 else
218 pop_from_top_level ();
221 /* Do any processing required when DECL (a member template
222 declaration) is finished. Returns the TEMPLATE_DECL corresponding
223 to DECL, unless it is a specialization, in which case the DECL
224 itself is returned. */
226 tree
227 finish_member_template_decl (tree decl)
229 if (decl == error_mark_node)
230 return error_mark_node;
232 gcc_assert (DECL_P (decl));
234 if (TREE_CODE (decl) == TYPE_DECL)
236 tree type;
238 type = TREE_TYPE (decl);
239 if (IS_AGGR_TYPE (type)
240 && CLASSTYPE_TEMPLATE_INFO (type)
241 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
243 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
244 check_member_template (tmpl);
245 return tmpl;
247 return NULL_TREE;
249 else if (TREE_CODE (decl) == FIELD_DECL)
250 error ("data member %qD cannot be a member template", decl);
251 else if (DECL_TEMPLATE_INFO (decl))
253 if (!DECL_TEMPLATE_SPECIALIZATION (decl))
255 check_member_template (DECL_TI_TEMPLATE (decl));
256 return DECL_TI_TEMPLATE (decl);
258 else
259 return decl;
261 else
262 error ("invalid member template declaration %qD", decl);
264 return error_mark_node;
267 /* Return the template info node corresponding to T, whatever T is. */
269 tree
270 get_template_info (tree t)
272 tree tinfo = NULL_TREE;
274 if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
275 tinfo = DECL_TEMPLATE_INFO (t);
277 if (!tinfo && TREE_CODE (t) == TYPE_DECL)
278 t = TREE_TYPE (t);
280 if (TAGGED_TYPE_P (t))
281 tinfo = TYPE_TEMPLATE_INFO (t);
283 return tinfo;
286 /* Returns the template nesting level of the indicated class TYPE.
288 For example, in:
289 template <class T>
290 struct A
292 template <class U>
293 struct B {};
296 A<T>::B<U> has depth two, while A<T> has depth one.
297 Both A<T>::B<int> and A<int>::B<U> have depth one, if
298 they are instantiations, not specializations.
300 This function is guaranteed to return 0 if passed NULL_TREE so
301 that, for example, `template_class_depth (current_class_type)' is
302 always safe. */
305 template_class_depth (tree type)
307 int depth;
309 for (depth = 0;
310 type && TREE_CODE (type) != NAMESPACE_DECL;
311 type = (TREE_CODE (type) == FUNCTION_DECL)
312 ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
314 tree tinfo = get_template_info (type);
316 if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
317 && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
318 ++depth;
321 return depth;
324 /* Subroutine of maybe_begin_member_template_processing.
325 Returns true if processing DECL needs us to push template parms. */
327 static bool
328 inline_needs_template_parms (tree decl)
330 if (! DECL_TEMPLATE_INFO (decl))
331 return false;
333 return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
334 > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
337 /* Subroutine of maybe_begin_member_template_processing.
338 Push the template parms in PARMS, starting from LEVELS steps into the
339 chain, and ending at the beginning, since template parms are listed
340 innermost first. */
342 static void
343 push_inline_template_parms_recursive (tree parmlist, int levels)
345 tree parms = TREE_VALUE (parmlist);
346 int i;
348 if (levels > 1)
349 push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
351 ++processing_template_decl;
352 current_template_parms
353 = tree_cons (size_int (processing_template_decl),
354 parms, current_template_parms);
355 TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
357 begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
358 NULL);
359 for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
361 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
363 if (parm == error_mark_node)
364 continue;
366 gcc_assert (DECL_P (parm));
368 switch (TREE_CODE (parm))
370 case TYPE_DECL:
371 case TEMPLATE_DECL:
372 pushdecl (parm);
373 break;
375 case PARM_DECL:
377 /* Make a CONST_DECL as is done in process_template_parm.
378 It is ugly that we recreate this here; the original
379 version built in process_template_parm is no longer
380 available. */
381 tree decl = build_decl (CONST_DECL, DECL_NAME (parm),
382 TREE_TYPE (parm));
383 DECL_ARTIFICIAL (decl) = 1;
384 TREE_CONSTANT (decl) = 1;
385 TREE_INVARIANT (decl) = 1;
386 TREE_READONLY (decl) = 1;
387 DECL_INITIAL (decl) = DECL_INITIAL (parm);
388 SET_DECL_TEMPLATE_PARM_P (decl);
389 pushdecl (decl);
391 break;
393 default:
394 gcc_unreachable ();
399 /* Restore the template parameter context for a member template or
400 a friend template defined in a class definition. */
402 void
403 maybe_begin_member_template_processing (tree decl)
405 tree parms;
406 int levels = 0;
408 if (inline_needs_template_parms (decl))
410 parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
411 levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
413 if (DECL_TEMPLATE_SPECIALIZATION (decl))
415 --levels;
416 parms = TREE_CHAIN (parms);
419 push_inline_template_parms_recursive (parms, levels);
422 /* Remember how many levels of template parameters we pushed so that
423 we can pop them later. */
424 VEC_safe_push (int, heap, inline_parm_levels, levels);
427 /* Undo the effects of maybe_begin_member_template_processing. */
429 void
430 maybe_end_member_template_processing (void)
432 int i;
433 int last;
435 if (VEC_length (int, inline_parm_levels) == 0)
436 return;
438 last = VEC_pop (int, inline_parm_levels);
439 for (i = 0; i < last; ++i)
441 --processing_template_decl;
442 current_template_parms = TREE_CHAIN (current_template_parms);
443 poplevel (0, 0, 0);
447 /* Return a new template argument vector which contains all of ARGS,
448 but has as its innermost set of arguments the EXTRA_ARGS. */
450 static tree
451 add_to_template_args (tree args, tree extra_args)
453 tree new_args;
454 int extra_depth;
455 int i;
456 int j;
458 extra_depth = TMPL_ARGS_DEPTH (extra_args);
459 new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
461 for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
462 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
464 for (j = 1; j <= extra_depth; ++j, ++i)
465 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
467 return new_args;
470 /* Like add_to_template_args, but only the outermost ARGS are added to
471 the EXTRA_ARGS. In particular, all but TMPL_ARGS_DEPTH
472 (EXTRA_ARGS) levels are added. This function is used to combine
473 the template arguments from a partial instantiation with the
474 template arguments used to attain the full instantiation from the
475 partial instantiation. */
477 static tree
478 add_outermost_template_args (tree args, tree extra_args)
480 tree new_args;
482 /* If there are more levels of EXTRA_ARGS than there are ARGS,
483 something very fishy is going on. */
484 gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
486 /* If *all* the new arguments will be the EXTRA_ARGS, just return
487 them. */
488 if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
489 return extra_args;
491 /* For the moment, we make ARGS look like it contains fewer levels. */
492 TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
494 new_args = add_to_template_args (args, extra_args);
496 /* Now, we restore ARGS to its full dimensions. */
497 TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
499 return new_args;
502 /* Return the N levels of innermost template arguments from the ARGS. */
504 tree
505 get_innermost_template_args (tree args, int n)
507 tree new_args;
508 int extra_levels;
509 int i;
511 gcc_assert (n >= 0);
513 /* If N is 1, just return the innermost set of template arguments. */
514 if (n == 1)
515 return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
517 /* If we're not removing anything, just return the arguments we were
518 given. */
519 extra_levels = TMPL_ARGS_DEPTH (args) - n;
520 gcc_assert (extra_levels >= 0);
521 if (extra_levels == 0)
522 return args;
524 /* Make a new set of arguments, not containing the outer arguments. */
525 new_args = make_tree_vec (n);
526 for (i = 1; i <= n; ++i)
527 SET_TMPL_ARGS_LEVEL (new_args, i,
528 TMPL_ARGS_LEVEL (args, i + extra_levels));
530 return new_args;
533 /* The inverse of get_innermost_template_args: Return all but the innermost
534 EXTRA_LEVELS levels of template arguments from the ARGS. */
536 static tree
537 strip_innermost_template_args (tree args, int extra_levels)
539 tree new_args;
540 int n = TMPL_ARGS_DEPTH (args) - extra_levels;
541 int i;
543 gcc_assert (n >= 0);
545 /* If N is 1, just return the outermost set of template arguments. */
546 if (n == 1)
547 return TMPL_ARGS_LEVEL (args, 1);
549 /* If we're not removing anything, just return the arguments we were
550 given. */
551 gcc_assert (extra_levels >= 0);
552 if (extra_levels == 0)
553 return args;
555 /* Make a new set of arguments, not containing the inner arguments. */
556 new_args = make_tree_vec (n);
557 for (i = 1; i <= n; ++i)
558 SET_TMPL_ARGS_LEVEL (new_args, i,
559 TMPL_ARGS_LEVEL (args, i));
561 return new_args;
564 /* We've got a template header coming up; push to a new level for storing
565 the parms. */
567 void
568 begin_template_parm_list (void)
570 /* We use a non-tag-transparent scope here, which causes pushtag to
571 put tags in this scope, rather than in the enclosing class or
572 namespace scope. This is the right thing, since we want
573 TEMPLATE_DECLS, and not TYPE_DECLS for template classes. For a
574 global template class, push_template_decl handles putting the
575 TEMPLATE_DECL into top-level scope. For a nested template class,
576 e.g.:
578 template <class T> struct S1 {
579 template <class T> struct S2 {};
582 pushtag contains special code to call pushdecl_with_scope on the
583 TEMPLATE_DECL for S2. */
584 begin_scope (sk_template_parms, NULL);
585 ++processing_template_decl;
586 ++processing_template_parmlist;
587 note_template_header (0);
590 /* This routine is called when a specialization is declared. If it is
591 invalid to declare a specialization here, an error is reported and
592 false is returned, otherwise this routine will return true. */
594 static bool
595 check_specialization_scope (void)
597 tree scope = current_scope ();
599 /* [temp.expl.spec]
601 An explicit specialization shall be declared in the namespace of
602 which the template is a member, or, for member templates, in the
603 namespace of which the enclosing class or enclosing class
604 template is a member. An explicit specialization of a member
605 function, member class or static data member of a class template
606 shall be declared in the namespace of which the class template
607 is a member. */
608 if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
610 error ("explicit specialization in non-namespace scope %qD", scope);
611 return false;
614 /* [temp.expl.spec]
616 In an explicit specialization declaration for a member of a class
617 template or a member template that appears in namespace scope,
618 the member template and some of its enclosing class templates may
619 remain unspecialized, except that the declaration shall not
620 explicitly specialize a class member template if its enclosing
621 class templates are not explicitly specialized as well. */
622 if (current_template_parms)
624 error ("enclosing class templates are not explicitly specialized");
625 return false;
628 return true;
631 /* We've just seen template <>. */
633 bool
634 begin_specialization (void)
636 begin_scope (sk_template_spec, NULL);
637 note_template_header (1);
638 return check_specialization_scope ();
641 /* Called at then end of processing a declaration preceded by
642 template<>. */
644 void
645 end_specialization (void)
647 finish_scope ();
648 reset_specialization ();
651 /* Any template <>'s that we have seen thus far are not referring to a
652 function specialization. */
654 void
655 reset_specialization (void)
657 processing_specialization = 0;
658 template_header_count = 0;
661 /* We've just seen a template header. If SPECIALIZATION is nonzero,
662 it was of the form template <>. */
664 static void
665 note_template_header (int specialization)
667 processing_specialization = specialization;
668 template_header_count++;
671 /* We're beginning an explicit instantiation. */
673 void
674 begin_explicit_instantiation (void)
676 gcc_assert (!processing_explicit_instantiation);
677 processing_explicit_instantiation = true;
681 void
682 end_explicit_instantiation (void)
684 gcc_assert (processing_explicit_instantiation);
685 processing_explicit_instantiation = false;
688 /* An explicit specialization or partial specialization TMPL is being
689 declared. Check that the namespace in which the specialization is
690 occurring is permissible. Returns false iff it is invalid to
691 specialize TMPL in the current namespace. */
693 static bool
694 check_specialization_namespace (tree tmpl)
696 tree tpl_ns = decl_namespace_context (tmpl);
698 /* [tmpl.expl.spec]
700 An explicit specialization shall be declared in the namespace of
701 which the template is a member, or, for member templates, in the
702 namespace of which the enclosing class or enclosing class
703 template is a member. An explicit specialization of a member
704 function, member class or static data member of a class template
705 shall be declared in the namespace of which the class template is
706 a member. */
707 if (is_associated_namespace (current_namespace, tpl_ns))
708 /* Same or super-using namespace. */
709 return true;
710 else
712 pedwarn ("specialization of %qD in different namespace", tmpl);
713 pedwarn (" from definition of %q+#D", tmpl);
714 return false;
718 /* SPEC is an explicit instantiation. Check that it is valid to
719 perform this explicit instantiation in the current namespace. */
721 static void
722 check_explicit_instantiation_namespace (tree spec)
724 tree ns;
726 /* DR 275: An explicit instantiation shall appear in an enclosing
727 namespace of its template. */
728 ns = decl_namespace_context (spec);
729 if (!is_ancestor (current_namespace, ns))
730 pedwarn ("explicit instantiation of %qD in namespace %qD "
731 "(which does not enclose namespace %qD)",
732 spec, current_namespace, ns);
735 /* The TYPE is being declared. If it is a template type, that means it
736 is a partial specialization. Do appropriate error-checking. */
738 tree
739 maybe_process_partial_specialization (tree type)
741 tree context;
743 if (type == error_mark_node)
744 return error_mark_node;
746 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
748 error ("name of class shadows template template parameter %qD",
749 TYPE_NAME (type));
750 return error_mark_node;
753 context = TYPE_CONTEXT (type);
755 if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
757 /* This is for ordinary explicit specialization and partial
758 specialization of a template class such as:
760 template <> class C<int>;
764 template <class T> class C<T*>;
766 Make sure that `C<int>' and `C<T*>' are implicit instantiations. */
768 if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
769 && !COMPLETE_TYPE_P (type))
771 check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
772 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
773 if (processing_template_decl)
774 push_template_decl (TYPE_MAIN_DECL (type));
776 else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
777 error ("specialization of %qT after instantiation", type);
779 else if (CLASS_TYPE_P (type)
780 && !CLASSTYPE_USE_TEMPLATE (type)
781 && CLASSTYPE_TEMPLATE_INFO (type)
782 && context && CLASS_TYPE_P (context)
783 && CLASSTYPE_TEMPLATE_INFO (context))
785 /* This is for an explicit specialization of member class
786 template according to [temp.expl.spec/18]:
788 template <> template <class U> class C<int>::D;
790 The context `C<int>' must be an implicit instantiation.
791 Otherwise this is just a member class template declared
792 earlier like:
794 template <> class C<int> { template <class U> class D; };
795 template <> template <class U> class C<int>::D;
797 In the first case, `C<int>::D' is a specialization of `C<T>::D'
798 while in the second case, `C<int>::D' is a primary template
799 and `C<T>::D' may not exist. */
801 if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
802 && !COMPLETE_TYPE_P (type))
804 tree t;
806 if (current_namespace
807 != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
809 pedwarn ("specializing %q#T in different namespace", type);
810 pedwarn (" from definition of %q+#D",
811 CLASSTYPE_TI_TEMPLATE (type));
814 /* Check for invalid specialization after instantiation:
816 template <> template <> class C<int>::D<int>;
817 template <> template <class U> class C<int>::D; */
819 for (t = DECL_TEMPLATE_INSTANTIATIONS
820 (most_general_template (CLASSTYPE_TI_TEMPLATE (type)));
821 t; t = TREE_CHAIN (t))
822 if (TREE_VALUE (t) != type
823 && TYPE_CONTEXT (TREE_VALUE (t)) == context)
824 error ("specialization %qT after instantiation %qT",
825 type, TREE_VALUE (t));
827 /* Mark TYPE as a specialization. And as a result, we only
828 have one level of template argument for the innermost
829 class template. */
830 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
831 CLASSTYPE_TI_ARGS (type)
832 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
835 else if (processing_specialization)
837 error ("explicit specialization of non-template %qT", type);
838 return error_mark_node;
841 return type;
844 /* Returns nonzero if we can optimize the retrieval of specializations
845 for TMPL, a TEMPLATE_DECL. In particular, for such a template, we
846 do not use DECL_TEMPLATE_SPECIALIZATIONS at all. */
848 static inline bool
849 optimize_specialization_lookup_p (tree tmpl)
851 return (DECL_FUNCTION_TEMPLATE_P (tmpl)
852 && DECL_CLASS_SCOPE_P (tmpl)
853 /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
854 parameter. */
855 && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
856 /* The optimized lookup depends on the fact that the
857 template arguments for the member function template apply
858 purely to the containing class, which is not true if the
859 containing class is an explicit or partial
860 specialization. */
861 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
862 && !DECL_MEMBER_TEMPLATE_P (tmpl)
863 && !DECL_CONV_FN_P (tmpl)
864 /* It is possible to have a template that is not a member
865 template and is not a member of a template class:
867 template <typename T>
868 struct S { friend A::f(); };
870 Here, the friend function is a template, but the context does
871 not have template information. The optimized lookup relies
872 on having ARGS be the template arguments for both the class
873 and the function template. */
874 && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
877 /* Retrieve the specialization (in the sense of [temp.spec] - a
878 specialization is either an instantiation or an explicit
879 specialization) of TMPL for the given template ARGS. If there is
880 no such specialization, return NULL_TREE. The ARGS are a vector of
881 arguments, or a vector of vectors of arguments, in the case of
882 templates with more than one level of parameters.
884 If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
885 then we search for a partial specialization matching ARGS. This
886 parameter is ignored if TMPL is not a class template. */
888 static tree
889 retrieve_specialization (tree tmpl, tree args,
890 bool class_specializations_p)
892 if (args == error_mark_node)
893 return NULL_TREE;
895 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
897 /* There should be as many levels of arguments as there are
898 levels of parameters. */
899 gcc_assert (TMPL_ARGS_DEPTH (args)
900 == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
902 if (optimize_specialization_lookup_p (tmpl))
904 tree class_template;
905 tree class_specialization;
906 VEC(tree,gc) *methods;
907 tree fns;
908 int idx;
910 /* The template arguments actually apply to the containing
911 class. Find the class specialization with those
912 arguments. */
913 class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
914 class_specialization
915 = retrieve_specialization (class_template, args,
916 /*class_specializations_p=*/false);
917 if (!class_specialization)
918 return NULL_TREE;
919 /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
920 for the specialization. */
921 idx = class_method_index_for_fn (class_specialization, tmpl);
922 if (idx == -1)
923 return NULL_TREE;
924 /* Iterate through the methods with the indicated name, looking
925 for the one that has an instance of TMPL. */
926 methods = CLASSTYPE_METHOD_VEC (class_specialization);
927 for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
929 tree fn = OVL_CURRENT (fns);
930 if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl)
931 return fn;
933 return NULL_TREE;
935 else
937 tree *sp;
938 tree *head;
940 /* Class templates store their instantiations on the
941 DECL_TEMPLATE_INSTANTIATIONS list; other templates use the
942 DECL_TEMPLATE_SPECIALIZATIONS list. */
943 if (!class_specializations_p
944 && TREE_CODE (DECL_TEMPLATE_RESULT (tmpl)) == TYPE_DECL
945 && TAGGED_TYPE_P (TREE_TYPE (tmpl)))
946 sp = &DECL_TEMPLATE_INSTANTIATIONS (tmpl);
947 else
948 sp = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
949 head = sp;
950 /* Iterate through the list until we find a matching template. */
951 while (*sp != NULL_TREE)
953 tree spec = *sp;
955 if (comp_template_args (TREE_PURPOSE (spec), args))
957 /* Use the move-to-front heuristic to speed up future
958 searches. */
959 if (spec != *head)
961 *sp = TREE_CHAIN (*sp);
962 TREE_CHAIN (spec) = *head;
963 *head = spec;
965 return TREE_VALUE (spec);
967 sp = &TREE_CHAIN (spec);
971 return NULL_TREE;
974 /* Like retrieve_specialization, but for local declarations. */
976 static tree
977 retrieve_local_specialization (tree tmpl)
979 tree spec = (tree) htab_find_with_hash (local_specializations, tmpl,
980 htab_hash_pointer (tmpl));
981 return spec ? TREE_PURPOSE (spec) : NULL_TREE;
984 /* Returns nonzero iff DECL is a specialization of TMPL. */
987 is_specialization_of (tree decl, tree tmpl)
989 tree t;
991 if (TREE_CODE (decl) == FUNCTION_DECL)
993 for (t = decl;
994 t != NULL_TREE;
995 t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
996 if (t == tmpl)
997 return 1;
999 else
1001 gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1003 for (t = TREE_TYPE (decl);
1004 t != NULL_TREE;
1005 t = CLASSTYPE_USE_TEMPLATE (t)
1006 ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1007 if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1008 return 1;
1011 return 0;
1014 /* Returns nonzero iff DECL is a specialization of friend declaration
1015 FRIEND according to [temp.friend]. */
1017 bool
1018 is_specialization_of_friend (tree decl, tree friend)
1020 bool need_template = true;
1021 int template_depth;
1023 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1024 || TREE_CODE (decl) == TYPE_DECL);
1026 /* For [temp.friend/6] when FRIEND is an ordinary member function
1027 of a template class, we want to check if DECL is a specialization
1028 if this. */
1029 if (TREE_CODE (friend) == FUNCTION_DECL
1030 && DECL_TEMPLATE_INFO (friend)
1031 && !DECL_USE_TEMPLATE (friend))
1033 /* We want a TEMPLATE_DECL for `is_specialization_of'. */
1034 friend = DECL_TI_TEMPLATE (friend);
1035 need_template = false;
1037 else if (TREE_CODE (friend) == TEMPLATE_DECL
1038 && !PRIMARY_TEMPLATE_P (friend))
1039 need_template = false;
1041 /* There is nothing to do if this is not a template friend. */
1042 if (TREE_CODE (friend) != TEMPLATE_DECL)
1043 return false;
1045 if (is_specialization_of (decl, friend))
1046 return true;
1048 /* [temp.friend/6]
1049 A member of a class template may be declared to be a friend of a
1050 non-template class. In this case, the corresponding member of
1051 every specialization of the class template is a friend of the
1052 class granting friendship.
1054 For example, given a template friend declaration
1056 template <class T> friend void A<T>::f();
1058 the member function below is considered a friend
1060 template <> struct A<int> {
1061 void f();
1064 For this type of template friend, TEMPLATE_DEPTH below will be
1065 nonzero. To determine if DECL is a friend of FRIEND, we first
1066 check if the enclosing class is a specialization of another. */
1068 template_depth = template_class_depth (DECL_CONTEXT (friend));
1069 if (template_depth
1070 && DECL_CLASS_SCOPE_P (decl)
1071 && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1072 CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend))))
1074 /* Next, we check the members themselves. In order to handle
1075 a few tricky cases, such as when FRIEND's are
1077 template <class T> friend void A<T>::g(T t);
1078 template <class T> template <T t> friend void A<T>::h();
1080 and DECL's are
1082 void A<int>::g(int);
1083 template <int> void A<int>::h();
1085 we need to figure out ARGS, the template arguments from
1086 the context of DECL. This is required for template substitution
1087 of `T' in the function parameter of `g' and template parameter
1088 of `h' in the above examples. Here ARGS corresponds to `int'. */
1090 tree context = DECL_CONTEXT (decl);
1091 tree args = NULL_TREE;
1092 int current_depth = 0;
1094 while (current_depth < template_depth)
1096 if (CLASSTYPE_TEMPLATE_INFO (context))
1098 if (current_depth == 0)
1099 args = TYPE_TI_ARGS (context);
1100 else
1101 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1102 current_depth++;
1104 context = TYPE_CONTEXT (context);
1107 if (TREE_CODE (decl) == FUNCTION_DECL)
1109 bool is_template;
1110 tree friend_type;
1111 tree decl_type;
1112 tree friend_args_type;
1113 tree decl_args_type;
1115 /* Make sure that both DECL and FRIEND are templates or
1116 non-templates. */
1117 is_template = DECL_TEMPLATE_INFO (decl)
1118 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1119 if (need_template ^ is_template)
1120 return false;
1121 else if (is_template)
1123 /* If both are templates, check template parameter list. */
1124 tree friend_parms
1125 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1126 args, tf_none);
1127 if (!comp_template_parms
1128 (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1129 friend_parms))
1130 return false;
1132 decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1134 else
1135 decl_type = TREE_TYPE (decl);
1137 friend_type = tsubst_function_type (TREE_TYPE (friend), args,
1138 tf_none, NULL_TREE);
1139 if (friend_type == error_mark_node)
1140 return false;
1142 /* Check if return types match. */
1143 if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1144 return false;
1146 /* Check if function parameter types match, ignoring the
1147 `this' parameter. */
1148 friend_args_type = TYPE_ARG_TYPES (friend_type);
1149 decl_args_type = TYPE_ARG_TYPES (decl_type);
1150 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend))
1151 friend_args_type = TREE_CHAIN (friend_args_type);
1152 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1153 decl_args_type = TREE_CHAIN (decl_args_type);
1155 return compparms (decl_args_type, friend_args_type);
1157 else
1159 /* DECL is a TYPE_DECL */
1160 bool is_template;
1161 tree decl_type = TREE_TYPE (decl);
1163 /* Make sure that both DECL and FRIEND are templates or
1164 non-templates. */
1165 is_template
1166 = CLASSTYPE_TEMPLATE_INFO (decl_type)
1167 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1169 if (need_template ^ is_template)
1170 return false;
1171 else if (is_template)
1173 tree friend_parms;
1174 /* If both are templates, check the name of the two
1175 TEMPLATE_DECL's first because is_friend didn't. */
1176 if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1177 != DECL_NAME (friend))
1178 return false;
1180 /* Now check template parameter list. */
1181 friend_parms
1182 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1183 args, tf_none);
1184 return comp_template_parms
1185 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1186 friend_parms);
1188 else
1189 return (DECL_NAME (decl)
1190 == DECL_NAME (friend));
1193 return false;
1196 /* Register the specialization SPEC as a specialization of TMPL with
1197 the indicated ARGS. IS_FRIEND indicates whether the specialization
1198 is actually just a friend declaration. Returns SPEC, or an
1199 equivalent prior declaration, if available. */
1201 static tree
1202 register_specialization (tree spec, tree tmpl, tree args, bool is_friend)
1204 tree fn;
1206 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
1208 if (TREE_CODE (spec) == FUNCTION_DECL
1209 && uses_template_parms (DECL_TI_ARGS (spec)))
1210 /* This is the FUNCTION_DECL for a partial instantiation. Don't
1211 register it; we want the corresponding TEMPLATE_DECL instead.
1212 We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1213 the more obvious `uses_template_parms (spec)' to avoid problems
1214 with default function arguments. In particular, given
1215 something like this:
1217 template <class T> void f(T t1, T t = T())
1219 the default argument expression is not substituted for in an
1220 instantiation unless and until it is actually needed. */
1221 return spec;
1223 fn = retrieve_specialization (tmpl, args,
1224 /*class_specializations_p=*/false);
1225 /* We can sometimes try to re-register a specialization that we've
1226 already got. In particular, regenerate_decl_from_template calls
1227 duplicate_decls which will update the specialization list. But,
1228 we'll still get called again here anyhow. It's more convenient
1229 to simply allow this than to try to prevent it. */
1230 if (fn == spec)
1231 return spec;
1232 else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1234 if (DECL_TEMPLATE_INSTANTIATION (fn))
1236 if (TREE_USED (fn)
1237 || DECL_EXPLICIT_INSTANTIATION (fn))
1239 error ("specialization of %qD after instantiation",
1240 fn);
1241 return error_mark_node;
1243 else
1245 tree clone;
1246 /* This situation should occur only if the first
1247 specialization is an implicit instantiation, the
1248 second is an explicit specialization, and the
1249 implicit instantiation has not yet been used. That
1250 situation can occur if we have implicitly
1251 instantiated a member function and then specialized
1252 it later.
1254 We can also wind up here if a friend declaration that
1255 looked like an instantiation turns out to be a
1256 specialization:
1258 template <class T> void foo(T);
1259 class S { friend void foo<>(int) };
1260 template <> void foo(int);
1262 We transform the existing DECL in place so that any
1263 pointers to it become pointers to the updated
1264 declaration.
1266 If there was a definition for the template, but not
1267 for the specialization, we want this to look as if
1268 there were no definition, and vice versa. */
1269 DECL_INITIAL (fn) = NULL_TREE;
1270 duplicate_decls (spec, fn, is_friend);
1271 /* The call to duplicate_decls will have applied
1272 [temp.expl.spec]:
1274 An explicit specialization of a function template
1275 is inline only if it is explicitly declared to be,
1276 and independently of whether its function template
1279 to the primary function; now copy the inline bits to
1280 the various clones. */
1281 FOR_EACH_CLONE (clone, fn)
1283 DECL_DECLARED_INLINE_P (clone)
1284 = DECL_DECLARED_INLINE_P (fn);
1285 DECL_INLINE (clone)
1286 = DECL_INLINE (fn);
1288 check_specialization_namespace (fn);
1290 return fn;
1293 else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1295 if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1296 /* Dup decl failed, but this is a new definition. Set the
1297 line number so any errors match this new
1298 definition. */
1299 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1301 return fn;
1305 /* A specialization must be declared in the same namespace as the
1306 template it is specializing. */
1307 if (DECL_TEMPLATE_SPECIALIZATION (spec)
1308 && !check_specialization_namespace (tmpl))
1309 DECL_CONTEXT (spec) = FROB_CONTEXT (decl_namespace_context (tmpl));
1311 if (!optimize_specialization_lookup_p (tmpl))
1312 DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
1313 = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
1315 return spec;
1318 /* Unregister the specialization SPEC as a specialization of TMPL.
1319 Replace it with NEW_SPEC, if NEW_SPEC is non-NULL. Returns true
1320 if the SPEC was listed as a specialization of TMPL. */
1322 bool
1323 reregister_specialization (tree spec, tree tmpl, tree new_spec)
1325 tree* s;
1327 for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
1328 *s != NULL_TREE;
1329 s = &TREE_CHAIN (*s))
1330 if (TREE_VALUE (*s) == spec)
1332 if (!new_spec)
1333 *s = TREE_CHAIN (*s);
1334 else
1335 TREE_VALUE (*s) = new_spec;
1336 return 1;
1339 return 0;
1342 /* Compare an entry in the local specializations hash table P1 (which
1343 is really a pointer to a TREE_LIST) with P2 (which is really a
1344 DECL). */
1346 static int
1347 eq_local_specializations (const void *p1, const void *p2)
1349 return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1352 /* Hash P1, an entry in the local specializations table. */
1354 static hashval_t
1355 hash_local_specialization (const void* p1)
1357 return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1360 /* Like register_specialization, but for local declarations. We are
1361 registering SPEC, an instantiation of TMPL. */
1363 static void
1364 register_local_specialization (tree spec, tree tmpl)
1366 void **slot;
1368 slot = htab_find_slot_with_hash (local_specializations, tmpl,
1369 htab_hash_pointer (tmpl), INSERT);
1370 *slot = build_tree_list (spec, tmpl);
1373 /* TYPE is a class type. Returns true if TYPE is an explicitly
1374 specialized class. */
1376 bool
1377 explicit_class_specialization_p (tree type)
1379 if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1380 return false;
1381 return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1384 /* Print the list of candidate FNS in an error message. */
1386 void
1387 print_candidates (tree fns)
1389 tree fn;
1391 const char *str = "candidates are:";
1393 for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
1395 tree f;
1397 for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
1398 error ("%s %+#D", str, OVL_CURRENT (f));
1399 str = " ";
1403 /* Returns the template (one of the functions given by TEMPLATE_ID)
1404 which can be specialized to match the indicated DECL with the
1405 explicit template args given in TEMPLATE_ID. The DECL may be
1406 NULL_TREE if none is available. In that case, the functions in
1407 TEMPLATE_ID are non-members.
1409 If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1410 specialization of a member template.
1412 The TEMPLATE_COUNT is the number of references to qualifying
1413 template classes that appeared in the name of the function. See
1414 check_explicit_specialization for a more accurate description.
1416 TSK indicates what kind of template declaration (if any) is being
1417 declared. TSK_TEMPLATE indicates that the declaration given by
1418 DECL, though a FUNCTION_DECL, has template parameters, and is
1419 therefore a template function.
1421 The template args (those explicitly specified and those deduced)
1422 are output in a newly created vector *TARGS_OUT.
1424 If it is impossible to determine the result, an error message is
1425 issued. The error_mark_node is returned to indicate failure. */
1427 static tree
1428 determine_specialization (tree template_id,
1429 tree decl,
1430 tree* targs_out,
1431 int need_member_template,
1432 int template_count,
1433 tmpl_spec_kind tsk)
1435 tree fns;
1436 tree targs;
1437 tree explicit_targs;
1438 tree candidates = NULL_TREE;
1439 /* A TREE_LIST of templates of which DECL may be a specialization.
1440 The TREE_VALUE of each node is a TEMPLATE_DECL. The
1441 corresponding TREE_PURPOSE is the set of template arguments that,
1442 when used to instantiate the template, would produce a function
1443 with the signature of DECL. */
1444 tree templates = NULL_TREE;
1445 int header_count;
1446 struct cp_binding_level *b;
1448 *targs_out = NULL_TREE;
1450 if (template_id == error_mark_node || decl == error_mark_node)
1451 return error_mark_node;
1453 fns = TREE_OPERAND (template_id, 0);
1454 explicit_targs = TREE_OPERAND (template_id, 1);
1456 if (fns == error_mark_node)
1457 return error_mark_node;
1459 /* Check for baselinks. */
1460 if (BASELINK_P (fns))
1461 fns = BASELINK_FUNCTIONS (fns);
1463 if (!is_overloaded_fn (fns))
1465 error ("%qD is not a function template", fns);
1466 return error_mark_node;
1469 /* Count the number of template headers specified for this
1470 specialization. */
1471 header_count = 0;
1472 for (b = current_binding_level;
1473 b->kind == sk_template_parms;
1474 b = b->level_chain)
1475 ++header_count;
1477 for (; fns; fns = OVL_NEXT (fns))
1479 tree fn = OVL_CURRENT (fns);
1481 if (TREE_CODE (fn) == TEMPLATE_DECL)
1483 tree decl_arg_types;
1484 tree fn_arg_types;
1486 /* In case of explicit specialization, we need to check if
1487 the number of template headers appearing in the specialization
1488 is correct. This is usually done in check_explicit_specialization,
1489 but the check done there cannot be exhaustive when specializing
1490 member functions. Consider the following code:
1492 template <> void A<int>::f(int);
1493 template <> template <> void A<int>::f(int);
1495 Assuming that A<int> is not itself an explicit specialization
1496 already, the first line specializes "f" which is a non-template
1497 member function, whilst the second line specializes "f" which
1498 is a template member function. So both lines are syntactically
1499 correct, and check_explicit_specialization does not reject
1500 them.
1502 Here, we can do better, as we are matching the specialization
1503 against the declarations. We count the number of template
1504 headers, and we check if they match TEMPLATE_COUNT + 1
1505 (TEMPLATE_COUNT is the number of qualifying template classes,
1506 plus there must be another header for the member template
1507 itself).
1509 Notice that if header_count is zero, this is not a
1510 specialization but rather a template instantiation, so there
1511 is no check we can perform here. */
1512 if (header_count && header_count != template_count + 1)
1513 continue;
1515 /* Check that the number of template arguments at the
1516 innermost level for DECL is the same as for FN. */
1517 if (current_binding_level->kind == sk_template_parms
1518 && !current_binding_level->explicit_spec_p
1519 && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1520 != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1521 (current_template_parms))))
1522 continue;
1524 /* DECL might be a specialization of FN. */
1525 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1526 fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1528 /* For a non-static member function, we need to make sure
1529 that the const qualification is the same. Since
1530 get_bindings does not try to merge the "this" parameter,
1531 we must do the comparison explicitly. */
1532 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1533 && !same_type_p (TREE_VALUE (fn_arg_types),
1534 TREE_VALUE (decl_arg_types)))
1535 continue;
1537 /* Skip the "this" parameter and, for constructors of
1538 classes with virtual bases, the VTT parameter. A
1539 full specialization of a constructor will have a VTT
1540 parameter, but a template never will. */
1541 decl_arg_types
1542 = skip_artificial_parms_for (decl, decl_arg_types);
1543 fn_arg_types
1544 = skip_artificial_parms_for (fn, fn_arg_types);
1546 /* Check that the number of function parameters matches.
1547 For example,
1548 template <class T> void f(int i = 0);
1549 template <> void f<int>();
1550 The specialization f<int> is invalid but is not caught
1551 by get_bindings below. */
1552 if (list_length (fn_arg_types) != list_length (decl_arg_types))
1553 continue;
1555 /* Function templates cannot be specializations; there are
1556 no partial specializations of functions. Therefore, if
1557 the type of DECL does not match FN, there is no
1558 match. */
1559 if (tsk == tsk_template)
1561 if (compparms (fn_arg_types, decl_arg_types))
1562 candidates = tree_cons (NULL_TREE, fn, candidates);
1563 continue;
1566 /* See whether this function might be a specialization of this
1567 template. */
1568 targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1570 if (!targs)
1571 /* We cannot deduce template arguments that when used to
1572 specialize TMPL will produce DECL. */
1573 continue;
1575 /* Save this template, and the arguments deduced. */
1576 templates = tree_cons (targs, fn, templates);
1578 else if (need_member_template)
1579 /* FN is an ordinary member function, and we need a
1580 specialization of a member template. */
1582 else if (TREE_CODE (fn) != FUNCTION_DECL)
1583 /* We can get IDENTIFIER_NODEs here in certain erroneous
1584 cases. */
1586 else if (!DECL_FUNCTION_MEMBER_P (fn))
1587 /* This is just an ordinary non-member function. Nothing can
1588 be a specialization of that. */
1590 else if (DECL_ARTIFICIAL (fn))
1591 /* Cannot specialize functions that are created implicitly. */
1593 else
1595 tree decl_arg_types;
1597 /* This is an ordinary member function. However, since
1598 we're here, we can assume it's enclosing class is a
1599 template class. For example,
1601 template <typename T> struct S { void f(); };
1602 template <> void S<int>::f() {}
1604 Here, S<int>::f is a non-template, but S<int> is a
1605 template class. If FN has the same type as DECL, we
1606 might be in business. */
1608 if (!DECL_TEMPLATE_INFO (fn))
1609 /* Its enclosing class is an explicit specialization
1610 of a template class. This is not a candidate. */
1611 continue;
1613 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1614 TREE_TYPE (TREE_TYPE (fn))))
1615 /* The return types differ. */
1616 continue;
1618 /* Adjust the type of DECL in case FN is a static member. */
1619 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1620 if (DECL_STATIC_FUNCTION_P (fn)
1621 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1622 decl_arg_types = TREE_CHAIN (decl_arg_types);
1624 if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1625 decl_arg_types))
1626 /* They match! */
1627 candidates = tree_cons (NULL_TREE, fn, candidates);
1631 if (templates && TREE_CHAIN (templates))
1633 /* We have:
1635 [temp.expl.spec]
1637 It is possible for a specialization with a given function
1638 signature to be instantiated from more than one function
1639 template. In such cases, explicit specification of the
1640 template arguments must be used to uniquely identify the
1641 function template specialization being specialized.
1643 Note that here, there's no suggestion that we're supposed to
1644 determine which of the candidate templates is most
1645 specialized. However, we, also have:
1647 [temp.func.order]
1649 Partial ordering of overloaded function template
1650 declarations is used in the following contexts to select
1651 the function template to which a function template
1652 specialization refers:
1654 -- when an explicit specialization refers to a function
1655 template.
1657 So, we do use the partial ordering rules, at least for now.
1658 This extension can only serve to make invalid programs valid,
1659 so it's safe. And, there is strong anecdotal evidence that
1660 the committee intended the partial ordering rules to apply;
1661 the EDG front end has that behavior, and John Spicer claims
1662 that the committee simply forgot to delete the wording in
1663 [temp.expl.spec]. */
1664 tree tmpl = most_specialized_instantiation (templates);
1665 if (tmpl != error_mark_node)
1667 templates = tmpl;
1668 TREE_CHAIN (templates) = NULL_TREE;
1672 if (templates == NULL_TREE && candidates == NULL_TREE)
1674 error ("template-id %qD for %q+D does not match any template "
1675 "declaration", template_id, decl);
1676 return error_mark_node;
1678 else if ((templates && TREE_CHAIN (templates))
1679 || (candidates && TREE_CHAIN (candidates))
1680 || (templates && candidates))
1682 error ("ambiguous template specialization %qD for %q+D",
1683 template_id, decl);
1684 chainon (candidates, templates);
1685 print_candidates (candidates);
1686 return error_mark_node;
1689 /* We have one, and exactly one, match. */
1690 if (candidates)
1692 tree fn = TREE_VALUE (candidates);
1693 /* DECL is a re-declaration of a template function. */
1694 if (TREE_CODE (fn) == TEMPLATE_DECL)
1695 return fn;
1696 /* It was a specialization of an ordinary member function in a
1697 template class. */
1698 *targs_out = copy_node (DECL_TI_ARGS (fn));
1699 return DECL_TI_TEMPLATE (fn);
1702 /* It was a specialization of a template. */
1703 targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
1704 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1706 *targs_out = copy_node (targs);
1707 SET_TMPL_ARGS_LEVEL (*targs_out,
1708 TMPL_ARGS_DEPTH (*targs_out),
1709 TREE_PURPOSE (templates));
1711 else
1712 *targs_out = TREE_PURPOSE (templates);
1713 return TREE_VALUE (templates);
1716 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1717 but with the default argument values filled in from those in the
1718 TMPL_TYPES. */
1720 static tree
1721 copy_default_args_to_explicit_spec_1 (tree spec_types,
1722 tree tmpl_types)
1724 tree new_spec_types;
1726 if (!spec_types)
1727 return NULL_TREE;
1729 if (spec_types == void_list_node)
1730 return void_list_node;
1732 /* Substitute into the rest of the list. */
1733 new_spec_types =
1734 copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
1735 TREE_CHAIN (tmpl_types));
1737 /* Add the default argument for this parameter. */
1738 return hash_tree_cons (TREE_PURPOSE (tmpl_types),
1739 TREE_VALUE (spec_types),
1740 new_spec_types);
1743 /* DECL is an explicit specialization. Replicate default arguments
1744 from the template it specializes. (That way, code like:
1746 template <class T> void f(T = 3);
1747 template <> void f(double);
1748 void g () { f (); }
1750 works, as required.) An alternative approach would be to look up
1751 the correct default arguments at the call-site, but this approach
1752 is consistent with how implicit instantiations are handled. */
1754 static void
1755 copy_default_args_to_explicit_spec (tree decl)
1757 tree tmpl;
1758 tree spec_types;
1759 tree tmpl_types;
1760 tree new_spec_types;
1761 tree old_type;
1762 tree new_type;
1763 tree t;
1764 tree object_type = NULL_TREE;
1765 tree in_charge = NULL_TREE;
1766 tree vtt = NULL_TREE;
1768 /* See if there's anything we need to do. */
1769 tmpl = DECL_TI_TEMPLATE (decl);
1770 tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
1771 for (t = tmpl_types; t; t = TREE_CHAIN (t))
1772 if (TREE_PURPOSE (t))
1773 break;
1774 if (!t)
1775 return;
1777 old_type = TREE_TYPE (decl);
1778 spec_types = TYPE_ARG_TYPES (old_type);
1780 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1782 /* Remove the this pointer, but remember the object's type for
1783 CV quals. */
1784 object_type = TREE_TYPE (TREE_VALUE (spec_types));
1785 spec_types = TREE_CHAIN (spec_types);
1786 tmpl_types = TREE_CHAIN (tmpl_types);
1788 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
1790 /* DECL may contain more parameters than TMPL due to the extra
1791 in-charge parameter in constructors and destructors. */
1792 in_charge = spec_types;
1793 spec_types = TREE_CHAIN (spec_types);
1795 if (DECL_HAS_VTT_PARM_P (decl))
1797 vtt = spec_types;
1798 spec_types = TREE_CHAIN (spec_types);
1802 /* Compute the merged default arguments. */
1803 new_spec_types =
1804 copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
1806 /* Compute the new FUNCTION_TYPE. */
1807 if (object_type)
1809 if (vtt)
1810 new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
1811 TREE_VALUE (vtt),
1812 new_spec_types);
1814 if (in_charge)
1815 /* Put the in-charge parameter back. */
1816 new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
1817 TREE_VALUE (in_charge),
1818 new_spec_types);
1820 new_type = build_method_type_directly (object_type,
1821 TREE_TYPE (old_type),
1822 new_spec_types);
1824 else
1825 new_type = build_function_type (TREE_TYPE (old_type),
1826 new_spec_types);
1827 new_type = cp_build_type_attribute_variant (new_type,
1828 TYPE_ATTRIBUTES (old_type));
1829 new_type = build_exception_variant (new_type,
1830 TYPE_RAISES_EXCEPTIONS (old_type));
1831 TREE_TYPE (decl) = new_type;
1834 /* Check to see if the function just declared, as indicated in
1835 DECLARATOR, and in DECL, is a specialization of a function
1836 template. We may also discover that the declaration is an explicit
1837 instantiation at this point.
1839 Returns DECL, or an equivalent declaration that should be used
1840 instead if all goes well. Issues an error message if something is
1841 amiss. Returns error_mark_node if the error is not easily
1842 recoverable.
1844 FLAGS is a bitmask consisting of the following flags:
1846 2: The function has a definition.
1847 4: The function is a friend.
1849 The TEMPLATE_COUNT is the number of references to qualifying
1850 template classes that appeared in the name of the function. For
1851 example, in
1853 template <class T> struct S { void f(); };
1854 void S<int>::f();
1856 the TEMPLATE_COUNT would be 1. However, explicitly specialized
1857 classes are not counted in the TEMPLATE_COUNT, so that in
1859 template <class T> struct S {};
1860 template <> struct S<int> { void f(); }
1861 template <> void S<int>::f();
1863 the TEMPLATE_COUNT would be 0. (Note that this declaration is
1864 invalid; there should be no template <>.)
1866 If the function is a specialization, it is marked as such via
1867 DECL_TEMPLATE_SPECIALIZATION. Furthermore, its DECL_TEMPLATE_INFO
1868 is set up correctly, and it is added to the list of specializations
1869 for that template. */
1871 tree
1872 check_explicit_specialization (tree declarator,
1873 tree decl,
1874 int template_count,
1875 int flags)
1877 int have_def = flags & 2;
1878 int is_friend = flags & 4;
1879 int specialization = 0;
1880 int explicit_instantiation = 0;
1881 int member_specialization = 0;
1882 tree ctype = DECL_CLASS_CONTEXT (decl);
1883 tree dname = DECL_NAME (decl);
1884 tmpl_spec_kind tsk;
1886 if (is_friend)
1888 if (!processing_specialization)
1889 tsk = tsk_none;
1890 else
1891 tsk = tsk_excessive_parms;
1893 else
1894 tsk = current_tmpl_spec_kind (template_count);
1896 switch (tsk)
1898 case tsk_none:
1899 if (processing_specialization)
1901 specialization = 1;
1902 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1904 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1906 if (is_friend)
1907 /* This could be something like:
1909 template <class T> void f(T);
1910 class S { friend void f<>(int); } */
1911 specialization = 1;
1912 else
1914 /* This case handles bogus declarations like template <>
1915 template <class T> void f<int>(); */
1917 error ("template-id %qD in declaration of primary template",
1918 declarator);
1919 return decl;
1922 break;
1924 case tsk_invalid_member_spec:
1925 /* The error has already been reported in
1926 check_specialization_scope. */
1927 return error_mark_node;
1929 case tsk_invalid_expl_inst:
1930 error ("template parameter list used in explicit instantiation");
1932 /* Fall through. */
1934 case tsk_expl_inst:
1935 if (have_def)
1936 error ("definition provided for explicit instantiation");
1938 explicit_instantiation = 1;
1939 break;
1941 case tsk_excessive_parms:
1942 case tsk_insufficient_parms:
1943 if (tsk == tsk_excessive_parms)
1944 error ("too many template parameter lists in declaration of %qD",
1945 decl);
1946 else if (template_header_count)
1947 error("too few template parameter lists in declaration of %qD", decl);
1948 else
1949 error("explicit specialization of %qD must be introduced by "
1950 "%<template <>%>", decl);
1952 /* Fall through. */
1953 case tsk_expl_spec:
1954 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1955 if (ctype)
1956 member_specialization = 1;
1957 else
1958 specialization = 1;
1959 break;
1961 case tsk_template:
1962 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1964 /* This case handles bogus declarations like template <>
1965 template <class T> void f<int>(); */
1967 if (uses_template_parms (declarator))
1968 error ("function template partial specialization %qD "
1969 "is not allowed", declarator);
1970 else
1971 error ("template-id %qD in declaration of primary template",
1972 declarator);
1973 return decl;
1976 if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1977 /* This is a specialization of a member template, without
1978 specialization the containing class. Something like:
1980 template <class T> struct S {
1981 template <class U> void f (U);
1983 template <> template <class U> void S<int>::f(U) {}
1985 That's a specialization -- but of the entire template. */
1986 specialization = 1;
1987 break;
1989 default:
1990 gcc_unreachable ();
1993 if (specialization || member_specialization)
1995 tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
1996 for (; t; t = TREE_CHAIN (t))
1997 if (TREE_PURPOSE (t))
1999 pedwarn
2000 ("default argument specified in explicit specialization");
2001 break;
2005 if (specialization || member_specialization || explicit_instantiation)
2007 tree tmpl = NULL_TREE;
2008 tree targs = NULL_TREE;
2010 /* Make sure that the declarator is a TEMPLATE_ID_EXPR. */
2011 if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2013 tree fns;
2015 gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2016 if (ctype)
2017 fns = dname;
2018 else
2020 /* If there is no class context, the explicit instantiation
2021 must be at namespace scope. */
2022 gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2024 /* Find the namespace binding, using the declaration
2025 context. */
2026 fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2027 false, true);
2028 if (fns == error_mark_node || !is_overloaded_fn (fns))
2030 error ("%qD is not a template function", dname);
2031 fns = error_mark_node;
2033 else
2035 tree fn = OVL_CURRENT (fns);
2036 if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2037 CP_DECL_CONTEXT (fn)))
2038 error ("%qD is not declared in %qD",
2039 decl, current_namespace);
2043 declarator = lookup_template_function (fns, NULL_TREE);
2046 if (declarator == error_mark_node)
2047 return error_mark_node;
2049 if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2051 if (!explicit_instantiation)
2052 /* A specialization in class scope. This is invalid,
2053 but the error will already have been flagged by
2054 check_specialization_scope. */
2055 return error_mark_node;
2056 else
2058 /* It's not valid to write an explicit instantiation in
2059 class scope, e.g.:
2061 class C { template void f(); }
2063 This case is caught by the parser. However, on
2064 something like:
2066 template class C { void f(); };
2068 (which is invalid) we can get here. The error will be
2069 issued later. */
2073 return decl;
2075 else if (ctype != NULL_TREE
2076 && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2077 IDENTIFIER_NODE))
2079 /* Find the list of functions in ctype that have the same
2080 name as the declared function. */
2081 tree name = TREE_OPERAND (declarator, 0);
2082 tree fns = NULL_TREE;
2083 int idx;
2085 if (constructor_name_p (name, ctype))
2087 int is_constructor = DECL_CONSTRUCTOR_P (decl);
2089 if (is_constructor ? !TYPE_HAS_CONSTRUCTOR (ctype)
2090 : !CLASSTYPE_DESTRUCTORS (ctype))
2092 /* From [temp.expl.spec]:
2094 If such an explicit specialization for the member
2095 of a class template names an implicitly-declared
2096 special member function (clause _special_), the
2097 program is ill-formed.
2099 Similar language is found in [temp.explicit]. */
2100 error ("specialization of implicitly-declared special member function");
2101 return error_mark_node;
2104 name = is_constructor ? ctor_identifier : dtor_identifier;
2107 if (!DECL_CONV_FN_P (decl))
2109 idx = lookup_fnfields_1 (ctype, name);
2110 if (idx >= 0)
2111 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2113 else
2115 VEC(tree,gc) *methods;
2116 tree ovl;
2118 /* For a type-conversion operator, we cannot do a
2119 name-based lookup. We might be looking for `operator
2120 int' which will be a specialization of `operator T'.
2121 So, we find *all* the conversion operators, and then
2122 select from them. */
2123 fns = NULL_TREE;
2125 methods = CLASSTYPE_METHOD_VEC (ctype);
2126 if (methods)
2127 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2128 VEC_iterate (tree, methods, idx, ovl);
2129 ++idx)
2131 if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2132 /* There are no more conversion functions. */
2133 break;
2135 /* Glue all these conversion functions together
2136 with those we already have. */
2137 for (; ovl; ovl = OVL_NEXT (ovl))
2138 fns = ovl_cons (OVL_CURRENT (ovl), fns);
2142 if (fns == NULL_TREE)
2144 error ("no member function %qD declared in %qT", name, ctype);
2145 return error_mark_node;
2147 else
2148 TREE_OPERAND (declarator, 0) = fns;
2151 /* Figure out what exactly is being specialized at this point.
2152 Note that for an explicit instantiation, even one for a
2153 member function, we cannot tell apriori whether the
2154 instantiation is for a member template, or just a member
2155 function of a template class. Even if a member template is
2156 being instantiated, the member template arguments may be
2157 elided if they can be deduced from the rest of the
2158 declaration. */
2159 tmpl = determine_specialization (declarator, decl,
2160 &targs,
2161 member_specialization,
2162 template_count,
2163 tsk);
2165 if (!tmpl || tmpl == error_mark_node)
2166 /* We couldn't figure out what this declaration was
2167 specializing. */
2168 return error_mark_node;
2169 else
2171 tree gen_tmpl = most_general_template (tmpl);
2173 if (explicit_instantiation)
2175 /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2176 is done by do_decl_instantiation later. */
2178 int arg_depth = TMPL_ARGS_DEPTH (targs);
2179 int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2181 if (arg_depth > parm_depth)
2183 /* If TMPL is not the most general template (for
2184 example, if TMPL is a friend template that is
2185 injected into namespace scope), then there will
2186 be too many levels of TARGS. Remove some of them
2187 here. */
2188 int i;
2189 tree new_targs;
2191 new_targs = make_tree_vec (parm_depth);
2192 for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2193 TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2194 = TREE_VEC_ELT (targs, i);
2195 targs = new_targs;
2198 return instantiate_template (tmpl, targs, tf_error);
2201 /* If we thought that the DECL was a member function, but it
2202 turns out to be specializing a static member function,
2203 make DECL a static member function as well. */
2204 if (DECL_STATIC_FUNCTION_P (tmpl)
2205 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2206 revert_static_member_fn (decl);
2208 /* If this is a specialization of a member template of a
2209 template class, we want to return the TEMPLATE_DECL, not
2210 the specialization of it. */
2211 if (tsk == tsk_template)
2213 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2214 DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE;
2215 if (have_def)
2217 DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2218 DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl))
2219 = DECL_SOURCE_LOCATION (decl);
2220 /* We want to use the argument list specified in the
2221 definition, not in the original declaration. */
2222 DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (tmpl))
2223 = DECL_ARGUMENTS (decl);
2225 return tmpl;
2228 /* Set up the DECL_TEMPLATE_INFO for DECL. */
2229 DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
2231 /* Inherit default function arguments from the template
2232 DECL is specializing. */
2233 copy_default_args_to_explicit_spec (decl);
2235 /* This specialization has the same protection as the
2236 template it specializes. */
2237 TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2238 TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2240 /* 7.1.1-1 [dcl.stc]
2242 A storage-class-specifier shall not be specified in an
2243 explicit specialization...
2245 The parser rejects these, so unless action is taken here,
2246 explicit function specializations will always appear with
2247 global linkage.
2249 The action recommended by the C++ CWG in response to C++
2250 defect report 605 is to make the storage class and linkage
2251 of the explicit specialization match the templated function:
2253 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2255 if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2257 tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2258 gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2260 /* This specialization has the same linkage and visibility as
2261 the function template it specializes. */
2262 TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2263 if (! TREE_PUBLIC (decl))
2265 DECL_INTERFACE_KNOWN (decl) = 1;
2266 DECL_NOT_REALLY_EXTERN (decl) = 1;
2268 DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2269 if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2271 DECL_VISIBILITY_SPECIFIED (decl) = 1;
2272 DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2276 /* If DECL is a friend declaration, declared using an
2277 unqualified name, the namespace associated with DECL may
2278 have been set incorrectly. For example, in:
2280 template <typename T> void f(T);
2281 namespace N {
2282 struct S { friend void f<int>(int); }
2285 we will have set the DECL_CONTEXT for the friend
2286 declaration to N, rather than to the global namespace. */
2287 if (DECL_NAMESPACE_SCOPE_P (decl))
2288 DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2290 if (is_friend && !have_def)
2291 /* This is not really a declaration of a specialization.
2292 It's just the name of an instantiation. But, it's not
2293 a request for an instantiation, either. */
2294 SET_DECL_IMPLICIT_INSTANTIATION (decl);
2295 else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2296 /* This is indeed a specialization. In case of constructors
2297 and destructors, we need in-charge and not-in-charge
2298 versions in V3 ABI. */
2299 clone_function_decl (decl, /*update_method_vec_p=*/0);
2301 /* Register this specialization so that we can find it
2302 again. */
2303 decl = register_specialization (decl, gen_tmpl, targs, is_friend);
2307 return decl;
2310 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2311 parameters. These are represented in the same format used for
2312 DECL_TEMPLATE_PARMS. */
2315 comp_template_parms (const_tree parms1, const_tree parms2)
2317 const_tree p1;
2318 const_tree p2;
2320 if (parms1 == parms2)
2321 return 1;
2323 for (p1 = parms1, p2 = parms2;
2324 p1 != NULL_TREE && p2 != NULL_TREE;
2325 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2327 tree t1 = TREE_VALUE (p1);
2328 tree t2 = TREE_VALUE (p2);
2329 int i;
2331 gcc_assert (TREE_CODE (t1) == TREE_VEC);
2332 gcc_assert (TREE_CODE (t2) == TREE_VEC);
2334 if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2335 return 0;
2337 for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2339 tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2340 tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2342 /* If either of the template parameters are invalid, assume
2343 they match for the sake of error recovery. */
2344 if (parm1 == error_mark_node || parm2 == error_mark_node)
2345 return 1;
2347 if (TREE_CODE (parm1) != TREE_CODE (parm2))
2348 return 0;
2350 if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2351 && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2352 == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2353 continue;
2354 else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2355 return 0;
2359 if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2360 /* One set of parameters has more parameters lists than the
2361 other. */
2362 return 0;
2364 return 1;
2367 /* Determine whether PARM is a parameter pack. */
2368 bool
2369 template_parameter_pack_p (const_tree parm)
2371 /* Determine if we have a non-type template parameter pack. */
2372 if (TREE_CODE (parm) == PARM_DECL)
2373 return (DECL_TEMPLATE_PARM_P (parm)
2374 && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2376 /* If this is a list of template parameters, we could get a
2377 TYPE_DECL or a TEMPLATE_DECL. */
2378 if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2379 parm = TREE_TYPE (parm);
2381 return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2382 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2383 && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2386 /* Determine whether ARGS describes a variadic template args list,
2387 i.e., one that is terminated by a template argument pack. */
2388 static bool
2389 template_args_variadic_p (tree args)
2391 int nargs;
2392 tree last_parm;
2394 if (args == NULL_TREE)
2395 return false;
2397 args = INNERMOST_TEMPLATE_ARGS (args);
2398 nargs = TREE_VEC_LENGTH (args);
2400 if (nargs == 0)
2401 return false;
2403 last_parm = TREE_VEC_ELT (args, nargs - 1);
2405 return ARGUMENT_PACK_P (last_parm);
2408 /* Generate a new name for the parameter pack name NAME (an
2409 IDENTIFIER_NODE) that incorporates its */
2410 static tree
2411 make_ith_pack_parameter_name (tree name, int i)
2413 /* Munge the name to include the parameter index. */
2414 char numbuf[128];
2415 char* newname;
2417 sprintf(numbuf, "%i", i);
2418 newname = (char*)alloca (IDENTIFIER_LENGTH (name) + strlen(numbuf) + 2);
2419 sprintf(newname, "%s#%i", IDENTIFIER_POINTER (name), i);
2420 return get_identifier (newname);
2423 /* Structure used to track the progress of find_parameter_packs_r. */
2424 struct find_parameter_pack_data
2426 /* TREE_LIST that will contain all of the parameter packs found by
2427 the traversal. */
2428 tree* parameter_packs;
2430 /* Set of AST nodes that have been visited by the traversal. */
2431 struct pointer_set_t *visited;
2433 /* Whether we should replace parameter packs with
2434 ERROR_MARK_NODE. Used by check_for_bare_parameter_packs. */
2435 bool set_packs_to_error;
2438 /* Identifies all of the argument packs that occur in a template
2439 argument and appends them to the TREE_LIST inside DATA, which is a
2440 find_parameter_pack_data structure. This is a subroutine of
2441 make_pack_expansion and uses_parameter_packs. */
2442 static tree
2443 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2445 tree t = *tp;
2446 struct find_parameter_pack_data* ppd =
2447 (struct find_parameter_pack_data*)data;
2448 bool parameter_pack_p = false;
2450 /* Don't visit nodes twice, except when we're clearing out parameter
2451 packs. */
2452 if (pointer_set_contains (ppd->visited, *tp))
2454 *walk_subtrees = 0;
2455 return NULL_TREE;
2458 recheck:
2459 /* Identify whether this is a parameter pack or not. */
2460 switch (TREE_CODE (t))
2462 case TEMPLATE_PARM_INDEX:
2463 if (TEMPLATE_PARM_PARAMETER_PACK (t))
2464 parameter_pack_p = true;
2465 break;
2467 case TEMPLATE_TYPE_PARM:
2468 case TEMPLATE_TEMPLATE_PARM:
2469 if (TEMPLATE_TYPE_PARAMETER_PACK (t))
2470 parameter_pack_p = true;
2471 break;
2473 case PARM_DECL:
2474 if (FUNCTION_PARAMETER_PACK_P (t))
2476 /* We don't want to walk into the type of a PARM_DECL,
2477 because we don't want to see the type parameter pack. */
2478 *walk_subtrees = 0;
2479 parameter_pack_p = true;
2481 break;
2483 case POINTER_TYPE:
2484 if (ppd->set_packs_to_error)
2485 /* Pointer types are shared, set in that case the outermost
2486 POINTER_TYPE to error_mark_node rather than the parameter pack. */
2488 t = TREE_TYPE (t);
2489 goto recheck;
2491 break;
2493 default:
2494 /* Not a parameter pack. */
2495 break;
2498 if (parameter_pack_p)
2500 /* Add this parameter pack to the list. */
2501 *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
2503 if (ppd->set_packs_to_error)
2504 /* The caller requested that we set the parameter packs to
2505 ERROR_MARK_NODE so that they will not trip up the compiler
2506 later. The caller is responsible for emitting an error. */
2507 *tp = error_mark_node;
2508 else
2509 /* Make sure we do not visit this node again. */
2510 pointer_set_insert (ppd->visited, *tp);
2512 else
2513 /* Make sure we do not visit this node again. */
2514 pointer_set_insert (ppd->visited, *tp);
2516 if (TYPE_P (t))
2517 cp_walk_tree (&TYPE_CONTEXT (t),
2518 &find_parameter_packs_r, ppd, NULL);
2520 /* This switch statement will return immediately if we don't find a
2521 parameter pack. */
2522 switch (TREE_CODE (t))
2524 case TEMPLATE_PARM_INDEX:
2525 return NULL_TREE;
2527 case BOUND_TEMPLATE_TEMPLATE_PARM:
2528 /* Check the template itself. */
2529 cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)),
2530 &find_parameter_packs_r, ppd, NULL);
2531 /* Check the template arguments. */
2532 cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd,
2533 NULL);
2534 *walk_subtrees = 0;
2535 return NULL_TREE;
2537 case TEMPLATE_TYPE_PARM:
2538 case TEMPLATE_TEMPLATE_PARM:
2539 return NULL_TREE;
2541 case PARM_DECL:
2542 return NULL_TREE;
2544 case RECORD_TYPE:
2545 if (TYPE_PTRMEMFUNC_P (t))
2546 return NULL_TREE;
2547 /* Fall through. */
2549 case UNION_TYPE:
2550 case ENUMERAL_TYPE:
2551 if (TYPE_TEMPLATE_INFO (t))
2552 cp_walk_tree (&TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
2553 &find_parameter_packs_r, ppd, NULL);
2555 *walk_subtrees = 0;
2556 return NULL_TREE;
2558 case TEMPLATE_DECL:
2559 cp_walk_tree (&TREE_TYPE (t),
2560 &find_parameter_packs_r, ppd, NULL);
2561 return NULL_TREE;
2563 case TYPENAME_TYPE:
2564 cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
2565 ppd, NULL);
2566 *walk_subtrees = 0;
2567 return NULL_TREE;
2569 case TYPE_PACK_EXPANSION:
2570 case EXPR_PACK_EXPANSION:
2571 *walk_subtrees = 0;
2572 return NULL_TREE;
2574 case INTEGER_TYPE:
2575 cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r,
2576 ppd, NULL);
2577 *walk_subtrees = 0;
2578 return NULL_TREE;
2580 default:
2581 return NULL_TREE;
2584 return NULL_TREE;
2587 /* Determines if the expression or type T uses any parameter packs. */
2588 bool
2589 uses_parameter_packs (tree t)
2591 tree parameter_packs = NULL_TREE;
2592 struct find_parameter_pack_data ppd;
2593 ppd.parameter_packs = &parameter_packs;
2594 ppd.visited = pointer_set_create ();
2595 ppd.set_packs_to_error = false;
2596 cp_walk_tree (&t, &find_parameter_packs_r, &ppd, NULL);
2597 pointer_set_destroy (ppd.visited);
2598 return parameter_packs != NULL_TREE;
2601 /* Turn ARG, which may be an expression, type, or a TREE_LIST
2602 representation a base-class initializer into a parameter pack
2603 expansion. If all goes well, the resulting node will be an
2604 EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
2605 respectively. */
2606 tree
2607 make_pack_expansion (tree arg)
2609 tree result;
2610 tree parameter_packs = NULL_TREE;
2611 bool for_types = false;
2612 struct find_parameter_pack_data ppd;
2614 ppd.set_packs_to_error = false;
2616 if (!arg || arg == error_mark_node)
2617 return arg;
2619 if (TREE_CODE (arg) == TREE_LIST)
2621 /* The only time we will see a TREE_LIST here is for a base
2622 class initializer. In this case, the TREE_PURPOSE will be a
2623 _TYPE node (representing the base class expansion we're
2624 initializing) and the TREE_VALUE will be a TREE_LIST
2625 containing the initialization arguments.
2627 The resulting expansion looks somewhat different from most
2628 expansions. Rather than returning just one _EXPANSION, we
2629 return a TREE_LIST whose TREE_PURPOSE is a
2630 TYPE_PACK_EXPANSION containing the bases that will be
2631 initialized. The TREE_VALUE will be identical to the
2632 original TREE_VALUE, which is a list of arguments that will
2633 be passed to each base. We do not introduce any new pack
2634 expansion nodes into the TREE_VALUE (although it is possible
2635 that some already exist), because the TREE_PURPOSE and
2636 TREE_VALUE all need to be expanded together with the same
2637 _EXPANSION node. Note that the TYPE_PACK_EXPANSION in the
2638 resulting TREE_PURPOSE will mention the parameter packs in
2639 both the bases and the arguments to the bases. */
2640 tree purpose;
2641 tree value;
2642 tree parameter_packs = NULL_TREE;
2644 /* Determine which parameter packs will be used by the base
2645 class expansion. */
2646 ppd.visited = pointer_set_create ();
2647 ppd.parameter_packs = &parameter_packs;
2648 cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r,
2649 &ppd, NULL);
2651 if (parameter_packs == NULL_TREE)
2653 error ("base initializer expansion %<%T%> contains no parameter packs", arg);
2654 pointer_set_destroy (ppd.visited);
2655 return error_mark_node;
2658 if (TREE_VALUE (arg) != void_type_node)
2660 /* Collect the sets of parameter packs used in each of the
2661 initialization arguments. */
2662 for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
2664 /* Determine which parameter packs will be expanded in this
2665 argument. */
2666 cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r,
2667 &ppd, NULL);
2671 pointer_set_destroy (ppd.visited);
2673 /* Create the pack expansion type for the base type. */
2674 purpose = make_node (TYPE_PACK_EXPANSION);
2675 SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
2676 PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
2678 /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2679 they will rarely be compared to anything. */
2680 SET_TYPE_STRUCTURAL_EQUALITY (purpose);
2682 return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
2685 if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
2686 for_types = true;
2688 /* Build the PACK_EXPANSION_* node. */
2689 result = make_node (for_types ? TYPE_PACK_EXPANSION : EXPR_PACK_EXPANSION);
2690 SET_PACK_EXPANSION_PATTERN (result, arg);
2691 if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
2693 /* Propagate type and const-expression information. */
2694 TREE_TYPE (result) = TREE_TYPE (arg);
2695 TREE_CONSTANT (result) = TREE_CONSTANT (arg);
2697 else
2698 /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2699 they will rarely be compared to anything. */
2700 SET_TYPE_STRUCTURAL_EQUALITY (result);
2702 /* Determine which parameter packs will be expanded. */
2703 ppd.parameter_packs = &parameter_packs;
2704 ppd.visited = pointer_set_create ();
2705 cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, NULL);
2706 pointer_set_destroy (ppd.visited);
2708 /* Make sure we found some parameter packs. */
2709 if (parameter_packs == NULL_TREE)
2711 if (TYPE_P (arg))
2712 error ("expansion pattern %<%T%> contains no argument packs", arg);
2713 else
2714 error ("expansion pattern %<%E%> contains no argument packs", arg);
2715 return error_mark_node;
2717 PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
2719 return result;
2722 /* Checks T for any "bare" parameter packs, which have not yet been
2723 expanded, and issues an error if any are found. This operation can
2724 only be done on full expressions or types (e.g., an expression
2725 statement, "if" condition, etc.), because we could have expressions like:
2727 foo(f(g(h(args)))...)
2729 where "args" is a parameter pack. check_for_bare_parameter_packs
2730 should not be called for the subexpressions args, h(args),
2731 g(h(args)), or f(g(h(args))), because we would produce erroneous
2732 error messages.
2734 Returns TRUE if there were no bare parameter packs, returns FALSE
2735 (and emits an error) if there were bare parameter packs.*/
2736 bool
2737 check_for_bare_parameter_packs (tree* t)
2739 tree parameter_packs = NULL_TREE;
2740 struct find_parameter_pack_data ppd;
2742 if (!processing_template_decl || !t || !*t || *t == error_mark_node)
2743 return true;
2745 if (TREE_CODE (*t) == TYPE_DECL)
2746 t = &TREE_TYPE (*t);
2748 ppd.parameter_packs = &parameter_packs;
2749 ppd.visited = pointer_set_create ();
2750 ppd.set_packs_to_error = false;
2751 cp_walk_tree (t, &find_parameter_packs_r, &ppd, NULL);
2752 pointer_set_destroy (ppd.visited);
2754 if (parameter_packs)
2756 error ("parameter packs not expanded with `...':");
2757 while (parameter_packs)
2759 tree pack = TREE_VALUE (parameter_packs);
2760 tree name = NULL_TREE;
2762 if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
2763 || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
2764 name = TYPE_NAME (pack);
2765 else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
2766 name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
2767 else
2768 name = DECL_NAME (pack);
2770 if (name)
2771 inform (" %qD", name);
2772 else
2773 inform (" <anonymous>");
2775 parameter_packs = TREE_CHAIN (parameter_packs);
2778 /* Clean up any references to these parameter packs within the
2779 tree. */
2780 ppd.parameter_packs = &parameter_packs;
2781 ppd.visited = pointer_set_create ();
2782 ppd.set_packs_to_error = true;
2783 cp_walk_tree (t, &find_parameter_packs_r, &ppd, NULL);
2784 pointer_set_destroy (ppd.visited);
2786 return false;
2789 return true;
2792 /* Expand any parameter packs that occur in the template arguments in
2793 ARGS. */
2794 tree
2795 expand_template_argument_pack (tree args)
2797 tree result_args = NULL_TREE;
2798 int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
2799 int num_result_args = -1;
2801 /* First, determine if we need to expand anything, and the number of
2802 slots we'll need. */
2803 for (in_arg = 0; in_arg < nargs; ++in_arg)
2805 tree arg = TREE_VEC_ELT (args, in_arg);
2806 if (ARGUMENT_PACK_P (arg))
2808 int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
2809 if (num_result_args < 0)
2810 num_result_args = in_arg + num_packed;
2811 else
2812 num_result_args += num_packed;
2814 else
2816 if (num_result_args >= 0)
2817 num_result_args++;
2821 /* If no expansion is necessary, we're done. */
2822 if (num_result_args < 0)
2823 return args;
2825 /* Expand arguments. */
2826 result_args = make_tree_vec (num_result_args);
2827 for (in_arg = 0; in_arg < nargs; ++in_arg)
2829 tree arg = TREE_VEC_ELT (args, in_arg);
2830 if (ARGUMENT_PACK_P (arg))
2832 tree packed = ARGUMENT_PACK_ARGS (arg);
2833 int i, num_packed = TREE_VEC_LENGTH (packed);
2834 for (i = 0; i < num_packed; ++i, ++out_arg)
2835 TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
2837 else
2839 TREE_VEC_ELT (result_args, out_arg) = arg;
2840 ++out_arg;
2844 return result_args;
2847 /* Complain if DECL shadows a template parameter.
2849 [temp.local]: A template-parameter shall not be redeclared within its
2850 scope (including nested scopes). */
2852 void
2853 check_template_shadow (tree decl)
2855 tree olddecl;
2857 /* If we're not in a template, we can't possibly shadow a template
2858 parameter. */
2859 if (!current_template_parms)
2860 return;
2862 /* Figure out what we're shadowing. */
2863 if (TREE_CODE (decl) == OVERLOAD)
2864 decl = OVL_CURRENT (decl);
2865 olddecl = innermost_non_namespace_value (DECL_NAME (decl));
2867 /* If there's no previous binding for this name, we're not shadowing
2868 anything, let alone a template parameter. */
2869 if (!olddecl)
2870 return;
2872 /* If we're not shadowing a template parameter, we're done. Note
2873 that OLDDECL might be an OVERLOAD (or perhaps even an
2874 ERROR_MARK), so we can't just blithely assume it to be a _DECL
2875 node. */
2876 if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
2877 return;
2879 /* We check for decl != olddecl to avoid bogus errors for using a
2880 name inside a class. We check TPFI to avoid duplicate errors for
2881 inline member templates. */
2882 if (decl == olddecl
2883 || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
2884 return;
2886 error ("declaration of %q+#D", decl);
2887 error (" shadows template parm %q+#D", olddecl);
2890 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
2891 ORIG_LEVEL, DECL, and TYPE. */
2893 static tree
2894 build_template_parm_index (int index,
2895 int level,
2896 int orig_level,
2897 tree decl,
2898 tree type)
2900 tree t = make_node (TEMPLATE_PARM_INDEX);
2901 TEMPLATE_PARM_IDX (t) = index;
2902 TEMPLATE_PARM_LEVEL (t) = level;
2903 TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
2904 TEMPLATE_PARM_DECL (t) = decl;
2905 TREE_TYPE (t) = type;
2906 TREE_CONSTANT (t) = TREE_CONSTANT (decl);
2907 TREE_INVARIANT (t) = TREE_INVARIANT (decl);
2908 TREE_READONLY (t) = TREE_READONLY (decl);
2910 return t;
2913 /* Find the canonical type parameter for the given template type
2914 parameter. Returns the canonical type parameter, which may be TYPE
2915 if no such parameter existed. */
2916 static tree
2917 canonical_type_parameter (tree type)
2919 tree list;
2920 int idx = TEMPLATE_TYPE_IDX (type);
2921 if (!canonical_template_parms)
2922 canonical_template_parms = VEC_alloc (tree, gc, idx+1);
2924 while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
2925 VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
2927 list = VEC_index (tree, canonical_template_parms, idx);
2928 while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
2929 list = TREE_CHAIN (list);
2931 if (list)
2932 return TREE_VALUE (list);
2933 else
2935 VEC_replace(tree, canonical_template_parms, idx,
2936 tree_cons (NULL_TREE, type,
2937 VEC_index (tree, canonical_template_parms, idx)));
2938 return type;
2942 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
2943 TEMPLATE_PARM_LEVEL has been decreased by LEVELS. If such a
2944 TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
2945 new one is created. */
2947 static tree
2948 reduce_template_parm_level (tree index, tree type, int levels, tree args,
2949 tsubst_flags_t complain)
2951 if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
2952 || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
2953 != TEMPLATE_PARM_LEVEL (index) - levels))
2955 tree orig_decl = TEMPLATE_PARM_DECL (index);
2956 tree decl, t;
2958 decl = build_decl (TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
2959 TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
2960 TREE_INVARIANT (decl) = TREE_INVARIANT (orig_decl);
2961 TREE_READONLY (decl) = TREE_READONLY (orig_decl);
2962 DECL_ARTIFICIAL (decl) = 1;
2963 SET_DECL_TEMPLATE_PARM_P (decl);
2965 t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
2966 TEMPLATE_PARM_LEVEL (index) - levels,
2967 TEMPLATE_PARM_ORIG_LEVEL (index),
2968 decl, type);
2969 TEMPLATE_PARM_DESCENDANTS (index) = t;
2970 TEMPLATE_PARM_PARAMETER_PACK (t)
2971 = TEMPLATE_PARM_PARAMETER_PACK (index);
2973 /* Template template parameters need this. */
2974 if (TREE_CODE (decl) == TEMPLATE_DECL)
2975 DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
2976 (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
2977 args, complain);
2980 return TEMPLATE_PARM_DESCENDANTS (index);
2983 /* Process information from new template parameter PARM and append it to the
2984 LIST being built. This new parameter is a non-type parameter iff
2985 IS_NON_TYPE is true. This new parameter is a parameter
2986 pack iff IS_PARAMETER_PACK is true. */
2988 tree
2989 process_template_parm (tree list, tree parm, bool is_non_type,
2990 bool is_parameter_pack)
2992 tree decl = 0;
2993 tree defval;
2994 tree err_parm_list;
2995 int idx = 0;
2997 gcc_assert (TREE_CODE (parm) == TREE_LIST);
2998 defval = TREE_PURPOSE (parm);
3000 if (list)
3002 tree p = tree_last (list);
3004 if (p && TREE_VALUE (p) != error_mark_node)
3006 p = TREE_VALUE (p);
3007 if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
3008 idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
3009 else
3010 idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
3013 ++idx;
3015 else
3016 idx = 0;
3018 if (is_non_type)
3020 parm = TREE_VALUE (parm);
3022 SET_DECL_TEMPLATE_PARM_P (parm);
3024 if (TREE_TYPE (parm) == error_mark_node)
3026 err_parm_list = build_tree_list (defval, parm);
3027 TREE_VALUE (err_parm_list) = error_mark_node;
3028 return chainon (list, err_parm_list);
3030 else
3032 /* [temp.param]
3034 The top-level cv-qualifiers on the template-parameter are
3035 ignored when determining its type. */
3036 TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3037 if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3039 err_parm_list = build_tree_list (defval, parm);
3040 TREE_VALUE (err_parm_list) = error_mark_node;
3041 return chainon (list, err_parm_list);
3044 if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
3046 /* This template parameter is not a parameter pack, but it
3047 should be. Complain about "bare" parameter packs. */
3048 check_for_bare_parameter_packs (&TREE_TYPE (parm));
3050 /* Recover by calling this a parameter pack. */
3051 is_parameter_pack = true;
3055 /* A template parameter is not modifiable. */
3056 TREE_CONSTANT (parm) = 1;
3057 TREE_INVARIANT (parm) = 1;
3058 TREE_READONLY (parm) = 1;
3059 decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3060 TREE_CONSTANT (decl) = 1;
3061 TREE_INVARIANT (decl) = 1;
3062 TREE_READONLY (decl) = 1;
3063 DECL_INITIAL (parm) = DECL_INITIAL (decl)
3064 = build_template_parm_index (idx, processing_template_decl,
3065 processing_template_decl,
3066 decl, TREE_TYPE (parm));
3068 TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
3069 = is_parameter_pack;
3071 else
3073 tree t;
3074 parm = TREE_VALUE (TREE_VALUE (parm));
3076 if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3078 t = make_aggr_type (TEMPLATE_TEMPLATE_PARM);
3079 /* This is for distinguishing between real templates and template
3080 template parameters */
3081 TREE_TYPE (parm) = t;
3082 TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3083 decl = parm;
3085 else
3087 t = make_aggr_type (TEMPLATE_TYPE_PARM);
3088 /* parm is either IDENTIFIER_NODE or NULL_TREE. */
3089 decl = build_decl (TYPE_DECL, parm, t);
3092 TYPE_NAME (t) = decl;
3093 TYPE_STUB_DECL (t) = decl;
3094 parm = decl;
3095 TEMPLATE_TYPE_PARM_INDEX (t)
3096 = build_template_parm_index (idx, processing_template_decl,
3097 processing_template_decl,
3098 decl, TREE_TYPE (parm));
3099 TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3100 TYPE_CANONICAL (t) = canonical_type_parameter (t);
3102 DECL_ARTIFICIAL (decl) = 1;
3103 SET_DECL_TEMPLATE_PARM_P (decl);
3104 pushdecl (decl);
3105 parm = build_tree_list (defval, parm);
3106 return chainon (list, parm);
3109 /* The end of a template parameter list has been reached. Process the
3110 tree list into a parameter vector, converting each parameter into a more
3111 useful form. Type parameters are saved as IDENTIFIER_NODEs, and others
3112 as PARM_DECLs. */
3114 tree
3115 end_template_parm_list (tree parms)
3117 int nparms;
3118 tree parm, next;
3119 tree saved_parmlist = make_tree_vec (list_length (parms));
3121 current_template_parms
3122 = tree_cons (size_int (processing_template_decl),
3123 saved_parmlist, current_template_parms);
3125 for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3127 next = TREE_CHAIN (parm);
3128 TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3129 TREE_CHAIN (parm) = NULL_TREE;
3132 --processing_template_parmlist;
3134 return saved_parmlist;
3137 /* end_template_decl is called after a template declaration is seen. */
3139 void
3140 end_template_decl (void)
3142 reset_specialization ();
3144 if (! processing_template_decl)
3145 return;
3147 /* This matches the pushlevel in begin_template_parm_list. */
3148 finish_scope ();
3150 --processing_template_decl;
3151 current_template_parms = TREE_CHAIN (current_template_parms);
3154 /* Within the declaration of a template, return all levels of template
3155 parameters that apply. The template parameters are represented as
3156 a TREE_VEC, in the form documented in cp-tree.h for template
3157 arguments. */
3159 static tree
3160 current_template_args (void)
3162 tree header;
3163 tree args = NULL_TREE;
3164 int length = TMPL_PARMS_DEPTH (current_template_parms);
3165 int l = length;
3167 /* If there is only one level of template parameters, we do not
3168 create a TREE_VEC of TREE_VECs. Instead, we return a single
3169 TREE_VEC containing the arguments. */
3170 if (length > 1)
3171 args = make_tree_vec (length);
3173 for (header = current_template_parms; header; header = TREE_CHAIN (header))
3175 tree a = copy_node (TREE_VALUE (header));
3176 int i;
3178 TREE_TYPE (a) = NULL_TREE;
3179 for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
3181 tree t = TREE_VEC_ELT (a, i);
3183 /* T will be a list if we are called from within a
3184 begin/end_template_parm_list pair, but a vector directly
3185 if within a begin/end_member_template_processing pair. */
3186 if (TREE_CODE (t) == TREE_LIST)
3188 t = TREE_VALUE (t);
3190 if (!error_operand_p (t))
3192 if (TREE_CODE (t) == TYPE_DECL
3193 || TREE_CODE (t) == TEMPLATE_DECL)
3195 t = TREE_TYPE (t);
3197 if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3199 /* Turn this argument into a TYPE_ARGUMENT_PACK
3200 with a single element, which expands T. */
3201 tree vec = make_tree_vec (1);
3202 TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3204 t = make_node (TYPE_ARGUMENT_PACK);
3205 SET_ARGUMENT_PACK_ARGS (t, vec);
3208 else
3210 t = DECL_INITIAL (t);
3212 if (TEMPLATE_PARM_PARAMETER_PACK (t))
3214 /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3215 with a single element, which expands T. */
3216 tree vec = make_tree_vec (1);
3217 tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3218 TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3220 t = make_node (NONTYPE_ARGUMENT_PACK);
3221 SET_ARGUMENT_PACK_ARGS (t, vec);
3222 TREE_TYPE (t) = type;
3225 TREE_VEC_ELT (a, i) = t;
3230 if (length > 1)
3231 TREE_VEC_ELT (args, --l) = a;
3232 else
3233 args = a;
3236 return args;
3239 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
3240 template PARMS. If MEMBER_TEMPLATE_P is true, the new template is
3241 a member template. Used by push_template_decl below. */
3243 static tree
3244 build_template_decl (tree decl, tree parms, bool member_template_p)
3246 tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
3247 DECL_TEMPLATE_PARMS (tmpl) = parms;
3248 DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
3249 DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
3250 if (DECL_LANG_SPECIFIC (decl))
3252 DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
3253 DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
3254 DECL_DESTRUCTOR_P (tmpl) = DECL_DESTRUCTOR_P (decl);
3255 DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
3256 DECL_ASSIGNMENT_OPERATOR_P (tmpl) = DECL_ASSIGNMENT_OPERATOR_P (decl);
3257 if (DECL_OVERLOADED_OPERATOR_P (decl))
3258 SET_OVERLOADED_OPERATOR_CODE (tmpl,
3259 DECL_OVERLOADED_OPERATOR_P (decl));
3262 return tmpl;
3265 struct template_parm_data
3267 /* The level of the template parameters we are currently
3268 processing. */
3269 int level;
3271 /* The index of the specialization argument we are currently
3272 processing. */
3273 int current_arg;
3275 /* An array whose size is the number of template parameters. The
3276 elements are nonzero if the parameter has been used in any one
3277 of the arguments processed so far. */
3278 int* parms;
3280 /* An array whose size is the number of template arguments. The
3281 elements are nonzero if the argument makes use of template
3282 parameters of this level. */
3283 int* arg_uses_template_parms;
3286 /* Subroutine of push_template_decl used to see if each template
3287 parameter in a partial specialization is used in the explicit
3288 argument list. If T is of the LEVEL given in DATA (which is
3289 treated as a template_parm_data*), then DATA->PARMS is marked
3290 appropriately. */
3292 static int
3293 mark_template_parm (tree t, void* data)
3295 int level;
3296 int idx;
3297 struct template_parm_data* tpd = (struct template_parm_data*) data;
3299 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3301 level = TEMPLATE_PARM_LEVEL (t);
3302 idx = TEMPLATE_PARM_IDX (t);
3304 else
3306 level = TEMPLATE_TYPE_LEVEL (t);
3307 idx = TEMPLATE_TYPE_IDX (t);
3310 if (level == tpd->level)
3312 tpd->parms[idx] = 1;
3313 tpd->arg_uses_template_parms[tpd->current_arg] = 1;
3316 /* Return zero so that for_each_template_parm will continue the
3317 traversal of the tree; we want to mark *every* template parm. */
3318 return 0;
3321 /* Process the partial specialization DECL. */
3323 static tree
3324 process_partial_specialization (tree decl)
3326 tree type = TREE_TYPE (decl);
3327 tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
3328 tree specargs = CLASSTYPE_TI_ARGS (type);
3329 tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
3330 tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3331 tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
3332 int nargs = TREE_VEC_LENGTH (inner_args);
3333 int ntparms = TREE_VEC_LENGTH (inner_parms);
3334 int i;
3335 int did_error_intro = 0;
3336 struct template_parm_data tpd;
3337 struct template_parm_data tpd2;
3339 /* We check that each of the template parameters given in the
3340 partial specialization is used in the argument list to the
3341 specialization. For example:
3343 template <class T> struct S;
3344 template <class T> struct S<T*>;
3346 The second declaration is OK because `T*' uses the template
3347 parameter T, whereas
3349 template <class T> struct S<int>;
3351 is no good. Even trickier is:
3353 template <class T>
3354 struct S1
3356 template <class U>
3357 struct S2;
3358 template <class U>
3359 struct S2<T>;
3362 The S2<T> declaration is actually invalid; it is a
3363 full-specialization. Of course,
3365 template <class U>
3366 struct S2<T (*)(U)>;
3368 or some such would have been OK. */
3369 tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
3370 tpd.parms = (int *) alloca (sizeof (int) * ntparms);
3371 memset (tpd.parms, 0, sizeof (int) * ntparms);
3373 tpd.arg_uses_template_parms = (int *) alloca (sizeof (int) * nargs);
3374 memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
3375 for (i = 0; i < nargs; ++i)
3377 tpd.current_arg = i;
3378 for_each_template_parm (TREE_VEC_ELT (inner_args, i),
3379 &mark_template_parm,
3380 &tpd,
3381 NULL);
3383 for (i = 0; i < ntparms; ++i)
3384 if (tpd.parms[i] == 0)
3386 /* One of the template parms was not used in the
3387 specialization. */
3388 if (!did_error_intro)
3390 error ("template parameters not used in partial specialization:");
3391 did_error_intro = 1;
3394 error (" %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
3397 /* [temp.class.spec]
3399 The argument list of the specialization shall not be identical to
3400 the implicit argument list of the primary template. */
3401 if (comp_template_args
3402 (inner_args,
3403 INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
3404 (maintmpl)))))
3405 error ("partial specialization %qT does not specialize any template arguments", type);
3407 /* [temp.class.spec]
3409 A partially specialized non-type argument expression shall not
3410 involve template parameters of the partial specialization except
3411 when the argument expression is a simple identifier.
3413 The type of a template parameter corresponding to a specialized
3414 non-type argument shall not be dependent on a parameter of the
3415 specialization.
3417 Also, we verify that pack expansions only occur at the
3418 end of the argument list. */
3419 gcc_assert (nargs == DECL_NTPARMS (maintmpl));
3420 tpd2.parms = 0;
3421 for (i = 0; i < nargs; ++i)
3423 tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
3424 tree arg = TREE_VEC_ELT (inner_args, i);
3425 tree packed_args = NULL_TREE;
3426 int j, len = 1;
3428 if (ARGUMENT_PACK_P (arg))
3430 /* Extract the arguments from the argument pack. We'll be
3431 iterating over these in the following loop. */
3432 packed_args = ARGUMENT_PACK_ARGS (arg);
3433 len = TREE_VEC_LENGTH (packed_args);
3436 for (j = 0; j < len; j++)
3438 if (packed_args)
3439 /* Get the Jth argument in the parameter pack. */
3440 arg = TREE_VEC_ELT (packed_args, j);
3442 if (PACK_EXPANSION_P (arg))
3444 /* Pack expansions must come at the end of the
3445 argument list. */
3446 if ((packed_args && j < len - 1)
3447 || (!packed_args && i < nargs - 1))
3449 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3450 error ("parameter pack argument %qE must be at the end of the template argument list", arg);
3451 else
3452 error ("parameter pack argument %qT must be at the end of the template argument list", arg);
3454 if (packed_args)
3455 TREE_VEC_ELT (packed_args, j) = error_mark_node;
3459 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3460 /* We only care about the pattern. */
3461 arg = PACK_EXPANSION_PATTERN (arg);
3463 if (/* These first two lines are the `non-type' bit. */
3464 !TYPE_P (arg)
3465 && TREE_CODE (arg) != TEMPLATE_DECL
3466 /* This next line is the `argument expression is not just a
3467 simple identifier' condition and also the `specialized
3468 non-type argument' bit. */
3469 && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
3471 if ((!packed_args && tpd.arg_uses_template_parms[i])
3472 || (packed_args && uses_template_parms (arg)))
3473 error ("template argument %qE involves template parameter(s)",
3474 arg);
3475 else
3477 /* Look at the corresponding template parameter,
3478 marking which template parameters its type depends
3479 upon. */
3480 tree type = TREE_TYPE (parm);
3482 if (!tpd2.parms)
3484 /* We haven't yet initialized TPD2. Do so now. */
3485 tpd2.arg_uses_template_parms
3486 = (int *) alloca (sizeof (int) * nargs);
3487 /* The number of parameters here is the number in the
3488 main template, which, as checked in the assertion
3489 above, is NARGS. */
3490 tpd2.parms = (int *) alloca (sizeof (int) * nargs);
3491 tpd2.level =
3492 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
3495 /* Mark the template parameters. But this time, we're
3496 looking for the template parameters of the main
3497 template, not in the specialization. */
3498 tpd2.current_arg = i;
3499 tpd2.arg_uses_template_parms[i] = 0;
3500 memset (tpd2.parms, 0, sizeof (int) * nargs);
3501 for_each_template_parm (type,
3502 &mark_template_parm,
3503 &tpd2,
3504 NULL);
3506 if (tpd2.arg_uses_template_parms [i])
3508 /* The type depended on some template parameters.
3509 If they are fully specialized in the
3510 specialization, that's OK. */
3511 int j;
3512 for (j = 0; j < nargs; ++j)
3513 if (tpd2.parms[j] != 0
3514 && tpd.arg_uses_template_parms [j])
3516 error ("type %qT of template argument %qE depends "
3517 "on template parameter(s)",
3518 type,
3519 arg);
3520 break;
3528 if (retrieve_specialization (maintmpl, specargs,
3529 /*class_specializations_p=*/true))
3530 /* We've already got this specialization. */
3531 return decl;
3533 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
3534 = tree_cons (specargs, inner_parms,
3535 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
3536 TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
3537 return decl;
3540 /* Check that a template declaration's use of default arguments is not
3541 invalid. Here, PARMS are the template parameters. IS_PRIMARY is
3542 nonzero if DECL is the thing declared by a primary template.
3543 IS_PARTIAL is nonzero if DECL is a partial specialization.
3546 IS_FRIEND_DECL is nonzero if DECL is a friend function template
3547 declaration (but not a definition); 1 indicates a declaration, 2
3548 indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
3549 emitted for extraneous default arguments.
3551 Returns TRUE if there were no errors found, FALSE otherwise. */
3553 bool
3554 check_default_tmpl_args (tree decl, tree parms, int is_primary,
3555 int is_partial, int is_friend_decl)
3557 const char *msg;
3558 int last_level_to_check;
3559 tree parm_level;
3560 bool no_errors = true;
3562 /* [temp.param]
3564 A default template-argument shall not be specified in a
3565 function template declaration or a function template definition, nor
3566 in the template-parameter-list of the definition of a member of a
3567 class template. */
3569 if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
3570 /* You can't have a function template declaration in a local
3571 scope, nor you can you define a member of a class template in a
3572 local scope. */
3573 return true;
3575 if (current_class_type
3576 && !TYPE_BEING_DEFINED (current_class_type)
3577 && DECL_LANG_SPECIFIC (decl)
3578 /* If this is either a friend defined in the scope of the class
3579 or a member function. */
3580 && (DECL_FUNCTION_MEMBER_P (decl)
3581 ? same_type_p (DECL_CONTEXT (decl), current_class_type)
3582 : DECL_FRIEND_CONTEXT (decl)
3583 ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
3584 : false)
3585 /* And, if it was a member function, it really was defined in
3586 the scope of the class. */
3587 && (!DECL_FUNCTION_MEMBER_P (decl)
3588 || DECL_INITIALIZED_IN_CLASS_P (decl)))
3589 /* We already checked these parameters when the template was
3590 declared, so there's no need to do it again now. This function
3591 was defined in class scope, but we're processing it's body now
3592 that the class is complete. */
3593 return true;
3595 /* Core issue 226 (C++0x only): the following only applies to class
3596 templates. */
3597 if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
3599 /* [temp.param]
3601 If a template-parameter has a default template-argument, all
3602 subsequent template-parameters shall have a default
3603 template-argument supplied. */
3604 for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
3606 tree inner_parms = TREE_VALUE (parm_level);
3607 int ntparms = TREE_VEC_LENGTH (inner_parms);
3608 int seen_def_arg_p = 0;
3609 int i;
3611 for (i = 0; i < ntparms; ++i)
3613 tree parm = TREE_VEC_ELT (inner_parms, i);
3615 if (parm == error_mark_node)
3616 continue;
3618 if (TREE_PURPOSE (parm))
3619 seen_def_arg_p = 1;
3620 else if (seen_def_arg_p)
3622 error ("no default argument for %qD", TREE_VALUE (parm));
3623 /* For better subsequent error-recovery, we indicate that
3624 there should have been a default argument. */
3625 TREE_PURPOSE (parm) = error_mark_node;
3626 no_errors = false;
3632 if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
3633 || is_partial
3634 || !is_primary
3635 || is_friend_decl)
3636 /* For an ordinary class template, default template arguments are
3637 allowed at the innermost level, e.g.:
3638 template <class T = int>
3639 struct S {};
3640 but, in a partial specialization, they're not allowed even
3641 there, as we have in [temp.class.spec]:
3643 The template parameter list of a specialization shall not
3644 contain default template argument values.
3646 So, for a partial specialization, or for a function template
3647 (in C++98/C++03), we look at all of them. */
3649 else
3650 /* But, for a primary class template that is not a partial
3651 specialization we look at all template parameters except the
3652 innermost ones. */
3653 parms = TREE_CHAIN (parms);
3655 /* Figure out what error message to issue. */
3656 if (is_friend_decl == 2)
3657 msg = "default template arguments may not be used in function template friend re-declaration";
3658 else if (is_friend_decl)
3659 msg = "default template arguments may not be used in function template friend declarations";
3660 else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
3661 msg = "default template arguments may not be used in function templates";
3662 else if (is_partial)
3663 msg = "default template arguments may not be used in partial specializations";
3664 else
3665 msg = "default argument for template parameter for class enclosing %qD";
3667 if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
3668 /* If we're inside a class definition, there's no need to
3669 examine the parameters to the class itself. On the one
3670 hand, they will be checked when the class is defined, and,
3671 on the other, default arguments are valid in things like:
3672 template <class T = double>
3673 struct S { template <class U> void f(U); };
3674 Here the default argument for `S' has no bearing on the
3675 declaration of `f'. */
3676 last_level_to_check = template_class_depth (current_class_type) + 1;
3677 else
3678 /* Check everything. */
3679 last_level_to_check = 0;
3681 for (parm_level = parms;
3682 parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
3683 parm_level = TREE_CHAIN (parm_level))
3685 tree inner_parms = TREE_VALUE (parm_level);
3686 int i;
3687 int ntparms;
3689 ntparms = TREE_VEC_LENGTH (inner_parms);
3690 for (i = 0; i < ntparms; ++i)
3692 if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
3693 continue;
3695 if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
3697 if (msg)
3699 no_errors = false;
3700 if (is_friend_decl == 2)
3701 return no_errors;
3703 error (msg, decl);
3704 msg = 0;
3707 /* Clear out the default argument so that we are not
3708 confused later. */
3709 TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
3713 /* At this point, if we're still interested in issuing messages,
3714 they must apply to classes surrounding the object declared. */
3715 if (msg)
3716 msg = "default argument for template parameter for class enclosing %qD";
3719 return no_errors;
3722 /* Worker for push_template_decl_real, called via
3723 for_each_template_parm. DATA is really an int, indicating the
3724 level of the parameters we are interested in. If T is a template
3725 parameter of that level, return nonzero. */
3727 static int
3728 template_parm_this_level_p (tree t, void* data)
3730 int this_level = *(int *)data;
3731 int level;
3733 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3734 level = TEMPLATE_PARM_LEVEL (t);
3735 else
3736 level = TEMPLATE_TYPE_LEVEL (t);
3737 return level == this_level;
3740 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
3741 parameters given by current_template_args, or reuses a
3742 previously existing one, if appropriate. Returns the DECL, or an
3743 equivalent one, if it is replaced via a call to duplicate_decls.
3745 If IS_FRIEND is true, DECL is a friend declaration. */
3747 tree
3748 push_template_decl_real (tree decl, bool is_friend)
3750 tree tmpl;
3751 tree args;
3752 tree info;
3753 tree ctx;
3754 int primary;
3755 int is_partial;
3756 int new_template_p = 0;
3757 /* True if the template is a member template, in the sense of
3758 [temp.mem]. */
3759 bool member_template_p = false;
3761 if (decl == error_mark_node)
3762 return decl;
3764 /* See if this is a partial specialization. */
3765 is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
3766 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
3767 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
3769 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
3770 is_friend = true;
3772 if (is_friend)
3773 /* For a friend, we want the context of the friend function, not
3774 the type of which it is a friend. */
3775 ctx = DECL_CONTEXT (decl);
3776 else if (CP_DECL_CONTEXT (decl)
3777 && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
3778 /* In the case of a virtual function, we want the class in which
3779 it is defined. */
3780 ctx = CP_DECL_CONTEXT (decl);
3781 else
3782 /* Otherwise, if we're currently defining some class, the DECL
3783 is assumed to be a member of the class. */
3784 ctx = current_scope ();
3786 if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
3787 ctx = NULL_TREE;
3789 if (!DECL_CONTEXT (decl))
3790 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
3792 /* See if this is a primary template. */
3793 if (is_friend && ctx)
3794 /* A friend template that specifies a class context, i.e.
3795 template <typename T> friend void A<T>::f();
3796 is not primary. */
3797 primary = 0;
3798 else
3799 primary = template_parm_scope_p ();
3801 if (primary)
3803 if (DECL_CLASS_SCOPE_P (decl))
3804 member_template_p = true;
3805 if (TREE_CODE (decl) == TYPE_DECL
3806 && ANON_AGGRNAME_P (DECL_NAME (decl)))
3807 error ("template class without a name");
3808 else if (TREE_CODE (decl) == FUNCTION_DECL)
3810 if (DECL_DESTRUCTOR_P (decl))
3812 /* [temp.mem]
3814 A destructor shall not be a member template. */
3815 error ("destructor %qD declared as member template", decl);
3816 return error_mark_node;
3818 if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
3819 && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
3820 || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
3821 || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
3822 || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
3823 == void_list_node)))
3825 /* [basic.stc.dynamic.allocation]
3827 An allocation function can be a function
3828 template. ... Template allocation functions shall
3829 have two or more parameters. */
3830 error ("invalid template declaration of %qD", decl);
3831 return error_mark_node;
3834 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3835 && CLASS_TYPE_P (TREE_TYPE (decl)))
3836 /* OK */;
3837 else
3839 error ("template declaration of %q#D", decl);
3840 return error_mark_node;
3844 /* Check to see that the rules regarding the use of default
3845 arguments are not being violated. */
3846 check_default_tmpl_args (decl, current_template_parms,
3847 primary, is_partial, /*is_friend_decl=*/0);
3849 /* Ensure that there are no parameter packs in the type of this
3850 declaration that have not been expanded. */
3851 if (TREE_CODE (decl) == FUNCTION_DECL)
3853 /* Check each of the arguments individually to see if there are
3854 any bare parameter packs. */
3855 tree type = TREE_TYPE (decl);
3856 tree arg = DECL_ARGUMENTS (decl);
3857 tree argtype = TYPE_ARG_TYPES (type);
3859 while (arg && argtype)
3861 if (!FUNCTION_PARAMETER_PACK_P (arg)
3862 && !check_for_bare_parameter_packs (&TREE_TYPE (arg)))
3864 /* This is a PARM_DECL that contains unexpanded parameter
3865 packs. We have already complained about this in the
3866 check_for_bare_parameter_packs call, so just replace
3867 these types with ERROR_MARK_NODE. */
3868 TREE_TYPE (arg) = error_mark_node;
3869 TREE_VALUE (argtype) = error_mark_node;
3872 arg = TREE_CHAIN (arg);
3873 argtype = TREE_CHAIN (argtype);
3876 /* Check for bare parameter packs in the return type and the
3877 exception specifiers. */
3878 if (!check_for_bare_parameter_packs (&TREE_TYPE (type)))
3879 /* Errors were already issued, set return type to int
3880 as the frontend doesn't expect error_mark_node as
3881 the return type. */
3882 TREE_TYPE (type) = integer_type_node;
3883 check_for_bare_parameter_packs (&TYPE_RAISES_EXCEPTIONS (type));
3885 else if (!check_for_bare_parameter_packs (&TREE_TYPE (decl)))
3886 return error_mark_node;
3888 if (is_partial)
3889 return process_partial_specialization (decl);
3891 /* A primary class template can only have one parameter pack, at the
3892 end of the template parameter list. */
3893 if (primary && TREE_CODE (decl) == TYPE_DECL)
3895 tree inner_parms
3896 = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3897 int i, len = TREE_VEC_LENGTH (inner_parms);
3898 for (i = 0; i < len - 1; i++)
3900 tree parm = TREE_VALUE (TREE_VEC_ELT (inner_parms, i));
3902 if (template_parameter_pack_p (parm))
3904 if (TREE_CODE (parm) == PARM_DECL)
3905 error ("parameter pack %qE must be at the end of the"
3906 " template parameter list", parm);
3907 else
3908 error ("parameter pack %qT must be at the end of the"
3909 " template parameter list", TREE_TYPE (parm));
3911 TREE_VALUE (TREE_VEC_ELT (inner_parms, i)) = error_mark_node;
3916 args = current_template_args ();
3918 if (!ctx
3919 || TREE_CODE (ctx) == FUNCTION_DECL
3920 || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
3921 || (is_friend && !DECL_TEMPLATE_INFO (decl)))
3923 if (DECL_LANG_SPECIFIC (decl)
3924 && DECL_TEMPLATE_INFO (decl)
3925 && DECL_TI_TEMPLATE (decl))
3926 tmpl = DECL_TI_TEMPLATE (decl);
3927 /* If DECL is a TYPE_DECL for a class-template, then there won't
3928 be DECL_LANG_SPECIFIC. The information equivalent to
3929 DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead. */
3930 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3931 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3932 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3934 /* Since a template declaration already existed for this
3935 class-type, we must be redeclaring it here. Make sure
3936 that the redeclaration is valid. */
3937 redeclare_class_template (TREE_TYPE (decl),
3938 current_template_parms);
3939 /* We don't need to create a new TEMPLATE_DECL; just use the
3940 one we already had. */
3941 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3943 else
3945 tmpl = build_template_decl (decl, current_template_parms,
3946 member_template_p);
3947 new_template_p = 1;
3949 if (DECL_LANG_SPECIFIC (decl)
3950 && DECL_TEMPLATE_SPECIALIZATION (decl))
3952 /* A specialization of a member template of a template
3953 class. */
3954 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3955 DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
3956 DECL_TEMPLATE_INFO (decl) = NULL_TREE;
3960 else
3962 tree a, t, current, parms;
3963 int i;
3964 tree tinfo = get_template_info (decl);
3966 if (!tinfo)
3968 error ("template definition of non-template %q#D", decl);
3969 return decl;
3972 tmpl = TI_TEMPLATE (tinfo);
3974 if (DECL_FUNCTION_TEMPLATE_P (tmpl)
3975 && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
3976 && DECL_TEMPLATE_SPECIALIZATION (decl)
3977 && DECL_MEMBER_TEMPLATE_P (tmpl))
3979 tree new_tmpl;
3981 /* The declaration is a specialization of a member
3982 template, declared outside the class. Therefore, the
3983 innermost template arguments will be NULL, so we
3984 replace them with the arguments determined by the
3985 earlier call to check_explicit_specialization. */
3986 args = DECL_TI_ARGS (decl);
3988 new_tmpl
3989 = build_template_decl (decl, current_template_parms,
3990 member_template_p);
3991 DECL_TEMPLATE_RESULT (new_tmpl) = decl;
3992 TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
3993 DECL_TI_TEMPLATE (decl) = new_tmpl;
3994 SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
3995 DECL_TEMPLATE_INFO (new_tmpl)
3996 = tree_cons (tmpl, args, NULL_TREE);
3998 register_specialization (new_tmpl,
3999 most_general_template (tmpl),
4000 args,
4001 is_friend);
4002 return decl;
4005 /* Make sure the template headers we got make sense. */
4007 parms = DECL_TEMPLATE_PARMS (tmpl);
4008 i = TMPL_PARMS_DEPTH (parms);
4009 if (TMPL_ARGS_DEPTH (args) != i)
4011 error ("expected %d levels of template parms for %q#D, got %d",
4012 i, decl, TMPL_ARGS_DEPTH (args));
4014 else
4015 for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
4017 a = TMPL_ARGS_LEVEL (args, i);
4018 t = INNERMOST_TEMPLATE_PARMS (parms);
4020 if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
4022 if (current == decl)
4023 error ("got %d template parameters for %q#D",
4024 TREE_VEC_LENGTH (a), decl);
4025 else
4026 error ("got %d template parameters for %q#T",
4027 TREE_VEC_LENGTH (a), current);
4028 error (" but %d required", TREE_VEC_LENGTH (t));
4029 return error_mark_node;
4032 if (current == decl)
4033 current = ctx;
4034 else
4035 current = (TYPE_P (current)
4036 ? TYPE_CONTEXT (current)
4037 : DECL_CONTEXT (current));
4040 /* Check that the parms are used in the appropriate qualifying scopes
4041 in the declarator. */
4042 if (!comp_template_args
4043 (TI_ARGS (tinfo),
4044 TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
4046 error ("\
4047 template arguments to %qD do not match original template %qD",
4048 decl, DECL_TEMPLATE_RESULT (tmpl));
4049 if (!uses_template_parms (TI_ARGS (tinfo)))
4050 inform ("use template<> for an explicit specialization");
4051 /* Avoid crash in import_export_decl. */
4052 DECL_INTERFACE_KNOWN (decl) = 1;
4053 return error_mark_node;
4057 DECL_TEMPLATE_RESULT (tmpl) = decl;
4058 TREE_TYPE (tmpl) = TREE_TYPE (decl);
4060 /* Push template declarations for global functions and types. Note
4061 that we do not try to push a global template friend declared in a
4062 template class; such a thing may well depend on the template
4063 parameters of the class. */
4064 if (new_template_p && !ctx
4065 && !(is_friend && template_class_depth (current_class_type) > 0))
4067 tmpl = pushdecl_namespace_level (tmpl, is_friend);
4068 if (tmpl == error_mark_node)
4069 return error_mark_node;
4071 /* Hide template friend classes that haven't been declared yet. */
4072 if (is_friend && TREE_CODE (decl) == TYPE_DECL)
4074 DECL_ANTICIPATED (tmpl) = 1;
4075 DECL_FRIEND_P (tmpl) = 1;
4079 if (primary)
4081 tree parms = DECL_TEMPLATE_PARMS (tmpl);
4082 int i;
4084 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
4085 if (DECL_CONV_FN_P (tmpl))
4087 int depth = TMPL_PARMS_DEPTH (parms);
4089 /* It is a conversion operator. See if the type converted to
4090 depends on innermost template operands. */
4092 if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
4093 depth))
4094 DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
4097 /* Give template template parms a DECL_CONTEXT of the template
4098 for which they are a parameter. */
4099 parms = INNERMOST_TEMPLATE_PARMS (parms);
4100 for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
4102 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4103 if (TREE_CODE (parm) == TEMPLATE_DECL)
4104 DECL_CONTEXT (parm) = tmpl;
4108 /* The DECL_TI_ARGS of DECL contains full set of arguments referring
4109 back to its most general template. If TMPL is a specialization,
4110 ARGS may only have the innermost set of arguments. Add the missing
4111 argument levels if necessary. */
4112 if (DECL_TEMPLATE_INFO (tmpl))
4113 args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
4115 info = tree_cons (tmpl, args, NULL_TREE);
4117 if (DECL_IMPLICIT_TYPEDEF_P (decl))
4118 SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
4119 else if (DECL_LANG_SPECIFIC (decl))
4120 DECL_TEMPLATE_INFO (decl) = info;
4122 return DECL_TEMPLATE_RESULT (tmpl);
4125 tree
4126 push_template_decl (tree decl)
4128 return push_template_decl_real (decl, false);
4131 /* Called when a class template TYPE is redeclared with the indicated
4132 template PARMS, e.g.:
4134 template <class T> struct S;
4135 template <class T> struct S {}; */
4137 bool
4138 redeclare_class_template (tree type, tree parms)
4140 tree tmpl;
4141 tree tmpl_parms;
4142 int i;
4144 if (!TYPE_TEMPLATE_INFO (type))
4146 error ("%qT is not a template type", type);
4147 return false;
4150 tmpl = TYPE_TI_TEMPLATE (type);
4151 if (!PRIMARY_TEMPLATE_P (tmpl))
4152 /* The type is nested in some template class. Nothing to worry
4153 about here; there are no new template parameters for the nested
4154 type. */
4155 return true;
4157 if (!parms)
4159 error ("template specifiers not specified in declaration of %qD",
4160 tmpl);
4161 return false;
4164 parms = INNERMOST_TEMPLATE_PARMS (parms);
4165 tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
4167 if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
4169 error ("redeclared with %d template parameter(s)",
4170 TREE_VEC_LENGTH (parms));
4171 inform ("previous declaration %q+D used %d template parameter(s)",
4172 tmpl, TREE_VEC_LENGTH (tmpl_parms));
4173 return false;
4176 for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
4178 tree tmpl_parm;
4179 tree parm;
4180 tree tmpl_default;
4181 tree parm_default;
4183 if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
4184 || TREE_VEC_ELT (parms, i) == error_mark_node)
4185 continue;
4187 tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
4188 parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4189 tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
4190 parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
4192 /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
4193 TEMPLATE_DECL. */
4194 if (tmpl_parm != error_mark_node
4195 && (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
4196 || (TREE_CODE (tmpl_parm) != TYPE_DECL
4197 && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))))
4199 error ("template parameter %q+#D", tmpl_parm);
4200 error ("redeclared here as %q#D", parm);
4201 return false;
4204 if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
4206 /* We have in [temp.param]:
4208 A template-parameter may not be given default arguments
4209 by two different declarations in the same scope. */
4210 error ("redefinition of default argument for %q#D", parm);
4211 inform ("%Joriginal definition appeared here", tmpl_parm);
4212 return false;
4215 if (parm_default != NULL_TREE)
4216 /* Update the previous template parameters (which are the ones
4217 that will really count) with the new default value. */
4218 TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
4219 else if (tmpl_default != NULL_TREE)
4220 /* Update the new parameters, too; they'll be used as the
4221 parameters for any members. */
4222 TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
4225 return true;
4228 /* Simplify EXPR if it is a non-dependent expression. Returns the
4229 (possibly simplified) expression. */
4231 tree
4232 fold_non_dependent_expr (tree expr)
4234 if (expr == NULL_TREE)
4235 return NULL_TREE;
4237 /* If we're in a template, but EXPR isn't value dependent, simplify
4238 it. We're supposed to treat:
4240 template <typename T> void f(T[1 + 1]);
4241 template <typename T> void f(T[2]);
4243 as two declarations of the same function, for example. */
4244 if (processing_template_decl
4245 && !type_dependent_expression_p (expr)
4246 && !value_dependent_expression_p (expr))
4248 HOST_WIDE_INT saved_processing_template_decl;
4250 saved_processing_template_decl = processing_template_decl;
4251 processing_template_decl = 0;
4252 expr = tsubst_copy_and_build (expr,
4253 /*args=*/NULL_TREE,
4254 tf_error,
4255 /*in_decl=*/NULL_TREE,
4256 /*function_p=*/false,
4257 /*integral_constant_expression_p=*/true);
4258 processing_template_decl = saved_processing_template_decl;
4260 return expr;
4263 /* EXPR is an expression which is used in a constant-expression context.
4264 For instance, it could be a VAR_DECL with a constant initializer.
4265 Extract the innest constant expression.
4267 This is basically a more powerful version of
4268 integral_constant_value, which can be used also in templates where
4269 initializers can maintain a syntactic rather than semantic form
4270 (even if they are non-dependent, for access-checking purposes). */
4272 static tree
4273 fold_decl_constant_value (tree expr)
4275 tree const_expr = expr;
4278 expr = fold_non_dependent_expr (const_expr);
4279 const_expr = integral_constant_value (expr);
4281 while (expr != const_expr);
4283 return expr;
4286 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
4287 must be a function or a pointer-to-function type, as specified
4288 in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
4289 and check that the resulting function has external linkage. */
4291 static tree
4292 convert_nontype_argument_function (tree type, tree expr)
4294 tree fns = expr;
4295 tree fn, fn_no_ptr;
4297 fn = instantiate_type (type, fns, tf_none);
4298 if (fn == error_mark_node)
4299 return error_mark_node;
4301 fn_no_ptr = fn;
4302 if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
4303 fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
4304 if (TREE_CODE (fn_no_ptr) == BASELINK)
4305 fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
4307 /* [temp.arg.nontype]/1
4309 A template-argument for a non-type, non-template template-parameter
4310 shall be one of:
4311 [...]
4312 -- the address of an object or function with external linkage. */
4313 if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
4315 error ("%qE is not a valid template argument for type %qT "
4316 "because function %qD has not external linkage",
4317 expr, type, fn_no_ptr);
4318 return NULL_TREE;
4321 return fn;
4324 /* Attempt to convert the non-type template parameter EXPR to the
4325 indicated TYPE. If the conversion is successful, return the
4326 converted value. If the conversion is unsuccessful, return
4327 NULL_TREE if we issued an error message, or error_mark_node if we
4328 did not. We issue error messages for out-and-out bad template
4329 parameters, but not simply because the conversion failed, since we
4330 might be just trying to do argument deduction. Both TYPE and EXPR
4331 must be non-dependent.
4333 The conversion follows the special rules described in
4334 [temp.arg.nontype], and it is much more strict than an implicit
4335 conversion.
4337 This function is called twice for each template argument (see
4338 lookup_template_class for a more accurate description of this
4339 problem). This means that we need to handle expressions which
4340 are not valid in a C++ source, but can be created from the
4341 first call (for instance, casts to perform conversions). These
4342 hacks can go away after we fix the double coercion problem. */
4344 static tree
4345 convert_nontype_argument (tree type, tree expr)
4347 tree expr_type;
4349 /* Detect immediately string literals as invalid non-type argument.
4350 This special-case is not needed for correctness (we would easily
4351 catch this later), but only to provide better diagnostic for this
4352 common user mistake. As suggested by DR 100, we do not mention
4353 linkage issues in the diagnostic as this is not the point. */
4354 if (TREE_CODE (expr) == STRING_CST)
4356 error ("%qE is not a valid template argument for type %qT "
4357 "because string literals can never be used in this context",
4358 expr, type);
4359 return NULL_TREE;
4362 /* If we are in a template, EXPR may be non-dependent, but still
4363 have a syntactic, rather than semantic, form. For example, EXPR
4364 might be a SCOPE_REF, rather than the VAR_DECL to which the
4365 SCOPE_REF refers. Preserving the qualifying scope is necessary
4366 so that access checking can be performed when the template is
4367 instantiated -- but here we need the resolved form so that we can
4368 convert the argument. */
4369 expr = fold_non_dependent_expr (expr);
4370 if (error_operand_p (expr))
4371 return error_mark_node;
4372 expr_type = TREE_TYPE (expr);
4374 /* HACK: Due to double coercion, we can get a
4375 NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
4376 which is the tree that we built on the first call (see
4377 below when coercing to reference to object or to reference to
4378 function). We just strip everything and get to the arg.
4379 See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
4380 for examples. */
4381 if (TREE_CODE (expr) == NOP_EXPR)
4383 if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
4385 /* ??? Maybe we could use convert_from_reference here, but we
4386 would need to relax its constraints because the NOP_EXPR
4387 could actually change the type to something more cv-qualified,
4388 and this is not folded by convert_from_reference. */
4389 tree addr = TREE_OPERAND (expr, 0);
4390 gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
4391 gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
4392 gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
4393 gcc_assert (same_type_ignoring_top_level_qualifiers_p
4394 (TREE_TYPE (expr_type),
4395 TREE_TYPE (TREE_TYPE (addr))));
4397 expr = TREE_OPERAND (addr, 0);
4398 expr_type = TREE_TYPE (expr);
4401 /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
4402 parameter is a pointer to object, through decay and
4403 qualification conversion. Let's strip everything. */
4404 else if (TYPE_PTROBV_P (type))
4406 STRIP_NOPS (expr);
4407 gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
4408 gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
4409 /* Skip the ADDR_EXPR only if it is part of the decay for
4410 an array. Otherwise, it is part of the original argument
4411 in the source code. */
4412 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
4413 expr = TREE_OPERAND (expr, 0);
4414 expr_type = TREE_TYPE (expr);
4418 /* [temp.arg.nontype]/5, bullet 1
4420 For a non-type template-parameter of integral or enumeration type,
4421 integral promotions (_conv.prom_) and integral conversions
4422 (_conv.integral_) are applied. */
4423 if (INTEGRAL_TYPE_P (type))
4425 if (!INTEGRAL_TYPE_P (expr_type))
4426 return error_mark_node;
4428 expr = fold_decl_constant_value (expr);
4429 /* Notice that there are constant expressions like '4 % 0' which
4430 do not fold into integer constants. */
4431 if (TREE_CODE (expr) != INTEGER_CST)
4433 error ("%qE is not a valid template argument for type %qT "
4434 "because it is a non-constant expression", expr, type);
4435 return NULL_TREE;
4438 /* At this point, an implicit conversion does what we want,
4439 because we already know that the expression is of integral
4440 type. */
4441 expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
4442 if (expr == error_mark_node)
4443 return error_mark_node;
4445 /* Conversion was allowed: fold it to a bare integer constant. */
4446 expr = fold (expr);
4448 /* [temp.arg.nontype]/5, bullet 2
4450 For a non-type template-parameter of type pointer to object,
4451 qualification conversions (_conv.qual_) and the array-to-pointer
4452 conversion (_conv.array_) are applied. */
4453 else if (TYPE_PTROBV_P (type))
4455 /* [temp.arg.nontype]/1 (TC1 version, DR 49):
4457 A template-argument for a non-type, non-template template-parameter
4458 shall be one of: [...]
4460 -- the name of a non-type template-parameter;
4461 -- the address of an object or function with external linkage, [...]
4462 expressed as "& id-expression" where the & is optional if the name
4463 refers to a function or array, or if the corresponding
4464 template-parameter is a reference.
4466 Here, we do not care about functions, as they are invalid anyway
4467 for a parameter of type pointer-to-object. */
4469 if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
4470 /* Non-type template parameters are OK. */
4472 else if (TREE_CODE (expr) != ADDR_EXPR
4473 && TREE_CODE (expr_type) != ARRAY_TYPE)
4475 if (TREE_CODE (expr) == VAR_DECL)
4477 error ("%qD is not a valid template argument "
4478 "because %qD is a variable, not the address of "
4479 "a variable",
4480 expr, expr);
4481 return NULL_TREE;
4483 /* Other values, like integer constants, might be valid
4484 non-type arguments of some other type. */
4485 return error_mark_node;
4487 else
4489 tree decl;
4491 decl = ((TREE_CODE (expr) == ADDR_EXPR)
4492 ? TREE_OPERAND (expr, 0) : expr);
4493 if (TREE_CODE (decl) != VAR_DECL)
4495 error ("%qE is not a valid template argument of type %qT "
4496 "because %qE is not a variable",
4497 expr, type, decl);
4498 return NULL_TREE;
4500 else if (!DECL_EXTERNAL_LINKAGE_P (decl))
4502 error ("%qE is not a valid template argument of type %qT "
4503 "because %qD does not have external linkage",
4504 expr, type, decl);
4505 return NULL_TREE;
4509 expr = decay_conversion (expr);
4510 if (expr == error_mark_node)
4511 return error_mark_node;
4513 expr = perform_qualification_conversions (type, expr);
4514 if (expr == error_mark_node)
4515 return error_mark_node;
4517 /* [temp.arg.nontype]/5, bullet 3
4519 For a non-type template-parameter of type reference to object, no
4520 conversions apply. The type referred to by the reference may be more
4521 cv-qualified than the (otherwise identical) type of the
4522 template-argument. The template-parameter is bound directly to the
4523 template-argument, which must be an lvalue. */
4524 else if (TYPE_REF_OBJ_P (type))
4526 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
4527 expr_type))
4528 return error_mark_node;
4530 if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
4532 error ("%qE is not a valid template argument for type %qT "
4533 "because of conflicts in cv-qualification", expr, type);
4534 return NULL_TREE;
4537 if (!real_lvalue_p (expr))
4539 error ("%qE is not a valid template argument for type %qT "
4540 "because it is not an lvalue", expr, type);
4541 return NULL_TREE;
4544 /* [temp.arg.nontype]/1
4546 A template-argument for a non-type, non-template template-parameter
4547 shall be one of: [...]
4549 -- the address of an object or function with external linkage. */
4550 if (!DECL_EXTERNAL_LINKAGE_P (expr))
4552 error ("%qE is not a valid template argument for type %qT "
4553 "because object %qD has not external linkage",
4554 expr, type, expr);
4555 return NULL_TREE;
4558 expr = build_nop (type, build_address (expr));
4560 /* [temp.arg.nontype]/5, bullet 4
4562 For a non-type template-parameter of type pointer to function, only
4563 the function-to-pointer conversion (_conv.func_) is applied. If the
4564 template-argument represents a set of overloaded functions (or a
4565 pointer to such), the matching function is selected from the set
4566 (_over.over_). */
4567 else if (TYPE_PTRFN_P (type))
4569 /* If the argument is a template-id, we might not have enough
4570 context information to decay the pointer. */
4571 if (!type_unknown_p (expr_type))
4573 expr = decay_conversion (expr);
4574 if (expr == error_mark_node)
4575 return error_mark_node;
4578 expr = convert_nontype_argument_function (type, expr);
4579 if (!expr || expr == error_mark_node)
4580 return expr;
4582 /* [temp.arg.nontype]/5, bullet 5
4584 For a non-type template-parameter of type reference to function, no
4585 conversions apply. If the template-argument represents a set of
4586 overloaded functions, the matching function is selected from the set
4587 (_over.over_). */
4588 else if (TYPE_REFFN_P (type))
4590 if (TREE_CODE (expr) == ADDR_EXPR)
4592 error ("%qE is not a valid template argument for type %qT "
4593 "because it is a pointer", expr, type);
4594 inform ("try using %qE instead", TREE_OPERAND (expr, 0));
4595 return NULL_TREE;
4598 expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
4599 if (!expr || expr == error_mark_node)
4600 return expr;
4602 expr = build_nop (type, build_address (expr));
4604 /* [temp.arg.nontype]/5, bullet 6
4606 For a non-type template-parameter of type pointer to member function,
4607 no conversions apply. If the template-argument represents a set of
4608 overloaded member functions, the matching member function is selected
4609 from the set (_over.over_). */
4610 else if (TYPE_PTRMEMFUNC_P (type))
4612 expr = instantiate_type (type, expr, tf_none);
4613 if (expr == error_mark_node)
4614 return error_mark_node;
4616 /* There is no way to disable standard conversions in
4617 resolve_address_of_overloaded_function (called by
4618 instantiate_type). It is possible that the call succeeded by
4619 converting &B::I to &D::I (where B is a base of D), so we need
4620 to reject this conversion here.
4622 Actually, even if there was a way to disable standard conversions,
4623 it would still be better to reject them here so that we can
4624 provide a superior diagnostic. */
4625 if (!same_type_p (TREE_TYPE (expr), type))
4627 /* Make sure we are just one standard conversion off. */
4628 gcc_assert (can_convert (type, TREE_TYPE (expr)));
4629 error ("%qE is not a valid template argument for type %qT "
4630 "because it is of type %qT", expr, type,
4631 TREE_TYPE (expr));
4632 inform ("standard conversions are not allowed in this context");
4633 return NULL_TREE;
4636 /* [temp.arg.nontype]/5, bullet 7
4638 For a non-type template-parameter of type pointer to data member,
4639 qualification conversions (_conv.qual_) are applied. */
4640 else if (TYPE_PTRMEM_P (type))
4642 expr = perform_qualification_conversions (type, expr);
4643 if (expr == error_mark_node)
4644 return expr;
4646 /* A template non-type parameter must be one of the above. */
4647 else
4648 gcc_unreachable ();
4650 /* Sanity check: did we actually convert the argument to the
4651 right type? */
4652 gcc_assert (same_type_p (type, TREE_TYPE (expr)));
4653 return expr;
4657 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
4658 template template parameters. Both PARM_PARMS and ARG_PARMS are
4659 vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
4660 or PARM_DECL.
4662 Consider the example:
4663 template <class T> class A;
4664 template<template <class U> class TT> class B;
4666 For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
4667 the parameters to A, and OUTER_ARGS contains A. */
4669 static int
4670 coerce_template_template_parms (tree parm_parms,
4671 tree arg_parms,
4672 tsubst_flags_t complain,
4673 tree in_decl,
4674 tree outer_args)
4676 int nparms, nargs, i;
4677 tree parm, arg;
4679 gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
4680 gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
4682 nparms = TREE_VEC_LENGTH (parm_parms);
4683 nargs = TREE_VEC_LENGTH (arg_parms);
4685 if (nargs != nparms)
4686 return 0;
4688 for (i = 0; i < nparms; ++i)
4690 if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
4691 || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
4692 continue;
4694 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
4695 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
4697 if (arg == NULL_TREE || arg == error_mark_node
4698 || parm == NULL_TREE || parm == error_mark_node)
4699 return 0;
4701 if (TREE_CODE (arg) != TREE_CODE (parm))
4702 return 0;
4704 switch (TREE_CODE (parm))
4706 case TEMPLATE_DECL:
4707 /* We encounter instantiations of templates like
4708 template <template <template <class> class> class TT>
4709 class C; */
4711 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4712 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
4714 if (!coerce_template_template_parms
4715 (parmparm, argparm, complain, in_decl, outer_args))
4716 return 0;
4718 /* Fall through. */
4720 case TYPE_DECL:
4721 if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))
4722 != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg)))
4723 /* One is a parameter pack, the other is not. */
4724 return 0;
4725 break;
4727 case PARM_DECL:
4728 /* The tsubst call is used to handle cases such as
4730 template <int> class C {};
4731 template <class T, template <T> class TT> class D {};
4732 D<int, C> d;
4734 i.e. the parameter list of TT depends on earlier parameters. */
4735 if (!dependent_type_p (TREE_TYPE (arg))
4736 && !same_type_p
4737 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
4738 TREE_TYPE (arg)))
4739 return 0;
4741 if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
4742 != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg)))
4743 /* One is a parameter pack, the other is not. */
4744 return 0;
4745 break;
4747 default:
4748 gcc_unreachable ();
4751 return 1;
4754 /* Verifies that the deduced template arguments (in TARGS) for the
4755 template template parameters (in TPARMS) represent valid bindings,
4756 by comparing the template parameter list of each template argument
4757 to the template parameter list of its corresponding template
4758 template parameter, in accordance with DR150. This
4759 routine can only be called after all template arguments have been
4760 deduced. It will return TRUE if all of the template template
4761 parameter bindings are okay, FALSE otherwise. */
4762 bool
4763 template_template_parm_bindings_ok_p (tree tparms, tree targs)
4765 int i, ntparms = TREE_VEC_LENGTH (tparms);
4767 targs = INNERMOST_TEMPLATE_ARGS (targs);
4769 for (i = 0; i < ntparms; ++i)
4771 tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
4772 tree targ = TREE_VEC_ELT (targs, i);
4774 if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
4776 tree packed_args = NULL_TREE;
4777 int idx, len = 1;
4779 if (ARGUMENT_PACK_P (targ))
4781 /* Look inside the argument pack. */
4782 packed_args = ARGUMENT_PACK_ARGS (targ);
4783 len = TREE_VEC_LENGTH (packed_args);
4786 for (idx = 0; idx < len; ++idx)
4788 tree targ_parms = NULL_TREE;
4790 if (packed_args)
4791 /* Extract the next argument from the argument
4792 pack. */
4793 targ = TREE_VEC_ELT (packed_args, idx);
4795 if (PACK_EXPANSION_P (targ))
4796 /* Look at the pattern of the pack expansion. */
4797 targ = PACK_EXPANSION_PATTERN (targ);
4799 /* Extract the template parameters from the template
4800 argument. */
4801 if (TREE_CODE (targ) == TEMPLATE_DECL)
4802 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
4803 else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
4804 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
4806 /* Verify that we can coerce the template template
4807 parameters from the template argument to the template
4808 parameter. This requires an exact match. */
4809 if (targ_parms
4810 && !coerce_template_template_parms
4811 (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
4812 targ_parms,
4813 tf_none,
4814 tparm,
4815 targs))
4816 return false;
4821 /* Everything is okay. */
4822 return true;
4825 /* Convert the indicated template ARG as necessary to match the
4826 indicated template PARM. Returns the converted ARG, or
4827 error_mark_node if the conversion was unsuccessful. Error and
4828 warning messages are issued under control of COMPLAIN. This
4829 conversion is for the Ith parameter in the parameter list. ARGS is
4830 the full set of template arguments deduced so far. */
4832 static tree
4833 convert_template_argument (tree parm,
4834 tree arg,
4835 tree args,
4836 tsubst_flags_t complain,
4837 int i,
4838 tree in_decl)
4840 tree orig_arg;
4841 tree val;
4842 int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
4844 if (TREE_CODE (arg) == TREE_LIST
4845 && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
4847 /* The template argument was the name of some
4848 member function. That's usually
4849 invalid, but static members are OK. In any
4850 case, grab the underlying fields/functions
4851 and issue an error later if required. */
4852 orig_arg = TREE_VALUE (arg);
4853 TREE_TYPE (arg) = unknown_type_node;
4856 orig_arg = arg;
4858 requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
4859 requires_type = (TREE_CODE (parm) == TYPE_DECL
4860 || requires_tmpl_type);
4862 /* When determining whether an argument pack expansion is a template,
4863 look at the pattern. */
4864 if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
4865 arg = PACK_EXPANSION_PATTERN (arg);
4867 is_tmpl_type =
4868 ((TREE_CODE (arg) == TEMPLATE_DECL
4869 && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
4870 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4871 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
4873 if (is_tmpl_type
4874 && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4875 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
4876 arg = TYPE_STUB_DECL (arg);
4878 is_type = TYPE_P (arg) || is_tmpl_type;
4880 if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
4881 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
4883 pedwarn ("to refer to a type member of a template parameter, "
4884 "use %<typename %E%>", orig_arg);
4886 orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
4887 TREE_OPERAND (arg, 1),
4888 typename_type,
4889 complain & tf_error);
4890 arg = orig_arg;
4891 is_type = 1;
4893 if (is_type != requires_type)
4895 if (in_decl)
4897 if (complain & tf_error)
4899 error ("type/value mismatch at argument %d in template "
4900 "parameter list for %qD",
4901 i + 1, in_decl);
4902 if (is_type)
4903 error (" expected a constant of type %qT, got %qT",
4904 TREE_TYPE (parm),
4905 (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
4906 else if (requires_tmpl_type)
4907 error (" expected a class template, got %qE", orig_arg);
4908 else
4909 error (" expected a type, got %qE", orig_arg);
4912 return error_mark_node;
4914 if (is_tmpl_type ^ requires_tmpl_type)
4916 if (in_decl && (complain & tf_error))
4918 error ("type/value mismatch at argument %d in template "
4919 "parameter list for %qD",
4920 i + 1, in_decl);
4921 if (is_tmpl_type)
4922 error (" expected a type, got %qT", DECL_NAME (arg));
4923 else
4924 error (" expected a class template, got %qT", orig_arg);
4926 return error_mark_node;
4929 if (is_type)
4931 if (requires_tmpl_type)
4933 if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
4934 /* The number of argument required is not known yet.
4935 Just accept it for now. */
4936 val = TREE_TYPE (arg);
4937 else
4939 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4940 tree argparm;
4942 argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
4944 if (coerce_template_template_parms (parmparm, argparm,
4945 complain, in_decl,
4946 args))
4948 val = orig_arg;
4950 /* TEMPLATE_TEMPLATE_PARM node is preferred over
4951 TEMPLATE_DECL. */
4952 if (val != error_mark_node)
4954 if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
4955 val = TREE_TYPE (val);
4956 else if (TREE_CODE (val) == TYPE_PACK_EXPANSION
4957 && DECL_TEMPLATE_TEMPLATE_PARM_P (arg))
4959 val = TREE_TYPE (arg);
4960 val = make_pack_expansion (val);
4964 else
4966 if (in_decl && (complain & tf_error))
4968 error ("type/value mismatch at argument %d in "
4969 "template parameter list for %qD",
4970 i + 1, in_decl);
4971 error (" expected a template of type %qD, got %qD",
4972 parm, orig_arg);
4975 val = error_mark_node;
4979 else
4980 val = orig_arg;
4981 /* We only form one instance of each template specialization.
4982 Therefore, if we use a non-canonical variant (i.e., a
4983 typedef), any future messages referring to the type will use
4984 the typedef, which is confusing if those future uses do not
4985 themselves also use the typedef. */
4986 if (TYPE_P (val))
4987 val = canonical_type_variant (val);
4989 else
4991 tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
4993 if (invalid_nontype_parm_type_p (t, complain))
4994 return error_mark_node;
4996 if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
4997 /* We used to call digest_init here. However, digest_init
4998 will report errors, which we don't want when complain
4999 is zero. More importantly, digest_init will try too
5000 hard to convert things: for example, `0' should not be
5001 converted to pointer type at this point according to
5002 the standard. Accepting this is not merely an
5003 extension, since deciding whether or not these
5004 conversions can occur is part of determining which
5005 function template to call, or whether a given explicit
5006 argument specification is valid. */
5007 val = convert_nontype_argument (t, orig_arg);
5008 else
5009 val = orig_arg;
5011 if (val == NULL_TREE)
5012 val = error_mark_node;
5013 else if (val == error_mark_node && (complain & tf_error))
5014 error ("could not convert template argument %qE to %qT", orig_arg, t);
5017 return val;
5020 /* Coerces the remaining template arguments in INNER_ARGS (from
5021 ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
5022 Returns the coerced argument pack. PARM_IDX is the position of this
5023 parameter in the template parameter list. ARGS is the original
5024 template argument list. */
5025 static tree
5026 coerce_template_parameter_pack (tree parms,
5027 int parm_idx,
5028 tree args,
5029 tree inner_args,
5030 int arg_idx,
5031 tree new_args,
5032 int* lost,
5033 tree in_decl,
5034 tsubst_flags_t complain)
5036 tree parm = TREE_VEC_ELT (parms, parm_idx);
5037 int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5038 tree packed_args;
5039 tree argument_pack;
5040 tree packed_types = NULL_TREE;
5042 if (arg_idx > nargs)
5043 arg_idx = nargs;
5045 packed_args = make_tree_vec (nargs - arg_idx);
5047 if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
5048 && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
5050 /* When the template parameter is a non-type template
5051 parameter pack whose type uses parameter packs, we need
5052 to look at each of the template arguments
5053 separately. Build a vector of the types for these
5054 non-type template parameters in PACKED_TYPES. */
5055 tree expansion
5056 = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
5057 packed_types = tsubst_pack_expansion (expansion, args,
5058 complain, in_decl);
5060 if (packed_types == error_mark_node)
5061 return error_mark_node;
5063 /* Check that we have the right number of arguments. */
5064 if (arg_idx < nargs
5065 && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
5066 && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
5068 int needed_parms
5069 = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
5070 error ("wrong number of template arguments (%d, should be %d)",
5071 nargs, needed_parms);
5072 return error_mark_node;
5075 /* If we aren't able to check the actual arguments now
5076 (because they haven't been expanded yet), we can at least
5077 verify that all of the types used for the non-type
5078 template parameter pack are, in fact, valid for non-type
5079 template parameters. */
5080 if (arg_idx < nargs
5081 && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
5083 int j, len = TREE_VEC_LENGTH (packed_types);
5084 for (j = 0; j < len; ++j)
5086 tree t = TREE_VEC_ELT (packed_types, j);
5087 if (invalid_nontype_parm_type_p (t, complain))
5088 return error_mark_node;
5093 /* Convert the remaining arguments, which will be a part of the
5094 parameter pack "parm". */
5095 for (; arg_idx < nargs; ++arg_idx)
5097 tree arg = TREE_VEC_ELT (inner_args, arg_idx);
5098 tree actual_parm = TREE_VALUE (parm);
5100 if (packed_types && !PACK_EXPANSION_P (arg))
5102 /* When we have a vector of types (corresponding to the
5103 non-type template parameter pack that uses parameter
5104 packs in its type, as mention above), and the
5105 argument is not an expansion (which expands to a
5106 currently unknown number of arguments), clone the
5107 parm and give it the next type in PACKED_TYPES. */
5108 actual_parm = copy_node (actual_parm);
5109 TREE_TYPE (actual_parm) =
5110 TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
5113 if (arg != error_mark_node)
5114 arg = convert_template_argument (actual_parm,
5115 arg, new_args, complain, parm_idx,
5116 in_decl);
5117 if (arg == error_mark_node)
5118 (*lost)++;
5119 TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg;
5122 if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
5123 || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
5124 argument_pack = make_node (TYPE_ARGUMENT_PACK);
5125 else
5127 argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
5128 TREE_TYPE (argument_pack)
5129 = tsubst (TREE_TYPE (TREE_VALUE (parm)), args, complain, in_decl);
5130 TREE_CONSTANT (argument_pack) = 1;
5133 SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
5134 return argument_pack;
5137 /* Convert all template arguments to their appropriate types, and
5138 return a vector containing the innermost resulting template
5139 arguments. If any error occurs, return error_mark_node. Error and
5140 warning messages are issued under control of COMPLAIN.
5142 If REQUIRE_ALL_ARGS is false, argument deduction will be performed
5143 for arguments not specified in ARGS. Otherwise, if
5144 USE_DEFAULT_ARGS is true, default arguments will be used to fill in
5145 unspecified arguments. If REQUIRE_ALL_ARGS is true, but
5146 USE_DEFAULT_ARGS is false, then all arguments must be specified in
5147 ARGS. */
5149 static tree
5150 coerce_template_parms (tree parms,
5151 tree args,
5152 tree in_decl,
5153 tsubst_flags_t complain,
5154 bool require_all_args,
5155 bool use_default_args)
5157 int nparms, nargs, parm_idx, arg_idx, lost = 0;
5158 tree inner_args;
5159 tree new_args;
5160 tree new_inner_args;
5161 bool saved_skip_evaluation;
5163 /* When used as a boolean value, indicates whether this is a
5164 variadic template parameter list. Since it's an int, we can also
5165 subtract it from nparms to get the number of non-variadic
5166 parameters. */
5167 int variadic_p = 0;
5169 inner_args
5170 = expand_template_argument_pack (INNERMOST_TEMPLATE_ARGS (args));
5172 nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5173 nparms = TREE_VEC_LENGTH (parms);
5175 /* Determine if there are any parameter packs. */
5176 for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
5178 tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
5179 if (template_parameter_pack_p (tparm))
5181 variadic_p = 1;
5182 break;
5186 if ((nargs > nparms - variadic_p && !variadic_p)
5187 || (nargs < nparms - variadic_p
5188 && require_all_args
5189 && (!use_default_args
5190 || (TREE_VEC_ELT (parms, nargs) != error_mark_node
5191 && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
5193 if (complain & tf_error)
5195 const char *or_more = "";
5196 if (variadic_p)
5198 or_more = " or more";
5199 --nparms;
5202 error ("wrong number of template arguments (%d, should be %d%s)",
5203 nargs, nparms, or_more);
5205 if (in_decl)
5206 error ("provided for %q+D", in_decl);
5209 return error_mark_node;
5212 /* We need to evaluate the template arguments, even though this
5213 template-id may be nested within a "sizeof". */
5214 saved_skip_evaluation = skip_evaluation;
5215 skip_evaluation = false;
5216 new_inner_args = make_tree_vec (nparms);
5217 new_args = add_outermost_template_args (args, new_inner_args);
5218 for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
5220 tree arg;
5221 tree parm;
5223 /* Get the Ith template parameter. */
5224 parm = TREE_VEC_ELT (parms, parm_idx);
5226 if (parm == error_mark_node)
5228 TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
5229 continue;
5232 /* Calculate the next argument. */
5233 if (template_parameter_pack_p (TREE_VALUE (parm)))
5235 /* All remaining arguments will be placed in the
5236 template parameter pack PARM. */
5237 arg = coerce_template_parameter_pack (parms, parm_idx, args,
5238 inner_args, arg_idx,
5239 new_args, &lost,
5240 in_decl, complain);
5242 /* Store this argument. */
5243 if (arg == error_mark_node)
5244 lost++;
5245 TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
5247 /* We are done with all of the arguments. */
5248 arg_idx = nargs;
5250 continue;
5252 else if (arg_idx < nargs)
5254 arg = TREE_VEC_ELT (inner_args, arg_idx);
5256 if (arg && PACK_EXPANSION_P (arg))
5258 if (complain & tf_error)
5260 /* If ARG is a pack expansion, but PARM is not a
5261 template parameter pack (if it were, we would have
5262 handled it above), we're trying to expand into a
5263 fixed-length argument list. */
5264 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
5265 error ("cannot expand %<%E%> into a fixed-length "
5266 "argument list", arg);
5267 else
5268 error ("cannot expand %<%T%> into a fixed-length "
5269 "argument list", arg);
5271 return error_mark_node;
5274 else if (require_all_args)
5275 /* There must be a default arg in this case. */
5276 arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
5277 complain, in_decl);
5278 else
5279 break;
5281 if (arg == error_mark_node)
5283 if (complain & tf_error)
5284 error ("template argument %d is invalid", arg_idx + 1);
5286 else if (!arg)
5287 /* This only occurs if there was an error in the template
5288 parameter list itself (which we would already have
5289 reported) that we are trying to recover from, e.g., a class
5290 template with a parameter list such as
5291 template<typename..., typename>. */
5292 return error_mark_node;
5293 else
5294 arg = convert_template_argument (TREE_VALUE (parm),
5295 arg, new_args, complain,
5296 parm_idx, in_decl);
5298 if (arg == error_mark_node)
5299 lost++;
5300 TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
5302 skip_evaluation = saved_skip_evaluation;
5304 if (lost)
5305 return error_mark_node;
5307 return new_inner_args;
5310 /* Returns 1 if template args OT and NT are equivalent. */
5312 static int
5313 template_args_equal (tree ot, tree nt)
5315 if (nt == ot)
5316 return 1;
5318 if (TREE_CODE (nt) == TREE_VEC)
5319 /* For member templates */
5320 return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
5321 else if (PACK_EXPANSION_P (ot))
5322 return PACK_EXPANSION_P (nt)
5323 && template_args_equal (PACK_EXPANSION_PATTERN (ot),
5324 PACK_EXPANSION_PATTERN (nt));
5325 else if (TYPE_P (nt))
5326 return TYPE_P (ot) && same_type_p (ot, nt);
5327 else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
5328 return 0;
5329 else
5330 return cp_tree_equal (ot, nt);
5333 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
5334 of template arguments. Returns 0 otherwise. */
5337 comp_template_args (tree oldargs, tree newargs)
5339 int i;
5341 oldargs = expand_template_argument_pack (oldargs);
5342 newargs = expand_template_argument_pack (newargs);
5344 if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
5345 return 0;
5347 for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
5349 tree nt = TREE_VEC_ELT (newargs, i);
5350 tree ot = TREE_VEC_ELT (oldargs, i);
5352 if (! template_args_equal (ot, nt))
5353 return 0;
5355 return 1;
5358 static void
5359 add_pending_template (tree d)
5361 tree ti = (TYPE_P (d)
5362 ? CLASSTYPE_TEMPLATE_INFO (d)
5363 : DECL_TEMPLATE_INFO (d));
5364 struct pending_template *pt;
5365 int level;
5367 if (TI_PENDING_TEMPLATE_FLAG (ti))
5368 return;
5370 /* We are called both from instantiate_decl, where we've already had a
5371 tinst_level pushed, and instantiate_template, where we haven't.
5372 Compensate. */
5373 level = !current_tinst_level || current_tinst_level->decl != d;
5375 if (level)
5376 push_tinst_level (d);
5378 pt = GGC_NEW (struct pending_template);
5379 pt->next = NULL;
5380 pt->tinst = current_tinst_level;
5381 if (last_pending_template)
5382 last_pending_template->next = pt;
5383 else
5384 pending_templates = pt;
5386 last_pending_template = pt;
5388 TI_PENDING_TEMPLATE_FLAG (ti) = 1;
5390 if (level)
5391 pop_tinst_level ();
5395 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
5396 ARGLIST. Valid choices for FNS are given in the cp-tree.def
5397 documentation for TEMPLATE_ID_EXPR. */
5399 tree
5400 lookup_template_function (tree fns, tree arglist)
5402 tree type;
5404 if (fns == error_mark_node || arglist == error_mark_node)
5405 return error_mark_node;
5407 gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
5408 gcc_assert (fns && (is_overloaded_fn (fns)
5409 || TREE_CODE (fns) == IDENTIFIER_NODE));
5411 if (BASELINK_P (fns))
5413 BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
5414 unknown_type_node,
5415 BASELINK_FUNCTIONS (fns),
5416 arglist);
5417 return fns;
5420 type = TREE_TYPE (fns);
5421 if (TREE_CODE (fns) == OVERLOAD || !type)
5422 type = unknown_type_node;
5424 return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
5427 /* Within the scope of a template class S<T>, the name S gets bound
5428 (in build_self_reference) to a TYPE_DECL for the class, not a
5429 TEMPLATE_DECL. If DECL is a TYPE_DECL for current_class_type,
5430 or one of its enclosing classes, and that type is a template,
5431 return the associated TEMPLATE_DECL. Otherwise, the original
5432 DECL is returned. */
5434 tree
5435 maybe_get_template_decl_from_type_decl (tree decl)
5437 return (decl != NULL_TREE
5438 && TREE_CODE (decl) == TYPE_DECL
5439 && DECL_ARTIFICIAL (decl)
5440 && CLASS_TYPE_P (TREE_TYPE (decl))
5441 && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
5442 ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
5445 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
5446 parameters, find the desired type.
5448 D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
5450 IN_DECL, if non-NULL, is the template declaration we are trying to
5451 instantiate.
5453 If ENTERING_SCOPE is nonzero, we are about to enter the scope of
5454 the class we are looking up.
5456 Issue error and warning messages under control of COMPLAIN.
5458 If the template class is really a local class in a template
5459 function, then the FUNCTION_CONTEXT is the function in which it is
5460 being instantiated.
5462 ??? Note that this function is currently called *twice* for each
5463 template-id: the first time from the parser, while creating the
5464 incomplete type (finish_template_type), and the second type during the
5465 real instantiation (instantiate_template_class). This is surely something
5466 that we want to avoid. It also causes some problems with argument
5467 coercion (see convert_nontype_argument for more information on this). */
5469 tree
5470 lookup_template_class (tree d1,
5471 tree arglist,
5472 tree in_decl,
5473 tree context,
5474 int entering_scope,
5475 tsubst_flags_t complain)
5477 tree template = NULL_TREE, parmlist;
5478 tree t;
5480 timevar_push (TV_NAME_LOOKUP);
5482 if (TREE_CODE (d1) == IDENTIFIER_NODE)
5484 tree value = innermost_non_namespace_value (d1);
5485 if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
5486 template = value;
5487 else
5489 if (context)
5490 push_decl_namespace (context);
5491 template = lookup_name (d1);
5492 template = maybe_get_template_decl_from_type_decl (template);
5493 if (context)
5494 pop_decl_namespace ();
5496 if (template)
5497 context = DECL_CONTEXT (template);
5499 else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
5501 tree type = TREE_TYPE (d1);
5503 /* If we are declaring a constructor, say A<T>::A<T>, we will get
5504 an implicit typename for the second A. Deal with it. */
5505 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5506 type = TREE_TYPE (type);
5508 if (CLASSTYPE_TEMPLATE_INFO (type))
5510 template = CLASSTYPE_TI_TEMPLATE (type);
5511 d1 = DECL_NAME (template);
5514 else if (TREE_CODE (d1) == ENUMERAL_TYPE
5515 || (TYPE_P (d1) && IS_AGGR_TYPE (d1)))
5517 template = TYPE_TI_TEMPLATE (d1);
5518 d1 = DECL_NAME (template);
5520 else if (TREE_CODE (d1) == TEMPLATE_DECL
5521 && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
5523 template = d1;
5524 d1 = DECL_NAME (template);
5525 context = DECL_CONTEXT (template);
5528 /* Issue an error message if we didn't find a template. */
5529 if (! template)
5531 if (complain & tf_error)
5532 error ("%qT is not a template", d1);
5533 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5536 if (TREE_CODE (template) != TEMPLATE_DECL
5537 /* Make sure it's a user visible template, if it was named by
5538 the user. */
5539 || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (template)
5540 && !PRIMARY_TEMPLATE_P (template)))
5542 if (complain & tf_error)
5544 error ("non-template type %qT used as a template", d1);
5545 if (in_decl)
5546 error ("for template declaration %q+D", in_decl);
5548 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5551 complain &= ~tf_user;
5553 if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
5555 /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
5556 template arguments */
5558 tree parm;
5559 tree arglist2;
5560 tree outer;
5562 parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
5564 /* Consider an example where a template template parameter declared as
5566 template <class T, class U = std::allocator<T> > class TT
5568 The template parameter level of T and U are one level larger than
5569 of TT. To proper process the default argument of U, say when an
5570 instantiation `TT<int>' is seen, we need to build the full
5571 arguments containing {int} as the innermost level. Outer levels,
5572 available when not appearing as default template argument, can be
5573 obtained from the arguments of the enclosing template.
5575 Suppose that TT is later substituted with std::vector. The above
5576 instantiation is `TT<int, std::allocator<T> >' with TT at
5577 level 1, and T at level 2, while the template arguments at level 1
5578 becomes {std::vector} and the inner level 2 is {int}. */
5580 outer = DECL_CONTEXT (template);
5581 if (outer)
5582 outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
5583 else if (current_template_parms)
5584 /* This is an argument of the current template, so we haven't set
5585 DECL_CONTEXT yet. */
5586 outer = current_template_args ();
5588 if (outer)
5589 arglist = add_to_template_args (outer, arglist);
5591 arglist2 = coerce_template_parms (parmlist, arglist, template,
5592 complain,
5593 /*require_all_args=*/true,
5594 /*use_default_args=*/true);
5595 if (arglist2 == error_mark_node
5596 || (!uses_template_parms (arglist2)
5597 && check_instantiated_args (template, arglist2, complain)))
5598 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5600 parm = bind_template_template_parm (TREE_TYPE (template), arglist2);
5601 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
5603 else
5605 tree template_type = TREE_TYPE (template);
5606 tree gen_tmpl;
5607 tree type_decl;
5608 tree found = NULL_TREE;
5609 int arg_depth;
5610 int parm_depth;
5611 int is_partial_instantiation;
5613 gen_tmpl = most_general_template (template);
5614 parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
5615 parm_depth = TMPL_PARMS_DEPTH (parmlist);
5616 arg_depth = TMPL_ARGS_DEPTH (arglist);
5618 if (arg_depth == 1 && parm_depth > 1)
5620 /* We've been given an incomplete set of template arguments.
5621 For example, given:
5623 template <class T> struct S1 {
5624 template <class U> struct S2 {};
5625 template <class U> struct S2<U*> {};
5628 we will be called with an ARGLIST of `U*', but the
5629 TEMPLATE will be `template <class T> template
5630 <class U> struct S1<T>::S2'. We must fill in the missing
5631 arguments. */
5632 arglist
5633 = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
5634 arglist);
5635 arg_depth = TMPL_ARGS_DEPTH (arglist);
5638 /* Now we should have enough arguments. */
5639 gcc_assert (parm_depth == arg_depth);
5641 /* From here on, we're only interested in the most general
5642 template. */
5643 template = gen_tmpl;
5645 /* Calculate the BOUND_ARGS. These will be the args that are
5646 actually tsubst'd into the definition to create the
5647 instantiation. */
5648 if (parm_depth > 1)
5650 /* We have multiple levels of arguments to coerce, at once. */
5651 int i;
5652 int saved_depth = TMPL_ARGS_DEPTH (arglist);
5654 tree bound_args = make_tree_vec (parm_depth);
5656 for (i = saved_depth,
5657 t = DECL_TEMPLATE_PARMS (template);
5658 i > 0 && t != NULL_TREE;
5659 --i, t = TREE_CHAIN (t))
5661 tree a = coerce_template_parms (TREE_VALUE (t),
5662 arglist, template,
5663 complain,
5664 /*require_all_args=*/true,
5665 /*use_default_args=*/true);
5667 /* Don't process further if one of the levels fails. */
5668 if (a == error_mark_node)
5670 /* Restore the ARGLIST to its full size. */
5671 TREE_VEC_LENGTH (arglist) = saved_depth;
5672 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5675 SET_TMPL_ARGS_LEVEL (bound_args, i, a);
5677 /* We temporarily reduce the length of the ARGLIST so
5678 that coerce_template_parms will see only the arguments
5679 corresponding to the template parameters it is
5680 examining. */
5681 TREE_VEC_LENGTH (arglist)--;
5684 /* Restore the ARGLIST to its full size. */
5685 TREE_VEC_LENGTH (arglist) = saved_depth;
5687 arglist = bound_args;
5689 else
5690 arglist
5691 = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
5692 INNERMOST_TEMPLATE_ARGS (arglist),
5693 template,
5694 complain,
5695 /*require_all_args=*/true,
5696 /*use_default_args=*/true);
5698 if (arglist == error_mark_node)
5699 /* We were unable to bind the arguments. */
5700 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5702 /* In the scope of a template class, explicit references to the
5703 template class refer to the type of the template, not any
5704 instantiation of it. For example, in:
5706 template <class T> class C { void f(C<T>); }
5708 the `C<T>' is just the same as `C'. Outside of the
5709 class, however, such a reference is an instantiation. */
5710 if (comp_template_args (TYPE_TI_ARGS (template_type),
5711 arglist))
5713 found = template_type;
5715 if (!entering_scope && PRIMARY_TEMPLATE_P (template))
5717 tree ctx;
5719 for (ctx = current_class_type;
5720 ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
5721 ctx = (TYPE_P (ctx)
5722 ? TYPE_CONTEXT (ctx)
5723 : DECL_CONTEXT (ctx)))
5724 if (TYPE_P (ctx) && same_type_p (ctx, template_type))
5725 goto found_ctx;
5727 /* We're not in the scope of the class, so the
5728 TEMPLATE_TYPE is not the type we want after all. */
5729 found = NULL_TREE;
5730 found_ctx:;
5733 if (found)
5734 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5736 /* If we already have this specialization, return it. */
5737 found = retrieve_specialization (template, arglist,
5738 /*class_specializations_p=*/false);
5739 if (found)
5740 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5742 /* This type is a "partial instantiation" if any of the template
5743 arguments still involve template parameters. Note that we set
5744 IS_PARTIAL_INSTANTIATION for partial specializations as
5745 well. */
5746 is_partial_instantiation = uses_template_parms (arglist);
5748 /* If the deduced arguments are invalid, then the binding
5749 failed. */
5750 if (!is_partial_instantiation
5751 && check_instantiated_args (template,
5752 INNERMOST_TEMPLATE_ARGS (arglist),
5753 complain))
5754 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5756 if (!is_partial_instantiation
5757 && !PRIMARY_TEMPLATE_P (template)
5758 && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
5760 found = xref_tag_from_type (TREE_TYPE (template),
5761 DECL_NAME (template),
5762 /*tag_scope=*/ts_global);
5763 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5766 context = tsubst (DECL_CONTEXT (template), arglist,
5767 complain, in_decl);
5768 if (!context)
5769 context = global_namespace;
5771 /* Create the type. */
5772 if (TREE_CODE (template_type) == ENUMERAL_TYPE)
5774 if (!is_partial_instantiation)
5776 set_current_access_from_decl (TYPE_NAME (template_type));
5777 t = start_enum (TYPE_IDENTIFIER (template_type));
5779 else
5780 /* We don't want to call start_enum for this type, since
5781 the values for the enumeration constants may involve
5782 template parameters. And, no one should be interested
5783 in the enumeration constants for such a type. */
5784 t = make_node (ENUMERAL_TYPE);
5786 else
5788 t = make_aggr_type (TREE_CODE (template_type));
5789 CLASSTYPE_DECLARED_CLASS (t)
5790 = CLASSTYPE_DECLARED_CLASS (template_type);
5791 SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
5792 TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
5794 /* A local class. Make sure the decl gets registered properly. */
5795 if (context == current_function_decl)
5796 pushtag (DECL_NAME (template), t, /*tag_scope=*/ts_current);
5798 if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
5799 /* This instantiation is another name for the primary
5800 template type. Set the TYPE_CANONICAL field
5801 appropriately. */
5802 TYPE_CANONICAL (t) = template_type;
5803 else if (any_template_arguments_need_structural_equality_p (arglist))
5804 /* Some of the template arguments require structural
5805 equality testing, so this template class requires
5806 structural equality testing. */
5807 SET_TYPE_STRUCTURAL_EQUALITY (t);
5810 /* If we called start_enum or pushtag above, this information
5811 will already be set up. */
5812 if (!TYPE_NAME (t))
5814 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5816 type_decl = create_implicit_typedef (DECL_NAME (template), t);
5817 DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
5818 TYPE_STUB_DECL (t) = type_decl;
5819 DECL_SOURCE_LOCATION (type_decl)
5820 = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
5822 else
5823 type_decl = TYPE_NAME (t);
5825 TREE_PRIVATE (type_decl)
5826 = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
5827 TREE_PROTECTED (type_decl)
5828 = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
5829 DECL_IN_SYSTEM_HEADER (type_decl)
5830 = DECL_IN_SYSTEM_HEADER (template);
5831 if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
5833 DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
5834 DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
5837 /* Set up the template information. We have to figure out which
5838 template is the immediate parent if this is a full
5839 instantiation. */
5840 if (parm_depth == 1 || is_partial_instantiation
5841 || !PRIMARY_TEMPLATE_P (template))
5842 /* This case is easy; there are no member templates involved. */
5843 found = template;
5844 else
5846 /* This is a full instantiation of a member template. Look
5847 for a partial instantiation of which this is an instance. */
5849 for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
5850 found; found = TREE_CHAIN (found))
5852 int success;
5853 tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
5855 /* We only want partial instantiations, here, not
5856 specializations or full instantiations. */
5857 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
5858 || !uses_template_parms (TREE_VALUE (found)))
5859 continue;
5861 /* Temporarily reduce by one the number of levels in the
5862 ARGLIST and in FOUND so as to avoid comparing the
5863 last set of arguments. */
5864 TREE_VEC_LENGTH (arglist)--;
5865 TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
5867 /* See if the arguments match. If they do, then TMPL is
5868 the partial instantiation we want. */
5869 success = comp_template_args (TREE_PURPOSE (found), arglist);
5871 /* Restore the argument vectors to their full size. */
5872 TREE_VEC_LENGTH (arglist)++;
5873 TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
5875 if (success)
5877 found = tmpl;
5878 break;
5882 if (!found)
5884 /* There was no partial instantiation. This happens
5885 where C<T> is a member template of A<T> and it's used
5886 in something like
5888 template <typename T> struct B { A<T>::C<int> m; };
5889 B<float>;
5891 Create the partial instantiation.
5893 TREE_VEC_LENGTH (arglist)--;
5894 found = tsubst (template, arglist, complain, NULL_TREE);
5895 TREE_VEC_LENGTH (arglist)++;
5899 SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
5900 DECL_TEMPLATE_INSTANTIATIONS (template)
5901 = tree_cons (arglist, t,
5902 DECL_TEMPLATE_INSTANTIATIONS (template));
5904 if (TREE_CODE (t) == ENUMERAL_TYPE
5905 && !is_partial_instantiation)
5906 /* Now that the type has been registered on the instantiations
5907 list, we set up the enumerators. Because the enumeration
5908 constants may involve the enumeration type itself, we make
5909 sure to register the type first, and then create the
5910 constants. That way, doing tsubst_expr for the enumeration
5911 constants won't result in recursive calls here; we'll find
5912 the instantiation and exit above. */
5913 tsubst_enum (template_type, t, arglist);
5915 if (is_partial_instantiation)
5916 /* If the type makes use of template parameters, the
5917 code that generates debugging information will crash. */
5918 DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
5920 /* Possibly limit visibility based on template args. */
5921 TREE_PUBLIC (type_decl) = 1;
5922 determine_visibility (type_decl);
5924 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
5926 timevar_pop (TV_NAME_LOOKUP);
5929 struct pair_fn_data
5931 tree_fn_t fn;
5932 void *data;
5933 struct pointer_set_t *visited;
5936 /* Called from for_each_template_parm via walk_tree. */
5938 static tree
5939 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
5941 tree t = *tp;
5942 struct pair_fn_data *pfd = (struct pair_fn_data *) d;
5943 tree_fn_t fn = pfd->fn;
5944 void *data = pfd->data;
5946 if (TYPE_P (t)
5947 && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited))
5948 return error_mark_node;
5950 switch (TREE_CODE (t))
5952 case RECORD_TYPE:
5953 if (TYPE_PTRMEMFUNC_P (t))
5954 break;
5955 /* Fall through. */
5957 case UNION_TYPE:
5958 case ENUMERAL_TYPE:
5959 if (!TYPE_TEMPLATE_INFO (t))
5960 *walk_subtrees = 0;
5961 else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
5962 fn, data, pfd->visited))
5963 return error_mark_node;
5964 break;
5966 case INTEGER_TYPE:
5967 if (for_each_template_parm (TYPE_MIN_VALUE (t),
5968 fn, data, pfd->visited)
5969 || for_each_template_parm (TYPE_MAX_VALUE (t),
5970 fn, data, pfd->visited))
5971 return error_mark_node;
5972 break;
5974 case METHOD_TYPE:
5975 /* Since we're not going to walk subtrees, we have to do this
5976 explicitly here. */
5977 if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
5978 pfd->visited))
5979 return error_mark_node;
5980 /* Fall through. */
5982 case FUNCTION_TYPE:
5983 /* Check the return type. */
5984 if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
5985 return error_mark_node;
5987 /* Check the parameter types. Since default arguments are not
5988 instantiated until they are needed, the TYPE_ARG_TYPES may
5989 contain expressions that involve template parameters. But,
5990 no-one should be looking at them yet. And, once they're
5991 instantiated, they don't contain template parameters, so
5992 there's no point in looking at them then, either. */
5994 tree parm;
5996 for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
5997 if (for_each_template_parm (TREE_VALUE (parm), fn, data,
5998 pfd->visited))
5999 return error_mark_node;
6001 /* Since we've already handled the TYPE_ARG_TYPES, we don't
6002 want walk_tree walking into them itself. */
6003 *walk_subtrees = 0;
6005 break;
6007 case TYPEOF_TYPE:
6008 if (for_each_template_parm (TYPE_FIELDS (t), fn, data,
6009 pfd->visited))
6010 return error_mark_node;
6011 break;
6013 case FUNCTION_DECL:
6014 case VAR_DECL:
6015 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
6016 && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
6017 pfd->visited))
6018 return error_mark_node;
6019 /* Fall through. */
6021 case PARM_DECL:
6022 case CONST_DECL:
6023 if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
6024 && for_each_template_parm (DECL_INITIAL (t), fn, data,
6025 pfd->visited))
6026 return error_mark_node;
6027 if (DECL_CONTEXT (t)
6028 && for_each_template_parm (DECL_CONTEXT (t), fn, data,
6029 pfd->visited))
6030 return error_mark_node;
6031 break;
6033 case BOUND_TEMPLATE_TEMPLATE_PARM:
6034 /* Record template parameters such as `T' inside `TT<T>'. */
6035 if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited))
6036 return error_mark_node;
6037 /* Fall through. */
6039 case TEMPLATE_TEMPLATE_PARM:
6040 case TEMPLATE_TYPE_PARM:
6041 case TEMPLATE_PARM_INDEX:
6042 if (fn && (*fn)(t, data))
6043 return error_mark_node;
6044 else if (!fn)
6045 return error_mark_node;
6046 break;
6048 case TEMPLATE_DECL:
6049 /* A template template parameter is encountered. */
6050 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
6051 && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
6052 return error_mark_node;
6054 /* Already substituted template template parameter */
6055 *walk_subtrees = 0;
6056 break;
6058 case TYPENAME_TYPE:
6059 if (!fn
6060 || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
6061 data, pfd->visited))
6062 return error_mark_node;
6063 break;
6065 case CONSTRUCTOR:
6066 if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
6067 && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
6068 (TREE_TYPE (t)), fn, data,
6069 pfd->visited))
6070 return error_mark_node;
6071 break;
6073 case INDIRECT_REF:
6074 case COMPONENT_REF:
6075 /* If there's no type, then this thing must be some expression
6076 involving template parameters. */
6077 if (!fn && !TREE_TYPE (t))
6078 return error_mark_node;
6079 break;
6081 case MODOP_EXPR:
6082 case CAST_EXPR:
6083 case REINTERPRET_CAST_EXPR:
6084 case CONST_CAST_EXPR:
6085 case STATIC_CAST_EXPR:
6086 case DYNAMIC_CAST_EXPR:
6087 case ARROW_EXPR:
6088 case DOTSTAR_EXPR:
6089 case TYPEID_EXPR:
6090 case PSEUDO_DTOR_EXPR:
6091 if (!fn)
6092 return error_mark_node;
6093 break;
6095 default:
6096 break;
6099 /* We didn't find any template parameters we liked. */
6100 return NULL_TREE;
6103 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
6104 BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
6105 call FN with the parameter and the DATA.
6106 If FN returns nonzero, the iteration is terminated, and
6107 for_each_template_parm returns 1. Otherwise, the iteration
6108 continues. If FN never returns a nonzero value, the value
6109 returned by for_each_template_parm is 0. If FN is NULL, it is
6110 considered to be the function which always returns 1. */
6112 static int
6113 for_each_template_parm (tree t, tree_fn_t fn, void* data,
6114 struct pointer_set_t *visited)
6116 struct pair_fn_data pfd;
6117 int result;
6119 /* Set up. */
6120 pfd.fn = fn;
6121 pfd.data = data;
6123 /* Walk the tree. (Conceptually, we would like to walk without
6124 duplicates, but for_each_template_parm_r recursively calls
6125 for_each_template_parm, so we would need to reorganize a fair
6126 bit to use walk_tree_without_duplicates, so we keep our own
6127 visited list.) */
6128 if (visited)
6129 pfd.visited = visited;
6130 else
6131 pfd.visited = pointer_set_create ();
6132 result = cp_walk_tree (&t,
6133 for_each_template_parm_r,
6134 &pfd,
6135 pfd.visited) != NULL_TREE;
6137 /* Clean up. */
6138 if (!visited)
6140 pointer_set_destroy (pfd.visited);
6141 pfd.visited = 0;
6144 return result;
6147 /* Returns true if T depends on any template parameter. */
6150 uses_template_parms (tree t)
6152 bool dependent_p;
6153 int saved_processing_template_decl;
6155 saved_processing_template_decl = processing_template_decl;
6156 if (!saved_processing_template_decl)
6157 processing_template_decl = 1;
6158 if (TYPE_P (t))
6159 dependent_p = dependent_type_p (t);
6160 else if (TREE_CODE (t) == TREE_VEC)
6161 dependent_p = any_dependent_template_arguments_p (t);
6162 else if (TREE_CODE (t) == TREE_LIST)
6163 dependent_p = (uses_template_parms (TREE_VALUE (t))
6164 || uses_template_parms (TREE_CHAIN (t)));
6165 else if (TREE_CODE (t) == TYPE_DECL)
6166 dependent_p = dependent_type_p (TREE_TYPE (t));
6167 else if (DECL_P (t)
6168 || EXPR_P (t)
6169 || TREE_CODE (t) == TEMPLATE_PARM_INDEX
6170 || TREE_CODE (t) == OVERLOAD
6171 || TREE_CODE (t) == BASELINK
6172 || TREE_CODE (t) == IDENTIFIER_NODE
6173 || TREE_CODE (t) == TRAIT_EXPR
6174 || CONSTANT_CLASS_P (t))
6175 dependent_p = (type_dependent_expression_p (t)
6176 || value_dependent_expression_p (t));
6177 else
6179 gcc_assert (t == error_mark_node);
6180 dependent_p = false;
6183 processing_template_decl = saved_processing_template_decl;
6185 return dependent_p;
6188 /* Returns true if T depends on any template parameter with level LEVEL. */
6191 uses_template_parms_level (tree t, int level)
6193 return for_each_template_parm (t, template_parm_this_level_p, &level, NULL);
6196 static int tinst_depth;
6197 extern int max_tinst_depth;
6198 #ifdef GATHER_STATISTICS
6199 int depth_reached;
6200 #endif
6201 static int tinst_level_tick;
6202 static int last_template_error_tick;
6204 /* We're starting to instantiate D; record the template instantiation context
6205 for diagnostics and to restore it later. */
6207 static int
6208 push_tinst_level (tree d)
6210 struct tinst_level *new;
6212 if (tinst_depth >= max_tinst_depth)
6214 /* If the instantiation in question still has unbound template parms,
6215 we don't really care if we can't instantiate it, so just return.
6216 This happens with base instantiation for implicit `typename'. */
6217 if (uses_template_parms (d))
6218 return 0;
6220 last_template_error_tick = tinst_level_tick;
6221 error ("template instantiation depth exceeds maximum of %d (use "
6222 "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
6223 max_tinst_depth, d);
6225 print_instantiation_context ();
6227 return 0;
6230 new = GGC_NEW (struct tinst_level);
6231 new->decl = d;
6232 new->locus = input_location;
6233 new->in_system_header_p = in_system_header;
6234 new->next = current_tinst_level;
6235 current_tinst_level = new;
6237 ++tinst_depth;
6238 #ifdef GATHER_STATISTICS
6239 if (tinst_depth > depth_reached)
6240 depth_reached = tinst_depth;
6241 #endif
6243 ++tinst_level_tick;
6244 return 1;
6247 /* We're done instantiating this template; return to the instantiation
6248 context. */
6250 static void
6251 pop_tinst_level (void)
6253 /* Restore the filename and line number stashed away when we started
6254 this instantiation. */
6255 input_location = current_tinst_level->locus;
6256 in_system_header = current_tinst_level->in_system_header_p;
6257 current_tinst_level = current_tinst_level->next;
6258 --tinst_depth;
6259 ++tinst_level_tick;
6262 /* We're instantiating a deferred template; restore the template
6263 instantiation context in which the instantiation was requested, which
6264 is one step out from LEVEL. Return the corresponding DECL or TYPE. */
6266 static tree
6267 reopen_tinst_level (struct tinst_level *level)
6269 struct tinst_level *t;
6271 tinst_depth = 0;
6272 for (t = level; t; t = t->next)
6273 ++tinst_depth;
6275 current_tinst_level = level;
6276 pop_tinst_level ();
6277 return level->decl;
6280 /* Returns the TINST_LEVEL which gives the original instantiation
6281 context. */
6283 struct tinst_level *
6284 outermost_tinst_level (void)
6286 struct tinst_level *level = current_tinst_level;
6287 if (level)
6288 while (level->next)
6289 level = level->next;
6290 return level;
6293 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
6294 vector of template arguments, as for tsubst.
6296 Returns an appropriate tsubst'd friend declaration. */
6298 static tree
6299 tsubst_friend_function (tree decl, tree args)
6301 tree new_friend;
6303 if (TREE_CODE (decl) == FUNCTION_DECL
6304 && DECL_TEMPLATE_INSTANTIATION (decl)
6305 && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
6306 /* This was a friend declared with an explicit template
6307 argument list, e.g.:
6309 friend void f<>(T);
6311 to indicate that f was a template instantiation, not a new
6312 function declaration. Now, we have to figure out what
6313 instantiation of what template. */
6315 tree template_id, arglist, fns;
6316 tree new_args;
6317 tree tmpl;
6318 tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
6320 /* Friend functions are looked up in the containing namespace scope.
6321 We must enter that scope, to avoid finding member functions of the
6322 current cless with same name. */
6323 push_nested_namespace (ns);
6324 fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
6325 tf_warning_or_error, NULL_TREE,
6326 /*integral_constant_expression_p=*/false);
6327 pop_nested_namespace (ns);
6328 arglist = tsubst (DECL_TI_ARGS (decl), args,
6329 tf_warning_or_error, NULL_TREE);
6330 template_id = lookup_template_function (fns, arglist);
6332 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6333 tmpl = determine_specialization (template_id, new_friend,
6334 &new_args,
6335 /*need_member_template=*/0,
6336 TREE_VEC_LENGTH (args),
6337 tsk_none);
6338 return instantiate_template (tmpl, new_args, tf_error);
6341 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6343 /* The NEW_FRIEND will look like an instantiation, to the
6344 compiler, but is not an instantiation from the point of view of
6345 the language. For example, we might have had:
6347 template <class T> struct S {
6348 template <class U> friend void f(T, U);
6351 Then, in S<int>, template <class U> void f(int, U) is not an
6352 instantiation of anything. */
6353 if (new_friend == error_mark_node)
6354 return error_mark_node;
6356 DECL_USE_TEMPLATE (new_friend) = 0;
6357 if (TREE_CODE (decl) == TEMPLATE_DECL)
6359 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
6360 DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
6361 = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
6364 /* The mangled name for the NEW_FRIEND is incorrect. The function
6365 is not a template instantiation and should not be mangled like
6366 one. Therefore, we forget the mangling here; we'll recompute it
6367 later if we need it. */
6368 if (TREE_CODE (new_friend) != TEMPLATE_DECL)
6370 SET_DECL_RTL (new_friend, NULL_RTX);
6371 SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
6374 if (DECL_NAMESPACE_SCOPE_P (new_friend))
6376 tree old_decl;
6377 tree new_friend_template_info;
6378 tree new_friend_result_template_info;
6379 tree ns;
6380 int new_friend_is_defn;
6382 /* We must save some information from NEW_FRIEND before calling
6383 duplicate decls since that function will free NEW_FRIEND if
6384 possible. */
6385 new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
6386 new_friend_is_defn =
6387 (DECL_INITIAL (DECL_TEMPLATE_RESULT
6388 (template_for_substitution (new_friend)))
6389 != NULL_TREE);
6390 if (TREE_CODE (new_friend) == TEMPLATE_DECL)
6392 /* This declaration is a `primary' template. */
6393 DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
6395 new_friend_result_template_info
6396 = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
6398 else
6399 new_friend_result_template_info = NULL_TREE;
6401 /* Make the init_value nonzero so pushdecl knows this is a defn. */
6402 if (new_friend_is_defn)
6403 DECL_INITIAL (new_friend) = error_mark_node;
6405 /* Inside pushdecl_namespace_level, we will push into the
6406 current namespace. However, the friend function should go
6407 into the namespace of the template. */
6408 ns = decl_namespace_context (new_friend);
6409 push_nested_namespace (ns);
6410 old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
6411 pop_nested_namespace (ns);
6413 if (old_decl == error_mark_node)
6414 return error_mark_node;
6416 if (old_decl != new_friend)
6418 /* This new friend declaration matched an existing
6419 declaration. For example, given:
6421 template <class T> void f(T);
6422 template <class U> class C {
6423 template <class T> friend void f(T) {}
6426 the friend declaration actually provides the definition
6427 of `f', once C has been instantiated for some type. So,
6428 old_decl will be the out-of-class template declaration,
6429 while new_friend is the in-class definition.
6431 But, if `f' was called before this point, the
6432 instantiation of `f' will have DECL_TI_ARGS corresponding
6433 to `T' but not to `U', references to which might appear
6434 in the definition of `f'. Previously, the most general
6435 template for an instantiation of `f' was the out-of-class
6436 version; now it is the in-class version. Therefore, we
6437 run through all specialization of `f', adding to their
6438 DECL_TI_ARGS appropriately. In particular, they need a
6439 new set of outer arguments, corresponding to the
6440 arguments for this class instantiation.
6442 The same situation can arise with something like this:
6444 friend void f(int);
6445 template <class T> class C {
6446 friend void f(T) {}
6449 when `C<int>' is instantiated. Now, `f(int)' is defined
6450 in the class. */
6452 if (!new_friend_is_defn)
6453 /* On the other hand, if the in-class declaration does
6454 *not* provide a definition, then we don't want to alter
6455 existing definitions. We can just leave everything
6456 alone. */
6458 else
6460 /* Overwrite whatever template info was there before, if
6461 any, with the new template information pertaining to
6462 the declaration. */
6463 DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
6465 if (TREE_CODE (old_decl) != TEMPLATE_DECL)
6466 reregister_specialization (new_friend,
6467 most_general_template (old_decl),
6468 old_decl);
6469 else
6471 tree t;
6472 tree new_friend_args;
6474 DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
6475 = new_friend_result_template_info;
6477 new_friend_args = TI_ARGS (new_friend_template_info);
6478 for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
6479 t != NULL_TREE;
6480 t = TREE_CHAIN (t))
6482 tree spec = TREE_VALUE (t);
6484 DECL_TI_ARGS (spec)
6485 = add_outermost_template_args (new_friend_args,
6486 DECL_TI_ARGS (spec));
6489 /* Now, since specializations are always supposed to
6490 hang off of the most general template, we must move
6491 them. */
6492 t = most_general_template (old_decl);
6493 if (t != old_decl)
6495 DECL_TEMPLATE_SPECIALIZATIONS (t)
6496 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
6497 DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
6498 DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
6503 /* The information from NEW_FRIEND has been merged into OLD_DECL
6504 by duplicate_decls. */
6505 new_friend = old_decl;
6508 else
6510 tree context = DECL_CONTEXT (new_friend);
6511 bool dependent_p;
6513 /* In the code
6514 template <class T> class C {
6515 template <class U> friend void C1<U>::f (); // case 1
6516 friend void C2<T>::f (); // case 2
6518 we only need to make sure CONTEXT is a complete type for
6519 case 2. To distinguish between the two cases, we note that
6520 CONTEXT of case 1 remains dependent type after tsubst while
6521 this isn't true for case 2. */
6522 ++processing_template_decl;
6523 dependent_p = dependent_type_p (context);
6524 --processing_template_decl;
6526 if (!dependent_p
6527 && !complete_type_or_else (context, NULL_TREE))
6528 return error_mark_node;
6530 if (COMPLETE_TYPE_P (context))
6532 /* Check to see that the declaration is really present, and,
6533 possibly obtain an improved declaration. */
6534 tree fn = check_classfn (context,
6535 new_friend, NULL_TREE);
6537 if (fn)
6538 new_friend = fn;
6542 return new_friend;
6545 /* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
6546 template arguments, as for tsubst.
6548 Returns an appropriate tsubst'd friend type or error_mark_node on
6549 failure. */
6551 static tree
6552 tsubst_friend_class (tree friend_tmpl, tree args)
6554 tree friend_type;
6555 tree tmpl;
6556 tree context;
6558 context = DECL_CONTEXT (friend_tmpl);
6560 if (context)
6562 if (TREE_CODE (context) == NAMESPACE_DECL)
6563 push_nested_namespace (context);
6564 else
6565 push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
6568 /* Look for a class template declaration. We look for hidden names
6569 because two friend declarations of the same template are the
6570 same. For example, in:
6572 struct A {
6573 template <typename> friend class F;
6575 template <typename> struct B {
6576 template <typename> friend class F;
6579 both F templates are the same. */
6580 tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
6581 /*block_p=*/true, 0,
6582 LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
6584 /* But, if we don't find one, it might be because we're in a
6585 situation like this:
6587 template <class T>
6588 struct S {
6589 template <class U>
6590 friend struct S;
6593 Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
6594 for `S<int>', not the TEMPLATE_DECL. */
6595 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
6597 tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
6598 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
6601 if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
6603 /* The friend template has already been declared. Just
6604 check to see that the declarations match, and install any new
6605 default parameters. We must tsubst the default parameters,
6606 of course. We only need the innermost template parameters
6607 because that is all that redeclare_class_template will look
6608 at. */
6609 if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
6610 > TMPL_ARGS_DEPTH (args))
6612 tree parms;
6613 location_t saved_input_location;
6614 parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
6615 args, tf_warning_or_error);
6617 saved_input_location = input_location;
6618 input_location = DECL_SOURCE_LOCATION (friend_tmpl);
6619 redeclare_class_template (TREE_TYPE (tmpl), parms);
6620 input_location = saved_input_location;
6624 friend_type = TREE_TYPE (tmpl);
6626 else
6628 /* The friend template has not already been declared. In this
6629 case, the instantiation of the template class will cause the
6630 injection of this template into the global scope. */
6631 tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
6632 if (tmpl == error_mark_node)
6633 return error_mark_node;
6635 /* The new TMPL is not an instantiation of anything, so we
6636 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE for
6637 the new type because that is supposed to be the corresponding
6638 template decl, i.e., TMPL. */
6639 DECL_USE_TEMPLATE (tmpl) = 0;
6640 DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
6641 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
6642 CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
6643 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
6645 /* Inject this template into the global scope. */
6646 friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
6649 if (context)
6651 if (TREE_CODE (context) == NAMESPACE_DECL)
6652 pop_nested_namespace (context);
6653 else
6654 pop_nested_class ();
6657 return friend_type;
6660 /* Returns zero if TYPE cannot be completed later due to circularity.
6661 Otherwise returns one. */
6663 static int
6664 can_complete_type_without_circularity (tree type)
6666 if (type == NULL_TREE || type == error_mark_node)
6667 return 0;
6668 else if (COMPLETE_TYPE_P (type))
6669 return 1;
6670 else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
6671 return can_complete_type_without_circularity (TREE_TYPE (type));
6672 else if (CLASS_TYPE_P (type)
6673 && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
6674 return 0;
6675 else
6676 return 1;
6679 /* Apply any attributes which had to be deferred until instantiation
6680 time. DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
6681 ARGS, COMPLAIN, IN_DECL are as tsubst. */
6683 static void
6684 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
6685 tree args, tsubst_flags_t complain, tree in_decl)
6687 tree last_dep = NULL_TREE;
6688 tree t;
6689 tree *p;
6691 for (t = attributes; t; t = TREE_CHAIN (t))
6692 if (ATTR_IS_DEPENDENT (t))
6694 last_dep = t;
6695 attributes = copy_list (attributes);
6696 break;
6699 if (DECL_P (*decl_p))
6701 if (TREE_TYPE (*decl_p) == error_mark_node)
6702 return;
6703 p = &DECL_ATTRIBUTES (*decl_p);
6705 else
6706 p = &TYPE_ATTRIBUTES (*decl_p);
6708 if (last_dep)
6710 tree late_attrs = NULL_TREE;
6711 tree *q = &late_attrs;
6713 for (*p = attributes; *p; )
6715 t = *p;
6716 if (ATTR_IS_DEPENDENT (t))
6718 *p = TREE_CHAIN (t);
6719 TREE_CHAIN (t) = NULL_TREE;
6720 TREE_VALUE (t)
6721 = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
6722 /*integral_constant_expression_p=*/false);
6723 *q = t;
6724 q = &TREE_CHAIN (t);
6726 else
6727 p = &TREE_CHAIN (t);
6730 cplus_decl_attributes (decl_p, late_attrs, attr_flags);
6734 tree
6735 instantiate_class_template (tree type)
6737 tree template, args, pattern, t, member;
6738 tree typedecl;
6739 tree pbinfo;
6740 tree base_list;
6742 if (type == error_mark_node)
6743 return error_mark_node;
6745 if (TYPE_BEING_DEFINED (type)
6746 || COMPLETE_TYPE_P (type)
6747 || dependent_type_p (type))
6748 return type;
6750 /* Figure out which template is being instantiated. */
6751 template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
6752 gcc_assert (TREE_CODE (template) == TEMPLATE_DECL);
6754 /* Determine what specialization of the original template to
6755 instantiate. */
6756 t = most_specialized_class (type, template);
6757 if (t == error_mark_node)
6759 TYPE_BEING_DEFINED (type) = 1;
6760 return error_mark_node;
6762 else if (t)
6764 /* This TYPE is actually an instantiation of a partial
6765 specialization. We replace the innermost set of ARGS with
6766 the arguments appropriate for substitution. For example,
6767 given:
6769 template <class T> struct S {};
6770 template <class T> struct S<T*> {};
6772 and supposing that we are instantiating S<int*>, ARGS will
6773 presently be {int*} -- but we need {int}. */
6774 pattern = TREE_TYPE (t);
6775 args = TREE_PURPOSE (t);
6777 else
6779 pattern = TREE_TYPE (template);
6780 args = CLASSTYPE_TI_ARGS (type);
6783 /* If the template we're instantiating is incomplete, then clearly
6784 there's nothing we can do. */
6785 if (!COMPLETE_TYPE_P (pattern))
6786 return type;
6788 /* If we've recursively instantiated too many templates, stop. */
6789 if (! push_tinst_level (type))
6790 return type;
6792 /* Now we're really doing the instantiation. Mark the type as in
6793 the process of being defined. */
6794 TYPE_BEING_DEFINED (type) = 1;
6796 /* We may be in the middle of deferred access check. Disable
6797 it now. */
6798 push_deferring_access_checks (dk_no_deferred);
6800 push_to_top_level ();
6802 SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
6804 /* Set the input location to the template definition. This is needed
6805 if tsubsting causes an error. */
6806 typedecl = TYPE_MAIN_DECL (type);
6807 input_location = DECL_SOURCE_LOCATION (typedecl);
6808 in_system_header = DECL_IN_SYSTEM_HEADER (typedecl);
6810 TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
6811 TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
6812 TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
6813 TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
6814 TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
6815 TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
6816 TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
6817 TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
6818 TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
6819 TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
6820 TYPE_PACKED (type) = TYPE_PACKED (pattern);
6821 TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
6822 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
6823 TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
6824 if (ANON_AGGR_TYPE_P (pattern))
6825 SET_ANON_AGGR_TYPE_P (type);
6826 if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
6828 CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
6829 CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
6832 pbinfo = TYPE_BINFO (pattern);
6834 /* We should never instantiate a nested class before its enclosing
6835 class; we need to look up the nested class by name before we can
6836 instantiate it, and that lookup should instantiate the enclosing
6837 class. */
6838 gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
6839 || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
6840 || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
6842 base_list = NULL_TREE;
6843 if (BINFO_N_BASE_BINFOS (pbinfo))
6845 tree pbase_binfo;
6846 tree context = TYPE_CONTEXT (type);
6847 tree pushed_scope;
6848 int i;
6850 /* We must enter the scope containing the type, as that is where
6851 the accessibility of types named in dependent bases are
6852 looked up from. */
6853 pushed_scope = push_scope (context ? context : global_namespace);
6855 /* Substitute into each of the bases to determine the actual
6856 basetypes. */
6857 for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
6859 tree base;
6860 tree access = BINFO_BASE_ACCESS (pbinfo, i);
6861 tree expanded_bases = NULL_TREE;
6862 int idx, len = 1;
6864 if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
6866 expanded_bases =
6867 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
6868 args, tf_error, NULL_TREE);
6869 if (expanded_bases == error_mark_node)
6870 continue;
6872 len = TREE_VEC_LENGTH (expanded_bases);
6875 for (idx = 0; idx < len; idx++)
6877 if (expanded_bases)
6878 /* Extract the already-expanded base class. */
6879 base = TREE_VEC_ELT (expanded_bases, idx);
6880 else
6881 /* Substitute to figure out the base class. */
6882 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error,
6883 NULL_TREE);
6885 if (base == error_mark_node)
6886 continue;
6888 base_list = tree_cons (access, base, base_list);
6889 if (BINFO_VIRTUAL_P (pbase_binfo))
6890 TREE_TYPE (base_list) = integer_type_node;
6894 /* The list is now in reverse order; correct that. */
6895 base_list = nreverse (base_list);
6897 if (pushed_scope)
6898 pop_scope (pushed_scope);
6900 /* Now call xref_basetypes to set up all the base-class
6901 information. */
6902 xref_basetypes (type, base_list);
6904 apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
6905 (int) ATTR_FLAG_TYPE_IN_PLACE,
6906 args, tf_error, NULL_TREE);
6908 /* Now that our base classes are set up, enter the scope of the
6909 class, so that name lookups into base classes, etc. will work
6910 correctly. This is precisely analogous to what we do in
6911 begin_class_definition when defining an ordinary non-template
6912 class, except we also need to push the enclosing classes. */
6913 push_nested_class (type);
6915 /* Now members are processed in the order of declaration. */
6916 for (member = CLASSTYPE_DECL_LIST (pattern);
6917 member; member = TREE_CHAIN (member))
6919 tree t = TREE_VALUE (member);
6921 if (TREE_PURPOSE (member))
6923 if (TYPE_P (t))
6925 /* Build new CLASSTYPE_NESTED_UTDS. */
6927 tree newtag;
6928 bool class_template_p;
6930 class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
6931 && TYPE_LANG_SPECIFIC (t)
6932 && CLASSTYPE_IS_TEMPLATE (t));
6933 /* If the member is a class template, then -- even after
6934 substitution -- there may be dependent types in the
6935 template argument list for the class. We increment
6936 PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
6937 that function will assume that no types are dependent
6938 when outside of a template. */
6939 if (class_template_p)
6940 ++processing_template_decl;
6941 newtag = tsubst (t, args, tf_error, NULL_TREE);
6942 if (class_template_p)
6943 --processing_template_decl;
6944 if (newtag == error_mark_node)
6945 continue;
6947 if (TREE_CODE (newtag) != ENUMERAL_TYPE)
6949 tree name = TYPE_IDENTIFIER (t);
6951 if (class_template_p)
6952 /* Unfortunately, lookup_template_class sets
6953 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
6954 instantiation (i.e., for the type of a member
6955 template class nested within a template class.)
6956 This behavior is required for
6957 maybe_process_partial_specialization to work
6958 correctly, but is not accurate in this case;
6959 the TAG is not an instantiation of anything.
6960 (The corresponding TEMPLATE_DECL is an
6961 instantiation, but the TYPE is not.) */
6962 CLASSTYPE_USE_TEMPLATE (newtag) = 0;
6964 /* Now, we call pushtag to put this NEWTAG into the scope of
6965 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
6966 pushtag calling push_template_decl. We don't have to do
6967 this for enums because it will already have been done in
6968 tsubst_enum. */
6969 if (name)
6970 SET_IDENTIFIER_TYPE_VALUE (name, newtag);
6971 pushtag (name, newtag, /*tag_scope=*/ts_current);
6974 else if (TREE_CODE (t) == FUNCTION_DECL
6975 || DECL_FUNCTION_TEMPLATE_P (t))
6977 /* Build new TYPE_METHODS. */
6978 tree r;
6980 if (TREE_CODE (t) == TEMPLATE_DECL)
6981 ++processing_template_decl;
6982 r = tsubst (t, args, tf_error, NULL_TREE);
6983 if (TREE_CODE (t) == TEMPLATE_DECL)
6984 --processing_template_decl;
6985 set_current_access_from_decl (r);
6986 finish_member_declaration (r);
6988 else
6990 /* Build new TYPE_FIELDS. */
6991 if (TREE_CODE (t) == STATIC_ASSERT)
6993 tree condition =
6994 tsubst_expr (STATIC_ASSERT_CONDITION (t), args,
6995 tf_warning_or_error, NULL_TREE,
6996 /*integral_constant_expression_p=*/true);
6997 finish_static_assert (condition,
6998 STATIC_ASSERT_MESSAGE (t),
6999 STATIC_ASSERT_SOURCE_LOCATION (t),
7000 /*member_p=*/true);
7002 else if (TREE_CODE (t) != CONST_DECL)
7004 tree r;
7006 /* The the file and line for this declaration, to
7007 assist in error message reporting. Since we
7008 called push_tinst_level above, we don't need to
7009 restore these. */
7010 input_location = DECL_SOURCE_LOCATION (t);
7012 if (TREE_CODE (t) == TEMPLATE_DECL)
7013 ++processing_template_decl;
7014 r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
7015 if (TREE_CODE (t) == TEMPLATE_DECL)
7016 --processing_template_decl;
7017 if (TREE_CODE (r) == VAR_DECL)
7019 /* In [temp.inst]:
7021 [t]he initialization (and any associated
7022 side-effects) of a static data member does
7023 not occur unless the static data member is
7024 itself used in a way that requires the
7025 definition of the static data member to
7026 exist.
7028 Therefore, we do not substitute into the
7029 initialized for the static data member here. */
7030 finish_static_data_member_decl
7032 /*init=*/NULL_TREE,
7033 /*init_const_expr_p=*/false,
7034 /*asmspec_tree=*/NULL_TREE,
7035 /*flags=*/0);
7036 if (DECL_INITIALIZED_IN_CLASS_P (r))
7037 check_static_variable_definition (r, TREE_TYPE (r));
7039 else if (TREE_CODE (r) == FIELD_DECL)
7041 /* Determine whether R has a valid type and can be
7042 completed later. If R is invalid, then it is
7043 replaced by error_mark_node so that it will not be
7044 added to TYPE_FIELDS. */
7045 tree rtype = TREE_TYPE (r);
7046 if (can_complete_type_without_circularity (rtype))
7047 complete_type (rtype);
7049 if (!COMPLETE_TYPE_P (rtype))
7051 cxx_incomplete_type_error (r, rtype);
7052 r = error_mark_node;
7056 /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
7057 such a thing will already have been added to the field
7058 list by tsubst_enum in finish_member_declaration in the
7059 CLASSTYPE_NESTED_UTDS case above. */
7060 if (!(TREE_CODE (r) == TYPE_DECL
7061 && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
7062 && DECL_ARTIFICIAL (r)))
7064 set_current_access_from_decl (r);
7065 finish_member_declaration (r);
7070 else
7072 if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
7074 /* Build new CLASSTYPE_FRIEND_CLASSES. */
7076 tree friend_type = t;
7077 bool adjust_processing_template_decl = false;
7079 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
7081 /* template <class T> friend class C; */
7082 friend_type = tsubst_friend_class (friend_type, args);
7083 adjust_processing_template_decl = true;
7085 else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
7087 /* template <class T> friend class C::D; */
7088 friend_type = tsubst (friend_type, args,
7089 tf_warning_or_error, NULL_TREE);
7090 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
7091 friend_type = TREE_TYPE (friend_type);
7092 adjust_processing_template_decl = true;
7094 else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
7096 /* This could be either
7098 friend class T::C;
7100 when dependent_type_p is false or
7102 template <class U> friend class T::C;
7104 otherwise. */
7105 friend_type = tsubst (friend_type, args,
7106 tf_warning_or_error, NULL_TREE);
7107 /* Bump processing_template_decl for correct
7108 dependent_type_p calculation. */
7109 ++processing_template_decl;
7110 if (dependent_type_p (friend_type))
7111 adjust_processing_template_decl = true;
7112 --processing_template_decl;
7114 else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
7115 && hidden_name_p (TYPE_NAME (friend_type)))
7117 /* friend class C;
7119 where C hasn't been declared yet. Let's lookup name
7120 from namespace scope directly, bypassing any name that
7121 come from dependent base class. */
7122 tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
7124 /* The call to xref_tag_from_type does injection for friend
7125 classes. */
7126 push_nested_namespace (ns);
7127 friend_type =
7128 xref_tag_from_type (friend_type, NULL_TREE,
7129 /*tag_scope=*/ts_current);
7130 pop_nested_namespace (ns);
7132 else if (uses_template_parms (friend_type))
7133 /* friend class C<T>; */
7134 friend_type = tsubst (friend_type, args,
7135 tf_warning_or_error, NULL_TREE);
7136 /* Otherwise it's
7138 friend class C;
7140 where C is already declared or
7142 friend class C<int>;
7144 We don't have to do anything in these cases. */
7146 if (adjust_processing_template_decl)
7147 /* Trick make_friend_class into realizing that the friend
7148 we're adding is a template, not an ordinary class. It's
7149 important that we use make_friend_class since it will
7150 perform some error-checking and output cross-reference
7151 information. */
7152 ++processing_template_decl;
7154 if (friend_type != error_mark_node)
7155 make_friend_class (type, friend_type, /*complain=*/false);
7157 if (adjust_processing_template_decl)
7158 --processing_template_decl;
7160 else
7162 /* Build new DECL_FRIENDLIST. */
7163 tree r;
7165 /* The the file and line for this declaration, to
7166 assist in error message reporting. Since we
7167 called push_tinst_level above, we don't need to
7168 restore these. */
7169 input_location = DECL_SOURCE_LOCATION (t);
7171 if (TREE_CODE (t) == TEMPLATE_DECL)
7173 ++processing_template_decl;
7174 push_deferring_access_checks (dk_no_check);
7177 r = tsubst_friend_function (t, args);
7178 add_friend (type, r, /*complain=*/false);
7179 if (TREE_CODE (t) == TEMPLATE_DECL)
7181 pop_deferring_access_checks ();
7182 --processing_template_decl;
7188 /* Set the file and line number information to whatever is given for
7189 the class itself. This puts error messages involving generated
7190 implicit functions at a predictable point, and the same point
7191 that would be used for non-template classes. */
7192 input_location = DECL_SOURCE_LOCATION (typedecl);
7194 unreverse_member_declarations (type);
7195 finish_struct_1 (type);
7196 TYPE_BEING_DEFINED (type) = 0;
7198 /* Now that the class is complete, instantiate default arguments for
7199 any member functions. We don't do this earlier because the
7200 default arguments may reference members of the class. */
7201 if (!PRIMARY_TEMPLATE_P (template))
7202 for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
7203 if (TREE_CODE (t) == FUNCTION_DECL
7204 /* Implicitly generated member functions will not have template
7205 information; they are not instantiations, but instead are
7206 created "fresh" for each instantiation. */
7207 && DECL_TEMPLATE_INFO (t))
7208 tsubst_default_arguments (t);
7210 pop_nested_class ();
7211 pop_from_top_level ();
7212 pop_deferring_access_checks ();
7213 pop_tinst_level ();
7215 /* The vtable for a template class can be emitted in any translation
7216 unit in which the class is instantiated. When there is no key
7217 method, however, finish_struct_1 will already have added TYPE to
7218 the keyed_classes list. */
7219 if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
7220 keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
7222 return type;
7225 static tree
7226 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7228 tree r;
7230 if (!t)
7231 r = t;
7232 else if (TYPE_P (t))
7233 r = tsubst (t, args, complain, in_decl);
7234 else
7236 r = tsubst_expr (t, args, complain, in_decl,
7237 /*integral_constant_expression_p=*/true);
7238 r = fold_non_dependent_expr (r);
7240 return r;
7243 /* Substitute ARGS into T, which is an pack expansion
7244 (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
7245 TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
7246 (if only a partial substitution could be performed) or
7247 ERROR_MARK_NODE if there was an error. */
7248 tree
7249 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
7250 tree in_decl)
7252 tree pattern;
7253 tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
7254 tree first_arg_pack; int i, len = -1;
7255 tree result;
7256 int incomplete = 0;
7258 gcc_assert (PACK_EXPANSION_P (t));
7259 pattern = PACK_EXPANSION_PATTERN (t);
7261 /* Determine the argument packs that will instantiate the parameter
7262 packs used in the expansion expression. While we're at it,
7263 compute the number of arguments to be expanded and make sure it
7264 is consistent. */
7265 for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack;
7266 pack = TREE_CHAIN (pack))
7268 tree parm_pack = TREE_VALUE (pack);
7269 tree arg_pack = NULL_TREE;
7270 tree orig_arg = NULL_TREE;
7272 if (TREE_CODE (parm_pack) == PARM_DECL)
7274 if (local_specializations)
7275 arg_pack = retrieve_local_specialization (parm_pack);
7277 else
7279 int level, idx, levels;
7280 template_parm_level_and_index (parm_pack, &level, &idx);
7282 levels = TMPL_ARGS_DEPTH (args);
7283 if (level <= levels)
7284 arg_pack = TMPL_ARG (args, level, idx);
7287 orig_arg = arg_pack;
7288 if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
7289 arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
7291 if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
7292 /* This can only happen if we forget to expand an argument
7293 pack somewhere else. Just return an error, silently. */
7295 result = make_tree_vec (1);
7296 TREE_VEC_ELT (result, 0) = error_mark_node;
7297 return result;
7300 if (arg_pack
7301 && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
7302 && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
7304 tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
7305 tree pattern = PACK_EXPANSION_PATTERN (expansion);
7306 if ((TYPE_P (pattern) && same_type_p (pattern, parm_pack))
7307 || (!TYPE_P (pattern) && cp_tree_equal (parm_pack, pattern)))
7308 /* The argument pack that the parameter maps to is just an
7309 expansion of the parameter itself, such as one would
7310 find in the implicit typedef of a class inside the
7311 class itself. Consider this parameter "unsubstituted",
7312 so that we will maintain the outer pack expansion. */
7313 arg_pack = NULL_TREE;
7316 if (arg_pack)
7318 int my_len =
7319 TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
7321 /* It's all-or-nothing with incomplete argument packs. */
7322 if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7323 return error_mark_node;
7325 if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7326 incomplete = 1;
7328 if (len < 0)
7330 len = my_len;
7331 first_arg_pack = arg_pack;
7333 else if (len != my_len)
7335 if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
7336 error ("mismatched argument pack lengths while expanding "
7337 "%<%T%>",
7338 pattern);
7339 else
7340 error ("mismatched argument pack lengths while expanding "
7341 "%<%E%>",
7342 pattern);
7343 return error_mark_node;
7346 /* Keep track of the parameter packs and their corresponding
7347 argument packs. */
7348 packs = tree_cons (parm_pack, arg_pack, packs);
7349 TREE_TYPE (packs) = orig_arg;
7351 else
7352 /* We can't substitute for this parameter pack. */
7353 unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
7354 TREE_VALUE (pack),
7355 unsubstituted_packs);
7358 /* We cannot expand this expansion expression, because we don't have
7359 all of the argument packs we need. Substitute into the pattern
7360 and return a PACK_EXPANSION_*. The caller will need to deal with
7361 that. */
7362 if (unsubstituted_packs)
7363 return make_pack_expansion (tsubst (pattern, args, complain,
7364 in_decl));
7366 /* We could not find any argument packs that work. */
7367 if (len < 0)
7368 return error_mark_node;
7370 /* For each argument in each argument pack, substitute into the
7371 pattern. */
7372 result = make_tree_vec (len + incomplete);
7373 for (i = 0; i < len + incomplete; ++i)
7375 /* For parameter pack, change the substitution of the parameter
7376 pack to the ith argument in its argument pack, then expand
7377 the pattern. */
7378 for (pack = packs; pack; pack = TREE_CHAIN (pack))
7380 tree parm = TREE_PURPOSE (pack);
7382 if (TREE_CODE (parm) == PARM_DECL)
7384 /* Select the Ith argument from the pack. */
7385 tree arg = make_node (ARGUMENT_PACK_SELECT);
7386 ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
7387 ARGUMENT_PACK_SELECT_INDEX (arg) = i;
7388 mark_used (parm);
7389 register_local_specialization (arg, parm);
7391 else
7393 tree value = parm;
7394 int idx, level;
7395 template_parm_level_and_index (parm, &level, &idx);
7397 if (i < len)
7399 /* Select the Ith argument from the pack. */
7400 value = make_node (ARGUMENT_PACK_SELECT);
7401 ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
7402 ARGUMENT_PACK_SELECT_INDEX (value) = i;
7405 /* Update the corresponding argument. */
7406 TMPL_ARG (args, level, idx) = value;
7410 /* Substitute into the PATTERN with the altered arguments. */
7411 if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
7412 TREE_VEC_ELT (result, i) =
7413 tsubst_expr (pattern, args, complain, in_decl,
7414 /*integral_constant_expression_p=*/false);
7415 else
7416 TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
7418 if (i == len)
7419 /* When we have incomplete argument packs, the last "expanded"
7420 result is itself a pack expansion, which allows us
7421 to deduce more arguments. */
7422 TREE_VEC_ELT (result, i) =
7423 make_pack_expansion (TREE_VEC_ELT (result, i));
7425 if (TREE_VEC_ELT (result, i) == error_mark_node)
7427 result = error_mark_node;
7428 break;
7432 /* Update ARGS to restore the substitution from parameter packs to
7433 their argument packs. */
7434 for (pack = packs; pack; pack = TREE_CHAIN (pack))
7436 tree parm = TREE_PURPOSE (pack);
7438 if (TREE_CODE (parm) == PARM_DECL)
7439 register_local_specialization (TREE_TYPE (pack), parm);
7440 else
7442 int idx, level;
7443 template_parm_level_and_index (parm, &level, &idx);
7445 /* Update the corresponding argument. */
7446 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
7447 TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
7448 TREE_TYPE (pack);
7449 else
7450 TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
7454 return result;
7457 /* Substitute ARGS into the vector or list of template arguments T. */
7459 static tree
7460 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7462 tree orig_t = t;
7463 int len = TREE_VEC_LENGTH (t);
7464 int need_new = 0, i, expanded_len_adjust = 0, out;
7465 tree *elts = (tree *) alloca (len * sizeof (tree));
7467 for (i = 0; i < len; i++)
7469 tree orig_arg = TREE_VEC_ELT (t, i);
7470 tree new_arg;
7472 if (TREE_CODE (orig_arg) == TREE_VEC)
7473 new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
7474 else if (PACK_EXPANSION_P (orig_arg))
7476 /* Substitute into an expansion expression. */
7477 new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
7479 if (TREE_CODE (new_arg) == TREE_VEC)
7480 /* Add to the expanded length adjustment the number of
7481 expanded arguments. We subtract one from this
7482 measurement, because the argument pack expression
7483 itself is already counted as 1 in
7484 LEN. EXPANDED_LEN_ADJUST can actually be negative, if
7485 the argument pack is empty. */
7486 expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
7488 else if (ARGUMENT_PACK_P (orig_arg))
7490 /* Substitute into each of the arguments. */
7491 new_arg = make_node (TREE_CODE (orig_arg));
7493 SET_ARGUMENT_PACK_ARGS (
7494 new_arg,
7495 tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
7496 args, complain, in_decl));
7498 if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
7499 new_arg = error_mark_node;
7501 if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
7502 TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
7503 complain, in_decl);
7504 TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
7506 if (TREE_TYPE (new_arg) == error_mark_node)
7507 new_arg = error_mark_node;
7510 else
7511 new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
7513 if (new_arg == error_mark_node)
7514 return error_mark_node;
7516 elts[i] = new_arg;
7517 if (new_arg != orig_arg)
7518 need_new = 1;
7521 if (!need_new)
7522 return t;
7524 /* Make space for the expanded arguments coming from template
7525 argument packs. */
7526 t = make_tree_vec (len + expanded_len_adjust);
7527 for (i = 0, out = 0; i < len; i++)
7529 if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
7530 || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
7531 && TREE_CODE (elts[i]) == TREE_VEC)
7533 int idx;
7535 /* Now expand the template argument pack "in place". */
7536 for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
7537 TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
7539 else
7541 TREE_VEC_ELT (t, out) = elts[i];
7542 out++;
7546 return t;
7549 /* Return the result of substituting ARGS into the template parameters
7550 given by PARMS. If there are m levels of ARGS and m + n levels of
7551 PARMS, then the result will contain n levels of PARMS. For
7552 example, if PARMS is `template <class T> template <class U>
7553 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
7554 result will be `template <int*, double, class V>'. */
7556 static tree
7557 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
7559 tree r = NULL_TREE;
7560 tree* new_parms;
7562 /* When substituting into a template, we must set
7563 PROCESSING_TEMPLATE_DECL as the template parameters may be
7564 dependent if they are based on one-another, and the dependency
7565 predicates are short-circuit outside of templates. */
7566 ++processing_template_decl;
7568 for (new_parms = &r;
7569 TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
7570 new_parms = &(TREE_CHAIN (*new_parms)),
7571 parms = TREE_CHAIN (parms))
7573 tree new_vec =
7574 make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
7575 int i;
7577 for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
7579 tree tuple;
7580 tree default_value;
7581 tree parm_decl;
7583 if (parms == error_mark_node)
7584 continue;
7586 tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
7588 if (tuple == error_mark_node)
7589 continue;
7591 default_value = TREE_PURPOSE (tuple);
7592 parm_decl = TREE_VALUE (tuple);
7594 parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
7595 if (TREE_CODE (parm_decl) == PARM_DECL
7596 && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
7597 parm_decl = error_mark_node;
7598 default_value = tsubst_template_arg (default_value, args,
7599 complain, NULL_TREE);
7601 tuple = build_tree_list (default_value, parm_decl);
7602 TREE_VEC_ELT (new_vec, i) = tuple;
7605 *new_parms =
7606 tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
7607 - TMPL_ARGS_DEPTH (args)),
7608 new_vec, NULL_TREE);
7611 --processing_template_decl;
7613 return r;
7616 /* Substitute the ARGS into the indicated aggregate (or enumeration)
7617 type T. If T is not an aggregate or enumeration type, it is
7618 handled as if by tsubst. IN_DECL is as for tsubst. If
7619 ENTERING_SCOPE is nonzero, T is the context for a template which
7620 we are presently tsubst'ing. Return the substituted value. */
7622 static tree
7623 tsubst_aggr_type (tree t,
7624 tree args,
7625 tsubst_flags_t complain,
7626 tree in_decl,
7627 int entering_scope)
7629 if (t == NULL_TREE)
7630 return NULL_TREE;
7632 switch (TREE_CODE (t))
7634 case RECORD_TYPE:
7635 if (TYPE_PTRMEMFUNC_P (t))
7636 return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
7638 /* Else fall through. */
7639 case ENUMERAL_TYPE:
7640 case UNION_TYPE:
7641 if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
7643 tree argvec;
7644 tree context;
7645 tree r;
7646 bool saved_skip_evaluation;
7648 /* In "sizeof(X<I>)" we need to evaluate "I". */
7649 saved_skip_evaluation = skip_evaluation;
7650 skip_evaluation = false;
7652 /* First, determine the context for the type we are looking
7653 up. */
7654 context = TYPE_CONTEXT (t);
7655 if (context)
7656 context = tsubst_aggr_type (context, args, complain,
7657 in_decl, /*entering_scope=*/1);
7659 /* Then, figure out what arguments are appropriate for the
7660 type we are trying to find. For example, given:
7662 template <class T> struct S;
7663 template <class T, class U> void f(T, U) { S<U> su; }
7665 and supposing that we are instantiating f<int, double>,
7666 then our ARGS will be {int, double}, but, when looking up
7667 S we only want {double}. */
7668 argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
7669 complain, in_decl);
7670 if (argvec == error_mark_node)
7671 r = error_mark_node;
7672 else
7674 r = lookup_template_class (t, argvec, in_decl, context,
7675 entering_scope, complain);
7676 r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7679 skip_evaluation = saved_skip_evaluation;
7681 return r;
7683 else
7684 /* This is not a template type, so there's nothing to do. */
7685 return t;
7687 default:
7688 return tsubst (t, args, complain, in_decl);
7692 /* Substitute into the default argument ARG (a default argument for
7693 FN), which has the indicated TYPE. */
7695 tree
7696 tsubst_default_argument (tree fn, tree type, tree arg)
7698 tree saved_class_ptr = NULL_TREE;
7699 tree saved_class_ref = NULL_TREE;
7701 /* This default argument came from a template. Instantiate the
7702 default argument here, not in tsubst. In the case of
7703 something like:
7705 template <class T>
7706 struct S {
7707 static T t();
7708 void f(T = t());
7711 we must be careful to do name lookup in the scope of S<T>,
7712 rather than in the current class. */
7713 push_access_scope (fn);
7714 /* The "this" pointer is not valid in a default argument. */
7715 if (cfun)
7717 saved_class_ptr = current_class_ptr;
7718 cp_function_chain->x_current_class_ptr = NULL_TREE;
7719 saved_class_ref = current_class_ref;
7720 cp_function_chain->x_current_class_ref = NULL_TREE;
7723 push_deferring_access_checks(dk_no_deferred);
7724 /* The default argument expression may cause implicitly defined
7725 member functions to be synthesized, which will result in garbage
7726 collection. We must treat this situation as if we were within
7727 the body of function so as to avoid collecting live data on the
7728 stack. */
7729 ++function_depth;
7730 arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
7731 tf_warning_or_error, NULL_TREE,
7732 /*integral_constant_expression_p=*/false);
7733 --function_depth;
7734 pop_deferring_access_checks();
7736 /* Restore the "this" pointer. */
7737 if (cfun)
7739 cp_function_chain->x_current_class_ptr = saved_class_ptr;
7740 cp_function_chain->x_current_class_ref = saved_class_ref;
7743 pop_access_scope (fn);
7745 /* Make sure the default argument is reasonable. */
7746 arg = check_default_argument (type, arg);
7748 return arg;
7751 /* Substitute into all the default arguments for FN. */
7753 static void
7754 tsubst_default_arguments (tree fn)
7756 tree arg;
7757 tree tmpl_args;
7759 tmpl_args = DECL_TI_ARGS (fn);
7761 /* If this function is not yet instantiated, we certainly don't need
7762 its default arguments. */
7763 if (uses_template_parms (tmpl_args))
7764 return;
7766 for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
7767 arg;
7768 arg = TREE_CHAIN (arg))
7769 if (TREE_PURPOSE (arg))
7770 TREE_PURPOSE (arg) = tsubst_default_argument (fn,
7771 TREE_VALUE (arg),
7772 TREE_PURPOSE (arg));
7775 /* Substitute the ARGS into the T, which is a _DECL. Return the
7776 result of the substitution. Issue error and warning messages under
7777 control of COMPLAIN. */
7779 static tree
7780 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
7782 location_t saved_loc;
7783 tree r = NULL_TREE;
7784 tree in_decl = t;
7786 /* Set the filename and linenumber to improve error-reporting. */
7787 saved_loc = input_location;
7788 input_location = DECL_SOURCE_LOCATION (t);
7790 switch (TREE_CODE (t))
7792 case TEMPLATE_DECL:
7794 /* We can get here when processing a member function template,
7795 member class template, and template template parameter of
7796 a template class. */
7797 tree decl = DECL_TEMPLATE_RESULT (t);
7798 tree spec;
7799 tree tmpl_args;
7800 tree full_args;
7802 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7804 /* Template template parameter is treated here. */
7805 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7806 if (new_type == error_mark_node)
7807 return error_mark_node;
7809 r = copy_decl (t);
7810 TREE_CHAIN (r) = NULL_TREE;
7811 TREE_TYPE (r) = new_type;
7812 DECL_TEMPLATE_RESULT (r)
7813 = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
7814 DECL_TEMPLATE_PARMS (r)
7815 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7816 complain);
7817 TYPE_NAME (new_type) = r;
7818 break;
7821 /* We might already have an instance of this template.
7822 The ARGS are for the surrounding class type, so the
7823 full args contain the tsubst'd args for the context,
7824 plus the innermost args from the template decl. */
7825 tmpl_args = DECL_CLASS_TEMPLATE_P (t)
7826 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
7827 : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
7828 /* Because this is a template, the arguments will still be
7829 dependent, even after substitution. If
7830 PROCESSING_TEMPLATE_DECL is not set, the dependency
7831 predicates will short-circuit. */
7832 ++processing_template_decl;
7833 full_args = tsubst_template_args (tmpl_args, args,
7834 complain, in_decl);
7835 --processing_template_decl;
7836 if (full_args == error_mark_node)
7837 return error_mark_node;
7839 /* tsubst_template_args doesn't copy the vector if
7840 nothing changed. But, *something* should have
7841 changed. */
7842 gcc_assert (full_args != tmpl_args);
7844 spec = retrieve_specialization (t, full_args,
7845 /*class_specializations_p=*/true);
7846 if (spec != NULL_TREE)
7848 r = spec;
7849 break;
7852 /* Make a new template decl. It will be similar to the
7853 original, but will record the current template arguments.
7854 We also create a new function declaration, which is just
7855 like the old one, but points to this new template, rather
7856 than the old one. */
7857 r = copy_decl (t);
7858 gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
7859 TREE_CHAIN (r) = NULL_TREE;
7861 DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
7863 if (TREE_CODE (decl) == TYPE_DECL)
7865 tree new_type;
7866 ++processing_template_decl;
7867 new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7868 --processing_template_decl;
7869 if (new_type == error_mark_node)
7870 return error_mark_node;
7872 TREE_TYPE (r) = new_type;
7873 CLASSTYPE_TI_TEMPLATE (new_type) = r;
7874 DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
7875 DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
7876 DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
7878 else
7880 tree new_decl;
7881 ++processing_template_decl;
7882 new_decl = tsubst (decl, args, complain, in_decl);
7883 --processing_template_decl;
7884 if (new_decl == error_mark_node)
7885 return error_mark_node;
7887 DECL_TEMPLATE_RESULT (r) = new_decl;
7888 DECL_TI_TEMPLATE (new_decl) = r;
7889 TREE_TYPE (r) = TREE_TYPE (new_decl);
7890 DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
7891 DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
7894 SET_DECL_IMPLICIT_INSTANTIATION (r);
7895 DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
7896 DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
7898 /* The template parameters for this new template are all the
7899 template parameters for the old template, except the
7900 outermost level of parameters. */
7901 DECL_TEMPLATE_PARMS (r)
7902 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7903 complain);
7905 if (PRIMARY_TEMPLATE_P (t))
7906 DECL_PRIMARY_TEMPLATE (r) = r;
7908 if (TREE_CODE (decl) != TYPE_DECL)
7909 /* Record this non-type partial instantiation. */
7910 register_specialization (r, t,
7911 DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
7912 false);
7914 break;
7916 case FUNCTION_DECL:
7918 tree ctx;
7919 tree argvec = NULL_TREE;
7920 tree *friends;
7921 tree gen_tmpl;
7922 tree type;
7923 int member;
7924 int args_depth;
7925 int parms_depth;
7927 /* Nobody should be tsubst'ing into non-template functions. */
7928 gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
7930 if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
7932 tree spec;
7933 bool dependent_p;
7935 /* If T is not dependent, just return it. We have to
7936 increment PROCESSING_TEMPLATE_DECL because
7937 value_dependent_expression_p assumes that nothing is
7938 dependent when PROCESSING_TEMPLATE_DECL is zero. */
7939 ++processing_template_decl;
7940 dependent_p = value_dependent_expression_p (t);
7941 --processing_template_decl;
7942 if (!dependent_p)
7943 return t;
7945 /* Calculate the most general template of which R is a
7946 specialization, and the complete set of arguments used to
7947 specialize R. */
7948 gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
7949 argvec = tsubst_template_args (DECL_TI_ARGS
7950 (DECL_TEMPLATE_RESULT (gen_tmpl)),
7951 args, complain, in_decl);
7953 /* Check to see if we already have this specialization. */
7954 spec = retrieve_specialization (gen_tmpl, argvec,
7955 /*class_specializations_p=*/false);
7957 if (spec)
7959 r = spec;
7960 break;
7963 /* We can see more levels of arguments than parameters if
7964 there was a specialization of a member template, like
7965 this:
7967 template <class T> struct S { template <class U> void f(); }
7968 template <> template <class U> void S<int>::f(U);
7970 Here, we'll be substituting into the specialization,
7971 because that's where we can find the code we actually
7972 want to generate, but we'll have enough arguments for
7973 the most general template.
7975 We also deal with the peculiar case:
7977 template <class T> struct S {
7978 template <class U> friend void f();
7980 template <class U> void f() {}
7981 template S<int>;
7982 template void f<double>();
7984 Here, the ARGS for the instantiation of will be {int,
7985 double}. But, we only need as many ARGS as there are
7986 levels of template parameters in CODE_PATTERN. We are
7987 careful not to get fooled into reducing the ARGS in
7988 situations like:
7990 template <class T> struct S { template <class U> void f(U); }
7991 template <class T> template <> void S<T>::f(int) {}
7993 which we can spot because the pattern will be a
7994 specialization in this case. */
7995 args_depth = TMPL_ARGS_DEPTH (args);
7996 parms_depth =
7997 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
7998 if (args_depth > parms_depth
7999 && !DECL_TEMPLATE_SPECIALIZATION (t))
8000 args = get_innermost_template_args (args, parms_depth);
8002 else
8004 /* This special case arises when we have something like this:
8006 template <class T> struct S {
8007 friend void f<int>(int, double);
8010 Here, the DECL_TI_TEMPLATE for the friend declaration
8011 will be an IDENTIFIER_NODE. We are being called from
8012 tsubst_friend_function, and we want only to create a
8013 new decl (R) with appropriate types so that we can call
8014 determine_specialization. */
8015 gen_tmpl = NULL_TREE;
8018 if (DECL_CLASS_SCOPE_P (t))
8020 if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
8021 member = 2;
8022 else
8023 member = 1;
8024 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
8025 complain, t, /*entering_scope=*/1);
8027 else
8029 member = 0;
8030 ctx = DECL_CONTEXT (t);
8032 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8033 if (type == error_mark_node)
8034 return error_mark_node;
8036 /* We do NOT check for matching decls pushed separately at this
8037 point, as they may not represent instantiations of this
8038 template, and in any case are considered separate under the
8039 discrete model. */
8040 r = copy_decl (t);
8041 DECL_USE_TEMPLATE (r) = 0;
8042 TREE_TYPE (r) = type;
8043 /* Clear out the mangled name and RTL for the instantiation. */
8044 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8045 SET_DECL_RTL (r, NULL_RTX);
8046 DECL_INITIAL (r) = NULL_TREE;
8047 DECL_CONTEXT (r) = ctx;
8049 if (member && DECL_CONV_FN_P (r))
8050 /* Type-conversion operator. Reconstruct the name, in
8051 case it's the name of one of the template's parameters. */
8052 DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
8054 DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
8055 complain, t);
8056 DECL_RESULT (r) = NULL_TREE;
8058 TREE_STATIC (r) = 0;
8059 TREE_PUBLIC (r) = TREE_PUBLIC (t);
8060 DECL_EXTERNAL (r) = 1;
8061 /* If this is an instantiation of a function with internal
8062 linkage, we already know what object file linkage will be
8063 assigned to the instantiation. */
8064 DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
8065 DECL_DEFER_OUTPUT (r) = 0;
8066 TREE_CHAIN (r) = NULL_TREE;
8067 DECL_PENDING_INLINE_INFO (r) = 0;
8068 DECL_PENDING_INLINE_P (r) = 0;
8069 DECL_SAVED_TREE (r) = NULL_TREE;
8070 TREE_USED (r) = 0;
8071 if (DECL_CLONED_FUNCTION (r))
8073 DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
8074 args, complain, t);
8075 TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
8076 TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
8079 /* Set up the DECL_TEMPLATE_INFO for R. There's no need to do
8080 this in the special friend case mentioned above where
8081 GEN_TMPL is NULL. */
8082 if (gen_tmpl)
8084 DECL_TEMPLATE_INFO (r)
8085 = tree_cons (gen_tmpl, argvec, NULL_TREE);
8086 SET_DECL_IMPLICIT_INSTANTIATION (r);
8087 register_specialization (r, gen_tmpl, argvec, false);
8089 /* We're not supposed to instantiate default arguments
8090 until they are called, for a template. But, for a
8091 declaration like:
8093 template <class T> void f ()
8094 { extern void g(int i = T()); }
8096 we should do the substitution when the template is
8097 instantiated. We handle the member function case in
8098 instantiate_class_template since the default arguments
8099 might refer to other members of the class. */
8100 if (!member
8101 && !PRIMARY_TEMPLATE_P (gen_tmpl)
8102 && !uses_template_parms (argvec))
8103 tsubst_default_arguments (r);
8105 else
8106 DECL_TEMPLATE_INFO (r) = NULL_TREE;
8108 /* Copy the list of befriending classes. */
8109 for (friends = &DECL_BEFRIENDING_CLASSES (r);
8110 *friends;
8111 friends = &TREE_CHAIN (*friends))
8113 *friends = copy_node (*friends);
8114 TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
8115 args, complain,
8116 in_decl);
8119 if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
8121 maybe_retrofit_in_chrg (r);
8122 if (DECL_CONSTRUCTOR_P (r))
8123 grok_ctor_properties (ctx, r);
8124 /* If this is an instantiation of a member template, clone it.
8125 If it isn't, that'll be handled by
8126 clone_constructors_and_destructors. */
8127 if (PRIMARY_TEMPLATE_P (gen_tmpl))
8128 clone_function_decl (r, /*update_method_vec_p=*/0);
8130 else if (IDENTIFIER_OPNAME_P (DECL_NAME (r))
8131 && !grok_op_properties (r, (complain & tf_error) != 0))
8132 return error_mark_node;
8134 if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
8135 SET_DECL_FRIEND_CONTEXT (r,
8136 tsubst (DECL_FRIEND_CONTEXT (t),
8137 args, complain, in_decl));
8139 /* Possibly limit visibility based on template args. */
8140 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8141 if (DECL_VISIBILITY_SPECIFIED (t))
8143 DECL_VISIBILITY_SPECIFIED (r) = 0;
8144 DECL_ATTRIBUTES (r)
8145 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8147 determine_visibility (r);
8149 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8150 args, complain, in_decl);
8152 break;
8154 case PARM_DECL:
8156 tree type = NULL_TREE;
8157 int i, len = 1;
8158 tree expanded_types = NULL_TREE;
8159 tree prev_r = NULL_TREE;
8160 tree first_r = NULL_TREE;
8162 if (FUNCTION_PARAMETER_PACK_P (t))
8164 /* If there is a local specialization that isn't a
8165 parameter pack, it means that we're doing a "simple"
8166 substitution from inside tsubst_pack_expansion. Just
8167 return the local specialization (which will be a single
8168 parm). */
8169 tree spec = NULL_TREE;
8170 if (local_specializations)
8171 spec = retrieve_local_specialization (t);
8172 if (spec
8173 && TREE_CODE (spec) == PARM_DECL
8174 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
8175 return spec;
8177 /* Expand the TYPE_PACK_EXPANSION that provides the types for
8178 the parameters in this function parameter pack. */
8179 expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
8180 complain, in_decl);
8181 if (TREE_CODE (expanded_types) == TREE_VEC)
8183 len = TREE_VEC_LENGTH (expanded_types);
8185 /* Zero-length parameter packs are boring. Just substitute
8186 into the chain. */
8187 if (len == 0)
8188 return tsubst (TREE_CHAIN (t), args, complain,
8189 TREE_CHAIN (t));
8191 else
8193 /* All we did was update the type. Make a note of that. */
8194 type = expanded_types;
8195 expanded_types = NULL_TREE;
8199 /* Loop through all of the parameter's we'll build. When T is
8200 a function parameter pack, LEN is the number of expanded
8201 types in EXPANDED_TYPES; otherwise, LEN is 1. */
8202 r = NULL_TREE;
8203 for (i = 0; i < len; ++i)
8205 prev_r = r;
8206 r = copy_node (t);
8207 if (DECL_TEMPLATE_PARM_P (t))
8208 SET_DECL_TEMPLATE_PARM_P (r);
8210 if (expanded_types)
8211 /* We're on the Ith parameter of the function parameter
8212 pack. */
8214 /* Get the Ith type. */
8215 type = TREE_VEC_ELT (expanded_types, i);
8217 if (DECL_NAME (r))
8218 /* Rename the parameter to include the index. */
8219 DECL_NAME (r) =
8220 make_ith_pack_parameter_name (DECL_NAME (r), i);
8222 else if (!type)
8223 /* We're dealing with a normal parameter. */
8224 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8226 type = type_decays_to (type);
8227 TREE_TYPE (r) = type;
8228 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8230 if (DECL_INITIAL (r))
8232 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
8233 DECL_INITIAL (r) = TREE_TYPE (r);
8234 else
8235 DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
8236 complain, in_decl);
8239 DECL_CONTEXT (r) = NULL_TREE;
8241 if (!DECL_TEMPLATE_PARM_P (r))
8242 DECL_ARG_TYPE (r) = type_passed_as (type);
8244 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8245 args, complain, in_decl);
8247 /* Keep track of the first new parameter we
8248 generate. That's what will be returned to the
8249 caller. */
8250 if (!first_r)
8251 first_r = r;
8253 /* Build a proper chain of parameters when substituting
8254 into a function parameter pack. */
8255 if (prev_r)
8256 TREE_CHAIN (prev_r) = r;
8259 if (TREE_CHAIN (t))
8260 TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
8261 complain, TREE_CHAIN (t));
8263 /* FIRST_R contains the start of the chain we've built. */
8264 r = first_r;
8266 break;
8268 case FIELD_DECL:
8270 tree type;
8272 r = copy_decl (t);
8273 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8274 if (type == error_mark_node)
8275 return error_mark_node;
8276 TREE_TYPE (r) = type;
8277 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8279 /* DECL_INITIAL gives the number of bits in a bit-field. */
8280 DECL_INITIAL (r)
8281 = tsubst_expr (DECL_INITIAL (t), args,
8282 complain, in_decl,
8283 /*integral_constant_expression_p=*/true);
8284 /* We don't have to set DECL_CONTEXT here; it is set by
8285 finish_member_declaration. */
8286 TREE_CHAIN (r) = NULL_TREE;
8287 if (VOID_TYPE_P (type))
8288 error ("instantiation of %q+D as type %qT", r, type);
8290 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8291 args, complain, in_decl);
8293 break;
8295 case USING_DECL:
8296 /* We reach here only for member using decls. */
8297 if (DECL_DEPENDENT_P (t))
8299 r = do_class_using_decl
8300 (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
8301 tsubst_copy (DECL_NAME (t), args, complain, in_decl));
8302 if (!r)
8303 r = error_mark_node;
8305 else
8307 r = copy_node (t);
8308 TREE_CHAIN (r) = NULL_TREE;
8310 break;
8312 case TYPE_DECL:
8313 case VAR_DECL:
8315 tree argvec = NULL_TREE;
8316 tree gen_tmpl = NULL_TREE;
8317 tree spec;
8318 tree tmpl = NULL_TREE;
8319 tree ctx;
8320 tree type = NULL_TREE;
8321 bool local_p;
8323 if (TREE_CODE (t) == TYPE_DECL
8324 && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
8326 /* If this is the canonical decl, we don't have to
8327 mess with instantiations, and often we can't (for
8328 typename, template type parms and such). Note that
8329 TYPE_NAME is not correct for the above test if
8330 we've copied the type for a typedef. */
8331 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8332 if (type == error_mark_node)
8333 return error_mark_node;
8334 r = TYPE_NAME (type);
8335 break;
8338 /* Check to see if we already have the specialization we
8339 need. */
8340 spec = NULL_TREE;
8341 if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
8343 /* T is a static data member or namespace-scope entity.
8344 We have to substitute into namespace-scope variables
8345 (even though such entities are never templates) because
8346 of cases like:
8348 template <class T> void f() { extern T t; }
8350 where the entity referenced is not known until
8351 instantiation time. */
8352 local_p = false;
8353 ctx = DECL_CONTEXT (t);
8354 if (DECL_CLASS_SCOPE_P (t))
8356 ctx = tsubst_aggr_type (ctx, args,
8357 complain,
8358 in_decl, /*entering_scope=*/1);
8359 /* If CTX is unchanged, then T is in fact the
8360 specialization we want. That situation occurs when
8361 referencing a static data member within in its own
8362 class. We can use pointer equality, rather than
8363 same_type_p, because DECL_CONTEXT is always
8364 canonical. */
8365 if (ctx == DECL_CONTEXT (t))
8366 spec = t;
8369 if (!spec)
8371 tmpl = DECL_TI_TEMPLATE (t);
8372 gen_tmpl = most_general_template (tmpl);
8373 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
8374 spec = (retrieve_specialization
8375 (gen_tmpl, argvec,
8376 /*class_specializations_p=*/false));
8379 else
8381 /* A local variable. */
8382 local_p = true;
8383 /* Subsequent calls to pushdecl will fill this in. */
8384 ctx = NULL_TREE;
8385 spec = retrieve_local_specialization (t);
8387 /* If we already have the specialization we need, there is
8388 nothing more to do. */
8389 if (spec)
8391 r = spec;
8392 break;
8395 /* Create a new node for the specialization we need. */
8396 r = copy_decl (t);
8397 if (type == NULL_TREE)
8398 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8399 if (TREE_CODE (r) == VAR_DECL)
8401 /* Even if the original location is out of scope, the
8402 newly substituted one is not. */
8403 DECL_DEAD_FOR_LOCAL (r) = 0;
8404 DECL_INITIALIZED_P (r) = 0;
8405 DECL_TEMPLATE_INSTANTIATED (r) = 0;
8406 if (type == error_mark_node)
8407 return error_mark_node;
8408 if (TREE_CODE (type) == FUNCTION_TYPE)
8410 /* It may seem that this case cannot occur, since:
8412 typedef void f();
8413 void g() { f x; }
8415 declares a function, not a variable. However:
8417 typedef void f();
8418 template <typename T> void g() { T t; }
8419 template void g<f>();
8421 is an attempt to declare a variable with function
8422 type. */
8423 error ("variable %qD has function type",
8424 /* R is not yet sufficiently initialized, so we
8425 just use its name. */
8426 DECL_NAME (r));
8427 return error_mark_node;
8429 type = complete_type (type);
8430 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
8431 = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
8432 type = check_var_type (DECL_NAME (r), type);
8434 if (DECL_HAS_VALUE_EXPR_P (t))
8436 tree ve = DECL_VALUE_EXPR (t);
8437 ve = tsubst_expr (ve, args, complain, in_decl,
8438 /*constant_expression_p=*/false);
8439 SET_DECL_VALUE_EXPR (r, ve);
8442 else if (DECL_SELF_REFERENCE_P (t))
8443 SET_DECL_SELF_REFERENCE_P (r);
8444 TREE_TYPE (r) = type;
8445 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8446 DECL_CONTEXT (r) = ctx;
8447 /* Clear out the mangled name and RTL for the instantiation. */
8448 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8449 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8450 SET_DECL_RTL (r, NULL_RTX);
8451 /* The initializer must not be expanded until it is required;
8452 see [temp.inst]. */
8453 DECL_INITIAL (r) = NULL_TREE;
8454 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8455 SET_DECL_RTL (r, NULL_RTX);
8456 DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
8457 if (TREE_CODE (r) == VAR_DECL)
8459 /* Possibly limit visibility based on template args. */
8460 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8461 if (DECL_VISIBILITY_SPECIFIED (t))
8463 DECL_VISIBILITY_SPECIFIED (r) = 0;
8464 DECL_ATTRIBUTES (r)
8465 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8467 determine_visibility (r);
8469 /* Preserve a typedef that names a type. */
8470 else if (TREE_CODE (r) == TYPE_DECL
8471 && DECL_ORIGINAL_TYPE (t)
8472 && type != error_mark_node)
8474 DECL_ORIGINAL_TYPE (r) = tsubst (DECL_ORIGINAL_TYPE (t),
8475 args, complain, in_decl);
8476 TREE_TYPE (r) = type = build_variant_type_copy (type);
8477 TYPE_NAME (type) = r;
8480 if (!local_p)
8482 /* A static data member declaration is always marked
8483 external when it is declared in-class, even if an
8484 initializer is present. We mimic the non-template
8485 processing here. */
8486 DECL_EXTERNAL (r) = 1;
8488 register_specialization (r, gen_tmpl, argvec, false);
8489 DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
8490 SET_DECL_IMPLICIT_INSTANTIATION (r);
8492 else
8493 register_local_specialization (r, t);
8495 TREE_CHAIN (r) = NULL_TREE;
8497 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
8498 (int) ATTR_FLAG_TYPE_IN_PLACE,
8499 args, complain, in_decl);
8500 layout_decl (r, 0);
8502 break;
8504 default:
8505 gcc_unreachable ();
8508 /* Restore the file and line information. */
8509 input_location = saved_loc;
8511 return r;
8514 /* Substitute into the ARG_TYPES of a function type. */
8516 static tree
8517 tsubst_arg_types (tree arg_types,
8518 tree args,
8519 tsubst_flags_t complain,
8520 tree in_decl)
8522 tree remaining_arg_types;
8523 tree type = NULL_TREE;
8524 int i = 1;
8525 tree expanded_args = NULL_TREE;
8526 tree default_arg;
8528 if (!arg_types || arg_types == void_list_node)
8529 return arg_types;
8531 remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
8532 args, complain, in_decl);
8533 if (remaining_arg_types == error_mark_node)
8534 return error_mark_node;
8536 if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
8538 /* For a pack expansion, perform substitution on the
8539 entire expression. Later on, we'll handle the arguments
8540 one-by-one. */
8541 expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
8542 args, complain, in_decl);
8544 if (TREE_CODE (expanded_args) == TREE_VEC)
8545 /* So that we'll spin through the parameters, one by one. */
8546 i = TREE_VEC_LENGTH (expanded_args);
8547 else
8549 /* We only partially substituted into the parameter
8550 pack. Our type is TYPE_PACK_EXPANSION. */
8551 type = expanded_args;
8552 expanded_args = NULL_TREE;
8556 while (i > 0) {
8557 --i;
8559 if (expanded_args)
8560 type = TREE_VEC_ELT (expanded_args, i);
8561 else if (!type)
8562 type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
8564 if (type == error_mark_node)
8565 return error_mark_node;
8566 if (VOID_TYPE_P (type))
8568 if (complain & tf_error)
8570 error ("invalid parameter type %qT", type);
8571 if (in_decl)
8572 error ("in declaration %q+D", in_decl);
8574 return error_mark_node;
8577 /* Do array-to-pointer, function-to-pointer conversion, and ignore
8578 top-level qualifiers as required. */
8579 type = TYPE_MAIN_VARIANT (type_decays_to (type));
8581 /* We do not substitute into default arguments here. The standard
8582 mandates that they be instantiated only when needed, which is
8583 done in build_over_call. */
8584 default_arg = TREE_PURPOSE (arg_types);
8586 if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
8588 /* We've instantiated a template before its default arguments
8589 have been parsed. This can happen for a nested template
8590 class, and is not an error unless we require the default
8591 argument in a call of this function. */
8592 remaining_arg_types =
8593 tree_cons (default_arg, type, remaining_arg_types);
8594 VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg),
8595 remaining_arg_types);
8597 else
8598 remaining_arg_types =
8599 hash_tree_cons (default_arg, type, remaining_arg_types);
8602 return remaining_arg_types;
8605 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
8606 *not* handle the exception-specification for FNTYPE, because the
8607 initial substitution of explicitly provided template parameters
8608 during argument deduction forbids substitution into the
8609 exception-specification:
8611 [temp.deduct]
8613 All references in the function type of the function template to the
8614 corresponding template parameters are replaced by the specified tem-
8615 plate argument values. If a substitution in a template parameter or
8616 in the function type of the function template results in an invalid
8617 type, type deduction fails. [Note: The equivalent substitution in
8618 exception specifications is done only when the function is instanti-
8619 ated, at which point a program is ill-formed if the substitution
8620 results in an invalid type.] */
8622 static tree
8623 tsubst_function_type (tree t,
8624 tree args,
8625 tsubst_flags_t complain,
8626 tree in_decl)
8628 tree return_type;
8629 tree arg_types;
8630 tree fntype;
8632 /* The TYPE_CONTEXT is not used for function/method types. */
8633 gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
8635 /* Substitute the return type. */
8636 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8637 if (return_type == error_mark_node)
8638 return error_mark_node;
8639 /* The standard does not presently indicate that creation of a
8640 function type with an invalid return type is a deduction failure.
8641 However, that is clearly analogous to creating an array of "void"
8642 or a reference to a reference. This is core issue #486. */
8643 if (TREE_CODE (return_type) == ARRAY_TYPE
8644 || TREE_CODE (return_type) == FUNCTION_TYPE)
8646 if (complain & tf_error)
8648 if (TREE_CODE (return_type) == ARRAY_TYPE)
8649 error ("function returning an array");
8650 else
8651 error ("function returning a function");
8653 return error_mark_node;
8656 /* Substitute the argument types. */
8657 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
8658 complain, in_decl);
8659 if (arg_types == error_mark_node)
8660 return error_mark_node;
8662 if (TYPE_QUALS (return_type) != TYPE_UNQUALIFIED
8663 && in_decl != NULL_TREE
8664 && !TREE_NO_WARNING (in_decl)
8665 && (SCALAR_TYPE_P (return_type) || VOID_TYPE_P (return_type)))
8666 warning (OPT_Wignored_qualifiers,
8667 "type qualifiers ignored on function return type");
8669 /* Construct a new type node and return it. */
8670 if (TREE_CODE (t) == FUNCTION_TYPE)
8671 fntype = build_function_type (return_type, arg_types);
8672 else
8674 tree r = TREE_TYPE (TREE_VALUE (arg_types));
8675 if (! IS_AGGR_TYPE (r))
8677 /* [temp.deduct]
8679 Type deduction may fail for any of the following
8680 reasons:
8682 -- Attempting to create "pointer to member of T" when T
8683 is not a class type. */
8684 if (complain & tf_error)
8685 error ("creating pointer to member function of non-class type %qT",
8687 return error_mark_node;
8690 fntype = build_method_type_directly (r, return_type,
8691 TREE_CHAIN (arg_types));
8693 fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
8694 fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
8696 return fntype;
8699 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE. Substitute the template
8700 ARGS into that specification, and return the substituted
8701 specification. If there is no specification, return NULL_TREE. */
8703 static tree
8704 tsubst_exception_specification (tree fntype,
8705 tree args,
8706 tsubst_flags_t complain,
8707 tree in_decl)
8709 tree specs;
8710 tree new_specs;
8712 specs = TYPE_RAISES_EXCEPTIONS (fntype);
8713 new_specs = NULL_TREE;
8714 if (specs)
8716 if (! TREE_VALUE (specs))
8717 new_specs = specs;
8718 else
8719 while (specs)
8721 tree spec;
8722 int i, len = 1;
8723 tree expanded_specs = NULL_TREE;
8725 if (PACK_EXPANSION_P (TREE_VALUE (specs)))
8727 /* Expand the pack expansion type. */
8728 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
8729 args, complain,
8730 in_decl);
8732 if (expanded_specs == error_mark_node)
8733 return error_mark_node;
8734 else if (TREE_CODE (expanded_specs) == TREE_VEC)
8735 len = TREE_VEC_LENGTH (expanded_specs);
8736 else
8738 /* We're substituting into a member template, so
8739 we got a TYPE_PACK_EXPANSION back. Add that
8740 expansion and move on. */
8741 gcc_assert (TREE_CODE (expanded_specs)
8742 == TYPE_PACK_EXPANSION);
8743 new_specs = add_exception_specifier (new_specs,
8744 expanded_specs,
8745 complain);
8746 specs = TREE_CHAIN (specs);
8747 continue;
8751 for (i = 0; i < len; ++i)
8753 if (expanded_specs)
8754 spec = TREE_VEC_ELT (expanded_specs, i);
8755 else
8756 spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
8757 if (spec == error_mark_node)
8758 return spec;
8759 new_specs = add_exception_specifier (new_specs, spec,
8760 complain);
8763 specs = TREE_CHAIN (specs);
8766 return new_specs;
8769 /* Take the tree structure T and replace template parameters used
8770 therein with the argument vector ARGS. IN_DECL is an associated
8771 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
8772 Issue error and warning messages under control of COMPLAIN. Note
8773 that we must be relatively non-tolerant of extensions here, in
8774 order to preserve conformance; if we allow substitutions that
8775 should not be allowed, we may allow argument deductions that should
8776 not succeed, and therefore report ambiguous overload situations
8777 where there are none. In theory, we could allow the substitution,
8778 but indicate that it should have failed, and allow our caller to
8779 make sure that the right thing happens, but we don't try to do this
8780 yet.
8782 This function is used for dealing with types, decls and the like;
8783 for expressions, use tsubst_expr or tsubst_copy. */
8785 static tree
8786 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8788 tree type, r;
8790 if (t == NULL_TREE || t == error_mark_node
8791 || t == integer_type_node
8792 || t == void_type_node
8793 || t == char_type_node
8794 || t == unknown_type_node
8795 || TREE_CODE (t) == NAMESPACE_DECL)
8796 return t;
8798 if (DECL_P (t))
8799 return tsubst_decl (t, args, complain);
8801 if (TREE_CODE (t) == IDENTIFIER_NODE)
8802 type = IDENTIFIER_TYPE_VALUE (t);
8803 else
8804 type = TREE_TYPE (t);
8806 gcc_assert (type != unknown_type_node);
8808 /* Reuse typedefs. We need to do this to handle dependent attributes,
8809 such as attribute aligned. */
8810 if (TYPE_P (t)
8811 && TYPE_NAME (t)
8812 && TYPE_NAME (t) != TYPE_MAIN_DECL (t))
8814 tree decl = TYPE_NAME (t);
8816 if (DECL_CLASS_SCOPE_P (decl)
8817 && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl)))
8819 tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
8820 tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
8821 r = retrieve_specialization (tmpl, gen_args, false);
8823 else if (DECL_FUNCTION_SCOPE_P (decl))
8824 r = retrieve_local_specialization (decl);
8825 else
8826 r = NULL_TREE;
8828 if (r)
8830 r = TREE_TYPE (r);
8831 r = cp_build_qualified_type_real
8832 (r, cp_type_quals (t) | cp_type_quals (r),
8833 complain | tf_ignore_bad_quals);
8834 return r;
8836 /* Else we must be instantiating the typedef, so fall through. */
8839 if (type
8840 && TREE_CODE (t) != TYPENAME_TYPE
8841 && TREE_CODE (t) != IDENTIFIER_NODE
8842 && TREE_CODE (t) != FUNCTION_TYPE
8843 && TREE_CODE (t) != METHOD_TYPE)
8844 type = tsubst (type, args, complain, in_decl);
8845 if (type == error_mark_node)
8846 return error_mark_node;
8848 switch (TREE_CODE (t))
8850 case RECORD_TYPE:
8851 case UNION_TYPE:
8852 case ENUMERAL_TYPE:
8853 return tsubst_aggr_type (t, args, complain, in_decl,
8854 /*entering_scope=*/0);
8856 case ERROR_MARK:
8857 case IDENTIFIER_NODE:
8858 case VOID_TYPE:
8859 case REAL_TYPE:
8860 case COMPLEX_TYPE:
8861 case VECTOR_TYPE:
8862 case BOOLEAN_TYPE:
8863 case INTEGER_CST:
8864 case REAL_CST:
8865 case STRING_CST:
8866 return t;
8868 case INTEGER_TYPE:
8869 if (t == integer_type_node)
8870 return t;
8872 if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
8873 && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
8874 return t;
8877 tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
8879 max = tsubst_expr (omax, args, complain, in_decl,
8880 /*integral_constant_expression_p=*/false);
8881 max = fold_decl_constant_value (max);
8883 if (TREE_CODE (max) != INTEGER_CST
8884 && TREE_CODE (max) != TEMPLATE_PARM_INDEX
8885 && !at_function_scope_p ())
8887 if (complain & tf_error)
8888 error ("array bound is not an integer constant");
8889 return error_mark_node;
8892 /* [temp.deduct]
8894 Type deduction may fail for any of the following
8895 reasons:
8897 Attempting to create an array with a size that is
8898 zero or negative. */
8899 if (integer_zerop (max) && !(complain & tf_error))
8900 /* We must fail if performing argument deduction (as
8901 indicated by the state of complain), so that
8902 another substitution can be found. */
8903 return error_mark_node;
8904 else if (TREE_CODE (max) == INTEGER_CST
8905 && INT_CST_LT (max, integer_zero_node))
8907 if (complain & tf_error)
8908 error ("creating array with negative size (%qE)", max);
8910 return error_mark_node;
8913 return compute_array_index_type (NULL_TREE, max);
8916 case TEMPLATE_TYPE_PARM:
8917 case TEMPLATE_TEMPLATE_PARM:
8918 case BOUND_TEMPLATE_TEMPLATE_PARM:
8919 case TEMPLATE_PARM_INDEX:
8921 int idx;
8922 int level;
8923 int levels;
8924 tree arg = NULL_TREE;
8926 r = NULL_TREE;
8928 gcc_assert (TREE_VEC_LENGTH (args) > 0);
8929 template_parm_level_and_index (t, &level, &idx);
8931 levels = TMPL_ARGS_DEPTH (args);
8932 if (level <= levels)
8934 arg = TMPL_ARG (args, level, idx);
8936 if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
8937 /* See through ARGUMENT_PACK_SELECT arguments. */
8938 arg = ARGUMENT_PACK_SELECT_ARG (arg);
8941 if (arg == error_mark_node)
8942 return error_mark_node;
8943 else if (arg != NULL_TREE)
8945 if (ARGUMENT_PACK_P (arg))
8946 /* If ARG is an argument pack, we don't actually want to
8947 perform a substitution here, because substitutions
8948 for argument packs are only done
8949 element-by-element. We can get to this point when
8950 substituting the type of a non-type template
8951 parameter pack, when that type actually contains
8952 template parameter packs from an outer template, e.g.,
8954 template<typename... Types> struct A {
8955 template<Types... Values> struct B { };
8956 }; */
8957 return t;
8959 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
8961 int quals;
8962 gcc_assert (TYPE_P (arg));
8964 /* cv-quals from the template are discarded when
8965 substituting in a function or reference type. */
8966 if (TREE_CODE (arg) == FUNCTION_TYPE
8967 || TREE_CODE (arg) == METHOD_TYPE
8968 || TREE_CODE (arg) == REFERENCE_TYPE)
8969 quals = cp_type_quals (arg);
8970 else
8971 quals = cp_type_quals (arg) | cp_type_quals (t);
8973 return cp_build_qualified_type_real
8974 (arg, quals, complain | tf_ignore_bad_quals);
8976 else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8978 /* We are processing a type constructed from a
8979 template template parameter. */
8980 tree argvec = tsubst (TYPE_TI_ARGS (t),
8981 args, complain, in_decl);
8982 if (argvec == error_mark_node)
8983 return error_mark_node;
8985 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
8986 are resolving nested-types in the signature of a
8987 member function templates. Otherwise ARG is a
8988 TEMPLATE_DECL and is the real template to be
8989 instantiated. */
8990 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
8991 arg = TYPE_NAME (arg);
8993 r = lookup_template_class (arg,
8994 argvec, in_decl,
8995 DECL_CONTEXT (arg),
8996 /*entering_scope=*/0,
8997 complain);
8998 return cp_build_qualified_type_real
8999 (r, TYPE_QUALS (t), complain);
9001 else
9002 /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX. */
9003 return arg;
9006 if (level == 1)
9007 /* This can happen during the attempted tsubst'ing in
9008 unify. This means that we don't yet have any information
9009 about the template parameter in question. */
9010 return t;
9012 /* If we get here, we must have been looking at a parm for a
9013 more deeply nested template. Make a new version of this
9014 template parameter, but with a lower level. */
9015 switch (TREE_CODE (t))
9017 case TEMPLATE_TYPE_PARM:
9018 case TEMPLATE_TEMPLATE_PARM:
9019 case BOUND_TEMPLATE_TEMPLATE_PARM:
9020 if (cp_type_quals (t))
9022 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
9023 r = cp_build_qualified_type_real
9024 (r, cp_type_quals (t),
9025 complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
9026 ? tf_ignore_bad_quals : 0));
9028 else
9030 r = copy_type (t);
9031 TEMPLATE_TYPE_PARM_INDEX (r)
9032 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
9033 r, levels, args, complain);
9034 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
9035 TYPE_MAIN_VARIANT (r) = r;
9036 TYPE_POINTER_TO (r) = NULL_TREE;
9037 TYPE_REFERENCE_TO (r) = NULL_TREE;
9039 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
9040 /* We have reduced the level of the template
9041 template parameter, but not the levels of its
9042 template parameters, so canonical_type_parameter
9043 will not be able to find the canonical template
9044 template parameter for this level. Thus, we
9045 require structural equality checking to compare
9046 TEMPLATE_TEMPLATE_PARMs. */
9047 SET_TYPE_STRUCTURAL_EQUALITY (r);
9048 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
9049 SET_TYPE_STRUCTURAL_EQUALITY (r);
9050 else
9051 TYPE_CANONICAL (r) = canonical_type_parameter (r);
9053 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
9055 tree argvec = tsubst (TYPE_TI_ARGS (t), args,
9056 complain, in_decl);
9057 if (argvec == error_mark_node)
9058 return error_mark_node;
9060 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
9061 = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
9064 break;
9066 case TEMPLATE_PARM_INDEX:
9067 r = reduce_template_parm_level (t, type, levels, args, complain);
9068 break;
9070 default:
9071 gcc_unreachable ();
9074 return r;
9077 case TREE_LIST:
9079 tree purpose, value, chain;
9081 if (t == void_list_node)
9082 return t;
9084 purpose = TREE_PURPOSE (t);
9085 if (purpose)
9087 purpose = tsubst (purpose, args, complain, in_decl);
9088 if (purpose == error_mark_node)
9089 return error_mark_node;
9091 value = TREE_VALUE (t);
9092 if (value)
9094 value = tsubst (value, args, complain, in_decl);
9095 if (value == error_mark_node)
9096 return error_mark_node;
9098 chain = TREE_CHAIN (t);
9099 if (chain && chain != void_type_node)
9101 chain = tsubst (chain, args, complain, in_decl);
9102 if (chain == error_mark_node)
9103 return error_mark_node;
9105 if (purpose == TREE_PURPOSE (t)
9106 && value == TREE_VALUE (t)
9107 && chain == TREE_CHAIN (t))
9108 return t;
9109 return hash_tree_cons (purpose, value, chain);
9112 case TREE_BINFO:
9113 /* We should never be tsubsting a binfo. */
9114 gcc_unreachable ();
9116 case TREE_VEC:
9117 /* A vector of template arguments. */
9118 gcc_assert (!type);
9119 return tsubst_template_args (t, args, complain, in_decl);
9121 case POINTER_TYPE:
9122 case REFERENCE_TYPE:
9124 enum tree_code code;
9126 if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
9127 return t;
9129 code = TREE_CODE (t);
9132 /* [temp.deduct]
9134 Type deduction may fail for any of the following
9135 reasons:
9137 -- Attempting to create a pointer to reference type.
9138 -- Attempting to create a reference to a reference type or
9139 a reference to void.
9141 Core issue 106 says that creating a reference to a reference
9142 during instantiation is no longer a cause for failure. We
9143 only enforce this check in strict C++98 mode. */
9144 if ((TREE_CODE (type) == REFERENCE_TYPE
9145 && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
9146 || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
9148 static location_t last_loc;
9150 /* We keep track of the last time we issued this error
9151 message to avoid spewing a ton of messages during a
9152 single bad template instantiation. */
9153 if (complain & tf_error
9154 #ifdef USE_MAPPED_LOCATION
9155 && last_loc != input_location
9156 #else
9157 && (last_loc.line != input_line
9158 || last_loc.file != input_filename)
9159 #endif
9162 if (TREE_CODE (type) == VOID_TYPE)
9163 error ("forming reference to void");
9164 else
9165 error ("forming %s to reference type %qT",
9166 (code == POINTER_TYPE) ? "pointer" : "reference",
9167 type);
9168 last_loc = input_location;
9171 return error_mark_node;
9173 else if (code == POINTER_TYPE)
9175 r = build_pointer_type (type);
9176 if (TREE_CODE (type) == METHOD_TYPE)
9177 r = build_ptrmemfunc_type (r);
9179 else if (TREE_CODE (type) == REFERENCE_TYPE)
9180 /* In C++0x, during template argument substitution, when there is an
9181 attempt to create a reference to a reference type, reference
9182 collapsing is applied as described in [14.3.1/4 temp.arg.type]:
9184 "If a template-argument for a template-parameter T names a type
9185 that is a reference to a type A, an attempt to create the type
9186 'lvalue reference to cv T' creates the type 'lvalue reference to
9187 A,' while an attempt to create the type type rvalue reference to
9188 cv T' creates the type T"
9190 r = cp_build_reference_type
9191 (TREE_TYPE (type),
9192 TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
9193 else
9194 r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
9195 r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
9197 if (r != error_mark_node)
9198 /* Will this ever be needed for TYPE_..._TO values? */
9199 layout_type (r);
9201 return r;
9203 case OFFSET_TYPE:
9205 r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
9206 if (r == error_mark_node || !IS_AGGR_TYPE (r))
9208 /* [temp.deduct]
9210 Type deduction may fail for any of the following
9211 reasons:
9213 -- Attempting to create "pointer to member of T" when T
9214 is not a class type. */
9215 if (complain & tf_error)
9216 error ("creating pointer to member of non-class type %qT", r);
9217 return error_mark_node;
9219 if (TREE_CODE (type) == REFERENCE_TYPE)
9221 if (complain & tf_error)
9222 error ("creating pointer to member reference type %qT", type);
9223 return error_mark_node;
9225 if (TREE_CODE (type) == VOID_TYPE)
9227 if (complain & tf_error)
9228 error ("creating pointer to member of type void");
9229 return error_mark_node;
9231 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
9232 if (TREE_CODE (type) == FUNCTION_TYPE)
9234 /* The type of the implicit object parameter gets its
9235 cv-qualifiers from the FUNCTION_TYPE. */
9236 tree method_type;
9237 tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
9238 cp_type_quals (type));
9239 tree memptr;
9240 method_type = build_method_type_directly (this_type,
9241 TREE_TYPE (type),
9242 TYPE_ARG_TYPES (type));
9243 memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
9244 return cp_build_qualified_type_real (memptr, cp_type_quals (t),
9245 complain);
9247 else
9248 return cp_build_qualified_type_real (build_ptrmem_type (r, type),
9249 TYPE_QUALS (t),
9250 complain);
9252 case FUNCTION_TYPE:
9253 case METHOD_TYPE:
9255 tree fntype;
9256 tree specs;
9257 fntype = tsubst_function_type (t, args, complain, in_decl);
9258 if (fntype == error_mark_node)
9259 return error_mark_node;
9261 /* Substitute the exception specification. */
9262 specs = tsubst_exception_specification (t, args, complain,
9263 in_decl);
9264 if (specs == error_mark_node)
9265 return error_mark_node;
9266 if (specs)
9267 fntype = build_exception_variant (fntype, specs);
9268 return fntype;
9270 case ARRAY_TYPE:
9272 tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
9273 if (domain == error_mark_node)
9274 return error_mark_node;
9276 /* As an optimization, we avoid regenerating the array type if
9277 it will obviously be the same as T. */
9278 if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
9279 return t;
9281 /* These checks should match the ones in grokdeclarator.
9283 [temp.deduct]
9285 The deduction may fail for any of the following reasons:
9287 -- Attempting to create an array with an element type that
9288 is void, a function type, or a reference type, or [DR337]
9289 an abstract class type. */
9290 if (TREE_CODE (type) == VOID_TYPE
9291 || TREE_CODE (type) == FUNCTION_TYPE
9292 || TREE_CODE (type) == REFERENCE_TYPE)
9294 if (complain & tf_error)
9295 error ("creating array of %qT", type);
9296 return error_mark_node;
9298 if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
9300 if (complain & tf_error)
9301 error ("creating array of %qT, which is an abstract class type",
9302 type);
9303 return error_mark_node;
9306 r = build_cplus_array_type (type, domain);
9308 if (TYPE_USER_ALIGN (t))
9310 TYPE_ALIGN (r) = TYPE_ALIGN (t);
9311 TYPE_USER_ALIGN (r) = 1;
9314 return r;
9317 case PLUS_EXPR:
9318 case MINUS_EXPR:
9320 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9321 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9323 if (e1 == error_mark_node || e2 == error_mark_node)
9324 return error_mark_node;
9326 return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
9329 case NEGATE_EXPR:
9330 case NOP_EXPR:
9332 tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9333 if (e == error_mark_node)
9334 return error_mark_node;
9336 return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
9339 case TYPENAME_TYPE:
9341 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9342 in_decl, /*entering_scope=*/1);
9343 tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
9344 complain, in_decl);
9346 if (ctx == error_mark_node || f == error_mark_node)
9347 return error_mark_node;
9349 if (!IS_AGGR_TYPE (ctx))
9351 if (complain & tf_error)
9352 error ("%qT is not a class, struct, or union type", ctx);
9353 return error_mark_node;
9355 else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
9357 /* Normally, make_typename_type does not require that the CTX
9358 have complete type in order to allow things like:
9360 template <class T> struct S { typename S<T>::X Y; };
9362 But, such constructs have already been resolved by this
9363 point, so here CTX really should have complete type, unless
9364 it's a partial instantiation. */
9365 ctx = complete_type (ctx);
9366 if (!COMPLETE_TYPE_P (ctx))
9368 if (complain & tf_error)
9369 cxx_incomplete_type_error (NULL_TREE, ctx);
9370 return error_mark_node;
9374 f = make_typename_type (ctx, f, typename_type,
9375 (complain & tf_error) | tf_keep_type_decl);
9376 if (f == error_mark_node)
9377 return f;
9378 if (TREE_CODE (f) == TYPE_DECL)
9380 complain |= tf_ignore_bad_quals;
9381 f = TREE_TYPE (f);
9384 if (TREE_CODE (f) != TYPENAME_TYPE)
9386 if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
9387 error ("%qT resolves to %qT, which is not an enumeration type",
9388 t, f);
9389 else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
9390 error ("%qT resolves to %qT, which is is not a class type",
9391 t, f);
9394 return cp_build_qualified_type_real
9395 (f, cp_type_quals (f) | cp_type_quals (t), complain);
9398 case UNBOUND_CLASS_TEMPLATE:
9400 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9401 in_decl, /*entering_scope=*/1);
9402 tree name = TYPE_IDENTIFIER (t);
9403 tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
9405 if (ctx == error_mark_node || name == error_mark_node)
9406 return error_mark_node;
9408 if (parm_list)
9409 parm_list = tsubst_template_parms (parm_list, args, complain);
9410 return make_unbound_class_template (ctx, name, parm_list, complain);
9413 case INDIRECT_REF:
9414 case ADDR_EXPR:
9415 case CALL_EXPR:
9416 gcc_unreachable ();
9418 case ARRAY_REF:
9420 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9421 tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl,
9422 /*integral_constant_expression_p=*/false);
9423 if (e1 == error_mark_node || e2 == error_mark_node)
9424 return error_mark_node;
9426 return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
9429 case SCOPE_REF:
9431 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9432 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9433 if (e1 == error_mark_node || e2 == error_mark_node)
9434 return error_mark_node;
9436 return build_qualified_name (/*type=*/NULL_TREE,
9437 e1, e2, QUALIFIED_NAME_IS_TEMPLATE (t));
9440 case TYPEOF_TYPE:
9442 tree type;
9444 type = finish_typeof (tsubst_expr
9445 (TYPEOF_TYPE_EXPR (t), args,
9446 complain, in_decl,
9447 /*integral_constant_expression_p=*/false));
9448 return cp_build_qualified_type_real (type,
9449 cp_type_quals (t)
9450 | cp_type_quals (type),
9451 complain);
9454 case DECLTYPE_TYPE:
9456 tree type;
9458 type =
9459 finish_decltype_type (tsubst_expr
9460 (DECLTYPE_TYPE_EXPR (t), args,
9461 complain, in_decl,
9462 /*integral_constant_expression_p=*/false),
9463 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t));
9464 return cp_build_qualified_type_real (type,
9465 cp_type_quals (t)
9466 | cp_type_quals (type),
9467 complain);
9470 case TYPE_ARGUMENT_PACK:
9471 case NONTYPE_ARGUMENT_PACK:
9473 tree r = make_node (TREE_CODE (t));
9474 tree packed_out =
9475 tsubst_template_args (ARGUMENT_PACK_ARGS (t),
9476 args,
9477 complain,
9478 in_decl);
9479 SET_ARGUMENT_PACK_ARGS (r, packed_out);
9481 /* For template nontype argument packs, also substitute into
9482 the type. */
9483 if (TREE_CODE (t) == NONTYPE_ARGUMENT_PACK)
9484 TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
9486 return r;
9488 break;
9490 default:
9491 sorry ("use of %qs in template",
9492 tree_code_name [(int) TREE_CODE (t)]);
9493 return error_mark_node;
9497 /* Like tsubst_expr for a BASELINK. OBJECT_TYPE, if non-NULL, is the
9498 type of the expression on the left-hand side of the "." or "->"
9499 operator. */
9501 static tree
9502 tsubst_baselink (tree baselink, tree object_type,
9503 tree args, tsubst_flags_t complain, tree in_decl)
9505 tree name;
9506 tree qualifying_scope;
9507 tree fns;
9508 tree optype;
9509 tree template_args = 0;
9510 bool template_id_p = false;
9512 /* A baselink indicates a function from a base class. Both the
9513 BASELINK_ACCESS_BINFO and the base class referenced may
9514 indicate bases of the template class, rather than the
9515 instantiated class. In addition, lookups that were not
9516 ambiguous before may be ambiguous now. Therefore, we perform
9517 the lookup again. */
9518 qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
9519 qualifying_scope = tsubst (qualifying_scope, args,
9520 complain, in_decl);
9521 fns = BASELINK_FUNCTIONS (baselink);
9522 optype = BASELINK_OPTYPE (baselink);
9523 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
9525 template_id_p = true;
9526 template_args = TREE_OPERAND (fns, 1);
9527 fns = TREE_OPERAND (fns, 0);
9528 if (template_args)
9529 template_args = tsubst_template_args (template_args, args,
9530 complain, in_decl);
9532 name = DECL_NAME (get_first_fn (fns));
9533 baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
9535 /* If lookup found a single function, mark it as used at this
9536 point. (If it lookup found multiple functions the one selected
9537 later by overload resolution will be marked as used at that
9538 point.) */
9539 if (BASELINK_P (baselink))
9540 fns = BASELINK_FUNCTIONS (baselink);
9541 if (!template_id_p && !really_overloaded_fn (fns))
9542 mark_used (OVL_CURRENT (fns));
9544 /* Add back the template arguments, if present. */
9545 if (BASELINK_P (baselink) && template_id_p)
9546 BASELINK_FUNCTIONS (baselink)
9547 = build_nt (TEMPLATE_ID_EXPR,
9548 BASELINK_FUNCTIONS (baselink),
9549 template_args);
9550 /* Update the conversion operator type. */
9551 BASELINK_OPTYPE (baselink)
9552 = tsubst (optype, args, complain, in_decl);
9554 if (!object_type)
9555 object_type = current_class_type;
9556 return adjust_result_of_qualified_name_lookup (baselink,
9557 qualifying_scope,
9558 object_type);
9561 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID. DONE is
9562 true if the qualified-id will be a postfix-expression in-and-of
9563 itself; false if more of the postfix-expression follows the
9564 QUALIFIED_ID. ADDRESS_P is true if the qualified-id is the operand
9565 of "&". */
9567 static tree
9568 tsubst_qualified_id (tree qualified_id, tree args,
9569 tsubst_flags_t complain, tree in_decl,
9570 bool done, bool address_p)
9572 tree expr;
9573 tree scope;
9574 tree name;
9575 bool is_template;
9576 tree template_args;
9578 gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
9580 /* Figure out what name to look up. */
9581 name = TREE_OPERAND (qualified_id, 1);
9582 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
9584 is_template = true;
9585 template_args = TREE_OPERAND (name, 1);
9586 if (template_args)
9587 template_args = tsubst_template_args (template_args, args,
9588 complain, in_decl);
9589 name = TREE_OPERAND (name, 0);
9591 else
9593 is_template = false;
9594 template_args = NULL_TREE;
9597 /* Substitute into the qualifying scope. When there are no ARGS, we
9598 are just trying to simplify a non-dependent expression. In that
9599 case the qualifying scope may be dependent, and, in any case,
9600 substituting will not help. */
9601 scope = TREE_OPERAND (qualified_id, 0);
9602 if (args)
9604 scope = tsubst (scope, args, complain, in_decl);
9605 expr = tsubst_copy (name, args, complain, in_decl);
9607 else
9608 expr = name;
9610 if (dependent_type_p (scope))
9611 return build_qualified_name (/*type=*/NULL_TREE,
9612 scope, expr,
9613 QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
9615 if (!BASELINK_P (name) && !DECL_P (expr))
9617 if (TREE_CODE (expr) == BIT_NOT_EXPR)
9618 /* If this were actually a destructor call, it would have been
9619 parsed as such by the parser. */
9620 expr = error_mark_node;
9621 else
9622 expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
9623 if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
9624 ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
9626 if (complain & tf_error)
9628 error ("dependent-name %qE is parsed as a non-type, but "
9629 "instantiation yields a type", qualified_id);
9630 inform ("say %<typename %E%> if a type is meant", qualified_id);
9632 return error_mark_node;
9636 if (DECL_P (expr))
9638 check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
9639 scope);
9640 /* Remember that there was a reference to this entity. */
9641 mark_used (expr);
9644 if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
9646 if (complain & tf_error)
9647 qualified_name_lookup_error (scope,
9648 TREE_OPERAND (qualified_id, 1),
9649 expr);
9650 return error_mark_node;
9653 if (is_template)
9654 expr = lookup_template_function (expr, template_args);
9656 if (expr == error_mark_node && complain & tf_error)
9657 qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
9658 expr);
9659 else if (TYPE_P (scope))
9661 expr = (adjust_result_of_qualified_name_lookup
9662 (expr, scope, current_class_type));
9663 expr = (finish_qualified_id_expr
9664 (scope, expr, done, address_p,
9665 QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
9666 /*template_arg_p=*/false));
9669 /* Expressions do not generally have reference type. */
9670 if (TREE_CODE (expr) != SCOPE_REF
9671 /* However, if we're about to form a pointer-to-member, we just
9672 want the referenced member referenced. */
9673 && TREE_CODE (expr) != OFFSET_REF)
9674 expr = convert_from_reference (expr);
9676 return expr;
9679 /* Like tsubst, but deals with expressions. This function just replaces
9680 template parms; to finish processing the resultant expression, use
9681 tsubst_expr. */
9683 static tree
9684 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9686 enum tree_code code;
9687 tree r;
9689 if (t == NULL_TREE || t == error_mark_node)
9690 return t;
9692 code = TREE_CODE (t);
9694 switch (code)
9696 case PARM_DECL:
9697 r = retrieve_local_specialization (t);
9698 gcc_assert (r != NULL);
9699 if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
9700 r = ARGUMENT_PACK_SELECT_ARG (r);
9701 mark_used (r);
9702 return r;
9704 case CONST_DECL:
9706 tree enum_type;
9707 tree v;
9709 if (DECL_TEMPLATE_PARM_P (t))
9710 return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
9711 /* There is no need to substitute into namespace-scope
9712 enumerators. */
9713 if (DECL_NAMESPACE_SCOPE_P (t))
9714 return t;
9715 /* If ARGS is NULL, then T is known to be non-dependent. */
9716 if (args == NULL_TREE)
9717 return integral_constant_value (t);
9719 /* Unfortunately, we cannot just call lookup_name here.
9720 Consider:
9722 template <int I> int f() {
9723 enum E { a = I };
9724 struct S { void g() { E e = a; } };
9727 When we instantiate f<7>::S::g(), say, lookup_name is not
9728 clever enough to find f<7>::a. */
9729 enum_type
9730 = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
9731 /*entering_scope=*/0);
9733 for (v = TYPE_VALUES (enum_type);
9734 v != NULL_TREE;
9735 v = TREE_CHAIN (v))
9736 if (TREE_PURPOSE (v) == DECL_NAME (t))
9737 return TREE_VALUE (v);
9739 /* We didn't find the name. That should never happen; if
9740 name-lookup found it during preliminary parsing, we
9741 should find it again here during instantiation. */
9742 gcc_unreachable ();
9744 return t;
9746 case FIELD_DECL:
9747 if (DECL_CONTEXT (t))
9749 tree ctx;
9751 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
9752 /*entering_scope=*/1);
9753 if (ctx != DECL_CONTEXT (t))
9755 tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
9756 if (!r)
9758 if (complain & tf_error)
9759 error ("using invalid field %qD", t);
9760 return error_mark_node;
9762 return r;
9766 return t;
9768 case VAR_DECL:
9769 case FUNCTION_DECL:
9770 if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
9771 || local_variable_p (t))
9772 t = tsubst (t, args, complain, in_decl);
9773 mark_used (t);
9774 return t;
9776 case BASELINK:
9777 return tsubst_baselink (t, current_class_type, args, complain, in_decl);
9779 case TEMPLATE_DECL:
9780 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9781 return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
9782 args, complain, in_decl);
9783 else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
9784 return tsubst (t, args, complain, in_decl);
9785 else if (DECL_CLASS_SCOPE_P (t)
9786 && uses_template_parms (DECL_CONTEXT (t)))
9788 /* Template template argument like the following example need
9789 special treatment:
9791 template <template <class> class TT> struct C {};
9792 template <class T> struct D {
9793 template <class U> struct E {};
9794 C<E> c; // #1
9796 D<int> d; // #2
9798 We are processing the template argument `E' in #1 for
9799 the template instantiation #2. Originally, `E' is a
9800 TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT. Now we
9801 have to substitute this with one having context `D<int>'. */
9803 tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
9804 return lookup_field (context, DECL_NAME(t), 0, false);
9806 else
9807 /* Ordinary template template argument. */
9808 return t;
9810 case CAST_EXPR:
9811 case REINTERPRET_CAST_EXPR:
9812 case CONST_CAST_EXPR:
9813 case STATIC_CAST_EXPR:
9814 case DYNAMIC_CAST_EXPR:
9815 case NOP_EXPR:
9816 return build1
9817 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9818 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9820 case SIZEOF_EXPR:
9821 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
9823 /* We only want to compute the number of arguments. */
9824 tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
9825 complain, in_decl);
9826 if (expanded == error_mark_node)
9827 return error_mark_node;
9828 return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
9830 /* Fall through */
9832 case INDIRECT_REF:
9833 case NEGATE_EXPR:
9834 case TRUTH_NOT_EXPR:
9835 case BIT_NOT_EXPR:
9836 case ADDR_EXPR:
9837 case UNARY_PLUS_EXPR: /* Unary + */
9838 case ALIGNOF_EXPR:
9839 case ARROW_EXPR:
9840 case THROW_EXPR:
9841 case TYPEID_EXPR:
9842 case REALPART_EXPR:
9843 case IMAGPART_EXPR:
9844 return build1
9845 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9846 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9848 case COMPONENT_REF:
9850 tree object;
9851 tree name;
9853 object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
9854 name = TREE_OPERAND (t, 1);
9855 if (TREE_CODE (name) == BIT_NOT_EXPR)
9857 name = tsubst_copy (TREE_OPERAND (name, 0), args,
9858 complain, in_decl);
9859 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9861 else if (TREE_CODE (name) == SCOPE_REF
9862 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
9864 tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
9865 complain, in_decl);
9866 name = TREE_OPERAND (name, 1);
9867 name = tsubst_copy (TREE_OPERAND (name, 0), args,
9868 complain, in_decl);
9869 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9870 name = build_qualified_name (/*type=*/NULL_TREE,
9871 base, name,
9872 /*template_p=*/false);
9874 else if (TREE_CODE (name) == BASELINK)
9875 name = tsubst_baselink (name,
9876 non_reference (TREE_TYPE (object)),
9877 args, complain,
9878 in_decl);
9879 else
9880 name = tsubst_copy (name, args, complain, in_decl);
9881 return build_nt (COMPONENT_REF, object, name, NULL_TREE);
9884 case PLUS_EXPR:
9885 case MINUS_EXPR:
9886 case MULT_EXPR:
9887 case TRUNC_DIV_EXPR:
9888 case CEIL_DIV_EXPR:
9889 case FLOOR_DIV_EXPR:
9890 case ROUND_DIV_EXPR:
9891 case EXACT_DIV_EXPR:
9892 case BIT_AND_EXPR:
9893 case BIT_IOR_EXPR:
9894 case BIT_XOR_EXPR:
9895 case TRUNC_MOD_EXPR:
9896 case FLOOR_MOD_EXPR:
9897 case TRUTH_ANDIF_EXPR:
9898 case TRUTH_ORIF_EXPR:
9899 case TRUTH_AND_EXPR:
9900 case TRUTH_OR_EXPR:
9901 case RSHIFT_EXPR:
9902 case LSHIFT_EXPR:
9903 case RROTATE_EXPR:
9904 case LROTATE_EXPR:
9905 case EQ_EXPR:
9906 case NE_EXPR:
9907 case MAX_EXPR:
9908 case MIN_EXPR:
9909 case LE_EXPR:
9910 case GE_EXPR:
9911 case LT_EXPR:
9912 case GT_EXPR:
9913 case COMPOUND_EXPR:
9914 case DOTSTAR_EXPR:
9915 case MEMBER_REF:
9916 case PREDECREMENT_EXPR:
9917 case PREINCREMENT_EXPR:
9918 case POSTDECREMENT_EXPR:
9919 case POSTINCREMENT_EXPR:
9920 return build_nt
9921 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9922 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
9924 case SCOPE_REF:
9925 return build_qualified_name (/*type=*/NULL_TREE,
9926 tsubst_copy (TREE_OPERAND (t, 0),
9927 args, complain, in_decl),
9928 tsubst_copy (TREE_OPERAND (t, 1),
9929 args, complain, in_decl),
9930 QUALIFIED_NAME_IS_TEMPLATE (t));
9932 case ARRAY_REF:
9933 return build_nt
9934 (ARRAY_REF,
9935 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9936 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9937 NULL_TREE, NULL_TREE);
9939 case CALL_EXPR:
9941 int n = VL_EXP_OPERAND_LENGTH (t);
9942 tree result = build_vl_exp (CALL_EXPR, n);
9943 int i;
9944 for (i = 0; i < n; i++)
9945 TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
9946 complain, in_decl);
9947 return result;
9950 case COND_EXPR:
9951 case MODOP_EXPR:
9952 case PSEUDO_DTOR_EXPR:
9954 r = build_nt
9955 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9956 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9957 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
9958 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
9959 return r;
9962 case NEW_EXPR:
9964 r = build_nt
9965 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9966 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9967 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
9968 NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
9969 return r;
9972 case DELETE_EXPR:
9974 r = build_nt
9975 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9976 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
9977 DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
9978 DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
9979 return r;
9982 case TEMPLATE_ID_EXPR:
9984 /* Substituted template arguments */
9985 tree fn = TREE_OPERAND (t, 0);
9986 tree targs = TREE_OPERAND (t, 1);
9988 fn = tsubst_copy (fn, args, complain, in_decl);
9989 if (targs)
9990 targs = tsubst_template_args (targs, args, complain, in_decl);
9992 return lookup_template_function (fn, targs);
9995 case TREE_LIST:
9997 tree purpose, value, chain;
9999 if (t == void_list_node)
10000 return t;
10002 purpose = TREE_PURPOSE (t);
10003 if (purpose)
10004 purpose = tsubst_copy (purpose, args, complain, in_decl);
10005 value = TREE_VALUE (t);
10006 if (value)
10007 value = tsubst_copy (value, args, complain, in_decl);
10008 chain = TREE_CHAIN (t);
10009 if (chain && chain != void_type_node)
10010 chain = tsubst_copy (chain, args, complain, in_decl);
10011 if (purpose == TREE_PURPOSE (t)
10012 && value == TREE_VALUE (t)
10013 && chain == TREE_CHAIN (t))
10014 return t;
10015 return tree_cons (purpose, value, chain);
10018 case RECORD_TYPE:
10019 case UNION_TYPE:
10020 case ENUMERAL_TYPE:
10021 case INTEGER_TYPE:
10022 case TEMPLATE_TYPE_PARM:
10023 case TEMPLATE_TEMPLATE_PARM:
10024 case BOUND_TEMPLATE_TEMPLATE_PARM:
10025 case TEMPLATE_PARM_INDEX:
10026 case POINTER_TYPE:
10027 case REFERENCE_TYPE:
10028 case OFFSET_TYPE:
10029 case FUNCTION_TYPE:
10030 case METHOD_TYPE:
10031 case ARRAY_TYPE:
10032 case TYPENAME_TYPE:
10033 case UNBOUND_CLASS_TEMPLATE:
10034 case TYPEOF_TYPE:
10035 case DECLTYPE_TYPE:
10036 case TYPE_DECL:
10037 return tsubst (t, args, complain, in_decl);
10039 case IDENTIFIER_NODE:
10040 if (IDENTIFIER_TYPENAME_P (t))
10042 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10043 return mangle_conv_op_name_for_type (new_type);
10045 else
10046 return t;
10048 case CONSTRUCTOR:
10049 /* This is handled by tsubst_copy_and_build. */
10050 gcc_unreachable ();
10052 case VA_ARG_EXPR:
10053 return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
10054 in_decl),
10055 tsubst (TREE_TYPE (t), args, complain, in_decl));
10057 case CLEANUP_POINT_EXPR:
10058 /* We shouldn't have built any of these during initial template
10059 generation. Instead, they should be built during instantiation
10060 in response to the saved STMT_IS_FULL_EXPR_P setting. */
10061 gcc_unreachable ();
10063 case OFFSET_REF:
10064 mark_used (TREE_OPERAND (t, 1));
10065 return t;
10067 case EXPR_PACK_EXPANSION:
10068 error ("invalid use of pack expansion expression");
10069 return error_mark_node;
10071 case NONTYPE_ARGUMENT_PACK:
10072 error ("use %<...%> to expand argument pack");
10073 return error_mark_node;
10075 default:
10076 return t;
10080 /* Like tsubst_copy, but specifically for OpenMP clauses. */
10082 static tree
10083 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
10084 tree in_decl)
10086 tree new_clauses = NULL, nc, oc;
10088 for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
10090 nc = copy_node (oc);
10091 OMP_CLAUSE_CHAIN (nc) = new_clauses;
10092 new_clauses = nc;
10094 switch (OMP_CLAUSE_CODE (nc))
10096 case OMP_CLAUSE_PRIVATE:
10097 case OMP_CLAUSE_SHARED:
10098 case OMP_CLAUSE_FIRSTPRIVATE:
10099 case OMP_CLAUSE_LASTPRIVATE:
10100 case OMP_CLAUSE_REDUCTION:
10101 case OMP_CLAUSE_COPYIN:
10102 case OMP_CLAUSE_COPYPRIVATE:
10103 case OMP_CLAUSE_IF:
10104 case OMP_CLAUSE_NUM_THREADS:
10105 case OMP_CLAUSE_SCHEDULE:
10106 OMP_CLAUSE_OPERAND (nc, 0)
10107 = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
10108 in_decl, /*integral_constant_expression_p=*/false);
10109 break;
10110 case OMP_CLAUSE_NOWAIT:
10111 case OMP_CLAUSE_ORDERED:
10112 case OMP_CLAUSE_DEFAULT:
10113 break;
10114 default:
10115 gcc_unreachable ();
10119 return finish_omp_clauses (nreverse (new_clauses));
10122 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes. */
10124 static tree
10125 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
10126 tree in_decl)
10128 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
10130 tree purpose, value, chain;
10132 if (t == NULL)
10133 return t;
10135 if (TREE_CODE (t) != TREE_LIST)
10136 return tsubst_copy_and_build (t, args, complain, in_decl,
10137 /*function_p=*/false,
10138 /*integral_constant_expression_p=*/false);
10140 if (t == void_list_node)
10141 return t;
10143 purpose = TREE_PURPOSE (t);
10144 if (purpose)
10145 purpose = RECUR (purpose);
10146 value = TREE_VALUE (t);
10147 if (value)
10148 value = RECUR (value);
10149 chain = TREE_CHAIN (t);
10150 if (chain && chain != void_type_node)
10151 chain = RECUR (chain);
10152 return tree_cons (purpose, value, chain);
10153 #undef RECUR
10156 /* Like tsubst_copy for expressions, etc. but also does semantic
10157 processing. */
10159 static tree
10160 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
10161 bool integral_constant_expression_p)
10163 #define RECUR(NODE) \
10164 tsubst_expr ((NODE), args, complain, in_decl, \
10165 integral_constant_expression_p)
10167 tree stmt, tmp;
10169 if (t == NULL_TREE || t == error_mark_node)
10170 return t;
10172 if (EXPR_HAS_LOCATION (t))
10173 input_location = EXPR_LOCATION (t);
10174 if (STATEMENT_CODE_P (TREE_CODE (t)))
10175 current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
10177 switch (TREE_CODE (t))
10179 case STATEMENT_LIST:
10181 tree_stmt_iterator i;
10182 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
10183 RECUR (tsi_stmt (i));
10184 break;
10187 case CTOR_INITIALIZER:
10188 finish_mem_initializers (tsubst_initializer_list
10189 (TREE_OPERAND (t, 0), args));
10190 break;
10192 case RETURN_EXPR:
10193 finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
10194 break;
10196 case EXPR_STMT:
10197 tmp = RECUR (EXPR_STMT_EXPR (t));
10198 if (EXPR_STMT_STMT_EXPR_RESULT (t))
10199 finish_stmt_expr_expr (tmp, cur_stmt_expr);
10200 else
10201 finish_expr_stmt (tmp);
10202 break;
10204 case USING_STMT:
10205 do_using_directive (RECUR (USING_STMT_NAMESPACE (t)));
10206 break;
10208 case DECL_EXPR:
10210 tree decl;
10211 tree init;
10213 decl = DECL_EXPR_DECL (t);
10214 if (TREE_CODE (decl) == LABEL_DECL)
10215 finish_label_decl (DECL_NAME (decl));
10216 else if (TREE_CODE (decl) == USING_DECL)
10218 tree scope = USING_DECL_SCOPE (decl);
10219 tree name = DECL_NAME (decl);
10220 tree decl;
10222 scope = RECUR (scope);
10223 decl = lookup_qualified_name (scope, name,
10224 /*is_type_p=*/false,
10225 /*complain=*/false);
10226 if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
10227 qualified_name_lookup_error (scope, name, decl);
10228 else
10229 do_local_using_decl (decl, scope, name);
10231 else
10233 init = DECL_INITIAL (decl);
10234 decl = tsubst (decl, args, complain, in_decl);
10235 if (decl != error_mark_node)
10237 /* By marking the declaration as instantiated, we avoid
10238 trying to instantiate it. Since instantiate_decl can't
10239 handle local variables, and since we've already done
10240 all that needs to be done, that's the right thing to
10241 do. */
10242 if (TREE_CODE (decl) == VAR_DECL)
10243 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10244 if (TREE_CODE (decl) == VAR_DECL
10245 && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
10246 /* Anonymous aggregates are a special case. */
10247 finish_anon_union (decl);
10248 else
10250 maybe_push_decl (decl);
10251 if (TREE_CODE (decl) == VAR_DECL
10252 && DECL_PRETTY_FUNCTION_P (decl))
10254 /* For __PRETTY_FUNCTION__ we have to adjust the
10255 initializer. */
10256 const char *const name
10257 = cxx_printable_name (current_function_decl, 2);
10258 init = cp_fname_init (name, &TREE_TYPE (decl));
10260 else
10262 tree t = RECUR (init);
10264 if (init && !t)
10265 /* If we had an initializer but it
10266 instantiated to nothing,
10267 value-initialize the object. This will
10268 only occur when the initializer was a
10269 pack expansion where the parameter packs
10270 used in that expansion were of length
10271 zero. */
10272 init = build_default_init (TREE_TYPE (decl),
10273 NULL_TREE);
10274 else
10275 init = t;
10278 finish_decl (decl, init, NULL_TREE);
10283 /* A DECL_EXPR can also be used as an expression, in the condition
10284 clause of an if/for/while construct. */
10285 return decl;
10288 case FOR_STMT:
10289 stmt = begin_for_stmt ();
10290 RECUR (FOR_INIT_STMT (t));
10291 finish_for_init_stmt (stmt);
10292 tmp = RECUR (FOR_COND (t));
10293 finish_for_cond (tmp, stmt);
10294 tmp = RECUR (FOR_EXPR (t));
10295 finish_for_expr (tmp, stmt);
10296 RECUR (FOR_BODY (t));
10297 finish_for_stmt (stmt);
10298 break;
10300 case WHILE_STMT:
10301 stmt = begin_while_stmt ();
10302 tmp = RECUR (WHILE_COND (t));
10303 finish_while_stmt_cond (tmp, stmt);
10304 RECUR (WHILE_BODY (t));
10305 finish_while_stmt (stmt);
10306 break;
10308 case DO_STMT:
10309 stmt = begin_do_stmt ();
10310 RECUR (DO_BODY (t));
10311 finish_do_body (stmt);
10312 tmp = RECUR (DO_COND (t));
10313 finish_do_stmt (tmp, stmt);
10314 break;
10316 case IF_STMT:
10317 stmt = begin_if_stmt ();
10318 tmp = RECUR (IF_COND (t));
10319 finish_if_stmt_cond (tmp, stmt);
10320 RECUR (THEN_CLAUSE (t));
10321 finish_then_clause (stmt);
10323 if (ELSE_CLAUSE (t))
10325 begin_else_clause (stmt);
10326 RECUR (ELSE_CLAUSE (t));
10327 finish_else_clause (stmt);
10330 finish_if_stmt (stmt);
10331 break;
10333 case BIND_EXPR:
10334 if (BIND_EXPR_BODY_BLOCK (t))
10335 stmt = begin_function_body ();
10336 else
10337 stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
10338 ? BCS_TRY_BLOCK : 0);
10340 RECUR (BIND_EXPR_BODY (t));
10342 if (BIND_EXPR_BODY_BLOCK (t))
10343 finish_function_body (stmt);
10344 else
10345 finish_compound_stmt (stmt);
10346 break;
10348 case BREAK_STMT:
10349 finish_break_stmt ();
10350 break;
10352 case CONTINUE_STMT:
10353 finish_continue_stmt ();
10354 break;
10356 case SWITCH_STMT:
10357 stmt = begin_switch_stmt ();
10358 tmp = RECUR (SWITCH_STMT_COND (t));
10359 finish_switch_cond (tmp, stmt);
10360 RECUR (SWITCH_STMT_BODY (t));
10361 finish_switch_stmt (stmt);
10362 break;
10364 case CASE_LABEL_EXPR:
10365 finish_case_label (RECUR (CASE_LOW (t)),
10366 RECUR (CASE_HIGH (t)));
10367 break;
10369 case LABEL_EXPR:
10370 finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
10371 break;
10373 case GOTO_EXPR:
10374 tmp = GOTO_DESTINATION (t);
10375 if (TREE_CODE (tmp) != LABEL_DECL)
10376 /* Computed goto's must be tsubst'd into. On the other hand,
10377 non-computed gotos must not be; the identifier in question
10378 will have no binding. */
10379 tmp = RECUR (tmp);
10380 else
10381 tmp = DECL_NAME (tmp);
10382 finish_goto_stmt (tmp);
10383 break;
10385 case ASM_EXPR:
10386 tmp = finish_asm_stmt
10387 (ASM_VOLATILE_P (t),
10388 RECUR (ASM_STRING (t)),
10389 tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
10390 tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
10391 tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl));
10393 tree asm_expr = tmp;
10394 if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
10395 asm_expr = TREE_OPERAND (asm_expr, 0);
10396 ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
10398 break;
10400 case TRY_BLOCK:
10401 if (CLEANUP_P (t))
10403 stmt = begin_try_block ();
10404 RECUR (TRY_STMTS (t));
10405 finish_cleanup_try_block (stmt);
10406 finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
10408 else
10410 tree compound_stmt = NULL_TREE;
10412 if (FN_TRY_BLOCK_P (t))
10413 stmt = begin_function_try_block (&compound_stmt);
10414 else
10415 stmt = begin_try_block ();
10417 RECUR (TRY_STMTS (t));
10419 if (FN_TRY_BLOCK_P (t))
10420 finish_function_try_block (stmt);
10421 else
10422 finish_try_block (stmt);
10424 RECUR (TRY_HANDLERS (t));
10425 if (FN_TRY_BLOCK_P (t))
10426 finish_function_handler_sequence (stmt, compound_stmt);
10427 else
10428 finish_handler_sequence (stmt);
10430 break;
10432 case HANDLER:
10434 tree decl = HANDLER_PARMS (t);
10436 if (decl)
10438 decl = tsubst (decl, args, complain, in_decl);
10439 /* Prevent instantiate_decl from trying to instantiate
10440 this variable. We've already done all that needs to be
10441 done. */
10442 if (decl != error_mark_node)
10443 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10445 stmt = begin_handler ();
10446 finish_handler_parms (decl, stmt);
10447 RECUR (HANDLER_BODY (t));
10448 finish_handler (stmt);
10450 break;
10452 case TAG_DEFN:
10453 tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
10454 break;
10456 case STATIC_ASSERT:
10458 tree condition =
10459 tsubst_expr (STATIC_ASSERT_CONDITION (t),
10460 args,
10461 complain, in_decl,
10462 /*integral_constant_expression_p=*/true);
10463 finish_static_assert (condition,
10464 STATIC_ASSERT_MESSAGE (t),
10465 STATIC_ASSERT_SOURCE_LOCATION (t),
10466 /*member_p=*/false);
10468 break;
10470 case OMP_PARALLEL:
10471 tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
10472 args, complain, in_decl);
10473 stmt = begin_omp_parallel ();
10474 RECUR (OMP_PARALLEL_BODY (t));
10475 OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
10476 = OMP_PARALLEL_COMBINED (t);
10477 break;
10479 case OMP_FOR:
10481 tree clauses, decl, init, cond, incr, body, pre_body;
10483 clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
10484 args, complain, in_decl);
10485 init = OMP_FOR_INIT (t);
10486 gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
10487 decl = RECUR (TREE_OPERAND (init, 0));
10488 init = RECUR (TREE_OPERAND (init, 1));
10489 cond = RECUR (OMP_FOR_COND (t));
10490 incr = RECUR (OMP_FOR_INCR (t));
10492 stmt = begin_omp_structured_block ();
10494 pre_body = push_stmt_list ();
10495 RECUR (OMP_FOR_PRE_BODY (t));
10496 pre_body = pop_stmt_list (pre_body);
10498 body = push_stmt_list ();
10499 RECUR (OMP_FOR_BODY (t));
10500 body = pop_stmt_list (body);
10502 t = finish_omp_for (EXPR_LOCATION (t), decl, init, cond, incr, body,
10503 pre_body);
10504 if (t)
10505 OMP_FOR_CLAUSES (t) = clauses;
10507 add_stmt (finish_omp_structured_block (stmt));
10509 break;
10511 case OMP_SECTIONS:
10512 case OMP_SINGLE:
10513 tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
10514 stmt = push_stmt_list ();
10515 RECUR (OMP_BODY (t));
10516 stmt = pop_stmt_list (stmt);
10518 t = copy_node (t);
10519 OMP_BODY (t) = stmt;
10520 OMP_CLAUSES (t) = tmp;
10521 add_stmt (t);
10522 break;
10524 case OMP_SECTION:
10525 case OMP_CRITICAL:
10526 case OMP_MASTER:
10527 case OMP_ORDERED:
10528 stmt = push_stmt_list ();
10529 RECUR (OMP_BODY (t));
10530 stmt = pop_stmt_list (stmt);
10532 t = copy_node (t);
10533 OMP_BODY (t) = stmt;
10534 add_stmt (t);
10535 break;
10537 case OMP_ATOMIC:
10538 gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
10540 tree op1 = TREE_OPERAND (t, 1);
10541 tree lhs = RECUR (TREE_OPERAND (op1, 0));
10542 tree rhs = RECUR (TREE_OPERAND (op1, 1));
10543 finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
10545 break;
10547 case EXPR_PACK_EXPANSION:
10548 error ("invalid use of pack expansion expression");
10549 return error_mark_node;
10551 case NONTYPE_ARGUMENT_PACK:
10552 error ("use %<...%> to expand argument pack");
10553 return error_mark_node;
10555 default:
10556 gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
10558 return tsubst_copy_and_build (t, args, complain, in_decl,
10559 /*function_p=*/false,
10560 integral_constant_expression_p);
10563 return NULL_TREE;
10564 #undef RECUR
10567 /* T is a postfix-expression that is not being used in a function
10568 call. Return the substituted version of T. */
10570 static tree
10571 tsubst_non_call_postfix_expression (tree t, tree args,
10572 tsubst_flags_t complain,
10573 tree in_decl)
10575 if (TREE_CODE (t) == SCOPE_REF)
10576 t = tsubst_qualified_id (t, args, complain, in_decl,
10577 /*done=*/false, /*address_p=*/false);
10578 else
10579 t = tsubst_copy_and_build (t, args, complain, in_decl,
10580 /*function_p=*/false,
10581 /*integral_constant_expression_p=*/false);
10583 return t;
10586 /* Like tsubst but deals with expressions and performs semantic
10587 analysis. FUNCTION_P is true if T is the "F" in "F (ARGS)". */
10589 tree
10590 tsubst_copy_and_build (tree t,
10591 tree args,
10592 tsubst_flags_t complain,
10593 tree in_decl,
10594 bool function_p,
10595 bool integral_constant_expression_p)
10597 #define RECUR(NODE) \
10598 tsubst_copy_and_build (NODE, args, complain, in_decl, \
10599 /*function_p=*/false, \
10600 integral_constant_expression_p)
10602 tree op1;
10604 if (t == NULL_TREE || t == error_mark_node)
10605 return t;
10607 switch (TREE_CODE (t))
10609 case USING_DECL:
10610 t = DECL_NAME (t);
10611 /* Fall through. */
10612 case IDENTIFIER_NODE:
10614 tree decl;
10615 cp_id_kind idk;
10616 bool non_integral_constant_expression_p;
10617 const char *error_msg;
10619 if (IDENTIFIER_TYPENAME_P (t))
10621 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10622 t = mangle_conv_op_name_for_type (new_type);
10625 /* Look up the name. */
10626 decl = lookup_name (t);
10628 /* By convention, expressions use ERROR_MARK_NODE to indicate
10629 failure, not NULL_TREE. */
10630 if (decl == NULL_TREE)
10631 decl = error_mark_node;
10633 decl = finish_id_expression (t, decl, NULL_TREE,
10634 &idk,
10635 integral_constant_expression_p,
10636 /*allow_non_integral_constant_expression_p=*/false,
10637 &non_integral_constant_expression_p,
10638 /*template_p=*/false,
10639 /*done=*/true,
10640 /*address_p=*/false,
10641 /*template_arg_p=*/false,
10642 &error_msg);
10643 if (error_msg)
10644 error (error_msg);
10645 if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
10646 decl = unqualified_name_lookup_error (decl);
10647 return decl;
10650 case TEMPLATE_ID_EXPR:
10652 tree object;
10653 tree template = RECUR (TREE_OPERAND (t, 0));
10654 tree targs = TREE_OPERAND (t, 1);
10656 if (targs)
10657 targs = tsubst_template_args (targs, args, complain, in_decl);
10659 if (TREE_CODE (template) == COMPONENT_REF)
10661 object = TREE_OPERAND (template, 0);
10662 template = TREE_OPERAND (template, 1);
10664 else
10665 object = NULL_TREE;
10666 template = lookup_template_function (template, targs);
10668 if (object)
10669 return build3 (COMPONENT_REF, TREE_TYPE (template),
10670 object, template, NULL_TREE);
10671 else
10672 return baselink_for_fns (template);
10675 case INDIRECT_REF:
10677 tree r = RECUR (TREE_OPERAND (t, 0));
10679 if (REFERENCE_REF_P (t))
10681 /* A type conversion to reference type will be enclosed in
10682 such an indirect ref, but the substitution of the cast
10683 will have also added such an indirect ref. */
10684 if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
10685 r = convert_from_reference (r);
10687 else
10688 r = build_x_indirect_ref (r, "unary *");
10689 return r;
10692 case NOP_EXPR:
10693 return build_nop
10694 (tsubst (TREE_TYPE (t), args, complain, in_decl),
10695 RECUR (TREE_OPERAND (t, 0)));
10697 case CAST_EXPR:
10698 case REINTERPRET_CAST_EXPR:
10699 case CONST_CAST_EXPR:
10700 case DYNAMIC_CAST_EXPR:
10701 case STATIC_CAST_EXPR:
10703 tree type;
10704 tree op;
10706 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10707 if (integral_constant_expression_p
10708 && !cast_valid_in_integral_constant_expression_p (type))
10710 error ("a cast to a type other than an integral or "
10711 "enumeration type cannot appear in a constant-expression");
10712 return error_mark_node;
10715 op = RECUR (TREE_OPERAND (t, 0));
10717 switch (TREE_CODE (t))
10719 case CAST_EXPR:
10720 return build_functional_cast (type, op);
10721 case REINTERPRET_CAST_EXPR:
10722 return build_reinterpret_cast (type, op);
10723 case CONST_CAST_EXPR:
10724 return build_const_cast (type, op);
10725 case DYNAMIC_CAST_EXPR:
10726 return build_dynamic_cast (type, op);
10727 case STATIC_CAST_EXPR:
10728 return build_static_cast (type, op);
10729 default:
10730 gcc_unreachable ();
10734 case POSTDECREMENT_EXPR:
10735 case POSTINCREMENT_EXPR:
10736 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10737 args, complain, in_decl);
10738 return build_x_unary_op (TREE_CODE (t), op1);
10740 case PREDECREMENT_EXPR:
10741 case PREINCREMENT_EXPR:
10742 case NEGATE_EXPR:
10743 case BIT_NOT_EXPR:
10744 case ABS_EXPR:
10745 case TRUTH_NOT_EXPR:
10746 case UNARY_PLUS_EXPR: /* Unary + */
10747 case REALPART_EXPR:
10748 case IMAGPART_EXPR:
10749 return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
10751 case ADDR_EXPR:
10752 op1 = TREE_OPERAND (t, 0);
10753 if (TREE_CODE (op1) == SCOPE_REF)
10754 op1 = tsubst_qualified_id (op1, args, complain, in_decl,
10755 /*done=*/true, /*address_p=*/true);
10756 else
10757 op1 = tsubst_non_call_postfix_expression (op1, args, complain,
10758 in_decl);
10759 if (TREE_CODE (op1) == LABEL_DECL)
10760 return finish_label_address_expr (DECL_NAME (op1));
10761 return build_x_unary_op (ADDR_EXPR, op1);
10763 case PLUS_EXPR:
10764 case MINUS_EXPR:
10765 case MULT_EXPR:
10766 case TRUNC_DIV_EXPR:
10767 case CEIL_DIV_EXPR:
10768 case FLOOR_DIV_EXPR:
10769 case ROUND_DIV_EXPR:
10770 case EXACT_DIV_EXPR:
10771 case BIT_AND_EXPR:
10772 case BIT_IOR_EXPR:
10773 case BIT_XOR_EXPR:
10774 case TRUNC_MOD_EXPR:
10775 case FLOOR_MOD_EXPR:
10776 case TRUTH_ANDIF_EXPR:
10777 case TRUTH_ORIF_EXPR:
10778 case TRUTH_AND_EXPR:
10779 case TRUTH_OR_EXPR:
10780 case RSHIFT_EXPR:
10781 case LSHIFT_EXPR:
10782 case RROTATE_EXPR:
10783 case LROTATE_EXPR:
10784 case EQ_EXPR:
10785 case NE_EXPR:
10786 case MAX_EXPR:
10787 case MIN_EXPR:
10788 case LE_EXPR:
10789 case GE_EXPR:
10790 case LT_EXPR:
10791 case GT_EXPR:
10792 case MEMBER_REF:
10793 case DOTSTAR_EXPR:
10794 return build_x_binary_op
10795 (TREE_CODE (t),
10796 RECUR (TREE_OPERAND (t, 0)),
10797 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
10798 ? ERROR_MARK
10799 : TREE_CODE (TREE_OPERAND (t, 0))),
10800 RECUR (TREE_OPERAND (t, 1)),
10801 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
10802 ? ERROR_MARK
10803 : TREE_CODE (TREE_OPERAND (t, 1))),
10804 /*overloaded_p=*/NULL);
10806 case SCOPE_REF:
10807 return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
10808 /*address_p=*/false);
10809 case ARRAY_REF:
10810 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10811 args, complain, in_decl);
10812 return build_x_binary_op (ARRAY_REF, op1,
10813 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
10814 ? ERROR_MARK
10815 : TREE_CODE (TREE_OPERAND (t, 0))),
10816 RECUR (TREE_OPERAND (t, 1)),
10817 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
10818 ? ERROR_MARK
10819 : TREE_CODE (TREE_OPERAND (t, 1))),
10820 /*overloaded_p=*/NULL);
10822 case SIZEOF_EXPR:
10823 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
10825 /* We only want to compute the number of arguments. */
10826 tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
10827 complain, in_decl);
10828 if (expanded == error_mark_node)
10829 return error_mark_node;
10830 return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
10832 /* Fall through */
10834 case ALIGNOF_EXPR:
10835 op1 = TREE_OPERAND (t, 0);
10836 if (!args)
10838 /* When there are no ARGS, we are trying to evaluate a
10839 non-dependent expression from the parser. Trying to do
10840 the substitutions may not work. */
10841 if (!TYPE_P (op1))
10842 op1 = TREE_TYPE (op1);
10844 else
10846 ++skip_evaluation;
10847 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
10848 /*function_p=*/false,
10849 /*integral_constant_expression_p=*/false);
10850 --skip_evaluation;
10852 if (TYPE_P (op1))
10853 return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), true);
10854 else
10855 return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t));
10857 case MODOP_EXPR:
10859 tree r = build_x_modify_expr
10860 (RECUR (TREE_OPERAND (t, 0)),
10861 TREE_CODE (TREE_OPERAND (t, 1)),
10862 RECUR (TREE_OPERAND (t, 2)));
10863 /* TREE_NO_WARNING must be set if either the expression was
10864 parenthesized or it uses an operator such as >>= rather
10865 than plain assignment. In the former case, it was already
10866 set and must be copied. In the latter case,
10867 build_x_modify_expr sets it and it must not be reset
10868 here. */
10869 if (TREE_NO_WARNING (t))
10870 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
10871 return r;
10874 case ARROW_EXPR:
10875 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10876 args, complain, in_decl);
10877 /* Remember that there was a reference to this entity. */
10878 if (DECL_P (op1))
10879 mark_used (op1);
10880 return build_x_arrow (op1);
10882 case NEW_EXPR:
10884 tree init = RECUR (TREE_OPERAND (t, 3));
10886 if (TREE_OPERAND (t, 3) && !init)
10887 /* If there was an initializer in the the original tree, but
10888 it instantiated to an empty list, then we should pass on
10889 VOID_ZERO_NODE to tell build_new that it was an empty
10890 initializer () rather than no initializer. This can only
10891 happen when the initializer is a pack expansion whose
10892 parameter packs are of length zero. */
10893 init = void_zero_node;
10895 return build_new
10896 (RECUR (TREE_OPERAND (t, 0)),
10897 RECUR (TREE_OPERAND (t, 1)),
10898 RECUR (TREE_OPERAND (t, 2)),
10899 init,
10900 NEW_EXPR_USE_GLOBAL (t));
10903 case DELETE_EXPR:
10904 return delete_sanity
10905 (RECUR (TREE_OPERAND (t, 0)),
10906 RECUR (TREE_OPERAND (t, 1)),
10907 DELETE_EXPR_USE_VEC (t),
10908 DELETE_EXPR_USE_GLOBAL (t));
10910 case COMPOUND_EXPR:
10911 return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
10912 RECUR (TREE_OPERAND (t, 1)));
10914 case CALL_EXPR:
10916 tree function;
10917 tree call_args;
10918 bool qualified_p;
10919 bool koenig_p;
10921 function = CALL_EXPR_FN (t);
10922 /* When we parsed the expression, we determined whether or
10923 not Koenig lookup should be performed. */
10924 koenig_p = KOENIG_LOOKUP_P (t);
10925 if (TREE_CODE (function) == SCOPE_REF)
10927 qualified_p = true;
10928 function = tsubst_qualified_id (function, args, complain, in_decl,
10929 /*done=*/false,
10930 /*address_p=*/false);
10932 else
10934 if (TREE_CODE (function) == COMPONENT_REF)
10936 tree op = TREE_OPERAND (function, 1);
10938 qualified_p = (TREE_CODE (op) == SCOPE_REF
10939 || (BASELINK_P (op)
10940 && BASELINK_QUALIFIED_P (op)));
10942 else
10943 qualified_p = false;
10945 function = tsubst_copy_and_build (function, args, complain,
10946 in_decl,
10947 !qualified_p,
10948 integral_constant_expression_p);
10950 if (BASELINK_P (function))
10951 qualified_p = true;
10954 /* FIXME: Rewrite this so as not to construct an arglist. */
10955 call_args = RECUR (CALL_EXPR_ARGS (t));
10957 /* We do not perform argument-dependent lookup if normal
10958 lookup finds a non-function, in accordance with the
10959 expected resolution of DR 218. */
10960 if (koenig_p
10961 && ((is_overloaded_fn (function)
10962 /* If lookup found a member function, the Koenig lookup is
10963 not appropriate, even if an unqualified-name was used
10964 to denote the function. */
10965 && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
10966 || TREE_CODE (function) == IDENTIFIER_NODE))
10967 function = perform_koenig_lookup (function, call_args);
10969 if (TREE_CODE (function) == IDENTIFIER_NODE)
10971 unqualified_name_lookup_error (function);
10972 return error_mark_node;
10975 /* Remember that there was a reference to this entity. */
10976 if (DECL_P (function))
10977 mark_used (function);
10979 if (TREE_CODE (function) == OFFSET_REF)
10980 return build_offset_ref_call_from_tree (function, call_args);
10981 if (TREE_CODE (function) == COMPONENT_REF)
10983 if (!BASELINK_P (TREE_OPERAND (function, 1)))
10984 return finish_call_expr (function, call_args,
10985 /*disallow_virtual=*/false,
10986 /*koenig_p=*/false);
10987 else
10988 return (build_new_method_call
10989 (TREE_OPERAND (function, 0),
10990 TREE_OPERAND (function, 1),
10991 call_args, NULL_TREE,
10992 qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
10993 /*fn_p=*/NULL));
10995 return finish_call_expr (function, call_args,
10996 /*disallow_virtual=*/qualified_p,
10997 koenig_p);
11000 case COND_EXPR:
11001 return build_x_conditional_expr
11002 (RECUR (TREE_OPERAND (t, 0)),
11003 RECUR (TREE_OPERAND (t, 1)),
11004 RECUR (TREE_OPERAND (t, 2)));
11006 case PSEUDO_DTOR_EXPR:
11007 return finish_pseudo_destructor_expr
11008 (RECUR (TREE_OPERAND (t, 0)),
11009 RECUR (TREE_OPERAND (t, 1)),
11010 RECUR (TREE_OPERAND (t, 2)));
11012 case TREE_LIST:
11014 tree purpose, value, chain;
11016 if (t == void_list_node)
11017 return t;
11019 if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
11020 || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
11022 /* We have pack expansions, so expand those and
11023 create a new list out of it. */
11024 tree purposevec = NULL_TREE;
11025 tree valuevec = NULL_TREE;
11026 tree chain;
11027 int i, len = -1;
11029 /* Expand the argument expressions. */
11030 if (TREE_PURPOSE (t))
11031 purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
11032 complain, in_decl);
11033 if (TREE_VALUE (t))
11034 valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
11035 complain, in_decl);
11037 /* Build the rest of the list. */
11038 chain = TREE_CHAIN (t);
11039 if (chain && chain != void_type_node)
11040 chain = RECUR (chain);
11042 /* Determine the number of arguments. */
11043 if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
11045 len = TREE_VEC_LENGTH (purposevec);
11046 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
11048 else if (TREE_CODE (valuevec) == TREE_VEC)
11049 len = TREE_VEC_LENGTH (valuevec);
11050 else
11052 /* Since we only performed a partial substitution into
11053 the argument pack, we only return a single list
11054 node. */
11055 if (purposevec == TREE_PURPOSE (t)
11056 && valuevec == TREE_VALUE (t)
11057 && chain == TREE_CHAIN (t))
11058 return t;
11060 return tree_cons (purposevec, valuevec, chain);
11063 /* Convert the argument vectors into a TREE_LIST */
11064 i = len;
11065 while (i > 0)
11067 /* Grab the Ith values. */
11068 i--;
11069 purpose = purposevec ? TREE_VEC_ELT (purposevec, i)
11070 : NULL_TREE;
11071 value
11072 = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i))
11073 : NULL_TREE;
11075 /* Build the list (backwards). */
11076 chain = tree_cons (purpose, value, chain);
11079 return chain;
11082 purpose = TREE_PURPOSE (t);
11083 if (purpose)
11084 purpose = RECUR (purpose);
11085 value = TREE_VALUE (t);
11086 if (value)
11087 value = RECUR (value);
11088 chain = TREE_CHAIN (t);
11089 if (chain && chain != void_type_node)
11090 chain = RECUR (chain);
11091 if (purpose == TREE_PURPOSE (t)
11092 && value == TREE_VALUE (t)
11093 && chain == TREE_CHAIN (t))
11094 return t;
11095 return tree_cons (purpose, value, chain);
11098 case COMPONENT_REF:
11100 tree object;
11101 tree object_type;
11102 tree member;
11104 object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11105 args, complain, in_decl);
11106 /* Remember that there was a reference to this entity. */
11107 if (DECL_P (object))
11108 mark_used (object);
11109 object_type = TREE_TYPE (object);
11111 member = TREE_OPERAND (t, 1);
11112 if (BASELINK_P (member))
11113 member = tsubst_baselink (member,
11114 non_reference (TREE_TYPE (object)),
11115 args, complain, in_decl);
11116 else
11117 member = tsubst_copy (member, args, complain, in_decl);
11118 if (member == error_mark_node)
11119 return error_mark_node;
11121 if (object_type && !CLASS_TYPE_P (object_type))
11123 if (SCALAR_TYPE_P (object_type))
11125 tree s = NULL_TREE;
11126 tree dtor = member;
11128 if (TREE_CODE (dtor) == SCOPE_REF)
11130 s = TREE_OPERAND (dtor, 0);
11131 dtor = TREE_OPERAND (dtor, 1);
11133 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
11135 dtor = TREE_OPERAND (dtor, 0);
11136 if (TYPE_P (dtor))
11137 return finish_pseudo_destructor_expr (object, s, dtor);
11141 else if (TREE_CODE (member) == SCOPE_REF
11142 && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
11144 tree tmpl;
11145 tree args;
11147 /* Lookup the template functions now that we know what the
11148 scope is. */
11149 tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
11150 args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
11151 member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
11152 /*is_type_p=*/false,
11153 /*complain=*/false);
11154 if (BASELINK_P (member))
11156 BASELINK_FUNCTIONS (member)
11157 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
11158 args);
11159 member = (adjust_result_of_qualified_name_lookup
11160 (member, BINFO_TYPE (BASELINK_BINFO (member)),
11161 object_type));
11163 else
11165 qualified_name_lookup_error (object_type, tmpl, member);
11166 return error_mark_node;
11169 else if (TREE_CODE (member) == SCOPE_REF
11170 && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
11171 && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
11173 if (complain & tf_error)
11175 if (TYPE_P (TREE_OPERAND (member, 0)))
11176 error ("%qT is not a class or namespace",
11177 TREE_OPERAND (member, 0));
11178 else
11179 error ("%qD is not a class or namespace",
11180 TREE_OPERAND (member, 0));
11182 return error_mark_node;
11184 else if (TREE_CODE (member) == FIELD_DECL)
11185 return finish_non_static_data_member (member, object, NULL_TREE);
11187 return finish_class_member_access_expr (object, member,
11188 /*template_p=*/false);
11191 case THROW_EXPR:
11192 return build_throw
11193 (RECUR (TREE_OPERAND (t, 0)));
11195 case CONSTRUCTOR:
11197 VEC(constructor_elt,gc) *n;
11198 constructor_elt *ce;
11199 unsigned HOST_WIDE_INT idx;
11200 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11201 bool process_index_p;
11202 int newlen;
11203 bool need_copy_p = false;
11205 if (type == error_mark_node)
11206 return error_mark_node;
11208 /* digest_init will do the wrong thing if we let it. */
11209 if (type && TYPE_PTRMEMFUNC_P (type))
11210 return t;
11212 /* We do not want to process the index of aggregate
11213 initializers as they are identifier nodes which will be
11214 looked up by digest_init. */
11215 process_index_p = !(type && IS_AGGR_TYPE (type));
11217 n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
11218 newlen = VEC_length (constructor_elt, n);
11219 for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
11221 if (ce->index && process_index_p)
11222 ce->index = RECUR (ce->index);
11224 if (PACK_EXPANSION_P (ce->value))
11226 /* Substitute into the pack expansion. */
11227 ce->value = tsubst_pack_expansion (ce->value, args, complain,
11228 in_decl);
11230 if (ce->value == error_mark_node)
11232 else if (TREE_VEC_LENGTH (ce->value) == 1)
11233 /* Just move the argument into place. */
11234 ce->value = TREE_VEC_ELT (ce->value, 0);
11235 else
11237 /* Update the length of the final CONSTRUCTOR
11238 arguments vector, and note that we will need to
11239 copy.*/
11240 newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
11241 need_copy_p = true;
11244 else
11245 ce->value = RECUR (ce->value);
11248 if (need_copy_p)
11250 VEC(constructor_elt,gc) *old_n = n;
11252 n = VEC_alloc (constructor_elt, gc, newlen);
11253 for (idx = 0; VEC_iterate (constructor_elt, old_n, idx, ce);
11254 idx++)
11256 if (TREE_CODE (ce->value) == TREE_VEC)
11258 int i, len = TREE_VEC_LENGTH (ce->value);
11259 for (i = 0; i < len; ++i)
11260 CONSTRUCTOR_APPEND_ELT (n, 0,
11261 TREE_VEC_ELT (ce->value, i));
11263 else
11264 CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
11268 if (TREE_HAS_CONSTRUCTOR (t))
11269 return finish_compound_literal (type, n);
11271 return build_constructor (NULL_TREE, n);
11274 case TYPEID_EXPR:
11276 tree operand_0 = RECUR (TREE_OPERAND (t, 0));
11277 if (TYPE_P (operand_0))
11278 return get_typeid (operand_0);
11279 return build_typeid (operand_0);
11282 case VAR_DECL:
11283 if (!args)
11284 return t;
11285 /* Fall through */
11287 case PARM_DECL:
11289 tree r = tsubst_copy (t, args, complain, in_decl);
11291 if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
11292 /* If the original type was a reference, we'll be wrapped in
11293 the appropriate INDIRECT_REF. */
11294 r = convert_from_reference (r);
11295 return r;
11298 case VA_ARG_EXPR:
11299 return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
11300 tsubst_copy (TREE_TYPE (t), args, complain,
11301 in_decl));
11303 case OFFSETOF_EXPR:
11304 return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
11306 case TRAIT_EXPR:
11308 tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
11309 complain, in_decl);
11311 tree type2 = TRAIT_EXPR_TYPE2 (t);
11312 if (type2)
11313 type2 = tsubst_copy (type2, args, complain, in_decl);
11315 return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
11318 case STMT_EXPR:
11320 tree old_stmt_expr = cur_stmt_expr;
11321 tree stmt_expr = begin_stmt_expr ();
11323 cur_stmt_expr = stmt_expr;
11324 tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
11325 integral_constant_expression_p);
11326 stmt_expr = finish_stmt_expr (stmt_expr, false);
11327 cur_stmt_expr = old_stmt_expr;
11329 return stmt_expr;
11332 case CONST_DECL:
11333 t = tsubst_copy (t, args, complain, in_decl);
11334 /* As in finish_id_expression, we resolve enumeration constants
11335 to their underlying values. */
11336 if (TREE_CODE (t) == CONST_DECL)
11338 used_types_insert (TREE_TYPE (t));
11339 return DECL_INITIAL (t);
11341 return t;
11343 default:
11344 /* Handle Objective-C++ constructs, if appropriate. */
11346 tree subst
11347 = objcp_tsubst_copy_and_build (t, args, complain,
11348 in_decl, /*function_p=*/false);
11349 if (subst)
11350 return subst;
11352 return tsubst_copy (t, args, complain, in_decl);
11355 #undef RECUR
11358 /* Verify that the instantiated ARGS are valid. For type arguments,
11359 make sure that the type's linkage is ok. For non-type arguments,
11360 make sure they are constants if they are integral or enumerations.
11361 Emit an error under control of COMPLAIN, and return TRUE on error. */
11363 static bool
11364 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
11366 int ix, len = DECL_NTPARMS (tmpl);
11367 bool result = false;
11369 for (ix = 0; ix != len; ix++)
11371 tree t = TREE_VEC_ELT (args, ix);
11373 if (TYPE_P (t))
11375 /* [basic.link]: A name with no linkage (notably, the name
11376 of a class or enumeration declared in a local scope)
11377 shall not be used to declare an entity with linkage.
11378 This implies that names with no linkage cannot be used as
11379 template arguments. */
11380 tree nt = no_linkage_check (t, /*relaxed_p=*/false);
11382 if (nt)
11384 /* DR 488 makes use of a type with no linkage cause
11385 type deduction to fail. */
11386 if (complain & tf_error)
11388 if (TYPE_ANONYMOUS_P (nt))
11389 error ("%qT is/uses anonymous type", t);
11390 else
11391 error ("template argument for %qD uses local type %qT",
11392 tmpl, t);
11394 result = true;
11396 /* In order to avoid all sorts of complications, we do not
11397 allow variably-modified types as template arguments. */
11398 else if (variably_modified_type_p (t, NULL_TREE))
11400 if (complain & tf_error)
11401 error ("%qT is a variably modified type", t);
11402 result = true;
11405 /* A non-type argument of integral or enumerated type must be a
11406 constant. */
11407 else if (TREE_TYPE (t)
11408 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
11409 && !TREE_CONSTANT (t))
11411 if (complain & tf_error)
11412 error ("integral expression %qE is not constant", t);
11413 result = true;
11416 if (result && (complain & tf_error))
11417 error (" trying to instantiate %qD", tmpl);
11418 return result;
11421 /* Instantiate the indicated variable or function template TMPL with
11422 the template arguments in TARG_PTR. */
11424 tree
11425 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
11427 tree fndecl;
11428 tree gen_tmpl;
11429 tree spec;
11430 HOST_WIDE_INT saved_processing_template_decl;
11432 if (tmpl == error_mark_node)
11433 return error_mark_node;
11435 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
11437 /* If this function is a clone, handle it specially. */
11438 if (DECL_CLONED_FUNCTION_P (tmpl))
11440 tree spec;
11441 tree clone;
11443 spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
11444 complain);
11445 if (spec == error_mark_node)
11446 return error_mark_node;
11448 /* Look for the clone. */
11449 FOR_EACH_CLONE (clone, spec)
11450 if (DECL_NAME (clone) == DECL_NAME (tmpl))
11451 return clone;
11452 /* We should always have found the clone by now. */
11453 gcc_unreachable ();
11454 return NULL_TREE;
11457 /* Check to see if we already have this specialization. */
11458 spec = retrieve_specialization (tmpl, targ_ptr,
11459 /*class_specializations_p=*/false);
11460 if (spec != NULL_TREE)
11461 return spec;
11463 gen_tmpl = most_general_template (tmpl);
11464 if (tmpl != gen_tmpl)
11466 /* The TMPL is a partial instantiation. To get a full set of
11467 arguments we must add the arguments used to perform the
11468 partial instantiation. */
11469 targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
11470 targ_ptr);
11472 /* Check to see if we already have this specialization. */
11473 spec = retrieve_specialization (gen_tmpl, targ_ptr,
11474 /*class_specializations_p=*/false);
11475 if (spec != NULL_TREE)
11476 return spec;
11479 if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
11480 complain))
11481 return error_mark_node;
11483 /* We are building a FUNCTION_DECL, during which the access of its
11484 parameters and return types have to be checked. However this
11485 FUNCTION_DECL which is the desired context for access checking
11486 is not built yet. We solve this chicken-and-egg problem by
11487 deferring all checks until we have the FUNCTION_DECL. */
11488 push_deferring_access_checks (dk_deferred);
11490 /* Although PROCESSING_TEMPLATE_DECL may be true at this point
11491 (because, for example, we have encountered a non-dependent
11492 function call in the body of a template function and must now
11493 determine which of several overloaded functions will be called),
11494 within the instantiation itself we are not processing a
11495 template. */
11496 saved_processing_template_decl = processing_template_decl;
11497 processing_template_decl = 0;
11498 /* Substitute template parameters to obtain the specialization. */
11499 fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
11500 targ_ptr, complain, gen_tmpl);
11501 processing_template_decl = saved_processing_template_decl;
11502 if (fndecl == error_mark_node)
11503 return error_mark_node;
11505 /* Now we know the specialization, compute access previously
11506 deferred. */
11507 push_access_scope (fndecl);
11508 perform_deferred_access_checks ();
11509 pop_access_scope (fndecl);
11510 pop_deferring_access_checks ();
11512 /* The DECL_TI_TEMPLATE should always be the immediate parent
11513 template, not the most general template. */
11514 DECL_TI_TEMPLATE (fndecl) = tmpl;
11516 /* If we've just instantiated the main entry point for a function,
11517 instantiate all the alternate entry points as well. We do this
11518 by cloning the instantiation of the main entry point, not by
11519 instantiating the template clones. */
11520 if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
11521 clone_function_decl (fndecl, /*update_method_vec_p=*/0);
11523 return fndecl;
11526 /* The FN is a TEMPLATE_DECL for a function. The ARGS are the
11527 arguments that are being used when calling it. TARGS is a vector
11528 into which the deduced template arguments are placed.
11530 Return zero for success, 2 for an incomplete match that doesn't resolve
11531 all the types, and 1 for complete failure. An error message will be
11532 printed only for an incomplete match.
11534 If FN is a conversion operator, or we are trying to produce a specific
11535 specialization, RETURN_TYPE is the return type desired.
11537 The EXPLICIT_TARGS are explicit template arguments provided via a
11538 template-id.
11540 The parameter STRICT is one of:
11542 DEDUCE_CALL:
11543 We are deducing arguments for a function call, as in
11544 [temp.deduct.call].
11546 DEDUCE_CONV:
11547 We are deducing arguments for a conversion function, as in
11548 [temp.deduct.conv].
11550 DEDUCE_EXACT:
11551 We are deducing arguments when doing an explicit instantiation
11552 as in [temp.explicit], when determining an explicit specialization
11553 as in [temp.expl.spec], or when taking the address of a function
11554 template, as in [temp.deduct.funcaddr]. */
11557 fn_type_unification (tree fn,
11558 tree explicit_targs,
11559 tree targs,
11560 tree args,
11561 tree return_type,
11562 unification_kind_t strict,
11563 int flags)
11565 tree parms;
11566 tree fntype;
11567 int result;
11568 bool incomplete_argument_packs_p = false;
11570 gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
11572 fntype = TREE_TYPE (fn);
11573 if (explicit_targs)
11575 /* [temp.deduct]
11577 The specified template arguments must match the template
11578 parameters in kind (i.e., type, nontype, template), and there
11579 must not be more arguments than there are parameters;
11580 otherwise type deduction fails.
11582 Nontype arguments must match the types of the corresponding
11583 nontype template parameters, or must be convertible to the
11584 types of the corresponding nontype parameters as specified in
11585 _temp.arg.nontype_, otherwise type deduction fails.
11587 All references in the function type of the function template
11588 to the corresponding template parameters are replaced by the
11589 specified template argument values. If a substitution in a
11590 template parameter or in the function type of the function
11591 template results in an invalid type, type deduction fails. */
11592 tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
11593 int i, len = TREE_VEC_LENGTH (tparms);
11594 tree converted_args;
11595 bool incomplete = false;
11597 if (explicit_targs == error_mark_node)
11598 return 1;
11600 converted_args
11601 = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
11602 /*require_all_args=*/false,
11603 /*use_default_args=*/false));
11604 if (converted_args == error_mark_node)
11605 return 1;
11607 /* Substitute the explicit args into the function type. This is
11608 necessary so that, for instance, explicitly declared function
11609 arguments can match null pointed constants. If we were given
11610 an incomplete set of explicit args, we must not do semantic
11611 processing during substitution as we could create partial
11612 instantiations. */
11613 for (i = 0; i < len; i++)
11615 tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11616 bool parameter_pack = false;
11618 /* Dig out the actual parm. */
11619 if (TREE_CODE (parm) == TYPE_DECL
11620 || TREE_CODE (parm) == TEMPLATE_DECL)
11622 parm = TREE_TYPE (parm);
11623 parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
11625 else if (TREE_CODE (parm) == PARM_DECL)
11627 parm = DECL_INITIAL (parm);
11628 parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
11631 if (parameter_pack)
11633 int level, idx;
11634 tree targ;
11635 template_parm_level_and_index (parm, &level, &idx);
11637 /* Mark the argument pack as "incomplete". We could
11638 still deduce more arguments during unification. */
11639 targ = TMPL_ARG (converted_args, level, idx);
11640 if (targ)
11642 ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
11643 ARGUMENT_PACK_EXPLICIT_ARGS (targ)
11644 = ARGUMENT_PACK_ARGS (targ);
11647 /* We have some incomplete argument packs. */
11648 incomplete_argument_packs_p = true;
11652 if (incomplete_argument_packs_p)
11653 /* Any substitution is guaranteed to be incomplete if there
11654 are incomplete argument packs, because we can still deduce
11655 more arguments. */
11656 incomplete = 1;
11657 else
11658 incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
11660 processing_template_decl += incomplete;
11661 fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
11662 processing_template_decl -= incomplete;
11664 if (fntype == error_mark_node)
11665 return 1;
11667 /* Place the explicitly specified arguments in TARGS. */
11668 for (i = NUM_TMPL_ARGS (converted_args); i--;)
11669 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
11672 /* Never do unification on the 'this' parameter. */
11673 parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
11675 if (return_type)
11677 parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
11678 args = tree_cons (NULL_TREE, return_type, args);
11681 /* We allow incomplete unification without an error message here
11682 because the standard doesn't seem to explicitly prohibit it. Our
11683 callers must be ready to deal with unification failures in any
11684 event. */
11685 result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
11686 targs, parms, args, /*subr=*/0,
11687 strict, flags);
11689 if (result == 0 && incomplete_argument_packs_p)
11691 int i, len = NUM_TMPL_ARGS (targs);
11693 /* Clear the "incomplete" flags on all argument packs. */
11694 for (i = 0; i < len; i++)
11696 tree arg = TREE_VEC_ELT (targs, i);
11697 if (ARGUMENT_PACK_P (arg))
11699 ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
11700 ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
11705 /* Now that we have bindings for all of the template arguments,
11706 ensure that the arguments deduced for the template template
11707 parameters have compatible template parameter lists. We cannot
11708 check this property before we have deduced all template
11709 arguments, because the template parameter types of a template
11710 template parameter might depend on prior template parameters
11711 deduced after the template template parameter. The following
11712 ill-formed example illustrates this issue:
11714 template<typename T, template<T> class C> void f(C<5>, T);
11716 template<int N> struct X {};
11718 void g() {
11719 f(X<5>(), 5l); // error: template argument deduction fails
11722 The template parameter list of 'C' depends on the template type
11723 parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
11724 'long'. Thus, we can't check that 'C' cannot bind to 'X' at the
11725 time that we deduce 'C'. */
11726 if (result == 0
11727 && !template_template_parm_bindings_ok_p
11728 (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
11729 return 1;
11731 if (result == 0)
11732 /* All is well so far. Now, check:
11734 [temp.deduct]
11736 When all template arguments have been deduced, all uses of
11737 template parameters in nondeduced contexts are replaced with
11738 the corresponding deduced argument values. If the
11739 substitution results in an invalid type, as described above,
11740 type deduction fails. */
11741 if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
11742 == error_mark_node)
11743 return 1;
11745 return result;
11748 /* Adjust types before performing type deduction, as described in
11749 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
11750 sections are symmetric. PARM is the type of a function parameter
11751 or the return type of the conversion function. ARG is the type of
11752 the argument passed to the call, or the type of the value
11753 initialized with the result of the conversion function.
11754 ARG_EXPR is the original argument expression, which may be null. */
11756 static int
11757 maybe_adjust_types_for_deduction (unification_kind_t strict,
11758 tree* parm,
11759 tree* arg,
11760 tree arg_expr)
11762 int result = 0;
11764 switch (strict)
11766 case DEDUCE_CALL:
11767 break;
11769 case DEDUCE_CONV:
11771 /* Swap PARM and ARG throughout the remainder of this
11772 function; the handling is precisely symmetric since PARM
11773 will initialize ARG rather than vice versa. */
11774 tree* temp = parm;
11775 parm = arg;
11776 arg = temp;
11777 break;
11780 case DEDUCE_EXACT:
11781 /* There is nothing to do in this case. */
11782 return 0;
11784 default:
11785 gcc_unreachable ();
11788 if (TREE_CODE (*parm) != REFERENCE_TYPE)
11790 /* [temp.deduct.call]
11792 If P is not a reference type:
11794 --If A is an array type, the pointer type produced by the
11795 array-to-pointer standard conversion (_conv.array_) is
11796 used in place of A for type deduction; otherwise,
11798 --If A is a function type, the pointer type produced by
11799 the function-to-pointer standard conversion
11800 (_conv.func_) is used in place of A for type deduction;
11801 otherwise,
11803 --If A is a cv-qualified type, the top level
11804 cv-qualifiers of A's type are ignored for type
11805 deduction. */
11806 if (TREE_CODE (*arg) == ARRAY_TYPE)
11807 *arg = build_pointer_type (TREE_TYPE (*arg));
11808 else if (TREE_CODE (*arg) == FUNCTION_TYPE)
11809 *arg = build_pointer_type (*arg);
11810 else
11811 *arg = TYPE_MAIN_VARIANT (*arg);
11814 /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
11815 of the form T&&, where T is a template parameter, and the argument
11816 is an lvalue, T is deduced as A& */
11817 if (TREE_CODE (*parm) == REFERENCE_TYPE
11818 && TYPE_REF_IS_RVALUE (*parm)
11819 && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
11820 && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
11821 && arg_expr && real_lvalue_p (arg_expr))
11822 *arg = build_reference_type (*arg);
11824 /* [temp.deduct.call]
11826 If P is a cv-qualified type, the top level cv-qualifiers
11827 of P's type are ignored for type deduction. If P is a
11828 reference type, the type referred to by P is used for
11829 type deduction. */
11830 *parm = TYPE_MAIN_VARIANT (*parm);
11831 if (TREE_CODE (*parm) == REFERENCE_TYPE)
11833 *parm = TREE_TYPE (*parm);
11834 result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
11837 /* DR 322. For conversion deduction, remove a reference type on parm
11838 too (which has been swapped into ARG). */
11839 if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
11840 *arg = TREE_TYPE (*arg);
11842 return result;
11845 /* Most parms like fn_type_unification.
11847 If SUBR is 1, we're being called recursively (to unify the
11848 arguments of a function or method parameter of a function
11849 template). */
11851 static int
11852 type_unification_real (tree tparms,
11853 tree targs,
11854 tree xparms,
11855 tree xargs,
11856 int subr,
11857 unification_kind_t strict,
11858 int flags)
11860 tree parm, arg, arg_expr;
11861 int i;
11862 int ntparms = TREE_VEC_LENGTH (tparms);
11863 int sub_strict;
11864 int saw_undeduced = 0;
11865 tree parms, args;
11867 gcc_assert (TREE_CODE (tparms) == TREE_VEC);
11868 gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
11869 gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
11870 gcc_assert (ntparms > 0);
11872 switch (strict)
11874 case DEDUCE_CALL:
11875 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
11876 | UNIFY_ALLOW_DERIVED);
11877 break;
11879 case DEDUCE_CONV:
11880 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
11881 break;
11883 case DEDUCE_EXACT:
11884 sub_strict = UNIFY_ALLOW_NONE;
11885 break;
11887 default:
11888 gcc_unreachable ();
11891 again:
11892 parms = xparms;
11893 args = xargs;
11895 while (parms && parms != void_list_node
11896 && args && args != void_list_node)
11898 if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
11899 break;
11901 parm = TREE_VALUE (parms);
11902 parms = TREE_CHAIN (parms);
11903 arg = TREE_VALUE (args);
11904 args = TREE_CHAIN (args);
11905 arg_expr = NULL;
11907 if (arg == error_mark_node)
11908 return 1;
11909 if (arg == unknown_type_node)
11910 /* We can't deduce anything from this, but we might get all the
11911 template args from other function args. */
11912 continue;
11914 /* Conversions will be performed on a function argument that
11915 corresponds with a function parameter that contains only
11916 non-deducible template parameters and explicitly specified
11917 template parameters. */
11918 if (!uses_template_parms (parm))
11920 tree type;
11922 if (!TYPE_P (arg))
11923 type = TREE_TYPE (arg);
11924 else
11925 type = arg;
11927 if (same_type_p (parm, type))
11928 continue;
11929 if (strict != DEDUCE_EXACT
11930 && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
11931 flags))
11932 continue;
11934 return 1;
11937 if (!TYPE_P (arg))
11939 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
11940 if (type_unknown_p (arg))
11942 /* [temp.deduct.type]
11944 A template-argument can be deduced from a pointer to
11945 function or pointer to member function argument if
11946 the set of overloaded functions does not contain
11947 function templates and at most one of a set of
11948 overloaded functions provides a unique match. */
11949 if (resolve_overloaded_unification
11950 (tparms, targs, parm, arg, strict, sub_strict))
11951 continue;
11953 return 1;
11955 arg_expr = arg;
11956 arg = unlowered_expr_type (arg);
11957 if (arg == error_mark_node)
11958 return 1;
11962 int arg_strict = sub_strict;
11964 if (!subr)
11965 arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
11966 arg_expr);
11968 if (unify (tparms, targs, parm, arg, arg_strict))
11969 return 1;
11974 if (parms
11975 && parms != void_list_node
11976 && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
11978 /* Unify the remaining arguments with the pack expansion type. */
11979 tree argvec;
11980 tree parmvec = make_tree_vec (1);
11981 int len = 0;
11982 tree t;
11984 /* Count the number of arguments that remain. */
11985 for (t = args; t && t != void_list_node; t = TREE_CHAIN (t))
11986 len++;
11988 /* Allocate a TREE_VEC and copy in all of the arguments */
11989 argvec = make_tree_vec (len);
11990 for (i = 0; args && args != void_list_node; args = TREE_CHAIN (args))
11992 TREE_VEC_ELT (argvec, i) = TREE_VALUE (args);
11993 ++i;
11996 /* Copy the parameter into parmvec. */
11997 TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
11998 if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
11999 /*call_args_p=*/true, /*subr=*/subr))
12000 return 1;
12002 /* Advance to the end of the list of parameters. */
12003 parms = TREE_CHAIN (parms);
12006 /* Fail if we've reached the end of the parm list, and more args
12007 are present, and the parm list isn't variadic. */
12008 if (args && args != void_list_node && parms == void_list_node)
12009 return 1;
12010 /* Fail if parms are left and they don't have default values. */
12011 if (parms && parms != void_list_node
12012 && TREE_PURPOSE (parms) == NULL_TREE)
12013 return 1;
12015 if (!subr)
12016 for (i = 0; i < ntparms; i++)
12017 if (!TREE_VEC_ELT (targs, i))
12019 tree tparm;
12021 if (TREE_VEC_ELT (tparms, i) == error_mark_node)
12022 continue;
12024 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
12026 /* If this is an undeduced nontype parameter that depends on
12027 a type parameter, try another pass; its type may have been
12028 deduced from a later argument than the one from which
12029 this parameter can be deduced. */
12030 if (TREE_CODE (tparm) == PARM_DECL
12031 && uses_template_parms (TREE_TYPE (tparm))
12032 && !saw_undeduced++)
12033 goto again;
12035 /* Core issue #226 (C++0x) [temp.deduct]:
12037 If a template argument has not been deduced, its
12038 default template argument, if any, is used.
12040 When we are in C++98 mode, TREE_PURPOSE will either
12041 be NULL_TREE or ERROR_MARK_NODE, so we do not need
12042 to explicitly check cxx_dialect here. */
12043 if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
12045 tree arg = tsubst (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)),
12046 targs, tf_none, NULL_TREE);
12047 if (arg == error_mark_node)
12048 return 1;
12049 else
12051 TREE_VEC_ELT (targs, i) = arg;
12052 continue;
12056 /* If the type parameter is a parameter pack, then it will
12057 be deduced to an empty parameter pack. */
12058 if (template_parameter_pack_p (tparm))
12060 tree arg;
12062 if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
12064 arg = make_node (NONTYPE_ARGUMENT_PACK);
12065 TREE_TYPE (arg) = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
12066 TREE_CONSTANT (arg) = 1;
12068 else
12069 arg = make_node (TYPE_ARGUMENT_PACK);
12071 SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
12073 TREE_VEC_ELT (targs, i) = arg;
12074 continue;
12077 return 2;
12080 return 0;
12083 /* Subroutine of type_unification_real. Args are like the variables
12084 at the call site. ARG is an overloaded function (or template-id);
12085 we try deducing template args from each of the overloads, and if
12086 only one succeeds, we go with that. Modifies TARGS and returns
12087 true on success. */
12089 static bool
12090 resolve_overloaded_unification (tree tparms,
12091 tree targs,
12092 tree parm,
12093 tree arg,
12094 unification_kind_t strict,
12095 int sub_strict)
12097 tree tempargs = copy_node (targs);
12098 int good = 0;
12099 bool addr_p;
12101 if (TREE_CODE (arg) == ADDR_EXPR)
12103 arg = TREE_OPERAND (arg, 0);
12104 addr_p = true;
12106 else
12107 addr_p = false;
12109 if (TREE_CODE (arg) == COMPONENT_REF)
12110 /* Handle `&x' where `x' is some static or non-static member
12111 function name. */
12112 arg = TREE_OPERAND (arg, 1);
12114 if (TREE_CODE (arg) == OFFSET_REF)
12115 arg = TREE_OPERAND (arg, 1);
12117 /* Strip baselink information. */
12118 if (BASELINK_P (arg))
12119 arg = BASELINK_FUNCTIONS (arg);
12121 if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
12123 /* If we got some explicit template args, we need to plug them into
12124 the affected templates before we try to unify, in case the
12125 explicit args will completely resolve the templates in question. */
12127 tree expl_subargs = TREE_OPERAND (arg, 1);
12128 arg = TREE_OPERAND (arg, 0);
12130 for (; arg; arg = OVL_NEXT (arg))
12132 tree fn = OVL_CURRENT (arg);
12133 tree subargs, elem;
12135 if (TREE_CODE (fn) != TEMPLATE_DECL)
12136 continue;
12138 subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
12139 expl_subargs, /*check_ret=*/false);
12140 if (subargs)
12142 elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
12143 good += try_one_overload (tparms, targs, tempargs, parm,
12144 elem, strict, sub_strict, addr_p);
12148 else if (TREE_CODE (arg) != OVERLOAD
12149 && TREE_CODE (arg) != FUNCTION_DECL)
12150 /* If ARG is, for example, "(0, &f)" then its type will be unknown
12151 -- but the deduction does not succeed because the expression is
12152 not just the function on its own. */
12153 return false;
12154 else
12155 for (; arg; arg = OVL_NEXT (arg))
12156 good += try_one_overload (tparms, targs, tempargs, parm,
12157 TREE_TYPE (OVL_CURRENT (arg)),
12158 strict, sub_strict, addr_p);
12160 /* [temp.deduct.type] A template-argument can be deduced from a pointer
12161 to function or pointer to member function argument if the set of
12162 overloaded functions does not contain function templates and at most
12163 one of a set of overloaded functions provides a unique match.
12165 So if we found multiple possibilities, we return success but don't
12166 deduce anything. */
12168 if (good == 1)
12170 int i = TREE_VEC_LENGTH (targs);
12171 for (; i--; )
12172 if (TREE_VEC_ELT (tempargs, i))
12173 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
12175 if (good)
12176 return true;
12178 return false;
12181 /* Subroutine of resolve_overloaded_unification; does deduction for a single
12182 overload. Fills TARGS with any deduced arguments, or error_mark_node if
12183 different overloads deduce different arguments for a given parm.
12184 ADDR_P is true if the expression for which deduction is being
12185 performed was of the form "& fn" rather than simply "fn".
12187 Returns 1 on success. */
12189 static int
12190 try_one_overload (tree tparms,
12191 tree orig_targs,
12192 tree targs,
12193 tree parm,
12194 tree arg,
12195 unification_kind_t strict,
12196 int sub_strict,
12197 bool addr_p)
12199 int nargs;
12200 tree tempargs;
12201 int i;
12203 /* [temp.deduct.type] A template-argument can be deduced from a pointer
12204 to function or pointer to member function argument if the set of
12205 overloaded functions does not contain function templates and at most
12206 one of a set of overloaded functions provides a unique match.
12208 So if this is a template, just return success. */
12210 if (uses_template_parms (arg))
12211 return 1;
12213 if (TREE_CODE (arg) == METHOD_TYPE)
12214 arg = build_ptrmemfunc_type (build_pointer_type (arg));
12215 else if (addr_p)
12216 arg = build_pointer_type (arg);
12218 sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
12220 /* We don't copy orig_targs for this because if we have already deduced
12221 some template args from previous args, unify would complain when we
12222 try to deduce a template parameter for the same argument, even though
12223 there isn't really a conflict. */
12224 nargs = TREE_VEC_LENGTH (targs);
12225 tempargs = make_tree_vec (nargs);
12227 if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
12228 return 0;
12230 /* First make sure we didn't deduce anything that conflicts with
12231 explicitly specified args. */
12232 for (i = nargs; i--; )
12234 tree elt = TREE_VEC_ELT (tempargs, i);
12235 tree oldelt = TREE_VEC_ELT (orig_targs, i);
12237 if (!elt)
12238 /*NOP*/;
12239 else if (uses_template_parms (elt))
12240 /* Since we're unifying against ourselves, we will fill in
12241 template args used in the function parm list with our own
12242 template parms. Discard them. */
12243 TREE_VEC_ELT (tempargs, i) = NULL_TREE;
12244 else if (oldelt && !template_args_equal (oldelt, elt))
12245 return 0;
12248 for (i = nargs; i--; )
12250 tree elt = TREE_VEC_ELT (tempargs, i);
12252 if (elt)
12253 TREE_VEC_ELT (targs, i) = elt;
12256 return 1;
12259 /* PARM is a template class (perhaps with unbound template
12260 parameters). ARG is a fully instantiated type. If ARG can be
12261 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
12262 TARGS are as for unify. */
12264 static tree
12265 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
12267 tree copy_of_targs;
12269 if (!CLASSTYPE_TEMPLATE_INFO (arg)
12270 || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
12271 != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
12272 return NULL_TREE;
12274 /* We need to make a new template argument vector for the call to
12275 unify. If we used TARGS, we'd clutter it up with the result of
12276 the attempted unification, even if this class didn't work out.
12277 We also don't want to commit ourselves to all the unifications
12278 we've already done, since unification is supposed to be done on
12279 an argument-by-argument basis. In other words, consider the
12280 following pathological case:
12282 template <int I, int J, int K>
12283 struct S {};
12285 template <int I, int J>
12286 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
12288 template <int I, int J, int K>
12289 void f(S<I, J, K>, S<I, I, I>);
12291 void g() {
12292 S<0, 0, 0> s0;
12293 S<0, 1, 2> s2;
12295 f(s0, s2);
12298 Now, by the time we consider the unification involving `s2', we
12299 already know that we must have `f<0, 0, 0>'. But, even though
12300 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
12301 because there are two ways to unify base classes of S<0, 1, 2>
12302 with S<I, I, I>. If we kept the already deduced knowledge, we
12303 would reject the possibility I=1. */
12304 copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
12306 /* If unification failed, we're done. */
12307 if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
12308 CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
12309 return NULL_TREE;
12311 return arg;
12314 /* Given a template type PARM and a class type ARG, find the unique
12315 base type in ARG that is an instance of PARM. We do not examine
12316 ARG itself; only its base-classes. If there is not exactly one
12317 appropriate base class, return NULL_TREE. PARM may be the type of
12318 a partial specialization, as well as a plain template type. Used
12319 by unify. */
12321 static tree
12322 get_template_base (tree tparms, tree targs, tree parm, tree arg)
12324 tree rval = NULL_TREE;
12325 tree binfo;
12327 gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)));
12329 binfo = TYPE_BINFO (complete_type (arg));
12330 if (!binfo)
12331 /* The type could not be completed. */
12332 return NULL_TREE;
12334 /* Walk in inheritance graph order. The search order is not
12335 important, and this avoids multiple walks of virtual bases. */
12336 for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
12338 tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
12340 if (r)
12342 /* If there is more than one satisfactory baseclass, then:
12344 [temp.deduct.call]
12346 If they yield more than one possible deduced A, the type
12347 deduction fails.
12349 applies. */
12350 if (rval && !same_type_p (r, rval))
12351 return NULL_TREE;
12353 rval = r;
12357 return rval;
12360 /* Returns the level of DECL, which declares a template parameter. */
12362 static int
12363 template_decl_level (tree decl)
12365 switch (TREE_CODE (decl))
12367 case TYPE_DECL:
12368 case TEMPLATE_DECL:
12369 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
12371 case PARM_DECL:
12372 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
12374 default:
12375 gcc_unreachable ();
12377 return 0;
12380 /* Decide whether ARG can be unified with PARM, considering only the
12381 cv-qualifiers of each type, given STRICT as documented for unify.
12382 Returns nonzero iff the unification is OK on that basis. */
12384 static int
12385 check_cv_quals_for_unify (int strict, tree arg, tree parm)
12387 int arg_quals = cp_type_quals (arg);
12388 int parm_quals = cp_type_quals (parm);
12390 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12391 && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12393 /* Although a CVR qualifier is ignored when being applied to a
12394 substituted template parameter ([8.3.2]/1 for example), that
12395 does not apply during deduction [14.8.2.4]/1, (even though
12396 that is not explicitly mentioned, [14.8.2.4]/9 indicates
12397 this). Except when we're allowing additional CV qualifiers
12398 at the outer level [14.8.2.1]/3,1st bullet. */
12399 if ((TREE_CODE (arg) == REFERENCE_TYPE
12400 || TREE_CODE (arg) == FUNCTION_TYPE
12401 || TREE_CODE (arg) == METHOD_TYPE)
12402 && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
12403 return 0;
12405 if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
12406 && (parm_quals & TYPE_QUAL_RESTRICT))
12407 return 0;
12410 if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12411 && (arg_quals & parm_quals) != parm_quals)
12412 return 0;
12414 if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
12415 && (parm_quals & arg_quals) != arg_quals)
12416 return 0;
12418 return 1;
12421 /* Determines the LEVEL and INDEX for the template parameter PARM. */
12422 void
12423 template_parm_level_and_index (tree parm, int* level, int* index)
12425 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12426 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12427 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12429 *index = TEMPLATE_TYPE_IDX (parm);
12430 *level = TEMPLATE_TYPE_LEVEL (parm);
12432 else
12434 *index = TEMPLATE_PARM_IDX (parm);
12435 *level = TEMPLATE_PARM_LEVEL (parm);
12439 /* Unifies the remaining arguments in PACKED_ARGS with the pack
12440 expansion at the end of PACKED_PARMS. Returns 0 if the type
12441 deduction succeeds, 1 otherwise. STRICT is the same as in
12442 unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
12443 call argument list. We'll need to adjust the arguments to make them
12444 types. SUBR tells us if this is from a recursive call to
12445 type_unification_real. */
12447 unify_pack_expansion (tree tparms, tree targs, tree packed_parms,
12448 tree packed_args, int strict, bool call_args_p,
12449 bool subr)
12451 tree parm
12452 = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
12453 tree pattern = PACK_EXPANSION_PATTERN (parm);
12454 tree pack, packs = NULL_TREE;
12455 int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
12456 int len = TREE_VEC_LENGTH (packed_args);
12458 /* Determine the parameter packs we will be deducing from the
12459 pattern, and record their current deductions. */
12460 for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm);
12461 pack; pack = TREE_CHAIN (pack))
12463 tree parm_pack = TREE_VALUE (pack);
12464 int idx, level;
12466 /* Determine the index and level of this parameter pack. */
12467 template_parm_level_and_index (parm_pack, &level, &idx);
12469 /* Keep track of the parameter packs and their corresponding
12470 argument packs. */
12471 packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
12472 TREE_TYPE (packs) = make_tree_vec (len - start);
12475 /* Loop through all of the arguments that have not yet been
12476 unified and unify each with the pattern. */
12477 for (i = start; i < len; i++)
12479 tree parm = pattern;
12481 /* For each parameter pack, clear out the deduced value so that
12482 we can deduce it again. */
12483 for (pack = packs; pack; pack = TREE_CHAIN (pack))
12485 int idx, level;
12486 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12488 TMPL_ARG (targs, level, idx) = NULL_TREE;
12491 /* Unify the pattern with the current argument. */
12493 tree arg = TREE_VEC_ELT (packed_args, i);
12494 tree arg_expr = NULL_TREE;
12495 int arg_strict = strict;
12496 bool skip_arg_p = false;
12498 if (call_args_p)
12500 int sub_strict;
12502 /* This mirrors what we do in type_unification_real. */
12503 switch (strict)
12505 case DEDUCE_CALL:
12506 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL
12507 | UNIFY_ALLOW_MORE_CV_QUAL
12508 | UNIFY_ALLOW_DERIVED);
12509 break;
12511 case DEDUCE_CONV:
12512 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12513 break;
12515 case DEDUCE_EXACT:
12516 sub_strict = UNIFY_ALLOW_NONE;
12517 break;
12519 default:
12520 gcc_unreachable ();
12523 if (!TYPE_P (arg))
12525 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12526 if (type_unknown_p (arg))
12528 /* [temp.deduct.type] A template-argument can be
12529 deduced from a pointer to function or pointer
12530 to member function argument if the set of
12531 overloaded functions does not contain function
12532 templates and at most one of a set of
12533 overloaded functions provides a unique
12534 match. */
12536 if (resolve_overloaded_unification
12537 (tparms, targs, parm, arg, strict, sub_strict)
12538 != 0)
12539 return 1;
12540 skip_arg_p = true;
12543 if (!skip_arg_p)
12545 arg_expr = arg;
12546 arg = unlowered_expr_type (arg);
12547 if (arg == error_mark_node)
12548 return 1;
12552 arg_strict = sub_strict;
12554 if (!subr)
12555 arg_strict |=
12556 maybe_adjust_types_for_deduction (strict, &parm, &arg,
12557 arg_expr);
12560 if (!skip_arg_p)
12562 if (unify (tparms, targs, parm, arg, arg_strict))
12563 return 1;
12567 /* For each parameter pack, collect the deduced value. */
12568 for (pack = packs; pack; pack = TREE_CHAIN (pack))
12570 int idx, level;
12571 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12573 TREE_VEC_ELT (TREE_TYPE (pack), i - start) =
12574 TMPL_ARG (targs, level, idx);
12578 /* Verify that the results of unification with the parameter packs
12579 produce results consistent with what we've seen before, and make
12580 the deduced argument packs available. */
12581 for (pack = packs; pack; pack = TREE_CHAIN (pack))
12583 tree old_pack = TREE_VALUE (pack);
12584 tree new_args = TREE_TYPE (pack);
12585 int i, len = TREE_VEC_LENGTH (new_args);
12586 bool nondeduced_p = false;
12588 /* If NEW_ARGS contains any NULL_TREE entries, we didn't
12589 actually deduce anything. */
12590 for (i = 0; i < len && !nondeduced_p; ++i)
12591 if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
12592 nondeduced_p = true;
12593 if (nondeduced_p)
12594 continue;
12596 if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
12598 /* Prepend the explicit arguments onto NEW_ARGS. */
12599 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12600 tree old_args = new_args;
12601 int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
12602 int len = explicit_len + TREE_VEC_LENGTH (old_args);
12604 /* Copy the explicit arguments. */
12605 new_args = make_tree_vec (len);
12606 for (i = 0; i < explicit_len; i++)
12607 TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
12609 /* Copy the deduced arguments. */
12610 for (; i < len; i++)
12611 TREE_VEC_ELT (new_args, i) =
12612 TREE_VEC_ELT (old_args, i - explicit_len);
12615 if (!old_pack)
12617 tree result;
12618 int idx, level;
12620 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12622 /* Build the deduced *_ARGUMENT_PACK. */
12623 if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
12625 result = make_node (NONTYPE_ARGUMENT_PACK);
12626 TREE_TYPE (result) =
12627 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
12628 TREE_CONSTANT (result) = 1;
12630 else
12631 result = make_node (TYPE_ARGUMENT_PACK);
12633 SET_ARGUMENT_PACK_ARGS (result, new_args);
12635 /* Note the deduced argument packs for this parameter
12636 pack. */
12637 TMPL_ARG (targs, level, idx) = result;
12639 else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
12640 && (ARGUMENT_PACK_ARGS (old_pack)
12641 == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
12643 /* We only had the explicitly-provided arguments before, but
12644 now we have a complete set of arguments. */
12645 int idx, level;
12646 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12647 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12649 /* Keep the original deduced argument pack. */
12650 TMPL_ARG (targs, level, idx) = old_pack;
12652 SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
12653 ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
12654 ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
12656 else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
12657 new_args))
12658 /* Inconsistent unification of this parameter pack. */
12659 return 1;
12660 else
12662 int idx, level;
12664 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12666 /* Keep the original deduced argument pack. */
12667 TMPL_ARG (targs, level, idx) = old_pack;
12671 return 0;
12674 /* Deduce the value of template parameters. TPARMS is the (innermost)
12675 set of template parameters to a template. TARGS is the bindings
12676 for those template parameters, as determined thus far; TARGS may
12677 include template arguments for outer levels of template parameters
12678 as well. PARM is a parameter to a template function, or a
12679 subcomponent of that parameter; ARG is the corresponding argument.
12680 This function attempts to match PARM with ARG in a manner
12681 consistent with the existing assignments in TARGS. If more values
12682 are deduced, then TARGS is updated.
12684 Returns 0 if the type deduction succeeds, 1 otherwise. The
12685 parameter STRICT is a bitwise or of the following flags:
12687 UNIFY_ALLOW_NONE:
12688 Require an exact match between PARM and ARG.
12689 UNIFY_ALLOW_MORE_CV_QUAL:
12690 Allow the deduced ARG to be more cv-qualified (by qualification
12691 conversion) than ARG.
12692 UNIFY_ALLOW_LESS_CV_QUAL:
12693 Allow the deduced ARG to be less cv-qualified than ARG.
12694 UNIFY_ALLOW_DERIVED:
12695 Allow the deduced ARG to be a template base class of ARG,
12696 or a pointer to a template base class of the type pointed to by
12697 ARG.
12698 UNIFY_ALLOW_INTEGER:
12699 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
12700 case for more information.
12701 UNIFY_ALLOW_OUTER_LEVEL:
12702 This is the outermost level of a deduction. Used to determine validity
12703 of qualification conversions. A valid qualification conversion must
12704 have const qualified pointers leading up to the inner type which
12705 requires additional CV quals, except at the outer level, where const
12706 is not required [conv.qual]. It would be normal to set this flag in
12707 addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
12708 UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
12709 This is the outermost level of a deduction, and PARM can be more CV
12710 qualified at this point.
12711 UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
12712 This is the outermost level of a deduction, and PARM can be less CV
12713 qualified at this point. */
12715 static int
12716 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
12718 int idx;
12719 tree targ;
12720 tree tparm;
12721 int strict_in = strict;
12723 /* I don't think this will do the right thing with respect to types.
12724 But the only case I've seen it in so far has been array bounds, where
12725 signedness is the only information lost, and I think that will be
12726 okay. */
12727 while (TREE_CODE (parm) == NOP_EXPR)
12728 parm = TREE_OPERAND (parm, 0);
12730 if (arg == error_mark_node)
12731 return 1;
12732 if (arg == unknown_type_node)
12733 /* We can't deduce anything from this, but we might get all the
12734 template args from other function args. */
12735 return 0;
12737 /* If PARM uses template parameters, then we can't bail out here,
12738 even if ARG == PARM, since we won't record unifications for the
12739 template parameters. We might need them if we're trying to
12740 figure out which of two things is more specialized. */
12741 if (arg == parm && !uses_template_parms (parm))
12742 return 0;
12744 /* Immediately reject some pairs that won't unify because of
12745 cv-qualification mismatches. */
12746 if (TREE_CODE (arg) == TREE_CODE (parm)
12747 && TYPE_P (arg)
12748 /* It is the elements of the array which hold the cv quals of an array
12749 type, and the elements might be template type parms. We'll check
12750 when we recurse. */
12751 && TREE_CODE (arg) != ARRAY_TYPE
12752 /* We check the cv-qualifiers when unifying with template type
12753 parameters below. We want to allow ARG `const T' to unify with
12754 PARM `T' for example, when computing which of two templates
12755 is more specialized, for example. */
12756 && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
12757 && !check_cv_quals_for_unify (strict_in, arg, parm))
12758 return 1;
12760 if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
12761 && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
12762 strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
12763 strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
12764 strict &= ~UNIFY_ALLOW_DERIVED;
12765 strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
12766 strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
12768 switch (TREE_CODE (parm))
12770 case TYPENAME_TYPE:
12771 case SCOPE_REF:
12772 case UNBOUND_CLASS_TEMPLATE:
12773 /* In a type which contains a nested-name-specifier, template
12774 argument values cannot be deduced for template parameters used
12775 within the nested-name-specifier. */
12776 return 0;
12778 case TEMPLATE_TYPE_PARM:
12779 case TEMPLATE_TEMPLATE_PARM:
12780 case BOUND_TEMPLATE_TEMPLATE_PARM:
12781 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
12782 if (tparm == error_mark_node)
12783 return 1;
12785 if (TEMPLATE_TYPE_LEVEL (parm)
12786 != template_decl_level (tparm))
12787 /* The PARM is not one we're trying to unify. Just check
12788 to see if it matches ARG. */
12789 return (TREE_CODE (arg) == TREE_CODE (parm)
12790 && same_type_p (parm, arg)) ? 0 : 1;
12791 idx = TEMPLATE_TYPE_IDX (parm);
12792 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
12793 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
12795 /* Check for mixed types and values. */
12796 if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12797 && TREE_CODE (tparm) != TYPE_DECL)
12798 || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12799 && TREE_CODE (tparm) != TEMPLATE_DECL))
12800 return 1;
12802 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12804 /* ARG must be constructed from a template class or a template
12805 template parameter. */
12806 if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
12807 && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
12808 return 1;
12811 tree parmvec = TYPE_TI_ARGS (parm);
12812 tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
12813 tree argtmplvec
12814 = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
12815 int i, len;
12816 int parm_variadic_p = 0;
12818 /* The resolution to DR150 makes clear that default
12819 arguments for an N-argument may not be used to bind T
12820 to a template template parameter with fewer than N
12821 parameters. It is not safe to permit the binding of
12822 default arguments as an extension, as that may change
12823 the meaning of a conforming program. Consider:
12825 struct Dense { static const unsigned int dim = 1; };
12827 template <template <typename> class View,
12828 typename Block>
12829 void operator+(float, View<Block> const&);
12831 template <typename Block,
12832 unsigned int Dim = Block::dim>
12833 struct Lvalue_proxy { operator float() const; };
12835 void
12836 test_1d (void) {
12837 Lvalue_proxy<Dense> p;
12838 float b;
12839 b + p;
12842 Here, if Lvalue_proxy is permitted to bind to View, then
12843 the global operator+ will be used; if they are not, the
12844 Lvalue_proxy will be converted to float. */
12845 if (coerce_template_parms (argtmplvec, parmvec,
12846 TYPE_TI_TEMPLATE (parm),
12847 tf_none,
12848 /*require_all_args=*/true,
12849 /*use_default_args=*/false)
12850 == error_mark_node)
12851 return 1;
12853 /* Deduce arguments T, i from TT<T> or TT<i>.
12854 We check each element of PARMVEC and ARGVEC individually
12855 rather than the whole TREE_VEC since they can have
12856 different number of elements. */
12858 parmvec = expand_template_argument_pack (parmvec);
12859 argvec = expand_template_argument_pack (argvec);
12861 len = TREE_VEC_LENGTH (parmvec);
12863 /* Check if the parameters end in a pack, making them
12864 variadic. */
12865 if (len > 0
12866 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
12867 parm_variadic_p = 1;
12869 if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
12870 return 1;
12872 for (i = 0; i < len - parm_variadic_p; ++i)
12874 if (unify (tparms, targs,
12875 TREE_VEC_ELT (parmvec, i),
12876 TREE_VEC_ELT (argvec, i),
12877 UNIFY_ALLOW_NONE))
12878 return 1;
12881 if (parm_variadic_p
12882 && unify_pack_expansion (tparms, targs,
12883 parmvec, argvec,
12884 UNIFY_ALLOW_NONE,
12885 /*call_args_p=*/false,
12886 /*subr=*/false))
12887 return 1;
12889 arg = TYPE_TI_TEMPLATE (arg);
12891 /* Fall through to deduce template name. */
12894 if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12895 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12897 /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>. */
12899 /* Simple cases: Value already set, does match or doesn't. */
12900 if (targ != NULL_TREE && template_args_equal (targ, arg))
12901 return 0;
12902 else if (targ)
12903 return 1;
12905 else
12907 /* If PARM is `const T' and ARG is only `int', we don't have
12908 a match unless we are allowing additional qualification.
12909 If ARG is `const int' and PARM is just `T' that's OK;
12910 that binds `const int' to `T'. */
12911 if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
12912 arg, parm))
12913 return 1;
12915 /* Consider the case where ARG is `const volatile int' and
12916 PARM is `const T'. Then, T should be `volatile int'. */
12917 arg = cp_build_qualified_type_real
12918 (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
12919 if (arg == error_mark_node)
12920 return 1;
12922 /* Simple cases: Value already set, does match or doesn't. */
12923 if (targ != NULL_TREE && same_type_p (targ, arg))
12924 return 0;
12925 else if (targ)
12926 return 1;
12928 /* Make sure that ARG is not a variable-sized array. (Note
12929 that were talking about variable-sized arrays (like
12930 `int[n]'), rather than arrays of unknown size (like
12931 `int[]').) We'll get very confused by such a type since
12932 the bound of the array will not be computable in an
12933 instantiation. Besides, such types are not allowed in
12934 ISO C++, so we can do as we please here. */
12935 if (variably_modified_type_p (arg, NULL_TREE))
12936 return 1;
12939 /* If ARG is a parameter pack or an expansion, we cannot unify
12940 against it unless PARM is also a parameter pack. */
12941 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
12942 && !template_parameter_pack_p (parm))
12943 return 1;
12945 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
12946 return 0;
12948 case TEMPLATE_PARM_INDEX:
12949 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
12950 if (tparm == error_mark_node)
12951 return 1;
12953 if (TEMPLATE_PARM_LEVEL (parm)
12954 != template_decl_level (tparm))
12955 /* The PARM is not one we're trying to unify. Just check
12956 to see if it matches ARG. */
12957 return !(TREE_CODE (arg) == TREE_CODE (parm)
12958 && cp_tree_equal (parm, arg));
12960 idx = TEMPLATE_PARM_IDX (parm);
12961 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
12963 if (targ)
12964 return !cp_tree_equal (targ, arg);
12966 /* [temp.deduct.type] If, in the declaration of a function template
12967 with a non-type template-parameter, the non-type
12968 template-parameter is used in an expression in the function
12969 parameter-list and, if the corresponding template-argument is
12970 deduced, the template-argument type shall match the type of the
12971 template-parameter exactly, except that a template-argument
12972 deduced from an array bound may be of any integral type.
12973 The non-type parameter might use already deduced type parameters. */
12974 tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
12975 if (!TREE_TYPE (arg))
12976 /* Template-parameter dependent expression. Just accept it for now.
12977 It will later be processed in convert_template_argument. */
12979 else if (same_type_p (TREE_TYPE (arg), tparm))
12980 /* OK */;
12981 else if ((strict & UNIFY_ALLOW_INTEGER)
12982 && (TREE_CODE (tparm) == INTEGER_TYPE
12983 || TREE_CODE (tparm) == BOOLEAN_TYPE))
12984 /* Convert the ARG to the type of PARM; the deduced non-type
12985 template argument must exactly match the types of the
12986 corresponding parameter. */
12987 arg = fold (build_nop (TREE_TYPE (parm), arg));
12988 else if (uses_template_parms (tparm))
12989 /* We haven't deduced the type of this parameter yet. Try again
12990 later. */
12991 return 0;
12992 else
12993 return 1;
12995 /* If ARG is a parameter pack or an expansion, we cannot unify
12996 against it unless PARM is also a parameter pack. */
12997 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
12998 && !TEMPLATE_PARM_PARAMETER_PACK (parm))
12999 return 1;
13001 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
13002 return 0;
13004 case PTRMEM_CST:
13006 /* A pointer-to-member constant can be unified only with
13007 another constant. */
13008 if (TREE_CODE (arg) != PTRMEM_CST)
13009 return 1;
13011 /* Just unify the class member. It would be useless (and possibly
13012 wrong, depending on the strict flags) to unify also
13013 PTRMEM_CST_CLASS, because we want to be sure that both parm and
13014 arg refer to the same variable, even if through different
13015 classes. For instance:
13017 struct A { int x; };
13018 struct B : A { };
13020 Unification of &A::x and &B::x must succeed. */
13021 return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
13022 PTRMEM_CST_MEMBER (arg), strict);
13025 case POINTER_TYPE:
13027 if (TREE_CODE (arg) != POINTER_TYPE)
13028 return 1;
13030 /* [temp.deduct.call]
13032 A can be another pointer or pointer to member type that can
13033 be converted to the deduced A via a qualification
13034 conversion (_conv.qual_).
13036 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
13037 This will allow for additional cv-qualification of the
13038 pointed-to types if appropriate. */
13040 if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
13041 /* The derived-to-base conversion only persists through one
13042 level of pointers. */
13043 strict |= (strict_in & UNIFY_ALLOW_DERIVED);
13045 return unify (tparms, targs, TREE_TYPE (parm),
13046 TREE_TYPE (arg), strict);
13049 case REFERENCE_TYPE:
13050 if (TREE_CODE (arg) != REFERENCE_TYPE)
13051 return 1;
13052 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13053 strict & UNIFY_ALLOW_MORE_CV_QUAL);
13055 case ARRAY_TYPE:
13056 if (TREE_CODE (arg) != ARRAY_TYPE)
13057 return 1;
13058 if ((TYPE_DOMAIN (parm) == NULL_TREE)
13059 != (TYPE_DOMAIN (arg) == NULL_TREE))
13060 return 1;
13061 if (TYPE_DOMAIN (parm) != NULL_TREE)
13063 tree parm_max;
13064 tree arg_max;
13065 bool parm_cst;
13066 bool arg_cst;
13068 /* Our representation of array types uses "N - 1" as the
13069 TYPE_MAX_VALUE for an array with "N" elements, if "N" is
13070 not an integer constant. We cannot unify arbitrarily
13071 complex expressions, so we eliminate the MINUS_EXPRs
13072 here. */
13073 parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
13074 parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
13075 if (!parm_cst)
13077 gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
13078 parm_max = TREE_OPERAND (parm_max, 0);
13080 arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
13081 arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
13082 if (!arg_cst)
13084 /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
13085 trying to unify the type of a variable with the type
13086 of a template parameter. For example:
13088 template <unsigned int N>
13089 void f (char (&) [N]);
13090 int g();
13091 void h(int i) {
13092 char a[g(i)];
13093 f(a);
13096 Here, the type of the ARG will be "int [g(i)]", and
13097 may be a SAVE_EXPR, etc. */
13098 if (TREE_CODE (arg_max) != MINUS_EXPR)
13099 return 1;
13100 arg_max = TREE_OPERAND (arg_max, 0);
13103 /* If only one of the bounds used a MINUS_EXPR, compensate
13104 by adding one to the other bound. */
13105 if (parm_cst && !arg_cst)
13106 parm_max = fold_build2 (PLUS_EXPR,
13107 integer_type_node,
13108 parm_max,
13109 integer_one_node);
13110 else if (arg_cst && !parm_cst)
13111 arg_max = fold_build2 (PLUS_EXPR,
13112 integer_type_node,
13113 arg_max,
13114 integer_one_node);
13116 if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
13117 return 1;
13119 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13120 strict & UNIFY_ALLOW_MORE_CV_QUAL);
13122 case REAL_TYPE:
13123 case COMPLEX_TYPE:
13124 case VECTOR_TYPE:
13125 case INTEGER_TYPE:
13126 case BOOLEAN_TYPE:
13127 case ENUMERAL_TYPE:
13128 case VOID_TYPE:
13129 if (TREE_CODE (arg) != TREE_CODE (parm))
13130 return 1;
13132 /* We have already checked cv-qualification at the top of the
13133 function. */
13134 if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
13135 return 1;
13137 /* As far as unification is concerned, this wins. Later checks
13138 will invalidate it if necessary. */
13139 return 0;
13141 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
13142 /* Type INTEGER_CST can come from ordinary constant template args. */
13143 case INTEGER_CST:
13144 while (TREE_CODE (arg) == NOP_EXPR)
13145 arg = TREE_OPERAND (arg, 0);
13147 if (TREE_CODE (arg) != INTEGER_CST)
13148 return 1;
13149 return !tree_int_cst_equal (parm, arg);
13151 case TREE_VEC:
13153 int i;
13154 if (TREE_CODE (arg) != TREE_VEC)
13155 return 1;
13156 if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
13157 return 1;
13158 for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
13159 if (unify (tparms, targs,
13160 TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
13161 UNIFY_ALLOW_NONE))
13162 return 1;
13163 return 0;
13166 case RECORD_TYPE:
13167 case UNION_TYPE:
13168 if (TREE_CODE (arg) != TREE_CODE (parm))
13169 return 1;
13171 if (TYPE_PTRMEMFUNC_P (parm))
13173 if (!TYPE_PTRMEMFUNC_P (arg))
13174 return 1;
13176 return unify (tparms, targs,
13177 TYPE_PTRMEMFUNC_FN_TYPE (parm),
13178 TYPE_PTRMEMFUNC_FN_TYPE (arg),
13179 strict);
13182 if (CLASSTYPE_TEMPLATE_INFO (parm))
13184 tree t = NULL_TREE;
13186 if (strict_in & UNIFY_ALLOW_DERIVED)
13188 /* First, we try to unify the PARM and ARG directly. */
13189 t = try_class_unification (tparms, targs,
13190 parm, arg);
13192 if (!t)
13194 /* Fallback to the special case allowed in
13195 [temp.deduct.call]:
13197 If P is a class, and P has the form
13198 template-id, then A can be a derived class of
13199 the deduced A. Likewise, if P is a pointer to
13200 a class of the form template-id, A can be a
13201 pointer to a derived class pointed to by the
13202 deduced A. */
13203 t = get_template_base (tparms, targs, parm, arg);
13205 if (!t)
13206 return 1;
13209 else if (CLASSTYPE_TEMPLATE_INFO (arg)
13210 && (CLASSTYPE_TI_TEMPLATE (parm)
13211 == CLASSTYPE_TI_TEMPLATE (arg)))
13212 /* Perhaps PARM is something like S<U> and ARG is S<int>.
13213 Then, we should unify `int' and `U'. */
13214 t = arg;
13215 else
13216 /* There's no chance of unification succeeding. */
13217 return 1;
13219 return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
13220 CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
13222 else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
13223 return 1;
13224 return 0;
13226 case METHOD_TYPE:
13227 case FUNCTION_TYPE:
13228 if (TREE_CODE (arg) != TREE_CODE (parm))
13229 return 1;
13231 /* CV qualifications for methods can never be deduced, they must
13232 match exactly. We need to check them explicitly here,
13233 because type_unification_real treats them as any other
13234 cvqualified parameter. */
13235 if (TREE_CODE (parm) == METHOD_TYPE
13236 && (!check_cv_quals_for_unify
13237 (UNIFY_ALLOW_NONE,
13238 TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
13239 TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
13240 return 1;
13242 if (unify (tparms, targs, TREE_TYPE (parm),
13243 TREE_TYPE (arg), UNIFY_ALLOW_NONE))
13244 return 1;
13245 return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
13246 TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
13247 LOOKUP_NORMAL);
13249 case OFFSET_TYPE:
13250 /* Unify a pointer to member with a pointer to member function, which
13251 deduces the type of the member as a function type. */
13252 if (TYPE_PTRMEMFUNC_P (arg))
13254 tree method_type;
13255 tree fntype;
13256 cp_cv_quals cv_quals;
13258 /* Check top-level cv qualifiers */
13259 if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
13260 return 1;
13262 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
13263 TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
13264 return 1;
13266 /* Determine the type of the function we are unifying against. */
13267 method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
13268 fntype =
13269 build_function_type (TREE_TYPE (method_type),
13270 TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
13272 /* Extract the cv-qualifiers of the member function from the
13273 implicit object parameter and place them on the function
13274 type to be restored later. */
13275 cv_quals =
13276 cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
13277 fntype = build_qualified_type (fntype, cv_quals);
13278 return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
13281 if (TREE_CODE (arg) != OFFSET_TYPE)
13282 return 1;
13283 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
13284 TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
13285 return 1;
13286 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13287 strict);
13289 case CONST_DECL:
13290 if (DECL_TEMPLATE_PARM_P (parm))
13291 return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
13292 if (arg != integral_constant_value (parm))
13293 return 1;
13294 return 0;
13296 case FIELD_DECL:
13297 case TEMPLATE_DECL:
13298 /* Matched cases are handled by the ARG == PARM test above. */
13299 return 1;
13301 case TYPE_ARGUMENT_PACK:
13302 case NONTYPE_ARGUMENT_PACK:
13304 tree packed_parms = ARGUMENT_PACK_ARGS (parm);
13305 tree packed_args = ARGUMENT_PACK_ARGS (arg);
13306 int i, len = TREE_VEC_LENGTH (packed_parms);
13307 int argslen = TREE_VEC_LENGTH (packed_args);
13308 int parm_variadic_p = 0;
13310 for (i = 0; i < len; ++i)
13312 if (PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, i)))
13314 if (i == len - 1)
13315 /* We can unify against something with a trailing
13316 parameter pack. */
13317 parm_variadic_p = 1;
13318 else
13319 /* Since there is something following the pack
13320 expansion, we cannot unify this template argument
13321 list. */
13322 return 0;
13327 /* If we don't have enough arguments to satisfy the parameters
13328 (not counting the pack expression at the end), or we have
13329 too many arguments for a parameter list that doesn't end in
13330 a pack expression, we can't unify. */
13331 if (argslen < (len - parm_variadic_p)
13332 || (argslen > len && !parm_variadic_p))
13333 return 1;
13335 /* Unify all of the parameters that precede the (optional)
13336 pack expression. */
13337 for (i = 0; i < len - parm_variadic_p; ++i)
13339 if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
13340 TREE_VEC_ELT (packed_args, i), strict))
13341 return 1;
13344 if (parm_variadic_p)
13345 return unify_pack_expansion (tparms, targs,
13346 packed_parms, packed_args,
13347 strict, /*call_args_p=*/false,
13348 /*subr=*/false);
13349 return 0;
13352 break;
13354 case TYPEOF_TYPE:
13355 case DECLTYPE_TYPE:
13356 /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
13357 nodes. */
13358 return 0;
13360 case ERROR_MARK:
13361 /* Unification fails if we hit an error node. */
13362 return 1;
13364 default:
13365 gcc_assert (EXPR_P (parm));
13367 /* We must be looking at an expression. This can happen with
13368 something like:
13370 template <int I>
13371 void foo(S<I>, S<I + 2>);
13373 This is a "nondeduced context":
13375 [deduct.type]
13377 The nondeduced contexts are:
13379 --A type that is a template-id in which one or more of
13380 the template-arguments is an expression that references
13381 a template-parameter.
13383 In these cases, we assume deduction succeeded, but don't
13384 actually infer any unifications. */
13386 if (!uses_template_parms (parm)
13387 && !template_args_equal (parm, arg))
13388 return 1;
13389 else
13390 return 0;
13394 /* Note that DECL can be defined in this translation unit, if
13395 required. */
13397 static void
13398 mark_definable (tree decl)
13400 tree clone;
13401 DECL_NOT_REALLY_EXTERN (decl) = 1;
13402 FOR_EACH_CLONE (clone, decl)
13403 DECL_NOT_REALLY_EXTERN (clone) = 1;
13406 /* Called if RESULT is explicitly instantiated, or is a member of an
13407 explicitly instantiated class. */
13409 void
13410 mark_decl_instantiated (tree result, int extern_p)
13412 SET_DECL_EXPLICIT_INSTANTIATION (result);
13414 /* If this entity has already been written out, it's too late to
13415 make any modifications. */
13416 if (TREE_ASM_WRITTEN (result))
13417 return;
13419 if (TREE_CODE (result) != FUNCTION_DECL)
13420 /* The TREE_PUBLIC flag for function declarations will have been
13421 set correctly by tsubst. */
13422 TREE_PUBLIC (result) = 1;
13424 /* This might have been set by an earlier implicit instantiation. */
13425 DECL_COMDAT (result) = 0;
13427 if (extern_p)
13428 DECL_NOT_REALLY_EXTERN (result) = 0;
13429 else
13431 mark_definable (result);
13432 /* Always make artificials weak. */
13433 if (DECL_ARTIFICIAL (result) && flag_weak)
13434 comdat_linkage (result);
13435 /* For WIN32 we also want to put explicit instantiations in
13436 linkonce sections. */
13437 else if (TREE_PUBLIC (result))
13438 maybe_make_one_only (result);
13441 /* If EXTERN_P, then this function will not be emitted -- unless
13442 followed by an explicit instantiation, at which point its linkage
13443 will be adjusted. If !EXTERN_P, then this function will be
13444 emitted here. In neither circumstance do we want
13445 import_export_decl to adjust the linkage. */
13446 DECL_INTERFACE_KNOWN (result) = 1;
13449 /* Given two function templates PAT1 and PAT2, return:
13451 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
13452 -1 if PAT2 is more specialized than PAT1.
13453 0 if neither is more specialized.
13455 LEN indicates the number of parameters we should consider
13456 (defaulted parameters should not be considered).
13458 The 1998 std underspecified function template partial ordering, and
13459 DR214 addresses the issue. We take pairs of arguments, one from
13460 each of the templates, and deduce them against each other. One of
13461 the templates will be more specialized if all the *other*
13462 template's arguments deduce against its arguments and at least one
13463 of its arguments *does* *not* deduce against the other template's
13464 corresponding argument. Deduction is done as for class templates.
13465 The arguments used in deduction have reference and top level cv
13466 qualifiers removed. Iff both arguments were originally reference
13467 types *and* deduction succeeds in both directions, the template
13468 with the more cv-qualified argument wins for that pairing (if
13469 neither is more cv-qualified, they both are equal). Unlike regular
13470 deduction, after all the arguments have been deduced in this way,
13471 we do *not* verify the deduced template argument values can be
13472 substituted into non-deduced contexts, nor do we have to verify
13473 that all template arguments have been deduced. */
13476 more_specialized_fn (tree pat1, tree pat2, int len)
13478 tree decl1 = DECL_TEMPLATE_RESULT (pat1);
13479 tree decl2 = DECL_TEMPLATE_RESULT (pat2);
13480 tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
13481 tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
13482 tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
13483 tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
13484 tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
13485 tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
13486 int better1 = 0;
13487 int better2 = 0;
13489 /* Remove the this parameter from non-static member functions. If
13490 one is a non-static member function and the other is not a static
13491 member function, remove the first parameter from that function
13492 also. This situation occurs for operator functions where we
13493 locate both a member function (with this pointer) and non-member
13494 operator (with explicit first operand). */
13495 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
13497 len--; /* LEN is the number of significant arguments for DECL1 */
13498 args1 = TREE_CHAIN (args1);
13499 if (!DECL_STATIC_FUNCTION_P (decl2))
13500 args2 = TREE_CHAIN (args2);
13502 else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
13504 args2 = TREE_CHAIN (args2);
13505 if (!DECL_STATIC_FUNCTION_P (decl1))
13507 len--;
13508 args1 = TREE_CHAIN (args1);
13512 /* If only one is a conversion operator, they are unordered. */
13513 if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
13514 return 0;
13516 /* Consider the return type for a conversion function */
13517 if (DECL_CONV_FN_P (decl1))
13519 args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
13520 args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
13521 len++;
13524 processing_template_decl++;
13526 while (len--)
13528 tree arg1 = TREE_VALUE (args1);
13529 tree arg2 = TREE_VALUE (args2);
13530 int deduce1, deduce2;
13531 int quals1 = -1;
13532 int quals2 = -1;
13534 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13535 && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13537 /* When both arguments are pack expansions, we need only
13538 unify the patterns themselves. */
13539 arg1 = PACK_EXPANSION_PATTERN (arg1);
13540 arg2 = PACK_EXPANSION_PATTERN (arg2);
13542 /* This is the last comparison we need to do. */
13543 len = 0;
13546 if (TREE_CODE (arg1) == REFERENCE_TYPE)
13548 arg1 = TREE_TYPE (arg1);
13549 quals1 = cp_type_quals (arg1);
13552 if (TREE_CODE (arg2) == REFERENCE_TYPE)
13554 arg2 = TREE_TYPE (arg2);
13555 quals2 = cp_type_quals (arg2);
13558 if ((quals1 < 0) != (quals2 < 0))
13560 /* Only of the args is a reference, see if we should apply
13561 array/function pointer decay to it. This is not part of
13562 DR214, but is, IMHO, consistent with the deduction rules
13563 for the function call itself, and with our earlier
13564 implementation of the underspecified partial ordering
13565 rules. (nathan). */
13566 if (quals1 >= 0)
13568 switch (TREE_CODE (arg1))
13570 case ARRAY_TYPE:
13571 arg1 = TREE_TYPE (arg1);
13572 /* FALLTHROUGH. */
13573 case FUNCTION_TYPE:
13574 arg1 = build_pointer_type (arg1);
13575 break;
13577 default:
13578 break;
13581 else
13583 switch (TREE_CODE (arg2))
13585 case ARRAY_TYPE:
13586 arg2 = TREE_TYPE (arg2);
13587 /* FALLTHROUGH. */
13588 case FUNCTION_TYPE:
13589 arg2 = build_pointer_type (arg2);
13590 break;
13592 default:
13593 break;
13598 arg1 = TYPE_MAIN_VARIANT (arg1);
13599 arg2 = TYPE_MAIN_VARIANT (arg2);
13601 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
13603 int i, len2 = list_length (args2);
13604 tree parmvec = make_tree_vec (1);
13605 tree argvec = make_tree_vec (len2);
13606 tree ta = args2;
13608 /* Setup the parameter vector, which contains only ARG1. */
13609 TREE_VEC_ELT (parmvec, 0) = arg1;
13611 /* Setup the argument vector, which contains the remaining
13612 arguments. */
13613 for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
13614 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13616 deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec,
13617 argvec, UNIFY_ALLOW_NONE,
13618 /*call_args_p=*/false,
13619 /*subr=*/0);
13621 /* We cannot deduce in the other direction, because ARG1 is
13622 a pack expansion but ARG2 is not. */
13623 deduce2 = 0;
13625 else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13627 int i, len1 = list_length (args1);
13628 tree parmvec = make_tree_vec (1);
13629 tree argvec = make_tree_vec (len1);
13630 tree ta = args1;
13632 /* Setup the parameter vector, which contains only ARG1. */
13633 TREE_VEC_ELT (parmvec, 0) = arg2;
13635 /* Setup the argument vector, which contains the remaining
13636 arguments. */
13637 for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
13638 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13640 deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec,
13641 argvec, UNIFY_ALLOW_NONE,
13642 /*call_args_p=*/false,
13643 /*subr=*/0);
13645 /* We cannot deduce in the other direction, because ARG2 is
13646 a pack expansion but ARG1 is not.*/
13647 deduce1 = 0;
13650 else
13652 /* The normal case, where neither argument is a pack
13653 expansion. */
13654 deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
13655 deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
13658 if (!deduce1)
13659 better2 = -1;
13660 if (!deduce2)
13661 better1 = -1;
13662 if (better1 < 0 && better2 < 0)
13663 /* We've failed to deduce something in either direction.
13664 These must be unordered. */
13665 break;
13667 if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
13669 /* Deduces in both directions, see if quals can
13670 disambiguate. Pretend the worse one failed to deduce. */
13671 if ((quals1 & quals2) == quals2)
13672 deduce1 = 0;
13673 if ((quals1 & quals2) == quals1)
13674 deduce2 = 0;
13676 if (deduce1 && !deduce2 && !better2)
13677 better2 = 1;
13678 if (deduce2 && !deduce1 && !better1)
13679 better1 = 1;
13681 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13682 || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13683 /* We have already processed all of the arguments in our
13684 handing of the pack expansion type. */
13685 len = 0;
13687 args1 = TREE_CHAIN (args1);
13688 args2 = TREE_CHAIN (args2);
13690 /* Stop when an ellipsis is seen. */
13691 if (args1 == NULL_TREE || args2 == NULL_TREE)
13692 break;
13695 processing_template_decl--;
13697 /* All things being equal, if the next argument is a pack expansion
13698 for one function but not for the other, prefer the
13699 non-variadic function. */
13700 if ((better1 > 0) - (better2 > 0) == 0
13701 && args1 && TREE_VALUE (args1)
13702 && args2 && TREE_VALUE (args2))
13704 if (TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION)
13705 return TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION ? 0 : -1;
13706 else if (TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION)
13707 return 1;
13710 return (better1 > 0) - (better2 > 0);
13713 /* Determine which of two partial specializations is more specialized.
13715 PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
13716 to the first partial specialization. The TREE_VALUE is the
13717 innermost set of template parameters for the partial
13718 specialization. PAT2 is similar, but for the second template.
13720 Return 1 if the first partial specialization is more specialized;
13721 -1 if the second is more specialized; 0 if neither is more
13722 specialized.
13724 See [temp.class.order] for information about determining which of
13725 two templates is more specialized. */
13727 static int
13728 more_specialized_class (tree pat1, tree pat2)
13730 tree targs;
13731 tree tmpl1, tmpl2;
13732 int winner = 0;
13733 bool any_deductions = false;
13735 tmpl1 = TREE_TYPE (pat1);
13736 tmpl2 = TREE_TYPE (pat2);
13738 /* Just like what happens for functions, if we are ordering between
13739 different class template specializations, we may encounter dependent
13740 types in the arguments, and we need our dependency check functions
13741 to behave correctly. */
13742 ++processing_template_decl;
13743 targs = get_class_bindings (TREE_VALUE (pat1),
13744 CLASSTYPE_TI_ARGS (tmpl1),
13745 CLASSTYPE_TI_ARGS (tmpl2));
13746 if (targs)
13748 --winner;
13749 any_deductions = true;
13752 targs = get_class_bindings (TREE_VALUE (pat2),
13753 CLASSTYPE_TI_ARGS (tmpl2),
13754 CLASSTYPE_TI_ARGS (tmpl1));
13755 if (targs)
13757 ++winner;
13758 any_deductions = true;
13760 --processing_template_decl;
13762 /* In the case of a tie where at least one of the class templates
13763 has a parameter pack at the end, the template with the most
13764 non-packed parameters wins. */
13765 if (winner == 0
13766 && any_deductions
13767 && (template_args_variadic_p (TREE_PURPOSE (pat1))
13768 || template_args_variadic_p (TREE_PURPOSE (pat2))))
13770 tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
13771 tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
13772 int len1 = TREE_VEC_LENGTH (args1);
13773 int len2 = TREE_VEC_LENGTH (args2);
13775 /* We don't count the pack expansion at the end. */
13776 if (template_args_variadic_p (TREE_PURPOSE (pat1)))
13777 --len1;
13778 if (template_args_variadic_p (TREE_PURPOSE (pat2)))
13779 --len2;
13781 if (len1 > len2)
13782 return 1;
13783 else if (len1 < len2)
13784 return -1;
13787 return winner;
13790 /* Return the template arguments that will produce the function signature
13791 DECL from the function template FN, with the explicit template
13792 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is true, the return type must
13793 also match. Return NULL_TREE if no satisfactory arguments could be
13794 found. */
13796 static tree
13797 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
13799 int ntparms = DECL_NTPARMS (fn);
13800 tree targs = make_tree_vec (ntparms);
13801 tree decl_type;
13802 tree decl_arg_types;
13804 /* Substitute the explicit template arguments into the type of DECL.
13805 The call to fn_type_unification will handle substitution into the
13806 FN. */
13807 decl_type = TREE_TYPE (decl);
13808 if (explicit_args && uses_template_parms (decl_type))
13810 tree tmpl;
13811 tree converted_args;
13813 if (DECL_TEMPLATE_INFO (decl))
13814 tmpl = DECL_TI_TEMPLATE (decl);
13815 else
13816 /* We can get here for some invalid specializations. */
13817 return NULL_TREE;
13819 converted_args
13820 = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
13821 explicit_args, NULL_TREE,
13822 tf_none,
13823 /*require_all_args=*/false,
13824 /*use_default_args=*/false);
13825 if (converted_args == error_mark_node)
13826 return NULL_TREE;
13828 decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
13829 if (decl_type == error_mark_node)
13830 return NULL_TREE;
13833 /* Never do unification on the 'this' parameter. */
13834 decl_arg_types = skip_artificial_parms_for (decl,
13835 TYPE_ARG_TYPES (decl_type));
13837 if (fn_type_unification (fn, explicit_args, targs,
13838 decl_arg_types,
13839 (check_rettype || DECL_CONV_FN_P (fn)
13840 ? TREE_TYPE (decl_type) : NULL_TREE),
13841 DEDUCE_EXACT, LOOKUP_NORMAL))
13842 return NULL_TREE;
13844 return targs;
13847 /* Return the innermost template arguments that, when applied to a
13848 template specialization whose innermost template parameters are
13849 TPARMS, and whose specialization arguments are PARMS, yield the
13850 ARGS.
13852 For example, suppose we have:
13854 template <class T, class U> struct S {};
13855 template <class T> struct S<T*, int> {};
13857 Then, suppose we want to get `S<double*, int>'. The TPARMS will be
13858 {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
13859 int}. The resulting vector will be {double}, indicating that `T'
13860 is bound to `double'. */
13862 static tree
13863 get_class_bindings (tree tparms, tree spec_args, tree args)
13865 int i, ntparms = TREE_VEC_LENGTH (tparms);
13866 tree deduced_args;
13867 tree innermost_deduced_args;
13869 innermost_deduced_args = make_tree_vec (ntparms);
13870 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
13872 deduced_args = copy_node (args);
13873 SET_TMPL_ARGS_LEVEL (deduced_args,
13874 TMPL_ARGS_DEPTH (deduced_args),
13875 innermost_deduced_args);
13877 else
13878 deduced_args = innermost_deduced_args;
13880 if (unify (tparms, deduced_args,
13881 INNERMOST_TEMPLATE_ARGS (spec_args),
13882 INNERMOST_TEMPLATE_ARGS (args),
13883 UNIFY_ALLOW_NONE))
13884 return NULL_TREE;
13886 for (i = 0; i < ntparms; ++i)
13887 if (! TREE_VEC_ELT (innermost_deduced_args, i))
13888 return NULL_TREE;
13890 /* Verify that nondeduced template arguments agree with the type
13891 obtained from argument deduction.
13893 For example:
13895 struct A { typedef int X; };
13896 template <class T, class U> struct C {};
13897 template <class T> struct C<T, typename T::X> {};
13899 Then with the instantiation `C<A, int>', we can deduce that
13900 `T' is `A' but unify () does not check whether `typename T::X'
13901 is `int'. */
13902 spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
13903 if (spec_args == error_mark_node
13904 /* We only need to check the innermost arguments; the other
13905 arguments will always agree. */
13906 || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
13907 INNERMOST_TEMPLATE_ARGS (args)))
13908 return NULL_TREE;
13910 /* Now that we have bindings for all of the template arguments,
13911 ensure that the arguments deduced for the template template
13912 parameters have compatible template parameter lists. See the use
13913 of template_template_parm_bindings_ok_p in fn_type_unification
13914 for more information. */
13915 if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
13916 return NULL_TREE;
13918 return deduced_args;
13921 /* TEMPLATES is a TREE_LIST. Each TREE_VALUE is a TEMPLATE_DECL.
13922 Return the TREE_LIST node with the most specialized template, if
13923 any. If there is no most specialized template, the error_mark_node
13924 is returned.
13926 Note that this function does not look at, or modify, the
13927 TREE_PURPOSE or TREE_TYPE of any of the nodes. Since the node
13928 returned is one of the elements of INSTANTIATIONS, callers may
13929 store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
13930 and retrieve it from the value returned. */
13932 tree
13933 most_specialized_instantiation (tree templates)
13935 tree fn, champ;
13937 ++processing_template_decl;
13939 champ = templates;
13940 for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
13942 int fate = 0;
13944 if (get_bindings (TREE_VALUE (champ),
13945 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
13946 NULL_TREE, /*check_ret=*/false))
13947 fate--;
13949 if (get_bindings (TREE_VALUE (fn),
13950 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
13951 NULL_TREE, /*check_ret=*/false))
13952 fate++;
13954 if (fate == -1)
13955 champ = fn;
13956 else if (!fate)
13958 /* Equally specialized, move to next function. If there
13959 is no next function, nothing's most specialized. */
13960 fn = TREE_CHAIN (fn);
13961 champ = fn;
13962 if (!fn)
13963 break;
13967 if (champ)
13968 /* Now verify that champ is better than everything earlier in the
13969 instantiation list. */
13970 for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
13971 if (get_bindings (TREE_VALUE (champ),
13972 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
13973 NULL_TREE, /*check_ret=*/false)
13974 || !get_bindings (TREE_VALUE (fn),
13975 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
13976 NULL_TREE, /*check_ret=*/false))
13978 champ = NULL_TREE;
13979 break;
13982 processing_template_decl--;
13984 if (!champ)
13985 return error_mark_node;
13987 return champ;
13990 /* If DECL is a specialization of some template, return the most
13991 general such template. Otherwise, returns NULL_TREE.
13993 For example, given:
13995 template <class T> struct S { template <class U> void f(U); };
13997 if TMPL is `template <class U> void S<int>::f(U)' this will return
13998 the full template. This function will not trace past partial
13999 specializations, however. For example, given in addition:
14001 template <class T> struct S<T*> { template <class U> void f(U); };
14003 if TMPL is `template <class U> void S<int*>::f(U)' this will return
14004 `template <class T> template <class U> S<T*>::f(U)'. */
14006 tree
14007 most_general_template (tree decl)
14009 /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
14010 an immediate specialization. */
14011 if (TREE_CODE (decl) == FUNCTION_DECL)
14013 if (DECL_TEMPLATE_INFO (decl)) {
14014 decl = DECL_TI_TEMPLATE (decl);
14016 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
14017 template friend. */
14018 if (TREE_CODE (decl) != TEMPLATE_DECL)
14019 return NULL_TREE;
14020 } else
14021 return NULL_TREE;
14024 /* Look for more and more general templates. */
14025 while (DECL_TEMPLATE_INFO (decl))
14027 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
14028 (See cp-tree.h for details.) */
14029 if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
14030 break;
14032 if (CLASS_TYPE_P (TREE_TYPE (decl))
14033 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
14034 break;
14036 /* Stop if we run into an explicitly specialized class template. */
14037 if (!DECL_NAMESPACE_SCOPE_P (decl)
14038 && DECL_CONTEXT (decl)
14039 && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
14040 break;
14042 decl = DECL_TI_TEMPLATE (decl);
14045 return decl;
14048 /* Return the most specialized of the class template partial
14049 specializations of TMPL which can produce TYPE, a specialization of
14050 TMPL. The value returned is actually a TREE_LIST; the TREE_TYPE is
14051 a _TYPE node corresponding to the partial specialization, while the
14052 TREE_PURPOSE is the set of template arguments that must be
14053 substituted into the TREE_TYPE in order to generate TYPE.
14055 If the choice of partial specialization is ambiguous, a diagnostic
14056 is issued, and the error_mark_node is returned. If there are no
14057 partial specializations of TMPL matching TYPE, then NULL_TREE is
14058 returned. */
14060 static tree
14061 most_specialized_class (tree type, tree tmpl)
14063 tree list = NULL_TREE;
14064 tree t;
14065 tree champ;
14066 int fate;
14067 bool ambiguous_p;
14068 tree args;
14069 tree outer_args = NULL_TREE;
14071 tmpl = most_general_template (tmpl);
14072 args = CLASSTYPE_TI_ARGS (type);
14074 /* For determining which partial specialization to use, only the
14075 innermost args are interesting. */
14076 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
14078 outer_args = strip_innermost_template_args (args, 1);
14079 args = INNERMOST_TEMPLATE_ARGS (args);
14082 for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
14084 tree partial_spec_args;
14085 tree spec_args;
14086 tree parms = TREE_VALUE (t);
14088 partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
14089 if (outer_args)
14091 int i;
14093 ++processing_template_decl;
14095 /* Discard the outer levels of args, and then substitute in the
14096 template args from the enclosing class. */
14097 partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
14098 partial_spec_args = tsubst_template_args
14099 (partial_spec_args, outer_args, tf_none, NULL_TREE);
14101 /* PARMS already refers to just the innermost parms, but the
14102 template parms in partial_spec_args had their levels lowered
14103 by tsubst, so we need to do the same for the parm list. We
14104 can't just tsubst the TREE_VEC itself, as tsubst wants to
14105 treat a TREE_VEC as an argument vector. */
14106 parms = copy_node (parms);
14107 for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
14108 TREE_VEC_ELT (parms, i) =
14109 tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
14111 --processing_template_decl;
14113 spec_args = get_class_bindings (parms,
14114 partial_spec_args,
14115 args);
14116 if (spec_args)
14118 if (outer_args)
14119 spec_args = add_to_template_args (outer_args, spec_args);
14120 list = tree_cons (spec_args, TREE_VALUE (t), list);
14121 TREE_TYPE (list) = TREE_TYPE (t);
14125 if (! list)
14126 return NULL_TREE;
14128 ambiguous_p = false;
14129 t = list;
14130 champ = t;
14131 t = TREE_CHAIN (t);
14132 for (; t; t = TREE_CHAIN (t))
14134 fate = more_specialized_class (champ, t);
14135 if (fate == 1)
14137 else
14139 if (fate == 0)
14141 t = TREE_CHAIN (t);
14142 if (! t)
14144 ambiguous_p = true;
14145 break;
14148 champ = t;
14152 if (!ambiguous_p)
14153 for (t = list; t && t != champ; t = TREE_CHAIN (t))
14155 fate = more_specialized_class (champ, t);
14156 if (fate != 1)
14158 ambiguous_p = true;
14159 break;
14163 if (ambiguous_p)
14165 const char *str = "candidates are:";
14166 error ("ambiguous class template instantiation for %q#T", type);
14167 for (t = list; t; t = TREE_CHAIN (t))
14169 error ("%s %+#T", str, TREE_TYPE (t));
14170 str = " ";
14172 return error_mark_node;
14175 return champ;
14178 /* Explicitly instantiate DECL. */
14180 void
14181 do_decl_instantiation (tree decl, tree storage)
14183 tree result = NULL_TREE;
14184 int extern_p = 0;
14186 if (!decl || decl == error_mark_node)
14187 /* An error occurred, for which grokdeclarator has already issued
14188 an appropriate message. */
14189 return;
14190 else if (! DECL_LANG_SPECIFIC (decl))
14192 error ("explicit instantiation of non-template %q#D", decl);
14193 return;
14195 else if (TREE_CODE (decl) == VAR_DECL)
14197 /* There is an asymmetry here in the way VAR_DECLs and
14198 FUNCTION_DECLs are handled by grokdeclarator. In the case of
14199 the latter, the DECL we get back will be marked as a
14200 template instantiation, and the appropriate
14201 DECL_TEMPLATE_INFO will be set up. This does not happen for
14202 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
14203 should handle VAR_DECLs as it currently handles
14204 FUNCTION_DECLs. */
14205 if (!DECL_CLASS_SCOPE_P (decl))
14207 error ("%qD is not a static data member of a class template", decl);
14208 return;
14210 result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
14211 if (!result || TREE_CODE (result) != VAR_DECL)
14213 error ("no matching template for %qD found", decl);
14214 return;
14216 if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
14218 error ("type %qT for explicit instantiation %qD does not match "
14219 "declared type %qT", TREE_TYPE (result), decl,
14220 TREE_TYPE (decl));
14221 return;
14224 else if (TREE_CODE (decl) != FUNCTION_DECL)
14226 error ("explicit instantiation of %q#D", decl);
14227 return;
14229 else
14230 result = decl;
14232 /* Check for various error cases. Note that if the explicit
14233 instantiation is valid the RESULT will currently be marked as an
14234 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
14235 until we get here. */
14237 if (DECL_TEMPLATE_SPECIALIZATION (result))
14239 /* DR 259 [temp.spec].
14241 Both an explicit instantiation and a declaration of an explicit
14242 specialization shall not appear in a program unless the explicit
14243 instantiation follows a declaration of the explicit specialization.
14245 For a given set of template parameters, if an explicit
14246 instantiation of a template appears after a declaration of an
14247 explicit specialization for that template, the explicit
14248 instantiation has no effect. */
14249 return;
14251 else if (DECL_EXPLICIT_INSTANTIATION (result))
14253 /* [temp.spec]
14255 No program shall explicitly instantiate any template more
14256 than once.
14258 We check DECL_NOT_REALLY_EXTERN so as not to complain when
14259 the first instantiation was `extern' and the second is not,
14260 and EXTERN_P for the opposite case. */
14261 if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
14262 pedwarn ("duplicate explicit instantiation of %q#D", result);
14263 /* If an "extern" explicit instantiation follows an ordinary
14264 explicit instantiation, the template is instantiated. */
14265 if (extern_p)
14266 return;
14268 else if (!DECL_IMPLICIT_INSTANTIATION (result))
14270 error ("no matching template for %qD found", result);
14271 return;
14273 else if (!DECL_TEMPLATE_INFO (result))
14275 pedwarn ("explicit instantiation of non-template %q#D", result);
14276 return;
14279 if (storage == NULL_TREE)
14281 else if (storage == ridpointers[(int) RID_EXTERN])
14283 if (pedantic && !in_system_header)
14284 pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
14285 "instantiations");
14286 extern_p = 1;
14288 else
14289 error ("storage class %qD applied to template instantiation", storage);
14291 check_explicit_instantiation_namespace (result);
14292 mark_decl_instantiated (result, extern_p);
14293 if (! extern_p)
14294 instantiate_decl (result, /*defer_ok=*/1,
14295 /*expl_inst_class_mem_p=*/false);
14298 static void
14299 mark_class_instantiated (tree t, int extern_p)
14301 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
14302 SET_CLASSTYPE_INTERFACE_KNOWN (t);
14303 CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
14304 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
14305 if (! extern_p)
14307 CLASSTYPE_DEBUG_REQUESTED (t) = 1;
14308 rest_of_type_compilation (t, 1);
14312 /* Called from do_type_instantiation through binding_table_foreach to
14313 do recursive instantiation for the type bound in ENTRY. */
14314 static void
14315 bt_instantiate_type_proc (binding_entry entry, void *data)
14317 tree storage = *(tree *) data;
14319 if (IS_AGGR_TYPE (entry->type)
14320 && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
14321 do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
14324 /* Called from do_type_instantiation to instantiate a member
14325 (a member function or a static member variable) of an
14326 explicitly instantiated class template. */
14327 static void
14328 instantiate_class_member (tree decl, int extern_p)
14330 mark_decl_instantiated (decl, extern_p);
14331 if (! extern_p)
14332 instantiate_decl (decl, /*defer_ok=*/1,
14333 /*expl_inst_class_mem_p=*/true);
14336 /* Perform an explicit instantiation of template class T. STORAGE, if
14337 non-null, is the RID for extern, inline or static. COMPLAIN is
14338 nonzero if this is called from the parser, zero if called recursively,
14339 since the standard is unclear (as detailed below). */
14341 void
14342 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
14344 int extern_p = 0;
14345 int nomem_p = 0;
14346 int static_p = 0;
14347 int previous_instantiation_extern_p = 0;
14349 if (TREE_CODE (t) == TYPE_DECL)
14350 t = TREE_TYPE (t);
14352 if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
14354 error ("explicit instantiation of non-template type %qT", t);
14355 return;
14358 complete_type (t);
14360 if (!COMPLETE_TYPE_P (t))
14362 if (complain & tf_error)
14363 error ("explicit instantiation of %q#T before definition of template",
14365 return;
14368 if (storage != NULL_TREE)
14370 if (pedantic && !in_system_header)
14371 pedwarn("ISO C++ forbids the use of %qE on explicit instantiations",
14372 storage);
14374 if (storage == ridpointers[(int) RID_INLINE])
14375 nomem_p = 1;
14376 else if (storage == ridpointers[(int) RID_EXTERN])
14377 extern_p = 1;
14378 else if (storage == ridpointers[(int) RID_STATIC])
14379 static_p = 1;
14380 else
14382 error ("storage class %qD applied to template instantiation",
14383 storage);
14384 extern_p = 0;
14388 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
14390 /* DR 259 [temp.spec].
14392 Both an explicit instantiation and a declaration of an explicit
14393 specialization shall not appear in a program unless the explicit
14394 instantiation follows a declaration of the explicit specialization.
14396 For a given set of template parameters, if an explicit
14397 instantiation of a template appears after a declaration of an
14398 explicit specialization for that template, the explicit
14399 instantiation has no effect. */
14400 return;
14402 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
14404 /* [temp.spec]
14406 No program shall explicitly instantiate any template more
14407 than once.
14409 If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
14410 instantiation was `extern'. If EXTERN_P then the second is.
14411 These cases are OK. */
14412 previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
14414 if (!previous_instantiation_extern_p && !extern_p
14415 && (complain & tf_error))
14416 pedwarn ("duplicate explicit instantiation of %q#T", t);
14418 /* If we've already instantiated the template, just return now. */
14419 if (!CLASSTYPE_INTERFACE_ONLY (t))
14420 return;
14423 check_explicit_instantiation_namespace (TYPE_NAME (t));
14424 mark_class_instantiated (t, extern_p);
14426 if (nomem_p)
14427 return;
14430 tree tmp;
14432 /* In contrast to implicit instantiation, where only the
14433 declarations, and not the definitions, of members are
14434 instantiated, we have here:
14436 [temp.explicit]
14438 The explicit instantiation of a class template specialization
14439 implies the instantiation of all of its members not
14440 previously explicitly specialized in the translation unit
14441 containing the explicit instantiation.
14443 Of course, we can't instantiate member template classes, since
14444 we don't have any arguments for them. Note that the standard
14445 is unclear on whether the instantiation of the members are
14446 *explicit* instantiations or not. However, the most natural
14447 interpretation is that it should be an explicit instantiation. */
14449 if (! static_p)
14450 for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
14451 if (TREE_CODE (tmp) == FUNCTION_DECL
14452 && DECL_TEMPLATE_INSTANTIATION (tmp))
14453 instantiate_class_member (tmp, extern_p);
14455 for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
14456 if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
14457 instantiate_class_member (tmp, extern_p);
14459 if (CLASSTYPE_NESTED_UTDS (t))
14460 binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
14461 bt_instantiate_type_proc, &storage);
14465 /* Given a function DECL, which is a specialization of TMPL, modify
14466 DECL to be a re-instantiation of TMPL with the same template
14467 arguments. TMPL should be the template into which tsubst'ing
14468 should occur for DECL, not the most general template.
14470 One reason for doing this is a scenario like this:
14472 template <class T>
14473 void f(const T&, int i);
14475 void g() { f(3, 7); }
14477 template <class T>
14478 void f(const T& t, const int i) { }
14480 Note that when the template is first instantiated, with
14481 instantiate_template, the resulting DECL will have no name for the
14482 first parameter, and the wrong type for the second. So, when we go
14483 to instantiate the DECL, we regenerate it. */
14485 static void
14486 regenerate_decl_from_template (tree decl, tree tmpl)
14488 /* The arguments used to instantiate DECL, from the most general
14489 template. */
14490 tree args;
14491 tree code_pattern;
14493 args = DECL_TI_ARGS (decl);
14494 code_pattern = DECL_TEMPLATE_RESULT (tmpl);
14496 /* Make sure that we can see identifiers, and compute access
14497 correctly. */
14498 push_access_scope (decl);
14500 if (TREE_CODE (decl) == FUNCTION_DECL)
14502 tree decl_parm;
14503 tree pattern_parm;
14504 tree specs;
14505 int args_depth;
14506 int parms_depth;
14508 args_depth = TMPL_ARGS_DEPTH (args);
14509 parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
14510 if (args_depth > parms_depth)
14511 args = get_innermost_template_args (args, parms_depth);
14513 specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
14514 args, tf_error, NULL_TREE);
14515 if (specs)
14516 TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
14517 specs);
14519 /* Merge parameter declarations. */
14520 decl_parm = skip_artificial_parms_for (decl,
14521 DECL_ARGUMENTS (decl));
14522 pattern_parm
14523 = skip_artificial_parms_for (code_pattern,
14524 DECL_ARGUMENTS (code_pattern));
14525 while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
14527 tree parm_type;
14528 tree attributes;
14530 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14531 DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
14532 parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
14533 NULL_TREE);
14534 parm_type = type_decays_to (parm_type);
14535 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14536 TREE_TYPE (decl_parm) = parm_type;
14537 attributes = DECL_ATTRIBUTES (pattern_parm);
14538 if (DECL_ATTRIBUTES (decl_parm) != attributes)
14540 DECL_ATTRIBUTES (decl_parm) = attributes;
14541 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14543 decl_parm = TREE_CHAIN (decl_parm);
14544 pattern_parm = TREE_CHAIN (pattern_parm);
14546 /* Merge any parameters that match with the function parameter
14547 pack. */
14548 if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
14550 int i, len;
14551 tree expanded_types;
14552 /* Expand the TYPE_PACK_EXPANSION that provides the types for
14553 the parameters in this function parameter pack. */
14554 expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm),
14555 args, tf_error, NULL_TREE);
14556 len = TREE_VEC_LENGTH (expanded_types);
14557 for (i = 0; i < len; i++)
14559 tree parm_type;
14560 tree attributes;
14562 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14563 /* Rename the parameter to include the index. */
14564 DECL_NAME (decl_parm) =
14565 make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
14566 parm_type = TREE_VEC_ELT (expanded_types, i);
14567 parm_type = type_decays_to (parm_type);
14568 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14569 TREE_TYPE (decl_parm) = parm_type;
14570 attributes = DECL_ATTRIBUTES (pattern_parm);
14571 if (DECL_ATTRIBUTES (decl_parm) != attributes)
14573 DECL_ATTRIBUTES (decl_parm) = attributes;
14574 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14576 decl_parm = TREE_CHAIN (decl_parm);
14579 /* Merge additional specifiers from the CODE_PATTERN. */
14580 if (DECL_DECLARED_INLINE_P (code_pattern)
14581 && !DECL_DECLARED_INLINE_P (decl))
14582 DECL_DECLARED_INLINE_P (decl) = 1;
14583 if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
14584 DECL_INLINE (decl) = 1;
14586 else if (TREE_CODE (decl) == VAR_DECL)
14587 DECL_INITIAL (decl) =
14588 tsubst_expr (DECL_INITIAL (code_pattern), args,
14589 tf_error, DECL_TI_TEMPLATE (decl),
14590 /*integral_constant_expression_p=*/false);
14591 else
14592 gcc_unreachable ();
14594 pop_access_scope (decl);
14597 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
14598 substituted to get DECL. */
14600 tree
14601 template_for_substitution (tree decl)
14603 tree tmpl = DECL_TI_TEMPLATE (decl);
14605 /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
14606 for the instantiation. This is not always the most general
14607 template. Consider, for example:
14609 template <class T>
14610 struct S { template <class U> void f();
14611 template <> void f<int>(); };
14613 and an instantiation of S<double>::f<int>. We want TD to be the
14614 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
14615 while (/* An instantiation cannot have a definition, so we need a
14616 more general template. */
14617 DECL_TEMPLATE_INSTANTIATION (tmpl)
14618 /* We must also deal with friend templates. Given:
14620 template <class T> struct S {
14621 template <class U> friend void f() {};
14624 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
14625 so far as the language is concerned, but that's still
14626 where we get the pattern for the instantiation from. On
14627 other hand, if the definition comes outside the class, say:
14629 template <class T> struct S {
14630 template <class U> friend void f();
14632 template <class U> friend void f() {}
14634 we don't need to look any further. That's what the check for
14635 DECL_INITIAL is for. */
14636 || (TREE_CODE (decl) == FUNCTION_DECL
14637 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
14638 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
14640 /* The present template, TD, should not be a definition. If it
14641 were a definition, we should be using it! Note that we
14642 cannot restructure the loop to just keep going until we find
14643 a template with a definition, since that might go too far if
14644 a specialization was declared, but not defined. */
14645 gcc_assert (TREE_CODE (decl) != VAR_DECL
14646 || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
14648 /* Fetch the more general template. */
14649 tmpl = DECL_TI_TEMPLATE (tmpl);
14652 return tmpl;
14655 /* Produce the definition of D, a _DECL generated from a template. If
14656 DEFER_OK is nonzero, then we don't have to actually do the
14657 instantiation now; we just have to do it sometime. Normally it is
14658 an error if this is an explicit instantiation but D is undefined.
14659 EXPL_INST_CLASS_MEM_P is true iff D is a member of an
14660 explicitly instantiated class template. */
14662 tree
14663 instantiate_decl (tree d, int defer_ok,
14664 bool expl_inst_class_mem_p)
14666 tree tmpl = DECL_TI_TEMPLATE (d);
14667 tree gen_args;
14668 tree args;
14669 tree td;
14670 tree code_pattern;
14671 tree spec;
14672 tree gen_tmpl;
14673 bool pattern_defined;
14674 int need_push;
14675 location_t saved_loc = input_location;
14676 int saved_in_system_header = in_system_header;
14677 bool external_p;
14679 /* This function should only be used to instantiate templates for
14680 functions and static member variables. */
14681 gcc_assert (TREE_CODE (d) == FUNCTION_DECL
14682 || TREE_CODE (d) == VAR_DECL);
14684 /* Variables are never deferred; if instantiation is required, they
14685 are instantiated right away. That allows for better code in the
14686 case that an expression refers to the value of the variable --
14687 if the variable has a constant value the referring expression can
14688 take advantage of that fact. */
14689 if (TREE_CODE (d) == VAR_DECL)
14690 defer_ok = 0;
14692 /* Don't instantiate cloned functions. Instead, instantiate the
14693 functions they cloned. */
14694 if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
14695 d = DECL_CLONED_FUNCTION (d);
14697 if (DECL_TEMPLATE_INSTANTIATED (d))
14698 /* D has already been instantiated. It might seem reasonable to
14699 check whether or not D is an explicit instantiation, and, if so,
14700 stop here. But when an explicit instantiation is deferred
14701 until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
14702 is set, even though we still need to do the instantiation. */
14703 return d;
14705 /* If we already have a specialization of this declaration, then
14706 there's no reason to instantiate it. Note that
14707 retrieve_specialization gives us both instantiations and
14708 specializations, so we must explicitly check
14709 DECL_TEMPLATE_SPECIALIZATION. */
14710 gen_tmpl = most_general_template (tmpl);
14711 gen_args = DECL_TI_ARGS (d);
14712 spec = retrieve_specialization (gen_tmpl, gen_args,
14713 /*class_specializations_p=*/false);
14714 if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
14715 return spec;
14717 /* This needs to happen before any tsubsting. */
14718 if (! push_tinst_level (d))
14719 return d;
14721 timevar_push (TV_PARSE);
14723 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
14724 for the instantiation. */
14725 td = template_for_substitution (d);
14726 code_pattern = DECL_TEMPLATE_RESULT (td);
14728 /* We should never be trying to instantiate a member of a class
14729 template or partial specialization. */
14730 gcc_assert (d != code_pattern);
14732 if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
14733 || DECL_TEMPLATE_SPECIALIZATION (td))
14734 /* In the case of a friend template whose definition is provided
14735 outside the class, we may have too many arguments. Drop the
14736 ones we don't need. The same is true for specializations. */
14737 args = get_innermost_template_args
14738 (gen_args, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td)));
14739 else
14740 args = gen_args;
14742 if (TREE_CODE (d) == FUNCTION_DECL)
14743 pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
14744 else
14745 pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
14747 /* We may be in the middle of deferred access check. Disable it now. */
14748 push_deferring_access_checks (dk_no_deferred);
14750 /* Unless an explicit instantiation directive has already determined
14751 the linkage of D, remember that a definition is available for
14752 this entity. */
14753 if (pattern_defined
14754 && !DECL_INTERFACE_KNOWN (d)
14755 && !DECL_NOT_REALLY_EXTERN (d))
14756 mark_definable (d);
14758 input_location = DECL_SOURCE_LOCATION (d);
14759 in_system_header = DECL_IN_SYSTEM_HEADER (d);
14761 /* If D is a member of an explicitly instantiated class template,
14762 and no definition is available, treat it like an implicit
14763 instantiation. */
14764 if (!pattern_defined && expl_inst_class_mem_p
14765 && DECL_EXPLICIT_INSTANTIATION (d))
14767 DECL_NOT_REALLY_EXTERN (d) = 0;
14768 DECL_INTERFACE_KNOWN (d) = 0;
14769 SET_DECL_IMPLICIT_INSTANTIATION (d);
14772 if (!defer_ok)
14774 /* Recheck the substitutions to obtain any warning messages
14775 about ignoring cv qualifiers. */
14776 tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
14777 tree type = TREE_TYPE (gen);
14779 /* Make sure that we can see identifiers, and compute access
14780 correctly. D is already the target FUNCTION_DECL with the
14781 right context. */
14782 push_access_scope (d);
14784 if (TREE_CODE (gen) == FUNCTION_DECL)
14786 tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
14787 tsubst_exception_specification (type, gen_args, tf_warning_or_error,
14789 /* Don't simply tsubst the function type, as that will give
14790 duplicate warnings about poor parameter qualifications.
14791 The function arguments are the same as the decl_arguments
14792 without the top level cv qualifiers. */
14793 type = TREE_TYPE (type);
14795 tsubst (type, gen_args, tf_warning_or_error, d);
14797 pop_access_scope (d);
14800 /* Check to see whether we know that this template will be
14801 instantiated in some other file, as with "extern template"
14802 extension. */
14803 external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
14804 /* In general, we do not instantiate such templates... */
14805 if (external_p
14806 /* ... but we instantiate inline functions so that we can inline
14807 them and ... */
14808 && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d))
14809 /* ... we instantiate static data members whose values are
14810 needed in integral constant expressions. */
14811 && ! (TREE_CODE (d) == VAR_DECL
14812 && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (d)))
14813 goto out;
14814 /* Defer all other templates, unless we have been explicitly
14815 forbidden from doing so. */
14816 if (/* If there is no definition, we cannot instantiate the
14817 template. */
14818 ! pattern_defined
14819 /* If it's OK to postpone instantiation, do so. */
14820 || defer_ok
14821 /* If this is a static data member that will be defined
14822 elsewhere, we don't want to instantiate the entire data
14823 member, but we do want to instantiate the initializer so that
14824 we can substitute that elsewhere. */
14825 || (external_p && TREE_CODE (d) == VAR_DECL))
14827 /* The definition of the static data member is now required so
14828 we must substitute the initializer. */
14829 if (TREE_CODE (d) == VAR_DECL
14830 && !DECL_INITIAL (d)
14831 && DECL_INITIAL (code_pattern))
14833 tree ns;
14834 tree init;
14836 ns = decl_namespace_context (d);
14837 push_nested_namespace (ns);
14838 push_nested_class (DECL_CONTEXT (d));
14839 init = tsubst_expr (DECL_INITIAL (code_pattern),
14840 args,
14841 tf_warning_or_error, NULL_TREE,
14842 /*integral_constant_expression_p=*/false);
14843 cp_finish_decl (d, init, /*init_const_expr_p=*/false,
14844 /*asmspec_tree=*/NULL_TREE,
14845 LOOKUP_ONLYCONVERTING);
14846 pop_nested_class ();
14847 pop_nested_namespace (ns);
14850 /* We restore the source position here because it's used by
14851 add_pending_template. */
14852 input_location = saved_loc;
14854 if (at_eof && !pattern_defined
14855 && DECL_EXPLICIT_INSTANTIATION (d))
14856 /* [temp.explicit]
14858 The definition of a non-exported function template, a
14859 non-exported member function template, or a non-exported
14860 member function or static data member of a class template
14861 shall be present in every translation unit in which it is
14862 explicitly instantiated. */
14863 pedwarn
14864 ("explicit instantiation of %qD but no definition available", d);
14866 /* ??? Historically, we have instantiated inline functions, even
14867 when marked as "extern template". */
14868 if (!(external_p && TREE_CODE (d) == VAR_DECL))
14869 add_pending_template (d);
14870 goto out;
14872 /* Tell the repository that D is available in this translation unit
14873 -- and see if it is supposed to be instantiated here. */
14874 if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
14876 /* In a PCH file, despite the fact that the repository hasn't
14877 requested instantiation in the PCH it is still possible that
14878 an instantiation will be required in a file that includes the
14879 PCH. */
14880 if (pch_file)
14881 add_pending_template (d);
14882 /* Instantiate inline functions so that the inliner can do its
14883 job, even though we'll not be emitting a copy of this
14884 function. */
14885 if (!(TREE_CODE (d) == FUNCTION_DECL
14886 && flag_inline_trees
14887 && DECL_DECLARED_INLINE_P (d)))
14888 goto out;
14891 need_push = !cfun || !global_bindings_p ();
14892 if (need_push)
14893 push_to_top_level ();
14895 /* Mark D as instantiated so that recursive calls to
14896 instantiate_decl do not try to instantiate it again. */
14897 DECL_TEMPLATE_INSTANTIATED (d) = 1;
14899 /* Regenerate the declaration in case the template has been modified
14900 by a subsequent redeclaration. */
14901 regenerate_decl_from_template (d, td);
14903 /* We already set the file and line above. Reset them now in case
14904 they changed as a result of calling regenerate_decl_from_template. */
14905 input_location = DECL_SOURCE_LOCATION (d);
14907 if (TREE_CODE (d) == VAR_DECL)
14909 tree init;
14911 /* Clear out DECL_RTL; whatever was there before may not be right
14912 since we've reset the type of the declaration. */
14913 SET_DECL_RTL (d, NULL_RTX);
14914 DECL_IN_AGGR_P (d) = 0;
14916 /* The initializer is placed in DECL_INITIAL by
14917 regenerate_decl_from_template. Pull it out so that
14918 finish_decl can process it. */
14919 init = DECL_INITIAL (d);
14920 DECL_INITIAL (d) = NULL_TREE;
14921 DECL_INITIALIZED_P (d) = 0;
14923 /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
14924 initializer. That function will defer actual emission until
14925 we have a chance to determine linkage. */
14926 DECL_EXTERNAL (d) = 0;
14928 /* Enter the scope of D so that access-checking works correctly. */
14929 push_nested_class (DECL_CONTEXT (d));
14930 finish_decl (d, init, NULL_TREE);
14931 pop_nested_class ();
14933 else if (TREE_CODE (d) == FUNCTION_DECL)
14935 htab_t saved_local_specializations;
14936 tree subst_decl;
14937 tree tmpl_parm;
14938 tree spec_parm;
14940 /* Save away the current list, in case we are instantiating one
14941 template from within the body of another. */
14942 saved_local_specializations = local_specializations;
14944 /* Set up the list of local specializations. */
14945 local_specializations = htab_create (37,
14946 hash_local_specialization,
14947 eq_local_specializations,
14948 NULL);
14950 /* Set up context. */
14951 start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
14953 /* Create substitution entries for the parameters. */
14954 subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
14955 tmpl_parm = DECL_ARGUMENTS (subst_decl);
14956 spec_parm = DECL_ARGUMENTS (d);
14957 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
14959 register_local_specialization (spec_parm, tmpl_parm);
14960 spec_parm = skip_artificial_parms_for (d, spec_parm);
14961 tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
14963 while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
14965 register_local_specialization (spec_parm, tmpl_parm);
14966 tmpl_parm = TREE_CHAIN (tmpl_parm);
14967 spec_parm = TREE_CHAIN (spec_parm);
14969 if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
14971 /* Collect all of the extra "packed" parameters into an
14972 argument pack. */
14973 tree parmvec;
14974 tree parmtypevec;
14975 tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
14976 tree argtypepack = make_node (TYPE_ARGUMENT_PACK);
14977 int i, len = 0;
14978 tree t;
14980 /* Count how many parameters remain. */
14981 for (t = spec_parm; t; t = TREE_CHAIN (t))
14982 len++;
14984 /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters. */
14985 parmvec = make_tree_vec (len);
14986 parmtypevec = make_tree_vec (len);
14987 for(i = 0; i < len; i++, spec_parm = TREE_CHAIN (spec_parm))
14989 TREE_VEC_ELT (parmvec, i) = spec_parm;
14990 TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
14993 /* Build the argument packs. */
14994 SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
14995 SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
14996 TREE_TYPE (argpack) = argtypepack;
14998 /* Register the (value) argument pack as a specialization of
14999 TMPL_PARM, then move on. */
15000 register_local_specialization (argpack, tmpl_parm);
15001 tmpl_parm = TREE_CHAIN (tmpl_parm);
15003 gcc_assert (!spec_parm);
15005 /* Substitute into the body of the function. */
15006 tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
15007 tf_warning_or_error, tmpl,
15008 /*integral_constant_expression_p=*/false);
15010 /* Set the current input_location to the end of the function
15011 so that finish_function knows where we are. */
15012 input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
15014 /* We don't need the local specializations any more. */
15015 htab_delete (local_specializations);
15016 local_specializations = saved_local_specializations;
15018 /* Finish the function. */
15019 d = finish_function (0);
15020 expand_or_defer_fn (d);
15023 /* We're not deferring instantiation any more. */
15024 TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
15026 if (need_push)
15027 pop_from_top_level ();
15029 out:
15030 input_location = saved_loc;
15031 in_system_header = saved_in_system_header;
15032 pop_deferring_access_checks ();
15033 pop_tinst_level ();
15035 timevar_pop (TV_PARSE);
15037 return d;
15040 /* Run through the list of templates that we wish we could
15041 instantiate, and instantiate any we can. RETRIES is the
15042 number of times we retry pending template instantiation. */
15044 void
15045 instantiate_pending_templates (int retries)
15047 int reconsider;
15048 location_t saved_loc = input_location;
15049 int saved_in_system_header = in_system_header;
15051 /* Instantiating templates may trigger vtable generation. This in turn
15052 may require further template instantiations. We place a limit here
15053 to avoid infinite loop. */
15054 if (pending_templates && retries >= max_tinst_depth)
15056 tree decl = pending_templates->tinst->decl;
15058 error ("template instantiation depth exceeds maximum of %d"
15059 " instantiating %q+D, possibly from virtual table generation"
15060 " (use -ftemplate-depth-NN to increase the maximum)",
15061 max_tinst_depth, decl);
15062 if (TREE_CODE (decl) == FUNCTION_DECL)
15063 /* Pretend that we defined it. */
15064 DECL_INITIAL (decl) = error_mark_node;
15065 return;
15070 struct pending_template **t = &pending_templates;
15071 struct pending_template *last = NULL;
15072 reconsider = 0;
15073 while (*t)
15075 tree instantiation = reopen_tinst_level ((*t)->tinst);
15076 bool complete = false;
15078 if (TYPE_P (instantiation))
15080 tree fn;
15082 if (!COMPLETE_TYPE_P (instantiation))
15084 instantiate_class_template (instantiation);
15085 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
15086 for (fn = TYPE_METHODS (instantiation);
15088 fn = TREE_CHAIN (fn))
15089 if (! DECL_ARTIFICIAL (fn))
15090 instantiate_decl (fn,
15091 /*defer_ok=*/0,
15092 /*expl_inst_class_mem_p=*/false);
15093 if (COMPLETE_TYPE_P (instantiation))
15094 reconsider = 1;
15097 complete = COMPLETE_TYPE_P (instantiation);
15099 else
15101 if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
15102 && !DECL_TEMPLATE_INSTANTIATED (instantiation))
15104 instantiation
15105 = instantiate_decl (instantiation,
15106 /*defer_ok=*/0,
15107 /*expl_inst_class_mem_p=*/false);
15108 if (DECL_TEMPLATE_INSTANTIATED (instantiation))
15109 reconsider = 1;
15112 complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
15113 || DECL_TEMPLATE_INSTANTIATED (instantiation));
15116 if (complete)
15117 /* If INSTANTIATION has been instantiated, then we don't
15118 need to consider it again in the future. */
15119 *t = (*t)->next;
15120 else
15122 last = *t;
15123 t = &(*t)->next;
15125 tinst_depth = 0;
15126 current_tinst_level = NULL;
15128 last_pending_template = last;
15130 while (reconsider);
15132 input_location = saved_loc;
15133 in_system_header = saved_in_system_header;
15136 /* Substitute ARGVEC into T, which is a list of initializers for
15137 either base class or a non-static data member. The TREE_PURPOSEs
15138 are DECLs, and the TREE_VALUEs are the initializer values. Used by
15139 instantiate_decl. */
15141 static tree
15142 tsubst_initializer_list (tree t, tree argvec)
15144 tree inits = NULL_TREE;
15146 for (; t; t = TREE_CHAIN (t))
15148 tree decl;
15149 tree init;
15150 tree expanded_bases = NULL_TREE;
15151 tree expanded_arguments = NULL_TREE;
15152 int i, len = 1;
15154 if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
15156 tree expr;
15157 tree arg;
15159 /* Expand the base class expansion type into separate base
15160 classes. */
15161 expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
15162 tf_warning_or_error,
15163 NULL_TREE);
15164 if (expanded_bases == error_mark_node)
15165 continue;
15167 /* We'll be building separate TREE_LISTs of arguments for
15168 each base. */
15169 len = TREE_VEC_LENGTH (expanded_bases);
15170 expanded_arguments = make_tree_vec (len);
15171 for (i = 0; i < len; i++)
15172 TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
15174 /* Build a dummy EXPR_PACK_EXPANSION that will be used to
15175 expand each argument in the TREE_VALUE of t. */
15176 expr = make_node (EXPR_PACK_EXPANSION);
15177 PACK_EXPANSION_PARAMETER_PACKS (expr) =
15178 PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
15180 /* Substitute parameter packs into each argument in the
15181 TREE_LIST. */
15182 in_base_initializer = 1;
15183 for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
15185 tree expanded_exprs;
15187 /* Expand the argument. */
15188 SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
15189 expanded_exprs = tsubst_pack_expansion (expr, argvec,
15190 tf_warning_or_error,
15191 NULL_TREE);
15193 /* Prepend each of the expanded expressions to the
15194 corresponding TREE_LIST in EXPANDED_ARGUMENTS. */
15195 for (i = 0; i < len; i++)
15197 TREE_VEC_ELT (expanded_arguments, i) =
15198 tree_cons (NULL_TREE, TREE_VEC_ELT (expanded_exprs, i),
15199 TREE_VEC_ELT (expanded_arguments, i));
15202 in_base_initializer = 0;
15204 /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
15205 since we built them backwards. */
15206 for (i = 0; i < len; i++)
15208 TREE_VEC_ELT (expanded_arguments, i) =
15209 nreverse (TREE_VEC_ELT (expanded_arguments, i));
15213 for (i = 0; i < len; ++i)
15215 if (expanded_bases)
15217 decl = TREE_VEC_ELT (expanded_bases, i);
15218 decl = expand_member_init (decl);
15219 init = TREE_VEC_ELT (expanded_arguments, i);
15221 else
15223 decl = tsubst_copy (TREE_PURPOSE (t), argvec,
15224 tf_warning_or_error, NULL_TREE);
15226 decl = expand_member_init (decl);
15227 if (decl && !DECL_P (decl))
15228 in_base_initializer = 1;
15230 init = tsubst_expr (TREE_VALUE (t), argvec,
15231 tf_warning_or_error, NULL_TREE,
15232 /*integral_constant_expression_p=*/false);
15233 in_base_initializer = 0;
15236 if (decl)
15238 init = build_tree_list (decl, init);
15239 TREE_CHAIN (init) = inits;
15240 inits = init;
15244 return inits;
15247 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
15249 static void
15250 set_current_access_from_decl (tree decl)
15252 if (TREE_PRIVATE (decl))
15253 current_access_specifier = access_private_node;
15254 else if (TREE_PROTECTED (decl))
15255 current_access_specifier = access_protected_node;
15256 else
15257 current_access_specifier = access_public_node;
15260 /* Instantiate an enumerated type. TAG is the template type, NEWTAG
15261 is the instantiation (which should have been created with
15262 start_enum) and ARGS are the template arguments to use. */
15264 static void
15265 tsubst_enum (tree tag, tree newtag, tree args)
15267 tree e;
15269 for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
15271 tree value;
15272 tree decl;
15274 decl = TREE_VALUE (e);
15275 /* Note that in a template enum, the TREE_VALUE is the
15276 CONST_DECL, not the corresponding INTEGER_CST. */
15277 value = tsubst_expr (DECL_INITIAL (decl),
15278 args, tf_warning_or_error, NULL_TREE,
15279 /*integral_constant_expression_p=*/true);
15281 /* Give this enumeration constant the correct access. */
15282 set_current_access_from_decl (decl);
15284 /* Actually build the enumerator itself. */
15285 build_enumerator (DECL_NAME (decl), value, newtag);
15288 finish_enum (newtag);
15289 DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
15290 = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
15293 /* DECL is a FUNCTION_DECL that is a template specialization. Return
15294 its type -- but without substituting the innermost set of template
15295 arguments. So, innermost set of template parameters will appear in
15296 the type. */
15298 tree
15299 get_mostly_instantiated_function_type (tree decl)
15301 tree fn_type;
15302 tree tmpl;
15303 tree targs;
15304 tree tparms;
15305 int parm_depth;
15307 tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
15308 targs = DECL_TI_ARGS (decl);
15309 tparms = DECL_TEMPLATE_PARMS (tmpl);
15310 parm_depth = TMPL_PARMS_DEPTH (tparms);
15312 /* There should be as many levels of arguments as there are levels
15313 of parameters. */
15314 gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
15316 fn_type = TREE_TYPE (tmpl);
15318 if (parm_depth == 1)
15319 /* No substitution is necessary. */
15321 else
15323 int i, save_access_control;
15324 tree partial_args;
15326 /* Replace the innermost level of the TARGS with NULL_TREEs to
15327 let tsubst know not to substitute for those parameters. */
15328 partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
15329 for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
15330 SET_TMPL_ARGS_LEVEL (partial_args, i,
15331 TMPL_ARGS_LEVEL (targs, i));
15332 SET_TMPL_ARGS_LEVEL (partial_args,
15333 TMPL_ARGS_DEPTH (targs),
15334 make_tree_vec (DECL_NTPARMS (tmpl)));
15336 /* Disable access control as this function is used only during
15337 name-mangling. */
15338 save_access_control = flag_access_control;
15339 flag_access_control = 0;
15341 ++processing_template_decl;
15342 /* Now, do the (partial) substitution to figure out the
15343 appropriate function type. */
15344 fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
15345 --processing_template_decl;
15347 /* Substitute into the template parameters to obtain the real
15348 innermost set of parameters. This step is important if the
15349 innermost set of template parameters contains value
15350 parameters whose types depend on outer template parameters. */
15351 TREE_VEC_LENGTH (partial_args)--;
15352 tparms = tsubst_template_parms (tparms, partial_args, tf_error);
15354 flag_access_control = save_access_control;
15357 return fn_type;
15360 /* Return truthvalue if we're processing a template different from
15361 the last one involved in diagnostics. */
15363 problematic_instantiation_changed (void)
15365 return last_template_error_tick != tinst_level_tick;
15368 /* Remember current template involved in diagnostics. */
15369 void
15370 record_last_problematic_instantiation (void)
15372 last_template_error_tick = tinst_level_tick;
15375 struct tinst_level *
15376 current_instantiation (void)
15378 return current_tinst_level;
15381 /* [temp.param] Check that template non-type parm TYPE is of an allowable
15382 type. Return zero for ok, nonzero for disallowed. Issue error and
15383 warning messages under control of COMPLAIN. */
15385 static int
15386 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
15388 if (INTEGRAL_TYPE_P (type))
15389 return 0;
15390 else if (POINTER_TYPE_P (type))
15391 return 0;
15392 else if (TYPE_PTR_TO_MEMBER_P (type))
15393 return 0;
15394 else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
15395 return 0;
15396 else if (TREE_CODE (type) == TYPENAME_TYPE)
15397 return 0;
15399 if (complain & tf_error)
15400 error ("%q#T is not a valid type for a template constant parameter", type);
15401 return 1;
15404 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
15405 Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
15407 static bool
15408 dependent_type_p_r (tree type)
15410 tree scope;
15412 /* [temp.dep.type]
15414 A type is dependent if it is:
15416 -- a template parameter. Template template parameters are types
15417 for us (since TYPE_P holds true for them) so we handle
15418 them here. */
15419 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
15420 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
15421 return true;
15422 /* -- a qualified-id with a nested-name-specifier which contains a
15423 class-name that names a dependent type or whose unqualified-id
15424 names a dependent type. */
15425 if (TREE_CODE (type) == TYPENAME_TYPE)
15426 return true;
15427 /* -- a cv-qualified type where the cv-unqualified type is
15428 dependent. */
15429 type = TYPE_MAIN_VARIANT (type);
15430 /* -- a compound type constructed from any dependent type. */
15431 if (TYPE_PTR_TO_MEMBER_P (type))
15432 return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
15433 || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
15434 (type)));
15435 else if (TREE_CODE (type) == POINTER_TYPE
15436 || TREE_CODE (type) == REFERENCE_TYPE)
15437 return dependent_type_p (TREE_TYPE (type));
15438 else if (TREE_CODE (type) == FUNCTION_TYPE
15439 || TREE_CODE (type) == METHOD_TYPE)
15441 tree arg_type;
15443 if (dependent_type_p (TREE_TYPE (type)))
15444 return true;
15445 for (arg_type = TYPE_ARG_TYPES (type);
15446 arg_type;
15447 arg_type = TREE_CHAIN (arg_type))
15448 if (dependent_type_p (TREE_VALUE (arg_type)))
15449 return true;
15450 return false;
15452 /* -- an array type constructed from any dependent type or whose
15453 size is specified by a constant expression that is
15454 value-dependent. */
15455 if (TREE_CODE (type) == ARRAY_TYPE)
15457 if (TYPE_DOMAIN (type)
15458 && dependent_type_p (TYPE_DOMAIN (type)))
15459 return true;
15460 return dependent_type_p (TREE_TYPE (type));
15462 else if (TREE_CODE (type) == INTEGER_TYPE
15463 && !TREE_CONSTANT (TYPE_MAX_VALUE (type)))
15465 /* If this is the TYPE_DOMAIN of an array type, consider it
15466 dependent. */
15467 return (value_dependent_expression_p (TYPE_MAX_VALUE (type))
15468 || type_dependent_expression_p (TYPE_MAX_VALUE (type)));
15471 /* -- a template-id in which either the template name is a template
15472 parameter ... */
15473 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
15474 return true;
15475 /* ... or any of the template arguments is a dependent type or
15476 an expression that is type-dependent or value-dependent. */
15477 else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
15478 && (any_dependent_template_arguments_p
15479 (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
15480 return true;
15482 /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
15483 argument of the `typeof' expression is not type-dependent, then
15484 it should already been have resolved. */
15485 if (TREE_CODE (type) == TYPEOF_TYPE
15486 || TREE_CODE (type) == DECLTYPE_TYPE)
15487 return true;
15489 /* A template argument pack is dependent if any of its packed
15490 arguments are. */
15491 if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
15493 tree args = ARGUMENT_PACK_ARGS (type);
15494 int i, len = TREE_VEC_LENGTH (args);
15495 for (i = 0; i < len; ++i)
15496 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15497 return true;
15500 /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
15501 be template parameters. */
15502 if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
15503 return true;
15505 /* The standard does not specifically mention types that are local
15506 to template functions or local classes, but they should be
15507 considered dependent too. For example:
15509 template <int I> void f() {
15510 enum E { a = I };
15511 S<sizeof (E)> s;
15514 The size of `E' cannot be known until the value of `I' has been
15515 determined. Therefore, `E' must be considered dependent. */
15516 scope = TYPE_CONTEXT (type);
15517 if (scope && TYPE_P (scope))
15518 return dependent_type_p (scope);
15519 else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
15520 return type_dependent_expression_p (scope);
15522 /* Other types are non-dependent. */
15523 return false;
15526 /* Returns TRUE if TYPE is dependent, in the sense of
15527 [temp.dep.type]. */
15529 bool
15530 dependent_type_p (tree type)
15532 /* If there are no template parameters in scope, then there can't be
15533 any dependent types. */
15534 if (!processing_template_decl)
15536 /* If we are not processing a template, then nobody should be
15537 providing us with a dependent type. */
15538 gcc_assert (type);
15539 gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM);
15540 return false;
15543 /* If the type is NULL, we have not computed a type for the entity
15544 in question; in that case, the type is dependent. */
15545 if (!type)
15546 return true;
15548 /* Erroneous types can be considered non-dependent. */
15549 if (type == error_mark_node)
15550 return false;
15552 /* If we have not already computed the appropriate value for TYPE,
15553 do so now. */
15554 if (!TYPE_DEPENDENT_P_VALID (type))
15556 TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
15557 TYPE_DEPENDENT_P_VALID (type) = 1;
15560 return TYPE_DEPENDENT_P (type);
15563 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION. */
15565 static bool
15566 dependent_scope_ref_p (tree expression, bool criterion (tree))
15568 tree scope;
15569 tree name;
15571 gcc_assert (TREE_CODE (expression) == SCOPE_REF);
15573 if (!TYPE_P (TREE_OPERAND (expression, 0)))
15574 return true;
15576 scope = TREE_OPERAND (expression, 0);
15577 name = TREE_OPERAND (expression, 1);
15579 /* [temp.dep.expr]
15581 An id-expression is type-dependent if it contains a
15582 nested-name-specifier that contains a class-name that names a
15583 dependent type. */
15584 /* The suggested resolution to Core Issue 2 implies that if the
15585 qualifying type is the current class, then we must peek
15586 inside it. */
15587 if (DECL_P (name)
15588 && currently_open_class (scope)
15589 && !criterion (name))
15590 return false;
15591 if (dependent_type_p (scope))
15592 return true;
15594 return false;
15597 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
15598 [temp.dep.constexpr]. EXPRESSION is already known to be a constant
15599 expression. */
15601 bool
15602 value_dependent_expression_p (tree expression)
15604 if (!processing_template_decl)
15605 return false;
15607 /* A name declared with a dependent type. */
15608 if (DECL_P (expression) && type_dependent_expression_p (expression))
15609 return true;
15611 switch (TREE_CODE (expression))
15613 case IDENTIFIER_NODE:
15614 /* A name that has not been looked up -- must be dependent. */
15615 return true;
15617 case TEMPLATE_PARM_INDEX:
15618 /* A non-type template parm. */
15619 return true;
15621 case CONST_DECL:
15622 /* A non-type template parm. */
15623 if (DECL_TEMPLATE_PARM_P (expression))
15624 return true;
15625 return false;
15627 case VAR_DECL:
15628 /* A constant with integral or enumeration type and is initialized
15629 with an expression that is value-dependent. */
15630 if (DECL_INITIAL (expression)
15631 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
15632 && value_dependent_expression_p (DECL_INITIAL (expression)))
15633 return true;
15634 return false;
15636 case DYNAMIC_CAST_EXPR:
15637 case STATIC_CAST_EXPR:
15638 case CONST_CAST_EXPR:
15639 case REINTERPRET_CAST_EXPR:
15640 case CAST_EXPR:
15641 /* These expressions are value-dependent if the type to which
15642 the cast occurs is dependent or the expression being casted
15643 is value-dependent. */
15645 tree type = TREE_TYPE (expression);
15647 if (dependent_type_p (type))
15648 return true;
15650 /* A functional cast has a list of operands. */
15651 expression = TREE_OPERAND (expression, 0);
15652 if (!expression)
15654 /* If there are no operands, it must be an expression such
15655 as "int()". This should not happen for aggregate types
15656 because it would form non-constant expressions. */
15657 gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
15659 return false;
15662 if (TREE_CODE (expression) == TREE_LIST)
15663 return any_value_dependent_elements_p (expression);
15665 return value_dependent_expression_p (expression);
15668 case SIZEOF_EXPR:
15669 case ALIGNOF_EXPR:
15670 /* A `sizeof' expression is value-dependent if the operand is
15671 type-dependent or is a pack expansion. */
15672 expression = TREE_OPERAND (expression, 0);
15673 if (PACK_EXPANSION_P (expression))
15674 return true;
15675 else if (TYPE_P (expression))
15676 return dependent_type_p (expression);
15677 return type_dependent_expression_p (expression);
15679 case SCOPE_REF:
15680 return dependent_scope_ref_p (expression, value_dependent_expression_p);
15682 case COMPONENT_REF:
15683 return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
15684 || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
15686 case CALL_EXPR:
15687 /* A CALL_EXPR may appear in a constant expression if it is a
15688 call to a builtin function, e.g., __builtin_constant_p. All
15689 such calls are value-dependent. */
15690 return true;
15692 case NONTYPE_ARGUMENT_PACK:
15693 /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
15694 is value-dependent. */
15696 tree values = ARGUMENT_PACK_ARGS (expression);
15697 int i, len = TREE_VEC_LENGTH (values);
15699 for (i = 0; i < len; ++i)
15700 if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
15701 return true;
15703 return false;
15706 case TRAIT_EXPR:
15708 tree type2 = TRAIT_EXPR_TYPE2 (expression);
15709 return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
15710 || (type2 ? dependent_type_p (type2) : false));
15713 case MODOP_EXPR:
15714 return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
15715 || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
15717 default:
15718 /* A constant expression is value-dependent if any subexpression is
15719 value-dependent. */
15720 switch (TREE_CODE_CLASS (TREE_CODE (expression)))
15722 case tcc_reference:
15723 case tcc_unary:
15724 return (value_dependent_expression_p
15725 (TREE_OPERAND (expression, 0)));
15727 case tcc_comparison:
15728 case tcc_binary:
15729 return ((value_dependent_expression_p
15730 (TREE_OPERAND (expression, 0)))
15731 || (value_dependent_expression_p
15732 (TREE_OPERAND (expression, 1))));
15734 case tcc_expression:
15735 case tcc_vl_exp:
15737 int i;
15738 for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
15739 /* In some cases, some of the operands may be missing.
15740 (For example, in the case of PREDECREMENT_EXPR, the
15741 amount to increment by may be missing.) That doesn't
15742 make the expression dependent. */
15743 if (TREE_OPERAND (expression, i)
15744 && (value_dependent_expression_p
15745 (TREE_OPERAND (expression, i))))
15746 return true;
15747 return false;
15750 default:
15751 break;
15755 /* The expression is not value-dependent. */
15756 return false;
15759 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
15760 [temp.dep.expr]. */
15762 bool
15763 type_dependent_expression_p (tree expression)
15765 if (!processing_template_decl)
15766 return false;
15768 if (expression == error_mark_node)
15769 return false;
15771 /* An unresolved name is always dependent. */
15772 if (TREE_CODE (expression) == IDENTIFIER_NODE
15773 || TREE_CODE (expression) == USING_DECL)
15774 return true;
15776 /* Some expression forms are never type-dependent. */
15777 if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
15778 || TREE_CODE (expression) == SIZEOF_EXPR
15779 || TREE_CODE (expression) == ALIGNOF_EXPR
15780 || TREE_CODE (expression) == TRAIT_EXPR
15781 || TREE_CODE (expression) == TYPEID_EXPR
15782 || TREE_CODE (expression) == DELETE_EXPR
15783 || TREE_CODE (expression) == VEC_DELETE_EXPR
15784 || TREE_CODE (expression) == THROW_EXPR)
15785 return false;
15787 /* The types of these expressions depends only on the type to which
15788 the cast occurs. */
15789 if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
15790 || TREE_CODE (expression) == STATIC_CAST_EXPR
15791 || TREE_CODE (expression) == CONST_CAST_EXPR
15792 || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
15793 || TREE_CODE (expression) == CAST_EXPR)
15794 return dependent_type_p (TREE_TYPE (expression));
15796 /* The types of these expressions depends only on the type created
15797 by the expression. */
15798 if (TREE_CODE (expression) == NEW_EXPR
15799 || TREE_CODE (expression) == VEC_NEW_EXPR)
15801 /* For NEW_EXPR tree nodes created inside a template, either
15802 the object type itself or a TREE_LIST may appear as the
15803 operand 1. */
15804 tree type = TREE_OPERAND (expression, 1);
15805 if (TREE_CODE (type) == TREE_LIST)
15806 /* This is an array type. We need to check array dimensions
15807 as well. */
15808 return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
15809 || value_dependent_expression_p
15810 (TREE_OPERAND (TREE_VALUE (type), 1));
15811 else
15812 return dependent_type_p (type);
15815 if (TREE_CODE (expression) == SCOPE_REF
15816 && dependent_scope_ref_p (expression,
15817 type_dependent_expression_p))
15818 return true;
15820 if (TREE_CODE (expression) == FUNCTION_DECL
15821 && DECL_LANG_SPECIFIC (expression)
15822 && DECL_TEMPLATE_INFO (expression)
15823 && (any_dependent_template_arguments_p
15824 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
15825 return true;
15827 if (TREE_CODE (expression) == TEMPLATE_DECL
15828 && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
15829 return false;
15831 if (TREE_CODE (expression) == STMT_EXPR)
15832 expression = stmt_expr_value_expr (expression);
15834 if (TREE_TYPE (expression) == unknown_type_node)
15836 if (TREE_CODE (expression) == ADDR_EXPR)
15837 return type_dependent_expression_p (TREE_OPERAND (expression, 0));
15838 if (TREE_CODE (expression) == COMPONENT_REF
15839 || TREE_CODE (expression) == OFFSET_REF)
15841 if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
15842 return true;
15843 expression = TREE_OPERAND (expression, 1);
15844 if (TREE_CODE (expression) == IDENTIFIER_NODE)
15845 return false;
15847 /* SCOPE_REF with non-null TREE_TYPE is always non-dependent. */
15848 if (TREE_CODE (expression) == SCOPE_REF)
15849 return false;
15851 if (TREE_CODE (expression) == BASELINK)
15852 expression = BASELINK_FUNCTIONS (expression);
15854 if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
15856 if (any_dependent_template_arguments_p
15857 (TREE_OPERAND (expression, 1)))
15858 return true;
15859 expression = TREE_OPERAND (expression, 0);
15861 gcc_assert (TREE_CODE (expression) == OVERLOAD
15862 || TREE_CODE (expression) == FUNCTION_DECL);
15864 while (expression)
15866 if (type_dependent_expression_p (OVL_CURRENT (expression)))
15867 return true;
15868 expression = OVL_NEXT (expression);
15870 return false;
15873 gcc_assert (TREE_CODE (expression) != TYPE_DECL);
15875 return (dependent_type_p (TREE_TYPE (expression)));
15878 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
15879 contains a type-dependent expression. */
15881 bool
15882 any_type_dependent_arguments_p (const_tree args)
15884 while (args)
15886 tree arg = TREE_VALUE (args);
15888 if (type_dependent_expression_p (arg))
15889 return true;
15890 args = TREE_CHAIN (args);
15892 return false;
15895 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
15896 expressions) contains any value-dependent expressions. */
15898 bool
15899 any_value_dependent_elements_p (const_tree list)
15901 for (; list; list = TREE_CHAIN (list))
15902 if (value_dependent_expression_p (TREE_VALUE (list)))
15903 return true;
15905 return false;
15908 /* Returns TRUE if the ARG (a template argument) is dependent. */
15910 bool
15911 dependent_template_arg_p (tree arg)
15913 if (!processing_template_decl)
15914 return false;
15916 if (TREE_CODE (arg) == TEMPLATE_DECL
15917 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15918 return dependent_template_p (arg);
15919 else if (ARGUMENT_PACK_P (arg))
15921 tree args = ARGUMENT_PACK_ARGS (arg);
15922 int i, len = TREE_VEC_LENGTH (args);
15923 for (i = 0; i < len; ++i)
15925 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15926 return true;
15929 return false;
15931 else if (TYPE_P (arg))
15932 return dependent_type_p (arg);
15933 else
15934 return (type_dependent_expression_p (arg)
15935 || value_dependent_expression_p (arg));
15938 /* Returns true if ARGS (a collection of template arguments) contains
15939 any types that require structural equality testing. */
15941 bool
15942 any_template_arguments_need_structural_equality_p (tree args)
15944 int i;
15945 int j;
15947 if (!args)
15948 return false;
15949 if (args == error_mark_node)
15950 return true;
15952 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
15954 tree level = TMPL_ARGS_LEVEL (args, i + 1);
15955 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
15957 tree arg = TREE_VEC_ELT (level, j);
15958 tree packed_args = NULL_TREE;
15959 int k, len = 1;
15961 if (ARGUMENT_PACK_P (arg))
15963 /* Look inside the argument pack. */
15964 packed_args = ARGUMENT_PACK_ARGS (arg);
15965 len = TREE_VEC_LENGTH (packed_args);
15968 for (k = 0; k < len; ++k)
15970 if (packed_args)
15971 arg = TREE_VEC_ELT (packed_args, k);
15973 if (error_operand_p (arg))
15974 return true;
15975 else if (TREE_CODE (arg) == TEMPLATE_DECL
15976 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15977 continue;
15978 else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
15979 return true;
15980 else if (!TYPE_P (arg) && TREE_TYPE (arg)
15981 && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
15982 return true;
15987 return false;
15990 /* Returns true if ARGS (a collection of template arguments) contains
15991 any dependent arguments. */
15993 bool
15994 any_dependent_template_arguments_p (const_tree args)
15996 int i;
15997 int j;
15999 if (!args)
16000 return false;
16001 if (args == error_mark_node)
16002 return true;
16004 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
16006 const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
16007 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
16008 if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
16009 return true;
16012 return false;
16015 /* Returns TRUE if the template TMPL is dependent. */
16017 bool
16018 dependent_template_p (tree tmpl)
16020 if (TREE_CODE (tmpl) == OVERLOAD)
16022 while (tmpl)
16024 if (dependent_template_p (OVL_FUNCTION (tmpl)))
16025 return true;
16026 tmpl = OVL_CHAIN (tmpl);
16028 return false;
16031 /* Template template parameters are dependent. */
16032 if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
16033 || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
16034 return true;
16035 /* So are names that have not been looked up. */
16036 if (TREE_CODE (tmpl) == SCOPE_REF
16037 || TREE_CODE (tmpl) == IDENTIFIER_NODE)
16038 return true;
16039 /* So are member templates of dependent classes. */
16040 if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
16041 return dependent_type_p (DECL_CONTEXT (tmpl));
16042 return false;
16045 /* Returns TRUE if the specialization TMPL<ARGS> is dependent. */
16047 bool
16048 dependent_template_id_p (tree tmpl, tree args)
16050 return (dependent_template_p (tmpl)
16051 || any_dependent_template_arguments_p (args));
16054 /* TYPE is a TYPENAME_TYPE. Returns the ordinary TYPE to which the
16055 TYPENAME_TYPE corresponds. Returns the original TYPENAME_TYPE if
16056 no such TYPE can be found. Note that this function peers inside
16057 uninstantiated templates and therefore should be used only in
16058 extremely limited situations. ONLY_CURRENT_P restricts this
16059 peering to the currently open classes hierarchy (which is required
16060 when comparing types). */
16062 tree
16063 resolve_typename_type (tree type, bool only_current_p)
16065 tree scope;
16066 tree name;
16067 tree decl;
16068 int quals;
16069 tree pushed_scope;
16070 tree result;
16072 gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
16074 scope = TYPE_CONTEXT (type);
16075 name = TYPE_IDENTIFIER (type);
16077 /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
16078 it first before we can figure out what NAME refers to. */
16079 if (TREE_CODE (scope) == TYPENAME_TYPE)
16080 scope = resolve_typename_type (scope, only_current_p);
16081 /* If we don't know what SCOPE refers to, then we cannot resolve the
16082 TYPENAME_TYPE. */
16083 if (TREE_CODE (scope) == TYPENAME_TYPE)
16084 return type;
16085 /* If the SCOPE is a template type parameter, we have no way of
16086 resolving the name. */
16087 if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
16088 return type;
16089 /* If the SCOPE is not the current instantiation, there's no reason
16090 to look inside it. */
16091 if (only_current_p && !currently_open_class (scope))
16092 return type;
16093 /* If SCOPE isn't the template itself, it will not have a valid
16094 TYPE_FIELDS list. */
16095 if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
16096 /* scope is either the template itself or a compatible instantiation
16097 like X<T>, so look up the name in the original template. */
16098 scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
16099 else
16100 /* scope is a partial instantiation, so we can't do the lookup or we
16101 will lose the template arguments. */
16102 return type;
16103 /* Enter the SCOPE so that name lookup will be resolved as if we
16104 were in the class definition. In particular, SCOPE will no
16105 longer be considered a dependent type. */
16106 pushed_scope = push_scope (scope);
16107 /* Look up the declaration. */
16108 decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
16110 result = NULL_TREE;
16112 /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
16113 find a TEMPLATE_DECL. Otherwise, we want to find a TYPE_DECL. */
16114 if (!decl)
16115 /*nop*/;
16116 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
16117 && TREE_CODE (decl) == TYPE_DECL)
16119 result = TREE_TYPE (decl);
16120 if (result == error_mark_node)
16121 result = NULL_TREE;
16123 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
16124 && DECL_CLASS_TEMPLATE_P (decl))
16126 tree tmpl;
16127 tree args;
16128 /* Obtain the template and the arguments. */
16129 tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
16130 args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
16131 /* Instantiate the template. */
16132 result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
16133 /*entering_scope=*/0,
16134 tf_error | tf_user);
16135 if (result == error_mark_node)
16136 result = NULL_TREE;
16139 /* Leave the SCOPE. */
16140 if (pushed_scope)
16141 pop_scope (pushed_scope);
16143 /* If we failed to resolve it, return the original typename. */
16144 if (!result)
16145 return type;
16147 /* If lookup found a typename type, resolve that too. */
16148 if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
16150 /* Ill-formed programs can cause infinite recursion here, so we
16151 must catch that. */
16152 TYPENAME_IS_RESOLVING_P (type) = 1;
16153 result = resolve_typename_type (result, only_current_p);
16154 TYPENAME_IS_RESOLVING_P (type) = 0;
16157 /* Qualify the resulting type. */
16158 quals = cp_type_quals (type);
16159 if (quals)
16160 result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
16162 return result;
16165 /* EXPR is an expression which is not type-dependent. Return a proxy
16166 for EXPR that can be used to compute the types of larger
16167 expressions containing EXPR. */
16169 tree
16170 build_non_dependent_expr (tree expr)
16172 tree inner_expr;
16174 /* Preserve null pointer constants so that the type of things like
16175 "p == 0" where "p" is a pointer can be determined. */
16176 if (null_ptr_cst_p (expr))
16177 return expr;
16178 /* Preserve OVERLOADs; the functions must be available to resolve
16179 types. */
16180 inner_expr = expr;
16181 if (TREE_CODE (inner_expr) == STMT_EXPR)
16182 inner_expr = stmt_expr_value_expr (inner_expr);
16183 if (TREE_CODE (inner_expr) == ADDR_EXPR)
16184 inner_expr = TREE_OPERAND (inner_expr, 0);
16185 if (TREE_CODE (inner_expr) == COMPONENT_REF)
16186 inner_expr = TREE_OPERAND (inner_expr, 1);
16187 if (is_overloaded_fn (inner_expr)
16188 || TREE_CODE (inner_expr) == OFFSET_REF)
16189 return expr;
16190 /* There is no need to return a proxy for a variable. */
16191 if (TREE_CODE (expr) == VAR_DECL)
16192 return expr;
16193 /* Preserve string constants; conversions from string constants to
16194 "char *" are allowed, even though normally a "const char *"
16195 cannot be used to initialize a "char *". */
16196 if (TREE_CODE (expr) == STRING_CST)
16197 return expr;
16198 /* Preserve arithmetic constants, as an optimization -- there is no
16199 reason to create a new node. */
16200 if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
16201 return expr;
16202 /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
16203 There is at least one place where we want to know that a
16204 particular expression is a throw-expression: when checking a ?:
16205 expression, there are special rules if the second or third
16206 argument is a throw-expression. */
16207 if (TREE_CODE (expr) == THROW_EXPR)
16208 return expr;
16210 if (TREE_CODE (expr) == COND_EXPR)
16211 return build3 (COND_EXPR,
16212 TREE_TYPE (expr),
16213 TREE_OPERAND (expr, 0),
16214 (TREE_OPERAND (expr, 1)
16215 ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
16216 : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
16217 build_non_dependent_expr (TREE_OPERAND (expr, 2)));
16218 if (TREE_CODE (expr) == COMPOUND_EXPR
16219 && !COMPOUND_EXPR_OVERLOADED (expr))
16220 return build2 (COMPOUND_EXPR,
16221 TREE_TYPE (expr),
16222 TREE_OPERAND (expr, 0),
16223 build_non_dependent_expr (TREE_OPERAND (expr, 1)));
16225 /* If the type is unknown, it can't really be non-dependent */
16226 gcc_assert (TREE_TYPE (expr) != unknown_type_node);
16228 /* Otherwise, build a NON_DEPENDENT_EXPR.
16230 REFERENCE_TYPEs are not stripped for expressions in templates
16231 because doing so would play havoc with mangling. Consider, for
16232 example:
16234 template <typename T> void f<T& g>() { g(); }
16236 In the body of "f", the expression for "g" will have
16237 REFERENCE_TYPE, even though the standard says that it should
16238 not. The reason is that we must preserve the syntactic form of
16239 the expression so that mangling (say) "f<g>" inside the body of
16240 "f" works out correctly. Therefore, the REFERENCE_TYPE is
16241 stripped here. */
16242 return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
16245 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
16246 Return a new TREE_LIST with the various arguments replaced with
16247 equivalent non-dependent expressions. */
16249 tree
16250 build_non_dependent_args (tree args)
16252 tree a;
16253 tree new_args;
16255 new_args = NULL_TREE;
16256 for (a = args; a; a = TREE_CHAIN (a))
16257 new_args = tree_cons (NULL_TREE,
16258 build_non_dependent_expr (TREE_VALUE (a)),
16259 new_args);
16260 return nreverse (new_args);
16263 #include "gt-cp-pt.h"