PR c++/33916
[official-gcc.git] / gcc / cp / pt.c
blob2b996d41ae1b4b4621ab86f27779ecae04e0b1b0
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, 2008 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*, bool);
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;
981 if (local_specializations == NULL)
982 return NULL_TREE;
984 spec = (tree) htab_find_with_hash (local_specializations, tmpl,
985 htab_hash_pointer (tmpl));
986 return spec ? TREE_PURPOSE (spec) : NULL_TREE;
989 /* Returns nonzero iff DECL is a specialization of TMPL. */
992 is_specialization_of (tree decl, tree tmpl)
994 tree t;
996 if (TREE_CODE (decl) == FUNCTION_DECL)
998 for (t = decl;
999 t != NULL_TREE;
1000 t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1001 if (t == tmpl)
1002 return 1;
1004 else
1006 gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1008 for (t = TREE_TYPE (decl);
1009 t != NULL_TREE;
1010 t = CLASSTYPE_USE_TEMPLATE (t)
1011 ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1012 if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1013 return 1;
1016 return 0;
1019 /* Returns nonzero iff DECL is a specialization of friend declaration
1020 FRIEND according to [temp.friend]. */
1022 bool
1023 is_specialization_of_friend (tree decl, tree friend)
1025 bool need_template = true;
1026 int template_depth;
1028 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1029 || TREE_CODE (decl) == TYPE_DECL);
1031 /* For [temp.friend/6] when FRIEND is an ordinary member function
1032 of a template class, we want to check if DECL is a specialization
1033 if this. */
1034 if (TREE_CODE (friend) == FUNCTION_DECL
1035 && DECL_TEMPLATE_INFO (friend)
1036 && !DECL_USE_TEMPLATE (friend))
1038 /* We want a TEMPLATE_DECL for `is_specialization_of'. */
1039 friend = DECL_TI_TEMPLATE (friend);
1040 need_template = false;
1042 else if (TREE_CODE (friend) == TEMPLATE_DECL
1043 && !PRIMARY_TEMPLATE_P (friend))
1044 need_template = false;
1046 /* There is nothing to do if this is not a template friend. */
1047 if (TREE_CODE (friend) != TEMPLATE_DECL)
1048 return false;
1050 if (is_specialization_of (decl, friend))
1051 return true;
1053 /* [temp.friend/6]
1054 A member of a class template may be declared to be a friend of a
1055 non-template class. In this case, the corresponding member of
1056 every specialization of the class template is a friend of the
1057 class granting friendship.
1059 For example, given a template friend declaration
1061 template <class T> friend void A<T>::f();
1063 the member function below is considered a friend
1065 template <> struct A<int> {
1066 void f();
1069 For this type of template friend, TEMPLATE_DEPTH below will be
1070 nonzero. To determine if DECL is a friend of FRIEND, we first
1071 check if the enclosing class is a specialization of another. */
1073 template_depth = template_class_depth (DECL_CONTEXT (friend));
1074 if (template_depth
1075 && DECL_CLASS_SCOPE_P (decl)
1076 && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1077 CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend))))
1079 /* Next, we check the members themselves. In order to handle
1080 a few tricky cases, such as when FRIEND's are
1082 template <class T> friend void A<T>::g(T t);
1083 template <class T> template <T t> friend void A<T>::h();
1085 and DECL's are
1087 void A<int>::g(int);
1088 template <int> void A<int>::h();
1090 we need to figure out ARGS, the template arguments from
1091 the context of DECL. This is required for template substitution
1092 of `T' in the function parameter of `g' and template parameter
1093 of `h' in the above examples. Here ARGS corresponds to `int'. */
1095 tree context = DECL_CONTEXT (decl);
1096 tree args = NULL_TREE;
1097 int current_depth = 0;
1099 while (current_depth < template_depth)
1101 if (CLASSTYPE_TEMPLATE_INFO (context))
1103 if (current_depth == 0)
1104 args = TYPE_TI_ARGS (context);
1105 else
1106 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1107 current_depth++;
1109 context = TYPE_CONTEXT (context);
1112 if (TREE_CODE (decl) == FUNCTION_DECL)
1114 bool is_template;
1115 tree friend_type;
1116 tree decl_type;
1117 tree friend_args_type;
1118 tree decl_args_type;
1120 /* Make sure that both DECL and FRIEND are templates or
1121 non-templates. */
1122 is_template = DECL_TEMPLATE_INFO (decl)
1123 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1124 if (need_template ^ is_template)
1125 return false;
1126 else if (is_template)
1128 /* If both are templates, check template parameter list. */
1129 tree friend_parms
1130 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1131 args, tf_none);
1132 if (!comp_template_parms
1133 (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1134 friend_parms))
1135 return false;
1137 decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1139 else
1140 decl_type = TREE_TYPE (decl);
1142 friend_type = tsubst_function_type (TREE_TYPE (friend), args,
1143 tf_none, NULL_TREE);
1144 if (friend_type == error_mark_node)
1145 return false;
1147 /* Check if return types match. */
1148 if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1149 return false;
1151 /* Check if function parameter types match, ignoring the
1152 `this' parameter. */
1153 friend_args_type = TYPE_ARG_TYPES (friend_type);
1154 decl_args_type = TYPE_ARG_TYPES (decl_type);
1155 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend))
1156 friend_args_type = TREE_CHAIN (friend_args_type);
1157 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1158 decl_args_type = TREE_CHAIN (decl_args_type);
1160 return compparms (decl_args_type, friend_args_type);
1162 else
1164 /* DECL is a TYPE_DECL */
1165 bool is_template;
1166 tree decl_type = TREE_TYPE (decl);
1168 /* Make sure that both DECL and FRIEND are templates or
1169 non-templates. */
1170 is_template
1171 = CLASSTYPE_TEMPLATE_INFO (decl_type)
1172 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1174 if (need_template ^ is_template)
1175 return false;
1176 else if (is_template)
1178 tree friend_parms;
1179 /* If both are templates, check the name of the two
1180 TEMPLATE_DECL's first because is_friend didn't. */
1181 if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1182 != DECL_NAME (friend))
1183 return false;
1185 /* Now check template parameter list. */
1186 friend_parms
1187 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1188 args, tf_none);
1189 return comp_template_parms
1190 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1191 friend_parms);
1193 else
1194 return (DECL_NAME (decl)
1195 == DECL_NAME (friend));
1198 return false;
1201 /* Register the specialization SPEC as a specialization of TMPL with
1202 the indicated ARGS. IS_FRIEND indicates whether the specialization
1203 is actually just a friend declaration. Returns SPEC, or an
1204 equivalent prior declaration, if available. */
1206 static tree
1207 register_specialization (tree spec, tree tmpl, tree args, bool is_friend)
1209 tree fn;
1211 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
1213 if (TREE_CODE (spec) == FUNCTION_DECL
1214 && uses_template_parms (DECL_TI_ARGS (spec)))
1215 /* This is the FUNCTION_DECL for a partial instantiation. Don't
1216 register it; we want the corresponding TEMPLATE_DECL instead.
1217 We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1218 the more obvious `uses_template_parms (spec)' to avoid problems
1219 with default function arguments. In particular, given
1220 something like this:
1222 template <class T> void f(T t1, T t = T())
1224 the default argument expression is not substituted for in an
1225 instantiation unless and until it is actually needed. */
1226 return spec;
1228 fn = retrieve_specialization (tmpl, args,
1229 /*class_specializations_p=*/false);
1230 /* We can sometimes try to re-register a specialization that we've
1231 already got. In particular, regenerate_decl_from_template calls
1232 duplicate_decls which will update the specialization list. But,
1233 we'll still get called again here anyhow. It's more convenient
1234 to simply allow this than to try to prevent it. */
1235 if (fn == spec)
1236 return spec;
1237 else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1239 if (DECL_TEMPLATE_INSTANTIATION (fn))
1241 if (TREE_USED (fn)
1242 || DECL_EXPLICIT_INSTANTIATION (fn))
1244 error ("specialization of %qD after instantiation",
1245 fn);
1246 return error_mark_node;
1248 else
1250 tree clone;
1251 /* This situation should occur only if the first
1252 specialization is an implicit instantiation, the
1253 second is an explicit specialization, and the
1254 implicit instantiation has not yet been used. That
1255 situation can occur if we have implicitly
1256 instantiated a member function and then specialized
1257 it later.
1259 We can also wind up here if a friend declaration that
1260 looked like an instantiation turns out to be a
1261 specialization:
1263 template <class T> void foo(T);
1264 class S { friend void foo<>(int) };
1265 template <> void foo(int);
1267 We transform the existing DECL in place so that any
1268 pointers to it become pointers to the updated
1269 declaration.
1271 If there was a definition for the template, but not
1272 for the specialization, we want this to look as if
1273 there were no definition, and vice versa. */
1274 DECL_INITIAL (fn) = NULL_TREE;
1275 duplicate_decls (spec, fn, is_friend);
1276 /* The call to duplicate_decls will have applied
1277 [temp.expl.spec]:
1279 An explicit specialization of a function template
1280 is inline only if it is explicitly declared to be,
1281 and independently of whether its function template
1284 to the primary function; now copy the inline bits to
1285 the various clones. */
1286 FOR_EACH_CLONE (clone, fn)
1288 DECL_DECLARED_INLINE_P (clone)
1289 = DECL_DECLARED_INLINE_P (fn);
1290 DECL_INLINE (clone)
1291 = DECL_INLINE (fn);
1293 check_specialization_namespace (fn);
1295 return fn;
1298 else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1300 if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1301 /* Dup decl failed, but this is a new definition. Set the
1302 line number so any errors match this new
1303 definition. */
1304 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1306 return fn;
1310 /* A specialization must be declared in the same namespace as the
1311 template it is specializing. */
1312 if (DECL_TEMPLATE_SPECIALIZATION (spec)
1313 && !check_specialization_namespace (tmpl))
1314 DECL_CONTEXT (spec) = FROB_CONTEXT (decl_namespace_context (tmpl));
1316 if (!optimize_specialization_lookup_p (tmpl))
1317 DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
1318 = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
1320 return spec;
1323 /* Unregister the specialization SPEC as a specialization of TMPL.
1324 Replace it with NEW_SPEC, if NEW_SPEC is non-NULL. Returns true
1325 if the SPEC was listed as a specialization of TMPL. */
1327 bool
1328 reregister_specialization (tree spec, tree tmpl, tree new_spec)
1330 tree* s;
1332 for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
1333 *s != NULL_TREE;
1334 s = &TREE_CHAIN (*s))
1335 if (TREE_VALUE (*s) == spec)
1337 if (!new_spec)
1338 *s = TREE_CHAIN (*s);
1339 else
1340 TREE_VALUE (*s) = new_spec;
1341 return 1;
1344 return 0;
1347 /* Compare an entry in the local specializations hash table P1 (which
1348 is really a pointer to a TREE_LIST) with P2 (which is really a
1349 DECL). */
1351 static int
1352 eq_local_specializations (const void *p1, const void *p2)
1354 return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1357 /* Hash P1, an entry in the local specializations table. */
1359 static hashval_t
1360 hash_local_specialization (const void* p1)
1362 return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1365 /* Like register_specialization, but for local declarations. We are
1366 registering SPEC, an instantiation of TMPL. */
1368 static void
1369 register_local_specialization (tree spec, tree tmpl)
1371 void **slot;
1373 slot = htab_find_slot_with_hash (local_specializations, tmpl,
1374 htab_hash_pointer (tmpl), INSERT);
1375 *slot = build_tree_list (spec, tmpl);
1378 /* TYPE is a class type. Returns true if TYPE is an explicitly
1379 specialized class. */
1381 bool
1382 explicit_class_specialization_p (tree type)
1384 if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1385 return false;
1386 return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1389 /* Print the list of candidate FNS in an error message. */
1391 void
1392 print_candidates (tree fns)
1394 tree fn;
1396 const char *str = "candidates are:";
1398 for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
1400 tree f;
1402 for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
1403 error ("%s %+#D", str, OVL_CURRENT (f));
1404 str = " ";
1408 /* Returns the template (one of the functions given by TEMPLATE_ID)
1409 which can be specialized to match the indicated DECL with the
1410 explicit template args given in TEMPLATE_ID. The DECL may be
1411 NULL_TREE if none is available. In that case, the functions in
1412 TEMPLATE_ID are non-members.
1414 If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1415 specialization of a member template.
1417 The TEMPLATE_COUNT is the number of references to qualifying
1418 template classes that appeared in the name of the function. See
1419 check_explicit_specialization for a more accurate description.
1421 TSK indicates what kind of template declaration (if any) is being
1422 declared. TSK_TEMPLATE indicates that the declaration given by
1423 DECL, though a FUNCTION_DECL, has template parameters, and is
1424 therefore a template function.
1426 The template args (those explicitly specified and those deduced)
1427 are output in a newly created vector *TARGS_OUT.
1429 If it is impossible to determine the result, an error message is
1430 issued. The error_mark_node is returned to indicate failure. */
1432 static tree
1433 determine_specialization (tree template_id,
1434 tree decl,
1435 tree* targs_out,
1436 int need_member_template,
1437 int template_count,
1438 tmpl_spec_kind tsk)
1440 tree fns;
1441 tree targs;
1442 tree explicit_targs;
1443 tree candidates = NULL_TREE;
1444 /* A TREE_LIST of templates of which DECL may be a specialization.
1445 The TREE_VALUE of each node is a TEMPLATE_DECL. The
1446 corresponding TREE_PURPOSE is the set of template arguments that,
1447 when used to instantiate the template, would produce a function
1448 with the signature of DECL. */
1449 tree templates = NULL_TREE;
1450 int header_count;
1451 struct cp_binding_level *b;
1453 *targs_out = NULL_TREE;
1455 if (template_id == error_mark_node || decl == error_mark_node)
1456 return error_mark_node;
1458 fns = TREE_OPERAND (template_id, 0);
1459 explicit_targs = TREE_OPERAND (template_id, 1);
1461 if (fns == error_mark_node)
1462 return error_mark_node;
1464 /* Check for baselinks. */
1465 if (BASELINK_P (fns))
1466 fns = BASELINK_FUNCTIONS (fns);
1468 if (!is_overloaded_fn (fns))
1470 error ("%qD is not a function template", fns);
1471 return error_mark_node;
1474 /* Count the number of template headers specified for this
1475 specialization. */
1476 header_count = 0;
1477 for (b = current_binding_level;
1478 b->kind == sk_template_parms;
1479 b = b->level_chain)
1480 ++header_count;
1482 for (; fns; fns = OVL_NEXT (fns))
1484 tree fn = OVL_CURRENT (fns);
1486 if (TREE_CODE (fn) == TEMPLATE_DECL)
1488 tree decl_arg_types;
1489 tree fn_arg_types;
1491 /* In case of explicit specialization, we need to check if
1492 the number of template headers appearing in the specialization
1493 is correct. This is usually done in check_explicit_specialization,
1494 but the check done there cannot be exhaustive when specializing
1495 member functions. Consider the following code:
1497 template <> void A<int>::f(int);
1498 template <> template <> void A<int>::f(int);
1500 Assuming that A<int> is not itself an explicit specialization
1501 already, the first line specializes "f" which is a non-template
1502 member function, whilst the second line specializes "f" which
1503 is a template member function. So both lines are syntactically
1504 correct, and check_explicit_specialization does not reject
1505 them.
1507 Here, we can do better, as we are matching the specialization
1508 against the declarations. We count the number of template
1509 headers, and we check if they match TEMPLATE_COUNT + 1
1510 (TEMPLATE_COUNT is the number of qualifying template classes,
1511 plus there must be another header for the member template
1512 itself).
1514 Notice that if header_count is zero, this is not a
1515 specialization but rather a template instantiation, so there
1516 is no check we can perform here. */
1517 if (header_count && header_count != template_count + 1)
1518 continue;
1520 /* Check that the number of template arguments at the
1521 innermost level for DECL is the same as for FN. */
1522 if (current_binding_level->kind == sk_template_parms
1523 && !current_binding_level->explicit_spec_p
1524 && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1525 != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1526 (current_template_parms))))
1527 continue;
1529 /* DECL might be a specialization of FN. */
1530 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1531 fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1533 /* For a non-static member function, we need to make sure
1534 that the const qualification is the same. Since
1535 get_bindings does not try to merge the "this" parameter,
1536 we must do the comparison explicitly. */
1537 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1538 && !same_type_p (TREE_VALUE (fn_arg_types),
1539 TREE_VALUE (decl_arg_types)))
1540 continue;
1542 /* Skip the "this" parameter and, for constructors of
1543 classes with virtual bases, the VTT parameter. A
1544 full specialization of a constructor will have a VTT
1545 parameter, but a template never will. */
1546 decl_arg_types
1547 = skip_artificial_parms_for (decl, decl_arg_types);
1548 fn_arg_types
1549 = skip_artificial_parms_for (fn, fn_arg_types);
1551 /* Check that the number of function parameters matches.
1552 For example,
1553 template <class T> void f(int i = 0);
1554 template <> void f<int>();
1555 The specialization f<int> is invalid but is not caught
1556 by get_bindings below. */
1557 if (list_length (fn_arg_types) != list_length (decl_arg_types))
1558 continue;
1560 /* Function templates cannot be specializations; there are
1561 no partial specializations of functions. Therefore, if
1562 the type of DECL does not match FN, there is no
1563 match. */
1564 if (tsk == tsk_template)
1566 if (compparms (fn_arg_types, decl_arg_types))
1567 candidates = tree_cons (NULL_TREE, fn, candidates);
1568 continue;
1571 /* See whether this function might be a specialization of this
1572 template. */
1573 targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1575 if (!targs)
1576 /* We cannot deduce template arguments that when used to
1577 specialize TMPL will produce DECL. */
1578 continue;
1580 /* Save this template, and the arguments deduced. */
1581 templates = tree_cons (targs, fn, templates);
1583 else if (need_member_template)
1584 /* FN is an ordinary member function, and we need a
1585 specialization of a member template. */
1587 else if (TREE_CODE (fn) != FUNCTION_DECL)
1588 /* We can get IDENTIFIER_NODEs here in certain erroneous
1589 cases. */
1591 else if (!DECL_FUNCTION_MEMBER_P (fn))
1592 /* This is just an ordinary non-member function. Nothing can
1593 be a specialization of that. */
1595 else if (DECL_ARTIFICIAL (fn))
1596 /* Cannot specialize functions that are created implicitly. */
1598 else
1600 tree decl_arg_types;
1602 /* This is an ordinary member function. However, since
1603 we're here, we can assume it's enclosing class is a
1604 template class. For example,
1606 template <typename T> struct S { void f(); };
1607 template <> void S<int>::f() {}
1609 Here, S<int>::f is a non-template, but S<int> is a
1610 template class. If FN has the same type as DECL, we
1611 might be in business. */
1613 if (!DECL_TEMPLATE_INFO (fn))
1614 /* Its enclosing class is an explicit specialization
1615 of a template class. This is not a candidate. */
1616 continue;
1618 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1619 TREE_TYPE (TREE_TYPE (fn))))
1620 /* The return types differ. */
1621 continue;
1623 /* Adjust the type of DECL in case FN is a static member. */
1624 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1625 if (DECL_STATIC_FUNCTION_P (fn)
1626 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1627 decl_arg_types = TREE_CHAIN (decl_arg_types);
1629 if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1630 decl_arg_types))
1631 /* They match! */
1632 candidates = tree_cons (NULL_TREE, fn, candidates);
1636 if (templates && TREE_CHAIN (templates))
1638 /* We have:
1640 [temp.expl.spec]
1642 It is possible for a specialization with a given function
1643 signature to be instantiated from more than one function
1644 template. In such cases, explicit specification of the
1645 template arguments must be used to uniquely identify the
1646 function template specialization being specialized.
1648 Note that here, there's no suggestion that we're supposed to
1649 determine which of the candidate templates is most
1650 specialized. However, we, also have:
1652 [temp.func.order]
1654 Partial ordering of overloaded function template
1655 declarations is used in the following contexts to select
1656 the function template to which a function template
1657 specialization refers:
1659 -- when an explicit specialization refers to a function
1660 template.
1662 So, we do use the partial ordering rules, at least for now.
1663 This extension can only serve to make invalid programs valid,
1664 so it's safe. And, there is strong anecdotal evidence that
1665 the committee intended the partial ordering rules to apply;
1666 the EDG front end has that behavior, and John Spicer claims
1667 that the committee simply forgot to delete the wording in
1668 [temp.expl.spec]. */
1669 tree tmpl = most_specialized_instantiation (templates);
1670 if (tmpl != error_mark_node)
1672 templates = tmpl;
1673 TREE_CHAIN (templates) = NULL_TREE;
1677 if (templates == NULL_TREE && candidates == NULL_TREE)
1679 error ("template-id %qD for %q+D does not match any template "
1680 "declaration", template_id, decl);
1681 return error_mark_node;
1683 else if ((templates && TREE_CHAIN (templates))
1684 || (candidates && TREE_CHAIN (candidates))
1685 || (templates && candidates))
1687 error ("ambiguous template specialization %qD for %q+D",
1688 template_id, decl);
1689 chainon (candidates, templates);
1690 print_candidates (candidates);
1691 return error_mark_node;
1694 /* We have one, and exactly one, match. */
1695 if (candidates)
1697 tree fn = TREE_VALUE (candidates);
1698 /* DECL is a re-declaration of a template function. */
1699 if (TREE_CODE (fn) == TEMPLATE_DECL)
1700 return fn;
1701 /* It was a specialization of an ordinary member function in a
1702 template class. */
1703 *targs_out = copy_node (DECL_TI_ARGS (fn));
1704 return DECL_TI_TEMPLATE (fn);
1707 /* It was a specialization of a template. */
1708 targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
1709 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1711 *targs_out = copy_node (targs);
1712 SET_TMPL_ARGS_LEVEL (*targs_out,
1713 TMPL_ARGS_DEPTH (*targs_out),
1714 TREE_PURPOSE (templates));
1716 else
1717 *targs_out = TREE_PURPOSE (templates);
1718 return TREE_VALUE (templates);
1721 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1722 but with the default argument values filled in from those in the
1723 TMPL_TYPES. */
1725 static tree
1726 copy_default_args_to_explicit_spec_1 (tree spec_types,
1727 tree tmpl_types)
1729 tree new_spec_types;
1731 if (!spec_types)
1732 return NULL_TREE;
1734 if (spec_types == void_list_node)
1735 return void_list_node;
1737 /* Substitute into the rest of the list. */
1738 new_spec_types =
1739 copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
1740 TREE_CHAIN (tmpl_types));
1742 /* Add the default argument for this parameter. */
1743 return hash_tree_cons (TREE_PURPOSE (tmpl_types),
1744 TREE_VALUE (spec_types),
1745 new_spec_types);
1748 /* DECL is an explicit specialization. Replicate default arguments
1749 from the template it specializes. (That way, code like:
1751 template <class T> void f(T = 3);
1752 template <> void f(double);
1753 void g () { f (); }
1755 works, as required.) An alternative approach would be to look up
1756 the correct default arguments at the call-site, but this approach
1757 is consistent with how implicit instantiations are handled. */
1759 static void
1760 copy_default_args_to_explicit_spec (tree decl)
1762 tree tmpl;
1763 tree spec_types;
1764 tree tmpl_types;
1765 tree new_spec_types;
1766 tree old_type;
1767 tree new_type;
1768 tree t;
1769 tree object_type = NULL_TREE;
1770 tree in_charge = NULL_TREE;
1771 tree vtt = NULL_TREE;
1773 /* See if there's anything we need to do. */
1774 tmpl = DECL_TI_TEMPLATE (decl);
1775 tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
1776 for (t = tmpl_types; t; t = TREE_CHAIN (t))
1777 if (TREE_PURPOSE (t))
1778 break;
1779 if (!t)
1780 return;
1782 old_type = TREE_TYPE (decl);
1783 spec_types = TYPE_ARG_TYPES (old_type);
1785 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1787 /* Remove the this pointer, but remember the object's type for
1788 CV quals. */
1789 object_type = TREE_TYPE (TREE_VALUE (spec_types));
1790 spec_types = TREE_CHAIN (spec_types);
1791 tmpl_types = TREE_CHAIN (tmpl_types);
1793 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
1795 /* DECL may contain more parameters than TMPL due to the extra
1796 in-charge parameter in constructors and destructors. */
1797 in_charge = spec_types;
1798 spec_types = TREE_CHAIN (spec_types);
1800 if (DECL_HAS_VTT_PARM_P (decl))
1802 vtt = spec_types;
1803 spec_types = TREE_CHAIN (spec_types);
1807 /* Compute the merged default arguments. */
1808 new_spec_types =
1809 copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
1811 /* Compute the new FUNCTION_TYPE. */
1812 if (object_type)
1814 if (vtt)
1815 new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
1816 TREE_VALUE (vtt),
1817 new_spec_types);
1819 if (in_charge)
1820 /* Put the in-charge parameter back. */
1821 new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
1822 TREE_VALUE (in_charge),
1823 new_spec_types);
1825 new_type = build_method_type_directly (object_type,
1826 TREE_TYPE (old_type),
1827 new_spec_types);
1829 else
1830 new_type = build_function_type (TREE_TYPE (old_type),
1831 new_spec_types);
1832 new_type = cp_build_type_attribute_variant (new_type,
1833 TYPE_ATTRIBUTES (old_type));
1834 new_type = build_exception_variant (new_type,
1835 TYPE_RAISES_EXCEPTIONS (old_type));
1836 TREE_TYPE (decl) = new_type;
1839 /* Check to see if the function just declared, as indicated in
1840 DECLARATOR, and in DECL, is a specialization of a function
1841 template. We may also discover that the declaration is an explicit
1842 instantiation at this point.
1844 Returns DECL, or an equivalent declaration that should be used
1845 instead if all goes well. Issues an error message if something is
1846 amiss. Returns error_mark_node if the error is not easily
1847 recoverable.
1849 FLAGS is a bitmask consisting of the following flags:
1851 2: The function has a definition.
1852 4: The function is a friend.
1854 The TEMPLATE_COUNT is the number of references to qualifying
1855 template classes that appeared in the name of the function. For
1856 example, in
1858 template <class T> struct S { void f(); };
1859 void S<int>::f();
1861 the TEMPLATE_COUNT would be 1. However, explicitly specialized
1862 classes are not counted in the TEMPLATE_COUNT, so that in
1864 template <class T> struct S {};
1865 template <> struct S<int> { void f(); }
1866 template <> void S<int>::f();
1868 the TEMPLATE_COUNT would be 0. (Note that this declaration is
1869 invalid; there should be no template <>.)
1871 If the function is a specialization, it is marked as such via
1872 DECL_TEMPLATE_SPECIALIZATION. Furthermore, its DECL_TEMPLATE_INFO
1873 is set up correctly, and it is added to the list of specializations
1874 for that template. */
1876 tree
1877 check_explicit_specialization (tree declarator,
1878 tree decl,
1879 int template_count,
1880 int flags)
1882 int have_def = flags & 2;
1883 int is_friend = flags & 4;
1884 int specialization = 0;
1885 int explicit_instantiation = 0;
1886 int member_specialization = 0;
1887 tree ctype = DECL_CLASS_CONTEXT (decl);
1888 tree dname = DECL_NAME (decl);
1889 tmpl_spec_kind tsk;
1891 if (is_friend)
1893 if (!processing_specialization)
1894 tsk = tsk_none;
1895 else
1896 tsk = tsk_excessive_parms;
1898 else
1899 tsk = current_tmpl_spec_kind (template_count);
1901 switch (tsk)
1903 case tsk_none:
1904 if (processing_specialization)
1906 specialization = 1;
1907 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1909 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1911 if (is_friend)
1912 /* This could be something like:
1914 template <class T> void f(T);
1915 class S { friend void f<>(int); } */
1916 specialization = 1;
1917 else
1919 /* This case handles bogus declarations like template <>
1920 template <class T> void f<int>(); */
1922 error ("template-id %qD in declaration of primary template",
1923 declarator);
1924 return decl;
1927 break;
1929 case tsk_invalid_member_spec:
1930 /* The error has already been reported in
1931 check_specialization_scope. */
1932 return error_mark_node;
1934 case tsk_invalid_expl_inst:
1935 error ("template parameter list used in explicit instantiation");
1937 /* Fall through. */
1939 case tsk_expl_inst:
1940 if (have_def)
1941 error ("definition provided for explicit instantiation");
1943 explicit_instantiation = 1;
1944 break;
1946 case tsk_excessive_parms:
1947 case tsk_insufficient_parms:
1948 if (tsk == tsk_excessive_parms)
1949 error ("too many template parameter lists in declaration of %qD",
1950 decl);
1951 else if (template_header_count)
1952 error("too few template parameter lists in declaration of %qD", decl);
1953 else
1954 error("explicit specialization of %qD must be introduced by "
1955 "%<template <>%>", decl);
1957 /* Fall through. */
1958 case tsk_expl_spec:
1959 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1960 if (ctype)
1961 member_specialization = 1;
1962 else
1963 specialization = 1;
1964 break;
1966 case tsk_template:
1967 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1969 /* This case handles bogus declarations like template <>
1970 template <class T> void f<int>(); */
1972 if (uses_template_parms (declarator))
1973 error ("function template partial specialization %qD "
1974 "is not allowed", declarator);
1975 else
1976 error ("template-id %qD in declaration of primary template",
1977 declarator);
1978 return decl;
1981 if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1982 /* This is a specialization of a member template, without
1983 specialization the containing class. Something like:
1985 template <class T> struct S {
1986 template <class U> void f (U);
1988 template <> template <class U> void S<int>::f(U) {}
1990 That's a specialization -- but of the entire template. */
1991 specialization = 1;
1992 break;
1994 default:
1995 gcc_unreachable ();
1998 if (specialization || member_specialization)
2000 tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2001 for (; t; t = TREE_CHAIN (t))
2002 if (TREE_PURPOSE (t))
2004 pedwarn
2005 ("default argument specified in explicit specialization");
2006 break;
2010 if (specialization || member_specialization || explicit_instantiation)
2012 tree tmpl = NULL_TREE;
2013 tree targs = NULL_TREE;
2015 /* Make sure that the declarator is a TEMPLATE_ID_EXPR. */
2016 if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2018 tree fns;
2020 gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2021 if (ctype)
2022 fns = dname;
2023 else
2025 /* If there is no class context, the explicit instantiation
2026 must be at namespace scope. */
2027 gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2029 /* Find the namespace binding, using the declaration
2030 context. */
2031 fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2032 false, true);
2033 if (fns == error_mark_node || !is_overloaded_fn (fns))
2035 error ("%qD is not a template function", dname);
2036 fns = error_mark_node;
2038 else
2040 tree fn = OVL_CURRENT (fns);
2041 if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2042 CP_DECL_CONTEXT (fn)))
2043 error ("%qD is not declared in %qD",
2044 decl, current_namespace);
2048 declarator = lookup_template_function (fns, NULL_TREE);
2051 if (declarator == error_mark_node)
2052 return error_mark_node;
2054 if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2056 if (!explicit_instantiation)
2057 /* A specialization in class scope. This is invalid,
2058 but the error will already have been flagged by
2059 check_specialization_scope. */
2060 return error_mark_node;
2061 else
2063 /* It's not valid to write an explicit instantiation in
2064 class scope, e.g.:
2066 class C { template void f(); }
2068 This case is caught by the parser. However, on
2069 something like:
2071 template class C { void f(); };
2073 (which is invalid) we can get here. The error will be
2074 issued later. */
2078 return decl;
2080 else if (ctype != NULL_TREE
2081 && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2082 IDENTIFIER_NODE))
2084 /* Find the list of functions in ctype that have the same
2085 name as the declared function. */
2086 tree name = TREE_OPERAND (declarator, 0);
2087 tree fns = NULL_TREE;
2088 int idx;
2090 if (constructor_name_p (name, ctype))
2092 int is_constructor = DECL_CONSTRUCTOR_P (decl);
2094 if (is_constructor ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2095 : !CLASSTYPE_DESTRUCTORS (ctype))
2097 /* From [temp.expl.spec]:
2099 If such an explicit specialization for the member
2100 of a class template names an implicitly-declared
2101 special member function (clause _special_), the
2102 program is ill-formed.
2104 Similar language is found in [temp.explicit]. */
2105 error ("specialization of implicitly-declared special member function");
2106 return error_mark_node;
2109 name = is_constructor ? ctor_identifier : dtor_identifier;
2112 if (!DECL_CONV_FN_P (decl))
2114 idx = lookup_fnfields_1 (ctype, name);
2115 if (idx >= 0)
2116 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2118 else
2120 VEC(tree,gc) *methods;
2121 tree ovl;
2123 /* For a type-conversion operator, we cannot do a
2124 name-based lookup. We might be looking for `operator
2125 int' which will be a specialization of `operator T'.
2126 So, we find *all* the conversion operators, and then
2127 select from them. */
2128 fns = NULL_TREE;
2130 methods = CLASSTYPE_METHOD_VEC (ctype);
2131 if (methods)
2132 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2133 VEC_iterate (tree, methods, idx, ovl);
2134 ++idx)
2136 if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2137 /* There are no more conversion functions. */
2138 break;
2140 /* Glue all these conversion functions together
2141 with those we already have. */
2142 for (; ovl; ovl = OVL_NEXT (ovl))
2143 fns = ovl_cons (OVL_CURRENT (ovl), fns);
2147 if (fns == NULL_TREE)
2149 error ("no member function %qD declared in %qT", name, ctype);
2150 return error_mark_node;
2152 else
2153 TREE_OPERAND (declarator, 0) = fns;
2156 /* Figure out what exactly is being specialized at this point.
2157 Note that for an explicit instantiation, even one for a
2158 member function, we cannot tell apriori whether the
2159 instantiation is for a member template, or just a member
2160 function of a template class. Even if a member template is
2161 being instantiated, the member template arguments may be
2162 elided if they can be deduced from the rest of the
2163 declaration. */
2164 tmpl = determine_specialization (declarator, decl,
2165 &targs,
2166 member_specialization,
2167 template_count,
2168 tsk);
2170 if (!tmpl || tmpl == error_mark_node)
2171 /* We couldn't figure out what this declaration was
2172 specializing. */
2173 return error_mark_node;
2174 else
2176 tree gen_tmpl = most_general_template (tmpl);
2178 if (explicit_instantiation)
2180 /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2181 is done by do_decl_instantiation later. */
2183 int arg_depth = TMPL_ARGS_DEPTH (targs);
2184 int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2186 if (arg_depth > parm_depth)
2188 /* If TMPL is not the most general template (for
2189 example, if TMPL is a friend template that is
2190 injected into namespace scope), then there will
2191 be too many levels of TARGS. Remove some of them
2192 here. */
2193 int i;
2194 tree new_targs;
2196 new_targs = make_tree_vec (parm_depth);
2197 for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2198 TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2199 = TREE_VEC_ELT (targs, i);
2200 targs = new_targs;
2203 return instantiate_template (tmpl, targs, tf_error);
2206 /* If we thought that the DECL was a member function, but it
2207 turns out to be specializing a static member function,
2208 make DECL a static member function as well. */
2209 if (DECL_STATIC_FUNCTION_P (tmpl)
2210 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2211 revert_static_member_fn (decl);
2213 /* If this is a specialization of a member template of a
2214 template class, we want to return the TEMPLATE_DECL, not
2215 the specialization of it. */
2216 if (tsk == tsk_template)
2218 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2219 DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE;
2220 if (have_def)
2222 DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2223 DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl))
2224 = DECL_SOURCE_LOCATION (decl);
2225 /* We want to use the argument list specified in the
2226 definition, not in the original declaration. */
2227 DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (tmpl))
2228 = DECL_ARGUMENTS (decl);
2230 return tmpl;
2233 /* Set up the DECL_TEMPLATE_INFO for DECL. */
2234 DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
2236 /* Inherit default function arguments from the template
2237 DECL is specializing. */
2238 copy_default_args_to_explicit_spec (decl);
2240 /* This specialization has the same protection as the
2241 template it specializes. */
2242 TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2243 TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2245 /* 7.1.1-1 [dcl.stc]
2247 A storage-class-specifier shall not be specified in an
2248 explicit specialization...
2250 The parser rejects these, so unless action is taken here,
2251 explicit function specializations will always appear with
2252 global linkage.
2254 The action recommended by the C++ CWG in response to C++
2255 defect report 605 is to make the storage class and linkage
2256 of the explicit specialization match the templated function:
2258 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2260 if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2262 tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2263 gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2265 /* This specialization has the same linkage and visibility as
2266 the function template it specializes. */
2267 TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2268 if (! TREE_PUBLIC (decl))
2270 DECL_INTERFACE_KNOWN (decl) = 1;
2271 DECL_NOT_REALLY_EXTERN (decl) = 1;
2273 DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2274 if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2276 DECL_VISIBILITY_SPECIFIED (decl) = 1;
2277 DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2281 /* If DECL is a friend declaration, declared using an
2282 unqualified name, the namespace associated with DECL may
2283 have been set incorrectly. For example, in:
2285 template <typename T> void f(T);
2286 namespace N {
2287 struct S { friend void f<int>(int); }
2290 we will have set the DECL_CONTEXT for the friend
2291 declaration to N, rather than to the global namespace. */
2292 if (DECL_NAMESPACE_SCOPE_P (decl))
2293 DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2295 if (is_friend && !have_def)
2296 /* This is not really a declaration of a specialization.
2297 It's just the name of an instantiation. But, it's not
2298 a request for an instantiation, either. */
2299 SET_DECL_IMPLICIT_INSTANTIATION (decl);
2300 else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2301 /* This is indeed a specialization. In case of constructors
2302 and destructors, we need in-charge and not-in-charge
2303 versions in V3 ABI. */
2304 clone_function_decl (decl, /*update_method_vec_p=*/0);
2306 /* Register this specialization so that we can find it
2307 again. */
2308 decl = register_specialization (decl, gen_tmpl, targs, is_friend);
2312 return decl;
2315 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2316 parameters. These are represented in the same format used for
2317 DECL_TEMPLATE_PARMS. */
2320 comp_template_parms (const_tree parms1, const_tree parms2)
2322 const_tree p1;
2323 const_tree p2;
2325 if (parms1 == parms2)
2326 return 1;
2328 for (p1 = parms1, p2 = parms2;
2329 p1 != NULL_TREE && p2 != NULL_TREE;
2330 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2332 tree t1 = TREE_VALUE (p1);
2333 tree t2 = TREE_VALUE (p2);
2334 int i;
2336 gcc_assert (TREE_CODE (t1) == TREE_VEC);
2337 gcc_assert (TREE_CODE (t2) == TREE_VEC);
2339 if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2340 return 0;
2342 for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2344 tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2345 tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2347 /* If either of the template parameters are invalid, assume
2348 they match for the sake of error recovery. */
2349 if (parm1 == error_mark_node || parm2 == error_mark_node)
2350 return 1;
2352 if (TREE_CODE (parm1) != TREE_CODE (parm2))
2353 return 0;
2355 if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2356 && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2357 == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2358 continue;
2359 else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2360 return 0;
2364 if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2365 /* One set of parameters has more parameters lists than the
2366 other. */
2367 return 0;
2369 return 1;
2372 /* Determine whether PARM is a parameter pack. */
2373 bool
2374 template_parameter_pack_p (const_tree parm)
2376 /* Determine if we have a non-type template parameter pack. */
2377 if (TREE_CODE (parm) == PARM_DECL)
2378 return (DECL_TEMPLATE_PARM_P (parm)
2379 && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2381 /* If this is a list of template parameters, we could get a
2382 TYPE_DECL or a TEMPLATE_DECL. */
2383 if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2384 parm = TREE_TYPE (parm);
2386 return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2387 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2388 && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2391 /* Determine whether ARGS describes a variadic template args list,
2392 i.e., one that is terminated by a template argument pack. */
2393 static bool
2394 template_args_variadic_p (tree args)
2396 int nargs;
2397 tree last_parm;
2399 if (args == NULL_TREE)
2400 return false;
2402 args = INNERMOST_TEMPLATE_ARGS (args);
2403 nargs = TREE_VEC_LENGTH (args);
2405 if (nargs == 0)
2406 return false;
2408 last_parm = TREE_VEC_ELT (args, nargs - 1);
2410 return ARGUMENT_PACK_P (last_parm);
2413 /* Generate a new name for the parameter pack name NAME (an
2414 IDENTIFIER_NODE) that incorporates its */
2415 static tree
2416 make_ith_pack_parameter_name (tree name, int i)
2418 /* Munge the name to include the parameter index. */
2419 char numbuf[128];
2420 char* newname;
2422 sprintf(numbuf, "%i", i);
2423 newname = (char*)alloca (IDENTIFIER_LENGTH (name) + strlen(numbuf) + 2);
2424 sprintf(newname, "%s#%i", IDENTIFIER_POINTER (name), i);
2425 return get_identifier (newname);
2428 /* Structure used to track the progress of find_parameter_packs_r. */
2429 struct find_parameter_pack_data
2431 /* TREE_LIST that will contain all of the parameter packs found by
2432 the traversal. */
2433 tree* parameter_packs;
2435 /* Set of AST nodes that have been visited by the traversal. */
2436 struct pointer_set_t *visited;
2439 /* Identifies all of the argument packs that occur in a template
2440 argument and appends them to the TREE_LIST inside DATA, which is a
2441 find_parameter_pack_data structure. This is a subroutine of
2442 make_pack_expansion and uses_parameter_packs. */
2443 static tree
2444 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2446 tree t = *tp;
2447 struct find_parameter_pack_data* ppd =
2448 (struct find_parameter_pack_data*)data;
2449 bool parameter_pack_p = false;
2451 /* Don't visit nodes twice. */
2452 if (pointer_set_contains (ppd->visited, *tp))
2454 *walk_subtrees = 0;
2455 return NULL_TREE;
2458 /* Identify whether this is a parameter pack or not. */
2459 switch (TREE_CODE (t))
2461 case TEMPLATE_PARM_INDEX:
2462 if (TEMPLATE_PARM_PARAMETER_PACK (t))
2463 parameter_pack_p = true;
2464 break;
2466 case TEMPLATE_TYPE_PARM:
2467 case TEMPLATE_TEMPLATE_PARM:
2468 if (TEMPLATE_TYPE_PARAMETER_PACK (t))
2469 parameter_pack_p = true;
2470 break;
2472 case PARM_DECL:
2473 if (FUNCTION_PARAMETER_PACK_P (t))
2475 /* We don't want to walk into the type of a PARM_DECL,
2476 because we don't want to see the type parameter pack. */
2477 *walk_subtrees = 0;
2478 parameter_pack_p = true;
2480 break;
2482 default:
2483 /* Not a parameter pack. */
2484 break;
2487 if (parameter_pack_p)
2489 /* Add this parameter pack to the list. */
2490 *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
2493 /* Make sure we do not visit this node again. */
2494 pointer_set_insert (ppd->visited, *tp);
2496 if (TYPE_P (t))
2497 cp_walk_tree (&TYPE_CONTEXT (t),
2498 &find_parameter_packs_r, ppd, NULL);
2500 /* This switch statement will return immediately if we don't find a
2501 parameter pack. */
2502 switch (TREE_CODE (t))
2504 case TEMPLATE_PARM_INDEX:
2505 return NULL_TREE;
2507 case BOUND_TEMPLATE_TEMPLATE_PARM:
2508 /* Check the template itself. */
2509 cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)),
2510 &find_parameter_packs_r, ppd, NULL);
2511 /* Check the template arguments. */
2512 cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd,
2513 NULL);
2514 *walk_subtrees = 0;
2515 return NULL_TREE;
2517 case TEMPLATE_TYPE_PARM:
2518 case TEMPLATE_TEMPLATE_PARM:
2519 return NULL_TREE;
2521 case PARM_DECL:
2522 return NULL_TREE;
2524 case RECORD_TYPE:
2525 if (TYPE_PTRMEMFUNC_P (t))
2526 return NULL_TREE;
2527 /* Fall through. */
2529 case UNION_TYPE:
2530 case ENUMERAL_TYPE:
2531 if (TYPE_TEMPLATE_INFO (t))
2532 cp_walk_tree (&TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
2533 &find_parameter_packs_r, ppd, NULL);
2535 *walk_subtrees = 0;
2536 return NULL_TREE;
2538 case TEMPLATE_DECL:
2539 cp_walk_tree (&TREE_TYPE (t),
2540 &find_parameter_packs_r, ppd, NULL);
2541 return NULL_TREE;
2543 case TYPENAME_TYPE:
2544 cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
2545 ppd, NULL);
2546 *walk_subtrees = 0;
2547 return NULL_TREE;
2549 case TYPE_PACK_EXPANSION:
2550 case EXPR_PACK_EXPANSION:
2551 *walk_subtrees = 0;
2552 return NULL_TREE;
2554 case INTEGER_TYPE:
2555 cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r,
2556 ppd, NULL);
2557 *walk_subtrees = 0;
2558 return NULL_TREE;
2560 case IDENTIFIER_NODE:
2561 cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd, NULL);
2562 *walk_subtrees = 0;
2563 return NULL_TREE;
2565 default:
2566 return NULL_TREE;
2569 return NULL_TREE;
2572 /* Determines if the expression or type T uses any parameter packs. */
2573 bool
2574 uses_parameter_packs (tree t)
2576 tree parameter_packs = NULL_TREE;
2577 struct find_parameter_pack_data ppd;
2578 ppd.parameter_packs = &parameter_packs;
2579 ppd.visited = pointer_set_create ();
2580 cp_walk_tree (&t, &find_parameter_packs_r, &ppd, NULL);
2581 pointer_set_destroy (ppd.visited);
2582 return parameter_packs != NULL_TREE;
2585 /* Turn ARG, which may be an expression, type, or a TREE_LIST
2586 representation a base-class initializer into a parameter pack
2587 expansion. If all goes well, the resulting node will be an
2588 EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
2589 respectively. */
2590 tree
2591 make_pack_expansion (tree arg)
2593 tree result;
2594 tree parameter_packs = NULL_TREE;
2595 bool for_types = false;
2596 struct find_parameter_pack_data ppd;
2598 if (!arg || arg == error_mark_node)
2599 return arg;
2601 if (TREE_CODE (arg) == TREE_LIST)
2603 /* The only time we will see a TREE_LIST here is for a base
2604 class initializer. In this case, the TREE_PURPOSE will be a
2605 _TYPE node (representing the base class expansion we're
2606 initializing) and the TREE_VALUE will be a TREE_LIST
2607 containing the initialization arguments.
2609 The resulting expansion looks somewhat different from most
2610 expansions. Rather than returning just one _EXPANSION, we
2611 return a TREE_LIST whose TREE_PURPOSE is a
2612 TYPE_PACK_EXPANSION containing the bases that will be
2613 initialized. The TREE_VALUE will be identical to the
2614 original TREE_VALUE, which is a list of arguments that will
2615 be passed to each base. We do not introduce any new pack
2616 expansion nodes into the TREE_VALUE (although it is possible
2617 that some already exist), because the TREE_PURPOSE and
2618 TREE_VALUE all need to be expanded together with the same
2619 _EXPANSION node. Note that the TYPE_PACK_EXPANSION in the
2620 resulting TREE_PURPOSE will mention the parameter packs in
2621 both the bases and the arguments to the bases. */
2622 tree purpose;
2623 tree value;
2624 tree parameter_packs = NULL_TREE;
2626 /* Determine which parameter packs will be used by the base
2627 class expansion. */
2628 ppd.visited = pointer_set_create ();
2629 ppd.parameter_packs = &parameter_packs;
2630 cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r,
2631 &ppd, NULL);
2633 if (parameter_packs == NULL_TREE)
2635 error ("base initializer expansion %<%T%> contains no parameter packs", arg);
2636 pointer_set_destroy (ppd.visited);
2637 return error_mark_node;
2640 if (TREE_VALUE (arg) != void_type_node)
2642 /* Collect the sets of parameter packs used in each of the
2643 initialization arguments. */
2644 for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
2646 /* Determine which parameter packs will be expanded in this
2647 argument. */
2648 cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r,
2649 &ppd, NULL);
2653 pointer_set_destroy (ppd.visited);
2655 /* Create the pack expansion type for the base type. */
2656 purpose = make_node (TYPE_PACK_EXPANSION);
2657 SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
2658 PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
2660 /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2661 they will rarely be compared to anything. */
2662 SET_TYPE_STRUCTURAL_EQUALITY (purpose);
2664 return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
2667 if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
2668 for_types = true;
2670 /* Build the PACK_EXPANSION_* node. */
2671 result = make_node (for_types ? TYPE_PACK_EXPANSION : EXPR_PACK_EXPANSION);
2672 SET_PACK_EXPANSION_PATTERN (result, arg);
2673 if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
2675 /* Propagate type and const-expression information. */
2676 TREE_TYPE (result) = TREE_TYPE (arg);
2677 TREE_CONSTANT (result) = TREE_CONSTANT (arg);
2679 else
2680 /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2681 they will rarely be compared to anything. */
2682 SET_TYPE_STRUCTURAL_EQUALITY (result);
2684 /* Determine which parameter packs will be expanded. */
2685 ppd.parameter_packs = &parameter_packs;
2686 ppd.visited = pointer_set_create ();
2687 cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, NULL);
2688 pointer_set_destroy (ppd.visited);
2690 /* Make sure we found some parameter packs. */
2691 if (parameter_packs == NULL_TREE)
2693 if (TYPE_P (arg))
2694 error ("expansion pattern %<%T%> contains no argument packs", arg);
2695 else
2696 error ("expansion pattern %<%E%> contains no argument packs", arg);
2697 return error_mark_node;
2699 PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
2701 return result;
2704 /* Checks T for any "bare" parameter packs, which have not yet been
2705 expanded, and issues an error if any are found. This operation can
2706 only be done on full expressions or types (e.g., an expression
2707 statement, "if" condition, etc.), because we could have expressions like:
2709 foo(f(g(h(args)))...)
2711 where "args" is a parameter pack. check_for_bare_parameter_packs
2712 should not be called for the subexpressions args, h(args),
2713 g(h(args)), or f(g(h(args))), because we would produce erroneous
2714 error messages.
2716 Returns TRUE and emits an error if there were bare parameter packs,
2717 returns FALSE otherwise. */
2718 bool
2719 check_for_bare_parameter_packs (tree t)
2721 tree parameter_packs = NULL_TREE;
2722 struct find_parameter_pack_data ppd;
2724 if (!processing_template_decl || !t || t == error_mark_node)
2725 return false;
2727 if (TREE_CODE (t) == TYPE_DECL)
2728 t = TREE_TYPE (t);
2730 ppd.parameter_packs = &parameter_packs;
2731 ppd.visited = pointer_set_create ();
2732 cp_walk_tree (&t, &find_parameter_packs_r, &ppd, NULL);
2733 pointer_set_destroy (ppd.visited);
2735 if (parameter_packs)
2737 error ("parameter packs not expanded with `...':");
2738 while (parameter_packs)
2740 tree pack = TREE_VALUE (parameter_packs);
2741 tree name = NULL_TREE;
2743 if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
2744 || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
2745 name = TYPE_NAME (pack);
2746 else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
2747 name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
2748 else
2749 name = DECL_NAME (pack);
2751 if (name)
2752 inform (" %qD", name);
2753 else
2754 inform (" <anonymous>");
2756 parameter_packs = TREE_CHAIN (parameter_packs);
2759 /* Clean up any references to these parameter packs within the
2760 tree. */
2761 ppd.parameter_packs = &parameter_packs;
2762 ppd.visited = pointer_set_create ();
2763 cp_walk_tree (&t, &find_parameter_packs_r, &ppd, NULL);
2764 pointer_set_destroy (ppd.visited);
2766 return true;
2769 return false;
2772 /* Expand any parameter packs that occur in the template arguments in
2773 ARGS. */
2774 tree
2775 expand_template_argument_pack (tree args)
2777 tree result_args = NULL_TREE;
2778 int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
2779 int num_result_args = -1;
2781 /* First, determine if we need to expand anything, and the number of
2782 slots we'll need. */
2783 for (in_arg = 0; in_arg < nargs; ++in_arg)
2785 tree arg = TREE_VEC_ELT (args, in_arg);
2786 if (ARGUMENT_PACK_P (arg))
2788 int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
2789 if (num_result_args < 0)
2790 num_result_args = in_arg + num_packed;
2791 else
2792 num_result_args += num_packed;
2794 else
2796 if (num_result_args >= 0)
2797 num_result_args++;
2801 /* If no expansion is necessary, we're done. */
2802 if (num_result_args < 0)
2803 return args;
2805 /* Expand arguments. */
2806 result_args = make_tree_vec (num_result_args);
2807 for (in_arg = 0; in_arg < nargs; ++in_arg)
2809 tree arg = TREE_VEC_ELT (args, in_arg);
2810 if (ARGUMENT_PACK_P (arg))
2812 tree packed = ARGUMENT_PACK_ARGS (arg);
2813 int i, num_packed = TREE_VEC_LENGTH (packed);
2814 for (i = 0; i < num_packed; ++i, ++out_arg)
2815 TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
2817 else
2819 TREE_VEC_ELT (result_args, out_arg) = arg;
2820 ++out_arg;
2824 return result_args;
2827 /* Complain if DECL shadows a template parameter.
2829 [temp.local]: A template-parameter shall not be redeclared within its
2830 scope (including nested scopes). */
2832 void
2833 check_template_shadow (tree decl)
2835 tree olddecl;
2837 /* If we're not in a template, we can't possibly shadow a template
2838 parameter. */
2839 if (!current_template_parms)
2840 return;
2842 /* Figure out what we're shadowing. */
2843 if (TREE_CODE (decl) == OVERLOAD)
2844 decl = OVL_CURRENT (decl);
2845 olddecl = innermost_non_namespace_value (DECL_NAME (decl));
2847 /* If there's no previous binding for this name, we're not shadowing
2848 anything, let alone a template parameter. */
2849 if (!olddecl)
2850 return;
2852 /* If we're not shadowing a template parameter, we're done. Note
2853 that OLDDECL might be an OVERLOAD (or perhaps even an
2854 ERROR_MARK), so we can't just blithely assume it to be a _DECL
2855 node. */
2856 if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
2857 return;
2859 /* We check for decl != olddecl to avoid bogus errors for using a
2860 name inside a class. We check TPFI to avoid duplicate errors for
2861 inline member templates. */
2862 if (decl == olddecl
2863 || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
2864 return;
2866 error ("declaration of %q+#D", decl);
2867 error (" shadows template parm %q+#D", olddecl);
2870 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
2871 ORIG_LEVEL, DECL, and TYPE. */
2873 static tree
2874 build_template_parm_index (int index,
2875 int level,
2876 int orig_level,
2877 tree decl,
2878 tree type)
2880 tree t = make_node (TEMPLATE_PARM_INDEX);
2881 TEMPLATE_PARM_IDX (t) = index;
2882 TEMPLATE_PARM_LEVEL (t) = level;
2883 TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
2884 TEMPLATE_PARM_DECL (t) = decl;
2885 TREE_TYPE (t) = type;
2886 TREE_CONSTANT (t) = TREE_CONSTANT (decl);
2887 TREE_INVARIANT (t) = TREE_INVARIANT (decl);
2888 TREE_READONLY (t) = TREE_READONLY (decl);
2890 return t;
2893 /* Find the canonical type parameter for the given template type
2894 parameter. Returns the canonical type parameter, which may be TYPE
2895 if no such parameter existed. */
2896 static tree
2897 canonical_type_parameter (tree type)
2899 tree list;
2900 int idx = TEMPLATE_TYPE_IDX (type);
2901 if (!canonical_template_parms)
2902 canonical_template_parms = VEC_alloc (tree, gc, idx+1);
2904 while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
2905 VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
2907 list = VEC_index (tree, canonical_template_parms, idx);
2908 while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
2909 list = TREE_CHAIN (list);
2911 if (list)
2912 return TREE_VALUE (list);
2913 else
2915 VEC_replace(tree, canonical_template_parms, idx,
2916 tree_cons (NULL_TREE, type,
2917 VEC_index (tree, canonical_template_parms, idx)));
2918 return type;
2922 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
2923 TEMPLATE_PARM_LEVEL has been decreased by LEVELS. If such a
2924 TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
2925 new one is created. */
2927 static tree
2928 reduce_template_parm_level (tree index, tree type, int levels, tree args,
2929 tsubst_flags_t complain)
2931 if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
2932 || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
2933 != TEMPLATE_PARM_LEVEL (index) - levels))
2935 tree orig_decl = TEMPLATE_PARM_DECL (index);
2936 tree decl, t;
2938 decl = build_decl (TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
2939 TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
2940 TREE_INVARIANT (decl) = TREE_INVARIANT (orig_decl);
2941 TREE_READONLY (decl) = TREE_READONLY (orig_decl);
2942 DECL_ARTIFICIAL (decl) = 1;
2943 SET_DECL_TEMPLATE_PARM_P (decl);
2945 t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
2946 TEMPLATE_PARM_LEVEL (index) - levels,
2947 TEMPLATE_PARM_ORIG_LEVEL (index),
2948 decl, type);
2949 TEMPLATE_PARM_DESCENDANTS (index) = t;
2950 TEMPLATE_PARM_PARAMETER_PACK (t)
2951 = TEMPLATE_PARM_PARAMETER_PACK (index);
2953 /* Template template parameters need this. */
2954 if (TREE_CODE (decl) == TEMPLATE_DECL)
2955 DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
2956 (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
2957 args, complain);
2960 return TEMPLATE_PARM_DESCENDANTS (index);
2963 /* Process information from new template parameter PARM and append it to the
2964 LIST being built. This new parameter is a non-type parameter iff
2965 IS_NON_TYPE is true. This new parameter is a parameter
2966 pack iff IS_PARAMETER_PACK is true. */
2968 tree
2969 process_template_parm (tree list, tree parm, bool is_non_type,
2970 bool is_parameter_pack)
2972 tree decl = 0;
2973 tree defval;
2974 tree err_parm_list;
2975 int idx = 0;
2977 gcc_assert (TREE_CODE (parm) == TREE_LIST);
2978 defval = TREE_PURPOSE (parm);
2980 if (list)
2982 tree p = tree_last (list);
2984 if (p && TREE_VALUE (p) != error_mark_node)
2986 p = TREE_VALUE (p);
2987 if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
2988 idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
2989 else
2990 idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
2993 ++idx;
2995 else
2996 idx = 0;
2998 if (is_non_type)
3000 parm = TREE_VALUE (parm);
3002 SET_DECL_TEMPLATE_PARM_P (parm);
3004 if (TREE_TYPE (parm) == error_mark_node)
3006 err_parm_list = build_tree_list (defval, parm);
3007 TREE_VALUE (err_parm_list) = error_mark_node;
3008 return chainon (list, err_parm_list);
3010 else
3012 /* [temp.param]
3014 The top-level cv-qualifiers on the template-parameter are
3015 ignored when determining its type. */
3016 TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3017 if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3019 err_parm_list = build_tree_list (defval, parm);
3020 TREE_VALUE (err_parm_list) = error_mark_node;
3021 return chainon (list, err_parm_list);
3024 if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
3026 /* This template parameter is not a parameter pack, but it
3027 should be. Complain about "bare" parameter packs. */
3028 check_for_bare_parameter_packs (TREE_TYPE (parm));
3030 /* Recover by calling this a parameter pack. */
3031 is_parameter_pack = true;
3035 /* A template parameter is not modifiable. */
3036 TREE_CONSTANT (parm) = 1;
3037 TREE_INVARIANT (parm) = 1;
3038 TREE_READONLY (parm) = 1;
3039 decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3040 TREE_CONSTANT (decl) = 1;
3041 TREE_INVARIANT (decl) = 1;
3042 TREE_READONLY (decl) = 1;
3043 DECL_INITIAL (parm) = DECL_INITIAL (decl)
3044 = build_template_parm_index (idx, processing_template_decl,
3045 processing_template_decl,
3046 decl, TREE_TYPE (parm));
3048 TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
3049 = is_parameter_pack;
3051 else
3053 tree t;
3054 parm = TREE_VALUE (TREE_VALUE (parm));
3056 if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3058 t = make_aggr_type (TEMPLATE_TEMPLATE_PARM);
3059 /* This is for distinguishing between real templates and template
3060 template parameters */
3061 TREE_TYPE (parm) = t;
3062 TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3063 decl = parm;
3065 else
3067 t = make_aggr_type (TEMPLATE_TYPE_PARM);
3068 /* parm is either IDENTIFIER_NODE or NULL_TREE. */
3069 decl = build_decl (TYPE_DECL, parm, t);
3072 TYPE_NAME (t) = decl;
3073 TYPE_STUB_DECL (t) = decl;
3074 parm = decl;
3075 TEMPLATE_TYPE_PARM_INDEX (t)
3076 = build_template_parm_index (idx, processing_template_decl,
3077 processing_template_decl,
3078 decl, TREE_TYPE (parm));
3079 TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3080 TYPE_CANONICAL (t) = canonical_type_parameter (t);
3082 DECL_ARTIFICIAL (decl) = 1;
3083 SET_DECL_TEMPLATE_PARM_P (decl);
3084 pushdecl (decl);
3085 parm = build_tree_list (defval, parm);
3086 return chainon (list, parm);
3089 /* The end of a template parameter list has been reached. Process the
3090 tree list into a parameter vector, converting each parameter into a more
3091 useful form. Type parameters are saved as IDENTIFIER_NODEs, and others
3092 as PARM_DECLs. */
3094 tree
3095 end_template_parm_list (tree parms)
3097 int nparms;
3098 tree parm, next;
3099 tree saved_parmlist = make_tree_vec (list_length (parms));
3101 current_template_parms
3102 = tree_cons (size_int (processing_template_decl),
3103 saved_parmlist, current_template_parms);
3105 for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3107 next = TREE_CHAIN (parm);
3108 TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3109 TREE_CHAIN (parm) = NULL_TREE;
3112 --processing_template_parmlist;
3114 return saved_parmlist;
3117 /* end_template_decl is called after a template declaration is seen. */
3119 void
3120 end_template_decl (void)
3122 reset_specialization ();
3124 if (! processing_template_decl)
3125 return;
3127 /* This matches the pushlevel in begin_template_parm_list. */
3128 finish_scope ();
3130 --processing_template_decl;
3131 current_template_parms = TREE_CHAIN (current_template_parms);
3134 /* Within the declaration of a template, return all levels of template
3135 parameters that apply. The template parameters are represented as
3136 a TREE_VEC, in the form documented in cp-tree.h for template
3137 arguments. */
3139 static tree
3140 current_template_args (void)
3142 tree header;
3143 tree args = NULL_TREE;
3144 int length = TMPL_PARMS_DEPTH (current_template_parms);
3145 int l = length;
3147 /* If there is only one level of template parameters, we do not
3148 create a TREE_VEC of TREE_VECs. Instead, we return a single
3149 TREE_VEC containing the arguments. */
3150 if (length > 1)
3151 args = make_tree_vec (length);
3153 for (header = current_template_parms; header; header = TREE_CHAIN (header))
3155 tree a = copy_node (TREE_VALUE (header));
3156 int i;
3158 TREE_TYPE (a) = NULL_TREE;
3159 for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
3161 tree t = TREE_VEC_ELT (a, i);
3163 /* T will be a list if we are called from within a
3164 begin/end_template_parm_list pair, but a vector directly
3165 if within a begin/end_member_template_processing pair. */
3166 if (TREE_CODE (t) == TREE_LIST)
3168 t = TREE_VALUE (t);
3170 if (!error_operand_p (t))
3172 if (TREE_CODE (t) == TYPE_DECL
3173 || TREE_CODE (t) == TEMPLATE_DECL)
3175 t = TREE_TYPE (t);
3177 if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3179 /* Turn this argument into a TYPE_ARGUMENT_PACK
3180 with a single element, which expands T. */
3181 tree vec = make_tree_vec (1);
3182 TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3184 t = make_node (TYPE_ARGUMENT_PACK);
3185 SET_ARGUMENT_PACK_ARGS (t, vec);
3188 else
3190 t = DECL_INITIAL (t);
3192 if (TEMPLATE_PARM_PARAMETER_PACK (t))
3194 /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3195 with a single element, which expands T. */
3196 tree vec = make_tree_vec (1);
3197 tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3198 TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3200 t = make_node (NONTYPE_ARGUMENT_PACK);
3201 SET_ARGUMENT_PACK_ARGS (t, vec);
3202 TREE_TYPE (t) = type;
3205 TREE_VEC_ELT (a, i) = t;
3210 if (length > 1)
3211 TREE_VEC_ELT (args, --l) = a;
3212 else
3213 args = a;
3216 return args;
3219 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
3220 template PARMS. If MEMBER_TEMPLATE_P is true, the new template is
3221 a member template. Used by push_template_decl below. */
3223 static tree
3224 build_template_decl (tree decl, tree parms, bool member_template_p)
3226 tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
3227 DECL_TEMPLATE_PARMS (tmpl) = parms;
3228 DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
3229 DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
3230 if (DECL_LANG_SPECIFIC (decl))
3232 DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
3233 DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
3234 DECL_DESTRUCTOR_P (tmpl) = DECL_DESTRUCTOR_P (decl);
3235 DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
3236 DECL_ASSIGNMENT_OPERATOR_P (tmpl) = DECL_ASSIGNMENT_OPERATOR_P (decl);
3237 if (DECL_OVERLOADED_OPERATOR_P (decl))
3238 SET_OVERLOADED_OPERATOR_CODE (tmpl,
3239 DECL_OVERLOADED_OPERATOR_P (decl));
3242 return tmpl;
3245 struct template_parm_data
3247 /* The level of the template parameters we are currently
3248 processing. */
3249 int level;
3251 /* The index of the specialization argument we are currently
3252 processing. */
3253 int current_arg;
3255 /* An array whose size is the number of template parameters. The
3256 elements are nonzero if the parameter has been used in any one
3257 of the arguments processed so far. */
3258 int* parms;
3260 /* An array whose size is the number of template arguments. The
3261 elements are nonzero if the argument makes use of template
3262 parameters of this level. */
3263 int* arg_uses_template_parms;
3266 /* Subroutine of push_template_decl used to see if each template
3267 parameter in a partial specialization is used in the explicit
3268 argument list. If T is of the LEVEL given in DATA (which is
3269 treated as a template_parm_data*), then DATA->PARMS is marked
3270 appropriately. */
3272 static int
3273 mark_template_parm (tree t, void* data)
3275 int level;
3276 int idx;
3277 struct template_parm_data* tpd = (struct template_parm_data*) data;
3279 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3281 level = TEMPLATE_PARM_LEVEL (t);
3282 idx = TEMPLATE_PARM_IDX (t);
3284 else
3286 level = TEMPLATE_TYPE_LEVEL (t);
3287 idx = TEMPLATE_TYPE_IDX (t);
3290 if (level == tpd->level)
3292 tpd->parms[idx] = 1;
3293 tpd->arg_uses_template_parms[tpd->current_arg] = 1;
3296 /* Return zero so that for_each_template_parm will continue the
3297 traversal of the tree; we want to mark *every* template parm. */
3298 return 0;
3301 /* Process the partial specialization DECL. */
3303 static tree
3304 process_partial_specialization (tree decl)
3306 tree type = TREE_TYPE (decl);
3307 tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
3308 tree specargs = CLASSTYPE_TI_ARGS (type);
3309 tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
3310 tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3311 tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
3312 int nargs = TREE_VEC_LENGTH (inner_args);
3313 int ntparms = TREE_VEC_LENGTH (inner_parms);
3314 int i;
3315 int did_error_intro = 0;
3316 struct template_parm_data tpd;
3317 struct template_parm_data tpd2;
3319 /* We check that each of the template parameters given in the
3320 partial specialization is used in the argument list to the
3321 specialization. For example:
3323 template <class T> struct S;
3324 template <class T> struct S<T*>;
3326 The second declaration is OK because `T*' uses the template
3327 parameter T, whereas
3329 template <class T> struct S<int>;
3331 is no good. Even trickier is:
3333 template <class T>
3334 struct S1
3336 template <class U>
3337 struct S2;
3338 template <class U>
3339 struct S2<T>;
3342 The S2<T> declaration is actually invalid; it is a
3343 full-specialization. Of course,
3345 template <class U>
3346 struct S2<T (*)(U)>;
3348 or some such would have been OK. */
3349 tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
3350 tpd.parms = (int *) alloca (sizeof (int) * ntparms);
3351 memset (tpd.parms, 0, sizeof (int) * ntparms);
3353 tpd.arg_uses_template_parms = (int *) alloca (sizeof (int) * nargs);
3354 memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
3355 for (i = 0; i < nargs; ++i)
3357 tpd.current_arg = i;
3358 for_each_template_parm (TREE_VEC_ELT (inner_args, i),
3359 &mark_template_parm,
3360 &tpd,
3361 NULL,
3362 /*include_nondeduced_p=*/false);
3364 for (i = 0; i < ntparms; ++i)
3365 if (tpd.parms[i] == 0)
3367 /* One of the template parms was not used in the
3368 specialization. */
3369 if (!did_error_intro)
3371 error ("template parameters not used in partial specialization:");
3372 did_error_intro = 1;
3375 error (" %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
3378 /* [temp.class.spec]
3380 The argument list of the specialization shall not be identical to
3381 the implicit argument list of the primary template. */
3382 if (comp_template_args
3383 (inner_args,
3384 INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
3385 (maintmpl)))))
3386 error ("partial specialization %qT does not specialize any template arguments", type);
3388 /* [temp.class.spec]
3390 A partially specialized non-type argument expression shall not
3391 involve template parameters of the partial specialization except
3392 when the argument expression is a simple identifier.
3394 The type of a template parameter corresponding to a specialized
3395 non-type argument shall not be dependent on a parameter of the
3396 specialization.
3398 Also, we verify that pack expansions only occur at the
3399 end of the argument list. */
3400 gcc_assert (nargs == DECL_NTPARMS (maintmpl));
3401 tpd2.parms = 0;
3402 for (i = 0; i < nargs; ++i)
3404 tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
3405 tree arg = TREE_VEC_ELT (inner_args, i);
3406 tree packed_args = NULL_TREE;
3407 int j, len = 1;
3409 if (ARGUMENT_PACK_P (arg))
3411 /* Extract the arguments from the argument pack. We'll be
3412 iterating over these in the following loop. */
3413 packed_args = ARGUMENT_PACK_ARGS (arg);
3414 len = TREE_VEC_LENGTH (packed_args);
3417 for (j = 0; j < len; j++)
3419 if (packed_args)
3420 /* Get the Jth argument in the parameter pack. */
3421 arg = TREE_VEC_ELT (packed_args, j);
3423 if (PACK_EXPANSION_P (arg))
3425 /* Pack expansions must come at the end of the
3426 argument list. */
3427 if ((packed_args && j < len - 1)
3428 || (!packed_args && i < nargs - 1))
3430 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3431 error ("parameter pack argument %qE must be at the end of the template argument list", arg);
3432 else
3433 error ("parameter pack argument %qT must be at the end of the template argument list", arg);
3435 if (packed_args)
3436 TREE_VEC_ELT (packed_args, j) = error_mark_node;
3440 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3441 /* We only care about the pattern. */
3442 arg = PACK_EXPANSION_PATTERN (arg);
3444 if (/* These first two lines are the `non-type' bit. */
3445 !TYPE_P (arg)
3446 && TREE_CODE (arg) != TEMPLATE_DECL
3447 /* This next line is the `argument expression is not just a
3448 simple identifier' condition and also the `specialized
3449 non-type argument' bit. */
3450 && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
3452 if ((!packed_args && tpd.arg_uses_template_parms[i])
3453 || (packed_args && uses_template_parms (arg)))
3454 error ("template argument %qE involves template parameter(s)",
3455 arg);
3456 else
3458 /* Look at the corresponding template parameter,
3459 marking which template parameters its type depends
3460 upon. */
3461 tree type = TREE_TYPE (parm);
3463 if (!tpd2.parms)
3465 /* We haven't yet initialized TPD2. Do so now. */
3466 tpd2.arg_uses_template_parms
3467 = (int *) alloca (sizeof (int) * nargs);
3468 /* The number of parameters here is the number in the
3469 main template, which, as checked in the assertion
3470 above, is NARGS. */
3471 tpd2.parms = (int *) alloca (sizeof (int) * nargs);
3472 tpd2.level =
3473 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
3476 /* Mark the template parameters. But this time, we're
3477 looking for the template parameters of the main
3478 template, not in the specialization. */
3479 tpd2.current_arg = i;
3480 tpd2.arg_uses_template_parms[i] = 0;
3481 memset (tpd2.parms, 0, sizeof (int) * nargs);
3482 for_each_template_parm (type,
3483 &mark_template_parm,
3484 &tpd2,
3485 NULL,
3486 /*include_nondeduced_p=*/false);
3488 if (tpd2.arg_uses_template_parms [i])
3490 /* The type depended on some template parameters.
3491 If they are fully specialized in the
3492 specialization, that's OK. */
3493 int j;
3494 for (j = 0; j < nargs; ++j)
3495 if (tpd2.parms[j] != 0
3496 && tpd.arg_uses_template_parms [j])
3498 error ("type %qT of template argument %qE depends "
3499 "on template parameter(s)",
3500 type,
3501 arg);
3502 break;
3510 if (retrieve_specialization (maintmpl, specargs,
3511 /*class_specializations_p=*/true))
3512 /* We've already got this specialization. */
3513 return decl;
3515 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
3516 = tree_cons (specargs, inner_parms,
3517 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
3518 TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
3519 return decl;
3522 /* Check that a template declaration's use of default arguments and
3523 parameter packs is not invalid. Here, PARMS are the template
3524 parameters. IS_PRIMARY is nonzero if DECL is the thing declared by
3525 a primary template. IS_PARTIAL is nonzero if DECL is a partial
3526 specialization.
3529 IS_FRIEND_DECL is nonzero if DECL is a friend function template
3530 declaration (but not a definition); 1 indicates a declaration, 2
3531 indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
3532 emitted for extraneous default arguments.
3534 Returns TRUE if there were no errors found, FALSE otherwise. */
3536 bool
3537 check_default_tmpl_args (tree decl, tree parms, int is_primary,
3538 int is_partial, int is_friend_decl)
3540 const char *msg;
3541 int last_level_to_check;
3542 tree parm_level;
3543 bool no_errors = true;
3545 /* [temp.param]
3547 A default template-argument shall not be specified in a
3548 function template declaration or a function template definition, nor
3549 in the template-parameter-list of the definition of a member of a
3550 class template. */
3552 if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
3553 /* You can't have a function template declaration in a local
3554 scope, nor you can you define a member of a class template in a
3555 local scope. */
3556 return true;
3558 if (current_class_type
3559 && !TYPE_BEING_DEFINED (current_class_type)
3560 && DECL_LANG_SPECIFIC (decl)
3561 /* If this is either a friend defined in the scope of the class
3562 or a member function. */
3563 && (DECL_FUNCTION_MEMBER_P (decl)
3564 ? same_type_p (DECL_CONTEXT (decl), current_class_type)
3565 : DECL_FRIEND_CONTEXT (decl)
3566 ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
3567 : false)
3568 /* And, if it was a member function, it really was defined in
3569 the scope of the class. */
3570 && (!DECL_FUNCTION_MEMBER_P (decl)
3571 || DECL_INITIALIZED_IN_CLASS_P (decl)))
3572 /* We already checked these parameters when the template was
3573 declared, so there's no need to do it again now. This function
3574 was defined in class scope, but we're processing it's body now
3575 that the class is complete. */
3576 return true;
3578 /* Core issue 226 (C++0x only): the following only applies to class
3579 templates. */
3580 if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
3582 /* [temp.param]
3584 If a template-parameter has a default template-argument, all
3585 subsequent template-parameters shall have a default
3586 template-argument supplied. */
3587 for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
3589 tree inner_parms = TREE_VALUE (parm_level);
3590 int ntparms = TREE_VEC_LENGTH (inner_parms);
3591 int seen_def_arg_p = 0;
3592 int i;
3594 for (i = 0; i < ntparms; ++i)
3596 tree parm = TREE_VEC_ELT (inner_parms, i);
3598 if (parm == error_mark_node)
3599 continue;
3601 if (TREE_PURPOSE (parm))
3602 seen_def_arg_p = 1;
3603 else if (seen_def_arg_p)
3605 error ("no default argument for %qD", TREE_VALUE (parm));
3606 /* For better subsequent error-recovery, we indicate that
3607 there should have been a default argument. */
3608 TREE_PURPOSE (parm) = error_mark_node;
3609 no_errors = false;
3611 else if (is_primary
3612 && !is_partial
3613 && !is_friend_decl
3614 && TREE_CODE (decl) == TYPE_DECL
3615 && i < ntparms - 1
3616 && template_parameter_pack_p (TREE_VALUE (parm)))
3618 /* A primary class template can only have one
3619 parameter pack, at the end of the template
3620 parameter list. */
3622 if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
3623 error ("parameter pack %qE must be at the end of the"
3624 " template parameter list", TREE_VALUE (parm));
3625 else
3626 error ("parameter pack %qT must be at the end of the"
3627 " template parameter list",
3628 TREE_TYPE (TREE_VALUE (parm)));
3630 TREE_VALUE (TREE_VEC_ELT (inner_parms, i))
3631 = error_mark_node;
3632 no_errors = false;
3638 if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
3639 || is_partial
3640 || !is_primary
3641 || is_friend_decl)
3642 /* For an ordinary class template, default template arguments are
3643 allowed at the innermost level, e.g.:
3644 template <class T = int>
3645 struct S {};
3646 but, in a partial specialization, they're not allowed even
3647 there, as we have in [temp.class.spec]:
3649 The template parameter list of a specialization shall not
3650 contain default template argument values.
3652 So, for a partial specialization, or for a function template
3653 (in C++98/C++03), we look at all of them. */
3655 else
3656 /* But, for a primary class template that is not a partial
3657 specialization we look at all template parameters except the
3658 innermost ones. */
3659 parms = TREE_CHAIN (parms);
3661 /* Figure out what error message to issue. */
3662 if (is_friend_decl == 2)
3663 msg = "default template arguments may not be used in function template friend re-declaration";
3664 else if (is_friend_decl)
3665 msg = "default template arguments may not be used in function template friend declarations";
3666 else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
3667 msg = "default template arguments may not be used in function templates";
3668 else if (is_partial)
3669 msg = "default template arguments may not be used in partial specializations";
3670 else
3671 msg = "default argument for template parameter for class enclosing %qD";
3673 if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
3674 /* If we're inside a class definition, there's no need to
3675 examine the parameters to the class itself. On the one
3676 hand, they will be checked when the class is defined, and,
3677 on the other, default arguments are valid in things like:
3678 template <class T = double>
3679 struct S { template <class U> void f(U); };
3680 Here the default argument for `S' has no bearing on the
3681 declaration of `f'. */
3682 last_level_to_check = template_class_depth (current_class_type) + 1;
3683 else
3684 /* Check everything. */
3685 last_level_to_check = 0;
3687 for (parm_level = parms;
3688 parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
3689 parm_level = TREE_CHAIN (parm_level))
3691 tree inner_parms = TREE_VALUE (parm_level);
3692 int i;
3693 int ntparms;
3695 ntparms = TREE_VEC_LENGTH (inner_parms);
3696 for (i = 0; i < ntparms; ++i)
3698 if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
3699 continue;
3701 if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
3703 if (msg)
3705 no_errors = false;
3706 if (is_friend_decl == 2)
3707 return no_errors;
3709 error (msg, decl);
3710 msg = 0;
3713 /* Clear out the default argument so that we are not
3714 confused later. */
3715 TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
3719 /* At this point, if we're still interested in issuing messages,
3720 they must apply to classes surrounding the object declared. */
3721 if (msg)
3722 msg = "default argument for template parameter for class enclosing %qD";
3725 return no_errors;
3728 /* Worker for push_template_decl_real, called via
3729 for_each_template_parm. DATA is really an int, indicating the
3730 level of the parameters we are interested in. If T is a template
3731 parameter of that level, return nonzero. */
3733 static int
3734 template_parm_this_level_p (tree t, void* data)
3736 int this_level = *(int *)data;
3737 int level;
3739 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3740 level = TEMPLATE_PARM_LEVEL (t);
3741 else
3742 level = TEMPLATE_TYPE_LEVEL (t);
3743 return level == this_level;
3746 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
3747 parameters given by current_template_args, or reuses a
3748 previously existing one, if appropriate. Returns the DECL, or an
3749 equivalent one, if it is replaced via a call to duplicate_decls.
3751 If IS_FRIEND is true, DECL is a friend declaration. */
3753 tree
3754 push_template_decl_real (tree decl, bool is_friend)
3756 tree tmpl;
3757 tree args;
3758 tree info;
3759 tree ctx;
3760 int primary;
3761 int is_partial;
3762 int new_template_p = 0;
3763 /* True if the template is a member template, in the sense of
3764 [temp.mem]. */
3765 bool member_template_p = false;
3767 if (decl == error_mark_node)
3768 return decl;
3770 /* See if this is a partial specialization. */
3771 is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
3772 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
3773 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
3775 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
3776 is_friend = true;
3778 if (is_friend)
3779 /* For a friend, we want the context of the friend function, not
3780 the type of which it is a friend. */
3781 ctx = DECL_CONTEXT (decl);
3782 else if (CP_DECL_CONTEXT (decl)
3783 && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
3784 /* In the case of a virtual function, we want the class in which
3785 it is defined. */
3786 ctx = CP_DECL_CONTEXT (decl);
3787 else
3788 /* Otherwise, if we're currently defining some class, the DECL
3789 is assumed to be a member of the class. */
3790 ctx = current_scope ();
3792 if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
3793 ctx = NULL_TREE;
3795 if (!DECL_CONTEXT (decl))
3796 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
3798 /* See if this is a primary template. */
3799 if (is_friend && ctx)
3800 /* A friend template that specifies a class context, i.e.
3801 template <typename T> friend void A<T>::f();
3802 is not primary. */
3803 primary = 0;
3804 else
3805 primary = template_parm_scope_p ();
3807 if (primary)
3809 if (DECL_CLASS_SCOPE_P (decl))
3810 member_template_p = true;
3811 if (TREE_CODE (decl) == TYPE_DECL
3812 && ANON_AGGRNAME_P (DECL_NAME (decl)))
3813 error ("template class without a name");
3814 else if (TREE_CODE (decl) == FUNCTION_DECL)
3816 if (DECL_DESTRUCTOR_P (decl))
3818 /* [temp.mem]
3820 A destructor shall not be a member template. */
3821 error ("destructor %qD declared as member template", decl);
3822 return error_mark_node;
3824 if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
3825 && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
3826 || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
3827 || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
3828 || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
3829 == void_list_node)))
3831 /* [basic.stc.dynamic.allocation]
3833 An allocation function can be a function
3834 template. ... Template allocation functions shall
3835 have two or more parameters. */
3836 error ("invalid template declaration of %qD", decl);
3837 return error_mark_node;
3840 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3841 && CLASS_TYPE_P (TREE_TYPE (decl)))
3842 /* OK */;
3843 else
3845 error ("template declaration of %q#D", decl);
3846 return error_mark_node;
3850 /* Check to see that the rules regarding the use of default
3851 arguments are not being violated. */
3852 check_default_tmpl_args (decl, current_template_parms,
3853 primary, is_partial, /*is_friend_decl=*/0);
3855 /* Ensure that there are no parameter packs in the type of this
3856 declaration that have not been expanded. */
3857 if (TREE_CODE (decl) == FUNCTION_DECL)
3859 /* Check each of the arguments individually to see if there are
3860 any bare parameter packs. */
3861 tree type = TREE_TYPE (decl);
3862 tree arg = DECL_ARGUMENTS (decl);
3863 tree argtype = TYPE_ARG_TYPES (type);
3865 while (arg && argtype)
3867 if (!FUNCTION_PARAMETER_PACK_P (arg)
3868 && check_for_bare_parameter_packs (TREE_TYPE (arg)))
3870 /* This is a PARM_DECL that contains unexpanded parameter
3871 packs. We have already complained about this in the
3872 check_for_bare_parameter_packs call, so just replace
3873 these types with ERROR_MARK_NODE. */
3874 TREE_TYPE (arg) = error_mark_node;
3875 TREE_VALUE (argtype) = error_mark_node;
3878 arg = TREE_CHAIN (arg);
3879 argtype = TREE_CHAIN (argtype);
3882 /* Check for bare parameter packs in the return type and the
3883 exception specifiers. */
3884 if (check_for_bare_parameter_packs (TREE_TYPE (type)))
3885 /* Errors were already issued, set return type to int
3886 as the frontend doesn't expect error_mark_node as
3887 the return type. */
3888 TREE_TYPE (type) = integer_type_node;
3889 if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
3890 TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
3892 else if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
3893 return error_mark_node;
3895 if (is_partial)
3896 return process_partial_specialization (decl);
3898 args = current_template_args ();
3900 if (!ctx
3901 || TREE_CODE (ctx) == FUNCTION_DECL
3902 || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
3903 || (is_friend && !DECL_TEMPLATE_INFO (decl)))
3905 if (DECL_LANG_SPECIFIC (decl)
3906 && DECL_TEMPLATE_INFO (decl)
3907 && DECL_TI_TEMPLATE (decl))
3908 tmpl = DECL_TI_TEMPLATE (decl);
3909 /* If DECL is a TYPE_DECL for a class-template, then there won't
3910 be DECL_LANG_SPECIFIC. The information equivalent to
3911 DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead. */
3912 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3913 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3914 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3916 /* Since a template declaration already existed for this
3917 class-type, we must be redeclaring it here. Make sure
3918 that the redeclaration is valid. */
3919 redeclare_class_template (TREE_TYPE (decl),
3920 current_template_parms);
3921 /* We don't need to create a new TEMPLATE_DECL; just use the
3922 one we already had. */
3923 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3925 else
3927 tmpl = build_template_decl (decl, current_template_parms,
3928 member_template_p);
3929 new_template_p = 1;
3931 if (DECL_LANG_SPECIFIC (decl)
3932 && DECL_TEMPLATE_SPECIALIZATION (decl))
3934 /* A specialization of a member template of a template
3935 class. */
3936 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3937 DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
3938 DECL_TEMPLATE_INFO (decl) = NULL_TREE;
3942 else
3944 tree a, t, current, parms;
3945 int i;
3946 tree tinfo = get_template_info (decl);
3948 if (!tinfo)
3950 error ("template definition of non-template %q#D", decl);
3951 return error_mark_node;
3954 tmpl = TI_TEMPLATE (tinfo);
3956 if (DECL_FUNCTION_TEMPLATE_P (tmpl)
3957 && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
3958 && DECL_TEMPLATE_SPECIALIZATION (decl)
3959 && DECL_MEMBER_TEMPLATE_P (tmpl))
3961 tree new_tmpl;
3963 /* The declaration is a specialization of a member
3964 template, declared outside the class. Therefore, the
3965 innermost template arguments will be NULL, so we
3966 replace them with the arguments determined by the
3967 earlier call to check_explicit_specialization. */
3968 args = DECL_TI_ARGS (decl);
3970 new_tmpl
3971 = build_template_decl (decl, current_template_parms,
3972 member_template_p);
3973 DECL_TEMPLATE_RESULT (new_tmpl) = decl;
3974 TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
3975 DECL_TI_TEMPLATE (decl) = new_tmpl;
3976 SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
3977 DECL_TEMPLATE_INFO (new_tmpl)
3978 = tree_cons (tmpl, args, NULL_TREE);
3980 register_specialization (new_tmpl,
3981 most_general_template (tmpl),
3982 args,
3983 is_friend);
3984 return decl;
3987 /* Make sure the template headers we got make sense. */
3989 parms = DECL_TEMPLATE_PARMS (tmpl);
3990 i = TMPL_PARMS_DEPTH (parms);
3991 if (TMPL_ARGS_DEPTH (args) != i)
3993 error ("expected %d levels of template parms for %q#D, got %d",
3994 i, decl, TMPL_ARGS_DEPTH (args));
3996 else
3997 for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
3999 a = TMPL_ARGS_LEVEL (args, i);
4000 t = INNERMOST_TEMPLATE_PARMS (parms);
4002 if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
4004 if (current == decl)
4005 error ("got %d template parameters for %q#D",
4006 TREE_VEC_LENGTH (a), decl);
4007 else
4008 error ("got %d template parameters for %q#T",
4009 TREE_VEC_LENGTH (a), current);
4010 error (" but %d required", TREE_VEC_LENGTH (t));
4011 return error_mark_node;
4014 if (current == decl)
4015 current = ctx;
4016 else
4017 current = (TYPE_P (current)
4018 ? TYPE_CONTEXT (current)
4019 : DECL_CONTEXT (current));
4022 /* Check that the parms are used in the appropriate qualifying scopes
4023 in the declarator. */
4024 if (!comp_template_args
4025 (TI_ARGS (tinfo),
4026 TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
4028 error ("\
4029 template arguments to %qD do not match original template %qD",
4030 decl, DECL_TEMPLATE_RESULT (tmpl));
4031 if (!uses_template_parms (TI_ARGS (tinfo)))
4032 inform ("use template<> for an explicit specialization");
4033 /* Avoid crash in import_export_decl. */
4034 DECL_INTERFACE_KNOWN (decl) = 1;
4035 return error_mark_node;
4039 DECL_TEMPLATE_RESULT (tmpl) = decl;
4040 TREE_TYPE (tmpl) = TREE_TYPE (decl);
4042 /* Push template declarations for global functions and types. Note
4043 that we do not try to push a global template friend declared in a
4044 template class; such a thing may well depend on the template
4045 parameters of the class. */
4046 if (new_template_p && !ctx
4047 && !(is_friend && template_class_depth (current_class_type) > 0))
4049 tmpl = pushdecl_namespace_level (tmpl, is_friend);
4050 if (tmpl == error_mark_node)
4051 return error_mark_node;
4053 /* Hide template friend classes that haven't been declared yet. */
4054 if (is_friend && TREE_CODE (decl) == TYPE_DECL)
4056 DECL_ANTICIPATED (tmpl) = 1;
4057 DECL_FRIEND_P (tmpl) = 1;
4061 if (primary)
4063 tree parms = DECL_TEMPLATE_PARMS (tmpl);
4064 int i;
4066 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
4067 if (DECL_CONV_FN_P (tmpl))
4069 int depth = TMPL_PARMS_DEPTH (parms);
4071 /* It is a conversion operator. See if the type converted to
4072 depends on innermost template operands. */
4074 if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
4075 depth))
4076 DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
4079 /* Give template template parms a DECL_CONTEXT of the template
4080 for which they are a parameter. */
4081 parms = INNERMOST_TEMPLATE_PARMS (parms);
4082 for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
4084 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4085 if (TREE_CODE (parm) == TEMPLATE_DECL)
4086 DECL_CONTEXT (parm) = tmpl;
4090 /* The DECL_TI_ARGS of DECL contains full set of arguments referring
4091 back to its most general template. If TMPL is a specialization,
4092 ARGS may only have the innermost set of arguments. Add the missing
4093 argument levels if necessary. */
4094 if (DECL_TEMPLATE_INFO (tmpl))
4095 args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
4097 info = tree_cons (tmpl, args, NULL_TREE);
4099 if (DECL_IMPLICIT_TYPEDEF_P (decl))
4100 SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
4101 else if (DECL_LANG_SPECIFIC (decl))
4102 DECL_TEMPLATE_INFO (decl) = info;
4104 return DECL_TEMPLATE_RESULT (tmpl);
4107 tree
4108 push_template_decl (tree decl)
4110 return push_template_decl_real (decl, false);
4113 /* Called when a class template TYPE is redeclared with the indicated
4114 template PARMS, e.g.:
4116 template <class T> struct S;
4117 template <class T> struct S {}; */
4119 bool
4120 redeclare_class_template (tree type, tree parms)
4122 tree tmpl;
4123 tree tmpl_parms;
4124 int i;
4126 if (!TYPE_TEMPLATE_INFO (type))
4128 error ("%qT is not a template type", type);
4129 return false;
4132 tmpl = TYPE_TI_TEMPLATE (type);
4133 if (!PRIMARY_TEMPLATE_P (tmpl))
4134 /* The type is nested in some template class. Nothing to worry
4135 about here; there are no new template parameters for the nested
4136 type. */
4137 return true;
4139 if (!parms)
4141 error ("template specifiers not specified in declaration of %qD",
4142 tmpl);
4143 return false;
4146 parms = INNERMOST_TEMPLATE_PARMS (parms);
4147 tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
4149 if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
4151 error ("redeclared with %d template parameter(s)",
4152 TREE_VEC_LENGTH (parms));
4153 inform ("previous declaration %q+D used %d template parameter(s)",
4154 tmpl, TREE_VEC_LENGTH (tmpl_parms));
4155 return false;
4158 for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
4160 tree tmpl_parm;
4161 tree parm;
4162 tree tmpl_default;
4163 tree parm_default;
4165 if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
4166 || TREE_VEC_ELT (parms, i) == error_mark_node)
4167 continue;
4169 tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
4170 parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4171 tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
4172 parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
4174 /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
4175 TEMPLATE_DECL. */
4176 if (tmpl_parm != error_mark_node
4177 && (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
4178 || (TREE_CODE (tmpl_parm) != TYPE_DECL
4179 && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
4180 || (TREE_CODE (tmpl_parm) != PARM_DECL
4181 && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
4182 != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
4183 || (TREE_CODE (tmpl_parm) == PARM_DECL
4184 && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
4185 != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))))))
4187 error ("template parameter %q+#D", tmpl_parm);
4188 error ("redeclared here as %q#D", parm);
4189 return false;
4192 if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
4194 /* We have in [temp.param]:
4196 A template-parameter may not be given default arguments
4197 by two different declarations in the same scope. */
4198 error ("redefinition of default argument for %q#D", parm);
4199 inform ("%Joriginal definition appeared here", tmpl_parm);
4200 return false;
4203 if (parm_default != NULL_TREE)
4204 /* Update the previous template parameters (which are the ones
4205 that will really count) with the new default value. */
4206 TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
4207 else if (tmpl_default != NULL_TREE)
4208 /* Update the new parameters, too; they'll be used as the
4209 parameters for any members. */
4210 TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
4213 return true;
4216 /* Simplify EXPR if it is a non-dependent expression. Returns the
4217 (possibly simplified) expression. */
4219 tree
4220 fold_non_dependent_expr (tree expr)
4222 if (expr == NULL_TREE)
4223 return NULL_TREE;
4225 /* If we're in a template, but EXPR isn't value dependent, simplify
4226 it. We're supposed to treat:
4228 template <typename T> void f(T[1 + 1]);
4229 template <typename T> void f(T[2]);
4231 as two declarations of the same function, for example. */
4232 if (processing_template_decl
4233 && !type_dependent_expression_p (expr)
4234 && !value_dependent_expression_p (expr))
4236 HOST_WIDE_INT saved_processing_template_decl;
4238 saved_processing_template_decl = processing_template_decl;
4239 processing_template_decl = 0;
4240 expr = tsubst_copy_and_build (expr,
4241 /*args=*/NULL_TREE,
4242 tf_error,
4243 /*in_decl=*/NULL_TREE,
4244 /*function_p=*/false,
4245 /*integral_constant_expression_p=*/true);
4246 processing_template_decl = saved_processing_template_decl;
4248 return expr;
4251 /* EXPR is an expression which is used in a constant-expression context.
4252 For instance, it could be a VAR_DECL with a constant initializer.
4253 Extract the innest constant expression.
4255 This is basically a more powerful version of
4256 integral_constant_value, which can be used also in templates where
4257 initializers can maintain a syntactic rather than semantic form
4258 (even if they are non-dependent, for access-checking purposes). */
4260 static tree
4261 fold_decl_constant_value (tree expr)
4263 tree const_expr = expr;
4266 expr = fold_non_dependent_expr (const_expr);
4267 const_expr = integral_constant_value (expr);
4269 while (expr != const_expr);
4271 return expr;
4274 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
4275 must be a function or a pointer-to-function type, as specified
4276 in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
4277 and check that the resulting function has external linkage. */
4279 static tree
4280 convert_nontype_argument_function (tree type, tree expr)
4282 tree fns = expr;
4283 tree fn, fn_no_ptr;
4285 fn = instantiate_type (type, fns, tf_none);
4286 if (fn == error_mark_node)
4287 return error_mark_node;
4289 fn_no_ptr = fn;
4290 if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
4291 fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
4292 if (TREE_CODE (fn_no_ptr) == BASELINK)
4293 fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
4295 /* [temp.arg.nontype]/1
4297 A template-argument for a non-type, non-template template-parameter
4298 shall be one of:
4299 [...]
4300 -- the address of an object or function with external linkage. */
4301 if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
4303 error ("%qE is not a valid template argument for type %qT "
4304 "because function %qD has not external linkage",
4305 expr, type, fn_no_ptr);
4306 return NULL_TREE;
4309 return fn;
4312 /* Attempt to convert the non-type template parameter EXPR to the
4313 indicated TYPE. If the conversion is successful, return the
4314 converted value. If the conversion is unsuccessful, return
4315 NULL_TREE if we issued an error message, or error_mark_node if we
4316 did not. We issue error messages for out-and-out bad template
4317 parameters, but not simply because the conversion failed, since we
4318 might be just trying to do argument deduction. Both TYPE and EXPR
4319 must be non-dependent.
4321 The conversion follows the special rules described in
4322 [temp.arg.nontype], and it is much more strict than an implicit
4323 conversion.
4325 This function is called twice for each template argument (see
4326 lookup_template_class for a more accurate description of this
4327 problem). This means that we need to handle expressions which
4328 are not valid in a C++ source, but can be created from the
4329 first call (for instance, casts to perform conversions). These
4330 hacks can go away after we fix the double coercion problem. */
4332 static tree
4333 convert_nontype_argument (tree type, tree expr)
4335 tree expr_type;
4337 /* Detect immediately string literals as invalid non-type argument.
4338 This special-case is not needed for correctness (we would easily
4339 catch this later), but only to provide better diagnostic for this
4340 common user mistake. As suggested by DR 100, we do not mention
4341 linkage issues in the diagnostic as this is not the point. */
4342 if (TREE_CODE (expr) == STRING_CST)
4344 error ("%qE is not a valid template argument for type %qT "
4345 "because string literals can never be used in this context",
4346 expr, type);
4347 return NULL_TREE;
4350 /* If we are in a template, EXPR may be non-dependent, but still
4351 have a syntactic, rather than semantic, form. For example, EXPR
4352 might be a SCOPE_REF, rather than the VAR_DECL to which the
4353 SCOPE_REF refers. Preserving the qualifying scope is necessary
4354 so that access checking can be performed when the template is
4355 instantiated -- but here we need the resolved form so that we can
4356 convert the argument. */
4357 expr = fold_non_dependent_expr (expr);
4358 if (error_operand_p (expr))
4359 return error_mark_node;
4360 expr_type = TREE_TYPE (expr);
4362 /* HACK: Due to double coercion, we can get a
4363 NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
4364 which is the tree that we built on the first call (see
4365 below when coercing to reference to object or to reference to
4366 function). We just strip everything and get to the arg.
4367 See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
4368 for examples. */
4369 if (TREE_CODE (expr) == NOP_EXPR)
4371 if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
4373 /* ??? Maybe we could use convert_from_reference here, but we
4374 would need to relax its constraints because the NOP_EXPR
4375 could actually change the type to something more cv-qualified,
4376 and this is not folded by convert_from_reference. */
4377 tree addr = TREE_OPERAND (expr, 0);
4378 gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
4379 gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
4380 gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
4381 gcc_assert (same_type_ignoring_top_level_qualifiers_p
4382 (TREE_TYPE (expr_type),
4383 TREE_TYPE (TREE_TYPE (addr))));
4385 expr = TREE_OPERAND (addr, 0);
4386 expr_type = TREE_TYPE (expr);
4389 /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
4390 parameter is a pointer to object, through decay and
4391 qualification conversion. Let's strip everything. */
4392 else if (TYPE_PTROBV_P (type))
4394 STRIP_NOPS (expr);
4395 gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
4396 gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
4397 /* Skip the ADDR_EXPR only if it is part of the decay for
4398 an array. Otherwise, it is part of the original argument
4399 in the source code. */
4400 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
4401 expr = TREE_OPERAND (expr, 0);
4402 expr_type = TREE_TYPE (expr);
4406 /* [temp.arg.nontype]/5, bullet 1
4408 For a non-type template-parameter of integral or enumeration type,
4409 integral promotions (_conv.prom_) and integral conversions
4410 (_conv.integral_) are applied. */
4411 if (INTEGRAL_TYPE_P (type))
4413 if (!INTEGRAL_TYPE_P (expr_type))
4414 return error_mark_node;
4416 expr = fold_decl_constant_value (expr);
4417 /* Notice that there are constant expressions like '4 % 0' which
4418 do not fold into integer constants. */
4419 if (TREE_CODE (expr) != INTEGER_CST)
4421 error ("%qE is not a valid template argument for type %qT "
4422 "because it is a non-constant expression", expr, type);
4423 return NULL_TREE;
4426 /* At this point, an implicit conversion does what we want,
4427 because we already know that the expression is of integral
4428 type. */
4429 expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
4430 if (expr == error_mark_node)
4431 return error_mark_node;
4433 /* Conversion was allowed: fold it to a bare integer constant. */
4434 expr = fold (expr);
4436 /* [temp.arg.nontype]/5, bullet 2
4438 For a non-type template-parameter of type pointer to object,
4439 qualification conversions (_conv.qual_) and the array-to-pointer
4440 conversion (_conv.array_) are applied. */
4441 else if (TYPE_PTROBV_P (type))
4443 /* [temp.arg.nontype]/1 (TC1 version, DR 49):
4445 A template-argument for a non-type, non-template template-parameter
4446 shall be one of: [...]
4448 -- the name of a non-type template-parameter;
4449 -- the address of an object or function with external linkage, [...]
4450 expressed as "& id-expression" where the & is optional if the name
4451 refers to a function or array, or if the corresponding
4452 template-parameter is a reference.
4454 Here, we do not care about functions, as they are invalid anyway
4455 for a parameter of type pointer-to-object. */
4457 if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
4458 /* Non-type template parameters are OK. */
4460 else if (TREE_CODE (expr) != ADDR_EXPR
4461 && TREE_CODE (expr_type) != ARRAY_TYPE)
4463 if (TREE_CODE (expr) == VAR_DECL)
4465 error ("%qD is not a valid template argument "
4466 "because %qD is a variable, not the address of "
4467 "a variable",
4468 expr, expr);
4469 return NULL_TREE;
4471 /* Other values, like integer constants, might be valid
4472 non-type arguments of some other type. */
4473 return error_mark_node;
4475 else
4477 tree decl;
4479 decl = ((TREE_CODE (expr) == ADDR_EXPR)
4480 ? TREE_OPERAND (expr, 0) : expr);
4481 if (TREE_CODE (decl) != VAR_DECL)
4483 error ("%qE is not a valid template argument of type %qT "
4484 "because %qE is not a variable",
4485 expr, type, decl);
4486 return NULL_TREE;
4488 else if (!DECL_EXTERNAL_LINKAGE_P (decl))
4490 error ("%qE is not a valid template argument of type %qT "
4491 "because %qD does not have external linkage",
4492 expr, type, decl);
4493 return NULL_TREE;
4497 expr = decay_conversion (expr);
4498 if (expr == error_mark_node)
4499 return error_mark_node;
4501 expr = perform_qualification_conversions (type, expr);
4502 if (expr == error_mark_node)
4503 return error_mark_node;
4505 /* [temp.arg.nontype]/5, bullet 3
4507 For a non-type template-parameter of type reference to object, no
4508 conversions apply. The type referred to by the reference may be more
4509 cv-qualified than the (otherwise identical) type of the
4510 template-argument. The template-parameter is bound directly to the
4511 template-argument, which must be an lvalue. */
4512 else if (TYPE_REF_OBJ_P (type))
4514 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
4515 expr_type))
4516 return error_mark_node;
4518 if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
4520 error ("%qE is not a valid template argument for type %qT "
4521 "because of conflicts in cv-qualification", expr, type);
4522 return NULL_TREE;
4525 if (!real_lvalue_p (expr))
4527 error ("%qE is not a valid template argument for type %qT "
4528 "because it is not an lvalue", expr, type);
4529 return NULL_TREE;
4532 /* [temp.arg.nontype]/1
4534 A template-argument for a non-type, non-template template-parameter
4535 shall be one of: [...]
4537 -- the address of an object or function with external linkage. */
4538 if (!DECL_EXTERNAL_LINKAGE_P (expr))
4540 error ("%qE is not a valid template argument for type %qT "
4541 "because object %qD has not external linkage",
4542 expr, type, expr);
4543 return NULL_TREE;
4546 expr = build_nop (type, build_address (expr));
4548 /* [temp.arg.nontype]/5, bullet 4
4550 For a non-type template-parameter of type pointer to function, only
4551 the function-to-pointer conversion (_conv.func_) is applied. If the
4552 template-argument represents a set of overloaded functions (or a
4553 pointer to such), the matching function is selected from the set
4554 (_over.over_). */
4555 else if (TYPE_PTRFN_P (type))
4557 /* If the argument is a template-id, we might not have enough
4558 context information to decay the pointer. */
4559 if (!type_unknown_p (expr_type))
4561 expr = decay_conversion (expr);
4562 if (expr == error_mark_node)
4563 return error_mark_node;
4566 expr = convert_nontype_argument_function (type, expr);
4567 if (!expr || expr == error_mark_node)
4568 return expr;
4570 /* [temp.arg.nontype]/5, bullet 5
4572 For a non-type template-parameter of type reference to function, no
4573 conversions apply. If the template-argument represents a set of
4574 overloaded functions, the matching function is selected from the set
4575 (_over.over_). */
4576 else if (TYPE_REFFN_P (type))
4578 if (TREE_CODE (expr) == ADDR_EXPR)
4580 error ("%qE is not a valid template argument for type %qT "
4581 "because it is a pointer", expr, type);
4582 inform ("try using %qE instead", TREE_OPERAND (expr, 0));
4583 return NULL_TREE;
4586 expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
4587 if (!expr || expr == error_mark_node)
4588 return expr;
4590 expr = build_nop (type, build_address (expr));
4592 /* [temp.arg.nontype]/5, bullet 6
4594 For a non-type template-parameter of type pointer to member function,
4595 no conversions apply. If the template-argument represents a set of
4596 overloaded member functions, the matching member function is selected
4597 from the set (_over.over_). */
4598 else if (TYPE_PTRMEMFUNC_P (type))
4600 expr = instantiate_type (type, expr, tf_none);
4601 if (expr == error_mark_node)
4602 return error_mark_node;
4604 /* There is no way to disable standard conversions in
4605 resolve_address_of_overloaded_function (called by
4606 instantiate_type). It is possible that the call succeeded by
4607 converting &B::I to &D::I (where B is a base of D), so we need
4608 to reject this conversion here.
4610 Actually, even if there was a way to disable standard conversions,
4611 it would still be better to reject them here so that we can
4612 provide a superior diagnostic. */
4613 if (!same_type_p (TREE_TYPE (expr), type))
4615 /* Make sure we are just one standard conversion off. */
4616 gcc_assert (can_convert (type, TREE_TYPE (expr)));
4617 error ("%qE is not a valid template argument for type %qT "
4618 "because it is of type %qT", expr, type,
4619 TREE_TYPE (expr));
4620 inform ("standard conversions are not allowed in this context");
4621 return NULL_TREE;
4624 /* [temp.arg.nontype]/5, bullet 7
4626 For a non-type template-parameter of type pointer to data member,
4627 qualification conversions (_conv.qual_) are applied. */
4628 else if (TYPE_PTRMEM_P (type))
4630 expr = perform_qualification_conversions (type, expr);
4631 if (expr == error_mark_node)
4632 return expr;
4634 /* A template non-type parameter must be one of the above. */
4635 else
4636 gcc_unreachable ();
4638 /* Sanity check: did we actually convert the argument to the
4639 right type? */
4640 gcc_assert (same_type_p (type, TREE_TYPE (expr)));
4641 return expr;
4645 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
4646 template template parameters. Both PARM_PARMS and ARG_PARMS are
4647 vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
4648 or PARM_DECL.
4650 Consider the example:
4651 template <class T> class A;
4652 template<template <class U> class TT> class B;
4654 For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
4655 the parameters to A, and OUTER_ARGS contains A. */
4657 static int
4658 coerce_template_template_parms (tree parm_parms,
4659 tree arg_parms,
4660 tsubst_flags_t complain,
4661 tree in_decl,
4662 tree outer_args)
4664 int nparms, nargs, i;
4665 tree parm, arg;
4667 gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
4668 gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
4670 nparms = TREE_VEC_LENGTH (parm_parms);
4671 nargs = TREE_VEC_LENGTH (arg_parms);
4673 if (nargs != nparms)
4674 return 0;
4676 for (i = 0; i < nparms; ++i)
4678 if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
4679 || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
4680 continue;
4682 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
4683 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
4685 if (arg == NULL_TREE || arg == error_mark_node
4686 || parm == NULL_TREE || parm == error_mark_node)
4687 return 0;
4689 if (TREE_CODE (arg) != TREE_CODE (parm))
4690 return 0;
4692 switch (TREE_CODE (parm))
4694 case TEMPLATE_DECL:
4695 /* We encounter instantiations of templates like
4696 template <template <template <class> class> class TT>
4697 class C; */
4699 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4700 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
4702 if (!coerce_template_template_parms
4703 (parmparm, argparm, complain, in_decl, outer_args))
4704 return 0;
4706 /* Fall through. */
4708 case TYPE_DECL:
4709 if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))
4710 != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg)))
4711 /* One is a parameter pack, the other is not. */
4712 return 0;
4713 break;
4715 case PARM_DECL:
4716 /* The tsubst call is used to handle cases such as
4718 template <int> class C {};
4719 template <class T, template <T> class TT> class D {};
4720 D<int, C> d;
4722 i.e. the parameter list of TT depends on earlier parameters. */
4723 if (!dependent_type_p (TREE_TYPE (arg))
4724 && !same_type_p
4725 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
4726 TREE_TYPE (arg)))
4727 return 0;
4729 if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
4730 != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg)))
4731 /* One is a parameter pack, the other is not. */
4732 return 0;
4733 break;
4735 default:
4736 gcc_unreachable ();
4739 return 1;
4742 /* Verifies that the deduced template arguments (in TARGS) for the
4743 template template parameters (in TPARMS) represent valid bindings,
4744 by comparing the template parameter list of each template argument
4745 to the template parameter list of its corresponding template
4746 template parameter, in accordance with DR150. This
4747 routine can only be called after all template arguments have been
4748 deduced. It will return TRUE if all of the template template
4749 parameter bindings are okay, FALSE otherwise. */
4750 bool
4751 template_template_parm_bindings_ok_p (tree tparms, tree targs)
4753 int i, ntparms = TREE_VEC_LENGTH (tparms);
4755 targs = INNERMOST_TEMPLATE_ARGS (targs);
4757 for (i = 0; i < ntparms; ++i)
4759 tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
4760 tree targ = TREE_VEC_ELT (targs, i);
4762 if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
4764 tree packed_args = NULL_TREE;
4765 int idx, len = 1;
4767 if (ARGUMENT_PACK_P (targ))
4769 /* Look inside the argument pack. */
4770 packed_args = ARGUMENT_PACK_ARGS (targ);
4771 len = TREE_VEC_LENGTH (packed_args);
4774 for (idx = 0; idx < len; ++idx)
4776 tree targ_parms = NULL_TREE;
4778 if (packed_args)
4779 /* Extract the next argument from the argument
4780 pack. */
4781 targ = TREE_VEC_ELT (packed_args, idx);
4783 if (PACK_EXPANSION_P (targ))
4784 /* Look at the pattern of the pack expansion. */
4785 targ = PACK_EXPANSION_PATTERN (targ);
4787 /* Extract the template parameters from the template
4788 argument. */
4789 if (TREE_CODE (targ) == TEMPLATE_DECL)
4790 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
4791 else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
4792 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
4794 /* Verify that we can coerce the template template
4795 parameters from the template argument to the template
4796 parameter. This requires an exact match. */
4797 if (targ_parms
4798 && !coerce_template_template_parms
4799 (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
4800 targ_parms,
4801 tf_none,
4802 tparm,
4803 targs))
4804 return false;
4809 /* Everything is okay. */
4810 return true;
4813 /* Convert the indicated template ARG as necessary to match the
4814 indicated template PARM. Returns the converted ARG, or
4815 error_mark_node if the conversion was unsuccessful. Error and
4816 warning messages are issued under control of COMPLAIN. This
4817 conversion is for the Ith parameter in the parameter list. ARGS is
4818 the full set of template arguments deduced so far. */
4820 static tree
4821 convert_template_argument (tree parm,
4822 tree arg,
4823 tree args,
4824 tsubst_flags_t complain,
4825 int i,
4826 tree in_decl)
4828 tree orig_arg;
4829 tree val;
4830 int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
4832 if (TREE_CODE (arg) == TREE_LIST
4833 && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
4835 /* The template argument was the name of some
4836 member function. That's usually
4837 invalid, but static members are OK. In any
4838 case, grab the underlying fields/functions
4839 and issue an error later if required. */
4840 orig_arg = TREE_VALUE (arg);
4841 TREE_TYPE (arg) = unknown_type_node;
4844 orig_arg = arg;
4846 requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
4847 requires_type = (TREE_CODE (parm) == TYPE_DECL
4848 || requires_tmpl_type);
4850 /* When determining whether an argument pack expansion is a template,
4851 look at the pattern. */
4852 if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
4853 arg = PACK_EXPANSION_PATTERN (arg);
4855 is_tmpl_type =
4856 ((TREE_CODE (arg) == TEMPLATE_DECL
4857 && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
4858 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4859 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
4861 if (is_tmpl_type
4862 && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4863 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
4864 arg = TYPE_STUB_DECL (arg);
4866 is_type = TYPE_P (arg) || is_tmpl_type;
4868 if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
4869 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
4871 pedwarn ("to refer to a type member of a template parameter, "
4872 "use %<typename %E%>", orig_arg);
4874 orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
4875 TREE_OPERAND (arg, 1),
4876 typename_type,
4877 complain & tf_error);
4878 arg = orig_arg;
4879 is_type = 1;
4881 if (is_type != requires_type)
4883 if (in_decl)
4885 if (complain & tf_error)
4887 error ("type/value mismatch at argument %d in template "
4888 "parameter list for %qD",
4889 i + 1, in_decl);
4890 if (is_type)
4891 error (" expected a constant of type %qT, got %qT",
4892 TREE_TYPE (parm),
4893 (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
4894 else if (requires_tmpl_type)
4895 error (" expected a class template, got %qE", orig_arg);
4896 else
4897 error (" expected a type, got %qE", orig_arg);
4900 return error_mark_node;
4902 if (is_tmpl_type ^ requires_tmpl_type)
4904 if (in_decl && (complain & tf_error))
4906 error ("type/value mismatch at argument %d in template "
4907 "parameter list for %qD",
4908 i + 1, in_decl);
4909 if (is_tmpl_type)
4910 error (" expected a type, got %qT", DECL_NAME (arg));
4911 else
4912 error (" expected a class template, got %qT", orig_arg);
4914 return error_mark_node;
4917 if (is_type)
4919 if (requires_tmpl_type)
4921 if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
4922 /* The number of argument required is not known yet.
4923 Just accept it for now. */
4924 val = TREE_TYPE (arg);
4925 else
4927 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4928 tree argparm;
4930 argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
4932 if (coerce_template_template_parms (parmparm, argparm,
4933 complain, in_decl,
4934 args))
4936 val = orig_arg;
4938 /* TEMPLATE_TEMPLATE_PARM node is preferred over
4939 TEMPLATE_DECL. */
4940 if (val != error_mark_node)
4942 if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
4943 val = TREE_TYPE (val);
4944 else if (TREE_CODE (val) == TYPE_PACK_EXPANSION
4945 && DECL_TEMPLATE_TEMPLATE_PARM_P (arg))
4947 val = TREE_TYPE (arg);
4948 val = make_pack_expansion (val);
4952 else
4954 if (in_decl && (complain & tf_error))
4956 error ("type/value mismatch at argument %d in "
4957 "template parameter list for %qD",
4958 i + 1, in_decl);
4959 error (" expected a template of type %qD, got %qD",
4960 parm, orig_arg);
4963 val = error_mark_node;
4967 else
4968 val = orig_arg;
4969 /* We only form one instance of each template specialization.
4970 Therefore, if we use a non-canonical variant (i.e., a
4971 typedef), any future messages referring to the type will use
4972 the typedef, which is confusing if those future uses do not
4973 themselves also use the typedef. */
4974 if (TYPE_P (val))
4975 val = canonical_type_variant (val);
4977 else
4979 tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
4981 if (invalid_nontype_parm_type_p (t, complain))
4982 return error_mark_node;
4984 if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
4985 /* We used to call digest_init here. However, digest_init
4986 will report errors, which we don't want when complain
4987 is zero. More importantly, digest_init will try too
4988 hard to convert things: for example, `0' should not be
4989 converted to pointer type at this point according to
4990 the standard. Accepting this is not merely an
4991 extension, since deciding whether or not these
4992 conversions can occur is part of determining which
4993 function template to call, or whether a given explicit
4994 argument specification is valid. */
4995 val = convert_nontype_argument (t, orig_arg);
4996 else
4997 val = orig_arg;
4999 if (val == NULL_TREE)
5000 val = error_mark_node;
5001 else if (val == error_mark_node && (complain & tf_error))
5002 error ("could not convert template argument %qE to %qT", orig_arg, t);
5005 return val;
5008 /* Coerces the remaining template arguments in INNER_ARGS (from
5009 ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
5010 Returns the coerced argument pack. PARM_IDX is the position of this
5011 parameter in the template parameter list. ARGS is the original
5012 template argument list. */
5013 static tree
5014 coerce_template_parameter_pack (tree parms,
5015 int parm_idx,
5016 tree args,
5017 tree inner_args,
5018 int arg_idx,
5019 tree new_args,
5020 int* lost,
5021 tree in_decl,
5022 tsubst_flags_t complain)
5024 tree parm = TREE_VEC_ELT (parms, parm_idx);
5025 int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5026 tree packed_args;
5027 tree argument_pack;
5028 tree packed_types = NULL_TREE;
5030 if (arg_idx > nargs)
5031 arg_idx = nargs;
5033 packed_args = make_tree_vec (nargs - arg_idx);
5035 if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
5036 && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
5038 /* When the template parameter is a non-type template
5039 parameter pack whose type uses parameter packs, we need
5040 to look at each of the template arguments
5041 separately. Build a vector of the types for these
5042 non-type template parameters in PACKED_TYPES. */
5043 tree expansion
5044 = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
5045 packed_types = tsubst_pack_expansion (expansion, args,
5046 complain, in_decl);
5048 if (packed_types == error_mark_node)
5049 return error_mark_node;
5051 /* Check that we have the right number of arguments. */
5052 if (arg_idx < nargs
5053 && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
5054 && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
5056 int needed_parms
5057 = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
5058 error ("wrong number of template arguments (%d, should be %d)",
5059 nargs, needed_parms);
5060 return error_mark_node;
5063 /* If we aren't able to check the actual arguments now
5064 (because they haven't been expanded yet), we can at least
5065 verify that all of the types used for the non-type
5066 template parameter pack are, in fact, valid for non-type
5067 template parameters. */
5068 if (arg_idx < nargs
5069 && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
5071 int j, len = TREE_VEC_LENGTH (packed_types);
5072 for (j = 0; j < len; ++j)
5074 tree t = TREE_VEC_ELT (packed_types, j);
5075 if (invalid_nontype_parm_type_p (t, complain))
5076 return error_mark_node;
5081 /* Convert the remaining arguments, which will be a part of the
5082 parameter pack "parm". */
5083 for (; arg_idx < nargs; ++arg_idx)
5085 tree arg = TREE_VEC_ELT (inner_args, arg_idx);
5086 tree actual_parm = TREE_VALUE (parm);
5088 if (packed_types && !PACK_EXPANSION_P (arg))
5090 /* When we have a vector of types (corresponding to the
5091 non-type template parameter pack that uses parameter
5092 packs in its type, as mention above), and the
5093 argument is not an expansion (which expands to a
5094 currently unknown number of arguments), clone the
5095 parm and give it the next type in PACKED_TYPES. */
5096 actual_parm = copy_node (actual_parm);
5097 TREE_TYPE (actual_parm) =
5098 TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
5101 if (arg != error_mark_node)
5102 arg = convert_template_argument (actual_parm,
5103 arg, new_args, complain, parm_idx,
5104 in_decl);
5105 if (arg == error_mark_node)
5106 (*lost)++;
5107 TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg;
5110 if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
5111 || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
5112 argument_pack = make_node (TYPE_ARGUMENT_PACK);
5113 else
5115 argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
5116 TREE_TYPE (argument_pack)
5117 = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
5118 TREE_CONSTANT (argument_pack) = 1;
5121 SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
5122 return argument_pack;
5125 /* Convert all template arguments to their appropriate types, and
5126 return a vector containing the innermost resulting template
5127 arguments. If any error occurs, return error_mark_node. Error and
5128 warning messages are issued under control of COMPLAIN.
5130 If REQUIRE_ALL_ARGS is false, argument deduction will be performed
5131 for arguments not specified in ARGS. Otherwise, if
5132 USE_DEFAULT_ARGS is true, default arguments will be used to fill in
5133 unspecified arguments. If REQUIRE_ALL_ARGS is true, but
5134 USE_DEFAULT_ARGS is false, then all arguments must be specified in
5135 ARGS. */
5137 static tree
5138 coerce_template_parms (tree parms,
5139 tree args,
5140 tree in_decl,
5141 tsubst_flags_t complain,
5142 bool require_all_args,
5143 bool use_default_args)
5145 int nparms, nargs, parm_idx, arg_idx, lost = 0;
5146 tree inner_args;
5147 tree new_args;
5148 tree new_inner_args;
5149 bool saved_skip_evaluation;
5151 /* When used as a boolean value, indicates whether this is a
5152 variadic template parameter list. Since it's an int, we can also
5153 subtract it from nparms to get the number of non-variadic
5154 parameters. */
5155 int variadic_p = 0;
5157 inner_args
5158 = expand_template_argument_pack (INNERMOST_TEMPLATE_ARGS (args));
5160 nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5161 nparms = TREE_VEC_LENGTH (parms);
5163 /* Determine if there are any parameter packs. */
5164 for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
5166 tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
5167 if (template_parameter_pack_p (tparm))
5169 variadic_p = 1;
5170 break;
5174 if ((nargs > nparms - variadic_p && !variadic_p)
5175 || (nargs < nparms - variadic_p
5176 && require_all_args
5177 && (!use_default_args
5178 || (TREE_VEC_ELT (parms, nargs) != error_mark_node
5179 && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
5181 if (complain & tf_error)
5183 const char *or_more = "";
5184 if (variadic_p)
5186 or_more = " or more";
5187 --nparms;
5190 error ("wrong number of template arguments (%d, should be %d%s)",
5191 nargs, nparms, or_more);
5193 if (in_decl)
5194 error ("provided for %q+D", in_decl);
5197 return error_mark_node;
5200 /* We need to evaluate the template arguments, even though this
5201 template-id may be nested within a "sizeof". */
5202 saved_skip_evaluation = skip_evaluation;
5203 skip_evaluation = false;
5204 new_inner_args = make_tree_vec (nparms);
5205 new_args = add_outermost_template_args (args, new_inner_args);
5206 for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
5208 tree arg;
5209 tree parm;
5211 /* Get the Ith template parameter. */
5212 parm = TREE_VEC_ELT (parms, parm_idx);
5214 if (parm == error_mark_node)
5216 TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
5217 continue;
5220 /* Calculate the next argument. */
5221 if (template_parameter_pack_p (TREE_VALUE (parm)))
5223 /* All remaining arguments will be placed in the
5224 template parameter pack PARM. */
5225 arg = coerce_template_parameter_pack (parms, parm_idx, args,
5226 inner_args, arg_idx,
5227 new_args, &lost,
5228 in_decl, complain);
5230 /* Store this argument. */
5231 if (arg == error_mark_node)
5232 lost++;
5233 TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
5235 /* We are done with all of the arguments. */
5236 arg_idx = nargs;
5238 continue;
5240 else if (arg_idx < nargs)
5242 arg = TREE_VEC_ELT (inner_args, arg_idx);
5244 if (arg && PACK_EXPANSION_P (arg))
5246 if (complain & tf_error)
5248 /* If ARG is a pack expansion, but PARM is not a
5249 template parameter pack (if it were, we would have
5250 handled it above), we're trying to expand into a
5251 fixed-length argument list. */
5252 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
5253 error ("cannot expand %<%E%> into a fixed-length "
5254 "argument list", arg);
5255 else
5256 error ("cannot expand %<%T%> into a fixed-length "
5257 "argument list", arg);
5259 return error_mark_node;
5262 else if (require_all_args)
5263 /* There must be a default arg in this case. */
5264 arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
5265 complain, in_decl);
5266 else
5267 break;
5269 if (arg == error_mark_node)
5271 if (complain & tf_error)
5272 error ("template argument %d is invalid", arg_idx + 1);
5274 else if (!arg)
5275 /* This only occurs if there was an error in the template
5276 parameter list itself (which we would already have
5277 reported) that we are trying to recover from, e.g., a class
5278 template with a parameter list such as
5279 template<typename..., typename>. */
5280 return error_mark_node;
5281 else
5282 arg = convert_template_argument (TREE_VALUE (parm),
5283 arg, new_args, complain,
5284 parm_idx, in_decl);
5286 if (arg == error_mark_node)
5287 lost++;
5288 TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
5290 skip_evaluation = saved_skip_evaluation;
5292 if (lost)
5293 return error_mark_node;
5295 return new_inner_args;
5298 /* Returns 1 if template args OT and NT are equivalent. */
5300 static int
5301 template_args_equal (tree ot, tree nt)
5303 if (nt == ot)
5304 return 1;
5306 if (TREE_CODE (nt) == TREE_VEC)
5307 /* For member templates */
5308 return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
5309 else if (PACK_EXPANSION_P (ot))
5310 return PACK_EXPANSION_P (nt)
5311 && template_args_equal (PACK_EXPANSION_PATTERN (ot),
5312 PACK_EXPANSION_PATTERN (nt));
5313 else if (TYPE_P (nt))
5314 return TYPE_P (ot) && same_type_p (ot, nt);
5315 else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
5316 return 0;
5317 else
5318 return cp_tree_equal (ot, nt);
5321 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
5322 of template arguments. Returns 0 otherwise. */
5325 comp_template_args (tree oldargs, tree newargs)
5327 int i;
5329 oldargs = expand_template_argument_pack (oldargs);
5330 newargs = expand_template_argument_pack (newargs);
5332 if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
5333 return 0;
5335 for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
5337 tree nt = TREE_VEC_ELT (newargs, i);
5338 tree ot = TREE_VEC_ELT (oldargs, i);
5340 if (! template_args_equal (ot, nt))
5341 return 0;
5343 return 1;
5346 static void
5347 add_pending_template (tree d)
5349 tree ti = (TYPE_P (d)
5350 ? CLASSTYPE_TEMPLATE_INFO (d)
5351 : DECL_TEMPLATE_INFO (d));
5352 struct pending_template *pt;
5353 int level;
5355 if (TI_PENDING_TEMPLATE_FLAG (ti))
5356 return;
5358 /* We are called both from instantiate_decl, where we've already had a
5359 tinst_level pushed, and instantiate_template, where we haven't.
5360 Compensate. */
5361 level = !current_tinst_level || current_tinst_level->decl != d;
5363 if (level)
5364 push_tinst_level (d);
5366 pt = GGC_NEW (struct pending_template);
5367 pt->next = NULL;
5368 pt->tinst = current_tinst_level;
5369 if (last_pending_template)
5370 last_pending_template->next = pt;
5371 else
5372 pending_templates = pt;
5374 last_pending_template = pt;
5376 TI_PENDING_TEMPLATE_FLAG (ti) = 1;
5378 if (level)
5379 pop_tinst_level ();
5383 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
5384 ARGLIST. Valid choices for FNS are given in the cp-tree.def
5385 documentation for TEMPLATE_ID_EXPR. */
5387 tree
5388 lookup_template_function (tree fns, tree arglist)
5390 tree type;
5392 if (fns == error_mark_node || arglist == error_mark_node)
5393 return error_mark_node;
5395 gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
5396 gcc_assert (fns && (is_overloaded_fn (fns)
5397 || TREE_CODE (fns) == IDENTIFIER_NODE));
5399 if (BASELINK_P (fns))
5401 BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
5402 unknown_type_node,
5403 BASELINK_FUNCTIONS (fns),
5404 arglist);
5405 return fns;
5408 type = TREE_TYPE (fns);
5409 if (TREE_CODE (fns) == OVERLOAD || !type)
5410 type = unknown_type_node;
5412 return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
5415 /* Within the scope of a template class S<T>, the name S gets bound
5416 (in build_self_reference) to a TYPE_DECL for the class, not a
5417 TEMPLATE_DECL. If DECL is a TYPE_DECL for current_class_type,
5418 or one of its enclosing classes, and that type is a template,
5419 return the associated TEMPLATE_DECL. Otherwise, the original
5420 DECL is returned. */
5422 tree
5423 maybe_get_template_decl_from_type_decl (tree decl)
5425 return (decl != NULL_TREE
5426 && TREE_CODE (decl) == TYPE_DECL
5427 && DECL_ARTIFICIAL (decl)
5428 && CLASS_TYPE_P (TREE_TYPE (decl))
5429 && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
5430 ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
5433 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
5434 parameters, find the desired type.
5436 D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
5438 IN_DECL, if non-NULL, is the template declaration we are trying to
5439 instantiate.
5441 If ENTERING_SCOPE is nonzero, we are about to enter the scope of
5442 the class we are looking up.
5444 Issue error and warning messages under control of COMPLAIN.
5446 If the template class is really a local class in a template
5447 function, then the FUNCTION_CONTEXT is the function in which it is
5448 being instantiated.
5450 ??? Note that this function is currently called *twice* for each
5451 template-id: the first time from the parser, while creating the
5452 incomplete type (finish_template_type), and the second type during the
5453 real instantiation (instantiate_template_class). This is surely something
5454 that we want to avoid. It also causes some problems with argument
5455 coercion (see convert_nontype_argument for more information on this). */
5457 tree
5458 lookup_template_class (tree d1,
5459 tree arglist,
5460 tree in_decl,
5461 tree context,
5462 int entering_scope,
5463 tsubst_flags_t complain)
5465 tree template = NULL_TREE, parmlist;
5466 tree t;
5468 timevar_push (TV_NAME_LOOKUP);
5470 if (TREE_CODE (d1) == IDENTIFIER_NODE)
5472 tree value = innermost_non_namespace_value (d1);
5473 if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
5474 template = value;
5475 else
5477 if (context)
5478 push_decl_namespace (context);
5479 template = lookup_name (d1);
5480 template = maybe_get_template_decl_from_type_decl (template);
5481 if (context)
5482 pop_decl_namespace ();
5484 if (template)
5485 context = DECL_CONTEXT (template);
5487 else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
5489 tree type = TREE_TYPE (d1);
5491 /* If we are declaring a constructor, say A<T>::A<T>, we will get
5492 an implicit typename for the second A. Deal with it. */
5493 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5494 type = TREE_TYPE (type);
5496 if (CLASSTYPE_TEMPLATE_INFO (type))
5498 template = CLASSTYPE_TI_TEMPLATE (type);
5499 d1 = DECL_NAME (template);
5502 else if (TREE_CODE (d1) == ENUMERAL_TYPE
5503 || (TYPE_P (d1) && IS_AGGR_TYPE (d1)))
5505 template = TYPE_TI_TEMPLATE (d1);
5506 d1 = DECL_NAME (template);
5508 else if (TREE_CODE (d1) == TEMPLATE_DECL
5509 && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
5511 template = d1;
5512 d1 = DECL_NAME (template);
5513 context = DECL_CONTEXT (template);
5516 /* Issue an error message if we didn't find a template. */
5517 if (! template)
5519 if (complain & tf_error)
5520 error ("%qT is not a template", d1);
5521 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5524 if (TREE_CODE (template) != TEMPLATE_DECL
5525 /* Make sure it's a user visible template, if it was named by
5526 the user. */
5527 || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (template)
5528 && !PRIMARY_TEMPLATE_P (template)))
5530 if (complain & tf_error)
5532 error ("non-template type %qT used as a template", d1);
5533 if (in_decl)
5534 error ("for template declaration %q+D", in_decl);
5536 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5539 complain &= ~tf_user;
5541 if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
5543 /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
5544 template arguments */
5546 tree parm;
5547 tree arglist2;
5548 tree outer;
5550 parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
5552 /* Consider an example where a template template parameter declared as
5554 template <class T, class U = std::allocator<T> > class TT
5556 The template parameter level of T and U are one level larger than
5557 of TT. To proper process the default argument of U, say when an
5558 instantiation `TT<int>' is seen, we need to build the full
5559 arguments containing {int} as the innermost level. Outer levels,
5560 available when not appearing as default template argument, can be
5561 obtained from the arguments of the enclosing template.
5563 Suppose that TT is later substituted with std::vector. The above
5564 instantiation is `TT<int, std::allocator<T> >' with TT at
5565 level 1, and T at level 2, while the template arguments at level 1
5566 becomes {std::vector} and the inner level 2 is {int}. */
5568 outer = DECL_CONTEXT (template);
5569 if (outer)
5570 outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
5571 else if (current_template_parms)
5572 /* This is an argument of the current template, so we haven't set
5573 DECL_CONTEXT yet. */
5574 outer = current_template_args ();
5576 if (outer)
5577 arglist = add_to_template_args (outer, arglist);
5579 arglist2 = coerce_template_parms (parmlist, arglist, template,
5580 complain,
5581 /*require_all_args=*/true,
5582 /*use_default_args=*/true);
5583 if (arglist2 == error_mark_node
5584 || (!uses_template_parms (arglist2)
5585 && check_instantiated_args (template, arglist2, complain)))
5586 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5588 parm = bind_template_template_parm (TREE_TYPE (template), arglist2);
5589 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
5591 else
5593 tree template_type = TREE_TYPE (template);
5594 tree gen_tmpl;
5595 tree type_decl;
5596 tree found = NULL_TREE;
5597 int arg_depth;
5598 int parm_depth;
5599 int is_partial_instantiation;
5601 gen_tmpl = most_general_template (template);
5602 parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
5603 parm_depth = TMPL_PARMS_DEPTH (parmlist);
5604 arg_depth = TMPL_ARGS_DEPTH (arglist);
5606 if (arg_depth == 1 && parm_depth > 1)
5608 /* We've been given an incomplete set of template arguments.
5609 For example, given:
5611 template <class T> struct S1 {
5612 template <class U> struct S2 {};
5613 template <class U> struct S2<U*> {};
5616 we will be called with an ARGLIST of `U*', but the
5617 TEMPLATE will be `template <class T> template
5618 <class U> struct S1<T>::S2'. We must fill in the missing
5619 arguments. */
5620 arglist
5621 = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
5622 arglist);
5623 arg_depth = TMPL_ARGS_DEPTH (arglist);
5626 /* Now we should have enough arguments. */
5627 gcc_assert (parm_depth == arg_depth);
5629 /* From here on, we're only interested in the most general
5630 template. */
5631 template = gen_tmpl;
5633 /* Calculate the BOUND_ARGS. These will be the args that are
5634 actually tsubst'd into the definition to create the
5635 instantiation. */
5636 if (parm_depth > 1)
5638 /* We have multiple levels of arguments to coerce, at once. */
5639 int i;
5640 int saved_depth = TMPL_ARGS_DEPTH (arglist);
5642 tree bound_args = make_tree_vec (parm_depth);
5644 for (i = saved_depth,
5645 t = DECL_TEMPLATE_PARMS (template);
5646 i > 0 && t != NULL_TREE;
5647 --i, t = TREE_CHAIN (t))
5649 tree a = coerce_template_parms (TREE_VALUE (t),
5650 arglist, template,
5651 complain,
5652 /*require_all_args=*/true,
5653 /*use_default_args=*/true);
5655 /* Don't process further if one of the levels fails. */
5656 if (a == error_mark_node)
5658 /* Restore the ARGLIST to its full size. */
5659 TREE_VEC_LENGTH (arglist) = saved_depth;
5660 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5663 SET_TMPL_ARGS_LEVEL (bound_args, i, a);
5665 /* We temporarily reduce the length of the ARGLIST so
5666 that coerce_template_parms will see only the arguments
5667 corresponding to the template parameters it is
5668 examining. */
5669 TREE_VEC_LENGTH (arglist)--;
5672 /* Restore the ARGLIST to its full size. */
5673 TREE_VEC_LENGTH (arglist) = saved_depth;
5675 arglist = bound_args;
5677 else
5678 arglist
5679 = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
5680 INNERMOST_TEMPLATE_ARGS (arglist),
5681 template,
5682 complain,
5683 /*require_all_args=*/true,
5684 /*use_default_args=*/true);
5686 if (arglist == error_mark_node)
5687 /* We were unable to bind the arguments. */
5688 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5690 /* In the scope of a template class, explicit references to the
5691 template class refer to the type of the template, not any
5692 instantiation of it. For example, in:
5694 template <class T> class C { void f(C<T>); }
5696 the `C<T>' is just the same as `C'. Outside of the
5697 class, however, such a reference is an instantiation. */
5698 if (comp_template_args (TYPE_TI_ARGS (template_type),
5699 arglist))
5701 found = template_type;
5703 if (!entering_scope && PRIMARY_TEMPLATE_P (template))
5705 tree ctx;
5707 for (ctx = current_class_type;
5708 ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
5709 ctx = (TYPE_P (ctx)
5710 ? TYPE_CONTEXT (ctx)
5711 : DECL_CONTEXT (ctx)))
5712 if (TYPE_P (ctx) && same_type_p (ctx, template_type))
5713 goto found_ctx;
5715 /* We're not in the scope of the class, so the
5716 TEMPLATE_TYPE is not the type we want after all. */
5717 found = NULL_TREE;
5718 found_ctx:;
5721 if (found)
5722 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5724 /* If we already have this specialization, return it. */
5725 found = retrieve_specialization (template, arglist,
5726 /*class_specializations_p=*/false);
5727 if (found)
5728 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5730 /* This type is a "partial instantiation" if any of the template
5731 arguments still involve template parameters. Note that we set
5732 IS_PARTIAL_INSTANTIATION for partial specializations as
5733 well. */
5734 is_partial_instantiation = uses_template_parms (arglist);
5736 /* If the deduced arguments are invalid, then the binding
5737 failed. */
5738 if (!is_partial_instantiation
5739 && check_instantiated_args (template,
5740 INNERMOST_TEMPLATE_ARGS (arglist),
5741 complain))
5742 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5744 if (!is_partial_instantiation
5745 && !PRIMARY_TEMPLATE_P (template)
5746 && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
5748 found = xref_tag_from_type (TREE_TYPE (template),
5749 DECL_NAME (template),
5750 /*tag_scope=*/ts_global);
5751 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5754 context = tsubst (DECL_CONTEXT (template), arglist,
5755 complain, in_decl);
5756 if (!context)
5757 context = global_namespace;
5759 /* Create the type. */
5760 if (TREE_CODE (template_type) == ENUMERAL_TYPE)
5762 if (!is_partial_instantiation)
5764 set_current_access_from_decl (TYPE_NAME (template_type));
5765 t = start_enum (TYPE_IDENTIFIER (template_type));
5767 else
5768 /* We don't want to call start_enum for this type, since
5769 the values for the enumeration constants may involve
5770 template parameters. And, no one should be interested
5771 in the enumeration constants for such a type. */
5772 t = make_node (ENUMERAL_TYPE);
5774 else
5776 t = make_aggr_type (TREE_CODE (template_type));
5777 CLASSTYPE_DECLARED_CLASS (t)
5778 = CLASSTYPE_DECLARED_CLASS (template_type);
5779 SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
5780 TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
5782 /* A local class. Make sure the decl gets registered properly. */
5783 if (context == current_function_decl)
5784 pushtag (DECL_NAME (template), t, /*tag_scope=*/ts_current);
5786 if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
5787 /* This instantiation is another name for the primary
5788 template type. Set the TYPE_CANONICAL field
5789 appropriately. */
5790 TYPE_CANONICAL (t) = template_type;
5791 else if (any_template_arguments_need_structural_equality_p (arglist))
5792 /* Some of the template arguments require structural
5793 equality testing, so this template class requires
5794 structural equality testing. */
5795 SET_TYPE_STRUCTURAL_EQUALITY (t);
5798 /* If we called start_enum or pushtag above, this information
5799 will already be set up. */
5800 if (!TYPE_NAME (t))
5802 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5804 type_decl = create_implicit_typedef (DECL_NAME (template), t);
5805 DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
5806 TYPE_STUB_DECL (t) = type_decl;
5807 DECL_SOURCE_LOCATION (type_decl)
5808 = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
5810 else
5811 type_decl = TYPE_NAME (t);
5813 TREE_PRIVATE (type_decl)
5814 = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
5815 TREE_PROTECTED (type_decl)
5816 = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
5817 DECL_IN_SYSTEM_HEADER (type_decl)
5818 = DECL_IN_SYSTEM_HEADER (template);
5819 if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
5821 DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
5822 DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
5825 /* Set up the template information. We have to figure out which
5826 template is the immediate parent if this is a full
5827 instantiation. */
5828 if (parm_depth == 1 || is_partial_instantiation
5829 || !PRIMARY_TEMPLATE_P (template))
5830 /* This case is easy; there are no member templates involved. */
5831 found = template;
5832 else
5834 /* This is a full instantiation of a member template. Look
5835 for a partial instantiation of which this is an instance. */
5837 for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
5838 found; found = TREE_CHAIN (found))
5840 int success;
5841 tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
5843 /* We only want partial instantiations, here, not
5844 specializations or full instantiations. */
5845 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
5846 || !uses_template_parms (TREE_VALUE (found)))
5847 continue;
5849 /* Temporarily reduce by one the number of levels in the
5850 ARGLIST and in FOUND so as to avoid comparing the
5851 last set of arguments. */
5852 TREE_VEC_LENGTH (arglist)--;
5853 TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
5855 /* See if the arguments match. If they do, then TMPL is
5856 the partial instantiation we want. */
5857 success = comp_template_args (TREE_PURPOSE (found), arglist);
5859 /* Restore the argument vectors to their full size. */
5860 TREE_VEC_LENGTH (arglist)++;
5861 TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
5863 if (success)
5865 found = tmpl;
5866 break;
5870 if (!found)
5872 /* There was no partial instantiation. This happens
5873 where C<T> is a member template of A<T> and it's used
5874 in something like
5876 template <typename T> struct B { A<T>::C<int> m; };
5877 B<float>;
5879 Create the partial instantiation.
5881 TREE_VEC_LENGTH (arglist)--;
5882 found = tsubst (template, arglist, complain, NULL_TREE);
5883 TREE_VEC_LENGTH (arglist)++;
5887 SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
5888 DECL_TEMPLATE_INSTANTIATIONS (template)
5889 = tree_cons (arglist, t,
5890 DECL_TEMPLATE_INSTANTIATIONS (template));
5892 if (TREE_CODE (t) == ENUMERAL_TYPE
5893 && !is_partial_instantiation)
5894 /* Now that the type has been registered on the instantiations
5895 list, we set up the enumerators. Because the enumeration
5896 constants may involve the enumeration type itself, we make
5897 sure to register the type first, and then create the
5898 constants. That way, doing tsubst_expr for the enumeration
5899 constants won't result in recursive calls here; we'll find
5900 the instantiation and exit above. */
5901 tsubst_enum (template_type, t, arglist);
5903 if (is_partial_instantiation)
5904 /* If the type makes use of template parameters, the
5905 code that generates debugging information will crash. */
5906 DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
5908 /* Possibly limit visibility based on template args. */
5909 TREE_PUBLIC (type_decl) = 1;
5910 determine_visibility (type_decl);
5912 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
5914 timevar_pop (TV_NAME_LOOKUP);
5917 struct pair_fn_data
5919 tree_fn_t fn;
5920 void *data;
5921 /* True when we should also visit template parameters that occur in
5922 non-deduced contexts. */
5923 bool include_nondeduced_p;
5924 struct pointer_set_t *visited;
5927 /* Called from for_each_template_parm via walk_tree. */
5929 static tree
5930 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
5932 tree t = *tp;
5933 struct pair_fn_data *pfd = (struct pair_fn_data *) d;
5934 tree_fn_t fn = pfd->fn;
5935 void *data = pfd->data;
5937 if (TYPE_P (t)
5938 && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
5939 && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
5940 pfd->include_nondeduced_p))
5941 return error_mark_node;
5943 switch (TREE_CODE (t))
5945 case RECORD_TYPE:
5946 if (TYPE_PTRMEMFUNC_P (t))
5947 break;
5948 /* Fall through. */
5950 case UNION_TYPE:
5951 case ENUMERAL_TYPE:
5952 if (!TYPE_TEMPLATE_INFO (t))
5953 *walk_subtrees = 0;
5954 else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
5955 fn, data, pfd->visited,
5956 pfd->include_nondeduced_p))
5957 return error_mark_node;
5958 break;
5960 case INTEGER_TYPE:
5961 if (for_each_template_parm (TYPE_MIN_VALUE (t),
5962 fn, data, pfd->visited,
5963 pfd->include_nondeduced_p)
5964 || for_each_template_parm (TYPE_MAX_VALUE (t),
5965 fn, data, pfd->visited,
5966 pfd->include_nondeduced_p))
5967 return error_mark_node;
5968 break;
5970 case METHOD_TYPE:
5971 /* Since we're not going to walk subtrees, we have to do this
5972 explicitly here. */
5973 if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
5974 pfd->visited, pfd->include_nondeduced_p))
5975 return error_mark_node;
5976 /* Fall through. */
5978 case FUNCTION_TYPE:
5979 /* Check the return type. */
5980 if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
5981 pfd->include_nondeduced_p))
5982 return error_mark_node;
5984 /* Check the parameter types. Since default arguments are not
5985 instantiated until they are needed, the TYPE_ARG_TYPES may
5986 contain expressions that involve template parameters. But,
5987 no-one should be looking at them yet. And, once they're
5988 instantiated, they don't contain template parameters, so
5989 there's no point in looking at them then, either. */
5991 tree parm;
5993 for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
5994 if (for_each_template_parm (TREE_VALUE (parm), fn, data,
5995 pfd->visited, pfd->include_nondeduced_p))
5996 return error_mark_node;
5998 /* Since we've already handled the TYPE_ARG_TYPES, we don't
5999 want walk_tree walking into them itself. */
6000 *walk_subtrees = 0;
6002 break;
6004 case TYPEOF_TYPE:
6005 if (pfd->include_nondeduced_p
6006 && for_each_template_parm (TYPE_FIELDS (t), fn, data,
6007 pfd->visited,
6008 pfd->include_nondeduced_p))
6009 return error_mark_node;
6010 break;
6012 case FUNCTION_DECL:
6013 case VAR_DECL:
6014 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
6015 && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
6016 pfd->visited, pfd->include_nondeduced_p))
6017 return error_mark_node;
6018 /* Fall through. */
6020 case PARM_DECL:
6021 case CONST_DECL:
6022 if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
6023 && for_each_template_parm (DECL_INITIAL (t), fn, data,
6024 pfd->visited, pfd->include_nondeduced_p))
6025 return error_mark_node;
6026 if (DECL_CONTEXT (t)
6027 && pfd->include_nondeduced_p
6028 && for_each_template_parm (DECL_CONTEXT (t), fn, data,
6029 pfd->visited, pfd->include_nondeduced_p))
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 pfd->include_nondeduced_p))
6037 return error_mark_node;
6038 /* Fall through. */
6040 case TEMPLATE_TEMPLATE_PARM:
6041 case TEMPLATE_TYPE_PARM:
6042 case TEMPLATE_PARM_INDEX:
6043 if (fn && (*fn)(t, data))
6044 return error_mark_node;
6045 else if (!fn)
6046 return error_mark_node;
6047 break;
6049 case TEMPLATE_DECL:
6050 /* A template template parameter is encountered. */
6051 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
6052 && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
6053 pfd->include_nondeduced_p))
6054 return error_mark_node;
6056 /* Already substituted template template parameter */
6057 *walk_subtrees = 0;
6058 break;
6060 case TYPENAME_TYPE:
6061 if (!fn
6062 || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
6063 data, pfd->visited,
6064 pfd->include_nondeduced_p))
6065 return error_mark_node;
6066 break;
6068 case CONSTRUCTOR:
6069 if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
6070 && pfd->include_nondeduced_p
6071 && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
6072 (TREE_TYPE (t)), fn, data,
6073 pfd->visited, pfd->include_nondeduced_p))
6074 return error_mark_node;
6075 break;
6077 case INDIRECT_REF:
6078 case COMPONENT_REF:
6079 /* If there's no type, then this thing must be some expression
6080 involving template parameters. */
6081 if (!fn && !TREE_TYPE (t))
6082 return error_mark_node;
6083 break;
6085 case MODOP_EXPR:
6086 case CAST_EXPR:
6087 case REINTERPRET_CAST_EXPR:
6088 case CONST_CAST_EXPR:
6089 case STATIC_CAST_EXPR:
6090 case DYNAMIC_CAST_EXPR:
6091 case ARROW_EXPR:
6092 case DOTSTAR_EXPR:
6093 case TYPEID_EXPR:
6094 case PSEUDO_DTOR_EXPR:
6095 if (!fn)
6096 return error_mark_node;
6097 break;
6099 default:
6100 break;
6103 /* We didn't find any template parameters we liked. */
6104 return NULL_TREE;
6107 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
6108 BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
6109 call FN with the parameter and the DATA.
6110 If FN returns nonzero, the iteration is terminated, and
6111 for_each_template_parm returns 1. Otherwise, the iteration
6112 continues. If FN never returns a nonzero value, the value
6113 returned by for_each_template_parm is 0. If FN is NULL, it is
6114 considered to be the function which always returns 1.
6116 If INCLUDE_NONDEDUCED_P, then this routine will also visit template
6117 parameters that occur in non-deduced contexts. When false, only
6118 visits those template parameters that can be deduced. */
6120 static int
6121 for_each_template_parm (tree t, tree_fn_t fn, void* data,
6122 struct pointer_set_t *visited,
6123 bool include_nondeduced_p)
6125 struct pair_fn_data pfd;
6126 int result;
6128 /* Set up. */
6129 pfd.fn = fn;
6130 pfd.data = data;
6131 pfd.include_nondeduced_p = include_nondeduced_p;
6133 /* Walk the tree. (Conceptually, we would like to walk without
6134 duplicates, but for_each_template_parm_r recursively calls
6135 for_each_template_parm, so we would need to reorganize a fair
6136 bit to use walk_tree_without_duplicates, so we keep our own
6137 visited list.) */
6138 if (visited)
6139 pfd.visited = visited;
6140 else
6141 pfd.visited = pointer_set_create ();
6142 result = cp_walk_tree (&t,
6143 for_each_template_parm_r,
6144 &pfd,
6145 pfd.visited) != NULL_TREE;
6147 /* Clean up. */
6148 if (!visited)
6150 pointer_set_destroy (pfd.visited);
6151 pfd.visited = 0;
6154 return result;
6157 /* Returns true if T depends on any template parameter. */
6160 uses_template_parms (tree t)
6162 bool dependent_p;
6163 int saved_processing_template_decl;
6165 saved_processing_template_decl = processing_template_decl;
6166 if (!saved_processing_template_decl)
6167 processing_template_decl = 1;
6168 if (TYPE_P (t))
6169 dependent_p = dependent_type_p (t);
6170 else if (TREE_CODE (t) == TREE_VEC)
6171 dependent_p = any_dependent_template_arguments_p (t);
6172 else if (TREE_CODE (t) == TREE_LIST)
6173 dependent_p = (uses_template_parms (TREE_VALUE (t))
6174 || uses_template_parms (TREE_CHAIN (t)));
6175 else if (TREE_CODE (t) == TYPE_DECL)
6176 dependent_p = dependent_type_p (TREE_TYPE (t));
6177 else if (DECL_P (t)
6178 || EXPR_P (t)
6179 || TREE_CODE (t) == TEMPLATE_PARM_INDEX
6180 || TREE_CODE (t) == OVERLOAD
6181 || TREE_CODE (t) == BASELINK
6182 || TREE_CODE (t) == IDENTIFIER_NODE
6183 || TREE_CODE (t) == TRAIT_EXPR
6184 || CONSTANT_CLASS_P (t))
6185 dependent_p = (type_dependent_expression_p (t)
6186 || value_dependent_expression_p (t));
6187 else
6189 gcc_assert (t == error_mark_node);
6190 dependent_p = false;
6193 processing_template_decl = saved_processing_template_decl;
6195 return dependent_p;
6198 /* Returns true if T depends on any template parameter with level LEVEL. */
6201 uses_template_parms_level (tree t, int level)
6203 return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
6204 /*include_nondeduced_p=*/true);
6207 static int tinst_depth;
6208 extern int max_tinst_depth;
6209 #ifdef GATHER_STATISTICS
6210 int depth_reached;
6211 #endif
6212 static int tinst_level_tick;
6213 static int last_template_error_tick;
6215 /* We're starting to instantiate D; record the template instantiation context
6216 for diagnostics and to restore it later. */
6218 static int
6219 push_tinst_level (tree d)
6221 struct tinst_level *new;
6223 if (tinst_depth >= max_tinst_depth)
6225 /* If the instantiation in question still has unbound template parms,
6226 we don't really care if we can't instantiate it, so just return.
6227 This happens with base instantiation for implicit `typename'. */
6228 if (uses_template_parms (d))
6229 return 0;
6231 last_template_error_tick = tinst_level_tick;
6232 error ("template instantiation depth exceeds maximum of %d (use "
6233 "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
6234 max_tinst_depth, d);
6236 print_instantiation_context ();
6238 return 0;
6241 new = GGC_NEW (struct tinst_level);
6242 new->decl = d;
6243 new->locus = input_location;
6244 new->in_system_header_p = in_system_header;
6245 new->next = current_tinst_level;
6246 current_tinst_level = new;
6248 ++tinst_depth;
6249 #ifdef GATHER_STATISTICS
6250 if (tinst_depth > depth_reached)
6251 depth_reached = tinst_depth;
6252 #endif
6254 ++tinst_level_tick;
6255 return 1;
6258 /* We're done instantiating this template; return to the instantiation
6259 context. */
6261 static void
6262 pop_tinst_level (void)
6264 /* Restore the filename and line number stashed away when we started
6265 this instantiation. */
6266 input_location = current_tinst_level->locus;
6267 in_system_header = current_tinst_level->in_system_header_p;
6268 current_tinst_level = current_tinst_level->next;
6269 --tinst_depth;
6270 ++tinst_level_tick;
6273 /* We're instantiating a deferred template; restore the template
6274 instantiation context in which the instantiation was requested, which
6275 is one step out from LEVEL. Return the corresponding DECL or TYPE. */
6277 static tree
6278 reopen_tinst_level (struct tinst_level *level)
6280 struct tinst_level *t;
6282 tinst_depth = 0;
6283 for (t = level; t; t = t->next)
6284 ++tinst_depth;
6286 current_tinst_level = level;
6287 pop_tinst_level ();
6288 return level->decl;
6291 /* Returns the TINST_LEVEL which gives the original instantiation
6292 context. */
6294 struct tinst_level *
6295 outermost_tinst_level (void)
6297 struct tinst_level *level = current_tinst_level;
6298 if (level)
6299 while (level->next)
6300 level = level->next;
6301 return level;
6304 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
6305 vector of template arguments, as for tsubst.
6307 Returns an appropriate tsubst'd friend declaration. */
6309 static tree
6310 tsubst_friend_function (tree decl, tree args)
6312 tree new_friend;
6314 if (TREE_CODE (decl) == FUNCTION_DECL
6315 && DECL_TEMPLATE_INSTANTIATION (decl)
6316 && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
6317 /* This was a friend declared with an explicit template
6318 argument list, e.g.:
6320 friend void f<>(T);
6322 to indicate that f was a template instantiation, not a new
6323 function declaration. Now, we have to figure out what
6324 instantiation of what template. */
6326 tree template_id, arglist, fns;
6327 tree new_args;
6328 tree tmpl;
6329 tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
6331 /* Friend functions are looked up in the containing namespace scope.
6332 We must enter that scope, to avoid finding member functions of the
6333 current cless with same name. */
6334 push_nested_namespace (ns);
6335 fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
6336 tf_warning_or_error, NULL_TREE,
6337 /*integral_constant_expression_p=*/false);
6338 pop_nested_namespace (ns);
6339 arglist = tsubst (DECL_TI_ARGS (decl), args,
6340 tf_warning_or_error, NULL_TREE);
6341 template_id = lookup_template_function (fns, arglist);
6343 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6344 tmpl = determine_specialization (template_id, new_friend,
6345 &new_args,
6346 /*need_member_template=*/0,
6347 TREE_VEC_LENGTH (args),
6348 tsk_none);
6349 return instantiate_template (tmpl, new_args, tf_error);
6352 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6354 /* The NEW_FRIEND will look like an instantiation, to the
6355 compiler, but is not an instantiation from the point of view of
6356 the language. For example, we might have had:
6358 template <class T> struct S {
6359 template <class U> friend void f(T, U);
6362 Then, in S<int>, template <class U> void f(int, U) is not an
6363 instantiation of anything. */
6364 if (new_friend == error_mark_node)
6365 return error_mark_node;
6367 DECL_USE_TEMPLATE (new_friend) = 0;
6368 if (TREE_CODE (decl) == TEMPLATE_DECL)
6370 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
6371 DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
6372 = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
6375 /* The mangled name for the NEW_FRIEND is incorrect. The function
6376 is not a template instantiation and should not be mangled like
6377 one. Therefore, we forget the mangling here; we'll recompute it
6378 later if we need it. */
6379 if (TREE_CODE (new_friend) != TEMPLATE_DECL)
6381 SET_DECL_RTL (new_friend, NULL_RTX);
6382 SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
6385 if (DECL_NAMESPACE_SCOPE_P (new_friend))
6387 tree old_decl;
6388 tree new_friend_template_info;
6389 tree new_friend_result_template_info;
6390 tree ns;
6391 int new_friend_is_defn;
6393 /* We must save some information from NEW_FRIEND before calling
6394 duplicate decls since that function will free NEW_FRIEND if
6395 possible. */
6396 new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
6397 new_friend_is_defn =
6398 (DECL_INITIAL (DECL_TEMPLATE_RESULT
6399 (template_for_substitution (new_friend)))
6400 != NULL_TREE);
6401 if (TREE_CODE (new_friend) == TEMPLATE_DECL)
6403 /* This declaration is a `primary' template. */
6404 DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
6406 new_friend_result_template_info
6407 = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
6409 else
6410 new_friend_result_template_info = NULL_TREE;
6412 /* Make the init_value nonzero so pushdecl knows this is a defn. */
6413 if (new_friend_is_defn)
6414 DECL_INITIAL (new_friend) = error_mark_node;
6416 /* Inside pushdecl_namespace_level, we will push into the
6417 current namespace. However, the friend function should go
6418 into the namespace of the template. */
6419 ns = decl_namespace_context (new_friend);
6420 push_nested_namespace (ns);
6421 old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
6422 pop_nested_namespace (ns);
6424 if (old_decl == error_mark_node)
6425 return error_mark_node;
6427 if (old_decl != new_friend)
6429 /* This new friend declaration matched an existing
6430 declaration. For example, given:
6432 template <class T> void f(T);
6433 template <class U> class C {
6434 template <class T> friend void f(T) {}
6437 the friend declaration actually provides the definition
6438 of `f', once C has been instantiated for some type. So,
6439 old_decl will be the out-of-class template declaration,
6440 while new_friend is the in-class definition.
6442 But, if `f' was called before this point, the
6443 instantiation of `f' will have DECL_TI_ARGS corresponding
6444 to `T' but not to `U', references to which might appear
6445 in the definition of `f'. Previously, the most general
6446 template for an instantiation of `f' was the out-of-class
6447 version; now it is the in-class version. Therefore, we
6448 run through all specialization of `f', adding to their
6449 DECL_TI_ARGS appropriately. In particular, they need a
6450 new set of outer arguments, corresponding to the
6451 arguments for this class instantiation.
6453 The same situation can arise with something like this:
6455 friend void f(int);
6456 template <class T> class C {
6457 friend void f(T) {}
6460 when `C<int>' is instantiated. Now, `f(int)' is defined
6461 in the class. */
6463 if (!new_friend_is_defn)
6464 /* On the other hand, if the in-class declaration does
6465 *not* provide a definition, then we don't want to alter
6466 existing definitions. We can just leave everything
6467 alone. */
6469 else
6471 /* Overwrite whatever template info was there before, if
6472 any, with the new template information pertaining to
6473 the declaration. */
6474 DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
6476 if (TREE_CODE (old_decl) != TEMPLATE_DECL)
6477 reregister_specialization (new_friend,
6478 most_general_template (old_decl),
6479 old_decl);
6480 else
6482 tree t;
6483 tree new_friend_args;
6485 DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
6486 = new_friend_result_template_info;
6488 new_friend_args = TI_ARGS (new_friend_template_info);
6489 for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
6490 t != NULL_TREE;
6491 t = TREE_CHAIN (t))
6493 tree spec = TREE_VALUE (t);
6495 DECL_TI_ARGS (spec)
6496 = add_outermost_template_args (new_friend_args,
6497 DECL_TI_ARGS (spec));
6500 /* Now, since specializations are always supposed to
6501 hang off of the most general template, we must move
6502 them. */
6503 t = most_general_template (old_decl);
6504 if (t != old_decl)
6506 DECL_TEMPLATE_SPECIALIZATIONS (t)
6507 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
6508 DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
6509 DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
6514 /* The information from NEW_FRIEND has been merged into OLD_DECL
6515 by duplicate_decls. */
6516 new_friend = old_decl;
6519 else
6521 tree context = DECL_CONTEXT (new_friend);
6522 bool dependent_p;
6524 /* In the code
6525 template <class T> class C {
6526 template <class U> friend void C1<U>::f (); // case 1
6527 friend void C2<T>::f (); // case 2
6529 we only need to make sure CONTEXT is a complete type for
6530 case 2. To distinguish between the two cases, we note that
6531 CONTEXT of case 1 remains dependent type after tsubst while
6532 this isn't true for case 2. */
6533 ++processing_template_decl;
6534 dependent_p = dependent_type_p (context);
6535 --processing_template_decl;
6537 if (!dependent_p
6538 && !complete_type_or_else (context, NULL_TREE))
6539 return error_mark_node;
6541 if (COMPLETE_TYPE_P (context))
6543 /* Check to see that the declaration is really present, and,
6544 possibly obtain an improved declaration. */
6545 tree fn = check_classfn (context,
6546 new_friend, NULL_TREE);
6548 if (fn)
6549 new_friend = fn;
6553 return new_friend;
6556 /* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
6557 template arguments, as for tsubst.
6559 Returns an appropriate tsubst'd friend type or error_mark_node on
6560 failure. */
6562 static tree
6563 tsubst_friend_class (tree friend_tmpl, tree args)
6565 tree friend_type;
6566 tree tmpl;
6567 tree context;
6569 context = DECL_CONTEXT (friend_tmpl);
6571 if (context)
6573 if (TREE_CODE (context) == NAMESPACE_DECL)
6574 push_nested_namespace (context);
6575 else
6576 push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
6579 /* Look for a class template declaration. We look for hidden names
6580 because two friend declarations of the same template are the
6581 same. For example, in:
6583 struct A {
6584 template <typename> friend class F;
6586 template <typename> struct B {
6587 template <typename> friend class F;
6590 both F templates are the same. */
6591 tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
6592 /*block_p=*/true, 0,
6593 LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
6595 /* But, if we don't find one, it might be because we're in a
6596 situation like this:
6598 template <class T>
6599 struct S {
6600 template <class U>
6601 friend struct S;
6604 Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
6605 for `S<int>', not the TEMPLATE_DECL. */
6606 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
6608 tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
6609 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
6612 if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
6614 /* The friend template has already been declared. Just
6615 check to see that the declarations match, and install any new
6616 default parameters. We must tsubst the default parameters,
6617 of course. We only need the innermost template parameters
6618 because that is all that redeclare_class_template will look
6619 at. */
6620 if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
6621 > TMPL_ARGS_DEPTH (args))
6623 tree parms;
6624 location_t saved_input_location;
6625 parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
6626 args, tf_warning_or_error);
6628 saved_input_location = input_location;
6629 input_location = DECL_SOURCE_LOCATION (friend_tmpl);
6630 redeclare_class_template (TREE_TYPE (tmpl), parms);
6631 input_location = saved_input_location;
6635 friend_type = TREE_TYPE (tmpl);
6637 else
6639 /* The friend template has not already been declared. In this
6640 case, the instantiation of the template class will cause the
6641 injection of this template into the global scope. */
6642 tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
6643 if (tmpl == error_mark_node)
6644 return error_mark_node;
6646 /* The new TMPL is not an instantiation of anything, so we
6647 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE for
6648 the new type because that is supposed to be the corresponding
6649 template decl, i.e., TMPL. */
6650 DECL_USE_TEMPLATE (tmpl) = 0;
6651 DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
6652 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
6653 CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
6654 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
6656 /* Inject this template into the global scope. */
6657 friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
6660 if (context)
6662 if (TREE_CODE (context) == NAMESPACE_DECL)
6663 pop_nested_namespace (context);
6664 else
6665 pop_nested_class ();
6668 return friend_type;
6671 /* Returns zero if TYPE cannot be completed later due to circularity.
6672 Otherwise returns one. */
6674 static int
6675 can_complete_type_without_circularity (tree type)
6677 if (type == NULL_TREE || type == error_mark_node)
6678 return 0;
6679 else if (COMPLETE_TYPE_P (type))
6680 return 1;
6681 else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
6682 return can_complete_type_without_circularity (TREE_TYPE (type));
6683 else if (CLASS_TYPE_P (type)
6684 && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
6685 return 0;
6686 else
6687 return 1;
6690 /* Apply any attributes which had to be deferred until instantiation
6691 time. DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
6692 ARGS, COMPLAIN, IN_DECL are as tsubst. */
6694 static void
6695 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
6696 tree args, tsubst_flags_t complain, tree in_decl)
6698 tree last_dep = NULL_TREE;
6699 tree t;
6700 tree *p;
6702 for (t = attributes; t; t = TREE_CHAIN (t))
6703 if (ATTR_IS_DEPENDENT (t))
6705 last_dep = t;
6706 attributes = copy_list (attributes);
6707 break;
6710 if (DECL_P (*decl_p))
6712 if (TREE_TYPE (*decl_p) == error_mark_node)
6713 return;
6714 p = &DECL_ATTRIBUTES (*decl_p);
6716 else
6717 p = &TYPE_ATTRIBUTES (*decl_p);
6719 if (last_dep)
6721 tree late_attrs = NULL_TREE;
6722 tree *q = &late_attrs;
6724 for (*p = attributes; *p; )
6726 t = *p;
6727 if (ATTR_IS_DEPENDENT (t))
6729 *p = TREE_CHAIN (t);
6730 TREE_CHAIN (t) = NULL_TREE;
6731 TREE_VALUE (t)
6732 = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
6733 /*integral_constant_expression_p=*/false);
6734 *q = t;
6735 q = &TREE_CHAIN (t);
6737 else
6738 p = &TREE_CHAIN (t);
6741 cplus_decl_attributes (decl_p, late_attrs, attr_flags);
6745 tree
6746 instantiate_class_template (tree type)
6748 tree template, args, pattern, t, member;
6749 tree typedecl;
6750 tree pbinfo;
6751 tree base_list;
6753 if (type == error_mark_node)
6754 return error_mark_node;
6756 if (TYPE_BEING_DEFINED (type)
6757 || COMPLETE_TYPE_P (type)
6758 || dependent_type_p (type))
6759 return type;
6761 /* Figure out which template is being instantiated. */
6762 template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
6763 gcc_assert (TREE_CODE (template) == TEMPLATE_DECL);
6765 /* Determine what specialization of the original template to
6766 instantiate. */
6767 t = most_specialized_class (type, template);
6768 if (t == error_mark_node)
6770 TYPE_BEING_DEFINED (type) = 1;
6771 return error_mark_node;
6773 else if (t)
6775 /* This TYPE is actually an instantiation of a partial
6776 specialization. We replace the innermost set of ARGS with
6777 the arguments appropriate for substitution. For example,
6778 given:
6780 template <class T> struct S {};
6781 template <class T> struct S<T*> {};
6783 and supposing that we are instantiating S<int*>, ARGS will
6784 presently be {int*} -- but we need {int}. */
6785 pattern = TREE_TYPE (t);
6786 args = TREE_PURPOSE (t);
6788 else
6790 pattern = TREE_TYPE (template);
6791 args = CLASSTYPE_TI_ARGS (type);
6794 /* If the template we're instantiating is incomplete, then clearly
6795 there's nothing we can do. */
6796 if (!COMPLETE_TYPE_P (pattern))
6797 return type;
6799 /* If we've recursively instantiated too many templates, stop. */
6800 if (! push_tinst_level (type))
6801 return type;
6803 /* Now we're really doing the instantiation. Mark the type as in
6804 the process of being defined. */
6805 TYPE_BEING_DEFINED (type) = 1;
6807 /* We may be in the middle of deferred access check. Disable
6808 it now. */
6809 push_deferring_access_checks (dk_no_deferred);
6811 push_to_top_level ();
6813 SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
6815 /* Set the input location to the template definition. This is needed
6816 if tsubsting causes an error. */
6817 typedecl = TYPE_MAIN_DECL (type);
6818 input_location = DECL_SOURCE_LOCATION (typedecl);
6819 in_system_header = DECL_IN_SYSTEM_HEADER (typedecl);
6821 TYPE_HAS_USER_CONSTRUCTOR (type) = TYPE_HAS_USER_CONSTRUCTOR (pattern);
6822 TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
6823 TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
6824 TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
6825 TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
6826 TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
6827 TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
6828 TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
6829 TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
6830 TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
6831 TYPE_PACKED (type) = TYPE_PACKED (pattern);
6832 TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
6833 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
6834 TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
6835 if (ANON_AGGR_TYPE_P (pattern))
6836 SET_ANON_AGGR_TYPE_P (type);
6837 if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
6839 CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
6840 CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
6843 pbinfo = TYPE_BINFO (pattern);
6845 /* We should never instantiate a nested class before its enclosing
6846 class; we need to look up the nested class by name before we can
6847 instantiate it, and that lookup should instantiate the enclosing
6848 class. */
6849 gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
6850 || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
6851 || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
6853 base_list = NULL_TREE;
6854 if (BINFO_N_BASE_BINFOS (pbinfo))
6856 tree pbase_binfo;
6857 tree context = TYPE_CONTEXT (type);
6858 tree pushed_scope;
6859 int i;
6861 /* We must enter the scope containing the type, as that is where
6862 the accessibility of types named in dependent bases are
6863 looked up from. */
6864 pushed_scope = push_scope (context ? context : global_namespace);
6866 /* Substitute into each of the bases to determine the actual
6867 basetypes. */
6868 for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
6870 tree base;
6871 tree access = BINFO_BASE_ACCESS (pbinfo, i);
6872 tree expanded_bases = NULL_TREE;
6873 int idx, len = 1;
6875 if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
6877 expanded_bases =
6878 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
6879 args, tf_error, NULL_TREE);
6880 if (expanded_bases == error_mark_node)
6881 continue;
6883 len = TREE_VEC_LENGTH (expanded_bases);
6886 for (idx = 0; idx < len; idx++)
6888 if (expanded_bases)
6889 /* Extract the already-expanded base class. */
6890 base = TREE_VEC_ELT (expanded_bases, idx);
6891 else
6892 /* Substitute to figure out the base class. */
6893 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error,
6894 NULL_TREE);
6896 if (base == error_mark_node)
6897 continue;
6899 base_list = tree_cons (access, base, base_list);
6900 if (BINFO_VIRTUAL_P (pbase_binfo))
6901 TREE_TYPE (base_list) = integer_type_node;
6905 /* The list is now in reverse order; correct that. */
6906 base_list = nreverse (base_list);
6908 if (pushed_scope)
6909 pop_scope (pushed_scope);
6911 /* Now call xref_basetypes to set up all the base-class
6912 information. */
6913 xref_basetypes (type, base_list);
6915 apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
6916 (int) ATTR_FLAG_TYPE_IN_PLACE,
6917 args, tf_error, NULL_TREE);
6919 /* Now that our base classes are set up, enter the scope of the
6920 class, so that name lookups into base classes, etc. will work
6921 correctly. This is precisely analogous to what we do in
6922 begin_class_definition when defining an ordinary non-template
6923 class, except we also need to push the enclosing classes. */
6924 push_nested_class (type);
6926 /* Now members are processed in the order of declaration. */
6927 for (member = CLASSTYPE_DECL_LIST (pattern);
6928 member; member = TREE_CHAIN (member))
6930 tree t = TREE_VALUE (member);
6932 if (TREE_PURPOSE (member))
6934 if (TYPE_P (t))
6936 /* Build new CLASSTYPE_NESTED_UTDS. */
6938 tree newtag;
6939 bool class_template_p;
6941 class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
6942 && TYPE_LANG_SPECIFIC (t)
6943 && CLASSTYPE_IS_TEMPLATE (t));
6944 /* If the member is a class template, then -- even after
6945 substitution -- there may be dependent types in the
6946 template argument list for the class. We increment
6947 PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
6948 that function will assume that no types are dependent
6949 when outside of a template. */
6950 if (class_template_p)
6951 ++processing_template_decl;
6952 newtag = tsubst (t, args, tf_error, NULL_TREE);
6953 if (class_template_p)
6954 --processing_template_decl;
6955 if (newtag == error_mark_node)
6956 continue;
6958 if (TREE_CODE (newtag) != ENUMERAL_TYPE)
6960 tree name = TYPE_IDENTIFIER (t);
6962 if (class_template_p)
6963 /* Unfortunately, lookup_template_class sets
6964 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
6965 instantiation (i.e., for the type of a member
6966 template class nested within a template class.)
6967 This behavior is required for
6968 maybe_process_partial_specialization to work
6969 correctly, but is not accurate in this case;
6970 the TAG is not an instantiation of anything.
6971 (The corresponding TEMPLATE_DECL is an
6972 instantiation, but the TYPE is not.) */
6973 CLASSTYPE_USE_TEMPLATE (newtag) = 0;
6975 /* Now, we call pushtag to put this NEWTAG into the scope of
6976 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
6977 pushtag calling push_template_decl. We don't have to do
6978 this for enums because it will already have been done in
6979 tsubst_enum. */
6980 if (name)
6981 SET_IDENTIFIER_TYPE_VALUE (name, newtag);
6982 pushtag (name, newtag, /*tag_scope=*/ts_current);
6985 else if (TREE_CODE (t) == FUNCTION_DECL
6986 || DECL_FUNCTION_TEMPLATE_P (t))
6988 /* Build new TYPE_METHODS. */
6989 tree r;
6991 if (TREE_CODE (t) == TEMPLATE_DECL)
6992 ++processing_template_decl;
6993 r = tsubst (t, args, tf_error, NULL_TREE);
6994 if (TREE_CODE (t) == TEMPLATE_DECL)
6995 --processing_template_decl;
6996 set_current_access_from_decl (r);
6997 finish_member_declaration (r);
6999 else
7001 /* Build new TYPE_FIELDS. */
7002 if (TREE_CODE (t) == STATIC_ASSERT)
7004 tree condition =
7005 tsubst_expr (STATIC_ASSERT_CONDITION (t), args,
7006 tf_warning_or_error, NULL_TREE,
7007 /*integral_constant_expression_p=*/true);
7008 finish_static_assert (condition,
7009 STATIC_ASSERT_MESSAGE (t),
7010 STATIC_ASSERT_SOURCE_LOCATION (t),
7011 /*member_p=*/true);
7013 else if (TREE_CODE (t) != CONST_DECL)
7015 tree r;
7017 /* The the file and line for this declaration, to
7018 assist in error message reporting. Since we
7019 called push_tinst_level above, we don't need to
7020 restore these. */
7021 input_location = DECL_SOURCE_LOCATION (t);
7023 if (TREE_CODE (t) == TEMPLATE_DECL)
7024 ++processing_template_decl;
7025 r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
7026 if (TREE_CODE (t) == TEMPLATE_DECL)
7027 --processing_template_decl;
7028 if (TREE_CODE (r) == VAR_DECL)
7030 /* In [temp.inst]:
7032 [t]he initialization (and any associated
7033 side-effects) of a static data member does
7034 not occur unless the static data member is
7035 itself used in a way that requires the
7036 definition of the static data member to
7037 exist.
7039 Therefore, we do not substitute into the
7040 initialized for the static data member here. */
7041 finish_static_data_member_decl
7043 /*init=*/NULL_TREE,
7044 /*init_const_expr_p=*/false,
7045 /*asmspec_tree=*/NULL_TREE,
7046 /*flags=*/0);
7047 if (DECL_INITIALIZED_IN_CLASS_P (r))
7048 check_static_variable_definition (r, TREE_TYPE (r));
7050 else if (TREE_CODE (r) == FIELD_DECL)
7052 /* Determine whether R has a valid type and can be
7053 completed later. If R is invalid, then it is
7054 replaced by error_mark_node so that it will not be
7055 added to TYPE_FIELDS. */
7056 tree rtype = TREE_TYPE (r);
7057 if (can_complete_type_without_circularity (rtype))
7058 complete_type (rtype);
7060 if (!COMPLETE_TYPE_P (rtype))
7062 cxx_incomplete_type_error (r, rtype);
7063 r = error_mark_node;
7067 /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
7068 such a thing will already have been added to the field
7069 list by tsubst_enum in finish_member_declaration in the
7070 CLASSTYPE_NESTED_UTDS case above. */
7071 if (!(TREE_CODE (r) == TYPE_DECL
7072 && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
7073 && DECL_ARTIFICIAL (r)))
7075 set_current_access_from_decl (r);
7076 finish_member_declaration (r);
7081 else
7083 if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
7085 /* Build new CLASSTYPE_FRIEND_CLASSES. */
7087 tree friend_type = t;
7088 bool adjust_processing_template_decl = false;
7090 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
7092 /* template <class T> friend class C; */
7093 friend_type = tsubst_friend_class (friend_type, args);
7094 adjust_processing_template_decl = true;
7096 else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
7098 /* template <class T> friend class C::D; */
7099 friend_type = tsubst (friend_type, args,
7100 tf_warning_or_error, NULL_TREE);
7101 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
7102 friend_type = TREE_TYPE (friend_type);
7103 adjust_processing_template_decl = true;
7105 else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
7107 /* This could be either
7109 friend class T::C;
7111 when dependent_type_p is false or
7113 template <class U> friend class T::C;
7115 otherwise. */
7116 friend_type = tsubst (friend_type, args,
7117 tf_warning_or_error, NULL_TREE);
7118 /* Bump processing_template_decl for correct
7119 dependent_type_p calculation. */
7120 ++processing_template_decl;
7121 if (dependent_type_p (friend_type))
7122 adjust_processing_template_decl = true;
7123 --processing_template_decl;
7125 else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
7126 && hidden_name_p (TYPE_NAME (friend_type)))
7128 /* friend class C;
7130 where C hasn't been declared yet. Let's lookup name
7131 from namespace scope directly, bypassing any name that
7132 come from dependent base class. */
7133 tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
7135 /* The call to xref_tag_from_type does injection for friend
7136 classes. */
7137 push_nested_namespace (ns);
7138 friend_type =
7139 xref_tag_from_type (friend_type, NULL_TREE,
7140 /*tag_scope=*/ts_current);
7141 pop_nested_namespace (ns);
7143 else if (uses_template_parms (friend_type))
7144 /* friend class C<T>; */
7145 friend_type = tsubst (friend_type, args,
7146 tf_warning_or_error, NULL_TREE);
7147 /* Otherwise it's
7149 friend class C;
7151 where C is already declared or
7153 friend class C<int>;
7155 We don't have to do anything in these cases. */
7157 if (adjust_processing_template_decl)
7158 /* Trick make_friend_class into realizing that the friend
7159 we're adding is a template, not an ordinary class. It's
7160 important that we use make_friend_class since it will
7161 perform some error-checking and output cross-reference
7162 information. */
7163 ++processing_template_decl;
7165 if (friend_type != error_mark_node)
7166 make_friend_class (type, friend_type, /*complain=*/false);
7168 if (adjust_processing_template_decl)
7169 --processing_template_decl;
7171 else
7173 /* Build new DECL_FRIENDLIST. */
7174 tree r;
7176 /* The the file and line for this declaration, to
7177 assist in error message reporting. Since we
7178 called push_tinst_level above, we don't need to
7179 restore these. */
7180 input_location = DECL_SOURCE_LOCATION (t);
7182 if (TREE_CODE (t) == TEMPLATE_DECL)
7184 ++processing_template_decl;
7185 push_deferring_access_checks (dk_no_check);
7188 r = tsubst_friend_function (t, args);
7189 add_friend (type, r, /*complain=*/false);
7190 if (TREE_CODE (t) == TEMPLATE_DECL)
7192 pop_deferring_access_checks ();
7193 --processing_template_decl;
7199 /* Set the file and line number information to whatever is given for
7200 the class itself. This puts error messages involving generated
7201 implicit functions at a predictable point, and the same point
7202 that would be used for non-template classes. */
7203 input_location = DECL_SOURCE_LOCATION (typedecl);
7205 unreverse_member_declarations (type);
7206 finish_struct_1 (type);
7207 TYPE_BEING_DEFINED (type) = 0;
7209 /* Now that the class is complete, instantiate default arguments for
7210 any member functions. We don't do this earlier because the
7211 default arguments may reference members of the class. */
7212 if (!PRIMARY_TEMPLATE_P (template))
7213 for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
7214 if (TREE_CODE (t) == FUNCTION_DECL
7215 /* Implicitly generated member functions will not have template
7216 information; they are not instantiations, but instead are
7217 created "fresh" for each instantiation. */
7218 && DECL_TEMPLATE_INFO (t))
7219 tsubst_default_arguments (t);
7221 pop_nested_class ();
7222 pop_from_top_level ();
7223 pop_deferring_access_checks ();
7224 pop_tinst_level ();
7226 /* The vtable for a template class can be emitted in any translation
7227 unit in which the class is instantiated. When there is no key
7228 method, however, finish_struct_1 will already have added TYPE to
7229 the keyed_classes list. */
7230 if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
7231 keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
7233 return type;
7236 static tree
7237 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7239 tree r;
7241 if (!t)
7242 r = t;
7243 else if (TYPE_P (t))
7244 r = tsubst (t, args, complain, in_decl);
7245 else
7247 r = tsubst_expr (t, args, complain, in_decl,
7248 /*integral_constant_expression_p=*/true);
7249 r = fold_non_dependent_expr (r);
7251 return r;
7254 /* Substitute ARGS into T, which is an pack expansion
7255 (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
7256 TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
7257 (if only a partial substitution could be performed) or
7258 ERROR_MARK_NODE if there was an error. */
7259 tree
7260 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
7261 tree in_decl)
7263 tree pattern;
7264 tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
7265 tree first_arg_pack; int i, len = -1;
7266 tree result;
7267 int incomplete = 0;
7269 gcc_assert (PACK_EXPANSION_P (t));
7270 pattern = PACK_EXPANSION_PATTERN (t);
7272 /* Determine the argument packs that will instantiate the parameter
7273 packs used in the expansion expression. While we're at it,
7274 compute the number of arguments to be expanded and make sure it
7275 is consistent. */
7276 for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack;
7277 pack = TREE_CHAIN (pack))
7279 tree parm_pack = TREE_VALUE (pack);
7280 tree arg_pack = NULL_TREE;
7281 tree orig_arg = NULL_TREE;
7283 if (TREE_CODE (parm_pack) == PARM_DECL)
7284 arg_pack = retrieve_local_specialization (parm_pack);
7285 else
7287 int level, idx, levels;
7288 template_parm_level_and_index (parm_pack, &level, &idx);
7290 levels = TMPL_ARGS_DEPTH (args);
7291 if (level <= levels)
7292 arg_pack = TMPL_ARG (args, level, idx);
7295 orig_arg = arg_pack;
7296 if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
7297 arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
7299 if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
7300 /* This can only happen if we forget to expand an argument
7301 pack somewhere else. Just return an error, silently. */
7303 result = make_tree_vec (1);
7304 TREE_VEC_ELT (result, 0) = error_mark_node;
7305 return result;
7308 if (arg_pack
7309 && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
7310 && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
7312 tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
7313 tree pattern = PACK_EXPANSION_PATTERN (expansion);
7314 if ((TYPE_P (pattern) && same_type_p (pattern, parm_pack))
7315 || (!TYPE_P (pattern) && cp_tree_equal (parm_pack, pattern)))
7316 /* The argument pack that the parameter maps to is just an
7317 expansion of the parameter itself, such as one would
7318 find in the implicit typedef of a class inside the
7319 class itself. Consider this parameter "unsubstituted",
7320 so that we will maintain the outer pack expansion. */
7321 arg_pack = NULL_TREE;
7324 if (arg_pack)
7326 int my_len =
7327 TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
7329 /* It's all-or-nothing with incomplete argument packs. */
7330 if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7331 return error_mark_node;
7333 if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7334 incomplete = 1;
7336 if (len < 0)
7338 len = my_len;
7339 first_arg_pack = arg_pack;
7341 else if (len != my_len)
7343 if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
7344 error ("mismatched argument pack lengths while expanding "
7345 "%<%T%>",
7346 pattern);
7347 else
7348 error ("mismatched argument pack lengths while expanding "
7349 "%<%E%>",
7350 pattern);
7351 return error_mark_node;
7354 /* Keep track of the parameter packs and their corresponding
7355 argument packs. */
7356 packs = tree_cons (parm_pack, arg_pack, packs);
7357 TREE_TYPE (packs) = orig_arg;
7359 else
7360 /* We can't substitute for this parameter pack. */
7361 unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
7362 TREE_VALUE (pack),
7363 unsubstituted_packs);
7366 /* We cannot expand this expansion expression, because we don't have
7367 all of the argument packs we need. Substitute into the pattern
7368 and return a PACK_EXPANSION_*. The caller will need to deal with
7369 that. */
7370 if (unsubstituted_packs)
7371 return make_pack_expansion (tsubst (pattern, args, complain,
7372 in_decl));
7374 /* We could not find any argument packs that work. */
7375 if (len < 0)
7376 return error_mark_node;
7378 /* For each argument in each argument pack, substitute into the
7379 pattern. */
7380 result = make_tree_vec (len + incomplete);
7381 for (i = 0; i < len + incomplete; ++i)
7383 /* For parameter pack, change the substitution of the parameter
7384 pack to the ith argument in its argument pack, then expand
7385 the pattern. */
7386 for (pack = packs; pack; pack = TREE_CHAIN (pack))
7388 tree parm = TREE_PURPOSE (pack);
7390 if (TREE_CODE (parm) == PARM_DECL)
7392 /* Select the Ith argument from the pack. */
7393 tree arg = make_node (ARGUMENT_PACK_SELECT);
7394 ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
7395 ARGUMENT_PACK_SELECT_INDEX (arg) = i;
7396 mark_used (parm);
7397 register_local_specialization (arg, parm);
7399 else
7401 tree value = parm;
7402 int idx, level;
7403 template_parm_level_and_index (parm, &level, &idx);
7405 if (i < len)
7407 /* Select the Ith argument from the pack. */
7408 value = make_node (ARGUMENT_PACK_SELECT);
7409 ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
7410 ARGUMENT_PACK_SELECT_INDEX (value) = i;
7413 /* Update the corresponding argument. */
7414 TMPL_ARG (args, level, idx) = value;
7418 /* Substitute into the PATTERN with the altered arguments. */
7419 if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
7420 TREE_VEC_ELT (result, i) =
7421 tsubst_expr (pattern, args, complain, in_decl,
7422 /*integral_constant_expression_p=*/false);
7423 else
7424 TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
7426 if (i == len)
7427 /* When we have incomplete argument packs, the last "expanded"
7428 result is itself a pack expansion, which allows us
7429 to deduce more arguments. */
7430 TREE_VEC_ELT (result, i) =
7431 make_pack_expansion (TREE_VEC_ELT (result, i));
7433 if (TREE_VEC_ELT (result, i) == error_mark_node)
7435 result = error_mark_node;
7436 break;
7440 /* Update ARGS to restore the substitution from parameter packs to
7441 their argument packs. */
7442 for (pack = packs; pack; pack = TREE_CHAIN (pack))
7444 tree parm = TREE_PURPOSE (pack);
7446 if (TREE_CODE (parm) == PARM_DECL)
7447 register_local_specialization (TREE_TYPE (pack), parm);
7448 else
7450 int idx, level;
7451 template_parm_level_and_index (parm, &level, &idx);
7453 /* Update the corresponding argument. */
7454 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
7455 TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
7456 TREE_TYPE (pack);
7457 else
7458 TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
7462 return result;
7465 /* Substitute ARGS into the vector or list of template arguments T. */
7467 static tree
7468 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7470 tree orig_t = t;
7471 int len = TREE_VEC_LENGTH (t);
7472 int need_new = 0, i, expanded_len_adjust = 0, out;
7473 tree *elts = (tree *) alloca (len * sizeof (tree));
7475 for (i = 0; i < len; i++)
7477 tree orig_arg = TREE_VEC_ELT (t, i);
7478 tree new_arg;
7480 if (TREE_CODE (orig_arg) == TREE_VEC)
7481 new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
7482 else if (PACK_EXPANSION_P (orig_arg))
7484 /* Substitute into an expansion expression. */
7485 new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
7487 if (TREE_CODE (new_arg) == TREE_VEC)
7488 /* Add to the expanded length adjustment the number of
7489 expanded arguments. We subtract one from this
7490 measurement, because the argument pack expression
7491 itself is already counted as 1 in
7492 LEN. EXPANDED_LEN_ADJUST can actually be negative, if
7493 the argument pack is empty. */
7494 expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
7496 else if (ARGUMENT_PACK_P (orig_arg))
7498 /* Substitute into each of the arguments. */
7499 new_arg = make_node (TREE_CODE (orig_arg));
7501 SET_ARGUMENT_PACK_ARGS (
7502 new_arg,
7503 tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
7504 args, complain, in_decl));
7506 if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
7507 new_arg = error_mark_node;
7509 if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
7510 TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
7511 complain, in_decl);
7512 TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
7514 if (TREE_TYPE (new_arg) == error_mark_node)
7515 new_arg = error_mark_node;
7518 else
7519 new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
7521 if (new_arg == error_mark_node)
7522 return error_mark_node;
7524 elts[i] = new_arg;
7525 if (new_arg != orig_arg)
7526 need_new = 1;
7529 if (!need_new)
7530 return t;
7532 /* Make space for the expanded arguments coming from template
7533 argument packs. */
7534 t = make_tree_vec (len + expanded_len_adjust);
7535 for (i = 0, out = 0; i < len; i++)
7537 if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
7538 || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
7539 && TREE_CODE (elts[i]) == TREE_VEC)
7541 int idx;
7543 /* Now expand the template argument pack "in place". */
7544 for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
7545 TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
7547 else
7549 TREE_VEC_ELT (t, out) = elts[i];
7550 out++;
7554 return t;
7557 /* Return the result of substituting ARGS into the template parameters
7558 given by PARMS. If there are m levels of ARGS and m + n levels of
7559 PARMS, then the result will contain n levels of PARMS. For
7560 example, if PARMS is `template <class T> template <class U>
7561 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
7562 result will be `template <int*, double, class V>'. */
7564 static tree
7565 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
7567 tree r = NULL_TREE;
7568 tree* new_parms;
7570 /* When substituting into a template, we must set
7571 PROCESSING_TEMPLATE_DECL as the template parameters may be
7572 dependent if they are based on one-another, and the dependency
7573 predicates are short-circuit outside of templates. */
7574 ++processing_template_decl;
7576 for (new_parms = &r;
7577 TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
7578 new_parms = &(TREE_CHAIN (*new_parms)),
7579 parms = TREE_CHAIN (parms))
7581 tree new_vec =
7582 make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
7583 int i;
7585 for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
7587 tree tuple;
7588 tree default_value;
7589 tree parm_decl;
7591 if (parms == error_mark_node)
7592 continue;
7594 tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
7596 if (tuple == error_mark_node)
7597 continue;
7599 default_value = TREE_PURPOSE (tuple);
7600 parm_decl = TREE_VALUE (tuple);
7602 parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
7603 if (TREE_CODE (parm_decl) == PARM_DECL
7604 && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
7605 parm_decl = error_mark_node;
7606 default_value = tsubst_template_arg (default_value, args,
7607 complain, NULL_TREE);
7609 tuple = build_tree_list (default_value, parm_decl);
7610 TREE_VEC_ELT (new_vec, i) = tuple;
7613 *new_parms =
7614 tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
7615 - TMPL_ARGS_DEPTH (args)),
7616 new_vec, NULL_TREE);
7619 --processing_template_decl;
7621 return r;
7624 /* Substitute the ARGS into the indicated aggregate (or enumeration)
7625 type T. If T is not an aggregate or enumeration type, it is
7626 handled as if by tsubst. IN_DECL is as for tsubst. If
7627 ENTERING_SCOPE is nonzero, T is the context for a template which
7628 we are presently tsubst'ing. Return the substituted value. */
7630 static tree
7631 tsubst_aggr_type (tree t,
7632 tree args,
7633 tsubst_flags_t complain,
7634 tree in_decl,
7635 int entering_scope)
7637 if (t == NULL_TREE)
7638 return NULL_TREE;
7640 switch (TREE_CODE (t))
7642 case RECORD_TYPE:
7643 if (TYPE_PTRMEMFUNC_P (t))
7644 return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
7646 /* Else fall through. */
7647 case ENUMERAL_TYPE:
7648 case UNION_TYPE:
7649 if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
7651 tree argvec;
7652 tree context;
7653 tree r;
7654 bool saved_skip_evaluation;
7656 /* In "sizeof(X<I>)" we need to evaluate "I". */
7657 saved_skip_evaluation = skip_evaluation;
7658 skip_evaluation = false;
7660 /* First, determine the context for the type we are looking
7661 up. */
7662 context = TYPE_CONTEXT (t);
7663 if (context)
7665 context = tsubst_aggr_type (context, args, complain,
7666 in_decl, /*entering_scope=*/1);
7667 /* If context is a nested class inside a class template,
7668 it may still need to be instantiated (c++/33959). */
7669 if (TYPE_P (context))
7670 context = complete_type (context);
7673 /* Then, figure out what arguments are appropriate for the
7674 type we are trying to find. For example, given:
7676 template <class T> struct S;
7677 template <class T, class U> void f(T, U) { S<U> su; }
7679 and supposing that we are instantiating f<int, double>,
7680 then our ARGS will be {int, double}, but, when looking up
7681 S we only want {double}. */
7682 argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
7683 complain, in_decl);
7684 if (argvec == error_mark_node)
7685 r = error_mark_node;
7686 else
7688 r = lookup_template_class (t, argvec, in_decl, context,
7689 entering_scope, complain);
7690 r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7693 skip_evaluation = saved_skip_evaluation;
7695 return r;
7697 else
7698 /* This is not a template type, so there's nothing to do. */
7699 return t;
7701 default:
7702 return tsubst (t, args, complain, in_decl);
7706 /* Substitute into the default argument ARG (a default argument for
7707 FN), which has the indicated TYPE. */
7709 tree
7710 tsubst_default_argument (tree fn, tree type, tree arg)
7712 tree saved_class_ptr = NULL_TREE;
7713 tree saved_class_ref = NULL_TREE;
7715 /* This default argument came from a template. Instantiate the
7716 default argument here, not in tsubst. In the case of
7717 something like:
7719 template <class T>
7720 struct S {
7721 static T t();
7722 void f(T = t());
7725 we must be careful to do name lookup in the scope of S<T>,
7726 rather than in the current class. */
7727 push_access_scope (fn);
7728 /* The "this" pointer is not valid in a default argument. */
7729 if (cfun)
7731 saved_class_ptr = current_class_ptr;
7732 cp_function_chain->x_current_class_ptr = NULL_TREE;
7733 saved_class_ref = current_class_ref;
7734 cp_function_chain->x_current_class_ref = NULL_TREE;
7737 push_deferring_access_checks(dk_no_deferred);
7738 /* The default argument expression may cause implicitly defined
7739 member functions to be synthesized, which will result in garbage
7740 collection. We must treat this situation as if we were within
7741 the body of function so as to avoid collecting live data on the
7742 stack. */
7743 ++function_depth;
7744 arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
7745 tf_warning_or_error, NULL_TREE,
7746 /*integral_constant_expression_p=*/false);
7747 --function_depth;
7748 pop_deferring_access_checks();
7750 /* Restore the "this" pointer. */
7751 if (cfun)
7753 cp_function_chain->x_current_class_ptr = saved_class_ptr;
7754 cp_function_chain->x_current_class_ref = saved_class_ref;
7757 pop_access_scope (fn);
7759 /* Make sure the default argument is reasonable. */
7760 arg = check_default_argument (type, arg);
7762 return arg;
7765 /* Substitute into all the default arguments for FN. */
7767 static void
7768 tsubst_default_arguments (tree fn)
7770 tree arg;
7771 tree tmpl_args;
7773 tmpl_args = DECL_TI_ARGS (fn);
7775 /* If this function is not yet instantiated, we certainly don't need
7776 its default arguments. */
7777 if (uses_template_parms (tmpl_args))
7778 return;
7780 for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
7781 arg;
7782 arg = TREE_CHAIN (arg))
7783 if (TREE_PURPOSE (arg))
7784 TREE_PURPOSE (arg) = tsubst_default_argument (fn,
7785 TREE_VALUE (arg),
7786 TREE_PURPOSE (arg));
7789 /* Substitute the ARGS into the T, which is a _DECL. Return the
7790 result of the substitution. Issue error and warning messages under
7791 control of COMPLAIN. */
7793 static tree
7794 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
7796 location_t saved_loc;
7797 tree r = NULL_TREE;
7798 tree in_decl = t;
7800 /* Set the filename and linenumber to improve error-reporting. */
7801 saved_loc = input_location;
7802 input_location = DECL_SOURCE_LOCATION (t);
7804 switch (TREE_CODE (t))
7806 case TEMPLATE_DECL:
7808 /* We can get here when processing a member function template,
7809 member class template, and template template parameter of
7810 a template class. */
7811 tree decl = DECL_TEMPLATE_RESULT (t);
7812 tree spec;
7813 tree tmpl_args;
7814 tree full_args;
7816 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7818 /* Template template parameter is treated here. */
7819 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7820 if (new_type == error_mark_node)
7821 return error_mark_node;
7823 r = copy_decl (t);
7824 TREE_CHAIN (r) = NULL_TREE;
7825 TREE_TYPE (r) = new_type;
7826 DECL_TEMPLATE_RESULT (r)
7827 = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
7828 DECL_TEMPLATE_PARMS (r)
7829 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7830 complain);
7831 TYPE_NAME (new_type) = r;
7832 break;
7835 /* We might already have an instance of this template.
7836 The ARGS are for the surrounding class type, so the
7837 full args contain the tsubst'd args for the context,
7838 plus the innermost args from the template decl. */
7839 tmpl_args = DECL_CLASS_TEMPLATE_P (t)
7840 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
7841 : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
7842 /* Because this is a template, the arguments will still be
7843 dependent, even after substitution. If
7844 PROCESSING_TEMPLATE_DECL is not set, the dependency
7845 predicates will short-circuit. */
7846 ++processing_template_decl;
7847 full_args = tsubst_template_args (tmpl_args, args,
7848 complain, in_decl);
7849 --processing_template_decl;
7850 if (full_args == error_mark_node)
7851 return error_mark_node;
7853 /* tsubst_template_args doesn't copy the vector if
7854 nothing changed. But, *something* should have
7855 changed. */
7856 gcc_assert (full_args != tmpl_args);
7858 spec = retrieve_specialization (t, full_args,
7859 /*class_specializations_p=*/true);
7860 if (spec != NULL_TREE)
7862 r = spec;
7863 break;
7866 /* Make a new template decl. It will be similar to the
7867 original, but will record the current template arguments.
7868 We also create a new function declaration, which is just
7869 like the old one, but points to this new template, rather
7870 than the old one. */
7871 r = copy_decl (t);
7872 gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
7873 TREE_CHAIN (r) = NULL_TREE;
7875 DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
7877 if (TREE_CODE (decl) == TYPE_DECL)
7879 tree new_type;
7880 ++processing_template_decl;
7881 new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7882 --processing_template_decl;
7883 if (new_type == error_mark_node)
7884 return error_mark_node;
7886 TREE_TYPE (r) = new_type;
7887 CLASSTYPE_TI_TEMPLATE (new_type) = r;
7888 DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
7889 DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
7890 DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
7892 else
7894 tree new_decl;
7895 ++processing_template_decl;
7896 new_decl = tsubst (decl, args, complain, in_decl);
7897 --processing_template_decl;
7898 if (new_decl == error_mark_node)
7899 return error_mark_node;
7901 DECL_TEMPLATE_RESULT (r) = new_decl;
7902 DECL_TI_TEMPLATE (new_decl) = r;
7903 TREE_TYPE (r) = TREE_TYPE (new_decl);
7904 DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
7905 DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
7908 SET_DECL_IMPLICIT_INSTANTIATION (r);
7909 DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
7910 DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
7912 /* The template parameters for this new template are all the
7913 template parameters for the old template, except the
7914 outermost level of parameters. */
7915 DECL_TEMPLATE_PARMS (r)
7916 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7917 complain);
7919 if (PRIMARY_TEMPLATE_P (t))
7920 DECL_PRIMARY_TEMPLATE (r) = r;
7922 if (TREE_CODE (decl) != TYPE_DECL)
7923 /* Record this non-type partial instantiation. */
7924 register_specialization (r, t,
7925 DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
7926 false);
7928 break;
7930 case FUNCTION_DECL:
7932 tree ctx;
7933 tree argvec = NULL_TREE;
7934 tree *friends;
7935 tree gen_tmpl;
7936 tree type;
7937 int member;
7938 int args_depth;
7939 int parms_depth;
7941 /* Nobody should be tsubst'ing into non-template functions. */
7942 gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
7944 if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
7946 tree spec;
7947 bool dependent_p;
7949 /* If T is not dependent, just return it. We have to
7950 increment PROCESSING_TEMPLATE_DECL because
7951 value_dependent_expression_p assumes that nothing is
7952 dependent when PROCESSING_TEMPLATE_DECL is zero. */
7953 ++processing_template_decl;
7954 dependent_p = value_dependent_expression_p (t);
7955 --processing_template_decl;
7956 if (!dependent_p)
7957 return t;
7959 /* Calculate the most general template of which R is a
7960 specialization, and the complete set of arguments used to
7961 specialize R. */
7962 gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
7963 argvec = tsubst_template_args (DECL_TI_ARGS
7964 (DECL_TEMPLATE_RESULT (gen_tmpl)),
7965 args, complain, in_decl);
7967 /* Check to see if we already have this specialization. */
7968 spec = retrieve_specialization (gen_tmpl, argvec,
7969 /*class_specializations_p=*/false);
7971 if (spec)
7973 r = spec;
7974 break;
7977 /* We can see more levels of arguments than parameters if
7978 there was a specialization of a member template, like
7979 this:
7981 template <class T> struct S { template <class U> void f(); }
7982 template <> template <class U> void S<int>::f(U);
7984 Here, we'll be substituting into the specialization,
7985 because that's where we can find the code we actually
7986 want to generate, but we'll have enough arguments for
7987 the most general template.
7989 We also deal with the peculiar case:
7991 template <class T> struct S {
7992 template <class U> friend void f();
7994 template <class U> void f() {}
7995 template S<int>;
7996 template void f<double>();
7998 Here, the ARGS for the instantiation of will be {int,
7999 double}. But, we only need as many ARGS as there are
8000 levels of template parameters in CODE_PATTERN. We are
8001 careful not to get fooled into reducing the ARGS in
8002 situations like:
8004 template <class T> struct S { template <class U> void f(U); }
8005 template <class T> template <> void S<T>::f(int) {}
8007 which we can spot because the pattern will be a
8008 specialization in this case. */
8009 args_depth = TMPL_ARGS_DEPTH (args);
8010 parms_depth =
8011 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
8012 if (args_depth > parms_depth
8013 && !DECL_TEMPLATE_SPECIALIZATION (t))
8014 args = get_innermost_template_args (args, parms_depth);
8016 else
8018 /* This special case arises when we have something like this:
8020 template <class T> struct S {
8021 friend void f<int>(int, double);
8024 Here, the DECL_TI_TEMPLATE for the friend declaration
8025 will be an IDENTIFIER_NODE. We are being called from
8026 tsubst_friend_function, and we want only to create a
8027 new decl (R) with appropriate types so that we can call
8028 determine_specialization. */
8029 gen_tmpl = NULL_TREE;
8032 if (DECL_CLASS_SCOPE_P (t))
8034 if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
8035 member = 2;
8036 else
8037 member = 1;
8038 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
8039 complain, t, /*entering_scope=*/1);
8041 else
8043 member = 0;
8044 ctx = DECL_CONTEXT (t);
8046 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8047 if (type == error_mark_node)
8048 return error_mark_node;
8050 /* We do NOT check for matching decls pushed separately at this
8051 point, as they may not represent instantiations of this
8052 template, and in any case are considered separate under the
8053 discrete model. */
8054 r = copy_decl (t);
8055 DECL_USE_TEMPLATE (r) = 0;
8056 TREE_TYPE (r) = type;
8057 /* Clear out the mangled name and RTL for the instantiation. */
8058 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8059 SET_DECL_RTL (r, NULL_RTX);
8060 DECL_INITIAL (r) = NULL_TREE;
8061 DECL_CONTEXT (r) = ctx;
8063 if (member && DECL_CONV_FN_P (r))
8064 /* Type-conversion operator. Reconstruct the name, in
8065 case it's the name of one of the template's parameters. */
8066 DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
8068 DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
8069 complain, t);
8070 DECL_RESULT (r) = NULL_TREE;
8072 TREE_STATIC (r) = 0;
8073 TREE_PUBLIC (r) = TREE_PUBLIC (t);
8074 DECL_EXTERNAL (r) = 1;
8075 /* If this is an instantiation of a function with internal
8076 linkage, we already know what object file linkage will be
8077 assigned to the instantiation. */
8078 DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
8079 DECL_DEFER_OUTPUT (r) = 0;
8080 TREE_CHAIN (r) = NULL_TREE;
8081 DECL_PENDING_INLINE_INFO (r) = 0;
8082 DECL_PENDING_INLINE_P (r) = 0;
8083 DECL_SAVED_TREE (r) = NULL_TREE;
8084 TREE_USED (r) = 0;
8085 if (DECL_CLONED_FUNCTION (r))
8087 DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
8088 args, complain, t);
8089 TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
8090 TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
8093 /* Set up the DECL_TEMPLATE_INFO for R. There's no need to do
8094 this in the special friend case mentioned above where
8095 GEN_TMPL is NULL. */
8096 if (gen_tmpl)
8098 DECL_TEMPLATE_INFO (r)
8099 = tree_cons (gen_tmpl, argvec, NULL_TREE);
8100 SET_DECL_IMPLICIT_INSTANTIATION (r);
8101 register_specialization (r, gen_tmpl, argvec, false);
8103 /* We're not supposed to instantiate default arguments
8104 until they are called, for a template. But, for a
8105 declaration like:
8107 template <class T> void f ()
8108 { extern void g(int i = T()); }
8110 we should do the substitution when the template is
8111 instantiated. We handle the member function case in
8112 instantiate_class_template since the default arguments
8113 might refer to other members of the class. */
8114 if (!member
8115 && !PRIMARY_TEMPLATE_P (gen_tmpl)
8116 && !uses_template_parms (argvec))
8117 tsubst_default_arguments (r);
8119 else
8120 DECL_TEMPLATE_INFO (r) = NULL_TREE;
8122 /* Copy the list of befriending classes. */
8123 for (friends = &DECL_BEFRIENDING_CLASSES (r);
8124 *friends;
8125 friends = &TREE_CHAIN (*friends))
8127 *friends = copy_node (*friends);
8128 TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
8129 args, complain,
8130 in_decl);
8133 if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
8135 maybe_retrofit_in_chrg (r);
8136 if (DECL_CONSTRUCTOR_P (r))
8137 grok_ctor_properties (ctx, r);
8138 /* If this is an instantiation of a member template, clone it.
8139 If it isn't, that'll be handled by
8140 clone_constructors_and_destructors. */
8141 if (PRIMARY_TEMPLATE_P (gen_tmpl))
8142 clone_function_decl (r, /*update_method_vec_p=*/0);
8144 else if (IDENTIFIER_OPNAME_P (DECL_NAME (r))
8145 && !grok_op_properties (r, (complain & tf_error) != 0))
8146 return error_mark_node;
8148 if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
8149 SET_DECL_FRIEND_CONTEXT (r,
8150 tsubst (DECL_FRIEND_CONTEXT (t),
8151 args, complain, in_decl));
8153 /* Possibly limit visibility based on template args. */
8154 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8155 if (DECL_VISIBILITY_SPECIFIED (t))
8157 DECL_VISIBILITY_SPECIFIED (r) = 0;
8158 DECL_ATTRIBUTES (r)
8159 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8161 determine_visibility (r);
8163 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8164 args, complain, in_decl);
8166 break;
8168 case PARM_DECL:
8170 tree type = NULL_TREE;
8171 int i, len = 1;
8172 tree expanded_types = NULL_TREE;
8173 tree prev_r = NULL_TREE;
8174 tree first_r = NULL_TREE;
8176 if (FUNCTION_PARAMETER_PACK_P (t))
8178 /* If there is a local specialization that isn't a
8179 parameter pack, it means that we're doing a "simple"
8180 substitution from inside tsubst_pack_expansion. Just
8181 return the local specialization (which will be a single
8182 parm). */
8183 tree spec = retrieve_local_specialization (t);
8184 if (spec
8185 && TREE_CODE (spec) == PARM_DECL
8186 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
8187 return spec;
8189 /* Expand the TYPE_PACK_EXPANSION that provides the types for
8190 the parameters in this function parameter pack. */
8191 expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
8192 complain, in_decl);
8193 if (TREE_CODE (expanded_types) == TREE_VEC)
8195 len = TREE_VEC_LENGTH (expanded_types);
8197 /* Zero-length parameter packs are boring. Just substitute
8198 into the chain. */
8199 if (len == 0)
8200 return tsubst (TREE_CHAIN (t), args, complain,
8201 TREE_CHAIN (t));
8203 else
8205 /* All we did was update the type. Make a note of that. */
8206 type = expanded_types;
8207 expanded_types = NULL_TREE;
8211 /* Loop through all of the parameter's we'll build. When T is
8212 a function parameter pack, LEN is the number of expanded
8213 types in EXPANDED_TYPES; otherwise, LEN is 1. */
8214 r = NULL_TREE;
8215 for (i = 0; i < len; ++i)
8217 prev_r = r;
8218 r = copy_node (t);
8219 if (DECL_TEMPLATE_PARM_P (t))
8220 SET_DECL_TEMPLATE_PARM_P (r);
8222 if (expanded_types)
8223 /* We're on the Ith parameter of the function parameter
8224 pack. */
8226 /* Get the Ith type. */
8227 type = TREE_VEC_ELT (expanded_types, i);
8229 if (DECL_NAME (r))
8230 /* Rename the parameter to include the index. */
8231 DECL_NAME (r) =
8232 make_ith_pack_parameter_name (DECL_NAME (r), i);
8234 else if (!type)
8235 /* We're dealing with a normal parameter. */
8236 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8238 type = type_decays_to (type);
8239 TREE_TYPE (r) = type;
8240 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8242 if (DECL_INITIAL (r))
8244 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
8245 DECL_INITIAL (r) = TREE_TYPE (r);
8246 else
8247 DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
8248 complain, in_decl);
8251 DECL_CONTEXT (r) = NULL_TREE;
8253 if (!DECL_TEMPLATE_PARM_P (r))
8254 DECL_ARG_TYPE (r) = type_passed_as (type);
8256 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8257 args, complain, in_decl);
8259 /* Keep track of the first new parameter we
8260 generate. That's what will be returned to the
8261 caller. */
8262 if (!first_r)
8263 first_r = r;
8265 /* Build a proper chain of parameters when substituting
8266 into a function parameter pack. */
8267 if (prev_r)
8268 TREE_CHAIN (prev_r) = r;
8271 if (TREE_CHAIN (t))
8272 TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
8273 complain, TREE_CHAIN (t));
8275 /* FIRST_R contains the start of the chain we've built. */
8276 r = first_r;
8278 break;
8280 case FIELD_DECL:
8282 tree type;
8284 r = copy_decl (t);
8285 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8286 if (type == error_mark_node)
8287 return error_mark_node;
8288 TREE_TYPE (r) = type;
8289 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8291 /* DECL_INITIAL gives the number of bits in a bit-field. */
8292 DECL_INITIAL (r)
8293 = tsubst_expr (DECL_INITIAL (t), args,
8294 complain, in_decl,
8295 /*integral_constant_expression_p=*/true);
8296 /* We don't have to set DECL_CONTEXT here; it is set by
8297 finish_member_declaration. */
8298 TREE_CHAIN (r) = NULL_TREE;
8299 if (VOID_TYPE_P (type))
8300 error ("instantiation of %q+D as type %qT", r, type);
8302 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8303 args, complain, in_decl);
8305 break;
8307 case USING_DECL:
8308 /* We reach here only for member using decls. */
8309 if (DECL_DEPENDENT_P (t))
8311 r = do_class_using_decl
8312 (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
8313 tsubst_copy (DECL_NAME (t), args, complain, in_decl));
8314 if (!r)
8315 r = error_mark_node;
8317 else
8319 r = copy_node (t);
8320 TREE_CHAIN (r) = NULL_TREE;
8322 break;
8324 case TYPE_DECL:
8325 case VAR_DECL:
8327 tree argvec = NULL_TREE;
8328 tree gen_tmpl = NULL_TREE;
8329 tree spec;
8330 tree tmpl = NULL_TREE;
8331 tree ctx;
8332 tree type = NULL_TREE;
8333 bool local_p;
8335 if (TREE_CODE (t) == TYPE_DECL
8336 && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
8338 /* If this is the canonical decl, we don't have to
8339 mess with instantiations, and often we can't (for
8340 typename, template type parms and such). Note that
8341 TYPE_NAME is not correct for the above test if
8342 we've copied the type for a typedef. */
8343 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8344 if (type == error_mark_node)
8345 return error_mark_node;
8346 r = TYPE_NAME (type);
8347 break;
8350 /* Check to see if we already have the specialization we
8351 need. */
8352 spec = NULL_TREE;
8353 if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
8355 /* T is a static data member or namespace-scope entity.
8356 We have to substitute into namespace-scope variables
8357 (even though such entities are never templates) because
8358 of cases like:
8360 template <class T> void f() { extern T t; }
8362 where the entity referenced is not known until
8363 instantiation time. */
8364 local_p = false;
8365 ctx = DECL_CONTEXT (t);
8366 if (DECL_CLASS_SCOPE_P (t))
8368 ctx = tsubst_aggr_type (ctx, args,
8369 complain,
8370 in_decl, /*entering_scope=*/1);
8371 /* If CTX is unchanged, then T is in fact the
8372 specialization we want. That situation occurs when
8373 referencing a static data member within in its own
8374 class. We can use pointer equality, rather than
8375 same_type_p, because DECL_CONTEXT is always
8376 canonical. */
8377 if (ctx == DECL_CONTEXT (t))
8378 spec = t;
8381 if (!spec)
8383 tmpl = DECL_TI_TEMPLATE (t);
8384 gen_tmpl = most_general_template (tmpl);
8385 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
8386 spec = (retrieve_specialization
8387 (gen_tmpl, argvec,
8388 /*class_specializations_p=*/false));
8391 else
8393 /* A local variable. */
8394 local_p = true;
8395 /* Subsequent calls to pushdecl will fill this in. */
8396 ctx = NULL_TREE;
8397 spec = retrieve_local_specialization (t);
8399 /* If we already have the specialization we need, there is
8400 nothing more to do. */
8401 if (spec)
8403 r = spec;
8404 break;
8407 /* Create a new node for the specialization we need. */
8408 r = copy_decl (t);
8409 if (type == NULL_TREE)
8410 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8411 if (TREE_CODE (r) == VAR_DECL)
8413 /* Even if the original location is out of scope, the
8414 newly substituted one is not. */
8415 DECL_DEAD_FOR_LOCAL (r) = 0;
8416 DECL_INITIALIZED_P (r) = 0;
8417 DECL_TEMPLATE_INSTANTIATED (r) = 0;
8418 if (type == error_mark_node)
8419 return error_mark_node;
8420 if (TREE_CODE (type) == FUNCTION_TYPE)
8422 /* It may seem that this case cannot occur, since:
8424 typedef void f();
8425 void g() { f x; }
8427 declares a function, not a variable. However:
8429 typedef void f();
8430 template <typename T> void g() { T t; }
8431 template void g<f>();
8433 is an attempt to declare a variable with function
8434 type. */
8435 error ("variable %qD has function type",
8436 /* R is not yet sufficiently initialized, so we
8437 just use its name. */
8438 DECL_NAME (r));
8439 return error_mark_node;
8441 type = complete_type (type);
8442 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
8443 = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
8444 type = check_var_type (DECL_NAME (r), type);
8446 if (DECL_HAS_VALUE_EXPR_P (t))
8448 tree ve = DECL_VALUE_EXPR (t);
8449 ve = tsubst_expr (ve, args, complain, in_decl,
8450 /*constant_expression_p=*/false);
8451 SET_DECL_VALUE_EXPR (r, ve);
8454 else if (DECL_SELF_REFERENCE_P (t))
8455 SET_DECL_SELF_REFERENCE_P (r);
8456 TREE_TYPE (r) = type;
8457 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8458 DECL_CONTEXT (r) = ctx;
8459 /* Clear out the mangled name and RTL for the instantiation. */
8460 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8461 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8462 SET_DECL_RTL (r, NULL_RTX);
8463 /* The initializer must not be expanded until it is required;
8464 see [temp.inst]. */
8465 DECL_INITIAL (r) = NULL_TREE;
8466 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8467 SET_DECL_RTL (r, NULL_RTX);
8468 DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
8469 if (TREE_CODE (r) == VAR_DECL)
8471 /* Possibly limit visibility based on template args. */
8472 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8473 if (DECL_VISIBILITY_SPECIFIED (t))
8475 DECL_VISIBILITY_SPECIFIED (r) = 0;
8476 DECL_ATTRIBUTES (r)
8477 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8479 determine_visibility (r);
8481 /* Preserve a typedef that names a type. */
8482 else if (TREE_CODE (r) == TYPE_DECL
8483 && DECL_ORIGINAL_TYPE (t)
8484 && type != error_mark_node)
8486 DECL_ORIGINAL_TYPE (r) = tsubst (DECL_ORIGINAL_TYPE (t),
8487 args, complain, in_decl);
8488 TREE_TYPE (r) = type = build_variant_type_copy (type);
8489 TYPE_NAME (type) = r;
8492 if (!local_p)
8494 /* A static data member declaration is always marked
8495 external when it is declared in-class, even if an
8496 initializer is present. We mimic the non-template
8497 processing here. */
8498 DECL_EXTERNAL (r) = 1;
8500 register_specialization (r, gen_tmpl, argvec, false);
8501 DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
8502 SET_DECL_IMPLICIT_INSTANTIATION (r);
8504 else
8505 register_local_specialization (r, t);
8507 TREE_CHAIN (r) = NULL_TREE;
8509 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
8510 (int) ATTR_FLAG_TYPE_IN_PLACE,
8511 args, complain, in_decl);
8512 layout_decl (r, 0);
8514 break;
8516 default:
8517 gcc_unreachable ();
8520 /* Restore the file and line information. */
8521 input_location = saved_loc;
8523 return r;
8526 /* Substitute into the ARG_TYPES of a function type. */
8528 static tree
8529 tsubst_arg_types (tree arg_types,
8530 tree args,
8531 tsubst_flags_t complain,
8532 tree in_decl)
8534 tree remaining_arg_types;
8535 tree type = NULL_TREE;
8536 int i = 1;
8537 tree expanded_args = NULL_TREE;
8538 tree default_arg;
8540 if (!arg_types || arg_types == void_list_node)
8541 return arg_types;
8543 remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
8544 args, complain, in_decl);
8545 if (remaining_arg_types == error_mark_node)
8546 return error_mark_node;
8548 if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
8550 /* For a pack expansion, perform substitution on the
8551 entire expression. Later on, we'll handle the arguments
8552 one-by-one. */
8553 expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
8554 args, complain, in_decl);
8556 if (TREE_CODE (expanded_args) == TREE_VEC)
8557 /* So that we'll spin through the parameters, one by one. */
8558 i = TREE_VEC_LENGTH (expanded_args);
8559 else
8561 /* We only partially substituted into the parameter
8562 pack. Our type is TYPE_PACK_EXPANSION. */
8563 type = expanded_args;
8564 expanded_args = NULL_TREE;
8568 while (i > 0) {
8569 --i;
8571 if (expanded_args)
8572 type = TREE_VEC_ELT (expanded_args, i);
8573 else if (!type)
8574 type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
8576 if (type == error_mark_node)
8577 return error_mark_node;
8578 if (VOID_TYPE_P (type))
8580 if (complain & tf_error)
8582 error ("invalid parameter type %qT", type);
8583 if (in_decl)
8584 error ("in declaration %q+D", in_decl);
8586 return error_mark_node;
8589 /* Do array-to-pointer, function-to-pointer conversion, and ignore
8590 top-level qualifiers as required. */
8591 type = TYPE_MAIN_VARIANT (type_decays_to (type));
8593 /* We do not substitute into default arguments here. The standard
8594 mandates that they be instantiated only when needed, which is
8595 done in build_over_call. */
8596 default_arg = TREE_PURPOSE (arg_types);
8598 if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
8600 /* We've instantiated a template before its default arguments
8601 have been parsed. This can happen for a nested template
8602 class, and is not an error unless we require the default
8603 argument in a call of this function. */
8604 remaining_arg_types =
8605 tree_cons (default_arg, type, remaining_arg_types);
8606 VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg),
8607 remaining_arg_types);
8609 else
8610 remaining_arg_types =
8611 hash_tree_cons (default_arg, type, remaining_arg_types);
8614 return remaining_arg_types;
8617 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
8618 *not* handle the exception-specification for FNTYPE, because the
8619 initial substitution of explicitly provided template parameters
8620 during argument deduction forbids substitution into the
8621 exception-specification:
8623 [temp.deduct]
8625 All references in the function type of the function template to the
8626 corresponding template parameters are replaced by the specified tem-
8627 plate argument values. If a substitution in a template parameter or
8628 in the function type of the function template results in an invalid
8629 type, type deduction fails. [Note: The equivalent substitution in
8630 exception specifications is done only when the function is instanti-
8631 ated, at which point a program is ill-formed if the substitution
8632 results in an invalid type.] */
8634 static tree
8635 tsubst_function_type (tree t,
8636 tree args,
8637 tsubst_flags_t complain,
8638 tree in_decl)
8640 tree return_type;
8641 tree arg_types;
8642 tree fntype;
8644 /* The TYPE_CONTEXT is not used for function/method types. */
8645 gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
8647 /* Substitute the return type. */
8648 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8649 if (return_type == error_mark_node)
8650 return error_mark_node;
8651 /* The standard does not presently indicate that creation of a
8652 function type with an invalid return type is a deduction failure.
8653 However, that is clearly analogous to creating an array of "void"
8654 or a reference to a reference. This is core issue #486. */
8655 if (TREE_CODE (return_type) == ARRAY_TYPE
8656 || TREE_CODE (return_type) == FUNCTION_TYPE)
8658 if (complain & tf_error)
8660 if (TREE_CODE (return_type) == ARRAY_TYPE)
8661 error ("function returning an array");
8662 else
8663 error ("function returning a function");
8665 return error_mark_node;
8668 /* Substitute the argument types. */
8669 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
8670 complain, in_decl);
8671 if (arg_types == error_mark_node)
8672 return error_mark_node;
8674 if (TYPE_QUALS (return_type) != TYPE_UNQUALIFIED
8675 && in_decl != NULL_TREE
8676 && !TREE_NO_WARNING (in_decl)
8677 && (SCALAR_TYPE_P (return_type) || VOID_TYPE_P (return_type)))
8678 warning (OPT_Wignored_qualifiers,
8679 "type qualifiers ignored on function return type");
8681 /* Construct a new type node and return it. */
8682 if (TREE_CODE (t) == FUNCTION_TYPE)
8683 fntype = build_function_type (return_type, arg_types);
8684 else
8686 tree r = TREE_TYPE (TREE_VALUE (arg_types));
8687 if (! IS_AGGR_TYPE (r))
8689 /* [temp.deduct]
8691 Type deduction may fail for any of the following
8692 reasons:
8694 -- Attempting to create "pointer to member of T" when T
8695 is not a class type. */
8696 if (complain & tf_error)
8697 error ("creating pointer to member function of non-class type %qT",
8699 return error_mark_node;
8702 fntype = build_method_type_directly (r, return_type,
8703 TREE_CHAIN (arg_types));
8705 fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
8706 fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
8708 return fntype;
8711 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE. Substitute the template
8712 ARGS into that specification, and return the substituted
8713 specification. If there is no specification, return NULL_TREE. */
8715 static tree
8716 tsubst_exception_specification (tree fntype,
8717 tree args,
8718 tsubst_flags_t complain,
8719 tree in_decl)
8721 tree specs;
8722 tree new_specs;
8724 specs = TYPE_RAISES_EXCEPTIONS (fntype);
8725 new_specs = NULL_TREE;
8726 if (specs)
8728 if (! TREE_VALUE (specs))
8729 new_specs = specs;
8730 else
8731 while (specs)
8733 tree spec;
8734 int i, len = 1;
8735 tree expanded_specs = NULL_TREE;
8737 if (PACK_EXPANSION_P (TREE_VALUE (specs)))
8739 /* Expand the pack expansion type. */
8740 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
8741 args, complain,
8742 in_decl);
8744 if (expanded_specs == error_mark_node)
8745 return error_mark_node;
8746 else if (TREE_CODE (expanded_specs) == TREE_VEC)
8747 len = TREE_VEC_LENGTH (expanded_specs);
8748 else
8750 /* We're substituting into a member template, so
8751 we got a TYPE_PACK_EXPANSION back. Add that
8752 expansion and move on. */
8753 gcc_assert (TREE_CODE (expanded_specs)
8754 == TYPE_PACK_EXPANSION);
8755 new_specs = add_exception_specifier (new_specs,
8756 expanded_specs,
8757 complain);
8758 specs = TREE_CHAIN (specs);
8759 continue;
8763 for (i = 0; i < len; ++i)
8765 if (expanded_specs)
8766 spec = TREE_VEC_ELT (expanded_specs, i);
8767 else
8768 spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
8769 if (spec == error_mark_node)
8770 return spec;
8771 new_specs = add_exception_specifier (new_specs, spec,
8772 complain);
8775 specs = TREE_CHAIN (specs);
8778 return new_specs;
8781 /* Take the tree structure T and replace template parameters used
8782 therein with the argument vector ARGS. IN_DECL is an associated
8783 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
8784 Issue error and warning messages under control of COMPLAIN. Note
8785 that we must be relatively non-tolerant of extensions here, in
8786 order to preserve conformance; if we allow substitutions that
8787 should not be allowed, we may allow argument deductions that should
8788 not succeed, and therefore report ambiguous overload situations
8789 where there are none. In theory, we could allow the substitution,
8790 but indicate that it should have failed, and allow our caller to
8791 make sure that the right thing happens, but we don't try to do this
8792 yet.
8794 This function is used for dealing with types, decls and the like;
8795 for expressions, use tsubst_expr or tsubst_copy. */
8797 static tree
8798 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8800 tree type, r;
8802 if (t == NULL_TREE || t == error_mark_node
8803 || t == integer_type_node
8804 || t == void_type_node
8805 || t == char_type_node
8806 || t == unknown_type_node
8807 || TREE_CODE (t) == NAMESPACE_DECL)
8808 return t;
8810 if (DECL_P (t))
8811 return tsubst_decl (t, args, complain);
8813 if (TREE_CODE (t) == IDENTIFIER_NODE)
8814 type = IDENTIFIER_TYPE_VALUE (t);
8815 else
8816 type = TREE_TYPE (t);
8818 gcc_assert (type != unknown_type_node);
8820 /* Reuse typedefs. We need to do this to handle dependent attributes,
8821 such as attribute aligned. */
8822 if (TYPE_P (t)
8823 && TYPE_NAME (t)
8824 && TYPE_NAME (t) != TYPE_MAIN_DECL (t))
8826 tree decl = TYPE_NAME (t);
8828 if (DECL_CLASS_SCOPE_P (decl)
8829 && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl)))
8831 tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
8832 tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
8833 r = retrieve_specialization (tmpl, gen_args, false);
8835 else if (DECL_FUNCTION_SCOPE_P (decl)
8836 && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl)))
8837 r = retrieve_local_specialization (decl);
8838 else
8839 /* The typedef is from a non-template context. */
8840 return t;
8842 if (r)
8844 r = TREE_TYPE (r);
8845 r = cp_build_qualified_type_real
8846 (r, cp_type_quals (t) | cp_type_quals (r),
8847 complain | tf_ignore_bad_quals);
8848 return r;
8850 /* Else we must be instantiating the typedef, so fall through. */
8853 if (type
8854 && TREE_CODE (t) != TYPENAME_TYPE
8855 && TREE_CODE (t) != IDENTIFIER_NODE
8856 && TREE_CODE (t) != FUNCTION_TYPE
8857 && TREE_CODE (t) != METHOD_TYPE)
8858 type = tsubst (type, args, complain, in_decl);
8859 if (type == error_mark_node)
8860 return error_mark_node;
8862 switch (TREE_CODE (t))
8864 case RECORD_TYPE:
8865 case UNION_TYPE:
8866 case ENUMERAL_TYPE:
8867 return tsubst_aggr_type (t, args, complain, in_decl,
8868 /*entering_scope=*/0);
8870 case ERROR_MARK:
8871 case IDENTIFIER_NODE:
8872 case VOID_TYPE:
8873 case REAL_TYPE:
8874 case COMPLEX_TYPE:
8875 case VECTOR_TYPE:
8876 case BOOLEAN_TYPE:
8877 case INTEGER_CST:
8878 case REAL_CST:
8879 case STRING_CST:
8880 return t;
8882 case INTEGER_TYPE:
8883 if (t == integer_type_node)
8884 return t;
8886 if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
8887 && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
8888 return t;
8891 tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
8893 max = tsubst_expr (omax, args, complain, in_decl,
8894 /*integral_constant_expression_p=*/false);
8895 max = fold_decl_constant_value (max);
8897 if (TREE_CODE (max) != INTEGER_CST
8898 && TREE_CODE (max) != TEMPLATE_PARM_INDEX
8899 && !at_function_scope_p ())
8901 if (complain & tf_error)
8902 error ("array bound is not an integer constant");
8903 return error_mark_node;
8906 /* [temp.deduct]
8908 Type deduction may fail for any of the following
8909 reasons:
8911 Attempting to create an array with a size that is
8912 zero or negative. */
8913 if (integer_zerop (max) && !(complain & tf_error))
8914 /* We must fail if performing argument deduction (as
8915 indicated by the state of complain), so that
8916 another substitution can be found. */
8917 return error_mark_node;
8918 else if (TREE_CODE (max) == INTEGER_CST
8919 && INT_CST_LT (max, integer_zero_node))
8921 if (complain & tf_error)
8922 error ("creating array with negative size (%qE)", max);
8924 return error_mark_node;
8927 return compute_array_index_type (NULL_TREE, max);
8930 case TEMPLATE_TYPE_PARM:
8931 case TEMPLATE_TEMPLATE_PARM:
8932 case BOUND_TEMPLATE_TEMPLATE_PARM:
8933 case TEMPLATE_PARM_INDEX:
8935 int idx;
8936 int level;
8937 int levels;
8938 tree arg = NULL_TREE;
8940 r = NULL_TREE;
8942 gcc_assert (TREE_VEC_LENGTH (args) > 0);
8943 template_parm_level_and_index (t, &level, &idx);
8945 levels = TMPL_ARGS_DEPTH (args);
8946 if (level <= levels)
8948 arg = TMPL_ARG (args, level, idx);
8950 if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
8951 /* See through ARGUMENT_PACK_SELECT arguments. */
8952 arg = ARGUMENT_PACK_SELECT_ARG (arg);
8955 if (arg == error_mark_node)
8956 return error_mark_node;
8957 else if (arg != NULL_TREE)
8959 if (ARGUMENT_PACK_P (arg))
8960 /* If ARG is an argument pack, we don't actually want to
8961 perform a substitution here, because substitutions
8962 for argument packs are only done
8963 element-by-element. We can get to this point when
8964 substituting the type of a non-type template
8965 parameter pack, when that type actually contains
8966 template parameter packs from an outer template, e.g.,
8968 template<typename... Types> struct A {
8969 template<Types... Values> struct B { };
8970 }; */
8971 return t;
8973 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
8975 int quals;
8976 gcc_assert (TYPE_P (arg));
8978 /* cv-quals from the template are discarded when
8979 substituting in a function or reference type. */
8980 if (TREE_CODE (arg) == FUNCTION_TYPE
8981 || TREE_CODE (arg) == METHOD_TYPE
8982 || TREE_CODE (arg) == REFERENCE_TYPE)
8983 quals = cp_type_quals (arg);
8984 else
8985 quals = cp_type_quals (arg) | cp_type_quals (t);
8987 return cp_build_qualified_type_real
8988 (arg, quals, complain | tf_ignore_bad_quals);
8990 else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8992 /* We are processing a type constructed from a
8993 template template parameter. */
8994 tree argvec = tsubst (TYPE_TI_ARGS (t),
8995 args, complain, in_decl);
8996 if (argvec == error_mark_node)
8997 return error_mark_node;
8999 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
9000 are resolving nested-types in the signature of a
9001 member function templates. Otherwise ARG is a
9002 TEMPLATE_DECL and is the real template to be
9003 instantiated. */
9004 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
9005 arg = TYPE_NAME (arg);
9007 r = lookup_template_class (arg,
9008 argvec, in_decl,
9009 DECL_CONTEXT (arg),
9010 /*entering_scope=*/0,
9011 complain);
9012 return cp_build_qualified_type_real
9013 (r, TYPE_QUALS (t), complain);
9015 else
9016 /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX. */
9017 return arg;
9020 if (level == 1)
9021 /* This can happen during the attempted tsubst'ing in
9022 unify. This means that we don't yet have any information
9023 about the template parameter in question. */
9024 return t;
9026 /* If we get here, we must have been looking at a parm for a
9027 more deeply nested template. Make a new version of this
9028 template parameter, but with a lower level. */
9029 switch (TREE_CODE (t))
9031 case TEMPLATE_TYPE_PARM:
9032 case TEMPLATE_TEMPLATE_PARM:
9033 case BOUND_TEMPLATE_TEMPLATE_PARM:
9034 if (cp_type_quals (t))
9036 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
9037 r = cp_build_qualified_type_real
9038 (r, cp_type_quals (t),
9039 complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
9040 ? tf_ignore_bad_quals : 0));
9042 else
9044 r = copy_type (t);
9045 TEMPLATE_TYPE_PARM_INDEX (r)
9046 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
9047 r, levels, args, complain);
9048 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
9049 TYPE_MAIN_VARIANT (r) = r;
9050 TYPE_POINTER_TO (r) = NULL_TREE;
9051 TYPE_REFERENCE_TO (r) = NULL_TREE;
9053 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
9054 /* We have reduced the level of the template
9055 template parameter, but not the levels of its
9056 template parameters, so canonical_type_parameter
9057 will not be able to find the canonical template
9058 template parameter for this level. Thus, we
9059 require structural equality checking to compare
9060 TEMPLATE_TEMPLATE_PARMs. */
9061 SET_TYPE_STRUCTURAL_EQUALITY (r);
9062 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
9063 SET_TYPE_STRUCTURAL_EQUALITY (r);
9064 else
9065 TYPE_CANONICAL (r) = canonical_type_parameter (r);
9067 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
9069 tree argvec = tsubst (TYPE_TI_ARGS (t), args,
9070 complain, in_decl);
9071 if (argvec == error_mark_node)
9072 return error_mark_node;
9074 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
9075 = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
9078 break;
9080 case TEMPLATE_PARM_INDEX:
9081 r = reduce_template_parm_level (t, type, levels, args, complain);
9082 break;
9084 default:
9085 gcc_unreachable ();
9088 return r;
9091 case TREE_LIST:
9093 tree purpose, value, chain;
9095 if (t == void_list_node)
9096 return t;
9098 purpose = TREE_PURPOSE (t);
9099 if (purpose)
9101 purpose = tsubst (purpose, args, complain, in_decl);
9102 if (purpose == error_mark_node)
9103 return error_mark_node;
9105 value = TREE_VALUE (t);
9106 if (value)
9108 value = tsubst (value, args, complain, in_decl);
9109 if (value == error_mark_node)
9110 return error_mark_node;
9112 chain = TREE_CHAIN (t);
9113 if (chain && chain != void_type_node)
9115 chain = tsubst (chain, args, complain, in_decl);
9116 if (chain == error_mark_node)
9117 return error_mark_node;
9119 if (purpose == TREE_PURPOSE (t)
9120 && value == TREE_VALUE (t)
9121 && chain == TREE_CHAIN (t))
9122 return t;
9123 return hash_tree_cons (purpose, value, chain);
9126 case TREE_BINFO:
9127 /* We should never be tsubsting a binfo. */
9128 gcc_unreachable ();
9130 case TREE_VEC:
9131 /* A vector of template arguments. */
9132 gcc_assert (!type);
9133 return tsubst_template_args (t, args, complain, in_decl);
9135 case POINTER_TYPE:
9136 case REFERENCE_TYPE:
9138 enum tree_code code;
9140 if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
9141 return t;
9143 code = TREE_CODE (t);
9146 /* [temp.deduct]
9148 Type deduction may fail for any of the following
9149 reasons:
9151 -- Attempting to create a pointer to reference type.
9152 -- Attempting to create a reference to a reference type or
9153 a reference to void.
9155 Core issue 106 says that creating a reference to a reference
9156 during instantiation is no longer a cause for failure. We
9157 only enforce this check in strict C++98 mode. */
9158 if ((TREE_CODE (type) == REFERENCE_TYPE
9159 && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
9160 || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
9162 static location_t last_loc;
9164 /* We keep track of the last time we issued this error
9165 message to avoid spewing a ton of messages during a
9166 single bad template instantiation. */
9167 if (complain & tf_error
9168 #ifdef USE_MAPPED_LOCATION
9169 && last_loc != input_location
9170 #else
9171 && (last_loc.line != input_line
9172 || last_loc.file != input_filename)
9173 #endif
9176 if (TREE_CODE (type) == VOID_TYPE)
9177 error ("forming reference to void");
9178 else
9179 error ("forming %s to reference type %qT",
9180 (code == POINTER_TYPE) ? "pointer" : "reference",
9181 type);
9182 last_loc = input_location;
9185 return error_mark_node;
9187 else if (code == POINTER_TYPE)
9189 r = build_pointer_type (type);
9190 if (TREE_CODE (type) == METHOD_TYPE)
9191 r = build_ptrmemfunc_type (r);
9193 else if (TREE_CODE (type) == REFERENCE_TYPE)
9194 /* In C++0x, during template argument substitution, when there is an
9195 attempt to create a reference to a reference type, reference
9196 collapsing is applied as described in [14.3.1/4 temp.arg.type]:
9198 "If a template-argument for a template-parameter T names a type
9199 that is a reference to a type A, an attempt to create the type
9200 'lvalue reference to cv T' creates the type 'lvalue reference to
9201 A,' while an attempt to create the type type rvalue reference to
9202 cv T' creates the type T"
9204 r = cp_build_reference_type
9205 (TREE_TYPE (type),
9206 TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
9207 else
9208 r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
9209 r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
9211 if (r != error_mark_node)
9212 /* Will this ever be needed for TYPE_..._TO values? */
9213 layout_type (r);
9215 return r;
9217 case OFFSET_TYPE:
9219 r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
9220 if (r == error_mark_node || !IS_AGGR_TYPE (r))
9222 /* [temp.deduct]
9224 Type deduction may fail for any of the following
9225 reasons:
9227 -- Attempting to create "pointer to member of T" when T
9228 is not a class type. */
9229 if (complain & tf_error)
9230 error ("creating pointer to member of non-class type %qT", r);
9231 return error_mark_node;
9233 if (TREE_CODE (type) == REFERENCE_TYPE)
9235 if (complain & tf_error)
9236 error ("creating pointer to member reference type %qT", type);
9237 return error_mark_node;
9239 if (TREE_CODE (type) == VOID_TYPE)
9241 if (complain & tf_error)
9242 error ("creating pointer to member of type void");
9243 return error_mark_node;
9245 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
9246 if (TREE_CODE (type) == FUNCTION_TYPE)
9248 /* The type of the implicit object parameter gets its
9249 cv-qualifiers from the FUNCTION_TYPE. */
9250 tree method_type;
9251 tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
9252 cp_type_quals (type));
9253 tree memptr;
9254 method_type = build_method_type_directly (this_type,
9255 TREE_TYPE (type),
9256 TYPE_ARG_TYPES (type));
9257 memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
9258 return cp_build_qualified_type_real (memptr, cp_type_quals (t),
9259 complain);
9261 else
9262 return cp_build_qualified_type_real (build_ptrmem_type (r, type),
9263 TYPE_QUALS (t),
9264 complain);
9266 case FUNCTION_TYPE:
9267 case METHOD_TYPE:
9269 tree fntype;
9270 tree specs;
9271 fntype = tsubst_function_type (t, args, complain, in_decl);
9272 if (fntype == error_mark_node)
9273 return error_mark_node;
9275 /* Substitute the exception specification. */
9276 specs = tsubst_exception_specification (t, args, complain,
9277 in_decl);
9278 if (specs == error_mark_node)
9279 return error_mark_node;
9280 if (specs)
9281 fntype = build_exception_variant (fntype, specs);
9282 return fntype;
9284 case ARRAY_TYPE:
9286 tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
9287 if (domain == error_mark_node)
9288 return error_mark_node;
9290 /* As an optimization, we avoid regenerating the array type if
9291 it will obviously be the same as T. */
9292 if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
9293 return t;
9295 /* These checks should match the ones in grokdeclarator.
9297 [temp.deduct]
9299 The deduction may fail for any of the following reasons:
9301 -- Attempting to create an array with an element type that
9302 is void, a function type, or a reference type, or [DR337]
9303 an abstract class type. */
9304 if (TREE_CODE (type) == VOID_TYPE
9305 || TREE_CODE (type) == FUNCTION_TYPE
9306 || TREE_CODE (type) == REFERENCE_TYPE)
9308 if (complain & tf_error)
9309 error ("creating array of %qT", type);
9310 return error_mark_node;
9312 if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
9314 if (complain & tf_error)
9315 error ("creating array of %qT, which is an abstract class type",
9316 type);
9317 return error_mark_node;
9320 r = build_cplus_array_type (type, domain);
9322 if (TYPE_USER_ALIGN (t))
9324 TYPE_ALIGN (r) = TYPE_ALIGN (t);
9325 TYPE_USER_ALIGN (r) = 1;
9328 return r;
9331 case PLUS_EXPR:
9332 case MINUS_EXPR:
9334 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9335 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9337 if (e1 == error_mark_node || e2 == error_mark_node)
9338 return error_mark_node;
9340 return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
9343 case NEGATE_EXPR:
9344 case NOP_EXPR:
9346 tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9347 if (e == error_mark_node)
9348 return error_mark_node;
9350 return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
9353 case TYPENAME_TYPE:
9355 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9356 in_decl, /*entering_scope=*/1);
9357 tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
9358 complain, in_decl);
9360 if (ctx == error_mark_node || f == error_mark_node)
9361 return error_mark_node;
9363 if (!IS_AGGR_TYPE (ctx))
9365 if (complain & tf_error)
9366 error ("%qT is not a class, struct, or union type", ctx);
9367 return error_mark_node;
9369 else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
9371 /* Normally, make_typename_type does not require that the CTX
9372 have complete type in order to allow things like:
9374 template <class T> struct S { typename S<T>::X Y; };
9376 But, such constructs have already been resolved by this
9377 point, so here CTX really should have complete type, unless
9378 it's a partial instantiation. */
9379 ctx = complete_type (ctx);
9380 if (!COMPLETE_TYPE_P (ctx))
9382 if (complain & tf_error)
9383 cxx_incomplete_type_error (NULL_TREE, ctx);
9384 return error_mark_node;
9388 f = make_typename_type (ctx, f, typename_type,
9389 (complain & tf_error) | tf_keep_type_decl);
9390 if (f == error_mark_node)
9391 return f;
9392 if (TREE_CODE (f) == TYPE_DECL)
9394 complain |= tf_ignore_bad_quals;
9395 f = TREE_TYPE (f);
9398 if (TREE_CODE (f) != TYPENAME_TYPE)
9400 if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
9401 error ("%qT resolves to %qT, which is not an enumeration type",
9402 t, f);
9403 else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
9404 error ("%qT resolves to %qT, which is is not a class type",
9405 t, f);
9408 return cp_build_qualified_type_real
9409 (f, cp_type_quals (f) | cp_type_quals (t), complain);
9412 case UNBOUND_CLASS_TEMPLATE:
9414 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9415 in_decl, /*entering_scope=*/1);
9416 tree name = TYPE_IDENTIFIER (t);
9417 tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
9419 if (ctx == error_mark_node || name == error_mark_node)
9420 return error_mark_node;
9422 if (parm_list)
9423 parm_list = tsubst_template_parms (parm_list, args, complain);
9424 return make_unbound_class_template (ctx, name, parm_list, complain);
9427 case INDIRECT_REF:
9428 case ADDR_EXPR:
9429 case CALL_EXPR:
9430 gcc_unreachable ();
9432 case ARRAY_REF:
9434 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9435 tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl,
9436 /*integral_constant_expression_p=*/false);
9437 if (e1 == error_mark_node || e2 == error_mark_node)
9438 return error_mark_node;
9440 return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
9443 case SCOPE_REF:
9445 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9446 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9447 if (e1 == error_mark_node || e2 == error_mark_node)
9448 return error_mark_node;
9450 return build_qualified_name (/*type=*/NULL_TREE,
9451 e1, e2, QUALIFIED_NAME_IS_TEMPLATE (t));
9454 case TYPEOF_TYPE:
9456 tree type;
9458 type = finish_typeof (tsubst_expr
9459 (TYPEOF_TYPE_EXPR (t), args,
9460 complain, in_decl,
9461 /*integral_constant_expression_p=*/false));
9462 return cp_build_qualified_type_real (type,
9463 cp_type_quals (t)
9464 | cp_type_quals (type),
9465 complain);
9468 case DECLTYPE_TYPE:
9470 tree type;
9472 type =
9473 finish_decltype_type (tsubst_expr
9474 (DECLTYPE_TYPE_EXPR (t), args,
9475 complain, in_decl,
9476 /*integral_constant_expression_p=*/false),
9477 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t));
9478 return cp_build_qualified_type_real (type,
9479 cp_type_quals (t)
9480 | cp_type_quals (type),
9481 complain);
9484 case TYPE_ARGUMENT_PACK:
9485 case NONTYPE_ARGUMENT_PACK:
9487 tree r = make_node (TREE_CODE (t));
9488 tree packed_out =
9489 tsubst_template_args (ARGUMENT_PACK_ARGS (t),
9490 args,
9491 complain,
9492 in_decl);
9493 SET_ARGUMENT_PACK_ARGS (r, packed_out);
9495 /* For template nontype argument packs, also substitute into
9496 the type. */
9497 if (TREE_CODE (t) == NONTYPE_ARGUMENT_PACK)
9498 TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
9500 return r;
9502 break;
9504 default:
9505 sorry ("use of %qs in template",
9506 tree_code_name [(int) TREE_CODE (t)]);
9507 return error_mark_node;
9511 /* Like tsubst_expr for a BASELINK. OBJECT_TYPE, if non-NULL, is the
9512 type of the expression on the left-hand side of the "." or "->"
9513 operator. */
9515 static tree
9516 tsubst_baselink (tree baselink, tree object_type,
9517 tree args, tsubst_flags_t complain, tree in_decl)
9519 tree name;
9520 tree qualifying_scope;
9521 tree fns;
9522 tree optype;
9523 tree template_args = 0;
9524 bool template_id_p = false;
9526 /* A baselink indicates a function from a base class. Both the
9527 BASELINK_ACCESS_BINFO and the base class referenced may
9528 indicate bases of the template class, rather than the
9529 instantiated class. In addition, lookups that were not
9530 ambiguous before may be ambiguous now. Therefore, we perform
9531 the lookup again. */
9532 qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
9533 qualifying_scope = tsubst (qualifying_scope, args,
9534 complain, in_decl);
9535 fns = BASELINK_FUNCTIONS (baselink);
9536 optype = BASELINK_OPTYPE (baselink);
9537 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
9539 template_id_p = true;
9540 template_args = TREE_OPERAND (fns, 1);
9541 fns = TREE_OPERAND (fns, 0);
9542 if (template_args)
9543 template_args = tsubst_template_args (template_args, args,
9544 complain, in_decl);
9546 name = DECL_NAME (get_first_fn (fns));
9547 baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
9549 /* If lookup found a single function, mark it as used at this
9550 point. (If it lookup found multiple functions the one selected
9551 later by overload resolution will be marked as used at that
9552 point.) */
9553 if (BASELINK_P (baselink))
9554 fns = BASELINK_FUNCTIONS (baselink);
9555 if (!template_id_p && !really_overloaded_fn (fns))
9556 mark_used (OVL_CURRENT (fns));
9558 /* Add back the template arguments, if present. */
9559 if (BASELINK_P (baselink) && template_id_p)
9560 BASELINK_FUNCTIONS (baselink)
9561 = build_nt (TEMPLATE_ID_EXPR,
9562 BASELINK_FUNCTIONS (baselink),
9563 template_args);
9564 /* Update the conversion operator type. */
9565 BASELINK_OPTYPE (baselink)
9566 = tsubst (optype, args, complain, in_decl);
9568 if (!object_type)
9569 object_type = current_class_type;
9570 return adjust_result_of_qualified_name_lookup (baselink,
9571 qualifying_scope,
9572 object_type);
9575 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID. DONE is
9576 true if the qualified-id will be a postfix-expression in-and-of
9577 itself; false if more of the postfix-expression follows the
9578 QUALIFIED_ID. ADDRESS_P is true if the qualified-id is the operand
9579 of "&". */
9581 static tree
9582 tsubst_qualified_id (tree qualified_id, tree args,
9583 tsubst_flags_t complain, tree in_decl,
9584 bool done, bool address_p)
9586 tree expr;
9587 tree scope;
9588 tree name;
9589 bool is_template;
9590 tree template_args;
9592 gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
9594 /* Figure out what name to look up. */
9595 name = TREE_OPERAND (qualified_id, 1);
9596 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
9598 is_template = true;
9599 template_args = TREE_OPERAND (name, 1);
9600 if (template_args)
9601 template_args = tsubst_template_args (template_args, args,
9602 complain, in_decl);
9603 name = TREE_OPERAND (name, 0);
9605 else
9607 is_template = false;
9608 template_args = NULL_TREE;
9611 /* Substitute into the qualifying scope. When there are no ARGS, we
9612 are just trying to simplify a non-dependent expression. In that
9613 case the qualifying scope may be dependent, and, in any case,
9614 substituting will not help. */
9615 scope = TREE_OPERAND (qualified_id, 0);
9616 if (args)
9618 scope = tsubst (scope, args, complain, in_decl);
9619 expr = tsubst_copy (name, args, complain, in_decl);
9621 else
9622 expr = name;
9624 if (dependent_type_p (scope))
9625 return build_qualified_name (/*type=*/NULL_TREE,
9626 scope, expr,
9627 QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
9629 if (!BASELINK_P (name) && !DECL_P (expr))
9631 if (TREE_CODE (expr) == BIT_NOT_EXPR)
9632 /* If this were actually a destructor call, it would have been
9633 parsed as such by the parser. */
9634 expr = error_mark_node;
9635 else
9636 expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
9637 if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
9638 ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
9640 if (complain & tf_error)
9642 error ("dependent-name %qE is parsed as a non-type, but "
9643 "instantiation yields a type", qualified_id);
9644 inform ("say %<typename %E%> if a type is meant", qualified_id);
9646 return error_mark_node;
9650 if (DECL_P (expr))
9652 check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
9653 scope);
9654 /* Remember that there was a reference to this entity. */
9655 mark_used (expr);
9658 if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
9660 if (complain & tf_error)
9661 qualified_name_lookup_error (scope,
9662 TREE_OPERAND (qualified_id, 1),
9663 expr);
9664 return error_mark_node;
9667 if (is_template)
9668 expr = lookup_template_function (expr, template_args);
9670 if (expr == error_mark_node && complain & tf_error)
9671 qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
9672 expr);
9673 else if (TYPE_P (scope))
9675 expr = (adjust_result_of_qualified_name_lookup
9676 (expr, scope, current_class_type));
9677 expr = (finish_qualified_id_expr
9678 (scope, expr, done, address_p,
9679 QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
9680 /*template_arg_p=*/false));
9683 /* Expressions do not generally have reference type. */
9684 if (TREE_CODE (expr) != SCOPE_REF
9685 /* However, if we're about to form a pointer-to-member, we just
9686 want the referenced member referenced. */
9687 && TREE_CODE (expr) != OFFSET_REF)
9688 expr = convert_from_reference (expr);
9690 return expr;
9693 /* Like tsubst, but deals with expressions. This function just replaces
9694 template parms; to finish processing the resultant expression, use
9695 tsubst_expr. */
9697 static tree
9698 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9700 enum tree_code code;
9701 tree r;
9703 if (t == NULL_TREE || t == error_mark_node)
9704 return t;
9706 code = TREE_CODE (t);
9708 switch (code)
9710 case PARM_DECL:
9711 r = retrieve_local_specialization (t);
9712 gcc_assert (r != NULL);
9713 if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
9714 r = ARGUMENT_PACK_SELECT_ARG (r);
9715 mark_used (r);
9716 return r;
9718 case CONST_DECL:
9720 tree enum_type;
9721 tree v;
9723 if (DECL_TEMPLATE_PARM_P (t))
9724 return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
9725 /* There is no need to substitute into namespace-scope
9726 enumerators. */
9727 if (DECL_NAMESPACE_SCOPE_P (t))
9728 return t;
9729 /* If ARGS is NULL, then T is known to be non-dependent. */
9730 if (args == NULL_TREE)
9731 return integral_constant_value (t);
9733 /* Unfortunately, we cannot just call lookup_name here.
9734 Consider:
9736 template <int I> int f() {
9737 enum E { a = I };
9738 struct S { void g() { E e = a; } };
9741 When we instantiate f<7>::S::g(), say, lookup_name is not
9742 clever enough to find f<7>::a. */
9743 enum_type
9744 = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
9745 /*entering_scope=*/0);
9747 for (v = TYPE_VALUES (enum_type);
9748 v != NULL_TREE;
9749 v = TREE_CHAIN (v))
9750 if (TREE_PURPOSE (v) == DECL_NAME (t))
9751 return TREE_VALUE (v);
9753 /* We didn't find the name. That should never happen; if
9754 name-lookup found it during preliminary parsing, we
9755 should find it again here during instantiation. */
9756 gcc_unreachable ();
9758 return t;
9760 case FIELD_DECL:
9761 if (DECL_CONTEXT (t))
9763 tree ctx;
9765 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
9766 /*entering_scope=*/1);
9767 if (ctx != DECL_CONTEXT (t))
9769 tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
9770 if (!r)
9772 if (complain & tf_error)
9773 error ("using invalid field %qD", t);
9774 return error_mark_node;
9776 return r;
9780 return t;
9782 case VAR_DECL:
9783 case FUNCTION_DECL:
9784 if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
9785 || local_variable_p (t))
9786 t = tsubst (t, args, complain, in_decl);
9787 mark_used (t);
9788 return t;
9790 case BASELINK:
9791 return tsubst_baselink (t, current_class_type, args, complain, in_decl);
9793 case TEMPLATE_DECL:
9794 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9795 return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
9796 args, complain, in_decl);
9797 else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
9798 return tsubst (t, args, complain, in_decl);
9799 else if (DECL_CLASS_SCOPE_P (t)
9800 && uses_template_parms (DECL_CONTEXT (t)))
9802 /* Template template argument like the following example need
9803 special treatment:
9805 template <template <class> class TT> struct C {};
9806 template <class T> struct D {
9807 template <class U> struct E {};
9808 C<E> c; // #1
9810 D<int> d; // #2
9812 We are processing the template argument `E' in #1 for
9813 the template instantiation #2. Originally, `E' is a
9814 TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT. Now we
9815 have to substitute this with one having context `D<int>'. */
9817 tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
9818 return lookup_field (context, DECL_NAME(t), 0, false);
9820 else
9821 /* Ordinary template template argument. */
9822 return t;
9824 case CAST_EXPR:
9825 case REINTERPRET_CAST_EXPR:
9826 case CONST_CAST_EXPR:
9827 case STATIC_CAST_EXPR:
9828 case DYNAMIC_CAST_EXPR:
9829 case NOP_EXPR:
9830 return build1
9831 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9832 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9834 case SIZEOF_EXPR:
9835 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
9837 /* We only want to compute the number of arguments. */
9838 tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
9839 complain, in_decl);
9840 if (expanded == error_mark_node)
9841 return error_mark_node;
9842 return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
9844 /* Fall through */
9846 case INDIRECT_REF:
9847 case NEGATE_EXPR:
9848 case TRUTH_NOT_EXPR:
9849 case BIT_NOT_EXPR:
9850 case ADDR_EXPR:
9851 case UNARY_PLUS_EXPR: /* Unary + */
9852 case ALIGNOF_EXPR:
9853 case ARROW_EXPR:
9854 case THROW_EXPR:
9855 case TYPEID_EXPR:
9856 case REALPART_EXPR:
9857 case IMAGPART_EXPR:
9858 return build1
9859 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9860 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9862 case COMPONENT_REF:
9864 tree object;
9865 tree name;
9867 object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
9868 name = TREE_OPERAND (t, 1);
9869 if (TREE_CODE (name) == BIT_NOT_EXPR)
9871 name = tsubst_copy (TREE_OPERAND (name, 0), args,
9872 complain, in_decl);
9873 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9875 else if (TREE_CODE (name) == SCOPE_REF
9876 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
9878 tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
9879 complain, in_decl);
9880 name = TREE_OPERAND (name, 1);
9881 name = tsubst_copy (TREE_OPERAND (name, 0), args,
9882 complain, in_decl);
9883 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9884 name = build_qualified_name (/*type=*/NULL_TREE,
9885 base, name,
9886 /*template_p=*/false);
9888 else if (TREE_CODE (name) == BASELINK)
9889 name = tsubst_baselink (name,
9890 non_reference (TREE_TYPE (object)),
9891 args, complain,
9892 in_decl);
9893 else
9894 name = tsubst_copy (name, args, complain, in_decl);
9895 return build_nt (COMPONENT_REF, object, name, NULL_TREE);
9898 case PLUS_EXPR:
9899 case MINUS_EXPR:
9900 case MULT_EXPR:
9901 case TRUNC_DIV_EXPR:
9902 case CEIL_DIV_EXPR:
9903 case FLOOR_DIV_EXPR:
9904 case ROUND_DIV_EXPR:
9905 case EXACT_DIV_EXPR:
9906 case BIT_AND_EXPR:
9907 case BIT_IOR_EXPR:
9908 case BIT_XOR_EXPR:
9909 case TRUNC_MOD_EXPR:
9910 case FLOOR_MOD_EXPR:
9911 case TRUTH_ANDIF_EXPR:
9912 case TRUTH_ORIF_EXPR:
9913 case TRUTH_AND_EXPR:
9914 case TRUTH_OR_EXPR:
9915 case RSHIFT_EXPR:
9916 case LSHIFT_EXPR:
9917 case RROTATE_EXPR:
9918 case LROTATE_EXPR:
9919 case EQ_EXPR:
9920 case NE_EXPR:
9921 case MAX_EXPR:
9922 case MIN_EXPR:
9923 case LE_EXPR:
9924 case GE_EXPR:
9925 case LT_EXPR:
9926 case GT_EXPR:
9927 case COMPOUND_EXPR:
9928 case DOTSTAR_EXPR:
9929 case MEMBER_REF:
9930 case PREDECREMENT_EXPR:
9931 case PREINCREMENT_EXPR:
9932 case POSTDECREMENT_EXPR:
9933 case POSTINCREMENT_EXPR:
9934 return build_nt
9935 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9936 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
9938 case SCOPE_REF:
9939 return build_qualified_name (/*type=*/NULL_TREE,
9940 tsubst_copy (TREE_OPERAND (t, 0),
9941 args, complain, in_decl),
9942 tsubst_copy (TREE_OPERAND (t, 1),
9943 args, complain, in_decl),
9944 QUALIFIED_NAME_IS_TEMPLATE (t));
9946 case ARRAY_REF:
9947 return build_nt
9948 (ARRAY_REF,
9949 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9950 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9951 NULL_TREE, NULL_TREE);
9953 case CALL_EXPR:
9955 int n = VL_EXP_OPERAND_LENGTH (t);
9956 tree result = build_vl_exp (CALL_EXPR, n);
9957 int i;
9958 for (i = 0; i < n; i++)
9959 TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
9960 complain, in_decl);
9961 return result;
9964 case COND_EXPR:
9965 case MODOP_EXPR:
9966 case PSEUDO_DTOR_EXPR:
9968 r = build_nt
9969 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9970 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9971 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
9972 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
9973 return r;
9976 case NEW_EXPR:
9978 r = build_nt
9979 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9980 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9981 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
9982 NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
9983 return r;
9986 case DELETE_EXPR:
9988 r = build_nt
9989 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9990 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
9991 DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
9992 DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
9993 return r;
9996 case TEMPLATE_ID_EXPR:
9998 /* Substituted template arguments */
9999 tree fn = TREE_OPERAND (t, 0);
10000 tree targs = TREE_OPERAND (t, 1);
10002 fn = tsubst_copy (fn, args, complain, in_decl);
10003 if (targs)
10004 targs = tsubst_template_args (targs, args, complain, in_decl);
10006 return lookup_template_function (fn, targs);
10009 case TREE_LIST:
10011 tree purpose, value, chain;
10013 if (t == void_list_node)
10014 return t;
10016 purpose = TREE_PURPOSE (t);
10017 if (purpose)
10018 purpose = tsubst_copy (purpose, args, complain, in_decl);
10019 value = TREE_VALUE (t);
10020 if (value)
10021 value = tsubst_copy (value, args, complain, in_decl);
10022 chain = TREE_CHAIN (t);
10023 if (chain && chain != void_type_node)
10024 chain = tsubst_copy (chain, args, complain, in_decl);
10025 if (purpose == TREE_PURPOSE (t)
10026 && value == TREE_VALUE (t)
10027 && chain == TREE_CHAIN (t))
10028 return t;
10029 return tree_cons (purpose, value, chain);
10032 case RECORD_TYPE:
10033 case UNION_TYPE:
10034 case ENUMERAL_TYPE:
10035 case INTEGER_TYPE:
10036 case TEMPLATE_TYPE_PARM:
10037 case TEMPLATE_TEMPLATE_PARM:
10038 case BOUND_TEMPLATE_TEMPLATE_PARM:
10039 case TEMPLATE_PARM_INDEX:
10040 case POINTER_TYPE:
10041 case REFERENCE_TYPE:
10042 case OFFSET_TYPE:
10043 case FUNCTION_TYPE:
10044 case METHOD_TYPE:
10045 case ARRAY_TYPE:
10046 case TYPENAME_TYPE:
10047 case UNBOUND_CLASS_TEMPLATE:
10048 case TYPEOF_TYPE:
10049 case DECLTYPE_TYPE:
10050 case TYPE_DECL:
10051 return tsubst (t, args, complain, in_decl);
10053 case IDENTIFIER_NODE:
10054 if (IDENTIFIER_TYPENAME_P (t))
10056 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10057 return mangle_conv_op_name_for_type (new_type);
10059 else
10060 return t;
10062 case CONSTRUCTOR:
10063 /* This is handled by tsubst_copy_and_build. */
10064 gcc_unreachable ();
10066 case VA_ARG_EXPR:
10067 return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
10068 in_decl),
10069 tsubst (TREE_TYPE (t), args, complain, in_decl));
10071 case CLEANUP_POINT_EXPR:
10072 /* We shouldn't have built any of these during initial template
10073 generation. Instead, they should be built during instantiation
10074 in response to the saved STMT_IS_FULL_EXPR_P setting. */
10075 gcc_unreachable ();
10077 case OFFSET_REF:
10078 mark_used (TREE_OPERAND (t, 1));
10079 return t;
10081 case EXPR_PACK_EXPANSION:
10082 error ("invalid use of pack expansion expression");
10083 return error_mark_node;
10085 case NONTYPE_ARGUMENT_PACK:
10086 error ("use %<...%> to expand argument pack");
10087 return error_mark_node;
10089 default:
10090 return t;
10094 /* Like tsubst_copy, but specifically for OpenMP clauses. */
10096 static tree
10097 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
10098 tree in_decl)
10100 tree new_clauses = NULL, nc, oc;
10102 for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
10104 nc = copy_node (oc);
10105 OMP_CLAUSE_CHAIN (nc) = new_clauses;
10106 new_clauses = nc;
10108 switch (OMP_CLAUSE_CODE (nc))
10110 case OMP_CLAUSE_PRIVATE:
10111 case OMP_CLAUSE_SHARED:
10112 case OMP_CLAUSE_FIRSTPRIVATE:
10113 case OMP_CLAUSE_LASTPRIVATE:
10114 case OMP_CLAUSE_REDUCTION:
10115 case OMP_CLAUSE_COPYIN:
10116 case OMP_CLAUSE_COPYPRIVATE:
10117 case OMP_CLAUSE_IF:
10118 case OMP_CLAUSE_NUM_THREADS:
10119 case OMP_CLAUSE_SCHEDULE:
10120 OMP_CLAUSE_OPERAND (nc, 0)
10121 = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
10122 in_decl, /*integral_constant_expression_p=*/false);
10123 break;
10124 case OMP_CLAUSE_NOWAIT:
10125 case OMP_CLAUSE_ORDERED:
10126 case OMP_CLAUSE_DEFAULT:
10127 break;
10128 default:
10129 gcc_unreachable ();
10133 return finish_omp_clauses (nreverse (new_clauses));
10136 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes. */
10138 static tree
10139 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
10140 tree in_decl)
10142 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
10144 tree purpose, value, chain;
10146 if (t == NULL)
10147 return t;
10149 if (TREE_CODE (t) != TREE_LIST)
10150 return tsubst_copy_and_build (t, args, complain, in_decl,
10151 /*function_p=*/false,
10152 /*integral_constant_expression_p=*/false);
10154 if (t == void_list_node)
10155 return t;
10157 purpose = TREE_PURPOSE (t);
10158 if (purpose)
10159 purpose = RECUR (purpose);
10160 value = TREE_VALUE (t);
10161 if (value)
10162 value = RECUR (value);
10163 chain = TREE_CHAIN (t);
10164 if (chain && chain != void_type_node)
10165 chain = RECUR (chain);
10166 return tree_cons (purpose, value, chain);
10167 #undef RECUR
10170 /* Like tsubst_copy for expressions, etc. but also does semantic
10171 processing. */
10173 static tree
10174 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
10175 bool integral_constant_expression_p)
10177 #define RECUR(NODE) \
10178 tsubst_expr ((NODE), args, complain, in_decl, \
10179 integral_constant_expression_p)
10181 tree stmt, tmp;
10183 if (t == NULL_TREE || t == error_mark_node)
10184 return t;
10186 if (EXPR_HAS_LOCATION (t))
10187 input_location = EXPR_LOCATION (t);
10188 if (STATEMENT_CODE_P (TREE_CODE (t)))
10189 current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
10191 switch (TREE_CODE (t))
10193 case STATEMENT_LIST:
10195 tree_stmt_iterator i;
10196 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
10197 RECUR (tsi_stmt (i));
10198 break;
10201 case CTOR_INITIALIZER:
10202 finish_mem_initializers (tsubst_initializer_list
10203 (TREE_OPERAND (t, 0), args));
10204 break;
10206 case RETURN_EXPR:
10207 finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
10208 break;
10210 case EXPR_STMT:
10211 tmp = RECUR (EXPR_STMT_EXPR (t));
10212 if (EXPR_STMT_STMT_EXPR_RESULT (t))
10213 finish_stmt_expr_expr (tmp, cur_stmt_expr);
10214 else
10215 finish_expr_stmt (tmp);
10216 break;
10218 case USING_STMT:
10219 do_using_directive (RECUR (USING_STMT_NAMESPACE (t)));
10220 break;
10222 case DECL_EXPR:
10224 tree decl;
10225 tree init;
10227 decl = DECL_EXPR_DECL (t);
10228 if (TREE_CODE (decl) == LABEL_DECL)
10229 finish_label_decl (DECL_NAME (decl));
10230 else if (TREE_CODE (decl) == USING_DECL)
10232 tree scope = USING_DECL_SCOPE (decl);
10233 tree name = DECL_NAME (decl);
10234 tree decl;
10236 scope = RECUR (scope);
10237 decl = lookup_qualified_name (scope, name,
10238 /*is_type_p=*/false,
10239 /*complain=*/false);
10240 if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
10241 qualified_name_lookup_error (scope, name, decl);
10242 else
10243 do_local_using_decl (decl, scope, name);
10245 else
10247 init = DECL_INITIAL (decl);
10248 decl = tsubst (decl, args, complain, in_decl);
10249 if (decl != error_mark_node)
10251 /* By marking the declaration as instantiated, we avoid
10252 trying to instantiate it. Since instantiate_decl can't
10253 handle local variables, and since we've already done
10254 all that needs to be done, that's the right thing to
10255 do. */
10256 if (TREE_CODE (decl) == VAR_DECL)
10257 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10258 if (TREE_CODE (decl) == VAR_DECL
10259 && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
10260 /* Anonymous aggregates are a special case. */
10261 finish_anon_union (decl);
10262 else
10264 maybe_push_decl (decl);
10265 if (TREE_CODE (decl) == VAR_DECL
10266 && DECL_PRETTY_FUNCTION_P (decl))
10268 /* For __PRETTY_FUNCTION__ we have to adjust the
10269 initializer. */
10270 const char *const name
10271 = cxx_printable_name (current_function_decl, 2);
10272 init = cp_fname_init (name, &TREE_TYPE (decl));
10274 else
10276 tree t = RECUR (init);
10278 if (init && !t)
10279 /* If we had an initializer but it
10280 instantiated to nothing,
10281 value-initialize the object. This will
10282 only occur when the initializer was a
10283 pack expansion where the parameter packs
10284 used in that expansion were of length
10285 zero. */
10286 init = build_default_init (TREE_TYPE (decl),
10287 NULL_TREE);
10288 else
10289 init = t;
10292 finish_decl (decl, init, NULL_TREE);
10297 /* A DECL_EXPR can also be used as an expression, in the condition
10298 clause of an if/for/while construct. */
10299 return decl;
10302 case FOR_STMT:
10303 stmt = begin_for_stmt ();
10304 RECUR (FOR_INIT_STMT (t));
10305 finish_for_init_stmt (stmt);
10306 tmp = RECUR (FOR_COND (t));
10307 finish_for_cond (tmp, stmt);
10308 tmp = RECUR (FOR_EXPR (t));
10309 finish_for_expr (tmp, stmt);
10310 RECUR (FOR_BODY (t));
10311 finish_for_stmt (stmt);
10312 break;
10314 case WHILE_STMT:
10315 stmt = begin_while_stmt ();
10316 tmp = RECUR (WHILE_COND (t));
10317 finish_while_stmt_cond (tmp, stmt);
10318 RECUR (WHILE_BODY (t));
10319 finish_while_stmt (stmt);
10320 break;
10322 case DO_STMT:
10323 stmt = begin_do_stmt ();
10324 RECUR (DO_BODY (t));
10325 finish_do_body (stmt);
10326 tmp = RECUR (DO_COND (t));
10327 finish_do_stmt (tmp, stmt);
10328 break;
10330 case IF_STMT:
10331 stmt = begin_if_stmt ();
10332 tmp = RECUR (IF_COND (t));
10333 finish_if_stmt_cond (tmp, stmt);
10334 RECUR (THEN_CLAUSE (t));
10335 finish_then_clause (stmt);
10337 if (ELSE_CLAUSE (t))
10339 begin_else_clause (stmt);
10340 RECUR (ELSE_CLAUSE (t));
10341 finish_else_clause (stmt);
10344 finish_if_stmt (stmt);
10345 break;
10347 case BIND_EXPR:
10348 if (BIND_EXPR_BODY_BLOCK (t))
10349 stmt = begin_function_body ();
10350 else
10351 stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
10352 ? BCS_TRY_BLOCK : 0);
10354 RECUR (BIND_EXPR_BODY (t));
10356 if (BIND_EXPR_BODY_BLOCK (t))
10357 finish_function_body (stmt);
10358 else
10359 finish_compound_stmt (stmt);
10360 break;
10362 case BREAK_STMT:
10363 finish_break_stmt ();
10364 break;
10366 case CONTINUE_STMT:
10367 finish_continue_stmt ();
10368 break;
10370 case SWITCH_STMT:
10371 stmt = begin_switch_stmt ();
10372 tmp = RECUR (SWITCH_STMT_COND (t));
10373 finish_switch_cond (tmp, stmt);
10374 RECUR (SWITCH_STMT_BODY (t));
10375 finish_switch_stmt (stmt);
10376 break;
10378 case CASE_LABEL_EXPR:
10379 finish_case_label (RECUR (CASE_LOW (t)),
10380 RECUR (CASE_HIGH (t)));
10381 break;
10383 case LABEL_EXPR:
10384 finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
10385 break;
10387 case GOTO_EXPR:
10388 tmp = GOTO_DESTINATION (t);
10389 if (TREE_CODE (tmp) != LABEL_DECL)
10390 /* Computed goto's must be tsubst'd into. On the other hand,
10391 non-computed gotos must not be; the identifier in question
10392 will have no binding. */
10393 tmp = RECUR (tmp);
10394 else
10395 tmp = DECL_NAME (tmp);
10396 finish_goto_stmt (tmp);
10397 break;
10399 case ASM_EXPR:
10400 tmp = finish_asm_stmt
10401 (ASM_VOLATILE_P (t),
10402 RECUR (ASM_STRING (t)),
10403 tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
10404 tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
10405 tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl));
10407 tree asm_expr = tmp;
10408 if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
10409 asm_expr = TREE_OPERAND (asm_expr, 0);
10410 ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
10412 break;
10414 case TRY_BLOCK:
10415 if (CLEANUP_P (t))
10417 stmt = begin_try_block ();
10418 RECUR (TRY_STMTS (t));
10419 finish_cleanup_try_block (stmt);
10420 finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
10422 else
10424 tree compound_stmt = NULL_TREE;
10426 if (FN_TRY_BLOCK_P (t))
10427 stmt = begin_function_try_block (&compound_stmt);
10428 else
10429 stmt = begin_try_block ();
10431 RECUR (TRY_STMTS (t));
10433 if (FN_TRY_BLOCK_P (t))
10434 finish_function_try_block (stmt);
10435 else
10436 finish_try_block (stmt);
10438 RECUR (TRY_HANDLERS (t));
10439 if (FN_TRY_BLOCK_P (t))
10440 finish_function_handler_sequence (stmt, compound_stmt);
10441 else
10442 finish_handler_sequence (stmt);
10444 break;
10446 case HANDLER:
10448 tree decl = HANDLER_PARMS (t);
10450 if (decl)
10452 decl = tsubst (decl, args, complain, in_decl);
10453 /* Prevent instantiate_decl from trying to instantiate
10454 this variable. We've already done all that needs to be
10455 done. */
10456 if (decl != error_mark_node)
10457 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10459 stmt = begin_handler ();
10460 finish_handler_parms (decl, stmt);
10461 RECUR (HANDLER_BODY (t));
10462 finish_handler (stmt);
10464 break;
10466 case TAG_DEFN:
10467 tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
10468 break;
10470 case STATIC_ASSERT:
10472 tree condition =
10473 tsubst_expr (STATIC_ASSERT_CONDITION (t),
10474 args,
10475 complain, in_decl,
10476 /*integral_constant_expression_p=*/true);
10477 finish_static_assert (condition,
10478 STATIC_ASSERT_MESSAGE (t),
10479 STATIC_ASSERT_SOURCE_LOCATION (t),
10480 /*member_p=*/false);
10482 break;
10484 case OMP_PARALLEL:
10485 tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
10486 args, complain, in_decl);
10487 stmt = begin_omp_parallel ();
10488 RECUR (OMP_PARALLEL_BODY (t));
10489 OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
10490 = OMP_PARALLEL_COMBINED (t);
10491 break;
10493 case OMP_FOR:
10495 tree clauses, decl, init, cond, incr, body, pre_body;
10497 clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
10498 args, complain, in_decl);
10499 init = OMP_FOR_INIT (t);
10500 gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
10501 decl = RECUR (TREE_OPERAND (init, 0));
10502 init = RECUR (TREE_OPERAND (init, 1));
10503 cond = RECUR (OMP_FOR_COND (t));
10504 incr = RECUR (OMP_FOR_INCR (t));
10506 stmt = begin_omp_structured_block ();
10508 pre_body = push_stmt_list ();
10509 RECUR (OMP_FOR_PRE_BODY (t));
10510 pre_body = pop_stmt_list (pre_body);
10512 body = push_stmt_list ();
10513 RECUR (OMP_FOR_BODY (t));
10514 body = pop_stmt_list (body);
10516 t = finish_omp_for (EXPR_LOCATION (t), decl, init, cond, incr, body,
10517 pre_body);
10518 if (t)
10519 OMP_FOR_CLAUSES (t) = clauses;
10521 add_stmt (finish_omp_structured_block (stmt));
10523 break;
10525 case OMP_SECTIONS:
10526 case OMP_SINGLE:
10527 tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
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 OMP_CLAUSES (t) = tmp;
10535 add_stmt (t);
10536 break;
10538 case OMP_SECTION:
10539 case OMP_CRITICAL:
10540 case OMP_MASTER:
10541 case OMP_ORDERED:
10542 stmt = push_stmt_list ();
10543 RECUR (OMP_BODY (t));
10544 stmt = pop_stmt_list (stmt);
10546 t = copy_node (t);
10547 OMP_BODY (t) = stmt;
10548 add_stmt (t);
10549 break;
10551 case OMP_ATOMIC:
10552 gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
10554 tree op1 = TREE_OPERAND (t, 1);
10555 tree lhs = RECUR (TREE_OPERAND (op1, 0));
10556 tree rhs = RECUR (TREE_OPERAND (op1, 1));
10557 finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
10559 break;
10561 case EXPR_PACK_EXPANSION:
10562 error ("invalid use of pack expansion expression");
10563 return error_mark_node;
10565 case NONTYPE_ARGUMENT_PACK:
10566 error ("use %<...%> to expand argument pack");
10567 return error_mark_node;
10569 default:
10570 gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
10572 return tsubst_copy_and_build (t, args, complain, in_decl,
10573 /*function_p=*/false,
10574 integral_constant_expression_p);
10577 return NULL_TREE;
10578 #undef RECUR
10581 /* T is a postfix-expression that is not being used in a function
10582 call. Return the substituted version of T. */
10584 static tree
10585 tsubst_non_call_postfix_expression (tree t, tree args,
10586 tsubst_flags_t complain,
10587 tree in_decl)
10589 if (TREE_CODE (t) == SCOPE_REF)
10590 t = tsubst_qualified_id (t, args, complain, in_decl,
10591 /*done=*/false, /*address_p=*/false);
10592 else
10593 t = tsubst_copy_and_build (t, args, complain, in_decl,
10594 /*function_p=*/false,
10595 /*integral_constant_expression_p=*/false);
10597 return t;
10600 /* Like tsubst but deals with expressions and performs semantic
10601 analysis. FUNCTION_P is true if T is the "F" in "F (ARGS)". */
10603 tree
10604 tsubst_copy_and_build (tree t,
10605 tree args,
10606 tsubst_flags_t complain,
10607 tree in_decl,
10608 bool function_p,
10609 bool integral_constant_expression_p)
10611 #define RECUR(NODE) \
10612 tsubst_copy_and_build (NODE, args, complain, in_decl, \
10613 /*function_p=*/false, \
10614 integral_constant_expression_p)
10616 tree op1;
10618 if (t == NULL_TREE || t == error_mark_node)
10619 return t;
10621 switch (TREE_CODE (t))
10623 case USING_DECL:
10624 t = DECL_NAME (t);
10625 /* Fall through. */
10626 case IDENTIFIER_NODE:
10628 tree decl;
10629 cp_id_kind idk;
10630 bool non_integral_constant_expression_p;
10631 const char *error_msg;
10633 if (IDENTIFIER_TYPENAME_P (t))
10635 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10636 t = mangle_conv_op_name_for_type (new_type);
10639 /* Look up the name. */
10640 decl = lookup_name (t);
10642 /* By convention, expressions use ERROR_MARK_NODE to indicate
10643 failure, not NULL_TREE. */
10644 if (decl == NULL_TREE)
10645 decl = error_mark_node;
10647 decl = finish_id_expression (t, decl, NULL_TREE,
10648 &idk,
10649 integral_constant_expression_p,
10650 /*allow_non_integral_constant_expression_p=*/false,
10651 &non_integral_constant_expression_p,
10652 /*template_p=*/false,
10653 /*done=*/true,
10654 /*address_p=*/false,
10655 /*template_arg_p=*/false,
10656 &error_msg);
10657 if (error_msg)
10658 error (error_msg);
10659 if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
10660 decl = unqualified_name_lookup_error (decl);
10661 return decl;
10664 case TEMPLATE_ID_EXPR:
10666 tree object;
10667 tree template = RECUR (TREE_OPERAND (t, 0));
10668 tree targs = TREE_OPERAND (t, 1);
10670 if (targs)
10671 targs = tsubst_template_args (targs, args, complain, in_decl);
10673 if (TREE_CODE (template) == COMPONENT_REF)
10675 object = TREE_OPERAND (template, 0);
10676 template = TREE_OPERAND (template, 1);
10678 else
10679 object = NULL_TREE;
10680 template = lookup_template_function (template, targs);
10682 if (object)
10683 return build3 (COMPONENT_REF, TREE_TYPE (template),
10684 object, template, NULL_TREE);
10685 else
10686 return baselink_for_fns (template);
10689 case INDIRECT_REF:
10691 tree r = RECUR (TREE_OPERAND (t, 0));
10693 if (REFERENCE_REF_P (t))
10695 /* A type conversion to reference type will be enclosed in
10696 such an indirect ref, but the substitution of the cast
10697 will have also added such an indirect ref. */
10698 if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
10699 r = convert_from_reference (r);
10701 else
10702 r = build_x_indirect_ref (r, "unary *");
10703 return r;
10706 case NOP_EXPR:
10707 return build_nop
10708 (tsubst (TREE_TYPE (t), args, complain, in_decl),
10709 RECUR (TREE_OPERAND (t, 0)));
10711 case CAST_EXPR:
10712 case REINTERPRET_CAST_EXPR:
10713 case CONST_CAST_EXPR:
10714 case DYNAMIC_CAST_EXPR:
10715 case STATIC_CAST_EXPR:
10717 tree type;
10718 tree op;
10720 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10721 if (integral_constant_expression_p
10722 && !cast_valid_in_integral_constant_expression_p (type))
10724 error ("a cast to a type other than an integral or "
10725 "enumeration type cannot appear in a constant-expression");
10726 return error_mark_node;
10729 op = RECUR (TREE_OPERAND (t, 0));
10731 switch (TREE_CODE (t))
10733 case CAST_EXPR:
10734 return build_functional_cast (type, op);
10735 case REINTERPRET_CAST_EXPR:
10736 return build_reinterpret_cast (type, op);
10737 case CONST_CAST_EXPR:
10738 return build_const_cast (type, op);
10739 case DYNAMIC_CAST_EXPR:
10740 return build_dynamic_cast (type, op);
10741 case STATIC_CAST_EXPR:
10742 return build_static_cast (type, op);
10743 default:
10744 gcc_unreachable ();
10748 case POSTDECREMENT_EXPR:
10749 case POSTINCREMENT_EXPR:
10750 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10751 args, complain, in_decl);
10752 return build_x_unary_op (TREE_CODE (t), op1);
10754 case PREDECREMENT_EXPR:
10755 case PREINCREMENT_EXPR:
10756 case NEGATE_EXPR:
10757 case BIT_NOT_EXPR:
10758 case ABS_EXPR:
10759 case TRUTH_NOT_EXPR:
10760 case UNARY_PLUS_EXPR: /* Unary + */
10761 case REALPART_EXPR:
10762 case IMAGPART_EXPR:
10763 return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
10765 case ADDR_EXPR:
10766 op1 = TREE_OPERAND (t, 0);
10767 if (TREE_CODE (op1) == SCOPE_REF)
10768 op1 = tsubst_qualified_id (op1, args, complain, in_decl,
10769 /*done=*/true, /*address_p=*/true);
10770 else
10771 op1 = tsubst_non_call_postfix_expression (op1, args, complain,
10772 in_decl);
10773 if (TREE_CODE (op1) == LABEL_DECL)
10774 return finish_label_address_expr (DECL_NAME (op1));
10775 return build_x_unary_op (ADDR_EXPR, op1);
10777 case PLUS_EXPR:
10778 case MINUS_EXPR:
10779 case MULT_EXPR:
10780 case TRUNC_DIV_EXPR:
10781 case CEIL_DIV_EXPR:
10782 case FLOOR_DIV_EXPR:
10783 case ROUND_DIV_EXPR:
10784 case EXACT_DIV_EXPR:
10785 case BIT_AND_EXPR:
10786 case BIT_IOR_EXPR:
10787 case BIT_XOR_EXPR:
10788 case TRUNC_MOD_EXPR:
10789 case FLOOR_MOD_EXPR:
10790 case TRUTH_ANDIF_EXPR:
10791 case TRUTH_ORIF_EXPR:
10792 case TRUTH_AND_EXPR:
10793 case TRUTH_OR_EXPR:
10794 case RSHIFT_EXPR:
10795 case LSHIFT_EXPR:
10796 case RROTATE_EXPR:
10797 case LROTATE_EXPR:
10798 case EQ_EXPR:
10799 case NE_EXPR:
10800 case MAX_EXPR:
10801 case MIN_EXPR:
10802 case LE_EXPR:
10803 case GE_EXPR:
10804 case LT_EXPR:
10805 case GT_EXPR:
10806 case MEMBER_REF:
10807 case DOTSTAR_EXPR:
10808 return build_x_binary_op
10809 (TREE_CODE (t),
10810 RECUR (TREE_OPERAND (t, 0)),
10811 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
10812 ? ERROR_MARK
10813 : TREE_CODE (TREE_OPERAND (t, 0))),
10814 RECUR (TREE_OPERAND (t, 1)),
10815 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
10816 ? ERROR_MARK
10817 : TREE_CODE (TREE_OPERAND (t, 1))),
10818 /*overloaded_p=*/NULL);
10820 case SCOPE_REF:
10821 return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
10822 /*address_p=*/false);
10823 case ARRAY_REF:
10824 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10825 args, complain, in_decl);
10826 return build_x_binary_op (ARRAY_REF, op1,
10827 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
10828 ? ERROR_MARK
10829 : TREE_CODE (TREE_OPERAND (t, 0))),
10830 RECUR (TREE_OPERAND (t, 1)),
10831 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
10832 ? ERROR_MARK
10833 : TREE_CODE (TREE_OPERAND (t, 1))),
10834 /*overloaded_p=*/NULL);
10836 case SIZEOF_EXPR:
10837 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
10839 /* We only want to compute the number of arguments. */
10840 tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
10841 complain, in_decl);
10842 if (expanded == error_mark_node)
10843 return error_mark_node;
10844 return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
10846 /* Fall through */
10848 case ALIGNOF_EXPR:
10849 op1 = TREE_OPERAND (t, 0);
10850 if (!args)
10852 /* When there are no ARGS, we are trying to evaluate a
10853 non-dependent expression from the parser. Trying to do
10854 the substitutions may not work. */
10855 if (!TYPE_P (op1))
10856 op1 = TREE_TYPE (op1);
10858 else
10860 ++skip_evaluation;
10861 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
10862 /*function_p=*/false,
10863 /*integral_constant_expression_p=*/false);
10864 --skip_evaluation;
10866 if (TYPE_P (op1))
10867 return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), true);
10868 else
10869 return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t));
10871 case MODOP_EXPR:
10873 tree r = build_x_modify_expr
10874 (RECUR (TREE_OPERAND (t, 0)),
10875 TREE_CODE (TREE_OPERAND (t, 1)),
10876 RECUR (TREE_OPERAND (t, 2)));
10877 /* TREE_NO_WARNING must be set if either the expression was
10878 parenthesized or it uses an operator such as >>= rather
10879 than plain assignment. In the former case, it was already
10880 set and must be copied. In the latter case,
10881 build_x_modify_expr sets it and it must not be reset
10882 here. */
10883 if (TREE_NO_WARNING (t))
10884 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
10885 return r;
10888 case ARROW_EXPR:
10889 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10890 args, complain, in_decl);
10891 /* Remember that there was a reference to this entity. */
10892 if (DECL_P (op1))
10893 mark_used (op1);
10894 return build_x_arrow (op1);
10896 case NEW_EXPR:
10898 tree init = RECUR (TREE_OPERAND (t, 3));
10900 if (TREE_OPERAND (t, 3) && !init)
10901 /* If there was an initializer in the the original tree, but
10902 it instantiated to an empty list, then we should pass on
10903 VOID_ZERO_NODE to tell build_new that it was an empty
10904 initializer () rather than no initializer. This can only
10905 happen when the initializer is a pack expansion whose
10906 parameter packs are of length zero. */
10907 init = void_zero_node;
10909 return build_new
10910 (RECUR (TREE_OPERAND (t, 0)),
10911 RECUR (TREE_OPERAND (t, 1)),
10912 RECUR (TREE_OPERAND (t, 2)),
10913 init,
10914 NEW_EXPR_USE_GLOBAL (t));
10917 case DELETE_EXPR:
10918 return delete_sanity
10919 (RECUR (TREE_OPERAND (t, 0)),
10920 RECUR (TREE_OPERAND (t, 1)),
10921 DELETE_EXPR_USE_VEC (t),
10922 DELETE_EXPR_USE_GLOBAL (t));
10924 case COMPOUND_EXPR:
10925 return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
10926 RECUR (TREE_OPERAND (t, 1)));
10928 case CALL_EXPR:
10930 tree function;
10931 tree call_args;
10932 bool qualified_p;
10933 bool koenig_p;
10935 function = CALL_EXPR_FN (t);
10936 /* When we parsed the expression, we determined whether or
10937 not Koenig lookup should be performed. */
10938 koenig_p = KOENIG_LOOKUP_P (t);
10939 if (TREE_CODE (function) == SCOPE_REF)
10941 qualified_p = true;
10942 function = tsubst_qualified_id (function, args, complain, in_decl,
10943 /*done=*/false,
10944 /*address_p=*/false);
10946 else
10948 if (TREE_CODE (function) == COMPONENT_REF)
10950 tree op = TREE_OPERAND (function, 1);
10952 qualified_p = (TREE_CODE (op) == SCOPE_REF
10953 || (BASELINK_P (op)
10954 && BASELINK_QUALIFIED_P (op)));
10956 else
10957 qualified_p = false;
10959 function = tsubst_copy_and_build (function, args, complain,
10960 in_decl,
10961 !qualified_p,
10962 integral_constant_expression_p);
10964 if (BASELINK_P (function))
10965 qualified_p = true;
10968 /* FIXME: Rewrite this so as not to construct an arglist. */
10969 call_args = RECUR (CALL_EXPR_ARGS (t));
10971 /* We do not perform argument-dependent lookup if normal
10972 lookup finds a non-function, in accordance with the
10973 expected resolution of DR 218. */
10974 if (koenig_p
10975 && ((is_overloaded_fn (function)
10976 /* If lookup found a member function, the Koenig lookup is
10977 not appropriate, even if an unqualified-name was used
10978 to denote the function. */
10979 && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
10980 || TREE_CODE (function) == IDENTIFIER_NODE))
10981 function = perform_koenig_lookup (function, call_args);
10983 if (TREE_CODE (function) == IDENTIFIER_NODE)
10985 unqualified_name_lookup_error (function);
10986 return error_mark_node;
10989 /* Remember that there was a reference to this entity. */
10990 if (DECL_P (function))
10991 mark_used (function);
10993 if (TREE_CODE (function) == OFFSET_REF)
10994 return build_offset_ref_call_from_tree (function, call_args);
10995 if (TREE_CODE (function) == COMPONENT_REF)
10997 if (!BASELINK_P (TREE_OPERAND (function, 1)))
10998 return finish_call_expr (function, call_args,
10999 /*disallow_virtual=*/false,
11000 /*koenig_p=*/false);
11001 else
11002 return (build_new_method_call
11003 (TREE_OPERAND (function, 0),
11004 TREE_OPERAND (function, 1),
11005 call_args, NULL_TREE,
11006 qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
11007 /*fn_p=*/NULL));
11009 return finish_call_expr (function, call_args,
11010 /*disallow_virtual=*/qualified_p,
11011 koenig_p);
11014 case COND_EXPR:
11015 return build_x_conditional_expr
11016 (RECUR (TREE_OPERAND (t, 0)),
11017 RECUR (TREE_OPERAND (t, 1)),
11018 RECUR (TREE_OPERAND (t, 2)));
11020 case PSEUDO_DTOR_EXPR:
11021 return finish_pseudo_destructor_expr
11022 (RECUR (TREE_OPERAND (t, 0)),
11023 RECUR (TREE_OPERAND (t, 1)),
11024 RECUR (TREE_OPERAND (t, 2)));
11026 case TREE_LIST:
11028 tree purpose, value, chain;
11030 if (t == void_list_node)
11031 return t;
11033 if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
11034 || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
11036 /* We have pack expansions, so expand those and
11037 create a new list out of it. */
11038 tree purposevec = NULL_TREE;
11039 tree valuevec = NULL_TREE;
11040 tree chain;
11041 int i, len = -1;
11043 /* Expand the argument expressions. */
11044 if (TREE_PURPOSE (t))
11045 purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
11046 complain, in_decl);
11047 if (TREE_VALUE (t))
11048 valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
11049 complain, in_decl);
11051 /* Build the rest of the list. */
11052 chain = TREE_CHAIN (t);
11053 if (chain && chain != void_type_node)
11054 chain = RECUR (chain);
11056 /* Determine the number of arguments. */
11057 if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
11059 len = TREE_VEC_LENGTH (purposevec);
11060 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
11062 else if (TREE_CODE (valuevec) == TREE_VEC)
11063 len = TREE_VEC_LENGTH (valuevec);
11064 else
11066 /* Since we only performed a partial substitution into
11067 the argument pack, we only return a single list
11068 node. */
11069 if (purposevec == TREE_PURPOSE (t)
11070 && valuevec == TREE_VALUE (t)
11071 && chain == TREE_CHAIN (t))
11072 return t;
11074 return tree_cons (purposevec, valuevec, chain);
11077 /* Convert the argument vectors into a TREE_LIST */
11078 i = len;
11079 while (i > 0)
11081 /* Grab the Ith values. */
11082 i--;
11083 purpose = purposevec ? TREE_VEC_ELT (purposevec, i)
11084 : NULL_TREE;
11085 value
11086 = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i))
11087 : NULL_TREE;
11089 /* Build the list (backwards). */
11090 chain = tree_cons (purpose, value, chain);
11093 return chain;
11096 purpose = TREE_PURPOSE (t);
11097 if (purpose)
11098 purpose = RECUR (purpose);
11099 value = TREE_VALUE (t);
11100 if (value)
11101 value = RECUR (value);
11102 chain = TREE_CHAIN (t);
11103 if (chain && chain != void_type_node)
11104 chain = RECUR (chain);
11105 if (purpose == TREE_PURPOSE (t)
11106 && value == TREE_VALUE (t)
11107 && chain == TREE_CHAIN (t))
11108 return t;
11109 return tree_cons (purpose, value, chain);
11112 case COMPONENT_REF:
11114 tree object;
11115 tree object_type;
11116 tree member;
11118 object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11119 args, complain, in_decl);
11120 /* Remember that there was a reference to this entity. */
11121 if (DECL_P (object))
11122 mark_used (object);
11123 object_type = TREE_TYPE (object);
11125 member = TREE_OPERAND (t, 1);
11126 if (BASELINK_P (member))
11127 member = tsubst_baselink (member,
11128 non_reference (TREE_TYPE (object)),
11129 args, complain, in_decl);
11130 else
11131 member = tsubst_copy (member, args, complain, in_decl);
11132 if (member == error_mark_node)
11133 return error_mark_node;
11135 if (object_type && !CLASS_TYPE_P (object_type))
11137 if (SCALAR_TYPE_P (object_type))
11139 tree s = NULL_TREE;
11140 tree dtor = member;
11142 if (TREE_CODE (dtor) == SCOPE_REF)
11144 s = TREE_OPERAND (dtor, 0);
11145 dtor = TREE_OPERAND (dtor, 1);
11147 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
11149 dtor = TREE_OPERAND (dtor, 0);
11150 if (TYPE_P (dtor))
11151 return finish_pseudo_destructor_expr (object, s, dtor);
11155 else if (TREE_CODE (member) == SCOPE_REF
11156 && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
11158 tree tmpl;
11159 tree args;
11161 /* Lookup the template functions now that we know what the
11162 scope is. */
11163 tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
11164 args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
11165 member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
11166 /*is_type_p=*/false,
11167 /*complain=*/false);
11168 if (BASELINK_P (member))
11170 BASELINK_FUNCTIONS (member)
11171 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
11172 args);
11173 member = (adjust_result_of_qualified_name_lookup
11174 (member, BINFO_TYPE (BASELINK_BINFO (member)),
11175 object_type));
11177 else
11179 qualified_name_lookup_error (object_type, tmpl, member);
11180 return error_mark_node;
11183 else if (TREE_CODE (member) == SCOPE_REF
11184 && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
11185 && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
11187 if (complain & tf_error)
11189 if (TYPE_P (TREE_OPERAND (member, 0)))
11190 error ("%qT is not a class or namespace",
11191 TREE_OPERAND (member, 0));
11192 else
11193 error ("%qD is not a class or namespace",
11194 TREE_OPERAND (member, 0));
11196 return error_mark_node;
11198 else if (TREE_CODE (member) == FIELD_DECL)
11199 return finish_non_static_data_member (member, object, NULL_TREE);
11201 return finish_class_member_access_expr (object, member,
11202 /*template_p=*/false);
11205 case THROW_EXPR:
11206 return build_throw
11207 (RECUR (TREE_OPERAND (t, 0)));
11209 case CONSTRUCTOR:
11211 VEC(constructor_elt,gc) *n;
11212 constructor_elt *ce;
11213 unsigned HOST_WIDE_INT idx;
11214 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11215 bool process_index_p;
11216 int newlen;
11217 bool need_copy_p = false;
11219 if (type == error_mark_node)
11220 return error_mark_node;
11222 /* digest_init will do the wrong thing if we let it. */
11223 if (type && TYPE_PTRMEMFUNC_P (type))
11224 return t;
11226 /* We do not want to process the index of aggregate
11227 initializers as they are identifier nodes which will be
11228 looked up by digest_init. */
11229 process_index_p = !(type && IS_AGGR_TYPE (type));
11231 n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
11232 newlen = VEC_length (constructor_elt, n);
11233 for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
11235 if (ce->index && process_index_p)
11236 ce->index = RECUR (ce->index);
11238 if (PACK_EXPANSION_P (ce->value))
11240 /* Substitute into the pack expansion. */
11241 ce->value = tsubst_pack_expansion (ce->value, args, complain,
11242 in_decl);
11244 if (ce->value == error_mark_node)
11246 else if (TREE_VEC_LENGTH (ce->value) == 1)
11247 /* Just move the argument into place. */
11248 ce->value = TREE_VEC_ELT (ce->value, 0);
11249 else
11251 /* Update the length of the final CONSTRUCTOR
11252 arguments vector, and note that we will need to
11253 copy.*/
11254 newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
11255 need_copy_p = true;
11258 else
11259 ce->value = RECUR (ce->value);
11262 if (need_copy_p)
11264 VEC(constructor_elt,gc) *old_n = n;
11266 n = VEC_alloc (constructor_elt, gc, newlen);
11267 for (idx = 0; VEC_iterate (constructor_elt, old_n, idx, ce);
11268 idx++)
11270 if (TREE_CODE (ce->value) == TREE_VEC)
11272 int i, len = TREE_VEC_LENGTH (ce->value);
11273 for (i = 0; i < len; ++i)
11274 CONSTRUCTOR_APPEND_ELT (n, 0,
11275 TREE_VEC_ELT (ce->value, i));
11277 else
11278 CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
11282 if (TREE_HAS_CONSTRUCTOR (t))
11283 return finish_compound_literal (type, n);
11285 return build_constructor (NULL_TREE, n);
11288 case TYPEID_EXPR:
11290 tree operand_0 = RECUR (TREE_OPERAND (t, 0));
11291 if (TYPE_P (operand_0))
11292 return get_typeid (operand_0);
11293 return build_typeid (operand_0);
11296 case VAR_DECL:
11297 if (!args)
11298 return t;
11299 /* Fall through */
11301 case PARM_DECL:
11303 tree r = tsubst_copy (t, args, complain, in_decl);
11305 if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
11306 /* If the original type was a reference, we'll be wrapped in
11307 the appropriate INDIRECT_REF. */
11308 r = convert_from_reference (r);
11309 return r;
11312 case VA_ARG_EXPR:
11313 return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
11314 tsubst_copy (TREE_TYPE (t), args, complain,
11315 in_decl));
11317 case OFFSETOF_EXPR:
11318 return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
11320 case TRAIT_EXPR:
11322 tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
11323 complain, in_decl);
11325 tree type2 = TRAIT_EXPR_TYPE2 (t);
11326 if (type2)
11327 type2 = tsubst_copy (type2, args, complain, in_decl);
11329 return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
11332 case STMT_EXPR:
11334 tree old_stmt_expr = cur_stmt_expr;
11335 tree stmt_expr = begin_stmt_expr ();
11337 cur_stmt_expr = stmt_expr;
11338 tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
11339 integral_constant_expression_p);
11340 stmt_expr = finish_stmt_expr (stmt_expr, false);
11341 cur_stmt_expr = old_stmt_expr;
11343 return stmt_expr;
11346 case CONST_DECL:
11347 t = tsubst_copy (t, args, complain, in_decl);
11348 /* As in finish_id_expression, we resolve enumeration constants
11349 to their underlying values. */
11350 if (TREE_CODE (t) == CONST_DECL)
11352 used_types_insert (TREE_TYPE (t));
11353 return DECL_INITIAL (t);
11355 return t;
11357 default:
11358 /* Handle Objective-C++ constructs, if appropriate. */
11360 tree subst
11361 = objcp_tsubst_copy_and_build (t, args, complain,
11362 in_decl, /*function_p=*/false);
11363 if (subst)
11364 return subst;
11366 return tsubst_copy (t, args, complain, in_decl);
11369 #undef RECUR
11372 /* Verify that the instantiated ARGS are valid. For type arguments,
11373 make sure that the type's linkage is ok. For non-type arguments,
11374 make sure they are constants if they are integral or enumerations.
11375 Emit an error under control of COMPLAIN, and return TRUE on error. */
11377 static bool
11378 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
11380 int ix, len = DECL_NTPARMS (tmpl);
11381 bool result = false;
11383 for (ix = 0; ix != len; ix++)
11385 tree t = TREE_VEC_ELT (args, ix);
11387 if (TYPE_P (t))
11389 /* [basic.link]: A name with no linkage (notably, the name
11390 of a class or enumeration declared in a local scope)
11391 shall not be used to declare an entity with linkage.
11392 This implies that names with no linkage cannot be used as
11393 template arguments. */
11394 tree nt = no_linkage_check (t, /*relaxed_p=*/false);
11396 if (nt)
11398 /* DR 488 makes use of a type with no linkage cause
11399 type deduction to fail. */
11400 if (complain & tf_error)
11402 if (TYPE_ANONYMOUS_P (nt))
11403 error ("%qT is/uses anonymous type", t);
11404 else
11405 error ("template argument for %qD uses local type %qT",
11406 tmpl, t);
11408 result = true;
11410 /* In order to avoid all sorts of complications, we do not
11411 allow variably-modified types as template arguments. */
11412 else if (variably_modified_type_p (t, NULL_TREE))
11414 if (complain & tf_error)
11415 error ("%qT is a variably modified type", t);
11416 result = true;
11419 /* A non-type argument of integral or enumerated type must be a
11420 constant. */
11421 else if (TREE_TYPE (t)
11422 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
11423 && !TREE_CONSTANT (t))
11425 if (complain & tf_error)
11426 error ("integral expression %qE is not constant", t);
11427 result = true;
11430 if (result && (complain & tf_error))
11431 error (" trying to instantiate %qD", tmpl);
11432 return result;
11435 /* Instantiate the indicated variable or function template TMPL with
11436 the template arguments in TARG_PTR. */
11438 tree
11439 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
11441 tree fndecl;
11442 tree gen_tmpl;
11443 tree spec;
11444 HOST_WIDE_INT saved_processing_template_decl;
11446 if (tmpl == error_mark_node)
11447 return error_mark_node;
11449 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
11451 /* If this function is a clone, handle it specially. */
11452 if (DECL_CLONED_FUNCTION_P (tmpl))
11454 tree spec;
11455 tree clone;
11457 spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
11458 complain);
11459 if (spec == error_mark_node)
11460 return error_mark_node;
11462 /* Look for the clone. */
11463 FOR_EACH_CLONE (clone, spec)
11464 if (DECL_NAME (clone) == DECL_NAME (tmpl))
11465 return clone;
11466 /* We should always have found the clone by now. */
11467 gcc_unreachable ();
11468 return NULL_TREE;
11471 /* Check to see if we already have this specialization. */
11472 spec = retrieve_specialization (tmpl, targ_ptr,
11473 /*class_specializations_p=*/false);
11474 if (spec != NULL_TREE)
11475 return spec;
11477 gen_tmpl = most_general_template (tmpl);
11478 if (tmpl != gen_tmpl)
11480 /* The TMPL is a partial instantiation. To get a full set of
11481 arguments we must add the arguments used to perform the
11482 partial instantiation. */
11483 targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
11484 targ_ptr);
11486 /* Check to see if we already have this specialization. */
11487 spec = retrieve_specialization (gen_tmpl, targ_ptr,
11488 /*class_specializations_p=*/false);
11489 if (spec != NULL_TREE)
11490 return spec;
11493 if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
11494 complain))
11495 return error_mark_node;
11497 /* We are building a FUNCTION_DECL, during which the access of its
11498 parameters and return types have to be checked. However this
11499 FUNCTION_DECL which is the desired context for access checking
11500 is not built yet. We solve this chicken-and-egg problem by
11501 deferring all checks until we have the FUNCTION_DECL. */
11502 push_deferring_access_checks (dk_deferred);
11504 /* Although PROCESSING_TEMPLATE_DECL may be true at this point
11505 (because, for example, we have encountered a non-dependent
11506 function call in the body of a template function and must now
11507 determine which of several overloaded functions will be called),
11508 within the instantiation itself we are not processing a
11509 template. */
11510 saved_processing_template_decl = processing_template_decl;
11511 processing_template_decl = 0;
11512 /* Substitute template parameters to obtain the specialization. */
11513 fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
11514 targ_ptr, complain, gen_tmpl);
11515 processing_template_decl = saved_processing_template_decl;
11516 if (fndecl == error_mark_node)
11517 return error_mark_node;
11519 /* Now we know the specialization, compute access previously
11520 deferred. */
11521 push_access_scope (fndecl);
11522 perform_deferred_access_checks ();
11523 pop_access_scope (fndecl);
11524 pop_deferring_access_checks ();
11526 /* The DECL_TI_TEMPLATE should always be the immediate parent
11527 template, not the most general template. */
11528 DECL_TI_TEMPLATE (fndecl) = tmpl;
11530 /* If we've just instantiated the main entry point for a function,
11531 instantiate all the alternate entry points as well. We do this
11532 by cloning the instantiation of the main entry point, not by
11533 instantiating the template clones. */
11534 if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
11535 clone_function_decl (fndecl, /*update_method_vec_p=*/0);
11537 return fndecl;
11540 /* The FN is a TEMPLATE_DECL for a function. The ARGS are the
11541 arguments that are being used when calling it. TARGS is a vector
11542 into which the deduced template arguments are placed.
11544 Return zero for success, 2 for an incomplete match that doesn't resolve
11545 all the types, and 1 for complete failure. An error message will be
11546 printed only for an incomplete match.
11548 If FN is a conversion operator, or we are trying to produce a specific
11549 specialization, RETURN_TYPE is the return type desired.
11551 The EXPLICIT_TARGS are explicit template arguments provided via a
11552 template-id.
11554 The parameter STRICT is one of:
11556 DEDUCE_CALL:
11557 We are deducing arguments for a function call, as in
11558 [temp.deduct.call].
11560 DEDUCE_CONV:
11561 We are deducing arguments for a conversion function, as in
11562 [temp.deduct.conv].
11564 DEDUCE_EXACT:
11565 We are deducing arguments when doing an explicit instantiation
11566 as in [temp.explicit], when determining an explicit specialization
11567 as in [temp.expl.spec], or when taking the address of a function
11568 template, as in [temp.deduct.funcaddr]. */
11571 fn_type_unification (tree fn,
11572 tree explicit_targs,
11573 tree targs,
11574 tree args,
11575 tree return_type,
11576 unification_kind_t strict,
11577 int flags)
11579 tree parms;
11580 tree fntype;
11581 int result;
11582 bool incomplete_argument_packs_p = false;
11584 gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
11586 fntype = TREE_TYPE (fn);
11587 if (explicit_targs)
11589 /* [temp.deduct]
11591 The specified template arguments must match the template
11592 parameters in kind (i.e., type, nontype, template), and there
11593 must not be more arguments than there are parameters;
11594 otherwise type deduction fails.
11596 Nontype arguments must match the types of the corresponding
11597 nontype template parameters, or must be convertible to the
11598 types of the corresponding nontype parameters as specified in
11599 _temp.arg.nontype_, otherwise type deduction fails.
11601 All references in the function type of the function template
11602 to the corresponding template parameters are replaced by the
11603 specified template argument values. If a substitution in a
11604 template parameter or in the function type of the function
11605 template results in an invalid type, type deduction fails. */
11606 tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
11607 int i, len = TREE_VEC_LENGTH (tparms);
11608 tree converted_args;
11609 bool incomplete = false;
11611 if (explicit_targs == error_mark_node)
11612 return 1;
11614 converted_args
11615 = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
11616 /*require_all_args=*/false,
11617 /*use_default_args=*/false));
11618 if (converted_args == error_mark_node)
11619 return 1;
11621 /* Substitute the explicit args into the function type. This is
11622 necessary so that, for instance, explicitly declared function
11623 arguments can match null pointed constants. If we were given
11624 an incomplete set of explicit args, we must not do semantic
11625 processing during substitution as we could create partial
11626 instantiations. */
11627 for (i = 0; i < len; i++)
11629 tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11630 bool parameter_pack = false;
11632 /* Dig out the actual parm. */
11633 if (TREE_CODE (parm) == TYPE_DECL
11634 || TREE_CODE (parm) == TEMPLATE_DECL)
11636 parm = TREE_TYPE (parm);
11637 parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
11639 else if (TREE_CODE (parm) == PARM_DECL)
11641 parm = DECL_INITIAL (parm);
11642 parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
11645 if (parameter_pack)
11647 int level, idx;
11648 tree targ;
11649 template_parm_level_and_index (parm, &level, &idx);
11651 /* Mark the argument pack as "incomplete". We could
11652 still deduce more arguments during unification. */
11653 targ = TMPL_ARG (converted_args, level, idx);
11654 if (targ)
11656 ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
11657 ARGUMENT_PACK_EXPLICIT_ARGS (targ)
11658 = ARGUMENT_PACK_ARGS (targ);
11661 /* We have some incomplete argument packs. */
11662 incomplete_argument_packs_p = true;
11666 if (incomplete_argument_packs_p)
11667 /* Any substitution is guaranteed to be incomplete if there
11668 are incomplete argument packs, because we can still deduce
11669 more arguments. */
11670 incomplete = 1;
11671 else
11672 incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
11674 processing_template_decl += incomplete;
11675 fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
11676 processing_template_decl -= incomplete;
11678 if (fntype == error_mark_node)
11679 return 1;
11681 /* Place the explicitly specified arguments in TARGS. */
11682 for (i = NUM_TMPL_ARGS (converted_args); i--;)
11683 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
11686 /* Never do unification on the 'this' parameter. */
11687 parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
11689 if (return_type)
11691 parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
11692 args = tree_cons (NULL_TREE, return_type, args);
11695 /* We allow incomplete unification without an error message here
11696 because the standard doesn't seem to explicitly prohibit it. Our
11697 callers must be ready to deal with unification failures in any
11698 event. */
11699 result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
11700 targs, parms, args, /*subr=*/0,
11701 strict, flags);
11703 if (result == 0 && incomplete_argument_packs_p)
11705 int i, len = NUM_TMPL_ARGS (targs);
11707 /* Clear the "incomplete" flags on all argument packs. */
11708 for (i = 0; i < len; i++)
11710 tree arg = TREE_VEC_ELT (targs, i);
11711 if (ARGUMENT_PACK_P (arg))
11713 ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
11714 ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
11719 /* Now that we have bindings for all of the template arguments,
11720 ensure that the arguments deduced for the template template
11721 parameters have compatible template parameter lists. We cannot
11722 check this property before we have deduced all template
11723 arguments, because the template parameter types of a template
11724 template parameter might depend on prior template parameters
11725 deduced after the template template parameter. The following
11726 ill-formed example illustrates this issue:
11728 template<typename T, template<T> class C> void f(C<5>, T);
11730 template<int N> struct X {};
11732 void g() {
11733 f(X<5>(), 5l); // error: template argument deduction fails
11736 The template parameter list of 'C' depends on the template type
11737 parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
11738 'long'. Thus, we can't check that 'C' cannot bind to 'X' at the
11739 time that we deduce 'C'. */
11740 if (result == 0
11741 && !template_template_parm_bindings_ok_p
11742 (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
11743 return 1;
11745 if (result == 0)
11746 /* All is well so far. Now, check:
11748 [temp.deduct]
11750 When all template arguments have been deduced, all uses of
11751 template parameters in nondeduced contexts are replaced with
11752 the corresponding deduced argument values. If the
11753 substitution results in an invalid type, as described above,
11754 type deduction fails. */
11755 if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
11756 == error_mark_node)
11757 return 1;
11759 return result;
11762 /* Adjust types before performing type deduction, as described in
11763 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
11764 sections are symmetric. PARM is the type of a function parameter
11765 or the return type of the conversion function. ARG is the type of
11766 the argument passed to the call, or the type of the value
11767 initialized with the result of the conversion function.
11768 ARG_EXPR is the original argument expression, which may be null. */
11770 static int
11771 maybe_adjust_types_for_deduction (unification_kind_t strict,
11772 tree* parm,
11773 tree* arg,
11774 tree arg_expr)
11776 int result = 0;
11778 switch (strict)
11780 case DEDUCE_CALL:
11781 break;
11783 case DEDUCE_CONV:
11785 /* Swap PARM and ARG throughout the remainder of this
11786 function; the handling is precisely symmetric since PARM
11787 will initialize ARG rather than vice versa. */
11788 tree* temp = parm;
11789 parm = arg;
11790 arg = temp;
11791 break;
11794 case DEDUCE_EXACT:
11795 /* There is nothing to do in this case. */
11796 return 0;
11798 default:
11799 gcc_unreachable ();
11802 if (TREE_CODE (*parm) != REFERENCE_TYPE)
11804 /* [temp.deduct.call]
11806 If P is not a reference type:
11808 --If A is an array type, the pointer type produced by the
11809 array-to-pointer standard conversion (_conv.array_) is
11810 used in place of A for type deduction; otherwise,
11812 --If A is a function type, the pointer type produced by
11813 the function-to-pointer standard conversion
11814 (_conv.func_) is used in place of A for type deduction;
11815 otherwise,
11817 --If A is a cv-qualified type, the top level
11818 cv-qualifiers of A's type are ignored for type
11819 deduction. */
11820 if (TREE_CODE (*arg) == ARRAY_TYPE)
11821 *arg = build_pointer_type (TREE_TYPE (*arg));
11822 else if (TREE_CODE (*arg) == FUNCTION_TYPE)
11823 *arg = build_pointer_type (*arg);
11824 else
11825 *arg = TYPE_MAIN_VARIANT (*arg);
11828 /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
11829 of the form T&&, where T is a template parameter, and the argument
11830 is an lvalue, T is deduced as A& */
11831 if (TREE_CODE (*parm) == REFERENCE_TYPE
11832 && TYPE_REF_IS_RVALUE (*parm)
11833 && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
11834 && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
11835 && arg_expr && real_lvalue_p (arg_expr))
11836 *arg = build_reference_type (*arg);
11838 /* [temp.deduct.call]
11840 If P is a cv-qualified type, the top level cv-qualifiers
11841 of P's type are ignored for type deduction. If P is a
11842 reference type, the type referred to by P is used for
11843 type deduction. */
11844 *parm = TYPE_MAIN_VARIANT (*parm);
11845 if (TREE_CODE (*parm) == REFERENCE_TYPE)
11847 *parm = TREE_TYPE (*parm);
11848 result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
11851 /* DR 322. For conversion deduction, remove a reference type on parm
11852 too (which has been swapped into ARG). */
11853 if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
11854 *arg = TREE_TYPE (*arg);
11856 return result;
11859 /* Most parms like fn_type_unification.
11861 If SUBR is 1, we're being called recursively (to unify the
11862 arguments of a function or method parameter of a function
11863 template). */
11865 static int
11866 type_unification_real (tree tparms,
11867 tree targs,
11868 tree xparms,
11869 tree xargs,
11870 int subr,
11871 unification_kind_t strict,
11872 int flags)
11874 tree parm, arg, arg_expr;
11875 int i;
11876 int ntparms = TREE_VEC_LENGTH (tparms);
11877 int sub_strict;
11878 int saw_undeduced = 0;
11879 tree parms, args;
11881 gcc_assert (TREE_CODE (tparms) == TREE_VEC);
11882 gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
11883 gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
11884 gcc_assert (ntparms > 0);
11886 switch (strict)
11888 case DEDUCE_CALL:
11889 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
11890 | UNIFY_ALLOW_DERIVED);
11891 break;
11893 case DEDUCE_CONV:
11894 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
11895 break;
11897 case DEDUCE_EXACT:
11898 sub_strict = UNIFY_ALLOW_NONE;
11899 break;
11901 default:
11902 gcc_unreachable ();
11905 again:
11906 parms = xparms;
11907 args = xargs;
11909 while (parms && parms != void_list_node
11910 && args && args != void_list_node)
11912 if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
11913 break;
11915 parm = TREE_VALUE (parms);
11916 parms = TREE_CHAIN (parms);
11917 arg = TREE_VALUE (args);
11918 args = TREE_CHAIN (args);
11919 arg_expr = NULL;
11921 if (arg == error_mark_node)
11922 return 1;
11923 if (arg == unknown_type_node)
11924 /* We can't deduce anything from this, but we might get all the
11925 template args from other function args. */
11926 continue;
11928 /* Conversions will be performed on a function argument that
11929 corresponds with a function parameter that contains only
11930 non-deducible template parameters and explicitly specified
11931 template parameters. */
11932 if (!uses_template_parms (parm))
11934 tree type;
11936 if (!TYPE_P (arg))
11937 type = TREE_TYPE (arg);
11938 else
11939 type = arg;
11941 if (same_type_p (parm, type))
11942 continue;
11943 if (strict != DEDUCE_EXACT
11944 && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
11945 flags))
11946 continue;
11948 return 1;
11951 if (!TYPE_P (arg))
11953 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
11954 if (type_unknown_p (arg))
11956 /* [temp.deduct.type]
11958 A template-argument can be deduced from a pointer to
11959 function or pointer to member function argument if
11960 the set of overloaded functions does not contain
11961 function templates and at most one of a set of
11962 overloaded functions provides a unique match. */
11963 if (resolve_overloaded_unification
11964 (tparms, targs, parm, arg, strict, sub_strict))
11965 continue;
11967 return 1;
11969 arg_expr = arg;
11970 arg = unlowered_expr_type (arg);
11971 if (arg == error_mark_node)
11972 return 1;
11976 int arg_strict = sub_strict;
11978 if (!subr)
11979 arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
11980 arg_expr);
11982 if (unify (tparms, targs, parm, arg, arg_strict))
11983 return 1;
11988 if (parms
11989 && parms != void_list_node
11990 && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
11992 /* Unify the remaining arguments with the pack expansion type. */
11993 tree argvec;
11994 tree parmvec = make_tree_vec (1);
11995 int len = 0;
11996 tree t;
11998 /* Count the number of arguments that remain. */
11999 for (t = args; t && t != void_list_node; t = TREE_CHAIN (t))
12000 len++;
12002 /* Allocate a TREE_VEC and copy in all of the arguments */
12003 argvec = make_tree_vec (len);
12004 for (i = 0; args && args != void_list_node; args = TREE_CHAIN (args))
12006 TREE_VEC_ELT (argvec, i) = TREE_VALUE (args);
12007 ++i;
12010 /* Copy the parameter into parmvec. */
12011 TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
12012 if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
12013 /*call_args_p=*/true, /*subr=*/subr))
12014 return 1;
12016 /* Advance to the end of the list of parameters. */
12017 parms = TREE_CHAIN (parms);
12020 /* Fail if we've reached the end of the parm list, and more args
12021 are present, and the parm list isn't variadic. */
12022 if (args && args != void_list_node && parms == void_list_node)
12023 return 1;
12024 /* Fail if parms are left and they don't have default values. */
12025 if (parms && parms != void_list_node
12026 && TREE_PURPOSE (parms) == NULL_TREE)
12027 return 1;
12029 if (!subr)
12030 for (i = 0; i < ntparms; i++)
12031 if (!TREE_VEC_ELT (targs, i))
12033 tree tparm;
12035 if (TREE_VEC_ELT (tparms, i) == error_mark_node)
12036 continue;
12038 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
12040 /* If this is an undeduced nontype parameter that depends on
12041 a type parameter, try another pass; its type may have been
12042 deduced from a later argument than the one from which
12043 this parameter can be deduced. */
12044 if (TREE_CODE (tparm) == PARM_DECL
12045 && uses_template_parms (TREE_TYPE (tparm))
12046 && !saw_undeduced++)
12047 goto again;
12049 /* Core issue #226 (C++0x) [temp.deduct]:
12051 If a template argument has not been deduced, its
12052 default template argument, if any, is used.
12054 When we are in C++98 mode, TREE_PURPOSE will either
12055 be NULL_TREE or ERROR_MARK_NODE, so we do not need
12056 to explicitly check cxx_dialect here. */
12057 if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
12059 tree arg = tsubst (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)),
12060 targs, tf_none, NULL_TREE);
12061 if (arg == error_mark_node)
12062 return 1;
12063 else
12065 TREE_VEC_ELT (targs, i) = arg;
12066 continue;
12070 /* If the type parameter is a parameter pack, then it will
12071 be deduced to an empty parameter pack. */
12072 if (template_parameter_pack_p (tparm))
12074 tree arg;
12076 if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
12078 arg = make_node (NONTYPE_ARGUMENT_PACK);
12079 TREE_TYPE (arg) = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
12080 TREE_CONSTANT (arg) = 1;
12082 else
12083 arg = make_node (TYPE_ARGUMENT_PACK);
12085 SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
12087 TREE_VEC_ELT (targs, i) = arg;
12088 continue;
12091 return 2;
12094 return 0;
12097 /* Subroutine of type_unification_real. Args are like the variables
12098 at the call site. ARG is an overloaded function (or template-id);
12099 we try deducing template args from each of the overloads, and if
12100 only one succeeds, we go with that. Modifies TARGS and returns
12101 true on success. */
12103 static bool
12104 resolve_overloaded_unification (tree tparms,
12105 tree targs,
12106 tree parm,
12107 tree arg,
12108 unification_kind_t strict,
12109 int sub_strict)
12111 tree tempargs = copy_node (targs);
12112 int good = 0;
12113 bool addr_p;
12115 if (TREE_CODE (arg) == ADDR_EXPR)
12117 arg = TREE_OPERAND (arg, 0);
12118 addr_p = true;
12120 else
12121 addr_p = false;
12123 if (TREE_CODE (arg) == COMPONENT_REF)
12124 /* Handle `&x' where `x' is some static or non-static member
12125 function name. */
12126 arg = TREE_OPERAND (arg, 1);
12128 if (TREE_CODE (arg) == OFFSET_REF)
12129 arg = TREE_OPERAND (arg, 1);
12131 /* Strip baselink information. */
12132 if (BASELINK_P (arg))
12133 arg = BASELINK_FUNCTIONS (arg);
12135 if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
12137 /* If we got some explicit template args, we need to plug them into
12138 the affected templates before we try to unify, in case the
12139 explicit args will completely resolve the templates in question. */
12141 tree expl_subargs = TREE_OPERAND (arg, 1);
12142 arg = TREE_OPERAND (arg, 0);
12144 for (; arg; arg = OVL_NEXT (arg))
12146 tree fn = OVL_CURRENT (arg);
12147 tree subargs, elem;
12149 if (TREE_CODE (fn) != TEMPLATE_DECL)
12150 continue;
12152 subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
12153 expl_subargs, /*check_ret=*/false);
12154 if (subargs)
12156 elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
12157 good += try_one_overload (tparms, targs, tempargs, parm,
12158 elem, strict, sub_strict, addr_p);
12162 else if (TREE_CODE (arg) != OVERLOAD
12163 && TREE_CODE (arg) != FUNCTION_DECL)
12164 /* If ARG is, for example, "(0, &f)" then its type will be unknown
12165 -- but the deduction does not succeed because the expression is
12166 not just the function on its own. */
12167 return false;
12168 else
12169 for (; arg; arg = OVL_NEXT (arg))
12170 good += try_one_overload (tparms, targs, tempargs, parm,
12171 TREE_TYPE (OVL_CURRENT (arg)),
12172 strict, sub_strict, addr_p);
12174 /* [temp.deduct.type] A template-argument can be deduced from a pointer
12175 to function or pointer to member function argument if the set of
12176 overloaded functions does not contain function templates and at most
12177 one of a set of overloaded functions provides a unique match.
12179 So if we found multiple possibilities, we return success but don't
12180 deduce anything. */
12182 if (good == 1)
12184 int i = TREE_VEC_LENGTH (targs);
12185 for (; i--; )
12186 if (TREE_VEC_ELT (tempargs, i))
12187 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
12189 if (good)
12190 return true;
12192 return false;
12195 /* Subroutine of resolve_overloaded_unification; does deduction for a single
12196 overload. Fills TARGS with any deduced arguments, or error_mark_node if
12197 different overloads deduce different arguments for a given parm.
12198 ADDR_P is true if the expression for which deduction is being
12199 performed was of the form "& fn" rather than simply "fn".
12201 Returns 1 on success. */
12203 static int
12204 try_one_overload (tree tparms,
12205 tree orig_targs,
12206 tree targs,
12207 tree parm,
12208 tree arg,
12209 unification_kind_t strict,
12210 int sub_strict,
12211 bool addr_p)
12213 int nargs;
12214 tree tempargs;
12215 int i;
12217 /* [temp.deduct.type] A template-argument can be deduced from a pointer
12218 to function or pointer to member function argument if the set of
12219 overloaded functions does not contain function templates and at most
12220 one of a set of overloaded functions provides a unique match.
12222 So if this is a template, just return success. */
12224 if (uses_template_parms (arg))
12225 return 1;
12227 if (TREE_CODE (arg) == METHOD_TYPE)
12228 arg = build_ptrmemfunc_type (build_pointer_type (arg));
12229 else if (addr_p)
12230 arg = build_pointer_type (arg);
12232 sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
12234 /* We don't copy orig_targs for this because if we have already deduced
12235 some template args from previous args, unify would complain when we
12236 try to deduce a template parameter for the same argument, even though
12237 there isn't really a conflict. */
12238 nargs = TREE_VEC_LENGTH (targs);
12239 tempargs = make_tree_vec (nargs);
12241 if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
12242 return 0;
12244 /* First make sure we didn't deduce anything that conflicts with
12245 explicitly specified args. */
12246 for (i = nargs; i--; )
12248 tree elt = TREE_VEC_ELT (tempargs, i);
12249 tree oldelt = TREE_VEC_ELT (orig_targs, i);
12251 if (!elt)
12252 /*NOP*/;
12253 else if (uses_template_parms (elt))
12254 /* Since we're unifying against ourselves, we will fill in
12255 template args used in the function parm list with our own
12256 template parms. Discard them. */
12257 TREE_VEC_ELT (tempargs, i) = NULL_TREE;
12258 else if (oldelt && !template_args_equal (oldelt, elt))
12259 return 0;
12262 for (i = nargs; i--; )
12264 tree elt = TREE_VEC_ELT (tempargs, i);
12266 if (elt)
12267 TREE_VEC_ELT (targs, i) = elt;
12270 return 1;
12273 /* PARM is a template class (perhaps with unbound template
12274 parameters). ARG is a fully instantiated type. If ARG can be
12275 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
12276 TARGS are as for unify. */
12278 static tree
12279 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
12281 tree copy_of_targs;
12283 if (!CLASSTYPE_TEMPLATE_INFO (arg)
12284 || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
12285 != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
12286 return NULL_TREE;
12288 /* We need to make a new template argument vector for the call to
12289 unify. If we used TARGS, we'd clutter it up with the result of
12290 the attempted unification, even if this class didn't work out.
12291 We also don't want to commit ourselves to all the unifications
12292 we've already done, since unification is supposed to be done on
12293 an argument-by-argument basis. In other words, consider the
12294 following pathological case:
12296 template <int I, int J, int K>
12297 struct S {};
12299 template <int I, int J>
12300 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
12302 template <int I, int J, int K>
12303 void f(S<I, J, K>, S<I, I, I>);
12305 void g() {
12306 S<0, 0, 0> s0;
12307 S<0, 1, 2> s2;
12309 f(s0, s2);
12312 Now, by the time we consider the unification involving `s2', we
12313 already know that we must have `f<0, 0, 0>'. But, even though
12314 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
12315 because there are two ways to unify base classes of S<0, 1, 2>
12316 with S<I, I, I>. If we kept the already deduced knowledge, we
12317 would reject the possibility I=1. */
12318 copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
12320 /* If unification failed, we're done. */
12321 if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
12322 CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
12323 return NULL_TREE;
12325 return arg;
12328 /* Given a template type PARM and a class type ARG, find the unique
12329 base type in ARG that is an instance of PARM. We do not examine
12330 ARG itself; only its base-classes. If there is not exactly one
12331 appropriate base class, return NULL_TREE. PARM may be the type of
12332 a partial specialization, as well as a plain template type. Used
12333 by unify. */
12335 static tree
12336 get_template_base (tree tparms, tree targs, tree parm, tree arg)
12338 tree rval = NULL_TREE;
12339 tree binfo;
12341 gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)));
12343 binfo = TYPE_BINFO (complete_type (arg));
12344 if (!binfo)
12345 /* The type could not be completed. */
12346 return NULL_TREE;
12348 /* Walk in inheritance graph order. The search order is not
12349 important, and this avoids multiple walks of virtual bases. */
12350 for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
12352 tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
12354 if (r)
12356 /* If there is more than one satisfactory baseclass, then:
12358 [temp.deduct.call]
12360 If they yield more than one possible deduced A, the type
12361 deduction fails.
12363 applies. */
12364 if (rval && !same_type_p (r, rval))
12365 return NULL_TREE;
12367 rval = r;
12371 return rval;
12374 /* Returns the level of DECL, which declares a template parameter. */
12376 static int
12377 template_decl_level (tree decl)
12379 switch (TREE_CODE (decl))
12381 case TYPE_DECL:
12382 case TEMPLATE_DECL:
12383 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
12385 case PARM_DECL:
12386 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
12388 default:
12389 gcc_unreachable ();
12391 return 0;
12394 /* Decide whether ARG can be unified with PARM, considering only the
12395 cv-qualifiers of each type, given STRICT as documented for unify.
12396 Returns nonzero iff the unification is OK on that basis. */
12398 static int
12399 check_cv_quals_for_unify (int strict, tree arg, tree parm)
12401 int arg_quals = cp_type_quals (arg);
12402 int parm_quals = cp_type_quals (parm);
12404 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12405 && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12407 /* Although a CVR qualifier is ignored when being applied to a
12408 substituted template parameter ([8.3.2]/1 for example), that
12409 does not apply during deduction [14.8.2.4]/1, (even though
12410 that is not explicitly mentioned, [14.8.2.4]/9 indicates
12411 this). Except when we're allowing additional CV qualifiers
12412 at the outer level [14.8.2.1]/3,1st bullet. */
12413 if ((TREE_CODE (arg) == REFERENCE_TYPE
12414 || TREE_CODE (arg) == FUNCTION_TYPE
12415 || TREE_CODE (arg) == METHOD_TYPE)
12416 && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
12417 return 0;
12419 if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
12420 && (parm_quals & TYPE_QUAL_RESTRICT))
12421 return 0;
12424 if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12425 && (arg_quals & parm_quals) != parm_quals)
12426 return 0;
12428 if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
12429 && (parm_quals & arg_quals) != arg_quals)
12430 return 0;
12432 return 1;
12435 /* Determines the LEVEL and INDEX for the template parameter PARM. */
12436 void
12437 template_parm_level_and_index (tree parm, int* level, int* index)
12439 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12440 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12441 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12443 *index = TEMPLATE_TYPE_IDX (parm);
12444 *level = TEMPLATE_TYPE_LEVEL (parm);
12446 else
12448 *index = TEMPLATE_PARM_IDX (parm);
12449 *level = TEMPLATE_PARM_LEVEL (parm);
12453 /* Unifies the remaining arguments in PACKED_ARGS with the pack
12454 expansion at the end of PACKED_PARMS. Returns 0 if the type
12455 deduction succeeds, 1 otherwise. STRICT is the same as in
12456 unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
12457 call argument list. We'll need to adjust the arguments to make them
12458 types. SUBR tells us if this is from a recursive call to
12459 type_unification_real. */
12461 unify_pack_expansion (tree tparms, tree targs, tree packed_parms,
12462 tree packed_args, int strict, bool call_args_p,
12463 bool subr)
12465 tree parm
12466 = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
12467 tree pattern = PACK_EXPANSION_PATTERN (parm);
12468 tree pack, packs = NULL_TREE;
12469 int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
12470 int len = TREE_VEC_LENGTH (packed_args);
12472 /* Determine the parameter packs we will be deducing from the
12473 pattern, and record their current deductions. */
12474 for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm);
12475 pack; pack = TREE_CHAIN (pack))
12477 tree parm_pack = TREE_VALUE (pack);
12478 int idx, level;
12480 /* Determine the index and level of this parameter pack. */
12481 template_parm_level_and_index (parm_pack, &level, &idx);
12483 /* Keep track of the parameter packs and their corresponding
12484 argument packs. */
12485 packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
12486 TREE_TYPE (packs) = make_tree_vec (len - start);
12489 /* Loop through all of the arguments that have not yet been
12490 unified and unify each with the pattern. */
12491 for (i = start; i < len; i++)
12493 tree parm = pattern;
12495 /* For each parameter pack, clear out the deduced value so that
12496 we can deduce it again. */
12497 for (pack = packs; pack; pack = TREE_CHAIN (pack))
12499 int idx, level;
12500 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12502 TMPL_ARG (targs, level, idx) = NULL_TREE;
12505 /* Unify the pattern with the current argument. */
12507 tree arg = TREE_VEC_ELT (packed_args, i);
12508 tree arg_expr = NULL_TREE;
12509 int arg_strict = strict;
12510 bool skip_arg_p = false;
12512 if (call_args_p)
12514 int sub_strict;
12516 /* This mirrors what we do in type_unification_real. */
12517 switch (strict)
12519 case DEDUCE_CALL:
12520 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL
12521 | UNIFY_ALLOW_MORE_CV_QUAL
12522 | UNIFY_ALLOW_DERIVED);
12523 break;
12525 case DEDUCE_CONV:
12526 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12527 break;
12529 case DEDUCE_EXACT:
12530 sub_strict = UNIFY_ALLOW_NONE;
12531 break;
12533 default:
12534 gcc_unreachable ();
12537 if (!TYPE_P (arg))
12539 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12540 if (type_unknown_p (arg))
12542 /* [temp.deduct.type] A template-argument can be
12543 deduced from a pointer to function or pointer
12544 to member function argument if the set of
12545 overloaded functions does not contain function
12546 templates and at most one of a set of
12547 overloaded functions provides a unique
12548 match. */
12550 if (resolve_overloaded_unification
12551 (tparms, targs, parm, arg, strict, sub_strict)
12552 != 0)
12553 return 1;
12554 skip_arg_p = true;
12557 if (!skip_arg_p)
12559 arg_expr = arg;
12560 arg = unlowered_expr_type (arg);
12561 if (arg == error_mark_node)
12562 return 1;
12566 arg_strict = sub_strict;
12568 if (!subr)
12569 arg_strict |=
12570 maybe_adjust_types_for_deduction (strict, &parm, &arg,
12571 arg_expr);
12574 if (!skip_arg_p)
12576 if (unify (tparms, targs, parm, arg, arg_strict))
12577 return 1;
12581 /* For each parameter pack, collect the deduced value. */
12582 for (pack = packs; pack; pack = TREE_CHAIN (pack))
12584 int idx, level;
12585 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12587 TREE_VEC_ELT (TREE_TYPE (pack), i - start) =
12588 TMPL_ARG (targs, level, idx);
12592 /* Verify that the results of unification with the parameter packs
12593 produce results consistent with what we've seen before, and make
12594 the deduced argument packs available. */
12595 for (pack = packs; pack; pack = TREE_CHAIN (pack))
12597 tree old_pack = TREE_VALUE (pack);
12598 tree new_args = TREE_TYPE (pack);
12599 int i, len = TREE_VEC_LENGTH (new_args);
12600 bool nondeduced_p = false;
12602 /* If NEW_ARGS contains any NULL_TREE entries, we didn't
12603 actually deduce anything. */
12604 for (i = 0; i < len && !nondeduced_p; ++i)
12605 if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
12606 nondeduced_p = true;
12607 if (nondeduced_p)
12608 continue;
12610 if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
12612 /* Prepend the explicit arguments onto NEW_ARGS. */
12613 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12614 tree old_args = new_args;
12615 int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
12616 int len = explicit_len + TREE_VEC_LENGTH (old_args);
12618 /* Copy the explicit arguments. */
12619 new_args = make_tree_vec (len);
12620 for (i = 0; i < explicit_len; i++)
12621 TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
12623 /* Copy the deduced arguments. */
12624 for (; i < len; i++)
12625 TREE_VEC_ELT (new_args, i) =
12626 TREE_VEC_ELT (old_args, i - explicit_len);
12629 if (!old_pack)
12631 tree result;
12632 int idx, level;
12634 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12636 /* Build the deduced *_ARGUMENT_PACK. */
12637 if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
12639 result = make_node (NONTYPE_ARGUMENT_PACK);
12640 TREE_TYPE (result) =
12641 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
12642 TREE_CONSTANT (result) = 1;
12644 else
12645 result = make_node (TYPE_ARGUMENT_PACK);
12647 SET_ARGUMENT_PACK_ARGS (result, new_args);
12649 /* Note the deduced argument packs for this parameter
12650 pack. */
12651 TMPL_ARG (targs, level, idx) = result;
12653 else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
12654 && (ARGUMENT_PACK_ARGS (old_pack)
12655 == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
12657 /* We only had the explicitly-provided arguments before, but
12658 now we have a complete set of arguments. */
12659 int idx, level;
12660 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12661 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12663 /* Keep the original deduced argument pack. */
12664 TMPL_ARG (targs, level, idx) = old_pack;
12666 SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
12667 ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
12668 ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
12670 else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
12671 new_args))
12672 /* Inconsistent unification of this parameter pack. */
12673 return 1;
12674 else
12676 int idx, level;
12678 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12680 /* Keep the original deduced argument pack. */
12681 TMPL_ARG (targs, level, idx) = old_pack;
12685 return 0;
12688 /* Deduce the value of template parameters. TPARMS is the (innermost)
12689 set of template parameters to a template. TARGS is the bindings
12690 for those template parameters, as determined thus far; TARGS may
12691 include template arguments for outer levels of template parameters
12692 as well. PARM is a parameter to a template function, or a
12693 subcomponent of that parameter; ARG is the corresponding argument.
12694 This function attempts to match PARM with ARG in a manner
12695 consistent with the existing assignments in TARGS. If more values
12696 are deduced, then TARGS is updated.
12698 Returns 0 if the type deduction succeeds, 1 otherwise. The
12699 parameter STRICT is a bitwise or of the following flags:
12701 UNIFY_ALLOW_NONE:
12702 Require an exact match between PARM and ARG.
12703 UNIFY_ALLOW_MORE_CV_QUAL:
12704 Allow the deduced ARG to be more cv-qualified (by qualification
12705 conversion) than ARG.
12706 UNIFY_ALLOW_LESS_CV_QUAL:
12707 Allow the deduced ARG to be less cv-qualified than ARG.
12708 UNIFY_ALLOW_DERIVED:
12709 Allow the deduced ARG to be a template base class of ARG,
12710 or a pointer to a template base class of the type pointed to by
12711 ARG.
12712 UNIFY_ALLOW_INTEGER:
12713 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
12714 case for more information.
12715 UNIFY_ALLOW_OUTER_LEVEL:
12716 This is the outermost level of a deduction. Used to determine validity
12717 of qualification conversions. A valid qualification conversion must
12718 have const qualified pointers leading up to the inner type which
12719 requires additional CV quals, except at the outer level, where const
12720 is not required [conv.qual]. It would be normal to set this flag in
12721 addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
12722 UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
12723 This is the outermost level of a deduction, and PARM can be more CV
12724 qualified at this point.
12725 UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
12726 This is the outermost level of a deduction, and PARM can be less CV
12727 qualified at this point. */
12729 static int
12730 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
12732 int idx;
12733 tree targ;
12734 tree tparm;
12735 int strict_in = strict;
12737 /* I don't think this will do the right thing with respect to types.
12738 But the only case I've seen it in so far has been array bounds, where
12739 signedness is the only information lost, and I think that will be
12740 okay. */
12741 while (TREE_CODE (parm) == NOP_EXPR)
12742 parm = TREE_OPERAND (parm, 0);
12744 if (arg == error_mark_node)
12745 return 1;
12746 if (arg == unknown_type_node)
12747 /* We can't deduce anything from this, but we might get all the
12748 template args from other function args. */
12749 return 0;
12751 /* If PARM uses template parameters, then we can't bail out here,
12752 even if ARG == PARM, since we won't record unifications for the
12753 template parameters. We might need them if we're trying to
12754 figure out which of two things is more specialized. */
12755 if (arg == parm && !uses_template_parms (parm))
12756 return 0;
12758 /* Immediately reject some pairs that won't unify because of
12759 cv-qualification mismatches. */
12760 if (TREE_CODE (arg) == TREE_CODE (parm)
12761 && TYPE_P (arg)
12762 /* It is the elements of the array which hold the cv quals of an array
12763 type, and the elements might be template type parms. We'll check
12764 when we recurse. */
12765 && TREE_CODE (arg) != ARRAY_TYPE
12766 /* We check the cv-qualifiers when unifying with template type
12767 parameters below. We want to allow ARG `const T' to unify with
12768 PARM `T' for example, when computing which of two templates
12769 is more specialized, for example. */
12770 && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
12771 && !check_cv_quals_for_unify (strict_in, arg, parm))
12772 return 1;
12774 if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
12775 && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
12776 strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
12777 strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
12778 strict &= ~UNIFY_ALLOW_DERIVED;
12779 strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
12780 strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
12782 switch (TREE_CODE (parm))
12784 case TYPENAME_TYPE:
12785 case SCOPE_REF:
12786 case UNBOUND_CLASS_TEMPLATE:
12787 /* In a type which contains a nested-name-specifier, template
12788 argument values cannot be deduced for template parameters used
12789 within the nested-name-specifier. */
12790 return 0;
12792 case TEMPLATE_TYPE_PARM:
12793 case TEMPLATE_TEMPLATE_PARM:
12794 case BOUND_TEMPLATE_TEMPLATE_PARM:
12795 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
12796 if (tparm == error_mark_node)
12797 return 1;
12799 if (TEMPLATE_TYPE_LEVEL (parm)
12800 != template_decl_level (tparm))
12801 /* The PARM is not one we're trying to unify. Just check
12802 to see if it matches ARG. */
12803 return (TREE_CODE (arg) == TREE_CODE (parm)
12804 && same_type_p (parm, arg)) ? 0 : 1;
12805 idx = TEMPLATE_TYPE_IDX (parm);
12806 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
12807 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
12809 /* Check for mixed types and values. */
12810 if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12811 && TREE_CODE (tparm) != TYPE_DECL)
12812 || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12813 && TREE_CODE (tparm) != TEMPLATE_DECL))
12814 return 1;
12816 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12818 /* ARG must be constructed from a template class or a template
12819 template parameter. */
12820 if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
12821 && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
12822 return 1;
12825 tree parmvec = TYPE_TI_ARGS (parm);
12826 tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
12827 tree argtmplvec
12828 = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
12829 int i, len;
12830 int parm_variadic_p = 0;
12832 /* The resolution to DR150 makes clear that default
12833 arguments for an N-argument may not be used to bind T
12834 to a template template parameter with fewer than N
12835 parameters. It is not safe to permit the binding of
12836 default arguments as an extension, as that may change
12837 the meaning of a conforming program. Consider:
12839 struct Dense { static const unsigned int dim = 1; };
12841 template <template <typename> class View,
12842 typename Block>
12843 void operator+(float, View<Block> const&);
12845 template <typename Block,
12846 unsigned int Dim = Block::dim>
12847 struct Lvalue_proxy { operator float() const; };
12849 void
12850 test_1d (void) {
12851 Lvalue_proxy<Dense> p;
12852 float b;
12853 b + p;
12856 Here, if Lvalue_proxy is permitted to bind to View, then
12857 the global operator+ will be used; if they are not, the
12858 Lvalue_proxy will be converted to float. */
12859 if (coerce_template_parms (argtmplvec, parmvec,
12860 TYPE_TI_TEMPLATE (parm),
12861 tf_none,
12862 /*require_all_args=*/true,
12863 /*use_default_args=*/false)
12864 == error_mark_node)
12865 return 1;
12867 /* Deduce arguments T, i from TT<T> or TT<i>.
12868 We check each element of PARMVEC and ARGVEC individually
12869 rather than the whole TREE_VEC since they can have
12870 different number of elements. */
12872 parmvec = expand_template_argument_pack (parmvec);
12873 argvec = expand_template_argument_pack (argvec);
12875 len = TREE_VEC_LENGTH (parmvec);
12877 /* Check if the parameters end in a pack, making them
12878 variadic. */
12879 if (len > 0
12880 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
12881 parm_variadic_p = 1;
12883 if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
12884 return 1;
12886 for (i = 0; i < len - parm_variadic_p; ++i)
12888 if (unify (tparms, targs,
12889 TREE_VEC_ELT (parmvec, i),
12890 TREE_VEC_ELT (argvec, i),
12891 UNIFY_ALLOW_NONE))
12892 return 1;
12895 if (parm_variadic_p
12896 && unify_pack_expansion (tparms, targs,
12897 parmvec, argvec,
12898 UNIFY_ALLOW_NONE,
12899 /*call_args_p=*/false,
12900 /*subr=*/false))
12901 return 1;
12903 arg = TYPE_TI_TEMPLATE (arg);
12905 /* Fall through to deduce template name. */
12908 if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12909 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12911 /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>. */
12913 /* Simple cases: Value already set, does match or doesn't. */
12914 if (targ != NULL_TREE && template_args_equal (targ, arg))
12915 return 0;
12916 else if (targ)
12917 return 1;
12919 else
12921 /* If PARM is `const T' and ARG is only `int', we don't have
12922 a match unless we are allowing additional qualification.
12923 If ARG is `const int' and PARM is just `T' that's OK;
12924 that binds `const int' to `T'. */
12925 if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
12926 arg, parm))
12927 return 1;
12929 /* Consider the case where ARG is `const volatile int' and
12930 PARM is `const T'. Then, T should be `volatile int'. */
12931 arg = cp_build_qualified_type_real
12932 (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
12933 if (arg == error_mark_node)
12934 return 1;
12936 /* Simple cases: Value already set, does match or doesn't. */
12937 if (targ != NULL_TREE && same_type_p (targ, arg))
12938 return 0;
12939 else if (targ)
12940 return 1;
12942 /* Make sure that ARG is not a variable-sized array. (Note
12943 that were talking about variable-sized arrays (like
12944 `int[n]'), rather than arrays of unknown size (like
12945 `int[]').) We'll get very confused by such a type since
12946 the bound of the array will not be computable in an
12947 instantiation. Besides, such types are not allowed in
12948 ISO C++, so we can do as we please here. */
12949 if (variably_modified_type_p (arg, NULL_TREE))
12950 return 1;
12953 /* If ARG is a parameter pack or an expansion, we cannot unify
12954 against it unless PARM is also a parameter pack. */
12955 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
12956 && !template_parameter_pack_p (parm))
12957 return 1;
12959 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
12960 return 0;
12962 case TEMPLATE_PARM_INDEX:
12963 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
12964 if (tparm == error_mark_node)
12965 return 1;
12967 if (TEMPLATE_PARM_LEVEL (parm)
12968 != template_decl_level (tparm))
12969 /* The PARM is not one we're trying to unify. Just check
12970 to see if it matches ARG. */
12971 return !(TREE_CODE (arg) == TREE_CODE (parm)
12972 && cp_tree_equal (parm, arg));
12974 idx = TEMPLATE_PARM_IDX (parm);
12975 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
12977 if (targ)
12978 return !cp_tree_equal (targ, arg);
12980 /* [temp.deduct.type] If, in the declaration of a function template
12981 with a non-type template-parameter, the non-type
12982 template-parameter is used in an expression in the function
12983 parameter-list and, if the corresponding template-argument is
12984 deduced, the template-argument type shall match the type of the
12985 template-parameter exactly, except that a template-argument
12986 deduced from an array bound may be of any integral type.
12987 The non-type parameter might use already deduced type parameters. */
12988 tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
12989 if (!TREE_TYPE (arg))
12990 /* Template-parameter dependent expression. Just accept it for now.
12991 It will later be processed in convert_template_argument. */
12993 else if (same_type_p (TREE_TYPE (arg), tparm))
12994 /* OK */;
12995 else if ((strict & UNIFY_ALLOW_INTEGER)
12996 && (TREE_CODE (tparm) == INTEGER_TYPE
12997 || TREE_CODE (tparm) == BOOLEAN_TYPE))
12998 /* Convert the ARG to the type of PARM; the deduced non-type
12999 template argument must exactly match the types of the
13000 corresponding parameter. */
13001 arg = fold (build_nop (TREE_TYPE (parm), arg));
13002 else if (uses_template_parms (tparm))
13003 /* We haven't deduced the type of this parameter yet. Try again
13004 later. */
13005 return 0;
13006 else
13007 return 1;
13009 /* If ARG is a parameter pack or an expansion, we cannot unify
13010 against it unless PARM is also a parameter pack. */
13011 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
13012 && !TEMPLATE_PARM_PARAMETER_PACK (parm))
13013 return 1;
13015 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
13016 return 0;
13018 case PTRMEM_CST:
13020 /* A pointer-to-member constant can be unified only with
13021 another constant. */
13022 if (TREE_CODE (arg) != PTRMEM_CST)
13023 return 1;
13025 /* Just unify the class member. It would be useless (and possibly
13026 wrong, depending on the strict flags) to unify also
13027 PTRMEM_CST_CLASS, because we want to be sure that both parm and
13028 arg refer to the same variable, even if through different
13029 classes. For instance:
13031 struct A { int x; };
13032 struct B : A { };
13034 Unification of &A::x and &B::x must succeed. */
13035 return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
13036 PTRMEM_CST_MEMBER (arg), strict);
13039 case POINTER_TYPE:
13041 if (TREE_CODE (arg) != POINTER_TYPE)
13042 return 1;
13044 /* [temp.deduct.call]
13046 A can be another pointer or pointer to member type that can
13047 be converted to the deduced A via a qualification
13048 conversion (_conv.qual_).
13050 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
13051 This will allow for additional cv-qualification of the
13052 pointed-to types if appropriate. */
13054 if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
13055 /* The derived-to-base conversion only persists through one
13056 level of pointers. */
13057 strict |= (strict_in & UNIFY_ALLOW_DERIVED);
13059 return unify (tparms, targs, TREE_TYPE (parm),
13060 TREE_TYPE (arg), strict);
13063 case REFERENCE_TYPE:
13064 if (TREE_CODE (arg) != REFERENCE_TYPE)
13065 return 1;
13066 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13067 strict & UNIFY_ALLOW_MORE_CV_QUAL);
13069 case ARRAY_TYPE:
13070 if (TREE_CODE (arg) != ARRAY_TYPE)
13071 return 1;
13072 if ((TYPE_DOMAIN (parm) == NULL_TREE)
13073 != (TYPE_DOMAIN (arg) == NULL_TREE))
13074 return 1;
13075 if (TYPE_DOMAIN (parm) != NULL_TREE)
13077 tree parm_max;
13078 tree arg_max;
13079 bool parm_cst;
13080 bool arg_cst;
13082 /* Our representation of array types uses "N - 1" as the
13083 TYPE_MAX_VALUE for an array with "N" elements, if "N" is
13084 not an integer constant. We cannot unify arbitrarily
13085 complex expressions, so we eliminate the MINUS_EXPRs
13086 here. */
13087 parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
13088 parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
13089 if (!parm_cst)
13091 gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
13092 parm_max = TREE_OPERAND (parm_max, 0);
13094 arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
13095 arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
13096 if (!arg_cst)
13098 /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
13099 trying to unify the type of a variable with the type
13100 of a template parameter. For example:
13102 template <unsigned int N>
13103 void f (char (&) [N]);
13104 int g();
13105 void h(int i) {
13106 char a[g(i)];
13107 f(a);
13110 Here, the type of the ARG will be "int [g(i)]", and
13111 may be a SAVE_EXPR, etc. */
13112 if (TREE_CODE (arg_max) != MINUS_EXPR)
13113 return 1;
13114 arg_max = TREE_OPERAND (arg_max, 0);
13117 /* If only one of the bounds used a MINUS_EXPR, compensate
13118 by adding one to the other bound. */
13119 if (parm_cst && !arg_cst)
13120 parm_max = fold_build2 (PLUS_EXPR,
13121 integer_type_node,
13122 parm_max,
13123 integer_one_node);
13124 else if (arg_cst && !parm_cst)
13125 arg_max = fold_build2 (PLUS_EXPR,
13126 integer_type_node,
13127 arg_max,
13128 integer_one_node);
13130 if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
13131 return 1;
13133 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13134 strict & UNIFY_ALLOW_MORE_CV_QUAL);
13136 case REAL_TYPE:
13137 case COMPLEX_TYPE:
13138 case VECTOR_TYPE:
13139 case INTEGER_TYPE:
13140 case BOOLEAN_TYPE:
13141 case ENUMERAL_TYPE:
13142 case VOID_TYPE:
13143 if (TREE_CODE (arg) != TREE_CODE (parm))
13144 return 1;
13146 /* We have already checked cv-qualification at the top of the
13147 function. */
13148 if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
13149 return 1;
13151 /* As far as unification is concerned, this wins. Later checks
13152 will invalidate it if necessary. */
13153 return 0;
13155 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
13156 /* Type INTEGER_CST can come from ordinary constant template args. */
13157 case INTEGER_CST:
13158 while (TREE_CODE (arg) == NOP_EXPR)
13159 arg = TREE_OPERAND (arg, 0);
13161 if (TREE_CODE (arg) != INTEGER_CST)
13162 return 1;
13163 return !tree_int_cst_equal (parm, arg);
13165 case TREE_VEC:
13167 int i;
13168 if (TREE_CODE (arg) != TREE_VEC)
13169 return 1;
13170 if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
13171 return 1;
13172 for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
13173 if (unify (tparms, targs,
13174 TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
13175 UNIFY_ALLOW_NONE))
13176 return 1;
13177 return 0;
13180 case RECORD_TYPE:
13181 case UNION_TYPE:
13182 if (TREE_CODE (arg) != TREE_CODE (parm))
13183 return 1;
13185 if (TYPE_PTRMEMFUNC_P (parm))
13187 if (!TYPE_PTRMEMFUNC_P (arg))
13188 return 1;
13190 return unify (tparms, targs,
13191 TYPE_PTRMEMFUNC_FN_TYPE (parm),
13192 TYPE_PTRMEMFUNC_FN_TYPE (arg),
13193 strict);
13196 if (CLASSTYPE_TEMPLATE_INFO (parm))
13198 tree t = NULL_TREE;
13200 if (strict_in & UNIFY_ALLOW_DERIVED)
13202 /* First, we try to unify the PARM and ARG directly. */
13203 t = try_class_unification (tparms, targs,
13204 parm, arg);
13206 if (!t)
13208 /* Fallback to the special case allowed in
13209 [temp.deduct.call]:
13211 If P is a class, and P has the form
13212 template-id, then A can be a derived class of
13213 the deduced A. Likewise, if P is a pointer to
13214 a class of the form template-id, A can be a
13215 pointer to a derived class pointed to by the
13216 deduced A. */
13217 t = get_template_base (tparms, targs, parm, arg);
13219 if (!t)
13220 return 1;
13223 else if (CLASSTYPE_TEMPLATE_INFO (arg)
13224 && (CLASSTYPE_TI_TEMPLATE (parm)
13225 == CLASSTYPE_TI_TEMPLATE (arg)))
13226 /* Perhaps PARM is something like S<U> and ARG is S<int>.
13227 Then, we should unify `int' and `U'. */
13228 t = arg;
13229 else
13230 /* There's no chance of unification succeeding. */
13231 return 1;
13233 return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
13234 CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
13236 else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
13237 return 1;
13238 return 0;
13240 case METHOD_TYPE:
13241 case FUNCTION_TYPE:
13242 if (TREE_CODE (arg) != TREE_CODE (parm))
13243 return 1;
13245 /* CV qualifications for methods can never be deduced, they must
13246 match exactly. We need to check them explicitly here,
13247 because type_unification_real treats them as any other
13248 cvqualified parameter. */
13249 if (TREE_CODE (parm) == METHOD_TYPE
13250 && (!check_cv_quals_for_unify
13251 (UNIFY_ALLOW_NONE,
13252 TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
13253 TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
13254 return 1;
13256 if (unify (tparms, targs, TREE_TYPE (parm),
13257 TREE_TYPE (arg), UNIFY_ALLOW_NONE))
13258 return 1;
13259 return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
13260 TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
13261 LOOKUP_NORMAL);
13263 case OFFSET_TYPE:
13264 /* Unify a pointer to member with a pointer to member function, which
13265 deduces the type of the member as a function type. */
13266 if (TYPE_PTRMEMFUNC_P (arg))
13268 tree method_type;
13269 tree fntype;
13270 cp_cv_quals cv_quals;
13272 /* Check top-level cv qualifiers */
13273 if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
13274 return 1;
13276 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
13277 TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
13278 return 1;
13280 /* Determine the type of the function we are unifying against. */
13281 method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
13282 fntype =
13283 build_function_type (TREE_TYPE (method_type),
13284 TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
13286 /* Extract the cv-qualifiers of the member function from the
13287 implicit object parameter and place them on the function
13288 type to be restored later. */
13289 cv_quals =
13290 cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
13291 fntype = build_qualified_type (fntype, cv_quals);
13292 return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
13295 if (TREE_CODE (arg) != OFFSET_TYPE)
13296 return 1;
13297 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
13298 TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
13299 return 1;
13300 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13301 strict);
13303 case CONST_DECL:
13304 if (DECL_TEMPLATE_PARM_P (parm))
13305 return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
13306 if (arg != integral_constant_value (parm))
13307 return 1;
13308 return 0;
13310 case FIELD_DECL:
13311 case TEMPLATE_DECL:
13312 /* Matched cases are handled by the ARG == PARM test above. */
13313 return 1;
13315 case TYPE_ARGUMENT_PACK:
13316 case NONTYPE_ARGUMENT_PACK:
13318 tree packed_parms = ARGUMENT_PACK_ARGS (parm);
13319 tree packed_args = ARGUMENT_PACK_ARGS (arg);
13320 int i, len = TREE_VEC_LENGTH (packed_parms);
13321 int argslen = TREE_VEC_LENGTH (packed_args);
13322 int parm_variadic_p = 0;
13324 for (i = 0; i < len; ++i)
13326 if (PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, i)))
13328 if (i == len - 1)
13329 /* We can unify against something with a trailing
13330 parameter pack. */
13331 parm_variadic_p = 1;
13332 else
13333 /* Since there is something following the pack
13334 expansion, we cannot unify this template argument
13335 list. */
13336 return 0;
13341 /* If we don't have enough arguments to satisfy the parameters
13342 (not counting the pack expression at the end), or we have
13343 too many arguments for a parameter list that doesn't end in
13344 a pack expression, we can't unify. */
13345 if (argslen < (len - parm_variadic_p)
13346 || (argslen > len && !parm_variadic_p))
13347 return 1;
13349 /* Unify all of the parameters that precede the (optional)
13350 pack expression. */
13351 for (i = 0; i < len - parm_variadic_p; ++i)
13353 if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
13354 TREE_VEC_ELT (packed_args, i), strict))
13355 return 1;
13358 if (parm_variadic_p)
13359 return unify_pack_expansion (tparms, targs,
13360 packed_parms, packed_args,
13361 strict, /*call_args_p=*/false,
13362 /*subr=*/false);
13363 return 0;
13366 break;
13368 case TYPEOF_TYPE:
13369 case DECLTYPE_TYPE:
13370 /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
13371 nodes. */
13372 return 0;
13374 case ERROR_MARK:
13375 /* Unification fails if we hit an error node. */
13376 return 1;
13378 default:
13379 gcc_assert (EXPR_P (parm));
13381 /* We must be looking at an expression. This can happen with
13382 something like:
13384 template <int I>
13385 void foo(S<I>, S<I + 2>);
13387 This is a "nondeduced context":
13389 [deduct.type]
13391 The nondeduced contexts are:
13393 --A type that is a template-id in which one or more of
13394 the template-arguments is an expression that references
13395 a template-parameter.
13397 In these cases, we assume deduction succeeded, but don't
13398 actually infer any unifications. */
13400 if (!uses_template_parms (parm)
13401 && !template_args_equal (parm, arg))
13402 return 1;
13403 else
13404 return 0;
13408 /* Note that DECL can be defined in this translation unit, if
13409 required. */
13411 static void
13412 mark_definable (tree decl)
13414 tree clone;
13415 DECL_NOT_REALLY_EXTERN (decl) = 1;
13416 FOR_EACH_CLONE (clone, decl)
13417 DECL_NOT_REALLY_EXTERN (clone) = 1;
13420 /* Called if RESULT is explicitly instantiated, or is a member of an
13421 explicitly instantiated class. */
13423 void
13424 mark_decl_instantiated (tree result, int extern_p)
13426 SET_DECL_EXPLICIT_INSTANTIATION (result);
13428 /* If this entity has already been written out, it's too late to
13429 make any modifications. */
13430 if (TREE_ASM_WRITTEN (result))
13431 return;
13433 if (TREE_CODE (result) != FUNCTION_DECL)
13434 /* The TREE_PUBLIC flag for function declarations will have been
13435 set correctly by tsubst. */
13436 TREE_PUBLIC (result) = 1;
13438 /* This might have been set by an earlier implicit instantiation. */
13439 DECL_COMDAT (result) = 0;
13441 if (extern_p)
13442 DECL_NOT_REALLY_EXTERN (result) = 0;
13443 else
13445 mark_definable (result);
13446 /* Always make artificials weak. */
13447 if (DECL_ARTIFICIAL (result) && flag_weak)
13448 comdat_linkage (result);
13449 /* For WIN32 we also want to put explicit instantiations in
13450 linkonce sections. */
13451 else if (TREE_PUBLIC (result))
13452 maybe_make_one_only (result);
13455 /* If EXTERN_P, then this function will not be emitted -- unless
13456 followed by an explicit instantiation, at which point its linkage
13457 will be adjusted. If !EXTERN_P, then this function will be
13458 emitted here. In neither circumstance do we want
13459 import_export_decl to adjust the linkage. */
13460 DECL_INTERFACE_KNOWN (result) = 1;
13463 /* Given two function templates PAT1 and PAT2, return:
13465 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
13466 -1 if PAT2 is more specialized than PAT1.
13467 0 if neither is more specialized.
13469 LEN indicates the number of parameters we should consider
13470 (defaulted parameters should not be considered).
13472 The 1998 std underspecified function template partial ordering, and
13473 DR214 addresses the issue. We take pairs of arguments, one from
13474 each of the templates, and deduce them against each other. One of
13475 the templates will be more specialized if all the *other*
13476 template's arguments deduce against its arguments and at least one
13477 of its arguments *does* *not* deduce against the other template's
13478 corresponding argument. Deduction is done as for class templates.
13479 The arguments used in deduction have reference and top level cv
13480 qualifiers removed. Iff both arguments were originally reference
13481 types *and* deduction succeeds in both directions, the template
13482 with the more cv-qualified argument wins for that pairing (if
13483 neither is more cv-qualified, they both are equal). Unlike regular
13484 deduction, after all the arguments have been deduced in this way,
13485 we do *not* verify the deduced template argument values can be
13486 substituted into non-deduced contexts, nor do we have to verify
13487 that all template arguments have been deduced. */
13490 more_specialized_fn (tree pat1, tree pat2, int len)
13492 tree decl1 = DECL_TEMPLATE_RESULT (pat1);
13493 tree decl2 = DECL_TEMPLATE_RESULT (pat2);
13494 tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
13495 tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
13496 tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
13497 tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
13498 tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
13499 tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
13500 int better1 = 0;
13501 int better2 = 0;
13503 /* Remove the this parameter from non-static member functions. If
13504 one is a non-static member function and the other is not a static
13505 member function, remove the first parameter from that function
13506 also. This situation occurs for operator functions where we
13507 locate both a member function (with this pointer) and non-member
13508 operator (with explicit first operand). */
13509 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
13511 len--; /* LEN is the number of significant arguments for DECL1 */
13512 args1 = TREE_CHAIN (args1);
13513 if (!DECL_STATIC_FUNCTION_P (decl2))
13514 args2 = TREE_CHAIN (args2);
13516 else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
13518 args2 = TREE_CHAIN (args2);
13519 if (!DECL_STATIC_FUNCTION_P (decl1))
13521 len--;
13522 args1 = TREE_CHAIN (args1);
13526 /* If only one is a conversion operator, they are unordered. */
13527 if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
13528 return 0;
13530 /* Consider the return type for a conversion function */
13531 if (DECL_CONV_FN_P (decl1))
13533 args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
13534 args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
13535 len++;
13538 processing_template_decl++;
13540 while (len--)
13542 tree arg1 = TREE_VALUE (args1);
13543 tree arg2 = TREE_VALUE (args2);
13544 int deduce1, deduce2;
13545 int quals1 = -1;
13546 int quals2 = -1;
13548 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13549 && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13551 /* When both arguments are pack expansions, we need only
13552 unify the patterns themselves. */
13553 arg1 = PACK_EXPANSION_PATTERN (arg1);
13554 arg2 = PACK_EXPANSION_PATTERN (arg2);
13556 /* This is the last comparison we need to do. */
13557 len = 0;
13560 if (TREE_CODE (arg1) == REFERENCE_TYPE)
13562 arg1 = TREE_TYPE (arg1);
13563 quals1 = cp_type_quals (arg1);
13566 if (TREE_CODE (arg2) == REFERENCE_TYPE)
13568 arg2 = TREE_TYPE (arg2);
13569 quals2 = cp_type_quals (arg2);
13572 if ((quals1 < 0) != (quals2 < 0))
13574 /* Only of the args is a reference, see if we should apply
13575 array/function pointer decay to it. This is not part of
13576 DR214, but is, IMHO, consistent with the deduction rules
13577 for the function call itself, and with our earlier
13578 implementation of the underspecified partial ordering
13579 rules. (nathan). */
13580 if (quals1 >= 0)
13582 switch (TREE_CODE (arg1))
13584 case ARRAY_TYPE:
13585 arg1 = TREE_TYPE (arg1);
13586 /* FALLTHROUGH. */
13587 case FUNCTION_TYPE:
13588 arg1 = build_pointer_type (arg1);
13589 break;
13591 default:
13592 break;
13595 else
13597 switch (TREE_CODE (arg2))
13599 case ARRAY_TYPE:
13600 arg2 = TREE_TYPE (arg2);
13601 /* FALLTHROUGH. */
13602 case FUNCTION_TYPE:
13603 arg2 = build_pointer_type (arg2);
13604 break;
13606 default:
13607 break;
13612 arg1 = TYPE_MAIN_VARIANT (arg1);
13613 arg2 = TYPE_MAIN_VARIANT (arg2);
13615 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
13617 int i, len2 = list_length (args2);
13618 tree parmvec = make_tree_vec (1);
13619 tree argvec = make_tree_vec (len2);
13620 tree ta = args2;
13622 /* Setup the parameter vector, which contains only ARG1. */
13623 TREE_VEC_ELT (parmvec, 0) = arg1;
13625 /* Setup the argument vector, which contains the remaining
13626 arguments. */
13627 for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
13628 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13630 deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec,
13631 argvec, UNIFY_ALLOW_NONE,
13632 /*call_args_p=*/false,
13633 /*subr=*/0);
13635 /* We cannot deduce in the other direction, because ARG1 is
13636 a pack expansion but ARG2 is not. */
13637 deduce2 = 0;
13639 else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13641 int i, len1 = list_length (args1);
13642 tree parmvec = make_tree_vec (1);
13643 tree argvec = make_tree_vec (len1);
13644 tree ta = args1;
13646 /* Setup the parameter vector, which contains only ARG1. */
13647 TREE_VEC_ELT (parmvec, 0) = arg2;
13649 /* Setup the argument vector, which contains the remaining
13650 arguments. */
13651 for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
13652 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13654 deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec,
13655 argvec, UNIFY_ALLOW_NONE,
13656 /*call_args_p=*/false,
13657 /*subr=*/0);
13659 /* We cannot deduce in the other direction, because ARG2 is
13660 a pack expansion but ARG1 is not.*/
13661 deduce1 = 0;
13664 else
13666 /* The normal case, where neither argument is a pack
13667 expansion. */
13668 deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
13669 deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
13672 if (!deduce1)
13673 better2 = -1;
13674 if (!deduce2)
13675 better1 = -1;
13676 if (better1 < 0 && better2 < 0)
13677 /* We've failed to deduce something in either direction.
13678 These must be unordered. */
13679 break;
13681 if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
13683 /* Deduces in both directions, see if quals can
13684 disambiguate. Pretend the worse one failed to deduce. */
13685 if ((quals1 & quals2) == quals2)
13686 deduce1 = 0;
13687 if ((quals1 & quals2) == quals1)
13688 deduce2 = 0;
13690 if (deduce1 && !deduce2 && !better2)
13691 better2 = 1;
13692 if (deduce2 && !deduce1 && !better1)
13693 better1 = 1;
13695 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13696 || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13697 /* We have already processed all of the arguments in our
13698 handing of the pack expansion type. */
13699 len = 0;
13701 args1 = TREE_CHAIN (args1);
13702 args2 = TREE_CHAIN (args2);
13704 /* Stop when an ellipsis is seen. */
13705 if (args1 == NULL_TREE || args2 == NULL_TREE)
13706 break;
13709 processing_template_decl--;
13711 /* All things being equal, if the next argument is a pack expansion
13712 for one function but not for the other, prefer the
13713 non-variadic function. */
13714 if ((better1 > 0) - (better2 > 0) == 0
13715 && args1 && TREE_VALUE (args1)
13716 && args2 && TREE_VALUE (args2))
13718 if (TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION)
13719 return TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION ? 0 : -1;
13720 else if (TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION)
13721 return 1;
13724 return (better1 > 0) - (better2 > 0);
13727 /* Determine which of two partial specializations is more specialized.
13729 PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
13730 to the first partial specialization. The TREE_VALUE is the
13731 innermost set of template parameters for the partial
13732 specialization. PAT2 is similar, but for the second template.
13734 Return 1 if the first partial specialization is more specialized;
13735 -1 if the second is more specialized; 0 if neither is more
13736 specialized.
13738 See [temp.class.order] for information about determining which of
13739 two templates is more specialized. */
13741 static int
13742 more_specialized_class (tree pat1, tree pat2)
13744 tree targs;
13745 tree tmpl1, tmpl2;
13746 int winner = 0;
13747 bool any_deductions = false;
13749 tmpl1 = TREE_TYPE (pat1);
13750 tmpl2 = TREE_TYPE (pat2);
13752 /* Just like what happens for functions, if we are ordering between
13753 different class template specializations, we may encounter dependent
13754 types in the arguments, and we need our dependency check functions
13755 to behave correctly. */
13756 ++processing_template_decl;
13757 targs = get_class_bindings (TREE_VALUE (pat1),
13758 CLASSTYPE_TI_ARGS (tmpl1),
13759 CLASSTYPE_TI_ARGS (tmpl2));
13760 if (targs)
13762 --winner;
13763 any_deductions = true;
13766 targs = get_class_bindings (TREE_VALUE (pat2),
13767 CLASSTYPE_TI_ARGS (tmpl2),
13768 CLASSTYPE_TI_ARGS (tmpl1));
13769 if (targs)
13771 ++winner;
13772 any_deductions = true;
13774 --processing_template_decl;
13776 /* In the case of a tie where at least one of the class templates
13777 has a parameter pack at the end, the template with the most
13778 non-packed parameters wins. */
13779 if (winner == 0
13780 && any_deductions
13781 && (template_args_variadic_p (TREE_PURPOSE (pat1))
13782 || template_args_variadic_p (TREE_PURPOSE (pat2))))
13784 tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
13785 tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
13786 int len1 = TREE_VEC_LENGTH (args1);
13787 int len2 = TREE_VEC_LENGTH (args2);
13789 /* We don't count the pack expansion at the end. */
13790 if (template_args_variadic_p (TREE_PURPOSE (pat1)))
13791 --len1;
13792 if (template_args_variadic_p (TREE_PURPOSE (pat2)))
13793 --len2;
13795 if (len1 > len2)
13796 return 1;
13797 else if (len1 < len2)
13798 return -1;
13801 return winner;
13804 /* Return the template arguments that will produce the function signature
13805 DECL from the function template FN, with the explicit template
13806 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is true, the return type must
13807 also match. Return NULL_TREE if no satisfactory arguments could be
13808 found. */
13810 static tree
13811 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
13813 int ntparms = DECL_NTPARMS (fn);
13814 tree targs = make_tree_vec (ntparms);
13815 tree decl_type;
13816 tree decl_arg_types;
13818 /* Substitute the explicit template arguments into the type of DECL.
13819 The call to fn_type_unification will handle substitution into the
13820 FN. */
13821 decl_type = TREE_TYPE (decl);
13822 if (explicit_args && uses_template_parms (decl_type))
13824 tree tmpl;
13825 tree converted_args;
13827 if (DECL_TEMPLATE_INFO (decl))
13828 tmpl = DECL_TI_TEMPLATE (decl);
13829 else
13830 /* We can get here for some invalid specializations. */
13831 return NULL_TREE;
13833 converted_args
13834 = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
13835 explicit_args, NULL_TREE,
13836 tf_none,
13837 /*require_all_args=*/false,
13838 /*use_default_args=*/false);
13839 if (converted_args == error_mark_node)
13840 return NULL_TREE;
13842 decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
13843 if (decl_type == error_mark_node)
13844 return NULL_TREE;
13847 /* Never do unification on the 'this' parameter. */
13848 decl_arg_types = skip_artificial_parms_for (decl,
13849 TYPE_ARG_TYPES (decl_type));
13851 if (fn_type_unification (fn, explicit_args, targs,
13852 decl_arg_types,
13853 (check_rettype || DECL_CONV_FN_P (fn)
13854 ? TREE_TYPE (decl_type) : NULL_TREE),
13855 DEDUCE_EXACT, LOOKUP_NORMAL))
13856 return NULL_TREE;
13858 return targs;
13861 /* Return the innermost template arguments that, when applied to a
13862 template specialization whose innermost template parameters are
13863 TPARMS, and whose specialization arguments are PARMS, yield the
13864 ARGS.
13866 For example, suppose we have:
13868 template <class T, class U> struct S {};
13869 template <class T> struct S<T*, int> {};
13871 Then, suppose we want to get `S<double*, int>'. The TPARMS will be
13872 {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
13873 int}. The resulting vector will be {double}, indicating that `T'
13874 is bound to `double'. */
13876 static tree
13877 get_class_bindings (tree tparms, tree spec_args, tree args)
13879 int i, ntparms = TREE_VEC_LENGTH (tparms);
13880 tree deduced_args;
13881 tree innermost_deduced_args;
13883 innermost_deduced_args = make_tree_vec (ntparms);
13884 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
13886 deduced_args = copy_node (args);
13887 SET_TMPL_ARGS_LEVEL (deduced_args,
13888 TMPL_ARGS_DEPTH (deduced_args),
13889 innermost_deduced_args);
13891 else
13892 deduced_args = innermost_deduced_args;
13894 if (unify (tparms, deduced_args,
13895 INNERMOST_TEMPLATE_ARGS (spec_args),
13896 INNERMOST_TEMPLATE_ARGS (args),
13897 UNIFY_ALLOW_NONE))
13898 return NULL_TREE;
13900 for (i = 0; i < ntparms; ++i)
13901 if (! TREE_VEC_ELT (innermost_deduced_args, i))
13902 return NULL_TREE;
13904 /* Verify that nondeduced template arguments agree with the type
13905 obtained from argument deduction.
13907 For example:
13909 struct A { typedef int X; };
13910 template <class T, class U> struct C {};
13911 template <class T> struct C<T, typename T::X> {};
13913 Then with the instantiation `C<A, int>', we can deduce that
13914 `T' is `A' but unify () does not check whether `typename T::X'
13915 is `int'. */
13916 spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
13917 if (spec_args == error_mark_node
13918 /* We only need to check the innermost arguments; the other
13919 arguments will always agree. */
13920 || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
13921 INNERMOST_TEMPLATE_ARGS (args)))
13922 return NULL_TREE;
13924 /* Now that we have bindings for all of the template arguments,
13925 ensure that the arguments deduced for the template template
13926 parameters have compatible template parameter lists. See the use
13927 of template_template_parm_bindings_ok_p in fn_type_unification
13928 for more information. */
13929 if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
13930 return NULL_TREE;
13932 return deduced_args;
13935 /* TEMPLATES is a TREE_LIST. Each TREE_VALUE is a TEMPLATE_DECL.
13936 Return the TREE_LIST node with the most specialized template, if
13937 any. If there is no most specialized template, the error_mark_node
13938 is returned.
13940 Note that this function does not look at, or modify, the
13941 TREE_PURPOSE or TREE_TYPE of any of the nodes. Since the node
13942 returned is one of the elements of INSTANTIATIONS, callers may
13943 store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
13944 and retrieve it from the value returned. */
13946 tree
13947 most_specialized_instantiation (tree templates)
13949 tree fn, champ;
13951 ++processing_template_decl;
13953 champ = templates;
13954 for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
13956 int fate = 0;
13958 if (get_bindings (TREE_VALUE (champ),
13959 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
13960 NULL_TREE, /*check_ret=*/false))
13961 fate--;
13963 if (get_bindings (TREE_VALUE (fn),
13964 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
13965 NULL_TREE, /*check_ret=*/false))
13966 fate++;
13968 if (fate == -1)
13969 champ = fn;
13970 else if (!fate)
13972 /* Equally specialized, move to next function. If there
13973 is no next function, nothing's most specialized. */
13974 fn = TREE_CHAIN (fn);
13975 champ = fn;
13976 if (!fn)
13977 break;
13981 if (champ)
13982 /* Now verify that champ is better than everything earlier in the
13983 instantiation list. */
13984 for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
13985 if (get_bindings (TREE_VALUE (champ),
13986 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
13987 NULL_TREE, /*check_ret=*/false)
13988 || !get_bindings (TREE_VALUE (fn),
13989 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
13990 NULL_TREE, /*check_ret=*/false))
13992 champ = NULL_TREE;
13993 break;
13996 processing_template_decl--;
13998 if (!champ)
13999 return error_mark_node;
14001 return champ;
14004 /* If DECL is a specialization of some template, return the most
14005 general such template. Otherwise, returns NULL_TREE.
14007 For example, given:
14009 template <class T> struct S { template <class U> void f(U); };
14011 if TMPL is `template <class U> void S<int>::f(U)' this will return
14012 the full template. This function will not trace past partial
14013 specializations, however. For example, given in addition:
14015 template <class T> struct S<T*> { template <class U> void f(U); };
14017 if TMPL is `template <class U> void S<int*>::f(U)' this will return
14018 `template <class T> template <class U> S<T*>::f(U)'. */
14020 tree
14021 most_general_template (tree decl)
14023 /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
14024 an immediate specialization. */
14025 if (TREE_CODE (decl) == FUNCTION_DECL)
14027 if (DECL_TEMPLATE_INFO (decl)) {
14028 decl = DECL_TI_TEMPLATE (decl);
14030 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
14031 template friend. */
14032 if (TREE_CODE (decl) != TEMPLATE_DECL)
14033 return NULL_TREE;
14034 } else
14035 return NULL_TREE;
14038 /* Look for more and more general templates. */
14039 while (DECL_TEMPLATE_INFO (decl))
14041 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
14042 (See cp-tree.h for details.) */
14043 if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
14044 break;
14046 if (CLASS_TYPE_P (TREE_TYPE (decl))
14047 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
14048 break;
14050 /* Stop if we run into an explicitly specialized class template. */
14051 if (!DECL_NAMESPACE_SCOPE_P (decl)
14052 && DECL_CONTEXT (decl)
14053 && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
14054 break;
14056 decl = DECL_TI_TEMPLATE (decl);
14059 return decl;
14062 /* Return the most specialized of the class template partial
14063 specializations of TMPL which can produce TYPE, a specialization of
14064 TMPL. The value returned is actually a TREE_LIST; the TREE_TYPE is
14065 a _TYPE node corresponding to the partial specialization, while the
14066 TREE_PURPOSE is the set of template arguments that must be
14067 substituted into the TREE_TYPE in order to generate TYPE.
14069 If the choice of partial specialization is ambiguous, a diagnostic
14070 is issued, and the error_mark_node is returned. If there are no
14071 partial specializations of TMPL matching TYPE, then NULL_TREE is
14072 returned. */
14074 static tree
14075 most_specialized_class (tree type, tree tmpl)
14077 tree list = NULL_TREE;
14078 tree t;
14079 tree champ;
14080 int fate;
14081 bool ambiguous_p;
14082 tree args;
14083 tree outer_args = NULL_TREE;
14085 tmpl = most_general_template (tmpl);
14086 args = CLASSTYPE_TI_ARGS (type);
14088 /* For determining which partial specialization to use, only the
14089 innermost args are interesting. */
14090 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
14092 outer_args = strip_innermost_template_args (args, 1);
14093 args = INNERMOST_TEMPLATE_ARGS (args);
14096 for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
14098 tree partial_spec_args;
14099 tree spec_args;
14100 tree parms = TREE_VALUE (t);
14102 partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
14103 if (outer_args)
14105 int i;
14107 ++processing_template_decl;
14109 /* Discard the outer levels of args, and then substitute in the
14110 template args from the enclosing class. */
14111 partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
14112 partial_spec_args = tsubst_template_args
14113 (partial_spec_args, outer_args, tf_none, NULL_TREE);
14115 /* PARMS already refers to just the innermost parms, but the
14116 template parms in partial_spec_args had their levels lowered
14117 by tsubst, so we need to do the same for the parm list. We
14118 can't just tsubst the TREE_VEC itself, as tsubst wants to
14119 treat a TREE_VEC as an argument vector. */
14120 parms = copy_node (parms);
14121 for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
14122 TREE_VEC_ELT (parms, i) =
14123 tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
14125 --processing_template_decl;
14127 spec_args = get_class_bindings (parms,
14128 partial_spec_args,
14129 args);
14130 if (spec_args)
14132 if (outer_args)
14133 spec_args = add_to_template_args (outer_args, spec_args);
14134 list = tree_cons (spec_args, TREE_VALUE (t), list);
14135 TREE_TYPE (list) = TREE_TYPE (t);
14139 if (! list)
14140 return NULL_TREE;
14142 ambiguous_p = false;
14143 t = list;
14144 champ = t;
14145 t = TREE_CHAIN (t);
14146 for (; t; t = TREE_CHAIN (t))
14148 fate = more_specialized_class (champ, t);
14149 if (fate == 1)
14151 else
14153 if (fate == 0)
14155 t = TREE_CHAIN (t);
14156 if (! t)
14158 ambiguous_p = true;
14159 break;
14162 champ = t;
14166 if (!ambiguous_p)
14167 for (t = list; t && t != champ; t = TREE_CHAIN (t))
14169 fate = more_specialized_class (champ, t);
14170 if (fate != 1)
14172 ambiguous_p = true;
14173 break;
14177 if (ambiguous_p)
14179 const char *str = "candidates are:";
14180 error ("ambiguous class template instantiation for %q#T", type);
14181 for (t = list; t; t = TREE_CHAIN (t))
14183 error ("%s %+#T", str, TREE_TYPE (t));
14184 str = " ";
14186 return error_mark_node;
14189 return champ;
14192 /* Explicitly instantiate DECL. */
14194 void
14195 do_decl_instantiation (tree decl, tree storage)
14197 tree result = NULL_TREE;
14198 int extern_p = 0;
14200 if (!decl || decl == error_mark_node)
14201 /* An error occurred, for which grokdeclarator has already issued
14202 an appropriate message. */
14203 return;
14204 else if (! DECL_LANG_SPECIFIC (decl))
14206 error ("explicit instantiation of non-template %q#D", decl);
14207 return;
14209 else if (TREE_CODE (decl) == VAR_DECL)
14211 /* There is an asymmetry here in the way VAR_DECLs and
14212 FUNCTION_DECLs are handled by grokdeclarator. In the case of
14213 the latter, the DECL we get back will be marked as a
14214 template instantiation, and the appropriate
14215 DECL_TEMPLATE_INFO will be set up. This does not happen for
14216 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
14217 should handle VAR_DECLs as it currently handles
14218 FUNCTION_DECLs. */
14219 if (!DECL_CLASS_SCOPE_P (decl))
14221 error ("%qD is not a static data member of a class template", decl);
14222 return;
14224 result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
14225 if (!result || TREE_CODE (result) != VAR_DECL)
14227 error ("no matching template for %qD found", decl);
14228 return;
14230 if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
14232 error ("type %qT for explicit instantiation %qD does not match "
14233 "declared type %qT", TREE_TYPE (result), decl,
14234 TREE_TYPE (decl));
14235 return;
14238 else if (TREE_CODE (decl) != FUNCTION_DECL)
14240 error ("explicit instantiation of %q#D", decl);
14241 return;
14243 else
14244 result = decl;
14246 /* Check for various error cases. Note that if the explicit
14247 instantiation is valid the RESULT will currently be marked as an
14248 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
14249 until we get here. */
14251 if (DECL_TEMPLATE_SPECIALIZATION (result))
14253 /* DR 259 [temp.spec].
14255 Both an explicit instantiation and a declaration of an explicit
14256 specialization shall not appear in a program unless the explicit
14257 instantiation follows a declaration of the explicit specialization.
14259 For a given set of template parameters, if an explicit
14260 instantiation of a template appears after a declaration of an
14261 explicit specialization for that template, the explicit
14262 instantiation has no effect. */
14263 return;
14265 else if (DECL_EXPLICIT_INSTANTIATION (result))
14267 /* [temp.spec]
14269 No program shall explicitly instantiate any template more
14270 than once.
14272 We check DECL_NOT_REALLY_EXTERN so as not to complain when
14273 the first instantiation was `extern' and the second is not,
14274 and EXTERN_P for the opposite case. */
14275 if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
14276 pedwarn ("duplicate explicit instantiation of %q#D", result);
14277 /* If an "extern" explicit instantiation follows an ordinary
14278 explicit instantiation, the template is instantiated. */
14279 if (extern_p)
14280 return;
14282 else if (!DECL_IMPLICIT_INSTANTIATION (result))
14284 error ("no matching template for %qD found", result);
14285 return;
14287 else if (!DECL_TEMPLATE_INFO (result))
14289 pedwarn ("explicit instantiation of non-template %q#D", result);
14290 return;
14293 if (storage == NULL_TREE)
14295 else if (storage == ridpointers[(int) RID_EXTERN])
14297 if (pedantic && !in_system_header)
14298 pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
14299 "instantiations");
14300 extern_p = 1;
14302 else
14303 error ("storage class %qD applied to template instantiation", storage);
14305 check_explicit_instantiation_namespace (result);
14306 mark_decl_instantiated (result, extern_p);
14307 if (! extern_p)
14308 instantiate_decl (result, /*defer_ok=*/1,
14309 /*expl_inst_class_mem_p=*/false);
14312 static void
14313 mark_class_instantiated (tree t, int extern_p)
14315 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
14316 SET_CLASSTYPE_INTERFACE_KNOWN (t);
14317 CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
14318 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
14319 if (! extern_p)
14321 CLASSTYPE_DEBUG_REQUESTED (t) = 1;
14322 rest_of_type_compilation (t, 1);
14326 /* Called from do_type_instantiation through binding_table_foreach to
14327 do recursive instantiation for the type bound in ENTRY. */
14328 static void
14329 bt_instantiate_type_proc (binding_entry entry, void *data)
14331 tree storage = *(tree *) data;
14333 if (IS_AGGR_TYPE (entry->type)
14334 && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
14335 do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
14338 /* Called from do_type_instantiation to instantiate a member
14339 (a member function or a static member variable) of an
14340 explicitly instantiated class template. */
14341 static void
14342 instantiate_class_member (tree decl, int extern_p)
14344 mark_decl_instantiated (decl, extern_p);
14345 if (! extern_p)
14346 instantiate_decl (decl, /*defer_ok=*/1,
14347 /*expl_inst_class_mem_p=*/true);
14350 /* Perform an explicit instantiation of template class T. STORAGE, if
14351 non-null, is the RID for extern, inline or static. COMPLAIN is
14352 nonzero if this is called from the parser, zero if called recursively,
14353 since the standard is unclear (as detailed below). */
14355 void
14356 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
14358 int extern_p = 0;
14359 int nomem_p = 0;
14360 int static_p = 0;
14361 int previous_instantiation_extern_p = 0;
14363 if (TREE_CODE (t) == TYPE_DECL)
14364 t = TREE_TYPE (t);
14366 if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
14368 error ("explicit instantiation of non-template type %qT", t);
14369 return;
14372 complete_type (t);
14374 if (!COMPLETE_TYPE_P (t))
14376 if (complain & tf_error)
14377 error ("explicit instantiation of %q#T before definition of template",
14379 return;
14382 if (storage != NULL_TREE)
14384 if (pedantic && !in_system_header)
14385 pedwarn("ISO C++ forbids the use of %qE on explicit instantiations",
14386 storage);
14388 if (storage == ridpointers[(int) RID_INLINE])
14389 nomem_p = 1;
14390 else if (storage == ridpointers[(int) RID_EXTERN])
14391 extern_p = 1;
14392 else if (storage == ridpointers[(int) RID_STATIC])
14393 static_p = 1;
14394 else
14396 error ("storage class %qD applied to template instantiation",
14397 storage);
14398 extern_p = 0;
14402 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
14404 /* DR 259 [temp.spec].
14406 Both an explicit instantiation and a declaration of an explicit
14407 specialization shall not appear in a program unless the explicit
14408 instantiation follows a declaration of the explicit specialization.
14410 For a given set of template parameters, if an explicit
14411 instantiation of a template appears after a declaration of an
14412 explicit specialization for that template, the explicit
14413 instantiation has no effect. */
14414 return;
14416 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
14418 /* [temp.spec]
14420 No program shall explicitly instantiate any template more
14421 than once.
14423 If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
14424 instantiation was `extern'. If EXTERN_P then the second is.
14425 These cases are OK. */
14426 previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
14428 if (!previous_instantiation_extern_p && !extern_p
14429 && (complain & tf_error))
14430 pedwarn ("duplicate explicit instantiation of %q#T", t);
14432 /* If we've already instantiated the template, just return now. */
14433 if (!CLASSTYPE_INTERFACE_ONLY (t))
14434 return;
14437 check_explicit_instantiation_namespace (TYPE_NAME (t));
14438 mark_class_instantiated (t, extern_p);
14440 if (nomem_p)
14441 return;
14444 tree tmp;
14446 /* In contrast to implicit instantiation, where only the
14447 declarations, and not the definitions, of members are
14448 instantiated, we have here:
14450 [temp.explicit]
14452 The explicit instantiation of a class template specialization
14453 implies the instantiation of all of its members not
14454 previously explicitly specialized in the translation unit
14455 containing the explicit instantiation.
14457 Of course, we can't instantiate member template classes, since
14458 we don't have any arguments for them. Note that the standard
14459 is unclear on whether the instantiation of the members are
14460 *explicit* instantiations or not. However, the most natural
14461 interpretation is that it should be an explicit instantiation. */
14463 if (! static_p)
14464 for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
14465 if (TREE_CODE (tmp) == FUNCTION_DECL
14466 && DECL_TEMPLATE_INSTANTIATION (tmp))
14467 instantiate_class_member (tmp, extern_p);
14469 for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
14470 if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
14471 instantiate_class_member (tmp, extern_p);
14473 if (CLASSTYPE_NESTED_UTDS (t))
14474 binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
14475 bt_instantiate_type_proc, &storage);
14479 /* Given a function DECL, which is a specialization of TMPL, modify
14480 DECL to be a re-instantiation of TMPL with the same template
14481 arguments. TMPL should be the template into which tsubst'ing
14482 should occur for DECL, not the most general template.
14484 One reason for doing this is a scenario like this:
14486 template <class T>
14487 void f(const T&, int i);
14489 void g() { f(3, 7); }
14491 template <class T>
14492 void f(const T& t, const int i) { }
14494 Note that when the template is first instantiated, with
14495 instantiate_template, the resulting DECL will have no name for the
14496 first parameter, and the wrong type for the second. So, when we go
14497 to instantiate the DECL, we regenerate it. */
14499 static void
14500 regenerate_decl_from_template (tree decl, tree tmpl)
14502 /* The arguments used to instantiate DECL, from the most general
14503 template. */
14504 tree args;
14505 tree code_pattern;
14507 args = DECL_TI_ARGS (decl);
14508 code_pattern = DECL_TEMPLATE_RESULT (tmpl);
14510 /* Make sure that we can see identifiers, and compute access
14511 correctly. */
14512 push_access_scope (decl);
14514 if (TREE_CODE (decl) == FUNCTION_DECL)
14516 tree decl_parm;
14517 tree pattern_parm;
14518 tree specs;
14519 int args_depth;
14520 int parms_depth;
14522 args_depth = TMPL_ARGS_DEPTH (args);
14523 parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
14524 if (args_depth > parms_depth)
14525 args = get_innermost_template_args (args, parms_depth);
14527 specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
14528 args, tf_error, NULL_TREE);
14529 if (specs)
14530 TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
14531 specs);
14533 /* Merge parameter declarations. */
14534 decl_parm = skip_artificial_parms_for (decl,
14535 DECL_ARGUMENTS (decl));
14536 pattern_parm
14537 = skip_artificial_parms_for (code_pattern,
14538 DECL_ARGUMENTS (code_pattern));
14539 while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
14541 tree parm_type;
14542 tree attributes;
14544 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14545 DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
14546 parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
14547 NULL_TREE);
14548 parm_type = type_decays_to (parm_type);
14549 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14550 TREE_TYPE (decl_parm) = parm_type;
14551 attributes = DECL_ATTRIBUTES (pattern_parm);
14552 if (DECL_ATTRIBUTES (decl_parm) != attributes)
14554 DECL_ATTRIBUTES (decl_parm) = attributes;
14555 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14557 decl_parm = TREE_CHAIN (decl_parm);
14558 pattern_parm = TREE_CHAIN (pattern_parm);
14560 /* Merge any parameters that match with the function parameter
14561 pack. */
14562 if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
14564 int i, len;
14565 tree expanded_types;
14566 /* Expand the TYPE_PACK_EXPANSION that provides the types for
14567 the parameters in this function parameter pack. */
14568 expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm),
14569 args, tf_error, NULL_TREE);
14570 len = TREE_VEC_LENGTH (expanded_types);
14571 for (i = 0; i < len; i++)
14573 tree parm_type;
14574 tree attributes;
14576 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14577 /* Rename the parameter to include the index. */
14578 DECL_NAME (decl_parm) =
14579 make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
14580 parm_type = TREE_VEC_ELT (expanded_types, i);
14581 parm_type = type_decays_to (parm_type);
14582 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14583 TREE_TYPE (decl_parm) = parm_type;
14584 attributes = DECL_ATTRIBUTES (pattern_parm);
14585 if (DECL_ATTRIBUTES (decl_parm) != attributes)
14587 DECL_ATTRIBUTES (decl_parm) = attributes;
14588 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14590 decl_parm = TREE_CHAIN (decl_parm);
14593 /* Merge additional specifiers from the CODE_PATTERN. */
14594 if (DECL_DECLARED_INLINE_P (code_pattern)
14595 && !DECL_DECLARED_INLINE_P (decl))
14596 DECL_DECLARED_INLINE_P (decl) = 1;
14597 if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
14598 DECL_INLINE (decl) = 1;
14600 else if (TREE_CODE (decl) == VAR_DECL)
14601 DECL_INITIAL (decl) =
14602 tsubst_expr (DECL_INITIAL (code_pattern), args,
14603 tf_error, DECL_TI_TEMPLATE (decl),
14604 /*integral_constant_expression_p=*/false);
14605 else
14606 gcc_unreachable ();
14608 pop_access_scope (decl);
14611 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
14612 substituted to get DECL. */
14614 tree
14615 template_for_substitution (tree decl)
14617 tree tmpl = DECL_TI_TEMPLATE (decl);
14619 /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
14620 for the instantiation. This is not always the most general
14621 template. Consider, for example:
14623 template <class T>
14624 struct S { template <class U> void f();
14625 template <> void f<int>(); };
14627 and an instantiation of S<double>::f<int>. We want TD to be the
14628 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
14629 while (/* An instantiation cannot have a definition, so we need a
14630 more general template. */
14631 DECL_TEMPLATE_INSTANTIATION (tmpl)
14632 /* We must also deal with friend templates. Given:
14634 template <class T> struct S {
14635 template <class U> friend void f() {};
14638 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
14639 so far as the language is concerned, but that's still
14640 where we get the pattern for the instantiation from. On
14641 other hand, if the definition comes outside the class, say:
14643 template <class T> struct S {
14644 template <class U> friend void f();
14646 template <class U> friend void f() {}
14648 we don't need to look any further. That's what the check for
14649 DECL_INITIAL is for. */
14650 || (TREE_CODE (decl) == FUNCTION_DECL
14651 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
14652 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
14654 /* The present template, TD, should not be a definition. If it
14655 were a definition, we should be using it! Note that we
14656 cannot restructure the loop to just keep going until we find
14657 a template with a definition, since that might go too far if
14658 a specialization was declared, but not defined. */
14659 gcc_assert (TREE_CODE (decl) != VAR_DECL
14660 || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
14662 /* Fetch the more general template. */
14663 tmpl = DECL_TI_TEMPLATE (tmpl);
14666 return tmpl;
14669 /* Produce the definition of D, a _DECL generated from a template. If
14670 DEFER_OK is nonzero, then we don't have to actually do the
14671 instantiation now; we just have to do it sometime. Normally it is
14672 an error if this is an explicit instantiation but D is undefined.
14673 EXPL_INST_CLASS_MEM_P is true iff D is a member of an
14674 explicitly instantiated class template. */
14676 tree
14677 instantiate_decl (tree d, int defer_ok,
14678 bool expl_inst_class_mem_p)
14680 tree tmpl = DECL_TI_TEMPLATE (d);
14681 tree gen_args;
14682 tree args;
14683 tree td;
14684 tree code_pattern;
14685 tree spec;
14686 tree gen_tmpl;
14687 bool pattern_defined;
14688 int need_push;
14689 location_t saved_loc = input_location;
14690 int saved_in_system_header = in_system_header;
14691 bool external_p;
14693 /* This function should only be used to instantiate templates for
14694 functions and static member variables. */
14695 gcc_assert (TREE_CODE (d) == FUNCTION_DECL
14696 || TREE_CODE (d) == VAR_DECL);
14698 /* Variables are never deferred; if instantiation is required, they
14699 are instantiated right away. That allows for better code in the
14700 case that an expression refers to the value of the variable --
14701 if the variable has a constant value the referring expression can
14702 take advantage of that fact. */
14703 if (TREE_CODE (d) == VAR_DECL)
14704 defer_ok = 0;
14706 /* Don't instantiate cloned functions. Instead, instantiate the
14707 functions they cloned. */
14708 if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
14709 d = DECL_CLONED_FUNCTION (d);
14711 if (DECL_TEMPLATE_INSTANTIATED (d))
14712 /* D has already been instantiated. It might seem reasonable to
14713 check whether or not D is an explicit instantiation, and, if so,
14714 stop here. But when an explicit instantiation is deferred
14715 until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
14716 is set, even though we still need to do the instantiation. */
14717 return d;
14719 /* If we already have a specialization of this declaration, then
14720 there's no reason to instantiate it. Note that
14721 retrieve_specialization gives us both instantiations and
14722 specializations, so we must explicitly check
14723 DECL_TEMPLATE_SPECIALIZATION. */
14724 gen_tmpl = most_general_template (tmpl);
14725 gen_args = DECL_TI_ARGS (d);
14726 spec = retrieve_specialization (gen_tmpl, gen_args,
14727 /*class_specializations_p=*/false);
14728 if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
14729 return spec;
14731 /* This needs to happen before any tsubsting. */
14732 if (! push_tinst_level (d))
14733 return d;
14735 timevar_push (TV_PARSE);
14737 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
14738 for the instantiation. */
14739 td = template_for_substitution (d);
14740 code_pattern = DECL_TEMPLATE_RESULT (td);
14742 /* We should never be trying to instantiate a member of a class
14743 template or partial specialization. */
14744 gcc_assert (d != code_pattern);
14746 if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
14747 || DECL_TEMPLATE_SPECIALIZATION (td))
14748 /* In the case of a friend template whose definition is provided
14749 outside the class, we may have too many arguments. Drop the
14750 ones we don't need. The same is true for specializations. */
14751 args = get_innermost_template_args
14752 (gen_args, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td)));
14753 else
14754 args = gen_args;
14756 if (TREE_CODE (d) == FUNCTION_DECL)
14757 pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
14758 else
14759 pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
14761 /* We may be in the middle of deferred access check. Disable it now. */
14762 push_deferring_access_checks (dk_no_deferred);
14764 /* Unless an explicit instantiation directive has already determined
14765 the linkage of D, remember that a definition is available for
14766 this entity. */
14767 if (pattern_defined
14768 && !DECL_INTERFACE_KNOWN (d)
14769 && !DECL_NOT_REALLY_EXTERN (d))
14770 mark_definable (d);
14772 input_location = DECL_SOURCE_LOCATION (d);
14773 in_system_header = DECL_IN_SYSTEM_HEADER (d);
14775 /* If D is a member of an explicitly instantiated class template,
14776 and no definition is available, treat it like an implicit
14777 instantiation. */
14778 if (!pattern_defined && expl_inst_class_mem_p
14779 && DECL_EXPLICIT_INSTANTIATION (d))
14781 DECL_NOT_REALLY_EXTERN (d) = 0;
14782 DECL_INTERFACE_KNOWN (d) = 0;
14783 SET_DECL_IMPLICIT_INSTANTIATION (d);
14786 if (!defer_ok)
14788 /* Recheck the substitutions to obtain any warning messages
14789 about ignoring cv qualifiers. */
14790 tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
14791 tree type = TREE_TYPE (gen);
14793 /* Make sure that we can see identifiers, and compute access
14794 correctly. D is already the target FUNCTION_DECL with the
14795 right context. */
14796 push_access_scope (d);
14798 if (TREE_CODE (gen) == FUNCTION_DECL)
14800 tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
14801 tsubst_exception_specification (type, gen_args, tf_warning_or_error,
14803 /* Don't simply tsubst the function type, as that will give
14804 duplicate warnings about poor parameter qualifications.
14805 The function arguments are the same as the decl_arguments
14806 without the top level cv qualifiers. */
14807 type = TREE_TYPE (type);
14809 tsubst (type, gen_args, tf_warning_or_error, d);
14811 pop_access_scope (d);
14814 /* Check to see whether we know that this template will be
14815 instantiated in some other file, as with "extern template"
14816 extension. */
14817 external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
14818 /* In general, we do not instantiate such templates... */
14819 if (external_p
14820 /* ... but we instantiate inline functions so that we can inline
14821 them and ... */
14822 && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d))
14823 /* ... we instantiate static data members whose values are
14824 needed in integral constant expressions. */
14825 && ! (TREE_CODE (d) == VAR_DECL
14826 && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (d)))
14827 goto out;
14828 /* Defer all other templates, unless we have been explicitly
14829 forbidden from doing so. */
14830 if (/* If there is no definition, we cannot instantiate the
14831 template. */
14832 ! pattern_defined
14833 /* If it's OK to postpone instantiation, do so. */
14834 || defer_ok
14835 /* If this is a static data member that will be defined
14836 elsewhere, we don't want to instantiate the entire data
14837 member, but we do want to instantiate the initializer so that
14838 we can substitute that elsewhere. */
14839 || (external_p && TREE_CODE (d) == VAR_DECL))
14841 /* The definition of the static data member is now required so
14842 we must substitute the initializer. */
14843 if (TREE_CODE (d) == VAR_DECL
14844 && !DECL_INITIAL (d)
14845 && DECL_INITIAL (code_pattern))
14847 tree ns;
14848 tree init;
14850 ns = decl_namespace_context (d);
14851 push_nested_namespace (ns);
14852 push_nested_class (DECL_CONTEXT (d));
14853 init = tsubst_expr (DECL_INITIAL (code_pattern),
14854 args,
14855 tf_warning_or_error, NULL_TREE,
14856 /*integral_constant_expression_p=*/false);
14857 cp_finish_decl (d, init, /*init_const_expr_p=*/false,
14858 /*asmspec_tree=*/NULL_TREE,
14859 LOOKUP_ONLYCONVERTING);
14860 pop_nested_class ();
14861 pop_nested_namespace (ns);
14864 /* We restore the source position here because it's used by
14865 add_pending_template. */
14866 input_location = saved_loc;
14868 if (at_eof && !pattern_defined
14869 && DECL_EXPLICIT_INSTANTIATION (d))
14870 /* [temp.explicit]
14872 The definition of a non-exported function template, a
14873 non-exported member function template, or a non-exported
14874 member function or static data member of a class template
14875 shall be present in every translation unit in which it is
14876 explicitly instantiated. */
14877 pedwarn
14878 ("explicit instantiation of %qD but no definition available", d);
14880 /* ??? Historically, we have instantiated inline functions, even
14881 when marked as "extern template". */
14882 if (!(external_p && TREE_CODE (d) == VAR_DECL))
14883 add_pending_template (d);
14884 goto out;
14886 /* Tell the repository that D is available in this translation unit
14887 -- and see if it is supposed to be instantiated here. */
14888 if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
14890 /* In a PCH file, despite the fact that the repository hasn't
14891 requested instantiation in the PCH it is still possible that
14892 an instantiation will be required in a file that includes the
14893 PCH. */
14894 if (pch_file)
14895 add_pending_template (d);
14896 /* Instantiate inline functions so that the inliner can do its
14897 job, even though we'll not be emitting a copy of this
14898 function. */
14899 if (!(TREE_CODE (d) == FUNCTION_DECL
14900 && flag_inline_trees
14901 && DECL_DECLARED_INLINE_P (d)))
14902 goto out;
14905 need_push = !cfun || !global_bindings_p ();
14906 if (need_push)
14907 push_to_top_level ();
14909 /* Mark D as instantiated so that recursive calls to
14910 instantiate_decl do not try to instantiate it again. */
14911 DECL_TEMPLATE_INSTANTIATED (d) = 1;
14913 /* Regenerate the declaration in case the template has been modified
14914 by a subsequent redeclaration. */
14915 regenerate_decl_from_template (d, td);
14917 /* We already set the file and line above. Reset them now in case
14918 they changed as a result of calling regenerate_decl_from_template. */
14919 input_location = DECL_SOURCE_LOCATION (d);
14921 if (TREE_CODE (d) == VAR_DECL)
14923 tree init;
14925 /* Clear out DECL_RTL; whatever was there before may not be right
14926 since we've reset the type of the declaration. */
14927 SET_DECL_RTL (d, NULL_RTX);
14928 DECL_IN_AGGR_P (d) = 0;
14930 /* The initializer is placed in DECL_INITIAL by
14931 regenerate_decl_from_template. Pull it out so that
14932 finish_decl can process it. */
14933 init = DECL_INITIAL (d);
14934 DECL_INITIAL (d) = NULL_TREE;
14935 DECL_INITIALIZED_P (d) = 0;
14937 /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
14938 initializer. That function will defer actual emission until
14939 we have a chance to determine linkage. */
14940 DECL_EXTERNAL (d) = 0;
14942 /* Enter the scope of D so that access-checking works correctly. */
14943 push_nested_class (DECL_CONTEXT (d));
14944 finish_decl (d, init, NULL_TREE);
14945 pop_nested_class ();
14947 else if (TREE_CODE (d) == FUNCTION_DECL)
14949 htab_t saved_local_specializations;
14950 tree subst_decl;
14951 tree tmpl_parm;
14952 tree spec_parm;
14954 /* Save away the current list, in case we are instantiating one
14955 template from within the body of another. */
14956 saved_local_specializations = local_specializations;
14958 /* Set up the list of local specializations. */
14959 local_specializations = htab_create (37,
14960 hash_local_specialization,
14961 eq_local_specializations,
14962 NULL);
14964 /* Set up context. */
14965 start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
14967 /* Create substitution entries for the parameters. */
14968 subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
14969 tmpl_parm = DECL_ARGUMENTS (subst_decl);
14970 spec_parm = DECL_ARGUMENTS (d);
14971 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
14973 register_local_specialization (spec_parm, tmpl_parm);
14974 spec_parm = skip_artificial_parms_for (d, spec_parm);
14975 tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
14977 while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
14979 register_local_specialization (spec_parm, tmpl_parm);
14980 tmpl_parm = TREE_CHAIN (tmpl_parm);
14981 spec_parm = TREE_CHAIN (spec_parm);
14983 if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
14985 /* Collect all of the extra "packed" parameters into an
14986 argument pack. */
14987 tree parmvec;
14988 tree parmtypevec;
14989 tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
14990 tree argtypepack = make_node (TYPE_ARGUMENT_PACK);
14991 int i, len = 0;
14992 tree t;
14994 /* Count how many parameters remain. */
14995 for (t = spec_parm; t; t = TREE_CHAIN (t))
14996 len++;
14998 /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters. */
14999 parmvec = make_tree_vec (len);
15000 parmtypevec = make_tree_vec (len);
15001 for(i = 0; i < len; i++, spec_parm = TREE_CHAIN (spec_parm))
15003 TREE_VEC_ELT (parmvec, i) = spec_parm;
15004 TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
15007 /* Build the argument packs. */
15008 SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
15009 SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
15010 TREE_TYPE (argpack) = argtypepack;
15012 /* Register the (value) argument pack as a specialization of
15013 TMPL_PARM, then move on. */
15014 register_local_specialization (argpack, tmpl_parm);
15015 tmpl_parm = TREE_CHAIN (tmpl_parm);
15017 gcc_assert (!spec_parm);
15019 /* Substitute into the body of the function. */
15020 tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
15021 tf_warning_or_error, tmpl,
15022 /*integral_constant_expression_p=*/false);
15024 /* Set the current input_location to the end of the function
15025 so that finish_function knows where we are. */
15026 input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
15028 /* We don't need the local specializations any more. */
15029 htab_delete (local_specializations);
15030 local_specializations = saved_local_specializations;
15032 /* Finish the function. */
15033 d = finish_function (0);
15034 expand_or_defer_fn (d);
15037 /* We're not deferring instantiation any more. */
15038 TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
15040 if (need_push)
15041 pop_from_top_level ();
15043 out:
15044 input_location = saved_loc;
15045 in_system_header = saved_in_system_header;
15046 pop_deferring_access_checks ();
15047 pop_tinst_level ();
15049 timevar_pop (TV_PARSE);
15051 return d;
15054 /* Run through the list of templates that we wish we could
15055 instantiate, and instantiate any we can. RETRIES is the
15056 number of times we retry pending template instantiation. */
15058 void
15059 instantiate_pending_templates (int retries)
15061 int reconsider;
15062 location_t saved_loc = input_location;
15063 int saved_in_system_header = in_system_header;
15065 /* Instantiating templates may trigger vtable generation. This in turn
15066 may require further template instantiations. We place a limit here
15067 to avoid infinite loop. */
15068 if (pending_templates && retries >= max_tinst_depth)
15070 tree decl = pending_templates->tinst->decl;
15072 error ("template instantiation depth exceeds maximum of %d"
15073 " instantiating %q+D, possibly from virtual table generation"
15074 " (use -ftemplate-depth-NN to increase the maximum)",
15075 max_tinst_depth, decl);
15076 if (TREE_CODE (decl) == FUNCTION_DECL)
15077 /* Pretend that we defined it. */
15078 DECL_INITIAL (decl) = error_mark_node;
15079 return;
15084 struct pending_template **t = &pending_templates;
15085 struct pending_template *last = NULL;
15086 reconsider = 0;
15087 while (*t)
15089 tree instantiation = reopen_tinst_level ((*t)->tinst);
15090 bool complete = false;
15092 if (TYPE_P (instantiation))
15094 tree fn;
15096 if (!COMPLETE_TYPE_P (instantiation))
15098 instantiate_class_template (instantiation);
15099 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
15100 for (fn = TYPE_METHODS (instantiation);
15102 fn = TREE_CHAIN (fn))
15103 if (! DECL_ARTIFICIAL (fn))
15104 instantiate_decl (fn,
15105 /*defer_ok=*/0,
15106 /*expl_inst_class_mem_p=*/false);
15107 if (COMPLETE_TYPE_P (instantiation))
15108 reconsider = 1;
15111 complete = COMPLETE_TYPE_P (instantiation);
15113 else
15115 if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
15116 && !DECL_TEMPLATE_INSTANTIATED (instantiation))
15118 instantiation
15119 = instantiate_decl (instantiation,
15120 /*defer_ok=*/0,
15121 /*expl_inst_class_mem_p=*/false);
15122 if (DECL_TEMPLATE_INSTANTIATED (instantiation))
15123 reconsider = 1;
15126 complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
15127 || DECL_TEMPLATE_INSTANTIATED (instantiation));
15130 if (complete)
15131 /* If INSTANTIATION has been instantiated, then we don't
15132 need to consider it again in the future. */
15133 *t = (*t)->next;
15134 else
15136 last = *t;
15137 t = &(*t)->next;
15139 tinst_depth = 0;
15140 current_tinst_level = NULL;
15142 last_pending_template = last;
15144 while (reconsider);
15146 input_location = saved_loc;
15147 in_system_header = saved_in_system_header;
15150 /* Substitute ARGVEC into T, which is a list of initializers for
15151 either base class or a non-static data member. The TREE_PURPOSEs
15152 are DECLs, and the TREE_VALUEs are the initializer values. Used by
15153 instantiate_decl. */
15155 static tree
15156 tsubst_initializer_list (tree t, tree argvec)
15158 tree inits = NULL_TREE;
15160 for (; t; t = TREE_CHAIN (t))
15162 tree decl;
15163 tree init;
15164 tree expanded_bases = NULL_TREE;
15165 tree expanded_arguments = NULL_TREE;
15166 int i, len = 1;
15168 if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
15170 tree expr;
15171 tree arg;
15173 /* Expand the base class expansion type into separate base
15174 classes. */
15175 expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
15176 tf_warning_or_error,
15177 NULL_TREE);
15178 if (expanded_bases == error_mark_node)
15179 continue;
15181 /* We'll be building separate TREE_LISTs of arguments for
15182 each base. */
15183 len = TREE_VEC_LENGTH (expanded_bases);
15184 expanded_arguments = make_tree_vec (len);
15185 for (i = 0; i < len; i++)
15186 TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
15188 /* Build a dummy EXPR_PACK_EXPANSION that will be used to
15189 expand each argument in the TREE_VALUE of t. */
15190 expr = make_node (EXPR_PACK_EXPANSION);
15191 PACK_EXPANSION_PARAMETER_PACKS (expr) =
15192 PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
15194 /* Substitute parameter packs into each argument in the
15195 TREE_LIST. */
15196 in_base_initializer = 1;
15197 for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
15199 tree expanded_exprs;
15201 /* Expand the argument. */
15202 SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
15203 expanded_exprs = tsubst_pack_expansion (expr, argvec,
15204 tf_warning_or_error,
15205 NULL_TREE);
15207 /* Prepend each of the expanded expressions to the
15208 corresponding TREE_LIST in EXPANDED_ARGUMENTS. */
15209 for (i = 0; i < len; i++)
15211 TREE_VEC_ELT (expanded_arguments, i) =
15212 tree_cons (NULL_TREE, TREE_VEC_ELT (expanded_exprs, i),
15213 TREE_VEC_ELT (expanded_arguments, i));
15216 in_base_initializer = 0;
15218 /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
15219 since we built them backwards. */
15220 for (i = 0; i < len; i++)
15222 TREE_VEC_ELT (expanded_arguments, i) =
15223 nreverse (TREE_VEC_ELT (expanded_arguments, i));
15227 for (i = 0; i < len; ++i)
15229 if (expanded_bases)
15231 decl = TREE_VEC_ELT (expanded_bases, i);
15232 decl = expand_member_init (decl);
15233 init = TREE_VEC_ELT (expanded_arguments, i);
15235 else
15237 decl = tsubst_copy (TREE_PURPOSE (t), argvec,
15238 tf_warning_or_error, NULL_TREE);
15240 decl = expand_member_init (decl);
15241 if (decl && !DECL_P (decl))
15242 in_base_initializer = 1;
15244 init = tsubst_expr (TREE_VALUE (t), argvec,
15245 tf_warning_or_error, NULL_TREE,
15246 /*integral_constant_expression_p=*/false);
15247 in_base_initializer = 0;
15250 if (decl)
15252 init = build_tree_list (decl, init);
15253 TREE_CHAIN (init) = inits;
15254 inits = init;
15258 return inits;
15261 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
15263 static void
15264 set_current_access_from_decl (tree decl)
15266 if (TREE_PRIVATE (decl))
15267 current_access_specifier = access_private_node;
15268 else if (TREE_PROTECTED (decl))
15269 current_access_specifier = access_protected_node;
15270 else
15271 current_access_specifier = access_public_node;
15274 /* Instantiate an enumerated type. TAG is the template type, NEWTAG
15275 is the instantiation (which should have been created with
15276 start_enum) and ARGS are the template arguments to use. */
15278 static void
15279 tsubst_enum (tree tag, tree newtag, tree args)
15281 tree e;
15283 for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
15285 tree value;
15286 tree decl;
15288 decl = TREE_VALUE (e);
15289 /* Note that in a template enum, the TREE_VALUE is the
15290 CONST_DECL, not the corresponding INTEGER_CST. */
15291 value = tsubst_expr (DECL_INITIAL (decl),
15292 args, tf_warning_or_error, NULL_TREE,
15293 /*integral_constant_expression_p=*/true);
15295 /* Give this enumeration constant the correct access. */
15296 set_current_access_from_decl (decl);
15298 /* Actually build the enumerator itself. */
15299 build_enumerator (DECL_NAME (decl), value, newtag);
15302 finish_enum (newtag);
15303 DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
15304 = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
15307 /* DECL is a FUNCTION_DECL that is a template specialization. Return
15308 its type -- but without substituting the innermost set of template
15309 arguments. So, innermost set of template parameters will appear in
15310 the type. */
15312 tree
15313 get_mostly_instantiated_function_type (tree decl)
15315 tree fn_type;
15316 tree tmpl;
15317 tree targs;
15318 tree tparms;
15319 int parm_depth;
15321 tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
15322 targs = DECL_TI_ARGS (decl);
15323 tparms = DECL_TEMPLATE_PARMS (tmpl);
15324 parm_depth = TMPL_PARMS_DEPTH (tparms);
15326 /* There should be as many levels of arguments as there are levels
15327 of parameters. */
15328 gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
15330 fn_type = TREE_TYPE (tmpl);
15332 if (parm_depth == 1)
15333 /* No substitution is necessary. */
15335 else
15337 int i, save_access_control;
15338 tree partial_args;
15340 /* Replace the innermost level of the TARGS with NULL_TREEs to
15341 let tsubst know not to substitute for those parameters. */
15342 partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
15343 for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
15344 SET_TMPL_ARGS_LEVEL (partial_args, i,
15345 TMPL_ARGS_LEVEL (targs, i));
15346 SET_TMPL_ARGS_LEVEL (partial_args,
15347 TMPL_ARGS_DEPTH (targs),
15348 make_tree_vec (DECL_NTPARMS (tmpl)));
15350 /* Disable access control as this function is used only during
15351 name-mangling. */
15352 save_access_control = flag_access_control;
15353 flag_access_control = 0;
15355 ++processing_template_decl;
15356 /* Now, do the (partial) substitution to figure out the
15357 appropriate function type. */
15358 fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
15359 --processing_template_decl;
15361 /* Substitute into the template parameters to obtain the real
15362 innermost set of parameters. This step is important if the
15363 innermost set of template parameters contains value
15364 parameters whose types depend on outer template parameters. */
15365 TREE_VEC_LENGTH (partial_args)--;
15366 tparms = tsubst_template_parms (tparms, partial_args, tf_error);
15368 flag_access_control = save_access_control;
15371 return fn_type;
15374 /* Return truthvalue if we're processing a template different from
15375 the last one involved in diagnostics. */
15377 problematic_instantiation_changed (void)
15379 return last_template_error_tick != tinst_level_tick;
15382 /* Remember current template involved in diagnostics. */
15383 void
15384 record_last_problematic_instantiation (void)
15386 last_template_error_tick = tinst_level_tick;
15389 struct tinst_level *
15390 current_instantiation (void)
15392 return current_tinst_level;
15395 /* [temp.param] Check that template non-type parm TYPE is of an allowable
15396 type. Return zero for ok, nonzero for disallowed. Issue error and
15397 warning messages under control of COMPLAIN. */
15399 static int
15400 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
15402 if (INTEGRAL_TYPE_P (type))
15403 return 0;
15404 else if (POINTER_TYPE_P (type))
15405 return 0;
15406 else if (TYPE_PTR_TO_MEMBER_P (type))
15407 return 0;
15408 else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
15409 return 0;
15410 else if (TREE_CODE (type) == TYPENAME_TYPE)
15411 return 0;
15413 if (complain & tf_error)
15414 error ("%q#T is not a valid type for a template constant parameter", type);
15415 return 1;
15418 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
15419 Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
15421 static bool
15422 dependent_type_p_r (tree type)
15424 tree scope;
15426 /* [temp.dep.type]
15428 A type is dependent if it is:
15430 -- a template parameter. Template template parameters are types
15431 for us (since TYPE_P holds true for them) so we handle
15432 them here. */
15433 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
15434 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
15435 return true;
15436 /* -- a qualified-id with a nested-name-specifier which contains a
15437 class-name that names a dependent type or whose unqualified-id
15438 names a dependent type. */
15439 if (TREE_CODE (type) == TYPENAME_TYPE)
15440 return true;
15441 /* -- a cv-qualified type where the cv-unqualified type is
15442 dependent. */
15443 type = TYPE_MAIN_VARIANT (type);
15444 /* -- a compound type constructed from any dependent type. */
15445 if (TYPE_PTR_TO_MEMBER_P (type))
15446 return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
15447 || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
15448 (type)));
15449 else if (TREE_CODE (type) == POINTER_TYPE
15450 || TREE_CODE (type) == REFERENCE_TYPE)
15451 return dependent_type_p (TREE_TYPE (type));
15452 else if (TREE_CODE (type) == FUNCTION_TYPE
15453 || TREE_CODE (type) == METHOD_TYPE)
15455 tree arg_type;
15457 if (dependent_type_p (TREE_TYPE (type)))
15458 return true;
15459 for (arg_type = TYPE_ARG_TYPES (type);
15460 arg_type;
15461 arg_type = TREE_CHAIN (arg_type))
15462 if (dependent_type_p (TREE_VALUE (arg_type)))
15463 return true;
15464 return false;
15466 /* -- an array type constructed from any dependent type or whose
15467 size is specified by a constant expression that is
15468 value-dependent. */
15469 if (TREE_CODE (type) == ARRAY_TYPE)
15471 if (TYPE_DOMAIN (type)
15472 && dependent_type_p (TYPE_DOMAIN (type)))
15473 return true;
15474 return dependent_type_p (TREE_TYPE (type));
15476 else if (TREE_CODE (type) == INTEGER_TYPE
15477 && !TREE_CONSTANT (TYPE_MAX_VALUE (type)))
15479 /* If this is the TYPE_DOMAIN of an array type, consider it
15480 dependent. */
15481 return (value_dependent_expression_p (TYPE_MAX_VALUE (type))
15482 || type_dependent_expression_p (TYPE_MAX_VALUE (type)));
15485 /* -- a template-id in which either the template name is a template
15486 parameter ... */
15487 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
15488 return true;
15489 /* ... or any of the template arguments is a dependent type or
15490 an expression that is type-dependent or value-dependent. */
15491 else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
15492 && (any_dependent_template_arguments_p
15493 (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
15494 return true;
15496 /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
15497 argument of the `typeof' expression is not type-dependent, then
15498 it should already been have resolved. */
15499 if (TREE_CODE (type) == TYPEOF_TYPE
15500 || TREE_CODE (type) == DECLTYPE_TYPE)
15501 return true;
15503 /* A template argument pack is dependent if any of its packed
15504 arguments are. */
15505 if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
15507 tree args = ARGUMENT_PACK_ARGS (type);
15508 int i, len = TREE_VEC_LENGTH (args);
15509 for (i = 0; i < len; ++i)
15510 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15511 return true;
15514 /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
15515 be template parameters. */
15516 if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
15517 return true;
15519 /* The standard does not specifically mention types that are local
15520 to template functions or local classes, but they should be
15521 considered dependent too. For example:
15523 template <int I> void f() {
15524 enum E { a = I };
15525 S<sizeof (E)> s;
15528 The size of `E' cannot be known until the value of `I' has been
15529 determined. Therefore, `E' must be considered dependent. */
15530 scope = TYPE_CONTEXT (type);
15531 if (scope && TYPE_P (scope))
15532 return dependent_type_p (scope);
15533 else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
15534 return type_dependent_expression_p (scope);
15536 /* Other types are non-dependent. */
15537 return false;
15540 /* Returns TRUE if TYPE is dependent, in the sense of
15541 [temp.dep.type]. */
15543 bool
15544 dependent_type_p (tree type)
15546 /* If there are no template parameters in scope, then there can't be
15547 any dependent types. */
15548 if (!processing_template_decl)
15550 /* If we are not processing a template, then nobody should be
15551 providing us with a dependent type. */
15552 gcc_assert (type);
15553 gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM);
15554 return false;
15557 /* If the type is NULL, we have not computed a type for the entity
15558 in question; in that case, the type is dependent. */
15559 if (!type)
15560 return true;
15562 /* Erroneous types can be considered non-dependent. */
15563 if (type == error_mark_node)
15564 return false;
15566 /* If we have not already computed the appropriate value for TYPE,
15567 do so now. */
15568 if (!TYPE_DEPENDENT_P_VALID (type))
15570 TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
15571 TYPE_DEPENDENT_P_VALID (type) = 1;
15574 return TYPE_DEPENDENT_P (type);
15577 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION. */
15579 static bool
15580 dependent_scope_ref_p (tree expression, bool criterion (tree))
15582 tree scope;
15583 tree name;
15585 gcc_assert (TREE_CODE (expression) == SCOPE_REF);
15587 if (!TYPE_P (TREE_OPERAND (expression, 0)))
15588 return true;
15590 scope = TREE_OPERAND (expression, 0);
15591 name = TREE_OPERAND (expression, 1);
15593 /* [temp.dep.expr]
15595 An id-expression is type-dependent if it contains a
15596 nested-name-specifier that contains a class-name that names a
15597 dependent type. */
15598 /* The suggested resolution to Core Issue 2 implies that if the
15599 qualifying type is the current class, then we must peek
15600 inside it. */
15601 if (DECL_P (name)
15602 && currently_open_class (scope)
15603 && !criterion (name))
15604 return false;
15605 if (dependent_type_p (scope))
15606 return true;
15608 return false;
15611 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
15612 [temp.dep.constexpr]. EXPRESSION is already known to be a constant
15613 expression. */
15615 bool
15616 value_dependent_expression_p (tree expression)
15618 if (!processing_template_decl)
15619 return false;
15621 /* A name declared with a dependent type. */
15622 if (DECL_P (expression) && type_dependent_expression_p (expression))
15623 return true;
15625 switch (TREE_CODE (expression))
15627 case IDENTIFIER_NODE:
15628 /* A name that has not been looked up -- must be dependent. */
15629 return true;
15631 case TEMPLATE_PARM_INDEX:
15632 /* A non-type template parm. */
15633 return true;
15635 case CONST_DECL:
15636 /* A non-type template parm. */
15637 if (DECL_TEMPLATE_PARM_P (expression))
15638 return true;
15639 return false;
15641 case VAR_DECL:
15642 /* A constant with integral or enumeration type and is initialized
15643 with an expression that is value-dependent. */
15644 if (DECL_INITIAL (expression)
15645 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
15646 && value_dependent_expression_p (DECL_INITIAL (expression)))
15647 return true;
15648 return false;
15650 case DYNAMIC_CAST_EXPR:
15651 case STATIC_CAST_EXPR:
15652 case CONST_CAST_EXPR:
15653 case REINTERPRET_CAST_EXPR:
15654 case CAST_EXPR:
15655 /* These expressions are value-dependent if the type to which
15656 the cast occurs is dependent or the expression being casted
15657 is value-dependent. */
15659 tree type = TREE_TYPE (expression);
15661 if (dependent_type_p (type))
15662 return true;
15664 /* A functional cast has a list of operands. */
15665 expression = TREE_OPERAND (expression, 0);
15666 if (!expression)
15668 /* If there are no operands, it must be an expression such
15669 as "int()". This should not happen for aggregate types
15670 because it would form non-constant expressions. */
15671 gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
15673 return false;
15676 if (TREE_CODE (expression) == TREE_LIST)
15677 return any_value_dependent_elements_p (expression);
15679 return value_dependent_expression_p (expression);
15682 case SIZEOF_EXPR:
15683 case ALIGNOF_EXPR:
15684 /* A `sizeof' expression is value-dependent if the operand is
15685 type-dependent or is a pack expansion. */
15686 expression = TREE_OPERAND (expression, 0);
15687 if (PACK_EXPANSION_P (expression))
15688 return true;
15689 else if (TYPE_P (expression))
15690 return dependent_type_p (expression);
15691 return type_dependent_expression_p (expression);
15693 case SCOPE_REF:
15694 return dependent_scope_ref_p (expression, value_dependent_expression_p);
15696 case COMPONENT_REF:
15697 return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
15698 || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
15700 case CALL_EXPR:
15701 /* A CALL_EXPR may appear in a constant expression if it is a
15702 call to a builtin function, e.g., __builtin_constant_p. All
15703 such calls are value-dependent. */
15704 return true;
15706 case NONTYPE_ARGUMENT_PACK:
15707 /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
15708 is value-dependent. */
15710 tree values = ARGUMENT_PACK_ARGS (expression);
15711 int i, len = TREE_VEC_LENGTH (values);
15713 for (i = 0; i < len; ++i)
15714 if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
15715 return true;
15717 return false;
15720 case TRAIT_EXPR:
15722 tree type2 = TRAIT_EXPR_TYPE2 (expression);
15723 return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
15724 || (type2 ? dependent_type_p (type2) : false));
15727 case MODOP_EXPR:
15728 return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
15729 || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
15731 default:
15732 /* A constant expression is value-dependent if any subexpression is
15733 value-dependent. */
15734 switch (TREE_CODE_CLASS (TREE_CODE (expression)))
15736 case tcc_reference:
15737 case tcc_unary:
15738 return (value_dependent_expression_p
15739 (TREE_OPERAND (expression, 0)));
15741 case tcc_comparison:
15742 case tcc_binary:
15743 return ((value_dependent_expression_p
15744 (TREE_OPERAND (expression, 0)))
15745 || (value_dependent_expression_p
15746 (TREE_OPERAND (expression, 1))));
15748 case tcc_expression:
15749 case tcc_vl_exp:
15751 int i;
15752 for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
15753 /* In some cases, some of the operands may be missing.
15754 (For example, in the case of PREDECREMENT_EXPR, the
15755 amount to increment by may be missing.) That doesn't
15756 make the expression dependent. */
15757 if (TREE_OPERAND (expression, i)
15758 && (value_dependent_expression_p
15759 (TREE_OPERAND (expression, i))))
15760 return true;
15761 return false;
15764 default:
15765 break;
15769 /* The expression is not value-dependent. */
15770 return false;
15773 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
15774 [temp.dep.expr]. */
15776 bool
15777 type_dependent_expression_p (tree expression)
15779 if (!processing_template_decl)
15780 return false;
15782 if (expression == error_mark_node)
15783 return false;
15785 /* An unresolved name is always dependent. */
15786 if (TREE_CODE (expression) == IDENTIFIER_NODE
15787 || TREE_CODE (expression) == USING_DECL)
15788 return true;
15790 /* Some expression forms are never type-dependent. */
15791 if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
15792 || TREE_CODE (expression) == SIZEOF_EXPR
15793 || TREE_CODE (expression) == ALIGNOF_EXPR
15794 || TREE_CODE (expression) == TRAIT_EXPR
15795 || TREE_CODE (expression) == TYPEID_EXPR
15796 || TREE_CODE (expression) == DELETE_EXPR
15797 || TREE_CODE (expression) == VEC_DELETE_EXPR
15798 || TREE_CODE (expression) == THROW_EXPR)
15799 return false;
15801 /* The types of these expressions depends only on the type to which
15802 the cast occurs. */
15803 if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
15804 || TREE_CODE (expression) == STATIC_CAST_EXPR
15805 || TREE_CODE (expression) == CONST_CAST_EXPR
15806 || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
15807 || TREE_CODE (expression) == CAST_EXPR)
15808 return dependent_type_p (TREE_TYPE (expression));
15810 /* The types of these expressions depends only on the type created
15811 by the expression. */
15812 if (TREE_CODE (expression) == NEW_EXPR
15813 || TREE_CODE (expression) == VEC_NEW_EXPR)
15815 /* For NEW_EXPR tree nodes created inside a template, either
15816 the object type itself or a TREE_LIST may appear as the
15817 operand 1. */
15818 tree type = TREE_OPERAND (expression, 1);
15819 if (TREE_CODE (type) == TREE_LIST)
15820 /* This is an array type. We need to check array dimensions
15821 as well. */
15822 return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
15823 || value_dependent_expression_p
15824 (TREE_OPERAND (TREE_VALUE (type), 1));
15825 else
15826 return dependent_type_p (type);
15829 if (TREE_CODE (expression) == SCOPE_REF
15830 && dependent_scope_ref_p (expression,
15831 type_dependent_expression_p))
15832 return true;
15834 if (TREE_CODE (expression) == FUNCTION_DECL
15835 && DECL_LANG_SPECIFIC (expression)
15836 && DECL_TEMPLATE_INFO (expression)
15837 && (any_dependent_template_arguments_p
15838 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
15839 return true;
15841 if (TREE_CODE (expression) == TEMPLATE_DECL
15842 && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
15843 return false;
15845 if (TREE_CODE (expression) == STMT_EXPR)
15846 expression = stmt_expr_value_expr (expression);
15848 if (TREE_TYPE (expression) == unknown_type_node)
15850 if (TREE_CODE (expression) == ADDR_EXPR)
15851 return type_dependent_expression_p (TREE_OPERAND (expression, 0));
15852 if (TREE_CODE (expression) == COMPONENT_REF
15853 || TREE_CODE (expression) == OFFSET_REF)
15855 if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
15856 return true;
15857 expression = TREE_OPERAND (expression, 1);
15858 if (TREE_CODE (expression) == IDENTIFIER_NODE)
15859 return false;
15861 /* SCOPE_REF with non-null TREE_TYPE is always non-dependent. */
15862 if (TREE_CODE (expression) == SCOPE_REF)
15863 return false;
15865 if (TREE_CODE (expression) == BASELINK)
15866 expression = BASELINK_FUNCTIONS (expression);
15868 if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
15870 if (any_dependent_template_arguments_p
15871 (TREE_OPERAND (expression, 1)))
15872 return true;
15873 expression = TREE_OPERAND (expression, 0);
15875 gcc_assert (TREE_CODE (expression) == OVERLOAD
15876 || TREE_CODE (expression) == FUNCTION_DECL);
15878 while (expression)
15880 if (type_dependent_expression_p (OVL_CURRENT (expression)))
15881 return true;
15882 expression = OVL_NEXT (expression);
15884 return false;
15887 gcc_assert (TREE_CODE (expression) != TYPE_DECL);
15889 return (dependent_type_p (TREE_TYPE (expression)));
15892 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
15893 contains a type-dependent expression. */
15895 bool
15896 any_type_dependent_arguments_p (const_tree args)
15898 while (args)
15900 tree arg = TREE_VALUE (args);
15902 if (type_dependent_expression_p (arg))
15903 return true;
15904 args = TREE_CHAIN (args);
15906 return false;
15909 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
15910 expressions) contains any value-dependent expressions. */
15912 bool
15913 any_value_dependent_elements_p (const_tree list)
15915 for (; list; list = TREE_CHAIN (list))
15916 if (value_dependent_expression_p (TREE_VALUE (list)))
15917 return true;
15919 return false;
15922 /* Returns TRUE if the ARG (a template argument) is dependent. */
15924 bool
15925 dependent_template_arg_p (tree arg)
15927 if (!processing_template_decl)
15928 return false;
15930 if (TREE_CODE (arg) == TEMPLATE_DECL
15931 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15932 return dependent_template_p (arg);
15933 else if (ARGUMENT_PACK_P (arg))
15935 tree args = ARGUMENT_PACK_ARGS (arg);
15936 int i, len = TREE_VEC_LENGTH (args);
15937 for (i = 0; i < len; ++i)
15939 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15940 return true;
15943 return false;
15945 else if (TYPE_P (arg))
15946 return dependent_type_p (arg);
15947 else
15948 return (type_dependent_expression_p (arg)
15949 || value_dependent_expression_p (arg));
15952 /* Returns true if ARGS (a collection of template arguments) contains
15953 any types that require structural equality testing. */
15955 bool
15956 any_template_arguments_need_structural_equality_p (tree args)
15958 int i;
15959 int j;
15961 if (!args)
15962 return false;
15963 if (args == error_mark_node)
15964 return true;
15966 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
15968 tree level = TMPL_ARGS_LEVEL (args, i + 1);
15969 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
15971 tree arg = TREE_VEC_ELT (level, j);
15972 tree packed_args = NULL_TREE;
15973 int k, len = 1;
15975 if (ARGUMENT_PACK_P (arg))
15977 /* Look inside the argument pack. */
15978 packed_args = ARGUMENT_PACK_ARGS (arg);
15979 len = TREE_VEC_LENGTH (packed_args);
15982 for (k = 0; k < len; ++k)
15984 if (packed_args)
15985 arg = TREE_VEC_ELT (packed_args, k);
15987 if (error_operand_p (arg))
15988 return true;
15989 else if (TREE_CODE (arg) == TEMPLATE_DECL
15990 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15991 continue;
15992 else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
15993 return true;
15994 else if (!TYPE_P (arg) && TREE_TYPE (arg)
15995 && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
15996 return true;
16001 return false;
16004 /* Returns true if ARGS (a collection of template arguments) contains
16005 any dependent arguments. */
16007 bool
16008 any_dependent_template_arguments_p (const_tree args)
16010 int i;
16011 int j;
16013 if (!args)
16014 return false;
16015 if (args == error_mark_node)
16016 return true;
16018 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
16020 const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
16021 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
16022 if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
16023 return true;
16026 return false;
16029 /* Returns TRUE if the template TMPL is dependent. */
16031 bool
16032 dependent_template_p (tree tmpl)
16034 if (TREE_CODE (tmpl) == OVERLOAD)
16036 while (tmpl)
16038 if (dependent_template_p (OVL_FUNCTION (tmpl)))
16039 return true;
16040 tmpl = OVL_CHAIN (tmpl);
16042 return false;
16045 /* Template template parameters are dependent. */
16046 if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
16047 || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
16048 return true;
16049 /* So are names that have not been looked up. */
16050 if (TREE_CODE (tmpl) == SCOPE_REF
16051 || TREE_CODE (tmpl) == IDENTIFIER_NODE)
16052 return true;
16053 /* So are member templates of dependent classes. */
16054 if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
16055 return dependent_type_p (DECL_CONTEXT (tmpl));
16056 return false;
16059 /* Returns TRUE if the specialization TMPL<ARGS> is dependent. */
16061 bool
16062 dependent_template_id_p (tree tmpl, tree args)
16064 return (dependent_template_p (tmpl)
16065 || any_dependent_template_arguments_p (args));
16068 /* TYPE is a TYPENAME_TYPE. Returns the ordinary TYPE to which the
16069 TYPENAME_TYPE corresponds. Returns the original TYPENAME_TYPE if
16070 no such TYPE can be found. Note that this function peers inside
16071 uninstantiated templates and therefore should be used only in
16072 extremely limited situations. ONLY_CURRENT_P restricts this
16073 peering to the currently open classes hierarchy (which is required
16074 when comparing types). */
16076 tree
16077 resolve_typename_type (tree type, bool only_current_p)
16079 tree scope;
16080 tree name;
16081 tree decl;
16082 int quals;
16083 tree pushed_scope;
16084 tree result;
16086 gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
16088 scope = TYPE_CONTEXT (type);
16089 name = TYPE_IDENTIFIER (type);
16091 /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
16092 it first before we can figure out what NAME refers to. */
16093 if (TREE_CODE (scope) == TYPENAME_TYPE)
16094 scope = resolve_typename_type (scope, only_current_p);
16095 /* If we don't know what SCOPE refers to, then we cannot resolve the
16096 TYPENAME_TYPE. */
16097 if (TREE_CODE (scope) == TYPENAME_TYPE)
16098 return type;
16099 /* If the SCOPE is a template type parameter, we have no way of
16100 resolving the name. */
16101 if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
16102 return type;
16103 /* If the SCOPE is not the current instantiation, there's no reason
16104 to look inside it. */
16105 if (only_current_p && !currently_open_class (scope))
16106 return type;
16107 /* If SCOPE isn't the template itself, it will not have a valid
16108 TYPE_FIELDS list. */
16109 if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
16110 /* scope is either the template itself or a compatible instantiation
16111 like X<T>, so look up the name in the original template. */
16112 scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
16113 else
16114 /* scope is a partial instantiation, so we can't do the lookup or we
16115 will lose the template arguments. */
16116 return type;
16117 /* Enter the SCOPE so that name lookup will be resolved as if we
16118 were in the class definition. In particular, SCOPE will no
16119 longer be considered a dependent type. */
16120 pushed_scope = push_scope (scope);
16121 /* Look up the declaration. */
16122 decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
16124 result = NULL_TREE;
16126 /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
16127 find a TEMPLATE_DECL. Otherwise, we want to find a TYPE_DECL. */
16128 if (!decl)
16129 /*nop*/;
16130 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
16131 && TREE_CODE (decl) == TYPE_DECL)
16133 result = TREE_TYPE (decl);
16134 if (result == error_mark_node)
16135 result = NULL_TREE;
16137 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
16138 && DECL_CLASS_TEMPLATE_P (decl))
16140 tree tmpl;
16141 tree args;
16142 /* Obtain the template and the arguments. */
16143 tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
16144 args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
16145 /* Instantiate the template. */
16146 result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
16147 /*entering_scope=*/0,
16148 tf_error | tf_user);
16149 if (result == error_mark_node)
16150 result = NULL_TREE;
16153 /* Leave the SCOPE. */
16154 if (pushed_scope)
16155 pop_scope (pushed_scope);
16157 /* If we failed to resolve it, return the original typename. */
16158 if (!result)
16159 return type;
16161 /* If lookup found a typename type, resolve that too. */
16162 if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
16164 /* Ill-formed programs can cause infinite recursion here, so we
16165 must catch that. */
16166 TYPENAME_IS_RESOLVING_P (type) = 1;
16167 result = resolve_typename_type (result, only_current_p);
16168 TYPENAME_IS_RESOLVING_P (type) = 0;
16171 /* Qualify the resulting type. */
16172 quals = cp_type_quals (type);
16173 if (quals)
16174 result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
16176 return result;
16179 /* EXPR is an expression which is not type-dependent. Return a proxy
16180 for EXPR that can be used to compute the types of larger
16181 expressions containing EXPR. */
16183 tree
16184 build_non_dependent_expr (tree expr)
16186 tree inner_expr;
16188 /* Preserve null pointer constants so that the type of things like
16189 "p == 0" where "p" is a pointer can be determined. */
16190 if (null_ptr_cst_p (expr))
16191 return expr;
16192 /* Preserve OVERLOADs; the functions must be available to resolve
16193 types. */
16194 inner_expr = expr;
16195 if (TREE_CODE (inner_expr) == STMT_EXPR)
16196 inner_expr = stmt_expr_value_expr (inner_expr);
16197 if (TREE_CODE (inner_expr) == ADDR_EXPR)
16198 inner_expr = TREE_OPERAND (inner_expr, 0);
16199 if (TREE_CODE (inner_expr) == COMPONENT_REF)
16200 inner_expr = TREE_OPERAND (inner_expr, 1);
16201 if (is_overloaded_fn (inner_expr)
16202 || TREE_CODE (inner_expr) == OFFSET_REF)
16203 return expr;
16204 /* There is no need to return a proxy for a variable. */
16205 if (TREE_CODE (expr) == VAR_DECL)
16206 return expr;
16207 /* Preserve string constants; conversions from string constants to
16208 "char *" are allowed, even though normally a "const char *"
16209 cannot be used to initialize a "char *". */
16210 if (TREE_CODE (expr) == STRING_CST)
16211 return expr;
16212 /* Preserve arithmetic constants, as an optimization -- there is no
16213 reason to create a new node. */
16214 if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
16215 return expr;
16216 /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
16217 There is at least one place where we want to know that a
16218 particular expression is a throw-expression: when checking a ?:
16219 expression, there are special rules if the second or third
16220 argument is a throw-expression. */
16221 if (TREE_CODE (expr) == THROW_EXPR)
16222 return expr;
16224 if (TREE_CODE (expr) == COND_EXPR)
16225 return build3 (COND_EXPR,
16226 TREE_TYPE (expr),
16227 TREE_OPERAND (expr, 0),
16228 (TREE_OPERAND (expr, 1)
16229 ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
16230 : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
16231 build_non_dependent_expr (TREE_OPERAND (expr, 2)));
16232 if (TREE_CODE (expr) == COMPOUND_EXPR
16233 && !COMPOUND_EXPR_OVERLOADED (expr))
16234 return build2 (COMPOUND_EXPR,
16235 TREE_TYPE (expr),
16236 TREE_OPERAND (expr, 0),
16237 build_non_dependent_expr (TREE_OPERAND (expr, 1)));
16239 /* If the type is unknown, it can't really be non-dependent */
16240 gcc_assert (TREE_TYPE (expr) != unknown_type_node);
16242 /* Otherwise, build a NON_DEPENDENT_EXPR.
16244 REFERENCE_TYPEs are not stripped for expressions in templates
16245 because doing so would play havoc with mangling. Consider, for
16246 example:
16248 template <typename T> void f<T& g>() { g(); }
16250 In the body of "f", the expression for "g" will have
16251 REFERENCE_TYPE, even though the standard says that it should
16252 not. The reason is that we must preserve the syntactic form of
16253 the expression so that mangling (say) "f<g>" inside the body of
16254 "f" works out correctly. Therefore, the REFERENCE_TYPE is
16255 stripped here. */
16256 return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
16259 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
16260 Return a new TREE_LIST with the various arguments replaced with
16261 equivalent non-dependent expressions. */
16263 tree
16264 build_non_dependent_args (tree args)
16266 tree a;
16267 tree new_args;
16269 new_args = NULL_TREE;
16270 for (a = args; a; a = TREE_CHAIN (a))
16271 new_args = tree_cons (NULL_TREE,
16272 build_non_dependent_expr (TREE_VALUE (a)),
16273 new_args);
16274 return nreverse (new_args);
16277 #include "gt-cp-pt.h"