mips-protos.h (mips_regno_mode_ok_for_base_p): Give the STRICT_P argument type "bool...
[official-gcc.git] / gcc / cp / pt.c
blob773c1041762e15b594706ba2abb69434c6e0d303
1 /* Handle parameterized types (templates) for GNU C++.
2 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
4 Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
5 Rewritten by Jason Merrill (jason@cygnus.com).
7 This file is part of GCC.
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
12 any later version.
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3. If not see
21 <http://www.gnu.org/licenses/>. */
23 /* Known bugs or deficiencies include:
25 all methods must be provided in header files; can't use a source
26 file that contains only the method templates and "just win". */
28 #include "config.h"
29 #include "system.h"
30 #include "coretypes.h"
31 #include "tm.h"
32 #include "obstack.h"
33 #include "tree.h"
34 #include "pointer-set.h"
35 #include "flags.h"
36 #include "c-common.h"
37 #include "cp-tree.h"
38 #include "cp-objcp-common.h"
39 #include "tree-inline.h"
40 #include "decl.h"
41 #include "output.h"
42 #include "except.h"
43 #include "toplev.h"
44 #include "rtl.h"
45 #include "timevar.h"
46 #include "tree-iterator.h"
47 #include "vecprim.h"
49 /* The type of functions taking a tree, and some additional data, and
50 returning an int. */
51 typedef int (*tree_fn_t) (tree, void*);
53 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
54 instantiations have been deferred, either because their definitions
55 were not yet available, or because we were putting off doing the work. */
56 struct pending_template GTY (()) {
57 struct pending_template *next;
58 struct tinst_level *tinst;
61 static GTY(()) struct pending_template *pending_templates;
62 static GTY(()) struct pending_template *last_pending_template;
64 int processing_template_parmlist;
65 static int template_header_count;
67 static GTY(()) tree saved_trees;
68 static VEC(int,heap) *inline_parm_levels;
70 static GTY(()) struct tinst_level *current_tinst_level;
72 static GTY(()) tree saved_access_scope;
74 /* Live only within one (recursive) call to tsubst_expr. We use
75 this to pass the statement expression node from the STMT_EXPR
76 to the EXPR_STMT that is its result. */
77 static tree cur_stmt_expr;
79 /* A map from local variable declarations in the body of the template
80 presently being instantiated to the corresponding instantiated
81 local variables. */
82 static htab_t local_specializations;
84 /* Contains canonical template parameter types. The vector is indexed by
85 the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
86 TREE_LIST, whose TREE_VALUEs contain the canonical template
87 parameters of various types and levels. */
88 static GTY(()) VEC(tree,gc) *canonical_template_parms;
90 #define UNIFY_ALLOW_NONE 0
91 #define UNIFY_ALLOW_MORE_CV_QUAL 1
92 #define UNIFY_ALLOW_LESS_CV_QUAL 2
93 #define UNIFY_ALLOW_DERIVED 4
94 #define UNIFY_ALLOW_INTEGER 8
95 #define UNIFY_ALLOW_OUTER_LEVEL 16
96 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
97 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
99 static void push_access_scope (tree);
100 static void pop_access_scope (tree);
101 static bool resolve_overloaded_unification (tree, tree, tree, tree,
102 unification_kind_t, int);
103 static int try_one_overload (tree, tree, tree, tree, tree,
104 unification_kind_t, int, bool);
105 static int unify (tree, tree, tree, tree, int);
106 static void add_pending_template (tree);
107 static int push_tinst_level (tree);
108 static void pop_tinst_level (void);
109 static tree reopen_tinst_level (struct tinst_level *);
110 static tree tsubst_initializer_list (tree, tree);
111 static tree get_class_bindings (tree, tree, tree);
112 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
113 bool, bool);
114 static void tsubst_enum (tree, tree, tree);
115 static tree add_to_template_args (tree, tree);
116 static tree add_outermost_template_args (tree, tree);
117 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
118 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
119 tree);
120 static int type_unification_real (tree, tree, tree, tree,
121 int, unification_kind_t, int);
122 static void note_template_header (int);
123 static tree convert_nontype_argument_function (tree, tree);
124 static tree convert_nontype_argument (tree, tree);
125 static tree convert_template_argument (tree, tree, tree,
126 tsubst_flags_t, int, tree);
127 static int for_each_template_parm (tree, tree_fn_t, void*,
128 struct pointer_set_t*);
129 static tree expand_template_argument_pack (tree);
130 static tree build_template_parm_index (int, int, int, tree, tree);
131 static bool inline_needs_template_parms (tree);
132 static void push_inline_template_parms_recursive (tree, int);
133 static tree retrieve_local_specialization (tree);
134 static void register_local_specialization (tree, tree);
135 static tree reduce_template_parm_level (tree, tree, int);
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 int template_args_equal (tree, tree);
162 static void tsubst_default_arguments (tree);
163 static tree for_each_template_parm_r (tree *, int *, void *);
164 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
165 static void copy_default_args_to_explicit_spec (tree);
166 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
167 static int eq_local_specializations (const void *, const void *);
168 static bool dependent_template_arg_p (tree);
169 static bool any_template_arguments_need_structural_equality_p (tree);
170 static bool dependent_type_p_r (tree);
171 static tree tsubst (tree, tree, tsubst_flags_t, tree);
172 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
173 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
174 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
176 /* Make the current scope suitable for access checking when we are
177 processing T. T can be FUNCTION_DECL for instantiated function
178 template, or VAR_DECL for static member variable (need by
179 instantiate_decl). */
181 static void
182 push_access_scope (tree t)
184 gcc_assert (TREE_CODE (t) == FUNCTION_DECL
185 || TREE_CODE (t) == VAR_DECL);
187 if (DECL_FRIEND_CONTEXT (t))
188 push_nested_class (DECL_FRIEND_CONTEXT (t));
189 else if (DECL_CLASS_SCOPE_P (t))
190 push_nested_class (DECL_CONTEXT (t));
191 else
192 push_to_top_level ();
194 if (TREE_CODE (t) == FUNCTION_DECL)
196 saved_access_scope = tree_cons
197 (NULL_TREE, current_function_decl, saved_access_scope);
198 current_function_decl = t;
202 /* Restore the scope set up by push_access_scope. T is the node we
203 are processing. */
205 static void
206 pop_access_scope (tree t)
208 if (TREE_CODE (t) == FUNCTION_DECL)
210 current_function_decl = TREE_VALUE (saved_access_scope);
211 saved_access_scope = TREE_CHAIN (saved_access_scope);
214 if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
215 pop_nested_class ();
216 else
217 pop_from_top_level ();
220 /* Do any processing required when DECL (a member template
221 declaration) is finished. Returns the TEMPLATE_DECL corresponding
222 to DECL, unless it is a specialization, in which case the DECL
223 itself is returned. */
225 tree
226 finish_member_template_decl (tree decl)
228 if (decl == error_mark_node)
229 return error_mark_node;
231 gcc_assert (DECL_P (decl));
233 if (TREE_CODE (decl) == TYPE_DECL)
235 tree type;
237 type = TREE_TYPE (decl);
238 if (IS_AGGR_TYPE (type)
239 && CLASSTYPE_TEMPLATE_INFO (type)
240 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
242 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
243 check_member_template (tmpl);
244 return tmpl;
246 return NULL_TREE;
248 else if (TREE_CODE (decl) == FIELD_DECL)
249 error ("data member %qD cannot be a member template", decl);
250 else if (DECL_TEMPLATE_INFO (decl))
252 if (!DECL_TEMPLATE_SPECIALIZATION (decl))
254 check_member_template (DECL_TI_TEMPLATE (decl));
255 return DECL_TI_TEMPLATE (decl);
257 else
258 return decl;
260 else
261 error ("invalid member template declaration %qD", decl);
263 return error_mark_node;
266 /* Returns the template nesting level of the indicated class TYPE.
268 For example, in:
269 template <class T>
270 struct A
272 template <class U>
273 struct B {};
276 A<T>::B<U> has depth two, while A<T> has depth one.
277 Both A<T>::B<int> and A<int>::B<U> have depth one, if
278 they are instantiations, not specializations.
280 This function is guaranteed to return 0 if passed NULL_TREE so
281 that, for example, `template_class_depth (current_class_type)' is
282 always safe. */
285 template_class_depth (tree type)
287 int depth;
289 for (depth = 0;
290 type && TREE_CODE (type) != NAMESPACE_DECL;
291 type = (TREE_CODE (type) == FUNCTION_DECL)
292 ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
294 if (TREE_CODE (type) != FUNCTION_DECL)
296 if (CLASSTYPE_TEMPLATE_INFO (type)
297 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type))
298 && uses_template_parms (CLASSTYPE_TI_ARGS (type)))
299 ++depth;
301 else
303 if (DECL_TEMPLATE_INFO (type)
304 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (type))
305 && uses_template_parms (DECL_TI_ARGS (type)))
306 ++depth;
310 return depth;
313 /* Subroutine of maybe_begin_member_template_processing.
314 Returns true if processing DECL needs us to push template parms. */
316 static bool
317 inline_needs_template_parms (tree decl)
319 if (! DECL_TEMPLATE_INFO (decl))
320 return false;
322 return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
323 > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
326 /* Subroutine of maybe_begin_member_template_processing.
327 Push the template parms in PARMS, starting from LEVELS steps into the
328 chain, and ending at the beginning, since template parms are listed
329 innermost first. */
331 static void
332 push_inline_template_parms_recursive (tree parmlist, int levels)
334 tree parms = TREE_VALUE (parmlist);
335 int i;
337 if (levels > 1)
338 push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
340 ++processing_template_decl;
341 current_template_parms
342 = tree_cons (size_int (processing_template_decl),
343 parms, current_template_parms);
344 TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
346 begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
347 NULL);
348 for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
350 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
352 if (parm == error_mark_node)
353 continue;
355 gcc_assert (DECL_P (parm));
357 switch (TREE_CODE (parm))
359 case TYPE_DECL:
360 case TEMPLATE_DECL:
361 pushdecl (parm);
362 break;
364 case PARM_DECL:
366 /* Make a CONST_DECL as is done in process_template_parm.
367 It is ugly that we recreate this here; the original
368 version built in process_template_parm is no longer
369 available. */
370 tree decl = build_decl (CONST_DECL, DECL_NAME (parm),
371 TREE_TYPE (parm));
372 DECL_ARTIFICIAL (decl) = 1;
373 TREE_CONSTANT (decl) = 1;
374 TREE_INVARIANT (decl) = 1;
375 TREE_READONLY (decl) = 1;
376 DECL_INITIAL (decl) = DECL_INITIAL (parm);
377 SET_DECL_TEMPLATE_PARM_P (decl);
378 pushdecl (decl);
380 break;
382 default:
383 gcc_unreachable ();
388 /* Restore the template parameter context for a member template or
389 a friend template defined in a class definition. */
391 void
392 maybe_begin_member_template_processing (tree decl)
394 tree parms;
395 int levels = 0;
397 if (inline_needs_template_parms (decl))
399 parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
400 levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
402 if (DECL_TEMPLATE_SPECIALIZATION (decl))
404 --levels;
405 parms = TREE_CHAIN (parms);
408 push_inline_template_parms_recursive (parms, levels);
411 /* Remember how many levels of template parameters we pushed so that
412 we can pop them later. */
413 VEC_safe_push (int, heap, inline_parm_levels, levels);
416 /* Undo the effects of maybe_begin_member_template_processing. */
418 void
419 maybe_end_member_template_processing (void)
421 int i;
422 int last;
424 if (VEC_length (int, inline_parm_levels) == 0)
425 return;
427 last = VEC_pop (int, inline_parm_levels);
428 for (i = 0; i < last; ++i)
430 --processing_template_decl;
431 current_template_parms = TREE_CHAIN (current_template_parms);
432 poplevel (0, 0, 0);
436 /* Return a new template argument vector which contains all of ARGS,
437 but has as its innermost set of arguments the EXTRA_ARGS. */
439 static tree
440 add_to_template_args (tree args, tree extra_args)
442 tree new_args;
443 int extra_depth;
444 int i;
445 int j;
447 extra_depth = TMPL_ARGS_DEPTH (extra_args);
448 new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
450 for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
451 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
453 for (j = 1; j <= extra_depth; ++j, ++i)
454 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
456 return new_args;
459 /* Like add_to_template_args, but only the outermost ARGS are added to
460 the EXTRA_ARGS. In particular, all but TMPL_ARGS_DEPTH
461 (EXTRA_ARGS) levels are added. This function is used to combine
462 the template arguments from a partial instantiation with the
463 template arguments used to attain the full instantiation from the
464 partial instantiation. */
466 static tree
467 add_outermost_template_args (tree args, tree extra_args)
469 tree new_args;
471 /* If there are more levels of EXTRA_ARGS than there are ARGS,
472 something very fishy is going on. */
473 gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
475 /* If *all* the new arguments will be the EXTRA_ARGS, just return
476 them. */
477 if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
478 return extra_args;
480 /* For the moment, we make ARGS look like it contains fewer levels. */
481 TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
483 new_args = add_to_template_args (args, extra_args);
485 /* Now, we restore ARGS to its full dimensions. */
486 TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
488 return new_args;
491 /* Return the N levels of innermost template arguments from the ARGS. */
493 tree
494 get_innermost_template_args (tree args, int n)
496 tree new_args;
497 int extra_levels;
498 int i;
500 gcc_assert (n >= 0);
502 /* If N is 1, just return the innermost set of template arguments. */
503 if (n == 1)
504 return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
506 /* If we're not removing anything, just return the arguments we were
507 given. */
508 extra_levels = TMPL_ARGS_DEPTH (args) - n;
509 gcc_assert (extra_levels >= 0);
510 if (extra_levels == 0)
511 return args;
513 /* Make a new set of arguments, not containing the outer arguments. */
514 new_args = make_tree_vec (n);
515 for (i = 1; i <= n; ++i)
516 SET_TMPL_ARGS_LEVEL (new_args, i,
517 TMPL_ARGS_LEVEL (args, i + extra_levels));
519 return new_args;
522 /* The inverse of get_innermost_template_args: Return all but the innermost
523 EXTRA_LEVELS levels of template arguments from the ARGS. */
525 static tree
526 strip_innermost_template_args (tree args, int extra_levels)
528 tree new_args;
529 int n = TMPL_ARGS_DEPTH (args) - extra_levels;
530 int i;
532 gcc_assert (n >= 0);
534 /* If N is 1, just return the outermost set of template arguments. */
535 if (n == 1)
536 return TMPL_ARGS_LEVEL (args, 1);
538 /* If we're not removing anything, just return the arguments we were
539 given. */
540 gcc_assert (extra_levels >= 0);
541 if (extra_levels == 0)
542 return args;
544 /* Make a new set of arguments, not containing the inner arguments. */
545 new_args = make_tree_vec (n);
546 for (i = 1; i <= n; ++i)
547 SET_TMPL_ARGS_LEVEL (new_args, i,
548 TMPL_ARGS_LEVEL (args, i));
550 return new_args;
553 /* We've got a template header coming up; push to a new level for storing
554 the parms. */
556 void
557 begin_template_parm_list (void)
559 /* We use a non-tag-transparent scope here, which causes pushtag to
560 put tags in this scope, rather than in the enclosing class or
561 namespace scope. This is the right thing, since we want
562 TEMPLATE_DECLS, and not TYPE_DECLS for template classes. For a
563 global template class, push_template_decl handles putting the
564 TEMPLATE_DECL into top-level scope. For a nested template class,
565 e.g.:
567 template <class T> struct S1 {
568 template <class T> struct S2 {};
571 pushtag contains special code to call pushdecl_with_scope on the
572 TEMPLATE_DECL for S2. */
573 begin_scope (sk_template_parms, NULL);
574 ++processing_template_decl;
575 ++processing_template_parmlist;
576 note_template_header (0);
579 /* This routine is called when a specialization is declared. If it is
580 invalid to declare a specialization here, an error is reported and
581 false is returned, otherwise this routine will return true. */
583 static bool
584 check_specialization_scope (void)
586 tree scope = current_scope ();
588 /* [temp.expl.spec]
590 An explicit specialization shall be declared in the namespace of
591 which the template is a member, or, for member templates, in the
592 namespace of which the enclosing class or enclosing class
593 template is a member. An explicit specialization of a member
594 function, member class or static data member of a class template
595 shall be declared in the namespace of which the class template
596 is a member. */
597 if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
599 error ("explicit specialization in non-namespace scope %qD", scope);
600 return false;
603 /* [temp.expl.spec]
605 In an explicit specialization declaration for a member of a class
606 template or a member template that appears in namespace scope,
607 the member template and some of its enclosing class templates may
608 remain unspecialized, except that the declaration shall not
609 explicitly specialize a class member template if its enclosing
610 class templates are not explicitly specialized as well. */
611 if (current_template_parms)
613 error ("enclosing class templates are not explicitly specialized");
614 return false;
617 return true;
620 /* We've just seen template <>. */
622 bool
623 begin_specialization (void)
625 begin_scope (sk_template_spec, NULL);
626 note_template_header (1);
627 return check_specialization_scope ();
630 /* Called at then end of processing a declaration preceded by
631 template<>. */
633 void
634 end_specialization (void)
636 finish_scope ();
637 reset_specialization ();
640 /* Any template <>'s that we have seen thus far are not referring to a
641 function specialization. */
643 void
644 reset_specialization (void)
646 processing_specialization = 0;
647 template_header_count = 0;
650 /* We've just seen a template header. If SPECIALIZATION is nonzero,
651 it was of the form template <>. */
653 static void
654 note_template_header (int specialization)
656 processing_specialization = specialization;
657 template_header_count++;
660 /* We're beginning an explicit instantiation. */
662 void
663 begin_explicit_instantiation (void)
665 gcc_assert (!processing_explicit_instantiation);
666 processing_explicit_instantiation = true;
670 void
671 end_explicit_instantiation (void)
673 gcc_assert (processing_explicit_instantiation);
674 processing_explicit_instantiation = false;
677 /* An explicit specialization or partial specialization TMPL is being
678 declared. Check that the namespace in which the specialization is
679 occurring is permissible. Returns false iff it is invalid to
680 specialize TMPL in the current namespace. */
682 static bool
683 check_specialization_namespace (tree tmpl)
685 tree tpl_ns = decl_namespace_context (tmpl);
687 /* [tmpl.expl.spec]
689 An explicit specialization shall be declared in the namespace of
690 which the template is a member, or, for member templates, in the
691 namespace of which the enclosing class or enclosing class
692 template is a member. An explicit specialization of a member
693 function, member class or static data member of a class template
694 shall be declared in the namespace of which the class template is
695 a member. */
696 if (is_associated_namespace (current_namespace, tpl_ns))
697 /* Same or super-using namespace. */
698 return true;
699 else
701 pedwarn ("specialization of %qD in different namespace", tmpl);
702 pedwarn (" from definition of %q+#D", tmpl);
703 return false;
707 /* SPEC is an explicit instantiation. Check that it is valid to
708 perform this explicit instantiation in the current namespace. */
710 static void
711 check_explicit_instantiation_namespace (tree spec)
713 tree ns;
715 /* DR 275: An explicit instantiation shall appear in an enclosing
716 namespace of its template. */
717 ns = decl_namespace_context (spec);
718 if (!is_ancestor (current_namespace, ns))
719 pedwarn ("explicit instantiation of %qD in namespace %qD "
720 "(which does not enclose namespace %qD)",
721 spec, current_namespace, ns);
724 /* The TYPE is being declared. If it is a template type, that means it
725 is a partial specialization. Do appropriate error-checking. */
727 tree
728 maybe_process_partial_specialization (tree type)
730 tree context;
732 if (type == error_mark_node)
733 return error_mark_node;
735 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
737 error ("name of class shadows template template parameter %qD",
738 TYPE_NAME (type));
739 return error_mark_node;
742 context = TYPE_CONTEXT (type);
744 if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
746 /* This is for ordinary explicit specialization and partial
747 specialization of a template class such as:
749 template <> class C<int>;
753 template <class T> class C<T*>;
755 Make sure that `C<int>' and `C<T*>' are implicit instantiations. */
757 if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
758 && !COMPLETE_TYPE_P (type))
760 check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
761 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
762 if (processing_template_decl)
763 push_template_decl (TYPE_MAIN_DECL (type));
765 else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
766 error ("specialization of %qT after instantiation", type);
768 else if (CLASS_TYPE_P (type)
769 && !CLASSTYPE_USE_TEMPLATE (type)
770 && CLASSTYPE_TEMPLATE_INFO (type)
771 && context && CLASS_TYPE_P (context)
772 && CLASSTYPE_TEMPLATE_INFO (context))
774 /* This is for an explicit specialization of member class
775 template according to [temp.expl.spec/18]:
777 template <> template <class U> class C<int>::D;
779 The context `C<int>' must be an implicit instantiation.
780 Otherwise this is just a member class template declared
781 earlier like:
783 template <> class C<int> { template <class U> class D; };
784 template <> template <class U> class C<int>::D;
786 In the first case, `C<int>::D' is a specialization of `C<T>::D'
787 while in the second case, `C<int>::D' is a primary template
788 and `C<T>::D' may not exist. */
790 if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
791 && !COMPLETE_TYPE_P (type))
793 tree t;
795 if (current_namespace
796 != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
798 pedwarn ("specializing %q#T in different namespace", type);
799 pedwarn (" from definition of %q+#D",
800 CLASSTYPE_TI_TEMPLATE (type));
803 /* Check for invalid specialization after instantiation:
805 template <> template <> class C<int>::D<int>;
806 template <> template <class U> class C<int>::D; */
808 for (t = DECL_TEMPLATE_INSTANTIATIONS
809 (most_general_template (CLASSTYPE_TI_TEMPLATE (type)));
810 t; t = TREE_CHAIN (t))
811 if (TREE_VALUE (t) != type
812 && TYPE_CONTEXT (TREE_VALUE (t)) == context)
813 error ("specialization %qT after instantiation %qT",
814 type, TREE_VALUE (t));
816 /* Mark TYPE as a specialization. And as a result, we only
817 have one level of template argument for the innermost
818 class template. */
819 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
820 CLASSTYPE_TI_ARGS (type)
821 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
824 else if (processing_specialization)
826 error ("explicit specialization of non-template %qT", type);
827 return error_mark_node;
830 return type;
833 /* Returns nonzero if we can optimize the retrieval of specializations
834 for TMPL, a TEMPLATE_DECL. In particular, for such a template, we
835 do not use DECL_TEMPLATE_SPECIALIZATIONS at all. */
837 static inline bool
838 optimize_specialization_lookup_p (tree tmpl)
840 return (DECL_FUNCTION_TEMPLATE_P (tmpl)
841 && DECL_CLASS_SCOPE_P (tmpl)
842 /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
843 parameter. */
844 && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
845 /* The optimized lookup depends on the fact that the
846 template arguments for the member function template apply
847 purely to the containing class, which is not true if the
848 containing class is an explicit or partial
849 specialization. */
850 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
851 && !DECL_MEMBER_TEMPLATE_P (tmpl)
852 && !DECL_CONV_FN_P (tmpl)
853 /* It is possible to have a template that is not a member
854 template and is not a member of a template class:
856 template <typename T>
857 struct S { friend A::f(); };
859 Here, the friend function is a template, but the context does
860 not have template information. The optimized lookup relies
861 on having ARGS be the template arguments for both the class
862 and the function template. */
863 && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
866 /* Retrieve the specialization (in the sense of [temp.spec] - a
867 specialization is either an instantiation or an explicit
868 specialization) of TMPL for the given template ARGS. If there is
869 no such specialization, return NULL_TREE. The ARGS are a vector of
870 arguments, or a vector of vectors of arguments, in the case of
871 templates with more than one level of parameters.
873 If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
874 then we search for a partial specialization matching ARGS. This
875 parameter is ignored if TMPL is not a class template. */
877 static tree
878 retrieve_specialization (tree tmpl, tree args,
879 bool class_specializations_p)
881 if (args == error_mark_node)
882 return NULL_TREE;
884 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
886 /* There should be as many levels of arguments as there are
887 levels of parameters. */
888 gcc_assert (TMPL_ARGS_DEPTH (args)
889 == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
891 if (optimize_specialization_lookup_p (tmpl))
893 tree class_template;
894 tree class_specialization;
895 VEC(tree,gc) *methods;
896 tree fns;
897 int idx;
899 /* The template arguments actually apply to the containing
900 class. Find the class specialization with those
901 arguments. */
902 class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
903 class_specialization
904 = retrieve_specialization (class_template, args,
905 /*class_specializations_p=*/false);
906 if (!class_specialization)
907 return NULL_TREE;
908 /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
909 for the specialization. */
910 idx = class_method_index_for_fn (class_specialization, tmpl);
911 if (idx == -1)
912 return NULL_TREE;
913 /* Iterate through the methods with the indicated name, looking
914 for the one that has an instance of TMPL. */
915 methods = CLASSTYPE_METHOD_VEC (class_specialization);
916 for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
918 tree fn = OVL_CURRENT (fns);
919 if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl)
920 return fn;
922 return NULL_TREE;
924 else
926 tree *sp;
927 tree *head;
929 /* Class templates store their instantiations on the
930 DECL_TEMPLATE_INSTANTIATIONS list; other templates use the
931 DECL_TEMPLATE_SPECIALIZATIONS list. */
932 if (!class_specializations_p
933 && TREE_CODE (DECL_TEMPLATE_RESULT (tmpl)) == TYPE_DECL
934 && TAGGED_TYPE_P (TREE_TYPE (tmpl)))
935 sp = &DECL_TEMPLATE_INSTANTIATIONS (tmpl);
936 else
937 sp = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
938 head = sp;
939 /* Iterate through the list until we find a matching template. */
940 while (*sp != NULL_TREE)
942 tree spec = *sp;
944 if (comp_template_args (TREE_PURPOSE (spec), args))
946 /* Use the move-to-front heuristic to speed up future
947 searches. */
948 if (spec != *head)
950 *sp = TREE_CHAIN (*sp);
951 TREE_CHAIN (spec) = *head;
952 *head = spec;
954 return TREE_VALUE (spec);
956 sp = &TREE_CHAIN (spec);
960 return NULL_TREE;
963 /* Like retrieve_specialization, but for local declarations. */
965 static tree
966 retrieve_local_specialization (tree tmpl)
968 tree spec = (tree) htab_find_with_hash (local_specializations, tmpl,
969 htab_hash_pointer (tmpl));
970 return spec ? TREE_PURPOSE (spec) : NULL_TREE;
973 /* Returns nonzero iff DECL is a specialization of TMPL. */
976 is_specialization_of (tree decl, tree tmpl)
978 tree t;
980 if (TREE_CODE (decl) == FUNCTION_DECL)
982 for (t = decl;
983 t != NULL_TREE;
984 t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
985 if (t == tmpl)
986 return 1;
988 else
990 gcc_assert (TREE_CODE (decl) == TYPE_DECL);
992 for (t = TREE_TYPE (decl);
993 t != NULL_TREE;
994 t = CLASSTYPE_USE_TEMPLATE (t)
995 ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
996 if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
997 return 1;
1000 return 0;
1003 /* Returns nonzero iff DECL is a specialization of friend declaration
1004 FRIEND according to [temp.friend]. */
1006 bool
1007 is_specialization_of_friend (tree decl, tree friend)
1009 bool need_template = true;
1010 int template_depth;
1012 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1013 || TREE_CODE (decl) == TYPE_DECL);
1015 /* For [temp.friend/6] when FRIEND is an ordinary member function
1016 of a template class, we want to check if DECL is a specialization
1017 if this. */
1018 if (TREE_CODE (friend) == FUNCTION_DECL
1019 && DECL_TEMPLATE_INFO (friend)
1020 && !DECL_USE_TEMPLATE (friend))
1022 /* We want a TEMPLATE_DECL for `is_specialization_of'. */
1023 friend = DECL_TI_TEMPLATE (friend);
1024 need_template = false;
1026 else if (TREE_CODE (friend) == TEMPLATE_DECL
1027 && !PRIMARY_TEMPLATE_P (friend))
1028 need_template = false;
1030 /* There is nothing to do if this is not a template friend. */
1031 if (TREE_CODE (friend) != TEMPLATE_DECL)
1032 return false;
1034 if (is_specialization_of (decl, friend))
1035 return true;
1037 /* [temp.friend/6]
1038 A member of a class template may be declared to be a friend of a
1039 non-template class. In this case, the corresponding member of
1040 every specialization of the class template is a friend of the
1041 class granting friendship.
1043 For example, given a template friend declaration
1045 template <class T> friend void A<T>::f();
1047 the member function below is considered a friend
1049 template <> struct A<int> {
1050 void f();
1053 For this type of template friend, TEMPLATE_DEPTH below will be
1054 nonzero. To determine if DECL is a friend of FRIEND, we first
1055 check if the enclosing class is a specialization of another. */
1057 template_depth = template_class_depth (DECL_CONTEXT (friend));
1058 if (template_depth
1059 && DECL_CLASS_SCOPE_P (decl)
1060 && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1061 CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend))))
1063 /* Next, we check the members themselves. In order to handle
1064 a few tricky cases, such as when FRIEND's are
1066 template <class T> friend void A<T>::g(T t);
1067 template <class T> template <T t> friend void A<T>::h();
1069 and DECL's are
1071 void A<int>::g(int);
1072 template <int> void A<int>::h();
1074 we need to figure out ARGS, the template arguments from
1075 the context of DECL. This is required for template substitution
1076 of `T' in the function parameter of `g' and template parameter
1077 of `h' in the above examples. Here ARGS corresponds to `int'. */
1079 tree context = DECL_CONTEXT (decl);
1080 tree args = NULL_TREE;
1081 int current_depth = 0;
1083 while (current_depth < template_depth)
1085 if (CLASSTYPE_TEMPLATE_INFO (context))
1087 if (current_depth == 0)
1088 args = TYPE_TI_ARGS (context);
1089 else
1090 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1091 current_depth++;
1093 context = TYPE_CONTEXT (context);
1096 if (TREE_CODE (decl) == FUNCTION_DECL)
1098 bool is_template;
1099 tree friend_type;
1100 tree decl_type;
1101 tree friend_args_type;
1102 tree decl_args_type;
1104 /* Make sure that both DECL and FRIEND are templates or
1105 non-templates. */
1106 is_template = DECL_TEMPLATE_INFO (decl)
1107 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1108 if (need_template ^ is_template)
1109 return false;
1110 else if (is_template)
1112 /* If both are templates, check template parameter list. */
1113 tree friend_parms
1114 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1115 args, tf_none);
1116 if (!comp_template_parms
1117 (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1118 friend_parms))
1119 return false;
1121 decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1123 else
1124 decl_type = TREE_TYPE (decl);
1126 friend_type = tsubst_function_type (TREE_TYPE (friend), args,
1127 tf_none, NULL_TREE);
1128 if (friend_type == error_mark_node)
1129 return false;
1131 /* Check if return types match. */
1132 if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1133 return false;
1135 /* Check if function parameter types match, ignoring the
1136 `this' parameter. */
1137 friend_args_type = TYPE_ARG_TYPES (friend_type);
1138 decl_args_type = TYPE_ARG_TYPES (decl_type);
1139 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend))
1140 friend_args_type = TREE_CHAIN (friend_args_type);
1141 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1142 decl_args_type = TREE_CHAIN (decl_args_type);
1144 return compparms (decl_args_type, friend_args_type);
1146 else
1148 /* DECL is a TYPE_DECL */
1149 bool is_template;
1150 tree decl_type = TREE_TYPE (decl);
1152 /* Make sure that both DECL and FRIEND are templates or
1153 non-templates. */
1154 is_template
1155 = CLASSTYPE_TEMPLATE_INFO (decl_type)
1156 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1158 if (need_template ^ is_template)
1159 return false;
1160 else if (is_template)
1162 tree friend_parms;
1163 /* If both are templates, check the name of the two
1164 TEMPLATE_DECL's first because is_friend didn't. */
1165 if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1166 != DECL_NAME (friend))
1167 return false;
1169 /* Now check template parameter list. */
1170 friend_parms
1171 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1172 args, tf_none);
1173 return comp_template_parms
1174 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1175 friend_parms);
1177 else
1178 return (DECL_NAME (decl)
1179 == DECL_NAME (friend));
1182 return false;
1185 /* Register the specialization SPEC as a specialization of TMPL with
1186 the indicated ARGS. IS_FRIEND indicates whether the specialization
1187 is actually just a friend declaration. Returns SPEC, or an
1188 equivalent prior declaration, if available. */
1190 static tree
1191 register_specialization (tree spec, tree tmpl, tree args, bool is_friend)
1193 tree fn;
1195 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
1197 if (TREE_CODE (spec) == FUNCTION_DECL
1198 && uses_template_parms (DECL_TI_ARGS (spec)))
1199 /* This is the FUNCTION_DECL for a partial instantiation. Don't
1200 register it; we want the corresponding TEMPLATE_DECL instead.
1201 We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1202 the more obvious `uses_template_parms (spec)' to avoid problems
1203 with default function arguments. In particular, given
1204 something like this:
1206 template <class T> void f(T t1, T t = T())
1208 the default argument expression is not substituted for in an
1209 instantiation unless and until it is actually needed. */
1210 return spec;
1212 fn = retrieve_specialization (tmpl, args,
1213 /*class_specializations_p=*/false);
1214 /* We can sometimes try to re-register a specialization that we've
1215 already got. In particular, regenerate_decl_from_template calls
1216 duplicate_decls which will update the specialization list. But,
1217 we'll still get called again here anyhow. It's more convenient
1218 to simply allow this than to try to prevent it. */
1219 if (fn == spec)
1220 return spec;
1221 else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1223 if (DECL_TEMPLATE_INSTANTIATION (fn))
1225 if (TREE_USED (fn)
1226 || DECL_EXPLICIT_INSTANTIATION (fn))
1228 error ("specialization of %qD after instantiation",
1229 fn);
1230 return error_mark_node;
1232 else
1234 tree clone;
1235 /* This situation should occur only if the first
1236 specialization is an implicit instantiation, the
1237 second is an explicit specialization, and the
1238 implicit instantiation has not yet been used. That
1239 situation can occur if we have implicitly
1240 instantiated a member function and then specialized
1241 it later.
1243 We can also wind up here if a friend declaration that
1244 looked like an instantiation turns out to be a
1245 specialization:
1247 template <class T> void foo(T);
1248 class S { friend void foo<>(int) };
1249 template <> void foo(int);
1251 We transform the existing DECL in place so that any
1252 pointers to it become pointers to the updated
1253 declaration.
1255 If there was a definition for the template, but not
1256 for the specialization, we want this to look as if
1257 there were no definition, and vice versa. */
1258 DECL_INITIAL (fn) = NULL_TREE;
1259 duplicate_decls (spec, fn, is_friend);
1260 /* The call to duplicate_decls will have applied
1261 [temp.expl.spec]:
1263 An explicit specialization of a function template
1264 is inline only if it is explicitly declared to be,
1265 and independently of whether its function template
1268 to the primary function; now copy the inline bits to
1269 the various clones. */
1270 FOR_EACH_CLONE (clone, fn)
1272 DECL_DECLARED_INLINE_P (clone)
1273 = DECL_DECLARED_INLINE_P (fn);
1274 DECL_INLINE (clone)
1275 = DECL_INLINE (fn);
1277 check_specialization_namespace (fn);
1279 return fn;
1282 else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1284 if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1285 /* Dup decl failed, but this is a new definition. Set the
1286 line number so any errors match this new
1287 definition. */
1288 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1290 return fn;
1294 /* A specialization must be declared in the same namespace as the
1295 template it is specializing. */
1296 if (DECL_TEMPLATE_SPECIALIZATION (spec)
1297 && !check_specialization_namespace (tmpl))
1298 DECL_CONTEXT (spec) = FROB_CONTEXT (decl_namespace_context (tmpl));
1300 if (!optimize_specialization_lookup_p (tmpl))
1301 DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
1302 = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
1304 return spec;
1307 /* Unregister the specialization SPEC as a specialization of TMPL.
1308 Replace it with NEW_SPEC, if NEW_SPEC is non-NULL. Returns true
1309 if the SPEC was listed as a specialization of TMPL. */
1311 bool
1312 reregister_specialization (tree spec, tree tmpl, tree new_spec)
1314 tree* s;
1316 for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
1317 *s != NULL_TREE;
1318 s = &TREE_CHAIN (*s))
1319 if (TREE_VALUE (*s) == spec)
1321 if (!new_spec)
1322 *s = TREE_CHAIN (*s);
1323 else
1324 TREE_VALUE (*s) = new_spec;
1325 return 1;
1328 return 0;
1331 /* Compare an entry in the local specializations hash table P1 (which
1332 is really a pointer to a TREE_LIST) with P2 (which is really a
1333 DECL). */
1335 static int
1336 eq_local_specializations (const void *p1, const void *p2)
1338 return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1341 /* Hash P1, an entry in the local specializations table. */
1343 static hashval_t
1344 hash_local_specialization (const void* p1)
1346 return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1349 /* Like register_specialization, but for local declarations. We are
1350 registering SPEC, an instantiation of TMPL. */
1352 static void
1353 register_local_specialization (tree spec, tree tmpl)
1355 void **slot;
1357 slot = htab_find_slot_with_hash (local_specializations, tmpl,
1358 htab_hash_pointer (tmpl), INSERT);
1359 *slot = build_tree_list (spec, tmpl);
1362 /* TYPE is a class type. Returns true if TYPE is an explicitly
1363 specialized class. */
1365 bool
1366 explicit_class_specialization_p (tree type)
1368 if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1369 return false;
1370 return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1373 /* Print the list of candidate FNS in an error message. */
1375 void
1376 print_candidates (tree fns)
1378 tree fn;
1380 const char *str = "candidates are:";
1382 for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
1384 tree f;
1386 for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
1387 error ("%s %+#D", str, OVL_CURRENT (f));
1388 str = " ";
1392 /* Returns the template (one of the functions given by TEMPLATE_ID)
1393 which can be specialized to match the indicated DECL with the
1394 explicit template args given in TEMPLATE_ID. The DECL may be
1395 NULL_TREE if none is available. In that case, the functions in
1396 TEMPLATE_ID are non-members.
1398 If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1399 specialization of a member template.
1401 The TEMPLATE_COUNT is the number of references to qualifying
1402 template classes that appeared in the name of the function. See
1403 check_explicit_specialization for a more accurate description.
1405 TSK indicates what kind of template declaration (if any) is being
1406 declared. TSK_TEMPLATE indicates that the declaration given by
1407 DECL, though a FUNCTION_DECL, has template parameters, and is
1408 therefore a template function.
1410 The template args (those explicitly specified and those deduced)
1411 are output in a newly created vector *TARGS_OUT.
1413 If it is impossible to determine the result, an error message is
1414 issued. The error_mark_node is returned to indicate failure. */
1416 static tree
1417 determine_specialization (tree template_id,
1418 tree decl,
1419 tree* targs_out,
1420 int need_member_template,
1421 int template_count,
1422 tmpl_spec_kind tsk)
1424 tree fns;
1425 tree targs;
1426 tree explicit_targs;
1427 tree candidates = NULL_TREE;
1428 /* A TREE_LIST of templates of which DECL may be a specialization.
1429 The TREE_VALUE of each node is a TEMPLATE_DECL. The
1430 corresponding TREE_PURPOSE is the set of template arguments that,
1431 when used to instantiate the template, would produce a function
1432 with the signature of DECL. */
1433 tree templates = NULL_TREE;
1434 int header_count;
1435 struct cp_binding_level *b;
1437 *targs_out = NULL_TREE;
1439 if (template_id == error_mark_node || decl == error_mark_node)
1440 return error_mark_node;
1442 fns = TREE_OPERAND (template_id, 0);
1443 explicit_targs = TREE_OPERAND (template_id, 1);
1445 if (fns == error_mark_node)
1446 return error_mark_node;
1448 /* Check for baselinks. */
1449 if (BASELINK_P (fns))
1450 fns = BASELINK_FUNCTIONS (fns);
1452 if (!is_overloaded_fn (fns))
1454 error ("%qD is not a function template", fns);
1455 return error_mark_node;
1458 /* Count the number of template headers specified for this
1459 specialization. */
1460 header_count = 0;
1461 for (b = current_binding_level;
1462 b->kind == sk_template_parms;
1463 b = b->level_chain)
1464 ++header_count;
1466 for (; fns; fns = OVL_NEXT (fns))
1468 tree fn = OVL_CURRENT (fns);
1470 if (TREE_CODE (fn) == TEMPLATE_DECL)
1472 tree decl_arg_types;
1473 tree fn_arg_types;
1475 /* In case of explicit specialization, we need to check if
1476 the number of template headers appearing in the specialization
1477 is correct. This is usually done in check_explicit_specialization,
1478 but the check done there cannot be exhaustive when specializing
1479 member functions. Consider the following code:
1481 template <> void A<int>::f(int);
1482 template <> template <> void A<int>::f(int);
1484 Assuming that A<int> is not itself an explicit specialization
1485 already, the first line specializes "f" which is a non-template
1486 member function, whilst the second line specializes "f" which
1487 is a template member function. So both lines are syntactically
1488 correct, and check_explicit_specialization does not reject
1489 them.
1491 Here, we can do better, as we are matching the specialization
1492 against the declarations. We count the number of template
1493 headers, and we check if they match TEMPLATE_COUNT + 1
1494 (TEMPLATE_COUNT is the number of qualifying template classes,
1495 plus there must be another header for the member template
1496 itself).
1498 Notice that if header_count is zero, this is not a
1499 specialization but rather a template instantiation, so there
1500 is no check we can perform here. */
1501 if (header_count && header_count != template_count + 1)
1502 continue;
1504 /* Check that the number of template arguments at the
1505 innermost level for DECL is the same as for FN. */
1506 if (current_binding_level->kind == sk_template_parms
1507 && !current_binding_level->explicit_spec_p
1508 && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1509 != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1510 (current_template_parms))))
1511 continue;
1513 /* DECL might be a specialization of FN. */
1514 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1515 fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1517 /* For a non-static member function, we need to make sure
1518 that the const qualification is the same. Since
1519 get_bindings does not try to merge the "this" parameter,
1520 we must do the comparison explicitly. */
1521 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1522 && !same_type_p (TREE_VALUE (fn_arg_types),
1523 TREE_VALUE (decl_arg_types)))
1524 continue;
1526 /* Skip the "this" parameter and, for constructors of
1527 classes with virtual bases, the VTT parameter. A
1528 full specialization of a constructor will have a VTT
1529 parameter, but a template never will. */
1530 decl_arg_types
1531 = skip_artificial_parms_for (decl, decl_arg_types);
1532 fn_arg_types
1533 = skip_artificial_parms_for (fn, fn_arg_types);
1535 /* Check that the number of function parameters matches.
1536 For example,
1537 template <class T> void f(int i = 0);
1538 template <> void f<int>();
1539 The specialization f<int> is invalid but is not caught
1540 by get_bindings below. */
1541 if (list_length (fn_arg_types) != list_length (decl_arg_types))
1542 continue;
1544 /* Function templates cannot be specializations; there are
1545 no partial specializations of functions. Therefore, if
1546 the type of DECL does not match FN, there is no
1547 match. */
1548 if (tsk == tsk_template)
1550 if (compparms (fn_arg_types, decl_arg_types))
1551 candidates = tree_cons (NULL_TREE, fn, candidates);
1552 continue;
1555 /* See whether this function might be a specialization of this
1556 template. */
1557 targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1559 if (!targs)
1560 /* We cannot deduce template arguments that when used to
1561 specialize TMPL will produce DECL. */
1562 continue;
1564 /* Save this template, and the arguments deduced. */
1565 templates = tree_cons (targs, fn, templates);
1567 else if (need_member_template)
1568 /* FN is an ordinary member function, and we need a
1569 specialization of a member template. */
1571 else if (TREE_CODE (fn) != FUNCTION_DECL)
1572 /* We can get IDENTIFIER_NODEs here in certain erroneous
1573 cases. */
1575 else if (!DECL_FUNCTION_MEMBER_P (fn))
1576 /* This is just an ordinary non-member function. Nothing can
1577 be a specialization of that. */
1579 else if (DECL_ARTIFICIAL (fn))
1580 /* Cannot specialize functions that are created implicitly. */
1582 else
1584 tree decl_arg_types;
1586 /* This is an ordinary member function. However, since
1587 we're here, we can assume it's enclosing class is a
1588 template class. For example,
1590 template <typename T> struct S { void f(); };
1591 template <> void S<int>::f() {}
1593 Here, S<int>::f is a non-template, but S<int> is a
1594 template class. If FN has the same type as DECL, we
1595 might be in business. */
1597 if (!DECL_TEMPLATE_INFO (fn))
1598 /* Its enclosing class is an explicit specialization
1599 of a template class. This is not a candidate. */
1600 continue;
1602 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1603 TREE_TYPE (TREE_TYPE (fn))))
1604 /* The return types differ. */
1605 continue;
1607 /* Adjust the type of DECL in case FN is a static member. */
1608 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1609 if (DECL_STATIC_FUNCTION_P (fn)
1610 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1611 decl_arg_types = TREE_CHAIN (decl_arg_types);
1613 if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1614 decl_arg_types))
1615 /* They match! */
1616 candidates = tree_cons (NULL_TREE, fn, candidates);
1620 if (templates && TREE_CHAIN (templates))
1622 /* We have:
1624 [temp.expl.spec]
1626 It is possible for a specialization with a given function
1627 signature to be instantiated from more than one function
1628 template. In such cases, explicit specification of the
1629 template arguments must be used to uniquely identify the
1630 function template specialization being specialized.
1632 Note that here, there's no suggestion that we're supposed to
1633 determine which of the candidate templates is most
1634 specialized. However, we, also have:
1636 [temp.func.order]
1638 Partial ordering of overloaded function template
1639 declarations is used in the following contexts to select
1640 the function template to which a function template
1641 specialization refers:
1643 -- when an explicit specialization refers to a function
1644 template.
1646 So, we do use the partial ordering rules, at least for now.
1647 This extension can only serve to make invalid programs valid,
1648 so it's safe. And, there is strong anecdotal evidence that
1649 the committee intended the partial ordering rules to apply;
1650 the EDG front end has that behavior, and John Spicer claims
1651 that the committee simply forgot to delete the wording in
1652 [temp.expl.spec]. */
1653 tree tmpl = most_specialized_instantiation (templates);
1654 if (tmpl != error_mark_node)
1656 templates = tmpl;
1657 TREE_CHAIN (templates) = NULL_TREE;
1661 if (templates == NULL_TREE && candidates == NULL_TREE)
1663 error ("template-id %qD for %q+D does not match any template "
1664 "declaration", template_id, decl);
1665 return error_mark_node;
1667 else if ((templates && TREE_CHAIN (templates))
1668 || (candidates && TREE_CHAIN (candidates))
1669 || (templates && candidates))
1671 error ("ambiguous template specialization %qD for %q+D",
1672 template_id, decl);
1673 chainon (candidates, templates);
1674 print_candidates (candidates);
1675 return error_mark_node;
1678 /* We have one, and exactly one, match. */
1679 if (candidates)
1681 tree fn = TREE_VALUE (candidates);
1682 /* DECL is a re-declaration of a template function. */
1683 if (TREE_CODE (fn) == TEMPLATE_DECL)
1684 return fn;
1685 /* It was a specialization of an ordinary member function in a
1686 template class. */
1687 *targs_out = copy_node (DECL_TI_ARGS (fn));
1688 return DECL_TI_TEMPLATE (fn);
1691 /* It was a specialization of a template. */
1692 targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
1693 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1695 *targs_out = copy_node (targs);
1696 SET_TMPL_ARGS_LEVEL (*targs_out,
1697 TMPL_ARGS_DEPTH (*targs_out),
1698 TREE_PURPOSE (templates));
1700 else
1701 *targs_out = TREE_PURPOSE (templates);
1702 return TREE_VALUE (templates);
1705 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1706 but with the default argument values filled in from those in the
1707 TMPL_TYPES. */
1709 static tree
1710 copy_default_args_to_explicit_spec_1 (tree spec_types,
1711 tree tmpl_types)
1713 tree new_spec_types;
1715 if (!spec_types)
1716 return NULL_TREE;
1718 if (spec_types == void_list_node)
1719 return void_list_node;
1721 /* Substitute into the rest of the list. */
1722 new_spec_types =
1723 copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
1724 TREE_CHAIN (tmpl_types));
1726 /* Add the default argument for this parameter. */
1727 return hash_tree_cons (TREE_PURPOSE (tmpl_types),
1728 TREE_VALUE (spec_types),
1729 new_spec_types);
1732 /* DECL is an explicit specialization. Replicate default arguments
1733 from the template it specializes. (That way, code like:
1735 template <class T> void f(T = 3);
1736 template <> void f(double);
1737 void g () { f (); }
1739 works, as required.) An alternative approach would be to look up
1740 the correct default arguments at the call-site, but this approach
1741 is consistent with how implicit instantiations are handled. */
1743 static void
1744 copy_default_args_to_explicit_spec (tree decl)
1746 tree tmpl;
1747 tree spec_types;
1748 tree tmpl_types;
1749 tree new_spec_types;
1750 tree old_type;
1751 tree new_type;
1752 tree t;
1753 tree object_type = NULL_TREE;
1754 tree in_charge = NULL_TREE;
1755 tree vtt = NULL_TREE;
1757 /* See if there's anything we need to do. */
1758 tmpl = DECL_TI_TEMPLATE (decl);
1759 tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
1760 for (t = tmpl_types; t; t = TREE_CHAIN (t))
1761 if (TREE_PURPOSE (t))
1762 break;
1763 if (!t)
1764 return;
1766 old_type = TREE_TYPE (decl);
1767 spec_types = TYPE_ARG_TYPES (old_type);
1769 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1771 /* Remove the this pointer, but remember the object's type for
1772 CV quals. */
1773 object_type = TREE_TYPE (TREE_VALUE (spec_types));
1774 spec_types = TREE_CHAIN (spec_types);
1775 tmpl_types = TREE_CHAIN (tmpl_types);
1777 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
1779 /* DECL may contain more parameters than TMPL due to the extra
1780 in-charge parameter in constructors and destructors. */
1781 in_charge = spec_types;
1782 spec_types = TREE_CHAIN (spec_types);
1784 if (DECL_HAS_VTT_PARM_P (decl))
1786 vtt = spec_types;
1787 spec_types = TREE_CHAIN (spec_types);
1791 /* Compute the merged default arguments. */
1792 new_spec_types =
1793 copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
1795 /* Compute the new FUNCTION_TYPE. */
1796 if (object_type)
1798 if (vtt)
1799 new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
1800 TREE_VALUE (vtt),
1801 new_spec_types);
1803 if (in_charge)
1804 /* Put the in-charge parameter back. */
1805 new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
1806 TREE_VALUE (in_charge),
1807 new_spec_types);
1809 new_type = build_method_type_directly (object_type,
1810 TREE_TYPE (old_type),
1811 new_spec_types);
1813 else
1814 new_type = build_function_type (TREE_TYPE (old_type),
1815 new_spec_types);
1816 new_type = cp_build_type_attribute_variant (new_type,
1817 TYPE_ATTRIBUTES (old_type));
1818 new_type = build_exception_variant (new_type,
1819 TYPE_RAISES_EXCEPTIONS (old_type));
1820 TREE_TYPE (decl) = new_type;
1823 /* Check to see if the function just declared, as indicated in
1824 DECLARATOR, and in DECL, is a specialization of a function
1825 template. We may also discover that the declaration is an explicit
1826 instantiation at this point.
1828 Returns DECL, or an equivalent declaration that should be used
1829 instead if all goes well. Issues an error message if something is
1830 amiss. Returns error_mark_node if the error is not easily
1831 recoverable.
1833 FLAGS is a bitmask consisting of the following flags:
1835 2: The function has a definition.
1836 4: The function is a friend.
1838 The TEMPLATE_COUNT is the number of references to qualifying
1839 template classes that appeared in the name of the function. For
1840 example, in
1842 template <class T> struct S { void f(); };
1843 void S<int>::f();
1845 the TEMPLATE_COUNT would be 1. However, explicitly specialized
1846 classes are not counted in the TEMPLATE_COUNT, so that in
1848 template <class T> struct S {};
1849 template <> struct S<int> { void f(); }
1850 template <> void S<int>::f();
1852 the TEMPLATE_COUNT would be 0. (Note that this declaration is
1853 invalid; there should be no template <>.)
1855 If the function is a specialization, it is marked as such via
1856 DECL_TEMPLATE_SPECIALIZATION. Furthermore, its DECL_TEMPLATE_INFO
1857 is set up correctly, and it is added to the list of specializations
1858 for that template. */
1860 tree
1861 check_explicit_specialization (tree declarator,
1862 tree decl,
1863 int template_count,
1864 int flags)
1866 int have_def = flags & 2;
1867 int is_friend = flags & 4;
1868 int specialization = 0;
1869 int explicit_instantiation = 0;
1870 int member_specialization = 0;
1871 tree ctype = DECL_CLASS_CONTEXT (decl);
1872 tree dname = DECL_NAME (decl);
1873 tmpl_spec_kind tsk;
1875 if (is_friend)
1877 if (!processing_specialization)
1878 tsk = tsk_none;
1879 else
1880 tsk = tsk_excessive_parms;
1882 else
1883 tsk = current_tmpl_spec_kind (template_count);
1885 switch (tsk)
1887 case tsk_none:
1888 if (processing_specialization)
1890 specialization = 1;
1891 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1893 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1895 if (is_friend)
1896 /* This could be something like:
1898 template <class T> void f(T);
1899 class S { friend void f<>(int); } */
1900 specialization = 1;
1901 else
1903 /* This case handles bogus declarations like template <>
1904 template <class T> void f<int>(); */
1906 error ("template-id %qD in declaration of primary template",
1907 declarator);
1908 return decl;
1911 break;
1913 case tsk_invalid_member_spec:
1914 /* The error has already been reported in
1915 check_specialization_scope. */
1916 return error_mark_node;
1918 case tsk_invalid_expl_inst:
1919 error ("template parameter list used in explicit instantiation");
1921 /* Fall through. */
1923 case tsk_expl_inst:
1924 if (have_def)
1925 error ("definition provided for explicit instantiation");
1927 explicit_instantiation = 1;
1928 break;
1930 case tsk_excessive_parms:
1931 case tsk_insufficient_parms:
1932 if (tsk == tsk_excessive_parms)
1933 error ("too many template parameter lists in declaration of %qD",
1934 decl);
1935 else if (template_header_count)
1936 error("too few template parameter lists in declaration of %qD", decl);
1937 else
1938 error("explicit specialization of %qD must be introduced by "
1939 "%<template <>%>", decl);
1941 /* Fall through. */
1942 case tsk_expl_spec:
1943 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1944 if (ctype)
1945 member_specialization = 1;
1946 else
1947 specialization = 1;
1948 break;
1950 case tsk_template:
1951 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1953 /* This case handles bogus declarations like template <>
1954 template <class T> void f<int>(); */
1956 if (uses_template_parms (declarator))
1957 error ("function template partial specialization %qD "
1958 "is not allowed", declarator);
1959 else
1960 error ("template-id %qD in declaration of primary template",
1961 declarator);
1962 return decl;
1965 if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1966 /* This is a specialization of a member template, without
1967 specialization the containing class. Something like:
1969 template <class T> struct S {
1970 template <class U> void f (U);
1972 template <> template <class U> void S<int>::f(U) {}
1974 That's a specialization -- but of the entire template. */
1975 specialization = 1;
1976 break;
1978 default:
1979 gcc_unreachable ();
1982 if (specialization || member_specialization)
1984 tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
1985 for (; t; t = TREE_CHAIN (t))
1986 if (TREE_PURPOSE (t))
1988 pedwarn
1989 ("default argument specified in explicit specialization");
1990 break;
1994 if (specialization || member_specialization || explicit_instantiation)
1996 tree tmpl = NULL_TREE;
1997 tree targs = NULL_TREE;
1999 /* Make sure that the declarator is a TEMPLATE_ID_EXPR. */
2000 if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2002 tree fns;
2004 gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2005 if (ctype)
2006 fns = dname;
2007 else
2009 /* If there is no class context, the explicit instantiation
2010 must be at namespace scope. */
2011 gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2013 /* Find the namespace binding, using the declaration
2014 context. */
2015 fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2016 false, true);
2017 if (fns == error_mark_node || !is_overloaded_fn (fns))
2019 error ("%qD is not a template function", dname);
2020 fns = error_mark_node;
2022 else
2024 tree fn = OVL_CURRENT (fns);
2025 if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2026 CP_DECL_CONTEXT (fn)))
2027 error ("%qD is not declared in %qD",
2028 decl, current_namespace);
2032 declarator = lookup_template_function (fns, NULL_TREE);
2035 if (declarator == error_mark_node)
2036 return error_mark_node;
2038 if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2040 if (!explicit_instantiation)
2041 /* A specialization in class scope. This is invalid,
2042 but the error will already have been flagged by
2043 check_specialization_scope. */
2044 return error_mark_node;
2045 else
2047 /* It's not valid to write an explicit instantiation in
2048 class scope, e.g.:
2050 class C { template void f(); }
2052 This case is caught by the parser. However, on
2053 something like:
2055 template class C { void f(); };
2057 (which is invalid) we can get here. The error will be
2058 issued later. */
2062 return decl;
2064 else if (ctype != NULL_TREE
2065 && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2066 IDENTIFIER_NODE))
2068 /* Find the list of functions in ctype that have the same
2069 name as the declared function. */
2070 tree name = TREE_OPERAND (declarator, 0);
2071 tree fns = NULL_TREE;
2072 int idx;
2074 if (constructor_name_p (name, ctype))
2076 int is_constructor = DECL_CONSTRUCTOR_P (decl);
2078 if (is_constructor ? !TYPE_HAS_CONSTRUCTOR (ctype)
2079 : !CLASSTYPE_DESTRUCTORS (ctype))
2081 /* From [temp.expl.spec]:
2083 If such an explicit specialization for the member
2084 of a class template names an implicitly-declared
2085 special member function (clause _special_), the
2086 program is ill-formed.
2088 Similar language is found in [temp.explicit]. */
2089 error ("specialization of implicitly-declared special member function");
2090 return error_mark_node;
2093 name = is_constructor ? ctor_identifier : dtor_identifier;
2096 if (!DECL_CONV_FN_P (decl))
2098 idx = lookup_fnfields_1 (ctype, name);
2099 if (idx >= 0)
2100 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2102 else
2104 VEC(tree,gc) *methods;
2105 tree ovl;
2107 /* For a type-conversion operator, we cannot do a
2108 name-based lookup. We might be looking for `operator
2109 int' which will be a specialization of `operator T'.
2110 So, we find *all* the conversion operators, and then
2111 select from them. */
2112 fns = NULL_TREE;
2114 methods = CLASSTYPE_METHOD_VEC (ctype);
2115 if (methods)
2116 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2117 VEC_iterate (tree, methods, idx, ovl);
2118 ++idx)
2120 if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2121 /* There are no more conversion functions. */
2122 break;
2124 /* Glue all these conversion functions together
2125 with those we already have. */
2126 for (; ovl; ovl = OVL_NEXT (ovl))
2127 fns = ovl_cons (OVL_CURRENT (ovl), fns);
2131 if (fns == NULL_TREE)
2133 error ("no member function %qD declared in %qT", name, ctype);
2134 return error_mark_node;
2136 else
2137 TREE_OPERAND (declarator, 0) = fns;
2140 /* Figure out what exactly is being specialized at this point.
2141 Note that for an explicit instantiation, even one for a
2142 member function, we cannot tell apriori whether the
2143 instantiation is for a member template, or just a member
2144 function of a template class. Even if a member template is
2145 being instantiated, the member template arguments may be
2146 elided if they can be deduced from the rest of the
2147 declaration. */
2148 tmpl = determine_specialization (declarator, decl,
2149 &targs,
2150 member_specialization,
2151 template_count,
2152 tsk);
2154 if (!tmpl || tmpl == error_mark_node)
2155 /* We couldn't figure out what this declaration was
2156 specializing. */
2157 return error_mark_node;
2158 else
2160 tree gen_tmpl = most_general_template (tmpl);
2162 if (explicit_instantiation)
2164 /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2165 is done by do_decl_instantiation later. */
2167 int arg_depth = TMPL_ARGS_DEPTH (targs);
2168 int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2170 if (arg_depth > parm_depth)
2172 /* If TMPL is not the most general template (for
2173 example, if TMPL is a friend template that is
2174 injected into namespace scope), then there will
2175 be too many levels of TARGS. Remove some of them
2176 here. */
2177 int i;
2178 tree new_targs;
2180 new_targs = make_tree_vec (parm_depth);
2181 for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2182 TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2183 = TREE_VEC_ELT (targs, i);
2184 targs = new_targs;
2187 return instantiate_template (tmpl, targs, tf_error);
2190 /* If we thought that the DECL was a member function, but it
2191 turns out to be specializing a static member function,
2192 make DECL a static member function as well. */
2193 if (DECL_STATIC_FUNCTION_P (tmpl)
2194 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2195 revert_static_member_fn (decl);
2197 /* If this is a specialization of a member template of a
2198 template class, we want to return the TEMPLATE_DECL, not
2199 the specialization of it. */
2200 if (tsk == tsk_template)
2202 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2203 DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE;
2204 if (have_def)
2206 DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2207 DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl))
2208 = DECL_SOURCE_LOCATION (decl);
2209 /* We want to use the argument list specified in the
2210 definition, not in the original declaration. */
2211 DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (tmpl))
2212 = DECL_ARGUMENTS (decl);
2214 return tmpl;
2217 /* Set up the DECL_TEMPLATE_INFO for DECL. */
2218 DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
2220 /* Inherit default function arguments from the template
2221 DECL is specializing. */
2222 copy_default_args_to_explicit_spec (decl);
2224 /* This specialization has the same protection as the
2225 template it specializes. */
2226 TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2227 TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2229 /* 7.1.1-1 [dcl.stc]
2231 A storage-class-specifier shall not be specified in an
2232 explicit specialization...
2234 The parser rejects these, so unless action is taken here,
2235 explicit function specializations will always appear with
2236 global linkage.
2238 The action recommended by the C++ CWG in response to C++
2239 defect report 605 is to make the storage class and linkage
2240 of the explicit specialization match the templated function:
2242 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2244 if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2246 tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2247 gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2249 /* This specialization has the same linkage and visibility as
2250 the function template it specializes. */
2251 TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2252 if (! TREE_PUBLIC (decl))
2254 DECL_INTERFACE_KNOWN (decl) = 1;
2255 DECL_NOT_REALLY_EXTERN (decl) = 1;
2257 DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2258 if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2260 DECL_VISIBILITY_SPECIFIED (decl) = 1;
2261 DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2265 /* If DECL is a friend declaration, declared using an
2266 unqualified name, the namespace associated with DECL may
2267 have been set incorrectly. For example, in:
2269 template <typename T> void f(T);
2270 namespace N {
2271 struct S { friend void f<int>(int); }
2274 we will have set the DECL_CONTEXT for the friend
2275 declaration to N, rather than to the global namespace. */
2276 if (DECL_NAMESPACE_SCOPE_P (decl))
2277 DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2279 if (is_friend && !have_def)
2280 /* This is not really a declaration of a specialization.
2281 It's just the name of an instantiation. But, it's not
2282 a request for an instantiation, either. */
2283 SET_DECL_IMPLICIT_INSTANTIATION (decl);
2284 else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2285 /* This is indeed a specialization. In case of constructors
2286 and destructors, we need in-charge and not-in-charge
2287 versions in V3 ABI. */
2288 clone_function_decl (decl, /*update_method_vec_p=*/0);
2290 /* Register this specialization so that we can find it
2291 again. */
2292 decl = register_specialization (decl, gen_tmpl, targs, is_friend);
2296 return decl;
2299 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2300 parameters. These are represented in the same format used for
2301 DECL_TEMPLATE_PARMS. */
2304 comp_template_parms (const_tree parms1, const_tree parms2)
2306 const_tree p1;
2307 const_tree p2;
2309 if (parms1 == parms2)
2310 return 1;
2312 for (p1 = parms1, p2 = parms2;
2313 p1 != NULL_TREE && p2 != NULL_TREE;
2314 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2316 tree t1 = TREE_VALUE (p1);
2317 tree t2 = TREE_VALUE (p2);
2318 int i;
2320 gcc_assert (TREE_CODE (t1) == TREE_VEC);
2321 gcc_assert (TREE_CODE (t2) == TREE_VEC);
2323 if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2324 return 0;
2326 for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2328 tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2329 tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2331 /* If either of the template parameters are invalid, assume
2332 they match for the sake of error recovery. */
2333 if (parm1 == error_mark_node || parm2 == error_mark_node)
2334 return 1;
2336 if (TREE_CODE (parm1) != TREE_CODE (parm2))
2337 return 0;
2339 if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2340 && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2341 == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2342 continue;
2343 else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2344 return 0;
2348 if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2349 /* One set of parameters has more parameters lists than the
2350 other. */
2351 return 0;
2353 return 1;
2356 /* Determine whether PARM is a parameter pack. */
2357 bool
2358 template_parameter_pack_p (const_tree parm)
2360 /* Determine if we have a non-type template parameter pack. */
2361 if (TREE_CODE (parm) == PARM_DECL)
2362 return (DECL_TEMPLATE_PARM_P (parm)
2363 && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2365 /* If this is a list of template parameters, we could get a
2366 TYPE_DECL or a TEMPLATE_DECL. */
2367 if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2368 parm = TREE_TYPE (parm);
2370 return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2371 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2372 && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2375 /* Determine whether ARGS describes a variadic template args list,
2376 i.e., one that is terminated by a template argument pack. */
2377 static bool
2378 template_args_variadic_p (tree args)
2380 int nargs;
2381 tree last_parm;
2383 if (args == NULL_TREE)
2384 return false;
2386 args = INNERMOST_TEMPLATE_ARGS (args);
2387 nargs = TREE_VEC_LENGTH (args);
2389 if (nargs == 0)
2390 return false;
2392 last_parm = TREE_VEC_ELT (args, nargs - 1);
2394 return ARGUMENT_PACK_P (last_parm);
2397 /* Generate a new name for the parameter pack name NAME (an
2398 IDENTIFIER_NODE) that incorporates its */
2399 static tree
2400 make_ith_pack_parameter_name (tree name, int i)
2402 /* Munge the name to include the parameter index. */
2403 char numbuf[128];
2404 char* newname;
2406 sprintf(numbuf, "%i", i);
2407 newname = (char*)alloca (IDENTIFIER_LENGTH (name) + strlen(numbuf) + 2);
2408 sprintf(newname, "%s#%i", IDENTIFIER_POINTER (name), i);
2409 return get_identifier (newname);
2412 /* Structure used to track the progress of find_parameter_pack_r. */
2413 struct find_parameter_pack_data
2415 tree* parameter_packs;
2416 struct pointer_set_t *visited;
2419 /* Identifiers all of the argument packs that occur in a template
2420 argument and appends them to the TREE_LIST inside DATA, which is a
2421 find_parameter_pack_Data structure. This is a subroutine of
2422 make_pack_expansion and uses_parameter_packs. */
2423 static tree
2424 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2426 tree t = *tp;
2427 struct find_parameter_pack_data* ppd =
2428 (struct find_parameter_pack_data*)data;
2430 if (TYPE_P (t))
2432 tree context = TYPE_CONTEXT (t);
2433 cp_walk_tree (&context, &find_parameter_packs_r, ppd, ppd->visited);
2436 /* This switch statement will return immediately if we don't find a
2437 parameter pack. */
2438 switch (TREE_CODE (t))
2440 case TEMPLATE_PARM_INDEX:
2441 if (TEMPLATE_PARM_PARAMETER_PACK (t))
2442 break;
2443 return NULL_TREE;
2445 case BOUND_TEMPLATE_TEMPLATE_PARM:
2446 /* Check the template arguments. */
2447 cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd,
2448 ppd->visited);
2450 /* Dig out the underlying TEMPLATE_TEMPLATE_PARM. */
2451 t = TYPE_TI_TEMPLATE (t);
2452 if (DECL_P (t) && TREE_TYPE (t))
2453 t = TREE_TYPE (t);
2454 *walk_subtrees = 0;
2456 /* Fall through. */
2458 case TEMPLATE_TYPE_PARM:
2459 case TEMPLATE_TEMPLATE_PARM:
2460 if (TEMPLATE_TYPE_PARAMETER_PACK (t))
2461 break;
2462 return NULL_TREE;
2464 case PARM_DECL:
2465 if (FUNCTION_PARAMETER_PACK_P (t))
2467 /* We don't want to walk into the type of a PARM_DECL,
2468 because we don't want to see the type parameter pack.*/
2469 *walk_subtrees = 0;
2470 break;
2472 return NULL_TREE;
2474 case RECORD_TYPE:
2475 if (TYPE_PTRMEMFUNC_P (t))
2476 return NULL_TREE;
2477 /* Fall through. */
2479 case UNION_TYPE:
2480 case ENUMERAL_TYPE:
2481 if (TYPE_TEMPLATE_INFO (t))
2483 tree args = TREE_VALUE (TYPE_TEMPLATE_INFO (t));
2484 cp_walk_tree (&args, &find_parameter_packs_r, ppd, ppd->visited);
2487 *walk_subtrees = 0;
2488 return NULL_TREE;
2490 case TEMPLATE_DECL:
2491 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
2492 && TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (t)))
2493 break;
2495 *walk_subtrees = 0;
2496 return NULL_TREE;
2498 case TYPE_PACK_EXPANSION:
2499 case EXPR_PACK_EXPANSION:
2500 *walk_subtrees = 0;
2501 return NULL_TREE;
2503 case INTEGER_TYPE:
2504 cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r,
2505 ppd, ppd->visited);
2506 *walk_subtrees = 0;
2507 return NULL_TREE;
2509 default:
2510 return NULL_TREE;
2513 /* Add this parameter pack to the list. */
2514 *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
2516 return NULL_TREE;
2519 /* Determines if the expression or type T uses any parameter packs. */
2520 bool
2521 uses_parameter_packs (tree t)
2523 tree parameter_packs = NULL_TREE;
2524 struct find_parameter_pack_data ppd;
2525 ppd.parameter_packs = &parameter_packs;
2526 ppd.visited = pointer_set_create ();
2527 cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
2528 pointer_set_destroy (ppd.visited);
2529 return parameter_packs != NULL_TREE;
2532 /* Turn ARG, which may be an expression, type, or a TREE_LIST
2533 representation a base-class initializer into a parameter pack
2534 expansion. If all goes well, the resulting node will be an
2535 EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
2536 respectively. */
2537 tree
2538 make_pack_expansion (tree arg)
2540 tree result;
2541 tree parameter_packs = NULL_TREE;
2542 bool for_types = false;
2543 struct find_parameter_pack_data ppd;
2545 if (!arg || arg == error_mark_node)
2546 return arg;
2548 if (TREE_CODE (arg) == TREE_LIST)
2550 /* The only time we will see a TREE_LIST here is for a base
2551 class initializer. In this case, the TREE_PURPOSE will be a
2552 _TYPE node (representing the base class expansion we're
2553 initializing) and the TREE_VALUE will be a TREE_LIST
2554 containing the initialization arguments.
2556 The resulting expansion looks somewhat different from most
2557 expansions. Rather than returning just one _EXPANSION, we
2558 return a TREE_LIST whose TREE_PURPOSE is a
2559 TYPE_PACK_EXPANSION containing the bases that will be
2560 initialized. The TREE_VALUE will be identical to the
2561 original TREE_VALUE, which is a list of arguments that will
2562 be passed to each base. We do not introduce any new pack
2563 expansion nodes into the TREE_VALUE (although it is possible
2564 that some already exist), because the TREE_PURPOSE and
2565 TREE_VALUE all need to be expanded together with the same
2566 _EXPANSION node. Note that the TYPE_PACK_EXPANSION in the
2567 resulting TREE_PURPOSE will mention the parameter packs in
2568 both the bases and the arguments to the bases. */
2569 tree purpose;
2570 tree value;
2571 tree parameter_packs = NULL_TREE;
2573 /* Determine which parameter packs will be used by the base
2574 class expansion. */
2575 ppd.visited = pointer_set_create ();
2576 ppd.parameter_packs = &parameter_packs;
2577 cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r,
2578 &ppd, ppd.visited);
2580 if (parameter_packs == NULL_TREE)
2582 error ("base initializer expansion %<%T%> contains no parameter packs", arg);
2583 pointer_set_destroy (ppd.visited);
2584 return error_mark_node;
2587 if (TREE_VALUE (arg) != void_type_node)
2589 /* Collect the sets of parameter packs used in each of the
2590 initialization arguments. */
2591 for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
2593 /* Determine which parameter packs will be expanded in this
2594 argument. */
2595 cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r,
2596 &ppd, ppd.visited);
2600 pointer_set_destroy (ppd.visited);
2602 /* Create the pack expansion type for the base type. */
2603 purpose = make_node (TYPE_PACK_EXPANSION);
2604 SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
2605 PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
2607 /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2608 they will rarely be compared to anything. */
2609 SET_TYPE_STRUCTURAL_EQUALITY (purpose);
2611 return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
2614 if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
2615 for_types = true;
2617 /* Build the PACK_EXPANSION_* node. */
2618 result = make_node (for_types ? TYPE_PACK_EXPANSION : EXPR_PACK_EXPANSION);
2619 SET_PACK_EXPANSION_PATTERN (result, arg);
2620 if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
2622 /* Propagate type and const-expression information. */
2623 TREE_TYPE (result) = TREE_TYPE (arg);
2624 TREE_CONSTANT (result) = TREE_CONSTANT (arg);
2626 else
2627 /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2628 they will rarely be compared to anything. */
2629 SET_TYPE_STRUCTURAL_EQUALITY (result);
2631 /* Determine which parameter packs will be expanded. */
2632 ppd.parameter_packs = &parameter_packs;
2633 ppd.visited = pointer_set_create ();
2634 cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
2635 pointer_set_destroy (ppd.visited);
2637 /* Make sure we found some parameter packs. */
2638 if (parameter_packs == NULL_TREE)
2640 if (TYPE_P (arg))
2641 error ("expansion pattern %<%T%> contains no argument packs", arg);
2642 else
2643 error ("expansion pattern %<%E%> contains no argument packs", arg);
2644 return error_mark_node;
2646 PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
2648 return result;
2651 /* Checks T for any "bare" parameter packs, which have not yet been
2652 expanded, and issues an error if any are found. This operation can
2653 only be done on full expressions or types (e.g., an expression
2654 statement, "if" condition, etc.), because we could have expressions like:
2656 foo(f(g(h(args)))...)
2658 where "args" is a parameter pack. check_for_bare_parameter_packs
2659 should not be called for the subexpressions args, h(args),
2660 g(h(args)), or f(g(h(args))), because we would produce erroneous
2661 error messages.
2663 Returns TRUE if there were no bare parameter packs, returns FALSE
2664 (and emits an error) if there were bare parameter packs.*/
2665 bool
2666 check_for_bare_parameter_packs (tree t)
2668 tree parameter_packs = NULL_TREE;
2669 struct find_parameter_pack_data ppd;
2671 if (!processing_template_decl || !t || t == error_mark_node)
2672 return true;
2674 if (TREE_CODE (t) == TYPE_DECL)
2675 t = TREE_TYPE (t);
2677 ppd.parameter_packs = &parameter_packs;
2678 ppd.visited = pointer_set_create ();
2679 cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
2680 pointer_set_destroy (ppd.visited);
2682 if (parameter_packs)
2684 error ("parameter packs not expanded with `...':");
2685 while (parameter_packs)
2687 tree pack = TREE_VALUE (parameter_packs);
2688 tree name = NULL_TREE;
2690 if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
2691 || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
2692 name = TYPE_NAME (pack);
2693 else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
2694 name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
2695 else
2696 name = DECL_NAME (pack);
2697 inform (" %qD", name);
2699 parameter_packs = TREE_CHAIN (parameter_packs);
2702 return false;
2705 return true;
2708 /* Expand any parameter packs that occur in the template arguments in
2709 ARGS. */
2710 tree
2711 expand_template_argument_pack (tree args)
2713 tree result_args = NULL_TREE;
2714 int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
2715 int num_result_args = -1;
2717 /* First, determine if we need to expand anything, and the number of
2718 slots we'll need. */
2719 for (in_arg = 0; in_arg < nargs; ++in_arg)
2721 tree arg = TREE_VEC_ELT (args, in_arg);
2722 if (ARGUMENT_PACK_P (arg))
2724 int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
2725 if (num_result_args < 0)
2726 num_result_args = in_arg + num_packed;
2727 else
2728 num_result_args += num_packed;
2730 else
2732 if (num_result_args >= 0)
2733 num_result_args++;
2737 /* If no expansion is necessary, we're done. */
2738 if (num_result_args < 0)
2739 return args;
2741 /* Expand arguments. */
2742 result_args = make_tree_vec (num_result_args);
2743 for (in_arg = 0; in_arg < nargs; ++in_arg)
2745 tree arg = TREE_VEC_ELT (args, in_arg);
2746 if (ARGUMENT_PACK_P (arg))
2748 tree packed = ARGUMENT_PACK_ARGS (arg);
2749 int i, num_packed = TREE_VEC_LENGTH (packed);
2750 for (i = 0; i < num_packed; ++i, ++out_arg)
2751 TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
2753 else
2755 TREE_VEC_ELT (result_args, out_arg) = arg;
2756 ++out_arg;
2760 return result_args;
2763 /* Complain if DECL shadows a template parameter.
2765 [temp.local]: A template-parameter shall not be redeclared within its
2766 scope (including nested scopes). */
2768 void
2769 check_template_shadow (tree decl)
2771 tree olddecl;
2773 /* If we're not in a template, we can't possibly shadow a template
2774 parameter. */
2775 if (!current_template_parms)
2776 return;
2778 /* Figure out what we're shadowing. */
2779 if (TREE_CODE (decl) == OVERLOAD)
2780 decl = OVL_CURRENT (decl);
2781 olddecl = innermost_non_namespace_value (DECL_NAME (decl));
2783 /* If there's no previous binding for this name, we're not shadowing
2784 anything, let alone a template parameter. */
2785 if (!olddecl)
2786 return;
2788 /* If we're not shadowing a template parameter, we're done. Note
2789 that OLDDECL might be an OVERLOAD (or perhaps even an
2790 ERROR_MARK), so we can't just blithely assume it to be a _DECL
2791 node. */
2792 if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
2793 return;
2795 /* We check for decl != olddecl to avoid bogus errors for using a
2796 name inside a class. We check TPFI to avoid duplicate errors for
2797 inline member templates. */
2798 if (decl == olddecl
2799 || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
2800 return;
2802 error ("declaration of %q+#D", decl);
2803 error (" shadows template parm %q+#D", olddecl);
2806 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
2807 ORIG_LEVEL, DECL, and TYPE. */
2809 static tree
2810 build_template_parm_index (int index,
2811 int level,
2812 int orig_level,
2813 tree decl,
2814 tree type)
2816 tree t = make_node (TEMPLATE_PARM_INDEX);
2817 TEMPLATE_PARM_IDX (t) = index;
2818 TEMPLATE_PARM_LEVEL (t) = level;
2819 TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
2820 TEMPLATE_PARM_DECL (t) = decl;
2821 TREE_TYPE (t) = type;
2822 TREE_CONSTANT (t) = TREE_CONSTANT (decl);
2823 TREE_INVARIANT (t) = TREE_INVARIANT (decl);
2824 TREE_READONLY (t) = TREE_READONLY (decl);
2826 return t;
2829 /* Find the canonical type parameter for the given template type
2830 parameter. Returns the canonical type parameter, which may be TYPE
2831 if no such parameter existed. */
2832 static tree
2833 canonical_type_parameter (tree type)
2835 tree list;
2836 int idx = TEMPLATE_TYPE_IDX (type);
2837 if (!canonical_template_parms)
2838 canonical_template_parms = VEC_alloc (tree, gc, idx+1);
2840 while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
2841 VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
2843 list = VEC_index (tree, canonical_template_parms, idx);
2844 while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
2845 list = TREE_CHAIN (list);
2847 if (list)
2848 return TREE_VALUE (list);
2849 else
2851 VEC_replace(tree, canonical_template_parms, idx,
2852 tree_cons (NULL_TREE, type,
2853 VEC_index (tree, canonical_template_parms, idx)));
2854 return type;
2858 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
2859 TEMPLATE_PARM_LEVEL has been decreased by LEVELS. If such a
2860 TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
2861 new one is created. */
2863 static tree
2864 reduce_template_parm_level (tree index, tree type, int levels)
2866 if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
2867 || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
2868 != TEMPLATE_PARM_LEVEL (index) - levels))
2870 tree orig_decl = TEMPLATE_PARM_DECL (index);
2871 tree decl, t;
2873 decl = build_decl (TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
2874 TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
2875 TREE_INVARIANT (decl) = TREE_INVARIANT (orig_decl);
2876 TREE_READONLY (decl) = TREE_READONLY (orig_decl);
2877 DECL_ARTIFICIAL (decl) = 1;
2878 SET_DECL_TEMPLATE_PARM_P (decl);
2880 t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
2881 TEMPLATE_PARM_LEVEL (index) - levels,
2882 TEMPLATE_PARM_ORIG_LEVEL (index),
2883 decl, type);
2884 TEMPLATE_PARM_DESCENDANTS (index) = t;
2885 TEMPLATE_PARM_PARAMETER_PACK (t)
2886 = TEMPLATE_PARM_PARAMETER_PACK (index);
2888 /* Template template parameters need this. */
2889 if (TREE_CODE (decl) != CONST_DECL)
2890 DECL_TEMPLATE_PARMS (decl)
2891 = DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index));
2894 return TEMPLATE_PARM_DESCENDANTS (index);
2897 /* Process information from new template parameter PARM and append it to the
2898 LIST being built. This new parameter is a non-type parameter iff
2899 IS_NON_TYPE is true. This new parameter is a parameter
2900 pack iff IS_PARAMETER_PACK is true. */
2902 tree
2903 process_template_parm (tree list, tree parm, bool is_non_type,
2904 bool is_parameter_pack)
2906 tree decl = 0;
2907 tree defval;
2908 tree err_parm_list;
2909 int idx = 0;
2911 gcc_assert (TREE_CODE (parm) == TREE_LIST);
2912 defval = TREE_PURPOSE (parm);
2914 if (list)
2916 tree p = tree_last (list);
2918 if (p && TREE_VALUE (p) != error_mark_node)
2920 p = TREE_VALUE (p);
2921 if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
2922 idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
2923 else
2924 idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
2927 ++idx;
2929 else
2930 idx = 0;
2932 if (is_non_type)
2934 parm = TREE_VALUE (parm);
2936 SET_DECL_TEMPLATE_PARM_P (parm);
2938 if (TREE_TYPE (parm) == error_mark_node)
2940 err_parm_list = build_tree_list (defval, parm);
2941 TREE_VALUE (err_parm_list) = error_mark_node;
2942 return chainon (list, err_parm_list);
2944 else
2946 /* [temp.param]
2948 The top-level cv-qualifiers on the template-parameter are
2949 ignored when determining its type. */
2950 TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
2951 if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
2953 err_parm_list = build_tree_list (defval, parm);
2954 TREE_VALUE (err_parm_list) = error_mark_node;
2955 return chainon (list, err_parm_list);
2958 if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
2960 /* This template parameter is not a parameter pack, but it
2961 should be. Complain about "bare" parameter packs. */
2962 check_for_bare_parameter_packs (TREE_TYPE (parm));
2964 /* Recover by calling this a parameter pack. */
2965 is_parameter_pack = true;
2969 /* A template parameter is not modifiable. */
2970 TREE_CONSTANT (parm) = 1;
2971 TREE_INVARIANT (parm) = 1;
2972 TREE_READONLY (parm) = 1;
2973 decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
2974 TREE_CONSTANT (decl) = 1;
2975 TREE_INVARIANT (decl) = 1;
2976 TREE_READONLY (decl) = 1;
2977 DECL_INITIAL (parm) = DECL_INITIAL (decl)
2978 = build_template_parm_index (idx, processing_template_decl,
2979 processing_template_decl,
2980 decl, TREE_TYPE (parm));
2982 TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
2983 = is_parameter_pack;
2985 else
2987 tree t;
2988 parm = TREE_VALUE (TREE_VALUE (parm));
2990 if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
2992 t = make_aggr_type (TEMPLATE_TEMPLATE_PARM);
2993 /* This is for distinguishing between real templates and template
2994 template parameters */
2995 TREE_TYPE (parm) = t;
2996 TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
2997 decl = parm;
2999 else
3001 t = make_aggr_type (TEMPLATE_TYPE_PARM);
3002 /* parm is either IDENTIFIER_NODE or NULL_TREE. */
3003 decl = build_decl (TYPE_DECL, parm, t);
3006 TYPE_NAME (t) = decl;
3007 TYPE_STUB_DECL (t) = decl;
3008 parm = decl;
3009 TEMPLATE_TYPE_PARM_INDEX (t)
3010 = build_template_parm_index (idx, processing_template_decl,
3011 processing_template_decl,
3012 decl, TREE_TYPE (parm));
3013 TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3014 TYPE_CANONICAL (t) = canonical_type_parameter (t);
3016 DECL_ARTIFICIAL (decl) = 1;
3017 SET_DECL_TEMPLATE_PARM_P (decl);
3018 pushdecl (decl);
3019 parm = build_tree_list (defval, parm);
3020 return chainon (list, parm);
3023 /* The end of a template parameter list has been reached. Process the
3024 tree list into a parameter vector, converting each parameter into a more
3025 useful form. Type parameters are saved as IDENTIFIER_NODEs, and others
3026 as PARM_DECLs. */
3028 tree
3029 end_template_parm_list (tree parms)
3031 int nparms;
3032 tree parm, next;
3033 tree saved_parmlist = make_tree_vec (list_length (parms));
3035 current_template_parms
3036 = tree_cons (size_int (processing_template_decl),
3037 saved_parmlist, current_template_parms);
3039 for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3041 next = TREE_CHAIN (parm);
3042 TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3043 TREE_CHAIN (parm) = NULL_TREE;
3046 --processing_template_parmlist;
3048 return saved_parmlist;
3051 /* end_template_decl is called after a template declaration is seen. */
3053 void
3054 end_template_decl (void)
3056 reset_specialization ();
3058 if (! processing_template_decl)
3059 return;
3061 /* This matches the pushlevel in begin_template_parm_list. */
3062 finish_scope ();
3064 --processing_template_decl;
3065 current_template_parms = TREE_CHAIN (current_template_parms);
3068 /* Within the declaration of a template, return all levels of template
3069 parameters that apply. The template parameters are represented as
3070 a TREE_VEC, in the form documented in cp-tree.h for template
3071 arguments. */
3073 static tree
3074 current_template_args (void)
3076 tree header;
3077 tree args = NULL_TREE;
3078 int length = TMPL_PARMS_DEPTH (current_template_parms);
3079 int l = length;
3081 /* If there is only one level of template parameters, we do not
3082 create a TREE_VEC of TREE_VECs. Instead, we return a single
3083 TREE_VEC containing the arguments. */
3084 if (length > 1)
3085 args = make_tree_vec (length);
3087 for (header = current_template_parms; header; header = TREE_CHAIN (header))
3089 tree a = copy_node (TREE_VALUE (header));
3090 int i;
3092 TREE_TYPE (a) = NULL_TREE;
3093 for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
3095 tree t = TREE_VEC_ELT (a, i);
3097 /* T will be a list if we are called from within a
3098 begin/end_template_parm_list pair, but a vector directly
3099 if within a begin/end_member_template_processing pair. */
3100 if (TREE_CODE (t) == TREE_LIST)
3102 t = TREE_VALUE (t);
3104 if (t != error_mark_node)
3106 if (TREE_CODE (t) == TYPE_DECL
3107 || TREE_CODE (t) == TEMPLATE_DECL)
3109 t = TREE_TYPE (t);
3111 if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3113 /* Turn this argument into a TYPE_ARGUMENT_PACK
3114 with a single element, which expands T. */
3115 tree vec = make_tree_vec (1);
3116 TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3118 t = make_node (TYPE_ARGUMENT_PACK);
3119 SET_ARGUMENT_PACK_ARGS (t, vec);
3122 else
3124 t = DECL_INITIAL (t);
3126 if (TEMPLATE_PARM_PARAMETER_PACK (t))
3128 /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3129 with a single element, which expands T. */
3130 tree vec = make_tree_vec (1);
3131 tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3132 TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3134 t = make_node (NONTYPE_ARGUMENT_PACK);
3135 SET_ARGUMENT_PACK_ARGS (t, vec);
3136 TREE_TYPE (t) = type;
3139 TREE_VEC_ELT (a, i) = t;
3144 if (length > 1)
3145 TREE_VEC_ELT (args, --l) = a;
3146 else
3147 args = a;
3150 return args;
3153 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
3154 template PARMS. If MEMBER_TEMPLATE_P is true, the new template is
3155 a member template. Used by push_template_decl below. */
3157 static tree
3158 build_template_decl (tree decl, tree parms, bool member_template_p)
3160 tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
3161 DECL_TEMPLATE_PARMS (tmpl) = parms;
3162 DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
3163 DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
3164 if (DECL_LANG_SPECIFIC (decl))
3166 DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
3167 DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
3168 DECL_DESTRUCTOR_P (tmpl) = DECL_DESTRUCTOR_P (decl);
3169 DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
3170 DECL_ASSIGNMENT_OPERATOR_P (tmpl) = DECL_ASSIGNMENT_OPERATOR_P (decl);
3171 if (DECL_OVERLOADED_OPERATOR_P (decl))
3172 SET_OVERLOADED_OPERATOR_CODE (tmpl,
3173 DECL_OVERLOADED_OPERATOR_P (decl));
3176 return tmpl;
3179 struct template_parm_data
3181 /* The level of the template parameters we are currently
3182 processing. */
3183 int level;
3185 /* The index of the specialization argument we are currently
3186 processing. */
3187 int current_arg;
3189 /* An array whose size is the number of template parameters. The
3190 elements are nonzero if the parameter has been used in any one
3191 of the arguments processed so far. */
3192 int* parms;
3194 /* An array whose size is the number of template arguments. The
3195 elements are nonzero if the argument makes use of template
3196 parameters of this level. */
3197 int* arg_uses_template_parms;
3200 /* Subroutine of push_template_decl used to see if each template
3201 parameter in a partial specialization is used in the explicit
3202 argument list. If T is of the LEVEL given in DATA (which is
3203 treated as a template_parm_data*), then DATA->PARMS is marked
3204 appropriately. */
3206 static int
3207 mark_template_parm (tree t, void* data)
3209 int level;
3210 int idx;
3211 struct template_parm_data* tpd = (struct template_parm_data*) data;
3213 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3215 level = TEMPLATE_PARM_LEVEL (t);
3216 idx = TEMPLATE_PARM_IDX (t);
3218 else
3220 level = TEMPLATE_TYPE_LEVEL (t);
3221 idx = TEMPLATE_TYPE_IDX (t);
3224 if (level == tpd->level)
3226 tpd->parms[idx] = 1;
3227 tpd->arg_uses_template_parms[tpd->current_arg] = 1;
3230 /* Return zero so that for_each_template_parm will continue the
3231 traversal of the tree; we want to mark *every* template parm. */
3232 return 0;
3235 /* Process the partial specialization DECL. */
3237 static tree
3238 process_partial_specialization (tree decl)
3240 tree type = TREE_TYPE (decl);
3241 tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
3242 tree specargs = CLASSTYPE_TI_ARGS (type);
3243 tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
3244 tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3245 tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
3246 int nargs = TREE_VEC_LENGTH (inner_args);
3247 int ntparms = TREE_VEC_LENGTH (inner_parms);
3248 int i;
3249 int did_error_intro = 0;
3250 struct template_parm_data tpd;
3251 struct template_parm_data tpd2;
3253 /* We check that each of the template parameters given in the
3254 partial specialization is used in the argument list to the
3255 specialization. For example:
3257 template <class T> struct S;
3258 template <class T> struct S<T*>;
3260 The second declaration is OK because `T*' uses the template
3261 parameter T, whereas
3263 template <class T> struct S<int>;
3265 is no good. Even trickier is:
3267 template <class T>
3268 struct S1
3270 template <class U>
3271 struct S2;
3272 template <class U>
3273 struct S2<T>;
3276 The S2<T> declaration is actually invalid; it is a
3277 full-specialization. Of course,
3279 template <class U>
3280 struct S2<T (*)(U)>;
3282 or some such would have been OK. */
3283 tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
3284 tpd.parms = (int *) alloca (sizeof (int) * ntparms);
3285 memset (tpd.parms, 0, sizeof (int) * ntparms);
3287 tpd.arg_uses_template_parms = (int *) alloca (sizeof (int) * nargs);
3288 memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
3289 for (i = 0; i < nargs; ++i)
3291 tpd.current_arg = i;
3292 for_each_template_parm (TREE_VEC_ELT (inner_args, i),
3293 &mark_template_parm,
3294 &tpd,
3295 NULL);
3297 for (i = 0; i < ntparms; ++i)
3298 if (tpd.parms[i] == 0)
3300 /* One of the template parms was not used in the
3301 specialization. */
3302 if (!did_error_intro)
3304 error ("template parameters not used in partial specialization:");
3305 did_error_intro = 1;
3308 error (" %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
3311 /* [temp.class.spec]
3313 The argument list of the specialization shall not be identical to
3314 the implicit argument list of the primary template. */
3315 if (comp_template_args
3316 (inner_args,
3317 INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
3318 (maintmpl)))))
3319 error ("partial specialization %qT does not specialize any template arguments", type);
3321 /* [temp.class.spec]
3323 A partially specialized non-type argument expression shall not
3324 involve template parameters of the partial specialization except
3325 when the argument expression is a simple identifier.
3327 The type of a template parameter corresponding to a specialized
3328 non-type argument shall not be dependent on a parameter of the
3329 specialization.
3331 Also, we verify that pack expansions only occur at the
3332 end of the argument list. */
3333 gcc_assert (nargs == DECL_NTPARMS (maintmpl));
3334 tpd2.parms = 0;
3335 for (i = 0; i < nargs; ++i)
3337 tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
3338 tree arg = TREE_VEC_ELT (inner_args, i);
3339 tree packed_args = NULL_TREE;
3340 int j, len = 1;
3342 if (ARGUMENT_PACK_P (arg))
3344 /* Extract the arguments from the argument pack. We'll be
3345 iterating over these in the following loop. */
3346 packed_args = ARGUMENT_PACK_ARGS (arg);
3347 len = TREE_VEC_LENGTH (packed_args);
3350 for (j = 0; j < len; j++)
3352 if (packed_args)
3353 /* Get the Jth argument in the parameter pack. */
3354 arg = TREE_VEC_ELT (packed_args, j);
3356 if (PACK_EXPANSION_P (arg))
3358 /* Pack expansions must come at the end of the
3359 argument list. */
3360 if ((packed_args && j < len - 1)
3361 || (!packed_args && i < nargs - 1))
3363 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3364 error ("parameter pack argument %qE must be at the end of the template argument list", arg);
3365 else
3366 error ("parameter pack argument %qT must be at the end of the template argument list", arg);
3370 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3371 /* We only care about the pattern. */
3372 arg = PACK_EXPANSION_PATTERN (arg);
3374 if (/* These first two lines are the `non-type' bit. */
3375 !TYPE_P (arg)
3376 && TREE_CODE (arg) != TEMPLATE_DECL
3377 /* This next line is the `argument expression is not just a
3378 simple identifier' condition and also the `specialized
3379 non-type argument' bit. */
3380 && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
3382 if ((!packed_args && tpd.arg_uses_template_parms[i])
3383 || (packed_args && uses_template_parms (arg)))
3384 error ("template argument %qE involves template parameter(s)",
3385 arg);
3386 else
3388 /* Look at the corresponding template parameter,
3389 marking which template parameters its type depends
3390 upon. */
3391 tree type = TREE_TYPE (parm);
3393 if (!tpd2.parms)
3395 /* We haven't yet initialized TPD2. Do so now. */
3396 tpd2.arg_uses_template_parms
3397 = (int *) alloca (sizeof (int) * nargs);
3398 /* The number of parameters here is the number in the
3399 main template, which, as checked in the assertion
3400 above, is NARGS. */
3401 tpd2.parms = (int *) alloca (sizeof (int) * nargs);
3402 tpd2.level =
3403 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
3406 /* Mark the template parameters. But this time, we're
3407 looking for the template parameters of the main
3408 template, not in the specialization. */
3409 tpd2.current_arg = i;
3410 tpd2.arg_uses_template_parms[i] = 0;
3411 memset (tpd2.parms, 0, sizeof (int) * nargs);
3412 for_each_template_parm (type,
3413 &mark_template_parm,
3414 &tpd2,
3415 NULL);
3417 if (tpd2.arg_uses_template_parms [i])
3419 /* The type depended on some template parameters.
3420 If they are fully specialized in the
3421 specialization, that's OK. */
3422 int j;
3423 for (j = 0; j < nargs; ++j)
3424 if (tpd2.parms[j] != 0
3425 && tpd.arg_uses_template_parms [j])
3427 error ("type %qT of template argument %qE depends "
3428 "on template parameter(s)",
3429 type,
3430 arg);
3431 break;
3439 if (retrieve_specialization (maintmpl, specargs,
3440 /*class_specializations_p=*/true))
3441 /* We've already got this specialization. */
3442 return decl;
3444 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
3445 = tree_cons (specargs, inner_parms,
3446 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
3447 TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
3448 return decl;
3451 /* Check that a template declaration's use of default arguments is not
3452 invalid. Here, PARMS are the template parameters. IS_PRIMARY is
3453 nonzero if DECL is the thing declared by a primary template.
3454 IS_PARTIAL is nonzero if DECL is a partial specialization.
3457 IS_FRIEND_DECL is nonzero if DECL is a friend function template
3458 declaration (but not a definition); 1 indicates a declaration, 2
3459 indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
3460 emitted for extraneous default arguments.
3462 Returns TRUE if there were no errors found, FALSE otherwise. */
3464 bool
3465 check_default_tmpl_args (tree decl, tree parms, int is_primary,
3466 int is_partial, int is_friend_decl)
3468 const char *msg;
3469 int last_level_to_check;
3470 tree parm_level;
3471 bool no_errors = true;
3473 /* [temp.param]
3475 A default template-argument shall not be specified in a
3476 function template declaration or a function template definition, nor
3477 in the template-parameter-list of the definition of a member of a
3478 class template. */
3480 if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
3481 /* You can't have a function template declaration in a local
3482 scope, nor you can you define a member of a class template in a
3483 local scope. */
3484 return true;
3486 if (current_class_type
3487 && !TYPE_BEING_DEFINED (current_class_type)
3488 && DECL_LANG_SPECIFIC (decl)
3489 /* If this is either a friend defined in the scope of the class
3490 or a member function. */
3491 && (DECL_FUNCTION_MEMBER_P (decl)
3492 ? same_type_p (DECL_CONTEXT (decl), current_class_type)
3493 : DECL_FRIEND_CONTEXT (decl)
3494 ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
3495 : false)
3496 /* And, if it was a member function, it really was defined in
3497 the scope of the class. */
3498 && (!DECL_FUNCTION_MEMBER_P (decl)
3499 || DECL_INITIALIZED_IN_CLASS_P (decl)))
3500 /* We already checked these parameters when the template was
3501 declared, so there's no need to do it again now. This function
3502 was defined in class scope, but we're processing it's body now
3503 that the class is complete. */
3504 return true;
3506 /* Core issue 226 (C++0x only): the following only applies to class
3507 templates. */
3508 if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
3510 /* [temp.param]
3512 If a template-parameter has a default template-argument, all
3513 subsequent template-parameters shall have a default
3514 template-argument supplied. */
3515 for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
3517 tree inner_parms = TREE_VALUE (parm_level);
3518 int ntparms = TREE_VEC_LENGTH (inner_parms);
3519 int seen_def_arg_p = 0;
3520 int i;
3522 for (i = 0; i < ntparms; ++i)
3524 tree parm = TREE_VEC_ELT (inner_parms, i);
3526 if (parm == error_mark_node)
3527 continue;
3529 if (TREE_PURPOSE (parm))
3530 seen_def_arg_p = 1;
3531 else if (seen_def_arg_p)
3533 error ("no default argument for %qD", TREE_VALUE (parm));
3534 /* For better subsequent error-recovery, we indicate that
3535 there should have been a default argument. */
3536 TREE_PURPOSE (parm) = error_mark_node;
3537 no_errors = false;
3543 if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
3544 || is_partial
3545 || !is_primary
3546 || is_friend_decl)
3547 /* For an ordinary class template, default template arguments are
3548 allowed at the innermost level, e.g.:
3549 template <class T = int>
3550 struct S {};
3551 but, in a partial specialization, they're not allowed even
3552 there, as we have in [temp.class.spec]:
3554 The template parameter list of a specialization shall not
3555 contain default template argument values.
3557 So, for a partial specialization, or for a function template
3558 (in C++98/C++03), we look at all of them. */
3560 else
3561 /* But, for a primary class template that is not a partial
3562 specialization we look at all template parameters except the
3563 innermost ones. */
3564 parms = TREE_CHAIN (parms);
3566 /* Figure out what error message to issue. */
3567 if (is_friend_decl == 2)
3568 msg = "default template arguments may not be used in function template friend re-declaration";
3569 else if (is_friend_decl)
3570 msg = "default template arguments may not be used in function template friend declarations";
3571 else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
3572 msg = "default template arguments may not be used in function templates";
3573 else if (is_partial)
3574 msg = "default template arguments may not be used in partial specializations";
3575 else
3576 msg = "default argument for template parameter for class enclosing %qD";
3578 if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
3579 /* If we're inside a class definition, there's no need to
3580 examine the parameters to the class itself. On the one
3581 hand, they will be checked when the class is defined, and,
3582 on the other, default arguments are valid in things like:
3583 template <class T = double>
3584 struct S { template <class U> void f(U); };
3585 Here the default argument for `S' has no bearing on the
3586 declaration of `f'. */
3587 last_level_to_check = template_class_depth (current_class_type) + 1;
3588 else
3589 /* Check everything. */
3590 last_level_to_check = 0;
3592 for (parm_level = parms;
3593 parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
3594 parm_level = TREE_CHAIN (parm_level))
3596 tree inner_parms = TREE_VALUE (parm_level);
3597 int i;
3598 int ntparms;
3600 ntparms = TREE_VEC_LENGTH (inner_parms);
3601 for (i = 0; i < ntparms; ++i)
3603 if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
3604 continue;
3606 if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
3608 if (msg)
3610 no_errors = false;
3611 if (is_friend_decl == 2)
3612 return no_errors;
3614 error (msg, decl);
3615 msg = 0;
3618 /* Clear out the default argument so that we are not
3619 confused later. */
3620 TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
3624 /* At this point, if we're still interested in issuing messages,
3625 they must apply to classes surrounding the object declared. */
3626 if (msg)
3627 msg = "default argument for template parameter for class enclosing %qD";
3630 return no_errors;
3633 /* Worker for push_template_decl_real, called via
3634 for_each_template_parm. DATA is really an int, indicating the
3635 level of the parameters we are interested in. If T is a template
3636 parameter of that level, return nonzero. */
3638 static int
3639 template_parm_this_level_p (tree t, void* data)
3641 int this_level = *(int *)data;
3642 int level;
3644 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3645 level = TEMPLATE_PARM_LEVEL (t);
3646 else
3647 level = TEMPLATE_TYPE_LEVEL (t);
3648 return level == this_level;
3651 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
3652 parameters given by current_template_args, or reuses a
3653 previously existing one, if appropriate. Returns the DECL, or an
3654 equivalent one, if it is replaced via a call to duplicate_decls.
3656 If IS_FRIEND is true, DECL is a friend declaration. */
3658 tree
3659 push_template_decl_real (tree decl, bool is_friend)
3661 tree tmpl;
3662 tree args;
3663 tree info;
3664 tree ctx;
3665 int primary;
3666 int is_partial;
3667 int new_template_p = 0;
3668 /* True if the template is a member template, in the sense of
3669 [temp.mem]. */
3670 bool member_template_p = false;
3672 if (decl == error_mark_node)
3673 return decl;
3675 /* See if this is a partial specialization. */
3676 is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
3677 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
3678 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
3680 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
3681 is_friend = true;
3683 if (is_friend)
3684 /* For a friend, we want the context of the friend function, not
3685 the type of which it is a friend. */
3686 ctx = DECL_CONTEXT (decl);
3687 else if (CP_DECL_CONTEXT (decl)
3688 && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
3689 /* In the case of a virtual function, we want the class in which
3690 it is defined. */
3691 ctx = CP_DECL_CONTEXT (decl);
3692 else
3693 /* Otherwise, if we're currently defining some class, the DECL
3694 is assumed to be a member of the class. */
3695 ctx = current_scope ();
3697 if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
3698 ctx = NULL_TREE;
3700 if (!DECL_CONTEXT (decl))
3701 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
3703 /* See if this is a primary template. */
3704 if (is_friend && ctx)
3705 /* A friend template that specifies a class context, i.e.
3706 template <typename T> friend void A<T>::f();
3707 is not primary. */
3708 primary = 0;
3709 else
3710 primary = template_parm_scope_p ();
3712 if (primary)
3714 if (DECL_CLASS_SCOPE_P (decl))
3715 member_template_p = true;
3716 if (TREE_CODE (decl) == TYPE_DECL
3717 && ANON_AGGRNAME_P (DECL_NAME (decl)))
3718 error ("template class without a name");
3719 else if (TREE_CODE (decl) == FUNCTION_DECL)
3721 if (DECL_DESTRUCTOR_P (decl))
3723 /* [temp.mem]
3725 A destructor shall not be a member template. */
3726 error ("destructor %qD declared as member template", decl);
3727 return error_mark_node;
3729 if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
3730 && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
3731 || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
3732 || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
3733 || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
3734 == void_list_node)))
3736 /* [basic.stc.dynamic.allocation]
3738 An allocation function can be a function
3739 template. ... Template allocation functions shall
3740 have two or more parameters. */
3741 error ("invalid template declaration of %qD", decl);
3742 return error_mark_node;
3745 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3746 && CLASS_TYPE_P (TREE_TYPE (decl)))
3747 /* OK */;
3748 else
3750 error ("template declaration of %q#D", decl);
3751 return error_mark_node;
3755 /* Check to see that the rules regarding the use of default
3756 arguments are not being violated. */
3757 check_default_tmpl_args (decl, current_template_parms,
3758 primary, is_partial, /*is_friend_decl=*/0);
3760 /* Ensure that there are no parameter packs in the type of this
3761 declaration that have not been expanded. */
3762 if (TREE_CODE (decl) == FUNCTION_DECL)
3764 /* Check each of the arguments individually to see if there are
3765 any bare parameter packs. */
3766 tree type = TREE_TYPE (decl);
3767 tree arg = DECL_ARGUMENTS (decl);
3768 tree argtype = TYPE_ARG_TYPES (type);
3770 while (arg && argtype)
3772 if (!FUNCTION_PARAMETER_PACK_P (arg)
3773 && !check_for_bare_parameter_packs (TREE_TYPE (arg)))
3775 /* This is a PARM_DECL that contains unexpanded parameter
3776 packs. We have already complained about this in the
3777 check_for_bare_parameter_packs call, so just replace
3778 these types with ERROR_MARK_NODE. */
3779 TREE_TYPE (arg) = error_mark_node;
3780 TREE_VALUE (argtype) = error_mark_node;
3783 arg = TREE_CHAIN (arg);
3784 argtype = TREE_CHAIN (argtype);
3787 /* Check for bare parameter packs in the return type and the
3788 exception specifiers. */
3789 check_for_bare_parameter_packs (TREE_TYPE (type));
3790 check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type));
3792 else
3793 check_for_bare_parameter_packs (TREE_TYPE (decl));
3795 if (is_partial)
3796 return process_partial_specialization (decl);
3798 /* A primary class template can only have one parameter pack, at the
3799 end of the template parameter list. */
3800 if (primary && TREE_CODE (decl) == TYPE_DECL)
3802 tree inner_parms
3803 = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3804 int i, len = TREE_VEC_LENGTH (inner_parms);
3805 for (i = 0; i < len - 1; i++)
3807 tree parm = TREE_VALUE (TREE_VEC_ELT (inner_parms, i));
3809 if (template_parameter_pack_p (parm))
3811 if (TREE_CODE (parm) == PARM_DECL)
3812 error ("parameter pack %qE must be at the end of the"
3813 " template parameter list", parm);
3814 else
3815 error ("parameter pack %qT must be at the end of the"
3816 " template parameter list", TREE_TYPE (parm));
3821 args = current_template_args ();
3823 if (!ctx
3824 || TREE_CODE (ctx) == FUNCTION_DECL
3825 || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
3826 || (is_friend && !DECL_TEMPLATE_INFO (decl)))
3828 if (DECL_LANG_SPECIFIC (decl)
3829 && DECL_TEMPLATE_INFO (decl)
3830 && DECL_TI_TEMPLATE (decl))
3831 tmpl = DECL_TI_TEMPLATE (decl);
3832 /* If DECL is a TYPE_DECL for a class-template, then there won't
3833 be DECL_LANG_SPECIFIC. The information equivalent to
3834 DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead. */
3835 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3836 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3837 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3839 /* Since a template declaration already existed for this
3840 class-type, we must be redeclaring it here. Make sure
3841 that the redeclaration is valid. */
3842 redeclare_class_template (TREE_TYPE (decl),
3843 current_template_parms);
3844 /* We don't need to create a new TEMPLATE_DECL; just use the
3845 one we already had. */
3846 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3848 else
3850 tmpl = build_template_decl (decl, current_template_parms,
3851 member_template_p);
3852 new_template_p = 1;
3854 if (DECL_LANG_SPECIFIC (decl)
3855 && DECL_TEMPLATE_SPECIALIZATION (decl))
3857 /* A specialization of a member template of a template
3858 class. */
3859 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3860 DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
3861 DECL_TEMPLATE_INFO (decl) = NULL_TREE;
3865 else
3867 tree a, t, current, parms;
3868 int i;
3870 if (TREE_CODE (decl) == TYPE_DECL)
3872 if ((IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (decl)))
3873 || TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
3874 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3875 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3876 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3877 else
3879 error ("%qD does not declare a template type", decl);
3880 return decl;
3883 else if (!DECL_LANG_SPECIFIC (decl) || !DECL_TEMPLATE_INFO (decl))
3885 error ("template definition of non-template %q#D", decl);
3886 return decl;
3888 else
3889 tmpl = DECL_TI_TEMPLATE (decl);
3891 if (DECL_FUNCTION_TEMPLATE_P (tmpl)
3892 && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
3893 && DECL_TEMPLATE_SPECIALIZATION (decl)
3894 && DECL_MEMBER_TEMPLATE_P (tmpl))
3896 tree new_tmpl;
3898 /* The declaration is a specialization of a member
3899 template, declared outside the class. Therefore, the
3900 innermost template arguments will be NULL, so we
3901 replace them with the arguments determined by the
3902 earlier call to check_explicit_specialization. */
3903 args = DECL_TI_ARGS (decl);
3905 new_tmpl
3906 = build_template_decl (decl, current_template_parms,
3907 member_template_p);
3908 DECL_TEMPLATE_RESULT (new_tmpl) = decl;
3909 TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
3910 DECL_TI_TEMPLATE (decl) = new_tmpl;
3911 SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
3912 DECL_TEMPLATE_INFO (new_tmpl)
3913 = tree_cons (tmpl, args, NULL_TREE);
3915 register_specialization (new_tmpl,
3916 most_general_template (tmpl),
3917 args,
3918 is_friend);
3919 return decl;
3922 /* Make sure the template headers we got make sense. */
3924 parms = DECL_TEMPLATE_PARMS (tmpl);
3925 i = TMPL_PARMS_DEPTH (parms);
3926 if (TMPL_ARGS_DEPTH (args) != i)
3928 error ("expected %d levels of template parms for %q#D, got %d",
3929 i, decl, TMPL_ARGS_DEPTH (args));
3931 else
3932 for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
3934 a = TMPL_ARGS_LEVEL (args, i);
3935 t = INNERMOST_TEMPLATE_PARMS (parms);
3937 if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
3939 if (current == decl)
3940 error ("got %d template parameters for %q#D",
3941 TREE_VEC_LENGTH (a), decl);
3942 else
3943 error ("got %d template parameters for %q#T",
3944 TREE_VEC_LENGTH (a), current);
3945 error (" but %d required", TREE_VEC_LENGTH (t));
3946 return error_mark_node;
3949 /* Perhaps we should also check that the parms are used in the
3950 appropriate qualifying scopes in the declarator? */
3952 if (current == decl)
3953 current = ctx;
3954 else
3955 current = (TYPE_P (current)
3956 ? TYPE_CONTEXT (current)
3957 : DECL_CONTEXT (current));
3961 DECL_TEMPLATE_RESULT (tmpl) = decl;
3962 TREE_TYPE (tmpl) = TREE_TYPE (decl);
3964 /* Push template declarations for global functions and types. Note
3965 that we do not try to push a global template friend declared in a
3966 template class; such a thing may well depend on the template
3967 parameters of the class. */
3968 if (new_template_p && !ctx
3969 && !(is_friend && template_class_depth (current_class_type) > 0))
3971 tmpl = pushdecl_namespace_level (tmpl, is_friend);
3972 if (tmpl == error_mark_node)
3973 return error_mark_node;
3975 /* Hide template friend classes that haven't been declared yet. */
3976 if (is_friend && TREE_CODE (decl) == TYPE_DECL)
3978 DECL_ANTICIPATED (tmpl) = 1;
3979 DECL_FRIEND_P (tmpl) = 1;
3983 if (primary)
3985 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
3986 if (DECL_CONV_FN_P (tmpl))
3988 int depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
3990 /* It is a conversion operator. See if the type converted to
3991 depends on innermost template operands. */
3993 if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
3994 depth))
3995 DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
3999 /* The DECL_TI_ARGS of DECL contains full set of arguments referring
4000 back to its most general template. If TMPL is a specialization,
4001 ARGS may only have the innermost set of arguments. Add the missing
4002 argument levels if necessary. */
4003 if (DECL_TEMPLATE_INFO (tmpl))
4004 args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
4006 info = tree_cons (tmpl, args, NULL_TREE);
4008 if (DECL_IMPLICIT_TYPEDEF_P (decl))
4009 SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
4010 else if (DECL_LANG_SPECIFIC (decl))
4011 DECL_TEMPLATE_INFO (decl) = info;
4013 return DECL_TEMPLATE_RESULT (tmpl);
4016 tree
4017 push_template_decl (tree decl)
4019 return push_template_decl_real (decl, false);
4022 /* Called when a class template TYPE is redeclared with the indicated
4023 template PARMS, e.g.:
4025 template <class T> struct S;
4026 template <class T> struct S {}; */
4028 bool
4029 redeclare_class_template (tree type, tree parms)
4031 tree tmpl;
4032 tree tmpl_parms;
4033 int i;
4035 if (!TYPE_TEMPLATE_INFO (type))
4037 error ("%qT is not a template type", type);
4038 return false;
4041 tmpl = TYPE_TI_TEMPLATE (type);
4042 if (!PRIMARY_TEMPLATE_P (tmpl))
4043 /* The type is nested in some template class. Nothing to worry
4044 about here; there are no new template parameters for the nested
4045 type. */
4046 return true;
4048 if (!parms)
4050 error ("template specifiers not specified in declaration of %qD",
4051 tmpl);
4052 return false;
4055 parms = INNERMOST_TEMPLATE_PARMS (parms);
4056 tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
4058 if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
4060 error ("previous declaration %q+D", tmpl);
4061 error ("used %d template parameter(s) instead of %d",
4062 TREE_VEC_LENGTH (tmpl_parms),
4063 TREE_VEC_LENGTH (parms));
4064 return false;
4067 for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
4069 tree tmpl_parm;
4070 tree parm;
4071 tree tmpl_default;
4072 tree parm_default;
4074 if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
4075 || TREE_VEC_ELT (parms, i) == error_mark_node)
4076 continue;
4078 tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
4079 parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4080 tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
4081 parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
4083 /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
4084 TEMPLATE_DECL. */
4085 if (tmpl_parm != error_mark_node
4086 && (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
4087 || (TREE_CODE (tmpl_parm) != TYPE_DECL
4088 && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))))
4090 error ("template parameter %q+#D", tmpl_parm);
4091 error ("redeclared here as %q#D", parm);
4092 return false;
4095 if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
4097 /* We have in [temp.param]:
4099 A template-parameter may not be given default arguments
4100 by two different declarations in the same scope. */
4101 error ("redefinition of default argument for %q#D", parm);
4102 error ("%J original definition appeared here", tmpl_parm);
4103 return false;
4106 if (parm_default != NULL_TREE)
4107 /* Update the previous template parameters (which are the ones
4108 that will really count) with the new default value. */
4109 TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
4110 else if (tmpl_default != NULL_TREE)
4111 /* Update the new parameters, too; they'll be used as the
4112 parameters for any members. */
4113 TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
4116 return true;
4119 /* Simplify EXPR if it is a non-dependent expression. Returns the
4120 (possibly simplified) expression. */
4122 tree
4123 fold_non_dependent_expr (tree expr)
4125 if (expr == NULL_TREE)
4126 return NULL_TREE;
4128 /* If we're in a template, but EXPR isn't value dependent, simplify
4129 it. We're supposed to treat:
4131 template <typename T> void f(T[1 + 1]);
4132 template <typename T> void f(T[2]);
4134 as two declarations of the same function, for example. */
4135 if (processing_template_decl
4136 && !type_dependent_expression_p (expr)
4137 && !value_dependent_expression_p (expr))
4139 HOST_WIDE_INT saved_processing_template_decl;
4141 saved_processing_template_decl = processing_template_decl;
4142 processing_template_decl = 0;
4143 expr = tsubst_copy_and_build (expr,
4144 /*args=*/NULL_TREE,
4145 tf_error,
4146 /*in_decl=*/NULL_TREE,
4147 /*function_p=*/false,
4148 /*integral_constant_expression_p=*/true);
4149 processing_template_decl = saved_processing_template_decl;
4151 return expr;
4154 /* EXPR is an expression which is used in a constant-expression context.
4155 For instance, it could be a VAR_DECL with a constant initializer.
4156 Extract the innest constant expression.
4158 This is basically a more powerful version of
4159 integral_constant_value, which can be used also in templates where
4160 initializers can maintain a syntactic rather than semantic form
4161 (even if they are non-dependent, for access-checking purposes). */
4163 static tree
4164 fold_decl_constant_value (tree expr)
4166 tree const_expr = expr;
4169 expr = fold_non_dependent_expr (const_expr);
4170 const_expr = integral_constant_value (expr);
4172 while (expr != const_expr);
4174 return expr;
4177 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
4178 must be a function or a pointer-to-function type, as specified
4179 in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
4180 and check that the resulting function has external linkage. */
4182 static tree
4183 convert_nontype_argument_function (tree type, tree expr)
4185 tree fns = expr;
4186 tree fn, fn_no_ptr;
4188 fn = instantiate_type (type, fns, tf_none);
4189 if (fn == error_mark_node)
4190 return error_mark_node;
4192 fn_no_ptr = fn;
4193 if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
4194 fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
4195 if (TREE_CODE (fn_no_ptr) == BASELINK)
4196 fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
4198 /* [temp.arg.nontype]/1
4200 A template-argument for a non-type, non-template template-parameter
4201 shall be one of:
4202 [...]
4203 -- the address of an object or function with external linkage. */
4204 if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
4206 error ("%qE is not a valid template argument for type %qT "
4207 "because function %qD has not external linkage",
4208 expr, type, fn_no_ptr);
4209 return NULL_TREE;
4212 return fn;
4215 /* Attempt to convert the non-type template parameter EXPR to the
4216 indicated TYPE. If the conversion is successful, return the
4217 converted value. If the conversion is unsuccessful, return
4218 NULL_TREE if we issued an error message, or error_mark_node if we
4219 did not. We issue error messages for out-and-out bad template
4220 parameters, but not simply because the conversion failed, since we
4221 might be just trying to do argument deduction. Both TYPE and EXPR
4222 must be non-dependent.
4224 The conversion follows the special rules described in
4225 [temp.arg.nontype], and it is much more strict than an implicit
4226 conversion.
4228 This function is called twice for each template argument (see
4229 lookup_template_class for a more accurate description of this
4230 problem). This means that we need to handle expressions which
4231 are not valid in a C++ source, but can be created from the
4232 first call (for instance, casts to perform conversions). These
4233 hacks can go away after we fix the double coercion problem. */
4235 static tree
4236 convert_nontype_argument (tree type, tree expr)
4238 tree expr_type;
4240 /* Detect immediately string literals as invalid non-type argument.
4241 This special-case is not needed for correctness (we would easily
4242 catch this later), but only to provide better diagnostic for this
4243 common user mistake. As suggested by DR 100, we do not mention
4244 linkage issues in the diagnostic as this is not the point. */
4245 if (TREE_CODE (expr) == STRING_CST)
4247 error ("%qE is not a valid template argument for type %qT "
4248 "because string literals can never be used in this context",
4249 expr, type);
4250 return NULL_TREE;
4253 /* If we are in a template, EXPR may be non-dependent, but still
4254 have a syntactic, rather than semantic, form. For example, EXPR
4255 might be a SCOPE_REF, rather than the VAR_DECL to which the
4256 SCOPE_REF refers. Preserving the qualifying scope is necessary
4257 so that access checking can be performed when the template is
4258 instantiated -- but here we need the resolved form so that we can
4259 convert the argument. */
4260 expr = fold_non_dependent_expr (expr);
4261 if (error_operand_p (expr))
4262 return error_mark_node;
4263 expr_type = TREE_TYPE (expr);
4265 /* HACK: Due to double coercion, we can get a
4266 NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
4267 which is the tree that we built on the first call (see
4268 below when coercing to reference to object or to reference to
4269 function). We just strip everything and get to the arg.
4270 See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
4271 for examples. */
4272 if (TREE_CODE (expr) == NOP_EXPR)
4274 if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
4276 /* ??? Maybe we could use convert_from_reference here, but we
4277 would need to relax its constraints because the NOP_EXPR
4278 could actually change the type to something more cv-qualified,
4279 and this is not folded by convert_from_reference. */
4280 tree addr = TREE_OPERAND (expr, 0);
4281 gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
4282 gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
4283 gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
4284 gcc_assert (same_type_ignoring_top_level_qualifiers_p
4285 (TREE_TYPE (expr_type),
4286 TREE_TYPE (TREE_TYPE (addr))));
4288 expr = TREE_OPERAND (addr, 0);
4289 expr_type = TREE_TYPE (expr);
4292 /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
4293 parameter is a pointer to object, through decay and
4294 qualification conversion. Let's strip everything. */
4295 else if (TYPE_PTROBV_P (type))
4297 STRIP_NOPS (expr);
4298 gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
4299 gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
4300 /* Skip the ADDR_EXPR only if it is part of the decay for
4301 an array. Otherwise, it is part of the original argument
4302 in the source code. */
4303 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
4304 expr = TREE_OPERAND (expr, 0);
4305 expr_type = TREE_TYPE (expr);
4309 /* [temp.arg.nontype]/5, bullet 1
4311 For a non-type template-parameter of integral or enumeration type,
4312 integral promotions (_conv.prom_) and integral conversions
4313 (_conv.integral_) are applied. */
4314 if (INTEGRAL_TYPE_P (type))
4316 if (!INTEGRAL_TYPE_P (expr_type))
4317 return error_mark_node;
4319 expr = fold_decl_constant_value (expr);
4320 /* Notice that there are constant expressions like '4 % 0' which
4321 do not fold into integer constants. */
4322 if (TREE_CODE (expr) != INTEGER_CST)
4324 error ("%qE is not a valid template argument for type %qT "
4325 "because it is a non-constant expression", expr, type);
4326 return NULL_TREE;
4329 /* At this point, an implicit conversion does what we want,
4330 because we already know that the expression is of integral
4331 type. */
4332 expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
4333 if (expr == error_mark_node)
4334 return error_mark_node;
4336 /* Conversion was allowed: fold it to a bare integer constant. */
4337 expr = fold (expr);
4339 /* [temp.arg.nontype]/5, bullet 2
4341 For a non-type template-parameter of type pointer to object,
4342 qualification conversions (_conv.qual_) and the array-to-pointer
4343 conversion (_conv.array_) are applied. */
4344 else if (TYPE_PTROBV_P (type))
4346 /* [temp.arg.nontype]/1 (TC1 version, DR 49):
4348 A template-argument for a non-type, non-template template-parameter
4349 shall be one of: [...]
4351 -- the name of a non-type template-parameter;
4352 -- the address of an object or function with external linkage, [...]
4353 expressed as "& id-expression" where the & is optional if the name
4354 refers to a function or array, or if the corresponding
4355 template-parameter is a reference.
4357 Here, we do not care about functions, as they are invalid anyway
4358 for a parameter of type pointer-to-object. */
4360 if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
4361 /* Non-type template parameters are OK. */
4363 else if (TREE_CODE (expr) != ADDR_EXPR
4364 && TREE_CODE (expr_type) != ARRAY_TYPE)
4366 if (TREE_CODE (expr) == VAR_DECL)
4368 error ("%qD is not a valid template argument "
4369 "because %qD is a variable, not the address of "
4370 "a variable",
4371 expr, expr);
4372 return NULL_TREE;
4374 /* Other values, like integer constants, might be valid
4375 non-type arguments of some other type. */
4376 return error_mark_node;
4378 else
4380 tree decl;
4382 decl = ((TREE_CODE (expr) == ADDR_EXPR)
4383 ? TREE_OPERAND (expr, 0) : expr);
4384 if (TREE_CODE (decl) != VAR_DECL)
4386 error ("%qE is not a valid template argument of type %qT "
4387 "because %qE is not a variable",
4388 expr, type, decl);
4389 return NULL_TREE;
4391 else if (!DECL_EXTERNAL_LINKAGE_P (decl))
4393 error ("%qE is not a valid template argument of type %qT "
4394 "because %qD does not have external linkage",
4395 expr, type, decl);
4396 return NULL_TREE;
4400 expr = decay_conversion (expr);
4401 if (expr == error_mark_node)
4402 return error_mark_node;
4404 expr = perform_qualification_conversions (type, expr);
4405 if (expr == error_mark_node)
4406 return error_mark_node;
4408 /* [temp.arg.nontype]/5, bullet 3
4410 For a non-type template-parameter of type reference to object, no
4411 conversions apply. The type referred to by the reference may be more
4412 cv-qualified than the (otherwise identical) type of the
4413 template-argument. The template-parameter is bound directly to the
4414 template-argument, which must be an lvalue. */
4415 else if (TYPE_REF_OBJ_P (type))
4417 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
4418 expr_type))
4419 return error_mark_node;
4421 if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
4423 error ("%qE is not a valid template argument for type %qT "
4424 "because of conflicts in cv-qualification", expr, type);
4425 return NULL_TREE;
4428 if (!real_lvalue_p (expr))
4430 error ("%qE is not a valid template argument for type %qT "
4431 "because it is not an lvalue", expr, type);
4432 return NULL_TREE;
4435 /* [temp.arg.nontype]/1
4437 A template-argument for a non-type, non-template template-parameter
4438 shall be one of: [...]
4440 -- the address of an object or function with external linkage. */
4441 if (!DECL_EXTERNAL_LINKAGE_P (expr))
4443 error ("%qE is not a valid template argument for type %qT "
4444 "because object %qD has not external linkage",
4445 expr, type, expr);
4446 return NULL_TREE;
4449 expr = build_nop (type, build_address (expr));
4451 /* [temp.arg.nontype]/5, bullet 4
4453 For a non-type template-parameter of type pointer to function, only
4454 the function-to-pointer conversion (_conv.func_) is applied. If the
4455 template-argument represents a set of overloaded functions (or a
4456 pointer to such), the matching function is selected from the set
4457 (_over.over_). */
4458 else if (TYPE_PTRFN_P (type))
4460 /* If the argument is a template-id, we might not have enough
4461 context information to decay the pointer. */
4462 if (!type_unknown_p (expr_type))
4464 expr = decay_conversion (expr);
4465 if (expr == error_mark_node)
4466 return error_mark_node;
4469 expr = convert_nontype_argument_function (type, expr);
4470 if (!expr || expr == error_mark_node)
4471 return expr;
4473 /* [temp.arg.nontype]/5, bullet 5
4475 For a non-type template-parameter of type reference to function, no
4476 conversions apply. If the template-argument represents a set of
4477 overloaded functions, the matching function is selected from the set
4478 (_over.over_). */
4479 else if (TYPE_REFFN_P (type))
4481 if (TREE_CODE (expr) == ADDR_EXPR)
4483 error ("%qE is not a valid template argument for type %qT "
4484 "because it is a pointer", expr, type);
4485 inform ("try using %qE instead", TREE_OPERAND (expr, 0));
4486 return NULL_TREE;
4489 expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
4490 if (!expr || expr == error_mark_node)
4491 return expr;
4493 expr = build_nop (type, build_address (expr));
4495 /* [temp.arg.nontype]/5, bullet 6
4497 For a non-type template-parameter of type pointer to member function,
4498 no conversions apply. If the template-argument represents a set of
4499 overloaded member functions, the matching member function is selected
4500 from the set (_over.over_). */
4501 else if (TYPE_PTRMEMFUNC_P (type))
4503 expr = instantiate_type (type, expr, tf_none);
4504 if (expr == error_mark_node)
4505 return error_mark_node;
4507 /* There is no way to disable standard conversions in
4508 resolve_address_of_overloaded_function (called by
4509 instantiate_type). It is possible that the call succeeded by
4510 converting &B::I to &D::I (where B is a base of D), so we need
4511 to reject this conversion here.
4513 Actually, even if there was a way to disable standard conversions,
4514 it would still be better to reject them here so that we can
4515 provide a superior diagnostic. */
4516 if (!same_type_p (TREE_TYPE (expr), type))
4518 /* Make sure we are just one standard conversion off. */
4519 gcc_assert (can_convert (type, TREE_TYPE (expr)));
4520 error ("%qE is not a valid template argument for type %qT "
4521 "because it is of type %qT", expr, type,
4522 TREE_TYPE (expr));
4523 inform ("standard conversions are not allowed in this context");
4524 return NULL_TREE;
4527 /* [temp.arg.nontype]/5, bullet 7
4529 For a non-type template-parameter of type pointer to data member,
4530 qualification conversions (_conv.qual_) are applied. */
4531 else if (TYPE_PTRMEM_P (type))
4533 expr = perform_qualification_conversions (type, expr);
4534 if (expr == error_mark_node)
4535 return expr;
4537 /* A template non-type parameter must be one of the above. */
4538 else
4539 gcc_unreachable ();
4541 /* Sanity check: did we actually convert the argument to the
4542 right type? */
4543 gcc_assert (same_type_p (type, TREE_TYPE (expr)));
4544 return expr;
4548 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
4549 template template parameters. Both PARM_PARMS and ARG_PARMS are
4550 vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
4551 or PARM_DECL.
4553 Consider the example:
4554 template <class T> class A;
4555 template<template <class U> class TT> class B;
4557 For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
4558 the parameters to A, and OUTER_ARGS contains A. */
4560 static int
4561 coerce_template_template_parms (tree parm_parms,
4562 tree arg_parms,
4563 tsubst_flags_t complain,
4564 tree in_decl,
4565 tree outer_args)
4567 int nparms, nargs, i;
4568 tree parm, arg;
4570 gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
4571 gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
4573 nparms = TREE_VEC_LENGTH (parm_parms);
4574 nargs = TREE_VEC_LENGTH (arg_parms);
4576 if (nargs != nparms)
4577 return 0;
4579 for (i = 0; i < nparms; ++i)
4581 if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
4582 || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
4583 continue;
4585 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
4586 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
4588 if (arg == NULL_TREE || arg == error_mark_node
4589 || parm == NULL_TREE || parm == error_mark_node)
4590 return 0;
4592 if (TREE_CODE (arg) != TREE_CODE (parm))
4593 return 0;
4595 switch (TREE_CODE (parm))
4597 case TEMPLATE_DECL:
4598 /* We encounter instantiations of templates like
4599 template <template <template <class> class> class TT>
4600 class C; */
4602 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4603 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
4605 if (!coerce_template_template_parms
4606 (parmparm, argparm, complain, in_decl, outer_args))
4607 return 0;
4609 /* Fall through. */
4611 case TYPE_DECL:
4612 if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))
4613 != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg)))
4614 /* One is a parameter pack, the other is not. */
4615 return 0;
4616 break;
4618 case PARM_DECL:
4619 /* The tsubst call is used to handle cases such as
4621 template <int> class C {};
4622 template <class T, template <T> class TT> class D {};
4623 D<int, C> d;
4625 i.e. the parameter list of TT depends on earlier parameters. */
4626 if (!dependent_type_p (TREE_TYPE (arg))
4627 && !same_type_p
4628 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
4629 TREE_TYPE (arg)))
4630 return 0;
4632 if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
4633 != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg)))
4634 /* One is a parameter pack, the other is not. */
4635 return 0;
4636 break;
4638 default:
4639 gcc_unreachable ();
4642 return 1;
4645 /* Convert the indicated template ARG as necessary to match the
4646 indicated template PARM. Returns the converted ARG, or
4647 error_mark_node if the conversion was unsuccessful. Error and
4648 warning messages are issued under control of COMPLAIN. This
4649 conversion is for the Ith parameter in the parameter list. ARGS is
4650 the full set of template arguments deduced so far. */
4652 static tree
4653 convert_template_argument (tree parm,
4654 tree arg,
4655 tree args,
4656 tsubst_flags_t complain,
4657 int i,
4658 tree in_decl)
4660 tree val;
4661 int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
4662 tree check_arg = arg;
4664 if (TREE_CODE (arg) == TREE_LIST
4665 && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
4667 /* The template argument was the name of some
4668 member function. That's usually
4669 invalid, but static members are OK. In any
4670 case, grab the underlying fields/functions
4671 and issue an error later if required. */
4672 arg = TREE_VALUE (arg);
4673 TREE_TYPE (arg) = unknown_type_node;
4676 requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
4677 requires_type = (TREE_CODE (parm) == TYPE_DECL
4678 || requires_tmpl_type);
4680 /* When determining whether an argument pack expansion is a template,
4681 look at the pattern. */
4682 if (TREE_CODE (check_arg) == TYPE_PACK_EXPANSION)
4683 check_arg = PACK_EXPANSION_PATTERN (check_arg);
4685 is_tmpl_type =
4686 ((TREE_CODE (check_arg) == TEMPLATE_DECL
4687 && TREE_CODE (DECL_TEMPLATE_RESULT (check_arg)) == TYPE_DECL)
4688 || TREE_CODE (check_arg) == TEMPLATE_TEMPLATE_PARM
4689 || TREE_CODE (check_arg) == UNBOUND_CLASS_TEMPLATE);
4691 if (is_tmpl_type
4692 && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4693 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
4694 arg = TYPE_STUB_DECL (arg);
4696 is_type = TYPE_P (arg) || is_tmpl_type;
4698 if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
4699 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
4701 pedwarn ("to refer to a type member of a template parameter, "
4702 "use %<typename %E%>", arg);
4704 arg = make_typename_type (TREE_OPERAND (arg, 0),
4705 TREE_OPERAND (arg, 1),
4706 typename_type,
4707 complain & tf_error);
4708 is_type = 1;
4710 if (is_type != requires_type)
4712 if (in_decl)
4714 if (complain & tf_error)
4716 error ("type/value mismatch at argument %d in template "
4717 "parameter list for %qD",
4718 i + 1, in_decl);
4719 if (is_type)
4720 error (" expected a constant of type %qT, got %qT",
4721 TREE_TYPE (parm),
4722 (is_tmpl_type ? DECL_NAME (arg) : arg));
4723 else if (requires_tmpl_type)
4724 error (" expected a class template, got %qE", arg);
4725 else
4726 error (" expected a type, got %qE", arg);
4729 return error_mark_node;
4731 if (is_tmpl_type ^ requires_tmpl_type)
4733 if (in_decl && (complain & tf_error))
4735 error ("type/value mismatch at argument %d in template "
4736 "parameter list for %qD",
4737 i + 1, in_decl);
4738 if (is_tmpl_type)
4739 error (" expected a type, got %qT", DECL_NAME (arg));
4740 else
4741 error (" expected a class template, got %qT", arg);
4743 return error_mark_node;
4746 if (is_type)
4748 if (requires_tmpl_type)
4750 if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
4751 /* The number of argument required is not known yet.
4752 Just accept it for now. */
4753 val = TREE_TYPE (arg);
4754 else
4756 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4757 tree argparm;
4759 check_arg = arg;
4760 /* When determining whether a pack expansion is a template,
4761 look at the pattern. */
4762 if (TREE_CODE (check_arg) == TYPE_PACK_EXPANSION)
4763 check_arg = PACK_EXPANSION_PATTERN (check_arg);
4765 argparm = DECL_INNERMOST_TEMPLATE_PARMS (check_arg);
4767 if (coerce_template_template_parms (parmparm, argparm,
4768 complain, in_decl,
4769 args))
4771 val = arg;
4773 /* TEMPLATE_TEMPLATE_PARM node is preferred over
4774 TEMPLATE_DECL. */
4775 if (val != error_mark_node)
4777 if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
4778 val = TREE_TYPE (val);
4779 else if (TREE_CODE (val) == TYPE_PACK_EXPANSION
4780 && DECL_TEMPLATE_TEMPLATE_PARM_P (check_arg))
4782 val = TREE_TYPE (check_arg);
4783 val = make_pack_expansion (val);
4787 else
4789 if (in_decl && (complain & tf_error))
4791 error ("type/value mismatch at argument %d in "
4792 "template parameter list for %qD",
4793 i + 1, in_decl);
4794 error (" expected a template of type %qD, got %qD",
4795 parm, arg);
4798 val = error_mark_node;
4802 else
4803 val = arg;
4804 /* We only form one instance of each template specialization.
4805 Therefore, if we use a non-canonical variant (i.e., a
4806 typedef), any future messages referring to the type will use
4807 the typedef, which is confusing if those future uses do not
4808 themselves also use the typedef. */
4809 if (TYPE_P (val))
4810 val = canonical_type_variant (val);
4812 else
4814 tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
4816 if (invalid_nontype_parm_type_p (t, complain))
4817 return error_mark_node;
4819 if (!uses_template_parms (arg) && !uses_template_parms (t))
4820 /* We used to call digest_init here. However, digest_init
4821 will report errors, which we don't want when complain
4822 is zero. More importantly, digest_init will try too
4823 hard to convert things: for example, `0' should not be
4824 converted to pointer type at this point according to
4825 the standard. Accepting this is not merely an
4826 extension, since deciding whether or not these
4827 conversions can occur is part of determining which
4828 function template to call, or whether a given explicit
4829 argument specification is valid. */
4830 val = convert_nontype_argument (t, arg);
4831 else
4832 val = arg;
4834 if (val == NULL_TREE)
4835 val = error_mark_node;
4836 else if (val == error_mark_node && (complain & tf_error))
4837 error ("could not convert template argument %qE to %qT", arg, t);
4840 return val;
4843 /* Coerces the remaining template arguments in INNER_ARGS (from
4844 ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
4845 Returns the coerced argument pack. PARM_IDX is the position of this
4846 parameter in the template parameter list. ARGS is the original
4847 template argument list. */
4848 static tree
4849 coerce_template_parameter_pack (tree parms,
4850 int parm_idx,
4851 tree args,
4852 tree inner_args,
4853 int arg_idx,
4854 tree new_args,
4855 int* lost,
4856 tree in_decl,
4857 tsubst_flags_t complain)
4859 tree parm = TREE_VEC_ELT (parms, parm_idx);
4860 int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
4861 tree packed_args;
4862 tree argument_pack;
4863 tree packed_types = NULL_TREE;
4865 if (arg_idx > nargs)
4866 arg_idx = nargs;
4868 packed_args = make_tree_vec (nargs - arg_idx);
4870 if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
4871 && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
4873 /* When the template parameter is a non-type template
4874 parameter pack whose type uses parameter packs, we need
4875 to look at each of the template arguments
4876 separately. Build a vector of the types for these
4877 non-type template parameters in PACKED_TYPES. */
4878 tree expansion
4879 = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
4880 packed_types = tsubst_pack_expansion (expansion, args,
4881 complain, in_decl);
4883 if (packed_types == error_mark_node)
4884 return error_mark_node;
4886 /* Check that we have the right number of arguments. */
4887 if (arg_idx < nargs
4888 && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
4889 && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
4891 int needed_parms
4892 = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
4893 error ("wrong number of template arguments (%d, should be %d)",
4894 nargs, needed_parms);
4895 return error_mark_node;
4898 /* If we aren't able to check the actual arguments now
4899 (because they haven't been expanded yet), we can at least
4900 verify that all of the types used for the non-type
4901 template parameter pack are, in fact, valid for non-type
4902 template parameters. */
4903 if (arg_idx < nargs
4904 && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
4906 int j, len = TREE_VEC_LENGTH (packed_types);
4907 for (j = 0; j < len; ++j)
4909 tree t = TREE_VEC_ELT (packed_types, j);
4910 if (invalid_nontype_parm_type_p (t, complain))
4911 return error_mark_node;
4916 /* Convert the remaining arguments, which will be a part of the
4917 parameter pack "parm". */
4918 for (; arg_idx < nargs; ++arg_idx)
4920 tree arg = TREE_VEC_ELT (inner_args, arg_idx);
4921 tree actual_parm = TREE_VALUE (parm);
4923 if (packed_types && !PACK_EXPANSION_P (arg))
4925 /* When we have a vector of types (corresponding to the
4926 non-type template parameter pack that uses parameter
4927 packs in its type, as mention above), and the
4928 argument is not an expansion (which expands to a
4929 currently unknown number of arguments), clone the
4930 parm and give it the next type in PACKED_TYPES. */
4931 actual_parm = copy_node (actual_parm);
4932 TREE_TYPE (actual_parm) =
4933 TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
4936 if (arg != error_mark_node)
4937 arg = convert_template_argument (actual_parm,
4938 arg, new_args, complain, parm_idx,
4939 in_decl);
4940 if (arg == error_mark_node)
4941 (*lost)++;
4942 TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg;
4945 if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
4946 || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
4947 argument_pack = make_node (TYPE_ARGUMENT_PACK);
4948 else
4950 argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
4951 TREE_TYPE (argument_pack) = TREE_TYPE (TREE_VALUE (parm));
4952 TREE_CONSTANT (argument_pack) = 1;
4955 SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
4956 return argument_pack;
4959 /* Convert all template arguments to their appropriate types, and
4960 return a vector containing the innermost resulting template
4961 arguments. If any error occurs, return error_mark_node. Error and
4962 warning messages are issued under control of COMPLAIN.
4964 If REQUIRE_ALL_ARGS is false, argument deduction will be performed
4965 for arguments not specified in ARGS. Otherwise, if
4966 USE_DEFAULT_ARGS is true, default arguments will be used to fill in
4967 unspecified arguments. If REQUIRE_ALL_ARGS is true, but
4968 USE_DEFAULT_ARGS is false, then all arguments must be specified in
4969 ARGS. */
4971 static tree
4972 coerce_template_parms (tree parms,
4973 tree args,
4974 tree in_decl,
4975 tsubst_flags_t complain,
4976 bool require_all_args,
4977 bool use_default_args)
4979 int nparms, nargs, parm_idx, arg_idx, lost = 0;
4980 tree inner_args;
4981 tree new_args;
4982 tree new_inner_args;
4983 bool saved_skip_evaluation;
4985 /* When used as a boolean value, indicates whether this is a
4986 variadic template parameter list. Since it's an int, we can also
4987 subtract it from nparms to get the number of non-variadic
4988 parameters. */
4989 int variadic_p = 0;
4991 inner_args
4992 = expand_template_argument_pack (INNERMOST_TEMPLATE_ARGS (args));
4994 nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
4995 nparms = TREE_VEC_LENGTH (parms);
4997 /* Determine if there are any parameter packs. */
4998 for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
5000 tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
5001 if (template_parameter_pack_p (tparm))
5003 variadic_p = 1;
5004 break;
5008 if ((nargs > nparms - variadic_p && !variadic_p)
5009 || (nargs < nparms - variadic_p
5010 && require_all_args
5011 && (!use_default_args
5012 || (TREE_VEC_ELT (parms, nargs) != error_mark_node
5013 && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
5015 if (complain & tf_error)
5017 const char *or_more = "";
5018 if (variadic_p)
5020 or_more = " or more";
5021 --nparms;
5024 error ("wrong number of template arguments (%d, should be %d%s)",
5025 nargs, nparms, or_more);
5027 if (in_decl)
5028 error ("provided for %q+D", in_decl);
5031 return error_mark_node;
5034 /* We need to evaluate the template arguments, even though this
5035 template-id may be nested within a "sizeof". */
5036 saved_skip_evaluation = skip_evaluation;
5037 skip_evaluation = false;
5038 new_inner_args = make_tree_vec (nparms);
5039 new_args = add_outermost_template_args (args, new_inner_args);
5040 for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
5042 tree arg;
5043 tree parm;
5045 /* Get the Ith template parameter. */
5046 parm = TREE_VEC_ELT (parms, parm_idx);
5048 if (parm == error_mark_node)
5050 TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
5051 continue;
5054 /* Calculate the next argument. */
5055 if (template_parameter_pack_p (TREE_VALUE (parm)))
5057 /* All remaining arguments will be placed in the
5058 template parameter pack PARM. */
5059 arg = coerce_template_parameter_pack (parms, parm_idx, args,
5060 inner_args, arg_idx,
5061 new_args, &lost,
5062 in_decl, complain);
5064 /* Store this argument. */
5065 if (arg == error_mark_node)
5066 lost++;
5067 TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
5069 /* We are done with all of the arguments. */
5070 arg_idx = nargs;
5072 continue;
5074 else if (arg_idx < nargs)
5076 arg = TREE_VEC_ELT (inner_args, arg_idx);
5078 if (arg && PACK_EXPANSION_P (arg))
5080 /* If ARG is a pack expansion, but PARM is not a
5081 template parameter pack (if it were, we would have
5082 handled it above), we're trying to expand into a
5083 fixed-length argument list. */
5084 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
5085 error ("cannot expand %<%E%> into a fixed-length "
5086 "argument list", arg);
5087 else
5088 error ("cannot expand %<%T%> into a fixed-length "
5089 "argument list", arg);
5090 return error_mark_node;
5093 else if (require_all_args)
5094 /* There must be a default arg in this case. */
5095 arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
5096 complain, in_decl);
5097 else
5098 break;
5100 if (arg == error_mark_node)
5102 if (complain & tf_error)
5103 error ("template argument %d is invalid", arg_idx + 1);
5105 else if (!arg)
5106 /* This only occurs if there was an error in the template
5107 parameter list itself (which we would already have
5108 reported) that we are trying to recover from, e.g., a class
5109 template with a parameter list such as
5110 template<typename..., typename>. */
5111 return error_mark_node;
5112 else
5113 arg = convert_template_argument (TREE_VALUE (parm),
5114 arg, new_args, complain,
5115 parm_idx, in_decl);
5117 if (arg == error_mark_node)
5118 lost++;
5119 TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
5121 skip_evaluation = saved_skip_evaluation;
5123 if (lost)
5124 return error_mark_node;
5126 return new_inner_args;
5129 /* Returns 1 if template args OT and NT are equivalent. */
5131 static int
5132 template_args_equal (tree ot, tree nt)
5134 if (nt == ot)
5135 return 1;
5137 if (TREE_CODE (nt) == TREE_VEC)
5138 /* For member templates */
5139 return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
5140 else if (PACK_EXPANSION_P (ot))
5141 return PACK_EXPANSION_P (nt)
5142 && template_args_equal (PACK_EXPANSION_PATTERN (ot),
5143 PACK_EXPANSION_PATTERN (nt));
5144 else if (TYPE_P (nt))
5145 return TYPE_P (ot) && same_type_p (ot, nt);
5146 else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
5147 return 0;
5148 else
5149 return cp_tree_equal (ot, nt);
5152 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
5153 of template arguments. Returns 0 otherwise. */
5156 comp_template_args (tree oldargs, tree newargs)
5158 int i;
5160 oldargs = expand_template_argument_pack (oldargs);
5161 newargs = expand_template_argument_pack (newargs);
5163 if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
5164 return 0;
5166 for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
5168 tree nt = TREE_VEC_ELT (newargs, i);
5169 tree ot = TREE_VEC_ELT (oldargs, i);
5171 if (! template_args_equal (ot, nt))
5172 return 0;
5174 return 1;
5177 static void
5178 add_pending_template (tree d)
5180 tree ti = (TYPE_P (d)
5181 ? CLASSTYPE_TEMPLATE_INFO (d)
5182 : DECL_TEMPLATE_INFO (d));
5183 struct pending_template *pt;
5184 int level;
5186 if (TI_PENDING_TEMPLATE_FLAG (ti))
5187 return;
5189 /* We are called both from instantiate_decl, where we've already had a
5190 tinst_level pushed, and instantiate_template, where we haven't.
5191 Compensate. */
5192 level = !current_tinst_level || current_tinst_level->decl != d;
5194 if (level)
5195 push_tinst_level (d);
5197 pt = GGC_NEW (struct pending_template);
5198 pt->next = NULL;
5199 pt->tinst = current_tinst_level;
5200 if (last_pending_template)
5201 last_pending_template->next = pt;
5202 else
5203 pending_templates = pt;
5205 last_pending_template = pt;
5207 TI_PENDING_TEMPLATE_FLAG (ti) = 1;
5209 if (level)
5210 pop_tinst_level ();
5214 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
5215 ARGLIST. Valid choices for FNS are given in the cp-tree.def
5216 documentation for TEMPLATE_ID_EXPR. */
5218 tree
5219 lookup_template_function (tree fns, tree arglist)
5221 tree type;
5223 if (fns == error_mark_node || arglist == error_mark_node)
5224 return error_mark_node;
5226 gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
5227 gcc_assert (fns && (is_overloaded_fn (fns)
5228 || TREE_CODE (fns) == IDENTIFIER_NODE));
5230 if (BASELINK_P (fns))
5232 BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
5233 unknown_type_node,
5234 BASELINK_FUNCTIONS (fns),
5235 arglist);
5236 return fns;
5239 type = TREE_TYPE (fns);
5240 if (TREE_CODE (fns) == OVERLOAD || !type)
5241 type = unknown_type_node;
5243 return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
5246 /* Within the scope of a template class S<T>, the name S gets bound
5247 (in build_self_reference) to a TYPE_DECL for the class, not a
5248 TEMPLATE_DECL. If DECL is a TYPE_DECL for current_class_type,
5249 or one of its enclosing classes, and that type is a template,
5250 return the associated TEMPLATE_DECL. Otherwise, the original
5251 DECL is returned. */
5253 tree
5254 maybe_get_template_decl_from_type_decl (tree decl)
5256 return (decl != NULL_TREE
5257 && TREE_CODE (decl) == TYPE_DECL
5258 && DECL_ARTIFICIAL (decl)
5259 && CLASS_TYPE_P (TREE_TYPE (decl))
5260 && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
5261 ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
5264 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
5265 parameters, find the desired type.
5267 D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
5269 IN_DECL, if non-NULL, is the template declaration we are trying to
5270 instantiate.
5272 If ENTERING_SCOPE is nonzero, we are about to enter the scope of
5273 the class we are looking up.
5275 Issue error and warning messages under control of COMPLAIN.
5277 If the template class is really a local class in a template
5278 function, then the FUNCTION_CONTEXT is the function in which it is
5279 being instantiated.
5281 ??? Note that this function is currently called *twice* for each
5282 template-id: the first time from the parser, while creating the
5283 incomplete type (finish_template_type), and the second type during the
5284 real instantiation (instantiate_template_class). This is surely something
5285 that we want to avoid. It also causes some problems with argument
5286 coercion (see convert_nontype_argument for more information on this). */
5288 tree
5289 lookup_template_class (tree d1,
5290 tree arglist,
5291 tree in_decl,
5292 tree context,
5293 int entering_scope,
5294 tsubst_flags_t complain)
5296 tree template = NULL_TREE, parmlist;
5297 tree t;
5299 timevar_push (TV_NAME_LOOKUP);
5301 if (TREE_CODE (d1) == IDENTIFIER_NODE)
5303 tree value = innermost_non_namespace_value (d1);
5304 if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
5305 template = value;
5306 else
5308 if (context)
5309 push_decl_namespace (context);
5310 template = lookup_name (d1);
5311 template = maybe_get_template_decl_from_type_decl (template);
5312 if (context)
5313 pop_decl_namespace ();
5315 if (template)
5316 context = DECL_CONTEXT (template);
5318 else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
5320 tree type = TREE_TYPE (d1);
5322 /* If we are declaring a constructor, say A<T>::A<T>, we will get
5323 an implicit typename for the second A. Deal with it. */
5324 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5325 type = TREE_TYPE (type);
5327 if (CLASSTYPE_TEMPLATE_INFO (type))
5329 template = CLASSTYPE_TI_TEMPLATE (type);
5330 d1 = DECL_NAME (template);
5333 else if (TREE_CODE (d1) == ENUMERAL_TYPE
5334 || (TYPE_P (d1) && IS_AGGR_TYPE (d1)))
5336 template = TYPE_TI_TEMPLATE (d1);
5337 d1 = DECL_NAME (template);
5339 else if (TREE_CODE (d1) == TEMPLATE_DECL
5340 && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
5342 template = d1;
5343 d1 = DECL_NAME (template);
5344 context = DECL_CONTEXT (template);
5347 /* Issue an error message if we didn't find a template. */
5348 if (! template)
5350 if (complain & tf_error)
5351 error ("%qT is not a template", d1);
5352 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5355 if (TREE_CODE (template) != TEMPLATE_DECL
5356 /* Make sure it's a user visible template, if it was named by
5357 the user. */
5358 || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (template)
5359 && !PRIMARY_TEMPLATE_P (template)))
5361 if (complain & tf_error)
5363 error ("non-template type %qT used as a template", d1);
5364 if (in_decl)
5365 error ("for template declaration %q+D", in_decl);
5367 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5370 complain &= ~tf_user;
5372 if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
5374 /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
5375 template arguments */
5377 tree parm;
5378 tree arglist2;
5380 parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
5382 /* Consider an example where a template template parameter declared as
5384 template <class T, class U = std::allocator<T> > class TT
5386 The template parameter level of T and U are one level larger than
5387 of TT. To proper process the default argument of U, say when an
5388 instantiation `TT<int>' is seen, we need to build the full
5389 arguments containing {int} as the innermost level. Outer levels,
5390 available when not appearing as default template argument, can be
5391 obtained from `current_template_args ()'.
5393 Suppose that TT is later substituted with std::vector. The above
5394 instantiation is `TT<int, std::allocator<T> >' with TT at
5395 level 1, and T at level 2, while the template arguments at level 1
5396 becomes {std::vector} and the inner level 2 is {int}. */
5398 if (current_template_parms)
5399 arglist = add_to_template_args (current_template_args (), arglist);
5401 arglist2 = coerce_template_parms (parmlist, arglist, template,
5402 complain,
5403 /*require_all_args=*/true,
5404 /*use_default_args=*/true);
5405 if (arglist2 == error_mark_node
5406 || (!uses_template_parms (arglist2)
5407 && check_instantiated_args (template, arglist2, complain)))
5408 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5410 parm = bind_template_template_parm (TREE_TYPE (template), arglist2);
5411 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
5413 else
5415 tree template_type = TREE_TYPE (template);
5416 tree gen_tmpl;
5417 tree type_decl;
5418 tree found = NULL_TREE;
5419 int arg_depth;
5420 int parm_depth;
5421 int is_partial_instantiation;
5423 gen_tmpl = most_general_template (template);
5424 parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
5425 parm_depth = TMPL_PARMS_DEPTH (parmlist);
5426 arg_depth = TMPL_ARGS_DEPTH (arglist);
5428 if (arg_depth == 1 && parm_depth > 1)
5430 /* We've been given an incomplete set of template arguments.
5431 For example, given:
5433 template <class T> struct S1 {
5434 template <class U> struct S2 {};
5435 template <class U> struct S2<U*> {};
5438 we will be called with an ARGLIST of `U*', but the
5439 TEMPLATE will be `template <class T> template
5440 <class U> struct S1<T>::S2'. We must fill in the missing
5441 arguments. */
5442 arglist
5443 = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
5444 arglist);
5445 arg_depth = TMPL_ARGS_DEPTH (arglist);
5448 /* Now we should have enough arguments. */
5449 gcc_assert (parm_depth == arg_depth);
5451 /* From here on, we're only interested in the most general
5452 template. */
5453 template = gen_tmpl;
5455 /* Calculate the BOUND_ARGS. These will be the args that are
5456 actually tsubst'd into the definition to create the
5457 instantiation. */
5458 if (parm_depth > 1)
5460 /* We have multiple levels of arguments to coerce, at once. */
5461 int i;
5462 int saved_depth = TMPL_ARGS_DEPTH (arglist);
5464 tree bound_args = make_tree_vec (parm_depth);
5466 for (i = saved_depth,
5467 t = DECL_TEMPLATE_PARMS (template);
5468 i > 0 && t != NULL_TREE;
5469 --i, t = TREE_CHAIN (t))
5471 tree a = coerce_template_parms (TREE_VALUE (t),
5472 arglist, template,
5473 complain,
5474 /*require_all_args=*/true,
5475 /*use_default_args=*/true);
5477 /* Don't process further if one of the levels fails. */
5478 if (a == error_mark_node)
5480 /* Restore the ARGLIST to its full size. */
5481 TREE_VEC_LENGTH (arglist) = saved_depth;
5482 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5485 SET_TMPL_ARGS_LEVEL (bound_args, i, a);
5487 /* We temporarily reduce the length of the ARGLIST so
5488 that coerce_template_parms will see only the arguments
5489 corresponding to the template parameters it is
5490 examining. */
5491 TREE_VEC_LENGTH (arglist)--;
5494 /* Restore the ARGLIST to its full size. */
5495 TREE_VEC_LENGTH (arglist) = saved_depth;
5497 arglist = bound_args;
5499 else
5500 arglist
5501 = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
5502 INNERMOST_TEMPLATE_ARGS (arglist),
5503 template,
5504 complain,
5505 /*require_all_args=*/true,
5506 /*use_default_args=*/true);
5508 if (arglist == error_mark_node)
5509 /* We were unable to bind the arguments. */
5510 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5512 /* In the scope of a template class, explicit references to the
5513 template class refer to the type of the template, not any
5514 instantiation of it. For example, in:
5516 template <class T> class C { void f(C<T>); }
5518 the `C<T>' is just the same as `C'. Outside of the
5519 class, however, such a reference is an instantiation. */
5520 if (comp_template_args (TYPE_TI_ARGS (template_type),
5521 arglist))
5523 found = template_type;
5525 if (!entering_scope && PRIMARY_TEMPLATE_P (template))
5527 tree ctx;
5529 for (ctx = current_class_type;
5530 ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
5531 ctx = (TYPE_P (ctx)
5532 ? TYPE_CONTEXT (ctx)
5533 : DECL_CONTEXT (ctx)))
5534 if (TYPE_P (ctx) && same_type_p (ctx, template_type))
5535 goto found_ctx;
5537 /* We're not in the scope of the class, so the
5538 TEMPLATE_TYPE is not the type we want after all. */
5539 found = NULL_TREE;
5540 found_ctx:;
5543 if (found)
5544 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5546 /* If we already have this specialization, return it. */
5547 found = retrieve_specialization (template, arglist,
5548 /*class_specializations_p=*/false);
5549 if (found)
5550 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5552 /* This type is a "partial instantiation" if any of the template
5553 arguments still involve template parameters. Note that we set
5554 IS_PARTIAL_INSTANTIATION for partial specializations as
5555 well. */
5556 is_partial_instantiation = uses_template_parms (arglist);
5558 /* If the deduced arguments are invalid, then the binding
5559 failed. */
5560 if (!is_partial_instantiation
5561 && check_instantiated_args (template,
5562 INNERMOST_TEMPLATE_ARGS (arglist),
5563 complain))
5564 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5566 if (!is_partial_instantiation
5567 && !PRIMARY_TEMPLATE_P (template)
5568 && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
5570 found = xref_tag_from_type (TREE_TYPE (template),
5571 DECL_NAME (template),
5572 /*tag_scope=*/ts_global);
5573 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5576 context = tsubst (DECL_CONTEXT (template), arglist,
5577 complain, in_decl);
5578 if (!context)
5579 context = global_namespace;
5581 /* Create the type. */
5582 if (TREE_CODE (template_type) == ENUMERAL_TYPE)
5584 if (!is_partial_instantiation)
5586 set_current_access_from_decl (TYPE_NAME (template_type));
5587 t = start_enum (TYPE_IDENTIFIER (template_type));
5589 else
5590 /* We don't want to call start_enum for this type, since
5591 the values for the enumeration constants may involve
5592 template parameters. And, no one should be interested
5593 in the enumeration constants for such a type. */
5594 t = make_node (ENUMERAL_TYPE);
5596 else
5598 t = make_aggr_type (TREE_CODE (template_type));
5599 CLASSTYPE_DECLARED_CLASS (t)
5600 = CLASSTYPE_DECLARED_CLASS (template_type);
5601 SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
5602 TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
5604 /* A local class. Make sure the decl gets registered properly. */
5605 if (context == current_function_decl)
5606 pushtag (DECL_NAME (template), t, /*tag_scope=*/ts_current);
5608 if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
5609 /* This instantiation is another name for the primary
5610 template type. Set the TYPE_CANONICAL field
5611 appropriately. */
5612 TYPE_CANONICAL (t) = template_type;
5613 else if (any_template_arguments_need_structural_equality_p (arglist))
5614 /* Some of the template arguments require structural
5615 equality testing, so this template class requires
5616 structural equality testing. */
5617 SET_TYPE_STRUCTURAL_EQUALITY (t);
5620 /* If we called start_enum or pushtag above, this information
5621 will already be set up. */
5622 if (!TYPE_NAME (t))
5624 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5626 type_decl = create_implicit_typedef (DECL_NAME (template), t);
5627 DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
5628 TYPE_STUB_DECL (t) = type_decl;
5629 DECL_SOURCE_LOCATION (type_decl)
5630 = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
5632 else
5633 type_decl = TYPE_NAME (t);
5635 TREE_PRIVATE (type_decl)
5636 = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
5637 TREE_PROTECTED (type_decl)
5638 = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
5639 DECL_IN_SYSTEM_HEADER (type_decl)
5640 = DECL_IN_SYSTEM_HEADER (template);
5641 if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
5643 DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
5644 DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
5647 /* Set up the template information. We have to figure out which
5648 template is the immediate parent if this is a full
5649 instantiation. */
5650 if (parm_depth == 1 || is_partial_instantiation
5651 || !PRIMARY_TEMPLATE_P (template))
5652 /* This case is easy; there are no member templates involved. */
5653 found = template;
5654 else
5656 /* This is a full instantiation of a member template. Look
5657 for a partial instantiation of which this is an instance. */
5659 for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
5660 found; found = TREE_CHAIN (found))
5662 int success;
5663 tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
5665 /* We only want partial instantiations, here, not
5666 specializations or full instantiations. */
5667 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
5668 || !uses_template_parms (TREE_VALUE (found)))
5669 continue;
5671 /* Temporarily reduce by one the number of levels in the
5672 ARGLIST and in FOUND so as to avoid comparing the
5673 last set of arguments. */
5674 TREE_VEC_LENGTH (arglist)--;
5675 TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
5677 /* See if the arguments match. If they do, then TMPL is
5678 the partial instantiation we want. */
5679 success = comp_template_args (TREE_PURPOSE (found), arglist);
5681 /* Restore the argument vectors to their full size. */
5682 TREE_VEC_LENGTH (arglist)++;
5683 TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
5685 if (success)
5687 found = tmpl;
5688 break;
5692 if (!found)
5694 /* There was no partial instantiation. This happens
5695 where C<T> is a member template of A<T> and it's used
5696 in something like
5698 template <typename T> struct B { A<T>::C<int> m; };
5699 B<float>;
5701 Create the partial instantiation.
5703 TREE_VEC_LENGTH (arglist)--;
5704 found = tsubst (template, arglist, complain, NULL_TREE);
5705 TREE_VEC_LENGTH (arglist)++;
5709 SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
5710 DECL_TEMPLATE_INSTANTIATIONS (template)
5711 = tree_cons (arglist, t,
5712 DECL_TEMPLATE_INSTANTIATIONS (template));
5714 if (TREE_CODE (t) == ENUMERAL_TYPE
5715 && !is_partial_instantiation)
5716 /* Now that the type has been registered on the instantiations
5717 list, we set up the enumerators. Because the enumeration
5718 constants may involve the enumeration type itself, we make
5719 sure to register the type first, and then create the
5720 constants. That way, doing tsubst_expr for the enumeration
5721 constants won't result in recursive calls here; we'll find
5722 the instantiation and exit above. */
5723 tsubst_enum (template_type, t, arglist);
5725 if (is_partial_instantiation)
5726 /* If the type makes use of template parameters, the
5727 code that generates debugging information will crash. */
5728 DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
5730 /* Possibly limit visibility based on template args. */
5731 TREE_PUBLIC (type_decl) = 1;
5732 determine_visibility (type_decl);
5734 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
5736 timevar_pop (TV_NAME_LOOKUP);
5739 struct pair_fn_data
5741 tree_fn_t fn;
5742 void *data;
5743 struct pointer_set_t *visited;
5746 /* Called from for_each_template_parm via walk_tree. */
5748 static tree
5749 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
5751 tree t = *tp;
5752 struct pair_fn_data *pfd = (struct pair_fn_data *) d;
5753 tree_fn_t fn = pfd->fn;
5754 void *data = pfd->data;
5756 if (TYPE_P (t)
5757 && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited))
5758 return error_mark_node;
5760 switch (TREE_CODE (t))
5762 case RECORD_TYPE:
5763 if (TYPE_PTRMEMFUNC_P (t))
5764 break;
5765 /* Fall through. */
5767 case UNION_TYPE:
5768 case ENUMERAL_TYPE:
5769 if (!TYPE_TEMPLATE_INFO (t))
5770 *walk_subtrees = 0;
5771 else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
5772 fn, data, pfd->visited))
5773 return error_mark_node;
5774 break;
5776 case INTEGER_TYPE:
5777 if (for_each_template_parm (TYPE_MIN_VALUE (t),
5778 fn, data, pfd->visited)
5779 || for_each_template_parm (TYPE_MAX_VALUE (t),
5780 fn, data, pfd->visited))
5781 return error_mark_node;
5782 break;
5784 case METHOD_TYPE:
5785 /* Since we're not going to walk subtrees, we have to do this
5786 explicitly here. */
5787 if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
5788 pfd->visited))
5789 return error_mark_node;
5790 /* Fall through. */
5792 case FUNCTION_TYPE:
5793 /* Check the return type. */
5794 if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
5795 return error_mark_node;
5797 /* Check the parameter types. Since default arguments are not
5798 instantiated until they are needed, the TYPE_ARG_TYPES may
5799 contain expressions that involve template parameters. But,
5800 no-one should be looking at them yet. And, once they're
5801 instantiated, they don't contain template parameters, so
5802 there's no point in looking at them then, either. */
5804 tree parm;
5806 for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
5807 if (for_each_template_parm (TREE_VALUE (parm), fn, data,
5808 pfd->visited))
5809 return error_mark_node;
5811 /* Since we've already handled the TYPE_ARG_TYPES, we don't
5812 want walk_tree walking into them itself. */
5813 *walk_subtrees = 0;
5815 break;
5817 case TYPEOF_TYPE:
5818 if (for_each_template_parm (TYPE_FIELDS (t), fn, data,
5819 pfd->visited))
5820 return error_mark_node;
5821 break;
5823 case FUNCTION_DECL:
5824 case VAR_DECL:
5825 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
5826 && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
5827 pfd->visited))
5828 return error_mark_node;
5829 /* Fall through. */
5831 case PARM_DECL:
5832 case CONST_DECL:
5833 if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
5834 && for_each_template_parm (DECL_INITIAL (t), fn, data,
5835 pfd->visited))
5836 return error_mark_node;
5837 if (DECL_CONTEXT (t)
5838 && for_each_template_parm (DECL_CONTEXT (t), fn, data,
5839 pfd->visited))
5840 return error_mark_node;
5841 break;
5843 case BOUND_TEMPLATE_TEMPLATE_PARM:
5844 /* Record template parameters such as `T' inside `TT<T>'. */
5845 if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited))
5846 return error_mark_node;
5847 /* Fall through. */
5849 case TEMPLATE_TEMPLATE_PARM:
5850 case TEMPLATE_TYPE_PARM:
5851 case TEMPLATE_PARM_INDEX:
5852 if (fn && (*fn)(t, data))
5853 return error_mark_node;
5854 else if (!fn)
5855 return error_mark_node;
5856 break;
5858 case TEMPLATE_DECL:
5859 /* A template template parameter is encountered. */
5860 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
5861 && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
5862 return error_mark_node;
5864 /* Already substituted template template parameter */
5865 *walk_subtrees = 0;
5866 break;
5868 case TYPENAME_TYPE:
5869 if (!fn
5870 || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
5871 data, pfd->visited))
5872 return error_mark_node;
5873 break;
5875 case CONSTRUCTOR:
5876 if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
5877 && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
5878 (TREE_TYPE (t)), fn, data,
5879 pfd->visited))
5880 return error_mark_node;
5881 break;
5883 case INDIRECT_REF:
5884 case COMPONENT_REF:
5885 /* If there's no type, then this thing must be some expression
5886 involving template parameters. */
5887 if (!fn && !TREE_TYPE (t))
5888 return error_mark_node;
5889 break;
5891 case MODOP_EXPR:
5892 case CAST_EXPR:
5893 case REINTERPRET_CAST_EXPR:
5894 case CONST_CAST_EXPR:
5895 case STATIC_CAST_EXPR:
5896 case DYNAMIC_CAST_EXPR:
5897 case ARROW_EXPR:
5898 case DOTSTAR_EXPR:
5899 case TYPEID_EXPR:
5900 case PSEUDO_DTOR_EXPR:
5901 if (!fn)
5902 return error_mark_node;
5903 break;
5905 default:
5906 break;
5909 /* We didn't find any template parameters we liked. */
5910 return NULL_TREE;
5913 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
5914 BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
5915 call FN with the parameter and the DATA.
5916 If FN returns nonzero, the iteration is terminated, and
5917 for_each_template_parm returns 1. Otherwise, the iteration
5918 continues. If FN never returns a nonzero value, the value
5919 returned by for_each_template_parm is 0. If FN is NULL, it is
5920 considered to be the function which always returns 1. */
5922 static int
5923 for_each_template_parm (tree t, tree_fn_t fn, void* data,
5924 struct pointer_set_t *visited)
5926 struct pair_fn_data pfd;
5927 int result;
5929 /* Set up. */
5930 pfd.fn = fn;
5931 pfd.data = data;
5933 /* Walk the tree. (Conceptually, we would like to walk without
5934 duplicates, but for_each_template_parm_r recursively calls
5935 for_each_template_parm, so we would need to reorganize a fair
5936 bit to use walk_tree_without_duplicates, so we keep our own
5937 visited list.) */
5938 if (visited)
5939 pfd.visited = visited;
5940 else
5941 pfd.visited = pointer_set_create ();
5942 result = cp_walk_tree (&t,
5943 for_each_template_parm_r,
5944 &pfd,
5945 pfd.visited) != NULL_TREE;
5947 /* Clean up. */
5948 if (!visited)
5950 pointer_set_destroy (pfd.visited);
5951 pfd.visited = 0;
5954 return result;
5957 /* Returns true if T depends on any template parameter. */
5960 uses_template_parms (tree t)
5962 bool dependent_p;
5963 int saved_processing_template_decl;
5965 saved_processing_template_decl = processing_template_decl;
5966 if (!saved_processing_template_decl)
5967 processing_template_decl = 1;
5968 if (TYPE_P (t))
5969 dependent_p = dependent_type_p (t);
5970 else if (TREE_CODE (t) == TREE_VEC)
5971 dependent_p = any_dependent_template_arguments_p (t);
5972 else if (TREE_CODE (t) == TREE_LIST)
5973 dependent_p = (uses_template_parms (TREE_VALUE (t))
5974 || uses_template_parms (TREE_CHAIN (t)));
5975 else if (TREE_CODE (t) == TYPE_DECL)
5976 dependent_p = dependent_type_p (TREE_TYPE (t));
5977 else if (DECL_P (t)
5978 || EXPR_P (t)
5979 || TREE_CODE (t) == TEMPLATE_PARM_INDEX
5980 || TREE_CODE (t) == OVERLOAD
5981 || TREE_CODE (t) == BASELINK
5982 || TREE_CODE (t) == IDENTIFIER_NODE
5983 || TREE_CODE (t) == TRAIT_EXPR
5984 || CONSTANT_CLASS_P (t))
5985 dependent_p = (type_dependent_expression_p (t)
5986 || value_dependent_expression_p (t));
5987 else
5989 gcc_assert (t == error_mark_node);
5990 dependent_p = false;
5993 processing_template_decl = saved_processing_template_decl;
5995 return dependent_p;
5998 /* Returns true if T depends on any template parameter with level LEVEL. */
6001 uses_template_parms_level (tree t, int level)
6003 return for_each_template_parm (t, template_parm_this_level_p, &level, NULL);
6006 static int tinst_depth;
6007 extern int max_tinst_depth;
6008 #ifdef GATHER_STATISTICS
6009 int depth_reached;
6010 #endif
6011 static int tinst_level_tick;
6012 static int last_template_error_tick;
6014 /* We're starting to instantiate D; record the template instantiation context
6015 for diagnostics and to restore it later. */
6017 static int
6018 push_tinst_level (tree d)
6020 struct tinst_level *new;
6022 if (tinst_depth >= max_tinst_depth)
6024 /* If the instantiation in question still has unbound template parms,
6025 we don't really care if we can't instantiate it, so just return.
6026 This happens with base instantiation for implicit `typename'. */
6027 if (uses_template_parms (d))
6028 return 0;
6030 last_template_error_tick = tinst_level_tick;
6031 error ("template instantiation depth exceeds maximum of %d (use "
6032 "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
6033 max_tinst_depth, d);
6035 print_instantiation_context ();
6037 return 0;
6040 new = GGC_NEW (struct tinst_level);
6041 new->decl = d;
6042 new->locus = input_location;
6043 new->in_system_header_p = in_system_header;
6044 new->next = current_tinst_level;
6045 current_tinst_level = new;
6047 ++tinst_depth;
6048 #ifdef GATHER_STATISTICS
6049 if (tinst_depth > depth_reached)
6050 depth_reached = tinst_depth;
6051 #endif
6053 ++tinst_level_tick;
6054 return 1;
6057 /* We're done instantiating this template; return to the instantiation
6058 context. */
6060 static void
6061 pop_tinst_level (void)
6063 /* Restore the filename and line number stashed away when we started
6064 this instantiation. */
6065 input_location = current_tinst_level->locus;
6066 in_system_header = current_tinst_level->in_system_header_p;
6067 current_tinst_level = current_tinst_level->next;
6068 --tinst_depth;
6069 ++tinst_level_tick;
6072 /* We're instantiating a deferred template; restore the template
6073 instantiation context in which the instantiation was requested, which
6074 is one step out from LEVEL. Return the corresponding DECL or TYPE. */
6076 static tree
6077 reopen_tinst_level (struct tinst_level *level)
6079 struct tinst_level *t;
6081 tinst_depth = 0;
6082 for (t = level; t; t = t->next)
6083 ++tinst_depth;
6085 current_tinst_level = level;
6086 pop_tinst_level ();
6087 return level->decl;
6090 /* Returns the TINST_LEVEL which gives the original instantiation
6091 context. */
6093 struct tinst_level *
6094 outermost_tinst_level (void)
6096 struct tinst_level *level = current_tinst_level;
6097 if (level)
6098 while (level->next)
6099 level = level->next;
6100 return level;
6103 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
6104 vector of template arguments, as for tsubst.
6106 Returns an appropriate tsubst'd friend declaration. */
6108 static tree
6109 tsubst_friend_function (tree decl, tree args)
6111 tree new_friend;
6113 if (TREE_CODE (decl) == FUNCTION_DECL
6114 && DECL_TEMPLATE_INSTANTIATION (decl)
6115 && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
6116 /* This was a friend declared with an explicit template
6117 argument list, e.g.:
6119 friend void f<>(T);
6121 to indicate that f was a template instantiation, not a new
6122 function declaration. Now, we have to figure out what
6123 instantiation of what template. */
6125 tree template_id, arglist, fns;
6126 tree new_args;
6127 tree tmpl;
6128 tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
6130 /* Friend functions are looked up in the containing namespace scope.
6131 We must enter that scope, to avoid finding member functions of the
6132 current cless with same name. */
6133 push_nested_namespace (ns);
6134 fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
6135 tf_warning_or_error, NULL_TREE,
6136 /*integral_constant_expression_p=*/false);
6137 pop_nested_namespace (ns);
6138 arglist = tsubst (DECL_TI_ARGS (decl), args,
6139 tf_warning_or_error, NULL_TREE);
6140 template_id = lookup_template_function (fns, arglist);
6142 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6143 tmpl = determine_specialization (template_id, new_friend,
6144 &new_args,
6145 /*need_member_template=*/0,
6146 TREE_VEC_LENGTH (args),
6147 tsk_none);
6148 return instantiate_template (tmpl, new_args, tf_error);
6151 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6153 /* The NEW_FRIEND will look like an instantiation, to the
6154 compiler, but is not an instantiation from the point of view of
6155 the language. For example, we might have had:
6157 template <class T> struct S {
6158 template <class U> friend void f(T, U);
6161 Then, in S<int>, template <class U> void f(int, U) is not an
6162 instantiation of anything. */
6163 if (new_friend == error_mark_node)
6164 return error_mark_node;
6166 DECL_USE_TEMPLATE (new_friend) = 0;
6167 if (TREE_CODE (decl) == TEMPLATE_DECL)
6169 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
6170 DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
6171 = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
6174 /* The mangled name for the NEW_FRIEND is incorrect. The function
6175 is not a template instantiation and should not be mangled like
6176 one. Therefore, we forget the mangling here; we'll recompute it
6177 later if we need it. */
6178 if (TREE_CODE (new_friend) != TEMPLATE_DECL)
6180 SET_DECL_RTL (new_friend, NULL_RTX);
6181 SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
6184 if (DECL_NAMESPACE_SCOPE_P (new_friend))
6186 tree old_decl;
6187 tree new_friend_template_info;
6188 tree new_friend_result_template_info;
6189 tree ns;
6190 int new_friend_is_defn;
6192 /* We must save some information from NEW_FRIEND before calling
6193 duplicate decls since that function will free NEW_FRIEND if
6194 possible. */
6195 new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
6196 new_friend_is_defn =
6197 (DECL_INITIAL (DECL_TEMPLATE_RESULT
6198 (template_for_substitution (new_friend)))
6199 != NULL_TREE);
6200 if (TREE_CODE (new_friend) == TEMPLATE_DECL)
6202 /* This declaration is a `primary' template. */
6203 DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
6205 new_friend_result_template_info
6206 = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
6208 else
6209 new_friend_result_template_info = NULL_TREE;
6211 /* Make the init_value nonzero so pushdecl knows this is a defn. */
6212 if (new_friend_is_defn)
6213 DECL_INITIAL (new_friend) = error_mark_node;
6215 /* Inside pushdecl_namespace_level, we will push into the
6216 current namespace. However, the friend function should go
6217 into the namespace of the template. */
6218 ns = decl_namespace_context (new_friend);
6219 push_nested_namespace (ns);
6220 old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
6221 pop_nested_namespace (ns);
6223 if (old_decl == error_mark_node)
6224 return error_mark_node;
6226 if (old_decl != new_friend)
6228 /* This new friend declaration matched an existing
6229 declaration. For example, given:
6231 template <class T> void f(T);
6232 template <class U> class C {
6233 template <class T> friend void f(T) {}
6236 the friend declaration actually provides the definition
6237 of `f', once C has been instantiated for some type. So,
6238 old_decl will be the out-of-class template declaration,
6239 while new_friend is the in-class definition.
6241 But, if `f' was called before this point, the
6242 instantiation of `f' will have DECL_TI_ARGS corresponding
6243 to `T' but not to `U', references to which might appear
6244 in the definition of `f'. Previously, the most general
6245 template for an instantiation of `f' was the out-of-class
6246 version; now it is the in-class version. Therefore, we
6247 run through all specialization of `f', adding to their
6248 DECL_TI_ARGS appropriately. In particular, they need a
6249 new set of outer arguments, corresponding to the
6250 arguments for this class instantiation.
6252 The same situation can arise with something like this:
6254 friend void f(int);
6255 template <class T> class C {
6256 friend void f(T) {}
6259 when `C<int>' is instantiated. Now, `f(int)' is defined
6260 in the class. */
6262 if (!new_friend_is_defn)
6263 /* On the other hand, if the in-class declaration does
6264 *not* provide a definition, then we don't want to alter
6265 existing definitions. We can just leave everything
6266 alone. */
6268 else
6270 /* Overwrite whatever template info was there before, if
6271 any, with the new template information pertaining to
6272 the declaration. */
6273 DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
6275 if (TREE_CODE (old_decl) != TEMPLATE_DECL)
6276 reregister_specialization (new_friend,
6277 most_general_template (old_decl),
6278 old_decl);
6279 else
6281 tree t;
6282 tree new_friend_args;
6284 DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
6285 = new_friend_result_template_info;
6287 new_friend_args = TI_ARGS (new_friend_template_info);
6288 for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
6289 t != NULL_TREE;
6290 t = TREE_CHAIN (t))
6292 tree spec = TREE_VALUE (t);
6294 DECL_TI_ARGS (spec)
6295 = add_outermost_template_args (new_friend_args,
6296 DECL_TI_ARGS (spec));
6299 /* Now, since specializations are always supposed to
6300 hang off of the most general template, we must move
6301 them. */
6302 t = most_general_template (old_decl);
6303 if (t != old_decl)
6305 DECL_TEMPLATE_SPECIALIZATIONS (t)
6306 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
6307 DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
6308 DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
6313 /* The information from NEW_FRIEND has been merged into OLD_DECL
6314 by duplicate_decls. */
6315 new_friend = old_decl;
6318 else
6320 tree context = DECL_CONTEXT (new_friend);
6321 bool dependent_p;
6323 /* In the code
6324 template <class T> class C {
6325 template <class U> friend void C1<U>::f (); // case 1
6326 friend void C2<T>::f (); // case 2
6328 we only need to make sure CONTEXT is a complete type for
6329 case 2. To distinguish between the two cases, we note that
6330 CONTEXT of case 1 remains dependent type after tsubst while
6331 this isn't true for case 2. */
6332 ++processing_template_decl;
6333 dependent_p = dependent_type_p (context);
6334 --processing_template_decl;
6336 if (!dependent_p
6337 && !complete_type_or_else (context, NULL_TREE))
6338 return error_mark_node;
6340 if (COMPLETE_TYPE_P (context))
6342 /* Check to see that the declaration is really present, and,
6343 possibly obtain an improved declaration. */
6344 tree fn = check_classfn (context,
6345 new_friend, NULL_TREE);
6347 if (fn)
6348 new_friend = fn;
6352 return new_friend;
6355 /* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
6356 template arguments, as for tsubst.
6358 Returns an appropriate tsubst'd friend type or error_mark_node on
6359 failure. */
6361 static tree
6362 tsubst_friend_class (tree friend_tmpl, tree args)
6364 tree friend_type;
6365 tree tmpl;
6366 tree context;
6368 context = DECL_CONTEXT (friend_tmpl);
6370 if (context)
6372 if (TREE_CODE (context) == NAMESPACE_DECL)
6373 push_nested_namespace (context);
6374 else
6375 push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
6378 /* Look for a class template declaration. We look for hidden names
6379 because two friend declarations of the same template are the
6380 same. For example, in:
6382 struct A {
6383 template <typename> friend class F;
6385 template <typename> struct B {
6386 template <typename> friend class F;
6389 both F templates are the same. */
6390 tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
6391 /*block_p=*/true, 0,
6392 LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
6394 /* But, if we don't find one, it might be because we're in a
6395 situation like this:
6397 template <class T>
6398 struct S {
6399 template <class U>
6400 friend struct S;
6403 Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
6404 for `S<int>', not the TEMPLATE_DECL. */
6405 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
6407 tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
6408 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
6411 if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
6413 /* The friend template has already been declared. Just
6414 check to see that the declarations match, and install any new
6415 default parameters. We must tsubst the default parameters,
6416 of course. We only need the innermost template parameters
6417 because that is all that redeclare_class_template will look
6418 at. */
6419 if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
6420 > TMPL_ARGS_DEPTH (args))
6422 tree parms;
6423 parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
6424 args, tf_warning_or_error);
6425 redeclare_class_template (TREE_TYPE (tmpl), parms);
6428 friend_type = TREE_TYPE (tmpl);
6430 else
6432 /* The friend template has not already been declared. In this
6433 case, the instantiation of the template class will cause the
6434 injection of this template into the global scope. */
6435 tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
6436 if (tmpl == error_mark_node)
6437 return error_mark_node;
6439 /* The new TMPL is not an instantiation of anything, so we
6440 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE for
6441 the new type because that is supposed to be the corresponding
6442 template decl, i.e., TMPL. */
6443 DECL_USE_TEMPLATE (tmpl) = 0;
6444 DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
6445 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
6446 CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
6447 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
6449 /* Inject this template into the global scope. */
6450 friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
6453 if (context)
6455 if (TREE_CODE (context) == NAMESPACE_DECL)
6456 pop_nested_namespace (context);
6457 else
6458 pop_nested_class ();
6461 return friend_type;
6464 /* Returns zero if TYPE cannot be completed later due to circularity.
6465 Otherwise returns one. */
6467 static int
6468 can_complete_type_without_circularity (tree type)
6470 if (type == NULL_TREE || type == error_mark_node)
6471 return 0;
6472 else if (COMPLETE_TYPE_P (type))
6473 return 1;
6474 else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
6475 return can_complete_type_without_circularity (TREE_TYPE (type));
6476 else if (CLASS_TYPE_P (type)
6477 && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
6478 return 0;
6479 else
6480 return 1;
6483 /* Apply any attributes which had to be deferred until instantiation
6484 time. DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
6485 ARGS, COMPLAIN, IN_DECL are as tsubst. */
6487 static void
6488 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
6489 tree args, tsubst_flags_t complain, tree in_decl)
6491 tree late_attrs = NULL_TREE;
6492 tree t;
6494 if (DECL_P (*decl_p))
6495 DECL_ATTRIBUTES (*decl_p) = attributes;
6496 else
6497 TYPE_ATTRIBUTES (*decl_p) = attributes;
6499 for (t = attributes; t; t = TREE_CHAIN (t))
6500 if (ATTR_IS_DEPENDENT (t))
6501 late_attrs = tree_cons
6502 (TREE_PURPOSE (t),
6503 tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
6504 /*integral_constant_expression_p=*/false),
6505 late_attrs);
6507 cplus_decl_attributes (decl_p, late_attrs, attr_flags);
6510 tree
6511 instantiate_class_template (tree type)
6513 tree template, args, pattern, t, member;
6514 tree typedecl;
6515 tree pbinfo;
6516 tree base_list;
6518 if (type == error_mark_node)
6519 return error_mark_node;
6521 if (TYPE_BEING_DEFINED (type)
6522 || COMPLETE_TYPE_P (type)
6523 || dependent_type_p (type))
6524 return type;
6526 /* Figure out which template is being instantiated. */
6527 template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
6528 gcc_assert (TREE_CODE (template) == TEMPLATE_DECL);
6530 /* Determine what specialization of the original template to
6531 instantiate. */
6532 t = most_specialized_class (type, template);
6533 if (t == error_mark_node)
6535 TYPE_BEING_DEFINED (type) = 1;
6536 return error_mark_node;
6538 else if (t)
6540 /* This TYPE is actually an instantiation of a partial
6541 specialization. We replace the innermost set of ARGS with
6542 the arguments appropriate for substitution. For example,
6543 given:
6545 template <class T> struct S {};
6546 template <class T> struct S<T*> {};
6548 and supposing that we are instantiating S<int*>, ARGS will
6549 presently be {int*} -- but we need {int}. */
6550 pattern = TREE_TYPE (t);
6551 args = TREE_PURPOSE (t);
6553 else
6555 pattern = TREE_TYPE (template);
6556 args = CLASSTYPE_TI_ARGS (type);
6559 /* If the template we're instantiating is incomplete, then clearly
6560 there's nothing we can do. */
6561 if (!COMPLETE_TYPE_P (pattern))
6562 return type;
6564 /* If we've recursively instantiated too many templates, stop. */
6565 if (! push_tinst_level (type))
6566 return type;
6568 /* Now we're really doing the instantiation. Mark the type as in
6569 the process of being defined. */
6570 TYPE_BEING_DEFINED (type) = 1;
6572 /* We may be in the middle of deferred access check. Disable
6573 it now. */
6574 push_deferring_access_checks (dk_no_deferred);
6576 push_to_top_level ();
6578 SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
6580 /* Set the input location to the template definition. This is needed
6581 if tsubsting causes an error. */
6582 typedecl = TYPE_MAIN_DECL (type);
6583 input_location = DECL_SOURCE_LOCATION (typedecl);
6584 in_system_header = DECL_IN_SYSTEM_HEADER (typedecl);
6586 TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
6587 TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
6588 TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
6589 TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
6590 TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
6591 TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
6592 TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
6593 TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
6594 TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
6595 TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
6596 TYPE_PACKED (type) = TYPE_PACKED (pattern);
6597 TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
6598 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
6599 TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
6600 if (ANON_AGGR_TYPE_P (pattern))
6601 SET_ANON_AGGR_TYPE_P (type);
6602 if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
6604 CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
6605 CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
6608 pbinfo = TYPE_BINFO (pattern);
6610 /* We should never instantiate a nested class before its enclosing
6611 class; we need to look up the nested class by name before we can
6612 instantiate it, and that lookup should instantiate the enclosing
6613 class. */
6614 gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
6615 || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
6616 || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
6618 base_list = NULL_TREE;
6619 if (BINFO_N_BASE_BINFOS (pbinfo))
6621 tree pbase_binfo;
6622 tree context = TYPE_CONTEXT (type);
6623 tree pushed_scope;
6624 int i;
6626 /* We must enter the scope containing the type, as that is where
6627 the accessibility of types named in dependent bases are
6628 looked up from. */
6629 pushed_scope = push_scope (context ? context : global_namespace);
6631 /* Substitute into each of the bases to determine the actual
6632 basetypes. */
6633 for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
6635 tree base;
6636 tree access = BINFO_BASE_ACCESS (pbinfo, i);
6637 tree expanded_bases = NULL_TREE;
6638 int idx, len = 1;
6640 if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
6642 expanded_bases =
6643 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
6644 args, tf_error, NULL_TREE);
6645 if (expanded_bases == error_mark_node)
6646 continue;
6648 len = TREE_VEC_LENGTH (expanded_bases);
6651 for (idx = 0; idx < len; idx++)
6653 if (expanded_bases)
6654 /* Extract the already-expanded base class. */
6655 base = TREE_VEC_ELT (expanded_bases, idx);
6656 else
6657 /* Substitute to figure out the base class. */
6658 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error,
6659 NULL_TREE);
6661 if (base == error_mark_node)
6662 continue;
6664 base_list = tree_cons (access, base, base_list);
6665 if (BINFO_VIRTUAL_P (pbase_binfo))
6666 TREE_TYPE (base_list) = integer_type_node;
6670 /* The list is now in reverse order; correct that. */
6671 base_list = nreverse (base_list);
6673 if (pushed_scope)
6674 pop_scope (pushed_scope);
6676 /* Now call xref_basetypes to set up all the base-class
6677 information. */
6678 xref_basetypes (type, base_list);
6680 apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
6681 (int) ATTR_FLAG_TYPE_IN_PLACE,
6682 args, tf_error, NULL_TREE);
6684 /* Now that our base classes are set up, enter the scope of the
6685 class, so that name lookups into base classes, etc. will work
6686 correctly. This is precisely analogous to what we do in
6687 begin_class_definition when defining an ordinary non-template
6688 class, except we also need to push the enclosing classes. */
6689 push_nested_class (type);
6691 /* Now members are processed in the order of declaration. */
6692 for (member = CLASSTYPE_DECL_LIST (pattern);
6693 member; member = TREE_CHAIN (member))
6695 tree t = TREE_VALUE (member);
6697 if (TREE_PURPOSE (member))
6699 if (TYPE_P (t))
6701 /* Build new CLASSTYPE_NESTED_UTDS. */
6703 tree newtag;
6704 bool class_template_p;
6706 class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
6707 && TYPE_LANG_SPECIFIC (t)
6708 && CLASSTYPE_IS_TEMPLATE (t));
6709 /* If the member is a class template, then -- even after
6710 substitution -- there may be dependent types in the
6711 template argument list for the class. We increment
6712 PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
6713 that function will assume that no types are dependent
6714 when outside of a template. */
6715 if (class_template_p)
6716 ++processing_template_decl;
6717 newtag = tsubst (t, args, tf_error, NULL_TREE);
6718 if (class_template_p)
6719 --processing_template_decl;
6720 if (newtag == error_mark_node)
6721 continue;
6723 if (TREE_CODE (newtag) != ENUMERAL_TYPE)
6725 tree name = TYPE_IDENTIFIER (t);
6727 if (class_template_p)
6728 /* Unfortunately, lookup_template_class sets
6729 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
6730 instantiation (i.e., for the type of a member
6731 template class nested within a template class.)
6732 This behavior is required for
6733 maybe_process_partial_specialization to work
6734 correctly, but is not accurate in this case;
6735 the TAG is not an instantiation of anything.
6736 (The corresponding TEMPLATE_DECL is an
6737 instantiation, but the TYPE is not.) */
6738 CLASSTYPE_USE_TEMPLATE (newtag) = 0;
6740 /* Now, we call pushtag to put this NEWTAG into the scope of
6741 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
6742 pushtag calling push_template_decl. We don't have to do
6743 this for enums because it will already have been done in
6744 tsubst_enum. */
6745 if (name)
6746 SET_IDENTIFIER_TYPE_VALUE (name, newtag);
6747 pushtag (name, newtag, /*tag_scope=*/ts_current);
6750 else if (TREE_CODE (t) == FUNCTION_DECL
6751 || DECL_FUNCTION_TEMPLATE_P (t))
6753 /* Build new TYPE_METHODS. */
6754 tree r;
6756 if (TREE_CODE (t) == TEMPLATE_DECL)
6757 ++processing_template_decl;
6758 r = tsubst (t, args, tf_error, NULL_TREE);
6759 if (TREE_CODE (t) == TEMPLATE_DECL)
6760 --processing_template_decl;
6761 set_current_access_from_decl (r);
6762 finish_member_declaration (r);
6764 else
6766 /* Build new TYPE_FIELDS. */
6767 if (TREE_CODE (t) == STATIC_ASSERT)
6769 tree condition =
6770 tsubst_expr (STATIC_ASSERT_CONDITION (t), args,
6771 tf_warning_or_error, NULL_TREE,
6772 /*integral_constant_expression_p=*/true);
6773 finish_static_assert (condition,
6774 STATIC_ASSERT_MESSAGE (t),
6775 STATIC_ASSERT_SOURCE_LOCATION (t),
6776 /*member_p=*/true);
6778 else if (TREE_CODE (t) != CONST_DECL)
6780 tree r;
6782 /* The the file and line for this declaration, to
6783 assist in error message reporting. Since we
6784 called push_tinst_level above, we don't need to
6785 restore these. */
6786 input_location = DECL_SOURCE_LOCATION (t);
6788 if (TREE_CODE (t) == TEMPLATE_DECL)
6789 ++processing_template_decl;
6790 r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
6791 if (TREE_CODE (t) == TEMPLATE_DECL)
6792 --processing_template_decl;
6793 if (TREE_CODE (r) == VAR_DECL)
6795 /* In [temp.inst]:
6797 [t]he initialization (and any associated
6798 side-effects) of a static data member does
6799 not occur unless the static data member is
6800 itself used in a way that requires the
6801 definition of the static data member to
6802 exist.
6804 Therefore, we do not substitute into the
6805 initialized for the static data member here. */
6806 finish_static_data_member_decl
6808 /*init=*/NULL_TREE,
6809 /*init_const_expr_p=*/false,
6810 /*asmspec_tree=*/NULL_TREE,
6811 /*flags=*/0);
6812 if (DECL_INITIALIZED_IN_CLASS_P (r))
6813 check_static_variable_definition (r, TREE_TYPE (r));
6815 else if (TREE_CODE (r) == FIELD_DECL)
6817 /* Determine whether R has a valid type and can be
6818 completed later. If R is invalid, then it is
6819 replaced by error_mark_node so that it will not be
6820 added to TYPE_FIELDS. */
6821 tree rtype = TREE_TYPE (r);
6822 if (can_complete_type_without_circularity (rtype))
6823 complete_type (rtype);
6825 if (!COMPLETE_TYPE_P (rtype))
6827 cxx_incomplete_type_error (r, rtype);
6828 r = error_mark_node;
6832 /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
6833 such a thing will already have been added to the field
6834 list by tsubst_enum in finish_member_declaration in the
6835 CLASSTYPE_NESTED_UTDS case above. */
6836 if (!(TREE_CODE (r) == TYPE_DECL
6837 && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
6838 && DECL_ARTIFICIAL (r)))
6840 set_current_access_from_decl (r);
6841 finish_member_declaration (r);
6846 else
6848 if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
6850 /* Build new CLASSTYPE_FRIEND_CLASSES. */
6852 tree friend_type = t;
6853 bool adjust_processing_template_decl = false;
6855 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
6857 /* template <class T> friend class C; */
6858 friend_type = tsubst_friend_class (friend_type, args);
6859 adjust_processing_template_decl = true;
6861 else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
6863 /* template <class T> friend class C::D; */
6864 friend_type = tsubst (friend_type, args,
6865 tf_warning_or_error, NULL_TREE);
6866 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
6867 friend_type = TREE_TYPE (friend_type);
6868 adjust_processing_template_decl = true;
6870 else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
6872 /* This could be either
6874 friend class T::C;
6876 when dependent_type_p is false or
6878 template <class U> friend class T::C;
6880 otherwise. */
6881 friend_type = tsubst (friend_type, args,
6882 tf_warning_or_error, NULL_TREE);
6883 /* Bump processing_template_decl for correct
6884 dependent_type_p calculation. */
6885 ++processing_template_decl;
6886 if (dependent_type_p (friend_type))
6887 adjust_processing_template_decl = true;
6888 --processing_template_decl;
6890 else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
6891 && hidden_name_p (TYPE_NAME (friend_type)))
6893 /* friend class C;
6895 where C hasn't been declared yet. Let's lookup name
6896 from namespace scope directly, bypassing any name that
6897 come from dependent base class. */
6898 tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
6900 /* The call to xref_tag_from_type does injection for friend
6901 classes. */
6902 push_nested_namespace (ns);
6903 friend_type =
6904 xref_tag_from_type (friend_type, NULL_TREE,
6905 /*tag_scope=*/ts_current);
6906 pop_nested_namespace (ns);
6908 else if (uses_template_parms (friend_type))
6909 /* friend class C<T>; */
6910 friend_type = tsubst (friend_type, args,
6911 tf_warning_or_error, NULL_TREE);
6912 /* Otherwise it's
6914 friend class C;
6916 where C is already declared or
6918 friend class C<int>;
6920 We don't have to do anything in these cases. */
6922 if (adjust_processing_template_decl)
6923 /* Trick make_friend_class into realizing that the friend
6924 we're adding is a template, not an ordinary class. It's
6925 important that we use make_friend_class since it will
6926 perform some error-checking and output cross-reference
6927 information. */
6928 ++processing_template_decl;
6930 if (friend_type != error_mark_node)
6931 make_friend_class (type, friend_type, /*complain=*/false);
6933 if (adjust_processing_template_decl)
6934 --processing_template_decl;
6936 else
6938 /* Build new DECL_FRIENDLIST. */
6939 tree r;
6941 /* The the file and line for this declaration, to
6942 assist in error message reporting. Since we
6943 called push_tinst_level above, we don't need to
6944 restore these. */
6945 input_location = DECL_SOURCE_LOCATION (t);
6947 if (TREE_CODE (t) == TEMPLATE_DECL)
6949 ++processing_template_decl;
6950 push_deferring_access_checks (dk_no_check);
6953 r = tsubst_friend_function (t, args);
6954 add_friend (type, r, /*complain=*/false);
6955 if (TREE_CODE (t) == TEMPLATE_DECL)
6957 pop_deferring_access_checks ();
6958 --processing_template_decl;
6964 /* Set the file and line number information to whatever is given for
6965 the class itself. This puts error messages involving generated
6966 implicit functions at a predictable point, and the same point
6967 that would be used for non-template classes. */
6968 input_location = DECL_SOURCE_LOCATION (typedecl);
6970 unreverse_member_declarations (type);
6971 finish_struct_1 (type);
6972 TYPE_BEING_DEFINED (type) = 0;
6974 /* Now that the class is complete, instantiate default arguments for
6975 any member functions. We don't do this earlier because the
6976 default arguments may reference members of the class. */
6977 if (!PRIMARY_TEMPLATE_P (template))
6978 for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
6979 if (TREE_CODE (t) == FUNCTION_DECL
6980 /* Implicitly generated member functions will not have template
6981 information; they are not instantiations, but instead are
6982 created "fresh" for each instantiation. */
6983 && DECL_TEMPLATE_INFO (t))
6984 tsubst_default_arguments (t);
6986 pop_nested_class ();
6987 pop_from_top_level ();
6988 pop_deferring_access_checks ();
6989 pop_tinst_level ();
6991 /* The vtable for a template class can be emitted in any translation
6992 unit in which the class is instantiated. When there is no key
6993 method, however, finish_struct_1 will already have added TYPE to
6994 the keyed_classes list. */
6995 if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
6996 keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
6998 return type;
7001 static tree
7002 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7004 tree r;
7006 if (!t)
7007 r = t;
7008 else if (TYPE_P (t))
7009 r = tsubst (t, args, complain, in_decl);
7010 else
7012 r = tsubst_expr (t, args, complain, in_decl,
7013 /*integral_constant_expression_p=*/true);
7014 r = fold_non_dependent_expr (r);
7016 return r;
7019 /* Substitute ARGS into T, which is an pack expansion
7020 (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
7021 TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
7022 (if only a partial substitution could be performed) or
7023 ERROR_MARK_NODE if there was an error. */
7024 tree
7025 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
7026 tree in_decl)
7028 tree pattern;
7029 tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
7030 tree first_arg_pack; int i, len = -1;
7031 tree result;
7032 int incomplete = 0;
7034 gcc_assert (PACK_EXPANSION_P (t));
7035 pattern = PACK_EXPANSION_PATTERN (t);
7037 /* Determine the argument packs that will instantiate the parameter
7038 packs used in the expansion expression. While we're at it,
7039 compute the number of arguments to be expanded and make sure it
7040 is consistent. */
7041 for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack;
7042 pack = TREE_CHAIN (pack))
7044 tree parm_pack = TREE_VALUE (pack);
7045 tree arg_pack = NULL_TREE;
7046 tree orig_arg = NULL_TREE;
7048 if (TREE_CODE (parm_pack) == PARM_DECL)
7050 if (local_specializations)
7051 arg_pack = retrieve_local_specialization (parm_pack);
7053 else
7055 int level, idx, levels;
7056 template_parm_level_and_index (parm_pack, &level, &idx);
7058 levels = TMPL_ARGS_DEPTH (args);
7059 if (level <= levels)
7060 arg_pack = TMPL_ARG (args, level, idx);
7063 orig_arg = arg_pack;
7064 if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
7065 arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
7067 if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
7068 /* This can only happen if we forget to expand an argument
7069 pack somewhere else. Just return an error, silently. */
7071 result = make_tree_vec (1);
7072 TREE_VEC_ELT (result, 0) = error_mark_node;
7073 return result;
7076 if (arg_pack)
7078 int my_len =
7079 TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
7081 /* It's all-or-nothing with incomplete argument packs. */
7082 if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7083 return error_mark_node;
7085 if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7086 incomplete = 1;
7088 if (len < 0)
7090 len = my_len;
7091 first_arg_pack = arg_pack;
7093 else if (len != my_len)
7095 if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
7096 error ("mismatched argument pack lengths while expanding "
7097 "%<%T%>",
7098 pattern);
7099 else
7100 error ("mismatched argument pack lengths while expanding "
7101 "%<%E%>",
7102 pattern);
7103 return error_mark_node;
7106 /* Keep track of the parameter packs and their corresponding
7107 argument packs. */
7108 packs = tree_cons (parm_pack, arg_pack, packs);
7109 TREE_TYPE (packs) = orig_arg;
7111 else
7112 /* We can't substitute for this parameter pack. */
7113 unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
7114 TREE_VALUE (pack),
7115 unsubstituted_packs);
7118 /* We cannot expand this expansion expression, because we don't have
7119 all of the argument packs we need. Substitute into the pattern
7120 and return a PACK_EXPANSION_*. The caller will need to deal with
7121 that. */
7122 if (unsubstituted_packs)
7123 return make_pack_expansion (tsubst (pattern, args, complain,
7124 in_decl));
7126 /* We could not find any argument packs that work. */
7127 if (len < 0)
7128 return error_mark_node;
7130 /* For each argument in each argument pack, substitute into the
7131 pattern. */
7132 result = make_tree_vec (len + incomplete);
7133 for (i = 0; i < len + incomplete; ++i)
7135 /* For parameter pack, change the substitution of the parameter
7136 pack to the ith argument in its argument pack, then expand
7137 the pattern. */
7138 for (pack = packs; pack; pack = TREE_CHAIN (pack))
7140 tree parm = TREE_PURPOSE (pack);
7142 if (TREE_CODE (parm) == PARM_DECL)
7144 /* Select the Ith argument from the pack. */
7145 tree arg = make_node (ARGUMENT_PACK_SELECT);
7146 ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
7147 ARGUMENT_PACK_SELECT_INDEX (arg) = i;
7148 mark_used (parm);
7149 register_local_specialization (arg, parm);
7151 else
7153 tree value = parm;
7154 int idx, level;
7155 template_parm_level_and_index (parm, &level, &idx);
7157 if (i < len)
7159 /* Select the Ith argument from the pack. */
7160 value = make_node (ARGUMENT_PACK_SELECT);
7161 ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
7162 ARGUMENT_PACK_SELECT_INDEX (value) = i;
7165 /* Update the corresponding argument. */
7166 TMPL_ARG (args, level, idx) = value;
7170 /* Substitute into the PATTERN with the altered arguments. */
7171 if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
7172 TREE_VEC_ELT (result, i) =
7173 tsubst_expr (pattern, args, complain, in_decl,
7174 /*integral_constant_expression_p=*/false);
7175 else
7176 TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
7178 if (i == len)
7179 /* When we have incomplete argument packs, the last "expanded"
7180 result is itself a pack expansion, which allows us
7181 to deduce more arguments. */
7182 TREE_VEC_ELT (result, i) =
7183 make_pack_expansion (TREE_VEC_ELT (result, i));
7185 if (TREE_VEC_ELT (result, i) == error_mark_node)
7187 result = error_mark_node;
7188 break;
7192 /* Update ARGS to restore the substitution from parameter packs to
7193 their argument packs. */
7194 for (pack = packs; pack; pack = TREE_CHAIN (pack))
7196 tree parm = TREE_PURPOSE (pack);
7198 if (TREE_CODE (parm) == PARM_DECL)
7199 register_local_specialization (TREE_TYPE (pack), parm);
7200 else
7202 int idx, level;
7203 template_parm_level_and_index (parm, &level, &idx);
7205 /* Update the corresponding argument. */
7206 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
7207 TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
7208 TREE_TYPE (pack);
7209 else
7210 TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
7214 return result;
7217 /* Substitute ARGS into the vector or list of template arguments T. */
7219 static tree
7220 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7222 tree orig_t = t;
7223 int len = TREE_VEC_LENGTH (t);
7224 int need_new = 0, i, expanded_len_adjust = 0, out;
7225 tree *elts = (tree *) alloca (len * sizeof (tree));
7227 for (i = 0; i < len; i++)
7229 tree orig_arg = TREE_VEC_ELT (t, i);
7230 tree new_arg;
7232 if (TREE_CODE (orig_arg) == TREE_VEC)
7233 new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
7234 else if (PACK_EXPANSION_P (orig_arg))
7236 /* Substitute into an expansion expression. */
7237 new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
7239 if (TREE_CODE (new_arg) == TREE_VEC)
7240 /* Add to the expanded length adjustment the number of
7241 expanded arguments. We subtract one from this
7242 measurement, because the argument pack expression
7243 itself is already counted as 1 in
7244 LEN. EXPANDED_LEN_ADJUST can actually be negative, if
7245 the argument pack is empty. */
7246 expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
7248 else if (ARGUMENT_PACK_P (orig_arg))
7250 /* Substitute into each of the arguments. */
7251 new_arg = make_node (TREE_CODE (orig_arg));
7253 SET_ARGUMENT_PACK_ARGS (
7254 new_arg,
7255 tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
7256 args, complain, in_decl));
7258 if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
7259 new_arg = error_mark_node;
7261 if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
7262 TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
7263 complain, in_decl);
7264 TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
7266 if (TREE_TYPE (new_arg) == error_mark_node)
7267 new_arg = error_mark_node;
7270 else
7271 new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
7273 if (new_arg == error_mark_node)
7274 return error_mark_node;
7276 elts[i] = new_arg;
7277 if (new_arg != orig_arg)
7278 need_new = 1;
7281 if (!need_new)
7282 return t;
7284 /* Make space for the expanded arguments coming from template
7285 argument packs. */
7286 t = make_tree_vec (len + expanded_len_adjust);
7287 for (i = 0, out = 0; i < len; i++)
7289 if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
7290 || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
7291 && TREE_CODE (elts[i]) == TREE_VEC)
7293 int idx;
7295 /* Now expand the template argument pack "in place". */
7296 for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
7297 TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
7299 else
7301 TREE_VEC_ELT (t, out) = elts[i];
7302 out++;
7306 return t;
7309 /* Return the result of substituting ARGS into the template parameters
7310 given by PARMS. If there are m levels of ARGS and m + n levels of
7311 PARMS, then the result will contain n levels of PARMS. For
7312 example, if PARMS is `template <class T> template <class U>
7313 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
7314 result will be `template <int*, double, class V>'. */
7316 static tree
7317 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
7319 tree r = NULL_TREE;
7320 tree* new_parms;
7322 /* When substituting into a template, we must set
7323 PROCESSING_TEMPLATE_DECL as the template parameters may be
7324 dependent if they are based on one-another, and the dependency
7325 predicates are short-circuit outside of templates. */
7326 ++processing_template_decl;
7328 for (new_parms = &r;
7329 TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
7330 new_parms = &(TREE_CHAIN (*new_parms)),
7331 parms = TREE_CHAIN (parms))
7333 tree new_vec =
7334 make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
7335 int i;
7337 for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
7339 tree tuple;
7340 tree default_value;
7341 tree parm_decl;
7343 if (parms == error_mark_node)
7344 continue;
7346 tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
7348 if (tuple == error_mark_node)
7349 continue;
7351 default_value = TREE_PURPOSE (tuple);
7352 parm_decl = TREE_VALUE (tuple);
7354 parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
7355 if (TREE_CODE (parm_decl) == PARM_DECL
7356 && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
7357 parm_decl = error_mark_node;
7358 default_value = tsubst_template_arg (default_value, args,
7359 complain, NULL_TREE);
7361 tuple = build_tree_list (default_value, parm_decl);
7362 TREE_VEC_ELT (new_vec, i) = tuple;
7365 *new_parms =
7366 tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
7367 - TMPL_ARGS_DEPTH (args)),
7368 new_vec, NULL_TREE);
7371 --processing_template_decl;
7373 return r;
7376 /* Substitute the ARGS into the indicated aggregate (or enumeration)
7377 type T. If T is not an aggregate or enumeration type, it is
7378 handled as if by tsubst. IN_DECL is as for tsubst. If
7379 ENTERING_SCOPE is nonzero, T is the context for a template which
7380 we are presently tsubst'ing. Return the substituted value. */
7382 static tree
7383 tsubst_aggr_type (tree t,
7384 tree args,
7385 tsubst_flags_t complain,
7386 tree in_decl,
7387 int entering_scope)
7389 if (t == NULL_TREE)
7390 return NULL_TREE;
7392 switch (TREE_CODE (t))
7394 case RECORD_TYPE:
7395 if (TYPE_PTRMEMFUNC_P (t))
7396 return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
7398 /* Else fall through. */
7399 case ENUMERAL_TYPE:
7400 case UNION_TYPE:
7401 if (TYPE_TEMPLATE_INFO (t))
7403 tree argvec;
7404 tree context;
7405 tree r;
7406 bool saved_skip_evaluation;
7408 /* In "sizeof(X<I>)" we need to evaluate "I". */
7409 saved_skip_evaluation = skip_evaluation;
7410 skip_evaluation = false;
7412 /* First, determine the context for the type we are looking
7413 up. */
7414 context = TYPE_CONTEXT (t);
7415 if (context)
7416 context = tsubst_aggr_type (context, args, complain,
7417 in_decl, /*entering_scope=*/1);
7419 /* Then, figure out what arguments are appropriate for the
7420 type we are trying to find. For example, given:
7422 template <class T> struct S;
7423 template <class T, class U> void f(T, U) { S<U> su; }
7425 and supposing that we are instantiating f<int, double>,
7426 then our ARGS will be {int, double}, but, when looking up
7427 S we only want {double}. */
7428 argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
7429 complain, in_decl);
7430 if (argvec == error_mark_node)
7431 r = error_mark_node;
7432 else
7434 r = lookup_template_class (t, argvec, in_decl, context,
7435 entering_scope, complain);
7436 r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7439 skip_evaluation = saved_skip_evaluation;
7441 return r;
7443 else
7444 /* This is not a template type, so there's nothing to do. */
7445 return t;
7447 default:
7448 return tsubst (t, args, complain, in_decl);
7452 /* Substitute into the default argument ARG (a default argument for
7453 FN), which has the indicated TYPE. */
7455 tree
7456 tsubst_default_argument (tree fn, tree type, tree arg)
7458 tree saved_class_ptr = NULL_TREE;
7459 tree saved_class_ref = NULL_TREE;
7461 /* This default argument came from a template. Instantiate the
7462 default argument here, not in tsubst. In the case of
7463 something like:
7465 template <class T>
7466 struct S {
7467 static T t();
7468 void f(T = t());
7471 we must be careful to do name lookup in the scope of S<T>,
7472 rather than in the current class. */
7473 push_access_scope (fn);
7474 /* The "this" pointer is not valid in a default argument. */
7475 if (cfun)
7477 saved_class_ptr = current_class_ptr;
7478 cp_function_chain->x_current_class_ptr = NULL_TREE;
7479 saved_class_ref = current_class_ref;
7480 cp_function_chain->x_current_class_ref = NULL_TREE;
7483 push_deferring_access_checks(dk_no_deferred);
7484 /* The default argument expression may cause implicitly defined
7485 member functions to be synthesized, which will result in garbage
7486 collection. We must treat this situation as if we were within
7487 the body of function so as to avoid collecting live data on the
7488 stack. */
7489 ++function_depth;
7490 arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
7491 tf_warning_or_error, NULL_TREE,
7492 /*integral_constant_expression_p=*/false);
7493 --function_depth;
7494 pop_deferring_access_checks();
7496 /* Restore the "this" pointer. */
7497 if (cfun)
7499 cp_function_chain->x_current_class_ptr = saved_class_ptr;
7500 cp_function_chain->x_current_class_ref = saved_class_ref;
7503 pop_access_scope (fn);
7505 /* Make sure the default argument is reasonable. */
7506 arg = check_default_argument (type, arg);
7508 return arg;
7511 /* Substitute into all the default arguments for FN. */
7513 static void
7514 tsubst_default_arguments (tree fn)
7516 tree arg;
7517 tree tmpl_args;
7519 tmpl_args = DECL_TI_ARGS (fn);
7521 /* If this function is not yet instantiated, we certainly don't need
7522 its default arguments. */
7523 if (uses_template_parms (tmpl_args))
7524 return;
7526 for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
7527 arg;
7528 arg = TREE_CHAIN (arg))
7529 if (TREE_PURPOSE (arg))
7530 TREE_PURPOSE (arg) = tsubst_default_argument (fn,
7531 TREE_VALUE (arg),
7532 TREE_PURPOSE (arg));
7535 /* Substitute the ARGS into the T, which is a _DECL. Return the
7536 result of the substitution. Issue error and warning messages under
7537 control of COMPLAIN. */
7539 static tree
7540 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
7542 location_t saved_loc;
7543 tree r = NULL_TREE;
7544 tree in_decl = t;
7546 /* Set the filename and linenumber to improve error-reporting. */
7547 saved_loc = input_location;
7548 input_location = DECL_SOURCE_LOCATION (t);
7550 switch (TREE_CODE (t))
7552 case TEMPLATE_DECL:
7554 /* We can get here when processing a member function template,
7555 member class template, and template template parameter of
7556 a template class. */
7557 tree decl = DECL_TEMPLATE_RESULT (t);
7558 tree spec;
7559 tree tmpl_args;
7560 tree full_args;
7562 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7564 /* Template template parameter is treated here. */
7565 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7566 if (new_type == error_mark_node)
7567 return error_mark_node;
7569 r = copy_decl (t);
7570 TREE_CHAIN (r) = NULL_TREE;
7571 TREE_TYPE (r) = new_type;
7572 DECL_TEMPLATE_RESULT (r)
7573 = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
7574 DECL_TEMPLATE_PARMS (r)
7575 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7576 complain);
7577 TYPE_NAME (new_type) = r;
7578 break;
7581 /* We might already have an instance of this template.
7582 The ARGS are for the surrounding class type, so the
7583 full args contain the tsubst'd args for the context,
7584 plus the innermost args from the template decl. */
7585 tmpl_args = DECL_CLASS_TEMPLATE_P (t)
7586 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
7587 : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
7588 /* Because this is a template, the arguments will still be
7589 dependent, even after substitution. If
7590 PROCESSING_TEMPLATE_DECL is not set, the dependency
7591 predicates will short-circuit. */
7592 ++processing_template_decl;
7593 full_args = tsubst_template_args (tmpl_args, args,
7594 complain, in_decl);
7595 --processing_template_decl;
7596 if (full_args == error_mark_node)
7597 return error_mark_node;
7599 /* tsubst_template_args doesn't copy the vector if
7600 nothing changed. But, *something* should have
7601 changed. */
7602 gcc_assert (full_args != tmpl_args);
7604 spec = retrieve_specialization (t, full_args,
7605 /*class_specializations_p=*/true);
7606 if (spec != NULL_TREE)
7608 r = spec;
7609 break;
7612 /* Make a new template decl. It will be similar to the
7613 original, but will record the current template arguments.
7614 We also create a new function declaration, which is just
7615 like the old one, but points to this new template, rather
7616 than the old one. */
7617 r = copy_decl (t);
7618 gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
7619 TREE_CHAIN (r) = NULL_TREE;
7621 DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
7623 if (TREE_CODE (decl) == TYPE_DECL)
7625 tree new_type;
7626 ++processing_template_decl;
7627 new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7628 --processing_template_decl;
7629 if (new_type == error_mark_node)
7630 return error_mark_node;
7632 TREE_TYPE (r) = new_type;
7633 CLASSTYPE_TI_TEMPLATE (new_type) = r;
7634 DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
7635 DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
7636 DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
7638 else
7640 tree new_decl;
7641 ++processing_template_decl;
7642 new_decl = tsubst (decl, args, complain, in_decl);
7643 --processing_template_decl;
7644 if (new_decl == error_mark_node)
7645 return error_mark_node;
7647 DECL_TEMPLATE_RESULT (r) = new_decl;
7648 DECL_TI_TEMPLATE (new_decl) = r;
7649 TREE_TYPE (r) = TREE_TYPE (new_decl);
7650 DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
7651 DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
7654 SET_DECL_IMPLICIT_INSTANTIATION (r);
7655 DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
7656 DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
7658 /* The template parameters for this new template are all the
7659 template parameters for the old template, except the
7660 outermost level of parameters. */
7661 DECL_TEMPLATE_PARMS (r)
7662 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7663 complain);
7665 if (PRIMARY_TEMPLATE_P (t))
7666 DECL_PRIMARY_TEMPLATE (r) = r;
7668 if (TREE_CODE (decl) != TYPE_DECL)
7669 /* Record this non-type partial instantiation. */
7670 register_specialization (r, t,
7671 DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
7672 false);
7674 break;
7676 case FUNCTION_DECL:
7678 tree ctx;
7679 tree argvec = NULL_TREE;
7680 tree *friends;
7681 tree gen_tmpl;
7682 tree type;
7683 int member;
7684 int args_depth;
7685 int parms_depth;
7687 /* Nobody should be tsubst'ing into non-template functions. */
7688 gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
7690 if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
7692 tree spec;
7693 bool dependent_p;
7695 /* If T is not dependent, just return it. We have to
7696 increment PROCESSING_TEMPLATE_DECL because
7697 value_dependent_expression_p assumes that nothing is
7698 dependent when PROCESSING_TEMPLATE_DECL is zero. */
7699 ++processing_template_decl;
7700 dependent_p = value_dependent_expression_p (t);
7701 --processing_template_decl;
7702 if (!dependent_p)
7703 return t;
7705 /* Calculate the most general template of which R is a
7706 specialization, and the complete set of arguments used to
7707 specialize R. */
7708 gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
7709 argvec = tsubst_template_args (DECL_TI_ARGS
7710 (DECL_TEMPLATE_RESULT (gen_tmpl)),
7711 args, complain, in_decl);
7713 /* Check to see if we already have this specialization. */
7714 spec = retrieve_specialization (gen_tmpl, argvec,
7715 /*class_specializations_p=*/false);
7717 if (spec)
7719 r = spec;
7720 break;
7723 /* We can see more levels of arguments than parameters if
7724 there was a specialization of a member template, like
7725 this:
7727 template <class T> struct S { template <class U> void f(); }
7728 template <> template <class U> void S<int>::f(U);
7730 Here, we'll be substituting into the specialization,
7731 because that's where we can find the code we actually
7732 want to generate, but we'll have enough arguments for
7733 the most general template.
7735 We also deal with the peculiar case:
7737 template <class T> struct S {
7738 template <class U> friend void f();
7740 template <class U> void f() {}
7741 template S<int>;
7742 template void f<double>();
7744 Here, the ARGS for the instantiation of will be {int,
7745 double}. But, we only need as many ARGS as there are
7746 levels of template parameters in CODE_PATTERN. We are
7747 careful not to get fooled into reducing the ARGS in
7748 situations like:
7750 template <class T> struct S { template <class U> void f(U); }
7751 template <class T> template <> void S<T>::f(int) {}
7753 which we can spot because the pattern will be a
7754 specialization in this case. */
7755 args_depth = TMPL_ARGS_DEPTH (args);
7756 parms_depth =
7757 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
7758 if (args_depth > parms_depth
7759 && !DECL_TEMPLATE_SPECIALIZATION (t))
7760 args = get_innermost_template_args (args, parms_depth);
7762 else
7764 /* This special case arises when we have something like this:
7766 template <class T> struct S {
7767 friend void f<int>(int, double);
7770 Here, the DECL_TI_TEMPLATE for the friend declaration
7771 will be an IDENTIFIER_NODE. We are being called from
7772 tsubst_friend_function, and we want only to create a
7773 new decl (R) with appropriate types so that we can call
7774 determine_specialization. */
7775 gen_tmpl = NULL_TREE;
7778 if (DECL_CLASS_SCOPE_P (t))
7780 if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
7781 member = 2;
7782 else
7783 member = 1;
7784 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
7785 complain, t, /*entering_scope=*/1);
7787 else
7789 member = 0;
7790 ctx = DECL_CONTEXT (t);
7792 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7793 if (type == error_mark_node)
7794 return error_mark_node;
7796 /* We do NOT check for matching decls pushed separately at this
7797 point, as they may not represent instantiations of this
7798 template, and in any case are considered separate under the
7799 discrete model. */
7800 r = copy_decl (t);
7801 DECL_USE_TEMPLATE (r) = 0;
7802 TREE_TYPE (r) = type;
7803 /* Clear out the mangled name and RTL for the instantiation. */
7804 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
7805 SET_DECL_RTL (r, NULL_RTX);
7806 DECL_INITIAL (r) = NULL_TREE;
7807 DECL_CONTEXT (r) = ctx;
7809 if (member && DECL_CONV_FN_P (r))
7810 /* Type-conversion operator. Reconstruct the name, in
7811 case it's the name of one of the template's parameters. */
7812 DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
7814 DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
7815 complain, t);
7816 DECL_RESULT (r) = NULL_TREE;
7818 TREE_STATIC (r) = 0;
7819 TREE_PUBLIC (r) = TREE_PUBLIC (t);
7820 DECL_EXTERNAL (r) = 1;
7821 /* If this is an instantiation of a function with internal
7822 linkage, we already know what object file linkage will be
7823 assigned to the instantiation. */
7824 DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
7825 DECL_DEFER_OUTPUT (r) = 0;
7826 TREE_CHAIN (r) = NULL_TREE;
7827 DECL_PENDING_INLINE_INFO (r) = 0;
7828 DECL_PENDING_INLINE_P (r) = 0;
7829 DECL_SAVED_TREE (r) = NULL_TREE;
7830 TREE_USED (r) = 0;
7831 if (DECL_CLONED_FUNCTION (r))
7833 DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
7834 args, complain, t);
7835 TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
7836 TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
7839 /* Set up the DECL_TEMPLATE_INFO for R. There's no need to do
7840 this in the special friend case mentioned above where
7841 GEN_TMPL is NULL. */
7842 if (gen_tmpl)
7844 DECL_TEMPLATE_INFO (r)
7845 = tree_cons (gen_tmpl, argvec, NULL_TREE);
7846 SET_DECL_IMPLICIT_INSTANTIATION (r);
7847 register_specialization (r, gen_tmpl, argvec, false);
7849 /* We're not supposed to instantiate default arguments
7850 until they are called, for a template. But, for a
7851 declaration like:
7853 template <class T> void f ()
7854 { extern void g(int i = T()); }
7856 we should do the substitution when the template is
7857 instantiated. We handle the member function case in
7858 instantiate_class_template since the default arguments
7859 might refer to other members of the class. */
7860 if (!member
7861 && !PRIMARY_TEMPLATE_P (gen_tmpl)
7862 && !uses_template_parms (argvec))
7863 tsubst_default_arguments (r);
7865 else
7866 DECL_TEMPLATE_INFO (r) = NULL_TREE;
7868 /* Copy the list of befriending classes. */
7869 for (friends = &DECL_BEFRIENDING_CLASSES (r);
7870 *friends;
7871 friends = &TREE_CHAIN (*friends))
7873 *friends = copy_node (*friends);
7874 TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
7875 args, complain,
7876 in_decl);
7879 if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
7881 maybe_retrofit_in_chrg (r);
7882 if (DECL_CONSTRUCTOR_P (r))
7883 grok_ctor_properties (ctx, r);
7884 /* If this is an instantiation of a member template, clone it.
7885 If it isn't, that'll be handled by
7886 clone_constructors_and_destructors. */
7887 if (PRIMARY_TEMPLATE_P (gen_tmpl))
7888 clone_function_decl (r, /*update_method_vec_p=*/0);
7890 else if (IDENTIFIER_OPNAME_P (DECL_NAME (r))
7891 && !grok_op_properties (r, (complain & tf_error) != 0))
7892 return error_mark_node;
7894 if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
7895 SET_DECL_FRIEND_CONTEXT (r,
7896 tsubst (DECL_FRIEND_CONTEXT (t),
7897 args, complain, in_decl));
7899 /* Possibly limit visibility based on template args. */
7900 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
7901 if (DECL_VISIBILITY_SPECIFIED (t))
7903 DECL_VISIBILITY_SPECIFIED (r) = 0;
7904 DECL_ATTRIBUTES (r)
7905 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
7907 determine_visibility (r);
7909 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
7910 args, complain, in_decl);
7912 break;
7914 case PARM_DECL:
7916 tree type = NULL_TREE;
7917 int i, len = 1;
7918 tree expanded_types = NULL_TREE;
7919 tree prev_r = NULL_TREE;
7920 tree first_r = NULL_TREE;
7922 if (FUNCTION_PARAMETER_PACK_P (t))
7924 /* If there is a local specialization that isn't a
7925 parameter pack, it means that we're doing a "simple"
7926 substitution from inside tsubst_pack_expansion. Just
7927 return the local specialization (which will be a single
7928 parm). */
7929 tree spec = NULL_TREE;
7930 if (local_specializations)
7931 spec = retrieve_local_specialization (t);
7932 if (spec
7933 && TREE_CODE (spec) == PARM_DECL
7934 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
7935 return spec;
7937 /* Expand the TYPE_PACK_EXPANSION that provides the types for
7938 the parameters in this function parameter pack. */
7939 expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
7940 complain, in_decl);
7941 if (TREE_CODE (expanded_types) == TREE_VEC)
7943 len = TREE_VEC_LENGTH (expanded_types);
7945 /* Zero-length parameter packs are boring. Just substitute
7946 into the chain. */
7947 if (len == 0)
7948 return tsubst (TREE_CHAIN (t), args, complain,
7949 TREE_CHAIN (t));
7951 else
7953 /* All we did was update the type. Make a note of that. */
7954 type = expanded_types;
7955 expanded_types = NULL_TREE;
7959 /* Loop through all of the parameter's we'll build. When T is
7960 a function parameter pack, LEN is the number of expanded
7961 types in EXPANDED_TYPES; otherwise, LEN is 1. */
7962 r = NULL_TREE;
7963 for (i = 0; i < len; ++i)
7965 prev_r = r;
7966 r = copy_node (t);
7967 if (DECL_TEMPLATE_PARM_P (t))
7968 SET_DECL_TEMPLATE_PARM_P (r);
7970 if (expanded_types)
7971 /* We're on the Ith parameter of the function parameter
7972 pack. */
7974 /* Get the Ith type. */
7975 type = TREE_VEC_ELT (expanded_types, i);
7977 if (DECL_NAME (r))
7978 /* Rename the parameter to include the index. */
7979 DECL_NAME (r) =
7980 make_ith_pack_parameter_name (DECL_NAME (r), i);
7982 else if (!type)
7983 /* We're dealing with a normal parameter. */
7984 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7986 type = type_decays_to (type);
7987 TREE_TYPE (r) = type;
7988 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
7990 if (DECL_INITIAL (r))
7992 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
7993 DECL_INITIAL (r) = TREE_TYPE (r);
7994 else
7995 DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
7996 complain, in_decl);
7999 DECL_CONTEXT (r) = NULL_TREE;
8001 if (!DECL_TEMPLATE_PARM_P (r))
8002 DECL_ARG_TYPE (r) = type_passed_as (type);
8004 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8005 args, complain, in_decl);
8007 /* Keep track of the first new parameter we
8008 generate. That's what will be returned to the
8009 caller. */
8010 if (!first_r)
8011 first_r = r;
8013 /* Build a proper chain of parameters when substituting
8014 into a function parameter pack. */
8015 if (prev_r)
8016 TREE_CHAIN (prev_r) = r;
8019 if (TREE_CHAIN (t))
8020 TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
8021 complain, TREE_CHAIN (t));
8023 /* FIRST_R contains the start of the chain we've built. */
8024 r = first_r;
8026 break;
8028 case FIELD_DECL:
8030 tree type;
8032 r = copy_decl (t);
8033 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8034 if (type == error_mark_node)
8035 return error_mark_node;
8036 TREE_TYPE (r) = type;
8037 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8039 /* DECL_INITIAL gives the number of bits in a bit-field. */
8040 DECL_INITIAL (r)
8041 = tsubst_expr (DECL_INITIAL (t), args,
8042 complain, in_decl,
8043 /*integral_constant_expression_p=*/true);
8044 /* We don't have to set DECL_CONTEXT here; it is set by
8045 finish_member_declaration. */
8046 TREE_CHAIN (r) = NULL_TREE;
8047 if (VOID_TYPE_P (type))
8048 error ("instantiation of %q+D as type %qT", r, type);
8050 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8051 args, complain, in_decl);
8053 break;
8055 case USING_DECL:
8056 /* We reach here only for member using decls. */
8057 if (DECL_DEPENDENT_P (t))
8059 r = do_class_using_decl
8060 (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
8061 tsubst_copy (DECL_NAME (t), args, complain, in_decl));
8062 if (!r)
8063 r = error_mark_node;
8065 else
8067 r = copy_node (t);
8068 TREE_CHAIN (r) = NULL_TREE;
8070 break;
8072 case TYPE_DECL:
8073 case VAR_DECL:
8075 tree argvec = NULL_TREE;
8076 tree gen_tmpl = NULL_TREE;
8077 tree spec;
8078 tree tmpl = NULL_TREE;
8079 tree ctx;
8080 tree type = NULL_TREE;
8081 bool local_p;
8083 if (TREE_CODE (t) == TYPE_DECL
8084 && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
8086 /* If this is the canonical decl, we don't have to
8087 mess with instantiations, and often we can't (for
8088 typename, template type parms and such). Note that
8089 TYPE_NAME is not correct for the above test if
8090 we've copied the type for a typedef. */
8091 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8092 if (type == error_mark_node)
8093 return error_mark_node;
8094 r = TYPE_NAME (type);
8095 break;
8098 /* Check to see if we already have the specialization we
8099 need. */
8100 spec = NULL_TREE;
8101 if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
8103 /* T is a static data member or namespace-scope entity.
8104 We have to substitute into namespace-scope variables
8105 (even though such entities are never templates) because
8106 of cases like:
8108 template <class T> void f() { extern T t; }
8110 where the entity referenced is not known until
8111 instantiation time. */
8112 local_p = false;
8113 ctx = DECL_CONTEXT (t);
8114 if (DECL_CLASS_SCOPE_P (t))
8116 ctx = tsubst_aggr_type (ctx, args,
8117 complain,
8118 in_decl, /*entering_scope=*/1);
8119 /* If CTX is unchanged, then T is in fact the
8120 specialization we want. That situation occurs when
8121 referencing a static data member within in its own
8122 class. We can use pointer equality, rather than
8123 same_type_p, because DECL_CONTEXT is always
8124 canonical. */
8125 if (ctx == DECL_CONTEXT (t))
8126 spec = t;
8129 if (!spec)
8131 tmpl = DECL_TI_TEMPLATE (t);
8132 gen_tmpl = most_general_template (tmpl);
8133 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
8134 spec = (retrieve_specialization
8135 (gen_tmpl, argvec,
8136 /*class_specializations_p=*/false));
8139 else
8141 /* A local variable. */
8142 local_p = true;
8143 /* Subsequent calls to pushdecl will fill this in. */
8144 ctx = NULL_TREE;
8145 spec = retrieve_local_specialization (t);
8147 /* If we already have the specialization we need, there is
8148 nothing more to do. */
8149 if (spec)
8151 r = spec;
8152 break;
8155 /* Create a new node for the specialization we need. */
8156 r = copy_decl (t);
8157 if (type == NULL_TREE)
8158 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8159 if (TREE_CODE (r) == VAR_DECL)
8161 /* Even if the original location is out of scope, the
8162 newly substituted one is not. */
8163 DECL_DEAD_FOR_LOCAL (r) = 0;
8164 DECL_INITIALIZED_P (r) = 0;
8165 DECL_TEMPLATE_INSTANTIATED (r) = 0;
8166 if (type == error_mark_node)
8167 return error_mark_node;
8168 if (TREE_CODE (type) == FUNCTION_TYPE)
8170 /* It may seem that this case cannot occur, since:
8172 typedef void f();
8173 void g() { f x; }
8175 declares a function, not a variable. However:
8177 typedef void f();
8178 template <typename T> void g() { T t; }
8179 template void g<f>();
8181 is an attempt to declare a variable with function
8182 type. */
8183 error ("variable %qD has function type",
8184 /* R is not yet sufficiently initialized, so we
8185 just use its name. */
8186 DECL_NAME (r));
8187 return error_mark_node;
8189 type = complete_type (type);
8190 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
8191 = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
8192 type = check_var_type (DECL_NAME (r), type);
8194 if (DECL_HAS_VALUE_EXPR_P (t))
8196 tree ve = DECL_VALUE_EXPR (t);
8197 ve = tsubst_expr (ve, args, complain, in_decl,
8198 /*constant_expression_p=*/false);
8199 SET_DECL_VALUE_EXPR (r, ve);
8202 else if (DECL_SELF_REFERENCE_P (t))
8203 SET_DECL_SELF_REFERENCE_P (r);
8204 TREE_TYPE (r) = type;
8205 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8206 DECL_CONTEXT (r) = ctx;
8207 /* Clear out the mangled name and RTL for the instantiation. */
8208 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8209 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8210 SET_DECL_RTL (r, NULL_RTX);
8211 /* The initializer must not be expanded until it is required;
8212 see [temp.inst]. */
8213 DECL_INITIAL (r) = NULL_TREE;
8214 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8215 SET_DECL_RTL (r, NULL_RTX);
8216 DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
8217 if (TREE_CODE (r) == VAR_DECL)
8219 /* Possibly limit visibility based on template args. */
8220 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8221 if (DECL_VISIBILITY_SPECIFIED (t))
8223 DECL_VISIBILITY_SPECIFIED (r) = 0;
8224 DECL_ATTRIBUTES (r)
8225 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8227 determine_visibility (r);
8229 /* Preserve a typedef that names a type. */
8230 else if (TREE_CODE (r) == TYPE_DECL
8231 && DECL_ORIGINAL_TYPE (t)
8232 && type != error_mark_node)
8234 DECL_ORIGINAL_TYPE (r) = tsubst (DECL_ORIGINAL_TYPE (t),
8235 args, complain, in_decl);
8236 TREE_TYPE (r) = type = build_variant_type_copy (type);
8237 TYPE_NAME (type) = r;
8240 if (!local_p)
8242 /* A static data member declaration is always marked
8243 external when it is declared in-class, even if an
8244 initializer is present. We mimic the non-template
8245 processing here. */
8246 DECL_EXTERNAL (r) = 1;
8248 register_specialization (r, gen_tmpl, argvec, false);
8249 DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
8250 SET_DECL_IMPLICIT_INSTANTIATION (r);
8252 else
8253 register_local_specialization (r, t);
8255 TREE_CHAIN (r) = NULL_TREE;
8257 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
8258 (int) ATTR_FLAG_TYPE_IN_PLACE,
8259 args, complain, in_decl);
8260 layout_decl (r, 0);
8262 break;
8264 default:
8265 gcc_unreachable ();
8268 /* Restore the file and line information. */
8269 input_location = saved_loc;
8271 return r;
8274 /* Substitute into the ARG_TYPES of a function type. */
8276 static tree
8277 tsubst_arg_types (tree arg_types,
8278 tree args,
8279 tsubst_flags_t complain,
8280 tree in_decl)
8282 tree remaining_arg_types;
8283 tree type = NULL_TREE;
8284 int i = 1;
8285 tree expanded_args = NULL_TREE;
8286 tree default_arg;
8288 if (!arg_types || arg_types == void_list_node)
8289 return arg_types;
8291 remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
8292 args, complain, in_decl);
8293 if (remaining_arg_types == error_mark_node)
8294 return error_mark_node;
8296 if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
8298 /* For a pack expansion, perform substitution on the
8299 entire expression. Later on, we'll handle the arguments
8300 one-by-one. */
8301 expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
8302 args, complain, in_decl);
8304 if (TREE_CODE (expanded_args) == TREE_VEC)
8305 /* So that we'll spin through the parameters, one by one. */
8306 i = TREE_VEC_LENGTH (expanded_args);
8307 else
8309 /* We only partially substituted into the parameter
8310 pack. Our type is TYPE_PACK_EXPANSION. */
8311 type = expanded_args;
8312 expanded_args = NULL_TREE;
8316 while (i > 0) {
8317 --i;
8319 if (expanded_args)
8320 type = TREE_VEC_ELT (expanded_args, i);
8321 else if (!type)
8322 type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
8324 if (type == error_mark_node)
8325 return error_mark_node;
8326 if (VOID_TYPE_P (type))
8328 if (complain & tf_error)
8330 error ("invalid parameter type %qT", type);
8331 if (in_decl)
8332 error ("in declaration %q+D", in_decl);
8334 return error_mark_node;
8337 /* Do array-to-pointer, function-to-pointer conversion, and ignore
8338 top-level qualifiers as required. */
8339 type = TYPE_MAIN_VARIANT (type_decays_to (type));
8341 /* We do not substitute into default arguments here. The standard
8342 mandates that they be instantiated only when needed, which is
8343 done in build_over_call. */
8344 default_arg = TREE_PURPOSE (arg_types);
8346 if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
8348 /* We've instantiated a template before its default arguments
8349 have been parsed. This can happen for a nested template
8350 class, and is not an error unless we require the default
8351 argument in a call of this function. */
8352 remaining_arg_types =
8353 tree_cons (default_arg, type, remaining_arg_types);
8354 VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg),
8355 remaining_arg_types);
8357 else
8358 remaining_arg_types =
8359 hash_tree_cons (default_arg, type, remaining_arg_types);
8362 return remaining_arg_types;
8365 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
8366 *not* handle the exception-specification for FNTYPE, because the
8367 initial substitution of explicitly provided template parameters
8368 during argument deduction forbids substitution into the
8369 exception-specification:
8371 [temp.deduct]
8373 All references in the function type of the function template to the
8374 corresponding template parameters are replaced by the specified tem-
8375 plate argument values. If a substitution in a template parameter or
8376 in the function type of the function template results in an invalid
8377 type, type deduction fails. [Note: The equivalent substitution in
8378 exception specifications is done only when the function is instanti-
8379 ated, at which point a program is ill-formed if the substitution
8380 results in an invalid type.] */
8382 static tree
8383 tsubst_function_type (tree t,
8384 tree args,
8385 tsubst_flags_t complain,
8386 tree in_decl)
8388 tree return_type;
8389 tree arg_types;
8390 tree fntype;
8392 /* The TYPE_CONTEXT is not used for function/method types. */
8393 gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
8395 /* Substitute the return type. */
8396 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8397 if (return_type == error_mark_node)
8398 return error_mark_node;
8399 /* The standard does not presently indicate that creation of a
8400 function type with an invalid return type is a deduction failure.
8401 However, that is clearly analogous to creating an array of "void"
8402 or a reference to a reference. This is core issue #486. */
8403 if (TREE_CODE (return_type) == ARRAY_TYPE
8404 || TREE_CODE (return_type) == FUNCTION_TYPE)
8406 if (complain & tf_error)
8408 if (TREE_CODE (return_type) == ARRAY_TYPE)
8409 error ("function returning an array");
8410 else
8411 error ("function returning a function");
8413 return error_mark_node;
8416 /* Substitute the argument types. */
8417 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
8418 complain, in_decl);
8419 if (arg_types == error_mark_node)
8420 return error_mark_node;
8422 if (TYPE_QUALS (return_type) != TYPE_UNQUALIFIED
8423 && in_decl != NULL_TREE
8424 && !TREE_NO_WARNING (in_decl)
8425 && (SCALAR_TYPE_P (return_type) || VOID_TYPE_P (return_type)))
8426 warning (OPT_Wreturn_type,
8427 "type qualifiers ignored on function return type");
8429 /* Construct a new type node and return it. */
8430 if (TREE_CODE (t) == FUNCTION_TYPE)
8431 fntype = build_function_type (return_type, arg_types);
8432 else
8434 tree r = TREE_TYPE (TREE_VALUE (arg_types));
8435 if (! IS_AGGR_TYPE (r))
8437 /* [temp.deduct]
8439 Type deduction may fail for any of the following
8440 reasons:
8442 -- Attempting to create "pointer to member of T" when T
8443 is not a class type. */
8444 if (complain & tf_error)
8445 error ("creating pointer to member function of non-class type %qT",
8447 return error_mark_node;
8450 fntype = build_method_type_directly (r, return_type,
8451 TREE_CHAIN (arg_types));
8453 fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
8454 fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
8456 return fntype;
8459 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE. Substitute the template
8460 ARGS into that specification, and return the substituted
8461 specification. If there is no specification, return NULL_TREE. */
8463 static tree
8464 tsubst_exception_specification (tree fntype,
8465 tree args,
8466 tsubst_flags_t complain,
8467 tree in_decl)
8469 tree specs;
8470 tree new_specs;
8472 specs = TYPE_RAISES_EXCEPTIONS (fntype);
8473 new_specs = NULL_TREE;
8474 if (specs)
8476 if (! TREE_VALUE (specs))
8477 new_specs = specs;
8478 else
8479 while (specs)
8481 tree spec;
8482 int i, len = 1;
8483 tree expanded_specs = NULL_TREE;
8485 if (PACK_EXPANSION_P (TREE_VALUE (specs)))
8487 /* Expand the pack expansion type. */
8488 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
8489 args, complain,
8490 in_decl);
8491 len = TREE_VEC_LENGTH (expanded_specs);
8494 for (i = 0; i < len; ++i)
8496 if (expanded_specs)
8497 spec = TREE_VEC_ELT (expanded_specs, i);
8498 else
8499 spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
8500 if (spec == error_mark_node)
8501 return spec;
8502 new_specs = add_exception_specifier (new_specs, spec,
8503 complain);
8506 specs = TREE_CHAIN (specs);
8509 return new_specs;
8512 /* Take the tree structure T and replace template parameters used
8513 therein with the argument vector ARGS. IN_DECL is an associated
8514 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
8515 Issue error and warning messages under control of COMPLAIN. Note
8516 that we must be relatively non-tolerant of extensions here, in
8517 order to preserve conformance; if we allow substitutions that
8518 should not be allowed, we may allow argument deductions that should
8519 not succeed, and therefore report ambiguous overload situations
8520 where there are none. In theory, we could allow the substitution,
8521 but indicate that it should have failed, and allow our caller to
8522 make sure that the right thing happens, but we don't try to do this
8523 yet.
8525 This function is used for dealing with types, decls and the like;
8526 for expressions, use tsubst_expr or tsubst_copy. */
8528 static tree
8529 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8531 tree type, r;
8533 if (t == NULL_TREE || t == error_mark_node
8534 || t == integer_type_node
8535 || t == void_type_node
8536 || t == char_type_node
8537 || t == unknown_type_node
8538 || TREE_CODE (t) == NAMESPACE_DECL)
8539 return t;
8541 if (DECL_P (t))
8542 return tsubst_decl (t, args, complain);
8544 if (TREE_CODE (t) == IDENTIFIER_NODE)
8545 type = IDENTIFIER_TYPE_VALUE (t);
8546 else
8547 type = TREE_TYPE (t);
8549 gcc_assert (type != unknown_type_node);
8551 /* Reuse typedefs. We need to do this to handle dependent attributes,
8552 such as attribute aligned. */
8553 if (TYPE_P (t)
8554 && TYPE_NAME (t)
8555 && TYPE_NAME (t) != TYPE_MAIN_DECL (t))
8557 tree decl = TYPE_NAME (t);
8559 if (DECL_CLASS_SCOPE_P (decl)
8560 && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl)))
8562 tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
8563 tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
8564 r = retrieve_specialization (tmpl, gen_args, false);
8566 else if (DECL_FUNCTION_SCOPE_P (decl))
8567 r = retrieve_local_specialization (decl);
8568 else
8569 r = NULL_TREE;
8571 if (r)
8573 r = TREE_TYPE (r);
8574 r = cp_build_qualified_type_real
8575 (r, cp_type_quals (t) | cp_type_quals (r),
8576 complain | tf_ignore_bad_quals);
8577 return r;
8579 /* Else we must be instantiating the typedef, so fall through. */
8582 if (type
8583 && TREE_CODE (t) != TYPENAME_TYPE
8584 && TREE_CODE (t) != IDENTIFIER_NODE
8585 && TREE_CODE (t) != FUNCTION_TYPE
8586 && TREE_CODE (t) != METHOD_TYPE)
8587 type = tsubst (type, args, complain, in_decl);
8588 if (type == error_mark_node)
8589 return error_mark_node;
8591 switch (TREE_CODE (t))
8593 case RECORD_TYPE:
8594 case UNION_TYPE:
8595 case ENUMERAL_TYPE:
8596 return tsubst_aggr_type (t, args, complain, in_decl,
8597 /*entering_scope=*/0);
8599 case ERROR_MARK:
8600 case IDENTIFIER_NODE:
8601 case VOID_TYPE:
8602 case REAL_TYPE:
8603 case COMPLEX_TYPE:
8604 case VECTOR_TYPE:
8605 case BOOLEAN_TYPE:
8606 case INTEGER_CST:
8607 case REAL_CST:
8608 case STRING_CST:
8609 return t;
8611 case INTEGER_TYPE:
8612 if (t == integer_type_node)
8613 return t;
8615 if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
8616 && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
8617 return t;
8620 tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
8622 max = tsubst_expr (omax, args, complain, in_decl,
8623 /*integral_constant_expression_p=*/false);
8624 max = fold_decl_constant_value (max);
8626 if (TREE_CODE (max) != INTEGER_CST
8627 && TREE_CODE (max) != TEMPLATE_PARM_INDEX
8628 && !at_function_scope_p ())
8630 if (complain & tf_error)
8631 error ("array bound is not an integer constant");
8632 return error_mark_node;
8635 /* [temp.deduct]
8637 Type deduction may fail for any of the following
8638 reasons:
8640 Attempting to create an array with a size that is
8641 zero or negative. */
8642 if (integer_zerop (max) && !(complain & tf_error))
8643 /* We must fail if performing argument deduction (as
8644 indicated by the state of complain), so that
8645 another substitution can be found. */
8646 return error_mark_node;
8647 else if (TREE_CODE (max) == INTEGER_CST
8648 && INT_CST_LT (max, integer_zero_node))
8650 if (complain & tf_error)
8651 error ("creating array with negative size (%qE)", max);
8653 return error_mark_node;
8656 return compute_array_index_type (NULL_TREE, max);
8659 case TEMPLATE_TYPE_PARM:
8660 case TEMPLATE_TEMPLATE_PARM:
8661 case BOUND_TEMPLATE_TEMPLATE_PARM:
8662 case TEMPLATE_PARM_INDEX:
8664 int idx;
8665 int level;
8666 int levels;
8667 tree arg = NULL_TREE;
8669 r = NULL_TREE;
8671 gcc_assert (TREE_VEC_LENGTH (args) > 0);
8672 template_parm_level_and_index (t, &level, &idx);
8674 levels = TMPL_ARGS_DEPTH (args);
8675 if (level <= levels)
8677 arg = TMPL_ARG (args, level, idx);
8679 if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
8680 /* See through ARGUMENT_PACK_SELECT arguments. */
8681 arg = ARGUMENT_PACK_SELECT_ARG (arg);
8684 if (arg == error_mark_node)
8685 return error_mark_node;
8686 else if (arg != NULL_TREE)
8688 if (ARGUMENT_PACK_P (arg))
8689 /* If ARG is an argument pack, we don't actually want to
8690 perform a substitution here, because substitutions
8691 for argument packs are only done
8692 element-by-element. We can get to this point when
8693 substituting the type of a non-type template
8694 parameter pack, when that type actually contains
8695 template parameter packs from an outer template, e.g.,
8697 template<typename... Types> struct A {
8698 template<Types... Values> struct B { };
8699 }; */
8700 return t;
8702 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
8704 int quals;
8705 gcc_assert (TYPE_P (arg));
8707 /* cv-quals from the template are discarded when
8708 substituting in a function or reference type. */
8709 if (TREE_CODE (arg) == FUNCTION_TYPE
8710 || TREE_CODE (arg) == METHOD_TYPE
8711 || TREE_CODE (arg) == REFERENCE_TYPE)
8712 quals = cp_type_quals (arg);
8713 else
8714 quals = cp_type_quals (arg) | cp_type_quals (t);
8716 return cp_build_qualified_type_real
8717 (arg, quals, complain | tf_ignore_bad_quals);
8719 else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8721 /* We are processing a type constructed from a
8722 template template parameter. */
8723 tree argvec = tsubst (TYPE_TI_ARGS (t),
8724 args, complain, in_decl);
8725 if (argvec == error_mark_node)
8726 return error_mark_node;
8728 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
8729 are resolving nested-types in the signature of a
8730 member function templates. Otherwise ARG is a
8731 TEMPLATE_DECL and is the real template to be
8732 instantiated. */
8733 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
8734 arg = TYPE_NAME (arg);
8736 r = lookup_template_class (arg,
8737 argvec, in_decl,
8738 DECL_CONTEXT (arg),
8739 /*entering_scope=*/0,
8740 complain);
8741 return cp_build_qualified_type_real
8742 (r, TYPE_QUALS (t), complain);
8744 else
8745 /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX. */
8746 return arg;
8749 if (level == 1)
8750 /* This can happen during the attempted tsubst'ing in
8751 unify. This means that we don't yet have any information
8752 about the template parameter in question. */
8753 return t;
8755 /* If we get here, we must have been looking at a parm for a
8756 more deeply nested template. Make a new version of this
8757 template parameter, but with a lower level. */
8758 switch (TREE_CODE (t))
8760 case TEMPLATE_TYPE_PARM:
8761 case TEMPLATE_TEMPLATE_PARM:
8762 case BOUND_TEMPLATE_TEMPLATE_PARM:
8763 if (cp_type_quals (t))
8765 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
8766 r = cp_build_qualified_type_real
8767 (r, cp_type_quals (t),
8768 complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
8769 ? tf_ignore_bad_quals : 0));
8771 else
8773 r = copy_type (t);
8774 TEMPLATE_TYPE_PARM_INDEX (r)
8775 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
8776 r, levels);
8777 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
8778 TYPE_MAIN_VARIANT (r) = r;
8779 TYPE_POINTER_TO (r) = NULL_TREE;
8780 TYPE_REFERENCE_TO (r) = NULL_TREE;
8782 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
8783 /* We have reduced the level of the template
8784 template parameter, but not the levels of its
8785 template parameters, so canonical_type_parameter
8786 will not be able to find the canonical template
8787 template parameter for this level. Thus, we
8788 require structural equality checking to compare
8789 TEMPLATE_TEMPLATE_PARMs. */
8790 SET_TYPE_STRUCTURAL_EQUALITY (r);
8791 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
8792 SET_TYPE_STRUCTURAL_EQUALITY (r);
8793 else
8794 TYPE_CANONICAL (r) = canonical_type_parameter (r);
8796 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8798 tree argvec = tsubst (TYPE_TI_ARGS (t), args,
8799 complain, in_decl);
8800 if (argvec == error_mark_node)
8801 return error_mark_node;
8803 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
8804 = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
8807 break;
8809 case TEMPLATE_PARM_INDEX:
8810 r = reduce_template_parm_level (t, type, levels);
8811 break;
8813 default:
8814 gcc_unreachable ();
8817 return r;
8820 case TREE_LIST:
8822 tree purpose, value, chain;
8824 if (t == void_list_node)
8825 return t;
8827 purpose = TREE_PURPOSE (t);
8828 if (purpose)
8830 purpose = tsubst (purpose, args, complain, in_decl);
8831 if (purpose == error_mark_node)
8832 return error_mark_node;
8834 value = TREE_VALUE (t);
8835 if (value)
8837 value = tsubst (value, args, complain, in_decl);
8838 if (value == error_mark_node)
8839 return error_mark_node;
8841 chain = TREE_CHAIN (t);
8842 if (chain && chain != void_type_node)
8844 chain = tsubst (chain, args, complain, in_decl);
8845 if (chain == error_mark_node)
8846 return error_mark_node;
8848 if (purpose == TREE_PURPOSE (t)
8849 && value == TREE_VALUE (t)
8850 && chain == TREE_CHAIN (t))
8851 return t;
8852 return hash_tree_cons (purpose, value, chain);
8855 case TREE_BINFO:
8856 /* We should never be tsubsting a binfo. */
8857 gcc_unreachable ();
8859 case TREE_VEC:
8860 /* A vector of template arguments. */
8861 gcc_assert (!type);
8862 return tsubst_template_args (t, args, complain, in_decl);
8864 case POINTER_TYPE:
8865 case REFERENCE_TYPE:
8867 enum tree_code code;
8869 if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
8870 return t;
8872 code = TREE_CODE (t);
8875 /* [temp.deduct]
8877 Type deduction may fail for any of the following
8878 reasons:
8880 -- Attempting to create a pointer to reference type.
8881 -- Attempting to create a reference to a reference type or
8882 a reference to void.
8884 Core issue 106 says that creating a reference to a reference
8885 during instantiation is no longer a cause for failure. We
8886 only enforce this check in strict C++98 mode. */
8887 if ((TREE_CODE (type) == REFERENCE_TYPE
8888 && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
8889 || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
8891 static location_t last_loc;
8893 /* We keep track of the last time we issued this error
8894 message to avoid spewing a ton of messages during a
8895 single bad template instantiation. */
8896 if (complain & tf_error
8897 #ifdef USE_MAPPED_LOCATION
8898 && last_loc != input_location
8899 #else
8900 && (last_loc.line != input_line
8901 || last_loc.file != input_filename)
8902 #endif
8905 if (TREE_CODE (type) == VOID_TYPE)
8906 error ("forming reference to void");
8907 else
8908 error ("forming %s to reference type %qT",
8909 (code == POINTER_TYPE) ? "pointer" : "reference",
8910 type);
8911 last_loc = input_location;
8914 return error_mark_node;
8916 else if (code == POINTER_TYPE)
8918 r = build_pointer_type (type);
8919 if (TREE_CODE (type) == METHOD_TYPE)
8920 r = build_ptrmemfunc_type (r);
8922 else if (TREE_CODE (type) == REFERENCE_TYPE)
8923 /* In C++0x, during template argument substitution, when there is an
8924 attempt to create a reference to a reference type, reference
8925 collapsing is applied as described in [14.3.1/4 temp.arg.type]:
8927 "If a template-argument for a template-parameter T names a type
8928 that is a reference to a type A, an attempt to create the type
8929 'lvalue reference to cv T' creates the type 'lvalue reference to
8930 A,' while an attempt to create the type type rvalue reference to
8931 cv T' creates the type T"
8933 r = cp_build_reference_type
8934 (TREE_TYPE (type),
8935 TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
8936 else
8937 r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
8938 r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
8940 if (r != error_mark_node)
8941 /* Will this ever be needed for TYPE_..._TO values? */
8942 layout_type (r);
8944 return r;
8946 case OFFSET_TYPE:
8948 r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
8949 if (r == error_mark_node || !IS_AGGR_TYPE (r))
8951 /* [temp.deduct]
8953 Type deduction may fail for any of the following
8954 reasons:
8956 -- Attempting to create "pointer to member of T" when T
8957 is not a class type. */
8958 if (complain & tf_error)
8959 error ("creating pointer to member of non-class type %qT", r);
8960 return error_mark_node;
8962 if (TREE_CODE (type) == REFERENCE_TYPE)
8964 if (complain & tf_error)
8965 error ("creating pointer to member reference type %qT", type);
8966 return error_mark_node;
8968 if (TREE_CODE (type) == VOID_TYPE)
8970 if (complain & tf_error)
8971 error ("creating pointer to member of type void");
8972 return error_mark_node;
8974 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
8975 if (TREE_CODE (type) == FUNCTION_TYPE)
8977 /* The type of the implicit object parameter gets its
8978 cv-qualifiers from the FUNCTION_TYPE. */
8979 tree method_type;
8980 tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
8981 cp_type_quals (type));
8982 tree memptr;
8983 method_type = build_method_type_directly (this_type,
8984 TREE_TYPE (type),
8985 TYPE_ARG_TYPES (type));
8986 memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
8987 return cp_build_qualified_type_real (memptr, cp_type_quals (t),
8988 complain);
8990 else
8991 return cp_build_qualified_type_real (build_ptrmem_type (r, type),
8992 TYPE_QUALS (t),
8993 complain);
8995 case FUNCTION_TYPE:
8996 case METHOD_TYPE:
8998 tree fntype;
8999 tree specs;
9000 fntype = tsubst_function_type (t, args, complain, in_decl);
9001 if (fntype == error_mark_node)
9002 return error_mark_node;
9004 /* Substitute the exception specification. */
9005 specs = tsubst_exception_specification (t, args, complain,
9006 in_decl);
9007 if (specs == error_mark_node)
9008 return error_mark_node;
9009 if (specs)
9010 fntype = build_exception_variant (fntype, specs);
9011 return fntype;
9013 case ARRAY_TYPE:
9015 tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
9016 if (domain == error_mark_node)
9017 return error_mark_node;
9019 /* As an optimization, we avoid regenerating the array type if
9020 it will obviously be the same as T. */
9021 if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
9022 return t;
9024 /* These checks should match the ones in grokdeclarator.
9026 [temp.deduct]
9028 The deduction may fail for any of the following reasons:
9030 -- Attempting to create an array with an element type that
9031 is void, a function type, or a reference type, or [DR337]
9032 an abstract class type. */
9033 if (TREE_CODE (type) == VOID_TYPE
9034 || TREE_CODE (type) == FUNCTION_TYPE
9035 || TREE_CODE (type) == REFERENCE_TYPE)
9037 if (complain & tf_error)
9038 error ("creating array of %qT", type);
9039 return error_mark_node;
9041 if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
9043 if (complain & tf_error)
9044 error ("creating array of %qT, which is an abstract class type",
9045 type);
9046 return error_mark_node;
9049 r = build_cplus_array_type (type, domain);
9051 if (TYPE_USER_ALIGN (t))
9053 TYPE_ALIGN (r) = TYPE_ALIGN (t);
9054 TYPE_USER_ALIGN (r) = 1;
9057 return r;
9060 case PLUS_EXPR:
9061 case MINUS_EXPR:
9063 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9064 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9066 if (e1 == error_mark_node || e2 == error_mark_node)
9067 return error_mark_node;
9069 return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
9072 case NEGATE_EXPR:
9073 case NOP_EXPR:
9075 tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9076 if (e == error_mark_node)
9077 return error_mark_node;
9079 return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
9082 case TYPENAME_TYPE:
9084 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9085 in_decl, /*entering_scope=*/1);
9086 tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
9087 complain, in_decl);
9089 if (ctx == error_mark_node || f == error_mark_node)
9090 return error_mark_node;
9092 if (!IS_AGGR_TYPE (ctx))
9094 if (complain & tf_error)
9095 error ("%qT is not a class, struct, or union type", ctx);
9096 return error_mark_node;
9098 else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
9100 /* Normally, make_typename_type does not require that the CTX
9101 have complete type in order to allow things like:
9103 template <class T> struct S { typename S<T>::X Y; };
9105 But, such constructs have already been resolved by this
9106 point, so here CTX really should have complete type, unless
9107 it's a partial instantiation. */
9108 ctx = complete_type (ctx);
9109 if (!COMPLETE_TYPE_P (ctx))
9111 if (complain & tf_error)
9112 cxx_incomplete_type_error (NULL_TREE, ctx);
9113 return error_mark_node;
9117 f = make_typename_type (ctx, f, typename_type,
9118 (complain & tf_error) | tf_keep_type_decl);
9119 if (f == error_mark_node)
9120 return f;
9121 if (TREE_CODE (f) == TYPE_DECL)
9123 complain |= tf_ignore_bad_quals;
9124 f = TREE_TYPE (f);
9127 if (TREE_CODE (f) != TYPENAME_TYPE)
9129 if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
9130 error ("%qT resolves to %qT, which is not an enumeration type",
9131 t, f);
9132 else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
9133 error ("%qT resolves to %qT, which is is not a class type",
9134 t, f);
9137 return cp_build_qualified_type_real
9138 (f, cp_type_quals (f) | cp_type_quals (t), complain);
9141 case UNBOUND_CLASS_TEMPLATE:
9143 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9144 in_decl, /*entering_scope=*/1);
9145 tree name = TYPE_IDENTIFIER (t);
9146 tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
9148 if (ctx == error_mark_node || name == error_mark_node)
9149 return error_mark_node;
9151 if (parm_list)
9152 parm_list = tsubst_template_parms (parm_list, args, complain);
9153 return make_unbound_class_template (ctx, name, parm_list, complain);
9156 case INDIRECT_REF:
9157 case ADDR_EXPR:
9158 case CALL_EXPR:
9159 gcc_unreachable ();
9161 case ARRAY_REF:
9163 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9164 tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl,
9165 /*integral_constant_expression_p=*/false);
9166 if (e1 == error_mark_node || e2 == error_mark_node)
9167 return error_mark_node;
9169 return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
9172 case SCOPE_REF:
9174 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9175 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9176 if (e1 == error_mark_node || e2 == error_mark_node)
9177 return error_mark_node;
9179 return build_qualified_name (/*type=*/NULL_TREE,
9180 e1, e2, QUALIFIED_NAME_IS_TEMPLATE (t));
9183 case TYPEOF_TYPE:
9185 tree type;
9187 type = finish_typeof (tsubst_expr
9188 (TYPEOF_TYPE_EXPR (t), args,
9189 complain, in_decl,
9190 /*integral_constant_expression_p=*/false));
9191 return cp_build_qualified_type_real (type,
9192 cp_type_quals (t)
9193 | cp_type_quals (type),
9194 complain);
9197 case DECLTYPE_TYPE:
9199 tree type;
9201 type =
9202 finish_decltype_type (tsubst_expr
9203 (DECLTYPE_TYPE_EXPR (t), args,
9204 complain, in_decl,
9205 /*integral_constant_expression_p=*/false),
9206 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t));
9207 return cp_build_qualified_type_real (type,
9208 cp_type_quals (t)
9209 | cp_type_quals (type),
9210 complain);
9213 case TYPE_ARGUMENT_PACK:
9214 case NONTYPE_ARGUMENT_PACK:
9216 tree r = make_node (TREE_CODE (t));
9217 tree packed_out =
9218 tsubst_template_args (ARGUMENT_PACK_ARGS (t),
9219 args,
9220 complain,
9221 in_decl);
9222 SET_ARGUMENT_PACK_ARGS (r, packed_out);
9224 /* For template nontype argument packs, also substitute into
9225 the type. */
9226 if (TREE_CODE (t) == NONTYPE_ARGUMENT_PACK)
9227 TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
9229 return r;
9231 break;
9233 default:
9234 sorry ("use of %qs in template",
9235 tree_code_name [(int) TREE_CODE (t)]);
9236 return error_mark_node;
9240 /* Like tsubst_expr for a BASELINK. OBJECT_TYPE, if non-NULL, is the
9241 type of the expression on the left-hand side of the "." or "->"
9242 operator. */
9244 static tree
9245 tsubst_baselink (tree baselink, tree object_type,
9246 tree args, tsubst_flags_t complain, tree in_decl)
9248 tree name;
9249 tree qualifying_scope;
9250 tree fns;
9251 tree optype;
9252 tree template_args = 0;
9253 bool template_id_p = false;
9255 /* A baselink indicates a function from a base class. Both the
9256 BASELINK_ACCESS_BINFO and the base class referenced may
9257 indicate bases of the template class, rather than the
9258 instantiated class. In addition, lookups that were not
9259 ambiguous before may be ambiguous now. Therefore, we perform
9260 the lookup again. */
9261 qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
9262 qualifying_scope = tsubst (qualifying_scope, args,
9263 complain, in_decl);
9264 fns = BASELINK_FUNCTIONS (baselink);
9265 optype = BASELINK_OPTYPE (baselink);
9266 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
9268 template_id_p = true;
9269 template_args = TREE_OPERAND (fns, 1);
9270 fns = TREE_OPERAND (fns, 0);
9271 if (template_args)
9272 template_args = tsubst_template_args (template_args, args,
9273 complain, in_decl);
9275 name = DECL_NAME (get_first_fn (fns));
9276 baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
9278 /* If lookup found a single function, mark it as used at this
9279 point. (If it lookup found multiple functions the one selected
9280 later by overload resolution will be marked as used at that
9281 point.) */
9282 if (BASELINK_P (baselink))
9283 fns = BASELINK_FUNCTIONS (baselink);
9284 if (!template_id_p && !really_overloaded_fn (fns))
9285 mark_used (OVL_CURRENT (fns));
9287 /* Add back the template arguments, if present. */
9288 if (BASELINK_P (baselink) && template_id_p)
9289 BASELINK_FUNCTIONS (baselink)
9290 = build_nt (TEMPLATE_ID_EXPR,
9291 BASELINK_FUNCTIONS (baselink),
9292 template_args);
9293 /* Update the conversion operator type. */
9294 BASELINK_OPTYPE (baselink)
9295 = tsubst (optype, args, complain, in_decl);
9297 if (!object_type)
9298 object_type = current_class_type;
9299 return adjust_result_of_qualified_name_lookup (baselink,
9300 qualifying_scope,
9301 object_type);
9304 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID. DONE is
9305 true if the qualified-id will be a postfix-expression in-and-of
9306 itself; false if more of the postfix-expression follows the
9307 QUALIFIED_ID. ADDRESS_P is true if the qualified-id is the operand
9308 of "&". */
9310 static tree
9311 tsubst_qualified_id (tree qualified_id, tree args,
9312 tsubst_flags_t complain, tree in_decl,
9313 bool done, bool address_p)
9315 tree expr;
9316 tree scope;
9317 tree name;
9318 bool is_template;
9319 tree template_args;
9321 gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
9323 /* Figure out what name to look up. */
9324 name = TREE_OPERAND (qualified_id, 1);
9325 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
9327 is_template = true;
9328 template_args = TREE_OPERAND (name, 1);
9329 if (template_args)
9330 template_args = tsubst_template_args (template_args, args,
9331 complain, in_decl);
9332 name = TREE_OPERAND (name, 0);
9334 else
9336 is_template = false;
9337 template_args = NULL_TREE;
9340 /* Substitute into the qualifying scope. When there are no ARGS, we
9341 are just trying to simplify a non-dependent expression. In that
9342 case the qualifying scope may be dependent, and, in any case,
9343 substituting will not help. */
9344 scope = TREE_OPERAND (qualified_id, 0);
9345 if (args)
9347 scope = tsubst (scope, args, complain, in_decl);
9348 expr = tsubst_copy (name, args, complain, in_decl);
9350 else
9351 expr = name;
9353 if (dependent_type_p (scope))
9354 return build_qualified_name (/*type=*/NULL_TREE,
9355 scope, expr,
9356 QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
9358 if (!BASELINK_P (name) && !DECL_P (expr))
9360 if (TREE_CODE (expr) == BIT_NOT_EXPR)
9361 /* If this were actually a destructor call, it would have been
9362 parsed as such by the parser. */
9363 expr = error_mark_node;
9364 else
9365 expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
9366 if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
9367 ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
9369 if (complain & tf_error)
9371 error ("dependent-name %qE is parsed as a non-type, but "
9372 "instantiation yields a type", qualified_id);
9373 inform ("say %<typename %E%> if a type is meant", qualified_id);
9375 return error_mark_node;
9379 if (DECL_P (expr))
9381 check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
9382 scope);
9383 /* Remember that there was a reference to this entity. */
9384 mark_used (expr);
9387 if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
9389 if (complain & tf_error)
9390 qualified_name_lookup_error (scope,
9391 TREE_OPERAND (qualified_id, 1),
9392 expr);
9393 return error_mark_node;
9396 if (is_template)
9397 expr = lookup_template_function (expr, template_args);
9399 if (expr == error_mark_node && complain & tf_error)
9400 qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
9401 expr);
9402 else if (TYPE_P (scope))
9404 expr = (adjust_result_of_qualified_name_lookup
9405 (expr, scope, current_class_type));
9406 expr = (finish_qualified_id_expr
9407 (scope, expr, done, address_p,
9408 QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
9409 /*template_arg_p=*/false));
9412 /* Expressions do not generally have reference type. */
9413 if (TREE_CODE (expr) != SCOPE_REF
9414 /* However, if we're about to form a pointer-to-member, we just
9415 want the referenced member referenced. */
9416 && TREE_CODE (expr) != OFFSET_REF)
9417 expr = convert_from_reference (expr);
9419 return expr;
9422 /* Like tsubst, but deals with expressions. This function just replaces
9423 template parms; to finish processing the resultant expression, use
9424 tsubst_expr. */
9426 static tree
9427 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9429 enum tree_code code;
9430 tree r;
9432 if (t == NULL_TREE || t == error_mark_node)
9433 return t;
9435 code = TREE_CODE (t);
9437 switch (code)
9439 case PARM_DECL:
9440 r = retrieve_local_specialization (t);
9441 gcc_assert (r != NULL);
9442 if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
9443 r = ARGUMENT_PACK_SELECT_ARG (r);
9444 mark_used (r);
9445 return r;
9447 case CONST_DECL:
9449 tree enum_type;
9450 tree v;
9452 if (DECL_TEMPLATE_PARM_P (t))
9453 return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
9454 /* There is no need to substitute into namespace-scope
9455 enumerators. */
9456 if (DECL_NAMESPACE_SCOPE_P (t))
9457 return t;
9458 /* If ARGS is NULL, then T is known to be non-dependent. */
9459 if (args == NULL_TREE)
9460 return integral_constant_value (t);
9462 /* Unfortunately, we cannot just call lookup_name here.
9463 Consider:
9465 template <int I> int f() {
9466 enum E { a = I };
9467 struct S { void g() { E e = a; } };
9470 When we instantiate f<7>::S::g(), say, lookup_name is not
9471 clever enough to find f<7>::a. */
9472 enum_type
9473 = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
9474 /*entering_scope=*/0);
9476 for (v = TYPE_VALUES (enum_type);
9477 v != NULL_TREE;
9478 v = TREE_CHAIN (v))
9479 if (TREE_PURPOSE (v) == DECL_NAME (t))
9480 return TREE_VALUE (v);
9482 /* We didn't find the name. That should never happen; if
9483 name-lookup found it during preliminary parsing, we
9484 should find it again here during instantiation. */
9485 gcc_unreachable ();
9487 return t;
9489 case FIELD_DECL:
9490 if (DECL_CONTEXT (t))
9492 tree ctx;
9494 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
9495 /*entering_scope=*/1);
9496 if (ctx != DECL_CONTEXT (t))
9498 tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
9499 if (!r)
9501 if (complain & tf_error)
9502 error ("using invalid field %qD", t);
9503 return error_mark_node;
9505 return r;
9509 return t;
9511 case VAR_DECL:
9512 case FUNCTION_DECL:
9513 if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
9514 || local_variable_p (t))
9515 t = tsubst (t, args, complain, in_decl);
9516 mark_used (t);
9517 return t;
9519 case BASELINK:
9520 return tsubst_baselink (t, current_class_type, args, complain, in_decl);
9522 case TEMPLATE_DECL:
9523 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9524 return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
9525 args, complain, in_decl);
9526 else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
9527 return tsubst (t, args, complain, in_decl);
9528 else if (DECL_CLASS_SCOPE_P (t)
9529 && uses_template_parms (DECL_CONTEXT (t)))
9531 /* Template template argument like the following example need
9532 special treatment:
9534 template <template <class> class TT> struct C {};
9535 template <class T> struct D {
9536 template <class U> struct E {};
9537 C<E> c; // #1
9539 D<int> d; // #2
9541 We are processing the template argument `E' in #1 for
9542 the template instantiation #2. Originally, `E' is a
9543 TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT. Now we
9544 have to substitute this with one having context `D<int>'. */
9546 tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
9547 return lookup_field (context, DECL_NAME(t), 0, false);
9549 else
9550 /* Ordinary template template argument. */
9551 return t;
9553 case CAST_EXPR:
9554 case REINTERPRET_CAST_EXPR:
9555 case CONST_CAST_EXPR:
9556 case STATIC_CAST_EXPR:
9557 case DYNAMIC_CAST_EXPR:
9558 case NOP_EXPR:
9559 return build1
9560 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9561 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9563 case SIZEOF_EXPR:
9564 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
9566 /* We only want to compute the number of arguments. */
9567 tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
9568 complain, in_decl);
9569 if (expanded == error_mark_node)
9570 return error_mark_node;
9571 return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
9573 /* Fall through */
9575 case INDIRECT_REF:
9576 case NEGATE_EXPR:
9577 case TRUTH_NOT_EXPR:
9578 case BIT_NOT_EXPR:
9579 case ADDR_EXPR:
9580 case UNARY_PLUS_EXPR: /* Unary + */
9581 case ALIGNOF_EXPR:
9582 case ARROW_EXPR:
9583 case THROW_EXPR:
9584 case TYPEID_EXPR:
9585 case REALPART_EXPR:
9586 case IMAGPART_EXPR:
9587 return build1
9588 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9589 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9591 case COMPONENT_REF:
9593 tree object;
9594 tree name;
9596 object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
9597 name = TREE_OPERAND (t, 1);
9598 if (TREE_CODE (name) == BIT_NOT_EXPR)
9600 name = tsubst_copy (TREE_OPERAND (name, 0), args,
9601 complain, in_decl);
9602 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9604 else if (TREE_CODE (name) == SCOPE_REF
9605 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
9607 tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
9608 complain, in_decl);
9609 name = TREE_OPERAND (name, 1);
9610 name = tsubst_copy (TREE_OPERAND (name, 0), args,
9611 complain, in_decl);
9612 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9613 name = build_qualified_name (/*type=*/NULL_TREE,
9614 base, name,
9615 /*template_p=*/false);
9617 else if (TREE_CODE (name) == BASELINK)
9618 name = tsubst_baselink (name,
9619 non_reference (TREE_TYPE (object)),
9620 args, complain,
9621 in_decl);
9622 else
9623 name = tsubst_copy (name, args, complain, in_decl);
9624 return build_nt (COMPONENT_REF, object, name, NULL_TREE);
9627 case PLUS_EXPR:
9628 case MINUS_EXPR:
9629 case MULT_EXPR:
9630 case TRUNC_DIV_EXPR:
9631 case CEIL_DIV_EXPR:
9632 case FLOOR_DIV_EXPR:
9633 case ROUND_DIV_EXPR:
9634 case EXACT_DIV_EXPR:
9635 case BIT_AND_EXPR:
9636 case BIT_IOR_EXPR:
9637 case BIT_XOR_EXPR:
9638 case TRUNC_MOD_EXPR:
9639 case FLOOR_MOD_EXPR:
9640 case TRUTH_ANDIF_EXPR:
9641 case TRUTH_ORIF_EXPR:
9642 case TRUTH_AND_EXPR:
9643 case TRUTH_OR_EXPR:
9644 case RSHIFT_EXPR:
9645 case LSHIFT_EXPR:
9646 case RROTATE_EXPR:
9647 case LROTATE_EXPR:
9648 case EQ_EXPR:
9649 case NE_EXPR:
9650 case MAX_EXPR:
9651 case MIN_EXPR:
9652 case LE_EXPR:
9653 case GE_EXPR:
9654 case LT_EXPR:
9655 case GT_EXPR:
9656 case COMPOUND_EXPR:
9657 case DOTSTAR_EXPR:
9658 case MEMBER_REF:
9659 case PREDECREMENT_EXPR:
9660 case PREINCREMENT_EXPR:
9661 case POSTDECREMENT_EXPR:
9662 case POSTINCREMENT_EXPR:
9663 return build_nt
9664 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9665 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
9667 case SCOPE_REF:
9668 return build_qualified_name (/*type=*/NULL_TREE,
9669 tsubst_copy (TREE_OPERAND (t, 0),
9670 args, complain, in_decl),
9671 tsubst_copy (TREE_OPERAND (t, 1),
9672 args, complain, in_decl),
9673 QUALIFIED_NAME_IS_TEMPLATE (t));
9675 case ARRAY_REF:
9676 return build_nt
9677 (ARRAY_REF,
9678 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9679 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9680 NULL_TREE, NULL_TREE);
9682 case CALL_EXPR:
9684 int n = VL_EXP_OPERAND_LENGTH (t);
9685 tree result = build_vl_exp (CALL_EXPR, n);
9686 int i;
9687 for (i = 0; i < n; i++)
9688 TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
9689 complain, in_decl);
9690 return result;
9693 case COND_EXPR:
9694 case MODOP_EXPR:
9695 case PSEUDO_DTOR_EXPR:
9697 r = build_nt
9698 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9699 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9700 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
9701 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
9702 return r;
9705 case NEW_EXPR:
9707 r = build_nt
9708 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9709 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9710 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
9711 NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
9712 return r;
9715 case DELETE_EXPR:
9717 r = build_nt
9718 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9719 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
9720 DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
9721 DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
9722 return r;
9725 case TEMPLATE_ID_EXPR:
9727 /* Substituted template arguments */
9728 tree fn = TREE_OPERAND (t, 0);
9729 tree targs = TREE_OPERAND (t, 1);
9731 fn = tsubst_copy (fn, args, complain, in_decl);
9732 if (targs)
9733 targs = tsubst_template_args (targs, args, complain, in_decl);
9735 return lookup_template_function (fn, targs);
9738 case TREE_LIST:
9740 tree purpose, value, chain;
9742 if (t == void_list_node)
9743 return t;
9745 purpose = TREE_PURPOSE (t);
9746 if (purpose)
9747 purpose = tsubst_copy (purpose, args, complain, in_decl);
9748 value = TREE_VALUE (t);
9749 if (value)
9750 value = tsubst_copy (value, args, complain, in_decl);
9751 chain = TREE_CHAIN (t);
9752 if (chain && chain != void_type_node)
9753 chain = tsubst_copy (chain, args, complain, in_decl);
9754 if (purpose == TREE_PURPOSE (t)
9755 && value == TREE_VALUE (t)
9756 && chain == TREE_CHAIN (t))
9757 return t;
9758 return tree_cons (purpose, value, chain);
9761 case RECORD_TYPE:
9762 case UNION_TYPE:
9763 case ENUMERAL_TYPE:
9764 case INTEGER_TYPE:
9765 case TEMPLATE_TYPE_PARM:
9766 case TEMPLATE_TEMPLATE_PARM:
9767 case BOUND_TEMPLATE_TEMPLATE_PARM:
9768 case TEMPLATE_PARM_INDEX:
9769 case POINTER_TYPE:
9770 case REFERENCE_TYPE:
9771 case OFFSET_TYPE:
9772 case FUNCTION_TYPE:
9773 case METHOD_TYPE:
9774 case ARRAY_TYPE:
9775 case TYPENAME_TYPE:
9776 case UNBOUND_CLASS_TEMPLATE:
9777 case TYPEOF_TYPE:
9778 case DECLTYPE_TYPE:
9779 case TYPE_DECL:
9780 return tsubst (t, args, complain, in_decl);
9782 case IDENTIFIER_NODE:
9783 if (IDENTIFIER_TYPENAME_P (t))
9785 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9786 return mangle_conv_op_name_for_type (new_type);
9788 else
9789 return t;
9791 case CONSTRUCTOR:
9792 /* This is handled by tsubst_copy_and_build. */
9793 gcc_unreachable ();
9795 case VA_ARG_EXPR:
9796 return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
9797 in_decl),
9798 tsubst (TREE_TYPE (t), args, complain, in_decl));
9800 case CLEANUP_POINT_EXPR:
9801 /* We shouldn't have built any of these during initial template
9802 generation. Instead, they should be built during instantiation
9803 in response to the saved STMT_IS_FULL_EXPR_P setting. */
9804 gcc_unreachable ();
9806 case OFFSET_REF:
9807 mark_used (TREE_OPERAND (t, 1));
9808 return t;
9810 case EXPR_PACK_EXPANSION:
9811 error ("invalid use of pack expansion expression");
9812 return error_mark_node;
9814 case NONTYPE_ARGUMENT_PACK:
9815 error ("use %<...%> to expand argument pack");
9816 return error_mark_node;
9818 default:
9819 return t;
9823 /* Like tsubst_copy, but specifically for OpenMP clauses. */
9825 static tree
9826 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
9827 tree in_decl)
9829 tree new_clauses = NULL, nc, oc;
9831 for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
9833 nc = copy_node (oc);
9834 OMP_CLAUSE_CHAIN (nc) = new_clauses;
9835 new_clauses = nc;
9837 switch (OMP_CLAUSE_CODE (nc))
9839 case OMP_CLAUSE_PRIVATE:
9840 case OMP_CLAUSE_SHARED:
9841 case OMP_CLAUSE_FIRSTPRIVATE:
9842 case OMP_CLAUSE_LASTPRIVATE:
9843 case OMP_CLAUSE_REDUCTION:
9844 case OMP_CLAUSE_COPYIN:
9845 case OMP_CLAUSE_COPYPRIVATE:
9846 case OMP_CLAUSE_IF:
9847 case OMP_CLAUSE_NUM_THREADS:
9848 case OMP_CLAUSE_SCHEDULE:
9849 OMP_CLAUSE_OPERAND (nc, 0)
9850 = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
9851 in_decl, /*integral_constant_expression_p=*/false);
9852 break;
9853 case OMP_CLAUSE_NOWAIT:
9854 case OMP_CLAUSE_ORDERED:
9855 case OMP_CLAUSE_DEFAULT:
9856 break;
9857 default:
9858 gcc_unreachable ();
9862 return finish_omp_clauses (nreverse (new_clauses));
9865 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes. */
9867 static tree
9868 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
9869 tree in_decl)
9871 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
9873 tree purpose, value, chain;
9875 if (t == NULL)
9876 return t;
9878 if (TREE_CODE (t) != TREE_LIST)
9879 return tsubst_copy_and_build (t, args, complain, in_decl,
9880 /*function_p=*/false,
9881 /*integral_constant_expression_p=*/false);
9883 if (t == void_list_node)
9884 return t;
9886 purpose = TREE_PURPOSE (t);
9887 if (purpose)
9888 purpose = RECUR (purpose);
9889 value = TREE_VALUE (t);
9890 if (value)
9891 value = RECUR (value);
9892 chain = TREE_CHAIN (t);
9893 if (chain && chain != void_type_node)
9894 chain = RECUR (chain);
9895 return tree_cons (purpose, value, chain);
9896 #undef RECUR
9899 /* Like tsubst_copy for expressions, etc. but also does semantic
9900 processing. */
9902 static tree
9903 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
9904 bool integral_constant_expression_p)
9906 #define RECUR(NODE) \
9907 tsubst_expr ((NODE), args, complain, in_decl, \
9908 integral_constant_expression_p)
9910 tree stmt, tmp;
9912 if (t == NULL_TREE || t == error_mark_node)
9913 return t;
9915 if (EXPR_HAS_LOCATION (t))
9916 input_location = EXPR_LOCATION (t);
9917 if (STATEMENT_CODE_P (TREE_CODE (t)))
9918 current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
9920 switch (TREE_CODE (t))
9922 case STATEMENT_LIST:
9924 tree_stmt_iterator i;
9925 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
9926 RECUR (tsi_stmt (i));
9927 break;
9930 case CTOR_INITIALIZER:
9931 finish_mem_initializers (tsubst_initializer_list
9932 (TREE_OPERAND (t, 0), args));
9933 break;
9935 case RETURN_EXPR:
9936 finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
9937 break;
9939 case EXPR_STMT:
9940 tmp = RECUR (EXPR_STMT_EXPR (t));
9941 if (EXPR_STMT_STMT_EXPR_RESULT (t))
9942 finish_stmt_expr_expr (tmp, cur_stmt_expr);
9943 else
9944 finish_expr_stmt (tmp);
9945 break;
9947 case USING_STMT:
9948 do_using_directive (RECUR (USING_STMT_NAMESPACE (t)));
9949 break;
9951 case DECL_EXPR:
9953 tree decl;
9954 tree init;
9956 decl = DECL_EXPR_DECL (t);
9957 if (TREE_CODE (decl) == LABEL_DECL)
9958 finish_label_decl (DECL_NAME (decl));
9959 else if (TREE_CODE (decl) == USING_DECL)
9961 tree scope = USING_DECL_SCOPE (decl);
9962 tree name = DECL_NAME (decl);
9963 tree decl;
9965 scope = RECUR (scope);
9966 decl = lookup_qualified_name (scope, name,
9967 /*is_type_p=*/false,
9968 /*complain=*/false);
9969 if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
9970 qualified_name_lookup_error (scope, name, decl);
9971 else
9972 do_local_using_decl (decl, scope, name);
9974 else
9976 init = DECL_INITIAL (decl);
9977 decl = tsubst (decl, args, complain, in_decl);
9978 if (decl != error_mark_node)
9980 /* By marking the declaration as instantiated, we avoid
9981 trying to instantiate it. Since instantiate_decl can't
9982 handle local variables, and since we've already done
9983 all that needs to be done, that's the right thing to
9984 do. */
9985 if (TREE_CODE (decl) == VAR_DECL)
9986 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
9987 if (TREE_CODE (decl) == VAR_DECL
9988 && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
9989 /* Anonymous aggregates are a special case. */
9990 finish_anon_union (decl);
9991 else
9993 maybe_push_decl (decl);
9994 if (TREE_CODE (decl) == VAR_DECL
9995 && DECL_PRETTY_FUNCTION_P (decl))
9997 /* For __PRETTY_FUNCTION__ we have to adjust the
9998 initializer. */
9999 const char *const name
10000 = cxx_printable_name (current_function_decl, 2);
10001 init = cp_fname_init (name, &TREE_TYPE (decl));
10003 else
10005 tree t = RECUR (init);
10007 if (init && !t)
10008 /* If we had an initializer but it
10009 instantiated to nothing,
10010 value-initialize the object. This will
10011 only occur when the initializer was a
10012 pack expansion where the parameter packs
10013 used in that expansion were of length
10014 zero. */
10015 init = build_default_init (TREE_TYPE (decl),
10016 NULL_TREE);
10017 else
10018 init = t;
10021 finish_decl (decl, init, NULL_TREE);
10026 /* A DECL_EXPR can also be used as an expression, in the condition
10027 clause of an if/for/while construct. */
10028 return decl;
10031 case FOR_STMT:
10032 stmt = begin_for_stmt ();
10033 RECUR (FOR_INIT_STMT (t));
10034 finish_for_init_stmt (stmt);
10035 tmp = RECUR (FOR_COND (t));
10036 finish_for_cond (tmp, stmt);
10037 tmp = RECUR (FOR_EXPR (t));
10038 finish_for_expr (tmp, stmt);
10039 RECUR (FOR_BODY (t));
10040 finish_for_stmt (stmt);
10041 break;
10043 case WHILE_STMT:
10044 stmt = begin_while_stmt ();
10045 tmp = RECUR (WHILE_COND (t));
10046 finish_while_stmt_cond (tmp, stmt);
10047 RECUR (WHILE_BODY (t));
10048 finish_while_stmt (stmt);
10049 break;
10051 case DO_STMT:
10052 stmt = begin_do_stmt ();
10053 RECUR (DO_BODY (t));
10054 finish_do_body (stmt);
10055 tmp = RECUR (DO_COND (t));
10056 finish_do_stmt (tmp, stmt);
10057 break;
10059 case IF_STMT:
10060 stmt = begin_if_stmt ();
10061 tmp = RECUR (IF_COND (t));
10062 finish_if_stmt_cond (tmp, stmt);
10063 RECUR (THEN_CLAUSE (t));
10064 finish_then_clause (stmt);
10066 if (ELSE_CLAUSE (t))
10068 begin_else_clause (stmt);
10069 RECUR (ELSE_CLAUSE (t));
10070 finish_else_clause (stmt);
10073 finish_if_stmt (stmt);
10074 break;
10076 case BIND_EXPR:
10077 if (BIND_EXPR_BODY_BLOCK (t))
10078 stmt = begin_function_body ();
10079 else
10080 stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
10081 ? BCS_TRY_BLOCK : 0);
10083 RECUR (BIND_EXPR_BODY (t));
10085 if (BIND_EXPR_BODY_BLOCK (t))
10086 finish_function_body (stmt);
10087 else
10088 finish_compound_stmt (stmt);
10089 break;
10091 case BREAK_STMT:
10092 finish_break_stmt ();
10093 break;
10095 case CONTINUE_STMT:
10096 finish_continue_stmt ();
10097 break;
10099 case SWITCH_STMT:
10100 stmt = begin_switch_stmt ();
10101 tmp = RECUR (SWITCH_STMT_COND (t));
10102 finish_switch_cond (tmp, stmt);
10103 RECUR (SWITCH_STMT_BODY (t));
10104 finish_switch_stmt (stmt);
10105 break;
10107 case CASE_LABEL_EXPR:
10108 finish_case_label (RECUR (CASE_LOW (t)),
10109 RECUR (CASE_HIGH (t)));
10110 break;
10112 case LABEL_EXPR:
10113 finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
10114 break;
10116 case GOTO_EXPR:
10117 tmp = GOTO_DESTINATION (t);
10118 if (TREE_CODE (tmp) != LABEL_DECL)
10119 /* Computed goto's must be tsubst'd into. On the other hand,
10120 non-computed gotos must not be; the identifier in question
10121 will have no binding. */
10122 tmp = RECUR (tmp);
10123 else
10124 tmp = DECL_NAME (tmp);
10125 finish_goto_stmt (tmp);
10126 break;
10128 case ASM_EXPR:
10129 tmp = finish_asm_stmt
10130 (ASM_VOLATILE_P (t),
10131 RECUR (ASM_STRING (t)),
10132 tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
10133 tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
10134 tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl));
10136 tree asm_expr = tmp;
10137 if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
10138 asm_expr = TREE_OPERAND (asm_expr, 0);
10139 ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
10141 break;
10143 case TRY_BLOCK:
10144 if (CLEANUP_P (t))
10146 stmt = begin_try_block ();
10147 RECUR (TRY_STMTS (t));
10148 finish_cleanup_try_block (stmt);
10149 finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
10151 else
10153 tree compound_stmt = NULL_TREE;
10155 if (FN_TRY_BLOCK_P (t))
10156 stmt = begin_function_try_block (&compound_stmt);
10157 else
10158 stmt = begin_try_block ();
10160 RECUR (TRY_STMTS (t));
10162 if (FN_TRY_BLOCK_P (t))
10163 finish_function_try_block (stmt);
10164 else
10165 finish_try_block (stmt);
10167 RECUR (TRY_HANDLERS (t));
10168 if (FN_TRY_BLOCK_P (t))
10169 finish_function_handler_sequence (stmt, compound_stmt);
10170 else
10171 finish_handler_sequence (stmt);
10173 break;
10175 case HANDLER:
10177 tree decl = HANDLER_PARMS (t);
10179 if (decl)
10181 decl = tsubst (decl, args, complain, in_decl);
10182 /* Prevent instantiate_decl from trying to instantiate
10183 this variable. We've already done all that needs to be
10184 done. */
10185 if (decl != error_mark_node)
10186 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10188 stmt = begin_handler ();
10189 finish_handler_parms (decl, stmt);
10190 RECUR (HANDLER_BODY (t));
10191 finish_handler (stmt);
10193 break;
10195 case TAG_DEFN:
10196 tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
10197 break;
10199 case STATIC_ASSERT:
10201 tree condition =
10202 tsubst_expr (STATIC_ASSERT_CONDITION (t),
10203 args,
10204 complain, in_decl,
10205 /*integral_constant_expression_p=*/true);
10206 finish_static_assert (condition,
10207 STATIC_ASSERT_MESSAGE (t),
10208 STATIC_ASSERT_SOURCE_LOCATION (t),
10209 /*member_p=*/false);
10211 break;
10213 case OMP_PARALLEL:
10214 tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
10215 args, complain, in_decl);
10216 stmt = begin_omp_parallel ();
10217 RECUR (OMP_PARALLEL_BODY (t));
10218 OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
10219 = OMP_PARALLEL_COMBINED (t);
10220 break;
10222 case OMP_FOR:
10224 tree clauses, decl, init, cond, incr, body, pre_body;
10226 clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
10227 args, complain, in_decl);
10228 init = OMP_FOR_INIT (t);
10229 gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
10230 decl = RECUR (TREE_OPERAND (init, 0));
10231 init = RECUR (TREE_OPERAND (init, 1));
10232 cond = RECUR (OMP_FOR_COND (t));
10233 incr = RECUR (OMP_FOR_INCR (t));
10235 stmt = begin_omp_structured_block ();
10237 pre_body = push_stmt_list ();
10238 RECUR (OMP_FOR_PRE_BODY (t));
10239 pre_body = pop_stmt_list (pre_body);
10241 body = push_stmt_list ();
10242 RECUR (OMP_FOR_BODY (t));
10243 body = pop_stmt_list (body);
10245 t = finish_omp_for (EXPR_LOCATION (t), decl, init, cond, incr, body,
10246 pre_body);
10247 if (t)
10248 OMP_FOR_CLAUSES (t) = clauses;
10250 add_stmt (finish_omp_structured_block (stmt));
10252 break;
10254 case OMP_SECTIONS:
10255 case OMP_SINGLE:
10256 tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
10257 stmt = push_stmt_list ();
10258 RECUR (OMP_BODY (t));
10259 stmt = pop_stmt_list (stmt);
10261 t = copy_node (t);
10262 OMP_BODY (t) = stmt;
10263 OMP_CLAUSES (t) = tmp;
10264 add_stmt (t);
10265 break;
10267 case OMP_SECTION:
10268 case OMP_CRITICAL:
10269 case OMP_MASTER:
10270 case OMP_ORDERED:
10271 stmt = push_stmt_list ();
10272 RECUR (OMP_BODY (t));
10273 stmt = pop_stmt_list (stmt);
10275 t = copy_node (t);
10276 OMP_BODY (t) = stmt;
10277 add_stmt (t);
10278 break;
10280 case OMP_ATOMIC:
10281 if (OMP_ATOMIC_DEPENDENT_P (t))
10283 tree op1 = TREE_OPERAND (t, 1);
10284 tree lhs = RECUR (TREE_OPERAND (op1, 0));
10285 tree rhs = RECUR (TREE_OPERAND (op1, 1));
10286 finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
10288 break;
10290 case EXPR_PACK_EXPANSION:
10291 error ("invalid use of pack expansion expression");
10292 return error_mark_node;
10294 case NONTYPE_ARGUMENT_PACK:
10295 error ("use %<...%> to expand argument pack");
10296 return error_mark_node;
10298 default:
10299 gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
10301 return tsubst_copy_and_build (t, args, complain, in_decl,
10302 /*function_p=*/false,
10303 integral_constant_expression_p);
10306 return NULL_TREE;
10307 #undef RECUR
10310 /* T is a postfix-expression that is not being used in a function
10311 call. Return the substituted version of T. */
10313 static tree
10314 tsubst_non_call_postfix_expression (tree t, tree args,
10315 tsubst_flags_t complain,
10316 tree in_decl)
10318 if (TREE_CODE (t) == SCOPE_REF)
10319 t = tsubst_qualified_id (t, args, complain, in_decl,
10320 /*done=*/false, /*address_p=*/false);
10321 else
10322 t = tsubst_copy_and_build (t, args, complain, in_decl,
10323 /*function_p=*/false,
10324 /*integral_constant_expression_p=*/false);
10326 return t;
10329 /* Like tsubst but deals with expressions and performs semantic
10330 analysis. FUNCTION_P is true if T is the "F" in "F (ARGS)". */
10332 tree
10333 tsubst_copy_and_build (tree t,
10334 tree args,
10335 tsubst_flags_t complain,
10336 tree in_decl,
10337 bool function_p,
10338 bool integral_constant_expression_p)
10340 #define RECUR(NODE) \
10341 tsubst_copy_and_build (NODE, args, complain, in_decl, \
10342 /*function_p=*/false, \
10343 integral_constant_expression_p)
10345 tree op1;
10347 if (t == NULL_TREE || t == error_mark_node)
10348 return t;
10350 switch (TREE_CODE (t))
10352 case USING_DECL:
10353 t = DECL_NAME (t);
10354 /* Fall through. */
10355 case IDENTIFIER_NODE:
10357 tree decl;
10358 cp_id_kind idk;
10359 bool non_integral_constant_expression_p;
10360 const char *error_msg;
10362 if (IDENTIFIER_TYPENAME_P (t))
10364 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10365 t = mangle_conv_op_name_for_type (new_type);
10368 /* Look up the name. */
10369 decl = lookup_name (t);
10371 /* By convention, expressions use ERROR_MARK_NODE to indicate
10372 failure, not NULL_TREE. */
10373 if (decl == NULL_TREE)
10374 decl = error_mark_node;
10376 decl = finish_id_expression (t, decl, NULL_TREE,
10377 &idk,
10378 integral_constant_expression_p,
10379 /*allow_non_integral_constant_expression_p=*/false,
10380 &non_integral_constant_expression_p,
10381 /*template_p=*/false,
10382 /*done=*/true,
10383 /*address_p=*/false,
10384 /*template_arg_p=*/false,
10385 &error_msg);
10386 if (error_msg)
10387 error (error_msg);
10388 if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
10389 decl = unqualified_name_lookup_error (decl);
10390 return decl;
10393 case TEMPLATE_ID_EXPR:
10395 tree object;
10396 tree template = RECUR (TREE_OPERAND (t, 0));
10397 tree targs = TREE_OPERAND (t, 1);
10399 if (targs)
10400 targs = tsubst_template_args (targs, args, complain, in_decl);
10402 if (TREE_CODE (template) == COMPONENT_REF)
10404 object = TREE_OPERAND (template, 0);
10405 template = TREE_OPERAND (template, 1);
10407 else
10408 object = NULL_TREE;
10409 template = lookup_template_function (template, targs);
10411 if (object)
10412 return build3 (COMPONENT_REF, TREE_TYPE (template),
10413 object, template, NULL_TREE);
10414 else
10415 return baselink_for_fns (template);
10418 case INDIRECT_REF:
10420 tree r = RECUR (TREE_OPERAND (t, 0));
10422 if (REFERENCE_REF_P (t))
10424 /* A type conversion to reference type will be enclosed in
10425 such an indirect ref, but the substitution of the cast
10426 will have also added such an indirect ref. */
10427 if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
10428 r = convert_from_reference (r);
10430 else
10431 r = build_x_indirect_ref (r, "unary *");
10432 return r;
10435 case NOP_EXPR:
10436 return build_nop
10437 (tsubst (TREE_TYPE (t), args, complain, in_decl),
10438 RECUR (TREE_OPERAND (t, 0)));
10440 case CAST_EXPR:
10441 case REINTERPRET_CAST_EXPR:
10442 case CONST_CAST_EXPR:
10443 case DYNAMIC_CAST_EXPR:
10444 case STATIC_CAST_EXPR:
10446 tree type;
10447 tree op;
10449 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10450 if (integral_constant_expression_p
10451 && !cast_valid_in_integral_constant_expression_p (type))
10453 error ("a cast to a type other than an integral or "
10454 "enumeration type cannot appear in a constant-expression");
10455 return error_mark_node;
10458 op = RECUR (TREE_OPERAND (t, 0));
10460 switch (TREE_CODE (t))
10462 case CAST_EXPR:
10463 return build_functional_cast (type, op);
10464 case REINTERPRET_CAST_EXPR:
10465 return build_reinterpret_cast (type, op);
10466 case CONST_CAST_EXPR:
10467 return build_const_cast (type, op);
10468 case DYNAMIC_CAST_EXPR:
10469 return build_dynamic_cast (type, op);
10470 case STATIC_CAST_EXPR:
10471 return build_static_cast (type, op);
10472 default:
10473 gcc_unreachable ();
10477 case POSTDECREMENT_EXPR:
10478 case POSTINCREMENT_EXPR:
10479 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10480 args, complain, in_decl);
10481 return build_x_unary_op (TREE_CODE (t), op1);
10483 case PREDECREMENT_EXPR:
10484 case PREINCREMENT_EXPR:
10485 case NEGATE_EXPR:
10486 case BIT_NOT_EXPR:
10487 case ABS_EXPR:
10488 case TRUTH_NOT_EXPR:
10489 case UNARY_PLUS_EXPR: /* Unary + */
10490 case REALPART_EXPR:
10491 case IMAGPART_EXPR:
10492 return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
10494 case ADDR_EXPR:
10495 op1 = TREE_OPERAND (t, 0);
10496 if (TREE_CODE (op1) == SCOPE_REF)
10497 op1 = tsubst_qualified_id (op1, args, complain, in_decl,
10498 /*done=*/true, /*address_p=*/true);
10499 else
10500 op1 = tsubst_non_call_postfix_expression (op1, args, complain,
10501 in_decl);
10502 if (TREE_CODE (op1) == LABEL_DECL)
10503 return finish_label_address_expr (DECL_NAME (op1));
10504 return build_x_unary_op (ADDR_EXPR, op1);
10506 case PLUS_EXPR:
10507 case MINUS_EXPR:
10508 case MULT_EXPR:
10509 case TRUNC_DIV_EXPR:
10510 case CEIL_DIV_EXPR:
10511 case FLOOR_DIV_EXPR:
10512 case ROUND_DIV_EXPR:
10513 case EXACT_DIV_EXPR:
10514 case BIT_AND_EXPR:
10515 case BIT_IOR_EXPR:
10516 case BIT_XOR_EXPR:
10517 case TRUNC_MOD_EXPR:
10518 case FLOOR_MOD_EXPR:
10519 case TRUTH_ANDIF_EXPR:
10520 case TRUTH_ORIF_EXPR:
10521 case TRUTH_AND_EXPR:
10522 case TRUTH_OR_EXPR:
10523 case RSHIFT_EXPR:
10524 case LSHIFT_EXPR:
10525 case RROTATE_EXPR:
10526 case LROTATE_EXPR:
10527 case EQ_EXPR:
10528 case NE_EXPR:
10529 case MAX_EXPR:
10530 case MIN_EXPR:
10531 case LE_EXPR:
10532 case GE_EXPR:
10533 case LT_EXPR:
10534 case GT_EXPR:
10535 case MEMBER_REF:
10536 case DOTSTAR_EXPR:
10537 return build_x_binary_op
10538 (TREE_CODE (t),
10539 RECUR (TREE_OPERAND (t, 0)),
10540 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
10541 ? ERROR_MARK
10542 : TREE_CODE (TREE_OPERAND (t, 0))),
10543 RECUR (TREE_OPERAND (t, 1)),
10544 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
10545 ? ERROR_MARK
10546 : TREE_CODE (TREE_OPERAND (t, 1))),
10547 /*overloaded_p=*/NULL);
10549 case SCOPE_REF:
10550 return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
10551 /*address_p=*/false);
10552 case ARRAY_REF:
10553 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10554 args, complain, in_decl);
10555 return build_x_binary_op (ARRAY_REF, op1,
10556 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
10557 ? ERROR_MARK
10558 : TREE_CODE (TREE_OPERAND (t, 0))),
10559 RECUR (TREE_OPERAND (t, 1)),
10560 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
10561 ? ERROR_MARK
10562 : TREE_CODE (TREE_OPERAND (t, 1))),
10563 /*overloaded_p=*/NULL);
10565 case SIZEOF_EXPR:
10566 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
10568 /* We only want to compute the number of arguments. */
10569 tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
10570 complain, in_decl);
10571 if (expanded == error_mark_node)
10572 return error_mark_node;
10573 return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
10575 /* Fall through */
10577 case ALIGNOF_EXPR:
10578 op1 = TREE_OPERAND (t, 0);
10579 if (!args)
10581 /* When there are no ARGS, we are trying to evaluate a
10582 non-dependent expression from the parser. Trying to do
10583 the substitutions may not work. */
10584 if (!TYPE_P (op1))
10585 op1 = TREE_TYPE (op1);
10587 else
10589 ++skip_evaluation;
10590 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
10591 /*function_p=*/false,
10592 /*integral_constant_expression_p=*/false);
10593 --skip_evaluation;
10595 if (TYPE_P (op1))
10596 return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), true);
10597 else
10598 return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t));
10600 case MODOP_EXPR:
10602 tree r = build_x_modify_expr
10603 (RECUR (TREE_OPERAND (t, 0)),
10604 TREE_CODE (TREE_OPERAND (t, 1)),
10605 RECUR (TREE_OPERAND (t, 2)));
10606 /* TREE_NO_WARNING must be set if either the expression was
10607 parenthesized or it uses an operator such as >>= rather
10608 than plain assignment. In the former case, it was already
10609 set and must be copied. In the latter case,
10610 build_x_modify_expr sets it and it must not be reset
10611 here. */
10612 if (TREE_NO_WARNING (t))
10613 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
10614 return r;
10617 case ARROW_EXPR:
10618 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10619 args, complain, in_decl);
10620 /* Remember that there was a reference to this entity. */
10621 if (DECL_P (op1))
10622 mark_used (op1);
10623 return build_x_arrow (op1);
10625 case NEW_EXPR:
10627 tree init = RECUR (TREE_OPERAND (t, 3));
10629 if (TREE_OPERAND (t, 3) && !init)
10630 /* If there was an initializer in the the original tree, but
10631 it instantiated to an empty list, then we should pass on
10632 VOID_ZERO_NODE to tell build_new that it was an empty
10633 initializer () rather than no initializer. This can only
10634 happen when the initializer is a pack expansion whose
10635 parameter packs are of length zero. */
10636 init = void_zero_node;
10638 return build_new
10639 (RECUR (TREE_OPERAND (t, 0)),
10640 RECUR (TREE_OPERAND (t, 1)),
10641 RECUR (TREE_OPERAND (t, 2)),
10642 init,
10643 NEW_EXPR_USE_GLOBAL (t));
10646 case DELETE_EXPR:
10647 return delete_sanity
10648 (RECUR (TREE_OPERAND (t, 0)),
10649 RECUR (TREE_OPERAND (t, 1)),
10650 DELETE_EXPR_USE_VEC (t),
10651 DELETE_EXPR_USE_GLOBAL (t));
10653 case COMPOUND_EXPR:
10654 return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
10655 RECUR (TREE_OPERAND (t, 1)));
10657 case CALL_EXPR:
10659 tree function;
10660 tree call_args;
10661 bool qualified_p;
10662 bool koenig_p;
10664 function = CALL_EXPR_FN (t);
10665 /* When we parsed the expression, we determined whether or
10666 not Koenig lookup should be performed. */
10667 koenig_p = KOENIG_LOOKUP_P (t);
10668 if (TREE_CODE (function) == SCOPE_REF)
10670 qualified_p = true;
10671 function = tsubst_qualified_id (function, args, complain, in_decl,
10672 /*done=*/false,
10673 /*address_p=*/false);
10675 else
10677 if (TREE_CODE (function) == COMPONENT_REF)
10679 tree op = TREE_OPERAND (function, 1);
10681 qualified_p = (TREE_CODE (op) == SCOPE_REF
10682 || (BASELINK_P (op)
10683 && BASELINK_QUALIFIED_P (op)));
10685 else
10686 qualified_p = false;
10688 function = tsubst_copy_and_build (function, args, complain,
10689 in_decl,
10690 !qualified_p,
10691 integral_constant_expression_p);
10693 if (BASELINK_P (function))
10694 qualified_p = true;
10697 /* FIXME: Rewrite this so as not to construct an arglist. */
10698 call_args = RECUR (CALL_EXPR_ARGS (t));
10700 /* We do not perform argument-dependent lookup if normal
10701 lookup finds a non-function, in accordance with the
10702 expected resolution of DR 218. */
10703 if (koenig_p
10704 && ((is_overloaded_fn (function)
10705 /* If lookup found a member function, the Koenig lookup is
10706 not appropriate, even if an unqualified-name was used
10707 to denote the function. */
10708 && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
10709 || TREE_CODE (function) == IDENTIFIER_NODE))
10710 function = perform_koenig_lookup (function, call_args);
10712 if (TREE_CODE (function) == IDENTIFIER_NODE)
10714 unqualified_name_lookup_error (function);
10715 return error_mark_node;
10718 /* Remember that there was a reference to this entity. */
10719 if (DECL_P (function))
10720 mark_used (function);
10722 if (TREE_CODE (function) == OFFSET_REF)
10723 return build_offset_ref_call_from_tree (function, call_args);
10724 if (TREE_CODE (function) == COMPONENT_REF)
10726 if (!BASELINK_P (TREE_OPERAND (function, 1)))
10727 return finish_call_expr (function, call_args,
10728 /*disallow_virtual=*/false,
10729 /*koenig_p=*/false);
10730 else
10731 return (build_new_method_call
10732 (TREE_OPERAND (function, 0),
10733 TREE_OPERAND (function, 1),
10734 call_args, NULL_TREE,
10735 qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
10736 /*fn_p=*/NULL));
10738 return finish_call_expr (function, call_args,
10739 /*disallow_virtual=*/qualified_p,
10740 koenig_p);
10743 case COND_EXPR:
10744 return build_x_conditional_expr
10745 (RECUR (TREE_OPERAND (t, 0)),
10746 RECUR (TREE_OPERAND (t, 1)),
10747 RECUR (TREE_OPERAND (t, 2)));
10749 case PSEUDO_DTOR_EXPR:
10750 return finish_pseudo_destructor_expr
10751 (RECUR (TREE_OPERAND (t, 0)),
10752 RECUR (TREE_OPERAND (t, 1)),
10753 RECUR (TREE_OPERAND (t, 2)));
10755 case TREE_LIST:
10757 tree purpose, value, chain;
10759 if (t == void_list_node)
10760 return t;
10762 if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
10763 || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
10765 /* We have pack expansions, so expand those and
10766 create a new list out of it. */
10767 tree purposevec = NULL_TREE;
10768 tree valuevec = NULL_TREE;
10769 tree chain;
10770 int i, len = -1;
10772 /* Expand the argument expressions. */
10773 if (TREE_PURPOSE (t))
10774 purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
10775 complain, in_decl);
10776 if (TREE_VALUE (t))
10777 valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
10778 complain, in_decl);
10780 /* Build the rest of the list. */
10781 chain = TREE_CHAIN (t);
10782 if (chain && chain != void_type_node)
10783 chain = RECUR (chain);
10785 /* Determine the number of arguments. */
10786 if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
10788 len = TREE_VEC_LENGTH (purposevec);
10789 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
10791 else if (TREE_CODE (valuevec) == TREE_VEC)
10792 len = TREE_VEC_LENGTH (valuevec);
10793 else
10795 /* Since we only performed a partial substitution into
10796 the argument pack, we only return a single list
10797 node. */
10798 if (purposevec == TREE_PURPOSE (t)
10799 && valuevec == TREE_VALUE (t)
10800 && chain == TREE_CHAIN (t))
10801 return t;
10803 return tree_cons (purposevec, valuevec, chain);
10806 /* Convert the argument vectors into a TREE_LIST */
10807 i = len;
10808 while (i > 0)
10810 /* Grab the Ith values. */
10811 i--;
10812 purpose = purposevec ? TREE_VEC_ELT (purposevec, i)
10813 : NULL_TREE;
10814 value
10815 = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i))
10816 : NULL_TREE;
10818 /* Build the list (backwards). */
10819 chain = tree_cons (purpose, value, chain);
10822 return chain;
10825 purpose = TREE_PURPOSE (t);
10826 if (purpose)
10827 purpose = RECUR (purpose);
10828 value = TREE_VALUE (t);
10829 if (value)
10830 value = RECUR (value);
10831 chain = TREE_CHAIN (t);
10832 if (chain && chain != void_type_node)
10833 chain = RECUR (chain);
10834 if (purpose == TREE_PURPOSE (t)
10835 && value == TREE_VALUE (t)
10836 && chain == TREE_CHAIN (t))
10837 return t;
10838 return tree_cons (purpose, value, chain);
10841 case COMPONENT_REF:
10843 tree object;
10844 tree object_type;
10845 tree member;
10847 object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10848 args, complain, in_decl);
10849 /* Remember that there was a reference to this entity. */
10850 if (DECL_P (object))
10851 mark_used (object);
10852 object_type = TREE_TYPE (object);
10854 member = TREE_OPERAND (t, 1);
10855 if (BASELINK_P (member))
10856 member = tsubst_baselink (member,
10857 non_reference (TREE_TYPE (object)),
10858 args, complain, in_decl);
10859 else
10860 member = tsubst_copy (member, args, complain, in_decl);
10861 if (member == error_mark_node)
10862 return error_mark_node;
10864 if (object_type && !CLASS_TYPE_P (object_type))
10866 if (TREE_CODE (member) == BIT_NOT_EXPR)
10867 return finish_pseudo_destructor_expr (object,
10868 NULL_TREE,
10869 object_type);
10870 else if (TREE_CODE (member) == SCOPE_REF
10871 && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
10872 return finish_pseudo_destructor_expr (object,
10873 object,
10874 object_type);
10876 else if (TREE_CODE (member) == SCOPE_REF
10877 && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
10879 tree tmpl;
10880 tree args;
10882 /* Lookup the template functions now that we know what the
10883 scope is. */
10884 tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
10885 args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
10886 member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
10887 /*is_type_p=*/false,
10888 /*complain=*/false);
10889 if (BASELINK_P (member))
10891 BASELINK_FUNCTIONS (member)
10892 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
10893 args);
10894 member = (adjust_result_of_qualified_name_lookup
10895 (member, BINFO_TYPE (BASELINK_BINFO (member)),
10896 object_type));
10898 else
10900 qualified_name_lookup_error (object_type, tmpl, member);
10901 return error_mark_node;
10904 else if (TREE_CODE (member) == SCOPE_REF
10905 && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
10906 && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
10908 if (complain & tf_error)
10910 if (TYPE_P (TREE_OPERAND (member, 0)))
10911 error ("%qT is not a class or namespace",
10912 TREE_OPERAND (member, 0));
10913 else
10914 error ("%qD is not a class or namespace",
10915 TREE_OPERAND (member, 0));
10917 return error_mark_node;
10919 else if (TREE_CODE (member) == FIELD_DECL)
10920 return finish_non_static_data_member (member, object, NULL_TREE);
10922 return finish_class_member_access_expr (object, member,
10923 /*template_p=*/false);
10926 case THROW_EXPR:
10927 return build_throw
10928 (RECUR (TREE_OPERAND (t, 0)));
10930 case CONSTRUCTOR:
10932 VEC(constructor_elt,gc) *n;
10933 constructor_elt *ce;
10934 unsigned HOST_WIDE_INT idx;
10935 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10936 bool process_index_p;
10937 int newlen;
10938 bool need_copy_p = false;
10940 if (type == error_mark_node)
10941 return error_mark_node;
10943 /* digest_init will do the wrong thing if we let it. */
10944 if (type && TYPE_PTRMEMFUNC_P (type))
10945 return t;
10947 /* We do not want to process the index of aggregate
10948 initializers as they are identifier nodes which will be
10949 looked up by digest_init. */
10950 process_index_p = !(type && IS_AGGR_TYPE (type));
10952 n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
10953 newlen = VEC_length (constructor_elt, n);
10954 for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
10956 if (ce->index && process_index_p)
10957 ce->index = RECUR (ce->index);
10959 if (PACK_EXPANSION_P (ce->value))
10961 /* Substitute into the pack expansion. */
10962 ce->value = tsubst_pack_expansion (ce->value, args, complain,
10963 in_decl);
10965 if (ce->value == error_mark_node)
10967 else if (TREE_VEC_LENGTH (ce->value) == 1)
10968 /* Just move the argument into place. */
10969 ce->value = TREE_VEC_ELT (ce->value, 0);
10970 else
10972 /* Update the length of the final CONSTRUCTOR
10973 arguments vector, and note that we will need to
10974 copy.*/
10975 newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
10976 need_copy_p = true;
10979 else
10980 ce->value = RECUR (ce->value);
10983 if (need_copy_p)
10985 VEC(constructor_elt,gc) *old_n = n;
10987 n = VEC_alloc (constructor_elt, gc, newlen);
10988 for (idx = 0; VEC_iterate (constructor_elt, old_n, idx, ce);
10989 idx++)
10991 if (TREE_CODE (ce->value) == TREE_VEC)
10993 int i, len = TREE_VEC_LENGTH (ce->value);
10994 for (i = 0; i < len; ++i)
10995 CONSTRUCTOR_APPEND_ELT (n, 0,
10996 TREE_VEC_ELT (ce->value, i));
10998 else
10999 CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
11003 if (TREE_HAS_CONSTRUCTOR (t))
11004 return finish_compound_literal (type, n);
11006 return build_constructor (NULL_TREE, n);
11009 case TYPEID_EXPR:
11011 tree operand_0 = RECUR (TREE_OPERAND (t, 0));
11012 if (TYPE_P (operand_0))
11013 return get_typeid (operand_0);
11014 return build_typeid (operand_0);
11017 case VAR_DECL:
11018 if (!args)
11019 return t;
11020 /* Fall through */
11022 case PARM_DECL:
11024 tree r = tsubst_copy (t, args, complain, in_decl);
11026 if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
11027 /* If the original type was a reference, we'll be wrapped in
11028 the appropriate INDIRECT_REF. */
11029 r = convert_from_reference (r);
11030 return r;
11033 case VA_ARG_EXPR:
11034 return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
11035 tsubst_copy (TREE_TYPE (t), args, complain,
11036 in_decl));
11038 case OFFSETOF_EXPR:
11039 return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
11041 case TRAIT_EXPR:
11043 tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
11044 complain, in_decl);
11046 tree type2 = TRAIT_EXPR_TYPE2 (t);
11047 if (type2)
11048 type2 = tsubst_copy (type2, args, complain, in_decl);
11050 return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
11053 case STMT_EXPR:
11055 tree old_stmt_expr = cur_stmt_expr;
11056 tree stmt_expr = begin_stmt_expr ();
11058 cur_stmt_expr = stmt_expr;
11059 tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
11060 integral_constant_expression_p);
11061 stmt_expr = finish_stmt_expr (stmt_expr, false);
11062 cur_stmt_expr = old_stmt_expr;
11064 return stmt_expr;
11067 case CONST_DECL:
11068 t = tsubst_copy (t, args, complain, in_decl);
11069 /* As in finish_id_expression, we resolve enumeration constants
11070 to their underlying values. */
11071 if (TREE_CODE (t) == CONST_DECL)
11073 used_types_insert (TREE_TYPE (t));
11074 return DECL_INITIAL (t);
11076 return t;
11078 default:
11079 /* Handle Objective-C++ constructs, if appropriate. */
11081 tree subst
11082 = objcp_tsubst_copy_and_build (t, args, complain,
11083 in_decl, /*function_p=*/false);
11084 if (subst)
11085 return subst;
11087 return tsubst_copy (t, args, complain, in_decl);
11090 #undef RECUR
11093 /* Verify that the instantiated ARGS are valid. For type arguments,
11094 make sure that the type's linkage is ok. For non-type arguments,
11095 make sure they are constants if they are integral or enumerations.
11096 Emit an error under control of COMPLAIN, and return TRUE on error. */
11098 static bool
11099 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
11101 int ix, len = DECL_NTPARMS (tmpl);
11102 bool result = false;
11104 for (ix = 0; ix != len; ix++)
11106 tree t = TREE_VEC_ELT (args, ix);
11108 if (TYPE_P (t))
11110 /* [basic.link]: A name with no linkage (notably, the name
11111 of a class or enumeration declared in a local scope)
11112 shall not be used to declare an entity with linkage.
11113 This implies that names with no linkage cannot be used as
11114 template arguments. */
11115 tree nt = no_linkage_check (t, /*relaxed_p=*/false);
11117 if (nt)
11119 /* DR 488 makes use of a type with no linkage cause
11120 type deduction to fail. */
11121 if (complain & tf_error)
11123 if (TYPE_ANONYMOUS_P (nt))
11124 error ("%qT is/uses anonymous type", t);
11125 else
11126 error ("template argument for %qD uses local type %qT",
11127 tmpl, t);
11129 result = true;
11131 /* In order to avoid all sorts of complications, we do not
11132 allow variably-modified types as template arguments. */
11133 else if (variably_modified_type_p (t, NULL_TREE))
11135 if (complain & tf_error)
11136 error ("%qT is a variably modified type", t);
11137 result = true;
11140 /* A non-type argument of integral or enumerated type must be a
11141 constant. */
11142 else if (TREE_TYPE (t)
11143 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
11144 && !TREE_CONSTANT (t))
11146 if (complain & tf_error)
11147 error ("integral expression %qE is not constant", t);
11148 result = true;
11151 if (result && (complain & tf_error))
11152 error (" trying to instantiate %qD", tmpl);
11153 return result;
11156 /* Instantiate the indicated variable or function template TMPL with
11157 the template arguments in TARG_PTR. */
11159 tree
11160 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
11162 tree fndecl;
11163 tree gen_tmpl;
11164 tree spec;
11165 HOST_WIDE_INT saved_processing_template_decl;
11167 if (tmpl == error_mark_node)
11168 return error_mark_node;
11170 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
11172 /* If this function is a clone, handle it specially. */
11173 if (DECL_CLONED_FUNCTION_P (tmpl))
11175 tree spec;
11176 tree clone;
11178 spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
11179 complain);
11180 if (spec == error_mark_node)
11181 return error_mark_node;
11183 /* Look for the clone. */
11184 FOR_EACH_CLONE (clone, spec)
11185 if (DECL_NAME (clone) == DECL_NAME (tmpl))
11186 return clone;
11187 /* We should always have found the clone by now. */
11188 gcc_unreachable ();
11189 return NULL_TREE;
11192 /* Check to see if we already have this specialization. */
11193 spec = retrieve_specialization (tmpl, targ_ptr,
11194 /*class_specializations_p=*/false);
11195 if (spec != NULL_TREE)
11196 return spec;
11198 gen_tmpl = most_general_template (tmpl);
11199 if (tmpl != gen_tmpl)
11201 /* The TMPL is a partial instantiation. To get a full set of
11202 arguments we must add the arguments used to perform the
11203 partial instantiation. */
11204 targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
11205 targ_ptr);
11207 /* Check to see if we already have this specialization. */
11208 spec = retrieve_specialization (gen_tmpl, targ_ptr,
11209 /*class_specializations_p=*/false);
11210 if (spec != NULL_TREE)
11211 return spec;
11214 if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
11215 complain))
11216 return error_mark_node;
11218 /* We are building a FUNCTION_DECL, during which the access of its
11219 parameters and return types have to be checked. However this
11220 FUNCTION_DECL which is the desired context for access checking
11221 is not built yet. We solve this chicken-and-egg problem by
11222 deferring all checks until we have the FUNCTION_DECL. */
11223 push_deferring_access_checks (dk_deferred);
11225 /* Although PROCESSING_TEMPLATE_DECL may be true at this point
11226 (because, for example, we have encountered a non-dependent
11227 function call in the body of a template function and must now
11228 determine which of several overloaded functions will be called),
11229 within the instantiation itself we are not processing a
11230 template. */
11231 saved_processing_template_decl = processing_template_decl;
11232 processing_template_decl = 0;
11233 /* Substitute template parameters to obtain the specialization. */
11234 fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
11235 targ_ptr, complain, gen_tmpl);
11236 processing_template_decl = saved_processing_template_decl;
11237 if (fndecl == error_mark_node)
11238 return error_mark_node;
11240 /* Now we know the specialization, compute access previously
11241 deferred. */
11242 push_access_scope (fndecl);
11243 perform_deferred_access_checks ();
11244 pop_access_scope (fndecl);
11245 pop_deferring_access_checks ();
11247 /* The DECL_TI_TEMPLATE should always be the immediate parent
11248 template, not the most general template. */
11249 DECL_TI_TEMPLATE (fndecl) = tmpl;
11251 /* If we've just instantiated the main entry point for a function,
11252 instantiate all the alternate entry points as well. We do this
11253 by cloning the instantiation of the main entry point, not by
11254 instantiating the template clones. */
11255 if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
11256 clone_function_decl (fndecl, /*update_method_vec_p=*/0);
11258 return fndecl;
11261 /* The FN is a TEMPLATE_DECL for a function. The ARGS are the
11262 arguments that are being used when calling it. TARGS is a vector
11263 into which the deduced template arguments are placed.
11265 Return zero for success, 2 for an incomplete match that doesn't resolve
11266 all the types, and 1 for complete failure. An error message will be
11267 printed only for an incomplete match.
11269 If FN is a conversion operator, or we are trying to produce a specific
11270 specialization, RETURN_TYPE is the return type desired.
11272 The EXPLICIT_TARGS are explicit template arguments provided via a
11273 template-id.
11275 The parameter STRICT is one of:
11277 DEDUCE_CALL:
11278 We are deducing arguments for a function call, as in
11279 [temp.deduct.call].
11281 DEDUCE_CONV:
11282 We are deducing arguments for a conversion function, as in
11283 [temp.deduct.conv].
11285 DEDUCE_EXACT:
11286 We are deducing arguments when doing an explicit instantiation
11287 as in [temp.explicit], when determining an explicit specialization
11288 as in [temp.expl.spec], or when taking the address of a function
11289 template, as in [temp.deduct.funcaddr]. */
11292 fn_type_unification (tree fn,
11293 tree explicit_targs,
11294 tree targs,
11295 tree args,
11296 tree return_type,
11297 unification_kind_t strict,
11298 int flags)
11300 tree parms;
11301 tree fntype;
11302 int result;
11303 bool incomplete_argument_packs_p = false;
11305 gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
11307 fntype = TREE_TYPE (fn);
11308 if (explicit_targs)
11310 /* [temp.deduct]
11312 The specified template arguments must match the template
11313 parameters in kind (i.e., type, nontype, template), and there
11314 must not be more arguments than there are parameters;
11315 otherwise type deduction fails.
11317 Nontype arguments must match the types of the corresponding
11318 nontype template parameters, or must be convertible to the
11319 types of the corresponding nontype parameters as specified in
11320 _temp.arg.nontype_, otherwise type deduction fails.
11322 All references in the function type of the function template
11323 to the corresponding template parameters are replaced by the
11324 specified template argument values. If a substitution in a
11325 template parameter or in the function type of the function
11326 template results in an invalid type, type deduction fails. */
11327 tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
11328 int i, len = TREE_VEC_LENGTH (tparms);
11329 tree converted_args;
11330 bool incomplete = false;
11332 if (explicit_targs == error_mark_node)
11333 return 1;
11335 converted_args
11336 = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
11337 /*require_all_args=*/false,
11338 /*use_default_args=*/false));
11339 if (converted_args == error_mark_node)
11340 return 1;
11342 /* Substitute the explicit args into the function type. This is
11343 necessary so that, for instance, explicitly declared function
11344 arguments can match null pointed constants. If we were given
11345 an incomplete set of explicit args, we must not do semantic
11346 processing during substitution as we could create partial
11347 instantiations. */
11348 for (i = 0; i < len; i++)
11350 tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11351 bool parameter_pack = false;
11353 /* Dig out the actual parm. */
11354 if (TREE_CODE (parm) == TYPE_DECL
11355 || TREE_CODE (parm) == TEMPLATE_DECL)
11357 parm = TREE_TYPE (parm);
11358 parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
11360 else if (TREE_CODE (parm) == PARM_DECL)
11362 parm = DECL_INITIAL (parm);
11363 parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
11366 if (parameter_pack)
11368 int level, idx;
11369 tree targ;
11370 template_parm_level_and_index (parm, &level, &idx);
11372 /* Mark the argument pack as "incomplete". We could
11373 still deduce more arguments during unification. */
11374 targ = TMPL_ARG (converted_args, level, idx);
11375 if (targ)
11377 ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
11378 ARGUMENT_PACK_EXPLICIT_ARGS (targ)
11379 = ARGUMENT_PACK_ARGS (targ);
11382 /* We have some incomplete argument packs. */
11383 incomplete_argument_packs_p = true;
11387 if (incomplete_argument_packs_p)
11388 /* Any substitution is guaranteed to be incomplete if there
11389 are incomplete argument packs, because we can still deduce
11390 more arguments. */
11391 incomplete = 1;
11392 else
11393 incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
11395 processing_template_decl += incomplete;
11396 fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
11397 processing_template_decl -= incomplete;
11399 if (fntype == error_mark_node)
11400 return 1;
11402 /* Place the explicitly specified arguments in TARGS. */
11403 for (i = NUM_TMPL_ARGS (converted_args); i--;)
11404 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
11407 /* Never do unification on the 'this' parameter. */
11408 parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
11410 if (return_type)
11412 parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
11413 args = tree_cons (NULL_TREE, return_type, args);
11416 /* We allow incomplete unification without an error message here
11417 because the standard doesn't seem to explicitly prohibit it. Our
11418 callers must be ready to deal with unification failures in any
11419 event. */
11420 result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
11421 targs, parms, args, /*subr=*/0,
11422 strict, flags);
11424 if (result == 0 && incomplete_argument_packs_p)
11426 int i, len = NUM_TMPL_ARGS (targs);
11428 /* Clear the "incomplete" flags on all argument packs. */
11429 for (i = 0; i < len; i++)
11431 tree arg = TREE_VEC_ELT (targs, i);
11432 if (ARGUMENT_PACK_P (arg))
11434 ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
11435 ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
11440 if (result == 0)
11441 /* All is well so far. Now, check:
11443 [temp.deduct]
11445 When all template arguments have been deduced, all uses of
11446 template parameters in nondeduced contexts are replaced with
11447 the corresponding deduced argument values. If the
11448 substitution results in an invalid type, as described above,
11449 type deduction fails. */
11450 if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
11451 == error_mark_node)
11452 return 1;
11454 return result;
11457 /* Adjust types before performing type deduction, as described in
11458 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
11459 sections are symmetric. PARM is the type of a function parameter
11460 or the return type of the conversion function. ARG is the type of
11461 the argument passed to the call, or the type of the value
11462 initialized with the result of the conversion function.
11463 ARG_EXPR is the original argument expression, which may be null. */
11465 static int
11466 maybe_adjust_types_for_deduction (unification_kind_t strict,
11467 tree* parm,
11468 tree* arg,
11469 tree arg_expr)
11471 int result = 0;
11473 switch (strict)
11475 case DEDUCE_CALL:
11476 break;
11478 case DEDUCE_CONV:
11480 /* Swap PARM and ARG throughout the remainder of this
11481 function; the handling is precisely symmetric since PARM
11482 will initialize ARG rather than vice versa. */
11483 tree* temp = parm;
11484 parm = arg;
11485 arg = temp;
11486 break;
11489 case DEDUCE_EXACT:
11490 /* There is nothing to do in this case. */
11491 return 0;
11493 default:
11494 gcc_unreachable ();
11497 if (TREE_CODE (*parm) != REFERENCE_TYPE)
11499 /* [temp.deduct.call]
11501 If P is not a reference type:
11503 --If A is an array type, the pointer type produced by the
11504 array-to-pointer standard conversion (_conv.array_) is
11505 used in place of A for type deduction; otherwise,
11507 --If A is a function type, the pointer type produced by
11508 the function-to-pointer standard conversion
11509 (_conv.func_) is used in place of A for type deduction;
11510 otherwise,
11512 --If A is a cv-qualified type, the top level
11513 cv-qualifiers of A's type are ignored for type
11514 deduction. */
11515 if (TREE_CODE (*arg) == ARRAY_TYPE)
11516 *arg = build_pointer_type (TREE_TYPE (*arg));
11517 else if (TREE_CODE (*arg) == FUNCTION_TYPE)
11518 *arg = build_pointer_type (*arg);
11519 else
11520 *arg = TYPE_MAIN_VARIANT (*arg);
11523 /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
11524 of the form T&&, where T is a template parameter, and the argument
11525 is an lvalue, T is deduced as A& */
11526 if (TREE_CODE (*parm) == REFERENCE_TYPE
11527 && TYPE_REF_IS_RVALUE (*parm)
11528 && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
11529 && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
11530 && arg_expr && real_lvalue_p (arg_expr))
11531 *arg = build_reference_type (*arg);
11533 /* [temp.deduct.call]
11535 If P is a cv-qualified type, the top level cv-qualifiers
11536 of P's type are ignored for type deduction. If P is a
11537 reference type, the type referred to by P is used for
11538 type deduction. */
11539 *parm = TYPE_MAIN_VARIANT (*parm);
11540 if (TREE_CODE (*parm) == REFERENCE_TYPE)
11542 *parm = TREE_TYPE (*parm);
11543 result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
11546 /* DR 322. For conversion deduction, remove a reference type on parm
11547 too (which has been swapped into ARG). */
11548 if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
11549 *arg = TREE_TYPE (*arg);
11551 return result;
11554 /* Most parms like fn_type_unification.
11556 If SUBR is 1, we're being called recursively (to unify the
11557 arguments of a function or method parameter of a function
11558 template). */
11560 static int
11561 type_unification_real (tree tparms,
11562 tree targs,
11563 tree xparms,
11564 tree xargs,
11565 int subr,
11566 unification_kind_t strict,
11567 int flags)
11569 tree parm, arg, arg_expr;
11570 int i;
11571 int ntparms = TREE_VEC_LENGTH (tparms);
11572 int sub_strict;
11573 int saw_undeduced = 0;
11574 tree parms, args;
11576 gcc_assert (TREE_CODE (tparms) == TREE_VEC);
11577 gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
11578 gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
11579 gcc_assert (ntparms > 0);
11581 switch (strict)
11583 case DEDUCE_CALL:
11584 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
11585 | UNIFY_ALLOW_DERIVED);
11586 break;
11588 case DEDUCE_CONV:
11589 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
11590 break;
11592 case DEDUCE_EXACT:
11593 sub_strict = UNIFY_ALLOW_NONE;
11594 break;
11596 default:
11597 gcc_unreachable ();
11600 again:
11601 parms = xparms;
11602 args = xargs;
11604 while (parms && parms != void_list_node
11605 && args && args != void_list_node)
11607 if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
11608 break;
11610 parm = TREE_VALUE (parms);
11611 parms = TREE_CHAIN (parms);
11612 arg = TREE_VALUE (args);
11613 args = TREE_CHAIN (args);
11614 arg_expr = NULL;
11616 if (arg == error_mark_node)
11617 return 1;
11618 if (arg == unknown_type_node)
11619 /* We can't deduce anything from this, but we might get all the
11620 template args from other function args. */
11621 continue;
11623 /* Conversions will be performed on a function argument that
11624 corresponds with a function parameter that contains only
11625 non-deducible template parameters and explicitly specified
11626 template parameters. */
11627 if (!uses_template_parms (parm))
11629 tree type;
11631 if (!TYPE_P (arg))
11632 type = TREE_TYPE (arg);
11633 else
11634 type = arg;
11636 if (same_type_p (parm, type))
11637 continue;
11638 if (strict != DEDUCE_EXACT
11639 && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
11640 flags))
11641 continue;
11643 return 1;
11646 if (!TYPE_P (arg))
11648 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
11649 if (type_unknown_p (arg))
11651 /* [temp.deduct.type]
11653 A template-argument can be deduced from a pointer to
11654 function or pointer to member function argument if
11655 the set of overloaded functions does not contain
11656 function templates and at most one of a set of
11657 overloaded functions provides a unique match. */
11658 if (resolve_overloaded_unification
11659 (tparms, targs, parm, arg, strict, sub_strict))
11660 continue;
11662 return 1;
11664 arg_expr = arg;
11665 arg = unlowered_expr_type (arg);
11666 if (arg == error_mark_node)
11667 return 1;
11671 int arg_strict = sub_strict;
11673 if (!subr)
11674 arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
11675 arg_expr);
11677 if (unify (tparms, targs, parm, arg, arg_strict))
11678 return 1;
11683 if (parms
11684 && parms != void_list_node
11685 && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
11687 /* Unify the remaining arguments with the pack expansion type. */
11688 tree argvec;
11689 tree parmvec = make_tree_vec (1);
11690 int len = 0;
11691 tree t;
11693 /* Count the number of arguments that remain. */
11694 for (t = args; t && t != void_list_node; t = TREE_CHAIN (t))
11695 len++;
11697 /* Allocate a TREE_VEC and copy in all of the arguments */
11698 argvec = make_tree_vec (len);
11699 for (i = 0; args && args != void_list_node; args = TREE_CHAIN (args))
11701 TREE_VEC_ELT (argvec, i) = TREE_VALUE (args);
11702 ++i;
11705 /* Copy the parameter into parmvec. */
11706 TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
11707 if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
11708 /*call_args_p=*/true, /*subr=*/subr))
11709 return 1;
11711 /* Advance to the end of the list of parameters. */
11712 parms = TREE_CHAIN (parms);
11715 /* Fail if we've reached the end of the parm list, and more args
11716 are present, and the parm list isn't variadic. */
11717 if (args && args != void_list_node && parms == void_list_node)
11718 return 1;
11719 /* Fail if parms are left and they don't have default values. */
11720 if (parms && parms != void_list_node
11721 && TREE_PURPOSE (parms) == NULL_TREE)
11722 return 1;
11724 if (!subr)
11725 for (i = 0; i < ntparms; i++)
11726 if (!TREE_VEC_ELT (targs, i))
11728 tree tparm;
11730 if (TREE_VEC_ELT (tparms, i) == error_mark_node)
11731 continue;
11733 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11735 /* If this is an undeduced nontype parameter that depends on
11736 a type parameter, try another pass; its type may have been
11737 deduced from a later argument than the one from which
11738 this parameter can be deduced. */
11739 if (TREE_CODE (tparm) == PARM_DECL
11740 && uses_template_parms (TREE_TYPE (tparm))
11741 && !saw_undeduced++)
11742 goto again;
11744 /* Core issue #226 (C++0x) [temp.deduct]:
11746 If a template argument has not been deduced, its
11747 default template argument, if any, is used.
11749 When we are in C++98 mode, TREE_PURPOSE will either
11750 be NULL_TREE or ERROR_MARK_NODE, so we do not need
11751 to explicitly check cxx_dialect here. */
11752 if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
11754 tree arg = tsubst (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)),
11755 targs, tf_none, NULL_TREE);
11756 if (arg == error_mark_node)
11757 return 1;
11758 else
11760 TREE_VEC_ELT (targs, i) = arg;
11761 continue;
11765 /* If the type parameter is a parameter pack, then it will
11766 be deduced to an empty parameter pack. */
11767 if (template_parameter_pack_p (tparm))
11769 tree arg;
11771 if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
11773 arg = make_node (NONTYPE_ARGUMENT_PACK);
11774 TREE_TYPE (arg) = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
11775 TREE_CONSTANT (arg) = 1;
11777 else
11778 arg = make_node (TYPE_ARGUMENT_PACK);
11780 SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
11782 TREE_VEC_ELT (targs, i) = arg;
11783 continue;
11786 return 2;
11789 return 0;
11792 /* Subroutine of type_unification_real. Args are like the variables
11793 at the call site. ARG is an overloaded function (or template-id);
11794 we try deducing template args from each of the overloads, and if
11795 only one succeeds, we go with that. Modifies TARGS and returns
11796 true on success. */
11798 static bool
11799 resolve_overloaded_unification (tree tparms,
11800 tree targs,
11801 tree parm,
11802 tree arg,
11803 unification_kind_t strict,
11804 int sub_strict)
11806 tree tempargs = copy_node (targs);
11807 int good = 0;
11808 bool addr_p;
11810 if (TREE_CODE (arg) == ADDR_EXPR)
11812 arg = TREE_OPERAND (arg, 0);
11813 addr_p = true;
11815 else
11816 addr_p = false;
11818 if (TREE_CODE (arg) == COMPONENT_REF)
11819 /* Handle `&x' where `x' is some static or non-static member
11820 function name. */
11821 arg = TREE_OPERAND (arg, 1);
11823 if (TREE_CODE (arg) == OFFSET_REF)
11824 arg = TREE_OPERAND (arg, 1);
11826 /* Strip baselink information. */
11827 if (BASELINK_P (arg))
11828 arg = BASELINK_FUNCTIONS (arg);
11830 if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
11832 /* If we got some explicit template args, we need to plug them into
11833 the affected templates before we try to unify, in case the
11834 explicit args will completely resolve the templates in question. */
11836 tree expl_subargs = TREE_OPERAND (arg, 1);
11837 arg = TREE_OPERAND (arg, 0);
11839 for (; arg; arg = OVL_NEXT (arg))
11841 tree fn = OVL_CURRENT (arg);
11842 tree subargs, elem;
11844 if (TREE_CODE (fn) != TEMPLATE_DECL)
11845 continue;
11847 subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
11848 expl_subargs, /*check_ret=*/false);
11849 if (subargs)
11851 elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
11852 good += try_one_overload (tparms, targs, tempargs, parm,
11853 elem, strict, sub_strict, addr_p);
11857 else if (TREE_CODE (arg) != OVERLOAD
11858 && TREE_CODE (arg) != FUNCTION_DECL)
11859 /* If ARG is, for example, "(0, &f)" then its type will be unknown
11860 -- but the deduction does not succeed because the expression is
11861 not just the function on its own. */
11862 return false;
11863 else
11864 for (; arg; arg = OVL_NEXT (arg))
11865 good += try_one_overload (tparms, targs, tempargs, parm,
11866 TREE_TYPE (OVL_CURRENT (arg)),
11867 strict, sub_strict, addr_p);
11869 /* [temp.deduct.type] A template-argument can be deduced from a pointer
11870 to function or pointer to member function argument if the set of
11871 overloaded functions does not contain function templates and at most
11872 one of a set of overloaded functions provides a unique match.
11874 So if we found multiple possibilities, we return success but don't
11875 deduce anything. */
11877 if (good == 1)
11879 int i = TREE_VEC_LENGTH (targs);
11880 for (; i--; )
11881 if (TREE_VEC_ELT (tempargs, i))
11882 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
11884 if (good)
11885 return true;
11887 return false;
11890 /* Subroutine of resolve_overloaded_unification; does deduction for a single
11891 overload. Fills TARGS with any deduced arguments, or error_mark_node if
11892 different overloads deduce different arguments for a given parm.
11893 ADDR_P is true if the expression for which deduction is being
11894 performed was of the form "& fn" rather than simply "fn".
11896 Returns 1 on success. */
11898 static int
11899 try_one_overload (tree tparms,
11900 tree orig_targs,
11901 tree targs,
11902 tree parm,
11903 tree arg,
11904 unification_kind_t strict,
11905 int sub_strict,
11906 bool addr_p)
11908 int nargs;
11909 tree tempargs;
11910 int i;
11912 /* [temp.deduct.type] A template-argument can be deduced from a pointer
11913 to function or pointer to member function argument if the set of
11914 overloaded functions does not contain function templates and at most
11915 one of a set of overloaded functions provides a unique match.
11917 So if this is a template, just return success. */
11919 if (uses_template_parms (arg))
11920 return 1;
11922 if (TREE_CODE (arg) == METHOD_TYPE)
11923 arg = build_ptrmemfunc_type (build_pointer_type (arg));
11924 else if (addr_p)
11925 arg = build_pointer_type (arg);
11927 sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
11929 /* We don't copy orig_targs for this because if we have already deduced
11930 some template args from previous args, unify would complain when we
11931 try to deduce a template parameter for the same argument, even though
11932 there isn't really a conflict. */
11933 nargs = TREE_VEC_LENGTH (targs);
11934 tempargs = make_tree_vec (nargs);
11936 if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
11937 return 0;
11939 /* First make sure we didn't deduce anything that conflicts with
11940 explicitly specified args. */
11941 for (i = nargs; i--; )
11943 tree elt = TREE_VEC_ELT (tempargs, i);
11944 tree oldelt = TREE_VEC_ELT (orig_targs, i);
11946 if (!elt)
11947 /*NOP*/;
11948 else if (uses_template_parms (elt))
11949 /* Since we're unifying against ourselves, we will fill in
11950 template args used in the function parm list with our own
11951 template parms. Discard them. */
11952 TREE_VEC_ELT (tempargs, i) = NULL_TREE;
11953 else if (oldelt && !template_args_equal (oldelt, elt))
11954 return 0;
11957 for (i = nargs; i--; )
11959 tree elt = TREE_VEC_ELT (tempargs, i);
11961 if (elt)
11962 TREE_VEC_ELT (targs, i) = elt;
11965 return 1;
11968 /* PARM is a template class (perhaps with unbound template
11969 parameters). ARG is a fully instantiated type. If ARG can be
11970 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
11971 TARGS are as for unify. */
11973 static tree
11974 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
11976 tree copy_of_targs;
11978 if (!CLASSTYPE_TEMPLATE_INFO (arg)
11979 || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
11980 != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
11981 return NULL_TREE;
11983 /* We need to make a new template argument vector for the call to
11984 unify. If we used TARGS, we'd clutter it up with the result of
11985 the attempted unification, even if this class didn't work out.
11986 We also don't want to commit ourselves to all the unifications
11987 we've already done, since unification is supposed to be done on
11988 an argument-by-argument basis. In other words, consider the
11989 following pathological case:
11991 template <int I, int J, int K>
11992 struct S {};
11994 template <int I, int J>
11995 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
11997 template <int I, int J, int K>
11998 void f(S<I, J, K>, S<I, I, I>);
12000 void g() {
12001 S<0, 0, 0> s0;
12002 S<0, 1, 2> s2;
12004 f(s0, s2);
12007 Now, by the time we consider the unification involving `s2', we
12008 already know that we must have `f<0, 0, 0>'. But, even though
12009 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
12010 because there are two ways to unify base classes of S<0, 1, 2>
12011 with S<I, I, I>. If we kept the already deduced knowledge, we
12012 would reject the possibility I=1. */
12013 copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
12015 /* If unification failed, we're done. */
12016 if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
12017 CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
12018 return NULL_TREE;
12020 return arg;
12023 /* Given a template type PARM and a class type ARG, find the unique
12024 base type in ARG that is an instance of PARM. We do not examine
12025 ARG itself; only its base-classes. If there is not exactly one
12026 appropriate base class, return NULL_TREE. PARM may be the type of
12027 a partial specialization, as well as a plain template type. Used
12028 by unify. */
12030 static tree
12031 get_template_base (tree tparms, tree targs, tree parm, tree arg)
12033 tree rval = NULL_TREE;
12034 tree binfo;
12036 gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)));
12038 binfo = TYPE_BINFO (complete_type (arg));
12039 if (!binfo)
12040 /* The type could not be completed. */
12041 return NULL_TREE;
12043 /* Walk in inheritance graph order. The search order is not
12044 important, and this avoids multiple walks of virtual bases. */
12045 for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
12047 tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
12049 if (r)
12051 /* If there is more than one satisfactory baseclass, then:
12053 [temp.deduct.call]
12055 If they yield more than one possible deduced A, the type
12056 deduction fails.
12058 applies. */
12059 if (rval && !same_type_p (r, rval))
12060 return NULL_TREE;
12062 rval = r;
12066 return rval;
12069 /* Returns the level of DECL, which declares a template parameter. */
12071 static int
12072 template_decl_level (tree decl)
12074 switch (TREE_CODE (decl))
12076 case TYPE_DECL:
12077 case TEMPLATE_DECL:
12078 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
12080 case PARM_DECL:
12081 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
12083 default:
12084 gcc_unreachable ();
12086 return 0;
12089 /* Decide whether ARG can be unified with PARM, considering only the
12090 cv-qualifiers of each type, given STRICT as documented for unify.
12091 Returns nonzero iff the unification is OK on that basis. */
12093 static int
12094 check_cv_quals_for_unify (int strict, tree arg, tree parm)
12096 int arg_quals = cp_type_quals (arg);
12097 int parm_quals = cp_type_quals (parm);
12099 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12100 && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12102 /* Although a CVR qualifier is ignored when being applied to a
12103 substituted template parameter ([8.3.2]/1 for example), that
12104 does not apply during deduction [14.8.2.4]/1, (even though
12105 that is not explicitly mentioned, [14.8.2.4]/9 indicates
12106 this). Except when we're allowing additional CV qualifiers
12107 at the outer level [14.8.2.1]/3,1st bullet. */
12108 if ((TREE_CODE (arg) == REFERENCE_TYPE
12109 || TREE_CODE (arg) == FUNCTION_TYPE
12110 || TREE_CODE (arg) == METHOD_TYPE)
12111 && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
12112 return 0;
12114 if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
12115 && (parm_quals & TYPE_QUAL_RESTRICT))
12116 return 0;
12119 if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12120 && (arg_quals & parm_quals) != parm_quals)
12121 return 0;
12123 if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
12124 && (parm_quals & arg_quals) != arg_quals)
12125 return 0;
12127 return 1;
12130 /* Determines the LEVEL and INDEX for the template parameter PARM. */
12131 void
12132 template_parm_level_and_index (tree parm, int* level, int* index)
12134 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12135 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12136 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12138 *index = TEMPLATE_TYPE_IDX (parm);
12139 *level = TEMPLATE_TYPE_LEVEL (parm);
12141 else
12143 *index = TEMPLATE_PARM_IDX (parm);
12144 *level = TEMPLATE_PARM_LEVEL (parm);
12148 /* Unifies the remaining arguments in PACKED_ARGS with the pack
12149 expansion at the end of PACKED_PARMS. Returns 0 if the type
12150 deduction succeeds, 1 otherwise. STRICT is the same as in
12151 unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
12152 call argument list. We'll need to adjust the arguments to make them
12153 types. SUBR tells us if this is from a recursive call to
12154 type_unification_real. */
12156 unify_pack_expansion (tree tparms, tree targs, tree packed_parms,
12157 tree packed_args, int strict, bool call_args_p,
12158 bool subr)
12160 tree parm
12161 = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
12162 tree pattern = PACK_EXPANSION_PATTERN (parm);
12163 tree pack, packs = NULL_TREE;
12164 int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
12165 int len = TREE_VEC_LENGTH (packed_args);
12167 /* Determine the parameter packs we will be deducing from the
12168 pattern, and record their current deductions. */
12169 for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm);
12170 pack; pack = TREE_CHAIN (pack))
12172 tree parm_pack = TREE_VALUE (pack);
12173 int idx, level;
12175 /* Determine the index and level of this parameter pack. */
12176 template_parm_level_and_index (parm_pack, &level, &idx);
12178 /* Keep track of the parameter packs and their corresponding
12179 argument packs. */
12180 packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
12181 TREE_TYPE (packs) = make_tree_vec (len - start);
12184 /* Loop through all of the arguments that have not yet been
12185 unified and unify each with the pattern. */
12186 for (i = start; i < len; i++)
12188 tree parm = pattern;
12190 /* For each parameter pack, clear out the deduced value so that
12191 we can deduce it again. */
12192 for (pack = packs; pack; pack = TREE_CHAIN (pack))
12194 int idx, level;
12195 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12197 TMPL_ARG (targs, level, idx) = NULL_TREE;
12200 /* Unify the pattern with the current argument. */
12202 tree arg = TREE_VEC_ELT (packed_args, i);
12203 int arg_strict = strict;
12204 bool skip_arg_p = false;
12206 if (call_args_p)
12208 int sub_strict;
12210 /* This mirrors what we do in type_unification_real. */
12211 switch (strict)
12213 case DEDUCE_CALL:
12214 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL
12215 | UNIFY_ALLOW_MORE_CV_QUAL
12216 | UNIFY_ALLOW_DERIVED);
12217 break;
12219 case DEDUCE_CONV:
12220 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12221 break;
12223 case DEDUCE_EXACT:
12224 sub_strict = UNIFY_ALLOW_NONE;
12225 break;
12227 default:
12228 gcc_unreachable ();
12231 if (!TYPE_P (arg))
12233 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12234 if (type_unknown_p (arg))
12236 /* [temp.deduct.type] A template-argument can be
12237 deduced from a pointer to function or pointer
12238 to member function argument if the set of
12239 overloaded functions does not contain function
12240 templates and at most one of a set of
12241 overloaded functions provides a unique
12242 match. */
12244 if (resolve_overloaded_unification
12245 (tparms, targs, parm, arg, strict, sub_strict)
12246 != 0)
12247 return 1;
12248 skip_arg_p = true;
12251 if (!skip_arg_p)
12253 arg = TREE_TYPE (arg);
12254 if (arg == error_mark_node)
12255 return 1;
12259 arg_strict = sub_strict;
12261 if (!subr)
12262 arg_strict |=
12263 maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
12266 if (!skip_arg_p)
12268 if (unify (tparms, targs, parm, arg, arg_strict))
12269 return 1;
12273 /* For each parameter pack, collect the deduced value. */
12274 for (pack = packs; pack; pack = TREE_CHAIN (pack))
12276 int idx, level;
12277 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12279 TREE_VEC_ELT (TREE_TYPE (pack), i - start) =
12280 TMPL_ARG (targs, level, idx);
12284 /* Verify that the results of unification with the parameter packs
12285 produce results consistent with what we've seen before, and make
12286 the deduced argument packs available. */
12287 for (pack = packs; pack; pack = TREE_CHAIN (pack))
12289 tree old_pack = TREE_VALUE (pack);
12290 tree new_args = TREE_TYPE (pack);
12292 if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
12294 /* Prepend the explicit arguments onto NEW_ARGS. */
12295 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12296 tree old_args = new_args;
12297 int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
12298 int len = explicit_len + TREE_VEC_LENGTH (old_args);
12300 /* Copy the explicit arguments. */
12301 new_args = make_tree_vec (len);
12302 for (i = 0; i < explicit_len; i++)
12303 TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
12305 /* Copy the deduced arguments. */
12306 for (; i < len; i++)
12307 TREE_VEC_ELT (new_args, i) =
12308 TREE_VEC_ELT (old_args, i - explicit_len);
12311 if (!old_pack)
12313 tree result;
12314 int idx, level;
12316 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12318 /* Build the deduced *_ARGUMENT_PACK. */
12319 if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
12321 result = make_node (NONTYPE_ARGUMENT_PACK);
12322 TREE_TYPE (result) =
12323 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
12324 TREE_CONSTANT (result) = 1;
12326 else
12327 result = make_node (TYPE_ARGUMENT_PACK);
12329 SET_ARGUMENT_PACK_ARGS (result, new_args);
12331 /* Note the deduced argument packs for this parameter
12332 pack. */
12333 TMPL_ARG (targs, level, idx) = result;
12335 else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
12336 && (ARGUMENT_PACK_ARGS (old_pack)
12337 == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
12339 /* We only had the explicitly-provided arguments before, but
12340 now we have a complete set of arguments. */
12341 int idx, level;
12342 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12343 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12345 /* Keep the original deduced argument pack. */
12346 TMPL_ARG (targs, level, idx) = old_pack;
12348 SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
12349 ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
12350 ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
12352 else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
12353 new_args))
12354 /* Inconsistent unification of this parameter pack. */
12355 return 1;
12356 else
12358 int idx, level;
12360 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12362 /* Keep the original deduced argument pack. */
12363 TMPL_ARG (targs, level, idx) = old_pack;
12367 return 0;
12370 /* Deduce the value of template parameters. TPARMS is the (innermost)
12371 set of template parameters to a template. TARGS is the bindings
12372 for those template parameters, as determined thus far; TARGS may
12373 include template arguments for outer levels of template parameters
12374 as well. PARM is a parameter to a template function, or a
12375 subcomponent of that parameter; ARG is the corresponding argument.
12376 This function attempts to match PARM with ARG in a manner
12377 consistent with the existing assignments in TARGS. If more values
12378 are deduced, then TARGS is updated.
12380 Returns 0 if the type deduction succeeds, 1 otherwise. The
12381 parameter STRICT is a bitwise or of the following flags:
12383 UNIFY_ALLOW_NONE:
12384 Require an exact match between PARM and ARG.
12385 UNIFY_ALLOW_MORE_CV_QUAL:
12386 Allow the deduced ARG to be more cv-qualified (by qualification
12387 conversion) than ARG.
12388 UNIFY_ALLOW_LESS_CV_QUAL:
12389 Allow the deduced ARG to be less cv-qualified than ARG.
12390 UNIFY_ALLOW_DERIVED:
12391 Allow the deduced ARG to be a template base class of ARG,
12392 or a pointer to a template base class of the type pointed to by
12393 ARG.
12394 UNIFY_ALLOW_INTEGER:
12395 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
12396 case for more information.
12397 UNIFY_ALLOW_OUTER_LEVEL:
12398 This is the outermost level of a deduction. Used to determine validity
12399 of qualification conversions. A valid qualification conversion must
12400 have const qualified pointers leading up to the inner type which
12401 requires additional CV quals, except at the outer level, where const
12402 is not required [conv.qual]. It would be normal to set this flag in
12403 addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
12404 UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
12405 This is the outermost level of a deduction, and PARM can be more CV
12406 qualified at this point.
12407 UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
12408 This is the outermost level of a deduction, and PARM can be less CV
12409 qualified at this point. */
12411 static int
12412 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
12414 int idx;
12415 tree targ;
12416 tree tparm;
12417 int strict_in = strict;
12419 /* I don't think this will do the right thing with respect to types.
12420 But the only case I've seen it in so far has been array bounds, where
12421 signedness is the only information lost, and I think that will be
12422 okay. */
12423 while (TREE_CODE (parm) == NOP_EXPR)
12424 parm = TREE_OPERAND (parm, 0);
12426 if (arg == error_mark_node)
12427 return 1;
12428 if (arg == unknown_type_node)
12429 /* We can't deduce anything from this, but we might get all the
12430 template args from other function args. */
12431 return 0;
12433 /* If PARM uses template parameters, then we can't bail out here,
12434 even if ARG == PARM, since we won't record unifications for the
12435 template parameters. We might need them if we're trying to
12436 figure out which of two things is more specialized. */
12437 if (arg == parm && !uses_template_parms (parm))
12438 return 0;
12440 /* Immediately reject some pairs that won't unify because of
12441 cv-qualification mismatches. */
12442 if (TREE_CODE (arg) == TREE_CODE (parm)
12443 && TYPE_P (arg)
12444 /* It is the elements of the array which hold the cv quals of an array
12445 type, and the elements might be template type parms. We'll check
12446 when we recurse. */
12447 && TREE_CODE (arg) != ARRAY_TYPE
12448 /* We check the cv-qualifiers when unifying with template type
12449 parameters below. We want to allow ARG `const T' to unify with
12450 PARM `T' for example, when computing which of two templates
12451 is more specialized, for example. */
12452 && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
12453 && !check_cv_quals_for_unify (strict_in, arg, parm))
12454 return 1;
12456 if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
12457 && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
12458 strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
12459 strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
12460 strict &= ~UNIFY_ALLOW_DERIVED;
12461 strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
12462 strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
12464 switch (TREE_CODE (parm))
12466 case TYPENAME_TYPE:
12467 case SCOPE_REF:
12468 case UNBOUND_CLASS_TEMPLATE:
12469 /* In a type which contains a nested-name-specifier, template
12470 argument values cannot be deduced for template parameters used
12471 within the nested-name-specifier. */
12472 return 0;
12474 case TEMPLATE_TYPE_PARM:
12475 case TEMPLATE_TEMPLATE_PARM:
12476 case BOUND_TEMPLATE_TEMPLATE_PARM:
12477 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
12478 if (tparm == error_mark_node)
12479 return 1;
12481 if (TEMPLATE_TYPE_LEVEL (parm)
12482 != template_decl_level (tparm))
12483 /* The PARM is not one we're trying to unify. Just check
12484 to see if it matches ARG. */
12485 return (TREE_CODE (arg) == TREE_CODE (parm)
12486 && same_type_p (parm, arg)) ? 0 : 1;
12487 idx = TEMPLATE_TYPE_IDX (parm);
12488 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
12489 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
12491 /* Check for mixed types and values. */
12492 if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12493 && TREE_CODE (tparm) != TYPE_DECL)
12494 || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12495 && TREE_CODE (tparm) != TEMPLATE_DECL))
12496 return 1;
12498 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12500 /* ARG must be constructed from a template class or a template
12501 template parameter. */
12502 if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
12503 && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
12504 return 1;
12507 tree parmvec = TYPE_TI_ARGS (parm);
12508 tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
12509 tree argtmplvec
12510 = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
12511 int i;
12513 /* The resolution to DR150 makes clear that default
12514 arguments for an N-argument may not be used to bind T
12515 to a template template parameter with fewer than N
12516 parameters. It is not safe to permit the binding of
12517 default arguments as an extension, as that may change
12518 the meaning of a conforming program. Consider:
12520 struct Dense { static const unsigned int dim = 1; };
12522 template <template <typename> class View,
12523 typename Block>
12524 void operator+(float, View<Block> const&);
12526 template <typename Block,
12527 unsigned int Dim = Block::dim>
12528 struct Lvalue_proxy { operator float() const; };
12530 void
12531 test_1d (void) {
12532 Lvalue_proxy<Dense> p;
12533 float b;
12534 b + p;
12537 Here, if Lvalue_proxy is permitted to bind to View, then
12538 the global operator+ will be used; if they are not, the
12539 Lvalue_proxy will be converted to float. */
12540 if (coerce_template_parms (argtmplvec, parmvec,
12541 TYPE_TI_TEMPLATE (parm),
12542 tf_none,
12543 /*require_all_args=*/true,
12544 /*use_default_args=*/false)
12545 == error_mark_node)
12546 return 1;
12548 /* Deduce arguments T, i from TT<T> or TT<i>.
12549 We check each element of PARMVEC and ARGVEC individually
12550 rather than the whole TREE_VEC since they can have
12551 different number of elements. */
12553 for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
12555 if (unify (tparms, targs,
12556 TREE_VEC_ELT (parmvec, i),
12557 TREE_VEC_ELT (argvec, i),
12558 UNIFY_ALLOW_NONE))
12559 return 1;
12562 arg = TYPE_TI_TEMPLATE (arg);
12564 /* Fall through to deduce template name. */
12567 if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12568 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12570 /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>. */
12572 /* Simple cases: Value already set, does match or doesn't. */
12573 if (targ != NULL_TREE && template_args_equal (targ, arg))
12574 return 0;
12575 else if (targ)
12576 return 1;
12578 else
12580 /* If PARM is `const T' and ARG is only `int', we don't have
12581 a match unless we are allowing additional qualification.
12582 If ARG is `const int' and PARM is just `T' that's OK;
12583 that binds `const int' to `T'. */
12584 if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
12585 arg, parm))
12586 return 1;
12588 /* Consider the case where ARG is `const volatile int' and
12589 PARM is `const T'. Then, T should be `volatile int'. */
12590 arg = cp_build_qualified_type_real
12591 (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
12592 if (arg == error_mark_node)
12593 return 1;
12595 /* Simple cases: Value already set, does match or doesn't. */
12596 if (targ != NULL_TREE && same_type_p (targ, arg))
12597 return 0;
12598 else if (targ)
12599 return 1;
12601 /* Make sure that ARG is not a variable-sized array. (Note
12602 that were talking about variable-sized arrays (like
12603 `int[n]'), rather than arrays of unknown size (like
12604 `int[]').) We'll get very confused by such a type since
12605 the bound of the array will not be computable in an
12606 instantiation. Besides, such types are not allowed in
12607 ISO C++, so we can do as we please here. */
12608 if (variably_modified_type_p (arg, NULL_TREE))
12609 return 1;
12612 /* If ARG is a parameter pack or an expansion, we cannot unify
12613 against it unless PARM is also a parameter pack. */
12614 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
12615 && !template_parameter_pack_p (parm))
12616 return 1;
12618 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
12619 return 0;
12621 case TEMPLATE_PARM_INDEX:
12622 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
12623 if (tparm == error_mark_node)
12624 return 1;
12626 if (TEMPLATE_PARM_LEVEL (parm)
12627 != template_decl_level (tparm))
12628 /* The PARM is not one we're trying to unify. Just check
12629 to see if it matches ARG. */
12630 return !(TREE_CODE (arg) == TREE_CODE (parm)
12631 && cp_tree_equal (parm, arg));
12633 idx = TEMPLATE_PARM_IDX (parm);
12634 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
12636 if (targ)
12637 return !cp_tree_equal (targ, arg);
12639 /* [temp.deduct.type] If, in the declaration of a function template
12640 with a non-type template-parameter, the non-type
12641 template-parameter is used in an expression in the function
12642 parameter-list and, if the corresponding template-argument is
12643 deduced, the template-argument type shall match the type of the
12644 template-parameter exactly, except that a template-argument
12645 deduced from an array bound may be of any integral type.
12646 The non-type parameter might use already deduced type parameters. */
12647 tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
12648 if (!TREE_TYPE (arg))
12649 /* Template-parameter dependent expression. Just accept it for now.
12650 It will later be processed in convert_template_argument. */
12652 else if (same_type_p (TREE_TYPE (arg), tparm))
12653 /* OK */;
12654 else if ((strict & UNIFY_ALLOW_INTEGER)
12655 && (TREE_CODE (tparm) == INTEGER_TYPE
12656 || TREE_CODE (tparm) == BOOLEAN_TYPE))
12657 /* Convert the ARG to the type of PARM; the deduced non-type
12658 template argument must exactly match the types of the
12659 corresponding parameter. */
12660 arg = fold (build_nop (TREE_TYPE (parm), arg));
12661 else if (uses_template_parms (tparm))
12662 /* We haven't deduced the type of this parameter yet. Try again
12663 later. */
12664 return 0;
12665 else
12666 return 1;
12668 /* If ARG is a parameter pack or an expansion, we cannot unify
12669 against it unless PARM is also a parameter pack. */
12670 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
12671 && !TEMPLATE_PARM_PARAMETER_PACK (parm))
12672 return 1;
12674 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
12675 return 0;
12677 case PTRMEM_CST:
12679 /* A pointer-to-member constant can be unified only with
12680 another constant. */
12681 if (TREE_CODE (arg) != PTRMEM_CST)
12682 return 1;
12684 /* Just unify the class member. It would be useless (and possibly
12685 wrong, depending on the strict flags) to unify also
12686 PTRMEM_CST_CLASS, because we want to be sure that both parm and
12687 arg refer to the same variable, even if through different
12688 classes. For instance:
12690 struct A { int x; };
12691 struct B : A { };
12693 Unification of &A::x and &B::x must succeed. */
12694 return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
12695 PTRMEM_CST_MEMBER (arg), strict);
12698 case POINTER_TYPE:
12700 if (TREE_CODE (arg) != POINTER_TYPE)
12701 return 1;
12703 /* [temp.deduct.call]
12705 A can be another pointer or pointer to member type that can
12706 be converted to the deduced A via a qualification
12707 conversion (_conv.qual_).
12709 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
12710 This will allow for additional cv-qualification of the
12711 pointed-to types if appropriate. */
12713 if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
12714 /* The derived-to-base conversion only persists through one
12715 level of pointers. */
12716 strict |= (strict_in & UNIFY_ALLOW_DERIVED);
12718 return unify (tparms, targs, TREE_TYPE (parm),
12719 TREE_TYPE (arg), strict);
12722 case REFERENCE_TYPE:
12723 if (TREE_CODE (arg) != REFERENCE_TYPE)
12724 return 1;
12725 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
12726 strict & UNIFY_ALLOW_MORE_CV_QUAL);
12728 case ARRAY_TYPE:
12729 if (TREE_CODE (arg) != ARRAY_TYPE)
12730 return 1;
12731 if ((TYPE_DOMAIN (parm) == NULL_TREE)
12732 != (TYPE_DOMAIN (arg) == NULL_TREE))
12733 return 1;
12734 if (TYPE_DOMAIN (parm) != NULL_TREE)
12736 tree parm_max;
12737 tree arg_max;
12738 bool parm_cst;
12739 bool arg_cst;
12741 /* Our representation of array types uses "N - 1" as the
12742 TYPE_MAX_VALUE for an array with "N" elements, if "N" is
12743 not an integer constant. We cannot unify arbitrarily
12744 complex expressions, so we eliminate the MINUS_EXPRs
12745 here. */
12746 parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
12747 parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
12748 if (!parm_cst)
12750 gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
12751 parm_max = TREE_OPERAND (parm_max, 0);
12753 arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
12754 arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
12755 if (!arg_cst)
12757 /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
12758 trying to unify the type of a variable with the type
12759 of a template parameter. For example:
12761 template <unsigned int N>
12762 void f (char (&) [N]);
12763 int g();
12764 void h(int i) {
12765 char a[g(i)];
12766 f(a);
12769 Here, the type of the ARG will be "int [g(i)]", and
12770 may be a SAVE_EXPR, etc. */
12771 if (TREE_CODE (arg_max) != MINUS_EXPR)
12772 return 1;
12773 arg_max = TREE_OPERAND (arg_max, 0);
12776 /* If only one of the bounds used a MINUS_EXPR, compensate
12777 by adding one to the other bound. */
12778 if (parm_cst && !arg_cst)
12779 parm_max = fold_build2 (PLUS_EXPR,
12780 integer_type_node,
12781 parm_max,
12782 integer_one_node);
12783 else if (arg_cst && !parm_cst)
12784 arg_max = fold_build2 (PLUS_EXPR,
12785 integer_type_node,
12786 arg_max,
12787 integer_one_node);
12789 if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
12790 return 1;
12792 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
12793 strict & UNIFY_ALLOW_MORE_CV_QUAL);
12795 case REAL_TYPE:
12796 case COMPLEX_TYPE:
12797 case VECTOR_TYPE:
12798 case INTEGER_TYPE:
12799 case BOOLEAN_TYPE:
12800 case ENUMERAL_TYPE:
12801 case VOID_TYPE:
12802 if (TREE_CODE (arg) != TREE_CODE (parm))
12803 return 1;
12805 /* We have already checked cv-qualification at the top of the
12806 function. */
12807 if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
12808 return 1;
12810 /* As far as unification is concerned, this wins. Later checks
12811 will invalidate it if necessary. */
12812 return 0;
12814 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
12815 /* Type INTEGER_CST can come from ordinary constant template args. */
12816 case INTEGER_CST:
12817 while (TREE_CODE (arg) == NOP_EXPR)
12818 arg = TREE_OPERAND (arg, 0);
12820 if (TREE_CODE (arg) != INTEGER_CST)
12821 return 1;
12822 return !tree_int_cst_equal (parm, arg);
12824 case TREE_VEC:
12826 int i;
12827 if (TREE_CODE (arg) != TREE_VEC)
12828 return 1;
12829 if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
12830 return 1;
12831 for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
12832 if (unify (tparms, targs,
12833 TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
12834 UNIFY_ALLOW_NONE))
12835 return 1;
12836 return 0;
12839 case RECORD_TYPE:
12840 case UNION_TYPE:
12841 if (TREE_CODE (arg) != TREE_CODE (parm))
12842 return 1;
12844 if (TYPE_PTRMEMFUNC_P (parm))
12846 if (!TYPE_PTRMEMFUNC_P (arg))
12847 return 1;
12849 return unify (tparms, targs,
12850 TYPE_PTRMEMFUNC_FN_TYPE (parm),
12851 TYPE_PTRMEMFUNC_FN_TYPE (arg),
12852 strict);
12855 if (CLASSTYPE_TEMPLATE_INFO (parm))
12857 tree t = NULL_TREE;
12859 if (strict_in & UNIFY_ALLOW_DERIVED)
12861 /* First, we try to unify the PARM and ARG directly. */
12862 t = try_class_unification (tparms, targs,
12863 parm, arg);
12865 if (!t)
12867 /* Fallback to the special case allowed in
12868 [temp.deduct.call]:
12870 If P is a class, and P has the form
12871 template-id, then A can be a derived class of
12872 the deduced A. Likewise, if P is a pointer to
12873 a class of the form template-id, A can be a
12874 pointer to a derived class pointed to by the
12875 deduced A. */
12876 t = get_template_base (tparms, targs, parm, arg);
12878 if (!t)
12879 return 1;
12882 else if (CLASSTYPE_TEMPLATE_INFO (arg)
12883 && (CLASSTYPE_TI_TEMPLATE (parm)
12884 == CLASSTYPE_TI_TEMPLATE (arg)))
12885 /* Perhaps PARM is something like S<U> and ARG is S<int>.
12886 Then, we should unify `int' and `U'. */
12887 t = arg;
12888 else
12889 /* There's no chance of unification succeeding. */
12890 return 1;
12892 return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
12893 CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
12895 else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
12896 return 1;
12897 return 0;
12899 case METHOD_TYPE:
12900 case FUNCTION_TYPE:
12901 if (TREE_CODE (arg) != TREE_CODE (parm))
12902 return 1;
12904 /* CV qualifications for methods can never be deduced, they must
12905 match exactly. We need to check them explicitly here,
12906 because type_unification_real treats them as any other
12907 cvqualified parameter. */
12908 if (TREE_CODE (parm) == METHOD_TYPE
12909 && (!check_cv_quals_for_unify
12910 (UNIFY_ALLOW_NONE,
12911 TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
12912 TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
12913 return 1;
12915 if (unify (tparms, targs, TREE_TYPE (parm),
12916 TREE_TYPE (arg), UNIFY_ALLOW_NONE))
12917 return 1;
12918 return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
12919 TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
12920 LOOKUP_NORMAL);
12922 case OFFSET_TYPE:
12923 /* Unify a pointer to member with a pointer to member function, which
12924 deduces the type of the member as a function type. */
12925 if (TYPE_PTRMEMFUNC_P (arg))
12927 tree method_type;
12928 tree fntype;
12929 cp_cv_quals cv_quals;
12931 /* Check top-level cv qualifiers */
12932 if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
12933 return 1;
12935 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
12936 TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
12937 return 1;
12939 /* Determine the type of the function we are unifying against. */
12940 method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
12941 fntype =
12942 build_function_type (TREE_TYPE (method_type),
12943 TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
12945 /* Extract the cv-qualifiers of the member function from the
12946 implicit object parameter and place them on the function
12947 type to be restored later. */
12948 cv_quals =
12949 cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
12950 fntype = build_qualified_type (fntype, cv_quals);
12951 return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
12954 if (TREE_CODE (arg) != OFFSET_TYPE)
12955 return 1;
12956 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
12957 TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
12958 return 1;
12959 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
12960 strict);
12962 case CONST_DECL:
12963 if (DECL_TEMPLATE_PARM_P (parm))
12964 return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
12965 if (arg != integral_constant_value (parm))
12966 return 1;
12967 return 0;
12969 case FIELD_DECL:
12970 case TEMPLATE_DECL:
12971 /* Matched cases are handled by the ARG == PARM test above. */
12972 return 1;
12974 case TYPE_ARGUMENT_PACK:
12975 case NONTYPE_ARGUMENT_PACK:
12977 tree packed_parms = ARGUMENT_PACK_ARGS (parm);
12978 tree packed_args = ARGUMENT_PACK_ARGS (arg);
12979 int i, len = TREE_VEC_LENGTH (packed_parms);
12980 int argslen = TREE_VEC_LENGTH (packed_args);
12981 int parm_variadic_p = 0;
12983 /* Check if the parameters end in a pack, making them variadic. */
12984 if (len > 0
12985 && PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, len - 1)))
12986 parm_variadic_p = 1;
12988 /* If we don't have enough arguments to satisfy the parameters
12989 (not counting the pack expression at the end), or we have
12990 too many arguments for a parameter list that doesn't end in
12991 a pack expression, we can't unify. */
12992 if (argslen < (len - parm_variadic_p)
12993 || (argslen > len && !parm_variadic_p))
12994 return 1;
12996 /* Unify all of the parameters that precede the (optional)
12997 pack expression. */
12998 for (i = 0; i < len - parm_variadic_p; ++i)
13000 if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
13001 TREE_VEC_ELT (packed_args, i), strict))
13002 return 1;
13005 if (parm_variadic_p)
13006 return unify_pack_expansion (tparms, targs,
13007 packed_parms, packed_args,
13008 strict, /*call_args_p=*/false,
13009 /*subr=*/false);
13010 return 0;
13013 break;
13015 case TYPEOF_TYPE:
13016 case DECLTYPE_TYPE:
13017 /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
13018 nodes. */
13019 return 0;
13021 default:
13022 gcc_assert (EXPR_P (parm));
13024 /* We must be looking at an expression. This can happen with
13025 something like:
13027 template <int I>
13028 void foo(S<I>, S<I + 2>);
13030 This is a "nondeduced context":
13032 [deduct.type]
13034 The nondeduced contexts are:
13036 --A type that is a template-id in which one or more of
13037 the template-arguments is an expression that references
13038 a template-parameter.
13040 In these cases, we assume deduction succeeded, but don't
13041 actually infer any unifications. */
13043 if (!uses_template_parms (parm)
13044 && !template_args_equal (parm, arg))
13045 return 1;
13046 else
13047 return 0;
13051 /* Note that DECL can be defined in this translation unit, if
13052 required. */
13054 static void
13055 mark_definable (tree decl)
13057 tree clone;
13058 DECL_NOT_REALLY_EXTERN (decl) = 1;
13059 FOR_EACH_CLONE (clone, decl)
13060 DECL_NOT_REALLY_EXTERN (clone) = 1;
13063 /* Called if RESULT is explicitly instantiated, or is a member of an
13064 explicitly instantiated class. */
13066 void
13067 mark_decl_instantiated (tree result, int extern_p)
13069 SET_DECL_EXPLICIT_INSTANTIATION (result);
13071 /* If this entity has already been written out, it's too late to
13072 make any modifications. */
13073 if (TREE_ASM_WRITTEN (result))
13074 return;
13076 if (TREE_CODE (result) != FUNCTION_DECL)
13077 /* The TREE_PUBLIC flag for function declarations will have been
13078 set correctly by tsubst. */
13079 TREE_PUBLIC (result) = 1;
13081 /* This might have been set by an earlier implicit instantiation. */
13082 DECL_COMDAT (result) = 0;
13084 if (extern_p)
13085 DECL_NOT_REALLY_EXTERN (result) = 0;
13086 else
13088 mark_definable (result);
13089 /* Always make artificials weak. */
13090 if (DECL_ARTIFICIAL (result) && flag_weak)
13091 comdat_linkage (result);
13092 /* For WIN32 we also want to put explicit instantiations in
13093 linkonce sections. */
13094 else if (TREE_PUBLIC (result))
13095 maybe_make_one_only (result);
13098 /* If EXTERN_P, then this function will not be emitted -- unless
13099 followed by an explicit instantiation, at which point its linkage
13100 will be adjusted. If !EXTERN_P, then this function will be
13101 emitted here. In neither circumstance do we want
13102 import_export_decl to adjust the linkage. */
13103 DECL_INTERFACE_KNOWN (result) = 1;
13106 /* Given two function templates PAT1 and PAT2, return:
13108 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
13109 -1 if PAT2 is more specialized than PAT1.
13110 0 if neither is more specialized.
13112 LEN indicates the number of parameters we should consider
13113 (defaulted parameters should not be considered).
13115 The 1998 std underspecified function template partial ordering, and
13116 DR214 addresses the issue. We take pairs of arguments, one from
13117 each of the templates, and deduce them against each other. One of
13118 the templates will be more specialized if all the *other*
13119 template's arguments deduce against its arguments and at least one
13120 of its arguments *does* *not* deduce against the other template's
13121 corresponding argument. Deduction is done as for class templates.
13122 The arguments used in deduction have reference and top level cv
13123 qualifiers removed. Iff both arguments were originally reference
13124 types *and* deduction succeeds in both directions, the template
13125 with the more cv-qualified argument wins for that pairing (if
13126 neither is more cv-qualified, they both are equal). Unlike regular
13127 deduction, after all the arguments have been deduced in this way,
13128 we do *not* verify the deduced template argument values can be
13129 substituted into non-deduced contexts, nor do we have to verify
13130 that all template arguments have been deduced. */
13133 more_specialized_fn (tree pat1, tree pat2, int len)
13135 tree decl1 = DECL_TEMPLATE_RESULT (pat1);
13136 tree decl2 = DECL_TEMPLATE_RESULT (pat2);
13137 tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
13138 tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
13139 tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
13140 tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
13141 tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
13142 tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
13143 int better1 = 0;
13144 int better2 = 0;
13146 /* Remove the this parameter from non-static member functions. If
13147 one is a non-static member function and the other is not a static
13148 member function, remove the first parameter from that function
13149 also. This situation occurs for operator functions where we
13150 locate both a member function (with this pointer) and non-member
13151 operator (with explicit first operand). */
13152 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
13154 len--; /* LEN is the number of significant arguments for DECL1 */
13155 args1 = TREE_CHAIN (args1);
13156 if (!DECL_STATIC_FUNCTION_P (decl2))
13157 args2 = TREE_CHAIN (args2);
13159 else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
13161 args2 = TREE_CHAIN (args2);
13162 if (!DECL_STATIC_FUNCTION_P (decl1))
13164 len--;
13165 args1 = TREE_CHAIN (args1);
13169 /* If only one is a conversion operator, they are unordered. */
13170 if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
13171 return 0;
13173 /* Consider the return type for a conversion function */
13174 if (DECL_CONV_FN_P (decl1))
13176 args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
13177 args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
13178 len++;
13181 processing_template_decl++;
13183 while (len--)
13185 tree arg1 = TREE_VALUE (args1);
13186 tree arg2 = TREE_VALUE (args2);
13187 int deduce1, deduce2;
13188 int quals1 = -1;
13189 int quals2 = -1;
13191 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13192 && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13194 /* When both arguments are pack expansions, we need only
13195 unify the patterns themselves. */
13196 arg1 = PACK_EXPANSION_PATTERN (arg1);
13197 arg2 = PACK_EXPANSION_PATTERN (arg2);
13199 /* This is the last comparison we need to do. */
13200 len = 0;
13203 if (TREE_CODE (arg1) == REFERENCE_TYPE)
13205 arg1 = TREE_TYPE (arg1);
13206 quals1 = cp_type_quals (arg1);
13209 if (TREE_CODE (arg2) == REFERENCE_TYPE)
13211 arg2 = TREE_TYPE (arg2);
13212 quals2 = cp_type_quals (arg2);
13215 if ((quals1 < 0) != (quals2 < 0))
13217 /* Only of the args is a reference, see if we should apply
13218 array/function pointer decay to it. This is not part of
13219 DR214, but is, IMHO, consistent with the deduction rules
13220 for the function call itself, and with our earlier
13221 implementation of the underspecified partial ordering
13222 rules. (nathan). */
13223 if (quals1 >= 0)
13225 switch (TREE_CODE (arg1))
13227 case ARRAY_TYPE:
13228 arg1 = TREE_TYPE (arg1);
13229 /* FALLTHROUGH. */
13230 case FUNCTION_TYPE:
13231 arg1 = build_pointer_type (arg1);
13232 break;
13234 default:
13235 break;
13238 else
13240 switch (TREE_CODE (arg2))
13242 case ARRAY_TYPE:
13243 arg2 = TREE_TYPE (arg2);
13244 /* FALLTHROUGH. */
13245 case FUNCTION_TYPE:
13246 arg2 = build_pointer_type (arg2);
13247 break;
13249 default:
13250 break;
13255 arg1 = TYPE_MAIN_VARIANT (arg1);
13256 arg2 = TYPE_MAIN_VARIANT (arg2);
13258 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
13260 int i, len2 = list_length (args2);
13261 tree parmvec = make_tree_vec (1);
13262 tree argvec = make_tree_vec (len2);
13263 tree ta = args2;
13265 /* Setup the parameter vector, which contains only ARG1. */
13266 TREE_VEC_ELT (parmvec, 0) = arg1;
13268 /* Setup the argument vector, which contains the remaining
13269 arguments. */
13270 for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
13271 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13273 deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec,
13274 argvec, UNIFY_ALLOW_NONE,
13275 /*call_args_p=*/false,
13276 /*subr=*/0);
13278 /* We cannot deduce in the other direction, because ARG1 is
13279 a pack expansion but ARG2 is not. */
13280 deduce2 = 0;
13282 else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13284 int i, len1 = list_length (args1);
13285 tree parmvec = make_tree_vec (1);
13286 tree argvec = make_tree_vec (len1);
13287 tree ta = args1;
13289 /* Setup the parameter vector, which contains only ARG1. */
13290 TREE_VEC_ELT (parmvec, 0) = arg2;
13292 /* Setup the argument vector, which contains the remaining
13293 arguments. */
13294 for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
13295 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13297 deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec,
13298 argvec, UNIFY_ALLOW_NONE,
13299 /*call_args_p=*/false,
13300 /*subr=*/0);
13302 /* We cannot deduce in the other direction, because ARG2 is
13303 a pack expansion but ARG1 is not.*/
13304 deduce1 = 0;
13307 else
13309 /* The normal case, where neither argument is a pack
13310 expansion. */
13311 deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
13312 deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
13315 if (!deduce1)
13316 better2 = -1;
13317 if (!deduce2)
13318 better1 = -1;
13319 if (better1 < 0 && better2 < 0)
13320 /* We've failed to deduce something in either direction.
13321 These must be unordered. */
13322 break;
13324 if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
13326 /* Deduces in both directions, see if quals can
13327 disambiguate. Pretend the worse one failed to deduce. */
13328 if ((quals1 & quals2) == quals2)
13329 deduce1 = 0;
13330 if ((quals1 & quals2) == quals1)
13331 deduce2 = 0;
13333 if (deduce1 && !deduce2 && !better2)
13334 better2 = 1;
13335 if (deduce2 && !deduce1 && !better1)
13336 better1 = 1;
13338 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13339 || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13340 /* We have already processed all of the arguments in our
13341 handing of the pack expansion type. */
13342 len = 0;
13344 args1 = TREE_CHAIN (args1);
13345 args2 = TREE_CHAIN (args2);
13348 processing_template_decl--;
13350 /* All things being equal, if the next argument is a pack expansion
13351 for one function but not for the other, prefer the
13352 non-variadic function. */
13353 if ((better1 > 0) - (better2 > 0) == 0
13354 && args1 && TREE_VALUE (args1)
13355 && args2 && TREE_VALUE (args2))
13357 if (TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION)
13358 return TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION ? 0 : -1;
13359 else if (TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION)
13360 return 1;
13363 return (better1 > 0) - (better2 > 0);
13366 /* Determine which of two partial specializations is more specialized.
13368 PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
13369 to the first partial specialization. The TREE_VALUE is the
13370 innermost set of template parameters for the partial
13371 specialization. PAT2 is similar, but for the second template.
13373 Return 1 if the first partial specialization is more specialized;
13374 -1 if the second is more specialized; 0 if neither is more
13375 specialized.
13377 See [temp.class.order] for information about determining which of
13378 two templates is more specialized. */
13380 static int
13381 more_specialized_class (tree pat1, tree pat2)
13383 tree targs;
13384 tree tmpl1, tmpl2;
13385 int winner = 0;
13386 bool any_deductions = false;
13388 tmpl1 = TREE_TYPE (pat1);
13389 tmpl2 = TREE_TYPE (pat2);
13391 /* Just like what happens for functions, if we are ordering between
13392 different class template specializations, we may encounter dependent
13393 types in the arguments, and we need our dependency check functions
13394 to behave correctly. */
13395 ++processing_template_decl;
13396 targs = get_class_bindings (TREE_VALUE (pat1),
13397 CLASSTYPE_TI_ARGS (tmpl1),
13398 CLASSTYPE_TI_ARGS (tmpl2));
13399 if (targs)
13401 --winner;
13402 any_deductions = true;
13405 targs = get_class_bindings (TREE_VALUE (pat2),
13406 CLASSTYPE_TI_ARGS (tmpl2),
13407 CLASSTYPE_TI_ARGS (tmpl1));
13408 if (targs)
13410 ++winner;
13411 any_deductions = true;
13413 --processing_template_decl;
13415 /* In the case of a tie where at least one of the class templates
13416 has a parameter pack at the end, the template with the most
13417 non-packed parameters wins. */
13418 if (winner == 0
13419 && any_deductions
13420 && (template_args_variadic_p (TREE_PURPOSE (pat1))
13421 || template_args_variadic_p (TREE_PURPOSE (pat2))))
13423 tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
13424 tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
13425 int len1 = TREE_VEC_LENGTH (args1);
13426 int len2 = TREE_VEC_LENGTH (args2);
13428 /* We don't count the pack expansion at the end. */
13429 if (template_args_variadic_p (TREE_PURPOSE (pat1)))
13430 --len1;
13431 if (template_args_variadic_p (TREE_PURPOSE (pat2)))
13432 --len2;
13434 if (len1 > len2)
13435 return 1;
13436 else if (len1 < len2)
13437 return -1;
13440 return winner;
13443 /* Return the template arguments that will produce the function signature
13444 DECL from the function template FN, with the explicit template
13445 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is true, the return type must
13446 also match. Return NULL_TREE if no satisfactory arguments could be
13447 found. */
13449 static tree
13450 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
13452 int ntparms = DECL_NTPARMS (fn);
13453 tree targs = make_tree_vec (ntparms);
13454 tree decl_type;
13455 tree decl_arg_types;
13457 /* Substitute the explicit template arguments into the type of DECL.
13458 The call to fn_type_unification will handle substitution into the
13459 FN. */
13460 decl_type = TREE_TYPE (decl);
13461 if (explicit_args && uses_template_parms (decl_type))
13463 tree tmpl;
13464 tree converted_args;
13466 if (DECL_TEMPLATE_INFO (decl))
13467 tmpl = DECL_TI_TEMPLATE (decl);
13468 else
13469 /* We can get here for some invalid specializations. */
13470 return NULL_TREE;
13472 converted_args
13473 = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
13474 explicit_args, NULL_TREE,
13475 tf_none,
13476 /*require_all_args=*/false,
13477 /*use_default_args=*/false);
13478 if (converted_args == error_mark_node)
13479 return NULL_TREE;
13481 decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
13482 if (decl_type == error_mark_node)
13483 return NULL_TREE;
13486 /* Never do unification on the 'this' parameter. */
13487 decl_arg_types = skip_artificial_parms_for (decl,
13488 TYPE_ARG_TYPES (decl_type));
13490 if (fn_type_unification (fn, explicit_args, targs,
13491 decl_arg_types,
13492 (check_rettype || DECL_CONV_FN_P (fn)
13493 ? TREE_TYPE (decl_type) : NULL_TREE),
13494 DEDUCE_EXACT, LOOKUP_NORMAL))
13495 return NULL_TREE;
13497 return targs;
13500 /* Return the innermost template arguments that, when applied to a
13501 template specialization whose innermost template parameters are
13502 TPARMS, and whose specialization arguments are PARMS, yield the
13503 ARGS.
13505 For example, suppose we have:
13507 template <class T, class U> struct S {};
13508 template <class T> struct S<T*, int> {};
13510 Then, suppose we want to get `S<double*, int>'. The TPARMS will be
13511 {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
13512 int}. The resulting vector will be {double}, indicating that `T'
13513 is bound to `double'. */
13515 static tree
13516 get_class_bindings (tree tparms, tree spec_args, tree args)
13518 int i, ntparms = TREE_VEC_LENGTH (tparms);
13519 tree deduced_args;
13520 tree innermost_deduced_args;
13522 innermost_deduced_args = make_tree_vec (ntparms);
13523 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
13525 deduced_args = copy_node (args);
13526 SET_TMPL_ARGS_LEVEL (deduced_args,
13527 TMPL_ARGS_DEPTH (deduced_args),
13528 innermost_deduced_args);
13530 else
13531 deduced_args = innermost_deduced_args;
13533 if (unify (tparms, deduced_args,
13534 INNERMOST_TEMPLATE_ARGS (spec_args),
13535 INNERMOST_TEMPLATE_ARGS (args),
13536 UNIFY_ALLOW_NONE))
13537 return NULL_TREE;
13539 for (i = 0; i < ntparms; ++i)
13540 if (! TREE_VEC_ELT (innermost_deduced_args, i))
13541 return NULL_TREE;
13543 /* Verify that nondeduced template arguments agree with the type
13544 obtained from argument deduction.
13546 For example:
13548 struct A { typedef int X; };
13549 template <class T, class U> struct C {};
13550 template <class T> struct C<T, typename T::X> {};
13552 Then with the instantiation `C<A, int>', we can deduce that
13553 `T' is `A' but unify () does not check whether `typename T::X'
13554 is `int'. */
13555 spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
13556 if (spec_args == error_mark_node
13557 /* We only need to check the innermost arguments; the other
13558 arguments will always agree. */
13559 || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
13560 INNERMOST_TEMPLATE_ARGS (args)))
13561 return NULL_TREE;
13563 return deduced_args;
13566 /* TEMPLATES is a TREE_LIST. Each TREE_VALUE is a TEMPLATE_DECL.
13567 Return the TREE_LIST node with the most specialized template, if
13568 any. If there is no most specialized template, the error_mark_node
13569 is returned.
13571 Note that this function does not look at, or modify, the
13572 TREE_PURPOSE or TREE_TYPE of any of the nodes. Since the node
13573 returned is one of the elements of INSTANTIATIONS, callers may
13574 store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
13575 and retrieve it from the value returned. */
13577 tree
13578 most_specialized_instantiation (tree templates)
13580 tree fn, champ;
13582 ++processing_template_decl;
13584 champ = templates;
13585 for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
13587 int fate = 0;
13589 if (get_bindings (TREE_VALUE (champ),
13590 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
13591 NULL_TREE, /*check_ret=*/false))
13592 fate--;
13594 if (get_bindings (TREE_VALUE (fn),
13595 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
13596 NULL_TREE, /*check_ret=*/false))
13597 fate++;
13599 if (fate == -1)
13600 champ = fn;
13601 else if (!fate)
13603 /* Equally specialized, move to next function. If there
13604 is no next function, nothing's most specialized. */
13605 fn = TREE_CHAIN (fn);
13606 champ = fn;
13607 if (!fn)
13608 break;
13612 if (champ)
13613 /* Now verify that champ is better than everything earlier in the
13614 instantiation list. */
13615 for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
13616 if (get_bindings (TREE_VALUE (champ),
13617 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
13618 NULL_TREE, /*check_ret=*/false)
13619 || !get_bindings (TREE_VALUE (fn),
13620 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
13621 NULL_TREE, /*check_ret=*/false))
13623 champ = NULL_TREE;
13624 break;
13627 processing_template_decl--;
13629 if (!champ)
13630 return error_mark_node;
13632 return champ;
13635 /* If DECL is a specialization of some template, return the most
13636 general such template. Otherwise, returns NULL_TREE.
13638 For example, given:
13640 template <class T> struct S { template <class U> void f(U); };
13642 if TMPL is `template <class U> void S<int>::f(U)' this will return
13643 the full template. This function will not trace past partial
13644 specializations, however. For example, given in addition:
13646 template <class T> struct S<T*> { template <class U> void f(U); };
13648 if TMPL is `template <class U> void S<int*>::f(U)' this will return
13649 `template <class T> template <class U> S<T*>::f(U)'. */
13651 tree
13652 most_general_template (tree decl)
13654 /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
13655 an immediate specialization. */
13656 if (TREE_CODE (decl) == FUNCTION_DECL)
13658 if (DECL_TEMPLATE_INFO (decl)) {
13659 decl = DECL_TI_TEMPLATE (decl);
13661 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
13662 template friend. */
13663 if (TREE_CODE (decl) != TEMPLATE_DECL)
13664 return NULL_TREE;
13665 } else
13666 return NULL_TREE;
13669 /* Look for more and more general templates. */
13670 while (DECL_TEMPLATE_INFO (decl))
13672 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
13673 (See cp-tree.h for details.) */
13674 if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
13675 break;
13677 if (CLASS_TYPE_P (TREE_TYPE (decl))
13678 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
13679 break;
13681 /* Stop if we run into an explicitly specialized class template. */
13682 if (!DECL_NAMESPACE_SCOPE_P (decl)
13683 && DECL_CONTEXT (decl)
13684 && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
13685 break;
13687 decl = DECL_TI_TEMPLATE (decl);
13690 return decl;
13693 /* Return the most specialized of the class template partial
13694 specializations of TMPL which can produce TYPE, a specialization of
13695 TMPL. The value returned is actually a TREE_LIST; the TREE_TYPE is
13696 a _TYPE node corresponding to the partial specialization, while the
13697 TREE_PURPOSE is the set of template arguments that must be
13698 substituted into the TREE_TYPE in order to generate TYPE.
13700 If the choice of partial specialization is ambiguous, a diagnostic
13701 is issued, and the error_mark_node is returned. If there are no
13702 partial specializations of TMPL matching TYPE, then NULL_TREE is
13703 returned. */
13705 static tree
13706 most_specialized_class (tree type, tree tmpl)
13708 tree list = NULL_TREE;
13709 tree t;
13710 tree champ;
13711 int fate;
13712 bool ambiguous_p;
13713 tree args;
13714 tree outer_args = NULL_TREE;
13716 tmpl = most_general_template (tmpl);
13717 args = CLASSTYPE_TI_ARGS (type);
13719 /* For determining which partial specialization to use, only the
13720 innermost args are interesting. */
13721 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
13723 outer_args = strip_innermost_template_args (args, 1);
13724 args = INNERMOST_TEMPLATE_ARGS (args);
13727 for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
13729 tree partial_spec_args;
13730 tree spec_args;
13731 tree parms = TREE_VALUE (t);
13733 partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
13734 if (outer_args)
13736 int i;
13738 ++processing_template_decl;
13740 /* Discard the outer levels of args, and then substitute in the
13741 template args from the enclosing class. */
13742 partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
13743 partial_spec_args = tsubst_template_args
13744 (partial_spec_args, outer_args, tf_none, NULL_TREE);
13746 /* PARMS already refers to just the innermost parms, but the
13747 template parms in partial_spec_args had their levels lowered
13748 by tsubst, so we need to do the same for the parm list. We
13749 can't just tsubst the TREE_VEC itself, as tsubst wants to
13750 treat a TREE_VEC as an argument vector. */
13751 parms = copy_node (parms);
13752 for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
13753 TREE_VEC_ELT (parms, i) =
13754 tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
13756 --processing_template_decl;
13758 spec_args = get_class_bindings (parms,
13759 partial_spec_args,
13760 args);
13761 if (spec_args)
13763 if (outer_args)
13764 spec_args = add_to_template_args (outer_args, spec_args);
13765 list = tree_cons (spec_args, TREE_VALUE (t), list);
13766 TREE_TYPE (list) = TREE_TYPE (t);
13770 if (! list)
13771 return NULL_TREE;
13773 ambiguous_p = false;
13774 t = list;
13775 champ = t;
13776 t = TREE_CHAIN (t);
13777 for (; t; t = TREE_CHAIN (t))
13779 fate = more_specialized_class (champ, t);
13780 if (fate == 1)
13782 else
13784 if (fate == 0)
13786 t = TREE_CHAIN (t);
13787 if (! t)
13789 ambiguous_p = true;
13790 break;
13793 champ = t;
13797 if (!ambiguous_p)
13798 for (t = list; t && t != champ; t = TREE_CHAIN (t))
13800 fate = more_specialized_class (champ, t);
13801 if (fate != 1)
13803 ambiguous_p = true;
13804 break;
13808 if (ambiguous_p)
13810 const char *str = "candidates are:";
13811 error ("ambiguous class template instantiation for %q#T", type);
13812 for (t = list; t; t = TREE_CHAIN (t))
13814 error ("%s %+#T", str, TREE_TYPE (t));
13815 str = " ";
13817 return error_mark_node;
13820 return champ;
13823 /* Explicitly instantiate DECL. */
13825 void
13826 do_decl_instantiation (tree decl, tree storage)
13828 tree result = NULL_TREE;
13829 int extern_p = 0;
13831 if (!decl || decl == error_mark_node)
13832 /* An error occurred, for which grokdeclarator has already issued
13833 an appropriate message. */
13834 return;
13835 else if (! DECL_LANG_SPECIFIC (decl))
13837 error ("explicit instantiation of non-template %q#D", decl);
13838 return;
13840 else if (TREE_CODE (decl) == VAR_DECL)
13842 /* There is an asymmetry here in the way VAR_DECLs and
13843 FUNCTION_DECLs are handled by grokdeclarator. In the case of
13844 the latter, the DECL we get back will be marked as a
13845 template instantiation, and the appropriate
13846 DECL_TEMPLATE_INFO will be set up. This does not happen for
13847 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
13848 should handle VAR_DECLs as it currently handles
13849 FUNCTION_DECLs. */
13850 result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
13851 if (!result || TREE_CODE (result) != VAR_DECL)
13853 error ("no matching template for %qD found", decl);
13854 return;
13856 if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
13858 error ("type %qT for explicit instantiation %qD does not match "
13859 "declared type %qT", TREE_TYPE (result), decl,
13860 TREE_TYPE (decl));
13861 return;
13864 else if (TREE_CODE (decl) != FUNCTION_DECL)
13866 error ("explicit instantiation of %q#D", decl);
13867 return;
13869 else
13870 result = decl;
13872 /* Check for various error cases. Note that if the explicit
13873 instantiation is valid the RESULT will currently be marked as an
13874 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
13875 until we get here. */
13877 if (DECL_TEMPLATE_SPECIALIZATION (result))
13879 /* DR 259 [temp.spec].
13881 Both an explicit instantiation and a declaration of an explicit
13882 specialization shall not appear in a program unless the explicit
13883 instantiation follows a declaration of the explicit specialization.
13885 For a given set of template parameters, if an explicit
13886 instantiation of a template appears after a declaration of an
13887 explicit specialization for that template, the explicit
13888 instantiation has no effect. */
13889 return;
13891 else if (DECL_EXPLICIT_INSTANTIATION (result))
13893 /* [temp.spec]
13895 No program shall explicitly instantiate any template more
13896 than once.
13898 We check DECL_NOT_REALLY_EXTERN so as not to complain when
13899 the first instantiation was `extern' and the second is not,
13900 and EXTERN_P for the opposite case. */
13901 if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
13902 pedwarn ("duplicate explicit instantiation of %q#D", result);
13903 /* If an "extern" explicit instantiation follows an ordinary
13904 explicit instantiation, the template is instantiated. */
13905 if (extern_p)
13906 return;
13908 else if (!DECL_IMPLICIT_INSTANTIATION (result))
13910 error ("no matching template for %qD found", result);
13911 return;
13913 else if (!DECL_TEMPLATE_INFO (result))
13915 pedwarn ("explicit instantiation of non-template %q#D", result);
13916 return;
13919 if (storage == NULL_TREE)
13921 else if (storage == ridpointers[(int) RID_EXTERN])
13923 if (pedantic && !in_system_header)
13924 pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
13925 "instantiations");
13926 extern_p = 1;
13928 else
13929 error ("storage class %qD applied to template instantiation", storage);
13931 check_explicit_instantiation_namespace (result);
13932 mark_decl_instantiated (result, extern_p);
13933 if (! extern_p)
13934 instantiate_decl (result, /*defer_ok=*/1,
13935 /*expl_inst_class_mem_p=*/false);
13938 static void
13939 mark_class_instantiated (tree t, int extern_p)
13941 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
13942 SET_CLASSTYPE_INTERFACE_KNOWN (t);
13943 CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
13944 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
13945 if (! extern_p)
13947 CLASSTYPE_DEBUG_REQUESTED (t) = 1;
13948 rest_of_type_compilation (t, 1);
13952 /* Called from do_type_instantiation through binding_table_foreach to
13953 do recursive instantiation for the type bound in ENTRY. */
13954 static void
13955 bt_instantiate_type_proc (binding_entry entry, void *data)
13957 tree storage = *(tree *) data;
13959 if (IS_AGGR_TYPE (entry->type)
13960 && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
13961 do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
13964 /* Called from do_type_instantiation to instantiate a member
13965 (a member function or a static member variable) of an
13966 explicitly instantiated class template. */
13967 static void
13968 instantiate_class_member (tree decl, int extern_p)
13970 mark_decl_instantiated (decl, extern_p);
13971 if (! extern_p)
13972 instantiate_decl (decl, /*defer_ok=*/1,
13973 /*expl_inst_class_mem_p=*/true);
13976 /* Perform an explicit instantiation of template class T. STORAGE, if
13977 non-null, is the RID for extern, inline or static. COMPLAIN is
13978 nonzero if this is called from the parser, zero if called recursively,
13979 since the standard is unclear (as detailed below). */
13981 void
13982 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
13984 int extern_p = 0;
13985 int nomem_p = 0;
13986 int static_p = 0;
13987 int previous_instantiation_extern_p = 0;
13989 if (TREE_CODE (t) == TYPE_DECL)
13990 t = TREE_TYPE (t);
13992 if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
13994 error ("explicit instantiation of non-template type %qT", t);
13995 return;
13998 complete_type (t);
14000 if (!COMPLETE_TYPE_P (t))
14002 if (complain & tf_error)
14003 error ("explicit instantiation of %q#T before definition of template",
14005 return;
14008 if (storage != NULL_TREE)
14010 if (pedantic && !in_system_header)
14011 pedwarn("ISO C++ forbids the use of %qE on explicit instantiations",
14012 storage);
14014 if (storage == ridpointers[(int) RID_INLINE])
14015 nomem_p = 1;
14016 else if (storage == ridpointers[(int) RID_EXTERN])
14017 extern_p = 1;
14018 else if (storage == ridpointers[(int) RID_STATIC])
14019 static_p = 1;
14020 else
14022 error ("storage class %qD applied to template instantiation",
14023 storage);
14024 extern_p = 0;
14028 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
14030 /* DR 259 [temp.spec].
14032 Both an explicit instantiation and a declaration of an explicit
14033 specialization shall not appear in a program unless the explicit
14034 instantiation follows a declaration of the explicit specialization.
14036 For a given set of template parameters, if an explicit
14037 instantiation of a template appears after a declaration of an
14038 explicit specialization for that template, the explicit
14039 instantiation has no effect. */
14040 return;
14042 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
14044 /* [temp.spec]
14046 No program shall explicitly instantiate any template more
14047 than once.
14049 If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
14050 instantiation was `extern'. If EXTERN_P then the second is.
14051 These cases are OK. */
14052 previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
14054 if (!previous_instantiation_extern_p && !extern_p
14055 && (complain & tf_error))
14056 pedwarn ("duplicate explicit instantiation of %q#T", t);
14058 /* If we've already instantiated the template, just return now. */
14059 if (!CLASSTYPE_INTERFACE_ONLY (t))
14060 return;
14063 check_explicit_instantiation_namespace (TYPE_NAME (t));
14064 mark_class_instantiated (t, extern_p);
14066 if (nomem_p)
14067 return;
14070 tree tmp;
14072 /* In contrast to implicit instantiation, where only the
14073 declarations, and not the definitions, of members are
14074 instantiated, we have here:
14076 [temp.explicit]
14078 The explicit instantiation of a class template specialization
14079 implies the instantiation of all of its members not
14080 previously explicitly specialized in the translation unit
14081 containing the explicit instantiation.
14083 Of course, we can't instantiate member template classes, since
14084 we don't have any arguments for them. Note that the standard
14085 is unclear on whether the instantiation of the members are
14086 *explicit* instantiations or not. However, the most natural
14087 interpretation is that it should be an explicit instantiation. */
14089 if (! static_p)
14090 for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
14091 if (TREE_CODE (tmp) == FUNCTION_DECL
14092 && DECL_TEMPLATE_INSTANTIATION (tmp))
14093 instantiate_class_member (tmp, extern_p);
14095 for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
14096 if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
14097 instantiate_class_member (tmp, extern_p);
14099 if (CLASSTYPE_NESTED_UTDS (t))
14100 binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
14101 bt_instantiate_type_proc, &storage);
14105 /* Given a function DECL, which is a specialization of TMPL, modify
14106 DECL to be a re-instantiation of TMPL with the same template
14107 arguments. TMPL should be the template into which tsubst'ing
14108 should occur for DECL, not the most general template.
14110 One reason for doing this is a scenario like this:
14112 template <class T>
14113 void f(const T&, int i);
14115 void g() { f(3, 7); }
14117 template <class T>
14118 void f(const T& t, const int i) { }
14120 Note that when the template is first instantiated, with
14121 instantiate_template, the resulting DECL will have no name for the
14122 first parameter, and the wrong type for the second. So, when we go
14123 to instantiate the DECL, we regenerate it. */
14125 static void
14126 regenerate_decl_from_template (tree decl, tree tmpl)
14128 /* The arguments used to instantiate DECL, from the most general
14129 template. */
14130 tree args;
14131 tree code_pattern;
14133 args = DECL_TI_ARGS (decl);
14134 code_pattern = DECL_TEMPLATE_RESULT (tmpl);
14136 /* Make sure that we can see identifiers, and compute access
14137 correctly. */
14138 push_access_scope (decl);
14140 if (TREE_CODE (decl) == FUNCTION_DECL)
14142 tree decl_parm;
14143 tree pattern_parm;
14144 tree specs;
14145 int args_depth;
14146 int parms_depth;
14148 args_depth = TMPL_ARGS_DEPTH (args);
14149 parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
14150 if (args_depth > parms_depth)
14151 args = get_innermost_template_args (args, parms_depth);
14153 specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
14154 args, tf_error, NULL_TREE);
14155 if (specs)
14156 TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
14157 specs);
14159 /* Merge parameter declarations. */
14160 decl_parm = skip_artificial_parms_for (decl,
14161 DECL_ARGUMENTS (decl));
14162 pattern_parm
14163 = skip_artificial_parms_for (code_pattern,
14164 DECL_ARGUMENTS (code_pattern));
14165 while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
14167 tree parm_type;
14168 tree attributes;
14170 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14171 DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
14172 parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
14173 NULL_TREE);
14174 parm_type = type_decays_to (parm_type);
14175 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14176 TREE_TYPE (decl_parm) = parm_type;
14177 attributes = DECL_ATTRIBUTES (pattern_parm);
14178 if (DECL_ATTRIBUTES (decl_parm) != attributes)
14180 DECL_ATTRIBUTES (decl_parm) = attributes;
14181 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14183 decl_parm = TREE_CHAIN (decl_parm);
14184 pattern_parm = TREE_CHAIN (pattern_parm);
14186 /* Merge any parameters that match with the function parameter
14187 pack. */
14188 if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
14190 int i, len;
14191 tree expanded_types;
14192 /* Expand the TYPE_PACK_EXPANSION that provides the types for
14193 the parameters in this function parameter pack. */
14194 expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm),
14195 args, tf_error, NULL_TREE);
14196 len = TREE_VEC_LENGTH (expanded_types);
14197 for (i = 0; i < len; i++)
14199 tree parm_type;
14200 tree attributes;
14202 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14203 /* Rename the parameter to include the index. */
14204 DECL_NAME (decl_parm) =
14205 make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
14206 parm_type = TREE_VEC_ELT (expanded_types, i);
14207 parm_type = type_decays_to (parm_type);
14208 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14209 TREE_TYPE (decl_parm) = parm_type;
14210 attributes = DECL_ATTRIBUTES (pattern_parm);
14211 if (DECL_ATTRIBUTES (decl_parm) != attributes)
14213 DECL_ATTRIBUTES (decl_parm) = attributes;
14214 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14216 decl_parm = TREE_CHAIN (decl_parm);
14219 /* Merge additional specifiers from the CODE_PATTERN. */
14220 if (DECL_DECLARED_INLINE_P (code_pattern)
14221 && !DECL_DECLARED_INLINE_P (decl))
14222 DECL_DECLARED_INLINE_P (decl) = 1;
14223 if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
14224 DECL_INLINE (decl) = 1;
14226 else if (TREE_CODE (decl) == VAR_DECL)
14227 DECL_INITIAL (decl) =
14228 tsubst_expr (DECL_INITIAL (code_pattern), args,
14229 tf_error, DECL_TI_TEMPLATE (decl),
14230 /*integral_constant_expression_p=*/false);
14231 else
14232 gcc_unreachable ();
14234 pop_access_scope (decl);
14237 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
14238 substituted to get DECL. */
14240 tree
14241 template_for_substitution (tree decl)
14243 tree tmpl = DECL_TI_TEMPLATE (decl);
14245 /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
14246 for the instantiation. This is not always the most general
14247 template. Consider, for example:
14249 template <class T>
14250 struct S { template <class U> void f();
14251 template <> void f<int>(); };
14253 and an instantiation of S<double>::f<int>. We want TD to be the
14254 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
14255 while (/* An instantiation cannot have a definition, so we need a
14256 more general template. */
14257 DECL_TEMPLATE_INSTANTIATION (tmpl)
14258 /* We must also deal with friend templates. Given:
14260 template <class T> struct S {
14261 template <class U> friend void f() {};
14264 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
14265 so far as the language is concerned, but that's still
14266 where we get the pattern for the instantiation from. On
14267 other hand, if the definition comes outside the class, say:
14269 template <class T> struct S {
14270 template <class U> friend void f();
14272 template <class U> friend void f() {}
14274 we don't need to look any further. That's what the check for
14275 DECL_INITIAL is for. */
14276 || (TREE_CODE (decl) == FUNCTION_DECL
14277 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
14278 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
14280 /* The present template, TD, should not be a definition. If it
14281 were a definition, we should be using it! Note that we
14282 cannot restructure the loop to just keep going until we find
14283 a template with a definition, since that might go too far if
14284 a specialization was declared, but not defined. */
14285 gcc_assert (TREE_CODE (decl) != VAR_DECL
14286 || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
14288 /* Fetch the more general template. */
14289 tmpl = DECL_TI_TEMPLATE (tmpl);
14292 return tmpl;
14295 /* Produce the definition of D, a _DECL generated from a template. If
14296 DEFER_OK is nonzero, then we don't have to actually do the
14297 instantiation now; we just have to do it sometime. Normally it is
14298 an error if this is an explicit instantiation but D is undefined.
14299 EXPL_INST_CLASS_MEM_P is true iff D is a member of an
14300 explicitly instantiated class template. */
14302 tree
14303 instantiate_decl (tree d, int defer_ok,
14304 bool expl_inst_class_mem_p)
14306 tree tmpl = DECL_TI_TEMPLATE (d);
14307 tree gen_args;
14308 tree args;
14309 tree td;
14310 tree code_pattern;
14311 tree spec;
14312 tree gen_tmpl;
14313 bool pattern_defined;
14314 int need_push;
14315 location_t saved_loc = input_location;
14316 int saved_in_system_header = in_system_header;
14317 bool external_p;
14319 /* This function should only be used to instantiate templates for
14320 functions and static member variables. */
14321 gcc_assert (TREE_CODE (d) == FUNCTION_DECL
14322 || TREE_CODE (d) == VAR_DECL);
14324 /* Variables are never deferred; if instantiation is required, they
14325 are instantiated right away. That allows for better code in the
14326 case that an expression refers to the value of the variable --
14327 if the variable has a constant value the referring expression can
14328 take advantage of that fact. */
14329 if (TREE_CODE (d) == VAR_DECL)
14330 defer_ok = 0;
14332 /* Don't instantiate cloned functions. Instead, instantiate the
14333 functions they cloned. */
14334 if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
14335 d = DECL_CLONED_FUNCTION (d);
14337 if (DECL_TEMPLATE_INSTANTIATED (d))
14338 /* D has already been instantiated. It might seem reasonable to
14339 check whether or not D is an explicit instantiation, and, if so,
14340 stop here. But when an explicit instantiation is deferred
14341 until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
14342 is set, even though we still need to do the instantiation. */
14343 return d;
14345 /* If we already have a specialization of this declaration, then
14346 there's no reason to instantiate it. Note that
14347 retrieve_specialization gives us both instantiations and
14348 specializations, so we must explicitly check
14349 DECL_TEMPLATE_SPECIALIZATION. */
14350 gen_tmpl = most_general_template (tmpl);
14351 gen_args = DECL_TI_ARGS (d);
14352 spec = retrieve_specialization (gen_tmpl, gen_args,
14353 /*class_specializations_p=*/false);
14354 if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
14355 return spec;
14357 /* This needs to happen before any tsubsting. */
14358 if (! push_tinst_level (d))
14359 return d;
14361 timevar_push (TV_PARSE);
14363 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
14364 for the instantiation. */
14365 td = template_for_substitution (d);
14366 code_pattern = DECL_TEMPLATE_RESULT (td);
14368 /* We should never be trying to instantiate a member of a class
14369 template or partial specialization. */
14370 gcc_assert (d != code_pattern);
14372 if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
14373 || DECL_TEMPLATE_SPECIALIZATION (td))
14374 /* In the case of a friend template whose definition is provided
14375 outside the class, we may have too many arguments. Drop the
14376 ones we don't need. The same is true for specializations. */
14377 args = get_innermost_template_args
14378 (gen_args, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td)));
14379 else
14380 args = gen_args;
14382 if (TREE_CODE (d) == FUNCTION_DECL)
14383 pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
14384 else
14385 pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
14387 /* We may be in the middle of deferred access check. Disable it now. */
14388 push_deferring_access_checks (dk_no_deferred);
14390 /* Unless an explicit instantiation directive has already determined
14391 the linkage of D, remember that a definition is available for
14392 this entity. */
14393 if (pattern_defined
14394 && !DECL_INTERFACE_KNOWN (d)
14395 && !DECL_NOT_REALLY_EXTERN (d))
14396 mark_definable (d);
14398 input_location = DECL_SOURCE_LOCATION (d);
14399 in_system_header = DECL_IN_SYSTEM_HEADER (d);
14401 /* If D is a member of an explicitly instantiated class template,
14402 and no definition is available, treat it like an implicit
14403 instantiation. */
14404 if (!pattern_defined && expl_inst_class_mem_p
14405 && DECL_EXPLICIT_INSTANTIATION (d))
14407 DECL_NOT_REALLY_EXTERN (d) = 0;
14408 DECL_INTERFACE_KNOWN (d) = 0;
14409 SET_DECL_IMPLICIT_INSTANTIATION (d);
14412 if (!defer_ok)
14414 /* Recheck the substitutions to obtain any warning messages
14415 about ignoring cv qualifiers. */
14416 tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
14417 tree type = TREE_TYPE (gen);
14419 /* Make sure that we can see identifiers, and compute access
14420 correctly. D is already the target FUNCTION_DECL with the
14421 right context. */
14422 push_access_scope (d);
14424 if (TREE_CODE (gen) == FUNCTION_DECL)
14426 tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
14427 tsubst_exception_specification (type, gen_args, tf_warning_or_error,
14429 /* Don't simply tsubst the function type, as that will give
14430 duplicate warnings about poor parameter qualifications.
14431 The function arguments are the same as the decl_arguments
14432 without the top level cv qualifiers. */
14433 type = TREE_TYPE (type);
14435 tsubst (type, gen_args, tf_warning_or_error, d);
14437 pop_access_scope (d);
14440 /* Check to see whether we know that this template will be
14441 instantiated in some other file, as with "extern template"
14442 extension. */
14443 external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
14444 /* In general, we do not instantiate such templates... */
14445 if (external_p
14446 /* ... but we instantiate inline functions so that we can inline
14447 them and ... */
14448 && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d))
14449 /* ... we instantiate static data members whose values are
14450 needed in integral constant expressions. */
14451 && ! (TREE_CODE (d) == VAR_DECL
14452 && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (d)))
14453 goto out;
14454 /* Defer all other templates, unless we have been explicitly
14455 forbidden from doing so. */
14456 if (/* If there is no definition, we cannot instantiate the
14457 template. */
14458 ! pattern_defined
14459 /* If it's OK to postpone instantiation, do so. */
14460 || defer_ok
14461 /* If this is a static data member that will be defined
14462 elsewhere, we don't want to instantiate the entire data
14463 member, but we do want to instantiate the initializer so that
14464 we can substitute that elsewhere. */
14465 || (external_p && TREE_CODE (d) == VAR_DECL))
14467 /* The definition of the static data member is now required so
14468 we must substitute the initializer. */
14469 if (TREE_CODE (d) == VAR_DECL
14470 && !DECL_INITIAL (d)
14471 && DECL_INITIAL (code_pattern))
14473 tree ns;
14474 tree init;
14476 ns = decl_namespace_context (d);
14477 push_nested_namespace (ns);
14478 push_nested_class (DECL_CONTEXT (d));
14479 init = tsubst_expr (DECL_INITIAL (code_pattern),
14480 args,
14481 tf_warning_or_error, NULL_TREE,
14482 /*integral_constant_expression_p=*/false);
14483 cp_finish_decl (d, init, /*init_const_expr_p=*/false,
14484 /*asmspec_tree=*/NULL_TREE,
14485 LOOKUP_ONLYCONVERTING);
14486 pop_nested_class ();
14487 pop_nested_namespace (ns);
14490 /* We restore the source position here because it's used by
14491 add_pending_template. */
14492 input_location = saved_loc;
14494 if (at_eof && !pattern_defined
14495 && DECL_EXPLICIT_INSTANTIATION (d))
14496 /* [temp.explicit]
14498 The definition of a non-exported function template, a
14499 non-exported member function template, or a non-exported
14500 member function or static data member of a class template
14501 shall be present in every translation unit in which it is
14502 explicitly instantiated. */
14503 pedwarn
14504 ("explicit instantiation of %qD but no definition available", d);
14506 /* ??? Historically, we have instantiated inline functions, even
14507 when marked as "extern template". */
14508 if (!(external_p && TREE_CODE (d) == VAR_DECL))
14509 add_pending_template (d);
14510 goto out;
14512 /* Tell the repository that D is available in this translation unit
14513 -- and see if it is supposed to be instantiated here. */
14514 if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
14516 /* In a PCH file, despite the fact that the repository hasn't
14517 requested instantiation in the PCH it is still possible that
14518 an instantiation will be required in a file that includes the
14519 PCH. */
14520 if (pch_file)
14521 add_pending_template (d);
14522 /* Instantiate inline functions so that the inliner can do its
14523 job, even though we'll not be emitting a copy of this
14524 function. */
14525 if (!(TREE_CODE (d) == FUNCTION_DECL
14526 && flag_inline_trees
14527 && DECL_DECLARED_INLINE_P (d)))
14528 goto out;
14531 need_push = !cfun || !global_bindings_p ();
14532 if (need_push)
14533 push_to_top_level ();
14535 /* Mark D as instantiated so that recursive calls to
14536 instantiate_decl do not try to instantiate it again. */
14537 DECL_TEMPLATE_INSTANTIATED (d) = 1;
14539 /* Regenerate the declaration in case the template has been modified
14540 by a subsequent redeclaration. */
14541 regenerate_decl_from_template (d, td);
14543 /* We already set the file and line above. Reset them now in case
14544 they changed as a result of calling regenerate_decl_from_template. */
14545 input_location = DECL_SOURCE_LOCATION (d);
14547 if (TREE_CODE (d) == VAR_DECL)
14549 tree init;
14551 /* Clear out DECL_RTL; whatever was there before may not be right
14552 since we've reset the type of the declaration. */
14553 SET_DECL_RTL (d, NULL_RTX);
14554 DECL_IN_AGGR_P (d) = 0;
14556 /* The initializer is placed in DECL_INITIAL by
14557 regenerate_decl_from_template. Pull it out so that
14558 finish_decl can process it. */
14559 init = DECL_INITIAL (d);
14560 DECL_INITIAL (d) = NULL_TREE;
14561 DECL_INITIALIZED_P (d) = 0;
14563 /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
14564 initializer. That function will defer actual emission until
14565 we have a chance to determine linkage. */
14566 DECL_EXTERNAL (d) = 0;
14568 /* Enter the scope of D so that access-checking works correctly. */
14569 push_nested_class (DECL_CONTEXT (d));
14570 finish_decl (d, init, NULL_TREE);
14571 pop_nested_class ();
14573 else if (TREE_CODE (d) == FUNCTION_DECL)
14575 htab_t saved_local_specializations;
14576 tree subst_decl;
14577 tree tmpl_parm;
14578 tree spec_parm;
14580 /* Save away the current list, in case we are instantiating one
14581 template from within the body of another. */
14582 saved_local_specializations = local_specializations;
14584 /* Set up the list of local specializations. */
14585 local_specializations = htab_create (37,
14586 hash_local_specialization,
14587 eq_local_specializations,
14588 NULL);
14590 /* Set up context. */
14591 start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
14593 /* Create substitution entries for the parameters. */
14594 subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
14595 tmpl_parm = DECL_ARGUMENTS (subst_decl);
14596 spec_parm = DECL_ARGUMENTS (d);
14597 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
14599 register_local_specialization (spec_parm, tmpl_parm);
14600 spec_parm = skip_artificial_parms_for (d, spec_parm);
14601 tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
14603 while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
14605 register_local_specialization (spec_parm, tmpl_parm);
14606 tmpl_parm = TREE_CHAIN (tmpl_parm);
14607 spec_parm = TREE_CHAIN (spec_parm);
14609 if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
14611 /* Collect all of the extra "packed" parameters into an
14612 argument pack. */
14613 tree parmvec;
14614 tree parmtypevec;
14615 tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
14616 tree argtypepack = make_node (TYPE_ARGUMENT_PACK);
14617 int i, len = 0;
14618 tree t;
14620 /* Count how many parameters remain. */
14621 for (t = spec_parm; t; t = TREE_CHAIN (t))
14622 len++;
14624 /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters. */
14625 parmvec = make_tree_vec (len);
14626 parmtypevec = make_tree_vec (len);
14627 for(i = 0; i < len; i++, spec_parm = TREE_CHAIN (spec_parm))
14629 TREE_VEC_ELT (parmvec, i) = spec_parm;
14630 TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
14633 /* Build the argument packs. */
14634 SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
14635 SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
14636 TREE_TYPE (argpack) = argtypepack;
14638 /* Register the (value) argument pack as a specialization of
14639 TMPL_PARM, then move on. */
14640 register_local_specialization (argpack, tmpl_parm);
14641 tmpl_parm = TREE_CHAIN (tmpl_parm);
14643 gcc_assert (!spec_parm);
14645 /* Substitute into the body of the function. */
14646 tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
14647 tf_warning_or_error, tmpl,
14648 /*integral_constant_expression_p=*/false);
14650 /* Set the current input_location to the end of the function
14651 so that finish_function knows where we are. */
14652 input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
14654 /* We don't need the local specializations any more. */
14655 htab_delete (local_specializations);
14656 local_specializations = saved_local_specializations;
14658 /* Finish the function. */
14659 d = finish_function (0);
14660 expand_or_defer_fn (d);
14663 /* We're not deferring instantiation any more. */
14664 TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
14666 if (need_push)
14667 pop_from_top_level ();
14669 out:
14670 input_location = saved_loc;
14671 in_system_header = saved_in_system_header;
14672 pop_deferring_access_checks ();
14673 pop_tinst_level ();
14675 timevar_pop (TV_PARSE);
14677 return d;
14680 /* Run through the list of templates that we wish we could
14681 instantiate, and instantiate any we can. RETRIES is the
14682 number of times we retry pending template instantiation. */
14684 void
14685 instantiate_pending_templates (int retries)
14687 int reconsider;
14688 location_t saved_loc = input_location;
14689 int saved_in_system_header = in_system_header;
14691 /* Instantiating templates may trigger vtable generation. This in turn
14692 may require further template instantiations. We place a limit here
14693 to avoid infinite loop. */
14694 if (pending_templates && retries >= max_tinst_depth)
14696 tree decl = pending_templates->tinst->decl;
14698 error ("template instantiation depth exceeds maximum of %d"
14699 " instantiating %q+D, possibly from virtual table generation"
14700 " (use -ftemplate-depth-NN to increase the maximum)",
14701 max_tinst_depth, decl);
14702 if (TREE_CODE (decl) == FUNCTION_DECL)
14703 /* Pretend that we defined it. */
14704 DECL_INITIAL (decl) = error_mark_node;
14705 return;
14710 struct pending_template **t = &pending_templates;
14711 struct pending_template *last = NULL;
14712 reconsider = 0;
14713 while (*t)
14715 tree instantiation = reopen_tinst_level ((*t)->tinst);
14716 bool complete = false;
14718 if (TYPE_P (instantiation))
14720 tree fn;
14722 if (!COMPLETE_TYPE_P (instantiation))
14724 instantiate_class_template (instantiation);
14725 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
14726 for (fn = TYPE_METHODS (instantiation);
14728 fn = TREE_CHAIN (fn))
14729 if (! DECL_ARTIFICIAL (fn))
14730 instantiate_decl (fn,
14731 /*defer_ok=*/0,
14732 /*expl_inst_class_mem_p=*/false);
14733 if (COMPLETE_TYPE_P (instantiation))
14734 reconsider = 1;
14737 complete = COMPLETE_TYPE_P (instantiation);
14739 else
14741 if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
14742 && !DECL_TEMPLATE_INSTANTIATED (instantiation))
14744 instantiation
14745 = instantiate_decl (instantiation,
14746 /*defer_ok=*/0,
14747 /*expl_inst_class_mem_p=*/false);
14748 if (DECL_TEMPLATE_INSTANTIATED (instantiation))
14749 reconsider = 1;
14752 complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
14753 || DECL_TEMPLATE_INSTANTIATED (instantiation));
14756 if (complete)
14757 /* If INSTANTIATION has been instantiated, then we don't
14758 need to consider it again in the future. */
14759 *t = (*t)->next;
14760 else
14762 last = *t;
14763 t = &(*t)->next;
14765 tinst_depth = 0;
14766 current_tinst_level = NULL;
14768 last_pending_template = last;
14770 while (reconsider);
14772 input_location = saved_loc;
14773 in_system_header = saved_in_system_header;
14776 /* Substitute ARGVEC into T, which is a list of initializers for
14777 either base class or a non-static data member. The TREE_PURPOSEs
14778 are DECLs, and the TREE_VALUEs are the initializer values. Used by
14779 instantiate_decl. */
14781 static tree
14782 tsubst_initializer_list (tree t, tree argvec)
14784 tree inits = NULL_TREE;
14786 for (; t; t = TREE_CHAIN (t))
14788 tree decl;
14789 tree init;
14790 tree expanded_bases = NULL_TREE;
14791 tree expanded_arguments = NULL_TREE;
14792 int i, len = 1;
14794 if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
14796 tree expr;
14797 tree arg;
14799 /* Expand the base class expansion type into separate base
14800 classes. */
14801 expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
14802 tf_warning_or_error,
14803 NULL_TREE);
14804 if (expanded_bases == error_mark_node)
14805 continue;
14807 /* We'll be building separate TREE_LISTs of arguments for
14808 each base. */
14809 len = TREE_VEC_LENGTH (expanded_bases);
14810 expanded_arguments = make_tree_vec (len);
14811 for (i = 0; i < len; i++)
14812 TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
14814 /* Build a dummy EXPR_PACK_EXPANSION that will be used to
14815 expand each argument in the TREE_VALUE of t. */
14816 expr = make_node (EXPR_PACK_EXPANSION);
14817 PACK_EXPANSION_PARAMETER_PACKS (expr) =
14818 PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
14820 /* Substitute parameter packs into each argument in the
14821 TREE_LIST. */
14822 in_base_initializer = 1;
14823 for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
14825 tree expanded_exprs;
14827 /* Expand the argument. */
14828 SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
14829 expanded_exprs = tsubst_pack_expansion (expr, argvec,
14830 tf_warning_or_error,
14831 NULL_TREE);
14833 /* Prepend each of the expanded expressions to the
14834 corresponding TREE_LIST in EXPANDED_ARGUMENTS. */
14835 for (i = 0; i < len; i++)
14837 TREE_VEC_ELT (expanded_arguments, i) =
14838 tree_cons (NULL_TREE, TREE_VEC_ELT (expanded_exprs, i),
14839 TREE_VEC_ELT (expanded_arguments, i));
14842 in_base_initializer = 0;
14844 /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
14845 since we built them backwards. */
14846 for (i = 0; i < len; i++)
14848 TREE_VEC_ELT (expanded_arguments, i) =
14849 nreverse (TREE_VEC_ELT (expanded_arguments, i));
14853 for (i = 0; i < len; ++i)
14855 if (expanded_bases)
14857 decl = TREE_VEC_ELT (expanded_bases, i);
14858 decl = expand_member_init (decl);
14859 init = TREE_VEC_ELT (expanded_arguments, i);
14861 else
14863 decl = tsubst_copy (TREE_PURPOSE (t), argvec,
14864 tf_warning_or_error, NULL_TREE);
14866 decl = expand_member_init (decl);
14867 if (decl && !DECL_P (decl))
14868 in_base_initializer = 1;
14870 init = tsubst_expr (TREE_VALUE (t), argvec,
14871 tf_warning_or_error, NULL_TREE,
14872 /*integral_constant_expression_p=*/false);
14873 in_base_initializer = 0;
14876 if (decl)
14878 init = build_tree_list (decl, init);
14879 TREE_CHAIN (init) = inits;
14880 inits = init;
14884 return inits;
14887 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
14889 static void
14890 set_current_access_from_decl (tree decl)
14892 if (TREE_PRIVATE (decl))
14893 current_access_specifier = access_private_node;
14894 else if (TREE_PROTECTED (decl))
14895 current_access_specifier = access_protected_node;
14896 else
14897 current_access_specifier = access_public_node;
14900 /* Instantiate an enumerated type. TAG is the template type, NEWTAG
14901 is the instantiation (which should have been created with
14902 start_enum) and ARGS are the template arguments to use. */
14904 static void
14905 tsubst_enum (tree tag, tree newtag, tree args)
14907 tree e;
14909 for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
14911 tree value;
14912 tree decl;
14914 decl = TREE_VALUE (e);
14915 /* Note that in a template enum, the TREE_VALUE is the
14916 CONST_DECL, not the corresponding INTEGER_CST. */
14917 value = tsubst_expr (DECL_INITIAL (decl),
14918 args, tf_warning_or_error, NULL_TREE,
14919 /*integral_constant_expression_p=*/true);
14921 /* Give this enumeration constant the correct access. */
14922 set_current_access_from_decl (decl);
14924 /* Actually build the enumerator itself. */
14925 build_enumerator (DECL_NAME (decl), value, newtag);
14928 finish_enum (newtag);
14929 DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
14930 = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
14933 /* DECL is a FUNCTION_DECL that is a template specialization. Return
14934 its type -- but without substituting the innermost set of template
14935 arguments. So, innermost set of template parameters will appear in
14936 the type. */
14938 tree
14939 get_mostly_instantiated_function_type (tree decl)
14941 tree fn_type;
14942 tree tmpl;
14943 tree targs;
14944 tree tparms;
14945 int parm_depth;
14947 tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
14948 targs = DECL_TI_ARGS (decl);
14949 tparms = DECL_TEMPLATE_PARMS (tmpl);
14950 parm_depth = TMPL_PARMS_DEPTH (tparms);
14952 /* There should be as many levels of arguments as there are levels
14953 of parameters. */
14954 gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
14956 fn_type = TREE_TYPE (tmpl);
14958 if (parm_depth == 1)
14959 /* No substitution is necessary. */
14961 else
14963 int i, save_access_control;
14964 tree partial_args;
14966 /* Replace the innermost level of the TARGS with NULL_TREEs to
14967 let tsubst know not to substitute for those parameters. */
14968 partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
14969 for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
14970 SET_TMPL_ARGS_LEVEL (partial_args, i,
14971 TMPL_ARGS_LEVEL (targs, i));
14972 SET_TMPL_ARGS_LEVEL (partial_args,
14973 TMPL_ARGS_DEPTH (targs),
14974 make_tree_vec (DECL_NTPARMS (tmpl)));
14976 /* Disable access control as this function is used only during
14977 name-mangling. */
14978 save_access_control = flag_access_control;
14979 flag_access_control = 0;
14981 ++processing_template_decl;
14982 /* Now, do the (partial) substitution to figure out the
14983 appropriate function type. */
14984 fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
14985 --processing_template_decl;
14987 /* Substitute into the template parameters to obtain the real
14988 innermost set of parameters. This step is important if the
14989 innermost set of template parameters contains value
14990 parameters whose types depend on outer template parameters. */
14991 TREE_VEC_LENGTH (partial_args)--;
14992 tparms = tsubst_template_parms (tparms, partial_args, tf_error);
14994 flag_access_control = save_access_control;
14997 return fn_type;
15000 /* Return truthvalue if we're processing a template different from
15001 the last one involved in diagnostics. */
15003 problematic_instantiation_changed (void)
15005 return last_template_error_tick != tinst_level_tick;
15008 /* Remember current template involved in diagnostics. */
15009 void
15010 record_last_problematic_instantiation (void)
15012 last_template_error_tick = tinst_level_tick;
15015 struct tinst_level *
15016 current_instantiation (void)
15018 return current_tinst_level;
15021 /* [temp.param] Check that template non-type parm TYPE is of an allowable
15022 type. Return zero for ok, nonzero for disallowed. Issue error and
15023 warning messages under control of COMPLAIN. */
15025 static int
15026 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
15028 if (INTEGRAL_TYPE_P (type))
15029 return 0;
15030 else if (POINTER_TYPE_P (type))
15031 return 0;
15032 else if (TYPE_PTR_TO_MEMBER_P (type))
15033 return 0;
15034 else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
15035 return 0;
15036 else if (TREE_CODE (type) == TYPENAME_TYPE)
15037 return 0;
15039 if (complain & tf_error)
15040 error ("%q#T is not a valid type for a template constant parameter", type);
15041 return 1;
15044 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
15045 Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
15047 static bool
15048 dependent_type_p_r (tree type)
15050 tree scope;
15052 /* [temp.dep.type]
15054 A type is dependent if it is:
15056 -- a template parameter. Template template parameters are types
15057 for us (since TYPE_P holds true for them) so we handle
15058 them here. */
15059 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
15060 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
15061 return true;
15062 /* -- a qualified-id with a nested-name-specifier which contains a
15063 class-name that names a dependent type or whose unqualified-id
15064 names a dependent type. */
15065 if (TREE_CODE (type) == TYPENAME_TYPE)
15066 return true;
15067 /* -- a cv-qualified type where the cv-unqualified type is
15068 dependent. */
15069 type = TYPE_MAIN_VARIANT (type);
15070 /* -- a compound type constructed from any dependent type. */
15071 if (TYPE_PTR_TO_MEMBER_P (type))
15072 return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
15073 || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
15074 (type)));
15075 else if (TREE_CODE (type) == POINTER_TYPE
15076 || TREE_CODE (type) == REFERENCE_TYPE)
15077 return dependent_type_p (TREE_TYPE (type));
15078 else if (TREE_CODE (type) == FUNCTION_TYPE
15079 || TREE_CODE (type) == METHOD_TYPE)
15081 tree arg_type;
15083 if (dependent_type_p (TREE_TYPE (type)))
15084 return true;
15085 for (arg_type = TYPE_ARG_TYPES (type);
15086 arg_type;
15087 arg_type = TREE_CHAIN (arg_type))
15088 if (dependent_type_p (TREE_VALUE (arg_type)))
15089 return true;
15090 return false;
15092 /* -- an array type constructed from any dependent type or whose
15093 size is specified by a constant expression that is
15094 value-dependent. */
15095 if (TREE_CODE (type) == ARRAY_TYPE)
15097 if (TYPE_DOMAIN (type)
15098 && ((value_dependent_expression_p
15099 (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
15100 || (type_dependent_expression_p
15101 (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
15102 return true;
15103 return dependent_type_p (TREE_TYPE (type));
15106 /* -- a template-id in which either the template name is a template
15107 parameter ... */
15108 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
15109 return true;
15110 /* ... or any of the template arguments is a dependent type or
15111 an expression that is type-dependent or value-dependent. */
15112 else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
15113 && (any_dependent_template_arguments_p
15114 (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
15115 return true;
15117 /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
15118 argument of the `typeof' expression is not type-dependent, then
15119 it should already been have resolved. */
15120 if (TREE_CODE (type) == TYPEOF_TYPE
15121 || TREE_CODE (type) == DECLTYPE_TYPE)
15122 return true;
15124 /* A template argument pack is dependent if any of its packed
15125 arguments are. */
15126 if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
15128 tree args = ARGUMENT_PACK_ARGS (type);
15129 int i, len = TREE_VEC_LENGTH (args);
15130 for (i = 0; i < len; ++i)
15131 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15132 return true;
15135 /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
15136 be template parameters. */
15137 if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
15138 return true;
15140 /* The standard does not specifically mention types that are local
15141 to template functions or local classes, but they should be
15142 considered dependent too. For example:
15144 template <int I> void f() {
15145 enum E { a = I };
15146 S<sizeof (E)> s;
15149 The size of `E' cannot be known until the value of `I' has been
15150 determined. Therefore, `E' must be considered dependent. */
15151 scope = TYPE_CONTEXT (type);
15152 if (scope && TYPE_P (scope))
15153 return dependent_type_p (scope);
15154 else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
15155 return type_dependent_expression_p (scope);
15157 /* Other types are non-dependent. */
15158 return false;
15161 /* Returns TRUE if TYPE is dependent, in the sense of
15162 [temp.dep.type]. */
15164 bool
15165 dependent_type_p (tree type)
15167 /* If there are no template parameters in scope, then there can't be
15168 any dependent types. */
15169 if (!processing_template_decl)
15171 /* If we are not processing a template, then nobody should be
15172 providing us with a dependent type. */
15173 gcc_assert (type);
15174 gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM);
15175 return false;
15178 /* If the type is NULL, we have not computed a type for the entity
15179 in question; in that case, the type is dependent. */
15180 if (!type)
15181 return true;
15183 /* Erroneous types can be considered non-dependent. */
15184 if (type == error_mark_node)
15185 return false;
15187 /* If we have not already computed the appropriate value for TYPE,
15188 do so now. */
15189 if (!TYPE_DEPENDENT_P_VALID (type))
15191 TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
15192 TYPE_DEPENDENT_P_VALID (type) = 1;
15195 return TYPE_DEPENDENT_P (type);
15198 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION. */
15200 static bool
15201 dependent_scope_ref_p (tree expression, bool criterion (tree))
15203 tree scope;
15204 tree name;
15206 gcc_assert (TREE_CODE (expression) == SCOPE_REF);
15208 if (!TYPE_P (TREE_OPERAND (expression, 0)))
15209 return true;
15211 scope = TREE_OPERAND (expression, 0);
15212 name = TREE_OPERAND (expression, 1);
15214 /* [temp.dep.expr]
15216 An id-expression is type-dependent if it contains a
15217 nested-name-specifier that contains a class-name that names a
15218 dependent type. */
15219 /* The suggested resolution to Core Issue 2 implies that if the
15220 qualifying type is the current class, then we must peek
15221 inside it. */
15222 if (DECL_P (name)
15223 && currently_open_class (scope)
15224 && !criterion (name))
15225 return false;
15226 if (dependent_type_p (scope))
15227 return true;
15229 return false;
15232 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
15233 [temp.dep.constexpr]. EXPRESSION is already known to be a constant
15234 expression. */
15236 bool
15237 value_dependent_expression_p (tree expression)
15239 if (!processing_template_decl)
15240 return false;
15242 /* A name declared with a dependent type. */
15243 if (DECL_P (expression) && type_dependent_expression_p (expression))
15244 return true;
15246 switch (TREE_CODE (expression))
15248 case IDENTIFIER_NODE:
15249 /* A name that has not been looked up -- must be dependent. */
15250 return true;
15252 case TEMPLATE_PARM_INDEX:
15253 /* A non-type template parm. */
15254 return true;
15256 case CONST_DECL:
15257 /* A non-type template parm. */
15258 if (DECL_TEMPLATE_PARM_P (expression))
15259 return true;
15260 return false;
15262 case VAR_DECL:
15263 /* A constant with integral or enumeration type and is initialized
15264 with an expression that is value-dependent. */
15265 if (DECL_INITIAL (expression)
15266 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
15267 && value_dependent_expression_p (DECL_INITIAL (expression)))
15268 return true;
15269 return false;
15271 case DYNAMIC_CAST_EXPR:
15272 case STATIC_CAST_EXPR:
15273 case CONST_CAST_EXPR:
15274 case REINTERPRET_CAST_EXPR:
15275 case CAST_EXPR:
15276 /* These expressions are value-dependent if the type to which
15277 the cast occurs is dependent or the expression being casted
15278 is value-dependent. */
15280 tree type = TREE_TYPE (expression);
15282 if (dependent_type_p (type))
15283 return true;
15285 /* A functional cast has a list of operands. */
15286 expression = TREE_OPERAND (expression, 0);
15287 if (!expression)
15289 /* If there are no operands, it must be an expression such
15290 as "int()". This should not happen for aggregate types
15291 because it would form non-constant expressions. */
15292 gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
15294 return false;
15297 if (TREE_CODE (expression) == TREE_LIST)
15298 return any_value_dependent_elements_p (expression);
15300 return value_dependent_expression_p (expression);
15303 case SIZEOF_EXPR:
15304 case ALIGNOF_EXPR:
15305 /* A `sizeof' expression is value-dependent if the operand is
15306 type-dependent or is a pack expansion. */
15307 expression = TREE_OPERAND (expression, 0);
15308 if (PACK_EXPANSION_P (expression))
15309 return true;
15310 else if (TYPE_P (expression))
15311 return dependent_type_p (expression);
15312 return type_dependent_expression_p (expression);
15314 case SCOPE_REF:
15315 return dependent_scope_ref_p (expression, value_dependent_expression_p);
15317 case COMPONENT_REF:
15318 return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
15319 || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
15321 case CALL_EXPR:
15322 /* A CALL_EXPR may appear in a constant expression if it is a
15323 call to a builtin function, e.g., __builtin_constant_p. All
15324 such calls are value-dependent. */
15325 return true;
15327 case NONTYPE_ARGUMENT_PACK:
15328 /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
15329 is value-dependent. */
15331 tree values = ARGUMENT_PACK_ARGS (expression);
15332 int i, len = TREE_VEC_LENGTH (values);
15334 for (i = 0; i < len; ++i)
15335 if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
15336 return true;
15338 return false;
15341 case TRAIT_EXPR:
15343 tree type2 = TRAIT_EXPR_TYPE2 (expression);
15344 return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
15345 || (type2 ? dependent_type_p (type2) : false));
15348 case MODOP_EXPR:
15349 return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
15350 || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
15352 default:
15353 /* A constant expression is value-dependent if any subexpression is
15354 value-dependent. */
15355 switch (TREE_CODE_CLASS (TREE_CODE (expression)))
15357 case tcc_reference:
15358 case tcc_unary:
15359 return (value_dependent_expression_p
15360 (TREE_OPERAND (expression, 0)));
15362 case tcc_comparison:
15363 case tcc_binary:
15364 return ((value_dependent_expression_p
15365 (TREE_OPERAND (expression, 0)))
15366 || (value_dependent_expression_p
15367 (TREE_OPERAND (expression, 1))));
15369 case tcc_expression:
15370 case tcc_vl_exp:
15372 int i;
15373 for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
15374 /* In some cases, some of the operands may be missing.
15375 (For example, in the case of PREDECREMENT_EXPR, the
15376 amount to increment by may be missing.) That doesn't
15377 make the expression dependent. */
15378 if (TREE_OPERAND (expression, i)
15379 && (value_dependent_expression_p
15380 (TREE_OPERAND (expression, i))))
15381 return true;
15382 return false;
15385 default:
15386 break;
15390 /* The expression is not value-dependent. */
15391 return false;
15394 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
15395 [temp.dep.expr]. */
15397 bool
15398 type_dependent_expression_p (tree expression)
15400 if (!processing_template_decl)
15401 return false;
15403 if (expression == error_mark_node)
15404 return false;
15406 /* An unresolved name is always dependent. */
15407 if (TREE_CODE (expression) == IDENTIFIER_NODE
15408 || TREE_CODE (expression) == USING_DECL)
15409 return true;
15411 /* Some expression forms are never type-dependent. */
15412 if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
15413 || TREE_CODE (expression) == SIZEOF_EXPR
15414 || TREE_CODE (expression) == ALIGNOF_EXPR
15415 || TREE_CODE (expression) == TRAIT_EXPR
15416 || TREE_CODE (expression) == TYPEID_EXPR
15417 || TREE_CODE (expression) == DELETE_EXPR
15418 || TREE_CODE (expression) == VEC_DELETE_EXPR
15419 || TREE_CODE (expression) == THROW_EXPR)
15420 return false;
15422 /* The types of these expressions depends only on the type to which
15423 the cast occurs. */
15424 if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
15425 || TREE_CODE (expression) == STATIC_CAST_EXPR
15426 || TREE_CODE (expression) == CONST_CAST_EXPR
15427 || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
15428 || TREE_CODE (expression) == CAST_EXPR)
15429 return dependent_type_p (TREE_TYPE (expression));
15431 /* The types of these expressions depends only on the type created
15432 by the expression. */
15433 if (TREE_CODE (expression) == NEW_EXPR
15434 || TREE_CODE (expression) == VEC_NEW_EXPR)
15436 /* For NEW_EXPR tree nodes created inside a template, either
15437 the object type itself or a TREE_LIST may appear as the
15438 operand 1. */
15439 tree type = TREE_OPERAND (expression, 1);
15440 if (TREE_CODE (type) == TREE_LIST)
15441 /* This is an array type. We need to check array dimensions
15442 as well. */
15443 return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
15444 || value_dependent_expression_p
15445 (TREE_OPERAND (TREE_VALUE (type), 1));
15446 else
15447 return dependent_type_p (type);
15450 if (TREE_CODE (expression) == SCOPE_REF
15451 && dependent_scope_ref_p (expression,
15452 type_dependent_expression_p))
15453 return true;
15455 if (TREE_CODE (expression) == FUNCTION_DECL
15456 && DECL_LANG_SPECIFIC (expression)
15457 && DECL_TEMPLATE_INFO (expression)
15458 && (any_dependent_template_arguments_p
15459 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
15460 return true;
15462 if (TREE_CODE (expression) == TEMPLATE_DECL
15463 && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
15464 return false;
15466 if (TREE_CODE (expression) == STMT_EXPR)
15467 expression = stmt_expr_value_expr (expression);
15469 if (TREE_TYPE (expression) == unknown_type_node)
15471 if (TREE_CODE (expression) == ADDR_EXPR)
15472 return type_dependent_expression_p (TREE_OPERAND (expression, 0));
15473 if (TREE_CODE (expression) == COMPONENT_REF
15474 || TREE_CODE (expression) == OFFSET_REF)
15476 if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
15477 return true;
15478 expression = TREE_OPERAND (expression, 1);
15479 if (TREE_CODE (expression) == IDENTIFIER_NODE)
15480 return false;
15482 /* SCOPE_REF with non-null TREE_TYPE is always non-dependent. */
15483 if (TREE_CODE (expression) == SCOPE_REF)
15484 return false;
15486 if (TREE_CODE (expression) == BASELINK)
15487 expression = BASELINK_FUNCTIONS (expression);
15489 if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
15491 if (any_dependent_template_arguments_p
15492 (TREE_OPERAND (expression, 1)))
15493 return true;
15494 expression = TREE_OPERAND (expression, 0);
15496 gcc_assert (TREE_CODE (expression) == OVERLOAD
15497 || TREE_CODE (expression) == FUNCTION_DECL);
15499 while (expression)
15501 if (type_dependent_expression_p (OVL_CURRENT (expression)))
15502 return true;
15503 expression = OVL_NEXT (expression);
15505 return false;
15508 gcc_assert (TREE_CODE (expression) != TYPE_DECL);
15510 return (dependent_type_p (TREE_TYPE (expression)));
15513 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
15514 contains a type-dependent expression. */
15516 bool
15517 any_type_dependent_arguments_p (const_tree args)
15519 while (args)
15521 tree arg = TREE_VALUE (args);
15523 if (type_dependent_expression_p (arg))
15524 return true;
15525 args = TREE_CHAIN (args);
15527 return false;
15530 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
15531 expressions) contains any value-dependent expressions. */
15533 bool
15534 any_value_dependent_elements_p (const_tree list)
15536 for (; list; list = TREE_CHAIN (list))
15537 if (value_dependent_expression_p (TREE_VALUE (list)))
15538 return true;
15540 return false;
15543 /* Returns TRUE if the ARG (a template argument) is dependent. */
15545 bool
15546 dependent_template_arg_p (tree arg)
15548 if (!processing_template_decl)
15549 return false;
15551 if (TREE_CODE (arg) == TEMPLATE_DECL
15552 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15553 return dependent_template_p (arg);
15554 else if (ARGUMENT_PACK_P (arg))
15556 tree args = ARGUMENT_PACK_ARGS (arg);
15557 int i, len = TREE_VEC_LENGTH (args);
15558 for (i = 0; i < len; ++i)
15560 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15561 return true;
15564 return false;
15566 else if (TYPE_P (arg))
15567 return dependent_type_p (arg);
15568 else
15569 return (type_dependent_expression_p (arg)
15570 || value_dependent_expression_p (arg));
15573 /* Returns true if ARGS (a collection of template arguments) contains
15574 any types that require structural equality testing. */
15576 bool
15577 any_template_arguments_need_structural_equality_p (tree args)
15579 int i;
15580 int j;
15582 if (!args)
15583 return false;
15584 if (args == error_mark_node)
15585 return true;
15587 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
15589 tree level = TMPL_ARGS_LEVEL (args, i + 1);
15590 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
15592 tree arg = TREE_VEC_ELT (level, j);
15593 tree packed_args = NULL_TREE;
15594 int k, len = 1;
15596 if (ARGUMENT_PACK_P (arg))
15598 /* Look inside the argument pack. */
15599 packed_args = ARGUMENT_PACK_ARGS (arg);
15600 len = TREE_VEC_LENGTH (packed_args);
15603 for (k = 0; k < len; ++k)
15605 if (packed_args)
15606 arg = TREE_VEC_ELT (packed_args, k);
15608 if (error_operand_p (arg))
15609 return true;
15610 else if (TREE_CODE (arg) == TEMPLATE_DECL
15611 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15612 continue;
15613 else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
15614 return true;
15615 else if (!TYPE_P (arg) && TREE_TYPE (arg)
15616 && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
15617 return true;
15622 return false;
15625 /* Returns true if ARGS (a collection of template arguments) contains
15626 any dependent arguments. */
15628 bool
15629 any_dependent_template_arguments_p (const_tree args)
15631 int i;
15632 int j;
15634 if (!args)
15635 return false;
15636 if (args == error_mark_node)
15637 return true;
15639 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
15641 const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
15642 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
15643 if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
15644 return true;
15647 return false;
15650 /* Returns TRUE if the template TMPL is dependent. */
15652 bool
15653 dependent_template_p (tree tmpl)
15655 if (TREE_CODE (tmpl) == OVERLOAD)
15657 while (tmpl)
15659 if (dependent_template_p (OVL_FUNCTION (tmpl)))
15660 return true;
15661 tmpl = OVL_CHAIN (tmpl);
15663 return false;
15666 /* Template template parameters are dependent. */
15667 if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
15668 || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
15669 return true;
15670 /* So are names that have not been looked up. */
15671 if (TREE_CODE (tmpl) == SCOPE_REF
15672 || TREE_CODE (tmpl) == IDENTIFIER_NODE)
15673 return true;
15674 /* So are member templates of dependent classes. */
15675 if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
15676 return dependent_type_p (DECL_CONTEXT (tmpl));
15677 return false;
15680 /* Returns TRUE if the specialization TMPL<ARGS> is dependent. */
15682 bool
15683 dependent_template_id_p (tree tmpl, tree args)
15685 return (dependent_template_p (tmpl)
15686 || any_dependent_template_arguments_p (args));
15689 /* TYPE is a TYPENAME_TYPE. Returns the ordinary TYPE to which the
15690 TYPENAME_TYPE corresponds. Returns the original TYPENAME_TYPE if
15691 no such TYPE can be found. Note that this function peers inside
15692 uninstantiated templates and therefore should be used only in
15693 extremely limited situations. ONLY_CURRENT_P restricts this
15694 peering to the currently open classes hierarchy (which is required
15695 when comparing types). */
15697 tree
15698 resolve_typename_type (tree type, bool only_current_p)
15700 tree scope;
15701 tree name;
15702 tree decl;
15703 int quals;
15704 tree pushed_scope;
15705 tree result;
15707 gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
15709 scope = TYPE_CONTEXT (type);
15710 name = TYPE_IDENTIFIER (type);
15712 /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
15713 it first before we can figure out what NAME refers to. */
15714 if (TREE_CODE (scope) == TYPENAME_TYPE)
15715 scope = resolve_typename_type (scope, only_current_p);
15716 /* If we don't know what SCOPE refers to, then we cannot resolve the
15717 TYPENAME_TYPE. */
15718 if (TREE_CODE (scope) == TYPENAME_TYPE)
15719 return type;
15720 /* If the SCOPE is a template type parameter, we have no way of
15721 resolving the name. */
15722 if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
15723 return type;
15724 /* If the SCOPE is not the current instantiation, there's no reason
15725 to look inside it. */
15726 if (only_current_p && !currently_open_class (scope))
15727 return type;
15728 /* If SCOPE isn't the template itself, it will not have a valid
15729 TYPE_FIELDS list. */
15730 if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
15731 /* scope is either the template itself or a compatible instantiation
15732 like X<T>, so look up the name in the original template. */
15733 scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
15734 else
15735 /* scope is a partial instantiation, so we can't do the lookup or we
15736 will lose the template arguments. */
15737 return type;
15738 /* Enter the SCOPE so that name lookup will be resolved as if we
15739 were in the class definition. In particular, SCOPE will no
15740 longer be considered a dependent type. */
15741 pushed_scope = push_scope (scope);
15742 /* Look up the declaration. */
15743 decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
15745 result = NULL_TREE;
15747 /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
15748 find a TEMPLATE_DECL. Otherwise, we want to find a TYPE_DECL. */
15749 if (!decl)
15750 /*nop*/;
15751 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
15752 && TREE_CODE (decl) == TYPE_DECL)
15754 result = TREE_TYPE (decl);
15755 if (result == error_mark_node)
15756 result = NULL_TREE;
15758 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
15759 && DECL_CLASS_TEMPLATE_P (decl))
15761 tree tmpl;
15762 tree args;
15763 /* Obtain the template and the arguments. */
15764 tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
15765 args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
15766 /* Instantiate the template. */
15767 result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
15768 /*entering_scope=*/0,
15769 tf_error | tf_user);
15770 if (result == error_mark_node)
15771 result = NULL_TREE;
15774 /* Leave the SCOPE. */
15775 if (pushed_scope)
15776 pop_scope (pushed_scope);
15778 /* If we failed to resolve it, return the original typename. */
15779 if (!result)
15780 return type;
15782 /* If lookup found a typename type, resolve that too. */
15783 if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
15785 /* Ill-formed programs can cause infinite recursion here, so we
15786 must catch that. */
15787 TYPENAME_IS_RESOLVING_P (type) = 1;
15788 result = resolve_typename_type (result, only_current_p);
15789 TYPENAME_IS_RESOLVING_P (type) = 0;
15792 /* Qualify the resulting type. */
15793 quals = cp_type_quals (type);
15794 if (quals)
15795 result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
15797 return result;
15800 /* EXPR is an expression which is not type-dependent. Return a proxy
15801 for EXPR that can be used to compute the types of larger
15802 expressions containing EXPR. */
15804 tree
15805 build_non_dependent_expr (tree expr)
15807 tree inner_expr;
15809 /* Preserve null pointer constants so that the type of things like
15810 "p == 0" where "p" is a pointer can be determined. */
15811 if (null_ptr_cst_p (expr))
15812 return expr;
15813 /* Preserve OVERLOADs; the functions must be available to resolve
15814 types. */
15815 inner_expr = expr;
15816 if (TREE_CODE (inner_expr) == STMT_EXPR)
15817 inner_expr = stmt_expr_value_expr (inner_expr);
15818 if (TREE_CODE (inner_expr) == ADDR_EXPR)
15819 inner_expr = TREE_OPERAND (inner_expr, 0);
15820 if (TREE_CODE (inner_expr) == COMPONENT_REF)
15821 inner_expr = TREE_OPERAND (inner_expr, 1);
15822 if (is_overloaded_fn (inner_expr)
15823 || TREE_CODE (inner_expr) == OFFSET_REF)
15824 return expr;
15825 /* There is no need to return a proxy for a variable. */
15826 if (TREE_CODE (expr) == VAR_DECL)
15827 return expr;
15828 /* Preserve string constants; conversions from string constants to
15829 "char *" are allowed, even though normally a "const char *"
15830 cannot be used to initialize a "char *". */
15831 if (TREE_CODE (expr) == STRING_CST)
15832 return expr;
15833 /* Preserve arithmetic constants, as an optimization -- there is no
15834 reason to create a new node. */
15835 if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
15836 return expr;
15837 /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
15838 There is at least one place where we want to know that a
15839 particular expression is a throw-expression: when checking a ?:
15840 expression, there are special rules if the second or third
15841 argument is a throw-expression. */
15842 if (TREE_CODE (expr) == THROW_EXPR)
15843 return expr;
15845 if (TREE_CODE (expr) == COND_EXPR)
15846 return build3 (COND_EXPR,
15847 TREE_TYPE (expr),
15848 TREE_OPERAND (expr, 0),
15849 (TREE_OPERAND (expr, 1)
15850 ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
15851 : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
15852 build_non_dependent_expr (TREE_OPERAND (expr, 2)));
15853 if (TREE_CODE (expr) == COMPOUND_EXPR
15854 && !COMPOUND_EXPR_OVERLOADED (expr))
15855 return build2 (COMPOUND_EXPR,
15856 TREE_TYPE (expr),
15857 TREE_OPERAND (expr, 0),
15858 build_non_dependent_expr (TREE_OPERAND (expr, 1)));
15860 /* If the type is unknown, it can't really be non-dependent */
15861 gcc_assert (TREE_TYPE (expr) != unknown_type_node);
15863 /* Otherwise, build a NON_DEPENDENT_EXPR.
15865 REFERENCE_TYPEs are not stripped for expressions in templates
15866 because doing so would play havoc with mangling. Consider, for
15867 example:
15869 template <typename T> void f<T& g>() { g(); }
15871 In the body of "f", the expression for "g" will have
15872 REFERENCE_TYPE, even though the standard says that it should
15873 not. The reason is that we must preserve the syntactic form of
15874 the expression so that mangling (say) "f<g>" inside the body of
15875 "f" works out correctly. Therefore, the REFERENCE_TYPE is
15876 stripped here. */
15877 return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
15880 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
15881 Return a new TREE_LIST with the various arguments replaced with
15882 equivalent non-dependent expressions. */
15884 tree
15885 build_non_dependent_args (tree args)
15887 tree a;
15888 tree new_args;
15890 new_args = NULL_TREE;
15891 for (a = args; a; a = TREE_CHAIN (a))
15892 new_args = tree_cons (NULL_TREE,
15893 build_non_dependent_expr (TREE_VALUE (a)),
15894 new_args);
15895 return nreverse (new_args);
15898 #include "gt-cp-pt.h"