PR c++/19407
[official-gcc.git] / gcc / cp / pt.c
blobc9ec37034a58c1681c5c38e303b9ced0ebca3aa5
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;
3140 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 arg = convert_template_argument (actual_parm,
4937 arg, new_args, complain, parm_idx,
4938 in_decl);
4939 if (arg == error_mark_node)
4940 (*lost)++;
4941 TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg;
4944 if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
4945 || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
4946 argument_pack = make_node (TYPE_ARGUMENT_PACK);
4947 else
4949 argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
4950 TREE_TYPE (argument_pack) = TREE_TYPE (TREE_VALUE (parm));
4951 TREE_CONSTANT (argument_pack) = 1;
4954 SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
4955 return argument_pack;
4958 /* Convert all template arguments to their appropriate types, and
4959 return a vector containing the innermost resulting template
4960 arguments. If any error occurs, return error_mark_node. Error and
4961 warning messages are issued under control of COMPLAIN.
4963 If REQUIRE_ALL_ARGS is false, argument deduction will be performed
4964 for arguments not specified in ARGS. Otherwise, if
4965 USE_DEFAULT_ARGS is true, default arguments will be used to fill in
4966 unspecified arguments. If REQUIRE_ALL_ARGS is true, but
4967 USE_DEFAULT_ARGS is false, then all arguments must be specified in
4968 ARGS. */
4970 static tree
4971 coerce_template_parms (tree parms,
4972 tree args,
4973 tree in_decl,
4974 tsubst_flags_t complain,
4975 bool require_all_args,
4976 bool use_default_args)
4978 int nparms, nargs, parm_idx, arg_idx, lost = 0;
4979 tree inner_args;
4980 tree new_args;
4981 tree new_inner_args;
4982 bool saved_skip_evaluation;
4984 /* When used as a boolean value, indicates whether this is a
4985 variadic template parameter list. Since it's an int, we can also
4986 subtract it from nparms to get the number of non-variadic
4987 parameters. */
4988 int variadic_p = 0;
4990 inner_args
4991 = expand_template_argument_pack (INNERMOST_TEMPLATE_ARGS (args));
4993 nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
4994 nparms = TREE_VEC_LENGTH (parms);
4996 /* Determine if there are any parameter packs. */
4997 for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
4999 tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
5000 if (template_parameter_pack_p (tparm))
5002 variadic_p = 1;
5003 break;
5007 if ((nargs > nparms - variadic_p && !variadic_p)
5008 || (nargs < nparms - variadic_p
5009 && require_all_args
5010 && (!use_default_args
5011 || (TREE_VEC_ELT (parms, nargs) != error_mark_node
5012 && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
5014 if (complain & tf_error)
5016 const char *or_more = "";
5017 if (variadic_p)
5019 or_more = " or more";
5020 --nparms;
5023 error ("wrong number of template arguments (%d, should be %d%s)",
5024 nargs, nparms, or_more);
5026 if (in_decl)
5027 error ("provided for %q+D", in_decl);
5030 return error_mark_node;
5033 /* We need to evaluate the template arguments, even though this
5034 template-id may be nested within a "sizeof". */
5035 saved_skip_evaluation = skip_evaluation;
5036 skip_evaluation = false;
5037 new_inner_args = make_tree_vec (nparms);
5038 new_args = add_outermost_template_args (args, new_inner_args);
5039 for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
5041 tree arg;
5042 tree parm;
5044 /* Get the Ith template parameter. */
5045 parm = TREE_VEC_ELT (parms, parm_idx);
5047 if (parm == error_mark_node)
5049 TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
5050 continue;
5053 /* Calculate the next argument. */
5054 if (template_parameter_pack_p (TREE_VALUE (parm)))
5056 /* All remaining arguments will be placed in the
5057 template parameter pack PARM. */
5058 arg = coerce_template_parameter_pack (parms, parm_idx, args,
5059 inner_args, arg_idx,
5060 new_args, &lost,
5061 in_decl, complain);
5063 /* Store this argument. */
5064 if (arg == error_mark_node)
5065 lost++;
5066 TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
5068 /* We are done with all of the arguments. */
5069 arg_idx = nargs;
5071 continue;
5073 else if (arg_idx < nargs)
5075 arg = TREE_VEC_ELT (inner_args, arg_idx);
5077 if (arg && PACK_EXPANSION_P (arg))
5079 /* If ARG is a pack expansion, but PARM is not a
5080 template parameter pack (if it were, we would have
5081 handled it above), we're trying to expand into a
5082 fixed-length argument list. */
5083 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
5084 error ("cannot expand %<%E%> into a fixed-length "
5085 "argument list", arg);
5086 else
5087 error ("cannot expand %<%T%> into a fixed-length "
5088 "argument list", arg);
5091 else if (require_all_args)
5092 /* There must be a default arg in this case. */
5093 arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
5094 complain, in_decl);
5095 else
5096 break;
5098 if (arg == error_mark_node)
5100 if (complain & tf_error)
5101 error ("template argument %d is invalid", arg_idx + 1);
5103 else if (!arg)
5104 /* This only occurs if there was an error in the template
5105 parameter list itself (which we would already have
5106 reported) that we are trying to recover from, e.g., a class
5107 template with a parameter list such as
5108 template<typename..., typename>. */
5109 return error_mark_node;
5110 else
5111 arg = convert_template_argument (TREE_VALUE (parm),
5112 arg, new_args, complain,
5113 parm_idx, in_decl);
5115 if (arg == error_mark_node)
5116 lost++;
5117 TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
5119 skip_evaluation = saved_skip_evaluation;
5121 if (lost)
5122 return error_mark_node;
5124 return new_inner_args;
5127 /* Returns 1 if template args OT and NT are equivalent. */
5129 static int
5130 template_args_equal (tree ot, tree nt)
5132 if (nt == ot)
5133 return 1;
5135 if (TREE_CODE (nt) == TREE_VEC)
5136 /* For member templates */
5137 return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
5138 else if (PACK_EXPANSION_P (ot))
5139 return PACK_EXPANSION_P (nt)
5140 && template_args_equal (PACK_EXPANSION_PATTERN (ot),
5141 PACK_EXPANSION_PATTERN (nt));
5142 else if (TYPE_P (nt))
5143 return TYPE_P (ot) && same_type_p (ot, nt);
5144 else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
5145 return 0;
5146 else
5147 return cp_tree_equal (ot, nt);
5150 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
5151 of template arguments. Returns 0 otherwise. */
5154 comp_template_args (tree oldargs, tree newargs)
5156 int i;
5158 oldargs = expand_template_argument_pack (oldargs);
5159 newargs = expand_template_argument_pack (newargs);
5161 if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
5162 return 0;
5164 for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
5166 tree nt = TREE_VEC_ELT (newargs, i);
5167 tree ot = TREE_VEC_ELT (oldargs, i);
5169 if (! template_args_equal (ot, nt))
5170 return 0;
5172 return 1;
5175 static void
5176 add_pending_template (tree d)
5178 tree ti = (TYPE_P (d)
5179 ? CLASSTYPE_TEMPLATE_INFO (d)
5180 : DECL_TEMPLATE_INFO (d));
5181 struct pending_template *pt;
5182 int level;
5184 if (TI_PENDING_TEMPLATE_FLAG (ti))
5185 return;
5187 /* We are called both from instantiate_decl, where we've already had a
5188 tinst_level pushed, and instantiate_template, where we haven't.
5189 Compensate. */
5190 level = !current_tinst_level || current_tinst_level->decl != d;
5192 if (level)
5193 push_tinst_level (d);
5195 pt = GGC_NEW (struct pending_template);
5196 pt->next = NULL;
5197 pt->tinst = current_tinst_level;
5198 if (last_pending_template)
5199 last_pending_template->next = pt;
5200 else
5201 pending_templates = pt;
5203 last_pending_template = pt;
5205 TI_PENDING_TEMPLATE_FLAG (ti) = 1;
5207 if (level)
5208 pop_tinst_level ();
5212 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
5213 ARGLIST. Valid choices for FNS are given in the cp-tree.def
5214 documentation for TEMPLATE_ID_EXPR. */
5216 tree
5217 lookup_template_function (tree fns, tree arglist)
5219 tree type;
5221 if (fns == error_mark_node || arglist == error_mark_node)
5222 return error_mark_node;
5224 gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
5225 gcc_assert (fns && (is_overloaded_fn (fns)
5226 || TREE_CODE (fns) == IDENTIFIER_NODE));
5228 if (BASELINK_P (fns))
5230 BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
5231 unknown_type_node,
5232 BASELINK_FUNCTIONS (fns),
5233 arglist);
5234 return fns;
5237 type = TREE_TYPE (fns);
5238 if (TREE_CODE (fns) == OVERLOAD || !type)
5239 type = unknown_type_node;
5241 return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
5244 /* Within the scope of a template class S<T>, the name S gets bound
5245 (in build_self_reference) to a TYPE_DECL for the class, not a
5246 TEMPLATE_DECL. If DECL is a TYPE_DECL for current_class_type,
5247 or one of its enclosing classes, and that type is a template,
5248 return the associated TEMPLATE_DECL. Otherwise, the original
5249 DECL is returned. */
5251 tree
5252 maybe_get_template_decl_from_type_decl (tree decl)
5254 return (decl != NULL_TREE
5255 && TREE_CODE (decl) == TYPE_DECL
5256 && DECL_ARTIFICIAL (decl)
5257 && CLASS_TYPE_P (TREE_TYPE (decl))
5258 && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
5259 ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
5262 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
5263 parameters, find the desired type.
5265 D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
5267 IN_DECL, if non-NULL, is the template declaration we are trying to
5268 instantiate.
5270 If ENTERING_SCOPE is nonzero, we are about to enter the scope of
5271 the class we are looking up.
5273 Issue error and warning messages under control of COMPLAIN.
5275 If the template class is really a local class in a template
5276 function, then the FUNCTION_CONTEXT is the function in which it is
5277 being instantiated.
5279 ??? Note that this function is currently called *twice* for each
5280 template-id: the first time from the parser, while creating the
5281 incomplete type (finish_template_type), and the second type during the
5282 real instantiation (instantiate_template_class). This is surely something
5283 that we want to avoid. It also causes some problems with argument
5284 coercion (see convert_nontype_argument for more information on this). */
5286 tree
5287 lookup_template_class (tree d1,
5288 tree arglist,
5289 tree in_decl,
5290 tree context,
5291 int entering_scope,
5292 tsubst_flags_t complain)
5294 tree template = NULL_TREE, parmlist;
5295 tree t;
5297 timevar_push (TV_NAME_LOOKUP);
5299 if (TREE_CODE (d1) == IDENTIFIER_NODE)
5301 tree value = innermost_non_namespace_value (d1);
5302 if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
5303 template = value;
5304 else
5306 if (context)
5307 push_decl_namespace (context);
5308 template = lookup_name (d1);
5309 template = maybe_get_template_decl_from_type_decl (template);
5310 if (context)
5311 pop_decl_namespace ();
5313 if (template)
5314 context = DECL_CONTEXT (template);
5316 else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
5318 tree type = TREE_TYPE (d1);
5320 /* If we are declaring a constructor, say A<T>::A<T>, we will get
5321 an implicit typename for the second A. Deal with it. */
5322 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5323 type = TREE_TYPE (type);
5325 if (CLASSTYPE_TEMPLATE_INFO (type))
5327 template = CLASSTYPE_TI_TEMPLATE (type);
5328 d1 = DECL_NAME (template);
5331 else if (TREE_CODE (d1) == ENUMERAL_TYPE
5332 || (TYPE_P (d1) && IS_AGGR_TYPE (d1)))
5334 template = TYPE_TI_TEMPLATE (d1);
5335 d1 = DECL_NAME (template);
5337 else if (TREE_CODE (d1) == TEMPLATE_DECL
5338 && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
5340 template = d1;
5341 d1 = DECL_NAME (template);
5342 context = DECL_CONTEXT (template);
5345 /* Issue an error message if we didn't find a template. */
5346 if (! template)
5348 if (complain & tf_error)
5349 error ("%qT is not a template", d1);
5350 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5353 if (TREE_CODE (template) != TEMPLATE_DECL
5354 /* Make sure it's a user visible template, if it was named by
5355 the user. */
5356 || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (template)
5357 && !PRIMARY_TEMPLATE_P (template)))
5359 if (complain & tf_error)
5361 error ("non-template type %qT used as a template", d1);
5362 if (in_decl)
5363 error ("for template declaration %q+D", in_decl);
5365 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5368 complain &= ~tf_user;
5370 if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
5372 /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
5373 template arguments */
5375 tree parm;
5376 tree arglist2;
5378 parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
5380 /* Consider an example where a template template parameter declared as
5382 template <class T, class U = std::allocator<T> > class TT
5384 The template parameter level of T and U are one level larger than
5385 of TT. To proper process the default argument of U, say when an
5386 instantiation `TT<int>' is seen, we need to build the full
5387 arguments containing {int} as the innermost level. Outer levels,
5388 available when not appearing as default template argument, can be
5389 obtained from `current_template_args ()'.
5391 Suppose that TT is later substituted with std::vector. The above
5392 instantiation is `TT<int, std::allocator<T> >' with TT at
5393 level 1, and T at level 2, while the template arguments at level 1
5394 becomes {std::vector} and the inner level 2 is {int}. */
5396 if (current_template_parms)
5397 arglist = add_to_template_args (current_template_args (), arglist);
5399 arglist2 = coerce_template_parms (parmlist, arglist, template,
5400 complain,
5401 /*require_all_args=*/true,
5402 /*use_default_args=*/true);
5403 if (arglist2 == error_mark_node
5404 || (!uses_template_parms (arglist2)
5405 && check_instantiated_args (template, arglist2, complain)))
5406 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5408 parm = bind_template_template_parm (TREE_TYPE (template), arglist2);
5409 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
5411 else
5413 tree template_type = TREE_TYPE (template);
5414 tree gen_tmpl;
5415 tree type_decl;
5416 tree found = NULL_TREE;
5417 int arg_depth;
5418 int parm_depth;
5419 int is_partial_instantiation;
5421 gen_tmpl = most_general_template (template);
5422 parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
5423 parm_depth = TMPL_PARMS_DEPTH (parmlist);
5424 arg_depth = TMPL_ARGS_DEPTH (arglist);
5426 if (arg_depth == 1 && parm_depth > 1)
5428 /* We've been given an incomplete set of template arguments.
5429 For example, given:
5431 template <class T> struct S1 {
5432 template <class U> struct S2 {};
5433 template <class U> struct S2<U*> {};
5436 we will be called with an ARGLIST of `U*', but the
5437 TEMPLATE will be `template <class T> template
5438 <class U> struct S1<T>::S2'. We must fill in the missing
5439 arguments. */
5440 arglist
5441 = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
5442 arglist);
5443 arg_depth = TMPL_ARGS_DEPTH (arglist);
5446 /* Now we should have enough arguments. */
5447 gcc_assert (parm_depth == arg_depth);
5449 /* From here on, we're only interested in the most general
5450 template. */
5451 template = gen_tmpl;
5453 /* Calculate the BOUND_ARGS. These will be the args that are
5454 actually tsubst'd into the definition to create the
5455 instantiation. */
5456 if (parm_depth > 1)
5458 /* We have multiple levels of arguments to coerce, at once. */
5459 int i;
5460 int saved_depth = TMPL_ARGS_DEPTH (arglist);
5462 tree bound_args = make_tree_vec (parm_depth);
5464 for (i = saved_depth,
5465 t = DECL_TEMPLATE_PARMS (template);
5466 i > 0 && t != NULL_TREE;
5467 --i, t = TREE_CHAIN (t))
5469 tree a = coerce_template_parms (TREE_VALUE (t),
5470 arglist, template,
5471 complain,
5472 /*require_all_args=*/true,
5473 /*use_default_args=*/true);
5475 /* Don't process further if one of the levels fails. */
5476 if (a == error_mark_node)
5478 /* Restore the ARGLIST to its full size. */
5479 TREE_VEC_LENGTH (arglist) = saved_depth;
5480 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5483 SET_TMPL_ARGS_LEVEL (bound_args, i, a);
5485 /* We temporarily reduce the length of the ARGLIST so
5486 that coerce_template_parms will see only the arguments
5487 corresponding to the template parameters it is
5488 examining. */
5489 TREE_VEC_LENGTH (arglist)--;
5492 /* Restore the ARGLIST to its full size. */
5493 TREE_VEC_LENGTH (arglist) = saved_depth;
5495 arglist = bound_args;
5497 else
5498 arglist
5499 = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
5500 INNERMOST_TEMPLATE_ARGS (arglist),
5501 template,
5502 complain,
5503 /*require_all_args=*/true,
5504 /*use_default_args=*/true);
5506 if (arglist == error_mark_node)
5507 /* We were unable to bind the arguments. */
5508 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5510 /* In the scope of a template class, explicit references to the
5511 template class refer to the type of the template, not any
5512 instantiation of it. For example, in:
5514 template <class T> class C { void f(C<T>); }
5516 the `C<T>' is just the same as `C'. Outside of the
5517 class, however, such a reference is an instantiation. */
5518 if (comp_template_args (TYPE_TI_ARGS (template_type),
5519 arglist))
5521 found = template_type;
5523 if (!entering_scope && PRIMARY_TEMPLATE_P (template))
5525 tree ctx;
5527 for (ctx = current_class_type;
5528 ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
5529 ctx = (TYPE_P (ctx)
5530 ? TYPE_CONTEXT (ctx)
5531 : DECL_CONTEXT (ctx)))
5532 if (TYPE_P (ctx) && same_type_p (ctx, template_type))
5533 goto found_ctx;
5535 /* We're not in the scope of the class, so the
5536 TEMPLATE_TYPE is not the type we want after all. */
5537 found = NULL_TREE;
5538 found_ctx:;
5541 if (found)
5542 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5544 /* If we already have this specialization, return it. */
5545 found = retrieve_specialization (template, arglist,
5546 /*class_specializations_p=*/false);
5547 if (found)
5548 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5550 /* This type is a "partial instantiation" if any of the template
5551 arguments still involve template parameters. Note that we set
5552 IS_PARTIAL_INSTANTIATION for partial specializations as
5553 well. */
5554 is_partial_instantiation = uses_template_parms (arglist);
5556 /* If the deduced arguments are invalid, then the binding
5557 failed. */
5558 if (!is_partial_instantiation
5559 && check_instantiated_args (template,
5560 INNERMOST_TEMPLATE_ARGS (arglist),
5561 complain))
5562 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5564 if (!is_partial_instantiation
5565 && !PRIMARY_TEMPLATE_P (template)
5566 && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
5568 found = xref_tag_from_type (TREE_TYPE (template),
5569 DECL_NAME (template),
5570 /*tag_scope=*/ts_global);
5571 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5574 context = tsubst (DECL_CONTEXT (template), arglist,
5575 complain, in_decl);
5576 if (!context)
5577 context = global_namespace;
5579 /* Create the type. */
5580 if (TREE_CODE (template_type) == ENUMERAL_TYPE)
5582 if (!is_partial_instantiation)
5584 set_current_access_from_decl (TYPE_NAME (template_type));
5585 t = start_enum (TYPE_IDENTIFIER (template_type));
5587 else
5588 /* We don't want to call start_enum for this type, since
5589 the values for the enumeration constants may involve
5590 template parameters. And, no one should be interested
5591 in the enumeration constants for such a type. */
5592 t = make_node (ENUMERAL_TYPE);
5594 else
5596 t = make_aggr_type (TREE_CODE (template_type));
5597 CLASSTYPE_DECLARED_CLASS (t)
5598 = CLASSTYPE_DECLARED_CLASS (template_type);
5599 SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
5600 TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
5602 /* A local class. Make sure the decl gets registered properly. */
5603 if (context == current_function_decl)
5604 pushtag (DECL_NAME (template), t, /*tag_scope=*/ts_current);
5606 if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
5607 /* This instantiation is another name for the primary
5608 template type. Set the TYPE_CANONICAL field
5609 appropriately. */
5610 TYPE_CANONICAL (t) = template_type;
5611 else if (any_template_arguments_need_structural_equality_p (arglist))
5612 /* Some of the template arguments require structural
5613 equality testing, so this template class requires
5614 structural equality testing. */
5615 SET_TYPE_STRUCTURAL_EQUALITY (t);
5618 /* If we called start_enum or pushtag above, this information
5619 will already be set up. */
5620 if (!TYPE_NAME (t))
5622 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5624 type_decl = create_implicit_typedef (DECL_NAME (template), t);
5625 DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
5626 TYPE_STUB_DECL (t) = type_decl;
5627 DECL_SOURCE_LOCATION (type_decl)
5628 = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
5630 else
5631 type_decl = TYPE_NAME (t);
5633 TREE_PRIVATE (type_decl)
5634 = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
5635 TREE_PROTECTED (type_decl)
5636 = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
5637 DECL_IN_SYSTEM_HEADER (type_decl)
5638 = DECL_IN_SYSTEM_HEADER (template);
5639 if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
5641 DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
5642 DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
5645 /* Set up the template information. We have to figure out which
5646 template is the immediate parent if this is a full
5647 instantiation. */
5648 if (parm_depth == 1 || is_partial_instantiation
5649 || !PRIMARY_TEMPLATE_P (template))
5650 /* This case is easy; there are no member templates involved. */
5651 found = template;
5652 else
5654 /* This is a full instantiation of a member template. Look
5655 for a partial instantiation of which this is an instance. */
5657 for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
5658 found; found = TREE_CHAIN (found))
5660 int success;
5661 tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
5663 /* We only want partial instantiations, here, not
5664 specializations or full instantiations. */
5665 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
5666 || !uses_template_parms (TREE_VALUE (found)))
5667 continue;
5669 /* Temporarily reduce by one the number of levels in the
5670 ARGLIST and in FOUND so as to avoid comparing the
5671 last set of arguments. */
5672 TREE_VEC_LENGTH (arglist)--;
5673 TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
5675 /* See if the arguments match. If they do, then TMPL is
5676 the partial instantiation we want. */
5677 success = comp_template_args (TREE_PURPOSE (found), arglist);
5679 /* Restore the argument vectors to their full size. */
5680 TREE_VEC_LENGTH (arglist)++;
5681 TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
5683 if (success)
5685 found = tmpl;
5686 break;
5690 if (!found)
5692 /* There was no partial instantiation. This happens
5693 where C<T> is a member template of A<T> and it's used
5694 in something like
5696 template <typename T> struct B { A<T>::C<int> m; };
5697 B<float>;
5699 Create the partial instantiation.
5701 TREE_VEC_LENGTH (arglist)--;
5702 found = tsubst (template, arglist, complain, NULL_TREE);
5703 TREE_VEC_LENGTH (arglist)++;
5707 SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
5708 DECL_TEMPLATE_INSTANTIATIONS (template)
5709 = tree_cons (arglist, t,
5710 DECL_TEMPLATE_INSTANTIATIONS (template));
5712 if (TREE_CODE (t) == ENUMERAL_TYPE
5713 && !is_partial_instantiation)
5714 /* Now that the type has been registered on the instantiations
5715 list, we set up the enumerators. Because the enumeration
5716 constants may involve the enumeration type itself, we make
5717 sure to register the type first, and then create the
5718 constants. That way, doing tsubst_expr for the enumeration
5719 constants won't result in recursive calls here; we'll find
5720 the instantiation and exit above. */
5721 tsubst_enum (template_type, t, arglist);
5723 if (is_partial_instantiation)
5724 /* If the type makes use of template parameters, the
5725 code that generates debugging information will crash. */
5726 DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
5728 /* Possibly limit visibility based on template args. */
5729 TREE_PUBLIC (type_decl) = 1;
5730 determine_visibility (type_decl);
5732 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
5734 timevar_pop (TV_NAME_LOOKUP);
5737 struct pair_fn_data
5739 tree_fn_t fn;
5740 void *data;
5741 struct pointer_set_t *visited;
5744 /* Called from for_each_template_parm via walk_tree. */
5746 static tree
5747 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
5749 tree t = *tp;
5750 struct pair_fn_data *pfd = (struct pair_fn_data *) d;
5751 tree_fn_t fn = pfd->fn;
5752 void *data = pfd->data;
5754 if (TYPE_P (t)
5755 && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited))
5756 return error_mark_node;
5758 switch (TREE_CODE (t))
5760 case RECORD_TYPE:
5761 if (TYPE_PTRMEMFUNC_P (t))
5762 break;
5763 /* Fall through. */
5765 case UNION_TYPE:
5766 case ENUMERAL_TYPE:
5767 if (!TYPE_TEMPLATE_INFO (t))
5768 *walk_subtrees = 0;
5769 else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
5770 fn, data, pfd->visited))
5771 return error_mark_node;
5772 break;
5774 case INTEGER_TYPE:
5775 if (for_each_template_parm (TYPE_MIN_VALUE (t),
5776 fn, data, pfd->visited)
5777 || for_each_template_parm (TYPE_MAX_VALUE (t),
5778 fn, data, pfd->visited))
5779 return error_mark_node;
5780 break;
5782 case METHOD_TYPE:
5783 /* Since we're not going to walk subtrees, we have to do this
5784 explicitly here. */
5785 if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
5786 pfd->visited))
5787 return error_mark_node;
5788 /* Fall through. */
5790 case FUNCTION_TYPE:
5791 /* Check the return type. */
5792 if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
5793 return error_mark_node;
5795 /* Check the parameter types. Since default arguments are not
5796 instantiated until they are needed, the TYPE_ARG_TYPES may
5797 contain expressions that involve template parameters. But,
5798 no-one should be looking at them yet. And, once they're
5799 instantiated, they don't contain template parameters, so
5800 there's no point in looking at them then, either. */
5802 tree parm;
5804 for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
5805 if (for_each_template_parm (TREE_VALUE (parm), fn, data,
5806 pfd->visited))
5807 return error_mark_node;
5809 /* Since we've already handled the TYPE_ARG_TYPES, we don't
5810 want walk_tree walking into them itself. */
5811 *walk_subtrees = 0;
5813 break;
5815 case TYPEOF_TYPE:
5816 if (for_each_template_parm (TYPE_FIELDS (t), fn, data,
5817 pfd->visited))
5818 return error_mark_node;
5819 break;
5821 case FUNCTION_DECL:
5822 case VAR_DECL:
5823 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
5824 && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
5825 pfd->visited))
5826 return error_mark_node;
5827 /* Fall through. */
5829 case PARM_DECL:
5830 case CONST_DECL:
5831 if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
5832 && for_each_template_parm (DECL_INITIAL (t), fn, data,
5833 pfd->visited))
5834 return error_mark_node;
5835 if (DECL_CONTEXT (t)
5836 && for_each_template_parm (DECL_CONTEXT (t), fn, data,
5837 pfd->visited))
5838 return error_mark_node;
5839 break;
5841 case BOUND_TEMPLATE_TEMPLATE_PARM:
5842 /* Record template parameters such as `T' inside `TT<T>'. */
5843 if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited))
5844 return error_mark_node;
5845 /* Fall through. */
5847 case TEMPLATE_TEMPLATE_PARM:
5848 case TEMPLATE_TYPE_PARM:
5849 case TEMPLATE_PARM_INDEX:
5850 if (fn && (*fn)(t, data))
5851 return error_mark_node;
5852 else if (!fn)
5853 return error_mark_node;
5854 break;
5856 case TEMPLATE_DECL:
5857 /* A template template parameter is encountered. */
5858 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
5859 && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
5860 return error_mark_node;
5862 /* Already substituted template template parameter */
5863 *walk_subtrees = 0;
5864 break;
5866 case TYPENAME_TYPE:
5867 if (!fn
5868 || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
5869 data, pfd->visited))
5870 return error_mark_node;
5871 break;
5873 case CONSTRUCTOR:
5874 if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
5875 && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
5876 (TREE_TYPE (t)), fn, data,
5877 pfd->visited))
5878 return error_mark_node;
5879 break;
5881 case INDIRECT_REF:
5882 case COMPONENT_REF:
5883 /* If there's no type, then this thing must be some expression
5884 involving template parameters. */
5885 if (!fn && !TREE_TYPE (t))
5886 return error_mark_node;
5887 break;
5889 case MODOP_EXPR:
5890 case CAST_EXPR:
5891 case REINTERPRET_CAST_EXPR:
5892 case CONST_CAST_EXPR:
5893 case STATIC_CAST_EXPR:
5894 case DYNAMIC_CAST_EXPR:
5895 case ARROW_EXPR:
5896 case DOTSTAR_EXPR:
5897 case TYPEID_EXPR:
5898 case PSEUDO_DTOR_EXPR:
5899 if (!fn)
5900 return error_mark_node;
5901 break;
5903 default:
5904 break;
5907 /* We didn't find any template parameters we liked. */
5908 return NULL_TREE;
5911 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
5912 BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
5913 call FN with the parameter and the DATA.
5914 If FN returns nonzero, the iteration is terminated, and
5915 for_each_template_parm returns 1. Otherwise, the iteration
5916 continues. If FN never returns a nonzero value, the value
5917 returned by for_each_template_parm is 0. If FN is NULL, it is
5918 considered to be the function which always returns 1. */
5920 static int
5921 for_each_template_parm (tree t, tree_fn_t fn, void* data,
5922 struct pointer_set_t *visited)
5924 struct pair_fn_data pfd;
5925 int result;
5927 /* Set up. */
5928 pfd.fn = fn;
5929 pfd.data = data;
5931 /* Walk the tree. (Conceptually, we would like to walk without
5932 duplicates, but for_each_template_parm_r recursively calls
5933 for_each_template_parm, so we would need to reorganize a fair
5934 bit to use walk_tree_without_duplicates, so we keep our own
5935 visited list.) */
5936 if (visited)
5937 pfd.visited = visited;
5938 else
5939 pfd.visited = pointer_set_create ();
5940 result = cp_walk_tree (&t,
5941 for_each_template_parm_r,
5942 &pfd,
5943 pfd.visited) != NULL_TREE;
5945 /* Clean up. */
5946 if (!visited)
5948 pointer_set_destroy (pfd.visited);
5949 pfd.visited = 0;
5952 return result;
5955 /* Returns true if T depends on any template parameter. */
5958 uses_template_parms (tree t)
5960 bool dependent_p;
5961 int saved_processing_template_decl;
5963 saved_processing_template_decl = processing_template_decl;
5964 if (!saved_processing_template_decl)
5965 processing_template_decl = 1;
5966 if (TYPE_P (t))
5967 dependent_p = dependent_type_p (t);
5968 else if (TREE_CODE (t) == TREE_VEC)
5969 dependent_p = any_dependent_template_arguments_p (t);
5970 else if (TREE_CODE (t) == TREE_LIST)
5971 dependent_p = (uses_template_parms (TREE_VALUE (t))
5972 || uses_template_parms (TREE_CHAIN (t)));
5973 else if (TREE_CODE (t) == TYPE_DECL)
5974 dependent_p = dependent_type_p (TREE_TYPE (t));
5975 else if (DECL_P (t)
5976 || EXPR_P (t)
5977 || TREE_CODE (t) == TEMPLATE_PARM_INDEX
5978 || TREE_CODE (t) == OVERLOAD
5979 || TREE_CODE (t) == BASELINK
5980 || TREE_CODE (t) == IDENTIFIER_NODE
5981 || TREE_CODE (t) == TRAIT_EXPR
5982 || CONSTANT_CLASS_P (t))
5983 dependent_p = (type_dependent_expression_p (t)
5984 || value_dependent_expression_p (t));
5985 else
5987 gcc_assert (t == error_mark_node);
5988 dependent_p = false;
5991 processing_template_decl = saved_processing_template_decl;
5993 return dependent_p;
5996 /* Returns true if T depends on any template parameter with level LEVEL. */
5999 uses_template_parms_level (tree t, int level)
6001 return for_each_template_parm (t, template_parm_this_level_p, &level, NULL);
6004 static int tinst_depth;
6005 extern int max_tinst_depth;
6006 #ifdef GATHER_STATISTICS
6007 int depth_reached;
6008 #endif
6009 static int tinst_level_tick;
6010 static int last_template_error_tick;
6012 /* We're starting to instantiate D; record the template instantiation context
6013 for diagnostics and to restore it later. */
6015 static int
6016 push_tinst_level (tree d)
6018 struct tinst_level *new;
6020 if (tinst_depth >= max_tinst_depth)
6022 /* If the instantiation in question still has unbound template parms,
6023 we don't really care if we can't instantiate it, so just return.
6024 This happens with base instantiation for implicit `typename'. */
6025 if (uses_template_parms (d))
6026 return 0;
6028 last_template_error_tick = tinst_level_tick;
6029 error ("template instantiation depth exceeds maximum of %d (use "
6030 "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
6031 max_tinst_depth, d);
6033 print_instantiation_context ();
6035 return 0;
6038 new = GGC_NEW (struct tinst_level);
6039 new->decl = d;
6040 new->locus = input_location;
6041 new->in_system_header_p = in_system_header;
6042 new->next = current_tinst_level;
6043 current_tinst_level = new;
6045 ++tinst_depth;
6046 #ifdef GATHER_STATISTICS
6047 if (tinst_depth > depth_reached)
6048 depth_reached = tinst_depth;
6049 #endif
6051 ++tinst_level_tick;
6052 return 1;
6055 /* We're done instantiating this template; return to the instantiation
6056 context. */
6058 static void
6059 pop_tinst_level (void)
6061 /* Restore the filename and line number stashed away when we started
6062 this instantiation. */
6063 input_location = current_tinst_level->locus;
6064 in_system_header = current_tinst_level->in_system_header_p;
6065 current_tinst_level = current_tinst_level->next;
6066 --tinst_depth;
6067 ++tinst_level_tick;
6070 /* We're instantiating a deferred template; restore the template
6071 instantiation context in which the instantiation was requested, which
6072 is one step out from LEVEL. Return the corresponding DECL or TYPE. */
6074 static tree
6075 reopen_tinst_level (struct tinst_level *level)
6077 struct tinst_level *t;
6079 tinst_depth = 0;
6080 for (t = level; t; t = t->next)
6081 ++tinst_depth;
6083 current_tinst_level = level;
6084 pop_tinst_level ();
6085 return level->decl;
6088 /* Returns the TINST_LEVEL which gives the original instantiation
6089 context. */
6091 struct tinst_level *
6092 outermost_tinst_level (void)
6094 struct tinst_level *level = current_tinst_level;
6095 if (level)
6096 while (level->next)
6097 level = level->next;
6098 return level;
6101 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
6102 vector of template arguments, as for tsubst.
6104 Returns an appropriate tsubst'd friend declaration. */
6106 static tree
6107 tsubst_friend_function (tree decl, tree args)
6109 tree new_friend;
6111 if (TREE_CODE (decl) == FUNCTION_DECL
6112 && DECL_TEMPLATE_INSTANTIATION (decl)
6113 && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
6114 /* This was a friend declared with an explicit template
6115 argument list, e.g.:
6117 friend void f<>(T);
6119 to indicate that f was a template instantiation, not a new
6120 function declaration. Now, we have to figure out what
6121 instantiation of what template. */
6123 tree template_id, arglist, fns;
6124 tree new_args;
6125 tree tmpl;
6126 tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
6128 /* Friend functions are looked up in the containing namespace scope.
6129 We must enter that scope, to avoid finding member functions of the
6130 current cless with same name. */
6131 push_nested_namespace (ns);
6132 fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
6133 tf_warning_or_error, NULL_TREE,
6134 /*integral_constant_expression_p=*/false);
6135 pop_nested_namespace (ns);
6136 arglist = tsubst (DECL_TI_ARGS (decl), args,
6137 tf_warning_or_error, NULL_TREE);
6138 template_id = lookup_template_function (fns, arglist);
6140 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6141 tmpl = determine_specialization (template_id, new_friend,
6142 &new_args,
6143 /*need_member_template=*/0,
6144 TREE_VEC_LENGTH (args),
6145 tsk_none);
6146 return instantiate_template (tmpl, new_args, tf_error);
6149 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6151 /* The NEW_FRIEND will look like an instantiation, to the
6152 compiler, but is not an instantiation from the point of view of
6153 the language. For example, we might have had:
6155 template <class T> struct S {
6156 template <class U> friend void f(T, U);
6159 Then, in S<int>, template <class U> void f(int, U) is not an
6160 instantiation of anything. */
6161 if (new_friend == error_mark_node)
6162 return error_mark_node;
6164 DECL_USE_TEMPLATE (new_friend) = 0;
6165 if (TREE_CODE (decl) == TEMPLATE_DECL)
6167 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
6168 DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
6169 = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
6172 /* The mangled name for the NEW_FRIEND is incorrect. The function
6173 is not a template instantiation and should not be mangled like
6174 one. Therefore, we forget the mangling here; we'll recompute it
6175 later if we need it. */
6176 if (TREE_CODE (new_friend) != TEMPLATE_DECL)
6178 SET_DECL_RTL (new_friend, NULL_RTX);
6179 SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
6182 if (DECL_NAMESPACE_SCOPE_P (new_friend))
6184 tree old_decl;
6185 tree new_friend_template_info;
6186 tree new_friend_result_template_info;
6187 tree ns;
6188 int new_friend_is_defn;
6190 /* We must save some information from NEW_FRIEND before calling
6191 duplicate decls since that function will free NEW_FRIEND if
6192 possible. */
6193 new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
6194 new_friend_is_defn =
6195 (DECL_INITIAL (DECL_TEMPLATE_RESULT
6196 (template_for_substitution (new_friend)))
6197 != NULL_TREE);
6198 if (TREE_CODE (new_friend) == TEMPLATE_DECL)
6200 /* This declaration is a `primary' template. */
6201 DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
6203 new_friend_result_template_info
6204 = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
6206 else
6207 new_friend_result_template_info = NULL_TREE;
6209 /* Make the init_value nonzero so pushdecl knows this is a defn. */
6210 if (new_friend_is_defn)
6211 DECL_INITIAL (new_friend) = error_mark_node;
6213 /* Inside pushdecl_namespace_level, we will push into the
6214 current namespace. However, the friend function should go
6215 into the namespace of the template. */
6216 ns = decl_namespace_context (new_friend);
6217 push_nested_namespace (ns);
6218 old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
6219 pop_nested_namespace (ns);
6221 if (old_decl == error_mark_node)
6222 return error_mark_node;
6224 if (old_decl != new_friend)
6226 /* This new friend declaration matched an existing
6227 declaration. For example, given:
6229 template <class T> void f(T);
6230 template <class U> class C {
6231 template <class T> friend void f(T) {}
6234 the friend declaration actually provides the definition
6235 of `f', once C has been instantiated for some type. So,
6236 old_decl will be the out-of-class template declaration,
6237 while new_friend is the in-class definition.
6239 But, if `f' was called before this point, the
6240 instantiation of `f' will have DECL_TI_ARGS corresponding
6241 to `T' but not to `U', references to which might appear
6242 in the definition of `f'. Previously, the most general
6243 template for an instantiation of `f' was the out-of-class
6244 version; now it is the in-class version. Therefore, we
6245 run through all specialization of `f', adding to their
6246 DECL_TI_ARGS appropriately. In particular, they need a
6247 new set of outer arguments, corresponding to the
6248 arguments for this class instantiation.
6250 The same situation can arise with something like this:
6252 friend void f(int);
6253 template <class T> class C {
6254 friend void f(T) {}
6257 when `C<int>' is instantiated. Now, `f(int)' is defined
6258 in the class. */
6260 if (!new_friend_is_defn)
6261 /* On the other hand, if the in-class declaration does
6262 *not* provide a definition, then we don't want to alter
6263 existing definitions. We can just leave everything
6264 alone. */
6266 else
6268 /* Overwrite whatever template info was there before, if
6269 any, with the new template information pertaining to
6270 the declaration. */
6271 DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
6273 if (TREE_CODE (old_decl) != TEMPLATE_DECL)
6274 reregister_specialization (new_friend,
6275 most_general_template (old_decl),
6276 old_decl);
6277 else
6279 tree t;
6280 tree new_friend_args;
6282 DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
6283 = new_friend_result_template_info;
6285 new_friend_args = TI_ARGS (new_friend_template_info);
6286 for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
6287 t != NULL_TREE;
6288 t = TREE_CHAIN (t))
6290 tree spec = TREE_VALUE (t);
6292 DECL_TI_ARGS (spec)
6293 = add_outermost_template_args (new_friend_args,
6294 DECL_TI_ARGS (spec));
6297 /* Now, since specializations are always supposed to
6298 hang off of the most general template, we must move
6299 them. */
6300 t = most_general_template (old_decl);
6301 if (t != old_decl)
6303 DECL_TEMPLATE_SPECIALIZATIONS (t)
6304 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
6305 DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
6306 DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
6311 /* The information from NEW_FRIEND has been merged into OLD_DECL
6312 by duplicate_decls. */
6313 new_friend = old_decl;
6316 else
6318 tree context = DECL_CONTEXT (new_friend);
6319 bool dependent_p;
6321 /* In the code
6322 template <class T> class C {
6323 template <class U> friend void C1<U>::f (); // case 1
6324 friend void C2<T>::f (); // case 2
6326 we only need to make sure CONTEXT is a complete type for
6327 case 2. To distinguish between the two cases, we note that
6328 CONTEXT of case 1 remains dependent type after tsubst while
6329 this isn't true for case 2. */
6330 ++processing_template_decl;
6331 dependent_p = dependent_type_p (context);
6332 --processing_template_decl;
6334 if (!dependent_p
6335 && !complete_type_or_else (context, NULL_TREE))
6336 return error_mark_node;
6338 if (COMPLETE_TYPE_P (context))
6340 /* Check to see that the declaration is really present, and,
6341 possibly obtain an improved declaration. */
6342 tree fn = check_classfn (context,
6343 new_friend, NULL_TREE);
6345 if (fn)
6346 new_friend = fn;
6350 return new_friend;
6353 /* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
6354 template arguments, as for tsubst.
6356 Returns an appropriate tsubst'd friend type or error_mark_node on
6357 failure. */
6359 static tree
6360 tsubst_friend_class (tree friend_tmpl, tree args)
6362 tree friend_type;
6363 tree tmpl;
6364 tree context;
6366 context = DECL_CONTEXT (friend_tmpl);
6368 if (context)
6370 if (TREE_CODE (context) == NAMESPACE_DECL)
6371 push_nested_namespace (context);
6372 else
6373 push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
6376 /* Look for a class template declaration. We look for hidden names
6377 because two friend declarations of the same template are the
6378 same. For example, in:
6380 struct A {
6381 template <typename> friend class F;
6383 template <typename> struct B {
6384 template <typename> friend class F;
6387 both F templates are the same. */
6388 tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
6389 /*block_p=*/true, 0,
6390 LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
6392 /* But, if we don't find one, it might be because we're in a
6393 situation like this:
6395 template <class T>
6396 struct S {
6397 template <class U>
6398 friend struct S;
6401 Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
6402 for `S<int>', not the TEMPLATE_DECL. */
6403 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
6405 tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
6406 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
6409 if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
6411 /* The friend template has already been declared. Just
6412 check to see that the declarations match, and install any new
6413 default parameters. We must tsubst the default parameters,
6414 of course. We only need the innermost template parameters
6415 because that is all that redeclare_class_template will look
6416 at. */
6417 if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
6418 > TMPL_ARGS_DEPTH (args))
6420 tree parms;
6421 parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
6422 args, tf_warning_or_error);
6423 redeclare_class_template (TREE_TYPE (tmpl), parms);
6426 friend_type = TREE_TYPE (tmpl);
6428 else
6430 /* The friend template has not already been declared. In this
6431 case, the instantiation of the template class will cause the
6432 injection of this template into the global scope. */
6433 tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
6434 if (tmpl == error_mark_node)
6435 return error_mark_node;
6437 /* The new TMPL is not an instantiation of anything, so we
6438 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE for
6439 the new type because that is supposed to be the corresponding
6440 template decl, i.e., TMPL. */
6441 DECL_USE_TEMPLATE (tmpl) = 0;
6442 DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
6443 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
6444 CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
6445 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
6447 /* Inject this template into the global scope. */
6448 friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
6451 if (context)
6453 if (TREE_CODE (context) == NAMESPACE_DECL)
6454 pop_nested_namespace (context);
6455 else
6456 pop_nested_class ();
6459 return friend_type;
6462 /* Returns zero if TYPE cannot be completed later due to circularity.
6463 Otherwise returns one. */
6465 static int
6466 can_complete_type_without_circularity (tree type)
6468 if (type == NULL_TREE || type == error_mark_node)
6469 return 0;
6470 else if (COMPLETE_TYPE_P (type))
6471 return 1;
6472 else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
6473 return can_complete_type_without_circularity (TREE_TYPE (type));
6474 else if (CLASS_TYPE_P (type)
6475 && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
6476 return 0;
6477 else
6478 return 1;
6481 /* Apply any attributes which had to be deferred until instantiation
6482 time. DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
6483 ARGS, COMPLAIN, IN_DECL are as tsubst. */
6485 static void
6486 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
6487 tree args, tsubst_flags_t complain, tree in_decl)
6489 tree late_attrs = NULL_TREE;
6490 tree t;
6492 if (DECL_P (*decl_p))
6493 DECL_ATTRIBUTES (*decl_p) = attributes;
6494 else
6495 TYPE_ATTRIBUTES (*decl_p) = attributes;
6497 for (t = attributes; t; t = TREE_CHAIN (t))
6498 if (ATTR_IS_DEPENDENT (t))
6499 late_attrs = tree_cons
6500 (TREE_PURPOSE (t),
6501 tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
6502 /*integral_constant_expression_p=*/false),
6503 late_attrs);
6505 cplus_decl_attributes (decl_p, late_attrs, attr_flags);
6508 tree
6509 instantiate_class_template (tree type)
6511 tree template, args, pattern, t, member;
6512 tree typedecl;
6513 tree pbinfo;
6514 tree base_list;
6516 if (type == error_mark_node)
6517 return error_mark_node;
6519 if (TYPE_BEING_DEFINED (type)
6520 || COMPLETE_TYPE_P (type)
6521 || dependent_type_p (type))
6522 return type;
6524 /* Figure out which template is being instantiated. */
6525 template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
6526 gcc_assert (TREE_CODE (template) == TEMPLATE_DECL);
6528 /* Determine what specialization of the original template to
6529 instantiate. */
6530 t = most_specialized_class (type, template);
6531 if (t == error_mark_node)
6533 TYPE_BEING_DEFINED (type) = 1;
6534 return error_mark_node;
6536 else if (t)
6538 /* This TYPE is actually an instantiation of a partial
6539 specialization. We replace the innermost set of ARGS with
6540 the arguments appropriate for substitution. For example,
6541 given:
6543 template <class T> struct S {};
6544 template <class T> struct S<T*> {};
6546 and supposing that we are instantiating S<int*>, ARGS will
6547 presently be {int*} -- but we need {int}. */
6548 pattern = TREE_TYPE (t);
6549 args = TREE_PURPOSE (t);
6551 else
6553 pattern = TREE_TYPE (template);
6554 args = CLASSTYPE_TI_ARGS (type);
6557 /* If the template we're instantiating is incomplete, then clearly
6558 there's nothing we can do. */
6559 if (!COMPLETE_TYPE_P (pattern))
6560 return type;
6562 /* If we've recursively instantiated too many templates, stop. */
6563 if (! push_tinst_level (type))
6564 return type;
6566 /* Now we're really doing the instantiation. Mark the type as in
6567 the process of being defined. */
6568 TYPE_BEING_DEFINED (type) = 1;
6570 /* We may be in the middle of deferred access check. Disable
6571 it now. */
6572 push_deferring_access_checks (dk_no_deferred);
6574 push_to_top_level ();
6576 SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
6578 /* Set the input location to the template definition. This is needed
6579 if tsubsting causes an error. */
6580 typedecl = TYPE_MAIN_DECL (type);
6581 input_location = DECL_SOURCE_LOCATION (typedecl);
6582 in_system_header = DECL_IN_SYSTEM_HEADER (typedecl);
6584 TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
6585 TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
6586 TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
6587 TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
6588 TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
6589 TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
6590 TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
6591 TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
6592 TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
6593 TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
6594 TYPE_PACKED (type) = TYPE_PACKED (pattern);
6595 TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
6596 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
6597 TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
6598 if (ANON_AGGR_TYPE_P (pattern))
6599 SET_ANON_AGGR_TYPE_P (type);
6600 if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
6602 CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
6603 CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
6606 pbinfo = TYPE_BINFO (pattern);
6608 /* We should never instantiate a nested class before its enclosing
6609 class; we need to look up the nested class by name before we can
6610 instantiate it, and that lookup should instantiate the enclosing
6611 class. */
6612 gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
6613 || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
6614 || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
6616 base_list = NULL_TREE;
6617 if (BINFO_N_BASE_BINFOS (pbinfo))
6619 tree pbase_binfo;
6620 tree context = TYPE_CONTEXT (type);
6621 tree pushed_scope;
6622 int i;
6624 /* We must enter the scope containing the type, as that is where
6625 the accessibility of types named in dependent bases are
6626 looked up from. */
6627 pushed_scope = push_scope (context ? context : global_namespace);
6629 /* Substitute into each of the bases to determine the actual
6630 basetypes. */
6631 for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
6633 tree base;
6634 tree access = BINFO_BASE_ACCESS (pbinfo, i);
6635 tree expanded_bases = NULL_TREE;
6636 int idx, len = 1;
6638 if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
6640 expanded_bases =
6641 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
6642 args, tf_error, NULL_TREE);
6643 if (expanded_bases == error_mark_node)
6644 continue;
6646 len = TREE_VEC_LENGTH (expanded_bases);
6649 for (idx = 0; idx < len; idx++)
6651 if (expanded_bases)
6652 /* Extract the already-expanded base class. */
6653 base = TREE_VEC_ELT (expanded_bases, idx);
6654 else
6655 /* Substitute to figure out the base class. */
6656 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error,
6657 NULL_TREE);
6659 if (base == error_mark_node)
6660 continue;
6662 base_list = tree_cons (access, base, base_list);
6663 if (BINFO_VIRTUAL_P (pbase_binfo))
6664 TREE_TYPE (base_list) = integer_type_node;
6668 /* The list is now in reverse order; correct that. */
6669 base_list = nreverse (base_list);
6671 if (pushed_scope)
6672 pop_scope (pushed_scope);
6674 /* Now call xref_basetypes to set up all the base-class
6675 information. */
6676 xref_basetypes (type, base_list);
6678 apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
6679 (int) ATTR_FLAG_TYPE_IN_PLACE,
6680 args, tf_error, NULL_TREE);
6682 /* Now that our base classes are set up, enter the scope of the
6683 class, so that name lookups into base classes, etc. will work
6684 correctly. This is precisely analogous to what we do in
6685 begin_class_definition when defining an ordinary non-template
6686 class, except we also need to push the enclosing classes. */
6687 push_nested_class (type);
6689 /* Now members are processed in the order of declaration. */
6690 for (member = CLASSTYPE_DECL_LIST (pattern);
6691 member; member = TREE_CHAIN (member))
6693 tree t = TREE_VALUE (member);
6695 if (TREE_PURPOSE (member))
6697 if (TYPE_P (t))
6699 /* Build new CLASSTYPE_NESTED_UTDS. */
6701 tree newtag;
6702 bool class_template_p;
6704 class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
6705 && TYPE_LANG_SPECIFIC (t)
6706 && CLASSTYPE_IS_TEMPLATE (t));
6707 /* If the member is a class template, then -- even after
6708 substitution -- there may be dependent types in the
6709 template argument list for the class. We increment
6710 PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
6711 that function will assume that no types are dependent
6712 when outside of a template. */
6713 if (class_template_p)
6714 ++processing_template_decl;
6715 newtag = tsubst (t, args, tf_error, NULL_TREE);
6716 if (class_template_p)
6717 --processing_template_decl;
6718 if (newtag == error_mark_node)
6719 continue;
6721 if (TREE_CODE (newtag) != ENUMERAL_TYPE)
6723 tree name = TYPE_IDENTIFIER (t);
6725 if (class_template_p)
6726 /* Unfortunately, lookup_template_class sets
6727 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
6728 instantiation (i.e., for the type of a member
6729 template class nested within a template class.)
6730 This behavior is required for
6731 maybe_process_partial_specialization to work
6732 correctly, but is not accurate in this case;
6733 the TAG is not an instantiation of anything.
6734 (The corresponding TEMPLATE_DECL is an
6735 instantiation, but the TYPE is not.) */
6736 CLASSTYPE_USE_TEMPLATE (newtag) = 0;
6738 /* Now, we call pushtag to put this NEWTAG into the scope of
6739 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
6740 pushtag calling push_template_decl. We don't have to do
6741 this for enums because it will already have been done in
6742 tsubst_enum. */
6743 if (name)
6744 SET_IDENTIFIER_TYPE_VALUE (name, newtag);
6745 pushtag (name, newtag, /*tag_scope=*/ts_current);
6748 else if (TREE_CODE (t) == FUNCTION_DECL
6749 || DECL_FUNCTION_TEMPLATE_P (t))
6751 /* Build new TYPE_METHODS. */
6752 tree r;
6754 if (TREE_CODE (t) == TEMPLATE_DECL)
6755 ++processing_template_decl;
6756 r = tsubst (t, args, tf_error, NULL_TREE);
6757 if (TREE_CODE (t) == TEMPLATE_DECL)
6758 --processing_template_decl;
6759 set_current_access_from_decl (r);
6760 finish_member_declaration (r);
6762 else
6764 /* Build new TYPE_FIELDS. */
6765 if (TREE_CODE (t) == STATIC_ASSERT)
6767 tree condition =
6768 tsubst_expr (STATIC_ASSERT_CONDITION (t), args,
6769 tf_warning_or_error, NULL_TREE,
6770 /*integral_constant_expression_p=*/true);
6771 finish_static_assert (condition,
6772 STATIC_ASSERT_MESSAGE (t),
6773 STATIC_ASSERT_SOURCE_LOCATION (t),
6774 /*member_p=*/true);
6776 else if (TREE_CODE (t) != CONST_DECL)
6778 tree r;
6780 /* The the file and line for this declaration, to
6781 assist in error message reporting. Since we
6782 called push_tinst_level above, we don't need to
6783 restore these. */
6784 input_location = DECL_SOURCE_LOCATION (t);
6786 if (TREE_CODE (t) == TEMPLATE_DECL)
6787 ++processing_template_decl;
6788 r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
6789 if (TREE_CODE (t) == TEMPLATE_DECL)
6790 --processing_template_decl;
6791 if (TREE_CODE (r) == VAR_DECL)
6793 /* In [temp.inst]:
6795 [t]he initialization (and any associated
6796 side-effects) of a static data member does
6797 not occur unless the static data member is
6798 itself used in a way that requires the
6799 definition of the static data member to
6800 exist.
6802 Therefore, we do not substitute into the
6803 initialized for the static data member here. */
6804 finish_static_data_member_decl
6806 /*init=*/NULL_TREE,
6807 /*init_const_expr_p=*/false,
6808 /*asmspec_tree=*/NULL_TREE,
6809 /*flags=*/0);
6810 if (DECL_INITIALIZED_IN_CLASS_P (r))
6811 check_static_variable_definition (r, TREE_TYPE (r));
6813 else if (TREE_CODE (r) == FIELD_DECL)
6815 /* Determine whether R has a valid type and can be
6816 completed later. If R is invalid, then it is
6817 replaced by error_mark_node so that it will not be
6818 added to TYPE_FIELDS. */
6819 tree rtype = TREE_TYPE (r);
6820 if (can_complete_type_without_circularity (rtype))
6821 complete_type (rtype);
6823 if (!COMPLETE_TYPE_P (rtype))
6825 cxx_incomplete_type_error (r, rtype);
6826 r = error_mark_node;
6830 /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
6831 such a thing will already have been added to the field
6832 list by tsubst_enum in finish_member_declaration in the
6833 CLASSTYPE_NESTED_UTDS case above. */
6834 if (!(TREE_CODE (r) == TYPE_DECL
6835 && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
6836 && DECL_ARTIFICIAL (r)))
6838 set_current_access_from_decl (r);
6839 finish_member_declaration (r);
6844 else
6846 if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
6848 /* Build new CLASSTYPE_FRIEND_CLASSES. */
6850 tree friend_type = t;
6851 bool adjust_processing_template_decl = false;
6853 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
6855 /* template <class T> friend class C; */
6856 friend_type = tsubst_friend_class (friend_type, args);
6857 adjust_processing_template_decl = true;
6859 else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
6861 /* template <class T> friend class C::D; */
6862 friend_type = tsubst (friend_type, args,
6863 tf_warning_or_error, NULL_TREE);
6864 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
6865 friend_type = TREE_TYPE (friend_type);
6866 adjust_processing_template_decl = true;
6868 else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
6870 /* This could be either
6872 friend class T::C;
6874 when dependent_type_p is false or
6876 template <class U> friend class T::C;
6878 otherwise. */
6879 friend_type = tsubst (friend_type, args,
6880 tf_warning_or_error, NULL_TREE);
6881 /* Bump processing_template_decl for correct
6882 dependent_type_p calculation. */
6883 ++processing_template_decl;
6884 if (dependent_type_p (friend_type))
6885 adjust_processing_template_decl = true;
6886 --processing_template_decl;
6888 else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
6889 && hidden_name_p (TYPE_NAME (friend_type)))
6891 /* friend class C;
6893 where C hasn't been declared yet. Let's lookup name
6894 from namespace scope directly, bypassing any name that
6895 come from dependent base class. */
6896 tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
6898 /* The call to xref_tag_from_type does injection for friend
6899 classes. */
6900 push_nested_namespace (ns);
6901 friend_type =
6902 xref_tag_from_type (friend_type, NULL_TREE,
6903 /*tag_scope=*/ts_current);
6904 pop_nested_namespace (ns);
6906 else if (uses_template_parms (friend_type))
6907 /* friend class C<T>; */
6908 friend_type = tsubst (friend_type, args,
6909 tf_warning_or_error, NULL_TREE);
6910 /* Otherwise it's
6912 friend class C;
6914 where C is already declared or
6916 friend class C<int>;
6918 We don't have to do anything in these cases. */
6920 if (adjust_processing_template_decl)
6921 /* Trick make_friend_class into realizing that the friend
6922 we're adding is a template, not an ordinary class. It's
6923 important that we use make_friend_class since it will
6924 perform some error-checking and output cross-reference
6925 information. */
6926 ++processing_template_decl;
6928 if (friend_type != error_mark_node)
6929 make_friend_class (type, friend_type, /*complain=*/false);
6931 if (adjust_processing_template_decl)
6932 --processing_template_decl;
6934 else
6936 /* Build new DECL_FRIENDLIST. */
6937 tree r;
6939 /* The the file and line for this declaration, to
6940 assist in error message reporting. Since we
6941 called push_tinst_level above, we don't need to
6942 restore these. */
6943 input_location = DECL_SOURCE_LOCATION (t);
6945 if (TREE_CODE (t) == TEMPLATE_DECL)
6947 ++processing_template_decl;
6948 push_deferring_access_checks (dk_no_check);
6951 r = tsubst_friend_function (t, args);
6952 add_friend (type, r, /*complain=*/false);
6953 if (TREE_CODE (t) == TEMPLATE_DECL)
6955 pop_deferring_access_checks ();
6956 --processing_template_decl;
6962 /* Set the file and line number information to whatever is given for
6963 the class itself. This puts error messages involving generated
6964 implicit functions at a predictable point, and the same point
6965 that would be used for non-template classes. */
6966 input_location = DECL_SOURCE_LOCATION (typedecl);
6968 unreverse_member_declarations (type);
6969 finish_struct_1 (type);
6970 TYPE_BEING_DEFINED (type) = 0;
6972 /* Now that the class is complete, instantiate default arguments for
6973 any member functions. We don't do this earlier because the
6974 default arguments may reference members of the class. */
6975 if (!PRIMARY_TEMPLATE_P (template))
6976 for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
6977 if (TREE_CODE (t) == FUNCTION_DECL
6978 /* Implicitly generated member functions will not have template
6979 information; they are not instantiations, but instead are
6980 created "fresh" for each instantiation. */
6981 && DECL_TEMPLATE_INFO (t))
6982 tsubst_default_arguments (t);
6984 pop_nested_class ();
6985 pop_from_top_level ();
6986 pop_deferring_access_checks ();
6987 pop_tinst_level ();
6989 /* The vtable for a template class can be emitted in any translation
6990 unit in which the class is instantiated. When there is no key
6991 method, however, finish_struct_1 will already have added TYPE to
6992 the keyed_classes list. */
6993 if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
6994 keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
6996 return type;
6999 static tree
7000 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7002 tree r;
7004 if (!t)
7005 r = t;
7006 else if (TYPE_P (t))
7007 r = tsubst (t, args, complain, in_decl);
7008 else
7010 r = tsubst_expr (t, args, complain, in_decl,
7011 /*integral_constant_expression_p=*/true);
7012 r = fold_non_dependent_expr (r);
7014 return r;
7017 /* Substitute ARGS into T, which is an pack expansion
7018 (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
7019 TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
7020 (if only a partial substitution could be performed) or
7021 ERROR_MARK_NODE if there was an error. */
7022 tree
7023 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
7024 tree in_decl)
7026 tree pattern;
7027 tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
7028 tree first_arg_pack; int i, len = -1;
7029 tree result;
7030 int incomplete = 0;
7032 gcc_assert (PACK_EXPANSION_P (t));
7033 pattern = PACK_EXPANSION_PATTERN (t);
7035 /* Determine the argument packs that will instantiate the parameter
7036 packs used in the expansion expression. While we're at it,
7037 compute the number of arguments to be expanded and make sure it
7038 is consistent. */
7039 for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack;
7040 pack = TREE_CHAIN (pack))
7042 tree parm_pack = TREE_VALUE (pack);
7043 tree arg_pack = NULL_TREE;
7044 tree orig_arg = NULL_TREE;
7046 if (TREE_CODE (parm_pack) == PARM_DECL)
7048 if (local_specializations)
7049 arg_pack = retrieve_local_specialization (parm_pack);
7051 else
7053 int level, idx, levels;
7054 template_parm_level_and_index (parm_pack, &level, &idx);
7056 levels = TMPL_ARGS_DEPTH (args);
7057 if (level <= levels)
7058 arg_pack = TMPL_ARG (args, level, idx);
7061 orig_arg = arg_pack;
7062 if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
7063 arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
7065 if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
7066 /* This can only happen if we forget to expand an argument
7067 pack somewhere else. Just return an error, silently. */
7069 result = make_tree_vec (1);
7070 TREE_VEC_ELT (result, 0) = error_mark_node;
7071 return result;
7074 if (arg_pack)
7076 int my_len =
7077 TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
7079 /* It's all-or-nothing with incomplete argument packs. */
7080 if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7081 return error_mark_node;
7083 if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7084 incomplete = 1;
7086 if (len < 0)
7088 len = my_len;
7089 first_arg_pack = arg_pack;
7091 else if (len != my_len)
7093 if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
7094 error ("mismatched argument pack lengths while expanding "
7095 "%<%T%>",
7096 pattern);
7097 else
7098 error ("mismatched argument pack lengths while expanding "
7099 "%<%E%>",
7100 pattern);
7101 return error_mark_node;
7104 /* Keep track of the parameter packs and their corresponding
7105 argument packs. */
7106 packs = tree_cons (parm_pack, arg_pack, packs);
7107 TREE_TYPE (packs) = orig_arg;
7109 else
7110 /* We can't substitute for this parameter pack. */
7111 unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
7112 TREE_VALUE (pack),
7113 unsubstituted_packs);
7116 /* We cannot expand this expansion expression, because we don't have
7117 all of the argument packs we need. Substitute into the pattern
7118 and return a PACK_EXPANSION_*. The caller will need to deal with
7119 that. */
7120 if (unsubstituted_packs)
7121 return make_pack_expansion (tsubst (pattern, args, complain,
7122 in_decl));
7124 /* We could not find any argument packs that work. */
7125 if (len < 0)
7126 return error_mark_node;
7128 /* For each argument in each argument pack, substitute into the
7129 pattern. */
7130 result = make_tree_vec (len + incomplete);
7131 for (i = 0; i < len + incomplete; ++i)
7133 /* For parameter pack, change the substitution of the parameter
7134 pack to the ith argument in its argument pack, then expand
7135 the pattern. */
7136 for (pack = packs; pack; pack = TREE_CHAIN (pack))
7138 tree parm = TREE_PURPOSE (pack);
7140 if (TREE_CODE (parm) == PARM_DECL)
7142 /* Select the Ith argument from the pack. */
7143 tree arg = make_node (ARGUMENT_PACK_SELECT);
7144 ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
7145 ARGUMENT_PACK_SELECT_INDEX (arg) = i;
7146 mark_used (parm);
7147 register_local_specialization (arg, parm);
7149 else
7151 tree value = parm;
7152 int idx, level;
7153 template_parm_level_and_index (parm, &level, &idx);
7155 if (i < len)
7157 /* Select the Ith argument from the pack. */
7158 value = make_node (ARGUMENT_PACK_SELECT);
7159 ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
7160 ARGUMENT_PACK_SELECT_INDEX (value) = i;
7163 /* Update the corresponding argument. */
7164 TMPL_ARG (args, level, idx) = value;
7168 /* Substitute into the PATTERN with the altered arguments. */
7169 if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
7170 TREE_VEC_ELT (result, i) =
7171 tsubst_expr (pattern, args, complain, in_decl,
7172 /*integral_constant_expression_p=*/false);
7173 else
7174 TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
7176 if (i == len)
7177 /* When we have incomplete argument packs, the last "expanded"
7178 result is itself a pack expansion, which allows us
7179 to deduce more arguments. */
7180 TREE_VEC_ELT (result, i) =
7181 make_pack_expansion (TREE_VEC_ELT (result, i));
7183 if (TREE_VEC_ELT (result, i) == error_mark_node)
7185 result = error_mark_node;
7186 break;
7190 /* Update ARGS to restore the substitution from parameter packs to
7191 their argument packs. */
7192 for (pack = packs; pack; pack = TREE_CHAIN (pack))
7194 tree parm = TREE_PURPOSE (pack);
7196 if (TREE_CODE (parm) == PARM_DECL)
7197 register_local_specialization (TREE_TYPE (pack), parm);
7198 else
7200 int idx, level;
7201 template_parm_level_and_index (parm, &level, &idx);
7203 /* Update the corresponding argument. */
7204 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
7205 TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
7206 TREE_TYPE (pack);
7207 else
7208 TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
7212 return result;
7215 /* Substitute ARGS into the vector or list of template arguments T. */
7217 static tree
7218 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7220 tree orig_t = t;
7221 int len = TREE_VEC_LENGTH (t);
7222 int need_new = 0, i, expanded_len_adjust = 0, out;
7223 tree *elts = (tree *) alloca (len * sizeof (tree));
7225 for (i = 0; i < len; i++)
7227 tree orig_arg = TREE_VEC_ELT (t, i);
7228 tree new_arg;
7230 if (TREE_CODE (orig_arg) == TREE_VEC)
7231 new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
7232 else if (PACK_EXPANSION_P (orig_arg))
7234 /* Substitute into an expansion expression. */
7235 new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
7237 if (TREE_CODE (new_arg) == TREE_VEC)
7238 /* Add to the expanded length adjustment the number of
7239 expanded arguments. We subtract one from this
7240 measurement, because the argument pack expression
7241 itself is already counted as 1 in
7242 LEN. EXPANDED_LEN_ADJUST can actually be negative, if
7243 the argument pack is empty. */
7244 expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
7246 else if (ARGUMENT_PACK_P (orig_arg))
7248 /* Substitute into each of the arguments. */
7249 new_arg = make_node (TREE_CODE (orig_arg));
7251 SET_ARGUMENT_PACK_ARGS (
7252 new_arg,
7253 tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
7254 args, complain, in_decl));
7256 if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
7257 new_arg = error_mark_node;
7259 if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
7260 TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
7261 complain, in_decl);
7262 TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
7264 if (TREE_TYPE (new_arg) == error_mark_node)
7265 new_arg = error_mark_node;
7268 else
7269 new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
7271 if (new_arg == error_mark_node)
7272 return error_mark_node;
7274 elts[i] = new_arg;
7275 if (new_arg != orig_arg)
7276 need_new = 1;
7279 if (!need_new)
7280 return t;
7282 /* Make space for the expanded arguments coming from template
7283 argument packs. */
7284 t = make_tree_vec (len + expanded_len_adjust);
7285 for (i = 0, out = 0; i < len; i++)
7287 if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
7288 || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
7289 && TREE_CODE (elts[i]) == TREE_VEC)
7291 int idx;
7293 /* Now expand the template argument pack "in place". */
7294 for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
7295 TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
7297 else
7299 TREE_VEC_ELT (t, out) = elts[i];
7300 out++;
7304 return t;
7307 /* Return the result of substituting ARGS into the template parameters
7308 given by PARMS. If there are m levels of ARGS and m + n levels of
7309 PARMS, then the result will contain n levels of PARMS. For
7310 example, if PARMS is `template <class T> template <class U>
7311 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
7312 result will be `template <int*, double, class V>'. */
7314 static tree
7315 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
7317 tree r = NULL_TREE;
7318 tree* new_parms;
7320 /* When substituting into a template, we must set
7321 PROCESSING_TEMPLATE_DECL as the template parameters may be
7322 dependent if they are based on one-another, and the dependency
7323 predicates are short-circuit outside of templates. */
7324 ++processing_template_decl;
7326 for (new_parms = &r;
7327 TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
7328 new_parms = &(TREE_CHAIN (*new_parms)),
7329 parms = TREE_CHAIN (parms))
7331 tree new_vec =
7332 make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
7333 int i;
7335 for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
7337 tree tuple;
7338 tree default_value;
7339 tree parm_decl;
7341 if (parms == error_mark_node)
7342 continue;
7344 tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
7346 if (tuple == error_mark_node)
7347 continue;
7349 default_value = TREE_PURPOSE (tuple);
7350 parm_decl = TREE_VALUE (tuple);
7352 parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
7353 if (TREE_CODE (parm_decl) == PARM_DECL
7354 && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
7355 parm_decl = error_mark_node;
7356 default_value = tsubst_template_arg (default_value, args,
7357 complain, NULL_TREE);
7359 tuple = build_tree_list (default_value, parm_decl);
7360 TREE_VEC_ELT (new_vec, i) = tuple;
7363 *new_parms =
7364 tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
7365 - TMPL_ARGS_DEPTH (args)),
7366 new_vec, NULL_TREE);
7369 --processing_template_decl;
7371 return r;
7374 /* Substitute the ARGS into the indicated aggregate (or enumeration)
7375 type T. If T is not an aggregate or enumeration type, it is
7376 handled as if by tsubst. IN_DECL is as for tsubst. If
7377 ENTERING_SCOPE is nonzero, T is the context for a template which
7378 we are presently tsubst'ing. Return the substituted value. */
7380 static tree
7381 tsubst_aggr_type (tree t,
7382 tree args,
7383 tsubst_flags_t complain,
7384 tree in_decl,
7385 int entering_scope)
7387 if (t == NULL_TREE)
7388 return NULL_TREE;
7390 switch (TREE_CODE (t))
7392 case RECORD_TYPE:
7393 if (TYPE_PTRMEMFUNC_P (t))
7394 return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
7396 /* Else fall through. */
7397 case ENUMERAL_TYPE:
7398 case UNION_TYPE:
7399 if (TYPE_TEMPLATE_INFO (t))
7401 tree argvec;
7402 tree context;
7403 tree r;
7404 bool saved_skip_evaluation;
7406 /* In "sizeof(X<I>)" we need to evaluate "I". */
7407 saved_skip_evaluation = skip_evaluation;
7408 skip_evaluation = false;
7410 /* First, determine the context for the type we are looking
7411 up. */
7412 context = TYPE_CONTEXT (t);
7413 if (context)
7414 context = tsubst_aggr_type (context, args, complain,
7415 in_decl, /*entering_scope=*/1);
7417 /* Then, figure out what arguments are appropriate for the
7418 type we are trying to find. For example, given:
7420 template <class T> struct S;
7421 template <class T, class U> void f(T, U) { S<U> su; }
7423 and supposing that we are instantiating f<int, double>,
7424 then our ARGS will be {int, double}, but, when looking up
7425 S we only want {double}. */
7426 argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
7427 complain, in_decl);
7428 if (argvec == error_mark_node)
7429 r = error_mark_node;
7430 else
7432 r = lookup_template_class (t, argvec, in_decl, context,
7433 entering_scope, complain);
7434 r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7437 skip_evaluation = saved_skip_evaluation;
7439 return r;
7441 else
7442 /* This is not a template type, so there's nothing to do. */
7443 return t;
7445 default:
7446 return tsubst (t, args, complain, in_decl);
7450 /* Substitute into the default argument ARG (a default argument for
7451 FN), which has the indicated TYPE. */
7453 tree
7454 tsubst_default_argument (tree fn, tree type, tree arg)
7456 tree saved_class_ptr = NULL_TREE;
7457 tree saved_class_ref = NULL_TREE;
7459 /* This default argument came from a template. Instantiate the
7460 default argument here, not in tsubst. In the case of
7461 something like:
7463 template <class T>
7464 struct S {
7465 static T t();
7466 void f(T = t());
7469 we must be careful to do name lookup in the scope of S<T>,
7470 rather than in the current class. */
7471 push_access_scope (fn);
7472 /* The "this" pointer is not valid in a default argument. */
7473 if (cfun)
7475 saved_class_ptr = current_class_ptr;
7476 cp_function_chain->x_current_class_ptr = NULL_TREE;
7477 saved_class_ref = current_class_ref;
7478 cp_function_chain->x_current_class_ref = NULL_TREE;
7481 push_deferring_access_checks(dk_no_deferred);
7482 /* The default argument expression may cause implicitly defined
7483 member functions to be synthesized, which will result in garbage
7484 collection. We must treat this situation as if we were within
7485 the body of function so as to avoid collecting live data on the
7486 stack. */
7487 ++function_depth;
7488 arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
7489 tf_warning_or_error, NULL_TREE,
7490 /*integral_constant_expression_p=*/false);
7491 --function_depth;
7492 pop_deferring_access_checks();
7494 /* Restore the "this" pointer. */
7495 if (cfun)
7497 cp_function_chain->x_current_class_ptr = saved_class_ptr;
7498 cp_function_chain->x_current_class_ref = saved_class_ref;
7501 pop_access_scope (fn);
7503 /* Make sure the default argument is reasonable. */
7504 arg = check_default_argument (type, arg);
7506 return arg;
7509 /* Substitute into all the default arguments for FN. */
7511 static void
7512 tsubst_default_arguments (tree fn)
7514 tree arg;
7515 tree tmpl_args;
7517 tmpl_args = DECL_TI_ARGS (fn);
7519 /* If this function is not yet instantiated, we certainly don't need
7520 its default arguments. */
7521 if (uses_template_parms (tmpl_args))
7522 return;
7524 for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
7525 arg;
7526 arg = TREE_CHAIN (arg))
7527 if (TREE_PURPOSE (arg))
7528 TREE_PURPOSE (arg) = tsubst_default_argument (fn,
7529 TREE_VALUE (arg),
7530 TREE_PURPOSE (arg));
7533 /* Substitute the ARGS into the T, which is a _DECL. Return the
7534 result of the substitution. Issue error and warning messages under
7535 control of COMPLAIN. */
7537 static tree
7538 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
7540 location_t saved_loc;
7541 tree r = NULL_TREE;
7542 tree in_decl = t;
7544 /* Set the filename and linenumber to improve error-reporting. */
7545 saved_loc = input_location;
7546 input_location = DECL_SOURCE_LOCATION (t);
7548 switch (TREE_CODE (t))
7550 case TEMPLATE_DECL:
7552 /* We can get here when processing a member function template,
7553 member class template, and template template parameter of
7554 a template class. */
7555 tree decl = DECL_TEMPLATE_RESULT (t);
7556 tree spec;
7557 tree tmpl_args;
7558 tree full_args;
7560 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7562 /* Template template parameter is treated here. */
7563 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7564 if (new_type == error_mark_node)
7565 return error_mark_node;
7567 r = copy_decl (t);
7568 TREE_CHAIN (r) = NULL_TREE;
7569 TREE_TYPE (r) = new_type;
7570 DECL_TEMPLATE_RESULT (r)
7571 = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
7572 DECL_TEMPLATE_PARMS (r)
7573 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7574 complain);
7575 TYPE_NAME (new_type) = r;
7576 break;
7579 /* We might already have an instance of this template.
7580 The ARGS are for the surrounding class type, so the
7581 full args contain the tsubst'd args for the context,
7582 plus the innermost args from the template decl. */
7583 tmpl_args = DECL_CLASS_TEMPLATE_P (t)
7584 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
7585 : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
7586 /* Because this is a template, the arguments will still be
7587 dependent, even after substitution. If
7588 PROCESSING_TEMPLATE_DECL is not set, the dependency
7589 predicates will short-circuit. */
7590 ++processing_template_decl;
7591 full_args = tsubst_template_args (tmpl_args, args,
7592 complain, in_decl);
7593 --processing_template_decl;
7594 if (full_args == error_mark_node)
7595 return error_mark_node;
7597 /* tsubst_template_args doesn't copy the vector if
7598 nothing changed. But, *something* should have
7599 changed. */
7600 gcc_assert (full_args != tmpl_args);
7602 spec = retrieve_specialization (t, full_args,
7603 /*class_specializations_p=*/true);
7604 if (spec != NULL_TREE)
7606 r = spec;
7607 break;
7610 /* Make a new template decl. It will be similar to the
7611 original, but will record the current template arguments.
7612 We also create a new function declaration, which is just
7613 like the old one, but points to this new template, rather
7614 than the old one. */
7615 r = copy_decl (t);
7616 gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
7617 TREE_CHAIN (r) = NULL_TREE;
7619 DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
7621 if (TREE_CODE (decl) == TYPE_DECL)
7623 tree new_type;
7624 ++processing_template_decl;
7625 new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7626 --processing_template_decl;
7627 if (new_type == error_mark_node)
7628 return error_mark_node;
7630 TREE_TYPE (r) = new_type;
7631 CLASSTYPE_TI_TEMPLATE (new_type) = r;
7632 DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
7633 DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
7634 DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
7636 else
7638 tree new_decl;
7639 ++processing_template_decl;
7640 new_decl = tsubst (decl, args, complain, in_decl);
7641 --processing_template_decl;
7642 if (new_decl == error_mark_node)
7643 return error_mark_node;
7645 DECL_TEMPLATE_RESULT (r) = new_decl;
7646 DECL_TI_TEMPLATE (new_decl) = r;
7647 TREE_TYPE (r) = TREE_TYPE (new_decl);
7648 DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
7649 DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
7652 SET_DECL_IMPLICIT_INSTANTIATION (r);
7653 DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
7654 DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
7656 /* The template parameters for this new template are all the
7657 template parameters for the old template, except the
7658 outermost level of parameters. */
7659 DECL_TEMPLATE_PARMS (r)
7660 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7661 complain);
7663 if (PRIMARY_TEMPLATE_P (t))
7664 DECL_PRIMARY_TEMPLATE (r) = r;
7666 if (TREE_CODE (decl) != TYPE_DECL)
7667 /* Record this non-type partial instantiation. */
7668 register_specialization (r, t,
7669 DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
7670 false);
7672 break;
7674 case FUNCTION_DECL:
7676 tree ctx;
7677 tree argvec = NULL_TREE;
7678 tree *friends;
7679 tree gen_tmpl;
7680 tree type;
7681 int member;
7682 int args_depth;
7683 int parms_depth;
7685 /* Nobody should be tsubst'ing into non-template functions. */
7686 gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
7688 if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
7690 tree spec;
7691 bool dependent_p;
7693 /* If T is not dependent, just return it. We have to
7694 increment PROCESSING_TEMPLATE_DECL because
7695 value_dependent_expression_p assumes that nothing is
7696 dependent when PROCESSING_TEMPLATE_DECL is zero. */
7697 ++processing_template_decl;
7698 dependent_p = value_dependent_expression_p (t);
7699 --processing_template_decl;
7700 if (!dependent_p)
7701 return t;
7703 /* Calculate the most general template of which R is a
7704 specialization, and the complete set of arguments used to
7705 specialize R. */
7706 gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
7707 argvec = tsubst_template_args (DECL_TI_ARGS
7708 (DECL_TEMPLATE_RESULT (gen_tmpl)),
7709 args, complain, in_decl);
7711 /* Check to see if we already have this specialization. */
7712 spec = retrieve_specialization (gen_tmpl, argvec,
7713 /*class_specializations_p=*/false);
7715 if (spec)
7717 r = spec;
7718 break;
7721 /* We can see more levels of arguments than parameters if
7722 there was a specialization of a member template, like
7723 this:
7725 template <class T> struct S { template <class U> void f(); }
7726 template <> template <class U> void S<int>::f(U);
7728 Here, we'll be substituting into the specialization,
7729 because that's where we can find the code we actually
7730 want to generate, but we'll have enough arguments for
7731 the most general template.
7733 We also deal with the peculiar case:
7735 template <class T> struct S {
7736 template <class U> friend void f();
7738 template <class U> void f() {}
7739 template S<int>;
7740 template void f<double>();
7742 Here, the ARGS for the instantiation of will be {int,
7743 double}. But, we only need as many ARGS as there are
7744 levels of template parameters in CODE_PATTERN. We are
7745 careful not to get fooled into reducing the ARGS in
7746 situations like:
7748 template <class T> struct S { template <class U> void f(U); }
7749 template <class T> template <> void S<T>::f(int) {}
7751 which we can spot because the pattern will be a
7752 specialization in this case. */
7753 args_depth = TMPL_ARGS_DEPTH (args);
7754 parms_depth =
7755 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
7756 if (args_depth > parms_depth
7757 && !DECL_TEMPLATE_SPECIALIZATION (t))
7758 args = get_innermost_template_args (args, parms_depth);
7760 else
7762 /* This special case arises when we have something like this:
7764 template <class T> struct S {
7765 friend void f<int>(int, double);
7768 Here, the DECL_TI_TEMPLATE for the friend declaration
7769 will be an IDENTIFIER_NODE. We are being called from
7770 tsubst_friend_function, and we want only to create a
7771 new decl (R) with appropriate types so that we can call
7772 determine_specialization. */
7773 gen_tmpl = NULL_TREE;
7776 if (DECL_CLASS_SCOPE_P (t))
7778 if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
7779 member = 2;
7780 else
7781 member = 1;
7782 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
7783 complain, t, /*entering_scope=*/1);
7785 else
7787 member = 0;
7788 ctx = DECL_CONTEXT (t);
7790 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7791 if (type == error_mark_node)
7792 return error_mark_node;
7794 /* We do NOT check for matching decls pushed separately at this
7795 point, as they may not represent instantiations of this
7796 template, and in any case are considered separate under the
7797 discrete model. */
7798 r = copy_decl (t);
7799 DECL_USE_TEMPLATE (r) = 0;
7800 TREE_TYPE (r) = type;
7801 /* Clear out the mangled name and RTL for the instantiation. */
7802 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
7803 SET_DECL_RTL (r, NULL_RTX);
7804 DECL_INITIAL (r) = NULL_TREE;
7805 DECL_CONTEXT (r) = ctx;
7807 if (member && DECL_CONV_FN_P (r))
7808 /* Type-conversion operator. Reconstruct the name, in
7809 case it's the name of one of the template's parameters. */
7810 DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
7812 DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
7813 complain, t);
7814 DECL_RESULT (r) = NULL_TREE;
7816 TREE_STATIC (r) = 0;
7817 TREE_PUBLIC (r) = TREE_PUBLIC (t);
7818 DECL_EXTERNAL (r) = 1;
7819 /* If this is an instantiation of a function with internal
7820 linkage, we already know what object file linkage will be
7821 assigned to the instantiation. */
7822 DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
7823 DECL_DEFER_OUTPUT (r) = 0;
7824 TREE_CHAIN (r) = NULL_TREE;
7825 DECL_PENDING_INLINE_INFO (r) = 0;
7826 DECL_PENDING_INLINE_P (r) = 0;
7827 DECL_SAVED_TREE (r) = NULL_TREE;
7828 TREE_USED (r) = 0;
7829 if (DECL_CLONED_FUNCTION (r))
7831 DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
7832 args, complain, t);
7833 TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
7834 TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
7837 /* Set up the DECL_TEMPLATE_INFO for R. There's no need to do
7838 this in the special friend case mentioned above where
7839 GEN_TMPL is NULL. */
7840 if (gen_tmpl)
7842 DECL_TEMPLATE_INFO (r)
7843 = tree_cons (gen_tmpl, argvec, NULL_TREE);
7844 SET_DECL_IMPLICIT_INSTANTIATION (r);
7845 register_specialization (r, gen_tmpl, argvec, false);
7847 /* We're not supposed to instantiate default arguments
7848 until they are called, for a template. But, for a
7849 declaration like:
7851 template <class T> void f ()
7852 { extern void g(int i = T()); }
7854 we should do the substitution when the template is
7855 instantiated. We handle the member function case in
7856 instantiate_class_template since the default arguments
7857 might refer to other members of the class. */
7858 if (!member
7859 && !PRIMARY_TEMPLATE_P (gen_tmpl)
7860 && !uses_template_parms (argvec))
7861 tsubst_default_arguments (r);
7863 else
7864 DECL_TEMPLATE_INFO (r) = NULL_TREE;
7866 /* Copy the list of befriending classes. */
7867 for (friends = &DECL_BEFRIENDING_CLASSES (r);
7868 *friends;
7869 friends = &TREE_CHAIN (*friends))
7871 *friends = copy_node (*friends);
7872 TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
7873 args, complain,
7874 in_decl);
7877 if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
7879 maybe_retrofit_in_chrg (r);
7880 if (DECL_CONSTRUCTOR_P (r))
7881 grok_ctor_properties (ctx, r);
7882 /* If this is an instantiation of a member template, clone it.
7883 If it isn't, that'll be handled by
7884 clone_constructors_and_destructors. */
7885 if (PRIMARY_TEMPLATE_P (gen_tmpl))
7886 clone_function_decl (r, /*update_method_vec_p=*/0);
7888 else if (IDENTIFIER_OPNAME_P (DECL_NAME (r))
7889 && !grok_op_properties (r, (complain & tf_error) != 0))
7890 return error_mark_node;
7892 if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
7893 SET_DECL_FRIEND_CONTEXT (r,
7894 tsubst (DECL_FRIEND_CONTEXT (t),
7895 args, complain, in_decl));
7897 /* Possibly limit visibility based on template args. */
7898 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
7899 if (DECL_VISIBILITY_SPECIFIED (t))
7901 DECL_VISIBILITY_SPECIFIED (r) = 0;
7902 DECL_ATTRIBUTES (r)
7903 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
7905 determine_visibility (r);
7907 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
7908 args, complain, in_decl);
7910 break;
7912 case PARM_DECL:
7914 tree type = NULL_TREE;
7915 int i, len = 1;
7916 tree expanded_types = NULL_TREE;
7917 tree prev_r = NULL_TREE;
7918 tree first_r = NULL_TREE;
7920 if (FUNCTION_PARAMETER_PACK_P (t))
7922 /* If there is a local specialization that isn't a
7923 parameter pack, it means that we're doing a "simple"
7924 substitution from inside tsubst_pack_expansion. Just
7925 return the local specialization (which will be a single
7926 parm). */
7927 tree spec = NULL_TREE;
7928 if (local_specializations)
7929 spec = retrieve_local_specialization (t);
7930 if (spec
7931 && TREE_CODE (spec) == PARM_DECL
7932 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
7933 return spec;
7935 /* Expand the TYPE_PACK_EXPANSION that provides the types for
7936 the parameters in this function parameter pack. */
7937 expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
7938 complain, in_decl);
7939 if (TREE_CODE (expanded_types) == TREE_VEC)
7941 len = TREE_VEC_LENGTH (expanded_types);
7943 /* Zero-length parameter packs are boring. Just substitute
7944 into the chain. */
7945 if (len == 0)
7946 return tsubst (TREE_CHAIN (t), args, complain,
7947 TREE_CHAIN (t));
7949 else
7951 /* All we did was update the type. Make a note of that. */
7952 type = expanded_types;
7953 expanded_types = NULL_TREE;
7957 /* Loop through all of the parameter's we'll build. When T is
7958 a function parameter pack, LEN is the number of expanded
7959 types in EXPANDED_TYPES; otherwise, LEN is 1. */
7960 r = NULL_TREE;
7961 for (i = 0; i < len; ++i)
7963 prev_r = r;
7964 r = copy_node (t);
7965 if (DECL_TEMPLATE_PARM_P (t))
7966 SET_DECL_TEMPLATE_PARM_P (r);
7968 if (expanded_types)
7969 /* We're on the Ith parameter of the function parameter
7970 pack. */
7972 /* Get the Ith type. */
7973 type = TREE_VEC_ELT (expanded_types, i);
7975 if (DECL_NAME (r))
7976 /* Rename the parameter to include the index. */
7977 DECL_NAME (r) =
7978 make_ith_pack_parameter_name (DECL_NAME (r), i);
7980 else if (!type)
7981 /* We're dealing with a normal parameter. */
7982 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7984 type = type_decays_to (type);
7985 TREE_TYPE (r) = type;
7986 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
7988 if (DECL_INITIAL (r))
7990 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
7991 DECL_INITIAL (r) = TREE_TYPE (r);
7992 else
7993 DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
7994 complain, in_decl);
7997 DECL_CONTEXT (r) = NULL_TREE;
7999 if (!DECL_TEMPLATE_PARM_P (r))
8000 DECL_ARG_TYPE (r) = type_passed_as (type);
8002 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8003 args, complain, in_decl);
8005 /* Keep track of the first new parameter we
8006 generate. That's what will be returned to the
8007 caller. */
8008 if (!first_r)
8009 first_r = r;
8011 /* Build a proper chain of parameters when substituting
8012 into a function parameter pack. */
8013 if (prev_r)
8014 TREE_CHAIN (prev_r) = r;
8017 if (TREE_CHAIN (t))
8018 TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
8019 complain, TREE_CHAIN (t));
8021 /* FIRST_R contains the start of the chain we've built. */
8022 r = first_r;
8024 break;
8026 case FIELD_DECL:
8028 tree type;
8030 r = copy_decl (t);
8031 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8032 if (type == error_mark_node)
8033 return error_mark_node;
8034 TREE_TYPE (r) = type;
8035 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8037 /* DECL_INITIAL gives the number of bits in a bit-field. */
8038 DECL_INITIAL (r)
8039 = tsubst_expr (DECL_INITIAL (t), args,
8040 complain, in_decl,
8041 /*integral_constant_expression_p=*/true);
8042 /* We don't have to set DECL_CONTEXT here; it is set by
8043 finish_member_declaration. */
8044 TREE_CHAIN (r) = NULL_TREE;
8045 if (VOID_TYPE_P (type))
8046 error ("instantiation of %q+D as type %qT", r, type);
8048 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8049 args, complain, in_decl);
8051 break;
8053 case USING_DECL:
8054 /* We reach here only for member using decls. */
8055 if (DECL_DEPENDENT_P (t))
8057 r = do_class_using_decl
8058 (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
8059 tsubst_copy (DECL_NAME (t), args, complain, in_decl));
8060 if (!r)
8061 r = error_mark_node;
8063 else
8065 r = copy_node (t);
8066 TREE_CHAIN (r) = NULL_TREE;
8068 break;
8070 case TYPE_DECL:
8071 case VAR_DECL:
8073 tree argvec = NULL_TREE;
8074 tree gen_tmpl = NULL_TREE;
8075 tree spec;
8076 tree tmpl = NULL_TREE;
8077 tree ctx;
8078 tree type = NULL_TREE;
8079 bool local_p;
8081 if (TREE_CODE (t) == TYPE_DECL
8082 && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
8084 /* If this is the canonical decl, we don't have to
8085 mess with instantiations, and often we can't (for
8086 typename, template type parms and such). Note that
8087 TYPE_NAME is not correct for the above test if
8088 we've copied the type for a typedef. */
8089 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8090 r = TYPE_NAME (type);
8091 break;
8094 /* Check to see if we already have the specialization we
8095 need. */
8096 spec = NULL_TREE;
8097 if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
8099 /* T is a static data member or namespace-scope entity.
8100 We have to substitute into namespace-scope variables
8101 (even though such entities are never templates) because
8102 of cases like:
8104 template <class T> void f() { extern T t; }
8106 where the entity referenced is not known until
8107 instantiation time. */
8108 local_p = false;
8109 ctx = DECL_CONTEXT (t);
8110 if (DECL_CLASS_SCOPE_P (t))
8112 ctx = tsubst_aggr_type (ctx, args,
8113 complain,
8114 in_decl, /*entering_scope=*/1);
8115 /* If CTX is unchanged, then T is in fact the
8116 specialization we want. That situation occurs when
8117 referencing a static data member within in its own
8118 class. We can use pointer equality, rather than
8119 same_type_p, because DECL_CONTEXT is always
8120 canonical. */
8121 if (ctx == DECL_CONTEXT (t))
8122 spec = t;
8125 if (!spec)
8127 tmpl = DECL_TI_TEMPLATE (t);
8128 gen_tmpl = most_general_template (tmpl);
8129 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
8130 spec = (retrieve_specialization
8131 (gen_tmpl, argvec,
8132 /*class_specializations_p=*/false));
8135 else
8137 /* A local variable. */
8138 local_p = true;
8139 /* Subsequent calls to pushdecl will fill this in. */
8140 ctx = NULL_TREE;
8141 spec = retrieve_local_specialization (t);
8143 /* If we already have the specialization we need, there is
8144 nothing more to do. */
8145 if (spec)
8147 r = spec;
8148 break;
8151 /* Create a new node for the specialization we need. */
8152 r = copy_decl (t);
8153 if (type == NULL_TREE)
8154 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8155 if (TREE_CODE (r) == VAR_DECL)
8157 /* Even if the original location is out of scope, the
8158 newly substituted one is not. */
8159 DECL_DEAD_FOR_LOCAL (r) = 0;
8160 DECL_INITIALIZED_P (r) = 0;
8161 DECL_TEMPLATE_INSTANTIATED (r) = 0;
8162 if (type == error_mark_node)
8163 return error_mark_node;
8164 if (TREE_CODE (type) == FUNCTION_TYPE)
8166 /* It may seem that this case cannot occur, since:
8168 typedef void f();
8169 void g() { f x; }
8171 declares a function, not a variable. However:
8173 typedef void f();
8174 template <typename T> void g() { T t; }
8175 template void g<f>();
8177 is an attempt to declare a variable with function
8178 type. */
8179 error ("variable %qD has function type",
8180 /* R is not yet sufficiently initialized, so we
8181 just use its name. */
8182 DECL_NAME (r));
8183 return error_mark_node;
8185 type = complete_type (type);
8186 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
8187 = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
8188 type = check_var_type (DECL_NAME (r), type);
8190 if (DECL_HAS_VALUE_EXPR_P (t))
8192 tree ve = DECL_VALUE_EXPR (t);
8193 ve = tsubst_expr (ve, args, complain, in_decl,
8194 /*constant_expression_p=*/false);
8195 SET_DECL_VALUE_EXPR (r, ve);
8198 else if (DECL_SELF_REFERENCE_P (t))
8199 SET_DECL_SELF_REFERENCE_P (r);
8200 TREE_TYPE (r) = type;
8201 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8202 DECL_CONTEXT (r) = ctx;
8203 /* Clear out the mangled name and RTL for the instantiation. */
8204 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8205 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8206 SET_DECL_RTL (r, NULL_RTX);
8207 /* The initializer must not be expanded until it is required;
8208 see [temp.inst]. */
8209 DECL_INITIAL (r) = NULL_TREE;
8210 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8211 SET_DECL_RTL (r, NULL_RTX);
8212 DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
8213 if (TREE_CODE (r) == VAR_DECL)
8215 /* Possibly limit visibility based on template args. */
8216 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8217 if (DECL_VISIBILITY_SPECIFIED (t))
8219 DECL_VISIBILITY_SPECIFIED (r) = 0;
8220 DECL_ATTRIBUTES (r)
8221 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8223 determine_visibility (r);
8225 /* Preserve a typedef that names a type. */
8226 else if (TREE_CODE (r) == TYPE_DECL
8227 && DECL_ORIGINAL_TYPE (t)
8228 && type != error_mark_node)
8230 DECL_ORIGINAL_TYPE (r) = tsubst (DECL_ORIGINAL_TYPE (t),
8231 args, complain, in_decl);
8232 TREE_TYPE (r) = type = build_variant_type_copy (type);
8233 TYPE_NAME (type) = r;
8236 if (!local_p)
8238 /* A static data member declaration is always marked
8239 external when it is declared in-class, even if an
8240 initializer is present. We mimic the non-template
8241 processing here. */
8242 DECL_EXTERNAL (r) = 1;
8244 register_specialization (r, gen_tmpl, argvec, false);
8245 DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
8246 SET_DECL_IMPLICIT_INSTANTIATION (r);
8248 else
8249 register_local_specialization (r, t);
8251 TREE_CHAIN (r) = NULL_TREE;
8253 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
8254 (int) ATTR_FLAG_TYPE_IN_PLACE,
8255 args, complain, in_decl);
8256 layout_decl (r, 0);
8258 break;
8260 default:
8261 gcc_unreachable ();
8264 /* Restore the file and line information. */
8265 input_location = saved_loc;
8267 return r;
8270 /* Substitute into the ARG_TYPES of a function type. */
8272 static tree
8273 tsubst_arg_types (tree arg_types,
8274 tree args,
8275 tsubst_flags_t complain,
8276 tree in_decl)
8278 tree remaining_arg_types;
8279 tree type = NULL_TREE;
8280 int i = 1;
8281 tree expanded_args = NULL_TREE;
8282 tree default_arg;
8284 if (!arg_types || arg_types == void_list_node)
8285 return arg_types;
8287 remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
8288 args, complain, in_decl);
8289 if (remaining_arg_types == error_mark_node)
8290 return error_mark_node;
8292 if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
8294 /* For a pack expansion, perform substitution on the
8295 entire expression. Later on, we'll handle the arguments
8296 one-by-one. */
8297 expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
8298 args, complain, in_decl);
8300 if (TREE_CODE (expanded_args) == TREE_VEC)
8301 /* So that we'll spin through the parameters, one by one. */
8302 i = TREE_VEC_LENGTH (expanded_args);
8303 else
8305 /* We only partially substituted into the parameter
8306 pack. Our type is TYPE_PACK_EXPANSION. */
8307 type = expanded_args;
8308 expanded_args = NULL_TREE;
8312 while (i > 0) {
8313 --i;
8315 if (expanded_args)
8316 type = TREE_VEC_ELT (expanded_args, i);
8317 else if (!type)
8318 type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
8320 if (type == error_mark_node)
8321 return error_mark_node;
8322 if (VOID_TYPE_P (type))
8324 if (complain & tf_error)
8326 error ("invalid parameter type %qT", type);
8327 if (in_decl)
8328 error ("in declaration %q+D", in_decl);
8330 return error_mark_node;
8333 /* Do array-to-pointer, function-to-pointer conversion, and ignore
8334 top-level qualifiers as required. */
8335 type = TYPE_MAIN_VARIANT (type_decays_to (type));
8337 /* We do not substitute into default arguments here. The standard
8338 mandates that they be instantiated only when needed, which is
8339 done in build_over_call. */
8340 default_arg = TREE_PURPOSE (arg_types);
8342 if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
8344 /* We've instantiated a template before its default arguments
8345 have been parsed. This can happen for a nested template
8346 class, and is not an error unless we require the default
8347 argument in a call of this function. */
8348 remaining_arg_types =
8349 tree_cons (default_arg, type, remaining_arg_types);
8350 VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg),
8351 remaining_arg_types);
8353 else
8354 remaining_arg_types =
8355 hash_tree_cons (default_arg, type, remaining_arg_types);
8358 return remaining_arg_types;
8361 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
8362 *not* handle the exception-specification for FNTYPE, because the
8363 initial substitution of explicitly provided template parameters
8364 during argument deduction forbids substitution into the
8365 exception-specification:
8367 [temp.deduct]
8369 All references in the function type of the function template to the
8370 corresponding template parameters are replaced by the specified tem-
8371 plate argument values. If a substitution in a template parameter or
8372 in the function type of the function template results in an invalid
8373 type, type deduction fails. [Note: The equivalent substitution in
8374 exception specifications is done only when the function is instanti-
8375 ated, at which point a program is ill-formed if the substitution
8376 results in an invalid type.] */
8378 static tree
8379 tsubst_function_type (tree t,
8380 tree args,
8381 tsubst_flags_t complain,
8382 tree in_decl)
8384 tree return_type;
8385 tree arg_types;
8386 tree fntype;
8388 /* The TYPE_CONTEXT is not used for function/method types. */
8389 gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
8391 /* Substitute the return type. */
8392 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8393 if (return_type == error_mark_node)
8394 return error_mark_node;
8395 /* The standard does not presently indicate that creation of a
8396 function type with an invalid return type is a deduction failure.
8397 However, that is clearly analogous to creating an array of "void"
8398 or a reference to a reference. This is core issue #486. */
8399 if (TREE_CODE (return_type) == ARRAY_TYPE
8400 || TREE_CODE (return_type) == FUNCTION_TYPE)
8402 if (complain & tf_error)
8404 if (TREE_CODE (return_type) == ARRAY_TYPE)
8405 error ("function returning an array");
8406 else
8407 error ("function returning a function");
8409 return error_mark_node;
8412 /* Substitute the argument types. */
8413 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
8414 complain, in_decl);
8415 if (arg_types == error_mark_node)
8416 return error_mark_node;
8418 if (TYPE_QUALS (return_type) != TYPE_UNQUALIFIED
8419 && in_decl != NULL_TREE
8420 && !TREE_NO_WARNING (in_decl)
8421 && (SCALAR_TYPE_P (return_type) || VOID_TYPE_P (return_type)))
8422 warning (OPT_Wreturn_type,
8423 "type qualifiers ignored on function return type");
8425 /* Construct a new type node and return it. */
8426 if (TREE_CODE (t) == FUNCTION_TYPE)
8427 fntype = build_function_type (return_type, arg_types);
8428 else
8430 tree r = TREE_TYPE (TREE_VALUE (arg_types));
8431 if (! IS_AGGR_TYPE (r))
8433 /* [temp.deduct]
8435 Type deduction may fail for any of the following
8436 reasons:
8438 -- Attempting to create "pointer to member of T" when T
8439 is not a class type. */
8440 if (complain & tf_error)
8441 error ("creating pointer to member function of non-class type %qT",
8443 return error_mark_node;
8446 fntype = build_method_type_directly (r, return_type,
8447 TREE_CHAIN (arg_types));
8449 fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
8450 fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
8452 return fntype;
8455 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE. Substitute the template
8456 ARGS into that specification, and return the substituted
8457 specification. If there is no specification, return NULL_TREE. */
8459 static tree
8460 tsubst_exception_specification (tree fntype,
8461 tree args,
8462 tsubst_flags_t complain,
8463 tree in_decl)
8465 tree specs;
8466 tree new_specs;
8468 specs = TYPE_RAISES_EXCEPTIONS (fntype);
8469 new_specs = NULL_TREE;
8470 if (specs)
8472 if (! TREE_VALUE (specs))
8473 new_specs = specs;
8474 else
8475 while (specs)
8477 tree spec;
8478 int i, len = 1;
8479 tree expanded_specs = NULL_TREE;
8481 if (PACK_EXPANSION_P (TREE_VALUE (specs)))
8483 /* Expand the pack expansion type. */
8484 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
8485 args, complain,
8486 in_decl);
8487 len = TREE_VEC_LENGTH (expanded_specs);
8490 for (i = 0; i < len; ++i)
8492 if (expanded_specs)
8493 spec = TREE_VEC_ELT (expanded_specs, i);
8494 else
8495 spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
8496 if (spec == error_mark_node)
8497 return spec;
8498 new_specs = add_exception_specifier (new_specs, spec,
8499 complain);
8502 specs = TREE_CHAIN (specs);
8505 return new_specs;
8508 /* Take the tree structure T and replace template parameters used
8509 therein with the argument vector ARGS. IN_DECL is an associated
8510 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
8511 Issue error and warning messages under control of COMPLAIN. Note
8512 that we must be relatively non-tolerant of extensions here, in
8513 order to preserve conformance; if we allow substitutions that
8514 should not be allowed, we may allow argument deductions that should
8515 not succeed, and therefore report ambiguous overload situations
8516 where there are none. In theory, we could allow the substitution,
8517 but indicate that it should have failed, and allow our caller to
8518 make sure that the right thing happens, but we don't try to do this
8519 yet.
8521 This function is used for dealing with types, decls and the like;
8522 for expressions, use tsubst_expr or tsubst_copy. */
8524 static tree
8525 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8527 tree type, r;
8529 if (t == NULL_TREE || t == error_mark_node
8530 || t == integer_type_node
8531 || t == void_type_node
8532 || t == char_type_node
8533 || t == unknown_type_node
8534 || TREE_CODE (t) == NAMESPACE_DECL)
8535 return t;
8537 if (DECL_P (t))
8538 return tsubst_decl (t, args, complain);
8540 if (TREE_CODE (t) == IDENTIFIER_NODE)
8541 type = IDENTIFIER_TYPE_VALUE (t);
8542 else
8543 type = TREE_TYPE (t);
8545 gcc_assert (type != unknown_type_node);
8547 /* Reuse typedefs. We need to do this to handle dependent attributes,
8548 such as attribute aligned. */
8549 if (TYPE_P (t)
8550 && TYPE_NAME (t)
8551 && TYPE_NAME (t) != TYPE_MAIN_DECL (t))
8553 tree decl = TYPE_NAME (t);
8555 if (DECL_CLASS_SCOPE_P (decl)
8556 && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl)))
8558 tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
8559 tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
8560 r = retrieve_specialization (tmpl, gen_args, false);
8562 else if (DECL_FUNCTION_SCOPE_P (decl))
8563 r = retrieve_local_specialization (decl);
8564 else
8565 r = NULL_TREE;
8567 if (r)
8569 r = TREE_TYPE (r);
8570 r = cp_build_qualified_type_real
8571 (r, cp_type_quals (t) | cp_type_quals (r),
8572 complain | tf_ignore_bad_quals);
8573 return r;
8575 /* Else we must be instantiating the typedef, so fall through. */
8578 if (type
8579 && TREE_CODE (t) != TYPENAME_TYPE
8580 && TREE_CODE (t) != IDENTIFIER_NODE
8581 && TREE_CODE (t) != FUNCTION_TYPE
8582 && TREE_CODE (t) != METHOD_TYPE)
8583 type = tsubst (type, args, complain, in_decl);
8584 if (type == error_mark_node)
8585 return error_mark_node;
8587 switch (TREE_CODE (t))
8589 case RECORD_TYPE:
8590 case UNION_TYPE:
8591 case ENUMERAL_TYPE:
8592 return tsubst_aggr_type (t, args, complain, in_decl,
8593 /*entering_scope=*/0);
8595 case ERROR_MARK:
8596 case IDENTIFIER_NODE:
8597 case VOID_TYPE:
8598 case REAL_TYPE:
8599 case COMPLEX_TYPE:
8600 case VECTOR_TYPE:
8601 case BOOLEAN_TYPE:
8602 case INTEGER_CST:
8603 case REAL_CST:
8604 case STRING_CST:
8605 return t;
8607 case INTEGER_TYPE:
8608 if (t == integer_type_node)
8609 return t;
8611 if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
8612 && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
8613 return t;
8616 tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
8618 max = tsubst_expr (omax, args, complain, in_decl,
8619 /*integral_constant_expression_p=*/false);
8620 max = fold_decl_constant_value (max);
8622 if (TREE_CODE (max) != INTEGER_CST
8623 && TREE_CODE (max) != TEMPLATE_PARM_INDEX
8624 && !at_function_scope_p ())
8626 if (complain & tf_error)
8627 error ("array bound is not an integer constant");
8628 return error_mark_node;
8631 /* [temp.deduct]
8633 Type deduction may fail for any of the following
8634 reasons:
8636 Attempting to create an array with a size that is
8637 zero or negative. */
8638 if (integer_zerop (max) && !(complain & tf_error))
8639 /* We must fail if performing argument deduction (as
8640 indicated by the state of complain), so that
8641 another substitution can be found. */
8642 return error_mark_node;
8643 else if (TREE_CODE (max) == INTEGER_CST
8644 && INT_CST_LT (max, integer_zero_node))
8646 if (complain & tf_error)
8647 error ("creating array with negative size (%qE)", max);
8649 return error_mark_node;
8652 return compute_array_index_type (NULL_TREE, max);
8655 case TEMPLATE_TYPE_PARM:
8656 case TEMPLATE_TEMPLATE_PARM:
8657 case BOUND_TEMPLATE_TEMPLATE_PARM:
8658 case TEMPLATE_PARM_INDEX:
8660 int idx;
8661 int level;
8662 int levels;
8663 tree arg = NULL_TREE;
8665 r = NULL_TREE;
8667 gcc_assert (TREE_VEC_LENGTH (args) > 0);
8668 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
8669 || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
8670 || TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8672 idx = TEMPLATE_TYPE_IDX (t);
8673 level = TEMPLATE_TYPE_LEVEL (t);
8675 else
8677 idx = TEMPLATE_PARM_IDX (t);
8678 level = TEMPLATE_PARM_LEVEL (t);
8681 levels = TMPL_ARGS_DEPTH (args);
8682 if (level <= levels)
8684 arg = TMPL_ARG (args, level, idx);
8686 if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
8687 /* See through ARGUMENT_PACK_SELECT arguments. */
8688 arg = ARGUMENT_PACK_SELECT_ARG (arg);
8691 if (arg == error_mark_node)
8692 return error_mark_node;
8693 else if (arg != NULL_TREE)
8695 if (ARGUMENT_PACK_P (arg))
8696 /* If ARG is an argument pack, we don't actually want to
8697 perform a substitution here, because substitutions
8698 for argument packs are only done
8699 element-by-element. We can get to this point when
8700 substituting the type of a non-type template
8701 parameter pack, when that type actually contains
8702 template parameter packs from an outer template, e.g.,
8704 template<typename... Types> struct A {
8705 template<Types... Values> struct B { };
8706 }; */
8707 return t;
8709 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
8711 int quals;
8712 gcc_assert (TYPE_P (arg));
8714 /* cv-quals from the template are discarded when
8715 substituting in a function or reference type. */
8716 if (TREE_CODE (arg) == FUNCTION_TYPE
8717 || TREE_CODE (arg) == METHOD_TYPE
8718 || TREE_CODE (arg) == REFERENCE_TYPE)
8719 quals = cp_type_quals (arg);
8720 else
8721 quals = cp_type_quals (arg) | cp_type_quals (t);
8723 return cp_build_qualified_type_real
8724 (arg, quals, complain | tf_ignore_bad_quals);
8726 else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8728 /* We are processing a type constructed from a
8729 template template parameter. */
8730 tree argvec = tsubst (TYPE_TI_ARGS (t),
8731 args, complain, in_decl);
8732 if (argvec == error_mark_node)
8733 return error_mark_node;
8735 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
8736 are resolving nested-types in the signature of a
8737 member function templates. Otherwise ARG is a
8738 TEMPLATE_DECL and is the real template to be
8739 instantiated. */
8740 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
8741 arg = TYPE_NAME (arg);
8743 r = lookup_template_class (arg,
8744 argvec, in_decl,
8745 DECL_CONTEXT (arg),
8746 /*entering_scope=*/0,
8747 complain);
8748 return cp_build_qualified_type_real
8749 (r, TYPE_QUALS (t), complain);
8751 else
8752 /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX. */
8753 return arg;
8756 if (level == 1)
8757 /* This can happen during the attempted tsubst'ing in
8758 unify. This means that we don't yet have any information
8759 about the template parameter in question. */
8760 return t;
8762 /* If we get here, we must have been looking at a parm for a
8763 more deeply nested template. Make a new version of this
8764 template parameter, but with a lower level. */
8765 switch (TREE_CODE (t))
8767 case TEMPLATE_TYPE_PARM:
8768 case TEMPLATE_TEMPLATE_PARM:
8769 case BOUND_TEMPLATE_TEMPLATE_PARM:
8770 if (cp_type_quals (t))
8772 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
8773 r = cp_build_qualified_type_real
8774 (r, cp_type_quals (t),
8775 complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
8776 ? tf_ignore_bad_quals : 0));
8778 else
8780 r = copy_type (t);
8781 TEMPLATE_TYPE_PARM_INDEX (r)
8782 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
8783 r, levels);
8784 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
8785 TYPE_MAIN_VARIANT (r) = r;
8786 TYPE_POINTER_TO (r) = NULL_TREE;
8787 TYPE_REFERENCE_TO (r) = NULL_TREE;
8789 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
8790 /* We have reduced the level of the template
8791 template parameter, but not the levels of its
8792 template parameters, so canonical_type_parameter
8793 will not be able to find the canonical template
8794 template parameter for this level. Thus, we
8795 require structural equality checking to compare
8796 TEMPLATE_TEMPLATE_PARMs. */
8797 SET_TYPE_STRUCTURAL_EQUALITY (r);
8798 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
8799 SET_TYPE_STRUCTURAL_EQUALITY (r);
8800 else
8801 TYPE_CANONICAL (r) = canonical_type_parameter (r);
8803 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8805 tree argvec = tsubst (TYPE_TI_ARGS (t), args,
8806 complain, in_decl);
8807 if (argvec == error_mark_node)
8808 return error_mark_node;
8810 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
8811 = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
8814 break;
8816 case TEMPLATE_PARM_INDEX:
8817 r = reduce_template_parm_level (t, type, levels);
8818 break;
8820 default:
8821 gcc_unreachable ();
8824 return r;
8827 case TREE_LIST:
8829 tree purpose, value, chain;
8831 if (t == void_list_node)
8832 return t;
8834 purpose = TREE_PURPOSE (t);
8835 if (purpose)
8837 purpose = tsubst (purpose, args, complain, in_decl);
8838 if (purpose == error_mark_node)
8839 return error_mark_node;
8841 value = TREE_VALUE (t);
8842 if (value)
8844 value = tsubst (value, args, complain, in_decl);
8845 if (value == error_mark_node)
8846 return error_mark_node;
8848 chain = TREE_CHAIN (t);
8849 if (chain && chain != void_type_node)
8851 chain = tsubst (chain, args, complain, in_decl);
8852 if (chain == error_mark_node)
8853 return error_mark_node;
8855 if (purpose == TREE_PURPOSE (t)
8856 && value == TREE_VALUE (t)
8857 && chain == TREE_CHAIN (t))
8858 return t;
8859 return hash_tree_cons (purpose, value, chain);
8862 case TREE_BINFO:
8863 /* We should never be tsubsting a binfo. */
8864 gcc_unreachable ();
8866 case TREE_VEC:
8867 /* A vector of template arguments. */
8868 gcc_assert (!type);
8869 return tsubst_template_args (t, args, complain, in_decl);
8871 case POINTER_TYPE:
8872 case REFERENCE_TYPE:
8874 enum tree_code code;
8876 if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
8877 return t;
8879 code = TREE_CODE (t);
8882 /* [temp.deduct]
8884 Type deduction may fail for any of the following
8885 reasons:
8887 -- Attempting to create a pointer to reference type.
8888 -- Attempting to create a reference to a reference type or
8889 a reference to void.
8891 Core issue 106 says that creating a reference to a reference
8892 during instantiation is no longer a cause for failure. We
8893 only enforce this check in strict C++98 mode. */
8894 if ((TREE_CODE (type) == REFERENCE_TYPE
8895 && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
8896 || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
8898 static location_t last_loc;
8900 /* We keep track of the last time we issued this error
8901 message to avoid spewing a ton of messages during a
8902 single bad template instantiation. */
8903 if (complain & tf_error
8904 #ifdef USE_MAPPED_LOCATION
8905 && last_loc != input_location
8906 #else
8907 && (last_loc.line != input_line
8908 || last_loc.file != input_filename)
8909 #endif
8912 if (TREE_CODE (type) == VOID_TYPE)
8913 error ("forming reference to void");
8914 else
8915 error ("forming %s to reference type %qT",
8916 (code == POINTER_TYPE) ? "pointer" : "reference",
8917 type);
8918 last_loc = input_location;
8921 return error_mark_node;
8923 else if (code == POINTER_TYPE)
8925 r = build_pointer_type (type);
8926 if (TREE_CODE (type) == METHOD_TYPE)
8927 r = build_ptrmemfunc_type (r);
8929 else if (TREE_CODE (type) == REFERENCE_TYPE)
8930 /* In C++0x, during template argument substitution, when there is an
8931 attempt to create a reference to a reference type, reference
8932 collapsing is applied as described in [14.3.1/4 temp.arg.type]:
8934 "If a template-argument for a template-parameter T names a type
8935 that is a reference to a type A, an attempt to create the type
8936 'lvalue reference to cv T' creates the type 'lvalue reference to
8937 A,' while an attempt to create the type type rvalue reference to
8938 cv T' creates the type T"
8940 r = cp_build_reference_type
8941 (TREE_TYPE (type),
8942 TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
8943 else
8944 r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
8945 r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
8947 if (r != error_mark_node)
8948 /* Will this ever be needed for TYPE_..._TO values? */
8949 layout_type (r);
8951 return r;
8953 case OFFSET_TYPE:
8955 r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
8956 if (r == error_mark_node || !IS_AGGR_TYPE (r))
8958 /* [temp.deduct]
8960 Type deduction may fail for any of the following
8961 reasons:
8963 -- Attempting to create "pointer to member of T" when T
8964 is not a class type. */
8965 if (complain & tf_error)
8966 error ("creating pointer to member of non-class type %qT", r);
8967 return error_mark_node;
8969 if (TREE_CODE (type) == REFERENCE_TYPE)
8971 if (complain & tf_error)
8972 error ("creating pointer to member reference type %qT", type);
8973 return error_mark_node;
8975 if (TREE_CODE (type) == VOID_TYPE)
8977 if (complain & tf_error)
8978 error ("creating pointer to member of type void");
8979 return error_mark_node;
8981 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
8982 if (TREE_CODE (type) == FUNCTION_TYPE)
8984 /* The type of the implicit object parameter gets its
8985 cv-qualifiers from the FUNCTION_TYPE. */
8986 tree method_type;
8987 tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
8988 cp_type_quals (type));
8989 tree memptr;
8990 method_type = build_method_type_directly (this_type,
8991 TREE_TYPE (type),
8992 TYPE_ARG_TYPES (type));
8993 memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
8994 return cp_build_qualified_type_real (memptr, cp_type_quals (t),
8995 complain);
8997 else
8998 return cp_build_qualified_type_real (build_ptrmem_type (r, type),
8999 TYPE_QUALS (t),
9000 complain);
9002 case FUNCTION_TYPE:
9003 case METHOD_TYPE:
9005 tree fntype;
9006 tree specs;
9007 fntype = tsubst_function_type (t, args, complain, in_decl);
9008 if (fntype == error_mark_node)
9009 return error_mark_node;
9011 /* Substitute the exception specification. */
9012 specs = tsubst_exception_specification (t, args, complain,
9013 in_decl);
9014 if (specs == error_mark_node)
9015 return error_mark_node;
9016 if (specs)
9017 fntype = build_exception_variant (fntype, specs);
9018 return fntype;
9020 case ARRAY_TYPE:
9022 tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
9023 if (domain == error_mark_node)
9024 return error_mark_node;
9026 /* As an optimization, we avoid regenerating the array type if
9027 it will obviously be the same as T. */
9028 if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
9029 return t;
9031 /* These checks should match the ones in grokdeclarator.
9033 [temp.deduct]
9035 The deduction may fail for any of the following reasons:
9037 -- Attempting to create an array with an element type that
9038 is void, a function type, or a reference type, or [DR337]
9039 an abstract class type. */
9040 if (TREE_CODE (type) == VOID_TYPE
9041 || TREE_CODE (type) == FUNCTION_TYPE
9042 || TREE_CODE (type) == REFERENCE_TYPE)
9044 if (complain & tf_error)
9045 error ("creating array of %qT", type);
9046 return error_mark_node;
9048 if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
9050 if (complain & tf_error)
9051 error ("creating array of %qT, which is an abstract class type",
9052 type);
9053 return error_mark_node;
9056 r = build_cplus_array_type (type, domain);
9058 if (TYPE_USER_ALIGN (t))
9060 TYPE_ALIGN (r) = TYPE_ALIGN (t);
9061 TYPE_USER_ALIGN (r) = 1;
9064 return r;
9067 case PLUS_EXPR:
9068 case MINUS_EXPR:
9070 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9071 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9073 if (e1 == error_mark_node || e2 == error_mark_node)
9074 return error_mark_node;
9076 return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
9079 case NEGATE_EXPR:
9080 case NOP_EXPR:
9082 tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9083 if (e == error_mark_node)
9084 return error_mark_node;
9086 return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
9089 case TYPENAME_TYPE:
9091 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9092 in_decl, /*entering_scope=*/1);
9093 tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
9094 complain, in_decl);
9096 if (ctx == error_mark_node || f == error_mark_node)
9097 return error_mark_node;
9099 if (!IS_AGGR_TYPE (ctx))
9101 if (complain & tf_error)
9102 error ("%qT is not a class, struct, or union type", ctx);
9103 return error_mark_node;
9105 else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
9107 /* Normally, make_typename_type does not require that the CTX
9108 have complete type in order to allow things like:
9110 template <class T> struct S { typename S<T>::X Y; };
9112 But, such constructs have already been resolved by this
9113 point, so here CTX really should have complete type, unless
9114 it's a partial instantiation. */
9115 ctx = complete_type (ctx);
9116 if (!COMPLETE_TYPE_P (ctx))
9118 if (complain & tf_error)
9119 cxx_incomplete_type_error (NULL_TREE, ctx);
9120 return error_mark_node;
9124 f = make_typename_type (ctx, f, typename_type,
9125 (complain & tf_error) | tf_keep_type_decl);
9126 if (f == error_mark_node)
9127 return f;
9128 if (TREE_CODE (f) == TYPE_DECL)
9130 complain |= tf_ignore_bad_quals;
9131 f = TREE_TYPE (f);
9134 if (TREE_CODE (f) != TYPENAME_TYPE)
9136 if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
9137 error ("%qT resolves to %qT, which is not an enumeration type",
9138 t, f);
9139 else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
9140 error ("%qT resolves to %qT, which is is not a class type",
9141 t, f);
9144 return cp_build_qualified_type_real
9145 (f, cp_type_quals (f) | cp_type_quals (t), complain);
9148 case UNBOUND_CLASS_TEMPLATE:
9150 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9151 in_decl, /*entering_scope=*/1);
9152 tree name = TYPE_IDENTIFIER (t);
9153 tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
9155 if (ctx == error_mark_node || name == error_mark_node)
9156 return error_mark_node;
9158 if (parm_list)
9159 parm_list = tsubst_template_parms (parm_list, args, complain);
9160 return make_unbound_class_template (ctx, name, parm_list, complain);
9163 case INDIRECT_REF:
9164 case ADDR_EXPR:
9165 case CALL_EXPR:
9166 gcc_unreachable ();
9168 case ARRAY_REF:
9170 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9171 tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl,
9172 /*integral_constant_expression_p=*/false);
9173 if (e1 == error_mark_node || e2 == error_mark_node)
9174 return error_mark_node;
9176 return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
9179 case SCOPE_REF:
9181 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9182 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9183 if (e1 == error_mark_node || e2 == error_mark_node)
9184 return error_mark_node;
9186 return build_qualified_name (/*type=*/NULL_TREE,
9187 e1, e2, QUALIFIED_NAME_IS_TEMPLATE (t));
9190 case TYPEOF_TYPE:
9192 tree type;
9194 type = finish_typeof (tsubst_expr
9195 (TYPEOF_TYPE_EXPR (t), args,
9196 complain, in_decl,
9197 /*integral_constant_expression_p=*/false));
9198 return cp_build_qualified_type_real (type,
9199 cp_type_quals (t)
9200 | cp_type_quals (type),
9201 complain);
9204 case DECLTYPE_TYPE:
9206 tree type;
9208 type =
9209 finish_decltype_type (tsubst_expr
9210 (DECLTYPE_TYPE_EXPR (t), args,
9211 complain, in_decl,
9212 /*integral_constant_expression_p=*/false),
9213 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t));
9214 return cp_build_qualified_type_real (type,
9215 cp_type_quals (t)
9216 | cp_type_quals (type),
9217 complain);
9220 case TYPE_ARGUMENT_PACK:
9221 case NONTYPE_ARGUMENT_PACK:
9223 tree r = make_node (TREE_CODE (t));
9224 tree packed_out =
9225 tsubst_template_args (ARGUMENT_PACK_ARGS (t),
9226 args,
9227 complain,
9228 in_decl);
9229 SET_ARGUMENT_PACK_ARGS (r, packed_out);
9231 /* For template nontype argument packs, also substitute into
9232 the type. */
9233 if (TREE_CODE (t) == NONTYPE_ARGUMENT_PACK)
9234 TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
9236 return r;
9238 break;
9240 default:
9241 sorry ("use of %qs in template",
9242 tree_code_name [(int) TREE_CODE (t)]);
9243 return error_mark_node;
9247 /* Like tsubst_expr for a BASELINK. OBJECT_TYPE, if non-NULL, is the
9248 type of the expression on the left-hand side of the "." or "->"
9249 operator. */
9251 static tree
9252 tsubst_baselink (tree baselink, tree object_type,
9253 tree args, tsubst_flags_t complain, tree in_decl)
9255 tree name;
9256 tree qualifying_scope;
9257 tree fns;
9258 tree optype;
9259 tree template_args = 0;
9260 bool template_id_p = false;
9262 /* A baselink indicates a function from a base class. Both the
9263 BASELINK_ACCESS_BINFO and the base class referenced may
9264 indicate bases of the template class, rather than the
9265 instantiated class. In addition, lookups that were not
9266 ambiguous before may be ambiguous now. Therefore, we perform
9267 the lookup again. */
9268 qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
9269 qualifying_scope = tsubst (qualifying_scope, args,
9270 complain, in_decl);
9271 fns = BASELINK_FUNCTIONS (baselink);
9272 optype = BASELINK_OPTYPE (baselink);
9273 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
9275 template_id_p = true;
9276 template_args = TREE_OPERAND (fns, 1);
9277 fns = TREE_OPERAND (fns, 0);
9278 if (template_args)
9279 template_args = tsubst_template_args (template_args, args,
9280 complain, in_decl);
9282 name = DECL_NAME (get_first_fn (fns));
9283 baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
9285 /* If lookup found a single function, mark it as used at this
9286 point. (If it lookup found multiple functions the one selected
9287 later by overload resolution will be marked as used at that
9288 point.) */
9289 if (BASELINK_P (baselink))
9290 fns = BASELINK_FUNCTIONS (baselink);
9291 if (!template_id_p && !really_overloaded_fn (fns))
9292 mark_used (OVL_CURRENT (fns));
9294 /* Add back the template arguments, if present. */
9295 if (BASELINK_P (baselink) && template_id_p)
9296 BASELINK_FUNCTIONS (baselink)
9297 = build_nt (TEMPLATE_ID_EXPR,
9298 BASELINK_FUNCTIONS (baselink),
9299 template_args);
9300 /* Update the conversion operator type. */
9301 BASELINK_OPTYPE (baselink)
9302 = tsubst (optype, args, complain, in_decl);
9304 if (!object_type)
9305 object_type = current_class_type;
9306 return adjust_result_of_qualified_name_lookup (baselink,
9307 qualifying_scope,
9308 object_type);
9311 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID. DONE is
9312 true if the qualified-id will be a postfix-expression in-and-of
9313 itself; false if more of the postfix-expression follows the
9314 QUALIFIED_ID. ADDRESS_P is true if the qualified-id is the operand
9315 of "&". */
9317 static tree
9318 tsubst_qualified_id (tree qualified_id, tree args,
9319 tsubst_flags_t complain, tree in_decl,
9320 bool done, bool address_p)
9322 tree expr;
9323 tree scope;
9324 tree name;
9325 bool is_template;
9326 tree template_args;
9328 gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
9330 /* Figure out what name to look up. */
9331 name = TREE_OPERAND (qualified_id, 1);
9332 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
9334 is_template = true;
9335 template_args = TREE_OPERAND (name, 1);
9336 if (template_args)
9337 template_args = tsubst_template_args (template_args, args,
9338 complain, in_decl);
9339 name = TREE_OPERAND (name, 0);
9341 else
9343 is_template = false;
9344 template_args = NULL_TREE;
9347 /* Substitute into the qualifying scope. When there are no ARGS, we
9348 are just trying to simplify a non-dependent expression. In that
9349 case the qualifying scope may be dependent, and, in any case,
9350 substituting will not help. */
9351 scope = TREE_OPERAND (qualified_id, 0);
9352 if (args)
9354 scope = tsubst (scope, args, complain, in_decl);
9355 expr = tsubst_copy (name, args, complain, in_decl);
9357 else
9358 expr = name;
9360 if (dependent_type_p (scope))
9361 return build_qualified_name (/*type=*/NULL_TREE,
9362 scope, expr,
9363 QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
9365 if (!BASELINK_P (name) && !DECL_P (expr))
9367 if (TREE_CODE (expr) == BIT_NOT_EXPR)
9368 /* If this were actually a destructor call, it would have been
9369 parsed as such by the parser. */
9370 expr = error_mark_node;
9371 else
9372 expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
9373 if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
9374 ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
9376 if (complain & tf_error)
9378 error ("dependent-name %qE is parsed as a non-type, but "
9379 "instantiation yields a type", qualified_id);
9380 inform ("say %<typename %E%> if a type is meant", qualified_id);
9382 return error_mark_node;
9386 if (DECL_P (expr))
9388 check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
9389 scope);
9390 /* Remember that there was a reference to this entity. */
9391 mark_used (expr);
9394 if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
9396 if (complain & tf_error)
9397 qualified_name_lookup_error (scope,
9398 TREE_OPERAND (qualified_id, 1),
9399 expr);
9400 return error_mark_node;
9403 if (is_template)
9404 expr = lookup_template_function (expr, template_args);
9406 if (expr == error_mark_node && complain & tf_error)
9407 qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
9408 expr);
9409 else if (TYPE_P (scope))
9411 expr = (adjust_result_of_qualified_name_lookup
9412 (expr, scope, current_class_type));
9413 expr = (finish_qualified_id_expr
9414 (scope, expr, done, address_p,
9415 QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
9416 /*template_arg_p=*/false));
9419 /* Expressions do not generally have reference type. */
9420 if (TREE_CODE (expr) != SCOPE_REF
9421 /* However, if we're about to form a pointer-to-member, we just
9422 want the referenced member referenced. */
9423 && TREE_CODE (expr) != OFFSET_REF)
9424 expr = convert_from_reference (expr);
9426 return expr;
9429 /* Like tsubst, but deals with expressions. This function just replaces
9430 template parms; to finish processing the resultant expression, use
9431 tsubst_expr. */
9433 static tree
9434 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9436 enum tree_code code;
9437 tree r;
9439 if (t == NULL_TREE || t == error_mark_node)
9440 return t;
9442 code = TREE_CODE (t);
9444 switch (code)
9446 case PARM_DECL:
9447 r = retrieve_local_specialization (t);
9448 gcc_assert (r != NULL);
9449 if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
9450 r = ARGUMENT_PACK_SELECT_ARG (r);
9451 mark_used (r);
9452 return r;
9454 case CONST_DECL:
9456 tree enum_type;
9457 tree v;
9459 if (DECL_TEMPLATE_PARM_P (t))
9460 return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
9461 /* There is no need to substitute into namespace-scope
9462 enumerators. */
9463 if (DECL_NAMESPACE_SCOPE_P (t))
9464 return t;
9465 /* If ARGS is NULL, then T is known to be non-dependent. */
9466 if (args == NULL_TREE)
9467 return integral_constant_value (t);
9469 /* Unfortunately, we cannot just call lookup_name here.
9470 Consider:
9472 template <int I> int f() {
9473 enum E { a = I };
9474 struct S { void g() { E e = a; } };
9477 When we instantiate f<7>::S::g(), say, lookup_name is not
9478 clever enough to find f<7>::a. */
9479 enum_type
9480 = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
9481 /*entering_scope=*/0);
9483 for (v = TYPE_VALUES (enum_type);
9484 v != NULL_TREE;
9485 v = TREE_CHAIN (v))
9486 if (TREE_PURPOSE (v) == DECL_NAME (t))
9487 return TREE_VALUE (v);
9489 /* We didn't find the name. That should never happen; if
9490 name-lookup found it during preliminary parsing, we
9491 should find it again here during instantiation. */
9492 gcc_unreachable ();
9494 return t;
9496 case FIELD_DECL:
9497 if (DECL_CONTEXT (t))
9499 tree ctx;
9501 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
9502 /*entering_scope=*/1);
9503 if (ctx != DECL_CONTEXT (t))
9505 tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
9506 if (!r)
9508 if (complain & tf_error)
9509 error ("using invalid field %qD", t);
9510 return error_mark_node;
9512 return r;
9516 return t;
9518 case VAR_DECL:
9519 case FUNCTION_DECL:
9520 if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
9521 || local_variable_p (t))
9522 t = tsubst (t, args, complain, in_decl);
9523 mark_used (t);
9524 return t;
9526 case BASELINK:
9527 return tsubst_baselink (t, current_class_type, args, complain, in_decl);
9529 case TEMPLATE_DECL:
9530 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9531 return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
9532 args, complain, in_decl);
9533 else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
9534 return tsubst (t, args, complain, in_decl);
9535 else if (DECL_CLASS_SCOPE_P (t)
9536 && uses_template_parms (DECL_CONTEXT (t)))
9538 /* Template template argument like the following example need
9539 special treatment:
9541 template <template <class> class TT> struct C {};
9542 template <class T> struct D {
9543 template <class U> struct E {};
9544 C<E> c; // #1
9546 D<int> d; // #2
9548 We are processing the template argument `E' in #1 for
9549 the template instantiation #2. Originally, `E' is a
9550 TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT. Now we
9551 have to substitute this with one having context `D<int>'. */
9553 tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
9554 return lookup_field (context, DECL_NAME(t), 0, false);
9556 else
9557 /* Ordinary template template argument. */
9558 return t;
9560 case CAST_EXPR:
9561 case REINTERPRET_CAST_EXPR:
9562 case CONST_CAST_EXPR:
9563 case STATIC_CAST_EXPR:
9564 case DYNAMIC_CAST_EXPR:
9565 case NOP_EXPR:
9566 return build1
9567 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9568 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9570 case SIZEOF_EXPR:
9571 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
9573 /* We only want to compute the number of arguments. */
9574 tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
9575 complain, in_decl);
9576 if (expanded == error_mark_node)
9577 return error_mark_node;
9578 return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
9580 /* Fall through */
9582 case INDIRECT_REF:
9583 case NEGATE_EXPR:
9584 case TRUTH_NOT_EXPR:
9585 case BIT_NOT_EXPR:
9586 case ADDR_EXPR:
9587 case UNARY_PLUS_EXPR: /* Unary + */
9588 case ALIGNOF_EXPR:
9589 case ARROW_EXPR:
9590 case THROW_EXPR:
9591 case TYPEID_EXPR:
9592 case REALPART_EXPR:
9593 case IMAGPART_EXPR:
9594 return build1
9595 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9596 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9598 case COMPONENT_REF:
9600 tree object;
9601 tree name;
9603 object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
9604 name = TREE_OPERAND (t, 1);
9605 if (TREE_CODE (name) == BIT_NOT_EXPR)
9607 name = tsubst_copy (TREE_OPERAND (name, 0), args,
9608 complain, in_decl);
9609 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9611 else if (TREE_CODE (name) == SCOPE_REF
9612 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
9614 tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
9615 complain, in_decl);
9616 name = TREE_OPERAND (name, 1);
9617 name = tsubst_copy (TREE_OPERAND (name, 0), args,
9618 complain, in_decl);
9619 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9620 name = build_qualified_name (/*type=*/NULL_TREE,
9621 base, name,
9622 /*template_p=*/false);
9624 else if (TREE_CODE (name) == BASELINK)
9625 name = tsubst_baselink (name,
9626 non_reference (TREE_TYPE (object)),
9627 args, complain,
9628 in_decl);
9629 else
9630 name = tsubst_copy (name, args, complain, in_decl);
9631 return build_nt (COMPONENT_REF, object, name, NULL_TREE);
9634 case PLUS_EXPR:
9635 case MINUS_EXPR:
9636 case MULT_EXPR:
9637 case TRUNC_DIV_EXPR:
9638 case CEIL_DIV_EXPR:
9639 case FLOOR_DIV_EXPR:
9640 case ROUND_DIV_EXPR:
9641 case EXACT_DIV_EXPR:
9642 case BIT_AND_EXPR:
9643 case BIT_IOR_EXPR:
9644 case BIT_XOR_EXPR:
9645 case TRUNC_MOD_EXPR:
9646 case FLOOR_MOD_EXPR:
9647 case TRUTH_ANDIF_EXPR:
9648 case TRUTH_ORIF_EXPR:
9649 case TRUTH_AND_EXPR:
9650 case TRUTH_OR_EXPR:
9651 case RSHIFT_EXPR:
9652 case LSHIFT_EXPR:
9653 case RROTATE_EXPR:
9654 case LROTATE_EXPR:
9655 case EQ_EXPR:
9656 case NE_EXPR:
9657 case MAX_EXPR:
9658 case MIN_EXPR:
9659 case LE_EXPR:
9660 case GE_EXPR:
9661 case LT_EXPR:
9662 case GT_EXPR:
9663 case COMPOUND_EXPR:
9664 case DOTSTAR_EXPR:
9665 case MEMBER_REF:
9666 case PREDECREMENT_EXPR:
9667 case PREINCREMENT_EXPR:
9668 case POSTDECREMENT_EXPR:
9669 case POSTINCREMENT_EXPR:
9670 return build_nt
9671 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9672 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
9674 case SCOPE_REF:
9675 return build_qualified_name (/*type=*/NULL_TREE,
9676 tsubst_copy (TREE_OPERAND (t, 0),
9677 args, complain, in_decl),
9678 tsubst_copy (TREE_OPERAND (t, 1),
9679 args, complain, in_decl),
9680 QUALIFIED_NAME_IS_TEMPLATE (t));
9682 case ARRAY_REF:
9683 return build_nt
9684 (ARRAY_REF,
9685 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9686 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9687 NULL_TREE, NULL_TREE);
9689 case CALL_EXPR:
9691 int n = VL_EXP_OPERAND_LENGTH (t);
9692 tree result = build_vl_exp (CALL_EXPR, n);
9693 int i;
9694 for (i = 0; i < n; i++)
9695 TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
9696 complain, in_decl);
9697 return result;
9700 case COND_EXPR:
9701 case MODOP_EXPR:
9702 case PSEUDO_DTOR_EXPR:
9704 r = build_nt
9705 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9706 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9707 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
9708 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
9709 return r;
9712 case NEW_EXPR:
9714 r = build_nt
9715 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9716 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9717 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
9718 NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
9719 return r;
9722 case DELETE_EXPR:
9724 r = build_nt
9725 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9726 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
9727 DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
9728 DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
9729 return r;
9732 case TEMPLATE_ID_EXPR:
9734 /* Substituted template arguments */
9735 tree fn = TREE_OPERAND (t, 0);
9736 tree targs = TREE_OPERAND (t, 1);
9738 fn = tsubst_copy (fn, args, complain, in_decl);
9739 if (targs)
9740 targs = tsubst_template_args (targs, args, complain, in_decl);
9742 return lookup_template_function (fn, targs);
9745 case TREE_LIST:
9747 tree purpose, value, chain;
9749 if (t == void_list_node)
9750 return t;
9752 purpose = TREE_PURPOSE (t);
9753 if (purpose)
9754 purpose = tsubst_copy (purpose, args, complain, in_decl);
9755 value = TREE_VALUE (t);
9756 if (value)
9757 value = tsubst_copy (value, args, complain, in_decl);
9758 chain = TREE_CHAIN (t);
9759 if (chain && chain != void_type_node)
9760 chain = tsubst_copy (chain, args, complain, in_decl);
9761 if (purpose == TREE_PURPOSE (t)
9762 && value == TREE_VALUE (t)
9763 && chain == TREE_CHAIN (t))
9764 return t;
9765 return tree_cons (purpose, value, chain);
9768 case RECORD_TYPE:
9769 case UNION_TYPE:
9770 case ENUMERAL_TYPE:
9771 case INTEGER_TYPE:
9772 case TEMPLATE_TYPE_PARM:
9773 case TEMPLATE_TEMPLATE_PARM:
9774 case BOUND_TEMPLATE_TEMPLATE_PARM:
9775 case TEMPLATE_PARM_INDEX:
9776 case POINTER_TYPE:
9777 case REFERENCE_TYPE:
9778 case OFFSET_TYPE:
9779 case FUNCTION_TYPE:
9780 case METHOD_TYPE:
9781 case ARRAY_TYPE:
9782 case TYPENAME_TYPE:
9783 case UNBOUND_CLASS_TEMPLATE:
9784 case TYPEOF_TYPE:
9785 case DECLTYPE_TYPE:
9786 case TYPE_DECL:
9787 return tsubst (t, args, complain, in_decl);
9789 case IDENTIFIER_NODE:
9790 if (IDENTIFIER_TYPENAME_P (t))
9792 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9793 return mangle_conv_op_name_for_type (new_type);
9795 else
9796 return t;
9798 case CONSTRUCTOR:
9799 /* This is handled by tsubst_copy_and_build. */
9800 gcc_unreachable ();
9802 case VA_ARG_EXPR:
9803 return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
9804 in_decl),
9805 tsubst (TREE_TYPE (t), args, complain, in_decl));
9807 case CLEANUP_POINT_EXPR:
9808 /* We shouldn't have built any of these during initial template
9809 generation. Instead, they should be built during instantiation
9810 in response to the saved STMT_IS_FULL_EXPR_P setting. */
9811 gcc_unreachable ();
9813 case OFFSET_REF:
9814 mark_used (TREE_OPERAND (t, 1));
9815 return t;
9817 case EXPR_PACK_EXPANSION:
9818 error ("invalid use of pack expansion expression");
9819 return error_mark_node;
9821 case NONTYPE_ARGUMENT_PACK:
9822 error ("use %<...%> to expand argument pack");
9823 return error_mark_node;
9825 default:
9826 return t;
9830 /* Like tsubst_copy, but specifically for OpenMP clauses. */
9832 static tree
9833 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
9834 tree in_decl)
9836 tree new_clauses = NULL, nc, oc;
9838 for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
9840 nc = copy_node (oc);
9841 OMP_CLAUSE_CHAIN (nc) = new_clauses;
9842 new_clauses = nc;
9844 switch (OMP_CLAUSE_CODE (nc))
9846 case OMP_CLAUSE_PRIVATE:
9847 case OMP_CLAUSE_SHARED:
9848 case OMP_CLAUSE_FIRSTPRIVATE:
9849 case OMP_CLAUSE_LASTPRIVATE:
9850 case OMP_CLAUSE_REDUCTION:
9851 case OMP_CLAUSE_COPYIN:
9852 case OMP_CLAUSE_COPYPRIVATE:
9853 case OMP_CLAUSE_IF:
9854 case OMP_CLAUSE_NUM_THREADS:
9855 case OMP_CLAUSE_SCHEDULE:
9856 OMP_CLAUSE_OPERAND (nc, 0)
9857 = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
9858 in_decl, /*integral_constant_expression_p=*/false);
9859 break;
9860 case OMP_CLAUSE_NOWAIT:
9861 case OMP_CLAUSE_ORDERED:
9862 case OMP_CLAUSE_DEFAULT:
9863 break;
9864 default:
9865 gcc_unreachable ();
9869 return finish_omp_clauses (nreverse (new_clauses));
9872 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes. */
9874 static tree
9875 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
9876 tree in_decl)
9878 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
9880 tree purpose, value, chain;
9882 if (t == NULL)
9883 return t;
9885 if (TREE_CODE (t) != TREE_LIST)
9886 return tsubst_copy_and_build (t, args, complain, in_decl,
9887 /*function_p=*/false,
9888 /*integral_constant_expression_p=*/false);
9890 if (t == void_list_node)
9891 return t;
9893 purpose = TREE_PURPOSE (t);
9894 if (purpose)
9895 purpose = RECUR (purpose);
9896 value = TREE_VALUE (t);
9897 if (value)
9898 value = RECUR (value);
9899 chain = TREE_CHAIN (t);
9900 if (chain && chain != void_type_node)
9901 chain = RECUR (chain);
9902 return tree_cons (purpose, value, chain);
9903 #undef RECUR
9906 /* Like tsubst_copy for expressions, etc. but also does semantic
9907 processing. */
9909 static tree
9910 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
9911 bool integral_constant_expression_p)
9913 #define RECUR(NODE) \
9914 tsubst_expr ((NODE), args, complain, in_decl, \
9915 integral_constant_expression_p)
9917 tree stmt, tmp;
9919 if (t == NULL_TREE || t == error_mark_node)
9920 return t;
9922 if (EXPR_HAS_LOCATION (t))
9923 input_location = EXPR_LOCATION (t);
9924 if (STATEMENT_CODE_P (TREE_CODE (t)))
9925 current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
9927 switch (TREE_CODE (t))
9929 case STATEMENT_LIST:
9931 tree_stmt_iterator i;
9932 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
9933 RECUR (tsi_stmt (i));
9934 break;
9937 case CTOR_INITIALIZER:
9938 finish_mem_initializers (tsubst_initializer_list
9939 (TREE_OPERAND (t, 0), args));
9940 break;
9942 case RETURN_EXPR:
9943 finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
9944 break;
9946 case EXPR_STMT:
9947 tmp = RECUR (EXPR_STMT_EXPR (t));
9948 if (EXPR_STMT_STMT_EXPR_RESULT (t))
9949 finish_stmt_expr_expr (tmp, cur_stmt_expr);
9950 else
9951 finish_expr_stmt (tmp);
9952 break;
9954 case USING_STMT:
9955 do_using_directive (RECUR (USING_STMT_NAMESPACE (t)));
9956 break;
9958 case DECL_EXPR:
9960 tree decl;
9961 tree init;
9963 decl = DECL_EXPR_DECL (t);
9964 if (TREE_CODE (decl) == LABEL_DECL)
9965 finish_label_decl (DECL_NAME (decl));
9966 else if (TREE_CODE (decl) == USING_DECL)
9968 tree scope = USING_DECL_SCOPE (decl);
9969 tree name = DECL_NAME (decl);
9970 tree decl;
9972 scope = RECUR (scope);
9973 decl = lookup_qualified_name (scope, name,
9974 /*is_type_p=*/false,
9975 /*complain=*/false);
9976 if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
9977 qualified_name_lookup_error (scope, name, decl);
9978 else
9979 do_local_using_decl (decl, scope, name);
9981 else
9983 init = DECL_INITIAL (decl);
9984 decl = tsubst (decl, args, complain, in_decl);
9985 if (decl != error_mark_node)
9987 /* By marking the declaration as instantiated, we avoid
9988 trying to instantiate it. Since instantiate_decl can't
9989 handle local variables, and since we've already done
9990 all that needs to be done, that's the right thing to
9991 do. */
9992 if (TREE_CODE (decl) == VAR_DECL)
9993 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
9994 if (TREE_CODE (decl) == VAR_DECL
9995 && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
9996 /* Anonymous aggregates are a special case. */
9997 finish_anon_union (decl);
9998 else
10000 maybe_push_decl (decl);
10001 if (TREE_CODE (decl) == VAR_DECL
10002 && DECL_PRETTY_FUNCTION_P (decl))
10004 /* For __PRETTY_FUNCTION__ we have to adjust the
10005 initializer. */
10006 const char *const name
10007 = cxx_printable_name (current_function_decl, 2);
10008 init = cp_fname_init (name, &TREE_TYPE (decl));
10010 else
10012 tree t = RECUR (init);
10014 if (init && !t)
10015 /* If we had an initializer but it
10016 instantiated to nothing,
10017 value-initialize the object. This will
10018 only occur when the initializer was a
10019 pack expansion where the parameter packs
10020 used in that expansion were of length
10021 zero. */
10022 init = build_default_init (TREE_TYPE (decl),
10023 NULL_TREE);
10024 else
10025 init = t;
10028 finish_decl (decl, init, NULL_TREE);
10033 /* A DECL_EXPR can also be used as an expression, in the condition
10034 clause of an if/for/while construct. */
10035 return decl;
10038 case FOR_STMT:
10039 stmt = begin_for_stmt ();
10040 RECUR (FOR_INIT_STMT (t));
10041 finish_for_init_stmt (stmt);
10042 tmp = RECUR (FOR_COND (t));
10043 finish_for_cond (tmp, stmt);
10044 tmp = RECUR (FOR_EXPR (t));
10045 finish_for_expr (tmp, stmt);
10046 RECUR (FOR_BODY (t));
10047 finish_for_stmt (stmt);
10048 break;
10050 case WHILE_STMT:
10051 stmt = begin_while_stmt ();
10052 tmp = RECUR (WHILE_COND (t));
10053 finish_while_stmt_cond (tmp, stmt);
10054 RECUR (WHILE_BODY (t));
10055 finish_while_stmt (stmt);
10056 break;
10058 case DO_STMT:
10059 stmt = begin_do_stmt ();
10060 RECUR (DO_BODY (t));
10061 finish_do_body (stmt);
10062 tmp = RECUR (DO_COND (t));
10063 finish_do_stmt (tmp, stmt);
10064 break;
10066 case IF_STMT:
10067 stmt = begin_if_stmt ();
10068 tmp = RECUR (IF_COND (t));
10069 finish_if_stmt_cond (tmp, stmt);
10070 RECUR (THEN_CLAUSE (t));
10071 finish_then_clause (stmt);
10073 if (ELSE_CLAUSE (t))
10075 begin_else_clause (stmt);
10076 RECUR (ELSE_CLAUSE (t));
10077 finish_else_clause (stmt);
10080 finish_if_stmt (stmt);
10081 break;
10083 case BIND_EXPR:
10084 if (BIND_EXPR_BODY_BLOCK (t))
10085 stmt = begin_function_body ();
10086 else
10087 stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
10088 ? BCS_TRY_BLOCK : 0);
10090 RECUR (BIND_EXPR_BODY (t));
10092 if (BIND_EXPR_BODY_BLOCK (t))
10093 finish_function_body (stmt);
10094 else
10095 finish_compound_stmt (stmt);
10096 break;
10098 case BREAK_STMT:
10099 finish_break_stmt ();
10100 break;
10102 case CONTINUE_STMT:
10103 finish_continue_stmt ();
10104 break;
10106 case SWITCH_STMT:
10107 stmt = begin_switch_stmt ();
10108 tmp = RECUR (SWITCH_STMT_COND (t));
10109 finish_switch_cond (tmp, stmt);
10110 RECUR (SWITCH_STMT_BODY (t));
10111 finish_switch_stmt (stmt);
10112 break;
10114 case CASE_LABEL_EXPR:
10115 finish_case_label (RECUR (CASE_LOW (t)),
10116 RECUR (CASE_HIGH (t)));
10117 break;
10119 case LABEL_EXPR:
10120 finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
10121 break;
10123 case GOTO_EXPR:
10124 tmp = GOTO_DESTINATION (t);
10125 if (TREE_CODE (tmp) != LABEL_DECL)
10126 /* Computed goto's must be tsubst'd into. On the other hand,
10127 non-computed gotos must not be; the identifier in question
10128 will have no binding. */
10129 tmp = RECUR (tmp);
10130 else
10131 tmp = DECL_NAME (tmp);
10132 finish_goto_stmt (tmp);
10133 break;
10135 case ASM_EXPR:
10136 tmp = finish_asm_stmt
10137 (ASM_VOLATILE_P (t),
10138 RECUR (ASM_STRING (t)),
10139 tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
10140 tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
10141 tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl));
10143 tree asm_expr = tmp;
10144 if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
10145 asm_expr = TREE_OPERAND (asm_expr, 0);
10146 ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
10148 break;
10150 case TRY_BLOCK:
10151 if (CLEANUP_P (t))
10153 stmt = begin_try_block ();
10154 RECUR (TRY_STMTS (t));
10155 finish_cleanup_try_block (stmt);
10156 finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
10158 else
10160 tree compound_stmt = NULL_TREE;
10162 if (FN_TRY_BLOCK_P (t))
10163 stmt = begin_function_try_block (&compound_stmt);
10164 else
10165 stmt = begin_try_block ();
10167 RECUR (TRY_STMTS (t));
10169 if (FN_TRY_BLOCK_P (t))
10170 finish_function_try_block (stmt);
10171 else
10172 finish_try_block (stmt);
10174 RECUR (TRY_HANDLERS (t));
10175 if (FN_TRY_BLOCK_P (t))
10176 finish_function_handler_sequence (stmt, compound_stmt);
10177 else
10178 finish_handler_sequence (stmt);
10180 break;
10182 case HANDLER:
10184 tree decl = HANDLER_PARMS (t);
10186 if (decl)
10188 decl = tsubst (decl, args, complain, in_decl);
10189 /* Prevent instantiate_decl from trying to instantiate
10190 this variable. We've already done all that needs to be
10191 done. */
10192 if (decl != error_mark_node)
10193 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10195 stmt = begin_handler ();
10196 finish_handler_parms (decl, stmt);
10197 RECUR (HANDLER_BODY (t));
10198 finish_handler (stmt);
10200 break;
10202 case TAG_DEFN:
10203 tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
10204 break;
10206 case STATIC_ASSERT:
10208 tree condition =
10209 tsubst_expr (STATIC_ASSERT_CONDITION (t),
10210 args,
10211 complain, in_decl,
10212 /*integral_constant_expression_p=*/true);
10213 finish_static_assert (condition,
10214 STATIC_ASSERT_MESSAGE (t),
10215 STATIC_ASSERT_SOURCE_LOCATION (t),
10216 /*member_p=*/false);
10218 break;
10220 case OMP_PARALLEL:
10221 tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
10222 args, complain, in_decl);
10223 stmt = begin_omp_parallel ();
10224 RECUR (OMP_PARALLEL_BODY (t));
10225 OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
10226 = OMP_PARALLEL_COMBINED (t);
10227 break;
10229 case OMP_FOR:
10231 tree clauses, decl, init, cond, incr, body, pre_body;
10233 clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
10234 args, complain, in_decl);
10235 init = OMP_FOR_INIT (t);
10236 gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
10237 decl = RECUR (TREE_OPERAND (init, 0));
10238 init = RECUR (TREE_OPERAND (init, 1));
10239 cond = RECUR (OMP_FOR_COND (t));
10240 incr = RECUR (OMP_FOR_INCR (t));
10242 stmt = begin_omp_structured_block ();
10244 pre_body = push_stmt_list ();
10245 RECUR (OMP_FOR_PRE_BODY (t));
10246 pre_body = pop_stmt_list (pre_body);
10248 body = push_stmt_list ();
10249 RECUR (OMP_FOR_BODY (t));
10250 body = pop_stmt_list (body);
10252 t = finish_omp_for (EXPR_LOCATION (t), decl, init, cond, incr, body,
10253 pre_body);
10254 if (t)
10255 OMP_FOR_CLAUSES (t) = clauses;
10257 add_stmt (finish_omp_structured_block (stmt));
10259 break;
10261 case OMP_SECTIONS:
10262 case OMP_SINGLE:
10263 tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
10264 stmt = push_stmt_list ();
10265 RECUR (OMP_BODY (t));
10266 stmt = pop_stmt_list (stmt);
10268 t = copy_node (t);
10269 OMP_BODY (t) = stmt;
10270 OMP_CLAUSES (t) = tmp;
10271 add_stmt (t);
10272 break;
10274 case OMP_SECTION:
10275 case OMP_CRITICAL:
10276 case OMP_MASTER:
10277 case OMP_ORDERED:
10278 stmt = push_stmt_list ();
10279 RECUR (OMP_BODY (t));
10280 stmt = pop_stmt_list (stmt);
10282 t = copy_node (t);
10283 OMP_BODY (t) = stmt;
10284 add_stmt (t);
10285 break;
10287 case OMP_ATOMIC:
10288 if (OMP_ATOMIC_DEPENDENT_P (t))
10290 tree op1 = TREE_OPERAND (t, 1);
10291 tree lhs = RECUR (TREE_OPERAND (op1, 0));
10292 tree rhs = RECUR (TREE_OPERAND (op1, 1));
10293 finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
10295 break;
10297 case EXPR_PACK_EXPANSION:
10298 error ("invalid use of pack expansion expression");
10299 return error_mark_node;
10301 case NONTYPE_ARGUMENT_PACK:
10302 error ("use %<...%> to expand argument pack");
10303 return error_mark_node;
10305 default:
10306 gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
10308 return tsubst_copy_and_build (t, args, complain, in_decl,
10309 /*function_p=*/false,
10310 integral_constant_expression_p);
10313 return NULL_TREE;
10314 #undef RECUR
10317 /* T is a postfix-expression that is not being used in a function
10318 call. Return the substituted version of T. */
10320 static tree
10321 tsubst_non_call_postfix_expression (tree t, tree args,
10322 tsubst_flags_t complain,
10323 tree in_decl)
10325 if (TREE_CODE (t) == SCOPE_REF)
10326 t = tsubst_qualified_id (t, args, complain, in_decl,
10327 /*done=*/false, /*address_p=*/false);
10328 else
10329 t = tsubst_copy_and_build (t, args, complain, in_decl,
10330 /*function_p=*/false,
10331 /*integral_constant_expression_p=*/false);
10333 return t;
10336 /* Like tsubst but deals with expressions and performs semantic
10337 analysis. FUNCTION_P is true if T is the "F" in "F (ARGS)". */
10339 tree
10340 tsubst_copy_and_build (tree t,
10341 tree args,
10342 tsubst_flags_t complain,
10343 tree in_decl,
10344 bool function_p,
10345 bool integral_constant_expression_p)
10347 #define RECUR(NODE) \
10348 tsubst_copy_and_build (NODE, args, complain, in_decl, \
10349 /*function_p=*/false, \
10350 integral_constant_expression_p)
10352 tree op1;
10354 if (t == NULL_TREE || t == error_mark_node)
10355 return t;
10357 switch (TREE_CODE (t))
10359 case USING_DECL:
10360 t = DECL_NAME (t);
10361 /* Fall through. */
10362 case IDENTIFIER_NODE:
10364 tree decl;
10365 cp_id_kind idk;
10366 bool non_integral_constant_expression_p;
10367 const char *error_msg;
10369 if (IDENTIFIER_TYPENAME_P (t))
10371 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10372 t = mangle_conv_op_name_for_type (new_type);
10375 /* Look up the name. */
10376 decl = lookup_name (t);
10378 /* By convention, expressions use ERROR_MARK_NODE to indicate
10379 failure, not NULL_TREE. */
10380 if (decl == NULL_TREE)
10381 decl = error_mark_node;
10383 decl = finish_id_expression (t, decl, NULL_TREE,
10384 &idk,
10385 integral_constant_expression_p,
10386 /*allow_non_integral_constant_expression_p=*/false,
10387 &non_integral_constant_expression_p,
10388 /*template_p=*/false,
10389 /*done=*/true,
10390 /*address_p=*/false,
10391 /*template_arg_p=*/false,
10392 &error_msg);
10393 if (error_msg)
10394 error (error_msg);
10395 if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
10396 decl = unqualified_name_lookup_error (decl);
10397 return decl;
10400 case TEMPLATE_ID_EXPR:
10402 tree object;
10403 tree template = RECUR (TREE_OPERAND (t, 0));
10404 tree targs = TREE_OPERAND (t, 1);
10406 if (targs)
10407 targs = tsubst_template_args (targs, args, complain, in_decl);
10409 if (TREE_CODE (template) == COMPONENT_REF)
10411 object = TREE_OPERAND (template, 0);
10412 template = TREE_OPERAND (template, 1);
10414 else
10415 object = NULL_TREE;
10416 template = lookup_template_function (template, targs);
10418 if (object)
10419 return build3 (COMPONENT_REF, TREE_TYPE (template),
10420 object, template, NULL_TREE);
10421 else
10422 return baselink_for_fns (template);
10425 case INDIRECT_REF:
10427 tree r = RECUR (TREE_OPERAND (t, 0));
10429 if (REFERENCE_REF_P (t))
10431 /* A type conversion to reference type will be enclosed in
10432 such an indirect ref, but the substitution of the cast
10433 will have also added such an indirect ref. */
10434 if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
10435 r = convert_from_reference (r);
10437 else
10438 r = build_x_indirect_ref (r, "unary *");
10439 return r;
10442 case NOP_EXPR:
10443 return build_nop
10444 (tsubst (TREE_TYPE (t), args, complain, in_decl),
10445 RECUR (TREE_OPERAND (t, 0)));
10447 case CAST_EXPR:
10448 case REINTERPRET_CAST_EXPR:
10449 case CONST_CAST_EXPR:
10450 case DYNAMIC_CAST_EXPR:
10451 case STATIC_CAST_EXPR:
10453 tree type;
10454 tree op;
10456 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10457 if (integral_constant_expression_p
10458 && !cast_valid_in_integral_constant_expression_p (type))
10460 error ("a cast to a type other than an integral or "
10461 "enumeration type cannot appear in a constant-expression");
10462 return error_mark_node;
10465 op = RECUR (TREE_OPERAND (t, 0));
10467 switch (TREE_CODE (t))
10469 case CAST_EXPR:
10470 return build_functional_cast (type, op);
10471 case REINTERPRET_CAST_EXPR:
10472 return build_reinterpret_cast (type, op);
10473 case CONST_CAST_EXPR:
10474 return build_const_cast (type, op);
10475 case DYNAMIC_CAST_EXPR:
10476 return build_dynamic_cast (type, op);
10477 case STATIC_CAST_EXPR:
10478 return build_static_cast (type, op);
10479 default:
10480 gcc_unreachable ();
10484 case POSTDECREMENT_EXPR:
10485 case POSTINCREMENT_EXPR:
10486 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10487 args, complain, in_decl);
10488 return build_x_unary_op (TREE_CODE (t), op1);
10490 case PREDECREMENT_EXPR:
10491 case PREINCREMENT_EXPR:
10492 case NEGATE_EXPR:
10493 case BIT_NOT_EXPR:
10494 case ABS_EXPR:
10495 case TRUTH_NOT_EXPR:
10496 case UNARY_PLUS_EXPR: /* Unary + */
10497 case REALPART_EXPR:
10498 case IMAGPART_EXPR:
10499 return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
10501 case ADDR_EXPR:
10502 op1 = TREE_OPERAND (t, 0);
10503 if (TREE_CODE (op1) == SCOPE_REF)
10504 op1 = tsubst_qualified_id (op1, args, complain, in_decl,
10505 /*done=*/true, /*address_p=*/true);
10506 else
10507 op1 = tsubst_non_call_postfix_expression (op1, args, complain,
10508 in_decl);
10509 if (TREE_CODE (op1) == LABEL_DECL)
10510 return finish_label_address_expr (DECL_NAME (op1));
10511 return build_x_unary_op (ADDR_EXPR, op1);
10513 case PLUS_EXPR:
10514 case MINUS_EXPR:
10515 case MULT_EXPR:
10516 case TRUNC_DIV_EXPR:
10517 case CEIL_DIV_EXPR:
10518 case FLOOR_DIV_EXPR:
10519 case ROUND_DIV_EXPR:
10520 case EXACT_DIV_EXPR:
10521 case BIT_AND_EXPR:
10522 case BIT_IOR_EXPR:
10523 case BIT_XOR_EXPR:
10524 case TRUNC_MOD_EXPR:
10525 case FLOOR_MOD_EXPR:
10526 case TRUTH_ANDIF_EXPR:
10527 case TRUTH_ORIF_EXPR:
10528 case TRUTH_AND_EXPR:
10529 case TRUTH_OR_EXPR:
10530 case RSHIFT_EXPR:
10531 case LSHIFT_EXPR:
10532 case RROTATE_EXPR:
10533 case LROTATE_EXPR:
10534 case EQ_EXPR:
10535 case NE_EXPR:
10536 case MAX_EXPR:
10537 case MIN_EXPR:
10538 case LE_EXPR:
10539 case GE_EXPR:
10540 case LT_EXPR:
10541 case GT_EXPR:
10542 case MEMBER_REF:
10543 case DOTSTAR_EXPR:
10544 return build_x_binary_op
10545 (TREE_CODE (t),
10546 RECUR (TREE_OPERAND (t, 0)),
10547 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
10548 ? ERROR_MARK
10549 : TREE_CODE (TREE_OPERAND (t, 0))),
10550 RECUR (TREE_OPERAND (t, 1)),
10551 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
10552 ? ERROR_MARK
10553 : TREE_CODE (TREE_OPERAND (t, 1))),
10554 /*overloaded_p=*/NULL);
10556 case SCOPE_REF:
10557 return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
10558 /*address_p=*/false);
10559 case ARRAY_REF:
10560 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10561 args, complain, in_decl);
10562 return build_x_binary_op (ARRAY_REF, op1,
10563 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
10564 ? ERROR_MARK
10565 : TREE_CODE (TREE_OPERAND (t, 0))),
10566 RECUR (TREE_OPERAND (t, 1)),
10567 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
10568 ? ERROR_MARK
10569 : TREE_CODE (TREE_OPERAND (t, 1))),
10570 /*overloaded_p=*/NULL);
10572 case SIZEOF_EXPR:
10573 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
10575 /* We only want to compute the number of arguments. */
10576 tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
10577 complain, in_decl);
10578 if (expanded == error_mark_node)
10579 return error_mark_node;
10580 return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
10582 /* Fall through */
10584 case ALIGNOF_EXPR:
10585 op1 = TREE_OPERAND (t, 0);
10586 if (!args)
10588 /* When there are no ARGS, we are trying to evaluate a
10589 non-dependent expression from the parser. Trying to do
10590 the substitutions may not work. */
10591 if (!TYPE_P (op1))
10592 op1 = TREE_TYPE (op1);
10594 else
10596 ++skip_evaluation;
10597 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
10598 /*function_p=*/false,
10599 /*integral_constant_expression_p=*/false);
10600 --skip_evaluation;
10602 if (TYPE_P (op1))
10603 return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), true);
10604 else
10605 return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t));
10607 case MODOP_EXPR:
10609 tree r = build_x_modify_expr
10610 (RECUR (TREE_OPERAND (t, 0)),
10611 TREE_CODE (TREE_OPERAND (t, 1)),
10612 RECUR (TREE_OPERAND (t, 2)));
10613 /* TREE_NO_WARNING must be set if either the expression was
10614 parenthesized or it uses an operator such as >>= rather
10615 than plain assignment. In the former case, it was already
10616 set and must be copied. In the latter case,
10617 build_x_modify_expr sets it and it must not be reset
10618 here. */
10619 if (TREE_NO_WARNING (t))
10620 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
10621 return r;
10624 case ARROW_EXPR:
10625 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10626 args, complain, in_decl);
10627 /* Remember that there was a reference to this entity. */
10628 if (DECL_P (op1))
10629 mark_used (op1);
10630 return build_x_arrow (op1);
10632 case NEW_EXPR:
10634 tree init = RECUR (TREE_OPERAND (t, 3));
10636 if (TREE_OPERAND (t, 3) && !init)
10637 /* If there was an initializer in the the original tree, but
10638 it instantiated to an empty list, then we should pass on
10639 VOID_ZERO_NODE to tell build_new that it was an empty
10640 initializer () rather than no initializer. This can only
10641 happen when the initializer is a pack expansion whose
10642 parameter packs are of length zero. */
10643 init = void_zero_node;
10645 return build_new
10646 (RECUR (TREE_OPERAND (t, 0)),
10647 RECUR (TREE_OPERAND (t, 1)),
10648 RECUR (TREE_OPERAND (t, 2)),
10649 init,
10650 NEW_EXPR_USE_GLOBAL (t));
10653 case DELETE_EXPR:
10654 return delete_sanity
10655 (RECUR (TREE_OPERAND (t, 0)),
10656 RECUR (TREE_OPERAND (t, 1)),
10657 DELETE_EXPR_USE_VEC (t),
10658 DELETE_EXPR_USE_GLOBAL (t));
10660 case COMPOUND_EXPR:
10661 return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
10662 RECUR (TREE_OPERAND (t, 1)));
10664 case CALL_EXPR:
10666 tree function;
10667 tree call_args;
10668 bool qualified_p;
10669 bool koenig_p;
10671 function = CALL_EXPR_FN (t);
10672 /* When we parsed the expression, we determined whether or
10673 not Koenig lookup should be performed. */
10674 koenig_p = KOENIG_LOOKUP_P (t);
10675 if (TREE_CODE (function) == SCOPE_REF)
10677 qualified_p = true;
10678 function = tsubst_qualified_id (function, args, complain, in_decl,
10679 /*done=*/false,
10680 /*address_p=*/false);
10682 else
10684 if (TREE_CODE (function) == COMPONENT_REF)
10686 tree op = TREE_OPERAND (function, 1);
10688 qualified_p = (TREE_CODE (op) == SCOPE_REF
10689 || (BASELINK_P (op)
10690 && BASELINK_QUALIFIED_P (op)));
10692 else
10693 qualified_p = false;
10695 function = tsubst_copy_and_build (function, args, complain,
10696 in_decl,
10697 !qualified_p,
10698 integral_constant_expression_p);
10700 if (BASELINK_P (function))
10701 qualified_p = true;
10704 /* FIXME: Rewrite this so as not to construct an arglist. */
10705 call_args = RECUR (CALL_EXPR_ARGS (t));
10707 /* We do not perform argument-dependent lookup if normal
10708 lookup finds a non-function, in accordance with the
10709 expected resolution of DR 218. */
10710 if (koenig_p
10711 && ((is_overloaded_fn (function)
10712 /* If lookup found a member function, the Koenig lookup is
10713 not appropriate, even if an unqualified-name was used
10714 to denote the function. */
10715 && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
10716 || TREE_CODE (function) == IDENTIFIER_NODE))
10717 function = perform_koenig_lookup (function, call_args);
10719 if (TREE_CODE (function) == IDENTIFIER_NODE)
10721 unqualified_name_lookup_error (function);
10722 return error_mark_node;
10725 /* Remember that there was a reference to this entity. */
10726 if (DECL_P (function))
10727 mark_used (function);
10729 if (TREE_CODE (function) == OFFSET_REF)
10730 return build_offset_ref_call_from_tree (function, call_args);
10731 if (TREE_CODE (function) == COMPONENT_REF)
10733 if (!BASELINK_P (TREE_OPERAND (function, 1)))
10734 return finish_call_expr (function, call_args,
10735 /*disallow_virtual=*/false,
10736 /*koenig_p=*/false);
10737 else
10738 return (build_new_method_call
10739 (TREE_OPERAND (function, 0),
10740 TREE_OPERAND (function, 1),
10741 call_args, NULL_TREE,
10742 qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
10743 /*fn_p=*/NULL));
10745 return finish_call_expr (function, call_args,
10746 /*disallow_virtual=*/qualified_p,
10747 koenig_p);
10750 case COND_EXPR:
10751 return build_x_conditional_expr
10752 (RECUR (TREE_OPERAND (t, 0)),
10753 RECUR (TREE_OPERAND (t, 1)),
10754 RECUR (TREE_OPERAND (t, 2)));
10756 case PSEUDO_DTOR_EXPR:
10757 return finish_pseudo_destructor_expr
10758 (RECUR (TREE_OPERAND (t, 0)),
10759 RECUR (TREE_OPERAND (t, 1)),
10760 RECUR (TREE_OPERAND (t, 2)));
10762 case TREE_LIST:
10764 tree purpose, value, chain;
10766 if (t == void_list_node)
10767 return t;
10769 if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
10770 || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
10772 /* We have pack expansions, so expand those and
10773 create a new list out of it. */
10774 tree purposevec = NULL_TREE;
10775 tree valuevec = NULL_TREE;
10776 tree chain;
10777 int i, len = -1;
10779 /* Expand the argument expressions. */
10780 if (TREE_PURPOSE (t))
10781 purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
10782 complain, in_decl);
10783 if (TREE_VALUE (t))
10784 valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
10785 complain, in_decl);
10787 /* Build the rest of the list. */
10788 chain = TREE_CHAIN (t);
10789 if (chain && chain != void_type_node)
10790 chain = RECUR (chain);
10792 /* Determine the number of arguments. */
10793 if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
10795 len = TREE_VEC_LENGTH (purposevec);
10796 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
10798 else if (TREE_CODE (valuevec) == TREE_VEC)
10799 len = TREE_VEC_LENGTH (valuevec);
10800 else
10802 /* Since we only performed a partial substitution into
10803 the argument pack, we only return a single list
10804 node. */
10805 if (purposevec == TREE_PURPOSE (t)
10806 && valuevec == TREE_VALUE (t)
10807 && chain == TREE_CHAIN (t))
10808 return t;
10810 return tree_cons (purposevec, valuevec, chain);
10813 /* Convert the argument vectors into a TREE_LIST */
10814 i = len;
10815 while (i > 0)
10817 /* Grab the Ith values. */
10818 i--;
10819 purpose = purposevec ? TREE_VEC_ELT (purposevec, i)
10820 : NULL_TREE;
10821 value
10822 = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i))
10823 : NULL_TREE;
10825 /* Build the list (backwards). */
10826 chain = tree_cons (purpose, value, chain);
10829 return chain;
10832 purpose = TREE_PURPOSE (t);
10833 if (purpose)
10834 purpose = RECUR (purpose);
10835 value = TREE_VALUE (t);
10836 if (value)
10837 value = RECUR (value);
10838 chain = TREE_CHAIN (t);
10839 if (chain && chain != void_type_node)
10840 chain = RECUR (chain);
10841 if (purpose == TREE_PURPOSE (t)
10842 && value == TREE_VALUE (t)
10843 && chain == TREE_CHAIN (t))
10844 return t;
10845 return tree_cons (purpose, value, chain);
10848 case COMPONENT_REF:
10850 tree object;
10851 tree object_type;
10852 tree member;
10854 object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10855 args, complain, in_decl);
10856 /* Remember that there was a reference to this entity. */
10857 if (DECL_P (object))
10858 mark_used (object);
10859 object_type = TREE_TYPE (object);
10861 member = TREE_OPERAND (t, 1);
10862 if (BASELINK_P (member))
10863 member = tsubst_baselink (member,
10864 non_reference (TREE_TYPE (object)),
10865 args, complain, in_decl);
10866 else
10867 member = tsubst_copy (member, args, complain, in_decl);
10868 if (member == error_mark_node)
10869 return error_mark_node;
10871 if (object_type && !CLASS_TYPE_P (object_type))
10873 if (TREE_CODE (member) == BIT_NOT_EXPR)
10874 return finish_pseudo_destructor_expr (object,
10875 NULL_TREE,
10876 object_type);
10877 else if (TREE_CODE (member) == SCOPE_REF
10878 && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
10879 return finish_pseudo_destructor_expr (object,
10880 object,
10881 object_type);
10883 else if (TREE_CODE (member) == SCOPE_REF
10884 && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
10886 tree tmpl;
10887 tree args;
10889 /* Lookup the template functions now that we know what the
10890 scope is. */
10891 tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
10892 args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
10893 member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
10894 /*is_type_p=*/false,
10895 /*complain=*/false);
10896 if (BASELINK_P (member))
10898 BASELINK_FUNCTIONS (member)
10899 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
10900 args);
10901 member = (adjust_result_of_qualified_name_lookup
10902 (member, BINFO_TYPE (BASELINK_BINFO (member)),
10903 object_type));
10905 else
10907 qualified_name_lookup_error (object_type, tmpl, member);
10908 return error_mark_node;
10911 else if (TREE_CODE (member) == SCOPE_REF
10912 && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
10913 && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
10915 if (complain & tf_error)
10917 if (TYPE_P (TREE_OPERAND (member, 0)))
10918 error ("%qT is not a class or namespace",
10919 TREE_OPERAND (member, 0));
10920 else
10921 error ("%qD is not a class or namespace",
10922 TREE_OPERAND (member, 0));
10924 return error_mark_node;
10926 else if (TREE_CODE (member) == FIELD_DECL)
10927 return finish_non_static_data_member (member, object, NULL_TREE);
10929 return finish_class_member_access_expr (object, member,
10930 /*template_p=*/false);
10933 case THROW_EXPR:
10934 return build_throw
10935 (RECUR (TREE_OPERAND (t, 0)));
10937 case CONSTRUCTOR:
10939 VEC(constructor_elt,gc) *n;
10940 constructor_elt *ce;
10941 unsigned HOST_WIDE_INT idx;
10942 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10943 bool process_index_p;
10944 int newlen;
10945 bool need_copy_p = false;
10947 if (type == error_mark_node)
10948 return error_mark_node;
10950 /* digest_init will do the wrong thing if we let it. */
10951 if (type && TYPE_PTRMEMFUNC_P (type))
10952 return t;
10954 /* We do not want to process the index of aggregate
10955 initializers as they are identifier nodes which will be
10956 looked up by digest_init. */
10957 process_index_p = !(type && IS_AGGR_TYPE (type));
10959 n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
10960 newlen = VEC_length (constructor_elt, n);
10961 for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
10963 if (ce->index && process_index_p)
10964 ce->index = RECUR (ce->index);
10966 if (PACK_EXPANSION_P (ce->value))
10968 /* Substitute into the pack expansion. */
10969 ce->value = tsubst_pack_expansion (ce->value, args, complain,
10970 in_decl);
10972 if (ce->value == error_mark_node)
10974 else if (TREE_VEC_LENGTH (ce->value) == 1)
10975 /* Just move the argument into place. */
10976 ce->value = TREE_VEC_ELT (ce->value, 0);
10977 else
10979 /* Update the length of the final CONSTRUCTOR
10980 arguments vector, and note that we will need to
10981 copy.*/
10982 newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
10983 need_copy_p = true;
10986 else
10987 ce->value = RECUR (ce->value);
10990 if (need_copy_p)
10992 VEC(constructor_elt,gc) *old_n = n;
10994 n = VEC_alloc (constructor_elt, gc, newlen);
10995 for (idx = 0; VEC_iterate (constructor_elt, old_n, idx, ce);
10996 idx++)
10998 if (TREE_CODE (ce->value) == TREE_VEC)
11000 int i, len = TREE_VEC_LENGTH (ce->value);
11001 for (i = 0; i < len; ++i)
11002 CONSTRUCTOR_APPEND_ELT (n, 0,
11003 TREE_VEC_ELT (ce->value, i));
11005 else
11006 CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
11010 if (TREE_HAS_CONSTRUCTOR (t))
11011 return finish_compound_literal (type, n);
11013 return build_constructor (NULL_TREE, n);
11016 case TYPEID_EXPR:
11018 tree operand_0 = RECUR (TREE_OPERAND (t, 0));
11019 if (TYPE_P (operand_0))
11020 return get_typeid (operand_0);
11021 return build_typeid (operand_0);
11024 case VAR_DECL:
11025 if (!args)
11026 return t;
11027 /* Fall through */
11029 case PARM_DECL:
11031 tree r = tsubst_copy (t, args, complain, in_decl);
11033 if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
11034 /* If the original type was a reference, we'll be wrapped in
11035 the appropriate INDIRECT_REF. */
11036 r = convert_from_reference (r);
11037 return r;
11040 case VA_ARG_EXPR:
11041 return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
11042 tsubst_copy (TREE_TYPE (t), args, complain,
11043 in_decl));
11045 case OFFSETOF_EXPR:
11046 return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
11048 case TRAIT_EXPR:
11050 tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
11051 complain, in_decl);
11053 tree type2 = TRAIT_EXPR_TYPE2 (t);
11054 if (type2)
11055 type2 = tsubst_copy (type2, args, complain, in_decl);
11057 return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
11060 case STMT_EXPR:
11062 tree old_stmt_expr = cur_stmt_expr;
11063 tree stmt_expr = begin_stmt_expr ();
11065 cur_stmt_expr = stmt_expr;
11066 tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
11067 integral_constant_expression_p);
11068 stmt_expr = finish_stmt_expr (stmt_expr, false);
11069 cur_stmt_expr = old_stmt_expr;
11071 return stmt_expr;
11074 case CONST_DECL:
11075 t = tsubst_copy (t, args, complain, in_decl);
11076 /* As in finish_id_expression, we resolve enumeration constants
11077 to their underlying values. */
11078 if (TREE_CODE (t) == CONST_DECL)
11080 used_types_insert (TREE_TYPE (t));
11081 return DECL_INITIAL (t);
11083 return t;
11085 default:
11086 /* Handle Objective-C++ constructs, if appropriate. */
11088 tree subst
11089 = objcp_tsubst_copy_and_build (t, args, complain,
11090 in_decl, /*function_p=*/false);
11091 if (subst)
11092 return subst;
11094 return tsubst_copy (t, args, complain, in_decl);
11097 #undef RECUR
11100 /* Verify that the instantiated ARGS are valid. For type arguments,
11101 make sure that the type's linkage is ok. For non-type arguments,
11102 make sure they are constants if they are integral or enumerations.
11103 Emit an error under control of COMPLAIN, and return TRUE on error. */
11105 static bool
11106 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
11108 int ix, len = DECL_NTPARMS (tmpl);
11109 bool result = false;
11111 for (ix = 0; ix != len; ix++)
11113 tree t = TREE_VEC_ELT (args, ix);
11115 if (TYPE_P (t))
11117 /* [basic.link]: A name with no linkage (notably, the name
11118 of a class or enumeration declared in a local scope)
11119 shall not be used to declare an entity with linkage.
11120 This implies that names with no linkage cannot be used as
11121 template arguments. */
11122 tree nt = no_linkage_check (t, /*relaxed_p=*/false);
11124 if (nt)
11126 /* DR 488 makes use of a type with no linkage cause
11127 type deduction to fail. */
11128 if (complain & tf_error)
11130 if (TYPE_ANONYMOUS_P (nt))
11131 error ("%qT is/uses anonymous type", t);
11132 else
11133 error ("template argument for %qD uses local type %qT",
11134 tmpl, t);
11136 result = true;
11138 /* In order to avoid all sorts of complications, we do not
11139 allow variably-modified types as template arguments. */
11140 else if (variably_modified_type_p (t, NULL_TREE))
11142 if (complain & tf_error)
11143 error ("%qT is a variably modified type", t);
11144 result = true;
11147 /* A non-type argument of integral or enumerated type must be a
11148 constant. */
11149 else if (TREE_TYPE (t)
11150 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
11151 && !TREE_CONSTANT (t))
11153 if (complain & tf_error)
11154 error ("integral expression %qE is not constant", t);
11155 result = true;
11158 if (result && (complain & tf_error))
11159 error (" trying to instantiate %qD", tmpl);
11160 return result;
11163 /* Instantiate the indicated variable or function template TMPL with
11164 the template arguments in TARG_PTR. */
11166 tree
11167 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
11169 tree fndecl;
11170 tree gen_tmpl;
11171 tree spec;
11172 HOST_WIDE_INT saved_processing_template_decl;
11174 if (tmpl == error_mark_node)
11175 return error_mark_node;
11177 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
11179 /* If this function is a clone, handle it specially. */
11180 if (DECL_CLONED_FUNCTION_P (tmpl))
11182 tree spec;
11183 tree clone;
11185 spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
11186 complain);
11187 if (spec == error_mark_node)
11188 return error_mark_node;
11190 /* Look for the clone. */
11191 FOR_EACH_CLONE (clone, spec)
11192 if (DECL_NAME (clone) == DECL_NAME (tmpl))
11193 return clone;
11194 /* We should always have found the clone by now. */
11195 gcc_unreachable ();
11196 return NULL_TREE;
11199 /* Check to see if we already have this specialization. */
11200 spec = retrieve_specialization (tmpl, targ_ptr,
11201 /*class_specializations_p=*/false);
11202 if (spec != NULL_TREE)
11203 return spec;
11205 gen_tmpl = most_general_template (tmpl);
11206 if (tmpl != gen_tmpl)
11208 /* The TMPL is a partial instantiation. To get a full set of
11209 arguments we must add the arguments used to perform the
11210 partial instantiation. */
11211 targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
11212 targ_ptr);
11214 /* Check to see if we already have this specialization. */
11215 spec = retrieve_specialization (gen_tmpl, targ_ptr,
11216 /*class_specializations_p=*/false);
11217 if (spec != NULL_TREE)
11218 return spec;
11221 if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
11222 complain))
11223 return error_mark_node;
11225 /* We are building a FUNCTION_DECL, during which the access of its
11226 parameters and return types have to be checked. However this
11227 FUNCTION_DECL which is the desired context for access checking
11228 is not built yet. We solve this chicken-and-egg problem by
11229 deferring all checks until we have the FUNCTION_DECL. */
11230 push_deferring_access_checks (dk_deferred);
11232 /* Although PROCESSING_TEMPLATE_DECL may be true at this point
11233 (because, for example, we have encountered a non-dependent
11234 function call in the body of a template function and must now
11235 determine which of several overloaded functions will be called),
11236 within the instantiation itself we are not processing a
11237 template. */
11238 saved_processing_template_decl = processing_template_decl;
11239 processing_template_decl = 0;
11240 /* Substitute template parameters to obtain the specialization. */
11241 fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
11242 targ_ptr, complain, gen_tmpl);
11243 processing_template_decl = saved_processing_template_decl;
11244 if (fndecl == error_mark_node)
11245 return error_mark_node;
11247 /* Now we know the specialization, compute access previously
11248 deferred. */
11249 push_access_scope (fndecl);
11250 perform_deferred_access_checks ();
11251 pop_access_scope (fndecl);
11252 pop_deferring_access_checks ();
11254 /* The DECL_TI_TEMPLATE should always be the immediate parent
11255 template, not the most general template. */
11256 DECL_TI_TEMPLATE (fndecl) = tmpl;
11258 /* If we've just instantiated the main entry point for a function,
11259 instantiate all the alternate entry points as well. We do this
11260 by cloning the instantiation of the main entry point, not by
11261 instantiating the template clones. */
11262 if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
11263 clone_function_decl (fndecl, /*update_method_vec_p=*/0);
11265 return fndecl;
11268 /* The FN is a TEMPLATE_DECL for a function. The ARGS are the
11269 arguments that are being used when calling it. TARGS is a vector
11270 into which the deduced template arguments are placed.
11272 Return zero for success, 2 for an incomplete match that doesn't resolve
11273 all the types, and 1 for complete failure. An error message will be
11274 printed only for an incomplete match.
11276 If FN is a conversion operator, or we are trying to produce a specific
11277 specialization, RETURN_TYPE is the return type desired.
11279 The EXPLICIT_TARGS are explicit template arguments provided via a
11280 template-id.
11282 The parameter STRICT is one of:
11284 DEDUCE_CALL:
11285 We are deducing arguments for a function call, as in
11286 [temp.deduct.call].
11288 DEDUCE_CONV:
11289 We are deducing arguments for a conversion function, as in
11290 [temp.deduct.conv].
11292 DEDUCE_EXACT:
11293 We are deducing arguments when doing an explicit instantiation
11294 as in [temp.explicit], when determining an explicit specialization
11295 as in [temp.expl.spec], or when taking the address of a function
11296 template, as in [temp.deduct.funcaddr]. */
11299 fn_type_unification (tree fn,
11300 tree explicit_targs,
11301 tree targs,
11302 tree args,
11303 tree return_type,
11304 unification_kind_t strict,
11305 int flags)
11307 tree parms;
11308 tree fntype;
11309 int result;
11310 bool incomplete_argument_packs_p = false;
11312 gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
11314 fntype = TREE_TYPE (fn);
11315 if (explicit_targs)
11317 /* [temp.deduct]
11319 The specified template arguments must match the template
11320 parameters in kind (i.e., type, nontype, template), and there
11321 must not be more arguments than there are parameters;
11322 otherwise type deduction fails.
11324 Nontype arguments must match the types of the corresponding
11325 nontype template parameters, or must be convertible to the
11326 types of the corresponding nontype parameters as specified in
11327 _temp.arg.nontype_, otherwise type deduction fails.
11329 All references in the function type of the function template
11330 to the corresponding template parameters are replaced by the
11331 specified template argument values. If a substitution in a
11332 template parameter or in the function type of the function
11333 template results in an invalid type, type deduction fails. */
11334 tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
11335 int i, len = TREE_VEC_LENGTH (tparms);
11336 tree converted_args;
11337 bool incomplete = false;
11339 if (explicit_targs == error_mark_node)
11340 return 1;
11342 converted_args
11343 = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
11344 /*require_all_args=*/false,
11345 /*use_default_args=*/false));
11346 if (converted_args == error_mark_node)
11347 return 1;
11349 /* Substitute the explicit args into the function type. This is
11350 necessary so that, for instance, explicitly declared function
11351 arguments can match null pointed constants. If we were given
11352 an incomplete set of explicit args, we must not do semantic
11353 processing during substitution as we could create partial
11354 instantiations. */
11355 for (i = 0; i < len; i++)
11357 tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11358 bool parameter_pack = false;
11360 /* Dig out the actual parm. */
11361 if (TREE_CODE (parm) == TYPE_DECL
11362 || TREE_CODE (parm) == TEMPLATE_DECL)
11364 parm = TREE_TYPE (parm);
11365 parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
11367 else if (TREE_CODE (parm) == PARM_DECL)
11369 parm = DECL_INITIAL (parm);
11370 parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
11373 if (parameter_pack)
11375 int level, idx;
11376 tree targ;
11377 template_parm_level_and_index (parm, &level, &idx);
11379 /* Mark the argument pack as "incomplete". We could
11380 still deduce more arguments during unification. */
11381 targ = TMPL_ARG (converted_args, level, idx);
11382 if (targ)
11384 ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
11385 ARGUMENT_PACK_EXPLICIT_ARGS (targ)
11386 = ARGUMENT_PACK_ARGS (targ);
11389 /* We have some incomplete argument packs. */
11390 incomplete_argument_packs_p = true;
11394 if (incomplete_argument_packs_p)
11395 /* Any substitution is guaranteed to be incomplete if there
11396 are incomplete argument packs, because we can still deduce
11397 more arguments. */
11398 incomplete = 1;
11399 else
11400 incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
11402 processing_template_decl += incomplete;
11403 fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
11404 processing_template_decl -= incomplete;
11406 if (fntype == error_mark_node)
11407 return 1;
11409 /* Place the explicitly specified arguments in TARGS. */
11410 for (i = NUM_TMPL_ARGS (converted_args); i--;)
11411 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
11414 /* Never do unification on the 'this' parameter. */
11415 parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
11417 if (return_type)
11419 parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
11420 args = tree_cons (NULL_TREE, return_type, args);
11423 /* We allow incomplete unification without an error message here
11424 because the standard doesn't seem to explicitly prohibit it. Our
11425 callers must be ready to deal with unification failures in any
11426 event. */
11427 result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
11428 targs, parms, args, /*subr=*/0,
11429 strict, flags);
11431 if (result == 0 && incomplete_argument_packs_p)
11433 int i, len = NUM_TMPL_ARGS (targs);
11435 /* Clear the "incomplete" flags on all argument packs. */
11436 for (i = 0; i < len; i++)
11438 tree arg = TREE_VEC_ELT (targs, i);
11439 if (ARGUMENT_PACK_P (arg))
11441 ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
11442 ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
11447 if (result == 0)
11448 /* All is well so far. Now, check:
11450 [temp.deduct]
11452 When all template arguments have been deduced, all uses of
11453 template parameters in nondeduced contexts are replaced with
11454 the corresponding deduced argument values. If the
11455 substitution results in an invalid type, as described above,
11456 type deduction fails. */
11457 if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
11458 == error_mark_node)
11459 return 1;
11461 return result;
11464 /* Adjust types before performing type deduction, as described in
11465 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
11466 sections are symmetric. PARM is the type of a function parameter
11467 or the return type of the conversion function. ARG is the type of
11468 the argument passed to the call, or the type of the value
11469 initialized with the result of the conversion function.
11470 ARG_EXPR is the original argument expression, which may be null. */
11472 static int
11473 maybe_adjust_types_for_deduction (unification_kind_t strict,
11474 tree* parm,
11475 tree* arg,
11476 tree arg_expr)
11478 int result = 0;
11480 switch (strict)
11482 case DEDUCE_CALL:
11483 break;
11485 case DEDUCE_CONV:
11487 /* Swap PARM and ARG throughout the remainder of this
11488 function; the handling is precisely symmetric since PARM
11489 will initialize ARG rather than vice versa. */
11490 tree* temp = parm;
11491 parm = arg;
11492 arg = temp;
11493 break;
11496 case DEDUCE_EXACT:
11497 /* There is nothing to do in this case. */
11498 return 0;
11500 default:
11501 gcc_unreachable ();
11504 if (TREE_CODE (*parm) != REFERENCE_TYPE)
11506 /* [temp.deduct.call]
11508 If P is not a reference type:
11510 --If A is an array type, the pointer type produced by the
11511 array-to-pointer standard conversion (_conv.array_) is
11512 used in place of A for type deduction; otherwise,
11514 --If A is a function type, the pointer type produced by
11515 the function-to-pointer standard conversion
11516 (_conv.func_) is used in place of A for type deduction;
11517 otherwise,
11519 --If A is a cv-qualified type, the top level
11520 cv-qualifiers of A's type are ignored for type
11521 deduction. */
11522 if (TREE_CODE (*arg) == ARRAY_TYPE)
11523 *arg = build_pointer_type (TREE_TYPE (*arg));
11524 else if (TREE_CODE (*arg) == FUNCTION_TYPE)
11525 *arg = build_pointer_type (*arg);
11526 else
11527 *arg = TYPE_MAIN_VARIANT (*arg);
11530 /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
11531 of the form T&&, where T is a template parameter, and the argument
11532 is an lvalue, T is deduced as A& */
11533 if (TREE_CODE (*parm) == REFERENCE_TYPE
11534 && TYPE_REF_IS_RVALUE (*parm)
11535 && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
11536 && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
11537 && arg_expr && real_lvalue_p (arg_expr))
11538 *arg = build_reference_type (*arg);
11540 /* [temp.deduct.call]
11542 If P is a cv-qualified type, the top level cv-qualifiers
11543 of P's type are ignored for type deduction. If P is a
11544 reference type, the type referred to by P is used for
11545 type deduction. */
11546 *parm = TYPE_MAIN_VARIANT (*parm);
11547 if (TREE_CODE (*parm) == REFERENCE_TYPE)
11549 *parm = TREE_TYPE (*parm);
11550 result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
11553 /* DR 322. For conversion deduction, remove a reference type on parm
11554 too (which has been swapped into ARG). */
11555 if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
11556 *arg = TREE_TYPE (*arg);
11558 return result;
11561 /* Most parms like fn_type_unification.
11563 If SUBR is 1, we're being called recursively (to unify the
11564 arguments of a function or method parameter of a function
11565 template). */
11567 static int
11568 type_unification_real (tree tparms,
11569 tree targs,
11570 tree xparms,
11571 tree xargs,
11572 int subr,
11573 unification_kind_t strict,
11574 int flags)
11576 tree parm, arg, arg_expr;
11577 int i;
11578 int ntparms = TREE_VEC_LENGTH (tparms);
11579 int sub_strict;
11580 int saw_undeduced = 0;
11581 tree parms, args;
11583 gcc_assert (TREE_CODE (tparms) == TREE_VEC);
11584 gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
11585 gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
11586 gcc_assert (ntparms > 0);
11588 switch (strict)
11590 case DEDUCE_CALL:
11591 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
11592 | UNIFY_ALLOW_DERIVED);
11593 break;
11595 case DEDUCE_CONV:
11596 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
11597 break;
11599 case DEDUCE_EXACT:
11600 sub_strict = UNIFY_ALLOW_NONE;
11601 break;
11603 default:
11604 gcc_unreachable ();
11607 again:
11608 parms = xparms;
11609 args = xargs;
11611 while (parms && parms != void_list_node
11612 && args && args != void_list_node)
11614 if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
11615 break;
11617 parm = TREE_VALUE (parms);
11618 parms = TREE_CHAIN (parms);
11619 arg = TREE_VALUE (args);
11620 args = TREE_CHAIN (args);
11621 arg_expr = NULL;
11623 if (arg == error_mark_node)
11624 return 1;
11625 if (arg == unknown_type_node)
11626 /* We can't deduce anything from this, but we might get all the
11627 template args from other function args. */
11628 continue;
11630 /* Conversions will be performed on a function argument that
11631 corresponds with a function parameter that contains only
11632 non-deducible template parameters and explicitly specified
11633 template parameters. */
11634 if (!uses_template_parms (parm))
11636 tree type;
11638 if (!TYPE_P (arg))
11639 type = TREE_TYPE (arg);
11640 else
11641 type = arg;
11643 if (same_type_p (parm, type))
11644 continue;
11645 if (strict != DEDUCE_EXACT
11646 && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
11647 flags))
11648 continue;
11650 return 1;
11653 if (!TYPE_P (arg))
11655 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
11656 if (type_unknown_p (arg))
11658 /* [temp.deduct.type]
11660 A template-argument can be deduced from a pointer to
11661 function or pointer to member function argument if
11662 the set of overloaded functions does not contain
11663 function templates and at most one of a set of
11664 overloaded functions provides a unique match. */
11665 if (resolve_overloaded_unification
11666 (tparms, targs, parm, arg, strict, sub_strict))
11667 continue;
11669 return 1;
11671 arg_expr = arg;
11672 arg = unlowered_expr_type (arg);
11673 if (arg == error_mark_node)
11674 return 1;
11678 int arg_strict = sub_strict;
11680 if (!subr)
11681 arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
11682 arg_expr);
11684 if (unify (tparms, targs, parm, arg, arg_strict))
11685 return 1;
11690 if (parms
11691 && parms != void_list_node
11692 && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
11694 /* Unify the remaining arguments with the pack expansion type. */
11695 tree argvec;
11696 tree parmvec = make_tree_vec (1);
11697 int len = 0;
11698 tree t;
11700 /* Count the number of arguments that remain. */
11701 for (t = args; t && t != void_list_node; t = TREE_CHAIN (t))
11702 len++;
11704 /* Allocate a TREE_VEC and copy in all of the arguments */
11705 argvec = make_tree_vec (len);
11706 for (i = 0; args && args != void_list_node; args = TREE_CHAIN (args))
11708 TREE_VEC_ELT (argvec, i) = TREE_VALUE (args);
11709 ++i;
11712 /* Copy the parameter into parmvec. */
11713 TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
11714 if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
11715 /*call_args_p=*/true, /*subr=*/subr))
11716 return 1;
11718 /* Advance to the end of the list of parameters. */
11719 parms = TREE_CHAIN (parms);
11722 /* Fail if we've reached the end of the parm list, and more args
11723 are present, and the parm list isn't variadic. */
11724 if (args && args != void_list_node && parms == void_list_node)
11725 return 1;
11726 /* Fail if parms are left and they don't have default values. */
11727 if (parms && parms != void_list_node
11728 && TREE_PURPOSE (parms) == NULL_TREE)
11729 return 1;
11731 if (!subr)
11732 for (i = 0; i < ntparms; i++)
11733 if (!TREE_VEC_ELT (targs, i))
11735 tree tparm;
11737 if (TREE_VEC_ELT (tparms, i) == error_mark_node)
11738 continue;
11740 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11742 /* If this is an undeduced nontype parameter that depends on
11743 a type parameter, try another pass; its type may have been
11744 deduced from a later argument than the one from which
11745 this parameter can be deduced. */
11746 if (TREE_CODE (tparm) == PARM_DECL
11747 && uses_template_parms (TREE_TYPE (tparm))
11748 && !saw_undeduced++)
11749 goto again;
11751 /* Core issue #226 (C++0x) [temp.deduct]:
11753 If a template argument has not been deduced, its
11754 default template argument, if any, is used.
11756 When we are in C++98 mode, TREE_PURPOSE will either
11757 be NULL_TREE or ERROR_MARK_NODE, so we do not need
11758 to explicitly check cxx_dialect here. */
11759 if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
11761 tree arg = tsubst (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)),
11762 targs, tf_none, NULL_TREE);
11763 if (arg == error_mark_node)
11764 return 1;
11765 else
11767 TREE_VEC_ELT (targs, i) = arg;
11768 continue;
11772 /* If the type parameter is a parameter pack, then it will
11773 be deduced to an empty parameter pack. */
11774 if (template_parameter_pack_p (tparm))
11776 tree arg;
11778 if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
11780 arg = make_node (NONTYPE_ARGUMENT_PACK);
11781 TREE_TYPE (arg) = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
11782 TREE_CONSTANT (arg) = 1;
11784 else
11785 arg = make_node (TYPE_ARGUMENT_PACK);
11787 SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
11789 TREE_VEC_ELT (targs, i) = arg;
11790 continue;
11793 return 2;
11796 return 0;
11799 /* Subroutine of type_unification_real. Args are like the variables
11800 at the call site. ARG is an overloaded function (or template-id);
11801 we try deducing template args from each of the overloads, and if
11802 only one succeeds, we go with that. Modifies TARGS and returns
11803 true on success. */
11805 static bool
11806 resolve_overloaded_unification (tree tparms,
11807 tree targs,
11808 tree parm,
11809 tree arg,
11810 unification_kind_t strict,
11811 int sub_strict)
11813 tree tempargs = copy_node (targs);
11814 int good = 0;
11815 bool addr_p;
11817 if (TREE_CODE (arg) == ADDR_EXPR)
11819 arg = TREE_OPERAND (arg, 0);
11820 addr_p = true;
11822 else
11823 addr_p = false;
11825 if (TREE_CODE (arg) == COMPONENT_REF)
11826 /* Handle `&x' where `x' is some static or non-static member
11827 function name. */
11828 arg = TREE_OPERAND (arg, 1);
11830 if (TREE_CODE (arg) == OFFSET_REF)
11831 arg = TREE_OPERAND (arg, 1);
11833 /* Strip baselink information. */
11834 if (BASELINK_P (arg))
11835 arg = BASELINK_FUNCTIONS (arg);
11837 if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
11839 /* If we got some explicit template args, we need to plug them into
11840 the affected templates before we try to unify, in case the
11841 explicit args will completely resolve the templates in question. */
11843 tree expl_subargs = TREE_OPERAND (arg, 1);
11844 arg = TREE_OPERAND (arg, 0);
11846 for (; arg; arg = OVL_NEXT (arg))
11848 tree fn = OVL_CURRENT (arg);
11849 tree subargs, elem;
11851 if (TREE_CODE (fn) != TEMPLATE_DECL)
11852 continue;
11854 subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
11855 expl_subargs, /*check_ret=*/false);
11856 if (subargs)
11858 elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
11859 good += try_one_overload (tparms, targs, tempargs, parm,
11860 elem, strict, sub_strict, addr_p);
11864 else if (TREE_CODE (arg) != OVERLOAD
11865 && TREE_CODE (arg) != FUNCTION_DECL)
11866 /* If ARG is, for example, "(0, &f)" then its type will be unknown
11867 -- but the deduction does not succeed because the expression is
11868 not just the function on its own. */
11869 return false;
11870 else
11871 for (; arg; arg = OVL_NEXT (arg))
11872 good += try_one_overload (tparms, targs, tempargs, parm,
11873 TREE_TYPE (OVL_CURRENT (arg)),
11874 strict, sub_strict, addr_p);
11876 /* [temp.deduct.type] A template-argument can be deduced from a pointer
11877 to function or pointer to member function argument if the set of
11878 overloaded functions does not contain function templates and at most
11879 one of a set of overloaded functions provides a unique match.
11881 So if we found multiple possibilities, we return success but don't
11882 deduce anything. */
11884 if (good == 1)
11886 int i = TREE_VEC_LENGTH (targs);
11887 for (; i--; )
11888 if (TREE_VEC_ELT (tempargs, i))
11889 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
11891 if (good)
11892 return true;
11894 return false;
11897 /* Subroutine of resolve_overloaded_unification; does deduction for a single
11898 overload. Fills TARGS with any deduced arguments, or error_mark_node if
11899 different overloads deduce different arguments for a given parm.
11900 ADDR_P is true if the expression for which deduction is being
11901 performed was of the form "& fn" rather than simply "fn".
11903 Returns 1 on success. */
11905 static int
11906 try_one_overload (tree tparms,
11907 tree orig_targs,
11908 tree targs,
11909 tree parm,
11910 tree arg,
11911 unification_kind_t strict,
11912 int sub_strict,
11913 bool addr_p)
11915 int nargs;
11916 tree tempargs;
11917 int i;
11919 /* [temp.deduct.type] A template-argument can be deduced from a pointer
11920 to function or pointer to member function argument if the set of
11921 overloaded functions does not contain function templates and at most
11922 one of a set of overloaded functions provides a unique match.
11924 So if this is a template, just return success. */
11926 if (uses_template_parms (arg))
11927 return 1;
11929 if (TREE_CODE (arg) == METHOD_TYPE)
11930 arg = build_ptrmemfunc_type (build_pointer_type (arg));
11931 else if (addr_p)
11932 arg = build_pointer_type (arg);
11934 sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
11936 /* We don't copy orig_targs for this because if we have already deduced
11937 some template args from previous args, unify would complain when we
11938 try to deduce a template parameter for the same argument, even though
11939 there isn't really a conflict. */
11940 nargs = TREE_VEC_LENGTH (targs);
11941 tempargs = make_tree_vec (nargs);
11943 if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
11944 return 0;
11946 /* First make sure we didn't deduce anything that conflicts with
11947 explicitly specified args. */
11948 for (i = nargs; i--; )
11950 tree elt = TREE_VEC_ELT (tempargs, i);
11951 tree oldelt = TREE_VEC_ELT (orig_targs, i);
11953 if (!elt)
11954 /*NOP*/;
11955 else if (uses_template_parms (elt))
11956 /* Since we're unifying against ourselves, we will fill in
11957 template args used in the function parm list with our own
11958 template parms. Discard them. */
11959 TREE_VEC_ELT (tempargs, i) = NULL_TREE;
11960 else if (oldelt && !template_args_equal (oldelt, elt))
11961 return 0;
11964 for (i = nargs; i--; )
11966 tree elt = TREE_VEC_ELT (tempargs, i);
11968 if (elt)
11969 TREE_VEC_ELT (targs, i) = elt;
11972 return 1;
11975 /* PARM is a template class (perhaps with unbound template
11976 parameters). ARG is a fully instantiated type. If ARG can be
11977 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
11978 TARGS are as for unify. */
11980 static tree
11981 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
11983 tree copy_of_targs;
11985 if (!CLASSTYPE_TEMPLATE_INFO (arg)
11986 || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
11987 != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
11988 return NULL_TREE;
11990 /* We need to make a new template argument vector for the call to
11991 unify. If we used TARGS, we'd clutter it up with the result of
11992 the attempted unification, even if this class didn't work out.
11993 We also don't want to commit ourselves to all the unifications
11994 we've already done, since unification is supposed to be done on
11995 an argument-by-argument basis. In other words, consider the
11996 following pathological case:
11998 template <int I, int J, int K>
11999 struct S {};
12001 template <int I, int J>
12002 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
12004 template <int I, int J, int K>
12005 void f(S<I, J, K>, S<I, I, I>);
12007 void g() {
12008 S<0, 0, 0> s0;
12009 S<0, 1, 2> s2;
12011 f(s0, s2);
12014 Now, by the time we consider the unification involving `s2', we
12015 already know that we must have `f<0, 0, 0>'. But, even though
12016 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
12017 because there are two ways to unify base classes of S<0, 1, 2>
12018 with S<I, I, I>. If we kept the already deduced knowledge, we
12019 would reject the possibility I=1. */
12020 copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
12022 /* If unification failed, we're done. */
12023 if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
12024 CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
12025 return NULL_TREE;
12027 return arg;
12030 /* Given a template type PARM and a class type ARG, find the unique
12031 base type in ARG that is an instance of PARM. We do not examine
12032 ARG itself; only its base-classes. If there is not exactly one
12033 appropriate base class, return NULL_TREE. PARM may be the type of
12034 a partial specialization, as well as a plain template type. Used
12035 by unify. */
12037 static tree
12038 get_template_base (tree tparms, tree targs, tree parm, tree arg)
12040 tree rval = NULL_TREE;
12041 tree binfo;
12043 gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)));
12045 binfo = TYPE_BINFO (complete_type (arg));
12046 if (!binfo)
12047 /* The type could not be completed. */
12048 return NULL_TREE;
12050 /* Walk in inheritance graph order. The search order is not
12051 important, and this avoids multiple walks of virtual bases. */
12052 for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
12054 tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
12056 if (r)
12058 /* If there is more than one satisfactory baseclass, then:
12060 [temp.deduct.call]
12062 If they yield more than one possible deduced A, the type
12063 deduction fails.
12065 applies. */
12066 if (rval && !same_type_p (r, rval))
12067 return NULL_TREE;
12069 rval = r;
12073 return rval;
12076 /* Returns the level of DECL, which declares a template parameter. */
12078 static int
12079 template_decl_level (tree decl)
12081 switch (TREE_CODE (decl))
12083 case TYPE_DECL:
12084 case TEMPLATE_DECL:
12085 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
12087 case PARM_DECL:
12088 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
12090 default:
12091 gcc_unreachable ();
12093 return 0;
12096 /* Decide whether ARG can be unified with PARM, considering only the
12097 cv-qualifiers of each type, given STRICT as documented for unify.
12098 Returns nonzero iff the unification is OK on that basis. */
12100 static int
12101 check_cv_quals_for_unify (int strict, tree arg, tree parm)
12103 int arg_quals = cp_type_quals (arg);
12104 int parm_quals = cp_type_quals (parm);
12106 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12107 && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12109 /* Although a CVR qualifier is ignored when being applied to a
12110 substituted template parameter ([8.3.2]/1 for example), that
12111 does not apply during deduction [14.8.2.4]/1, (even though
12112 that is not explicitly mentioned, [14.8.2.4]/9 indicates
12113 this). Except when we're allowing additional CV qualifiers
12114 at the outer level [14.8.2.1]/3,1st bullet. */
12115 if ((TREE_CODE (arg) == REFERENCE_TYPE
12116 || TREE_CODE (arg) == FUNCTION_TYPE
12117 || TREE_CODE (arg) == METHOD_TYPE)
12118 && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
12119 return 0;
12121 if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
12122 && (parm_quals & TYPE_QUAL_RESTRICT))
12123 return 0;
12126 if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12127 && (arg_quals & parm_quals) != parm_quals)
12128 return 0;
12130 if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
12131 && (parm_quals & arg_quals) != arg_quals)
12132 return 0;
12134 return 1;
12137 /* Determines the LEVEL and INDEX for the template parameter PARM. */
12138 void
12139 template_parm_level_and_index (tree parm, int* level, int* index)
12141 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12142 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12143 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12145 *index = TEMPLATE_TYPE_IDX (parm);
12146 *level = TEMPLATE_TYPE_LEVEL (parm);
12148 else
12150 *index = TEMPLATE_PARM_IDX (parm);
12151 *level = TEMPLATE_PARM_LEVEL (parm);
12155 /* Unifies the remaining arguments in PACKED_ARGS with the pack
12156 expansion at the end of PACKED_PARMS. Returns 0 if the type
12157 deduction succeeds, 1 otherwise. STRICT is the same as in
12158 unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
12159 call argument list. We'll need to adjust the arguments to make them
12160 types. SUBR tells us if this is from a recursive call to
12161 type_unification_real. */
12163 unify_pack_expansion (tree tparms, tree targs, tree packed_parms,
12164 tree packed_args, int strict, bool call_args_p,
12165 bool subr)
12167 tree parm
12168 = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
12169 tree pattern = PACK_EXPANSION_PATTERN (parm);
12170 tree pack, packs = NULL_TREE;
12171 int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
12172 int len = TREE_VEC_LENGTH (packed_args);
12174 /* Determine the parameter packs we will be deducing from the
12175 pattern, and record their current deductions. */
12176 for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm);
12177 pack; pack = TREE_CHAIN (pack))
12179 tree parm_pack = TREE_VALUE (pack);
12180 int idx, level;
12182 /* Determine the index and level of this parameter pack. */
12183 template_parm_level_and_index (parm_pack, &level, &idx);
12185 /* Keep track of the parameter packs and their corresponding
12186 argument packs. */
12187 packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
12188 TREE_TYPE (packs) = make_tree_vec (len - start);
12191 /* Loop through all of the arguments that have not yet been
12192 unified and unify each with the pattern. */
12193 for (i = start; i < len; i++)
12195 tree parm = pattern;
12197 /* For each parameter pack, clear out the deduced value so that
12198 we can deduce it again. */
12199 for (pack = packs; pack; pack = TREE_CHAIN (pack))
12201 int idx, level;
12202 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12204 TMPL_ARG (targs, level, idx) = NULL_TREE;
12207 /* Unify the pattern with the current argument. */
12209 tree arg = TREE_VEC_ELT (packed_args, i);
12210 int arg_strict = strict;
12211 bool skip_arg_p = false;
12213 if (call_args_p)
12215 int sub_strict;
12217 /* This mirrors what we do in type_unification_real. */
12218 switch (strict)
12220 case DEDUCE_CALL:
12221 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL
12222 | UNIFY_ALLOW_MORE_CV_QUAL
12223 | UNIFY_ALLOW_DERIVED);
12224 break;
12226 case DEDUCE_CONV:
12227 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12228 break;
12230 case DEDUCE_EXACT:
12231 sub_strict = UNIFY_ALLOW_NONE;
12232 break;
12234 default:
12235 gcc_unreachable ();
12238 if (!TYPE_P (arg))
12240 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12241 if (type_unknown_p (arg))
12243 /* [temp.deduct.type] A template-argument can be
12244 deduced from a pointer to function or pointer
12245 to member function argument if the set of
12246 overloaded functions does not contain function
12247 templates and at most one of a set of
12248 overloaded functions provides a unique
12249 match. */
12251 if (resolve_overloaded_unification
12252 (tparms, targs, parm, arg, strict, sub_strict)
12253 != 0)
12254 return 1;
12255 skip_arg_p = true;
12258 if (!skip_arg_p)
12260 arg = TREE_TYPE (arg);
12261 if (arg == error_mark_node)
12262 return 1;
12266 arg_strict = sub_strict;
12268 if (!subr)
12269 arg_strict |=
12270 maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
12273 if (!skip_arg_p)
12275 if (unify (tparms, targs, parm, arg, arg_strict))
12276 return 1;
12280 /* For each parameter pack, collect the deduced value. */
12281 for (pack = packs; pack; pack = TREE_CHAIN (pack))
12283 int idx, level;
12284 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12286 TREE_VEC_ELT (TREE_TYPE (pack), i - start) =
12287 TMPL_ARG (targs, level, idx);
12291 /* Verify that the results of unification with the parameter packs
12292 produce results consistent with what we've seen before, and make
12293 the deduced argument packs available. */
12294 for (pack = packs; pack; pack = TREE_CHAIN (pack))
12296 tree old_pack = TREE_VALUE (pack);
12297 tree new_args = TREE_TYPE (pack);
12299 if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
12301 /* Prepend the explicit arguments onto NEW_ARGS. */
12302 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12303 tree old_args = new_args;
12304 int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
12305 int len = explicit_len + TREE_VEC_LENGTH (old_args);
12307 /* Copy the explicit arguments. */
12308 new_args = make_tree_vec (len);
12309 for (i = 0; i < explicit_len; i++)
12310 TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
12312 /* Copy the deduced arguments. */
12313 for (; i < len; i++)
12314 TREE_VEC_ELT (new_args, i) =
12315 TREE_VEC_ELT (old_args, i - explicit_len);
12318 if (!old_pack)
12320 tree result;
12321 int idx, level;
12323 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12325 /* Build the deduced *_ARGUMENT_PACK. */
12326 if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
12328 result = make_node (NONTYPE_ARGUMENT_PACK);
12329 TREE_TYPE (result) =
12330 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
12331 TREE_CONSTANT (result) = 1;
12333 else
12334 result = make_node (TYPE_ARGUMENT_PACK);
12336 SET_ARGUMENT_PACK_ARGS (result, new_args);
12338 /* Note the deduced argument packs for this parameter
12339 pack. */
12340 TMPL_ARG (targs, level, idx) = result;
12342 else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
12343 && (ARGUMENT_PACK_ARGS (old_pack)
12344 == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
12346 /* We only had the explicitly-provided arguments before, but
12347 now we have a complete set of arguments. */
12348 int idx, level;
12349 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12350 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12352 /* Keep the original deduced argument pack. */
12353 TMPL_ARG (targs, level, idx) = old_pack;
12355 SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
12356 ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
12357 ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
12359 else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
12360 new_args))
12361 /* Inconsistent unification of this parameter pack. */
12362 return 1;
12363 else
12365 int idx, level;
12367 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12369 /* Keep the original deduced argument pack. */
12370 TMPL_ARG (targs, level, idx) = old_pack;
12374 return 0;
12377 /* Deduce the value of template parameters. TPARMS is the (innermost)
12378 set of template parameters to a template. TARGS is the bindings
12379 for those template parameters, as determined thus far; TARGS may
12380 include template arguments for outer levels of template parameters
12381 as well. PARM is a parameter to a template function, or a
12382 subcomponent of that parameter; ARG is the corresponding argument.
12383 This function attempts to match PARM with ARG in a manner
12384 consistent with the existing assignments in TARGS. If more values
12385 are deduced, then TARGS is updated.
12387 Returns 0 if the type deduction succeeds, 1 otherwise. The
12388 parameter STRICT is a bitwise or of the following flags:
12390 UNIFY_ALLOW_NONE:
12391 Require an exact match between PARM and ARG.
12392 UNIFY_ALLOW_MORE_CV_QUAL:
12393 Allow the deduced ARG to be more cv-qualified (by qualification
12394 conversion) than ARG.
12395 UNIFY_ALLOW_LESS_CV_QUAL:
12396 Allow the deduced ARG to be less cv-qualified than ARG.
12397 UNIFY_ALLOW_DERIVED:
12398 Allow the deduced ARG to be a template base class of ARG,
12399 or a pointer to a template base class of the type pointed to by
12400 ARG.
12401 UNIFY_ALLOW_INTEGER:
12402 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
12403 case for more information.
12404 UNIFY_ALLOW_OUTER_LEVEL:
12405 This is the outermost level of a deduction. Used to determine validity
12406 of qualification conversions. A valid qualification conversion must
12407 have const qualified pointers leading up to the inner type which
12408 requires additional CV quals, except at the outer level, where const
12409 is not required [conv.qual]. It would be normal to set this flag in
12410 addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
12411 UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
12412 This is the outermost level of a deduction, and PARM can be more CV
12413 qualified at this point.
12414 UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
12415 This is the outermost level of a deduction, and PARM can be less CV
12416 qualified at this point. */
12418 static int
12419 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
12421 int idx;
12422 tree targ;
12423 tree tparm;
12424 int strict_in = strict;
12426 /* I don't think this will do the right thing with respect to types.
12427 But the only case I've seen it in so far has been array bounds, where
12428 signedness is the only information lost, and I think that will be
12429 okay. */
12430 while (TREE_CODE (parm) == NOP_EXPR)
12431 parm = TREE_OPERAND (parm, 0);
12433 if (arg == error_mark_node)
12434 return 1;
12435 if (arg == unknown_type_node)
12436 /* We can't deduce anything from this, but we might get all the
12437 template args from other function args. */
12438 return 0;
12440 /* If PARM uses template parameters, then we can't bail out here,
12441 even if ARG == PARM, since we won't record unifications for the
12442 template parameters. We might need them if we're trying to
12443 figure out which of two things is more specialized. */
12444 if (arg == parm && !uses_template_parms (parm))
12445 return 0;
12447 /* Immediately reject some pairs that won't unify because of
12448 cv-qualification mismatches. */
12449 if (TREE_CODE (arg) == TREE_CODE (parm)
12450 && TYPE_P (arg)
12451 /* It is the elements of the array which hold the cv quals of an array
12452 type, and the elements might be template type parms. We'll check
12453 when we recurse. */
12454 && TREE_CODE (arg) != ARRAY_TYPE
12455 /* We check the cv-qualifiers when unifying with template type
12456 parameters below. We want to allow ARG `const T' to unify with
12457 PARM `T' for example, when computing which of two templates
12458 is more specialized, for example. */
12459 && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
12460 && !check_cv_quals_for_unify (strict_in, arg, parm))
12461 return 1;
12463 if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
12464 && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
12465 strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
12466 strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
12467 strict &= ~UNIFY_ALLOW_DERIVED;
12468 strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
12469 strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
12471 switch (TREE_CODE (parm))
12473 case TYPENAME_TYPE:
12474 case SCOPE_REF:
12475 case UNBOUND_CLASS_TEMPLATE:
12476 /* In a type which contains a nested-name-specifier, template
12477 argument values cannot be deduced for template parameters used
12478 within the nested-name-specifier. */
12479 return 0;
12481 case TEMPLATE_TYPE_PARM:
12482 case TEMPLATE_TEMPLATE_PARM:
12483 case BOUND_TEMPLATE_TEMPLATE_PARM:
12484 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
12485 if (tparm == error_mark_node)
12486 return 1;
12488 if (TEMPLATE_TYPE_LEVEL (parm)
12489 != template_decl_level (tparm))
12490 /* The PARM is not one we're trying to unify. Just check
12491 to see if it matches ARG. */
12492 return (TREE_CODE (arg) == TREE_CODE (parm)
12493 && same_type_p (parm, arg)) ? 0 : 1;
12494 idx = TEMPLATE_TYPE_IDX (parm);
12495 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
12496 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
12498 /* Check for mixed types and values. */
12499 if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12500 && TREE_CODE (tparm) != TYPE_DECL)
12501 || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12502 && TREE_CODE (tparm) != TEMPLATE_DECL))
12503 return 1;
12505 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12507 /* ARG must be constructed from a template class or a template
12508 template parameter. */
12509 if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
12510 && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
12511 return 1;
12514 tree parmvec = TYPE_TI_ARGS (parm);
12515 tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
12516 tree argtmplvec
12517 = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
12518 int i;
12520 /* The resolution to DR150 makes clear that default
12521 arguments for an N-argument may not be used to bind T
12522 to a template template parameter with fewer than N
12523 parameters. It is not safe to permit the binding of
12524 default arguments as an extension, as that may change
12525 the meaning of a conforming program. Consider:
12527 struct Dense { static const unsigned int dim = 1; };
12529 template <template <typename> class View,
12530 typename Block>
12531 void operator+(float, View<Block> const&);
12533 template <typename Block,
12534 unsigned int Dim = Block::dim>
12535 struct Lvalue_proxy { operator float() const; };
12537 void
12538 test_1d (void) {
12539 Lvalue_proxy<Dense> p;
12540 float b;
12541 b + p;
12544 Here, if Lvalue_proxy is permitted to bind to View, then
12545 the global operator+ will be used; if they are not, the
12546 Lvalue_proxy will be converted to float. */
12547 if (coerce_template_parms (argtmplvec, parmvec,
12548 TYPE_TI_TEMPLATE (parm),
12549 tf_none,
12550 /*require_all_args=*/true,
12551 /*use_default_args=*/false)
12552 == error_mark_node)
12553 return 1;
12555 /* Deduce arguments T, i from TT<T> or TT<i>.
12556 We check each element of PARMVEC and ARGVEC individually
12557 rather than the whole TREE_VEC since they can have
12558 different number of elements. */
12560 for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
12562 if (unify (tparms, targs,
12563 TREE_VEC_ELT (parmvec, i),
12564 TREE_VEC_ELT (argvec, i),
12565 UNIFY_ALLOW_NONE))
12566 return 1;
12569 arg = TYPE_TI_TEMPLATE (arg);
12571 /* Fall through to deduce template name. */
12574 if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12575 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12577 /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>. */
12579 /* Simple cases: Value already set, does match or doesn't. */
12580 if (targ != NULL_TREE && template_args_equal (targ, arg))
12581 return 0;
12582 else if (targ)
12583 return 1;
12585 else
12587 /* If PARM is `const T' and ARG is only `int', we don't have
12588 a match unless we are allowing additional qualification.
12589 If ARG is `const int' and PARM is just `T' that's OK;
12590 that binds `const int' to `T'. */
12591 if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
12592 arg, parm))
12593 return 1;
12595 /* Consider the case where ARG is `const volatile int' and
12596 PARM is `const T'. Then, T should be `volatile int'. */
12597 arg = cp_build_qualified_type_real
12598 (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
12599 if (arg == error_mark_node)
12600 return 1;
12602 /* Simple cases: Value already set, does match or doesn't. */
12603 if (targ != NULL_TREE && same_type_p (targ, arg))
12604 return 0;
12605 else if (targ)
12606 return 1;
12608 /* Make sure that ARG is not a variable-sized array. (Note
12609 that were talking about variable-sized arrays (like
12610 `int[n]'), rather than arrays of unknown size (like
12611 `int[]').) We'll get very confused by such a type since
12612 the bound of the array will not be computable in an
12613 instantiation. Besides, such types are not allowed in
12614 ISO C++, so we can do as we please here. */
12615 if (variably_modified_type_p (arg, NULL_TREE))
12616 return 1;
12619 /* If ARG is a parameter pack or an expansion, we cannot unify
12620 against it unless PARM is also a parameter pack. */
12621 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
12622 && !template_parameter_pack_p (parm))
12623 return 1;
12625 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
12626 return 0;
12628 case TEMPLATE_PARM_INDEX:
12629 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
12630 if (tparm == error_mark_node)
12631 return 1;
12633 if (TEMPLATE_PARM_LEVEL (parm)
12634 != template_decl_level (tparm))
12635 /* The PARM is not one we're trying to unify. Just check
12636 to see if it matches ARG. */
12637 return !(TREE_CODE (arg) == TREE_CODE (parm)
12638 && cp_tree_equal (parm, arg));
12640 idx = TEMPLATE_PARM_IDX (parm);
12641 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
12643 if (targ)
12644 return !cp_tree_equal (targ, arg);
12646 /* [temp.deduct.type] If, in the declaration of a function template
12647 with a non-type template-parameter, the non-type
12648 template-parameter is used in an expression in the function
12649 parameter-list and, if the corresponding template-argument is
12650 deduced, the template-argument type shall match the type of the
12651 template-parameter exactly, except that a template-argument
12652 deduced from an array bound may be of any integral type.
12653 The non-type parameter might use already deduced type parameters. */
12654 tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
12655 if (!TREE_TYPE (arg))
12656 /* Template-parameter dependent expression. Just accept it for now.
12657 It will later be processed in convert_template_argument. */
12659 else if (same_type_p (TREE_TYPE (arg), tparm))
12660 /* OK */;
12661 else if ((strict & UNIFY_ALLOW_INTEGER)
12662 && (TREE_CODE (tparm) == INTEGER_TYPE
12663 || TREE_CODE (tparm) == BOOLEAN_TYPE))
12664 /* Convert the ARG to the type of PARM; the deduced non-type
12665 template argument must exactly match the types of the
12666 corresponding parameter. */
12667 arg = fold (build_nop (TREE_TYPE (parm), arg));
12668 else if (uses_template_parms (tparm))
12669 /* We haven't deduced the type of this parameter yet. Try again
12670 later. */
12671 return 0;
12672 else
12673 return 1;
12675 /* If ARG is a parameter pack or an expansion, we cannot unify
12676 against it unless PARM is also a parameter pack. */
12677 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
12678 && !TEMPLATE_PARM_PARAMETER_PACK (parm))
12679 return 1;
12681 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
12682 return 0;
12684 case PTRMEM_CST:
12686 /* A pointer-to-member constant can be unified only with
12687 another constant. */
12688 if (TREE_CODE (arg) != PTRMEM_CST)
12689 return 1;
12691 /* Just unify the class member. It would be useless (and possibly
12692 wrong, depending on the strict flags) to unify also
12693 PTRMEM_CST_CLASS, because we want to be sure that both parm and
12694 arg refer to the same variable, even if through different
12695 classes. For instance:
12697 struct A { int x; };
12698 struct B : A { };
12700 Unification of &A::x and &B::x must succeed. */
12701 return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
12702 PTRMEM_CST_MEMBER (arg), strict);
12705 case POINTER_TYPE:
12707 if (TREE_CODE (arg) != POINTER_TYPE)
12708 return 1;
12710 /* [temp.deduct.call]
12712 A can be another pointer or pointer to member type that can
12713 be converted to the deduced A via a qualification
12714 conversion (_conv.qual_).
12716 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
12717 This will allow for additional cv-qualification of the
12718 pointed-to types if appropriate. */
12720 if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
12721 /* The derived-to-base conversion only persists through one
12722 level of pointers. */
12723 strict |= (strict_in & UNIFY_ALLOW_DERIVED);
12725 return unify (tparms, targs, TREE_TYPE (parm),
12726 TREE_TYPE (arg), strict);
12729 case REFERENCE_TYPE:
12730 if (TREE_CODE (arg) != REFERENCE_TYPE)
12731 return 1;
12732 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
12733 strict & UNIFY_ALLOW_MORE_CV_QUAL);
12735 case ARRAY_TYPE:
12736 if (TREE_CODE (arg) != ARRAY_TYPE)
12737 return 1;
12738 if ((TYPE_DOMAIN (parm) == NULL_TREE)
12739 != (TYPE_DOMAIN (arg) == NULL_TREE))
12740 return 1;
12741 if (TYPE_DOMAIN (parm) != NULL_TREE)
12743 tree parm_max;
12744 tree arg_max;
12745 bool parm_cst;
12746 bool arg_cst;
12748 /* Our representation of array types uses "N - 1" as the
12749 TYPE_MAX_VALUE for an array with "N" elements, if "N" is
12750 not an integer constant. We cannot unify arbitrarily
12751 complex expressions, so we eliminate the MINUS_EXPRs
12752 here. */
12753 parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
12754 parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
12755 if (!parm_cst)
12757 gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
12758 parm_max = TREE_OPERAND (parm_max, 0);
12760 arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
12761 arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
12762 if (!arg_cst)
12764 /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
12765 trying to unify the type of a variable with the type
12766 of a template parameter. For example:
12768 template <unsigned int N>
12769 void f (char (&) [N]);
12770 int g();
12771 void h(int i) {
12772 char a[g(i)];
12773 f(a);
12776 Here, the type of the ARG will be "int [g(i)]", and
12777 may be a SAVE_EXPR, etc. */
12778 if (TREE_CODE (arg_max) != MINUS_EXPR)
12779 return 1;
12780 arg_max = TREE_OPERAND (arg_max, 0);
12783 /* If only one of the bounds used a MINUS_EXPR, compensate
12784 by adding one to the other bound. */
12785 if (parm_cst && !arg_cst)
12786 parm_max = fold_build2 (PLUS_EXPR,
12787 integer_type_node,
12788 parm_max,
12789 integer_one_node);
12790 else if (arg_cst && !parm_cst)
12791 arg_max = fold_build2 (PLUS_EXPR,
12792 integer_type_node,
12793 arg_max,
12794 integer_one_node);
12796 if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
12797 return 1;
12799 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
12800 strict & UNIFY_ALLOW_MORE_CV_QUAL);
12802 case REAL_TYPE:
12803 case COMPLEX_TYPE:
12804 case VECTOR_TYPE:
12805 case INTEGER_TYPE:
12806 case BOOLEAN_TYPE:
12807 case ENUMERAL_TYPE:
12808 case VOID_TYPE:
12809 if (TREE_CODE (arg) != TREE_CODE (parm))
12810 return 1;
12812 /* We have already checked cv-qualification at the top of the
12813 function. */
12814 if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
12815 return 1;
12817 /* As far as unification is concerned, this wins. Later checks
12818 will invalidate it if necessary. */
12819 return 0;
12821 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
12822 /* Type INTEGER_CST can come from ordinary constant template args. */
12823 case INTEGER_CST:
12824 while (TREE_CODE (arg) == NOP_EXPR)
12825 arg = TREE_OPERAND (arg, 0);
12827 if (TREE_CODE (arg) != INTEGER_CST)
12828 return 1;
12829 return !tree_int_cst_equal (parm, arg);
12831 case TREE_VEC:
12833 int i;
12834 if (TREE_CODE (arg) != TREE_VEC)
12835 return 1;
12836 if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
12837 return 1;
12838 for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
12839 if (unify (tparms, targs,
12840 TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
12841 UNIFY_ALLOW_NONE))
12842 return 1;
12843 return 0;
12846 case RECORD_TYPE:
12847 case UNION_TYPE:
12848 if (TREE_CODE (arg) != TREE_CODE (parm))
12849 return 1;
12851 if (TYPE_PTRMEMFUNC_P (parm))
12853 if (!TYPE_PTRMEMFUNC_P (arg))
12854 return 1;
12856 return unify (tparms, targs,
12857 TYPE_PTRMEMFUNC_FN_TYPE (parm),
12858 TYPE_PTRMEMFUNC_FN_TYPE (arg),
12859 strict);
12862 if (CLASSTYPE_TEMPLATE_INFO (parm))
12864 tree t = NULL_TREE;
12866 if (strict_in & UNIFY_ALLOW_DERIVED)
12868 /* First, we try to unify the PARM and ARG directly. */
12869 t = try_class_unification (tparms, targs,
12870 parm, arg);
12872 if (!t)
12874 /* Fallback to the special case allowed in
12875 [temp.deduct.call]:
12877 If P is a class, and P has the form
12878 template-id, then A can be a derived class of
12879 the deduced A. Likewise, if P is a pointer to
12880 a class of the form template-id, A can be a
12881 pointer to a derived class pointed to by the
12882 deduced A. */
12883 t = get_template_base (tparms, targs, parm, arg);
12885 if (!t)
12886 return 1;
12889 else if (CLASSTYPE_TEMPLATE_INFO (arg)
12890 && (CLASSTYPE_TI_TEMPLATE (parm)
12891 == CLASSTYPE_TI_TEMPLATE (arg)))
12892 /* Perhaps PARM is something like S<U> and ARG is S<int>.
12893 Then, we should unify `int' and `U'. */
12894 t = arg;
12895 else
12896 /* There's no chance of unification succeeding. */
12897 return 1;
12899 return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
12900 CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
12902 else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
12903 return 1;
12904 return 0;
12906 case METHOD_TYPE:
12907 case FUNCTION_TYPE:
12908 if (TREE_CODE (arg) != TREE_CODE (parm))
12909 return 1;
12911 /* CV qualifications for methods can never be deduced, they must
12912 match exactly. We need to check them explicitly here,
12913 because type_unification_real treats them as any other
12914 cvqualified parameter. */
12915 if (TREE_CODE (parm) == METHOD_TYPE
12916 && (!check_cv_quals_for_unify
12917 (UNIFY_ALLOW_NONE,
12918 TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
12919 TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
12920 return 1;
12922 if (unify (tparms, targs, TREE_TYPE (parm),
12923 TREE_TYPE (arg), UNIFY_ALLOW_NONE))
12924 return 1;
12925 return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
12926 TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
12927 LOOKUP_NORMAL);
12929 case OFFSET_TYPE:
12930 /* Unify a pointer to member with a pointer to member function, which
12931 deduces the type of the member as a function type. */
12932 if (TYPE_PTRMEMFUNC_P (arg))
12934 tree method_type;
12935 tree fntype;
12936 cp_cv_quals cv_quals;
12938 /* Check top-level cv qualifiers */
12939 if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
12940 return 1;
12942 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
12943 TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
12944 return 1;
12946 /* Determine the type of the function we are unifying against. */
12947 method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
12948 fntype =
12949 build_function_type (TREE_TYPE (method_type),
12950 TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
12952 /* Extract the cv-qualifiers of the member function from the
12953 implicit object parameter and place them on the function
12954 type to be restored later. */
12955 cv_quals =
12956 cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
12957 fntype = build_qualified_type (fntype, cv_quals);
12958 return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
12961 if (TREE_CODE (arg) != OFFSET_TYPE)
12962 return 1;
12963 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
12964 TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
12965 return 1;
12966 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
12967 strict);
12969 case CONST_DECL:
12970 if (DECL_TEMPLATE_PARM_P (parm))
12971 return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
12972 if (arg != integral_constant_value (parm))
12973 return 1;
12974 return 0;
12976 case FIELD_DECL:
12977 case TEMPLATE_DECL:
12978 /* Matched cases are handled by the ARG == PARM test above. */
12979 return 1;
12981 case TYPE_ARGUMENT_PACK:
12982 case NONTYPE_ARGUMENT_PACK:
12984 tree packed_parms = ARGUMENT_PACK_ARGS (parm);
12985 tree packed_args = ARGUMENT_PACK_ARGS (arg);
12986 int i, len = TREE_VEC_LENGTH (packed_parms);
12987 int argslen = TREE_VEC_LENGTH (packed_args);
12988 int parm_variadic_p = 0;
12990 /* Check if the parameters end in a pack, making them variadic. */
12991 if (len > 0
12992 && PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, len - 1)))
12993 parm_variadic_p = 1;
12995 /* If we don't have enough arguments to satisfy the parameters
12996 (not counting the pack expression at the end), or we have
12997 too many arguments for a parameter list that doesn't end in
12998 a pack expression, we can't unify. */
12999 if (argslen < (len - parm_variadic_p)
13000 || (argslen > len && !parm_variadic_p))
13001 return 1;
13003 /* Unify all of the parameters that precede the (optional)
13004 pack expression. */
13005 for (i = 0; i < len - parm_variadic_p; ++i)
13007 if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
13008 TREE_VEC_ELT (packed_args, i), strict))
13009 return 1;
13012 if (parm_variadic_p)
13013 return unify_pack_expansion (tparms, targs,
13014 packed_parms, packed_args,
13015 strict, /*call_args_p=*/false,
13016 /*subr=*/false);
13017 return 0;
13020 break;
13022 case TYPEOF_TYPE:
13023 case DECLTYPE_TYPE:
13024 /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
13025 nodes. */
13026 return 0;
13028 default:
13029 gcc_assert (EXPR_P (parm));
13031 /* We must be looking at an expression. This can happen with
13032 something like:
13034 template <int I>
13035 void foo(S<I>, S<I + 2>);
13037 This is a "nondeduced context":
13039 [deduct.type]
13041 The nondeduced contexts are:
13043 --A type that is a template-id in which one or more of
13044 the template-arguments is an expression that references
13045 a template-parameter.
13047 In these cases, we assume deduction succeeded, but don't
13048 actually infer any unifications. */
13050 if (!uses_template_parms (parm)
13051 && !template_args_equal (parm, arg))
13052 return 1;
13053 else
13054 return 0;
13058 /* Note that DECL can be defined in this translation unit, if
13059 required. */
13061 static void
13062 mark_definable (tree decl)
13064 tree clone;
13065 DECL_NOT_REALLY_EXTERN (decl) = 1;
13066 FOR_EACH_CLONE (clone, decl)
13067 DECL_NOT_REALLY_EXTERN (clone) = 1;
13070 /* Called if RESULT is explicitly instantiated, or is a member of an
13071 explicitly instantiated class. */
13073 void
13074 mark_decl_instantiated (tree result, int extern_p)
13076 SET_DECL_EXPLICIT_INSTANTIATION (result);
13078 /* If this entity has already been written out, it's too late to
13079 make any modifications. */
13080 if (TREE_ASM_WRITTEN (result))
13081 return;
13083 if (TREE_CODE (result) != FUNCTION_DECL)
13084 /* The TREE_PUBLIC flag for function declarations will have been
13085 set correctly by tsubst. */
13086 TREE_PUBLIC (result) = 1;
13088 /* This might have been set by an earlier implicit instantiation. */
13089 DECL_COMDAT (result) = 0;
13091 if (extern_p)
13092 DECL_NOT_REALLY_EXTERN (result) = 0;
13093 else
13095 mark_definable (result);
13096 /* Always make artificials weak. */
13097 if (DECL_ARTIFICIAL (result) && flag_weak)
13098 comdat_linkage (result);
13099 /* For WIN32 we also want to put explicit instantiations in
13100 linkonce sections. */
13101 else if (TREE_PUBLIC (result))
13102 maybe_make_one_only (result);
13105 /* If EXTERN_P, then this function will not be emitted -- unless
13106 followed by an explicit instantiation, at which point its linkage
13107 will be adjusted. If !EXTERN_P, then this function will be
13108 emitted here. In neither circumstance do we want
13109 import_export_decl to adjust the linkage. */
13110 DECL_INTERFACE_KNOWN (result) = 1;
13113 /* Given two function templates PAT1 and PAT2, return:
13115 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
13116 -1 if PAT2 is more specialized than PAT1.
13117 0 if neither is more specialized.
13119 LEN indicates the number of parameters we should consider
13120 (defaulted parameters should not be considered).
13122 The 1998 std underspecified function template partial ordering, and
13123 DR214 addresses the issue. We take pairs of arguments, one from
13124 each of the templates, and deduce them against each other. One of
13125 the templates will be more specialized if all the *other*
13126 template's arguments deduce against its arguments and at least one
13127 of its arguments *does* *not* deduce against the other template's
13128 corresponding argument. Deduction is done as for class templates.
13129 The arguments used in deduction have reference and top level cv
13130 qualifiers removed. Iff both arguments were originally reference
13131 types *and* deduction succeeds in both directions, the template
13132 with the more cv-qualified argument wins for that pairing (if
13133 neither is more cv-qualified, they both are equal). Unlike regular
13134 deduction, after all the arguments have been deduced in this way,
13135 we do *not* verify the deduced template argument values can be
13136 substituted into non-deduced contexts, nor do we have to verify
13137 that all template arguments have been deduced. */
13140 more_specialized_fn (tree pat1, tree pat2, int len)
13142 tree decl1 = DECL_TEMPLATE_RESULT (pat1);
13143 tree decl2 = DECL_TEMPLATE_RESULT (pat2);
13144 tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
13145 tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
13146 tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
13147 tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
13148 tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
13149 tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
13150 int better1 = 0;
13151 int better2 = 0;
13153 /* Remove the this parameter from non-static member functions. If
13154 one is a non-static member function and the other is not a static
13155 member function, remove the first parameter from that function
13156 also. This situation occurs for operator functions where we
13157 locate both a member function (with this pointer) and non-member
13158 operator (with explicit first operand). */
13159 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
13161 len--; /* LEN is the number of significant arguments for DECL1 */
13162 args1 = TREE_CHAIN (args1);
13163 if (!DECL_STATIC_FUNCTION_P (decl2))
13164 args2 = TREE_CHAIN (args2);
13166 else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
13168 args2 = TREE_CHAIN (args2);
13169 if (!DECL_STATIC_FUNCTION_P (decl1))
13171 len--;
13172 args1 = TREE_CHAIN (args1);
13176 /* If only one is a conversion operator, they are unordered. */
13177 if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
13178 return 0;
13180 /* Consider the return type for a conversion function */
13181 if (DECL_CONV_FN_P (decl1))
13183 args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
13184 args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
13185 len++;
13188 processing_template_decl++;
13190 while (len--)
13192 tree arg1 = TREE_VALUE (args1);
13193 tree arg2 = TREE_VALUE (args2);
13194 int deduce1, deduce2;
13195 int quals1 = -1;
13196 int quals2 = -1;
13198 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13199 && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13201 /* When both arguments are pack expansions, we need only
13202 unify the patterns themselves. */
13203 arg1 = PACK_EXPANSION_PATTERN (arg1);
13204 arg2 = PACK_EXPANSION_PATTERN (arg2);
13206 /* This is the last comparison we need to do. */
13207 len = 0;
13210 if (TREE_CODE (arg1) == REFERENCE_TYPE)
13212 arg1 = TREE_TYPE (arg1);
13213 quals1 = cp_type_quals (arg1);
13216 if (TREE_CODE (arg2) == REFERENCE_TYPE)
13218 arg2 = TREE_TYPE (arg2);
13219 quals2 = cp_type_quals (arg2);
13222 if ((quals1 < 0) != (quals2 < 0))
13224 /* Only of the args is a reference, see if we should apply
13225 array/function pointer decay to it. This is not part of
13226 DR214, but is, IMHO, consistent with the deduction rules
13227 for the function call itself, and with our earlier
13228 implementation of the underspecified partial ordering
13229 rules. (nathan). */
13230 if (quals1 >= 0)
13232 switch (TREE_CODE (arg1))
13234 case ARRAY_TYPE:
13235 arg1 = TREE_TYPE (arg1);
13236 /* FALLTHROUGH. */
13237 case FUNCTION_TYPE:
13238 arg1 = build_pointer_type (arg1);
13239 break;
13241 default:
13242 break;
13245 else
13247 switch (TREE_CODE (arg2))
13249 case ARRAY_TYPE:
13250 arg2 = TREE_TYPE (arg2);
13251 /* FALLTHROUGH. */
13252 case FUNCTION_TYPE:
13253 arg2 = build_pointer_type (arg2);
13254 break;
13256 default:
13257 break;
13262 arg1 = TYPE_MAIN_VARIANT (arg1);
13263 arg2 = TYPE_MAIN_VARIANT (arg2);
13265 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
13267 int i, len2 = list_length (args2);
13268 tree parmvec = make_tree_vec (1);
13269 tree argvec = make_tree_vec (len2);
13270 tree ta = args2;
13272 /* Setup the parameter vector, which contains only ARG1. */
13273 TREE_VEC_ELT (parmvec, 0) = arg1;
13275 /* Setup the argument vector, which contains the remaining
13276 arguments. */
13277 for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
13278 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13280 deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec,
13281 argvec, UNIFY_ALLOW_NONE,
13282 /*call_args_p=*/false,
13283 /*subr=*/0);
13285 /* We cannot deduce in the other direction, because ARG1 is
13286 a pack expansion but ARG2 is not. */
13287 deduce2 = 0;
13289 else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13291 int i, len1 = list_length (args1);
13292 tree parmvec = make_tree_vec (1);
13293 tree argvec = make_tree_vec (len1);
13294 tree ta = args1;
13296 /* Setup the parameter vector, which contains only ARG1. */
13297 TREE_VEC_ELT (parmvec, 0) = arg2;
13299 /* Setup the argument vector, which contains the remaining
13300 arguments. */
13301 for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
13302 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13304 deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec,
13305 argvec, UNIFY_ALLOW_NONE,
13306 /*call_args_p=*/false,
13307 /*subr=*/0);
13309 /* We cannot deduce in the other direction, because ARG2 is
13310 a pack expansion but ARG1 is not.*/
13311 deduce1 = 0;
13314 else
13316 /* The normal case, where neither argument is a pack
13317 expansion. */
13318 deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
13319 deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
13322 if (!deduce1)
13323 better2 = -1;
13324 if (!deduce2)
13325 better1 = -1;
13326 if (better1 < 0 && better2 < 0)
13327 /* We've failed to deduce something in either direction.
13328 These must be unordered. */
13329 break;
13331 if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
13333 /* Deduces in both directions, see if quals can
13334 disambiguate. Pretend the worse one failed to deduce. */
13335 if ((quals1 & quals2) == quals2)
13336 deduce1 = 0;
13337 if ((quals1 & quals2) == quals1)
13338 deduce2 = 0;
13340 if (deduce1 && !deduce2 && !better2)
13341 better2 = 1;
13342 if (deduce2 && !deduce1 && !better1)
13343 better1 = 1;
13345 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13346 || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13347 /* We have already processed all of the arguments in our
13348 handing of the pack expansion type. */
13349 len = 0;
13351 args1 = TREE_CHAIN (args1);
13352 args2 = TREE_CHAIN (args2);
13355 processing_template_decl--;
13357 /* All things being equal, if the next argument is a pack expansion
13358 for one function but not for the other, prefer the
13359 non-variadic function. */
13360 if ((better1 > 0) - (better2 > 0) == 0
13361 && args1 && TREE_VALUE (args1)
13362 && args2 && TREE_VALUE (args2))
13364 if (TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION)
13365 return TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION ? 0 : -1;
13366 else if (TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION)
13367 return 1;
13370 return (better1 > 0) - (better2 > 0);
13373 /* Determine which of two partial specializations is more specialized.
13375 PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
13376 to the first partial specialization. The TREE_VALUE is the
13377 innermost set of template parameters for the partial
13378 specialization. PAT2 is similar, but for the second template.
13380 Return 1 if the first partial specialization is more specialized;
13381 -1 if the second is more specialized; 0 if neither is more
13382 specialized.
13384 See [temp.class.order] for information about determining which of
13385 two templates is more specialized. */
13387 static int
13388 more_specialized_class (tree pat1, tree pat2)
13390 tree targs;
13391 tree tmpl1, tmpl2;
13392 int winner = 0;
13393 bool any_deductions = false;
13395 tmpl1 = TREE_TYPE (pat1);
13396 tmpl2 = TREE_TYPE (pat2);
13398 /* Just like what happens for functions, if we are ordering between
13399 different class template specializations, we may encounter dependent
13400 types in the arguments, and we need our dependency check functions
13401 to behave correctly. */
13402 ++processing_template_decl;
13403 targs = get_class_bindings (TREE_VALUE (pat1),
13404 CLASSTYPE_TI_ARGS (tmpl1),
13405 CLASSTYPE_TI_ARGS (tmpl2));
13406 if (targs)
13408 --winner;
13409 any_deductions = true;
13412 targs = get_class_bindings (TREE_VALUE (pat2),
13413 CLASSTYPE_TI_ARGS (tmpl2),
13414 CLASSTYPE_TI_ARGS (tmpl1));
13415 if (targs)
13417 ++winner;
13418 any_deductions = true;
13420 --processing_template_decl;
13422 /* In the case of a tie where at least one of the class templates
13423 has a parameter pack at the end, the template with the most
13424 non-packed parameters wins. */
13425 if (winner == 0
13426 && any_deductions
13427 && (template_args_variadic_p (TREE_PURPOSE (pat1))
13428 || template_args_variadic_p (TREE_PURPOSE (pat2))))
13430 tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
13431 tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
13432 int len1 = TREE_VEC_LENGTH (args1);
13433 int len2 = TREE_VEC_LENGTH (args2);
13435 /* We don't count the pack expansion at the end. */
13436 if (template_args_variadic_p (TREE_PURPOSE (pat1)))
13437 --len1;
13438 if (template_args_variadic_p (TREE_PURPOSE (pat2)))
13439 --len2;
13441 if (len1 > len2)
13442 return 1;
13443 else if (len1 < len2)
13444 return -1;
13447 return winner;
13450 /* Return the template arguments that will produce the function signature
13451 DECL from the function template FN, with the explicit template
13452 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is true, the return type must
13453 also match. Return NULL_TREE if no satisfactory arguments could be
13454 found. */
13456 static tree
13457 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
13459 int ntparms = DECL_NTPARMS (fn);
13460 tree targs = make_tree_vec (ntparms);
13461 tree decl_type;
13462 tree decl_arg_types;
13464 /* Substitute the explicit template arguments into the type of DECL.
13465 The call to fn_type_unification will handle substitution into the
13466 FN. */
13467 decl_type = TREE_TYPE (decl);
13468 if (explicit_args && uses_template_parms (decl_type))
13470 tree tmpl;
13471 tree converted_args;
13473 if (DECL_TEMPLATE_INFO (decl))
13474 tmpl = DECL_TI_TEMPLATE (decl);
13475 else
13476 /* We can get here for some invalid specializations. */
13477 return NULL_TREE;
13479 converted_args
13480 = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
13481 explicit_args, NULL_TREE,
13482 tf_none,
13483 /*require_all_args=*/false,
13484 /*use_default_args=*/false);
13485 if (converted_args == error_mark_node)
13486 return NULL_TREE;
13488 decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
13489 if (decl_type == error_mark_node)
13490 return NULL_TREE;
13493 /* Never do unification on the 'this' parameter. */
13494 decl_arg_types = skip_artificial_parms_for (decl,
13495 TYPE_ARG_TYPES (decl_type));
13497 if (fn_type_unification (fn, explicit_args, targs,
13498 decl_arg_types,
13499 (check_rettype || DECL_CONV_FN_P (fn)
13500 ? TREE_TYPE (decl_type) : NULL_TREE),
13501 DEDUCE_EXACT, LOOKUP_NORMAL))
13502 return NULL_TREE;
13504 return targs;
13507 /* Return the innermost template arguments that, when applied to a
13508 template specialization whose innermost template parameters are
13509 TPARMS, and whose specialization arguments are PARMS, yield the
13510 ARGS.
13512 For example, suppose we have:
13514 template <class T, class U> struct S {};
13515 template <class T> struct S<T*, int> {};
13517 Then, suppose we want to get `S<double*, int>'. The TPARMS will be
13518 {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
13519 int}. The resulting vector will be {double}, indicating that `T'
13520 is bound to `double'. */
13522 static tree
13523 get_class_bindings (tree tparms, tree spec_args, tree args)
13525 int i, ntparms = TREE_VEC_LENGTH (tparms);
13526 tree deduced_args;
13527 tree innermost_deduced_args;
13529 innermost_deduced_args = make_tree_vec (ntparms);
13530 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
13532 deduced_args = copy_node (args);
13533 SET_TMPL_ARGS_LEVEL (deduced_args,
13534 TMPL_ARGS_DEPTH (deduced_args),
13535 innermost_deduced_args);
13537 else
13538 deduced_args = innermost_deduced_args;
13540 if (unify (tparms, deduced_args,
13541 INNERMOST_TEMPLATE_ARGS (spec_args),
13542 INNERMOST_TEMPLATE_ARGS (args),
13543 UNIFY_ALLOW_NONE))
13544 return NULL_TREE;
13546 for (i = 0; i < ntparms; ++i)
13547 if (! TREE_VEC_ELT (innermost_deduced_args, i))
13548 return NULL_TREE;
13550 /* Verify that nondeduced template arguments agree with the type
13551 obtained from argument deduction.
13553 For example:
13555 struct A { typedef int X; };
13556 template <class T, class U> struct C {};
13557 template <class T> struct C<T, typename T::X> {};
13559 Then with the instantiation `C<A, int>', we can deduce that
13560 `T' is `A' but unify () does not check whether `typename T::X'
13561 is `int'. */
13562 spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
13563 if (spec_args == error_mark_node
13564 /* We only need to check the innermost arguments; the other
13565 arguments will always agree. */
13566 || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
13567 INNERMOST_TEMPLATE_ARGS (args)))
13568 return NULL_TREE;
13570 return deduced_args;
13573 /* TEMPLATES is a TREE_LIST. Each TREE_VALUE is a TEMPLATE_DECL.
13574 Return the TREE_LIST node with the most specialized template, if
13575 any. If there is no most specialized template, the error_mark_node
13576 is returned.
13578 Note that this function does not look at, or modify, the
13579 TREE_PURPOSE or TREE_TYPE of any of the nodes. Since the node
13580 returned is one of the elements of INSTANTIATIONS, callers may
13581 store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
13582 and retrieve it from the value returned. */
13584 tree
13585 most_specialized_instantiation (tree templates)
13587 tree fn, champ;
13589 ++processing_template_decl;
13591 champ = templates;
13592 for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
13594 int fate = 0;
13596 if (get_bindings (TREE_VALUE (champ),
13597 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
13598 NULL_TREE, /*check_ret=*/false))
13599 fate--;
13601 if (get_bindings (TREE_VALUE (fn),
13602 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
13603 NULL_TREE, /*check_ret=*/false))
13604 fate++;
13606 if (fate == -1)
13607 champ = fn;
13608 else if (!fate)
13610 /* Equally specialized, move to next function. If there
13611 is no next function, nothing's most specialized. */
13612 fn = TREE_CHAIN (fn);
13613 champ = fn;
13614 if (!fn)
13615 break;
13619 if (champ)
13620 /* Now verify that champ is better than everything earlier in the
13621 instantiation list. */
13622 for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
13623 if (get_bindings (TREE_VALUE (champ),
13624 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
13625 NULL_TREE, /*check_ret=*/false)
13626 || !get_bindings (TREE_VALUE (fn),
13627 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
13628 NULL_TREE, /*check_ret=*/false))
13630 champ = NULL_TREE;
13631 break;
13634 processing_template_decl--;
13636 if (!champ)
13637 return error_mark_node;
13639 return champ;
13642 /* If DECL is a specialization of some template, return the most
13643 general such template. Otherwise, returns NULL_TREE.
13645 For example, given:
13647 template <class T> struct S { template <class U> void f(U); };
13649 if TMPL is `template <class U> void S<int>::f(U)' this will return
13650 the full template. This function will not trace past partial
13651 specializations, however. For example, given in addition:
13653 template <class T> struct S<T*> { template <class U> void f(U); };
13655 if TMPL is `template <class U> void S<int*>::f(U)' this will return
13656 `template <class T> template <class U> S<T*>::f(U)'. */
13658 tree
13659 most_general_template (tree decl)
13661 /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
13662 an immediate specialization. */
13663 if (TREE_CODE (decl) == FUNCTION_DECL)
13665 if (DECL_TEMPLATE_INFO (decl)) {
13666 decl = DECL_TI_TEMPLATE (decl);
13668 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
13669 template friend. */
13670 if (TREE_CODE (decl) != TEMPLATE_DECL)
13671 return NULL_TREE;
13672 } else
13673 return NULL_TREE;
13676 /* Look for more and more general templates. */
13677 while (DECL_TEMPLATE_INFO (decl))
13679 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
13680 (See cp-tree.h for details.) */
13681 if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
13682 break;
13684 if (CLASS_TYPE_P (TREE_TYPE (decl))
13685 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
13686 break;
13688 /* Stop if we run into an explicitly specialized class template. */
13689 if (!DECL_NAMESPACE_SCOPE_P (decl)
13690 && DECL_CONTEXT (decl)
13691 && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
13692 break;
13694 decl = DECL_TI_TEMPLATE (decl);
13697 return decl;
13700 /* Return the most specialized of the class template partial
13701 specializations of TMPL which can produce TYPE, a specialization of
13702 TMPL. The value returned is actually a TREE_LIST; the TREE_TYPE is
13703 a _TYPE node corresponding to the partial specialization, while the
13704 TREE_PURPOSE is the set of template arguments that must be
13705 substituted into the TREE_TYPE in order to generate TYPE.
13707 If the choice of partial specialization is ambiguous, a diagnostic
13708 is issued, and the error_mark_node is returned. If there are no
13709 partial specializations of TMPL matching TYPE, then NULL_TREE is
13710 returned. */
13712 static tree
13713 most_specialized_class (tree type, tree tmpl)
13715 tree list = NULL_TREE;
13716 tree t;
13717 tree champ;
13718 int fate;
13719 bool ambiguous_p;
13720 tree args;
13721 tree outer_args = NULL_TREE;
13723 tmpl = most_general_template (tmpl);
13724 args = CLASSTYPE_TI_ARGS (type);
13726 /* For determining which partial specialization to use, only the
13727 innermost args are interesting. */
13728 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
13730 outer_args = strip_innermost_template_args (args, 1);
13731 args = INNERMOST_TEMPLATE_ARGS (args);
13734 for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
13736 tree partial_spec_args;
13737 tree spec_args;
13738 tree parms = TREE_VALUE (t);
13740 partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
13741 if (outer_args)
13743 int i;
13745 ++processing_template_decl;
13747 /* Discard the outer levels of args, and then substitute in the
13748 template args from the enclosing class. */
13749 partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
13750 partial_spec_args = tsubst_template_args
13751 (partial_spec_args, outer_args, tf_none, NULL_TREE);
13753 /* PARMS already refers to just the innermost parms, but the
13754 template parms in partial_spec_args had their levels lowered
13755 by tsubst, so we need to do the same for the parm list. We
13756 can't just tsubst the TREE_VEC itself, as tsubst wants to
13757 treat a TREE_VEC as an argument vector. */
13758 parms = copy_node (parms);
13759 for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
13760 TREE_VEC_ELT (parms, i) =
13761 tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
13763 --processing_template_decl;
13765 spec_args = get_class_bindings (parms,
13766 partial_spec_args,
13767 args);
13768 if (spec_args)
13770 if (outer_args)
13771 spec_args = add_to_template_args (outer_args, spec_args);
13772 list = tree_cons (spec_args, TREE_VALUE (t), list);
13773 TREE_TYPE (list) = TREE_TYPE (t);
13777 if (! list)
13778 return NULL_TREE;
13780 ambiguous_p = false;
13781 t = list;
13782 champ = t;
13783 t = TREE_CHAIN (t);
13784 for (; t; t = TREE_CHAIN (t))
13786 fate = more_specialized_class (champ, t);
13787 if (fate == 1)
13789 else
13791 if (fate == 0)
13793 t = TREE_CHAIN (t);
13794 if (! t)
13796 ambiguous_p = true;
13797 break;
13800 champ = t;
13804 if (!ambiguous_p)
13805 for (t = list; t && t != champ; t = TREE_CHAIN (t))
13807 fate = more_specialized_class (champ, t);
13808 if (fate != 1)
13810 ambiguous_p = true;
13811 break;
13815 if (ambiguous_p)
13817 const char *str = "candidates are:";
13818 error ("ambiguous class template instantiation for %q#T", type);
13819 for (t = list; t; t = TREE_CHAIN (t))
13821 error ("%s %+#T", str, TREE_TYPE (t));
13822 str = " ";
13824 return error_mark_node;
13827 return champ;
13830 /* Explicitly instantiate DECL. */
13832 void
13833 do_decl_instantiation (tree decl, tree storage)
13835 tree result = NULL_TREE;
13836 int extern_p = 0;
13838 if (!decl || decl == error_mark_node)
13839 /* An error occurred, for which grokdeclarator has already issued
13840 an appropriate message. */
13841 return;
13842 else if (! DECL_LANG_SPECIFIC (decl))
13844 error ("explicit instantiation of non-template %q#D", decl);
13845 return;
13847 else if (TREE_CODE (decl) == VAR_DECL)
13849 /* There is an asymmetry here in the way VAR_DECLs and
13850 FUNCTION_DECLs are handled by grokdeclarator. In the case of
13851 the latter, the DECL we get back will be marked as a
13852 template instantiation, and the appropriate
13853 DECL_TEMPLATE_INFO will be set up. This does not happen for
13854 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
13855 should handle VAR_DECLs as it currently handles
13856 FUNCTION_DECLs. */
13857 result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
13858 if (!result || TREE_CODE (result) != VAR_DECL)
13860 error ("no matching template for %qD found", decl);
13861 return;
13863 if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
13865 error ("type %qT for explicit instantiation %qD does not match "
13866 "declared type %qT", TREE_TYPE (result), decl,
13867 TREE_TYPE (decl));
13868 return;
13871 else if (TREE_CODE (decl) != FUNCTION_DECL)
13873 error ("explicit instantiation of %q#D", decl);
13874 return;
13876 else
13877 result = decl;
13879 /* Check for various error cases. Note that if the explicit
13880 instantiation is valid the RESULT will currently be marked as an
13881 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
13882 until we get here. */
13884 if (DECL_TEMPLATE_SPECIALIZATION (result))
13886 /* DR 259 [temp.spec].
13888 Both an explicit instantiation and a declaration of an explicit
13889 specialization shall not appear in a program unless the explicit
13890 instantiation follows a declaration of the explicit specialization.
13892 For a given set of template parameters, if an explicit
13893 instantiation of a template appears after a declaration of an
13894 explicit specialization for that template, the explicit
13895 instantiation has no effect. */
13896 return;
13898 else if (DECL_EXPLICIT_INSTANTIATION (result))
13900 /* [temp.spec]
13902 No program shall explicitly instantiate any template more
13903 than once.
13905 We check DECL_NOT_REALLY_EXTERN so as not to complain when
13906 the first instantiation was `extern' and the second is not,
13907 and EXTERN_P for the opposite case. */
13908 if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
13909 pedwarn ("duplicate explicit instantiation of %q#D", result);
13910 /* If an "extern" explicit instantiation follows an ordinary
13911 explicit instantiation, the template is instantiated. */
13912 if (extern_p)
13913 return;
13915 else if (!DECL_IMPLICIT_INSTANTIATION (result))
13917 error ("no matching template for %qD found", result);
13918 return;
13920 else if (!DECL_TEMPLATE_INFO (result))
13922 pedwarn ("explicit instantiation of non-template %q#D", result);
13923 return;
13926 if (storage == NULL_TREE)
13928 else if (storage == ridpointers[(int) RID_EXTERN])
13930 if (pedantic && !in_system_header)
13931 pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
13932 "instantiations");
13933 extern_p = 1;
13935 else
13936 error ("storage class %qD applied to template instantiation", storage);
13938 check_explicit_instantiation_namespace (result);
13939 mark_decl_instantiated (result, extern_p);
13940 if (! extern_p)
13941 instantiate_decl (result, /*defer_ok=*/1,
13942 /*expl_inst_class_mem_p=*/false);
13945 static void
13946 mark_class_instantiated (tree t, int extern_p)
13948 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
13949 SET_CLASSTYPE_INTERFACE_KNOWN (t);
13950 CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
13951 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
13952 if (! extern_p)
13954 CLASSTYPE_DEBUG_REQUESTED (t) = 1;
13955 rest_of_type_compilation (t, 1);
13959 /* Called from do_type_instantiation through binding_table_foreach to
13960 do recursive instantiation for the type bound in ENTRY. */
13961 static void
13962 bt_instantiate_type_proc (binding_entry entry, void *data)
13964 tree storage = *(tree *) data;
13966 if (IS_AGGR_TYPE (entry->type)
13967 && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
13968 do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
13971 /* Called from do_type_instantiation to instantiate a member
13972 (a member function or a static member variable) of an
13973 explicitly instantiated class template. */
13974 static void
13975 instantiate_class_member (tree decl, int extern_p)
13977 mark_decl_instantiated (decl, extern_p);
13978 if (! extern_p)
13979 instantiate_decl (decl, /*defer_ok=*/1,
13980 /*expl_inst_class_mem_p=*/true);
13983 /* Perform an explicit instantiation of template class T. STORAGE, if
13984 non-null, is the RID for extern, inline or static. COMPLAIN is
13985 nonzero if this is called from the parser, zero if called recursively,
13986 since the standard is unclear (as detailed below). */
13988 void
13989 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
13991 int extern_p = 0;
13992 int nomem_p = 0;
13993 int static_p = 0;
13994 int previous_instantiation_extern_p = 0;
13996 if (TREE_CODE (t) == TYPE_DECL)
13997 t = TREE_TYPE (t);
13999 if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
14001 error ("explicit instantiation of non-template type %qT", t);
14002 return;
14005 complete_type (t);
14007 if (!COMPLETE_TYPE_P (t))
14009 if (complain & tf_error)
14010 error ("explicit instantiation of %q#T before definition of template",
14012 return;
14015 if (storage != NULL_TREE)
14017 if (pedantic && !in_system_header)
14018 pedwarn("ISO C++ forbids the use of %qE on explicit instantiations",
14019 storage);
14021 if (storage == ridpointers[(int) RID_INLINE])
14022 nomem_p = 1;
14023 else if (storage == ridpointers[(int) RID_EXTERN])
14024 extern_p = 1;
14025 else if (storage == ridpointers[(int) RID_STATIC])
14026 static_p = 1;
14027 else
14029 error ("storage class %qD applied to template instantiation",
14030 storage);
14031 extern_p = 0;
14035 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
14037 /* DR 259 [temp.spec].
14039 Both an explicit instantiation and a declaration of an explicit
14040 specialization shall not appear in a program unless the explicit
14041 instantiation follows a declaration of the explicit specialization.
14043 For a given set of template parameters, if an explicit
14044 instantiation of a template appears after a declaration of an
14045 explicit specialization for that template, the explicit
14046 instantiation has no effect. */
14047 return;
14049 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
14051 /* [temp.spec]
14053 No program shall explicitly instantiate any template more
14054 than once.
14056 If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
14057 instantiation was `extern'. If EXTERN_P then the second is.
14058 These cases are OK. */
14059 previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
14061 if (!previous_instantiation_extern_p && !extern_p
14062 && (complain & tf_error))
14063 pedwarn ("duplicate explicit instantiation of %q#T", t);
14065 /* If we've already instantiated the template, just return now. */
14066 if (!CLASSTYPE_INTERFACE_ONLY (t))
14067 return;
14070 check_explicit_instantiation_namespace (TYPE_NAME (t));
14071 mark_class_instantiated (t, extern_p);
14073 if (nomem_p)
14074 return;
14077 tree tmp;
14079 /* In contrast to implicit instantiation, where only the
14080 declarations, and not the definitions, of members are
14081 instantiated, we have here:
14083 [temp.explicit]
14085 The explicit instantiation of a class template specialization
14086 implies the instantiation of all of its members not
14087 previously explicitly specialized in the translation unit
14088 containing the explicit instantiation.
14090 Of course, we can't instantiate member template classes, since
14091 we don't have any arguments for them. Note that the standard
14092 is unclear on whether the instantiation of the members are
14093 *explicit* instantiations or not. However, the most natural
14094 interpretation is that it should be an explicit instantiation. */
14096 if (! static_p)
14097 for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
14098 if (TREE_CODE (tmp) == FUNCTION_DECL
14099 && DECL_TEMPLATE_INSTANTIATION (tmp))
14100 instantiate_class_member (tmp, extern_p);
14102 for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
14103 if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
14104 instantiate_class_member (tmp, extern_p);
14106 if (CLASSTYPE_NESTED_UTDS (t))
14107 binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
14108 bt_instantiate_type_proc, &storage);
14112 /* Given a function DECL, which is a specialization of TMPL, modify
14113 DECL to be a re-instantiation of TMPL with the same template
14114 arguments. TMPL should be the template into which tsubst'ing
14115 should occur for DECL, not the most general template.
14117 One reason for doing this is a scenario like this:
14119 template <class T>
14120 void f(const T&, int i);
14122 void g() { f(3, 7); }
14124 template <class T>
14125 void f(const T& t, const int i) { }
14127 Note that when the template is first instantiated, with
14128 instantiate_template, the resulting DECL will have no name for the
14129 first parameter, and the wrong type for the second. So, when we go
14130 to instantiate the DECL, we regenerate it. */
14132 static void
14133 regenerate_decl_from_template (tree decl, tree tmpl)
14135 /* The arguments used to instantiate DECL, from the most general
14136 template. */
14137 tree args;
14138 tree code_pattern;
14140 args = DECL_TI_ARGS (decl);
14141 code_pattern = DECL_TEMPLATE_RESULT (tmpl);
14143 /* Make sure that we can see identifiers, and compute access
14144 correctly. */
14145 push_access_scope (decl);
14147 if (TREE_CODE (decl) == FUNCTION_DECL)
14149 tree decl_parm;
14150 tree pattern_parm;
14151 tree specs;
14152 int args_depth;
14153 int parms_depth;
14155 args_depth = TMPL_ARGS_DEPTH (args);
14156 parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
14157 if (args_depth > parms_depth)
14158 args = get_innermost_template_args (args, parms_depth);
14160 specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
14161 args, tf_error, NULL_TREE);
14162 if (specs)
14163 TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
14164 specs);
14166 /* Merge parameter declarations. */
14167 decl_parm = skip_artificial_parms_for (decl,
14168 DECL_ARGUMENTS (decl));
14169 pattern_parm
14170 = skip_artificial_parms_for (code_pattern,
14171 DECL_ARGUMENTS (code_pattern));
14172 while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
14174 tree parm_type;
14175 tree attributes;
14177 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14178 DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
14179 parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
14180 NULL_TREE);
14181 parm_type = type_decays_to (parm_type);
14182 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14183 TREE_TYPE (decl_parm) = parm_type;
14184 attributes = DECL_ATTRIBUTES (pattern_parm);
14185 if (DECL_ATTRIBUTES (decl_parm) != attributes)
14187 DECL_ATTRIBUTES (decl_parm) = attributes;
14188 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14190 decl_parm = TREE_CHAIN (decl_parm);
14191 pattern_parm = TREE_CHAIN (pattern_parm);
14193 /* Merge any parameters that match with the function parameter
14194 pack. */
14195 if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
14197 int i, len;
14198 tree expanded_types;
14199 /* Expand the TYPE_PACK_EXPANSION that provides the types for
14200 the parameters in this function parameter pack. */
14201 expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm),
14202 args, tf_error, NULL_TREE);
14203 len = TREE_VEC_LENGTH (expanded_types);
14204 for (i = 0; i < len; i++)
14206 tree parm_type;
14207 tree attributes;
14209 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14210 /* Rename the parameter to include the index. */
14211 DECL_NAME (decl_parm) =
14212 make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
14213 parm_type = TREE_VEC_ELT (expanded_types, i);
14214 parm_type = type_decays_to (parm_type);
14215 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14216 TREE_TYPE (decl_parm) = parm_type;
14217 attributes = DECL_ATTRIBUTES (pattern_parm);
14218 if (DECL_ATTRIBUTES (decl_parm) != attributes)
14220 DECL_ATTRIBUTES (decl_parm) = attributes;
14221 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14223 decl_parm = TREE_CHAIN (decl_parm);
14226 /* Merge additional specifiers from the CODE_PATTERN. */
14227 if (DECL_DECLARED_INLINE_P (code_pattern)
14228 && !DECL_DECLARED_INLINE_P (decl))
14229 DECL_DECLARED_INLINE_P (decl) = 1;
14230 if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
14231 DECL_INLINE (decl) = 1;
14233 else if (TREE_CODE (decl) == VAR_DECL)
14234 DECL_INITIAL (decl) =
14235 tsubst_expr (DECL_INITIAL (code_pattern), args,
14236 tf_error, DECL_TI_TEMPLATE (decl),
14237 /*integral_constant_expression_p=*/false);
14238 else
14239 gcc_unreachable ();
14241 pop_access_scope (decl);
14244 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
14245 substituted to get DECL. */
14247 tree
14248 template_for_substitution (tree decl)
14250 tree tmpl = DECL_TI_TEMPLATE (decl);
14252 /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
14253 for the instantiation. This is not always the most general
14254 template. Consider, for example:
14256 template <class T>
14257 struct S { template <class U> void f();
14258 template <> void f<int>(); };
14260 and an instantiation of S<double>::f<int>. We want TD to be the
14261 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
14262 while (/* An instantiation cannot have a definition, so we need a
14263 more general template. */
14264 DECL_TEMPLATE_INSTANTIATION (tmpl)
14265 /* We must also deal with friend templates. Given:
14267 template <class T> struct S {
14268 template <class U> friend void f() {};
14271 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
14272 so far as the language is concerned, but that's still
14273 where we get the pattern for the instantiation from. On
14274 other hand, if the definition comes outside the class, say:
14276 template <class T> struct S {
14277 template <class U> friend void f();
14279 template <class U> friend void f() {}
14281 we don't need to look any further. That's what the check for
14282 DECL_INITIAL is for. */
14283 || (TREE_CODE (decl) == FUNCTION_DECL
14284 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
14285 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
14287 /* The present template, TD, should not be a definition. If it
14288 were a definition, we should be using it! Note that we
14289 cannot restructure the loop to just keep going until we find
14290 a template with a definition, since that might go too far if
14291 a specialization was declared, but not defined. */
14292 gcc_assert (TREE_CODE (decl) != VAR_DECL
14293 || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
14295 /* Fetch the more general template. */
14296 tmpl = DECL_TI_TEMPLATE (tmpl);
14299 return tmpl;
14302 /* Produce the definition of D, a _DECL generated from a template. If
14303 DEFER_OK is nonzero, then we don't have to actually do the
14304 instantiation now; we just have to do it sometime. Normally it is
14305 an error if this is an explicit instantiation but D is undefined.
14306 EXPL_INST_CLASS_MEM_P is true iff D is a member of an
14307 explicitly instantiated class template. */
14309 tree
14310 instantiate_decl (tree d, int defer_ok,
14311 bool expl_inst_class_mem_p)
14313 tree tmpl = DECL_TI_TEMPLATE (d);
14314 tree gen_args;
14315 tree args;
14316 tree td;
14317 tree code_pattern;
14318 tree spec;
14319 tree gen_tmpl;
14320 bool pattern_defined;
14321 int need_push;
14322 location_t saved_loc = input_location;
14323 int saved_in_system_header = in_system_header;
14324 bool external_p;
14326 /* This function should only be used to instantiate templates for
14327 functions and static member variables. */
14328 gcc_assert (TREE_CODE (d) == FUNCTION_DECL
14329 || TREE_CODE (d) == VAR_DECL);
14331 /* Variables are never deferred; if instantiation is required, they
14332 are instantiated right away. That allows for better code in the
14333 case that an expression refers to the value of the variable --
14334 if the variable has a constant value the referring expression can
14335 take advantage of that fact. */
14336 if (TREE_CODE (d) == VAR_DECL)
14337 defer_ok = 0;
14339 /* Don't instantiate cloned functions. Instead, instantiate the
14340 functions they cloned. */
14341 if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
14342 d = DECL_CLONED_FUNCTION (d);
14344 if (DECL_TEMPLATE_INSTANTIATED (d))
14345 /* D has already been instantiated. It might seem reasonable to
14346 check whether or not D is an explicit instantiation, and, if so,
14347 stop here. But when an explicit instantiation is deferred
14348 until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
14349 is set, even though we still need to do the instantiation. */
14350 return d;
14352 /* If we already have a specialization of this declaration, then
14353 there's no reason to instantiate it. Note that
14354 retrieve_specialization gives us both instantiations and
14355 specializations, so we must explicitly check
14356 DECL_TEMPLATE_SPECIALIZATION. */
14357 gen_tmpl = most_general_template (tmpl);
14358 gen_args = DECL_TI_ARGS (d);
14359 spec = retrieve_specialization (gen_tmpl, gen_args,
14360 /*class_specializations_p=*/false);
14361 if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
14362 return spec;
14364 /* This needs to happen before any tsubsting. */
14365 if (! push_tinst_level (d))
14366 return d;
14368 timevar_push (TV_PARSE);
14370 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
14371 for the instantiation. */
14372 td = template_for_substitution (d);
14373 code_pattern = DECL_TEMPLATE_RESULT (td);
14375 /* We should never be trying to instantiate a member of a class
14376 template or partial specialization. */
14377 gcc_assert (d != code_pattern);
14379 if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
14380 || DECL_TEMPLATE_SPECIALIZATION (td))
14381 /* In the case of a friend template whose definition is provided
14382 outside the class, we may have too many arguments. Drop the
14383 ones we don't need. The same is true for specializations. */
14384 args = get_innermost_template_args
14385 (gen_args, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td)));
14386 else
14387 args = gen_args;
14389 if (TREE_CODE (d) == FUNCTION_DECL)
14390 pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
14391 else
14392 pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
14394 /* We may be in the middle of deferred access check. Disable it now. */
14395 push_deferring_access_checks (dk_no_deferred);
14397 /* Unless an explicit instantiation directive has already determined
14398 the linkage of D, remember that a definition is available for
14399 this entity. */
14400 if (pattern_defined
14401 && !DECL_INTERFACE_KNOWN (d)
14402 && !DECL_NOT_REALLY_EXTERN (d))
14403 mark_definable (d);
14405 input_location = DECL_SOURCE_LOCATION (d);
14406 in_system_header = DECL_IN_SYSTEM_HEADER (d);
14408 /* If D is a member of an explicitly instantiated class template,
14409 and no definition is available, treat it like an implicit
14410 instantiation. */
14411 if (!pattern_defined && expl_inst_class_mem_p
14412 && DECL_EXPLICIT_INSTANTIATION (d))
14414 DECL_NOT_REALLY_EXTERN (d) = 0;
14415 DECL_INTERFACE_KNOWN (d) = 0;
14416 SET_DECL_IMPLICIT_INSTANTIATION (d);
14419 if (!defer_ok)
14421 /* Recheck the substitutions to obtain any warning messages
14422 about ignoring cv qualifiers. */
14423 tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
14424 tree type = TREE_TYPE (gen);
14426 /* Make sure that we can see identifiers, and compute access
14427 correctly. D is already the target FUNCTION_DECL with the
14428 right context. */
14429 push_access_scope (d);
14431 if (TREE_CODE (gen) == FUNCTION_DECL)
14433 tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
14434 tsubst_exception_specification (type, gen_args, tf_warning_or_error,
14436 /* Don't simply tsubst the function type, as that will give
14437 duplicate warnings about poor parameter qualifications.
14438 The function arguments are the same as the decl_arguments
14439 without the top level cv qualifiers. */
14440 type = TREE_TYPE (type);
14442 tsubst (type, gen_args, tf_warning_or_error, d);
14444 pop_access_scope (d);
14447 /* Check to see whether we know that this template will be
14448 instantiated in some other file, as with "extern template"
14449 extension. */
14450 external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
14451 /* In general, we do not instantiate such templates... */
14452 if (external_p
14453 /* ... but we instantiate inline functions so that we can inline
14454 them and ... */
14455 && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d))
14456 /* ... we instantiate static data members whose values are
14457 needed in integral constant expressions. */
14458 && ! (TREE_CODE (d) == VAR_DECL
14459 && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (d)))
14460 goto out;
14461 /* Defer all other templates, unless we have been explicitly
14462 forbidden from doing so. */
14463 if (/* If there is no definition, we cannot instantiate the
14464 template. */
14465 ! pattern_defined
14466 /* If it's OK to postpone instantiation, do so. */
14467 || defer_ok
14468 /* If this is a static data member that will be defined
14469 elsewhere, we don't want to instantiate the entire data
14470 member, but we do want to instantiate the initializer so that
14471 we can substitute that elsewhere. */
14472 || (external_p && TREE_CODE (d) == VAR_DECL))
14474 /* The definition of the static data member is now required so
14475 we must substitute the initializer. */
14476 if (TREE_CODE (d) == VAR_DECL
14477 && !DECL_INITIAL (d)
14478 && DECL_INITIAL (code_pattern))
14480 tree ns;
14481 tree init;
14483 ns = decl_namespace_context (d);
14484 push_nested_namespace (ns);
14485 push_nested_class (DECL_CONTEXT (d));
14486 init = tsubst_expr (DECL_INITIAL (code_pattern),
14487 args,
14488 tf_warning_or_error, NULL_TREE,
14489 /*integral_constant_expression_p=*/false);
14490 cp_finish_decl (d, init, /*init_const_expr_p=*/false,
14491 /*asmspec_tree=*/NULL_TREE,
14492 LOOKUP_ONLYCONVERTING);
14493 pop_nested_class ();
14494 pop_nested_namespace (ns);
14497 /* We restore the source position here because it's used by
14498 add_pending_template. */
14499 input_location = saved_loc;
14501 if (at_eof && !pattern_defined
14502 && DECL_EXPLICIT_INSTANTIATION (d))
14503 /* [temp.explicit]
14505 The definition of a non-exported function template, a
14506 non-exported member function template, or a non-exported
14507 member function or static data member of a class template
14508 shall be present in every translation unit in which it is
14509 explicitly instantiated. */
14510 pedwarn
14511 ("explicit instantiation of %qD but no definition available", d);
14513 /* ??? Historically, we have instantiated inline functions, even
14514 when marked as "extern template". */
14515 if (!(external_p && TREE_CODE (d) == VAR_DECL))
14516 add_pending_template (d);
14517 goto out;
14519 /* Tell the repository that D is available in this translation unit
14520 -- and see if it is supposed to be instantiated here. */
14521 if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
14523 /* In a PCH file, despite the fact that the repository hasn't
14524 requested instantiation in the PCH it is still possible that
14525 an instantiation will be required in a file that includes the
14526 PCH. */
14527 if (pch_file)
14528 add_pending_template (d);
14529 /* Instantiate inline functions so that the inliner can do its
14530 job, even though we'll not be emitting a copy of this
14531 function. */
14532 if (!(TREE_CODE (d) == FUNCTION_DECL
14533 && flag_inline_trees
14534 && DECL_DECLARED_INLINE_P (d)))
14535 goto out;
14538 need_push = !cfun || !global_bindings_p ();
14539 if (need_push)
14540 push_to_top_level ();
14542 /* Mark D as instantiated so that recursive calls to
14543 instantiate_decl do not try to instantiate it again. */
14544 DECL_TEMPLATE_INSTANTIATED (d) = 1;
14546 /* Regenerate the declaration in case the template has been modified
14547 by a subsequent redeclaration. */
14548 regenerate_decl_from_template (d, td);
14550 /* We already set the file and line above. Reset them now in case
14551 they changed as a result of calling regenerate_decl_from_template. */
14552 input_location = DECL_SOURCE_LOCATION (d);
14554 if (TREE_CODE (d) == VAR_DECL)
14556 tree init;
14558 /* Clear out DECL_RTL; whatever was there before may not be right
14559 since we've reset the type of the declaration. */
14560 SET_DECL_RTL (d, NULL_RTX);
14561 DECL_IN_AGGR_P (d) = 0;
14563 /* The initializer is placed in DECL_INITIAL by
14564 regenerate_decl_from_template. Pull it out so that
14565 finish_decl can process it. */
14566 init = DECL_INITIAL (d);
14567 DECL_INITIAL (d) = NULL_TREE;
14568 DECL_INITIALIZED_P (d) = 0;
14570 /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
14571 initializer. That function will defer actual emission until
14572 we have a chance to determine linkage. */
14573 DECL_EXTERNAL (d) = 0;
14575 /* Enter the scope of D so that access-checking works correctly. */
14576 push_nested_class (DECL_CONTEXT (d));
14577 finish_decl (d, init, NULL_TREE);
14578 pop_nested_class ();
14580 else if (TREE_CODE (d) == FUNCTION_DECL)
14582 htab_t saved_local_specializations;
14583 tree subst_decl;
14584 tree tmpl_parm;
14585 tree spec_parm;
14587 /* Save away the current list, in case we are instantiating one
14588 template from within the body of another. */
14589 saved_local_specializations = local_specializations;
14591 /* Set up the list of local specializations. */
14592 local_specializations = htab_create (37,
14593 hash_local_specialization,
14594 eq_local_specializations,
14595 NULL);
14597 /* Set up context. */
14598 start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
14600 /* Create substitution entries for the parameters. */
14601 subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
14602 tmpl_parm = DECL_ARGUMENTS (subst_decl);
14603 spec_parm = DECL_ARGUMENTS (d);
14604 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
14606 register_local_specialization (spec_parm, tmpl_parm);
14607 spec_parm = skip_artificial_parms_for (d, spec_parm);
14608 tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
14610 while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
14612 register_local_specialization (spec_parm, tmpl_parm);
14613 tmpl_parm = TREE_CHAIN (tmpl_parm);
14614 spec_parm = TREE_CHAIN (spec_parm);
14616 if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
14618 /* Collect all of the extra "packed" parameters into an
14619 argument pack. */
14620 tree parmvec;
14621 tree parmtypevec;
14622 tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
14623 tree argtypepack = make_node (TYPE_ARGUMENT_PACK);
14624 int i, len = 0;
14625 tree t;
14627 /* Count how many parameters remain. */
14628 for (t = spec_parm; t; t = TREE_CHAIN (t))
14629 len++;
14631 /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters. */
14632 parmvec = make_tree_vec (len);
14633 parmtypevec = make_tree_vec (len);
14634 for(i = 0; i < len; i++, spec_parm = TREE_CHAIN (spec_parm))
14636 TREE_VEC_ELT (parmvec, i) = spec_parm;
14637 TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
14640 /* Build the argument packs. */
14641 SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
14642 SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
14643 TREE_TYPE (argpack) = argtypepack;
14645 /* Register the (value) argument pack as a specialization of
14646 TMPL_PARM, then move on. */
14647 register_local_specialization (argpack, tmpl_parm);
14648 tmpl_parm = TREE_CHAIN (tmpl_parm);
14650 gcc_assert (!spec_parm);
14652 /* Substitute into the body of the function. */
14653 tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
14654 tf_warning_or_error, tmpl,
14655 /*integral_constant_expression_p=*/false);
14657 /* Set the current input_location to the end of the function
14658 so that finish_function knows where we are. */
14659 input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
14661 /* We don't need the local specializations any more. */
14662 htab_delete (local_specializations);
14663 local_specializations = saved_local_specializations;
14665 /* Finish the function. */
14666 d = finish_function (0);
14667 expand_or_defer_fn (d);
14670 /* We're not deferring instantiation any more. */
14671 TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
14673 if (need_push)
14674 pop_from_top_level ();
14676 out:
14677 input_location = saved_loc;
14678 in_system_header = saved_in_system_header;
14679 pop_deferring_access_checks ();
14680 pop_tinst_level ();
14682 timevar_pop (TV_PARSE);
14684 return d;
14687 /* Run through the list of templates that we wish we could
14688 instantiate, and instantiate any we can. RETRIES is the
14689 number of times we retry pending template instantiation. */
14691 void
14692 instantiate_pending_templates (int retries)
14694 int reconsider;
14695 location_t saved_loc = input_location;
14696 int saved_in_system_header = in_system_header;
14698 /* Instantiating templates may trigger vtable generation. This in turn
14699 may require further template instantiations. We place a limit here
14700 to avoid infinite loop. */
14701 if (pending_templates && retries >= max_tinst_depth)
14703 tree decl = pending_templates->tinst->decl;
14705 error ("template instantiation depth exceeds maximum of %d"
14706 " instantiating %q+D, possibly from virtual table generation"
14707 " (use -ftemplate-depth-NN to increase the maximum)",
14708 max_tinst_depth, decl);
14709 if (TREE_CODE (decl) == FUNCTION_DECL)
14710 /* Pretend that we defined it. */
14711 DECL_INITIAL (decl) = error_mark_node;
14712 return;
14717 struct pending_template **t = &pending_templates;
14718 struct pending_template *last = NULL;
14719 reconsider = 0;
14720 while (*t)
14722 tree instantiation = reopen_tinst_level ((*t)->tinst);
14723 bool complete = false;
14725 if (TYPE_P (instantiation))
14727 tree fn;
14729 if (!COMPLETE_TYPE_P (instantiation))
14731 instantiate_class_template (instantiation);
14732 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
14733 for (fn = TYPE_METHODS (instantiation);
14735 fn = TREE_CHAIN (fn))
14736 if (! DECL_ARTIFICIAL (fn))
14737 instantiate_decl (fn,
14738 /*defer_ok=*/0,
14739 /*expl_inst_class_mem_p=*/false);
14740 if (COMPLETE_TYPE_P (instantiation))
14741 reconsider = 1;
14744 complete = COMPLETE_TYPE_P (instantiation);
14746 else
14748 if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
14749 && !DECL_TEMPLATE_INSTANTIATED (instantiation))
14751 instantiation
14752 = instantiate_decl (instantiation,
14753 /*defer_ok=*/0,
14754 /*expl_inst_class_mem_p=*/false);
14755 if (DECL_TEMPLATE_INSTANTIATED (instantiation))
14756 reconsider = 1;
14759 complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
14760 || DECL_TEMPLATE_INSTANTIATED (instantiation));
14763 if (complete)
14764 /* If INSTANTIATION has been instantiated, then we don't
14765 need to consider it again in the future. */
14766 *t = (*t)->next;
14767 else
14769 last = *t;
14770 t = &(*t)->next;
14772 tinst_depth = 0;
14773 current_tinst_level = NULL;
14775 last_pending_template = last;
14777 while (reconsider);
14779 input_location = saved_loc;
14780 in_system_header = saved_in_system_header;
14783 /* Substitute ARGVEC into T, which is a list of initializers for
14784 either base class or a non-static data member. The TREE_PURPOSEs
14785 are DECLs, and the TREE_VALUEs are the initializer values. Used by
14786 instantiate_decl. */
14788 static tree
14789 tsubst_initializer_list (tree t, tree argvec)
14791 tree inits = NULL_TREE;
14793 for (; t; t = TREE_CHAIN (t))
14795 tree decl;
14796 tree init;
14797 tree expanded_bases = NULL_TREE;
14798 tree expanded_arguments = NULL_TREE;
14799 int i, len = 1;
14801 if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
14803 tree expr;
14804 tree arg;
14806 /* Expand the base class expansion type into separate base
14807 classes. */
14808 expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
14809 tf_warning_or_error,
14810 NULL_TREE);
14811 if (expanded_bases == error_mark_node)
14812 continue;
14814 /* We'll be building separate TREE_LISTs of arguments for
14815 each base. */
14816 len = TREE_VEC_LENGTH (expanded_bases);
14817 expanded_arguments = make_tree_vec (len);
14818 for (i = 0; i < len; i++)
14819 TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
14821 /* Build a dummy EXPR_PACK_EXPANSION that will be used to
14822 expand each argument in the TREE_VALUE of t. */
14823 expr = make_node (EXPR_PACK_EXPANSION);
14824 PACK_EXPANSION_PARAMETER_PACKS (expr) =
14825 PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
14827 /* Substitute parameter packs into each argument in the
14828 TREE_LIST. */
14829 in_base_initializer = 1;
14830 for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
14832 tree expanded_exprs;
14834 /* Expand the argument. */
14835 SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
14836 expanded_exprs = tsubst_pack_expansion (expr, argvec,
14837 tf_warning_or_error,
14838 NULL_TREE);
14840 /* Prepend each of the expanded expressions to the
14841 corresponding TREE_LIST in EXPANDED_ARGUMENTS. */
14842 for (i = 0; i < len; i++)
14844 TREE_VEC_ELT (expanded_arguments, i) =
14845 tree_cons (NULL_TREE, TREE_VEC_ELT (expanded_exprs, i),
14846 TREE_VEC_ELT (expanded_arguments, i));
14849 in_base_initializer = 0;
14851 /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
14852 since we built them backwards. */
14853 for (i = 0; i < len; i++)
14855 TREE_VEC_ELT (expanded_arguments, i) =
14856 nreverse (TREE_VEC_ELT (expanded_arguments, i));
14860 for (i = 0; i < len; ++i)
14862 if (expanded_bases)
14864 decl = TREE_VEC_ELT (expanded_bases, i);
14865 decl = expand_member_init (decl);
14866 init = TREE_VEC_ELT (expanded_arguments, i);
14868 else
14870 decl = tsubst_copy (TREE_PURPOSE (t), argvec,
14871 tf_warning_or_error, NULL_TREE);
14873 decl = expand_member_init (decl);
14874 if (decl && !DECL_P (decl))
14875 in_base_initializer = 1;
14877 init = tsubst_expr (TREE_VALUE (t), argvec,
14878 tf_warning_or_error, NULL_TREE,
14879 /*integral_constant_expression_p=*/false);
14880 in_base_initializer = 0;
14883 if (decl)
14885 init = build_tree_list (decl, init);
14886 TREE_CHAIN (init) = inits;
14887 inits = init;
14891 return inits;
14894 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
14896 static void
14897 set_current_access_from_decl (tree decl)
14899 if (TREE_PRIVATE (decl))
14900 current_access_specifier = access_private_node;
14901 else if (TREE_PROTECTED (decl))
14902 current_access_specifier = access_protected_node;
14903 else
14904 current_access_specifier = access_public_node;
14907 /* Instantiate an enumerated type. TAG is the template type, NEWTAG
14908 is the instantiation (which should have been created with
14909 start_enum) and ARGS are the template arguments to use. */
14911 static void
14912 tsubst_enum (tree tag, tree newtag, tree args)
14914 tree e;
14916 for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
14918 tree value;
14919 tree decl;
14921 decl = TREE_VALUE (e);
14922 /* Note that in a template enum, the TREE_VALUE is the
14923 CONST_DECL, not the corresponding INTEGER_CST. */
14924 value = tsubst_expr (DECL_INITIAL (decl),
14925 args, tf_warning_or_error, NULL_TREE,
14926 /*integral_constant_expression_p=*/true);
14928 /* Give this enumeration constant the correct access. */
14929 set_current_access_from_decl (decl);
14931 /* Actually build the enumerator itself. */
14932 build_enumerator (DECL_NAME (decl), value, newtag);
14935 finish_enum (newtag);
14936 DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
14937 = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
14940 /* DECL is a FUNCTION_DECL that is a template specialization. Return
14941 its type -- but without substituting the innermost set of template
14942 arguments. So, innermost set of template parameters will appear in
14943 the type. */
14945 tree
14946 get_mostly_instantiated_function_type (tree decl)
14948 tree fn_type;
14949 tree tmpl;
14950 tree targs;
14951 tree tparms;
14952 int parm_depth;
14954 tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
14955 targs = DECL_TI_ARGS (decl);
14956 tparms = DECL_TEMPLATE_PARMS (tmpl);
14957 parm_depth = TMPL_PARMS_DEPTH (tparms);
14959 /* There should be as many levels of arguments as there are levels
14960 of parameters. */
14961 gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
14963 fn_type = TREE_TYPE (tmpl);
14965 if (parm_depth == 1)
14966 /* No substitution is necessary. */
14968 else
14970 int i, save_access_control;
14971 tree partial_args;
14973 /* Replace the innermost level of the TARGS with NULL_TREEs to
14974 let tsubst know not to substitute for those parameters. */
14975 partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
14976 for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
14977 SET_TMPL_ARGS_LEVEL (partial_args, i,
14978 TMPL_ARGS_LEVEL (targs, i));
14979 SET_TMPL_ARGS_LEVEL (partial_args,
14980 TMPL_ARGS_DEPTH (targs),
14981 make_tree_vec (DECL_NTPARMS (tmpl)));
14983 /* Disable access control as this function is used only during
14984 name-mangling. */
14985 save_access_control = flag_access_control;
14986 flag_access_control = 0;
14988 ++processing_template_decl;
14989 /* Now, do the (partial) substitution to figure out the
14990 appropriate function type. */
14991 fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
14992 --processing_template_decl;
14994 /* Substitute into the template parameters to obtain the real
14995 innermost set of parameters. This step is important if the
14996 innermost set of template parameters contains value
14997 parameters whose types depend on outer template parameters. */
14998 TREE_VEC_LENGTH (partial_args)--;
14999 tparms = tsubst_template_parms (tparms, partial_args, tf_error);
15001 flag_access_control = save_access_control;
15004 return fn_type;
15007 /* Return truthvalue if we're processing a template different from
15008 the last one involved in diagnostics. */
15010 problematic_instantiation_changed (void)
15012 return last_template_error_tick != tinst_level_tick;
15015 /* Remember current template involved in diagnostics. */
15016 void
15017 record_last_problematic_instantiation (void)
15019 last_template_error_tick = tinst_level_tick;
15022 struct tinst_level *
15023 current_instantiation (void)
15025 return current_tinst_level;
15028 /* [temp.param] Check that template non-type parm TYPE is of an allowable
15029 type. Return zero for ok, nonzero for disallowed. Issue error and
15030 warning messages under control of COMPLAIN. */
15032 static int
15033 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
15035 if (INTEGRAL_TYPE_P (type))
15036 return 0;
15037 else if (POINTER_TYPE_P (type))
15038 return 0;
15039 else if (TYPE_PTR_TO_MEMBER_P (type))
15040 return 0;
15041 else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
15042 return 0;
15043 else if (TREE_CODE (type) == TYPENAME_TYPE)
15044 return 0;
15046 if (complain & tf_error)
15047 error ("%q#T is not a valid type for a template constant parameter", type);
15048 return 1;
15051 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
15052 Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
15054 static bool
15055 dependent_type_p_r (tree type)
15057 tree scope;
15059 /* [temp.dep.type]
15061 A type is dependent if it is:
15063 -- a template parameter. Template template parameters are types
15064 for us (since TYPE_P holds true for them) so we handle
15065 them here. */
15066 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
15067 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
15068 return true;
15069 /* -- a qualified-id with a nested-name-specifier which contains a
15070 class-name that names a dependent type or whose unqualified-id
15071 names a dependent type. */
15072 if (TREE_CODE (type) == TYPENAME_TYPE)
15073 return true;
15074 /* -- a cv-qualified type where the cv-unqualified type is
15075 dependent. */
15076 type = TYPE_MAIN_VARIANT (type);
15077 /* -- a compound type constructed from any dependent type. */
15078 if (TYPE_PTR_TO_MEMBER_P (type))
15079 return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
15080 || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
15081 (type)));
15082 else if (TREE_CODE (type) == POINTER_TYPE
15083 || TREE_CODE (type) == REFERENCE_TYPE)
15084 return dependent_type_p (TREE_TYPE (type));
15085 else if (TREE_CODE (type) == FUNCTION_TYPE
15086 || TREE_CODE (type) == METHOD_TYPE)
15088 tree arg_type;
15090 if (dependent_type_p (TREE_TYPE (type)))
15091 return true;
15092 for (arg_type = TYPE_ARG_TYPES (type);
15093 arg_type;
15094 arg_type = TREE_CHAIN (arg_type))
15095 if (dependent_type_p (TREE_VALUE (arg_type)))
15096 return true;
15097 return false;
15099 /* -- an array type constructed from any dependent type or whose
15100 size is specified by a constant expression that is
15101 value-dependent. */
15102 if (TREE_CODE (type) == ARRAY_TYPE)
15104 if (TYPE_DOMAIN (type)
15105 && ((value_dependent_expression_p
15106 (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
15107 || (type_dependent_expression_p
15108 (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
15109 return true;
15110 return dependent_type_p (TREE_TYPE (type));
15113 /* -- a template-id in which either the template name is a template
15114 parameter ... */
15115 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
15116 return true;
15117 /* ... or any of the template arguments is a dependent type or
15118 an expression that is type-dependent or value-dependent. */
15119 else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
15120 && (any_dependent_template_arguments_p
15121 (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
15122 return true;
15124 /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
15125 argument of the `typeof' expression is not type-dependent, then
15126 it should already been have resolved. */
15127 if (TREE_CODE (type) == TYPEOF_TYPE
15128 || TREE_CODE (type) == DECLTYPE_TYPE)
15129 return true;
15131 /* A template argument pack is dependent if any of its packed
15132 arguments are. */
15133 if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
15135 tree args = ARGUMENT_PACK_ARGS (type);
15136 int i, len = TREE_VEC_LENGTH (args);
15137 for (i = 0; i < len; ++i)
15138 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15139 return true;
15142 /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
15143 be template parameters. */
15144 if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
15145 return true;
15147 /* The standard does not specifically mention types that are local
15148 to template functions or local classes, but they should be
15149 considered dependent too. For example:
15151 template <int I> void f() {
15152 enum E { a = I };
15153 S<sizeof (E)> s;
15156 The size of `E' cannot be known until the value of `I' has been
15157 determined. Therefore, `E' must be considered dependent. */
15158 scope = TYPE_CONTEXT (type);
15159 if (scope && TYPE_P (scope))
15160 return dependent_type_p (scope);
15161 else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
15162 return type_dependent_expression_p (scope);
15164 /* Other types are non-dependent. */
15165 return false;
15168 /* Returns TRUE if TYPE is dependent, in the sense of
15169 [temp.dep.type]. */
15171 bool
15172 dependent_type_p (tree type)
15174 /* If there are no template parameters in scope, then there can't be
15175 any dependent types. */
15176 if (!processing_template_decl)
15178 /* If we are not processing a template, then nobody should be
15179 providing us with a dependent type. */
15180 gcc_assert (type);
15181 gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM);
15182 return false;
15185 /* If the type is NULL, we have not computed a type for the entity
15186 in question; in that case, the type is dependent. */
15187 if (!type)
15188 return true;
15190 /* Erroneous types can be considered non-dependent. */
15191 if (type == error_mark_node)
15192 return false;
15194 /* If we have not already computed the appropriate value for TYPE,
15195 do so now. */
15196 if (!TYPE_DEPENDENT_P_VALID (type))
15198 TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
15199 TYPE_DEPENDENT_P_VALID (type) = 1;
15202 return TYPE_DEPENDENT_P (type);
15205 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION. */
15207 static bool
15208 dependent_scope_ref_p (tree expression, bool criterion (tree))
15210 tree scope;
15211 tree name;
15213 gcc_assert (TREE_CODE (expression) == SCOPE_REF);
15215 if (!TYPE_P (TREE_OPERAND (expression, 0)))
15216 return true;
15218 scope = TREE_OPERAND (expression, 0);
15219 name = TREE_OPERAND (expression, 1);
15221 /* [temp.dep.expr]
15223 An id-expression is type-dependent if it contains a
15224 nested-name-specifier that contains a class-name that names a
15225 dependent type. */
15226 /* The suggested resolution to Core Issue 2 implies that if the
15227 qualifying type is the current class, then we must peek
15228 inside it. */
15229 if (DECL_P (name)
15230 && currently_open_class (scope)
15231 && !criterion (name))
15232 return false;
15233 if (dependent_type_p (scope))
15234 return true;
15236 return false;
15239 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
15240 [temp.dep.constexpr]. EXPRESSION is already known to be a constant
15241 expression. */
15243 bool
15244 value_dependent_expression_p (tree expression)
15246 if (!processing_template_decl)
15247 return false;
15249 /* A name declared with a dependent type. */
15250 if (DECL_P (expression) && type_dependent_expression_p (expression))
15251 return true;
15253 switch (TREE_CODE (expression))
15255 case IDENTIFIER_NODE:
15256 /* A name that has not been looked up -- must be dependent. */
15257 return true;
15259 case TEMPLATE_PARM_INDEX:
15260 /* A non-type template parm. */
15261 return true;
15263 case CONST_DECL:
15264 /* A non-type template parm. */
15265 if (DECL_TEMPLATE_PARM_P (expression))
15266 return true;
15267 return false;
15269 case VAR_DECL:
15270 /* A constant with integral or enumeration type and is initialized
15271 with an expression that is value-dependent. */
15272 if (DECL_INITIAL (expression)
15273 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
15274 && value_dependent_expression_p (DECL_INITIAL (expression)))
15275 return true;
15276 return false;
15278 case DYNAMIC_CAST_EXPR:
15279 case STATIC_CAST_EXPR:
15280 case CONST_CAST_EXPR:
15281 case REINTERPRET_CAST_EXPR:
15282 case CAST_EXPR:
15283 /* These expressions are value-dependent if the type to which
15284 the cast occurs is dependent or the expression being casted
15285 is value-dependent. */
15287 tree type = TREE_TYPE (expression);
15289 if (dependent_type_p (type))
15290 return true;
15292 /* A functional cast has a list of operands. */
15293 expression = TREE_OPERAND (expression, 0);
15294 if (!expression)
15296 /* If there are no operands, it must be an expression such
15297 as "int()". This should not happen for aggregate types
15298 because it would form non-constant expressions. */
15299 gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
15301 return false;
15304 if (TREE_CODE (expression) == TREE_LIST)
15305 return any_value_dependent_elements_p (expression);
15307 return value_dependent_expression_p (expression);
15310 case SIZEOF_EXPR:
15311 case ALIGNOF_EXPR:
15312 /* A `sizeof' expression is value-dependent if the operand is
15313 type-dependent or is a pack expansion. */
15314 expression = TREE_OPERAND (expression, 0);
15315 if (PACK_EXPANSION_P (expression))
15316 return true;
15317 else if (TYPE_P (expression))
15318 return dependent_type_p (expression);
15319 return type_dependent_expression_p (expression);
15321 case SCOPE_REF:
15322 return dependent_scope_ref_p (expression, value_dependent_expression_p);
15324 case COMPONENT_REF:
15325 return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
15326 || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
15328 case CALL_EXPR:
15329 /* A CALL_EXPR may appear in a constant expression if it is a
15330 call to a builtin function, e.g., __builtin_constant_p. All
15331 such calls are value-dependent. */
15332 return true;
15334 case NONTYPE_ARGUMENT_PACK:
15335 /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
15336 is value-dependent. */
15338 tree values = ARGUMENT_PACK_ARGS (expression);
15339 int i, len = TREE_VEC_LENGTH (values);
15341 for (i = 0; i < len; ++i)
15342 if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
15343 return true;
15345 return false;
15348 case TRAIT_EXPR:
15350 tree type2 = TRAIT_EXPR_TYPE2 (expression);
15351 return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
15352 || (type2 ? dependent_type_p (type2) : false));
15355 case MODOP_EXPR:
15356 return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
15357 || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
15359 default:
15360 /* A constant expression is value-dependent if any subexpression is
15361 value-dependent. */
15362 switch (TREE_CODE_CLASS (TREE_CODE (expression)))
15364 case tcc_reference:
15365 case tcc_unary:
15366 return (value_dependent_expression_p
15367 (TREE_OPERAND (expression, 0)));
15369 case tcc_comparison:
15370 case tcc_binary:
15371 return ((value_dependent_expression_p
15372 (TREE_OPERAND (expression, 0)))
15373 || (value_dependent_expression_p
15374 (TREE_OPERAND (expression, 1))));
15376 case tcc_expression:
15377 case tcc_vl_exp:
15379 int i;
15380 for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
15381 /* In some cases, some of the operands may be missing.
15382 (For example, in the case of PREDECREMENT_EXPR, the
15383 amount to increment by may be missing.) That doesn't
15384 make the expression dependent. */
15385 if (TREE_OPERAND (expression, i)
15386 && (value_dependent_expression_p
15387 (TREE_OPERAND (expression, i))))
15388 return true;
15389 return false;
15392 default:
15393 break;
15397 /* The expression is not value-dependent. */
15398 return false;
15401 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
15402 [temp.dep.expr]. */
15404 bool
15405 type_dependent_expression_p (tree expression)
15407 if (!processing_template_decl)
15408 return false;
15410 if (expression == error_mark_node)
15411 return false;
15413 /* An unresolved name is always dependent. */
15414 if (TREE_CODE (expression) == IDENTIFIER_NODE
15415 || TREE_CODE (expression) == USING_DECL)
15416 return true;
15418 /* Some expression forms are never type-dependent. */
15419 if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
15420 || TREE_CODE (expression) == SIZEOF_EXPR
15421 || TREE_CODE (expression) == ALIGNOF_EXPR
15422 || TREE_CODE (expression) == TRAIT_EXPR
15423 || TREE_CODE (expression) == TYPEID_EXPR
15424 || TREE_CODE (expression) == DELETE_EXPR
15425 || TREE_CODE (expression) == VEC_DELETE_EXPR
15426 || TREE_CODE (expression) == THROW_EXPR)
15427 return false;
15429 /* The types of these expressions depends only on the type to which
15430 the cast occurs. */
15431 if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
15432 || TREE_CODE (expression) == STATIC_CAST_EXPR
15433 || TREE_CODE (expression) == CONST_CAST_EXPR
15434 || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
15435 || TREE_CODE (expression) == CAST_EXPR)
15436 return dependent_type_p (TREE_TYPE (expression));
15438 /* The types of these expressions depends only on the type created
15439 by the expression. */
15440 if (TREE_CODE (expression) == NEW_EXPR
15441 || TREE_CODE (expression) == VEC_NEW_EXPR)
15443 /* For NEW_EXPR tree nodes created inside a template, either
15444 the object type itself or a TREE_LIST may appear as the
15445 operand 1. */
15446 tree type = TREE_OPERAND (expression, 1);
15447 if (TREE_CODE (type) == TREE_LIST)
15448 /* This is an array type. We need to check array dimensions
15449 as well. */
15450 return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
15451 || value_dependent_expression_p
15452 (TREE_OPERAND (TREE_VALUE (type), 1));
15453 else
15454 return dependent_type_p (type);
15457 if (TREE_CODE (expression) == SCOPE_REF
15458 && dependent_scope_ref_p (expression,
15459 type_dependent_expression_p))
15460 return true;
15462 if (TREE_CODE (expression) == FUNCTION_DECL
15463 && DECL_LANG_SPECIFIC (expression)
15464 && DECL_TEMPLATE_INFO (expression)
15465 && (any_dependent_template_arguments_p
15466 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
15467 return true;
15469 if (TREE_CODE (expression) == TEMPLATE_DECL
15470 && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
15471 return false;
15473 if (TREE_CODE (expression) == STMT_EXPR)
15474 expression = stmt_expr_value_expr (expression);
15476 if (TREE_TYPE (expression) == unknown_type_node)
15478 if (TREE_CODE (expression) == ADDR_EXPR)
15479 return type_dependent_expression_p (TREE_OPERAND (expression, 0));
15480 if (TREE_CODE (expression) == COMPONENT_REF
15481 || TREE_CODE (expression) == OFFSET_REF)
15483 if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
15484 return true;
15485 expression = TREE_OPERAND (expression, 1);
15486 if (TREE_CODE (expression) == IDENTIFIER_NODE)
15487 return false;
15489 /* SCOPE_REF with non-null TREE_TYPE is always non-dependent. */
15490 if (TREE_CODE (expression) == SCOPE_REF)
15491 return false;
15493 if (TREE_CODE (expression) == BASELINK)
15494 expression = BASELINK_FUNCTIONS (expression);
15496 if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
15498 if (any_dependent_template_arguments_p
15499 (TREE_OPERAND (expression, 1)))
15500 return true;
15501 expression = TREE_OPERAND (expression, 0);
15503 gcc_assert (TREE_CODE (expression) == OVERLOAD
15504 || TREE_CODE (expression) == FUNCTION_DECL);
15506 while (expression)
15508 if (type_dependent_expression_p (OVL_CURRENT (expression)))
15509 return true;
15510 expression = OVL_NEXT (expression);
15512 return false;
15515 gcc_assert (TREE_CODE (expression) != TYPE_DECL);
15517 return (dependent_type_p (TREE_TYPE (expression)));
15520 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
15521 contains a type-dependent expression. */
15523 bool
15524 any_type_dependent_arguments_p (const_tree args)
15526 while (args)
15528 tree arg = TREE_VALUE (args);
15530 if (type_dependent_expression_p (arg))
15531 return true;
15532 args = TREE_CHAIN (args);
15534 return false;
15537 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
15538 expressions) contains any value-dependent expressions. */
15540 bool
15541 any_value_dependent_elements_p (const_tree list)
15543 for (; list; list = TREE_CHAIN (list))
15544 if (value_dependent_expression_p (TREE_VALUE (list)))
15545 return true;
15547 return false;
15550 /* Returns TRUE if the ARG (a template argument) is dependent. */
15552 bool
15553 dependent_template_arg_p (tree arg)
15555 if (!processing_template_decl)
15556 return false;
15558 if (TREE_CODE (arg) == TEMPLATE_DECL
15559 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15560 return dependent_template_p (arg);
15561 else if (ARGUMENT_PACK_P (arg))
15563 tree args = ARGUMENT_PACK_ARGS (arg);
15564 int i, len = TREE_VEC_LENGTH (args);
15565 for (i = 0; i < len; ++i)
15567 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15568 return true;
15571 return false;
15573 else if (TYPE_P (arg))
15574 return dependent_type_p (arg);
15575 else
15576 return (type_dependent_expression_p (arg)
15577 || value_dependent_expression_p (arg));
15580 /* Returns true if ARGS (a collection of template arguments) contains
15581 any types that require structural equality testing. */
15583 bool
15584 any_template_arguments_need_structural_equality_p (tree args)
15586 int i;
15587 int j;
15589 if (!args)
15590 return false;
15591 if (args == error_mark_node)
15592 return true;
15594 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
15596 tree level = TMPL_ARGS_LEVEL (args, i + 1);
15597 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
15599 tree arg = TREE_VEC_ELT (level, j);
15600 tree packed_args = NULL_TREE;
15601 int k, len = 1;
15603 if (ARGUMENT_PACK_P (arg))
15605 /* Look inside the argument pack. */
15606 packed_args = ARGUMENT_PACK_ARGS (arg);
15607 len = TREE_VEC_LENGTH (packed_args);
15610 for (k = 0; k < len; ++k)
15612 if (packed_args)
15613 arg = TREE_VEC_ELT (packed_args, k);
15615 if (error_operand_p (arg))
15616 return true;
15617 else if (TREE_CODE (arg) == TEMPLATE_DECL
15618 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15619 continue;
15620 else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
15621 return true;
15622 else if (!TYPE_P (arg) && TREE_TYPE (arg)
15623 && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
15624 return true;
15629 return false;
15632 /* Returns true if ARGS (a collection of template arguments) contains
15633 any dependent arguments. */
15635 bool
15636 any_dependent_template_arguments_p (const_tree args)
15638 int i;
15639 int j;
15641 if (!args)
15642 return false;
15643 if (args == error_mark_node)
15644 return true;
15646 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
15648 const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
15649 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
15650 if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
15651 return true;
15654 return false;
15657 /* Returns TRUE if the template TMPL is dependent. */
15659 bool
15660 dependent_template_p (tree tmpl)
15662 if (TREE_CODE (tmpl) == OVERLOAD)
15664 while (tmpl)
15666 if (dependent_template_p (OVL_FUNCTION (tmpl)))
15667 return true;
15668 tmpl = OVL_CHAIN (tmpl);
15670 return false;
15673 /* Template template parameters are dependent. */
15674 if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
15675 || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
15676 return true;
15677 /* So are names that have not been looked up. */
15678 if (TREE_CODE (tmpl) == SCOPE_REF
15679 || TREE_CODE (tmpl) == IDENTIFIER_NODE)
15680 return true;
15681 /* So are member templates of dependent classes. */
15682 if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
15683 return dependent_type_p (DECL_CONTEXT (tmpl));
15684 return false;
15687 /* Returns TRUE if the specialization TMPL<ARGS> is dependent. */
15689 bool
15690 dependent_template_id_p (tree tmpl, tree args)
15692 return (dependent_template_p (tmpl)
15693 || any_dependent_template_arguments_p (args));
15696 /* TYPE is a TYPENAME_TYPE. Returns the ordinary TYPE to which the
15697 TYPENAME_TYPE corresponds. Returns the original TYPENAME_TYPE if
15698 no such TYPE can be found. Note that this function peers inside
15699 uninstantiated templates and therefore should be used only in
15700 extremely limited situations. ONLY_CURRENT_P restricts this
15701 peering to the currently open classes hierarchy (which is required
15702 when comparing types). */
15704 tree
15705 resolve_typename_type (tree type, bool only_current_p)
15707 tree scope;
15708 tree name;
15709 tree decl;
15710 int quals;
15711 tree pushed_scope;
15712 tree result;
15714 gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
15716 scope = TYPE_CONTEXT (type);
15717 name = TYPE_IDENTIFIER (type);
15719 /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
15720 it first before we can figure out what NAME refers to. */
15721 if (TREE_CODE (scope) == TYPENAME_TYPE)
15722 scope = resolve_typename_type (scope, only_current_p);
15723 /* If we don't know what SCOPE refers to, then we cannot resolve the
15724 TYPENAME_TYPE. */
15725 if (TREE_CODE (scope) == TYPENAME_TYPE)
15726 return type;
15727 /* If the SCOPE is a template type parameter, we have no way of
15728 resolving the name. */
15729 if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
15730 return type;
15731 /* If the SCOPE is not the current instantiation, there's no reason
15732 to look inside it. */
15733 if (only_current_p && !currently_open_class (scope))
15734 return type;
15735 /* If SCOPE is a partial instantiation, it will not have a valid
15736 TYPE_FIELDS list, so use the original template. */
15737 scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
15738 /* Enter the SCOPE so that name lookup will be resolved as if we
15739 were in the class definition. In particular, SCOPE will no
15740 longer be considered a dependent type. */
15741 pushed_scope = push_scope (scope);
15742 /* Look up the declaration. */
15743 decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
15745 result = NULL_TREE;
15747 /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
15748 find a TEMPLATE_DECL. Otherwise, we want to find a TYPE_DECL. */
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"