[PATCH 2/13] musl libc config
[official-gcc.git] / gcc / cp / pt.c
blob78714745452c079f46db03e11e6dbad382aabd60
1 /* Handle parameterized types (templates) for GNU -*- C++ -*-.
2 Copyright (C) 1992-2015 Free Software Foundation, Inc.
3 Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
4 Rewritten by Jason Merrill (jason@cygnus.com).
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3, or (at your option)
11 any later version.
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
22 /* Known bugs or deficiencies include:
24 all methods must be provided in header files; can't use a source
25 file that contains only the method templates and "just win". */
27 #include "config.h"
28 #include "system.h"
29 #include "coretypes.h"
30 #include "tm.h"
31 #include "hash-set.h"
32 #include "machmode.h"
33 #include "vec.h"
34 #include "double-int.h"
35 #include "input.h"
36 #include "alias.h"
37 #include "symtab.h"
38 #include "wide-int.h"
39 #include "inchash.h"
40 #include "tree.h"
41 #include "stringpool.h"
42 #include "varasm.h"
43 #include "attribs.h"
44 #include "stor-layout.h"
45 #include "intl.h"
46 #include "flags.h"
47 #include "cp-tree.h"
48 #include "c-family/c-common.h"
49 #include "c-family/c-objc.h"
50 #include "cp-objcp-common.h"
51 #include "tree-inline.h"
52 #include "decl.h"
53 #include "toplev.h"
54 #include "timevar.h"
55 #include "tree-iterator.h"
56 #include "type-utils.h"
57 #include "gimplify.h"
59 /* The type of functions taking a tree, and some additional data, and
60 returning an int. */
61 typedef int (*tree_fn_t) (tree, void*);
63 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
64 instantiations have been deferred, either because their definitions
65 were not yet available, or because we were putting off doing the work. */
66 struct GTY ((chain_next ("%h.next"))) pending_template {
67 struct pending_template *next;
68 struct tinst_level *tinst;
71 static GTY(()) struct pending_template *pending_templates;
72 static GTY(()) struct pending_template *last_pending_template;
74 int processing_template_parmlist;
75 static int template_header_count;
77 static GTY(()) tree saved_trees;
78 static vec<int> inline_parm_levels;
80 static GTY(()) struct tinst_level *current_tinst_level;
82 static GTY(()) tree saved_access_scope;
84 /* Live only within one (recursive) call to tsubst_expr. We use
85 this to pass the statement expression node from the STMT_EXPR
86 to the EXPR_STMT that is its result. */
87 static tree cur_stmt_expr;
89 /* True if we've recursed into fn_type_unification too many times. */
90 static bool excessive_deduction_depth;
92 struct GTY((for_user)) spec_entry
94 tree tmpl;
95 tree args;
96 tree spec;
99 struct spec_hasher : ggc_hasher<spec_entry *>
101 static hashval_t hash (spec_entry *);
102 static bool equal (spec_entry *, spec_entry *);
105 static GTY (()) hash_table<spec_hasher> *decl_specializations;
107 static GTY (()) hash_table<spec_hasher> *type_specializations;
109 /* Contains canonical template parameter types. The vector is indexed by
110 the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
111 TREE_LIST, whose TREE_VALUEs contain the canonical template
112 parameters of various types and levels. */
113 static GTY(()) vec<tree, va_gc> *canonical_template_parms;
115 #define UNIFY_ALLOW_NONE 0
116 #define UNIFY_ALLOW_MORE_CV_QUAL 1
117 #define UNIFY_ALLOW_LESS_CV_QUAL 2
118 #define UNIFY_ALLOW_DERIVED 4
119 #define UNIFY_ALLOW_INTEGER 8
120 #define UNIFY_ALLOW_OUTER_LEVEL 16
121 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
122 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
124 enum template_base_result {
125 tbr_incomplete_type,
126 tbr_ambiguous_baseclass,
127 tbr_success
130 static void push_access_scope (tree);
131 static void pop_access_scope (tree);
132 static bool resolve_overloaded_unification (tree, tree, tree, tree,
133 unification_kind_t, int,
134 bool);
135 static int try_one_overload (tree, tree, tree, tree, tree,
136 unification_kind_t, int, bool, bool);
137 static int unify (tree, tree, tree, tree, int, bool);
138 static void add_pending_template (tree);
139 static tree reopen_tinst_level (struct tinst_level *);
140 static tree tsubst_initializer_list (tree, tree);
141 static tree get_partial_spec_bindings (tree, tree, tree, tree);
142 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
143 bool, bool);
144 static tree coerce_innermost_template_parms (tree, tree, tree, tsubst_flags_t,
145 bool, bool);
146 static void tsubst_enum (tree, tree, tree);
147 static tree add_to_template_args (tree, tree);
148 static tree add_outermost_template_args (tree, tree);
149 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
150 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
151 tree);
152 static int type_unification_real (tree, tree, tree, const tree *,
153 unsigned int, int, unification_kind_t, int,
154 vec<deferred_access_check, va_gc> **,
155 bool);
156 static void note_template_header (int);
157 static tree convert_nontype_argument_function (tree, tree, tsubst_flags_t);
158 static tree convert_nontype_argument (tree, tree, tsubst_flags_t);
159 static tree convert_template_argument (tree, tree, tree,
160 tsubst_flags_t, int, tree);
161 static int for_each_template_parm (tree, tree_fn_t, void*,
162 hash_set<tree> *, bool);
163 static tree expand_template_argument_pack (tree);
164 static tree build_template_parm_index (int, int, int, tree, tree);
165 static bool inline_needs_template_parms (tree, bool);
166 static void push_inline_template_parms_recursive (tree, int);
167 static tree retrieve_local_specialization (tree);
168 static void register_local_specialization (tree, tree);
169 static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
170 static int mark_template_parm (tree, void *);
171 static int template_parm_this_level_p (tree, void *);
172 static tree tsubst_friend_function (tree, tree);
173 static tree tsubst_friend_class (tree, tree);
174 static int can_complete_type_without_circularity (tree);
175 static tree get_bindings (tree, tree, tree, bool);
176 static int template_decl_level (tree);
177 static int check_cv_quals_for_unify (int, tree, tree);
178 static void template_parm_level_and_index (tree, int*, int*);
179 static int unify_pack_expansion (tree, tree, tree,
180 tree, unification_kind_t, bool, bool);
181 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
182 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
183 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
184 static void regenerate_decl_from_template (tree, tree);
185 static tree most_specialized_partial_spec (tree, tsubst_flags_t);
186 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
187 static tree tsubst_arg_types (tree, tree, tree, tsubst_flags_t, tree);
188 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
189 static bool check_specialization_scope (void);
190 static tree process_partial_specialization (tree);
191 static void set_current_access_from_decl (tree);
192 static enum template_base_result get_template_base (tree, tree, tree, tree,
193 bool , tree *);
194 static tree try_class_unification (tree, tree, tree, tree, bool);
195 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
196 tree, tree);
197 static bool template_template_parm_bindings_ok_p (tree, tree);
198 static int template_args_equal (tree, tree);
199 static void tsubst_default_arguments (tree, tsubst_flags_t);
200 static tree for_each_template_parm_r (tree *, int *, void *);
201 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
202 static void copy_default_args_to_explicit_spec (tree);
203 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
204 static bool dependent_template_arg_p (tree);
205 static bool any_template_arguments_need_structural_equality_p (tree);
206 static bool dependent_type_p_r (tree);
207 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
208 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
209 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
210 static tree tsubst_decl (tree, tree, tsubst_flags_t);
211 static void perform_typedefs_access_check (tree tmpl, tree targs);
212 static void append_type_to_template_for_access_check_1 (tree, tree, tree,
213 location_t);
214 static tree listify (tree);
215 static tree listify_autos (tree, tree);
216 static tree template_parm_to_arg (tree t);
217 static tree current_template_args (void);
218 static tree tsubst_template_parm (tree, tree, tsubst_flags_t);
219 static tree instantiate_alias_template (tree, tree, tsubst_flags_t);
221 /* Make the current scope suitable for access checking when we are
222 processing T. T can be FUNCTION_DECL for instantiated function
223 template, VAR_DECL for static member variable, or TYPE_DECL for
224 alias template (needed by instantiate_decl). */
226 static void
227 push_access_scope (tree t)
229 gcc_assert (VAR_OR_FUNCTION_DECL_P (t)
230 || TREE_CODE (t) == TYPE_DECL);
232 if (DECL_FRIEND_CONTEXT (t))
233 push_nested_class (DECL_FRIEND_CONTEXT (t));
234 else if (DECL_CLASS_SCOPE_P (t))
235 push_nested_class (DECL_CONTEXT (t));
236 else
237 push_to_top_level ();
239 if (TREE_CODE (t) == FUNCTION_DECL)
241 saved_access_scope = tree_cons
242 (NULL_TREE, current_function_decl, saved_access_scope);
243 current_function_decl = t;
247 /* Restore the scope set up by push_access_scope. T is the node we
248 are processing. */
250 static void
251 pop_access_scope (tree t)
253 if (TREE_CODE (t) == FUNCTION_DECL)
255 current_function_decl = TREE_VALUE (saved_access_scope);
256 saved_access_scope = TREE_CHAIN (saved_access_scope);
259 if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
260 pop_nested_class ();
261 else
262 pop_from_top_level ();
265 /* Do any processing required when DECL (a member template
266 declaration) is finished. Returns the TEMPLATE_DECL corresponding
267 to DECL, unless it is a specialization, in which case the DECL
268 itself is returned. */
270 tree
271 finish_member_template_decl (tree decl)
273 if (decl == error_mark_node)
274 return error_mark_node;
276 gcc_assert (DECL_P (decl));
278 if (TREE_CODE (decl) == TYPE_DECL)
280 tree type;
282 type = TREE_TYPE (decl);
283 if (type == error_mark_node)
284 return error_mark_node;
285 if (MAYBE_CLASS_TYPE_P (type)
286 && CLASSTYPE_TEMPLATE_INFO (type)
287 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
289 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
290 check_member_template (tmpl);
291 return tmpl;
293 return NULL_TREE;
295 else if (TREE_CODE (decl) == FIELD_DECL)
296 error ("data member %qD cannot be a member template", decl);
297 else if (DECL_TEMPLATE_INFO (decl))
299 if (!DECL_TEMPLATE_SPECIALIZATION (decl))
301 check_member_template (DECL_TI_TEMPLATE (decl));
302 return DECL_TI_TEMPLATE (decl);
304 else
305 return decl;
307 else
308 error ("invalid member template declaration %qD", decl);
310 return error_mark_node;
313 /* Create a template info node. */
315 tree
316 build_template_info (tree template_decl, tree template_args)
318 tree result = make_node (TEMPLATE_INFO);
319 TI_TEMPLATE (result) = template_decl;
320 TI_ARGS (result) = template_args;
321 return result;
324 /* Return the template info node corresponding to T, whatever T is. */
326 tree
327 get_template_info (const_tree t)
329 tree tinfo = NULL_TREE;
331 if (!t || t == error_mark_node)
332 return NULL;
334 if (TREE_CODE (t) == NAMESPACE_DECL)
335 return NULL;
337 if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
338 tinfo = DECL_TEMPLATE_INFO (t);
340 if (!tinfo && DECL_IMPLICIT_TYPEDEF_P (t))
341 t = TREE_TYPE (t);
343 if (OVERLOAD_TYPE_P (t))
344 tinfo = TYPE_TEMPLATE_INFO (t);
345 else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
346 tinfo = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
348 return tinfo;
351 /* Returns the template nesting level of the indicated class TYPE.
353 For example, in:
354 template <class T>
355 struct A
357 template <class U>
358 struct B {};
361 A<T>::B<U> has depth two, while A<T> has depth one.
362 Both A<T>::B<int> and A<int>::B<U> have depth one, if
363 they are instantiations, not specializations.
365 This function is guaranteed to return 0 if passed NULL_TREE so
366 that, for example, `template_class_depth (current_class_type)' is
367 always safe. */
370 template_class_depth (tree type)
372 int depth;
374 for (depth = 0;
375 type && TREE_CODE (type) != NAMESPACE_DECL;
376 type = (TREE_CODE (type) == FUNCTION_DECL)
377 ? CP_DECL_CONTEXT (type) : CP_TYPE_CONTEXT (type))
379 tree tinfo = get_template_info (type);
381 if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
382 && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
383 ++depth;
386 return depth;
389 /* Subroutine of maybe_begin_member_template_processing.
390 Returns true if processing DECL needs us to push template parms. */
392 static bool
393 inline_needs_template_parms (tree decl, bool nsdmi)
395 if (!decl || (!nsdmi && ! DECL_TEMPLATE_INFO (decl)))
396 return false;
398 return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
399 > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
402 /* Subroutine of maybe_begin_member_template_processing.
403 Push the template parms in PARMS, starting from LEVELS steps into the
404 chain, and ending at the beginning, since template parms are listed
405 innermost first. */
407 static void
408 push_inline_template_parms_recursive (tree parmlist, int levels)
410 tree parms = TREE_VALUE (parmlist);
411 int i;
413 if (levels > 1)
414 push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
416 ++processing_template_decl;
417 current_template_parms
418 = tree_cons (size_int (processing_template_decl),
419 parms, current_template_parms);
420 TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
422 begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
423 NULL);
424 for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
426 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
428 if (error_operand_p (parm))
429 continue;
431 gcc_assert (DECL_P (parm));
433 switch (TREE_CODE (parm))
435 case TYPE_DECL:
436 case TEMPLATE_DECL:
437 pushdecl (parm);
438 break;
440 case PARM_DECL:
442 /* Make a CONST_DECL as is done in process_template_parm.
443 It is ugly that we recreate this here; the original
444 version built in process_template_parm is no longer
445 available. */
446 tree decl = build_decl (DECL_SOURCE_LOCATION (parm),
447 CONST_DECL, DECL_NAME (parm),
448 TREE_TYPE (parm));
449 DECL_ARTIFICIAL (decl) = 1;
450 TREE_CONSTANT (decl) = 1;
451 TREE_READONLY (decl) = 1;
452 DECL_INITIAL (decl) = DECL_INITIAL (parm);
453 SET_DECL_TEMPLATE_PARM_P (decl);
454 pushdecl (decl);
456 break;
458 default:
459 gcc_unreachable ();
464 /* Restore the template parameter context for a member template, a
465 friend template defined in a class definition, or a non-template
466 member of template class. */
468 void
469 maybe_begin_member_template_processing (tree decl)
471 tree parms;
472 int levels = 0;
473 bool nsdmi = TREE_CODE (decl) == FIELD_DECL;
475 if (nsdmi)
477 tree ctx = DECL_CONTEXT (decl);
478 decl = (CLASSTYPE_TEMPLATE_INFO (ctx)
479 /* Disregard full specializations (c++/60999). */
480 && uses_template_parms (ctx)
481 ? CLASSTYPE_TI_TEMPLATE (ctx) : NULL_TREE);
484 if (inline_needs_template_parms (decl, nsdmi))
486 parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
487 levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
489 if (DECL_TEMPLATE_SPECIALIZATION (decl))
491 --levels;
492 parms = TREE_CHAIN (parms);
495 push_inline_template_parms_recursive (parms, levels);
498 /* Remember how many levels of template parameters we pushed so that
499 we can pop them later. */
500 inline_parm_levels.safe_push (levels);
503 /* Undo the effects of maybe_begin_member_template_processing. */
505 void
506 maybe_end_member_template_processing (void)
508 int i;
509 int last;
511 if (inline_parm_levels.length () == 0)
512 return;
514 last = inline_parm_levels.pop ();
515 for (i = 0; i < last; ++i)
517 --processing_template_decl;
518 current_template_parms = TREE_CHAIN (current_template_parms);
519 poplevel (0, 0, 0);
523 /* Return a new template argument vector which contains all of ARGS,
524 but has as its innermost set of arguments the EXTRA_ARGS. */
526 static tree
527 add_to_template_args (tree args, tree extra_args)
529 tree new_args;
530 int extra_depth;
531 int i;
532 int j;
534 if (args == NULL_TREE || extra_args == error_mark_node)
535 return extra_args;
537 extra_depth = TMPL_ARGS_DEPTH (extra_args);
538 new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
540 for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
541 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
543 for (j = 1; j <= extra_depth; ++j, ++i)
544 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
546 return new_args;
549 /* Like add_to_template_args, but only the outermost ARGS are added to
550 the EXTRA_ARGS. In particular, all but TMPL_ARGS_DEPTH
551 (EXTRA_ARGS) levels are added. This function is used to combine
552 the template arguments from a partial instantiation with the
553 template arguments used to attain the full instantiation from the
554 partial instantiation. */
556 static tree
557 add_outermost_template_args (tree args, tree extra_args)
559 tree new_args;
561 /* If there are more levels of EXTRA_ARGS than there are ARGS,
562 something very fishy is going on. */
563 gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
565 /* If *all* the new arguments will be the EXTRA_ARGS, just return
566 them. */
567 if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
568 return extra_args;
570 /* For the moment, we make ARGS look like it contains fewer levels. */
571 TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
573 new_args = add_to_template_args (args, extra_args);
575 /* Now, we restore ARGS to its full dimensions. */
576 TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
578 return new_args;
581 /* Return the N levels of innermost template arguments from the ARGS. */
583 tree
584 get_innermost_template_args (tree args, int n)
586 tree new_args;
587 int extra_levels;
588 int i;
590 gcc_assert (n >= 0);
592 /* If N is 1, just return the innermost set of template arguments. */
593 if (n == 1)
594 return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
596 /* If we're not removing anything, just return the arguments we were
597 given. */
598 extra_levels = TMPL_ARGS_DEPTH (args) - n;
599 gcc_assert (extra_levels >= 0);
600 if (extra_levels == 0)
601 return args;
603 /* Make a new set of arguments, not containing the outer arguments. */
604 new_args = make_tree_vec (n);
605 for (i = 1; i <= n; ++i)
606 SET_TMPL_ARGS_LEVEL (new_args, i,
607 TMPL_ARGS_LEVEL (args, i + extra_levels));
609 return new_args;
612 /* The inverse of get_innermost_template_args: Return all but the innermost
613 EXTRA_LEVELS levels of template arguments from the ARGS. */
615 static tree
616 strip_innermost_template_args (tree args, int extra_levels)
618 tree new_args;
619 int n = TMPL_ARGS_DEPTH (args) - extra_levels;
620 int i;
622 gcc_assert (n >= 0);
624 /* If N is 1, just return the outermost set of template arguments. */
625 if (n == 1)
626 return TMPL_ARGS_LEVEL (args, 1);
628 /* If we're not removing anything, just return the arguments we were
629 given. */
630 gcc_assert (extra_levels >= 0);
631 if (extra_levels == 0)
632 return args;
634 /* Make a new set of arguments, not containing the inner arguments. */
635 new_args = make_tree_vec (n);
636 for (i = 1; i <= n; ++i)
637 SET_TMPL_ARGS_LEVEL (new_args, i,
638 TMPL_ARGS_LEVEL (args, i));
640 return new_args;
643 /* We've got a template header coming up; push to a new level for storing
644 the parms. */
646 void
647 begin_template_parm_list (void)
649 /* We use a non-tag-transparent scope here, which causes pushtag to
650 put tags in this scope, rather than in the enclosing class or
651 namespace scope. This is the right thing, since we want
652 TEMPLATE_DECLS, and not TYPE_DECLS for template classes. For a
653 global template class, push_template_decl handles putting the
654 TEMPLATE_DECL into top-level scope. For a nested template class,
655 e.g.:
657 template <class T> struct S1 {
658 template <class T> struct S2 {};
661 pushtag contains special code to call pushdecl_with_scope on the
662 TEMPLATE_DECL for S2. */
663 begin_scope (sk_template_parms, NULL);
664 ++processing_template_decl;
665 ++processing_template_parmlist;
666 note_template_header (0);
669 /* This routine is called when a specialization is declared. If it is
670 invalid to declare a specialization here, an error is reported and
671 false is returned, otherwise this routine will return true. */
673 static bool
674 check_specialization_scope (void)
676 tree scope = current_scope ();
678 /* [temp.expl.spec]
680 An explicit specialization shall be declared in the namespace of
681 which the template is a member, or, for member templates, in the
682 namespace of which the enclosing class or enclosing class
683 template is a member. An explicit specialization of a member
684 function, member class or static data member of a class template
685 shall be declared in the namespace of which the class template
686 is a member. */
687 if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
689 error ("explicit specialization in non-namespace scope %qD", scope);
690 return false;
693 /* [temp.expl.spec]
695 In an explicit specialization declaration for a member of a class
696 template or a member template that appears in namespace scope,
697 the member template and some of its enclosing class templates may
698 remain unspecialized, except that the declaration shall not
699 explicitly specialize a class member template if its enclosing
700 class templates are not explicitly specialized as well. */
701 if (current_template_parms)
703 error ("enclosing class templates are not explicitly specialized");
704 return false;
707 return true;
710 /* We've just seen template <>. */
712 bool
713 begin_specialization (void)
715 begin_scope (sk_template_spec, NULL);
716 note_template_header (1);
717 return check_specialization_scope ();
720 /* Called at then end of processing a declaration preceded by
721 template<>. */
723 void
724 end_specialization (void)
726 finish_scope ();
727 reset_specialization ();
730 /* Any template <>'s that we have seen thus far are not referring to a
731 function specialization. */
733 void
734 reset_specialization (void)
736 processing_specialization = 0;
737 template_header_count = 0;
740 /* We've just seen a template header. If SPECIALIZATION is nonzero,
741 it was of the form template <>. */
743 static void
744 note_template_header (int specialization)
746 processing_specialization = specialization;
747 template_header_count++;
750 /* We're beginning an explicit instantiation. */
752 void
753 begin_explicit_instantiation (void)
755 gcc_assert (!processing_explicit_instantiation);
756 processing_explicit_instantiation = true;
760 void
761 end_explicit_instantiation (void)
763 gcc_assert (processing_explicit_instantiation);
764 processing_explicit_instantiation = false;
767 /* An explicit specialization or partial specialization of TMPL is being
768 declared. Check that the namespace in which the specialization is
769 occurring is permissible. Returns false iff it is invalid to
770 specialize TMPL in the current namespace. */
772 static bool
773 check_specialization_namespace (tree tmpl)
775 tree tpl_ns = decl_namespace_context (tmpl);
777 /* [tmpl.expl.spec]
779 An explicit specialization shall be declared in the namespace of
780 which the template is a member, or, for member templates, in the
781 namespace of which the enclosing class or enclosing class
782 template is a member. An explicit specialization of a member
783 function, member class or static data member of a class template
784 shall be declared in the namespace of which the class template is
785 a member. */
786 if (current_scope() != DECL_CONTEXT (tmpl)
787 && !at_namespace_scope_p ())
789 error ("specialization of %qD must appear at namespace scope", tmpl);
790 return false;
792 if (is_associated_namespace (current_namespace, tpl_ns))
793 /* Same or super-using namespace. */
794 return true;
795 else
797 permerror (input_location, "specialization of %qD in different namespace", tmpl);
798 permerror (input_location, " from definition of %q+#D", tmpl);
799 return false;
803 /* SPEC is an explicit instantiation. Check that it is valid to
804 perform this explicit instantiation in the current namespace. */
806 static void
807 check_explicit_instantiation_namespace (tree spec)
809 tree ns;
811 /* DR 275: An explicit instantiation shall appear in an enclosing
812 namespace of its template. */
813 ns = decl_namespace_context (spec);
814 if (!is_ancestor (current_namespace, ns))
815 permerror (input_location, "explicit instantiation of %qD in namespace %qD "
816 "(which does not enclose namespace %qD)",
817 spec, current_namespace, ns);
820 /* The TYPE is being declared. If it is a template type, that means it
821 is a partial specialization. Do appropriate error-checking. */
823 tree
824 maybe_process_partial_specialization (tree type)
826 tree context;
828 if (type == error_mark_node)
829 return error_mark_node;
831 /* A lambda that appears in specialization context is not itself a
832 specialization. */
833 if (CLASS_TYPE_P (type) && CLASSTYPE_LAMBDA_EXPR (type))
834 return type;
836 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
838 error ("name of class shadows template template parameter %qD",
839 TYPE_NAME (type));
840 return error_mark_node;
843 context = TYPE_CONTEXT (type);
845 if (TYPE_ALIAS_P (type))
847 if (TYPE_TEMPLATE_INFO (type)
848 && DECL_ALIAS_TEMPLATE_P (TYPE_TI_TEMPLATE (type)))
849 error ("specialization of alias template %qD",
850 TYPE_TI_TEMPLATE (type));
851 else
852 error ("explicit specialization of non-template %qT", type);
853 return error_mark_node;
855 else if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
857 /* This is for ordinary explicit specialization and partial
858 specialization of a template class such as:
860 template <> class C<int>;
864 template <class T> class C<T*>;
866 Make sure that `C<int>' and `C<T*>' are implicit instantiations. */
868 if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
869 && !COMPLETE_TYPE_P (type))
871 if (!check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type))
872 && !at_namespace_scope_p ())
873 return error_mark_node;
874 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
875 DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)) = input_location;
876 if (processing_template_decl)
878 if (push_template_decl (TYPE_MAIN_DECL (type))
879 == error_mark_node)
880 return error_mark_node;
883 else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
884 error ("specialization of %qT after instantiation", type);
885 else if (errorcount && !processing_specialization
886 && CLASSTYPE_TEMPLATE_SPECIALIZATION (type)
887 && !uses_template_parms (CLASSTYPE_TI_ARGS (type)))
888 /* Trying to define a specialization either without a template<> header
889 or in an inappropriate place. We've already given an error, so just
890 bail now so we don't actually define the specialization. */
891 return error_mark_node;
893 else if (CLASS_TYPE_P (type)
894 && !CLASSTYPE_USE_TEMPLATE (type)
895 && CLASSTYPE_TEMPLATE_INFO (type)
896 && context && CLASS_TYPE_P (context)
897 && CLASSTYPE_TEMPLATE_INFO (context))
899 /* This is for an explicit specialization of member class
900 template according to [temp.expl.spec/18]:
902 template <> template <class U> class C<int>::D;
904 The context `C<int>' must be an implicit instantiation.
905 Otherwise this is just a member class template declared
906 earlier like:
908 template <> class C<int> { template <class U> class D; };
909 template <> template <class U> class C<int>::D;
911 In the first case, `C<int>::D' is a specialization of `C<T>::D'
912 while in the second case, `C<int>::D' is a primary template
913 and `C<T>::D' may not exist. */
915 if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
916 && !COMPLETE_TYPE_P (type))
918 tree t;
919 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
921 if (current_namespace
922 != decl_namespace_context (tmpl))
924 permerror (input_location, "specializing %q#T in different namespace", type);
925 permerror (input_location, " from definition of %q+#D", tmpl);
928 /* Check for invalid specialization after instantiation:
930 template <> template <> class C<int>::D<int>;
931 template <> template <class U> class C<int>::D; */
933 for (t = DECL_TEMPLATE_INSTANTIATIONS (tmpl);
934 t; t = TREE_CHAIN (t))
936 tree inst = TREE_VALUE (t);
937 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (inst)
938 || !COMPLETE_OR_OPEN_TYPE_P (inst))
940 /* We already have a full specialization of this partial
941 instantiation, or a full specialization has been
942 looked up but not instantiated. Reassign it to the
943 new member specialization template. */
944 spec_entry elt;
945 spec_entry *entry;
947 elt.tmpl = most_general_template (tmpl);
948 elt.args = CLASSTYPE_TI_ARGS (inst);
949 elt.spec = inst;
951 type_specializations->remove_elt (&elt);
953 elt.tmpl = tmpl;
954 elt.args = INNERMOST_TEMPLATE_ARGS (elt.args);
956 spec_entry **slot
957 = type_specializations->find_slot (&elt, INSERT);
958 entry = ggc_alloc<spec_entry> ();
959 *entry = elt;
960 *slot = entry;
962 else
963 /* But if we've had an implicit instantiation, that's a
964 problem ([temp.expl.spec]/6). */
965 error ("specialization %qT after instantiation %qT",
966 type, inst);
969 /* Mark TYPE as a specialization. And as a result, we only
970 have one level of template argument for the innermost
971 class template. */
972 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
973 DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)) = input_location;
974 CLASSTYPE_TI_ARGS (type)
975 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
978 else if (processing_specialization)
980 /* Someday C++0x may allow for enum template specialization. */
981 if (cxx_dialect > cxx98 && TREE_CODE (type) == ENUMERAL_TYPE
982 && CLASS_TYPE_P (context) && CLASSTYPE_USE_TEMPLATE (context))
983 pedwarn (input_location, OPT_Wpedantic, "template specialization "
984 "of %qD not allowed by ISO C++", type);
985 else
987 error ("explicit specialization of non-template %qT", type);
988 return error_mark_node;
992 return type;
995 /* Returns nonzero if we can optimize the retrieval of specializations
996 for TMPL, a TEMPLATE_DECL. In particular, for such a template, we
997 do not use DECL_TEMPLATE_SPECIALIZATIONS at all. */
999 static inline bool
1000 optimize_specialization_lookup_p (tree tmpl)
1002 return (DECL_FUNCTION_TEMPLATE_P (tmpl)
1003 && DECL_CLASS_SCOPE_P (tmpl)
1004 /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
1005 parameter. */
1006 && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
1007 /* The optimized lookup depends on the fact that the
1008 template arguments for the member function template apply
1009 purely to the containing class, which is not true if the
1010 containing class is an explicit or partial
1011 specialization. */
1012 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
1013 && !DECL_MEMBER_TEMPLATE_P (tmpl)
1014 && !DECL_CONV_FN_P (tmpl)
1015 /* It is possible to have a template that is not a member
1016 template and is not a member of a template class:
1018 template <typename T>
1019 struct S { friend A::f(); };
1021 Here, the friend function is a template, but the context does
1022 not have template information. The optimized lookup relies
1023 on having ARGS be the template arguments for both the class
1024 and the function template. */
1025 && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
1028 /* Retrieve the specialization (in the sense of [temp.spec] - a
1029 specialization is either an instantiation or an explicit
1030 specialization) of TMPL for the given template ARGS. If there is
1031 no such specialization, return NULL_TREE. The ARGS are a vector of
1032 arguments, or a vector of vectors of arguments, in the case of
1033 templates with more than one level of parameters.
1035 If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
1036 then we search for a partial specialization matching ARGS. This
1037 parameter is ignored if TMPL is not a class template.
1039 We can also look up a FIELD_DECL, if it is a lambda capture pack; the
1040 result is a NONTYPE_ARGUMENT_PACK. */
1042 static tree
1043 retrieve_specialization (tree tmpl, tree args, hashval_t hash)
1045 if (tmpl == NULL_TREE)
1046 return NULL_TREE;
1048 if (args == error_mark_node)
1049 return NULL_TREE;
1051 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL
1052 || TREE_CODE (tmpl) == FIELD_DECL);
1054 /* There should be as many levels of arguments as there are
1055 levels of parameters. */
1056 gcc_assert (TMPL_ARGS_DEPTH (args)
1057 == (TREE_CODE (tmpl) == TEMPLATE_DECL
1058 ? TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl))
1059 : template_class_depth (DECL_CONTEXT (tmpl))));
1061 if (optimize_specialization_lookup_p (tmpl))
1063 tree class_template;
1064 tree class_specialization;
1065 vec<tree, va_gc> *methods;
1066 tree fns;
1067 int idx;
1069 /* The template arguments actually apply to the containing
1070 class. Find the class specialization with those
1071 arguments. */
1072 class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
1073 class_specialization
1074 = retrieve_specialization (class_template, args, 0);
1075 if (!class_specialization)
1076 return NULL_TREE;
1077 /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
1078 for the specialization. */
1079 idx = class_method_index_for_fn (class_specialization, tmpl);
1080 if (idx == -1)
1081 return NULL_TREE;
1082 /* Iterate through the methods with the indicated name, looking
1083 for the one that has an instance of TMPL. */
1084 methods = CLASSTYPE_METHOD_VEC (class_specialization);
1085 for (fns = (*methods)[idx]; fns; fns = OVL_NEXT (fns))
1087 tree fn = OVL_CURRENT (fns);
1088 if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl
1089 /* using-declarations can add base methods to the method vec,
1090 and we don't want those here. */
1091 && DECL_CONTEXT (fn) == class_specialization)
1092 return fn;
1094 return NULL_TREE;
1096 else
1098 spec_entry *found;
1099 spec_entry elt;
1100 hash_table<spec_hasher> *specializations;
1102 elt.tmpl = tmpl;
1103 elt.args = args;
1104 elt.spec = NULL_TREE;
1106 if (DECL_CLASS_TEMPLATE_P (tmpl))
1107 specializations = type_specializations;
1108 else
1109 specializations = decl_specializations;
1111 if (hash == 0)
1112 hash = spec_hasher::hash (&elt);
1113 found = specializations->find_with_hash (&elt, hash);
1114 if (found)
1115 return found->spec;
1118 return NULL_TREE;
1121 /* Like retrieve_specialization, but for local declarations. */
1123 static tree
1124 retrieve_local_specialization (tree tmpl)
1126 if (local_specializations == NULL)
1127 return NULL_TREE;
1129 tree *slot = local_specializations->get (tmpl);
1130 return slot ? *slot : NULL_TREE;
1133 /* Returns nonzero iff DECL is a specialization of TMPL. */
1136 is_specialization_of (tree decl, tree tmpl)
1138 tree t;
1140 if (TREE_CODE (decl) == FUNCTION_DECL)
1142 for (t = decl;
1143 t != NULL_TREE;
1144 t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1145 if (t == tmpl)
1146 return 1;
1148 else
1150 gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1152 for (t = TREE_TYPE (decl);
1153 t != NULL_TREE;
1154 t = CLASSTYPE_USE_TEMPLATE (t)
1155 ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1156 if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1157 return 1;
1160 return 0;
1163 /* Returns nonzero iff DECL is a specialization of friend declaration
1164 FRIEND_DECL according to [temp.friend]. */
1166 bool
1167 is_specialization_of_friend (tree decl, tree friend_decl)
1169 bool need_template = true;
1170 int template_depth;
1172 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1173 || TREE_CODE (decl) == TYPE_DECL);
1175 /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1176 of a template class, we want to check if DECL is a specialization
1177 if this. */
1178 if (TREE_CODE (friend_decl) == FUNCTION_DECL
1179 && DECL_TEMPLATE_INFO (friend_decl)
1180 && !DECL_USE_TEMPLATE (friend_decl))
1182 /* We want a TEMPLATE_DECL for `is_specialization_of'. */
1183 friend_decl = DECL_TI_TEMPLATE (friend_decl);
1184 need_template = false;
1186 else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1187 && !PRIMARY_TEMPLATE_P (friend_decl))
1188 need_template = false;
1190 /* There is nothing to do if this is not a template friend. */
1191 if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1192 return false;
1194 if (is_specialization_of (decl, friend_decl))
1195 return true;
1197 /* [temp.friend/6]
1198 A member of a class template may be declared to be a friend of a
1199 non-template class. In this case, the corresponding member of
1200 every specialization of the class template is a friend of the
1201 class granting friendship.
1203 For example, given a template friend declaration
1205 template <class T> friend void A<T>::f();
1207 the member function below is considered a friend
1209 template <> struct A<int> {
1210 void f();
1213 For this type of template friend, TEMPLATE_DEPTH below will be
1214 nonzero. To determine if DECL is a friend of FRIEND, we first
1215 check if the enclosing class is a specialization of another. */
1217 template_depth = template_class_depth (CP_DECL_CONTEXT (friend_decl));
1218 if (template_depth
1219 && DECL_CLASS_SCOPE_P (decl)
1220 && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1221 CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1223 /* Next, we check the members themselves. In order to handle
1224 a few tricky cases, such as when FRIEND_DECL's are
1226 template <class T> friend void A<T>::g(T t);
1227 template <class T> template <T t> friend void A<T>::h();
1229 and DECL's are
1231 void A<int>::g(int);
1232 template <int> void A<int>::h();
1234 we need to figure out ARGS, the template arguments from
1235 the context of DECL. This is required for template substitution
1236 of `T' in the function parameter of `g' and template parameter
1237 of `h' in the above examples. Here ARGS corresponds to `int'. */
1239 tree context = DECL_CONTEXT (decl);
1240 tree args = NULL_TREE;
1241 int current_depth = 0;
1243 while (current_depth < template_depth)
1245 if (CLASSTYPE_TEMPLATE_INFO (context))
1247 if (current_depth == 0)
1248 args = TYPE_TI_ARGS (context);
1249 else
1250 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1251 current_depth++;
1253 context = TYPE_CONTEXT (context);
1256 if (TREE_CODE (decl) == FUNCTION_DECL)
1258 bool is_template;
1259 tree friend_type;
1260 tree decl_type;
1261 tree friend_args_type;
1262 tree decl_args_type;
1264 /* Make sure that both DECL and FRIEND_DECL are templates or
1265 non-templates. */
1266 is_template = DECL_TEMPLATE_INFO (decl)
1267 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1268 if (need_template ^ is_template)
1269 return false;
1270 else if (is_template)
1272 /* If both are templates, check template parameter list. */
1273 tree friend_parms
1274 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1275 args, tf_none);
1276 if (!comp_template_parms
1277 (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1278 friend_parms))
1279 return false;
1281 decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1283 else
1284 decl_type = TREE_TYPE (decl);
1286 friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1287 tf_none, NULL_TREE);
1288 if (friend_type == error_mark_node)
1289 return false;
1291 /* Check if return types match. */
1292 if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1293 return false;
1295 /* Check if function parameter types match, ignoring the
1296 `this' parameter. */
1297 friend_args_type = TYPE_ARG_TYPES (friend_type);
1298 decl_args_type = TYPE_ARG_TYPES (decl_type);
1299 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1300 friend_args_type = TREE_CHAIN (friend_args_type);
1301 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1302 decl_args_type = TREE_CHAIN (decl_args_type);
1304 return compparms (decl_args_type, friend_args_type);
1306 else
1308 /* DECL is a TYPE_DECL */
1309 bool is_template;
1310 tree decl_type = TREE_TYPE (decl);
1312 /* Make sure that both DECL and FRIEND_DECL are templates or
1313 non-templates. */
1314 is_template
1315 = CLASSTYPE_TEMPLATE_INFO (decl_type)
1316 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1318 if (need_template ^ is_template)
1319 return false;
1320 else if (is_template)
1322 tree friend_parms;
1323 /* If both are templates, check the name of the two
1324 TEMPLATE_DECL's first because is_friend didn't. */
1325 if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1326 != DECL_NAME (friend_decl))
1327 return false;
1329 /* Now check template parameter list. */
1330 friend_parms
1331 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1332 args, tf_none);
1333 return comp_template_parms
1334 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1335 friend_parms);
1337 else
1338 return (DECL_NAME (decl)
1339 == DECL_NAME (friend_decl));
1342 return false;
1345 /* Register the specialization SPEC as a specialization of TMPL with
1346 the indicated ARGS. IS_FRIEND indicates whether the specialization
1347 is actually just a friend declaration. Returns SPEC, or an
1348 equivalent prior declaration, if available.
1350 We also store instantiations of field packs in the hash table, even
1351 though they are not themselves templates, to make lookup easier. */
1353 static tree
1354 register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
1355 hashval_t hash)
1357 tree fn;
1358 spec_entry **slot = NULL;
1359 spec_entry elt;
1361 gcc_assert ((TREE_CODE (tmpl) == TEMPLATE_DECL && DECL_P (spec))
1362 || (TREE_CODE (tmpl) == FIELD_DECL
1363 && TREE_CODE (spec) == NONTYPE_ARGUMENT_PACK));
1365 if (TREE_CODE (spec) == FUNCTION_DECL
1366 && uses_template_parms (DECL_TI_ARGS (spec)))
1367 /* This is the FUNCTION_DECL for a partial instantiation. Don't
1368 register it; we want the corresponding TEMPLATE_DECL instead.
1369 We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1370 the more obvious `uses_template_parms (spec)' to avoid problems
1371 with default function arguments. In particular, given
1372 something like this:
1374 template <class T> void f(T t1, T t = T())
1376 the default argument expression is not substituted for in an
1377 instantiation unless and until it is actually needed. */
1378 return spec;
1380 if (optimize_specialization_lookup_p (tmpl))
1381 /* We don't put these specializations in the hash table, but we might
1382 want to give an error about a mismatch. */
1383 fn = retrieve_specialization (tmpl, args, 0);
1384 else
1386 elt.tmpl = tmpl;
1387 elt.args = args;
1388 elt.spec = spec;
1390 if (hash == 0)
1391 hash = spec_hasher::hash (&elt);
1393 slot =
1394 decl_specializations->find_slot_with_hash (&elt, hash, INSERT);
1395 if (*slot)
1396 fn = ((spec_entry *) *slot)->spec;
1397 else
1398 fn = NULL_TREE;
1401 /* We can sometimes try to re-register a specialization that we've
1402 already got. In particular, regenerate_decl_from_template calls
1403 duplicate_decls which will update the specialization list. But,
1404 we'll still get called again here anyhow. It's more convenient
1405 to simply allow this than to try to prevent it. */
1406 if (fn == spec)
1407 return spec;
1408 else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1410 if (DECL_TEMPLATE_INSTANTIATION (fn))
1412 if (DECL_ODR_USED (fn)
1413 || DECL_EXPLICIT_INSTANTIATION (fn))
1415 error ("specialization of %qD after instantiation",
1416 fn);
1417 return error_mark_node;
1419 else
1421 tree clone;
1422 /* This situation should occur only if the first
1423 specialization is an implicit instantiation, the
1424 second is an explicit specialization, and the
1425 implicit instantiation has not yet been used. That
1426 situation can occur if we have implicitly
1427 instantiated a member function and then specialized
1428 it later.
1430 We can also wind up here if a friend declaration that
1431 looked like an instantiation turns out to be a
1432 specialization:
1434 template <class T> void foo(T);
1435 class S { friend void foo<>(int) };
1436 template <> void foo(int);
1438 We transform the existing DECL in place so that any
1439 pointers to it become pointers to the updated
1440 declaration.
1442 If there was a definition for the template, but not
1443 for the specialization, we want this to look as if
1444 there were no definition, and vice versa. */
1445 DECL_INITIAL (fn) = NULL_TREE;
1446 duplicate_decls (spec, fn, is_friend);
1447 /* The call to duplicate_decls will have applied
1448 [temp.expl.spec]:
1450 An explicit specialization of a function template
1451 is inline only if it is explicitly declared to be,
1452 and independently of whether its function template
1455 to the primary function; now copy the inline bits to
1456 the various clones. */
1457 FOR_EACH_CLONE (clone, fn)
1459 DECL_DECLARED_INLINE_P (clone)
1460 = DECL_DECLARED_INLINE_P (fn);
1461 DECL_SOURCE_LOCATION (clone)
1462 = DECL_SOURCE_LOCATION (fn);
1463 DECL_DELETED_FN (clone)
1464 = DECL_DELETED_FN (fn);
1466 check_specialization_namespace (tmpl);
1468 return fn;
1471 else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1473 if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1474 /* Dup decl failed, but this is a new definition. Set the
1475 line number so any errors match this new
1476 definition. */
1477 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1479 return fn;
1482 else if (fn)
1483 return duplicate_decls (spec, fn, is_friend);
1485 /* A specialization must be declared in the same namespace as the
1486 template it is specializing. */
1487 if (DECL_P (spec) && DECL_TEMPLATE_SPECIALIZATION (spec)
1488 && !check_specialization_namespace (tmpl))
1489 DECL_CONTEXT (spec) = DECL_CONTEXT (tmpl);
1491 if (slot != NULL /* !optimize_specialization_lookup_p (tmpl) */)
1493 spec_entry *entry = ggc_alloc<spec_entry> ();
1494 gcc_assert (tmpl && args && spec);
1495 *entry = elt;
1496 *slot = entry;
1497 if ((TREE_CODE (spec) == FUNCTION_DECL && DECL_NAMESPACE_SCOPE_P (spec)
1498 && PRIMARY_TEMPLATE_P (tmpl)
1499 && DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (tmpl)) == NULL_TREE)
1500 || variable_template_p (tmpl))
1501 /* If TMPL is a forward declaration of a template function, keep a list
1502 of all specializations in case we need to reassign them to a friend
1503 template later in tsubst_friend_function.
1505 Also keep a list of all variable template instantiations so that
1506 process_partial_specialization can check whether a later partial
1507 specialization would have used it. */
1508 DECL_TEMPLATE_INSTANTIATIONS (tmpl)
1509 = tree_cons (args, spec, DECL_TEMPLATE_INSTANTIATIONS (tmpl));
1512 return spec;
1515 /* Returns true iff two spec_entry nodes are equivalent. Only compares the
1516 TMPL and ARGS members, ignores SPEC. */
1518 int comparing_specializations;
1520 bool
1521 spec_hasher::equal (spec_entry *e1, spec_entry *e2)
1523 int equal;
1525 ++comparing_specializations;
1526 equal = (e1->tmpl == e2->tmpl
1527 && comp_template_args (e1->args, e2->args));
1528 --comparing_specializations;
1530 return equal;
1533 /* Returns a hash for a template TMPL and template arguments ARGS. */
1535 static hashval_t
1536 hash_tmpl_and_args (tree tmpl, tree args)
1538 hashval_t val = DECL_UID (tmpl);
1539 return iterative_hash_template_arg (args, val);
1542 /* Returns a hash for a spec_entry node based on the TMPL and ARGS members,
1543 ignoring SPEC. */
1545 hashval_t
1546 spec_hasher::hash (spec_entry *e)
1548 return hash_tmpl_and_args (e->tmpl, e->args);
1551 /* Recursively calculate a hash value for a template argument ARG, for use
1552 in the hash tables of template specializations. */
1554 hashval_t
1555 iterative_hash_template_arg (tree arg, hashval_t val)
1557 unsigned HOST_WIDE_INT i;
1558 enum tree_code code;
1559 char tclass;
1561 if (arg == NULL_TREE)
1562 return iterative_hash_object (arg, val);
1564 if (!TYPE_P (arg))
1565 STRIP_NOPS (arg);
1567 if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
1568 /* We can get one of these when re-hashing a previous entry in the middle
1569 of substituting into a pack expansion. Just look through it. */
1570 arg = ARGUMENT_PACK_SELECT_FROM_PACK (arg);
1572 code = TREE_CODE (arg);
1573 tclass = TREE_CODE_CLASS (code);
1575 val = iterative_hash_object (code, val);
1577 switch (code)
1579 case ERROR_MARK:
1580 return val;
1582 case IDENTIFIER_NODE:
1583 return iterative_hash_object (IDENTIFIER_HASH_VALUE (arg), val);
1585 case TREE_VEC:
1587 int i, len = TREE_VEC_LENGTH (arg);
1588 for (i = 0; i < len; ++i)
1589 val = iterative_hash_template_arg (TREE_VEC_ELT (arg, i), val);
1590 return val;
1593 case TYPE_PACK_EXPANSION:
1594 case EXPR_PACK_EXPANSION:
1595 val = iterative_hash_template_arg (PACK_EXPANSION_PATTERN (arg), val);
1596 return iterative_hash_template_arg (PACK_EXPANSION_EXTRA_ARGS (arg), val);
1598 case TYPE_ARGUMENT_PACK:
1599 case NONTYPE_ARGUMENT_PACK:
1600 return iterative_hash_template_arg (ARGUMENT_PACK_ARGS (arg), val);
1602 case TREE_LIST:
1603 for (; arg; arg = TREE_CHAIN (arg))
1604 val = iterative_hash_template_arg (TREE_VALUE (arg), val);
1605 return val;
1607 case OVERLOAD:
1608 for (; arg; arg = OVL_NEXT (arg))
1609 val = iterative_hash_template_arg (OVL_CURRENT (arg), val);
1610 return val;
1612 case CONSTRUCTOR:
1614 tree field, value;
1615 iterative_hash_template_arg (TREE_TYPE (arg), val);
1616 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (arg), i, field, value)
1618 val = iterative_hash_template_arg (field, val);
1619 val = iterative_hash_template_arg (value, val);
1621 return val;
1624 case PARM_DECL:
1625 if (!DECL_ARTIFICIAL (arg))
1627 val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
1628 val = iterative_hash_object (DECL_PARM_LEVEL (arg), val);
1630 return iterative_hash_template_arg (TREE_TYPE (arg), val);
1632 case TARGET_EXPR:
1633 return iterative_hash_template_arg (TARGET_EXPR_INITIAL (arg), val);
1635 case PTRMEM_CST:
1636 val = iterative_hash_template_arg (PTRMEM_CST_CLASS (arg), val);
1637 return iterative_hash_template_arg (PTRMEM_CST_MEMBER (arg), val);
1639 case TEMPLATE_PARM_INDEX:
1640 val = iterative_hash_template_arg
1641 (TREE_TYPE (TEMPLATE_PARM_DECL (arg)), val);
1642 val = iterative_hash_object (TEMPLATE_PARM_LEVEL (arg), val);
1643 return iterative_hash_object (TEMPLATE_PARM_IDX (arg), val);
1645 case TRAIT_EXPR:
1646 val = iterative_hash_object (TRAIT_EXPR_KIND (arg), val);
1647 val = iterative_hash_template_arg (TRAIT_EXPR_TYPE1 (arg), val);
1648 return iterative_hash_template_arg (TRAIT_EXPR_TYPE2 (arg), val);
1650 case BASELINK:
1651 val = iterative_hash_template_arg (BINFO_TYPE (BASELINK_BINFO (arg)),
1652 val);
1653 return iterative_hash_template_arg (DECL_NAME (get_first_fn (arg)),
1654 val);
1656 case MODOP_EXPR:
1657 val = iterative_hash_template_arg (TREE_OPERAND (arg, 0), val);
1658 code = TREE_CODE (TREE_OPERAND (arg, 1));
1659 val = iterative_hash_object (code, val);
1660 return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
1662 case LAMBDA_EXPR:
1663 /* A lambda can't appear in a template arg, but don't crash on
1664 erroneous input. */
1665 gcc_assert (seen_error ());
1666 return val;
1668 case CAST_EXPR:
1669 case IMPLICIT_CONV_EXPR:
1670 case STATIC_CAST_EXPR:
1671 case REINTERPRET_CAST_EXPR:
1672 case CONST_CAST_EXPR:
1673 case DYNAMIC_CAST_EXPR:
1674 case NEW_EXPR:
1675 val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1676 /* Now hash operands as usual. */
1677 break;
1679 default:
1680 break;
1683 switch (tclass)
1685 case tcc_type:
1686 if (alias_template_specialization_p (arg))
1688 // We want an alias specialization that survived strip_typedefs
1689 // to hash differently from its TYPE_CANONICAL, to avoid hash
1690 // collisions that compare as different in template_args_equal.
1691 // These could be dependent specializations that strip_typedefs
1692 // left alone, or untouched specializations because
1693 // coerce_template_parms returns the unconverted template
1694 // arguments if it sees incomplete argument packs.
1695 tree ti = TYPE_TEMPLATE_INFO (arg);
1696 return hash_tmpl_and_args (TI_TEMPLATE (ti), TI_ARGS (ti));
1698 if (TYPE_CANONICAL (arg))
1699 return iterative_hash_object (TYPE_HASH (TYPE_CANONICAL (arg)),
1700 val);
1701 else if (TREE_CODE (arg) == DECLTYPE_TYPE)
1702 return iterative_hash_template_arg (DECLTYPE_TYPE_EXPR (arg), val);
1703 /* Otherwise just compare the types during lookup. */
1704 return val;
1706 case tcc_declaration:
1707 case tcc_constant:
1708 return iterative_hash_expr (arg, val);
1710 default:
1711 gcc_assert (IS_EXPR_CODE_CLASS (tclass));
1713 unsigned n = cp_tree_operand_length (arg);
1714 for (i = 0; i < n; ++i)
1715 val = iterative_hash_template_arg (TREE_OPERAND (arg, i), val);
1716 return val;
1719 gcc_unreachable ();
1720 return 0;
1723 /* Unregister the specialization SPEC as a specialization of TMPL.
1724 Replace it with NEW_SPEC, if NEW_SPEC is non-NULL. Returns true
1725 if the SPEC was listed as a specialization of TMPL.
1727 Note that SPEC has been ggc_freed, so we can't look inside it. */
1729 bool
1730 reregister_specialization (tree spec, tree tinfo, tree new_spec)
1732 spec_entry *entry;
1733 spec_entry elt;
1735 elt.tmpl = most_general_template (TI_TEMPLATE (tinfo));
1736 elt.args = TI_ARGS (tinfo);
1737 elt.spec = NULL_TREE;
1739 entry = decl_specializations->find (&elt);
1740 if (entry != NULL)
1742 gcc_assert (entry->spec == spec || entry->spec == new_spec);
1743 gcc_assert (new_spec != NULL_TREE);
1744 entry->spec = new_spec;
1745 return 1;
1748 return 0;
1751 /* Like register_specialization, but for local declarations. We are
1752 registering SPEC, an instantiation of TMPL. */
1754 static void
1755 register_local_specialization (tree spec, tree tmpl)
1757 local_specializations->put (tmpl, spec);
1760 /* TYPE is a class type. Returns true if TYPE is an explicitly
1761 specialized class. */
1763 bool
1764 explicit_class_specialization_p (tree type)
1766 if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1767 return false;
1768 return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1771 /* Print the list of functions at FNS, going through all the overloads
1772 for each element of the list. Alternatively, FNS can not be a
1773 TREE_LIST, in which case it will be printed together with all the
1774 overloads.
1776 MORE and *STR should respectively be FALSE and NULL when the function
1777 is called from the outside. They are used internally on recursive
1778 calls. print_candidates manages the two parameters and leaves NULL
1779 in *STR when it ends. */
1781 static void
1782 print_candidates_1 (tree fns, bool more, const char **str)
1784 tree fn, fn2;
1785 char *spaces = NULL;
1787 for (fn = fns; fn; fn = OVL_NEXT (fn))
1788 if (TREE_CODE (fn) == TREE_LIST)
1790 for (fn2 = fn; fn2 != NULL_TREE; fn2 = TREE_CHAIN (fn2))
1791 print_candidates_1 (TREE_VALUE (fn2),
1792 TREE_CHAIN (fn2) || more, str);
1794 else
1796 tree cand = OVL_CURRENT (fn);
1797 if (!*str)
1799 /* Pick the prefix string. */
1800 if (!more && !OVL_NEXT (fns))
1802 inform (DECL_SOURCE_LOCATION (cand),
1803 "candidate is: %#D", cand);
1804 continue;
1807 *str = _("candidates are:");
1808 spaces = get_spaces (*str);
1810 inform (DECL_SOURCE_LOCATION (cand), "%s %#D", *str, cand);
1811 *str = spaces ? spaces : *str;
1814 if (!more)
1816 free (spaces);
1817 *str = NULL;
1821 /* Print the list of candidate FNS in an error message. FNS can also
1822 be a TREE_LIST of non-functions in the case of an ambiguous lookup. */
1824 void
1825 print_candidates (tree fns)
1827 const char *str = NULL;
1828 print_candidates_1 (fns, false, &str);
1829 gcc_assert (str == NULL);
1832 /* Returns the template (one of the functions given by TEMPLATE_ID)
1833 which can be specialized to match the indicated DECL with the
1834 explicit template args given in TEMPLATE_ID. The DECL may be
1835 NULL_TREE if none is available. In that case, the functions in
1836 TEMPLATE_ID are non-members.
1838 If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1839 specialization of a member template.
1841 The TEMPLATE_COUNT is the number of references to qualifying
1842 template classes that appeared in the name of the function. See
1843 check_explicit_specialization for a more accurate description.
1845 TSK indicates what kind of template declaration (if any) is being
1846 declared. TSK_TEMPLATE indicates that the declaration given by
1847 DECL, though a FUNCTION_DECL, has template parameters, and is
1848 therefore a template function.
1850 The template args (those explicitly specified and those deduced)
1851 are output in a newly created vector *TARGS_OUT.
1853 If it is impossible to determine the result, an error message is
1854 issued. The error_mark_node is returned to indicate failure. */
1856 static tree
1857 determine_specialization (tree template_id,
1858 tree decl,
1859 tree* targs_out,
1860 int need_member_template,
1861 int template_count,
1862 tmpl_spec_kind tsk)
1864 tree fns;
1865 tree targs;
1866 tree explicit_targs;
1867 tree candidates = NULL_TREE;
1868 /* A TREE_LIST of templates of which DECL may be a specialization.
1869 The TREE_VALUE of each node is a TEMPLATE_DECL. The
1870 corresponding TREE_PURPOSE is the set of template arguments that,
1871 when used to instantiate the template, would produce a function
1872 with the signature of DECL. */
1873 tree templates = NULL_TREE;
1874 int header_count;
1875 cp_binding_level *b;
1877 *targs_out = NULL_TREE;
1879 if (template_id == error_mark_node || decl == error_mark_node)
1880 return error_mark_node;
1882 /* We shouldn't be specializing a member template of an
1883 unspecialized class template; we already gave an error in
1884 check_specialization_scope, now avoid crashing. */
1885 if (template_count && DECL_CLASS_SCOPE_P (decl)
1886 && template_class_depth (DECL_CONTEXT (decl)) > 0)
1888 gcc_assert (errorcount);
1889 return error_mark_node;
1892 fns = TREE_OPERAND (template_id, 0);
1893 explicit_targs = TREE_OPERAND (template_id, 1);
1895 if (fns == error_mark_node)
1896 return error_mark_node;
1898 /* Check for baselinks. */
1899 if (BASELINK_P (fns))
1900 fns = BASELINK_FUNCTIONS (fns);
1902 if (TREE_CODE (decl) == FUNCTION_DECL && !is_overloaded_fn (fns))
1904 error ("%qD is not a function template", fns);
1905 return error_mark_node;
1907 else if (VAR_P (decl) && !variable_template_p (fns))
1909 error ("%qD is not a variable template", fns);
1910 return error_mark_node;
1913 /* Count the number of template headers specified for this
1914 specialization. */
1915 header_count = 0;
1916 for (b = current_binding_level;
1917 b->kind == sk_template_parms;
1918 b = b->level_chain)
1919 ++header_count;
1921 if (variable_template_p (fns))
1922 templates = tree_cons (explicit_targs, fns, templates);
1923 else for (; fns; fns = OVL_NEXT (fns))
1925 tree fn = OVL_CURRENT (fns);
1927 if (TREE_CODE (fn) == TEMPLATE_DECL)
1929 tree decl_arg_types;
1930 tree fn_arg_types;
1931 tree insttype;
1933 /* In case of explicit specialization, we need to check if
1934 the number of template headers appearing in the specialization
1935 is correct. This is usually done in check_explicit_specialization,
1936 but the check done there cannot be exhaustive when specializing
1937 member functions. Consider the following code:
1939 template <> void A<int>::f(int);
1940 template <> template <> void A<int>::f(int);
1942 Assuming that A<int> is not itself an explicit specialization
1943 already, the first line specializes "f" which is a non-template
1944 member function, whilst the second line specializes "f" which
1945 is a template member function. So both lines are syntactically
1946 correct, and check_explicit_specialization does not reject
1947 them.
1949 Here, we can do better, as we are matching the specialization
1950 against the declarations. We count the number of template
1951 headers, and we check if they match TEMPLATE_COUNT + 1
1952 (TEMPLATE_COUNT is the number of qualifying template classes,
1953 plus there must be another header for the member template
1954 itself).
1956 Notice that if header_count is zero, this is not a
1957 specialization but rather a template instantiation, so there
1958 is no check we can perform here. */
1959 if (header_count && header_count != template_count + 1)
1960 continue;
1962 /* Check that the number of template arguments at the
1963 innermost level for DECL is the same as for FN. */
1964 if (current_binding_level->kind == sk_template_parms
1965 && !current_binding_level->explicit_spec_p
1966 && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1967 != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1968 (current_template_parms))))
1969 continue;
1971 /* DECL might be a specialization of FN. */
1972 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1973 fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1975 /* For a non-static member function, we need to make sure
1976 that the const qualification is the same. Since
1977 get_bindings does not try to merge the "this" parameter,
1978 we must do the comparison explicitly. */
1979 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1980 && !same_type_p (TREE_VALUE (fn_arg_types),
1981 TREE_VALUE (decl_arg_types)))
1982 continue;
1984 /* Skip the "this" parameter and, for constructors of
1985 classes with virtual bases, the VTT parameter. A
1986 full specialization of a constructor will have a VTT
1987 parameter, but a template never will. */
1988 decl_arg_types
1989 = skip_artificial_parms_for (decl, decl_arg_types);
1990 fn_arg_types
1991 = skip_artificial_parms_for (fn, fn_arg_types);
1993 /* Function templates cannot be specializations; there are
1994 no partial specializations of functions. Therefore, if
1995 the type of DECL does not match FN, there is no
1996 match. */
1997 if (tsk == tsk_template)
1999 if (compparms (fn_arg_types, decl_arg_types))
2000 candidates = tree_cons (NULL_TREE, fn, candidates);
2001 continue;
2004 /* See whether this function might be a specialization of this
2005 template. Suppress access control because we might be trying
2006 to make this specialization a friend, and we have already done
2007 access control for the declaration of the specialization. */
2008 push_deferring_access_checks (dk_no_check);
2009 targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
2010 pop_deferring_access_checks ();
2012 if (!targs)
2013 /* We cannot deduce template arguments that when used to
2014 specialize TMPL will produce DECL. */
2015 continue;
2017 /* Make sure that the deduced arguments actually work. */
2018 insttype = tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE);
2019 if (insttype == error_mark_node)
2020 continue;
2021 fn_arg_types
2022 = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (insttype));
2023 if (!compparms (fn_arg_types, decl_arg_types))
2024 continue;
2026 /* Save this template, and the arguments deduced. */
2027 templates = tree_cons (targs, fn, templates);
2029 else if (need_member_template)
2030 /* FN is an ordinary member function, and we need a
2031 specialization of a member template. */
2033 else if (TREE_CODE (fn) != FUNCTION_DECL)
2034 /* We can get IDENTIFIER_NODEs here in certain erroneous
2035 cases. */
2037 else if (!DECL_FUNCTION_MEMBER_P (fn))
2038 /* This is just an ordinary non-member function. Nothing can
2039 be a specialization of that. */
2041 else if (DECL_ARTIFICIAL (fn))
2042 /* Cannot specialize functions that are created implicitly. */
2044 else
2046 tree decl_arg_types;
2048 /* This is an ordinary member function. However, since
2049 we're here, we can assume its enclosing class is a
2050 template class. For example,
2052 template <typename T> struct S { void f(); };
2053 template <> void S<int>::f() {}
2055 Here, S<int>::f is a non-template, but S<int> is a
2056 template class. If FN has the same type as DECL, we
2057 might be in business. */
2059 if (!DECL_TEMPLATE_INFO (fn))
2060 /* Its enclosing class is an explicit specialization
2061 of a template class. This is not a candidate. */
2062 continue;
2064 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
2065 TREE_TYPE (TREE_TYPE (fn))))
2066 /* The return types differ. */
2067 continue;
2069 /* Adjust the type of DECL in case FN is a static member. */
2070 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
2071 if (DECL_STATIC_FUNCTION_P (fn)
2072 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2073 decl_arg_types = TREE_CHAIN (decl_arg_types);
2075 if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
2076 decl_arg_types))
2077 /* They match! */
2078 candidates = tree_cons (NULL_TREE, fn, candidates);
2082 if (templates && TREE_CHAIN (templates))
2084 /* We have:
2086 [temp.expl.spec]
2088 It is possible for a specialization with a given function
2089 signature to be instantiated from more than one function
2090 template. In such cases, explicit specification of the
2091 template arguments must be used to uniquely identify the
2092 function template specialization being specialized.
2094 Note that here, there's no suggestion that we're supposed to
2095 determine which of the candidate templates is most
2096 specialized. However, we, also have:
2098 [temp.func.order]
2100 Partial ordering of overloaded function template
2101 declarations is used in the following contexts to select
2102 the function template to which a function template
2103 specialization refers:
2105 -- when an explicit specialization refers to a function
2106 template.
2108 So, we do use the partial ordering rules, at least for now.
2109 This extension can only serve to make invalid programs valid,
2110 so it's safe. And, there is strong anecdotal evidence that
2111 the committee intended the partial ordering rules to apply;
2112 the EDG front end has that behavior, and John Spicer claims
2113 that the committee simply forgot to delete the wording in
2114 [temp.expl.spec]. */
2115 tree tmpl = most_specialized_instantiation (templates);
2116 if (tmpl != error_mark_node)
2118 templates = tmpl;
2119 TREE_CHAIN (templates) = NULL_TREE;
2123 if (templates == NULL_TREE && candidates == NULL_TREE)
2125 error ("template-id %qD for %q+D does not match any template "
2126 "declaration", template_id, decl);
2127 if (header_count && header_count != template_count + 1)
2128 inform (input_location, "saw %d %<template<>%>, need %d for "
2129 "specializing a member function template",
2130 header_count, template_count + 1);
2131 return error_mark_node;
2133 else if ((templates && TREE_CHAIN (templates))
2134 || (candidates && TREE_CHAIN (candidates))
2135 || (templates && candidates))
2137 error ("ambiguous template specialization %qD for %q+D",
2138 template_id, decl);
2139 candidates = chainon (candidates, templates);
2140 print_candidates (candidates);
2141 return error_mark_node;
2144 /* We have one, and exactly one, match. */
2145 if (candidates)
2147 tree fn = TREE_VALUE (candidates);
2148 *targs_out = copy_node (DECL_TI_ARGS (fn));
2149 /* DECL is a re-declaration or partial instantiation of a template
2150 function. */
2151 if (TREE_CODE (fn) == TEMPLATE_DECL)
2152 return fn;
2153 /* It was a specialization of an ordinary member function in a
2154 template class. */
2155 return DECL_TI_TEMPLATE (fn);
2158 /* It was a specialization of a template. */
2159 targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
2160 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
2162 *targs_out = copy_node (targs);
2163 SET_TMPL_ARGS_LEVEL (*targs_out,
2164 TMPL_ARGS_DEPTH (*targs_out),
2165 TREE_PURPOSE (templates));
2167 else
2168 *targs_out = TREE_PURPOSE (templates);
2169 return TREE_VALUE (templates);
2172 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
2173 but with the default argument values filled in from those in the
2174 TMPL_TYPES. */
2176 static tree
2177 copy_default_args_to_explicit_spec_1 (tree spec_types,
2178 tree tmpl_types)
2180 tree new_spec_types;
2182 if (!spec_types)
2183 return NULL_TREE;
2185 if (spec_types == void_list_node)
2186 return void_list_node;
2188 /* Substitute into the rest of the list. */
2189 new_spec_types =
2190 copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
2191 TREE_CHAIN (tmpl_types));
2193 /* Add the default argument for this parameter. */
2194 return hash_tree_cons (TREE_PURPOSE (tmpl_types),
2195 TREE_VALUE (spec_types),
2196 new_spec_types);
2199 /* DECL is an explicit specialization. Replicate default arguments
2200 from the template it specializes. (That way, code like:
2202 template <class T> void f(T = 3);
2203 template <> void f(double);
2204 void g () { f (); }
2206 works, as required.) An alternative approach would be to look up
2207 the correct default arguments at the call-site, but this approach
2208 is consistent with how implicit instantiations are handled. */
2210 static void
2211 copy_default_args_to_explicit_spec (tree decl)
2213 tree tmpl;
2214 tree spec_types;
2215 tree tmpl_types;
2216 tree new_spec_types;
2217 tree old_type;
2218 tree new_type;
2219 tree t;
2220 tree object_type = NULL_TREE;
2221 tree in_charge = NULL_TREE;
2222 tree vtt = NULL_TREE;
2224 /* See if there's anything we need to do. */
2225 tmpl = DECL_TI_TEMPLATE (decl);
2226 tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
2227 for (t = tmpl_types; t; t = TREE_CHAIN (t))
2228 if (TREE_PURPOSE (t))
2229 break;
2230 if (!t)
2231 return;
2233 old_type = TREE_TYPE (decl);
2234 spec_types = TYPE_ARG_TYPES (old_type);
2236 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2238 /* Remove the this pointer, but remember the object's type for
2239 CV quals. */
2240 object_type = TREE_TYPE (TREE_VALUE (spec_types));
2241 spec_types = TREE_CHAIN (spec_types);
2242 tmpl_types = TREE_CHAIN (tmpl_types);
2244 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
2246 /* DECL may contain more parameters than TMPL due to the extra
2247 in-charge parameter in constructors and destructors. */
2248 in_charge = spec_types;
2249 spec_types = TREE_CHAIN (spec_types);
2251 if (DECL_HAS_VTT_PARM_P (decl))
2253 vtt = spec_types;
2254 spec_types = TREE_CHAIN (spec_types);
2258 /* Compute the merged default arguments. */
2259 new_spec_types =
2260 copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
2262 /* Compute the new FUNCTION_TYPE. */
2263 if (object_type)
2265 if (vtt)
2266 new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
2267 TREE_VALUE (vtt),
2268 new_spec_types);
2270 if (in_charge)
2271 /* Put the in-charge parameter back. */
2272 new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
2273 TREE_VALUE (in_charge),
2274 new_spec_types);
2276 new_type = build_method_type_directly (object_type,
2277 TREE_TYPE (old_type),
2278 new_spec_types);
2280 else
2281 new_type = build_function_type (TREE_TYPE (old_type),
2282 new_spec_types);
2283 new_type = cp_build_type_attribute_variant (new_type,
2284 TYPE_ATTRIBUTES (old_type));
2285 new_type = build_exception_variant (new_type,
2286 TYPE_RAISES_EXCEPTIONS (old_type));
2288 if (TYPE_HAS_LATE_RETURN_TYPE (old_type))
2289 TYPE_HAS_LATE_RETURN_TYPE (new_type) = 1;
2291 TREE_TYPE (decl) = new_type;
2294 /* Return the number of template headers we expect to see for a definition
2295 or specialization of CTYPE or one of its non-template members. */
2298 num_template_headers_for_class (tree ctype)
2300 int num_templates = 0;
2302 while (ctype && CLASS_TYPE_P (ctype))
2304 /* You're supposed to have one `template <...>' for every
2305 template class, but you don't need one for a full
2306 specialization. For example:
2308 template <class T> struct S{};
2309 template <> struct S<int> { void f(); };
2310 void S<int>::f () {}
2312 is correct; there shouldn't be a `template <>' for the
2313 definition of `S<int>::f'. */
2314 if (!CLASSTYPE_TEMPLATE_INFO (ctype))
2315 /* If CTYPE does not have template information of any
2316 kind, then it is not a template, nor is it nested
2317 within a template. */
2318 break;
2319 if (explicit_class_specialization_p (ctype))
2320 break;
2321 if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (ctype)))
2322 ++num_templates;
2324 ctype = TYPE_CONTEXT (ctype);
2327 return num_templates;
2330 /* Do a simple sanity check on the template headers that precede the
2331 variable declaration DECL. */
2333 void
2334 check_template_variable (tree decl)
2336 tree ctx = CP_DECL_CONTEXT (decl);
2337 int wanted = num_template_headers_for_class (ctx);
2338 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl)
2339 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl)))
2341 if (cxx_dialect < cxx14)
2342 pedwarn (DECL_SOURCE_LOCATION (decl), 0,
2343 "variable templates only available with "
2344 "-std=c++14 or -std=gnu++14");
2346 // Namespace-scope variable templates should have a template header.
2347 ++wanted;
2349 if (template_header_count > wanted)
2351 bool warned = pedwarn (DECL_SOURCE_LOCATION (decl), 0,
2352 "too many template headers for %D (should be %d)",
2353 decl, wanted);
2354 if (warned && CLASS_TYPE_P (ctx)
2355 && CLASSTYPE_TEMPLATE_SPECIALIZATION (ctx))
2356 inform (DECL_SOURCE_LOCATION (decl),
2357 "members of an explicitly specialized class are defined "
2358 "without a template header");
2362 /* Check to see if the function just declared, as indicated in
2363 DECLARATOR, and in DECL, is a specialization of a function
2364 template. We may also discover that the declaration is an explicit
2365 instantiation at this point.
2367 Returns DECL, or an equivalent declaration that should be used
2368 instead if all goes well. Issues an error message if something is
2369 amiss. Returns error_mark_node if the error is not easily
2370 recoverable.
2372 FLAGS is a bitmask consisting of the following flags:
2374 2: The function has a definition.
2375 4: The function is a friend.
2377 The TEMPLATE_COUNT is the number of references to qualifying
2378 template classes that appeared in the name of the function. For
2379 example, in
2381 template <class T> struct S { void f(); };
2382 void S<int>::f();
2384 the TEMPLATE_COUNT would be 1. However, explicitly specialized
2385 classes are not counted in the TEMPLATE_COUNT, so that in
2387 template <class T> struct S {};
2388 template <> struct S<int> { void f(); }
2389 template <> void S<int>::f();
2391 the TEMPLATE_COUNT would be 0. (Note that this declaration is
2392 invalid; there should be no template <>.)
2394 If the function is a specialization, it is marked as such via
2395 DECL_TEMPLATE_SPECIALIZATION. Furthermore, its DECL_TEMPLATE_INFO
2396 is set up correctly, and it is added to the list of specializations
2397 for that template. */
2399 tree
2400 check_explicit_specialization (tree declarator,
2401 tree decl,
2402 int template_count,
2403 int flags)
2405 int have_def = flags & 2;
2406 int is_friend = flags & 4;
2407 int specialization = 0;
2408 int explicit_instantiation = 0;
2409 int member_specialization = 0;
2410 tree ctype = DECL_CLASS_CONTEXT (decl);
2411 tree dname = DECL_NAME (decl);
2412 tmpl_spec_kind tsk;
2414 if (is_friend)
2416 if (!processing_specialization)
2417 tsk = tsk_none;
2418 else
2419 tsk = tsk_excessive_parms;
2421 else
2422 tsk = current_tmpl_spec_kind (template_count);
2424 switch (tsk)
2426 case tsk_none:
2427 if (processing_specialization && TREE_CODE (decl) != VAR_DECL)
2429 specialization = 1;
2430 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2432 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2434 if (is_friend)
2435 /* This could be something like:
2437 template <class T> void f(T);
2438 class S { friend void f<>(int); } */
2439 specialization = 1;
2440 else
2442 /* This case handles bogus declarations like template <>
2443 template <class T> void f<int>(); */
2445 error ("template-id %qD in declaration of primary template",
2446 declarator);
2447 return decl;
2450 break;
2452 case tsk_invalid_member_spec:
2453 /* The error has already been reported in
2454 check_specialization_scope. */
2455 return error_mark_node;
2457 case tsk_invalid_expl_inst:
2458 error ("template parameter list used in explicit instantiation");
2460 /* Fall through. */
2462 case tsk_expl_inst:
2463 if (have_def)
2464 error ("definition provided for explicit instantiation");
2466 explicit_instantiation = 1;
2467 break;
2469 case tsk_excessive_parms:
2470 case tsk_insufficient_parms:
2471 if (tsk == tsk_excessive_parms)
2472 error ("too many template parameter lists in declaration of %qD",
2473 decl);
2474 else if (template_header_count)
2475 error("too few template parameter lists in declaration of %qD", decl);
2476 else
2477 error("explicit specialization of %qD must be introduced by "
2478 "%<template <>%>", decl);
2480 /* Fall through. */
2481 case tsk_expl_spec:
2482 if (VAR_P (decl) && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2483 /* In cases like template<> constexpr bool v = true;
2484 We'll give an error in check_template_variable. */
2485 break;
2487 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2488 if (ctype)
2489 member_specialization = 1;
2490 else
2491 specialization = 1;
2492 break;
2494 case tsk_template:
2495 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2497 /* This case handles bogus declarations like template <>
2498 template <class T> void f<int>(); */
2500 if (!uses_template_parms (declarator))
2501 error ("template-id %qD in declaration of primary template",
2502 declarator);
2503 else if (variable_template_p (TREE_OPERAND (declarator, 0)))
2505 /* Partial specialization of variable template. */
2506 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2507 specialization = 1;
2508 goto ok;
2510 else if (cxx_dialect < cxx14)
2511 error ("non-type partial specialization %qD "
2512 "is not allowed", declarator);
2513 else
2514 error ("non-class, non-variable partial specialization %qD "
2515 "is not allowed", declarator);
2516 return decl;
2517 ok:;
2520 if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
2521 /* This is a specialization of a member template, without
2522 specialization the containing class. Something like:
2524 template <class T> struct S {
2525 template <class U> void f (U);
2527 template <> template <class U> void S<int>::f(U) {}
2529 That's a specialization -- but of the entire template. */
2530 specialization = 1;
2531 break;
2533 default:
2534 gcc_unreachable ();
2537 if ((specialization || member_specialization)
2538 /* This doesn't apply to variable templates. */
2539 && (TREE_CODE (TREE_TYPE (decl)) == FUNCTION_TYPE
2540 || TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE))
2542 tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2543 for (; t; t = TREE_CHAIN (t))
2544 if (TREE_PURPOSE (t))
2546 permerror (input_location,
2547 "default argument specified in explicit specialization");
2548 break;
2552 if (specialization || member_specialization || explicit_instantiation)
2554 tree tmpl = NULL_TREE;
2555 tree targs = NULL_TREE;
2556 bool was_template_id = (TREE_CODE (declarator) == TEMPLATE_ID_EXPR);
2558 /* Make sure that the declarator is a TEMPLATE_ID_EXPR. */
2559 if (!was_template_id)
2561 tree fns;
2563 gcc_assert (identifier_p (declarator));
2564 if (ctype)
2565 fns = dname;
2566 else
2568 /* If there is no class context, the explicit instantiation
2569 must be at namespace scope. */
2570 gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2572 /* Find the namespace binding, using the declaration
2573 context. */
2574 fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2575 false, true);
2576 if (fns == error_mark_node || !is_overloaded_fn (fns))
2578 error ("%qD is not a template function", dname);
2579 fns = error_mark_node;
2581 else
2583 tree fn = OVL_CURRENT (fns);
2584 if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2585 CP_DECL_CONTEXT (fn)))
2586 error ("%qD is not declared in %qD",
2587 decl, current_namespace);
2591 declarator = lookup_template_function (fns, NULL_TREE);
2594 if (declarator == error_mark_node)
2595 return error_mark_node;
2597 if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2599 if (!explicit_instantiation)
2600 /* A specialization in class scope. This is invalid,
2601 but the error will already have been flagged by
2602 check_specialization_scope. */
2603 return error_mark_node;
2604 else
2606 /* It's not valid to write an explicit instantiation in
2607 class scope, e.g.:
2609 class C { template void f(); }
2611 This case is caught by the parser. However, on
2612 something like:
2614 template class C { void f(); };
2616 (which is invalid) we can get here. The error will be
2617 issued later. */
2621 return decl;
2623 else if (ctype != NULL_TREE
2624 && (identifier_p (TREE_OPERAND (declarator, 0))))
2626 // We'll match variable templates in start_decl.
2627 if (VAR_P (decl))
2628 return decl;
2630 /* Find the list of functions in ctype that have the same
2631 name as the declared function. */
2632 tree name = TREE_OPERAND (declarator, 0);
2633 tree fns = NULL_TREE;
2634 int idx;
2636 if (constructor_name_p (name, ctype))
2638 int is_constructor = DECL_CONSTRUCTOR_P (decl);
2640 if (is_constructor ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2641 : !CLASSTYPE_DESTRUCTORS (ctype))
2643 /* From [temp.expl.spec]:
2645 If such an explicit specialization for the member
2646 of a class template names an implicitly-declared
2647 special member function (clause _special_), the
2648 program is ill-formed.
2650 Similar language is found in [temp.explicit]. */
2651 error ("specialization of implicitly-declared special member function");
2652 return error_mark_node;
2655 name = is_constructor ? ctor_identifier : dtor_identifier;
2658 if (!DECL_CONV_FN_P (decl))
2660 idx = lookup_fnfields_1 (ctype, name);
2661 if (idx >= 0)
2662 fns = (*CLASSTYPE_METHOD_VEC (ctype))[idx];
2664 else
2666 vec<tree, va_gc> *methods;
2667 tree ovl;
2669 /* For a type-conversion operator, we cannot do a
2670 name-based lookup. We might be looking for `operator
2671 int' which will be a specialization of `operator T'.
2672 So, we find *all* the conversion operators, and then
2673 select from them. */
2674 fns = NULL_TREE;
2676 methods = CLASSTYPE_METHOD_VEC (ctype);
2677 if (methods)
2678 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2679 methods->iterate (idx, &ovl);
2680 ++idx)
2682 if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2683 /* There are no more conversion functions. */
2684 break;
2686 /* Glue all these conversion functions together
2687 with those we already have. */
2688 for (; ovl; ovl = OVL_NEXT (ovl))
2689 fns = ovl_cons (OVL_CURRENT (ovl), fns);
2693 if (fns == NULL_TREE)
2695 error ("no member function %qD declared in %qT", name, ctype);
2696 return error_mark_node;
2698 else
2699 TREE_OPERAND (declarator, 0) = fns;
2702 /* Figure out what exactly is being specialized at this point.
2703 Note that for an explicit instantiation, even one for a
2704 member function, we cannot tell apriori whether the
2705 instantiation is for a member template, or just a member
2706 function of a template class. Even if a member template is
2707 being instantiated, the member template arguments may be
2708 elided if they can be deduced from the rest of the
2709 declaration. */
2710 tmpl = determine_specialization (declarator, decl,
2711 &targs,
2712 member_specialization,
2713 template_count,
2714 tsk);
2716 if (!tmpl || tmpl == error_mark_node)
2717 /* We couldn't figure out what this declaration was
2718 specializing. */
2719 return error_mark_node;
2720 else
2722 tree gen_tmpl = most_general_template (tmpl);
2724 if (explicit_instantiation)
2726 /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2727 is done by do_decl_instantiation later. */
2729 int arg_depth = TMPL_ARGS_DEPTH (targs);
2730 int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2732 if (arg_depth > parm_depth)
2734 /* If TMPL is not the most general template (for
2735 example, if TMPL is a friend template that is
2736 injected into namespace scope), then there will
2737 be too many levels of TARGS. Remove some of them
2738 here. */
2739 int i;
2740 tree new_targs;
2742 new_targs = make_tree_vec (parm_depth);
2743 for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2744 TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2745 = TREE_VEC_ELT (targs, i);
2746 targs = new_targs;
2749 return instantiate_template (tmpl, targs, tf_error);
2752 /* If we thought that the DECL was a member function, but it
2753 turns out to be specializing a static member function,
2754 make DECL a static member function as well. */
2755 if (DECL_FUNCTION_TEMPLATE_P (tmpl)
2756 && DECL_STATIC_FUNCTION_P (tmpl)
2757 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2758 revert_static_member_fn (decl);
2760 /* If this is a specialization of a member template of a
2761 template class, we want to return the TEMPLATE_DECL, not
2762 the specialization of it. */
2763 if (tsk == tsk_template && !was_template_id)
2765 tree result = DECL_TEMPLATE_RESULT (tmpl);
2766 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2767 DECL_INITIAL (result) = NULL_TREE;
2768 if (have_def)
2770 tree parm;
2771 DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2772 DECL_SOURCE_LOCATION (result)
2773 = DECL_SOURCE_LOCATION (decl);
2774 /* We want to use the argument list specified in the
2775 definition, not in the original declaration. */
2776 DECL_ARGUMENTS (result) = DECL_ARGUMENTS (decl);
2777 for (parm = DECL_ARGUMENTS (result); parm;
2778 parm = DECL_CHAIN (parm))
2779 DECL_CONTEXT (parm) = result;
2781 return register_specialization (tmpl, gen_tmpl, targs,
2782 is_friend, 0);
2785 /* Set up the DECL_TEMPLATE_INFO for DECL. */
2786 DECL_TEMPLATE_INFO (decl) = build_template_info (tmpl, targs);
2788 if (was_template_id)
2789 TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (decl)) = true;
2791 /* Inherit default function arguments from the template
2792 DECL is specializing. */
2793 if (DECL_FUNCTION_TEMPLATE_P (tmpl))
2794 copy_default_args_to_explicit_spec (decl);
2796 /* This specialization has the same protection as the
2797 template it specializes. */
2798 TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2799 TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2801 /* 7.1.1-1 [dcl.stc]
2803 A storage-class-specifier shall not be specified in an
2804 explicit specialization...
2806 The parser rejects these, so unless action is taken here,
2807 explicit function specializations will always appear with
2808 global linkage.
2810 The action recommended by the C++ CWG in response to C++
2811 defect report 605 is to make the storage class and linkage
2812 of the explicit specialization match the templated function:
2814 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2816 if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2818 tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2819 gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2821 /* This specialization has the same linkage and visibility as
2822 the function template it specializes. */
2823 TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2824 if (! TREE_PUBLIC (decl))
2826 DECL_INTERFACE_KNOWN (decl) = 1;
2827 DECL_NOT_REALLY_EXTERN (decl) = 1;
2829 DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2830 if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2832 DECL_VISIBILITY_SPECIFIED (decl) = 1;
2833 DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2837 /* If DECL is a friend declaration, declared using an
2838 unqualified name, the namespace associated with DECL may
2839 have been set incorrectly. For example, in:
2841 template <typename T> void f(T);
2842 namespace N {
2843 struct S { friend void f<int>(int); }
2846 we will have set the DECL_CONTEXT for the friend
2847 declaration to N, rather than to the global namespace. */
2848 if (DECL_NAMESPACE_SCOPE_P (decl))
2849 DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2851 if (is_friend && !have_def)
2852 /* This is not really a declaration of a specialization.
2853 It's just the name of an instantiation. But, it's not
2854 a request for an instantiation, either. */
2855 SET_DECL_IMPLICIT_INSTANTIATION (decl);
2856 else if (TREE_CODE (decl) == FUNCTION_DECL)
2857 /* A specialization is not necessarily COMDAT. */
2858 DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
2859 && DECL_DECLARED_INLINE_P (decl));
2860 else if (TREE_CODE (decl) == VAR_DECL)
2861 DECL_COMDAT (decl) = false;
2863 /* Register this specialization so that we can find it
2864 again. */
2865 decl = register_specialization (decl, gen_tmpl, targs, is_friend, 0);
2867 /* A 'structor should already have clones. */
2868 gcc_assert (decl == error_mark_node
2869 || variable_template_p (tmpl)
2870 || !(DECL_CONSTRUCTOR_P (decl)
2871 || DECL_DESTRUCTOR_P (decl))
2872 || DECL_CLONED_FUNCTION_P (DECL_CHAIN (decl)));
2876 return decl;
2879 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2880 parameters. These are represented in the same format used for
2881 DECL_TEMPLATE_PARMS. */
2884 comp_template_parms (const_tree parms1, const_tree parms2)
2886 const_tree p1;
2887 const_tree p2;
2889 if (parms1 == parms2)
2890 return 1;
2892 for (p1 = parms1, p2 = parms2;
2893 p1 != NULL_TREE && p2 != NULL_TREE;
2894 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2896 tree t1 = TREE_VALUE (p1);
2897 tree t2 = TREE_VALUE (p2);
2898 int i;
2900 gcc_assert (TREE_CODE (t1) == TREE_VEC);
2901 gcc_assert (TREE_CODE (t2) == TREE_VEC);
2903 if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2904 return 0;
2906 for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2908 tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2909 tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2911 /* If either of the template parameters are invalid, assume
2912 they match for the sake of error recovery. */
2913 if (error_operand_p (parm1) || error_operand_p (parm2))
2914 return 1;
2916 if (TREE_CODE (parm1) != TREE_CODE (parm2))
2917 return 0;
2919 if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2920 && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2921 == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2922 continue;
2923 else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2924 return 0;
2928 if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2929 /* One set of parameters has more parameters lists than the
2930 other. */
2931 return 0;
2933 return 1;
2936 /* Determine whether PARM is a parameter pack. */
2938 bool
2939 template_parameter_pack_p (const_tree parm)
2941 /* Determine if we have a non-type template parameter pack. */
2942 if (TREE_CODE (parm) == PARM_DECL)
2943 return (DECL_TEMPLATE_PARM_P (parm)
2944 && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2945 if (TREE_CODE (parm) == TEMPLATE_PARM_INDEX)
2946 return TEMPLATE_PARM_PARAMETER_PACK (parm);
2948 /* If this is a list of template parameters, we could get a
2949 TYPE_DECL or a TEMPLATE_DECL. */
2950 if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2951 parm = TREE_TYPE (parm);
2953 /* Otherwise it must be a type template parameter. */
2954 return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2955 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2956 && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2959 /* Determine if T is a function parameter pack. */
2961 bool
2962 function_parameter_pack_p (const_tree t)
2964 if (t && TREE_CODE (t) == PARM_DECL)
2965 return DECL_PACK_P (t);
2966 return false;
2969 /* Return the function template declaration of PRIMARY_FUNC_TMPL_INST.
2970 PRIMARY_FUNC_TMPL_INST is a primary function template instantiation. */
2972 tree
2973 get_function_template_decl (const_tree primary_func_tmpl_inst)
2975 if (! primary_func_tmpl_inst
2976 || TREE_CODE (primary_func_tmpl_inst) != FUNCTION_DECL
2977 || ! primary_template_instantiation_p (primary_func_tmpl_inst))
2978 return NULL;
2980 return DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (primary_func_tmpl_inst));
2983 /* Return true iff the function parameter PARAM_DECL was expanded
2984 from the function parameter pack PACK. */
2986 bool
2987 function_parameter_expanded_from_pack_p (tree param_decl, tree pack)
2989 if (DECL_ARTIFICIAL (param_decl)
2990 || !function_parameter_pack_p (pack))
2991 return false;
2993 /* The parameter pack and its pack arguments have the same
2994 DECL_PARM_INDEX. */
2995 return DECL_PARM_INDEX (pack) == DECL_PARM_INDEX (param_decl);
2998 /* Determine whether ARGS describes a variadic template args list,
2999 i.e., one that is terminated by a template argument pack. */
3001 static bool
3002 template_args_variadic_p (tree args)
3004 int nargs;
3005 tree last_parm;
3007 if (args == NULL_TREE)
3008 return false;
3010 args = INNERMOST_TEMPLATE_ARGS (args);
3011 nargs = TREE_VEC_LENGTH (args);
3013 if (nargs == 0)
3014 return false;
3016 last_parm = TREE_VEC_ELT (args, nargs - 1);
3018 return ARGUMENT_PACK_P (last_parm);
3021 /* Generate a new name for the parameter pack name NAME (an
3022 IDENTIFIER_NODE) that incorporates its */
3024 static tree
3025 make_ith_pack_parameter_name (tree name, int i)
3027 /* Munge the name to include the parameter index. */
3028 #define NUMBUF_LEN 128
3029 char numbuf[NUMBUF_LEN];
3030 char* newname;
3031 int newname_len;
3033 if (name == NULL_TREE)
3034 return name;
3035 snprintf (numbuf, NUMBUF_LEN, "%i", i);
3036 newname_len = IDENTIFIER_LENGTH (name)
3037 + strlen (numbuf) + 2;
3038 newname = (char*)alloca (newname_len);
3039 snprintf (newname, newname_len,
3040 "%s#%i", IDENTIFIER_POINTER (name), i);
3041 return get_identifier (newname);
3044 /* Return true if T is a primary function, class or alias template
3045 instantiation. */
3047 bool
3048 primary_template_instantiation_p (const_tree t)
3050 if (!t)
3051 return false;
3053 if (TREE_CODE (t) == FUNCTION_DECL)
3054 return DECL_LANG_SPECIFIC (t)
3055 && DECL_TEMPLATE_INSTANTIATION (t)
3056 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t));
3057 else if (CLASS_TYPE_P (t) && !TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
3058 return CLASSTYPE_TEMPLATE_INSTANTIATION (t)
3059 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t));
3060 else if (alias_template_specialization_p (t))
3061 return true;
3062 return false;
3065 /* Return true if PARM is a template template parameter. */
3067 bool
3068 template_template_parameter_p (const_tree parm)
3070 return DECL_TEMPLATE_TEMPLATE_PARM_P (parm);
3073 /* Return true iff PARM is a DECL representing a type template
3074 parameter. */
3076 bool
3077 template_type_parameter_p (const_tree parm)
3079 return (parm
3080 && (TREE_CODE (parm) == TYPE_DECL
3081 || TREE_CODE (parm) == TEMPLATE_DECL)
3082 && DECL_TEMPLATE_PARM_P (parm));
3085 /* Return the template parameters of T if T is a
3086 primary template instantiation, NULL otherwise. */
3088 tree
3089 get_primary_template_innermost_parameters (const_tree t)
3091 tree parms = NULL, template_info = NULL;
3093 if ((template_info = get_template_info (t))
3094 && primary_template_instantiation_p (t))
3095 parms = INNERMOST_TEMPLATE_PARMS
3096 (DECL_TEMPLATE_PARMS (TI_TEMPLATE (template_info)));
3098 return parms;
3101 /* Return the template parameters of the LEVELth level from the full list
3102 of template parameters PARMS. */
3104 tree
3105 get_template_parms_at_level (tree parms, int level)
3107 tree p;
3108 if (!parms
3109 || TREE_CODE (parms) != TREE_LIST
3110 || level > TMPL_PARMS_DEPTH (parms))
3111 return NULL_TREE;
3113 for (p = parms; p; p = TREE_CHAIN (p))
3114 if (TMPL_PARMS_DEPTH (p) == level)
3115 return p;
3117 return NULL_TREE;
3120 /* Returns the template arguments of T if T is a template instantiation,
3121 NULL otherwise. */
3123 tree
3124 get_template_innermost_arguments (const_tree t)
3126 tree args = NULL, template_info = NULL;
3128 if ((template_info = get_template_info (t))
3129 && TI_ARGS (template_info))
3130 args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (template_info));
3132 return args;
3135 /* Return the argument pack elements of T if T is a template argument pack,
3136 NULL otherwise. */
3138 tree
3139 get_template_argument_pack_elems (const_tree t)
3141 if (TREE_CODE (t) != TYPE_ARGUMENT_PACK
3142 && TREE_CODE (t) != NONTYPE_ARGUMENT_PACK)
3143 return NULL;
3145 return ARGUMENT_PACK_ARGS (t);
3148 /* Structure used to track the progress of find_parameter_packs_r. */
3149 struct find_parameter_pack_data
3151 /* TREE_LIST that will contain all of the parameter packs found by
3152 the traversal. */
3153 tree* parameter_packs;
3155 /* Set of AST nodes that have been visited by the traversal. */
3156 hash_set<tree> *visited;
3159 /* Identifies all of the argument packs that occur in a template
3160 argument and appends them to the TREE_LIST inside DATA, which is a
3161 find_parameter_pack_data structure. This is a subroutine of
3162 make_pack_expansion and uses_parameter_packs. */
3163 static tree
3164 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
3166 tree t = *tp;
3167 struct find_parameter_pack_data* ppd =
3168 (struct find_parameter_pack_data*)data;
3169 bool parameter_pack_p = false;
3171 /* Handle type aliases/typedefs. */
3172 if (TYPE_ALIAS_P (t))
3174 if (TYPE_TEMPLATE_INFO (t))
3175 cp_walk_tree (&TYPE_TI_ARGS (t),
3176 &find_parameter_packs_r,
3177 ppd, ppd->visited);
3178 *walk_subtrees = 0;
3179 return NULL_TREE;
3182 /* Identify whether this is a parameter pack or not. */
3183 switch (TREE_CODE (t))
3185 case TEMPLATE_PARM_INDEX:
3186 if (TEMPLATE_PARM_PARAMETER_PACK (t))
3187 parameter_pack_p = true;
3188 break;
3190 case TEMPLATE_TYPE_PARM:
3191 t = TYPE_MAIN_VARIANT (t);
3192 case TEMPLATE_TEMPLATE_PARM:
3193 if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3194 parameter_pack_p = true;
3195 break;
3197 case FIELD_DECL:
3198 case PARM_DECL:
3199 if (DECL_PACK_P (t))
3201 /* We don't want to walk into the type of a PARM_DECL,
3202 because we don't want to see the type parameter pack. */
3203 *walk_subtrees = 0;
3204 parameter_pack_p = true;
3206 break;
3208 /* Look through a lambda capture proxy to the field pack. */
3209 case VAR_DECL:
3210 if (DECL_HAS_VALUE_EXPR_P (t))
3212 tree v = DECL_VALUE_EXPR (t);
3213 cp_walk_tree (&v,
3214 &find_parameter_packs_r,
3215 ppd, ppd->visited);
3216 *walk_subtrees = 0;
3218 break;
3220 case BASES:
3221 parameter_pack_p = true;
3222 break;
3223 default:
3224 /* Not a parameter pack. */
3225 break;
3228 if (parameter_pack_p)
3230 /* Add this parameter pack to the list. */
3231 *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
3234 if (TYPE_P (t))
3235 cp_walk_tree (&TYPE_CONTEXT (t),
3236 &find_parameter_packs_r, ppd, ppd->visited);
3238 /* This switch statement will return immediately if we don't find a
3239 parameter pack. */
3240 switch (TREE_CODE (t))
3242 case TEMPLATE_PARM_INDEX:
3243 return NULL_TREE;
3245 case BOUND_TEMPLATE_TEMPLATE_PARM:
3246 /* Check the template itself. */
3247 cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)),
3248 &find_parameter_packs_r, ppd, ppd->visited);
3249 /* Check the template arguments. */
3250 cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd,
3251 ppd->visited);
3252 *walk_subtrees = 0;
3253 return NULL_TREE;
3255 case TEMPLATE_TYPE_PARM:
3256 case TEMPLATE_TEMPLATE_PARM:
3257 return NULL_TREE;
3259 case PARM_DECL:
3260 return NULL_TREE;
3262 case RECORD_TYPE:
3263 if (TYPE_PTRMEMFUNC_P (t))
3264 return NULL_TREE;
3265 /* Fall through. */
3267 case UNION_TYPE:
3268 case ENUMERAL_TYPE:
3269 if (TYPE_TEMPLATE_INFO (t))
3270 cp_walk_tree (&TYPE_TI_ARGS (t),
3271 &find_parameter_packs_r, ppd, ppd->visited);
3273 *walk_subtrees = 0;
3274 return NULL_TREE;
3276 case CONSTRUCTOR:
3277 case TEMPLATE_DECL:
3278 cp_walk_tree (&TREE_TYPE (t),
3279 &find_parameter_packs_r, ppd, ppd->visited);
3280 return NULL_TREE;
3282 case TYPENAME_TYPE:
3283 cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
3284 ppd, ppd->visited);
3285 *walk_subtrees = 0;
3286 return NULL_TREE;
3288 case TYPE_PACK_EXPANSION:
3289 case EXPR_PACK_EXPANSION:
3290 *walk_subtrees = 0;
3291 return NULL_TREE;
3293 case INTEGER_TYPE:
3294 cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r,
3295 ppd, ppd->visited);
3296 *walk_subtrees = 0;
3297 return NULL_TREE;
3299 case IDENTIFIER_NODE:
3300 cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd,
3301 ppd->visited);
3302 *walk_subtrees = 0;
3303 return NULL_TREE;
3305 default:
3306 return NULL_TREE;
3309 return NULL_TREE;
3312 /* Determines if the expression or type T uses any parameter packs. */
3313 bool
3314 uses_parameter_packs (tree t)
3316 tree parameter_packs = NULL_TREE;
3317 struct find_parameter_pack_data ppd;
3318 ppd.parameter_packs = &parameter_packs;
3319 ppd.visited = new hash_set<tree>;
3320 cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3321 delete ppd.visited;
3322 return parameter_packs != NULL_TREE;
3325 /* Turn ARG, which may be an expression, type, or a TREE_LIST
3326 representation a base-class initializer into a parameter pack
3327 expansion. If all goes well, the resulting node will be an
3328 EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
3329 respectively. */
3330 tree
3331 make_pack_expansion (tree arg)
3333 tree result;
3334 tree parameter_packs = NULL_TREE;
3335 bool for_types = false;
3336 struct find_parameter_pack_data ppd;
3338 if (!arg || arg == error_mark_node)
3339 return arg;
3341 if (TREE_CODE (arg) == TREE_LIST && TREE_PURPOSE (arg))
3343 /* A TREE_LIST with a non-null TREE_PURPOSE is for a base
3344 class initializer. In this case, the TREE_PURPOSE will be a
3345 _TYPE node (representing the base class expansion we're
3346 initializing) and the TREE_VALUE will be a TREE_LIST
3347 containing the initialization arguments.
3349 The resulting expansion looks somewhat different from most
3350 expansions. Rather than returning just one _EXPANSION, we
3351 return a TREE_LIST whose TREE_PURPOSE is a
3352 TYPE_PACK_EXPANSION containing the bases that will be
3353 initialized. The TREE_VALUE will be identical to the
3354 original TREE_VALUE, which is a list of arguments that will
3355 be passed to each base. We do not introduce any new pack
3356 expansion nodes into the TREE_VALUE (although it is possible
3357 that some already exist), because the TREE_PURPOSE and
3358 TREE_VALUE all need to be expanded together with the same
3359 _EXPANSION node. Note that the TYPE_PACK_EXPANSION in the
3360 resulting TREE_PURPOSE will mention the parameter packs in
3361 both the bases and the arguments to the bases. */
3362 tree purpose;
3363 tree value;
3364 tree parameter_packs = NULL_TREE;
3366 /* Determine which parameter packs will be used by the base
3367 class expansion. */
3368 ppd.visited = new hash_set<tree>;
3369 ppd.parameter_packs = &parameter_packs;
3370 cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r,
3371 &ppd, ppd.visited);
3373 if (parameter_packs == NULL_TREE)
3375 error ("base initializer expansion %<%T%> contains no parameter packs", arg);
3376 delete ppd.visited;
3377 return error_mark_node;
3380 if (TREE_VALUE (arg) != void_type_node)
3382 /* Collect the sets of parameter packs used in each of the
3383 initialization arguments. */
3384 for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
3386 /* Determine which parameter packs will be expanded in this
3387 argument. */
3388 cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r,
3389 &ppd, ppd.visited);
3393 delete ppd.visited;
3395 /* Create the pack expansion type for the base type. */
3396 purpose = cxx_make_type (TYPE_PACK_EXPANSION);
3397 SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
3398 PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
3400 /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3401 they will rarely be compared to anything. */
3402 SET_TYPE_STRUCTURAL_EQUALITY (purpose);
3404 return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
3407 if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
3408 for_types = true;
3410 /* Build the PACK_EXPANSION_* node. */
3411 result = for_types
3412 ? cxx_make_type (TYPE_PACK_EXPANSION)
3413 : make_node (EXPR_PACK_EXPANSION);
3414 SET_PACK_EXPANSION_PATTERN (result, arg);
3415 if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
3417 /* Propagate type and const-expression information. */
3418 TREE_TYPE (result) = TREE_TYPE (arg);
3419 TREE_CONSTANT (result) = TREE_CONSTANT (arg);
3421 else
3422 /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3423 they will rarely be compared to anything. */
3424 SET_TYPE_STRUCTURAL_EQUALITY (result);
3426 /* Determine which parameter packs will be expanded. */
3427 ppd.parameter_packs = &parameter_packs;
3428 ppd.visited = new hash_set<tree>;
3429 cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
3430 delete ppd.visited;
3432 /* Make sure we found some parameter packs. */
3433 if (parameter_packs == NULL_TREE)
3435 if (TYPE_P (arg))
3436 error ("expansion pattern %<%T%> contains no argument packs", arg);
3437 else
3438 error ("expansion pattern %<%E%> contains no argument packs", arg);
3439 return error_mark_node;
3441 PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
3443 PACK_EXPANSION_LOCAL_P (result) = at_function_scope_p ();
3445 return result;
3448 /* Checks T for any "bare" parameter packs, which have not yet been
3449 expanded, and issues an error if any are found. This operation can
3450 only be done on full expressions or types (e.g., an expression
3451 statement, "if" condition, etc.), because we could have expressions like:
3453 foo(f(g(h(args)))...)
3455 where "args" is a parameter pack. check_for_bare_parameter_packs
3456 should not be called for the subexpressions args, h(args),
3457 g(h(args)), or f(g(h(args))), because we would produce erroneous
3458 error messages.
3460 Returns TRUE and emits an error if there were bare parameter packs,
3461 returns FALSE otherwise. */
3462 bool
3463 check_for_bare_parameter_packs (tree t)
3465 tree parameter_packs = NULL_TREE;
3466 struct find_parameter_pack_data ppd;
3468 if (!processing_template_decl || !t || t == error_mark_node)
3469 return false;
3471 if (TREE_CODE (t) == TYPE_DECL)
3472 t = TREE_TYPE (t);
3474 ppd.parameter_packs = &parameter_packs;
3475 ppd.visited = new hash_set<tree>;
3476 cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3477 delete ppd.visited;
3479 if (parameter_packs)
3481 error ("parameter packs not expanded with %<...%>:");
3482 while (parameter_packs)
3484 tree pack = TREE_VALUE (parameter_packs);
3485 tree name = NULL_TREE;
3487 if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
3488 || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
3489 name = TYPE_NAME (pack);
3490 else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
3491 name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
3492 else
3493 name = DECL_NAME (pack);
3495 if (name)
3496 inform (input_location, " %qD", name);
3497 else
3498 inform (input_location, " <anonymous>");
3500 parameter_packs = TREE_CHAIN (parameter_packs);
3503 return true;
3506 return false;
3509 /* Expand any parameter packs that occur in the template arguments in
3510 ARGS. */
3511 tree
3512 expand_template_argument_pack (tree args)
3514 tree result_args = NULL_TREE;
3515 int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
3516 int num_result_args = -1;
3517 int non_default_args_count = -1;
3519 /* First, determine if we need to expand anything, and the number of
3520 slots we'll need. */
3521 for (in_arg = 0; in_arg < nargs; ++in_arg)
3523 tree arg = TREE_VEC_ELT (args, in_arg);
3524 if (arg == NULL_TREE)
3525 return args;
3526 if (ARGUMENT_PACK_P (arg))
3528 int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
3529 if (num_result_args < 0)
3530 num_result_args = in_arg + num_packed;
3531 else
3532 num_result_args += num_packed;
3534 else
3536 if (num_result_args >= 0)
3537 num_result_args++;
3541 /* If no expansion is necessary, we're done. */
3542 if (num_result_args < 0)
3543 return args;
3545 /* Expand arguments. */
3546 result_args = make_tree_vec (num_result_args);
3547 if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (args))
3548 non_default_args_count =
3549 GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
3550 for (in_arg = 0; in_arg < nargs; ++in_arg)
3552 tree arg = TREE_VEC_ELT (args, in_arg);
3553 if (ARGUMENT_PACK_P (arg))
3555 tree packed = ARGUMENT_PACK_ARGS (arg);
3556 int i, num_packed = TREE_VEC_LENGTH (packed);
3557 for (i = 0; i < num_packed; ++i, ++out_arg)
3558 TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
3559 if (non_default_args_count > 0)
3560 non_default_args_count += num_packed - 1;
3562 else
3564 TREE_VEC_ELT (result_args, out_arg) = arg;
3565 ++out_arg;
3568 if (non_default_args_count >= 0)
3569 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (result_args, non_default_args_count);
3570 return result_args;
3573 /* Checks if DECL shadows a template parameter.
3575 [temp.local]: A template-parameter shall not be redeclared within its
3576 scope (including nested scopes).
3578 Emits an error and returns TRUE if the DECL shadows a parameter,
3579 returns FALSE otherwise. */
3581 bool
3582 check_template_shadow (tree decl)
3584 tree olddecl;
3586 /* If we're not in a template, we can't possibly shadow a template
3587 parameter. */
3588 if (!current_template_parms)
3589 return true;
3591 /* Figure out what we're shadowing. */
3592 if (TREE_CODE (decl) == OVERLOAD)
3593 decl = OVL_CURRENT (decl);
3594 olddecl = innermost_non_namespace_value (DECL_NAME (decl));
3596 /* If there's no previous binding for this name, we're not shadowing
3597 anything, let alone a template parameter. */
3598 if (!olddecl)
3599 return true;
3601 /* If we're not shadowing a template parameter, we're done. Note
3602 that OLDDECL might be an OVERLOAD (or perhaps even an
3603 ERROR_MARK), so we can't just blithely assume it to be a _DECL
3604 node. */
3605 if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
3606 return true;
3608 /* We check for decl != olddecl to avoid bogus errors for using a
3609 name inside a class. We check TPFI to avoid duplicate errors for
3610 inline member templates. */
3611 if (decl == olddecl
3612 || (DECL_TEMPLATE_PARM_P (decl)
3613 && TEMPLATE_PARMS_FOR_INLINE (current_template_parms)))
3614 return true;
3616 /* Don't complain about the injected class name, as we've already
3617 complained about the class itself. */
3618 if (DECL_SELF_REFERENCE_P (decl))
3619 return false;
3621 error ("declaration of %q+#D", decl);
3622 error (" shadows template parm %q+#D", olddecl);
3623 return false;
3626 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
3627 ORIG_LEVEL, DECL, and TYPE. */
3629 static tree
3630 build_template_parm_index (int index,
3631 int level,
3632 int orig_level,
3633 tree decl,
3634 tree type)
3636 tree t = make_node (TEMPLATE_PARM_INDEX);
3637 TEMPLATE_PARM_IDX (t) = index;
3638 TEMPLATE_PARM_LEVEL (t) = level;
3639 TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
3640 TEMPLATE_PARM_DECL (t) = decl;
3641 TREE_TYPE (t) = type;
3642 TREE_CONSTANT (t) = TREE_CONSTANT (decl);
3643 TREE_READONLY (t) = TREE_READONLY (decl);
3645 return t;
3648 /* Find the canonical type parameter for the given template type
3649 parameter. Returns the canonical type parameter, which may be TYPE
3650 if no such parameter existed. */
3652 static tree
3653 canonical_type_parameter (tree type)
3655 tree list;
3656 int idx = TEMPLATE_TYPE_IDX (type);
3657 if (!canonical_template_parms)
3658 vec_alloc (canonical_template_parms, idx+1);
3660 while (canonical_template_parms->length () <= (unsigned)idx)
3661 vec_safe_push (canonical_template_parms, NULL_TREE);
3663 list = (*canonical_template_parms)[idx];
3664 while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
3665 list = TREE_CHAIN (list);
3667 if (list)
3668 return TREE_VALUE (list);
3669 else
3671 (*canonical_template_parms)[idx]
3672 = tree_cons (NULL_TREE, type,
3673 (*canonical_template_parms)[idx]);
3674 return type;
3678 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
3679 TEMPLATE_PARM_LEVEL has been decreased by LEVELS. If such a
3680 TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
3681 new one is created. */
3683 static tree
3684 reduce_template_parm_level (tree index, tree type, int levels, tree args,
3685 tsubst_flags_t complain)
3687 if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
3688 || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
3689 != TEMPLATE_PARM_LEVEL (index) - levels)
3690 || !same_type_p (type, TREE_TYPE (TEMPLATE_PARM_DESCENDANTS (index))))
3692 tree orig_decl = TEMPLATE_PARM_DECL (index);
3693 tree decl, t;
3695 decl = build_decl (DECL_SOURCE_LOCATION (orig_decl),
3696 TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
3697 TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
3698 TREE_READONLY (decl) = TREE_READONLY (orig_decl);
3699 DECL_ARTIFICIAL (decl) = 1;
3700 SET_DECL_TEMPLATE_PARM_P (decl);
3702 t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
3703 TEMPLATE_PARM_LEVEL (index) - levels,
3704 TEMPLATE_PARM_ORIG_LEVEL (index),
3705 decl, type);
3706 TEMPLATE_PARM_DESCENDANTS (index) = t;
3707 TEMPLATE_PARM_PARAMETER_PACK (t)
3708 = TEMPLATE_PARM_PARAMETER_PACK (index);
3710 /* Template template parameters need this. */
3711 if (TREE_CODE (decl) == TEMPLATE_DECL)
3712 DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
3713 (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
3714 args, complain);
3717 return TEMPLATE_PARM_DESCENDANTS (index);
3720 /* Process information from new template parameter PARM and append it
3721 to the LIST being built. This new parameter is a non-type
3722 parameter iff IS_NON_TYPE is true. This new parameter is a
3723 parameter pack iff IS_PARAMETER_PACK is true. The location of PARM
3724 is in PARM_LOC. */
3726 tree
3727 process_template_parm (tree list, location_t parm_loc, tree parm,
3728 bool is_non_type, bool is_parameter_pack)
3730 tree decl = 0;
3731 tree defval;
3732 int idx = 0;
3734 gcc_assert (TREE_CODE (parm) == TREE_LIST);
3735 defval = TREE_PURPOSE (parm);
3737 if (list)
3739 tree p = tree_last (list);
3741 if (p && TREE_VALUE (p) != error_mark_node)
3743 p = TREE_VALUE (p);
3744 if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
3745 idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
3746 else
3747 idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
3750 ++idx;
3753 if (is_non_type)
3755 parm = TREE_VALUE (parm);
3757 SET_DECL_TEMPLATE_PARM_P (parm);
3759 if (TREE_TYPE (parm) != error_mark_node)
3761 /* [temp.param]
3763 The top-level cv-qualifiers on the template-parameter are
3764 ignored when determining its type. */
3765 TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3766 if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3767 TREE_TYPE (parm) = error_mark_node;
3768 else if (uses_parameter_packs (TREE_TYPE (parm))
3769 && !is_parameter_pack
3770 /* If we're in a nested template parameter list, the template
3771 template parameter could be a parameter pack. */
3772 && processing_template_parmlist == 1)
3774 /* This template parameter is not a parameter pack, but it
3775 should be. Complain about "bare" parameter packs. */
3776 check_for_bare_parameter_packs (TREE_TYPE (parm));
3778 /* Recover by calling this a parameter pack. */
3779 is_parameter_pack = true;
3783 /* A template parameter is not modifiable. */
3784 TREE_CONSTANT (parm) = 1;
3785 TREE_READONLY (parm) = 1;
3786 decl = build_decl (parm_loc,
3787 CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3788 TREE_CONSTANT (decl) = 1;
3789 TREE_READONLY (decl) = 1;
3790 DECL_INITIAL (parm) = DECL_INITIAL (decl)
3791 = build_template_parm_index (idx, processing_template_decl,
3792 processing_template_decl,
3793 decl, TREE_TYPE (parm));
3795 TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
3796 = is_parameter_pack;
3798 else
3800 tree t;
3801 parm = TREE_VALUE (TREE_VALUE (parm));
3803 if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3805 t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3806 /* This is for distinguishing between real templates and template
3807 template parameters */
3808 TREE_TYPE (parm) = t;
3809 TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3810 decl = parm;
3812 else
3814 t = cxx_make_type (TEMPLATE_TYPE_PARM);
3815 /* parm is either IDENTIFIER_NODE or NULL_TREE. */
3816 decl = build_decl (parm_loc,
3817 TYPE_DECL, parm, t);
3820 TYPE_NAME (t) = decl;
3821 TYPE_STUB_DECL (t) = decl;
3822 parm = decl;
3823 TEMPLATE_TYPE_PARM_INDEX (t)
3824 = build_template_parm_index (idx, processing_template_decl,
3825 processing_template_decl,
3826 decl, TREE_TYPE (parm));
3827 TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3828 TYPE_CANONICAL (t) = canonical_type_parameter (t);
3830 DECL_ARTIFICIAL (decl) = 1;
3831 SET_DECL_TEMPLATE_PARM_P (decl);
3832 pushdecl (decl);
3833 parm = build_tree_list (defval, parm);
3834 return chainon (list, parm);
3837 /* The end of a template parameter list has been reached. Process the
3838 tree list into a parameter vector, converting each parameter into a more
3839 useful form. Type parameters are saved as IDENTIFIER_NODEs, and others
3840 as PARM_DECLs. */
3842 tree
3843 end_template_parm_list (tree parms)
3845 int nparms;
3846 tree parm, next;
3847 tree saved_parmlist = make_tree_vec (list_length (parms));
3849 current_template_parms
3850 = tree_cons (size_int (processing_template_decl),
3851 saved_parmlist, current_template_parms);
3853 for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3855 next = TREE_CHAIN (parm);
3856 TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3857 TREE_CHAIN (parm) = NULL_TREE;
3860 --processing_template_parmlist;
3862 return saved_parmlist;
3865 /* end_template_decl is called after a template declaration is seen. */
3867 void
3868 end_template_decl (void)
3870 reset_specialization ();
3872 if (! processing_template_decl)
3873 return;
3875 /* This matches the pushlevel in begin_template_parm_list. */
3876 finish_scope ();
3878 --processing_template_decl;
3879 current_template_parms = TREE_CHAIN (current_template_parms);
3882 /* Takes a TREE_LIST representing a template parameter and convert it
3883 into an argument suitable to be passed to the type substitution
3884 functions. Note that If the TREE_LIST contains an error_mark
3885 node, the returned argument is error_mark_node. */
3887 static tree
3888 template_parm_to_arg (tree t)
3891 if (t == NULL_TREE
3892 || TREE_CODE (t) != TREE_LIST)
3893 return t;
3895 if (error_operand_p (TREE_VALUE (t)))
3896 return error_mark_node;
3898 t = TREE_VALUE (t);
3900 if (TREE_CODE (t) == TYPE_DECL
3901 || TREE_CODE (t) == TEMPLATE_DECL)
3903 t = TREE_TYPE (t);
3905 if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3907 /* Turn this argument into a TYPE_ARGUMENT_PACK
3908 with a single element, which expands T. */
3909 tree vec = make_tree_vec (1);
3910 #ifdef ENABLE_CHECKING
3911 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3912 (vec, TREE_VEC_LENGTH (vec));
3913 #endif
3914 TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3916 t = cxx_make_type (TYPE_ARGUMENT_PACK);
3917 SET_ARGUMENT_PACK_ARGS (t, vec);
3920 else
3922 t = DECL_INITIAL (t);
3924 if (TEMPLATE_PARM_PARAMETER_PACK (t))
3926 /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3927 with a single element, which expands T. */
3928 tree vec = make_tree_vec (1);
3929 tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3930 #ifdef ENABLE_CHECKING
3931 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3932 (vec, TREE_VEC_LENGTH (vec));
3933 #endif
3934 t = convert_from_reference (t);
3935 TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3937 t = make_node (NONTYPE_ARGUMENT_PACK);
3938 SET_ARGUMENT_PACK_ARGS (t, vec);
3939 TREE_TYPE (t) = type;
3941 else
3942 t = convert_from_reference (t);
3944 return t;
3947 /* Given a set of template parameters, return them as a set of template
3948 arguments. The template parameters are represented as a TREE_VEC, in
3949 the form documented in cp-tree.h for template arguments. */
3951 static tree
3952 template_parms_to_args (tree parms)
3954 tree header;
3955 tree args = NULL_TREE;
3956 int length = TMPL_PARMS_DEPTH (parms);
3957 int l = length;
3959 /* If there is only one level of template parameters, we do not
3960 create a TREE_VEC of TREE_VECs. Instead, we return a single
3961 TREE_VEC containing the arguments. */
3962 if (length > 1)
3963 args = make_tree_vec (length);
3965 for (header = parms; header; header = TREE_CHAIN (header))
3967 tree a = copy_node (TREE_VALUE (header));
3968 int i;
3970 TREE_TYPE (a) = NULL_TREE;
3971 for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
3972 TREE_VEC_ELT (a, i) = template_parm_to_arg (TREE_VEC_ELT (a, i));
3974 #ifdef ENABLE_CHECKING
3975 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (a, TREE_VEC_LENGTH (a));
3976 #endif
3978 if (length > 1)
3979 TREE_VEC_ELT (args, --l) = a;
3980 else
3981 args = a;
3984 if (length > 1 && TREE_VEC_ELT (args, 0) == NULL_TREE)
3985 /* This can happen for template parms of a template template
3986 parameter, e.g:
3988 template<template<class T, class U> class TT> struct S;
3990 Consider the level of the parms of TT; T and U both have
3991 level 2; TT has no template parm of level 1. So in this case
3992 the first element of full_template_args is NULL_TREE. If we
3993 leave it like this TMPL_ARGS_DEPTH on args returns 1 instead
3994 of 2. This will make tsubst wrongly consider that T and U
3995 have level 1. Instead, let's create a dummy vector as the
3996 first element of full_template_args so that TMPL_ARGS_DEPTH
3997 returns the correct depth for args. */
3998 TREE_VEC_ELT (args, 0) = make_tree_vec (1);
3999 return args;
4002 /* Within the declaration of a template, return the currently active
4003 template parameters as an argument TREE_VEC. */
4005 static tree
4006 current_template_args (void)
4008 return template_parms_to_args (current_template_parms);
4011 /* Update the declared TYPE by doing any lookups which were thought to be
4012 dependent, but are not now that we know the SCOPE of the declarator. */
4014 tree
4015 maybe_update_decl_type (tree orig_type, tree scope)
4017 tree type = orig_type;
4019 if (type == NULL_TREE)
4020 return type;
4022 if (TREE_CODE (orig_type) == TYPE_DECL)
4023 type = TREE_TYPE (type);
4025 if (scope && TYPE_P (scope) && dependent_type_p (scope)
4026 && dependent_type_p (type)
4027 /* Don't bother building up the args in this case. */
4028 && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
4030 /* tsubst in the args corresponding to the template parameters,
4031 including auto if present. Most things will be unchanged, but
4032 make_typename_type and tsubst_qualified_id will resolve
4033 TYPENAME_TYPEs and SCOPE_REFs that were previously dependent. */
4034 tree args = current_template_args ();
4035 tree auto_node = type_uses_auto (type);
4036 tree pushed;
4037 if (auto_node)
4039 tree auto_vec = make_tree_vec (1);
4040 TREE_VEC_ELT (auto_vec, 0) = auto_node;
4041 args = add_to_template_args (args, auto_vec);
4043 pushed = push_scope (scope);
4044 type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
4045 if (pushed)
4046 pop_scope (scope);
4049 if (type == error_mark_node)
4050 return orig_type;
4052 if (TREE_CODE (orig_type) == TYPE_DECL)
4054 if (same_type_p (type, TREE_TYPE (orig_type)))
4055 type = orig_type;
4056 else
4057 type = TYPE_NAME (type);
4059 return type;
4062 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
4063 template PARMS. If MEMBER_TEMPLATE_P is true, the new template is
4064 a member template. Used by push_template_decl below. */
4066 static tree
4067 build_template_decl (tree decl, tree parms, bool member_template_p)
4069 tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
4070 DECL_TEMPLATE_PARMS (tmpl) = parms;
4071 DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
4072 DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
4073 DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
4075 return tmpl;
4078 struct template_parm_data
4080 /* The level of the template parameters we are currently
4081 processing. */
4082 int level;
4084 /* The index of the specialization argument we are currently
4085 processing. */
4086 int current_arg;
4088 /* An array whose size is the number of template parameters. The
4089 elements are nonzero if the parameter has been used in any one
4090 of the arguments processed so far. */
4091 int* parms;
4093 /* An array whose size is the number of template arguments. The
4094 elements are nonzero if the argument makes use of template
4095 parameters of this level. */
4096 int* arg_uses_template_parms;
4099 /* Subroutine of push_template_decl used to see if each template
4100 parameter in a partial specialization is used in the explicit
4101 argument list. If T is of the LEVEL given in DATA (which is
4102 treated as a template_parm_data*), then DATA->PARMS is marked
4103 appropriately. */
4105 static int
4106 mark_template_parm (tree t, void* data)
4108 int level;
4109 int idx;
4110 struct template_parm_data* tpd = (struct template_parm_data*) data;
4112 template_parm_level_and_index (t, &level, &idx);
4114 if (level == tpd->level)
4116 tpd->parms[idx] = 1;
4117 tpd->arg_uses_template_parms[tpd->current_arg] = 1;
4120 /* Return zero so that for_each_template_parm will continue the
4121 traversal of the tree; we want to mark *every* template parm. */
4122 return 0;
4125 /* Process the partial specialization DECL. */
4127 static tree
4128 process_partial_specialization (tree decl)
4130 tree type = TREE_TYPE (decl);
4131 tree tinfo = get_template_info (decl);
4132 tree maintmpl = TI_TEMPLATE (tinfo);
4133 tree specargs = TI_ARGS (tinfo);
4134 tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
4135 tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
4136 tree inner_parms;
4137 tree inst;
4138 int nargs = TREE_VEC_LENGTH (inner_args);
4139 int ntparms;
4140 int i;
4141 bool did_error_intro = false;
4142 struct template_parm_data tpd;
4143 struct template_parm_data tpd2;
4145 gcc_assert (current_template_parms);
4147 inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
4148 ntparms = TREE_VEC_LENGTH (inner_parms);
4150 /* We check that each of the template parameters given in the
4151 partial specialization is used in the argument list to the
4152 specialization. For example:
4154 template <class T> struct S;
4155 template <class T> struct S<T*>;
4157 The second declaration is OK because `T*' uses the template
4158 parameter T, whereas
4160 template <class T> struct S<int>;
4162 is no good. Even trickier is:
4164 template <class T>
4165 struct S1
4167 template <class U>
4168 struct S2;
4169 template <class U>
4170 struct S2<T>;
4173 The S2<T> declaration is actually invalid; it is a
4174 full-specialization. Of course,
4176 template <class U>
4177 struct S2<T (*)(U)>;
4179 or some such would have been OK. */
4180 tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
4181 tpd.parms = XALLOCAVEC (int, ntparms);
4182 memset (tpd.parms, 0, sizeof (int) * ntparms);
4184 tpd.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4185 memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
4186 for (i = 0; i < nargs; ++i)
4188 tpd.current_arg = i;
4189 for_each_template_parm (TREE_VEC_ELT (inner_args, i),
4190 &mark_template_parm,
4191 &tpd,
4192 NULL,
4193 /*include_nondeduced_p=*/false);
4195 for (i = 0; i < ntparms; ++i)
4196 if (tpd.parms[i] == 0)
4198 /* One of the template parms was not used in a deduced context in the
4199 specialization. */
4200 if (!did_error_intro)
4202 error ("template parameters not deducible in "
4203 "partial specialization:");
4204 did_error_intro = true;
4207 inform (input_location, " %qD",
4208 TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
4211 if (did_error_intro)
4212 return error_mark_node;
4214 /* [temp.class.spec]
4216 The argument list of the specialization shall not be identical to
4217 the implicit argument list of the primary template. */
4218 tree main_args
4219 = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (maintmpl)));
4220 if (comp_template_args (inner_args, INNERMOST_TEMPLATE_ARGS (main_args)))
4221 error ("partial specialization %qD does not specialize "
4222 "any template arguments", decl);
4224 /* A partial specialization that replaces multiple parameters of the
4225 primary template with a pack expansion is less specialized for those
4226 parameters. */
4227 if (nargs < DECL_NTPARMS (maintmpl))
4229 error ("partial specialization is not more specialized than the "
4230 "primary template because it replaces multiple parameters "
4231 "with a pack expansion");
4232 inform (DECL_SOURCE_LOCATION (maintmpl), "primary template here");
4233 return decl;
4236 /* [temp.class.spec]
4238 A partially specialized non-type argument expression shall not
4239 involve template parameters of the partial specialization except
4240 when the argument expression is a simple identifier.
4242 The type of a template parameter corresponding to a specialized
4243 non-type argument shall not be dependent on a parameter of the
4244 specialization.
4246 Also, we verify that pack expansions only occur at the
4247 end of the argument list. */
4248 gcc_assert (nargs == DECL_NTPARMS (maintmpl));
4249 tpd2.parms = 0;
4250 for (i = 0; i < nargs; ++i)
4252 tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
4253 tree arg = TREE_VEC_ELT (inner_args, i);
4254 tree packed_args = NULL_TREE;
4255 int j, len = 1;
4257 if (ARGUMENT_PACK_P (arg))
4259 /* Extract the arguments from the argument pack. We'll be
4260 iterating over these in the following loop. */
4261 packed_args = ARGUMENT_PACK_ARGS (arg);
4262 len = TREE_VEC_LENGTH (packed_args);
4265 for (j = 0; j < len; j++)
4267 if (packed_args)
4268 /* Get the Jth argument in the parameter pack. */
4269 arg = TREE_VEC_ELT (packed_args, j);
4271 if (PACK_EXPANSION_P (arg))
4273 /* Pack expansions must come at the end of the
4274 argument list. */
4275 if ((packed_args && j < len - 1)
4276 || (!packed_args && i < nargs - 1))
4278 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4279 error ("parameter pack argument %qE must be at the "
4280 "end of the template argument list", arg);
4281 else
4282 error ("parameter pack argument %qT must be at the "
4283 "end of the template argument list", arg);
4287 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4288 /* We only care about the pattern. */
4289 arg = PACK_EXPANSION_PATTERN (arg);
4291 if (/* These first two lines are the `non-type' bit. */
4292 !TYPE_P (arg)
4293 && TREE_CODE (arg) != TEMPLATE_DECL
4294 /* This next two lines are the `argument expression is not just a
4295 simple identifier' condition and also the `specialized
4296 non-type argument' bit. */
4297 && TREE_CODE (arg) != TEMPLATE_PARM_INDEX
4298 && !(REFERENCE_REF_P (arg)
4299 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_PARM_INDEX))
4301 if ((!packed_args && tpd.arg_uses_template_parms[i])
4302 || (packed_args && uses_template_parms (arg)))
4303 error ("template argument %qE involves template parameter(s)",
4304 arg);
4305 else
4307 /* Look at the corresponding template parameter,
4308 marking which template parameters its type depends
4309 upon. */
4310 tree type = TREE_TYPE (parm);
4312 if (!tpd2.parms)
4314 /* We haven't yet initialized TPD2. Do so now. */
4315 tpd2.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4316 /* The number of parameters here is the number in the
4317 main template, which, as checked in the assertion
4318 above, is NARGS. */
4319 tpd2.parms = XALLOCAVEC (int, nargs);
4320 tpd2.level =
4321 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
4324 /* Mark the template parameters. But this time, we're
4325 looking for the template parameters of the main
4326 template, not in the specialization. */
4327 tpd2.current_arg = i;
4328 tpd2.arg_uses_template_parms[i] = 0;
4329 memset (tpd2.parms, 0, sizeof (int) * nargs);
4330 for_each_template_parm (type,
4331 &mark_template_parm,
4332 &tpd2,
4333 NULL,
4334 /*include_nondeduced_p=*/false);
4336 if (tpd2.arg_uses_template_parms [i])
4338 /* The type depended on some template parameters.
4339 If they are fully specialized in the
4340 specialization, that's OK. */
4341 int j;
4342 int count = 0;
4343 for (j = 0; j < nargs; ++j)
4344 if (tpd2.parms[j] != 0
4345 && tpd.arg_uses_template_parms [j])
4346 ++count;
4347 if (count != 0)
4348 error_n (input_location, count,
4349 "type %qT of template argument %qE depends "
4350 "on a template parameter",
4351 "type %qT of template argument %qE depends "
4352 "on template parameters",
4353 type,
4354 arg);
4361 /* We should only get here once. */
4362 if (TREE_CODE (decl) == TYPE_DECL)
4363 gcc_assert (!COMPLETE_TYPE_P (type));
4365 tree tmpl = build_template_decl (decl, current_template_parms,
4366 DECL_MEMBER_TEMPLATE_P (maintmpl));
4367 TREE_TYPE (tmpl) = type;
4368 DECL_TEMPLATE_RESULT (tmpl) = decl;
4369 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4370 DECL_TEMPLATE_INFO (tmpl) = build_template_info (maintmpl, specargs);
4371 DECL_PRIMARY_TEMPLATE (tmpl) = maintmpl;
4373 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
4374 = tree_cons (specargs, tmpl,
4375 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
4376 TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
4378 for (inst = DECL_TEMPLATE_INSTANTIATIONS (maintmpl); inst;
4379 inst = TREE_CHAIN (inst))
4381 tree instance = TREE_VALUE (inst);
4382 if (TYPE_P (instance)
4383 ? (COMPLETE_TYPE_P (instance)
4384 && CLASSTYPE_IMPLICIT_INSTANTIATION (instance))
4385 : DECL_TEMPLATE_INSTANTIATION (instance))
4387 tree spec = most_specialized_partial_spec (instance, tf_none);
4388 if (spec && TREE_VALUE (spec) == tmpl)
4390 tree inst_decl = (DECL_P (instance)
4391 ? instance : TYPE_NAME (instance));
4392 permerror (input_location,
4393 "partial specialization of %qD after instantiation "
4394 "of %qD", decl, inst_decl);
4399 return decl;
4402 /* PARM is a template parameter of some form; return the corresponding
4403 TEMPLATE_PARM_INDEX. */
4405 static tree
4406 get_template_parm_index (tree parm)
4408 if (TREE_CODE (parm) == PARM_DECL
4409 || TREE_CODE (parm) == CONST_DECL)
4410 parm = DECL_INITIAL (parm);
4411 else if (TREE_CODE (parm) == TYPE_DECL
4412 || TREE_CODE (parm) == TEMPLATE_DECL)
4413 parm = TREE_TYPE (parm);
4414 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
4415 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
4416 parm = TEMPLATE_TYPE_PARM_INDEX (parm);
4417 gcc_assert (TREE_CODE (parm) == TEMPLATE_PARM_INDEX);
4418 return parm;
4421 /* Subroutine of fixed_parameter_pack_p below. Look for any template
4422 parameter packs used by the template parameter PARM. */
4424 static void
4425 fixed_parameter_pack_p_1 (tree parm, struct find_parameter_pack_data *ppd)
4427 /* A type parm can't refer to another parm. */
4428 if (TREE_CODE (parm) == TYPE_DECL)
4429 return;
4430 else if (TREE_CODE (parm) == PARM_DECL)
4432 cp_walk_tree (&TREE_TYPE (parm), &find_parameter_packs_r,
4433 ppd, ppd->visited);
4434 return;
4437 gcc_assert (TREE_CODE (parm) == TEMPLATE_DECL);
4439 tree vec = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (parm));
4440 for (int i = 0; i < TREE_VEC_LENGTH (vec); ++i)
4441 fixed_parameter_pack_p_1 (TREE_VALUE (TREE_VEC_ELT (vec, i)), ppd);
4444 /* PARM is a template parameter pack. Return any parameter packs used in
4445 its type or the type of any of its template parameters. If there are
4446 any such packs, it will be instantiated into a fixed template parameter
4447 list by partial instantiation rather than be fully deduced. */
4449 tree
4450 fixed_parameter_pack_p (tree parm)
4452 /* This can only be true in a member template. */
4453 if (TEMPLATE_PARM_ORIG_LEVEL (get_template_parm_index (parm)) < 2)
4454 return NULL_TREE;
4455 /* This can only be true for a parameter pack. */
4456 if (!template_parameter_pack_p (parm))
4457 return NULL_TREE;
4458 /* A type parm can't refer to another parm. */
4459 if (TREE_CODE (parm) == TYPE_DECL)
4460 return NULL_TREE;
4462 tree parameter_packs = NULL_TREE;
4463 struct find_parameter_pack_data ppd;
4464 ppd.parameter_packs = &parameter_packs;
4465 ppd.visited = new hash_set<tree>;
4467 fixed_parameter_pack_p_1 (parm, &ppd);
4469 delete ppd.visited;
4470 return parameter_packs;
4473 /* Check that a template declaration's use of default arguments and
4474 parameter packs is not invalid. Here, PARMS are the template
4475 parameters. IS_PRIMARY is true if DECL is the thing declared by
4476 a primary template. IS_PARTIAL is true if DECL is a partial
4477 specialization.
4479 IS_FRIEND_DECL is nonzero if DECL is a friend function template
4480 declaration (but not a definition); 1 indicates a declaration, 2
4481 indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
4482 emitted for extraneous default arguments.
4484 Returns TRUE if there were no errors found, FALSE otherwise. */
4486 bool
4487 check_default_tmpl_args (tree decl, tree parms, bool is_primary,
4488 bool is_partial, int is_friend_decl)
4490 const char *msg;
4491 int last_level_to_check;
4492 tree parm_level;
4493 bool no_errors = true;
4495 /* [temp.param]
4497 A default template-argument shall not be specified in a
4498 function template declaration or a function template definition, nor
4499 in the template-parameter-list of the definition of a member of a
4500 class template. */
4502 if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL
4503 || (TREE_CODE (decl) == FUNCTION_DECL && DECL_LOCAL_FUNCTION_P (decl)))
4504 /* You can't have a function template declaration in a local
4505 scope, nor you can you define a member of a class template in a
4506 local scope. */
4507 return true;
4509 if ((TREE_CODE (decl) == TYPE_DECL
4510 && TREE_TYPE (decl)
4511 && LAMBDA_TYPE_P (TREE_TYPE (decl)))
4512 || (TREE_CODE (decl) == FUNCTION_DECL
4513 && LAMBDA_FUNCTION_P (decl)))
4514 /* A lambda doesn't have an explicit declaration; don't complain
4515 about the parms of the enclosing class. */
4516 return true;
4518 if (current_class_type
4519 && !TYPE_BEING_DEFINED (current_class_type)
4520 && DECL_LANG_SPECIFIC (decl)
4521 && DECL_DECLARES_FUNCTION_P (decl)
4522 /* If this is either a friend defined in the scope of the class
4523 or a member function. */
4524 && (DECL_FUNCTION_MEMBER_P (decl)
4525 ? same_type_p (DECL_CONTEXT (decl), current_class_type)
4526 : DECL_FRIEND_CONTEXT (decl)
4527 ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
4528 : false)
4529 /* And, if it was a member function, it really was defined in
4530 the scope of the class. */
4531 && (!DECL_FUNCTION_MEMBER_P (decl)
4532 || DECL_INITIALIZED_IN_CLASS_P (decl)))
4533 /* We already checked these parameters when the template was
4534 declared, so there's no need to do it again now. This function
4535 was defined in class scope, but we're processing its body now
4536 that the class is complete. */
4537 return true;
4539 /* Core issue 226 (C++0x only): the following only applies to class
4540 templates. */
4541 if (is_primary
4542 && ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL))
4544 /* [temp.param]
4546 If a template-parameter has a default template-argument, all
4547 subsequent template-parameters shall have a default
4548 template-argument supplied. */
4549 for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
4551 tree inner_parms = TREE_VALUE (parm_level);
4552 int ntparms = TREE_VEC_LENGTH (inner_parms);
4553 int seen_def_arg_p = 0;
4554 int i;
4556 for (i = 0; i < ntparms; ++i)
4558 tree parm = TREE_VEC_ELT (inner_parms, i);
4560 if (parm == error_mark_node)
4561 continue;
4563 if (TREE_PURPOSE (parm))
4564 seen_def_arg_p = 1;
4565 else if (seen_def_arg_p
4566 && !template_parameter_pack_p (TREE_VALUE (parm)))
4568 error ("no default argument for %qD", TREE_VALUE (parm));
4569 /* For better subsequent error-recovery, we indicate that
4570 there should have been a default argument. */
4571 TREE_PURPOSE (parm) = error_mark_node;
4572 no_errors = false;
4574 else if (!is_partial
4575 && !is_friend_decl
4576 /* Don't complain about an enclosing partial
4577 specialization. */
4578 && parm_level == parms
4579 && TREE_CODE (decl) == TYPE_DECL
4580 && i < ntparms - 1
4581 && template_parameter_pack_p (TREE_VALUE (parm))
4582 /* A fixed parameter pack will be partially
4583 instantiated into a fixed length list. */
4584 && !fixed_parameter_pack_p (TREE_VALUE (parm)))
4586 /* A primary class template can only have one
4587 parameter pack, at the end of the template
4588 parameter list. */
4590 error ("parameter pack %q+D must be at the end of the"
4591 " template parameter list", TREE_VALUE (parm));
4593 TREE_VALUE (TREE_VEC_ELT (inner_parms, i))
4594 = error_mark_node;
4595 no_errors = false;
4601 if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
4602 || is_partial
4603 || !is_primary
4604 || is_friend_decl)
4605 /* For an ordinary class template, default template arguments are
4606 allowed at the innermost level, e.g.:
4607 template <class T = int>
4608 struct S {};
4609 but, in a partial specialization, they're not allowed even
4610 there, as we have in [temp.class.spec]:
4612 The template parameter list of a specialization shall not
4613 contain default template argument values.
4615 So, for a partial specialization, or for a function template
4616 (in C++98/C++03), we look at all of them. */
4618 else
4619 /* But, for a primary class template that is not a partial
4620 specialization we look at all template parameters except the
4621 innermost ones. */
4622 parms = TREE_CHAIN (parms);
4624 /* Figure out what error message to issue. */
4625 if (is_friend_decl == 2)
4626 msg = G_("default template arguments may not be used in function template "
4627 "friend re-declaration");
4628 else if (is_friend_decl)
4629 msg = G_("default template arguments may not be used in function template "
4630 "friend declarations");
4631 else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
4632 msg = G_("default template arguments may not be used in function templates "
4633 "without -std=c++11 or -std=gnu++11");
4634 else if (is_partial)
4635 msg = G_("default template arguments may not be used in "
4636 "partial specializations");
4637 else
4638 msg = G_("default argument for template parameter for class enclosing %qD");
4640 if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
4641 /* If we're inside a class definition, there's no need to
4642 examine the parameters to the class itself. On the one
4643 hand, they will be checked when the class is defined, and,
4644 on the other, default arguments are valid in things like:
4645 template <class T = double>
4646 struct S { template <class U> void f(U); };
4647 Here the default argument for `S' has no bearing on the
4648 declaration of `f'. */
4649 last_level_to_check = template_class_depth (current_class_type) + 1;
4650 else
4651 /* Check everything. */
4652 last_level_to_check = 0;
4654 for (parm_level = parms;
4655 parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
4656 parm_level = TREE_CHAIN (parm_level))
4658 tree inner_parms = TREE_VALUE (parm_level);
4659 int i;
4660 int ntparms;
4662 ntparms = TREE_VEC_LENGTH (inner_parms);
4663 for (i = 0; i < ntparms; ++i)
4665 if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
4666 continue;
4668 if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
4670 if (msg)
4672 no_errors = false;
4673 if (is_friend_decl == 2)
4674 return no_errors;
4676 error (msg, decl);
4677 msg = 0;
4680 /* Clear out the default argument so that we are not
4681 confused later. */
4682 TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
4686 /* At this point, if we're still interested in issuing messages,
4687 they must apply to classes surrounding the object declared. */
4688 if (msg)
4689 msg = G_("default argument for template parameter for class "
4690 "enclosing %qD");
4693 return no_errors;
4696 /* Worker for push_template_decl_real, called via
4697 for_each_template_parm. DATA is really an int, indicating the
4698 level of the parameters we are interested in. If T is a template
4699 parameter of that level, return nonzero. */
4701 static int
4702 template_parm_this_level_p (tree t, void* data)
4704 int this_level = *(int *)data;
4705 int level;
4707 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4708 level = TEMPLATE_PARM_LEVEL (t);
4709 else
4710 level = TEMPLATE_TYPE_LEVEL (t);
4711 return level == this_level;
4714 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
4715 parameters given by current_template_args, or reuses a
4716 previously existing one, if appropriate. Returns the DECL, or an
4717 equivalent one, if it is replaced via a call to duplicate_decls.
4719 If IS_FRIEND is true, DECL is a friend declaration. */
4721 tree
4722 push_template_decl_real (tree decl, bool is_friend)
4724 tree tmpl;
4725 tree args;
4726 tree info;
4727 tree ctx;
4728 bool is_primary;
4729 bool is_partial;
4730 int new_template_p = 0;
4731 /* True if the template is a member template, in the sense of
4732 [temp.mem]. */
4733 bool member_template_p = false;
4735 if (decl == error_mark_node || !current_template_parms)
4736 return error_mark_node;
4738 /* See if this is a partial specialization. */
4739 is_partial = ((DECL_IMPLICIT_TYPEDEF_P (decl)
4740 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
4741 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
4742 || (TREE_CODE (decl) == VAR_DECL
4743 && DECL_LANG_SPECIFIC (decl)
4744 && DECL_TEMPLATE_SPECIALIZATION (decl)
4745 && TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (decl))));
4747 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
4748 is_friend = true;
4750 if (is_friend)
4751 /* For a friend, we want the context of the friend function, not
4752 the type of which it is a friend. */
4753 ctx = CP_DECL_CONTEXT (decl);
4754 else if (CP_DECL_CONTEXT (decl)
4755 && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4756 /* In the case of a virtual function, we want the class in which
4757 it is defined. */
4758 ctx = CP_DECL_CONTEXT (decl);
4759 else
4760 /* Otherwise, if we're currently defining some class, the DECL
4761 is assumed to be a member of the class. */
4762 ctx = current_scope ();
4764 if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
4765 ctx = NULL_TREE;
4767 if (!DECL_CONTEXT (decl))
4768 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
4770 /* See if this is a primary template. */
4771 if (is_friend && ctx
4772 && uses_template_parms_level (ctx, processing_template_decl))
4773 /* A friend template that specifies a class context, i.e.
4774 template <typename T> friend void A<T>::f();
4775 is not primary. */
4776 is_primary = false;
4777 else if (TREE_CODE (decl) == TYPE_DECL
4778 && LAMBDA_TYPE_P (TREE_TYPE (decl)))
4779 is_primary = false;
4780 else
4781 is_primary = template_parm_scope_p ();
4783 if (is_primary)
4785 if (DECL_CLASS_SCOPE_P (decl))
4786 member_template_p = true;
4787 if (TREE_CODE (decl) == TYPE_DECL
4788 && ANON_AGGRNAME_P (DECL_NAME (decl)))
4790 error ("template class without a name");
4791 return error_mark_node;
4793 else if (TREE_CODE (decl) == FUNCTION_DECL)
4795 if (member_template_p)
4797 if (DECL_OVERRIDE_P (decl) || DECL_FINAL_P (decl))
4798 error ("member template %qD may not have virt-specifiers", decl);
4800 if (DECL_DESTRUCTOR_P (decl))
4802 /* [temp.mem]
4804 A destructor shall not be a member template. */
4805 error ("destructor %qD declared as member template", decl);
4806 return error_mark_node;
4808 if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
4809 && (!prototype_p (TREE_TYPE (decl))
4810 || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
4811 || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
4812 || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
4813 == void_list_node)))
4815 /* [basic.stc.dynamic.allocation]
4817 An allocation function can be a function
4818 template. ... Template allocation functions shall
4819 have two or more parameters. */
4820 error ("invalid template declaration of %qD", decl);
4821 return error_mark_node;
4824 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4825 && CLASS_TYPE_P (TREE_TYPE (decl)))
4826 /* OK */;
4827 else if (TREE_CODE (decl) == TYPE_DECL
4828 && TYPE_DECL_ALIAS_P (decl))
4829 /* alias-declaration */
4830 gcc_assert (!DECL_ARTIFICIAL (decl));
4831 else if (VAR_P (decl))
4832 /* C++14 variable template. */;
4833 else
4835 error ("template declaration of %q#D", decl);
4836 return error_mark_node;
4840 /* Check to see that the rules regarding the use of default
4841 arguments are not being violated. */
4842 check_default_tmpl_args (decl, current_template_parms,
4843 is_primary, is_partial, /*is_friend_decl=*/0);
4845 /* Ensure that there are no parameter packs in the type of this
4846 declaration that have not been expanded. */
4847 if (TREE_CODE (decl) == FUNCTION_DECL)
4849 /* Check each of the arguments individually to see if there are
4850 any bare parameter packs. */
4851 tree type = TREE_TYPE (decl);
4852 tree arg = DECL_ARGUMENTS (decl);
4853 tree argtype = TYPE_ARG_TYPES (type);
4855 while (arg && argtype)
4857 if (!DECL_PACK_P (arg)
4858 && check_for_bare_parameter_packs (TREE_TYPE (arg)))
4860 /* This is a PARM_DECL that contains unexpanded parameter
4861 packs. We have already complained about this in the
4862 check_for_bare_parameter_packs call, so just replace
4863 these types with ERROR_MARK_NODE. */
4864 TREE_TYPE (arg) = error_mark_node;
4865 TREE_VALUE (argtype) = error_mark_node;
4868 arg = DECL_CHAIN (arg);
4869 argtype = TREE_CHAIN (argtype);
4872 /* Check for bare parameter packs in the return type and the
4873 exception specifiers. */
4874 if (check_for_bare_parameter_packs (TREE_TYPE (type)))
4875 /* Errors were already issued, set return type to int
4876 as the frontend doesn't expect error_mark_node as
4877 the return type. */
4878 TREE_TYPE (type) = integer_type_node;
4879 if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
4880 TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
4882 else if (check_for_bare_parameter_packs ((TREE_CODE (decl) == TYPE_DECL
4883 && TYPE_DECL_ALIAS_P (decl))
4884 ? DECL_ORIGINAL_TYPE (decl)
4885 : TREE_TYPE (decl)))
4887 TREE_TYPE (decl) = error_mark_node;
4888 return error_mark_node;
4891 if (is_partial)
4892 return process_partial_specialization (decl);
4894 args = current_template_args ();
4896 if (!ctx
4897 || TREE_CODE (ctx) == FUNCTION_DECL
4898 || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
4899 || (TREE_CODE (decl) == TYPE_DECL
4900 && LAMBDA_TYPE_P (TREE_TYPE (decl)))
4901 || (is_friend && !DECL_TEMPLATE_INFO (decl)))
4903 if (DECL_LANG_SPECIFIC (decl)
4904 && DECL_TEMPLATE_INFO (decl)
4905 && DECL_TI_TEMPLATE (decl))
4906 tmpl = DECL_TI_TEMPLATE (decl);
4907 /* If DECL is a TYPE_DECL for a class-template, then there won't
4908 be DECL_LANG_SPECIFIC. The information equivalent to
4909 DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead. */
4910 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4911 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
4912 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
4914 /* Since a template declaration already existed for this
4915 class-type, we must be redeclaring it here. Make sure
4916 that the redeclaration is valid. */
4917 redeclare_class_template (TREE_TYPE (decl),
4918 current_template_parms);
4919 /* We don't need to create a new TEMPLATE_DECL; just use the
4920 one we already had. */
4921 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
4923 else
4925 tmpl = build_template_decl (decl, current_template_parms,
4926 member_template_p);
4927 new_template_p = 1;
4929 if (DECL_LANG_SPECIFIC (decl)
4930 && DECL_TEMPLATE_SPECIALIZATION (decl))
4932 /* A specialization of a member template of a template
4933 class. */
4934 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4935 DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
4936 DECL_TEMPLATE_INFO (decl) = NULL_TREE;
4940 else
4942 tree a, t, current, parms;
4943 int i;
4944 tree tinfo = get_template_info (decl);
4946 if (!tinfo)
4948 error ("template definition of non-template %q#D", decl);
4949 return error_mark_node;
4952 tmpl = TI_TEMPLATE (tinfo);
4954 if (DECL_FUNCTION_TEMPLATE_P (tmpl)
4955 && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
4956 && DECL_TEMPLATE_SPECIALIZATION (decl)
4957 && DECL_MEMBER_TEMPLATE_P (tmpl))
4959 tree new_tmpl;
4961 /* The declaration is a specialization of a member
4962 template, declared outside the class. Therefore, the
4963 innermost template arguments will be NULL, so we
4964 replace them with the arguments determined by the
4965 earlier call to check_explicit_specialization. */
4966 args = DECL_TI_ARGS (decl);
4968 new_tmpl
4969 = build_template_decl (decl, current_template_parms,
4970 member_template_p);
4971 DECL_TEMPLATE_RESULT (new_tmpl) = decl;
4972 TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
4973 DECL_TI_TEMPLATE (decl) = new_tmpl;
4974 SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
4975 DECL_TEMPLATE_INFO (new_tmpl)
4976 = build_template_info (tmpl, args);
4978 register_specialization (new_tmpl,
4979 most_general_template (tmpl),
4980 args,
4981 is_friend, 0);
4982 return decl;
4985 /* Make sure the template headers we got make sense. */
4987 parms = DECL_TEMPLATE_PARMS (tmpl);
4988 i = TMPL_PARMS_DEPTH (parms);
4989 if (TMPL_ARGS_DEPTH (args) != i)
4991 error ("expected %d levels of template parms for %q#D, got %d",
4992 i, decl, TMPL_ARGS_DEPTH (args));
4993 DECL_INTERFACE_KNOWN (decl) = 1;
4994 return error_mark_node;
4996 else
4997 for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
4999 a = TMPL_ARGS_LEVEL (args, i);
5000 t = INNERMOST_TEMPLATE_PARMS (parms);
5002 if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
5004 if (current == decl)
5005 error ("got %d template parameters for %q#D",
5006 TREE_VEC_LENGTH (a), decl);
5007 else
5008 error ("got %d template parameters for %q#T",
5009 TREE_VEC_LENGTH (a), current);
5010 error (" but %d required", TREE_VEC_LENGTH (t));
5011 /* Avoid crash in import_export_decl. */
5012 DECL_INTERFACE_KNOWN (decl) = 1;
5013 return error_mark_node;
5016 if (current == decl)
5017 current = ctx;
5018 else if (current == NULL_TREE)
5019 /* Can happen in erroneous input. */
5020 break;
5021 else
5022 current = get_containing_scope (current);
5025 /* Check that the parms are used in the appropriate qualifying scopes
5026 in the declarator. */
5027 if (!comp_template_args
5028 (TI_ARGS (tinfo),
5029 TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
5031 error ("\
5032 template arguments to %qD do not match original template %qD",
5033 decl, DECL_TEMPLATE_RESULT (tmpl));
5034 if (!uses_template_parms (TI_ARGS (tinfo)))
5035 inform (input_location, "use template<> for an explicit specialization");
5036 /* Avoid crash in import_export_decl. */
5037 DECL_INTERFACE_KNOWN (decl) = 1;
5038 return error_mark_node;
5042 DECL_TEMPLATE_RESULT (tmpl) = decl;
5043 TREE_TYPE (tmpl) = TREE_TYPE (decl);
5045 /* Push template declarations for global functions and types. Note
5046 that we do not try to push a global template friend declared in a
5047 template class; such a thing may well depend on the template
5048 parameters of the class. */
5049 if (new_template_p && !ctx
5050 && !(is_friend && template_class_depth (current_class_type) > 0))
5052 tmpl = pushdecl_namespace_level (tmpl, is_friend);
5053 if (tmpl == error_mark_node)
5054 return error_mark_node;
5056 /* Hide template friend classes that haven't been declared yet. */
5057 if (is_friend && TREE_CODE (decl) == TYPE_DECL)
5059 DECL_ANTICIPATED (tmpl) = 1;
5060 DECL_FRIEND_P (tmpl) = 1;
5064 if (is_primary)
5066 tree parms = DECL_TEMPLATE_PARMS (tmpl);
5067 int i;
5069 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
5070 if (DECL_CONV_FN_P (tmpl))
5072 int depth = TMPL_PARMS_DEPTH (parms);
5074 /* It is a conversion operator. See if the type converted to
5075 depends on innermost template operands. */
5077 if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
5078 depth))
5079 DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
5082 /* Give template template parms a DECL_CONTEXT of the template
5083 for which they are a parameter. */
5084 parms = INNERMOST_TEMPLATE_PARMS (parms);
5085 for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
5087 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5088 if (TREE_CODE (parm) == TEMPLATE_DECL)
5089 DECL_CONTEXT (parm) = tmpl;
5093 /* The DECL_TI_ARGS of DECL contains full set of arguments referring
5094 back to its most general template. If TMPL is a specialization,
5095 ARGS may only have the innermost set of arguments. Add the missing
5096 argument levels if necessary. */
5097 if (DECL_TEMPLATE_INFO (tmpl))
5098 args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
5100 info = build_template_info (tmpl, args);
5102 if (DECL_IMPLICIT_TYPEDEF_P (decl))
5103 SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
5104 else
5106 if (is_primary && !DECL_LANG_SPECIFIC (decl))
5107 retrofit_lang_decl (decl);
5108 if (DECL_LANG_SPECIFIC (decl))
5109 DECL_TEMPLATE_INFO (decl) = info;
5112 if (flag_implicit_templates
5113 && !is_friend
5114 && TREE_PUBLIC (decl)
5115 && VAR_OR_FUNCTION_DECL_P (decl))
5116 /* Set DECL_COMDAT on template instantiations; if we force
5117 them to be emitted by explicit instantiation or -frepo,
5118 mark_needed will tell cgraph to do the right thing. */
5119 DECL_COMDAT (decl) = true;
5121 return DECL_TEMPLATE_RESULT (tmpl);
5124 tree
5125 push_template_decl (tree decl)
5127 return push_template_decl_real (decl, false);
5130 /* FN is an inheriting constructor that inherits from the constructor
5131 template INHERITED; turn FN into a constructor template with a matching
5132 template header. */
5134 tree
5135 add_inherited_template_parms (tree fn, tree inherited)
5137 tree inner_parms
5138 = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (inherited));
5139 inner_parms = copy_node (inner_parms);
5140 tree parms
5141 = tree_cons (size_int (processing_template_decl + 1),
5142 inner_parms, current_template_parms);
5143 tree tmpl = build_template_decl (fn, parms, /*member*/true);
5144 tree args = template_parms_to_args (parms);
5145 DECL_TEMPLATE_INFO (fn) = build_template_info (tmpl, args);
5146 TREE_TYPE (tmpl) = TREE_TYPE (fn);
5147 DECL_TEMPLATE_RESULT (tmpl) = fn;
5148 DECL_ARTIFICIAL (tmpl) = true;
5149 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
5150 return tmpl;
5153 /* Called when a class template TYPE is redeclared with the indicated
5154 template PARMS, e.g.:
5156 template <class T> struct S;
5157 template <class T> struct S {}; */
5159 bool
5160 redeclare_class_template (tree type, tree parms)
5162 tree tmpl;
5163 tree tmpl_parms;
5164 int i;
5166 if (!TYPE_TEMPLATE_INFO (type))
5168 error ("%qT is not a template type", type);
5169 return false;
5172 tmpl = TYPE_TI_TEMPLATE (type);
5173 if (!PRIMARY_TEMPLATE_P (tmpl))
5174 /* The type is nested in some template class. Nothing to worry
5175 about here; there are no new template parameters for the nested
5176 type. */
5177 return true;
5179 if (!parms)
5181 error ("template specifiers not specified in declaration of %qD",
5182 tmpl);
5183 return false;
5186 parms = INNERMOST_TEMPLATE_PARMS (parms);
5187 tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
5189 if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
5191 error_n (input_location, TREE_VEC_LENGTH (parms),
5192 "redeclared with %d template parameter",
5193 "redeclared with %d template parameters",
5194 TREE_VEC_LENGTH (parms));
5195 inform_n (input_location, TREE_VEC_LENGTH (tmpl_parms),
5196 "previous declaration %q+D used %d template parameter",
5197 "previous declaration %q+D used %d template parameters",
5198 tmpl, TREE_VEC_LENGTH (tmpl_parms));
5199 return false;
5202 for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
5204 tree tmpl_parm;
5205 tree parm;
5206 tree tmpl_default;
5207 tree parm_default;
5209 if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
5210 || TREE_VEC_ELT (parms, i) == error_mark_node)
5211 continue;
5213 tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
5214 if (error_operand_p (tmpl_parm))
5215 return false;
5217 parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5218 tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
5219 parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
5221 /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
5222 TEMPLATE_DECL. */
5223 if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
5224 || (TREE_CODE (tmpl_parm) != TYPE_DECL
5225 && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
5226 || (TREE_CODE (tmpl_parm) != PARM_DECL
5227 && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
5228 != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
5229 || (TREE_CODE (tmpl_parm) == PARM_DECL
5230 && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
5231 != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))))
5233 error ("template parameter %q+#D", tmpl_parm);
5234 error ("redeclared here as %q#D", parm);
5235 return false;
5238 if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
5240 /* We have in [temp.param]:
5242 A template-parameter may not be given default arguments
5243 by two different declarations in the same scope. */
5244 error_at (input_location, "redefinition of default argument for %q#D", parm);
5245 inform (DECL_SOURCE_LOCATION (tmpl_parm),
5246 "original definition appeared here");
5247 return false;
5250 if (parm_default != NULL_TREE)
5251 /* Update the previous template parameters (which are the ones
5252 that will really count) with the new default value. */
5253 TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
5254 else if (tmpl_default != NULL_TREE)
5255 /* Update the new parameters, too; they'll be used as the
5256 parameters for any members. */
5257 TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
5260 return true;
5263 /* The actual substitution part of instantiate_non_dependent_expr_sfinae,
5264 to be used when the caller has already checked
5265 (processing_template_decl
5266 && !instantiation_dependent_expression_p (expr)
5267 && potential_constant_expression (expr))
5268 and cleared processing_template_decl. */
5270 tree
5271 instantiate_non_dependent_expr_internal (tree expr, tsubst_flags_t complain)
5273 return tsubst_copy_and_build (expr,
5274 /*args=*/NULL_TREE,
5275 complain,
5276 /*in_decl=*/NULL_TREE,
5277 /*function_p=*/false,
5278 /*integral_constant_expression_p=*/true);
5281 /* Simplify EXPR if it is a non-dependent expression. Returns the
5282 (possibly simplified) expression. */
5284 tree
5285 instantiate_non_dependent_expr_sfinae (tree expr, tsubst_flags_t complain)
5287 if (expr == NULL_TREE)
5288 return NULL_TREE;
5290 /* If we're in a template, but EXPR isn't value dependent, simplify
5291 it. We're supposed to treat:
5293 template <typename T> void f(T[1 + 1]);
5294 template <typename T> void f(T[2]);
5296 as two declarations of the same function, for example. */
5297 if (processing_template_decl
5298 && !instantiation_dependent_expression_p (expr)
5299 && potential_constant_expression (expr))
5301 processing_template_decl_sentinel s;
5302 expr = instantiate_non_dependent_expr_internal (expr, complain);
5304 return expr;
5307 tree
5308 instantiate_non_dependent_expr (tree expr)
5310 return instantiate_non_dependent_expr_sfinae (expr, tf_error);
5313 /* Return TRUE iff T is a type alias, a TEMPLATE_DECL for an alias
5314 template declaration, or a TYPE_DECL for an alias declaration. */
5316 bool
5317 alias_type_or_template_p (tree t)
5319 if (t == NULL_TREE)
5320 return false;
5321 return ((TREE_CODE (t) == TYPE_DECL && TYPE_DECL_ALIAS_P (t))
5322 || (TYPE_P (t)
5323 && TYPE_NAME (t)
5324 && TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
5325 || DECL_ALIAS_TEMPLATE_P (t));
5328 /* Return TRUE iff T is a specialization of an alias template. */
5330 bool
5331 alias_template_specialization_p (const_tree t)
5333 /* It's an alias template specialization if it's an alias and its
5334 TYPE_NAME is a specialization of a primary template. */
5335 if (TYPE_ALIAS_P (t))
5337 tree name = TYPE_NAME (t);
5338 if (DECL_LANG_SPECIFIC (name))
5339 if (tree ti = DECL_TEMPLATE_INFO (name))
5341 tree tmpl = TI_TEMPLATE (ti);
5342 return PRIMARY_TEMPLATE_P (tmpl);
5345 return false;
5348 /* Return TRUE iff T is a specialization of an alias template with
5349 dependent template-arguments. */
5351 bool
5352 dependent_alias_template_spec_p (const_tree t)
5354 return (alias_template_specialization_p (t)
5355 && (any_dependent_template_arguments_p
5356 (INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (t)))));
5359 /* Return the number of innermost template parameters in TMPL. */
5361 static int
5362 num_innermost_template_parms (tree tmpl)
5364 tree parms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (tmpl));
5365 return TREE_VEC_LENGTH (parms);
5368 /* Return either TMPL or another template that it is equivalent to under DR
5369 1286: An alias that just changes the name of a template is equivalent to
5370 the other template. */
5372 static tree
5373 get_underlying_template (tree tmpl)
5375 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
5376 while (DECL_ALIAS_TEMPLATE_P (tmpl))
5378 tree result = DECL_ORIGINAL_TYPE (DECL_TEMPLATE_RESULT (tmpl));
5379 if (TYPE_TEMPLATE_INFO (result))
5381 tree sub = TYPE_TI_TEMPLATE (result);
5382 if (PRIMARY_TEMPLATE_P (sub)
5383 && (num_innermost_template_parms (tmpl)
5384 == num_innermost_template_parms (sub)))
5386 tree alias_args = INNERMOST_TEMPLATE_ARGS
5387 (template_parms_to_args (DECL_TEMPLATE_PARMS (tmpl)));
5388 if (!comp_template_args (TYPE_TI_ARGS (result), alias_args))
5389 break;
5390 /* The alias type is equivalent to the pattern of the
5391 underlying template, so strip the alias. */
5392 tmpl = sub;
5393 continue;
5396 break;
5398 return tmpl;
5401 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
5402 must be a function or a pointer-to-function type, as specified
5403 in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
5404 and check that the resulting function has external linkage. */
5406 static tree
5407 convert_nontype_argument_function (tree type, tree expr,
5408 tsubst_flags_t complain)
5410 tree fns = expr;
5411 tree fn, fn_no_ptr;
5412 linkage_kind linkage;
5414 fn = instantiate_type (type, fns, tf_none);
5415 if (fn == error_mark_node)
5416 return error_mark_node;
5418 fn_no_ptr = fn;
5419 if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
5420 fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
5421 if (BASELINK_P (fn_no_ptr))
5422 fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
5424 /* [temp.arg.nontype]/1
5426 A template-argument for a non-type, non-template template-parameter
5427 shall be one of:
5428 [...]
5429 -- the address of an object or function with external [C++11: or
5430 internal] linkage. */
5432 if (TREE_CODE (fn_no_ptr) != FUNCTION_DECL)
5434 if (complain & tf_error)
5436 error ("%qE is not a valid template argument for type %qT",
5437 expr, type);
5438 if (TYPE_PTR_P (type))
5439 error ("it must be the address of a function with "
5440 "external linkage");
5441 else
5442 error ("it must be the name of a function with "
5443 "external linkage");
5445 return NULL_TREE;
5448 linkage = decl_linkage (fn_no_ptr);
5449 if (cxx_dialect >= cxx11 ? linkage == lk_none : linkage != lk_external)
5451 if (complain & tf_error)
5453 if (cxx_dialect >= cxx11)
5454 error ("%qE is not a valid template argument for type %qT "
5455 "because %qD has no linkage",
5456 expr, type, fn_no_ptr);
5457 else
5458 error ("%qE is not a valid template argument for type %qT "
5459 "because %qD does not have external linkage",
5460 expr, type, fn_no_ptr);
5462 return NULL_TREE;
5465 return fn;
5468 /* Subroutine of convert_nontype_argument.
5469 Check if EXPR of type TYPE is a valid pointer-to-member constant.
5470 Emit an error otherwise. */
5472 static bool
5473 check_valid_ptrmem_cst_expr (tree type, tree expr,
5474 tsubst_flags_t complain)
5476 STRIP_NOPS (expr);
5477 if (expr && (null_ptr_cst_p (expr) || TREE_CODE (expr) == PTRMEM_CST))
5478 return true;
5479 if (cxx_dialect >= cxx11 && null_member_pointer_value_p (expr))
5480 return true;
5481 if (processing_template_decl
5482 && TREE_CODE (expr) == ADDR_EXPR
5483 && TREE_CODE (TREE_OPERAND (expr, 0)) == OFFSET_REF)
5484 return true;
5485 if (complain & tf_error)
5487 error ("%qE is not a valid template argument for type %qT",
5488 expr, type);
5489 error ("it must be a pointer-to-member of the form %<&X::Y%>");
5491 return false;
5494 /* Returns TRUE iff the address of OP is value-dependent.
5496 14.6.2.4 [temp.dep.temp]:
5497 A non-integral non-type template-argument is dependent if its type is
5498 dependent or it has either of the following forms
5499 qualified-id
5500 & qualified-id
5501 and contains a nested-name-specifier which specifies a class-name that
5502 names a dependent type.
5504 We generalize this to just say that the address of a member of a
5505 dependent class is value-dependent; the above doesn't cover the
5506 address of a static data member named with an unqualified-id. */
5508 static bool
5509 has_value_dependent_address (tree op)
5511 /* We could use get_inner_reference here, but there's no need;
5512 this is only relevant for template non-type arguments, which
5513 can only be expressed as &id-expression. */
5514 if (DECL_P (op))
5516 tree ctx = CP_DECL_CONTEXT (op);
5517 if (TYPE_P (ctx) && dependent_type_p (ctx))
5518 return true;
5521 return false;
5524 /* The next set of functions are used for providing helpful explanatory
5525 diagnostics for failed overload resolution. Their messages should be
5526 indented by two spaces for consistency with the messages in
5527 call.c */
5529 static int
5530 unify_success (bool /*explain_p*/)
5532 return 0;
5535 static int
5536 unify_parameter_deduction_failure (bool explain_p, tree parm)
5538 if (explain_p)
5539 inform (input_location,
5540 " couldn't deduce template parameter %qD", parm);
5541 return 1;
5544 static int
5545 unify_invalid (bool /*explain_p*/)
5547 return 1;
5550 static int
5551 unify_cv_qual_mismatch (bool explain_p, tree parm, tree arg)
5553 if (explain_p)
5554 inform (input_location,
5555 " types %qT and %qT have incompatible cv-qualifiers",
5556 parm, arg);
5557 return 1;
5560 static int
5561 unify_type_mismatch (bool explain_p, tree parm, tree arg)
5563 if (explain_p)
5564 inform (input_location, " mismatched types %qT and %qT", parm, arg);
5565 return 1;
5568 static int
5569 unify_parameter_pack_mismatch (bool explain_p, tree parm, tree arg)
5571 if (explain_p)
5572 inform (input_location,
5573 " template parameter %qD is not a parameter pack, but "
5574 "argument %qD is",
5575 parm, arg);
5576 return 1;
5579 static int
5580 unify_ptrmem_cst_mismatch (bool explain_p, tree parm, tree arg)
5582 if (explain_p)
5583 inform (input_location,
5584 " template argument %qE does not match "
5585 "pointer-to-member constant %qE",
5586 arg, parm);
5587 return 1;
5590 static int
5591 unify_expression_unequal (bool explain_p, tree parm, tree arg)
5593 if (explain_p)
5594 inform (input_location, " %qE is not equivalent to %qE", parm, arg);
5595 return 1;
5598 static int
5599 unify_parameter_pack_inconsistent (bool explain_p, tree old_arg, tree new_arg)
5601 if (explain_p)
5602 inform (input_location,
5603 " inconsistent parameter pack deduction with %qT and %qT",
5604 old_arg, new_arg);
5605 return 1;
5608 static int
5609 unify_inconsistency (bool explain_p, tree parm, tree first, tree second)
5611 if (explain_p)
5613 if (TYPE_P (parm))
5614 inform (input_location,
5615 " deduced conflicting types for parameter %qT (%qT and %qT)",
5616 parm, first, second);
5617 else
5618 inform (input_location,
5619 " deduced conflicting values for non-type parameter "
5620 "%qE (%qE and %qE)", parm, first, second);
5622 return 1;
5625 static int
5626 unify_vla_arg (bool explain_p, tree arg)
5628 if (explain_p)
5629 inform (input_location,
5630 " variable-sized array type %qT is not "
5631 "a valid template argument",
5632 arg);
5633 return 1;
5636 static int
5637 unify_method_type_error (bool explain_p, tree arg)
5639 if (explain_p)
5640 inform (input_location,
5641 " member function type %qT is not a valid template argument",
5642 arg);
5643 return 1;
5646 static int
5647 unify_arity (bool explain_p, int have, int wanted, bool least_p = false)
5649 if (explain_p)
5651 if (least_p)
5652 inform_n (input_location, wanted,
5653 " candidate expects at least %d argument, %d provided",
5654 " candidate expects at least %d arguments, %d provided",
5655 wanted, have);
5656 else
5657 inform_n (input_location, wanted,
5658 " candidate expects %d argument, %d provided",
5659 " candidate expects %d arguments, %d provided",
5660 wanted, have);
5662 return 1;
5665 static int
5666 unify_too_many_arguments (bool explain_p, int have, int wanted)
5668 return unify_arity (explain_p, have, wanted);
5671 static int
5672 unify_too_few_arguments (bool explain_p, int have, int wanted,
5673 bool least_p = false)
5675 return unify_arity (explain_p, have, wanted, least_p);
5678 static int
5679 unify_arg_conversion (bool explain_p, tree to_type,
5680 tree from_type, tree arg)
5682 if (explain_p)
5683 inform (EXPR_LOC_OR_LOC (arg, input_location),
5684 " cannot convert %qE (type %qT) to type %qT",
5685 arg, from_type, to_type);
5686 return 1;
5689 static int
5690 unify_no_common_base (bool explain_p, enum template_base_result r,
5691 tree parm, tree arg)
5693 if (explain_p)
5694 switch (r)
5696 case tbr_ambiguous_baseclass:
5697 inform (input_location, " %qT is an ambiguous base class of %qT",
5698 parm, arg);
5699 break;
5700 default:
5701 inform (input_location, " %qT is not derived from %qT", arg, parm);
5702 break;
5704 return 1;
5707 static int
5708 unify_inconsistent_template_template_parameters (bool explain_p)
5710 if (explain_p)
5711 inform (input_location,
5712 " template parameters of a template template argument are "
5713 "inconsistent with other deduced template arguments");
5714 return 1;
5717 static int
5718 unify_template_deduction_failure (bool explain_p, tree parm, tree arg)
5720 if (explain_p)
5721 inform (input_location,
5722 " can't deduce a template for %qT from non-template type %qT",
5723 parm, arg);
5724 return 1;
5727 static int
5728 unify_template_argument_mismatch (bool explain_p, tree parm, tree arg)
5730 if (explain_p)
5731 inform (input_location,
5732 " template argument %qE does not match %qD", arg, parm);
5733 return 1;
5736 static int
5737 unify_overload_resolution_failure (bool explain_p, tree arg)
5739 if (explain_p)
5740 inform (input_location,
5741 " could not resolve address from overloaded function %qE",
5742 arg);
5743 return 1;
5746 /* Attempt to convert the non-type template parameter EXPR to the
5747 indicated TYPE. If the conversion is successful, return the
5748 converted value. If the conversion is unsuccessful, return
5749 NULL_TREE if we issued an error message, or error_mark_node if we
5750 did not. We issue error messages for out-and-out bad template
5751 parameters, but not simply because the conversion failed, since we
5752 might be just trying to do argument deduction. Both TYPE and EXPR
5753 must be non-dependent.
5755 The conversion follows the special rules described in
5756 [temp.arg.nontype], and it is much more strict than an implicit
5757 conversion.
5759 This function is called twice for each template argument (see
5760 lookup_template_class for a more accurate description of this
5761 problem). This means that we need to handle expressions which
5762 are not valid in a C++ source, but can be created from the
5763 first call (for instance, casts to perform conversions). These
5764 hacks can go away after we fix the double coercion problem. */
5766 static tree
5767 convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
5769 tree expr_type;
5771 /* Detect immediately string literals as invalid non-type argument.
5772 This special-case is not needed for correctness (we would easily
5773 catch this later), but only to provide better diagnostic for this
5774 common user mistake. As suggested by DR 100, we do not mention
5775 linkage issues in the diagnostic as this is not the point. */
5776 /* FIXME we're making this OK. */
5777 if (TREE_CODE (expr) == STRING_CST)
5779 if (complain & tf_error)
5780 error ("%qE is not a valid template argument for type %qT "
5781 "because string literals can never be used in this context",
5782 expr, type);
5783 return NULL_TREE;
5786 /* Add the ADDR_EXPR now for the benefit of
5787 value_dependent_expression_p. */
5788 if (TYPE_PTROBV_P (type)
5789 && TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE)
5791 expr = decay_conversion (expr, complain);
5792 if (expr == error_mark_node)
5793 return error_mark_node;
5796 /* If we are in a template, EXPR may be non-dependent, but still
5797 have a syntactic, rather than semantic, form. For example, EXPR
5798 might be a SCOPE_REF, rather than the VAR_DECL to which the
5799 SCOPE_REF refers. Preserving the qualifying scope is necessary
5800 so that access checking can be performed when the template is
5801 instantiated -- but here we need the resolved form so that we can
5802 convert the argument. */
5803 bool non_dep = false;
5804 if (TYPE_REF_OBJ_P (type)
5805 && has_value_dependent_address (expr))
5806 /* If we want the address and it's value-dependent, don't fold. */;
5807 else if (!type_unknown_p (expr)
5808 && processing_template_decl
5809 && !instantiation_dependent_expression_p (expr)
5810 && potential_constant_expression (expr))
5811 non_dep = true;
5812 if (error_operand_p (expr))
5813 return error_mark_node;
5814 expr_type = TREE_TYPE (expr);
5815 if (TREE_CODE (type) == REFERENCE_TYPE)
5816 expr = mark_lvalue_use (expr);
5817 else
5818 expr = mark_rvalue_use (expr);
5820 /* If the argument is non-dependent, perform any conversions in
5821 non-dependent context as well. */
5822 processing_template_decl_sentinel s (non_dep);
5823 if (non_dep)
5824 expr = instantiate_non_dependent_expr_internal (expr, complain);
5826 /* 14.3.2/5: The null pointer{,-to-member} conversion is applied
5827 to a non-type argument of "nullptr". */
5828 if (expr == nullptr_node && TYPE_PTR_OR_PTRMEM_P (type))
5829 expr = convert (type, expr);
5831 /* In C++11, integral or enumeration non-type template arguments can be
5832 arbitrary constant expressions. Pointer and pointer to
5833 member arguments can be general constant expressions that evaluate
5834 to a null value, but otherwise still need to be of a specific form. */
5835 if (cxx_dialect >= cxx11)
5837 if (TREE_CODE (expr) == PTRMEM_CST)
5838 /* A PTRMEM_CST is already constant, and a valid template
5839 argument for a parameter of pointer to member type, we just want
5840 to leave it in that form rather than lower it to a
5841 CONSTRUCTOR. */;
5842 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5843 expr = maybe_constant_value (expr);
5844 else if (TYPE_PTR_OR_PTRMEM_P (type))
5846 tree folded = maybe_constant_value (expr);
5847 if (TYPE_PTR_P (type) ? integer_zerop (folded)
5848 : null_member_pointer_value_p (folded))
5849 expr = folded;
5853 /* HACK: Due to double coercion, we can get a
5854 NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
5855 which is the tree that we built on the first call (see
5856 below when coercing to reference to object or to reference to
5857 function). We just strip everything and get to the arg.
5858 See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
5859 for examples. */
5860 if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
5862 tree probe_type, probe = expr;
5863 if (REFERENCE_REF_P (probe))
5864 probe = TREE_OPERAND (probe, 0);
5865 probe_type = TREE_TYPE (probe);
5866 if (TREE_CODE (probe) == NOP_EXPR)
5868 /* ??? Maybe we could use convert_from_reference here, but we
5869 would need to relax its constraints because the NOP_EXPR
5870 could actually change the type to something more cv-qualified,
5871 and this is not folded by convert_from_reference. */
5872 tree addr = TREE_OPERAND (probe, 0);
5873 if (TREE_CODE (probe_type) == REFERENCE_TYPE
5874 && TREE_CODE (addr) == ADDR_EXPR
5875 && TYPE_PTR_P (TREE_TYPE (addr))
5876 && (same_type_ignoring_top_level_qualifiers_p
5877 (TREE_TYPE (probe_type),
5878 TREE_TYPE (TREE_TYPE (addr)))))
5880 expr = TREE_OPERAND (addr, 0);
5881 expr_type = TREE_TYPE (probe_type);
5886 /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
5887 parameter is a pointer to object, through decay and
5888 qualification conversion. Let's strip everything. */
5889 else if (TREE_CODE (expr) == NOP_EXPR && TYPE_PTROBV_P (type))
5891 tree probe = expr;
5892 STRIP_NOPS (probe);
5893 if (TREE_CODE (probe) == ADDR_EXPR
5894 && TYPE_PTR_P (TREE_TYPE (probe)))
5896 /* Skip the ADDR_EXPR only if it is part of the decay for
5897 an array. Otherwise, it is part of the original argument
5898 in the source code. */
5899 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (probe, 0))) == ARRAY_TYPE)
5900 probe = TREE_OPERAND (probe, 0);
5901 expr = probe;
5902 expr_type = TREE_TYPE (expr);
5906 /* [temp.arg.nontype]/5, bullet 1
5908 For a non-type template-parameter of integral or enumeration type,
5909 integral promotions (_conv.prom_) and integral conversions
5910 (_conv.integral_) are applied. */
5911 if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5913 tree t = build_integral_nontype_arg_conv (type, expr, complain);
5914 t = maybe_constant_value (t);
5915 if (t != error_mark_node)
5916 expr = t;
5918 if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (expr)))
5919 return error_mark_node;
5921 /* Notice that there are constant expressions like '4 % 0' which
5922 do not fold into integer constants. */
5923 if (TREE_CODE (expr) != INTEGER_CST)
5925 if (complain & tf_error)
5927 int errs = errorcount, warns = warningcount + werrorcount;
5928 if (processing_template_decl
5929 && !require_potential_constant_expression (expr))
5930 return NULL_TREE;
5931 expr = cxx_constant_value (expr);
5932 if (errorcount > errs || warningcount + werrorcount > warns)
5933 inform (EXPR_LOC_OR_LOC (expr, input_location),
5934 "in template argument for type %qT ", type);
5935 if (expr == error_mark_node)
5936 return NULL_TREE;
5937 /* else cxx_constant_value complained but gave us
5938 a real constant, so go ahead. */
5939 gcc_assert (TREE_CODE (expr) == INTEGER_CST);
5941 else
5942 return NULL_TREE;
5945 /* Avoid typedef problems. */
5946 if (TREE_TYPE (expr) != type)
5947 expr = fold_convert (type, expr);
5949 /* [temp.arg.nontype]/5, bullet 2
5951 For a non-type template-parameter of type pointer to object,
5952 qualification conversions (_conv.qual_) and the array-to-pointer
5953 conversion (_conv.array_) are applied. */
5954 else if (TYPE_PTROBV_P (type))
5956 /* [temp.arg.nontype]/1 (TC1 version, DR 49):
5958 A template-argument for a non-type, non-template template-parameter
5959 shall be one of: [...]
5961 -- the name of a non-type template-parameter;
5962 -- the address of an object or function with external linkage, [...]
5963 expressed as "& id-expression" where the & is optional if the name
5964 refers to a function or array, or if the corresponding
5965 template-parameter is a reference.
5967 Here, we do not care about functions, as they are invalid anyway
5968 for a parameter of type pointer-to-object. */
5970 if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
5971 /* Non-type template parameters are OK. */
5973 else if (cxx_dialect >= cxx11 && integer_zerop (expr))
5974 /* Null pointer values are OK in C++11. */;
5975 else if (TREE_CODE (expr) != ADDR_EXPR
5976 && TREE_CODE (expr_type) != ARRAY_TYPE)
5978 if (VAR_P (expr))
5980 if (complain & tf_error)
5981 error ("%qD is not a valid template argument "
5982 "because %qD is a variable, not the address of "
5983 "a variable", expr, expr);
5984 return NULL_TREE;
5986 if (POINTER_TYPE_P (expr_type))
5988 if (complain & tf_error)
5989 error ("%qE is not a valid template argument for %qT "
5990 "because it is not the address of a variable",
5991 expr, type);
5992 return NULL_TREE;
5994 /* Other values, like integer constants, might be valid
5995 non-type arguments of some other type. */
5996 return error_mark_node;
5998 else
6000 tree decl;
6002 decl = ((TREE_CODE (expr) == ADDR_EXPR)
6003 ? TREE_OPERAND (expr, 0) : expr);
6004 if (!VAR_P (decl))
6006 if (complain & tf_error)
6007 error ("%qE is not a valid template argument of type %qT "
6008 "because %qE is not a variable", expr, type, decl);
6009 return NULL_TREE;
6011 else if (cxx_dialect < cxx11 && !DECL_EXTERNAL_LINKAGE_P (decl))
6013 if (complain & tf_error)
6014 error ("%qE is not a valid template argument of type %qT "
6015 "because %qD does not have external linkage",
6016 expr, type, decl);
6017 return NULL_TREE;
6019 else if (cxx_dialect >= cxx11 && decl_linkage (decl) == lk_none)
6021 if (complain & tf_error)
6022 error ("%qE is not a valid template argument of type %qT "
6023 "because %qD has no linkage", expr, type, decl);
6024 return NULL_TREE;
6028 expr = decay_conversion (expr, complain);
6029 if (expr == error_mark_node)
6030 return error_mark_node;
6032 expr = perform_qualification_conversions (type, expr);
6033 if (expr == error_mark_node)
6034 return error_mark_node;
6036 /* [temp.arg.nontype]/5, bullet 3
6038 For a non-type template-parameter of type reference to object, no
6039 conversions apply. The type referred to by the reference may be more
6040 cv-qualified than the (otherwise identical) type of the
6041 template-argument. The template-parameter is bound directly to the
6042 template-argument, which must be an lvalue. */
6043 else if (TYPE_REF_OBJ_P (type))
6045 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
6046 expr_type))
6047 return error_mark_node;
6049 if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
6051 if (complain & tf_error)
6052 error ("%qE is not a valid template argument for type %qT "
6053 "because of conflicts in cv-qualification", expr, type);
6054 return NULL_TREE;
6057 if (!real_lvalue_p (expr))
6059 if (complain & tf_error)
6060 error ("%qE is not a valid template argument for type %qT "
6061 "because it is not an lvalue", expr, type);
6062 return NULL_TREE;
6065 /* [temp.arg.nontype]/1
6067 A template-argument for a non-type, non-template template-parameter
6068 shall be one of: [...]
6070 -- the address of an object or function with external linkage. */
6071 if (INDIRECT_REF_P (expr)
6072 && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
6074 expr = TREE_OPERAND (expr, 0);
6075 if (DECL_P (expr))
6077 if (complain & tf_error)
6078 error ("%q#D is not a valid template argument for type %qT "
6079 "because a reference variable does not have a constant "
6080 "address", expr, type);
6081 return NULL_TREE;
6085 if (!DECL_P (expr))
6087 if (complain & tf_error)
6088 error ("%qE is not a valid template argument for type %qT "
6089 "because it is not an object with external linkage",
6090 expr, type);
6091 return NULL_TREE;
6094 if (!DECL_EXTERNAL_LINKAGE_P (expr))
6096 if (complain & tf_error)
6097 error ("%qE is not a valid template argument for type %qT "
6098 "because object %qD has not external linkage",
6099 expr, type, expr);
6100 return NULL_TREE;
6103 expr = build_nop (type, build_address (expr));
6105 /* [temp.arg.nontype]/5, bullet 4
6107 For a non-type template-parameter of type pointer to function, only
6108 the function-to-pointer conversion (_conv.func_) is applied. If the
6109 template-argument represents a set of overloaded functions (or a
6110 pointer to such), the matching function is selected from the set
6111 (_over.over_). */
6112 else if (TYPE_PTRFN_P (type))
6114 /* If the argument is a template-id, we might not have enough
6115 context information to decay the pointer. */
6116 if (!type_unknown_p (expr_type))
6118 expr = decay_conversion (expr, complain);
6119 if (expr == error_mark_node)
6120 return error_mark_node;
6123 if (cxx_dialect >= cxx11 && integer_zerop (expr))
6124 /* Null pointer values are OK in C++11. */
6125 return perform_qualification_conversions (type, expr);
6127 expr = convert_nontype_argument_function (type, expr, complain);
6128 if (!expr || expr == error_mark_node)
6129 return expr;
6131 /* [temp.arg.nontype]/5, bullet 5
6133 For a non-type template-parameter of type reference to function, no
6134 conversions apply. If the template-argument represents a set of
6135 overloaded functions, the matching function is selected from the set
6136 (_over.over_). */
6137 else if (TYPE_REFFN_P (type))
6139 if (TREE_CODE (expr) == ADDR_EXPR)
6141 if (complain & tf_error)
6143 error ("%qE is not a valid template argument for type %qT "
6144 "because it is a pointer", expr, type);
6145 inform (input_location, "try using %qE instead",
6146 TREE_OPERAND (expr, 0));
6148 return NULL_TREE;
6151 expr = convert_nontype_argument_function (type, expr, complain);
6152 if (!expr || expr == error_mark_node)
6153 return expr;
6155 expr = build_nop (type, build_address (expr));
6157 /* [temp.arg.nontype]/5, bullet 6
6159 For a non-type template-parameter of type pointer to member function,
6160 no conversions apply. If the template-argument represents a set of
6161 overloaded member functions, the matching member function is selected
6162 from the set (_over.over_). */
6163 else if (TYPE_PTRMEMFUNC_P (type))
6165 expr = instantiate_type (type, expr, tf_none);
6166 if (expr == error_mark_node)
6167 return error_mark_node;
6169 /* [temp.arg.nontype] bullet 1 says the pointer to member
6170 expression must be a pointer-to-member constant. */
6171 if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6172 return error_mark_node;
6174 /* There is no way to disable standard conversions in
6175 resolve_address_of_overloaded_function (called by
6176 instantiate_type). It is possible that the call succeeded by
6177 converting &B::I to &D::I (where B is a base of D), so we need
6178 to reject this conversion here.
6180 Actually, even if there was a way to disable standard conversions,
6181 it would still be better to reject them here so that we can
6182 provide a superior diagnostic. */
6183 if (!same_type_p (TREE_TYPE (expr), type))
6185 if (complain & tf_error)
6187 error ("%qE is not a valid template argument for type %qT "
6188 "because it is of type %qT", expr, type,
6189 TREE_TYPE (expr));
6190 /* If we are just one standard conversion off, explain. */
6191 if (can_convert_standard (type, TREE_TYPE (expr), complain))
6192 inform (input_location,
6193 "standard conversions are not allowed in this context");
6195 return NULL_TREE;
6198 /* [temp.arg.nontype]/5, bullet 7
6200 For a non-type template-parameter of type pointer to data member,
6201 qualification conversions (_conv.qual_) are applied. */
6202 else if (TYPE_PTRDATAMEM_P (type))
6204 /* [temp.arg.nontype] bullet 1 says the pointer to member
6205 expression must be a pointer-to-member constant. */
6206 if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6207 return error_mark_node;
6209 expr = perform_qualification_conversions (type, expr);
6210 if (expr == error_mark_node)
6211 return expr;
6213 else if (NULLPTR_TYPE_P (type))
6215 if (expr != nullptr_node)
6217 if (complain & tf_error)
6218 error ("%qE is not a valid template argument for type %qT "
6219 "because it is of type %qT", expr, type, TREE_TYPE (expr));
6220 return NULL_TREE;
6222 return expr;
6224 /* A template non-type parameter must be one of the above. */
6225 else
6226 gcc_unreachable ();
6228 /* Sanity check: did we actually convert the argument to the
6229 right type? */
6230 gcc_assert (same_type_ignoring_top_level_qualifiers_p
6231 (type, TREE_TYPE (expr)));
6232 return convert_from_reference (expr);
6235 /* Subroutine of coerce_template_template_parms, which returns 1 if
6236 PARM_PARM and ARG_PARM match using the rule for the template
6237 parameters of template template parameters. Both PARM and ARG are
6238 template parameters; the rest of the arguments are the same as for
6239 coerce_template_template_parms.
6241 static int
6242 coerce_template_template_parm (tree parm,
6243 tree arg,
6244 tsubst_flags_t complain,
6245 tree in_decl,
6246 tree outer_args)
6248 if (arg == NULL_TREE || error_operand_p (arg)
6249 || parm == NULL_TREE || error_operand_p (parm))
6250 return 0;
6252 if (TREE_CODE (arg) != TREE_CODE (parm))
6253 return 0;
6255 switch (TREE_CODE (parm))
6257 case TEMPLATE_DECL:
6258 /* We encounter instantiations of templates like
6259 template <template <template <class> class> class TT>
6260 class C; */
6262 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6263 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6265 if (!coerce_template_template_parms
6266 (parmparm, argparm, complain, in_decl, outer_args))
6267 return 0;
6269 /* Fall through. */
6271 case TYPE_DECL:
6272 if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
6273 && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6274 /* Argument is a parameter pack but parameter is not. */
6275 return 0;
6276 break;
6278 case PARM_DECL:
6279 /* The tsubst call is used to handle cases such as
6281 template <int> class C {};
6282 template <class T, template <T> class TT> class D {};
6283 D<int, C> d;
6285 i.e. the parameter list of TT depends on earlier parameters. */
6286 if (!uses_template_parms (TREE_TYPE (arg))
6287 && !same_type_p
6288 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
6289 TREE_TYPE (arg)))
6290 return 0;
6292 if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
6293 && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6294 /* Argument is a parameter pack but parameter is not. */
6295 return 0;
6297 break;
6299 default:
6300 gcc_unreachable ();
6303 return 1;
6307 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
6308 template template parameters. Both PARM_PARMS and ARG_PARMS are
6309 vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
6310 or PARM_DECL.
6312 Consider the example:
6313 template <class T> class A;
6314 template<template <class U> class TT> class B;
6316 For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
6317 the parameters to A, and OUTER_ARGS contains A. */
6319 static int
6320 coerce_template_template_parms (tree parm_parms,
6321 tree arg_parms,
6322 tsubst_flags_t complain,
6323 tree in_decl,
6324 tree outer_args)
6326 int nparms, nargs, i;
6327 tree parm, arg;
6328 int variadic_p = 0;
6330 gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
6331 gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
6333 nparms = TREE_VEC_LENGTH (parm_parms);
6334 nargs = TREE_VEC_LENGTH (arg_parms);
6336 /* Determine whether we have a parameter pack at the end of the
6337 template template parameter's template parameter list. */
6338 if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
6340 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
6342 if (error_operand_p (parm))
6343 return 0;
6345 switch (TREE_CODE (parm))
6347 case TEMPLATE_DECL:
6348 case TYPE_DECL:
6349 if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6350 variadic_p = 1;
6351 break;
6353 case PARM_DECL:
6354 if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6355 variadic_p = 1;
6356 break;
6358 default:
6359 gcc_unreachable ();
6363 if (nargs != nparms
6364 && !(variadic_p && nargs >= nparms - 1))
6365 return 0;
6367 /* Check all of the template parameters except the parameter pack at
6368 the end (if any). */
6369 for (i = 0; i < nparms - variadic_p; ++i)
6371 if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
6372 || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6373 continue;
6375 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6376 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6378 if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6379 outer_args))
6380 return 0;
6384 if (variadic_p)
6386 /* Check each of the template parameters in the template
6387 argument against the template parameter pack at the end of
6388 the template template parameter. */
6389 if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
6390 return 0;
6392 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6394 for (; i < nargs; ++i)
6396 if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6397 continue;
6399 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6401 if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6402 outer_args))
6403 return 0;
6407 return 1;
6410 /* Verifies that the deduced template arguments (in TARGS) for the
6411 template template parameters (in TPARMS) represent valid bindings,
6412 by comparing the template parameter list of each template argument
6413 to the template parameter list of its corresponding template
6414 template parameter, in accordance with DR150. This
6415 routine can only be called after all template arguments have been
6416 deduced. It will return TRUE if all of the template template
6417 parameter bindings are okay, FALSE otherwise. */
6418 bool
6419 template_template_parm_bindings_ok_p (tree tparms, tree targs)
6421 int i, ntparms = TREE_VEC_LENGTH (tparms);
6422 bool ret = true;
6424 /* We're dealing with template parms in this process. */
6425 ++processing_template_decl;
6427 targs = INNERMOST_TEMPLATE_ARGS (targs);
6429 for (i = 0; i < ntparms; ++i)
6431 tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
6432 tree targ = TREE_VEC_ELT (targs, i);
6434 if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
6436 tree packed_args = NULL_TREE;
6437 int idx, len = 1;
6439 if (ARGUMENT_PACK_P (targ))
6441 /* Look inside the argument pack. */
6442 packed_args = ARGUMENT_PACK_ARGS (targ);
6443 len = TREE_VEC_LENGTH (packed_args);
6446 for (idx = 0; idx < len; ++idx)
6448 tree targ_parms = NULL_TREE;
6450 if (packed_args)
6451 /* Extract the next argument from the argument
6452 pack. */
6453 targ = TREE_VEC_ELT (packed_args, idx);
6455 if (PACK_EXPANSION_P (targ))
6456 /* Look at the pattern of the pack expansion. */
6457 targ = PACK_EXPANSION_PATTERN (targ);
6459 /* Extract the template parameters from the template
6460 argument. */
6461 if (TREE_CODE (targ) == TEMPLATE_DECL)
6462 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
6463 else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
6464 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
6466 /* Verify that we can coerce the template template
6467 parameters from the template argument to the template
6468 parameter. This requires an exact match. */
6469 if (targ_parms
6470 && !coerce_template_template_parms
6471 (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
6472 targ_parms,
6473 tf_none,
6474 tparm,
6475 targs))
6477 ret = false;
6478 goto out;
6484 out:
6486 --processing_template_decl;
6487 return ret;
6490 /* Since type attributes aren't mangled, we need to strip them from
6491 template type arguments. */
6493 static tree
6494 canonicalize_type_argument (tree arg, tsubst_flags_t complain)
6496 if (!arg || arg == error_mark_node || arg == TYPE_CANONICAL (arg))
6497 return arg;
6498 bool removed_attributes = false;
6499 tree canon = strip_typedefs (arg, &removed_attributes);
6500 if (removed_attributes
6501 && (complain & tf_warning))
6502 warning (0, "ignoring attributes on template argument %qT", arg);
6503 return canon;
6506 /* Convert the indicated template ARG as necessary to match the
6507 indicated template PARM. Returns the converted ARG, or
6508 error_mark_node if the conversion was unsuccessful. Error and
6509 warning messages are issued under control of COMPLAIN. This
6510 conversion is for the Ith parameter in the parameter list. ARGS is
6511 the full set of template arguments deduced so far. */
6513 static tree
6514 convert_template_argument (tree parm,
6515 tree arg,
6516 tree args,
6517 tsubst_flags_t complain,
6518 int i,
6519 tree in_decl)
6521 tree orig_arg;
6522 tree val;
6523 int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
6525 if (parm == error_mark_node)
6526 return error_mark_node;
6528 if (TREE_CODE (arg) == TREE_LIST
6529 && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
6531 /* The template argument was the name of some
6532 member function. That's usually
6533 invalid, but static members are OK. In any
6534 case, grab the underlying fields/functions
6535 and issue an error later if required. */
6536 orig_arg = TREE_VALUE (arg);
6537 TREE_TYPE (arg) = unknown_type_node;
6540 orig_arg = arg;
6542 requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
6543 requires_type = (TREE_CODE (parm) == TYPE_DECL
6544 || requires_tmpl_type);
6546 /* When determining whether an argument pack expansion is a template,
6547 look at the pattern. */
6548 if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
6549 arg = PACK_EXPANSION_PATTERN (arg);
6551 /* Deal with an injected-class-name used as a template template arg. */
6552 if (requires_tmpl_type && CLASS_TYPE_P (arg))
6554 tree t = maybe_get_template_decl_from_type_decl (TYPE_NAME (arg));
6555 if (TREE_CODE (t) == TEMPLATE_DECL)
6557 if (cxx_dialect >= cxx11)
6558 /* OK under DR 1004. */;
6559 else if (complain & tf_warning_or_error)
6560 pedwarn (input_location, OPT_Wpedantic, "injected-class-name %qD"
6561 " used as template template argument", TYPE_NAME (arg));
6562 else if (flag_pedantic_errors)
6563 t = arg;
6565 arg = t;
6569 is_tmpl_type =
6570 ((TREE_CODE (arg) == TEMPLATE_DECL
6571 && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
6572 || (requires_tmpl_type && TREE_CODE (arg) == TYPE_ARGUMENT_PACK)
6573 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6574 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
6576 if (is_tmpl_type
6577 && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6578 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
6579 arg = TYPE_STUB_DECL (arg);
6581 is_type = TYPE_P (arg) || is_tmpl_type;
6583 if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
6584 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
6586 if (TREE_CODE (TREE_OPERAND (arg, 1)) == BIT_NOT_EXPR)
6588 if (complain & tf_error)
6589 error ("invalid use of destructor %qE as a type", orig_arg);
6590 return error_mark_node;
6593 permerror (input_location,
6594 "to refer to a type member of a template parameter, "
6595 "use %<typename %E%>", orig_arg);
6597 orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
6598 TREE_OPERAND (arg, 1),
6599 typename_type,
6600 complain);
6601 arg = orig_arg;
6602 is_type = 1;
6604 if (is_type != requires_type)
6606 if (in_decl)
6608 if (complain & tf_error)
6610 error ("type/value mismatch at argument %d in template "
6611 "parameter list for %qD",
6612 i + 1, in_decl);
6613 if (is_type)
6614 inform (input_location,
6615 " expected a constant of type %qT, got %qT",
6616 TREE_TYPE (parm),
6617 (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
6618 else if (requires_tmpl_type)
6619 inform (input_location,
6620 " expected a class template, got %qE", orig_arg);
6621 else
6622 inform (input_location,
6623 " expected a type, got %qE", orig_arg);
6626 return error_mark_node;
6628 if (is_tmpl_type ^ requires_tmpl_type)
6630 if (in_decl && (complain & tf_error))
6632 error ("type/value mismatch at argument %d in template "
6633 "parameter list for %qD",
6634 i + 1, in_decl);
6635 if (is_tmpl_type)
6636 inform (input_location,
6637 " expected a type, got %qT", DECL_NAME (arg));
6638 else
6639 inform (input_location,
6640 " expected a class template, got %qT", orig_arg);
6642 return error_mark_node;
6645 if (is_type)
6647 if (requires_tmpl_type)
6649 if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
6650 val = orig_arg;
6651 else if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
6652 /* The number of argument required is not known yet.
6653 Just accept it for now. */
6654 val = TREE_TYPE (arg);
6655 else
6657 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6658 tree argparm;
6660 /* Strip alias templates that are equivalent to another
6661 template. */
6662 arg = get_underlying_template (arg);
6663 argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6665 if (coerce_template_template_parms (parmparm, argparm,
6666 complain, in_decl,
6667 args))
6669 val = arg;
6671 /* TEMPLATE_TEMPLATE_PARM node is preferred over
6672 TEMPLATE_DECL. */
6673 if (val != error_mark_node)
6675 if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
6676 val = TREE_TYPE (val);
6677 if (TREE_CODE (orig_arg) == TYPE_PACK_EXPANSION)
6678 val = make_pack_expansion (val);
6681 else
6683 if (in_decl && (complain & tf_error))
6685 error ("type/value mismatch at argument %d in "
6686 "template parameter list for %qD",
6687 i + 1, in_decl);
6688 inform (input_location,
6689 " expected a template of type %qD, got %qT",
6690 parm, orig_arg);
6693 val = error_mark_node;
6697 else
6698 val = orig_arg;
6699 /* We only form one instance of each template specialization.
6700 Therefore, if we use a non-canonical variant (i.e., a
6701 typedef), any future messages referring to the type will use
6702 the typedef, which is confusing if those future uses do not
6703 themselves also use the typedef. */
6704 if (TYPE_P (val))
6705 val = canonicalize_type_argument (val, complain);
6707 else
6709 tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
6711 if (invalid_nontype_parm_type_p (t, complain))
6712 return error_mark_node;
6714 if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
6716 if (same_type_p (t, TREE_TYPE (orig_arg)))
6717 val = orig_arg;
6718 else
6720 /* Not sure if this is reachable, but it doesn't hurt
6721 to be robust. */
6722 error ("type mismatch in nontype parameter pack");
6723 val = error_mark_node;
6726 else if (!dependent_template_arg_p (orig_arg)
6727 && !uses_template_parms (t))
6728 /* We used to call digest_init here. However, digest_init
6729 will report errors, which we don't want when complain
6730 is zero. More importantly, digest_init will try too
6731 hard to convert things: for example, `0' should not be
6732 converted to pointer type at this point according to
6733 the standard. Accepting this is not merely an
6734 extension, since deciding whether or not these
6735 conversions can occur is part of determining which
6736 function template to call, or whether a given explicit
6737 argument specification is valid. */
6738 val = convert_nontype_argument (t, orig_arg, complain);
6739 else
6741 bool removed_attr = false;
6742 val = strip_typedefs_expr (orig_arg, &removed_attr);
6745 if (val == NULL_TREE)
6746 val = error_mark_node;
6747 else if (val == error_mark_node && (complain & tf_error))
6748 error ("could not convert template argument %qE to %qT", orig_arg, t);
6750 if (TREE_CODE (val) == SCOPE_REF)
6752 /* Strip typedefs from the SCOPE_REF. */
6753 tree type = canonicalize_type_argument (TREE_TYPE (val), complain);
6754 tree scope = canonicalize_type_argument (TREE_OPERAND (val, 0),
6755 complain);
6756 val = build_qualified_name (type, scope, TREE_OPERAND (val, 1),
6757 QUALIFIED_NAME_IS_TEMPLATE (val));
6761 return val;
6764 /* Coerces the remaining template arguments in INNER_ARGS (from
6765 ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
6766 Returns the coerced argument pack. PARM_IDX is the position of this
6767 parameter in the template parameter list. ARGS is the original
6768 template argument list. */
6769 static tree
6770 coerce_template_parameter_pack (tree parms,
6771 int parm_idx,
6772 tree args,
6773 tree inner_args,
6774 int arg_idx,
6775 tree new_args,
6776 int* lost,
6777 tree in_decl,
6778 tsubst_flags_t complain)
6780 tree parm = TREE_VEC_ELT (parms, parm_idx);
6781 int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6782 tree packed_args;
6783 tree argument_pack;
6784 tree packed_parms = NULL_TREE;
6786 if (arg_idx > nargs)
6787 arg_idx = nargs;
6789 if (tree packs = fixed_parameter_pack_p (TREE_VALUE (parm)))
6791 /* When the template parameter is a non-type template parameter pack
6792 or template template parameter pack whose type or template
6793 parameters use parameter packs, we know exactly how many arguments
6794 we are looking for. Build a vector of the instantiated decls for
6795 these template parameters in PACKED_PARMS. */
6796 /* We can't use make_pack_expansion here because it would interpret a
6797 _DECL as a use rather than a declaration. */
6798 tree decl = TREE_VALUE (parm);
6799 tree exp = cxx_make_type (TYPE_PACK_EXPANSION);
6800 SET_PACK_EXPANSION_PATTERN (exp, decl);
6801 PACK_EXPANSION_PARAMETER_PACKS (exp) = packs;
6802 SET_TYPE_STRUCTURAL_EQUALITY (exp);
6804 TREE_VEC_LENGTH (args)--;
6805 packed_parms = tsubst_pack_expansion (exp, args, complain, decl);
6806 TREE_VEC_LENGTH (args)++;
6808 if (packed_parms == error_mark_node)
6809 return error_mark_node;
6811 /* If we're doing a partial instantiation of a member template,
6812 verify that all of the types used for the non-type
6813 template parameter pack are, in fact, valid for non-type
6814 template parameters. */
6815 if (arg_idx < nargs
6816 && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
6818 int j, len = TREE_VEC_LENGTH (packed_parms);
6819 for (j = 0; j < len; ++j)
6821 tree t = TREE_TYPE (TREE_VEC_ELT (packed_parms, j));
6822 if (invalid_nontype_parm_type_p (t, complain))
6823 return error_mark_node;
6825 /* We don't know how many args we have yet, just
6826 use the unconverted ones for now. */
6827 return NULL_TREE;
6830 packed_args = make_tree_vec (TREE_VEC_LENGTH (packed_parms));
6832 else
6833 packed_args = make_tree_vec (nargs - arg_idx);
6835 /* Convert the remaining arguments, which will be a part of the
6836 parameter pack "parm". */
6837 for (; arg_idx < nargs; ++arg_idx)
6839 tree arg = TREE_VEC_ELT (inner_args, arg_idx);
6840 tree actual_parm = TREE_VALUE (parm);
6841 int pack_idx = arg_idx - parm_idx;
6843 if (packed_parms)
6845 /* Once we've packed as many args as we have types, stop. */
6846 if (pack_idx >= TREE_VEC_LENGTH (packed_parms))
6847 break;
6848 else if (PACK_EXPANSION_P (arg))
6849 /* We don't know how many args we have yet, just
6850 use the unconverted ones for now. */
6851 return NULL_TREE;
6852 else
6853 actual_parm = TREE_VEC_ELT (packed_parms, pack_idx);
6856 if (arg == error_mark_node)
6858 if (complain & tf_error)
6859 error ("template argument %d is invalid", arg_idx + 1);
6861 else
6862 arg = convert_template_argument (actual_parm,
6863 arg, new_args, complain, parm_idx,
6864 in_decl);
6865 if (arg == error_mark_node)
6866 (*lost)++;
6867 TREE_VEC_ELT (packed_args, pack_idx) = arg;
6870 if (arg_idx - parm_idx < TREE_VEC_LENGTH (packed_args)
6871 && TREE_VEC_LENGTH (packed_args) > 0)
6873 if (complain & tf_error)
6874 error ("wrong number of template arguments (%d, should be %d)",
6875 arg_idx - parm_idx, TREE_VEC_LENGTH (packed_args));
6876 return error_mark_node;
6879 if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
6880 || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
6881 argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
6882 else
6884 argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
6885 TREE_TYPE (argument_pack)
6886 = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
6887 TREE_CONSTANT (argument_pack) = 1;
6890 SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
6891 #ifdef ENABLE_CHECKING
6892 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
6893 TREE_VEC_LENGTH (packed_args));
6894 #endif
6895 return argument_pack;
6898 /* Returns the number of pack expansions in the template argument vector
6899 ARGS. */
6901 static int
6902 pack_expansion_args_count (tree args)
6904 int i;
6905 int count = 0;
6906 if (args)
6907 for (i = 0; i < TREE_VEC_LENGTH (args); ++i)
6909 tree elt = TREE_VEC_ELT (args, i);
6910 if (elt && PACK_EXPANSION_P (elt))
6911 ++count;
6913 return count;
6916 /* Convert all template arguments to their appropriate types, and
6917 return a vector containing the innermost resulting template
6918 arguments. If any error occurs, return error_mark_node. Error and
6919 warning messages are issued under control of COMPLAIN.
6921 If REQUIRE_ALL_ARGS is false, argument deduction will be performed
6922 for arguments not specified in ARGS. Otherwise, if
6923 USE_DEFAULT_ARGS is true, default arguments will be used to fill in
6924 unspecified arguments. If REQUIRE_ALL_ARGS is true, but
6925 USE_DEFAULT_ARGS is false, then all arguments must be specified in
6926 ARGS. */
6928 static tree
6929 coerce_template_parms (tree parms,
6930 tree args,
6931 tree in_decl,
6932 tsubst_flags_t complain,
6933 bool require_all_args,
6934 bool use_default_args)
6936 int nparms, nargs, parm_idx, arg_idx, lost = 0;
6937 tree orig_inner_args;
6938 tree inner_args;
6939 tree new_args;
6940 tree new_inner_args;
6941 int saved_unevaluated_operand;
6942 int saved_inhibit_evaluation_warnings;
6944 /* When used as a boolean value, indicates whether this is a
6945 variadic template parameter list. Since it's an int, we can also
6946 subtract it from nparms to get the number of non-variadic
6947 parameters. */
6948 int variadic_p = 0;
6949 int variadic_args_p = 0;
6950 int post_variadic_parms = 0;
6952 /* Likewise for parameters with default arguments. */
6953 int default_p = 0;
6955 if (args == error_mark_node)
6956 return error_mark_node;
6958 nparms = TREE_VEC_LENGTH (parms);
6960 /* Determine if there are any parameter packs or default arguments. */
6961 for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
6963 tree parm = TREE_VEC_ELT (parms, parm_idx);
6964 if (variadic_p)
6965 ++post_variadic_parms;
6966 if (template_parameter_pack_p (TREE_VALUE (parm)))
6967 ++variadic_p;
6968 if (TREE_PURPOSE (parm))
6969 ++default_p;
6972 inner_args = orig_inner_args = INNERMOST_TEMPLATE_ARGS (args);
6973 /* If there are no parameters that follow a parameter pack, we need to
6974 expand any argument packs so that we can deduce a parameter pack from
6975 some non-packed args followed by an argument pack, as in variadic85.C.
6976 If there are such parameters, we need to leave argument packs intact
6977 so the arguments are assigned properly. This can happen when dealing
6978 with a nested class inside a partial specialization of a class
6979 template, as in variadic92.C, or when deducing a template parameter pack
6980 from a sub-declarator, as in variadic114.C. */
6981 if (!post_variadic_parms)
6982 inner_args = expand_template_argument_pack (inner_args);
6984 /* Count any pack expansion args. */
6985 variadic_args_p = pack_expansion_args_count (inner_args);
6987 nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6988 if ((nargs > nparms && !variadic_p)
6989 || (nargs < nparms - variadic_p
6990 && require_all_args
6991 && !variadic_args_p
6992 && (!use_default_args
6993 || (TREE_VEC_ELT (parms, nargs) != error_mark_node
6994 && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
6996 if (complain & tf_error)
6998 if (variadic_p || default_p)
7000 nparms -= variadic_p + default_p;
7001 error ("wrong number of template arguments "
7002 "(%d, should be at least %d)", nargs, nparms);
7004 else
7005 error ("wrong number of template arguments "
7006 "(%d, should be %d)", nargs, nparms);
7008 if (in_decl)
7009 inform (input_location, "provided for %q+D", in_decl);
7012 return error_mark_node;
7014 /* We can't pass a pack expansion to a non-pack parameter of an alias
7015 template (DR 1430). */
7016 else if (in_decl && DECL_ALIAS_TEMPLATE_P (in_decl)
7017 && variadic_args_p
7018 && nargs - variadic_args_p < nparms - variadic_p)
7020 if (complain & tf_error)
7022 for (int i = 0; i < TREE_VEC_LENGTH (inner_args); ++i)
7024 tree arg = TREE_VEC_ELT (inner_args, i);
7025 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
7027 if (PACK_EXPANSION_P (arg)
7028 && !template_parameter_pack_p (parm))
7030 error ("pack expansion argument for non-pack parameter "
7031 "%qD of alias template %qD", parm, in_decl);
7032 inform (DECL_SOURCE_LOCATION (parm), "declared here");
7033 goto found;
7036 gcc_unreachable ();
7037 found:;
7039 return error_mark_node;
7042 /* We need to evaluate the template arguments, even though this
7043 template-id may be nested within a "sizeof". */
7044 saved_unevaluated_operand = cp_unevaluated_operand;
7045 cp_unevaluated_operand = 0;
7046 saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
7047 c_inhibit_evaluation_warnings = 0;
7048 new_inner_args = make_tree_vec (nparms);
7049 new_args = add_outermost_template_args (args, new_inner_args);
7050 int pack_adjust = 0;
7051 for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
7053 tree arg;
7054 tree parm;
7056 /* Get the Ith template parameter. */
7057 parm = TREE_VEC_ELT (parms, parm_idx);
7059 if (parm == error_mark_node)
7061 TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
7062 continue;
7065 /* Calculate the next argument. */
7066 if (arg_idx < nargs)
7067 arg = TREE_VEC_ELT (inner_args, arg_idx);
7068 else
7069 arg = NULL_TREE;
7071 if (template_parameter_pack_p (TREE_VALUE (parm))
7072 && !(arg && ARGUMENT_PACK_P (arg)))
7074 /* Some arguments will be placed in the
7075 template parameter pack PARM. */
7076 arg = coerce_template_parameter_pack (parms, parm_idx, args,
7077 inner_args, arg_idx,
7078 new_args, &lost,
7079 in_decl, complain);
7081 if (arg == NULL_TREE)
7083 /* We don't know how many args we have yet, just use the
7084 unconverted (and still packed) ones for now. */
7085 new_inner_args = orig_inner_args;
7086 arg_idx = nargs;
7087 break;
7090 TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
7092 /* Store this argument. */
7093 if (arg == error_mark_node)
7095 lost++;
7096 /* We are done with all of the arguments. */
7097 arg_idx = nargs;
7099 else
7101 pack_adjust = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg)) - 1;
7102 arg_idx += pack_adjust;
7105 continue;
7107 else if (arg)
7109 if (PACK_EXPANSION_P (arg))
7111 /* "If every valid specialization of a variadic template
7112 requires an empty template parameter pack, the template is
7113 ill-formed, no diagnostic required." So check that the
7114 pattern works with this parameter. */
7115 tree pattern = PACK_EXPANSION_PATTERN (arg);
7116 tree conv = convert_template_argument (TREE_VALUE (parm),
7117 pattern, new_args,
7118 complain, parm_idx,
7119 in_decl);
7120 if (conv == error_mark_node)
7122 inform (input_location, "so any instantiation with a "
7123 "non-empty parameter pack would be ill-formed");
7124 ++lost;
7126 else if (TYPE_P (conv) && !TYPE_P (pattern))
7127 /* Recover from missing typename. */
7128 TREE_VEC_ELT (inner_args, arg_idx)
7129 = make_pack_expansion (conv);
7131 /* We don't know how many args we have yet, just
7132 use the unconverted ones for now. */
7133 new_inner_args = inner_args;
7134 arg_idx = nargs;
7135 break;
7138 else if (require_all_args)
7140 /* There must be a default arg in this case. */
7141 arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
7142 complain, in_decl);
7143 /* The position of the first default template argument,
7144 is also the number of non-defaulted arguments in NEW_INNER_ARGS.
7145 Record that. */
7146 if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
7147 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
7148 arg_idx - pack_adjust);
7150 else
7151 break;
7153 if (arg == error_mark_node)
7155 if (complain & tf_error)
7156 error ("template argument %d is invalid", arg_idx + 1);
7158 else if (!arg)
7159 /* This only occurs if there was an error in the template
7160 parameter list itself (which we would already have
7161 reported) that we are trying to recover from, e.g., a class
7162 template with a parameter list such as
7163 template<typename..., typename>. */
7164 ++lost;
7165 else
7166 arg = convert_template_argument (TREE_VALUE (parm),
7167 arg, new_args, complain,
7168 parm_idx, in_decl);
7170 if (arg == error_mark_node)
7171 lost++;
7172 TREE_VEC_ELT (new_inner_args, arg_idx - pack_adjust) = arg;
7174 cp_unevaluated_operand = saved_unevaluated_operand;
7175 c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
7177 if (variadic_p && arg_idx < nargs)
7179 if (complain & tf_error)
7181 error ("wrong number of template arguments "
7182 "(%d, should be %d)", nargs, arg_idx);
7183 if (in_decl)
7184 error ("provided for %q+D", in_decl);
7186 return error_mark_node;
7189 if (lost)
7190 return error_mark_node;
7192 #ifdef ENABLE_CHECKING
7193 if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
7194 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
7195 TREE_VEC_LENGTH (new_inner_args));
7196 #endif
7198 return new_inner_args;
7201 /* Like coerce_template_parms. If PARMS represents all template
7202 parameters levels, this function returns a vector of vectors
7203 representing all the resulting argument levels. Note that in this
7204 case, only the innermost arguments are coerced because the
7205 outermost ones are supposed to have been coerced already.
7207 Otherwise, if PARMS represents only (the innermost) vector of
7208 parameters, this function returns a vector containing just the
7209 innermost resulting arguments. */
7211 static tree
7212 coerce_innermost_template_parms (tree parms,
7213 tree args,
7214 tree in_decl,
7215 tsubst_flags_t complain,
7216 bool require_all_args,
7217 bool use_default_args)
7219 int parms_depth = TMPL_PARMS_DEPTH (parms);
7220 int args_depth = TMPL_ARGS_DEPTH (args);
7221 tree coerced_args;
7223 if (parms_depth > 1)
7225 coerced_args = make_tree_vec (parms_depth);
7226 tree level;
7227 int cur_depth;
7229 for (level = parms, cur_depth = parms_depth;
7230 parms_depth > 0 && level != NULL_TREE;
7231 level = TREE_CHAIN (level), --cur_depth)
7233 tree l;
7234 if (cur_depth == args_depth)
7235 l = coerce_template_parms (TREE_VALUE (level),
7236 args, in_decl, complain,
7237 require_all_args,
7238 use_default_args);
7239 else
7240 l = TMPL_ARGS_LEVEL (args, cur_depth);
7242 if (l == error_mark_node)
7243 return error_mark_node;
7245 SET_TMPL_ARGS_LEVEL (coerced_args, cur_depth, l);
7248 else
7249 coerced_args = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parms),
7250 args, in_decl, complain,
7251 require_all_args,
7252 use_default_args);
7253 return coerced_args;
7256 /* Returns 1 if template args OT and NT are equivalent. */
7258 static int
7259 template_args_equal (tree ot, tree nt)
7261 if (nt == ot)
7262 return 1;
7263 if (nt == NULL_TREE || ot == NULL_TREE)
7264 return false;
7266 if (TREE_CODE (nt) == TREE_VEC)
7267 /* For member templates */
7268 return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
7269 else if (PACK_EXPANSION_P (ot))
7270 return (PACK_EXPANSION_P (nt)
7271 && template_args_equal (PACK_EXPANSION_PATTERN (ot),
7272 PACK_EXPANSION_PATTERN (nt))
7273 && template_args_equal (PACK_EXPANSION_EXTRA_ARGS (ot),
7274 PACK_EXPANSION_EXTRA_ARGS (nt)));
7275 else if (ARGUMENT_PACK_P (ot))
7277 int i, len;
7278 tree opack, npack;
7280 if (!ARGUMENT_PACK_P (nt))
7281 return 0;
7283 opack = ARGUMENT_PACK_ARGS (ot);
7284 npack = ARGUMENT_PACK_ARGS (nt);
7285 len = TREE_VEC_LENGTH (opack);
7286 if (TREE_VEC_LENGTH (npack) != len)
7287 return 0;
7288 for (i = 0; i < len; ++i)
7289 if (!template_args_equal (TREE_VEC_ELT (opack, i),
7290 TREE_VEC_ELT (npack, i)))
7291 return 0;
7292 return 1;
7294 else if (ot && TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
7296 /* We get here probably because we are in the middle of substituting
7297 into the pattern of a pack expansion. In that case the
7298 ARGUMENT_PACK_SELECT temporarily replaces the pack argument we are
7299 interested in. So we want to use the initial pack argument for
7300 the comparison. */
7301 ot = ARGUMENT_PACK_SELECT_FROM_PACK (ot);
7302 if (nt && TREE_CODE (nt) == ARGUMENT_PACK_SELECT)
7303 nt = ARGUMENT_PACK_SELECT_FROM_PACK (nt);
7304 return template_args_equal (ot, nt);
7306 else if (TYPE_P (nt))
7308 if (!TYPE_P (ot))
7309 return false;
7310 /* Don't treat an alias template specialization with dependent
7311 arguments as equivalent to its underlying type when used as a
7312 template argument; we need them to be distinct so that we
7313 substitute into the specialization arguments at instantiation
7314 time. And aliases can't be equivalent without being ==, so
7315 we don't need to look any deeper. */
7316 if (TYPE_ALIAS_P (nt) || TYPE_ALIAS_P (ot))
7317 return false;
7318 else
7319 return same_type_p (ot, nt);
7321 else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
7322 return 0;
7323 else
7325 /* Try to treat a template non-type argument that has been converted
7326 to the parameter type as equivalent to one that hasn't yet. */
7327 for (enum tree_code code1 = TREE_CODE (ot);
7328 CONVERT_EXPR_CODE_P (code1)
7329 || code1 == NON_LVALUE_EXPR;
7330 code1 = TREE_CODE (ot))
7331 ot = TREE_OPERAND (ot, 0);
7332 for (enum tree_code code2 = TREE_CODE (nt);
7333 CONVERT_EXPR_CODE_P (code2)
7334 || code2 == NON_LVALUE_EXPR;
7335 code2 = TREE_CODE (nt))
7336 nt = TREE_OPERAND (nt, 0);
7338 return cp_tree_equal (ot, nt);
7342 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets of
7343 template arguments. Returns 0 otherwise, and updates OLDARG_PTR and
7344 NEWARG_PTR with the offending arguments if they are non-NULL. */
7346 static int
7347 comp_template_args_with_info (tree oldargs, tree newargs,
7348 tree *oldarg_ptr, tree *newarg_ptr)
7350 int i;
7352 if (oldargs == newargs)
7353 return 1;
7355 if (!oldargs || !newargs)
7356 return 0;
7358 if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
7359 return 0;
7361 for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
7363 tree nt = TREE_VEC_ELT (newargs, i);
7364 tree ot = TREE_VEC_ELT (oldargs, i);
7366 if (! template_args_equal (ot, nt))
7368 if (oldarg_ptr != NULL)
7369 *oldarg_ptr = ot;
7370 if (newarg_ptr != NULL)
7371 *newarg_ptr = nt;
7372 return 0;
7375 return 1;
7378 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
7379 of template arguments. Returns 0 otherwise. */
7382 comp_template_args (tree oldargs, tree newargs)
7384 return comp_template_args_with_info (oldargs, newargs, NULL, NULL);
7387 static void
7388 add_pending_template (tree d)
7390 tree ti = (TYPE_P (d)
7391 ? CLASSTYPE_TEMPLATE_INFO (d)
7392 : DECL_TEMPLATE_INFO (d));
7393 struct pending_template *pt;
7394 int level;
7396 if (TI_PENDING_TEMPLATE_FLAG (ti))
7397 return;
7399 /* We are called both from instantiate_decl, where we've already had a
7400 tinst_level pushed, and instantiate_template, where we haven't.
7401 Compensate. */
7402 level = !current_tinst_level || current_tinst_level->decl != d;
7404 if (level)
7405 push_tinst_level (d);
7407 pt = ggc_alloc<pending_template> ();
7408 pt->next = NULL;
7409 pt->tinst = current_tinst_level;
7410 if (last_pending_template)
7411 last_pending_template->next = pt;
7412 else
7413 pending_templates = pt;
7415 last_pending_template = pt;
7417 TI_PENDING_TEMPLATE_FLAG (ti) = 1;
7419 if (level)
7420 pop_tinst_level ();
7424 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
7425 ARGLIST. Valid choices for FNS are given in the cp-tree.def
7426 documentation for TEMPLATE_ID_EXPR. */
7428 tree
7429 lookup_template_function (tree fns, tree arglist)
7431 tree type;
7433 if (fns == error_mark_node || arglist == error_mark_node)
7434 return error_mark_node;
7436 gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
7438 if (!is_overloaded_fn (fns) && !identifier_p (fns))
7440 error ("%q#D is not a function template", fns);
7441 return error_mark_node;
7444 if (BASELINK_P (fns))
7446 BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
7447 unknown_type_node,
7448 BASELINK_FUNCTIONS (fns),
7449 arglist);
7450 return fns;
7453 type = TREE_TYPE (fns);
7454 if (TREE_CODE (fns) == OVERLOAD || !type)
7455 type = unknown_type_node;
7457 return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
7460 /* Within the scope of a template class S<T>, the name S gets bound
7461 (in build_self_reference) to a TYPE_DECL for the class, not a
7462 TEMPLATE_DECL. If DECL is a TYPE_DECL for current_class_type,
7463 or one of its enclosing classes, and that type is a template,
7464 return the associated TEMPLATE_DECL. Otherwise, the original
7465 DECL is returned.
7467 Also handle the case when DECL is a TREE_LIST of ambiguous
7468 injected-class-names from different bases. */
7470 tree
7471 maybe_get_template_decl_from_type_decl (tree decl)
7473 if (decl == NULL_TREE)
7474 return decl;
7476 /* DR 176: A lookup that finds an injected-class-name (10.2
7477 [class.member.lookup]) can result in an ambiguity in certain cases
7478 (for example, if it is found in more than one base class). If all of
7479 the injected-class-names that are found refer to specializations of
7480 the same class template, and if the name is followed by a
7481 template-argument-list, the reference refers to the class template
7482 itself and not a specialization thereof, and is not ambiguous. */
7483 if (TREE_CODE (decl) == TREE_LIST)
7485 tree t, tmpl = NULL_TREE;
7486 for (t = decl; t; t = TREE_CHAIN (t))
7488 tree elt = maybe_get_template_decl_from_type_decl (TREE_VALUE (t));
7489 if (!tmpl)
7490 tmpl = elt;
7491 else if (tmpl != elt)
7492 break;
7494 if (tmpl && t == NULL_TREE)
7495 return tmpl;
7496 else
7497 return decl;
7500 return (decl != NULL_TREE
7501 && DECL_SELF_REFERENCE_P (decl)
7502 && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
7503 ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
7506 /* Given an IDENTIFIER_NODE (or type TEMPLATE_DECL) and a chain of
7507 parameters, find the desired type.
7509 D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
7511 IN_DECL, if non-NULL, is the template declaration we are trying to
7512 instantiate.
7514 If ENTERING_SCOPE is nonzero, we are about to enter the scope of
7515 the class we are looking up.
7517 Issue error and warning messages under control of COMPLAIN.
7519 If the template class is really a local class in a template
7520 function, then the FUNCTION_CONTEXT is the function in which it is
7521 being instantiated.
7523 ??? Note that this function is currently called *twice* for each
7524 template-id: the first time from the parser, while creating the
7525 incomplete type (finish_template_type), and the second type during the
7526 real instantiation (instantiate_template_class). This is surely something
7527 that we want to avoid. It also causes some problems with argument
7528 coercion (see convert_nontype_argument for more information on this). */
7530 static tree
7531 lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
7532 int entering_scope, tsubst_flags_t complain)
7534 tree templ = NULL_TREE, parmlist;
7535 tree t;
7536 spec_entry **slot;
7537 spec_entry *entry;
7538 spec_entry elt;
7539 hashval_t hash;
7541 if (identifier_p (d1))
7543 tree value = innermost_non_namespace_value (d1);
7544 if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
7545 templ = value;
7546 else
7548 if (context)
7549 push_decl_namespace (context);
7550 templ = lookup_name (d1);
7551 templ = maybe_get_template_decl_from_type_decl (templ);
7552 if (context)
7553 pop_decl_namespace ();
7555 if (templ)
7556 context = DECL_CONTEXT (templ);
7558 else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
7560 tree type = TREE_TYPE (d1);
7562 /* If we are declaring a constructor, say A<T>::A<T>, we will get
7563 an implicit typename for the second A. Deal with it. */
7564 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
7565 type = TREE_TYPE (type);
7567 if (CLASSTYPE_TEMPLATE_INFO (type))
7569 templ = CLASSTYPE_TI_TEMPLATE (type);
7570 d1 = DECL_NAME (templ);
7573 else if (TREE_CODE (d1) == ENUMERAL_TYPE
7574 || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
7576 templ = TYPE_TI_TEMPLATE (d1);
7577 d1 = DECL_NAME (templ);
7579 else if (DECL_TYPE_TEMPLATE_P (d1))
7581 templ = d1;
7582 d1 = DECL_NAME (templ);
7583 context = DECL_CONTEXT (templ);
7585 else if (DECL_TEMPLATE_TEMPLATE_PARM_P (d1))
7587 templ = d1;
7588 d1 = DECL_NAME (templ);
7591 /* Issue an error message if we didn't find a template. */
7592 if (! templ)
7594 if (complain & tf_error)
7595 error ("%qT is not a template", d1);
7596 return error_mark_node;
7599 if (TREE_CODE (templ) != TEMPLATE_DECL
7600 /* Make sure it's a user visible template, if it was named by
7601 the user. */
7602 || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
7603 && !PRIMARY_TEMPLATE_P (templ)))
7605 if (complain & tf_error)
7607 error ("non-template type %qT used as a template", d1);
7608 if (in_decl)
7609 error ("for template declaration %q+D", in_decl);
7611 return error_mark_node;
7614 complain &= ~tf_user;
7616 /* An alias that just changes the name of a template is equivalent to the
7617 other template, so if any of the arguments are pack expansions, strip
7618 the alias to avoid problems with a pack expansion passed to a non-pack
7619 alias template parameter (DR 1430). */
7620 if (pack_expansion_args_count (INNERMOST_TEMPLATE_ARGS (arglist)))
7621 templ = get_underlying_template (templ);
7623 if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
7625 /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
7626 template arguments */
7628 tree parm;
7629 tree arglist2;
7630 tree outer;
7632 parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
7634 /* Consider an example where a template template parameter declared as
7636 template <class T, class U = std::allocator<T> > class TT
7638 The template parameter level of T and U are one level larger than
7639 of TT. To proper process the default argument of U, say when an
7640 instantiation `TT<int>' is seen, we need to build the full
7641 arguments containing {int} as the innermost level. Outer levels,
7642 available when not appearing as default template argument, can be
7643 obtained from the arguments of the enclosing template.
7645 Suppose that TT is later substituted with std::vector. The above
7646 instantiation is `TT<int, std::allocator<T> >' with TT at
7647 level 1, and T at level 2, while the template arguments at level 1
7648 becomes {std::vector} and the inner level 2 is {int}. */
7650 outer = DECL_CONTEXT (templ);
7651 if (outer)
7652 outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
7653 else if (current_template_parms)
7654 /* This is an argument of the current template, so we haven't set
7655 DECL_CONTEXT yet. */
7656 outer = current_template_args ();
7658 if (outer)
7659 arglist = add_to_template_args (outer, arglist);
7661 arglist2 = coerce_template_parms (parmlist, arglist, templ,
7662 complain,
7663 /*require_all_args=*/true,
7664 /*use_default_args=*/true);
7665 if (arglist2 == error_mark_node
7666 || (!uses_template_parms (arglist2)
7667 && check_instantiated_args (templ, arglist2, complain)))
7668 return error_mark_node;
7670 parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
7671 return parm;
7673 else
7675 tree template_type = TREE_TYPE (templ);
7676 tree gen_tmpl;
7677 tree type_decl;
7678 tree found = NULL_TREE;
7679 int arg_depth;
7680 int parm_depth;
7681 int is_dependent_type;
7682 int use_partial_inst_tmpl = false;
7684 if (template_type == error_mark_node)
7685 /* An error occurred while building the template TEMPL, and a
7686 diagnostic has most certainly been emitted for that
7687 already. Let's propagate that error. */
7688 return error_mark_node;
7690 gen_tmpl = most_general_template (templ);
7691 parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
7692 parm_depth = TMPL_PARMS_DEPTH (parmlist);
7693 arg_depth = TMPL_ARGS_DEPTH (arglist);
7695 if (arg_depth == 1 && parm_depth > 1)
7697 /* We've been given an incomplete set of template arguments.
7698 For example, given:
7700 template <class T> struct S1 {
7701 template <class U> struct S2 {};
7702 template <class U> struct S2<U*> {};
7705 we will be called with an ARGLIST of `U*', but the
7706 TEMPLATE will be `template <class T> template
7707 <class U> struct S1<T>::S2'. We must fill in the missing
7708 arguments. */
7709 arglist
7710 = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
7711 arglist);
7712 arg_depth = TMPL_ARGS_DEPTH (arglist);
7715 /* Now we should have enough arguments. */
7716 gcc_assert (parm_depth == arg_depth);
7718 /* From here on, we're only interested in the most general
7719 template. */
7721 /* Calculate the BOUND_ARGS. These will be the args that are
7722 actually tsubst'd into the definition to create the
7723 instantiation. */
7724 arglist = coerce_innermost_template_parms (parmlist, arglist, gen_tmpl,
7725 complain,
7726 /*require_all_args=*/true,
7727 /*use_default_args=*/true);
7729 if (arglist == error_mark_node)
7730 /* We were unable to bind the arguments. */
7731 return error_mark_node;
7733 /* In the scope of a template class, explicit references to the
7734 template class refer to the type of the template, not any
7735 instantiation of it. For example, in:
7737 template <class T> class C { void f(C<T>); }
7739 the `C<T>' is just the same as `C'. Outside of the
7740 class, however, such a reference is an instantiation. */
7741 if ((entering_scope
7742 || !PRIMARY_TEMPLATE_P (gen_tmpl)
7743 || currently_open_class (template_type))
7744 /* comp_template_args is expensive, check it last. */
7745 && comp_template_args (TYPE_TI_ARGS (template_type),
7746 arglist))
7747 return template_type;
7749 /* If we already have this specialization, return it. */
7750 elt.tmpl = gen_tmpl;
7751 elt.args = arglist;
7752 hash = spec_hasher::hash (&elt);
7753 entry = type_specializations->find_with_hash (&elt, hash);
7755 if (entry)
7756 return entry->spec;
7758 is_dependent_type = uses_template_parms (arglist);
7760 /* If the deduced arguments are invalid, then the binding
7761 failed. */
7762 if (!is_dependent_type
7763 && check_instantiated_args (gen_tmpl,
7764 INNERMOST_TEMPLATE_ARGS (arglist),
7765 complain))
7766 return error_mark_node;
7768 if (!is_dependent_type
7769 && !PRIMARY_TEMPLATE_P (gen_tmpl)
7770 && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
7771 && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
7773 found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
7774 DECL_NAME (gen_tmpl),
7775 /*tag_scope=*/ts_global);
7776 return found;
7779 context = tsubst (DECL_CONTEXT (gen_tmpl), arglist,
7780 complain, in_decl);
7781 if (context == error_mark_node)
7782 return error_mark_node;
7784 if (!context)
7785 context = global_namespace;
7787 /* Create the type. */
7788 if (DECL_ALIAS_TEMPLATE_P (gen_tmpl))
7790 /* The user referred to a specialization of an alias
7791 template represented by GEN_TMPL.
7793 [temp.alias]/2 says:
7795 When a template-id refers to the specialization of an
7796 alias template, it is equivalent to the associated
7797 type obtained by substitution of its
7798 template-arguments for the template-parameters in the
7799 type-id of the alias template. */
7801 t = tsubst (TREE_TYPE (gen_tmpl), arglist, complain, in_decl);
7802 /* Note that the call above (by indirectly calling
7803 register_specialization in tsubst_decl) registers the
7804 TYPE_DECL representing the specialization of the alias
7805 template. So next time someone substitutes ARGLIST for
7806 the template parms into the alias template (GEN_TMPL),
7807 she'll get that TYPE_DECL back. */
7809 if (t == error_mark_node)
7810 return t;
7812 else if (TREE_CODE (template_type) == ENUMERAL_TYPE)
7814 if (!is_dependent_type)
7816 set_current_access_from_decl (TYPE_NAME (template_type));
7817 t = start_enum (TYPE_IDENTIFIER (template_type), NULL_TREE,
7818 tsubst (ENUM_UNDERLYING_TYPE (template_type),
7819 arglist, complain, in_decl),
7820 SCOPED_ENUM_P (template_type), NULL);
7822 if (t == error_mark_node)
7823 return t;
7825 else
7827 /* We don't want to call start_enum for this type, since
7828 the values for the enumeration constants may involve
7829 template parameters. And, no one should be interested
7830 in the enumeration constants for such a type. */
7831 t = cxx_make_type (ENUMERAL_TYPE);
7832 SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
7834 SET_OPAQUE_ENUM_P (t, OPAQUE_ENUM_P (template_type));
7835 ENUM_FIXED_UNDERLYING_TYPE_P (t)
7836 = ENUM_FIXED_UNDERLYING_TYPE_P (template_type);
7838 else if (CLASS_TYPE_P (template_type))
7840 t = make_class_type (TREE_CODE (template_type));
7841 CLASSTYPE_DECLARED_CLASS (t)
7842 = CLASSTYPE_DECLARED_CLASS (template_type);
7843 SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
7844 TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
7846 /* A local class. Make sure the decl gets registered properly. */
7847 if (context == current_function_decl)
7848 pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current);
7850 if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
7851 /* This instantiation is another name for the primary
7852 template type. Set the TYPE_CANONICAL field
7853 appropriately. */
7854 TYPE_CANONICAL (t) = template_type;
7855 else if (any_template_arguments_need_structural_equality_p (arglist))
7856 /* Some of the template arguments require structural
7857 equality testing, so this template class requires
7858 structural equality testing. */
7859 SET_TYPE_STRUCTURAL_EQUALITY (t);
7861 else
7862 gcc_unreachable ();
7864 /* If we called start_enum or pushtag above, this information
7865 will already be set up. */
7866 if (!TYPE_NAME (t))
7868 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
7870 type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
7871 DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
7872 DECL_SOURCE_LOCATION (type_decl)
7873 = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
7875 else
7876 type_decl = TYPE_NAME (t);
7878 if (CLASS_TYPE_P (template_type))
7880 TREE_PRIVATE (type_decl)
7881 = TREE_PRIVATE (TYPE_MAIN_DECL (template_type));
7882 TREE_PROTECTED (type_decl)
7883 = TREE_PROTECTED (TYPE_MAIN_DECL (template_type));
7884 if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
7886 DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
7887 DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
7891 if (OVERLOAD_TYPE_P (t)
7892 && !DECL_ALIAS_TEMPLATE_P (gen_tmpl))
7894 if (tree attributes
7895 = lookup_attribute ("abi_tag", TYPE_ATTRIBUTES (template_type)))
7897 if (!TREE_CHAIN (attributes))
7898 TYPE_ATTRIBUTES (t) = attributes;
7899 else
7900 TYPE_ATTRIBUTES (t)
7901 = build_tree_list (TREE_PURPOSE (attributes),
7902 TREE_VALUE (attributes));
7906 /* Let's consider the explicit specialization of a member
7907 of a class template specialization that is implicitly instantiated,
7908 e.g.:
7909 template<class T>
7910 struct S
7912 template<class U> struct M {}; //#0
7915 template<>
7916 template<>
7917 struct S<int>::M<char> //#1
7919 int i;
7921 [temp.expl.spec]/4 says this is valid.
7923 In this case, when we write:
7924 S<int>::M<char> m;
7926 M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
7927 the one of #0.
7929 When we encounter #1, we want to store the partial instantiation
7930 of M (template<class T> S<int>::M<T>) in its CLASSTYPE_TI_TEMPLATE.
7932 For all cases other than this "explicit specialization of member of a
7933 class template", we just want to store the most general template into
7934 the CLASSTYPE_TI_TEMPLATE of M.
7936 This case of "explicit specialization of member of a class template"
7937 only happens when:
7938 1/ the enclosing class is an instantiation of, and therefore not
7939 the same as, the context of the most general template, and
7940 2/ we aren't looking at the partial instantiation itself, i.e.
7941 the innermost arguments are not the same as the innermost parms of
7942 the most general template.
7944 So it's only when 1/ and 2/ happens that we want to use the partial
7945 instantiation of the member template in lieu of its most general
7946 template. */
7948 if (PRIMARY_TEMPLATE_P (gen_tmpl)
7949 && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
7950 /* the enclosing class must be an instantiation... */
7951 && CLASS_TYPE_P (context)
7952 && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
7954 tree partial_inst_args;
7955 TREE_VEC_LENGTH (arglist)--;
7956 ++processing_template_decl;
7957 partial_inst_args =
7958 tsubst (INNERMOST_TEMPLATE_ARGS
7959 (TYPE_TI_ARGS (TREE_TYPE (gen_tmpl))),
7960 arglist, complain, NULL_TREE);
7961 --processing_template_decl;
7962 TREE_VEC_LENGTH (arglist)++;
7963 use_partial_inst_tmpl =
7964 /*...and we must not be looking at the partial instantiation
7965 itself. */
7966 !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
7967 partial_inst_args);
7970 if (!use_partial_inst_tmpl)
7971 /* This case is easy; there are no member templates involved. */
7972 found = gen_tmpl;
7973 else
7975 /* This is a full instantiation of a member template. Find
7976 the partial instantiation of which this is an instance. */
7978 /* Temporarily reduce by one the number of levels in the ARGLIST
7979 so as to avoid comparing the last set of arguments. */
7980 TREE_VEC_LENGTH (arglist)--;
7981 found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
7982 TREE_VEC_LENGTH (arglist)++;
7983 /* FOUND is either a proper class type, or an alias
7984 template specialization. In the later case, it's a
7985 TYPE_DECL, resulting from the substituting of arguments
7986 for parameters in the TYPE_DECL of the alias template
7987 done earlier. So be careful while getting the template
7988 of FOUND. */
7989 found = TREE_CODE (found) == TYPE_DECL
7990 ? TYPE_TI_TEMPLATE (TREE_TYPE (found))
7991 : CLASSTYPE_TI_TEMPLATE (found);
7994 SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
7996 elt.spec = t;
7997 slot = type_specializations->find_slot_with_hash (&elt, hash, INSERT);
7998 entry = ggc_alloc<spec_entry> ();
7999 *entry = elt;
8000 *slot = entry;
8002 /* Note this use of the partial instantiation so we can check it
8003 later in maybe_process_partial_specialization. */
8004 DECL_TEMPLATE_INSTANTIATIONS (found)
8005 = tree_cons (arglist, t,
8006 DECL_TEMPLATE_INSTANTIATIONS (found));
8008 if (TREE_CODE (template_type) == ENUMERAL_TYPE && !is_dependent_type
8009 && !DECL_ALIAS_TEMPLATE_P (gen_tmpl))
8010 /* Now that the type has been registered on the instantiations
8011 list, we set up the enumerators. Because the enumeration
8012 constants may involve the enumeration type itself, we make
8013 sure to register the type first, and then create the
8014 constants. That way, doing tsubst_expr for the enumeration
8015 constants won't result in recursive calls here; we'll find
8016 the instantiation and exit above. */
8017 tsubst_enum (template_type, t, arglist);
8019 if (CLASS_TYPE_P (template_type) && is_dependent_type)
8020 /* If the type makes use of template parameters, the
8021 code that generates debugging information will crash. */
8022 DECL_IGNORED_P (TYPE_MAIN_DECL (t)) = 1;
8024 /* Possibly limit visibility based on template args. */
8025 TREE_PUBLIC (type_decl) = 1;
8026 determine_visibility (type_decl);
8028 inherit_targ_abi_tags (t);
8030 return t;
8034 /* Wrapper for lookup_template_class_1. */
8036 tree
8037 lookup_template_class (tree d1, tree arglist, tree in_decl, tree context,
8038 int entering_scope, tsubst_flags_t complain)
8040 tree ret;
8041 timevar_push (TV_TEMPLATE_INST);
8042 ret = lookup_template_class_1 (d1, arglist, in_decl, context,
8043 entering_scope, complain);
8044 timevar_pop (TV_TEMPLATE_INST);
8045 return ret;
8048 /* Return a TEMPLATE_ID_EXPR for the given variable template and ARGLIST.
8049 The type of the expression is the unknown_type_node since the
8050 template-id could refer to an explicit or partial specialization. */
8052 tree
8053 lookup_template_variable (tree templ, tree arglist)
8055 tree type = unknown_type_node;
8056 return build2 (TEMPLATE_ID_EXPR, type, templ, arglist);
8059 /* Instantiate a variable declaration from a TEMPLATE_ID_EXPR for use. */
8061 tree
8062 finish_template_variable (tree var)
8064 tree templ = TREE_OPERAND (var, 0);
8066 tree arglist = TREE_OPERAND (var, 1);
8067 tree tmpl_args = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (templ));
8068 arglist = add_outermost_template_args (tmpl_args, arglist);
8070 tree parms = DECL_TEMPLATE_PARMS (templ);
8071 tsubst_flags_t complain = tf_warning_or_error;
8072 arglist = coerce_innermost_template_parms (parms, arglist, templ, complain,
8073 /*req_all*/true,
8074 /*use_default*/true);
8076 return instantiate_template (templ, arglist, complain);
8079 struct pair_fn_data
8081 tree_fn_t fn;
8082 void *data;
8083 /* True when we should also visit template parameters that occur in
8084 non-deduced contexts. */
8085 bool include_nondeduced_p;
8086 hash_set<tree> *visited;
8089 /* Called from for_each_template_parm via walk_tree. */
8091 static tree
8092 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
8094 tree t = *tp;
8095 struct pair_fn_data *pfd = (struct pair_fn_data *) d;
8096 tree_fn_t fn = pfd->fn;
8097 void *data = pfd->data;
8099 if (TYPE_P (t)
8100 && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
8101 && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
8102 pfd->include_nondeduced_p))
8103 return error_mark_node;
8105 switch (TREE_CODE (t))
8107 case RECORD_TYPE:
8108 if (TYPE_PTRMEMFUNC_P (t))
8109 break;
8110 /* Fall through. */
8112 case UNION_TYPE:
8113 case ENUMERAL_TYPE:
8114 if (!TYPE_TEMPLATE_INFO (t))
8115 *walk_subtrees = 0;
8116 else if (for_each_template_parm (TYPE_TI_ARGS (t),
8117 fn, data, pfd->visited,
8118 pfd->include_nondeduced_p))
8119 return error_mark_node;
8120 break;
8122 case INTEGER_TYPE:
8123 if (for_each_template_parm (TYPE_MIN_VALUE (t),
8124 fn, data, pfd->visited,
8125 pfd->include_nondeduced_p)
8126 || for_each_template_parm (TYPE_MAX_VALUE (t),
8127 fn, data, pfd->visited,
8128 pfd->include_nondeduced_p))
8129 return error_mark_node;
8130 break;
8132 case METHOD_TYPE:
8133 /* Since we're not going to walk subtrees, we have to do this
8134 explicitly here. */
8135 if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
8136 pfd->visited, pfd->include_nondeduced_p))
8137 return error_mark_node;
8138 /* Fall through. */
8140 case FUNCTION_TYPE:
8141 /* Check the return type. */
8142 if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
8143 pfd->include_nondeduced_p))
8144 return error_mark_node;
8146 /* Check the parameter types. Since default arguments are not
8147 instantiated until they are needed, the TYPE_ARG_TYPES may
8148 contain expressions that involve template parameters. But,
8149 no-one should be looking at them yet. And, once they're
8150 instantiated, they don't contain template parameters, so
8151 there's no point in looking at them then, either. */
8153 tree parm;
8155 for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
8156 if (for_each_template_parm (TREE_VALUE (parm), fn, data,
8157 pfd->visited, pfd->include_nondeduced_p))
8158 return error_mark_node;
8160 /* Since we've already handled the TYPE_ARG_TYPES, we don't
8161 want walk_tree walking into them itself. */
8162 *walk_subtrees = 0;
8164 break;
8166 case TYPEOF_TYPE:
8167 case UNDERLYING_TYPE:
8168 if (pfd->include_nondeduced_p
8169 && for_each_template_parm (TYPE_FIELDS (t), fn, data,
8170 pfd->visited,
8171 pfd->include_nondeduced_p))
8172 return error_mark_node;
8173 break;
8175 case FUNCTION_DECL:
8176 case VAR_DECL:
8177 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
8178 && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
8179 pfd->visited, pfd->include_nondeduced_p))
8180 return error_mark_node;
8181 /* Fall through. */
8183 case PARM_DECL:
8184 case CONST_DECL:
8185 if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
8186 && for_each_template_parm (DECL_INITIAL (t), fn, data,
8187 pfd->visited, pfd->include_nondeduced_p))
8188 return error_mark_node;
8189 if (DECL_CONTEXT (t)
8190 && pfd->include_nondeduced_p
8191 && for_each_template_parm (DECL_CONTEXT (t), fn, data,
8192 pfd->visited, pfd->include_nondeduced_p))
8193 return error_mark_node;
8194 break;
8196 case BOUND_TEMPLATE_TEMPLATE_PARM:
8197 /* Record template parameters such as `T' inside `TT<T>'. */
8198 if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
8199 pfd->include_nondeduced_p))
8200 return error_mark_node;
8201 /* Fall through. */
8203 case TEMPLATE_TEMPLATE_PARM:
8204 case TEMPLATE_TYPE_PARM:
8205 case TEMPLATE_PARM_INDEX:
8206 if (fn && (*fn)(t, data))
8207 return error_mark_node;
8208 else if (!fn)
8209 return error_mark_node;
8210 break;
8212 case TEMPLATE_DECL:
8213 /* A template template parameter is encountered. */
8214 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
8215 && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
8216 pfd->include_nondeduced_p))
8217 return error_mark_node;
8219 /* Already substituted template template parameter */
8220 *walk_subtrees = 0;
8221 break;
8223 case TYPENAME_TYPE:
8224 if (!fn
8225 || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
8226 data, pfd->visited,
8227 pfd->include_nondeduced_p))
8228 return error_mark_node;
8229 break;
8231 case CONSTRUCTOR:
8232 if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
8233 && pfd->include_nondeduced_p
8234 && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
8235 (TREE_TYPE (t)), fn, data,
8236 pfd->visited, pfd->include_nondeduced_p))
8237 return error_mark_node;
8238 break;
8240 case INDIRECT_REF:
8241 case COMPONENT_REF:
8242 /* If there's no type, then this thing must be some expression
8243 involving template parameters. */
8244 if (!fn && !TREE_TYPE (t))
8245 return error_mark_node;
8246 break;
8248 case MODOP_EXPR:
8249 case CAST_EXPR:
8250 case IMPLICIT_CONV_EXPR:
8251 case REINTERPRET_CAST_EXPR:
8252 case CONST_CAST_EXPR:
8253 case STATIC_CAST_EXPR:
8254 case DYNAMIC_CAST_EXPR:
8255 case ARROW_EXPR:
8256 case DOTSTAR_EXPR:
8257 case TYPEID_EXPR:
8258 case PSEUDO_DTOR_EXPR:
8259 if (!fn)
8260 return error_mark_node;
8261 break;
8263 default:
8264 break;
8267 /* We didn't find any template parameters we liked. */
8268 return NULL_TREE;
8271 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
8272 BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
8273 call FN with the parameter and the DATA.
8274 If FN returns nonzero, the iteration is terminated, and
8275 for_each_template_parm returns 1. Otherwise, the iteration
8276 continues. If FN never returns a nonzero value, the value
8277 returned by for_each_template_parm is 0. If FN is NULL, it is
8278 considered to be the function which always returns 1.
8280 If INCLUDE_NONDEDUCED_P, then this routine will also visit template
8281 parameters that occur in non-deduced contexts. When false, only
8282 visits those template parameters that can be deduced. */
8284 static int
8285 for_each_template_parm (tree t, tree_fn_t fn, void* data,
8286 hash_set<tree> *visited,
8287 bool include_nondeduced_p)
8289 struct pair_fn_data pfd;
8290 int result;
8292 /* Set up. */
8293 pfd.fn = fn;
8294 pfd.data = data;
8295 pfd.include_nondeduced_p = include_nondeduced_p;
8297 /* Walk the tree. (Conceptually, we would like to walk without
8298 duplicates, but for_each_template_parm_r recursively calls
8299 for_each_template_parm, so we would need to reorganize a fair
8300 bit to use walk_tree_without_duplicates, so we keep our own
8301 visited list.) */
8302 if (visited)
8303 pfd.visited = visited;
8304 else
8305 pfd.visited = new hash_set<tree>;
8306 result = cp_walk_tree (&t,
8307 for_each_template_parm_r,
8308 &pfd,
8309 pfd.visited) != NULL_TREE;
8311 /* Clean up. */
8312 if (!visited)
8314 delete pfd.visited;
8315 pfd.visited = 0;
8318 return result;
8321 /* Returns true if T depends on any template parameter. */
8324 uses_template_parms (tree t)
8326 if (t == NULL_TREE)
8327 return false;
8329 bool dependent_p;
8330 int saved_processing_template_decl;
8332 saved_processing_template_decl = processing_template_decl;
8333 if (!saved_processing_template_decl)
8334 processing_template_decl = 1;
8335 if (TYPE_P (t))
8336 dependent_p = dependent_type_p (t);
8337 else if (TREE_CODE (t) == TREE_VEC)
8338 dependent_p = any_dependent_template_arguments_p (t);
8339 else if (TREE_CODE (t) == TREE_LIST)
8340 dependent_p = (uses_template_parms (TREE_VALUE (t))
8341 || uses_template_parms (TREE_CHAIN (t)));
8342 else if (TREE_CODE (t) == TYPE_DECL)
8343 dependent_p = dependent_type_p (TREE_TYPE (t));
8344 else if (DECL_P (t)
8345 || EXPR_P (t)
8346 || TREE_CODE (t) == TEMPLATE_PARM_INDEX
8347 || TREE_CODE (t) == OVERLOAD
8348 || BASELINK_P (t)
8349 || identifier_p (t)
8350 || TREE_CODE (t) == TRAIT_EXPR
8351 || TREE_CODE (t) == CONSTRUCTOR
8352 || CONSTANT_CLASS_P (t))
8353 dependent_p = (type_dependent_expression_p (t)
8354 || value_dependent_expression_p (t));
8355 else
8357 gcc_assert (t == error_mark_node);
8358 dependent_p = false;
8361 processing_template_decl = saved_processing_template_decl;
8363 return dependent_p;
8366 /* Returns true iff current_function_decl is an incompletely instantiated
8367 template. Useful instead of processing_template_decl because the latter
8368 is set to 0 during instantiate_non_dependent_expr. */
8370 bool
8371 in_template_function (void)
8373 tree fn = current_function_decl;
8374 bool ret;
8375 ++processing_template_decl;
8376 ret = (fn && DECL_LANG_SPECIFIC (fn)
8377 && DECL_TEMPLATE_INFO (fn)
8378 && any_dependent_template_arguments_p (DECL_TI_ARGS (fn)));
8379 --processing_template_decl;
8380 return ret;
8383 /* Returns true if T depends on any template parameter with level LEVEL. */
8386 uses_template_parms_level (tree t, int level)
8388 return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
8389 /*include_nondeduced_p=*/true);
8392 /* Returns TRUE iff INST is an instantiation we don't need to do in an
8393 ill-formed translation unit, i.e. a variable or function that isn't
8394 usable in a constant expression. */
8396 static inline bool
8397 neglectable_inst_p (tree d)
8399 return (DECL_P (d)
8400 && !(TREE_CODE (d) == FUNCTION_DECL ? DECL_DECLARED_CONSTEXPR_P (d)
8401 : decl_maybe_constant_var_p (d)));
8404 /* Returns TRUE iff we should refuse to instantiate DECL because it's
8405 neglectable and instantiated from within an erroneous instantiation. */
8407 static bool
8408 limit_bad_template_recursion (tree decl)
8410 struct tinst_level *lev = current_tinst_level;
8411 int errs = errorcount + sorrycount;
8412 if (lev == NULL || errs == 0 || !neglectable_inst_p (decl))
8413 return false;
8415 for (; lev; lev = lev->next)
8416 if (neglectable_inst_p (lev->decl))
8417 break;
8419 return (lev && errs > lev->errors);
8422 static int tinst_depth;
8423 extern int max_tinst_depth;
8424 int depth_reached;
8426 static GTY(()) struct tinst_level *last_error_tinst_level;
8428 /* We're starting to instantiate D; record the template instantiation context
8429 for diagnostics and to restore it later. */
8431 bool
8432 push_tinst_level (tree d)
8434 return push_tinst_level_loc (d, input_location);
8437 /* We're starting to instantiate D; record the template instantiation context
8438 at LOC for diagnostics and to restore it later. */
8440 bool
8441 push_tinst_level_loc (tree d, location_t loc)
8443 struct tinst_level *new_level;
8445 if (tinst_depth >= max_tinst_depth)
8447 fatal_error (input_location,
8448 "template instantiation depth exceeds maximum of %d"
8449 " (use -ftemplate-depth= to increase the maximum)",
8450 max_tinst_depth);
8451 return false;
8454 /* If the current instantiation caused problems, don't let it instantiate
8455 anything else. Do allow deduction substitution and decls usable in
8456 constant expressions. */
8457 if (limit_bad_template_recursion (d))
8458 return false;
8460 new_level = ggc_alloc<tinst_level> ();
8461 new_level->decl = d;
8462 new_level->locus = loc;
8463 new_level->errors = errorcount+sorrycount;
8464 new_level->in_system_header_p = in_system_header_at (input_location);
8465 new_level->next = current_tinst_level;
8466 current_tinst_level = new_level;
8468 ++tinst_depth;
8469 if (GATHER_STATISTICS && (tinst_depth > depth_reached))
8470 depth_reached = tinst_depth;
8472 return true;
8475 /* We're done instantiating this template; return to the instantiation
8476 context. */
8478 void
8479 pop_tinst_level (void)
8481 /* Restore the filename and line number stashed away when we started
8482 this instantiation. */
8483 input_location = current_tinst_level->locus;
8484 current_tinst_level = current_tinst_level->next;
8485 --tinst_depth;
8488 /* We're instantiating a deferred template; restore the template
8489 instantiation context in which the instantiation was requested, which
8490 is one step out from LEVEL. Return the corresponding DECL or TYPE. */
8492 static tree
8493 reopen_tinst_level (struct tinst_level *level)
8495 struct tinst_level *t;
8497 tinst_depth = 0;
8498 for (t = level; t; t = t->next)
8499 ++tinst_depth;
8501 current_tinst_level = level;
8502 pop_tinst_level ();
8503 if (current_tinst_level)
8504 current_tinst_level->errors = errorcount+sorrycount;
8505 return level->decl;
8508 /* Returns the TINST_LEVEL which gives the original instantiation
8509 context. */
8511 struct tinst_level *
8512 outermost_tinst_level (void)
8514 struct tinst_level *level = current_tinst_level;
8515 if (level)
8516 while (level->next)
8517 level = level->next;
8518 return level;
8521 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
8522 vector of template arguments, as for tsubst.
8524 Returns an appropriate tsubst'd friend declaration. */
8526 static tree
8527 tsubst_friend_function (tree decl, tree args)
8529 tree new_friend;
8531 if (TREE_CODE (decl) == FUNCTION_DECL
8532 && DECL_TEMPLATE_INSTANTIATION (decl)
8533 && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
8534 /* This was a friend declared with an explicit template
8535 argument list, e.g.:
8537 friend void f<>(T);
8539 to indicate that f was a template instantiation, not a new
8540 function declaration. Now, we have to figure out what
8541 instantiation of what template. */
8543 tree template_id, arglist, fns;
8544 tree new_args;
8545 tree tmpl;
8546 tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
8548 /* Friend functions are looked up in the containing namespace scope.
8549 We must enter that scope, to avoid finding member functions of the
8550 current class with same name. */
8551 push_nested_namespace (ns);
8552 fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
8553 tf_warning_or_error, NULL_TREE,
8554 /*integral_constant_expression_p=*/false);
8555 pop_nested_namespace (ns);
8556 arglist = tsubst (DECL_TI_ARGS (decl), args,
8557 tf_warning_or_error, NULL_TREE);
8558 template_id = lookup_template_function (fns, arglist);
8560 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8561 tmpl = determine_specialization (template_id, new_friend,
8562 &new_args,
8563 /*need_member_template=*/0,
8564 TREE_VEC_LENGTH (args),
8565 tsk_none);
8566 return instantiate_template (tmpl, new_args, tf_error);
8569 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8571 /* The NEW_FRIEND will look like an instantiation, to the
8572 compiler, but is not an instantiation from the point of view of
8573 the language. For example, we might have had:
8575 template <class T> struct S {
8576 template <class U> friend void f(T, U);
8579 Then, in S<int>, template <class U> void f(int, U) is not an
8580 instantiation of anything. */
8581 if (new_friend == error_mark_node)
8582 return error_mark_node;
8584 DECL_USE_TEMPLATE (new_friend) = 0;
8585 if (TREE_CODE (decl) == TEMPLATE_DECL)
8587 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
8588 DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
8589 = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
8592 /* The mangled name for the NEW_FRIEND is incorrect. The function
8593 is not a template instantiation and should not be mangled like
8594 one. Therefore, we forget the mangling here; we'll recompute it
8595 later if we need it. */
8596 if (TREE_CODE (new_friend) != TEMPLATE_DECL)
8598 SET_DECL_RTL (new_friend, NULL);
8599 SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
8602 if (DECL_NAMESPACE_SCOPE_P (new_friend))
8604 tree old_decl;
8605 tree new_friend_template_info;
8606 tree new_friend_result_template_info;
8607 tree ns;
8608 int new_friend_is_defn;
8610 /* We must save some information from NEW_FRIEND before calling
8611 duplicate decls since that function will free NEW_FRIEND if
8612 possible. */
8613 new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
8614 new_friend_is_defn =
8615 (DECL_INITIAL (DECL_TEMPLATE_RESULT
8616 (template_for_substitution (new_friend)))
8617 != NULL_TREE);
8618 if (TREE_CODE (new_friend) == TEMPLATE_DECL)
8620 /* This declaration is a `primary' template. */
8621 DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
8623 new_friend_result_template_info
8624 = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
8626 else
8627 new_friend_result_template_info = NULL_TREE;
8629 /* Make the init_value nonzero so pushdecl knows this is a defn. */
8630 if (new_friend_is_defn)
8631 DECL_INITIAL (new_friend) = error_mark_node;
8633 /* Inside pushdecl_namespace_level, we will push into the
8634 current namespace. However, the friend function should go
8635 into the namespace of the template. */
8636 ns = decl_namespace_context (new_friend);
8637 push_nested_namespace (ns);
8638 old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
8639 pop_nested_namespace (ns);
8641 if (old_decl == error_mark_node)
8642 return error_mark_node;
8644 if (old_decl != new_friend)
8646 /* This new friend declaration matched an existing
8647 declaration. For example, given:
8649 template <class T> void f(T);
8650 template <class U> class C {
8651 template <class T> friend void f(T) {}
8654 the friend declaration actually provides the definition
8655 of `f', once C has been instantiated for some type. So,
8656 old_decl will be the out-of-class template declaration,
8657 while new_friend is the in-class definition.
8659 But, if `f' was called before this point, the
8660 instantiation of `f' will have DECL_TI_ARGS corresponding
8661 to `T' but not to `U', references to which might appear
8662 in the definition of `f'. Previously, the most general
8663 template for an instantiation of `f' was the out-of-class
8664 version; now it is the in-class version. Therefore, we
8665 run through all specialization of `f', adding to their
8666 DECL_TI_ARGS appropriately. In particular, they need a
8667 new set of outer arguments, corresponding to the
8668 arguments for this class instantiation.
8670 The same situation can arise with something like this:
8672 friend void f(int);
8673 template <class T> class C {
8674 friend void f(T) {}
8677 when `C<int>' is instantiated. Now, `f(int)' is defined
8678 in the class. */
8680 if (!new_friend_is_defn)
8681 /* On the other hand, if the in-class declaration does
8682 *not* provide a definition, then we don't want to alter
8683 existing definitions. We can just leave everything
8684 alone. */
8686 else
8688 tree new_template = TI_TEMPLATE (new_friend_template_info);
8689 tree new_args = TI_ARGS (new_friend_template_info);
8691 /* Overwrite whatever template info was there before, if
8692 any, with the new template information pertaining to
8693 the declaration. */
8694 DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
8696 if (TREE_CODE (old_decl) != TEMPLATE_DECL)
8698 /* We should have called reregister_specialization in
8699 duplicate_decls. */
8700 gcc_assert (retrieve_specialization (new_template,
8701 new_args, 0)
8702 == old_decl);
8704 /* Instantiate it if the global has already been used. */
8705 if (DECL_ODR_USED (old_decl))
8706 instantiate_decl (old_decl, /*defer_ok=*/true,
8707 /*expl_inst_class_mem_p=*/false);
8709 else
8711 tree t;
8713 /* Indicate that the old function template is a partial
8714 instantiation. */
8715 DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
8716 = new_friend_result_template_info;
8718 gcc_assert (new_template
8719 == most_general_template (new_template));
8720 gcc_assert (new_template != old_decl);
8722 /* Reassign any specializations already in the hash table
8723 to the new more general template, and add the
8724 additional template args. */
8725 for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
8726 t != NULL_TREE;
8727 t = TREE_CHAIN (t))
8729 tree spec = TREE_VALUE (t);
8730 spec_entry elt;
8732 elt.tmpl = old_decl;
8733 elt.args = DECL_TI_ARGS (spec);
8734 elt.spec = NULL_TREE;
8736 decl_specializations->remove_elt (&elt);
8738 DECL_TI_ARGS (spec)
8739 = add_outermost_template_args (new_args,
8740 DECL_TI_ARGS (spec));
8742 register_specialization
8743 (spec, new_template, DECL_TI_ARGS (spec), true, 0);
8746 DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
8750 /* The information from NEW_FRIEND has been merged into OLD_DECL
8751 by duplicate_decls. */
8752 new_friend = old_decl;
8755 else
8757 tree context = DECL_CONTEXT (new_friend);
8758 bool dependent_p;
8760 /* In the code
8761 template <class T> class C {
8762 template <class U> friend void C1<U>::f (); // case 1
8763 friend void C2<T>::f (); // case 2
8765 we only need to make sure CONTEXT is a complete type for
8766 case 2. To distinguish between the two cases, we note that
8767 CONTEXT of case 1 remains dependent type after tsubst while
8768 this isn't true for case 2. */
8769 ++processing_template_decl;
8770 dependent_p = dependent_type_p (context);
8771 --processing_template_decl;
8773 if (!dependent_p
8774 && !complete_type_or_else (context, NULL_TREE))
8775 return error_mark_node;
8777 if (COMPLETE_TYPE_P (context))
8779 tree fn = new_friend;
8780 /* do_friend adds the TEMPLATE_DECL for any member friend
8781 template even if it isn't a member template, i.e.
8782 template <class T> friend A<T>::f();
8783 Look through it in that case. */
8784 if (TREE_CODE (fn) == TEMPLATE_DECL
8785 && !PRIMARY_TEMPLATE_P (fn))
8786 fn = DECL_TEMPLATE_RESULT (fn);
8787 /* Check to see that the declaration is really present, and,
8788 possibly obtain an improved declaration. */
8789 fn = check_classfn (context, fn, NULL_TREE);
8791 if (fn)
8792 new_friend = fn;
8796 return new_friend;
8799 /* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
8800 template arguments, as for tsubst.
8802 Returns an appropriate tsubst'd friend type or error_mark_node on
8803 failure. */
8805 static tree
8806 tsubst_friend_class (tree friend_tmpl, tree args)
8808 tree friend_type;
8809 tree tmpl;
8810 tree context;
8812 if (DECL_TEMPLATE_TEMPLATE_PARM_P (friend_tmpl))
8814 tree t = tsubst (TREE_TYPE (friend_tmpl), args, tf_none, NULL_TREE);
8815 return TREE_TYPE (t);
8818 context = CP_DECL_CONTEXT (friend_tmpl);
8820 if (context != global_namespace)
8822 if (TREE_CODE (context) == NAMESPACE_DECL)
8823 push_nested_namespace (context);
8824 else
8825 push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
8828 /* Look for a class template declaration. We look for hidden names
8829 because two friend declarations of the same template are the
8830 same. For example, in:
8832 struct A {
8833 template <typename> friend class F;
8835 template <typename> struct B {
8836 template <typename> friend class F;
8839 both F templates are the same. */
8840 tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
8841 /*block_p=*/true, 0, LOOKUP_HIDDEN);
8843 /* But, if we don't find one, it might be because we're in a
8844 situation like this:
8846 template <class T>
8847 struct S {
8848 template <class U>
8849 friend struct S;
8852 Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
8853 for `S<int>', not the TEMPLATE_DECL. */
8854 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
8856 tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
8857 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
8860 if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
8862 /* The friend template has already been declared. Just
8863 check to see that the declarations match, and install any new
8864 default parameters. We must tsubst the default parameters,
8865 of course. We only need the innermost template parameters
8866 because that is all that redeclare_class_template will look
8867 at. */
8868 if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
8869 > TMPL_ARGS_DEPTH (args))
8871 tree parms;
8872 location_t saved_input_location;
8873 parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
8874 args, tf_warning_or_error);
8876 saved_input_location = input_location;
8877 input_location = DECL_SOURCE_LOCATION (friend_tmpl);
8878 redeclare_class_template (TREE_TYPE (tmpl), parms);
8879 input_location = saved_input_location;
8883 friend_type = TREE_TYPE (tmpl);
8885 else
8887 /* The friend template has not already been declared. In this
8888 case, the instantiation of the template class will cause the
8889 injection of this template into the global scope. */
8890 tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
8891 if (tmpl == error_mark_node)
8892 return error_mark_node;
8894 /* The new TMPL is not an instantiation of anything, so we
8895 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE for
8896 the new type because that is supposed to be the corresponding
8897 template decl, i.e., TMPL. */
8898 DECL_USE_TEMPLATE (tmpl) = 0;
8899 DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
8900 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
8901 CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
8902 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
8904 /* Inject this template into the global scope. */
8905 friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
8908 if (context != global_namespace)
8910 if (TREE_CODE (context) == NAMESPACE_DECL)
8911 pop_nested_namespace (context);
8912 else
8913 pop_nested_class ();
8916 return friend_type;
8919 /* Returns zero if TYPE cannot be completed later due to circularity.
8920 Otherwise returns one. */
8922 static int
8923 can_complete_type_without_circularity (tree type)
8925 if (type == NULL_TREE || type == error_mark_node)
8926 return 0;
8927 else if (COMPLETE_TYPE_P (type))
8928 return 1;
8929 else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
8930 return can_complete_type_without_circularity (TREE_TYPE (type));
8931 else if (CLASS_TYPE_P (type)
8932 && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
8933 return 0;
8934 else
8935 return 1;
8938 static tree tsubst_omp_clauses (tree, bool, tree, tsubst_flags_t, tree);
8940 /* Apply any attributes which had to be deferred until instantiation
8941 time. DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
8942 ARGS, COMPLAIN, IN_DECL are as tsubst. */
8944 static void
8945 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
8946 tree args, tsubst_flags_t complain, tree in_decl)
8948 tree last_dep = NULL_TREE;
8949 tree t;
8950 tree *p;
8952 for (t = attributes; t; t = TREE_CHAIN (t))
8953 if (ATTR_IS_DEPENDENT (t))
8955 last_dep = t;
8956 attributes = copy_list (attributes);
8957 break;
8960 if (DECL_P (*decl_p))
8962 if (TREE_TYPE (*decl_p) == error_mark_node)
8963 return;
8964 p = &DECL_ATTRIBUTES (*decl_p);
8966 else
8967 p = &TYPE_ATTRIBUTES (*decl_p);
8969 if (last_dep)
8971 tree late_attrs = NULL_TREE;
8972 tree *q = &late_attrs;
8974 for (*p = attributes; *p; )
8976 t = *p;
8977 if (ATTR_IS_DEPENDENT (t))
8979 *p = TREE_CHAIN (t);
8980 TREE_CHAIN (t) = NULL_TREE;
8981 if ((flag_openmp || flag_cilkplus)
8982 && is_attribute_p ("omp declare simd",
8983 get_attribute_name (t))
8984 && TREE_VALUE (t))
8986 tree clauses = TREE_VALUE (TREE_VALUE (t));
8987 clauses = tsubst_omp_clauses (clauses, true, args,
8988 complain, in_decl);
8989 c_omp_declare_simd_clauses_to_decls (*decl_p, clauses);
8990 clauses = finish_omp_clauses (clauses);
8991 tree parms = DECL_ARGUMENTS (*decl_p);
8992 clauses
8993 = c_omp_declare_simd_clauses_to_numbers (parms, clauses);
8994 if (clauses)
8995 TREE_VALUE (TREE_VALUE (t)) = clauses;
8996 else
8997 TREE_VALUE (t) = NULL_TREE;
8999 /* If the first attribute argument is an identifier, don't
9000 pass it through tsubst. Attributes like mode, format,
9001 cleanup and several target specific attributes expect it
9002 unmodified. */
9003 else if (attribute_takes_identifier_p (get_attribute_name (t))
9004 && TREE_VALUE (t))
9006 tree chain
9007 = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
9008 in_decl,
9009 /*integral_constant_expression_p=*/false);
9010 if (chain != TREE_CHAIN (TREE_VALUE (t)))
9011 TREE_VALUE (t)
9012 = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
9013 chain);
9015 else if (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t)))
9017 /* An attribute pack expansion. */
9018 tree purp = TREE_PURPOSE (t);
9019 tree pack = (tsubst_pack_expansion
9020 (TREE_VALUE (t), args, complain, in_decl));
9021 int len = TREE_VEC_LENGTH (pack);
9022 for (int i = 0; i < len; ++i)
9024 tree elt = TREE_VEC_ELT (pack, i);
9025 *q = build_tree_list (purp, elt);
9026 q = &TREE_CHAIN (*q);
9028 continue;
9030 else
9031 TREE_VALUE (t)
9032 = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
9033 /*integral_constant_expression_p=*/false);
9034 *q = t;
9035 q = &TREE_CHAIN (t);
9037 else
9038 p = &TREE_CHAIN (t);
9041 cplus_decl_attributes (decl_p, late_attrs, attr_flags);
9045 /* Perform (or defer) access check for typedefs that were referenced
9046 from within the template TMPL code.
9047 This is a subroutine of instantiate_decl and instantiate_class_template.
9048 TMPL is the template to consider and TARGS is the list of arguments of
9049 that template. */
9051 static void
9052 perform_typedefs_access_check (tree tmpl, tree targs)
9054 location_t saved_location;
9055 unsigned i;
9056 qualified_typedef_usage_t *iter;
9058 if (!tmpl
9059 || (!CLASS_TYPE_P (tmpl)
9060 && TREE_CODE (tmpl) != FUNCTION_DECL))
9061 return;
9063 saved_location = input_location;
9064 FOR_EACH_VEC_SAFE_ELT (get_types_needing_access_check (tmpl), i, iter)
9066 tree type_decl = iter->typedef_decl;
9067 tree type_scope = iter->context;
9069 if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
9070 continue;
9072 if (uses_template_parms (type_decl))
9073 type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
9074 if (uses_template_parms (type_scope))
9075 type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
9077 /* Make access check error messages point to the location
9078 of the use of the typedef. */
9079 input_location = iter->locus;
9080 perform_or_defer_access_check (TYPE_BINFO (type_scope),
9081 type_decl, type_decl,
9082 tf_warning_or_error);
9084 input_location = saved_location;
9087 static tree
9088 instantiate_class_template_1 (tree type)
9090 tree templ, args, pattern, t, member;
9091 tree typedecl;
9092 tree pbinfo;
9093 tree base_list;
9094 unsigned int saved_maximum_field_alignment;
9095 tree fn_context;
9097 if (type == error_mark_node)
9098 return error_mark_node;
9100 if (COMPLETE_OR_OPEN_TYPE_P (type)
9101 || uses_template_parms (type))
9102 return type;
9104 /* Figure out which template is being instantiated. */
9105 templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
9106 gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
9108 /* Determine what specialization of the original template to
9109 instantiate. */
9110 t = most_specialized_partial_spec (type, tf_warning_or_error);
9111 if (t == error_mark_node)
9113 TYPE_BEING_DEFINED (type) = 1;
9114 return error_mark_node;
9116 else if (t)
9118 /* This TYPE is actually an instantiation of a partial
9119 specialization. We replace the innermost set of ARGS with
9120 the arguments appropriate for substitution. For example,
9121 given:
9123 template <class T> struct S {};
9124 template <class T> struct S<T*> {};
9126 and supposing that we are instantiating S<int*>, ARGS will
9127 presently be {int*} -- but we need {int}. */
9128 pattern = TREE_TYPE (t);
9129 args = TREE_PURPOSE (t);
9131 else
9133 pattern = TREE_TYPE (templ);
9134 args = CLASSTYPE_TI_ARGS (type);
9137 /* If the template we're instantiating is incomplete, then clearly
9138 there's nothing we can do. */
9139 if (!COMPLETE_TYPE_P (pattern))
9140 return type;
9142 /* If we've recursively instantiated too many templates, stop. */
9143 if (! push_tinst_level (type))
9144 return type;
9146 /* Now we're really doing the instantiation. Mark the type as in
9147 the process of being defined. */
9148 TYPE_BEING_DEFINED (type) = 1;
9150 /* We may be in the middle of deferred access check. Disable
9151 it now. */
9152 push_deferring_access_checks (dk_no_deferred);
9154 fn_context = decl_function_context (TYPE_MAIN_DECL (type));
9155 /* Also avoid push_to_top_level for a lambda in an NSDMI. */
9156 if (!fn_context && LAMBDA_TYPE_P (type) && TYPE_CLASS_SCOPE_P (type))
9157 fn_context = error_mark_node;
9158 if (!fn_context)
9159 push_to_top_level ();
9160 /* Use #pragma pack from the template context. */
9161 saved_maximum_field_alignment = maximum_field_alignment;
9162 maximum_field_alignment = TYPE_PRECISION (pattern);
9164 SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
9166 /* Set the input location to the most specialized template definition.
9167 This is needed if tsubsting causes an error. */
9168 typedecl = TYPE_MAIN_DECL (pattern);
9169 input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) =
9170 DECL_SOURCE_LOCATION (typedecl);
9172 TYPE_PACKED (type) = TYPE_PACKED (pattern);
9173 TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
9174 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
9175 TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
9176 if (ANON_AGGR_TYPE_P (pattern))
9177 SET_ANON_AGGR_TYPE_P (type);
9178 if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
9180 CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
9181 CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
9182 /* Adjust visibility for template arguments. */
9183 determine_visibility (TYPE_MAIN_DECL (type));
9185 if (CLASS_TYPE_P (type))
9186 CLASSTYPE_FINAL (type) = CLASSTYPE_FINAL (pattern);
9188 pbinfo = TYPE_BINFO (pattern);
9190 /* We should never instantiate a nested class before its enclosing
9191 class; we need to look up the nested class by name before we can
9192 instantiate it, and that lookup should instantiate the enclosing
9193 class. */
9194 gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
9195 || COMPLETE_OR_OPEN_TYPE_P (TYPE_CONTEXT (type)));
9197 base_list = NULL_TREE;
9198 if (BINFO_N_BASE_BINFOS (pbinfo))
9200 tree pbase_binfo;
9201 tree pushed_scope;
9202 int i;
9204 /* We must enter the scope containing the type, as that is where
9205 the accessibility of types named in dependent bases are
9206 looked up from. */
9207 pushed_scope = push_scope (CP_TYPE_CONTEXT (type));
9209 /* Substitute into each of the bases to determine the actual
9210 basetypes. */
9211 for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
9213 tree base;
9214 tree access = BINFO_BASE_ACCESS (pbinfo, i);
9215 tree expanded_bases = NULL_TREE;
9216 int idx, len = 1;
9218 if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
9220 expanded_bases =
9221 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
9222 args, tf_error, NULL_TREE);
9223 if (expanded_bases == error_mark_node)
9224 continue;
9226 len = TREE_VEC_LENGTH (expanded_bases);
9229 for (idx = 0; idx < len; idx++)
9231 if (expanded_bases)
9232 /* Extract the already-expanded base class. */
9233 base = TREE_VEC_ELT (expanded_bases, idx);
9234 else
9235 /* Substitute to figure out the base class. */
9236 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error,
9237 NULL_TREE);
9239 if (base == error_mark_node)
9240 continue;
9242 base_list = tree_cons (access, base, base_list);
9243 if (BINFO_VIRTUAL_P (pbase_binfo))
9244 TREE_TYPE (base_list) = integer_type_node;
9248 /* The list is now in reverse order; correct that. */
9249 base_list = nreverse (base_list);
9251 if (pushed_scope)
9252 pop_scope (pushed_scope);
9254 /* Now call xref_basetypes to set up all the base-class
9255 information. */
9256 xref_basetypes (type, base_list);
9258 apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
9259 (int) ATTR_FLAG_TYPE_IN_PLACE,
9260 args, tf_error, NULL_TREE);
9261 fixup_attribute_variants (type);
9263 /* Now that our base classes are set up, enter the scope of the
9264 class, so that name lookups into base classes, etc. will work
9265 correctly. This is precisely analogous to what we do in
9266 begin_class_definition when defining an ordinary non-template
9267 class, except we also need to push the enclosing classes. */
9268 push_nested_class (type);
9270 /* Now members are processed in the order of declaration. */
9271 for (member = CLASSTYPE_DECL_LIST (pattern);
9272 member; member = TREE_CHAIN (member))
9274 tree t = TREE_VALUE (member);
9276 if (TREE_PURPOSE (member))
9278 if (TYPE_P (t))
9280 /* Build new CLASSTYPE_NESTED_UTDS. */
9282 tree newtag;
9283 bool class_template_p;
9285 class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
9286 && TYPE_LANG_SPECIFIC (t)
9287 && CLASSTYPE_IS_TEMPLATE (t));
9288 /* If the member is a class template, then -- even after
9289 substitution -- there may be dependent types in the
9290 template argument list for the class. We increment
9291 PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
9292 that function will assume that no types are dependent
9293 when outside of a template. */
9294 if (class_template_p)
9295 ++processing_template_decl;
9296 newtag = tsubst (t, args, tf_error, NULL_TREE);
9297 if (class_template_p)
9298 --processing_template_decl;
9299 if (newtag == error_mark_node)
9300 continue;
9302 if (TREE_CODE (newtag) != ENUMERAL_TYPE)
9304 tree name = TYPE_IDENTIFIER (t);
9306 if (class_template_p)
9307 /* Unfortunately, lookup_template_class sets
9308 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
9309 instantiation (i.e., for the type of a member
9310 template class nested within a template class.)
9311 This behavior is required for
9312 maybe_process_partial_specialization to work
9313 correctly, but is not accurate in this case;
9314 the TAG is not an instantiation of anything.
9315 (The corresponding TEMPLATE_DECL is an
9316 instantiation, but the TYPE is not.) */
9317 CLASSTYPE_USE_TEMPLATE (newtag) = 0;
9319 /* Now, we call pushtag to put this NEWTAG into the scope of
9320 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
9321 pushtag calling push_template_decl. We don't have to do
9322 this for enums because it will already have been done in
9323 tsubst_enum. */
9324 if (name)
9325 SET_IDENTIFIER_TYPE_VALUE (name, newtag);
9326 pushtag (name, newtag, /*tag_scope=*/ts_current);
9329 else if (DECL_DECLARES_FUNCTION_P (t))
9331 /* Build new TYPE_METHODS. */
9332 tree r;
9334 if (TREE_CODE (t) == TEMPLATE_DECL)
9335 ++processing_template_decl;
9336 r = tsubst (t, args, tf_error, NULL_TREE);
9337 if (TREE_CODE (t) == TEMPLATE_DECL)
9338 --processing_template_decl;
9339 set_current_access_from_decl (r);
9340 finish_member_declaration (r);
9341 /* Instantiate members marked with attribute used. */
9342 if (r != error_mark_node && DECL_PRESERVE_P (r))
9343 mark_used (r);
9344 if (TREE_CODE (r) == FUNCTION_DECL
9345 && DECL_OMP_DECLARE_REDUCTION_P (r))
9346 cp_check_omp_declare_reduction (r);
9348 else if (DECL_CLASS_TEMPLATE_P (t)
9349 && LAMBDA_TYPE_P (TREE_TYPE (t)))
9350 /* A closure type for a lambda in a default argument for a
9351 member template. Ignore it; it will be instantiated with
9352 the default argument. */;
9353 else
9355 /* Build new TYPE_FIELDS. */
9356 if (TREE_CODE (t) == STATIC_ASSERT)
9358 tree condition;
9360 ++c_inhibit_evaluation_warnings;
9361 condition =
9362 tsubst_expr (STATIC_ASSERT_CONDITION (t), args,
9363 tf_warning_or_error, NULL_TREE,
9364 /*integral_constant_expression_p=*/true);
9365 --c_inhibit_evaluation_warnings;
9367 finish_static_assert (condition,
9368 STATIC_ASSERT_MESSAGE (t),
9369 STATIC_ASSERT_SOURCE_LOCATION (t),
9370 /*member_p=*/true);
9372 else if (TREE_CODE (t) != CONST_DECL)
9374 tree r;
9375 tree vec = NULL_TREE;
9376 int len = 1;
9378 /* The file and line for this declaration, to
9379 assist in error message reporting. Since we
9380 called push_tinst_level above, we don't need to
9381 restore these. */
9382 input_location = DECL_SOURCE_LOCATION (t);
9384 if (TREE_CODE (t) == TEMPLATE_DECL)
9385 ++processing_template_decl;
9386 r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
9387 if (TREE_CODE (t) == TEMPLATE_DECL)
9388 --processing_template_decl;
9390 if (TREE_CODE (r) == TREE_VEC)
9392 /* A capture pack became multiple fields. */
9393 vec = r;
9394 len = TREE_VEC_LENGTH (vec);
9397 for (int i = 0; i < len; ++i)
9399 if (vec)
9400 r = TREE_VEC_ELT (vec, i);
9401 if (VAR_P (r))
9403 /* In [temp.inst]:
9405 [t]he initialization (and any associated
9406 side-effects) of a static data member does
9407 not occur unless the static data member is
9408 itself used in a way that requires the
9409 definition of the static data member to
9410 exist.
9412 Therefore, we do not substitute into the
9413 initialized for the static data member here. */
9414 finish_static_data_member_decl
9416 /*init=*/NULL_TREE,
9417 /*init_const_expr_p=*/false,
9418 /*asmspec_tree=*/NULL_TREE,
9419 /*flags=*/0);
9420 /* Instantiate members marked with attribute used. */
9421 if (r != error_mark_node && DECL_PRESERVE_P (r))
9422 mark_used (r);
9424 else if (TREE_CODE (r) == FIELD_DECL)
9426 /* Determine whether R has a valid type and can be
9427 completed later. If R is invalid, then its type
9428 is replaced by error_mark_node. */
9429 tree rtype = TREE_TYPE (r);
9430 if (can_complete_type_without_circularity (rtype))
9431 complete_type (rtype);
9433 if (!COMPLETE_TYPE_P (rtype))
9435 cxx_incomplete_type_error (r, rtype);
9436 TREE_TYPE (r) = error_mark_node;
9440 /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
9441 such a thing will already have been added to the field
9442 list by tsubst_enum in finish_member_declaration in the
9443 CLASSTYPE_NESTED_UTDS case above. */
9444 if (!(TREE_CODE (r) == TYPE_DECL
9445 && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
9446 && DECL_ARTIFICIAL (r)))
9448 set_current_access_from_decl (r);
9449 finish_member_declaration (r);
9455 else
9457 if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t)
9458 || DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9460 /* Build new CLASSTYPE_FRIEND_CLASSES. */
9462 tree friend_type = t;
9463 bool adjust_processing_template_decl = false;
9465 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
9467 /* template <class T> friend class C; */
9468 friend_type = tsubst_friend_class (friend_type, args);
9469 adjust_processing_template_decl = true;
9471 else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
9473 /* template <class T> friend class C::D; */
9474 friend_type = tsubst (friend_type, args,
9475 tf_warning_or_error, NULL_TREE);
9476 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
9477 friend_type = TREE_TYPE (friend_type);
9478 adjust_processing_template_decl = true;
9480 else if (TREE_CODE (friend_type) == TYPENAME_TYPE
9481 || TREE_CODE (friend_type) == TEMPLATE_TYPE_PARM)
9483 /* This could be either
9485 friend class T::C;
9487 when dependent_type_p is false or
9489 template <class U> friend class T::C;
9491 otherwise. */
9492 friend_type = tsubst (friend_type, args,
9493 tf_warning_or_error, NULL_TREE);
9494 /* Bump processing_template_decl for correct
9495 dependent_type_p calculation. */
9496 ++processing_template_decl;
9497 if (dependent_type_p (friend_type))
9498 adjust_processing_template_decl = true;
9499 --processing_template_decl;
9501 else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
9502 && hidden_name_p (TYPE_NAME (friend_type)))
9504 /* friend class C;
9506 where C hasn't been declared yet. Let's lookup name
9507 from namespace scope directly, bypassing any name that
9508 come from dependent base class. */
9509 tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
9511 /* The call to xref_tag_from_type does injection for friend
9512 classes. */
9513 push_nested_namespace (ns);
9514 friend_type =
9515 xref_tag_from_type (friend_type, NULL_TREE,
9516 /*tag_scope=*/ts_current);
9517 pop_nested_namespace (ns);
9519 else if (uses_template_parms (friend_type))
9520 /* friend class C<T>; */
9521 friend_type = tsubst (friend_type, args,
9522 tf_warning_or_error, NULL_TREE);
9523 /* Otherwise it's
9525 friend class C;
9527 where C is already declared or
9529 friend class C<int>;
9531 We don't have to do anything in these cases. */
9533 if (adjust_processing_template_decl)
9534 /* Trick make_friend_class into realizing that the friend
9535 we're adding is a template, not an ordinary class. It's
9536 important that we use make_friend_class since it will
9537 perform some error-checking and output cross-reference
9538 information. */
9539 ++processing_template_decl;
9541 if (friend_type != error_mark_node)
9542 make_friend_class (type, friend_type, /*complain=*/false);
9544 if (adjust_processing_template_decl)
9545 --processing_template_decl;
9547 else
9549 /* Build new DECL_FRIENDLIST. */
9550 tree r;
9552 /* The file and line for this declaration, to
9553 assist in error message reporting. Since we
9554 called push_tinst_level above, we don't need to
9555 restore these. */
9556 input_location = DECL_SOURCE_LOCATION (t);
9558 if (TREE_CODE (t) == TEMPLATE_DECL)
9560 ++processing_template_decl;
9561 push_deferring_access_checks (dk_no_check);
9564 r = tsubst_friend_function (t, args);
9565 add_friend (type, r, /*complain=*/false);
9566 if (TREE_CODE (t) == TEMPLATE_DECL)
9568 pop_deferring_access_checks ();
9569 --processing_template_decl;
9575 if (tree expr = CLASSTYPE_LAMBDA_EXPR (type))
9577 tree decl = lambda_function (type);
9578 if (decl)
9580 if (!DECL_TEMPLATE_INFO (decl)
9581 || DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (decl)) != decl)
9582 instantiate_decl (decl, false, false);
9584 /* We need to instantiate the capture list from the template
9585 after we've instantiated the closure members, but before we
9586 consider adding the conversion op. Also keep any captures
9587 that may have been added during instantiation of the op(). */
9588 tree tmpl_expr = CLASSTYPE_LAMBDA_EXPR (pattern);
9589 tree tmpl_cap
9590 = tsubst_copy_and_build (LAMBDA_EXPR_CAPTURE_LIST (tmpl_expr),
9591 args, tf_warning_or_error, NULL_TREE,
9592 false, false);
9594 LAMBDA_EXPR_CAPTURE_LIST (expr)
9595 = chainon (tmpl_cap, nreverse (LAMBDA_EXPR_CAPTURE_LIST (expr)));
9597 maybe_add_lambda_conv_op (type);
9599 else
9600 gcc_assert (errorcount);
9603 /* Set the file and line number information to whatever is given for
9604 the class itself. This puts error messages involving generated
9605 implicit functions at a predictable point, and the same point
9606 that would be used for non-template classes. */
9607 input_location = DECL_SOURCE_LOCATION (typedecl);
9609 unreverse_member_declarations (type);
9610 finish_struct_1 (type);
9611 TYPE_BEING_DEFINED (type) = 0;
9613 /* We don't instantiate default arguments for member functions. 14.7.1:
9615 The implicit instantiation of a class template specialization causes
9616 the implicit instantiation of the declarations, but not of the
9617 definitions or default arguments, of the class member functions,
9618 member classes, static data members and member templates.... */
9620 /* Some typedefs referenced from within the template code need to be access
9621 checked at template instantiation time, i.e now. These types were
9622 added to the template at parsing time. Let's get those and perform
9623 the access checks then. */
9624 perform_typedefs_access_check (pattern, args);
9625 perform_deferred_access_checks (tf_warning_or_error);
9626 pop_nested_class ();
9627 maximum_field_alignment = saved_maximum_field_alignment;
9628 if (!fn_context)
9629 pop_from_top_level ();
9630 pop_deferring_access_checks ();
9631 pop_tinst_level ();
9633 /* The vtable for a template class can be emitted in any translation
9634 unit in which the class is instantiated. When there is no key
9635 method, however, finish_struct_1 will already have added TYPE to
9636 the keyed_classes list. */
9637 if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
9638 keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
9640 return type;
9643 /* Wrapper for instantiate_class_template_1. */
9645 tree
9646 instantiate_class_template (tree type)
9648 tree ret;
9649 timevar_push (TV_TEMPLATE_INST);
9650 ret = instantiate_class_template_1 (type);
9651 timevar_pop (TV_TEMPLATE_INST);
9652 return ret;
9655 static tree
9656 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9658 tree r;
9660 if (!t)
9661 r = t;
9662 else if (TYPE_P (t))
9663 r = tsubst (t, args, complain, in_decl);
9664 else
9666 if (!(complain & tf_warning))
9667 ++c_inhibit_evaluation_warnings;
9668 r = tsubst_expr (t, args, complain, in_decl,
9669 /*integral_constant_expression_p=*/true);
9670 if (!(complain & tf_warning))
9671 --c_inhibit_evaluation_warnings;
9673 return r;
9676 /* Given a function parameter pack TMPL_PARM and some function parameters
9677 instantiated from it at *SPEC_P, return a NONTYPE_ARGUMENT_PACK of them
9678 and set *SPEC_P to point at the next point in the list. */
9680 static tree
9681 extract_fnparm_pack (tree tmpl_parm, tree *spec_p)
9683 /* Collect all of the extra "packed" parameters into an
9684 argument pack. */
9685 tree parmvec;
9686 tree parmtypevec;
9687 tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
9688 tree argtypepack = cxx_make_type (TYPE_ARGUMENT_PACK);
9689 tree spec_parm = *spec_p;
9690 int i, len;
9692 for (len = 0; spec_parm; ++len, spec_parm = TREE_CHAIN (spec_parm))
9693 if (tmpl_parm
9694 && !function_parameter_expanded_from_pack_p (spec_parm, tmpl_parm))
9695 break;
9697 /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters. */
9698 parmvec = make_tree_vec (len);
9699 parmtypevec = make_tree_vec (len);
9700 spec_parm = *spec_p;
9701 for (i = 0; i < len; i++, spec_parm = DECL_CHAIN (spec_parm))
9703 TREE_VEC_ELT (parmvec, i) = spec_parm;
9704 TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
9707 /* Build the argument packs. */
9708 SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
9709 SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
9710 TREE_TYPE (argpack) = argtypepack;
9711 *spec_p = spec_parm;
9713 return argpack;
9716 /* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
9717 NONTYPE_ARGUMENT_PACK. */
9719 static tree
9720 make_fnparm_pack (tree spec_parm)
9722 return extract_fnparm_pack (NULL_TREE, &spec_parm);
9725 /* Return true iff the Ith element of the argument pack ARG_PACK is a
9726 pack expansion. */
9728 static bool
9729 argument_pack_element_is_expansion_p (tree arg_pack, int i)
9731 tree vec = ARGUMENT_PACK_ARGS (arg_pack);
9732 if (i >= TREE_VEC_LENGTH (vec))
9733 return false;
9734 return PACK_EXPANSION_P (TREE_VEC_ELT (vec, i));
9738 /* Creates and return an ARGUMENT_PACK_SELECT tree node. */
9740 static tree
9741 make_argument_pack_select (tree arg_pack, unsigned index)
9743 tree aps = make_node (ARGUMENT_PACK_SELECT);
9745 ARGUMENT_PACK_SELECT_FROM_PACK (aps) = arg_pack;
9746 ARGUMENT_PACK_SELECT_INDEX (aps) = index;
9748 return aps;
9751 /* This is a subroutine of tsubst_pack_expansion.
9753 It returns TRUE if we need to use the PACK_EXPANSION_EXTRA_ARGS
9754 mechanism to store the (non complete list of) arguments of the
9755 substitution and return a non substituted pack expansion, in order
9756 to wait for when we have enough arguments to really perform the
9757 substitution. */
9759 static bool
9760 use_pack_expansion_extra_args_p (tree parm_packs,
9761 int arg_pack_len,
9762 bool has_empty_arg)
9764 /* If one pack has an expansion and another pack has a normal
9765 argument or if one pack has an empty argument and an another
9766 one hasn't then tsubst_pack_expansion cannot perform the
9767 substitution and need to fall back on the
9768 PACK_EXPANSION_EXTRA mechanism. */
9769 if (parm_packs == NULL_TREE)
9770 return false;
9771 else if (has_empty_arg)
9772 return true;
9774 bool has_expansion_arg = false;
9775 for (int i = 0 ; i < arg_pack_len; ++i)
9777 bool has_non_expansion_arg = false;
9778 for (tree parm_pack = parm_packs;
9779 parm_pack;
9780 parm_pack = TREE_CHAIN (parm_pack))
9782 tree arg = TREE_VALUE (parm_pack);
9784 if (argument_pack_element_is_expansion_p (arg, i))
9785 has_expansion_arg = true;
9786 else
9787 has_non_expansion_arg = true;
9790 if (has_expansion_arg && has_non_expansion_arg)
9791 return true;
9793 return false;
9796 /* [temp.variadic]/6 says that:
9798 The instantiation of a pack expansion [...]
9799 produces a list E1,E2, ..., En, where N is the number of elements
9800 in the pack expansion parameters.
9802 This subroutine of tsubst_pack_expansion produces one of these Ei.
9804 PATTERN is the pattern of the pack expansion. PARM_PACKS is a
9805 TREE_LIST in which each TREE_PURPOSE is a parameter pack of
9806 PATTERN, and each TREE_VALUE is its corresponding argument pack.
9807 INDEX is the index 'i' of the element Ei to produce. ARGS,
9808 COMPLAIN, and IN_DECL are the same parameters as for the
9809 tsubst_pack_expansion function.
9811 The function returns the resulting Ei upon successful completion,
9812 or error_mark_node.
9814 Note that this function possibly modifies the ARGS parameter, so
9815 it's the responsibility of the caller to restore it. */
9817 static tree
9818 gen_elem_of_pack_expansion_instantiation (tree pattern,
9819 tree parm_packs,
9820 unsigned index,
9821 tree args /* This parm gets
9822 modified. */,
9823 tsubst_flags_t complain,
9824 tree in_decl)
9826 tree t;
9827 bool ith_elem_is_expansion = false;
9829 /* For each parameter pack, change the substitution of the parameter
9830 pack to the ith argument in its argument pack, then expand the
9831 pattern. */
9832 for (tree pack = parm_packs; pack; pack = TREE_CHAIN (pack))
9834 tree parm = TREE_PURPOSE (pack);
9835 tree arg_pack = TREE_VALUE (pack);
9836 tree aps; /* instance of ARGUMENT_PACK_SELECT. */
9838 ith_elem_is_expansion |=
9839 argument_pack_element_is_expansion_p (arg_pack, index);
9841 /* Select the Ith argument from the pack. */
9842 if (TREE_CODE (parm) == PARM_DECL
9843 || TREE_CODE (parm) == FIELD_DECL)
9845 if (index == 0)
9847 aps = make_argument_pack_select (arg_pack, index);
9848 if (!mark_used (parm, complain) && !(complain & tf_error))
9849 return error_mark_node;
9850 register_local_specialization (aps, parm);
9852 else
9853 aps = retrieve_local_specialization (parm);
9855 else
9857 int idx, level;
9858 template_parm_level_and_index (parm, &level, &idx);
9860 if (index == 0)
9862 aps = make_argument_pack_select (arg_pack, index);
9863 /* Update the corresponding argument. */
9864 TMPL_ARG (args, level, idx) = aps;
9866 else
9867 /* Re-use the ARGUMENT_PACK_SELECT. */
9868 aps = TMPL_ARG (args, level, idx);
9870 ARGUMENT_PACK_SELECT_INDEX (aps) = index;
9873 /* Substitute into the PATTERN with the (possibly altered)
9874 arguments. */
9875 if (pattern == in_decl)
9876 /* Expanding a fixed parameter pack from
9877 coerce_template_parameter_pack. */
9878 t = tsubst_decl (pattern, args, complain);
9879 else if (!TYPE_P (pattern))
9880 t = tsubst_expr (pattern, args, complain, in_decl,
9881 /*integral_constant_expression_p=*/false);
9882 else
9883 t = tsubst (pattern, args, complain, in_decl);
9885 /* If the Ith argument pack element is a pack expansion, then
9886 the Ith element resulting from the substituting is going to
9887 be a pack expansion as well. */
9888 if (ith_elem_is_expansion)
9889 t = make_pack_expansion (t);
9891 return t;
9894 /* Substitute ARGS into T, which is an pack expansion
9895 (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
9896 TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
9897 (if only a partial substitution could be performed) or
9898 ERROR_MARK_NODE if there was an error. */
9899 tree
9900 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
9901 tree in_decl)
9903 tree pattern;
9904 tree pack, packs = NULL_TREE;
9905 bool unsubstituted_packs = false;
9906 int i, len = -1;
9907 tree result;
9908 hash_map<tree, tree> *saved_local_specializations = NULL;
9909 bool need_local_specializations = false;
9910 int levels;
9912 gcc_assert (PACK_EXPANSION_P (t));
9913 pattern = PACK_EXPANSION_PATTERN (t);
9915 /* Add in any args remembered from an earlier partial instantiation. */
9916 args = add_to_template_args (PACK_EXPANSION_EXTRA_ARGS (t), args);
9918 levels = TMPL_ARGS_DEPTH (args);
9920 /* Determine the argument packs that will instantiate the parameter
9921 packs used in the expansion expression. While we're at it,
9922 compute the number of arguments to be expanded and make sure it
9923 is consistent. */
9924 for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack;
9925 pack = TREE_CHAIN (pack))
9927 tree parm_pack = TREE_VALUE (pack);
9928 tree arg_pack = NULL_TREE;
9929 tree orig_arg = NULL_TREE;
9930 int level = 0;
9932 if (TREE_CODE (parm_pack) == BASES)
9934 if (BASES_DIRECT (parm_pack))
9935 return calculate_direct_bases (tsubst_expr (BASES_TYPE (parm_pack),
9936 args, complain, in_decl, false));
9937 else
9938 return calculate_bases (tsubst_expr (BASES_TYPE (parm_pack),
9939 args, complain, in_decl, false));
9941 if (TREE_CODE (parm_pack) == PARM_DECL)
9943 if (PACK_EXPANSION_LOCAL_P (t))
9944 arg_pack = retrieve_local_specialization (parm_pack);
9945 else
9947 /* We can't rely on local_specializations for a parameter
9948 name used later in a function declaration (such as in a
9949 late-specified return type). Even if it exists, it might
9950 have the wrong value for a recursive call. Just make a
9951 dummy decl, since it's only used for its type. */
9952 arg_pack = tsubst_decl (parm_pack, args, complain);
9953 if (arg_pack && DECL_PACK_P (arg_pack))
9954 /* Partial instantiation of the parm_pack, we can't build
9955 up an argument pack yet. */
9956 arg_pack = NULL_TREE;
9957 else
9958 arg_pack = make_fnparm_pack (arg_pack);
9959 need_local_specializations = true;
9962 else if (TREE_CODE (parm_pack) == FIELD_DECL)
9963 arg_pack = tsubst_copy (parm_pack, args, complain, in_decl);
9964 else
9966 int idx;
9967 template_parm_level_and_index (parm_pack, &level, &idx);
9969 if (level <= levels)
9970 arg_pack = TMPL_ARG (args, level, idx);
9973 orig_arg = arg_pack;
9974 if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
9975 arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
9977 if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
9978 /* This can only happen if we forget to expand an argument
9979 pack somewhere else. Just return an error, silently. */
9981 result = make_tree_vec (1);
9982 TREE_VEC_ELT (result, 0) = error_mark_node;
9983 return result;
9986 if (arg_pack)
9988 int my_len =
9989 TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
9991 /* Don't bother trying to do a partial substitution with
9992 incomplete packs; we'll try again after deduction. */
9993 if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
9994 return t;
9996 if (len < 0)
9997 len = my_len;
9998 else if (len != my_len)
10000 if (!(complain & tf_error))
10001 /* Fail quietly. */;
10002 else if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
10003 error ("mismatched argument pack lengths while expanding "
10004 "%<%T%>",
10005 pattern);
10006 else
10007 error ("mismatched argument pack lengths while expanding "
10008 "%<%E%>",
10009 pattern);
10010 return error_mark_node;
10013 /* Keep track of the parameter packs and their corresponding
10014 argument packs. */
10015 packs = tree_cons (parm_pack, arg_pack, packs);
10016 TREE_TYPE (packs) = orig_arg;
10018 else
10020 /* We can't substitute for this parameter pack. We use a flag as
10021 well as the missing_level counter because function parameter
10022 packs don't have a level. */
10023 unsubstituted_packs = true;
10027 /* If the expansion is just T..., return the matching argument pack. */
10028 if (!unsubstituted_packs
10029 && TREE_PURPOSE (packs) == pattern)
10031 tree args = ARGUMENT_PACK_ARGS (TREE_VALUE (packs));
10032 if (TREE_CODE (t) == TYPE_PACK_EXPANSION
10033 || pack_expansion_args_count (args))
10034 return args;
10035 /* Otherwise use the normal path so we get convert_from_reference. */
10038 /* We cannot expand this expansion expression, because we don't have
10039 all of the argument packs we need. */
10040 if (use_pack_expansion_extra_args_p (packs, len, unsubstituted_packs))
10042 /* We got some full packs, but we can't substitute them in until we
10043 have values for all the packs. So remember these until then. */
10045 t = make_pack_expansion (pattern);
10046 PACK_EXPANSION_EXTRA_ARGS (t) = args;
10047 return t;
10049 else if (unsubstituted_packs)
10051 /* There were no real arguments, we're just replacing a parameter
10052 pack with another version of itself. Substitute into the
10053 pattern and return a PACK_EXPANSION_*. The caller will need to
10054 deal with that. */
10055 if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
10056 t = tsubst_expr (pattern, args, complain, in_decl,
10057 /*integral_constant_expression_p=*/false);
10058 else
10059 t = tsubst (pattern, args, complain, in_decl);
10060 t = make_pack_expansion (t);
10061 return t;
10064 gcc_assert (len >= 0);
10066 if (need_local_specializations)
10068 /* We're in a late-specified return type, so create our own local
10069 specializations map; the current map is either NULL or (in the
10070 case of recursive unification) might have bindings that we don't
10071 want to use or alter. */
10072 saved_local_specializations = local_specializations;
10073 local_specializations = new hash_map<tree, tree>;
10076 /* For each argument in each argument pack, substitute into the
10077 pattern. */
10078 result = make_tree_vec (len);
10079 for (i = 0; i < len; ++i)
10081 t = gen_elem_of_pack_expansion_instantiation (pattern, packs,
10083 args, complain,
10084 in_decl);
10085 TREE_VEC_ELT (result, i) = t;
10086 if (t == error_mark_node)
10088 result = error_mark_node;
10089 break;
10093 /* Update ARGS to restore the substitution from parameter packs to
10094 their argument packs. */
10095 for (pack = packs; pack; pack = TREE_CHAIN (pack))
10097 tree parm = TREE_PURPOSE (pack);
10099 if (TREE_CODE (parm) == PARM_DECL
10100 || TREE_CODE (parm) == FIELD_DECL)
10101 register_local_specialization (TREE_TYPE (pack), parm);
10102 else
10104 int idx, level;
10106 if (TREE_VALUE (pack) == NULL_TREE)
10107 continue;
10109 template_parm_level_and_index (parm, &level, &idx);
10111 /* Update the corresponding argument. */
10112 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
10113 TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
10114 TREE_TYPE (pack);
10115 else
10116 TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
10120 if (need_local_specializations)
10122 delete local_specializations;
10123 local_specializations = saved_local_specializations;
10126 return result;
10129 /* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
10130 TMPL. We do this using DECL_PARM_INDEX, which should work even with
10131 parameter packs; all parms generated from a function parameter pack will
10132 have the same DECL_PARM_INDEX. */
10134 tree
10135 get_pattern_parm (tree parm, tree tmpl)
10137 tree pattern = DECL_TEMPLATE_RESULT (tmpl);
10138 tree patparm;
10140 if (DECL_ARTIFICIAL (parm))
10142 for (patparm = DECL_ARGUMENTS (pattern);
10143 patparm; patparm = DECL_CHAIN (patparm))
10144 if (DECL_ARTIFICIAL (patparm)
10145 && DECL_NAME (parm) == DECL_NAME (patparm))
10146 break;
10148 else
10150 patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
10151 patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
10152 gcc_assert (DECL_PARM_INDEX (patparm)
10153 == DECL_PARM_INDEX (parm));
10156 return patparm;
10159 /* Substitute ARGS into the vector or list of template arguments T. */
10161 static tree
10162 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
10164 tree orig_t = t;
10165 int len, need_new = 0, i, expanded_len_adjust = 0, out;
10166 tree *elts;
10168 if (t == error_mark_node)
10169 return error_mark_node;
10171 len = TREE_VEC_LENGTH (t);
10172 elts = XALLOCAVEC (tree, len);
10174 for (i = 0; i < len; i++)
10176 tree orig_arg = TREE_VEC_ELT (t, i);
10177 tree new_arg;
10179 if (TREE_CODE (orig_arg) == TREE_VEC)
10180 new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
10181 else if (PACK_EXPANSION_P (orig_arg))
10183 /* Substitute into an expansion expression. */
10184 new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
10186 if (TREE_CODE (new_arg) == TREE_VEC)
10187 /* Add to the expanded length adjustment the number of
10188 expanded arguments. We subtract one from this
10189 measurement, because the argument pack expression
10190 itself is already counted as 1 in
10191 LEN. EXPANDED_LEN_ADJUST can actually be negative, if
10192 the argument pack is empty. */
10193 expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
10195 else if (ARGUMENT_PACK_P (orig_arg))
10197 /* Substitute into each of the arguments. */
10198 new_arg = TYPE_P (orig_arg)
10199 ? cxx_make_type (TREE_CODE (orig_arg))
10200 : make_node (TREE_CODE (orig_arg));
10202 SET_ARGUMENT_PACK_ARGS (
10203 new_arg,
10204 tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
10205 args, complain, in_decl));
10207 if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
10208 new_arg = error_mark_node;
10210 if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
10211 TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
10212 complain, in_decl);
10213 TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
10215 if (TREE_TYPE (new_arg) == error_mark_node)
10216 new_arg = error_mark_node;
10219 else
10220 new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
10222 if (new_arg == error_mark_node)
10223 return error_mark_node;
10225 elts[i] = new_arg;
10226 if (new_arg != orig_arg)
10227 need_new = 1;
10230 if (!need_new)
10231 return t;
10233 /* Make space for the expanded arguments coming from template
10234 argument packs. */
10235 t = make_tree_vec (len + expanded_len_adjust);
10236 /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
10237 arguments for a member template.
10238 In that case each TREE_VEC in ORIG_T represents a level of template
10239 arguments, and ORIG_T won't carry any non defaulted argument count.
10240 It will rather be the nested TREE_VECs that will carry one.
10241 In other words, ORIG_T carries a non defaulted argument count only
10242 if it doesn't contain any nested TREE_VEC. */
10243 if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
10245 int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
10246 count += expanded_len_adjust;
10247 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
10249 for (i = 0, out = 0; i < len; i++)
10251 if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
10252 || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
10253 && TREE_CODE (elts[i]) == TREE_VEC)
10255 int idx;
10257 /* Now expand the template argument pack "in place". */
10258 for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
10259 TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
10261 else
10263 TREE_VEC_ELT (t, out) = elts[i];
10264 out++;
10268 return t;
10271 /* Return the result of substituting ARGS into the template parameters
10272 given by PARMS. If there are m levels of ARGS and m + n levels of
10273 PARMS, then the result will contain n levels of PARMS. For
10274 example, if PARMS is `template <class T> template <class U>
10275 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
10276 result will be `template <int*, double, class V>'. */
10278 static tree
10279 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
10281 tree r = NULL_TREE;
10282 tree* new_parms;
10284 /* When substituting into a template, we must set
10285 PROCESSING_TEMPLATE_DECL as the template parameters may be
10286 dependent if they are based on one-another, and the dependency
10287 predicates are short-circuit outside of templates. */
10288 ++processing_template_decl;
10290 for (new_parms = &r;
10291 parms && TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
10292 new_parms = &(TREE_CHAIN (*new_parms)),
10293 parms = TREE_CHAIN (parms))
10295 tree new_vec =
10296 make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
10297 int i;
10299 for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
10301 tree tuple;
10303 if (parms == error_mark_node)
10304 continue;
10306 tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
10308 if (tuple == error_mark_node)
10309 continue;
10311 TREE_VEC_ELT (new_vec, i) =
10312 tsubst_template_parm (tuple, args, complain);
10315 *new_parms =
10316 tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
10317 - TMPL_ARGS_DEPTH (args)),
10318 new_vec, NULL_TREE);
10321 --processing_template_decl;
10323 return r;
10326 /* Return the result of substituting ARGS into one template parameter
10327 given by T. T Must be a TREE_LIST which TREE_VALUE is the template
10328 parameter and which TREE_PURPOSE is the default argument of the
10329 template parameter. */
10331 static tree
10332 tsubst_template_parm (tree t, tree args, tsubst_flags_t complain)
10334 tree default_value, parm_decl;
10336 if (args == NULL_TREE
10337 || t == NULL_TREE
10338 || t == error_mark_node)
10339 return t;
10341 gcc_assert (TREE_CODE (t) == TREE_LIST);
10343 default_value = TREE_PURPOSE (t);
10344 parm_decl = TREE_VALUE (t);
10346 parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
10347 if (TREE_CODE (parm_decl) == PARM_DECL
10348 && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
10349 parm_decl = error_mark_node;
10350 default_value = tsubst_template_arg (default_value, args,
10351 complain, NULL_TREE);
10353 return build_tree_list (default_value, parm_decl);
10356 /* Substitute the ARGS into the indicated aggregate (or enumeration)
10357 type T. If T is not an aggregate or enumeration type, it is
10358 handled as if by tsubst. IN_DECL is as for tsubst. If
10359 ENTERING_SCOPE is nonzero, T is the context for a template which
10360 we are presently tsubst'ing. Return the substituted value. */
10362 static tree
10363 tsubst_aggr_type (tree t,
10364 tree args,
10365 tsubst_flags_t complain,
10366 tree in_decl,
10367 int entering_scope)
10369 if (t == NULL_TREE)
10370 return NULL_TREE;
10372 switch (TREE_CODE (t))
10374 case RECORD_TYPE:
10375 if (TYPE_PTRMEMFUNC_P (t))
10376 return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
10378 /* Else fall through. */
10379 case ENUMERAL_TYPE:
10380 case UNION_TYPE:
10381 if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
10383 tree argvec;
10384 tree context;
10385 tree r;
10386 int saved_unevaluated_operand;
10387 int saved_inhibit_evaluation_warnings;
10389 /* In "sizeof(X<I>)" we need to evaluate "I". */
10390 saved_unevaluated_operand = cp_unevaluated_operand;
10391 cp_unevaluated_operand = 0;
10392 saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
10393 c_inhibit_evaluation_warnings = 0;
10395 /* First, determine the context for the type we are looking
10396 up. */
10397 context = TYPE_CONTEXT (t);
10398 if (context && TYPE_P (context))
10400 context = tsubst_aggr_type (context, args, complain,
10401 in_decl, /*entering_scope=*/1);
10402 /* If context is a nested class inside a class template,
10403 it may still need to be instantiated (c++/33959). */
10404 context = complete_type (context);
10407 /* Then, figure out what arguments are appropriate for the
10408 type we are trying to find. For example, given:
10410 template <class T> struct S;
10411 template <class T, class U> void f(T, U) { S<U> su; }
10413 and supposing that we are instantiating f<int, double>,
10414 then our ARGS will be {int, double}, but, when looking up
10415 S we only want {double}. */
10416 argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
10417 complain, in_decl);
10418 if (argvec == error_mark_node)
10419 r = error_mark_node;
10420 else
10422 r = lookup_template_class (t, argvec, in_decl, context,
10423 entering_scope, complain);
10424 r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
10427 cp_unevaluated_operand = saved_unevaluated_operand;
10428 c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
10430 return r;
10432 else
10433 /* This is not a template type, so there's nothing to do. */
10434 return t;
10436 default:
10437 return tsubst (t, args, complain, in_decl);
10441 /* Substitute into the default argument ARG (a default argument for
10442 FN), which has the indicated TYPE. */
10444 tree
10445 tsubst_default_argument (tree fn, tree type, tree arg, tsubst_flags_t complain)
10447 tree saved_class_ptr = NULL_TREE;
10448 tree saved_class_ref = NULL_TREE;
10449 int errs = errorcount + sorrycount;
10451 /* This can happen in invalid code. */
10452 if (TREE_CODE (arg) == DEFAULT_ARG)
10453 return arg;
10455 /* This default argument came from a template. Instantiate the
10456 default argument here, not in tsubst. In the case of
10457 something like:
10459 template <class T>
10460 struct S {
10461 static T t();
10462 void f(T = t());
10465 we must be careful to do name lookup in the scope of S<T>,
10466 rather than in the current class. */
10467 push_access_scope (fn);
10468 /* The "this" pointer is not valid in a default argument. */
10469 if (cfun)
10471 saved_class_ptr = current_class_ptr;
10472 cp_function_chain->x_current_class_ptr = NULL_TREE;
10473 saved_class_ref = current_class_ref;
10474 cp_function_chain->x_current_class_ref = NULL_TREE;
10477 push_deferring_access_checks(dk_no_deferred);
10478 /* The default argument expression may cause implicitly defined
10479 member functions to be synthesized, which will result in garbage
10480 collection. We must treat this situation as if we were within
10481 the body of function so as to avoid collecting live data on the
10482 stack. */
10483 ++function_depth;
10484 arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
10485 complain, NULL_TREE,
10486 /*integral_constant_expression_p=*/false);
10487 --function_depth;
10488 pop_deferring_access_checks();
10490 /* Restore the "this" pointer. */
10491 if (cfun)
10493 cp_function_chain->x_current_class_ptr = saved_class_ptr;
10494 cp_function_chain->x_current_class_ref = saved_class_ref;
10497 if (errorcount+sorrycount > errs
10498 && (complain & tf_warning_or_error))
10499 inform (input_location,
10500 " when instantiating default argument for call to %D", fn);
10502 /* Make sure the default argument is reasonable. */
10503 arg = check_default_argument (type, arg, complain);
10505 pop_access_scope (fn);
10507 return arg;
10510 /* Substitute into all the default arguments for FN. */
10512 static void
10513 tsubst_default_arguments (tree fn, tsubst_flags_t complain)
10515 tree arg;
10516 tree tmpl_args;
10518 tmpl_args = DECL_TI_ARGS (fn);
10520 /* If this function is not yet instantiated, we certainly don't need
10521 its default arguments. */
10522 if (uses_template_parms (tmpl_args))
10523 return;
10524 /* Don't do this again for clones. */
10525 if (DECL_CLONED_FUNCTION_P (fn))
10526 return;
10528 for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
10529 arg;
10530 arg = TREE_CHAIN (arg))
10531 if (TREE_PURPOSE (arg))
10532 TREE_PURPOSE (arg) = tsubst_default_argument (fn,
10533 TREE_VALUE (arg),
10534 TREE_PURPOSE (arg),
10535 complain);
10538 /* Substitute the ARGS into the T, which is a _DECL. Return the
10539 result of the substitution. Issue error and warning messages under
10540 control of COMPLAIN. */
10542 static tree
10543 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
10545 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
10546 location_t saved_loc;
10547 tree r = NULL_TREE;
10548 tree in_decl = t;
10549 hashval_t hash = 0;
10551 /* Set the filename and linenumber to improve error-reporting. */
10552 saved_loc = input_location;
10553 input_location = DECL_SOURCE_LOCATION (t);
10555 switch (TREE_CODE (t))
10557 case TEMPLATE_DECL:
10559 /* We can get here when processing a member function template,
10560 member class template, or template template parameter. */
10561 tree decl = DECL_TEMPLATE_RESULT (t);
10562 tree spec;
10563 tree tmpl_args;
10564 tree full_args;
10566 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
10568 /* Template template parameter is treated here. */
10569 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10570 if (new_type == error_mark_node)
10571 RETURN (error_mark_node);
10572 /* If we get a real template back, return it. This can happen in
10573 the context of most_specialized_partial_spec. */
10574 if (TREE_CODE (new_type) == TEMPLATE_DECL)
10575 return new_type;
10577 r = copy_decl (t);
10578 DECL_CHAIN (r) = NULL_TREE;
10579 TREE_TYPE (r) = new_type;
10580 DECL_TEMPLATE_RESULT (r)
10581 = build_decl (DECL_SOURCE_LOCATION (decl),
10582 TYPE_DECL, DECL_NAME (decl), new_type);
10583 DECL_TEMPLATE_PARMS (r)
10584 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
10585 complain);
10586 TYPE_NAME (new_type) = r;
10587 break;
10590 /* We might already have an instance of this template.
10591 The ARGS are for the surrounding class type, so the
10592 full args contain the tsubst'd args for the context,
10593 plus the innermost args from the template decl. */
10594 tmpl_args = DECL_CLASS_TEMPLATE_P (t)
10595 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
10596 : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
10597 /* Because this is a template, the arguments will still be
10598 dependent, even after substitution. If
10599 PROCESSING_TEMPLATE_DECL is not set, the dependency
10600 predicates will short-circuit. */
10601 ++processing_template_decl;
10602 full_args = tsubst_template_args (tmpl_args, args,
10603 complain, in_decl);
10604 --processing_template_decl;
10605 if (full_args == error_mark_node)
10606 RETURN (error_mark_node);
10608 /* If this is a default template template argument,
10609 tsubst might not have changed anything. */
10610 if (full_args == tmpl_args)
10611 RETURN (t);
10613 hash = hash_tmpl_and_args (t, full_args);
10614 spec = retrieve_specialization (t, full_args, hash);
10615 if (spec != NULL_TREE)
10617 r = spec;
10618 break;
10621 /* Make a new template decl. It will be similar to the
10622 original, but will record the current template arguments.
10623 We also create a new function declaration, which is just
10624 like the old one, but points to this new template, rather
10625 than the old one. */
10626 r = copy_decl (t);
10627 gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
10628 DECL_CHAIN (r) = NULL_TREE;
10630 DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
10632 if (TREE_CODE (decl) == TYPE_DECL
10633 && !TYPE_DECL_ALIAS_P (decl))
10635 tree new_type;
10636 ++processing_template_decl;
10637 new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10638 --processing_template_decl;
10639 if (new_type == error_mark_node)
10640 RETURN (error_mark_node);
10642 TREE_TYPE (r) = new_type;
10643 /* For a partial specialization, we need to keep pointing to
10644 the primary template. */
10645 if (!DECL_TEMPLATE_SPECIALIZATION (t))
10646 CLASSTYPE_TI_TEMPLATE (new_type) = r;
10647 DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
10648 DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
10649 DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
10651 else
10653 tree new_decl;
10654 ++processing_template_decl;
10655 new_decl = tsubst (decl, args, complain, in_decl);
10656 --processing_template_decl;
10657 if (new_decl == error_mark_node)
10658 RETURN (error_mark_node);
10660 DECL_TEMPLATE_RESULT (r) = new_decl;
10661 DECL_TI_TEMPLATE (new_decl) = r;
10662 TREE_TYPE (r) = TREE_TYPE (new_decl);
10663 DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
10664 DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
10667 SET_DECL_IMPLICIT_INSTANTIATION (r);
10668 DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
10669 DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
10671 /* The template parameters for this new template are all the
10672 template parameters for the old template, except the
10673 outermost level of parameters. */
10674 DECL_TEMPLATE_PARMS (r)
10675 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
10676 complain);
10678 if (PRIMARY_TEMPLATE_P (t))
10679 DECL_PRIMARY_TEMPLATE (r) = r;
10681 if (TREE_CODE (decl) != TYPE_DECL && TREE_CODE (decl) != VAR_DECL)
10682 /* Record this non-type partial instantiation. */
10683 register_specialization (r, t,
10684 DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
10685 false, hash);
10687 break;
10689 case FUNCTION_DECL:
10691 tree ctx;
10692 tree argvec = NULL_TREE;
10693 tree *friends;
10694 tree gen_tmpl;
10695 tree type;
10696 int member;
10697 int args_depth;
10698 int parms_depth;
10700 /* Nobody should be tsubst'ing into non-template functions. */
10701 gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
10703 if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
10705 tree spec;
10706 bool dependent_p;
10708 /* If T is not dependent, just return it. We have to
10709 increment PROCESSING_TEMPLATE_DECL because
10710 value_dependent_expression_p assumes that nothing is
10711 dependent when PROCESSING_TEMPLATE_DECL is zero. */
10712 ++processing_template_decl;
10713 dependent_p = value_dependent_expression_p (t);
10714 --processing_template_decl;
10715 if (!dependent_p)
10716 RETURN (t);
10718 /* Calculate the most general template of which R is a
10719 specialization, and the complete set of arguments used to
10720 specialize R. */
10721 gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
10722 argvec = tsubst_template_args (DECL_TI_ARGS
10723 (DECL_TEMPLATE_RESULT
10724 (DECL_TI_TEMPLATE (t))),
10725 args, complain, in_decl);
10726 if (argvec == error_mark_node)
10727 RETURN (error_mark_node);
10729 /* Check to see if we already have this specialization. */
10730 hash = hash_tmpl_and_args (gen_tmpl, argvec);
10731 spec = retrieve_specialization (gen_tmpl, argvec, hash);
10733 if (spec)
10735 r = spec;
10736 break;
10739 /* We can see more levels of arguments than parameters if
10740 there was a specialization of a member template, like
10741 this:
10743 template <class T> struct S { template <class U> void f(); }
10744 template <> template <class U> void S<int>::f(U);
10746 Here, we'll be substituting into the specialization,
10747 because that's where we can find the code we actually
10748 want to generate, but we'll have enough arguments for
10749 the most general template.
10751 We also deal with the peculiar case:
10753 template <class T> struct S {
10754 template <class U> friend void f();
10756 template <class U> void f() {}
10757 template S<int>;
10758 template void f<double>();
10760 Here, the ARGS for the instantiation of will be {int,
10761 double}. But, we only need as many ARGS as there are
10762 levels of template parameters in CODE_PATTERN. We are
10763 careful not to get fooled into reducing the ARGS in
10764 situations like:
10766 template <class T> struct S { template <class U> void f(U); }
10767 template <class T> template <> void S<T>::f(int) {}
10769 which we can spot because the pattern will be a
10770 specialization in this case. */
10771 args_depth = TMPL_ARGS_DEPTH (args);
10772 parms_depth =
10773 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
10774 if (args_depth > parms_depth
10775 && !DECL_TEMPLATE_SPECIALIZATION (t))
10776 args = get_innermost_template_args (args, parms_depth);
10778 else
10780 /* This special case arises when we have something like this:
10782 template <class T> struct S {
10783 friend void f<int>(int, double);
10786 Here, the DECL_TI_TEMPLATE for the friend declaration
10787 will be an IDENTIFIER_NODE. We are being called from
10788 tsubst_friend_function, and we want only to create a
10789 new decl (R) with appropriate types so that we can call
10790 determine_specialization. */
10791 gen_tmpl = NULL_TREE;
10794 if (DECL_CLASS_SCOPE_P (t))
10796 if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
10797 member = 2;
10798 else
10799 member = 1;
10800 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
10801 complain, t, /*entering_scope=*/1);
10803 else
10805 member = 0;
10806 ctx = DECL_CONTEXT (t);
10808 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10809 if (type == error_mark_node)
10810 RETURN (error_mark_node);
10812 /* If we hit excessive deduction depth, the type is bogus even if
10813 it isn't error_mark_node, so don't build a decl. */
10814 if (excessive_deduction_depth)
10815 RETURN (error_mark_node);
10817 /* We do NOT check for matching decls pushed separately at this
10818 point, as they may not represent instantiations of this
10819 template, and in any case are considered separate under the
10820 discrete model. */
10821 r = copy_decl (t);
10822 DECL_USE_TEMPLATE (r) = 0;
10823 TREE_TYPE (r) = type;
10824 /* Clear out the mangled name and RTL for the instantiation. */
10825 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
10826 SET_DECL_RTL (r, NULL);
10827 /* Leave DECL_INITIAL set on deleted instantiations. */
10828 if (!DECL_DELETED_FN (r))
10829 DECL_INITIAL (r) = NULL_TREE;
10830 DECL_CONTEXT (r) = ctx;
10832 /* OpenMP UDRs have the only argument a reference to the declared
10833 type. We want to diagnose if the declared type is a reference,
10834 which is invalid, but as references to references are usually
10835 quietly merged, diagnose it here. */
10836 if (DECL_OMP_DECLARE_REDUCTION_P (t))
10838 tree argtype
10839 = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (t))));
10840 argtype = tsubst (argtype, args, complain, in_decl);
10841 if (TREE_CODE (argtype) == REFERENCE_TYPE)
10842 error_at (DECL_SOURCE_LOCATION (t),
10843 "reference type %qT in "
10844 "%<#pragma omp declare reduction%>", argtype);
10845 if (strchr (IDENTIFIER_POINTER (DECL_NAME (t)), '~') == NULL)
10846 DECL_NAME (r) = omp_reduction_id (ERROR_MARK, DECL_NAME (t),
10847 argtype);
10850 if (member && DECL_CONV_FN_P (r))
10851 /* Type-conversion operator. Reconstruct the name, in
10852 case it's the name of one of the template's parameters. */
10853 DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
10855 DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
10856 complain, t);
10857 DECL_RESULT (r) = NULL_TREE;
10859 TREE_STATIC (r) = 0;
10860 TREE_PUBLIC (r) = TREE_PUBLIC (t);
10861 DECL_EXTERNAL (r) = 1;
10862 /* If this is an instantiation of a function with internal
10863 linkage, we already know what object file linkage will be
10864 assigned to the instantiation. */
10865 DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
10866 DECL_DEFER_OUTPUT (r) = 0;
10867 DECL_CHAIN (r) = NULL_TREE;
10868 DECL_PENDING_INLINE_INFO (r) = 0;
10869 DECL_PENDING_INLINE_P (r) = 0;
10870 DECL_SAVED_TREE (r) = NULL_TREE;
10871 DECL_STRUCT_FUNCTION (r) = NULL;
10872 TREE_USED (r) = 0;
10873 /* We'll re-clone as appropriate in instantiate_template. */
10874 DECL_CLONED_FUNCTION (r) = NULL_TREE;
10876 /* If we aren't complaining now, return on error before we register
10877 the specialization so that we'll complain eventually. */
10878 if ((complain & tf_error) == 0
10879 && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10880 && !grok_op_properties (r, /*complain=*/false))
10881 RETURN (error_mark_node);
10883 /* Set up the DECL_TEMPLATE_INFO for R. There's no need to do
10884 this in the special friend case mentioned above where
10885 GEN_TMPL is NULL. */
10886 if (gen_tmpl)
10888 DECL_TEMPLATE_INFO (r)
10889 = build_template_info (gen_tmpl, argvec);
10890 SET_DECL_IMPLICIT_INSTANTIATION (r);
10892 tree new_r
10893 = register_specialization (r, gen_tmpl, argvec, false, hash);
10894 if (new_r != r)
10895 /* We instantiated this while substituting into
10896 the type earlier (template/friend54.C). */
10897 RETURN (new_r);
10899 /* We're not supposed to instantiate default arguments
10900 until they are called, for a template. But, for a
10901 declaration like:
10903 template <class T> void f ()
10904 { extern void g(int i = T()); }
10906 we should do the substitution when the template is
10907 instantiated. We handle the member function case in
10908 instantiate_class_template since the default arguments
10909 might refer to other members of the class. */
10910 if (!member
10911 && !PRIMARY_TEMPLATE_P (gen_tmpl)
10912 && !uses_template_parms (argvec))
10913 tsubst_default_arguments (r, complain);
10915 else
10916 DECL_TEMPLATE_INFO (r) = NULL_TREE;
10918 /* Copy the list of befriending classes. */
10919 for (friends = &DECL_BEFRIENDING_CLASSES (r);
10920 *friends;
10921 friends = &TREE_CHAIN (*friends))
10923 *friends = copy_node (*friends);
10924 TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
10925 args, complain,
10926 in_decl);
10929 if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
10931 maybe_retrofit_in_chrg (r);
10932 if (DECL_CONSTRUCTOR_P (r))
10933 grok_ctor_properties (ctx, r);
10934 if (DECL_INHERITED_CTOR_BASE (r))
10935 deduce_inheriting_ctor (r);
10936 /* If this is an instantiation of a member template, clone it.
10937 If it isn't, that'll be handled by
10938 clone_constructors_and_destructors. */
10939 if (PRIMARY_TEMPLATE_P (gen_tmpl))
10940 clone_function_decl (r, /*update_method_vec_p=*/0);
10942 else if ((complain & tf_error) != 0
10943 && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10944 && !grok_op_properties (r, /*complain=*/true))
10945 RETURN (error_mark_node);
10947 if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
10948 SET_DECL_FRIEND_CONTEXT (r,
10949 tsubst (DECL_FRIEND_CONTEXT (t),
10950 args, complain, in_decl));
10952 /* Possibly limit visibility based on template args. */
10953 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10954 if (DECL_VISIBILITY_SPECIFIED (t))
10956 DECL_VISIBILITY_SPECIFIED (r) = 0;
10957 DECL_ATTRIBUTES (r)
10958 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10960 determine_visibility (r);
10961 if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
10962 && !processing_template_decl)
10963 defaulted_late_check (r);
10965 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10966 args, complain, in_decl);
10968 break;
10970 case PARM_DECL:
10972 tree type = NULL_TREE;
10973 int i, len = 1;
10974 tree expanded_types = NULL_TREE;
10975 tree prev_r = NULL_TREE;
10976 tree first_r = NULL_TREE;
10978 if (DECL_PACK_P (t))
10980 /* If there is a local specialization that isn't a
10981 parameter pack, it means that we're doing a "simple"
10982 substitution from inside tsubst_pack_expansion. Just
10983 return the local specialization (which will be a single
10984 parm). */
10985 tree spec = retrieve_local_specialization (t);
10986 if (spec
10987 && TREE_CODE (spec) == PARM_DECL
10988 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
10989 RETURN (spec);
10991 /* Expand the TYPE_PACK_EXPANSION that provides the types for
10992 the parameters in this function parameter pack. */
10993 expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
10994 complain, in_decl);
10995 if (TREE_CODE (expanded_types) == TREE_VEC)
10997 len = TREE_VEC_LENGTH (expanded_types);
10999 /* Zero-length parameter packs are boring. Just substitute
11000 into the chain. */
11001 if (len == 0)
11002 RETURN (tsubst (TREE_CHAIN (t), args, complain,
11003 TREE_CHAIN (t)));
11005 else
11007 /* All we did was update the type. Make a note of that. */
11008 type = expanded_types;
11009 expanded_types = NULL_TREE;
11013 /* Loop through all of the parameters we'll build. When T is
11014 a function parameter pack, LEN is the number of expanded
11015 types in EXPANDED_TYPES; otherwise, LEN is 1. */
11016 r = NULL_TREE;
11017 for (i = 0; i < len; ++i)
11019 prev_r = r;
11020 r = copy_node (t);
11021 if (DECL_TEMPLATE_PARM_P (t))
11022 SET_DECL_TEMPLATE_PARM_P (r);
11024 if (expanded_types)
11025 /* We're on the Ith parameter of the function parameter
11026 pack. */
11028 /* Get the Ith type. */
11029 type = TREE_VEC_ELT (expanded_types, i);
11031 /* Rename the parameter to include the index. */
11032 DECL_NAME (r)
11033 = make_ith_pack_parameter_name (DECL_NAME (r), i);
11035 else if (!type)
11036 /* We're dealing with a normal parameter. */
11037 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11039 type = type_decays_to (type);
11040 TREE_TYPE (r) = type;
11041 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
11043 if (DECL_INITIAL (r))
11045 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
11046 DECL_INITIAL (r) = TREE_TYPE (r);
11047 else
11048 DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
11049 complain, in_decl);
11052 DECL_CONTEXT (r) = NULL_TREE;
11054 if (!DECL_TEMPLATE_PARM_P (r))
11055 DECL_ARG_TYPE (r) = type_passed_as (type);
11057 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
11058 args, complain, in_decl);
11060 /* Keep track of the first new parameter we
11061 generate. That's what will be returned to the
11062 caller. */
11063 if (!first_r)
11064 first_r = r;
11066 /* Build a proper chain of parameters when substituting
11067 into a function parameter pack. */
11068 if (prev_r)
11069 DECL_CHAIN (prev_r) = r;
11072 /* If cp_unevaluated_operand is set, we're just looking for a
11073 single dummy parameter, so don't keep going. */
11074 if (DECL_CHAIN (t) && !cp_unevaluated_operand)
11075 DECL_CHAIN (r) = tsubst (DECL_CHAIN (t), args,
11076 complain, DECL_CHAIN (t));
11078 /* FIRST_R contains the start of the chain we've built. */
11079 r = first_r;
11081 break;
11083 case FIELD_DECL:
11085 tree type = NULL_TREE;
11086 tree vec = NULL_TREE;
11087 tree expanded_types = NULL_TREE;
11088 int len = 1;
11090 if (PACK_EXPANSION_P (TREE_TYPE (t)))
11092 /* This field is a lambda capture pack. Return a TREE_VEC of
11093 the expanded fields to instantiate_class_template_1 and
11094 store them in the specializations hash table as a
11095 NONTYPE_ARGUMENT_PACK so that tsubst_copy can find them. */
11096 expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
11097 complain, in_decl);
11098 if (TREE_CODE (expanded_types) == TREE_VEC)
11100 len = TREE_VEC_LENGTH (expanded_types);
11101 vec = make_tree_vec (len);
11103 else
11105 /* All we did was update the type. Make a note of that. */
11106 type = expanded_types;
11107 expanded_types = NULL_TREE;
11111 for (int i = 0; i < len; ++i)
11113 r = copy_decl (t);
11114 if (expanded_types)
11116 type = TREE_VEC_ELT (expanded_types, i);
11117 DECL_NAME (r)
11118 = make_ith_pack_parameter_name (DECL_NAME (r), i);
11120 else if (!type)
11121 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11123 if (type == error_mark_node)
11124 RETURN (error_mark_node);
11125 TREE_TYPE (r) = type;
11126 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
11128 if (DECL_C_BIT_FIELD (r))
11129 /* For bit-fields, DECL_INITIAL gives the number of bits. For
11130 non-bit-fields DECL_INITIAL is a non-static data member
11131 initializer, which gets deferred instantiation. */
11132 DECL_INITIAL (r)
11133 = tsubst_expr (DECL_INITIAL (t), args,
11134 complain, in_decl,
11135 /*integral_constant_expression_p=*/true);
11136 else if (DECL_INITIAL (t))
11138 /* Set up DECL_TEMPLATE_INFO so that we can get at the
11139 NSDMI in perform_member_init. Still set DECL_INITIAL
11140 so that we know there is one. */
11141 DECL_INITIAL (r) = void_node;
11142 gcc_assert (DECL_LANG_SPECIFIC (r) == NULL);
11143 retrofit_lang_decl (r);
11144 DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
11146 /* We don't have to set DECL_CONTEXT here; it is set by
11147 finish_member_declaration. */
11148 DECL_CHAIN (r) = NULL_TREE;
11150 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
11151 args, complain, in_decl);
11153 if (vec)
11154 TREE_VEC_ELT (vec, i) = r;
11157 if (vec)
11159 r = vec;
11160 tree pack = make_node (NONTYPE_ARGUMENT_PACK);
11161 tree tpack = cxx_make_type (TYPE_ARGUMENT_PACK);
11162 SET_ARGUMENT_PACK_ARGS (pack, vec);
11163 SET_ARGUMENT_PACK_ARGS (tpack, expanded_types);
11164 TREE_TYPE (pack) = tpack;
11165 register_specialization (pack, t, args, false, 0);
11168 break;
11170 case USING_DECL:
11171 /* We reach here only for member using decls. We also need to check
11172 uses_template_parms because DECL_DEPENDENT_P is not set for a
11173 using-declaration that designates a member of the current
11174 instantiation (c++/53549). */
11175 if (DECL_DEPENDENT_P (t)
11176 || uses_template_parms (USING_DECL_SCOPE (t)))
11178 tree inst_scope = tsubst_copy (USING_DECL_SCOPE (t), args,
11179 complain, in_decl);
11180 tree name = tsubst_copy (DECL_NAME (t), args, complain, in_decl);
11181 r = do_class_using_decl (inst_scope, name);
11182 if (!r)
11183 r = error_mark_node;
11184 else
11186 TREE_PROTECTED (r) = TREE_PROTECTED (t);
11187 TREE_PRIVATE (r) = TREE_PRIVATE (t);
11190 else
11192 r = copy_node (t);
11193 DECL_CHAIN (r) = NULL_TREE;
11195 break;
11197 case TYPE_DECL:
11198 case VAR_DECL:
11200 tree argvec = NULL_TREE;
11201 tree gen_tmpl = NULL_TREE;
11202 tree spec;
11203 tree tmpl = NULL_TREE;
11204 tree ctx;
11205 tree type = NULL_TREE;
11206 bool local_p;
11208 if (TREE_TYPE (t) == error_mark_node)
11209 RETURN (error_mark_node);
11211 if (TREE_CODE (t) == TYPE_DECL
11212 && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
11214 /* If this is the canonical decl, we don't have to
11215 mess with instantiations, and often we can't (for
11216 typename, template type parms and such). Note that
11217 TYPE_NAME is not correct for the above test if
11218 we've copied the type for a typedef. */
11219 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11220 if (type == error_mark_node)
11221 RETURN (error_mark_node);
11222 r = TYPE_NAME (type);
11223 break;
11226 /* Check to see if we already have the specialization we
11227 need. */
11228 spec = NULL_TREE;
11229 if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
11231 /* T is a static data member or namespace-scope entity.
11232 We have to substitute into namespace-scope variables
11233 (even though such entities are never templates) because
11234 of cases like:
11236 template <class T> void f() { extern T t; }
11238 where the entity referenced is not known until
11239 instantiation time. */
11240 local_p = false;
11241 ctx = DECL_CONTEXT (t);
11242 if (DECL_CLASS_SCOPE_P (t))
11244 ctx = tsubst_aggr_type (ctx, args,
11245 complain,
11246 in_decl, /*entering_scope=*/1);
11247 /* If CTX is unchanged, then T is in fact the
11248 specialization we want. That situation occurs when
11249 referencing a static data member within in its own
11250 class. We can use pointer equality, rather than
11251 same_type_p, because DECL_CONTEXT is always
11252 canonical... */
11253 if (ctx == DECL_CONTEXT (t)
11254 /* ... unless T is a member template; in which
11255 case our caller can be willing to create a
11256 specialization of that template represented
11257 by T. */
11258 && !(DECL_TI_TEMPLATE (t)
11259 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (t))))
11260 spec = t;
11263 if (!spec)
11265 tmpl = DECL_TI_TEMPLATE (t);
11266 gen_tmpl = most_general_template (tmpl);
11267 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
11268 if (argvec == error_mark_node)
11269 RETURN (error_mark_node);
11270 hash = hash_tmpl_and_args (gen_tmpl, argvec);
11271 spec = retrieve_specialization (gen_tmpl, argvec, hash);
11274 else
11276 /* A local variable. */
11277 local_p = true;
11278 /* Subsequent calls to pushdecl will fill this in. */
11279 ctx = NULL_TREE;
11280 spec = retrieve_local_specialization (t);
11282 /* If we already have the specialization we need, there is
11283 nothing more to do. */
11284 if (spec)
11286 r = spec;
11287 break;
11290 /* Create a new node for the specialization we need. */
11291 r = copy_decl (t);
11292 if (type == NULL_TREE)
11294 if (is_typedef_decl (t))
11295 type = DECL_ORIGINAL_TYPE (t);
11296 else
11297 type = TREE_TYPE (t);
11298 if (VAR_P (t)
11299 && VAR_HAD_UNKNOWN_BOUND (t)
11300 && type != error_mark_node)
11301 type = strip_array_domain (type);
11302 type = tsubst (type, args, complain, in_decl);
11304 if (VAR_P (r))
11306 /* Even if the original location is out of scope, the
11307 newly substituted one is not. */
11308 DECL_DEAD_FOR_LOCAL (r) = 0;
11309 DECL_INITIALIZED_P (r) = 0;
11310 DECL_TEMPLATE_INSTANTIATED (r) = 0;
11311 if (type == error_mark_node)
11312 RETURN (error_mark_node);
11313 if (TREE_CODE (type) == FUNCTION_TYPE)
11315 /* It may seem that this case cannot occur, since:
11317 typedef void f();
11318 void g() { f x; }
11320 declares a function, not a variable. However:
11322 typedef void f();
11323 template <typename T> void g() { T t; }
11324 template void g<f>();
11326 is an attempt to declare a variable with function
11327 type. */
11328 error ("variable %qD has function type",
11329 /* R is not yet sufficiently initialized, so we
11330 just use its name. */
11331 DECL_NAME (r));
11332 RETURN (error_mark_node);
11334 type = complete_type (type);
11335 /* Wait until cp_finish_decl to set this again, to handle
11336 circular dependency (template/instantiate6.C). */
11337 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r) = 0;
11338 type = check_var_type (DECL_NAME (r), type);
11340 if (DECL_HAS_VALUE_EXPR_P (t))
11342 tree ve = DECL_VALUE_EXPR (t);
11343 ve = tsubst_expr (ve, args, complain, in_decl,
11344 /*constant_expression_p=*/false);
11345 if (REFERENCE_REF_P (ve))
11347 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
11348 ve = TREE_OPERAND (ve, 0);
11350 SET_DECL_VALUE_EXPR (r, ve);
11352 if (TREE_STATIC (r) || DECL_EXTERNAL (r))
11353 set_decl_tls_model (r, decl_tls_model (t));
11355 else if (DECL_SELF_REFERENCE_P (t))
11356 SET_DECL_SELF_REFERENCE_P (r);
11357 TREE_TYPE (r) = type;
11358 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
11359 DECL_CONTEXT (r) = ctx;
11360 /* Clear out the mangled name and RTL for the instantiation. */
11361 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
11362 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
11363 SET_DECL_RTL (r, NULL);
11364 /* The initializer must not be expanded until it is required;
11365 see [temp.inst]. */
11366 DECL_INITIAL (r) = NULL_TREE;
11367 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
11368 SET_DECL_RTL (r, NULL);
11369 DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
11370 if (VAR_P (r))
11372 /* Possibly limit visibility based on template args. */
11373 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
11374 if (DECL_VISIBILITY_SPECIFIED (t))
11376 DECL_VISIBILITY_SPECIFIED (r) = 0;
11377 DECL_ATTRIBUTES (r)
11378 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
11380 determine_visibility (r);
11383 if (!local_p)
11385 /* A static data member declaration is always marked
11386 external when it is declared in-class, even if an
11387 initializer is present. We mimic the non-template
11388 processing here. */
11389 DECL_EXTERNAL (r) = 1;
11391 register_specialization (r, gen_tmpl, argvec, false, hash);
11392 DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
11393 SET_DECL_IMPLICIT_INSTANTIATION (r);
11395 else if (!cp_unevaluated_operand)
11396 register_local_specialization (r, t);
11398 DECL_CHAIN (r) = NULL_TREE;
11400 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
11401 /*flags=*/0,
11402 args, complain, in_decl);
11404 /* Preserve a typedef that names a type. */
11405 if (is_typedef_decl (r))
11407 DECL_ORIGINAL_TYPE (r) = NULL_TREE;
11408 set_underlying_type (r);
11411 layout_decl (r, 0);
11413 break;
11415 default:
11416 gcc_unreachable ();
11418 #undef RETURN
11420 out:
11421 /* Restore the file and line information. */
11422 input_location = saved_loc;
11424 return r;
11427 /* Substitute into the ARG_TYPES of a function type.
11428 If END is a TREE_CHAIN, leave it and any following types
11429 un-substituted. */
11431 static tree
11432 tsubst_arg_types (tree arg_types,
11433 tree args,
11434 tree end,
11435 tsubst_flags_t complain,
11436 tree in_decl)
11438 tree remaining_arg_types;
11439 tree type = NULL_TREE;
11440 int i = 1;
11441 tree expanded_args = NULL_TREE;
11442 tree default_arg;
11444 if (!arg_types || arg_types == void_list_node || arg_types == end)
11445 return arg_types;
11447 remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
11448 args, end, complain, in_decl);
11449 if (remaining_arg_types == error_mark_node)
11450 return error_mark_node;
11452 if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
11454 /* For a pack expansion, perform substitution on the
11455 entire expression. Later on, we'll handle the arguments
11456 one-by-one. */
11457 expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
11458 args, complain, in_decl);
11460 if (TREE_CODE (expanded_args) == TREE_VEC)
11461 /* So that we'll spin through the parameters, one by one. */
11462 i = TREE_VEC_LENGTH (expanded_args);
11463 else
11465 /* We only partially substituted into the parameter
11466 pack. Our type is TYPE_PACK_EXPANSION. */
11467 type = expanded_args;
11468 expanded_args = NULL_TREE;
11472 while (i > 0) {
11473 --i;
11475 if (expanded_args)
11476 type = TREE_VEC_ELT (expanded_args, i);
11477 else if (!type)
11478 type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
11480 if (type == error_mark_node)
11481 return error_mark_node;
11482 if (VOID_TYPE_P (type))
11484 if (complain & tf_error)
11486 error ("invalid parameter type %qT", type);
11487 if (in_decl)
11488 error ("in declaration %q+D", in_decl);
11490 return error_mark_node;
11492 /* DR 657. */
11493 if (abstract_virtuals_error_sfinae (ACU_PARM, type, complain))
11494 return error_mark_node;
11496 /* Do array-to-pointer, function-to-pointer conversion, and ignore
11497 top-level qualifiers as required. */
11498 type = cv_unqualified (type_decays_to (type));
11500 /* We do not substitute into default arguments here. The standard
11501 mandates that they be instantiated only when needed, which is
11502 done in build_over_call. */
11503 default_arg = TREE_PURPOSE (arg_types);
11505 if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
11507 /* We've instantiated a template before its default arguments
11508 have been parsed. This can happen for a nested template
11509 class, and is not an error unless we require the default
11510 argument in a call of this function. */
11511 remaining_arg_types =
11512 tree_cons (default_arg, type, remaining_arg_types);
11513 vec_safe_push (DEFARG_INSTANTIATIONS(default_arg), remaining_arg_types);
11515 else
11516 remaining_arg_types =
11517 hash_tree_cons (default_arg, type, remaining_arg_types);
11520 return remaining_arg_types;
11523 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
11524 *not* handle the exception-specification for FNTYPE, because the
11525 initial substitution of explicitly provided template parameters
11526 during argument deduction forbids substitution into the
11527 exception-specification:
11529 [temp.deduct]
11531 All references in the function type of the function template to the
11532 corresponding template parameters are replaced by the specified tem-
11533 plate argument values. If a substitution in a template parameter or
11534 in the function type of the function template results in an invalid
11535 type, type deduction fails. [Note: The equivalent substitution in
11536 exception specifications is done only when the function is instanti-
11537 ated, at which point a program is ill-formed if the substitution
11538 results in an invalid type.] */
11540 static tree
11541 tsubst_function_type (tree t,
11542 tree args,
11543 tsubst_flags_t complain,
11544 tree in_decl)
11546 tree return_type;
11547 tree arg_types = NULL_TREE;
11548 tree fntype;
11550 /* The TYPE_CONTEXT is not used for function/method types. */
11551 gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
11553 /* DR 1227: Mixing immediate and non-immediate contexts in deduction
11554 failure. */
11555 bool late_return_type_p = TYPE_HAS_LATE_RETURN_TYPE (t);
11557 if (late_return_type_p)
11559 /* Substitute the argument types. */
11560 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args, NULL_TREE,
11561 complain, in_decl);
11562 if (arg_types == error_mark_node)
11563 return error_mark_node;
11565 tree save_ccp = current_class_ptr;
11566 tree save_ccr = current_class_ref;
11567 tree this_type = (TREE_CODE (t) == METHOD_TYPE
11568 ? TREE_TYPE (TREE_VALUE (arg_types)) : NULL_TREE);
11569 bool do_inject = this_type && CLASS_TYPE_P (this_type);
11570 if (do_inject)
11572 /* DR 1207: 'this' is in scope in the trailing return type. */
11573 inject_this_parameter (this_type, cp_type_quals (this_type));
11576 /* Substitute the return type. */
11577 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11579 if (do_inject)
11581 current_class_ptr = save_ccp;
11582 current_class_ref = save_ccr;
11585 else
11586 /* Substitute the return type. */
11587 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11589 if (return_type == error_mark_node)
11590 return error_mark_node;
11591 /* DR 486 clarifies that creation of a function type with an
11592 invalid return type is a deduction failure. */
11593 if (TREE_CODE (return_type) == ARRAY_TYPE
11594 || TREE_CODE (return_type) == FUNCTION_TYPE)
11596 if (complain & tf_error)
11598 if (TREE_CODE (return_type) == ARRAY_TYPE)
11599 error ("function returning an array");
11600 else
11601 error ("function returning a function");
11603 return error_mark_node;
11605 /* And DR 657. */
11606 if (abstract_virtuals_error_sfinae (ACU_RETURN, return_type, complain))
11607 return error_mark_node;
11609 if (!late_return_type_p)
11611 /* Substitute the argument types. */
11612 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args, NULL_TREE,
11613 complain, in_decl);
11614 if (arg_types == error_mark_node)
11615 return error_mark_node;
11618 /* Construct a new type node and return it. */
11619 if (TREE_CODE (t) == FUNCTION_TYPE)
11621 fntype = build_function_type (return_type, arg_types);
11622 fntype = apply_memfn_quals (fntype,
11623 type_memfn_quals (t),
11624 type_memfn_rqual (t));
11626 else
11628 tree r = TREE_TYPE (TREE_VALUE (arg_types));
11629 /* Don't pick up extra function qualifiers from the basetype. */
11630 r = cp_build_qualified_type_real (r, type_memfn_quals (t), complain);
11631 if (! MAYBE_CLASS_TYPE_P (r))
11633 /* [temp.deduct]
11635 Type deduction may fail for any of the following
11636 reasons:
11638 -- Attempting to create "pointer to member of T" when T
11639 is not a class type. */
11640 if (complain & tf_error)
11641 error ("creating pointer to member function of non-class type %qT",
11643 return error_mark_node;
11646 fntype = build_method_type_directly (r, return_type,
11647 TREE_CHAIN (arg_types));
11648 fntype = build_ref_qualified_type (fntype, type_memfn_rqual (t));
11650 fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
11652 if (late_return_type_p)
11653 TYPE_HAS_LATE_RETURN_TYPE (fntype) = 1;
11655 return fntype;
11658 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE. Substitute the template
11659 ARGS into that specification, and return the substituted
11660 specification. If there is no specification, return NULL_TREE. */
11662 static tree
11663 tsubst_exception_specification (tree fntype,
11664 tree args,
11665 tsubst_flags_t complain,
11666 tree in_decl,
11667 bool defer_ok)
11669 tree specs;
11670 tree new_specs;
11672 specs = TYPE_RAISES_EXCEPTIONS (fntype);
11673 new_specs = NULL_TREE;
11674 if (specs && TREE_PURPOSE (specs))
11676 /* A noexcept-specifier. */
11677 tree expr = TREE_PURPOSE (specs);
11678 if (TREE_CODE (expr) == INTEGER_CST)
11679 new_specs = expr;
11680 else if (defer_ok)
11682 /* Defer instantiation of noexcept-specifiers to avoid
11683 excessive instantiations (c++/49107). */
11684 new_specs = make_node (DEFERRED_NOEXCEPT);
11685 if (DEFERRED_NOEXCEPT_SPEC_P (specs))
11687 /* We already partially instantiated this member template,
11688 so combine the new args with the old. */
11689 DEFERRED_NOEXCEPT_PATTERN (new_specs)
11690 = DEFERRED_NOEXCEPT_PATTERN (expr);
11691 DEFERRED_NOEXCEPT_ARGS (new_specs)
11692 = add_to_template_args (DEFERRED_NOEXCEPT_ARGS (expr), args);
11694 else
11696 DEFERRED_NOEXCEPT_PATTERN (new_specs) = expr;
11697 DEFERRED_NOEXCEPT_ARGS (new_specs) = args;
11700 else
11701 new_specs = tsubst_copy_and_build
11702 (expr, args, complain, in_decl, /*function_p=*/false,
11703 /*integral_constant_expression_p=*/true);
11704 new_specs = build_noexcept_spec (new_specs, complain);
11706 else if (specs)
11708 if (! TREE_VALUE (specs))
11709 new_specs = specs;
11710 else
11711 while (specs)
11713 tree spec;
11714 int i, len = 1;
11715 tree expanded_specs = NULL_TREE;
11717 if (PACK_EXPANSION_P (TREE_VALUE (specs)))
11719 /* Expand the pack expansion type. */
11720 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
11721 args, complain,
11722 in_decl);
11724 if (expanded_specs == error_mark_node)
11725 return error_mark_node;
11726 else if (TREE_CODE (expanded_specs) == TREE_VEC)
11727 len = TREE_VEC_LENGTH (expanded_specs);
11728 else
11730 /* We're substituting into a member template, so
11731 we got a TYPE_PACK_EXPANSION back. Add that
11732 expansion and move on. */
11733 gcc_assert (TREE_CODE (expanded_specs)
11734 == TYPE_PACK_EXPANSION);
11735 new_specs = add_exception_specifier (new_specs,
11736 expanded_specs,
11737 complain);
11738 specs = TREE_CHAIN (specs);
11739 continue;
11743 for (i = 0; i < len; ++i)
11745 if (expanded_specs)
11746 spec = TREE_VEC_ELT (expanded_specs, i);
11747 else
11748 spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
11749 if (spec == error_mark_node)
11750 return spec;
11751 new_specs = add_exception_specifier (new_specs, spec,
11752 complain);
11755 specs = TREE_CHAIN (specs);
11758 return new_specs;
11761 /* Take the tree structure T and replace template parameters used
11762 therein with the argument vector ARGS. IN_DECL is an associated
11763 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
11764 Issue error and warning messages under control of COMPLAIN. Note
11765 that we must be relatively non-tolerant of extensions here, in
11766 order to preserve conformance; if we allow substitutions that
11767 should not be allowed, we may allow argument deductions that should
11768 not succeed, and therefore report ambiguous overload situations
11769 where there are none. In theory, we could allow the substitution,
11770 but indicate that it should have failed, and allow our caller to
11771 make sure that the right thing happens, but we don't try to do this
11772 yet.
11774 This function is used for dealing with types, decls and the like;
11775 for expressions, use tsubst_expr or tsubst_copy. */
11777 tree
11778 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11780 enum tree_code code;
11781 tree type, r = NULL_TREE;
11783 if (t == NULL_TREE || t == error_mark_node
11784 || t == integer_type_node
11785 || t == void_type_node
11786 || t == char_type_node
11787 || t == unknown_type_node
11788 || TREE_CODE (t) == NAMESPACE_DECL
11789 || TREE_CODE (t) == TRANSLATION_UNIT_DECL)
11790 return t;
11792 if (DECL_P (t))
11793 return tsubst_decl (t, args, complain);
11795 if (args == NULL_TREE)
11796 return t;
11798 code = TREE_CODE (t);
11800 if (code == IDENTIFIER_NODE)
11801 type = IDENTIFIER_TYPE_VALUE (t);
11802 else
11803 type = TREE_TYPE (t);
11805 gcc_assert (type != unknown_type_node);
11807 /* Reuse typedefs. We need to do this to handle dependent attributes,
11808 such as attribute aligned. */
11809 if (TYPE_P (t)
11810 && typedef_variant_p (t))
11812 tree decl = TYPE_NAME (t);
11814 if (alias_template_specialization_p (t))
11816 /* DECL represents an alias template and we want to
11817 instantiate it. */
11818 tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11819 tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
11820 r = instantiate_alias_template (tmpl, gen_args, complain);
11822 else if (DECL_CLASS_SCOPE_P (decl)
11823 && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
11824 && uses_template_parms (DECL_CONTEXT (decl)))
11826 tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11827 tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
11828 r = retrieve_specialization (tmpl, gen_args, 0);
11830 else if (DECL_FUNCTION_SCOPE_P (decl)
11831 && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
11832 && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
11833 r = retrieve_local_specialization (decl);
11834 else
11835 /* The typedef is from a non-template context. */
11836 return t;
11838 if (r)
11840 r = TREE_TYPE (r);
11841 r = cp_build_qualified_type_real
11842 (r, cp_type_quals (t) | cp_type_quals (r),
11843 complain | tf_ignore_bad_quals);
11844 return r;
11846 else
11848 /* We don't have an instantiation yet, so drop the typedef. */
11849 int quals = cp_type_quals (t);
11850 t = DECL_ORIGINAL_TYPE (decl);
11851 t = cp_build_qualified_type_real (t, quals,
11852 complain | tf_ignore_bad_quals);
11856 if (type
11857 && code != TYPENAME_TYPE
11858 && code != TEMPLATE_TYPE_PARM
11859 && code != IDENTIFIER_NODE
11860 && code != FUNCTION_TYPE
11861 && code != METHOD_TYPE)
11862 type = tsubst (type, args, complain, in_decl);
11863 if (type == error_mark_node)
11864 return error_mark_node;
11866 switch (code)
11868 case RECORD_TYPE:
11869 case UNION_TYPE:
11870 case ENUMERAL_TYPE:
11871 return tsubst_aggr_type (t, args, complain, in_decl,
11872 /*entering_scope=*/0);
11874 case ERROR_MARK:
11875 case IDENTIFIER_NODE:
11876 case VOID_TYPE:
11877 case REAL_TYPE:
11878 case COMPLEX_TYPE:
11879 case VECTOR_TYPE:
11880 case BOOLEAN_TYPE:
11881 case NULLPTR_TYPE:
11882 case LANG_TYPE:
11883 return t;
11885 case INTEGER_TYPE:
11886 if (t == integer_type_node)
11887 return t;
11889 if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
11890 && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
11891 return t;
11894 tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
11896 max = tsubst_expr (omax, args, complain, in_decl,
11897 /*integral_constant_expression_p=*/false);
11899 /* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
11900 needed. */
11901 if (TREE_CODE (max) == NOP_EXPR
11902 && TREE_SIDE_EFFECTS (omax)
11903 && !TREE_TYPE (max))
11904 TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
11906 /* If we're in a partial instantiation, preserve the magic NOP_EXPR
11907 with TREE_SIDE_EFFECTS that indicates this is not an integral
11908 constant expression. */
11909 if (processing_template_decl
11910 && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
11912 gcc_assert (TREE_CODE (max) == NOP_EXPR);
11913 TREE_SIDE_EFFECTS (max) = 1;
11916 return compute_array_index_type (NULL_TREE, max, complain);
11919 case TEMPLATE_TYPE_PARM:
11920 case TEMPLATE_TEMPLATE_PARM:
11921 case BOUND_TEMPLATE_TEMPLATE_PARM:
11922 case TEMPLATE_PARM_INDEX:
11924 int idx;
11925 int level;
11926 int levels;
11927 tree arg = NULL_TREE;
11929 r = NULL_TREE;
11931 gcc_assert (TREE_VEC_LENGTH (args) > 0);
11932 template_parm_level_and_index (t, &level, &idx);
11934 levels = TMPL_ARGS_DEPTH (args);
11935 if (level <= levels)
11937 arg = TMPL_ARG (args, level, idx);
11939 if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
11941 /* See through ARGUMENT_PACK_SELECT arguments. */
11942 arg = ARGUMENT_PACK_SELECT_ARG (arg);
11943 /* If the selected argument is an expansion E, that most
11944 likely means we were called from
11945 gen_elem_of_pack_expansion_instantiation during the
11946 substituting of pack an argument pack (which Ith
11947 element is a pack expansion, where I is
11948 ARGUMENT_PACK_SELECT_INDEX) into a pack expansion.
11949 In this case, the Ith element resulting from this
11950 substituting is going to be a pack expansion, which
11951 pattern is the pattern of E. Let's return the
11952 pattern of E, and
11953 gen_elem_of_pack_expansion_instantiation will
11954 build the resulting pack expansion from it. */
11955 if (PACK_EXPANSION_P (arg))
11957 /* Make sure we aren't throwing away arg info. */
11958 gcc_assert (!PACK_EXPANSION_EXTRA_ARGS (arg));
11959 arg = PACK_EXPANSION_PATTERN (arg);
11964 if (arg == error_mark_node)
11965 return error_mark_node;
11966 else if (arg != NULL_TREE)
11968 if (ARGUMENT_PACK_P (arg))
11969 /* If ARG is an argument pack, we don't actually want to
11970 perform a substitution here, because substitutions
11971 for argument packs are only done
11972 element-by-element. We can get to this point when
11973 substituting the type of a non-type template
11974 parameter pack, when that type actually contains
11975 template parameter packs from an outer template, e.g.,
11977 template<typename... Types> struct A {
11978 template<Types... Values> struct B { };
11979 }; */
11980 return t;
11982 if (code == TEMPLATE_TYPE_PARM)
11984 int quals;
11985 gcc_assert (TYPE_P (arg));
11987 quals = cp_type_quals (arg) | cp_type_quals (t);
11989 return cp_build_qualified_type_real
11990 (arg, quals, complain | tf_ignore_bad_quals);
11992 else if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
11994 /* We are processing a type constructed from a
11995 template template parameter. */
11996 tree argvec = tsubst (TYPE_TI_ARGS (t),
11997 args, complain, in_decl);
11998 if (argvec == error_mark_node)
11999 return error_mark_node;
12001 gcc_assert (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
12002 || TREE_CODE (arg) == TEMPLATE_DECL
12003 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
12005 if (TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE)
12006 /* Consider this code:
12008 template <template <class> class Template>
12009 struct Internal {
12010 template <class Arg> using Bind = Template<Arg>;
12013 template <template <class> class Template, class Arg>
12014 using Instantiate = Template<Arg>; //#0
12016 template <template <class> class Template,
12017 class Argument>
12018 using Bind =
12019 Instantiate<Internal<Template>::template Bind,
12020 Argument>; //#1
12022 When #1 is parsed, the
12023 BOUND_TEMPLATE_TEMPLATE_PARM representing the
12024 parameter `Template' in #0 matches the
12025 UNBOUND_CLASS_TEMPLATE representing the argument
12026 `Internal<Template>::template Bind'; We then want
12027 to assemble the type `Bind<Argument>' that can't
12028 be fully created right now, because
12029 `Internal<Template>' not being complete, the Bind
12030 template cannot be looked up in that context. So
12031 we need to "store" `Bind<Argument>' for later
12032 when the context of Bind becomes complete. Let's
12033 store that in a TYPENAME_TYPE. */
12034 return make_typename_type (TYPE_CONTEXT (arg),
12035 build_nt (TEMPLATE_ID_EXPR,
12036 TYPE_IDENTIFIER (arg),
12037 argvec),
12038 typename_type,
12039 complain);
12041 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
12042 are resolving nested-types in the signature of a
12043 member function templates. Otherwise ARG is a
12044 TEMPLATE_DECL and is the real template to be
12045 instantiated. */
12046 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
12047 arg = TYPE_NAME (arg);
12049 r = lookup_template_class (arg,
12050 argvec, in_decl,
12051 DECL_CONTEXT (arg),
12052 /*entering_scope=*/0,
12053 complain);
12054 return cp_build_qualified_type_real
12055 (r, cp_type_quals (t) | cp_type_quals (r), complain);
12057 else
12058 /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX. */
12059 return convert_from_reference (unshare_expr (arg));
12062 if (level == 1)
12063 /* This can happen during the attempted tsubst'ing in
12064 unify. This means that we don't yet have any information
12065 about the template parameter in question. */
12066 return t;
12068 /* Early in template argument deduction substitution, we don't
12069 want to reduce the level of 'auto', or it will be confused
12070 with a normal template parm in subsequent deduction. */
12071 if (is_auto (t) && (complain & tf_partial))
12072 return t;
12074 /* If we get here, we must have been looking at a parm for a
12075 more deeply nested template. Make a new version of this
12076 template parameter, but with a lower level. */
12077 switch (code)
12079 case TEMPLATE_TYPE_PARM:
12080 case TEMPLATE_TEMPLATE_PARM:
12081 case BOUND_TEMPLATE_TEMPLATE_PARM:
12082 if (cp_type_quals (t))
12084 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
12085 r = cp_build_qualified_type_real
12086 (r, cp_type_quals (t),
12087 complain | (code == TEMPLATE_TYPE_PARM
12088 ? tf_ignore_bad_quals : 0));
12090 else
12092 r = copy_type (t);
12093 TEMPLATE_TYPE_PARM_INDEX (r)
12094 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
12095 r, levels, args, complain);
12096 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
12097 TYPE_MAIN_VARIANT (r) = r;
12098 TYPE_POINTER_TO (r) = NULL_TREE;
12099 TYPE_REFERENCE_TO (r) = NULL_TREE;
12101 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
12102 /* We have reduced the level of the template
12103 template parameter, but not the levels of its
12104 template parameters, so canonical_type_parameter
12105 will not be able to find the canonical template
12106 template parameter for this level. Thus, we
12107 require structural equality checking to compare
12108 TEMPLATE_TEMPLATE_PARMs. */
12109 SET_TYPE_STRUCTURAL_EQUALITY (r);
12110 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
12111 SET_TYPE_STRUCTURAL_EQUALITY (r);
12112 else
12113 TYPE_CANONICAL (r) = canonical_type_parameter (r);
12115 if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
12117 tree argvec = tsubst (TYPE_TI_ARGS (t), args,
12118 complain, in_decl);
12119 if (argvec == error_mark_node)
12120 return error_mark_node;
12122 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
12123 = build_template_info (TYPE_TI_TEMPLATE (t), argvec);
12126 break;
12128 case TEMPLATE_PARM_INDEX:
12129 r = reduce_template_parm_level (t, type, levels, args, complain);
12130 break;
12132 default:
12133 gcc_unreachable ();
12136 return r;
12139 case TREE_LIST:
12141 tree purpose, value, chain;
12143 if (t == void_list_node)
12144 return t;
12146 purpose = TREE_PURPOSE (t);
12147 if (purpose)
12149 purpose = tsubst (purpose, args, complain, in_decl);
12150 if (purpose == error_mark_node)
12151 return error_mark_node;
12153 value = TREE_VALUE (t);
12154 if (value)
12156 value = tsubst (value, args, complain, in_decl);
12157 if (value == error_mark_node)
12158 return error_mark_node;
12160 chain = TREE_CHAIN (t);
12161 if (chain && chain != void_type_node)
12163 chain = tsubst (chain, args, complain, in_decl);
12164 if (chain == error_mark_node)
12165 return error_mark_node;
12167 if (purpose == TREE_PURPOSE (t)
12168 && value == TREE_VALUE (t)
12169 && chain == TREE_CHAIN (t))
12170 return t;
12171 return hash_tree_cons (purpose, value, chain);
12174 case TREE_BINFO:
12175 /* We should never be tsubsting a binfo. */
12176 gcc_unreachable ();
12178 case TREE_VEC:
12179 /* A vector of template arguments. */
12180 gcc_assert (!type);
12181 return tsubst_template_args (t, args, complain, in_decl);
12183 case POINTER_TYPE:
12184 case REFERENCE_TYPE:
12186 if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
12187 return t;
12189 /* [temp.deduct]
12191 Type deduction may fail for any of the following
12192 reasons:
12194 -- Attempting to create a pointer to reference type.
12195 -- Attempting to create a reference to a reference type or
12196 a reference to void.
12198 Core issue 106 says that creating a reference to a reference
12199 during instantiation is no longer a cause for failure. We
12200 only enforce this check in strict C++98 mode. */
12201 if ((TREE_CODE (type) == REFERENCE_TYPE
12202 && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
12203 || (code == REFERENCE_TYPE && VOID_TYPE_P (type)))
12205 static location_t last_loc;
12207 /* We keep track of the last time we issued this error
12208 message to avoid spewing a ton of messages during a
12209 single bad template instantiation. */
12210 if (complain & tf_error
12211 && last_loc != input_location)
12213 if (VOID_TYPE_P (type))
12214 error ("forming reference to void");
12215 else if (code == POINTER_TYPE)
12216 error ("forming pointer to reference type %qT", type);
12217 else
12218 error ("forming reference to reference type %qT", type);
12219 last_loc = input_location;
12222 return error_mark_node;
12224 else if (TREE_CODE (type) == FUNCTION_TYPE
12225 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
12226 || type_memfn_rqual (type) != REF_QUAL_NONE))
12228 if (complain & tf_error)
12230 if (code == POINTER_TYPE)
12231 error ("forming pointer to qualified function type %qT",
12232 type);
12233 else
12234 error ("forming reference to qualified function type %qT",
12235 type);
12237 return error_mark_node;
12239 else if (code == POINTER_TYPE)
12241 r = build_pointer_type (type);
12242 if (TREE_CODE (type) == METHOD_TYPE)
12243 r = build_ptrmemfunc_type (r);
12245 else if (TREE_CODE (type) == REFERENCE_TYPE)
12246 /* In C++0x, during template argument substitution, when there is an
12247 attempt to create a reference to a reference type, reference
12248 collapsing is applied as described in [14.3.1/4 temp.arg.type]:
12250 "If a template-argument for a template-parameter T names a type
12251 that is a reference to a type A, an attempt to create the type
12252 'lvalue reference to cv T' creates the type 'lvalue reference to
12253 A,' while an attempt to create the type type rvalue reference to
12254 cv T' creates the type T"
12256 r = cp_build_reference_type
12257 (TREE_TYPE (type),
12258 TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
12259 else
12260 r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
12261 r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
12263 if (r != error_mark_node)
12264 /* Will this ever be needed for TYPE_..._TO values? */
12265 layout_type (r);
12267 return r;
12269 case OFFSET_TYPE:
12271 r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
12272 if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
12274 /* [temp.deduct]
12276 Type deduction may fail for any of the following
12277 reasons:
12279 -- Attempting to create "pointer to member of T" when T
12280 is not a class type. */
12281 if (complain & tf_error)
12282 error ("creating pointer to member of non-class type %qT", r);
12283 return error_mark_node;
12285 if (TREE_CODE (type) == REFERENCE_TYPE)
12287 if (complain & tf_error)
12288 error ("creating pointer to member reference type %qT", type);
12289 return error_mark_node;
12291 if (VOID_TYPE_P (type))
12293 if (complain & tf_error)
12294 error ("creating pointer to member of type void");
12295 return error_mark_node;
12297 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
12298 if (TREE_CODE (type) == FUNCTION_TYPE)
12300 /* The type of the implicit object parameter gets its
12301 cv-qualifiers from the FUNCTION_TYPE. */
12302 tree memptr;
12303 tree method_type
12304 = build_memfn_type (type, r, type_memfn_quals (type),
12305 type_memfn_rqual (type));
12306 memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
12307 return cp_build_qualified_type_real (memptr, cp_type_quals (t),
12308 complain);
12310 else
12311 return cp_build_qualified_type_real (build_ptrmem_type (r, type),
12312 cp_type_quals (t),
12313 complain);
12315 case FUNCTION_TYPE:
12316 case METHOD_TYPE:
12318 tree fntype;
12319 tree specs;
12320 fntype = tsubst_function_type (t, args, complain, in_decl);
12321 if (fntype == error_mark_node)
12322 return error_mark_node;
12324 /* Substitute the exception specification. */
12325 specs = tsubst_exception_specification (t, args, complain,
12326 in_decl, /*defer_ok*/true);
12327 if (specs == error_mark_node)
12328 return error_mark_node;
12329 if (specs)
12330 fntype = build_exception_variant (fntype, specs);
12331 return fntype;
12333 case ARRAY_TYPE:
12335 tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
12336 if (domain == error_mark_node)
12337 return error_mark_node;
12339 /* As an optimization, we avoid regenerating the array type if
12340 it will obviously be the same as T. */
12341 if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
12342 return t;
12344 /* These checks should match the ones in create_array_type_for_decl.
12346 [temp.deduct]
12348 The deduction may fail for any of the following reasons:
12350 -- Attempting to create an array with an element type that
12351 is void, a function type, or a reference type, or [DR337]
12352 an abstract class type. */
12353 if (VOID_TYPE_P (type)
12354 || TREE_CODE (type) == FUNCTION_TYPE
12355 || (TREE_CODE (type) == ARRAY_TYPE
12356 && TYPE_DOMAIN (type) == NULL_TREE)
12357 || TREE_CODE (type) == REFERENCE_TYPE)
12359 if (complain & tf_error)
12360 error ("creating array of %qT", type);
12361 return error_mark_node;
12364 if (abstract_virtuals_error_sfinae (ACU_ARRAY, type, complain))
12365 return error_mark_node;
12367 r = build_cplus_array_type (type, domain);
12369 if (TYPE_USER_ALIGN (t))
12371 TYPE_ALIGN (r) = TYPE_ALIGN (t);
12372 TYPE_USER_ALIGN (r) = 1;
12375 return r;
12378 case TYPENAME_TYPE:
12380 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
12381 in_decl, /*entering_scope=*/1);
12382 tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
12383 complain, in_decl);
12385 if (ctx == error_mark_node || f == error_mark_node)
12386 return error_mark_node;
12388 if (!MAYBE_CLASS_TYPE_P (ctx))
12390 if (complain & tf_error)
12391 error ("%qT is not a class, struct, or union type", ctx);
12392 return error_mark_node;
12394 else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
12396 /* Normally, make_typename_type does not require that the CTX
12397 have complete type in order to allow things like:
12399 template <class T> struct S { typename S<T>::X Y; };
12401 But, such constructs have already been resolved by this
12402 point, so here CTX really should have complete type, unless
12403 it's a partial instantiation. */
12404 ctx = complete_type (ctx);
12405 if (!COMPLETE_TYPE_P (ctx))
12407 if (complain & tf_error)
12408 cxx_incomplete_type_error (NULL_TREE, ctx);
12409 return error_mark_node;
12413 f = make_typename_type (ctx, f, typename_type,
12414 complain | tf_keep_type_decl);
12415 if (f == error_mark_node)
12416 return f;
12417 if (TREE_CODE (f) == TYPE_DECL)
12419 complain |= tf_ignore_bad_quals;
12420 f = TREE_TYPE (f);
12423 if (TREE_CODE (f) != TYPENAME_TYPE)
12425 if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
12427 if (complain & tf_error)
12428 error ("%qT resolves to %qT, which is not an enumeration type",
12429 t, f);
12430 else
12431 return error_mark_node;
12433 else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
12435 if (complain & tf_error)
12436 error ("%qT resolves to %qT, which is is not a class type",
12437 t, f);
12438 else
12439 return error_mark_node;
12443 return cp_build_qualified_type_real
12444 (f, cp_type_quals (f) | cp_type_quals (t), complain);
12447 case UNBOUND_CLASS_TEMPLATE:
12449 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
12450 in_decl, /*entering_scope=*/1);
12451 tree name = TYPE_IDENTIFIER (t);
12452 tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
12454 if (ctx == error_mark_node || name == error_mark_node)
12455 return error_mark_node;
12457 if (parm_list)
12458 parm_list = tsubst_template_parms (parm_list, args, complain);
12459 return make_unbound_class_template (ctx, name, parm_list, complain);
12462 case TYPEOF_TYPE:
12464 tree type;
12466 ++cp_unevaluated_operand;
12467 ++c_inhibit_evaluation_warnings;
12469 type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
12470 complain, in_decl,
12471 /*integral_constant_expression_p=*/false);
12473 --cp_unevaluated_operand;
12474 --c_inhibit_evaluation_warnings;
12476 type = finish_typeof (type);
12477 return cp_build_qualified_type_real (type,
12478 cp_type_quals (t)
12479 | cp_type_quals (type),
12480 complain);
12483 case DECLTYPE_TYPE:
12485 tree type;
12487 ++cp_unevaluated_operand;
12488 ++c_inhibit_evaluation_warnings;
12490 type = tsubst_copy_and_build (DECLTYPE_TYPE_EXPR (t), args,
12491 complain|tf_decltype, in_decl,
12492 /*function_p*/false,
12493 /*integral_constant_expression*/false);
12495 --cp_unevaluated_operand;
12496 --c_inhibit_evaluation_warnings;
12498 if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
12499 type = lambda_capture_field_type (type,
12500 DECLTYPE_FOR_INIT_CAPTURE (t));
12501 else if (DECLTYPE_FOR_LAMBDA_PROXY (t))
12502 type = lambda_proxy_type (type);
12503 else
12505 bool id = DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t);
12506 if (id && TREE_CODE (DECLTYPE_TYPE_EXPR (t)) == BIT_NOT_EXPR
12507 && EXPR_P (type))
12508 /* In a template ~id could be either a complement expression
12509 or an unqualified-id naming a destructor; if instantiating
12510 it produces an expression, it's not an id-expression or
12511 member access. */
12512 id = false;
12513 type = finish_decltype_type (type, id, complain);
12515 return cp_build_qualified_type_real (type,
12516 cp_type_quals (t)
12517 | cp_type_quals (type),
12518 complain | tf_ignore_bad_quals);
12521 case UNDERLYING_TYPE:
12523 tree type = tsubst (UNDERLYING_TYPE_TYPE (t), args,
12524 complain, in_decl);
12525 return finish_underlying_type (type);
12528 case TYPE_ARGUMENT_PACK:
12529 case NONTYPE_ARGUMENT_PACK:
12531 tree r = TYPE_P (t) ? cxx_make_type (code) : make_node (code);
12532 tree packed_out =
12533 tsubst_template_args (ARGUMENT_PACK_ARGS (t),
12534 args,
12535 complain,
12536 in_decl);
12537 SET_ARGUMENT_PACK_ARGS (r, packed_out);
12539 /* For template nontype argument packs, also substitute into
12540 the type. */
12541 if (code == NONTYPE_ARGUMENT_PACK)
12542 TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
12544 return r;
12546 break;
12548 case VOID_CST:
12549 case INTEGER_CST:
12550 case REAL_CST:
12551 case STRING_CST:
12552 case PLUS_EXPR:
12553 case MINUS_EXPR:
12554 case NEGATE_EXPR:
12555 case NOP_EXPR:
12556 case INDIRECT_REF:
12557 case ADDR_EXPR:
12558 case CALL_EXPR:
12559 case ARRAY_REF:
12560 case SCOPE_REF:
12561 /* We should use one of the expression tsubsts for these codes. */
12562 gcc_unreachable ();
12564 default:
12565 sorry ("use of %qs in template", get_tree_code_name (code));
12566 return error_mark_node;
12570 /* Like tsubst_expr for a BASELINK. OBJECT_TYPE, if non-NULL, is the
12571 type of the expression on the left-hand side of the "." or "->"
12572 operator. */
12574 static tree
12575 tsubst_baselink (tree baselink, tree object_type,
12576 tree args, tsubst_flags_t complain, tree in_decl)
12578 tree name;
12579 tree qualifying_scope;
12580 tree fns;
12581 tree optype;
12582 tree template_args = 0;
12583 bool template_id_p = false;
12584 bool qualified = BASELINK_QUALIFIED_P (baselink);
12586 /* A baselink indicates a function from a base class. Both the
12587 BASELINK_ACCESS_BINFO and the base class referenced may
12588 indicate bases of the template class, rather than the
12589 instantiated class. In addition, lookups that were not
12590 ambiguous before may be ambiguous now. Therefore, we perform
12591 the lookup again. */
12592 qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
12593 qualifying_scope = tsubst (qualifying_scope, args,
12594 complain, in_decl);
12595 fns = BASELINK_FUNCTIONS (baselink);
12596 optype = tsubst (BASELINK_OPTYPE (baselink), args, complain, in_decl);
12597 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
12599 template_id_p = true;
12600 template_args = TREE_OPERAND (fns, 1);
12601 fns = TREE_OPERAND (fns, 0);
12602 if (template_args)
12603 template_args = tsubst_template_args (template_args, args,
12604 complain, in_decl);
12606 name = DECL_NAME (get_first_fn (fns));
12607 if (IDENTIFIER_TYPENAME_P (name))
12608 name = mangle_conv_op_name_for_type (optype);
12609 baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
12610 if (!baselink)
12611 return error_mark_node;
12613 /* If lookup found a single function, mark it as used at this
12614 point. (If it lookup found multiple functions the one selected
12615 later by overload resolution will be marked as used at that
12616 point.) */
12617 if (BASELINK_P (baselink))
12618 fns = BASELINK_FUNCTIONS (baselink);
12619 if (!template_id_p && !really_overloaded_fn (fns)
12620 && !mark_used (OVL_CURRENT (fns), complain) && !(complain & tf_error))
12621 return error_mark_node;
12623 /* Add back the template arguments, if present. */
12624 if (BASELINK_P (baselink) && template_id_p)
12625 BASELINK_FUNCTIONS (baselink)
12626 = build_nt (TEMPLATE_ID_EXPR,
12627 BASELINK_FUNCTIONS (baselink),
12628 template_args);
12629 /* Update the conversion operator type. */
12630 BASELINK_OPTYPE (baselink) = optype;
12632 if (!object_type)
12633 object_type = current_class_type;
12635 if (qualified)
12636 baselink = adjust_result_of_qualified_name_lookup (baselink,
12637 qualifying_scope,
12638 object_type);
12639 return baselink;
12642 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID. DONE is
12643 true if the qualified-id will be a postfix-expression in-and-of
12644 itself; false if more of the postfix-expression follows the
12645 QUALIFIED_ID. ADDRESS_P is true if the qualified-id is the operand
12646 of "&". */
12648 static tree
12649 tsubst_qualified_id (tree qualified_id, tree args,
12650 tsubst_flags_t complain, tree in_decl,
12651 bool done, bool address_p)
12653 tree expr;
12654 tree scope;
12655 tree name;
12656 bool is_template;
12657 tree template_args;
12658 location_t loc = UNKNOWN_LOCATION;
12660 gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
12662 /* Figure out what name to look up. */
12663 name = TREE_OPERAND (qualified_id, 1);
12664 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
12666 is_template = true;
12667 loc = EXPR_LOCATION (name);
12668 template_args = TREE_OPERAND (name, 1);
12669 if (template_args)
12670 template_args = tsubst_template_args (template_args, args,
12671 complain, in_decl);
12672 name = TREE_OPERAND (name, 0);
12674 else
12676 is_template = false;
12677 template_args = NULL_TREE;
12680 /* Substitute into the qualifying scope. When there are no ARGS, we
12681 are just trying to simplify a non-dependent expression. In that
12682 case the qualifying scope may be dependent, and, in any case,
12683 substituting will not help. */
12684 scope = TREE_OPERAND (qualified_id, 0);
12685 if (args)
12687 scope = tsubst (scope, args, complain, in_decl);
12688 expr = tsubst_copy (name, args, complain, in_decl);
12690 else
12691 expr = name;
12693 if (dependent_scope_p (scope))
12695 if (is_template)
12696 expr = build_min_nt_loc (loc, TEMPLATE_ID_EXPR, expr, template_args);
12697 return build_qualified_name (NULL_TREE, scope, expr,
12698 QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
12701 if (!BASELINK_P (name) && !DECL_P (expr))
12703 if (TREE_CODE (expr) == BIT_NOT_EXPR)
12705 /* A BIT_NOT_EXPR is used to represent a destructor. */
12706 if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
12708 error ("qualifying type %qT does not match destructor name ~%qT",
12709 scope, TREE_OPERAND (expr, 0));
12710 expr = error_mark_node;
12712 else
12713 expr = lookup_qualified_name (scope, complete_dtor_identifier,
12714 /*is_type_p=*/0, false);
12716 else
12717 expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
12718 if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
12719 ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
12721 if (complain & tf_error)
12723 error ("dependent-name %qE is parsed as a non-type, but "
12724 "instantiation yields a type", qualified_id);
12725 inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
12727 return error_mark_node;
12731 if (DECL_P (expr))
12733 check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
12734 scope);
12735 /* Remember that there was a reference to this entity. */
12736 if (!mark_used (expr, complain) && !(complain & tf_error))
12737 return error_mark_node;
12740 if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
12742 if (complain & tf_error)
12743 qualified_name_lookup_error (scope,
12744 TREE_OPERAND (qualified_id, 1),
12745 expr, input_location);
12746 return error_mark_node;
12749 if (is_template)
12750 expr = lookup_template_function (expr, template_args);
12752 if (expr == error_mark_node && complain & tf_error)
12753 qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
12754 expr, input_location);
12755 else if (TYPE_P (scope))
12757 expr = (adjust_result_of_qualified_name_lookup
12758 (expr, scope, current_nonlambda_class_type ()));
12759 expr = (finish_qualified_id_expr
12760 (scope, expr, done, address_p && PTRMEM_OK_P (qualified_id),
12761 QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
12762 /*template_arg_p=*/false, complain));
12765 /* Expressions do not generally have reference type. */
12766 if (TREE_CODE (expr) != SCOPE_REF
12767 /* However, if we're about to form a pointer-to-member, we just
12768 want the referenced member referenced. */
12769 && TREE_CODE (expr) != OFFSET_REF)
12770 expr = convert_from_reference (expr);
12772 return expr;
12775 /* tsubst the initializer for a VAR_DECL. INIT is the unsubstituted
12776 initializer, DECL is the substituted VAR_DECL. Other arguments are as
12777 for tsubst. */
12779 static tree
12780 tsubst_init (tree init, tree decl, tree args,
12781 tsubst_flags_t complain, tree in_decl)
12783 if (!init)
12784 return NULL_TREE;
12786 init = tsubst_expr (init, args, complain, in_decl, false);
12788 if (!init)
12790 /* If we had an initializer but it
12791 instantiated to nothing,
12792 value-initialize the object. This will
12793 only occur when the initializer was a
12794 pack expansion where the parameter packs
12795 used in that expansion were of length
12796 zero. */
12797 init = build_value_init (TREE_TYPE (decl),
12798 complain);
12799 if (TREE_CODE (init) == AGGR_INIT_EXPR)
12800 init = get_target_expr_sfinae (init, complain);
12803 return init;
12806 /* Like tsubst, but deals with expressions. This function just replaces
12807 template parms; to finish processing the resultant expression, use
12808 tsubst_copy_and_build or tsubst_expr. */
12810 static tree
12811 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
12813 enum tree_code code;
12814 tree r;
12816 if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
12817 return t;
12819 code = TREE_CODE (t);
12821 switch (code)
12823 case PARM_DECL:
12824 r = retrieve_local_specialization (t);
12826 if (r == NULL_TREE)
12828 /* We get here for a use of 'this' in an NSDMI. */
12829 if (DECL_NAME (t) == this_identifier
12830 && current_function_decl
12831 && DECL_CONSTRUCTOR_P (current_function_decl))
12832 return current_class_ptr;
12834 /* This can happen for a parameter name used later in a function
12835 declaration (such as in a late-specified return type). Just
12836 make a dummy decl, since it's only used for its type. */
12837 gcc_assert (cp_unevaluated_operand != 0);
12838 r = tsubst_decl (t, args, complain);
12839 /* Give it the template pattern as its context; its true context
12840 hasn't been instantiated yet and this is good enough for
12841 mangling. */
12842 DECL_CONTEXT (r) = DECL_CONTEXT (t);
12845 if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
12846 r = ARGUMENT_PACK_SELECT_ARG (r);
12847 if (!mark_used (r, complain) && !(complain & tf_error))
12848 return error_mark_node;
12849 return r;
12851 case CONST_DECL:
12853 tree enum_type;
12854 tree v;
12856 if (DECL_TEMPLATE_PARM_P (t))
12857 return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
12858 /* There is no need to substitute into namespace-scope
12859 enumerators. */
12860 if (DECL_NAMESPACE_SCOPE_P (t))
12861 return t;
12862 /* If ARGS is NULL, then T is known to be non-dependent. */
12863 if (args == NULL_TREE)
12864 return scalar_constant_value (t);
12866 /* Unfortunately, we cannot just call lookup_name here.
12867 Consider:
12869 template <int I> int f() {
12870 enum E { a = I };
12871 struct S { void g() { E e = a; } };
12874 When we instantiate f<7>::S::g(), say, lookup_name is not
12875 clever enough to find f<7>::a. */
12876 enum_type
12877 = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
12878 /*entering_scope=*/0);
12880 for (v = TYPE_VALUES (enum_type);
12881 v != NULL_TREE;
12882 v = TREE_CHAIN (v))
12883 if (TREE_PURPOSE (v) == DECL_NAME (t))
12884 return TREE_VALUE (v);
12886 /* We didn't find the name. That should never happen; if
12887 name-lookup found it during preliminary parsing, we
12888 should find it again here during instantiation. */
12889 gcc_unreachable ();
12891 return t;
12893 case FIELD_DECL:
12894 if (PACK_EXPANSION_P (TREE_TYPE (t)))
12896 /* Check for a local specialization set up by
12897 tsubst_pack_expansion. */
12898 if (tree r = retrieve_local_specialization (t))
12900 if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
12901 r = ARGUMENT_PACK_SELECT_ARG (r);
12902 return r;
12905 /* When retrieving a capture pack from a generic lambda, remove the
12906 lambda call op's own template argument list from ARGS. Only the
12907 template arguments active for the closure type should be used to
12908 retrieve the pack specialization. */
12909 if (LAMBDA_FUNCTION_P (current_function_decl)
12910 && (template_class_depth (DECL_CONTEXT (t))
12911 != TMPL_ARGS_DEPTH (args)))
12912 args = strip_innermost_template_args (args, 1);
12914 /* Otherwise return the full NONTYPE_ARGUMENT_PACK that
12915 tsubst_decl put in the hash table. */
12916 return retrieve_specialization (t, args, 0);
12919 if (DECL_CONTEXT (t))
12921 tree ctx;
12923 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
12924 /*entering_scope=*/1);
12925 if (ctx != DECL_CONTEXT (t))
12927 tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
12928 if (!r)
12930 if (complain & tf_error)
12931 error ("using invalid field %qD", t);
12932 return error_mark_node;
12934 return r;
12938 return t;
12940 case VAR_DECL:
12941 case FUNCTION_DECL:
12942 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
12943 r = tsubst (t, args, complain, in_decl);
12944 else if (local_variable_p (t))
12946 r = retrieve_local_specialization (t);
12947 if (r == NULL_TREE)
12949 /* First try name lookup to find the instantiation. */
12950 r = lookup_name (DECL_NAME (t));
12951 if (r)
12953 /* Make sure that the one we found is the one we want. */
12954 tree ctx = tsubst (DECL_CONTEXT (t), args,
12955 complain, in_decl);
12956 if (ctx != DECL_CONTEXT (r))
12957 r = NULL_TREE;
12960 if (r)
12961 /* OK */;
12962 else
12964 /* This can happen for a variable used in a
12965 late-specified return type of a local lambda, or for a
12966 local static or constant. Building a new VAR_DECL
12967 should be OK in all those cases. */
12968 r = tsubst_decl (t, args, complain);
12969 if (decl_maybe_constant_var_p (r))
12971 /* We can't call cp_finish_decl, so handle the
12972 initializer by hand. */
12973 tree init = tsubst_init (DECL_INITIAL (t), r, args,
12974 complain, in_decl);
12975 if (!processing_template_decl)
12976 init = maybe_constant_init (init);
12977 if (processing_template_decl
12978 ? potential_constant_expression (init)
12979 : reduced_constant_expression_p (init))
12980 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
12981 = TREE_CONSTANT (r) = true;
12982 DECL_INITIAL (r) = init;
12984 gcc_assert (cp_unevaluated_operand || TREE_STATIC (r)
12985 || decl_constant_var_p (r)
12986 || errorcount || sorrycount);
12987 if (!processing_template_decl)
12989 if (TREE_STATIC (r))
12990 rest_of_decl_compilation (r, toplevel_bindings_p (),
12991 at_eof);
12992 else if (decl_constant_var_p (r))
12993 /* A use of a local constant decays to its value.
12994 FIXME update for core DR 696. */
12995 r = scalar_constant_value (r);
12998 /* Remember this for subsequent uses. */
12999 if (local_specializations)
13000 register_local_specialization (r, t);
13003 else
13004 r = t;
13005 if (!mark_used (r, complain) && !(complain & tf_error))
13006 return error_mark_node;
13007 return r;
13009 case NAMESPACE_DECL:
13010 return t;
13012 case OVERLOAD:
13013 /* An OVERLOAD will always be a non-dependent overload set; an
13014 overload set from function scope will just be represented with an
13015 IDENTIFIER_NODE, and from class scope with a BASELINK. */
13016 gcc_assert (!uses_template_parms (t));
13017 return t;
13019 case BASELINK:
13020 return tsubst_baselink (t, current_nonlambda_class_type (),
13021 args, complain, in_decl);
13023 case TEMPLATE_DECL:
13024 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
13025 return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
13026 args, complain, in_decl);
13027 else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
13028 return tsubst (t, args, complain, in_decl);
13029 else if (DECL_CLASS_SCOPE_P (t)
13030 && uses_template_parms (DECL_CONTEXT (t)))
13032 /* Template template argument like the following example need
13033 special treatment:
13035 template <template <class> class TT> struct C {};
13036 template <class T> struct D {
13037 template <class U> struct E {};
13038 C<E> c; // #1
13040 D<int> d; // #2
13042 We are processing the template argument `E' in #1 for
13043 the template instantiation #2. Originally, `E' is a
13044 TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT. Now we
13045 have to substitute this with one having context `D<int>'. */
13047 tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
13048 return lookup_field (context, DECL_NAME(t), 0, false);
13050 else
13051 /* Ordinary template template argument. */
13052 return t;
13054 case CAST_EXPR:
13055 case REINTERPRET_CAST_EXPR:
13056 case CONST_CAST_EXPR:
13057 case STATIC_CAST_EXPR:
13058 case DYNAMIC_CAST_EXPR:
13059 case IMPLICIT_CONV_EXPR:
13060 case CONVERT_EXPR:
13061 case NOP_EXPR:
13063 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13064 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13065 return build1 (code, type, op0);
13068 case SIZEOF_EXPR:
13069 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
13072 tree expanded, op = TREE_OPERAND (t, 0);
13073 int len = 0;
13075 if (SIZEOF_EXPR_TYPE_P (t))
13076 op = TREE_TYPE (op);
13078 ++cp_unevaluated_operand;
13079 ++c_inhibit_evaluation_warnings;
13080 /* We only want to compute the number of arguments. */
13081 expanded = tsubst_pack_expansion (op, args, complain, in_decl);
13082 --cp_unevaluated_operand;
13083 --c_inhibit_evaluation_warnings;
13085 if (TREE_CODE (expanded) == TREE_VEC)
13086 len = TREE_VEC_LENGTH (expanded);
13088 if (expanded == error_mark_node)
13089 return error_mark_node;
13090 else if (PACK_EXPANSION_P (expanded)
13091 || (TREE_CODE (expanded) == TREE_VEC
13092 && len > 0
13093 && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
13095 if (TREE_CODE (expanded) == TREE_VEC)
13096 expanded = TREE_VEC_ELT (expanded, len - 1);
13098 if (TYPE_P (expanded))
13099 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR,
13100 complain & tf_error);
13101 else
13102 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
13103 complain & tf_error);
13105 else
13106 return build_int_cst (size_type_node, len);
13108 if (SIZEOF_EXPR_TYPE_P (t))
13110 r = tsubst (TREE_TYPE (TREE_OPERAND (t, 0)),
13111 args, complain, in_decl);
13112 r = build1 (NOP_EXPR, r, error_mark_node);
13113 r = build1 (SIZEOF_EXPR,
13114 tsubst (TREE_TYPE (t), args, complain, in_decl), r);
13115 SIZEOF_EXPR_TYPE_P (r) = 1;
13116 return r;
13118 /* Fall through */
13120 case INDIRECT_REF:
13121 case NEGATE_EXPR:
13122 case TRUTH_NOT_EXPR:
13123 case BIT_NOT_EXPR:
13124 case ADDR_EXPR:
13125 case UNARY_PLUS_EXPR: /* Unary + */
13126 case ALIGNOF_EXPR:
13127 case AT_ENCODE_EXPR:
13128 case ARROW_EXPR:
13129 case THROW_EXPR:
13130 case TYPEID_EXPR:
13131 case REALPART_EXPR:
13132 case IMAGPART_EXPR:
13133 case PAREN_EXPR:
13135 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13136 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13137 return build1 (code, type, op0);
13140 case COMPONENT_REF:
13142 tree object;
13143 tree name;
13145 object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13146 name = TREE_OPERAND (t, 1);
13147 if (TREE_CODE (name) == BIT_NOT_EXPR)
13149 name = tsubst_copy (TREE_OPERAND (name, 0), args,
13150 complain, in_decl);
13151 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
13153 else if (TREE_CODE (name) == SCOPE_REF
13154 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
13156 tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
13157 complain, in_decl);
13158 name = TREE_OPERAND (name, 1);
13159 name = tsubst_copy (TREE_OPERAND (name, 0), args,
13160 complain, in_decl);
13161 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
13162 name = build_qualified_name (/*type=*/NULL_TREE,
13163 base, name,
13164 /*template_p=*/false);
13166 else if (BASELINK_P (name))
13167 name = tsubst_baselink (name,
13168 non_reference (TREE_TYPE (object)),
13169 args, complain,
13170 in_decl);
13171 else
13172 name = tsubst_copy (name, args, complain, in_decl);
13173 return build_nt (COMPONENT_REF, object, name, NULL_TREE);
13176 case PLUS_EXPR:
13177 case MINUS_EXPR:
13178 case MULT_EXPR:
13179 case TRUNC_DIV_EXPR:
13180 case CEIL_DIV_EXPR:
13181 case FLOOR_DIV_EXPR:
13182 case ROUND_DIV_EXPR:
13183 case EXACT_DIV_EXPR:
13184 case BIT_AND_EXPR:
13185 case BIT_IOR_EXPR:
13186 case BIT_XOR_EXPR:
13187 case TRUNC_MOD_EXPR:
13188 case FLOOR_MOD_EXPR:
13189 case TRUTH_ANDIF_EXPR:
13190 case TRUTH_ORIF_EXPR:
13191 case TRUTH_AND_EXPR:
13192 case TRUTH_OR_EXPR:
13193 case RSHIFT_EXPR:
13194 case LSHIFT_EXPR:
13195 case RROTATE_EXPR:
13196 case LROTATE_EXPR:
13197 case EQ_EXPR:
13198 case NE_EXPR:
13199 case MAX_EXPR:
13200 case MIN_EXPR:
13201 case LE_EXPR:
13202 case GE_EXPR:
13203 case LT_EXPR:
13204 case GT_EXPR:
13205 case COMPOUND_EXPR:
13206 case DOTSTAR_EXPR:
13207 case MEMBER_REF:
13208 case PREDECREMENT_EXPR:
13209 case PREINCREMENT_EXPR:
13210 case POSTDECREMENT_EXPR:
13211 case POSTINCREMENT_EXPR:
13213 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13214 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13215 return build_nt (code, op0, op1);
13218 case SCOPE_REF:
13220 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13221 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13222 return build_qualified_name (/*type=*/NULL_TREE, op0, op1,
13223 QUALIFIED_NAME_IS_TEMPLATE (t));
13226 case ARRAY_REF:
13228 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13229 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13230 return build_nt (ARRAY_REF, op0, op1, NULL_TREE, NULL_TREE);
13233 case CALL_EXPR:
13235 int n = VL_EXP_OPERAND_LENGTH (t);
13236 tree result = build_vl_exp (CALL_EXPR, n);
13237 int i;
13238 for (i = 0; i < n; i++)
13239 TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
13240 complain, in_decl);
13241 return result;
13244 case COND_EXPR:
13245 case MODOP_EXPR:
13246 case PSEUDO_DTOR_EXPR:
13247 case VEC_PERM_EXPR:
13249 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13250 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13251 tree op2 = tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl);
13252 r = build_nt (code, op0, op1, op2);
13253 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
13254 return r;
13257 case NEW_EXPR:
13259 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13260 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13261 tree op2 = tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl);
13262 r = build_nt (code, op0, op1, op2);
13263 NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
13264 return r;
13267 case DELETE_EXPR:
13269 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13270 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13271 r = build_nt (code, op0, op1);
13272 DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
13273 DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
13274 return r;
13277 case TEMPLATE_ID_EXPR:
13279 /* Substituted template arguments */
13280 tree fn = TREE_OPERAND (t, 0);
13281 tree targs = TREE_OPERAND (t, 1);
13283 fn = tsubst_copy (fn, args, complain, in_decl);
13284 if (targs)
13285 targs = tsubst_template_args (targs, args, complain, in_decl);
13287 return lookup_template_function (fn, targs);
13290 case TREE_LIST:
13292 tree purpose, value, chain;
13294 if (t == void_list_node)
13295 return t;
13297 purpose = TREE_PURPOSE (t);
13298 if (purpose)
13299 purpose = tsubst_copy (purpose, args, complain, in_decl);
13300 value = TREE_VALUE (t);
13301 if (value)
13302 value = tsubst_copy (value, args, complain, in_decl);
13303 chain = TREE_CHAIN (t);
13304 if (chain && chain != void_type_node)
13305 chain = tsubst_copy (chain, args, complain, in_decl);
13306 if (purpose == TREE_PURPOSE (t)
13307 && value == TREE_VALUE (t)
13308 && chain == TREE_CHAIN (t))
13309 return t;
13310 return tree_cons (purpose, value, chain);
13313 case RECORD_TYPE:
13314 case UNION_TYPE:
13315 case ENUMERAL_TYPE:
13316 case INTEGER_TYPE:
13317 case TEMPLATE_TYPE_PARM:
13318 case TEMPLATE_TEMPLATE_PARM:
13319 case BOUND_TEMPLATE_TEMPLATE_PARM:
13320 case TEMPLATE_PARM_INDEX:
13321 case POINTER_TYPE:
13322 case REFERENCE_TYPE:
13323 case OFFSET_TYPE:
13324 case FUNCTION_TYPE:
13325 case METHOD_TYPE:
13326 case ARRAY_TYPE:
13327 case TYPENAME_TYPE:
13328 case UNBOUND_CLASS_TEMPLATE:
13329 case TYPEOF_TYPE:
13330 case DECLTYPE_TYPE:
13331 case TYPE_DECL:
13332 return tsubst (t, args, complain, in_decl);
13334 case USING_DECL:
13335 t = DECL_NAME (t);
13336 /* Fall through. */
13337 case IDENTIFIER_NODE:
13338 if (IDENTIFIER_TYPENAME_P (t))
13340 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13341 return mangle_conv_op_name_for_type (new_type);
13343 else
13344 return t;
13346 case CONSTRUCTOR:
13347 /* This is handled by tsubst_copy_and_build. */
13348 gcc_unreachable ();
13350 case VA_ARG_EXPR:
13352 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13353 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13354 return build_x_va_arg (EXPR_LOCATION (t), op0, type);
13357 case CLEANUP_POINT_EXPR:
13358 /* We shouldn't have built any of these during initial template
13359 generation. Instead, they should be built during instantiation
13360 in response to the saved STMT_IS_FULL_EXPR_P setting. */
13361 gcc_unreachable ();
13363 case OFFSET_REF:
13365 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13366 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13367 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13368 r = build2 (code, type, op0, op1);
13369 PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
13370 if (!mark_used (TREE_OPERAND (r, 1), complain)
13371 && !(complain & tf_error))
13372 return error_mark_node;
13373 return r;
13376 case EXPR_PACK_EXPANSION:
13377 error ("invalid use of pack expansion expression");
13378 return error_mark_node;
13380 case NONTYPE_ARGUMENT_PACK:
13381 error ("use %<...%> to expand argument pack");
13382 return error_mark_node;
13384 case VOID_CST:
13385 gcc_checking_assert (t == void_node && VOID_TYPE_P (TREE_TYPE (t)));
13386 return t;
13388 case INTEGER_CST:
13389 case REAL_CST:
13390 case STRING_CST:
13391 case COMPLEX_CST:
13393 /* Instantiate any typedefs in the type. */
13394 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13395 r = fold_convert (type, t);
13396 gcc_assert (TREE_CODE (r) == code);
13397 return r;
13400 case PTRMEM_CST:
13401 /* These can sometimes show up in a partial instantiation, but never
13402 involve template parms. */
13403 gcc_assert (!uses_template_parms (t));
13404 return t;
13406 default:
13407 /* We shouldn't get here, but keep going if !ENABLE_CHECKING. */
13408 gcc_checking_assert (false);
13409 return t;
13413 /* Like tsubst_copy, but specifically for OpenMP clauses. */
13415 static tree
13416 tsubst_omp_clauses (tree clauses, bool declare_simd,
13417 tree args, tsubst_flags_t complain, tree in_decl)
13419 tree new_clauses = NULL, nc, oc;
13421 for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
13423 nc = copy_node (oc);
13424 OMP_CLAUSE_CHAIN (nc) = new_clauses;
13425 new_clauses = nc;
13427 switch (OMP_CLAUSE_CODE (nc))
13429 case OMP_CLAUSE_LASTPRIVATE:
13430 if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
13432 OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
13433 tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
13434 in_decl, /*integral_constant_expression_p=*/false);
13435 OMP_CLAUSE_LASTPRIVATE_STMT (nc)
13436 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
13438 /* FALLTHRU */
13439 case OMP_CLAUSE_PRIVATE:
13440 case OMP_CLAUSE_SHARED:
13441 case OMP_CLAUSE_FIRSTPRIVATE:
13442 case OMP_CLAUSE_COPYIN:
13443 case OMP_CLAUSE_COPYPRIVATE:
13444 case OMP_CLAUSE_IF:
13445 case OMP_CLAUSE_NUM_THREADS:
13446 case OMP_CLAUSE_SCHEDULE:
13447 case OMP_CLAUSE_COLLAPSE:
13448 case OMP_CLAUSE_FINAL:
13449 case OMP_CLAUSE_DEPEND:
13450 case OMP_CLAUSE_FROM:
13451 case OMP_CLAUSE_TO:
13452 case OMP_CLAUSE_UNIFORM:
13453 case OMP_CLAUSE_MAP:
13454 case OMP_CLAUSE_DEVICE:
13455 case OMP_CLAUSE_DIST_SCHEDULE:
13456 case OMP_CLAUSE_NUM_TEAMS:
13457 case OMP_CLAUSE_THREAD_LIMIT:
13458 case OMP_CLAUSE_SAFELEN:
13459 case OMP_CLAUSE_SIMDLEN:
13460 OMP_CLAUSE_OPERAND (nc, 0)
13461 = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
13462 in_decl, /*integral_constant_expression_p=*/false);
13463 break;
13464 case OMP_CLAUSE_REDUCTION:
13465 if (OMP_CLAUSE_REDUCTION_PLACEHOLDER (oc))
13467 tree placeholder = OMP_CLAUSE_REDUCTION_PLACEHOLDER (oc);
13468 if (TREE_CODE (placeholder) == SCOPE_REF)
13470 tree scope = tsubst (TREE_OPERAND (placeholder, 0), args,
13471 complain, in_decl);
13472 OMP_CLAUSE_REDUCTION_PLACEHOLDER (nc)
13473 = build_qualified_name (NULL_TREE, scope,
13474 TREE_OPERAND (placeholder, 1),
13475 false);
13477 else
13478 gcc_assert (identifier_p (placeholder));
13480 OMP_CLAUSE_OPERAND (nc, 0)
13481 = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
13482 in_decl, /*integral_constant_expression_p=*/false);
13483 break;
13484 case OMP_CLAUSE_LINEAR:
13485 case OMP_CLAUSE_ALIGNED:
13486 OMP_CLAUSE_OPERAND (nc, 0)
13487 = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
13488 in_decl, /*integral_constant_expression_p=*/false);
13489 OMP_CLAUSE_OPERAND (nc, 1)
13490 = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 1), args, complain,
13491 in_decl, /*integral_constant_expression_p=*/false);
13492 break;
13494 case OMP_CLAUSE_NOWAIT:
13495 case OMP_CLAUSE_ORDERED:
13496 case OMP_CLAUSE_DEFAULT:
13497 case OMP_CLAUSE_UNTIED:
13498 case OMP_CLAUSE_MERGEABLE:
13499 case OMP_CLAUSE_INBRANCH:
13500 case OMP_CLAUSE_NOTINBRANCH:
13501 case OMP_CLAUSE_PROC_BIND:
13502 case OMP_CLAUSE_FOR:
13503 case OMP_CLAUSE_PARALLEL:
13504 case OMP_CLAUSE_SECTIONS:
13505 case OMP_CLAUSE_TASKGROUP:
13506 break;
13507 default:
13508 gcc_unreachable ();
13512 new_clauses = nreverse (new_clauses);
13513 if (!declare_simd)
13514 new_clauses = finish_omp_clauses (new_clauses);
13515 return new_clauses;
13518 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes. */
13520 static tree
13521 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
13522 tree in_decl)
13524 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
13526 tree purpose, value, chain;
13528 if (t == NULL)
13529 return t;
13531 if (TREE_CODE (t) != TREE_LIST)
13532 return tsubst_copy_and_build (t, args, complain, in_decl,
13533 /*function_p=*/false,
13534 /*integral_constant_expression_p=*/false);
13536 if (t == void_list_node)
13537 return t;
13539 purpose = TREE_PURPOSE (t);
13540 if (purpose)
13541 purpose = RECUR (purpose);
13542 value = TREE_VALUE (t);
13543 if (value)
13545 if (TREE_CODE (value) != LABEL_DECL)
13546 value = RECUR (value);
13547 else
13549 value = lookup_label (DECL_NAME (value));
13550 gcc_assert (TREE_CODE (value) == LABEL_DECL);
13551 TREE_USED (value) = 1;
13554 chain = TREE_CHAIN (t);
13555 if (chain && chain != void_type_node)
13556 chain = RECUR (chain);
13557 return tree_cons (purpose, value, chain);
13558 #undef RECUR
13561 /* Substitute one OMP_FOR iterator. */
13563 static void
13564 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
13565 tree condv, tree incrv, tree *clauses,
13566 tree args, tsubst_flags_t complain, tree in_decl,
13567 bool integral_constant_expression_p)
13569 #define RECUR(NODE) \
13570 tsubst_expr ((NODE), args, complain, in_decl, \
13571 integral_constant_expression_p)
13572 tree decl, init, cond, incr;
13574 init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
13575 gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
13576 decl = TREE_OPERAND (init, 0);
13577 init = TREE_OPERAND (init, 1);
13578 tree decl_expr = NULL_TREE;
13579 if (init && TREE_CODE (init) == DECL_EXPR)
13581 /* We need to jump through some hoops to handle declarations in the
13582 for-init-statement, since we might need to handle auto deduction,
13583 but we need to keep control of initialization. */
13584 decl_expr = init;
13585 init = DECL_INITIAL (DECL_EXPR_DECL (init));
13586 decl = tsubst_decl (decl, args, complain);
13588 else
13589 decl = RECUR (decl);
13590 init = RECUR (init);
13592 tree auto_node = type_uses_auto (TREE_TYPE (decl));
13593 if (auto_node && init)
13594 TREE_TYPE (decl)
13595 = do_auto_deduction (TREE_TYPE (decl), init, auto_node);
13597 gcc_assert (!type_dependent_expression_p (decl));
13599 if (!CLASS_TYPE_P (TREE_TYPE (decl)))
13601 if (decl_expr)
13603 /* Declare the variable, but don't let that initialize it. */
13604 tree init_sav = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
13605 DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL_TREE;
13606 RECUR (decl_expr);
13607 DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init_sav;
13610 cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
13611 incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
13612 if (TREE_CODE (incr) == MODIFY_EXPR)
13614 tree lhs = RECUR (TREE_OPERAND (incr, 0));
13615 tree rhs = RECUR (TREE_OPERAND (incr, 1));
13616 incr = build_x_modify_expr (EXPR_LOCATION (incr), lhs,
13617 NOP_EXPR, rhs, complain);
13619 else
13620 incr = RECUR (incr);
13621 TREE_VEC_ELT (declv, i) = decl;
13622 TREE_VEC_ELT (initv, i) = init;
13623 TREE_VEC_ELT (condv, i) = cond;
13624 TREE_VEC_ELT (incrv, i) = incr;
13625 return;
13628 if (decl_expr)
13630 /* Declare and initialize the variable. */
13631 RECUR (decl_expr);
13632 init = NULL_TREE;
13634 else if (init)
13636 tree c;
13637 for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
13639 if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
13640 || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
13641 && OMP_CLAUSE_DECL (c) == decl)
13642 break;
13643 else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
13644 && OMP_CLAUSE_DECL (c) == decl)
13645 error ("iteration variable %qD should not be firstprivate", decl);
13646 else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
13647 && OMP_CLAUSE_DECL (c) == decl)
13648 error ("iteration variable %qD should not be reduction", decl);
13650 if (c == NULL)
13652 c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
13653 OMP_CLAUSE_DECL (c) = decl;
13654 c = finish_omp_clauses (c);
13655 if (c)
13657 OMP_CLAUSE_CHAIN (c) = *clauses;
13658 *clauses = c;
13662 cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
13663 if (COMPARISON_CLASS_P (cond))
13665 tree op0 = RECUR (TREE_OPERAND (cond, 0));
13666 tree op1 = RECUR (TREE_OPERAND (cond, 1));
13667 cond = build2 (TREE_CODE (cond), boolean_type_node, op0, op1);
13669 else
13670 cond = RECUR (cond);
13671 incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
13672 switch (TREE_CODE (incr))
13674 case PREINCREMENT_EXPR:
13675 case PREDECREMENT_EXPR:
13676 case POSTINCREMENT_EXPR:
13677 case POSTDECREMENT_EXPR:
13678 incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
13679 RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
13680 break;
13681 case MODIFY_EXPR:
13682 if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
13683 || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
13685 tree rhs = TREE_OPERAND (incr, 1);
13686 tree lhs = RECUR (TREE_OPERAND (incr, 0));
13687 tree rhs0 = RECUR (TREE_OPERAND (rhs, 0));
13688 tree rhs1 = RECUR (TREE_OPERAND (rhs, 1));
13689 incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
13690 build2 (TREE_CODE (rhs), TREE_TYPE (decl),
13691 rhs0, rhs1));
13693 else
13694 incr = RECUR (incr);
13695 break;
13696 case MODOP_EXPR:
13697 if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
13698 || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
13700 tree lhs = RECUR (TREE_OPERAND (incr, 0));
13701 incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
13702 build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
13703 TREE_TYPE (decl), lhs,
13704 RECUR (TREE_OPERAND (incr, 2))));
13706 else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
13707 && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
13708 || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
13710 tree rhs = TREE_OPERAND (incr, 2);
13711 tree lhs = RECUR (TREE_OPERAND (incr, 0));
13712 tree rhs0 = RECUR (TREE_OPERAND (rhs, 0));
13713 tree rhs1 = RECUR (TREE_OPERAND (rhs, 1));
13714 incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
13715 build2 (TREE_CODE (rhs), TREE_TYPE (decl),
13716 rhs0, rhs1));
13718 else
13719 incr = RECUR (incr);
13720 break;
13721 default:
13722 incr = RECUR (incr);
13723 break;
13726 TREE_VEC_ELT (declv, i) = decl;
13727 TREE_VEC_ELT (initv, i) = init;
13728 TREE_VEC_ELT (condv, i) = cond;
13729 TREE_VEC_ELT (incrv, i) = incr;
13730 #undef RECUR
13733 /* Like tsubst_copy for expressions, etc. but also does semantic
13734 processing. */
13736 static tree
13737 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
13738 bool integral_constant_expression_p)
13740 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
13741 #define RECUR(NODE) \
13742 tsubst_expr ((NODE), args, complain, in_decl, \
13743 integral_constant_expression_p)
13745 tree stmt, tmp;
13746 tree r;
13747 location_t loc;
13749 if (t == NULL_TREE || t == error_mark_node)
13750 return t;
13752 loc = input_location;
13753 if (EXPR_HAS_LOCATION (t))
13754 input_location = EXPR_LOCATION (t);
13755 if (STATEMENT_CODE_P (TREE_CODE (t)))
13756 current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
13758 switch (TREE_CODE (t))
13760 case STATEMENT_LIST:
13762 tree_stmt_iterator i;
13763 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
13764 RECUR (tsi_stmt (i));
13765 break;
13768 case CTOR_INITIALIZER:
13769 finish_mem_initializers (tsubst_initializer_list
13770 (TREE_OPERAND (t, 0), args));
13771 break;
13773 case RETURN_EXPR:
13774 finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
13775 break;
13777 case EXPR_STMT:
13778 tmp = RECUR (EXPR_STMT_EXPR (t));
13779 if (EXPR_STMT_STMT_EXPR_RESULT (t))
13780 finish_stmt_expr_expr (tmp, cur_stmt_expr);
13781 else
13782 finish_expr_stmt (tmp);
13783 break;
13785 case USING_STMT:
13786 do_using_directive (USING_STMT_NAMESPACE (t));
13787 break;
13789 case DECL_EXPR:
13791 tree decl, pattern_decl;
13792 tree init;
13794 pattern_decl = decl = DECL_EXPR_DECL (t);
13795 if (TREE_CODE (decl) == LABEL_DECL)
13796 finish_label_decl (DECL_NAME (decl));
13797 else if (TREE_CODE (decl) == USING_DECL)
13799 tree scope = USING_DECL_SCOPE (decl);
13800 tree name = DECL_NAME (decl);
13801 tree decl;
13803 scope = tsubst (scope, args, complain, in_decl);
13804 decl = lookup_qualified_name (scope, name,
13805 /*is_type_p=*/false,
13806 /*complain=*/false);
13807 if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
13808 qualified_name_lookup_error (scope, name, decl, input_location);
13809 else
13810 do_local_using_decl (decl, scope, name);
13812 else if (DECL_PACK_P (decl))
13814 /* Don't build up decls for a variadic capture proxy, we'll
13815 instantiate the elements directly as needed. */
13816 break;
13818 else
13820 init = DECL_INITIAL (decl);
13821 decl = tsubst (decl, args, complain, in_decl);
13822 if (decl != error_mark_node)
13824 /* By marking the declaration as instantiated, we avoid
13825 trying to instantiate it. Since instantiate_decl can't
13826 handle local variables, and since we've already done
13827 all that needs to be done, that's the right thing to
13828 do. */
13829 if (VAR_P (decl))
13830 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
13831 if (VAR_P (decl)
13832 && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
13833 /* Anonymous aggregates are a special case. */
13834 finish_anon_union (decl);
13835 else if (is_capture_proxy (DECL_EXPR_DECL (t)))
13837 DECL_CONTEXT (decl) = current_function_decl;
13838 if (DECL_NAME (decl) == this_identifier)
13840 tree lam = DECL_CONTEXT (current_function_decl);
13841 lam = CLASSTYPE_LAMBDA_EXPR (lam);
13842 LAMBDA_EXPR_THIS_CAPTURE (lam) = decl;
13844 insert_capture_proxy (decl);
13846 else if (DECL_IMPLICIT_TYPEDEF_P (t))
13847 /* We already did a pushtag. */;
13848 else if (TREE_CODE (decl) == FUNCTION_DECL
13849 && DECL_OMP_DECLARE_REDUCTION_P (decl)
13850 && DECL_FUNCTION_SCOPE_P (pattern_decl))
13852 DECL_CONTEXT (decl) = NULL_TREE;
13853 pushdecl (decl);
13854 DECL_CONTEXT (decl) = current_function_decl;
13855 cp_check_omp_declare_reduction (decl);
13857 else
13859 int const_init = false;
13860 maybe_push_decl (decl);
13861 if (VAR_P (decl)
13862 && DECL_PRETTY_FUNCTION_P (decl))
13864 /* For __PRETTY_FUNCTION__ we have to adjust the
13865 initializer. */
13866 const char *const name
13867 = cxx_printable_name (current_function_decl, 2);
13868 init = cp_fname_init (name, &TREE_TYPE (decl));
13870 else
13871 init = tsubst_init (init, decl, args, complain, in_decl);
13873 if (VAR_P (decl))
13874 const_init = (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P
13875 (pattern_decl));
13876 cp_finish_decl (decl, init, const_init, NULL_TREE, 0);
13881 break;
13884 case FOR_STMT:
13885 stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
13886 RECUR (FOR_INIT_STMT (t));
13887 finish_for_init_stmt (stmt);
13888 tmp = RECUR (FOR_COND (t));
13889 finish_for_cond (tmp, stmt, false);
13890 tmp = RECUR (FOR_EXPR (t));
13891 finish_for_expr (tmp, stmt);
13892 RECUR (FOR_BODY (t));
13893 finish_for_stmt (stmt);
13894 break;
13896 case RANGE_FOR_STMT:
13898 tree decl, expr;
13899 stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
13900 decl = RANGE_FOR_DECL (t);
13901 decl = tsubst (decl, args, complain, in_decl);
13902 maybe_push_decl (decl);
13903 expr = RECUR (RANGE_FOR_EXPR (t));
13904 stmt = cp_convert_range_for (stmt, decl, expr, RANGE_FOR_IVDEP (t));
13905 RECUR (RANGE_FOR_BODY (t));
13906 finish_for_stmt (stmt);
13908 break;
13910 case WHILE_STMT:
13911 stmt = begin_while_stmt ();
13912 tmp = RECUR (WHILE_COND (t));
13913 finish_while_stmt_cond (tmp, stmt, false);
13914 RECUR (WHILE_BODY (t));
13915 finish_while_stmt (stmt);
13916 break;
13918 case DO_STMT:
13919 stmt = begin_do_stmt ();
13920 RECUR (DO_BODY (t));
13921 finish_do_body (stmt);
13922 tmp = RECUR (DO_COND (t));
13923 finish_do_stmt (tmp, stmt, false);
13924 break;
13926 case IF_STMT:
13927 stmt = begin_if_stmt ();
13928 tmp = RECUR (IF_COND (t));
13929 finish_if_stmt_cond (tmp, stmt);
13930 RECUR (THEN_CLAUSE (t));
13931 finish_then_clause (stmt);
13933 if (ELSE_CLAUSE (t))
13935 begin_else_clause (stmt);
13936 RECUR (ELSE_CLAUSE (t));
13937 finish_else_clause (stmt);
13940 finish_if_stmt (stmt);
13941 break;
13943 case BIND_EXPR:
13944 if (BIND_EXPR_BODY_BLOCK (t))
13945 stmt = begin_function_body ();
13946 else
13947 stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
13948 ? BCS_TRY_BLOCK : 0);
13950 RECUR (BIND_EXPR_BODY (t));
13952 if (BIND_EXPR_BODY_BLOCK (t))
13953 finish_function_body (stmt);
13954 else
13955 finish_compound_stmt (stmt);
13956 break;
13958 case BREAK_STMT:
13959 finish_break_stmt ();
13960 break;
13962 case CONTINUE_STMT:
13963 finish_continue_stmt ();
13964 break;
13966 case SWITCH_STMT:
13967 stmt = begin_switch_stmt ();
13968 tmp = RECUR (SWITCH_STMT_COND (t));
13969 finish_switch_cond (tmp, stmt);
13970 RECUR (SWITCH_STMT_BODY (t));
13971 finish_switch_stmt (stmt);
13972 break;
13974 case CASE_LABEL_EXPR:
13976 tree low = RECUR (CASE_LOW (t));
13977 tree high = RECUR (CASE_HIGH (t));
13978 finish_case_label (EXPR_LOCATION (t), low, high);
13980 break;
13982 case LABEL_EXPR:
13984 tree decl = LABEL_EXPR_LABEL (t);
13985 tree label;
13987 label = finish_label_stmt (DECL_NAME (decl));
13988 if (DECL_ATTRIBUTES (decl) != NULL_TREE)
13989 cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
13991 break;
13993 case GOTO_EXPR:
13994 tmp = GOTO_DESTINATION (t);
13995 if (TREE_CODE (tmp) != LABEL_DECL)
13996 /* Computed goto's must be tsubst'd into. On the other hand,
13997 non-computed gotos must not be; the identifier in question
13998 will have no binding. */
13999 tmp = RECUR (tmp);
14000 else
14001 tmp = DECL_NAME (tmp);
14002 finish_goto_stmt (tmp);
14003 break;
14005 case ASM_EXPR:
14007 tree string = RECUR (ASM_STRING (t));
14008 tree outputs = tsubst_copy_asm_operands (ASM_OUTPUTS (t), args,
14009 complain, in_decl);
14010 tree inputs = tsubst_copy_asm_operands (ASM_INPUTS (t), args,
14011 complain, in_decl);
14012 tree clobbers = tsubst_copy_asm_operands (ASM_CLOBBERS (t), args,
14013 complain, in_decl);
14014 tree labels = tsubst_copy_asm_operands (ASM_LABELS (t), args,
14015 complain, in_decl);
14016 tmp = finish_asm_stmt (ASM_VOLATILE_P (t), string, outputs, inputs,
14017 clobbers, labels);
14018 tree asm_expr = tmp;
14019 if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
14020 asm_expr = TREE_OPERAND (asm_expr, 0);
14021 ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
14023 break;
14025 case TRY_BLOCK:
14026 if (CLEANUP_P (t))
14028 stmt = begin_try_block ();
14029 RECUR (TRY_STMTS (t));
14030 finish_cleanup_try_block (stmt);
14031 finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
14033 else
14035 tree compound_stmt = NULL_TREE;
14037 if (FN_TRY_BLOCK_P (t))
14038 stmt = begin_function_try_block (&compound_stmt);
14039 else
14040 stmt = begin_try_block ();
14042 RECUR (TRY_STMTS (t));
14044 if (FN_TRY_BLOCK_P (t))
14045 finish_function_try_block (stmt);
14046 else
14047 finish_try_block (stmt);
14049 RECUR (TRY_HANDLERS (t));
14050 if (FN_TRY_BLOCK_P (t))
14051 finish_function_handler_sequence (stmt, compound_stmt);
14052 else
14053 finish_handler_sequence (stmt);
14055 break;
14057 case HANDLER:
14059 tree decl = HANDLER_PARMS (t);
14061 if (decl)
14063 decl = tsubst (decl, args, complain, in_decl);
14064 /* Prevent instantiate_decl from trying to instantiate
14065 this variable. We've already done all that needs to be
14066 done. */
14067 if (decl != error_mark_node)
14068 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
14070 stmt = begin_handler ();
14071 finish_handler_parms (decl, stmt);
14072 RECUR (HANDLER_BODY (t));
14073 finish_handler (stmt);
14075 break;
14077 case TAG_DEFN:
14078 tmp = tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
14079 if (CLASS_TYPE_P (tmp))
14081 /* Local classes are not independent templates; they are
14082 instantiated along with their containing function. And this
14083 way we don't have to deal with pushing out of one local class
14084 to instantiate a member of another local class. */
14085 tree fn;
14086 /* Closures are handled by the LAMBDA_EXPR. */
14087 gcc_assert (!LAMBDA_TYPE_P (TREE_TYPE (t)));
14088 complete_type (tmp);
14089 for (fn = TYPE_METHODS (tmp); fn; fn = DECL_CHAIN (fn))
14090 if (!DECL_ARTIFICIAL (fn))
14091 instantiate_decl (fn, /*defer_ok*/0, /*expl_inst_class*/false);
14093 break;
14095 case STATIC_ASSERT:
14097 tree condition;
14099 ++c_inhibit_evaluation_warnings;
14100 condition =
14101 tsubst_expr (STATIC_ASSERT_CONDITION (t),
14102 args,
14103 complain, in_decl,
14104 /*integral_constant_expression_p=*/true);
14105 --c_inhibit_evaluation_warnings;
14107 finish_static_assert (condition,
14108 STATIC_ASSERT_MESSAGE (t),
14109 STATIC_ASSERT_SOURCE_LOCATION (t),
14110 /*member_p=*/false);
14112 break;
14114 case OMP_PARALLEL:
14115 tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t), false,
14116 args, complain, in_decl);
14117 stmt = begin_omp_parallel ();
14118 RECUR (OMP_PARALLEL_BODY (t));
14119 OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
14120 = OMP_PARALLEL_COMBINED (t);
14121 break;
14123 case OMP_TASK:
14124 tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t), false,
14125 args, complain, in_decl);
14126 stmt = begin_omp_task ();
14127 RECUR (OMP_TASK_BODY (t));
14128 finish_omp_task (tmp, stmt);
14129 break;
14131 case OMP_FOR:
14132 case OMP_SIMD:
14133 case CILK_SIMD:
14134 case CILK_FOR:
14135 case OMP_DISTRIBUTE:
14137 tree clauses, body, pre_body;
14138 tree declv = NULL_TREE, initv = NULL_TREE, condv = NULL_TREE;
14139 tree incrv = NULL_TREE;
14140 int i;
14142 clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t), false,
14143 args, complain, in_decl);
14144 if (OMP_FOR_INIT (t) != NULL_TREE)
14146 declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
14147 initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
14148 condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
14149 incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
14152 stmt = begin_omp_structured_block ();
14154 pre_body = push_stmt_list ();
14155 RECUR (OMP_FOR_PRE_BODY (t));
14156 pre_body = pop_stmt_list (pre_body);
14158 if (OMP_FOR_INIT (t) != NULL_TREE)
14159 for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
14160 tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
14161 &clauses, args, complain, in_decl,
14162 integral_constant_expression_p);
14164 body = push_stmt_list ();
14165 RECUR (OMP_FOR_BODY (t));
14166 body = pop_stmt_list (body);
14168 if (OMP_FOR_INIT (t) != NULL_TREE)
14169 t = finish_omp_for (EXPR_LOCATION (t), TREE_CODE (t), declv, initv,
14170 condv, incrv, body, pre_body, clauses);
14171 else
14173 t = make_node (TREE_CODE (t));
14174 TREE_TYPE (t) = void_type_node;
14175 OMP_FOR_BODY (t) = body;
14176 OMP_FOR_PRE_BODY (t) = pre_body;
14177 OMP_FOR_CLAUSES (t) = clauses;
14178 SET_EXPR_LOCATION (t, EXPR_LOCATION (t));
14179 add_stmt (t);
14182 add_stmt (finish_omp_structured_block (stmt));
14184 break;
14186 case OMP_SECTIONS:
14187 case OMP_SINGLE:
14188 case OMP_TEAMS:
14189 tmp = tsubst_omp_clauses (OMP_CLAUSES (t), false,
14190 args, complain, in_decl);
14191 stmt = push_stmt_list ();
14192 RECUR (OMP_BODY (t));
14193 stmt = pop_stmt_list (stmt);
14195 t = copy_node (t);
14196 OMP_BODY (t) = stmt;
14197 OMP_CLAUSES (t) = tmp;
14198 add_stmt (t);
14199 break;
14201 case OMP_TARGET_DATA:
14202 case OMP_TARGET:
14203 tmp = tsubst_omp_clauses (OMP_CLAUSES (t), false,
14204 args, complain, in_decl);
14205 keep_next_level (true);
14206 stmt = begin_omp_structured_block ();
14208 RECUR (OMP_BODY (t));
14209 stmt = finish_omp_structured_block (stmt);
14211 t = copy_node (t);
14212 OMP_BODY (t) = stmt;
14213 OMP_CLAUSES (t) = tmp;
14214 add_stmt (t);
14215 break;
14217 case OMP_TARGET_UPDATE:
14218 tmp = tsubst_omp_clauses (OMP_TARGET_UPDATE_CLAUSES (t), false,
14219 args, complain, in_decl);
14220 t = copy_node (t);
14221 OMP_TARGET_UPDATE_CLAUSES (t) = tmp;
14222 add_stmt (t);
14223 break;
14225 case OMP_SECTION:
14226 case OMP_CRITICAL:
14227 case OMP_MASTER:
14228 case OMP_TASKGROUP:
14229 case OMP_ORDERED:
14230 stmt = push_stmt_list ();
14231 RECUR (OMP_BODY (t));
14232 stmt = pop_stmt_list (stmt);
14234 t = copy_node (t);
14235 OMP_BODY (t) = stmt;
14236 add_stmt (t);
14237 break;
14239 case OMP_ATOMIC:
14240 gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
14241 if (TREE_CODE (TREE_OPERAND (t, 1)) != MODIFY_EXPR)
14243 tree op1 = TREE_OPERAND (t, 1);
14244 tree rhs1 = NULL_TREE;
14245 tree lhs, rhs;
14246 if (TREE_CODE (op1) == COMPOUND_EXPR)
14248 rhs1 = RECUR (TREE_OPERAND (op1, 0));
14249 op1 = TREE_OPERAND (op1, 1);
14251 lhs = RECUR (TREE_OPERAND (op1, 0));
14252 rhs = RECUR (TREE_OPERAND (op1, 1));
14253 finish_omp_atomic (OMP_ATOMIC, TREE_CODE (op1), lhs, rhs,
14254 NULL_TREE, NULL_TREE, rhs1,
14255 OMP_ATOMIC_SEQ_CST (t));
14257 else
14259 tree op1 = TREE_OPERAND (t, 1);
14260 tree v = NULL_TREE, lhs, rhs = NULL_TREE, lhs1 = NULL_TREE;
14261 tree rhs1 = NULL_TREE;
14262 enum tree_code code = TREE_CODE (TREE_OPERAND (op1, 1));
14263 enum tree_code opcode = NOP_EXPR;
14264 if (code == OMP_ATOMIC_READ)
14266 v = RECUR (TREE_OPERAND (op1, 0));
14267 lhs = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
14269 else if (code == OMP_ATOMIC_CAPTURE_OLD
14270 || code == OMP_ATOMIC_CAPTURE_NEW)
14272 tree op11 = TREE_OPERAND (TREE_OPERAND (op1, 1), 1);
14273 v = RECUR (TREE_OPERAND (op1, 0));
14274 lhs1 = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
14275 if (TREE_CODE (op11) == COMPOUND_EXPR)
14277 rhs1 = RECUR (TREE_OPERAND (op11, 0));
14278 op11 = TREE_OPERAND (op11, 1);
14280 lhs = RECUR (TREE_OPERAND (op11, 0));
14281 rhs = RECUR (TREE_OPERAND (op11, 1));
14282 opcode = TREE_CODE (op11);
14283 if (opcode == MODIFY_EXPR)
14284 opcode = NOP_EXPR;
14286 else
14288 code = OMP_ATOMIC;
14289 lhs = RECUR (TREE_OPERAND (op1, 0));
14290 rhs = RECUR (TREE_OPERAND (op1, 1));
14292 finish_omp_atomic (code, opcode, lhs, rhs, v, lhs1, rhs1,
14293 OMP_ATOMIC_SEQ_CST (t));
14295 break;
14297 case TRANSACTION_EXPR:
14299 int flags = 0;
14300 flags |= (TRANSACTION_EXPR_OUTER (t) ? TM_STMT_ATTR_OUTER : 0);
14301 flags |= (TRANSACTION_EXPR_RELAXED (t) ? TM_STMT_ATTR_RELAXED : 0);
14303 if (TRANSACTION_EXPR_IS_STMT (t))
14305 tree body = TRANSACTION_EXPR_BODY (t);
14306 tree noex = NULL_TREE;
14307 if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
14309 noex = MUST_NOT_THROW_COND (body);
14310 if (noex == NULL_TREE)
14311 noex = boolean_true_node;
14312 body = TREE_OPERAND (body, 0);
14314 stmt = begin_transaction_stmt (input_location, NULL, flags);
14315 RECUR (body);
14316 finish_transaction_stmt (stmt, NULL, flags, RECUR (noex));
14318 else
14320 stmt = build_transaction_expr (EXPR_LOCATION (t),
14321 RECUR (TRANSACTION_EXPR_BODY (t)),
14322 flags, NULL_TREE);
14323 RETURN (stmt);
14326 break;
14328 case MUST_NOT_THROW_EXPR:
14330 tree op0 = RECUR (TREE_OPERAND (t, 0));
14331 tree cond = RECUR (MUST_NOT_THROW_COND (t));
14332 RETURN (build_must_not_throw_expr (op0, cond));
14335 case EXPR_PACK_EXPANSION:
14336 error ("invalid use of pack expansion expression");
14337 RETURN (error_mark_node);
14339 case NONTYPE_ARGUMENT_PACK:
14340 error ("use %<...%> to expand argument pack");
14341 RETURN (error_mark_node);
14343 case CILK_SPAWN_STMT:
14344 cfun->calls_cilk_spawn = 1;
14345 RETURN (build_cilk_spawn (EXPR_LOCATION (t), RECUR (CILK_SPAWN_FN (t))));
14347 case CILK_SYNC_STMT:
14348 RETURN (build_cilk_sync ());
14350 case COMPOUND_EXPR:
14351 tmp = RECUR (TREE_OPERAND (t, 0));
14352 if (tmp == NULL_TREE)
14353 /* If the first operand was a statement, we're done with it. */
14354 RETURN (RECUR (TREE_OPERAND (t, 1)));
14355 RETURN (build_x_compound_expr (EXPR_LOCATION (t), tmp,
14356 RECUR (TREE_OPERAND (t, 1)),
14357 complain));
14359 case ANNOTATE_EXPR:
14360 tmp = RECUR (TREE_OPERAND (t, 0));
14361 RETURN (build2_loc (EXPR_LOCATION (t), ANNOTATE_EXPR,
14362 TREE_TYPE (tmp), tmp, RECUR (TREE_OPERAND (t, 1))));
14364 default:
14365 gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
14367 RETURN (tsubst_copy_and_build (t, args, complain, in_decl,
14368 /*function_p=*/false,
14369 integral_constant_expression_p));
14372 RETURN (NULL_TREE);
14373 out:
14374 input_location = loc;
14375 return r;
14376 #undef RECUR
14377 #undef RETURN
14380 /* Instantiate the special body of the artificial DECL_OMP_DECLARE_REDUCTION
14381 function. For description of the body see comment above
14382 cp_parser_omp_declare_reduction_exprs. */
14384 static void
14385 tsubst_omp_udr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
14387 if (t == NULL_TREE || t == error_mark_node)
14388 return;
14390 gcc_assert (TREE_CODE (t) == STATEMENT_LIST);
14392 tree_stmt_iterator tsi;
14393 int i;
14394 tree stmts[7];
14395 memset (stmts, 0, sizeof stmts);
14396 for (i = 0, tsi = tsi_start (t);
14397 i < 7 && !tsi_end_p (tsi);
14398 i++, tsi_next (&tsi))
14399 stmts[i] = tsi_stmt (tsi);
14400 gcc_assert (tsi_end_p (tsi));
14402 if (i >= 3)
14404 gcc_assert (TREE_CODE (stmts[0]) == DECL_EXPR
14405 && TREE_CODE (stmts[1]) == DECL_EXPR);
14406 tree omp_out = tsubst (DECL_EXPR_DECL (stmts[0]),
14407 args, complain, in_decl);
14408 tree omp_in = tsubst (DECL_EXPR_DECL (stmts[1]),
14409 args, complain, in_decl);
14410 DECL_CONTEXT (omp_out) = current_function_decl;
14411 DECL_CONTEXT (omp_in) = current_function_decl;
14412 keep_next_level (true);
14413 tree block = begin_omp_structured_block ();
14414 tsubst_expr (stmts[2], args, complain, in_decl, false);
14415 block = finish_omp_structured_block (block);
14416 block = maybe_cleanup_point_expr_void (block);
14417 add_decl_expr (omp_out);
14418 if (TREE_NO_WARNING (DECL_EXPR_DECL (stmts[0])))
14419 TREE_NO_WARNING (omp_out) = 1;
14420 add_decl_expr (omp_in);
14421 finish_expr_stmt (block);
14423 if (i >= 6)
14425 gcc_assert (TREE_CODE (stmts[3]) == DECL_EXPR
14426 && TREE_CODE (stmts[4]) == DECL_EXPR);
14427 tree omp_priv = tsubst (DECL_EXPR_DECL (stmts[3]),
14428 args, complain, in_decl);
14429 tree omp_orig = tsubst (DECL_EXPR_DECL (stmts[4]),
14430 args, complain, in_decl);
14431 DECL_CONTEXT (omp_priv) = current_function_decl;
14432 DECL_CONTEXT (omp_orig) = current_function_decl;
14433 keep_next_level (true);
14434 tree block = begin_omp_structured_block ();
14435 tsubst_expr (stmts[5], args, complain, in_decl, false);
14436 block = finish_omp_structured_block (block);
14437 block = maybe_cleanup_point_expr_void (block);
14438 cp_walk_tree (&block, cp_remove_omp_priv_cleanup_stmt, omp_priv, NULL);
14439 add_decl_expr (omp_priv);
14440 add_decl_expr (omp_orig);
14441 finish_expr_stmt (block);
14442 if (i == 7)
14443 add_decl_expr (omp_orig);
14447 /* T is a postfix-expression that is not being used in a function
14448 call. Return the substituted version of T. */
14450 static tree
14451 tsubst_non_call_postfix_expression (tree t, tree args,
14452 tsubst_flags_t complain,
14453 tree in_decl)
14455 if (TREE_CODE (t) == SCOPE_REF)
14456 t = tsubst_qualified_id (t, args, complain, in_decl,
14457 /*done=*/false, /*address_p=*/false);
14458 else
14459 t = tsubst_copy_and_build (t, args, complain, in_decl,
14460 /*function_p=*/false,
14461 /*integral_constant_expression_p=*/false);
14463 return t;
14466 /* Like tsubst but deals with expressions and performs semantic
14467 analysis. FUNCTION_P is true if T is the "F" in "F (ARGS)". */
14469 tree
14470 tsubst_copy_and_build (tree t,
14471 tree args,
14472 tsubst_flags_t complain,
14473 tree in_decl,
14474 bool function_p,
14475 bool integral_constant_expression_p)
14477 #define RETURN(EXP) do { retval = (EXP); goto out; } while(0)
14478 #define RECUR(NODE) \
14479 tsubst_copy_and_build (NODE, args, complain, in_decl, \
14480 /*function_p=*/false, \
14481 integral_constant_expression_p)
14483 tree retval, op1;
14484 location_t loc;
14486 if (t == NULL_TREE || t == error_mark_node)
14487 return t;
14489 loc = input_location;
14490 if (EXPR_HAS_LOCATION (t))
14491 input_location = EXPR_LOCATION (t);
14493 /* N3276 decltype magic only applies to calls at the top level or on the
14494 right side of a comma. */
14495 tsubst_flags_t decltype_flag = (complain & tf_decltype);
14496 complain &= ~tf_decltype;
14498 switch (TREE_CODE (t))
14500 case USING_DECL:
14501 t = DECL_NAME (t);
14502 /* Fall through. */
14503 case IDENTIFIER_NODE:
14505 tree decl;
14506 cp_id_kind idk;
14507 bool non_integral_constant_expression_p;
14508 const char *error_msg;
14510 if (IDENTIFIER_TYPENAME_P (t))
14512 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14513 t = mangle_conv_op_name_for_type (new_type);
14516 /* Look up the name. */
14517 decl = lookup_name (t);
14519 /* By convention, expressions use ERROR_MARK_NODE to indicate
14520 failure, not NULL_TREE. */
14521 if (decl == NULL_TREE)
14522 decl = error_mark_node;
14524 decl = finish_id_expression (t, decl, NULL_TREE,
14525 &idk,
14526 integral_constant_expression_p,
14527 /*allow_non_integral_constant_expression_p=*/(cxx_dialect >= cxx11),
14528 &non_integral_constant_expression_p,
14529 /*template_p=*/false,
14530 /*done=*/true,
14531 /*address_p=*/false,
14532 /*template_arg_p=*/false,
14533 &error_msg,
14534 input_location);
14535 if (error_msg)
14536 error (error_msg);
14537 if (!function_p && identifier_p (decl))
14539 if (complain & tf_error)
14540 unqualified_name_lookup_error (decl);
14541 decl = error_mark_node;
14543 RETURN (decl);
14546 case TEMPLATE_ID_EXPR:
14548 tree object;
14549 tree templ = RECUR (TREE_OPERAND (t, 0));
14550 tree targs = TREE_OPERAND (t, 1);
14552 if (targs)
14553 targs = tsubst_template_args (targs, args, complain, in_decl);
14555 if (TREE_CODE (templ) == COMPONENT_REF)
14557 object = TREE_OPERAND (templ, 0);
14558 templ = TREE_OPERAND (templ, 1);
14560 else
14561 object = NULL_TREE;
14562 templ = lookup_template_function (templ, targs);
14564 if (object)
14565 RETURN (build3 (COMPONENT_REF, TREE_TYPE (templ),
14566 object, templ, NULL_TREE));
14567 else
14568 RETURN (baselink_for_fns (templ));
14571 case INDIRECT_REF:
14573 tree r = RECUR (TREE_OPERAND (t, 0));
14575 if (REFERENCE_REF_P (t))
14577 /* A type conversion to reference type will be enclosed in
14578 such an indirect ref, but the substitution of the cast
14579 will have also added such an indirect ref. */
14580 if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
14581 r = convert_from_reference (r);
14583 else
14584 r = build_x_indirect_ref (input_location, r, RO_UNARY_STAR,
14585 complain|decltype_flag);
14586 RETURN (r);
14589 case NOP_EXPR:
14591 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14592 tree op0 = RECUR (TREE_OPERAND (t, 0));
14593 RETURN (build_nop (type, op0));
14596 case IMPLICIT_CONV_EXPR:
14598 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14599 tree expr = RECUR (TREE_OPERAND (t, 0));
14600 int flags = LOOKUP_IMPLICIT;
14601 if (IMPLICIT_CONV_EXPR_DIRECT_INIT (t))
14602 flags = LOOKUP_NORMAL;
14603 RETURN (perform_implicit_conversion_flags (type, expr, complain,
14604 flags));
14607 case CONVERT_EXPR:
14609 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14610 tree op0 = RECUR (TREE_OPERAND (t, 0));
14611 RETURN (build1 (CONVERT_EXPR, type, op0));
14614 case CAST_EXPR:
14615 case REINTERPRET_CAST_EXPR:
14616 case CONST_CAST_EXPR:
14617 case DYNAMIC_CAST_EXPR:
14618 case STATIC_CAST_EXPR:
14620 tree type;
14621 tree op, r = NULL_TREE;
14623 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14624 if (integral_constant_expression_p
14625 && !cast_valid_in_integral_constant_expression_p (type))
14627 if (complain & tf_error)
14628 error ("a cast to a type other than an integral or "
14629 "enumeration type cannot appear in a constant-expression");
14630 RETURN (error_mark_node);
14633 op = RECUR (TREE_OPERAND (t, 0));
14635 warning_sentinel s(warn_useless_cast);
14636 switch (TREE_CODE (t))
14638 case CAST_EXPR:
14639 r = build_functional_cast (type, op, complain);
14640 break;
14641 case REINTERPRET_CAST_EXPR:
14642 r = build_reinterpret_cast (type, op, complain);
14643 break;
14644 case CONST_CAST_EXPR:
14645 r = build_const_cast (type, op, complain);
14646 break;
14647 case DYNAMIC_CAST_EXPR:
14648 r = build_dynamic_cast (type, op, complain);
14649 break;
14650 case STATIC_CAST_EXPR:
14651 r = build_static_cast (type, op, complain);
14652 break;
14653 default:
14654 gcc_unreachable ();
14657 RETURN (r);
14660 case POSTDECREMENT_EXPR:
14661 case POSTINCREMENT_EXPR:
14662 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
14663 args, complain, in_decl);
14664 RETURN (build_x_unary_op (input_location, TREE_CODE (t), op1,
14665 complain|decltype_flag));
14667 case PREDECREMENT_EXPR:
14668 case PREINCREMENT_EXPR:
14669 case NEGATE_EXPR:
14670 case BIT_NOT_EXPR:
14671 case ABS_EXPR:
14672 case TRUTH_NOT_EXPR:
14673 case UNARY_PLUS_EXPR: /* Unary + */
14674 case REALPART_EXPR:
14675 case IMAGPART_EXPR:
14676 RETURN (build_x_unary_op (input_location, TREE_CODE (t),
14677 RECUR (TREE_OPERAND (t, 0)),
14678 complain|decltype_flag));
14680 case FIX_TRUNC_EXPR:
14681 RETURN (cp_build_unary_op (FIX_TRUNC_EXPR, RECUR (TREE_OPERAND (t, 0)),
14682 0, complain));
14684 case ADDR_EXPR:
14685 op1 = TREE_OPERAND (t, 0);
14686 if (TREE_CODE (op1) == LABEL_DECL)
14687 RETURN (finish_label_address_expr (DECL_NAME (op1),
14688 EXPR_LOCATION (op1)));
14689 if (TREE_CODE (op1) == SCOPE_REF)
14690 op1 = tsubst_qualified_id (op1, args, complain, in_decl,
14691 /*done=*/true, /*address_p=*/true);
14692 else
14693 op1 = tsubst_non_call_postfix_expression (op1, args, complain,
14694 in_decl);
14695 RETURN (build_x_unary_op (input_location, ADDR_EXPR, op1,
14696 complain|decltype_flag));
14698 case PLUS_EXPR:
14699 case MINUS_EXPR:
14700 case MULT_EXPR:
14701 case TRUNC_DIV_EXPR:
14702 case CEIL_DIV_EXPR:
14703 case FLOOR_DIV_EXPR:
14704 case ROUND_DIV_EXPR:
14705 case EXACT_DIV_EXPR:
14706 case BIT_AND_EXPR:
14707 case BIT_IOR_EXPR:
14708 case BIT_XOR_EXPR:
14709 case TRUNC_MOD_EXPR:
14710 case FLOOR_MOD_EXPR:
14711 case TRUTH_ANDIF_EXPR:
14712 case TRUTH_ORIF_EXPR:
14713 case TRUTH_AND_EXPR:
14714 case TRUTH_OR_EXPR:
14715 case RSHIFT_EXPR:
14716 case LSHIFT_EXPR:
14717 case RROTATE_EXPR:
14718 case LROTATE_EXPR:
14719 case EQ_EXPR:
14720 case NE_EXPR:
14721 case MAX_EXPR:
14722 case MIN_EXPR:
14723 case LE_EXPR:
14724 case GE_EXPR:
14725 case LT_EXPR:
14726 case GT_EXPR:
14727 case MEMBER_REF:
14728 case DOTSTAR_EXPR:
14730 warning_sentinel s1(warn_type_limits);
14731 warning_sentinel s2(warn_div_by_zero);
14732 tree op0 = RECUR (TREE_OPERAND (t, 0));
14733 tree op1 = RECUR (TREE_OPERAND (t, 1));
14734 tree r = build_x_binary_op
14735 (input_location, TREE_CODE (t),
14736 op0,
14737 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
14738 ? ERROR_MARK
14739 : TREE_CODE (TREE_OPERAND (t, 0))),
14740 op1,
14741 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
14742 ? ERROR_MARK
14743 : TREE_CODE (TREE_OPERAND (t, 1))),
14744 /*overload=*/NULL,
14745 complain|decltype_flag);
14746 if (EXPR_P (r) && TREE_NO_WARNING (t))
14747 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
14749 RETURN (r);
14752 case POINTER_PLUS_EXPR:
14754 tree op0 = RECUR (TREE_OPERAND (t, 0));
14755 tree op1 = RECUR (TREE_OPERAND (t, 1));
14756 return fold_build_pointer_plus (op0, op1);
14759 case SCOPE_REF:
14760 RETURN (tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
14761 /*address_p=*/false));
14762 case ARRAY_REF:
14763 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
14764 args, complain, in_decl);
14765 RETURN (build_x_array_ref (EXPR_LOCATION (t), op1,
14766 RECUR (TREE_OPERAND (t, 1)),
14767 complain|decltype_flag));
14769 case ARRAY_NOTATION_REF:
14771 tree start_index, length, stride;
14772 op1 = tsubst_non_call_postfix_expression (ARRAY_NOTATION_ARRAY (t),
14773 args, complain, in_decl);
14774 start_index = RECUR (ARRAY_NOTATION_START (t));
14775 length = RECUR (ARRAY_NOTATION_LENGTH (t));
14776 stride = RECUR (ARRAY_NOTATION_STRIDE (t));
14777 RETURN (build_array_notation_ref (EXPR_LOCATION (t), op1, start_index,
14778 length, stride, TREE_TYPE (op1)));
14780 case SIZEOF_EXPR:
14781 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
14782 RETURN (tsubst_copy (t, args, complain, in_decl));
14783 /* Fall through */
14785 case ALIGNOF_EXPR:
14787 tree r;
14789 op1 = TREE_OPERAND (t, 0);
14790 if (TREE_CODE (t) == SIZEOF_EXPR && SIZEOF_EXPR_TYPE_P (t))
14791 op1 = TREE_TYPE (op1);
14792 if (!args)
14794 /* When there are no ARGS, we are trying to evaluate a
14795 non-dependent expression from the parser. Trying to do
14796 the substitutions may not work. */
14797 if (!TYPE_P (op1))
14798 op1 = TREE_TYPE (op1);
14800 else
14802 ++cp_unevaluated_operand;
14803 ++c_inhibit_evaluation_warnings;
14804 if (TYPE_P (op1))
14805 op1 = tsubst (op1, args, complain, in_decl);
14806 else
14807 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
14808 /*function_p=*/false,
14809 /*integral_constant_expression_p=*/
14810 false);
14811 --cp_unevaluated_operand;
14812 --c_inhibit_evaluation_warnings;
14814 if (TYPE_P (op1))
14815 r = cxx_sizeof_or_alignof_type (op1, TREE_CODE (t),
14816 complain & tf_error);
14817 else
14818 r = cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t),
14819 complain & tf_error);
14820 if (TREE_CODE (t) == SIZEOF_EXPR && r != error_mark_node)
14822 if (TREE_CODE (r) != SIZEOF_EXPR || TYPE_P (op1))
14824 if (!processing_template_decl && TYPE_P (op1))
14826 r = build_min (SIZEOF_EXPR, size_type_node,
14827 build1 (NOP_EXPR, op1, error_mark_node));
14828 SIZEOF_EXPR_TYPE_P (r) = 1;
14830 else
14831 r = build_min (SIZEOF_EXPR, size_type_node, op1);
14832 TREE_SIDE_EFFECTS (r) = 0;
14833 TREE_READONLY (r) = 1;
14835 SET_EXPR_LOCATION (r, EXPR_LOCATION (t));
14837 RETURN (r);
14840 case AT_ENCODE_EXPR:
14842 op1 = TREE_OPERAND (t, 0);
14843 ++cp_unevaluated_operand;
14844 ++c_inhibit_evaluation_warnings;
14845 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
14846 /*function_p=*/false,
14847 /*integral_constant_expression_p=*/false);
14848 --cp_unevaluated_operand;
14849 --c_inhibit_evaluation_warnings;
14850 RETURN (objc_build_encode_expr (op1));
14853 case NOEXCEPT_EXPR:
14854 op1 = TREE_OPERAND (t, 0);
14855 ++cp_unevaluated_operand;
14856 ++c_inhibit_evaluation_warnings;
14857 ++cp_noexcept_operand;
14858 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
14859 /*function_p=*/false,
14860 /*integral_constant_expression_p=*/false);
14861 --cp_unevaluated_operand;
14862 --c_inhibit_evaluation_warnings;
14863 --cp_noexcept_operand;
14864 RETURN (finish_noexcept_expr (op1, complain));
14866 case MODOP_EXPR:
14868 warning_sentinel s(warn_div_by_zero);
14869 tree lhs = RECUR (TREE_OPERAND (t, 0));
14870 tree rhs = RECUR (TREE_OPERAND (t, 2));
14871 tree r = build_x_modify_expr
14872 (EXPR_LOCATION (t), lhs, TREE_CODE (TREE_OPERAND (t, 1)), rhs,
14873 complain|decltype_flag);
14874 /* TREE_NO_WARNING must be set if either the expression was
14875 parenthesized or it uses an operator such as >>= rather
14876 than plain assignment. In the former case, it was already
14877 set and must be copied. In the latter case,
14878 build_x_modify_expr sets it and it must not be reset
14879 here. */
14880 if (TREE_NO_WARNING (t))
14881 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
14883 RETURN (r);
14886 case ARROW_EXPR:
14887 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
14888 args, complain, in_decl);
14889 /* Remember that there was a reference to this entity. */
14890 if (DECL_P (op1)
14891 && !mark_used (op1, complain) && !(complain & tf_error))
14892 RETURN (error_mark_node);
14893 RETURN (build_x_arrow (input_location, op1, complain));
14895 case NEW_EXPR:
14897 tree placement = RECUR (TREE_OPERAND (t, 0));
14898 tree init = RECUR (TREE_OPERAND (t, 3));
14899 vec<tree, va_gc> *placement_vec;
14900 vec<tree, va_gc> *init_vec;
14901 tree ret;
14903 if (placement == NULL_TREE)
14904 placement_vec = NULL;
14905 else
14907 placement_vec = make_tree_vector ();
14908 for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
14909 vec_safe_push (placement_vec, TREE_VALUE (placement));
14912 /* If there was an initializer in the original tree, but it
14913 instantiated to an empty list, then we should pass a
14914 non-NULL empty vector to tell build_new that it was an
14915 empty initializer() rather than no initializer. This can
14916 only happen when the initializer is a pack expansion whose
14917 parameter packs are of length zero. */
14918 if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
14919 init_vec = NULL;
14920 else
14922 init_vec = make_tree_vector ();
14923 if (init == void_node)
14924 gcc_assert (init_vec != NULL);
14925 else
14927 for (; init != NULL_TREE; init = TREE_CHAIN (init))
14928 vec_safe_push (init_vec, TREE_VALUE (init));
14932 tree op1 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
14933 tree op2 = RECUR (TREE_OPERAND (t, 2));
14934 ret = build_new (&placement_vec, op1, op2, &init_vec,
14935 NEW_EXPR_USE_GLOBAL (t),
14936 complain);
14938 if (placement_vec != NULL)
14939 release_tree_vector (placement_vec);
14940 if (init_vec != NULL)
14941 release_tree_vector (init_vec);
14943 RETURN (ret);
14946 case DELETE_EXPR:
14948 tree op0 = RECUR (TREE_OPERAND (t, 0));
14949 tree op1 = RECUR (TREE_OPERAND (t, 1));
14950 RETURN (delete_sanity (op0, op1,
14951 DELETE_EXPR_USE_VEC (t),
14952 DELETE_EXPR_USE_GLOBAL (t),
14953 complain));
14956 case COMPOUND_EXPR:
14958 tree op0 = tsubst_copy_and_build (TREE_OPERAND (t, 0), args,
14959 complain & ~tf_decltype, in_decl,
14960 /*function_p=*/false,
14961 integral_constant_expression_p);
14962 RETURN (build_x_compound_expr (EXPR_LOCATION (t),
14963 op0,
14964 RECUR (TREE_OPERAND (t, 1)),
14965 complain|decltype_flag));
14968 case CALL_EXPR:
14970 tree function;
14971 vec<tree, va_gc> *call_args;
14972 unsigned int nargs, i;
14973 bool qualified_p;
14974 bool koenig_p;
14975 tree ret;
14977 function = CALL_EXPR_FN (t);
14978 /* When we parsed the expression, we determined whether or
14979 not Koenig lookup should be performed. */
14980 koenig_p = KOENIG_LOOKUP_P (t);
14981 if (TREE_CODE (function) == SCOPE_REF)
14983 qualified_p = true;
14984 function = tsubst_qualified_id (function, args, complain, in_decl,
14985 /*done=*/false,
14986 /*address_p=*/false);
14988 else if (koenig_p && identifier_p (function))
14990 /* Do nothing; calling tsubst_copy_and_build on an identifier
14991 would incorrectly perform unqualified lookup again.
14993 Note that we can also have an IDENTIFIER_NODE if the earlier
14994 unqualified lookup found a member function; in that case
14995 koenig_p will be false and we do want to do the lookup
14996 again to find the instantiated member function.
14998 FIXME but doing that causes c++/15272, so we need to stop
14999 using IDENTIFIER_NODE in that situation. */
15000 qualified_p = false;
15002 else
15004 if (TREE_CODE (function) == COMPONENT_REF)
15006 tree op = TREE_OPERAND (function, 1);
15008 qualified_p = (TREE_CODE (op) == SCOPE_REF
15009 || (BASELINK_P (op)
15010 && BASELINK_QUALIFIED_P (op)));
15012 else
15013 qualified_p = false;
15015 if (TREE_CODE (function) == ADDR_EXPR
15016 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
15017 /* Avoid error about taking the address of a constructor. */
15018 function = TREE_OPERAND (function, 0);
15020 function = tsubst_copy_and_build (function, args, complain,
15021 in_decl,
15022 !qualified_p,
15023 integral_constant_expression_p);
15025 if (BASELINK_P (function))
15026 qualified_p = true;
15029 nargs = call_expr_nargs (t);
15030 call_args = make_tree_vector ();
15031 for (i = 0; i < nargs; ++i)
15033 tree arg = CALL_EXPR_ARG (t, i);
15035 if (!PACK_EXPANSION_P (arg))
15036 vec_safe_push (call_args, RECUR (CALL_EXPR_ARG (t, i)));
15037 else
15039 /* Expand the pack expansion and push each entry onto
15040 CALL_ARGS. */
15041 arg = tsubst_pack_expansion (arg, args, complain, in_decl);
15042 if (TREE_CODE (arg) == TREE_VEC)
15044 unsigned int len, j;
15046 len = TREE_VEC_LENGTH (arg);
15047 for (j = 0; j < len; ++j)
15049 tree value = TREE_VEC_ELT (arg, j);
15050 if (value != NULL_TREE)
15051 value = convert_from_reference (value);
15052 vec_safe_push (call_args, value);
15055 else
15057 /* A partial substitution. Add one entry. */
15058 vec_safe_push (call_args, arg);
15063 /* We do not perform argument-dependent lookup if normal
15064 lookup finds a non-function, in accordance with the
15065 expected resolution of DR 218. */
15066 if (koenig_p
15067 && ((is_overloaded_fn (function)
15068 /* If lookup found a member function, the Koenig lookup is
15069 not appropriate, even if an unqualified-name was used
15070 to denote the function. */
15071 && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
15072 || identifier_p (function))
15073 /* Only do this when substitution turns a dependent call
15074 into a non-dependent call. */
15075 && type_dependent_expression_p_push (t)
15076 && !any_type_dependent_arguments_p (call_args))
15077 function = perform_koenig_lookup (function, call_args, tf_none);
15079 if (identifier_p (function)
15080 && !any_type_dependent_arguments_p (call_args))
15082 if (koenig_p && (complain & tf_warning_or_error))
15084 /* For backwards compatibility and good diagnostics, try
15085 the unqualified lookup again if we aren't in SFINAE
15086 context. */
15087 tree unq = (tsubst_copy_and_build
15088 (function, args, complain, in_decl, true,
15089 integral_constant_expression_p));
15090 if (unq == error_mark_node)
15091 RETURN (error_mark_node);
15093 if (unq != function)
15095 tree fn = unq;
15096 if (INDIRECT_REF_P (fn))
15097 fn = TREE_OPERAND (fn, 0);
15098 if (TREE_CODE (fn) == COMPONENT_REF)
15099 fn = TREE_OPERAND (fn, 1);
15100 if (is_overloaded_fn (fn))
15101 fn = get_first_fn (fn);
15102 if (permerror (EXPR_LOC_OR_LOC (t, input_location),
15103 "%qD was not declared in this scope, "
15104 "and no declarations were found by "
15105 "argument-dependent lookup at the point "
15106 "of instantiation", function))
15108 if (!DECL_P (fn))
15109 /* Can't say anything more. */;
15110 else if (DECL_CLASS_SCOPE_P (fn))
15112 location_t loc = EXPR_LOC_OR_LOC (t,
15113 input_location);
15114 inform (loc,
15115 "declarations in dependent base %qT are "
15116 "not found by unqualified lookup",
15117 DECL_CLASS_CONTEXT (fn));
15118 if (current_class_ptr)
15119 inform (loc,
15120 "use %<this->%D%> instead", function);
15121 else
15122 inform (loc,
15123 "use %<%T::%D%> instead",
15124 current_class_name, function);
15126 else
15127 inform (0, "%q+D declared here, later in the "
15128 "translation unit", fn);
15130 function = unq;
15133 if (identifier_p (function))
15135 if (complain & tf_error)
15136 unqualified_name_lookup_error (function);
15137 release_tree_vector (call_args);
15138 RETURN (error_mark_node);
15142 /* Remember that there was a reference to this entity. */
15143 if (DECL_P (function)
15144 && !mark_used (function, complain) && !(complain & tf_error))
15145 RETURN (error_mark_node);
15147 /* Put back tf_decltype for the actual call. */
15148 complain |= decltype_flag;
15150 if (TREE_CODE (function) == OFFSET_REF)
15151 ret = build_offset_ref_call_from_tree (function, &call_args,
15152 complain);
15153 else if (TREE_CODE (function) == COMPONENT_REF)
15155 tree instance = TREE_OPERAND (function, 0);
15156 tree fn = TREE_OPERAND (function, 1);
15158 if (processing_template_decl
15159 && (type_dependent_expression_p (instance)
15160 || (!BASELINK_P (fn)
15161 && TREE_CODE (fn) != FIELD_DECL)
15162 || type_dependent_expression_p (fn)
15163 || any_type_dependent_arguments_p (call_args)))
15164 ret = build_nt_call_vec (function, call_args);
15165 else if (!BASELINK_P (fn))
15166 ret = finish_call_expr (function, &call_args,
15167 /*disallow_virtual=*/false,
15168 /*koenig_p=*/false,
15169 complain);
15170 else
15171 ret = (build_new_method_call
15172 (instance, fn,
15173 &call_args, NULL_TREE,
15174 qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
15175 /*fn_p=*/NULL,
15176 complain));
15178 else
15179 ret = finish_call_expr (function, &call_args,
15180 /*disallow_virtual=*/qualified_p,
15181 koenig_p,
15182 complain);
15184 release_tree_vector (call_args);
15186 RETURN (ret);
15189 case COND_EXPR:
15191 tree cond = RECUR (TREE_OPERAND (t, 0));
15192 tree folded_cond = fold_non_dependent_expr (cond);
15193 tree exp1, exp2;
15195 if (TREE_CODE (folded_cond) == INTEGER_CST)
15197 if (integer_zerop (folded_cond))
15199 ++c_inhibit_evaluation_warnings;
15200 exp1 = RECUR (TREE_OPERAND (t, 1));
15201 --c_inhibit_evaluation_warnings;
15202 exp2 = RECUR (TREE_OPERAND (t, 2));
15204 else
15206 exp1 = RECUR (TREE_OPERAND (t, 1));
15207 ++c_inhibit_evaluation_warnings;
15208 exp2 = RECUR (TREE_OPERAND (t, 2));
15209 --c_inhibit_evaluation_warnings;
15211 cond = folded_cond;
15213 else
15215 exp1 = RECUR (TREE_OPERAND (t, 1));
15216 exp2 = RECUR (TREE_OPERAND (t, 2));
15219 RETURN (build_x_conditional_expr (EXPR_LOCATION (t),
15220 cond, exp1, exp2, complain));
15223 case PSEUDO_DTOR_EXPR:
15225 tree op0 = RECUR (TREE_OPERAND (t, 0));
15226 tree op1 = RECUR (TREE_OPERAND (t, 1));
15227 tree op2 = tsubst (TREE_OPERAND (t, 2), args, complain, in_decl);
15228 RETURN (finish_pseudo_destructor_expr (op0, op1, op2,
15229 input_location));
15232 case TREE_LIST:
15234 tree purpose, value, chain;
15236 if (t == void_list_node)
15237 RETURN (t);
15239 if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
15240 || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
15242 /* We have pack expansions, so expand those and
15243 create a new list out of it. */
15244 tree purposevec = NULL_TREE;
15245 tree valuevec = NULL_TREE;
15246 tree chain;
15247 int i, len = -1;
15249 /* Expand the argument expressions. */
15250 if (TREE_PURPOSE (t))
15251 purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
15252 complain, in_decl);
15253 if (TREE_VALUE (t))
15254 valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
15255 complain, in_decl);
15257 /* Build the rest of the list. */
15258 chain = TREE_CHAIN (t);
15259 if (chain && chain != void_type_node)
15260 chain = RECUR (chain);
15262 /* Determine the number of arguments. */
15263 if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
15265 len = TREE_VEC_LENGTH (purposevec);
15266 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
15268 else if (TREE_CODE (valuevec) == TREE_VEC)
15269 len = TREE_VEC_LENGTH (valuevec);
15270 else
15272 /* Since we only performed a partial substitution into
15273 the argument pack, we only RETURN (a single list
15274 node. */
15275 if (purposevec == TREE_PURPOSE (t)
15276 && valuevec == TREE_VALUE (t)
15277 && chain == TREE_CHAIN (t))
15278 RETURN (t);
15280 RETURN (tree_cons (purposevec, valuevec, chain));
15283 /* Convert the argument vectors into a TREE_LIST */
15284 i = len;
15285 while (i > 0)
15287 /* Grab the Ith values. */
15288 i--;
15289 purpose = purposevec ? TREE_VEC_ELT (purposevec, i)
15290 : NULL_TREE;
15291 value
15292 = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i))
15293 : NULL_TREE;
15295 /* Build the list (backwards). */
15296 chain = tree_cons (purpose, value, chain);
15299 RETURN (chain);
15302 purpose = TREE_PURPOSE (t);
15303 if (purpose)
15304 purpose = RECUR (purpose);
15305 value = TREE_VALUE (t);
15306 if (value)
15307 value = RECUR (value);
15308 chain = TREE_CHAIN (t);
15309 if (chain && chain != void_type_node)
15310 chain = RECUR (chain);
15311 if (purpose == TREE_PURPOSE (t)
15312 && value == TREE_VALUE (t)
15313 && chain == TREE_CHAIN (t))
15314 RETURN (t);
15315 RETURN (tree_cons (purpose, value, chain));
15318 case COMPONENT_REF:
15320 tree object;
15321 tree object_type;
15322 tree member;
15323 tree r;
15325 object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
15326 args, complain, in_decl);
15327 /* Remember that there was a reference to this entity. */
15328 if (DECL_P (object)
15329 && !mark_used (object, complain) && !(complain & tf_error))
15330 RETURN (error_mark_node);
15331 object_type = TREE_TYPE (object);
15333 member = TREE_OPERAND (t, 1);
15334 if (BASELINK_P (member))
15335 member = tsubst_baselink (member,
15336 non_reference (TREE_TYPE (object)),
15337 args, complain, in_decl);
15338 else
15339 member = tsubst_copy (member, args, complain, in_decl);
15340 if (member == error_mark_node)
15341 RETURN (error_mark_node);
15343 if (type_dependent_expression_p (object))
15344 /* We can't do much here. */;
15345 else if (!CLASS_TYPE_P (object_type))
15347 if (scalarish_type_p (object_type))
15349 tree s = NULL_TREE;
15350 tree dtor = member;
15352 if (TREE_CODE (dtor) == SCOPE_REF)
15354 s = TREE_OPERAND (dtor, 0);
15355 dtor = TREE_OPERAND (dtor, 1);
15357 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
15359 dtor = TREE_OPERAND (dtor, 0);
15360 if (TYPE_P (dtor))
15361 RETURN (finish_pseudo_destructor_expr
15362 (object, s, dtor, input_location));
15366 else if (TREE_CODE (member) == SCOPE_REF
15367 && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
15369 /* Lookup the template functions now that we know what the
15370 scope is. */
15371 tree scope = TREE_OPERAND (member, 0);
15372 tree tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
15373 tree args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
15374 member = lookup_qualified_name (scope, tmpl,
15375 /*is_type_p=*/false,
15376 /*complain=*/false);
15377 if (BASELINK_P (member))
15379 BASELINK_FUNCTIONS (member)
15380 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
15381 args);
15382 member = (adjust_result_of_qualified_name_lookup
15383 (member, BINFO_TYPE (BASELINK_BINFO (member)),
15384 object_type));
15386 else
15388 qualified_name_lookup_error (scope, tmpl, member,
15389 input_location);
15390 RETURN (error_mark_node);
15393 else if (TREE_CODE (member) == SCOPE_REF
15394 && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
15395 && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
15397 if (complain & tf_error)
15399 if (TYPE_P (TREE_OPERAND (member, 0)))
15400 error ("%qT is not a class or namespace",
15401 TREE_OPERAND (member, 0));
15402 else
15403 error ("%qD is not a class or namespace",
15404 TREE_OPERAND (member, 0));
15406 RETURN (error_mark_node);
15408 else if (TREE_CODE (member) == FIELD_DECL)
15410 r = finish_non_static_data_member (member, object, NULL_TREE);
15411 if (TREE_CODE (r) == COMPONENT_REF)
15412 REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
15413 RETURN (r);
15416 r = finish_class_member_access_expr (object, member,
15417 /*template_p=*/false,
15418 complain);
15419 if (TREE_CODE (r) == COMPONENT_REF)
15420 REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
15421 RETURN (r);
15424 case THROW_EXPR:
15425 RETURN (build_throw
15426 (RECUR (TREE_OPERAND (t, 0))));
15428 case CONSTRUCTOR:
15430 vec<constructor_elt, va_gc> *n;
15431 constructor_elt *ce;
15432 unsigned HOST_WIDE_INT idx;
15433 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
15434 bool process_index_p;
15435 int newlen;
15436 bool need_copy_p = false;
15437 tree r;
15439 if (type == error_mark_node)
15440 RETURN (error_mark_node);
15442 /* digest_init will do the wrong thing if we let it. */
15443 if (type && TYPE_PTRMEMFUNC_P (type))
15444 RETURN (t);
15446 /* We do not want to process the index of aggregate
15447 initializers as they are identifier nodes which will be
15448 looked up by digest_init. */
15449 process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
15451 n = vec_safe_copy (CONSTRUCTOR_ELTS (t));
15452 newlen = vec_safe_length (n);
15453 FOR_EACH_VEC_SAFE_ELT (n, idx, ce)
15455 if (ce->index && process_index_p
15456 /* An identifier index is looked up in the type
15457 being initialized, not the current scope. */
15458 && TREE_CODE (ce->index) != IDENTIFIER_NODE)
15459 ce->index = RECUR (ce->index);
15461 if (PACK_EXPANSION_P (ce->value))
15463 /* Substitute into the pack expansion. */
15464 ce->value = tsubst_pack_expansion (ce->value, args, complain,
15465 in_decl);
15467 if (ce->value == error_mark_node
15468 || PACK_EXPANSION_P (ce->value))
15470 else if (TREE_VEC_LENGTH (ce->value) == 1)
15471 /* Just move the argument into place. */
15472 ce->value = TREE_VEC_ELT (ce->value, 0);
15473 else
15475 /* Update the length of the final CONSTRUCTOR
15476 arguments vector, and note that we will need to
15477 copy.*/
15478 newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
15479 need_copy_p = true;
15482 else
15483 ce->value = RECUR (ce->value);
15486 if (need_copy_p)
15488 vec<constructor_elt, va_gc> *old_n = n;
15490 vec_alloc (n, newlen);
15491 FOR_EACH_VEC_ELT (*old_n, idx, ce)
15493 if (TREE_CODE (ce->value) == TREE_VEC)
15495 int i, len = TREE_VEC_LENGTH (ce->value);
15496 for (i = 0; i < len; ++i)
15497 CONSTRUCTOR_APPEND_ELT (n, 0,
15498 TREE_VEC_ELT (ce->value, i));
15500 else
15501 CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
15505 r = build_constructor (init_list_type_node, n);
15506 CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
15508 if (TREE_HAS_CONSTRUCTOR (t))
15509 RETURN (finish_compound_literal (type, r, complain));
15511 TREE_TYPE (r) = type;
15512 RETURN (r);
15515 case TYPEID_EXPR:
15517 tree operand_0 = TREE_OPERAND (t, 0);
15518 if (TYPE_P (operand_0))
15520 operand_0 = tsubst (operand_0, args, complain, in_decl);
15521 RETURN (get_typeid (operand_0, complain));
15523 else
15525 operand_0 = RECUR (operand_0);
15526 RETURN (build_typeid (operand_0, complain));
15530 case VAR_DECL:
15531 if (!args)
15532 RETURN (t);
15533 else if (DECL_PACK_P (t))
15535 /* We don't build decls for an instantiation of a
15536 variadic capture proxy, we instantiate the elements
15537 when needed. */
15538 gcc_assert (DECL_HAS_VALUE_EXPR_P (t));
15539 return RECUR (DECL_VALUE_EXPR (t));
15541 /* Fall through */
15543 case PARM_DECL:
15545 tree r = tsubst_copy (t, args, complain, in_decl);
15546 /* ??? We're doing a subset of finish_id_expression here. */
15547 if (VAR_P (r)
15548 && !processing_template_decl
15549 && !cp_unevaluated_operand
15550 && (TREE_STATIC (r) || DECL_EXTERNAL (r))
15551 && DECL_THREAD_LOCAL_P (r))
15553 if (tree wrap = get_tls_wrapper_fn (r))
15554 /* Replace an evaluated use of the thread_local variable with
15555 a call to its wrapper. */
15556 r = build_cxx_call (wrap, 0, NULL, tf_warning_or_error);
15558 else if (outer_automatic_var_p (r))
15559 r = process_outer_var_ref (r, complain);
15561 if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
15562 /* If the original type was a reference, we'll be wrapped in
15563 the appropriate INDIRECT_REF. */
15564 r = convert_from_reference (r);
15565 RETURN (r);
15568 case VA_ARG_EXPR:
15570 tree op0 = RECUR (TREE_OPERAND (t, 0));
15571 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
15572 RETURN (build_x_va_arg (EXPR_LOCATION (t), op0, type));
15575 case OFFSETOF_EXPR:
15576 RETURN (finish_offsetof (RECUR (TREE_OPERAND (t, 0)),
15577 EXPR_LOCATION (t)));
15579 case TRAIT_EXPR:
15581 tree type1 = tsubst (TRAIT_EXPR_TYPE1 (t), args,
15582 complain, in_decl);
15584 tree type2 = TRAIT_EXPR_TYPE2 (t);
15585 if (type2 && TREE_CODE (type2) == TREE_LIST)
15586 type2 = RECUR (type2);
15587 else if (type2)
15588 type2 = tsubst (type2, args, complain, in_decl);
15590 RETURN (finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2));
15593 case STMT_EXPR:
15595 tree old_stmt_expr = cur_stmt_expr;
15596 tree stmt_expr = begin_stmt_expr ();
15598 cur_stmt_expr = stmt_expr;
15599 tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
15600 integral_constant_expression_p);
15601 stmt_expr = finish_stmt_expr (stmt_expr, false);
15602 cur_stmt_expr = old_stmt_expr;
15604 /* If the resulting list of expression statement is empty,
15605 fold it further into void_node. */
15606 if (empty_expr_stmt_p (stmt_expr))
15607 stmt_expr = void_node;
15609 RETURN (stmt_expr);
15612 case LAMBDA_EXPR:
15614 tree r = build_lambda_expr ();
15616 tree type = tsubst (LAMBDA_EXPR_CLOSURE (t), args, complain, NULL_TREE);
15617 LAMBDA_EXPR_CLOSURE (r) = type;
15618 CLASSTYPE_LAMBDA_EXPR (type) = r;
15620 LAMBDA_EXPR_LOCATION (r)
15621 = LAMBDA_EXPR_LOCATION (t);
15622 LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
15623 = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
15624 LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
15625 LAMBDA_EXPR_DISCRIMINATOR (r)
15626 = (LAMBDA_EXPR_DISCRIMINATOR (t));
15627 /* For a function scope, we want to use tsubst so that we don't
15628 complain about referring to an auto function before its return
15629 type has been deduced. Otherwise, we want to use tsubst_copy so
15630 that we look up the existing field/parameter/variable rather
15631 than build a new one. */
15632 tree scope = LAMBDA_EXPR_EXTRA_SCOPE (t);
15633 if (scope && TREE_CODE (scope) == FUNCTION_DECL)
15634 scope = tsubst (scope, args, complain, in_decl);
15635 else if (scope && TREE_CODE (scope) == PARM_DECL)
15637 /* Look up the parameter we want directly, as tsubst_copy
15638 doesn't do what we need. */
15639 tree fn = tsubst (DECL_CONTEXT (scope), args, complain, in_decl);
15640 tree parm = FUNCTION_FIRST_USER_PARM (fn);
15641 while (DECL_PARM_INDEX (parm) != DECL_PARM_INDEX (scope))
15642 parm = DECL_CHAIN (parm);
15643 scope = parm;
15644 /* FIXME Work around the parm not having DECL_CONTEXT set. */
15645 if (DECL_CONTEXT (scope) == NULL_TREE)
15646 DECL_CONTEXT (scope) = fn;
15648 else
15649 scope = RECUR (scope);
15650 LAMBDA_EXPR_EXTRA_SCOPE (r) = scope;
15651 LAMBDA_EXPR_RETURN_TYPE (r)
15652 = tsubst (LAMBDA_EXPR_RETURN_TYPE (t), args, complain, in_decl);
15654 gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (t) == NULL_TREE
15655 && LAMBDA_EXPR_PENDING_PROXIES (t) == NULL);
15657 /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set. */
15658 determine_visibility (TYPE_NAME (type));
15659 /* Now that we know visibility, instantiate the type so we have a
15660 declaration of the op() for later calls to lambda_function. */
15661 complete_type (type);
15663 LAMBDA_EXPR_THIS_CAPTURE (r) = NULL_TREE;
15665 RETURN (build_lambda_object (r));
15668 case TARGET_EXPR:
15669 /* We can get here for a constant initializer of non-dependent type.
15670 FIXME stop folding in cp_parser_initializer_clause. */
15672 tree r = get_target_expr_sfinae (RECUR (TARGET_EXPR_INITIAL (t)),
15673 complain);
15674 RETURN (r);
15677 case TRANSACTION_EXPR:
15678 RETURN (tsubst_expr(t, args, complain, in_decl,
15679 integral_constant_expression_p));
15681 case PAREN_EXPR:
15682 RETURN (finish_parenthesized_expr (RECUR (TREE_OPERAND (t, 0))));
15684 case VEC_PERM_EXPR:
15686 tree op0 = RECUR (TREE_OPERAND (t, 0));
15687 tree op1 = RECUR (TREE_OPERAND (t, 1));
15688 tree op2 = RECUR (TREE_OPERAND (t, 2));
15689 RETURN (build_x_vec_perm_expr (input_location, op0, op1, op2,
15690 complain));
15693 default:
15694 /* Handle Objective-C++ constructs, if appropriate. */
15696 tree subst
15697 = objcp_tsubst_copy_and_build (t, args, complain,
15698 in_decl, /*function_p=*/false);
15699 if (subst)
15700 RETURN (subst);
15702 RETURN (tsubst_copy (t, args, complain, in_decl));
15705 #undef RECUR
15706 #undef RETURN
15707 out:
15708 input_location = loc;
15709 return retval;
15712 /* Verify that the instantiated ARGS are valid. For type arguments,
15713 make sure that the type's linkage is ok. For non-type arguments,
15714 make sure they are constants if they are integral or enumerations.
15715 Emit an error under control of COMPLAIN, and return TRUE on error. */
15717 static bool
15718 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
15720 if (dependent_template_arg_p (t))
15721 return false;
15722 if (ARGUMENT_PACK_P (t))
15724 tree vec = ARGUMENT_PACK_ARGS (t);
15725 int len = TREE_VEC_LENGTH (vec);
15726 bool result = false;
15727 int i;
15729 for (i = 0; i < len; ++i)
15730 if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
15731 result = true;
15732 return result;
15734 else if (TYPE_P (t))
15736 /* [basic.link]: A name with no linkage (notably, the name
15737 of a class or enumeration declared in a local scope)
15738 shall not be used to declare an entity with linkage.
15739 This implies that names with no linkage cannot be used as
15740 template arguments
15742 DR 757 relaxes this restriction for C++0x. */
15743 tree nt = (cxx_dialect > cxx98 ? NULL_TREE
15744 : no_linkage_check (t, /*relaxed_p=*/false));
15746 if (nt)
15748 /* DR 488 makes use of a type with no linkage cause
15749 type deduction to fail. */
15750 if (complain & tf_error)
15752 if (TYPE_ANONYMOUS_P (nt))
15753 error ("%qT is/uses anonymous type", t);
15754 else
15755 error ("template argument for %qD uses local type %qT",
15756 tmpl, t);
15758 return true;
15760 /* In order to avoid all sorts of complications, we do not
15761 allow variably-modified types as template arguments. */
15762 else if (variably_modified_type_p (t, NULL_TREE))
15764 if (complain & tf_error)
15765 error ("%qT is a variably modified type", t);
15766 return true;
15769 /* Class template and alias template arguments should be OK. */
15770 else if (DECL_TYPE_TEMPLATE_P (t))
15772 /* A non-type argument of integral or enumerated type must be a
15773 constant. */
15774 else if (TREE_TYPE (t)
15775 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
15776 && !REFERENCE_REF_P (t)
15777 && !TREE_CONSTANT (t))
15779 if (complain & tf_error)
15780 error ("integral expression %qE is not constant", t);
15781 return true;
15783 return false;
15786 static bool
15787 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
15789 int ix, len = DECL_NTPARMS (tmpl);
15790 bool result = false;
15792 for (ix = 0; ix != len; ix++)
15794 if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
15795 result = true;
15797 if (result && (complain & tf_error))
15798 error (" trying to instantiate %qD", tmpl);
15799 return result;
15802 /* We're out of SFINAE context now, so generate diagnostics for the access
15803 errors we saw earlier when instantiating D from TMPL and ARGS. */
15805 static void
15806 recheck_decl_substitution (tree d, tree tmpl, tree args)
15808 tree pattern = DECL_TEMPLATE_RESULT (tmpl);
15809 tree type = TREE_TYPE (pattern);
15810 location_t loc = input_location;
15812 push_access_scope (d);
15813 push_deferring_access_checks (dk_no_deferred);
15814 input_location = DECL_SOURCE_LOCATION (pattern);
15815 tsubst (type, args, tf_warning_or_error, d);
15816 input_location = loc;
15817 pop_deferring_access_checks ();
15818 pop_access_scope (d);
15821 /* Instantiate the indicated variable, function, or alias template TMPL with
15822 the template arguments in TARG_PTR. */
15824 static tree
15825 instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain)
15827 tree targ_ptr = orig_args;
15828 tree fndecl;
15829 tree gen_tmpl;
15830 tree spec;
15831 bool access_ok = true;
15833 if (tmpl == error_mark_node)
15834 return error_mark_node;
15836 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
15838 /* If this function is a clone, handle it specially. */
15839 if (DECL_CLONED_FUNCTION_P (tmpl))
15841 tree spec;
15842 tree clone;
15844 /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
15845 DECL_CLONED_FUNCTION. */
15846 spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
15847 targ_ptr, complain);
15848 if (spec == error_mark_node)
15849 return error_mark_node;
15851 /* Look for the clone. */
15852 FOR_EACH_CLONE (clone, spec)
15853 if (DECL_NAME (clone) == DECL_NAME (tmpl))
15854 return clone;
15855 /* We should always have found the clone by now. */
15856 gcc_unreachable ();
15857 return NULL_TREE;
15860 if (targ_ptr == error_mark_node)
15861 return error_mark_node;
15863 /* Check to see if we already have this specialization. */
15864 gen_tmpl = most_general_template (tmpl);
15865 if (tmpl != gen_tmpl)
15866 /* The TMPL is a partial instantiation. To get a full set of
15867 arguments we must add the arguments used to perform the
15868 partial instantiation. */
15869 targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
15870 targ_ptr);
15872 /* It would be nice to avoid hashing here and then again in tsubst_decl,
15873 but it doesn't seem to be on the hot path. */
15874 spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
15876 gcc_assert (tmpl == gen_tmpl
15877 || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
15878 == spec)
15879 || fndecl == NULL_TREE);
15881 if (spec != NULL_TREE)
15883 if (FNDECL_HAS_ACCESS_ERRORS (spec))
15885 if (complain & tf_error)
15886 recheck_decl_substitution (spec, gen_tmpl, targ_ptr);
15887 return error_mark_node;
15889 return spec;
15892 if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
15893 complain))
15894 return error_mark_node;
15896 /* We are building a FUNCTION_DECL, during which the access of its
15897 parameters and return types have to be checked. However this
15898 FUNCTION_DECL which is the desired context for access checking
15899 is not built yet. We solve this chicken-and-egg problem by
15900 deferring all checks until we have the FUNCTION_DECL. */
15901 push_deferring_access_checks (dk_deferred);
15903 /* Instantiation of the function happens in the context of the function
15904 template, not the context of the overload resolution we're doing. */
15905 push_to_top_level ();
15906 /* If there are dependent arguments, e.g. because we're doing partial
15907 ordering, make sure processing_template_decl stays set. */
15908 if (uses_template_parms (targ_ptr))
15909 ++processing_template_decl;
15910 if (DECL_CLASS_SCOPE_P (gen_tmpl))
15912 tree ctx = tsubst_aggr_type (DECL_CONTEXT (gen_tmpl), targ_ptr,
15913 complain, gen_tmpl, true);
15914 push_nested_class (ctx);
15917 tree pattern = DECL_TEMPLATE_RESULT (gen_tmpl);
15919 if (VAR_P (pattern))
15921 /* We need to determine if we're using a partial or explicit
15922 specialization now, because the type of the variable could be
15923 different. */
15924 tree tid = lookup_template_variable (gen_tmpl, targ_ptr);
15925 tree elt = most_specialized_partial_spec (tid, complain);
15926 if (elt == error_mark_node)
15927 pattern = error_mark_node;
15928 else if (elt)
15930 tmpl = TREE_VALUE (elt);
15931 pattern = DECL_TEMPLATE_RESULT (tmpl);
15932 targ_ptr = TREE_PURPOSE (elt);
15936 /* Substitute template parameters to obtain the specialization. */
15937 fndecl = tsubst (pattern, targ_ptr, complain, gen_tmpl);
15938 if (DECL_CLASS_SCOPE_P (gen_tmpl))
15939 pop_nested_class ();
15940 pop_from_top_level ();
15942 if (fndecl == error_mark_node)
15944 pop_deferring_access_checks ();
15945 return error_mark_node;
15948 /* The DECL_TI_TEMPLATE should always be the immediate parent
15949 template, not the most general template. */
15950 DECL_TI_TEMPLATE (fndecl) = tmpl;
15952 /* Now we know the specialization, compute access previously
15953 deferred. */
15954 push_access_scope (fndecl);
15955 if (!perform_deferred_access_checks (complain))
15956 access_ok = false;
15957 pop_access_scope (fndecl);
15958 pop_deferring_access_checks ();
15960 /* If we've just instantiated the main entry point for a function,
15961 instantiate all the alternate entry points as well. We do this
15962 by cloning the instantiation of the main entry point, not by
15963 instantiating the template clones. */
15964 if (DECL_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (DECL_CHAIN (gen_tmpl)))
15965 clone_function_decl (fndecl, /*update_method_vec_p=*/0);
15967 if (!access_ok)
15969 if (!(complain & tf_error))
15971 /* Remember to reinstantiate when we're out of SFINAE so the user
15972 can see the errors. */
15973 FNDECL_HAS_ACCESS_ERRORS (fndecl) = true;
15975 return error_mark_node;
15977 return fndecl;
15980 /* Wrapper for instantiate_template_1. */
15982 tree
15983 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
15985 tree ret;
15986 timevar_push (TV_TEMPLATE_INST);
15987 ret = instantiate_template_1 (tmpl, orig_args, complain);
15988 timevar_pop (TV_TEMPLATE_INST);
15989 return ret;
15992 /* Instantiate the alias template TMPL with ARGS. Also push a template
15993 instantiation level, which instantiate_template doesn't do because
15994 functions and variables have sufficient context established by the
15995 callers. */
15997 static tree
15998 instantiate_alias_template (tree tmpl, tree args, tsubst_flags_t complain)
16000 struct pending_template *old_last_pend = last_pending_template;
16001 struct tinst_level *old_error_tinst = last_error_tinst_level;
16002 if (tmpl == error_mark_node || args == error_mark_node)
16003 return error_mark_node;
16004 tree tinst = build_tree_list (tmpl, args);
16005 if (!push_tinst_level (tinst))
16007 ggc_free (tinst);
16008 return error_mark_node;
16011 args =
16012 coerce_innermost_template_parms (DECL_TEMPLATE_PARMS (tmpl),
16013 args, tmpl, complain,
16014 /*require_all_args=*/true,
16015 /*use_default_args=*/true);
16017 tree r = instantiate_template (tmpl, args, complain);
16018 pop_tinst_level ();
16019 /* We can't free this if a pending_template entry or last_error_tinst_level
16020 is pointing at it. */
16021 if (last_pending_template == old_last_pend
16022 && last_error_tinst_level == old_error_tinst)
16023 ggc_free (tinst);
16025 return r;
16028 /* PARM is a template parameter pack for FN. Returns true iff
16029 PARM is used in a deducible way in the argument list of FN. */
16031 static bool
16032 pack_deducible_p (tree parm, tree fn)
16034 tree t = FUNCTION_FIRST_USER_PARMTYPE (fn);
16035 for (; t; t = TREE_CHAIN (t))
16037 tree type = TREE_VALUE (t);
16038 tree packs;
16039 if (!PACK_EXPANSION_P (type))
16040 continue;
16041 for (packs = PACK_EXPANSION_PARAMETER_PACKS (type);
16042 packs; packs = TREE_CHAIN (packs))
16043 if (template_args_equal (TREE_VALUE (packs), parm))
16045 /* The template parameter pack is used in a function parameter
16046 pack. If this is the end of the parameter list, the
16047 template parameter pack is deducible. */
16048 if (TREE_CHAIN (t) == void_list_node)
16049 return true;
16050 else
16051 /* Otherwise, not. Well, it could be deduced from
16052 a non-pack parameter, but doing so would end up with
16053 a deduction mismatch, so don't bother. */
16054 return false;
16057 /* The template parameter pack isn't used in any function parameter
16058 packs, but it might be used deeper, e.g. tuple<Args...>. */
16059 return true;
16062 /* The FN is a TEMPLATE_DECL for a function. ARGS is an array with
16063 NARGS elements of the arguments that are being used when calling
16064 it. TARGS is a vector into which the deduced template arguments
16065 are placed.
16067 Returns either a FUNCTION_DECL for the matching specialization of FN or
16068 NULL_TREE if no suitable specialization can be found. If EXPLAIN_P is
16069 true, diagnostics will be printed to explain why it failed.
16071 If FN is a conversion operator, or we are trying to produce a specific
16072 specialization, RETURN_TYPE is the return type desired.
16074 The EXPLICIT_TARGS are explicit template arguments provided via a
16075 template-id.
16077 The parameter STRICT is one of:
16079 DEDUCE_CALL:
16080 We are deducing arguments for a function call, as in
16081 [temp.deduct.call].
16083 DEDUCE_CONV:
16084 We are deducing arguments for a conversion function, as in
16085 [temp.deduct.conv].
16087 DEDUCE_EXACT:
16088 We are deducing arguments when doing an explicit instantiation
16089 as in [temp.explicit], when determining an explicit specialization
16090 as in [temp.expl.spec], or when taking the address of a function
16091 template, as in [temp.deduct.funcaddr]. */
16093 tree
16094 fn_type_unification (tree fn,
16095 tree explicit_targs,
16096 tree targs,
16097 const tree *args,
16098 unsigned int nargs,
16099 tree return_type,
16100 unification_kind_t strict,
16101 int flags,
16102 bool explain_p,
16103 bool decltype_p)
16105 tree parms;
16106 tree fntype;
16107 tree decl = NULL_TREE;
16108 tsubst_flags_t complain = (explain_p ? tf_warning_or_error : tf_none);
16109 bool ok;
16110 static int deduction_depth;
16111 struct pending_template *old_last_pend = last_pending_template;
16112 struct tinst_level *old_error_tinst = last_error_tinst_level;
16113 tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
16114 tree tinst;
16115 tree r = error_mark_node;
16117 if (decltype_p)
16118 complain |= tf_decltype;
16120 /* In C++0x, it's possible to have a function template whose type depends
16121 on itself recursively. This is most obvious with decltype, but can also
16122 occur with enumeration scope (c++/48969). So we need to catch infinite
16123 recursion and reject the substitution at deduction time; this function
16124 will return error_mark_node for any repeated substitution.
16126 This also catches excessive recursion such as when f<N> depends on
16127 f<N-1> across all integers, and returns error_mark_node for all the
16128 substitutions back up to the initial one.
16130 This is, of course, not reentrant. */
16131 if (excessive_deduction_depth)
16132 return error_mark_node;
16133 tinst = build_tree_list (fn, NULL_TREE);
16134 ++deduction_depth;
16136 gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
16138 fntype = TREE_TYPE (fn);
16139 if (explicit_targs)
16141 /* [temp.deduct]
16143 The specified template arguments must match the template
16144 parameters in kind (i.e., type, nontype, template), and there
16145 must not be more arguments than there are parameters;
16146 otherwise type deduction fails.
16148 Nontype arguments must match the types of the corresponding
16149 nontype template parameters, or must be convertible to the
16150 types of the corresponding nontype parameters as specified in
16151 _temp.arg.nontype_, otherwise type deduction fails.
16153 All references in the function type of the function template
16154 to the corresponding template parameters are replaced by the
16155 specified template argument values. If a substitution in a
16156 template parameter or in the function type of the function
16157 template results in an invalid type, type deduction fails. */
16158 int i, len = TREE_VEC_LENGTH (tparms);
16159 location_t loc = input_location;
16160 bool incomplete = false;
16162 /* Adjust any explicit template arguments before entering the
16163 substitution context. */
16164 explicit_targs
16165 = (coerce_template_parms (tparms, explicit_targs, NULL_TREE,
16166 complain,
16167 /*require_all_args=*/false,
16168 /*use_default_args=*/false));
16169 if (explicit_targs == error_mark_node)
16170 goto fail;
16172 /* Substitute the explicit args into the function type. This is
16173 necessary so that, for instance, explicitly declared function
16174 arguments can match null pointed constants. If we were given
16175 an incomplete set of explicit args, we must not do semantic
16176 processing during substitution as we could create partial
16177 instantiations. */
16178 for (i = 0; i < len; i++)
16180 tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
16181 bool parameter_pack = false;
16182 tree targ = TREE_VEC_ELT (explicit_targs, i);
16184 /* Dig out the actual parm. */
16185 if (TREE_CODE (parm) == TYPE_DECL
16186 || TREE_CODE (parm) == TEMPLATE_DECL)
16188 parm = TREE_TYPE (parm);
16189 parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
16191 else if (TREE_CODE (parm) == PARM_DECL)
16193 parm = DECL_INITIAL (parm);
16194 parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
16197 if (!parameter_pack && targ == NULL_TREE)
16198 /* No explicit argument for this template parameter. */
16199 incomplete = true;
16201 if (parameter_pack && pack_deducible_p (parm, fn))
16203 /* Mark the argument pack as "incomplete". We could
16204 still deduce more arguments during unification.
16205 We remove this mark in type_unification_real. */
16206 if (targ)
16208 ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
16209 ARGUMENT_PACK_EXPLICIT_ARGS (targ)
16210 = ARGUMENT_PACK_ARGS (targ);
16213 /* We have some incomplete argument packs. */
16214 incomplete = true;
16218 TREE_VALUE (tinst) = explicit_targs;
16219 if (!push_tinst_level (tinst))
16221 excessive_deduction_depth = true;
16222 goto fail;
16224 processing_template_decl += incomplete;
16225 input_location = DECL_SOURCE_LOCATION (fn);
16226 /* Ignore any access checks; we'll see them again in
16227 instantiate_template and they might have the wrong
16228 access path at this point. */
16229 push_deferring_access_checks (dk_deferred);
16230 fntype = tsubst (TREE_TYPE (fn), explicit_targs,
16231 complain | tf_partial, NULL_TREE);
16232 pop_deferring_access_checks ();
16233 input_location = loc;
16234 processing_template_decl -= incomplete;
16235 pop_tinst_level ();
16237 if (fntype == error_mark_node)
16238 goto fail;
16240 /* Place the explicitly specified arguments in TARGS. */
16241 for (i = NUM_TMPL_ARGS (explicit_targs); i--;)
16242 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (explicit_targs, i);
16245 /* Never do unification on the 'this' parameter. */
16246 parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
16248 if (return_type)
16250 tree *new_args;
16252 parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
16253 new_args = XALLOCAVEC (tree, nargs + 1);
16254 new_args[0] = return_type;
16255 memcpy (new_args + 1, args, nargs * sizeof (tree));
16256 args = new_args;
16257 ++nargs;
16260 /* We allow incomplete unification without an error message here
16261 because the standard doesn't seem to explicitly prohibit it. Our
16262 callers must be ready to deal with unification failures in any
16263 event. */
16265 TREE_VALUE (tinst) = targs;
16266 /* If we aren't explaining yet, push tinst context so we can see where
16267 any errors (e.g. from class instantiations triggered by instantiation
16268 of default template arguments) come from. If we are explaining, this
16269 context is redundant. */
16270 if (!explain_p && !push_tinst_level (tinst))
16272 excessive_deduction_depth = true;
16273 goto fail;
16276 /* type_unification_real will pass back any access checks from default
16277 template argument substitution. */
16278 vec<deferred_access_check, va_gc> *checks;
16279 checks = NULL;
16281 ok = !type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
16282 targs, parms, args, nargs, /*subr=*/0,
16283 strict, flags, &checks, explain_p);
16284 if (!explain_p)
16285 pop_tinst_level ();
16286 if (!ok)
16287 goto fail;
16289 /* Now that we have bindings for all of the template arguments,
16290 ensure that the arguments deduced for the template template
16291 parameters have compatible template parameter lists. We cannot
16292 check this property before we have deduced all template
16293 arguments, because the template parameter types of a template
16294 template parameter might depend on prior template parameters
16295 deduced after the template template parameter. The following
16296 ill-formed example illustrates this issue:
16298 template<typename T, template<T> class C> void f(C<5>, T);
16300 template<int N> struct X {};
16302 void g() {
16303 f(X<5>(), 5l); // error: template argument deduction fails
16306 The template parameter list of 'C' depends on the template type
16307 parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
16308 'long'. Thus, we can't check that 'C' cannot bind to 'X' at the
16309 time that we deduce 'C'. */
16310 if (!template_template_parm_bindings_ok_p
16311 (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
16313 unify_inconsistent_template_template_parameters (explain_p);
16314 goto fail;
16317 /* All is well so far. Now, check:
16319 [temp.deduct]
16321 When all template arguments have been deduced, all uses of
16322 template parameters in nondeduced contexts are replaced with
16323 the corresponding deduced argument values. If the
16324 substitution results in an invalid type, as described above,
16325 type deduction fails. */
16326 TREE_VALUE (tinst) = targs;
16327 if (!push_tinst_level (tinst))
16329 excessive_deduction_depth = true;
16330 goto fail;
16333 /* Also collect access checks from the instantiation. */
16334 reopen_deferring_access_checks (checks);
16336 decl = instantiate_template (fn, targs, complain);
16338 checks = get_deferred_access_checks ();
16339 pop_deferring_access_checks ();
16341 pop_tinst_level ();
16343 if (decl == error_mark_node)
16344 goto fail;
16346 /* Now perform any access checks encountered during substitution. */
16347 push_access_scope (decl);
16348 ok = perform_access_checks (checks, complain);
16349 pop_access_scope (decl);
16350 if (!ok)
16351 goto fail;
16353 /* If we're looking for an exact match, check that what we got
16354 is indeed an exact match. It might not be if some template
16355 parameters are used in non-deduced contexts. But don't check
16356 for an exact match if we have dependent template arguments;
16357 in that case we're doing partial ordering, and we already know
16358 that we have two candidates that will provide the actual type. */
16359 if (strict == DEDUCE_EXACT && !any_dependent_template_arguments_p (targs))
16361 tree substed = TREE_TYPE (decl);
16362 unsigned int i;
16364 tree sarg
16365 = skip_artificial_parms_for (decl, TYPE_ARG_TYPES (substed));
16366 if (return_type)
16367 sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
16368 for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
16369 if (!same_type_p (args[i], TREE_VALUE (sarg)))
16371 unify_type_mismatch (explain_p, args[i],
16372 TREE_VALUE (sarg));
16373 goto fail;
16377 r = decl;
16379 fail:
16380 --deduction_depth;
16381 if (excessive_deduction_depth)
16383 if (deduction_depth == 0)
16384 /* Reset once we're all the way out. */
16385 excessive_deduction_depth = false;
16388 /* We can't free this if a pending_template entry or last_error_tinst_level
16389 is pointing at it. */
16390 if (last_pending_template == old_last_pend
16391 && last_error_tinst_level == old_error_tinst)
16392 ggc_free (tinst);
16394 return r;
16397 /* Adjust types before performing type deduction, as described in
16398 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
16399 sections are symmetric. PARM is the type of a function parameter
16400 or the return type of the conversion function. ARG is the type of
16401 the argument passed to the call, or the type of the value
16402 initialized with the result of the conversion function.
16403 ARG_EXPR is the original argument expression, which may be null. */
16405 static int
16406 maybe_adjust_types_for_deduction (unification_kind_t strict,
16407 tree* parm,
16408 tree* arg,
16409 tree arg_expr)
16411 int result = 0;
16413 switch (strict)
16415 case DEDUCE_CALL:
16416 break;
16418 case DEDUCE_CONV:
16420 /* Swap PARM and ARG throughout the remainder of this
16421 function; the handling is precisely symmetric since PARM
16422 will initialize ARG rather than vice versa. */
16423 tree* temp = parm;
16424 parm = arg;
16425 arg = temp;
16426 break;
16429 case DEDUCE_EXACT:
16430 /* Core issue #873: Do the DR606 thing (see below) for these cases,
16431 too, but here handle it by stripping the reference from PARM
16432 rather than by adding it to ARG. */
16433 if (TREE_CODE (*parm) == REFERENCE_TYPE
16434 && TYPE_REF_IS_RVALUE (*parm)
16435 && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
16436 && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
16437 && TREE_CODE (*arg) == REFERENCE_TYPE
16438 && !TYPE_REF_IS_RVALUE (*arg))
16439 *parm = TREE_TYPE (*parm);
16440 /* Nothing else to do in this case. */
16441 return 0;
16443 default:
16444 gcc_unreachable ();
16447 if (TREE_CODE (*parm) != REFERENCE_TYPE)
16449 /* [temp.deduct.call]
16451 If P is not a reference type:
16453 --If A is an array type, the pointer type produced by the
16454 array-to-pointer standard conversion (_conv.array_) is
16455 used in place of A for type deduction; otherwise,
16457 --If A is a function type, the pointer type produced by
16458 the function-to-pointer standard conversion
16459 (_conv.func_) is used in place of A for type deduction;
16460 otherwise,
16462 --If A is a cv-qualified type, the top level
16463 cv-qualifiers of A's type are ignored for type
16464 deduction. */
16465 if (TREE_CODE (*arg) == ARRAY_TYPE)
16466 *arg = build_pointer_type (TREE_TYPE (*arg));
16467 else if (TREE_CODE (*arg) == FUNCTION_TYPE)
16468 *arg = build_pointer_type (*arg);
16469 else
16470 *arg = TYPE_MAIN_VARIANT (*arg);
16473 /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
16474 of the form T&&, where T is a template parameter, and the argument
16475 is an lvalue, T is deduced as A& */
16476 if (TREE_CODE (*parm) == REFERENCE_TYPE
16477 && TYPE_REF_IS_RVALUE (*parm)
16478 && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
16479 && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
16480 && (arg_expr ? real_lvalue_p (arg_expr)
16481 /* try_one_overload doesn't provide an arg_expr, but
16482 functions are always lvalues. */
16483 : TREE_CODE (*arg) == FUNCTION_TYPE))
16484 *arg = build_reference_type (*arg);
16486 /* [temp.deduct.call]
16488 If P is a cv-qualified type, the top level cv-qualifiers
16489 of P's type are ignored for type deduction. If P is a
16490 reference type, the type referred to by P is used for
16491 type deduction. */
16492 *parm = TYPE_MAIN_VARIANT (*parm);
16493 if (TREE_CODE (*parm) == REFERENCE_TYPE)
16495 *parm = TREE_TYPE (*parm);
16496 result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
16499 /* DR 322. For conversion deduction, remove a reference type on parm
16500 too (which has been swapped into ARG). */
16501 if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
16502 *arg = TREE_TYPE (*arg);
16504 return result;
16507 /* Subroutine of unify_one_argument. PARM is a function parameter of a
16508 template which does contain any deducible template parameters; check if
16509 ARG is a suitable match for it. STRICT, FLAGS and EXPLAIN_P are as in
16510 unify_one_argument. */
16512 static int
16513 check_non_deducible_conversion (tree parm, tree arg, int strict,
16514 int flags, bool explain_p)
16516 tree type;
16518 if (!TYPE_P (arg))
16519 type = TREE_TYPE (arg);
16520 else
16521 type = arg;
16523 if (same_type_p (parm, type))
16524 return unify_success (explain_p);
16526 if (strict == DEDUCE_CONV)
16528 if (can_convert_arg (type, parm, NULL_TREE, flags,
16529 explain_p ? tf_warning_or_error : tf_none))
16530 return unify_success (explain_p);
16532 else if (strict != DEDUCE_EXACT)
16534 if (can_convert_arg (parm, type,
16535 TYPE_P (arg) ? NULL_TREE : arg,
16536 flags, explain_p ? tf_warning_or_error : tf_none))
16537 return unify_success (explain_p);
16540 if (strict == DEDUCE_EXACT)
16541 return unify_type_mismatch (explain_p, parm, arg);
16542 else
16543 return unify_arg_conversion (explain_p, parm, type, arg);
16546 static bool uses_deducible_template_parms (tree type);
16548 /* Returns true iff the expression EXPR is one from which a template
16549 argument can be deduced. In other words, if it's an undecorated
16550 use of a template non-type parameter. */
16552 static bool
16553 deducible_expression (tree expr)
16555 return (TREE_CODE (expr) == TEMPLATE_PARM_INDEX);
16558 /* Returns true iff the array domain DOMAIN uses a template parameter in a
16559 deducible way; that is, if it has a max value of <PARM> - 1. */
16561 static bool
16562 deducible_array_bound (tree domain)
16564 if (domain == NULL_TREE)
16565 return false;
16567 tree max = TYPE_MAX_VALUE (domain);
16568 if (TREE_CODE (max) != MINUS_EXPR)
16569 return false;
16571 return deducible_expression (TREE_OPERAND (max, 0));
16574 /* Returns true iff the template arguments ARGS use a template parameter
16575 in a deducible way. */
16577 static bool
16578 deducible_template_args (tree args)
16580 for (int i = 0; i < TREE_VEC_LENGTH (args); ++i)
16582 bool deducible;
16583 tree elt = TREE_VEC_ELT (args, i);
16584 if (ARGUMENT_PACK_P (elt))
16585 deducible = deducible_template_args (ARGUMENT_PACK_ARGS (elt));
16586 else
16588 if (PACK_EXPANSION_P (elt))
16589 elt = PACK_EXPANSION_PATTERN (elt);
16590 if (TREE_CODE (elt) == TEMPLATE_TEMPLATE_PARM)
16591 deducible = true;
16592 else if (TYPE_P (elt))
16593 deducible = uses_deducible_template_parms (elt);
16594 else
16595 deducible = deducible_expression (elt);
16597 if (deducible)
16598 return true;
16600 return false;
16603 /* Returns true iff TYPE contains any deducible references to template
16604 parameters, as per 14.8.2.5. */
16606 static bool
16607 uses_deducible_template_parms (tree type)
16609 if (PACK_EXPANSION_P (type))
16610 type = PACK_EXPANSION_PATTERN (type);
16612 /* T
16613 cv-list T
16614 TT<T>
16615 TT<i>
16616 TT<> */
16617 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
16618 || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
16619 return true;
16621 /* T*
16623 T&& */
16624 if (POINTER_TYPE_P (type))
16625 return uses_deducible_template_parms (TREE_TYPE (type));
16627 /* T[integer-constant ]
16628 type [i] */
16629 if (TREE_CODE (type) == ARRAY_TYPE)
16630 return (uses_deducible_template_parms (TREE_TYPE (type))
16631 || deducible_array_bound (TYPE_DOMAIN (type)));
16633 /* T type ::*
16634 type T::*
16635 T T::*
16636 T (type ::*)()
16637 type (T::*)()
16638 type (type ::*)(T)
16639 type (T::*)(T)
16640 T (type ::*)(T)
16641 T (T::*)()
16642 T (T::*)(T) */
16643 if (TYPE_PTRMEM_P (type))
16644 return (uses_deducible_template_parms (TYPE_PTRMEM_CLASS_TYPE (type))
16645 || (uses_deducible_template_parms
16646 (TYPE_PTRMEM_POINTED_TO_TYPE (type))));
16648 /* template-name <T> (where template-name refers to a class template)
16649 template-name <i> (where template-name refers to a class template) */
16650 if (CLASS_TYPE_P (type)
16651 && CLASSTYPE_TEMPLATE_INFO (type)
16652 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type)))
16653 return deducible_template_args (INNERMOST_TEMPLATE_ARGS
16654 (CLASSTYPE_TI_ARGS (type)));
16656 /* type (T)
16658 T(T) */
16659 if (TREE_CODE (type) == FUNCTION_TYPE
16660 || TREE_CODE (type) == METHOD_TYPE)
16662 if (uses_deducible_template_parms (TREE_TYPE (type)))
16663 return true;
16664 tree parm = TYPE_ARG_TYPES (type);
16665 if (TREE_CODE (type) == METHOD_TYPE)
16666 parm = TREE_CHAIN (parm);
16667 for (; parm; parm = TREE_CHAIN (parm))
16668 if (uses_deducible_template_parms (TREE_VALUE (parm)))
16669 return true;
16672 return false;
16675 /* Subroutine of type_unification_real and unify_pack_expansion to
16676 handle unification of a single P/A pair. Parameters are as
16677 for those functions. */
16679 static int
16680 unify_one_argument (tree tparms, tree targs, tree parm, tree arg,
16681 int subr, unification_kind_t strict, int flags,
16682 bool explain_p)
16684 tree arg_expr = NULL_TREE;
16685 int arg_strict;
16687 if (arg == error_mark_node || parm == error_mark_node)
16688 return unify_invalid (explain_p);
16689 if (arg == unknown_type_node)
16690 /* We can't deduce anything from this, but we might get all the
16691 template args from other function args. */
16692 return unify_success (explain_p);
16694 /* Implicit conversions (Clause 4) will be performed on a function
16695 argument to convert it to the type of the corresponding function
16696 parameter if the parameter type contains no template-parameters that
16697 participate in template argument deduction. */
16698 if (TYPE_P (parm) && !uses_template_parms (parm))
16699 /* For function parameters that contain no template-parameters at all,
16700 we have historically checked for convertibility in order to shortcut
16701 consideration of this candidate. */
16702 return check_non_deducible_conversion (parm, arg, strict, flags,
16703 explain_p);
16704 else if (strict == DEDUCE_CALL
16705 && TYPE_P (parm) && !uses_deducible_template_parms (parm))
16706 /* For function parameters with only non-deducible template parameters,
16707 just return. */
16708 return unify_success (explain_p);
16710 switch (strict)
16712 case DEDUCE_CALL:
16713 arg_strict = (UNIFY_ALLOW_OUTER_LEVEL
16714 | UNIFY_ALLOW_MORE_CV_QUAL
16715 | UNIFY_ALLOW_DERIVED);
16716 break;
16718 case DEDUCE_CONV:
16719 arg_strict = UNIFY_ALLOW_LESS_CV_QUAL;
16720 break;
16722 case DEDUCE_EXACT:
16723 arg_strict = UNIFY_ALLOW_NONE;
16724 break;
16726 default:
16727 gcc_unreachable ();
16730 /* We only do these transformations if this is the top-level
16731 parameter_type_list in a call or declaration matching; in other
16732 situations (nested function declarators, template argument lists) we
16733 won't be comparing a type to an expression, and we don't do any type
16734 adjustments. */
16735 if (!subr)
16737 if (!TYPE_P (arg))
16739 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
16740 if (type_unknown_p (arg))
16742 /* [temp.deduct.type] A template-argument can be
16743 deduced from a pointer to function or pointer
16744 to member function argument if the set of
16745 overloaded functions does not contain function
16746 templates and at most one of a set of
16747 overloaded functions provides a unique
16748 match. */
16750 if (resolve_overloaded_unification
16751 (tparms, targs, parm, arg, strict,
16752 arg_strict, explain_p))
16753 return unify_success (explain_p);
16754 return unify_overload_resolution_failure (explain_p, arg);
16757 arg_expr = arg;
16758 arg = unlowered_expr_type (arg);
16759 if (arg == error_mark_node)
16760 return unify_invalid (explain_p);
16763 arg_strict |=
16764 maybe_adjust_types_for_deduction (strict, &parm, &arg, arg_expr);
16766 else
16767 if ((TYPE_P (parm) || TREE_CODE (parm) == TEMPLATE_DECL)
16768 != (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL))
16769 return unify_template_argument_mismatch (explain_p, parm, arg);
16771 /* For deduction from an init-list we need the actual list. */
16772 if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
16773 arg = arg_expr;
16774 return unify (tparms, targs, parm, arg, arg_strict, explain_p);
16777 /* Most parms like fn_type_unification.
16779 If SUBR is 1, we're being called recursively (to unify the
16780 arguments of a function or method parameter of a function
16781 template).
16783 CHECKS is a pointer to a vector of access checks encountered while
16784 substituting default template arguments. */
16786 static int
16787 type_unification_real (tree tparms,
16788 tree targs,
16789 tree xparms,
16790 const tree *xargs,
16791 unsigned int xnargs,
16792 int subr,
16793 unification_kind_t strict,
16794 int flags,
16795 vec<deferred_access_check, va_gc> **checks,
16796 bool explain_p)
16798 tree parm, arg;
16799 int i;
16800 int ntparms = TREE_VEC_LENGTH (tparms);
16801 int saw_undeduced = 0;
16802 tree parms;
16803 const tree *args;
16804 unsigned int nargs;
16805 unsigned int ia;
16807 gcc_assert (TREE_CODE (tparms) == TREE_VEC);
16808 gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
16809 gcc_assert (ntparms > 0);
16811 /* Reset the number of non-defaulted template arguments contained
16812 in TARGS. */
16813 NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
16815 again:
16816 parms = xparms;
16817 args = xargs;
16818 nargs = xnargs;
16820 ia = 0;
16821 while (parms && parms != void_list_node
16822 && ia < nargs)
16824 parm = TREE_VALUE (parms);
16826 if (TREE_CODE (parm) == TYPE_PACK_EXPANSION
16827 && (!TREE_CHAIN (parms) || TREE_CHAIN (parms) == void_list_node))
16828 /* For a function parameter pack that occurs at the end of the
16829 parameter-declaration-list, the type A of each remaining
16830 argument of the call is compared with the type P of the
16831 declarator-id of the function parameter pack. */
16832 break;
16834 parms = TREE_CHAIN (parms);
16836 if (TREE_CODE (parm) == TYPE_PACK_EXPANSION)
16837 /* For a function parameter pack that does not occur at the
16838 end of the parameter-declaration-list, the type of the
16839 parameter pack is a non-deduced context. */
16840 continue;
16842 arg = args[ia];
16843 ++ia;
16845 if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
16846 flags, explain_p))
16847 return 1;
16850 if (parms
16851 && parms != void_list_node
16852 && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
16854 /* Unify the remaining arguments with the pack expansion type. */
16855 tree argvec;
16856 tree parmvec = make_tree_vec (1);
16858 /* Allocate a TREE_VEC and copy in all of the arguments */
16859 argvec = make_tree_vec (nargs - ia);
16860 for (i = 0; ia < nargs; ++ia, ++i)
16861 TREE_VEC_ELT (argvec, i) = args[ia];
16863 /* Copy the parameter into parmvec. */
16864 TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
16865 if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
16866 /*subr=*/subr, explain_p))
16867 return 1;
16869 /* Advance to the end of the list of parameters. */
16870 parms = TREE_CHAIN (parms);
16873 /* Fail if we've reached the end of the parm list, and more args
16874 are present, and the parm list isn't variadic. */
16875 if (ia < nargs && parms == void_list_node)
16876 return unify_too_many_arguments (explain_p, nargs, ia);
16877 /* Fail if parms are left and they don't have default values and
16878 they aren't all deduced as empty packs (c++/57397). This is
16879 consistent with sufficient_parms_p. */
16880 if (parms && parms != void_list_node
16881 && TREE_PURPOSE (parms) == NULL_TREE)
16883 unsigned int count = nargs;
16884 tree p = parms;
16885 bool type_pack_p;
16888 type_pack_p = TREE_CODE (TREE_VALUE (p)) == TYPE_PACK_EXPANSION;
16889 if (!type_pack_p)
16890 count++;
16891 p = TREE_CHAIN (p);
16893 while (p && p != void_list_node);
16894 if (count != nargs)
16895 return unify_too_few_arguments (explain_p, ia, count,
16896 type_pack_p);
16899 if (!subr)
16901 tsubst_flags_t complain = (explain_p
16902 ? tf_warning_or_error
16903 : tf_none);
16905 for (i = 0; i < ntparms; i++)
16907 tree targ = TREE_VEC_ELT (targs, i);
16908 tree tparm = TREE_VEC_ELT (tparms, i);
16910 /* Clear the "incomplete" flags on all argument packs now so that
16911 substituting them into later default arguments works. */
16912 if (targ && ARGUMENT_PACK_P (targ))
16914 ARGUMENT_PACK_INCOMPLETE_P (targ) = 0;
16915 ARGUMENT_PACK_EXPLICIT_ARGS (targ) = NULL_TREE;
16918 if (targ || tparm == error_mark_node)
16919 continue;
16920 tparm = TREE_VALUE (tparm);
16922 /* If this is an undeduced nontype parameter that depends on
16923 a type parameter, try another pass; its type may have been
16924 deduced from a later argument than the one from which
16925 this parameter can be deduced. */
16926 if (TREE_CODE (tparm) == PARM_DECL
16927 && uses_template_parms (TREE_TYPE (tparm))
16928 && !saw_undeduced++)
16929 goto again;
16931 /* Core issue #226 (C++0x) [temp.deduct]:
16933 If a template argument has not been deduced, its
16934 default template argument, if any, is used.
16936 When we are in C++98 mode, TREE_PURPOSE will either
16937 be NULL_TREE or ERROR_MARK_NODE, so we do not need
16938 to explicitly check cxx_dialect here. */
16939 if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
16941 tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
16942 tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i));
16943 reopen_deferring_access_checks (*checks);
16944 location_t save_loc = input_location;
16945 if (DECL_P (parm))
16946 input_location = DECL_SOURCE_LOCATION (parm);
16947 arg = tsubst_template_arg (arg, targs, complain, NULL_TREE);
16948 arg = convert_template_argument (parm, arg, targs, complain,
16949 i, NULL_TREE);
16950 input_location = save_loc;
16951 *checks = get_deferred_access_checks ();
16952 pop_deferring_access_checks ();
16953 if (arg == error_mark_node)
16954 return 1;
16955 else
16957 TREE_VEC_ELT (targs, i) = arg;
16958 /* The position of the first default template argument,
16959 is also the number of non-defaulted arguments in TARGS.
16960 Record that. */
16961 if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
16962 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
16963 continue;
16967 /* If the type parameter is a parameter pack, then it will
16968 be deduced to an empty parameter pack. */
16969 if (template_parameter_pack_p (tparm))
16971 tree arg;
16973 if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
16975 arg = make_node (NONTYPE_ARGUMENT_PACK);
16976 TREE_TYPE (arg) = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
16977 TREE_CONSTANT (arg) = 1;
16979 else
16980 arg = cxx_make_type (TYPE_ARGUMENT_PACK);
16982 SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
16984 TREE_VEC_ELT (targs, i) = arg;
16985 continue;
16988 return unify_parameter_deduction_failure (explain_p, tparm);
16991 #ifdef ENABLE_CHECKING
16992 if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
16993 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
16994 #endif
16996 return unify_success (explain_p);
16999 /* Subroutine of type_unification_real. Args are like the variables
17000 at the call site. ARG is an overloaded function (or template-id);
17001 we try deducing template args from each of the overloads, and if
17002 only one succeeds, we go with that. Modifies TARGS and returns
17003 true on success. */
17005 static bool
17006 resolve_overloaded_unification (tree tparms,
17007 tree targs,
17008 tree parm,
17009 tree arg,
17010 unification_kind_t strict,
17011 int sub_strict,
17012 bool explain_p)
17014 tree tempargs = copy_node (targs);
17015 int good = 0;
17016 tree goodfn = NULL_TREE;
17017 bool addr_p;
17019 if (TREE_CODE (arg) == ADDR_EXPR)
17021 arg = TREE_OPERAND (arg, 0);
17022 addr_p = true;
17024 else
17025 addr_p = false;
17027 if (TREE_CODE (arg) == COMPONENT_REF)
17028 /* Handle `&x' where `x' is some static or non-static member
17029 function name. */
17030 arg = TREE_OPERAND (arg, 1);
17032 if (TREE_CODE (arg) == OFFSET_REF)
17033 arg = TREE_OPERAND (arg, 1);
17035 /* Strip baselink information. */
17036 if (BASELINK_P (arg))
17037 arg = BASELINK_FUNCTIONS (arg);
17039 if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
17041 /* If we got some explicit template args, we need to plug them into
17042 the affected templates before we try to unify, in case the
17043 explicit args will completely resolve the templates in question. */
17045 int ok = 0;
17046 tree expl_subargs = TREE_OPERAND (arg, 1);
17047 arg = TREE_OPERAND (arg, 0);
17049 for (; arg; arg = OVL_NEXT (arg))
17051 tree fn = OVL_CURRENT (arg);
17052 tree subargs, elem;
17054 if (TREE_CODE (fn) != TEMPLATE_DECL)
17055 continue;
17057 subargs = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
17058 expl_subargs, NULL_TREE, tf_none,
17059 /*require_all_args=*/true,
17060 /*use_default_args=*/true);
17061 if (subargs != error_mark_node
17062 && !any_dependent_template_arguments_p (subargs))
17064 elem = TREE_TYPE (instantiate_template (fn, subargs, tf_none));
17065 if (try_one_overload (tparms, targs, tempargs, parm,
17066 elem, strict, sub_strict, addr_p, explain_p)
17067 && (!goodfn || !same_type_p (goodfn, elem)))
17069 goodfn = elem;
17070 ++good;
17073 else if (subargs)
17074 ++ok;
17076 /* If no templates (or more than one) are fully resolved by the
17077 explicit arguments, this template-id is a non-deduced context; it
17078 could still be OK if we deduce all template arguments for the
17079 enclosing call through other arguments. */
17080 if (good != 1)
17081 good = ok;
17083 else if (TREE_CODE (arg) != OVERLOAD
17084 && TREE_CODE (arg) != FUNCTION_DECL)
17085 /* If ARG is, for example, "(0, &f)" then its type will be unknown
17086 -- but the deduction does not succeed because the expression is
17087 not just the function on its own. */
17088 return false;
17089 else
17090 for (; arg; arg = OVL_NEXT (arg))
17091 if (try_one_overload (tparms, targs, tempargs, parm,
17092 TREE_TYPE (OVL_CURRENT (arg)),
17093 strict, sub_strict, addr_p, explain_p)
17094 && (!goodfn || !decls_match (goodfn, OVL_CURRENT (arg))))
17096 goodfn = OVL_CURRENT (arg);
17097 ++good;
17100 /* [temp.deduct.type] A template-argument can be deduced from a pointer
17101 to function or pointer to member function argument if the set of
17102 overloaded functions does not contain function templates and at most
17103 one of a set of overloaded functions provides a unique match.
17105 So if we found multiple possibilities, we return success but don't
17106 deduce anything. */
17108 if (good == 1)
17110 int i = TREE_VEC_LENGTH (targs);
17111 for (; i--; )
17112 if (TREE_VEC_ELT (tempargs, i))
17114 tree old = TREE_VEC_ELT (targs, i);
17115 tree new_ = TREE_VEC_ELT (tempargs, i);
17116 if (new_ && old && ARGUMENT_PACK_P (old)
17117 && ARGUMENT_PACK_EXPLICIT_ARGS (old))
17118 /* Don't forget explicit template arguments in a pack. */
17119 ARGUMENT_PACK_EXPLICIT_ARGS (new_)
17120 = ARGUMENT_PACK_EXPLICIT_ARGS (old);
17121 TREE_VEC_ELT (targs, i) = new_;
17124 if (good)
17125 return true;
17127 return false;
17130 /* Core DR 115: In contexts where deduction is done and fails, or in
17131 contexts where deduction is not done, if a template argument list is
17132 specified and it, along with any default template arguments, identifies
17133 a single function template specialization, then the template-id is an
17134 lvalue for the function template specialization. */
17136 tree
17137 resolve_nondeduced_context (tree orig_expr)
17139 tree expr, offset, baselink;
17140 bool addr;
17142 if (!type_unknown_p (orig_expr))
17143 return orig_expr;
17145 expr = orig_expr;
17146 addr = false;
17147 offset = NULL_TREE;
17148 baselink = NULL_TREE;
17150 if (TREE_CODE (expr) == ADDR_EXPR)
17152 expr = TREE_OPERAND (expr, 0);
17153 addr = true;
17155 if (TREE_CODE (expr) == OFFSET_REF)
17157 offset = expr;
17158 expr = TREE_OPERAND (expr, 1);
17160 if (BASELINK_P (expr))
17162 baselink = expr;
17163 expr = BASELINK_FUNCTIONS (expr);
17166 if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
17168 int good = 0;
17169 tree goodfn = NULL_TREE;
17171 /* If we got some explicit template args, we need to plug them into
17172 the affected templates before we try to unify, in case the
17173 explicit args will completely resolve the templates in question. */
17175 tree expl_subargs = TREE_OPERAND (expr, 1);
17176 tree arg = TREE_OPERAND (expr, 0);
17177 tree badfn = NULL_TREE;
17178 tree badargs = NULL_TREE;
17180 for (; arg; arg = OVL_NEXT (arg))
17182 tree fn = OVL_CURRENT (arg);
17183 tree subargs, elem;
17185 if (TREE_CODE (fn) != TEMPLATE_DECL)
17186 continue;
17188 subargs = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
17189 expl_subargs, NULL_TREE, tf_none,
17190 /*require_all_args=*/true,
17191 /*use_default_args=*/true);
17192 if (subargs != error_mark_node
17193 && !any_dependent_template_arguments_p (subargs))
17195 elem = instantiate_template (fn, subargs, tf_none);
17196 if (elem == error_mark_node)
17198 badfn = fn;
17199 badargs = subargs;
17201 else if (elem && (!goodfn || !decls_match (goodfn, elem)))
17203 goodfn = elem;
17204 ++good;
17208 if (good == 1)
17210 mark_used (goodfn);
17211 expr = goodfn;
17212 if (baselink)
17213 expr = build_baselink (BASELINK_BINFO (baselink),
17214 BASELINK_ACCESS_BINFO (baselink),
17215 expr, BASELINK_OPTYPE (baselink));
17216 if (offset)
17218 tree base
17219 = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (offset, 0)));
17220 expr = build_offset_ref (base, expr, addr, tf_warning_or_error);
17222 if (addr)
17223 expr = cp_build_addr_expr (expr, tf_warning_or_error);
17224 return expr;
17226 else if (good == 0 && badargs)
17227 /* There were no good options and at least one bad one, so let the
17228 user know what the problem is. */
17229 instantiate_template (badfn, badargs, tf_warning_or_error);
17231 return orig_expr;
17234 /* Subroutine of resolve_overloaded_unification; does deduction for a single
17235 overload. Fills TARGS with any deduced arguments, or error_mark_node if
17236 different overloads deduce different arguments for a given parm.
17237 ADDR_P is true if the expression for which deduction is being
17238 performed was of the form "& fn" rather than simply "fn".
17240 Returns 1 on success. */
17242 static int
17243 try_one_overload (tree tparms,
17244 tree orig_targs,
17245 tree targs,
17246 tree parm,
17247 tree arg,
17248 unification_kind_t strict,
17249 int sub_strict,
17250 bool addr_p,
17251 bool explain_p)
17253 int nargs;
17254 tree tempargs;
17255 int i;
17257 if (arg == error_mark_node)
17258 return 0;
17260 /* [temp.deduct.type] A template-argument can be deduced from a pointer
17261 to function or pointer to member function argument if the set of
17262 overloaded functions does not contain function templates and at most
17263 one of a set of overloaded functions provides a unique match.
17265 So if this is a template, just return success. */
17267 if (uses_template_parms (arg))
17268 return 1;
17270 if (TREE_CODE (arg) == METHOD_TYPE)
17271 arg = build_ptrmemfunc_type (build_pointer_type (arg));
17272 else if (addr_p)
17273 arg = build_pointer_type (arg);
17275 sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
17277 /* We don't copy orig_targs for this because if we have already deduced
17278 some template args from previous args, unify would complain when we
17279 try to deduce a template parameter for the same argument, even though
17280 there isn't really a conflict. */
17281 nargs = TREE_VEC_LENGTH (targs);
17282 tempargs = make_tree_vec (nargs);
17284 if (unify (tparms, tempargs, parm, arg, sub_strict, explain_p))
17285 return 0;
17287 /* First make sure we didn't deduce anything that conflicts with
17288 explicitly specified args. */
17289 for (i = nargs; i--; )
17291 tree elt = TREE_VEC_ELT (tempargs, i);
17292 tree oldelt = TREE_VEC_ELT (orig_targs, i);
17294 if (!elt)
17295 /*NOP*/;
17296 else if (uses_template_parms (elt))
17297 /* Since we're unifying against ourselves, we will fill in
17298 template args used in the function parm list with our own
17299 template parms. Discard them. */
17300 TREE_VEC_ELT (tempargs, i) = NULL_TREE;
17301 else if (oldelt && !template_args_equal (oldelt, elt))
17302 return 0;
17305 for (i = nargs; i--; )
17307 tree elt = TREE_VEC_ELT (tempargs, i);
17309 if (elt)
17310 TREE_VEC_ELT (targs, i) = elt;
17313 return 1;
17316 /* PARM is a template class (perhaps with unbound template
17317 parameters). ARG is a fully instantiated type. If ARG can be
17318 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
17319 TARGS are as for unify. */
17321 static tree
17322 try_class_unification (tree tparms, tree targs, tree parm, tree arg,
17323 bool explain_p)
17325 tree copy_of_targs;
17327 if (!CLASSTYPE_TEMPLATE_INFO (arg)
17328 || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
17329 != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
17330 return NULL_TREE;
17332 /* We need to make a new template argument vector for the call to
17333 unify. If we used TARGS, we'd clutter it up with the result of
17334 the attempted unification, even if this class didn't work out.
17335 We also don't want to commit ourselves to all the unifications
17336 we've already done, since unification is supposed to be done on
17337 an argument-by-argument basis. In other words, consider the
17338 following pathological case:
17340 template <int I, int J, int K>
17341 struct S {};
17343 template <int I, int J>
17344 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
17346 template <int I, int J, int K>
17347 void f(S<I, J, K>, S<I, I, I>);
17349 void g() {
17350 S<0, 0, 0> s0;
17351 S<0, 1, 2> s2;
17353 f(s0, s2);
17356 Now, by the time we consider the unification involving `s2', we
17357 already know that we must have `f<0, 0, 0>'. But, even though
17358 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
17359 because there are two ways to unify base classes of S<0, 1, 2>
17360 with S<I, I, I>. If we kept the already deduced knowledge, we
17361 would reject the possibility I=1. */
17362 copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
17364 /* If unification failed, we're done. */
17365 if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
17366 CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE, explain_p))
17367 return NULL_TREE;
17369 return arg;
17372 /* Given a template type PARM and a class type ARG, find the unique
17373 base type in ARG that is an instance of PARM. We do not examine
17374 ARG itself; only its base-classes. If there is not exactly one
17375 appropriate base class, return NULL_TREE. PARM may be the type of
17376 a partial specialization, as well as a plain template type. Used
17377 by unify. */
17379 static enum template_base_result
17380 get_template_base (tree tparms, tree targs, tree parm, tree arg,
17381 bool explain_p, tree *result)
17383 tree rval = NULL_TREE;
17384 tree binfo;
17386 gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
17388 binfo = TYPE_BINFO (complete_type (arg));
17389 if (!binfo)
17391 /* The type could not be completed. */
17392 *result = NULL_TREE;
17393 return tbr_incomplete_type;
17396 /* Walk in inheritance graph order. The search order is not
17397 important, and this avoids multiple walks of virtual bases. */
17398 for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
17400 tree r = try_class_unification (tparms, targs, parm,
17401 BINFO_TYPE (binfo), explain_p);
17403 if (r)
17405 /* If there is more than one satisfactory baseclass, then:
17407 [temp.deduct.call]
17409 If they yield more than one possible deduced A, the type
17410 deduction fails.
17412 applies. */
17413 if (rval && !same_type_p (r, rval))
17415 *result = NULL_TREE;
17416 return tbr_ambiguous_baseclass;
17419 rval = r;
17423 *result = rval;
17424 return tbr_success;
17427 /* Returns the level of DECL, which declares a template parameter. */
17429 static int
17430 template_decl_level (tree decl)
17432 switch (TREE_CODE (decl))
17434 case TYPE_DECL:
17435 case TEMPLATE_DECL:
17436 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
17438 case PARM_DECL:
17439 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
17441 default:
17442 gcc_unreachable ();
17444 return 0;
17447 /* Decide whether ARG can be unified with PARM, considering only the
17448 cv-qualifiers of each type, given STRICT as documented for unify.
17449 Returns nonzero iff the unification is OK on that basis. */
17451 static int
17452 check_cv_quals_for_unify (int strict, tree arg, tree parm)
17454 int arg_quals = cp_type_quals (arg);
17455 int parm_quals = cp_type_quals (parm);
17457 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
17458 && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
17460 /* Although a CVR qualifier is ignored when being applied to a
17461 substituted template parameter ([8.3.2]/1 for example), that
17462 does not allow us to unify "const T" with "int&" because both
17463 types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
17464 It is ok when we're allowing additional CV qualifiers
17465 at the outer level [14.8.2.1]/3,1st bullet. */
17466 if ((TREE_CODE (arg) == REFERENCE_TYPE
17467 || TREE_CODE (arg) == FUNCTION_TYPE
17468 || TREE_CODE (arg) == METHOD_TYPE)
17469 && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
17470 return 0;
17472 if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
17473 && (parm_quals & TYPE_QUAL_RESTRICT))
17474 return 0;
17477 if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
17478 && (arg_quals & parm_quals) != parm_quals)
17479 return 0;
17481 if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
17482 && (parm_quals & arg_quals) != arg_quals)
17483 return 0;
17485 return 1;
17488 /* Determines the LEVEL and INDEX for the template parameter PARM. */
17489 void
17490 template_parm_level_and_index (tree parm, int* level, int* index)
17492 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
17493 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
17494 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
17496 *index = TEMPLATE_TYPE_IDX (parm);
17497 *level = TEMPLATE_TYPE_LEVEL (parm);
17499 else
17501 *index = TEMPLATE_PARM_IDX (parm);
17502 *level = TEMPLATE_PARM_LEVEL (parm);
17506 #define RECUR_AND_CHECK_FAILURE(TP, TA, P, A, S, EP) \
17507 do { \
17508 if (unify (TP, TA, P, A, S, EP)) \
17509 return 1; \
17510 } while (0);
17512 /* Unifies the remaining arguments in PACKED_ARGS with the pack
17513 expansion at the end of PACKED_PARMS. Returns 0 if the type
17514 deduction succeeds, 1 otherwise. STRICT is the same as in
17515 unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
17516 call argument list. We'll need to adjust the arguments to make them
17517 types. SUBR tells us if this is from a recursive call to
17518 type_unification_real, or for comparing two template argument
17519 lists. */
17521 static int
17522 unify_pack_expansion (tree tparms, tree targs, tree packed_parms,
17523 tree packed_args, unification_kind_t strict,
17524 bool subr, bool explain_p)
17526 tree parm
17527 = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
17528 tree pattern = PACK_EXPANSION_PATTERN (parm);
17529 tree pack, packs = NULL_TREE;
17530 int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
17532 packed_args = expand_template_argument_pack (packed_args);
17534 int len = TREE_VEC_LENGTH (packed_args);
17536 /* Determine the parameter packs we will be deducing from the
17537 pattern, and record their current deductions. */
17538 for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm);
17539 pack; pack = TREE_CHAIN (pack))
17541 tree parm_pack = TREE_VALUE (pack);
17542 int idx, level;
17544 /* Determine the index and level of this parameter pack. */
17545 template_parm_level_and_index (parm_pack, &level, &idx);
17547 /* Keep track of the parameter packs and their corresponding
17548 argument packs. */
17549 packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
17550 TREE_TYPE (packs) = make_tree_vec (len - start);
17553 /* Loop through all of the arguments that have not yet been
17554 unified and unify each with the pattern. */
17555 for (i = start; i < len; i++)
17557 tree parm;
17558 bool any_explicit = false;
17559 tree arg = TREE_VEC_ELT (packed_args, i);
17561 /* For each parameter pack, set its TMPL_ARG to either NULL_TREE
17562 or the element of its argument pack at the current index if
17563 this argument was explicitly specified. */
17564 for (pack = packs; pack; pack = TREE_CHAIN (pack))
17566 int idx, level;
17567 tree arg, pargs;
17568 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
17570 arg = NULL_TREE;
17571 if (TREE_VALUE (pack)
17572 && (pargs = ARGUMENT_PACK_EXPLICIT_ARGS (TREE_VALUE (pack)))
17573 && (i - start < TREE_VEC_LENGTH (pargs)))
17575 any_explicit = true;
17576 arg = TREE_VEC_ELT (pargs, i - start);
17578 TMPL_ARG (targs, level, idx) = arg;
17581 /* If we had explicit template arguments, substitute them into the
17582 pattern before deduction. */
17583 if (any_explicit)
17585 /* Some arguments might still be unspecified or dependent. */
17586 bool dependent;
17587 ++processing_template_decl;
17588 dependent = any_dependent_template_arguments_p (targs);
17589 if (!dependent)
17590 --processing_template_decl;
17591 parm = tsubst (pattern, targs,
17592 explain_p ? tf_warning_or_error : tf_none,
17593 NULL_TREE);
17594 if (dependent)
17595 --processing_template_decl;
17596 if (parm == error_mark_node)
17597 return 1;
17599 else
17600 parm = pattern;
17602 /* Unify the pattern with the current argument. */
17603 if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
17604 LOOKUP_IMPLICIT, explain_p))
17605 return 1;
17607 /* For each parameter pack, collect the deduced value. */
17608 for (pack = packs; pack; pack = TREE_CHAIN (pack))
17610 int idx, level;
17611 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
17613 TREE_VEC_ELT (TREE_TYPE (pack), i - start) =
17614 TMPL_ARG (targs, level, idx);
17618 /* Verify that the results of unification with the parameter packs
17619 produce results consistent with what we've seen before, and make
17620 the deduced argument packs available. */
17621 for (pack = packs; pack; pack = TREE_CHAIN (pack))
17623 tree old_pack = TREE_VALUE (pack);
17624 tree new_args = TREE_TYPE (pack);
17625 int i, len = TREE_VEC_LENGTH (new_args);
17626 int idx, level;
17627 bool nondeduced_p = false;
17629 /* By default keep the original deduced argument pack.
17630 If necessary, more specific code is going to update the
17631 resulting deduced argument later down in this function. */
17632 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
17633 TMPL_ARG (targs, level, idx) = old_pack;
17635 /* If NEW_ARGS contains any NULL_TREE entries, we didn't
17636 actually deduce anything. */
17637 for (i = 0; i < len && !nondeduced_p; ++i)
17638 if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
17639 nondeduced_p = true;
17640 if (nondeduced_p)
17641 continue;
17643 if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
17645 /* If we had fewer function args than explicit template args,
17646 just use the explicits. */
17647 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
17648 int explicit_len = TREE_VEC_LENGTH (explicit_args);
17649 if (len < explicit_len)
17650 new_args = explicit_args;
17653 if (!old_pack)
17655 tree result;
17656 /* Build the deduced *_ARGUMENT_PACK. */
17657 if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
17659 result = make_node (NONTYPE_ARGUMENT_PACK);
17660 TREE_TYPE (result) =
17661 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
17662 TREE_CONSTANT (result) = 1;
17664 else
17665 result = cxx_make_type (TYPE_ARGUMENT_PACK);
17667 SET_ARGUMENT_PACK_ARGS (result, new_args);
17669 /* Note the deduced argument packs for this parameter
17670 pack. */
17671 TMPL_ARG (targs, level, idx) = result;
17673 else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
17674 && (ARGUMENT_PACK_ARGS (old_pack)
17675 == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
17677 /* We only had the explicitly-provided arguments before, but
17678 now we have a complete set of arguments. */
17679 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
17681 SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
17682 ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
17683 ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
17685 else
17687 tree bad_old_arg = NULL_TREE, bad_new_arg = NULL_TREE;
17688 tree old_args = ARGUMENT_PACK_ARGS (old_pack);
17690 if (!comp_template_args_with_info (old_args, new_args,
17691 &bad_old_arg, &bad_new_arg))
17692 /* Inconsistent unification of this parameter pack. */
17693 return unify_parameter_pack_inconsistent (explain_p,
17694 bad_old_arg,
17695 bad_new_arg);
17699 return unify_success (explain_p);
17702 /* Handle unification of the domain of an array. PARM_DOM and ARG_DOM are
17703 INTEGER_TYPEs representing the TYPE_DOMAIN of ARRAY_TYPEs. The other
17704 parameters and return value are as for unify. */
17706 static int
17707 unify_array_domain (tree tparms, tree targs,
17708 tree parm_dom, tree arg_dom,
17709 bool explain_p)
17711 tree parm_max;
17712 tree arg_max;
17713 bool parm_cst;
17714 bool arg_cst;
17716 /* Our representation of array types uses "N - 1" as the
17717 TYPE_MAX_VALUE for an array with "N" elements, if "N" is
17718 not an integer constant. We cannot unify arbitrarily
17719 complex expressions, so we eliminate the MINUS_EXPRs
17720 here. */
17721 parm_max = TYPE_MAX_VALUE (parm_dom);
17722 parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
17723 if (!parm_cst)
17725 gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
17726 parm_max = TREE_OPERAND (parm_max, 0);
17728 arg_max = TYPE_MAX_VALUE (arg_dom);
17729 arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
17730 if (!arg_cst)
17732 /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
17733 trying to unify the type of a variable with the type
17734 of a template parameter. For example:
17736 template <unsigned int N>
17737 void f (char (&) [N]);
17738 int g();
17739 void h(int i) {
17740 char a[g(i)];
17741 f(a);
17744 Here, the type of the ARG will be "int [g(i)]", and
17745 may be a SAVE_EXPR, etc. */
17746 if (TREE_CODE (arg_max) != MINUS_EXPR)
17747 return unify_vla_arg (explain_p, arg_dom);
17748 arg_max = TREE_OPERAND (arg_max, 0);
17751 /* If only one of the bounds used a MINUS_EXPR, compensate
17752 by adding one to the other bound. */
17753 if (parm_cst && !arg_cst)
17754 parm_max = fold_build2_loc (input_location, PLUS_EXPR,
17755 integer_type_node,
17756 parm_max,
17757 integer_one_node);
17758 else if (arg_cst && !parm_cst)
17759 arg_max = fold_build2_loc (input_location, PLUS_EXPR,
17760 integer_type_node,
17761 arg_max,
17762 integer_one_node);
17764 return unify (tparms, targs, parm_max, arg_max,
17765 UNIFY_ALLOW_INTEGER, explain_p);
17768 /* Deduce the value of template parameters. TPARMS is the (innermost)
17769 set of template parameters to a template. TARGS is the bindings
17770 for those template parameters, as determined thus far; TARGS may
17771 include template arguments for outer levels of template parameters
17772 as well. PARM is a parameter to a template function, or a
17773 subcomponent of that parameter; ARG is the corresponding argument.
17774 This function attempts to match PARM with ARG in a manner
17775 consistent with the existing assignments in TARGS. If more values
17776 are deduced, then TARGS is updated.
17778 Returns 0 if the type deduction succeeds, 1 otherwise. The
17779 parameter STRICT is a bitwise or of the following flags:
17781 UNIFY_ALLOW_NONE:
17782 Require an exact match between PARM and ARG.
17783 UNIFY_ALLOW_MORE_CV_QUAL:
17784 Allow the deduced ARG to be more cv-qualified (by qualification
17785 conversion) than ARG.
17786 UNIFY_ALLOW_LESS_CV_QUAL:
17787 Allow the deduced ARG to be less cv-qualified than ARG.
17788 UNIFY_ALLOW_DERIVED:
17789 Allow the deduced ARG to be a template base class of ARG,
17790 or a pointer to a template base class of the type pointed to by
17791 ARG.
17792 UNIFY_ALLOW_INTEGER:
17793 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
17794 case for more information.
17795 UNIFY_ALLOW_OUTER_LEVEL:
17796 This is the outermost level of a deduction. Used to determine validity
17797 of qualification conversions. A valid qualification conversion must
17798 have const qualified pointers leading up to the inner type which
17799 requires additional CV quals, except at the outer level, where const
17800 is not required [conv.qual]. It would be normal to set this flag in
17801 addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
17802 UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
17803 This is the outermost level of a deduction, and PARM can be more CV
17804 qualified at this point.
17805 UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
17806 This is the outermost level of a deduction, and PARM can be less CV
17807 qualified at this point. */
17809 static int
17810 unify (tree tparms, tree targs, tree parm, tree arg, int strict,
17811 bool explain_p)
17813 int idx;
17814 tree targ;
17815 tree tparm;
17816 int strict_in = strict;
17818 /* I don't think this will do the right thing with respect to types.
17819 But the only case I've seen it in so far has been array bounds, where
17820 signedness is the only information lost, and I think that will be
17821 okay. */
17822 while (TREE_CODE (parm) == NOP_EXPR)
17823 parm = TREE_OPERAND (parm, 0);
17825 if (arg == error_mark_node)
17826 return unify_invalid (explain_p);
17827 if (arg == unknown_type_node
17828 || arg == init_list_type_node)
17829 /* We can't deduce anything from this, but we might get all the
17830 template args from other function args. */
17831 return unify_success (explain_p);
17833 /* If PARM uses template parameters, then we can't bail out here,
17834 even if ARG == PARM, since we won't record unifications for the
17835 template parameters. We might need them if we're trying to
17836 figure out which of two things is more specialized. */
17837 if (arg == parm && !uses_template_parms (parm))
17838 return unify_success (explain_p);
17840 /* Handle init lists early, so the rest of the function can assume
17841 we're dealing with a type. */
17842 if (BRACE_ENCLOSED_INITIALIZER_P (arg))
17844 tree elt, elttype;
17845 unsigned i;
17846 tree orig_parm = parm;
17848 /* Replace T with std::initializer_list<T> for deduction. */
17849 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
17850 && flag_deduce_init_list)
17851 parm = listify (parm);
17853 if (!is_std_init_list (parm)
17854 && TREE_CODE (parm) != ARRAY_TYPE)
17855 /* We can only deduce from an initializer list argument if the
17856 parameter is std::initializer_list or an array; otherwise this
17857 is a non-deduced context. */
17858 return unify_success (explain_p);
17860 if (TREE_CODE (parm) == ARRAY_TYPE)
17861 elttype = TREE_TYPE (parm);
17862 else
17864 elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
17865 /* Deduction is defined in terms of a single type, so just punt
17866 on the (bizarre) std::initializer_list<T...>. */
17867 if (PACK_EXPANSION_P (elttype))
17868 return unify_success (explain_p);
17871 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
17873 int elt_strict = strict;
17875 if (elt == error_mark_node)
17876 return unify_invalid (explain_p);
17878 if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
17880 tree type = TREE_TYPE (elt);
17881 if (type == error_mark_node)
17882 return unify_invalid (explain_p);
17883 /* It should only be possible to get here for a call. */
17884 gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
17885 elt_strict |= maybe_adjust_types_for_deduction
17886 (DEDUCE_CALL, &elttype, &type, elt);
17887 elt = type;
17890 RECUR_AND_CHECK_FAILURE (tparms, targs, elttype, elt, elt_strict,
17891 explain_p);
17894 if (TREE_CODE (parm) == ARRAY_TYPE
17895 && deducible_array_bound (TYPE_DOMAIN (parm)))
17897 /* Also deduce from the length of the initializer list. */
17898 tree max = size_int (CONSTRUCTOR_NELTS (arg));
17899 tree idx = compute_array_index_type (NULL_TREE, max, tf_none);
17900 if (idx == error_mark_node)
17901 return unify_invalid (explain_p);
17902 return unify_array_domain (tparms, targs, TYPE_DOMAIN (parm),
17903 idx, explain_p);
17906 /* If the std::initializer_list<T> deduction worked, replace the
17907 deduced A with std::initializer_list<A>. */
17908 if (orig_parm != parm)
17910 idx = TEMPLATE_TYPE_IDX (orig_parm);
17911 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
17912 targ = listify (targ);
17913 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
17915 return unify_success (explain_p);
17918 /* Immediately reject some pairs that won't unify because of
17919 cv-qualification mismatches. */
17920 if (TREE_CODE (arg) == TREE_CODE (parm)
17921 && TYPE_P (arg)
17922 /* It is the elements of the array which hold the cv quals of an array
17923 type, and the elements might be template type parms. We'll check
17924 when we recurse. */
17925 && TREE_CODE (arg) != ARRAY_TYPE
17926 /* We check the cv-qualifiers when unifying with template type
17927 parameters below. We want to allow ARG `const T' to unify with
17928 PARM `T' for example, when computing which of two templates
17929 is more specialized, for example. */
17930 && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
17931 && !check_cv_quals_for_unify (strict_in, arg, parm))
17932 return unify_cv_qual_mismatch (explain_p, parm, arg);
17934 if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
17935 && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
17936 strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
17937 strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
17938 strict &= ~UNIFY_ALLOW_DERIVED;
17939 strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
17940 strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
17942 switch (TREE_CODE (parm))
17944 case TYPENAME_TYPE:
17945 case SCOPE_REF:
17946 case UNBOUND_CLASS_TEMPLATE:
17947 /* In a type which contains a nested-name-specifier, template
17948 argument values cannot be deduced for template parameters used
17949 within the nested-name-specifier. */
17950 return unify_success (explain_p);
17952 case TEMPLATE_TYPE_PARM:
17953 case TEMPLATE_TEMPLATE_PARM:
17954 case BOUND_TEMPLATE_TEMPLATE_PARM:
17955 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
17956 if (error_operand_p (tparm))
17957 return unify_invalid (explain_p);
17959 if (TEMPLATE_TYPE_LEVEL (parm)
17960 != template_decl_level (tparm))
17961 /* The PARM is not one we're trying to unify. Just check
17962 to see if it matches ARG. */
17964 if (TREE_CODE (arg) == TREE_CODE (parm)
17965 && (is_auto (parm) ? is_auto (arg)
17966 : same_type_p (parm, arg)))
17967 return unify_success (explain_p);
17968 else
17969 return unify_type_mismatch (explain_p, parm, arg);
17971 idx = TEMPLATE_TYPE_IDX (parm);
17972 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
17973 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
17974 if (error_operand_p (tparm))
17975 return unify_invalid (explain_p);
17977 /* Check for mixed types and values. */
17978 if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
17979 && TREE_CODE (tparm) != TYPE_DECL)
17980 || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
17981 && TREE_CODE (tparm) != TEMPLATE_DECL))
17982 gcc_unreachable ();
17984 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
17986 /* ARG must be constructed from a template class or a template
17987 template parameter. */
17988 if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
17989 && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
17990 return unify_template_deduction_failure (explain_p, parm, arg);
17992 tree parmvec = TYPE_TI_ARGS (parm);
17993 /* An alias template name is never deduced. */
17994 if (TYPE_ALIAS_P (arg))
17995 arg = strip_typedefs (arg);
17996 tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
17997 tree full_argvec = add_to_template_args (targs, argvec);
17998 tree parm_parms
17999 = DECL_INNERMOST_TEMPLATE_PARMS
18000 (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
18001 int i, len;
18002 int parm_variadic_p = 0;
18004 /* The resolution to DR150 makes clear that default
18005 arguments for an N-argument may not be used to bind T
18006 to a template template parameter with fewer than N
18007 parameters. It is not safe to permit the binding of
18008 default arguments as an extension, as that may change
18009 the meaning of a conforming program. Consider:
18011 struct Dense { static const unsigned int dim = 1; };
18013 template <template <typename> class View,
18014 typename Block>
18015 void operator+(float, View<Block> const&);
18017 template <typename Block,
18018 unsigned int Dim = Block::dim>
18019 struct Lvalue_proxy { operator float() const; };
18021 void
18022 test_1d (void) {
18023 Lvalue_proxy<Dense> p;
18024 float b;
18025 b + p;
18028 Here, if Lvalue_proxy is permitted to bind to View, then
18029 the global operator+ will be used; if they are not, the
18030 Lvalue_proxy will be converted to float. */
18031 if (coerce_template_parms (parm_parms,
18032 full_argvec,
18033 TYPE_TI_TEMPLATE (parm),
18034 (explain_p
18035 ? tf_warning_or_error
18036 : tf_none),
18037 /*require_all_args=*/true,
18038 /*use_default_args=*/false)
18039 == error_mark_node)
18040 return 1;
18042 /* Deduce arguments T, i from TT<T> or TT<i>.
18043 We check each element of PARMVEC and ARGVEC individually
18044 rather than the whole TREE_VEC since they can have
18045 different number of elements. */
18047 parmvec = expand_template_argument_pack (parmvec);
18048 argvec = expand_template_argument_pack (argvec);
18050 len = TREE_VEC_LENGTH (parmvec);
18052 /* Check if the parameters end in a pack, making them
18053 variadic. */
18054 if (len > 0
18055 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
18056 parm_variadic_p = 1;
18058 for (i = 0; i < len - parm_variadic_p; ++i)
18059 /* If the template argument list of P contains a pack
18060 expansion that is not the last template argument, the
18061 entire template argument list is a non-deduced
18062 context. */
18063 if (PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, i)))
18064 return unify_success (explain_p);
18066 if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
18067 return unify_too_few_arguments (explain_p,
18068 TREE_VEC_LENGTH (argvec), len);
18070 for (i = 0; i < len - parm_variadic_p; ++i)
18072 RECUR_AND_CHECK_FAILURE (tparms, targs,
18073 TREE_VEC_ELT (parmvec, i),
18074 TREE_VEC_ELT (argvec, i),
18075 UNIFY_ALLOW_NONE, explain_p);
18078 if (parm_variadic_p
18079 && unify_pack_expansion (tparms, targs,
18080 parmvec, argvec,
18081 DEDUCE_EXACT,
18082 /*subr=*/true, explain_p))
18083 return 1;
18085 arg = TYPE_TI_TEMPLATE (arg);
18087 /* Fall through to deduce template name. */
18090 if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
18091 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
18093 /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>. */
18095 /* Simple cases: Value already set, does match or doesn't. */
18096 if (targ != NULL_TREE && template_args_equal (targ, arg))
18097 return unify_success (explain_p);
18098 else if (targ)
18099 return unify_inconsistency (explain_p, parm, targ, arg);
18101 else
18103 /* If PARM is `const T' and ARG is only `int', we don't have
18104 a match unless we are allowing additional qualification.
18105 If ARG is `const int' and PARM is just `T' that's OK;
18106 that binds `const int' to `T'. */
18107 if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
18108 arg, parm))
18109 return unify_cv_qual_mismatch (explain_p, parm, arg);
18111 /* Consider the case where ARG is `const volatile int' and
18112 PARM is `const T'. Then, T should be `volatile int'. */
18113 arg = cp_build_qualified_type_real
18114 (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
18115 if (arg == error_mark_node)
18116 return unify_invalid (explain_p);
18118 /* Simple cases: Value already set, does match or doesn't. */
18119 if (targ != NULL_TREE && same_type_p (targ, arg))
18120 return unify_success (explain_p);
18121 else if (targ)
18122 return unify_inconsistency (explain_p, parm, targ, arg);
18124 /* Make sure that ARG is not a variable-sized array. (Note
18125 that were talking about variable-sized arrays (like
18126 `int[n]'), rather than arrays of unknown size (like
18127 `int[]').) We'll get very confused by such a type since
18128 the bound of the array is not constant, and therefore
18129 not mangleable. Besides, such types are not allowed in
18130 ISO C++, so we can do as we please here. We do allow
18131 them for 'auto' deduction, since that isn't ABI-exposed. */
18132 if (!is_auto (parm) && variably_modified_type_p (arg, NULL_TREE))
18133 return unify_vla_arg (explain_p, arg);
18135 /* Strip typedefs as in convert_template_argument. */
18136 arg = canonicalize_type_argument (arg, tf_none);
18139 /* If ARG is a parameter pack or an expansion, we cannot unify
18140 against it unless PARM is also a parameter pack. */
18141 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
18142 && !template_parameter_pack_p (parm))
18143 return unify_parameter_pack_mismatch (explain_p, parm, arg);
18145 /* If the argument deduction results is a METHOD_TYPE,
18146 then there is a problem.
18147 METHOD_TYPE doesn't map to any real C++ type the result of
18148 the deduction can not be of that type. */
18149 if (TREE_CODE (arg) == METHOD_TYPE)
18150 return unify_method_type_error (explain_p, arg);
18152 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
18153 return unify_success (explain_p);
18155 case TEMPLATE_PARM_INDEX:
18156 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
18157 if (error_operand_p (tparm))
18158 return unify_invalid (explain_p);
18160 if (TEMPLATE_PARM_LEVEL (parm)
18161 != template_decl_level (tparm))
18163 /* The PARM is not one we're trying to unify. Just check
18164 to see if it matches ARG. */
18165 int result = !(TREE_CODE (arg) == TREE_CODE (parm)
18166 && cp_tree_equal (parm, arg));
18167 if (result)
18168 unify_expression_unequal (explain_p, parm, arg);
18169 return result;
18172 idx = TEMPLATE_PARM_IDX (parm);
18173 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
18175 if (targ)
18177 int x = !cp_tree_equal (targ, arg);
18178 if (x)
18179 unify_inconsistency (explain_p, parm, targ, arg);
18180 return x;
18183 /* [temp.deduct.type] If, in the declaration of a function template
18184 with a non-type template-parameter, the non-type
18185 template-parameter is used in an expression in the function
18186 parameter-list and, if the corresponding template-argument is
18187 deduced, the template-argument type shall match the type of the
18188 template-parameter exactly, except that a template-argument
18189 deduced from an array bound may be of any integral type.
18190 The non-type parameter might use already deduced type parameters. */
18191 tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
18192 if (!TREE_TYPE (arg))
18193 /* Template-parameter dependent expression. Just accept it for now.
18194 It will later be processed in convert_template_argument. */
18196 else if (same_type_p (TREE_TYPE (arg), tparm))
18197 /* OK */;
18198 else if ((strict & UNIFY_ALLOW_INTEGER)
18199 && CP_INTEGRAL_TYPE_P (tparm))
18200 /* Convert the ARG to the type of PARM; the deduced non-type
18201 template argument must exactly match the types of the
18202 corresponding parameter. */
18203 arg = fold (build_nop (tparm, arg));
18204 else if (uses_template_parms (tparm))
18205 /* We haven't deduced the type of this parameter yet. Try again
18206 later. */
18207 return unify_success (explain_p);
18208 else
18209 return unify_type_mismatch (explain_p, tparm, TREE_TYPE (arg));
18211 /* If ARG is a parameter pack or an expansion, we cannot unify
18212 against it unless PARM is also a parameter pack. */
18213 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
18214 && !TEMPLATE_PARM_PARAMETER_PACK (parm))
18215 return unify_parameter_pack_mismatch (explain_p, parm, arg);
18218 bool removed_attr = false;
18219 arg = strip_typedefs_expr (arg, &removed_attr);
18221 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
18222 return unify_success (explain_p);
18224 case PTRMEM_CST:
18226 /* A pointer-to-member constant can be unified only with
18227 another constant. */
18228 if (TREE_CODE (arg) != PTRMEM_CST)
18229 return unify_ptrmem_cst_mismatch (explain_p, parm, arg);
18231 /* Just unify the class member. It would be useless (and possibly
18232 wrong, depending on the strict flags) to unify also
18233 PTRMEM_CST_CLASS, because we want to be sure that both parm and
18234 arg refer to the same variable, even if through different
18235 classes. For instance:
18237 struct A { int x; };
18238 struct B : A { };
18240 Unification of &A::x and &B::x must succeed. */
18241 return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
18242 PTRMEM_CST_MEMBER (arg), strict, explain_p);
18245 case POINTER_TYPE:
18247 if (!TYPE_PTR_P (arg))
18248 return unify_type_mismatch (explain_p, parm, arg);
18250 /* [temp.deduct.call]
18252 A can be another pointer or pointer to member type that can
18253 be converted to the deduced A via a qualification
18254 conversion (_conv.qual_).
18256 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
18257 This will allow for additional cv-qualification of the
18258 pointed-to types if appropriate. */
18260 if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
18261 /* The derived-to-base conversion only persists through one
18262 level of pointers. */
18263 strict |= (strict_in & UNIFY_ALLOW_DERIVED);
18265 return unify (tparms, targs, TREE_TYPE (parm),
18266 TREE_TYPE (arg), strict, explain_p);
18269 case REFERENCE_TYPE:
18270 if (TREE_CODE (arg) != REFERENCE_TYPE)
18271 return unify_type_mismatch (explain_p, parm, arg);
18272 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
18273 strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
18275 case ARRAY_TYPE:
18276 if (TREE_CODE (arg) != ARRAY_TYPE)
18277 return unify_type_mismatch (explain_p, parm, arg);
18278 if ((TYPE_DOMAIN (parm) == NULL_TREE)
18279 != (TYPE_DOMAIN (arg) == NULL_TREE))
18280 return unify_type_mismatch (explain_p, parm, arg);
18281 RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
18282 strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
18283 if (TYPE_DOMAIN (parm) != NULL_TREE)
18284 return unify_array_domain (tparms, targs, TYPE_DOMAIN (parm),
18285 TYPE_DOMAIN (arg), explain_p);
18286 return unify_success (explain_p);
18288 case REAL_TYPE:
18289 case COMPLEX_TYPE:
18290 case VECTOR_TYPE:
18291 case INTEGER_TYPE:
18292 case BOOLEAN_TYPE:
18293 case ENUMERAL_TYPE:
18294 case VOID_TYPE:
18295 case NULLPTR_TYPE:
18296 if (TREE_CODE (arg) != TREE_CODE (parm))
18297 return unify_type_mismatch (explain_p, parm, arg);
18299 /* We have already checked cv-qualification at the top of the
18300 function. */
18301 if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
18302 return unify_type_mismatch (explain_p, parm, arg);
18304 /* As far as unification is concerned, this wins. Later checks
18305 will invalidate it if necessary. */
18306 return unify_success (explain_p);
18308 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
18309 /* Type INTEGER_CST can come from ordinary constant template args. */
18310 case INTEGER_CST:
18311 while (TREE_CODE (arg) == NOP_EXPR)
18312 arg = TREE_OPERAND (arg, 0);
18314 if (TREE_CODE (arg) != INTEGER_CST)
18315 return unify_template_argument_mismatch (explain_p, parm, arg);
18316 return (tree_int_cst_equal (parm, arg)
18317 ? unify_success (explain_p)
18318 : unify_template_argument_mismatch (explain_p, parm, arg));
18320 case TREE_VEC:
18322 int i, len, argslen;
18323 int parm_variadic_p = 0;
18325 if (TREE_CODE (arg) != TREE_VEC)
18326 return unify_template_argument_mismatch (explain_p, parm, arg);
18328 len = TREE_VEC_LENGTH (parm);
18329 argslen = TREE_VEC_LENGTH (arg);
18331 /* Check for pack expansions in the parameters. */
18332 for (i = 0; i < len; ++i)
18334 if (PACK_EXPANSION_P (TREE_VEC_ELT (parm, i)))
18336 if (i == len - 1)
18337 /* We can unify against something with a trailing
18338 parameter pack. */
18339 parm_variadic_p = 1;
18340 else
18341 /* [temp.deduct.type]/9: If the template argument list of
18342 P contains a pack expansion that is not the last
18343 template argument, the entire template argument list
18344 is a non-deduced context. */
18345 return unify_success (explain_p);
18349 /* If we don't have enough arguments to satisfy the parameters
18350 (not counting the pack expression at the end), or we have
18351 too many arguments for a parameter list that doesn't end in
18352 a pack expression, we can't unify. */
18353 if (parm_variadic_p
18354 ? argslen < len - parm_variadic_p
18355 : argslen != len)
18356 return unify_arity (explain_p, TREE_VEC_LENGTH (arg), len);
18358 /* Unify all of the parameters that precede the (optional)
18359 pack expression. */
18360 for (i = 0; i < len - parm_variadic_p; ++i)
18362 RECUR_AND_CHECK_FAILURE (tparms, targs,
18363 TREE_VEC_ELT (parm, i),
18364 TREE_VEC_ELT (arg, i),
18365 UNIFY_ALLOW_NONE, explain_p);
18367 if (parm_variadic_p)
18368 return unify_pack_expansion (tparms, targs, parm, arg,
18369 DEDUCE_EXACT,
18370 /*subr=*/true, explain_p);
18371 return unify_success (explain_p);
18374 case RECORD_TYPE:
18375 case UNION_TYPE:
18376 if (TREE_CODE (arg) != TREE_CODE (parm))
18377 return unify_type_mismatch (explain_p, parm, arg);
18379 if (TYPE_PTRMEMFUNC_P (parm))
18381 if (!TYPE_PTRMEMFUNC_P (arg))
18382 return unify_type_mismatch (explain_p, parm, arg);
18384 return unify (tparms, targs,
18385 TYPE_PTRMEMFUNC_FN_TYPE (parm),
18386 TYPE_PTRMEMFUNC_FN_TYPE (arg),
18387 strict, explain_p);
18389 else if (TYPE_PTRMEMFUNC_P (arg))
18390 return unify_type_mismatch (explain_p, parm, arg);
18392 if (CLASSTYPE_TEMPLATE_INFO (parm))
18394 tree t = NULL_TREE;
18396 if (strict_in & UNIFY_ALLOW_DERIVED)
18398 /* First, we try to unify the PARM and ARG directly. */
18399 t = try_class_unification (tparms, targs,
18400 parm, arg, explain_p);
18402 if (!t)
18404 /* Fallback to the special case allowed in
18405 [temp.deduct.call]:
18407 If P is a class, and P has the form
18408 template-id, then A can be a derived class of
18409 the deduced A. Likewise, if P is a pointer to
18410 a class of the form template-id, A can be a
18411 pointer to a derived class pointed to by the
18412 deduced A. */
18413 enum template_base_result r;
18414 r = get_template_base (tparms, targs, parm, arg,
18415 explain_p, &t);
18417 if (!t)
18418 return unify_no_common_base (explain_p, r, parm, arg);
18421 else if (CLASSTYPE_TEMPLATE_INFO (arg)
18422 && (CLASSTYPE_TI_TEMPLATE (parm)
18423 == CLASSTYPE_TI_TEMPLATE (arg)))
18424 /* Perhaps PARM is something like S<U> and ARG is S<int>.
18425 Then, we should unify `int' and `U'. */
18426 t = arg;
18427 else
18428 /* There's no chance of unification succeeding. */
18429 return unify_type_mismatch (explain_p, parm, arg);
18431 return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
18432 CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE, explain_p);
18434 else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
18435 return unify_type_mismatch (explain_p, parm, arg);
18436 return unify_success (explain_p);
18438 case METHOD_TYPE:
18439 case FUNCTION_TYPE:
18441 unsigned int nargs;
18442 tree *args;
18443 tree a;
18444 unsigned int i;
18446 if (TREE_CODE (arg) != TREE_CODE (parm))
18447 return unify_type_mismatch (explain_p, parm, arg);
18449 /* CV qualifications for methods can never be deduced, they must
18450 match exactly. We need to check them explicitly here,
18451 because type_unification_real treats them as any other
18452 cv-qualified parameter. */
18453 if (TREE_CODE (parm) == METHOD_TYPE
18454 && (!check_cv_quals_for_unify
18455 (UNIFY_ALLOW_NONE,
18456 class_of_this_parm (arg),
18457 class_of_this_parm (parm))))
18458 return unify_cv_qual_mismatch (explain_p, parm, arg);
18460 RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm),
18461 TREE_TYPE (arg), UNIFY_ALLOW_NONE, explain_p);
18463 nargs = list_length (TYPE_ARG_TYPES (arg));
18464 args = XALLOCAVEC (tree, nargs);
18465 for (a = TYPE_ARG_TYPES (arg), i = 0;
18466 a != NULL_TREE && a != void_list_node;
18467 a = TREE_CHAIN (a), ++i)
18468 args[i] = TREE_VALUE (a);
18469 nargs = i;
18471 return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
18472 args, nargs, 1, DEDUCE_EXACT,
18473 LOOKUP_NORMAL, NULL, explain_p);
18476 case OFFSET_TYPE:
18477 /* Unify a pointer to member with a pointer to member function, which
18478 deduces the type of the member as a function type. */
18479 if (TYPE_PTRMEMFUNC_P (arg))
18481 /* Check top-level cv qualifiers */
18482 if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
18483 return unify_cv_qual_mismatch (explain_p, parm, arg);
18485 RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
18486 TYPE_PTRMEMFUNC_OBJECT_TYPE (arg),
18487 UNIFY_ALLOW_NONE, explain_p);
18489 /* Determine the type of the function we are unifying against. */
18490 tree fntype = static_fn_type (arg);
18492 return unify (tparms, targs, TREE_TYPE (parm), fntype, strict, explain_p);
18495 if (TREE_CODE (arg) != OFFSET_TYPE)
18496 return unify_type_mismatch (explain_p, parm, arg);
18497 RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
18498 TYPE_OFFSET_BASETYPE (arg),
18499 UNIFY_ALLOW_NONE, explain_p);
18500 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
18501 strict, explain_p);
18503 case CONST_DECL:
18504 if (DECL_TEMPLATE_PARM_P (parm))
18505 return unify (tparms, targs, DECL_INITIAL (parm), arg, strict, explain_p);
18506 if (arg != scalar_constant_value (parm))
18507 return unify_template_argument_mismatch (explain_p, parm, arg);
18508 return unify_success (explain_p);
18510 case FIELD_DECL:
18511 case TEMPLATE_DECL:
18512 /* Matched cases are handled by the ARG == PARM test above. */
18513 return unify_template_argument_mismatch (explain_p, parm, arg);
18515 case VAR_DECL:
18516 /* A non-type template parameter that is a variable should be a
18517 an integral constant, in which case, it whould have been
18518 folded into its (constant) value. So we should not be getting
18519 a variable here. */
18520 gcc_unreachable ();
18522 case TYPE_ARGUMENT_PACK:
18523 case NONTYPE_ARGUMENT_PACK:
18524 return unify (tparms, targs, ARGUMENT_PACK_ARGS (parm),
18525 ARGUMENT_PACK_ARGS (arg), strict, explain_p);
18527 case TYPEOF_TYPE:
18528 case DECLTYPE_TYPE:
18529 case UNDERLYING_TYPE:
18530 /* Cannot deduce anything from TYPEOF_TYPE, DECLTYPE_TYPE,
18531 or UNDERLYING_TYPE nodes. */
18532 return unify_success (explain_p);
18534 case ERROR_MARK:
18535 /* Unification fails if we hit an error node. */
18536 return unify_invalid (explain_p);
18538 case INDIRECT_REF:
18539 if (REFERENCE_REF_P (parm))
18541 if (REFERENCE_REF_P (arg))
18542 arg = TREE_OPERAND (arg, 0);
18543 return unify (tparms, targs, TREE_OPERAND (parm, 0), arg,
18544 strict, explain_p);
18546 /* FALLTHRU */
18548 default:
18549 /* An unresolved overload is a nondeduced context. */
18550 if (is_overloaded_fn (parm) || type_unknown_p (parm))
18551 return unify_success (explain_p);
18552 gcc_assert (EXPR_P (parm));
18554 /* We must be looking at an expression. This can happen with
18555 something like:
18557 template <int I>
18558 void foo(S<I>, S<I + 2>);
18560 This is a "nondeduced context":
18562 [deduct.type]
18564 The nondeduced contexts are:
18566 --A type that is a template-id in which one or more of
18567 the template-arguments is an expression that references
18568 a template-parameter.
18570 In these cases, we assume deduction succeeded, but don't
18571 actually infer any unifications. */
18573 if (!uses_template_parms (parm)
18574 && !template_args_equal (parm, arg))
18575 return unify_expression_unequal (explain_p, parm, arg);
18576 else
18577 return unify_success (explain_p);
18580 #undef RECUR_AND_CHECK_FAILURE
18582 /* Note that DECL can be defined in this translation unit, if
18583 required. */
18585 static void
18586 mark_definable (tree decl)
18588 tree clone;
18589 DECL_NOT_REALLY_EXTERN (decl) = 1;
18590 FOR_EACH_CLONE (clone, decl)
18591 DECL_NOT_REALLY_EXTERN (clone) = 1;
18594 /* Called if RESULT is explicitly instantiated, or is a member of an
18595 explicitly instantiated class. */
18597 void
18598 mark_decl_instantiated (tree result, int extern_p)
18600 SET_DECL_EXPLICIT_INSTANTIATION (result);
18602 /* If this entity has already been written out, it's too late to
18603 make any modifications. */
18604 if (TREE_ASM_WRITTEN (result))
18605 return;
18607 /* For anonymous namespace we don't need to do anything. */
18608 if (decl_anon_ns_mem_p (result))
18610 gcc_assert (!TREE_PUBLIC (result));
18611 return;
18614 if (TREE_CODE (result) != FUNCTION_DECL)
18615 /* The TREE_PUBLIC flag for function declarations will have been
18616 set correctly by tsubst. */
18617 TREE_PUBLIC (result) = 1;
18619 /* This might have been set by an earlier implicit instantiation. */
18620 DECL_COMDAT (result) = 0;
18622 if (extern_p)
18623 DECL_NOT_REALLY_EXTERN (result) = 0;
18624 else
18626 mark_definable (result);
18627 mark_needed (result);
18628 /* Always make artificials weak. */
18629 if (DECL_ARTIFICIAL (result) && flag_weak)
18630 comdat_linkage (result);
18631 /* For WIN32 we also want to put explicit instantiations in
18632 linkonce sections. */
18633 else if (TREE_PUBLIC (result))
18634 maybe_make_one_only (result);
18637 /* If EXTERN_P, then this function will not be emitted -- unless
18638 followed by an explicit instantiation, at which point its linkage
18639 will be adjusted. If !EXTERN_P, then this function will be
18640 emitted here. In neither circumstance do we want
18641 import_export_decl to adjust the linkage. */
18642 DECL_INTERFACE_KNOWN (result) = 1;
18645 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
18646 important template arguments. If any are missing, we check whether
18647 they're important by using error_mark_node for substituting into any
18648 args that were used for partial ordering (the ones between ARGS and END)
18649 and seeing if it bubbles up. */
18651 static bool
18652 check_undeduced_parms (tree targs, tree args, tree end)
18654 bool found = false;
18655 int i;
18656 for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
18657 if (TREE_VEC_ELT (targs, i) == NULL_TREE)
18659 found = true;
18660 TREE_VEC_ELT (targs, i) = error_mark_node;
18662 if (found)
18664 tree substed = tsubst_arg_types (args, targs, end, tf_none, NULL_TREE);
18665 if (substed == error_mark_node)
18666 return true;
18668 return false;
18671 /* Given two function templates PAT1 and PAT2, return:
18673 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
18674 -1 if PAT2 is more specialized than PAT1.
18675 0 if neither is more specialized.
18677 LEN indicates the number of parameters we should consider
18678 (defaulted parameters should not be considered).
18680 The 1998 std underspecified function template partial ordering, and
18681 DR214 addresses the issue. We take pairs of arguments, one from
18682 each of the templates, and deduce them against each other. One of
18683 the templates will be more specialized if all the *other*
18684 template's arguments deduce against its arguments and at least one
18685 of its arguments *does* *not* deduce against the other template's
18686 corresponding argument. Deduction is done as for class templates.
18687 The arguments used in deduction have reference and top level cv
18688 qualifiers removed. Iff both arguments were originally reference
18689 types *and* deduction succeeds in both directions, an lvalue reference
18690 wins against an rvalue reference and otherwise the template
18691 with the more cv-qualified argument wins for that pairing (if
18692 neither is more cv-qualified, they both are equal). Unlike regular
18693 deduction, after all the arguments have been deduced in this way,
18694 we do *not* verify the deduced template argument values can be
18695 substituted into non-deduced contexts.
18697 The logic can be a bit confusing here, because we look at deduce1 and
18698 targs1 to see if pat2 is at least as specialized, and vice versa; if we
18699 can find template arguments for pat1 to make arg1 look like arg2, that
18700 means that arg2 is at least as specialized as arg1. */
18703 more_specialized_fn (tree pat1, tree pat2, int len)
18705 tree decl1 = DECL_TEMPLATE_RESULT (pat1);
18706 tree decl2 = DECL_TEMPLATE_RESULT (pat2);
18707 tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
18708 tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
18709 tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
18710 tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
18711 tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
18712 tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
18713 tree origs1, origs2;
18714 bool lose1 = false;
18715 bool lose2 = false;
18717 /* Remove the this parameter from non-static member functions. If
18718 one is a non-static member function and the other is not a static
18719 member function, remove the first parameter from that function
18720 also. This situation occurs for operator functions where we
18721 locate both a member function (with this pointer) and non-member
18722 operator (with explicit first operand). */
18723 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
18725 len--; /* LEN is the number of significant arguments for DECL1 */
18726 args1 = TREE_CHAIN (args1);
18727 if (!DECL_STATIC_FUNCTION_P (decl2))
18728 args2 = TREE_CHAIN (args2);
18730 else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
18732 args2 = TREE_CHAIN (args2);
18733 if (!DECL_STATIC_FUNCTION_P (decl1))
18735 len--;
18736 args1 = TREE_CHAIN (args1);
18740 /* If only one is a conversion operator, they are unordered. */
18741 if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
18742 return 0;
18744 /* Consider the return type for a conversion function */
18745 if (DECL_CONV_FN_P (decl1))
18747 args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
18748 args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
18749 len++;
18752 processing_template_decl++;
18754 origs1 = args1;
18755 origs2 = args2;
18757 while (len--
18758 /* Stop when an ellipsis is seen. */
18759 && args1 != NULL_TREE && args2 != NULL_TREE)
18761 tree arg1 = TREE_VALUE (args1);
18762 tree arg2 = TREE_VALUE (args2);
18763 int deduce1, deduce2;
18764 int quals1 = -1;
18765 int quals2 = -1;
18766 int ref1 = 0;
18767 int ref2 = 0;
18769 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
18770 && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
18772 /* When both arguments are pack expansions, we need only
18773 unify the patterns themselves. */
18774 arg1 = PACK_EXPANSION_PATTERN (arg1);
18775 arg2 = PACK_EXPANSION_PATTERN (arg2);
18777 /* This is the last comparison we need to do. */
18778 len = 0;
18781 if (TREE_CODE (arg1) == REFERENCE_TYPE)
18783 ref1 = TYPE_REF_IS_RVALUE (arg1) + 1;
18784 arg1 = TREE_TYPE (arg1);
18785 quals1 = cp_type_quals (arg1);
18788 if (TREE_CODE (arg2) == REFERENCE_TYPE)
18790 ref2 = TYPE_REF_IS_RVALUE (arg2) + 1;
18791 arg2 = TREE_TYPE (arg2);
18792 quals2 = cp_type_quals (arg2);
18795 arg1 = TYPE_MAIN_VARIANT (arg1);
18796 arg2 = TYPE_MAIN_VARIANT (arg2);
18798 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
18800 int i, len2 = list_length (args2);
18801 tree parmvec = make_tree_vec (1);
18802 tree argvec = make_tree_vec (len2);
18803 tree ta = args2;
18805 /* Setup the parameter vector, which contains only ARG1. */
18806 TREE_VEC_ELT (parmvec, 0) = arg1;
18808 /* Setup the argument vector, which contains the remaining
18809 arguments. */
18810 for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
18811 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
18813 deduce1 = (unify_pack_expansion (tparms1, targs1, parmvec,
18814 argvec, DEDUCE_EXACT,
18815 /*subr=*/true, /*explain_p=*/false)
18816 == 0);
18818 /* We cannot deduce in the other direction, because ARG1 is
18819 a pack expansion but ARG2 is not. */
18820 deduce2 = 0;
18822 else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
18824 int i, len1 = list_length (args1);
18825 tree parmvec = make_tree_vec (1);
18826 tree argvec = make_tree_vec (len1);
18827 tree ta = args1;
18829 /* Setup the parameter vector, which contains only ARG1. */
18830 TREE_VEC_ELT (parmvec, 0) = arg2;
18832 /* Setup the argument vector, which contains the remaining
18833 arguments. */
18834 for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
18835 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
18837 deduce2 = (unify_pack_expansion (tparms2, targs2, parmvec,
18838 argvec, DEDUCE_EXACT,
18839 /*subr=*/true, /*explain_p=*/false)
18840 == 0);
18842 /* We cannot deduce in the other direction, because ARG2 is
18843 a pack expansion but ARG1 is not.*/
18844 deduce1 = 0;
18847 else
18849 /* The normal case, where neither argument is a pack
18850 expansion. */
18851 deduce1 = (unify (tparms1, targs1, arg1, arg2,
18852 UNIFY_ALLOW_NONE, /*explain_p=*/false)
18853 == 0);
18854 deduce2 = (unify (tparms2, targs2, arg2, arg1,
18855 UNIFY_ALLOW_NONE, /*explain_p=*/false)
18856 == 0);
18859 /* If we couldn't deduce arguments for tparms1 to make arg1 match
18860 arg2, then arg2 is not as specialized as arg1. */
18861 if (!deduce1)
18862 lose2 = true;
18863 if (!deduce2)
18864 lose1 = true;
18866 /* "If, for a given type, deduction succeeds in both directions
18867 (i.e., the types are identical after the transformations above)
18868 and both P and A were reference types (before being replaced with
18869 the type referred to above):
18870 - if the type from the argument template was an lvalue reference and
18871 the type from the parameter template was not, the argument type is
18872 considered to be more specialized than the other; otherwise,
18873 - if the type from the argument template is more cv-qualified
18874 than the type from the parameter template (as described above),
18875 the argument type is considered to be more specialized than the other;
18876 otherwise,
18877 - neither type is more specialized than the other." */
18879 if (deduce1 && deduce2)
18881 if (ref1 && ref2 && ref1 != ref2)
18883 if (ref1 > ref2)
18884 lose1 = true;
18885 else
18886 lose2 = true;
18888 else if (quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
18890 if ((quals1 & quals2) == quals2)
18891 lose2 = true;
18892 if ((quals1 & quals2) == quals1)
18893 lose1 = true;
18897 if (lose1 && lose2)
18898 /* We've failed to deduce something in either direction.
18899 These must be unordered. */
18900 break;
18902 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
18903 || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
18904 /* We have already processed all of the arguments in our
18905 handing of the pack expansion type. */
18906 len = 0;
18908 args1 = TREE_CHAIN (args1);
18909 args2 = TREE_CHAIN (args2);
18912 /* "In most cases, all template parameters must have values in order for
18913 deduction to succeed, but for partial ordering purposes a template
18914 parameter may remain without a value provided it is not used in the
18915 types being used for partial ordering."
18917 Thus, if we are missing any of the targs1 we need to substitute into
18918 origs1, then pat2 is not as specialized as pat1. This can happen when
18919 there is a nondeduced context. */
18920 if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
18921 lose2 = true;
18922 if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
18923 lose1 = true;
18925 processing_template_decl--;
18927 /* All things being equal, if the next argument is a pack expansion
18928 for one function but not for the other, prefer the
18929 non-variadic function. FIXME this is bogus; see c++/41958. */
18930 if (lose1 == lose2
18931 && args1 && TREE_VALUE (args1)
18932 && args2 && TREE_VALUE (args2))
18934 lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
18935 lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
18938 if (lose1 == lose2)
18939 return 0;
18940 else if (!lose1)
18941 return 1;
18942 else
18943 return -1;
18946 /* Determine which of two partial specializations of TMPL is more
18947 specialized.
18949 PAT1 is a TREE_LIST whose TREE_VALUE is the TEMPLATE_DECL corresponding
18950 to the first partial specialization. The TREE_PURPOSE is the
18951 innermost set of template parameters for the partial
18952 specialization. PAT2 is similar, but for the second template.
18954 Return 1 if the first partial specialization is more specialized;
18955 -1 if the second is more specialized; 0 if neither is more
18956 specialized.
18958 See [temp.class.order] for information about determining which of
18959 two templates is more specialized. */
18961 static int
18962 more_specialized_partial_spec (tree tmpl, tree pat1, tree pat2)
18964 tree targs;
18965 int winner = 0;
18966 bool any_deductions = false;
18968 tree tmpl1 = TREE_VALUE (pat1);
18969 tree tmpl2 = TREE_VALUE (pat2);
18970 tree parms1 = DECL_INNERMOST_TEMPLATE_PARMS (tmpl1);
18971 tree parms2 = DECL_INNERMOST_TEMPLATE_PARMS (tmpl2);
18972 tree specargs1 = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl1)));
18973 tree specargs2 = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl2)));
18975 /* Just like what happens for functions, if we are ordering between
18976 different template specializations, we may encounter dependent
18977 types in the arguments, and we need our dependency check functions
18978 to behave correctly. */
18979 ++processing_template_decl;
18980 targs = get_partial_spec_bindings (tmpl, parms1, specargs1, specargs2);
18981 if (targs)
18983 --winner;
18984 any_deductions = true;
18987 targs = get_partial_spec_bindings (tmpl, parms2, specargs2, specargs1);
18988 if (targs)
18990 ++winner;
18991 any_deductions = true;
18993 --processing_template_decl;
18995 /* In the case of a tie where at least one of the templates
18996 has a parameter pack at the end, the template with the most
18997 non-packed parameters wins. */
18998 if (winner == 0
18999 && any_deductions
19000 && (template_args_variadic_p (TREE_PURPOSE (pat1))
19001 || template_args_variadic_p (TREE_PURPOSE (pat2))))
19003 tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
19004 tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
19005 int len1 = TREE_VEC_LENGTH (args1);
19006 int len2 = TREE_VEC_LENGTH (args2);
19008 /* We don't count the pack expansion at the end. */
19009 if (template_args_variadic_p (TREE_PURPOSE (pat1)))
19010 --len1;
19011 if (template_args_variadic_p (TREE_PURPOSE (pat2)))
19012 --len2;
19014 if (len1 > len2)
19015 return 1;
19016 else if (len1 < len2)
19017 return -1;
19020 return winner;
19023 /* Return the template arguments that will produce the function signature
19024 DECL from the function template FN, with the explicit template
19025 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is true, the return type must
19026 also match. Return NULL_TREE if no satisfactory arguments could be
19027 found. */
19029 static tree
19030 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
19032 int ntparms = DECL_NTPARMS (fn);
19033 tree targs = make_tree_vec (ntparms);
19034 tree decl_type = TREE_TYPE (decl);
19035 tree decl_arg_types;
19036 tree *args;
19037 unsigned int nargs, ix;
19038 tree arg;
19040 gcc_assert (decl != DECL_TEMPLATE_RESULT (fn));
19042 /* Never do unification on the 'this' parameter. */
19043 decl_arg_types = skip_artificial_parms_for (decl,
19044 TYPE_ARG_TYPES (decl_type));
19046 nargs = list_length (decl_arg_types);
19047 args = XALLOCAVEC (tree, nargs);
19048 for (arg = decl_arg_types, ix = 0;
19049 arg != NULL_TREE && arg != void_list_node;
19050 arg = TREE_CHAIN (arg), ++ix)
19051 args[ix] = TREE_VALUE (arg);
19053 if (fn_type_unification (fn, explicit_args, targs,
19054 args, ix,
19055 (check_rettype || DECL_CONV_FN_P (fn)
19056 ? TREE_TYPE (decl_type) : NULL_TREE),
19057 DEDUCE_EXACT, LOOKUP_NORMAL, /*explain_p=*/false,
19058 /*decltype*/false)
19059 == error_mark_node)
19060 return NULL_TREE;
19062 return targs;
19065 /* Return the innermost template arguments that, when applied to a partial
19066 specialization of TMPL whose innermost template parameters are
19067 TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
19068 ARGS.
19070 For example, suppose we have:
19072 template <class T, class U> struct S {};
19073 template <class T> struct S<T*, int> {};
19075 Then, suppose we want to get `S<double*, int>'. The TPARMS will be
19076 {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
19077 int}. The resulting vector will be {double}, indicating that `T'
19078 is bound to `double'. */
19080 static tree
19081 get_partial_spec_bindings (tree tmpl, tree tparms, tree spec_args, tree args)
19083 int i, ntparms = TREE_VEC_LENGTH (tparms);
19084 tree deduced_args;
19085 tree innermost_deduced_args;
19087 innermost_deduced_args = make_tree_vec (ntparms);
19088 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
19090 deduced_args = copy_node (args);
19091 SET_TMPL_ARGS_LEVEL (deduced_args,
19092 TMPL_ARGS_DEPTH (deduced_args),
19093 innermost_deduced_args);
19095 else
19096 deduced_args = innermost_deduced_args;
19098 if (unify (tparms, deduced_args,
19099 INNERMOST_TEMPLATE_ARGS (spec_args),
19100 INNERMOST_TEMPLATE_ARGS (args),
19101 UNIFY_ALLOW_NONE, /*explain_p=*/false))
19102 return NULL_TREE;
19104 for (i = 0; i < ntparms; ++i)
19105 if (! TREE_VEC_ELT (innermost_deduced_args, i))
19106 return NULL_TREE;
19108 /* Verify that nondeduced template arguments agree with the type
19109 obtained from argument deduction.
19111 For example:
19113 struct A { typedef int X; };
19114 template <class T, class U> struct C {};
19115 template <class T> struct C<T, typename T::X> {};
19117 Then with the instantiation `C<A, int>', we can deduce that
19118 `T' is `A' but unify () does not check whether `typename T::X'
19119 is `int'. */
19120 spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
19121 spec_args = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
19122 spec_args, tmpl,
19123 tf_none, false, false);
19124 if (spec_args == error_mark_node
19125 /* We only need to check the innermost arguments; the other
19126 arguments will always agree. */
19127 || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
19128 INNERMOST_TEMPLATE_ARGS (args)))
19129 return NULL_TREE;
19131 /* Now that we have bindings for all of the template arguments,
19132 ensure that the arguments deduced for the template template
19133 parameters have compatible template parameter lists. See the use
19134 of template_template_parm_bindings_ok_p in fn_type_unification
19135 for more information. */
19136 if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
19137 return NULL_TREE;
19139 return deduced_args;
19142 /* TEMPLATES is a TREE_LIST. Each TREE_VALUE is a TEMPLATE_DECL.
19143 Return the TREE_LIST node with the most specialized template, if
19144 any. If there is no most specialized template, the error_mark_node
19145 is returned.
19147 Note that this function does not look at, or modify, the
19148 TREE_PURPOSE or TREE_TYPE of any of the nodes. Since the node
19149 returned is one of the elements of INSTANTIATIONS, callers may
19150 store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
19151 and retrieve it from the value returned. */
19153 tree
19154 most_specialized_instantiation (tree templates)
19156 tree fn, champ;
19158 ++processing_template_decl;
19160 champ = templates;
19161 for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
19163 int fate = 0;
19165 if (get_bindings (TREE_VALUE (champ),
19166 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
19167 NULL_TREE, /*check_ret=*/true))
19168 fate--;
19170 if (get_bindings (TREE_VALUE (fn),
19171 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
19172 NULL_TREE, /*check_ret=*/true))
19173 fate++;
19175 if (fate == -1)
19176 champ = fn;
19177 else if (!fate)
19179 /* Equally specialized, move to next function. If there
19180 is no next function, nothing's most specialized. */
19181 fn = TREE_CHAIN (fn);
19182 champ = fn;
19183 if (!fn)
19184 break;
19188 if (champ)
19189 /* Now verify that champ is better than everything earlier in the
19190 instantiation list. */
19191 for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
19192 if (get_bindings (TREE_VALUE (champ),
19193 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
19194 NULL_TREE, /*check_ret=*/true)
19195 || !get_bindings (TREE_VALUE (fn),
19196 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
19197 NULL_TREE, /*check_ret=*/true))
19199 champ = NULL_TREE;
19200 break;
19203 processing_template_decl--;
19205 if (!champ)
19206 return error_mark_node;
19208 return champ;
19211 /* If DECL is a specialization of some template, return the most
19212 general such template. Otherwise, returns NULL_TREE.
19214 For example, given:
19216 template <class T> struct S { template <class U> void f(U); };
19218 if TMPL is `template <class U> void S<int>::f(U)' this will return
19219 the full template. This function will not trace past partial
19220 specializations, however. For example, given in addition:
19222 template <class T> struct S<T*> { template <class U> void f(U); };
19224 if TMPL is `template <class U> void S<int*>::f(U)' this will return
19225 `template <class T> template <class U> S<T*>::f(U)'. */
19227 tree
19228 most_general_template (tree decl)
19230 if (TREE_CODE (decl) != TEMPLATE_DECL)
19232 if (tree tinfo = get_template_info (decl))
19233 decl = TI_TEMPLATE (tinfo);
19234 /* The TI_TEMPLATE can be an IDENTIFIER_NODE for a
19235 template friend, or a FIELD_DECL for a capture pack. */
19236 if (TREE_CODE (decl) != TEMPLATE_DECL)
19237 return NULL_TREE;
19240 /* Look for more and more general templates. */
19241 while (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
19243 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
19244 (See cp-tree.h for details.) */
19245 if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
19246 break;
19248 if (CLASS_TYPE_P (TREE_TYPE (decl))
19249 && !TYPE_DECL_ALIAS_P (TYPE_NAME (TREE_TYPE (decl)))
19250 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
19251 break;
19253 /* Stop if we run into an explicitly specialized class template. */
19254 if (!DECL_NAMESPACE_SCOPE_P (decl)
19255 && DECL_CONTEXT (decl)
19256 && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
19257 break;
19259 decl = DECL_TI_TEMPLATE (decl);
19262 return decl;
19265 /* Return the most specialized of the template partial specializations
19266 which can produce TARGET, a specialization of some class or variable
19267 template. The value returned is actually a TREE_LIST; the TREE_VALUE is
19268 a TEMPLATE_DECL node corresponding to the partial specialization, while
19269 the TREE_PURPOSE is the set of template arguments that must be
19270 substituted into the template pattern in order to generate TARGET.
19272 If the choice of partial specialization is ambiguous, a diagnostic
19273 is issued, and the error_mark_node is returned. If there are no
19274 partial specializations matching TARGET, then NULL_TREE is
19275 returned, indicating that the primary template should be used. */
19277 static tree
19278 most_specialized_partial_spec (tree target, tsubst_flags_t complain)
19280 tree list = NULL_TREE;
19281 tree t;
19282 tree champ;
19283 int fate;
19284 bool ambiguous_p;
19285 tree outer_args = NULL_TREE;
19286 tree tmpl, args;
19288 if (TYPE_P (target))
19290 tree tinfo = CLASSTYPE_TEMPLATE_INFO (target);
19291 tmpl = TI_TEMPLATE (tinfo);
19292 args = TI_ARGS (tinfo);
19294 else if (TREE_CODE (target) == TEMPLATE_ID_EXPR)
19296 tmpl = TREE_OPERAND (target, 0);
19297 args = TREE_OPERAND (target, 1);
19299 else if (VAR_P (target))
19301 tree tinfo = DECL_TEMPLATE_INFO (target);
19302 tmpl = TI_TEMPLATE (tinfo);
19303 args = TI_ARGS (tinfo);
19305 else
19306 gcc_unreachable ();
19308 tree main_tmpl = most_general_template (tmpl);
19310 /* For determining which partial specialization to use, only the
19311 innermost args are interesting. */
19312 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
19314 outer_args = strip_innermost_template_args (args, 1);
19315 args = INNERMOST_TEMPLATE_ARGS (args);
19318 for (t = DECL_TEMPLATE_SPECIALIZATIONS (main_tmpl); t; t = TREE_CHAIN (t))
19320 tree partial_spec_args;
19321 tree spec_args;
19322 tree spec_tmpl = TREE_VALUE (t);
19324 partial_spec_args = TREE_PURPOSE (t);
19326 ++processing_template_decl;
19328 if (outer_args)
19330 /* Discard the outer levels of args, and then substitute in the
19331 template args from the enclosing class. */
19332 partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
19333 partial_spec_args = tsubst_template_args
19334 (partial_spec_args, outer_args, tf_none, NULL_TREE);
19336 /* And the same for the partial specialization TEMPLATE_DECL. */
19337 spec_tmpl = tsubst (spec_tmpl, outer_args, tf_none, NULL_TREE);
19340 partial_spec_args =
19341 coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
19342 partial_spec_args,
19343 tmpl, tf_none,
19344 /*require_all_args=*/true,
19345 /*use_default_args=*/true);
19347 --processing_template_decl;
19349 if (partial_spec_args == error_mark_node)
19350 return error_mark_node;
19351 if (spec_tmpl == error_mark_node)
19352 return error_mark_node;
19354 tree parms = DECL_INNERMOST_TEMPLATE_PARMS (spec_tmpl);
19355 spec_args = get_partial_spec_bindings (tmpl, parms,
19356 partial_spec_args,
19357 args);
19358 if (spec_args)
19360 if (outer_args)
19361 spec_args = add_to_template_args (outer_args, spec_args);
19362 list = tree_cons (spec_args, TREE_VALUE (t), list);
19363 TREE_TYPE (list) = TREE_TYPE (t);
19367 if (! list)
19368 return NULL_TREE;
19370 ambiguous_p = false;
19371 t = list;
19372 champ = t;
19373 t = TREE_CHAIN (t);
19374 for (; t; t = TREE_CHAIN (t))
19376 fate = more_specialized_partial_spec (tmpl, champ, t);
19377 if (fate == 1)
19379 else
19381 if (fate == 0)
19383 t = TREE_CHAIN (t);
19384 if (! t)
19386 ambiguous_p = true;
19387 break;
19390 champ = t;
19394 if (!ambiguous_p)
19395 for (t = list; t && t != champ; t = TREE_CHAIN (t))
19397 fate = more_specialized_partial_spec (tmpl, champ, t);
19398 if (fate != 1)
19400 ambiguous_p = true;
19401 break;
19405 if (ambiguous_p)
19407 const char *str;
19408 char *spaces = NULL;
19409 if (!(complain & tf_error))
19410 return error_mark_node;
19411 if (TYPE_P (target))
19412 error ("ambiguous template instantiation for %q#T", target);
19413 else
19414 error ("ambiguous template instantiation for %q#D", target);
19415 str = ngettext ("candidate is:", "candidates are:", list_length (list));
19416 for (t = list; t; t = TREE_CHAIN (t))
19418 tree subst = build_tree_list (TREE_VALUE (t), TREE_PURPOSE (t));
19419 inform (DECL_SOURCE_LOCATION (TREE_VALUE (t)),
19420 "%s %#S", spaces ? spaces : str, subst);
19421 spaces = spaces ? spaces : get_spaces (str);
19423 free (spaces);
19424 return error_mark_node;
19427 return champ;
19430 /* Explicitly instantiate DECL. */
19432 void
19433 do_decl_instantiation (tree decl, tree storage)
19435 tree result = NULL_TREE;
19436 int extern_p = 0;
19438 if (!decl || decl == error_mark_node)
19439 /* An error occurred, for which grokdeclarator has already issued
19440 an appropriate message. */
19441 return;
19442 else if (! DECL_LANG_SPECIFIC (decl))
19444 error ("explicit instantiation of non-template %q#D", decl);
19445 return;
19448 bool var_templ = (DECL_TEMPLATE_INFO (decl)
19449 && variable_template_p (DECL_TI_TEMPLATE (decl)));
19451 if (VAR_P (decl) && !var_templ)
19453 /* There is an asymmetry here in the way VAR_DECLs and
19454 FUNCTION_DECLs are handled by grokdeclarator. In the case of
19455 the latter, the DECL we get back will be marked as a
19456 template instantiation, and the appropriate
19457 DECL_TEMPLATE_INFO will be set up. This does not happen for
19458 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
19459 should handle VAR_DECLs as it currently handles
19460 FUNCTION_DECLs. */
19461 if (!DECL_CLASS_SCOPE_P (decl))
19463 error ("%qD is not a static data member of a class template", decl);
19464 return;
19466 result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
19467 if (!result || !VAR_P (result))
19469 error ("no matching template for %qD found", decl);
19470 return;
19472 if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
19474 error ("type %qT for explicit instantiation %qD does not match "
19475 "declared type %qT", TREE_TYPE (result), decl,
19476 TREE_TYPE (decl));
19477 return;
19480 else if (TREE_CODE (decl) != FUNCTION_DECL && !var_templ)
19482 error ("explicit instantiation of %q#D", decl);
19483 return;
19485 else
19486 result = decl;
19488 /* Check for various error cases. Note that if the explicit
19489 instantiation is valid the RESULT will currently be marked as an
19490 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
19491 until we get here. */
19493 if (DECL_TEMPLATE_SPECIALIZATION (result))
19495 /* DR 259 [temp.spec].
19497 Both an explicit instantiation and a declaration of an explicit
19498 specialization shall not appear in a program unless the explicit
19499 instantiation follows a declaration of the explicit specialization.
19501 For a given set of template parameters, if an explicit
19502 instantiation of a template appears after a declaration of an
19503 explicit specialization for that template, the explicit
19504 instantiation has no effect. */
19505 return;
19507 else if (DECL_EXPLICIT_INSTANTIATION (result))
19509 /* [temp.spec]
19511 No program shall explicitly instantiate any template more
19512 than once.
19514 We check DECL_NOT_REALLY_EXTERN so as not to complain when
19515 the first instantiation was `extern' and the second is not,
19516 and EXTERN_P for the opposite case. */
19517 if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
19518 permerror (input_location, "duplicate explicit instantiation of %q#D", result);
19519 /* If an "extern" explicit instantiation follows an ordinary
19520 explicit instantiation, the template is instantiated. */
19521 if (extern_p)
19522 return;
19524 else if (!DECL_IMPLICIT_INSTANTIATION (result))
19526 error ("no matching template for %qD found", result);
19527 return;
19529 else if (!DECL_TEMPLATE_INFO (result))
19531 permerror (input_location, "explicit instantiation of non-template %q#D", result);
19532 return;
19535 if (storage == NULL_TREE)
19537 else if (storage == ridpointers[(int) RID_EXTERN])
19539 if (!in_system_header_at (input_location) && (cxx_dialect == cxx98))
19540 pedwarn (input_location, OPT_Wpedantic,
19541 "ISO C++ 1998 forbids the use of %<extern%> on explicit "
19542 "instantiations");
19543 extern_p = 1;
19545 else
19546 error ("storage class %qD applied to template instantiation", storage);
19548 check_explicit_instantiation_namespace (result);
19549 mark_decl_instantiated (result, extern_p);
19550 if (! extern_p)
19551 instantiate_decl (result, /*defer_ok=*/1,
19552 /*expl_inst_class_mem_p=*/false);
19555 static void
19556 mark_class_instantiated (tree t, int extern_p)
19558 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
19559 SET_CLASSTYPE_INTERFACE_KNOWN (t);
19560 CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
19561 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
19562 if (! extern_p)
19564 CLASSTYPE_DEBUG_REQUESTED (t) = 1;
19565 rest_of_type_compilation (t, 1);
19569 /* Called from do_type_instantiation through binding_table_foreach to
19570 do recursive instantiation for the type bound in ENTRY. */
19571 static void
19572 bt_instantiate_type_proc (binding_entry entry, void *data)
19574 tree storage = *(tree *) data;
19576 if (MAYBE_CLASS_TYPE_P (entry->type)
19577 && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
19578 do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
19581 /* Called from do_type_instantiation to instantiate a member
19582 (a member function or a static member variable) of an
19583 explicitly instantiated class template. */
19584 static void
19585 instantiate_class_member (tree decl, int extern_p)
19587 mark_decl_instantiated (decl, extern_p);
19588 if (! extern_p)
19589 instantiate_decl (decl, /*defer_ok=*/1,
19590 /*expl_inst_class_mem_p=*/true);
19593 /* Perform an explicit instantiation of template class T. STORAGE, if
19594 non-null, is the RID for extern, inline or static. COMPLAIN is
19595 nonzero if this is called from the parser, zero if called recursively,
19596 since the standard is unclear (as detailed below). */
19598 void
19599 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
19601 int extern_p = 0;
19602 int nomem_p = 0;
19603 int static_p = 0;
19604 int previous_instantiation_extern_p = 0;
19606 if (TREE_CODE (t) == TYPE_DECL)
19607 t = TREE_TYPE (t);
19609 if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
19611 tree tmpl =
19612 (TYPE_TEMPLATE_INFO (t)) ? TYPE_TI_TEMPLATE (t) : NULL;
19613 if (tmpl)
19614 error ("explicit instantiation of non-class template %qD", tmpl);
19615 else
19616 error ("explicit instantiation of non-template type %qT", t);
19617 return;
19620 complete_type (t);
19622 if (!COMPLETE_TYPE_P (t))
19624 if (complain & tf_error)
19625 error ("explicit instantiation of %q#T before definition of template",
19627 return;
19630 if (storage != NULL_TREE)
19632 if (!in_system_header_at (input_location))
19634 if (storage == ridpointers[(int) RID_EXTERN])
19636 if (cxx_dialect == cxx98)
19637 pedwarn (input_location, OPT_Wpedantic,
19638 "ISO C++ 1998 forbids the use of %<extern%> on "
19639 "explicit instantiations");
19641 else
19642 pedwarn (input_location, OPT_Wpedantic,
19643 "ISO C++ forbids the use of %qE"
19644 " on explicit instantiations", storage);
19647 if (storage == ridpointers[(int) RID_INLINE])
19648 nomem_p = 1;
19649 else if (storage == ridpointers[(int) RID_EXTERN])
19650 extern_p = 1;
19651 else if (storage == ridpointers[(int) RID_STATIC])
19652 static_p = 1;
19653 else
19655 error ("storage class %qD applied to template instantiation",
19656 storage);
19657 extern_p = 0;
19661 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
19663 /* DR 259 [temp.spec].
19665 Both an explicit instantiation and a declaration of an explicit
19666 specialization shall not appear in a program unless the explicit
19667 instantiation follows a declaration of the explicit specialization.
19669 For a given set of template parameters, if an explicit
19670 instantiation of a template appears after a declaration of an
19671 explicit specialization for that template, the explicit
19672 instantiation has no effect. */
19673 return;
19675 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
19677 /* [temp.spec]
19679 No program shall explicitly instantiate any template more
19680 than once.
19682 If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
19683 instantiation was `extern'. If EXTERN_P then the second is.
19684 These cases are OK. */
19685 previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
19687 if (!previous_instantiation_extern_p && !extern_p
19688 && (complain & tf_error))
19689 permerror (input_location, "duplicate explicit instantiation of %q#T", t);
19691 /* If we've already instantiated the template, just return now. */
19692 if (!CLASSTYPE_INTERFACE_ONLY (t))
19693 return;
19696 check_explicit_instantiation_namespace (TYPE_NAME (t));
19697 mark_class_instantiated (t, extern_p);
19699 if (nomem_p)
19700 return;
19703 tree tmp;
19705 /* In contrast to implicit instantiation, where only the
19706 declarations, and not the definitions, of members are
19707 instantiated, we have here:
19709 [temp.explicit]
19711 The explicit instantiation of a class template specialization
19712 implies the instantiation of all of its members not
19713 previously explicitly specialized in the translation unit
19714 containing the explicit instantiation.
19716 Of course, we can't instantiate member template classes, since
19717 we don't have any arguments for them. Note that the standard
19718 is unclear on whether the instantiation of the members are
19719 *explicit* instantiations or not. However, the most natural
19720 interpretation is that it should be an explicit instantiation. */
19722 if (! static_p)
19723 for (tmp = TYPE_METHODS (t); tmp; tmp = DECL_CHAIN (tmp))
19724 if (TREE_CODE (tmp) == FUNCTION_DECL
19725 && DECL_TEMPLATE_INSTANTIATION (tmp))
19726 instantiate_class_member (tmp, extern_p);
19728 for (tmp = TYPE_FIELDS (t); tmp; tmp = DECL_CHAIN (tmp))
19729 if (VAR_P (tmp) && DECL_TEMPLATE_INSTANTIATION (tmp))
19730 instantiate_class_member (tmp, extern_p);
19732 if (CLASSTYPE_NESTED_UTDS (t))
19733 binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
19734 bt_instantiate_type_proc, &storage);
19738 /* Given a function DECL, which is a specialization of TMPL, modify
19739 DECL to be a re-instantiation of TMPL with the same template
19740 arguments. TMPL should be the template into which tsubst'ing
19741 should occur for DECL, not the most general template.
19743 One reason for doing this is a scenario like this:
19745 template <class T>
19746 void f(const T&, int i);
19748 void g() { f(3, 7); }
19750 template <class T>
19751 void f(const T& t, const int i) { }
19753 Note that when the template is first instantiated, with
19754 instantiate_template, the resulting DECL will have no name for the
19755 first parameter, and the wrong type for the second. So, when we go
19756 to instantiate the DECL, we regenerate it. */
19758 static void
19759 regenerate_decl_from_template (tree decl, tree tmpl)
19761 /* The arguments used to instantiate DECL, from the most general
19762 template. */
19763 tree args;
19764 tree code_pattern;
19766 args = DECL_TI_ARGS (decl);
19767 code_pattern = DECL_TEMPLATE_RESULT (tmpl);
19769 /* Make sure that we can see identifiers, and compute access
19770 correctly. */
19771 push_access_scope (decl);
19773 if (TREE_CODE (decl) == FUNCTION_DECL)
19775 tree decl_parm;
19776 tree pattern_parm;
19777 tree specs;
19778 int args_depth;
19779 int parms_depth;
19781 args_depth = TMPL_ARGS_DEPTH (args);
19782 parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
19783 if (args_depth > parms_depth)
19784 args = get_innermost_template_args (args, parms_depth);
19786 specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
19787 args, tf_error, NULL_TREE,
19788 /*defer_ok*/false);
19789 if (specs && specs != error_mark_node)
19790 TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
19791 specs);
19793 /* Merge parameter declarations. */
19794 decl_parm = skip_artificial_parms_for (decl,
19795 DECL_ARGUMENTS (decl));
19796 pattern_parm
19797 = skip_artificial_parms_for (code_pattern,
19798 DECL_ARGUMENTS (code_pattern));
19799 while (decl_parm && !DECL_PACK_P (pattern_parm))
19801 tree parm_type;
19802 tree attributes;
19804 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
19805 DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
19806 parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
19807 NULL_TREE);
19808 parm_type = type_decays_to (parm_type);
19809 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
19810 TREE_TYPE (decl_parm) = parm_type;
19811 attributes = DECL_ATTRIBUTES (pattern_parm);
19812 if (DECL_ATTRIBUTES (decl_parm) != attributes)
19814 DECL_ATTRIBUTES (decl_parm) = attributes;
19815 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
19817 decl_parm = DECL_CHAIN (decl_parm);
19818 pattern_parm = DECL_CHAIN (pattern_parm);
19820 /* Merge any parameters that match with the function parameter
19821 pack. */
19822 if (pattern_parm && DECL_PACK_P (pattern_parm))
19824 int i, len;
19825 tree expanded_types;
19826 /* Expand the TYPE_PACK_EXPANSION that provides the types for
19827 the parameters in this function parameter pack. */
19828 expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm),
19829 args, tf_error, NULL_TREE);
19830 len = TREE_VEC_LENGTH (expanded_types);
19831 for (i = 0; i < len; i++)
19833 tree parm_type;
19834 tree attributes;
19836 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
19837 /* Rename the parameter to include the index. */
19838 DECL_NAME (decl_parm) =
19839 make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
19840 parm_type = TREE_VEC_ELT (expanded_types, i);
19841 parm_type = type_decays_to (parm_type);
19842 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
19843 TREE_TYPE (decl_parm) = parm_type;
19844 attributes = DECL_ATTRIBUTES (pattern_parm);
19845 if (DECL_ATTRIBUTES (decl_parm) != attributes)
19847 DECL_ATTRIBUTES (decl_parm) = attributes;
19848 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
19850 decl_parm = DECL_CHAIN (decl_parm);
19853 /* Merge additional specifiers from the CODE_PATTERN. */
19854 if (DECL_DECLARED_INLINE_P (code_pattern)
19855 && !DECL_DECLARED_INLINE_P (decl))
19856 DECL_DECLARED_INLINE_P (decl) = 1;
19858 else if (VAR_P (decl))
19860 DECL_INITIAL (decl) =
19861 tsubst_expr (DECL_INITIAL (code_pattern), args,
19862 tf_error, DECL_TI_TEMPLATE (decl),
19863 /*integral_constant_expression_p=*/false);
19864 if (VAR_HAD_UNKNOWN_BOUND (decl))
19865 TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
19866 tf_error, DECL_TI_TEMPLATE (decl));
19868 else
19869 gcc_unreachable ();
19871 pop_access_scope (decl);
19874 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
19875 substituted to get DECL. */
19877 tree
19878 template_for_substitution (tree decl)
19880 tree tmpl = DECL_TI_TEMPLATE (decl);
19882 /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
19883 for the instantiation. This is not always the most general
19884 template. Consider, for example:
19886 template <class T>
19887 struct S { template <class U> void f();
19888 template <> void f<int>(); };
19890 and an instantiation of S<double>::f<int>. We want TD to be the
19891 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
19892 while (/* An instantiation cannot have a definition, so we need a
19893 more general template. */
19894 DECL_TEMPLATE_INSTANTIATION (tmpl)
19895 /* We must also deal with friend templates. Given:
19897 template <class T> struct S {
19898 template <class U> friend void f() {};
19901 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
19902 so far as the language is concerned, but that's still
19903 where we get the pattern for the instantiation from. On
19904 other hand, if the definition comes outside the class, say:
19906 template <class T> struct S {
19907 template <class U> friend void f();
19909 template <class U> friend void f() {}
19911 we don't need to look any further. That's what the check for
19912 DECL_INITIAL is for. */
19913 || (TREE_CODE (decl) == FUNCTION_DECL
19914 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
19915 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
19917 /* The present template, TD, should not be a definition. If it
19918 were a definition, we should be using it! Note that we
19919 cannot restructure the loop to just keep going until we find
19920 a template with a definition, since that might go too far if
19921 a specialization was declared, but not defined. */
19923 /* Fetch the more general template. */
19924 tmpl = DECL_TI_TEMPLATE (tmpl);
19927 return tmpl;
19930 /* Returns true if we need to instantiate this template instance even if we
19931 know we aren't going to emit it.. */
19933 bool
19934 always_instantiate_p (tree decl)
19936 /* We always instantiate inline functions so that we can inline them. An
19937 explicit instantiation declaration prohibits implicit instantiation of
19938 non-inline functions. With high levels of optimization, we would
19939 normally inline non-inline functions -- but we're not allowed to do
19940 that for "extern template" functions. Therefore, we check
19941 DECL_DECLARED_INLINE_P, rather than possibly_inlined_p. */
19942 return ((TREE_CODE (decl) == FUNCTION_DECL
19943 && (DECL_DECLARED_INLINE_P (decl)
19944 || type_uses_auto (TREE_TYPE (TREE_TYPE (decl)))))
19945 /* And we need to instantiate static data members so that
19946 their initializers are available in integral constant
19947 expressions. */
19948 || (VAR_P (decl)
19949 && decl_maybe_constant_var_p (decl)));
19952 /* If FN has a noexcept-specifier that hasn't been instantiated yet,
19953 instantiate it now, modifying TREE_TYPE (fn). */
19955 void
19956 maybe_instantiate_noexcept (tree fn)
19958 tree fntype, spec, noex, clone;
19960 /* Don't instantiate a noexcept-specification from template context. */
19961 if (processing_template_decl)
19962 return;
19964 if (DECL_CLONED_FUNCTION_P (fn))
19965 fn = DECL_CLONED_FUNCTION (fn);
19966 fntype = TREE_TYPE (fn);
19967 spec = TYPE_RAISES_EXCEPTIONS (fntype);
19969 if (!spec || !TREE_PURPOSE (spec))
19970 return;
19972 noex = TREE_PURPOSE (spec);
19974 if (TREE_CODE (noex) == DEFERRED_NOEXCEPT)
19976 if (DEFERRED_NOEXCEPT_PATTERN (noex) == NULL_TREE)
19977 spec = get_defaulted_eh_spec (fn);
19978 else if (push_tinst_level (fn))
19980 push_access_scope (fn);
19981 push_deferring_access_checks (dk_no_deferred);
19982 input_location = DECL_SOURCE_LOCATION (fn);
19983 noex = tsubst_copy_and_build (DEFERRED_NOEXCEPT_PATTERN (noex),
19984 DEFERRED_NOEXCEPT_ARGS (noex),
19985 tf_warning_or_error, fn,
19986 /*function_p=*/false,
19987 /*integral_constant_expression_p=*/true);
19988 pop_deferring_access_checks ();
19989 pop_access_scope (fn);
19990 pop_tinst_level ();
19991 spec = build_noexcept_spec (noex, tf_warning_or_error);
19992 if (spec == error_mark_node)
19993 spec = noexcept_false_spec;
19995 else
19996 spec = noexcept_false_spec;
19998 TREE_TYPE (fn) = build_exception_variant (fntype, spec);
20001 FOR_EACH_CLONE (clone, fn)
20003 if (TREE_TYPE (clone) == fntype)
20004 TREE_TYPE (clone) = TREE_TYPE (fn);
20005 else
20006 TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone), spec);
20010 /* Produce the definition of D, a _DECL generated from a template. If
20011 DEFER_OK is nonzero, then we don't have to actually do the
20012 instantiation now; we just have to do it sometime. Normally it is
20013 an error if this is an explicit instantiation but D is undefined.
20014 EXPL_INST_CLASS_MEM_P is true iff D is a member of an
20015 explicitly instantiated class template. */
20017 tree
20018 instantiate_decl (tree d, int defer_ok,
20019 bool expl_inst_class_mem_p)
20021 tree tmpl = DECL_TI_TEMPLATE (d);
20022 tree gen_args;
20023 tree args;
20024 tree td;
20025 tree code_pattern;
20026 tree spec;
20027 tree gen_tmpl;
20028 bool pattern_defined;
20029 location_t saved_loc = input_location;
20030 int saved_unevaluated_operand = cp_unevaluated_operand;
20031 int saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
20032 bool external_p;
20033 bool deleted_p;
20034 tree fn_context;
20035 bool nested;
20037 /* This function should only be used to instantiate templates for
20038 functions and static member variables. */
20039 gcc_assert (VAR_OR_FUNCTION_DECL_P (d));
20041 /* Variables are never deferred; if instantiation is required, they
20042 are instantiated right away. That allows for better code in the
20043 case that an expression refers to the value of the variable --
20044 if the variable has a constant value the referring expression can
20045 take advantage of that fact. */
20046 if (VAR_P (d)
20047 || DECL_DECLARED_CONSTEXPR_P (d))
20048 defer_ok = 0;
20050 /* Don't instantiate cloned functions. Instead, instantiate the
20051 functions they cloned. */
20052 if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
20053 d = DECL_CLONED_FUNCTION (d);
20055 if (DECL_TEMPLATE_INSTANTIATED (d)
20056 || (TREE_CODE (d) == FUNCTION_DECL
20057 && DECL_DEFAULTED_FN (d) && DECL_INITIAL (d))
20058 || DECL_TEMPLATE_SPECIALIZATION (d))
20059 /* D has already been instantiated or explicitly specialized, so
20060 there's nothing for us to do here.
20062 It might seem reasonable to check whether or not D is an explicit
20063 instantiation, and, if so, stop here. But when an explicit
20064 instantiation is deferred until the end of the compilation,
20065 DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
20066 the instantiation. */
20067 return d;
20069 /* Check to see whether we know that this template will be
20070 instantiated in some other file, as with "extern template"
20071 extension. */
20072 external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
20074 /* In general, we do not instantiate such templates. */
20075 if (external_p && !always_instantiate_p (d))
20076 return d;
20078 gen_tmpl = most_general_template (tmpl);
20079 gen_args = DECL_TI_ARGS (d);
20081 if (tmpl != gen_tmpl)
20082 /* We should already have the extra args. */
20083 gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
20084 == TMPL_ARGS_DEPTH (gen_args));
20085 /* And what's in the hash table should match D. */
20086 gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
20087 || spec == NULL_TREE);
20089 /* This needs to happen before any tsubsting. */
20090 if (! push_tinst_level (d))
20091 return d;
20093 timevar_push (TV_TEMPLATE_INST);
20095 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
20096 for the instantiation. */
20097 td = template_for_substitution (d);
20098 code_pattern = DECL_TEMPLATE_RESULT (td);
20100 /* We should never be trying to instantiate a member of a class
20101 template or partial specialization. */
20102 gcc_assert (d != code_pattern);
20104 if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
20105 || DECL_TEMPLATE_SPECIALIZATION (td))
20106 /* In the case of a friend template whose definition is provided
20107 outside the class, we may have too many arguments. Drop the
20108 ones we don't need. The same is true for specializations. */
20109 args = get_innermost_template_args
20110 (gen_args, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td)));
20111 else
20112 args = gen_args;
20114 if (TREE_CODE (d) == FUNCTION_DECL)
20116 deleted_p = DECL_DELETED_FN (code_pattern);
20117 pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE
20118 || DECL_DEFAULTED_OUTSIDE_CLASS_P (code_pattern)
20119 || deleted_p);
20121 else
20123 deleted_p = false;
20124 pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
20127 /* We may be in the middle of deferred access check. Disable it now. */
20128 push_deferring_access_checks (dk_no_deferred);
20130 /* Unless an explicit instantiation directive has already determined
20131 the linkage of D, remember that a definition is available for
20132 this entity. */
20133 if (pattern_defined
20134 && !DECL_INTERFACE_KNOWN (d)
20135 && !DECL_NOT_REALLY_EXTERN (d))
20136 mark_definable (d);
20138 DECL_SOURCE_LOCATION (td) = DECL_SOURCE_LOCATION (code_pattern);
20139 DECL_SOURCE_LOCATION (d) = DECL_SOURCE_LOCATION (code_pattern);
20140 input_location = DECL_SOURCE_LOCATION (d);
20142 /* If D is a member of an explicitly instantiated class template,
20143 and no definition is available, treat it like an implicit
20144 instantiation. */
20145 if (!pattern_defined && expl_inst_class_mem_p
20146 && DECL_EXPLICIT_INSTANTIATION (d))
20148 /* Leave linkage flags alone on instantiations with anonymous
20149 visibility. */
20150 if (TREE_PUBLIC (d))
20152 DECL_NOT_REALLY_EXTERN (d) = 0;
20153 DECL_INTERFACE_KNOWN (d) = 0;
20155 SET_DECL_IMPLICIT_INSTANTIATION (d);
20158 /* Defer all other templates, unless we have been explicitly
20159 forbidden from doing so. */
20160 if (/* If there is no definition, we cannot instantiate the
20161 template. */
20162 ! pattern_defined
20163 /* If it's OK to postpone instantiation, do so. */
20164 || defer_ok
20165 /* If this is a static data member that will be defined
20166 elsewhere, we don't want to instantiate the entire data
20167 member, but we do want to instantiate the initializer so that
20168 we can substitute that elsewhere. */
20169 || (external_p && VAR_P (d))
20170 /* Handle here a deleted function too, avoid generating
20171 its body (c++/61080). */
20172 || deleted_p)
20174 /* The definition of the static data member is now required so
20175 we must substitute the initializer. */
20176 if (VAR_P (d)
20177 && !DECL_INITIAL (d)
20178 && DECL_INITIAL (code_pattern))
20180 tree ns;
20181 tree init;
20182 bool const_init = false;
20183 bool enter_context = DECL_CLASS_SCOPE_P (d);
20185 ns = decl_namespace_context (d);
20186 push_nested_namespace (ns);
20187 if (enter_context)
20188 push_nested_class (DECL_CONTEXT (d));
20189 init = tsubst_expr (DECL_INITIAL (code_pattern),
20190 args,
20191 tf_warning_or_error, NULL_TREE,
20192 /*integral_constant_expression_p=*/false);
20193 /* If instantiating the initializer involved instantiating this
20194 again, don't call cp_finish_decl twice. */
20195 if (!DECL_INITIAL (d))
20197 /* Make sure the initializer is still constant, in case of
20198 circular dependency (template/instantiate6.C). */
20199 const_init
20200 = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
20201 cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
20202 /*asmspec_tree=*/NULL_TREE,
20203 LOOKUP_ONLYCONVERTING);
20205 if (enter_context)
20206 pop_nested_class ();
20207 pop_nested_namespace (ns);
20210 /* We restore the source position here because it's used by
20211 add_pending_template. */
20212 input_location = saved_loc;
20214 if (at_eof && !pattern_defined
20215 && DECL_EXPLICIT_INSTANTIATION (d)
20216 && DECL_NOT_REALLY_EXTERN (d))
20217 /* [temp.explicit]
20219 The definition of a non-exported function template, a
20220 non-exported member function template, or a non-exported
20221 member function or static data member of a class template
20222 shall be present in every translation unit in which it is
20223 explicitly instantiated. */
20224 permerror (input_location, "explicit instantiation of %qD "
20225 "but no definition available", d);
20227 /* If we're in unevaluated context, we just wanted to get the
20228 constant value; this isn't an odr use, so don't queue
20229 a full instantiation. */
20230 if (cp_unevaluated_operand != 0)
20231 goto out;
20232 /* ??? Historically, we have instantiated inline functions, even
20233 when marked as "extern template". */
20234 if (!(external_p && VAR_P (d)))
20235 add_pending_template (d);
20236 goto out;
20238 /* Tell the repository that D is available in this translation unit
20239 -- and see if it is supposed to be instantiated here. */
20240 if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
20242 /* In a PCH file, despite the fact that the repository hasn't
20243 requested instantiation in the PCH it is still possible that
20244 an instantiation will be required in a file that includes the
20245 PCH. */
20246 if (pch_file)
20247 add_pending_template (d);
20248 /* Instantiate inline functions so that the inliner can do its
20249 job, even though we'll not be emitting a copy of this
20250 function. */
20251 if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
20252 goto out;
20255 fn_context = decl_function_context (d);
20256 nested = (current_function_decl != NULL_TREE);
20257 if (!fn_context)
20258 push_to_top_level ();
20259 else
20261 if (nested)
20262 push_function_context ();
20263 cp_unevaluated_operand = 0;
20264 c_inhibit_evaluation_warnings = 0;
20267 /* Mark D as instantiated so that recursive calls to
20268 instantiate_decl do not try to instantiate it again. */
20269 DECL_TEMPLATE_INSTANTIATED (d) = 1;
20271 /* Regenerate the declaration in case the template has been modified
20272 by a subsequent redeclaration. */
20273 regenerate_decl_from_template (d, td);
20275 /* We already set the file and line above. Reset them now in case
20276 they changed as a result of calling regenerate_decl_from_template. */
20277 input_location = DECL_SOURCE_LOCATION (d);
20279 if (VAR_P (d))
20281 tree init;
20282 bool const_init = false;
20284 /* Clear out DECL_RTL; whatever was there before may not be right
20285 since we've reset the type of the declaration. */
20286 SET_DECL_RTL (d, NULL);
20287 DECL_IN_AGGR_P (d) = 0;
20289 /* The initializer is placed in DECL_INITIAL by
20290 regenerate_decl_from_template so we don't need to
20291 push/pop_access_scope again here. Pull it out so that
20292 cp_finish_decl can process it. */
20293 init = DECL_INITIAL (d);
20294 DECL_INITIAL (d) = NULL_TREE;
20295 DECL_INITIALIZED_P (d) = 0;
20297 /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
20298 initializer. That function will defer actual emission until
20299 we have a chance to determine linkage. */
20300 DECL_EXTERNAL (d) = 0;
20302 /* Enter the scope of D so that access-checking works correctly. */
20303 bool enter_context = DECL_CLASS_SCOPE_P (d);
20304 if (enter_context)
20305 push_nested_class (DECL_CONTEXT (d));
20307 const_init = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
20308 cp_finish_decl (d, init, const_init, NULL_TREE, 0);
20310 if (enter_context)
20311 pop_nested_class ();
20313 if (variable_template_p (td))
20314 note_variable_template_instantiation (d);
20316 else if (TREE_CODE (d) == FUNCTION_DECL && DECL_DEFAULTED_FN (code_pattern))
20317 synthesize_method (d);
20318 else if (TREE_CODE (d) == FUNCTION_DECL)
20320 hash_map<tree, tree> *saved_local_specializations;
20321 tree subst_decl;
20322 tree tmpl_parm;
20323 tree spec_parm;
20324 tree block = NULL_TREE;
20326 /* Save away the current list, in case we are instantiating one
20327 template from within the body of another. */
20328 saved_local_specializations = local_specializations;
20330 /* Set up the list of local specializations. */
20331 local_specializations = new hash_map<tree, tree>;
20333 /* Set up context. */
20334 if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern)
20335 && TREE_CODE (DECL_CONTEXT (code_pattern)) == FUNCTION_DECL)
20336 block = push_stmt_list ();
20337 else
20338 start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
20340 /* Some typedefs referenced from within the template code need to be
20341 access checked at template instantiation time, i.e now. These
20342 types were added to the template at parsing time. Let's get those
20343 and perform the access checks then. */
20344 perform_typedefs_access_check (DECL_TEMPLATE_RESULT (gen_tmpl),
20345 gen_args);
20347 /* Create substitution entries for the parameters. */
20348 subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
20349 tmpl_parm = DECL_ARGUMENTS (subst_decl);
20350 spec_parm = DECL_ARGUMENTS (d);
20351 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
20353 register_local_specialization (spec_parm, tmpl_parm);
20354 spec_parm = skip_artificial_parms_for (d, spec_parm);
20355 tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
20357 for (; tmpl_parm; tmpl_parm = DECL_CHAIN (tmpl_parm))
20359 if (!DECL_PACK_P (tmpl_parm))
20361 register_local_specialization (spec_parm, tmpl_parm);
20362 spec_parm = DECL_CHAIN (spec_parm);
20364 else
20366 /* Register the (value) argument pack as a specialization of
20367 TMPL_PARM, then move on. */
20368 tree argpack = extract_fnparm_pack (tmpl_parm, &spec_parm);
20369 register_local_specialization (argpack, tmpl_parm);
20372 gcc_assert (!spec_parm);
20374 /* Substitute into the body of the function. */
20375 if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern))
20376 tsubst_omp_udr (DECL_SAVED_TREE (code_pattern), args,
20377 tf_warning_or_error, tmpl);
20378 else
20380 tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
20381 tf_warning_or_error, tmpl,
20382 /*integral_constant_expression_p=*/false);
20384 /* Set the current input_location to the end of the function
20385 so that finish_function knows where we are. */
20386 input_location
20387 = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
20389 /* Remember if we saw an infinite loop in the template. */
20390 current_function_infinite_loop
20391 = DECL_STRUCT_FUNCTION (code_pattern)->language->infinite_loop;
20394 /* We don't need the local specializations any more. */
20395 delete local_specializations;
20396 local_specializations = saved_local_specializations;
20398 /* Finish the function. */
20399 if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern)
20400 && TREE_CODE (DECL_CONTEXT (code_pattern)) == FUNCTION_DECL)
20401 DECL_SAVED_TREE (d) = pop_stmt_list (block);
20402 else
20404 d = finish_function (0);
20405 expand_or_defer_fn (d);
20408 if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern))
20409 cp_check_omp_declare_reduction (d);
20412 /* We're not deferring instantiation any more. */
20413 TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
20415 if (!fn_context)
20416 pop_from_top_level ();
20417 else if (nested)
20418 pop_function_context ();
20420 out:
20421 input_location = saved_loc;
20422 cp_unevaluated_operand = saved_unevaluated_operand;
20423 c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
20424 pop_deferring_access_checks ();
20425 pop_tinst_level ();
20427 timevar_pop (TV_TEMPLATE_INST);
20429 return d;
20432 /* Run through the list of templates that we wish we could
20433 instantiate, and instantiate any we can. RETRIES is the
20434 number of times we retry pending template instantiation. */
20436 void
20437 instantiate_pending_templates (int retries)
20439 int reconsider;
20440 location_t saved_loc = input_location;
20442 /* Instantiating templates may trigger vtable generation. This in turn
20443 may require further template instantiations. We place a limit here
20444 to avoid infinite loop. */
20445 if (pending_templates && retries >= max_tinst_depth)
20447 tree decl = pending_templates->tinst->decl;
20449 fatal_error (input_location,
20450 "template instantiation depth exceeds maximum of %d"
20451 " instantiating %q+D, possibly from virtual table generation"
20452 " (use -ftemplate-depth= to increase the maximum)",
20453 max_tinst_depth, decl);
20454 if (TREE_CODE (decl) == FUNCTION_DECL)
20455 /* Pretend that we defined it. */
20456 DECL_INITIAL (decl) = error_mark_node;
20457 return;
20462 struct pending_template **t = &pending_templates;
20463 struct pending_template *last = NULL;
20464 reconsider = 0;
20465 while (*t)
20467 tree instantiation = reopen_tinst_level ((*t)->tinst);
20468 bool complete = false;
20470 if (TYPE_P (instantiation))
20472 tree fn;
20474 if (!COMPLETE_TYPE_P (instantiation))
20476 instantiate_class_template (instantiation);
20477 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
20478 for (fn = TYPE_METHODS (instantiation);
20480 fn = TREE_CHAIN (fn))
20481 if (! DECL_ARTIFICIAL (fn))
20482 instantiate_decl (fn,
20483 /*defer_ok=*/0,
20484 /*expl_inst_class_mem_p=*/false);
20485 if (COMPLETE_TYPE_P (instantiation))
20486 reconsider = 1;
20489 complete = COMPLETE_TYPE_P (instantiation);
20491 else
20493 if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
20494 && !DECL_TEMPLATE_INSTANTIATED (instantiation))
20496 instantiation
20497 = instantiate_decl (instantiation,
20498 /*defer_ok=*/0,
20499 /*expl_inst_class_mem_p=*/false);
20500 if (DECL_TEMPLATE_INSTANTIATED (instantiation))
20501 reconsider = 1;
20504 complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
20505 || DECL_TEMPLATE_INSTANTIATED (instantiation));
20508 if (complete)
20509 /* If INSTANTIATION has been instantiated, then we don't
20510 need to consider it again in the future. */
20511 *t = (*t)->next;
20512 else
20514 last = *t;
20515 t = &(*t)->next;
20517 tinst_depth = 0;
20518 current_tinst_level = NULL;
20520 last_pending_template = last;
20522 while (reconsider);
20524 input_location = saved_loc;
20527 /* Substitute ARGVEC into T, which is a list of initializers for
20528 either base class or a non-static data member. The TREE_PURPOSEs
20529 are DECLs, and the TREE_VALUEs are the initializer values. Used by
20530 instantiate_decl. */
20532 static tree
20533 tsubst_initializer_list (tree t, tree argvec)
20535 tree inits = NULL_TREE;
20537 for (; t; t = TREE_CHAIN (t))
20539 tree decl;
20540 tree init;
20541 tree expanded_bases = NULL_TREE;
20542 tree expanded_arguments = NULL_TREE;
20543 int i, len = 1;
20545 if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
20547 tree expr;
20548 tree arg;
20550 /* Expand the base class expansion type into separate base
20551 classes. */
20552 expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
20553 tf_warning_or_error,
20554 NULL_TREE);
20555 if (expanded_bases == error_mark_node)
20556 continue;
20558 /* We'll be building separate TREE_LISTs of arguments for
20559 each base. */
20560 len = TREE_VEC_LENGTH (expanded_bases);
20561 expanded_arguments = make_tree_vec (len);
20562 for (i = 0; i < len; i++)
20563 TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
20565 /* Build a dummy EXPR_PACK_EXPANSION that will be used to
20566 expand each argument in the TREE_VALUE of t. */
20567 expr = make_node (EXPR_PACK_EXPANSION);
20568 PACK_EXPANSION_LOCAL_P (expr) = true;
20569 PACK_EXPANSION_PARAMETER_PACKS (expr) =
20570 PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
20572 if (TREE_VALUE (t) == void_type_node)
20573 /* VOID_TYPE_NODE is used to indicate
20574 value-initialization. */
20576 for (i = 0; i < len; i++)
20577 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
20579 else
20581 /* Substitute parameter packs into each argument in the
20582 TREE_LIST. */
20583 in_base_initializer = 1;
20584 for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
20586 tree expanded_exprs;
20588 /* Expand the argument. */
20589 SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
20590 expanded_exprs
20591 = tsubst_pack_expansion (expr, argvec,
20592 tf_warning_or_error,
20593 NULL_TREE);
20594 if (expanded_exprs == error_mark_node)
20595 continue;
20597 /* Prepend each of the expanded expressions to the
20598 corresponding TREE_LIST in EXPANDED_ARGUMENTS. */
20599 for (i = 0; i < len; i++)
20601 TREE_VEC_ELT (expanded_arguments, i) =
20602 tree_cons (NULL_TREE,
20603 TREE_VEC_ELT (expanded_exprs, i),
20604 TREE_VEC_ELT (expanded_arguments, i));
20607 in_base_initializer = 0;
20609 /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
20610 since we built them backwards. */
20611 for (i = 0; i < len; i++)
20613 TREE_VEC_ELT (expanded_arguments, i) =
20614 nreverse (TREE_VEC_ELT (expanded_arguments, i));
20619 for (i = 0; i < len; ++i)
20621 if (expanded_bases)
20623 decl = TREE_VEC_ELT (expanded_bases, i);
20624 decl = expand_member_init (decl);
20625 init = TREE_VEC_ELT (expanded_arguments, i);
20627 else
20629 tree tmp;
20630 decl = tsubst_copy (TREE_PURPOSE (t), argvec,
20631 tf_warning_or_error, NULL_TREE);
20633 decl = expand_member_init (decl);
20634 if (decl && !DECL_P (decl))
20635 in_base_initializer = 1;
20637 init = TREE_VALUE (t);
20638 tmp = init;
20639 if (init != void_type_node)
20640 init = tsubst_expr (init, argvec,
20641 tf_warning_or_error, NULL_TREE,
20642 /*integral_constant_expression_p=*/false);
20643 if (init == NULL_TREE && tmp != NULL_TREE)
20644 /* If we had an initializer but it instantiated to nothing,
20645 value-initialize the object. This will only occur when
20646 the initializer was a pack expansion where the parameter
20647 packs used in that expansion were of length zero. */
20648 init = void_type_node;
20649 in_base_initializer = 0;
20652 if (decl)
20654 init = build_tree_list (decl, init);
20655 TREE_CHAIN (init) = inits;
20656 inits = init;
20660 return inits;
20663 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
20665 static void
20666 set_current_access_from_decl (tree decl)
20668 if (TREE_PRIVATE (decl))
20669 current_access_specifier = access_private_node;
20670 else if (TREE_PROTECTED (decl))
20671 current_access_specifier = access_protected_node;
20672 else
20673 current_access_specifier = access_public_node;
20676 /* Instantiate an enumerated type. TAG is the template type, NEWTAG
20677 is the instantiation (which should have been created with
20678 start_enum) and ARGS are the template arguments to use. */
20680 static void
20681 tsubst_enum (tree tag, tree newtag, tree args)
20683 tree e;
20685 if (SCOPED_ENUM_P (newtag))
20686 begin_scope (sk_scoped_enum, newtag);
20688 for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
20690 tree value;
20691 tree decl;
20693 decl = TREE_VALUE (e);
20694 /* Note that in a template enum, the TREE_VALUE is the
20695 CONST_DECL, not the corresponding INTEGER_CST. */
20696 value = tsubst_expr (DECL_INITIAL (decl),
20697 args, tf_warning_or_error, NULL_TREE,
20698 /*integral_constant_expression_p=*/true);
20700 /* Give this enumeration constant the correct access. */
20701 set_current_access_from_decl (decl);
20703 /* Actually build the enumerator itself. */
20704 build_enumerator
20705 (DECL_NAME (decl), value, newtag, DECL_SOURCE_LOCATION (decl));
20708 if (SCOPED_ENUM_P (newtag))
20709 finish_scope ();
20711 finish_enum_value_list (newtag);
20712 finish_enum (newtag);
20714 DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
20715 = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
20718 /* DECL is a FUNCTION_DECL that is a template specialization. Return
20719 its type -- but without substituting the innermost set of template
20720 arguments. So, innermost set of template parameters will appear in
20721 the type. */
20723 tree
20724 get_mostly_instantiated_function_type (tree decl)
20726 /* For a function, DECL_TI_TEMPLATE is partially instantiated. */
20727 return TREE_TYPE (DECL_TI_TEMPLATE (decl));
20730 /* Return truthvalue if we're processing a template different from
20731 the last one involved in diagnostics. */
20732 bool
20733 problematic_instantiation_changed (void)
20735 return current_tinst_level != last_error_tinst_level;
20738 /* Remember current template involved in diagnostics. */
20739 void
20740 record_last_problematic_instantiation (void)
20742 last_error_tinst_level = current_tinst_level;
20745 struct tinst_level *
20746 current_instantiation (void)
20748 return current_tinst_level;
20751 /* Return TRUE if current_function_decl is being instantiated, false
20752 otherwise. */
20754 bool
20755 instantiating_current_function_p (void)
20757 return (current_instantiation ()
20758 && current_instantiation ()->decl == current_function_decl);
20761 /* [temp.param] Check that template non-type parm TYPE is of an allowable
20762 type. Return zero for ok, nonzero for disallowed. Issue error and
20763 warning messages under control of COMPLAIN. */
20765 static int
20766 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
20768 if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
20769 return 0;
20770 else if (POINTER_TYPE_P (type))
20771 return 0;
20772 else if (TYPE_PTRMEM_P (type))
20773 return 0;
20774 else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
20775 return 0;
20776 else if (TREE_CODE (type) == TYPENAME_TYPE)
20777 return 0;
20778 else if (TREE_CODE (type) == DECLTYPE_TYPE)
20779 return 0;
20780 else if (TREE_CODE (type) == NULLPTR_TYPE)
20781 return 0;
20783 if (complain & tf_error)
20785 if (type == error_mark_node)
20786 inform (input_location, "invalid template non-type parameter");
20787 else
20788 error ("%q#T is not a valid type for a template non-type parameter",
20789 type);
20791 return 1;
20794 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
20795 Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
20797 static bool
20798 dependent_type_p_r (tree type)
20800 tree scope;
20802 /* [temp.dep.type]
20804 A type is dependent if it is:
20806 -- a template parameter. Template template parameters are types
20807 for us (since TYPE_P holds true for them) so we handle
20808 them here. */
20809 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
20810 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
20811 return true;
20812 /* -- a qualified-id with a nested-name-specifier which contains a
20813 class-name that names a dependent type or whose unqualified-id
20814 names a dependent type. */
20815 if (TREE_CODE (type) == TYPENAME_TYPE)
20816 return true;
20817 /* -- a cv-qualified type where the cv-unqualified type is
20818 dependent.
20819 No code is necessary for this bullet; the code below handles
20820 cv-qualified types, and we don't want to strip aliases with
20821 TYPE_MAIN_VARIANT because of DR 1558. */
20822 /* -- a compound type constructed from any dependent type. */
20823 if (TYPE_PTRMEM_P (type))
20824 return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
20825 || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
20826 (type)));
20827 else if (TYPE_PTR_P (type)
20828 || TREE_CODE (type) == REFERENCE_TYPE)
20829 return dependent_type_p (TREE_TYPE (type));
20830 else if (TREE_CODE (type) == FUNCTION_TYPE
20831 || TREE_CODE (type) == METHOD_TYPE)
20833 tree arg_type;
20835 if (dependent_type_p (TREE_TYPE (type)))
20836 return true;
20837 for (arg_type = TYPE_ARG_TYPES (type);
20838 arg_type;
20839 arg_type = TREE_CHAIN (arg_type))
20840 if (dependent_type_p (TREE_VALUE (arg_type)))
20841 return true;
20842 return false;
20844 /* -- an array type constructed from any dependent type or whose
20845 size is specified by a constant expression that is
20846 value-dependent.
20848 We checked for type- and value-dependence of the bounds in
20849 compute_array_index_type, so TYPE_DEPENDENT_P is already set. */
20850 if (TREE_CODE (type) == ARRAY_TYPE)
20852 if (TYPE_DOMAIN (type)
20853 && dependent_type_p (TYPE_DOMAIN (type)))
20854 return true;
20855 return dependent_type_p (TREE_TYPE (type));
20858 /* -- a template-id in which either the template name is a template
20859 parameter ... */
20860 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
20861 return true;
20862 /* ... or any of the template arguments is a dependent type or
20863 an expression that is type-dependent or value-dependent. */
20864 else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
20865 && (any_dependent_template_arguments_p
20866 (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
20867 return true;
20868 /* For an alias template specialization, check the arguments both to the
20869 class template and the alias template. */
20870 else if (alias_template_specialization_p (type)
20871 && (any_dependent_template_arguments_p
20872 (INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (type)))))
20873 return true;
20875 /* All TYPEOF_TYPEs, DECLTYPE_TYPEs, and UNDERLYING_TYPEs are
20876 dependent; if the argument of the `typeof' expression is not
20877 type-dependent, then it should already been have resolved. */
20878 if (TREE_CODE (type) == TYPEOF_TYPE
20879 || TREE_CODE (type) == DECLTYPE_TYPE
20880 || TREE_CODE (type) == UNDERLYING_TYPE)
20881 return true;
20883 /* A template argument pack is dependent if any of its packed
20884 arguments are. */
20885 if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
20887 tree args = ARGUMENT_PACK_ARGS (type);
20888 int i, len = TREE_VEC_LENGTH (args);
20889 for (i = 0; i < len; ++i)
20890 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
20891 return true;
20894 /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
20895 be template parameters. */
20896 if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
20897 return true;
20899 /* The standard does not specifically mention types that are local
20900 to template functions or local classes, but they should be
20901 considered dependent too. For example:
20903 template <int I> void f() {
20904 enum E { a = I };
20905 S<sizeof (E)> s;
20908 The size of `E' cannot be known until the value of `I' has been
20909 determined. Therefore, `E' must be considered dependent. */
20910 scope = TYPE_CONTEXT (type);
20911 if (scope && TYPE_P (scope))
20912 return dependent_type_p (scope);
20913 /* Don't use type_dependent_expression_p here, as it can lead
20914 to infinite recursion trying to determine whether a lambda
20915 nested in a lambda is dependent (c++/47687). */
20916 else if (scope && TREE_CODE (scope) == FUNCTION_DECL
20917 && DECL_LANG_SPECIFIC (scope)
20918 && DECL_TEMPLATE_INFO (scope)
20919 && (any_dependent_template_arguments_p
20920 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (scope)))))
20921 return true;
20923 /* Other types are non-dependent. */
20924 return false;
20927 /* Returns TRUE if TYPE is dependent, in the sense of
20928 [temp.dep.type]. Note that a NULL type is considered dependent. */
20930 bool
20931 dependent_type_p (tree type)
20933 /* If there are no template parameters in scope, then there can't be
20934 any dependent types. */
20935 if (!processing_template_decl)
20937 /* If we are not processing a template, then nobody should be
20938 providing us with a dependent type. */
20939 gcc_assert (type);
20940 gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
20941 return false;
20944 /* If the type is NULL, we have not computed a type for the entity
20945 in question; in that case, the type is dependent. */
20946 if (!type)
20947 return true;
20949 /* Erroneous types can be considered non-dependent. */
20950 if (type == error_mark_node)
20951 return false;
20953 /* If we have not already computed the appropriate value for TYPE,
20954 do so now. */
20955 if (!TYPE_DEPENDENT_P_VALID (type))
20957 TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
20958 TYPE_DEPENDENT_P_VALID (type) = 1;
20961 return TYPE_DEPENDENT_P (type);
20964 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
20965 lookup. In other words, a dependent type that is not the current
20966 instantiation. */
20968 bool
20969 dependent_scope_p (tree scope)
20971 return (scope && TYPE_P (scope) && dependent_type_p (scope)
20972 && !currently_open_class (scope));
20975 /* T is a SCOPE_REF; return whether we need to consider it
20976 instantiation-dependent so that we can check access at instantiation
20977 time even though we know which member it resolves to. */
20979 static bool
20980 instantiation_dependent_scope_ref_p (tree t)
20982 if (DECL_P (TREE_OPERAND (t, 1))
20983 && CLASS_TYPE_P (TREE_OPERAND (t, 0))
20984 && accessible_in_template_p (TREE_OPERAND (t, 0),
20985 TREE_OPERAND (t, 1)))
20986 return false;
20987 else
20988 return true;
20991 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
20992 [temp.dep.constexpr]. EXPRESSION is already known to be a constant
20993 expression. */
20995 /* Note that this predicate is not appropriate for general expressions;
20996 only constant expressions (that satisfy potential_constant_expression)
20997 can be tested for value dependence. */
20999 bool
21000 value_dependent_expression_p (tree expression)
21002 if (!processing_template_decl)
21003 return false;
21005 /* A name declared with a dependent type. */
21006 if (DECL_P (expression) && type_dependent_expression_p (expression))
21007 return true;
21009 switch (TREE_CODE (expression))
21011 case IDENTIFIER_NODE:
21012 /* A name that has not been looked up -- must be dependent. */
21013 return true;
21015 case TEMPLATE_PARM_INDEX:
21016 /* A non-type template parm. */
21017 return true;
21019 case CONST_DECL:
21020 /* A non-type template parm. */
21021 if (DECL_TEMPLATE_PARM_P (expression))
21022 return true;
21023 return value_dependent_expression_p (DECL_INITIAL (expression));
21025 case VAR_DECL:
21026 /* A constant with literal type and is initialized
21027 with an expression that is value-dependent.
21029 Note that a non-dependent parenthesized initializer will have
21030 already been replaced with its constant value, so if we see
21031 a TREE_LIST it must be dependent. */
21032 if (DECL_INITIAL (expression)
21033 && decl_constant_var_p (expression)
21034 && (TREE_CODE (DECL_INITIAL (expression)) == TREE_LIST
21035 /* cp_finish_decl doesn't fold reference initializers. */
21036 || TREE_CODE (TREE_TYPE (expression)) == REFERENCE_TYPE
21037 || value_dependent_expression_p (DECL_INITIAL (expression))))
21038 return true;
21039 return false;
21041 case DYNAMIC_CAST_EXPR:
21042 case STATIC_CAST_EXPR:
21043 case CONST_CAST_EXPR:
21044 case REINTERPRET_CAST_EXPR:
21045 case CAST_EXPR:
21046 /* These expressions are value-dependent if the type to which
21047 the cast occurs is dependent or the expression being casted
21048 is value-dependent. */
21050 tree type = TREE_TYPE (expression);
21052 if (dependent_type_p (type))
21053 return true;
21055 /* A functional cast has a list of operands. */
21056 expression = TREE_OPERAND (expression, 0);
21057 if (!expression)
21059 /* If there are no operands, it must be an expression such
21060 as "int()". This should not happen for aggregate types
21061 because it would form non-constant expressions. */
21062 gcc_assert (cxx_dialect >= cxx11
21063 || INTEGRAL_OR_ENUMERATION_TYPE_P (type));
21065 return false;
21068 if (TREE_CODE (expression) == TREE_LIST)
21069 return any_value_dependent_elements_p (expression);
21071 return value_dependent_expression_p (expression);
21074 case SIZEOF_EXPR:
21075 if (SIZEOF_EXPR_TYPE_P (expression))
21076 return dependent_type_p (TREE_TYPE (TREE_OPERAND (expression, 0)));
21077 /* FALLTHRU */
21078 case ALIGNOF_EXPR:
21079 case TYPEID_EXPR:
21080 /* A `sizeof' expression is value-dependent if the operand is
21081 type-dependent or is a pack expansion. */
21082 expression = TREE_OPERAND (expression, 0);
21083 if (PACK_EXPANSION_P (expression))
21084 return true;
21085 else if (TYPE_P (expression))
21086 return dependent_type_p (expression);
21087 return instantiation_dependent_expression_p (expression);
21089 case AT_ENCODE_EXPR:
21090 /* An 'encode' expression is value-dependent if the operand is
21091 type-dependent. */
21092 expression = TREE_OPERAND (expression, 0);
21093 return dependent_type_p (expression);
21095 case NOEXCEPT_EXPR:
21096 expression = TREE_OPERAND (expression, 0);
21097 return instantiation_dependent_expression_p (expression);
21099 case SCOPE_REF:
21100 /* All instantiation-dependent expressions should also be considered
21101 value-dependent. */
21102 return instantiation_dependent_scope_ref_p (expression);
21104 case COMPONENT_REF:
21105 return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
21106 || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
21108 case NONTYPE_ARGUMENT_PACK:
21109 /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
21110 is value-dependent. */
21112 tree values = ARGUMENT_PACK_ARGS (expression);
21113 int i, len = TREE_VEC_LENGTH (values);
21115 for (i = 0; i < len; ++i)
21116 if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
21117 return true;
21119 return false;
21122 case TRAIT_EXPR:
21124 tree type2 = TRAIT_EXPR_TYPE2 (expression);
21125 return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
21126 || (type2 ? dependent_type_p (type2) : false));
21129 case MODOP_EXPR:
21130 return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
21131 || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
21133 case ARRAY_REF:
21134 return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
21135 || (value_dependent_expression_p (TREE_OPERAND (expression, 1))));
21137 case ADDR_EXPR:
21139 tree op = TREE_OPERAND (expression, 0);
21140 return (value_dependent_expression_p (op)
21141 || has_value_dependent_address (op));
21144 case CALL_EXPR:
21146 tree fn = get_callee_fndecl (expression);
21147 int i, nargs;
21148 if (!fn && value_dependent_expression_p (CALL_EXPR_FN (expression)))
21149 return true;
21150 nargs = call_expr_nargs (expression);
21151 for (i = 0; i < nargs; ++i)
21153 tree op = CALL_EXPR_ARG (expression, i);
21154 /* In a call to a constexpr member function, look through the
21155 implicit ADDR_EXPR on the object argument so that it doesn't
21156 cause the call to be considered value-dependent. We also
21157 look through it in potential_constant_expression. */
21158 if (i == 0 && fn && DECL_DECLARED_CONSTEXPR_P (fn)
21159 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
21160 && TREE_CODE (op) == ADDR_EXPR)
21161 op = TREE_OPERAND (op, 0);
21162 if (value_dependent_expression_p (op))
21163 return true;
21165 return false;
21168 case TEMPLATE_ID_EXPR:
21169 /* If a TEMPLATE_ID_EXPR involves a dependent name, it will be
21170 type-dependent. */
21171 return type_dependent_expression_p (expression);
21173 case CONSTRUCTOR:
21175 unsigned ix;
21176 tree val;
21177 if (dependent_type_p (TREE_TYPE (expression)))
21178 return true;
21179 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), ix, val)
21180 if (value_dependent_expression_p (val))
21181 return true;
21182 return false;
21185 case STMT_EXPR:
21186 /* Treat a GNU statement expression as dependent to avoid crashing
21187 under instantiate_non_dependent_expr; it can't be constant. */
21188 return true;
21190 default:
21191 /* A constant expression is value-dependent if any subexpression is
21192 value-dependent. */
21193 switch (TREE_CODE_CLASS (TREE_CODE (expression)))
21195 case tcc_reference:
21196 case tcc_unary:
21197 case tcc_comparison:
21198 case tcc_binary:
21199 case tcc_expression:
21200 case tcc_vl_exp:
21202 int i, len = cp_tree_operand_length (expression);
21204 for (i = 0; i < len; i++)
21206 tree t = TREE_OPERAND (expression, i);
21208 /* In some cases, some of the operands may be missing.l
21209 (For example, in the case of PREDECREMENT_EXPR, the
21210 amount to increment by may be missing.) That doesn't
21211 make the expression dependent. */
21212 if (t && value_dependent_expression_p (t))
21213 return true;
21216 break;
21217 default:
21218 break;
21220 break;
21223 /* The expression is not value-dependent. */
21224 return false;
21227 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
21228 [temp.dep.expr]. Note that an expression with no type is
21229 considered dependent. Other parts of the compiler arrange for an
21230 expression with type-dependent subexpressions to have no type, so
21231 this function doesn't have to be fully recursive. */
21233 bool
21234 type_dependent_expression_p (tree expression)
21236 if (!processing_template_decl)
21237 return false;
21239 if (expression == NULL_TREE || expression == error_mark_node)
21240 return false;
21242 /* An unresolved name is always dependent. */
21243 if (identifier_p (expression) || TREE_CODE (expression) == USING_DECL)
21244 return true;
21246 /* Some expression forms are never type-dependent. */
21247 if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
21248 || TREE_CODE (expression) == SIZEOF_EXPR
21249 || TREE_CODE (expression) == ALIGNOF_EXPR
21250 || TREE_CODE (expression) == AT_ENCODE_EXPR
21251 || TREE_CODE (expression) == NOEXCEPT_EXPR
21252 || TREE_CODE (expression) == TRAIT_EXPR
21253 || TREE_CODE (expression) == TYPEID_EXPR
21254 || TREE_CODE (expression) == DELETE_EXPR
21255 || TREE_CODE (expression) == VEC_DELETE_EXPR
21256 || TREE_CODE (expression) == THROW_EXPR)
21257 return false;
21259 /* The types of these expressions depends only on the type to which
21260 the cast occurs. */
21261 if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
21262 || TREE_CODE (expression) == STATIC_CAST_EXPR
21263 || TREE_CODE (expression) == CONST_CAST_EXPR
21264 || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
21265 || TREE_CODE (expression) == IMPLICIT_CONV_EXPR
21266 || TREE_CODE (expression) == CAST_EXPR)
21267 return dependent_type_p (TREE_TYPE (expression));
21269 /* The types of these expressions depends only on the type created
21270 by the expression. */
21271 if (TREE_CODE (expression) == NEW_EXPR
21272 || TREE_CODE (expression) == VEC_NEW_EXPR)
21274 /* For NEW_EXPR tree nodes created inside a template, either
21275 the object type itself or a TREE_LIST may appear as the
21276 operand 1. */
21277 tree type = TREE_OPERAND (expression, 1);
21278 if (TREE_CODE (type) == TREE_LIST)
21279 /* This is an array type. We need to check array dimensions
21280 as well. */
21281 return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
21282 || value_dependent_expression_p
21283 (TREE_OPERAND (TREE_VALUE (type), 1));
21284 else
21285 return dependent_type_p (type);
21288 if (TREE_CODE (expression) == SCOPE_REF)
21290 tree scope = TREE_OPERAND (expression, 0);
21291 tree name = TREE_OPERAND (expression, 1);
21293 /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
21294 contains an identifier associated by name lookup with one or more
21295 declarations declared with a dependent type, or...a
21296 nested-name-specifier or qualified-id that names a member of an
21297 unknown specialization. */
21298 return (type_dependent_expression_p (name)
21299 || dependent_scope_p (scope));
21302 if (TREE_CODE (expression) == FUNCTION_DECL
21303 && DECL_LANG_SPECIFIC (expression)
21304 && DECL_TEMPLATE_INFO (expression)
21305 && (any_dependent_template_arguments_p
21306 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
21307 return true;
21309 if (TREE_CODE (expression) == TEMPLATE_DECL
21310 && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
21311 return false;
21313 if (TREE_CODE (expression) == STMT_EXPR)
21314 expression = stmt_expr_value_expr (expression);
21316 if (BRACE_ENCLOSED_INITIALIZER_P (expression))
21318 tree elt;
21319 unsigned i;
21321 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
21323 if (type_dependent_expression_p (elt))
21324 return true;
21326 return false;
21329 /* A static data member of the current instantiation with incomplete
21330 array type is type-dependent, as the definition and specializations
21331 can have different bounds. */
21332 if (VAR_P (expression)
21333 && DECL_CLASS_SCOPE_P (expression)
21334 && dependent_type_p (DECL_CONTEXT (expression))
21335 && VAR_HAD_UNKNOWN_BOUND (expression))
21336 return true;
21338 /* An array of unknown bound depending on a variadic parameter, eg:
21340 template<typename... Args>
21341 void foo (Args... args)
21343 int arr[] = { args... };
21346 template<int... vals>
21347 void bar ()
21349 int arr[] = { vals... };
21352 If the array has no length and has an initializer, it must be that
21353 we couldn't determine its length in cp_complete_array_type because
21354 it is dependent. */
21355 if (VAR_P (expression)
21356 && TREE_CODE (TREE_TYPE (expression)) == ARRAY_TYPE
21357 && !TYPE_DOMAIN (TREE_TYPE (expression))
21358 && DECL_INITIAL (expression))
21359 return true;
21361 /* A variable template specialization is type-dependent if it has any
21362 dependent template arguments. */
21363 if (VAR_P (expression)
21364 && DECL_LANG_SPECIFIC (expression)
21365 && DECL_TEMPLATE_INFO (expression)
21366 && variable_template_p (DECL_TI_TEMPLATE (expression)))
21367 return any_dependent_template_arguments_p (DECL_TI_ARGS (expression));
21369 if (TREE_TYPE (expression) == unknown_type_node)
21371 if (TREE_CODE (expression) == ADDR_EXPR)
21372 return type_dependent_expression_p (TREE_OPERAND (expression, 0));
21373 if (TREE_CODE (expression) == COMPONENT_REF
21374 || TREE_CODE (expression) == OFFSET_REF)
21376 if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
21377 return true;
21378 expression = TREE_OPERAND (expression, 1);
21379 if (identifier_p (expression))
21380 return false;
21382 /* SCOPE_REF with non-null TREE_TYPE is always non-dependent. */
21383 if (TREE_CODE (expression) == SCOPE_REF)
21384 return false;
21386 /* Always dependent, on the number of arguments if nothing else. */
21387 if (TREE_CODE (expression) == EXPR_PACK_EXPANSION)
21388 return true;
21390 if (BASELINK_P (expression))
21392 if (BASELINK_OPTYPE (expression)
21393 && dependent_type_p (BASELINK_OPTYPE (expression)))
21394 return true;
21395 expression = BASELINK_FUNCTIONS (expression);
21398 if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
21400 if (any_dependent_template_arguments_p
21401 (TREE_OPERAND (expression, 1)))
21402 return true;
21403 expression = TREE_OPERAND (expression, 0);
21405 gcc_assert (TREE_CODE (expression) == OVERLOAD
21406 || TREE_CODE (expression) == FUNCTION_DECL);
21408 while (expression)
21410 if (type_dependent_expression_p (OVL_CURRENT (expression)))
21411 return true;
21412 expression = OVL_NEXT (expression);
21414 return false;
21417 gcc_assert (TREE_CODE (expression) != TYPE_DECL);
21419 return (dependent_type_p (TREE_TYPE (expression)));
21422 /* walk_tree callback function for instantiation_dependent_expression_p,
21423 below. Returns non-zero if a dependent subexpression is found. */
21425 static tree
21426 instantiation_dependent_r (tree *tp, int *walk_subtrees,
21427 void * /*data*/)
21429 if (TYPE_P (*tp))
21431 /* We don't have to worry about decltype currently because decltype
21432 of an instantiation-dependent expr is a dependent type. This
21433 might change depending on the resolution of DR 1172. */
21434 *walk_subtrees = false;
21435 return NULL_TREE;
21437 enum tree_code code = TREE_CODE (*tp);
21438 switch (code)
21440 /* Don't treat an argument list as dependent just because it has no
21441 TREE_TYPE. */
21442 case TREE_LIST:
21443 case TREE_VEC:
21444 return NULL_TREE;
21446 case VAR_DECL:
21447 case CONST_DECL:
21448 /* A constant with a dependent initializer is dependent. */
21449 if (value_dependent_expression_p (*tp))
21450 return *tp;
21451 break;
21453 case TEMPLATE_PARM_INDEX:
21454 return *tp;
21456 /* Handle expressions with type operands. */
21457 case SIZEOF_EXPR:
21458 case ALIGNOF_EXPR:
21459 case TYPEID_EXPR:
21460 case AT_ENCODE_EXPR:
21462 tree op = TREE_OPERAND (*tp, 0);
21463 if (code == SIZEOF_EXPR && SIZEOF_EXPR_TYPE_P (*tp))
21464 op = TREE_TYPE (op);
21465 if (TYPE_P (op))
21467 if (dependent_type_p (op))
21468 return *tp;
21469 else
21471 *walk_subtrees = false;
21472 return NULL_TREE;
21475 break;
21478 case TRAIT_EXPR:
21479 if (dependent_type_p (TRAIT_EXPR_TYPE1 (*tp))
21480 || (TRAIT_EXPR_TYPE2 (*tp)
21481 && dependent_type_p (TRAIT_EXPR_TYPE2 (*tp))))
21482 return *tp;
21483 *walk_subtrees = false;
21484 return NULL_TREE;
21486 case COMPONENT_REF:
21487 if (identifier_p (TREE_OPERAND (*tp, 1)))
21488 /* In a template, finish_class_member_access_expr creates a
21489 COMPONENT_REF with an IDENTIFIER_NODE for op1 even if it isn't
21490 type-dependent, so that we can check access control at
21491 instantiation time (PR 42277). See also Core issue 1273. */
21492 return *tp;
21493 break;
21495 case SCOPE_REF:
21496 if (instantiation_dependent_scope_ref_p (*tp))
21497 return *tp;
21498 else
21499 break;
21501 /* Treat statement-expressions as dependent. */
21502 case BIND_EXPR:
21503 return *tp;
21505 default:
21506 break;
21509 if (type_dependent_expression_p (*tp))
21510 return *tp;
21511 else
21512 return NULL_TREE;
21515 /* Returns TRUE if the EXPRESSION is instantiation-dependent, in the
21516 sense defined by the ABI:
21518 "An expression is instantiation-dependent if it is type-dependent
21519 or value-dependent, or it has a subexpression that is type-dependent
21520 or value-dependent." */
21522 bool
21523 instantiation_dependent_expression_p (tree expression)
21525 tree result;
21527 if (!processing_template_decl)
21528 return false;
21530 if (expression == error_mark_node)
21531 return false;
21533 result = cp_walk_tree_without_duplicates (&expression,
21534 instantiation_dependent_r, NULL);
21535 return result != NULL_TREE;
21538 /* Like type_dependent_expression_p, but it also works while not processing
21539 a template definition, i.e. during substitution or mangling. */
21541 bool
21542 type_dependent_expression_p_push (tree expr)
21544 bool b;
21545 ++processing_template_decl;
21546 b = type_dependent_expression_p (expr);
21547 --processing_template_decl;
21548 return b;
21551 /* Returns TRUE if ARGS contains a type-dependent expression. */
21553 bool
21554 any_type_dependent_arguments_p (const vec<tree, va_gc> *args)
21556 unsigned int i;
21557 tree arg;
21559 FOR_EACH_VEC_SAFE_ELT (args, i, arg)
21561 if (type_dependent_expression_p (arg))
21562 return true;
21564 return false;
21567 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
21568 expressions) contains any type-dependent expressions. */
21570 bool
21571 any_type_dependent_elements_p (const_tree list)
21573 for (; list; list = TREE_CHAIN (list))
21574 if (type_dependent_expression_p (TREE_VALUE (list)))
21575 return true;
21577 return false;
21580 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
21581 expressions) contains any value-dependent expressions. */
21583 bool
21584 any_value_dependent_elements_p (const_tree list)
21586 for (; list; list = TREE_CHAIN (list))
21587 if (value_dependent_expression_p (TREE_VALUE (list)))
21588 return true;
21590 return false;
21593 /* Returns TRUE if the ARG (a template argument) is dependent. */
21595 bool
21596 dependent_template_arg_p (tree arg)
21598 if (!processing_template_decl)
21599 return false;
21601 /* Assume a template argument that was wrongly written by the user
21602 is dependent. This is consistent with what
21603 any_dependent_template_arguments_p [that calls this function]
21604 does. */
21605 if (!arg || arg == error_mark_node)
21606 return true;
21608 if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
21609 arg = ARGUMENT_PACK_SELECT_ARG (arg);
21611 if (TREE_CODE (arg) == TEMPLATE_DECL
21612 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
21613 return dependent_template_p (arg);
21614 else if (ARGUMENT_PACK_P (arg))
21616 tree args = ARGUMENT_PACK_ARGS (arg);
21617 int i, len = TREE_VEC_LENGTH (args);
21618 for (i = 0; i < len; ++i)
21620 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
21621 return true;
21624 return false;
21626 else if (TYPE_P (arg))
21627 return dependent_type_p (arg);
21628 else
21629 return (type_dependent_expression_p (arg)
21630 || value_dependent_expression_p (arg));
21633 /* Returns true if ARGS (a collection of template arguments) contains
21634 any types that require structural equality testing. */
21636 bool
21637 any_template_arguments_need_structural_equality_p (tree args)
21639 int i;
21640 int j;
21642 if (!args)
21643 return false;
21644 if (args == error_mark_node)
21645 return true;
21647 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
21649 tree level = TMPL_ARGS_LEVEL (args, i + 1);
21650 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
21652 tree arg = TREE_VEC_ELT (level, j);
21653 tree packed_args = NULL_TREE;
21654 int k, len = 1;
21656 if (ARGUMENT_PACK_P (arg))
21658 /* Look inside the argument pack. */
21659 packed_args = ARGUMENT_PACK_ARGS (arg);
21660 len = TREE_VEC_LENGTH (packed_args);
21663 for (k = 0; k < len; ++k)
21665 if (packed_args)
21666 arg = TREE_VEC_ELT (packed_args, k);
21668 if (error_operand_p (arg))
21669 return true;
21670 else if (TREE_CODE (arg) == TEMPLATE_DECL)
21671 continue;
21672 else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
21673 return true;
21674 else if (!TYPE_P (arg) && TREE_TYPE (arg)
21675 && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
21676 return true;
21681 return false;
21684 /* Returns true if ARGS (a collection of template arguments) contains
21685 any dependent arguments. */
21687 bool
21688 any_dependent_template_arguments_p (const_tree args)
21690 int i;
21691 int j;
21693 if (!args)
21694 return false;
21695 if (args == error_mark_node)
21696 return true;
21698 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
21700 const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
21701 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
21702 if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
21703 return true;
21706 return false;
21709 /* Returns TRUE if the template TMPL is dependent. */
21711 bool
21712 dependent_template_p (tree tmpl)
21714 if (TREE_CODE (tmpl) == OVERLOAD)
21716 while (tmpl)
21718 if (dependent_template_p (OVL_CURRENT (tmpl)))
21719 return true;
21720 tmpl = OVL_NEXT (tmpl);
21722 return false;
21725 /* Template template parameters are dependent. */
21726 if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
21727 || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
21728 return true;
21729 /* So are names that have not been looked up. */
21730 if (TREE_CODE (tmpl) == SCOPE_REF || identifier_p (tmpl))
21731 return true;
21732 /* So are member templates of dependent classes. */
21733 if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
21734 return dependent_type_p (DECL_CONTEXT (tmpl));
21735 return false;
21738 /* Returns TRUE if the specialization TMPL<ARGS> is dependent. */
21740 bool
21741 dependent_template_id_p (tree tmpl, tree args)
21743 return (dependent_template_p (tmpl)
21744 || any_dependent_template_arguments_p (args));
21747 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
21748 is dependent. */
21750 bool
21751 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
21753 int i;
21755 if (!processing_template_decl)
21756 return false;
21758 for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
21760 tree decl = TREE_VEC_ELT (declv, i);
21761 tree init = TREE_VEC_ELT (initv, i);
21762 tree cond = TREE_VEC_ELT (condv, i);
21763 tree incr = TREE_VEC_ELT (incrv, i);
21765 if (type_dependent_expression_p (decl))
21766 return true;
21768 if (init && type_dependent_expression_p (init))
21769 return true;
21771 if (type_dependent_expression_p (cond))
21772 return true;
21774 if (COMPARISON_CLASS_P (cond)
21775 && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
21776 || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
21777 return true;
21779 if (TREE_CODE (incr) == MODOP_EXPR)
21781 if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
21782 || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
21783 return true;
21785 else if (type_dependent_expression_p (incr))
21786 return true;
21787 else if (TREE_CODE (incr) == MODIFY_EXPR)
21789 if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
21790 return true;
21791 else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
21793 tree t = TREE_OPERAND (incr, 1);
21794 if (type_dependent_expression_p (TREE_OPERAND (t, 0))
21795 || type_dependent_expression_p (TREE_OPERAND (t, 1)))
21796 return true;
21801 return false;
21804 /* TYPE is a TYPENAME_TYPE. Returns the ordinary TYPE to which the
21805 TYPENAME_TYPE corresponds. Returns the original TYPENAME_TYPE if
21806 no such TYPE can be found. Note that this function peers inside
21807 uninstantiated templates and therefore should be used only in
21808 extremely limited situations. ONLY_CURRENT_P restricts this
21809 peering to the currently open classes hierarchy (which is required
21810 when comparing types). */
21812 tree
21813 resolve_typename_type (tree type, bool only_current_p)
21815 tree scope;
21816 tree name;
21817 tree decl;
21818 int quals;
21819 tree pushed_scope;
21820 tree result;
21822 gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
21824 scope = TYPE_CONTEXT (type);
21825 /* Usually the non-qualified identifier of a TYPENAME_TYPE is
21826 TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
21827 a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
21828 the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
21829 identifier of the TYPENAME_TYPE anymore.
21830 So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
21831 TYPENAME_TYPE instead, we avoid messing up with a possible
21832 typedef variant case. */
21833 name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
21835 /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
21836 it first before we can figure out what NAME refers to. */
21837 if (TREE_CODE (scope) == TYPENAME_TYPE)
21839 if (TYPENAME_IS_RESOLVING_P (scope))
21840 /* Given a class template A with a dependent base with nested type C,
21841 typedef typename A::C::C C will land us here, as trying to resolve
21842 the initial A::C leads to the local C typedef, which leads back to
21843 A::C::C. So we break the recursion now. */
21844 return type;
21845 else
21846 scope = resolve_typename_type (scope, only_current_p);
21848 /* If we don't know what SCOPE refers to, then we cannot resolve the
21849 TYPENAME_TYPE. */
21850 if (TREE_CODE (scope) == TYPENAME_TYPE)
21851 return type;
21852 /* If the SCOPE is a template type parameter, we have no way of
21853 resolving the name. */
21854 if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
21855 return type;
21856 /* If the SCOPE is not the current instantiation, there's no reason
21857 to look inside it. */
21858 if (only_current_p && !currently_open_class (scope))
21859 return type;
21860 /* If this is a typedef, we don't want to look inside (c++/11987). */
21861 if (typedef_variant_p (type))
21862 return type;
21863 /* If SCOPE isn't the template itself, it will not have a valid
21864 TYPE_FIELDS list. */
21865 if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
21866 /* scope is either the template itself or a compatible instantiation
21867 like X<T>, so look up the name in the original template. */
21868 scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
21869 else
21870 /* scope is a partial instantiation, so we can't do the lookup or we
21871 will lose the template arguments. */
21872 return type;
21873 /* Enter the SCOPE so that name lookup will be resolved as if we
21874 were in the class definition. In particular, SCOPE will no
21875 longer be considered a dependent type. */
21876 pushed_scope = push_scope (scope);
21877 /* Look up the declaration. */
21878 decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true,
21879 tf_warning_or_error);
21881 result = NULL_TREE;
21883 /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
21884 find a TEMPLATE_DECL. Otherwise, we want to find a TYPE_DECL. */
21885 if (!decl)
21886 /*nop*/;
21887 else if (identifier_p (TYPENAME_TYPE_FULLNAME (type))
21888 && TREE_CODE (decl) == TYPE_DECL)
21890 result = TREE_TYPE (decl);
21891 if (result == error_mark_node)
21892 result = NULL_TREE;
21894 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
21895 && DECL_CLASS_TEMPLATE_P (decl))
21897 tree tmpl;
21898 tree args;
21899 /* Obtain the template and the arguments. */
21900 tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
21901 args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
21902 /* Instantiate the template. */
21903 result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
21904 /*entering_scope=*/0,
21905 tf_error | tf_user);
21906 if (result == error_mark_node)
21907 result = NULL_TREE;
21910 /* Leave the SCOPE. */
21911 if (pushed_scope)
21912 pop_scope (pushed_scope);
21914 /* If we failed to resolve it, return the original typename. */
21915 if (!result)
21916 return type;
21918 /* If lookup found a typename type, resolve that too. */
21919 if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
21921 /* Ill-formed programs can cause infinite recursion here, so we
21922 must catch that. */
21923 TYPENAME_IS_RESOLVING_P (type) = 1;
21924 result = resolve_typename_type (result, only_current_p);
21925 TYPENAME_IS_RESOLVING_P (type) = 0;
21928 /* Qualify the resulting type. */
21929 quals = cp_type_quals (type);
21930 if (quals)
21931 result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
21933 return result;
21936 /* EXPR is an expression which is not type-dependent. Return a proxy
21937 for EXPR that can be used to compute the types of larger
21938 expressions containing EXPR. */
21940 tree
21941 build_non_dependent_expr (tree expr)
21943 tree inner_expr;
21945 #ifdef ENABLE_CHECKING
21946 /* Try to get a constant value for all non-dependent expressions in
21947 order to expose bugs in *_dependent_expression_p and constexpr. */
21948 if (cxx_dialect >= cxx11)
21949 fold_non_dependent_expr (expr);
21950 #endif
21952 /* Preserve OVERLOADs; the functions must be available to resolve
21953 types. */
21954 inner_expr = expr;
21955 if (TREE_CODE (inner_expr) == STMT_EXPR)
21956 inner_expr = stmt_expr_value_expr (inner_expr);
21957 if (TREE_CODE (inner_expr) == ADDR_EXPR)
21958 inner_expr = TREE_OPERAND (inner_expr, 0);
21959 if (TREE_CODE (inner_expr) == COMPONENT_REF)
21960 inner_expr = TREE_OPERAND (inner_expr, 1);
21961 if (is_overloaded_fn (inner_expr)
21962 || TREE_CODE (inner_expr) == OFFSET_REF)
21963 return expr;
21964 /* There is no need to return a proxy for a variable. */
21965 if (VAR_P (expr))
21966 return expr;
21967 /* Preserve string constants; conversions from string constants to
21968 "char *" are allowed, even though normally a "const char *"
21969 cannot be used to initialize a "char *". */
21970 if (TREE_CODE (expr) == STRING_CST)
21971 return expr;
21972 /* Preserve void and arithmetic constants, as an optimization -- there is no
21973 reason to create a new node. */
21974 if (TREE_CODE (expr) == VOID_CST
21975 || TREE_CODE (expr) == INTEGER_CST
21976 || TREE_CODE (expr) == REAL_CST)
21977 return expr;
21978 /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
21979 There is at least one place where we want to know that a
21980 particular expression is a throw-expression: when checking a ?:
21981 expression, there are special rules if the second or third
21982 argument is a throw-expression. */
21983 if (TREE_CODE (expr) == THROW_EXPR)
21984 return expr;
21986 /* Don't wrap an initializer list, we need to be able to look inside. */
21987 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
21988 return expr;
21990 /* Don't wrap a dummy object, we need to be able to test for it. */
21991 if (is_dummy_object (expr))
21992 return expr;
21994 if (TREE_CODE (expr) == COND_EXPR)
21995 return build3 (COND_EXPR,
21996 TREE_TYPE (expr),
21997 TREE_OPERAND (expr, 0),
21998 (TREE_OPERAND (expr, 1)
21999 ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
22000 : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
22001 build_non_dependent_expr (TREE_OPERAND (expr, 2)));
22002 if (TREE_CODE (expr) == COMPOUND_EXPR
22003 && !COMPOUND_EXPR_OVERLOADED (expr))
22004 return build2 (COMPOUND_EXPR,
22005 TREE_TYPE (expr),
22006 TREE_OPERAND (expr, 0),
22007 build_non_dependent_expr (TREE_OPERAND (expr, 1)));
22009 /* If the type is unknown, it can't really be non-dependent */
22010 gcc_assert (TREE_TYPE (expr) != unknown_type_node);
22012 /* Otherwise, build a NON_DEPENDENT_EXPR. */
22013 return build1 (NON_DEPENDENT_EXPR, TREE_TYPE (expr), expr);
22016 /* ARGS is a vector of expressions as arguments to a function call.
22017 Replace the arguments with equivalent non-dependent expressions.
22018 This modifies ARGS in place. */
22020 void
22021 make_args_non_dependent (vec<tree, va_gc> *args)
22023 unsigned int ix;
22024 tree arg;
22026 FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
22028 tree newarg = build_non_dependent_expr (arg);
22029 if (newarg != arg)
22030 (*args)[ix] = newarg;
22034 /* Returns a type which represents 'auto' or 'decltype(auto)'. We use a
22035 TEMPLATE_TYPE_PARM with a level one deeper than the actual template
22036 parms. */
22038 static tree
22039 make_auto_1 (tree name)
22041 tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
22042 TYPE_NAME (au) = build_decl (input_location,
22043 TYPE_DECL, name, au);
22044 TYPE_STUB_DECL (au) = TYPE_NAME (au);
22045 TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
22046 (0, processing_template_decl + 1, processing_template_decl + 1,
22047 TYPE_NAME (au), NULL_TREE);
22048 TYPE_CANONICAL (au) = canonical_type_parameter (au);
22049 DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
22050 SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
22052 return au;
22055 tree
22056 make_decltype_auto (void)
22058 return make_auto_1 (get_identifier ("decltype(auto)"));
22061 tree
22062 make_auto (void)
22064 return make_auto_1 (get_identifier ("auto"));
22067 /* Given type ARG, return std::initializer_list<ARG>. */
22069 static tree
22070 listify (tree arg)
22072 tree std_init_list = namespace_binding
22073 (get_identifier ("initializer_list"), std_node);
22074 tree argvec;
22075 if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
22077 error ("deducing from brace-enclosed initializer list requires "
22078 "#include <initializer_list>");
22079 return error_mark_node;
22081 argvec = make_tree_vec (1);
22082 TREE_VEC_ELT (argvec, 0) = arg;
22083 return lookup_template_class (std_init_list, argvec, NULL_TREE,
22084 NULL_TREE, 0, tf_warning_or_error);
22087 /* Replace auto in TYPE with std::initializer_list<auto>. */
22089 static tree
22090 listify_autos (tree type, tree auto_node)
22092 tree init_auto = listify (auto_node);
22093 tree argvec = make_tree_vec (1);
22094 TREE_VEC_ELT (argvec, 0) = init_auto;
22095 if (processing_template_decl)
22096 argvec = add_to_template_args (current_template_args (), argvec);
22097 return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
22100 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
22101 from INIT. AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE. */
22103 tree
22104 do_auto_deduction (tree type, tree init, tree auto_node)
22106 tree targs;
22108 if (init == error_mark_node)
22109 return error_mark_node;
22111 if (type_dependent_expression_p (init))
22112 /* Defining a subset of type-dependent expressions that we can deduce
22113 from ahead of time isn't worth the trouble. */
22114 return type;
22116 /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
22117 with either a new invented type template parameter U or, if the
22118 initializer is a braced-init-list (8.5.4), with
22119 std::initializer_list<U>. */
22120 if (BRACE_ENCLOSED_INITIALIZER_P (init))
22122 if (!DIRECT_LIST_INIT_P (init))
22123 type = listify_autos (type, auto_node);
22124 else if (CONSTRUCTOR_NELTS (init) == 1)
22125 init = CONSTRUCTOR_ELT (init, 0)->value;
22126 else
22128 if (permerror (input_location, "direct-list-initialization of "
22129 "%<auto%> requires exactly one element"))
22130 inform (input_location,
22131 "for deduction to %<std::initializer_list%>, use copy-"
22132 "list-initialization (i.e. add %<=%> before the %<{%>)");
22133 type = listify_autos (type, auto_node);
22137 init = resolve_nondeduced_context (init);
22139 targs = make_tree_vec (1);
22140 if (AUTO_IS_DECLTYPE (auto_node))
22142 bool id = (DECL_P (init) || (TREE_CODE (init) == COMPONENT_REF
22143 && !REF_PARENTHESIZED_P (init)));
22144 TREE_VEC_ELT (targs, 0)
22145 = finish_decltype_type (init, id, tf_warning_or_error);
22146 if (type != auto_node)
22148 error ("%qT as type rather than plain %<decltype(auto)%>", type);
22149 return error_mark_node;
22152 else
22154 tree parms = build_tree_list (NULL_TREE, type);
22155 tree tparms = make_tree_vec (1);
22156 int val;
22158 TREE_VEC_ELT (tparms, 0)
22159 = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
22160 val = type_unification_real (tparms, targs, parms, &init, 1, 0,
22161 DEDUCE_CALL, LOOKUP_NORMAL,
22162 NULL, /*explain_p=*/false);
22163 if (val > 0)
22165 if (processing_template_decl)
22166 /* Try again at instantiation time. */
22167 return type;
22168 if (type && type != error_mark_node)
22169 /* If type is error_mark_node a diagnostic must have been
22170 emitted by now. Also, having a mention to '<type error>'
22171 in the diagnostic is not really useful to the user. */
22173 if (cfun && auto_node == current_function_auto_return_pattern
22174 && LAMBDA_FUNCTION_P (current_function_decl))
22175 error ("unable to deduce lambda return type from %qE", init);
22176 else
22177 error ("unable to deduce %qT from %qE", type, init);
22179 return error_mark_node;
22183 /* If the list of declarators contains more than one declarator, the type
22184 of each declared variable is determined as described above. If the
22185 type deduced for the template parameter U is not the same in each
22186 deduction, the program is ill-formed. */
22187 if (TREE_TYPE (auto_node)
22188 && !same_type_p (TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0)))
22190 if (cfun && auto_node == current_function_auto_return_pattern
22191 && LAMBDA_FUNCTION_P (current_function_decl))
22192 error ("inconsistent types %qT and %qT deduced for "
22193 "lambda return type", TREE_TYPE (auto_node),
22194 TREE_VEC_ELT (targs, 0));
22195 else
22196 error ("inconsistent deduction for %qT: %qT and then %qT",
22197 auto_node, TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0));
22198 return error_mark_node;
22200 TREE_TYPE (auto_node) = TREE_VEC_ELT (targs, 0);
22202 if (processing_template_decl)
22203 targs = add_to_template_args (current_template_args (), targs);
22204 return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
22207 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
22208 result. */
22210 tree
22211 splice_late_return_type (tree type, tree late_return_type)
22213 tree argvec;
22215 if (late_return_type == NULL_TREE)
22216 return type;
22217 argvec = make_tree_vec (1);
22218 TREE_VEC_ELT (argvec, 0) = late_return_type;
22219 if (processing_template_parmlist)
22220 /* For a late-specified return type in a template type-parameter, we
22221 need to add a dummy argument level for its parmlist. */
22222 argvec = add_to_template_args
22223 (make_tree_vec (processing_template_parmlist), argvec);
22224 if (current_template_parms)
22225 argvec = add_to_template_args (current_template_args (), argvec);
22226 return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
22229 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto' or
22230 'decltype(auto)'. */
22232 bool
22233 is_auto (const_tree type)
22235 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
22236 && (TYPE_IDENTIFIER (type) == get_identifier ("auto")
22237 || TYPE_IDENTIFIER (type) == get_identifier ("decltype(auto)")))
22238 return true;
22239 else
22240 return false;
22243 /* Returns the TEMPLATE_TYPE_PARM in TYPE representing `auto' iff TYPE contains
22244 a use of `auto'. Returns NULL_TREE otherwise. */
22246 tree
22247 type_uses_auto (tree type)
22249 return find_type_usage (type, is_auto);
22252 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto',
22253 'decltype(auto)' or a concept. */
22255 bool
22256 is_auto_or_concept (const_tree type)
22258 return is_auto (type); // or concept
22261 /* Returns the TEMPLATE_TYPE_PARM in TYPE representing a generic type (`auto' or
22262 a concept identifier) iff TYPE contains a use of a generic type. Returns
22263 NULL_TREE otherwise. */
22265 tree
22266 type_uses_auto_or_concept (tree type)
22268 return find_type_usage (type, is_auto_or_concept);
22272 /* For a given template T, return the vector of typedefs referenced
22273 in T for which access check is needed at T instantiation time.
22274 T is either a FUNCTION_DECL or a RECORD_TYPE.
22275 Those typedefs were added to T by the function
22276 append_type_to_template_for_access_check. */
22278 vec<qualified_typedef_usage_t, va_gc> *
22279 get_types_needing_access_check (tree t)
22281 tree ti;
22282 vec<qualified_typedef_usage_t, va_gc> *result = NULL;
22284 if (!t || t == error_mark_node)
22285 return NULL;
22287 if (!(ti = get_template_info (t)))
22288 return NULL;
22290 if (CLASS_TYPE_P (t)
22291 || TREE_CODE (t) == FUNCTION_DECL)
22293 if (!TI_TEMPLATE (ti))
22294 return NULL;
22296 result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
22299 return result;
22302 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
22303 tied to T. That list of typedefs will be access checked at
22304 T instantiation time.
22305 T is either a FUNCTION_DECL or a RECORD_TYPE.
22306 TYPE_DECL is a TYPE_DECL node representing a typedef.
22307 SCOPE is the scope through which TYPE_DECL is accessed.
22308 LOCATION is the location of the usage point of TYPE_DECL.
22310 This function is a subroutine of
22311 append_type_to_template_for_access_check. */
22313 static void
22314 append_type_to_template_for_access_check_1 (tree t,
22315 tree type_decl,
22316 tree scope,
22317 location_t location)
22319 qualified_typedef_usage_t typedef_usage;
22320 tree ti;
22322 if (!t || t == error_mark_node)
22323 return;
22325 gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
22326 || CLASS_TYPE_P (t))
22327 && type_decl
22328 && TREE_CODE (type_decl) == TYPE_DECL
22329 && scope);
22331 if (!(ti = get_template_info (t)))
22332 return;
22334 gcc_assert (TI_TEMPLATE (ti));
22336 typedef_usage.typedef_decl = type_decl;
22337 typedef_usage.context = scope;
22338 typedef_usage.locus = location;
22340 vec_safe_push (TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti), typedef_usage);
22343 /* Append TYPE_DECL to the template TEMPL.
22344 TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
22345 At TEMPL instanciation time, TYPE_DECL will be checked to see
22346 if it can be accessed through SCOPE.
22347 LOCATION is the location of the usage point of TYPE_DECL.
22349 e.g. consider the following code snippet:
22351 class C
22353 typedef int myint;
22356 template<class U> struct S
22358 C::myint mi; // <-- usage point of the typedef C::myint
22361 S<char> s;
22363 At S<char> instantiation time, we need to check the access of C::myint
22364 In other words, we need to check the access of the myint typedef through
22365 the C scope. For that purpose, this function will add the myint typedef
22366 and the scope C through which its being accessed to a list of typedefs
22367 tied to the template S. That list will be walked at template instantiation
22368 time and access check performed on each typedefs it contains.
22369 Note that this particular code snippet should yield an error because
22370 myint is private to C. */
22372 void
22373 append_type_to_template_for_access_check (tree templ,
22374 tree type_decl,
22375 tree scope,
22376 location_t location)
22378 qualified_typedef_usage_t *iter;
22379 unsigned i;
22381 gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
22383 /* Make sure we don't append the type to the template twice. */
22384 FOR_EACH_VEC_SAFE_ELT (get_types_needing_access_check (templ), i, iter)
22385 if (iter->typedef_decl == type_decl && scope == iter->context)
22386 return;
22388 append_type_to_template_for_access_check_1 (templ, type_decl,
22389 scope, location);
22392 /* Convert the generic type parameters in PARM that match the types given in the
22393 range [START_IDX, END_IDX) from the current_template_parms into generic type
22394 packs. */
22396 tree
22397 convert_generic_types_to_packs (tree parm, int start_idx, int end_idx)
22399 tree current = current_template_parms;
22400 int depth = TMPL_PARMS_DEPTH (current);
22401 current = INNERMOST_TEMPLATE_PARMS (current);
22402 tree replacement = make_tree_vec (TREE_VEC_LENGTH (current));
22404 for (int i = 0; i < start_idx; ++i)
22405 TREE_VEC_ELT (replacement, i)
22406 = TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (current, i)));
22408 for (int i = start_idx; i < end_idx; ++i)
22410 /* Create a distinct parameter pack type from the current parm and add it
22411 to the replacement args to tsubst below into the generic function
22412 parameter. */
22414 tree o = TREE_TYPE (TREE_VALUE
22415 (TREE_VEC_ELT (current, i)));
22416 tree t = copy_type (o);
22417 TEMPLATE_TYPE_PARM_INDEX (t)
22418 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (o),
22419 o, 0, 0, tf_none);
22420 TREE_TYPE (TEMPLATE_TYPE_DECL (t)) = t;
22421 TYPE_STUB_DECL (t) = TYPE_NAME (t) = TEMPLATE_TYPE_DECL (t);
22422 TYPE_MAIN_VARIANT (t) = t;
22423 TEMPLATE_TYPE_PARAMETER_PACK (t) = true;
22424 TYPE_CANONICAL (t) = canonical_type_parameter (t);
22425 TREE_VEC_ELT (replacement, i) = t;
22426 TREE_VALUE (TREE_VEC_ELT (current, i)) = TREE_CHAIN (t);
22429 for (int i = end_idx, e = TREE_VEC_LENGTH (current); i < e; ++i)
22430 TREE_VEC_ELT (replacement, i)
22431 = TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (current, i)));
22433 /* If there are more levels then build up the replacement with the outer
22434 template parms. */
22435 if (depth > 1)
22436 replacement = add_to_template_args (template_parms_to_args
22437 (TREE_CHAIN (current_template_parms)),
22438 replacement);
22440 return tsubst (parm, replacement, tf_none, NULL_TREE);
22444 /* Set up the hash tables for template instantiations. */
22446 void
22447 init_template_processing (void)
22449 decl_specializations = hash_table<spec_hasher>::create_ggc (37);
22450 type_specializations = hash_table<spec_hasher>::create_ggc (37);
22453 /* Print stats about the template hash tables for -fstats. */
22455 void
22456 print_template_statistics (void)
22458 fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
22459 "%f collisions\n", (long) decl_specializations->size (),
22460 (long) decl_specializations->elements (),
22461 decl_specializations->collisions ());
22462 fprintf (stderr, "type_specializations: size %ld, %ld elements, "
22463 "%f collisions\n", (long) type_specializations->size (),
22464 (long) type_specializations->elements (),
22465 type_specializations->collisions ());
22468 #include "gt-cp-pt.h"