2010-07-27 Paolo Carlini <paolo.carlini@oracle.com>
[official-gcc/alias-decl.git] / gcc / cp / pt.c
blob7a331479d8b515bbe7e2aaf474c27a55a12d0554
1 /* Handle parameterized types (templates) for GNU C++.
2 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
4 Free Software Foundation, Inc.
5 Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
6 Rewritten by Jason Merrill (jason@cygnus.com).
8 This file is part of GCC.
10 GCC is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3, or (at your option)
13 any later version.
15 GCC is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING3. If not see
22 <http://www.gnu.org/licenses/>. */
24 /* Known bugs or deficiencies include:
26 all methods must be provided in header files; can't use a source
27 file that contains only the method templates and "just win". */
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "tm.h"
33 #include "tree.h"
34 #include "intl.h"
35 #include "pointer-set.h"
36 #include "flags.h"
37 #include "cp-tree.h"
38 #include "c-family/c-common.h"
39 #include "cp-objcp-common.h"
40 #include "tree-inline.h"
41 #include "decl.h"
42 #include "output.h"
43 #include "toplev.h"
44 #include "timevar.h"
45 #include "tree-iterator.h"
46 #include "vecprim.h"
48 /* The type of functions taking a tree, and some additional data, and
49 returning an int. */
50 typedef int (*tree_fn_t) (tree, void*);
52 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
53 instantiations have been deferred, either because their definitions
54 were not yet available, or because we were putting off doing the work. */
55 struct GTY (()) pending_template {
56 struct pending_template *next;
57 struct tinst_level *tinst;
60 static GTY(()) struct pending_template *pending_templates;
61 static GTY(()) struct pending_template *last_pending_template;
63 int processing_template_parmlist;
64 static int template_header_count;
66 static GTY(()) tree saved_trees;
67 static VEC(int,heap) *inline_parm_levels;
69 static GTY(()) struct tinst_level *current_tinst_level;
71 static GTY(()) tree saved_access_scope;
73 /* Live only within one (recursive) call to tsubst_expr. We use
74 this to pass the statement expression node from the STMT_EXPR
75 to the EXPR_STMT that is its result. */
76 static tree cur_stmt_expr;
78 /* A map from local variable declarations in the body of the template
79 presently being instantiated to the corresponding instantiated
80 local variables. */
81 static htab_t local_specializations;
83 typedef struct GTY(()) spec_entry
85 tree tmpl;
86 tree args;
87 tree spec;
88 } spec_entry;
90 static GTY ((param_is (spec_entry)))
91 htab_t decl_specializations;
93 static GTY ((param_is (spec_entry)))
94 htab_t type_specializations;
96 /* Contains canonical template parameter types. The vector is indexed by
97 the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
98 TREE_LIST, whose TREE_VALUEs contain the canonical template
99 parameters of various types and levels. */
100 static GTY(()) VEC(tree,gc) *canonical_template_parms;
102 #define UNIFY_ALLOW_NONE 0
103 #define UNIFY_ALLOW_MORE_CV_QUAL 1
104 #define UNIFY_ALLOW_LESS_CV_QUAL 2
105 #define UNIFY_ALLOW_DERIVED 4
106 #define UNIFY_ALLOW_INTEGER 8
107 #define UNIFY_ALLOW_OUTER_LEVEL 16
108 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
109 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
111 static void push_access_scope (tree);
112 static void pop_access_scope (tree);
113 static bool resolve_overloaded_unification (tree, tree, tree, tree,
114 unification_kind_t, int);
115 static int try_one_overload (tree, tree, tree, tree, tree,
116 unification_kind_t, int, bool);
117 static int unify (tree, tree, tree, tree, int);
118 static void add_pending_template (tree);
119 static tree reopen_tinst_level (struct tinst_level *);
120 static tree tsubst_initializer_list (tree, tree);
121 static tree get_class_bindings (tree, tree, tree);
122 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
123 bool, bool);
124 static void tsubst_enum (tree, tree, tree);
125 static tree add_to_template_args (tree, tree);
126 static tree add_outermost_template_args (tree, tree);
127 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
128 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
129 tree);
130 static int type_unification_real (tree, tree, tree, const tree *,
131 unsigned int, int, unification_kind_t, int);
132 static void note_template_header (int);
133 static tree convert_nontype_argument_function (tree, tree);
134 static tree convert_nontype_argument (tree, tree);
135 static tree convert_template_argument (tree, tree, tree,
136 tsubst_flags_t, int, tree);
137 static int for_each_template_parm (tree, tree_fn_t, void*,
138 struct pointer_set_t*, bool);
139 static tree expand_template_argument_pack (tree);
140 static tree build_template_parm_index (int, int, int, tree, tree);
141 static bool inline_needs_template_parms (tree);
142 static void push_inline_template_parms_recursive (tree, int);
143 static tree retrieve_local_specialization (tree);
144 static void register_local_specialization (tree, tree);
145 static hashval_t hash_specialization (const void *p);
146 static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
147 static int mark_template_parm (tree, void *);
148 static int template_parm_this_level_p (tree, void *);
149 static tree tsubst_friend_function (tree, tree);
150 static tree tsubst_friend_class (tree, tree);
151 static int can_complete_type_without_circularity (tree);
152 static tree get_bindings (tree, tree, tree, bool);
153 static int template_decl_level (tree);
154 static int check_cv_quals_for_unify (int, tree, tree);
155 static void template_parm_level_and_index (tree, int*, int*);
156 static int unify_pack_expansion (tree, tree, tree, tree, int, bool, bool);
157 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
158 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
159 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
160 static void regenerate_decl_from_template (tree, tree);
161 static tree most_specialized_class (tree, tree, tsubst_flags_t);
162 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
163 static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
164 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
165 static bool check_specialization_scope (void);
166 static tree process_partial_specialization (tree);
167 static void set_current_access_from_decl (tree);
168 static tree get_template_base (tree, tree, tree, tree);
169 static tree try_class_unification (tree, tree, tree, tree);
170 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
171 tree, tree);
172 static bool template_template_parm_bindings_ok_p (tree, tree);
173 static int template_args_equal (tree, tree);
174 static void tsubst_default_arguments (tree);
175 static tree for_each_template_parm_r (tree *, int *, void *);
176 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
177 static void copy_default_args_to_explicit_spec (tree);
178 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
179 static int eq_local_specializations (const void *, const void *);
180 static bool dependent_template_arg_p (tree);
181 static bool any_template_arguments_need_structural_equality_p (tree);
182 static bool dependent_type_p_r (tree);
183 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
184 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
185 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
186 static tree tsubst_decl (tree, tree, tsubst_flags_t);
187 static void perform_typedefs_access_check (tree tmpl, tree targs);
188 static void append_type_to_template_for_access_check_1 (tree, tree, tree,
189 location_t);
190 static hashval_t iterative_hash_template_arg (tree arg, hashval_t val);
191 static tree listify (tree);
192 static tree listify_autos (tree, tree);
194 /* Make the current scope suitable for access checking when we are
195 processing T. T can be FUNCTION_DECL for instantiated function
196 template, or VAR_DECL for static member variable (need by
197 instantiate_decl). */
199 static void
200 push_access_scope (tree t)
202 gcc_assert (TREE_CODE (t) == FUNCTION_DECL
203 || TREE_CODE (t) == VAR_DECL);
205 if (DECL_FRIEND_CONTEXT (t))
206 push_nested_class (DECL_FRIEND_CONTEXT (t));
207 else if (DECL_CLASS_SCOPE_P (t))
208 push_nested_class (DECL_CONTEXT (t));
209 else
210 push_to_top_level ();
212 if (TREE_CODE (t) == FUNCTION_DECL)
214 saved_access_scope = tree_cons
215 (NULL_TREE, current_function_decl, saved_access_scope);
216 current_function_decl = t;
220 /* Restore the scope set up by push_access_scope. T is the node we
221 are processing. */
223 static void
224 pop_access_scope (tree t)
226 if (TREE_CODE (t) == FUNCTION_DECL)
228 current_function_decl = TREE_VALUE (saved_access_scope);
229 saved_access_scope = TREE_CHAIN (saved_access_scope);
232 if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
233 pop_nested_class ();
234 else
235 pop_from_top_level ();
238 /* Do any processing required when DECL (a member template
239 declaration) is finished. Returns the TEMPLATE_DECL corresponding
240 to DECL, unless it is a specialization, in which case the DECL
241 itself is returned. */
243 tree
244 finish_member_template_decl (tree decl)
246 if (decl == error_mark_node)
247 return error_mark_node;
249 gcc_assert (DECL_P (decl));
251 if (TREE_CODE (decl) == TYPE_DECL)
253 tree type;
255 type = TREE_TYPE (decl);
256 if (type == error_mark_node)
257 return error_mark_node;
258 if (MAYBE_CLASS_TYPE_P (type)
259 && CLASSTYPE_TEMPLATE_INFO (type)
260 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
262 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
263 check_member_template (tmpl);
264 return tmpl;
266 return NULL_TREE;
268 else if (TREE_CODE (decl) == FIELD_DECL)
269 error ("data member %qD cannot be a member template", decl);
270 else if (DECL_TEMPLATE_INFO (decl))
272 if (!DECL_TEMPLATE_SPECIALIZATION (decl))
274 check_member_template (DECL_TI_TEMPLATE (decl));
275 return DECL_TI_TEMPLATE (decl);
277 else
278 return decl;
280 else
281 error ("invalid member template declaration %qD", decl);
283 return error_mark_node;
286 /* Create a template info node. */
288 tree
289 build_template_info (tree template_decl, tree template_args)
291 tree result = make_node (TEMPLATE_INFO);
292 TI_TEMPLATE (result) = template_decl;
293 TI_ARGS (result) = template_args;
294 return result;
297 /* Return the template info node corresponding to T, whatever T is. */
299 tree
300 get_template_info (const_tree t)
302 tree tinfo = NULL_TREE;
304 if (!t || t == error_mark_node)
305 return NULL;
307 if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
308 tinfo = DECL_TEMPLATE_INFO (t);
310 if (!tinfo && DECL_IMPLICIT_TYPEDEF_P (t))
311 t = TREE_TYPE (t);
313 if (TAGGED_TYPE_P (t))
314 tinfo = TYPE_TEMPLATE_INFO (t);
315 else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
316 tinfo = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
318 return tinfo;
321 /* Returns the template nesting level of the indicated class TYPE.
323 For example, in:
324 template <class T>
325 struct A
327 template <class U>
328 struct B {};
331 A<T>::B<U> has depth two, while A<T> has depth one.
332 Both A<T>::B<int> and A<int>::B<U> have depth one, if
333 they are instantiations, not specializations.
335 This function is guaranteed to return 0 if passed NULL_TREE so
336 that, for example, `template_class_depth (current_class_type)' is
337 always safe. */
340 template_class_depth (tree type)
342 int depth;
344 for (depth = 0;
345 type && TREE_CODE (type) != NAMESPACE_DECL;
346 type = (TREE_CODE (type) == FUNCTION_DECL)
347 ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
349 tree tinfo = get_template_info (type);
351 if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
352 && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
353 ++depth;
356 return depth;
359 /* Subroutine of maybe_begin_member_template_processing.
360 Returns true if processing DECL needs us to push template parms. */
362 static bool
363 inline_needs_template_parms (tree decl)
365 if (! DECL_TEMPLATE_INFO (decl))
366 return false;
368 return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
369 > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
372 /* Subroutine of maybe_begin_member_template_processing.
373 Push the template parms in PARMS, starting from LEVELS steps into the
374 chain, and ending at the beginning, since template parms are listed
375 innermost first. */
377 static void
378 push_inline_template_parms_recursive (tree parmlist, int levels)
380 tree parms = TREE_VALUE (parmlist);
381 int i;
383 if (levels > 1)
384 push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
386 ++processing_template_decl;
387 current_template_parms
388 = tree_cons (size_int (processing_template_decl),
389 parms, current_template_parms);
390 TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
392 begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
393 NULL);
394 for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
396 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
398 if (parm == error_mark_node)
399 continue;
401 gcc_assert (DECL_P (parm));
403 switch (TREE_CODE (parm))
405 case TYPE_DECL:
406 case TEMPLATE_DECL:
407 pushdecl (parm);
408 break;
410 case PARM_DECL:
412 /* Make a CONST_DECL as is done in process_template_parm.
413 It is ugly that we recreate this here; the original
414 version built in process_template_parm is no longer
415 available. */
416 tree decl = build_decl (DECL_SOURCE_LOCATION (parm),
417 CONST_DECL, DECL_NAME (parm),
418 TREE_TYPE (parm));
419 DECL_ARTIFICIAL (decl) = 1;
420 TREE_CONSTANT (decl) = 1;
421 TREE_READONLY (decl) = 1;
422 DECL_INITIAL (decl) = DECL_INITIAL (parm);
423 SET_DECL_TEMPLATE_PARM_P (decl);
424 pushdecl (decl);
426 break;
428 default:
429 gcc_unreachable ();
434 /* Restore the template parameter context for a member template or
435 a friend template defined in a class definition. */
437 void
438 maybe_begin_member_template_processing (tree decl)
440 tree parms;
441 int levels = 0;
443 if (inline_needs_template_parms (decl))
445 parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
446 levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
448 if (DECL_TEMPLATE_SPECIALIZATION (decl))
450 --levels;
451 parms = TREE_CHAIN (parms);
454 push_inline_template_parms_recursive (parms, levels);
457 /* Remember how many levels of template parameters we pushed so that
458 we can pop them later. */
459 VEC_safe_push (int, heap, inline_parm_levels, levels);
462 /* Undo the effects of maybe_begin_member_template_processing. */
464 void
465 maybe_end_member_template_processing (void)
467 int i;
468 int last;
470 if (VEC_length (int, inline_parm_levels) == 0)
471 return;
473 last = VEC_pop (int, inline_parm_levels);
474 for (i = 0; i < last; ++i)
476 --processing_template_decl;
477 current_template_parms = TREE_CHAIN (current_template_parms);
478 poplevel (0, 0, 0);
482 /* Return a new template argument vector which contains all of ARGS,
483 but has as its innermost set of arguments the EXTRA_ARGS. */
485 static tree
486 add_to_template_args (tree args, tree extra_args)
488 tree new_args;
489 int extra_depth;
490 int i;
491 int j;
493 if (args == NULL_TREE)
494 return extra_args;
496 extra_depth = TMPL_ARGS_DEPTH (extra_args);
497 new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
499 for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
500 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
502 for (j = 1; j <= extra_depth; ++j, ++i)
503 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
505 return new_args;
508 /* Like add_to_template_args, but only the outermost ARGS are added to
509 the EXTRA_ARGS. In particular, all but TMPL_ARGS_DEPTH
510 (EXTRA_ARGS) levels are added. This function is used to combine
511 the template arguments from a partial instantiation with the
512 template arguments used to attain the full instantiation from the
513 partial instantiation. */
515 static tree
516 add_outermost_template_args (tree args, tree extra_args)
518 tree new_args;
520 /* If there are more levels of EXTRA_ARGS than there are ARGS,
521 something very fishy is going on. */
522 gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
524 /* If *all* the new arguments will be the EXTRA_ARGS, just return
525 them. */
526 if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
527 return extra_args;
529 /* For the moment, we make ARGS look like it contains fewer levels. */
530 TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
532 new_args = add_to_template_args (args, extra_args);
534 /* Now, we restore ARGS to its full dimensions. */
535 TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
537 return new_args;
540 /* Return the N levels of innermost template arguments from the ARGS. */
542 tree
543 get_innermost_template_args (tree args, int n)
545 tree new_args;
546 int extra_levels;
547 int i;
549 gcc_assert (n >= 0);
551 /* If N is 1, just return the innermost set of template arguments. */
552 if (n == 1)
553 return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
555 /* If we're not removing anything, just return the arguments we were
556 given. */
557 extra_levels = TMPL_ARGS_DEPTH (args) - n;
558 gcc_assert (extra_levels >= 0);
559 if (extra_levels == 0)
560 return args;
562 /* Make a new set of arguments, not containing the outer arguments. */
563 new_args = make_tree_vec (n);
564 for (i = 1; i <= n; ++i)
565 SET_TMPL_ARGS_LEVEL (new_args, i,
566 TMPL_ARGS_LEVEL (args, i + extra_levels));
568 return new_args;
571 /* The inverse of get_innermost_template_args: Return all but the innermost
572 EXTRA_LEVELS levels of template arguments from the ARGS. */
574 static tree
575 strip_innermost_template_args (tree args, int extra_levels)
577 tree new_args;
578 int n = TMPL_ARGS_DEPTH (args) - extra_levels;
579 int i;
581 gcc_assert (n >= 0);
583 /* If N is 1, just return the outermost set of template arguments. */
584 if (n == 1)
585 return TMPL_ARGS_LEVEL (args, 1);
587 /* If we're not removing anything, just return the arguments we were
588 given. */
589 gcc_assert (extra_levels >= 0);
590 if (extra_levels == 0)
591 return args;
593 /* Make a new set of arguments, not containing the inner arguments. */
594 new_args = make_tree_vec (n);
595 for (i = 1; i <= n; ++i)
596 SET_TMPL_ARGS_LEVEL (new_args, i,
597 TMPL_ARGS_LEVEL (args, i));
599 return new_args;
602 /* We've got a template header coming up; push to a new level for storing
603 the parms. */
605 void
606 begin_template_parm_list (void)
608 /* We use a non-tag-transparent scope here, which causes pushtag to
609 put tags in this scope, rather than in the enclosing class or
610 namespace scope. This is the right thing, since we want
611 TEMPLATE_DECLS, and not TYPE_DECLS for template classes. For a
612 global template class, push_template_decl handles putting the
613 TEMPLATE_DECL into top-level scope. For a nested template class,
614 e.g.:
616 template <class T> struct S1 {
617 template <class T> struct S2 {};
620 pushtag contains special code to call pushdecl_with_scope on the
621 TEMPLATE_DECL for S2. */
622 begin_scope (sk_template_parms, NULL);
623 ++processing_template_decl;
624 ++processing_template_parmlist;
625 note_template_header (0);
628 /* This routine is called when a specialization is declared. If it is
629 invalid to declare a specialization here, an error is reported and
630 false is returned, otherwise this routine will return true. */
632 static bool
633 check_specialization_scope (void)
635 tree scope = current_scope ();
637 /* [temp.expl.spec]
639 An explicit specialization shall be declared in the namespace of
640 which the template is a member, or, for member templates, in the
641 namespace of which the enclosing class or enclosing class
642 template is a member. An explicit specialization of a member
643 function, member class or static data member of a class template
644 shall be declared in the namespace of which the class template
645 is a member. */
646 if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
648 error ("explicit specialization in non-namespace scope %qD", scope);
649 return false;
652 /* [temp.expl.spec]
654 In an explicit specialization declaration for a member of a class
655 template or a member template that appears in namespace scope,
656 the member template and some of its enclosing class templates may
657 remain unspecialized, except that the declaration shall not
658 explicitly specialize a class member template if its enclosing
659 class templates are not explicitly specialized as well. */
660 if (current_template_parms)
662 error ("enclosing class templates are not explicitly specialized");
663 return false;
666 return true;
669 /* We've just seen template <>. */
671 bool
672 begin_specialization (void)
674 begin_scope (sk_template_spec, NULL);
675 note_template_header (1);
676 return check_specialization_scope ();
679 /* Called at then end of processing a declaration preceded by
680 template<>. */
682 void
683 end_specialization (void)
685 finish_scope ();
686 reset_specialization ();
689 /* Any template <>'s that we have seen thus far are not referring to a
690 function specialization. */
692 void
693 reset_specialization (void)
695 processing_specialization = 0;
696 template_header_count = 0;
699 /* We've just seen a template header. If SPECIALIZATION is nonzero,
700 it was of the form template <>. */
702 static void
703 note_template_header (int specialization)
705 processing_specialization = specialization;
706 template_header_count++;
709 /* We're beginning an explicit instantiation. */
711 void
712 begin_explicit_instantiation (void)
714 gcc_assert (!processing_explicit_instantiation);
715 processing_explicit_instantiation = true;
719 void
720 end_explicit_instantiation (void)
722 gcc_assert (processing_explicit_instantiation);
723 processing_explicit_instantiation = false;
726 /* An explicit specialization or partial specialization TMPL is being
727 declared. Check that the namespace in which the specialization is
728 occurring is permissible. Returns false iff it is invalid to
729 specialize TMPL in the current namespace. */
731 static bool
732 check_specialization_namespace (tree tmpl)
734 tree tpl_ns = decl_namespace_context (tmpl);
736 /* [tmpl.expl.spec]
738 An explicit specialization shall be declared in the namespace of
739 which the template is a member, or, for member templates, in the
740 namespace of which the enclosing class or enclosing class
741 template is a member. An explicit specialization of a member
742 function, member class or static data member of a class template
743 shall be declared in the namespace of which the class template is
744 a member. */
745 if (current_scope() != DECL_CONTEXT (tmpl)
746 && !at_namespace_scope_p ())
748 error ("specialization of %qD must appear at namespace scope", tmpl);
749 return false;
751 if (is_associated_namespace (current_namespace, tpl_ns))
752 /* Same or super-using namespace. */
753 return true;
754 else
756 permerror (input_location, "specialization of %qD in different namespace", tmpl);
757 permerror (input_location, " from definition of %q+#D", tmpl);
758 return false;
762 /* SPEC is an explicit instantiation. Check that it is valid to
763 perform this explicit instantiation in the current namespace. */
765 static void
766 check_explicit_instantiation_namespace (tree spec)
768 tree ns;
770 /* DR 275: An explicit instantiation shall appear in an enclosing
771 namespace of its template. */
772 ns = decl_namespace_context (spec);
773 if (!is_ancestor (current_namespace, ns))
774 permerror (input_location, "explicit instantiation of %qD in namespace %qD "
775 "(which does not enclose namespace %qD)",
776 spec, current_namespace, ns);
779 /* The TYPE is being declared. If it is a template type, that means it
780 is a partial specialization. Do appropriate error-checking. */
782 tree
783 maybe_process_partial_specialization (tree type)
785 tree context;
787 if (type == error_mark_node)
788 return error_mark_node;
790 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
792 error ("name of class shadows template template parameter %qD",
793 TYPE_NAME (type));
794 return error_mark_node;
797 context = TYPE_CONTEXT (type);
799 if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
801 /* This is for ordinary explicit specialization and partial
802 specialization of a template class such as:
804 template <> class C<int>;
808 template <class T> class C<T*>;
810 Make sure that `C<int>' and `C<T*>' are implicit instantiations. */
812 if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
813 && !COMPLETE_TYPE_P (type))
815 check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
816 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
817 if (processing_template_decl)
819 if (push_template_decl (TYPE_MAIN_DECL (type))
820 == error_mark_node)
821 return error_mark_node;
824 else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
825 error ("specialization of %qT after instantiation", type);
827 else if (CLASS_TYPE_P (type)
828 && !CLASSTYPE_USE_TEMPLATE (type)
829 && CLASSTYPE_TEMPLATE_INFO (type)
830 && context && CLASS_TYPE_P (context)
831 && CLASSTYPE_TEMPLATE_INFO (context))
833 /* This is for an explicit specialization of member class
834 template according to [temp.expl.spec/18]:
836 template <> template <class U> class C<int>::D;
838 The context `C<int>' must be an implicit instantiation.
839 Otherwise this is just a member class template declared
840 earlier like:
842 template <> class C<int> { template <class U> class D; };
843 template <> template <class U> class C<int>::D;
845 In the first case, `C<int>::D' is a specialization of `C<T>::D'
846 while in the second case, `C<int>::D' is a primary template
847 and `C<T>::D' may not exist. */
849 if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
850 && !COMPLETE_TYPE_P (type))
852 tree t;
853 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
855 if (current_namespace
856 != decl_namespace_context (tmpl))
858 permerror (input_location, "specializing %q#T in different namespace", type);
859 permerror (input_location, " from definition of %q+#D", tmpl);
862 /* Check for invalid specialization after instantiation:
864 template <> template <> class C<int>::D<int>;
865 template <> template <class U> class C<int>::D; */
867 for (t = DECL_TEMPLATE_INSTANTIATIONS (tmpl);
868 t; t = TREE_CHAIN (t))
870 tree inst = TREE_VALUE (t);
871 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (inst))
873 /* We already have a full specialization of this partial
874 instantiation. Reassign it to the new member
875 specialization template. */
876 spec_entry elt;
877 spec_entry **slot;
879 elt.tmpl = most_general_template (tmpl);
880 elt.args = CLASSTYPE_TI_ARGS (inst);
881 elt.spec = inst;
883 htab_remove_elt (type_specializations, &elt);
885 elt.tmpl = tmpl;
886 elt.args = INNERMOST_TEMPLATE_ARGS (elt.args);
888 slot = (spec_entry **)
889 htab_find_slot (type_specializations, &elt, INSERT);
890 *slot = ggc_alloc_spec_entry ();
891 **slot = elt;
893 else if (COMPLETE_OR_OPEN_TYPE_P (inst))
894 /* But if we've had an implicit instantiation, that's a
895 problem ([temp.expl.spec]/6). */
896 error ("specialization %qT after instantiation %qT",
897 type, inst);
900 /* Mark TYPE as a specialization. And as a result, we only
901 have one level of template argument for the innermost
902 class template. */
903 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
904 CLASSTYPE_TI_ARGS (type)
905 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
908 else if (processing_specialization)
910 error ("explicit specialization of non-template %qT", type);
911 return error_mark_node;
914 return type;
917 /* Returns nonzero if we can optimize the retrieval of specializations
918 for TMPL, a TEMPLATE_DECL. In particular, for such a template, we
919 do not use DECL_TEMPLATE_SPECIALIZATIONS at all. */
921 static inline bool
922 optimize_specialization_lookup_p (tree tmpl)
924 return (DECL_FUNCTION_TEMPLATE_P (tmpl)
925 && DECL_CLASS_SCOPE_P (tmpl)
926 /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
927 parameter. */
928 && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
929 /* The optimized lookup depends on the fact that the
930 template arguments for the member function template apply
931 purely to the containing class, which is not true if the
932 containing class is an explicit or partial
933 specialization. */
934 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
935 && !DECL_MEMBER_TEMPLATE_P (tmpl)
936 && !DECL_CONV_FN_P (tmpl)
937 /* It is possible to have a template that is not a member
938 template and is not a member of a template class:
940 template <typename T>
941 struct S { friend A::f(); };
943 Here, the friend function is a template, but the context does
944 not have template information. The optimized lookup relies
945 on having ARGS be the template arguments for both the class
946 and the function template. */
947 && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
950 /* Retrieve the specialization (in the sense of [temp.spec] - a
951 specialization is either an instantiation or an explicit
952 specialization) of TMPL for the given template ARGS. If there is
953 no such specialization, return NULL_TREE. The ARGS are a vector of
954 arguments, or a vector of vectors of arguments, in the case of
955 templates with more than one level of parameters.
957 If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
958 then we search for a partial specialization matching ARGS. This
959 parameter is ignored if TMPL is not a class template. */
961 static tree
962 retrieve_specialization (tree tmpl, tree args, hashval_t hash)
964 if (args == error_mark_node)
965 return NULL_TREE;
967 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
969 /* There should be as many levels of arguments as there are
970 levels of parameters. */
971 gcc_assert (TMPL_ARGS_DEPTH (args)
972 == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
974 if (optimize_specialization_lookup_p (tmpl))
976 tree class_template;
977 tree class_specialization;
978 VEC(tree,gc) *methods;
979 tree fns;
980 int idx;
982 /* The template arguments actually apply to the containing
983 class. Find the class specialization with those
984 arguments. */
985 class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
986 class_specialization
987 = retrieve_specialization (class_template, args, 0);
988 if (!class_specialization)
989 return NULL_TREE;
990 /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
991 for the specialization. */
992 idx = class_method_index_for_fn (class_specialization, tmpl);
993 if (idx == -1)
994 return NULL_TREE;
995 /* Iterate through the methods with the indicated name, looking
996 for the one that has an instance of TMPL. */
997 methods = CLASSTYPE_METHOD_VEC (class_specialization);
998 for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
1000 tree fn = OVL_CURRENT (fns);
1001 if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl
1002 /* using-declarations can add base methods to the method vec,
1003 and we don't want those here. */
1004 && DECL_CONTEXT (fn) == class_specialization)
1005 return fn;
1007 return NULL_TREE;
1009 else
1011 spec_entry *found;
1012 spec_entry elt;
1013 htab_t specializations;
1015 elt.tmpl = tmpl;
1016 elt.args = args;
1017 elt.spec = NULL_TREE;
1019 if (DECL_CLASS_TEMPLATE_P (tmpl))
1020 specializations = type_specializations;
1021 else
1022 specializations = decl_specializations;
1024 if (hash == 0)
1025 hash = hash_specialization (&elt);
1026 found = (spec_entry *) htab_find_with_hash (specializations, &elt, hash);
1027 if (found)
1028 return found->spec;
1031 return NULL_TREE;
1034 /* Like retrieve_specialization, but for local declarations. */
1036 static tree
1037 retrieve_local_specialization (tree tmpl)
1039 tree spec;
1041 if (local_specializations == NULL)
1042 return NULL_TREE;
1044 spec = (tree) htab_find_with_hash (local_specializations, tmpl,
1045 htab_hash_pointer (tmpl));
1046 return spec ? TREE_PURPOSE (spec) : NULL_TREE;
1049 /* Returns nonzero iff DECL is a specialization of TMPL. */
1052 is_specialization_of (tree decl, tree tmpl)
1054 tree t;
1056 if (TREE_CODE (decl) == FUNCTION_DECL)
1058 for (t = decl;
1059 t != NULL_TREE;
1060 t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1061 if (t == tmpl)
1062 return 1;
1064 else
1066 gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1068 for (t = TREE_TYPE (decl);
1069 t != NULL_TREE;
1070 t = CLASSTYPE_USE_TEMPLATE (t)
1071 ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1072 if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1073 return 1;
1076 return 0;
1079 /* Returns nonzero iff DECL is a specialization of friend declaration
1080 FRIEND_DECL according to [temp.friend]. */
1082 bool
1083 is_specialization_of_friend (tree decl, tree friend_decl)
1085 bool need_template = true;
1086 int template_depth;
1088 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1089 || TREE_CODE (decl) == TYPE_DECL);
1091 /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1092 of a template class, we want to check if DECL is a specialization
1093 if this. */
1094 if (TREE_CODE (friend_decl) == FUNCTION_DECL
1095 && DECL_TEMPLATE_INFO (friend_decl)
1096 && !DECL_USE_TEMPLATE (friend_decl))
1098 /* We want a TEMPLATE_DECL for `is_specialization_of'. */
1099 friend_decl = DECL_TI_TEMPLATE (friend_decl);
1100 need_template = false;
1102 else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1103 && !PRIMARY_TEMPLATE_P (friend_decl))
1104 need_template = false;
1106 /* There is nothing to do if this is not a template friend. */
1107 if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1108 return false;
1110 if (is_specialization_of (decl, friend_decl))
1111 return true;
1113 /* [temp.friend/6]
1114 A member of a class template may be declared to be a friend of a
1115 non-template class. In this case, the corresponding member of
1116 every specialization of the class template is a friend of the
1117 class granting friendship.
1119 For example, given a template friend declaration
1121 template <class T> friend void A<T>::f();
1123 the member function below is considered a friend
1125 template <> struct A<int> {
1126 void f();
1129 For this type of template friend, TEMPLATE_DEPTH below will be
1130 nonzero. To determine if DECL is a friend of FRIEND, we first
1131 check if the enclosing class is a specialization of another. */
1133 template_depth = template_class_depth (DECL_CONTEXT (friend_decl));
1134 if (template_depth
1135 && DECL_CLASS_SCOPE_P (decl)
1136 && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1137 CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1139 /* Next, we check the members themselves. In order to handle
1140 a few tricky cases, such as when FRIEND_DECL's are
1142 template <class T> friend void A<T>::g(T t);
1143 template <class T> template <T t> friend void A<T>::h();
1145 and DECL's are
1147 void A<int>::g(int);
1148 template <int> void A<int>::h();
1150 we need to figure out ARGS, the template arguments from
1151 the context of DECL. This is required for template substitution
1152 of `T' in the function parameter of `g' and template parameter
1153 of `h' in the above examples. Here ARGS corresponds to `int'. */
1155 tree context = DECL_CONTEXT (decl);
1156 tree args = NULL_TREE;
1157 int current_depth = 0;
1159 while (current_depth < template_depth)
1161 if (CLASSTYPE_TEMPLATE_INFO (context))
1163 if (current_depth == 0)
1164 args = TYPE_TI_ARGS (context);
1165 else
1166 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1167 current_depth++;
1169 context = TYPE_CONTEXT (context);
1172 if (TREE_CODE (decl) == FUNCTION_DECL)
1174 bool is_template;
1175 tree friend_type;
1176 tree decl_type;
1177 tree friend_args_type;
1178 tree decl_args_type;
1180 /* Make sure that both DECL and FRIEND_DECL are templates or
1181 non-templates. */
1182 is_template = DECL_TEMPLATE_INFO (decl)
1183 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1184 if (need_template ^ is_template)
1185 return false;
1186 else if (is_template)
1188 /* If both are templates, check template parameter list. */
1189 tree friend_parms
1190 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1191 args, tf_none);
1192 if (!comp_template_parms
1193 (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1194 friend_parms))
1195 return false;
1197 decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1199 else
1200 decl_type = TREE_TYPE (decl);
1202 friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1203 tf_none, NULL_TREE);
1204 if (friend_type == error_mark_node)
1205 return false;
1207 /* Check if return types match. */
1208 if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1209 return false;
1211 /* Check if function parameter types match, ignoring the
1212 `this' parameter. */
1213 friend_args_type = TYPE_ARG_TYPES (friend_type);
1214 decl_args_type = TYPE_ARG_TYPES (decl_type);
1215 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1216 friend_args_type = TREE_CHAIN (friend_args_type);
1217 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1218 decl_args_type = TREE_CHAIN (decl_args_type);
1220 return compparms (decl_args_type, friend_args_type);
1222 else
1224 /* DECL is a TYPE_DECL */
1225 bool is_template;
1226 tree decl_type = TREE_TYPE (decl);
1228 /* Make sure that both DECL and FRIEND_DECL are templates or
1229 non-templates. */
1230 is_template
1231 = CLASSTYPE_TEMPLATE_INFO (decl_type)
1232 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1234 if (need_template ^ is_template)
1235 return false;
1236 else if (is_template)
1238 tree friend_parms;
1239 /* If both are templates, check the name of the two
1240 TEMPLATE_DECL's first because is_friend didn't. */
1241 if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1242 != DECL_NAME (friend_decl))
1243 return false;
1245 /* Now check template parameter list. */
1246 friend_parms
1247 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1248 args, tf_none);
1249 return comp_template_parms
1250 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1251 friend_parms);
1253 else
1254 return (DECL_NAME (decl)
1255 == DECL_NAME (friend_decl));
1258 return false;
1261 /* Register the specialization SPEC as a specialization of TMPL with
1262 the indicated ARGS. IS_FRIEND indicates whether the specialization
1263 is actually just a friend declaration. Returns SPEC, or an
1264 equivalent prior declaration, if available. */
1266 static tree
1267 register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
1268 hashval_t hash)
1270 tree fn;
1271 spec_entry **slot = NULL;
1272 spec_entry elt;
1274 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL && DECL_P (spec));
1276 if (TREE_CODE (spec) == FUNCTION_DECL
1277 && uses_template_parms (DECL_TI_ARGS (spec)))
1278 /* This is the FUNCTION_DECL for a partial instantiation. Don't
1279 register it; we want the corresponding TEMPLATE_DECL instead.
1280 We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1281 the more obvious `uses_template_parms (spec)' to avoid problems
1282 with default function arguments. In particular, given
1283 something like this:
1285 template <class T> void f(T t1, T t = T())
1287 the default argument expression is not substituted for in an
1288 instantiation unless and until it is actually needed. */
1289 return spec;
1291 if (optimize_specialization_lookup_p (tmpl))
1292 /* We don't put these specializations in the hash table, but we might
1293 want to give an error about a mismatch. */
1294 fn = retrieve_specialization (tmpl, args, 0);
1295 else
1297 elt.tmpl = tmpl;
1298 elt.args = args;
1299 elt.spec = spec;
1301 if (hash == 0)
1302 hash = hash_specialization (&elt);
1304 slot = (spec_entry **)
1305 htab_find_slot_with_hash (decl_specializations, &elt, hash, INSERT);
1306 if (*slot)
1307 fn = (*slot)->spec;
1308 else
1309 fn = NULL_TREE;
1312 /* We can sometimes try to re-register a specialization that we've
1313 already got. In particular, regenerate_decl_from_template calls
1314 duplicate_decls which will update the specialization list. But,
1315 we'll still get called again here anyhow. It's more convenient
1316 to simply allow this than to try to prevent it. */
1317 if (fn == spec)
1318 return spec;
1319 else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1321 if (DECL_TEMPLATE_INSTANTIATION (fn))
1323 if (DECL_ODR_USED (fn)
1324 || DECL_EXPLICIT_INSTANTIATION (fn))
1326 error ("specialization of %qD after instantiation",
1327 fn);
1328 return error_mark_node;
1330 else
1332 tree clone;
1333 /* This situation should occur only if the first
1334 specialization is an implicit instantiation, the
1335 second is an explicit specialization, and the
1336 implicit instantiation has not yet been used. That
1337 situation can occur if we have implicitly
1338 instantiated a member function and then specialized
1339 it later.
1341 We can also wind up here if a friend declaration that
1342 looked like an instantiation turns out to be a
1343 specialization:
1345 template <class T> void foo(T);
1346 class S { friend void foo<>(int) };
1347 template <> void foo(int);
1349 We transform the existing DECL in place so that any
1350 pointers to it become pointers to the updated
1351 declaration.
1353 If there was a definition for the template, but not
1354 for the specialization, we want this to look as if
1355 there were no definition, and vice versa. */
1356 DECL_INITIAL (fn) = NULL_TREE;
1357 duplicate_decls (spec, fn, is_friend);
1358 /* The call to duplicate_decls will have applied
1359 [temp.expl.spec]:
1361 An explicit specialization of a function template
1362 is inline only if it is explicitly declared to be,
1363 and independently of whether its function template
1366 to the primary function; now copy the inline bits to
1367 the various clones. */
1368 FOR_EACH_CLONE (clone, fn)
1370 DECL_DECLARED_INLINE_P (clone)
1371 = DECL_DECLARED_INLINE_P (fn);
1372 DECL_SOURCE_LOCATION (clone)
1373 = DECL_SOURCE_LOCATION (fn);
1375 check_specialization_namespace (fn);
1377 return fn;
1380 else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1382 if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1383 /* Dup decl failed, but this is a new definition. Set the
1384 line number so any errors match this new
1385 definition. */
1386 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1388 return fn;
1391 else if (fn)
1392 return duplicate_decls (spec, fn, is_friend);
1394 /* A specialization must be declared in the same namespace as the
1395 template it is specializing. */
1396 if (DECL_TEMPLATE_SPECIALIZATION (spec)
1397 && !check_specialization_namespace (tmpl))
1398 DECL_CONTEXT (spec) = DECL_CONTEXT (tmpl);
1400 if (!optimize_specialization_lookup_p (tmpl))
1402 gcc_assert (tmpl && args && spec);
1403 *slot = ggc_alloc_spec_entry ();
1404 **slot = elt;
1405 if (TREE_CODE (spec) == FUNCTION_DECL && DECL_NAMESPACE_SCOPE_P (spec)
1406 && PRIMARY_TEMPLATE_P (tmpl)
1407 && DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (tmpl)) == NULL_TREE)
1408 /* TMPL is a forward declaration of a template function; keep a list
1409 of all specializations in case we need to reassign them to a friend
1410 template later in tsubst_friend_function. */
1411 DECL_TEMPLATE_INSTANTIATIONS (tmpl)
1412 = tree_cons (args, spec, DECL_TEMPLATE_INSTANTIATIONS (tmpl));
1415 return spec;
1418 /* Returns true iff two spec_entry nodes are equivalent. Only compares the
1419 TMPL and ARGS members, ignores SPEC. */
1421 static int
1422 eq_specializations (const void *p1, const void *p2)
1424 const spec_entry *e1 = (const spec_entry *)p1;
1425 const spec_entry *e2 = (const spec_entry *)p2;
1427 return (e1->tmpl == e2->tmpl
1428 && comp_template_args (e1->args, e2->args));
1431 /* Returns a hash for a template TMPL and template arguments ARGS. */
1433 static hashval_t
1434 hash_tmpl_and_args (tree tmpl, tree args)
1436 hashval_t val = DECL_UID (tmpl);
1437 return iterative_hash_template_arg (args, val);
1440 /* Returns a hash for a spec_entry node based on the TMPL and ARGS members,
1441 ignoring SPEC. */
1443 static hashval_t
1444 hash_specialization (const void *p)
1446 const spec_entry *e = (const spec_entry *)p;
1447 return hash_tmpl_and_args (e->tmpl, e->args);
1450 /* Recursively calculate a hash value for a template argument ARG, for use
1451 in the hash tables of template specializations. */
1453 static hashval_t
1454 iterative_hash_template_arg (tree arg, hashval_t val)
1456 unsigned HOST_WIDE_INT i;
1457 enum tree_code code;
1458 char tclass;
1460 if (arg == NULL_TREE)
1461 return iterative_hash_object (arg, val);
1463 if (!TYPE_P (arg))
1464 STRIP_NOPS (arg);
1466 if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
1467 /* We can get one of these when re-hashing a previous entry in the middle
1468 of substituting into a pack expansion. Just look through it. */
1469 arg = ARGUMENT_PACK_SELECT_FROM_PACK (arg);
1471 code = TREE_CODE (arg);
1472 tclass = TREE_CODE_CLASS (code);
1474 val = iterative_hash_object (code, val);
1476 switch (code)
1478 case ERROR_MARK:
1479 return val;
1481 case IDENTIFIER_NODE:
1482 return iterative_hash_object (IDENTIFIER_HASH_VALUE (arg), val);
1484 case TREE_VEC:
1486 int i, len = TREE_VEC_LENGTH (arg);
1487 for (i = 0; i < len; ++i)
1488 val = iterative_hash_template_arg (TREE_VEC_ELT (arg, i), val);
1489 return val;
1492 case TYPE_PACK_EXPANSION:
1493 case EXPR_PACK_EXPANSION:
1494 return iterative_hash_template_arg (PACK_EXPANSION_PATTERN (arg), val);
1496 case TYPE_ARGUMENT_PACK:
1497 case NONTYPE_ARGUMENT_PACK:
1498 return iterative_hash_template_arg (ARGUMENT_PACK_ARGS (arg), val);
1500 case TREE_LIST:
1501 for (; arg; arg = TREE_CHAIN (arg))
1502 val = iterative_hash_template_arg (TREE_VALUE (arg), val);
1503 return val;
1505 case OVERLOAD:
1506 for (; arg; arg = OVL_CHAIN (arg))
1507 val = iterative_hash_template_arg (OVL_FUNCTION (arg), val);
1508 return val;
1510 case CONSTRUCTOR:
1512 tree field, value;
1513 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (arg), i, field, value)
1515 val = iterative_hash_template_arg (field, val);
1516 val = iterative_hash_template_arg (value, val);
1518 return val;
1521 case PARM_DECL:
1522 if (!DECL_ARTIFICIAL (arg))
1523 val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
1524 return iterative_hash_template_arg (TREE_TYPE (arg), val);
1526 case TARGET_EXPR:
1527 return iterative_hash_template_arg (TARGET_EXPR_INITIAL (arg), val);
1529 case PTRMEM_CST:
1530 val = iterative_hash_template_arg (PTRMEM_CST_CLASS (arg), val);
1531 return iterative_hash_template_arg (PTRMEM_CST_MEMBER (arg), val);
1533 case TEMPLATE_PARM_INDEX:
1534 val = iterative_hash_template_arg
1535 (TREE_TYPE (TEMPLATE_PARM_DECL (arg)), val);
1536 val = iterative_hash_object (TEMPLATE_PARM_LEVEL (arg), val);
1537 return iterative_hash_object (TEMPLATE_PARM_IDX (arg), val);
1539 case TRAIT_EXPR:
1540 val = iterative_hash_object (TRAIT_EXPR_KIND (arg), val);
1541 val = iterative_hash_template_arg (TRAIT_EXPR_TYPE1 (arg), val);
1542 return iterative_hash_template_arg (TRAIT_EXPR_TYPE2 (arg), val);
1544 case BASELINK:
1545 val = iterative_hash_template_arg (BINFO_TYPE (BASELINK_BINFO (arg)),
1546 val);
1547 return iterative_hash_template_arg (DECL_NAME (get_first_fn (arg)),
1548 val);
1550 case MODOP_EXPR:
1551 val = iterative_hash_template_arg (TREE_OPERAND (arg, 0), val);
1552 code = TREE_CODE (TREE_OPERAND (arg, 1));
1553 val = iterative_hash_object (code, val);
1554 return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
1556 case ARRAY_TYPE:
1557 /* layout_type sets structural equality for arrays of
1558 incomplete type, so we can't rely on the canonical type
1559 for hashing. */
1560 val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1561 return iterative_hash_template_arg (TYPE_DOMAIN (arg), val);
1563 case LAMBDA_EXPR:
1564 /* A lambda can't appear in a template arg, but don't crash on
1565 erroneous input. */
1566 gcc_assert (seen_error ());
1567 return val;
1569 case CAST_EXPR:
1570 case STATIC_CAST_EXPR:
1571 case REINTERPRET_CAST_EXPR:
1572 case CONST_CAST_EXPR:
1573 case DYNAMIC_CAST_EXPR:
1574 case NEW_EXPR:
1575 val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1576 /* Now hash operands as usual. */
1577 break;
1579 default:
1580 break;
1583 switch (tclass)
1585 case tcc_type:
1586 if (TYPE_CANONICAL (arg))
1587 return iterative_hash_object (TYPE_HASH (TYPE_CANONICAL (arg)),
1588 val);
1589 else if (TREE_CODE (arg) == DECLTYPE_TYPE)
1590 return iterative_hash_template_arg (DECLTYPE_TYPE_EXPR (arg), val);
1591 /* Otherwise just compare the types during lookup. */
1592 return val;
1594 case tcc_declaration:
1595 case tcc_constant:
1596 return iterative_hash_expr (arg, val);
1598 default:
1599 gcc_assert (IS_EXPR_CODE_CLASS (tclass));
1601 unsigned n = TREE_OPERAND_LENGTH (arg);
1602 for (i = 0; i < n; ++i)
1603 val = iterative_hash_template_arg (TREE_OPERAND (arg, i), val);
1604 return val;
1607 gcc_unreachable ();
1608 return 0;
1611 /* Unregister the specialization SPEC as a specialization of TMPL.
1612 Replace it with NEW_SPEC, if NEW_SPEC is non-NULL. Returns true
1613 if the SPEC was listed as a specialization of TMPL.
1615 Note that SPEC has been ggc_freed, so we can't look inside it. */
1617 bool
1618 reregister_specialization (tree spec, tree tinfo, tree new_spec)
1620 spec_entry **slot;
1621 spec_entry elt;
1623 elt.tmpl = most_general_template (TI_TEMPLATE (tinfo));
1624 elt.args = TI_ARGS (tinfo);
1625 elt.spec = NULL_TREE;
1627 slot = (spec_entry **) htab_find_slot (decl_specializations, &elt, INSERT);
1628 if (*slot)
1630 gcc_assert ((*slot)->spec == spec || (*slot)->spec == new_spec);
1631 gcc_assert (new_spec != NULL_TREE);
1632 (*slot)->spec = new_spec;
1633 return 1;
1636 return 0;
1639 /* Compare an entry in the local specializations hash table P1 (which
1640 is really a pointer to a TREE_LIST) with P2 (which is really a
1641 DECL). */
1643 static int
1644 eq_local_specializations (const void *p1, const void *p2)
1646 return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1649 /* Hash P1, an entry in the local specializations table. */
1651 static hashval_t
1652 hash_local_specialization (const void* p1)
1654 return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1657 /* Like register_specialization, but for local declarations. We are
1658 registering SPEC, an instantiation of TMPL. */
1660 static void
1661 register_local_specialization (tree spec, tree tmpl)
1663 void **slot;
1665 slot = htab_find_slot_with_hash (local_specializations, tmpl,
1666 htab_hash_pointer (tmpl), INSERT);
1667 *slot = build_tree_list (spec, tmpl);
1670 /* TYPE is a class type. Returns true if TYPE is an explicitly
1671 specialized class. */
1673 bool
1674 explicit_class_specialization_p (tree type)
1676 if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1677 return false;
1678 return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1681 /* Print the list of functions at FNS, going through all the overloads
1682 for each element of the list. Alternatively, FNS can not be a
1683 TREE_LIST, in which case it will be printed together with all the
1684 overloads.
1686 MORE and *STR should respectively be FALSE and NULL when the function
1687 is called from the outside. They are used internally on recursive
1688 calls. print_candidates manages the two parameters and leaves NULL
1689 in *STR when it ends. */
1691 static void
1692 print_candidates_1 (tree fns, bool more, const char **str)
1694 tree fn, fn2;
1695 char *spaces = NULL;
1697 for (fn = fns; fn; fn = OVL_NEXT (fn))
1698 if (TREE_CODE (fn) == TREE_LIST)
1700 gcc_assert (!OVL_NEXT (fn) && !is_overloaded_fn (fn));
1701 for (fn2 = fn; fn2 != NULL_TREE; fn2 = TREE_CHAIN (fn2))
1702 print_candidates_1 (TREE_VALUE (fn2),
1703 TREE_CHAIN (fn2) || more, str);
1705 else
1707 if (!*str)
1709 /* Pick the prefix string. */
1710 if (!more && !OVL_NEXT (fns))
1712 error ("candidate is: %+#D", OVL_CURRENT (fn));
1713 continue;
1716 *str = _("candidates are:");
1717 spaces = get_spaces (*str);
1719 error ("%s %+#D", *str, OVL_CURRENT (fn));
1720 *str = spaces ? spaces : *str;
1723 if (!more)
1725 free (spaces);
1726 *str = NULL;
1730 /* Print the list of candidate FNS in an error message. */
1732 void
1733 print_candidates (tree fns)
1735 const char *str = NULL;
1736 print_candidates_1 (fns, false, &str);
1737 gcc_assert (str == NULL);
1740 /* Returns the template (one of the functions given by TEMPLATE_ID)
1741 which can be specialized to match the indicated DECL with the
1742 explicit template args given in TEMPLATE_ID. The DECL may be
1743 NULL_TREE if none is available. In that case, the functions in
1744 TEMPLATE_ID are non-members.
1746 If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1747 specialization of a member template.
1749 The TEMPLATE_COUNT is the number of references to qualifying
1750 template classes that appeared in the name of the function. See
1751 check_explicit_specialization for a more accurate description.
1753 TSK indicates what kind of template declaration (if any) is being
1754 declared. TSK_TEMPLATE indicates that the declaration given by
1755 DECL, though a FUNCTION_DECL, has template parameters, and is
1756 therefore a template function.
1758 The template args (those explicitly specified and those deduced)
1759 are output in a newly created vector *TARGS_OUT.
1761 If it is impossible to determine the result, an error message is
1762 issued. The error_mark_node is returned to indicate failure. */
1764 static tree
1765 determine_specialization (tree template_id,
1766 tree decl,
1767 tree* targs_out,
1768 int need_member_template,
1769 int template_count,
1770 tmpl_spec_kind tsk)
1772 tree fns;
1773 tree targs;
1774 tree explicit_targs;
1775 tree candidates = NULL_TREE;
1776 /* A TREE_LIST of templates of which DECL may be a specialization.
1777 The TREE_VALUE of each node is a TEMPLATE_DECL. The
1778 corresponding TREE_PURPOSE is the set of template arguments that,
1779 when used to instantiate the template, would produce a function
1780 with the signature of DECL. */
1781 tree templates = NULL_TREE;
1782 int header_count;
1783 struct cp_binding_level *b;
1785 *targs_out = NULL_TREE;
1787 if (template_id == error_mark_node || decl == error_mark_node)
1788 return error_mark_node;
1790 fns = TREE_OPERAND (template_id, 0);
1791 explicit_targs = TREE_OPERAND (template_id, 1);
1793 if (fns == error_mark_node)
1794 return error_mark_node;
1796 /* Check for baselinks. */
1797 if (BASELINK_P (fns))
1798 fns = BASELINK_FUNCTIONS (fns);
1800 if (!is_overloaded_fn (fns))
1802 error ("%qD is not a function template", fns);
1803 return error_mark_node;
1806 /* Count the number of template headers specified for this
1807 specialization. */
1808 header_count = 0;
1809 for (b = current_binding_level;
1810 b->kind == sk_template_parms;
1811 b = b->level_chain)
1812 ++header_count;
1814 for (; fns; fns = OVL_NEXT (fns))
1816 tree fn = OVL_CURRENT (fns);
1818 if (TREE_CODE (fn) == TEMPLATE_DECL)
1820 tree decl_arg_types;
1821 tree fn_arg_types;
1823 /* In case of explicit specialization, we need to check if
1824 the number of template headers appearing in the specialization
1825 is correct. This is usually done in check_explicit_specialization,
1826 but the check done there cannot be exhaustive when specializing
1827 member functions. Consider the following code:
1829 template <> void A<int>::f(int);
1830 template <> template <> void A<int>::f(int);
1832 Assuming that A<int> is not itself an explicit specialization
1833 already, the first line specializes "f" which is a non-template
1834 member function, whilst the second line specializes "f" which
1835 is a template member function. So both lines are syntactically
1836 correct, and check_explicit_specialization does not reject
1837 them.
1839 Here, we can do better, as we are matching the specialization
1840 against the declarations. We count the number of template
1841 headers, and we check if they match TEMPLATE_COUNT + 1
1842 (TEMPLATE_COUNT is the number of qualifying template classes,
1843 plus there must be another header for the member template
1844 itself).
1846 Notice that if header_count is zero, this is not a
1847 specialization but rather a template instantiation, so there
1848 is no check we can perform here. */
1849 if (header_count && header_count != template_count + 1)
1850 continue;
1852 /* Check that the number of template arguments at the
1853 innermost level for DECL is the same as for FN. */
1854 if (current_binding_level->kind == sk_template_parms
1855 && !current_binding_level->explicit_spec_p
1856 && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1857 != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1858 (current_template_parms))))
1859 continue;
1861 /* DECL might be a specialization of FN. */
1862 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1863 fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1865 /* For a non-static member function, we need to make sure
1866 that the const qualification is the same. Since
1867 get_bindings does not try to merge the "this" parameter,
1868 we must do the comparison explicitly. */
1869 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1870 && !same_type_p (TREE_VALUE (fn_arg_types),
1871 TREE_VALUE (decl_arg_types)))
1872 continue;
1874 /* Skip the "this" parameter and, for constructors of
1875 classes with virtual bases, the VTT parameter. A
1876 full specialization of a constructor will have a VTT
1877 parameter, but a template never will. */
1878 decl_arg_types
1879 = skip_artificial_parms_for (decl, decl_arg_types);
1880 fn_arg_types
1881 = skip_artificial_parms_for (fn, fn_arg_types);
1883 /* Check that the number of function parameters matches.
1884 For example,
1885 template <class T> void f(int i = 0);
1886 template <> void f<int>();
1887 The specialization f<int> is invalid but is not caught
1888 by get_bindings below. */
1889 if (list_length (fn_arg_types) != list_length (decl_arg_types))
1890 continue;
1892 /* Function templates cannot be specializations; there are
1893 no partial specializations of functions. Therefore, if
1894 the type of DECL does not match FN, there is no
1895 match. */
1896 if (tsk == tsk_template)
1898 if (compparms (fn_arg_types, decl_arg_types))
1899 candidates = tree_cons (NULL_TREE, fn, candidates);
1900 continue;
1903 /* See whether this function might be a specialization of this
1904 template. */
1905 targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1907 if (!targs)
1908 /* We cannot deduce template arguments that when used to
1909 specialize TMPL will produce DECL. */
1910 continue;
1912 /* Save this template, and the arguments deduced. */
1913 templates = tree_cons (targs, fn, templates);
1915 else if (need_member_template)
1916 /* FN is an ordinary member function, and we need a
1917 specialization of a member template. */
1919 else if (TREE_CODE (fn) != FUNCTION_DECL)
1920 /* We can get IDENTIFIER_NODEs here in certain erroneous
1921 cases. */
1923 else if (!DECL_FUNCTION_MEMBER_P (fn))
1924 /* This is just an ordinary non-member function. Nothing can
1925 be a specialization of that. */
1927 else if (DECL_ARTIFICIAL (fn))
1928 /* Cannot specialize functions that are created implicitly. */
1930 else
1932 tree decl_arg_types;
1934 /* This is an ordinary member function. However, since
1935 we're here, we can assume it's enclosing class is a
1936 template class. For example,
1938 template <typename T> struct S { void f(); };
1939 template <> void S<int>::f() {}
1941 Here, S<int>::f is a non-template, but S<int> is a
1942 template class. If FN has the same type as DECL, we
1943 might be in business. */
1945 if (!DECL_TEMPLATE_INFO (fn))
1946 /* Its enclosing class is an explicit specialization
1947 of a template class. This is not a candidate. */
1948 continue;
1950 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1951 TREE_TYPE (TREE_TYPE (fn))))
1952 /* The return types differ. */
1953 continue;
1955 /* Adjust the type of DECL in case FN is a static member. */
1956 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1957 if (DECL_STATIC_FUNCTION_P (fn)
1958 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1959 decl_arg_types = TREE_CHAIN (decl_arg_types);
1961 if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1962 decl_arg_types))
1963 /* They match! */
1964 candidates = tree_cons (NULL_TREE, fn, candidates);
1968 if (templates && TREE_CHAIN (templates))
1970 /* We have:
1972 [temp.expl.spec]
1974 It is possible for a specialization with a given function
1975 signature to be instantiated from more than one function
1976 template. In such cases, explicit specification of the
1977 template arguments must be used to uniquely identify the
1978 function template specialization being specialized.
1980 Note that here, there's no suggestion that we're supposed to
1981 determine which of the candidate templates is most
1982 specialized. However, we, also have:
1984 [temp.func.order]
1986 Partial ordering of overloaded function template
1987 declarations is used in the following contexts to select
1988 the function template to which a function template
1989 specialization refers:
1991 -- when an explicit specialization refers to a function
1992 template.
1994 So, we do use the partial ordering rules, at least for now.
1995 This extension can only serve to make invalid programs valid,
1996 so it's safe. And, there is strong anecdotal evidence that
1997 the committee intended the partial ordering rules to apply;
1998 the EDG front end has that behavior, and John Spicer claims
1999 that the committee simply forgot to delete the wording in
2000 [temp.expl.spec]. */
2001 tree tmpl = most_specialized_instantiation (templates);
2002 if (tmpl != error_mark_node)
2004 templates = tmpl;
2005 TREE_CHAIN (templates) = NULL_TREE;
2009 if (templates == NULL_TREE && candidates == NULL_TREE)
2011 error ("template-id %qD for %q+D does not match any template "
2012 "declaration", template_id, decl);
2013 if (header_count && header_count != template_count + 1)
2014 inform (input_location, "saw %d %<template<>%>, need %d for "
2015 "specializing a member function template",
2016 header_count, template_count + 1);
2017 return error_mark_node;
2019 else if ((templates && TREE_CHAIN (templates))
2020 || (candidates && TREE_CHAIN (candidates))
2021 || (templates && candidates))
2023 error ("ambiguous template specialization %qD for %q+D",
2024 template_id, decl);
2025 candidates = chainon (candidates, templates);
2026 print_candidates (candidates);
2027 return error_mark_node;
2030 /* We have one, and exactly one, match. */
2031 if (candidates)
2033 tree fn = TREE_VALUE (candidates);
2034 *targs_out = copy_node (DECL_TI_ARGS (fn));
2035 /* DECL is a re-declaration or partial instantiation of a template
2036 function. */
2037 if (TREE_CODE (fn) == TEMPLATE_DECL)
2038 return fn;
2039 /* It was a specialization of an ordinary member function in a
2040 template class. */
2041 return DECL_TI_TEMPLATE (fn);
2044 /* It was a specialization of a template. */
2045 targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
2046 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
2048 *targs_out = copy_node (targs);
2049 SET_TMPL_ARGS_LEVEL (*targs_out,
2050 TMPL_ARGS_DEPTH (*targs_out),
2051 TREE_PURPOSE (templates));
2053 else
2054 *targs_out = TREE_PURPOSE (templates);
2055 return TREE_VALUE (templates);
2058 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
2059 but with the default argument values filled in from those in the
2060 TMPL_TYPES. */
2062 static tree
2063 copy_default_args_to_explicit_spec_1 (tree spec_types,
2064 tree tmpl_types)
2066 tree new_spec_types;
2068 if (!spec_types)
2069 return NULL_TREE;
2071 if (spec_types == void_list_node)
2072 return void_list_node;
2074 /* Substitute into the rest of the list. */
2075 new_spec_types =
2076 copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
2077 TREE_CHAIN (tmpl_types));
2079 /* Add the default argument for this parameter. */
2080 return hash_tree_cons (TREE_PURPOSE (tmpl_types),
2081 TREE_VALUE (spec_types),
2082 new_spec_types);
2085 /* DECL is an explicit specialization. Replicate default arguments
2086 from the template it specializes. (That way, code like:
2088 template <class T> void f(T = 3);
2089 template <> void f(double);
2090 void g () { f (); }
2092 works, as required.) An alternative approach would be to look up
2093 the correct default arguments at the call-site, but this approach
2094 is consistent with how implicit instantiations are handled. */
2096 static void
2097 copy_default_args_to_explicit_spec (tree decl)
2099 tree tmpl;
2100 tree spec_types;
2101 tree tmpl_types;
2102 tree new_spec_types;
2103 tree old_type;
2104 tree new_type;
2105 tree t;
2106 tree object_type = NULL_TREE;
2107 tree in_charge = NULL_TREE;
2108 tree vtt = NULL_TREE;
2110 /* See if there's anything we need to do. */
2111 tmpl = DECL_TI_TEMPLATE (decl);
2112 tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
2113 for (t = tmpl_types; t; t = TREE_CHAIN (t))
2114 if (TREE_PURPOSE (t))
2115 break;
2116 if (!t)
2117 return;
2119 old_type = TREE_TYPE (decl);
2120 spec_types = TYPE_ARG_TYPES (old_type);
2122 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2124 /* Remove the this pointer, but remember the object's type for
2125 CV quals. */
2126 object_type = TREE_TYPE (TREE_VALUE (spec_types));
2127 spec_types = TREE_CHAIN (spec_types);
2128 tmpl_types = TREE_CHAIN (tmpl_types);
2130 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
2132 /* DECL may contain more parameters than TMPL due to the extra
2133 in-charge parameter in constructors and destructors. */
2134 in_charge = spec_types;
2135 spec_types = TREE_CHAIN (spec_types);
2137 if (DECL_HAS_VTT_PARM_P (decl))
2139 vtt = spec_types;
2140 spec_types = TREE_CHAIN (spec_types);
2144 /* Compute the merged default arguments. */
2145 new_spec_types =
2146 copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
2148 /* Compute the new FUNCTION_TYPE. */
2149 if (object_type)
2151 if (vtt)
2152 new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
2153 TREE_VALUE (vtt),
2154 new_spec_types);
2156 if (in_charge)
2157 /* Put the in-charge parameter back. */
2158 new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
2159 TREE_VALUE (in_charge),
2160 new_spec_types);
2162 new_type = build_method_type_directly (object_type,
2163 TREE_TYPE (old_type),
2164 new_spec_types);
2166 else
2167 new_type = build_function_type (TREE_TYPE (old_type),
2168 new_spec_types);
2169 new_type = cp_build_type_attribute_variant (new_type,
2170 TYPE_ATTRIBUTES (old_type));
2171 new_type = build_exception_variant (new_type,
2172 TYPE_RAISES_EXCEPTIONS (old_type));
2173 TREE_TYPE (decl) = new_type;
2176 /* Check to see if the function just declared, as indicated in
2177 DECLARATOR, and in DECL, is a specialization of a function
2178 template. We may also discover that the declaration is an explicit
2179 instantiation at this point.
2181 Returns DECL, or an equivalent declaration that should be used
2182 instead if all goes well. Issues an error message if something is
2183 amiss. Returns error_mark_node if the error is not easily
2184 recoverable.
2186 FLAGS is a bitmask consisting of the following flags:
2188 2: The function has a definition.
2189 4: The function is a friend.
2191 The TEMPLATE_COUNT is the number of references to qualifying
2192 template classes that appeared in the name of the function. For
2193 example, in
2195 template <class T> struct S { void f(); };
2196 void S<int>::f();
2198 the TEMPLATE_COUNT would be 1. However, explicitly specialized
2199 classes are not counted in the TEMPLATE_COUNT, so that in
2201 template <class T> struct S {};
2202 template <> struct S<int> { void f(); }
2203 template <> void S<int>::f();
2205 the TEMPLATE_COUNT would be 0. (Note that this declaration is
2206 invalid; there should be no template <>.)
2208 If the function is a specialization, it is marked as such via
2209 DECL_TEMPLATE_SPECIALIZATION. Furthermore, its DECL_TEMPLATE_INFO
2210 is set up correctly, and it is added to the list of specializations
2211 for that template. */
2213 tree
2214 check_explicit_specialization (tree declarator,
2215 tree decl,
2216 int template_count,
2217 int flags)
2219 int have_def = flags & 2;
2220 int is_friend = flags & 4;
2221 int specialization = 0;
2222 int explicit_instantiation = 0;
2223 int member_specialization = 0;
2224 tree ctype = DECL_CLASS_CONTEXT (decl);
2225 tree dname = DECL_NAME (decl);
2226 tmpl_spec_kind tsk;
2228 if (is_friend)
2230 if (!processing_specialization)
2231 tsk = tsk_none;
2232 else
2233 tsk = tsk_excessive_parms;
2235 else
2236 tsk = current_tmpl_spec_kind (template_count);
2238 switch (tsk)
2240 case tsk_none:
2241 if (processing_specialization)
2243 specialization = 1;
2244 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2246 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2248 if (is_friend)
2249 /* This could be something like:
2251 template <class T> void f(T);
2252 class S { friend void f<>(int); } */
2253 specialization = 1;
2254 else
2256 /* This case handles bogus declarations like template <>
2257 template <class T> void f<int>(); */
2259 error ("template-id %qD in declaration of primary template",
2260 declarator);
2261 return decl;
2264 break;
2266 case tsk_invalid_member_spec:
2267 /* The error has already been reported in
2268 check_specialization_scope. */
2269 return error_mark_node;
2271 case tsk_invalid_expl_inst:
2272 error ("template parameter list used in explicit instantiation");
2274 /* Fall through. */
2276 case tsk_expl_inst:
2277 if (have_def)
2278 error ("definition provided for explicit instantiation");
2280 explicit_instantiation = 1;
2281 break;
2283 case tsk_excessive_parms:
2284 case tsk_insufficient_parms:
2285 if (tsk == tsk_excessive_parms)
2286 error ("too many template parameter lists in declaration of %qD",
2287 decl);
2288 else if (template_header_count)
2289 error("too few template parameter lists in declaration of %qD", decl);
2290 else
2291 error("explicit specialization of %qD must be introduced by "
2292 "%<template <>%>", decl);
2294 /* Fall through. */
2295 case tsk_expl_spec:
2296 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2297 if (ctype)
2298 member_specialization = 1;
2299 else
2300 specialization = 1;
2301 break;
2303 case tsk_template:
2304 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2306 /* This case handles bogus declarations like template <>
2307 template <class T> void f<int>(); */
2309 if (uses_template_parms (declarator))
2310 error ("function template partial specialization %qD "
2311 "is not allowed", declarator);
2312 else
2313 error ("template-id %qD in declaration of primary template",
2314 declarator);
2315 return decl;
2318 if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
2319 /* This is a specialization of a member template, without
2320 specialization the containing class. Something like:
2322 template <class T> struct S {
2323 template <class U> void f (U);
2325 template <> template <class U> void S<int>::f(U) {}
2327 That's a specialization -- but of the entire template. */
2328 specialization = 1;
2329 break;
2331 default:
2332 gcc_unreachable ();
2335 if (specialization || member_specialization)
2337 tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2338 for (; t; t = TREE_CHAIN (t))
2339 if (TREE_PURPOSE (t))
2341 permerror (input_location,
2342 "default argument specified in explicit specialization");
2343 break;
2347 if (specialization || member_specialization || explicit_instantiation)
2349 tree tmpl = NULL_TREE;
2350 tree targs = NULL_TREE;
2352 /* Make sure that the declarator is a TEMPLATE_ID_EXPR. */
2353 if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2355 tree fns;
2357 gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2358 if (ctype)
2359 fns = dname;
2360 else
2362 /* If there is no class context, the explicit instantiation
2363 must be at namespace scope. */
2364 gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2366 /* Find the namespace binding, using the declaration
2367 context. */
2368 fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2369 false, true);
2370 if (fns == error_mark_node || !is_overloaded_fn (fns))
2372 error ("%qD is not a template function", dname);
2373 fns = error_mark_node;
2375 else
2377 tree fn = OVL_CURRENT (fns);
2378 if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2379 CP_DECL_CONTEXT (fn)))
2380 error ("%qD is not declared in %qD",
2381 decl, current_namespace);
2385 declarator = lookup_template_function (fns, NULL_TREE);
2388 if (declarator == error_mark_node)
2389 return error_mark_node;
2391 if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2393 if (!explicit_instantiation)
2394 /* A specialization in class scope. This is invalid,
2395 but the error will already have been flagged by
2396 check_specialization_scope. */
2397 return error_mark_node;
2398 else
2400 /* It's not valid to write an explicit instantiation in
2401 class scope, e.g.:
2403 class C { template void f(); }
2405 This case is caught by the parser. However, on
2406 something like:
2408 template class C { void f(); };
2410 (which is invalid) we can get here. The error will be
2411 issued later. */
2415 return decl;
2417 else if (ctype != NULL_TREE
2418 && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2419 IDENTIFIER_NODE))
2421 /* Find the list of functions in ctype that have the same
2422 name as the declared function. */
2423 tree name = TREE_OPERAND (declarator, 0);
2424 tree fns = NULL_TREE;
2425 int idx;
2427 if (constructor_name_p (name, ctype))
2429 int is_constructor = DECL_CONSTRUCTOR_P (decl);
2431 if (is_constructor ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2432 : !CLASSTYPE_DESTRUCTORS (ctype))
2434 /* From [temp.expl.spec]:
2436 If such an explicit specialization for the member
2437 of a class template names an implicitly-declared
2438 special member function (clause _special_), the
2439 program is ill-formed.
2441 Similar language is found in [temp.explicit]. */
2442 error ("specialization of implicitly-declared special member function");
2443 return error_mark_node;
2446 name = is_constructor ? ctor_identifier : dtor_identifier;
2449 if (!DECL_CONV_FN_P (decl))
2451 idx = lookup_fnfields_1 (ctype, name);
2452 if (idx >= 0)
2453 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2455 else
2457 VEC(tree,gc) *methods;
2458 tree ovl;
2460 /* For a type-conversion operator, we cannot do a
2461 name-based lookup. We might be looking for `operator
2462 int' which will be a specialization of `operator T'.
2463 So, we find *all* the conversion operators, and then
2464 select from them. */
2465 fns = NULL_TREE;
2467 methods = CLASSTYPE_METHOD_VEC (ctype);
2468 if (methods)
2469 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2470 VEC_iterate (tree, methods, idx, ovl);
2471 ++idx)
2473 if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2474 /* There are no more conversion functions. */
2475 break;
2477 /* Glue all these conversion functions together
2478 with those we already have. */
2479 for (; ovl; ovl = OVL_NEXT (ovl))
2480 fns = ovl_cons (OVL_CURRENT (ovl), fns);
2484 if (fns == NULL_TREE)
2486 error ("no member function %qD declared in %qT", name, ctype);
2487 return error_mark_node;
2489 else
2490 TREE_OPERAND (declarator, 0) = fns;
2493 /* Figure out what exactly is being specialized at this point.
2494 Note that for an explicit instantiation, even one for a
2495 member function, we cannot tell apriori whether the
2496 instantiation is for a member template, or just a member
2497 function of a template class. Even if a member template is
2498 being instantiated, the member template arguments may be
2499 elided if they can be deduced from the rest of the
2500 declaration. */
2501 tmpl = determine_specialization (declarator, decl,
2502 &targs,
2503 member_specialization,
2504 template_count,
2505 tsk);
2507 if (!tmpl || tmpl == error_mark_node)
2508 /* We couldn't figure out what this declaration was
2509 specializing. */
2510 return error_mark_node;
2511 else
2513 tree gen_tmpl = most_general_template (tmpl);
2515 if (explicit_instantiation)
2517 /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2518 is done by do_decl_instantiation later. */
2520 int arg_depth = TMPL_ARGS_DEPTH (targs);
2521 int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2523 if (arg_depth > parm_depth)
2525 /* If TMPL is not the most general template (for
2526 example, if TMPL is a friend template that is
2527 injected into namespace scope), then there will
2528 be too many levels of TARGS. Remove some of them
2529 here. */
2530 int i;
2531 tree new_targs;
2533 new_targs = make_tree_vec (parm_depth);
2534 for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2535 TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2536 = TREE_VEC_ELT (targs, i);
2537 targs = new_targs;
2540 return instantiate_template (tmpl, targs, tf_error);
2543 /* If we thought that the DECL was a member function, but it
2544 turns out to be specializing a static member function,
2545 make DECL a static member function as well. */
2546 if (DECL_STATIC_FUNCTION_P (tmpl)
2547 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2548 revert_static_member_fn (decl);
2550 /* If this is a specialization of a member template of a
2551 template class, we want to return the TEMPLATE_DECL, not
2552 the specialization of it. */
2553 if (tsk == tsk_template)
2555 tree result = DECL_TEMPLATE_RESULT (tmpl);
2556 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2557 DECL_INITIAL (result) = NULL_TREE;
2558 if (have_def)
2560 tree parm;
2561 DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2562 DECL_SOURCE_LOCATION (result)
2563 = DECL_SOURCE_LOCATION (decl);
2564 /* We want to use the argument list specified in the
2565 definition, not in the original declaration. */
2566 DECL_ARGUMENTS (result) = DECL_ARGUMENTS (decl);
2567 for (parm = DECL_ARGUMENTS (result); parm;
2568 parm = DECL_CHAIN (parm))
2569 DECL_CONTEXT (parm) = result;
2571 return register_specialization (tmpl, gen_tmpl, targs,
2572 is_friend, 0);
2575 /* Set up the DECL_TEMPLATE_INFO for DECL. */
2576 DECL_TEMPLATE_INFO (decl) = build_template_info (tmpl, targs);
2578 /* Inherit default function arguments from the template
2579 DECL is specializing. */
2580 copy_default_args_to_explicit_spec (decl);
2582 /* This specialization has the same protection as the
2583 template it specializes. */
2584 TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2585 TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2587 /* 7.1.1-1 [dcl.stc]
2589 A storage-class-specifier shall not be specified in an
2590 explicit specialization...
2592 The parser rejects these, so unless action is taken here,
2593 explicit function specializations will always appear with
2594 global linkage.
2596 The action recommended by the C++ CWG in response to C++
2597 defect report 605 is to make the storage class and linkage
2598 of the explicit specialization match the templated function:
2600 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2602 if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2604 tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2605 gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2607 /* This specialization has the same linkage and visibility as
2608 the function template it specializes. */
2609 TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2610 if (! TREE_PUBLIC (decl))
2612 DECL_INTERFACE_KNOWN (decl) = 1;
2613 DECL_NOT_REALLY_EXTERN (decl) = 1;
2615 DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2616 if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2618 DECL_VISIBILITY_SPECIFIED (decl) = 1;
2619 DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2623 /* If DECL is a friend declaration, declared using an
2624 unqualified name, the namespace associated with DECL may
2625 have been set incorrectly. For example, in:
2627 template <typename T> void f(T);
2628 namespace N {
2629 struct S { friend void f<int>(int); }
2632 we will have set the DECL_CONTEXT for the friend
2633 declaration to N, rather than to the global namespace. */
2634 if (DECL_NAMESPACE_SCOPE_P (decl))
2635 DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2637 if (is_friend && !have_def)
2638 /* This is not really a declaration of a specialization.
2639 It's just the name of an instantiation. But, it's not
2640 a request for an instantiation, either. */
2641 SET_DECL_IMPLICIT_INSTANTIATION (decl);
2642 else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2643 /* This is indeed a specialization. In case of constructors
2644 and destructors, we need in-charge and not-in-charge
2645 versions in V3 ABI. */
2646 clone_function_decl (decl, /*update_method_vec_p=*/0);
2648 /* Register this specialization so that we can find it
2649 again. */
2650 decl = register_specialization (decl, gen_tmpl, targs, is_friend, 0);
2654 return decl;
2657 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2658 parameters. These are represented in the same format used for
2659 DECL_TEMPLATE_PARMS. */
2662 comp_template_parms (const_tree parms1, const_tree parms2)
2664 const_tree p1;
2665 const_tree p2;
2667 if (parms1 == parms2)
2668 return 1;
2670 for (p1 = parms1, p2 = parms2;
2671 p1 != NULL_TREE && p2 != NULL_TREE;
2672 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2674 tree t1 = TREE_VALUE (p1);
2675 tree t2 = TREE_VALUE (p2);
2676 int i;
2678 gcc_assert (TREE_CODE (t1) == TREE_VEC);
2679 gcc_assert (TREE_CODE (t2) == TREE_VEC);
2681 if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2682 return 0;
2684 for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2686 tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2687 tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2689 /* If either of the template parameters are invalid, assume
2690 they match for the sake of error recovery. */
2691 if (parm1 == error_mark_node || parm2 == error_mark_node)
2692 return 1;
2694 if (TREE_CODE (parm1) != TREE_CODE (parm2))
2695 return 0;
2697 if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2698 && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2699 == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2700 continue;
2701 else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2702 return 0;
2706 if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2707 /* One set of parameters has more parameters lists than the
2708 other. */
2709 return 0;
2711 return 1;
2714 /* Determine whether PARM is a parameter pack. */
2716 bool
2717 template_parameter_pack_p (const_tree parm)
2719 /* Determine if we have a non-type template parameter pack. */
2720 if (TREE_CODE (parm) == PARM_DECL)
2721 return (DECL_TEMPLATE_PARM_P (parm)
2722 && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2724 /* If this is a list of template parameters, we could get a
2725 TYPE_DECL or a TEMPLATE_DECL. */
2726 if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2727 parm = TREE_TYPE (parm);
2729 return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2730 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2731 && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2734 /* Determine if T is a function parameter pack. */
2736 bool
2737 function_parameter_pack_p (const_tree t)
2739 if (t && TREE_CODE (t) == PARM_DECL)
2740 return FUNCTION_PARAMETER_PACK_P (t);
2741 return false;
2744 /* Return the function template declaration of PRIMARY_FUNC_TMPL_INST.
2745 PRIMARY_FUNC_TMPL_INST is a primary function template instantiation. */
2747 tree
2748 get_function_template_decl (const_tree primary_func_tmpl_inst)
2750 if (! primary_func_tmpl_inst
2751 || TREE_CODE (primary_func_tmpl_inst) != FUNCTION_DECL
2752 || ! primary_template_instantiation_p (primary_func_tmpl_inst))
2753 return NULL;
2755 return DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (primary_func_tmpl_inst));
2758 /* Return true iff the function parameter PARAM_DECL was expanded
2759 from the function parameter pack PACK. */
2761 bool
2762 function_parameter_expanded_from_pack_p (tree param_decl, tree pack)
2764 if (DECL_ARTIFICIAL (param_decl)
2765 || !function_parameter_pack_p (pack))
2766 return false;
2768 /* The parameter pack and its pack arguments have the same
2769 DECL_PARM_INDEX. */
2770 return DECL_PARM_INDEX (pack) == DECL_PARM_INDEX (param_decl);
2773 /* Determine whether ARGS describes a variadic template args list,
2774 i.e., one that is terminated by a template argument pack. */
2776 static bool
2777 template_args_variadic_p (tree args)
2779 int nargs;
2780 tree last_parm;
2782 if (args == NULL_TREE)
2783 return false;
2785 args = INNERMOST_TEMPLATE_ARGS (args);
2786 nargs = TREE_VEC_LENGTH (args);
2788 if (nargs == 0)
2789 return false;
2791 last_parm = TREE_VEC_ELT (args, nargs - 1);
2793 return ARGUMENT_PACK_P (last_parm);
2796 /* Generate a new name for the parameter pack name NAME (an
2797 IDENTIFIER_NODE) that incorporates its */
2799 static tree
2800 make_ith_pack_parameter_name (tree name, int i)
2802 /* Munge the name to include the parameter index. */
2803 #define NUMBUF_LEN 128
2804 char numbuf[NUMBUF_LEN];
2805 char* newname;
2806 int newname_len;
2808 snprintf (numbuf, NUMBUF_LEN, "%i", i);
2809 newname_len = IDENTIFIER_LENGTH (name)
2810 + strlen (numbuf) + 2;
2811 newname = (char*)alloca (newname_len);
2812 snprintf (newname, newname_len,
2813 "%s#%i", IDENTIFIER_POINTER (name), i);
2814 return get_identifier (newname);
2817 /* Return true if T is a primary function
2818 or class template instantiation. */
2820 bool
2821 primary_template_instantiation_p (const_tree t)
2823 if (!t)
2824 return false;
2826 if (TREE_CODE (t) == FUNCTION_DECL)
2827 return DECL_LANG_SPECIFIC (t)
2828 && DECL_TEMPLATE_INSTANTIATION (t)
2829 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t));
2830 else if (CLASS_TYPE_P (t))
2831 return CLASSTYPE_TEMPLATE_INSTANTIATION (t)
2832 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t));
2833 return false;
2836 /* Return true if PARM is a template template parameter. */
2838 bool
2839 template_template_parameter_p (const_tree parm)
2841 return DECL_TEMPLATE_TEMPLATE_PARM_P (parm);
2844 /* Return the template parameters of T if T is a
2845 primary template instantiation, NULL otherwise. */
2847 tree
2848 get_primary_template_innermost_parameters (const_tree t)
2850 tree parms = NULL, template_info = NULL;
2852 if ((template_info = get_template_info (t))
2853 && primary_template_instantiation_p (t))
2854 parms = INNERMOST_TEMPLATE_PARMS
2855 (DECL_TEMPLATE_PARMS (TI_TEMPLATE (template_info)));
2857 return parms;
2860 /* Return the template parameters of the LEVELth level from the full list
2861 of template parameters PARMS. */
2863 tree
2864 get_template_parms_at_level (tree parms, int level)
2866 tree p;
2867 if (!parms
2868 || TREE_CODE (parms) != TREE_LIST
2869 || level > TMPL_PARMS_DEPTH (parms))
2870 return NULL_TREE;
2872 for (p = parms; p; p = TREE_CHAIN (p))
2873 if (TMPL_PARMS_DEPTH (p) == level)
2874 return p;
2876 return NULL_TREE;
2879 /* Returns the template arguments of T if T is a template instantiation,
2880 NULL otherwise. */
2882 tree
2883 get_template_innermost_arguments (const_tree t)
2885 tree args = NULL, template_info = NULL;
2887 if ((template_info = get_template_info (t))
2888 && TI_ARGS (template_info))
2889 args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (template_info));
2891 return args;
2894 /* Return the argument pack elements of T if T is a template argument pack,
2895 NULL otherwise. */
2897 tree
2898 get_template_argument_pack_elems (const_tree t)
2900 if (TREE_CODE (t) != TYPE_ARGUMENT_PACK
2901 && TREE_CODE (t) != NONTYPE_ARGUMENT_PACK)
2902 return NULL;
2904 return ARGUMENT_PACK_ARGS (t);
2907 /* Structure used to track the progress of find_parameter_packs_r. */
2908 struct find_parameter_pack_data
2910 /* TREE_LIST that will contain all of the parameter packs found by
2911 the traversal. */
2912 tree* parameter_packs;
2914 /* Set of AST nodes that have been visited by the traversal. */
2915 struct pointer_set_t *visited;
2918 /* Identifies all of the argument packs that occur in a template
2919 argument and appends them to the TREE_LIST inside DATA, which is a
2920 find_parameter_pack_data structure. This is a subroutine of
2921 make_pack_expansion and uses_parameter_packs. */
2922 static tree
2923 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2925 tree t = *tp;
2926 struct find_parameter_pack_data* ppd =
2927 (struct find_parameter_pack_data*)data;
2928 bool parameter_pack_p = false;
2930 /* Identify whether this is a parameter pack or not. */
2931 switch (TREE_CODE (t))
2933 case TEMPLATE_PARM_INDEX:
2934 if (TEMPLATE_PARM_PARAMETER_PACK (t))
2935 parameter_pack_p = true;
2936 break;
2938 case TEMPLATE_TYPE_PARM:
2939 case TEMPLATE_TEMPLATE_PARM:
2940 if (TEMPLATE_TYPE_PARAMETER_PACK (t))
2941 parameter_pack_p = true;
2942 break;
2944 case PARM_DECL:
2945 if (FUNCTION_PARAMETER_PACK_P (t))
2947 /* We don't want to walk into the type of a PARM_DECL,
2948 because we don't want to see the type parameter pack. */
2949 *walk_subtrees = 0;
2950 parameter_pack_p = true;
2952 break;
2954 default:
2955 /* Not a parameter pack. */
2956 break;
2959 if (parameter_pack_p)
2961 /* Add this parameter pack to the list. */
2962 *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
2965 if (TYPE_P (t))
2966 cp_walk_tree (&TYPE_CONTEXT (t),
2967 &find_parameter_packs_r, ppd, ppd->visited);
2969 /* This switch statement will return immediately if we don't find a
2970 parameter pack. */
2971 switch (TREE_CODE (t))
2973 case TEMPLATE_PARM_INDEX:
2974 return NULL_TREE;
2976 case BOUND_TEMPLATE_TEMPLATE_PARM:
2977 /* Check the template itself. */
2978 cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)),
2979 &find_parameter_packs_r, ppd, ppd->visited);
2980 /* Check the template arguments. */
2981 cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd,
2982 ppd->visited);
2983 *walk_subtrees = 0;
2984 return NULL_TREE;
2986 case TEMPLATE_TYPE_PARM:
2987 case TEMPLATE_TEMPLATE_PARM:
2988 return NULL_TREE;
2990 case PARM_DECL:
2991 return NULL_TREE;
2993 case RECORD_TYPE:
2994 if (TYPE_PTRMEMFUNC_P (t))
2995 return NULL_TREE;
2996 /* Fall through. */
2998 case UNION_TYPE:
2999 case ENUMERAL_TYPE:
3000 if (TYPE_TEMPLATE_INFO (t))
3001 cp_walk_tree (&TI_ARGS (TYPE_TEMPLATE_INFO (t)),
3002 &find_parameter_packs_r, ppd, ppd->visited);
3004 *walk_subtrees = 0;
3005 return NULL_TREE;
3007 case TEMPLATE_DECL:
3008 cp_walk_tree (&TREE_TYPE (t),
3009 &find_parameter_packs_r, ppd, ppd->visited);
3010 return NULL_TREE;
3012 case TYPENAME_TYPE:
3013 cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
3014 ppd, ppd->visited);
3015 *walk_subtrees = 0;
3016 return NULL_TREE;
3018 case TYPE_PACK_EXPANSION:
3019 case EXPR_PACK_EXPANSION:
3020 *walk_subtrees = 0;
3021 return NULL_TREE;
3023 case INTEGER_TYPE:
3024 cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r,
3025 ppd, ppd->visited);
3026 *walk_subtrees = 0;
3027 return NULL_TREE;
3029 case IDENTIFIER_NODE:
3030 cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd,
3031 ppd->visited);
3032 *walk_subtrees = 0;
3033 return NULL_TREE;
3035 default:
3036 return NULL_TREE;
3039 return NULL_TREE;
3042 /* Determines if the expression or type T uses any parameter packs. */
3043 bool
3044 uses_parameter_packs (tree t)
3046 tree parameter_packs = NULL_TREE;
3047 struct find_parameter_pack_data ppd;
3048 ppd.parameter_packs = &parameter_packs;
3049 ppd.visited = pointer_set_create ();
3050 cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3051 pointer_set_destroy (ppd.visited);
3052 return parameter_packs != NULL_TREE;
3055 /* Turn ARG, which may be an expression, type, or a TREE_LIST
3056 representation a base-class initializer into a parameter pack
3057 expansion. If all goes well, the resulting node will be an
3058 EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
3059 respectively. */
3060 tree
3061 make_pack_expansion (tree arg)
3063 tree result;
3064 tree parameter_packs = NULL_TREE;
3065 bool for_types = false;
3066 struct find_parameter_pack_data ppd;
3068 if (!arg || arg == error_mark_node)
3069 return arg;
3071 if (TREE_CODE (arg) == TREE_LIST)
3073 /* The only time we will see a TREE_LIST here is for a base
3074 class initializer. In this case, the TREE_PURPOSE will be a
3075 _TYPE node (representing the base class expansion we're
3076 initializing) and the TREE_VALUE will be a TREE_LIST
3077 containing the initialization arguments.
3079 The resulting expansion looks somewhat different from most
3080 expansions. Rather than returning just one _EXPANSION, we
3081 return a TREE_LIST whose TREE_PURPOSE is a
3082 TYPE_PACK_EXPANSION containing the bases that will be
3083 initialized. The TREE_VALUE will be identical to the
3084 original TREE_VALUE, which is a list of arguments that will
3085 be passed to each base. We do not introduce any new pack
3086 expansion nodes into the TREE_VALUE (although it is possible
3087 that some already exist), because the TREE_PURPOSE and
3088 TREE_VALUE all need to be expanded together with the same
3089 _EXPANSION node. Note that the TYPE_PACK_EXPANSION in the
3090 resulting TREE_PURPOSE will mention the parameter packs in
3091 both the bases and the arguments to the bases. */
3092 tree purpose;
3093 tree value;
3094 tree parameter_packs = NULL_TREE;
3096 /* Determine which parameter packs will be used by the base
3097 class expansion. */
3098 ppd.visited = pointer_set_create ();
3099 ppd.parameter_packs = &parameter_packs;
3100 cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r,
3101 &ppd, ppd.visited);
3103 if (parameter_packs == NULL_TREE)
3105 error ("base initializer expansion %<%T%> contains no parameter packs", arg);
3106 pointer_set_destroy (ppd.visited);
3107 return error_mark_node;
3110 if (TREE_VALUE (arg) != void_type_node)
3112 /* Collect the sets of parameter packs used in each of the
3113 initialization arguments. */
3114 for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
3116 /* Determine which parameter packs will be expanded in this
3117 argument. */
3118 cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r,
3119 &ppd, ppd.visited);
3123 pointer_set_destroy (ppd.visited);
3125 /* Create the pack expansion type for the base type. */
3126 purpose = cxx_make_type (TYPE_PACK_EXPANSION);
3127 SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
3128 PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
3130 /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3131 they will rarely be compared to anything. */
3132 SET_TYPE_STRUCTURAL_EQUALITY (purpose);
3134 return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
3137 if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
3138 for_types = true;
3140 /* Build the PACK_EXPANSION_* node. */
3141 result = for_types
3142 ? cxx_make_type (TYPE_PACK_EXPANSION)
3143 : make_node (EXPR_PACK_EXPANSION);
3144 SET_PACK_EXPANSION_PATTERN (result, arg);
3145 if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
3147 /* Propagate type and const-expression information. */
3148 TREE_TYPE (result) = TREE_TYPE (arg);
3149 TREE_CONSTANT (result) = TREE_CONSTANT (arg);
3151 else
3152 /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3153 they will rarely be compared to anything. */
3154 SET_TYPE_STRUCTURAL_EQUALITY (result);
3156 /* Determine which parameter packs will be expanded. */
3157 ppd.parameter_packs = &parameter_packs;
3158 ppd.visited = pointer_set_create ();
3159 cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
3160 pointer_set_destroy (ppd.visited);
3162 /* Make sure we found some parameter packs. */
3163 if (parameter_packs == NULL_TREE)
3165 if (TYPE_P (arg))
3166 error ("expansion pattern %<%T%> contains no argument packs", arg);
3167 else
3168 error ("expansion pattern %<%E%> contains no argument packs", arg);
3169 return error_mark_node;
3171 PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
3173 return result;
3176 /* Checks T for any "bare" parameter packs, which have not yet been
3177 expanded, and issues an error if any are found. This operation can
3178 only be done on full expressions or types (e.g., an expression
3179 statement, "if" condition, etc.), because we could have expressions like:
3181 foo(f(g(h(args)))...)
3183 where "args" is a parameter pack. check_for_bare_parameter_packs
3184 should not be called for the subexpressions args, h(args),
3185 g(h(args)), or f(g(h(args))), because we would produce erroneous
3186 error messages.
3188 Returns TRUE and emits an error if there were bare parameter packs,
3189 returns FALSE otherwise. */
3190 bool
3191 check_for_bare_parameter_packs (tree t)
3193 tree parameter_packs = NULL_TREE;
3194 struct find_parameter_pack_data ppd;
3196 if (!processing_template_decl || !t || t == error_mark_node)
3197 return false;
3199 if (TREE_CODE (t) == TYPE_DECL)
3200 t = TREE_TYPE (t);
3202 ppd.parameter_packs = &parameter_packs;
3203 ppd.visited = pointer_set_create ();
3204 cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3205 pointer_set_destroy (ppd.visited);
3207 if (parameter_packs)
3209 error ("parameter packs not expanded with %<...%>:");
3210 while (parameter_packs)
3212 tree pack = TREE_VALUE (parameter_packs);
3213 tree name = NULL_TREE;
3215 if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
3216 || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
3217 name = TYPE_NAME (pack);
3218 else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
3219 name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
3220 else
3221 name = DECL_NAME (pack);
3223 if (name)
3224 inform (input_location, " %qD", name);
3225 else
3226 inform (input_location, " <anonymous>");
3228 parameter_packs = TREE_CHAIN (parameter_packs);
3231 return true;
3234 return false;
3237 /* Expand any parameter packs that occur in the template arguments in
3238 ARGS. */
3239 tree
3240 expand_template_argument_pack (tree args)
3242 tree result_args = NULL_TREE;
3243 int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
3244 int num_result_args = -1;
3245 int non_default_args_count = -1;
3247 /* First, determine if we need to expand anything, and the number of
3248 slots we'll need. */
3249 for (in_arg = 0; in_arg < nargs; ++in_arg)
3251 tree arg = TREE_VEC_ELT (args, in_arg);
3252 if (arg == NULL_TREE)
3253 return args;
3254 if (ARGUMENT_PACK_P (arg))
3256 int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
3257 if (num_result_args < 0)
3258 num_result_args = in_arg + num_packed;
3259 else
3260 num_result_args += num_packed;
3262 else
3264 if (num_result_args >= 0)
3265 num_result_args++;
3269 /* If no expansion is necessary, we're done. */
3270 if (num_result_args < 0)
3271 return args;
3273 /* Expand arguments. */
3274 result_args = make_tree_vec (num_result_args);
3275 if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (args))
3276 non_default_args_count =
3277 GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
3278 for (in_arg = 0; in_arg < nargs; ++in_arg)
3280 tree arg = TREE_VEC_ELT (args, in_arg);
3281 if (ARGUMENT_PACK_P (arg))
3283 tree packed = ARGUMENT_PACK_ARGS (arg);
3284 int i, num_packed = TREE_VEC_LENGTH (packed);
3285 for (i = 0; i < num_packed; ++i, ++out_arg)
3286 TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
3287 if (non_default_args_count > 0)
3288 non_default_args_count += num_packed;
3290 else
3292 TREE_VEC_ELT (result_args, out_arg) = arg;
3293 ++out_arg;
3296 if (non_default_args_count >= 0)
3297 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (result_args, non_default_args_count);
3298 return result_args;
3301 /* Checks if DECL shadows a template parameter.
3303 [temp.local]: A template-parameter shall not be redeclared within its
3304 scope (including nested scopes).
3306 Emits an error and returns TRUE if the DECL shadows a parameter,
3307 returns FALSE otherwise. */
3309 bool
3310 check_template_shadow (tree decl)
3312 tree olddecl;
3314 /* If we're not in a template, we can't possibly shadow a template
3315 parameter. */
3316 if (!current_template_parms)
3317 return true;
3319 /* Figure out what we're shadowing. */
3320 if (TREE_CODE (decl) == OVERLOAD)
3321 decl = OVL_CURRENT (decl);
3322 olddecl = innermost_non_namespace_value (DECL_NAME (decl));
3324 /* If there's no previous binding for this name, we're not shadowing
3325 anything, let alone a template parameter. */
3326 if (!olddecl)
3327 return true;
3329 /* If we're not shadowing a template parameter, we're done. Note
3330 that OLDDECL might be an OVERLOAD (or perhaps even an
3331 ERROR_MARK), so we can't just blithely assume it to be a _DECL
3332 node. */
3333 if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
3334 return true;
3336 /* We check for decl != olddecl to avoid bogus errors for using a
3337 name inside a class. We check TPFI to avoid duplicate errors for
3338 inline member templates. */
3339 if (decl == olddecl
3340 || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
3341 return true;
3343 error ("declaration of %q+#D", decl);
3344 error (" shadows template parm %q+#D", olddecl);
3345 return false;
3348 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
3349 ORIG_LEVEL, DECL, and TYPE. */
3351 static tree
3352 build_template_parm_index (int index,
3353 int level,
3354 int orig_level,
3355 tree decl,
3356 tree type)
3358 tree t = make_node (TEMPLATE_PARM_INDEX);
3359 TEMPLATE_PARM_IDX (t) = index;
3360 TEMPLATE_PARM_LEVEL (t) = level;
3361 TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
3362 TEMPLATE_PARM_DECL (t) = decl;
3363 TREE_TYPE (t) = type;
3364 TREE_CONSTANT (t) = TREE_CONSTANT (decl);
3365 TREE_READONLY (t) = TREE_READONLY (decl);
3367 return t;
3370 /* Find the canonical type parameter for the given template type
3371 parameter. Returns the canonical type parameter, which may be TYPE
3372 if no such parameter existed. */
3373 static tree
3374 canonical_type_parameter (tree type)
3376 tree list;
3377 int idx = TEMPLATE_TYPE_IDX (type);
3378 if (!canonical_template_parms)
3379 canonical_template_parms = VEC_alloc (tree, gc, idx+1);
3381 while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
3382 VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
3384 list = VEC_index (tree, canonical_template_parms, idx);
3385 while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
3386 list = TREE_CHAIN (list);
3388 if (list)
3389 return TREE_VALUE (list);
3390 else
3392 VEC_replace(tree, canonical_template_parms, idx,
3393 tree_cons (NULL_TREE, type,
3394 VEC_index (tree, canonical_template_parms, idx)));
3395 return type;
3399 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
3400 TEMPLATE_PARM_LEVEL has been decreased by LEVELS. If such a
3401 TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
3402 new one is created. */
3404 static tree
3405 reduce_template_parm_level (tree index, tree type, int levels, tree args,
3406 tsubst_flags_t complain)
3408 if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
3409 || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
3410 != TEMPLATE_PARM_LEVEL (index) - levels)
3411 || !same_type_p (type, TREE_TYPE (TEMPLATE_PARM_DESCENDANTS (index))))
3413 tree orig_decl = TEMPLATE_PARM_DECL (index);
3414 tree decl, t;
3416 decl = build_decl (DECL_SOURCE_LOCATION (orig_decl),
3417 TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
3418 TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
3419 TREE_READONLY (decl) = TREE_READONLY (orig_decl);
3420 DECL_ARTIFICIAL (decl) = 1;
3421 SET_DECL_TEMPLATE_PARM_P (decl);
3423 t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
3424 TEMPLATE_PARM_LEVEL (index) - levels,
3425 TEMPLATE_PARM_ORIG_LEVEL (index),
3426 decl, type);
3427 TEMPLATE_PARM_DESCENDANTS (index) = t;
3428 TEMPLATE_PARM_PARAMETER_PACK (t)
3429 = TEMPLATE_PARM_PARAMETER_PACK (index);
3431 /* Template template parameters need this. */
3432 if (TREE_CODE (decl) == TEMPLATE_DECL)
3433 DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
3434 (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
3435 args, complain);
3438 return TEMPLATE_PARM_DESCENDANTS (index);
3441 /* Process information from new template parameter PARM and append it to the
3442 LIST being built. This new parameter is a non-type parameter iff
3443 IS_NON_TYPE is true. This new parameter is a parameter
3444 pack iff IS_PARAMETER_PACK is true. The location of PARM is in
3445 PARM_LOC. */
3447 tree
3448 process_template_parm (tree list, location_t parm_loc, tree parm, bool is_non_type,
3449 bool is_parameter_pack)
3451 tree decl = 0;
3452 tree defval;
3453 tree err_parm_list;
3454 int idx = 0;
3456 gcc_assert (TREE_CODE (parm) == TREE_LIST);
3457 defval = TREE_PURPOSE (parm);
3459 if (list)
3461 tree p = tree_last (list);
3463 if (p && TREE_VALUE (p) != error_mark_node)
3465 p = TREE_VALUE (p);
3466 if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
3467 idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
3468 else
3469 idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
3472 ++idx;
3474 else
3475 idx = 0;
3477 if (is_non_type)
3479 parm = TREE_VALUE (parm);
3481 SET_DECL_TEMPLATE_PARM_P (parm);
3483 if (TREE_TYPE (parm) == error_mark_node)
3485 err_parm_list = build_tree_list (defval, parm);
3486 TREE_VALUE (err_parm_list) = error_mark_node;
3487 return chainon (list, err_parm_list);
3489 else
3491 /* [temp.param]
3493 The top-level cv-qualifiers on the template-parameter are
3494 ignored when determining its type. */
3495 TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3496 if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3498 err_parm_list = build_tree_list (defval, parm);
3499 TREE_VALUE (err_parm_list) = error_mark_node;
3500 return chainon (list, err_parm_list);
3503 if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
3505 /* This template parameter is not a parameter pack, but it
3506 should be. Complain about "bare" parameter packs. */
3507 check_for_bare_parameter_packs (TREE_TYPE (parm));
3509 /* Recover by calling this a parameter pack. */
3510 is_parameter_pack = true;
3514 /* A template parameter is not modifiable. */
3515 TREE_CONSTANT (parm) = 1;
3516 TREE_READONLY (parm) = 1;
3517 decl = build_decl (parm_loc,
3518 CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3519 TREE_CONSTANT (decl) = 1;
3520 TREE_READONLY (decl) = 1;
3521 DECL_INITIAL (parm) = DECL_INITIAL (decl)
3522 = build_template_parm_index (idx, processing_template_decl,
3523 processing_template_decl,
3524 decl, TREE_TYPE (parm));
3526 TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
3527 = is_parameter_pack;
3529 else
3531 tree t;
3532 parm = TREE_VALUE (TREE_VALUE (parm));
3534 if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3536 t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3537 /* This is for distinguishing between real templates and template
3538 template parameters */
3539 TREE_TYPE (parm) = t;
3540 TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3541 decl = parm;
3543 else
3545 t = cxx_make_type (TEMPLATE_TYPE_PARM);
3546 /* parm is either IDENTIFIER_NODE or NULL_TREE. */
3547 decl = build_decl (parm_loc,
3548 TYPE_DECL, parm, t);
3551 TYPE_NAME (t) = decl;
3552 TYPE_STUB_DECL (t) = decl;
3553 parm = decl;
3554 TEMPLATE_TYPE_PARM_INDEX (t)
3555 = build_template_parm_index (idx, processing_template_decl,
3556 processing_template_decl,
3557 decl, TREE_TYPE (parm));
3558 TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3559 TYPE_CANONICAL (t) = canonical_type_parameter (t);
3561 DECL_ARTIFICIAL (decl) = 1;
3562 SET_DECL_TEMPLATE_PARM_P (decl);
3563 pushdecl (decl);
3564 parm = build_tree_list (defval, parm);
3565 return chainon (list, parm);
3568 /* The end of a template parameter list has been reached. Process the
3569 tree list into a parameter vector, converting each parameter into a more
3570 useful form. Type parameters are saved as IDENTIFIER_NODEs, and others
3571 as PARM_DECLs. */
3573 tree
3574 end_template_parm_list (tree parms)
3576 int nparms;
3577 tree parm, next;
3578 tree saved_parmlist = make_tree_vec (list_length (parms));
3580 current_template_parms
3581 = tree_cons (size_int (processing_template_decl),
3582 saved_parmlist, current_template_parms);
3584 for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3586 next = TREE_CHAIN (parm);
3587 TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3588 TREE_CHAIN (parm) = NULL_TREE;
3589 if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL)
3590 TEMPLATE_TYPE_PARM_SIBLING_PARMS (TREE_TYPE (TREE_VALUE (parm))) =
3591 current_template_parms;
3594 --processing_template_parmlist;
3596 return saved_parmlist;
3599 /* end_template_decl is called after a template declaration is seen. */
3601 void
3602 end_template_decl (void)
3604 reset_specialization ();
3606 if (! processing_template_decl)
3607 return;
3609 /* This matches the pushlevel in begin_template_parm_list. */
3610 finish_scope ();
3612 --processing_template_decl;
3613 current_template_parms = TREE_CHAIN (current_template_parms);
3616 /* Within the declaration of a template, return all levels of template
3617 parameters that apply. The template parameters are represented as
3618 a TREE_VEC, in the form documented in cp-tree.h for template
3619 arguments. */
3621 static tree
3622 current_template_args (void)
3624 tree header;
3625 tree args = NULL_TREE;
3626 int length = TMPL_PARMS_DEPTH (current_template_parms);
3627 int l = length;
3629 /* If there is only one level of template parameters, we do not
3630 create a TREE_VEC of TREE_VECs. Instead, we return a single
3631 TREE_VEC containing the arguments. */
3632 if (length > 1)
3633 args = make_tree_vec (length);
3635 for (header = current_template_parms; header; header = TREE_CHAIN (header))
3637 tree a = copy_node (TREE_VALUE (header));
3638 int i;
3640 TREE_TYPE (a) = NULL_TREE;
3641 for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
3643 tree t = TREE_VEC_ELT (a, i);
3645 /* T will be a list if we are called from within a
3646 begin/end_template_parm_list pair, but a vector directly
3647 if within a begin/end_member_template_processing pair. */
3648 if (TREE_CODE (t) == TREE_LIST)
3650 t = TREE_VALUE (t);
3652 if (!error_operand_p (t))
3654 if (TREE_CODE (t) == TYPE_DECL
3655 || TREE_CODE (t) == TEMPLATE_DECL)
3657 t = TREE_TYPE (t);
3659 if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3661 /* Turn this argument into a TYPE_ARGUMENT_PACK
3662 with a single element, which expands T. */
3663 tree vec = make_tree_vec (1);
3664 #ifdef ENABLE_CHECKING
3665 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3666 (vec, TREE_VEC_LENGTH (vec));
3667 #endif
3668 TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3670 t = cxx_make_type (TYPE_ARGUMENT_PACK);
3671 SET_ARGUMENT_PACK_ARGS (t, vec);
3674 else
3676 t = DECL_INITIAL (t);
3678 if (TEMPLATE_PARM_PARAMETER_PACK (t))
3680 /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3681 with a single element, which expands T. */
3682 tree vec = make_tree_vec (1);
3683 tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3684 #ifdef ENABLE_CHECKING
3685 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3686 (vec, TREE_VEC_LENGTH (vec));
3687 #endif
3688 TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3690 t = make_node (NONTYPE_ARGUMENT_PACK);
3691 SET_ARGUMENT_PACK_ARGS (t, vec);
3692 TREE_TYPE (t) = type;
3695 TREE_VEC_ELT (a, i) = t;
3700 #ifdef ENABLE_CHECKING
3701 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (a, TREE_VEC_LENGTH (a));
3702 #endif
3704 if (length > 1)
3705 TREE_VEC_ELT (args, --l) = a;
3706 else
3707 args = a;
3710 return args;
3713 /* Update the declared TYPE by doing any lookups which were thought to be
3714 dependent, but are not now that we know the SCOPE of the declarator. */
3716 tree
3717 maybe_update_decl_type (tree orig_type, tree scope)
3719 tree type = orig_type;
3721 if (type == NULL_TREE)
3722 return type;
3724 if (TREE_CODE (orig_type) == TYPE_DECL)
3725 type = TREE_TYPE (type);
3727 if (scope && TYPE_P (scope) && dependent_type_p (scope)
3728 && dependent_type_p (type)
3729 /* Don't bother building up the args in this case. */
3730 && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
3732 /* tsubst in the args corresponding to the template parameters,
3733 including auto if present. Most things will be unchanged, but
3734 make_typename_type and tsubst_qualified_id will resolve
3735 TYPENAME_TYPEs and SCOPE_REFs that were previously dependent. */
3736 tree args = current_template_args ();
3737 tree auto_node = type_uses_auto (type);
3738 tree pushed;
3739 if (auto_node)
3741 tree auto_vec = make_tree_vec (1);
3742 TREE_VEC_ELT (auto_vec, 0) = auto_node;
3743 args = add_to_template_args (args, auto_vec);
3745 pushed = push_scope (scope);
3746 type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
3747 if (pushed)
3748 pop_scope (scope);
3751 if (type == error_mark_node)
3752 return orig_type;
3754 if (TREE_CODE (orig_type) == TYPE_DECL)
3756 if (same_type_p (type, TREE_TYPE (orig_type)))
3757 type = orig_type;
3758 else
3759 type = TYPE_NAME (type);
3761 return type;
3764 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
3765 template PARMS. If MEMBER_TEMPLATE_P is true, the new template is
3766 a member template. Used by push_template_decl below. */
3768 static tree
3769 build_template_decl (tree decl, tree parms, bool member_template_p)
3771 tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
3772 DECL_TEMPLATE_PARMS (tmpl) = parms;
3773 DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
3774 DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
3776 return tmpl;
3779 struct template_parm_data
3781 /* The level of the template parameters we are currently
3782 processing. */
3783 int level;
3785 /* The index of the specialization argument we are currently
3786 processing. */
3787 int current_arg;
3789 /* An array whose size is the number of template parameters. The
3790 elements are nonzero if the parameter has been used in any one
3791 of the arguments processed so far. */
3792 int* parms;
3794 /* An array whose size is the number of template arguments. The
3795 elements are nonzero if the argument makes use of template
3796 parameters of this level. */
3797 int* arg_uses_template_parms;
3800 /* Subroutine of push_template_decl used to see if each template
3801 parameter in a partial specialization is used in the explicit
3802 argument list. If T is of the LEVEL given in DATA (which is
3803 treated as a template_parm_data*), then DATA->PARMS is marked
3804 appropriately. */
3806 static int
3807 mark_template_parm (tree t, void* data)
3809 int level;
3810 int idx;
3811 struct template_parm_data* tpd = (struct template_parm_data*) data;
3813 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3815 level = TEMPLATE_PARM_LEVEL (t);
3816 idx = TEMPLATE_PARM_IDX (t);
3818 else
3820 level = TEMPLATE_TYPE_LEVEL (t);
3821 idx = TEMPLATE_TYPE_IDX (t);
3824 if (level == tpd->level)
3826 tpd->parms[idx] = 1;
3827 tpd->arg_uses_template_parms[tpd->current_arg] = 1;
3830 /* Return zero so that for_each_template_parm will continue the
3831 traversal of the tree; we want to mark *every* template parm. */
3832 return 0;
3835 /* Process the partial specialization DECL. */
3837 static tree
3838 process_partial_specialization (tree decl)
3840 tree type = TREE_TYPE (decl);
3841 tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
3842 tree specargs = CLASSTYPE_TI_ARGS (type);
3843 tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
3844 tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
3845 tree inner_parms;
3846 tree inst;
3847 int nargs = TREE_VEC_LENGTH (inner_args);
3848 int ntparms;
3849 int i;
3850 bool did_error_intro = false;
3851 struct template_parm_data tpd;
3852 struct template_parm_data tpd2;
3854 gcc_assert (current_template_parms);
3856 inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3857 ntparms = TREE_VEC_LENGTH (inner_parms);
3859 /* We check that each of the template parameters given in the
3860 partial specialization is used in the argument list to the
3861 specialization. For example:
3863 template <class T> struct S;
3864 template <class T> struct S<T*>;
3866 The second declaration is OK because `T*' uses the template
3867 parameter T, whereas
3869 template <class T> struct S<int>;
3871 is no good. Even trickier is:
3873 template <class T>
3874 struct S1
3876 template <class U>
3877 struct S2;
3878 template <class U>
3879 struct S2<T>;
3882 The S2<T> declaration is actually invalid; it is a
3883 full-specialization. Of course,
3885 template <class U>
3886 struct S2<T (*)(U)>;
3888 or some such would have been OK. */
3889 tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
3890 tpd.parms = XALLOCAVEC (int, ntparms);
3891 memset (tpd.parms, 0, sizeof (int) * ntparms);
3893 tpd.arg_uses_template_parms = XALLOCAVEC (int, nargs);
3894 memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
3895 for (i = 0; i < nargs; ++i)
3897 tpd.current_arg = i;
3898 for_each_template_parm (TREE_VEC_ELT (inner_args, i),
3899 &mark_template_parm,
3900 &tpd,
3901 NULL,
3902 /*include_nondeduced_p=*/false);
3904 for (i = 0; i < ntparms; ++i)
3905 if (tpd.parms[i] == 0)
3907 /* One of the template parms was not used in the
3908 specialization. */
3909 if (!did_error_intro)
3911 error ("template parameters not used in partial specialization:");
3912 did_error_intro = true;
3915 error (" %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
3918 if (did_error_intro)
3919 return error_mark_node;
3921 /* [temp.class.spec]
3923 The argument list of the specialization shall not be identical to
3924 the implicit argument list of the primary template. */
3925 if (comp_template_args
3926 (inner_args,
3927 INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
3928 (maintmpl)))))
3929 error ("partial specialization %qT does not specialize any template arguments", type);
3931 /* [temp.class.spec]
3933 A partially specialized non-type argument expression shall not
3934 involve template parameters of the partial specialization except
3935 when the argument expression is a simple identifier.
3937 The type of a template parameter corresponding to a specialized
3938 non-type argument shall not be dependent on a parameter of the
3939 specialization.
3941 Also, we verify that pack expansions only occur at the
3942 end of the argument list. */
3943 gcc_assert (nargs == DECL_NTPARMS (maintmpl));
3944 tpd2.parms = 0;
3945 for (i = 0; i < nargs; ++i)
3947 tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
3948 tree arg = TREE_VEC_ELT (inner_args, i);
3949 tree packed_args = NULL_TREE;
3950 int j, len = 1;
3952 if (ARGUMENT_PACK_P (arg))
3954 /* Extract the arguments from the argument pack. We'll be
3955 iterating over these in the following loop. */
3956 packed_args = ARGUMENT_PACK_ARGS (arg);
3957 len = TREE_VEC_LENGTH (packed_args);
3960 for (j = 0; j < len; j++)
3962 if (packed_args)
3963 /* Get the Jth argument in the parameter pack. */
3964 arg = TREE_VEC_ELT (packed_args, j);
3966 if (PACK_EXPANSION_P (arg))
3968 /* Pack expansions must come at the end of the
3969 argument list. */
3970 if ((packed_args && j < len - 1)
3971 || (!packed_args && i < nargs - 1))
3973 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3974 error ("parameter pack argument %qE must be at the "
3975 "end of the template argument list", arg);
3976 else
3977 error ("parameter pack argument %qT must be at the "
3978 "end of the template argument list", arg);
3982 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3983 /* We only care about the pattern. */
3984 arg = PACK_EXPANSION_PATTERN (arg);
3986 if (/* These first two lines are the `non-type' bit. */
3987 !TYPE_P (arg)
3988 && TREE_CODE (arg) != TEMPLATE_DECL
3989 /* This next line is the `argument expression is not just a
3990 simple identifier' condition and also the `specialized
3991 non-type argument' bit. */
3992 && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
3994 if ((!packed_args && tpd.arg_uses_template_parms[i])
3995 || (packed_args && uses_template_parms (arg)))
3996 error ("template argument %qE involves template parameter(s)",
3997 arg);
3998 else
4000 /* Look at the corresponding template parameter,
4001 marking which template parameters its type depends
4002 upon. */
4003 tree type = TREE_TYPE (parm);
4005 if (!tpd2.parms)
4007 /* We haven't yet initialized TPD2. Do so now. */
4008 tpd2.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4009 /* The number of parameters here is the number in the
4010 main template, which, as checked in the assertion
4011 above, is NARGS. */
4012 tpd2.parms = XALLOCAVEC (int, nargs);
4013 tpd2.level =
4014 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
4017 /* Mark the template parameters. But this time, we're
4018 looking for the template parameters of the main
4019 template, not in the specialization. */
4020 tpd2.current_arg = i;
4021 tpd2.arg_uses_template_parms[i] = 0;
4022 memset (tpd2.parms, 0, sizeof (int) * nargs);
4023 for_each_template_parm (type,
4024 &mark_template_parm,
4025 &tpd2,
4026 NULL,
4027 /*include_nondeduced_p=*/false);
4029 if (tpd2.arg_uses_template_parms [i])
4031 /* The type depended on some template parameters.
4032 If they are fully specialized in the
4033 specialization, that's OK. */
4034 int j;
4035 int count = 0;
4036 for (j = 0; j < nargs; ++j)
4037 if (tpd2.parms[j] != 0
4038 && tpd.arg_uses_template_parms [j])
4039 ++count;
4040 if (count != 0)
4041 error_n (input_location, count,
4042 "type %qT of template argument %qE depends "
4043 "on a template parameter",
4044 "type %qT of template argument %qE depends "
4045 "on template parameters",
4046 type,
4047 arg);
4054 /* We should only get here once. */
4055 gcc_assert (!COMPLETE_TYPE_P (type));
4057 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
4058 = tree_cons (specargs, inner_parms,
4059 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
4060 TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
4062 for (inst = DECL_TEMPLATE_INSTANTIATIONS (maintmpl); inst;
4063 inst = TREE_CHAIN (inst))
4065 tree inst_type = TREE_VALUE (inst);
4066 if (COMPLETE_TYPE_P (inst_type)
4067 && CLASSTYPE_IMPLICIT_INSTANTIATION (inst_type))
4069 tree spec = most_specialized_class (inst_type, maintmpl, tf_none);
4070 if (spec && TREE_TYPE (spec) == type)
4071 permerror (input_location,
4072 "partial specialization of %qT after instantiation "
4073 "of %qT", type, inst_type);
4077 return decl;
4080 /* Check that a template declaration's use of default arguments and
4081 parameter packs is not invalid. Here, PARMS are the template
4082 parameters. IS_PRIMARY is nonzero if DECL is the thing declared by
4083 a primary template. IS_PARTIAL is nonzero if DECL is a partial
4084 specialization.
4087 IS_FRIEND_DECL is nonzero if DECL is a friend function template
4088 declaration (but not a definition); 1 indicates a declaration, 2
4089 indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
4090 emitted for extraneous default arguments.
4092 Returns TRUE if there were no errors found, FALSE otherwise. */
4094 bool
4095 check_default_tmpl_args (tree decl, tree parms, int is_primary,
4096 int is_partial, int is_friend_decl)
4098 const char *msg;
4099 int last_level_to_check;
4100 tree parm_level;
4101 bool no_errors = true;
4103 /* [temp.param]
4105 A default template-argument shall not be specified in a
4106 function template declaration or a function template definition, nor
4107 in the template-parameter-list of the definition of a member of a
4108 class template. */
4110 if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
4111 /* You can't have a function template declaration in a local
4112 scope, nor you can you define a member of a class template in a
4113 local scope. */
4114 return true;
4116 if (current_class_type
4117 && !TYPE_BEING_DEFINED (current_class_type)
4118 && DECL_LANG_SPECIFIC (decl)
4119 && DECL_DECLARES_FUNCTION_P (decl)
4120 /* If this is either a friend defined in the scope of the class
4121 or a member function. */
4122 && (DECL_FUNCTION_MEMBER_P (decl)
4123 ? same_type_p (DECL_CONTEXT (decl), current_class_type)
4124 : DECL_FRIEND_CONTEXT (decl)
4125 ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
4126 : false)
4127 /* And, if it was a member function, it really was defined in
4128 the scope of the class. */
4129 && (!DECL_FUNCTION_MEMBER_P (decl)
4130 || DECL_INITIALIZED_IN_CLASS_P (decl)))
4131 /* We already checked these parameters when the template was
4132 declared, so there's no need to do it again now. This function
4133 was defined in class scope, but we're processing it's body now
4134 that the class is complete. */
4135 return true;
4137 /* Core issue 226 (C++0x only): the following only applies to class
4138 templates. */
4139 if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
4141 /* [temp.param]
4143 If a template-parameter has a default template-argument, all
4144 subsequent template-parameters shall have a default
4145 template-argument supplied. */
4146 for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
4148 tree inner_parms = TREE_VALUE (parm_level);
4149 int ntparms = TREE_VEC_LENGTH (inner_parms);
4150 int seen_def_arg_p = 0;
4151 int i;
4153 for (i = 0; i < ntparms; ++i)
4155 tree parm = TREE_VEC_ELT (inner_parms, i);
4157 if (parm == error_mark_node)
4158 continue;
4160 if (TREE_PURPOSE (parm))
4161 seen_def_arg_p = 1;
4162 else if (seen_def_arg_p
4163 && !template_parameter_pack_p (TREE_VALUE (parm)))
4165 error ("no default argument for %qD", TREE_VALUE (parm));
4166 /* For better subsequent error-recovery, we indicate that
4167 there should have been a default argument. */
4168 TREE_PURPOSE (parm) = error_mark_node;
4169 no_errors = false;
4171 else if (is_primary
4172 && !is_partial
4173 && !is_friend_decl
4174 /* Don't complain about an enclosing partial
4175 specialization. */
4176 && parm_level == parms
4177 && TREE_CODE (decl) == TYPE_DECL
4178 && i < ntparms - 1
4179 && template_parameter_pack_p (TREE_VALUE (parm)))
4181 /* A primary class template can only have one
4182 parameter pack, at the end of the template
4183 parameter list. */
4185 if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
4186 error ("parameter pack %qE must be at the end of the"
4187 " template parameter list", TREE_VALUE (parm));
4188 else
4189 error ("parameter pack %qT must be at the end of the"
4190 " template parameter list",
4191 TREE_TYPE (TREE_VALUE (parm)));
4193 TREE_VALUE (TREE_VEC_ELT (inner_parms, i))
4194 = error_mark_node;
4195 no_errors = false;
4201 if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
4202 || is_partial
4203 || !is_primary
4204 || is_friend_decl)
4205 /* For an ordinary class template, default template arguments are
4206 allowed at the innermost level, e.g.:
4207 template <class T = int>
4208 struct S {};
4209 but, in a partial specialization, they're not allowed even
4210 there, as we have in [temp.class.spec]:
4212 The template parameter list of a specialization shall not
4213 contain default template argument values.
4215 So, for a partial specialization, or for a function template
4216 (in C++98/C++03), we look at all of them. */
4218 else
4219 /* But, for a primary class template that is not a partial
4220 specialization we look at all template parameters except the
4221 innermost ones. */
4222 parms = TREE_CHAIN (parms);
4224 /* Figure out what error message to issue. */
4225 if (is_friend_decl == 2)
4226 msg = G_("default template arguments may not be used in function template "
4227 "friend re-declaration");
4228 else if (is_friend_decl)
4229 msg = G_("default template arguments may not be used in function template "
4230 "friend declarations");
4231 else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
4232 msg = G_("default template arguments may not be used in function templates "
4233 "without -std=c++0x or -std=gnu++0x");
4234 else if (is_partial)
4235 msg = G_("default template arguments may not be used in "
4236 "partial specializations");
4237 else
4238 msg = G_("default argument for template parameter for class enclosing %qD");
4240 if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
4241 /* If we're inside a class definition, there's no need to
4242 examine the parameters to the class itself. On the one
4243 hand, they will be checked when the class is defined, and,
4244 on the other, default arguments are valid in things like:
4245 template <class T = double>
4246 struct S { template <class U> void f(U); };
4247 Here the default argument for `S' has no bearing on the
4248 declaration of `f'. */
4249 last_level_to_check = template_class_depth (current_class_type) + 1;
4250 else
4251 /* Check everything. */
4252 last_level_to_check = 0;
4254 for (parm_level = parms;
4255 parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
4256 parm_level = TREE_CHAIN (parm_level))
4258 tree inner_parms = TREE_VALUE (parm_level);
4259 int i;
4260 int ntparms;
4262 ntparms = TREE_VEC_LENGTH (inner_parms);
4263 for (i = 0; i < ntparms; ++i)
4265 if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
4266 continue;
4268 if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
4270 if (msg)
4272 no_errors = false;
4273 if (is_friend_decl == 2)
4274 return no_errors;
4276 error (msg, decl);
4277 msg = 0;
4280 /* Clear out the default argument so that we are not
4281 confused later. */
4282 TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
4286 /* At this point, if we're still interested in issuing messages,
4287 they must apply to classes surrounding the object declared. */
4288 if (msg)
4289 msg = G_("default argument for template parameter for class "
4290 "enclosing %qD");
4293 return no_errors;
4296 /* Worker for push_template_decl_real, called via
4297 for_each_template_parm. DATA is really an int, indicating the
4298 level of the parameters we are interested in. If T is a template
4299 parameter of that level, return nonzero. */
4301 static int
4302 template_parm_this_level_p (tree t, void* data)
4304 int this_level = *(int *)data;
4305 int level;
4307 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4308 level = TEMPLATE_PARM_LEVEL (t);
4309 else
4310 level = TEMPLATE_TYPE_LEVEL (t);
4311 return level == this_level;
4314 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
4315 parameters given by current_template_args, or reuses a
4316 previously existing one, if appropriate. Returns the DECL, or an
4317 equivalent one, if it is replaced via a call to duplicate_decls.
4319 If IS_FRIEND is true, DECL is a friend declaration. */
4321 tree
4322 push_template_decl_real (tree decl, bool is_friend)
4324 tree tmpl;
4325 tree args;
4326 tree info;
4327 tree ctx;
4328 int primary;
4329 int is_partial;
4330 int new_template_p = 0;
4331 /* True if the template is a member template, in the sense of
4332 [temp.mem]. */
4333 bool member_template_p = false;
4335 if (decl == error_mark_node || !current_template_parms)
4336 return error_mark_node;
4338 /* See if this is a partial specialization. */
4339 is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
4340 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
4341 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
4343 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
4344 is_friend = true;
4346 if (is_friend)
4347 /* For a friend, we want the context of the friend function, not
4348 the type of which it is a friend. */
4349 ctx = DECL_CONTEXT (decl);
4350 else if (CP_DECL_CONTEXT (decl)
4351 && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4352 /* In the case of a virtual function, we want the class in which
4353 it is defined. */
4354 ctx = CP_DECL_CONTEXT (decl);
4355 else
4356 /* Otherwise, if we're currently defining some class, the DECL
4357 is assumed to be a member of the class. */
4358 ctx = current_scope ();
4360 if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
4361 ctx = NULL_TREE;
4363 if (!DECL_CONTEXT (decl))
4364 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
4366 /* See if this is a primary template. */
4367 if (is_friend && ctx)
4368 /* A friend template that specifies a class context, i.e.
4369 template <typename T> friend void A<T>::f();
4370 is not primary. */
4371 primary = 0;
4372 else
4373 primary = template_parm_scope_p ();
4375 if (primary)
4377 if (DECL_CLASS_SCOPE_P (decl))
4378 member_template_p = true;
4379 if (TREE_CODE (decl) == TYPE_DECL
4380 && ANON_AGGRNAME_P (DECL_NAME (decl)))
4382 error ("template class without a name");
4383 return error_mark_node;
4385 else if (TREE_CODE (decl) == FUNCTION_DECL)
4387 if (DECL_DESTRUCTOR_P (decl))
4389 /* [temp.mem]
4391 A destructor shall not be a member template. */
4392 error ("destructor %qD declared as member template", decl);
4393 return error_mark_node;
4395 if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
4396 && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
4397 || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
4398 || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
4399 || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
4400 == void_list_node)))
4402 /* [basic.stc.dynamic.allocation]
4404 An allocation function can be a function
4405 template. ... Template allocation functions shall
4406 have two or more parameters. */
4407 error ("invalid template declaration of %qD", decl);
4408 return error_mark_node;
4411 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4412 && CLASS_TYPE_P (TREE_TYPE (decl)))
4413 /* OK */;
4414 else
4416 error ("template declaration of %q#D", decl);
4417 return error_mark_node;
4421 /* Check to see that the rules regarding the use of default
4422 arguments are not being violated. */
4423 check_default_tmpl_args (decl, current_template_parms,
4424 primary, is_partial, /*is_friend_decl=*/0);
4426 /* Ensure that there are no parameter packs in the type of this
4427 declaration that have not been expanded. */
4428 if (TREE_CODE (decl) == FUNCTION_DECL)
4430 /* Check each of the arguments individually to see if there are
4431 any bare parameter packs. */
4432 tree type = TREE_TYPE (decl);
4433 tree arg = DECL_ARGUMENTS (decl);
4434 tree argtype = TYPE_ARG_TYPES (type);
4436 while (arg && argtype)
4438 if (!FUNCTION_PARAMETER_PACK_P (arg)
4439 && check_for_bare_parameter_packs (TREE_TYPE (arg)))
4441 /* This is a PARM_DECL that contains unexpanded parameter
4442 packs. We have already complained about this in the
4443 check_for_bare_parameter_packs call, so just replace
4444 these types with ERROR_MARK_NODE. */
4445 TREE_TYPE (arg) = error_mark_node;
4446 TREE_VALUE (argtype) = error_mark_node;
4449 arg = DECL_CHAIN (arg);
4450 argtype = TREE_CHAIN (argtype);
4453 /* Check for bare parameter packs in the return type and the
4454 exception specifiers. */
4455 if (check_for_bare_parameter_packs (TREE_TYPE (type)))
4456 /* Errors were already issued, set return type to int
4457 as the frontend doesn't expect error_mark_node as
4458 the return type. */
4459 TREE_TYPE (type) = integer_type_node;
4460 if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
4461 TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
4463 else if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
4465 TREE_TYPE (decl) = error_mark_node;
4466 return error_mark_node;
4469 if (is_partial)
4470 return process_partial_specialization (decl);
4472 args = current_template_args ();
4474 if (!ctx
4475 || TREE_CODE (ctx) == FUNCTION_DECL
4476 || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
4477 || (is_friend && !DECL_TEMPLATE_INFO (decl)))
4479 if (DECL_LANG_SPECIFIC (decl)
4480 && DECL_TEMPLATE_INFO (decl)
4481 && DECL_TI_TEMPLATE (decl))
4482 tmpl = DECL_TI_TEMPLATE (decl);
4483 /* If DECL is a TYPE_DECL for a class-template, then there won't
4484 be DECL_LANG_SPECIFIC. The information equivalent to
4485 DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead. */
4486 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4487 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
4488 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
4490 /* Since a template declaration already existed for this
4491 class-type, we must be redeclaring it here. Make sure
4492 that the redeclaration is valid. */
4493 redeclare_class_template (TREE_TYPE (decl),
4494 current_template_parms);
4495 /* We don't need to create a new TEMPLATE_DECL; just use the
4496 one we already had. */
4497 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
4499 else
4501 tmpl = build_template_decl (decl, current_template_parms,
4502 member_template_p);
4503 new_template_p = 1;
4505 if (DECL_LANG_SPECIFIC (decl)
4506 && DECL_TEMPLATE_SPECIALIZATION (decl))
4508 /* A specialization of a member template of a template
4509 class. */
4510 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4511 DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
4512 DECL_TEMPLATE_INFO (decl) = NULL_TREE;
4516 else
4518 tree a, t, current, parms;
4519 int i;
4520 tree tinfo = get_template_info (decl);
4522 if (!tinfo)
4524 error ("template definition of non-template %q#D", decl);
4525 return error_mark_node;
4528 tmpl = TI_TEMPLATE (tinfo);
4530 if (DECL_FUNCTION_TEMPLATE_P (tmpl)
4531 && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
4532 && DECL_TEMPLATE_SPECIALIZATION (decl)
4533 && DECL_MEMBER_TEMPLATE_P (tmpl))
4535 tree new_tmpl;
4537 /* The declaration is a specialization of a member
4538 template, declared outside the class. Therefore, the
4539 innermost template arguments will be NULL, so we
4540 replace them with the arguments determined by the
4541 earlier call to check_explicit_specialization. */
4542 args = DECL_TI_ARGS (decl);
4544 new_tmpl
4545 = build_template_decl (decl, current_template_parms,
4546 member_template_p);
4547 DECL_TEMPLATE_RESULT (new_tmpl) = decl;
4548 TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
4549 DECL_TI_TEMPLATE (decl) = new_tmpl;
4550 SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
4551 DECL_TEMPLATE_INFO (new_tmpl)
4552 = build_template_info (tmpl, args);
4554 register_specialization (new_tmpl,
4555 most_general_template (tmpl),
4556 args,
4557 is_friend, 0);
4558 return decl;
4561 /* Make sure the template headers we got make sense. */
4563 parms = DECL_TEMPLATE_PARMS (tmpl);
4564 i = TMPL_PARMS_DEPTH (parms);
4565 if (TMPL_ARGS_DEPTH (args) != i)
4567 error ("expected %d levels of template parms for %q#D, got %d",
4568 i, decl, TMPL_ARGS_DEPTH (args));
4570 else
4571 for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
4573 a = TMPL_ARGS_LEVEL (args, i);
4574 t = INNERMOST_TEMPLATE_PARMS (parms);
4576 if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
4578 if (current == decl)
4579 error ("got %d template parameters for %q#D",
4580 TREE_VEC_LENGTH (a), decl);
4581 else
4582 error ("got %d template parameters for %q#T",
4583 TREE_VEC_LENGTH (a), current);
4584 error (" but %d required", TREE_VEC_LENGTH (t));
4585 return error_mark_node;
4588 if (current == decl)
4589 current = ctx;
4590 else if (current == NULL_TREE)
4591 /* Can happen in erroneous input. */
4592 break;
4593 else
4594 current = (TYPE_P (current)
4595 ? TYPE_CONTEXT (current)
4596 : DECL_CONTEXT (current));
4599 /* Check that the parms are used in the appropriate qualifying scopes
4600 in the declarator. */
4601 if (!comp_template_args
4602 (TI_ARGS (tinfo),
4603 TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
4605 error ("\
4606 template arguments to %qD do not match original template %qD",
4607 decl, DECL_TEMPLATE_RESULT (tmpl));
4608 if (!uses_template_parms (TI_ARGS (tinfo)))
4609 inform (input_location, "use template<> for an explicit specialization");
4610 /* Avoid crash in import_export_decl. */
4611 DECL_INTERFACE_KNOWN (decl) = 1;
4612 return error_mark_node;
4616 DECL_TEMPLATE_RESULT (tmpl) = decl;
4617 TREE_TYPE (tmpl) = TREE_TYPE (decl);
4619 /* Push template declarations for global functions and types. Note
4620 that we do not try to push a global template friend declared in a
4621 template class; such a thing may well depend on the template
4622 parameters of the class. */
4623 if (new_template_p && !ctx
4624 && !(is_friend && template_class_depth (current_class_type) > 0))
4626 tmpl = pushdecl_namespace_level (tmpl, is_friend);
4627 if (tmpl == error_mark_node)
4628 return error_mark_node;
4630 /* Hide template friend classes that haven't been declared yet. */
4631 if (is_friend && TREE_CODE (decl) == TYPE_DECL)
4633 DECL_ANTICIPATED (tmpl) = 1;
4634 DECL_FRIEND_P (tmpl) = 1;
4638 if (primary)
4640 tree parms = DECL_TEMPLATE_PARMS (tmpl);
4641 int i;
4643 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
4644 if (DECL_CONV_FN_P (tmpl))
4646 int depth = TMPL_PARMS_DEPTH (parms);
4648 /* It is a conversion operator. See if the type converted to
4649 depends on innermost template operands. */
4651 if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
4652 depth))
4653 DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
4656 /* Give template template parms a DECL_CONTEXT of the template
4657 for which they are a parameter. */
4658 parms = INNERMOST_TEMPLATE_PARMS (parms);
4659 for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
4661 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4662 if (TREE_CODE (parm) == TEMPLATE_DECL)
4663 DECL_CONTEXT (parm) = tmpl;
4667 /* The DECL_TI_ARGS of DECL contains full set of arguments referring
4668 back to its most general template. If TMPL is a specialization,
4669 ARGS may only have the innermost set of arguments. Add the missing
4670 argument levels if necessary. */
4671 if (DECL_TEMPLATE_INFO (tmpl))
4672 args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
4674 info = build_template_info (tmpl, args);
4676 if (DECL_IMPLICIT_TYPEDEF_P (decl))
4677 SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
4678 else if (DECL_LANG_SPECIFIC (decl))
4679 DECL_TEMPLATE_INFO (decl) = info;
4681 return DECL_TEMPLATE_RESULT (tmpl);
4684 tree
4685 push_template_decl (tree decl)
4687 return push_template_decl_real (decl, false);
4690 /* Called when a class template TYPE is redeclared with the indicated
4691 template PARMS, e.g.:
4693 template <class T> struct S;
4694 template <class T> struct S {}; */
4696 bool
4697 redeclare_class_template (tree type, tree parms)
4699 tree tmpl;
4700 tree tmpl_parms;
4701 int i;
4703 if (!TYPE_TEMPLATE_INFO (type))
4705 error ("%qT is not a template type", type);
4706 return false;
4709 tmpl = TYPE_TI_TEMPLATE (type);
4710 if (!PRIMARY_TEMPLATE_P (tmpl))
4711 /* The type is nested in some template class. Nothing to worry
4712 about here; there are no new template parameters for the nested
4713 type. */
4714 return true;
4716 if (!parms)
4718 error ("template specifiers not specified in declaration of %qD",
4719 tmpl);
4720 return false;
4723 parms = INNERMOST_TEMPLATE_PARMS (parms);
4724 tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
4726 if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
4728 error_n (input_location, TREE_VEC_LENGTH (parms),
4729 "redeclared with %d template parameter",
4730 "redeclared with %d template parameters",
4731 TREE_VEC_LENGTH (parms));
4732 inform_n (input_location, TREE_VEC_LENGTH (tmpl_parms),
4733 "previous declaration %q+D used %d template parameter",
4734 "previous declaration %q+D used %d template parameters",
4735 tmpl, TREE_VEC_LENGTH (tmpl_parms));
4736 return false;
4739 for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
4741 tree tmpl_parm;
4742 tree parm;
4743 tree tmpl_default;
4744 tree parm_default;
4746 if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
4747 || TREE_VEC_ELT (parms, i) == error_mark_node)
4748 continue;
4750 tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
4751 if (tmpl_parm == error_mark_node)
4752 return false;
4754 parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4755 tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
4756 parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
4758 /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
4759 TEMPLATE_DECL. */
4760 if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
4761 || (TREE_CODE (tmpl_parm) != TYPE_DECL
4762 && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
4763 || (TREE_CODE (tmpl_parm) != PARM_DECL
4764 && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
4765 != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
4766 || (TREE_CODE (tmpl_parm) == PARM_DECL
4767 && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
4768 != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))))
4770 error ("template parameter %q+#D", tmpl_parm);
4771 error ("redeclared here as %q#D", parm);
4772 return false;
4775 if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
4777 /* We have in [temp.param]:
4779 A template-parameter may not be given default arguments
4780 by two different declarations in the same scope. */
4781 error_at (input_location, "redefinition of default argument for %q#D", parm);
4782 inform (DECL_SOURCE_LOCATION (tmpl_parm),
4783 "original definition appeared here");
4784 return false;
4787 if (parm_default != NULL_TREE)
4788 /* Update the previous template parameters (which are the ones
4789 that will really count) with the new default value. */
4790 TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
4791 else if (tmpl_default != NULL_TREE)
4792 /* Update the new parameters, too; they'll be used as the
4793 parameters for any members. */
4794 TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
4797 return true;
4800 /* Simplify EXPR if it is a non-dependent expression. Returns the
4801 (possibly simplified) expression. */
4803 tree
4804 fold_non_dependent_expr (tree expr)
4806 if (expr == NULL_TREE)
4807 return NULL_TREE;
4809 /* If we're in a template, but EXPR isn't value dependent, simplify
4810 it. We're supposed to treat:
4812 template <typename T> void f(T[1 + 1]);
4813 template <typename T> void f(T[2]);
4815 as two declarations of the same function, for example. */
4816 if (processing_template_decl
4817 && !type_dependent_expression_p (expr)
4818 && !value_dependent_expression_p (expr))
4820 HOST_WIDE_INT saved_processing_template_decl;
4822 saved_processing_template_decl = processing_template_decl;
4823 processing_template_decl = 0;
4824 expr = tsubst_copy_and_build (expr,
4825 /*args=*/NULL_TREE,
4826 tf_error,
4827 /*in_decl=*/NULL_TREE,
4828 /*function_p=*/false,
4829 /*integral_constant_expression_p=*/true);
4830 processing_template_decl = saved_processing_template_decl;
4832 return expr;
4835 /* EXPR is an expression which is used in a constant-expression context.
4836 For instance, it could be a VAR_DECL with a constant initializer.
4837 Extract the innermost constant expression.
4839 This is basically a more powerful version of
4840 integral_constant_value, which can be used also in templates where
4841 initializers can maintain a syntactic rather than semantic form
4842 (even if they are non-dependent, for access-checking purposes). */
4844 static tree
4845 fold_decl_constant_value (tree expr)
4847 tree const_expr = expr;
4850 expr = fold_non_dependent_expr (const_expr);
4851 const_expr = integral_constant_value (expr);
4853 while (expr != const_expr);
4855 return expr;
4858 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
4859 must be a function or a pointer-to-function type, as specified
4860 in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
4861 and check that the resulting function has external linkage. */
4863 static tree
4864 convert_nontype_argument_function (tree type, tree expr)
4866 tree fns = expr;
4867 tree fn, fn_no_ptr;
4869 fn = instantiate_type (type, fns, tf_none);
4870 if (fn == error_mark_node)
4871 return error_mark_node;
4873 fn_no_ptr = fn;
4874 if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
4875 fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
4876 if (TREE_CODE (fn_no_ptr) == BASELINK)
4877 fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
4879 /* [temp.arg.nontype]/1
4881 A template-argument for a non-type, non-template template-parameter
4882 shall be one of:
4883 [...]
4884 -- the address of an object or function with external linkage. */
4885 if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
4887 error ("%qE is not a valid template argument for type %qT "
4888 "because function %qD has not external linkage",
4889 expr, type, fn_no_ptr);
4890 return NULL_TREE;
4893 return fn;
4896 /* Subroutine of convert_nontype_argument.
4897 Check if EXPR of type TYPE is a valid pointer-to-member constant.
4898 Emit an error otherwise. */
4900 static bool
4901 check_valid_ptrmem_cst_expr (tree type, tree expr)
4903 STRIP_NOPS (expr);
4904 if (expr && (null_ptr_cst_p (expr) || TREE_CODE (expr) == PTRMEM_CST))
4905 return true;
4906 error ("%qE is not a valid template argument for type %qT",
4907 expr, type);
4908 error ("it must be a pointer-to-member of the form `&X::Y'");
4909 return false;
4912 /* Returns TRUE iff the address of OP is value-dependent.
4914 14.6.2.4 [temp.dep.temp]:
4915 A non-integral non-type template-argument is dependent if its type is
4916 dependent or it has either of the following forms
4917 qualified-id
4918 & qualified-id
4919 and contains a nested-name-specifier which specifies a class-name that
4920 names a dependent type.
4922 We generalize this to just say that the address of a member of a
4923 dependent class is value-dependent; the above doesn't cover the
4924 address of a static data member named with an unqualified-id. */
4926 static bool
4927 has_value_dependent_address (tree op)
4929 /* We could use get_inner_reference here, but there's no need;
4930 this is only relevant for template non-type arguments, which
4931 can only be expressed as &id-expression. */
4932 if (DECL_P (op))
4934 tree ctx = CP_DECL_CONTEXT (op);
4935 if (TYPE_P (ctx) && dependent_type_p (ctx))
4936 return true;
4939 return false;
4942 /* Attempt to convert the non-type template parameter EXPR to the
4943 indicated TYPE. If the conversion is successful, return the
4944 converted value. If the conversion is unsuccessful, return
4945 NULL_TREE if we issued an error message, or error_mark_node if we
4946 did not. We issue error messages for out-and-out bad template
4947 parameters, but not simply because the conversion failed, since we
4948 might be just trying to do argument deduction. Both TYPE and EXPR
4949 must be non-dependent.
4951 The conversion follows the special rules described in
4952 [temp.arg.nontype], and it is much more strict than an implicit
4953 conversion.
4955 This function is called twice for each template argument (see
4956 lookup_template_class for a more accurate description of this
4957 problem). This means that we need to handle expressions which
4958 are not valid in a C++ source, but can be created from the
4959 first call (for instance, casts to perform conversions). These
4960 hacks can go away after we fix the double coercion problem. */
4962 static tree
4963 convert_nontype_argument (tree type, tree expr)
4965 tree expr_type;
4967 /* Detect immediately string literals as invalid non-type argument.
4968 This special-case is not needed for correctness (we would easily
4969 catch this later), but only to provide better diagnostic for this
4970 common user mistake. As suggested by DR 100, we do not mention
4971 linkage issues in the diagnostic as this is not the point. */
4972 if (TREE_CODE (expr) == STRING_CST)
4974 error ("%qE is not a valid template argument for type %qT "
4975 "because string literals can never be used in this context",
4976 expr, type);
4977 return NULL_TREE;
4980 /* Add the ADDR_EXPR now for the benefit of
4981 value_dependent_expression_p. */
4982 if (TYPE_PTROBV_P (type))
4983 expr = decay_conversion (expr);
4985 /* If we are in a template, EXPR may be non-dependent, but still
4986 have a syntactic, rather than semantic, form. For example, EXPR
4987 might be a SCOPE_REF, rather than the VAR_DECL to which the
4988 SCOPE_REF refers. Preserving the qualifying scope is necessary
4989 so that access checking can be performed when the template is
4990 instantiated -- but here we need the resolved form so that we can
4991 convert the argument. */
4992 if (TYPE_REF_OBJ_P (type)
4993 && has_value_dependent_address (expr))
4994 /* If we want the address and it's value-dependent, don't fold. */;
4995 else
4996 expr = fold_non_dependent_expr (expr);
4997 if (error_operand_p (expr))
4998 return error_mark_node;
4999 expr_type = TREE_TYPE (expr);
5000 if (TREE_CODE (type) == REFERENCE_TYPE)
5001 expr = mark_lvalue_use (expr);
5002 else
5003 expr = mark_rvalue_use (expr);
5005 /* HACK: Due to double coercion, we can get a
5006 NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
5007 which is the tree that we built on the first call (see
5008 below when coercing to reference to object or to reference to
5009 function). We just strip everything and get to the arg.
5010 See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
5011 for examples. */
5012 if (TREE_CODE (expr) == NOP_EXPR)
5014 if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
5016 /* ??? Maybe we could use convert_from_reference here, but we
5017 would need to relax its constraints because the NOP_EXPR
5018 could actually change the type to something more cv-qualified,
5019 and this is not folded by convert_from_reference. */
5020 tree addr = TREE_OPERAND (expr, 0);
5021 gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
5022 gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
5023 gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
5024 gcc_assert (same_type_ignoring_top_level_qualifiers_p
5025 (TREE_TYPE (expr_type),
5026 TREE_TYPE (TREE_TYPE (addr))));
5028 expr = TREE_OPERAND (addr, 0);
5029 expr_type = TREE_TYPE (expr);
5032 /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
5033 parameter is a pointer to object, through decay and
5034 qualification conversion. Let's strip everything. */
5035 else if (TYPE_PTROBV_P (type))
5037 STRIP_NOPS (expr);
5038 gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
5039 gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
5040 /* Skip the ADDR_EXPR only if it is part of the decay for
5041 an array. Otherwise, it is part of the original argument
5042 in the source code. */
5043 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
5044 expr = TREE_OPERAND (expr, 0);
5045 expr_type = TREE_TYPE (expr);
5049 /* [temp.arg.nontype]/5, bullet 1
5051 For a non-type template-parameter of integral or enumeration type,
5052 integral promotions (_conv.prom_) and integral conversions
5053 (_conv.integral_) are applied. */
5054 if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5056 if (!INTEGRAL_OR_ENUMERATION_TYPE_P (expr_type))
5057 return error_mark_node;
5059 expr = fold_decl_constant_value (expr);
5060 /* Notice that there are constant expressions like '4 % 0' which
5061 do not fold into integer constants. */
5062 if (TREE_CODE (expr) != INTEGER_CST)
5064 error ("%qE is not a valid template argument for type %qT "
5065 "because it is a non-constant expression", expr, type);
5066 return NULL_TREE;
5069 /* At this point, an implicit conversion does what we want,
5070 because we already know that the expression is of integral
5071 type. */
5072 expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
5073 if (expr == error_mark_node)
5074 return error_mark_node;
5076 /* Conversion was allowed: fold it to a bare integer constant. */
5077 expr = fold (expr);
5079 /* [temp.arg.nontype]/5, bullet 2
5081 For a non-type template-parameter of type pointer to object,
5082 qualification conversions (_conv.qual_) and the array-to-pointer
5083 conversion (_conv.array_) are applied. */
5084 else if (TYPE_PTROBV_P (type))
5086 /* [temp.arg.nontype]/1 (TC1 version, DR 49):
5088 A template-argument for a non-type, non-template template-parameter
5089 shall be one of: [...]
5091 -- the name of a non-type template-parameter;
5092 -- the address of an object or function with external linkage, [...]
5093 expressed as "& id-expression" where the & is optional if the name
5094 refers to a function or array, or if the corresponding
5095 template-parameter is a reference.
5097 Here, we do not care about functions, as they are invalid anyway
5098 for a parameter of type pointer-to-object. */
5100 if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
5101 /* Non-type template parameters are OK. */
5103 else if (TREE_CODE (expr) != ADDR_EXPR
5104 && TREE_CODE (expr_type) != ARRAY_TYPE)
5106 if (TREE_CODE (expr) == VAR_DECL)
5108 error ("%qD is not a valid template argument "
5109 "because %qD is a variable, not the address of "
5110 "a variable",
5111 expr, expr);
5112 return NULL_TREE;
5114 /* Other values, like integer constants, might be valid
5115 non-type arguments of some other type. */
5116 return error_mark_node;
5118 else
5120 tree decl;
5122 decl = ((TREE_CODE (expr) == ADDR_EXPR)
5123 ? TREE_OPERAND (expr, 0) : expr);
5124 if (TREE_CODE (decl) != VAR_DECL)
5126 error ("%qE is not a valid template argument of type %qT "
5127 "because %qE is not a variable",
5128 expr, type, decl);
5129 return NULL_TREE;
5131 else if (!DECL_EXTERNAL_LINKAGE_P (decl))
5133 error ("%qE is not a valid template argument of type %qT "
5134 "because %qD does not have external linkage",
5135 expr, type, decl);
5136 return NULL_TREE;
5140 expr = decay_conversion (expr);
5141 if (expr == error_mark_node)
5142 return error_mark_node;
5144 expr = perform_qualification_conversions (type, expr);
5145 if (expr == error_mark_node)
5146 return error_mark_node;
5148 /* [temp.arg.nontype]/5, bullet 3
5150 For a non-type template-parameter of type reference to object, no
5151 conversions apply. The type referred to by the reference may be more
5152 cv-qualified than the (otherwise identical) type of the
5153 template-argument. The template-parameter is bound directly to the
5154 template-argument, which must be an lvalue. */
5155 else if (TYPE_REF_OBJ_P (type))
5157 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
5158 expr_type))
5159 return error_mark_node;
5161 if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
5163 error ("%qE is not a valid template argument for type %qT "
5164 "because of conflicts in cv-qualification", expr, type);
5165 return NULL_TREE;
5168 if (!real_lvalue_p (expr))
5170 error ("%qE is not a valid template argument for type %qT "
5171 "because it is not an lvalue", expr, type);
5172 return NULL_TREE;
5175 /* [temp.arg.nontype]/1
5177 A template-argument for a non-type, non-template template-parameter
5178 shall be one of: [...]
5180 -- the address of an object or function with external linkage. */
5181 if (TREE_CODE (expr) == INDIRECT_REF
5182 && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
5184 expr = TREE_OPERAND (expr, 0);
5185 if (DECL_P (expr))
5187 error ("%q#D is not a valid template argument for type %qT "
5188 "because a reference variable does not have a constant "
5189 "address", expr, type);
5190 return NULL_TREE;
5194 if (!DECL_P (expr))
5196 error ("%qE is not a valid template argument for type %qT "
5197 "because it is not an object with external linkage",
5198 expr, type);
5199 return NULL_TREE;
5202 if (!DECL_EXTERNAL_LINKAGE_P (expr))
5204 error ("%qE is not a valid template argument for type %qT "
5205 "because object %qD has not external linkage",
5206 expr, type, expr);
5207 return NULL_TREE;
5210 expr = build_nop (type, build_address (expr));
5212 /* [temp.arg.nontype]/5, bullet 4
5214 For a non-type template-parameter of type pointer to function, only
5215 the function-to-pointer conversion (_conv.func_) is applied. If the
5216 template-argument represents a set of overloaded functions (or a
5217 pointer to such), the matching function is selected from the set
5218 (_over.over_). */
5219 else if (TYPE_PTRFN_P (type))
5221 /* If the argument is a template-id, we might not have enough
5222 context information to decay the pointer. */
5223 if (!type_unknown_p (expr_type))
5225 expr = decay_conversion (expr);
5226 if (expr == error_mark_node)
5227 return error_mark_node;
5230 expr = convert_nontype_argument_function (type, expr);
5231 if (!expr || expr == error_mark_node)
5232 return expr;
5234 if (TREE_CODE (expr) != ADDR_EXPR)
5236 error ("%qE is not a valid template argument for type %qT", expr, type);
5237 error ("it must be the address of a function with external linkage");
5238 return NULL_TREE;
5241 /* [temp.arg.nontype]/5, bullet 5
5243 For a non-type template-parameter of type reference to function, no
5244 conversions apply. If the template-argument represents a set of
5245 overloaded functions, the matching function is selected from the set
5246 (_over.over_). */
5247 else if (TYPE_REFFN_P (type))
5249 if (TREE_CODE (expr) == ADDR_EXPR)
5251 error ("%qE is not a valid template argument for type %qT "
5252 "because it is a pointer", expr, type);
5253 inform (input_location, "try using %qE instead", TREE_OPERAND (expr, 0));
5254 return NULL_TREE;
5257 expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
5258 if (!expr || expr == error_mark_node)
5259 return expr;
5261 expr = build_nop (type, build_address (expr));
5263 /* [temp.arg.nontype]/5, bullet 6
5265 For a non-type template-parameter of type pointer to member function,
5266 no conversions apply. If the template-argument represents a set of
5267 overloaded member functions, the matching member function is selected
5268 from the set (_over.over_). */
5269 else if (TYPE_PTRMEMFUNC_P (type))
5271 expr = instantiate_type (type, expr, tf_none);
5272 if (expr == error_mark_node)
5273 return error_mark_node;
5275 /* [temp.arg.nontype] bullet 1 says the pointer to member
5276 expression must be a pointer-to-member constant. */
5277 if (!check_valid_ptrmem_cst_expr (type, expr))
5278 return error_mark_node;
5280 /* There is no way to disable standard conversions in
5281 resolve_address_of_overloaded_function (called by
5282 instantiate_type). It is possible that the call succeeded by
5283 converting &B::I to &D::I (where B is a base of D), so we need
5284 to reject this conversion here.
5286 Actually, even if there was a way to disable standard conversions,
5287 it would still be better to reject them here so that we can
5288 provide a superior diagnostic. */
5289 if (!same_type_p (TREE_TYPE (expr), type))
5291 error ("%qE is not a valid template argument for type %qT "
5292 "because it is of type %qT", expr, type,
5293 TREE_TYPE (expr));
5294 /* If we are just one standard conversion off, explain. */
5295 if (can_convert (type, TREE_TYPE (expr)))
5296 inform (input_location,
5297 "standard conversions are not allowed in this context");
5298 return NULL_TREE;
5301 /* [temp.arg.nontype]/5, bullet 7
5303 For a non-type template-parameter of type pointer to data member,
5304 qualification conversions (_conv.qual_) are applied. */
5305 else if (TYPE_PTRMEM_P (type))
5307 /* [temp.arg.nontype] bullet 1 says the pointer to member
5308 expression must be a pointer-to-member constant. */
5309 if (!check_valid_ptrmem_cst_expr (type, expr))
5310 return error_mark_node;
5312 expr = perform_qualification_conversions (type, expr);
5313 if (expr == error_mark_node)
5314 return expr;
5316 /* A template non-type parameter must be one of the above. */
5317 else
5318 gcc_unreachable ();
5320 /* Sanity check: did we actually convert the argument to the
5321 right type? */
5322 gcc_assert (same_type_p (type, TREE_TYPE (expr)));
5323 return expr;
5326 /* Subroutine of coerce_template_template_parms, which returns 1 if
5327 PARM_PARM and ARG_PARM match using the rule for the template
5328 parameters of template template parameters. Both PARM and ARG are
5329 template parameters; the rest of the arguments are the same as for
5330 coerce_template_template_parms.
5332 static int
5333 coerce_template_template_parm (tree parm,
5334 tree arg,
5335 tsubst_flags_t complain,
5336 tree in_decl,
5337 tree outer_args)
5339 if (arg == NULL_TREE || arg == error_mark_node
5340 || parm == NULL_TREE || parm == error_mark_node)
5341 return 0;
5343 if (TREE_CODE (arg) != TREE_CODE (parm))
5344 return 0;
5346 switch (TREE_CODE (parm))
5348 case TEMPLATE_DECL:
5349 /* We encounter instantiations of templates like
5350 template <template <template <class> class> class TT>
5351 class C; */
5353 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
5354 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
5356 if (!coerce_template_template_parms
5357 (parmparm, argparm, complain, in_decl, outer_args))
5358 return 0;
5360 /* Fall through. */
5362 case TYPE_DECL:
5363 if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
5364 && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
5365 /* Argument is a parameter pack but parameter is not. */
5366 return 0;
5367 break;
5369 case PARM_DECL:
5370 /* The tsubst call is used to handle cases such as
5372 template <int> class C {};
5373 template <class T, template <T> class TT> class D {};
5374 D<int, C> d;
5376 i.e. the parameter list of TT depends on earlier parameters. */
5377 if (!uses_template_parms (TREE_TYPE (arg))
5378 && !same_type_p
5379 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
5380 TREE_TYPE (arg)))
5381 return 0;
5383 if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
5384 && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
5385 /* Argument is a parameter pack but parameter is not. */
5386 return 0;
5388 break;
5390 default:
5391 gcc_unreachable ();
5394 return 1;
5398 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
5399 template template parameters. Both PARM_PARMS and ARG_PARMS are
5400 vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
5401 or PARM_DECL.
5403 Consider the example:
5404 template <class T> class A;
5405 template<template <class U> class TT> class B;
5407 For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
5408 the parameters to A, and OUTER_ARGS contains A. */
5410 static int
5411 coerce_template_template_parms (tree parm_parms,
5412 tree arg_parms,
5413 tsubst_flags_t complain,
5414 tree in_decl,
5415 tree outer_args)
5417 int nparms, nargs, i;
5418 tree parm, arg;
5419 int variadic_p = 0;
5421 gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
5422 gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
5424 nparms = TREE_VEC_LENGTH (parm_parms);
5425 nargs = TREE_VEC_LENGTH (arg_parms);
5427 /* Determine whether we have a parameter pack at the end of the
5428 template template parameter's template parameter list. */
5429 if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
5431 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
5433 if (parm == error_mark_node)
5434 return 0;
5436 switch (TREE_CODE (parm))
5438 case TEMPLATE_DECL:
5439 case TYPE_DECL:
5440 if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
5441 variadic_p = 1;
5442 break;
5444 case PARM_DECL:
5445 if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
5446 variadic_p = 1;
5447 break;
5449 default:
5450 gcc_unreachable ();
5454 if (nargs != nparms
5455 && !(variadic_p && nargs >= nparms - 1))
5456 return 0;
5458 /* Check all of the template parameters except the parameter pack at
5459 the end (if any). */
5460 for (i = 0; i < nparms - variadic_p; ++i)
5462 if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
5463 || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
5464 continue;
5466 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
5467 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
5469 if (!coerce_template_template_parm (parm, arg, complain, in_decl,
5470 outer_args))
5471 return 0;
5475 if (variadic_p)
5477 /* Check each of the template parameters in the template
5478 argument against the template parameter pack at the end of
5479 the template template parameter. */
5480 if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
5481 return 0;
5483 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
5485 for (; i < nargs; ++i)
5487 if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
5488 continue;
5490 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
5492 if (!coerce_template_template_parm (parm, arg, complain, in_decl,
5493 outer_args))
5494 return 0;
5498 return 1;
5501 /* Verifies that the deduced template arguments (in TARGS) for the
5502 template template parameters (in TPARMS) represent valid bindings,
5503 by comparing the template parameter list of each template argument
5504 to the template parameter list of its corresponding template
5505 template parameter, in accordance with DR150. This
5506 routine can only be called after all template arguments have been
5507 deduced. It will return TRUE if all of the template template
5508 parameter bindings are okay, FALSE otherwise. */
5509 bool
5510 template_template_parm_bindings_ok_p (tree tparms, tree targs)
5512 int i, ntparms = TREE_VEC_LENGTH (tparms);
5513 bool ret = true;
5515 /* We're dealing with template parms in this process. */
5516 ++processing_template_decl;
5518 targs = INNERMOST_TEMPLATE_ARGS (targs);
5520 for (i = 0; i < ntparms; ++i)
5522 tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
5523 tree targ = TREE_VEC_ELT (targs, i);
5525 if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
5527 tree packed_args = NULL_TREE;
5528 int idx, len = 1;
5530 if (ARGUMENT_PACK_P (targ))
5532 /* Look inside the argument pack. */
5533 packed_args = ARGUMENT_PACK_ARGS (targ);
5534 len = TREE_VEC_LENGTH (packed_args);
5537 for (idx = 0; idx < len; ++idx)
5539 tree targ_parms = NULL_TREE;
5541 if (packed_args)
5542 /* Extract the next argument from the argument
5543 pack. */
5544 targ = TREE_VEC_ELT (packed_args, idx);
5546 if (PACK_EXPANSION_P (targ))
5547 /* Look at the pattern of the pack expansion. */
5548 targ = PACK_EXPANSION_PATTERN (targ);
5550 /* Extract the template parameters from the template
5551 argument. */
5552 if (TREE_CODE (targ) == TEMPLATE_DECL)
5553 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
5554 else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
5555 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
5557 /* Verify that we can coerce the template template
5558 parameters from the template argument to the template
5559 parameter. This requires an exact match. */
5560 if (targ_parms
5561 && !coerce_template_template_parms
5562 (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
5563 targ_parms,
5564 tf_none,
5565 tparm,
5566 targs))
5568 ret = false;
5569 goto out;
5575 out:
5577 --processing_template_decl;
5578 return ret;
5581 /* Convert the indicated template ARG as necessary to match the
5582 indicated template PARM. Returns the converted ARG, or
5583 error_mark_node if the conversion was unsuccessful. Error and
5584 warning messages are issued under control of COMPLAIN. This
5585 conversion is for the Ith parameter in the parameter list. ARGS is
5586 the full set of template arguments deduced so far. */
5588 static tree
5589 convert_template_argument (tree parm,
5590 tree arg,
5591 tree args,
5592 tsubst_flags_t complain,
5593 int i,
5594 tree in_decl)
5596 tree orig_arg;
5597 tree val;
5598 int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
5600 if (TREE_CODE (arg) == TREE_LIST
5601 && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
5603 /* The template argument was the name of some
5604 member function. That's usually
5605 invalid, but static members are OK. In any
5606 case, grab the underlying fields/functions
5607 and issue an error later if required. */
5608 orig_arg = TREE_VALUE (arg);
5609 TREE_TYPE (arg) = unknown_type_node;
5612 orig_arg = arg;
5614 requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
5615 requires_type = (TREE_CODE (parm) == TYPE_DECL
5616 || requires_tmpl_type);
5618 /* When determining whether an argument pack expansion is a template,
5619 look at the pattern. */
5620 if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
5621 arg = PACK_EXPANSION_PATTERN (arg);
5623 /* Deal with an injected-class-name used as a template template arg. */
5624 if (requires_tmpl_type && CLASS_TYPE_P (arg))
5626 tree t = maybe_get_template_decl_from_type_decl (TYPE_NAME (arg));
5627 if (TREE_CODE (t) == TEMPLATE_DECL)
5629 if (complain & tf_warning_or_error)
5630 pedwarn (input_location, OPT_pedantic, "injected-class-name %qD"
5631 " used as template template argument", TYPE_NAME (arg));
5632 else if (flag_pedantic_errors)
5633 t = arg;
5635 arg = t;
5639 is_tmpl_type =
5640 ((TREE_CODE (arg) == TEMPLATE_DECL
5641 && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
5642 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
5643 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
5645 if (is_tmpl_type
5646 && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
5647 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
5648 arg = TYPE_STUB_DECL (arg);
5650 is_type = TYPE_P (arg) || is_tmpl_type;
5652 if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
5653 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
5655 permerror (input_location, "to refer to a type member of a template parameter, "
5656 "use %<typename %E%>", orig_arg);
5658 orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
5659 TREE_OPERAND (arg, 1),
5660 typename_type,
5661 complain & tf_error);
5662 arg = orig_arg;
5663 is_type = 1;
5665 if (is_type != requires_type)
5667 if (in_decl)
5669 if (complain & tf_error)
5671 error ("type/value mismatch at argument %d in template "
5672 "parameter list for %qD",
5673 i + 1, in_decl);
5674 if (is_type)
5675 error (" expected a constant of type %qT, got %qT",
5676 TREE_TYPE (parm),
5677 (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
5678 else if (requires_tmpl_type)
5679 error (" expected a class template, got %qE", orig_arg);
5680 else
5681 error (" expected a type, got %qE", orig_arg);
5684 return error_mark_node;
5686 if (is_tmpl_type ^ requires_tmpl_type)
5688 if (in_decl && (complain & tf_error))
5690 error ("type/value mismatch at argument %d in template "
5691 "parameter list for %qD",
5692 i + 1, in_decl);
5693 if (is_tmpl_type)
5694 error (" expected a type, got %qT", DECL_NAME (arg));
5695 else
5696 error (" expected a class template, got %qT", orig_arg);
5698 return error_mark_node;
5701 if (is_type)
5703 if (requires_tmpl_type)
5705 if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
5706 /* The number of argument required is not known yet.
5707 Just accept it for now. */
5708 val = TREE_TYPE (arg);
5709 else
5711 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
5712 tree argparm;
5714 argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
5716 if (coerce_template_template_parms (parmparm, argparm,
5717 complain, in_decl,
5718 args))
5720 val = arg;
5722 /* TEMPLATE_TEMPLATE_PARM node is preferred over
5723 TEMPLATE_DECL. */
5724 if (val != error_mark_node)
5726 if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
5727 val = TREE_TYPE (val);
5728 if (TREE_CODE (orig_arg) == TYPE_PACK_EXPANSION)
5729 val = make_pack_expansion (val);
5732 else
5734 if (in_decl && (complain & tf_error))
5736 error ("type/value mismatch at argument %d in "
5737 "template parameter list for %qD",
5738 i + 1, in_decl);
5739 error (" expected a template of type %qD, got %qT",
5740 parm, orig_arg);
5743 val = error_mark_node;
5747 else
5748 val = orig_arg;
5749 /* We only form one instance of each template specialization.
5750 Therefore, if we use a non-canonical variant (i.e., a
5751 typedef), any future messages referring to the type will use
5752 the typedef, which is confusing if those future uses do not
5753 themselves also use the typedef. */
5754 if (TYPE_P (val))
5755 val = strip_typedefs (val);
5757 else
5759 tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
5761 if (invalid_nontype_parm_type_p (t, complain))
5762 return error_mark_node;
5764 if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
5766 if (same_type_p (t, TREE_TYPE (orig_arg)))
5767 val = orig_arg;
5768 else
5770 /* Not sure if this is reachable, but it doesn't hurt
5771 to be robust. */
5772 error ("type mismatch in nontype parameter pack");
5773 val = error_mark_node;
5776 else if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
5777 /* We used to call digest_init here. However, digest_init
5778 will report errors, which we don't want when complain
5779 is zero. More importantly, digest_init will try too
5780 hard to convert things: for example, `0' should not be
5781 converted to pointer type at this point according to
5782 the standard. Accepting this is not merely an
5783 extension, since deciding whether or not these
5784 conversions can occur is part of determining which
5785 function template to call, or whether a given explicit
5786 argument specification is valid. */
5787 val = convert_nontype_argument (t, orig_arg);
5788 else
5789 val = orig_arg;
5791 if (val == NULL_TREE)
5792 val = error_mark_node;
5793 else if (val == error_mark_node && (complain & tf_error))
5794 error ("could not convert template argument %qE to %qT", orig_arg, t);
5796 if (TREE_CODE (val) == SCOPE_REF)
5798 /* Strip typedefs from the SCOPE_REF. */
5799 tree type = strip_typedefs (TREE_TYPE (val));
5800 tree scope = strip_typedefs (TREE_OPERAND (val, 0));
5801 val = build_qualified_name (type, scope, TREE_OPERAND (val, 1),
5802 QUALIFIED_NAME_IS_TEMPLATE (val));
5806 return val;
5809 /* Coerces the remaining template arguments in INNER_ARGS (from
5810 ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
5811 Returns the coerced argument pack. PARM_IDX is the position of this
5812 parameter in the template parameter list. ARGS is the original
5813 template argument list. */
5814 static tree
5815 coerce_template_parameter_pack (tree parms,
5816 int parm_idx,
5817 tree args,
5818 tree inner_args,
5819 int arg_idx,
5820 tree new_args,
5821 int* lost,
5822 tree in_decl,
5823 tsubst_flags_t complain)
5825 tree parm = TREE_VEC_ELT (parms, parm_idx);
5826 int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5827 tree packed_args;
5828 tree argument_pack;
5829 tree packed_types = NULL_TREE;
5831 if (arg_idx > nargs)
5832 arg_idx = nargs;
5834 packed_args = make_tree_vec (nargs - arg_idx);
5836 if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
5837 && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
5839 /* When the template parameter is a non-type template
5840 parameter pack whose type uses parameter packs, we need
5841 to look at each of the template arguments
5842 separately. Build a vector of the types for these
5843 non-type template parameters in PACKED_TYPES. */
5844 tree expansion
5845 = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
5846 packed_types = tsubst_pack_expansion (expansion, args,
5847 complain, in_decl);
5849 if (packed_types == error_mark_node)
5850 return error_mark_node;
5852 /* Check that we have the right number of arguments. */
5853 if (arg_idx < nargs
5854 && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
5855 && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
5857 int needed_parms
5858 = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
5859 error ("wrong number of template arguments (%d, should be %d)",
5860 nargs, needed_parms);
5861 return error_mark_node;
5864 /* If we aren't able to check the actual arguments now
5865 (because they haven't been expanded yet), we can at least
5866 verify that all of the types used for the non-type
5867 template parameter pack are, in fact, valid for non-type
5868 template parameters. */
5869 if (arg_idx < nargs
5870 && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
5872 int j, len = TREE_VEC_LENGTH (packed_types);
5873 for (j = 0; j < len; ++j)
5875 tree t = TREE_VEC_ELT (packed_types, j);
5876 if (invalid_nontype_parm_type_p (t, complain))
5877 return error_mark_node;
5882 /* Convert the remaining arguments, which will be a part of the
5883 parameter pack "parm". */
5884 for (; arg_idx < nargs; ++arg_idx)
5886 tree arg = TREE_VEC_ELT (inner_args, arg_idx);
5887 tree actual_parm = TREE_VALUE (parm);
5889 if (packed_types && !PACK_EXPANSION_P (arg))
5891 /* When we have a vector of types (corresponding to the
5892 non-type template parameter pack that uses parameter
5893 packs in its type, as mention above), and the
5894 argument is not an expansion (which expands to a
5895 currently unknown number of arguments), clone the
5896 parm and give it the next type in PACKED_TYPES. */
5897 actual_parm = copy_node (actual_parm);
5898 TREE_TYPE (actual_parm) =
5899 TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
5902 if (arg != error_mark_node)
5903 arg = convert_template_argument (actual_parm,
5904 arg, new_args, complain, parm_idx,
5905 in_decl);
5906 if (arg == error_mark_node)
5907 (*lost)++;
5908 TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg;
5911 if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
5912 || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
5913 argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
5914 else
5916 argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
5917 TREE_TYPE (argument_pack)
5918 = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
5919 TREE_CONSTANT (argument_pack) = 1;
5922 SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
5923 #ifdef ENABLE_CHECKING
5924 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
5925 TREE_VEC_LENGTH (packed_args));
5926 #endif
5927 return argument_pack;
5930 /* Convert all template arguments to their appropriate types, and
5931 return a vector containing the innermost resulting template
5932 arguments. If any error occurs, return error_mark_node. Error and
5933 warning messages are issued under control of COMPLAIN.
5935 If REQUIRE_ALL_ARGS is false, argument deduction will be performed
5936 for arguments not specified in ARGS. Otherwise, if
5937 USE_DEFAULT_ARGS is true, default arguments will be used to fill in
5938 unspecified arguments. If REQUIRE_ALL_ARGS is true, but
5939 USE_DEFAULT_ARGS is false, then all arguments must be specified in
5940 ARGS. */
5942 static tree
5943 coerce_template_parms (tree parms,
5944 tree args,
5945 tree in_decl,
5946 tsubst_flags_t complain,
5947 bool require_all_args,
5948 bool use_default_args)
5950 int nparms, nargs, parm_idx, arg_idx, lost = 0;
5951 tree inner_args;
5952 tree new_args;
5953 tree new_inner_args;
5954 int saved_unevaluated_operand;
5955 int saved_inhibit_evaluation_warnings;
5957 /* When used as a boolean value, indicates whether this is a
5958 variadic template parameter list. Since it's an int, we can also
5959 subtract it from nparms to get the number of non-variadic
5960 parameters. */
5961 int variadic_p = 0;
5963 nparms = TREE_VEC_LENGTH (parms);
5965 /* Determine if there are any parameter packs. */
5966 for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
5968 tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
5969 if (template_parameter_pack_p (tparm))
5970 ++variadic_p;
5973 inner_args = INNERMOST_TEMPLATE_ARGS (args);
5974 /* If there are 0 or 1 parameter packs, we need to expand any argument
5975 packs so that we can deduce a parameter pack from some non-packed args
5976 followed by an argument pack, as in variadic85.C. If there are more
5977 than that, we need to leave argument packs intact so the arguments are
5978 assigned to the right parameter packs. This should only happen when
5979 dealing with a nested class inside a partial specialization of a class
5980 template, as in variadic92.C. */
5981 if (variadic_p <= 1)
5982 inner_args = expand_template_argument_pack (inner_args);
5984 nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5985 if ((nargs > nparms && !variadic_p)
5986 || (nargs < nparms - variadic_p
5987 && require_all_args
5988 && (!use_default_args
5989 || (TREE_VEC_ELT (parms, nargs) != error_mark_node
5990 && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
5992 if (complain & tf_error)
5994 if (variadic_p)
5996 --nparms;
5997 error ("wrong number of template arguments "
5998 "(%d, should be %d or more)", nargs, nparms);
6000 else
6001 error ("wrong number of template arguments "
6002 "(%d, should be %d)", nargs, nparms);
6004 if (in_decl)
6005 error ("provided for %q+D", in_decl);
6008 return error_mark_node;
6011 /* We need to evaluate the template arguments, even though this
6012 template-id may be nested within a "sizeof". */
6013 saved_unevaluated_operand = cp_unevaluated_operand;
6014 cp_unevaluated_operand = 0;
6015 saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
6016 c_inhibit_evaluation_warnings = 0;
6017 new_inner_args = make_tree_vec (nparms);
6018 new_args = add_outermost_template_args (args, new_inner_args);
6019 for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
6021 tree arg;
6022 tree parm;
6024 /* Get the Ith template parameter. */
6025 parm = TREE_VEC_ELT (parms, parm_idx);
6027 if (parm == error_mark_node)
6029 TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
6030 continue;
6033 /* Calculate the next argument. */
6034 if (arg_idx < nargs)
6035 arg = TREE_VEC_ELT (inner_args, arg_idx);
6036 else
6037 arg = NULL_TREE;
6039 if (template_parameter_pack_p (TREE_VALUE (parm))
6040 && !(arg && ARGUMENT_PACK_P (arg)))
6042 /* All remaining arguments will be placed in the
6043 template parameter pack PARM. */
6044 arg = coerce_template_parameter_pack (parms, parm_idx, args,
6045 inner_args, arg_idx,
6046 new_args, &lost,
6047 in_decl, complain);
6049 /* Store this argument. */
6050 if (arg == error_mark_node)
6051 lost++;
6052 TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
6054 /* We are done with all of the arguments. */
6055 arg_idx = nargs;
6057 continue;
6059 else if (arg)
6061 if (PACK_EXPANSION_P (arg))
6063 if (complain & tf_error)
6065 /* FIXME this restriction was removed by N2555; see
6066 bug 35722. */
6067 /* If ARG is a pack expansion, but PARM is not a
6068 template parameter pack (if it were, we would have
6069 handled it above), we're trying to expand into a
6070 fixed-length argument list. */
6071 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
6072 sorry ("cannot expand %<%E%> into a fixed-length "
6073 "argument list", arg);
6074 else
6075 sorry ("cannot expand %<%T%> into a fixed-length "
6076 "argument list", arg);
6078 return error_mark_node;
6081 else if (require_all_args)
6083 /* There must be a default arg in this case. */
6084 arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
6085 complain, in_decl);
6086 /* The position of the first default template argument,
6087 is also the number of non-defaulted arguments in NEW_INNER_ARGS.
6088 Record that. */
6089 if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6090 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args, arg_idx);
6092 else
6093 break;
6095 if (arg == error_mark_node)
6097 if (complain & tf_error)
6098 error ("template argument %d is invalid", arg_idx + 1);
6100 else if (!arg)
6101 /* This only occurs if there was an error in the template
6102 parameter list itself (which we would already have
6103 reported) that we are trying to recover from, e.g., a class
6104 template with a parameter list such as
6105 template<typename..., typename>. */
6106 return error_mark_node;
6107 else
6108 arg = convert_template_argument (TREE_VALUE (parm),
6109 arg, new_args, complain,
6110 parm_idx, in_decl);
6112 if (arg == error_mark_node)
6113 lost++;
6114 TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
6116 cp_unevaluated_operand = saved_unevaluated_operand;
6117 c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
6119 if (lost)
6120 return error_mark_node;
6122 #ifdef ENABLE_CHECKING
6123 if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6124 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
6125 TREE_VEC_LENGTH (new_inner_args));
6126 #endif
6128 return new_inner_args;
6131 /* Returns 1 if template args OT and NT are equivalent. */
6133 static int
6134 template_args_equal (tree ot, tree nt)
6136 if (nt == ot)
6137 return 1;
6139 if (TREE_CODE (nt) == TREE_VEC)
6140 /* For member templates */
6141 return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
6142 else if (PACK_EXPANSION_P (ot))
6143 return PACK_EXPANSION_P (nt)
6144 && template_args_equal (PACK_EXPANSION_PATTERN (ot),
6145 PACK_EXPANSION_PATTERN (nt));
6146 else if (ARGUMENT_PACK_P (ot))
6148 int i, len;
6149 tree opack, npack;
6151 if (!ARGUMENT_PACK_P (nt))
6152 return 0;
6154 opack = ARGUMENT_PACK_ARGS (ot);
6155 npack = ARGUMENT_PACK_ARGS (nt);
6156 len = TREE_VEC_LENGTH (opack);
6157 if (TREE_VEC_LENGTH (npack) != len)
6158 return 0;
6159 for (i = 0; i < len; ++i)
6160 if (!template_args_equal (TREE_VEC_ELT (opack, i),
6161 TREE_VEC_ELT (npack, i)))
6162 return 0;
6163 return 1;
6165 else if (ot && TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
6167 /* We get here probably because we are in the middle of substituting
6168 into the pattern of a pack expansion. In that case the
6169 ARGUMENT_PACK_SELECT temporarily replaces the pack argument we are
6170 interested in. So we want to use the initial pack argument for
6171 the comparison. */
6172 ot = ARGUMENT_PACK_SELECT_FROM_PACK (ot);
6173 if (nt && TREE_CODE (nt) == ARGUMENT_PACK_SELECT)
6174 nt = ARGUMENT_PACK_SELECT_FROM_PACK (nt);
6175 return template_args_equal (ot, nt);
6177 else if (TYPE_P (nt))
6178 return TYPE_P (ot) && same_type_p (ot, nt);
6179 else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
6180 return 0;
6181 else
6182 return cp_tree_equal (ot, nt);
6185 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
6186 of template arguments. Returns 0 otherwise. */
6189 comp_template_args (tree oldargs, tree newargs)
6191 int i;
6193 if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
6194 return 0;
6196 for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
6198 tree nt = TREE_VEC_ELT (newargs, i);
6199 tree ot = TREE_VEC_ELT (oldargs, i);
6201 if (! template_args_equal (ot, nt))
6202 return 0;
6204 return 1;
6207 static void
6208 add_pending_template (tree d)
6210 tree ti = (TYPE_P (d)
6211 ? CLASSTYPE_TEMPLATE_INFO (d)
6212 : DECL_TEMPLATE_INFO (d));
6213 struct pending_template *pt;
6214 int level;
6216 if (TI_PENDING_TEMPLATE_FLAG (ti))
6217 return;
6219 /* We are called both from instantiate_decl, where we've already had a
6220 tinst_level pushed, and instantiate_template, where we haven't.
6221 Compensate. */
6222 level = !current_tinst_level || current_tinst_level->decl != d;
6224 if (level)
6225 push_tinst_level (d);
6227 pt = ggc_alloc_pending_template ();
6228 pt->next = NULL;
6229 pt->tinst = current_tinst_level;
6230 if (last_pending_template)
6231 last_pending_template->next = pt;
6232 else
6233 pending_templates = pt;
6235 last_pending_template = pt;
6237 TI_PENDING_TEMPLATE_FLAG (ti) = 1;
6239 if (level)
6240 pop_tinst_level ();
6244 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
6245 ARGLIST. Valid choices for FNS are given in the cp-tree.def
6246 documentation for TEMPLATE_ID_EXPR. */
6248 tree
6249 lookup_template_function (tree fns, tree arglist)
6251 tree type;
6253 if (fns == error_mark_node || arglist == error_mark_node)
6254 return error_mark_node;
6256 gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
6257 gcc_assert (fns && (is_overloaded_fn (fns)
6258 || TREE_CODE (fns) == IDENTIFIER_NODE));
6260 if (BASELINK_P (fns))
6262 BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
6263 unknown_type_node,
6264 BASELINK_FUNCTIONS (fns),
6265 arglist);
6266 return fns;
6269 type = TREE_TYPE (fns);
6270 if (TREE_CODE (fns) == OVERLOAD || !type)
6271 type = unknown_type_node;
6273 return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
6276 /* Within the scope of a template class S<T>, the name S gets bound
6277 (in build_self_reference) to a TYPE_DECL for the class, not a
6278 TEMPLATE_DECL. If DECL is a TYPE_DECL for current_class_type,
6279 or one of its enclosing classes, and that type is a template,
6280 return the associated TEMPLATE_DECL. Otherwise, the original
6281 DECL is returned.
6283 Also handle the case when DECL is a TREE_LIST of ambiguous
6284 injected-class-names from different bases. */
6286 tree
6287 maybe_get_template_decl_from_type_decl (tree decl)
6289 if (decl == NULL_TREE)
6290 return decl;
6292 /* DR 176: A lookup that finds an injected-class-name (10.2
6293 [class.member.lookup]) can result in an ambiguity in certain cases
6294 (for example, if it is found in more than one base class). If all of
6295 the injected-class-names that are found refer to specializations of
6296 the same class template, and if the name is followed by a
6297 template-argument-list, the reference refers to the class template
6298 itself and not a specialization thereof, and is not ambiguous. */
6299 if (TREE_CODE (decl) == TREE_LIST)
6301 tree t, tmpl = NULL_TREE;
6302 for (t = decl; t; t = TREE_CHAIN (t))
6304 tree elt = maybe_get_template_decl_from_type_decl (TREE_VALUE (t));
6305 if (!tmpl)
6306 tmpl = elt;
6307 else if (tmpl != elt)
6308 break;
6310 if (tmpl && t == NULL_TREE)
6311 return tmpl;
6312 else
6313 return decl;
6316 return (decl != NULL_TREE
6317 && DECL_SELF_REFERENCE_P (decl)
6318 && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
6319 ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
6322 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
6323 parameters, find the desired type.
6325 D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
6327 IN_DECL, if non-NULL, is the template declaration we are trying to
6328 instantiate.
6330 If ENTERING_SCOPE is nonzero, we are about to enter the scope of
6331 the class we are looking up.
6333 Issue error and warning messages under control of COMPLAIN.
6335 If the template class is really a local class in a template
6336 function, then the FUNCTION_CONTEXT is the function in which it is
6337 being instantiated.
6339 ??? Note that this function is currently called *twice* for each
6340 template-id: the first time from the parser, while creating the
6341 incomplete type (finish_template_type), and the second type during the
6342 real instantiation (instantiate_template_class). This is surely something
6343 that we want to avoid. It also causes some problems with argument
6344 coercion (see convert_nontype_argument for more information on this). */
6346 tree
6347 lookup_template_class (tree d1,
6348 tree arglist,
6349 tree in_decl,
6350 tree context,
6351 int entering_scope,
6352 tsubst_flags_t complain)
6354 tree templ = NULL_TREE, parmlist;
6355 tree t;
6356 spec_entry **slot;
6357 spec_entry *entry;
6358 spec_entry elt;
6359 hashval_t hash;
6361 timevar_push (TV_NAME_LOOKUP);
6363 if (TREE_CODE (d1) == IDENTIFIER_NODE)
6365 tree value = innermost_non_namespace_value (d1);
6366 if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
6367 templ = value;
6368 else
6370 if (context)
6371 push_decl_namespace (context);
6372 templ = lookup_name (d1);
6373 templ = maybe_get_template_decl_from_type_decl (templ);
6374 if (context)
6375 pop_decl_namespace ();
6377 if (templ)
6378 context = DECL_CONTEXT (templ);
6380 else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
6382 tree type = TREE_TYPE (d1);
6384 /* If we are declaring a constructor, say A<T>::A<T>, we will get
6385 an implicit typename for the second A. Deal with it. */
6386 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
6387 type = TREE_TYPE (type);
6389 if (CLASSTYPE_TEMPLATE_INFO (type))
6391 templ = CLASSTYPE_TI_TEMPLATE (type);
6392 d1 = DECL_NAME (templ);
6395 else if (TREE_CODE (d1) == ENUMERAL_TYPE
6396 || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
6398 templ = TYPE_TI_TEMPLATE (d1);
6399 d1 = DECL_NAME (templ);
6401 else if (TREE_CODE (d1) == TEMPLATE_DECL
6402 && DECL_TEMPLATE_RESULT (d1)
6403 && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
6405 templ = d1;
6406 d1 = DECL_NAME (templ);
6407 context = DECL_CONTEXT (templ);
6410 /* Issue an error message if we didn't find a template. */
6411 if (! templ)
6413 if (complain & tf_error)
6414 error ("%qT is not a template", d1);
6415 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6418 if (TREE_CODE (templ) != TEMPLATE_DECL
6419 /* Make sure it's a user visible template, if it was named by
6420 the user. */
6421 || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
6422 && !PRIMARY_TEMPLATE_P (templ)))
6424 if (complain & tf_error)
6426 error ("non-template type %qT used as a template", d1);
6427 if (in_decl)
6428 error ("for template declaration %q+D", in_decl);
6430 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6433 complain &= ~tf_user;
6435 if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
6437 /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
6438 template arguments */
6440 tree parm;
6441 tree arglist2;
6442 tree outer;
6444 parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
6446 /* Consider an example where a template template parameter declared as
6448 template <class T, class U = std::allocator<T> > class TT
6450 The template parameter level of T and U are one level larger than
6451 of TT. To proper process the default argument of U, say when an
6452 instantiation `TT<int>' is seen, we need to build the full
6453 arguments containing {int} as the innermost level. Outer levels,
6454 available when not appearing as default template argument, can be
6455 obtained from the arguments of the enclosing template.
6457 Suppose that TT is later substituted with std::vector. The above
6458 instantiation is `TT<int, std::allocator<T> >' with TT at
6459 level 1, and T at level 2, while the template arguments at level 1
6460 becomes {std::vector} and the inner level 2 is {int}. */
6462 outer = DECL_CONTEXT (templ);
6463 if (outer)
6464 outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
6465 else if (current_template_parms)
6466 /* This is an argument of the current template, so we haven't set
6467 DECL_CONTEXT yet. */
6468 outer = current_template_args ();
6470 if (outer)
6471 arglist = add_to_template_args (outer, arglist);
6473 arglist2 = coerce_template_parms (parmlist, arglist, templ,
6474 complain,
6475 /*require_all_args=*/true,
6476 /*use_default_args=*/true);
6477 if (arglist2 == error_mark_node
6478 || (!uses_template_parms (arglist2)
6479 && check_instantiated_args (templ, arglist2, complain)))
6480 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6482 parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
6483 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
6485 else
6487 tree template_type = TREE_TYPE (templ);
6488 tree gen_tmpl;
6489 tree type_decl;
6490 tree found = NULL_TREE;
6491 int arg_depth;
6492 int parm_depth;
6493 int is_dependent_type;
6494 int use_partial_inst_tmpl = false;
6496 gen_tmpl = most_general_template (templ);
6497 parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
6498 parm_depth = TMPL_PARMS_DEPTH (parmlist);
6499 arg_depth = TMPL_ARGS_DEPTH (arglist);
6501 if (arg_depth == 1 && parm_depth > 1)
6503 /* We've been given an incomplete set of template arguments.
6504 For example, given:
6506 template <class T> struct S1 {
6507 template <class U> struct S2 {};
6508 template <class U> struct S2<U*> {};
6511 we will be called with an ARGLIST of `U*', but the
6512 TEMPLATE will be `template <class T> template
6513 <class U> struct S1<T>::S2'. We must fill in the missing
6514 arguments. */
6515 arglist
6516 = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
6517 arglist);
6518 arg_depth = TMPL_ARGS_DEPTH (arglist);
6521 /* Now we should have enough arguments. */
6522 gcc_assert (parm_depth == arg_depth);
6524 /* From here on, we're only interested in the most general
6525 template. */
6527 /* Calculate the BOUND_ARGS. These will be the args that are
6528 actually tsubst'd into the definition to create the
6529 instantiation. */
6530 if (parm_depth > 1)
6532 /* We have multiple levels of arguments to coerce, at once. */
6533 int i;
6534 int saved_depth = TMPL_ARGS_DEPTH (arglist);
6536 tree bound_args = make_tree_vec (parm_depth);
6538 for (i = saved_depth,
6539 t = DECL_TEMPLATE_PARMS (gen_tmpl);
6540 i > 0 && t != NULL_TREE;
6541 --i, t = TREE_CHAIN (t))
6543 tree a = coerce_template_parms (TREE_VALUE (t),
6544 arglist, gen_tmpl,
6545 complain,
6546 /*require_all_args=*/true,
6547 /*use_default_args=*/true);
6549 /* Don't process further if one of the levels fails. */
6550 if (a == error_mark_node)
6552 /* Restore the ARGLIST to its full size. */
6553 TREE_VEC_LENGTH (arglist) = saved_depth;
6554 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6557 SET_TMPL_ARGS_LEVEL (bound_args, i, a);
6559 /* We temporarily reduce the length of the ARGLIST so
6560 that coerce_template_parms will see only the arguments
6561 corresponding to the template parameters it is
6562 examining. */
6563 TREE_VEC_LENGTH (arglist)--;
6566 /* Restore the ARGLIST to its full size. */
6567 TREE_VEC_LENGTH (arglist) = saved_depth;
6569 arglist = bound_args;
6571 else
6572 arglist
6573 = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
6574 INNERMOST_TEMPLATE_ARGS (arglist),
6575 gen_tmpl,
6576 complain,
6577 /*require_all_args=*/true,
6578 /*use_default_args=*/true);
6580 if (arglist == error_mark_node)
6581 /* We were unable to bind the arguments. */
6582 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6584 /* In the scope of a template class, explicit references to the
6585 template class refer to the type of the template, not any
6586 instantiation of it. For example, in:
6588 template <class T> class C { void f(C<T>); }
6590 the `C<T>' is just the same as `C'. Outside of the
6591 class, however, such a reference is an instantiation. */
6592 if ((entering_scope
6593 || !PRIMARY_TEMPLATE_P (gen_tmpl)
6594 || currently_open_class (template_type))
6595 /* comp_template_args is expensive, check it last. */
6596 && comp_template_args (TYPE_TI_ARGS (template_type),
6597 arglist))
6598 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, template_type);
6600 /* If we already have this specialization, return it. */
6601 elt.tmpl = gen_tmpl;
6602 elt.args = arglist;
6603 hash = hash_specialization (&elt);
6604 entry = (spec_entry *) htab_find_with_hash (type_specializations,
6605 &elt, hash);
6607 if (entry)
6608 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, entry->spec);
6610 is_dependent_type = uses_template_parms (arglist);
6612 /* If the deduced arguments are invalid, then the binding
6613 failed. */
6614 if (!is_dependent_type
6615 && check_instantiated_args (gen_tmpl,
6616 INNERMOST_TEMPLATE_ARGS (arglist),
6617 complain))
6618 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6620 if (!is_dependent_type
6621 && !PRIMARY_TEMPLATE_P (gen_tmpl)
6622 && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
6623 && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
6625 found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
6626 DECL_NAME (gen_tmpl),
6627 /*tag_scope=*/ts_global);
6628 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
6631 context = tsubst (DECL_CONTEXT (gen_tmpl), arglist,
6632 complain, in_decl);
6633 if (!context)
6634 context = global_namespace;
6636 /* Create the type. */
6637 if (TREE_CODE (template_type) == ENUMERAL_TYPE)
6639 if (!is_dependent_type)
6641 set_current_access_from_decl (TYPE_NAME (template_type));
6642 t = start_enum (TYPE_IDENTIFIER (template_type),
6643 tsubst (ENUM_UNDERLYING_TYPE (template_type),
6644 arglist, complain, in_decl),
6645 SCOPED_ENUM_P (template_type));
6647 else
6649 /* We don't want to call start_enum for this type, since
6650 the values for the enumeration constants may involve
6651 template parameters. And, no one should be interested
6652 in the enumeration constants for such a type. */
6653 t = cxx_make_type (ENUMERAL_TYPE);
6654 SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
6657 else
6659 t = make_class_type (TREE_CODE (template_type));
6660 CLASSTYPE_DECLARED_CLASS (t)
6661 = CLASSTYPE_DECLARED_CLASS (template_type);
6662 SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
6663 TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
6665 /* A local class. Make sure the decl gets registered properly. */
6666 if (context == current_function_decl)
6667 pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current);
6669 if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
6670 /* This instantiation is another name for the primary
6671 template type. Set the TYPE_CANONICAL field
6672 appropriately. */
6673 TYPE_CANONICAL (t) = template_type;
6674 else if (any_template_arguments_need_structural_equality_p (arglist))
6675 /* Some of the template arguments require structural
6676 equality testing, so this template class requires
6677 structural equality testing. */
6678 SET_TYPE_STRUCTURAL_EQUALITY (t);
6681 /* If we called start_enum or pushtag above, this information
6682 will already be set up. */
6683 if (!TYPE_NAME (t))
6685 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
6687 type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
6688 DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
6689 DECL_SOURCE_LOCATION (type_decl)
6690 = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
6692 else
6693 type_decl = TYPE_NAME (t);
6695 TREE_PRIVATE (type_decl)
6696 = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
6697 TREE_PROTECTED (type_decl)
6698 = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
6699 if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
6701 DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
6702 DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
6705 /* Let's consider the explicit specialization of a member
6706 of a class template specialization that is implicitely instantiated,
6707 e.g.:
6708 template<class T>
6709 struct S
6711 template<class U> struct M {}; //#0
6714 template<>
6715 template<>
6716 struct S<int>::M<char> //#1
6718 int i;
6720 [temp.expl.spec]/4 says this is valid.
6722 In this case, when we write:
6723 S<int>::M<char> m;
6725 M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
6726 the one of #0.
6728 When we encounter #1, we want to store the partial instantiation
6729 of M (template<class T> S<int>::M<T>) in it's CLASSTYPE_TI_TEMPLATE.
6731 For all cases other than this "explicit specialization of member of a
6732 class template", we just want to store the most general template into
6733 the CLASSTYPE_TI_TEMPLATE of M.
6735 This case of "explicit specialization of member of a class template"
6736 only happens when:
6737 1/ the enclosing class is an instantiation of, and therefore not
6738 the same as, the context of the most general template, and
6739 2/ we aren't looking at the partial instantiation itself, i.e.
6740 the innermost arguments are not the same as the innermost parms of
6741 the most general template.
6743 So it's only when 1/ and 2/ happens that we want to use the partial
6744 instantiation of the member template in lieu of its most general
6745 template. */
6747 if (PRIMARY_TEMPLATE_P (gen_tmpl)
6748 && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
6749 /* the enclosing class must be an instantiation... */
6750 && CLASS_TYPE_P (context)
6751 && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
6753 tree partial_inst_args;
6754 TREE_VEC_LENGTH (arglist)--;
6755 ++processing_template_decl;
6756 partial_inst_args =
6757 tsubst (INNERMOST_TEMPLATE_ARGS
6758 (CLASSTYPE_TI_ARGS (TREE_TYPE (gen_tmpl))),
6759 arglist, complain, NULL_TREE);
6760 --processing_template_decl;
6761 TREE_VEC_LENGTH (arglist)++;
6762 use_partial_inst_tmpl =
6763 /*...and we must not be looking at the partial instantiation
6764 itself. */
6765 !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
6766 partial_inst_args);
6769 if (!use_partial_inst_tmpl)
6770 /* This case is easy; there are no member templates involved. */
6771 found = gen_tmpl;
6772 else
6774 /* This is a full instantiation of a member template. Find
6775 the partial instantiation of which this is an instance. */
6777 /* Temporarily reduce by one the number of levels in the ARGLIST
6778 so as to avoid comparing the last set of arguments. */
6779 TREE_VEC_LENGTH (arglist)--;
6780 found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
6781 TREE_VEC_LENGTH (arglist)++;
6782 found = CLASSTYPE_TI_TEMPLATE (found);
6785 SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
6787 elt.spec = t;
6788 slot = (spec_entry **) htab_find_slot_with_hash (type_specializations,
6789 &elt, hash, INSERT);
6790 *slot = ggc_alloc_spec_entry ();
6791 **slot = elt;
6793 /* Note this use of the partial instantiation so we can check it
6794 later in maybe_process_partial_specialization. */
6795 DECL_TEMPLATE_INSTANTIATIONS (templ)
6796 = tree_cons (arglist, t,
6797 DECL_TEMPLATE_INSTANTIATIONS (templ));
6799 if (TREE_CODE (t) == ENUMERAL_TYPE && !is_dependent_type)
6800 /* Now that the type has been registered on the instantiations
6801 list, we set up the enumerators. Because the enumeration
6802 constants may involve the enumeration type itself, we make
6803 sure to register the type first, and then create the
6804 constants. That way, doing tsubst_expr for the enumeration
6805 constants won't result in recursive calls here; we'll find
6806 the instantiation and exit above. */
6807 tsubst_enum (template_type, t, arglist);
6809 if (is_dependent_type)
6810 /* If the type makes use of template parameters, the
6811 code that generates debugging information will crash. */
6812 DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
6814 /* Possibly limit visibility based on template args. */
6815 TREE_PUBLIC (type_decl) = 1;
6816 determine_visibility (type_decl);
6818 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
6820 timevar_pop (TV_NAME_LOOKUP);
6823 struct pair_fn_data
6825 tree_fn_t fn;
6826 void *data;
6827 /* True when we should also visit template parameters that occur in
6828 non-deduced contexts. */
6829 bool include_nondeduced_p;
6830 struct pointer_set_t *visited;
6833 /* Called from for_each_template_parm via walk_tree. */
6835 static tree
6836 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
6838 tree t = *tp;
6839 struct pair_fn_data *pfd = (struct pair_fn_data *) d;
6840 tree_fn_t fn = pfd->fn;
6841 void *data = pfd->data;
6843 if (TYPE_P (t)
6844 && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
6845 && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
6846 pfd->include_nondeduced_p))
6847 return error_mark_node;
6849 switch (TREE_CODE (t))
6851 case RECORD_TYPE:
6852 if (TYPE_PTRMEMFUNC_P (t))
6853 break;
6854 /* Fall through. */
6856 case UNION_TYPE:
6857 case ENUMERAL_TYPE:
6858 if (!TYPE_TEMPLATE_INFO (t))
6859 *walk_subtrees = 0;
6860 else if (for_each_template_parm (TI_ARGS (TYPE_TEMPLATE_INFO (t)),
6861 fn, data, pfd->visited,
6862 pfd->include_nondeduced_p))
6863 return error_mark_node;
6864 break;
6866 case INTEGER_TYPE:
6867 if (for_each_template_parm (TYPE_MIN_VALUE (t),
6868 fn, data, pfd->visited,
6869 pfd->include_nondeduced_p)
6870 || for_each_template_parm (TYPE_MAX_VALUE (t),
6871 fn, data, pfd->visited,
6872 pfd->include_nondeduced_p))
6873 return error_mark_node;
6874 break;
6876 case METHOD_TYPE:
6877 /* Since we're not going to walk subtrees, we have to do this
6878 explicitly here. */
6879 if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
6880 pfd->visited, pfd->include_nondeduced_p))
6881 return error_mark_node;
6882 /* Fall through. */
6884 case FUNCTION_TYPE:
6885 /* Check the return type. */
6886 if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
6887 pfd->include_nondeduced_p))
6888 return error_mark_node;
6890 /* Check the parameter types. Since default arguments are not
6891 instantiated until they are needed, the TYPE_ARG_TYPES may
6892 contain expressions that involve template parameters. But,
6893 no-one should be looking at them yet. And, once they're
6894 instantiated, they don't contain template parameters, so
6895 there's no point in looking at them then, either. */
6897 tree parm;
6899 for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
6900 if (for_each_template_parm (TREE_VALUE (parm), fn, data,
6901 pfd->visited, pfd->include_nondeduced_p))
6902 return error_mark_node;
6904 /* Since we've already handled the TYPE_ARG_TYPES, we don't
6905 want walk_tree walking into them itself. */
6906 *walk_subtrees = 0;
6908 break;
6910 case TYPEOF_TYPE:
6911 if (pfd->include_nondeduced_p
6912 && for_each_template_parm (TYPE_FIELDS (t), fn, data,
6913 pfd->visited,
6914 pfd->include_nondeduced_p))
6915 return error_mark_node;
6916 break;
6918 case FUNCTION_DECL:
6919 case VAR_DECL:
6920 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
6921 && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
6922 pfd->visited, pfd->include_nondeduced_p))
6923 return error_mark_node;
6924 /* Fall through. */
6926 case PARM_DECL:
6927 case CONST_DECL:
6928 if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
6929 && for_each_template_parm (DECL_INITIAL (t), fn, data,
6930 pfd->visited, pfd->include_nondeduced_p))
6931 return error_mark_node;
6932 if (DECL_CONTEXT (t)
6933 && pfd->include_nondeduced_p
6934 && for_each_template_parm (DECL_CONTEXT (t), fn, data,
6935 pfd->visited, pfd->include_nondeduced_p))
6936 return error_mark_node;
6937 break;
6939 case BOUND_TEMPLATE_TEMPLATE_PARM:
6940 /* Record template parameters such as `T' inside `TT<T>'. */
6941 if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
6942 pfd->include_nondeduced_p))
6943 return error_mark_node;
6944 /* Fall through. */
6946 case TEMPLATE_TEMPLATE_PARM:
6947 case TEMPLATE_TYPE_PARM:
6948 case TEMPLATE_PARM_INDEX:
6949 if (fn && (*fn)(t, data))
6950 return error_mark_node;
6951 else if (!fn)
6952 return error_mark_node;
6953 break;
6955 case TEMPLATE_DECL:
6956 /* A template template parameter is encountered. */
6957 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
6958 && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
6959 pfd->include_nondeduced_p))
6960 return error_mark_node;
6962 /* Already substituted template template parameter */
6963 *walk_subtrees = 0;
6964 break;
6966 case TYPENAME_TYPE:
6967 if (!fn
6968 || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
6969 data, pfd->visited,
6970 pfd->include_nondeduced_p))
6971 return error_mark_node;
6972 break;
6974 case CONSTRUCTOR:
6975 if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
6976 && pfd->include_nondeduced_p
6977 && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
6978 (TREE_TYPE (t)), fn, data,
6979 pfd->visited, pfd->include_nondeduced_p))
6980 return error_mark_node;
6981 break;
6983 case INDIRECT_REF:
6984 case COMPONENT_REF:
6985 /* If there's no type, then this thing must be some expression
6986 involving template parameters. */
6987 if (!fn && !TREE_TYPE (t))
6988 return error_mark_node;
6989 break;
6991 case MODOP_EXPR:
6992 case CAST_EXPR:
6993 case REINTERPRET_CAST_EXPR:
6994 case CONST_CAST_EXPR:
6995 case STATIC_CAST_EXPR:
6996 case DYNAMIC_CAST_EXPR:
6997 case ARROW_EXPR:
6998 case DOTSTAR_EXPR:
6999 case TYPEID_EXPR:
7000 case PSEUDO_DTOR_EXPR:
7001 if (!fn)
7002 return error_mark_node;
7003 break;
7005 default:
7006 break;
7009 /* We didn't find any template parameters we liked. */
7010 return NULL_TREE;
7013 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
7014 BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
7015 call FN with the parameter and the DATA.
7016 If FN returns nonzero, the iteration is terminated, and
7017 for_each_template_parm returns 1. Otherwise, the iteration
7018 continues. If FN never returns a nonzero value, the value
7019 returned by for_each_template_parm is 0. If FN is NULL, it is
7020 considered to be the function which always returns 1.
7022 If INCLUDE_NONDEDUCED_P, then this routine will also visit template
7023 parameters that occur in non-deduced contexts. When false, only
7024 visits those template parameters that can be deduced. */
7026 static int
7027 for_each_template_parm (tree t, tree_fn_t fn, void* data,
7028 struct pointer_set_t *visited,
7029 bool include_nondeduced_p)
7031 struct pair_fn_data pfd;
7032 int result;
7034 /* Set up. */
7035 pfd.fn = fn;
7036 pfd.data = data;
7037 pfd.include_nondeduced_p = include_nondeduced_p;
7039 /* Walk the tree. (Conceptually, we would like to walk without
7040 duplicates, but for_each_template_parm_r recursively calls
7041 for_each_template_parm, so we would need to reorganize a fair
7042 bit to use walk_tree_without_duplicates, so we keep our own
7043 visited list.) */
7044 if (visited)
7045 pfd.visited = visited;
7046 else
7047 pfd.visited = pointer_set_create ();
7048 result = cp_walk_tree (&t,
7049 for_each_template_parm_r,
7050 &pfd,
7051 pfd.visited) != NULL_TREE;
7053 /* Clean up. */
7054 if (!visited)
7056 pointer_set_destroy (pfd.visited);
7057 pfd.visited = 0;
7060 return result;
7063 /* Returns true if T depends on any template parameter. */
7066 uses_template_parms (tree t)
7068 bool dependent_p;
7069 int saved_processing_template_decl;
7071 saved_processing_template_decl = processing_template_decl;
7072 if (!saved_processing_template_decl)
7073 processing_template_decl = 1;
7074 if (TYPE_P (t))
7075 dependent_p = dependent_type_p (t);
7076 else if (TREE_CODE (t) == TREE_VEC)
7077 dependent_p = any_dependent_template_arguments_p (t);
7078 else if (TREE_CODE (t) == TREE_LIST)
7079 dependent_p = (uses_template_parms (TREE_VALUE (t))
7080 || uses_template_parms (TREE_CHAIN (t)));
7081 else if (TREE_CODE (t) == TYPE_DECL)
7082 dependent_p = dependent_type_p (TREE_TYPE (t));
7083 else if (DECL_P (t)
7084 || EXPR_P (t)
7085 || TREE_CODE (t) == TEMPLATE_PARM_INDEX
7086 || TREE_CODE (t) == OVERLOAD
7087 || TREE_CODE (t) == BASELINK
7088 || TREE_CODE (t) == IDENTIFIER_NODE
7089 || TREE_CODE (t) == TRAIT_EXPR
7090 || TREE_CODE (t) == CONSTRUCTOR
7091 || CONSTANT_CLASS_P (t))
7092 dependent_p = (type_dependent_expression_p (t)
7093 || value_dependent_expression_p (t));
7094 else
7096 gcc_assert (t == error_mark_node);
7097 dependent_p = false;
7100 processing_template_decl = saved_processing_template_decl;
7102 return dependent_p;
7105 /* Returns true if T depends on any template parameter with level LEVEL. */
7108 uses_template_parms_level (tree t, int level)
7110 return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
7111 /*include_nondeduced_p=*/true);
7114 static int tinst_depth;
7115 extern int max_tinst_depth;
7116 #ifdef GATHER_STATISTICS
7117 int depth_reached;
7118 #endif
7119 static int tinst_level_tick;
7120 static int last_template_error_tick;
7122 /* We're starting to instantiate D; record the template instantiation context
7123 for diagnostics and to restore it later. */
7126 push_tinst_level (tree d)
7128 struct tinst_level *new_level;
7130 if (tinst_depth >= max_tinst_depth)
7132 /* If the instantiation in question still has unbound template parms,
7133 we don't really care if we can't instantiate it, so just return.
7134 This happens with base instantiation for implicit `typename'. */
7135 if (uses_template_parms (d))
7136 return 0;
7138 last_template_error_tick = tinst_level_tick;
7139 error ("template instantiation depth exceeds maximum of %d (use "
7140 "-ftemplate-depth= to increase the maximum) instantiating %qD",
7141 max_tinst_depth, d);
7143 print_instantiation_context ();
7145 return 0;
7148 new_level = ggc_alloc_tinst_level ();
7149 new_level->decl = d;
7150 new_level->locus = input_location;
7151 new_level->in_system_header_p = in_system_header;
7152 new_level->next = current_tinst_level;
7153 current_tinst_level = new_level;
7155 ++tinst_depth;
7156 #ifdef GATHER_STATISTICS
7157 if (tinst_depth > depth_reached)
7158 depth_reached = tinst_depth;
7159 #endif
7161 ++tinst_level_tick;
7162 return 1;
7165 /* We're done instantiating this template; return to the instantiation
7166 context. */
7168 void
7169 pop_tinst_level (void)
7171 /* Restore the filename and line number stashed away when we started
7172 this instantiation. */
7173 input_location = current_tinst_level->locus;
7174 current_tinst_level = current_tinst_level->next;
7175 --tinst_depth;
7176 ++tinst_level_tick;
7179 /* We're instantiating a deferred template; restore the template
7180 instantiation context in which the instantiation was requested, which
7181 is one step out from LEVEL. Return the corresponding DECL or TYPE. */
7183 static tree
7184 reopen_tinst_level (struct tinst_level *level)
7186 struct tinst_level *t;
7188 tinst_depth = 0;
7189 for (t = level; t; t = t->next)
7190 ++tinst_depth;
7192 current_tinst_level = level;
7193 pop_tinst_level ();
7194 return level->decl;
7197 /* Returns the TINST_LEVEL which gives the original instantiation
7198 context. */
7200 struct tinst_level *
7201 outermost_tinst_level (void)
7203 struct tinst_level *level = current_tinst_level;
7204 if (level)
7205 while (level->next)
7206 level = level->next;
7207 return level;
7210 /* Returns TRUE if PARM is a parameter of the template TEMPL. */
7212 bool
7213 parameter_of_template_p (tree parm, tree templ)
7215 tree parms;
7216 int i;
7218 if (!parm || !templ)
7219 return false;
7221 gcc_assert (DECL_TEMPLATE_PARM_P (parm));
7222 gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
7224 parms = DECL_TEMPLATE_PARMS (templ);
7225 parms = INNERMOST_TEMPLATE_PARMS (parms);
7227 for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
7228 if (parm == TREE_VALUE (TREE_VEC_ELT (parms, i)))
7229 return true;
7231 return false;
7234 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
7235 vector of template arguments, as for tsubst.
7237 Returns an appropriate tsubst'd friend declaration. */
7239 static tree
7240 tsubst_friend_function (tree decl, tree args)
7242 tree new_friend;
7244 if (TREE_CODE (decl) == FUNCTION_DECL
7245 && DECL_TEMPLATE_INSTANTIATION (decl)
7246 && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
7247 /* This was a friend declared with an explicit template
7248 argument list, e.g.:
7250 friend void f<>(T);
7252 to indicate that f was a template instantiation, not a new
7253 function declaration. Now, we have to figure out what
7254 instantiation of what template. */
7256 tree template_id, arglist, fns;
7257 tree new_args;
7258 tree tmpl;
7259 tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
7261 /* Friend functions are looked up in the containing namespace scope.
7262 We must enter that scope, to avoid finding member functions of the
7263 current class with same name. */
7264 push_nested_namespace (ns);
7265 fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
7266 tf_warning_or_error, NULL_TREE,
7267 /*integral_constant_expression_p=*/false);
7268 pop_nested_namespace (ns);
7269 arglist = tsubst (DECL_TI_ARGS (decl), args,
7270 tf_warning_or_error, NULL_TREE);
7271 template_id = lookup_template_function (fns, arglist);
7273 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
7274 tmpl = determine_specialization (template_id, new_friend,
7275 &new_args,
7276 /*need_member_template=*/0,
7277 TREE_VEC_LENGTH (args),
7278 tsk_none);
7279 return instantiate_template (tmpl, new_args, tf_error);
7282 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
7284 /* The NEW_FRIEND will look like an instantiation, to the
7285 compiler, but is not an instantiation from the point of view of
7286 the language. For example, we might have had:
7288 template <class T> struct S {
7289 template <class U> friend void f(T, U);
7292 Then, in S<int>, template <class U> void f(int, U) is not an
7293 instantiation of anything. */
7294 if (new_friend == error_mark_node)
7295 return error_mark_node;
7297 DECL_USE_TEMPLATE (new_friend) = 0;
7298 if (TREE_CODE (decl) == TEMPLATE_DECL)
7300 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
7301 DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
7302 = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
7305 /* The mangled name for the NEW_FRIEND is incorrect. The function
7306 is not a template instantiation and should not be mangled like
7307 one. Therefore, we forget the mangling here; we'll recompute it
7308 later if we need it. */
7309 if (TREE_CODE (new_friend) != TEMPLATE_DECL)
7311 SET_DECL_RTL (new_friend, NULL);
7312 SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
7315 if (DECL_NAMESPACE_SCOPE_P (new_friend))
7317 tree old_decl;
7318 tree new_friend_template_info;
7319 tree new_friend_result_template_info;
7320 tree ns;
7321 int new_friend_is_defn;
7323 /* We must save some information from NEW_FRIEND before calling
7324 duplicate decls since that function will free NEW_FRIEND if
7325 possible. */
7326 new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
7327 new_friend_is_defn =
7328 (DECL_INITIAL (DECL_TEMPLATE_RESULT
7329 (template_for_substitution (new_friend)))
7330 != NULL_TREE);
7331 if (TREE_CODE (new_friend) == TEMPLATE_DECL)
7333 /* This declaration is a `primary' template. */
7334 DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
7336 new_friend_result_template_info
7337 = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
7339 else
7340 new_friend_result_template_info = NULL_TREE;
7342 /* Make the init_value nonzero so pushdecl knows this is a defn. */
7343 if (new_friend_is_defn)
7344 DECL_INITIAL (new_friend) = error_mark_node;
7346 /* Inside pushdecl_namespace_level, we will push into the
7347 current namespace. However, the friend function should go
7348 into the namespace of the template. */
7349 ns = decl_namespace_context (new_friend);
7350 push_nested_namespace (ns);
7351 old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
7352 pop_nested_namespace (ns);
7354 if (old_decl == error_mark_node)
7355 return error_mark_node;
7357 if (old_decl != new_friend)
7359 /* This new friend declaration matched an existing
7360 declaration. For example, given:
7362 template <class T> void f(T);
7363 template <class U> class C {
7364 template <class T> friend void f(T) {}
7367 the friend declaration actually provides the definition
7368 of `f', once C has been instantiated for some type. So,
7369 old_decl will be the out-of-class template declaration,
7370 while new_friend is the in-class definition.
7372 But, if `f' was called before this point, the
7373 instantiation of `f' will have DECL_TI_ARGS corresponding
7374 to `T' but not to `U', references to which might appear
7375 in the definition of `f'. Previously, the most general
7376 template for an instantiation of `f' was the out-of-class
7377 version; now it is the in-class version. Therefore, we
7378 run through all specialization of `f', adding to their
7379 DECL_TI_ARGS appropriately. In particular, they need a
7380 new set of outer arguments, corresponding to the
7381 arguments for this class instantiation.
7383 The same situation can arise with something like this:
7385 friend void f(int);
7386 template <class T> class C {
7387 friend void f(T) {}
7390 when `C<int>' is instantiated. Now, `f(int)' is defined
7391 in the class. */
7393 if (!new_friend_is_defn)
7394 /* On the other hand, if the in-class declaration does
7395 *not* provide a definition, then we don't want to alter
7396 existing definitions. We can just leave everything
7397 alone. */
7399 else
7401 tree new_template = TI_TEMPLATE (new_friend_template_info);
7402 tree new_args = TI_ARGS (new_friend_template_info);
7404 /* Overwrite whatever template info was there before, if
7405 any, with the new template information pertaining to
7406 the declaration. */
7407 DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
7409 if (TREE_CODE (old_decl) != TEMPLATE_DECL)
7411 /* We should have called reregister_specialization in
7412 duplicate_decls. */
7413 gcc_assert (retrieve_specialization (new_template,
7414 new_args, 0)
7415 == old_decl);
7417 /* Instantiate it if the global has already been used. */
7418 if (DECL_ODR_USED (old_decl))
7419 instantiate_decl (old_decl, /*defer_ok=*/true,
7420 /*expl_inst_class_mem_p=*/false);
7422 else
7424 tree t;
7426 /* Indicate that the old function template is a partial
7427 instantiation. */
7428 DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
7429 = new_friend_result_template_info;
7431 gcc_assert (new_template
7432 == most_general_template (new_template));
7433 gcc_assert (new_template != old_decl);
7435 /* Reassign any specializations already in the hash table
7436 to the new more general template, and add the
7437 additional template args. */
7438 for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
7439 t != NULL_TREE;
7440 t = TREE_CHAIN (t))
7442 tree spec = TREE_VALUE (t);
7443 spec_entry elt;
7445 elt.tmpl = old_decl;
7446 elt.args = DECL_TI_ARGS (spec);
7447 elt.spec = NULL_TREE;
7449 htab_remove_elt (decl_specializations, &elt);
7451 DECL_TI_ARGS (spec)
7452 = add_outermost_template_args (new_args,
7453 DECL_TI_ARGS (spec));
7455 register_specialization
7456 (spec, new_template, DECL_TI_ARGS (spec), true, 0);
7459 DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
7463 /* The information from NEW_FRIEND has been merged into OLD_DECL
7464 by duplicate_decls. */
7465 new_friend = old_decl;
7468 else
7470 tree context = DECL_CONTEXT (new_friend);
7471 bool dependent_p;
7473 /* In the code
7474 template <class T> class C {
7475 template <class U> friend void C1<U>::f (); // case 1
7476 friend void C2<T>::f (); // case 2
7478 we only need to make sure CONTEXT is a complete type for
7479 case 2. To distinguish between the two cases, we note that
7480 CONTEXT of case 1 remains dependent type after tsubst while
7481 this isn't true for case 2. */
7482 ++processing_template_decl;
7483 dependent_p = dependent_type_p (context);
7484 --processing_template_decl;
7486 if (!dependent_p
7487 && !complete_type_or_else (context, NULL_TREE))
7488 return error_mark_node;
7490 if (COMPLETE_TYPE_P (context))
7492 /* Check to see that the declaration is really present, and,
7493 possibly obtain an improved declaration. */
7494 tree fn = check_classfn (context,
7495 new_friend, NULL_TREE);
7497 if (fn)
7498 new_friend = fn;
7502 return new_friend;
7505 /* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
7506 template arguments, as for tsubst.
7508 Returns an appropriate tsubst'd friend type or error_mark_node on
7509 failure. */
7511 static tree
7512 tsubst_friend_class (tree friend_tmpl, tree args)
7514 tree friend_type;
7515 tree tmpl;
7516 tree context;
7518 context = DECL_CONTEXT (friend_tmpl);
7520 if (context)
7522 if (TREE_CODE (context) == NAMESPACE_DECL)
7523 push_nested_namespace (context);
7524 else
7525 push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
7528 /* Look for a class template declaration. We look for hidden names
7529 because two friend declarations of the same template are the
7530 same. For example, in:
7532 struct A {
7533 template <typename> friend class F;
7535 template <typename> struct B {
7536 template <typename> friend class F;
7539 both F templates are the same. */
7540 tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
7541 /*block_p=*/true, 0,
7542 LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
7544 /* But, if we don't find one, it might be because we're in a
7545 situation like this:
7547 template <class T>
7548 struct S {
7549 template <class U>
7550 friend struct S;
7553 Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
7554 for `S<int>', not the TEMPLATE_DECL. */
7555 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
7557 tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
7558 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
7561 if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
7563 /* The friend template has already been declared. Just
7564 check to see that the declarations match, and install any new
7565 default parameters. We must tsubst the default parameters,
7566 of course. We only need the innermost template parameters
7567 because that is all that redeclare_class_template will look
7568 at. */
7569 if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
7570 > TMPL_ARGS_DEPTH (args))
7572 tree parms;
7573 location_t saved_input_location;
7574 parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
7575 args, tf_warning_or_error);
7577 saved_input_location = input_location;
7578 input_location = DECL_SOURCE_LOCATION (friend_tmpl);
7579 redeclare_class_template (TREE_TYPE (tmpl), parms);
7580 input_location = saved_input_location;
7584 friend_type = TREE_TYPE (tmpl);
7586 else
7588 /* The friend template has not already been declared. In this
7589 case, the instantiation of the template class will cause the
7590 injection of this template into the global scope. */
7591 tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
7592 if (tmpl == error_mark_node)
7593 return error_mark_node;
7595 /* The new TMPL is not an instantiation of anything, so we
7596 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE for
7597 the new type because that is supposed to be the corresponding
7598 template decl, i.e., TMPL. */
7599 DECL_USE_TEMPLATE (tmpl) = 0;
7600 DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
7601 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
7602 CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
7603 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
7605 /* Inject this template into the global scope. */
7606 friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
7609 if (context)
7611 if (TREE_CODE (context) == NAMESPACE_DECL)
7612 pop_nested_namespace (context);
7613 else
7614 pop_nested_class ();
7617 return friend_type;
7620 /* Returns zero if TYPE cannot be completed later due to circularity.
7621 Otherwise returns one. */
7623 static int
7624 can_complete_type_without_circularity (tree type)
7626 if (type == NULL_TREE || type == error_mark_node)
7627 return 0;
7628 else if (COMPLETE_TYPE_P (type))
7629 return 1;
7630 else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
7631 return can_complete_type_without_circularity (TREE_TYPE (type));
7632 else if (CLASS_TYPE_P (type)
7633 && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
7634 return 0;
7635 else
7636 return 1;
7639 /* Apply any attributes which had to be deferred until instantiation
7640 time. DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
7641 ARGS, COMPLAIN, IN_DECL are as tsubst. */
7643 static void
7644 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
7645 tree args, tsubst_flags_t complain, tree in_decl)
7647 tree last_dep = NULL_TREE;
7648 tree t;
7649 tree *p;
7651 for (t = attributes; t; t = TREE_CHAIN (t))
7652 if (ATTR_IS_DEPENDENT (t))
7654 last_dep = t;
7655 attributes = copy_list (attributes);
7656 break;
7659 if (DECL_P (*decl_p))
7661 if (TREE_TYPE (*decl_p) == error_mark_node)
7662 return;
7663 p = &DECL_ATTRIBUTES (*decl_p);
7665 else
7666 p = &TYPE_ATTRIBUTES (*decl_p);
7668 if (last_dep)
7670 tree late_attrs = NULL_TREE;
7671 tree *q = &late_attrs;
7673 for (*p = attributes; *p; )
7675 t = *p;
7676 if (ATTR_IS_DEPENDENT (t))
7678 *p = TREE_CHAIN (t);
7679 TREE_CHAIN (t) = NULL_TREE;
7680 /* If the first attribute argument is an identifier, don't
7681 pass it through tsubst. Attributes like mode, format,
7682 cleanup and several target specific attributes expect it
7683 unmodified. */
7684 if (TREE_VALUE (t)
7685 && TREE_CODE (TREE_VALUE (t)) == TREE_LIST
7686 && TREE_VALUE (TREE_VALUE (t))
7687 && (TREE_CODE (TREE_VALUE (TREE_VALUE (t)))
7688 == IDENTIFIER_NODE))
7690 tree chain
7691 = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
7692 in_decl,
7693 /*integral_constant_expression_p=*/false);
7694 if (chain != TREE_CHAIN (TREE_VALUE (t)))
7695 TREE_VALUE (t)
7696 = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
7697 chain);
7699 else
7700 TREE_VALUE (t)
7701 = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
7702 /*integral_constant_expression_p=*/false);
7703 *q = t;
7704 q = &TREE_CHAIN (t);
7706 else
7707 p = &TREE_CHAIN (t);
7710 cplus_decl_attributes (decl_p, late_attrs, attr_flags);
7714 /* Perform (or defer) access check for typedefs that were referenced
7715 from within the template TMPL code.
7716 This is a subroutine of instantiate_template and instantiate_class_template.
7717 TMPL is the template to consider and TARGS is the list of arguments of
7718 that template. */
7720 static void
7721 perform_typedefs_access_check (tree tmpl, tree targs)
7723 location_t saved_location;
7724 int i;
7725 qualified_typedef_usage_t *iter;
7727 if (!tmpl
7728 || (!CLASS_TYPE_P (tmpl)
7729 && TREE_CODE (tmpl) != FUNCTION_DECL))
7730 return;
7732 saved_location = input_location;
7733 for (i = 0;
7734 VEC_iterate (qualified_typedef_usage_t,
7735 get_types_needing_access_check (tmpl),
7736 i, iter);
7737 ++i)
7739 tree type_decl = iter->typedef_decl;
7740 tree type_scope = iter->context;
7742 if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
7743 continue;
7745 if (uses_template_parms (type_decl))
7746 type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
7747 if (uses_template_parms (type_scope))
7748 type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
7750 /* Make access check error messages point to the location
7751 of the use of the typedef. */
7752 input_location = iter->locus;
7753 perform_or_defer_access_check (TYPE_BINFO (type_scope),
7754 type_decl, type_decl);
7756 input_location = saved_location;
7759 tree
7760 instantiate_class_template (tree type)
7762 tree templ, args, pattern, t, member;
7763 tree typedecl;
7764 tree pbinfo;
7765 tree base_list;
7766 unsigned int saved_maximum_field_alignment;
7768 if (type == error_mark_node)
7769 return error_mark_node;
7771 if (COMPLETE_OR_OPEN_TYPE_P (type)
7772 || uses_template_parms (type))
7773 return type;
7775 /* Figure out which template is being instantiated. */
7776 templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
7777 gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
7779 /* Determine what specialization of the original template to
7780 instantiate. */
7781 t = most_specialized_class (type, templ, tf_warning_or_error);
7782 if (t == error_mark_node)
7784 TYPE_BEING_DEFINED (type) = 1;
7785 return error_mark_node;
7787 else if (t)
7789 /* This TYPE is actually an instantiation of a partial
7790 specialization. We replace the innermost set of ARGS with
7791 the arguments appropriate for substitution. For example,
7792 given:
7794 template <class T> struct S {};
7795 template <class T> struct S<T*> {};
7797 and supposing that we are instantiating S<int*>, ARGS will
7798 presently be {int*} -- but we need {int}. */
7799 pattern = TREE_TYPE (t);
7800 args = TREE_PURPOSE (t);
7802 else
7804 pattern = TREE_TYPE (templ);
7805 args = CLASSTYPE_TI_ARGS (type);
7808 /* If the template we're instantiating is incomplete, then clearly
7809 there's nothing we can do. */
7810 if (!COMPLETE_TYPE_P (pattern))
7811 return type;
7813 /* If we've recursively instantiated too many templates, stop. */
7814 if (! push_tinst_level (type))
7815 return type;
7817 /* Now we're really doing the instantiation. Mark the type as in
7818 the process of being defined. */
7819 TYPE_BEING_DEFINED (type) = 1;
7821 /* We may be in the middle of deferred access check. Disable
7822 it now. */
7823 push_deferring_access_checks (dk_no_deferred);
7825 push_to_top_level ();
7826 /* Use #pragma pack from the template context. */
7827 saved_maximum_field_alignment = maximum_field_alignment;
7828 maximum_field_alignment = TYPE_PRECISION (pattern);
7830 SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
7832 /* Set the input location to the most specialized template definition.
7833 This is needed if tsubsting causes an error. */
7834 typedecl = TYPE_MAIN_DECL (pattern);
7835 input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) =
7836 DECL_SOURCE_LOCATION (typedecl);
7838 TYPE_HAS_USER_CONSTRUCTOR (type) = TYPE_HAS_USER_CONSTRUCTOR (pattern);
7839 TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
7840 TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
7841 TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
7842 TYPE_HAS_COPY_ASSIGN (type) = TYPE_HAS_COPY_ASSIGN (pattern);
7843 TYPE_HAS_CONST_COPY_ASSIGN (type) = TYPE_HAS_CONST_COPY_ASSIGN (pattern);
7844 TYPE_HAS_COPY_CTOR (type) = TYPE_HAS_COPY_CTOR (pattern);
7845 TYPE_HAS_CONST_COPY_CTOR (type) = TYPE_HAS_CONST_COPY_CTOR (pattern);
7846 TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
7847 TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
7848 TYPE_PACKED (type) = TYPE_PACKED (pattern);
7849 TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
7850 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
7851 TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
7852 if (ANON_AGGR_TYPE_P (pattern))
7853 SET_ANON_AGGR_TYPE_P (type);
7854 if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
7856 CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
7857 CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
7860 pbinfo = TYPE_BINFO (pattern);
7862 /* We should never instantiate a nested class before its enclosing
7863 class; we need to look up the nested class by name before we can
7864 instantiate it, and that lookup should instantiate the enclosing
7865 class. */
7866 gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
7867 || COMPLETE_OR_OPEN_TYPE_P (TYPE_CONTEXT (type)));
7869 base_list = NULL_TREE;
7870 if (BINFO_N_BASE_BINFOS (pbinfo))
7872 tree pbase_binfo;
7873 tree context = TYPE_CONTEXT (type);
7874 tree pushed_scope;
7875 int i;
7877 /* We must enter the scope containing the type, as that is where
7878 the accessibility of types named in dependent bases are
7879 looked up from. */
7880 pushed_scope = push_scope (context ? context : global_namespace);
7882 /* Substitute into each of the bases to determine the actual
7883 basetypes. */
7884 for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
7886 tree base;
7887 tree access = BINFO_BASE_ACCESS (pbinfo, i);
7888 tree expanded_bases = NULL_TREE;
7889 int idx, len = 1;
7891 if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
7893 expanded_bases =
7894 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
7895 args, tf_error, NULL_TREE);
7896 if (expanded_bases == error_mark_node)
7897 continue;
7899 len = TREE_VEC_LENGTH (expanded_bases);
7902 for (idx = 0; idx < len; idx++)
7904 if (expanded_bases)
7905 /* Extract the already-expanded base class. */
7906 base = TREE_VEC_ELT (expanded_bases, idx);
7907 else
7908 /* Substitute to figure out the base class. */
7909 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error,
7910 NULL_TREE);
7912 if (base == error_mark_node)
7913 continue;
7915 base_list = tree_cons (access, base, base_list);
7916 if (BINFO_VIRTUAL_P (pbase_binfo))
7917 TREE_TYPE (base_list) = integer_type_node;
7921 /* The list is now in reverse order; correct that. */
7922 base_list = nreverse (base_list);
7924 if (pushed_scope)
7925 pop_scope (pushed_scope);
7927 /* Now call xref_basetypes to set up all the base-class
7928 information. */
7929 xref_basetypes (type, base_list);
7931 apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
7932 (int) ATTR_FLAG_TYPE_IN_PLACE,
7933 args, tf_error, NULL_TREE);
7935 /* Now that our base classes are set up, enter the scope of the
7936 class, so that name lookups into base classes, etc. will work
7937 correctly. This is precisely analogous to what we do in
7938 begin_class_definition when defining an ordinary non-template
7939 class, except we also need to push the enclosing classes. */
7940 push_nested_class (type);
7942 /* Now members are processed in the order of declaration. */
7943 for (member = CLASSTYPE_DECL_LIST (pattern);
7944 member; member = TREE_CHAIN (member))
7946 tree t = TREE_VALUE (member);
7948 if (TREE_PURPOSE (member))
7950 if (TYPE_P (t))
7952 /* Build new CLASSTYPE_NESTED_UTDS. */
7954 tree newtag;
7955 bool class_template_p;
7957 class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
7958 && TYPE_LANG_SPECIFIC (t)
7959 && CLASSTYPE_IS_TEMPLATE (t));
7960 /* If the member is a class template, then -- even after
7961 substitution -- there may be dependent types in the
7962 template argument list for the class. We increment
7963 PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
7964 that function will assume that no types are dependent
7965 when outside of a template. */
7966 if (class_template_p)
7967 ++processing_template_decl;
7968 newtag = tsubst (t, args, tf_error, NULL_TREE);
7969 if (class_template_p)
7970 --processing_template_decl;
7971 if (newtag == error_mark_node)
7972 continue;
7974 if (TREE_CODE (newtag) != ENUMERAL_TYPE)
7976 tree name = TYPE_IDENTIFIER (t);
7978 if (class_template_p)
7979 /* Unfortunately, lookup_template_class sets
7980 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
7981 instantiation (i.e., for the type of a member
7982 template class nested within a template class.)
7983 This behavior is required for
7984 maybe_process_partial_specialization to work
7985 correctly, but is not accurate in this case;
7986 the TAG is not an instantiation of anything.
7987 (The corresponding TEMPLATE_DECL is an
7988 instantiation, but the TYPE is not.) */
7989 CLASSTYPE_USE_TEMPLATE (newtag) = 0;
7991 /* Now, we call pushtag to put this NEWTAG into the scope of
7992 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
7993 pushtag calling push_template_decl. We don't have to do
7994 this for enums because it will already have been done in
7995 tsubst_enum. */
7996 if (name)
7997 SET_IDENTIFIER_TYPE_VALUE (name, newtag);
7998 pushtag (name, newtag, /*tag_scope=*/ts_current);
8001 else if (TREE_CODE (t) == FUNCTION_DECL
8002 || DECL_FUNCTION_TEMPLATE_P (t))
8004 /* Build new TYPE_METHODS. */
8005 tree r;
8007 if (TREE_CODE (t) == TEMPLATE_DECL)
8008 ++processing_template_decl;
8009 r = tsubst (t, args, tf_error, NULL_TREE);
8010 if (TREE_CODE (t) == TEMPLATE_DECL)
8011 --processing_template_decl;
8012 set_current_access_from_decl (r);
8013 finish_member_declaration (r);
8015 else
8017 /* Build new TYPE_FIELDS. */
8018 if (TREE_CODE (t) == STATIC_ASSERT)
8020 tree condition =
8021 tsubst_expr (STATIC_ASSERT_CONDITION (t), args,
8022 tf_warning_or_error, NULL_TREE,
8023 /*integral_constant_expression_p=*/true);
8024 finish_static_assert (condition,
8025 STATIC_ASSERT_MESSAGE (t),
8026 STATIC_ASSERT_SOURCE_LOCATION (t),
8027 /*member_p=*/true);
8029 else if (TREE_CODE (t) != CONST_DECL)
8031 tree r;
8033 /* The file and line for this declaration, to
8034 assist in error message reporting. Since we
8035 called push_tinst_level above, we don't need to
8036 restore these. */
8037 input_location = DECL_SOURCE_LOCATION (t);
8039 if (TREE_CODE (t) == TEMPLATE_DECL)
8040 ++processing_template_decl;
8041 r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
8042 if (TREE_CODE (t) == TEMPLATE_DECL)
8043 --processing_template_decl;
8044 if (TREE_CODE (r) == VAR_DECL)
8046 /* In [temp.inst]:
8048 [t]he initialization (and any associated
8049 side-effects) of a static data member does
8050 not occur unless the static data member is
8051 itself used in a way that requires the
8052 definition of the static data member to
8053 exist.
8055 Therefore, we do not substitute into the
8056 initialized for the static data member here. */
8057 finish_static_data_member_decl
8059 /*init=*/NULL_TREE,
8060 /*init_const_expr_p=*/false,
8061 /*asmspec_tree=*/NULL_TREE,
8062 /*flags=*/0);
8063 if (DECL_INITIALIZED_IN_CLASS_P (r))
8064 check_static_variable_definition (r, TREE_TYPE (r));
8066 else if (TREE_CODE (r) == FIELD_DECL)
8068 /* Determine whether R has a valid type and can be
8069 completed later. If R is invalid, then it is
8070 replaced by error_mark_node so that it will not be
8071 added to TYPE_FIELDS. */
8072 tree rtype = TREE_TYPE (r);
8073 if (can_complete_type_without_circularity (rtype))
8074 complete_type (rtype);
8076 if (!COMPLETE_TYPE_P (rtype))
8078 cxx_incomplete_type_error (r, rtype);
8079 r = error_mark_node;
8083 /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
8084 such a thing will already have been added to the field
8085 list by tsubst_enum in finish_member_declaration in the
8086 CLASSTYPE_NESTED_UTDS case above. */
8087 if (!(TREE_CODE (r) == TYPE_DECL
8088 && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
8089 && DECL_ARTIFICIAL (r)))
8091 set_current_access_from_decl (r);
8092 finish_member_declaration (r);
8097 else
8099 if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
8101 /* Build new CLASSTYPE_FRIEND_CLASSES. */
8103 tree friend_type = t;
8104 bool adjust_processing_template_decl = false;
8106 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
8108 /* template <class T> friend class C; */
8109 friend_type = tsubst_friend_class (friend_type, args);
8110 adjust_processing_template_decl = true;
8112 else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
8114 /* template <class T> friend class C::D; */
8115 friend_type = tsubst (friend_type, args,
8116 tf_warning_or_error, NULL_TREE);
8117 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
8118 friend_type = TREE_TYPE (friend_type);
8119 adjust_processing_template_decl = true;
8121 else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
8123 /* This could be either
8125 friend class T::C;
8127 when dependent_type_p is false or
8129 template <class U> friend class T::C;
8131 otherwise. */
8132 friend_type = tsubst (friend_type, args,
8133 tf_warning_or_error, NULL_TREE);
8134 /* Bump processing_template_decl for correct
8135 dependent_type_p calculation. */
8136 ++processing_template_decl;
8137 if (dependent_type_p (friend_type))
8138 adjust_processing_template_decl = true;
8139 --processing_template_decl;
8141 else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
8142 && hidden_name_p (TYPE_NAME (friend_type)))
8144 /* friend class C;
8146 where C hasn't been declared yet. Let's lookup name
8147 from namespace scope directly, bypassing any name that
8148 come from dependent base class. */
8149 tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
8151 /* The call to xref_tag_from_type does injection for friend
8152 classes. */
8153 push_nested_namespace (ns);
8154 friend_type =
8155 xref_tag_from_type (friend_type, NULL_TREE,
8156 /*tag_scope=*/ts_current);
8157 pop_nested_namespace (ns);
8159 else if (uses_template_parms (friend_type))
8160 /* friend class C<T>; */
8161 friend_type = tsubst (friend_type, args,
8162 tf_warning_or_error, NULL_TREE);
8163 /* Otherwise it's
8165 friend class C;
8167 where C is already declared or
8169 friend class C<int>;
8171 We don't have to do anything in these cases. */
8173 if (adjust_processing_template_decl)
8174 /* Trick make_friend_class into realizing that the friend
8175 we're adding is a template, not an ordinary class. It's
8176 important that we use make_friend_class since it will
8177 perform some error-checking and output cross-reference
8178 information. */
8179 ++processing_template_decl;
8181 if (friend_type != error_mark_node)
8182 make_friend_class (type, friend_type, /*complain=*/false);
8184 if (adjust_processing_template_decl)
8185 --processing_template_decl;
8187 else
8189 /* Build new DECL_FRIENDLIST. */
8190 tree r;
8192 /* The file and line for this declaration, to
8193 assist in error message reporting. Since we
8194 called push_tinst_level above, we don't need to
8195 restore these. */
8196 input_location = DECL_SOURCE_LOCATION (t);
8198 if (TREE_CODE (t) == TEMPLATE_DECL)
8200 ++processing_template_decl;
8201 push_deferring_access_checks (dk_no_check);
8204 r = tsubst_friend_function (t, args);
8205 add_friend (type, r, /*complain=*/false);
8206 if (TREE_CODE (t) == TEMPLATE_DECL)
8208 pop_deferring_access_checks ();
8209 --processing_template_decl;
8215 /* Set the file and line number information to whatever is given for
8216 the class itself. This puts error messages involving generated
8217 implicit functions at a predictable point, and the same point
8218 that would be used for non-template classes. */
8219 input_location = DECL_SOURCE_LOCATION (typedecl);
8221 unreverse_member_declarations (type);
8222 finish_struct_1 (type);
8223 TYPE_BEING_DEFINED (type) = 0;
8225 /* Now that the class is complete, instantiate default arguments for
8226 any member functions. We don't do this earlier because the
8227 default arguments may reference members of the class. */
8228 if (!PRIMARY_TEMPLATE_P (templ))
8229 for (t = TYPE_METHODS (type); t; t = DECL_CHAIN (t))
8230 if (TREE_CODE (t) == FUNCTION_DECL
8231 /* Implicitly generated member functions will not have template
8232 information; they are not instantiations, but instead are
8233 created "fresh" for each instantiation. */
8234 && DECL_TEMPLATE_INFO (t))
8235 tsubst_default_arguments (t);
8237 /* Some typedefs referenced from within the template code need to be access
8238 checked at template instantiation time, i.e now. These types were
8239 added to the template at parsing time. Let's get those and perform
8240 the access checks then. */
8241 perform_typedefs_access_check (pattern, args);
8242 perform_deferred_access_checks ();
8243 pop_nested_class ();
8244 maximum_field_alignment = saved_maximum_field_alignment;
8245 pop_from_top_level ();
8246 pop_deferring_access_checks ();
8247 pop_tinst_level ();
8249 /* The vtable for a template class can be emitted in any translation
8250 unit in which the class is instantiated. When there is no key
8251 method, however, finish_struct_1 will already have added TYPE to
8252 the keyed_classes list. */
8253 if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
8254 keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
8256 return type;
8259 static tree
8260 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8262 tree r;
8264 if (!t)
8265 r = t;
8266 else if (TYPE_P (t))
8267 r = tsubst (t, args, complain, in_decl);
8268 else
8270 r = tsubst_expr (t, args, complain, in_decl,
8271 /*integral_constant_expression_p=*/true);
8272 r = fold_non_dependent_expr (r);
8274 return r;
8277 /* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
8278 NONTYPE_ARGUMENT_PACK. */
8280 static tree
8281 make_fnparm_pack (tree spec_parm)
8283 /* Collect all of the extra "packed" parameters into an
8284 argument pack. */
8285 tree parmvec;
8286 tree parmtypevec;
8287 tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
8288 tree argtypepack = cxx_make_type (TYPE_ARGUMENT_PACK);
8289 int i, len = list_length (spec_parm);
8291 /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters. */
8292 parmvec = make_tree_vec (len);
8293 parmtypevec = make_tree_vec (len);
8294 for (i = 0; i < len; i++, spec_parm = DECL_CHAIN (spec_parm))
8296 TREE_VEC_ELT (parmvec, i) = spec_parm;
8297 TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
8300 /* Build the argument packs. */
8301 SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
8302 SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
8303 TREE_TYPE (argpack) = argtypepack;
8305 return argpack;
8308 /* Substitute ARGS into T, which is an pack expansion
8309 (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
8310 TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
8311 (if only a partial substitution could be performed) or
8312 ERROR_MARK_NODE if there was an error. */
8313 tree
8314 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
8315 tree in_decl)
8317 tree pattern;
8318 tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
8319 int i, len = -1;
8320 tree result;
8321 int incomplete = 0;
8322 htab_t saved_local_specializations = NULL;
8324 gcc_assert (PACK_EXPANSION_P (t));
8325 pattern = PACK_EXPANSION_PATTERN (t);
8327 /* Determine the argument packs that will instantiate the parameter
8328 packs used in the expansion expression. While we're at it,
8329 compute the number of arguments to be expanded and make sure it
8330 is consistent. */
8331 for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack;
8332 pack = TREE_CHAIN (pack))
8334 tree parm_pack = TREE_VALUE (pack);
8335 tree arg_pack = NULL_TREE;
8336 tree orig_arg = NULL_TREE;
8338 if (TREE_CODE (parm_pack) == PARM_DECL)
8340 if (!cp_unevaluated_operand)
8341 arg_pack = retrieve_local_specialization (parm_pack);
8342 else
8344 /* We can't rely on local_specializations for a parameter
8345 name used later in a function declaration (such as in a
8346 late-specified return type). Even if it exists, it might
8347 have the wrong value for a recursive call. Just make a
8348 dummy decl, since it's only used for its type. */
8349 arg_pack = tsubst_decl (parm_pack, args, complain);
8350 arg_pack = make_fnparm_pack (arg_pack);
8353 else
8355 int level, idx, levels;
8356 template_parm_level_and_index (parm_pack, &level, &idx);
8358 levels = TMPL_ARGS_DEPTH (args);
8359 if (level <= levels)
8360 arg_pack = TMPL_ARG (args, level, idx);
8363 orig_arg = arg_pack;
8364 if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
8365 arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
8367 if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
8368 /* This can only happen if we forget to expand an argument
8369 pack somewhere else. Just return an error, silently. */
8371 result = make_tree_vec (1);
8372 TREE_VEC_ELT (result, 0) = error_mark_node;
8373 return result;
8376 if (arg_pack
8377 && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
8378 && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
8380 tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
8381 tree pattern = PACK_EXPANSION_PATTERN (expansion);
8382 if ((TYPE_P (pattern) && same_type_p (pattern, parm_pack))
8383 || (!TYPE_P (pattern) && cp_tree_equal (parm_pack, pattern)))
8384 /* The argument pack that the parameter maps to is just an
8385 expansion of the parameter itself, such as one would
8386 find in the implicit typedef of a class inside the
8387 class itself. Consider this parameter "unsubstituted",
8388 so that we will maintain the outer pack expansion. */
8389 arg_pack = NULL_TREE;
8392 if (arg_pack)
8394 int my_len =
8395 TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
8397 /* It's all-or-nothing with incomplete argument packs. */
8398 if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
8399 return error_mark_node;
8401 if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
8402 incomplete = 1;
8404 if (len < 0)
8405 len = my_len;
8406 else if (len != my_len)
8408 if (incomplete)
8409 /* We got explicit args for some packs but not others;
8410 do nothing now and try again after deduction. */
8411 return t;
8412 if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
8413 error ("mismatched argument pack lengths while expanding "
8414 "%<%T%>",
8415 pattern);
8416 else
8417 error ("mismatched argument pack lengths while expanding "
8418 "%<%E%>",
8419 pattern);
8420 return error_mark_node;
8423 /* Keep track of the parameter packs and their corresponding
8424 argument packs. */
8425 packs = tree_cons (parm_pack, arg_pack, packs);
8426 TREE_TYPE (packs) = orig_arg;
8428 else
8429 /* We can't substitute for this parameter pack. */
8430 unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
8431 TREE_VALUE (pack),
8432 unsubstituted_packs);
8435 /* We cannot expand this expansion expression, because we don't have
8436 all of the argument packs we need. Substitute into the pattern
8437 and return a PACK_EXPANSION_*. The caller will need to deal with
8438 that. */
8439 if (unsubstituted_packs)
8441 tree new_pat;
8442 if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
8443 new_pat = tsubst_expr (pattern, args, complain, in_decl,
8444 /*integral_constant_expression_p=*/false);
8445 else
8446 new_pat = tsubst (pattern, args, complain, in_decl);
8447 return make_pack_expansion (new_pat);
8450 /* We could not find any argument packs that work. */
8451 if (len < 0)
8452 return error_mark_node;
8454 if (cp_unevaluated_operand)
8456 /* We're in a late-specified return type, so create our own local
8457 specializations table; the current table is either NULL or (in the
8458 case of recursive unification) might have bindings that we don't
8459 want to use or alter. */
8460 saved_local_specializations = local_specializations;
8461 local_specializations = htab_create (37,
8462 hash_local_specialization,
8463 eq_local_specializations,
8464 NULL);
8467 /* For each argument in each argument pack, substitute into the
8468 pattern. */
8469 result = make_tree_vec (len + incomplete);
8470 for (i = 0; i < len + incomplete; ++i)
8472 /* For parameter pack, change the substitution of the parameter
8473 pack to the ith argument in its argument pack, then expand
8474 the pattern. */
8475 for (pack = packs; pack; pack = TREE_CHAIN (pack))
8477 tree parm = TREE_PURPOSE (pack);
8479 if (TREE_CODE (parm) == PARM_DECL)
8481 /* Select the Ith argument from the pack. */
8482 tree arg = make_node (ARGUMENT_PACK_SELECT);
8483 ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
8484 ARGUMENT_PACK_SELECT_INDEX (arg) = i;
8485 mark_used (parm);
8486 register_local_specialization (arg, parm);
8488 else
8490 tree value = parm;
8491 int idx, level;
8492 template_parm_level_and_index (parm, &level, &idx);
8494 if (i < len)
8496 /* Select the Ith argument from the pack. */
8497 value = make_node (ARGUMENT_PACK_SELECT);
8498 ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
8499 ARGUMENT_PACK_SELECT_INDEX (value) = i;
8502 /* Update the corresponding argument. */
8503 TMPL_ARG (args, level, idx) = value;
8507 /* Substitute into the PATTERN with the altered arguments. */
8508 if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
8509 TREE_VEC_ELT (result, i) =
8510 tsubst_expr (pattern, args, complain, in_decl,
8511 /*integral_constant_expression_p=*/false);
8512 else
8513 TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
8515 if (i == len)
8516 /* When we have incomplete argument packs, the last "expanded"
8517 result is itself a pack expansion, which allows us
8518 to deduce more arguments. */
8519 TREE_VEC_ELT (result, i) =
8520 make_pack_expansion (TREE_VEC_ELT (result, i));
8522 if (TREE_VEC_ELT (result, i) == error_mark_node)
8524 result = error_mark_node;
8525 break;
8529 /* Update ARGS to restore the substitution from parameter packs to
8530 their argument packs. */
8531 for (pack = packs; pack; pack = TREE_CHAIN (pack))
8533 tree parm = TREE_PURPOSE (pack);
8535 if (TREE_CODE (parm) == PARM_DECL)
8536 register_local_specialization (TREE_TYPE (pack), parm);
8537 else
8539 int idx, level;
8540 template_parm_level_and_index (parm, &level, &idx);
8542 /* Update the corresponding argument. */
8543 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
8544 TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
8545 TREE_TYPE (pack);
8546 else
8547 TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
8551 if (saved_local_specializations)
8553 htab_delete (local_specializations);
8554 local_specializations = saved_local_specializations;
8557 return result;
8560 /* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
8561 TMPL. We do this using DECL_PARM_INDEX, which should work even with
8562 parameter packs; all parms generated from a function parameter pack will
8563 have the same DECL_PARM_INDEX. */
8565 tree
8566 get_pattern_parm (tree parm, tree tmpl)
8568 tree pattern = DECL_TEMPLATE_RESULT (tmpl);
8569 tree patparm;
8571 if (DECL_ARTIFICIAL (parm))
8573 for (patparm = DECL_ARGUMENTS (pattern);
8574 patparm; patparm = DECL_CHAIN (patparm))
8575 if (DECL_ARTIFICIAL (patparm)
8576 && DECL_NAME (parm) == DECL_NAME (patparm))
8577 break;
8579 else
8581 patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
8582 patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
8583 gcc_assert (DECL_PARM_INDEX (patparm)
8584 == DECL_PARM_INDEX (parm));
8587 return patparm;
8590 /* Substitute ARGS into the vector or list of template arguments T. */
8592 static tree
8593 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8595 tree orig_t = t;
8596 int len = TREE_VEC_LENGTH (t);
8597 int need_new = 0, i, expanded_len_adjust = 0, out;
8598 tree *elts = XALLOCAVEC (tree, len);
8600 for (i = 0; i < len; i++)
8602 tree orig_arg = TREE_VEC_ELT (t, i);
8603 tree new_arg;
8605 if (TREE_CODE (orig_arg) == TREE_VEC)
8606 new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
8607 else if (PACK_EXPANSION_P (orig_arg))
8609 /* Substitute into an expansion expression. */
8610 new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
8612 if (TREE_CODE (new_arg) == TREE_VEC)
8613 /* Add to the expanded length adjustment the number of
8614 expanded arguments. We subtract one from this
8615 measurement, because the argument pack expression
8616 itself is already counted as 1 in
8617 LEN. EXPANDED_LEN_ADJUST can actually be negative, if
8618 the argument pack is empty. */
8619 expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
8621 else if (ARGUMENT_PACK_P (orig_arg))
8623 /* Substitute into each of the arguments. */
8624 new_arg = TYPE_P (orig_arg)
8625 ? cxx_make_type (TREE_CODE (orig_arg))
8626 : make_node (TREE_CODE (orig_arg));
8628 SET_ARGUMENT_PACK_ARGS (
8629 new_arg,
8630 tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
8631 args, complain, in_decl));
8633 if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
8634 new_arg = error_mark_node;
8636 if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
8637 TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
8638 complain, in_decl);
8639 TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
8641 if (TREE_TYPE (new_arg) == error_mark_node)
8642 new_arg = error_mark_node;
8645 else
8646 new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
8648 if (new_arg == error_mark_node)
8649 return error_mark_node;
8651 elts[i] = new_arg;
8652 if (new_arg != orig_arg)
8653 need_new = 1;
8656 if (!need_new)
8657 return t;
8659 /* Make space for the expanded arguments coming from template
8660 argument packs. */
8661 t = make_tree_vec (len + expanded_len_adjust);
8662 /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
8663 arguments for a member template.
8664 In that case each TREE_VEC in ORIG_T represents a level of template
8665 arguments, and ORIG_T won't carry any non defaulted argument count.
8666 It will rather be the nested TREE_VECs that will carry one.
8667 In other words, ORIG_T carries a non defaulted argument count only
8668 if it doesn't contain any nested TREE_VEC. */
8669 if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
8671 int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
8672 count += expanded_len_adjust;
8673 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
8675 for (i = 0, out = 0; i < len; i++)
8677 if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
8678 || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
8679 && TREE_CODE (elts[i]) == TREE_VEC)
8681 int idx;
8683 /* Now expand the template argument pack "in place". */
8684 for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
8685 TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
8687 else
8689 TREE_VEC_ELT (t, out) = elts[i];
8690 out++;
8694 return t;
8697 /* Return the result of substituting ARGS into the template parameters
8698 given by PARMS. If there are m levels of ARGS and m + n levels of
8699 PARMS, then the result will contain n levels of PARMS. For
8700 example, if PARMS is `template <class T> template <class U>
8701 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
8702 result will be `template <int*, double, class V>'. */
8704 static tree
8705 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
8707 tree r = NULL_TREE;
8708 tree* new_parms;
8710 /* When substituting into a template, we must set
8711 PROCESSING_TEMPLATE_DECL as the template parameters may be
8712 dependent if they are based on one-another, and the dependency
8713 predicates are short-circuit outside of templates. */
8714 ++processing_template_decl;
8716 for (new_parms = &r;
8717 TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
8718 new_parms = &(TREE_CHAIN (*new_parms)),
8719 parms = TREE_CHAIN (parms))
8721 tree new_vec =
8722 make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
8723 int i;
8725 for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
8727 tree tuple;
8728 tree default_value;
8729 tree parm_decl;
8731 if (parms == error_mark_node)
8732 continue;
8734 tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
8736 if (tuple == error_mark_node)
8737 continue;
8739 default_value = TREE_PURPOSE (tuple);
8740 parm_decl = TREE_VALUE (tuple);
8742 parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
8743 if (TREE_CODE (parm_decl) == PARM_DECL
8744 && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
8745 parm_decl = error_mark_node;
8746 default_value = tsubst_template_arg (default_value, args,
8747 complain, NULL_TREE);
8749 tuple = build_tree_list (default_value, parm_decl);
8750 TREE_VEC_ELT (new_vec, i) = tuple;
8753 *new_parms =
8754 tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
8755 - TMPL_ARGS_DEPTH (args)),
8756 new_vec, NULL_TREE);
8759 --processing_template_decl;
8761 return r;
8764 /* Substitute the ARGS into the indicated aggregate (or enumeration)
8765 type T. If T is not an aggregate or enumeration type, it is
8766 handled as if by tsubst. IN_DECL is as for tsubst. If
8767 ENTERING_SCOPE is nonzero, T is the context for a template which
8768 we are presently tsubst'ing. Return the substituted value. */
8770 static tree
8771 tsubst_aggr_type (tree t,
8772 tree args,
8773 tsubst_flags_t complain,
8774 tree in_decl,
8775 int entering_scope)
8777 if (t == NULL_TREE)
8778 return NULL_TREE;
8780 switch (TREE_CODE (t))
8782 case RECORD_TYPE:
8783 if (TYPE_PTRMEMFUNC_P (t))
8784 return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
8786 /* Else fall through. */
8787 case ENUMERAL_TYPE:
8788 case UNION_TYPE:
8789 if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
8791 tree argvec;
8792 tree context;
8793 tree r;
8794 int saved_unevaluated_operand;
8795 int saved_inhibit_evaluation_warnings;
8797 /* In "sizeof(X<I>)" we need to evaluate "I". */
8798 saved_unevaluated_operand = cp_unevaluated_operand;
8799 cp_unevaluated_operand = 0;
8800 saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
8801 c_inhibit_evaluation_warnings = 0;
8803 /* First, determine the context for the type we are looking
8804 up. */
8805 context = TYPE_CONTEXT (t);
8806 if (context)
8808 context = tsubst_aggr_type (context, args, complain,
8809 in_decl, /*entering_scope=*/1);
8810 /* If context is a nested class inside a class template,
8811 it may still need to be instantiated (c++/33959). */
8812 if (TYPE_P (context))
8813 context = complete_type (context);
8816 /* Then, figure out what arguments are appropriate for the
8817 type we are trying to find. For example, given:
8819 template <class T> struct S;
8820 template <class T, class U> void f(T, U) { S<U> su; }
8822 and supposing that we are instantiating f<int, double>,
8823 then our ARGS will be {int, double}, but, when looking up
8824 S we only want {double}. */
8825 argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
8826 complain, in_decl);
8827 if (argvec == error_mark_node)
8828 r = error_mark_node;
8829 else
8831 r = lookup_template_class (t, argvec, in_decl, context,
8832 entering_scope, complain);
8833 r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
8836 cp_unevaluated_operand = saved_unevaluated_operand;
8837 c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
8839 return r;
8841 else
8842 /* This is not a template type, so there's nothing to do. */
8843 return t;
8845 default:
8846 return tsubst (t, args, complain, in_decl);
8850 /* Substitute into the default argument ARG (a default argument for
8851 FN), which has the indicated TYPE. */
8853 tree
8854 tsubst_default_argument (tree fn, tree type, tree arg)
8856 tree saved_class_ptr = NULL_TREE;
8857 tree saved_class_ref = NULL_TREE;
8859 /* This default argument came from a template. Instantiate the
8860 default argument here, not in tsubst. In the case of
8861 something like:
8863 template <class T>
8864 struct S {
8865 static T t();
8866 void f(T = t());
8869 we must be careful to do name lookup in the scope of S<T>,
8870 rather than in the current class. */
8871 push_access_scope (fn);
8872 /* The "this" pointer is not valid in a default argument. */
8873 if (cfun)
8875 saved_class_ptr = current_class_ptr;
8876 cp_function_chain->x_current_class_ptr = NULL_TREE;
8877 saved_class_ref = current_class_ref;
8878 cp_function_chain->x_current_class_ref = NULL_TREE;
8881 push_deferring_access_checks(dk_no_deferred);
8882 /* The default argument expression may cause implicitly defined
8883 member functions to be synthesized, which will result in garbage
8884 collection. We must treat this situation as if we were within
8885 the body of function so as to avoid collecting live data on the
8886 stack. */
8887 ++function_depth;
8888 arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
8889 tf_warning_or_error, NULL_TREE,
8890 /*integral_constant_expression_p=*/false);
8891 --function_depth;
8892 pop_deferring_access_checks();
8894 /* Restore the "this" pointer. */
8895 if (cfun)
8897 cp_function_chain->x_current_class_ptr = saved_class_ptr;
8898 cp_function_chain->x_current_class_ref = saved_class_ref;
8901 /* Make sure the default argument is reasonable. */
8902 arg = check_default_argument (type, arg);
8904 pop_access_scope (fn);
8906 return arg;
8909 /* Substitute into all the default arguments for FN. */
8911 static void
8912 tsubst_default_arguments (tree fn)
8914 tree arg;
8915 tree tmpl_args;
8917 tmpl_args = DECL_TI_ARGS (fn);
8919 /* If this function is not yet instantiated, we certainly don't need
8920 its default arguments. */
8921 if (uses_template_parms (tmpl_args))
8922 return;
8924 for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
8925 arg;
8926 arg = TREE_CHAIN (arg))
8927 if (TREE_PURPOSE (arg))
8928 TREE_PURPOSE (arg) = tsubst_default_argument (fn,
8929 TREE_VALUE (arg),
8930 TREE_PURPOSE (arg));
8933 /* Substitute the ARGS into the T, which is a _DECL. Return the
8934 result of the substitution. Issue error and warning messages under
8935 control of COMPLAIN. */
8937 static tree
8938 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
8940 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
8941 location_t saved_loc;
8942 tree r = NULL_TREE;
8943 tree in_decl = t;
8944 hashval_t hash = 0;
8946 /* Set the filename and linenumber to improve error-reporting. */
8947 saved_loc = input_location;
8948 input_location = DECL_SOURCE_LOCATION (t);
8950 switch (TREE_CODE (t))
8952 case TEMPLATE_DECL:
8954 /* We can get here when processing a member function template,
8955 member class template, or template template parameter. */
8956 tree decl = DECL_TEMPLATE_RESULT (t);
8957 tree spec;
8958 tree tmpl_args;
8959 tree full_args;
8961 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
8963 /* Template template parameter is treated here. */
8964 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8965 if (new_type == error_mark_node)
8966 RETURN (error_mark_node);
8968 r = copy_decl (t);
8969 DECL_CHAIN (r) = NULL_TREE;
8970 TREE_TYPE (r) = new_type;
8971 DECL_TEMPLATE_RESULT (r)
8972 = build_decl (DECL_SOURCE_LOCATION (decl),
8973 TYPE_DECL, DECL_NAME (decl), new_type);
8974 DECL_TEMPLATE_PARMS (r)
8975 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
8976 complain);
8977 TYPE_NAME (new_type) = r;
8978 break;
8981 /* We might already have an instance of this template.
8982 The ARGS are for the surrounding class type, so the
8983 full args contain the tsubst'd args for the context,
8984 plus the innermost args from the template decl. */
8985 tmpl_args = DECL_CLASS_TEMPLATE_P (t)
8986 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
8987 : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
8988 /* Because this is a template, the arguments will still be
8989 dependent, even after substitution. If
8990 PROCESSING_TEMPLATE_DECL is not set, the dependency
8991 predicates will short-circuit. */
8992 ++processing_template_decl;
8993 full_args = tsubst_template_args (tmpl_args, args,
8994 complain, in_decl);
8995 --processing_template_decl;
8996 if (full_args == error_mark_node)
8997 RETURN (error_mark_node);
8999 /* If this is a default template template argument,
9000 tsubst might not have changed anything. */
9001 if (full_args == tmpl_args)
9002 RETURN (t);
9004 hash = hash_tmpl_and_args (t, full_args);
9005 spec = retrieve_specialization (t, full_args, hash);
9006 if (spec != NULL_TREE)
9008 r = spec;
9009 break;
9012 /* Make a new template decl. It will be similar to the
9013 original, but will record the current template arguments.
9014 We also create a new function declaration, which is just
9015 like the old one, but points to this new template, rather
9016 than the old one. */
9017 r = copy_decl (t);
9018 gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
9019 DECL_CHAIN (r) = NULL_TREE;
9021 DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
9023 if (TREE_CODE (decl) == TYPE_DECL)
9025 tree new_type;
9026 ++processing_template_decl;
9027 new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9028 --processing_template_decl;
9029 if (new_type == error_mark_node)
9030 RETURN (error_mark_node);
9032 TREE_TYPE (r) = new_type;
9033 CLASSTYPE_TI_TEMPLATE (new_type) = r;
9034 DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
9035 DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
9036 DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
9038 else
9040 tree new_decl;
9041 ++processing_template_decl;
9042 new_decl = tsubst (decl, args, complain, in_decl);
9043 --processing_template_decl;
9044 if (new_decl == error_mark_node)
9045 RETURN (error_mark_node);
9047 DECL_TEMPLATE_RESULT (r) = new_decl;
9048 DECL_TI_TEMPLATE (new_decl) = r;
9049 TREE_TYPE (r) = TREE_TYPE (new_decl);
9050 DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
9051 DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
9054 SET_DECL_IMPLICIT_INSTANTIATION (r);
9055 DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
9056 DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
9058 /* The template parameters for this new template are all the
9059 template parameters for the old template, except the
9060 outermost level of parameters. */
9061 DECL_TEMPLATE_PARMS (r)
9062 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
9063 complain);
9065 if (PRIMARY_TEMPLATE_P (t))
9066 DECL_PRIMARY_TEMPLATE (r) = r;
9068 if (TREE_CODE (decl) != TYPE_DECL)
9069 /* Record this non-type partial instantiation. */
9070 register_specialization (r, t,
9071 DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
9072 false, hash);
9074 break;
9076 case FUNCTION_DECL:
9078 tree ctx;
9079 tree argvec = NULL_TREE;
9080 tree *friends;
9081 tree gen_tmpl;
9082 tree type;
9083 int member;
9084 int args_depth;
9085 int parms_depth;
9087 /* Nobody should be tsubst'ing into non-template functions. */
9088 gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
9090 if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
9092 tree spec;
9093 bool dependent_p;
9095 /* If T is not dependent, just return it. We have to
9096 increment PROCESSING_TEMPLATE_DECL because
9097 value_dependent_expression_p assumes that nothing is
9098 dependent when PROCESSING_TEMPLATE_DECL is zero. */
9099 ++processing_template_decl;
9100 dependent_p = value_dependent_expression_p (t);
9101 --processing_template_decl;
9102 if (!dependent_p)
9103 RETURN (t);
9105 /* Calculate the most general template of which R is a
9106 specialization, and the complete set of arguments used to
9107 specialize R. */
9108 gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
9109 argvec = tsubst_template_args (DECL_TI_ARGS
9110 (DECL_TEMPLATE_RESULT
9111 (DECL_TI_TEMPLATE (t))),
9112 args, complain, in_decl);
9114 /* Check to see if we already have this specialization. */
9115 hash = hash_tmpl_and_args (gen_tmpl, argvec);
9116 spec = retrieve_specialization (gen_tmpl, argvec, hash);
9118 if (spec)
9120 r = spec;
9121 break;
9124 /* We can see more levels of arguments than parameters if
9125 there was a specialization of a member template, like
9126 this:
9128 template <class T> struct S { template <class U> void f(); }
9129 template <> template <class U> void S<int>::f(U);
9131 Here, we'll be substituting into the specialization,
9132 because that's where we can find the code we actually
9133 want to generate, but we'll have enough arguments for
9134 the most general template.
9136 We also deal with the peculiar case:
9138 template <class T> struct S {
9139 template <class U> friend void f();
9141 template <class U> void f() {}
9142 template S<int>;
9143 template void f<double>();
9145 Here, the ARGS for the instantiation of will be {int,
9146 double}. But, we only need as many ARGS as there are
9147 levels of template parameters in CODE_PATTERN. We are
9148 careful not to get fooled into reducing the ARGS in
9149 situations like:
9151 template <class T> struct S { template <class U> void f(U); }
9152 template <class T> template <> void S<T>::f(int) {}
9154 which we can spot because the pattern will be a
9155 specialization in this case. */
9156 args_depth = TMPL_ARGS_DEPTH (args);
9157 parms_depth =
9158 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
9159 if (args_depth > parms_depth
9160 && !DECL_TEMPLATE_SPECIALIZATION (t))
9161 args = get_innermost_template_args (args, parms_depth);
9163 else
9165 /* This special case arises when we have something like this:
9167 template <class T> struct S {
9168 friend void f<int>(int, double);
9171 Here, the DECL_TI_TEMPLATE for the friend declaration
9172 will be an IDENTIFIER_NODE. We are being called from
9173 tsubst_friend_function, and we want only to create a
9174 new decl (R) with appropriate types so that we can call
9175 determine_specialization. */
9176 gen_tmpl = NULL_TREE;
9179 if (DECL_CLASS_SCOPE_P (t))
9181 if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
9182 member = 2;
9183 else
9184 member = 1;
9185 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
9186 complain, t, /*entering_scope=*/1);
9188 else
9190 member = 0;
9191 ctx = DECL_CONTEXT (t);
9193 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9194 if (type == error_mark_node)
9195 RETURN (error_mark_node);
9197 /* We do NOT check for matching decls pushed separately at this
9198 point, as they may not represent instantiations of this
9199 template, and in any case are considered separate under the
9200 discrete model. */
9201 r = copy_decl (t);
9202 DECL_USE_TEMPLATE (r) = 0;
9203 TREE_TYPE (r) = type;
9204 /* Clear out the mangled name and RTL for the instantiation. */
9205 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
9206 SET_DECL_RTL (r, NULL);
9207 /* Leave DECL_INITIAL set on deleted instantiations. */
9208 if (!DECL_DELETED_FN (r))
9209 DECL_INITIAL (r) = NULL_TREE;
9210 DECL_CONTEXT (r) = ctx;
9212 if (member && DECL_CONV_FN_P (r))
9213 /* Type-conversion operator. Reconstruct the name, in
9214 case it's the name of one of the template's parameters. */
9215 DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
9217 DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
9218 complain, t);
9219 DECL_RESULT (r) = NULL_TREE;
9221 TREE_STATIC (r) = 0;
9222 TREE_PUBLIC (r) = TREE_PUBLIC (t);
9223 DECL_EXTERNAL (r) = 1;
9224 /* If this is an instantiation of a function with internal
9225 linkage, we already know what object file linkage will be
9226 assigned to the instantiation. */
9227 DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
9228 DECL_DEFER_OUTPUT (r) = 0;
9229 DECL_CHAIN (r) = NULL_TREE;
9230 DECL_PENDING_INLINE_INFO (r) = 0;
9231 DECL_PENDING_INLINE_P (r) = 0;
9232 DECL_SAVED_TREE (r) = NULL_TREE;
9233 DECL_STRUCT_FUNCTION (r) = NULL;
9234 TREE_USED (r) = 0;
9235 /* We'll re-clone as appropriate in instantiate_template. */
9236 DECL_CLONED_FUNCTION (r) = NULL_TREE;
9238 /* If we aren't complaining now, return on error before we register
9239 the specialization so that we'll complain eventually. */
9240 if ((complain & tf_error) == 0
9241 && IDENTIFIER_OPNAME_P (DECL_NAME (r))
9242 && !grok_op_properties (r, /*complain=*/false))
9243 RETURN (error_mark_node);
9245 /* Set up the DECL_TEMPLATE_INFO for R. There's no need to do
9246 this in the special friend case mentioned above where
9247 GEN_TMPL is NULL. */
9248 if (gen_tmpl)
9250 DECL_TEMPLATE_INFO (r)
9251 = build_template_info (gen_tmpl, argvec);
9252 SET_DECL_IMPLICIT_INSTANTIATION (r);
9253 register_specialization (r, gen_tmpl, argvec, false, hash);
9255 /* We're not supposed to instantiate default arguments
9256 until they are called, for a template. But, for a
9257 declaration like:
9259 template <class T> void f ()
9260 { extern void g(int i = T()); }
9262 we should do the substitution when the template is
9263 instantiated. We handle the member function case in
9264 instantiate_class_template since the default arguments
9265 might refer to other members of the class. */
9266 if (!member
9267 && !PRIMARY_TEMPLATE_P (gen_tmpl)
9268 && !uses_template_parms (argvec))
9269 tsubst_default_arguments (r);
9271 else
9272 DECL_TEMPLATE_INFO (r) = NULL_TREE;
9274 /* Copy the list of befriending classes. */
9275 for (friends = &DECL_BEFRIENDING_CLASSES (r);
9276 *friends;
9277 friends = &TREE_CHAIN (*friends))
9279 *friends = copy_node (*friends);
9280 TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
9281 args, complain,
9282 in_decl);
9285 if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
9287 maybe_retrofit_in_chrg (r);
9288 if (DECL_CONSTRUCTOR_P (r))
9289 grok_ctor_properties (ctx, r);
9290 /* If this is an instantiation of a member template, clone it.
9291 If it isn't, that'll be handled by
9292 clone_constructors_and_destructors. */
9293 if (PRIMARY_TEMPLATE_P (gen_tmpl))
9294 clone_function_decl (r, /*update_method_vec_p=*/0);
9296 else if ((complain & tf_error) != 0
9297 && IDENTIFIER_OPNAME_P (DECL_NAME (r))
9298 && !grok_op_properties (r, /*complain=*/true))
9299 RETURN (error_mark_node);
9301 if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
9302 SET_DECL_FRIEND_CONTEXT (r,
9303 tsubst (DECL_FRIEND_CONTEXT (t),
9304 args, complain, in_decl));
9306 /* Possibly limit visibility based on template args. */
9307 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
9308 if (DECL_VISIBILITY_SPECIFIED (t))
9310 DECL_VISIBILITY_SPECIFIED (r) = 0;
9311 DECL_ATTRIBUTES (r)
9312 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
9314 determine_visibility (r);
9315 if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
9316 && !processing_template_decl)
9317 defaulted_late_check (r);
9319 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
9320 args, complain, in_decl);
9322 break;
9324 case PARM_DECL:
9326 tree type = NULL_TREE;
9327 int i, len = 1;
9328 tree expanded_types = NULL_TREE;
9329 tree prev_r = NULL_TREE;
9330 tree first_r = NULL_TREE;
9332 if (FUNCTION_PARAMETER_PACK_P (t))
9334 /* If there is a local specialization that isn't a
9335 parameter pack, it means that we're doing a "simple"
9336 substitution from inside tsubst_pack_expansion. Just
9337 return the local specialization (which will be a single
9338 parm). */
9339 tree spec = retrieve_local_specialization (t);
9340 if (spec
9341 && TREE_CODE (spec) == PARM_DECL
9342 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
9343 RETURN (spec);
9345 /* Expand the TYPE_PACK_EXPANSION that provides the types for
9346 the parameters in this function parameter pack. */
9347 expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
9348 complain, in_decl);
9349 if (TREE_CODE (expanded_types) == TREE_VEC)
9351 len = TREE_VEC_LENGTH (expanded_types);
9353 /* Zero-length parameter packs are boring. Just substitute
9354 into the chain. */
9355 if (len == 0)
9356 RETURN (tsubst (TREE_CHAIN (t), args, complain,
9357 TREE_CHAIN (t)));
9359 else
9361 /* All we did was update the type. Make a note of that. */
9362 type = expanded_types;
9363 expanded_types = NULL_TREE;
9367 /* Loop through all of the parameter's we'll build. When T is
9368 a function parameter pack, LEN is the number of expanded
9369 types in EXPANDED_TYPES; otherwise, LEN is 1. */
9370 r = NULL_TREE;
9371 for (i = 0; i < len; ++i)
9373 prev_r = r;
9374 r = copy_node (t);
9375 if (DECL_TEMPLATE_PARM_P (t))
9376 SET_DECL_TEMPLATE_PARM_P (r);
9378 /* An argument of a function parameter pack is not a parameter
9379 pack. */
9380 FUNCTION_PARAMETER_PACK_P (r) = false;
9382 if (expanded_types)
9383 /* We're on the Ith parameter of the function parameter
9384 pack. */
9386 /* Get the Ith type. */
9387 type = TREE_VEC_ELT (expanded_types, i);
9389 if (DECL_NAME (r))
9390 /* Rename the parameter to include the index. */
9391 DECL_NAME (r) =
9392 make_ith_pack_parameter_name (DECL_NAME (r), i);
9394 else if (!type)
9395 /* We're dealing with a normal parameter. */
9396 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9398 type = type_decays_to (type);
9399 TREE_TYPE (r) = type;
9400 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
9402 if (DECL_INITIAL (r))
9404 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
9405 DECL_INITIAL (r) = TREE_TYPE (r);
9406 else
9407 DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
9408 complain, in_decl);
9411 DECL_CONTEXT (r) = NULL_TREE;
9413 if (!DECL_TEMPLATE_PARM_P (r))
9414 DECL_ARG_TYPE (r) = type_passed_as (type);
9416 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
9417 args, complain, in_decl);
9419 /* Keep track of the first new parameter we
9420 generate. That's what will be returned to the
9421 caller. */
9422 if (!first_r)
9423 first_r = r;
9425 /* Build a proper chain of parameters when substituting
9426 into a function parameter pack. */
9427 if (prev_r)
9428 DECL_CHAIN (prev_r) = r;
9431 if (DECL_CHAIN (t))
9432 DECL_CHAIN (r) = tsubst (DECL_CHAIN (t), args,
9433 complain, DECL_CHAIN (t));
9435 /* FIRST_R contains the start of the chain we've built. */
9436 r = first_r;
9438 break;
9440 case FIELD_DECL:
9442 tree type;
9444 r = copy_decl (t);
9445 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9446 if (type == error_mark_node)
9447 RETURN (error_mark_node);
9448 TREE_TYPE (r) = type;
9449 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
9451 /* DECL_INITIAL gives the number of bits in a bit-field. */
9452 DECL_INITIAL (r)
9453 = tsubst_expr (DECL_INITIAL (t), args,
9454 complain, in_decl,
9455 /*integral_constant_expression_p=*/true);
9456 /* We don't have to set DECL_CONTEXT here; it is set by
9457 finish_member_declaration. */
9458 DECL_CHAIN (r) = NULL_TREE;
9459 if (VOID_TYPE_P (type))
9460 error ("instantiation of %q+D as type %qT", r, type);
9462 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
9463 args, complain, in_decl);
9465 break;
9467 case USING_DECL:
9468 /* We reach here only for member using decls. */
9469 if (DECL_DEPENDENT_P (t))
9471 r = do_class_using_decl
9472 (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
9473 tsubst_copy (DECL_NAME (t), args, complain, in_decl));
9474 if (!r)
9475 r = error_mark_node;
9476 else
9478 TREE_PROTECTED (r) = TREE_PROTECTED (t);
9479 TREE_PRIVATE (r) = TREE_PRIVATE (t);
9482 else
9484 r = copy_node (t);
9485 DECL_CHAIN (r) = NULL_TREE;
9487 break;
9489 case TYPE_DECL:
9490 case VAR_DECL:
9492 tree argvec = NULL_TREE;
9493 tree gen_tmpl = NULL_TREE;
9494 tree spec;
9495 tree tmpl = NULL_TREE;
9496 tree ctx;
9497 tree type = NULL_TREE;
9498 bool local_p;
9500 if (TREE_CODE (t) == TYPE_DECL
9501 && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
9503 /* If this is the canonical decl, we don't have to
9504 mess with instantiations, and often we can't (for
9505 typename, template type parms and such). Note that
9506 TYPE_NAME is not correct for the above test if
9507 we've copied the type for a typedef. */
9508 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9509 if (type == error_mark_node)
9510 RETURN (error_mark_node);
9511 r = TYPE_NAME (type);
9512 break;
9515 /* Check to see if we already have the specialization we
9516 need. */
9517 spec = NULL_TREE;
9518 if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
9520 /* T is a static data member or namespace-scope entity.
9521 We have to substitute into namespace-scope variables
9522 (even though such entities are never templates) because
9523 of cases like:
9525 template <class T> void f() { extern T t; }
9527 where the entity referenced is not known until
9528 instantiation time. */
9529 local_p = false;
9530 ctx = DECL_CONTEXT (t);
9531 if (DECL_CLASS_SCOPE_P (t))
9533 ctx = tsubst_aggr_type (ctx, args,
9534 complain,
9535 in_decl, /*entering_scope=*/1);
9536 /* If CTX is unchanged, then T is in fact the
9537 specialization we want. That situation occurs when
9538 referencing a static data member within in its own
9539 class. We can use pointer equality, rather than
9540 same_type_p, because DECL_CONTEXT is always
9541 canonical. */
9542 if (ctx == DECL_CONTEXT (t))
9543 spec = t;
9546 if (!spec)
9548 tmpl = DECL_TI_TEMPLATE (t);
9549 gen_tmpl = most_general_template (tmpl);
9550 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
9551 hash = hash_tmpl_and_args (gen_tmpl, argvec);
9552 spec = retrieve_specialization (gen_tmpl, argvec, hash);
9555 else
9557 /* A local variable. */
9558 local_p = true;
9559 /* Subsequent calls to pushdecl will fill this in. */
9560 ctx = NULL_TREE;
9561 spec = retrieve_local_specialization (t);
9563 /* If we already have the specialization we need, there is
9564 nothing more to do. */
9565 if (spec)
9567 r = spec;
9568 break;
9571 /* Create a new node for the specialization we need. */
9572 r = copy_decl (t);
9573 if (type == NULL_TREE)
9575 if (is_typedef_decl (t))
9576 type = DECL_ORIGINAL_TYPE (t);
9577 else
9578 type = TREE_TYPE (t);
9579 if (TREE_CODE (t) == VAR_DECL && VAR_HAD_UNKNOWN_BOUND (t))
9580 type = strip_array_domain (type);
9581 type = tsubst (type, args, complain, in_decl);
9583 if (TREE_CODE (r) == VAR_DECL)
9585 /* Even if the original location is out of scope, the
9586 newly substituted one is not. */
9587 DECL_DEAD_FOR_LOCAL (r) = 0;
9588 DECL_INITIALIZED_P (r) = 0;
9589 DECL_TEMPLATE_INSTANTIATED (r) = 0;
9590 if (type == error_mark_node)
9591 RETURN (error_mark_node);
9592 if (TREE_CODE (type) == FUNCTION_TYPE)
9594 /* It may seem that this case cannot occur, since:
9596 typedef void f();
9597 void g() { f x; }
9599 declares a function, not a variable. However:
9601 typedef void f();
9602 template <typename T> void g() { T t; }
9603 template void g<f>();
9605 is an attempt to declare a variable with function
9606 type. */
9607 error ("variable %qD has function type",
9608 /* R is not yet sufficiently initialized, so we
9609 just use its name. */
9610 DECL_NAME (r));
9611 RETURN (error_mark_node);
9613 type = complete_type (type);
9614 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
9615 = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
9616 type = check_var_type (DECL_NAME (r), type);
9618 if (DECL_HAS_VALUE_EXPR_P (t))
9620 tree ve = DECL_VALUE_EXPR (t);
9621 ve = tsubst_expr (ve, args, complain, in_decl,
9622 /*constant_expression_p=*/false);
9623 SET_DECL_VALUE_EXPR (r, ve);
9626 else if (DECL_SELF_REFERENCE_P (t))
9627 SET_DECL_SELF_REFERENCE_P (r);
9628 TREE_TYPE (r) = type;
9629 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
9630 DECL_CONTEXT (r) = ctx;
9631 /* Clear out the mangled name and RTL for the instantiation. */
9632 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
9633 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
9634 SET_DECL_RTL (r, NULL);
9635 /* The initializer must not be expanded until it is required;
9636 see [temp.inst]. */
9637 DECL_INITIAL (r) = NULL_TREE;
9638 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
9639 SET_DECL_RTL (r, NULL);
9640 DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
9641 if (TREE_CODE (r) == VAR_DECL)
9643 /* Possibly limit visibility based on template args. */
9644 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
9645 if (DECL_VISIBILITY_SPECIFIED (t))
9647 DECL_VISIBILITY_SPECIFIED (r) = 0;
9648 DECL_ATTRIBUTES (r)
9649 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
9651 determine_visibility (r);
9654 if (!local_p)
9656 /* A static data member declaration is always marked
9657 external when it is declared in-class, even if an
9658 initializer is present. We mimic the non-template
9659 processing here. */
9660 DECL_EXTERNAL (r) = 1;
9662 register_specialization (r, gen_tmpl, argvec, false, hash);
9663 DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
9664 SET_DECL_IMPLICIT_INSTANTIATION (r);
9666 else if (cp_unevaluated_operand)
9668 /* We're substituting this var in a decltype outside of its
9669 scope, such as for a lambda return type. Don't add it to
9670 local_specializations, do perform auto deduction. */
9671 tree auto_node = type_uses_auto (type);
9672 tree init
9673 = tsubst_expr (DECL_INITIAL (t), args, complain, in_decl,
9674 /*constant_expression_p=*/false);
9676 if (auto_node && init && describable_type (init))
9678 type = do_auto_deduction (type, init, auto_node);
9679 TREE_TYPE (r) = type;
9682 else
9683 register_local_specialization (r, t);
9685 DECL_CHAIN (r) = NULL_TREE;
9687 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
9688 /*flags=*/0,
9689 args, complain, in_decl);
9691 /* Preserve a typedef that names a type. */
9692 if (is_typedef_decl (r))
9694 DECL_ORIGINAL_TYPE (r) = NULL_TREE;
9695 set_underlying_type (r);
9698 layout_decl (r, 0);
9700 break;
9702 default:
9703 gcc_unreachable ();
9705 #undef RETURN
9707 out:
9708 /* Restore the file and line information. */
9709 input_location = saved_loc;
9711 return r;
9714 /* Substitute into the ARG_TYPES of a function type. */
9716 static tree
9717 tsubst_arg_types (tree arg_types,
9718 tree args,
9719 tsubst_flags_t complain,
9720 tree in_decl)
9722 tree remaining_arg_types;
9723 tree type = NULL_TREE;
9724 int i = 1;
9725 tree expanded_args = NULL_TREE;
9726 tree default_arg;
9728 if (!arg_types || arg_types == void_list_node)
9729 return arg_types;
9731 remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
9732 args, complain, in_decl);
9733 if (remaining_arg_types == error_mark_node)
9734 return error_mark_node;
9736 if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
9738 /* For a pack expansion, perform substitution on the
9739 entire expression. Later on, we'll handle the arguments
9740 one-by-one. */
9741 expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
9742 args, complain, in_decl);
9744 if (TREE_CODE (expanded_args) == TREE_VEC)
9745 /* So that we'll spin through the parameters, one by one. */
9746 i = TREE_VEC_LENGTH (expanded_args);
9747 else
9749 /* We only partially substituted into the parameter
9750 pack. Our type is TYPE_PACK_EXPANSION. */
9751 type = expanded_args;
9752 expanded_args = NULL_TREE;
9756 while (i > 0) {
9757 --i;
9759 if (expanded_args)
9760 type = TREE_VEC_ELT (expanded_args, i);
9761 else if (!type)
9762 type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
9764 if (type == error_mark_node)
9765 return error_mark_node;
9766 if (VOID_TYPE_P (type))
9768 if (complain & tf_error)
9770 error ("invalid parameter type %qT", type);
9771 if (in_decl)
9772 error ("in declaration %q+D", in_decl);
9774 return error_mark_node;
9777 /* Do array-to-pointer, function-to-pointer conversion, and ignore
9778 top-level qualifiers as required. */
9779 type = TYPE_MAIN_VARIANT (type_decays_to (type));
9781 /* We do not substitute into default arguments here. The standard
9782 mandates that they be instantiated only when needed, which is
9783 done in build_over_call. */
9784 default_arg = TREE_PURPOSE (arg_types);
9786 if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
9788 /* We've instantiated a template before its default arguments
9789 have been parsed. This can happen for a nested template
9790 class, and is not an error unless we require the default
9791 argument in a call of this function. */
9792 remaining_arg_types =
9793 tree_cons (default_arg, type, remaining_arg_types);
9794 VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg),
9795 remaining_arg_types);
9797 else
9798 remaining_arg_types =
9799 hash_tree_cons (default_arg, type, remaining_arg_types);
9802 return remaining_arg_types;
9805 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
9806 *not* handle the exception-specification for FNTYPE, because the
9807 initial substitution of explicitly provided template parameters
9808 during argument deduction forbids substitution into the
9809 exception-specification:
9811 [temp.deduct]
9813 All references in the function type of the function template to the
9814 corresponding template parameters are replaced by the specified tem-
9815 plate argument values. If a substitution in a template parameter or
9816 in the function type of the function template results in an invalid
9817 type, type deduction fails. [Note: The equivalent substitution in
9818 exception specifications is done only when the function is instanti-
9819 ated, at which point a program is ill-formed if the substitution
9820 results in an invalid type.] */
9822 static tree
9823 tsubst_function_type (tree t,
9824 tree args,
9825 tsubst_flags_t complain,
9826 tree in_decl)
9828 tree return_type;
9829 tree arg_types;
9830 tree fntype;
9832 /* The TYPE_CONTEXT is not used for function/method types. */
9833 gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
9835 /* Substitute the return type. */
9836 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9837 if (return_type == error_mark_node)
9838 return error_mark_node;
9839 /* The standard does not presently indicate that creation of a
9840 function type with an invalid return type is a deduction failure.
9841 However, that is clearly analogous to creating an array of "void"
9842 or a reference to a reference. This is core issue #486. */
9843 if (TREE_CODE (return_type) == ARRAY_TYPE
9844 || TREE_CODE (return_type) == FUNCTION_TYPE)
9846 if (complain & tf_error)
9848 if (TREE_CODE (return_type) == ARRAY_TYPE)
9849 error ("function returning an array");
9850 else
9851 error ("function returning a function");
9853 return error_mark_node;
9856 /* Substitute the argument types. */
9857 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
9858 complain, in_decl);
9859 if (arg_types == error_mark_node)
9860 return error_mark_node;
9862 /* Construct a new type node and return it. */
9863 if (TREE_CODE (t) == FUNCTION_TYPE)
9865 fntype = build_function_type (return_type, arg_types);
9866 fntype = apply_memfn_quals (fntype, type_memfn_quals (t));
9868 else
9870 tree r = TREE_TYPE (TREE_VALUE (arg_types));
9871 if (! MAYBE_CLASS_TYPE_P (r))
9873 /* [temp.deduct]
9875 Type deduction may fail for any of the following
9876 reasons:
9878 -- Attempting to create "pointer to member of T" when T
9879 is not a class type. */
9880 if (complain & tf_error)
9881 error ("creating pointer to member function of non-class type %qT",
9883 return error_mark_node;
9886 fntype = build_method_type_directly (r, return_type,
9887 TREE_CHAIN (arg_types));
9889 fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
9891 return fntype;
9894 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE. Substitute the template
9895 ARGS into that specification, and return the substituted
9896 specification. If there is no specification, return NULL_TREE. */
9898 static tree
9899 tsubst_exception_specification (tree fntype,
9900 tree args,
9901 tsubst_flags_t complain,
9902 tree in_decl)
9904 tree specs;
9905 tree new_specs;
9907 specs = TYPE_RAISES_EXCEPTIONS (fntype);
9908 new_specs = NULL_TREE;
9909 if (specs && TREE_PURPOSE (specs))
9911 /* A noexcept-specifier. */
9912 new_specs = tsubst_copy_and_build
9913 (TREE_PURPOSE (specs), args, complain, in_decl, /*function_p=*/false,
9914 /*integral_constant_expression_p=*/true);
9915 new_specs = build_noexcept_spec (new_specs, complain);
9917 else if (specs)
9919 if (! TREE_VALUE (specs))
9920 new_specs = specs;
9921 else
9922 while (specs)
9924 tree spec;
9925 int i, len = 1;
9926 tree expanded_specs = NULL_TREE;
9928 if (PACK_EXPANSION_P (TREE_VALUE (specs)))
9930 /* Expand the pack expansion type. */
9931 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
9932 args, complain,
9933 in_decl);
9935 if (expanded_specs == error_mark_node)
9936 return error_mark_node;
9937 else if (TREE_CODE (expanded_specs) == TREE_VEC)
9938 len = TREE_VEC_LENGTH (expanded_specs);
9939 else
9941 /* We're substituting into a member template, so
9942 we got a TYPE_PACK_EXPANSION back. Add that
9943 expansion and move on. */
9944 gcc_assert (TREE_CODE (expanded_specs)
9945 == TYPE_PACK_EXPANSION);
9946 new_specs = add_exception_specifier (new_specs,
9947 expanded_specs,
9948 complain);
9949 specs = TREE_CHAIN (specs);
9950 continue;
9954 for (i = 0; i < len; ++i)
9956 if (expanded_specs)
9957 spec = TREE_VEC_ELT (expanded_specs, i);
9958 else
9959 spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
9960 if (spec == error_mark_node)
9961 return spec;
9962 new_specs = add_exception_specifier (new_specs, spec,
9963 complain);
9966 specs = TREE_CHAIN (specs);
9969 return new_specs;
9972 /* Take the tree structure T and replace template parameters used
9973 therein with the argument vector ARGS. IN_DECL is an associated
9974 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
9975 Issue error and warning messages under control of COMPLAIN. Note
9976 that we must be relatively non-tolerant of extensions here, in
9977 order to preserve conformance; if we allow substitutions that
9978 should not be allowed, we may allow argument deductions that should
9979 not succeed, and therefore report ambiguous overload situations
9980 where there are none. In theory, we could allow the substitution,
9981 but indicate that it should have failed, and allow our caller to
9982 make sure that the right thing happens, but we don't try to do this
9983 yet.
9985 This function is used for dealing with types, decls and the like;
9986 for expressions, use tsubst_expr or tsubst_copy. */
9988 tree
9989 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9991 enum tree_code code;
9992 tree type, r;
9994 if (t == NULL_TREE || t == error_mark_node
9995 || t == integer_type_node
9996 || t == void_type_node
9997 || t == char_type_node
9998 || t == unknown_type_node
9999 || TREE_CODE (t) == NAMESPACE_DECL)
10000 return t;
10002 if (DECL_P (t))
10003 return tsubst_decl (t, args, complain);
10005 if (args == NULL_TREE)
10006 return t;
10008 code = TREE_CODE (t);
10010 if (code == IDENTIFIER_NODE)
10011 type = IDENTIFIER_TYPE_VALUE (t);
10012 else
10013 type = TREE_TYPE (t);
10015 gcc_assert (type != unknown_type_node);
10017 /* Reuse typedefs. We need to do this to handle dependent attributes,
10018 such as attribute aligned. */
10019 if (TYPE_P (t)
10020 && TYPE_NAME (t)
10021 && TYPE_NAME (t) != TYPE_MAIN_DECL (t))
10023 tree decl = TYPE_NAME (t);
10025 if (DECL_CLASS_SCOPE_P (decl)
10026 && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
10027 && uses_template_parms (DECL_CONTEXT (decl)))
10029 tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
10030 tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
10031 r = retrieve_specialization (tmpl, gen_args, 0);
10033 else if (DECL_FUNCTION_SCOPE_P (decl)
10034 && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
10035 && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
10036 r = retrieve_local_specialization (decl);
10037 else
10038 /* The typedef is from a non-template context. */
10039 return t;
10041 if (r)
10043 r = TREE_TYPE (r);
10044 r = cp_build_qualified_type_real
10045 (r, cp_type_quals (t) | cp_type_quals (r),
10046 complain | tf_ignore_bad_quals);
10047 return r;
10049 /* Else we must be instantiating the typedef, so fall through. */
10052 if (type
10053 && code != TYPENAME_TYPE
10054 && code != TEMPLATE_TYPE_PARM
10055 && code != IDENTIFIER_NODE
10056 && code != FUNCTION_TYPE
10057 && code != METHOD_TYPE)
10058 type = tsubst (type, args, complain, in_decl);
10059 if (type == error_mark_node)
10060 return error_mark_node;
10062 switch (code)
10064 case RECORD_TYPE:
10065 case UNION_TYPE:
10066 case ENUMERAL_TYPE:
10067 return tsubst_aggr_type (t, args, complain, in_decl,
10068 /*entering_scope=*/0);
10070 case ERROR_MARK:
10071 case IDENTIFIER_NODE:
10072 case VOID_TYPE:
10073 case REAL_TYPE:
10074 case COMPLEX_TYPE:
10075 case VECTOR_TYPE:
10076 case BOOLEAN_TYPE:
10077 case INTEGER_CST:
10078 case REAL_CST:
10079 case STRING_CST:
10080 return t;
10082 case INTEGER_TYPE:
10083 if (t == integer_type_node)
10084 return t;
10086 if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
10087 && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
10088 return t;
10091 tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
10093 max = tsubst_expr (omax, args, complain, in_decl,
10094 /*integral_constant_expression_p=*/false);
10096 /* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
10097 needed. */
10098 if (TREE_CODE (max) == NOP_EXPR
10099 && TREE_SIDE_EFFECTS (omax)
10100 && !TREE_TYPE (max))
10101 TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
10103 max = fold_decl_constant_value (max);
10105 /* If we're in a partial instantiation, preserve the magic NOP_EXPR
10106 with TREE_SIDE_EFFECTS that indicates this is not an integral
10107 constant expression. */
10108 if (processing_template_decl
10109 && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
10111 gcc_assert (TREE_CODE (max) == NOP_EXPR);
10112 TREE_SIDE_EFFECTS (max) = 1;
10115 if (TREE_CODE (max) != INTEGER_CST
10116 && !at_function_scope_p ()
10117 && !TREE_SIDE_EFFECTS (max)
10118 && !value_dependent_expression_p (max))
10120 if (complain & tf_error)
10121 error ("array bound is not an integer constant");
10122 return error_mark_node;
10125 /* [temp.deduct]
10127 Type deduction may fail for any of the following
10128 reasons:
10130 Attempting to create an array with a size that is
10131 zero or negative. */
10132 if (integer_zerop (max) && !(complain & tf_error))
10133 /* We must fail if performing argument deduction (as
10134 indicated by the state of complain), so that
10135 another substitution can be found. */
10136 return error_mark_node;
10137 else if (TREE_CODE (max) == INTEGER_CST
10138 && INT_CST_LT (max, integer_zero_node))
10140 if (complain & tf_error)
10141 error ("creating array with negative size (%qE)", max);
10143 return error_mark_node;
10146 return compute_array_index_type (NULL_TREE, max);
10149 case TEMPLATE_TYPE_PARM:
10150 case TEMPLATE_TEMPLATE_PARM:
10151 case BOUND_TEMPLATE_TEMPLATE_PARM:
10152 case TEMPLATE_PARM_INDEX:
10154 int idx;
10155 int level;
10156 int levels;
10157 tree arg = NULL_TREE;
10159 r = NULL_TREE;
10161 gcc_assert (TREE_VEC_LENGTH (args) > 0);
10162 template_parm_level_and_index (t, &level, &idx);
10164 levels = TMPL_ARGS_DEPTH (args);
10165 if (level <= levels)
10167 arg = TMPL_ARG (args, level, idx);
10169 if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
10170 /* See through ARGUMENT_PACK_SELECT arguments. */
10171 arg = ARGUMENT_PACK_SELECT_ARG (arg);
10174 if (arg == error_mark_node)
10175 return error_mark_node;
10176 else if (arg != NULL_TREE)
10178 if (ARGUMENT_PACK_P (arg))
10179 /* If ARG is an argument pack, we don't actually want to
10180 perform a substitution here, because substitutions
10181 for argument packs are only done
10182 element-by-element. We can get to this point when
10183 substituting the type of a non-type template
10184 parameter pack, when that type actually contains
10185 template parameter packs from an outer template, e.g.,
10187 template<typename... Types> struct A {
10188 template<Types... Values> struct B { };
10189 }; */
10190 return t;
10192 if (code == TEMPLATE_TYPE_PARM)
10194 int quals;
10195 gcc_assert (TYPE_P (arg));
10197 quals = cp_type_quals (arg) | cp_type_quals (t);
10199 return cp_build_qualified_type_real
10200 (arg, quals, complain | tf_ignore_bad_quals);
10202 else if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
10204 /* We are processing a type constructed from a
10205 template template parameter. */
10206 tree argvec = tsubst (TYPE_TI_ARGS (t),
10207 args, complain, in_decl);
10208 if (argvec == error_mark_node)
10209 return error_mark_node;
10211 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
10212 are resolving nested-types in the signature of a
10213 member function templates. Otherwise ARG is a
10214 TEMPLATE_DECL and is the real template to be
10215 instantiated. */
10216 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
10217 arg = TYPE_NAME (arg);
10219 r = lookup_template_class (arg,
10220 argvec, in_decl,
10221 DECL_CONTEXT (arg),
10222 /*entering_scope=*/0,
10223 complain);
10224 return cp_build_qualified_type_real
10225 (r, cp_type_quals (t), complain);
10227 else
10228 /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX. */
10229 return unshare_expr (arg);
10232 if (level == 1)
10233 /* This can happen during the attempted tsubst'ing in
10234 unify. This means that we don't yet have any information
10235 about the template parameter in question. */
10236 return t;
10238 /* If we get here, we must have been looking at a parm for a
10239 more deeply nested template. Make a new version of this
10240 template parameter, but with a lower level. */
10241 switch (code)
10243 case TEMPLATE_TYPE_PARM:
10244 case TEMPLATE_TEMPLATE_PARM:
10245 case BOUND_TEMPLATE_TEMPLATE_PARM:
10246 if (cp_type_quals (t))
10248 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
10249 r = cp_build_qualified_type_real
10250 (r, cp_type_quals (t),
10251 complain | (code == TEMPLATE_TYPE_PARM
10252 ? tf_ignore_bad_quals : 0));
10254 else
10256 r = copy_type (t);
10257 TEMPLATE_TYPE_PARM_INDEX (r)
10258 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
10259 r, levels, args, complain);
10260 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
10261 TYPE_MAIN_VARIANT (r) = r;
10262 TYPE_POINTER_TO (r) = NULL_TREE;
10263 TYPE_REFERENCE_TO (r) = NULL_TREE;
10265 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
10266 /* We have reduced the level of the template
10267 template parameter, but not the levels of its
10268 template parameters, so canonical_type_parameter
10269 will not be able to find the canonical template
10270 template parameter for this level. Thus, we
10271 require structural equality checking to compare
10272 TEMPLATE_TEMPLATE_PARMs. */
10273 SET_TYPE_STRUCTURAL_EQUALITY (r);
10274 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
10275 SET_TYPE_STRUCTURAL_EQUALITY (r);
10276 else
10277 TYPE_CANONICAL (r) = canonical_type_parameter (r);
10279 if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
10281 tree argvec = tsubst (TYPE_TI_ARGS (t), args,
10282 complain, in_decl);
10283 if (argvec == error_mark_node)
10284 return error_mark_node;
10286 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
10287 = build_template_info (TYPE_TI_TEMPLATE (t), argvec);
10290 break;
10292 case TEMPLATE_PARM_INDEX:
10293 r = reduce_template_parm_level (t, type, levels, args, complain);
10294 break;
10296 default:
10297 gcc_unreachable ();
10300 return r;
10303 case TREE_LIST:
10305 tree purpose, value, chain;
10307 if (t == void_list_node)
10308 return t;
10310 purpose = TREE_PURPOSE (t);
10311 if (purpose)
10313 purpose = tsubst (purpose, args, complain, in_decl);
10314 if (purpose == error_mark_node)
10315 return error_mark_node;
10317 value = TREE_VALUE (t);
10318 if (value)
10320 value = tsubst (value, args, complain, in_decl);
10321 if (value == error_mark_node)
10322 return error_mark_node;
10324 chain = TREE_CHAIN (t);
10325 if (chain && chain != void_type_node)
10327 chain = tsubst (chain, args, complain, in_decl);
10328 if (chain == error_mark_node)
10329 return error_mark_node;
10331 if (purpose == TREE_PURPOSE (t)
10332 && value == TREE_VALUE (t)
10333 && chain == TREE_CHAIN (t))
10334 return t;
10335 return hash_tree_cons (purpose, value, chain);
10338 case TREE_BINFO:
10339 /* We should never be tsubsting a binfo. */
10340 gcc_unreachable ();
10342 case TREE_VEC:
10343 /* A vector of template arguments. */
10344 gcc_assert (!type);
10345 return tsubst_template_args (t, args, complain, in_decl);
10347 case POINTER_TYPE:
10348 case REFERENCE_TYPE:
10350 if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
10351 return t;
10353 /* [temp.deduct]
10355 Type deduction may fail for any of the following
10356 reasons:
10358 -- Attempting to create a pointer to reference type.
10359 -- Attempting to create a reference to a reference type or
10360 a reference to void.
10362 Core issue 106 says that creating a reference to a reference
10363 during instantiation is no longer a cause for failure. We
10364 only enforce this check in strict C++98 mode. */
10365 if ((TREE_CODE (type) == REFERENCE_TYPE
10366 && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
10367 || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
10369 static location_t last_loc;
10371 /* We keep track of the last time we issued this error
10372 message to avoid spewing a ton of messages during a
10373 single bad template instantiation. */
10374 if (complain & tf_error
10375 && last_loc != input_location)
10377 if (TREE_CODE (type) == VOID_TYPE)
10378 error ("forming reference to void");
10379 else if (code == POINTER_TYPE)
10380 error ("forming pointer to reference type %qT", type);
10381 else
10382 error ("forming reference to reference type %qT", type);
10383 last_loc = input_location;
10386 return error_mark_node;
10388 else if (code == POINTER_TYPE)
10390 r = build_pointer_type (type);
10391 if (TREE_CODE (type) == METHOD_TYPE)
10392 r = build_ptrmemfunc_type (r);
10394 else if (TREE_CODE (type) == REFERENCE_TYPE)
10395 /* In C++0x, during template argument substitution, when there is an
10396 attempt to create a reference to a reference type, reference
10397 collapsing is applied as described in [14.3.1/4 temp.arg.type]:
10399 "If a template-argument for a template-parameter T names a type
10400 that is a reference to a type A, an attempt to create the type
10401 'lvalue reference to cv T' creates the type 'lvalue reference to
10402 A,' while an attempt to create the type type rvalue reference to
10403 cv T' creates the type T"
10405 r = cp_build_reference_type
10406 (TREE_TYPE (type),
10407 TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
10408 else
10409 r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
10410 r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
10412 if (r != error_mark_node)
10413 /* Will this ever be needed for TYPE_..._TO values? */
10414 layout_type (r);
10416 return r;
10418 case OFFSET_TYPE:
10420 r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
10421 if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
10423 /* [temp.deduct]
10425 Type deduction may fail for any of the following
10426 reasons:
10428 -- Attempting to create "pointer to member of T" when T
10429 is not a class type. */
10430 if (complain & tf_error)
10431 error ("creating pointer to member of non-class type %qT", r);
10432 return error_mark_node;
10434 if (TREE_CODE (type) == REFERENCE_TYPE)
10436 if (complain & tf_error)
10437 error ("creating pointer to member reference type %qT", type);
10438 return error_mark_node;
10440 if (TREE_CODE (type) == VOID_TYPE)
10442 if (complain & tf_error)
10443 error ("creating pointer to member of type void");
10444 return error_mark_node;
10446 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
10447 if (TREE_CODE (type) == FUNCTION_TYPE)
10449 /* The type of the implicit object parameter gets its
10450 cv-qualifiers from the FUNCTION_TYPE. */
10451 tree memptr;
10452 tree method_type = build_memfn_type (type, r, type_memfn_quals (type));
10453 memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
10454 return cp_build_qualified_type_real (memptr, cp_type_quals (t),
10455 complain);
10457 else
10458 return cp_build_qualified_type_real (build_ptrmem_type (r, type),
10459 cp_type_quals (t),
10460 complain);
10462 case FUNCTION_TYPE:
10463 case METHOD_TYPE:
10465 tree fntype;
10466 tree specs;
10467 fntype = tsubst_function_type (t, args, complain, in_decl);
10468 if (fntype == error_mark_node)
10469 return error_mark_node;
10471 /* Substitute the exception specification. */
10472 specs = tsubst_exception_specification (t, args, complain,
10473 in_decl);
10474 if (specs == error_mark_node)
10475 return error_mark_node;
10476 if (specs)
10477 fntype = build_exception_variant (fntype, specs);
10478 return fntype;
10480 case ARRAY_TYPE:
10482 tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
10483 if (domain == error_mark_node)
10484 return error_mark_node;
10486 /* As an optimization, we avoid regenerating the array type if
10487 it will obviously be the same as T. */
10488 if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
10489 return t;
10491 /* These checks should match the ones in grokdeclarator.
10493 [temp.deduct]
10495 The deduction may fail for any of the following reasons:
10497 -- Attempting to create an array with an element type that
10498 is void, a function type, or a reference type, or [DR337]
10499 an abstract class type. */
10500 if (TREE_CODE (type) == VOID_TYPE
10501 || TREE_CODE (type) == FUNCTION_TYPE
10502 || TREE_CODE (type) == REFERENCE_TYPE)
10504 if (complain & tf_error)
10505 error ("creating array of %qT", type);
10506 return error_mark_node;
10508 if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
10510 if (complain & tf_error)
10511 error ("creating array of %qT, which is an abstract class type",
10512 type);
10513 return error_mark_node;
10516 r = build_cplus_array_type (type, domain);
10518 if (TYPE_USER_ALIGN (t))
10520 TYPE_ALIGN (r) = TYPE_ALIGN (t);
10521 TYPE_USER_ALIGN (r) = 1;
10524 return r;
10527 case PLUS_EXPR:
10528 case MINUS_EXPR:
10530 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
10531 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
10533 if (e1 == error_mark_node || e2 == error_mark_node)
10534 return error_mark_node;
10536 return fold_build2_loc (input_location,
10537 code, TREE_TYPE (t), e1, e2);
10540 case NEGATE_EXPR:
10541 case NOP_EXPR:
10543 tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
10544 if (e == error_mark_node)
10545 return error_mark_node;
10547 return fold_build1_loc (input_location, code, TREE_TYPE (t), e);
10550 case TYPENAME_TYPE:
10552 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
10553 in_decl, /*entering_scope=*/1);
10554 tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
10555 complain, in_decl);
10557 if (ctx == error_mark_node || f == error_mark_node)
10558 return error_mark_node;
10560 if (!MAYBE_CLASS_TYPE_P (ctx))
10562 if (complain & tf_error)
10563 error ("%qT is not a class, struct, or union type", ctx);
10564 return error_mark_node;
10566 else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
10568 /* Normally, make_typename_type does not require that the CTX
10569 have complete type in order to allow things like:
10571 template <class T> struct S { typename S<T>::X Y; };
10573 But, such constructs have already been resolved by this
10574 point, so here CTX really should have complete type, unless
10575 it's a partial instantiation. */
10576 if (!(complain & tf_no_class_instantiations))
10577 ctx = complete_type (ctx);
10578 if (!COMPLETE_TYPE_P (ctx))
10580 if (complain & tf_error)
10581 cxx_incomplete_type_error (NULL_TREE, ctx);
10582 return error_mark_node;
10586 f = make_typename_type (ctx, f, typename_type,
10587 (complain & tf_error) | tf_keep_type_decl);
10588 if (f == error_mark_node)
10589 return f;
10590 if (TREE_CODE (f) == TYPE_DECL)
10592 complain |= tf_ignore_bad_quals;
10593 f = TREE_TYPE (f);
10596 if (TREE_CODE (f) != TYPENAME_TYPE)
10598 if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
10599 error ("%qT resolves to %qT, which is not an enumeration type",
10600 t, f);
10601 else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
10602 error ("%qT resolves to %qT, which is is not a class type",
10603 t, f);
10606 return cp_build_qualified_type_real
10607 (f, cp_type_quals (f) | cp_type_quals (t), complain);
10610 case UNBOUND_CLASS_TEMPLATE:
10612 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
10613 in_decl, /*entering_scope=*/1);
10614 tree name = TYPE_IDENTIFIER (t);
10615 tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
10617 if (ctx == error_mark_node || name == error_mark_node)
10618 return error_mark_node;
10620 if (parm_list)
10621 parm_list = tsubst_template_parms (parm_list, args, complain);
10622 return make_unbound_class_template (ctx, name, parm_list, complain);
10625 case INDIRECT_REF:
10626 case ADDR_EXPR:
10627 case CALL_EXPR:
10628 gcc_unreachable ();
10630 case ARRAY_REF:
10632 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
10633 tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl,
10634 /*integral_constant_expression_p=*/false);
10635 if (e1 == error_mark_node || e2 == error_mark_node)
10636 return error_mark_node;
10638 return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
10641 case SCOPE_REF:
10643 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
10644 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
10645 if (e1 == error_mark_node || e2 == error_mark_node)
10646 return error_mark_node;
10648 return build_qualified_name (/*type=*/NULL_TREE,
10649 e1, e2, QUALIFIED_NAME_IS_TEMPLATE (t));
10652 case TYPEOF_TYPE:
10654 tree type;
10656 ++cp_unevaluated_operand;
10657 ++c_inhibit_evaluation_warnings;
10659 type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
10660 complain, in_decl,
10661 /*integral_constant_expression_p=*/false);
10663 --cp_unevaluated_operand;
10664 --c_inhibit_evaluation_warnings;
10666 type = finish_typeof (type);
10667 return cp_build_qualified_type_real (type,
10668 cp_type_quals (t)
10669 | cp_type_quals (type),
10670 complain);
10673 case DECLTYPE_TYPE:
10675 tree type;
10677 ++cp_unevaluated_operand;
10678 ++c_inhibit_evaluation_warnings;
10680 type = tsubst_expr (DECLTYPE_TYPE_EXPR (t), args,
10681 complain, in_decl,
10682 /*integral_constant_expression_p=*/false);
10684 --cp_unevaluated_operand;
10685 --c_inhibit_evaluation_warnings;
10687 if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
10688 type = lambda_capture_field_type (type);
10689 else if (DECLTYPE_FOR_LAMBDA_RETURN (t))
10690 type = lambda_return_type (type);
10691 else
10692 type = finish_decltype_type
10693 (type, DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t));
10694 return cp_build_qualified_type_real (type,
10695 cp_type_quals (t)
10696 | cp_type_quals (type),
10697 complain);
10700 case TYPE_ARGUMENT_PACK:
10701 case NONTYPE_ARGUMENT_PACK:
10703 tree r = TYPE_P (t) ? cxx_make_type (code) : make_node (code);
10704 tree packed_out =
10705 tsubst_template_args (ARGUMENT_PACK_ARGS (t),
10706 args,
10707 complain,
10708 in_decl);
10709 SET_ARGUMENT_PACK_ARGS (r, packed_out);
10711 /* For template nontype argument packs, also substitute into
10712 the type. */
10713 if (code == NONTYPE_ARGUMENT_PACK)
10714 TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
10716 return r;
10718 break;
10720 default:
10721 sorry ("use of %qs in template", tree_code_name [(int) code]);
10722 return error_mark_node;
10726 /* Like tsubst_expr for a BASELINK. OBJECT_TYPE, if non-NULL, is the
10727 type of the expression on the left-hand side of the "." or "->"
10728 operator. */
10730 static tree
10731 tsubst_baselink (tree baselink, tree object_type,
10732 tree args, tsubst_flags_t complain, tree in_decl)
10734 tree name;
10735 tree qualifying_scope;
10736 tree fns;
10737 tree optype;
10738 tree template_args = 0;
10739 bool template_id_p = false;
10741 /* A baselink indicates a function from a base class. Both the
10742 BASELINK_ACCESS_BINFO and the base class referenced may
10743 indicate bases of the template class, rather than the
10744 instantiated class. In addition, lookups that were not
10745 ambiguous before may be ambiguous now. Therefore, we perform
10746 the lookup again. */
10747 qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
10748 qualifying_scope = tsubst (qualifying_scope, args,
10749 complain, in_decl);
10750 fns = BASELINK_FUNCTIONS (baselink);
10751 optype = tsubst (BASELINK_OPTYPE (baselink), args, complain, in_decl);
10752 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
10754 template_id_p = true;
10755 template_args = TREE_OPERAND (fns, 1);
10756 fns = TREE_OPERAND (fns, 0);
10757 if (template_args)
10758 template_args = tsubst_template_args (template_args, args,
10759 complain, in_decl);
10761 name = DECL_NAME (get_first_fn (fns));
10762 if (IDENTIFIER_TYPENAME_P (name))
10763 name = mangle_conv_op_name_for_type (optype);
10764 baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
10765 if (!baselink)
10766 return error_mark_node;
10768 /* If lookup found a single function, mark it as used at this
10769 point. (If it lookup found multiple functions the one selected
10770 later by overload resolution will be marked as used at that
10771 point.) */
10772 if (BASELINK_P (baselink))
10773 fns = BASELINK_FUNCTIONS (baselink);
10774 if (!template_id_p && !really_overloaded_fn (fns))
10775 mark_used (OVL_CURRENT (fns));
10777 /* Add back the template arguments, if present. */
10778 if (BASELINK_P (baselink) && template_id_p)
10779 BASELINK_FUNCTIONS (baselink)
10780 = build_nt (TEMPLATE_ID_EXPR,
10781 BASELINK_FUNCTIONS (baselink),
10782 template_args);
10783 /* Update the conversion operator type. */
10784 BASELINK_OPTYPE (baselink) = optype;
10786 if (!object_type)
10787 object_type = current_class_type;
10788 return adjust_result_of_qualified_name_lookup (baselink,
10789 qualifying_scope,
10790 object_type);
10793 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID. DONE is
10794 true if the qualified-id will be a postfix-expression in-and-of
10795 itself; false if more of the postfix-expression follows the
10796 QUALIFIED_ID. ADDRESS_P is true if the qualified-id is the operand
10797 of "&". */
10799 static tree
10800 tsubst_qualified_id (tree qualified_id, tree args,
10801 tsubst_flags_t complain, tree in_decl,
10802 bool done, bool address_p)
10804 tree expr;
10805 tree scope;
10806 tree name;
10807 bool is_template;
10808 tree template_args;
10810 gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
10812 /* Figure out what name to look up. */
10813 name = TREE_OPERAND (qualified_id, 1);
10814 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
10816 is_template = true;
10817 template_args = TREE_OPERAND (name, 1);
10818 if (template_args)
10819 template_args = tsubst_template_args (template_args, args,
10820 complain, in_decl);
10821 name = TREE_OPERAND (name, 0);
10823 else
10825 is_template = false;
10826 template_args = NULL_TREE;
10829 /* Substitute into the qualifying scope. When there are no ARGS, we
10830 are just trying to simplify a non-dependent expression. In that
10831 case the qualifying scope may be dependent, and, in any case,
10832 substituting will not help. */
10833 scope = TREE_OPERAND (qualified_id, 0);
10834 if (args)
10836 scope = tsubst (scope, args, complain, in_decl);
10837 expr = tsubst_copy (name, args, complain, in_decl);
10839 else
10840 expr = name;
10842 if (dependent_scope_p (scope))
10843 return build_qualified_name (NULL_TREE, scope, expr,
10844 QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
10846 if (!BASELINK_P (name) && !DECL_P (expr))
10848 if (TREE_CODE (expr) == BIT_NOT_EXPR)
10850 /* A BIT_NOT_EXPR is used to represent a destructor. */
10851 if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
10853 error ("qualifying type %qT does not match destructor name ~%qT",
10854 scope, TREE_OPERAND (expr, 0));
10855 expr = error_mark_node;
10857 else
10858 expr = lookup_qualified_name (scope, complete_dtor_identifier,
10859 /*is_type_p=*/0, false);
10861 else
10862 expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
10863 if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
10864 ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
10866 if (complain & tf_error)
10868 error ("dependent-name %qE is parsed as a non-type, but "
10869 "instantiation yields a type", qualified_id);
10870 inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
10872 return error_mark_node;
10876 if (DECL_P (expr))
10878 check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
10879 scope);
10880 /* Remember that there was a reference to this entity. */
10881 mark_used (expr);
10884 if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
10886 if (complain & tf_error)
10887 qualified_name_lookup_error (scope,
10888 TREE_OPERAND (qualified_id, 1),
10889 expr, input_location);
10890 return error_mark_node;
10893 if (is_template)
10894 expr = lookup_template_function (expr, template_args);
10896 if (expr == error_mark_node && complain & tf_error)
10897 qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
10898 expr, input_location);
10899 else if (TYPE_P (scope))
10901 expr = (adjust_result_of_qualified_name_lookup
10902 (expr, scope, current_class_type));
10903 expr = (finish_qualified_id_expr
10904 (scope, expr, done, address_p,
10905 QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
10906 /*template_arg_p=*/false));
10909 /* Expressions do not generally have reference type. */
10910 if (TREE_CODE (expr) != SCOPE_REF
10911 /* However, if we're about to form a pointer-to-member, we just
10912 want the referenced member referenced. */
10913 && TREE_CODE (expr) != OFFSET_REF)
10914 expr = convert_from_reference (expr);
10916 return expr;
10919 /* Like tsubst, but deals with expressions. This function just replaces
10920 template parms; to finish processing the resultant expression, use
10921 tsubst_expr. */
10923 static tree
10924 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
10926 enum tree_code code;
10927 tree r;
10929 if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
10930 return t;
10932 code = TREE_CODE (t);
10934 switch (code)
10936 case PARM_DECL:
10937 r = retrieve_local_specialization (t);
10939 if (r == NULL)
10941 tree c;
10942 /* This can happen for a parameter name used later in a function
10943 declaration (such as in a late-specified return type). Just
10944 make a dummy decl, since it's only used for its type. */
10945 gcc_assert (cp_unevaluated_operand != 0);
10946 /* We copy T because want to tsubst the PARM_DECL only,
10947 not the following PARM_DECLs that are chained to T. */
10948 c = copy_node (t);
10949 r = tsubst_decl (c, args, complain);
10950 /* Give it the template pattern as its context; its true context
10951 hasn't been instantiated yet and this is good enough for
10952 mangling. */
10953 DECL_CONTEXT (r) = DECL_CONTEXT (t);
10956 if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
10957 r = ARGUMENT_PACK_SELECT_ARG (r);
10958 mark_used (r);
10959 return r;
10961 case CONST_DECL:
10963 tree enum_type;
10964 tree v;
10966 if (DECL_TEMPLATE_PARM_P (t))
10967 return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
10968 /* There is no need to substitute into namespace-scope
10969 enumerators. */
10970 if (DECL_NAMESPACE_SCOPE_P (t))
10971 return t;
10972 /* If ARGS is NULL, then T is known to be non-dependent. */
10973 if (args == NULL_TREE)
10974 return integral_constant_value (t);
10976 /* Unfortunately, we cannot just call lookup_name here.
10977 Consider:
10979 template <int I> int f() {
10980 enum E { a = I };
10981 struct S { void g() { E e = a; } };
10984 When we instantiate f<7>::S::g(), say, lookup_name is not
10985 clever enough to find f<7>::a. */
10986 enum_type
10987 = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
10988 /*entering_scope=*/0);
10990 for (v = TYPE_VALUES (enum_type);
10991 v != NULL_TREE;
10992 v = TREE_CHAIN (v))
10993 if (TREE_PURPOSE (v) == DECL_NAME (t))
10994 return TREE_VALUE (v);
10996 /* We didn't find the name. That should never happen; if
10997 name-lookup found it during preliminary parsing, we
10998 should find it again here during instantiation. */
10999 gcc_unreachable ();
11001 return t;
11003 case FIELD_DECL:
11004 if (DECL_CONTEXT (t))
11006 tree ctx;
11008 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
11009 /*entering_scope=*/1);
11010 if (ctx != DECL_CONTEXT (t))
11012 tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
11013 if (!r)
11015 if (complain & tf_error)
11016 error ("using invalid field %qD", t);
11017 return error_mark_node;
11019 return r;
11023 return t;
11025 case VAR_DECL:
11026 case FUNCTION_DECL:
11027 if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
11028 || local_variable_p (t))
11029 t = tsubst (t, args, complain, in_decl);
11030 mark_used (t);
11031 return t;
11033 case BASELINK:
11034 return tsubst_baselink (t, current_class_type, args, complain, in_decl);
11036 case TEMPLATE_DECL:
11037 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
11038 return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
11039 args, complain, in_decl);
11040 else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
11041 return tsubst (t, args, complain, in_decl);
11042 else if (DECL_CLASS_SCOPE_P (t)
11043 && uses_template_parms (DECL_CONTEXT (t)))
11045 /* Template template argument like the following example need
11046 special treatment:
11048 template <template <class> class TT> struct C {};
11049 template <class T> struct D {
11050 template <class U> struct E {};
11051 C<E> c; // #1
11053 D<int> d; // #2
11055 We are processing the template argument `E' in #1 for
11056 the template instantiation #2. Originally, `E' is a
11057 TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT. Now we
11058 have to substitute this with one having context `D<int>'. */
11060 tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
11061 return lookup_field (context, DECL_NAME(t), 0, false);
11063 else
11064 /* Ordinary template template argument. */
11065 return t;
11067 case CAST_EXPR:
11068 case REINTERPRET_CAST_EXPR:
11069 case CONST_CAST_EXPR:
11070 case STATIC_CAST_EXPR:
11071 case DYNAMIC_CAST_EXPR:
11072 case NOP_EXPR:
11073 return build1
11074 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
11075 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
11077 case SIZEOF_EXPR:
11078 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
11080 /* We only want to compute the number of arguments. */
11081 tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
11082 complain, in_decl);
11083 int len = 0;
11085 if (TREE_CODE (expanded) == TREE_VEC)
11086 len = TREE_VEC_LENGTH (expanded);
11088 if (expanded == error_mark_node)
11089 return error_mark_node;
11090 else if (PACK_EXPANSION_P (expanded)
11091 || (TREE_CODE (expanded) == TREE_VEC
11092 && len > 0
11093 && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
11095 if (TREE_CODE (expanded) == TREE_VEC)
11096 expanded = TREE_VEC_ELT (expanded, len - 1);
11098 if (TYPE_P (expanded))
11099 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR,
11100 complain & tf_error);
11101 else
11102 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
11103 complain & tf_error);
11105 else
11106 return build_int_cst (size_type_node, len);
11108 /* Fall through */
11110 case INDIRECT_REF:
11111 case NEGATE_EXPR:
11112 case TRUTH_NOT_EXPR:
11113 case BIT_NOT_EXPR:
11114 case ADDR_EXPR:
11115 case UNARY_PLUS_EXPR: /* Unary + */
11116 case ALIGNOF_EXPR:
11117 case ARROW_EXPR:
11118 case THROW_EXPR:
11119 case TYPEID_EXPR:
11120 case REALPART_EXPR:
11121 case IMAGPART_EXPR:
11122 return build1
11123 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
11124 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
11126 case COMPONENT_REF:
11128 tree object;
11129 tree name;
11131 object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
11132 name = TREE_OPERAND (t, 1);
11133 if (TREE_CODE (name) == BIT_NOT_EXPR)
11135 name = tsubst_copy (TREE_OPERAND (name, 0), args,
11136 complain, in_decl);
11137 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
11139 else if (TREE_CODE (name) == SCOPE_REF
11140 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
11142 tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
11143 complain, in_decl);
11144 name = TREE_OPERAND (name, 1);
11145 name = tsubst_copy (TREE_OPERAND (name, 0), args,
11146 complain, in_decl);
11147 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
11148 name = build_qualified_name (/*type=*/NULL_TREE,
11149 base, name,
11150 /*template_p=*/false);
11152 else if (TREE_CODE (name) == BASELINK)
11153 name = tsubst_baselink (name,
11154 non_reference (TREE_TYPE (object)),
11155 args, complain,
11156 in_decl);
11157 else
11158 name = tsubst_copy (name, args, complain, in_decl);
11159 return build_nt (COMPONENT_REF, object, name, NULL_TREE);
11162 case PLUS_EXPR:
11163 case MINUS_EXPR:
11164 case MULT_EXPR:
11165 case TRUNC_DIV_EXPR:
11166 case CEIL_DIV_EXPR:
11167 case FLOOR_DIV_EXPR:
11168 case ROUND_DIV_EXPR:
11169 case EXACT_DIV_EXPR:
11170 case BIT_AND_EXPR:
11171 case BIT_IOR_EXPR:
11172 case BIT_XOR_EXPR:
11173 case TRUNC_MOD_EXPR:
11174 case FLOOR_MOD_EXPR:
11175 case TRUTH_ANDIF_EXPR:
11176 case TRUTH_ORIF_EXPR:
11177 case TRUTH_AND_EXPR:
11178 case TRUTH_OR_EXPR:
11179 case RSHIFT_EXPR:
11180 case LSHIFT_EXPR:
11181 case RROTATE_EXPR:
11182 case LROTATE_EXPR:
11183 case EQ_EXPR:
11184 case NE_EXPR:
11185 case MAX_EXPR:
11186 case MIN_EXPR:
11187 case LE_EXPR:
11188 case GE_EXPR:
11189 case LT_EXPR:
11190 case GT_EXPR:
11191 case COMPOUND_EXPR:
11192 case DOTSTAR_EXPR:
11193 case MEMBER_REF:
11194 case PREDECREMENT_EXPR:
11195 case PREINCREMENT_EXPR:
11196 case POSTDECREMENT_EXPR:
11197 case POSTINCREMENT_EXPR:
11198 return build_nt
11199 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11200 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
11202 case SCOPE_REF:
11203 return build_qualified_name (/*type=*/NULL_TREE,
11204 tsubst_copy (TREE_OPERAND (t, 0),
11205 args, complain, in_decl),
11206 tsubst_copy (TREE_OPERAND (t, 1),
11207 args, complain, in_decl),
11208 QUALIFIED_NAME_IS_TEMPLATE (t));
11210 case ARRAY_REF:
11211 return build_nt
11212 (ARRAY_REF,
11213 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11214 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
11215 NULL_TREE, NULL_TREE);
11217 case CALL_EXPR:
11219 int n = VL_EXP_OPERAND_LENGTH (t);
11220 tree result = build_vl_exp (CALL_EXPR, n);
11221 int i;
11222 for (i = 0; i < n; i++)
11223 TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
11224 complain, in_decl);
11225 return result;
11228 case COND_EXPR:
11229 case MODOP_EXPR:
11230 case PSEUDO_DTOR_EXPR:
11232 r = build_nt
11233 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11234 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
11235 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
11236 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
11237 return r;
11240 case NEW_EXPR:
11242 r = build_nt
11243 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11244 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
11245 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
11246 NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
11247 return r;
11250 case DELETE_EXPR:
11252 r = build_nt
11253 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11254 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
11255 DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
11256 DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
11257 return r;
11260 case TEMPLATE_ID_EXPR:
11262 /* Substituted template arguments */
11263 tree fn = TREE_OPERAND (t, 0);
11264 tree targs = TREE_OPERAND (t, 1);
11266 fn = tsubst_copy (fn, args, complain, in_decl);
11267 if (targs)
11268 targs = tsubst_template_args (targs, args, complain, in_decl);
11270 return lookup_template_function (fn, targs);
11273 case TREE_LIST:
11275 tree purpose, value, chain;
11277 if (t == void_list_node)
11278 return t;
11280 purpose = TREE_PURPOSE (t);
11281 if (purpose)
11282 purpose = tsubst_copy (purpose, args, complain, in_decl);
11283 value = TREE_VALUE (t);
11284 if (value)
11285 value = tsubst_copy (value, args, complain, in_decl);
11286 chain = TREE_CHAIN (t);
11287 if (chain && chain != void_type_node)
11288 chain = tsubst_copy (chain, args, complain, in_decl);
11289 if (purpose == TREE_PURPOSE (t)
11290 && value == TREE_VALUE (t)
11291 && chain == TREE_CHAIN (t))
11292 return t;
11293 return tree_cons (purpose, value, chain);
11296 case RECORD_TYPE:
11297 case UNION_TYPE:
11298 case ENUMERAL_TYPE:
11299 case INTEGER_TYPE:
11300 case TEMPLATE_TYPE_PARM:
11301 case TEMPLATE_TEMPLATE_PARM:
11302 case BOUND_TEMPLATE_TEMPLATE_PARM:
11303 case TEMPLATE_PARM_INDEX:
11304 case POINTER_TYPE:
11305 case REFERENCE_TYPE:
11306 case OFFSET_TYPE:
11307 case FUNCTION_TYPE:
11308 case METHOD_TYPE:
11309 case ARRAY_TYPE:
11310 case TYPENAME_TYPE:
11311 case UNBOUND_CLASS_TEMPLATE:
11312 case TYPEOF_TYPE:
11313 case DECLTYPE_TYPE:
11314 case TYPE_DECL:
11315 return tsubst (t, args, complain, in_decl);
11317 case IDENTIFIER_NODE:
11318 if (IDENTIFIER_TYPENAME_P (t))
11320 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11321 return mangle_conv_op_name_for_type (new_type);
11323 else
11324 return t;
11326 case CONSTRUCTOR:
11327 /* This is handled by tsubst_copy_and_build. */
11328 gcc_unreachable ();
11330 case VA_ARG_EXPR:
11331 return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
11332 in_decl),
11333 tsubst (TREE_TYPE (t), args, complain, in_decl));
11335 case CLEANUP_POINT_EXPR:
11336 /* We shouldn't have built any of these during initial template
11337 generation. Instead, they should be built during instantiation
11338 in response to the saved STMT_IS_FULL_EXPR_P setting. */
11339 gcc_unreachable ();
11341 case OFFSET_REF:
11342 r = build2
11343 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
11344 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11345 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
11346 PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
11347 mark_used (TREE_OPERAND (r, 1));
11348 return r;
11350 case EXPR_PACK_EXPANSION:
11351 error ("invalid use of pack expansion expression");
11352 return error_mark_node;
11354 case NONTYPE_ARGUMENT_PACK:
11355 error ("use %<...%> to expand argument pack");
11356 return error_mark_node;
11358 default:
11359 return t;
11363 /* Like tsubst_copy, but specifically for OpenMP clauses. */
11365 static tree
11366 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
11367 tree in_decl)
11369 tree new_clauses = NULL, nc, oc;
11371 for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
11373 nc = copy_node (oc);
11374 OMP_CLAUSE_CHAIN (nc) = new_clauses;
11375 new_clauses = nc;
11377 switch (OMP_CLAUSE_CODE (nc))
11379 case OMP_CLAUSE_LASTPRIVATE:
11380 if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
11382 OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
11383 tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
11384 in_decl, /*integral_constant_expression_p=*/false);
11385 OMP_CLAUSE_LASTPRIVATE_STMT (nc)
11386 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
11388 /* FALLTHRU */
11389 case OMP_CLAUSE_PRIVATE:
11390 case OMP_CLAUSE_SHARED:
11391 case OMP_CLAUSE_FIRSTPRIVATE:
11392 case OMP_CLAUSE_REDUCTION:
11393 case OMP_CLAUSE_COPYIN:
11394 case OMP_CLAUSE_COPYPRIVATE:
11395 case OMP_CLAUSE_IF:
11396 case OMP_CLAUSE_NUM_THREADS:
11397 case OMP_CLAUSE_SCHEDULE:
11398 case OMP_CLAUSE_COLLAPSE:
11399 OMP_CLAUSE_OPERAND (nc, 0)
11400 = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
11401 in_decl, /*integral_constant_expression_p=*/false);
11402 break;
11403 case OMP_CLAUSE_NOWAIT:
11404 case OMP_CLAUSE_ORDERED:
11405 case OMP_CLAUSE_DEFAULT:
11406 case OMP_CLAUSE_UNTIED:
11407 break;
11408 default:
11409 gcc_unreachable ();
11413 return finish_omp_clauses (nreverse (new_clauses));
11416 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes. */
11418 static tree
11419 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
11420 tree in_decl)
11422 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
11424 tree purpose, value, chain;
11426 if (t == NULL)
11427 return t;
11429 if (TREE_CODE (t) != TREE_LIST)
11430 return tsubst_copy_and_build (t, args, complain, in_decl,
11431 /*function_p=*/false,
11432 /*integral_constant_expression_p=*/false);
11434 if (t == void_list_node)
11435 return t;
11437 purpose = TREE_PURPOSE (t);
11438 if (purpose)
11439 purpose = RECUR (purpose);
11440 value = TREE_VALUE (t);
11441 if (value && TREE_CODE (value) != LABEL_DECL)
11442 value = RECUR (value);
11443 chain = TREE_CHAIN (t);
11444 if (chain && chain != void_type_node)
11445 chain = RECUR (chain);
11446 return tree_cons (purpose, value, chain);
11447 #undef RECUR
11450 /* Substitute one OMP_FOR iterator. */
11452 static void
11453 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
11454 tree condv, tree incrv, tree *clauses,
11455 tree args, tsubst_flags_t complain, tree in_decl,
11456 bool integral_constant_expression_p)
11458 #define RECUR(NODE) \
11459 tsubst_expr ((NODE), args, complain, in_decl, \
11460 integral_constant_expression_p)
11461 tree decl, init, cond, incr, auto_node;
11463 init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
11464 gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
11465 decl = RECUR (TREE_OPERAND (init, 0));
11466 init = TREE_OPERAND (init, 1);
11467 auto_node = type_uses_auto (TREE_TYPE (decl));
11468 if (auto_node && init)
11470 tree init_expr = init;
11471 if (TREE_CODE (init_expr) == DECL_EXPR)
11472 init_expr = DECL_INITIAL (DECL_EXPR_DECL (init_expr));
11473 init_expr = RECUR (init_expr);
11474 TREE_TYPE (decl)
11475 = do_auto_deduction (TREE_TYPE (decl), init_expr, auto_node);
11477 gcc_assert (!type_dependent_expression_p (decl));
11479 if (!CLASS_TYPE_P (TREE_TYPE (decl)))
11481 cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
11482 incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
11483 if (TREE_CODE (incr) == MODIFY_EXPR)
11484 incr = build_x_modify_expr (RECUR (TREE_OPERAND (incr, 0)), NOP_EXPR,
11485 RECUR (TREE_OPERAND (incr, 1)),
11486 complain);
11487 else
11488 incr = RECUR (incr);
11489 TREE_VEC_ELT (declv, i) = decl;
11490 TREE_VEC_ELT (initv, i) = init;
11491 TREE_VEC_ELT (condv, i) = cond;
11492 TREE_VEC_ELT (incrv, i) = incr;
11493 return;
11496 if (init && TREE_CODE (init) != DECL_EXPR)
11498 tree c;
11499 for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
11501 if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
11502 || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
11503 && OMP_CLAUSE_DECL (c) == decl)
11504 break;
11505 else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
11506 && OMP_CLAUSE_DECL (c) == decl)
11507 error ("iteration variable %qD should not be firstprivate", decl);
11508 else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
11509 && OMP_CLAUSE_DECL (c) == decl)
11510 error ("iteration variable %qD should not be reduction", decl);
11512 if (c == NULL)
11514 c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
11515 OMP_CLAUSE_DECL (c) = decl;
11516 c = finish_omp_clauses (c);
11517 if (c)
11519 OMP_CLAUSE_CHAIN (c) = *clauses;
11520 *clauses = c;
11524 cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
11525 if (COMPARISON_CLASS_P (cond))
11526 cond = build2 (TREE_CODE (cond), boolean_type_node,
11527 RECUR (TREE_OPERAND (cond, 0)),
11528 RECUR (TREE_OPERAND (cond, 1)));
11529 else
11530 cond = RECUR (cond);
11531 incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
11532 switch (TREE_CODE (incr))
11534 case PREINCREMENT_EXPR:
11535 case PREDECREMENT_EXPR:
11536 case POSTINCREMENT_EXPR:
11537 case POSTDECREMENT_EXPR:
11538 incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
11539 RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
11540 break;
11541 case MODIFY_EXPR:
11542 if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
11543 || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
11545 tree rhs = TREE_OPERAND (incr, 1);
11546 incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
11547 RECUR (TREE_OPERAND (incr, 0)),
11548 build2 (TREE_CODE (rhs), TREE_TYPE (decl),
11549 RECUR (TREE_OPERAND (rhs, 0)),
11550 RECUR (TREE_OPERAND (rhs, 1))));
11552 else
11553 incr = RECUR (incr);
11554 break;
11555 case MODOP_EXPR:
11556 if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
11557 || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
11559 tree lhs = RECUR (TREE_OPERAND (incr, 0));
11560 incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
11561 build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
11562 TREE_TYPE (decl), lhs,
11563 RECUR (TREE_OPERAND (incr, 2))));
11565 else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
11566 && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
11567 || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
11569 tree rhs = TREE_OPERAND (incr, 2);
11570 incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
11571 RECUR (TREE_OPERAND (incr, 0)),
11572 build2 (TREE_CODE (rhs), TREE_TYPE (decl),
11573 RECUR (TREE_OPERAND (rhs, 0)),
11574 RECUR (TREE_OPERAND (rhs, 1))));
11576 else
11577 incr = RECUR (incr);
11578 break;
11579 default:
11580 incr = RECUR (incr);
11581 break;
11584 TREE_VEC_ELT (declv, i) = decl;
11585 TREE_VEC_ELT (initv, i) = init;
11586 TREE_VEC_ELT (condv, i) = cond;
11587 TREE_VEC_ELT (incrv, i) = incr;
11588 #undef RECUR
11591 /* Like tsubst_copy for expressions, etc. but also does semantic
11592 processing. */
11594 static tree
11595 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
11596 bool integral_constant_expression_p)
11598 #define RECUR(NODE) \
11599 tsubst_expr ((NODE), args, complain, in_decl, \
11600 integral_constant_expression_p)
11602 tree stmt, tmp;
11604 if (t == NULL_TREE || t == error_mark_node)
11605 return t;
11607 if (EXPR_HAS_LOCATION (t))
11608 input_location = EXPR_LOCATION (t);
11609 if (STATEMENT_CODE_P (TREE_CODE (t)))
11610 current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
11612 switch (TREE_CODE (t))
11614 case STATEMENT_LIST:
11616 tree_stmt_iterator i;
11617 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
11618 RECUR (tsi_stmt (i));
11619 break;
11622 case CTOR_INITIALIZER:
11623 finish_mem_initializers (tsubst_initializer_list
11624 (TREE_OPERAND (t, 0), args));
11625 break;
11627 case RETURN_EXPR:
11628 finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
11629 break;
11631 case EXPR_STMT:
11632 tmp = RECUR (EXPR_STMT_EXPR (t));
11633 if (EXPR_STMT_STMT_EXPR_RESULT (t))
11634 finish_stmt_expr_expr (tmp, cur_stmt_expr);
11635 else
11636 finish_expr_stmt (tmp);
11637 break;
11639 case USING_STMT:
11640 do_using_directive (RECUR (USING_STMT_NAMESPACE (t)));
11641 break;
11643 case DECL_EXPR:
11645 tree decl;
11646 tree init;
11648 decl = DECL_EXPR_DECL (t);
11649 if (TREE_CODE (decl) == LABEL_DECL)
11650 finish_label_decl (DECL_NAME (decl));
11651 else if (TREE_CODE (decl) == USING_DECL)
11653 tree scope = USING_DECL_SCOPE (decl);
11654 tree name = DECL_NAME (decl);
11655 tree decl;
11657 scope = RECUR (scope);
11658 decl = lookup_qualified_name (scope, name,
11659 /*is_type_p=*/false,
11660 /*complain=*/false);
11661 if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
11662 qualified_name_lookup_error (scope, name, decl, input_location);
11663 else
11664 do_local_using_decl (decl, scope, name);
11666 else
11668 init = DECL_INITIAL (decl);
11669 decl = tsubst (decl, args, complain, in_decl);
11670 if (decl != error_mark_node)
11672 /* By marking the declaration as instantiated, we avoid
11673 trying to instantiate it. Since instantiate_decl can't
11674 handle local variables, and since we've already done
11675 all that needs to be done, that's the right thing to
11676 do. */
11677 if (TREE_CODE (decl) == VAR_DECL)
11678 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
11679 if (TREE_CODE (decl) == VAR_DECL
11680 && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
11681 /* Anonymous aggregates are a special case. */
11682 finish_anon_union (decl);
11683 else
11685 maybe_push_decl (decl);
11686 if (TREE_CODE (decl) == VAR_DECL
11687 && DECL_PRETTY_FUNCTION_P (decl))
11689 /* For __PRETTY_FUNCTION__ we have to adjust the
11690 initializer. */
11691 const char *const name
11692 = cxx_printable_name (current_function_decl, 2);
11693 init = cp_fname_init (name, &TREE_TYPE (decl));
11695 else
11697 tree t = RECUR (init);
11699 if (init && !t)
11700 /* If we had an initializer but it
11701 instantiated to nothing,
11702 value-initialize the object. This will
11703 only occur when the initializer was a
11704 pack expansion where the parameter packs
11705 used in that expansion were of length
11706 zero. */
11707 init = build_value_init (TREE_TYPE (decl));
11708 else
11709 init = t;
11712 cp_finish_decl (decl, init, false, NULL_TREE, 0);
11717 /* A DECL_EXPR can also be used as an expression, in the condition
11718 clause of an if/for/while construct. */
11719 return decl;
11722 case FOR_STMT:
11723 stmt = begin_for_stmt ();
11724 RECUR (FOR_INIT_STMT (t));
11725 finish_for_init_stmt (stmt);
11726 tmp = RECUR (FOR_COND (t));
11727 finish_for_cond (tmp, stmt);
11728 tmp = RECUR (FOR_EXPR (t));
11729 finish_for_expr (tmp, stmt);
11730 RECUR (FOR_BODY (t));
11731 finish_for_stmt (stmt);
11732 break;
11734 case WHILE_STMT:
11735 stmt = begin_while_stmt ();
11736 tmp = RECUR (WHILE_COND (t));
11737 finish_while_stmt_cond (tmp, stmt);
11738 RECUR (WHILE_BODY (t));
11739 finish_while_stmt (stmt);
11740 break;
11742 case DO_STMT:
11743 stmt = begin_do_stmt ();
11744 RECUR (DO_BODY (t));
11745 finish_do_body (stmt);
11746 tmp = RECUR (DO_COND (t));
11747 finish_do_stmt (tmp, stmt);
11748 break;
11750 case IF_STMT:
11751 stmt = begin_if_stmt ();
11752 tmp = RECUR (IF_COND (t));
11753 finish_if_stmt_cond (tmp, stmt);
11754 RECUR (THEN_CLAUSE (t));
11755 finish_then_clause (stmt);
11757 if (ELSE_CLAUSE (t))
11759 begin_else_clause (stmt);
11760 RECUR (ELSE_CLAUSE (t));
11761 finish_else_clause (stmt);
11764 finish_if_stmt (stmt);
11765 break;
11767 case BIND_EXPR:
11768 if (BIND_EXPR_BODY_BLOCK (t))
11769 stmt = begin_function_body ();
11770 else
11771 stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
11772 ? BCS_TRY_BLOCK : 0);
11774 RECUR (BIND_EXPR_BODY (t));
11776 if (BIND_EXPR_BODY_BLOCK (t))
11777 finish_function_body (stmt);
11778 else
11779 finish_compound_stmt (stmt);
11780 break;
11782 case BREAK_STMT:
11783 finish_break_stmt ();
11784 break;
11786 case CONTINUE_STMT:
11787 finish_continue_stmt ();
11788 break;
11790 case SWITCH_STMT:
11791 stmt = begin_switch_stmt ();
11792 tmp = RECUR (SWITCH_STMT_COND (t));
11793 finish_switch_cond (tmp, stmt);
11794 RECUR (SWITCH_STMT_BODY (t));
11795 finish_switch_stmt (stmt);
11796 break;
11798 case CASE_LABEL_EXPR:
11799 finish_case_label (EXPR_LOCATION (t),
11800 RECUR (CASE_LOW (t)),
11801 RECUR (CASE_HIGH (t)));
11802 break;
11804 case LABEL_EXPR:
11806 tree decl = LABEL_EXPR_LABEL (t);
11807 tree label;
11809 label = finish_label_stmt (DECL_NAME (decl));
11810 if (DECL_ATTRIBUTES (decl) != NULL_TREE)
11811 cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
11813 break;
11815 case GOTO_EXPR:
11816 tmp = GOTO_DESTINATION (t);
11817 if (TREE_CODE (tmp) != LABEL_DECL)
11818 /* Computed goto's must be tsubst'd into. On the other hand,
11819 non-computed gotos must not be; the identifier in question
11820 will have no binding. */
11821 tmp = RECUR (tmp);
11822 else
11823 tmp = DECL_NAME (tmp);
11824 finish_goto_stmt (tmp);
11825 break;
11827 case ASM_EXPR:
11828 tmp = finish_asm_stmt
11829 (ASM_VOLATILE_P (t),
11830 RECUR (ASM_STRING (t)),
11831 tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
11832 tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
11833 tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl),
11834 tsubst_copy_asm_operands (ASM_LABELS (t), args, complain, in_decl));
11836 tree asm_expr = tmp;
11837 if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
11838 asm_expr = TREE_OPERAND (asm_expr, 0);
11839 ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
11841 break;
11843 case TRY_BLOCK:
11844 if (CLEANUP_P (t))
11846 stmt = begin_try_block ();
11847 RECUR (TRY_STMTS (t));
11848 finish_cleanup_try_block (stmt);
11849 finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
11851 else
11853 tree compound_stmt = NULL_TREE;
11855 if (FN_TRY_BLOCK_P (t))
11856 stmt = begin_function_try_block (&compound_stmt);
11857 else
11858 stmt = begin_try_block ();
11860 RECUR (TRY_STMTS (t));
11862 if (FN_TRY_BLOCK_P (t))
11863 finish_function_try_block (stmt);
11864 else
11865 finish_try_block (stmt);
11867 RECUR (TRY_HANDLERS (t));
11868 if (FN_TRY_BLOCK_P (t))
11869 finish_function_handler_sequence (stmt, compound_stmt);
11870 else
11871 finish_handler_sequence (stmt);
11873 break;
11875 case HANDLER:
11877 tree decl = HANDLER_PARMS (t);
11879 if (decl)
11881 decl = tsubst (decl, args, complain, in_decl);
11882 /* Prevent instantiate_decl from trying to instantiate
11883 this variable. We've already done all that needs to be
11884 done. */
11885 if (decl != error_mark_node)
11886 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
11888 stmt = begin_handler ();
11889 finish_handler_parms (decl, stmt);
11890 RECUR (HANDLER_BODY (t));
11891 finish_handler (stmt);
11893 break;
11895 case TAG_DEFN:
11896 tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
11897 break;
11899 case STATIC_ASSERT:
11901 tree condition =
11902 tsubst_expr (STATIC_ASSERT_CONDITION (t),
11903 args,
11904 complain, in_decl,
11905 /*integral_constant_expression_p=*/true);
11906 finish_static_assert (condition,
11907 STATIC_ASSERT_MESSAGE (t),
11908 STATIC_ASSERT_SOURCE_LOCATION (t),
11909 /*member_p=*/false);
11911 break;
11913 case OMP_PARALLEL:
11914 tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
11915 args, complain, in_decl);
11916 stmt = begin_omp_parallel ();
11917 RECUR (OMP_PARALLEL_BODY (t));
11918 OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
11919 = OMP_PARALLEL_COMBINED (t);
11920 break;
11922 case OMP_TASK:
11923 tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t),
11924 args, complain, in_decl);
11925 stmt = begin_omp_task ();
11926 RECUR (OMP_TASK_BODY (t));
11927 finish_omp_task (tmp, stmt);
11928 break;
11930 case OMP_FOR:
11932 tree clauses, body, pre_body;
11933 tree declv, initv, condv, incrv;
11934 int i;
11936 clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
11937 args, complain, in_decl);
11938 declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
11939 initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
11940 condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
11941 incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
11943 for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
11944 tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
11945 &clauses, args, complain, in_decl,
11946 integral_constant_expression_p);
11948 stmt = begin_omp_structured_block ();
11950 for (i = 0; i < TREE_VEC_LENGTH (initv); i++)
11951 if (TREE_VEC_ELT (initv, i) == NULL
11952 || TREE_CODE (TREE_VEC_ELT (initv, i)) != DECL_EXPR)
11953 TREE_VEC_ELT (initv, i) = RECUR (TREE_VEC_ELT (initv, i));
11954 else if (CLASS_TYPE_P (TREE_TYPE (TREE_VEC_ELT (initv, i))))
11956 tree init = RECUR (TREE_VEC_ELT (initv, i));
11957 gcc_assert (init == TREE_VEC_ELT (declv, i));
11958 TREE_VEC_ELT (initv, i) = NULL_TREE;
11960 else
11962 tree decl_expr = TREE_VEC_ELT (initv, i);
11963 tree init = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
11964 gcc_assert (init != NULL);
11965 TREE_VEC_ELT (initv, i) = RECUR (init);
11966 DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL;
11967 RECUR (decl_expr);
11968 DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init;
11971 pre_body = push_stmt_list ();
11972 RECUR (OMP_FOR_PRE_BODY (t));
11973 pre_body = pop_stmt_list (pre_body);
11975 body = push_stmt_list ();
11976 RECUR (OMP_FOR_BODY (t));
11977 body = pop_stmt_list (body);
11979 t = finish_omp_for (EXPR_LOCATION (t), declv, initv, condv, incrv,
11980 body, pre_body, clauses);
11982 add_stmt (finish_omp_structured_block (stmt));
11984 break;
11986 case OMP_SECTIONS:
11987 case OMP_SINGLE:
11988 tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
11989 stmt = push_stmt_list ();
11990 RECUR (OMP_BODY (t));
11991 stmt = pop_stmt_list (stmt);
11993 t = copy_node (t);
11994 OMP_BODY (t) = stmt;
11995 OMP_CLAUSES (t) = tmp;
11996 add_stmt (t);
11997 break;
11999 case OMP_SECTION:
12000 case OMP_CRITICAL:
12001 case OMP_MASTER:
12002 case OMP_ORDERED:
12003 stmt = push_stmt_list ();
12004 RECUR (OMP_BODY (t));
12005 stmt = pop_stmt_list (stmt);
12007 t = copy_node (t);
12008 OMP_BODY (t) = stmt;
12009 add_stmt (t);
12010 break;
12012 case OMP_ATOMIC:
12013 gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
12015 tree op1 = TREE_OPERAND (t, 1);
12016 tree lhs = RECUR (TREE_OPERAND (op1, 0));
12017 tree rhs = RECUR (TREE_OPERAND (op1, 1));
12018 finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
12020 break;
12022 case EXPR_PACK_EXPANSION:
12023 error ("invalid use of pack expansion expression");
12024 return error_mark_node;
12026 case NONTYPE_ARGUMENT_PACK:
12027 error ("use %<...%> to expand argument pack");
12028 return error_mark_node;
12030 default:
12031 gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
12033 return tsubst_copy_and_build (t, args, complain, in_decl,
12034 /*function_p=*/false,
12035 integral_constant_expression_p);
12038 return NULL_TREE;
12039 #undef RECUR
12042 /* T is a postfix-expression that is not being used in a function
12043 call. Return the substituted version of T. */
12045 static tree
12046 tsubst_non_call_postfix_expression (tree t, tree args,
12047 tsubst_flags_t complain,
12048 tree in_decl)
12050 if (TREE_CODE (t) == SCOPE_REF)
12051 t = tsubst_qualified_id (t, args, complain, in_decl,
12052 /*done=*/false, /*address_p=*/false);
12053 else
12054 t = tsubst_copy_and_build (t, args, complain, in_decl,
12055 /*function_p=*/false,
12056 /*integral_constant_expression_p=*/false);
12058 return t;
12061 /* Like tsubst but deals with expressions and performs semantic
12062 analysis. FUNCTION_P is true if T is the "F" in "F (ARGS)". */
12064 tree
12065 tsubst_copy_and_build (tree t,
12066 tree args,
12067 tsubst_flags_t complain,
12068 tree in_decl,
12069 bool function_p,
12070 bool integral_constant_expression_p)
12072 #define RECUR(NODE) \
12073 tsubst_copy_and_build (NODE, args, complain, in_decl, \
12074 /*function_p=*/false, \
12075 integral_constant_expression_p)
12077 tree op1;
12079 if (t == NULL_TREE || t == error_mark_node)
12080 return t;
12082 switch (TREE_CODE (t))
12084 case USING_DECL:
12085 t = DECL_NAME (t);
12086 /* Fall through. */
12087 case IDENTIFIER_NODE:
12089 tree decl;
12090 cp_id_kind idk;
12091 bool non_integral_constant_expression_p;
12092 const char *error_msg;
12094 if (IDENTIFIER_TYPENAME_P (t))
12096 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12097 t = mangle_conv_op_name_for_type (new_type);
12100 /* Look up the name. */
12101 decl = lookup_name (t);
12103 /* By convention, expressions use ERROR_MARK_NODE to indicate
12104 failure, not NULL_TREE. */
12105 if (decl == NULL_TREE)
12106 decl = error_mark_node;
12108 decl = finish_id_expression (t, decl, NULL_TREE,
12109 &idk,
12110 integral_constant_expression_p,
12111 /*allow_non_integral_constant_expression_p=*/false,
12112 &non_integral_constant_expression_p,
12113 /*template_p=*/false,
12114 /*done=*/true,
12115 /*address_p=*/false,
12116 /*template_arg_p=*/false,
12117 &error_msg,
12118 input_location);
12119 if (error_msg)
12120 error (error_msg);
12121 if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
12122 decl = unqualified_name_lookup_error (decl);
12123 return decl;
12126 case TEMPLATE_ID_EXPR:
12128 tree object;
12129 tree templ = RECUR (TREE_OPERAND (t, 0));
12130 tree targs = TREE_OPERAND (t, 1);
12132 if (targs)
12133 targs = tsubst_template_args (targs, args, complain, in_decl);
12135 if (TREE_CODE (templ) == COMPONENT_REF)
12137 object = TREE_OPERAND (templ, 0);
12138 templ = TREE_OPERAND (templ, 1);
12140 else
12141 object = NULL_TREE;
12142 templ = lookup_template_function (templ, targs);
12144 if (object)
12145 return build3 (COMPONENT_REF, TREE_TYPE (templ),
12146 object, templ, NULL_TREE);
12147 else
12148 return baselink_for_fns (templ);
12151 case INDIRECT_REF:
12153 tree r = RECUR (TREE_OPERAND (t, 0));
12155 if (REFERENCE_REF_P (t))
12157 /* A type conversion to reference type will be enclosed in
12158 such an indirect ref, but the substitution of the cast
12159 will have also added such an indirect ref. */
12160 if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
12161 r = convert_from_reference (r);
12163 else
12164 r = build_x_indirect_ref (r, RO_UNARY_STAR, complain);
12165 return r;
12168 case NOP_EXPR:
12169 return build_nop
12170 (tsubst (TREE_TYPE (t), args, complain, in_decl),
12171 RECUR (TREE_OPERAND (t, 0)));
12173 case CAST_EXPR:
12174 case REINTERPRET_CAST_EXPR:
12175 case CONST_CAST_EXPR:
12176 case DYNAMIC_CAST_EXPR:
12177 case STATIC_CAST_EXPR:
12179 tree type;
12180 tree op;
12182 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12183 if (integral_constant_expression_p
12184 && !cast_valid_in_integral_constant_expression_p (type))
12186 if (complain & tf_error)
12187 error ("a cast to a type other than an integral or "
12188 "enumeration type cannot appear in a constant-expression");
12189 return error_mark_node;
12192 op = RECUR (TREE_OPERAND (t, 0));
12194 switch (TREE_CODE (t))
12196 case CAST_EXPR:
12197 return build_functional_cast (type, op, complain);
12198 case REINTERPRET_CAST_EXPR:
12199 return build_reinterpret_cast (type, op, complain);
12200 case CONST_CAST_EXPR:
12201 return build_const_cast (type, op, complain);
12202 case DYNAMIC_CAST_EXPR:
12203 return build_dynamic_cast (type, op, complain);
12204 case STATIC_CAST_EXPR:
12205 return build_static_cast (type, op, complain);
12206 default:
12207 gcc_unreachable ();
12211 case POSTDECREMENT_EXPR:
12212 case POSTINCREMENT_EXPR:
12213 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
12214 args, complain, in_decl);
12215 return build_x_unary_op (TREE_CODE (t), op1, complain);
12217 case PREDECREMENT_EXPR:
12218 case PREINCREMENT_EXPR:
12219 case NEGATE_EXPR:
12220 case BIT_NOT_EXPR:
12221 case ABS_EXPR:
12222 case TRUTH_NOT_EXPR:
12223 case UNARY_PLUS_EXPR: /* Unary + */
12224 case REALPART_EXPR:
12225 case IMAGPART_EXPR:
12226 return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
12227 complain);
12229 case ADDR_EXPR:
12230 op1 = TREE_OPERAND (t, 0);
12231 if (TREE_CODE (op1) == SCOPE_REF)
12232 op1 = tsubst_qualified_id (op1, args, complain, in_decl,
12233 /*done=*/true, /*address_p=*/true);
12234 else
12235 op1 = tsubst_non_call_postfix_expression (op1, args, complain,
12236 in_decl);
12237 if (TREE_CODE (op1) == LABEL_DECL)
12238 return finish_label_address_expr (DECL_NAME (op1),
12239 EXPR_LOCATION (op1));
12240 return build_x_unary_op (ADDR_EXPR, op1, complain);
12242 case PLUS_EXPR:
12243 case MINUS_EXPR:
12244 case MULT_EXPR:
12245 case TRUNC_DIV_EXPR:
12246 case CEIL_DIV_EXPR:
12247 case FLOOR_DIV_EXPR:
12248 case ROUND_DIV_EXPR:
12249 case EXACT_DIV_EXPR:
12250 case BIT_AND_EXPR:
12251 case BIT_IOR_EXPR:
12252 case BIT_XOR_EXPR:
12253 case TRUNC_MOD_EXPR:
12254 case FLOOR_MOD_EXPR:
12255 case TRUTH_ANDIF_EXPR:
12256 case TRUTH_ORIF_EXPR:
12257 case TRUTH_AND_EXPR:
12258 case TRUTH_OR_EXPR:
12259 case RSHIFT_EXPR:
12260 case LSHIFT_EXPR:
12261 case RROTATE_EXPR:
12262 case LROTATE_EXPR:
12263 case EQ_EXPR:
12264 case NE_EXPR:
12265 case MAX_EXPR:
12266 case MIN_EXPR:
12267 case LE_EXPR:
12268 case GE_EXPR:
12269 case LT_EXPR:
12270 case GT_EXPR:
12271 case MEMBER_REF:
12272 case DOTSTAR_EXPR:
12273 return build_x_binary_op
12274 (TREE_CODE (t),
12275 RECUR (TREE_OPERAND (t, 0)),
12276 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
12277 ? ERROR_MARK
12278 : TREE_CODE (TREE_OPERAND (t, 0))),
12279 RECUR (TREE_OPERAND (t, 1)),
12280 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
12281 ? ERROR_MARK
12282 : TREE_CODE (TREE_OPERAND (t, 1))),
12283 /*overloaded_p=*/NULL,
12284 complain);
12286 case SCOPE_REF:
12287 return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
12288 /*address_p=*/false);
12289 case ARRAY_REF:
12290 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
12291 args, complain, in_decl);
12292 return build_x_array_ref (op1, RECUR (TREE_OPERAND (t, 1)), complain);
12294 case SIZEOF_EXPR:
12295 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
12296 return tsubst_copy (t, args, complain, in_decl);
12297 /* Fall through */
12299 case ALIGNOF_EXPR:
12300 op1 = TREE_OPERAND (t, 0);
12301 if (!args)
12303 /* When there are no ARGS, we are trying to evaluate a
12304 non-dependent expression from the parser. Trying to do
12305 the substitutions may not work. */
12306 if (!TYPE_P (op1))
12307 op1 = TREE_TYPE (op1);
12309 else
12311 ++cp_unevaluated_operand;
12312 ++c_inhibit_evaluation_warnings;
12313 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
12314 /*function_p=*/false,
12315 /*integral_constant_expression_p=*/false);
12316 --cp_unevaluated_operand;
12317 --c_inhibit_evaluation_warnings;
12319 if (TYPE_P (op1))
12320 return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t),
12321 complain & tf_error);
12322 else
12323 return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t),
12324 complain & tf_error);
12326 case NOEXCEPT_EXPR:
12327 op1 = TREE_OPERAND (t, 0);
12328 ++cp_unevaluated_operand;
12329 ++c_inhibit_evaluation_warnings;
12330 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
12331 /*function_p=*/false,
12332 /*integral_constant_expression_p=*/false);
12333 --cp_unevaluated_operand;
12334 --c_inhibit_evaluation_warnings;
12335 return finish_noexcept_expr (op1, complain);
12337 case MODOP_EXPR:
12339 tree r = build_x_modify_expr
12340 (RECUR (TREE_OPERAND (t, 0)),
12341 TREE_CODE (TREE_OPERAND (t, 1)),
12342 RECUR (TREE_OPERAND (t, 2)),
12343 complain);
12344 /* TREE_NO_WARNING must be set if either the expression was
12345 parenthesized or it uses an operator such as >>= rather
12346 than plain assignment. In the former case, it was already
12347 set and must be copied. In the latter case,
12348 build_x_modify_expr sets it and it must not be reset
12349 here. */
12350 if (TREE_NO_WARNING (t))
12351 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
12352 return r;
12355 case ARROW_EXPR:
12356 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
12357 args, complain, in_decl);
12358 /* Remember that there was a reference to this entity. */
12359 if (DECL_P (op1))
12360 mark_used (op1);
12361 return build_x_arrow (op1);
12363 case NEW_EXPR:
12365 tree placement = RECUR (TREE_OPERAND (t, 0));
12366 tree init = RECUR (TREE_OPERAND (t, 3));
12367 VEC(tree,gc) *placement_vec;
12368 VEC(tree,gc) *init_vec;
12369 tree ret;
12371 if (placement == NULL_TREE)
12372 placement_vec = NULL;
12373 else
12375 placement_vec = make_tree_vector ();
12376 for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
12377 VEC_safe_push (tree, gc, placement_vec, TREE_VALUE (placement));
12380 /* If there was an initializer in the original tree, but it
12381 instantiated to an empty list, then we should pass a
12382 non-NULL empty vector to tell build_new that it was an
12383 empty initializer() rather than no initializer. This can
12384 only happen when the initializer is a pack expansion whose
12385 parameter packs are of length zero. */
12386 if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
12387 init_vec = NULL;
12388 else
12390 init_vec = make_tree_vector ();
12391 if (init == void_zero_node)
12392 gcc_assert (init_vec != NULL);
12393 else
12395 for (; init != NULL_TREE; init = TREE_CHAIN (init))
12396 VEC_safe_push (tree, gc, init_vec, TREE_VALUE (init));
12400 ret = build_new (&placement_vec,
12401 RECUR (TREE_OPERAND (t, 1)),
12402 RECUR (TREE_OPERAND (t, 2)),
12403 &init_vec,
12404 NEW_EXPR_USE_GLOBAL (t),
12405 complain);
12407 if (placement_vec != NULL)
12408 release_tree_vector (placement_vec);
12409 if (init_vec != NULL)
12410 release_tree_vector (init_vec);
12412 return ret;
12415 case DELETE_EXPR:
12416 return delete_sanity
12417 (RECUR (TREE_OPERAND (t, 0)),
12418 RECUR (TREE_OPERAND (t, 1)),
12419 DELETE_EXPR_USE_VEC (t),
12420 DELETE_EXPR_USE_GLOBAL (t));
12422 case COMPOUND_EXPR:
12423 return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
12424 RECUR (TREE_OPERAND (t, 1)),
12425 complain);
12427 case CALL_EXPR:
12429 tree function;
12430 VEC(tree,gc) *call_args;
12431 unsigned int nargs, i;
12432 bool qualified_p;
12433 bool koenig_p;
12434 tree ret;
12436 function = CALL_EXPR_FN (t);
12437 /* When we parsed the expression, we determined whether or
12438 not Koenig lookup should be performed. */
12439 koenig_p = KOENIG_LOOKUP_P (t);
12440 if (TREE_CODE (function) == SCOPE_REF)
12442 qualified_p = true;
12443 function = tsubst_qualified_id (function, args, complain, in_decl,
12444 /*done=*/false,
12445 /*address_p=*/false);
12447 else
12449 if (TREE_CODE (function) == COMPONENT_REF)
12451 tree op = TREE_OPERAND (function, 1);
12453 qualified_p = (TREE_CODE (op) == SCOPE_REF
12454 || (BASELINK_P (op)
12455 && BASELINK_QUALIFIED_P (op)));
12457 else
12458 qualified_p = false;
12460 function = tsubst_copy_and_build (function, args, complain,
12461 in_decl,
12462 !qualified_p,
12463 integral_constant_expression_p);
12465 if (BASELINK_P (function))
12466 qualified_p = true;
12469 nargs = call_expr_nargs (t);
12470 call_args = make_tree_vector ();
12471 for (i = 0; i < nargs; ++i)
12473 tree arg = CALL_EXPR_ARG (t, i);
12475 if (!PACK_EXPANSION_P (arg))
12476 VEC_safe_push (tree, gc, call_args,
12477 RECUR (CALL_EXPR_ARG (t, i)));
12478 else
12480 /* Expand the pack expansion and push each entry onto
12481 CALL_ARGS. */
12482 arg = tsubst_pack_expansion (arg, args, complain, in_decl);
12483 if (TREE_CODE (arg) == TREE_VEC)
12485 unsigned int len, j;
12487 len = TREE_VEC_LENGTH (arg);
12488 for (j = 0; j < len; ++j)
12490 tree value = TREE_VEC_ELT (arg, j);
12491 if (value != NULL_TREE)
12492 value = convert_from_reference (value);
12493 VEC_safe_push (tree, gc, call_args, value);
12496 else
12498 /* A partial substitution. Add one entry. */
12499 VEC_safe_push (tree, gc, call_args, arg);
12504 /* We do not perform argument-dependent lookup if normal
12505 lookup finds a non-function, in accordance with the
12506 expected resolution of DR 218. */
12507 if (koenig_p
12508 && ((is_overloaded_fn (function)
12509 /* If lookup found a member function, the Koenig lookup is
12510 not appropriate, even if an unqualified-name was used
12511 to denote the function. */
12512 && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
12513 || TREE_CODE (function) == IDENTIFIER_NODE)
12514 /* Only do this when substitution turns a dependent call
12515 into a non-dependent call. */
12516 && type_dependent_expression_p_push (t)
12517 && !any_type_dependent_arguments_p (call_args))
12518 function = perform_koenig_lookup (function, call_args);
12520 if (TREE_CODE (function) == IDENTIFIER_NODE)
12522 unqualified_name_lookup_error (function);
12523 release_tree_vector (call_args);
12524 return error_mark_node;
12527 /* Remember that there was a reference to this entity. */
12528 if (DECL_P (function))
12529 mark_used (function);
12531 if (TREE_CODE (function) == OFFSET_REF)
12532 ret = build_offset_ref_call_from_tree (function, &call_args);
12533 else if (TREE_CODE (function) == COMPONENT_REF)
12535 tree instance = TREE_OPERAND (function, 0);
12536 tree fn = TREE_OPERAND (function, 1);
12538 if (processing_template_decl
12539 && (type_dependent_expression_p (instance)
12540 || (!BASELINK_P (fn)
12541 && TREE_CODE (fn) != FIELD_DECL)
12542 || type_dependent_expression_p (fn)
12543 || any_type_dependent_arguments_p (call_args)))
12544 ret = build_nt_call_vec (function, call_args);
12545 else if (!BASELINK_P (fn))
12546 ret = finish_call_expr (function, &call_args,
12547 /*disallow_virtual=*/false,
12548 /*koenig_p=*/false,
12549 complain);
12550 else
12551 ret = (build_new_method_call
12552 (instance, fn,
12553 &call_args, NULL_TREE,
12554 qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
12555 /*fn_p=*/NULL,
12556 complain));
12558 else
12559 ret = finish_call_expr (function, &call_args,
12560 /*disallow_virtual=*/qualified_p,
12561 koenig_p,
12562 complain);
12564 release_tree_vector (call_args);
12566 return ret;
12569 case COND_EXPR:
12570 return build_x_conditional_expr
12571 (RECUR (TREE_OPERAND (t, 0)),
12572 RECUR (TREE_OPERAND (t, 1)),
12573 RECUR (TREE_OPERAND (t, 2)),
12574 complain);
12576 case PSEUDO_DTOR_EXPR:
12577 return finish_pseudo_destructor_expr
12578 (RECUR (TREE_OPERAND (t, 0)),
12579 RECUR (TREE_OPERAND (t, 1)),
12580 RECUR (TREE_OPERAND (t, 2)));
12582 case TREE_LIST:
12584 tree purpose, value, chain;
12586 if (t == void_list_node)
12587 return t;
12589 if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
12590 || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
12592 /* We have pack expansions, so expand those and
12593 create a new list out of it. */
12594 tree purposevec = NULL_TREE;
12595 tree valuevec = NULL_TREE;
12596 tree chain;
12597 int i, len = -1;
12599 /* Expand the argument expressions. */
12600 if (TREE_PURPOSE (t))
12601 purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
12602 complain, in_decl);
12603 if (TREE_VALUE (t))
12604 valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
12605 complain, in_decl);
12607 /* Build the rest of the list. */
12608 chain = TREE_CHAIN (t);
12609 if (chain && chain != void_type_node)
12610 chain = RECUR (chain);
12612 /* Determine the number of arguments. */
12613 if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
12615 len = TREE_VEC_LENGTH (purposevec);
12616 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
12618 else if (TREE_CODE (valuevec) == TREE_VEC)
12619 len = TREE_VEC_LENGTH (valuevec);
12620 else
12622 /* Since we only performed a partial substitution into
12623 the argument pack, we only return a single list
12624 node. */
12625 if (purposevec == TREE_PURPOSE (t)
12626 && valuevec == TREE_VALUE (t)
12627 && chain == TREE_CHAIN (t))
12628 return t;
12630 return tree_cons (purposevec, valuevec, chain);
12633 /* Convert the argument vectors into a TREE_LIST */
12634 i = len;
12635 while (i > 0)
12637 /* Grab the Ith values. */
12638 i--;
12639 purpose = purposevec ? TREE_VEC_ELT (purposevec, i)
12640 : NULL_TREE;
12641 value
12642 = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i))
12643 : NULL_TREE;
12645 /* Build the list (backwards). */
12646 chain = tree_cons (purpose, value, chain);
12649 return chain;
12652 purpose = TREE_PURPOSE (t);
12653 if (purpose)
12654 purpose = RECUR (purpose);
12655 value = TREE_VALUE (t);
12656 if (value)
12657 value = RECUR (value);
12658 chain = TREE_CHAIN (t);
12659 if (chain && chain != void_type_node)
12660 chain = RECUR (chain);
12661 if (purpose == TREE_PURPOSE (t)
12662 && value == TREE_VALUE (t)
12663 && chain == TREE_CHAIN (t))
12664 return t;
12665 return tree_cons (purpose, value, chain);
12668 case COMPONENT_REF:
12670 tree object;
12671 tree object_type;
12672 tree member;
12674 object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
12675 args, complain, in_decl);
12676 /* Remember that there was a reference to this entity. */
12677 if (DECL_P (object))
12678 mark_used (object);
12679 object_type = TREE_TYPE (object);
12681 member = TREE_OPERAND (t, 1);
12682 if (BASELINK_P (member))
12683 member = tsubst_baselink (member,
12684 non_reference (TREE_TYPE (object)),
12685 args, complain, in_decl);
12686 else
12687 member = tsubst_copy (member, args, complain, in_decl);
12688 if (member == error_mark_node)
12689 return error_mark_node;
12691 if (object_type && !CLASS_TYPE_P (object_type))
12693 if (SCALAR_TYPE_P (object_type))
12695 tree s = NULL_TREE;
12696 tree dtor = member;
12698 if (TREE_CODE (dtor) == SCOPE_REF)
12700 s = TREE_OPERAND (dtor, 0);
12701 dtor = TREE_OPERAND (dtor, 1);
12703 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
12705 dtor = TREE_OPERAND (dtor, 0);
12706 if (TYPE_P (dtor))
12707 return finish_pseudo_destructor_expr (object, s, dtor);
12711 else if (TREE_CODE (member) == SCOPE_REF
12712 && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
12714 tree tmpl;
12715 tree args;
12717 /* Lookup the template functions now that we know what the
12718 scope is. */
12719 tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
12720 args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
12721 member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
12722 /*is_type_p=*/false,
12723 /*complain=*/false);
12724 if (BASELINK_P (member))
12726 BASELINK_FUNCTIONS (member)
12727 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
12728 args);
12729 member = (adjust_result_of_qualified_name_lookup
12730 (member, BINFO_TYPE (BASELINK_BINFO (member)),
12731 object_type));
12733 else
12735 qualified_name_lookup_error (object_type, tmpl, member,
12736 input_location);
12737 return error_mark_node;
12740 else if (TREE_CODE (member) == SCOPE_REF
12741 && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
12742 && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
12744 if (complain & tf_error)
12746 if (TYPE_P (TREE_OPERAND (member, 0)))
12747 error ("%qT is not a class or namespace",
12748 TREE_OPERAND (member, 0));
12749 else
12750 error ("%qD is not a class or namespace",
12751 TREE_OPERAND (member, 0));
12753 return error_mark_node;
12755 else if (TREE_CODE (member) == FIELD_DECL)
12756 return finish_non_static_data_member (member, object, NULL_TREE);
12758 return finish_class_member_access_expr (object, member,
12759 /*template_p=*/false,
12760 complain);
12763 case THROW_EXPR:
12764 return build_throw
12765 (RECUR (TREE_OPERAND (t, 0)));
12767 case CONSTRUCTOR:
12769 VEC(constructor_elt,gc) *n;
12770 constructor_elt *ce;
12771 unsigned HOST_WIDE_INT idx;
12772 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12773 bool process_index_p;
12774 int newlen;
12775 bool need_copy_p = false;
12776 tree r;
12778 if (type == error_mark_node)
12779 return error_mark_node;
12781 /* digest_init will do the wrong thing if we let it. */
12782 if (type && TYPE_PTRMEMFUNC_P (type))
12783 return t;
12785 /* We do not want to process the index of aggregate
12786 initializers as they are identifier nodes which will be
12787 looked up by digest_init. */
12788 process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
12790 n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
12791 newlen = VEC_length (constructor_elt, n);
12792 for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
12794 if (ce->index && process_index_p)
12795 ce->index = RECUR (ce->index);
12797 if (PACK_EXPANSION_P (ce->value))
12799 /* Substitute into the pack expansion. */
12800 ce->value = tsubst_pack_expansion (ce->value, args, complain,
12801 in_decl);
12803 if (ce->value == error_mark_node)
12805 else if (TREE_VEC_LENGTH (ce->value) == 1)
12806 /* Just move the argument into place. */
12807 ce->value = TREE_VEC_ELT (ce->value, 0);
12808 else
12810 /* Update the length of the final CONSTRUCTOR
12811 arguments vector, and note that we will need to
12812 copy.*/
12813 newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
12814 need_copy_p = true;
12817 else
12818 ce->value = RECUR (ce->value);
12821 if (need_copy_p)
12823 VEC(constructor_elt,gc) *old_n = n;
12825 n = VEC_alloc (constructor_elt, gc, newlen);
12826 for (idx = 0; VEC_iterate (constructor_elt, old_n, idx, ce);
12827 idx++)
12829 if (TREE_CODE (ce->value) == TREE_VEC)
12831 int i, len = TREE_VEC_LENGTH (ce->value);
12832 for (i = 0; i < len; ++i)
12833 CONSTRUCTOR_APPEND_ELT (n, 0,
12834 TREE_VEC_ELT (ce->value, i));
12836 else
12837 CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
12841 r = build_constructor (init_list_type_node, n);
12842 CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
12844 if (TREE_HAS_CONSTRUCTOR (t))
12845 return finish_compound_literal (type, r);
12847 return r;
12850 case TYPEID_EXPR:
12852 tree operand_0 = RECUR (TREE_OPERAND (t, 0));
12853 if (TYPE_P (operand_0))
12854 return get_typeid (operand_0);
12855 return build_typeid (operand_0);
12858 case VAR_DECL:
12859 if (!args)
12860 return t;
12861 /* Fall through */
12863 case PARM_DECL:
12865 tree r = tsubst_copy (t, args, complain, in_decl);
12867 if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
12868 /* If the original type was a reference, we'll be wrapped in
12869 the appropriate INDIRECT_REF. */
12870 r = convert_from_reference (r);
12871 return r;
12874 case VA_ARG_EXPR:
12875 return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
12876 tsubst_copy (TREE_TYPE (t), args, complain,
12877 in_decl));
12879 case OFFSETOF_EXPR:
12880 return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
12882 case TRAIT_EXPR:
12884 tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
12885 complain, in_decl);
12887 tree type2 = TRAIT_EXPR_TYPE2 (t);
12888 if (type2)
12889 type2 = tsubst_copy (type2, args, complain, in_decl);
12891 return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
12894 case STMT_EXPR:
12896 tree old_stmt_expr = cur_stmt_expr;
12897 tree stmt_expr = begin_stmt_expr ();
12899 cur_stmt_expr = stmt_expr;
12900 tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
12901 integral_constant_expression_p);
12902 stmt_expr = finish_stmt_expr (stmt_expr, false);
12903 cur_stmt_expr = old_stmt_expr;
12905 /* If the resulting list of expression statement is empty,
12906 fold it further into void_zero_node. */
12907 if (empty_expr_stmt_p (stmt_expr))
12908 stmt_expr = void_zero_node;
12910 return stmt_expr;
12913 case CONST_DECL:
12914 t = tsubst_copy (t, args, complain, in_decl);
12915 /* As in finish_id_expression, we resolve enumeration constants
12916 to their underlying values. */
12917 if (TREE_CODE (t) == CONST_DECL)
12919 used_types_insert (TREE_TYPE (t));
12920 return DECL_INITIAL (t);
12922 return t;
12924 case LAMBDA_EXPR:
12926 tree r = build_lambda_expr ();
12928 tree type = tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
12929 TREE_TYPE (r) = type;
12930 CLASSTYPE_LAMBDA_EXPR (type) = r;
12932 LAMBDA_EXPR_LOCATION (r)
12933 = LAMBDA_EXPR_LOCATION (t);
12934 LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
12935 = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
12936 LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
12937 LAMBDA_EXPR_DISCRIMINATOR (r)
12938 = (LAMBDA_EXPR_DISCRIMINATOR (t));
12939 LAMBDA_EXPR_CAPTURE_LIST (r)
12940 = RECUR (LAMBDA_EXPR_CAPTURE_LIST (t));
12941 LAMBDA_EXPR_THIS_CAPTURE (r)
12942 = RECUR (LAMBDA_EXPR_THIS_CAPTURE (t));
12943 LAMBDA_EXPR_EXTRA_SCOPE (r)
12944 = RECUR (LAMBDA_EXPR_EXTRA_SCOPE (t));
12946 /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set. */
12947 determine_visibility (TYPE_NAME (type));
12948 /* Now that we know visibility, instantiate the type so we have a
12949 declaration of the op() for later calls to lambda_function. */
12950 complete_type (type);
12952 type = tsubst (LAMBDA_EXPR_RETURN_TYPE (t), args, complain, in_decl);
12953 if (type)
12954 apply_lambda_return_type (r, type);
12956 return build_lambda_object (r);
12959 default:
12960 /* Handle Objective-C++ constructs, if appropriate. */
12962 tree subst
12963 = objcp_tsubst_copy_and_build (t, args, complain,
12964 in_decl, /*function_p=*/false);
12965 if (subst)
12966 return subst;
12968 return tsubst_copy (t, args, complain, in_decl);
12971 #undef RECUR
12974 /* Verify that the instantiated ARGS are valid. For type arguments,
12975 make sure that the type's linkage is ok. For non-type arguments,
12976 make sure they are constants if they are integral or enumerations.
12977 Emit an error under control of COMPLAIN, and return TRUE on error. */
12979 static bool
12980 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
12982 if (ARGUMENT_PACK_P (t))
12984 tree vec = ARGUMENT_PACK_ARGS (t);
12985 int len = TREE_VEC_LENGTH (vec);
12986 bool result = false;
12987 int i;
12989 for (i = 0; i < len; ++i)
12990 if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
12991 result = true;
12992 return result;
12994 else if (TYPE_P (t))
12996 /* [basic.link]: A name with no linkage (notably, the name
12997 of a class or enumeration declared in a local scope)
12998 shall not be used to declare an entity with linkage.
12999 This implies that names with no linkage cannot be used as
13000 template arguments
13002 DR 757 relaxes this restriction for C++0x. */
13003 tree nt = (cxx_dialect > cxx98 ? NULL_TREE
13004 : no_linkage_check (t, /*relaxed_p=*/false));
13006 if (nt)
13008 /* DR 488 makes use of a type with no linkage cause
13009 type deduction to fail. */
13010 if (complain & tf_error)
13012 if (TYPE_ANONYMOUS_P (nt))
13013 error ("%qT is/uses anonymous type", t);
13014 else
13015 error ("template argument for %qD uses local type %qT",
13016 tmpl, t);
13018 return true;
13020 /* In order to avoid all sorts of complications, we do not
13021 allow variably-modified types as template arguments. */
13022 else if (variably_modified_type_p (t, NULL_TREE))
13024 if (complain & tf_error)
13025 error ("%qT is a variably modified type", t);
13026 return true;
13029 /* A non-type argument of integral or enumerated type must be a
13030 constant. */
13031 else if (TREE_TYPE (t)
13032 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
13033 && !TREE_CONSTANT (t))
13035 if (complain & tf_error)
13036 error ("integral expression %qE is not constant", t);
13037 return true;
13039 return false;
13042 static bool
13043 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
13045 int ix, len = DECL_NTPARMS (tmpl);
13046 bool result = false;
13048 for (ix = 0; ix != len; ix++)
13050 if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
13051 result = true;
13053 if (result && (complain & tf_error))
13054 error (" trying to instantiate %qD", tmpl);
13055 return result;
13058 /* Instantiate the indicated variable or function template TMPL with
13059 the template arguments in TARG_PTR. */
13061 tree
13062 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
13064 tree targ_ptr = orig_args;
13065 tree fndecl;
13066 tree gen_tmpl;
13067 tree spec;
13068 HOST_WIDE_INT saved_processing_template_decl;
13070 if (tmpl == error_mark_node)
13071 return error_mark_node;
13073 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
13075 /* If this function is a clone, handle it specially. */
13076 if (DECL_CLONED_FUNCTION_P (tmpl))
13078 tree spec;
13079 tree clone;
13081 /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
13082 DECL_CLONED_FUNCTION. */
13083 spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
13084 targ_ptr, complain);
13085 if (spec == error_mark_node)
13086 return error_mark_node;
13088 /* Look for the clone. */
13089 FOR_EACH_CLONE (clone, spec)
13090 if (DECL_NAME (clone) == DECL_NAME (tmpl))
13091 return clone;
13092 /* We should always have found the clone by now. */
13093 gcc_unreachable ();
13094 return NULL_TREE;
13097 /* Check to see if we already have this specialization. */
13098 gen_tmpl = most_general_template (tmpl);
13099 if (tmpl != gen_tmpl)
13100 /* The TMPL is a partial instantiation. To get a full set of
13101 arguments we must add the arguments used to perform the
13102 partial instantiation. */
13103 targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
13104 targ_ptr);
13106 /* It would be nice to avoid hashing here and then again in tsubst_decl,
13107 but it doesn't seem to be on the hot path. */
13108 spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
13110 gcc_assert (tmpl == gen_tmpl
13111 || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
13112 == spec)
13113 || fndecl == NULL_TREE);
13115 if (spec != NULL_TREE)
13116 return spec;
13118 if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
13119 complain))
13120 return error_mark_node;
13122 /* We are building a FUNCTION_DECL, during which the access of its
13123 parameters and return types have to be checked. However this
13124 FUNCTION_DECL which is the desired context for access checking
13125 is not built yet. We solve this chicken-and-egg problem by
13126 deferring all checks until we have the FUNCTION_DECL. */
13127 push_deferring_access_checks (dk_deferred);
13129 /* Although PROCESSING_TEMPLATE_DECL may be true at this point
13130 (because, for example, we have encountered a non-dependent
13131 function call in the body of a template function and must now
13132 determine which of several overloaded functions will be called),
13133 within the instantiation itself we are not processing a
13134 template. */
13135 saved_processing_template_decl = processing_template_decl;
13136 processing_template_decl = 0;
13137 /* Substitute template parameters to obtain the specialization. */
13138 fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
13139 targ_ptr, complain, gen_tmpl);
13140 processing_template_decl = saved_processing_template_decl;
13141 if (fndecl == error_mark_node)
13142 return error_mark_node;
13144 /* Now we know the specialization, compute access previously
13145 deferred. */
13146 push_access_scope (fndecl);
13148 /* Some typedefs referenced from within the template code need to be access
13149 checked at template instantiation time, i.e now. These types were
13150 added to the template at parsing time. Let's get those and perfom
13151 the acces checks then. */
13152 perform_typedefs_access_check (DECL_TEMPLATE_RESULT (tmpl), targ_ptr);
13153 perform_deferred_access_checks ();
13154 pop_access_scope (fndecl);
13155 pop_deferring_access_checks ();
13157 /* The DECL_TI_TEMPLATE should always be the immediate parent
13158 template, not the most general template. */
13159 DECL_TI_TEMPLATE (fndecl) = tmpl;
13161 /* If we've just instantiated the main entry point for a function,
13162 instantiate all the alternate entry points as well. We do this
13163 by cloning the instantiation of the main entry point, not by
13164 instantiating the template clones. */
13165 if (DECL_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (DECL_CHAIN (gen_tmpl)))
13166 clone_function_decl (fndecl, /*update_method_vec_p=*/0);
13168 return fndecl;
13171 /* The FN is a TEMPLATE_DECL for a function. ARGS is an array with
13172 NARGS elements of the arguments that are being used when calling
13173 it. TARGS is a vector into which the deduced template arguments
13174 are placed.
13176 Return zero for success, 2 for an incomplete match that doesn't resolve
13177 all the types, and 1 for complete failure. An error message will be
13178 printed only for an incomplete match.
13180 If FN is a conversion operator, or we are trying to produce a specific
13181 specialization, RETURN_TYPE is the return type desired.
13183 The EXPLICIT_TARGS are explicit template arguments provided via a
13184 template-id.
13186 The parameter STRICT is one of:
13188 DEDUCE_CALL:
13189 We are deducing arguments for a function call, as in
13190 [temp.deduct.call].
13192 DEDUCE_CONV:
13193 We are deducing arguments for a conversion function, as in
13194 [temp.deduct.conv].
13196 DEDUCE_EXACT:
13197 We are deducing arguments when doing an explicit instantiation
13198 as in [temp.explicit], when determining an explicit specialization
13199 as in [temp.expl.spec], or when taking the address of a function
13200 template, as in [temp.deduct.funcaddr]. */
13203 fn_type_unification (tree fn,
13204 tree explicit_targs,
13205 tree targs,
13206 const tree *args,
13207 unsigned int nargs,
13208 tree return_type,
13209 unification_kind_t strict,
13210 int flags)
13212 tree parms;
13213 tree fntype;
13214 int result;
13215 bool incomplete_argument_packs_p = false;
13217 gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
13219 fntype = TREE_TYPE (fn);
13220 if (explicit_targs)
13222 /* [temp.deduct]
13224 The specified template arguments must match the template
13225 parameters in kind (i.e., type, nontype, template), and there
13226 must not be more arguments than there are parameters;
13227 otherwise type deduction fails.
13229 Nontype arguments must match the types of the corresponding
13230 nontype template parameters, or must be convertible to the
13231 types of the corresponding nontype parameters as specified in
13232 _temp.arg.nontype_, otherwise type deduction fails.
13234 All references in the function type of the function template
13235 to the corresponding template parameters are replaced by the
13236 specified template argument values. If a substitution in a
13237 template parameter or in the function type of the function
13238 template results in an invalid type, type deduction fails. */
13239 tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
13240 int i, len = TREE_VEC_LENGTH (tparms);
13241 tree converted_args;
13242 bool incomplete = false;
13244 if (explicit_targs == error_mark_node)
13245 return 1;
13247 converted_args
13248 = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
13249 /*require_all_args=*/false,
13250 /*use_default_args=*/false));
13251 if (converted_args == error_mark_node)
13252 return 1;
13254 /* Substitute the explicit args into the function type. This is
13255 necessary so that, for instance, explicitly declared function
13256 arguments can match null pointed constants. If we were given
13257 an incomplete set of explicit args, we must not do semantic
13258 processing during substitution as we could create partial
13259 instantiations. */
13260 for (i = 0; i < len; i++)
13262 tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
13263 bool parameter_pack = false;
13265 /* Dig out the actual parm. */
13266 if (TREE_CODE (parm) == TYPE_DECL
13267 || TREE_CODE (parm) == TEMPLATE_DECL)
13269 parm = TREE_TYPE (parm);
13270 parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
13272 else if (TREE_CODE (parm) == PARM_DECL)
13274 parm = DECL_INITIAL (parm);
13275 parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
13278 if (parameter_pack)
13280 int level, idx;
13281 tree targ;
13282 template_parm_level_and_index (parm, &level, &idx);
13284 /* Mark the argument pack as "incomplete". We could
13285 still deduce more arguments during unification. */
13286 targ = TMPL_ARG (converted_args, level, idx);
13287 if (targ)
13289 ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
13290 ARGUMENT_PACK_EXPLICIT_ARGS (targ)
13291 = ARGUMENT_PACK_ARGS (targ);
13294 /* We have some incomplete argument packs. */
13295 incomplete_argument_packs_p = true;
13299 if (incomplete_argument_packs_p)
13300 /* Any substitution is guaranteed to be incomplete if there
13301 are incomplete argument packs, because we can still deduce
13302 more arguments. */
13303 incomplete = 1;
13304 else
13305 incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
13307 processing_template_decl += incomplete;
13308 fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
13309 processing_template_decl -= incomplete;
13311 if (fntype == error_mark_node)
13312 return 1;
13314 /* Place the explicitly specified arguments in TARGS. */
13315 for (i = NUM_TMPL_ARGS (converted_args); i--;)
13316 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
13319 /* Never do unification on the 'this' parameter. */
13320 parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
13322 if (return_type)
13324 tree *new_args;
13326 parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
13327 new_args = XALLOCAVEC (tree, nargs + 1);
13328 new_args[0] = return_type;
13329 memcpy (new_args + 1, args, nargs * sizeof (tree));
13330 args = new_args;
13331 ++nargs;
13334 /* We allow incomplete unification without an error message here
13335 because the standard doesn't seem to explicitly prohibit it. Our
13336 callers must be ready to deal with unification failures in any
13337 event. */
13338 result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
13339 targs, parms, args, nargs, /*subr=*/0,
13340 strict, flags);
13342 if (result == 0 && incomplete_argument_packs_p)
13344 int i, len = NUM_TMPL_ARGS (targs);
13346 /* Clear the "incomplete" flags on all argument packs. */
13347 for (i = 0; i < len; i++)
13349 tree arg = TREE_VEC_ELT (targs, i);
13350 if (ARGUMENT_PACK_P (arg))
13352 ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
13353 ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
13358 /* Now that we have bindings for all of the template arguments,
13359 ensure that the arguments deduced for the template template
13360 parameters have compatible template parameter lists. We cannot
13361 check this property before we have deduced all template
13362 arguments, because the template parameter types of a template
13363 template parameter might depend on prior template parameters
13364 deduced after the template template parameter. The following
13365 ill-formed example illustrates this issue:
13367 template<typename T, template<T> class C> void f(C<5>, T);
13369 template<int N> struct X {};
13371 void g() {
13372 f(X<5>(), 5l); // error: template argument deduction fails
13375 The template parameter list of 'C' depends on the template type
13376 parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
13377 'long'. Thus, we can't check that 'C' cannot bind to 'X' at the
13378 time that we deduce 'C'. */
13379 if (result == 0
13380 && !template_template_parm_bindings_ok_p
13381 (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
13382 return 1;
13384 if (result == 0)
13385 /* All is well so far. Now, check:
13387 [temp.deduct]
13389 When all template arguments have been deduced, all uses of
13390 template parameters in nondeduced contexts are replaced with
13391 the corresponding deduced argument values. If the
13392 substitution results in an invalid type, as described above,
13393 type deduction fails. */
13395 tree substed = tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE);
13396 if (substed == error_mark_node)
13397 return 1;
13399 /* If we're looking for an exact match, check that what we got
13400 is indeed an exact match. It might not be if some template
13401 parameters are used in non-deduced contexts. */
13402 if (strict == DEDUCE_EXACT)
13404 unsigned int i;
13406 tree sarg
13407 = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (substed));
13408 if (return_type)
13409 sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
13410 for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
13411 if (!same_type_p (args[i], TREE_VALUE (sarg)))
13412 return 1;
13416 return result;
13419 /* Adjust types before performing type deduction, as described in
13420 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
13421 sections are symmetric. PARM is the type of a function parameter
13422 or the return type of the conversion function. ARG is the type of
13423 the argument passed to the call, or the type of the value
13424 initialized with the result of the conversion function.
13425 ARG_EXPR is the original argument expression, which may be null. */
13427 static int
13428 maybe_adjust_types_for_deduction (unification_kind_t strict,
13429 tree* parm,
13430 tree* arg,
13431 tree arg_expr)
13433 int result = 0;
13435 switch (strict)
13437 case DEDUCE_CALL:
13438 break;
13440 case DEDUCE_CONV:
13442 /* Swap PARM and ARG throughout the remainder of this
13443 function; the handling is precisely symmetric since PARM
13444 will initialize ARG rather than vice versa. */
13445 tree* temp = parm;
13446 parm = arg;
13447 arg = temp;
13448 break;
13451 case DEDUCE_EXACT:
13452 /* Core issue #873: Do the DR606 thing (see below) for these cases,
13453 too, but here handle it by stripping the reference from PARM
13454 rather than by adding it to ARG. */
13455 if (TREE_CODE (*parm) == REFERENCE_TYPE
13456 && TYPE_REF_IS_RVALUE (*parm)
13457 && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
13458 && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
13459 && TREE_CODE (*arg) == REFERENCE_TYPE
13460 && !TYPE_REF_IS_RVALUE (*arg))
13461 *parm = TREE_TYPE (*parm);
13462 /* Nothing else to do in this case. */
13463 return 0;
13465 default:
13466 gcc_unreachable ();
13469 if (TREE_CODE (*parm) != REFERENCE_TYPE)
13471 /* [temp.deduct.call]
13473 If P is not a reference type:
13475 --If A is an array type, the pointer type produced by the
13476 array-to-pointer standard conversion (_conv.array_) is
13477 used in place of A for type deduction; otherwise,
13479 --If A is a function type, the pointer type produced by
13480 the function-to-pointer standard conversion
13481 (_conv.func_) is used in place of A for type deduction;
13482 otherwise,
13484 --If A is a cv-qualified type, the top level
13485 cv-qualifiers of A's type are ignored for type
13486 deduction. */
13487 if (TREE_CODE (*arg) == ARRAY_TYPE)
13488 *arg = build_pointer_type (TREE_TYPE (*arg));
13489 else if (TREE_CODE (*arg) == FUNCTION_TYPE)
13490 *arg = build_pointer_type (*arg);
13491 else
13492 *arg = TYPE_MAIN_VARIANT (*arg);
13495 /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
13496 of the form T&&, where T is a template parameter, and the argument
13497 is an lvalue, T is deduced as A& */
13498 if (TREE_CODE (*parm) == REFERENCE_TYPE
13499 && TYPE_REF_IS_RVALUE (*parm)
13500 && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
13501 && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
13502 && arg_expr && real_lvalue_p (arg_expr))
13503 *arg = build_reference_type (*arg);
13505 /* [temp.deduct.call]
13507 If P is a cv-qualified type, the top level cv-qualifiers
13508 of P's type are ignored for type deduction. If P is a
13509 reference type, the type referred to by P is used for
13510 type deduction. */
13511 *parm = TYPE_MAIN_VARIANT (*parm);
13512 if (TREE_CODE (*parm) == REFERENCE_TYPE)
13514 *parm = TREE_TYPE (*parm);
13515 result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
13518 /* DR 322. For conversion deduction, remove a reference type on parm
13519 too (which has been swapped into ARG). */
13520 if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
13521 *arg = TREE_TYPE (*arg);
13523 return result;
13526 /* Most parms like fn_type_unification.
13528 If SUBR is 1, we're being called recursively (to unify the
13529 arguments of a function or method parameter of a function
13530 template). */
13532 static int
13533 type_unification_real (tree tparms,
13534 tree targs,
13535 tree xparms,
13536 const tree *xargs,
13537 unsigned int xnargs,
13538 int subr,
13539 unification_kind_t strict,
13540 int flags)
13542 tree parm, arg, arg_expr;
13543 int i;
13544 int ntparms = TREE_VEC_LENGTH (tparms);
13545 int sub_strict;
13546 int saw_undeduced = 0;
13547 tree parms;
13548 const tree *args;
13549 unsigned int nargs;
13550 unsigned int ia;
13552 gcc_assert (TREE_CODE (tparms) == TREE_VEC);
13553 gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
13554 gcc_assert (ntparms > 0);
13556 /* Reset the number of non-defaulted template arguments contained
13557 in in TARGS. */
13558 NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
13560 switch (strict)
13562 case DEDUCE_CALL:
13563 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
13564 | UNIFY_ALLOW_DERIVED);
13565 break;
13567 case DEDUCE_CONV:
13568 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
13569 break;
13571 case DEDUCE_EXACT:
13572 sub_strict = UNIFY_ALLOW_NONE;
13573 break;
13575 default:
13576 gcc_unreachable ();
13579 again:
13580 parms = xparms;
13581 args = xargs;
13582 nargs = xnargs;
13584 ia = 0;
13585 while (parms && parms != void_list_node
13586 && ia < nargs)
13588 if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
13589 break;
13591 parm = TREE_VALUE (parms);
13592 parms = TREE_CHAIN (parms);
13593 arg = args[ia];
13594 ++ia;
13595 arg_expr = NULL;
13597 if (arg == error_mark_node)
13598 return 1;
13599 if (arg == unknown_type_node)
13600 /* We can't deduce anything from this, but we might get all the
13601 template args from other function args. */
13602 continue;
13604 /* Conversions will be performed on a function argument that
13605 corresponds with a function parameter that contains only
13606 non-deducible template parameters and explicitly specified
13607 template parameters. */
13608 if (!uses_template_parms (parm))
13610 tree type;
13612 if (!TYPE_P (arg))
13613 type = TREE_TYPE (arg);
13614 else
13615 type = arg;
13617 if (same_type_p (parm, type))
13618 continue;
13619 if (strict != DEDUCE_EXACT
13620 && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
13621 flags))
13622 continue;
13624 return 1;
13627 if (!TYPE_P (arg))
13629 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
13630 if (type_unknown_p (arg))
13632 /* [temp.deduct.type]
13634 A template-argument can be deduced from a pointer to
13635 function or pointer to member function argument if
13636 the set of overloaded functions does not contain
13637 function templates and at most one of a set of
13638 overloaded functions provides a unique match. */
13639 if (resolve_overloaded_unification
13640 (tparms, targs, parm, arg, strict, sub_strict))
13641 continue;
13643 return 1;
13645 arg_expr = arg;
13646 arg = unlowered_expr_type (arg);
13647 if (arg == error_mark_node)
13648 return 1;
13652 int arg_strict = sub_strict;
13654 if (!subr)
13655 arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
13656 arg_expr);
13658 if (arg == init_list_type_node && arg_expr)
13659 arg = arg_expr;
13660 if (unify (tparms, targs, parm, arg, arg_strict))
13661 return 1;
13666 if (parms
13667 && parms != void_list_node
13668 && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
13670 /* Unify the remaining arguments with the pack expansion type. */
13671 tree argvec;
13672 tree parmvec = make_tree_vec (1);
13674 /* Allocate a TREE_VEC and copy in all of the arguments */
13675 argvec = make_tree_vec (nargs - ia);
13676 for (i = 0; ia < nargs; ++ia, ++i)
13677 TREE_VEC_ELT (argvec, i) = args[ia];
13679 /* Copy the parameter into parmvec. */
13680 TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
13681 if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
13682 /*call_args_p=*/true, /*subr=*/subr))
13683 return 1;
13685 /* Advance to the end of the list of parameters. */
13686 parms = TREE_CHAIN (parms);
13689 /* Fail if we've reached the end of the parm list, and more args
13690 are present, and the parm list isn't variadic. */
13691 if (ia < nargs && parms == void_list_node)
13692 return 1;
13693 /* Fail if parms are left and they don't have default values. */
13694 if (parms && parms != void_list_node
13695 && TREE_PURPOSE (parms) == NULL_TREE)
13696 return 1;
13698 if (!subr)
13699 for (i = 0; i < ntparms; i++)
13700 if (!TREE_VEC_ELT (targs, i))
13702 tree tparm;
13704 if (TREE_VEC_ELT (tparms, i) == error_mark_node)
13705 continue;
13707 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
13709 /* If this is an undeduced nontype parameter that depends on
13710 a type parameter, try another pass; its type may have been
13711 deduced from a later argument than the one from which
13712 this parameter can be deduced. */
13713 if (TREE_CODE (tparm) == PARM_DECL
13714 && uses_template_parms (TREE_TYPE (tparm))
13715 && !saw_undeduced++)
13716 goto again;
13718 /* Core issue #226 (C++0x) [temp.deduct]:
13720 If a template argument has not been deduced, its
13721 default template argument, if any, is used.
13723 When we are in C++98 mode, TREE_PURPOSE will either
13724 be NULL_TREE or ERROR_MARK_NODE, so we do not need
13725 to explicitly check cxx_dialect here. */
13726 if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
13728 tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
13729 tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i));
13730 arg = tsubst_template_arg (arg, targs, tf_none, NULL_TREE);
13731 arg = convert_template_argument (parm, arg, targs, tf_none,
13732 i, NULL_TREE);
13733 if (arg == error_mark_node)
13734 return 1;
13735 else
13737 TREE_VEC_ELT (targs, i) = arg;
13738 /* The position of the first default template argument,
13739 is also the number of non-defaulted arguments in TARGS.
13740 Record that. */
13741 if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
13742 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
13743 continue;
13747 /* If the type parameter is a parameter pack, then it will
13748 be deduced to an empty parameter pack. */
13749 if (template_parameter_pack_p (tparm))
13751 tree arg;
13753 if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
13755 arg = make_node (NONTYPE_ARGUMENT_PACK);
13756 TREE_TYPE (arg) = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
13757 TREE_CONSTANT (arg) = 1;
13759 else
13760 arg = cxx_make_type (TYPE_ARGUMENT_PACK);
13762 SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
13764 TREE_VEC_ELT (targs, i) = arg;
13765 continue;
13768 return 2;
13770 #ifdef ENABLE_CHECKING
13771 if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
13772 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
13773 #endif
13775 return 0;
13778 /* Subroutine of type_unification_real. Args are like the variables
13779 at the call site. ARG is an overloaded function (or template-id);
13780 we try deducing template args from each of the overloads, and if
13781 only one succeeds, we go with that. Modifies TARGS and returns
13782 true on success. */
13784 static bool
13785 resolve_overloaded_unification (tree tparms,
13786 tree targs,
13787 tree parm,
13788 tree arg,
13789 unification_kind_t strict,
13790 int sub_strict)
13792 tree tempargs = copy_node (targs);
13793 int good = 0;
13794 tree goodfn = NULL_TREE;
13795 bool addr_p;
13797 if (TREE_CODE (arg) == ADDR_EXPR)
13799 arg = TREE_OPERAND (arg, 0);
13800 addr_p = true;
13802 else
13803 addr_p = false;
13805 if (TREE_CODE (arg) == COMPONENT_REF)
13806 /* Handle `&x' where `x' is some static or non-static member
13807 function name. */
13808 arg = TREE_OPERAND (arg, 1);
13810 if (TREE_CODE (arg) == OFFSET_REF)
13811 arg = TREE_OPERAND (arg, 1);
13813 /* Strip baselink information. */
13814 if (BASELINK_P (arg))
13815 arg = BASELINK_FUNCTIONS (arg);
13817 if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
13819 /* If we got some explicit template args, we need to plug them into
13820 the affected templates before we try to unify, in case the
13821 explicit args will completely resolve the templates in question. */
13823 tree expl_subargs = TREE_OPERAND (arg, 1);
13824 arg = TREE_OPERAND (arg, 0);
13826 for (; arg; arg = OVL_NEXT (arg))
13828 tree fn = OVL_CURRENT (arg);
13829 tree subargs, elem;
13831 if (TREE_CODE (fn) != TEMPLATE_DECL)
13832 continue;
13834 ++processing_template_decl;
13835 subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
13836 expl_subargs, /*check_ret=*/false);
13837 if (subargs)
13839 elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
13840 if (try_one_overload (tparms, targs, tempargs, parm,
13841 elem, strict, sub_strict, addr_p)
13842 && (!goodfn || !decls_match (goodfn, elem)))
13844 goodfn = elem;
13845 ++good;
13848 --processing_template_decl;
13851 else if (TREE_CODE (arg) != OVERLOAD
13852 && TREE_CODE (arg) != FUNCTION_DECL)
13853 /* If ARG is, for example, "(0, &f)" then its type will be unknown
13854 -- but the deduction does not succeed because the expression is
13855 not just the function on its own. */
13856 return false;
13857 else
13858 for (; arg; arg = OVL_NEXT (arg))
13859 if (try_one_overload (tparms, targs, tempargs, parm,
13860 TREE_TYPE (OVL_CURRENT (arg)),
13861 strict, sub_strict, addr_p)
13862 && (!goodfn || !decls_match (goodfn, OVL_CURRENT (arg))))
13864 goodfn = OVL_CURRENT (arg);
13865 ++good;
13868 /* [temp.deduct.type] A template-argument can be deduced from a pointer
13869 to function or pointer to member function argument if the set of
13870 overloaded functions does not contain function templates and at most
13871 one of a set of overloaded functions provides a unique match.
13873 So if we found multiple possibilities, we return success but don't
13874 deduce anything. */
13876 if (good == 1)
13878 int i = TREE_VEC_LENGTH (targs);
13879 for (; i--; )
13880 if (TREE_VEC_ELT (tempargs, i))
13881 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
13883 if (good)
13884 return true;
13886 return false;
13889 /* Core DR 115: In contexts where deduction is done and fails, or in
13890 contexts where deduction is not done, if a template argument list is
13891 specified and it, along with any default template arguments, identifies
13892 a single function template specialization, then the template-id is an
13893 lvalue for the function template specialization. */
13895 tree
13896 resolve_nondeduced_context (tree orig_expr)
13898 tree expr, offset, baselink;
13899 bool addr;
13901 if (!type_unknown_p (orig_expr))
13902 return orig_expr;
13904 expr = orig_expr;
13905 addr = false;
13906 offset = NULL_TREE;
13907 baselink = NULL_TREE;
13909 if (TREE_CODE (expr) == ADDR_EXPR)
13911 expr = TREE_OPERAND (expr, 0);
13912 addr = true;
13914 if (TREE_CODE (expr) == OFFSET_REF)
13916 offset = expr;
13917 expr = TREE_OPERAND (expr, 1);
13919 if (TREE_CODE (expr) == BASELINK)
13921 baselink = expr;
13922 expr = BASELINK_FUNCTIONS (expr);
13925 if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
13927 int good = 0;
13928 tree goodfn = NULL_TREE;
13930 /* If we got some explicit template args, we need to plug them into
13931 the affected templates before we try to unify, in case the
13932 explicit args will completely resolve the templates in question. */
13934 tree expl_subargs = TREE_OPERAND (expr, 1);
13935 tree arg = TREE_OPERAND (expr, 0);
13936 tree badfn = NULL_TREE;
13937 tree badargs = NULL_TREE;
13939 for (; arg; arg = OVL_NEXT (arg))
13941 tree fn = OVL_CURRENT (arg);
13942 tree subargs, elem;
13944 if (TREE_CODE (fn) != TEMPLATE_DECL)
13945 continue;
13947 ++processing_template_decl;
13948 subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
13949 expl_subargs, /*check_ret=*/false);
13950 if (subargs && !any_dependent_template_arguments_p (subargs))
13952 elem = instantiate_template (fn, subargs, tf_none);
13953 if (elem == error_mark_node)
13955 badfn = fn;
13956 badargs = subargs;
13958 else if (elem && (!goodfn || !decls_match (goodfn, elem)))
13960 goodfn = elem;
13961 ++good;
13964 --processing_template_decl;
13966 if (good == 1)
13968 expr = goodfn;
13969 if (baselink)
13970 expr = build_baselink (BASELINK_BINFO (baselink),
13971 BASELINK_ACCESS_BINFO (baselink),
13972 expr, BASELINK_OPTYPE (baselink));
13973 if (offset)
13974 expr = build2 (OFFSET_REF, TREE_TYPE (expr),
13975 TREE_OPERAND (offset, 0), expr);
13976 if (addr)
13977 expr = build_address (expr);
13978 return expr;
13980 else if (good == 0 && badargs)
13981 /* There were no good options and at least one bad one, so let the
13982 user know what the problem is. */
13983 instantiate_template (badfn, badargs, tf_warning_or_error);
13985 return orig_expr;
13988 /* Subroutine of resolve_overloaded_unification; does deduction for a single
13989 overload. Fills TARGS with any deduced arguments, or error_mark_node if
13990 different overloads deduce different arguments for a given parm.
13991 ADDR_P is true if the expression for which deduction is being
13992 performed was of the form "& fn" rather than simply "fn".
13994 Returns 1 on success. */
13996 static int
13997 try_one_overload (tree tparms,
13998 tree orig_targs,
13999 tree targs,
14000 tree parm,
14001 tree arg,
14002 unification_kind_t strict,
14003 int sub_strict,
14004 bool addr_p)
14006 int nargs;
14007 tree tempargs;
14008 int i;
14010 /* [temp.deduct.type] A template-argument can be deduced from a pointer
14011 to function or pointer to member function argument if the set of
14012 overloaded functions does not contain function templates and at most
14013 one of a set of overloaded functions provides a unique match.
14015 So if this is a template, just return success. */
14017 if (uses_template_parms (arg))
14018 return 1;
14020 if (TREE_CODE (arg) == METHOD_TYPE)
14021 arg = build_ptrmemfunc_type (build_pointer_type (arg));
14022 else if (addr_p)
14023 arg = build_pointer_type (arg);
14025 sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
14027 /* We don't copy orig_targs for this because if we have already deduced
14028 some template args from previous args, unify would complain when we
14029 try to deduce a template parameter for the same argument, even though
14030 there isn't really a conflict. */
14031 nargs = TREE_VEC_LENGTH (targs);
14032 tempargs = make_tree_vec (nargs);
14034 if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
14035 return 0;
14037 /* First make sure we didn't deduce anything that conflicts with
14038 explicitly specified args. */
14039 for (i = nargs; i--; )
14041 tree elt = TREE_VEC_ELT (tempargs, i);
14042 tree oldelt = TREE_VEC_ELT (orig_targs, i);
14044 if (!elt)
14045 /*NOP*/;
14046 else if (uses_template_parms (elt))
14047 /* Since we're unifying against ourselves, we will fill in
14048 template args used in the function parm list with our own
14049 template parms. Discard them. */
14050 TREE_VEC_ELT (tempargs, i) = NULL_TREE;
14051 else if (oldelt && !template_args_equal (oldelt, elt))
14052 return 0;
14055 for (i = nargs; i--; )
14057 tree elt = TREE_VEC_ELT (tempargs, i);
14059 if (elt)
14060 TREE_VEC_ELT (targs, i) = elt;
14063 return 1;
14066 /* PARM is a template class (perhaps with unbound template
14067 parameters). ARG is a fully instantiated type. If ARG can be
14068 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
14069 TARGS are as for unify. */
14071 static tree
14072 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
14074 tree copy_of_targs;
14076 if (!CLASSTYPE_TEMPLATE_INFO (arg)
14077 || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
14078 != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
14079 return NULL_TREE;
14081 /* We need to make a new template argument vector for the call to
14082 unify. If we used TARGS, we'd clutter it up with the result of
14083 the attempted unification, even if this class didn't work out.
14084 We also don't want to commit ourselves to all the unifications
14085 we've already done, since unification is supposed to be done on
14086 an argument-by-argument basis. In other words, consider the
14087 following pathological case:
14089 template <int I, int J, int K>
14090 struct S {};
14092 template <int I, int J>
14093 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
14095 template <int I, int J, int K>
14096 void f(S<I, J, K>, S<I, I, I>);
14098 void g() {
14099 S<0, 0, 0> s0;
14100 S<0, 1, 2> s2;
14102 f(s0, s2);
14105 Now, by the time we consider the unification involving `s2', we
14106 already know that we must have `f<0, 0, 0>'. But, even though
14107 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
14108 because there are two ways to unify base classes of S<0, 1, 2>
14109 with S<I, I, I>. If we kept the already deduced knowledge, we
14110 would reject the possibility I=1. */
14111 copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
14113 /* If unification failed, we're done. */
14114 if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
14115 CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
14116 return NULL_TREE;
14118 return arg;
14121 /* Given a template type PARM and a class type ARG, find the unique
14122 base type in ARG that is an instance of PARM. We do not examine
14123 ARG itself; only its base-classes. If there is not exactly one
14124 appropriate base class, return NULL_TREE. PARM may be the type of
14125 a partial specialization, as well as a plain template type. Used
14126 by unify. */
14128 static tree
14129 get_template_base (tree tparms, tree targs, tree parm, tree arg)
14131 tree rval = NULL_TREE;
14132 tree binfo;
14134 gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
14136 binfo = TYPE_BINFO (complete_type (arg));
14137 if (!binfo)
14138 /* The type could not be completed. */
14139 return NULL_TREE;
14141 /* Walk in inheritance graph order. The search order is not
14142 important, and this avoids multiple walks of virtual bases. */
14143 for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
14145 tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
14147 if (r)
14149 /* If there is more than one satisfactory baseclass, then:
14151 [temp.deduct.call]
14153 If they yield more than one possible deduced A, the type
14154 deduction fails.
14156 applies. */
14157 if (rval && !same_type_p (r, rval))
14158 return NULL_TREE;
14160 rval = r;
14164 return rval;
14167 /* Returns the level of DECL, which declares a template parameter. */
14169 static int
14170 template_decl_level (tree decl)
14172 switch (TREE_CODE (decl))
14174 case TYPE_DECL:
14175 case TEMPLATE_DECL:
14176 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
14178 case PARM_DECL:
14179 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
14181 default:
14182 gcc_unreachable ();
14184 return 0;
14187 /* Decide whether ARG can be unified with PARM, considering only the
14188 cv-qualifiers of each type, given STRICT as documented for unify.
14189 Returns nonzero iff the unification is OK on that basis. */
14191 static int
14192 check_cv_quals_for_unify (int strict, tree arg, tree parm)
14194 int arg_quals = cp_type_quals (arg);
14195 int parm_quals = cp_type_quals (parm);
14197 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14198 && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
14200 /* Although a CVR qualifier is ignored when being applied to a
14201 substituted template parameter ([8.3.2]/1 for example), that
14202 does not allow us to unify "const T" with "int&" because both
14203 types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
14204 It is ok when we're allowing additional CV qualifiers
14205 at the outer level [14.8.2.1]/3,1st bullet. */
14206 if ((TREE_CODE (arg) == REFERENCE_TYPE
14207 || TREE_CODE (arg) == FUNCTION_TYPE
14208 || TREE_CODE (arg) == METHOD_TYPE)
14209 && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
14210 return 0;
14212 if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
14213 && (parm_quals & TYPE_QUAL_RESTRICT))
14214 return 0;
14217 if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
14218 && (arg_quals & parm_quals) != parm_quals)
14219 return 0;
14221 if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
14222 && (parm_quals & arg_quals) != arg_quals)
14223 return 0;
14225 return 1;
14228 /* Determines the LEVEL and INDEX for the template parameter PARM. */
14229 void
14230 template_parm_level_and_index (tree parm, int* level, int* index)
14232 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14233 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
14234 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
14236 *index = TEMPLATE_TYPE_IDX (parm);
14237 *level = TEMPLATE_TYPE_LEVEL (parm);
14239 else
14241 *index = TEMPLATE_PARM_IDX (parm);
14242 *level = TEMPLATE_PARM_LEVEL (parm);
14246 /* Unifies the remaining arguments in PACKED_ARGS with the pack
14247 expansion at the end of PACKED_PARMS. Returns 0 if the type
14248 deduction succeeds, 1 otherwise. STRICT is the same as in
14249 unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
14250 call argument list. We'll need to adjust the arguments to make them
14251 types. SUBR tells us if this is from a recursive call to
14252 type_unification_real. */
14254 unify_pack_expansion (tree tparms, tree targs, tree packed_parms,
14255 tree packed_args, int strict, bool call_args_p,
14256 bool subr)
14258 tree parm
14259 = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
14260 tree pattern = PACK_EXPANSION_PATTERN (parm);
14261 tree pack, packs = NULL_TREE;
14262 int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
14263 int len = TREE_VEC_LENGTH (packed_args);
14265 /* Determine the parameter packs we will be deducing from the
14266 pattern, and record their current deductions. */
14267 for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm);
14268 pack; pack = TREE_CHAIN (pack))
14270 tree parm_pack = TREE_VALUE (pack);
14271 int idx, level;
14273 /* Determine the index and level of this parameter pack. */
14274 template_parm_level_and_index (parm_pack, &level, &idx);
14276 /* Keep track of the parameter packs and their corresponding
14277 argument packs. */
14278 packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
14279 TREE_TYPE (packs) = make_tree_vec (len - start);
14282 /* Loop through all of the arguments that have not yet been
14283 unified and unify each with the pattern. */
14284 for (i = start; i < len; i++)
14286 tree parm = pattern;
14288 /* For each parameter pack, clear out the deduced value so that
14289 we can deduce it again. */
14290 for (pack = packs; pack; pack = TREE_CHAIN (pack))
14292 int idx, level;
14293 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
14295 TMPL_ARG (targs, level, idx) = NULL_TREE;
14298 /* Unify the pattern with the current argument. */
14300 tree arg = TREE_VEC_ELT (packed_args, i);
14301 tree arg_expr = NULL_TREE;
14302 int arg_strict = strict;
14303 bool skip_arg_p = false;
14305 if (call_args_p)
14307 int sub_strict;
14309 /* This mirrors what we do in type_unification_real. */
14310 switch (strict)
14312 case DEDUCE_CALL:
14313 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL
14314 | UNIFY_ALLOW_MORE_CV_QUAL
14315 | UNIFY_ALLOW_DERIVED);
14316 break;
14318 case DEDUCE_CONV:
14319 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
14320 break;
14322 case DEDUCE_EXACT:
14323 sub_strict = UNIFY_ALLOW_NONE;
14324 break;
14326 default:
14327 gcc_unreachable ();
14330 if (!TYPE_P (arg))
14332 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
14333 if (type_unknown_p (arg))
14335 /* [temp.deduct.type] A template-argument can be
14336 deduced from a pointer to function or pointer
14337 to member function argument if the set of
14338 overloaded functions does not contain function
14339 templates and at most one of a set of
14340 overloaded functions provides a unique
14341 match. */
14343 if (resolve_overloaded_unification
14344 (tparms, targs, parm, arg,
14345 (unification_kind_t) strict,
14346 sub_strict)
14347 != 0)
14348 return 1;
14349 skip_arg_p = true;
14352 if (!skip_arg_p)
14354 arg_expr = arg;
14355 arg = unlowered_expr_type (arg);
14356 if (arg == error_mark_node)
14357 return 1;
14361 arg_strict = sub_strict;
14363 if (!subr)
14364 arg_strict |=
14365 maybe_adjust_types_for_deduction ((unification_kind_t) strict,
14366 &parm, &arg, arg_expr);
14369 if (!skip_arg_p)
14371 /* For deduction from an init-list we need the actual list. */
14372 if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
14373 arg = arg_expr;
14374 if (unify (tparms, targs, parm, arg, arg_strict))
14375 return 1;
14379 /* For each parameter pack, collect the deduced value. */
14380 for (pack = packs; pack; pack = TREE_CHAIN (pack))
14382 int idx, level;
14383 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
14385 TREE_VEC_ELT (TREE_TYPE (pack), i - start) =
14386 TMPL_ARG (targs, level, idx);
14390 /* Verify that the results of unification with the parameter packs
14391 produce results consistent with what we've seen before, and make
14392 the deduced argument packs available. */
14393 for (pack = packs; pack; pack = TREE_CHAIN (pack))
14395 tree old_pack = TREE_VALUE (pack);
14396 tree new_args = TREE_TYPE (pack);
14397 int i, len = TREE_VEC_LENGTH (new_args);
14398 int idx, level;
14399 bool nondeduced_p = false;
14401 /* By default keep the original deduced argument pack.
14402 If necessary, more specific code is going to update the
14403 resulting deduced argument later down in this function. */
14404 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
14405 TMPL_ARG (targs, level, idx) = old_pack;
14407 /* If NEW_ARGS contains any NULL_TREE entries, we didn't
14408 actually deduce anything. */
14409 for (i = 0; i < len && !nondeduced_p; ++i)
14410 if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
14411 nondeduced_p = true;
14412 if (nondeduced_p)
14413 continue;
14415 if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
14417 /* Prepend the explicit arguments onto NEW_ARGS. */
14418 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
14419 tree old_args = new_args;
14420 int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
14421 int len = explicit_len + TREE_VEC_LENGTH (old_args);
14423 /* Copy the explicit arguments. */
14424 new_args = make_tree_vec (len);
14425 for (i = 0; i < explicit_len; i++)
14426 TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
14428 /* Copy the deduced arguments. */
14429 for (; i < len; i++)
14430 TREE_VEC_ELT (new_args, i) =
14431 TREE_VEC_ELT (old_args, i - explicit_len);
14434 if (!old_pack)
14436 tree result;
14437 /* Build the deduced *_ARGUMENT_PACK. */
14438 if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
14440 result = make_node (NONTYPE_ARGUMENT_PACK);
14441 TREE_TYPE (result) =
14442 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
14443 TREE_CONSTANT (result) = 1;
14445 else
14446 result = cxx_make_type (TYPE_ARGUMENT_PACK);
14448 SET_ARGUMENT_PACK_ARGS (result, new_args);
14450 /* Note the deduced argument packs for this parameter
14451 pack. */
14452 TMPL_ARG (targs, level, idx) = result;
14454 else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
14455 && (ARGUMENT_PACK_ARGS (old_pack)
14456 == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
14458 /* We only had the explicitly-provided arguments before, but
14459 now we have a complete set of arguments. */
14460 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
14462 SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
14463 ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
14464 ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
14466 else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
14467 new_args))
14468 /* Inconsistent unification of this parameter pack. */
14469 return 1;
14472 return 0;
14475 /* Deduce the value of template parameters. TPARMS is the (innermost)
14476 set of template parameters to a template. TARGS is the bindings
14477 for those template parameters, as determined thus far; TARGS may
14478 include template arguments for outer levels of template parameters
14479 as well. PARM is a parameter to a template function, or a
14480 subcomponent of that parameter; ARG is the corresponding argument.
14481 This function attempts to match PARM with ARG in a manner
14482 consistent with the existing assignments in TARGS. If more values
14483 are deduced, then TARGS is updated.
14485 Returns 0 if the type deduction succeeds, 1 otherwise. The
14486 parameter STRICT is a bitwise or of the following flags:
14488 UNIFY_ALLOW_NONE:
14489 Require an exact match between PARM and ARG.
14490 UNIFY_ALLOW_MORE_CV_QUAL:
14491 Allow the deduced ARG to be more cv-qualified (by qualification
14492 conversion) than ARG.
14493 UNIFY_ALLOW_LESS_CV_QUAL:
14494 Allow the deduced ARG to be less cv-qualified than ARG.
14495 UNIFY_ALLOW_DERIVED:
14496 Allow the deduced ARG to be a template base class of ARG,
14497 or a pointer to a template base class of the type pointed to by
14498 ARG.
14499 UNIFY_ALLOW_INTEGER:
14500 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
14501 case for more information.
14502 UNIFY_ALLOW_OUTER_LEVEL:
14503 This is the outermost level of a deduction. Used to determine validity
14504 of qualification conversions. A valid qualification conversion must
14505 have const qualified pointers leading up to the inner type which
14506 requires additional CV quals, except at the outer level, where const
14507 is not required [conv.qual]. It would be normal to set this flag in
14508 addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
14509 UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
14510 This is the outermost level of a deduction, and PARM can be more CV
14511 qualified at this point.
14512 UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
14513 This is the outermost level of a deduction, and PARM can be less CV
14514 qualified at this point. */
14516 static int
14517 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
14519 int idx;
14520 tree targ;
14521 tree tparm;
14522 int strict_in = strict;
14524 /* I don't think this will do the right thing with respect to types.
14525 But the only case I've seen it in so far has been array bounds, where
14526 signedness is the only information lost, and I think that will be
14527 okay. */
14528 while (TREE_CODE (parm) == NOP_EXPR)
14529 parm = TREE_OPERAND (parm, 0);
14531 if (arg == error_mark_node)
14532 return 1;
14533 if (arg == unknown_type_node
14534 || arg == init_list_type_node)
14535 /* We can't deduce anything from this, but we might get all the
14536 template args from other function args. */
14537 return 0;
14539 /* If PARM uses template parameters, then we can't bail out here,
14540 even if ARG == PARM, since we won't record unifications for the
14541 template parameters. We might need them if we're trying to
14542 figure out which of two things is more specialized. */
14543 if (arg == parm && !uses_template_parms (parm))
14544 return 0;
14546 /* Handle init lists early, so the rest of the function can assume
14547 we're dealing with a type. */
14548 if (BRACE_ENCLOSED_INITIALIZER_P (arg))
14550 tree elt, elttype;
14551 unsigned i;
14552 tree orig_parm = parm;
14554 /* Replace T with std::initializer_list<T> for deduction. */
14555 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14556 && flag_deduce_init_list)
14557 parm = listify (parm);
14559 if (!is_std_init_list (parm))
14560 /* We can only deduce from an initializer list argument if the
14561 parameter is std::initializer_list; otherwise this is a
14562 non-deduced context. */
14563 return 0;
14565 elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
14567 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
14569 int elt_strict = strict;
14571 if (elt == error_mark_node)
14572 return 1;
14574 if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
14576 tree type = TREE_TYPE (elt);
14577 /* It should only be possible to get here for a call. */
14578 gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
14579 elt_strict |= maybe_adjust_types_for_deduction
14580 (DEDUCE_CALL, &elttype, &type, elt);
14581 elt = type;
14584 if (unify (tparms, targs, elttype, elt, elt_strict))
14585 return 1;
14588 /* If the std::initializer_list<T> deduction worked, replace the
14589 deduced A with std::initializer_list<A>. */
14590 if (orig_parm != parm)
14592 idx = TEMPLATE_TYPE_IDX (orig_parm);
14593 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
14594 targ = listify (targ);
14595 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
14597 return 0;
14600 /* Immediately reject some pairs that won't unify because of
14601 cv-qualification mismatches. */
14602 if (TREE_CODE (arg) == TREE_CODE (parm)
14603 && TYPE_P (arg)
14604 /* It is the elements of the array which hold the cv quals of an array
14605 type, and the elements might be template type parms. We'll check
14606 when we recurse. */
14607 && TREE_CODE (arg) != ARRAY_TYPE
14608 /* We check the cv-qualifiers when unifying with template type
14609 parameters below. We want to allow ARG `const T' to unify with
14610 PARM `T' for example, when computing which of two templates
14611 is more specialized, for example. */
14612 && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
14613 && !check_cv_quals_for_unify (strict_in, arg, parm))
14614 return 1;
14616 if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
14617 && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
14618 strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
14619 strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
14620 strict &= ~UNIFY_ALLOW_DERIVED;
14621 strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
14622 strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
14624 switch (TREE_CODE (parm))
14626 case TYPENAME_TYPE:
14627 case SCOPE_REF:
14628 case UNBOUND_CLASS_TEMPLATE:
14629 /* In a type which contains a nested-name-specifier, template
14630 argument values cannot be deduced for template parameters used
14631 within the nested-name-specifier. */
14632 return 0;
14634 case TEMPLATE_TYPE_PARM:
14635 case TEMPLATE_TEMPLATE_PARM:
14636 case BOUND_TEMPLATE_TEMPLATE_PARM:
14637 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
14638 if (tparm == error_mark_node)
14639 return 1;
14641 if (TEMPLATE_TYPE_LEVEL (parm)
14642 != template_decl_level (tparm))
14643 /* The PARM is not one we're trying to unify. Just check
14644 to see if it matches ARG. */
14645 return (TREE_CODE (arg) == TREE_CODE (parm)
14646 && same_type_p (parm, arg)) ? 0 : 1;
14647 idx = TEMPLATE_TYPE_IDX (parm);
14648 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
14649 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
14651 /* Check for mixed types and values. */
14652 if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14653 && TREE_CODE (tparm) != TYPE_DECL)
14654 || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
14655 && TREE_CODE (tparm) != TEMPLATE_DECL))
14656 return 1;
14658 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
14660 /* ARG must be constructed from a template class or a template
14661 template parameter. */
14662 if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
14663 && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
14664 return 1;
14667 tree parmvec = TYPE_TI_ARGS (parm);
14668 tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
14669 tree parm_parms
14670 = DECL_INNERMOST_TEMPLATE_PARMS
14671 (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
14672 int i, len;
14673 int parm_variadic_p = 0;
14675 /* The resolution to DR150 makes clear that default
14676 arguments for an N-argument may not be used to bind T
14677 to a template template parameter with fewer than N
14678 parameters. It is not safe to permit the binding of
14679 default arguments as an extension, as that may change
14680 the meaning of a conforming program. Consider:
14682 struct Dense { static const unsigned int dim = 1; };
14684 template <template <typename> class View,
14685 typename Block>
14686 void operator+(float, View<Block> const&);
14688 template <typename Block,
14689 unsigned int Dim = Block::dim>
14690 struct Lvalue_proxy { operator float() const; };
14692 void
14693 test_1d (void) {
14694 Lvalue_proxy<Dense> p;
14695 float b;
14696 b + p;
14699 Here, if Lvalue_proxy is permitted to bind to View, then
14700 the global operator+ will be used; if they are not, the
14701 Lvalue_proxy will be converted to float. */
14702 if (coerce_template_parms (parm_parms,
14703 argvec,
14704 TYPE_TI_TEMPLATE (parm),
14705 tf_none,
14706 /*require_all_args=*/true,
14707 /*use_default_args=*/false)
14708 == error_mark_node)
14709 return 1;
14711 /* Deduce arguments T, i from TT<T> or TT<i>.
14712 We check each element of PARMVEC and ARGVEC individually
14713 rather than the whole TREE_VEC since they can have
14714 different number of elements. */
14716 parmvec = expand_template_argument_pack (parmvec);
14717 argvec = expand_template_argument_pack (argvec);
14719 len = TREE_VEC_LENGTH (parmvec);
14721 /* Check if the parameters end in a pack, making them
14722 variadic. */
14723 if (len > 0
14724 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
14725 parm_variadic_p = 1;
14727 if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
14728 return 1;
14730 for (i = 0; i < len - parm_variadic_p; ++i)
14732 if (unify (tparms, targs,
14733 TREE_VEC_ELT (parmvec, i),
14734 TREE_VEC_ELT (argvec, i),
14735 UNIFY_ALLOW_NONE))
14736 return 1;
14739 if (parm_variadic_p
14740 && unify_pack_expansion (tparms, targs,
14741 parmvec, argvec,
14742 UNIFY_ALLOW_NONE,
14743 /*call_args_p=*/false,
14744 /*subr=*/false))
14745 return 1;
14747 arg = TYPE_TI_TEMPLATE (arg);
14749 /* Fall through to deduce template name. */
14752 if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
14753 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
14755 /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>. */
14757 /* Simple cases: Value already set, does match or doesn't. */
14758 if (targ != NULL_TREE && template_args_equal (targ, arg))
14759 return 0;
14760 else if (targ)
14761 return 1;
14763 else
14765 /* If PARM is `const T' and ARG is only `int', we don't have
14766 a match unless we are allowing additional qualification.
14767 If ARG is `const int' and PARM is just `T' that's OK;
14768 that binds `const int' to `T'. */
14769 if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
14770 arg, parm))
14771 return 1;
14773 /* Consider the case where ARG is `const volatile int' and
14774 PARM is `const T'. Then, T should be `volatile int'. */
14775 arg = cp_build_qualified_type_real
14776 (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
14777 if (arg == error_mark_node)
14778 return 1;
14780 /* Simple cases: Value already set, does match or doesn't. */
14781 if (targ != NULL_TREE && same_type_p (targ, arg))
14782 return 0;
14783 else if (targ)
14784 return 1;
14786 /* Make sure that ARG is not a variable-sized array. (Note
14787 that were talking about variable-sized arrays (like
14788 `int[n]'), rather than arrays of unknown size (like
14789 `int[]').) We'll get very confused by such a type since
14790 the bound of the array will not be computable in an
14791 instantiation. Besides, such types are not allowed in
14792 ISO C++, so we can do as we please here. */
14793 if (variably_modified_type_p (arg, NULL_TREE))
14794 return 1;
14796 /* Strip typedefs as in convert_template_argument. */
14797 arg = strip_typedefs (arg);
14800 /* If ARG is a parameter pack or an expansion, we cannot unify
14801 against it unless PARM is also a parameter pack. */
14802 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
14803 && !template_parameter_pack_p (parm))
14804 return 1;
14806 /* If the argument deduction results is a METHOD_TYPE,
14807 then there is a problem.
14808 METHOD_TYPE doesn't map to any real C++ type the result of
14809 the deduction can not be of that type. */
14810 if (TREE_CODE (arg) == METHOD_TYPE)
14811 return 1;
14813 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
14814 return 0;
14816 case TEMPLATE_PARM_INDEX:
14817 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
14818 if (tparm == error_mark_node)
14819 return 1;
14821 if (TEMPLATE_PARM_LEVEL (parm)
14822 != template_decl_level (tparm))
14823 /* The PARM is not one we're trying to unify. Just check
14824 to see if it matches ARG. */
14825 return !(TREE_CODE (arg) == TREE_CODE (parm)
14826 && cp_tree_equal (parm, arg));
14828 idx = TEMPLATE_PARM_IDX (parm);
14829 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
14831 if (targ)
14832 return !cp_tree_equal (targ, arg);
14834 /* [temp.deduct.type] If, in the declaration of a function template
14835 with a non-type template-parameter, the non-type
14836 template-parameter is used in an expression in the function
14837 parameter-list and, if the corresponding template-argument is
14838 deduced, the template-argument type shall match the type of the
14839 template-parameter exactly, except that a template-argument
14840 deduced from an array bound may be of any integral type.
14841 The non-type parameter might use already deduced type parameters. */
14842 tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
14843 if (!TREE_TYPE (arg))
14844 /* Template-parameter dependent expression. Just accept it for now.
14845 It will later be processed in convert_template_argument. */
14847 else if (same_type_p (TREE_TYPE (arg), tparm))
14848 /* OK */;
14849 else if ((strict & UNIFY_ALLOW_INTEGER)
14850 && (TREE_CODE (tparm) == INTEGER_TYPE
14851 || TREE_CODE (tparm) == BOOLEAN_TYPE))
14852 /* Convert the ARG to the type of PARM; the deduced non-type
14853 template argument must exactly match the types of the
14854 corresponding parameter. */
14855 arg = fold (build_nop (tparm, arg));
14856 else if (uses_template_parms (tparm))
14857 /* We haven't deduced the type of this parameter yet. Try again
14858 later. */
14859 return 0;
14860 else
14861 return 1;
14863 /* If ARG is a parameter pack or an expansion, we cannot unify
14864 against it unless PARM is also a parameter pack. */
14865 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
14866 && !TEMPLATE_PARM_PARAMETER_PACK (parm))
14867 return 1;
14869 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
14870 return 0;
14872 case PTRMEM_CST:
14874 /* A pointer-to-member constant can be unified only with
14875 another constant. */
14876 if (TREE_CODE (arg) != PTRMEM_CST)
14877 return 1;
14879 /* Just unify the class member. It would be useless (and possibly
14880 wrong, depending on the strict flags) to unify also
14881 PTRMEM_CST_CLASS, because we want to be sure that both parm and
14882 arg refer to the same variable, even if through different
14883 classes. For instance:
14885 struct A { int x; };
14886 struct B : A { };
14888 Unification of &A::x and &B::x must succeed. */
14889 return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
14890 PTRMEM_CST_MEMBER (arg), strict);
14893 case POINTER_TYPE:
14895 if (TREE_CODE (arg) != POINTER_TYPE)
14896 return 1;
14898 /* [temp.deduct.call]
14900 A can be another pointer or pointer to member type that can
14901 be converted to the deduced A via a qualification
14902 conversion (_conv.qual_).
14904 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
14905 This will allow for additional cv-qualification of the
14906 pointed-to types if appropriate. */
14908 if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
14909 /* The derived-to-base conversion only persists through one
14910 level of pointers. */
14911 strict |= (strict_in & UNIFY_ALLOW_DERIVED);
14913 return unify (tparms, targs, TREE_TYPE (parm),
14914 TREE_TYPE (arg), strict);
14917 case REFERENCE_TYPE:
14918 if (TREE_CODE (arg) != REFERENCE_TYPE)
14919 return 1;
14920 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
14921 strict & UNIFY_ALLOW_MORE_CV_QUAL);
14923 case ARRAY_TYPE:
14924 if (TREE_CODE (arg) != ARRAY_TYPE)
14925 return 1;
14926 if ((TYPE_DOMAIN (parm) == NULL_TREE)
14927 != (TYPE_DOMAIN (arg) == NULL_TREE))
14928 return 1;
14929 if (TYPE_DOMAIN (parm) != NULL_TREE)
14931 tree parm_max;
14932 tree arg_max;
14933 bool parm_cst;
14934 bool arg_cst;
14936 /* Our representation of array types uses "N - 1" as the
14937 TYPE_MAX_VALUE for an array with "N" elements, if "N" is
14938 not an integer constant. We cannot unify arbitrarily
14939 complex expressions, so we eliminate the MINUS_EXPRs
14940 here. */
14941 parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
14942 parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
14943 if (!parm_cst)
14945 gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
14946 parm_max = TREE_OPERAND (parm_max, 0);
14948 arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
14949 arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
14950 if (!arg_cst)
14952 /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
14953 trying to unify the type of a variable with the type
14954 of a template parameter. For example:
14956 template <unsigned int N>
14957 void f (char (&) [N]);
14958 int g();
14959 void h(int i) {
14960 char a[g(i)];
14961 f(a);
14964 Here, the type of the ARG will be "int [g(i)]", and
14965 may be a SAVE_EXPR, etc. */
14966 if (TREE_CODE (arg_max) != MINUS_EXPR)
14967 return 1;
14968 arg_max = TREE_OPERAND (arg_max, 0);
14971 /* If only one of the bounds used a MINUS_EXPR, compensate
14972 by adding one to the other bound. */
14973 if (parm_cst && !arg_cst)
14974 parm_max = fold_build2_loc (input_location, PLUS_EXPR,
14975 integer_type_node,
14976 parm_max,
14977 integer_one_node);
14978 else if (arg_cst && !parm_cst)
14979 arg_max = fold_build2_loc (input_location, PLUS_EXPR,
14980 integer_type_node,
14981 arg_max,
14982 integer_one_node);
14984 if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
14985 return 1;
14987 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
14988 strict & UNIFY_ALLOW_MORE_CV_QUAL);
14990 case REAL_TYPE:
14991 case COMPLEX_TYPE:
14992 case VECTOR_TYPE:
14993 case INTEGER_TYPE:
14994 case BOOLEAN_TYPE:
14995 case ENUMERAL_TYPE:
14996 case VOID_TYPE:
14997 if (TREE_CODE (arg) != TREE_CODE (parm))
14998 return 1;
15000 /* We have already checked cv-qualification at the top of the
15001 function. */
15002 if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
15003 return 1;
15005 /* As far as unification is concerned, this wins. Later checks
15006 will invalidate it if necessary. */
15007 return 0;
15009 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
15010 /* Type INTEGER_CST can come from ordinary constant template args. */
15011 case INTEGER_CST:
15012 while (TREE_CODE (arg) == NOP_EXPR)
15013 arg = TREE_OPERAND (arg, 0);
15015 if (TREE_CODE (arg) != INTEGER_CST)
15016 return 1;
15017 return !tree_int_cst_equal (parm, arg);
15019 case TREE_VEC:
15021 int i;
15022 if (TREE_CODE (arg) != TREE_VEC)
15023 return 1;
15024 if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
15025 return 1;
15026 for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
15027 if (unify (tparms, targs,
15028 TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
15029 UNIFY_ALLOW_NONE))
15030 return 1;
15031 return 0;
15034 case RECORD_TYPE:
15035 case UNION_TYPE:
15036 if (TREE_CODE (arg) != TREE_CODE (parm))
15037 return 1;
15039 if (TYPE_PTRMEMFUNC_P (parm))
15041 if (!TYPE_PTRMEMFUNC_P (arg))
15042 return 1;
15044 return unify (tparms, targs,
15045 TYPE_PTRMEMFUNC_FN_TYPE (parm),
15046 TYPE_PTRMEMFUNC_FN_TYPE (arg),
15047 strict);
15050 if (CLASSTYPE_TEMPLATE_INFO (parm))
15052 tree t = NULL_TREE;
15054 if (strict_in & UNIFY_ALLOW_DERIVED)
15056 /* First, we try to unify the PARM and ARG directly. */
15057 t = try_class_unification (tparms, targs,
15058 parm, arg);
15060 if (!t)
15062 /* Fallback to the special case allowed in
15063 [temp.deduct.call]:
15065 If P is a class, and P has the form
15066 template-id, then A can be a derived class of
15067 the deduced A. Likewise, if P is a pointer to
15068 a class of the form template-id, A can be a
15069 pointer to a derived class pointed to by the
15070 deduced A. */
15071 t = get_template_base (tparms, targs, parm, arg);
15073 if (!t)
15074 return 1;
15077 else if (CLASSTYPE_TEMPLATE_INFO (arg)
15078 && (CLASSTYPE_TI_TEMPLATE (parm)
15079 == CLASSTYPE_TI_TEMPLATE (arg)))
15080 /* Perhaps PARM is something like S<U> and ARG is S<int>.
15081 Then, we should unify `int' and `U'. */
15082 t = arg;
15083 else
15084 /* There's no chance of unification succeeding. */
15085 return 1;
15087 return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
15088 CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
15090 else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
15091 return 1;
15092 return 0;
15094 case METHOD_TYPE:
15095 case FUNCTION_TYPE:
15097 unsigned int nargs;
15098 tree *args;
15099 tree a;
15100 unsigned int i;
15102 if (TREE_CODE (arg) != TREE_CODE (parm))
15103 return 1;
15105 /* CV qualifications for methods can never be deduced, they must
15106 match exactly. We need to check them explicitly here,
15107 because type_unification_real treats them as any other
15108 cv-qualified parameter. */
15109 if (TREE_CODE (parm) == METHOD_TYPE
15110 && (!check_cv_quals_for_unify
15111 (UNIFY_ALLOW_NONE,
15112 TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
15113 TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
15114 return 1;
15116 if (unify (tparms, targs, TREE_TYPE (parm),
15117 TREE_TYPE (arg), UNIFY_ALLOW_NONE))
15118 return 1;
15120 nargs = list_length (TYPE_ARG_TYPES (arg));
15121 args = XALLOCAVEC (tree, nargs);
15122 for (a = TYPE_ARG_TYPES (arg), i = 0;
15123 a != NULL_TREE && a != void_list_node;
15124 a = TREE_CHAIN (a), ++i)
15125 args[i] = TREE_VALUE (a);
15126 nargs = i;
15128 return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
15129 args, nargs, 1, DEDUCE_EXACT,
15130 LOOKUP_NORMAL);
15133 case OFFSET_TYPE:
15134 /* Unify a pointer to member with a pointer to member function, which
15135 deduces the type of the member as a function type. */
15136 if (TYPE_PTRMEMFUNC_P (arg))
15138 tree method_type;
15139 tree fntype;
15141 /* Check top-level cv qualifiers */
15142 if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
15143 return 1;
15145 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
15146 TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
15147 return 1;
15149 /* Determine the type of the function we are unifying against. */
15150 method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
15151 fntype =
15152 build_function_type (TREE_TYPE (method_type),
15153 TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
15155 /* Extract the cv-qualifiers of the member function from the
15156 implicit object parameter and place them on the function
15157 type to be restored later. */
15158 fntype = apply_memfn_quals (fntype, type_memfn_quals (method_type));
15159 return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
15162 if (TREE_CODE (arg) != OFFSET_TYPE)
15163 return 1;
15164 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
15165 TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
15166 return 1;
15167 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
15168 strict);
15170 case CONST_DECL:
15171 if (DECL_TEMPLATE_PARM_P (parm))
15172 return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
15173 if (arg != integral_constant_value (parm))
15174 return 1;
15175 return 0;
15177 case FIELD_DECL:
15178 case TEMPLATE_DECL:
15179 /* Matched cases are handled by the ARG == PARM test above. */
15180 return 1;
15182 case VAR_DECL:
15183 /* A non-type template parameter that is a variable should be a
15184 an integral constant, in which case, it whould have been
15185 folded into its (constant) value. So we should not be getting
15186 a variable here. */
15187 gcc_unreachable ();
15189 case TYPE_ARGUMENT_PACK:
15190 case NONTYPE_ARGUMENT_PACK:
15192 tree packed_parms = ARGUMENT_PACK_ARGS (parm);
15193 tree packed_args = ARGUMENT_PACK_ARGS (arg);
15194 int i, len = TREE_VEC_LENGTH (packed_parms);
15195 int argslen = TREE_VEC_LENGTH (packed_args);
15196 int parm_variadic_p = 0;
15198 for (i = 0; i < len; ++i)
15200 if (PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, i)))
15202 if (i == len - 1)
15203 /* We can unify against something with a trailing
15204 parameter pack. */
15205 parm_variadic_p = 1;
15206 else
15207 /* Since there is something following the pack
15208 expansion, we cannot unify this template argument
15209 list. */
15210 return 0;
15215 /* If we don't have enough arguments to satisfy the parameters
15216 (not counting the pack expression at the end), or we have
15217 too many arguments for a parameter list that doesn't end in
15218 a pack expression, we can't unify. */
15219 if (argslen < (len - parm_variadic_p)
15220 || (argslen > len && !parm_variadic_p))
15221 return 1;
15223 /* Unify all of the parameters that precede the (optional)
15224 pack expression. */
15225 for (i = 0; i < len - parm_variadic_p; ++i)
15227 if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
15228 TREE_VEC_ELT (packed_args, i), strict))
15229 return 1;
15232 if (parm_variadic_p)
15233 return unify_pack_expansion (tparms, targs,
15234 packed_parms, packed_args,
15235 strict, /*call_args_p=*/false,
15236 /*subr=*/false);
15237 return 0;
15240 break;
15242 case TYPEOF_TYPE:
15243 case DECLTYPE_TYPE:
15244 /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
15245 nodes. */
15246 return 0;
15248 case ERROR_MARK:
15249 /* Unification fails if we hit an error node. */
15250 return 1;
15252 default:
15253 gcc_assert (EXPR_P (parm));
15255 /* We must be looking at an expression. This can happen with
15256 something like:
15258 template <int I>
15259 void foo(S<I>, S<I + 2>);
15261 This is a "nondeduced context":
15263 [deduct.type]
15265 The nondeduced contexts are:
15267 --A type that is a template-id in which one or more of
15268 the template-arguments is an expression that references
15269 a template-parameter.
15271 In these cases, we assume deduction succeeded, but don't
15272 actually infer any unifications. */
15274 if (!uses_template_parms (parm)
15275 && !template_args_equal (parm, arg))
15276 return 1;
15277 else
15278 return 0;
15282 /* Note that DECL can be defined in this translation unit, if
15283 required. */
15285 static void
15286 mark_definable (tree decl)
15288 tree clone;
15289 DECL_NOT_REALLY_EXTERN (decl) = 1;
15290 FOR_EACH_CLONE (clone, decl)
15291 DECL_NOT_REALLY_EXTERN (clone) = 1;
15294 /* Called if RESULT is explicitly instantiated, or is a member of an
15295 explicitly instantiated class. */
15297 void
15298 mark_decl_instantiated (tree result, int extern_p)
15300 SET_DECL_EXPLICIT_INSTANTIATION (result);
15302 /* If this entity has already been written out, it's too late to
15303 make any modifications. */
15304 if (TREE_ASM_WRITTEN (result))
15305 return;
15307 if (TREE_CODE (result) != FUNCTION_DECL)
15308 /* The TREE_PUBLIC flag for function declarations will have been
15309 set correctly by tsubst. */
15310 TREE_PUBLIC (result) = 1;
15312 /* This might have been set by an earlier implicit instantiation. */
15313 DECL_COMDAT (result) = 0;
15315 if (extern_p)
15316 DECL_NOT_REALLY_EXTERN (result) = 0;
15317 else
15319 mark_definable (result);
15320 /* Always make artificials weak. */
15321 if (DECL_ARTIFICIAL (result) && flag_weak)
15322 comdat_linkage (result);
15323 /* For WIN32 we also want to put explicit instantiations in
15324 linkonce sections. */
15325 else if (TREE_PUBLIC (result))
15326 maybe_make_one_only (result);
15329 /* If EXTERN_P, then this function will not be emitted -- unless
15330 followed by an explicit instantiation, at which point its linkage
15331 will be adjusted. If !EXTERN_P, then this function will be
15332 emitted here. In neither circumstance do we want
15333 import_export_decl to adjust the linkage. */
15334 DECL_INTERFACE_KNOWN (result) = 1;
15337 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
15338 important template arguments. If any are missing, we check whether
15339 they're important by using error_mark_node for substituting into any
15340 args that were used for partial ordering (the ones between ARGS and END)
15341 and seeing if it bubbles up. */
15343 static bool
15344 check_undeduced_parms (tree targs, tree args, tree end)
15346 bool found = false;
15347 int i;
15348 for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
15349 if (TREE_VEC_ELT (targs, i) == NULL_TREE)
15351 found = true;
15352 TREE_VEC_ELT (targs, i) = error_mark_node;
15354 if (found)
15356 for (; args != end; args = TREE_CHAIN (args))
15358 tree substed = tsubst (TREE_VALUE (args), targs, tf_none, NULL_TREE);
15359 if (substed == error_mark_node)
15360 return true;
15363 return false;
15366 /* Given two function templates PAT1 and PAT2, return:
15368 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
15369 -1 if PAT2 is more specialized than PAT1.
15370 0 if neither is more specialized.
15372 LEN indicates the number of parameters we should consider
15373 (defaulted parameters should not be considered).
15375 The 1998 std underspecified function template partial ordering, and
15376 DR214 addresses the issue. We take pairs of arguments, one from
15377 each of the templates, and deduce them against each other. One of
15378 the templates will be more specialized if all the *other*
15379 template's arguments deduce against its arguments and at least one
15380 of its arguments *does* *not* deduce against the other template's
15381 corresponding argument. Deduction is done as for class templates.
15382 The arguments used in deduction have reference and top level cv
15383 qualifiers removed. Iff both arguments were originally reference
15384 types *and* deduction succeeds in both directions, the template
15385 with the more cv-qualified argument wins for that pairing (if
15386 neither is more cv-qualified, they both are equal). Unlike regular
15387 deduction, after all the arguments have been deduced in this way,
15388 we do *not* verify the deduced template argument values can be
15389 substituted into non-deduced contexts.
15391 The logic can be a bit confusing here, because we look at deduce1 and
15392 targs1 to see if pat2 is at least as specialized, and vice versa; if we
15393 can find template arguments for pat1 to make arg1 look like arg2, that
15394 means that arg2 is at least as specialized as arg1. */
15397 more_specialized_fn (tree pat1, tree pat2, int len)
15399 tree decl1 = DECL_TEMPLATE_RESULT (pat1);
15400 tree decl2 = DECL_TEMPLATE_RESULT (pat2);
15401 tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
15402 tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
15403 tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
15404 tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
15405 tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
15406 tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
15407 tree origs1, origs2;
15408 bool lose1 = false;
15409 bool lose2 = false;
15411 /* Remove the this parameter from non-static member functions. If
15412 one is a non-static member function and the other is not a static
15413 member function, remove the first parameter from that function
15414 also. This situation occurs for operator functions where we
15415 locate both a member function (with this pointer) and non-member
15416 operator (with explicit first operand). */
15417 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
15419 len--; /* LEN is the number of significant arguments for DECL1 */
15420 args1 = TREE_CHAIN (args1);
15421 if (!DECL_STATIC_FUNCTION_P (decl2))
15422 args2 = TREE_CHAIN (args2);
15424 else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
15426 args2 = TREE_CHAIN (args2);
15427 if (!DECL_STATIC_FUNCTION_P (decl1))
15429 len--;
15430 args1 = TREE_CHAIN (args1);
15434 /* If only one is a conversion operator, they are unordered. */
15435 if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
15436 return 0;
15438 /* Consider the return type for a conversion function */
15439 if (DECL_CONV_FN_P (decl1))
15441 args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
15442 args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
15443 len++;
15446 processing_template_decl++;
15448 origs1 = args1;
15449 origs2 = args2;
15451 while (len--
15452 /* Stop when an ellipsis is seen. */
15453 && args1 != NULL_TREE && args2 != NULL_TREE)
15455 tree arg1 = TREE_VALUE (args1);
15456 tree arg2 = TREE_VALUE (args2);
15457 int deduce1, deduce2;
15458 int quals1 = -1;
15459 int quals2 = -1;
15461 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
15462 && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
15464 /* When both arguments are pack expansions, we need only
15465 unify the patterns themselves. */
15466 arg1 = PACK_EXPANSION_PATTERN (arg1);
15467 arg2 = PACK_EXPANSION_PATTERN (arg2);
15469 /* This is the last comparison we need to do. */
15470 len = 0;
15473 if (TREE_CODE (arg1) == REFERENCE_TYPE)
15475 arg1 = TREE_TYPE (arg1);
15476 quals1 = cp_type_quals (arg1);
15479 if (TREE_CODE (arg2) == REFERENCE_TYPE)
15481 arg2 = TREE_TYPE (arg2);
15482 quals2 = cp_type_quals (arg2);
15485 if ((quals1 < 0) != (quals2 < 0))
15487 /* Only of the args is a reference, see if we should apply
15488 array/function pointer decay to it. This is not part of
15489 DR214, but is, IMHO, consistent with the deduction rules
15490 for the function call itself, and with our earlier
15491 implementation of the underspecified partial ordering
15492 rules. (nathan). */
15493 if (quals1 >= 0)
15495 switch (TREE_CODE (arg1))
15497 case ARRAY_TYPE:
15498 arg1 = TREE_TYPE (arg1);
15499 /* FALLTHROUGH. */
15500 case FUNCTION_TYPE:
15501 arg1 = build_pointer_type (arg1);
15502 break;
15504 default:
15505 break;
15508 else
15510 switch (TREE_CODE (arg2))
15512 case ARRAY_TYPE:
15513 arg2 = TREE_TYPE (arg2);
15514 /* FALLTHROUGH. */
15515 case FUNCTION_TYPE:
15516 arg2 = build_pointer_type (arg2);
15517 break;
15519 default:
15520 break;
15525 arg1 = TYPE_MAIN_VARIANT (arg1);
15526 arg2 = TYPE_MAIN_VARIANT (arg2);
15528 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
15530 int i, len2 = list_length (args2);
15531 tree parmvec = make_tree_vec (1);
15532 tree argvec = make_tree_vec (len2);
15533 tree ta = args2;
15535 /* Setup the parameter vector, which contains only ARG1. */
15536 TREE_VEC_ELT (parmvec, 0) = arg1;
15538 /* Setup the argument vector, which contains the remaining
15539 arguments. */
15540 for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
15541 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
15543 deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec,
15544 argvec, UNIFY_ALLOW_NONE,
15545 /*call_args_p=*/false,
15546 /*subr=*/0);
15548 /* We cannot deduce in the other direction, because ARG1 is
15549 a pack expansion but ARG2 is not. */
15550 deduce2 = 0;
15552 else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
15554 int i, len1 = list_length (args1);
15555 tree parmvec = make_tree_vec (1);
15556 tree argvec = make_tree_vec (len1);
15557 tree ta = args1;
15559 /* Setup the parameter vector, which contains only ARG1. */
15560 TREE_VEC_ELT (parmvec, 0) = arg2;
15562 /* Setup the argument vector, which contains the remaining
15563 arguments. */
15564 for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
15565 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
15567 deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec,
15568 argvec, UNIFY_ALLOW_NONE,
15569 /*call_args_p=*/false,
15570 /*subr=*/0);
15572 /* We cannot deduce in the other direction, because ARG2 is
15573 a pack expansion but ARG1 is not.*/
15574 deduce1 = 0;
15577 else
15579 /* The normal case, where neither argument is a pack
15580 expansion. */
15581 deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
15582 deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
15585 /* If we couldn't deduce arguments for tparms1 to make arg1 match
15586 arg2, then arg2 is not as specialized as arg1. */
15587 if (!deduce1)
15588 lose2 = true;
15589 if (!deduce2)
15590 lose1 = true;
15592 /* "If, for a given type, deduction succeeds in both directions
15593 (i.e., the types are identical after the transformations above)
15594 and if the type from the argument template is more cv-qualified
15595 than the type from the parameter template (as described above)
15596 that type is considered to be more specialized than the other. If
15597 neither type is more cv-qualified than the other then neither type
15598 is more specialized than the other." */
15600 if (deduce1 && deduce2
15601 && quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
15603 if ((quals1 & quals2) == quals2)
15604 lose2 = true;
15605 if ((quals1 & quals2) == quals1)
15606 lose1 = true;
15609 if (lose1 && lose2)
15610 /* We've failed to deduce something in either direction.
15611 These must be unordered. */
15612 break;
15614 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
15615 || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
15616 /* We have already processed all of the arguments in our
15617 handing of the pack expansion type. */
15618 len = 0;
15620 args1 = TREE_CHAIN (args1);
15621 args2 = TREE_CHAIN (args2);
15624 /* "In most cases, all template parameters must have values in order for
15625 deduction to succeed, but for partial ordering purposes a template
15626 parameter may remain without a value provided it is not used in the
15627 types being used for partial ordering."
15629 Thus, if we are missing any of the targs1 we need to substitute into
15630 origs1, then pat2 is not as specialized as pat1. This can happen when
15631 there is a nondeduced context. */
15632 if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
15633 lose2 = true;
15634 if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
15635 lose1 = true;
15637 processing_template_decl--;
15639 /* All things being equal, if the next argument is a pack expansion
15640 for one function but not for the other, prefer the
15641 non-variadic function. FIXME this is bogus; see c++/41958. */
15642 if (lose1 == lose2
15643 && args1 && TREE_VALUE (args1)
15644 && args2 && TREE_VALUE (args2))
15646 lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
15647 lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
15650 if (lose1 == lose2)
15651 return 0;
15652 else if (!lose1)
15653 return 1;
15654 else
15655 return -1;
15658 /* Determine which of two partial specializations is more specialized.
15660 PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
15661 to the first partial specialization. The TREE_VALUE is the
15662 innermost set of template parameters for the partial
15663 specialization. PAT2 is similar, but for the second template.
15665 Return 1 if the first partial specialization is more specialized;
15666 -1 if the second is more specialized; 0 if neither is more
15667 specialized.
15669 See [temp.class.order] for information about determining which of
15670 two templates is more specialized. */
15672 static int
15673 more_specialized_class (tree pat1, tree pat2)
15675 tree targs;
15676 tree tmpl1, tmpl2;
15677 int winner = 0;
15678 bool any_deductions = false;
15680 tmpl1 = TREE_TYPE (pat1);
15681 tmpl2 = TREE_TYPE (pat2);
15683 /* Just like what happens for functions, if we are ordering between
15684 different class template specializations, we may encounter dependent
15685 types in the arguments, and we need our dependency check functions
15686 to behave correctly. */
15687 ++processing_template_decl;
15688 targs = get_class_bindings (TREE_VALUE (pat1),
15689 CLASSTYPE_TI_ARGS (tmpl1),
15690 CLASSTYPE_TI_ARGS (tmpl2));
15691 if (targs)
15693 --winner;
15694 any_deductions = true;
15697 targs = get_class_bindings (TREE_VALUE (pat2),
15698 CLASSTYPE_TI_ARGS (tmpl2),
15699 CLASSTYPE_TI_ARGS (tmpl1));
15700 if (targs)
15702 ++winner;
15703 any_deductions = true;
15705 --processing_template_decl;
15707 /* In the case of a tie where at least one of the class templates
15708 has a parameter pack at the end, the template with the most
15709 non-packed parameters wins. */
15710 if (winner == 0
15711 && any_deductions
15712 && (template_args_variadic_p (TREE_PURPOSE (pat1))
15713 || template_args_variadic_p (TREE_PURPOSE (pat2))))
15715 tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
15716 tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
15717 int len1 = TREE_VEC_LENGTH (args1);
15718 int len2 = TREE_VEC_LENGTH (args2);
15720 /* We don't count the pack expansion at the end. */
15721 if (template_args_variadic_p (TREE_PURPOSE (pat1)))
15722 --len1;
15723 if (template_args_variadic_p (TREE_PURPOSE (pat2)))
15724 --len2;
15726 if (len1 > len2)
15727 return 1;
15728 else if (len1 < len2)
15729 return -1;
15732 return winner;
15735 /* Return the template arguments that will produce the function signature
15736 DECL from the function template FN, with the explicit template
15737 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is true, the return type must
15738 also match. Return NULL_TREE if no satisfactory arguments could be
15739 found. */
15741 static tree
15742 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
15744 int ntparms = DECL_NTPARMS (fn);
15745 tree targs = make_tree_vec (ntparms);
15746 tree decl_type;
15747 tree decl_arg_types;
15748 tree *args;
15749 unsigned int nargs, ix;
15750 tree arg;
15752 /* Substitute the explicit template arguments into the type of DECL.
15753 The call to fn_type_unification will handle substitution into the
15754 FN. */
15755 decl_type = TREE_TYPE (decl);
15756 if (explicit_args && uses_template_parms (decl_type))
15758 tree tmpl;
15759 tree converted_args;
15761 if (DECL_TEMPLATE_INFO (decl))
15762 tmpl = DECL_TI_TEMPLATE (decl);
15763 else
15764 /* We can get here for some invalid specializations. */
15765 return NULL_TREE;
15767 converted_args
15768 = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
15769 explicit_args, NULL_TREE,
15770 tf_none,
15771 /*require_all_args=*/false,
15772 /*use_default_args=*/false);
15773 if (converted_args == error_mark_node)
15774 return NULL_TREE;
15776 decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
15777 if (decl_type == error_mark_node)
15778 return NULL_TREE;
15781 /* Never do unification on the 'this' parameter. */
15782 decl_arg_types = skip_artificial_parms_for (decl,
15783 TYPE_ARG_TYPES (decl_type));
15785 nargs = list_length (decl_arg_types);
15786 args = XALLOCAVEC (tree, nargs);
15787 for (arg = decl_arg_types, ix = 0;
15788 arg != NULL_TREE && arg != void_list_node;
15789 arg = TREE_CHAIN (arg), ++ix)
15790 args[ix] = TREE_VALUE (arg);
15792 if (fn_type_unification (fn, explicit_args, targs,
15793 args, ix,
15794 (check_rettype || DECL_CONV_FN_P (fn)
15795 ? TREE_TYPE (decl_type) : NULL_TREE),
15796 DEDUCE_EXACT, LOOKUP_NORMAL))
15797 return NULL_TREE;
15799 return targs;
15802 /* Return the innermost template arguments that, when applied to a
15803 template specialization whose innermost template parameters are
15804 TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
15805 ARGS.
15807 For example, suppose we have:
15809 template <class T, class U> struct S {};
15810 template <class T> struct S<T*, int> {};
15812 Then, suppose we want to get `S<double*, int>'. The TPARMS will be
15813 {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
15814 int}. The resulting vector will be {double}, indicating that `T'
15815 is bound to `double'. */
15817 static tree
15818 get_class_bindings (tree tparms, tree spec_args, tree args)
15820 int i, ntparms = TREE_VEC_LENGTH (tparms);
15821 tree deduced_args;
15822 tree innermost_deduced_args;
15824 innermost_deduced_args = make_tree_vec (ntparms);
15825 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
15827 deduced_args = copy_node (args);
15828 SET_TMPL_ARGS_LEVEL (deduced_args,
15829 TMPL_ARGS_DEPTH (deduced_args),
15830 innermost_deduced_args);
15832 else
15833 deduced_args = innermost_deduced_args;
15835 if (unify (tparms, deduced_args,
15836 INNERMOST_TEMPLATE_ARGS (spec_args),
15837 INNERMOST_TEMPLATE_ARGS (args),
15838 UNIFY_ALLOW_NONE))
15839 return NULL_TREE;
15841 for (i = 0; i < ntparms; ++i)
15842 if (! TREE_VEC_ELT (innermost_deduced_args, i))
15843 return NULL_TREE;
15845 /* Verify that nondeduced template arguments agree with the type
15846 obtained from argument deduction.
15848 For example:
15850 struct A { typedef int X; };
15851 template <class T, class U> struct C {};
15852 template <class T> struct C<T, typename T::X> {};
15854 Then with the instantiation `C<A, int>', we can deduce that
15855 `T' is `A' but unify () does not check whether `typename T::X'
15856 is `int'. */
15857 spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
15858 if (spec_args == error_mark_node
15859 /* We only need to check the innermost arguments; the other
15860 arguments will always agree. */
15861 || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
15862 INNERMOST_TEMPLATE_ARGS (args)))
15863 return NULL_TREE;
15865 /* Now that we have bindings for all of the template arguments,
15866 ensure that the arguments deduced for the template template
15867 parameters have compatible template parameter lists. See the use
15868 of template_template_parm_bindings_ok_p in fn_type_unification
15869 for more information. */
15870 if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
15871 return NULL_TREE;
15873 return deduced_args;
15876 /* TEMPLATES is a TREE_LIST. Each TREE_VALUE is a TEMPLATE_DECL.
15877 Return the TREE_LIST node with the most specialized template, if
15878 any. If there is no most specialized template, the error_mark_node
15879 is returned.
15881 Note that this function does not look at, or modify, the
15882 TREE_PURPOSE or TREE_TYPE of any of the nodes. Since the node
15883 returned is one of the elements of INSTANTIATIONS, callers may
15884 store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
15885 and retrieve it from the value returned. */
15887 tree
15888 most_specialized_instantiation (tree templates)
15890 tree fn, champ;
15892 ++processing_template_decl;
15894 champ = templates;
15895 for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
15897 int fate = 0;
15899 if (get_bindings (TREE_VALUE (champ),
15900 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
15901 NULL_TREE, /*check_ret=*/false))
15902 fate--;
15904 if (get_bindings (TREE_VALUE (fn),
15905 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
15906 NULL_TREE, /*check_ret=*/false))
15907 fate++;
15909 if (fate == -1)
15910 champ = fn;
15911 else if (!fate)
15913 /* Equally specialized, move to next function. If there
15914 is no next function, nothing's most specialized. */
15915 fn = TREE_CHAIN (fn);
15916 champ = fn;
15917 if (!fn)
15918 break;
15922 if (champ)
15923 /* Now verify that champ is better than everything earlier in the
15924 instantiation list. */
15925 for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
15926 if (get_bindings (TREE_VALUE (champ),
15927 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
15928 NULL_TREE, /*check_ret=*/false)
15929 || !get_bindings (TREE_VALUE (fn),
15930 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
15931 NULL_TREE, /*check_ret=*/false))
15933 champ = NULL_TREE;
15934 break;
15937 processing_template_decl--;
15939 if (!champ)
15940 return error_mark_node;
15942 return champ;
15945 /* If DECL is a specialization of some template, return the most
15946 general such template. Otherwise, returns NULL_TREE.
15948 For example, given:
15950 template <class T> struct S { template <class U> void f(U); };
15952 if TMPL is `template <class U> void S<int>::f(U)' this will return
15953 the full template. This function will not trace past partial
15954 specializations, however. For example, given in addition:
15956 template <class T> struct S<T*> { template <class U> void f(U); };
15958 if TMPL is `template <class U> void S<int*>::f(U)' this will return
15959 `template <class T> template <class U> S<T*>::f(U)'. */
15961 tree
15962 most_general_template (tree decl)
15964 /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
15965 an immediate specialization. */
15966 if (TREE_CODE (decl) == FUNCTION_DECL)
15968 if (DECL_TEMPLATE_INFO (decl)) {
15969 decl = DECL_TI_TEMPLATE (decl);
15971 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
15972 template friend. */
15973 if (TREE_CODE (decl) != TEMPLATE_DECL)
15974 return NULL_TREE;
15975 } else
15976 return NULL_TREE;
15979 /* Look for more and more general templates. */
15980 while (DECL_TEMPLATE_INFO (decl))
15982 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
15983 (See cp-tree.h for details.) */
15984 if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
15985 break;
15987 if (CLASS_TYPE_P (TREE_TYPE (decl))
15988 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
15989 break;
15991 /* Stop if we run into an explicitly specialized class template. */
15992 if (!DECL_NAMESPACE_SCOPE_P (decl)
15993 && DECL_CONTEXT (decl)
15994 && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
15995 break;
15997 decl = DECL_TI_TEMPLATE (decl);
16000 return decl;
16003 /* Return the most specialized of the class template partial
16004 specializations of TMPL which can produce TYPE, a specialization of
16005 TMPL. The value returned is actually a TREE_LIST; the TREE_TYPE is
16006 a _TYPE node corresponding to the partial specialization, while the
16007 TREE_PURPOSE is the set of template arguments that must be
16008 substituted into the TREE_TYPE in order to generate TYPE.
16010 If the choice of partial specialization is ambiguous, a diagnostic
16011 is issued, and the error_mark_node is returned. If there are no
16012 partial specializations of TMPL matching TYPE, then NULL_TREE is
16013 returned. */
16015 static tree
16016 most_specialized_class (tree type, tree tmpl, tsubst_flags_t complain)
16018 tree list = NULL_TREE;
16019 tree t;
16020 tree champ;
16021 int fate;
16022 bool ambiguous_p;
16023 tree args;
16024 tree outer_args = NULL_TREE;
16026 tmpl = most_general_template (tmpl);
16027 args = CLASSTYPE_TI_ARGS (type);
16029 /* For determining which partial specialization to use, only the
16030 innermost args are interesting. */
16031 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
16033 outer_args = strip_innermost_template_args (args, 1);
16034 args = INNERMOST_TEMPLATE_ARGS (args);
16037 for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
16039 tree partial_spec_args;
16040 tree spec_args;
16041 tree parms = TREE_VALUE (t);
16043 partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
16045 ++processing_template_decl;
16047 if (outer_args)
16049 int i;
16051 /* Discard the outer levels of args, and then substitute in the
16052 template args from the enclosing class. */
16053 partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
16054 partial_spec_args = tsubst_template_args
16055 (partial_spec_args, outer_args, tf_none, NULL_TREE);
16057 /* PARMS already refers to just the innermost parms, but the
16058 template parms in partial_spec_args had their levels lowered
16059 by tsubst, so we need to do the same for the parm list. We
16060 can't just tsubst the TREE_VEC itself, as tsubst wants to
16061 treat a TREE_VEC as an argument vector. */
16062 parms = copy_node (parms);
16063 for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
16064 TREE_VEC_ELT (parms, i) =
16065 tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
16069 partial_spec_args =
16070 coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
16071 add_to_template_args (outer_args,
16072 partial_spec_args),
16073 tmpl, tf_none,
16074 /*require_all_args=*/true,
16075 /*use_default_args=*/true);
16077 --processing_template_decl;
16079 if (partial_spec_args == error_mark_node)
16080 return error_mark_node;
16082 spec_args = get_class_bindings (parms,
16083 partial_spec_args,
16084 args);
16085 if (spec_args)
16087 if (outer_args)
16088 spec_args = add_to_template_args (outer_args, spec_args);
16089 list = tree_cons (spec_args, TREE_VALUE (t), list);
16090 TREE_TYPE (list) = TREE_TYPE (t);
16094 if (! list)
16095 return NULL_TREE;
16097 ambiguous_p = false;
16098 t = list;
16099 champ = t;
16100 t = TREE_CHAIN (t);
16101 for (; t; t = TREE_CHAIN (t))
16103 fate = more_specialized_class (champ, t);
16104 if (fate == 1)
16106 else
16108 if (fate == 0)
16110 t = TREE_CHAIN (t);
16111 if (! t)
16113 ambiguous_p = true;
16114 break;
16117 champ = t;
16121 if (!ambiguous_p)
16122 for (t = list; t && t != champ; t = TREE_CHAIN (t))
16124 fate = more_specialized_class (champ, t);
16125 if (fate != 1)
16127 ambiguous_p = true;
16128 break;
16132 if (ambiguous_p)
16134 const char *str;
16135 char *spaces = NULL;
16136 if (!(complain & tf_error))
16137 return error_mark_node;
16138 error ("ambiguous class template instantiation for %q#T", type);
16139 str = TREE_CHAIN (list) ? _("candidates are:") : _("candidate is:");
16140 for (t = list; t; t = TREE_CHAIN (t))
16142 error ("%s %+#T", spaces ? spaces : str, TREE_TYPE (t));
16143 spaces = spaces ? spaces : get_spaces (str);
16145 free (spaces);
16146 return error_mark_node;
16149 return champ;
16152 /* Explicitly instantiate DECL. */
16154 void
16155 do_decl_instantiation (tree decl, tree storage)
16157 tree result = NULL_TREE;
16158 int extern_p = 0;
16160 if (!decl || decl == error_mark_node)
16161 /* An error occurred, for which grokdeclarator has already issued
16162 an appropriate message. */
16163 return;
16164 else if (! DECL_LANG_SPECIFIC (decl))
16166 error ("explicit instantiation of non-template %q#D", decl);
16167 return;
16169 else if (TREE_CODE (decl) == VAR_DECL)
16171 /* There is an asymmetry here in the way VAR_DECLs and
16172 FUNCTION_DECLs are handled by grokdeclarator. In the case of
16173 the latter, the DECL we get back will be marked as a
16174 template instantiation, and the appropriate
16175 DECL_TEMPLATE_INFO will be set up. This does not happen for
16176 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
16177 should handle VAR_DECLs as it currently handles
16178 FUNCTION_DECLs. */
16179 if (!DECL_CLASS_SCOPE_P (decl))
16181 error ("%qD is not a static data member of a class template", decl);
16182 return;
16184 result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
16185 if (!result || TREE_CODE (result) != VAR_DECL)
16187 error ("no matching template for %qD found", decl);
16188 return;
16190 if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
16192 error ("type %qT for explicit instantiation %qD does not match "
16193 "declared type %qT", TREE_TYPE (result), decl,
16194 TREE_TYPE (decl));
16195 return;
16198 else if (TREE_CODE (decl) != FUNCTION_DECL)
16200 error ("explicit instantiation of %q#D", decl);
16201 return;
16203 else
16204 result = decl;
16206 /* Check for various error cases. Note that if the explicit
16207 instantiation is valid the RESULT will currently be marked as an
16208 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
16209 until we get here. */
16211 if (DECL_TEMPLATE_SPECIALIZATION (result))
16213 /* DR 259 [temp.spec].
16215 Both an explicit instantiation and a declaration of an explicit
16216 specialization shall not appear in a program unless the explicit
16217 instantiation follows a declaration of the explicit specialization.
16219 For a given set of template parameters, if an explicit
16220 instantiation of a template appears after a declaration of an
16221 explicit specialization for that template, the explicit
16222 instantiation has no effect. */
16223 return;
16225 else if (DECL_EXPLICIT_INSTANTIATION (result))
16227 /* [temp.spec]
16229 No program shall explicitly instantiate any template more
16230 than once.
16232 We check DECL_NOT_REALLY_EXTERN so as not to complain when
16233 the first instantiation was `extern' and the second is not,
16234 and EXTERN_P for the opposite case. */
16235 if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
16236 permerror (input_location, "duplicate explicit instantiation of %q#D", result);
16237 /* If an "extern" explicit instantiation follows an ordinary
16238 explicit instantiation, the template is instantiated. */
16239 if (extern_p)
16240 return;
16242 else if (!DECL_IMPLICIT_INSTANTIATION (result))
16244 error ("no matching template for %qD found", result);
16245 return;
16247 else if (!DECL_TEMPLATE_INFO (result))
16249 permerror (input_location, "explicit instantiation of non-template %q#D", result);
16250 return;
16253 if (storage == NULL_TREE)
16255 else if (storage == ridpointers[(int) RID_EXTERN])
16257 if (!in_system_header && (cxx_dialect == cxx98))
16258 pedwarn (input_location, OPT_pedantic,
16259 "ISO C++ 1998 forbids the use of %<extern%> on explicit "
16260 "instantiations");
16261 extern_p = 1;
16263 else
16264 error ("storage class %qD applied to template instantiation", storage);
16266 check_explicit_instantiation_namespace (result);
16267 mark_decl_instantiated (result, extern_p);
16268 if (! extern_p)
16269 instantiate_decl (result, /*defer_ok=*/1,
16270 /*expl_inst_class_mem_p=*/false);
16273 static void
16274 mark_class_instantiated (tree t, int extern_p)
16276 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
16277 SET_CLASSTYPE_INTERFACE_KNOWN (t);
16278 CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
16279 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
16280 if (! extern_p)
16282 CLASSTYPE_DEBUG_REQUESTED (t) = 1;
16283 rest_of_type_compilation (t, 1);
16287 /* Called from do_type_instantiation through binding_table_foreach to
16288 do recursive instantiation for the type bound in ENTRY. */
16289 static void
16290 bt_instantiate_type_proc (binding_entry entry, void *data)
16292 tree storage = *(tree *) data;
16294 if (MAYBE_CLASS_TYPE_P (entry->type)
16295 && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
16296 do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
16299 /* Called from do_type_instantiation to instantiate a member
16300 (a member function or a static member variable) of an
16301 explicitly instantiated class template. */
16302 static void
16303 instantiate_class_member (tree decl, int extern_p)
16305 mark_decl_instantiated (decl, extern_p);
16306 if (! extern_p)
16307 instantiate_decl (decl, /*defer_ok=*/1,
16308 /*expl_inst_class_mem_p=*/true);
16311 /* Perform an explicit instantiation of template class T. STORAGE, if
16312 non-null, is the RID for extern, inline or static. COMPLAIN is
16313 nonzero if this is called from the parser, zero if called recursively,
16314 since the standard is unclear (as detailed below). */
16316 void
16317 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
16319 int extern_p = 0;
16320 int nomem_p = 0;
16321 int static_p = 0;
16322 int previous_instantiation_extern_p = 0;
16324 if (TREE_CODE (t) == TYPE_DECL)
16325 t = TREE_TYPE (t);
16327 if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
16329 error ("explicit instantiation of non-template type %qT", t);
16330 return;
16333 complete_type (t);
16335 if (!COMPLETE_TYPE_P (t))
16337 if (complain & tf_error)
16338 error ("explicit instantiation of %q#T before definition of template",
16340 return;
16343 if (storage != NULL_TREE)
16345 if (!in_system_header)
16347 if (storage == ridpointers[(int) RID_EXTERN])
16349 if (cxx_dialect == cxx98)
16350 pedwarn (input_location, OPT_pedantic,
16351 "ISO C++ 1998 forbids the use of %<extern%> on "
16352 "explicit instantiations");
16354 else
16355 pedwarn (input_location, OPT_pedantic,
16356 "ISO C++ forbids the use of %qE"
16357 " on explicit instantiations", storage);
16360 if (storage == ridpointers[(int) RID_INLINE])
16361 nomem_p = 1;
16362 else if (storage == ridpointers[(int) RID_EXTERN])
16363 extern_p = 1;
16364 else if (storage == ridpointers[(int) RID_STATIC])
16365 static_p = 1;
16366 else
16368 error ("storage class %qD applied to template instantiation",
16369 storage);
16370 extern_p = 0;
16374 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
16376 /* DR 259 [temp.spec].
16378 Both an explicit instantiation and a declaration of an explicit
16379 specialization shall not appear in a program unless the explicit
16380 instantiation follows a declaration of the explicit specialization.
16382 For a given set of template parameters, if an explicit
16383 instantiation of a template appears after a declaration of an
16384 explicit specialization for that template, the explicit
16385 instantiation has no effect. */
16386 return;
16388 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
16390 /* [temp.spec]
16392 No program shall explicitly instantiate any template more
16393 than once.
16395 If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
16396 instantiation was `extern'. If EXTERN_P then the second is.
16397 These cases are OK. */
16398 previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
16400 if (!previous_instantiation_extern_p && !extern_p
16401 && (complain & tf_error))
16402 permerror (input_location, "duplicate explicit instantiation of %q#T", t);
16404 /* If we've already instantiated the template, just return now. */
16405 if (!CLASSTYPE_INTERFACE_ONLY (t))
16406 return;
16409 check_explicit_instantiation_namespace (TYPE_NAME (t));
16410 mark_class_instantiated (t, extern_p);
16412 if (nomem_p)
16413 return;
16416 tree tmp;
16418 /* In contrast to implicit instantiation, where only the
16419 declarations, and not the definitions, of members are
16420 instantiated, we have here:
16422 [temp.explicit]
16424 The explicit instantiation of a class template specialization
16425 implies the instantiation of all of its members not
16426 previously explicitly specialized in the translation unit
16427 containing the explicit instantiation.
16429 Of course, we can't instantiate member template classes, since
16430 we don't have any arguments for them. Note that the standard
16431 is unclear on whether the instantiation of the members are
16432 *explicit* instantiations or not. However, the most natural
16433 interpretation is that it should be an explicit instantiation. */
16435 if (! static_p)
16436 for (tmp = TYPE_METHODS (t); tmp; tmp = DECL_CHAIN (tmp))
16437 if (TREE_CODE (tmp) == FUNCTION_DECL
16438 && DECL_TEMPLATE_INSTANTIATION (tmp))
16439 instantiate_class_member (tmp, extern_p);
16441 for (tmp = TYPE_FIELDS (t); tmp; tmp = DECL_CHAIN (tmp))
16442 if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
16443 instantiate_class_member (tmp, extern_p);
16445 if (CLASSTYPE_NESTED_UTDS (t))
16446 binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
16447 bt_instantiate_type_proc, &storage);
16451 /* Given a function DECL, which is a specialization of TMPL, modify
16452 DECL to be a re-instantiation of TMPL with the same template
16453 arguments. TMPL should be the template into which tsubst'ing
16454 should occur for DECL, not the most general template.
16456 One reason for doing this is a scenario like this:
16458 template <class T>
16459 void f(const T&, int i);
16461 void g() { f(3, 7); }
16463 template <class T>
16464 void f(const T& t, const int i) { }
16466 Note that when the template is first instantiated, with
16467 instantiate_template, the resulting DECL will have no name for the
16468 first parameter, and the wrong type for the second. So, when we go
16469 to instantiate the DECL, we regenerate it. */
16471 static void
16472 regenerate_decl_from_template (tree decl, tree tmpl)
16474 /* The arguments used to instantiate DECL, from the most general
16475 template. */
16476 tree args;
16477 tree code_pattern;
16479 args = DECL_TI_ARGS (decl);
16480 code_pattern = DECL_TEMPLATE_RESULT (tmpl);
16482 /* Make sure that we can see identifiers, and compute access
16483 correctly. */
16484 push_access_scope (decl);
16486 if (TREE_CODE (decl) == FUNCTION_DECL)
16488 tree decl_parm;
16489 tree pattern_parm;
16490 tree specs;
16491 int args_depth;
16492 int parms_depth;
16494 args_depth = TMPL_ARGS_DEPTH (args);
16495 parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
16496 if (args_depth > parms_depth)
16497 args = get_innermost_template_args (args, parms_depth);
16499 specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
16500 args, tf_error, NULL_TREE);
16501 if (specs)
16502 TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
16503 specs);
16505 /* Merge parameter declarations. */
16506 decl_parm = skip_artificial_parms_for (decl,
16507 DECL_ARGUMENTS (decl));
16508 pattern_parm
16509 = skip_artificial_parms_for (code_pattern,
16510 DECL_ARGUMENTS (code_pattern));
16511 while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
16513 tree parm_type;
16514 tree attributes;
16516 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
16517 DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
16518 parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
16519 NULL_TREE);
16520 parm_type = type_decays_to (parm_type);
16521 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
16522 TREE_TYPE (decl_parm) = parm_type;
16523 attributes = DECL_ATTRIBUTES (pattern_parm);
16524 if (DECL_ATTRIBUTES (decl_parm) != attributes)
16526 DECL_ATTRIBUTES (decl_parm) = attributes;
16527 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
16529 decl_parm = DECL_CHAIN (decl_parm);
16530 pattern_parm = DECL_CHAIN (pattern_parm);
16532 /* Merge any parameters that match with the function parameter
16533 pack. */
16534 if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
16536 int i, len;
16537 tree expanded_types;
16538 /* Expand the TYPE_PACK_EXPANSION that provides the types for
16539 the parameters in this function parameter pack. */
16540 expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm),
16541 args, tf_error, NULL_TREE);
16542 len = TREE_VEC_LENGTH (expanded_types);
16543 for (i = 0; i < len; i++)
16545 tree parm_type;
16546 tree attributes;
16548 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
16549 /* Rename the parameter to include the index. */
16550 DECL_NAME (decl_parm) =
16551 make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
16552 parm_type = TREE_VEC_ELT (expanded_types, i);
16553 parm_type = type_decays_to (parm_type);
16554 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
16555 TREE_TYPE (decl_parm) = parm_type;
16556 attributes = DECL_ATTRIBUTES (pattern_parm);
16557 if (DECL_ATTRIBUTES (decl_parm) != attributes)
16559 DECL_ATTRIBUTES (decl_parm) = attributes;
16560 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
16562 decl_parm = DECL_CHAIN (decl_parm);
16565 /* Merge additional specifiers from the CODE_PATTERN. */
16566 if (DECL_DECLARED_INLINE_P (code_pattern)
16567 && !DECL_DECLARED_INLINE_P (decl))
16568 DECL_DECLARED_INLINE_P (decl) = 1;
16570 else if (TREE_CODE (decl) == VAR_DECL)
16572 DECL_INITIAL (decl) =
16573 tsubst_expr (DECL_INITIAL (code_pattern), args,
16574 tf_error, DECL_TI_TEMPLATE (decl),
16575 /*integral_constant_expression_p=*/false);
16576 if (VAR_HAD_UNKNOWN_BOUND (decl))
16577 TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
16578 tf_error, DECL_TI_TEMPLATE (decl));
16580 else
16581 gcc_unreachable ();
16583 pop_access_scope (decl);
16586 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
16587 substituted to get DECL. */
16589 tree
16590 template_for_substitution (tree decl)
16592 tree tmpl = DECL_TI_TEMPLATE (decl);
16594 /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
16595 for the instantiation. This is not always the most general
16596 template. Consider, for example:
16598 template <class T>
16599 struct S { template <class U> void f();
16600 template <> void f<int>(); };
16602 and an instantiation of S<double>::f<int>. We want TD to be the
16603 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
16604 while (/* An instantiation cannot have a definition, so we need a
16605 more general template. */
16606 DECL_TEMPLATE_INSTANTIATION (tmpl)
16607 /* We must also deal with friend templates. Given:
16609 template <class T> struct S {
16610 template <class U> friend void f() {};
16613 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
16614 so far as the language is concerned, but that's still
16615 where we get the pattern for the instantiation from. On
16616 other hand, if the definition comes outside the class, say:
16618 template <class T> struct S {
16619 template <class U> friend void f();
16621 template <class U> friend void f() {}
16623 we don't need to look any further. That's what the check for
16624 DECL_INITIAL is for. */
16625 || (TREE_CODE (decl) == FUNCTION_DECL
16626 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
16627 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
16629 /* The present template, TD, should not be a definition. If it
16630 were a definition, we should be using it! Note that we
16631 cannot restructure the loop to just keep going until we find
16632 a template with a definition, since that might go too far if
16633 a specialization was declared, but not defined. */
16634 gcc_assert (TREE_CODE (decl) != VAR_DECL
16635 || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
16637 /* Fetch the more general template. */
16638 tmpl = DECL_TI_TEMPLATE (tmpl);
16641 return tmpl;
16644 /* Returns true if we need to instantiate this template instance even if we
16645 know we aren't going to emit it.. */
16647 bool
16648 always_instantiate_p (tree decl)
16650 /* We always instantiate inline functions so that we can inline them. An
16651 explicit instantiation declaration prohibits implicit instantiation of
16652 non-inline functions. With high levels of optimization, we would
16653 normally inline non-inline functions -- but we're not allowed to do
16654 that for "extern template" functions. Therefore, we check
16655 DECL_DECLARED_INLINE_P, rather than possibly_inlined_p. */
16656 return ((TREE_CODE (decl) == FUNCTION_DECL
16657 && DECL_DECLARED_INLINE_P (decl))
16658 /* And we need to instantiate static data members so that
16659 their initializers are available in integral constant
16660 expressions. */
16661 || (TREE_CODE (decl) == VAR_DECL
16662 && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl)));
16665 /* Produce the definition of D, a _DECL generated from a template. If
16666 DEFER_OK is nonzero, then we don't have to actually do the
16667 instantiation now; we just have to do it sometime. Normally it is
16668 an error if this is an explicit instantiation but D is undefined.
16669 EXPL_INST_CLASS_MEM_P is true iff D is a member of an
16670 explicitly instantiated class template. */
16672 tree
16673 instantiate_decl (tree d, int defer_ok,
16674 bool expl_inst_class_mem_p)
16676 tree tmpl = DECL_TI_TEMPLATE (d);
16677 tree gen_args;
16678 tree args;
16679 tree td;
16680 tree code_pattern;
16681 tree spec;
16682 tree gen_tmpl;
16683 bool pattern_defined;
16684 int need_push;
16685 location_t saved_loc = input_location;
16686 bool external_p;
16688 /* This function should only be used to instantiate templates for
16689 functions and static member variables. */
16690 gcc_assert (TREE_CODE (d) == FUNCTION_DECL
16691 || TREE_CODE (d) == VAR_DECL);
16693 /* Variables are never deferred; if instantiation is required, they
16694 are instantiated right away. That allows for better code in the
16695 case that an expression refers to the value of the variable --
16696 if the variable has a constant value the referring expression can
16697 take advantage of that fact. */
16698 if (TREE_CODE (d) == VAR_DECL)
16699 defer_ok = 0;
16701 /* Don't instantiate cloned functions. Instead, instantiate the
16702 functions they cloned. */
16703 if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
16704 d = DECL_CLONED_FUNCTION (d);
16706 if (DECL_TEMPLATE_INSTANTIATED (d)
16707 || DECL_TEMPLATE_SPECIALIZATION (d))
16708 /* D has already been instantiated or explicitly specialized, so
16709 there's nothing for us to do here.
16711 It might seem reasonable to check whether or not D is an explicit
16712 instantiation, and, if so, stop here. But when an explicit
16713 instantiation is deferred until the end of the compilation,
16714 DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
16715 the instantiation. */
16716 return d;
16718 /* Check to see whether we know that this template will be
16719 instantiated in some other file, as with "extern template"
16720 extension. */
16721 external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
16723 /* In general, we do not instantiate such templates. */
16724 if (external_p && !always_instantiate_p (d))
16725 return d;
16727 gen_tmpl = most_general_template (tmpl);
16728 gen_args = DECL_TI_ARGS (d);
16730 if (tmpl != gen_tmpl)
16731 /* We should already have the extra args. */
16732 gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
16733 == TMPL_ARGS_DEPTH (gen_args));
16734 /* And what's in the hash table should match D. */
16735 gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
16736 || spec == NULL_TREE);
16738 /* This needs to happen before any tsubsting. */
16739 if (! push_tinst_level (d))
16740 return d;
16742 timevar_push (TV_PARSE);
16744 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
16745 for the instantiation. */
16746 td = template_for_substitution (d);
16747 code_pattern = DECL_TEMPLATE_RESULT (td);
16749 /* We should never be trying to instantiate a member of a class
16750 template or partial specialization. */
16751 gcc_assert (d != code_pattern);
16753 if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
16754 || DECL_TEMPLATE_SPECIALIZATION (td))
16755 /* In the case of a friend template whose definition is provided
16756 outside the class, we may have too many arguments. Drop the
16757 ones we don't need. The same is true for specializations. */
16758 args = get_innermost_template_args
16759 (gen_args, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td)));
16760 else
16761 args = gen_args;
16763 if (TREE_CODE (d) == FUNCTION_DECL)
16764 pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
16765 else
16766 pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
16768 /* We may be in the middle of deferred access check. Disable it now. */
16769 push_deferring_access_checks (dk_no_deferred);
16771 /* Unless an explicit instantiation directive has already determined
16772 the linkage of D, remember that a definition is available for
16773 this entity. */
16774 if (pattern_defined
16775 && !DECL_INTERFACE_KNOWN (d)
16776 && !DECL_NOT_REALLY_EXTERN (d))
16777 mark_definable (d);
16779 input_location = DECL_SOURCE_LOCATION (d);
16781 /* If D is a member of an explicitly instantiated class template,
16782 and no definition is available, treat it like an implicit
16783 instantiation. */
16784 if (!pattern_defined && expl_inst_class_mem_p
16785 && DECL_EXPLICIT_INSTANTIATION (d))
16787 DECL_NOT_REALLY_EXTERN (d) = 0;
16788 DECL_INTERFACE_KNOWN (d) = 0;
16789 SET_DECL_IMPLICIT_INSTANTIATION (d);
16792 /* Recheck the substitutions to obtain any warning messages
16793 about ignoring cv qualifiers. Don't do this for artificial decls,
16794 as it breaks the context-sensitive substitution for lambda op(). */
16795 if (!defer_ok && !DECL_ARTIFICIAL (d))
16797 tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
16798 tree type = TREE_TYPE (gen);
16800 /* Make sure that we can see identifiers, and compute access
16801 correctly. D is already the target FUNCTION_DECL with the
16802 right context. */
16803 push_access_scope (d);
16805 if (TREE_CODE (gen) == FUNCTION_DECL)
16807 tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
16808 tsubst_exception_specification (type, gen_args, tf_warning_or_error,
16810 /* Don't simply tsubst the function type, as that will give
16811 duplicate warnings about poor parameter qualifications.
16812 The function arguments are the same as the decl_arguments
16813 without the top level cv qualifiers. */
16814 type = TREE_TYPE (type);
16816 tsubst (type, gen_args, tf_warning_or_error, d);
16818 pop_access_scope (d);
16821 /* Defer all other templates, unless we have been explicitly
16822 forbidden from doing so. */
16823 if (/* If there is no definition, we cannot instantiate the
16824 template. */
16825 ! pattern_defined
16826 /* If it's OK to postpone instantiation, do so. */
16827 || defer_ok
16828 /* If this is a static data member that will be defined
16829 elsewhere, we don't want to instantiate the entire data
16830 member, but we do want to instantiate the initializer so that
16831 we can substitute that elsewhere. */
16832 || (external_p && TREE_CODE (d) == VAR_DECL))
16834 /* The definition of the static data member is now required so
16835 we must substitute the initializer. */
16836 if (TREE_CODE (d) == VAR_DECL
16837 && !DECL_INITIAL (d)
16838 && DECL_INITIAL (code_pattern))
16840 tree ns;
16841 tree init;
16843 ns = decl_namespace_context (d);
16844 push_nested_namespace (ns);
16845 push_nested_class (DECL_CONTEXT (d));
16846 init = tsubst_expr (DECL_INITIAL (code_pattern),
16847 args,
16848 tf_warning_or_error, NULL_TREE,
16849 /*integral_constant_expression_p=*/false);
16850 cp_finish_decl (d, init, /*init_const_expr_p=*/false,
16851 /*asmspec_tree=*/NULL_TREE,
16852 LOOKUP_ONLYCONVERTING);
16853 pop_nested_class ();
16854 pop_nested_namespace (ns);
16857 /* We restore the source position here because it's used by
16858 add_pending_template. */
16859 input_location = saved_loc;
16861 if (at_eof && !pattern_defined
16862 && DECL_EXPLICIT_INSTANTIATION (d)
16863 && DECL_NOT_REALLY_EXTERN (d))
16864 /* [temp.explicit]
16866 The definition of a non-exported function template, a
16867 non-exported member function template, or a non-exported
16868 member function or static data member of a class template
16869 shall be present in every translation unit in which it is
16870 explicitly instantiated. */
16871 permerror (input_location, "explicit instantiation of %qD "
16872 "but no definition available", d);
16874 /* ??? Historically, we have instantiated inline functions, even
16875 when marked as "extern template". */
16876 if (!(external_p && TREE_CODE (d) == VAR_DECL))
16877 add_pending_template (d);
16878 goto out;
16880 /* Tell the repository that D is available in this translation unit
16881 -- and see if it is supposed to be instantiated here. */
16882 if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
16884 /* In a PCH file, despite the fact that the repository hasn't
16885 requested instantiation in the PCH it is still possible that
16886 an instantiation will be required in a file that includes the
16887 PCH. */
16888 if (pch_file)
16889 add_pending_template (d);
16890 /* Instantiate inline functions so that the inliner can do its
16891 job, even though we'll not be emitting a copy of this
16892 function. */
16893 if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
16894 goto out;
16897 need_push = !cfun || !global_bindings_p ();
16898 if (need_push)
16899 push_to_top_level ();
16901 /* Mark D as instantiated so that recursive calls to
16902 instantiate_decl do not try to instantiate it again. */
16903 DECL_TEMPLATE_INSTANTIATED (d) = 1;
16905 /* Regenerate the declaration in case the template has been modified
16906 by a subsequent redeclaration. */
16907 regenerate_decl_from_template (d, td);
16909 /* We already set the file and line above. Reset them now in case
16910 they changed as a result of calling regenerate_decl_from_template. */
16911 input_location = DECL_SOURCE_LOCATION (d);
16913 if (TREE_CODE (d) == VAR_DECL)
16915 tree init;
16917 /* Clear out DECL_RTL; whatever was there before may not be right
16918 since we've reset the type of the declaration. */
16919 SET_DECL_RTL (d, NULL);
16920 DECL_IN_AGGR_P (d) = 0;
16922 /* The initializer is placed in DECL_INITIAL by
16923 regenerate_decl_from_template. Pull it out so that
16924 cp_finish_decl can process it. */
16925 init = DECL_INITIAL (d);
16926 DECL_INITIAL (d) = NULL_TREE;
16927 DECL_INITIALIZED_P (d) = 0;
16929 /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
16930 initializer. That function will defer actual emission until
16931 we have a chance to determine linkage. */
16932 DECL_EXTERNAL (d) = 0;
16934 /* Enter the scope of D so that access-checking works correctly. */
16935 push_nested_class (DECL_CONTEXT (d));
16936 cp_finish_decl (d, init, false, NULL_TREE, 0);
16937 pop_nested_class ();
16939 else if (TREE_CODE (d) == FUNCTION_DECL)
16941 htab_t saved_local_specializations;
16942 tree subst_decl;
16943 tree tmpl_parm;
16944 tree spec_parm;
16946 /* Save away the current list, in case we are instantiating one
16947 template from within the body of another. */
16948 saved_local_specializations = local_specializations;
16950 /* Set up the list of local specializations. */
16951 local_specializations = htab_create (37,
16952 hash_local_specialization,
16953 eq_local_specializations,
16954 NULL);
16956 /* Set up context. */
16957 start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
16959 /* Create substitution entries for the parameters. */
16960 subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
16961 tmpl_parm = DECL_ARGUMENTS (subst_decl);
16962 spec_parm = DECL_ARGUMENTS (d);
16963 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
16965 register_local_specialization (spec_parm, tmpl_parm);
16966 spec_parm = skip_artificial_parms_for (d, spec_parm);
16967 tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
16969 while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
16971 register_local_specialization (spec_parm, tmpl_parm);
16972 tmpl_parm = DECL_CHAIN (tmpl_parm);
16973 spec_parm = DECL_CHAIN (spec_parm);
16975 if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
16977 /* Register the (value) argument pack as a specialization of
16978 TMPL_PARM, then move on. */
16979 tree argpack = make_fnparm_pack (spec_parm);
16980 register_local_specialization (argpack, tmpl_parm);
16981 tmpl_parm = DECL_CHAIN (tmpl_parm);
16982 spec_parm = NULL_TREE;
16984 gcc_assert (!spec_parm);
16986 /* Substitute into the body of the function. */
16987 tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
16988 tf_warning_or_error, tmpl,
16989 /*integral_constant_expression_p=*/false);
16991 /* Set the current input_location to the end of the function
16992 so that finish_function knows where we are. */
16993 input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
16995 /* We don't need the local specializations any more. */
16996 htab_delete (local_specializations);
16997 local_specializations = saved_local_specializations;
16999 /* Finish the function. */
17000 d = finish_function (0);
17001 expand_or_defer_fn (d);
17004 /* We're not deferring instantiation any more. */
17005 TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
17007 if (need_push)
17008 pop_from_top_level ();
17010 out:
17011 input_location = saved_loc;
17012 pop_deferring_access_checks ();
17013 pop_tinst_level ();
17015 timevar_pop (TV_PARSE);
17017 return d;
17020 /* Run through the list of templates that we wish we could
17021 instantiate, and instantiate any we can. RETRIES is the
17022 number of times we retry pending template instantiation. */
17024 void
17025 instantiate_pending_templates (int retries)
17027 int reconsider;
17028 location_t saved_loc = input_location;
17030 /* Instantiating templates may trigger vtable generation. This in turn
17031 may require further template instantiations. We place a limit here
17032 to avoid infinite loop. */
17033 if (pending_templates && retries >= max_tinst_depth)
17035 tree decl = pending_templates->tinst->decl;
17037 error ("template instantiation depth exceeds maximum of %d"
17038 " instantiating %q+D, possibly from virtual table generation"
17039 " (use -ftemplate-depth= to increase the maximum)",
17040 max_tinst_depth, decl);
17041 if (TREE_CODE (decl) == FUNCTION_DECL)
17042 /* Pretend that we defined it. */
17043 DECL_INITIAL (decl) = error_mark_node;
17044 return;
17049 struct pending_template **t = &pending_templates;
17050 struct pending_template *last = NULL;
17051 reconsider = 0;
17052 while (*t)
17054 tree instantiation = reopen_tinst_level ((*t)->tinst);
17055 bool complete = false;
17057 if (TYPE_P (instantiation))
17059 tree fn;
17061 if (!COMPLETE_TYPE_P (instantiation))
17063 instantiate_class_template (instantiation);
17064 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
17065 for (fn = TYPE_METHODS (instantiation);
17067 fn = TREE_CHAIN (fn))
17068 if (! DECL_ARTIFICIAL (fn))
17069 instantiate_decl (fn,
17070 /*defer_ok=*/0,
17071 /*expl_inst_class_mem_p=*/false);
17072 if (COMPLETE_TYPE_P (instantiation))
17073 reconsider = 1;
17076 complete = COMPLETE_TYPE_P (instantiation);
17078 else
17080 if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
17081 && !DECL_TEMPLATE_INSTANTIATED (instantiation))
17083 instantiation
17084 = instantiate_decl (instantiation,
17085 /*defer_ok=*/0,
17086 /*expl_inst_class_mem_p=*/false);
17087 if (DECL_TEMPLATE_INSTANTIATED (instantiation))
17088 reconsider = 1;
17091 complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
17092 || DECL_TEMPLATE_INSTANTIATED (instantiation));
17095 if (complete)
17096 /* If INSTANTIATION has been instantiated, then we don't
17097 need to consider it again in the future. */
17098 *t = (*t)->next;
17099 else
17101 last = *t;
17102 t = &(*t)->next;
17104 tinst_depth = 0;
17105 current_tinst_level = NULL;
17107 last_pending_template = last;
17109 while (reconsider);
17111 input_location = saved_loc;
17114 /* Substitute ARGVEC into T, which is a list of initializers for
17115 either base class or a non-static data member. The TREE_PURPOSEs
17116 are DECLs, and the TREE_VALUEs are the initializer values. Used by
17117 instantiate_decl. */
17119 static tree
17120 tsubst_initializer_list (tree t, tree argvec)
17122 tree inits = NULL_TREE;
17124 for (; t; t = TREE_CHAIN (t))
17126 tree decl;
17127 tree init;
17128 tree expanded_bases = NULL_TREE;
17129 tree expanded_arguments = NULL_TREE;
17130 int i, len = 1;
17132 if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
17134 tree expr;
17135 tree arg;
17137 /* Expand the base class expansion type into separate base
17138 classes. */
17139 expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
17140 tf_warning_or_error,
17141 NULL_TREE);
17142 if (expanded_bases == error_mark_node)
17143 continue;
17145 /* We'll be building separate TREE_LISTs of arguments for
17146 each base. */
17147 len = TREE_VEC_LENGTH (expanded_bases);
17148 expanded_arguments = make_tree_vec (len);
17149 for (i = 0; i < len; i++)
17150 TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
17152 /* Build a dummy EXPR_PACK_EXPANSION that will be used to
17153 expand each argument in the TREE_VALUE of t. */
17154 expr = make_node (EXPR_PACK_EXPANSION);
17155 PACK_EXPANSION_PARAMETER_PACKS (expr) =
17156 PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
17158 if (TREE_VALUE (t) == void_type_node)
17159 /* VOID_TYPE_NODE is used to indicate
17160 value-initialization. */
17162 for (i = 0; i < len; i++)
17163 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
17165 else
17167 /* Substitute parameter packs into each argument in the
17168 TREE_LIST. */
17169 in_base_initializer = 1;
17170 for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
17172 tree expanded_exprs;
17174 /* Expand the argument. */
17175 SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
17176 expanded_exprs
17177 = tsubst_pack_expansion (expr, argvec,
17178 tf_warning_or_error,
17179 NULL_TREE);
17180 if (expanded_exprs == error_mark_node)
17181 continue;
17183 /* Prepend each of the expanded expressions to the
17184 corresponding TREE_LIST in EXPANDED_ARGUMENTS. */
17185 for (i = 0; i < len; i++)
17187 TREE_VEC_ELT (expanded_arguments, i) =
17188 tree_cons (NULL_TREE,
17189 TREE_VEC_ELT (expanded_exprs, i),
17190 TREE_VEC_ELT (expanded_arguments, i));
17193 in_base_initializer = 0;
17195 /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
17196 since we built them backwards. */
17197 for (i = 0; i < len; i++)
17199 TREE_VEC_ELT (expanded_arguments, i) =
17200 nreverse (TREE_VEC_ELT (expanded_arguments, i));
17205 for (i = 0; i < len; ++i)
17207 if (expanded_bases)
17209 decl = TREE_VEC_ELT (expanded_bases, i);
17210 decl = expand_member_init (decl);
17211 init = TREE_VEC_ELT (expanded_arguments, i);
17213 else
17215 decl = tsubst_copy (TREE_PURPOSE (t), argvec,
17216 tf_warning_or_error, NULL_TREE);
17218 decl = expand_member_init (decl);
17219 if (decl && !DECL_P (decl))
17220 in_base_initializer = 1;
17222 init = tsubst_expr (TREE_VALUE (t), argvec,
17223 tf_warning_or_error, NULL_TREE,
17224 /*integral_constant_expression_p=*/false);
17225 in_base_initializer = 0;
17228 if (decl)
17230 init = build_tree_list (decl, init);
17231 TREE_CHAIN (init) = inits;
17232 inits = init;
17236 return inits;
17239 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
17241 static void
17242 set_current_access_from_decl (tree decl)
17244 if (TREE_PRIVATE (decl))
17245 current_access_specifier = access_private_node;
17246 else if (TREE_PROTECTED (decl))
17247 current_access_specifier = access_protected_node;
17248 else
17249 current_access_specifier = access_public_node;
17252 /* Instantiate an enumerated type. TAG is the template type, NEWTAG
17253 is the instantiation (which should have been created with
17254 start_enum) and ARGS are the template arguments to use. */
17256 static void
17257 tsubst_enum (tree tag, tree newtag, tree args)
17259 tree e;
17261 for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
17263 tree value;
17264 tree decl;
17266 decl = TREE_VALUE (e);
17267 /* Note that in a template enum, the TREE_VALUE is the
17268 CONST_DECL, not the corresponding INTEGER_CST. */
17269 value = tsubst_expr (DECL_INITIAL (decl),
17270 args, tf_warning_or_error, NULL_TREE,
17271 /*integral_constant_expression_p=*/true);
17273 /* Give this enumeration constant the correct access. */
17274 set_current_access_from_decl (decl);
17276 /* Actually build the enumerator itself. */
17277 build_enumerator (DECL_NAME (decl), value, newtag);
17280 finish_enum (newtag);
17281 DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
17282 = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
17285 /* DECL is a FUNCTION_DECL that is a template specialization. Return
17286 its type -- but without substituting the innermost set of template
17287 arguments. So, innermost set of template parameters will appear in
17288 the type. */
17290 tree
17291 get_mostly_instantiated_function_type (tree decl)
17293 tree fn_type;
17294 tree tmpl;
17295 tree targs;
17296 tree tparms;
17297 int parm_depth;
17299 tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
17300 targs = DECL_TI_ARGS (decl);
17301 tparms = DECL_TEMPLATE_PARMS (tmpl);
17302 parm_depth = TMPL_PARMS_DEPTH (tparms);
17304 /* There should be as many levels of arguments as there are levels
17305 of parameters. */
17306 gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
17308 fn_type = TREE_TYPE (tmpl);
17310 if (parm_depth == 1)
17311 /* No substitution is necessary. */
17313 else
17315 int i, save_access_control;
17316 tree partial_args;
17318 /* Replace the innermost level of the TARGS with NULL_TREEs to
17319 let tsubst know not to substitute for those parameters. */
17320 partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
17321 for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
17322 SET_TMPL_ARGS_LEVEL (partial_args, i,
17323 TMPL_ARGS_LEVEL (targs, i));
17324 SET_TMPL_ARGS_LEVEL (partial_args,
17325 TMPL_ARGS_DEPTH (targs),
17326 make_tree_vec (DECL_NTPARMS (tmpl)));
17328 /* Disable access control as this function is used only during
17329 name-mangling. */
17330 save_access_control = flag_access_control;
17331 flag_access_control = 0;
17333 ++processing_template_decl;
17334 /* Now, do the (partial) substitution to figure out the
17335 appropriate function type. */
17336 fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
17337 --processing_template_decl;
17339 /* Substitute into the template parameters to obtain the real
17340 innermost set of parameters. This step is important if the
17341 innermost set of template parameters contains value
17342 parameters whose types depend on outer template parameters. */
17343 TREE_VEC_LENGTH (partial_args)--;
17344 tparms = tsubst_template_parms (tparms, partial_args, tf_error);
17346 flag_access_control = save_access_control;
17349 return fn_type;
17352 /* Return truthvalue if we're processing a template different from
17353 the last one involved in diagnostics. */
17355 problematic_instantiation_changed (void)
17357 return last_template_error_tick != tinst_level_tick;
17360 /* Remember current template involved in diagnostics. */
17361 void
17362 record_last_problematic_instantiation (void)
17364 last_template_error_tick = tinst_level_tick;
17367 struct tinst_level *
17368 current_instantiation (void)
17370 return current_tinst_level;
17373 /* [temp.param] Check that template non-type parm TYPE is of an allowable
17374 type. Return zero for ok, nonzero for disallowed. Issue error and
17375 warning messages under control of COMPLAIN. */
17377 static int
17378 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
17380 if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
17381 return 0;
17382 else if (POINTER_TYPE_P (type))
17383 return 0;
17384 else if (TYPE_PTR_TO_MEMBER_P (type))
17385 return 0;
17386 else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
17387 return 0;
17388 else if (TREE_CODE (type) == TYPENAME_TYPE)
17389 return 0;
17391 if (complain & tf_error)
17392 error ("%q#T is not a valid type for a template constant parameter", type);
17393 return 1;
17396 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
17397 Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
17399 static bool
17400 dependent_type_p_r (tree type)
17402 tree scope;
17404 /* [temp.dep.type]
17406 A type is dependent if it is:
17408 -- a template parameter. Template template parameters are types
17409 for us (since TYPE_P holds true for them) so we handle
17410 them here. */
17411 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
17412 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
17413 return true;
17414 /* -- a qualified-id with a nested-name-specifier which contains a
17415 class-name that names a dependent type or whose unqualified-id
17416 names a dependent type. */
17417 if (TREE_CODE (type) == TYPENAME_TYPE)
17418 return true;
17419 /* -- a cv-qualified type where the cv-unqualified type is
17420 dependent. */
17421 type = TYPE_MAIN_VARIANT (type);
17422 /* -- a compound type constructed from any dependent type. */
17423 if (TYPE_PTR_TO_MEMBER_P (type))
17424 return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
17425 || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
17426 (type)));
17427 else if (TREE_CODE (type) == POINTER_TYPE
17428 || TREE_CODE (type) == REFERENCE_TYPE)
17429 return dependent_type_p (TREE_TYPE (type));
17430 else if (TREE_CODE (type) == FUNCTION_TYPE
17431 || TREE_CODE (type) == METHOD_TYPE)
17433 tree arg_type;
17435 if (dependent_type_p (TREE_TYPE (type)))
17436 return true;
17437 for (arg_type = TYPE_ARG_TYPES (type);
17438 arg_type;
17439 arg_type = TREE_CHAIN (arg_type))
17440 if (dependent_type_p (TREE_VALUE (arg_type)))
17441 return true;
17442 return false;
17444 /* -- an array type constructed from any dependent type or whose
17445 size is specified by a constant expression that is
17446 value-dependent. */
17447 if (TREE_CODE (type) == ARRAY_TYPE)
17449 if (TYPE_DOMAIN (type)
17450 && dependent_type_p (TYPE_DOMAIN (type)))
17451 return true;
17452 return dependent_type_p (TREE_TYPE (type));
17454 else if (TREE_CODE (type) == INTEGER_TYPE
17455 && !TREE_CONSTANT (TYPE_MAX_VALUE (type)))
17457 /* If this is the TYPE_DOMAIN of an array type, consider it
17458 dependent. We already checked for value-dependence in
17459 compute_array_index_type. */
17460 return type_dependent_expression_p (TYPE_MAX_VALUE (type));
17463 /* -- a template-id in which either the template name is a template
17464 parameter ... */
17465 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
17466 return true;
17467 /* ... or any of the template arguments is a dependent type or
17468 an expression that is type-dependent or value-dependent. */
17469 else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
17470 && (any_dependent_template_arguments_p
17471 (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
17472 return true;
17474 /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
17475 argument of the `typeof' expression is not type-dependent, then
17476 it should already been have resolved. */
17477 if (TREE_CODE (type) == TYPEOF_TYPE
17478 || TREE_CODE (type) == DECLTYPE_TYPE)
17479 return true;
17481 /* A template argument pack is dependent if any of its packed
17482 arguments are. */
17483 if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
17485 tree args = ARGUMENT_PACK_ARGS (type);
17486 int i, len = TREE_VEC_LENGTH (args);
17487 for (i = 0; i < len; ++i)
17488 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
17489 return true;
17492 /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
17493 be template parameters. */
17494 if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
17495 return true;
17497 /* The standard does not specifically mention types that are local
17498 to template functions or local classes, but they should be
17499 considered dependent too. For example:
17501 template <int I> void f() {
17502 enum E { a = I };
17503 S<sizeof (E)> s;
17506 The size of `E' cannot be known until the value of `I' has been
17507 determined. Therefore, `E' must be considered dependent. */
17508 scope = TYPE_CONTEXT (type);
17509 if (scope && TYPE_P (scope))
17510 return dependent_type_p (scope);
17511 else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
17512 return type_dependent_expression_p (scope);
17514 /* Other types are non-dependent. */
17515 return false;
17518 /* Returns TRUE if TYPE is dependent, in the sense of
17519 [temp.dep.type]. */
17521 bool
17522 dependent_type_p (tree type)
17524 /* If there are no template parameters in scope, then there can't be
17525 any dependent types. */
17526 if (!processing_template_decl)
17528 /* If we are not processing a template, then nobody should be
17529 providing us with a dependent type. */
17530 gcc_assert (type);
17531 gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
17532 return false;
17535 /* If the type is NULL, we have not computed a type for the entity
17536 in question; in that case, the type is dependent. */
17537 if (!type)
17538 return true;
17540 /* Erroneous types can be considered non-dependent. */
17541 if (type == error_mark_node)
17542 return false;
17544 /* If we have not already computed the appropriate value for TYPE,
17545 do so now. */
17546 if (!TYPE_DEPENDENT_P_VALID (type))
17548 TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
17549 TYPE_DEPENDENT_P_VALID (type) = 1;
17552 return TYPE_DEPENDENT_P (type);
17555 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
17556 lookup. In other words, a dependent type that is not the current
17557 instantiation. */
17559 bool
17560 dependent_scope_p (tree scope)
17562 return (scope && TYPE_P (scope) && dependent_type_p (scope)
17563 && !currently_open_class (scope));
17566 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
17567 [temp.dep.constexpr]. EXPRESSION is already known to be a constant
17568 expression. */
17570 bool
17571 value_dependent_expression_p (tree expression)
17573 if (!processing_template_decl)
17574 return false;
17576 /* A name declared with a dependent type. */
17577 if (DECL_P (expression) && type_dependent_expression_p (expression))
17578 return true;
17580 switch (TREE_CODE (expression))
17582 case IDENTIFIER_NODE:
17583 /* A name that has not been looked up -- must be dependent. */
17584 return true;
17586 case TEMPLATE_PARM_INDEX:
17587 /* A non-type template parm. */
17588 return true;
17590 case CONST_DECL:
17591 /* A non-type template parm. */
17592 if (DECL_TEMPLATE_PARM_P (expression))
17593 return true;
17594 return value_dependent_expression_p (DECL_INITIAL (expression));
17596 case VAR_DECL:
17597 /* A constant with integral or enumeration type and is initialized
17598 with an expression that is value-dependent. */
17599 if (DECL_INITIAL (expression)
17600 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
17601 && value_dependent_expression_p (DECL_INITIAL (expression)))
17602 return true;
17603 return false;
17605 case DYNAMIC_CAST_EXPR:
17606 case STATIC_CAST_EXPR:
17607 case CONST_CAST_EXPR:
17608 case REINTERPRET_CAST_EXPR:
17609 case CAST_EXPR:
17610 /* These expressions are value-dependent if the type to which
17611 the cast occurs is dependent or the expression being casted
17612 is value-dependent. */
17614 tree type = TREE_TYPE (expression);
17616 if (dependent_type_p (type))
17617 return true;
17619 /* A functional cast has a list of operands. */
17620 expression = TREE_OPERAND (expression, 0);
17621 if (!expression)
17623 /* If there are no operands, it must be an expression such
17624 as "int()". This should not happen for aggregate types
17625 because it would form non-constant expressions. */
17626 gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
17628 return false;
17631 if (TREE_CODE (expression) == TREE_LIST)
17632 return any_value_dependent_elements_p (expression);
17634 return value_dependent_expression_p (expression);
17637 case SIZEOF_EXPR:
17638 case ALIGNOF_EXPR:
17639 /* A `sizeof' expression is value-dependent if the operand is
17640 type-dependent or is a pack expansion. */
17641 expression = TREE_OPERAND (expression, 0);
17642 if (PACK_EXPANSION_P (expression))
17643 return true;
17644 else if (TYPE_P (expression))
17645 return dependent_type_p (expression);
17646 return type_dependent_expression_p (expression);
17648 case NOEXCEPT_EXPR:
17649 expression = TREE_OPERAND (expression, 0);
17650 /* FIXME why check value-dependency? */
17651 return (type_dependent_expression_p (expression)
17652 || value_dependent_expression_p (expression));
17654 case SCOPE_REF:
17656 tree name = TREE_OPERAND (expression, 1);
17657 return value_dependent_expression_p (name);
17660 case COMPONENT_REF:
17661 return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
17662 || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
17664 case CALL_EXPR:
17665 /* A CALL_EXPR may appear in a constant expression if it is a
17666 call to a builtin function, e.g., __builtin_constant_p. All
17667 such calls are value-dependent. */
17668 return true;
17670 case NONTYPE_ARGUMENT_PACK:
17671 /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
17672 is value-dependent. */
17674 tree values = ARGUMENT_PACK_ARGS (expression);
17675 int i, len = TREE_VEC_LENGTH (values);
17677 for (i = 0; i < len; ++i)
17678 if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
17679 return true;
17681 return false;
17684 case TRAIT_EXPR:
17686 tree type2 = TRAIT_EXPR_TYPE2 (expression);
17687 return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
17688 || (type2 ? dependent_type_p (type2) : false));
17691 case MODOP_EXPR:
17692 return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
17693 || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
17695 case ADDR_EXPR:
17697 tree op = TREE_OPERAND (expression, 0);
17698 return (value_dependent_expression_p (op)
17699 || has_value_dependent_address (op));
17702 default:
17703 /* A constant expression is value-dependent if any subexpression is
17704 value-dependent. */
17705 switch (TREE_CODE_CLASS (TREE_CODE (expression)))
17707 case tcc_reference:
17708 case tcc_unary:
17709 return (value_dependent_expression_p
17710 (TREE_OPERAND (expression, 0)));
17712 case tcc_comparison:
17713 case tcc_binary:
17714 return ((value_dependent_expression_p
17715 (TREE_OPERAND (expression, 0)))
17716 || (value_dependent_expression_p
17717 (TREE_OPERAND (expression, 1))));
17719 case tcc_expression:
17720 case tcc_vl_exp:
17722 int i;
17723 for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
17724 /* In some cases, some of the operands may be missing.
17725 (For example, in the case of PREDECREMENT_EXPR, the
17726 amount to increment by may be missing.) That doesn't
17727 make the expression dependent. */
17728 if (TREE_OPERAND (expression, i)
17729 && (value_dependent_expression_p
17730 (TREE_OPERAND (expression, i))))
17731 return true;
17732 return false;
17735 default:
17736 break;
17740 /* The expression is not value-dependent. */
17741 return false;
17744 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
17745 [temp.dep.expr]. */
17747 bool
17748 type_dependent_expression_p (tree expression)
17750 if (!processing_template_decl)
17751 return false;
17753 if (expression == error_mark_node)
17754 return false;
17756 /* An unresolved name is always dependent. */
17757 if (TREE_CODE (expression) == IDENTIFIER_NODE
17758 || TREE_CODE (expression) == USING_DECL)
17759 return true;
17761 /* Some expression forms are never type-dependent. */
17762 if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
17763 || TREE_CODE (expression) == SIZEOF_EXPR
17764 || TREE_CODE (expression) == ALIGNOF_EXPR
17765 || TREE_CODE (expression) == NOEXCEPT_EXPR
17766 || TREE_CODE (expression) == TRAIT_EXPR
17767 || TREE_CODE (expression) == TYPEID_EXPR
17768 || TREE_CODE (expression) == DELETE_EXPR
17769 || TREE_CODE (expression) == VEC_DELETE_EXPR
17770 || TREE_CODE (expression) == THROW_EXPR)
17771 return false;
17773 /* The types of these expressions depends only on the type to which
17774 the cast occurs. */
17775 if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
17776 || TREE_CODE (expression) == STATIC_CAST_EXPR
17777 || TREE_CODE (expression) == CONST_CAST_EXPR
17778 || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
17779 || TREE_CODE (expression) == CAST_EXPR)
17780 return dependent_type_p (TREE_TYPE (expression));
17782 /* The types of these expressions depends only on the type created
17783 by the expression. */
17784 if (TREE_CODE (expression) == NEW_EXPR
17785 || TREE_CODE (expression) == VEC_NEW_EXPR)
17787 /* For NEW_EXPR tree nodes created inside a template, either
17788 the object type itself or a TREE_LIST may appear as the
17789 operand 1. */
17790 tree type = TREE_OPERAND (expression, 1);
17791 if (TREE_CODE (type) == TREE_LIST)
17792 /* This is an array type. We need to check array dimensions
17793 as well. */
17794 return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
17795 || value_dependent_expression_p
17796 (TREE_OPERAND (TREE_VALUE (type), 1));
17797 else
17798 return dependent_type_p (type);
17801 if (TREE_CODE (expression) == SCOPE_REF)
17803 tree scope = TREE_OPERAND (expression, 0);
17804 tree name = TREE_OPERAND (expression, 1);
17806 /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
17807 contains an identifier associated by name lookup with one or more
17808 declarations declared with a dependent type, or...a
17809 nested-name-specifier or qualified-id that names a member of an
17810 unknown specialization. */
17811 return (type_dependent_expression_p (name)
17812 || dependent_scope_p (scope));
17815 if (TREE_CODE (expression) == FUNCTION_DECL
17816 && DECL_LANG_SPECIFIC (expression)
17817 && DECL_TEMPLATE_INFO (expression)
17818 && (any_dependent_template_arguments_p
17819 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
17820 return true;
17822 if (TREE_CODE (expression) == TEMPLATE_DECL
17823 && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
17824 return false;
17826 if (TREE_CODE (expression) == STMT_EXPR)
17827 expression = stmt_expr_value_expr (expression);
17829 if (BRACE_ENCLOSED_INITIALIZER_P (expression))
17831 tree elt;
17832 unsigned i;
17834 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
17836 if (type_dependent_expression_p (elt))
17837 return true;
17839 return false;
17842 /* A static data member of the current instantiation with incomplete
17843 array type is type-dependent, as the definition and specializations
17844 can have different bounds. */
17845 if (TREE_CODE (expression) == VAR_DECL
17846 && DECL_CLASS_SCOPE_P (expression)
17847 && dependent_type_p (DECL_CONTEXT (expression))
17848 && VAR_HAD_UNKNOWN_BOUND (expression))
17849 return true;
17851 if (TREE_TYPE (expression) == unknown_type_node)
17853 if (TREE_CODE (expression) == ADDR_EXPR)
17854 return type_dependent_expression_p (TREE_OPERAND (expression, 0));
17855 if (TREE_CODE (expression) == COMPONENT_REF
17856 || TREE_CODE (expression) == OFFSET_REF)
17858 if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
17859 return true;
17860 expression = TREE_OPERAND (expression, 1);
17861 if (TREE_CODE (expression) == IDENTIFIER_NODE)
17862 return false;
17864 /* SCOPE_REF with non-null TREE_TYPE is always non-dependent. */
17865 if (TREE_CODE (expression) == SCOPE_REF)
17866 return false;
17868 if (TREE_CODE (expression) == BASELINK)
17869 expression = BASELINK_FUNCTIONS (expression);
17871 if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
17873 if (any_dependent_template_arguments_p
17874 (TREE_OPERAND (expression, 1)))
17875 return true;
17876 expression = TREE_OPERAND (expression, 0);
17878 gcc_assert (TREE_CODE (expression) == OVERLOAD
17879 || TREE_CODE (expression) == FUNCTION_DECL);
17881 while (expression)
17883 if (type_dependent_expression_p (OVL_CURRENT (expression)))
17884 return true;
17885 expression = OVL_NEXT (expression);
17887 return false;
17890 gcc_assert (TREE_CODE (expression) != TYPE_DECL);
17892 return (dependent_type_p (TREE_TYPE (expression)));
17895 /* Like type_dependent_expression_p, but it also works while not processing
17896 a template definition, i.e. during substitution or mangling. */
17898 bool
17899 type_dependent_expression_p_push (tree expr)
17901 bool b;
17902 ++processing_template_decl;
17903 b = type_dependent_expression_p (expr);
17904 --processing_template_decl;
17905 return b;
17908 /* Returns TRUE if ARGS contains a type-dependent expression. */
17910 bool
17911 any_type_dependent_arguments_p (const VEC(tree,gc) *args)
17913 unsigned int i;
17914 tree arg;
17916 for (i = 0; VEC_iterate (tree, args, i, arg); ++i)
17918 if (type_dependent_expression_p (arg))
17919 return true;
17921 return false;
17924 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
17925 expressions) contains any value-dependent expressions. */
17927 bool
17928 any_value_dependent_elements_p (const_tree list)
17930 for (; list; list = TREE_CHAIN (list))
17931 if (value_dependent_expression_p (TREE_VALUE (list)))
17932 return true;
17934 return false;
17937 /* Returns TRUE if the ARG (a template argument) is dependent. */
17939 bool
17940 dependent_template_arg_p (tree arg)
17942 if (!processing_template_decl)
17943 return false;
17945 if (TREE_CODE (arg) == TEMPLATE_DECL
17946 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
17947 return dependent_template_p (arg);
17948 else if (ARGUMENT_PACK_P (arg))
17950 tree args = ARGUMENT_PACK_ARGS (arg);
17951 int i, len = TREE_VEC_LENGTH (args);
17952 for (i = 0; i < len; ++i)
17954 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
17955 return true;
17958 return false;
17960 else if (TYPE_P (arg))
17961 return dependent_type_p (arg);
17962 else
17963 return (type_dependent_expression_p (arg)
17964 || value_dependent_expression_p (arg));
17967 /* Returns true if ARGS (a collection of template arguments) contains
17968 any types that require structural equality testing. */
17970 bool
17971 any_template_arguments_need_structural_equality_p (tree args)
17973 int i;
17974 int j;
17976 if (!args)
17977 return false;
17978 if (args == error_mark_node)
17979 return true;
17981 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
17983 tree level = TMPL_ARGS_LEVEL (args, i + 1);
17984 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
17986 tree arg = TREE_VEC_ELT (level, j);
17987 tree packed_args = NULL_TREE;
17988 int k, len = 1;
17990 if (ARGUMENT_PACK_P (arg))
17992 /* Look inside the argument pack. */
17993 packed_args = ARGUMENT_PACK_ARGS (arg);
17994 len = TREE_VEC_LENGTH (packed_args);
17997 for (k = 0; k < len; ++k)
17999 if (packed_args)
18000 arg = TREE_VEC_ELT (packed_args, k);
18002 if (error_operand_p (arg))
18003 return true;
18004 else if (TREE_CODE (arg) == TEMPLATE_DECL
18005 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
18006 continue;
18007 else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
18008 return true;
18009 else if (!TYPE_P (arg) && TREE_TYPE (arg)
18010 && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
18011 return true;
18016 return false;
18019 /* Returns true if ARGS (a collection of template arguments) contains
18020 any dependent arguments. */
18022 bool
18023 any_dependent_template_arguments_p (const_tree args)
18025 int i;
18026 int j;
18028 if (!args)
18029 return false;
18030 if (args == error_mark_node)
18031 return true;
18033 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
18035 const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
18036 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
18037 if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
18038 return true;
18041 return false;
18044 /* Returns TRUE if the template TMPL is dependent. */
18046 bool
18047 dependent_template_p (tree tmpl)
18049 if (TREE_CODE (tmpl) == OVERLOAD)
18051 while (tmpl)
18053 if (dependent_template_p (OVL_FUNCTION (tmpl)))
18054 return true;
18055 tmpl = OVL_CHAIN (tmpl);
18057 return false;
18060 /* Template template parameters are dependent. */
18061 if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
18062 || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
18063 return true;
18064 /* So are names that have not been looked up. */
18065 if (TREE_CODE (tmpl) == SCOPE_REF
18066 || TREE_CODE (tmpl) == IDENTIFIER_NODE)
18067 return true;
18068 /* So are member templates of dependent classes. */
18069 if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
18070 return dependent_type_p (DECL_CONTEXT (tmpl));
18071 return false;
18074 /* Returns TRUE if the specialization TMPL<ARGS> is dependent. */
18076 bool
18077 dependent_template_id_p (tree tmpl, tree args)
18079 return (dependent_template_p (tmpl)
18080 || any_dependent_template_arguments_p (args));
18083 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
18084 is dependent. */
18086 bool
18087 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
18089 int i;
18091 if (!processing_template_decl)
18092 return false;
18094 for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
18096 tree decl = TREE_VEC_ELT (declv, i);
18097 tree init = TREE_VEC_ELT (initv, i);
18098 tree cond = TREE_VEC_ELT (condv, i);
18099 tree incr = TREE_VEC_ELT (incrv, i);
18101 if (type_dependent_expression_p (decl))
18102 return true;
18104 if (init && type_dependent_expression_p (init))
18105 return true;
18107 if (type_dependent_expression_p (cond))
18108 return true;
18110 if (COMPARISON_CLASS_P (cond)
18111 && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
18112 || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
18113 return true;
18115 if (TREE_CODE (incr) == MODOP_EXPR)
18117 if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
18118 || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
18119 return true;
18121 else if (type_dependent_expression_p (incr))
18122 return true;
18123 else if (TREE_CODE (incr) == MODIFY_EXPR)
18125 if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
18126 return true;
18127 else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
18129 tree t = TREE_OPERAND (incr, 1);
18130 if (type_dependent_expression_p (TREE_OPERAND (t, 0))
18131 || type_dependent_expression_p (TREE_OPERAND (t, 1)))
18132 return true;
18137 return false;
18140 /* TYPE is a TYPENAME_TYPE. Returns the ordinary TYPE to which the
18141 TYPENAME_TYPE corresponds. Returns the original TYPENAME_TYPE if
18142 no such TYPE can be found. Note that this function peers inside
18143 uninstantiated templates and therefore should be used only in
18144 extremely limited situations. ONLY_CURRENT_P restricts this
18145 peering to the currently open classes hierarchy (which is required
18146 when comparing types). */
18148 tree
18149 resolve_typename_type (tree type, bool only_current_p)
18151 tree scope;
18152 tree name;
18153 tree decl;
18154 int quals;
18155 tree pushed_scope;
18156 tree result;
18158 gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
18160 scope = TYPE_CONTEXT (type);
18161 /* Usually the non-qualified identifier of a TYPENAME_TYPE is
18162 TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
18163 a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
18164 the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
18165 identifier of the TYPENAME_TYPE anymore.
18166 So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
18167 TYPENAME_TYPE instead, we avoid messing up with a possible
18168 typedef variant case. */
18169 name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
18171 /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
18172 it first before we can figure out what NAME refers to. */
18173 if (TREE_CODE (scope) == TYPENAME_TYPE)
18174 scope = resolve_typename_type (scope, only_current_p);
18175 /* If we don't know what SCOPE refers to, then we cannot resolve the
18176 TYPENAME_TYPE. */
18177 if (TREE_CODE (scope) == TYPENAME_TYPE)
18178 return type;
18179 /* If the SCOPE is a template type parameter, we have no way of
18180 resolving the name. */
18181 if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
18182 return type;
18183 /* If the SCOPE is not the current instantiation, there's no reason
18184 to look inside it. */
18185 if (only_current_p && !currently_open_class (scope))
18186 return type;
18187 /* If this is a typedef, we don't want to look inside (c++/11987). */
18188 if (typedef_variant_p (type))
18189 return type;
18190 /* If SCOPE isn't the template itself, it will not have a valid
18191 TYPE_FIELDS list. */
18192 if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
18193 /* scope is either the template itself or a compatible instantiation
18194 like X<T>, so look up the name in the original template. */
18195 scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
18196 else
18197 /* scope is a partial instantiation, so we can't do the lookup or we
18198 will lose the template arguments. */
18199 return type;
18200 /* Enter the SCOPE so that name lookup will be resolved as if we
18201 were in the class definition. In particular, SCOPE will no
18202 longer be considered a dependent type. */
18203 pushed_scope = push_scope (scope);
18204 /* Look up the declaration. */
18205 decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
18207 result = NULL_TREE;
18209 /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
18210 find a TEMPLATE_DECL. Otherwise, we want to find a TYPE_DECL. */
18211 if (!decl)
18212 /*nop*/;
18213 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
18214 && TREE_CODE (decl) == TYPE_DECL)
18216 result = TREE_TYPE (decl);
18217 if (result == error_mark_node)
18218 result = NULL_TREE;
18220 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
18221 && DECL_CLASS_TEMPLATE_P (decl))
18223 tree tmpl;
18224 tree args;
18225 /* Obtain the template and the arguments. */
18226 tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
18227 args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
18228 /* Instantiate the template. */
18229 result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
18230 /*entering_scope=*/0,
18231 tf_error | tf_user);
18232 if (result == error_mark_node)
18233 result = NULL_TREE;
18236 /* Leave the SCOPE. */
18237 if (pushed_scope)
18238 pop_scope (pushed_scope);
18240 /* If we failed to resolve it, return the original typename. */
18241 if (!result)
18242 return type;
18244 /* If lookup found a typename type, resolve that too. */
18245 if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
18247 /* Ill-formed programs can cause infinite recursion here, so we
18248 must catch that. */
18249 TYPENAME_IS_RESOLVING_P (type) = 1;
18250 result = resolve_typename_type (result, only_current_p);
18251 TYPENAME_IS_RESOLVING_P (type) = 0;
18254 /* Qualify the resulting type. */
18255 quals = cp_type_quals (type);
18256 if (quals)
18257 result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
18259 return result;
18262 /* EXPR is an expression which is not type-dependent. Return a proxy
18263 for EXPR that can be used to compute the types of larger
18264 expressions containing EXPR. */
18266 tree
18267 build_non_dependent_expr (tree expr)
18269 tree inner_expr;
18271 /* Preserve null pointer constants so that the type of things like
18272 "p == 0" where "p" is a pointer can be determined. */
18273 if (null_ptr_cst_p (expr))
18274 return expr;
18275 /* Preserve OVERLOADs; the functions must be available to resolve
18276 types. */
18277 inner_expr = expr;
18278 if (TREE_CODE (inner_expr) == STMT_EXPR)
18279 inner_expr = stmt_expr_value_expr (inner_expr);
18280 if (TREE_CODE (inner_expr) == ADDR_EXPR)
18281 inner_expr = TREE_OPERAND (inner_expr, 0);
18282 if (TREE_CODE (inner_expr) == COMPONENT_REF)
18283 inner_expr = TREE_OPERAND (inner_expr, 1);
18284 if (is_overloaded_fn (inner_expr)
18285 || TREE_CODE (inner_expr) == OFFSET_REF)
18286 return expr;
18287 /* There is no need to return a proxy for a variable. */
18288 if (TREE_CODE (expr) == VAR_DECL)
18289 return expr;
18290 /* Preserve string constants; conversions from string constants to
18291 "char *" are allowed, even though normally a "const char *"
18292 cannot be used to initialize a "char *". */
18293 if (TREE_CODE (expr) == STRING_CST)
18294 return expr;
18295 /* Preserve arithmetic constants, as an optimization -- there is no
18296 reason to create a new node. */
18297 if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
18298 return expr;
18299 /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
18300 There is at least one place where we want to know that a
18301 particular expression is a throw-expression: when checking a ?:
18302 expression, there are special rules if the second or third
18303 argument is a throw-expression. */
18304 if (TREE_CODE (expr) == THROW_EXPR)
18305 return expr;
18307 if (TREE_CODE (expr) == COND_EXPR)
18308 return build3 (COND_EXPR,
18309 TREE_TYPE (expr),
18310 TREE_OPERAND (expr, 0),
18311 (TREE_OPERAND (expr, 1)
18312 ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
18313 : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
18314 build_non_dependent_expr (TREE_OPERAND (expr, 2)));
18315 if (TREE_CODE (expr) == COMPOUND_EXPR
18316 && !COMPOUND_EXPR_OVERLOADED (expr))
18317 return build2 (COMPOUND_EXPR,
18318 TREE_TYPE (expr),
18319 TREE_OPERAND (expr, 0),
18320 build_non_dependent_expr (TREE_OPERAND (expr, 1)));
18322 /* If the type is unknown, it can't really be non-dependent */
18323 gcc_assert (TREE_TYPE (expr) != unknown_type_node);
18325 /* Otherwise, build a NON_DEPENDENT_EXPR.
18327 REFERENCE_TYPEs are not stripped for expressions in templates
18328 because doing so would play havoc with mangling. Consider, for
18329 example:
18331 template <typename T> void f<T& g>() { g(); }
18333 In the body of "f", the expression for "g" will have
18334 REFERENCE_TYPE, even though the standard says that it should
18335 not. The reason is that we must preserve the syntactic form of
18336 the expression so that mangling (say) "f<g>" inside the body of
18337 "f" works out correctly. Therefore, the REFERENCE_TYPE is
18338 stripped here. */
18339 return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
18342 /* ARGS is a vector of expressions as arguments to a function call.
18343 Replace the arguments with equivalent non-dependent expressions.
18344 This modifies ARGS in place. */
18346 void
18347 make_args_non_dependent (VEC(tree,gc) *args)
18349 unsigned int ix;
18350 tree arg;
18352 for (ix = 0; VEC_iterate (tree, args, ix, arg); ++ix)
18354 tree newarg = build_non_dependent_expr (arg);
18355 if (newarg != arg)
18356 VEC_replace (tree, args, ix, newarg);
18360 /* Returns a type which represents 'auto'. We use a TEMPLATE_TYPE_PARM
18361 with a level one deeper than the actual template parms. */
18363 tree
18364 make_auto (void)
18366 tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
18367 TYPE_NAME (au) = build_decl (BUILTINS_LOCATION,
18368 TYPE_DECL, get_identifier ("auto"), au);
18369 TYPE_STUB_DECL (au) = TYPE_NAME (au);
18370 TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
18371 (0, processing_template_decl + 1, processing_template_decl + 1,
18372 TYPE_NAME (au), NULL_TREE);
18373 TYPE_CANONICAL (au) = canonical_type_parameter (au);
18374 DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
18375 SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
18377 return au;
18380 /* Given type ARG, return std::initializer_list<ARG>. */
18382 static tree
18383 listify (tree arg)
18385 tree std_init_list = namespace_binding
18386 (get_identifier ("initializer_list"), std_node);
18387 tree argvec;
18388 if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
18390 error ("deducing from brace-enclosed initializer list requires "
18391 "#include <initializer_list>");
18392 return error_mark_node;
18394 argvec = make_tree_vec (1);
18395 TREE_VEC_ELT (argvec, 0) = arg;
18396 return lookup_template_class (std_init_list, argvec, NULL_TREE,
18397 NULL_TREE, 0, tf_warning_or_error);
18400 /* Replace auto in TYPE with std::initializer_list<auto>. */
18402 static tree
18403 listify_autos (tree type, tree auto_node)
18405 tree init_auto = listify (auto_node);
18406 tree argvec = make_tree_vec (1);
18407 TREE_VEC_ELT (argvec, 0) = init_auto;
18408 if (processing_template_decl)
18409 argvec = add_to_template_args (current_template_args (), argvec);
18410 return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
18413 /* walk_tree helper for do_auto_deduction. */
18415 static tree
18416 contains_auto_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
18417 void *type)
18419 /* Is this a variable with the type we're looking for? */
18420 if (DECL_P (*tp)
18421 && TREE_TYPE (*tp) == type)
18422 return *tp;
18423 else
18424 return NULL_TREE;
18427 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
18428 from INIT. AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE. */
18430 tree
18431 do_auto_deduction (tree type, tree init, tree auto_node)
18433 tree parms, tparms, targs;
18434 tree args[1];
18435 tree decl;
18436 int val;
18438 /* The name of the object being declared shall not appear in the
18439 initializer expression. */
18440 decl = cp_walk_tree_without_duplicates (&init, contains_auto_r, type);
18441 if (decl)
18443 error ("variable %q#D with %<auto%> type used in its own "
18444 "initializer", decl);
18445 return error_mark_node;
18448 /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
18449 with either a new invented type template parameter U or, if the
18450 initializer is a braced-init-list (8.5.4), with
18451 std::initializer_list<U>. */
18452 if (BRACE_ENCLOSED_INITIALIZER_P (init))
18453 type = listify_autos (type, auto_node);
18455 parms = build_tree_list (NULL_TREE, type);
18456 args[0] = init;
18457 tparms = make_tree_vec (1);
18458 targs = make_tree_vec (1);
18459 TREE_VEC_ELT (tparms, 0)
18460 = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
18461 val = type_unification_real (tparms, targs, parms, args, 1, 0,
18462 DEDUCE_CALL, LOOKUP_NORMAL);
18463 if (val > 0)
18465 error ("unable to deduce %qT from %qE", type, init);
18466 return error_mark_node;
18469 /* If the list of declarators contains more than one declarator, the type
18470 of each declared variable is determined as described above. If the
18471 type deduced for the template parameter U is not the same in each
18472 deduction, the program is ill-formed. */
18473 if (TREE_TYPE (auto_node)
18474 && !same_type_p (TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0)))
18476 error ("inconsistent deduction for %qT: %qT and then %qT",
18477 auto_node, TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0));
18478 return error_mark_node;
18480 TREE_TYPE (auto_node) = TREE_VEC_ELT (targs, 0);
18482 if (processing_template_decl)
18483 targs = add_to_template_args (current_template_args (), targs);
18484 return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
18487 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
18488 result. */
18490 tree
18491 splice_late_return_type (tree type, tree late_return_type)
18493 tree argvec;
18495 if (late_return_type == NULL_TREE)
18496 return type;
18497 argvec = make_tree_vec (1);
18498 TREE_VEC_ELT (argvec, 0) = late_return_type;
18499 if (processing_template_decl)
18500 argvec = add_to_template_args (current_template_args (), argvec);
18501 return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
18504 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto'. */
18506 bool
18507 is_auto (const_tree type)
18509 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
18510 && TYPE_IDENTIFIER (type) == get_identifier ("auto"))
18511 return true;
18512 else
18513 return false;
18516 /* Returns true iff TYPE contains a use of 'auto'. Since auto can only
18517 appear as a type-specifier for the declaration in question, we don't
18518 have to look through the whole type. */
18520 tree
18521 type_uses_auto (tree type)
18523 enum tree_code code;
18524 if (is_auto (type))
18525 return type;
18527 code = TREE_CODE (type);
18529 if (code == POINTER_TYPE || code == REFERENCE_TYPE
18530 || code == OFFSET_TYPE || code == FUNCTION_TYPE
18531 || code == METHOD_TYPE || code == ARRAY_TYPE)
18532 return type_uses_auto (TREE_TYPE (type));
18534 if (TYPE_PTRMEMFUNC_P (type))
18535 return type_uses_auto (TREE_TYPE (TREE_TYPE
18536 (TYPE_PTRMEMFUNC_FN_TYPE (type))));
18538 return NULL_TREE;
18541 /* For a given template T, return the vector of typedefs referenced
18542 in T for which access check is needed at T instantiation time.
18543 T is either a FUNCTION_DECL or a RECORD_TYPE.
18544 Those typedefs were added to T by the function
18545 append_type_to_template_for_access_check. */
18547 VEC(qualified_typedef_usage_t,gc)*
18548 get_types_needing_access_check (tree t)
18550 tree ti;
18551 VEC(qualified_typedef_usage_t,gc) *result = NULL;
18553 if (!t || t == error_mark_node)
18554 return NULL;
18556 if (!(ti = get_template_info (t)))
18557 return NULL;
18559 if (CLASS_TYPE_P (t)
18560 || TREE_CODE (t) == FUNCTION_DECL)
18562 if (!TI_TEMPLATE (ti))
18563 return NULL;
18565 result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
18568 return result;
18571 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
18572 tied to T. That list of typedefs will be access checked at
18573 T instantiation time.
18574 T is either a FUNCTION_DECL or a RECORD_TYPE.
18575 TYPE_DECL is a TYPE_DECL node representing a typedef.
18576 SCOPE is the scope through which TYPE_DECL is accessed.
18577 LOCATION is the location of the usage point of TYPE_DECL.
18579 This function is a subroutine of
18580 append_type_to_template_for_access_check. */
18582 static void
18583 append_type_to_template_for_access_check_1 (tree t,
18584 tree type_decl,
18585 tree scope,
18586 location_t location)
18588 qualified_typedef_usage_t typedef_usage;
18589 tree ti;
18591 if (!t || t == error_mark_node)
18592 return;
18594 gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
18595 || CLASS_TYPE_P (t))
18596 && type_decl
18597 && TREE_CODE (type_decl) == TYPE_DECL
18598 && scope);
18600 if (!(ti = get_template_info (t)))
18601 return;
18603 gcc_assert (TI_TEMPLATE (ti));
18605 typedef_usage.typedef_decl = type_decl;
18606 typedef_usage.context = scope;
18607 typedef_usage.locus = location;
18609 VEC_safe_push (qualified_typedef_usage_t, gc,
18610 TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti),
18611 &typedef_usage);
18614 /* Append TYPE_DECL to the template TEMPL.
18615 TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
18616 At TEMPL instanciation time, TYPE_DECL will be checked to see
18617 if it can be accessed through SCOPE.
18618 LOCATION is the location of the usage point of TYPE_DECL.
18620 e.g. consider the following code snippet:
18622 class C
18624 typedef int myint;
18627 template<class U> struct S
18629 C::myint mi; // <-- usage point of the typedef C::myint
18632 S<char> s;
18634 At S<char> instantiation time, we need to check the access of C::myint
18635 In other words, we need to check the access of the myint typedef through
18636 the C scope. For that purpose, this function will add the myint typedef
18637 and the scope C through which its being accessed to a list of typedefs
18638 tied to the template S. That list will be walked at template instantiation
18639 time and access check performed on each typedefs it contains.
18640 Note that this particular code snippet should yield an error because
18641 myint is private to C. */
18643 void
18644 append_type_to_template_for_access_check (tree templ,
18645 tree type_decl,
18646 tree scope,
18647 location_t location)
18649 qualified_typedef_usage_t *iter;
18650 int i;
18652 gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
18654 /* Make sure we don't append the type to the template twice. */
18655 for (i = 0;
18656 VEC_iterate (qualified_typedef_usage_t,
18657 get_types_needing_access_check (templ),
18658 i, iter);
18659 ++i)
18660 if (iter->typedef_decl == type_decl && scope == iter->context)
18661 return;
18663 append_type_to_template_for_access_check_1 (templ, type_decl,
18664 scope, location);
18667 /* Set up the hash tables for template instantiations. */
18669 void
18670 init_template_processing (void)
18672 decl_specializations = htab_create_ggc (37,
18673 hash_specialization,
18674 eq_specializations,
18675 ggc_free);
18676 type_specializations = htab_create_ggc (37,
18677 hash_specialization,
18678 eq_specializations,
18679 ggc_free);
18682 /* Print stats about the template hash tables for -fstats. */
18684 void
18685 print_template_statistics (void)
18687 fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
18688 "%f collisions\n", (long) htab_size (decl_specializations),
18689 (long) htab_elements (decl_specializations),
18690 htab_collisions (decl_specializations));
18691 fprintf (stderr, "type_specializations: size %ld, %ld elements, "
18692 "%f collisions\n", (long) htab_size (type_specializations),
18693 (long) htab_elements (type_specializations),
18694 htab_collisions (type_specializations));
18697 #include "gt-cp-pt.h"