PR c++/85146
[official-gcc.git] / gcc / cp / pt.c
blobeafc110dbde9578b933cadf022425c0c34910c7a
1 /* Handle parameterized types (templates) for GNU -*- C++ -*-.
2 Copyright (C) 1992-2018 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 "cp-tree.h"
31 #include "timevar.h"
32 #include "stringpool.h"
33 #include "varasm.h"
34 #include "attribs.h"
35 #include "stor-layout.h"
36 #include "intl.h"
37 #include "c-family/c-objc.h"
38 #include "cp-objcp-common.h"
39 #include "toplev.h"
40 #include "tree-iterator.h"
41 #include "type-utils.h"
42 #include "gimplify.h"
43 #include "gcc-rich-location.h"
44 #include "selftest.h"
46 /* The type of functions taking a tree, and some additional data, and
47 returning an int. */
48 typedef int (*tree_fn_t) (tree, void*);
50 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
51 instantiations have been deferred, either because their definitions
52 were not yet available, or because we were putting off doing the work. */
53 struct GTY ((chain_next ("%h.next"))) pending_template {
54 struct pending_template *next;
55 struct tinst_level *tinst;
58 static GTY(()) struct pending_template *pending_templates;
59 static GTY(()) struct pending_template *last_pending_template;
61 int processing_template_parmlist;
62 static int template_header_count;
64 static GTY(()) tree saved_trees;
65 static vec<int> inline_parm_levels;
67 static GTY(()) struct tinst_level *current_tinst_level;
69 static GTY(()) tree saved_access_scope;
71 /* Live only within one (recursive) call to tsubst_expr. We use
72 this to pass the statement expression node from the STMT_EXPR
73 to the EXPR_STMT that is its result. */
74 static tree cur_stmt_expr;
76 // -------------------------------------------------------------------------- //
77 // Local Specialization Stack
79 // Implementation of the RAII helper for creating new local
80 // specializations.
81 local_specialization_stack::local_specialization_stack (lss_policy policy)
82 : saved (local_specializations)
84 if (policy == lss_blank || !saved)
85 local_specializations = new hash_map<tree, tree>;
86 else
87 local_specializations = new hash_map<tree, tree>(*saved);
90 local_specialization_stack::~local_specialization_stack ()
92 delete local_specializations;
93 local_specializations = saved;
96 /* True if we've recursed into fn_type_unification too many times. */
97 static bool excessive_deduction_depth;
99 struct GTY((for_user)) spec_entry
101 tree tmpl;
102 tree args;
103 tree spec;
106 struct spec_hasher : ggc_ptr_hash<spec_entry>
108 static hashval_t hash (spec_entry *);
109 static bool equal (spec_entry *, spec_entry *);
112 static GTY (()) hash_table<spec_hasher> *decl_specializations;
114 static GTY (()) hash_table<spec_hasher> *type_specializations;
116 /* Contains canonical template parameter types. The vector is indexed by
117 the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
118 TREE_LIST, whose TREE_VALUEs contain the canonical template
119 parameters of various types and levels. */
120 static GTY(()) vec<tree, va_gc> *canonical_template_parms;
122 #define UNIFY_ALLOW_NONE 0
123 #define UNIFY_ALLOW_MORE_CV_QUAL 1
124 #define UNIFY_ALLOW_LESS_CV_QUAL 2
125 #define UNIFY_ALLOW_DERIVED 4
126 #define UNIFY_ALLOW_INTEGER 8
127 #define UNIFY_ALLOW_OUTER_LEVEL 16
128 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
129 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
131 enum template_base_result {
132 tbr_incomplete_type,
133 tbr_ambiguous_baseclass,
134 tbr_success
137 static void push_access_scope (tree);
138 static void pop_access_scope (tree);
139 static bool resolve_overloaded_unification (tree, tree, tree, tree,
140 unification_kind_t, int,
141 bool);
142 static int try_one_overload (tree, tree, tree, tree, tree,
143 unification_kind_t, int, bool, bool);
144 static int unify (tree, tree, tree, tree, int, bool);
145 static void add_pending_template (tree);
146 static tree reopen_tinst_level (struct tinst_level *);
147 static tree tsubst_initializer_list (tree, tree);
148 static tree get_partial_spec_bindings (tree, tree, tree);
149 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
150 bool, bool);
151 static tree coerce_innermost_template_parms (tree, tree, tree, tsubst_flags_t,
152 bool, bool);
153 static void tsubst_enum (tree, tree, tree);
154 static tree add_to_template_args (tree, tree);
155 static tree add_outermost_template_args (tree, tree);
156 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
157 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
158 tree);
159 static int type_unification_real (tree, tree, tree, const tree *,
160 unsigned int, int, unification_kind_t, int,
161 vec<deferred_access_check, va_gc> **,
162 bool);
163 static void note_template_header (int);
164 static tree convert_nontype_argument_function (tree, tree, tsubst_flags_t);
165 static tree convert_nontype_argument (tree, tree, tsubst_flags_t);
166 static tree convert_template_argument (tree, tree, tree,
167 tsubst_flags_t, int, tree);
168 static tree for_each_template_parm (tree, tree_fn_t, void*,
169 hash_set<tree> *, bool, tree_fn_t = NULL);
170 static tree expand_template_argument_pack (tree);
171 static tree build_template_parm_index (int, int, int, tree, tree);
172 static bool inline_needs_template_parms (tree, bool);
173 static void push_inline_template_parms_recursive (tree, int);
174 static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
175 static int mark_template_parm (tree, void *);
176 static int template_parm_this_level_p (tree, void *);
177 static tree tsubst_friend_function (tree, tree);
178 static tree tsubst_friend_class (tree, tree);
179 static int can_complete_type_without_circularity (tree);
180 static tree get_bindings (tree, tree, tree, bool);
181 static int template_decl_level (tree);
182 static int check_cv_quals_for_unify (int, tree, tree);
183 static void template_parm_level_and_index (tree, int*, int*);
184 static int unify_pack_expansion (tree, tree, tree,
185 tree, unification_kind_t, bool, bool);
186 static tree copy_template_args (tree);
187 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
188 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
189 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
190 static tree most_specialized_partial_spec (tree, tsubst_flags_t);
191 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
192 static tree tsubst_arg_types (tree, tree, tree, tsubst_flags_t, tree);
193 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
194 static bool check_specialization_scope (void);
195 static tree process_partial_specialization (tree);
196 static void set_current_access_from_decl (tree);
197 static enum template_base_result get_template_base (tree, tree, tree, tree,
198 bool , tree *);
199 static tree try_class_unification (tree, tree, tree, tree, bool);
200 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
201 tree, tree);
202 static bool template_template_parm_bindings_ok_p (tree, tree);
203 static void tsubst_default_arguments (tree, tsubst_flags_t);
204 static tree for_each_template_parm_r (tree *, int *, void *);
205 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
206 static void copy_default_args_to_explicit_spec (tree);
207 static bool invalid_nontype_parm_type_p (tree, tsubst_flags_t);
208 static bool dependent_template_arg_p (tree);
209 static bool any_template_arguments_need_structural_equality_p (tree);
210 static bool dependent_type_p_r (tree);
211 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
212 static tree tsubst_decl (tree, tree, tsubst_flags_t);
213 static void perform_typedefs_access_check (tree tmpl, tree targs);
214 static void append_type_to_template_for_access_check_1 (tree, tree, tree,
215 location_t);
216 static tree listify (tree);
217 static tree listify_autos (tree, tree);
218 static tree tsubst_template_parm (tree, tree, tsubst_flags_t);
219 static tree instantiate_alias_template (tree, tree, tsubst_flags_t);
220 static bool complex_alias_template_p (const_tree tmpl);
221 static tree tsubst_attributes (tree, tree, tsubst_flags_t, tree);
222 static tree canonicalize_expr_argument (tree, tsubst_flags_t);
223 static tree make_argument_pack (tree);
224 static void register_parameter_specializations (tree, tree);
225 static tree enclosing_instantiation_of (tree tctx);
227 /* Make the current scope suitable for access checking when we are
228 processing T. T can be FUNCTION_DECL for instantiated function
229 template, VAR_DECL for static member variable, or TYPE_DECL for
230 alias template (needed by instantiate_decl). */
232 static void
233 push_access_scope (tree t)
235 gcc_assert (VAR_OR_FUNCTION_DECL_P (t)
236 || TREE_CODE (t) == TYPE_DECL);
238 if (DECL_FRIEND_CONTEXT (t))
239 push_nested_class (DECL_FRIEND_CONTEXT (t));
240 else if (DECL_CLASS_SCOPE_P (t))
241 push_nested_class (DECL_CONTEXT (t));
242 else
243 push_to_top_level ();
245 if (TREE_CODE (t) == FUNCTION_DECL)
247 saved_access_scope = tree_cons
248 (NULL_TREE, current_function_decl, saved_access_scope);
249 current_function_decl = t;
253 /* Restore the scope set up by push_access_scope. T is the node we
254 are processing. */
256 static void
257 pop_access_scope (tree t)
259 if (TREE_CODE (t) == FUNCTION_DECL)
261 current_function_decl = TREE_VALUE (saved_access_scope);
262 saved_access_scope = TREE_CHAIN (saved_access_scope);
265 if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
266 pop_nested_class ();
267 else
268 pop_from_top_level ();
271 /* Do any processing required when DECL (a member template
272 declaration) is finished. Returns the TEMPLATE_DECL corresponding
273 to DECL, unless it is a specialization, in which case the DECL
274 itself is returned. */
276 tree
277 finish_member_template_decl (tree decl)
279 if (decl == error_mark_node)
280 return error_mark_node;
282 gcc_assert (DECL_P (decl));
284 if (TREE_CODE (decl) == TYPE_DECL)
286 tree type;
288 type = TREE_TYPE (decl);
289 if (type == error_mark_node)
290 return error_mark_node;
291 if (MAYBE_CLASS_TYPE_P (type)
292 && CLASSTYPE_TEMPLATE_INFO (type)
293 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
295 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
296 check_member_template (tmpl);
297 return tmpl;
299 return NULL_TREE;
301 else if (TREE_CODE (decl) == FIELD_DECL)
302 error ("data member %qD cannot be a member template", decl);
303 else if (DECL_TEMPLATE_INFO (decl))
305 if (!DECL_TEMPLATE_SPECIALIZATION (decl))
307 check_member_template (DECL_TI_TEMPLATE (decl));
308 return DECL_TI_TEMPLATE (decl);
310 else
311 return decl;
313 else
314 error ("invalid member template declaration %qD", decl);
316 return error_mark_node;
319 /* Create a template info node. */
321 tree
322 build_template_info (tree template_decl, tree template_args)
324 tree result = make_node (TEMPLATE_INFO);
325 TI_TEMPLATE (result) = template_decl;
326 TI_ARGS (result) = template_args;
327 return result;
330 /* Return the template info node corresponding to T, whatever T is. */
332 tree
333 get_template_info (const_tree t)
335 tree tinfo = NULL_TREE;
337 if (!t || t == error_mark_node)
338 return NULL;
340 if (TREE_CODE (t) == NAMESPACE_DECL
341 || TREE_CODE (t) == PARM_DECL)
342 return NULL;
344 if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
345 tinfo = DECL_TEMPLATE_INFO (t);
347 if (!tinfo && DECL_IMPLICIT_TYPEDEF_P (t))
348 t = TREE_TYPE (t);
350 if (OVERLOAD_TYPE_P (t))
351 tinfo = TYPE_TEMPLATE_INFO (t);
352 else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
353 tinfo = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
355 return tinfo;
358 /* Returns the template nesting level of the indicated class TYPE.
360 For example, in:
361 template <class T>
362 struct A
364 template <class U>
365 struct B {};
368 A<T>::B<U> has depth two, while A<T> has depth one.
369 Both A<T>::B<int> and A<int>::B<U> have depth one, if
370 they are instantiations, not specializations.
372 This function is guaranteed to return 0 if passed NULL_TREE so
373 that, for example, `template_class_depth (current_class_type)' is
374 always safe. */
377 template_class_depth (tree type)
379 int depth;
381 for (depth = 0; type && TREE_CODE (type) != NAMESPACE_DECL; )
383 tree tinfo = get_template_info (type);
385 if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
386 && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
387 ++depth;
389 if (DECL_P (type))
390 type = CP_DECL_CONTEXT (type);
391 else if (LAMBDA_TYPE_P (type))
392 type = LAMBDA_TYPE_EXTRA_SCOPE (type);
393 else
394 type = CP_TYPE_CONTEXT (type);
397 return depth;
400 /* Subroutine of maybe_begin_member_template_processing.
401 Returns true if processing DECL needs us to push template parms. */
403 static bool
404 inline_needs_template_parms (tree decl, bool nsdmi)
406 if (!decl || (!nsdmi && ! DECL_TEMPLATE_INFO (decl)))
407 return false;
409 return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
410 > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
413 /* Subroutine of maybe_begin_member_template_processing.
414 Push the template parms in PARMS, starting from LEVELS steps into the
415 chain, and ending at the beginning, since template parms are listed
416 innermost first. */
418 static void
419 push_inline_template_parms_recursive (tree parmlist, int levels)
421 tree parms = TREE_VALUE (parmlist);
422 int i;
424 if (levels > 1)
425 push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
427 ++processing_template_decl;
428 current_template_parms
429 = tree_cons (size_int (processing_template_decl),
430 parms, current_template_parms);
431 TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
433 begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
434 NULL);
435 for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
437 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
439 if (error_operand_p (parm))
440 continue;
442 gcc_assert (DECL_P (parm));
444 switch (TREE_CODE (parm))
446 case TYPE_DECL:
447 case TEMPLATE_DECL:
448 pushdecl (parm);
449 break;
451 case PARM_DECL:
452 /* Push the CONST_DECL. */
453 pushdecl (TEMPLATE_PARM_DECL (DECL_INITIAL (parm)));
454 break;
456 default:
457 gcc_unreachable ();
462 /* Restore the template parameter context for a member template, a
463 friend template defined in a class definition, or a non-template
464 member of template class. */
466 void
467 maybe_begin_member_template_processing (tree decl)
469 tree parms;
470 int levels = 0;
471 bool nsdmi = TREE_CODE (decl) == FIELD_DECL;
473 if (nsdmi)
475 tree ctx = DECL_CONTEXT (decl);
476 decl = (CLASSTYPE_TEMPLATE_INFO (ctx)
477 /* Disregard full specializations (c++/60999). */
478 && uses_template_parms (ctx)
479 ? CLASSTYPE_TI_TEMPLATE (ctx) : NULL_TREE);
482 if (inline_needs_template_parms (decl, nsdmi))
484 parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
485 levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
487 if (DECL_TEMPLATE_SPECIALIZATION (decl))
489 --levels;
490 parms = TREE_CHAIN (parms);
493 push_inline_template_parms_recursive (parms, levels);
496 /* Remember how many levels of template parameters we pushed so that
497 we can pop them later. */
498 inline_parm_levels.safe_push (levels);
501 /* Undo the effects of maybe_begin_member_template_processing. */
503 void
504 maybe_end_member_template_processing (void)
506 int i;
507 int last;
509 if (inline_parm_levels.length () == 0)
510 return;
512 last = inline_parm_levels.pop ();
513 for (i = 0; i < last; ++i)
515 --processing_template_decl;
516 current_template_parms = TREE_CHAIN (current_template_parms);
517 poplevel (0, 0, 0);
521 /* Return a new template argument vector which contains all of ARGS,
522 but has as its innermost set of arguments the EXTRA_ARGS. */
524 static tree
525 add_to_template_args (tree args, tree extra_args)
527 tree new_args;
528 int extra_depth;
529 int i;
530 int j;
532 if (args == NULL_TREE || extra_args == error_mark_node)
533 return extra_args;
535 extra_depth = TMPL_ARGS_DEPTH (extra_args);
536 new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
538 for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
539 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
541 for (j = 1; j <= extra_depth; ++j, ++i)
542 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
544 return new_args;
547 /* Like add_to_template_args, but only the outermost ARGS are added to
548 the EXTRA_ARGS. In particular, all but TMPL_ARGS_DEPTH
549 (EXTRA_ARGS) levels are added. This function is used to combine
550 the template arguments from a partial instantiation with the
551 template arguments used to attain the full instantiation from the
552 partial instantiation. */
554 static tree
555 add_outermost_template_args (tree args, tree extra_args)
557 tree new_args;
559 /* If there are more levels of EXTRA_ARGS than there are ARGS,
560 something very fishy is going on. */
561 gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
563 /* If *all* the new arguments will be the EXTRA_ARGS, just return
564 them. */
565 if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
566 return extra_args;
568 /* For the moment, we make ARGS look like it contains fewer levels. */
569 TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
571 new_args = add_to_template_args (args, extra_args);
573 /* Now, we restore ARGS to its full dimensions. */
574 TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
576 return new_args;
579 /* Return the N levels of innermost template arguments from the ARGS. */
581 tree
582 get_innermost_template_args (tree args, int n)
584 tree new_args;
585 int extra_levels;
586 int i;
588 gcc_assert (n >= 0);
590 /* If N is 1, just return the innermost set of template arguments. */
591 if (n == 1)
592 return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
594 /* If we're not removing anything, just return the arguments we were
595 given. */
596 extra_levels = TMPL_ARGS_DEPTH (args) - n;
597 gcc_assert (extra_levels >= 0);
598 if (extra_levels == 0)
599 return args;
601 /* Make a new set of arguments, not containing the outer arguments. */
602 new_args = make_tree_vec (n);
603 for (i = 1; i <= n; ++i)
604 SET_TMPL_ARGS_LEVEL (new_args, i,
605 TMPL_ARGS_LEVEL (args, i + extra_levels));
607 return new_args;
610 /* The inverse of get_innermost_template_args: Return all but the innermost
611 EXTRA_LEVELS levels of template arguments from the ARGS. */
613 static tree
614 strip_innermost_template_args (tree args, int extra_levels)
616 tree new_args;
617 int n = TMPL_ARGS_DEPTH (args) - extra_levels;
618 int i;
620 gcc_assert (n >= 0);
622 /* If N is 1, just return the outermost set of template arguments. */
623 if (n == 1)
624 return TMPL_ARGS_LEVEL (args, 1);
626 /* If we're not removing anything, just return the arguments we were
627 given. */
628 gcc_assert (extra_levels >= 0);
629 if (extra_levels == 0)
630 return args;
632 /* Make a new set of arguments, not containing the inner arguments. */
633 new_args = make_tree_vec (n);
634 for (i = 1; i <= n; ++i)
635 SET_TMPL_ARGS_LEVEL (new_args, i,
636 TMPL_ARGS_LEVEL (args, i));
638 return new_args;
641 /* We've got a template header coming up; push to a new level for storing
642 the parms. */
644 void
645 begin_template_parm_list (void)
647 /* We use a non-tag-transparent scope here, which causes pushtag to
648 put tags in this scope, rather than in the enclosing class or
649 namespace scope. This is the right thing, since we want
650 TEMPLATE_DECLS, and not TYPE_DECLS for template classes. For a
651 global template class, push_template_decl handles putting the
652 TEMPLATE_DECL into top-level scope. For a nested template class,
653 e.g.:
655 template <class T> struct S1 {
656 template <class T> struct S2 {};
659 pushtag contains special code to insert the TEMPLATE_DECL for S2
660 at the right scope. */
661 begin_scope (sk_template_parms, NULL);
662 ++processing_template_decl;
663 ++processing_template_parmlist;
664 note_template_header (0);
666 /* Add a dummy parameter level while we process the parameter list. */
667 current_template_parms
668 = tree_cons (size_int (processing_template_decl),
669 make_tree_vec (0),
670 current_template_parms);
673 /* This routine is called when a specialization is declared. If it is
674 invalid to declare a specialization here, an error is reported and
675 false is returned, otherwise this routine will return true. */
677 static bool
678 check_specialization_scope (void)
680 tree scope = current_scope ();
682 /* [temp.expl.spec]
684 An explicit specialization shall be declared in the namespace of
685 which the template is a member, or, for member templates, in the
686 namespace of which the enclosing class or enclosing class
687 template is a member. An explicit specialization of a member
688 function, member class or static data member of a class template
689 shall be declared in the namespace of which the class template
690 is a member. */
691 if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
693 error ("explicit specialization in non-namespace scope %qD", scope);
694 return false;
697 /* [temp.expl.spec]
699 In an explicit specialization declaration for a member of a class
700 template or a member template that appears in namespace scope,
701 the member template and some of its enclosing class templates may
702 remain unspecialized, except that the declaration shall not
703 explicitly specialize a class member template if its enclosing
704 class templates are not explicitly specialized as well. */
705 if (current_template_parms)
707 error ("enclosing class templates are not explicitly specialized");
708 return false;
711 return true;
714 /* We've just seen template <>. */
716 bool
717 begin_specialization (void)
719 begin_scope (sk_template_spec, NULL);
720 note_template_header (1);
721 return check_specialization_scope ();
724 /* Called at then end of processing a declaration preceded by
725 template<>. */
727 void
728 end_specialization (void)
730 finish_scope ();
731 reset_specialization ();
734 /* Any template <>'s that we have seen thus far are not referring to a
735 function specialization. */
737 void
738 reset_specialization (void)
740 processing_specialization = 0;
741 template_header_count = 0;
744 /* We've just seen a template header. If SPECIALIZATION is nonzero,
745 it was of the form template <>. */
747 static void
748 note_template_header (int specialization)
750 processing_specialization = specialization;
751 template_header_count++;
754 /* We're beginning an explicit instantiation. */
756 void
757 begin_explicit_instantiation (void)
759 gcc_assert (!processing_explicit_instantiation);
760 processing_explicit_instantiation = true;
764 void
765 end_explicit_instantiation (void)
767 gcc_assert (processing_explicit_instantiation);
768 processing_explicit_instantiation = false;
771 /* An explicit specialization or partial specialization of TMPL is being
772 declared. Check that the namespace in which the specialization is
773 occurring is permissible. Returns false iff it is invalid to
774 specialize TMPL in the current namespace. */
776 static bool
777 check_specialization_namespace (tree tmpl)
779 tree tpl_ns = decl_namespace_context (tmpl);
781 /* [tmpl.expl.spec]
783 An explicit specialization shall be declared in a namespace enclosing the
784 specialized template. An explicit specialization whose declarator-id is
785 not qualified shall be declared in the nearest enclosing namespace of the
786 template, or, if the namespace is inline (7.3.1), any namespace from its
787 enclosing namespace set. */
788 if (current_scope() != DECL_CONTEXT (tmpl)
789 && !at_namespace_scope_p ())
791 error ("specialization of %qD must appear at namespace scope", tmpl);
792 return false;
795 if (is_nested_namespace (current_namespace, tpl_ns, cxx_dialect < cxx11))
796 /* Same or enclosing namespace. */
797 return true;
798 else
800 permerror (input_location,
801 "specialization of %qD in different namespace", tmpl);
802 inform (DECL_SOURCE_LOCATION (tmpl),
803 " from definition of %q#D", tmpl);
804 return false;
808 /* SPEC is an explicit instantiation. Check that it is valid to
809 perform this explicit instantiation in the current namespace. */
811 static void
812 check_explicit_instantiation_namespace (tree spec)
814 tree ns;
816 /* DR 275: An explicit instantiation shall appear in an enclosing
817 namespace of its template. */
818 ns = decl_namespace_context (spec);
819 if (!is_nested_namespace (current_namespace, ns))
820 permerror (input_location, "explicit instantiation of %qD in namespace %qD "
821 "(which does not enclose namespace %qD)",
822 spec, current_namespace, ns);
825 // Returns the type of a template specialization only if that
826 // specialization needs to be defined. Otherwise (e.g., if the type has
827 // already been defined), the function returns NULL_TREE.
828 static tree
829 maybe_new_partial_specialization (tree type)
831 // An implicit instantiation of an incomplete type implies
832 // the definition of a new class template.
834 // template<typename T>
835 // struct S;
837 // template<typename T>
838 // struct S<T*>;
840 // Here, S<T*> is an implicit instantiation of S whose type
841 // is incomplete.
842 if (CLASSTYPE_IMPLICIT_INSTANTIATION (type) && !COMPLETE_TYPE_P (type))
843 return type;
845 // It can also be the case that TYPE is a completed specialization.
846 // Continuing the previous example, suppose we also declare:
848 // template<typename T>
849 // requires Integral<T>
850 // struct S<T*>;
852 // Here, S<T*> refers to the specialization S<T*> defined
853 // above. However, we need to differentiate definitions because
854 // we intend to define a new partial specialization. In this case,
855 // we rely on the fact that the constraints are different for
856 // this declaration than that above.
858 // Note that we also get here for injected class names and
859 // late-parsed template definitions. We must ensure that we
860 // do not create new type declarations for those cases.
861 if (flag_concepts && CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
863 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
864 tree args = CLASSTYPE_TI_ARGS (type);
866 // If there are no template parameters, this cannot be a new
867 // partial template specializtion?
868 if (!current_template_parms)
869 return NULL_TREE;
871 // The injected-class-name is not a new partial specialization.
872 if (DECL_SELF_REFERENCE_P (TYPE_NAME (type)))
873 return NULL_TREE;
875 // If the constraints are not the same as those of the primary
876 // then, we can probably create a new specialization.
877 tree type_constr = current_template_constraints ();
879 if (type == TREE_TYPE (tmpl))
881 tree main_constr = get_constraints (tmpl);
882 if (equivalent_constraints (type_constr, main_constr))
883 return NULL_TREE;
886 // Also, if there's a pre-existing specialization with matching
887 // constraints, then this also isn't new.
888 tree specs = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
889 while (specs)
891 tree spec_tmpl = TREE_VALUE (specs);
892 tree spec_args = TREE_PURPOSE (specs);
893 tree spec_constr = get_constraints (spec_tmpl);
894 if (comp_template_args (args, spec_args)
895 && equivalent_constraints (type_constr, spec_constr))
896 return NULL_TREE;
897 specs = TREE_CHAIN (specs);
900 // Create a new type node (and corresponding type decl)
901 // for the newly declared specialization.
902 tree t = make_class_type (TREE_CODE (type));
903 CLASSTYPE_DECLARED_CLASS (t) = CLASSTYPE_DECLARED_CLASS (type);
904 SET_TYPE_TEMPLATE_INFO (t, build_template_info (tmpl, args));
906 /* We only need a separate type node for storing the definition of this
907 partial specialization; uses of S<T*> are unconstrained, so all are
908 equivalent. So keep TYPE_CANONICAL the same. */
909 TYPE_CANONICAL (t) = TYPE_CANONICAL (type);
911 // Build the corresponding type decl.
912 tree d = create_implicit_typedef (DECL_NAME (tmpl), t);
913 DECL_CONTEXT (d) = TYPE_CONTEXT (t);
914 DECL_SOURCE_LOCATION (d) = input_location;
916 return t;
919 return NULL_TREE;
922 /* The TYPE is being declared. If it is a template type, that means it
923 is a partial specialization. Do appropriate error-checking. */
925 tree
926 maybe_process_partial_specialization (tree type)
928 tree context;
930 if (type == error_mark_node)
931 return error_mark_node;
933 /* A lambda that appears in specialization context is not itself a
934 specialization. */
935 if (CLASS_TYPE_P (type) && CLASSTYPE_LAMBDA_EXPR (type))
936 return type;
938 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
940 error ("name of class shadows template template parameter %qD",
941 TYPE_NAME (type));
942 return error_mark_node;
945 context = TYPE_CONTEXT (type);
947 if (TYPE_ALIAS_P (type))
949 tree tinfo = TYPE_ALIAS_TEMPLATE_INFO (type);
951 if (tinfo && DECL_ALIAS_TEMPLATE_P (TI_TEMPLATE (tinfo)))
952 error ("specialization of alias template %qD",
953 TI_TEMPLATE (tinfo));
954 else
955 error ("explicit specialization of non-template %qT", type);
956 return error_mark_node;
958 else if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
960 /* This is for ordinary explicit specialization and partial
961 specialization of a template class such as:
963 template <> class C<int>;
967 template <class T> class C<T*>;
969 Make sure that `C<int>' and `C<T*>' are implicit instantiations. */
971 if (tree t = maybe_new_partial_specialization (type))
973 if (!check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (t))
974 && !at_namespace_scope_p ())
975 return error_mark_node;
976 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (t);
977 DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (t)) = input_location;
978 if (processing_template_decl)
980 tree decl = push_template_decl (TYPE_MAIN_DECL (t));
981 if (decl == error_mark_node)
982 return error_mark_node;
983 return TREE_TYPE (decl);
986 else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
987 error ("specialization of %qT after instantiation", type);
988 else if (errorcount && !processing_specialization
989 && CLASSTYPE_TEMPLATE_SPECIALIZATION (type)
990 && !uses_template_parms (CLASSTYPE_TI_ARGS (type)))
991 /* Trying to define a specialization either without a template<> header
992 or in an inappropriate place. We've already given an error, so just
993 bail now so we don't actually define the specialization. */
994 return error_mark_node;
996 else if (CLASS_TYPE_P (type)
997 && !CLASSTYPE_USE_TEMPLATE (type)
998 && CLASSTYPE_TEMPLATE_INFO (type)
999 && context && CLASS_TYPE_P (context)
1000 && CLASSTYPE_TEMPLATE_INFO (context))
1002 /* This is for an explicit specialization of member class
1003 template according to [temp.expl.spec/18]:
1005 template <> template <class U> class C<int>::D;
1007 The context `C<int>' must be an implicit instantiation.
1008 Otherwise this is just a member class template declared
1009 earlier like:
1011 template <> class C<int> { template <class U> class D; };
1012 template <> template <class U> class C<int>::D;
1014 In the first case, `C<int>::D' is a specialization of `C<T>::D'
1015 while in the second case, `C<int>::D' is a primary template
1016 and `C<T>::D' may not exist. */
1018 if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
1019 && !COMPLETE_TYPE_P (type))
1021 tree t;
1022 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
1024 if (current_namespace
1025 != decl_namespace_context (tmpl))
1027 permerror (input_location,
1028 "specializing %q#T in different namespace", type);
1029 permerror (DECL_SOURCE_LOCATION (tmpl),
1030 " from definition of %q#D", tmpl);
1033 /* Check for invalid specialization after instantiation:
1035 template <> template <> class C<int>::D<int>;
1036 template <> template <class U> class C<int>::D; */
1038 for (t = DECL_TEMPLATE_INSTANTIATIONS (tmpl);
1039 t; t = TREE_CHAIN (t))
1041 tree inst = TREE_VALUE (t);
1042 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (inst)
1043 || !COMPLETE_OR_OPEN_TYPE_P (inst))
1045 /* We already have a full specialization of this partial
1046 instantiation, or a full specialization has been
1047 looked up but not instantiated. Reassign it to the
1048 new member specialization template. */
1049 spec_entry elt;
1050 spec_entry *entry;
1052 elt.tmpl = most_general_template (tmpl);
1053 elt.args = CLASSTYPE_TI_ARGS (inst);
1054 elt.spec = inst;
1056 type_specializations->remove_elt (&elt);
1058 elt.tmpl = tmpl;
1059 elt.args = INNERMOST_TEMPLATE_ARGS (elt.args);
1061 spec_entry **slot
1062 = type_specializations->find_slot (&elt, INSERT);
1063 entry = ggc_alloc<spec_entry> ();
1064 *entry = elt;
1065 *slot = entry;
1067 else
1068 /* But if we've had an implicit instantiation, that's a
1069 problem ([temp.expl.spec]/6). */
1070 error ("specialization %qT after instantiation %qT",
1071 type, inst);
1074 /* Mark TYPE as a specialization. And as a result, we only
1075 have one level of template argument for the innermost
1076 class template. */
1077 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
1078 DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)) = input_location;
1079 CLASSTYPE_TI_ARGS (type)
1080 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
1083 else if (processing_specialization)
1085 /* Someday C++0x may allow for enum template specialization. */
1086 if (cxx_dialect > cxx98 && TREE_CODE (type) == ENUMERAL_TYPE
1087 && CLASS_TYPE_P (context) && CLASSTYPE_USE_TEMPLATE (context))
1088 pedwarn (input_location, OPT_Wpedantic, "template specialization "
1089 "of %qD not allowed by ISO C++", type);
1090 else
1092 error ("explicit specialization of non-template %qT", type);
1093 return error_mark_node;
1097 return type;
1100 /* Returns nonzero if we can optimize the retrieval of specializations
1101 for TMPL, a TEMPLATE_DECL. In particular, for such a template, we
1102 do not use DECL_TEMPLATE_SPECIALIZATIONS at all. */
1104 static inline bool
1105 optimize_specialization_lookup_p (tree tmpl)
1107 return (DECL_FUNCTION_TEMPLATE_P (tmpl)
1108 && DECL_CLASS_SCOPE_P (tmpl)
1109 /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
1110 parameter. */
1111 && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
1112 /* The optimized lookup depends on the fact that the
1113 template arguments for the member function template apply
1114 purely to the containing class, which is not true if the
1115 containing class is an explicit or partial
1116 specialization. */
1117 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
1118 && !DECL_MEMBER_TEMPLATE_P (tmpl)
1119 && !DECL_CONV_FN_P (tmpl)
1120 /* It is possible to have a template that is not a member
1121 template and is not a member of a template class:
1123 template <typename T>
1124 struct S { friend A::f(); };
1126 Here, the friend function is a template, but the context does
1127 not have template information. The optimized lookup relies
1128 on having ARGS be the template arguments for both the class
1129 and the function template. */
1130 && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
1133 /* Make sure ARGS doesn't use any inappropriate typedefs; we should have
1134 gone through coerce_template_parms by now. */
1136 static void
1137 verify_unstripped_args_1 (tree inner)
1139 for (int i = 0; i < TREE_VEC_LENGTH (inner); ++i)
1141 tree arg = TREE_VEC_ELT (inner, i);
1142 if (TREE_CODE (arg) == TEMPLATE_DECL)
1143 /* OK */;
1144 else if (TYPE_P (arg))
1145 gcc_assert (strip_typedefs (arg, NULL) == arg);
1146 else if (ARGUMENT_PACK_P (arg))
1147 verify_unstripped_args_1 (ARGUMENT_PACK_ARGS (arg));
1148 else if (strip_typedefs (TREE_TYPE (arg), NULL) != TREE_TYPE (arg))
1149 /* Allow typedefs on the type of a non-type argument, since a
1150 parameter can have them. */;
1151 else
1152 gcc_assert (strip_typedefs_expr (arg, NULL) == arg);
1156 static void
1157 verify_unstripped_args (tree args)
1159 ++processing_template_decl;
1160 if (!any_dependent_template_arguments_p (args))
1161 verify_unstripped_args_1 (INNERMOST_TEMPLATE_ARGS (args));
1162 --processing_template_decl;
1165 /* Retrieve the specialization (in the sense of [temp.spec] - a
1166 specialization is either an instantiation or an explicit
1167 specialization) of TMPL for the given template ARGS. If there is
1168 no such specialization, return NULL_TREE. The ARGS are a vector of
1169 arguments, or a vector of vectors of arguments, in the case of
1170 templates with more than one level of parameters.
1172 If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
1173 then we search for a partial specialization matching ARGS. This
1174 parameter is ignored if TMPL is not a class template.
1176 We can also look up a FIELD_DECL, if it is a lambda capture pack; the
1177 result is a NONTYPE_ARGUMENT_PACK. */
1179 static tree
1180 retrieve_specialization (tree tmpl, tree args, hashval_t hash)
1182 if (tmpl == NULL_TREE)
1183 return NULL_TREE;
1185 if (args == error_mark_node)
1186 return NULL_TREE;
1188 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL
1189 || TREE_CODE (tmpl) == FIELD_DECL);
1191 /* There should be as many levels of arguments as there are
1192 levels of parameters. */
1193 gcc_assert (TMPL_ARGS_DEPTH (args)
1194 == (TREE_CODE (tmpl) == TEMPLATE_DECL
1195 ? TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl))
1196 : template_class_depth (DECL_CONTEXT (tmpl))));
1198 if (flag_checking)
1199 verify_unstripped_args (args);
1201 /* Lambda functions in templates aren't instantiated normally, but through
1202 tsubst_lambda_expr. */
1203 if (lambda_fn_in_template_p (tmpl))
1204 return NULL_TREE;
1206 if (optimize_specialization_lookup_p (tmpl))
1208 /* The template arguments actually apply to the containing
1209 class. Find the class specialization with those
1210 arguments. */
1211 tree class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
1212 tree class_specialization
1213 = retrieve_specialization (class_template, args, 0);
1214 if (!class_specialization)
1215 return NULL_TREE;
1217 /* Find the instance of TMPL. */
1218 tree fns = get_class_binding (class_specialization, DECL_NAME (tmpl));
1219 for (ovl_iterator iter (fns); iter; ++iter)
1221 tree fn = *iter;
1222 if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl
1223 /* using-declarations can add base methods to the method vec,
1224 and we don't want those here. */
1225 && DECL_CONTEXT (fn) == class_specialization)
1226 return fn;
1228 return NULL_TREE;
1230 else
1232 spec_entry *found;
1233 spec_entry elt;
1234 hash_table<spec_hasher> *specializations;
1236 elt.tmpl = tmpl;
1237 elt.args = args;
1238 elt.spec = NULL_TREE;
1240 if (DECL_CLASS_TEMPLATE_P (tmpl))
1241 specializations = type_specializations;
1242 else
1243 specializations = decl_specializations;
1245 if (hash == 0)
1246 hash = spec_hasher::hash (&elt);
1247 found = specializations->find_with_hash (&elt, hash);
1248 if (found)
1249 return found->spec;
1252 return NULL_TREE;
1255 /* Like retrieve_specialization, but for local declarations. */
1257 tree
1258 retrieve_local_specialization (tree tmpl)
1260 if (local_specializations == NULL)
1261 return NULL_TREE;
1263 tree *slot = local_specializations->get (tmpl);
1264 return slot ? *slot : NULL_TREE;
1267 /* Returns nonzero iff DECL is a specialization of TMPL. */
1270 is_specialization_of (tree decl, tree tmpl)
1272 tree t;
1274 if (TREE_CODE (decl) == FUNCTION_DECL)
1276 for (t = decl;
1277 t != NULL_TREE;
1278 t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1279 if (t == tmpl)
1280 return 1;
1282 else
1284 gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1286 for (t = TREE_TYPE (decl);
1287 t != NULL_TREE;
1288 t = CLASSTYPE_USE_TEMPLATE (t)
1289 ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1290 if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1291 return 1;
1294 return 0;
1297 /* Returns nonzero iff DECL is a specialization of friend declaration
1298 FRIEND_DECL according to [temp.friend]. */
1300 bool
1301 is_specialization_of_friend (tree decl, tree friend_decl)
1303 bool need_template = true;
1304 int template_depth;
1306 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1307 || TREE_CODE (decl) == TYPE_DECL);
1309 /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1310 of a template class, we want to check if DECL is a specialization
1311 if this. */
1312 if (TREE_CODE (friend_decl) == FUNCTION_DECL
1313 && DECL_TEMPLATE_INFO (friend_decl)
1314 && !DECL_USE_TEMPLATE (friend_decl))
1316 /* We want a TEMPLATE_DECL for `is_specialization_of'. */
1317 friend_decl = DECL_TI_TEMPLATE (friend_decl);
1318 need_template = false;
1320 else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1321 && !PRIMARY_TEMPLATE_P (friend_decl))
1322 need_template = false;
1324 /* There is nothing to do if this is not a template friend. */
1325 if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1326 return false;
1328 if (is_specialization_of (decl, friend_decl))
1329 return true;
1331 /* [temp.friend/6]
1332 A member of a class template may be declared to be a friend of a
1333 non-template class. In this case, the corresponding member of
1334 every specialization of the class template is a friend of the
1335 class granting friendship.
1337 For example, given a template friend declaration
1339 template <class T> friend void A<T>::f();
1341 the member function below is considered a friend
1343 template <> struct A<int> {
1344 void f();
1347 For this type of template friend, TEMPLATE_DEPTH below will be
1348 nonzero. To determine if DECL is a friend of FRIEND, we first
1349 check if the enclosing class is a specialization of another. */
1351 template_depth = template_class_depth (CP_DECL_CONTEXT (friend_decl));
1352 if (template_depth
1353 && DECL_CLASS_SCOPE_P (decl)
1354 && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1355 CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1357 /* Next, we check the members themselves. In order to handle
1358 a few tricky cases, such as when FRIEND_DECL's are
1360 template <class T> friend void A<T>::g(T t);
1361 template <class T> template <T t> friend void A<T>::h();
1363 and DECL's are
1365 void A<int>::g(int);
1366 template <int> void A<int>::h();
1368 we need to figure out ARGS, the template arguments from
1369 the context of DECL. This is required for template substitution
1370 of `T' in the function parameter of `g' and template parameter
1371 of `h' in the above examples. Here ARGS corresponds to `int'. */
1373 tree context = DECL_CONTEXT (decl);
1374 tree args = NULL_TREE;
1375 int current_depth = 0;
1377 while (current_depth < template_depth)
1379 if (CLASSTYPE_TEMPLATE_INFO (context))
1381 if (current_depth == 0)
1382 args = TYPE_TI_ARGS (context);
1383 else
1384 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1385 current_depth++;
1387 context = TYPE_CONTEXT (context);
1390 if (TREE_CODE (decl) == FUNCTION_DECL)
1392 bool is_template;
1393 tree friend_type;
1394 tree decl_type;
1395 tree friend_args_type;
1396 tree decl_args_type;
1398 /* Make sure that both DECL and FRIEND_DECL are templates or
1399 non-templates. */
1400 is_template = DECL_TEMPLATE_INFO (decl)
1401 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1402 if (need_template ^ is_template)
1403 return false;
1404 else if (is_template)
1406 /* If both are templates, check template parameter list. */
1407 tree friend_parms
1408 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1409 args, tf_none);
1410 if (!comp_template_parms
1411 (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1412 friend_parms))
1413 return false;
1415 decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1417 else
1418 decl_type = TREE_TYPE (decl);
1420 friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1421 tf_none, NULL_TREE);
1422 if (friend_type == error_mark_node)
1423 return false;
1425 /* Check if return types match. */
1426 if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1427 return false;
1429 /* Check if function parameter types match, ignoring the
1430 `this' parameter. */
1431 friend_args_type = TYPE_ARG_TYPES (friend_type);
1432 decl_args_type = TYPE_ARG_TYPES (decl_type);
1433 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1434 friend_args_type = TREE_CHAIN (friend_args_type);
1435 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1436 decl_args_type = TREE_CHAIN (decl_args_type);
1438 return compparms (decl_args_type, friend_args_type);
1440 else
1442 /* DECL is a TYPE_DECL */
1443 bool is_template;
1444 tree decl_type = TREE_TYPE (decl);
1446 /* Make sure that both DECL and FRIEND_DECL are templates or
1447 non-templates. */
1448 is_template
1449 = CLASSTYPE_TEMPLATE_INFO (decl_type)
1450 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1452 if (need_template ^ is_template)
1453 return false;
1454 else if (is_template)
1456 tree friend_parms;
1457 /* If both are templates, check the name of the two
1458 TEMPLATE_DECL's first because is_friend didn't. */
1459 if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1460 != DECL_NAME (friend_decl))
1461 return false;
1463 /* Now check template parameter list. */
1464 friend_parms
1465 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1466 args, tf_none);
1467 return comp_template_parms
1468 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1469 friend_parms);
1471 else
1472 return (DECL_NAME (decl)
1473 == DECL_NAME (friend_decl));
1476 return false;
1479 /* Register the specialization SPEC as a specialization of TMPL with
1480 the indicated ARGS. IS_FRIEND indicates whether the specialization
1481 is actually just a friend declaration. ATTRLIST is the list of
1482 attributes that the specialization is declared with or NULL when
1483 it isn't. Returns SPEC, or an equivalent prior declaration, if
1484 available.
1486 We also store instantiations of field packs in the hash table, even
1487 though they are not themselves templates, to make lookup easier. */
1489 static tree
1490 register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
1491 hashval_t hash)
1493 tree fn;
1494 spec_entry **slot = NULL;
1495 spec_entry elt;
1497 gcc_assert ((TREE_CODE (tmpl) == TEMPLATE_DECL && DECL_P (spec))
1498 || (TREE_CODE (tmpl) == FIELD_DECL
1499 && TREE_CODE (spec) == NONTYPE_ARGUMENT_PACK));
1501 if (TREE_CODE (spec) == FUNCTION_DECL
1502 && uses_template_parms (DECL_TI_ARGS (spec)))
1503 /* This is the FUNCTION_DECL for a partial instantiation. Don't
1504 register it; we want the corresponding TEMPLATE_DECL instead.
1505 We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1506 the more obvious `uses_template_parms (spec)' to avoid problems
1507 with default function arguments. In particular, given
1508 something like this:
1510 template <class T> void f(T t1, T t = T())
1512 the default argument expression is not substituted for in an
1513 instantiation unless and until it is actually needed. */
1514 return spec;
1516 if (optimize_specialization_lookup_p (tmpl))
1517 /* We don't put these specializations in the hash table, but we might
1518 want to give an error about a mismatch. */
1519 fn = retrieve_specialization (tmpl, args, 0);
1520 else
1522 elt.tmpl = tmpl;
1523 elt.args = args;
1524 elt.spec = spec;
1526 if (hash == 0)
1527 hash = spec_hasher::hash (&elt);
1529 slot =
1530 decl_specializations->find_slot_with_hash (&elt, hash, INSERT);
1531 if (*slot)
1532 fn = ((spec_entry *) *slot)->spec;
1533 else
1534 fn = NULL_TREE;
1537 /* We can sometimes try to re-register a specialization that we've
1538 already got. In particular, regenerate_decl_from_template calls
1539 duplicate_decls which will update the specialization list. But,
1540 we'll still get called again here anyhow. It's more convenient
1541 to simply allow this than to try to prevent it. */
1542 if (fn == spec)
1543 return spec;
1544 else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1546 if (DECL_TEMPLATE_INSTANTIATION (fn))
1548 if (DECL_ODR_USED (fn)
1549 || DECL_EXPLICIT_INSTANTIATION (fn))
1551 error ("specialization of %qD after instantiation",
1552 fn);
1553 return error_mark_node;
1555 else
1557 tree clone;
1558 /* This situation should occur only if the first
1559 specialization is an implicit instantiation, the
1560 second is an explicit specialization, and the
1561 implicit instantiation has not yet been used. That
1562 situation can occur if we have implicitly
1563 instantiated a member function and then specialized
1564 it later.
1566 We can also wind up here if a friend declaration that
1567 looked like an instantiation turns out to be a
1568 specialization:
1570 template <class T> void foo(T);
1571 class S { friend void foo<>(int) };
1572 template <> void foo(int);
1574 We transform the existing DECL in place so that any
1575 pointers to it become pointers to the updated
1576 declaration.
1578 If there was a definition for the template, but not
1579 for the specialization, we want this to look as if
1580 there were no definition, and vice versa. */
1581 DECL_INITIAL (fn) = NULL_TREE;
1582 duplicate_decls (spec, fn, is_friend);
1583 /* The call to duplicate_decls will have applied
1584 [temp.expl.spec]:
1586 An explicit specialization of a function template
1587 is inline only if it is explicitly declared to be,
1588 and independently of whether its function template
1591 to the primary function; now copy the inline bits to
1592 the various clones. */
1593 FOR_EACH_CLONE (clone, fn)
1595 DECL_DECLARED_INLINE_P (clone)
1596 = DECL_DECLARED_INLINE_P (fn);
1597 DECL_SOURCE_LOCATION (clone)
1598 = DECL_SOURCE_LOCATION (fn);
1599 DECL_DELETED_FN (clone)
1600 = DECL_DELETED_FN (fn);
1602 check_specialization_namespace (tmpl);
1604 return fn;
1607 else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1609 tree dd = duplicate_decls (spec, fn, is_friend);
1610 if (dd == error_mark_node)
1611 /* We've already complained in duplicate_decls. */
1612 return error_mark_node;
1614 if (dd == NULL_TREE && DECL_INITIAL (spec))
1615 /* Dup decl failed, but this is a new definition. Set the
1616 line number so any errors match this new
1617 definition. */
1618 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1620 return fn;
1623 else if (fn)
1624 return duplicate_decls (spec, fn, is_friend);
1626 /* A specialization must be declared in the same namespace as the
1627 template it is specializing. */
1628 if (DECL_P (spec) && DECL_TEMPLATE_SPECIALIZATION (spec)
1629 && !check_specialization_namespace (tmpl))
1630 DECL_CONTEXT (spec) = DECL_CONTEXT (tmpl);
1632 if (slot != NULL /* !optimize_specialization_lookup_p (tmpl) */)
1634 spec_entry *entry = ggc_alloc<spec_entry> ();
1635 gcc_assert (tmpl && args && spec);
1636 *entry = elt;
1637 *slot = entry;
1638 if ((TREE_CODE (spec) == FUNCTION_DECL && DECL_NAMESPACE_SCOPE_P (spec)
1639 && PRIMARY_TEMPLATE_P (tmpl)
1640 && DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (tmpl)) == NULL_TREE)
1641 || variable_template_p (tmpl))
1642 /* If TMPL is a forward declaration of a template function, keep a list
1643 of all specializations in case we need to reassign them to a friend
1644 template later in tsubst_friend_function.
1646 Also keep a list of all variable template instantiations so that
1647 process_partial_specialization can check whether a later partial
1648 specialization would have used it. */
1649 DECL_TEMPLATE_INSTANTIATIONS (tmpl)
1650 = tree_cons (args, spec, DECL_TEMPLATE_INSTANTIATIONS (tmpl));
1653 return spec;
1656 /* Returns true iff two spec_entry nodes are equivalent. */
1658 int comparing_specializations;
1660 bool
1661 spec_hasher::equal (spec_entry *e1, spec_entry *e2)
1663 int equal;
1665 ++comparing_specializations;
1666 equal = (e1->tmpl == e2->tmpl
1667 && comp_template_args (e1->args, e2->args));
1668 if (equal && flag_concepts
1669 /* tmpl could be a FIELD_DECL for a capture pack. */
1670 && TREE_CODE (e1->tmpl) == TEMPLATE_DECL
1671 && VAR_P (DECL_TEMPLATE_RESULT (e1->tmpl))
1672 && uses_template_parms (e1->args))
1674 /* Partial specializations of a variable template can be distinguished by
1675 constraints. */
1676 tree c1 = e1->spec ? get_constraints (e1->spec) : NULL_TREE;
1677 tree c2 = e2->spec ? get_constraints (e2->spec) : NULL_TREE;
1678 equal = equivalent_constraints (c1, c2);
1680 --comparing_specializations;
1682 return equal;
1685 /* Returns a hash for a template TMPL and template arguments ARGS. */
1687 static hashval_t
1688 hash_tmpl_and_args (tree tmpl, tree args)
1690 hashval_t val = iterative_hash_object (DECL_UID (tmpl), 0);
1691 return iterative_hash_template_arg (args, val);
1694 /* Returns a hash for a spec_entry node based on the TMPL and ARGS members,
1695 ignoring SPEC. */
1697 hashval_t
1698 spec_hasher::hash (spec_entry *e)
1700 return hash_tmpl_and_args (e->tmpl, e->args);
1703 /* Recursively calculate a hash value for a template argument ARG, for use
1704 in the hash tables of template specializations. */
1706 hashval_t
1707 iterative_hash_template_arg (tree arg, hashval_t val)
1709 unsigned HOST_WIDE_INT i;
1710 enum tree_code code;
1711 char tclass;
1713 if (arg == NULL_TREE)
1714 return iterative_hash_object (arg, val);
1716 if (!TYPE_P (arg))
1717 STRIP_NOPS (arg);
1719 if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
1720 gcc_unreachable ();
1722 code = TREE_CODE (arg);
1723 tclass = TREE_CODE_CLASS (code);
1725 val = iterative_hash_object (code, val);
1727 switch (code)
1729 case ERROR_MARK:
1730 return val;
1732 case IDENTIFIER_NODE:
1733 return iterative_hash_object (IDENTIFIER_HASH_VALUE (arg), val);
1735 case TREE_VEC:
1737 int i, len = TREE_VEC_LENGTH (arg);
1738 for (i = 0; i < len; ++i)
1739 val = iterative_hash_template_arg (TREE_VEC_ELT (arg, i), val);
1740 return val;
1743 case TYPE_PACK_EXPANSION:
1744 case EXPR_PACK_EXPANSION:
1745 val = iterative_hash_template_arg (PACK_EXPANSION_PATTERN (arg), val);
1746 return iterative_hash_template_arg (PACK_EXPANSION_EXTRA_ARGS (arg), val);
1748 case TYPE_ARGUMENT_PACK:
1749 case NONTYPE_ARGUMENT_PACK:
1750 return iterative_hash_template_arg (ARGUMENT_PACK_ARGS (arg), val);
1752 case TREE_LIST:
1753 for (; arg; arg = TREE_CHAIN (arg))
1754 val = iterative_hash_template_arg (TREE_VALUE (arg), val);
1755 return val;
1757 case OVERLOAD:
1758 for (lkp_iterator iter (arg); iter; ++iter)
1759 val = iterative_hash_template_arg (*iter, val);
1760 return val;
1762 case CONSTRUCTOR:
1764 tree field, value;
1765 iterative_hash_template_arg (TREE_TYPE (arg), val);
1766 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (arg), i, field, value)
1768 val = iterative_hash_template_arg (field, val);
1769 val = iterative_hash_template_arg (value, val);
1771 return val;
1774 case PARM_DECL:
1775 if (!DECL_ARTIFICIAL (arg))
1777 val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
1778 val = iterative_hash_object (DECL_PARM_LEVEL (arg), val);
1780 return iterative_hash_template_arg (TREE_TYPE (arg), val);
1782 case TARGET_EXPR:
1783 return iterative_hash_template_arg (TARGET_EXPR_INITIAL (arg), val);
1785 case PTRMEM_CST:
1786 val = iterative_hash_template_arg (PTRMEM_CST_CLASS (arg), val);
1787 return iterative_hash_template_arg (PTRMEM_CST_MEMBER (arg), val);
1789 case TEMPLATE_PARM_INDEX:
1790 val = iterative_hash_template_arg
1791 (TREE_TYPE (TEMPLATE_PARM_DECL (arg)), val);
1792 val = iterative_hash_object (TEMPLATE_PARM_LEVEL (arg), val);
1793 return iterative_hash_object (TEMPLATE_PARM_IDX (arg), val);
1795 case TRAIT_EXPR:
1796 val = iterative_hash_object (TRAIT_EXPR_KIND (arg), val);
1797 val = iterative_hash_template_arg (TRAIT_EXPR_TYPE1 (arg), val);
1798 return iterative_hash_template_arg (TRAIT_EXPR_TYPE2 (arg), val);
1800 case BASELINK:
1801 val = iterative_hash_template_arg (BINFO_TYPE (BASELINK_BINFO (arg)),
1802 val);
1803 return iterative_hash_template_arg (DECL_NAME (get_first_fn (arg)),
1804 val);
1806 case MODOP_EXPR:
1807 val = iterative_hash_template_arg (TREE_OPERAND (arg, 0), val);
1808 code = TREE_CODE (TREE_OPERAND (arg, 1));
1809 val = iterative_hash_object (code, val);
1810 return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
1812 case LAMBDA_EXPR:
1813 /* A lambda can't appear in a template arg, but don't crash on
1814 erroneous input. */
1815 gcc_assert (seen_error ());
1816 return val;
1818 case CAST_EXPR:
1819 case IMPLICIT_CONV_EXPR:
1820 case STATIC_CAST_EXPR:
1821 case REINTERPRET_CAST_EXPR:
1822 case CONST_CAST_EXPR:
1823 case DYNAMIC_CAST_EXPR:
1824 case NEW_EXPR:
1825 val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1826 /* Now hash operands as usual. */
1827 break;
1829 default:
1830 break;
1833 switch (tclass)
1835 case tcc_type:
1836 if (alias_template_specialization_p (arg))
1838 // We want an alias specialization that survived strip_typedefs
1839 // to hash differently from its TYPE_CANONICAL, to avoid hash
1840 // collisions that compare as different in template_args_equal.
1841 // These could be dependent specializations that strip_typedefs
1842 // left alone, or untouched specializations because
1843 // coerce_template_parms returns the unconverted template
1844 // arguments if it sees incomplete argument packs.
1845 tree ti = TYPE_ALIAS_TEMPLATE_INFO (arg);
1846 return hash_tmpl_and_args (TI_TEMPLATE (ti), TI_ARGS (ti));
1848 if (TYPE_CANONICAL (arg))
1849 return iterative_hash_object (TYPE_HASH (TYPE_CANONICAL (arg)),
1850 val);
1851 else if (TREE_CODE (arg) == DECLTYPE_TYPE)
1852 return iterative_hash_template_arg (DECLTYPE_TYPE_EXPR (arg), val);
1853 /* Otherwise just compare the types during lookup. */
1854 return val;
1856 case tcc_declaration:
1857 case tcc_constant:
1858 return iterative_hash_expr (arg, val);
1860 default:
1861 gcc_assert (IS_EXPR_CODE_CLASS (tclass));
1863 unsigned n = cp_tree_operand_length (arg);
1864 for (i = 0; i < n; ++i)
1865 val = iterative_hash_template_arg (TREE_OPERAND (arg, i), val);
1866 return val;
1869 gcc_unreachable ();
1870 return 0;
1873 /* Unregister the specialization SPEC as a specialization of TMPL.
1874 Replace it with NEW_SPEC, if NEW_SPEC is non-NULL. Returns true
1875 if the SPEC was listed as a specialization of TMPL.
1877 Note that SPEC has been ggc_freed, so we can't look inside it. */
1879 bool
1880 reregister_specialization (tree spec, tree tinfo, tree new_spec)
1882 spec_entry *entry;
1883 spec_entry elt;
1885 elt.tmpl = most_general_template (TI_TEMPLATE (tinfo));
1886 elt.args = TI_ARGS (tinfo);
1887 elt.spec = NULL_TREE;
1889 entry = decl_specializations->find (&elt);
1890 if (entry != NULL)
1892 gcc_assert (entry->spec == spec || entry->spec == new_spec);
1893 gcc_assert (new_spec != NULL_TREE);
1894 entry->spec = new_spec;
1895 return 1;
1898 return 0;
1901 /* Like register_specialization, but for local declarations. We are
1902 registering SPEC, an instantiation of TMPL. */
1904 void
1905 register_local_specialization (tree spec, tree tmpl)
1907 gcc_assert (tmpl != spec);
1908 local_specializations->put (tmpl, spec);
1911 /* TYPE is a class type. Returns true if TYPE is an explicitly
1912 specialized class. */
1914 bool
1915 explicit_class_specialization_p (tree type)
1917 if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1918 return false;
1919 return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1922 /* Print the list of functions at FNS, going through all the overloads
1923 for each element of the list. Alternatively, FNS can not be a
1924 TREE_LIST, in which case it will be printed together with all the
1925 overloads.
1927 MORE and *STR should respectively be FALSE and NULL when the function
1928 is called from the outside. They are used internally on recursive
1929 calls. print_candidates manages the two parameters and leaves NULL
1930 in *STR when it ends. */
1932 static void
1933 print_candidates_1 (tree fns, char **str, bool more = false)
1935 if (TREE_CODE (fns) == TREE_LIST)
1936 for (; fns; fns = TREE_CHAIN (fns))
1937 print_candidates_1 (TREE_VALUE (fns), str, more || TREE_CHAIN (fns));
1938 else
1939 for (lkp_iterator iter (fns); iter;)
1941 tree cand = *iter;
1942 ++iter;
1944 const char *pfx = *str;
1945 if (!pfx)
1947 if (more || iter)
1948 pfx = _("candidates are:");
1949 else
1950 pfx = _("candidate is:");
1951 *str = get_spaces (pfx);
1953 inform (DECL_SOURCE_LOCATION (cand), "%s %#qD", pfx, cand);
1957 /* Print the list of candidate FNS in an error message. FNS can also
1958 be a TREE_LIST of non-functions in the case of an ambiguous lookup. */
1960 void
1961 print_candidates (tree fns)
1963 char *str = NULL;
1964 print_candidates_1 (fns, &str);
1965 free (str);
1968 /* Get a (possibly) constrained template declaration for the
1969 purpose of ordering candidates. */
1970 static tree
1971 get_template_for_ordering (tree list)
1973 gcc_assert (TREE_CODE (list) == TREE_LIST);
1974 tree f = TREE_VALUE (list);
1975 if (tree ti = DECL_TEMPLATE_INFO (f))
1976 return TI_TEMPLATE (ti);
1977 return f;
1980 /* Among candidates having the same signature, return the
1981 most constrained or NULL_TREE if there is no best candidate.
1982 If the signatures of candidates vary (e.g., template
1983 specialization vs. member function), then there can be no
1984 most constrained.
1986 Note that we don't compare constraints on the functions
1987 themselves, but rather those of their templates. */
1988 static tree
1989 most_constrained_function (tree candidates)
1991 // Try to find the best candidate in a first pass.
1992 tree champ = candidates;
1993 for (tree c = TREE_CHAIN (champ); c; c = TREE_CHAIN (c))
1995 int winner = more_constrained (get_template_for_ordering (champ),
1996 get_template_for_ordering (c));
1997 if (winner == -1)
1998 champ = c; // The candidate is more constrained
1999 else if (winner == 0)
2000 return NULL_TREE; // Neither is more constrained
2003 // Verify that the champ is better than previous candidates.
2004 for (tree c = candidates; c != champ; c = TREE_CHAIN (c)) {
2005 if (!more_constrained (get_template_for_ordering (champ),
2006 get_template_for_ordering (c)))
2007 return NULL_TREE;
2010 return champ;
2014 /* Returns the template (one of the functions given by TEMPLATE_ID)
2015 which can be specialized to match the indicated DECL with the
2016 explicit template args given in TEMPLATE_ID. The DECL may be
2017 NULL_TREE if none is available. In that case, the functions in
2018 TEMPLATE_ID are non-members.
2020 If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
2021 specialization of a member template.
2023 The TEMPLATE_COUNT is the number of references to qualifying
2024 template classes that appeared in the name of the function. See
2025 check_explicit_specialization for a more accurate description.
2027 TSK indicates what kind of template declaration (if any) is being
2028 declared. TSK_TEMPLATE indicates that the declaration given by
2029 DECL, though a FUNCTION_DECL, has template parameters, and is
2030 therefore a template function.
2032 The template args (those explicitly specified and those deduced)
2033 are output in a newly created vector *TARGS_OUT.
2035 If it is impossible to determine the result, an error message is
2036 issued. The error_mark_node is returned to indicate failure. */
2038 static tree
2039 determine_specialization (tree template_id,
2040 tree decl,
2041 tree* targs_out,
2042 int need_member_template,
2043 int template_count,
2044 tmpl_spec_kind tsk)
2046 tree fns;
2047 tree targs;
2048 tree explicit_targs;
2049 tree candidates = NULL_TREE;
2051 /* A TREE_LIST of templates of which DECL may be a specialization.
2052 The TREE_VALUE of each node is a TEMPLATE_DECL. The
2053 corresponding TREE_PURPOSE is the set of template arguments that,
2054 when used to instantiate the template, would produce a function
2055 with the signature of DECL. */
2056 tree templates = NULL_TREE;
2057 int header_count;
2058 cp_binding_level *b;
2060 *targs_out = NULL_TREE;
2062 if (template_id == error_mark_node || decl == error_mark_node)
2063 return error_mark_node;
2065 /* We shouldn't be specializing a member template of an
2066 unspecialized class template; we already gave an error in
2067 check_specialization_scope, now avoid crashing. */
2068 if (!VAR_P (decl)
2069 && template_count && DECL_CLASS_SCOPE_P (decl)
2070 && template_class_depth (DECL_CONTEXT (decl)) > 0)
2072 gcc_assert (errorcount);
2073 return error_mark_node;
2076 fns = TREE_OPERAND (template_id, 0);
2077 explicit_targs = TREE_OPERAND (template_id, 1);
2079 if (fns == error_mark_node)
2080 return error_mark_node;
2082 /* Check for baselinks. */
2083 if (BASELINK_P (fns))
2084 fns = BASELINK_FUNCTIONS (fns);
2086 if (TREE_CODE (decl) == FUNCTION_DECL && !is_overloaded_fn (fns))
2088 error ("%qD is not a function template", fns);
2089 return error_mark_node;
2091 else if (VAR_P (decl) && !variable_template_p (fns))
2093 error ("%qD is not a variable template", fns);
2094 return error_mark_node;
2097 /* Count the number of template headers specified for this
2098 specialization. */
2099 header_count = 0;
2100 for (b = current_binding_level;
2101 b->kind == sk_template_parms;
2102 b = b->level_chain)
2103 ++header_count;
2105 tree orig_fns = fns;
2107 if (variable_template_p (fns))
2109 tree parms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (fns));
2110 targs = coerce_template_parms (parms, explicit_targs, fns,
2111 tf_warning_or_error,
2112 /*req_all*/true, /*use_defarg*/true);
2113 if (targs != error_mark_node)
2114 templates = tree_cons (targs, fns, templates);
2116 else for (lkp_iterator iter (fns); iter; ++iter)
2118 tree fn = *iter;
2120 if (TREE_CODE (fn) == TEMPLATE_DECL)
2122 tree decl_arg_types;
2123 tree fn_arg_types;
2124 tree insttype;
2126 /* In case of explicit specialization, we need to check if
2127 the number of template headers appearing in the specialization
2128 is correct. This is usually done in check_explicit_specialization,
2129 but the check done there cannot be exhaustive when specializing
2130 member functions. Consider the following code:
2132 template <> void A<int>::f(int);
2133 template <> template <> void A<int>::f(int);
2135 Assuming that A<int> is not itself an explicit specialization
2136 already, the first line specializes "f" which is a non-template
2137 member function, whilst the second line specializes "f" which
2138 is a template member function. So both lines are syntactically
2139 correct, and check_explicit_specialization does not reject
2140 them.
2142 Here, we can do better, as we are matching the specialization
2143 against the declarations. We count the number of template
2144 headers, and we check if they match TEMPLATE_COUNT + 1
2145 (TEMPLATE_COUNT is the number of qualifying template classes,
2146 plus there must be another header for the member template
2147 itself).
2149 Notice that if header_count is zero, this is not a
2150 specialization but rather a template instantiation, so there
2151 is no check we can perform here. */
2152 if (header_count && header_count != template_count + 1)
2153 continue;
2155 /* Check that the number of template arguments at the
2156 innermost level for DECL is the same as for FN. */
2157 if (current_binding_level->kind == sk_template_parms
2158 && !current_binding_level->explicit_spec_p
2159 && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
2160 != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
2161 (current_template_parms))))
2162 continue;
2164 /* DECL might be a specialization of FN. */
2165 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
2166 fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
2168 /* For a non-static member function, we need to make sure
2169 that the const qualification is the same. Since
2170 get_bindings does not try to merge the "this" parameter,
2171 we must do the comparison explicitly. */
2172 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
2174 if (!same_type_p (TREE_VALUE (fn_arg_types),
2175 TREE_VALUE (decl_arg_types)))
2176 continue;
2178 /* And the ref-qualification. */
2179 if (type_memfn_rqual (TREE_TYPE (decl))
2180 != type_memfn_rqual (TREE_TYPE (fn)))
2181 continue;
2184 /* Skip the "this" parameter and, for constructors of
2185 classes with virtual bases, the VTT parameter. A
2186 full specialization of a constructor will have a VTT
2187 parameter, but a template never will. */
2188 decl_arg_types
2189 = skip_artificial_parms_for (decl, decl_arg_types);
2190 fn_arg_types
2191 = skip_artificial_parms_for (fn, fn_arg_types);
2193 /* Function templates cannot be specializations; there are
2194 no partial specializations of functions. Therefore, if
2195 the type of DECL does not match FN, there is no
2196 match.
2198 Note that it should never be the case that we have both
2199 candidates added here, and for regular member functions
2200 below. */
2201 if (tsk == tsk_template)
2203 if (compparms (fn_arg_types, decl_arg_types))
2204 candidates = tree_cons (NULL_TREE, fn, candidates);
2205 continue;
2208 /* See whether this function might be a specialization of this
2209 template. Suppress access control because we might be trying
2210 to make this specialization a friend, and we have already done
2211 access control for the declaration of the specialization. */
2212 push_deferring_access_checks (dk_no_check);
2213 targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
2214 pop_deferring_access_checks ();
2216 if (!targs)
2217 /* We cannot deduce template arguments that when used to
2218 specialize TMPL will produce DECL. */
2219 continue;
2221 if (uses_template_parms (targs))
2222 /* We deduced something involving 'auto', which isn't a valid
2223 template argument. */
2224 continue;
2226 /* Remove, from the set of candidates, all those functions
2227 whose constraints are not satisfied. */
2228 if (flag_concepts && !constraints_satisfied_p (fn, targs))
2229 continue;
2231 // Then, try to form the new function type.
2232 insttype = tsubst (TREE_TYPE (fn), targs, tf_fndecl_type, NULL_TREE);
2233 if (insttype == error_mark_node)
2234 continue;
2235 fn_arg_types
2236 = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (insttype));
2237 if (!compparms (fn_arg_types, decl_arg_types))
2238 continue;
2240 /* Save this template, and the arguments deduced. */
2241 templates = tree_cons (targs, fn, templates);
2243 else if (need_member_template)
2244 /* FN is an ordinary member function, and we need a
2245 specialization of a member template. */
2247 else if (TREE_CODE (fn) != FUNCTION_DECL)
2248 /* We can get IDENTIFIER_NODEs here in certain erroneous
2249 cases. */
2251 else if (!DECL_FUNCTION_MEMBER_P (fn))
2252 /* This is just an ordinary non-member function. Nothing can
2253 be a specialization of that. */
2255 else if (DECL_ARTIFICIAL (fn))
2256 /* Cannot specialize functions that are created implicitly. */
2258 else
2260 tree decl_arg_types;
2262 /* This is an ordinary member function. However, since
2263 we're here, we can assume its enclosing class is a
2264 template class. For example,
2266 template <typename T> struct S { void f(); };
2267 template <> void S<int>::f() {}
2269 Here, S<int>::f is a non-template, but S<int> is a
2270 template class. If FN has the same type as DECL, we
2271 might be in business. */
2273 if (!DECL_TEMPLATE_INFO (fn))
2274 /* Its enclosing class is an explicit specialization
2275 of a template class. This is not a candidate. */
2276 continue;
2278 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
2279 TREE_TYPE (TREE_TYPE (fn))))
2280 /* The return types differ. */
2281 continue;
2283 /* Adjust the type of DECL in case FN is a static member. */
2284 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
2285 if (DECL_STATIC_FUNCTION_P (fn)
2286 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2287 decl_arg_types = TREE_CHAIN (decl_arg_types);
2289 if (!compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
2290 decl_arg_types))
2291 continue;
2293 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
2294 && (type_memfn_rqual (TREE_TYPE (decl))
2295 != type_memfn_rqual (TREE_TYPE (fn))))
2296 continue;
2298 // If the deduced arguments do not satisfy the constraints,
2299 // this is not a candidate.
2300 if (flag_concepts && !constraints_satisfied_p (fn))
2301 continue;
2303 // Add the candidate.
2304 candidates = tree_cons (NULL_TREE, fn, candidates);
2308 if (templates && TREE_CHAIN (templates))
2310 /* We have:
2312 [temp.expl.spec]
2314 It is possible for a specialization with a given function
2315 signature to be instantiated from more than one function
2316 template. In such cases, explicit specification of the
2317 template arguments must be used to uniquely identify the
2318 function template specialization being specialized.
2320 Note that here, there's no suggestion that we're supposed to
2321 determine which of the candidate templates is most
2322 specialized. However, we, also have:
2324 [temp.func.order]
2326 Partial ordering of overloaded function template
2327 declarations is used in the following contexts to select
2328 the function template to which a function template
2329 specialization refers:
2331 -- when an explicit specialization refers to a function
2332 template.
2334 So, we do use the partial ordering rules, at least for now.
2335 This extension can only serve to make invalid programs valid,
2336 so it's safe. And, there is strong anecdotal evidence that
2337 the committee intended the partial ordering rules to apply;
2338 the EDG front end has that behavior, and John Spicer claims
2339 that the committee simply forgot to delete the wording in
2340 [temp.expl.spec]. */
2341 tree tmpl = most_specialized_instantiation (templates);
2342 if (tmpl != error_mark_node)
2344 templates = tmpl;
2345 TREE_CHAIN (templates) = NULL_TREE;
2349 // Concepts allows multiple declarations of member functions
2350 // with the same signature. Like above, we need to rely on
2351 // on the partial ordering of those candidates to determine which
2352 // is the best.
2353 if (flag_concepts && candidates && TREE_CHAIN (candidates))
2355 if (tree cand = most_constrained_function (candidates))
2357 candidates = cand;
2358 TREE_CHAIN (cand) = NULL_TREE;
2362 if (templates == NULL_TREE && candidates == NULL_TREE)
2364 error ("template-id %qD for %q+D does not match any template "
2365 "declaration", template_id, decl);
2366 if (header_count && header_count != template_count + 1)
2367 inform (input_location, "saw %d %<template<>%>, need %d for "
2368 "specializing a member function template",
2369 header_count, template_count + 1);
2370 else
2371 print_candidates (orig_fns);
2372 return error_mark_node;
2374 else if ((templates && TREE_CHAIN (templates))
2375 || (candidates && TREE_CHAIN (candidates))
2376 || (templates && candidates))
2378 error ("ambiguous template specialization %qD for %q+D",
2379 template_id, decl);
2380 candidates = chainon (candidates, templates);
2381 print_candidates (candidates);
2382 return error_mark_node;
2385 /* We have one, and exactly one, match. */
2386 if (candidates)
2388 tree fn = TREE_VALUE (candidates);
2389 *targs_out = copy_node (DECL_TI_ARGS (fn));
2391 // Propagate the candidate's constraints to the declaration.
2392 set_constraints (decl, get_constraints (fn));
2394 /* DECL is a re-declaration or partial instantiation of a template
2395 function. */
2396 if (TREE_CODE (fn) == TEMPLATE_DECL)
2397 return fn;
2398 /* It was a specialization of an ordinary member function in a
2399 template class. */
2400 return DECL_TI_TEMPLATE (fn);
2403 /* It was a specialization of a template. */
2404 targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
2405 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
2407 *targs_out = copy_node (targs);
2408 SET_TMPL_ARGS_LEVEL (*targs_out,
2409 TMPL_ARGS_DEPTH (*targs_out),
2410 TREE_PURPOSE (templates));
2412 else
2413 *targs_out = TREE_PURPOSE (templates);
2414 return TREE_VALUE (templates);
2417 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
2418 but with the default argument values filled in from those in the
2419 TMPL_TYPES. */
2421 static tree
2422 copy_default_args_to_explicit_spec_1 (tree spec_types,
2423 tree tmpl_types)
2425 tree new_spec_types;
2427 if (!spec_types)
2428 return NULL_TREE;
2430 if (spec_types == void_list_node)
2431 return void_list_node;
2433 /* Substitute into the rest of the list. */
2434 new_spec_types =
2435 copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
2436 TREE_CHAIN (tmpl_types));
2438 /* Add the default argument for this parameter. */
2439 return hash_tree_cons (TREE_PURPOSE (tmpl_types),
2440 TREE_VALUE (spec_types),
2441 new_spec_types);
2444 /* DECL is an explicit specialization. Replicate default arguments
2445 from the template it specializes. (That way, code like:
2447 template <class T> void f(T = 3);
2448 template <> void f(double);
2449 void g () { f (); }
2451 works, as required.) An alternative approach would be to look up
2452 the correct default arguments at the call-site, but this approach
2453 is consistent with how implicit instantiations are handled. */
2455 static void
2456 copy_default_args_to_explicit_spec (tree decl)
2458 tree tmpl;
2459 tree spec_types;
2460 tree tmpl_types;
2461 tree new_spec_types;
2462 tree old_type;
2463 tree new_type;
2464 tree t;
2465 tree object_type = NULL_TREE;
2466 tree in_charge = NULL_TREE;
2467 tree vtt = NULL_TREE;
2469 /* See if there's anything we need to do. */
2470 tmpl = DECL_TI_TEMPLATE (decl);
2471 tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
2472 for (t = tmpl_types; t; t = TREE_CHAIN (t))
2473 if (TREE_PURPOSE (t))
2474 break;
2475 if (!t)
2476 return;
2478 old_type = TREE_TYPE (decl);
2479 spec_types = TYPE_ARG_TYPES (old_type);
2481 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2483 /* Remove the this pointer, but remember the object's type for
2484 CV quals. */
2485 object_type = TREE_TYPE (TREE_VALUE (spec_types));
2486 spec_types = TREE_CHAIN (spec_types);
2487 tmpl_types = TREE_CHAIN (tmpl_types);
2489 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
2491 /* DECL may contain more parameters than TMPL due to the extra
2492 in-charge parameter in constructors and destructors. */
2493 in_charge = spec_types;
2494 spec_types = TREE_CHAIN (spec_types);
2496 if (DECL_HAS_VTT_PARM_P (decl))
2498 vtt = spec_types;
2499 spec_types = TREE_CHAIN (spec_types);
2503 /* Compute the merged default arguments. */
2504 new_spec_types =
2505 copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
2507 /* Compute the new FUNCTION_TYPE. */
2508 if (object_type)
2510 if (vtt)
2511 new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
2512 TREE_VALUE (vtt),
2513 new_spec_types);
2515 if (in_charge)
2516 /* Put the in-charge parameter back. */
2517 new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
2518 TREE_VALUE (in_charge),
2519 new_spec_types);
2521 new_type = build_method_type_directly (object_type,
2522 TREE_TYPE (old_type),
2523 new_spec_types);
2525 else
2526 new_type = build_function_type (TREE_TYPE (old_type),
2527 new_spec_types);
2528 new_type = cp_build_type_attribute_variant (new_type,
2529 TYPE_ATTRIBUTES (old_type));
2530 new_type = build_exception_variant (new_type,
2531 TYPE_RAISES_EXCEPTIONS (old_type));
2533 if (TYPE_HAS_LATE_RETURN_TYPE (old_type))
2534 TYPE_HAS_LATE_RETURN_TYPE (new_type) = 1;
2536 TREE_TYPE (decl) = new_type;
2539 /* Return the number of template headers we expect to see for a definition
2540 or specialization of CTYPE or one of its non-template members. */
2543 num_template_headers_for_class (tree ctype)
2545 int num_templates = 0;
2547 while (ctype && CLASS_TYPE_P (ctype))
2549 /* You're supposed to have one `template <...>' for every
2550 template class, but you don't need one for a full
2551 specialization. For example:
2553 template <class T> struct S{};
2554 template <> struct S<int> { void f(); };
2555 void S<int>::f () {}
2557 is correct; there shouldn't be a `template <>' for the
2558 definition of `S<int>::f'. */
2559 if (!CLASSTYPE_TEMPLATE_INFO (ctype))
2560 /* If CTYPE does not have template information of any
2561 kind, then it is not a template, nor is it nested
2562 within a template. */
2563 break;
2564 if (explicit_class_specialization_p (ctype))
2565 break;
2566 if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (ctype)))
2567 ++num_templates;
2569 ctype = TYPE_CONTEXT (ctype);
2572 return num_templates;
2575 /* Do a simple sanity check on the template headers that precede the
2576 variable declaration DECL. */
2578 void
2579 check_template_variable (tree decl)
2581 tree ctx = CP_DECL_CONTEXT (decl);
2582 int wanted = num_template_headers_for_class (ctx);
2583 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl)
2584 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl)))
2586 if (cxx_dialect < cxx14)
2587 pedwarn (DECL_SOURCE_LOCATION (decl), 0,
2588 "variable templates only available with "
2589 "-std=c++14 or -std=gnu++14");
2591 // Namespace-scope variable templates should have a template header.
2592 ++wanted;
2594 if (template_header_count > wanted)
2596 bool warned = pedwarn (DECL_SOURCE_LOCATION (decl), 0,
2597 "too many template headers for %qD "
2598 "(should be %d)",
2599 decl, wanted);
2600 if (warned && CLASS_TYPE_P (ctx)
2601 && CLASSTYPE_TEMPLATE_SPECIALIZATION (ctx))
2602 inform (DECL_SOURCE_LOCATION (decl),
2603 "members of an explicitly specialized class are defined "
2604 "without a template header");
2608 /* An explicit specialization whose declarator-id or class-head-name is not
2609 qualified shall be declared in the nearest enclosing namespace of the
2610 template, or, if the namespace is inline (7.3.1), any namespace from its
2611 enclosing namespace set.
2613 If the name declared in the explicit instantiation is an unqualified name,
2614 the explicit instantiation shall appear in the namespace where its template
2615 is declared or, if that namespace is inline (7.3.1), any namespace from its
2616 enclosing namespace set. */
2618 void
2619 check_unqualified_spec_or_inst (tree t, location_t loc)
2621 tree tmpl = most_general_template (t);
2622 if (DECL_NAMESPACE_SCOPE_P (tmpl)
2623 && !is_nested_namespace (current_namespace,
2624 CP_DECL_CONTEXT (tmpl), true))
2626 if (processing_specialization)
2627 permerror (loc, "explicit specialization of %qD outside its "
2628 "namespace must use a nested-name-specifier", tmpl);
2629 else if (processing_explicit_instantiation
2630 && cxx_dialect >= cxx11)
2631 /* This was allowed in C++98, so only pedwarn. */
2632 pedwarn (loc, OPT_Wpedantic, "explicit instantiation of %qD "
2633 "outside its namespace must use a nested-name-"
2634 "specifier", tmpl);
2638 /* Warn for a template specialization SPEC that is missing some of a set
2639 of function or type attributes that the template TEMPL is declared with.
2640 ATTRLIST is a list of additional attributes that SPEC should be taken
2641 to ultimately be declared with. */
2643 static void
2644 warn_spec_missing_attributes (tree tmpl, tree spec, tree attrlist)
2646 if (DECL_FUNCTION_TEMPLATE_P (tmpl))
2647 tmpl = DECL_TEMPLATE_RESULT (tmpl);
2649 if (TREE_CODE (tmpl) != FUNCTION_DECL)
2650 return;
2652 /* Avoid warning if either declaration or its type is deprecated. */
2653 if (TREE_DEPRECATED (tmpl)
2654 || TREE_DEPRECATED (spec))
2655 return;
2657 tree tmpl_type = TREE_TYPE (tmpl);
2658 tree spec_type = TREE_TYPE (spec);
2660 if (TREE_DEPRECATED (tmpl_type)
2661 || TREE_DEPRECATED (spec_type)
2662 || TREE_DEPRECATED (TREE_TYPE (tmpl_type))
2663 || TREE_DEPRECATED (TREE_TYPE (spec_type)))
2664 return;
2666 tree tmpl_attrs[] = { DECL_ATTRIBUTES (tmpl), TYPE_ATTRIBUTES (tmpl_type) };
2667 tree spec_attrs[] = { DECL_ATTRIBUTES (spec), TYPE_ATTRIBUTES (spec_type) };
2669 if (!spec_attrs[0])
2670 spec_attrs[0] = attrlist;
2671 else if (!spec_attrs[1])
2672 spec_attrs[1] = attrlist;
2674 /* Avoid warning if the primary has no attributes. */
2675 if (!tmpl_attrs[0] && !tmpl_attrs[1])
2676 return;
2678 /* Avoid warning if either declaration contains an attribute on
2679 the white list below. */
2680 const char* const whitelist[] = {
2681 "error", "warning"
2684 for (unsigned i = 0; i != 2; ++i)
2685 for (unsigned j = 0; j != sizeof whitelist / sizeof *whitelist; ++j)
2686 if (lookup_attribute (whitelist[j], tmpl_attrs[i])
2687 || lookup_attribute (whitelist[j], spec_attrs[i]))
2688 return;
2690 /* Avoid warning if the difference between the primary and
2691 the specialization is not in one of the attributes below. */
2692 const char* const blacklist[] = {
2693 "alloc_align", "alloc_size", "assume_aligned", "format",
2694 "format_arg", "malloc", "nonnull"
2697 /* Put together a list of the black listed attributes that the primary
2698 template is declared with that the specialization is not, in case
2699 it's not apparent from the most recent declaration of the primary. */
2700 unsigned nattrs = 0;
2701 pretty_printer str;
2703 for (unsigned i = 0; i != sizeof blacklist / sizeof *blacklist; ++i)
2705 for (unsigned j = 0; j != 2; ++j)
2707 if (!lookup_attribute (blacklist[i], tmpl_attrs[j]))
2708 continue;
2710 for (unsigned k = 0; k != 1 + !!spec_attrs[1]; ++k)
2712 if (lookup_attribute (blacklist[i], spec_attrs[k]))
2713 break;
2715 if (nattrs)
2716 pp_string (&str, ", ");
2717 pp_begin_quote (&str, pp_show_color (global_dc->printer));
2718 pp_string (&str, blacklist[i]);
2719 pp_end_quote (&str, pp_show_color (global_dc->printer));
2720 ++nattrs;
2725 if (!nattrs)
2726 return;
2728 if (warning_at (DECL_SOURCE_LOCATION (spec), OPT_Wmissing_attributes,
2729 "explicit specialization %q#D may be missing attributes",
2730 spec))
2731 inform (DECL_SOURCE_LOCATION (tmpl),
2732 nattrs > 1
2733 ? G_("missing primary template attributes %s")
2734 : G_("missing primary template attribute %s"),
2735 pp_formatted_text (&str));
2738 /* Check to see if the function just declared, as indicated in
2739 DECLARATOR, and in DECL, is a specialization of a function
2740 template. We may also discover that the declaration is an explicit
2741 instantiation at this point.
2743 Returns DECL, or an equivalent declaration that should be used
2744 instead if all goes well. Issues an error message if something is
2745 amiss. Returns error_mark_node if the error is not easily
2746 recoverable.
2748 FLAGS is a bitmask consisting of the following flags:
2750 2: The function has a definition.
2751 4: The function is a friend.
2753 The TEMPLATE_COUNT is the number of references to qualifying
2754 template classes that appeared in the name of the function. For
2755 example, in
2757 template <class T> struct S { void f(); };
2758 void S<int>::f();
2760 the TEMPLATE_COUNT would be 1. However, explicitly specialized
2761 classes are not counted in the TEMPLATE_COUNT, so that in
2763 template <class T> struct S {};
2764 template <> struct S<int> { void f(); }
2765 template <> void S<int>::f();
2767 the TEMPLATE_COUNT would be 0. (Note that this declaration is
2768 invalid; there should be no template <>.)
2770 If the function is a specialization, it is marked as such via
2771 DECL_TEMPLATE_SPECIALIZATION. Furthermore, its DECL_TEMPLATE_INFO
2772 is set up correctly, and it is added to the list of specializations
2773 for that template. */
2775 tree
2776 check_explicit_specialization (tree declarator,
2777 tree decl,
2778 int template_count,
2779 int flags,
2780 tree attrlist)
2782 int have_def = flags & 2;
2783 int is_friend = flags & 4;
2784 bool is_concept = flags & 8;
2785 int specialization = 0;
2786 int explicit_instantiation = 0;
2787 int member_specialization = 0;
2788 tree ctype = DECL_CLASS_CONTEXT (decl);
2789 tree dname = DECL_NAME (decl);
2790 tmpl_spec_kind tsk;
2792 if (is_friend)
2794 if (!processing_specialization)
2795 tsk = tsk_none;
2796 else
2797 tsk = tsk_excessive_parms;
2799 else
2800 tsk = current_tmpl_spec_kind (template_count);
2802 switch (tsk)
2804 case tsk_none:
2805 if (processing_specialization && !VAR_P (decl))
2807 specialization = 1;
2808 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2810 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2812 if (is_friend)
2813 /* This could be something like:
2815 template <class T> void f(T);
2816 class S { friend void f<>(int); } */
2817 specialization = 1;
2818 else
2820 /* This case handles bogus declarations like template <>
2821 template <class T> void f<int>(); */
2823 error ("template-id %qD in declaration of primary template",
2824 declarator);
2825 return decl;
2828 break;
2830 case tsk_invalid_member_spec:
2831 /* The error has already been reported in
2832 check_specialization_scope. */
2833 return error_mark_node;
2835 case tsk_invalid_expl_inst:
2836 error ("template parameter list used in explicit instantiation");
2838 /* Fall through. */
2840 case tsk_expl_inst:
2841 if (have_def)
2842 error ("definition provided for explicit instantiation");
2844 explicit_instantiation = 1;
2845 break;
2847 case tsk_excessive_parms:
2848 case tsk_insufficient_parms:
2849 if (tsk == tsk_excessive_parms)
2850 error ("too many template parameter lists in declaration of %qD",
2851 decl);
2852 else if (template_header_count)
2853 error("too few template parameter lists in declaration of %qD", decl);
2854 else
2855 error("explicit specialization of %qD must be introduced by "
2856 "%<template <>%>", decl);
2858 /* Fall through. */
2859 case tsk_expl_spec:
2860 if (is_concept)
2861 error ("explicit specialization declared %<concept%>");
2863 if (VAR_P (decl) && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2864 /* In cases like template<> constexpr bool v = true;
2865 We'll give an error in check_template_variable. */
2866 break;
2868 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2869 if (ctype)
2870 member_specialization = 1;
2871 else
2872 specialization = 1;
2873 break;
2875 case tsk_template:
2876 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2878 /* This case handles bogus declarations like template <>
2879 template <class T> void f<int>(); */
2881 if (!uses_template_parms (declarator))
2882 error ("template-id %qD in declaration of primary template",
2883 declarator);
2884 else if (variable_template_p (TREE_OPERAND (declarator, 0)))
2886 /* Partial specialization of variable template. */
2887 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2888 specialization = 1;
2889 goto ok;
2891 else if (cxx_dialect < cxx14)
2892 error ("non-type partial specialization %qD "
2893 "is not allowed", declarator);
2894 else
2895 error ("non-class, non-variable partial specialization %qD "
2896 "is not allowed", declarator);
2897 return decl;
2898 ok:;
2901 if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
2902 /* This is a specialization of a member template, without
2903 specialization the containing class. Something like:
2905 template <class T> struct S {
2906 template <class U> void f (U);
2908 template <> template <class U> void S<int>::f(U) {}
2910 That's a specialization -- but of the entire template. */
2911 specialization = 1;
2912 break;
2914 default:
2915 gcc_unreachable ();
2918 if ((specialization || member_specialization)
2919 /* This doesn't apply to variable templates. */
2920 && (TREE_CODE (TREE_TYPE (decl)) == FUNCTION_TYPE
2921 || TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE))
2923 tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2924 for (; t; t = TREE_CHAIN (t))
2925 if (TREE_PURPOSE (t))
2927 permerror (input_location,
2928 "default argument specified in explicit specialization");
2929 break;
2933 if (specialization || member_specialization || explicit_instantiation)
2935 tree tmpl = NULL_TREE;
2936 tree targs = NULL_TREE;
2937 bool was_template_id = (TREE_CODE (declarator) == TEMPLATE_ID_EXPR);
2939 /* Make sure that the declarator is a TEMPLATE_ID_EXPR. */
2940 if (!was_template_id)
2942 tree fns;
2944 gcc_assert (identifier_p (declarator));
2945 if (ctype)
2946 fns = dname;
2947 else
2949 /* If there is no class context, the explicit instantiation
2950 must be at namespace scope. */
2951 gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2953 /* Find the namespace binding, using the declaration
2954 context. */
2955 fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2956 false, true);
2957 if (fns == error_mark_node)
2958 /* If lookup fails, look for a friend declaration so we can
2959 give a better diagnostic. */
2960 fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2961 /*type*/false, /*complain*/true,
2962 /*hidden*/true);
2964 if (fns == error_mark_node || !is_overloaded_fn (fns))
2966 error ("%qD is not a template function", dname);
2967 fns = error_mark_node;
2971 declarator = lookup_template_function (fns, NULL_TREE);
2974 if (declarator == error_mark_node)
2975 return error_mark_node;
2977 if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2979 if (!explicit_instantiation)
2980 /* A specialization in class scope. This is invalid,
2981 but the error will already have been flagged by
2982 check_specialization_scope. */
2983 return error_mark_node;
2984 else
2986 /* It's not valid to write an explicit instantiation in
2987 class scope, e.g.:
2989 class C { template void f(); }
2991 This case is caught by the parser. However, on
2992 something like:
2994 template class C { void f(); };
2996 (which is invalid) we can get here. The error will be
2997 issued later. */
3001 return decl;
3003 else if (ctype != NULL_TREE
3004 && (identifier_p (TREE_OPERAND (declarator, 0))))
3006 // We'll match variable templates in start_decl.
3007 if (VAR_P (decl))
3008 return decl;
3010 /* Find the list of functions in ctype that have the same
3011 name as the declared function. */
3012 tree name = TREE_OPERAND (declarator, 0);
3014 if (constructor_name_p (name, ctype))
3016 if (DECL_CONSTRUCTOR_P (decl)
3017 ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
3018 : !CLASSTYPE_DESTRUCTOR (ctype))
3020 /* From [temp.expl.spec]:
3022 If such an explicit specialization for the member
3023 of a class template names an implicitly-declared
3024 special member function (clause _special_), the
3025 program is ill-formed.
3027 Similar language is found in [temp.explicit]. */
3028 error ("specialization of implicitly-declared special member function");
3029 return error_mark_node;
3032 name = DECL_NAME (decl);
3035 /* For a type-conversion operator, We might be looking for
3036 `operator int' which will be a specialization of
3037 `operator T'. Grab all the conversion operators, and
3038 then select from them. */
3039 tree fns = get_class_binding (ctype, IDENTIFIER_CONV_OP_P (name)
3040 ? conv_op_identifier : name);
3042 if (fns == NULL_TREE)
3044 error ("no member function %qD declared in %qT", name, ctype);
3045 return error_mark_node;
3047 else
3048 TREE_OPERAND (declarator, 0) = fns;
3051 /* Figure out what exactly is being specialized at this point.
3052 Note that for an explicit instantiation, even one for a
3053 member function, we cannot tell a priori whether the
3054 instantiation is for a member template, or just a member
3055 function of a template class. Even if a member template is
3056 being instantiated, the member template arguments may be
3057 elided if they can be deduced from the rest of the
3058 declaration. */
3059 tmpl = determine_specialization (declarator, decl,
3060 &targs,
3061 member_specialization,
3062 template_count,
3063 tsk);
3065 if (!tmpl || tmpl == error_mark_node)
3066 /* We couldn't figure out what this declaration was
3067 specializing. */
3068 return error_mark_node;
3069 else
3071 if (TREE_CODE (decl) == FUNCTION_DECL
3072 && DECL_HIDDEN_FRIEND_P (tmpl))
3074 if (pedwarn (DECL_SOURCE_LOCATION (decl), 0,
3075 "friend declaration %qD is not visible to "
3076 "explicit specialization", tmpl))
3077 inform (DECL_SOURCE_LOCATION (tmpl),
3078 "friend declaration here");
3080 else if (!ctype && !is_friend
3081 && CP_DECL_CONTEXT (decl) == current_namespace)
3082 check_unqualified_spec_or_inst (tmpl, DECL_SOURCE_LOCATION (decl));
3084 tree gen_tmpl = most_general_template (tmpl);
3086 if (explicit_instantiation)
3088 /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
3089 is done by do_decl_instantiation later. */
3091 int arg_depth = TMPL_ARGS_DEPTH (targs);
3092 int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
3094 if (arg_depth > parm_depth)
3096 /* If TMPL is not the most general template (for
3097 example, if TMPL is a friend template that is
3098 injected into namespace scope), then there will
3099 be too many levels of TARGS. Remove some of them
3100 here. */
3101 int i;
3102 tree new_targs;
3104 new_targs = make_tree_vec (parm_depth);
3105 for (i = arg_depth - parm_depth; i < arg_depth; ++i)
3106 TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
3107 = TREE_VEC_ELT (targs, i);
3108 targs = new_targs;
3111 return instantiate_template (tmpl, targs, tf_error);
3114 /* If we thought that the DECL was a member function, but it
3115 turns out to be specializing a static member function,
3116 make DECL a static member function as well. */
3117 if (DECL_FUNCTION_TEMPLATE_P (tmpl)
3118 && DECL_STATIC_FUNCTION_P (tmpl)
3119 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
3120 revert_static_member_fn (decl);
3122 /* If this is a specialization of a member template of a
3123 template class, we want to return the TEMPLATE_DECL, not
3124 the specialization of it. */
3125 if (tsk == tsk_template && !was_template_id)
3127 tree result = DECL_TEMPLATE_RESULT (tmpl);
3128 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3129 DECL_INITIAL (result) = NULL_TREE;
3130 if (have_def)
3132 tree parm;
3133 DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
3134 DECL_SOURCE_LOCATION (result)
3135 = DECL_SOURCE_LOCATION (decl);
3136 /* We want to use the argument list specified in the
3137 definition, not in the original declaration. */
3138 DECL_ARGUMENTS (result) = DECL_ARGUMENTS (decl);
3139 for (parm = DECL_ARGUMENTS (result); parm;
3140 parm = DECL_CHAIN (parm))
3141 DECL_CONTEXT (parm) = result;
3143 return register_specialization (tmpl, gen_tmpl, targs,
3144 is_friend, 0);
3147 /* Set up the DECL_TEMPLATE_INFO for DECL. */
3148 DECL_TEMPLATE_INFO (decl) = build_template_info (tmpl, targs);
3150 if (was_template_id)
3151 TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (decl)) = true;
3153 /* Inherit default function arguments from the template
3154 DECL is specializing. */
3155 if (DECL_FUNCTION_TEMPLATE_P (tmpl))
3156 copy_default_args_to_explicit_spec (decl);
3158 /* This specialization has the same protection as the
3159 template it specializes. */
3160 TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
3161 TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
3163 /* 7.1.1-1 [dcl.stc]
3165 A storage-class-specifier shall not be specified in an
3166 explicit specialization...
3168 The parser rejects these, so unless action is taken here,
3169 explicit function specializations will always appear with
3170 global linkage.
3172 The action recommended by the C++ CWG in response to C++
3173 defect report 605 is to make the storage class and linkage
3174 of the explicit specialization match the templated function:
3176 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
3178 if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
3180 tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
3181 gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
3183 /* A concept cannot be specialized. */
3184 if (DECL_DECLARED_CONCEPT_P (tmpl_func))
3186 error ("explicit specialization of function concept %qD",
3187 gen_tmpl);
3188 return error_mark_node;
3191 /* This specialization has the same linkage and visibility as
3192 the function template it specializes. */
3193 TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
3194 if (! TREE_PUBLIC (decl))
3196 DECL_INTERFACE_KNOWN (decl) = 1;
3197 DECL_NOT_REALLY_EXTERN (decl) = 1;
3199 DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
3200 if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
3202 DECL_VISIBILITY_SPECIFIED (decl) = 1;
3203 DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
3207 /* If DECL is a friend declaration, declared using an
3208 unqualified name, the namespace associated with DECL may
3209 have been set incorrectly. For example, in:
3211 template <typename T> void f(T);
3212 namespace N {
3213 struct S { friend void f<int>(int); }
3216 we will have set the DECL_CONTEXT for the friend
3217 declaration to N, rather than to the global namespace. */
3218 if (DECL_NAMESPACE_SCOPE_P (decl))
3219 DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
3221 if (is_friend && !have_def)
3222 /* This is not really a declaration of a specialization.
3223 It's just the name of an instantiation. But, it's not
3224 a request for an instantiation, either. */
3225 SET_DECL_IMPLICIT_INSTANTIATION (decl);
3226 else if (TREE_CODE (decl) == FUNCTION_DECL)
3227 /* A specialization is not necessarily COMDAT. */
3228 DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
3229 && DECL_DECLARED_INLINE_P (decl));
3230 else if (VAR_P (decl))
3231 DECL_COMDAT (decl) = false;
3233 /* If this is a full specialization, register it so that we can find
3234 it again. Partial specializations will be registered in
3235 process_partial_specialization. */
3236 if (!processing_template_decl)
3238 warn_spec_missing_attributes (gen_tmpl, decl, attrlist);
3240 decl = register_specialization (decl, gen_tmpl, targs,
3241 is_friend, 0);
3245 /* A 'structor should already have clones. */
3246 gcc_assert (decl == error_mark_node
3247 || variable_template_p (tmpl)
3248 || !(DECL_CONSTRUCTOR_P (decl)
3249 || DECL_DESTRUCTOR_P (decl))
3250 || DECL_CLONED_FUNCTION_P (DECL_CHAIN (decl)));
3254 return decl;
3257 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
3258 parameters. These are represented in the same format used for
3259 DECL_TEMPLATE_PARMS. */
3262 comp_template_parms (const_tree parms1, const_tree parms2)
3264 const_tree p1;
3265 const_tree p2;
3267 if (parms1 == parms2)
3268 return 1;
3270 for (p1 = parms1, p2 = parms2;
3271 p1 != NULL_TREE && p2 != NULL_TREE;
3272 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
3274 tree t1 = TREE_VALUE (p1);
3275 tree t2 = TREE_VALUE (p2);
3276 int i;
3278 gcc_assert (TREE_CODE (t1) == TREE_VEC);
3279 gcc_assert (TREE_CODE (t2) == TREE_VEC);
3281 if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
3282 return 0;
3284 for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
3286 tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
3287 tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
3289 /* If either of the template parameters are invalid, assume
3290 they match for the sake of error recovery. */
3291 if (error_operand_p (parm1) || error_operand_p (parm2))
3292 return 1;
3294 if (TREE_CODE (parm1) != TREE_CODE (parm2))
3295 return 0;
3297 if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
3298 && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
3299 == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
3300 continue;
3301 else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
3302 return 0;
3306 if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
3307 /* One set of parameters has more parameters lists than the
3308 other. */
3309 return 0;
3311 return 1;
3314 /* Determine whether PARM is a parameter pack. */
3316 bool
3317 template_parameter_pack_p (const_tree parm)
3319 /* Determine if we have a non-type template parameter pack. */
3320 if (TREE_CODE (parm) == PARM_DECL)
3321 return (DECL_TEMPLATE_PARM_P (parm)
3322 && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
3323 if (TREE_CODE (parm) == TEMPLATE_PARM_INDEX)
3324 return TEMPLATE_PARM_PARAMETER_PACK (parm);
3326 /* If this is a list of template parameters, we could get a
3327 TYPE_DECL or a TEMPLATE_DECL. */
3328 if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
3329 parm = TREE_TYPE (parm);
3331 /* Otherwise it must be a type template parameter. */
3332 return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
3333 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
3334 && TEMPLATE_TYPE_PARAMETER_PACK (parm));
3337 /* Determine if T is a function parameter pack. */
3339 bool
3340 function_parameter_pack_p (const_tree t)
3342 if (t && TREE_CODE (t) == PARM_DECL)
3343 return DECL_PACK_P (t);
3344 return false;
3347 /* Return the function template declaration of PRIMARY_FUNC_TMPL_INST.
3348 PRIMARY_FUNC_TMPL_INST is a primary function template instantiation. */
3350 tree
3351 get_function_template_decl (const_tree primary_func_tmpl_inst)
3353 if (! primary_func_tmpl_inst
3354 || TREE_CODE (primary_func_tmpl_inst) != FUNCTION_DECL
3355 || ! primary_template_specialization_p (primary_func_tmpl_inst))
3356 return NULL;
3358 return DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (primary_func_tmpl_inst));
3361 /* Return true iff the function parameter PARAM_DECL was expanded
3362 from the function parameter pack PACK. */
3364 bool
3365 function_parameter_expanded_from_pack_p (tree param_decl, tree pack)
3367 if (DECL_ARTIFICIAL (param_decl)
3368 || !function_parameter_pack_p (pack))
3369 return false;
3371 /* The parameter pack and its pack arguments have the same
3372 DECL_PARM_INDEX. */
3373 return DECL_PARM_INDEX (pack) == DECL_PARM_INDEX (param_decl);
3376 /* Determine whether ARGS describes a variadic template args list,
3377 i.e., one that is terminated by a template argument pack. */
3379 static bool
3380 template_args_variadic_p (tree args)
3382 int nargs;
3383 tree last_parm;
3385 if (args == NULL_TREE)
3386 return false;
3388 args = INNERMOST_TEMPLATE_ARGS (args);
3389 nargs = TREE_VEC_LENGTH (args);
3391 if (nargs == 0)
3392 return false;
3394 last_parm = TREE_VEC_ELT (args, nargs - 1);
3396 return ARGUMENT_PACK_P (last_parm);
3399 /* Generate a new name for the parameter pack name NAME (an
3400 IDENTIFIER_NODE) that incorporates its */
3402 static tree
3403 make_ith_pack_parameter_name (tree name, int i)
3405 /* Munge the name to include the parameter index. */
3406 #define NUMBUF_LEN 128
3407 char numbuf[NUMBUF_LEN];
3408 char* newname;
3409 int newname_len;
3411 if (name == NULL_TREE)
3412 return name;
3413 snprintf (numbuf, NUMBUF_LEN, "%i", i);
3414 newname_len = IDENTIFIER_LENGTH (name)
3415 + strlen (numbuf) + 2;
3416 newname = (char*)alloca (newname_len);
3417 snprintf (newname, newname_len,
3418 "%s#%i", IDENTIFIER_POINTER (name), i);
3419 return get_identifier (newname);
3422 /* Return true if T is a primary function, class or alias template
3423 specialization, not including the template pattern. */
3425 bool
3426 primary_template_specialization_p (const_tree t)
3428 if (!t)
3429 return false;
3431 if (TREE_CODE (t) == FUNCTION_DECL || VAR_P (t))
3432 return (DECL_LANG_SPECIFIC (t)
3433 && DECL_USE_TEMPLATE (t)
3434 && DECL_TEMPLATE_INFO (t)
3435 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t)));
3436 else if (CLASS_TYPE_P (t) && !TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
3437 return (CLASSTYPE_TEMPLATE_INFO (t)
3438 && CLASSTYPE_USE_TEMPLATE (t)
3439 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)));
3440 else if (alias_template_specialization_p (t))
3441 return true;
3442 return false;
3445 /* Return true if PARM is a template template parameter. */
3447 bool
3448 template_template_parameter_p (const_tree parm)
3450 return DECL_TEMPLATE_TEMPLATE_PARM_P (parm);
3453 /* Return true iff PARM is a DECL representing a type template
3454 parameter. */
3456 bool
3457 template_type_parameter_p (const_tree parm)
3459 return (parm
3460 && (TREE_CODE (parm) == TYPE_DECL
3461 || TREE_CODE (parm) == TEMPLATE_DECL)
3462 && DECL_TEMPLATE_PARM_P (parm));
3465 /* Return the template parameters of T if T is a
3466 primary template instantiation, NULL otherwise. */
3468 tree
3469 get_primary_template_innermost_parameters (const_tree t)
3471 tree parms = NULL, template_info = NULL;
3473 if ((template_info = get_template_info (t))
3474 && primary_template_specialization_p (t))
3475 parms = INNERMOST_TEMPLATE_PARMS
3476 (DECL_TEMPLATE_PARMS (TI_TEMPLATE (template_info)));
3478 return parms;
3481 /* Return the template parameters of the LEVELth level from the full list
3482 of template parameters PARMS. */
3484 tree
3485 get_template_parms_at_level (tree parms, int level)
3487 tree p;
3488 if (!parms
3489 || TREE_CODE (parms) != TREE_LIST
3490 || level > TMPL_PARMS_DEPTH (parms))
3491 return NULL_TREE;
3493 for (p = parms; p; p = TREE_CHAIN (p))
3494 if (TMPL_PARMS_DEPTH (p) == level)
3495 return p;
3497 return NULL_TREE;
3500 /* Returns the template arguments of T if T is a template instantiation,
3501 NULL otherwise. */
3503 tree
3504 get_template_innermost_arguments (const_tree t)
3506 tree args = NULL, template_info = NULL;
3508 if ((template_info = get_template_info (t))
3509 && TI_ARGS (template_info))
3510 args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (template_info));
3512 return args;
3515 /* Return the argument pack elements of T if T is a template argument pack,
3516 NULL otherwise. */
3518 tree
3519 get_template_argument_pack_elems (const_tree t)
3521 if (TREE_CODE (t) != TYPE_ARGUMENT_PACK
3522 && TREE_CODE (t) != NONTYPE_ARGUMENT_PACK)
3523 return NULL;
3525 return ARGUMENT_PACK_ARGS (t);
3528 /* In an ARGUMENT_PACK_SELECT, the actual underlying argument that the
3529 ARGUMENT_PACK_SELECT represents. */
3531 static tree
3532 argument_pack_select_arg (tree t)
3534 tree args = ARGUMENT_PACK_ARGS (ARGUMENT_PACK_SELECT_FROM_PACK (t));
3535 tree arg = TREE_VEC_ELT (args, ARGUMENT_PACK_SELECT_INDEX (t));
3537 /* If the selected argument is an expansion E, that most likely means we were
3538 called from gen_elem_of_pack_expansion_instantiation during the
3539 substituting of an argument pack (of which the Ith element is a pack
3540 expansion, where I is ARGUMENT_PACK_SELECT_INDEX) into a pack expansion.
3541 In this case, the Ith element resulting from this substituting is going to
3542 be a pack expansion, which pattern is the pattern of E. Let's return the
3543 pattern of E, and gen_elem_of_pack_expansion_instantiation will build the
3544 resulting pack expansion from it. */
3545 if (PACK_EXPANSION_P (arg))
3547 /* Make sure we aren't throwing away arg info. */
3548 gcc_assert (!PACK_EXPANSION_EXTRA_ARGS (arg));
3549 arg = PACK_EXPANSION_PATTERN (arg);
3552 return arg;
3556 /* True iff FN is a function representing a built-in variadic parameter
3557 pack. */
3559 bool
3560 builtin_pack_fn_p (tree fn)
3562 if (!fn
3563 || TREE_CODE (fn) != FUNCTION_DECL
3564 || !DECL_IS_BUILTIN (fn))
3565 return false;
3567 if (id_equal (DECL_NAME (fn), "__integer_pack"))
3568 return true;
3570 return false;
3573 /* True iff CALL is a call to a function representing a built-in variadic
3574 parameter pack. */
3576 static bool
3577 builtin_pack_call_p (tree call)
3579 if (TREE_CODE (call) != CALL_EXPR)
3580 return false;
3581 return builtin_pack_fn_p (CALL_EXPR_FN (call));
3584 /* Return a TREE_VEC for the expansion of __integer_pack(HI). */
3586 static tree
3587 expand_integer_pack (tree call, tree args, tsubst_flags_t complain,
3588 tree in_decl)
3590 tree ohi = CALL_EXPR_ARG (call, 0);
3591 tree hi = tsubst_copy_and_build (ohi, args, complain, in_decl,
3592 false/*fn*/, true/*int_cst*/);
3594 if (value_dependent_expression_p (hi))
3596 if (hi != ohi)
3598 call = copy_node (call);
3599 CALL_EXPR_ARG (call, 0) = hi;
3601 tree ex = make_pack_expansion (call, complain);
3602 tree vec = make_tree_vec (1);
3603 TREE_VEC_ELT (vec, 0) = ex;
3604 return vec;
3606 else
3608 hi = cxx_constant_value (hi);
3609 int len = valid_constant_size_p (hi) ? tree_to_shwi (hi) : -1;
3611 /* Calculate the largest value of len that won't make the size of the vec
3612 overflow an int. The compiler will exceed resource limits long before
3613 this, but it seems a decent place to diagnose. */
3614 int max = ((INT_MAX - sizeof (tree_vec)) / sizeof (tree)) + 1;
3616 if (len < 0 || len > max)
3618 if ((complain & tf_error)
3619 && hi != error_mark_node)
3620 error ("argument to __integer_pack must be between 0 and %d", max);
3621 return error_mark_node;
3624 tree vec = make_tree_vec (len);
3626 for (int i = 0; i < len; ++i)
3627 TREE_VEC_ELT (vec, i) = size_int (i);
3629 return vec;
3633 /* Return a TREE_VEC for the expansion of built-in template parameter pack
3634 CALL. */
3636 static tree
3637 expand_builtin_pack_call (tree call, tree args, tsubst_flags_t complain,
3638 tree in_decl)
3640 if (!builtin_pack_call_p (call))
3641 return NULL_TREE;
3643 tree fn = CALL_EXPR_FN (call);
3645 if (id_equal (DECL_NAME (fn), "__integer_pack"))
3646 return expand_integer_pack (call, args, complain, in_decl);
3648 return NULL_TREE;
3651 /* Structure used to track the progress of find_parameter_packs_r. */
3652 struct find_parameter_pack_data
3654 /* TREE_LIST that will contain all of the parameter packs found by
3655 the traversal. */
3656 tree* parameter_packs;
3658 /* Set of AST nodes that have been visited by the traversal. */
3659 hash_set<tree> *visited;
3661 /* True iff we're making a type pack expansion. */
3662 bool type_pack_expansion_p;
3665 /* Identifies all of the argument packs that occur in a template
3666 argument and appends them to the TREE_LIST inside DATA, which is a
3667 find_parameter_pack_data structure. This is a subroutine of
3668 make_pack_expansion and uses_parameter_packs. */
3669 static tree
3670 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
3672 tree t = *tp;
3673 struct find_parameter_pack_data* ppd =
3674 (struct find_parameter_pack_data*)data;
3675 bool parameter_pack_p = false;
3677 /* Handle type aliases/typedefs. */
3678 if (TYPE_ALIAS_P (t))
3680 if (tree tinfo = TYPE_ALIAS_TEMPLATE_INFO (t))
3681 cp_walk_tree (&TI_ARGS (tinfo),
3682 &find_parameter_packs_r,
3683 ppd, ppd->visited);
3684 *walk_subtrees = 0;
3685 return NULL_TREE;
3688 /* Identify whether this is a parameter pack or not. */
3689 switch (TREE_CODE (t))
3691 case TEMPLATE_PARM_INDEX:
3692 if (TEMPLATE_PARM_PARAMETER_PACK (t))
3693 parameter_pack_p = true;
3694 break;
3696 case TEMPLATE_TYPE_PARM:
3697 t = TYPE_MAIN_VARIANT (t);
3698 /* FALLTHRU */
3699 case TEMPLATE_TEMPLATE_PARM:
3700 /* If the placeholder appears in the decl-specifier-seq of a function
3701 parameter pack (14.6.3), or the type-specifier-seq of a type-id that
3702 is a pack expansion, the invented template parameter is a template
3703 parameter pack. */
3704 if (ppd->type_pack_expansion_p && is_auto (t))
3705 TEMPLATE_TYPE_PARAMETER_PACK (t) = true;
3706 if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3707 parameter_pack_p = true;
3708 break;
3710 case FIELD_DECL:
3711 case PARM_DECL:
3712 if (DECL_PACK_P (t))
3714 /* We don't want to walk into the type of a PARM_DECL,
3715 because we don't want to see the type parameter pack. */
3716 *walk_subtrees = 0;
3717 parameter_pack_p = true;
3719 break;
3721 case VAR_DECL:
3722 if (DECL_PACK_P (t))
3724 /* We don't want to walk into the type of a variadic capture proxy,
3725 because we don't want to see the type parameter pack. */
3726 *walk_subtrees = 0;
3727 parameter_pack_p = true;
3729 else if (variable_template_specialization_p (t))
3731 cp_walk_tree (&DECL_TI_ARGS (t),
3732 find_parameter_packs_r,
3733 ppd, ppd->visited);
3734 *walk_subtrees = 0;
3736 break;
3738 case CALL_EXPR:
3739 if (builtin_pack_call_p (t))
3740 parameter_pack_p = true;
3741 break;
3743 case BASES:
3744 parameter_pack_p = true;
3745 break;
3746 default:
3747 /* Not a parameter pack. */
3748 break;
3751 if (parameter_pack_p)
3753 /* Add this parameter pack to the list. */
3754 *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
3757 if (TYPE_P (t))
3758 cp_walk_tree (&TYPE_CONTEXT (t),
3759 &find_parameter_packs_r, ppd, ppd->visited);
3761 /* This switch statement will return immediately if we don't find a
3762 parameter pack. */
3763 switch (TREE_CODE (t))
3765 case TEMPLATE_PARM_INDEX:
3766 return NULL_TREE;
3768 case BOUND_TEMPLATE_TEMPLATE_PARM:
3769 /* Check the template itself. */
3770 cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)),
3771 &find_parameter_packs_r, ppd, ppd->visited);
3772 /* Check the template arguments. */
3773 cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd,
3774 ppd->visited);
3775 *walk_subtrees = 0;
3776 return NULL_TREE;
3778 case TEMPLATE_TYPE_PARM:
3779 case TEMPLATE_TEMPLATE_PARM:
3780 return NULL_TREE;
3782 case PARM_DECL:
3783 return NULL_TREE;
3785 case DECL_EXPR:
3786 /* Ignore the declaration of a capture proxy for a parameter pack. */
3787 if (is_capture_proxy (DECL_EXPR_DECL (t)))
3788 *walk_subtrees = 0;
3789 return NULL_TREE;
3791 case RECORD_TYPE:
3792 if (TYPE_PTRMEMFUNC_P (t))
3793 return NULL_TREE;
3794 /* Fall through. */
3796 case UNION_TYPE:
3797 case ENUMERAL_TYPE:
3798 if (TYPE_TEMPLATE_INFO (t))
3799 cp_walk_tree (&TYPE_TI_ARGS (t),
3800 &find_parameter_packs_r, ppd, ppd->visited);
3802 *walk_subtrees = 0;
3803 return NULL_TREE;
3805 case TEMPLATE_DECL:
3806 if (!DECL_TEMPLATE_TEMPLATE_PARM_P (t))
3807 return NULL_TREE;
3808 gcc_fallthrough();
3810 case CONSTRUCTOR:
3811 cp_walk_tree (&TREE_TYPE (t),
3812 &find_parameter_packs_r, ppd, ppd->visited);
3813 return NULL_TREE;
3815 case TYPENAME_TYPE:
3816 cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
3817 ppd, ppd->visited);
3818 *walk_subtrees = 0;
3819 return NULL_TREE;
3821 case TYPE_PACK_EXPANSION:
3822 case EXPR_PACK_EXPANSION:
3823 *walk_subtrees = 0;
3824 return NULL_TREE;
3826 case INTEGER_TYPE:
3827 cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r,
3828 ppd, ppd->visited);
3829 *walk_subtrees = 0;
3830 return NULL_TREE;
3832 case IDENTIFIER_NODE:
3833 cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd,
3834 ppd->visited);
3835 *walk_subtrees = 0;
3836 return NULL_TREE;
3838 case LAMBDA_EXPR:
3840 /* Look at explicit captures. */
3841 for (tree cap = LAMBDA_EXPR_CAPTURE_LIST (t);
3842 cap; cap = TREE_CHAIN (cap))
3843 cp_walk_tree (&TREE_VALUE (cap), &find_parameter_packs_r, ppd,
3844 ppd->visited);
3845 /* Since we defer implicit capture, look in the body as well. */
3846 tree fn = lambda_function (t);
3847 cp_walk_tree (&DECL_SAVED_TREE (fn), &find_parameter_packs_r, ppd,
3848 ppd->visited);
3849 *walk_subtrees = 0;
3850 return NULL_TREE;
3853 case DECLTYPE_TYPE:
3855 /* When traversing a DECLTYPE_TYPE_EXPR, we need to set
3856 type_pack_expansion_p to false so that any placeholders
3857 within the expression don't get marked as parameter packs. */
3858 bool type_pack_expansion_p = ppd->type_pack_expansion_p;
3859 ppd->type_pack_expansion_p = false;
3860 cp_walk_tree (&DECLTYPE_TYPE_EXPR (t), &find_parameter_packs_r,
3861 ppd, ppd->visited);
3862 ppd->type_pack_expansion_p = type_pack_expansion_p;
3863 *walk_subtrees = 0;
3864 return NULL_TREE;
3867 default:
3868 return NULL_TREE;
3871 return NULL_TREE;
3874 /* Determines if the expression or type T uses any parameter packs. */
3875 bool
3876 uses_parameter_packs (tree t)
3878 tree parameter_packs = NULL_TREE;
3879 struct find_parameter_pack_data ppd;
3880 ppd.parameter_packs = &parameter_packs;
3881 ppd.visited = new hash_set<tree>;
3882 ppd.type_pack_expansion_p = false;
3883 cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3884 delete ppd.visited;
3885 return parameter_packs != NULL_TREE;
3888 /* Turn ARG, which may be an expression, type, or a TREE_LIST
3889 representation a base-class initializer into a parameter pack
3890 expansion. If all goes well, the resulting node will be an
3891 EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
3892 respectively. */
3893 tree
3894 make_pack_expansion (tree arg, tsubst_flags_t complain)
3896 tree result;
3897 tree parameter_packs = NULL_TREE;
3898 bool for_types = false;
3899 struct find_parameter_pack_data ppd;
3901 if (!arg || arg == error_mark_node)
3902 return arg;
3904 if (TREE_CODE (arg) == TREE_LIST && TREE_PURPOSE (arg))
3906 /* A TREE_LIST with a non-null TREE_PURPOSE is for a base
3907 class initializer. In this case, the TREE_PURPOSE will be a
3908 _TYPE node (representing the base class expansion we're
3909 initializing) and the TREE_VALUE will be a TREE_LIST
3910 containing the initialization arguments.
3912 The resulting expansion looks somewhat different from most
3913 expansions. Rather than returning just one _EXPANSION, we
3914 return a TREE_LIST whose TREE_PURPOSE is a
3915 TYPE_PACK_EXPANSION containing the bases that will be
3916 initialized. The TREE_VALUE will be identical to the
3917 original TREE_VALUE, which is a list of arguments that will
3918 be passed to each base. We do not introduce any new pack
3919 expansion nodes into the TREE_VALUE (although it is possible
3920 that some already exist), because the TREE_PURPOSE and
3921 TREE_VALUE all need to be expanded together with the same
3922 _EXPANSION node. Note that the TYPE_PACK_EXPANSION in the
3923 resulting TREE_PURPOSE will mention the parameter packs in
3924 both the bases and the arguments to the bases. */
3925 tree purpose;
3926 tree value;
3927 tree parameter_packs = NULL_TREE;
3929 /* Determine which parameter packs will be used by the base
3930 class expansion. */
3931 ppd.visited = new hash_set<tree>;
3932 ppd.parameter_packs = &parameter_packs;
3933 ppd.type_pack_expansion_p = true;
3934 gcc_assert (TYPE_P (TREE_PURPOSE (arg)));
3935 cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r,
3936 &ppd, ppd.visited);
3938 if (parameter_packs == NULL_TREE)
3940 if (complain & tf_error)
3941 error ("base initializer expansion %qT contains no parameter packs",
3942 arg);
3943 delete ppd.visited;
3944 return error_mark_node;
3947 if (TREE_VALUE (arg) != void_type_node)
3949 /* Collect the sets of parameter packs used in each of the
3950 initialization arguments. */
3951 for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
3953 /* Determine which parameter packs will be expanded in this
3954 argument. */
3955 cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r,
3956 &ppd, ppd.visited);
3960 delete ppd.visited;
3962 /* Create the pack expansion type for the base type. */
3963 purpose = cxx_make_type (TYPE_PACK_EXPANSION);
3964 SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
3965 PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
3966 PACK_EXPANSION_LOCAL_P (purpose) = at_function_scope_p ();
3968 /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3969 they will rarely be compared to anything. */
3970 SET_TYPE_STRUCTURAL_EQUALITY (purpose);
3972 return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
3975 if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
3976 for_types = true;
3978 /* Build the PACK_EXPANSION_* node. */
3979 result = for_types
3980 ? cxx_make_type (TYPE_PACK_EXPANSION)
3981 : make_node (EXPR_PACK_EXPANSION);
3982 SET_PACK_EXPANSION_PATTERN (result, arg);
3983 if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
3985 /* Propagate type and const-expression information. */
3986 TREE_TYPE (result) = TREE_TYPE (arg);
3987 TREE_CONSTANT (result) = TREE_CONSTANT (arg);
3988 /* Mark this read now, since the expansion might be length 0. */
3989 mark_exp_read (arg);
3991 else
3992 /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3993 they will rarely be compared to anything. */
3994 SET_TYPE_STRUCTURAL_EQUALITY (result);
3996 /* Determine which parameter packs will be expanded. */
3997 ppd.parameter_packs = &parameter_packs;
3998 ppd.visited = new hash_set<tree>;
3999 ppd.type_pack_expansion_p = TYPE_P (arg);
4000 cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
4001 delete ppd.visited;
4003 /* Make sure we found some parameter packs. */
4004 if (parameter_packs == NULL_TREE)
4006 if (complain & tf_error)
4008 if (TYPE_P (arg))
4009 error ("expansion pattern %qT contains no argument packs", arg);
4010 else
4011 error ("expansion pattern %qE contains no argument packs", arg);
4013 return error_mark_node;
4015 PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
4017 PACK_EXPANSION_LOCAL_P (result) = at_function_scope_p ();
4019 return result;
4022 /* Checks T for any "bare" parameter packs, which have not yet been
4023 expanded, and issues an error if any are found. This operation can
4024 only be done on full expressions or types (e.g., an expression
4025 statement, "if" condition, etc.), because we could have expressions like:
4027 foo(f(g(h(args)))...)
4029 where "args" is a parameter pack. check_for_bare_parameter_packs
4030 should not be called for the subexpressions args, h(args),
4031 g(h(args)), or f(g(h(args))), because we would produce erroneous
4032 error messages.
4034 Returns TRUE and emits an error if there were bare parameter packs,
4035 returns FALSE otherwise. */
4036 bool
4037 check_for_bare_parameter_packs (tree t)
4039 tree parameter_packs = NULL_TREE;
4040 struct find_parameter_pack_data ppd;
4042 if (!processing_template_decl || !t || t == error_mark_node)
4043 return false;
4045 /* A lambda might use a parameter pack from the containing context. */
4046 if (current_class_type && LAMBDA_TYPE_P (current_class_type)
4047 && CLASSTYPE_TEMPLATE_INFO (current_class_type))
4048 return false;
4050 if (TREE_CODE (t) == TYPE_DECL)
4051 t = TREE_TYPE (t);
4053 ppd.parameter_packs = &parameter_packs;
4054 ppd.visited = new hash_set<tree>;
4055 ppd.type_pack_expansion_p = false;
4056 cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
4057 delete ppd.visited;
4059 if (parameter_packs)
4061 location_t loc = EXPR_LOC_OR_LOC (t, input_location);
4062 error_at (loc, "parameter packs not expanded with %<...%>:");
4063 while (parameter_packs)
4065 tree pack = TREE_VALUE (parameter_packs);
4066 tree name = NULL_TREE;
4068 if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
4069 || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
4070 name = TYPE_NAME (pack);
4071 else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
4072 name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
4073 else if (TREE_CODE (pack) == CALL_EXPR)
4074 name = DECL_NAME (CALL_EXPR_FN (pack));
4075 else
4076 name = DECL_NAME (pack);
4078 if (name)
4079 inform (loc, " %qD", name);
4080 else
4081 inform (loc, " <anonymous>");
4083 parameter_packs = TREE_CHAIN (parameter_packs);
4086 return true;
4089 return false;
4092 /* Expand any parameter packs that occur in the template arguments in
4093 ARGS. */
4094 tree
4095 expand_template_argument_pack (tree args)
4097 if (args == error_mark_node)
4098 return error_mark_node;
4100 tree result_args = NULL_TREE;
4101 int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
4102 int num_result_args = -1;
4103 int non_default_args_count = -1;
4105 /* First, determine if we need to expand anything, and the number of
4106 slots we'll need. */
4107 for (in_arg = 0; in_arg < nargs; ++in_arg)
4109 tree arg = TREE_VEC_ELT (args, in_arg);
4110 if (arg == NULL_TREE)
4111 return args;
4112 if (ARGUMENT_PACK_P (arg))
4114 int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
4115 if (num_result_args < 0)
4116 num_result_args = in_arg + num_packed;
4117 else
4118 num_result_args += num_packed;
4120 else
4122 if (num_result_args >= 0)
4123 num_result_args++;
4127 /* If no expansion is necessary, we're done. */
4128 if (num_result_args < 0)
4129 return args;
4131 /* Expand arguments. */
4132 result_args = make_tree_vec (num_result_args);
4133 if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (args))
4134 non_default_args_count =
4135 GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
4136 for (in_arg = 0; in_arg < nargs; ++in_arg)
4138 tree arg = TREE_VEC_ELT (args, in_arg);
4139 if (ARGUMENT_PACK_P (arg))
4141 tree packed = ARGUMENT_PACK_ARGS (arg);
4142 int i, num_packed = TREE_VEC_LENGTH (packed);
4143 for (i = 0; i < num_packed; ++i, ++out_arg)
4144 TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
4145 if (non_default_args_count > 0)
4146 non_default_args_count += num_packed - 1;
4148 else
4150 TREE_VEC_ELT (result_args, out_arg) = arg;
4151 ++out_arg;
4154 if (non_default_args_count >= 0)
4155 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (result_args, non_default_args_count);
4156 return result_args;
4159 /* Checks if DECL shadows a template parameter.
4161 [temp.local]: A template-parameter shall not be redeclared within its
4162 scope (including nested scopes).
4164 Emits an error and returns TRUE if the DECL shadows a parameter,
4165 returns FALSE otherwise. */
4167 bool
4168 check_template_shadow (tree decl)
4170 tree olddecl;
4172 /* If we're not in a template, we can't possibly shadow a template
4173 parameter. */
4174 if (!current_template_parms)
4175 return true;
4177 /* Figure out what we're shadowing. */
4178 decl = OVL_FIRST (decl);
4179 olddecl = innermost_non_namespace_value (DECL_NAME (decl));
4181 /* If there's no previous binding for this name, we're not shadowing
4182 anything, let alone a template parameter. */
4183 if (!olddecl)
4184 return true;
4186 /* If we're not shadowing a template parameter, we're done. Note
4187 that OLDDECL might be an OVERLOAD (or perhaps even an
4188 ERROR_MARK), so we can't just blithely assume it to be a _DECL
4189 node. */
4190 if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
4191 return true;
4193 /* We check for decl != olddecl to avoid bogus errors for using a
4194 name inside a class. We check TPFI to avoid duplicate errors for
4195 inline member templates. */
4196 if (decl == olddecl
4197 || (DECL_TEMPLATE_PARM_P (decl)
4198 && TEMPLATE_PARMS_FOR_INLINE (current_template_parms)))
4199 return true;
4201 /* Don't complain about the injected class name, as we've already
4202 complained about the class itself. */
4203 if (DECL_SELF_REFERENCE_P (decl))
4204 return false;
4206 if (DECL_TEMPLATE_PARM_P (decl))
4207 error ("declaration of template parameter %q+D shadows "
4208 "template parameter", decl);
4209 else
4210 error ("declaration of %q+#D shadows template parameter", decl);
4211 inform (DECL_SOURCE_LOCATION (olddecl),
4212 "template parameter %qD declared here", olddecl);
4213 return false;
4216 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
4217 ORIG_LEVEL, DECL, and TYPE. */
4219 static tree
4220 build_template_parm_index (int index,
4221 int level,
4222 int orig_level,
4223 tree decl,
4224 tree type)
4226 tree t = make_node (TEMPLATE_PARM_INDEX);
4227 TEMPLATE_PARM_IDX (t) = index;
4228 TEMPLATE_PARM_LEVEL (t) = level;
4229 TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
4230 TEMPLATE_PARM_DECL (t) = decl;
4231 TREE_TYPE (t) = type;
4232 TREE_CONSTANT (t) = TREE_CONSTANT (decl);
4233 TREE_READONLY (t) = TREE_READONLY (decl);
4235 return t;
4238 /* Find the canonical type parameter for the given template type
4239 parameter. Returns the canonical type parameter, which may be TYPE
4240 if no such parameter existed. */
4242 static tree
4243 canonical_type_parameter (tree type)
4245 tree list;
4246 int idx = TEMPLATE_TYPE_IDX (type);
4247 if (!canonical_template_parms)
4248 vec_alloc (canonical_template_parms, idx + 1);
4250 if (canonical_template_parms->length () <= (unsigned) idx)
4251 vec_safe_grow_cleared (canonical_template_parms, idx + 1);
4253 list = (*canonical_template_parms)[idx];
4254 while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
4255 list = TREE_CHAIN (list);
4257 if (list)
4258 return TREE_VALUE (list);
4259 else
4261 (*canonical_template_parms)[idx]
4262 = tree_cons (NULL_TREE, type, (*canonical_template_parms)[idx]);
4263 return type;
4267 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
4268 TEMPLATE_PARM_LEVEL has been decreased by LEVELS. If such a
4269 TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
4270 new one is created. */
4272 static tree
4273 reduce_template_parm_level (tree index, tree type, int levels, tree args,
4274 tsubst_flags_t complain)
4276 if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
4277 || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
4278 != TEMPLATE_PARM_LEVEL (index) - levels)
4279 || !same_type_p (type, TREE_TYPE (TEMPLATE_PARM_DESCENDANTS (index))))
4281 tree orig_decl = TEMPLATE_PARM_DECL (index);
4282 tree decl, t;
4284 decl = build_decl (DECL_SOURCE_LOCATION (orig_decl),
4285 TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
4286 TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
4287 TREE_READONLY (decl) = TREE_READONLY (orig_decl);
4288 DECL_ARTIFICIAL (decl) = 1;
4289 SET_DECL_TEMPLATE_PARM_P (decl);
4291 t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
4292 TEMPLATE_PARM_LEVEL (index) - levels,
4293 TEMPLATE_PARM_ORIG_LEVEL (index),
4294 decl, type);
4295 TEMPLATE_PARM_DESCENDANTS (index) = t;
4296 TEMPLATE_PARM_PARAMETER_PACK (t)
4297 = TEMPLATE_PARM_PARAMETER_PACK (index);
4299 /* Template template parameters need this. */
4300 if (TREE_CODE (decl) == TEMPLATE_DECL)
4302 DECL_TEMPLATE_RESULT (decl)
4303 = build_decl (DECL_SOURCE_LOCATION (decl),
4304 TYPE_DECL, DECL_NAME (decl), type);
4305 DECL_ARTIFICIAL (DECL_TEMPLATE_RESULT (decl)) = true;
4306 DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
4307 (DECL_TEMPLATE_PARMS (orig_decl), args, complain);
4311 return TEMPLATE_PARM_DESCENDANTS (index);
4314 /* Process information from new template parameter PARM and append it
4315 to the LIST being built. This new parameter is a non-type
4316 parameter iff IS_NON_TYPE is true. This new parameter is a
4317 parameter pack iff IS_PARAMETER_PACK is true. The location of PARM
4318 is in PARM_LOC. */
4320 tree
4321 process_template_parm (tree list, location_t parm_loc, tree parm,
4322 bool is_non_type, bool is_parameter_pack)
4324 tree decl = 0;
4325 int idx = 0;
4327 gcc_assert (TREE_CODE (parm) == TREE_LIST);
4328 tree defval = TREE_PURPOSE (parm);
4329 tree constr = TREE_TYPE (parm);
4331 if (list)
4333 tree p = tree_last (list);
4335 if (p && TREE_VALUE (p) != error_mark_node)
4337 p = TREE_VALUE (p);
4338 if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
4339 idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
4340 else
4341 idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
4344 ++idx;
4347 if (is_non_type)
4349 parm = TREE_VALUE (parm);
4351 SET_DECL_TEMPLATE_PARM_P (parm);
4353 if (TREE_TYPE (parm) != error_mark_node)
4355 /* [temp.param]
4357 The top-level cv-qualifiers on the template-parameter are
4358 ignored when determining its type. */
4359 TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
4360 if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
4361 TREE_TYPE (parm) = error_mark_node;
4362 else if (uses_parameter_packs (TREE_TYPE (parm))
4363 && !is_parameter_pack
4364 /* If we're in a nested template parameter list, the template
4365 template parameter could be a parameter pack. */
4366 && processing_template_parmlist == 1)
4368 /* This template parameter is not a parameter pack, but it
4369 should be. Complain about "bare" parameter packs. */
4370 check_for_bare_parameter_packs (TREE_TYPE (parm));
4372 /* Recover by calling this a parameter pack. */
4373 is_parameter_pack = true;
4377 /* A template parameter is not modifiable. */
4378 TREE_CONSTANT (parm) = 1;
4379 TREE_READONLY (parm) = 1;
4380 decl = build_decl (parm_loc,
4381 CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
4382 TREE_CONSTANT (decl) = 1;
4383 TREE_READONLY (decl) = 1;
4384 DECL_INITIAL (parm) = DECL_INITIAL (decl)
4385 = build_template_parm_index (idx, processing_template_decl,
4386 processing_template_decl,
4387 decl, TREE_TYPE (parm));
4389 TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
4390 = is_parameter_pack;
4392 else
4394 tree t;
4395 parm = TREE_VALUE (TREE_VALUE (parm));
4397 if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
4399 t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
4400 /* This is for distinguishing between real templates and template
4401 template parameters */
4402 TREE_TYPE (parm) = t;
4403 TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
4404 decl = parm;
4406 else
4408 t = cxx_make_type (TEMPLATE_TYPE_PARM);
4409 /* parm is either IDENTIFIER_NODE or NULL_TREE. */
4410 decl = build_decl (parm_loc,
4411 TYPE_DECL, parm, t);
4414 TYPE_NAME (t) = decl;
4415 TYPE_STUB_DECL (t) = decl;
4416 parm = decl;
4417 TEMPLATE_TYPE_PARM_INDEX (t)
4418 = build_template_parm_index (idx, processing_template_decl,
4419 processing_template_decl,
4420 decl, TREE_TYPE (parm));
4421 TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
4422 TYPE_CANONICAL (t) = canonical_type_parameter (t);
4424 DECL_ARTIFICIAL (decl) = 1;
4425 SET_DECL_TEMPLATE_PARM_P (decl);
4427 /* Build requirements for the type/template parameter.
4428 This must be done after SET_DECL_TEMPLATE_PARM_P or
4429 process_template_parm could fail. */
4430 tree reqs = finish_shorthand_constraint (parm, constr);
4432 pushdecl (decl);
4434 if (defval && TREE_CODE (defval) == OVERLOAD)
4435 lookup_keep (defval, true);
4437 /* Build the parameter node linking the parameter declaration,
4438 its default argument (if any), and its constraints (if any). */
4439 parm = build_tree_list (defval, parm);
4440 TEMPLATE_PARM_CONSTRAINTS (parm) = reqs;
4442 return chainon (list, parm);
4445 /* The end of a template parameter list has been reached. Process the
4446 tree list into a parameter vector, converting each parameter into a more
4447 useful form. Type parameters are saved as IDENTIFIER_NODEs, and others
4448 as PARM_DECLs. */
4450 tree
4451 end_template_parm_list (tree parms)
4453 int nparms;
4454 tree parm, next;
4455 tree saved_parmlist = make_tree_vec (list_length (parms));
4457 /* Pop the dummy parameter level and add the real one. */
4458 current_template_parms = TREE_CHAIN (current_template_parms);
4460 current_template_parms
4461 = tree_cons (size_int (processing_template_decl),
4462 saved_parmlist, current_template_parms);
4464 for (parm = parms, nparms = 0; parm; parm = next, nparms++)
4466 next = TREE_CHAIN (parm);
4467 TREE_VEC_ELT (saved_parmlist, nparms) = parm;
4468 TREE_CHAIN (parm) = NULL_TREE;
4471 --processing_template_parmlist;
4473 return saved_parmlist;
4476 // Explicitly indicate the end of the template parameter list. We assume
4477 // that the current template parameters have been constructed and/or
4478 // managed explicitly, as when creating new template template parameters
4479 // from a shorthand constraint.
4480 void
4481 end_template_parm_list ()
4483 --processing_template_parmlist;
4486 /* end_template_decl is called after a template declaration is seen. */
4488 void
4489 end_template_decl (void)
4491 reset_specialization ();
4493 if (! processing_template_decl)
4494 return;
4496 /* This matches the pushlevel in begin_template_parm_list. */
4497 finish_scope ();
4499 --processing_template_decl;
4500 current_template_parms = TREE_CHAIN (current_template_parms);
4503 /* Takes a TREE_LIST representing a template parameter and convert it
4504 into an argument suitable to be passed to the type substitution
4505 functions. Note that If the TREE_LIST contains an error_mark
4506 node, the returned argument is error_mark_node. */
4508 tree
4509 template_parm_to_arg (tree t)
4512 if (t == NULL_TREE
4513 || TREE_CODE (t) != TREE_LIST)
4514 return t;
4516 if (error_operand_p (TREE_VALUE (t)))
4517 return error_mark_node;
4519 t = TREE_VALUE (t);
4521 if (TREE_CODE (t) == TYPE_DECL
4522 || TREE_CODE (t) == TEMPLATE_DECL)
4524 t = TREE_TYPE (t);
4526 if (TEMPLATE_TYPE_PARAMETER_PACK (t))
4528 /* Turn this argument into a TYPE_ARGUMENT_PACK
4529 with a single element, which expands T. */
4530 tree vec = make_tree_vec (1);
4531 if (CHECKING_P)
4532 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (vec, TREE_VEC_LENGTH (vec));
4534 TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
4536 t = cxx_make_type (TYPE_ARGUMENT_PACK);
4537 SET_ARGUMENT_PACK_ARGS (t, vec);
4540 else
4542 t = DECL_INITIAL (t);
4544 if (TEMPLATE_PARM_PARAMETER_PACK (t))
4546 /* Turn this argument into a NONTYPE_ARGUMENT_PACK
4547 with a single element, which expands T. */
4548 tree vec = make_tree_vec (1);
4549 if (CHECKING_P)
4550 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (vec, TREE_VEC_LENGTH (vec));
4552 t = convert_from_reference (t);
4553 TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
4555 t = make_node (NONTYPE_ARGUMENT_PACK);
4556 SET_ARGUMENT_PACK_ARGS (t, vec);
4558 else
4559 t = convert_from_reference (t);
4561 return t;
4564 /* Given a single level of template parameters (a TREE_VEC), return it
4565 as a set of template arguments. */
4567 static tree
4568 template_parms_level_to_args (tree parms)
4570 tree a = copy_node (parms);
4571 TREE_TYPE (a) = NULL_TREE;
4572 for (int i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
4573 TREE_VEC_ELT (a, i) = template_parm_to_arg (TREE_VEC_ELT (a, i));
4575 if (CHECKING_P)
4576 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (a, TREE_VEC_LENGTH (a));
4578 return a;
4581 /* Given a set of template parameters, return them as a set of template
4582 arguments. The template parameters are represented as a TREE_VEC, in
4583 the form documented in cp-tree.h for template arguments. */
4585 static tree
4586 template_parms_to_args (tree parms)
4588 tree header;
4589 tree args = NULL_TREE;
4590 int length = TMPL_PARMS_DEPTH (parms);
4591 int l = length;
4593 /* If there is only one level of template parameters, we do not
4594 create a TREE_VEC of TREE_VECs. Instead, we return a single
4595 TREE_VEC containing the arguments. */
4596 if (length > 1)
4597 args = make_tree_vec (length);
4599 for (header = parms; header; header = TREE_CHAIN (header))
4601 tree a = template_parms_level_to_args (TREE_VALUE (header));
4603 if (length > 1)
4604 TREE_VEC_ELT (args, --l) = a;
4605 else
4606 args = a;
4609 return args;
4612 /* Within the declaration of a template, return the currently active
4613 template parameters as an argument TREE_VEC. */
4615 static tree
4616 current_template_args (void)
4618 return template_parms_to_args (current_template_parms);
4621 /* Update the declared TYPE by doing any lookups which were thought to be
4622 dependent, but are not now that we know the SCOPE of the declarator. */
4624 tree
4625 maybe_update_decl_type (tree orig_type, tree scope)
4627 tree type = orig_type;
4629 if (type == NULL_TREE)
4630 return type;
4632 if (TREE_CODE (orig_type) == TYPE_DECL)
4633 type = TREE_TYPE (type);
4635 if (scope && TYPE_P (scope) && dependent_type_p (scope)
4636 && dependent_type_p (type)
4637 /* Don't bother building up the args in this case. */
4638 && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
4640 /* tsubst in the args corresponding to the template parameters,
4641 including auto if present. Most things will be unchanged, but
4642 make_typename_type and tsubst_qualified_id will resolve
4643 TYPENAME_TYPEs and SCOPE_REFs that were previously dependent. */
4644 tree args = current_template_args ();
4645 tree auto_node = type_uses_auto (type);
4646 tree pushed;
4647 if (auto_node)
4649 tree auto_vec = make_tree_vec (1);
4650 TREE_VEC_ELT (auto_vec, 0) = auto_node;
4651 args = add_to_template_args (args, auto_vec);
4653 pushed = push_scope (scope);
4654 type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
4655 if (pushed)
4656 pop_scope (scope);
4659 if (type == error_mark_node)
4660 return orig_type;
4662 if (TREE_CODE (orig_type) == TYPE_DECL)
4664 if (same_type_p (type, TREE_TYPE (orig_type)))
4665 type = orig_type;
4666 else
4667 type = TYPE_NAME (type);
4669 return type;
4672 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
4673 template PARMS and constraints, CONSTR. If MEMBER_TEMPLATE_P is true,
4674 the new template is a member template. */
4676 tree
4677 build_template_decl (tree decl, tree parms, bool member_template_p)
4679 tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
4680 SET_DECL_LANGUAGE (tmpl, DECL_LANGUAGE (decl));
4681 DECL_TEMPLATE_PARMS (tmpl) = parms;
4682 DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
4683 DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
4684 DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
4686 return tmpl;
4689 struct template_parm_data
4691 /* The level of the template parameters we are currently
4692 processing. */
4693 int level;
4695 /* The index of the specialization argument we are currently
4696 processing. */
4697 int current_arg;
4699 /* An array whose size is the number of template parameters. The
4700 elements are nonzero if the parameter has been used in any one
4701 of the arguments processed so far. */
4702 int* parms;
4704 /* An array whose size is the number of template arguments. The
4705 elements are nonzero if the argument makes use of template
4706 parameters of this level. */
4707 int* arg_uses_template_parms;
4710 /* Subroutine of push_template_decl used to see if each template
4711 parameter in a partial specialization is used in the explicit
4712 argument list. If T is of the LEVEL given in DATA (which is
4713 treated as a template_parm_data*), then DATA->PARMS is marked
4714 appropriately. */
4716 static int
4717 mark_template_parm (tree t, void* data)
4719 int level;
4720 int idx;
4721 struct template_parm_data* tpd = (struct template_parm_data*) data;
4723 template_parm_level_and_index (t, &level, &idx);
4725 if (level == tpd->level)
4727 tpd->parms[idx] = 1;
4728 tpd->arg_uses_template_parms[tpd->current_arg] = 1;
4731 /* In C++17 the type of a non-type argument is a deduced context. */
4732 if (cxx_dialect >= cxx17
4733 && TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4734 for_each_template_parm (TREE_TYPE (t),
4735 &mark_template_parm,
4736 data,
4737 NULL,
4738 /*include_nondeduced_p=*/false);
4740 /* Return zero so that for_each_template_parm will continue the
4741 traversal of the tree; we want to mark *every* template parm. */
4742 return 0;
4745 /* Process the partial specialization DECL. */
4747 static tree
4748 process_partial_specialization (tree decl)
4750 tree type = TREE_TYPE (decl);
4751 tree tinfo = get_template_info (decl);
4752 tree maintmpl = TI_TEMPLATE (tinfo);
4753 tree specargs = TI_ARGS (tinfo);
4754 tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
4755 tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
4756 tree inner_parms;
4757 tree inst;
4758 int nargs = TREE_VEC_LENGTH (inner_args);
4759 int ntparms;
4760 int i;
4761 bool did_error_intro = false;
4762 struct template_parm_data tpd;
4763 struct template_parm_data tpd2;
4765 gcc_assert (current_template_parms);
4767 /* A concept cannot be specialized. */
4768 if (flag_concepts && variable_concept_p (maintmpl))
4770 error ("specialization of variable concept %q#D", maintmpl);
4771 return error_mark_node;
4774 inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
4775 ntparms = TREE_VEC_LENGTH (inner_parms);
4777 /* We check that each of the template parameters given in the
4778 partial specialization is used in the argument list to the
4779 specialization. For example:
4781 template <class T> struct S;
4782 template <class T> struct S<T*>;
4784 The second declaration is OK because `T*' uses the template
4785 parameter T, whereas
4787 template <class T> struct S<int>;
4789 is no good. Even trickier is:
4791 template <class T>
4792 struct S1
4794 template <class U>
4795 struct S2;
4796 template <class U>
4797 struct S2<T>;
4800 The S2<T> declaration is actually invalid; it is a
4801 full-specialization. Of course,
4803 template <class U>
4804 struct S2<T (*)(U)>;
4806 or some such would have been OK. */
4807 tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
4808 tpd.parms = XALLOCAVEC (int, ntparms);
4809 memset (tpd.parms, 0, sizeof (int) * ntparms);
4811 tpd.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4812 memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
4813 for (i = 0; i < nargs; ++i)
4815 tpd.current_arg = i;
4816 for_each_template_parm (TREE_VEC_ELT (inner_args, i),
4817 &mark_template_parm,
4818 &tpd,
4819 NULL,
4820 /*include_nondeduced_p=*/false);
4822 for (i = 0; i < ntparms; ++i)
4823 if (tpd.parms[i] == 0)
4825 /* One of the template parms was not used in a deduced context in the
4826 specialization. */
4827 if (!did_error_intro)
4829 error ("template parameters not deducible in "
4830 "partial specialization:");
4831 did_error_intro = true;
4834 inform (input_location, " %qD",
4835 TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
4838 if (did_error_intro)
4839 return error_mark_node;
4841 /* [temp.class.spec]
4843 The argument list of the specialization shall not be identical to
4844 the implicit argument list of the primary template. */
4845 tree main_args
4846 = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (maintmpl)));
4847 if (comp_template_args (inner_args, INNERMOST_TEMPLATE_ARGS (main_args))
4848 && (!flag_concepts
4849 || !strictly_subsumes (current_template_constraints (),
4850 get_constraints (maintmpl))))
4852 if (!flag_concepts)
4853 error ("partial specialization %q+D does not specialize "
4854 "any template arguments; to define the primary template, "
4855 "remove the template argument list", decl);
4856 else
4857 error ("partial specialization %q+D does not specialize any "
4858 "template arguments and is not more constrained than "
4859 "the primary template; to define the primary template, "
4860 "remove the template argument list", decl);
4861 inform (DECL_SOURCE_LOCATION (maintmpl), "primary template here");
4864 /* A partial specialization that replaces multiple parameters of the
4865 primary template with a pack expansion is less specialized for those
4866 parameters. */
4867 if (nargs < DECL_NTPARMS (maintmpl))
4869 error ("partial specialization is not more specialized than the "
4870 "primary template because it replaces multiple parameters "
4871 "with a pack expansion");
4872 inform (DECL_SOURCE_LOCATION (maintmpl), "primary template here");
4873 /* Avoid crash in process_partial_specialization. */
4874 return decl;
4877 /* If we aren't in a dependent class, we can actually try deduction. */
4878 else if (tpd.level == 1
4879 /* FIXME we should be able to handle a partial specialization of a
4880 partial instantiation, but currently we can't (c++/41727). */
4881 && TMPL_ARGS_DEPTH (specargs) == 1
4882 && !get_partial_spec_bindings (maintmpl, maintmpl, specargs))
4884 if (permerror (input_location, "partial specialization %qD is not "
4885 "more specialized than", decl))
4886 inform (DECL_SOURCE_LOCATION (maintmpl), "primary template %qD",
4887 maintmpl);
4890 /* [temp.class.spec]
4892 A partially specialized non-type argument expression shall not
4893 involve template parameters of the partial specialization except
4894 when the argument expression is a simple identifier.
4896 The type of a template parameter corresponding to a specialized
4897 non-type argument shall not be dependent on a parameter of the
4898 specialization.
4900 Also, we verify that pack expansions only occur at the
4901 end of the argument list. */
4902 gcc_assert (nargs == DECL_NTPARMS (maintmpl));
4903 tpd2.parms = 0;
4904 for (i = 0; i < nargs; ++i)
4906 tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
4907 tree arg = TREE_VEC_ELT (inner_args, i);
4908 tree packed_args = NULL_TREE;
4909 int j, len = 1;
4911 if (ARGUMENT_PACK_P (arg))
4913 /* Extract the arguments from the argument pack. We'll be
4914 iterating over these in the following loop. */
4915 packed_args = ARGUMENT_PACK_ARGS (arg);
4916 len = TREE_VEC_LENGTH (packed_args);
4919 for (j = 0; j < len; j++)
4921 if (packed_args)
4922 /* Get the Jth argument in the parameter pack. */
4923 arg = TREE_VEC_ELT (packed_args, j);
4925 if (PACK_EXPANSION_P (arg))
4927 /* Pack expansions must come at the end of the
4928 argument list. */
4929 if ((packed_args && j < len - 1)
4930 || (!packed_args && i < nargs - 1))
4932 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4933 error ("parameter pack argument %qE must be at the "
4934 "end of the template argument list", arg);
4935 else
4936 error ("parameter pack argument %qT must be at the "
4937 "end of the template argument list", arg);
4941 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4942 /* We only care about the pattern. */
4943 arg = PACK_EXPANSION_PATTERN (arg);
4945 if (/* These first two lines are the `non-type' bit. */
4946 !TYPE_P (arg)
4947 && TREE_CODE (arg) != TEMPLATE_DECL
4948 /* This next two lines are the `argument expression is not just a
4949 simple identifier' condition and also the `specialized
4950 non-type argument' bit. */
4951 && TREE_CODE (arg) != TEMPLATE_PARM_INDEX
4952 && !(REFERENCE_REF_P (arg)
4953 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_PARM_INDEX))
4955 if ((!packed_args && tpd.arg_uses_template_parms[i])
4956 || (packed_args && uses_template_parms (arg)))
4957 error ("template argument %qE involves template parameter(s)",
4958 arg);
4959 else
4961 /* Look at the corresponding template parameter,
4962 marking which template parameters its type depends
4963 upon. */
4964 tree type = TREE_TYPE (parm);
4966 if (!tpd2.parms)
4968 /* We haven't yet initialized TPD2. Do so now. */
4969 tpd2.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4970 /* The number of parameters here is the number in the
4971 main template, which, as checked in the assertion
4972 above, is NARGS. */
4973 tpd2.parms = XALLOCAVEC (int, nargs);
4974 tpd2.level =
4975 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
4978 /* Mark the template parameters. But this time, we're
4979 looking for the template parameters of the main
4980 template, not in the specialization. */
4981 tpd2.current_arg = i;
4982 tpd2.arg_uses_template_parms[i] = 0;
4983 memset (tpd2.parms, 0, sizeof (int) * nargs);
4984 for_each_template_parm (type,
4985 &mark_template_parm,
4986 &tpd2,
4987 NULL,
4988 /*include_nondeduced_p=*/false);
4990 if (tpd2.arg_uses_template_parms [i])
4992 /* The type depended on some template parameters.
4993 If they are fully specialized in the
4994 specialization, that's OK. */
4995 int j;
4996 int count = 0;
4997 for (j = 0; j < nargs; ++j)
4998 if (tpd2.parms[j] != 0
4999 && tpd.arg_uses_template_parms [j])
5000 ++count;
5001 if (count != 0)
5002 error_n (input_location, count,
5003 "type %qT of template argument %qE depends "
5004 "on a template parameter",
5005 "type %qT of template argument %qE depends "
5006 "on template parameters",
5007 type,
5008 arg);
5015 /* We should only get here once. */
5016 if (TREE_CODE (decl) == TYPE_DECL)
5017 gcc_assert (!COMPLETE_TYPE_P (type));
5019 // Build the template decl.
5020 tree tmpl = build_template_decl (decl, current_template_parms,
5021 DECL_MEMBER_TEMPLATE_P (maintmpl));
5022 TREE_TYPE (tmpl) = type;
5023 DECL_TEMPLATE_RESULT (tmpl) = decl;
5024 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
5025 DECL_TEMPLATE_INFO (tmpl) = build_template_info (maintmpl, specargs);
5026 DECL_PRIMARY_TEMPLATE (tmpl) = maintmpl;
5028 /* Give template template parms a DECL_CONTEXT of the template
5029 for which they are a parameter. */
5030 for (i = 0; i < ntparms; ++i)
5032 tree parm = TREE_VALUE (TREE_VEC_ELT (inner_parms, i));
5033 if (TREE_CODE (parm) == TEMPLATE_DECL)
5034 DECL_CONTEXT (parm) = tmpl;
5037 if (VAR_P (decl))
5038 /* We didn't register this in check_explicit_specialization so we could
5039 wait until the constraints were set. */
5040 decl = register_specialization (decl, maintmpl, specargs, false, 0);
5041 else
5042 associate_classtype_constraints (type);
5044 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
5045 = tree_cons (specargs, tmpl,
5046 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
5047 TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
5049 for (inst = DECL_TEMPLATE_INSTANTIATIONS (maintmpl); inst;
5050 inst = TREE_CHAIN (inst))
5052 tree instance = TREE_VALUE (inst);
5053 if (TYPE_P (instance)
5054 ? (COMPLETE_TYPE_P (instance)
5055 && CLASSTYPE_IMPLICIT_INSTANTIATION (instance))
5056 : DECL_TEMPLATE_INSTANTIATION (instance))
5058 tree spec = most_specialized_partial_spec (instance, tf_none);
5059 tree inst_decl = (DECL_P (instance)
5060 ? instance : TYPE_NAME (instance));
5061 if (!spec)
5062 /* OK */;
5063 else if (spec == error_mark_node)
5064 permerror (input_location,
5065 "declaration of %qD ambiguates earlier template "
5066 "instantiation for %qD", decl, inst_decl);
5067 else if (TREE_VALUE (spec) == tmpl)
5068 permerror (input_location,
5069 "partial specialization of %qD after instantiation "
5070 "of %qD", decl, inst_decl);
5074 return decl;
5077 /* PARM is a template parameter of some form; return the corresponding
5078 TEMPLATE_PARM_INDEX. */
5080 static tree
5081 get_template_parm_index (tree parm)
5083 if (TREE_CODE (parm) == PARM_DECL
5084 || TREE_CODE (parm) == CONST_DECL)
5085 parm = DECL_INITIAL (parm);
5086 else if (TREE_CODE (parm) == TYPE_DECL
5087 || TREE_CODE (parm) == TEMPLATE_DECL)
5088 parm = TREE_TYPE (parm);
5089 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
5090 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM
5091 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
5092 parm = TEMPLATE_TYPE_PARM_INDEX (parm);
5093 gcc_assert (TREE_CODE (parm) == TEMPLATE_PARM_INDEX);
5094 return parm;
5097 /* Subroutine of fixed_parameter_pack_p below. Look for any template
5098 parameter packs used by the template parameter PARM. */
5100 static void
5101 fixed_parameter_pack_p_1 (tree parm, struct find_parameter_pack_data *ppd)
5103 /* A type parm can't refer to another parm. */
5104 if (TREE_CODE (parm) == TYPE_DECL || parm == error_mark_node)
5105 return;
5106 else if (TREE_CODE (parm) == PARM_DECL)
5108 cp_walk_tree (&TREE_TYPE (parm), &find_parameter_packs_r,
5109 ppd, ppd->visited);
5110 return;
5113 gcc_assert (TREE_CODE (parm) == TEMPLATE_DECL);
5115 tree vec = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (parm));
5116 for (int i = 0; i < TREE_VEC_LENGTH (vec); ++i)
5117 fixed_parameter_pack_p_1 (TREE_VALUE (TREE_VEC_ELT (vec, i)), ppd);
5120 /* PARM is a template parameter pack. Return any parameter packs used in
5121 its type or the type of any of its template parameters. If there are
5122 any such packs, it will be instantiated into a fixed template parameter
5123 list by partial instantiation rather than be fully deduced. */
5125 tree
5126 fixed_parameter_pack_p (tree parm)
5128 /* This can only be true in a member template. */
5129 if (TEMPLATE_PARM_ORIG_LEVEL (get_template_parm_index (parm)) < 2)
5130 return NULL_TREE;
5131 /* This can only be true for a parameter pack. */
5132 if (!template_parameter_pack_p (parm))
5133 return NULL_TREE;
5134 /* A type parm can't refer to another parm. */
5135 if (TREE_CODE (parm) == TYPE_DECL)
5136 return NULL_TREE;
5138 tree parameter_packs = NULL_TREE;
5139 struct find_parameter_pack_data ppd;
5140 ppd.parameter_packs = &parameter_packs;
5141 ppd.visited = new hash_set<tree>;
5142 ppd.type_pack_expansion_p = false;
5144 fixed_parameter_pack_p_1 (parm, &ppd);
5146 delete ppd.visited;
5147 return parameter_packs;
5150 /* Check that a template declaration's use of default arguments and
5151 parameter packs is not invalid. Here, PARMS are the template
5152 parameters. IS_PRIMARY is true if DECL is the thing declared by
5153 a primary template. IS_PARTIAL is true if DECL is a partial
5154 specialization.
5156 IS_FRIEND_DECL is nonzero if DECL is either a non-defining friend
5157 function template declaration or a friend class template
5158 declaration. In the function case, 1 indicates a declaration, 2
5159 indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
5160 emitted for extraneous default arguments.
5162 Returns TRUE if there were no errors found, FALSE otherwise. */
5164 bool
5165 check_default_tmpl_args (tree decl, tree parms, bool is_primary,
5166 bool is_partial, int is_friend_decl)
5168 const char *msg;
5169 int last_level_to_check;
5170 tree parm_level;
5171 bool no_errors = true;
5173 /* [temp.param]
5175 A default template-argument shall not be specified in a
5176 function template declaration or a function template definition, nor
5177 in the template-parameter-list of the definition of a member of a
5178 class template. */
5180 if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL
5181 || (TREE_CODE (decl) == FUNCTION_DECL && DECL_LOCAL_FUNCTION_P (decl)))
5182 /* You can't have a function template declaration in a local
5183 scope, nor you can you define a member of a class template in a
5184 local scope. */
5185 return true;
5187 if ((TREE_CODE (decl) == TYPE_DECL
5188 && TREE_TYPE (decl)
5189 && LAMBDA_TYPE_P (TREE_TYPE (decl)))
5190 || (TREE_CODE (decl) == FUNCTION_DECL
5191 && LAMBDA_FUNCTION_P (decl)))
5192 /* A lambda doesn't have an explicit declaration; don't complain
5193 about the parms of the enclosing class. */
5194 return true;
5196 if (current_class_type
5197 && !TYPE_BEING_DEFINED (current_class_type)
5198 && DECL_LANG_SPECIFIC (decl)
5199 && DECL_DECLARES_FUNCTION_P (decl)
5200 /* If this is either a friend defined in the scope of the class
5201 or a member function. */
5202 && (DECL_FUNCTION_MEMBER_P (decl)
5203 ? same_type_p (DECL_CONTEXT (decl), current_class_type)
5204 : DECL_FRIEND_CONTEXT (decl)
5205 ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
5206 : false)
5207 /* And, if it was a member function, it really was defined in
5208 the scope of the class. */
5209 && (!DECL_FUNCTION_MEMBER_P (decl)
5210 || DECL_INITIALIZED_IN_CLASS_P (decl)))
5211 /* We already checked these parameters when the template was
5212 declared, so there's no need to do it again now. This function
5213 was defined in class scope, but we're processing its body now
5214 that the class is complete. */
5215 return true;
5217 /* Core issue 226 (C++0x only): the following only applies to class
5218 templates. */
5219 if (is_primary
5220 && ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL))
5222 /* [temp.param]
5224 If a template-parameter has a default template-argument, all
5225 subsequent template-parameters shall have a default
5226 template-argument supplied. */
5227 for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
5229 tree inner_parms = TREE_VALUE (parm_level);
5230 int ntparms = TREE_VEC_LENGTH (inner_parms);
5231 int seen_def_arg_p = 0;
5232 int i;
5234 for (i = 0; i < ntparms; ++i)
5236 tree parm = TREE_VEC_ELT (inner_parms, i);
5238 if (parm == error_mark_node)
5239 continue;
5241 if (TREE_PURPOSE (parm))
5242 seen_def_arg_p = 1;
5243 else if (seen_def_arg_p
5244 && !template_parameter_pack_p (TREE_VALUE (parm)))
5246 error ("no default argument for %qD", TREE_VALUE (parm));
5247 /* For better subsequent error-recovery, we indicate that
5248 there should have been a default argument. */
5249 TREE_PURPOSE (parm) = error_mark_node;
5250 no_errors = false;
5252 else if (!is_partial
5253 && !is_friend_decl
5254 /* Don't complain about an enclosing partial
5255 specialization. */
5256 && parm_level == parms
5257 && TREE_CODE (decl) == TYPE_DECL
5258 && i < ntparms - 1
5259 && template_parameter_pack_p (TREE_VALUE (parm))
5260 /* A fixed parameter pack will be partially
5261 instantiated into a fixed length list. */
5262 && !fixed_parameter_pack_p (TREE_VALUE (parm)))
5264 /* A primary class template can only have one
5265 parameter pack, at the end of the template
5266 parameter list. */
5268 error ("parameter pack %q+D must be at the end of the"
5269 " template parameter list", TREE_VALUE (parm));
5271 TREE_VALUE (TREE_VEC_ELT (inner_parms, i))
5272 = error_mark_node;
5273 no_errors = false;
5279 if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
5280 || is_partial
5281 || !is_primary
5282 || is_friend_decl)
5283 /* For an ordinary class template, default template arguments are
5284 allowed at the innermost level, e.g.:
5285 template <class T = int>
5286 struct S {};
5287 but, in a partial specialization, they're not allowed even
5288 there, as we have in [temp.class.spec]:
5290 The template parameter list of a specialization shall not
5291 contain default template argument values.
5293 So, for a partial specialization, or for a function template
5294 (in C++98/C++03), we look at all of them. */
5296 else
5297 /* But, for a primary class template that is not a partial
5298 specialization we look at all template parameters except the
5299 innermost ones. */
5300 parms = TREE_CHAIN (parms);
5302 /* Figure out what error message to issue. */
5303 if (is_friend_decl == 2)
5304 msg = G_("default template arguments may not be used in function template "
5305 "friend re-declaration");
5306 else if (is_friend_decl)
5307 msg = G_("default template arguments may not be used in template "
5308 "friend declarations");
5309 else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
5310 msg = G_("default template arguments may not be used in function templates "
5311 "without -std=c++11 or -std=gnu++11");
5312 else if (is_partial)
5313 msg = G_("default template arguments may not be used in "
5314 "partial specializations");
5315 else if (current_class_type && CLASSTYPE_IS_TEMPLATE (current_class_type))
5316 msg = G_("default argument for template parameter for class enclosing %qD");
5317 else
5318 /* Per [temp.param]/9, "A default template-argument shall not be
5319 specified in the template-parameter-lists of the definition of
5320 a member of a class template that appears outside of the member's
5321 class.", thus if we aren't handling a member of a class template
5322 there is no need to examine the parameters. */
5323 return true;
5325 if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
5326 /* If we're inside a class definition, there's no need to
5327 examine the parameters to the class itself. On the one
5328 hand, they will be checked when the class is defined, and,
5329 on the other, default arguments are valid in things like:
5330 template <class T = double>
5331 struct S { template <class U> void f(U); };
5332 Here the default argument for `S' has no bearing on the
5333 declaration of `f'. */
5334 last_level_to_check = template_class_depth (current_class_type) + 1;
5335 else
5336 /* Check everything. */
5337 last_level_to_check = 0;
5339 for (parm_level = parms;
5340 parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
5341 parm_level = TREE_CHAIN (parm_level))
5343 tree inner_parms = TREE_VALUE (parm_level);
5344 int i;
5345 int ntparms;
5347 ntparms = TREE_VEC_LENGTH (inner_parms);
5348 for (i = 0; i < ntparms; ++i)
5350 if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
5351 continue;
5353 if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
5355 if (msg)
5357 no_errors = false;
5358 if (is_friend_decl == 2)
5359 return no_errors;
5361 error (msg, decl);
5362 msg = 0;
5365 /* Clear out the default argument so that we are not
5366 confused later. */
5367 TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
5371 /* At this point, if we're still interested in issuing messages,
5372 they must apply to classes surrounding the object declared. */
5373 if (msg)
5374 msg = G_("default argument for template parameter for class "
5375 "enclosing %qD");
5378 return no_errors;
5381 /* Worker for push_template_decl_real, called via
5382 for_each_template_parm. DATA is really an int, indicating the
5383 level of the parameters we are interested in. If T is a template
5384 parameter of that level, return nonzero. */
5386 static int
5387 template_parm_this_level_p (tree t, void* data)
5389 int this_level = *(int *)data;
5390 int level;
5392 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
5393 level = TEMPLATE_PARM_LEVEL (t);
5394 else
5395 level = TEMPLATE_TYPE_LEVEL (t);
5396 return level == this_level;
5399 /* Worker for uses_outer_template_parms, called via for_each_template_parm.
5400 DATA is really an int, indicating the innermost outer level of parameters.
5401 If T is a template parameter of that level or further out, return
5402 nonzero. */
5404 static int
5405 template_parm_outer_level (tree t, void *data)
5407 int this_level = *(int *)data;
5408 int level;
5410 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
5411 level = TEMPLATE_PARM_LEVEL (t);
5412 else
5413 level = TEMPLATE_TYPE_LEVEL (t);
5414 return level <= this_level;
5417 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
5418 parameters given by current_template_args, or reuses a
5419 previously existing one, if appropriate. Returns the DECL, or an
5420 equivalent one, if it is replaced via a call to duplicate_decls.
5422 If IS_FRIEND is true, DECL is a friend declaration. */
5424 tree
5425 push_template_decl_real (tree decl, bool is_friend)
5427 tree tmpl;
5428 tree args;
5429 tree info;
5430 tree ctx;
5431 bool is_primary;
5432 bool is_partial;
5433 int new_template_p = 0;
5434 /* True if the template is a member template, in the sense of
5435 [temp.mem]. */
5436 bool member_template_p = false;
5438 if (decl == error_mark_node || !current_template_parms)
5439 return error_mark_node;
5441 /* See if this is a partial specialization. */
5442 is_partial = ((DECL_IMPLICIT_TYPEDEF_P (decl)
5443 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
5444 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
5445 || (VAR_P (decl)
5446 && DECL_LANG_SPECIFIC (decl)
5447 && DECL_TEMPLATE_SPECIALIZATION (decl)
5448 && TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (decl))));
5450 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
5451 is_friend = true;
5453 if (is_friend)
5454 /* For a friend, we want the context of the friend, not
5455 the type of which it is a friend. */
5456 ctx = CP_DECL_CONTEXT (decl);
5457 else if (CP_DECL_CONTEXT (decl)
5458 && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
5459 /* In the case of a virtual function, we want the class in which
5460 it is defined. */
5461 ctx = CP_DECL_CONTEXT (decl);
5462 else
5463 /* Otherwise, if we're currently defining some class, the DECL
5464 is assumed to be a member of the class. */
5465 ctx = current_scope ();
5467 if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
5468 ctx = NULL_TREE;
5470 if (!DECL_CONTEXT (decl))
5471 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
5473 /* See if this is a primary template. */
5474 if (is_friend && ctx
5475 && uses_template_parms_level (ctx, processing_template_decl))
5476 /* A friend template that specifies a class context, i.e.
5477 template <typename T> friend void A<T>::f();
5478 is not primary. */
5479 is_primary = false;
5480 else if (TREE_CODE (decl) == TYPE_DECL
5481 && LAMBDA_TYPE_P (TREE_TYPE (decl)))
5482 is_primary = false;
5483 else
5484 is_primary = template_parm_scope_p ();
5486 if (is_primary)
5488 warning (OPT_Wtemplates, "template %qD declared", decl);
5490 if (DECL_CLASS_SCOPE_P (decl))
5491 member_template_p = true;
5492 if (TREE_CODE (decl) == TYPE_DECL
5493 && anon_aggrname_p (DECL_NAME (decl)))
5495 error ("template class without a name");
5496 return error_mark_node;
5498 else if (TREE_CODE (decl) == FUNCTION_DECL)
5500 if (member_template_p)
5502 if (DECL_OVERRIDE_P (decl) || DECL_FINAL_P (decl))
5503 error ("member template %qD may not have virt-specifiers", decl);
5505 if (DECL_DESTRUCTOR_P (decl))
5507 /* [temp.mem]
5509 A destructor shall not be a member template. */
5510 error ("destructor %qD declared as member template", decl);
5511 return error_mark_node;
5513 if (IDENTIFIER_NEWDEL_OP_P (DECL_NAME (decl))
5514 && (!prototype_p (TREE_TYPE (decl))
5515 || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
5516 || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
5517 || (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
5518 == void_list_node)))
5520 /* [basic.stc.dynamic.allocation]
5522 An allocation function can be a function
5523 template. ... Template allocation functions shall
5524 have two or more parameters. */
5525 error ("invalid template declaration of %qD", decl);
5526 return error_mark_node;
5529 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
5530 && CLASS_TYPE_P (TREE_TYPE (decl)))
5532 /* Class template, set TEMPLATE_TYPE_PARM_FOR_CLASS. */
5533 tree parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
5534 for (int i = 0; i < TREE_VEC_LENGTH (parms); ++i)
5536 tree t = TREE_VALUE (TREE_VEC_ELT (parms, i));
5537 if (TREE_CODE (t) == TYPE_DECL)
5538 t = TREE_TYPE (t);
5539 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
5540 TEMPLATE_TYPE_PARM_FOR_CLASS (t) = true;
5543 else if (TREE_CODE (decl) == TYPE_DECL
5544 && TYPE_DECL_ALIAS_P (decl))
5545 /* alias-declaration */
5546 gcc_assert (!DECL_ARTIFICIAL (decl));
5547 else if (VAR_P (decl))
5548 /* C++14 variable template. */;
5549 else
5551 error ("template declaration of %q#D", decl);
5552 return error_mark_node;
5556 /* Check to see that the rules regarding the use of default
5557 arguments are not being violated. We check args for a friend
5558 functions when we know whether it's a definition, introducing
5559 declaration or re-declaration. */
5560 if (!is_friend || TREE_CODE (decl) != FUNCTION_DECL)
5561 check_default_tmpl_args (decl, current_template_parms,
5562 is_primary, is_partial, is_friend);
5564 /* Ensure that there are no parameter packs in the type of this
5565 declaration that have not been expanded. */
5566 if (TREE_CODE (decl) == FUNCTION_DECL)
5568 /* Check each of the arguments individually to see if there are
5569 any bare parameter packs. */
5570 tree type = TREE_TYPE (decl);
5571 tree arg = DECL_ARGUMENTS (decl);
5572 tree argtype = TYPE_ARG_TYPES (type);
5574 while (arg && argtype)
5576 if (!DECL_PACK_P (arg)
5577 && check_for_bare_parameter_packs (TREE_TYPE (arg)))
5579 /* This is a PARM_DECL that contains unexpanded parameter
5580 packs. We have already complained about this in the
5581 check_for_bare_parameter_packs call, so just replace
5582 these types with ERROR_MARK_NODE. */
5583 TREE_TYPE (arg) = error_mark_node;
5584 TREE_VALUE (argtype) = error_mark_node;
5587 arg = DECL_CHAIN (arg);
5588 argtype = TREE_CHAIN (argtype);
5591 /* Check for bare parameter packs in the return type and the
5592 exception specifiers. */
5593 if (check_for_bare_parameter_packs (TREE_TYPE (type)))
5594 /* Errors were already issued, set return type to int
5595 as the frontend doesn't expect error_mark_node as
5596 the return type. */
5597 TREE_TYPE (type) = integer_type_node;
5598 if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
5599 TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
5601 else if (check_for_bare_parameter_packs ((TREE_CODE (decl) == TYPE_DECL
5602 && TYPE_DECL_ALIAS_P (decl))
5603 ? DECL_ORIGINAL_TYPE (decl)
5604 : TREE_TYPE (decl)))
5606 TREE_TYPE (decl) = error_mark_node;
5607 return error_mark_node;
5610 if (is_partial)
5611 return process_partial_specialization (decl);
5613 args = current_template_args ();
5615 if (!ctx
5616 || TREE_CODE (ctx) == FUNCTION_DECL
5617 || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
5618 || (TREE_CODE (decl) == TYPE_DECL
5619 && LAMBDA_TYPE_P (TREE_TYPE (decl)))
5620 || (is_friend && !DECL_TEMPLATE_INFO (decl)))
5622 if (DECL_LANG_SPECIFIC (decl)
5623 && DECL_TEMPLATE_INFO (decl)
5624 && DECL_TI_TEMPLATE (decl))
5625 tmpl = DECL_TI_TEMPLATE (decl);
5626 /* If DECL is a TYPE_DECL for a class-template, then there won't
5627 be DECL_LANG_SPECIFIC. The information equivalent to
5628 DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead. */
5629 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
5630 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
5631 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
5633 /* Since a template declaration already existed for this
5634 class-type, we must be redeclaring it here. Make sure
5635 that the redeclaration is valid. */
5636 redeclare_class_template (TREE_TYPE (decl),
5637 current_template_parms,
5638 current_template_constraints ());
5639 /* We don't need to create a new TEMPLATE_DECL; just use the
5640 one we already had. */
5641 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
5643 else
5645 tmpl = build_template_decl (decl, current_template_parms,
5646 member_template_p);
5647 new_template_p = 1;
5649 if (DECL_LANG_SPECIFIC (decl)
5650 && DECL_TEMPLATE_SPECIALIZATION (decl))
5652 /* A specialization of a member template of a template
5653 class. */
5654 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
5655 DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
5656 DECL_TEMPLATE_INFO (decl) = NULL_TREE;
5660 else
5662 tree a, t, current, parms;
5663 int i;
5664 tree tinfo = get_template_info (decl);
5666 if (!tinfo)
5668 error ("template definition of non-template %q#D", decl);
5669 return error_mark_node;
5672 tmpl = TI_TEMPLATE (tinfo);
5674 if (DECL_FUNCTION_TEMPLATE_P (tmpl)
5675 && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
5676 && DECL_TEMPLATE_SPECIALIZATION (decl)
5677 && DECL_MEMBER_TEMPLATE_P (tmpl))
5679 tree new_tmpl;
5681 /* The declaration is a specialization of a member
5682 template, declared outside the class. Therefore, the
5683 innermost template arguments will be NULL, so we
5684 replace them with the arguments determined by the
5685 earlier call to check_explicit_specialization. */
5686 args = DECL_TI_ARGS (decl);
5688 new_tmpl
5689 = build_template_decl (decl, current_template_parms,
5690 member_template_p);
5691 DECL_TEMPLATE_RESULT (new_tmpl) = decl;
5692 TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
5693 DECL_TI_TEMPLATE (decl) = new_tmpl;
5694 SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
5695 DECL_TEMPLATE_INFO (new_tmpl)
5696 = build_template_info (tmpl, args);
5698 register_specialization (new_tmpl,
5699 most_general_template (tmpl),
5700 args,
5701 is_friend, 0);
5702 return decl;
5705 /* Make sure the template headers we got make sense. */
5707 parms = DECL_TEMPLATE_PARMS (tmpl);
5708 i = TMPL_PARMS_DEPTH (parms);
5709 if (TMPL_ARGS_DEPTH (args) != i)
5711 error ("expected %d levels of template parms for %q#D, got %d",
5712 i, decl, TMPL_ARGS_DEPTH (args));
5713 DECL_INTERFACE_KNOWN (decl) = 1;
5714 return error_mark_node;
5716 else
5717 for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
5719 a = TMPL_ARGS_LEVEL (args, i);
5720 t = INNERMOST_TEMPLATE_PARMS (parms);
5722 if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
5724 if (current == decl)
5725 error ("got %d template parameters for %q#D",
5726 TREE_VEC_LENGTH (a), decl);
5727 else
5728 error ("got %d template parameters for %q#T",
5729 TREE_VEC_LENGTH (a), current);
5730 error (" but %d required", TREE_VEC_LENGTH (t));
5731 /* Avoid crash in import_export_decl. */
5732 DECL_INTERFACE_KNOWN (decl) = 1;
5733 return error_mark_node;
5736 if (current == decl)
5737 current = ctx;
5738 else if (current == NULL_TREE)
5739 /* Can happen in erroneous input. */
5740 break;
5741 else
5742 current = get_containing_scope (current);
5745 /* Check that the parms are used in the appropriate qualifying scopes
5746 in the declarator. */
5747 if (!comp_template_args
5748 (TI_ARGS (tinfo),
5749 TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
5751 error ("template arguments to %qD do not match original "
5752 "template %qD", decl, DECL_TEMPLATE_RESULT (tmpl));
5753 if (!uses_template_parms (TI_ARGS (tinfo)))
5754 inform (input_location, "use %<template<>%> for"
5755 " an explicit specialization");
5756 /* Avoid crash in import_export_decl. */
5757 DECL_INTERFACE_KNOWN (decl) = 1;
5758 return error_mark_node;
5762 DECL_TEMPLATE_RESULT (tmpl) = decl;
5763 TREE_TYPE (tmpl) = TREE_TYPE (decl);
5765 /* Push template declarations for global functions and types. Note
5766 that we do not try to push a global template friend declared in a
5767 template class; such a thing may well depend on the template
5768 parameters of the class. */
5769 if (new_template_p && !ctx
5770 && !(is_friend && template_class_depth (current_class_type) > 0))
5772 tmpl = pushdecl_namespace_level (tmpl, is_friend);
5773 if (tmpl == error_mark_node)
5774 return error_mark_node;
5776 /* Hide template friend classes that haven't been declared yet. */
5777 if (is_friend && TREE_CODE (decl) == TYPE_DECL)
5779 DECL_ANTICIPATED (tmpl) = 1;
5780 DECL_FRIEND_P (tmpl) = 1;
5784 if (is_primary)
5786 tree parms = DECL_TEMPLATE_PARMS (tmpl);
5788 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
5790 /* Give template template parms a DECL_CONTEXT of the template
5791 for which they are a parameter. */
5792 parms = INNERMOST_TEMPLATE_PARMS (parms);
5793 for (int i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
5795 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5796 if (TREE_CODE (parm) == TEMPLATE_DECL)
5797 DECL_CONTEXT (parm) = tmpl;
5800 if (TREE_CODE (decl) == TYPE_DECL
5801 && TYPE_DECL_ALIAS_P (decl)
5802 && complex_alias_template_p (tmpl))
5803 TEMPLATE_DECL_COMPLEX_ALIAS_P (tmpl) = true;
5806 /* The DECL_TI_ARGS of DECL contains full set of arguments referring
5807 back to its most general template. If TMPL is a specialization,
5808 ARGS may only have the innermost set of arguments. Add the missing
5809 argument levels if necessary. */
5810 if (DECL_TEMPLATE_INFO (tmpl))
5811 args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
5813 info = build_template_info (tmpl, args);
5815 if (DECL_IMPLICIT_TYPEDEF_P (decl))
5816 SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
5817 else
5819 if (is_primary)
5820 retrofit_lang_decl (decl);
5821 if (DECL_LANG_SPECIFIC (decl))
5822 DECL_TEMPLATE_INFO (decl) = info;
5825 if (flag_implicit_templates
5826 && !is_friend
5827 && TREE_PUBLIC (decl)
5828 && VAR_OR_FUNCTION_DECL_P (decl))
5829 /* Set DECL_COMDAT on template instantiations; if we force
5830 them to be emitted by explicit instantiation or -frepo,
5831 mark_needed will tell cgraph to do the right thing. */
5832 DECL_COMDAT (decl) = true;
5834 return DECL_TEMPLATE_RESULT (tmpl);
5837 tree
5838 push_template_decl (tree decl)
5840 return push_template_decl_real (decl, false);
5843 /* FN is an inheriting constructor that inherits from the constructor
5844 template INHERITED; turn FN into a constructor template with a matching
5845 template header. */
5847 tree
5848 add_inherited_template_parms (tree fn, tree inherited)
5850 tree inner_parms
5851 = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (inherited));
5852 inner_parms = copy_node (inner_parms);
5853 tree parms
5854 = tree_cons (size_int (processing_template_decl + 1),
5855 inner_parms, current_template_parms);
5856 tree tmpl = build_template_decl (fn, parms, /*member*/true);
5857 tree args = template_parms_to_args (parms);
5858 DECL_TEMPLATE_INFO (fn) = build_template_info (tmpl, args);
5859 TREE_TYPE (tmpl) = TREE_TYPE (fn);
5860 DECL_TEMPLATE_RESULT (tmpl) = fn;
5861 DECL_ARTIFICIAL (tmpl) = true;
5862 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
5863 return tmpl;
5866 /* Called when a class template TYPE is redeclared with the indicated
5867 template PARMS, e.g.:
5869 template <class T> struct S;
5870 template <class T> struct S {}; */
5872 bool
5873 redeclare_class_template (tree type, tree parms, tree cons)
5875 tree tmpl;
5876 tree tmpl_parms;
5877 int i;
5879 if (!TYPE_TEMPLATE_INFO (type))
5881 error ("%qT is not a template type", type);
5882 return false;
5885 tmpl = TYPE_TI_TEMPLATE (type);
5886 if (!PRIMARY_TEMPLATE_P (tmpl))
5887 /* The type is nested in some template class. Nothing to worry
5888 about here; there are no new template parameters for the nested
5889 type. */
5890 return true;
5892 if (!parms)
5894 error ("template specifiers not specified in declaration of %qD",
5895 tmpl);
5896 return false;
5899 parms = INNERMOST_TEMPLATE_PARMS (parms);
5900 tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
5902 if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
5904 error_n (input_location, TREE_VEC_LENGTH (parms),
5905 "redeclared with %d template parameter",
5906 "redeclared with %d template parameters",
5907 TREE_VEC_LENGTH (parms));
5908 inform_n (DECL_SOURCE_LOCATION (tmpl), TREE_VEC_LENGTH (tmpl_parms),
5909 "previous declaration %qD used %d template parameter",
5910 "previous declaration %qD used %d template parameters",
5911 tmpl, TREE_VEC_LENGTH (tmpl_parms));
5912 return false;
5915 for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
5917 tree tmpl_parm;
5918 tree parm;
5919 tree tmpl_default;
5920 tree parm_default;
5922 if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
5923 || TREE_VEC_ELT (parms, i) == error_mark_node)
5924 continue;
5926 tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
5927 if (error_operand_p (tmpl_parm))
5928 return false;
5930 parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5931 tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
5932 parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
5934 /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
5935 TEMPLATE_DECL. */
5936 if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
5937 || (TREE_CODE (tmpl_parm) != TYPE_DECL
5938 && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
5939 || (TREE_CODE (tmpl_parm) != PARM_DECL
5940 && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
5941 != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
5942 || (TREE_CODE (tmpl_parm) == PARM_DECL
5943 && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
5944 != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))))
5946 error ("template parameter %q+#D", tmpl_parm);
5947 error ("redeclared here as %q#D", parm);
5948 return false;
5951 if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
5953 /* We have in [temp.param]:
5955 A template-parameter may not be given default arguments
5956 by two different declarations in the same scope. */
5957 error_at (input_location, "redefinition of default argument for %q#D", parm);
5958 inform (DECL_SOURCE_LOCATION (tmpl_parm),
5959 "original definition appeared here");
5960 return false;
5963 if (parm_default != NULL_TREE)
5964 /* Update the previous template parameters (which are the ones
5965 that will really count) with the new default value. */
5966 TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
5967 else if (tmpl_default != NULL_TREE)
5968 /* Update the new parameters, too; they'll be used as the
5969 parameters for any members. */
5970 TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
5972 /* Give each template template parm in this redeclaration a
5973 DECL_CONTEXT of the template for which they are a parameter. */
5974 if (TREE_CODE (parm) == TEMPLATE_DECL)
5976 gcc_assert (DECL_CONTEXT (parm) == NULL_TREE);
5977 DECL_CONTEXT (parm) = tmpl;
5980 if (TREE_CODE (parm) == TYPE_DECL)
5981 TEMPLATE_TYPE_PARM_FOR_CLASS (TREE_TYPE (parm)) = true;
5984 // Cannot redeclare a class template with a different set of constraints.
5985 if (!equivalent_constraints (get_constraints (tmpl), cons))
5987 error_at (input_location, "redeclaration %q#D with different "
5988 "constraints", tmpl);
5989 inform (DECL_SOURCE_LOCATION (tmpl),
5990 "original declaration appeared here");
5993 return true;
5996 /* The actual substitution part of instantiate_non_dependent_expr_sfinae,
5997 to be used when the caller has already checked
5998 (processing_template_decl
5999 && !instantiation_dependent_expression_p (expr)
6000 && potential_constant_expression (expr))
6001 and cleared processing_template_decl. */
6003 tree
6004 instantiate_non_dependent_expr_internal (tree expr, tsubst_flags_t complain)
6006 return tsubst_copy_and_build (expr,
6007 /*args=*/NULL_TREE,
6008 complain,
6009 /*in_decl=*/NULL_TREE,
6010 /*function_p=*/false,
6011 /*integral_constant_expression_p=*/true);
6014 /* Simplify EXPR if it is a non-dependent expression. Returns the
6015 (possibly simplified) expression. */
6017 tree
6018 instantiate_non_dependent_expr_sfinae (tree expr, tsubst_flags_t complain)
6020 if (expr == NULL_TREE)
6021 return NULL_TREE;
6023 /* If we're in a template, but EXPR isn't value dependent, simplify
6024 it. We're supposed to treat:
6026 template <typename T> void f(T[1 + 1]);
6027 template <typename T> void f(T[2]);
6029 as two declarations of the same function, for example. */
6030 if (processing_template_decl
6031 && is_nondependent_constant_expression (expr))
6033 processing_template_decl_sentinel s;
6034 expr = instantiate_non_dependent_expr_internal (expr, complain);
6036 return expr;
6039 tree
6040 instantiate_non_dependent_expr (tree expr)
6042 return instantiate_non_dependent_expr_sfinae (expr, tf_error);
6045 /* Like instantiate_non_dependent_expr, but return NULL_TREE rather than
6046 an uninstantiated expression. */
6048 tree
6049 instantiate_non_dependent_or_null (tree expr)
6051 if (expr == NULL_TREE)
6052 return NULL_TREE;
6053 if (processing_template_decl)
6055 if (!is_nondependent_constant_expression (expr))
6056 expr = NULL_TREE;
6057 else
6059 processing_template_decl_sentinel s;
6060 expr = instantiate_non_dependent_expr_internal (expr, tf_error);
6063 return expr;
6066 /* True iff T is a specialization of a variable template. */
6068 bool
6069 variable_template_specialization_p (tree t)
6071 if (!VAR_P (t) || !DECL_LANG_SPECIFIC (t) || !DECL_TEMPLATE_INFO (t))
6072 return false;
6073 tree tmpl = DECL_TI_TEMPLATE (t);
6074 return variable_template_p (tmpl);
6077 /* Return TRUE iff T is a type alias, a TEMPLATE_DECL for an alias
6078 template declaration, or a TYPE_DECL for an alias declaration. */
6080 bool
6081 alias_type_or_template_p (tree t)
6083 if (t == NULL_TREE)
6084 return false;
6085 return ((TREE_CODE (t) == TYPE_DECL && TYPE_DECL_ALIAS_P (t))
6086 || (TYPE_P (t)
6087 && TYPE_NAME (t)
6088 && TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
6089 || DECL_ALIAS_TEMPLATE_P (t));
6092 /* Return TRUE iff T is a specialization of an alias template. */
6094 bool
6095 alias_template_specialization_p (const_tree t)
6097 /* It's an alias template specialization if it's an alias and its
6098 TYPE_NAME is a specialization of a primary template. */
6099 if (TYPE_ALIAS_P (t))
6100 if (tree tinfo = TYPE_ALIAS_TEMPLATE_INFO (t))
6101 return PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo));
6103 return false;
6106 /* An alias template is complex from a SFINAE perspective if a template-id
6107 using that alias can be ill-formed when the expansion is not, as with
6108 the void_t template. We determine this by checking whether the
6109 expansion for the alias template uses all its template parameters. */
6111 struct uses_all_template_parms_data
6113 int level;
6114 bool *seen;
6117 static int
6118 uses_all_template_parms_r (tree t, void *data_)
6120 struct uses_all_template_parms_data &data
6121 = *(struct uses_all_template_parms_data*)data_;
6122 tree idx = get_template_parm_index (t);
6124 if (TEMPLATE_PARM_LEVEL (idx) == data.level)
6125 data.seen[TEMPLATE_PARM_IDX (idx)] = true;
6126 return 0;
6129 static bool
6130 complex_alias_template_p (const_tree tmpl)
6132 struct uses_all_template_parms_data data;
6133 tree pat = DECL_ORIGINAL_TYPE (DECL_TEMPLATE_RESULT (tmpl));
6134 tree parms = DECL_TEMPLATE_PARMS (tmpl);
6135 data.level = TMPL_PARMS_DEPTH (parms);
6136 int len = TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS (parms));
6137 data.seen = XALLOCAVEC (bool, len);
6138 for (int i = 0; i < len; ++i)
6139 data.seen[i] = false;
6141 for_each_template_parm (pat, uses_all_template_parms_r, &data, NULL, true);
6142 for (int i = 0; i < len; ++i)
6143 if (!data.seen[i])
6144 return true;
6145 return false;
6148 /* Return TRUE iff T is a specialization of a complex alias template with
6149 dependent template-arguments. */
6151 bool
6152 dependent_alias_template_spec_p (const_tree t)
6154 if (!alias_template_specialization_p (t))
6155 return false;
6157 tree tinfo = TYPE_ALIAS_TEMPLATE_INFO (t);
6158 if (!TEMPLATE_DECL_COMPLEX_ALIAS_P (TI_TEMPLATE (tinfo)))
6159 return false;
6161 tree args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo));
6162 if (!any_dependent_template_arguments_p (args))
6163 return false;
6165 return true;
6168 /* Return the number of innermost template parameters in TMPL. */
6170 static int
6171 num_innermost_template_parms (tree tmpl)
6173 tree parms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (tmpl));
6174 return TREE_VEC_LENGTH (parms);
6177 /* Return either TMPL or another template that it is equivalent to under DR
6178 1286: An alias that just changes the name of a template is equivalent to
6179 the other template. */
6181 static tree
6182 get_underlying_template (tree tmpl)
6184 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
6185 while (DECL_ALIAS_TEMPLATE_P (tmpl))
6187 /* Determine if the alias is equivalent to an underlying template. */
6188 tree orig_type = DECL_ORIGINAL_TYPE (DECL_TEMPLATE_RESULT (tmpl));
6189 tree tinfo = TYPE_TEMPLATE_INFO_MAYBE_ALIAS (orig_type);
6190 if (!tinfo)
6191 break;
6193 tree underlying = TI_TEMPLATE (tinfo);
6194 if (!PRIMARY_TEMPLATE_P (underlying)
6195 || (num_innermost_template_parms (tmpl)
6196 != num_innermost_template_parms (underlying)))
6197 break;
6199 tree alias_args = INNERMOST_TEMPLATE_ARGS
6200 (template_parms_to_args (DECL_TEMPLATE_PARMS (tmpl)));
6201 if (!comp_template_args (TI_ARGS (tinfo), alias_args))
6202 break;
6204 /* Alias is equivalent. Strip it and repeat. */
6205 tmpl = underlying;
6208 return tmpl;
6211 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
6212 must be a reference-to-function or a pointer-to-function type, as specified
6213 in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
6214 and check that the resulting function has external linkage. */
6216 static tree
6217 convert_nontype_argument_function (tree type, tree expr,
6218 tsubst_flags_t complain)
6220 tree fns = expr;
6221 tree fn, fn_no_ptr;
6222 linkage_kind linkage;
6224 fn = instantiate_type (type, fns, tf_none);
6225 if (fn == error_mark_node)
6226 return error_mark_node;
6228 if (value_dependent_expression_p (fn))
6229 goto accept;
6231 fn_no_ptr = strip_fnptr_conv (fn);
6232 if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
6233 fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
6234 if (BASELINK_P (fn_no_ptr))
6235 fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
6237 /* [temp.arg.nontype]/1
6239 A template-argument for a non-type, non-template template-parameter
6240 shall be one of:
6241 [...]
6242 -- the address of an object or function with external [C++11: or
6243 internal] linkage. */
6245 if (TREE_CODE (fn_no_ptr) != FUNCTION_DECL)
6247 if (complain & tf_error)
6249 error ("%qE is not a valid template argument for type %qT",
6250 expr, type);
6251 if (TYPE_PTR_P (type))
6252 inform (input_location, "it must be the address of a function "
6253 "with external linkage");
6254 else
6255 inform (input_location, "it must be the name of a function with "
6256 "external linkage");
6258 return NULL_TREE;
6261 linkage = decl_linkage (fn_no_ptr);
6262 if (cxx_dialect >= cxx11 ? linkage == lk_none : linkage != lk_external)
6264 if (complain & tf_error)
6266 if (cxx_dialect >= cxx11)
6267 error ("%qE is not a valid template argument for type %qT "
6268 "because %qD has no linkage",
6269 expr, type, fn_no_ptr);
6270 else
6271 error ("%qE is not a valid template argument for type %qT "
6272 "because %qD does not have external linkage",
6273 expr, type, fn_no_ptr);
6275 return NULL_TREE;
6278 accept:
6279 if (TREE_CODE (type) == REFERENCE_TYPE)
6281 if (REFERENCE_REF_P (fn))
6282 fn = TREE_OPERAND (fn, 0);
6283 else
6284 fn = build_address (fn);
6286 if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (fn)))
6287 fn = build_nop (type, fn);
6289 return fn;
6292 /* Subroutine of convert_nontype_argument.
6293 Check if EXPR of type TYPE is a valid pointer-to-member constant.
6294 Emit an error otherwise. */
6296 static bool
6297 check_valid_ptrmem_cst_expr (tree type, tree expr,
6298 tsubst_flags_t complain)
6300 location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
6301 tree orig_expr = expr;
6302 STRIP_NOPS (expr);
6303 if (null_ptr_cst_p (expr))
6304 return true;
6305 if (TREE_CODE (expr) == PTRMEM_CST
6306 && same_type_p (TYPE_PTRMEM_CLASS_TYPE (type),
6307 PTRMEM_CST_CLASS (expr)))
6308 return true;
6309 if (cxx_dialect >= cxx11 && null_member_pointer_value_p (expr))
6310 return true;
6311 if (processing_template_decl
6312 && TREE_CODE (expr) == ADDR_EXPR
6313 && TREE_CODE (TREE_OPERAND (expr, 0)) == OFFSET_REF)
6314 return true;
6315 if (complain & tf_error)
6317 error_at (loc, "%qE is not a valid template argument for type %qT",
6318 orig_expr, type);
6319 if (TREE_CODE (expr) != PTRMEM_CST)
6320 inform (loc, "it must be a pointer-to-member of the form %<&X::Y%>");
6321 else
6322 inform (loc, "because it is a member of %qT", PTRMEM_CST_CLASS (expr));
6324 return false;
6327 /* Returns TRUE iff the address of OP is value-dependent.
6329 14.6.2.4 [temp.dep.temp]:
6330 A non-integral non-type template-argument is dependent if its type is
6331 dependent or it has either of the following forms
6332 qualified-id
6333 & qualified-id
6334 and contains a nested-name-specifier which specifies a class-name that
6335 names a dependent type.
6337 We generalize this to just say that the address of a member of a
6338 dependent class is value-dependent; the above doesn't cover the
6339 address of a static data member named with an unqualified-id. */
6341 static bool
6342 has_value_dependent_address (tree op)
6344 /* We could use get_inner_reference here, but there's no need;
6345 this is only relevant for template non-type arguments, which
6346 can only be expressed as &id-expression. */
6347 if (DECL_P (op))
6349 tree ctx = CP_DECL_CONTEXT (op);
6350 if (TYPE_P (ctx) && dependent_type_p (ctx))
6351 return true;
6354 return false;
6357 /* The next set of functions are used for providing helpful explanatory
6358 diagnostics for failed overload resolution. Their messages should be
6359 indented by two spaces for consistency with the messages in
6360 call.c */
6362 static int
6363 unify_success (bool /*explain_p*/)
6365 return 0;
6368 /* Other failure functions should call this one, to provide a single function
6369 for setting a breakpoint on. */
6371 static int
6372 unify_invalid (bool /*explain_p*/)
6374 return 1;
6377 static int
6378 unify_parameter_deduction_failure (bool explain_p, tree parm)
6380 if (explain_p)
6381 inform (input_location,
6382 " couldn't deduce template parameter %qD", parm);
6383 return unify_invalid (explain_p);
6386 static int
6387 unify_cv_qual_mismatch (bool explain_p, tree parm, tree arg)
6389 if (explain_p)
6390 inform (input_location,
6391 " types %qT and %qT have incompatible cv-qualifiers",
6392 parm, arg);
6393 return unify_invalid (explain_p);
6396 static int
6397 unify_type_mismatch (bool explain_p, tree parm, tree arg)
6399 if (explain_p)
6400 inform (input_location, " mismatched types %qT and %qT", parm, arg);
6401 return unify_invalid (explain_p);
6404 static int
6405 unify_parameter_pack_mismatch (bool explain_p, tree parm, tree arg)
6407 if (explain_p)
6408 inform (input_location,
6409 " template parameter %qD is not a parameter pack, but "
6410 "argument %qD is",
6411 parm, arg);
6412 return unify_invalid (explain_p);
6415 static int
6416 unify_ptrmem_cst_mismatch (bool explain_p, tree parm, tree arg)
6418 if (explain_p)
6419 inform (input_location,
6420 " template argument %qE does not match "
6421 "pointer-to-member constant %qE",
6422 arg, parm);
6423 return unify_invalid (explain_p);
6426 static int
6427 unify_expression_unequal (bool explain_p, tree parm, tree arg)
6429 if (explain_p)
6430 inform (input_location, " %qE is not equivalent to %qE", parm, arg);
6431 return unify_invalid (explain_p);
6434 static int
6435 unify_parameter_pack_inconsistent (bool explain_p, tree old_arg, tree new_arg)
6437 if (explain_p)
6438 inform (input_location,
6439 " inconsistent parameter pack deduction with %qT and %qT",
6440 old_arg, new_arg);
6441 return unify_invalid (explain_p);
6444 static int
6445 unify_inconsistency (bool explain_p, tree parm, tree first, tree second)
6447 if (explain_p)
6449 if (TYPE_P (parm))
6450 inform (input_location,
6451 " deduced conflicting types for parameter %qT (%qT and %qT)",
6452 parm, first, second);
6453 else
6454 inform (input_location,
6455 " deduced conflicting values for non-type parameter "
6456 "%qE (%qE and %qE)", parm, first, second);
6458 return unify_invalid (explain_p);
6461 static int
6462 unify_vla_arg (bool explain_p, tree arg)
6464 if (explain_p)
6465 inform (input_location,
6466 " variable-sized array type %qT is not "
6467 "a valid template argument",
6468 arg);
6469 return unify_invalid (explain_p);
6472 static int
6473 unify_method_type_error (bool explain_p, tree arg)
6475 if (explain_p)
6476 inform (input_location,
6477 " member function type %qT is not a valid template argument",
6478 arg);
6479 return unify_invalid (explain_p);
6482 static int
6483 unify_arity (bool explain_p, int have, int wanted, bool least_p = false)
6485 if (explain_p)
6487 if (least_p)
6488 inform_n (input_location, wanted,
6489 " candidate expects at least %d argument, %d provided",
6490 " candidate expects at least %d arguments, %d provided",
6491 wanted, have);
6492 else
6493 inform_n (input_location, wanted,
6494 " candidate expects %d argument, %d provided",
6495 " candidate expects %d arguments, %d provided",
6496 wanted, have);
6498 return unify_invalid (explain_p);
6501 static int
6502 unify_too_many_arguments (bool explain_p, int have, int wanted)
6504 return unify_arity (explain_p, have, wanted);
6507 static int
6508 unify_too_few_arguments (bool explain_p, int have, int wanted,
6509 bool least_p = false)
6511 return unify_arity (explain_p, have, wanted, least_p);
6514 static int
6515 unify_arg_conversion (bool explain_p, tree to_type,
6516 tree from_type, tree arg)
6518 if (explain_p)
6519 inform (EXPR_LOC_OR_LOC (arg, input_location),
6520 " cannot convert %qE (type %qT) to type %qT",
6521 arg, from_type, to_type);
6522 return unify_invalid (explain_p);
6525 static int
6526 unify_no_common_base (bool explain_p, enum template_base_result r,
6527 tree parm, tree arg)
6529 if (explain_p)
6530 switch (r)
6532 case tbr_ambiguous_baseclass:
6533 inform (input_location, " %qT is an ambiguous base class of %qT",
6534 parm, arg);
6535 break;
6536 default:
6537 inform (input_location, " %qT is not derived from %qT", arg, parm);
6538 break;
6540 return unify_invalid (explain_p);
6543 static int
6544 unify_inconsistent_template_template_parameters (bool explain_p)
6546 if (explain_p)
6547 inform (input_location,
6548 " template parameters of a template template argument are "
6549 "inconsistent with other deduced template arguments");
6550 return unify_invalid (explain_p);
6553 static int
6554 unify_template_deduction_failure (bool explain_p, tree parm, tree arg)
6556 if (explain_p)
6557 inform (input_location,
6558 " can't deduce a template for %qT from non-template type %qT",
6559 parm, arg);
6560 return unify_invalid (explain_p);
6563 static int
6564 unify_template_argument_mismatch (bool explain_p, tree parm, tree arg)
6566 if (explain_p)
6567 inform (input_location,
6568 " template argument %qE does not match %qE", arg, parm);
6569 return unify_invalid (explain_p);
6572 /* Attempt to convert the non-type template parameter EXPR to the
6573 indicated TYPE. If the conversion is successful, return the
6574 converted value. If the conversion is unsuccessful, return
6575 NULL_TREE if we issued an error message, or error_mark_node if we
6576 did not. We issue error messages for out-and-out bad template
6577 parameters, but not simply because the conversion failed, since we
6578 might be just trying to do argument deduction. Both TYPE and EXPR
6579 must be non-dependent.
6581 The conversion follows the special rules described in
6582 [temp.arg.nontype], and it is much more strict than an implicit
6583 conversion.
6585 This function is called twice for each template argument (see
6586 lookup_template_class for a more accurate description of this
6587 problem). This means that we need to handle expressions which
6588 are not valid in a C++ source, but can be created from the
6589 first call (for instance, casts to perform conversions). These
6590 hacks can go away after we fix the double coercion problem. */
6592 static tree
6593 convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
6595 tree expr_type;
6596 location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
6597 tree orig_expr = expr;
6599 /* Detect immediately string literals as invalid non-type argument.
6600 This special-case is not needed for correctness (we would easily
6601 catch this later), but only to provide better diagnostic for this
6602 common user mistake. As suggested by DR 100, we do not mention
6603 linkage issues in the diagnostic as this is not the point. */
6604 /* FIXME we're making this OK. */
6605 if (TREE_CODE (expr) == STRING_CST)
6607 if (complain & tf_error)
6608 error ("%qE is not a valid template argument for type %qT "
6609 "because string literals can never be used in this context",
6610 expr, type);
6611 return NULL_TREE;
6614 /* Add the ADDR_EXPR now for the benefit of
6615 value_dependent_expression_p. */
6616 if (TYPE_PTROBV_P (type)
6617 && TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE)
6619 expr = decay_conversion (expr, complain);
6620 if (expr == error_mark_node)
6621 return error_mark_node;
6624 /* If we are in a template, EXPR may be non-dependent, but still
6625 have a syntactic, rather than semantic, form. For example, EXPR
6626 might be a SCOPE_REF, rather than the VAR_DECL to which the
6627 SCOPE_REF refers. Preserving the qualifying scope is necessary
6628 so that access checking can be performed when the template is
6629 instantiated -- but here we need the resolved form so that we can
6630 convert the argument. */
6631 bool non_dep = false;
6632 if (TYPE_REF_OBJ_P (type)
6633 && has_value_dependent_address (expr))
6634 /* If we want the address and it's value-dependent, don't fold. */;
6635 else if (processing_template_decl
6636 && is_nondependent_constant_expression (expr))
6637 non_dep = true;
6638 if (error_operand_p (expr))
6639 return error_mark_node;
6640 expr_type = TREE_TYPE (expr);
6642 /* If the argument is non-dependent, perform any conversions in
6643 non-dependent context as well. */
6644 processing_template_decl_sentinel s (non_dep);
6645 if (non_dep)
6646 expr = instantiate_non_dependent_expr_internal (expr, complain);
6648 if (value_dependent_expression_p (expr))
6649 expr = canonicalize_expr_argument (expr, complain);
6651 /* 14.3.2/5: The null pointer{,-to-member} conversion is applied
6652 to a non-type argument of "nullptr". */
6653 if (NULLPTR_TYPE_P (expr_type) && TYPE_PTR_OR_PTRMEM_P (type))
6654 expr = fold_simple (convert (type, expr));
6656 /* In C++11, integral or enumeration non-type template arguments can be
6657 arbitrary constant expressions. Pointer and pointer to
6658 member arguments can be general constant expressions that evaluate
6659 to a null value, but otherwise still need to be of a specific form. */
6660 if (cxx_dialect >= cxx11)
6662 if (TREE_CODE (expr) == PTRMEM_CST)
6663 /* A PTRMEM_CST is already constant, and a valid template
6664 argument for a parameter of pointer to member type, we just want
6665 to leave it in that form rather than lower it to a
6666 CONSTRUCTOR. */;
6667 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type)
6668 || cxx_dialect >= cxx17)
6670 /* C++17: A template-argument for a non-type template-parameter shall
6671 be a converted constant expression (8.20) of the type of the
6672 template-parameter. */
6673 expr = build_converted_constant_expr (type, expr, complain);
6674 if (expr == error_mark_node)
6675 return error_mark_node;
6676 expr = maybe_constant_value (expr);
6677 expr = convert_from_reference (expr);
6679 else if (TYPE_PTR_OR_PTRMEM_P (type))
6681 tree folded = maybe_constant_value (expr);
6682 if (TYPE_PTR_P (type) ? integer_zerop (folded)
6683 : null_member_pointer_value_p (folded))
6684 expr = folded;
6688 if (TREE_CODE (type) == REFERENCE_TYPE)
6689 expr = mark_lvalue_use (expr);
6690 else
6691 expr = mark_rvalue_use (expr);
6693 /* HACK: Due to double coercion, we can get a
6694 NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
6695 which is the tree that we built on the first call (see
6696 below when coercing to reference to object or to reference to
6697 function). We just strip everything and get to the arg.
6698 See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
6699 for examples. */
6700 if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
6702 tree probe_type, probe = expr;
6703 if (REFERENCE_REF_P (probe))
6704 probe = TREE_OPERAND (probe, 0);
6705 probe_type = TREE_TYPE (probe);
6706 if (TREE_CODE (probe) == NOP_EXPR)
6708 /* ??? Maybe we could use convert_from_reference here, but we
6709 would need to relax its constraints because the NOP_EXPR
6710 could actually change the type to something more cv-qualified,
6711 and this is not folded by convert_from_reference. */
6712 tree addr = TREE_OPERAND (probe, 0);
6713 if (TREE_CODE (probe_type) == REFERENCE_TYPE
6714 && TREE_CODE (addr) == ADDR_EXPR
6715 && TYPE_PTR_P (TREE_TYPE (addr))
6716 && (same_type_ignoring_top_level_qualifiers_p
6717 (TREE_TYPE (probe_type),
6718 TREE_TYPE (TREE_TYPE (addr)))))
6720 expr = TREE_OPERAND (addr, 0);
6721 expr_type = TREE_TYPE (probe_type);
6726 /* [temp.arg.nontype]/5, bullet 1
6728 For a non-type template-parameter of integral or enumeration type,
6729 integral promotions (_conv.prom_) and integral conversions
6730 (_conv.integral_) are applied. */
6731 if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
6733 if (cxx_dialect < cxx11)
6735 tree t = build_converted_constant_expr (type, expr, complain);
6736 t = maybe_constant_value (t);
6737 if (t != error_mark_node)
6738 expr = t;
6741 if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (expr)))
6742 return error_mark_node;
6744 /* Notice that there are constant expressions like '4 % 0' which
6745 do not fold into integer constants. */
6746 if (TREE_CODE (expr) != INTEGER_CST
6747 && !value_dependent_expression_p (expr))
6749 if (complain & tf_error)
6751 int errs = errorcount, warns = warningcount + werrorcount;
6752 if (!require_potential_constant_expression (expr))
6753 expr = error_mark_node;
6754 else
6755 expr = cxx_constant_value (expr);
6756 if (errorcount > errs || warningcount + werrorcount > warns)
6757 inform (loc, "in template argument for type %qT", type);
6758 if (expr == error_mark_node)
6759 return NULL_TREE;
6760 /* else cxx_constant_value complained but gave us
6761 a real constant, so go ahead. */
6762 if (TREE_CODE (expr) != INTEGER_CST)
6764 /* Some assemble time constant expressions like
6765 (intptr_t)&&lab1 - (intptr_t)&&lab2 or
6766 4 + (intptr_t)&&var satisfy reduced_constant_expression_p
6767 as we can emit them into .rodata initializers of
6768 variables, yet they can't fold into an INTEGER_CST at
6769 compile time. Refuse them here. */
6770 gcc_checking_assert (reduced_constant_expression_p (expr));
6771 error_at (loc, "template argument %qE for type %qT not "
6772 "a constant integer", expr, type);
6773 return NULL_TREE;
6776 else
6777 return NULL_TREE;
6780 /* Avoid typedef problems. */
6781 if (TREE_TYPE (expr) != type)
6782 expr = fold_convert (type, expr);
6784 /* [temp.arg.nontype]/5, bullet 2
6786 For a non-type template-parameter of type pointer to object,
6787 qualification conversions (_conv.qual_) and the array-to-pointer
6788 conversion (_conv.array_) are applied. */
6789 else if (TYPE_PTROBV_P (type))
6791 tree decayed = expr;
6793 /* Look through any NOP_EXPRs around an ADDR_EXPR, whether they come from
6794 decay_conversion or an explicit cast. If it's a problematic cast,
6795 we'll complain about it below. */
6796 if (TREE_CODE (expr) == NOP_EXPR)
6798 tree probe = expr;
6799 STRIP_NOPS (probe);
6800 if (TREE_CODE (probe) == ADDR_EXPR
6801 && TYPE_PTR_P (TREE_TYPE (probe)))
6803 expr = probe;
6804 expr_type = TREE_TYPE (expr);
6808 /* [temp.arg.nontype]/1 (TC1 version, DR 49):
6810 A template-argument for a non-type, non-template template-parameter
6811 shall be one of: [...]
6813 -- the name of a non-type template-parameter;
6814 -- the address of an object or function with external linkage, [...]
6815 expressed as "& id-expression" where the & is optional if the name
6816 refers to a function or array, or if the corresponding
6817 template-parameter is a reference.
6819 Here, we do not care about functions, as they are invalid anyway
6820 for a parameter of type pointer-to-object. */
6822 if (value_dependent_expression_p (expr))
6823 /* Non-type template parameters are OK. */
6825 else if (cxx_dialect >= cxx11 && integer_zerop (expr))
6826 /* Null pointer values are OK in C++11. */;
6827 else if (TREE_CODE (expr) != ADDR_EXPR)
6829 if (VAR_P (expr))
6831 if (complain & tf_error)
6832 error ("%qD is not a valid template argument "
6833 "because %qD is a variable, not the address of "
6834 "a variable", orig_expr, expr);
6835 return NULL_TREE;
6837 if (POINTER_TYPE_P (expr_type))
6839 if (complain & tf_error)
6840 error ("%qE is not a valid template argument for %qT "
6841 "because it is not the address of a variable",
6842 orig_expr, type);
6843 return NULL_TREE;
6845 /* Other values, like integer constants, might be valid
6846 non-type arguments of some other type. */
6847 return error_mark_node;
6849 else
6851 tree decl = TREE_OPERAND (expr, 0);
6853 if (!VAR_P (decl))
6855 if (complain & tf_error)
6856 error ("%qE is not a valid template argument of type %qT "
6857 "because %qE is not a variable", orig_expr, type, decl);
6858 return NULL_TREE;
6860 else if (cxx_dialect < cxx11 && !DECL_EXTERNAL_LINKAGE_P (decl))
6862 if (complain & tf_error)
6863 error ("%qE is not a valid template argument of type %qT "
6864 "because %qD does not have external linkage",
6865 orig_expr, type, decl);
6866 return NULL_TREE;
6868 else if ((cxx_dialect >= cxx11 && cxx_dialect < cxx17)
6869 && decl_linkage (decl) == lk_none)
6871 if (complain & tf_error)
6872 error ("%qE is not a valid template argument of type %qT "
6873 "because %qD has no linkage", orig_expr, type, decl);
6874 return NULL_TREE;
6876 /* C++17: For a non-type template-parameter of reference or pointer
6877 type, the value of the constant expression shall not refer to (or
6878 for a pointer type, shall not be the address of):
6879 * a subobject (4.5),
6880 * a temporary object (15.2),
6881 * a string literal (5.13.5),
6882 * the result of a typeid expression (8.2.8), or
6883 * a predefined __func__ variable (11.4.1). */
6884 else if (DECL_ARTIFICIAL (decl))
6886 if (complain & tf_error)
6887 error ("the address of %qD is not a valid template argument",
6888 decl);
6889 return NULL_TREE;
6891 else if (!same_type_ignoring_top_level_qualifiers_p
6892 (strip_array_types (TREE_TYPE (type)),
6893 strip_array_types (TREE_TYPE (decl))))
6895 if (complain & tf_error)
6896 error ("the address of the %qT subobject of %qD is not a "
6897 "valid template argument", TREE_TYPE (type), decl);
6898 return NULL_TREE;
6900 else if (!TREE_STATIC (decl) && !DECL_EXTERNAL (decl))
6902 if (complain & tf_error)
6903 error ("the address of %qD is not a valid template argument "
6904 "because it does not have static storage duration",
6905 decl);
6906 return NULL_TREE;
6910 expr = decayed;
6912 expr = perform_qualification_conversions (type, expr);
6913 if (expr == error_mark_node)
6914 return error_mark_node;
6916 /* [temp.arg.nontype]/5, bullet 3
6918 For a non-type template-parameter of type reference to object, no
6919 conversions apply. The type referred to by the reference may be more
6920 cv-qualified than the (otherwise identical) type of the
6921 template-argument. The template-parameter is bound directly to the
6922 template-argument, which must be an lvalue. */
6923 else if (TYPE_REF_OBJ_P (type))
6925 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
6926 expr_type))
6927 return error_mark_node;
6929 if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
6931 if (complain & tf_error)
6932 error ("%qE is not a valid template argument for type %qT "
6933 "because of conflicts in cv-qualification", expr, type);
6934 return NULL_TREE;
6937 if (!lvalue_p (expr))
6939 if (complain & tf_error)
6940 error ("%qE is not a valid template argument for type %qT "
6941 "because it is not an lvalue", expr, type);
6942 return NULL_TREE;
6945 /* [temp.arg.nontype]/1
6947 A template-argument for a non-type, non-template template-parameter
6948 shall be one of: [...]
6950 -- the address of an object or function with external linkage. */
6951 if (INDIRECT_REF_P (expr)
6952 && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
6954 expr = TREE_OPERAND (expr, 0);
6955 if (DECL_P (expr))
6957 if (complain & tf_error)
6958 error ("%q#D is not a valid template argument for type %qT "
6959 "because a reference variable does not have a constant "
6960 "address", expr, type);
6961 return NULL_TREE;
6965 if (TYPE_REF_OBJ_P (TREE_TYPE (expr))
6966 && value_dependent_expression_p (expr))
6967 /* OK, dependent reference. We don't want to ask whether a DECL is
6968 itself value-dependent, since what we want here is its address. */;
6969 else
6971 if (!DECL_P (expr))
6973 if (complain & tf_error)
6974 error ("%qE is not a valid template argument for type %qT "
6975 "because it is not an object with linkage",
6976 expr, type);
6977 return NULL_TREE;
6980 /* DR 1155 allows internal linkage in C++11 and up. */
6981 linkage_kind linkage = decl_linkage (expr);
6982 if (linkage < (cxx_dialect >= cxx11 ? lk_internal : lk_external))
6984 if (complain & tf_error)
6985 error ("%qE is not a valid template argument for type %qT "
6986 "because object %qD does not have linkage",
6987 expr, type, expr);
6988 return NULL_TREE;
6991 expr = build_address (expr);
6994 if (!same_type_p (type, TREE_TYPE (expr)))
6995 expr = build_nop (type, expr);
6997 /* [temp.arg.nontype]/5, bullet 4
6999 For a non-type template-parameter of type pointer to function, only
7000 the function-to-pointer conversion (_conv.func_) is applied. If the
7001 template-argument represents a set of overloaded functions (or a
7002 pointer to such), the matching function is selected from the set
7003 (_over.over_). */
7004 else if (TYPE_PTRFN_P (type))
7006 /* If the argument is a template-id, we might not have enough
7007 context information to decay the pointer. */
7008 if (!type_unknown_p (expr_type))
7010 expr = decay_conversion (expr, complain);
7011 if (expr == error_mark_node)
7012 return error_mark_node;
7015 if (cxx_dialect >= cxx11 && integer_zerop (expr))
7016 /* Null pointer values are OK in C++11. */
7017 return perform_qualification_conversions (type, expr);
7019 expr = convert_nontype_argument_function (type, expr, complain);
7020 if (!expr || expr == error_mark_node)
7021 return expr;
7023 /* [temp.arg.nontype]/5, bullet 5
7025 For a non-type template-parameter of type reference to function, no
7026 conversions apply. If the template-argument represents a set of
7027 overloaded functions, the matching function is selected from the set
7028 (_over.over_). */
7029 else if (TYPE_REFFN_P (type))
7031 if (TREE_CODE (expr) == ADDR_EXPR)
7033 if (complain & tf_error)
7035 error ("%qE is not a valid template argument for type %qT "
7036 "because it is a pointer", expr, type);
7037 inform (input_location, "try using %qE instead",
7038 TREE_OPERAND (expr, 0));
7040 return NULL_TREE;
7043 expr = convert_nontype_argument_function (type, expr, complain);
7044 if (!expr || expr == error_mark_node)
7045 return expr;
7047 /* [temp.arg.nontype]/5, bullet 6
7049 For a non-type template-parameter of type pointer to member function,
7050 no conversions apply. If the template-argument represents a set of
7051 overloaded member functions, the matching member function is selected
7052 from the set (_over.over_). */
7053 else if (TYPE_PTRMEMFUNC_P (type))
7055 expr = instantiate_type (type, expr, tf_none);
7056 if (expr == error_mark_node)
7057 return error_mark_node;
7059 /* [temp.arg.nontype] bullet 1 says the pointer to member
7060 expression must be a pointer-to-member constant. */
7061 if (!value_dependent_expression_p (expr)
7062 && !check_valid_ptrmem_cst_expr (type, expr, complain))
7063 return NULL_TREE;
7065 /* Repeated conversion can't deal with a conversion that turns PTRMEM_CST
7066 into a CONSTRUCTOR, so build up a new PTRMEM_CST instead. */
7067 if (fnptr_conv_p (type, TREE_TYPE (expr)))
7068 expr = make_ptrmem_cst (type, PTRMEM_CST_MEMBER (expr));
7070 /* [temp.arg.nontype]/5, bullet 7
7072 For a non-type template-parameter of type pointer to data member,
7073 qualification conversions (_conv.qual_) are applied. */
7074 else if (TYPE_PTRDATAMEM_P (type))
7076 /* [temp.arg.nontype] bullet 1 says the pointer to member
7077 expression must be a pointer-to-member constant. */
7078 if (!value_dependent_expression_p (expr)
7079 && !check_valid_ptrmem_cst_expr (type, expr, complain))
7080 return NULL_TREE;
7082 expr = perform_qualification_conversions (type, expr);
7083 if (expr == error_mark_node)
7084 return expr;
7086 else if (NULLPTR_TYPE_P (type))
7088 if (!NULLPTR_TYPE_P (TREE_TYPE (expr)))
7090 if (complain & tf_error)
7091 error ("%qE is not a valid template argument for type %qT "
7092 "because it is of type %qT", expr, type, TREE_TYPE (expr));
7093 return NULL_TREE;
7095 return expr;
7097 /* A template non-type parameter must be one of the above. */
7098 else
7099 gcc_unreachable ();
7101 /* Sanity check: did we actually convert the argument to the
7102 right type? */
7103 gcc_assert (same_type_ignoring_top_level_qualifiers_p
7104 (type, TREE_TYPE (expr)));
7105 return convert_from_reference (expr);
7108 /* Subroutine of coerce_template_template_parms, which returns 1 if
7109 PARM_PARM and ARG_PARM match using the rule for the template
7110 parameters of template template parameters. Both PARM and ARG are
7111 template parameters; the rest of the arguments are the same as for
7112 coerce_template_template_parms.
7114 static int
7115 coerce_template_template_parm (tree parm,
7116 tree arg,
7117 tsubst_flags_t complain,
7118 tree in_decl,
7119 tree outer_args)
7121 if (arg == NULL_TREE || error_operand_p (arg)
7122 || parm == NULL_TREE || error_operand_p (parm))
7123 return 0;
7125 if (TREE_CODE (arg) != TREE_CODE (parm))
7126 return 0;
7128 switch (TREE_CODE (parm))
7130 case TEMPLATE_DECL:
7131 /* We encounter instantiations of templates like
7132 template <template <template <class> class> class TT>
7133 class C; */
7135 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
7136 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
7138 if (!coerce_template_template_parms
7139 (parmparm, argparm, complain, in_decl, outer_args))
7140 return 0;
7142 /* Fall through. */
7144 case TYPE_DECL:
7145 if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
7146 && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
7147 /* Argument is a parameter pack but parameter is not. */
7148 return 0;
7149 break;
7151 case PARM_DECL:
7152 /* The tsubst call is used to handle cases such as
7154 template <int> class C {};
7155 template <class T, template <T> class TT> class D {};
7156 D<int, C> d;
7158 i.e. the parameter list of TT depends on earlier parameters. */
7159 if (!uses_template_parms (TREE_TYPE (arg)))
7161 tree t = tsubst (TREE_TYPE (parm), outer_args, complain, in_decl);
7162 if (!uses_template_parms (t)
7163 && !same_type_p (t, TREE_TYPE (arg)))
7164 return 0;
7167 if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
7168 && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
7169 /* Argument is a parameter pack but parameter is not. */
7170 return 0;
7172 break;
7174 default:
7175 gcc_unreachable ();
7178 return 1;
7181 /* Coerce template argument list ARGLIST for use with template
7182 template-parameter TEMPL. */
7184 static tree
7185 coerce_template_args_for_ttp (tree templ, tree arglist,
7186 tsubst_flags_t complain)
7188 /* Consider an example where a template template parameter declared as
7190 template <class T, class U = std::allocator<T> > class TT
7192 The template parameter level of T and U are one level larger than
7193 of TT. To proper process the default argument of U, say when an
7194 instantiation `TT<int>' is seen, we need to build the full
7195 arguments containing {int} as the innermost level. Outer levels,
7196 available when not appearing as default template argument, can be
7197 obtained from the arguments of the enclosing template.
7199 Suppose that TT is later substituted with std::vector. The above
7200 instantiation is `TT<int, std::allocator<T> >' with TT at
7201 level 1, and T at level 2, while the template arguments at level 1
7202 becomes {std::vector} and the inner level 2 is {int}. */
7204 tree outer = DECL_CONTEXT (templ);
7205 if (outer)
7207 if (DECL_TEMPLATE_SPECIALIZATION (outer))
7208 /* We want arguments for the partial specialization, not arguments for
7209 the primary template. */
7210 outer = template_parms_to_args (DECL_TEMPLATE_PARMS (outer));
7211 else
7212 outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
7214 else if (current_template_parms)
7216 /* This is an argument of the current template, so we haven't set
7217 DECL_CONTEXT yet. */
7218 tree relevant_template_parms;
7220 /* Parameter levels that are greater than the level of the given
7221 template template parm are irrelevant. */
7222 relevant_template_parms = current_template_parms;
7223 while (TMPL_PARMS_DEPTH (relevant_template_parms)
7224 != TEMPLATE_TYPE_LEVEL (TREE_TYPE (templ)))
7225 relevant_template_parms = TREE_CHAIN (relevant_template_parms);
7227 outer = template_parms_to_args (relevant_template_parms);
7230 if (outer)
7231 arglist = add_to_template_args (outer, arglist);
7233 tree parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
7234 return coerce_template_parms (parmlist, arglist, templ,
7235 complain,
7236 /*require_all_args=*/true,
7237 /*use_default_args=*/true);
7240 /* A cache of template template parameters with match-all default
7241 arguments. */
7242 static GTY((deletable)) hash_map<tree,tree> *defaulted_ttp_cache;
7243 static void
7244 store_defaulted_ttp (tree v, tree t)
7246 if (!defaulted_ttp_cache)
7247 defaulted_ttp_cache = hash_map<tree,tree>::create_ggc (13);
7248 defaulted_ttp_cache->put (v, t);
7250 static tree
7251 lookup_defaulted_ttp (tree v)
7253 if (defaulted_ttp_cache)
7254 if (tree *p = defaulted_ttp_cache->get (v))
7255 return *p;
7256 return NULL_TREE;
7259 /* T is a bound template template-parameter. Copy its arguments into default
7260 arguments of the template template-parameter's template parameters. */
7262 static tree
7263 add_defaults_to_ttp (tree otmpl)
7265 if (tree c = lookup_defaulted_ttp (otmpl))
7266 return c;
7268 tree ntmpl = copy_node (otmpl);
7270 tree ntype = copy_node (TREE_TYPE (otmpl));
7271 TYPE_STUB_DECL (ntype) = TYPE_NAME (ntype) = ntmpl;
7272 TYPE_MAIN_VARIANT (ntype) = ntype;
7273 TYPE_POINTER_TO (ntype) = TYPE_REFERENCE_TO (ntype) = NULL_TREE;
7274 TYPE_NAME (ntype) = ntmpl;
7275 SET_TYPE_STRUCTURAL_EQUALITY (ntype);
7277 tree idx = TEMPLATE_TYPE_PARM_INDEX (ntype)
7278 = copy_node (TEMPLATE_TYPE_PARM_INDEX (ntype));
7279 TEMPLATE_PARM_DECL (idx) = ntmpl;
7280 TREE_TYPE (ntmpl) = TREE_TYPE (idx) = ntype;
7282 tree oparms = DECL_TEMPLATE_PARMS (otmpl);
7283 tree parms = DECL_TEMPLATE_PARMS (ntmpl) = copy_node (oparms);
7284 TREE_CHAIN (parms) = TREE_CHAIN (oparms);
7285 tree vec = TREE_VALUE (parms) = copy_node (TREE_VALUE (parms));
7286 for (int i = 0; i < TREE_VEC_LENGTH (vec); ++i)
7288 tree o = TREE_VEC_ELT (vec, i);
7289 if (!template_parameter_pack_p (TREE_VALUE (o)))
7291 tree n = TREE_VEC_ELT (vec, i) = copy_node (o);
7292 TREE_PURPOSE (n) = any_targ_node;
7296 store_defaulted_ttp (otmpl, ntmpl);
7297 return ntmpl;
7300 /* ARG is a bound potential template template-argument, and PARGS is a list
7301 of arguments for the corresponding template template-parameter. Adjust
7302 PARGS as appropriate for application to ARG's template, and if ARG is a
7303 BOUND_TEMPLATE_TEMPLATE_PARM, possibly adjust it to add default template
7304 arguments to the template template parameter. */
7306 static tree
7307 coerce_ttp_args_for_tta (tree& arg, tree pargs, tsubst_flags_t complain)
7309 ++processing_template_decl;
7310 tree arg_tmpl = TYPE_TI_TEMPLATE (arg);
7311 if (DECL_TEMPLATE_TEMPLATE_PARM_P (arg_tmpl))
7313 /* When comparing two template template-parameters in partial ordering,
7314 rewrite the one currently being used as an argument to have default
7315 arguments for all parameters. */
7316 arg_tmpl = add_defaults_to_ttp (arg_tmpl);
7317 pargs = coerce_template_args_for_ttp (arg_tmpl, pargs, complain);
7318 if (pargs != error_mark_node)
7319 arg = bind_template_template_parm (TREE_TYPE (arg_tmpl),
7320 TYPE_TI_ARGS (arg));
7322 else
7324 tree aparms
7325 = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (arg_tmpl));
7326 pargs = coerce_template_parms (aparms, pargs, arg_tmpl, complain,
7327 /*require_all*/true,
7328 /*use_default*/true);
7330 --processing_template_decl;
7331 return pargs;
7334 /* Subroutine of unify for the case when PARM is a
7335 BOUND_TEMPLATE_TEMPLATE_PARM. */
7337 static int
7338 unify_bound_ttp_args (tree tparms, tree targs, tree parm, tree& arg,
7339 bool explain_p)
7341 tree parmvec = TYPE_TI_ARGS (parm);
7342 tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
7344 /* The template template parm might be variadic and the argument
7345 not, so flatten both argument lists. */
7346 parmvec = expand_template_argument_pack (parmvec);
7347 argvec = expand_template_argument_pack (argvec);
7349 if (flag_new_ttp)
7351 /* In keeping with P0522R0, adjust P's template arguments
7352 to apply to A's template; then flatten it again. */
7353 tree nparmvec = parmvec;
7354 nparmvec = coerce_ttp_args_for_tta (arg, parmvec, tf_none);
7355 nparmvec = expand_template_argument_pack (nparmvec);
7357 if (unify (tparms, targs, nparmvec, argvec,
7358 UNIFY_ALLOW_NONE, explain_p))
7359 return 1;
7361 /* If the P0522 adjustment eliminated a pack expansion, deduce
7362 empty packs. */
7363 if (flag_new_ttp
7364 && TREE_VEC_LENGTH (nparmvec) < TREE_VEC_LENGTH (parmvec)
7365 && unify_pack_expansion (tparms, targs, parmvec, argvec,
7366 DEDUCE_EXACT, /*sub*/true, explain_p))
7367 return 1;
7369 else
7371 /* Deduce arguments T, i from TT<T> or TT<i>.
7372 We check each element of PARMVEC and ARGVEC individually
7373 rather than the whole TREE_VEC since they can have
7374 different number of elements, which is allowed under N2555. */
7376 int len = TREE_VEC_LENGTH (parmvec);
7378 /* Check if the parameters end in a pack, making them
7379 variadic. */
7380 int parm_variadic_p = 0;
7381 if (len > 0
7382 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
7383 parm_variadic_p = 1;
7385 for (int i = 0; i < len - parm_variadic_p; ++i)
7386 /* If the template argument list of P contains a pack
7387 expansion that is not the last template argument, the
7388 entire template argument list is a non-deduced
7389 context. */
7390 if (PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, i)))
7391 return unify_success (explain_p);
7393 if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
7394 return unify_too_few_arguments (explain_p,
7395 TREE_VEC_LENGTH (argvec), len);
7397 for (int i = 0; i < len - parm_variadic_p; ++i)
7398 if (unify (tparms, targs,
7399 TREE_VEC_ELT (parmvec, i),
7400 TREE_VEC_ELT (argvec, i),
7401 UNIFY_ALLOW_NONE, explain_p))
7402 return 1;
7404 if (parm_variadic_p
7405 && unify_pack_expansion (tparms, targs,
7406 parmvec, argvec,
7407 DEDUCE_EXACT,
7408 /*subr=*/true, explain_p))
7409 return 1;
7412 return 0;
7415 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
7416 template template parameters. Both PARM_PARMS and ARG_PARMS are
7417 vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
7418 or PARM_DECL.
7420 Consider the example:
7421 template <class T> class A;
7422 template<template <class U> class TT> class B;
7424 For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
7425 the parameters to A, and OUTER_ARGS contains A. */
7427 static int
7428 coerce_template_template_parms (tree parm_parms,
7429 tree arg_parms,
7430 tsubst_flags_t complain,
7431 tree in_decl,
7432 tree outer_args)
7434 int nparms, nargs, i;
7435 tree parm, arg;
7436 int variadic_p = 0;
7438 gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
7439 gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
7441 nparms = TREE_VEC_LENGTH (parm_parms);
7442 nargs = TREE_VEC_LENGTH (arg_parms);
7444 if (flag_new_ttp)
7446 /* P0522R0: A template template-parameter P is at least as specialized as
7447 a template template-argument A if, given the following rewrite to two
7448 function templates, the function template corresponding to P is at
7449 least as specialized as the function template corresponding to A
7450 according to the partial ordering rules for function templates
7451 ([temp.func.order]). Given an invented class template X with the
7452 template parameter list of A (including default arguments):
7454 * Each of the two function templates has the same template parameters,
7455 respectively, as P or A.
7457 * Each function template has a single function parameter whose type is
7458 a specialization of X with template arguments corresponding to the
7459 template parameters from the respective function template where, for
7460 each template parameter PP in the template parameter list of the
7461 function template, a corresponding template argument AA is formed. If
7462 PP declares a parameter pack, then AA is the pack expansion
7463 PP... ([temp.variadic]); otherwise, AA is the id-expression PP.
7465 If the rewrite produces an invalid type, then P is not at least as
7466 specialized as A. */
7468 /* So coerce P's args to apply to A's parms, and then deduce between A's
7469 args and the converted args. If that succeeds, A is at least as
7470 specialized as P, so they match.*/
7471 tree pargs = template_parms_level_to_args (parm_parms);
7472 ++processing_template_decl;
7473 pargs = coerce_template_parms (arg_parms, pargs, NULL_TREE, tf_none,
7474 /*require_all*/true, /*use_default*/true);
7475 --processing_template_decl;
7476 if (pargs != error_mark_node)
7478 tree targs = make_tree_vec (nargs);
7479 tree aargs = template_parms_level_to_args (arg_parms);
7480 if (!unify (arg_parms, targs, aargs, pargs, UNIFY_ALLOW_NONE,
7481 /*explain*/false))
7482 return 1;
7486 /* Determine whether we have a parameter pack at the end of the
7487 template template parameter's template parameter list. */
7488 if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
7490 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
7492 if (error_operand_p (parm))
7493 return 0;
7495 switch (TREE_CODE (parm))
7497 case TEMPLATE_DECL:
7498 case TYPE_DECL:
7499 if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
7500 variadic_p = 1;
7501 break;
7503 case PARM_DECL:
7504 if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
7505 variadic_p = 1;
7506 break;
7508 default:
7509 gcc_unreachable ();
7513 if (nargs != nparms
7514 && !(variadic_p && nargs >= nparms - 1))
7515 return 0;
7517 /* Check all of the template parameters except the parameter pack at
7518 the end (if any). */
7519 for (i = 0; i < nparms - variadic_p; ++i)
7521 if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
7522 || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
7523 continue;
7525 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
7526 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
7528 if (!coerce_template_template_parm (parm, arg, complain, in_decl,
7529 outer_args))
7530 return 0;
7534 if (variadic_p)
7536 /* Check each of the template parameters in the template
7537 argument against the template parameter pack at the end of
7538 the template template parameter. */
7539 if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
7540 return 0;
7542 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
7544 for (; i < nargs; ++i)
7546 if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
7547 continue;
7549 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
7551 if (!coerce_template_template_parm (parm, arg, complain, in_decl,
7552 outer_args))
7553 return 0;
7557 return 1;
7560 /* Verifies that the deduced template arguments (in TARGS) for the
7561 template template parameters (in TPARMS) represent valid bindings,
7562 by comparing the template parameter list of each template argument
7563 to the template parameter list of its corresponding template
7564 template parameter, in accordance with DR150. This
7565 routine can only be called after all template arguments have been
7566 deduced. It will return TRUE if all of the template template
7567 parameter bindings are okay, FALSE otherwise. */
7568 bool
7569 template_template_parm_bindings_ok_p (tree tparms, tree targs)
7571 int i, ntparms = TREE_VEC_LENGTH (tparms);
7572 bool ret = true;
7574 /* We're dealing with template parms in this process. */
7575 ++processing_template_decl;
7577 targs = INNERMOST_TEMPLATE_ARGS (targs);
7579 for (i = 0; i < ntparms; ++i)
7581 tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
7582 tree targ = TREE_VEC_ELT (targs, i);
7584 if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
7586 tree packed_args = NULL_TREE;
7587 int idx, len = 1;
7589 if (ARGUMENT_PACK_P (targ))
7591 /* Look inside the argument pack. */
7592 packed_args = ARGUMENT_PACK_ARGS (targ);
7593 len = TREE_VEC_LENGTH (packed_args);
7596 for (idx = 0; idx < len; ++idx)
7598 tree targ_parms = NULL_TREE;
7600 if (packed_args)
7601 /* Extract the next argument from the argument
7602 pack. */
7603 targ = TREE_VEC_ELT (packed_args, idx);
7605 if (PACK_EXPANSION_P (targ))
7606 /* Look at the pattern of the pack expansion. */
7607 targ = PACK_EXPANSION_PATTERN (targ);
7609 /* Extract the template parameters from the template
7610 argument. */
7611 if (TREE_CODE (targ) == TEMPLATE_DECL)
7612 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
7613 else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
7614 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
7616 /* Verify that we can coerce the template template
7617 parameters from the template argument to the template
7618 parameter. This requires an exact match. */
7619 if (targ_parms
7620 && !coerce_template_template_parms
7621 (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
7622 targ_parms,
7623 tf_none,
7624 tparm,
7625 targs))
7627 ret = false;
7628 goto out;
7634 out:
7636 --processing_template_decl;
7637 return ret;
7640 /* Since type attributes aren't mangled, we need to strip them from
7641 template type arguments. */
7643 static tree
7644 canonicalize_type_argument (tree arg, tsubst_flags_t complain)
7646 if (!arg || arg == error_mark_node || arg == TYPE_CANONICAL (arg))
7647 return arg;
7648 bool removed_attributes = false;
7649 tree canon = strip_typedefs (arg, &removed_attributes);
7650 if (removed_attributes
7651 && (complain & tf_warning))
7652 warning (OPT_Wignored_attributes,
7653 "ignoring attributes on template argument %qT", arg);
7654 return canon;
7657 /* And from inside dependent non-type arguments like sizeof(Type). */
7659 static tree
7660 canonicalize_expr_argument (tree arg, tsubst_flags_t complain)
7662 if (!arg || arg == error_mark_node)
7663 return arg;
7664 bool removed_attributes = false;
7665 tree canon = strip_typedefs_expr (arg, &removed_attributes);
7666 if (removed_attributes
7667 && (complain & tf_warning))
7668 warning (OPT_Wignored_attributes,
7669 "ignoring attributes in template argument %qE", arg);
7670 return canon;
7673 // A template declaration can be substituted for a constrained
7674 // template template parameter only when the argument is more
7675 // constrained than the parameter.
7676 static bool
7677 is_compatible_template_arg (tree parm, tree arg)
7679 tree parm_cons = get_constraints (parm);
7681 /* For now, allow constrained template template arguments
7682 and unconstrained template template parameters. */
7683 if (parm_cons == NULL_TREE)
7684 return true;
7686 tree arg_cons = get_constraints (arg);
7688 // If the template parameter is constrained, we need to rewrite its
7689 // constraints in terms of the ARG's template parameters. This ensures
7690 // that all of the template parameter types will have the same depth.
7692 // Note that this is only valid when coerce_template_template_parm is
7693 // true for the innermost template parameters of PARM and ARG. In other
7694 // words, because coercion is successful, this conversion will be valid.
7695 if (parm_cons)
7697 tree args = template_parms_to_args (DECL_TEMPLATE_PARMS (arg));
7698 parm_cons = tsubst_constraint_info (parm_cons,
7699 INNERMOST_TEMPLATE_ARGS (args),
7700 tf_none, NULL_TREE);
7701 if (parm_cons == error_mark_node)
7702 return false;
7705 return subsumes (parm_cons, arg_cons);
7708 // Convert a placeholder argument into a binding to the original
7709 // parameter. The original parameter is saved as the TREE_TYPE of
7710 // ARG.
7711 static inline tree
7712 convert_wildcard_argument (tree parm, tree arg)
7714 TREE_TYPE (arg) = parm;
7715 return arg;
7718 /* We can't fully resolve ARG given as a non-type template argument to TYPE,
7719 because one of them is dependent. But we need to represent the
7720 conversion for the benefit of cp_tree_equal. */
7722 static tree
7723 maybe_convert_nontype_argument (tree type, tree arg)
7725 /* Auto parms get no conversion. */
7726 if (type_uses_auto (type))
7727 return arg;
7728 /* We don't need or want to add this conversion now if we're going to use the
7729 argument for deduction. */
7730 if (value_dependent_expression_p (arg))
7731 return arg;
7733 type = cv_unqualified (type);
7734 tree argtype = TREE_TYPE (arg);
7735 if (same_type_p (type, argtype))
7736 return arg;
7738 arg = build1 (IMPLICIT_CONV_EXPR, type, arg);
7739 IMPLICIT_CONV_EXPR_NONTYPE_ARG (arg) = true;
7740 return arg;
7743 /* Convert the indicated template ARG as necessary to match the
7744 indicated template PARM. Returns the converted ARG, or
7745 error_mark_node if the conversion was unsuccessful. Error and
7746 warning messages are issued under control of COMPLAIN. This
7747 conversion is for the Ith parameter in the parameter list. ARGS is
7748 the full set of template arguments deduced so far. */
7750 static tree
7751 convert_template_argument (tree parm,
7752 tree arg,
7753 tree args,
7754 tsubst_flags_t complain,
7755 int i,
7756 tree in_decl)
7758 tree orig_arg;
7759 tree val;
7760 int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
7762 if (parm == error_mark_node)
7763 return error_mark_node;
7765 /* Trivially convert placeholders. */
7766 if (TREE_CODE (arg) == WILDCARD_DECL)
7767 return convert_wildcard_argument (parm, arg);
7769 if (arg == any_targ_node)
7770 return arg;
7772 if (TREE_CODE (arg) == TREE_LIST
7773 && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
7775 /* The template argument was the name of some
7776 member function. That's usually
7777 invalid, but static members are OK. In any
7778 case, grab the underlying fields/functions
7779 and issue an error later if required. */
7780 orig_arg = TREE_VALUE (arg);
7781 TREE_TYPE (arg) = unknown_type_node;
7784 orig_arg = arg;
7786 requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
7787 requires_type = (TREE_CODE (parm) == TYPE_DECL
7788 || requires_tmpl_type);
7790 /* When determining whether an argument pack expansion is a template,
7791 look at the pattern. */
7792 if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
7793 arg = PACK_EXPANSION_PATTERN (arg);
7795 /* Deal with an injected-class-name used as a template template arg. */
7796 if (requires_tmpl_type && CLASS_TYPE_P (arg))
7798 tree t = maybe_get_template_decl_from_type_decl (TYPE_NAME (arg));
7799 if (TREE_CODE (t) == TEMPLATE_DECL)
7801 if (cxx_dialect >= cxx11)
7802 /* OK under DR 1004. */;
7803 else if (complain & tf_warning_or_error)
7804 pedwarn (input_location, OPT_Wpedantic, "injected-class-name %qD"
7805 " used as template template argument", TYPE_NAME (arg));
7806 else if (flag_pedantic_errors)
7807 t = arg;
7809 arg = t;
7813 is_tmpl_type =
7814 ((TREE_CODE (arg) == TEMPLATE_DECL
7815 && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
7816 || (requires_tmpl_type && TREE_CODE (arg) == TYPE_ARGUMENT_PACK)
7817 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
7818 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
7820 if (is_tmpl_type
7821 && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
7822 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
7823 arg = TYPE_STUB_DECL (arg);
7825 is_type = TYPE_P (arg) || is_tmpl_type;
7827 if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
7828 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
7830 if (TREE_CODE (TREE_OPERAND (arg, 1)) == BIT_NOT_EXPR)
7832 if (complain & tf_error)
7833 error ("invalid use of destructor %qE as a type", orig_arg);
7834 return error_mark_node;
7837 permerror (input_location,
7838 "to refer to a type member of a template parameter, "
7839 "use %<typename %E%>", orig_arg);
7841 orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
7842 TREE_OPERAND (arg, 1),
7843 typename_type,
7844 complain);
7845 arg = orig_arg;
7846 is_type = 1;
7848 if (is_type != requires_type)
7850 if (in_decl)
7852 if (complain & tf_error)
7854 error ("type/value mismatch at argument %d in template "
7855 "parameter list for %qD",
7856 i + 1, in_decl);
7857 if (is_type)
7858 inform (input_location,
7859 " expected a constant of type %qT, got %qT",
7860 TREE_TYPE (parm),
7861 (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
7862 else if (requires_tmpl_type)
7863 inform (input_location,
7864 " expected a class template, got %qE", orig_arg);
7865 else
7866 inform (input_location,
7867 " expected a type, got %qE", orig_arg);
7870 return error_mark_node;
7872 if (is_tmpl_type ^ requires_tmpl_type)
7874 if (in_decl && (complain & tf_error))
7876 error ("type/value mismatch at argument %d in template "
7877 "parameter list for %qD",
7878 i + 1, in_decl);
7879 if (is_tmpl_type)
7880 inform (input_location,
7881 " expected a type, got %qT", DECL_NAME (arg));
7882 else
7883 inform (input_location,
7884 " expected a class template, got %qT", orig_arg);
7886 return error_mark_node;
7889 if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
7890 /* We already did the appropriate conversion when packing args. */
7891 val = orig_arg;
7892 else if (is_type)
7894 if (requires_tmpl_type)
7896 if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
7897 /* The number of argument required is not known yet.
7898 Just accept it for now. */
7899 val = orig_arg;
7900 else
7902 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
7903 tree argparm;
7905 /* Strip alias templates that are equivalent to another
7906 template. */
7907 arg = get_underlying_template (arg);
7908 argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
7910 if (coerce_template_template_parms (parmparm, argparm,
7911 complain, in_decl,
7912 args))
7914 val = arg;
7916 /* TEMPLATE_TEMPLATE_PARM node is preferred over
7917 TEMPLATE_DECL. */
7918 if (val != error_mark_node)
7920 if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
7921 val = TREE_TYPE (val);
7922 if (TREE_CODE (orig_arg) == TYPE_PACK_EXPANSION)
7923 val = make_pack_expansion (val, complain);
7926 else
7928 if (in_decl && (complain & tf_error))
7930 error ("type/value mismatch at argument %d in "
7931 "template parameter list for %qD",
7932 i + 1, in_decl);
7933 inform (input_location,
7934 " expected a template of type %qD, got %qT",
7935 parm, orig_arg);
7938 val = error_mark_node;
7941 // Check that the constraints are compatible before allowing the
7942 // substitution.
7943 if (val != error_mark_node)
7944 if (!is_compatible_template_arg (parm, arg))
7946 if (in_decl && (complain & tf_error))
7948 error ("constraint mismatch at argument %d in "
7949 "template parameter list for %qD",
7950 i + 1, in_decl);
7951 inform (input_location, " expected %qD but got %qD",
7952 parm, arg);
7954 val = error_mark_node;
7958 else
7959 val = orig_arg;
7960 /* We only form one instance of each template specialization.
7961 Therefore, if we use a non-canonical variant (i.e., a
7962 typedef), any future messages referring to the type will use
7963 the typedef, which is confusing if those future uses do not
7964 themselves also use the typedef. */
7965 if (TYPE_P (val))
7966 val = canonicalize_type_argument (val, complain);
7968 else
7970 tree t = TREE_TYPE (parm);
7972 if (TEMPLATE_PARM_LEVEL (get_template_parm_index (parm))
7973 > TMPL_ARGS_DEPTH (args))
7974 /* We don't have enough levels of args to do any substitution. This
7975 can happen in the context of -fnew-ttp-matching. */;
7976 else if (tree a = type_uses_auto (t))
7978 t = do_auto_deduction (t, arg, a, complain, adc_unify, args);
7979 if (t == error_mark_node)
7980 return error_mark_node;
7982 else
7983 t = tsubst (t, args, complain, in_decl);
7985 if (invalid_nontype_parm_type_p (t, complain))
7986 return error_mark_node;
7988 if (!type_dependent_expression_p (orig_arg)
7989 && !uses_template_parms (t))
7990 /* We used to call digest_init here. However, digest_init
7991 will report errors, which we don't want when complain
7992 is zero. More importantly, digest_init will try too
7993 hard to convert things: for example, `0' should not be
7994 converted to pointer type at this point according to
7995 the standard. Accepting this is not merely an
7996 extension, since deciding whether or not these
7997 conversions can occur is part of determining which
7998 function template to call, or whether a given explicit
7999 argument specification is valid. */
8000 val = convert_nontype_argument (t, orig_arg, complain);
8001 else
8003 val = canonicalize_expr_argument (orig_arg, complain);
8004 val = maybe_convert_nontype_argument (t, val);
8008 if (val == NULL_TREE)
8009 val = error_mark_node;
8010 else if (val == error_mark_node && (complain & tf_error))
8011 error ("could not convert template argument %qE from %qT to %qT",
8012 orig_arg, TREE_TYPE (orig_arg), t);
8014 if (INDIRECT_REF_P (val))
8016 /* Reject template arguments that are references to built-in
8017 functions with no library fallbacks. */
8018 const_tree inner = TREE_OPERAND (val, 0);
8019 const_tree innertype = TREE_TYPE (inner);
8020 if (innertype
8021 && TREE_CODE (innertype) == REFERENCE_TYPE
8022 && TREE_CODE (TREE_TYPE (innertype)) == FUNCTION_TYPE
8023 && TREE_OPERAND_LENGTH (inner) > 0
8024 && reject_gcc_builtin (TREE_OPERAND (inner, 0)))
8025 return error_mark_node;
8028 if (TREE_CODE (val) == SCOPE_REF)
8030 /* Strip typedefs from the SCOPE_REF. */
8031 tree type = canonicalize_type_argument (TREE_TYPE (val), complain);
8032 tree scope = canonicalize_type_argument (TREE_OPERAND (val, 0),
8033 complain);
8034 val = build_qualified_name (type, scope, TREE_OPERAND (val, 1),
8035 QUALIFIED_NAME_IS_TEMPLATE (val));
8039 return val;
8042 /* Coerces the remaining template arguments in INNER_ARGS (from
8043 ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
8044 Returns the coerced argument pack. PARM_IDX is the position of this
8045 parameter in the template parameter list. ARGS is the original
8046 template argument list. */
8047 static tree
8048 coerce_template_parameter_pack (tree parms,
8049 int parm_idx,
8050 tree args,
8051 tree inner_args,
8052 int arg_idx,
8053 tree new_args,
8054 int* lost,
8055 tree in_decl,
8056 tsubst_flags_t complain)
8058 tree parm = TREE_VEC_ELT (parms, parm_idx);
8059 int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
8060 tree packed_args;
8061 tree argument_pack;
8062 tree packed_parms = NULL_TREE;
8064 if (arg_idx > nargs)
8065 arg_idx = nargs;
8067 if (tree packs = fixed_parameter_pack_p (TREE_VALUE (parm)))
8069 /* When the template parameter is a non-type template parameter pack
8070 or template template parameter pack whose type or template
8071 parameters use parameter packs, we know exactly how many arguments
8072 we are looking for. Build a vector of the instantiated decls for
8073 these template parameters in PACKED_PARMS. */
8074 /* We can't use make_pack_expansion here because it would interpret a
8075 _DECL as a use rather than a declaration. */
8076 tree decl = TREE_VALUE (parm);
8077 tree exp = cxx_make_type (TYPE_PACK_EXPANSION);
8078 SET_PACK_EXPANSION_PATTERN (exp, decl);
8079 PACK_EXPANSION_PARAMETER_PACKS (exp) = packs;
8080 SET_TYPE_STRUCTURAL_EQUALITY (exp);
8082 TREE_VEC_LENGTH (args)--;
8083 packed_parms = tsubst_pack_expansion (exp, args, complain, decl);
8084 TREE_VEC_LENGTH (args)++;
8086 if (packed_parms == error_mark_node)
8087 return error_mark_node;
8089 /* If we're doing a partial instantiation of a member template,
8090 verify that all of the types used for the non-type
8091 template parameter pack are, in fact, valid for non-type
8092 template parameters. */
8093 if (arg_idx < nargs
8094 && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
8096 int j, len = TREE_VEC_LENGTH (packed_parms);
8097 for (j = 0; j < len; ++j)
8099 tree t = TREE_TYPE (TREE_VEC_ELT (packed_parms, j));
8100 if (invalid_nontype_parm_type_p (t, complain))
8101 return error_mark_node;
8103 /* We don't know how many args we have yet, just
8104 use the unconverted ones for now. */
8105 return NULL_TREE;
8108 packed_args = make_tree_vec (TREE_VEC_LENGTH (packed_parms));
8110 /* Check if we have a placeholder pack, which indicates we're
8111 in the context of a introduction list. In that case we want
8112 to match this pack to the single placeholder. */
8113 else if (arg_idx < nargs
8114 && TREE_CODE (TREE_VEC_ELT (inner_args, arg_idx)) == WILDCARD_DECL
8115 && WILDCARD_PACK_P (TREE_VEC_ELT (inner_args, arg_idx)))
8117 nargs = arg_idx + 1;
8118 packed_args = make_tree_vec (1);
8120 else
8121 packed_args = make_tree_vec (nargs - arg_idx);
8123 /* Convert the remaining arguments, which will be a part of the
8124 parameter pack "parm". */
8125 int first_pack_arg = arg_idx;
8126 for (; arg_idx < nargs; ++arg_idx)
8128 tree arg = TREE_VEC_ELT (inner_args, arg_idx);
8129 tree actual_parm = TREE_VALUE (parm);
8130 int pack_idx = arg_idx - first_pack_arg;
8132 if (packed_parms)
8134 /* Once we've packed as many args as we have types, stop. */
8135 if (pack_idx >= TREE_VEC_LENGTH (packed_parms))
8136 break;
8137 else if (PACK_EXPANSION_P (arg))
8138 /* We don't know how many args we have yet, just
8139 use the unconverted ones for now. */
8140 return NULL_TREE;
8141 else
8142 actual_parm = TREE_VEC_ELT (packed_parms, pack_idx);
8145 if (arg == error_mark_node)
8147 if (complain & tf_error)
8148 error ("template argument %d is invalid", arg_idx + 1);
8150 else
8151 arg = convert_template_argument (actual_parm,
8152 arg, new_args, complain, parm_idx,
8153 in_decl);
8154 if (arg == error_mark_node)
8155 (*lost)++;
8156 TREE_VEC_ELT (packed_args, pack_idx) = arg;
8159 if (arg_idx - first_pack_arg < TREE_VEC_LENGTH (packed_args)
8160 && TREE_VEC_LENGTH (packed_args) > 0)
8162 if (complain & tf_error)
8163 error ("wrong number of template arguments (%d, should be %d)",
8164 arg_idx - first_pack_arg, TREE_VEC_LENGTH (packed_args));
8165 return error_mark_node;
8168 if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
8169 || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
8170 argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
8171 else
8173 argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
8174 TREE_CONSTANT (argument_pack) = 1;
8177 SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
8178 if (CHECKING_P)
8179 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
8180 TREE_VEC_LENGTH (packed_args));
8181 return argument_pack;
8184 /* Returns the number of pack expansions in the template argument vector
8185 ARGS. */
8187 static int
8188 pack_expansion_args_count (tree args)
8190 int i;
8191 int count = 0;
8192 if (args)
8193 for (i = 0; i < TREE_VEC_LENGTH (args); ++i)
8195 tree elt = TREE_VEC_ELT (args, i);
8196 if (elt && PACK_EXPANSION_P (elt))
8197 ++count;
8199 return count;
8202 /* Convert all template arguments to their appropriate types, and
8203 return a vector containing the innermost resulting template
8204 arguments. If any error occurs, return error_mark_node. Error and
8205 warning messages are issued under control of COMPLAIN.
8207 If REQUIRE_ALL_ARGS is false, argument deduction will be performed
8208 for arguments not specified in ARGS. Otherwise, if
8209 USE_DEFAULT_ARGS is true, default arguments will be used to fill in
8210 unspecified arguments. If REQUIRE_ALL_ARGS is true, but
8211 USE_DEFAULT_ARGS is false, then all arguments must be specified in
8212 ARGS. */
8214 static tree
8215 coerce_template_parms (tree parms,
8216 tree args,
8217 tree in_decl,
8218 tsubst_flags_t complain,
8219 bool require_all_args,
8220 bool use_default_args)
8222 int nparms, nargs, parm_idx, arg_idx, lost = 0;
8223 tree orig_inner_args;
8224 tree inner_args;
8225 tree new_args;
8226 tree new_inner_args;
8227 int saved_unevaluated_operand;
8228 int saved_inhibit_evaluation_warnings;
8230 /* When used as a boolean value, indicates whether this is a
8231 variadic template parameter list. Since it's an int, we can also
8232 subtract it from nparms to get the number of non-variadic
8233 parameters. */
8234 int variadic_p = 0;
8235 int variadic_args_p = 0;
8236 int post_variadic_parms = 0;
8238 /* Adjustment to nparms for fixed parameter packs. */
8239 int fixed_pack_adjust = 0;
8240 int fixed_packs = 0;
8241 int missing = 0;
8243 /* Likewise for parameters with default arguments. */
8244 int default_p = 0;
8246 if (args == error_mark_node)
8247 return error_mark_node;
8249 nparms = TREE_VEC_LENGTH (parms);
8251 /* Determine if there are any parameter packs or default arguments. */
8252 for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
8254 tree parm = TREE_VEC_ELT (parms, parm_idx);
8255 if (variadic_p)
8256 ++post_variadic_parms;
8257 if (template_parameter_pack_p (TREE_VALUE (parm)))
8258 ++variadic_p;
8259 if (TREE_PURPOSE (parm))
8260 ++default_p;
8263 inner_args = orig_inner_args = INNERMOST_TEMPLATE_ARGS (args);
8264 /* If there are no parameters that follow a parameter pack, we need to
8265 expand any argument packs so that we can deduce a parameter pack from
8266 some non-packed args followed by an argument pack, as in variadic85.C.
8267 If there are such parameters, we need to leave argument packs intact
8268 so the arguments are assigned properly. This can happen when dealing
8269 with a nested class inside a partial specialization of a class
8270 template, as in variadic92.C, or when deducing a template parameter pack
8271 from a sub-declarator, as in variadic114.C. */
8272 if (!post_variadic_parms)
8273 inner_args = expand_template_argument_pack (inner_args);
8275 /* Count any pack expansion args. */
8276 variadic_args_p = pack_expansion_args_count (inner_args);
8278 nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
8279 if ((nargs - variadic_args_p > nparms && !variadic_p)
8280 || (nargs < nparms - variadic_p
8281 && require_all_args
8282 && !variadic_args_p
8283 && (!use_default_args
8284 || (TREE_VEC_ELT (parms, nargs) != error_mark_node
8285 && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
8287 bad_nargs:
8288 if (complain & tf_error)
8290 if (variadic_p || default_p)
8292 nparms -= variadic_p + default_p;
8293 error ("wrong number of template arguments "
8294 "(%d, should be at least %d)", nargs, nparms);
8296 else
8297 error ("wrong number of template arguments "
8298 "(%d, should be %d)", nargs, nparms);
8300 if (in_decl)
8301 inform (DECL_SOURCE_LOCATION (in_decl),
8302 "provided for %qD", in_decl);
8305 return error_mark_node;
8307 /* We can't pass a pack expansion to a non-pack parameter of an alias
8308 template (DR 1430). */
8309 else if (in_decl
8310 && (DECL_ALIAS_TEMPLATE_P (in_decl)
8311 || concept_template_p (in_decl))
8312 && variadic_args_p
8313 && nargs - variadic_args_p < nparms - variadic_p)
8315 if (complain & tf_error)
8317 for (int i = 0; i < TREE_VEC_LENGTH (inner_args); ++i)
8319 tree arg = TREE_VEC_ELT (inner_args, i);
8320 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
8322 if (PACK_EXPANSION_P (arg)
8323 && !template_parameter_pack_p (parm))
8325 if (DECL_ALIAS_TEMPLATE_P (in_decl))
8326 error_at (location_of (arg),
8327 "pack expansion argument for non-pack parameter "
8328 "%qD of alias template %qD", parm, in_decl);
8329 else
8330 error_at (location_of (arg),
8331 "pack expansion argument for non-pack parameter "
8332 "%qD of concept %qD", parm, in_decl);
8333 inform (DECL_SOURCE_LOCATION (parm), "declared here");
8334 goto found;
8337 gcc_unreachable ();
8338 found:;
8340 return error_mark_node;
8343 /* We need to evaluate the template arguments, even though this
8344 template-id may be nested within a "sizeof". */
8345 saved_unevaluated_operand = cp_unevaluated_operand;
8346 cp_unevaluated_operand = 0;
8347 saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
8348 c_inhibit_evaluation_warnings = 0;
8349 new_inner_args = make_tree_vec (nparms);
8350 new_args = add_outermost_template_args (args, new_inner_args);
8351 int pack_adjust = 0;
8352 for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
8354 tree arg;
8355 tree parm;
8357 /* Get the Ith template parameter. */
8358 parm = TREE_VEC_ELT (parms, parm_idx);
8360 if (parm == error_mark_node)
8362 TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
8363 continue;
8366 /* Calculate the next argument. */
8367 if (arg_idx < nargs)
8368 arg = TREE_VEC_ELT (inner_args, arg_idx);
8369 else
8370 arg = NULL_TREE;
8372 if (template_parameter_pack_p (TREE_VALUE (parm))
8373 && !(arg && ARGUMENT_PACK_P (arg)))
8375 /* Some arguments will be placed in the
8376 template parameter pack PARM. */
8377 arg = coerce_template_parameter_pack (parms, parm_idx, args,
8378 inner_args, arg_idx,
8379 new_args, &lost,
8380 in_decl, complain);
8382 if (arg == NULL_TREE)
8384 /* We don't know how many args we have yet, just use the
8385 unconverted (and still packed) ones for now. */
8386 new_inner_args = orig_inner_args;
8387 arg_idx = nargs;
8388 break;
8391 TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
8393 /* Store this argument. */
8394 if (arg == error_mark_node)
8396 lost++;
8397 /* We are done with all of the arguments. */
8398 arg_idx = nargs;
8399 break;
8401 else
8403 pack_adjust = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg)) - 1;
8404 arg_idx += pack_adjust;
8405 if (fixed_parameter_pack_p (TREE_VALUE (parm)))
8407 ++fixed_packs;
8408 fixed_pack_adjust += pack_adjust;
8412 continue;
8414 else if (arg)
8416 if (PACK_EXPANSION_P (arg))
8418 /* "If every valid specialization of a variadic template
8419 requires an empty template parameter pack, the template is
8420 ill-formed, no diagnostic required." So check that the
8421 pattern works with this parameter. */
8422 tree pattern = PACK_EXPANSION_PATTERN (arg);
8423 tree conv = convert_template_argument (TREE_VALUE (parm),
8424 pattern, new_args,
8425 complain, parm_idx,
8426 in_decl);
8427 if (conv == error_mark_node)
8429 if (complain & tf_error)
8430 inform (input_location, "so any instantiation with a "
8431 "non-empty parameter pack would be ill-formed");
8432 ++lost;
8434 else if (TYPE_P (conv) && !TYPE_P (pattern))
8435 /* Recover from missing typename. */
8436 TREE_VEC_ELT (inner_args, arg_idx)
8437 = make_pack_expansion (conv, complain);
8439 /* We don't know how many args we have yet, just
8440 use the unconverted ones for now. */
8441 new_inner_args = inner_args;
8442 arg_idx = nargs;
8443 break;
8446 else if (require_all_args)
8448 /* There must be a default arg in this case. */
8449 arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
8450 complain, in_decl);
8451 /* The position of the first default template argument,
8452 is also the number of non-defaulted arguments in NEW_INNER_ARGS.
8453 Record that. */
8454 if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
8455 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
8456 arg_idx - pack_adjust);
8458 else
8459 break;
8461 if (arg == error_mark_node)
8463 if (complain & tf_error)
8464 error ("template argument %d is invalid", arg_idx + 1);
8466 else if (!arg)
8468 /* This can occur if there was an error in the template
8469 parameter list itself (which we would already have
8470 reported) that we are trying to recover from, e.g., a class
8471 template with a parameter list such as
8472 template<typename..., typename> (cpp0x/variadic150.C). */
8473 ++lost;
8475 /* This can also happen with a fixed parameter pack (71834). */
8476 if (arg_idx >= nargs)
8477 ++missing;
8479 else
8480 arg = convert_template_argument (TREE_VALUE (parm),
8481 arg, new_args, complain,
8482 parm_idx, in_decl);
8484 if (arg == error_mark_node)
8485 lost++;
8486 TREE_VEC_ELT (new_inner_args, arg_idx - pack_adjust) = arg;
8488 cp_unevaluated_operand = saved_unevaluated_operand;
8489 c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
8491 if (missing || arg_idx < nargs - variadic_args_p)
8493 /* If we had fixed parameter packs, we didn't know how many arguments we
8494 actually needed earlier; now we do. */
8495 nparms += fixed_pack_adjust;
8496 variadic_p -= fixed_packs;
8497 goto bad_nargs;
8500 if (arg_idx < nargs)
8502 /* We had some pack expansion arguments that will only work if the packs
8503 are empty, but wait until instantiation time to complain.
8504 See variadic-ttp3.C. */
8505 int len = nparms + (nargs - arg_idx);
8506 tree args = make_tree_vec (len);
8507 int i = 0;
8508 for (; i < nparms; ++i)
8509 TREE_VEC_ELT (args, i) = TREE_VEC_ELT (new_inner_args, i);
8510 for (; i < len; ++i, ++arg_idx)
8511 TREE_VEC_ELT (args, i) = TREE_VEC_ELT (inner_args,
8512 arg_idx - pack_adjust);
8513 new_inner_args = args;
8516 if (lost)
8518 gcc_assert (!(complain & tf_error) || seen_error ());
8519 return error_mark_node;
8522 if (CHECKING_P && !NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
8523 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
8524 TREE_VEC_LENGTH (new_inner_args));
8526 return new_inner_args;
8529 /* Convert all template arguments to their appropriate types, and
8530 return a vector containing the innermost resulting template
8531 arguments. If any error occurs, return error_mark_node. Error and
8532 warning messages are not issued.
8534 Note that no function argument deduction is performed, and default
8535 arguments are used to fill in unspecified arguments. */
8536 tree
8537 coerce_template_parms (tree parms, tree args, tree in_decl)
8539 return coerce_template_parms (parms, args, in_decl, tf_none, true, true);
8542 /* Convert all template arguments to their appropriate type, and
8543 instantiate default arguments as needed. This returns a vector
8544 containing the innermost resulting template arguments, or
8545 error_mark_node if unsuccessful. */
8546 tree
8547 coerce_template_parms (tree parms, tree args, tree in_decl,
8548 tsubst_flags_t complain)
8550 return coerce_template_parms (parms, args, in_decl, complain, true, true);
8553 /* Like coerce_template_parms. If PARMS represents all template
8554 parameters levels, this function returns a vector of vectors
8555 representing all the resulting argument levels. Note that in this
8556 case, only the innermost arguments are coerced because the
8557 outermost ones are supposed to have been coerced already.
8559 Otherwise, if PARMS represents only (the innermost) vector of
8560 parameters, this function returns a vector containing just the
8561 innermost resulting arguments. */
8563 static tree
8564 coerce_innermost_template_parms (tree parms,
8565 tree args,
8566 tree in_decl,
8567 tsubst_flags_t complain,
8568 bool require_all_args,
8569 bool use_default_args)
8571 int parms_depth = TMPL_PARMS_DEPTH (parms);
8572 int args_depth = TMPL_ARGS_DEPTH (args);
8573 tree coerced_args;
8575 if (parms_depth > 1)
8577 coerced_args = make_tree_vec (parms_depth);
8578 tree level;
8579 int cur_depth;
8581 for (level = parms, cur_depth = parms_depth;
8582 parms_depth > 0 && level != NULL_TREE;
8583 level = TREE_CHAIN (level), --cur_depth)
8585 tree l;
8586 if (cur_depth == args_depth)
8587 l = coerce_template_parms (TREE_VALUE (level),
8588 args, in_decl, complain,
8589 require_all_args,
8590 use_default_args);
8591 else
8592 l = TMPL_ARGS_LEVEL (args, cur_depth);
8594 if (l == error_mark_node)
8595 return error_mark_node;
8597 SET_TMPL_ARGS_LEVEL (coerced_args, cur_depth, l);
8600 else
8601 coerced_args = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parms),
8602 args, in_decl, complain,
8603 require_all_args,
8604 use_default_args);
8605 return coerced_args;
8608 /* Returns 1 if template args OT and NT are equivalent. */
8611 template_args_equal (tree ot, tree nt, bool partial_order /* = false */)
8613 if (nt == ot)
8614 return 1;
8615 if (nt == NULL_TREE || ot == NULL_TREE)
8616 return false;
8617 if (nt == any_targ_node || ot == any_targ_node)
8618 return true;
8620 if (TREE_CODE (nt) == TREE_VEC)
8621 /* For member templates */
8622 return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
8623 else if (PACK_EXPANSION_P (ot))
8624 return (PACK_EXPANSION_P (nt)
8625 && template_args_equal (PACK_EXPANSION_PATTERN (ot),
8626 PACK_EXPANSION_PATTERN (nt))
8627 && template_args_equal (PACK_EXPANSION_EXTRA_ARGS (ot),
8628 PACK_EXPANSION_EXTRA_ARGS (nt)));
8629 else if (ARGUMENT_PACK_P (ot))
8631 int i, len;
8632 tree opack, npack;
8634 if (!ARGUMENT_PACK_P (nt))
8635 return 0;
8637 opack = ARGUMENT_PACK_ARGS (ot);
8638 npack = ARGUMENT_PACK_ARGS (nt);
8639 len = TREE_VEC_LENGTH (opack);
8640 if (TREE_VEC_LENGTH (npack) != len)
8641 return 0;
8642 for (i = 0; i < len; ++i)
8643 if (!template_args_equal (TREE_VEC_ELT (opack, i),
8644 TREE_VEC_ELT (npack, i)))
8645 return 0;
8646 return 1;
8648 else if (ot && TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
8649 gcc_unreachable ();
8650 else if (TYPE_P (nt))
8652 if (!TYPE_P (ot))
8653 return false;
8654 /* Don't treat an alias template specialization with dependent
8655 arguments as equivalent to its underlying type when used as a
8656 template argument; we need them to be distinct so that we
8657 substitute into the specialization arguments at instantiation
8658 time. And aliases can't be equivalent without being ==, so
8659 we don't need to look any deeper.
8661 During partial ordering, however, we need to treat them normally so
8662 that we can order uses of the same alias with different
8663 cv-qualification (79960). */
8664 if (!partial_order
8665 && (TYPE_ALIAS_P (nt) || TYPE_ALIAS_P (ot)))
8666 return false;
8667 else
8668 return same_type_p (ot, nt);
8670 else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
8671 return 0;
8672 else
8674 /* Try to treat a template non-type argument that has been converted
8675 to the parameter type as equivalent to one that hasn't yet. */
8676 for (enum tree_code code1 = TREE_CODE (ot);
8677 CONVERT_EXPR_CODE_P (code1)
8678 || code1 == NON_LVALUE_EXPR;
8679 code1 = TREE_CODE (ot))
8680 ot = TREE_OPERAND (ot, 0);
8681 for (enum tree_code code2 = TREE_CODE (nt);
8682 CONVERT_EXPR_CODE_P (code2)
8683 || code2 == NON_LVALUE_EXPR;
8684 code2 = TREE_CODE (nt))
8685 nt = TREE_OPERAND (nt, 0);
8687 return cp_tree_equal (ot, nt);
8691 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets of
8692 template arguments. Returns 0 otherwise, and updates OLDARG_PTR and
8693 NEWARG_PTR with the offending arguments if they are non-NULL. */
8696 comp_template_args (tree oldargs, tree newargs,
8697 tree *oldarg_ptr, tree *newarg_ptr,
8698 bool partial_order)
8700 int i;
8702 if (oldargs == newargs)
8703 return 1;
8705 if (!oldargs || !newargs)
8706 return 0;
8708 if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
8709 return 0;
8711 for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
8713 tree nt = TREE_VEC_ELT (newargs, i);
8714 tree ot = TREE_VEC_ELT (oldargs, i);
8716 if (! template_args_equal (ot, nt, partial_order))
8718 if (oldarg_ptr != NULL)
8719 *oldarg_ptr = ot;
8720 if (newarg_ptr != NULL)
8721 *newarg_ptr = nt;
8722 return 0;
8725 return 1;
8728 inline bool
8729 comp_template_args_porder (tree oargs, tree nargs)
8731 return comp_template_args (oargs, nargs, NULL, NULL, true);
8734 static void
8735 add_pending_template (tree d)
8737 tree ti = (TYPE_P (d)
8738 ? CLASSTYPE_TEMPLATE_INFO (d)
8739 : DECL_TEMPLATE_INFO (d));
8740 struct pending_template *pt;
8741 int level;
8743 if (TI_PENDING_TEMPLATE_FLAG (ti))
8744 return;
8746 /* We are called both from instantiate_decl, where we've already had a
8747 tinst_level pushed, and instantiate_template, where we haven't.
8748 Compensate. */
8749 level = !current_tinst_level || current_tinst_level->decl != d;
8751 if (level)
8752 push_tinst_level (d);
8754 pt = ggc_alloc<pending_template> ();
8755 pt->next = NULL;
8756 pt->tinst = current_tinst_level;
8757 if (last_pending_template)
8758 last_pending_template->next = pt;
8759 else
8760 pending_templates = pt;
8762 last_pending_template = pt;
8764 TI_PENDING_TEMPLATE_FLAG (ti) = 1;
8766 if (level)
8767 pop_tinst_level ();
8771 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
8772 ARGLIST. Valid choices for FNS are given in the cp-tree.def
8773 documentation for TEMPLATE_ID_EXPR. */
8775 tree
8776 lookup_template_function (tree fns, tree arglist)
8778 tree type;
8780 if (fns == error_mark_node || arglist == error_mark_node)
8781 return error_mark_node;
8783 gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
8785 if (!is_overloaded_fn (fns) && !identifier_p (fns))
8787 error ("%q#D is not a function template", fns);
8788 return error_mark_node;
8791 if (BASELINK_P (fns))
8793 BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
8794 unknown_type_node,
8795 BASELINK_FUNCTIONS (fns),
8796 arglist);
8797 return fns;
8800 type = TREE_TYPE (fns);
8801 if (TREE_CODE (fns) == OVERLOAD || !type)
8802 type = unknown_type_node;
8804 return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
8807 /* Within the scope of a template class S<T>, the name S gets bound
8808 (in build_self_reference) to a TYPE_DECL for the class, not a
8809 TEMPLATE_DECL. If DECL is a TYPE_DECL for current_class_type,
8810 or one of its enclosing classes, and that type is a template,
8811 return the associated TEMPLATE_DECL. Otherwise, the original
8812 DECL is returned.
8814 Also handle the case when DECL is a TREE_LIST of ambiguous
8815 injected-class-names from different bases. */
8817 tree
8818 maybe_get_template_decl_from_type_decl (tree decl)
8820 if (decl == NULL_TREE)
8821 return decl;
8823 /* DR 176: A lookup that finds an injected-class-name (10.2
8824 [class.member.lookup]) can result in an ambiguity in certain cases
8825 (for example, if it is found in more than one base class). If all of
8826 the injected-class-names that are found refer to specializations of
8827 the same class template, and if the name is followed by a
8828 template-argument-list, the reference refers to the class template
8829 itself and not a specialization thereof, and is not ambiguous. */
8830 if (TREE_CODE (decl) == TREE_LIST)
8832 tree t, tmpl = NULL_TREE;
8833 for (t = decl; t; t = TREE_CHAIN (t))
8835 tree elt = maybe_get_template_decl_from_type_decl (TREE_VALUE (t));
8836 if (!tmpl)
8837 tmpl = elt;
8838 else if (tmpl != elt)
8839 break;
8841 if (tmpl && t == NULL_TREE)
8842 return tmpl;
8843 else
8844 return decl;
8847 return (decl != NULL_TREE
8848 && DECL_SELF_REFERENCE_P (decl)
8849 && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
8850 ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
8853 /* Given an IDENTIFIER_NODE (or type TEMPLATE_DECL) and a chain of
8854 parameters, find the desired type.
8856 D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
8858 IN_DECL, if non-NULL, is the template declaration we are trying to
8859 instantiate.
8861 If ENTERING_SCOPE is nonzero, we are about to enter the scope of
8862 the class we are looking up.
8864 Issue error and warning messages under control of COMPLAIN.
8866 If the template class is really a local class in a template
8867 function, then the FUNCTION_CONTEXT is the function in which it is
8868 being instantiated.
8870 ??? Note that this function is currently called *twice* for each
8871 template-id: the first time from the parser, while creating the
8872 incomplete type (finish_template_type), and the second type during the
8873 real instantiation (instantiate_template_class). This is surely something
8874 that we want to avoid. It also causes some problems with argument
8875 coercion (see convert_nontype_argument for more information on this). */
8877 static tree
8878 lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
8879 int entering_scope, tsubst_flags_t complain)
8881 tree templ = NULL_TREE, parmlist;
8882 tree t;
8883 spec_entry **slot;
8884 spec_entry *entry;
8885 spec_entry elt;
8886 hashval_t hash;
8888 if (identifier_p (d1))
8890 tree value = innermost_non_namespace_value (d1);
8891 if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
8892 templ = value;
8893 else
8895 if (context)
8896 push_decl_namespace (context);
8897 templ = lookup_name (d1);
8898 templ = maybe_get_template_decl_from_type_decl (templ);
8899 if (context)
8900 pop_decl_namespace ();
8902 if (templ)
8903 context = DECL_CONTEXT (templ);
8905 else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
8907 tree type = TREE_TYPE (d1);
8909 /* If we are declaring a constructor, say A<T>::A<T>, we will get
8910 an implicit typename for the second A. Deal with it. */
8911 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
8912 type = TREE_TYPE (type);
8914 if (CLASSTYPE_TEMPLATE_INFO (type))
8916 templ = CLASSTYPE_TI_TEMPLATE (type);
8917 d1 = DECL_NAME (templ);
8920 else if (TREE_CODE (d1) == ENUMERAL_TYPE
8921 || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
8923 templ = TYPE_TI_TEMPLATE (d1);
8924 d1 = DECL_NAME (templ);
8926 else if (DECL_TYPE_TEMPLATE_P (d1))
8928 templ = d1;
8929 d1 = DECL_NAME (templ);
8930 context = DECL_CONTEXT (templ);
8932 else if (DECL_TEMPLATE_TEMPLATE_PARM_P (d1))
8934 templ = d1;
8935 d1 = DECL_NAME (templ);
8938 /* Issue an error message if we didn't find a template. */
8939 if (! templ)
8941 if (complain & tf_error)
8942 error ("%qT is not a template", d1);
8943 return error_mark_node;
8946 if (TREE_CODE (templ) != TEMPLATE_DECL
8947 /* Make sure it's a user visible template, if it was named by
8948 the user. */
8949 || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
8950 && !PRIMARY_TEMPLATE_P (templ)))
8952 if (complain & tf_error)
8954 error ("non-template type %qT used as a template", d1);
8955 if (in_decl)
8956 error ("for template declaration %q+D", in_decl);
8958 return error_mark_node;
8961 complain &= ~tf_user;
8963 /* An alias that just changes the name of a template is equivalent to the
8964 other template, so if any of the arguments are pack expansions, strip
8965 the alias to avoid problems with a pack expansion passed to a non-pack
8966 alias template parameter (DR 1430). */
8967 if (pack_expansion_args_count (INNERMOST_TEMPLATE_ARGS (arglist)))
8968 templ = get_underlying_template (templ);
8970 if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
8972 tree parm;
8973 tree arglist2 = coerce_template_args_for_ttp (templ, arglist, complain);
8974 if (arglist2 == error_mark_node
8975 || (!uses_template_parms (arglist2)
8976 && check_instantiated_args (templ, arglist2, complain)))
8977 return error_mark_node;
8979 parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
8980 return parm;
8982 else
8984 tree template_type = TREE_TYPE (templ);
8985 tree gen_tmpl;
8986 tree type_decl;
8987 tree found = NULL_TREE;
8988 int arg_depth;
8989 int parm_depth;
8990 int is_dependent_type;
8991 int use_partial_inst_tmpl = false;
8993 if (template_type == error_mark_node)
8994 /* An error occurred while building the template TEMPL, and a
8995 diagnostic has most certainly been emitted for that
8996 already. Let's propagate that error. */
8997 return error_mark_node;
8999 gen_tmpl = most_general_template (templ);
9000 parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
9001 parm_depth = TMPL_PARMS_DEPTH (parmlist);
9002 arg_depth = TMPL_ARGS_DEPTH (arglist);
9004 if (arg_depth == 1 && parm_depth > 1)
9006 /* We've been given an incomplete set of template arguments.
9007 For example, given:
9009 template <class T> struct S1 {
9010 template <class U> struct S2 {};
9011 template <class U> struct S2<U*> {};
9014 we will be called with an ARGLIST of `U*', but the
9015 TEMPLATE will be `template <class T> template
9016 <class U> struct S1<T>::S2'. We must fill in the missing
9017 arguments. */
9018 tree ti = TYPE_TEMPLATE_INFO_MAYBE_ALIAS (TREE_TYPE (templ));
9019 arglist = add_outermost_template_args (TI_ARGS (ti), arglist);
9020 arg_depth = TMPL_ARGS_DEPTH (arglist);
9023 /* Now we should have enough arguments. */
9024 gcc_assert (parm_depth == arg_depth);
9026 /* From here on, we're only interested in the most general
9027 template. */
9029 /* Calculate the BOUND_ARGS. These will be the args that are
9030 actually tsubst'd into the definition to create the
9031 instantiation. */
9032 arglist = coerce_innermost_template_parms (parmlist, arglist, gen_tmpl,
9033 complain,
9034 /*require_all_args=*/true,
9035 /*use_default_args=*/true);
9037 if (arglist == error_mark_node)
9038 /* We were unable to bind the arguments. */
9039 return error_mark_node;
9041 /* In the scope of a template class, explicit references to the
9042 template class refer to the type of the template, not any
9043 instantiation of it. For example, in:
9045 template <class T> class C { void f(C<T>); }
9047 the `C<T>' is just the same as `C'. Outside of the
9048 class, however, such a reference is an instantiation. */
9049 if (entering_scope
9050 || !PRIMARY_TEMPLATE_P (gen_tmpl)
9051 || currently_open_class (template_type))
9053 tree tinfo = TYPE_TEMPLATE_INFO (template_type);
9055 if (tinfo && comp_template_args (TI_ARGS (tinfo), arglist))
9056 return template_type;
9059 /* If we already have this specialization, return it. */
9060 elt.tmpl = gen_tmpl;
9061 elt.args = arglist;
9062 elt.spec = NULL_TREE;
9063 hash = spec_hasher::hash (&elt);
9064 entry = type_specializations->find_with_hash (&elt, hash);
9066 if (entry)
9067 return entry->spec;
9069 /* If the the template's constraints are not satisfied,
9070 then we cannot form a valid type.
9072 Note that the check is deferred until after the hash
9073 lookup. This prevents redundant checks on previously
9074 instantiated specializations. */
9075 if (flag_concepts && !constraints_satisfied_p (gen_tmpl, arglist))
9077 if (complain & tf_error)
9079 error ("template constraint failure");
9080 diagnose_constraints (input_location, gen_tmpl, arglist);
9082 return error_mark_node;
9085 is_dependent_type = uses_template_parms (arglist);
9087 /* If the deduced arguments are invalid, then the binding
9088 failed. */
9089 if (!is_dependent_type
9090 && check_instantiated_args (gen_tmpl,
9091 INNERMOST_TEMPLATE_ARGS (arglist),
9092 complain))
9093 return error_mark_node;
9095 if (!is_dependent_type
9096 && !PRIMARY_TEMPLATE_P (gen_tmpl)
9097 && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
9098 && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
9100 found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
9101 DECL_NAME (gen_tmpl),
9102 /*tag_scope=*/ts_global);
9103 return found;
9106 context = tsubst (DECL_CONTEXT (gen_tmpl), arglist,
9107 complain, in_decl);
9108 if (context == error_mark_node)
9109 return error_mark_node;
9111 if (!context)
9112 context = global_namespace;
9114 /* Create the type. */
9115 if (DECL_ALIAS_TEMPLATE_P (gen_tmpl))
9117 /* The user referred to a specialization of an alias
9118 template represented by GEN_TMPL.
9120 [temp.alias]/2 says:
9122 When a template-id refers to the specialization of an
9123 alias template, it is equivalent to the associated
9124 type obtained by substitution of its
9125 template-arguments for the template-parameters in the
9126 type-id of the alias template. */
9128 t = tsubst (TREE_TYPE (gen_tmpl), arglist, complain, in_decl);
9129 /* Note that the call above (by indirectly calling
9130 register_specialization in tsubst_decl) registers the
9131 TYPE_DECL representing the specialization of the alias
9132 template. So next time someone substitutes ARGLIST for
9133 the template parms into the alias template (GEN_TMPL),
9134 she'll get that TYPE_DECL back. */
9136 if (t == error_mark_node)
9137 return t;
9139 else if (TREE_CODE (template_type) == ENUMERAL_TYPE)
9141 if (!is_dependent_type)
9143 set_current_access_from_decl (TYPE_NAME (template_type));
9144 t = start_enum (TYPE_IDENTIFIER (template_type), NULL_TREE,
9145 tsubst (ENUM_UNDERLYING_TYPE (template_type),
9146 arglist, complain, in_decl),
9147 tsubst_attributes (TYPE_ATTRIBUTES (template_type),
9148 arglist, complain, in_decl),
9149 SCOPED_ENUM_P (template_type), NULL);
9151 if (t == error_mark_node)
9152 return t;
9154 else
9156 /* We don't want to call start_enum for this type, since
9157 the values for the enumeration constants may involve
9158 template parameters. And, no one should be interested
9159 in the enumeration constants for such a type. */
9160 t = cxx_make_type (ENUMERAL_TYPE);
9161 SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
9163 SET_OPAQUE_ENUM_P (t, OPAQUE_ENUM_P (template_type));
9164 ENUM_FIXED_UNDERLYING_TYPE_P (t)
9165 = ENUM_FIXED_UNDERLYING_TYPE_P (template_type);
9167 else if (CLASS_TYPE_P (template_type))
9169 /* Lambda closures are regenerated in tsubst_lambda_expr, not
9170 instantiated here. */
9171 gcc_assert (!LAMBDA_TYPE_P (template_type));
9173 t = make_class_type (TREE_CODE (template_type));
9174 CLASSTYPE_DECLARED_CLASS (t)
9175 = CLASSTYPE_DECLARED_CLASS (template_type);
9176 SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
9178 /* A local class. Make sure the decl gets registered properly. */
9179 if (context == current_function_decl)
9180 pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current);
9182 if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
9183 /* This instantiation is another name for the primary
9184 template type. Set the TYPE_CANONICAL field
9185 appropriately. */
9186 TYPE_CANONICAL (t) = template_type;
9187 else if (any_template_arguments_need_structural_equality_p (arglist))
9188 /* Some of the template arguments require structural
9189 equality testing, so this template class requires
9190 structural equality testing. */
9191 SET_TYPE_STRUCTURAL_EQUALITY (t);
9193 else
9194 gcc_unreachable ();
9196 /* If we called start_enum or pushtag above, this information
9197 will already be set up. */
9198 if (!TYPE_NAME (t))
9200 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
9202 type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
9203 DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
9204 DECL_SOURCE_LOCATION (type_decl)
9205 = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
9207 else
9208 type_decl = TYPE_NAME (t);
9210 if (CLASS_TYPE_P (template_type))
9212 TREE_PRIVATE (type_decl)
9213 = TREE_PRIVATE (TYPE_MAIN_DECL (template_type));
9214 TREE_PROTECTED (type_decl)
9215 = TREE_PROTECTED (TYPE_MAIN_DECL (template_type));
9216 if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
9218 DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
9219 DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
9223 if (OVERLOAD_TYPE_P (t)
9224 && !DECL_ALIAS_TEMPLATE_P (gen_tmpl))
9226 static const char *tags[] = {"abi_tag", "may_alias"};
9228 for (unsigned ix = 0; ix != 2; ix++)
9230 tree attributes
9231 = lookup_attribute (tags[ix], TYPE_ATTRIBUTES (template_type));
9233 if (attributes)
9234 TYPE_ATTRIBUTES (t)
9235 = tree_cons (TREE_PURPOSE (attributes),
9236 TREE_VALUE (attributes),
9237 TYPE_ATTRIBUTES (t));
9241 /* Let's consider the explicit specialization of a member
9242 of a class template specialization that is implicitly instantiated,
9243 e.g.:
9244 template<class T>
9245 struct S
9247 template<class U> struct M {}; //#0
9250 template<>
9251 template<>
9252 struct S<int>::M<char> //#1
9254 int i;
9256 [temp.expl.spec]/4 says this is valid.
9258 In this case, when we write:
9259 S<int>::M<char> m;
9261 M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
9262 the one of #0.
9264 When we encounter #1, we want to store the partial instantiation
9265 of M (template<class T> S<int>::M<T>) in its CLASSTYPE_TI_TEMPLATE.
9267 For all cases other than this "explicit specialization of member of a
9268 class template", we just want to store the most general template into
9269 the CLASSTYPE_TI_TEMPLATE of M.
9271 This case of "explicit specialization of member of a class template"
9272 only happens when:
9273 1/ the enclosing class is an instantiation of, and therefore not
9274 the same as, the context of the most general template, and
9275 2/ we aren't looking at the partial instantiation itself, i.e.
9276 the innermost arguments are not the same as the innermost parms of
9277 the most general template.
9279 So it's only when 1/ and 2/ happens that we want to use the partial
9280 instantiation of the member template in lieu of its most general
9281 template. */
9283 if (PRIMARY_TEMPLATE_P (gen_tmpl)
9284 && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
9285 /* the enclosing class must be an instantiation... */
9286 && CLASS_TYPE_P (context)
9287 && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
9289 TREE_VEC_LENGTH (arglist)--;
9290 ++processing_template_decl;
9291 tree tinfo = TYPE_TEMPLATE_INFO_MAYBE_ALIAS (TREE_TYPE (gen_tmpl));
9292 tree partial_inst_args =
9293 tsubst (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo)),
9294 arglist, complain, NULL_TREE);
9295 --processing_template_decl;
9296 TREE_VEC_LENGTH (arglist)++;
9297 if (partial_inst_args == error_mark_node)
9298 return error_mark_node;
9299 use_partial_inst_tmpl =
9300 /*...and we must not be looking at the partial instantiation
9301 itself. */
9302 !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
9303 partial_inst_args);
9306 if (!use_partial_inst_tmpl)
9307 /* This case is easy; there are no member templates involved. */
9308 found = gen_tmpl;
9309 else
9311 /* This is a full instantiation of a member template. Find
9312 the partial instantiation of which this is an instance. */
9314 /* Temporarily reduce by one the number of levels in the ARGLIST
9315 so as to avoid comparing the last set of arguments. */
9316 TREE_VEC_LENGTH (arglist)--;
9317 found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
9318 TREE_VEC_LENGTH (arglist)++;
9319 /* FOUND is either a proper class type, or an alias
9320 template specialization. In the later case, it's a
9321 TYPE_DECL, resulting from the substituting of arguments
9322 for parameters in the TYPE_DECL of the alias template
9323 done earlier. So be careful while getting the template
9324 of FOUND. */
9325 found = (TREE_CODE (found) == TEMPLATE_DECL
9326 ? found
9327 : (TREE_CODE (found) == TYPE_DECL
9328 ? DECL_TI_TEMPLATE (found)
9329 : CLASSTYPE_TI_TEMPLATE (found)));
9332 // Build template info for the new specialization.
9333 SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
9335 elt.spec = t;
9336 slot = type_specializations->find_slot_with_hash (&elt, hash, INSERT);
9337 entry = ggc_alloc<spec_entry> ();
9338 *entry = elt;
9339 *slot = entry;
9341 /* Note this use of the partial instantiation so we can check it
9342 later in maybe_process_partial_specialization. */
9343 DECL_TEMPLATE_INSTANTIATIONS (found)
9344 = tree_cons (arglist, t,
9345 DECL_TEMPLATE_INSTANTIATIONS (found));
9347 if (TREE_CODE (template_type) == ENUMERAL_TYPE && !is_dependent_type
9348 && !DECL_ALIAS_TEMPLATE_P (gen_tmpl))
9349 /* Now that the type has been registered on the instantiations
9350 list, we set up the enumerators. Because the enumeration
9351 constants may involve the enumeration type itself, we make
9352 sure to register the type first, and then create the
9353 constants. That way, doing tsubst_expr for the enumeration
9354 constants won't result in recursive calls here; we'll find
9355 the instantiation and exit above. */
9356 tsubst_enum (template_type, t, arglist);
9358 if (CLASS_TYPE_P (template_type) && is_dependent_type)
9359 /* If the type makes use of template parameters, the
9360 code that generates debugging information will crash. */
9361 DECL_IGNORED_P (TYPE_MAIN_DECL (t)) = 1;
9363 /* Possibly limit visibility based on template args. */
9364 TREE_PUBLIC (type_decl) = 1;
9365 determine_visibility (type_decl);
9367 inherit_targ_abi_tags (t);
9369 return t;
9373 /* Wrapper for lookup_template_class_1. */
9375 tree
9376 lookup_template_class (tree d1, tree arglist, tree in_decl, tree context,
9377 int entering_scope, tsubst_flags_t complain)
9379 tree ret;
9380 timevar_push (TV_TEMPLATE_INST);
9381 ret = lookup_template_class_1 (d1, arglist, in_decl, context,
9382 entering_scope, complain);
9383 timevar_pop (TV_TEMPLATE_INST);
9384 return ret;
9387 /* Return a TEMPLATE_ID_EXPR for the given variable template and ARGLIST. */
9389 tree
9390 lookup_template_variable (tree templ, tree arglist)
9392 /* The type of the expression is NULL_TREE since the template-id could refer
9393 to an explicit or partial specialization. */
9394 tree type = NULL_TREE;
9395 if (flag_concepts && variable_concept_p (templ))
9396 /* Except that concepts are always bool. */
9397 type = boolean_type_node;
9398 return build2 (TEMPLATE_ID_EXPR, type, templ, arglist);
9401 /* Instantiate a variable declaration from a TEMPLATE_ID_EXPR for use. */
9403 tree
9404 finish_template_variable (tree var, tsubst_flags_t complain)
9406 tree templ = TREE_OPERAND (var, 0);
9407 tree arglist = TREE_OPERAND (var, 1);
9409 /* We never want to return a VAR_DECL for a variable concept, since they
9410 aren't instantiated. In a template, leave the TEMPLATE_ID_EXPR alone. */
9411 bool concept_p = flag_concepts && variable_concept_p (templ);
9412 if (concept_p && processing_template_decl)
9413 return var;
9415 tree tmpl_args = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (templ));
9416 arglist = add_outermost_template_args (tmpl_args, arglist);
9418 templ = most_general_template (templ);
9419 tree parms = DECL_TEMPLATE_PARMS (templ);
9420 arglist = coerce_innermost_template_parms (parms, arglist, templ, complain,
9421 /*req_all*/true,
9422 /*use_default*/true);
9424 if (flag_concepts && !constraints_satisfied_p (templ, arglist))
9426 if (complain & tf_error)
9428 error ("use of invalid variable template %qE", var);
9429 diagnose_constraints (location_of (var), templ, arglist);
9431 return error_mark_node;
9434 /* If a template-id refers to a specialization of a variable
9435 concept, then the expression is true if and only if the
9436 concept's constraints are satisfied by the given template
9437 arguments.
9439 NOTE: This is an extension of Concepts Lite TS that
9440 allows constraints to be used in expressions. */
9441 if (concept_p)
9443 tree decl = DECL_TEMPLATE_RESULT (templ);
9444 return evaluate_variable_concept (decl, arglist);
9447 return instantiate_template (templ, arglist, complain);
9450 /* Construct a TEMPLATE_ID_EXPR for the given variable template TEMPL having
9451 TARGS template args, and instantiate it if it's not dependent. */
9453 tree
9454 lookup_and_finish_template_variable (tree templ, tree targs,
9455 tsubst_flags_t complain)
9457 templ = lookup_template_variable (templ, targs);
9458 if (!any_dependent_template_arguments_p (targs))
9460 templ = finish_template_variable (templ, complain);
9461 mark_used (templ);
9464 return convert_from_reference (templ);
9468 struct pair_fn_data
9470 tree_fn_t fn;
9471 tree_fn_t any_fn;
9472 void *data;
9473 /* True when we should also visit template parameters that occur in
9474 non-deduced contexts. */
9475 bool include_nondeduced_p;
9476 hash_set<tree> *visited;
9479 /* Called from for_each_template_parm via walk_tree. */
9481 static tree
9482 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
9484 tree t = *tp;
9485 struct pair_fn_data *pfd = (struct pair_fn_data *) d;
9486 tree_fn_t fn = pfd->fn;
9487 void *data = pfd->data;
9488 tree result = NULL_TREE;
9490 #define WALK_SUBTREE(NODE) \
9491 do \
9493 result = for_each_template_parm (NODE, fn, data, pfd->visited, \
9494 pfd->include_nondeduced_p, \
9495 pfd->any_fn); \
9496 if (result) goto out; \
9498 while (0)
9500 if (pfd->any_fn && (*pfd->any_fn)(t, data))
9501 return t;
9503 if (TYPE_P (t)
9504 && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE))
9505 WALK_SUBTREE (TYPE_CONTEXT (t));
9507 switch (TREE_CODE (t))
9509 case RECORD_TYPE:
9510 if (TYPE_PTRMEMFUNC_P (t))
9511 break;
9512 /* Fall through. */
9514 case UNION_TYPE:
9515 case ENUMERAL_TYPE:
9516 if (!TYPE_TEMPLATE_INFO (t))
9517 *walk_subtrees = 0;
9518 else
9519 WALK_SUBTREE (TYPE_TI_ARGS (t));
9520 break;
9522 case INTEGER_TYPE:
9523 WALK_SUBTREE (TYPE_MIN_VALUE (t));
9524 WALK_SUBTREE (TYPE_MAX_VALUE (t));
9525 break;
9527 case METHOD_TYPE:
9528 /* Since we're not going to walk subtrees, we have to do this
9529 explicitly here. */
9530 WALK_SUBTREE (TYPE_METHOD_BASETYPE (t));
9531 /* Fall through. */
9533 case FUNCTION_TYPE:
9534 /* Check the return type. */
9535 WALK_SUBTREE (TREE_TYPE (t));
9537 /* Check the parameter types. Since default arguments are not
9538 instantiated until they are needed, the TYPE_ARG_TYPES may
9539 contain expressions that involve template parameters. But,
9540 no-one should be looking at them yet. And, once they're
9541 instantiated, they don't contain template parameters, so
9542 there's no point in looking at them then, either. */
9544 tree parm;
9546 for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
9547 WALK_SUBTREE (TREE_VALUE (parm));
9549 /* Since we've already handled the TYPE_ARG_TYPES, we don't
9550 want walk_tree walking into them itself. */
9551 *walk_subtrees = 0;
9554 if (flag_noexcept_type)
9556 tree spec = TYPE_RAISES_EXCEPTIONS (t);
9557 if (spec)
9558 WALK_SUBTREE (TREE_PURPOSE (spec));
9560 break;
9562 case TYPEOF_TYPE:
9563 case UNDERLYING_TYPE:
9564 if (pfd->include_nondeduced_p
9565 && for_each_template_parm (TYPE_VALUES_RAW (t), fn, data,
9566 pfd->visited,
9567 pfd->include_nondeduced_p,
9568 pfd->any_fn))
9569 return error_mark_node;
9570 break;
9572 case FUNCTION_DECL:
9573 case VAR_DECL:
9574 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
9575 WALK_SUBTREE (DECL_TI_ARGS (t));
9576 /* Fall through. */
9578 case PARM_DECL:
9579 case CONST_DECL:
9580 if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t))
9581 WALK_SUBTREE (DECL_INITIAL (t));
9582 if (DECL_CONTEXT (t)
9583 && pfd->include_nondeduced_p)
9584 WALK_SUBTREE (DECL_CONTEXT (t));
9585 break;
9587 case BOUND_TEMPLATE_TEMPLATE_PARM:
9588 /* Record template parameters such as `T' inside `TT<T>'. */
9589 WALK_SUBTREE (TYPE_TI_ARGS (t));
9590 /* Fall through. */
9592 case TEMPLATE_TEMPLATE_PARM:
9593 case TEMPLATE_TYPE_PARM:
9594 case TEMPLATE_PARM_INDEX:
9595 if (fn && (*fn)(t, data))
9596 return t;
9597 else if (!fn)
9598 return t;
9599 break;
9601 case TEMPLATE_DECL:
9602 /* A template template parameter is encountered. */
9603 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9604 WALK_SUBTREE (TREE_TYPE (t));
9606 /* Already substituted template template parameter */
9607 *walk_subtrees = 0;
9608 break;
9610 case TYPENAME_TYPE:
9611 /* A template-id in a TYPENAME_TYPE might be a deduced context after
9612 partial instantiation. */
9613 WALK_SUBTREE (TYPENAME_TYPE_FULLNAME (t));
9614 break;
9616 case CONSTRUCTOR:
9617 if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
9618 && pfd->include_nondeduced_p)
9619 WALK_SUBTREE (TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (t)));
9620 break;
9622 case INDIRECT_REF:
9623 case COMPONENT_REF:
9624 /* If there's no type, then this thing must be some expression
9625 involving template parameters. */
9626 if (!fn && !TREE_TYPE (t))
9627 return error_mark_node;
9628 break;
9630 case MODOP_EXPR:
9631 case CAST_EXPR:
9632 case IMPLICIT_CONV_EXPR:
9633 case REINTERPRET_CAST_EXPR:
9634 case CONST_CAST_EXPR:
9635 case STATIC_CAST_EXPR:
9636 case DYNAMIC_CAST_EXPR:
9637 case ARROW_EXPR:
9638 case DOTSTAR_EXPR:
9639 case TYPEID_EXPR:
9640 case PSEUDO_DTOR_EXPR:
9641 if (!fn)
9642 return error_mark_node;
9643 break;
9645 default:
9646 break;
9649 #undef WALK_SUBTREE
9651 /* We didn't find any template parameters we liked. */
9652 out:
9653 return result;
9656 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
9657 BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
9658 call FN with the parameter and the DATA.
9659 If FN returns nonzero, the iteration is terminated, and
9660 for_each_template_parm returns 1. Otherwise, the iteration
9661 continues. If FN never returns a nonzero value, the value
9662 returned by for_each_template_parm is 0. If FN is NULL, it is
9663 considered to be the function which always returns 1.
9665 If INCLUDE_NONDEDUCED_P, then this routine will also visit template
9666 parameters that occur in non-deduced contexts. When false, only
9667 visits those template parameters that can be deduced. */
9669 static tree
9670 for_each_template_parm (tree t, tree_fn_t fn, void* data,
9671 hash_set<tree> *visited,
9672 bool include_nondeduced_p,
9673 tree_fn_t any_fn)
9675 struct pair_fn_data pfd;
9676 tree result;
9678 /* Set up. */
9679 pfd.fn = fn;
9680 pfd.any_fn = any_fn;
9681 pfd.data = data;
9682 pfd.include_nondeduced_p = include_nondeduced_p;
9684 /* Walk the tree. (Conceptually, we would like to walk without
9685 duplicates, but for_each_template_parm_r recursively calls
9686 for_each_template_parm, so we would need to reorganize a fair
9687 bit to use walk_tree_without_duplicates, so we keep our own
9688 visited list.) */
9689 if (visited)
9690 pfd.visited = visited;
9691 else
9692 pfd.visited = new hash_set<tree>;
9693 result = cp_walk_tree (&t,
9694 for_each_template_parm_r,
9695 &pfd,
9696 pfd.visited);
9698 /* Clean up. */
9699 if (!visited)
9701 delete pfd.visited;
9702 pfd.visited = 0;
9705 return result;
9708 /* Returns true if T depends on any template parameter. */
9711 uses_template_parms (tree t)
9713 if (t == NULL_TREE)
9714 return false;
9716 bool dependent_p;
9717 int saved_processing_template_decl;
9719 saved_processing_template_decl = processing_template_decl;
9720 if (!saved_processing_template_decl)
9721 processing_template_decl = 1;
9722 if (TYPE_P (t))
9723 dependent_p = dependent_type_p (t);
9724 else if (TREE_CODE (t) == TREE_VEC)
9725 dependent_p = any_dependent_template_arguments_p (t);
9726 else if (TREE_CODE (t) == TREE_LIST)
9727 dependent_p = (uses_template_parms (TREE_VALUE (t))
9728 || uses_template_parms (TREE_CHAIN (t)));
9729 else if (TREE_CODE (t) == TYPE_DECL)
9730 dependent_p = dependent_type_p (TREE_TYPE (t));
9731 else if (DECL_P (t)
9732 || EXPR_P (t)
9733 || TREE_CODE (t) == TEMPLATE_PARM_INDEX
9734 || TREE_CODE (t) == OVERLOAD
9735 || BASELINK_P (t)
9736 || identifier_p (t)
9737 || TREE_CODE (t) == TRAIT_EXPR
9738 || TREE_CODE (t) == CONSTRUCTOR
9739 || CONSTANT_CLASS_P (t))
9740 dependent_p = (type_dependent_expression_p (t)
9741 || value_dependent_expression_p (t));
9742 else
9744 gcc_assert (t == error_mark_node);
9745 dependent_p = false;
9748 processing_template_decl = saved_processing_template_decl;
9750 return dependent_p;
9753 /* Returns true iff current_function_decl is an incompletely instantiated
9754 template. Useful instead of processing_template_decl because the latter
9755 is set to 0 during instantiate_non_dependent_expr. */
9757 bool
9758 in_template_function (void)
9760 tree fn = current_function_decl;
9761 bool ret;
9762 ++processing_template_decl;
9763 ret = (fn && DECL_LANG_SPECIFIC (fn)
9764 && DECL_TEMPLATE_INFO (fn)
9765 && any_dependent_template_arguments_p (DECL_TI_ARGS (fn)));
9766 --processing_template_decl;
9767 return ret;
9770 /* Returns true if T depends on any template parameter with level LEVEL. */
9772 bool
9773 uses_template_parms_level (tree t, int level)
9775 return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
9776 /*include_nondeduced_p=*/true);
9779 /* Returns true if the signature of DECL depends on any template parameter from
9780 its enclosing class. */
9782 bool
9783 uses_outer_template_parms (tree decl)
9785 int depth = template_class_depth (CP_DECL_CONTEXT (decl));
9786 if (depth == 0)
9787 return false;
9788 if (for_each_template_parm (TREE_TYPE (decl), template_parm_outer_level,
9789 &depth, NULL, /*include_nondeduced_p=*/true))
9790 return true;
9791 if (PRIMARY_TEMPLATE_P (decl)
9792 && for_each_template_parm (INNERMOST_TEMPLATE_PARMS
9793 (DECL_TEMPLATE_PARMS (decl)),
9794 template_parm_outer_level,
9795 &depth, NULL, /*include_nondeduced_p=*/true))
9796 return true;
9797 tree ci = get_constraints (decl);
9798 if (ci)
9799 ci = CI_ASSOCIATED_CONSTRAINTS (ci);
9800 if (ci && for_each_template_parm (ci, template_parm_outer_level,
9801 &depth, NULL, /*nondeduced*/true))
9802 return true;
9803 return false;
9806 /* Returns TRUE iff INST is an instantiation we don't need to do in an
9807 ill-formed translation unit, i.e. a variable or function that isn't
9808 usable in a constant expression. */
9810 static inline bool
9811 neglectable_inst_p (tree d)
9813 return (DECL_P (d)
9814 && !undeduced_auto_decl (d)
9815 && !(TREE_CODE (d) == FUNCTION_DECL ? DECL_DECLARED_CONSTEXPR_P (d)
9816 : decl_maybe_constant_var_p (d)));
9819 /* Returns TRUE iff we should refuse to instantiate DECL because it's
9820 neglectable and instantiated from within an erroneous instantiation. */
9822 static bool
9823 limit_bad_template_recursion (tree decl)
9825 struct tinst_level *lev = current_tinst_level;
9826 int errs = errorcount + sorrycount;
9827 if (lev == NULL || errs == 0 || !neglectable_inst_p (decl))
9828 return false;
9830 for (; lev; lev = lev->next)
9831 if (neglectable_inst_p (lev->decl))
9832 break;
9834 return (lev && errs > lev->errors);
9837 static int tinst_depth;
9838 extern int max_tinst_depth;
9839 int depth_reached;
9841 static GTY(()) struct tinst_level *last_error_tinst_level;
9843 /* We're starting to instantiate D; record the template instantiation context
9844 for diagnostics and to restore it later. */
9846 bool
9847 push_tinst_level (tree d)
9849 return push_tinst_level_loc (d, input_location);
9852 /* We're starting to instantiate D; record the template instantiation context
9853 at LOC for diagnostics and to restore it later. */
9855 bool
9856 push_tinst_level_loc (tree d, location_t loc)
9858 struct tinst_level *new_level;
9860 if (tinst_depth >= max_tinst_depth)
9862 /* Tell error.c not to try to instantiate any templates. */
9863 at_eof = 2;
9864 fatal_error (input_location,
9865 "template instantiation depth exceeds maximum of %d"
9866 " (use -ftemplate-depth= to increase the maximum)",
9867 max_tinst_depth);
9868 return false;
9871 /* If the current instantiation caused problems, don't let it instantiate
9872 anything else. Do allow deduction substitution and decls usable in
9873 constant expressions. */
9874 if (limit_bad_template_recursion (d))
9875 return false;
9877 /* When not -quiet, dump template instantiations other than functions, since
9878 announce_function will take care of those. */
9879 if (!quiet_flag
9880 && TREE_CODE (d) != TREE_LIST
9881 && TREE_CODE (d) != FUNCTION_DECL)
9882 fprintf (stderr, " %s", decl_as_string (d, TFF_DECL_SPECIFIERS));
9884 new_level = ggc_alloc<tinst_level> ();
9885 new_level->decl = d;
9886 new_level->locus = loc;
9887 new_level->errors = errorcount+sorrycount;
9888 new_level->in_system_header_p = in_system_header_at (input_location);
9889 new_level->next = current_tinst_level;
9890 current_tinst_level = new_level;
9892 ++tinst_depth;
9893 if (GATHER_STATISTICS && (tinst_depth > depth_reached))
9894 depth_reached = tinst_depth;
9896 return true;
9899 /* We're done instantiating this template; return to the instantiation
9900 context. */
9902 void
9903 pop_tinst_level (void)
9905 /* Restore the filename and line number stashed away when we started
9906 this instantiation. */
9907 input_location = current_tinst_level->locus;
9908 current_tinst_level = current_tinst_level->next;
9909 --tinst_depth;
9912 /* We're instantiating a deferred template; restore the template
9913 instantiation context in which the instantiation was requested, which
9914 is one step out from LEVEL. Return the corresponding DECL or TYPE. */
9916 static tree
9917 reopen_tinst_level (struct tinst_level *level)
9919 struct tinst_level *t;
9921 tinst_depth = 0;
9922 for (t = level; t; t = t->next)
9923 ++tinst_depth;
9925 current_tinst_level = level;
9926 pop_tinst_level ();
9927 if (current_tinst_level)
9928 current_tinst_level->errors = errorcount+sorrycount;
9929 return level->decl;
9932 /* Returns the TINST_LEVEL which gives the original instantiation
9933 context. */
9935 struct tinst_level *
9936 outermost_tinst_level (void)
9938 struct tinst_level *level = current_tinst_level;
9939 if (level)
9940 while (level->next)
9941 level = level->next;
9942 return level;
9945 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
9946 vector of template arguments, as for tsubst.
9948 Returns an appropriate tsubst'd friend declaration. */
9950 static tree
9951 tsubst_friend_function (tree decl, tree args)
9953 tree new_friend;
9955 if (TREE_CODE (decl) == FUNCTION_DECL
9956 && DECL_TEMPLATE_INSTANTIATION (decl)
9957 && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
9958 /* This was a friend declared with an explicit template
9959 argument list, e.g.:
9961 friend void f<>(T);
9963 to indicate that f was a template instantiation, not a new
9964 function declaration. Now, we have to figure out what
9965 instantiation of what template. */
9967 tree template_id, arglist, fns;
9968 tree new_args;
9969 tree tmpl;
9970 tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
9972 /* Friend functions are looked up in the containing namespace scope.
9973 We must enter that scope, to avoid finding member functions of the
9974 current class with same name. */
9975 push_nested_namespace (ns);
9976 fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
9977 tf_warning_or_error, NULL_TREE,
9978 /*integral_constant_expression_p=*/false);
9979 pop_nested_namespace (ns);
9980 arglist = tsubst (DECL_TI_ARGS (decl), args,
9981 tf_warning_or_error, NULL_TREE);
9982 template_id = lookup_template_function (fns, arglist);
9984 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
9985 tmpl = determine_specialization (template_id, new_friend,
9986 &new_args,
9987 /*need_member_template=*/0,
9988 TREE_VEC_LENGTH (args),
9989 tsk_none);
9990 return instantiate_template (tmpl, new_args, tf_error);
9993 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
9995 /* The NEW_FRIEND will look like an instantiation, to the
9996 compiler, but is not an instantiation from the point of view of
9997 the language. For example, we might have had:
9999 template <class T> struct S {
10000 template <class U> friend void f(T, U);
10003 Then, in S<int>, template <class U> void f(int, U) is not an
10004 instantiation of anything. */
10005 if (new_friend == error_mark_node)
10006 return error_mark_node;
10008 DECL_USE_TEMPLATE (new_friend) = 0;
10009 if (TREE_CODE (decl) == TEMPLATE_DECL)
10011 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
10012 DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
10013 = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
10016 /* The mangled name for the NEW_FRIEND is incorrect. The function
10017 is not a template instantiation and should not be mangled like
10018 one. Therefore, we forget the mangling here; we'll recompute it
10019 later if we need it. */
10020 if (TREE_CODE (new_friend) != TEMPLATE_DECL)
10022 SET_DECL_RTL (new_friend, NULL);
10023 SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
10026 if (DECL_NAMESPACE_SCOPE_P (new_friend))
10028 tree old_decl;
10029 tree new_friend_template_info;
10030 tree new_friend_result_template_info;
10031 tree ns;
10032 int new_friend_is_defn;
10034 /* We must save some information from NEW_FRIEND before calling
10035 duplicate decls since that function will free NEW_FRIEND if
10036 possible. */
10037 new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
10038 new_friend_is_defn =
10039 (DECL_INITIAL (DECL_TEMPLATE_RESULT
10040 (template_for_substitution (new_friend)))
10041 != NULL_TREE);
10042 if (TREE_CODE (new_friend) == TEMPLATE_DECL)
10044 /* This declaration is a `primary' template. */
10045 DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
10047 new_friend_result_template_info
10048 = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
10050 else
10051 new_friend_result_template_info = NULL_TREE;
10053 /* Inside pushdecl_namespace_level, we will push into the
10054 current namespace. However, the friend function should go
10055 into the namespace of the template. */
10056 ns = decl_namespace_context (new_friend);
10057 push_nested_namespace (ns);
10058 old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
10059 pop_nested_namespace (ns);
10061 if (old_decl == error_mark_node)
10062 return error_mark_node;
10064 if (old_decl != new_friend)
10066 /* This new friend declaration matched an existing
10067 declaration. For example, given:
10069 template <class T> void f(T);
10070 template <class U> class C {
10071 template <class T> friend void f(T) {}
10074 the friend declaration actually provides the definition
10075 of `f', once C has been instantiated for some type. So,
10076 old_decl will be the out-of-class template declaration,
10077 while new_friend is the in-class definition.
10079 But, if `f' was called before this point, the
10080 instantiation of `f' will have DECL_TI_ARGS corresponding
10081 to `T' but not to `U', references to which might appear
10082 in the definition of `f'. Previously, the most general
10083 template for an instantiation of `f' was the out-of-class
10084 version; now it is the in-class version. Therefore, we
10085 run through all specialization of `f', adding to their
10086 DECL_TI_ARGS appropriately. In particular, they need a
10087 new set of outer arguments, corresponding to the
10088 arguments for this class instantiation.
10090 The same situation can arise with something like this:
10092 friend void f(int);
10093 template <class T> class C {
10094 friend void f(T) {}
10097 when `C<int>' is instantiated. Now, `f(int)' is defined
10098 in the class. */
10100 if (!new_friend_is_defn)
10101 /* On the other hand, if the in-class declaration does
10102 *not* provide a definition, then we don't want to alter
10103 existing definitions. We can just leave everything
10104 alone. */
10106 else
10108 tree new_template = TI_TEMPLATE (new_friend_template_info);
10109 tree new_args = TI_ARGS (new_friend_template_info);
10111 /* Overwrite whatever template info was there before, if
10112 any, with the new template information pertaining to
10113 the declaration. */
10114 DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
10116 if (TREE_CODE (old_decl) != TEMPLATE_DECL)
10118 /* We should have called reregister_specialization in
10119 duplicate_decls. */
10120 gcc_assert (retrieve_specialization (new_template,
10121 new_args, 0)
10122 == old_decl);
10124 /* Instantiate it if the global has already been used. */
10125 if (DECL_ODR_USED (old_decl))
10126 instantiate_decl (old_decl, /*defer_ok=*/true,
10127 /*expl_inst_class_mem_p=*/false);
10129 else
10131 tree t;
10133 /* Indicate that the old function template is a partial
10134 instantiation. */
10135 DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
10136 = new_friend_result_template_info;
10138 gcc_assert (new_template
10139 == most_general_template (new_template));
10140 gcc_assert (new_template != old_decl);
10142 /* Reassign any specializations already in the hash table
10143 to the new more general template, and add the
10144 additional template args. */
10145 for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
10146 t != NULL_TREE;
10147 t = TREE_CHAIN (t))
10149 tree spec = TREE_VALUE (t);
10150 spec_entry elt;
10152 elt.tmpl = old_decl;
10153 elt.args = DECL_TI_ARGS (spec);
10154 elt.spec = NULL_TREE;
10156 decl_specializations->remove_elt (&elt);
10158 DECL_TI_ARGS (spec)
10159 = add_outermost_template_args (new_args,
10160 DECL_TI_ARGS (spec));
10162 register_specialization
10163 (spec, new_template, DECL_TI_ARGS (spec), true, 0);
10166 DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
10170 /* The information from NEW_FRIEND has been merged into OLD_DECL
10171 by duplicate_decls. */
10172 new_friend = old_decl;
10175 else
10177 tree context = DECL_CONTEXT (new_friend);
10178 bool dependent_p;
10180 /* In the code
10181 template <class T> class C {
10182 template <class U> friend void C1<U>::f (); // case 1
10183 friend void C2<T>::f (); // case 2
10185 we only need to make sure CONTEXT is a complete type for
10186 case 2. To distinguish between the two cases, we note that
10187 CONTEXT of case 1 remains dependent type after tsubst while
10188 this isn't true for case 2. */
10189 ++processing_template_decl;
10190 dependent_p = dependent_type_p (context);
10191 --processing_template_decl;
10193 if (!dependent_p
10194 && !complete_type_or_else (context, NULL_TREE))
10195 return error_mark_node;
10197 if (COMPLETE_TYPE_P (context))
10199 tree fn = new_friend;
10200 /* do_friend adds the TEMPLATE_DECL for any member friend
10201 template even if it isn't a member template, i.e.
10202 template <class T> friend A<T>::f();
10203 Look through it in that case. */
10204 if (TREE_CODE (fn) == TEMPLATE_DECL
10205 && !PRIMARY_TEMPLATE_P (fn))
10206 fn = DECL_TEMPLATE_RESULT (fn);
10207 /* Check to see that the declaration is really present, and,
10208 possibly obtain an improved declaration. */
10209 fn = check_classfn (context, fn, NULL_TREE);
10211 if (fn)
10212 new_friend = fn;
10216 return new_friend;
10219 /* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
10220 template arguments, as for tsubst.
10222 Returns an appropriate tsubst'd friend type or error_mark_node on
10223 failure. */
10225 static tree
10226 tsubst_friend_class (tree friend_tmpl, tree args)
10228 tree tmpl;
10230 if (DECL_TEMPLATE_TEMPLATE_PARM_P (friend_tmpl))
10232 tmpl = tsubst (TREE_TYPE (friend_tmpl), args, tf_none, NULL_TREE);
10233 return TREE_TYPE (tmpl);
10236 tree context = CP_DECL_CONTEXT (friend_tmpl);
10237 if (TREE_CODE (context) == NAMESPACE_DECL)
10238 push_nested_namespace (context);
10239 else
10240 push_nested_class (context);
10242 tmpl = lookup_name_real (DECL_NAME (friend_tmpl), /*prefer_type=*/false,
10243 /*non_class=*/false, /*block_p=*/false,
10244 /*namespaces_only=*/false, LOOKUP_HIDDEN);
10246 if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
10248 /* The friend template has already been declared. Just
10249 check to see that the declarations match, and install any new
10250 default parameters. We must tsubst the default parameters,
10251 of course. We only need the innermost template parameters
10252 because that is all that redeclare_class_template will look
10253 at. */
10254 if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
10255 > TMPL_ARGS_DEPTH (args))
10257 tree parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
10258 args, tf_warning_or_error);
10259 location_t saved_input_location = input_location;
10260 input_location = DECL_SOURCE_LOCATION (friend_tmpl);
10261 tree cons = get_constraints (tmpl);
10262 redeclare_class_template (TREE_TYPE (tmpl), parms, cons);
10263 input_location = saved_input_location;
10266 else
10268 /* The friend template has not already been declared. In this
10269 case, the instantiation of the template class will cause the
10270 injection of this template into the namespace scope. */
10271 tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
10273 if (tmpl != error_mark_node)
10275 /* The new TMPL is not an instantiation of anything, so we
10276 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE
10277 for the new type because that is supposed to be the
10278 corresponding template decl, i.e., TMPL. */
10279 DECL_USE_TEMPLATE (tmpl) = 0;
10280 DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
10281 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
10282 CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
10283 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
10285 /* It is hidden. */
10286 retrofit_lang_decl (DECL_TEMPLATE_RESULT (tmpl));
10287 DECL_ANTICIPATED (tmpl)
10288 = DECL_ANTICIPATED (DECL_TEMPLATE_RESULT (tmpl)) = true;
10290 /* Inject this template into the enclosing namspace scope. */
10291 tmpl = pushdecl_namespace_level (tmpl, true);
10295 if (TREE_CODE (context) == NAMESPACE_DECL)
10296 pop_nested_namespace (context);
10297 else
10298 pop_nested_class ();
10300 return TREE_TYPE (tmpl);
10303 /* Returns zero if TYPE cannot be completed later due to circularity.
10304 Otherwise returns one. */
10306 static int
10307 can_complete_type_without_circularity (tree type)
10309 if (type == NULL_TREE || type == error_mark_node)
10310 return 0;
10311 else if (COMPLETE_TYPE_P (type))
10312 return 1;
10313 else if (TREE_CODE (type) == ARRAY_TYPE)
10314 return can_complete_type_without_circularity (TREE_TYPE (type));
10315 else if (CLASS_TYPE_P (type)
10316 && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
10317 return 0;
10318 else
10319 return 1;
10322 static tree tsubst_omp_clauses (tree, enum c_omp_region_type, tree,
10323 tsubst_flags_t, tree);
10325 /* Instantiate a single dependent attribute T (a TREE_LIST), and return either
10326 T or a new TREE_LIST, possibly a chain in the case of a pack expansion. */
10328 static tree
10329 tsubst_attribute (tree t, tree *decl_p, tree args,
10330 tsubst_flags_t complain, tree in_decl)
10332 gcc_assert (ATTR_IS_DEPENDENT (t));
10334 tree val = TREE_VALUE (t);
10335 if (val == NULL_TREE)
10336 /* Nothing to do. */;
10337 else if ((flag_openmp || flag_openmp_simd)
10338 && is_attribute_p ("omp declare simd",
10339 get_attribute_name (t)))
10341 tree clauses = TREE_VALUE (val);
10342 clauses = tsubst_omp_clauses (clauses, C_ORT_OMP_DECLARE_SIMD, args,
10343 complain, in_decl);
10344 c_omp_declare_simd_clauses_to_decls (*decl_p, clauses);
10345 clauses = finish_omp_clauses (clauses, C_ORT_OMP_DECLARE_SIMD);
10346 tree parms = DECL_ARGUMENTS (*decl_p);
10347 clauses
10348 = c_omp_declare_simd_clauses_to_numbers (parms, clauses);
10349 if (clauses)
10350 val = build_tree_list (NULL_TREE, clauses);
10351 else
10352 val = NULL_TREE;
10354 /* If the first attribute argument is an identifier, don't
10355 pass it through tsubst. Attributes like mode, format,
10356 cleanup and several target specific attributes expect it
10357 unmodified. */
10358 else if (attribute_takes_identifier_p (get_attribute_name (t)))
10360 tree chain
10361 = tsubst_expr (TREE_CHAIN (val), args, complain, in_decl,
10362 /*integral_constant_expression_p=*/false);
10363 if (chain != TREE_CHAIN (val))
10364 val = tree_cons (NULL_TREE, TREE_VALUE (val), chain);
10366 else if (PACK_EXPANSION_P (val))
10368 /* An attribute pack expansion. */
10369 tree purp = TREE_PURPOSE (t);
10370 tree pack = tsubst_pack_expansion (val, args, complain, in_decl);
10371 if (pack == error_mark_node)
10372 return error_mark_node;
10373 int len = TREE_VEC_LENGTH (pack);
10374 tree list = NULL_TREE;
10375 tree *q = &list;
10376 for (int i = 0; i < len; ++i)
10378 tree elt = TREE_VEC_ELT (pack, i);
10379 *q = build_tree_list (purp, elt);
10380 q = &TREE_CHAIN (*q);
10382 return list;
10384 else
10385 val = tsubst_expr (val, args, complain, in_decl,
10386 /*integral_constant_expression_p=*/false);
10388 if (val != TREE_VALUE (t))
10389 return build_tree_list (TREE_PURPOSE (t), val);
10390 return t;
10393 /* Instantiate any dependent attributes in ATTRIBUTES, returning either it
10394 unchanged or a new TREE_LIST chain. */
10396 static tree
10397 tsubst_attributes (tree attributes, tree args,
10398 tsubst_flags_t complain, tree in_decl)
10400 tree last_dep = NULL_TREE;
10402 for (tree t = attributes; t; t = TREE_CHAIN (t))
10403 if (ATTR_IS_DEPENDENT (t))
10405 last_dep = t;
10406 attributes = copy_list (attributes);
10407 break;
10410 if (last_dep)
10411 for (tree *p = &attributes; *p; )
10413 tree t = *p;
10414 if (ATTR_IS_DEPENDENT (t))
10416 tree subst = tsubst_attribute (t, NULL, args, complain, in_decl);
10417 if (subst != t)
10419 *p = subst;
10420 while (*p)
10421 p = &TREE_CHAIN (*p);
10422 *p = TREE_CHAIN (t);
10423 continue;
10426 p = &TREE_CHAIN (*p);
10429 return attributes;
10432 /* Apply any attributes which had to be deferred until instantiation
10433 time. DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
10434 ARGS, COMPLAIN, IN_DECL are as tsubst. */
10436 static void
10437 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
10438 tree args, tsubst_flags_t complain, tree in_decl)
10440 tree last_dep = NULL_TREE;
10441 tree t;
10442 tree *p;
10444 if (attributes == NULL_TREE)
10445 return;
10447 if (DECL_P (*decl_p))
10449 if (TREE_TYPE (*decl_p) == error_mark_node)
10450 return;
10451 p = &DECL_ATTRIBUTES (*decl_p);
10452 /* DECL_ATTRIBUTES comes from copy_node in tsubst_decl, and is identical
10453 to our attributes parameter. */
10454 gcc_assert (*p == attributes);
10456 else
10458 p = &TYPE_ATTRIBUTES (*decl_p);
10459 /* TYPE_ATTRIBUTES was set up (with abi_tag and may_alias) in
10460 lookup_template_class_1, and should be preserved. */
10461 gcc_assert (*p != attributes);
10462 while (*p)
10463 p = &TREE_CHAIN (*p);
10466 for (t = attributes; t; t = TREE_CHAIN (t))
10467 if (ATTR_IS_DEPENDENT (t))
10469 last_dep = t;
10470 attributes = copy_list (attributes);
10471 break;
10474 *p = attributes;
10475 if (last_dep)
10477 tree late_attrs = NULL_TREE;
10478 tree *q = &late_attrs;
10480 for (; *p; )
10482 t = *p;
10483 if (ATTR_IS_DEPENDENT (t))
10485 *p = TREE_CHAIN (t);
10486 TREE_CHAIN (t) = NULL_TREE;
10487 *q = tsubst_attribute (t, decl_p, args, complain, in_decl);
10488 while (*q)
10489 q = &TREE_CHAIN (*q);
10491 else
10492 p = &TREE_CHAIN (t);
10495 cplus_decl_attributes (decl_p, late_attrs, attr_flags);
10499 /* Perform (or defer) access check for typedefs that were referenced
10500 from within the template TMPL code.
10501 This is a subroutine of instantiate_decl and instantiate_class_template.
10502 TMPL is the template to consider and TARGS is the list of arguments of
10503 that template. */
10505 static void
10506 perform_typedefs_access_check (tree tmpl, tree targs)
10508 location_t saved_location;
10509 unsigned i;
10510 qualified_typedef_usage_t *iter;
10512 if (!tmpl
10513 || (!CLASS_TYPE_P (tmpl)
10514 && TREE_CODE (tmpl) != FUNCTION_DECL))
10515 return;
10517 saved_location = input_location;
10518 FOR_EACH_VEC_SAFE_ELT (get_types_needing_access_check (tmpl), i, iter)
10520 tree type_decl = iter->typedef_decl;
10521 tree type_scope = iter->context;
10523 if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
10524 continue;
10526 if (uses_template_parms (type_decl))
10527 type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
10528 if (uses_template_parms (type_scope))
10529 type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
10531 /* Make access check error messages point to the location
10532 of the use of the typedef. */
10533 input_location = iter->locus;
10534 perform_or_defer_access_check (TYPE_BINFO (type_scope),
10535 type_decl, type_decl,
10536 tf_warning_or_error);
10538 input_location = saved_location;
10541 static tree
10542 instantiate_class_template_1 (tree type)
10544 tree templ, args, pattern, t, member;
10545 tree typedecl;
10546 tree pbinfo;
10547 tree base_list;
10548 unsigned int saved_maximum_field_alignment;
10549 tree fn_context;
10551 if (type == error_mark_node)
10552 return error_mark_node;
10554 if (COMPLETE_OR_OPEN_TYPE_P (type)
10555 || uses_template_parms (type))
10556 return type;
10558 /* Figure out which template is being instantiated. */
10559 templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
10560 gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
10562 /* Mark the type as in the process of being defined. */
10563 TYPE_BEING_DEFINED (type) = 1;
10565 /* Determine what specialization of the original template to
10566 instantiate. */
10567 t = most_specialized_partial_spec (type, tf_warning_or_error);
10568 if (t == error_mark_node)
10569 return error_mark_node;
10570 else if (t)
10572 /* This TYPE is actually an instantiation of a partial
10573 specialization. We replace the innermost set of ARGS with
10574 the arguments appropriate for substitution. For example,
10575 given:
10577 template <class T> struct S {};
10578 template <class T> struct S<T*> {};
10580 and supposing that we are instantiating S<int*>, ARGS will
10581 presently be {int*} -- but we need {int}. */
10582 pattern = TREE_TYPE (t);
10583 args = TREE_PURPOSE (t);
10585 else
10587 pattern = TREE_TYPE (templ);
10588 args = CLASSTYPE_TI_ARGS (type);
10591 /* If the template we're instantiating is incomplete, then clearly
10592 there's nothing we can do. */
10593 if (!COMPLETE_TYPE_P (pattern))
10595 /* We can try again later. */
10596 TYPE_BEING_DEFINED (type) = 0;
10597 return type;
10600 /* If we've recursively instantiated too many templates, stop. */
10601 if (! push_tinst_level (type))
10602 return type;
10604 /* We may be in the middle of deferred access check. Disable
10605 it now. */
10606 push_deferring_access_checks (dk_no_deferred);
10608 int saved_unevaluated_operand = cp_unevaluated_operand;
10609 int saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
10611 fn_context = decl_function_context (TYPE_MAIN_DECL (type));
10612 /* Also avoid push_to_top_level for a lambda in an NSDMI. */
10613 if (!fn_context && LAMBDA_TYPE_P (type) && TYPE_CLASS_SCOPE_P (type))
10614 fn_context = error_mark_node;
10615 if (!fn_context)
10616 push_to_top_level ();
10617 else
10619 cp_unevaluated_operand = 0;
10620 c_inhibit_evaluation_warnings = 0;
10622 /* Use #pragma pack from the template context. */
10623 saved_maximum_field_alignment = maximum_field_alignment;
10624 maximum_field_alignment = TYPE_PRECISION (pattern);
10626 SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
10628 /* Set the input location to the most specialized template definition.
10629 This is needed if tsubsting causes an error. */
10630 typedecl = TYPE_MAIN_DECL (pattern);
10631 input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) =
10632 DECL_SOURCE_LOCATION (typedecl);
10634 TYPE_PACKED (type) = TYPE_PACKED (pattern);
10635 SET_TYPE_ALIGN (type, TYPE_ALIGN (pattern));
10636 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
10637 CLASSTYPE_NON_AGGREGATE (type) = CLASSTYPE_NON_AGGREGATE (pattern);
10638 if (ANON_AGGR_TYPE_P (pattern))
10639 SET_ANON_AGGR_TYPE_P (type);
10640 if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
10642 CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
10643 CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
10644 /* Adjust visibility for template arguments. */
10645 determine_visibility (TYPE_MAIN_DECL (type));
10647 if (CLASS_TYPE_P (type))
10648 CLASSTYPE_FINAL (type) = CLASSTYPE_FINAL (pattern);
10650 pbinfo = TYPE_BINFO (pattern);
10652 /* We should never instantiate a nested class before its enclosing
10653 class; we need to look up the nested class by name before we can
10654 instantiate it, and that lookup should instantiate the enclosing
10655 class. */
10656 gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
10657 || COMPLETE_OR_OPEN_TYPE_P (TYPE_CONTEXT (type)));
10659 base_list = NULL_TREE;
10660 if (BINFO_N_BASE_BINFOS (pbinfo))
10662 tree pbase_binfo;
10663 tree pushed_scope;
10664 int i;
10666 /* We must enter the scope containing the type, as that is where
10667 the accessibility of types named in dependent bases are
10668 looked up from. */
10669 pushed_scope = push_scope (CP_TYPE_CONTEXT (type));
10671 /* Substitute into each of the bases to determine the actual
10672 basetypes. */
10673 for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
10675 tree base;
10676 tree access = BINFO_BASE_ACCESS (pbinfo, i);
10677 tree expanded_bases = NULL_TREE;
10678 int idx, len = 1;
10680 if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
10682 expanded_bases =
10683 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
10684 args, tf_error, NULL_TREE);
10685 if (expanded_bases == error_mark_node)
10686 continue;
10688 len = TREE_VEC_LENGTH (expanded_bases);
10691 for (idx = 0; idx < len; idx++)
10693 if (expanded_bases)
10694 /* Extract the already-expanded base class. */
10695 base = TREE_VEC_ELT (expanded_bases, idx);
10696 else
10697 /* Substitute to figure out the base class. */
10698 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error,
10699 NULL_TREE);
10701 if (base == error_mark_node)
10702 continue;
10704 base_list = tree_cons (access, base, base_list);
10705 if (BINFO_VIRTUAL_P (pbase_binfo))
10706 TREE_TYPE (base_list) = integer_type_node;
10710 /* The list is now in reverse order; correct that. */
10711 base_list = nreverse (base_list);
10713 if (pushed_scope)
10714 pop_scope (pushed_scope);
10716 /* Now call xref_basetypes to set up all the base-class
10717 information. */
10718 xref_basetypes (type, base_list);
10720 apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
10721 (int) ATTR_FLAG_TYPE_IN_PLACE,
10722 args, tf_error, NULL_TREE);
10723 fixup_attribute_variants (type);
10725 /* Now that our base classes are set up, enter the scope of the
10726 class, so that name lookups into base classes, etc. will work
10727 correctly. This is precisely analogous to what we do in
10728 begin_class_definition when defining an ordinary non-template
10729 class, except we also need to push the enclosing classes. */
10730 push_nested_class (type);
10732 /* Now members are processed in the order of declaration. */
10733 for (member = CLASSTYPE_DECL_LIST (pattern);
10734 member; member = TREE_CHAIN (member))
10736 tree t = TREE_VALUE (member);
10738 if (TREE_PURPOSE (member))
10740 if (TYPE_P (t))
10742 if (LAMBDA_TYPE_P (t))
10743 /* A closure type for a lambda in an NSDMI or default argument.
10744 Ignore it; it will be regenerated when needed. */
10745 continue;
10747 /* Build new CLASSTYPE_NESTED_UTDS. */
10749 tree newtag;
10750 bool class_template_p;
10752 class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
10753 && TYPE_LANG_SPECIFIC (t)
10754 && CLASSTYPE_IS_TEMPLATE (t));
10755 /* If the member is a class template, then -- even after
10756 substitution -- there may be dependent types in the
10757 template argument list for the class. We increment
10758 PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
10759 that function will assume that no types are dependent
10760 when outside of a template. */
10761 if (class_template_p)
10762 ++processing_template_decl;
10763 newtag = tsubst (t, args, tf_error, NULL_TREE);
10764 if (class_template_p)
10765 --processing_template_decl;
10766 if (newtag == error_mark_node)
10767 continue;
10769 if (TREE_CODE (newtag) != ENUMERAL_TYPE)
10771 tree name = TYPE_IDENTIFIER (t);
10773 if (class_template_p)
10774 /* Unfortunately, lookup_template_class sets
10775 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
10776 instantiation (i.e., for the type of a member
10777 template class nested within a template class.)
10778 This behavior is required for
10779 maybe_process_partial_specialization to work
10780 correctly, but is not accurate in this case;
10781 the TAG is not an instantiation of anything.
10782 (The corresponding TEMPLATE_DECL is an
10783 instantiation, but the TYPE is not.) */
10784 CLASSTYPE_USE_TEMPLATE (newtag) = 0;
10786 /* Now, we call pushtag to put this NEWTAG into the scope of
10787 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
10788 pushtag calling push_template_decl. We don't have to do
10789 this for enums because it will already have been done in
10790 tsubst_enum. */
10791 if (name)
10792 SET_IDENTIFIER_TYPE_VALUE (name, newtag);
10793 pushtag (name, newtag, /*tag_scope=*/ts_current);
10796 else if (DECL_DECLARES_FUNCTION_P (t))
10798 tree r;
10800 if (TREE_CODE (t) == TEMPLATE_DECL)
10801 ++processing_template_decl;
10802 r = tsubst (t, args, tf_error, NULL_TREE);
10803 if (TREE_CODE (t) == TEMPLATE_DECL)
10804 --processing_template_decl;
10805 set_current_access_from_decl (r);
10806 finish_member_declaration (r);
10807 /* Instantiate members marked with attribute used. */
10808 if (r != error_mark_node && DECL_PRESERVE_P (r))
10809 mark_used (r);
10810 if (TREE_CODE (r) == FUNCTION_DECL
10811 && DECL_OMP_DECLARE_REDUCTION_P (r))
10812 cp_check_omp_declare_reduction (r);
10814 else if ((DECL_CLASS_TEMPLATE_P (t) || DECL_IMPLICIT_TYPEDEF_P (t))
10815 && LAMBDA_TYPE_P (TREE_TYPE (t)))
10816 /* A closure type for a lambda in an NSDMI or default argument.
10817 Ignore it; it will be regenerated when needed. */;
10818 else
10820 /* Build new TYPE_FIELDS. */
10821 if (TREE_CODE (t) == STATIC_ASSERT)
10823 tree condition;
10825 ++c_inhibit_evaluation_warnings;
10826 condition =
10827 tsubst_expr (STATIC_ASSERT_CONDITION (t), args,
10828 tf_warning_or_error, NULL_TREE,
10829 /*integral_constant_expression_p=*/true);
10830 --c_inhibit_evaluation_warnings;
10832 finish_static_assert (condition,
10833 STATIC_ASSERT_MESSAGE (t),
10834 STATIC_ASSERT_SOURCE_LOCATION (t),
10835 /*member_p=*/true);
10837 else if (TREE_CODE (t) != CONST_DECL)
10839 tree r;
10840 tree vec = NULL_TREE;
10841 int len = 1;
10843 /* The file and line for this declaration, to
10844 assist in error message reporting. Since we
10845 called push_tinst_level above, we don't need to
10846 restore these. */
10847 input_location = DECL_SOURCE_LOCATION (t);
10849 if (TREE_CODE (t) == TEMPLATE_DECL)
10850 ++processing_template_decl;
10851 r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
10852 if (TREE_CODE (t) == TEMPLATE_DECL)
10853 --processing_template_decl;
10855 if (TREE_CODE (r) == TREE_VEC)
10857 /* A capture pack became multiple fields. */
10858 vec = r;
10859 len = TREE_VEC_LENGTH (vec);
10862 for (int i = 0; i < len; ++i)
10864 if (vec)
10865 r = TREE_VEC_ELT (vec, i);
10866 if (VAR_P (r))
10868 /* In [temp.inst]:
10870 [t]he initialization (and any associated
10871 side-effects) of a static data member does
10872 not occur unless the static data member is
10873 itself used in a way that requires the
10874 definition of the static data member to
10875 exist.
10877 Therefore, we do not substitute into the
10878 initialized for the static data member here. */
10879 finish_static_data_member_decl
10881 /*init=*/NULL_TREE,
10882 /*init_const_expr_p=*/false,
10883 /*asmspec_tree=*/NULL_TREE,
10884 /*flags=*/0);
10885 /* Instantiate members marked with attribute used. */
10886 if (r != error_mark_node && DECL_PRESERVE_P (r))
10887 mark_used (r);
10889 else if (TREE_CODE (r) == FIELD_DECL)
10891 /* Determine whether R has a valid type and can be
10892 completed later. If R is invalid, then its type
10893 is replaced by error_mark_node. */
10894 tree rtype = TREE_TYPE (r);
10895 if (can_complete_type_without_circularity (rtype))
10896 complete_type (rtype);
10898 if (!complete_or_array_type_p (rtype))
10900 /* If R's type couldn't be completed and
10901 it isn't a flexible array member (whose
10902 type is incomplete by definition) give
10903 an error. */
10904 cxx_incomplete_type_error (r, rtype);
10905 TREE_TYPE (r) = error_mark_node;
10909 /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
10910 such a thing will already have been added to the field
10911 list by tsubst_enum in finish_member_declaration in the
10912 CLASSTYPE_NESTED_UTDS case above. */
10913 if (!(TREE_CODE (r) == TYPE_DECL
10914 && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
10915 && DECL_ARTIFICIAL (r)))
10917 set_current_access_from_decl (r);
10918 finish_member_declaration (r);
10924 else
10926 if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t)
10927 || DECL_TEMPLATE_TEMPLATE_PARM_P (t))
10929 /* Build new CLASSTYPE_FRIEND_CLASSES. */
10931 tree friend_type = t;
10932 bool adjust_processing_template_decl = false;
10934 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
10936 /* template <class T> friend class C; */
10937 friend_type = tsubst_friend_class (friend_type, args);
10938 adjust_processing_template_decl = true;
10940 else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
10942 /* template <class T> friend class C::D; */
10943 friend_type = tsubst (friend_type, args,
10944 tf_warning_or_error, NULL_TREE);
10945 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
10946 friend_type = TREE_TYPE (friend_type);
10947 adjust_processing_template_decl = true;
10949 else if (TREE_CODE (friend_type) == TYPENAME_TYPE
10950 || TREE_CODE (friend_type) == TEMPLATE_TYPE_PARM)
10952 /* This could be either
10954 friend class T::C;
10956 when dependent_type_p is false or
10958 template <class U> friend class T::C;
10960 otherwise. */
10961 /* Bump processing_template_decl in case this is something like
10962 template <class T> friend struct A<T>::B. */
10963 ++processing_template_decl;
10964 friend_type = tsubst (friend_type, args,
10965 tf_warning_or_error, NULL_TREE);
10966 if (dependent_type_p (friend_type))
10967 adjust_processing_template_decl = true;
10968 --processing_template_decl;
10970 else if (TREE_CODE (friend_type) != BOUND_TEMPLATE_TEMPLATE_PARM
10971 && !CLASSTYPE_USE_TEMPLATE (friend_type)
10972 && TYPE_HIDDEN_P (friend_type))
10974 /* friend class C;
10976 where C hasn't been declared yet. Let's lookup name
10977 from namespace scope directly, bypassing any name that
10978 come from dependent base class. */
10979 tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
10981 /* The call to xref_tag_from_type does injection for friend
10982 classes. */
10983 push_nested_namespace (ns);
10984 friend_type =
10985 xref_tag_from_type (friend_type, NULL_TREE,
10986 /*tag_scope=*/ts_current);
10987 pop_nested_namespace (ns);
10989 else if (uses_template_parms (friend_type))
10990 /* friend class C<T>; */
10991 friend_type = tsubst (friend_type, args,
10992 tf_warning_or_error, NULL_TREE);
10993 /* Otherwise it's
10995 friend class C;
10997 where C is already declared or
10999 friend class C<int>;
11001 We don't have to do anything in these cases. */
11003 if (adjust_processing_template_decl)
11004 /* Trick make_friend_class into realizing that the friend
11005 we're adding is a template, not an ordinary class. It's
11006 important that we use make_friend_class since it will
11007 perform some error-checking and output cross-reference
11008 information. */
11009 ++processing_template_decl;
11011 if (friend_type != error_mark_node)
11012 make_friend_class (type, friend_type, /*complain=*/false);
11014 if (adjust_processing_template_decl)
11015 --processing_template_decl;
11017 else
11019 /* Build new DECL_FRIENDLIST. */
11020 tree r;
11022 /* The file and line for this declaration, to
11023 assist in error message reporting. Since we
11024 called push_tinst_level above, we don't need to
11025 restore these. */
11026 input_location = DECL_SOURCE_LOCATION (t);
11028 if (TREE_CODE (t) == TEMPLATE_DECL)
11030 ++processing_template_decl;
11031 push_deferring_access_checks (dk_no_check);
11034 r = tsubst_friend_function (t, args);
11035 add_friend (type, r, /*complain=*/false);
11036 if (TREE_CODE (t) == TEMPLATE_DECL)
11038 pop_deferring_access_checks ();
11039 --processing_template_decl;
11045 if (fn_context)
11047 /* Restore these before substituting into the lambda capture
11048 initializers. */
11049 cp_unevaluated_operand = saved_unevaluated_operand;
11050 c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
11053 /* Set the file and line number information to whatever is given for
11054 the class itself. This puts error messages involving generated
11055 implicit functions at a predictable point, and the same point
11056 that would be used for non-template classes. */
11057 input_location = DECL_SOURCE_LOCATION (typedecl);
11059 unreverse_member_declarations (type);
11060 finish_struct_1 (type);
11061 TYPE_BEING_DEFINED (type) = 0;
11063 /* We don't instantiate default arguments for member functions. 14.7.1:
11065 The implicit instantiation of a class template specialization causes
11066 the implicit instantiation of the declarations, but not of the
11067 definitions or default arguments, of the class member functions,
11068 member classes, static data members and member templates.... */
11070 /* Some typedefs referenced from within the template code need to be access
11071 checked at template instantiation time, i.e now. These types were
11072 added to the template at parsing time. Let's get those and perform
11073 the access checks then. */
11074 perform_typedefs_access_check (pattern, args);
11075 perform_deferred_access_checks (tf_warning_or_error);
11076 pop_nested_class ();
11077 maximum_field_alignment = saved_maximum_field_alignment;
11078 if (!fn_context)
11079 pop_from_top_level ();
11080 pop_deferring_access_checks ();
11081 pop_tinst_level ();
11083 /* The vtable for a template class can be emitted in any translation
11084 unit in which the class is instantiated. When there is no key
11085 method, however, finish_struct_1 will already have added TYPE to
11086 the keyed_classes. */
11087 if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
11088 vec_safe_push (keyed_classes, type);
11090 return type;
11093 /* Wrapper for instantiate_class_template_1. */
11095 tree
11096 instantiate_class_template (tree type)
11098 tree ret;
11099 timevar_push (TV_TEMPLATE_INST);
11100 ret = instantiate_class_template_1 (type);
11101 timevar_pop (TV_TEMPLATE_INST);
11102 return ret;
11105 static tree
11106 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11108 tree r;
11110 if (!t)
11111 r = t;
11112 else if (TYPE_P (t))
11113 r = tsubst (t, args, complain, in_decl);
11114 else
11116 if (!(complain & tf_warning))
11117 ++c_inhibit_evaluation_warnings;
11118 r = tsubst_expr (t, args, complain, in_decl,
11119 /*integral_constant_expression_p=*/true);
11120 if (!(complain & tf_warning))
11121 --c_inhibit_evaluation_warnings;
11123 return r;
11126 /* Given a function parameter pack TMPL_PARM and some function parameters
11127 instantiated from it at *SPEC_P, return a NONTYPE_ARGUMENT_PACK of them
11128 and set *SPEC_P to point at the next point in the list. */
11130 tree
11131 extract_fnparm_pack (tree tmpl_parm, tree *spec_p)
11133 /* Collect all of the extra "packed" parameters into an
11134 argument pack. */
11135 tree parmvec;
11136 tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
11137 tree spec_parm = *spec_p;
11138 int i, len;
11140 for (len = 0; spec_parm; ++len, spec_parm = TREE_CHAIN (spec_parm))
11141 if (tmpl_parm
11142 && !function_parameter_expanded_from_pack_p (spec_parm, tmpl_parm))
11143 break;
11145 /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters. */
11146 parmvec = make_tree_vec (len);
11147 spec_parm = *spec_p;
11148 for (i = 0; i < len; i++, spec_parm = DECL_CHAIN (spec_parm))
11150 tree elt = spec_parm;
11151 if (DECL_PACK_P (elt))
11152 elt = make_pack_expansion (elt);
11153 TREE_VEC_ELT (parmvec, i) = elt;
11156 /* Build the argument packs. */
11157 SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
11158 *spec_p = spec_parm;
11160 return argpack;
11163 /* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
11164 NONTYPE_ARGUMENT_PACK. */
11166 static tree
11167 make_fnparm_pack (tree spec_parm)
11169 return extract_fnparm_pack (NULL_TREE, &spec_parm);
11172 /* Return 1 if the Ith element of the argument pack ARG_PACK is a
11173 pack expansion with no extra args, 2 if it has extra args, or 0
11174 if it is not a pack expansion. */
11176 static int
11177 argument_pack_element_is_expansion_p (tree arg_pack, int i)
11179 tree vec = ARGUMENT_PACK_ARGS (arg_pack);
11180 if (i >= TREE_VEC_LENGTH (vec))
11181 return 0;
11182 tree elt = TREE_VEC_ELT (vec, i);
11183 if (DECL_P (elt))
11184 /* A decl pack is itself an expansion. */
11185 elt = TREE_TYPE (elt);
11186 if (!PACK_EXPANSION_P (elt))
11187 return 0;
11188 if (PACK_EXPANSION_EXTRA_ARGS (elt))
11189 return 2;
11190 return 1;
11194 /* Creates and return an ARGUMENT_PACK_SELECT tree node. */
11196 static tree
11197 make_argument_pack_select (tree arg_pack, unsigned index)
11199 tree aps = make_node (ARGUMENT_PACK_SELECT);
11201 ARGUMENT_PACK_SELECT_FROM_PACK (aps) = arg_pack;
11202 ARGUMENT_PACK_SELECT_INDEX (aps) = index;
11204 return aps;
11207 /* This is a subroutine of tsubst_pack_expansion.
11209 It returns TRUE if we need to use the PACK_EXPANSION_EXTRA_ARGS
11210 mechanism to store the (non complete list of) arguments of the
11211 substitution and return a non substituted pack expansion, in order
11212 to wait for when we have enough arguments to really perform the
11213 substitution. */
11215 static bool
11216 use_pack_expansion_extra_args_p (tree parm_packs,
11217 int arg_pack_len,
11218 bool has_empty_arg)
11220 /* If one pack has an expansion and another pack has a normal
11221 argument or if one pack has an empty argument and an another
11222 one hasn't then tsubst_pack_expansion cannot perform the
11223 substitution and need to fall back on the
11224 PACK_EXPANSION_EXTRA mechanism. */
11225 if (parm_packs == NULL_TREE)
11226 return false;
11227 else if (has_empty_arg)
11228 return true;
11230 bool has_expansion_arg = false;
11231 for (int i = 0 ; i < arg_pack_len; ++i)
11233 bool has_non_expansion_arg = false;
11234 for (tree parm_pack = parm_packs;
11235 parm_pack;
11236 parm_pack = TREE_CHAIN (parm_pack))
11238 tree arg = TREE_VALUE (parm_pack);
11240 int exp = argument_pack_element_is_expansion_p (arg, i);
11241 if (exp == 2)
11242 /* We can't substitute a pack expansion with extra args into
11243 our pattern. */
11244 return true;
11245 else if (exp)
11246 has_expansion_arg = true;
11247 else
11248 has_non_expansion_arg = true;
11251 if (has_expansion_arg && has_non_expansion_arg)
11252 return true;
11254 return false;
11257 /* [temp.variadic]/6 says that:
11259 The instantiation of a pack expansion [...]
11260 produces a list E1,E2, ..., En, where N is the number of elements
11261 in the pack expansion parameters.
11263 This subroutine of tsubst_pack_expansion produces one of these Ei.
11265 PATTERN is the pattern of the pack expansion. PARM_PACKS is a
11266 TREE_LIST in which each TREE_PURPOSE is a parameter pack of
11267 PATTERN, and each TREE_VALUE is its corresponding argument pack.
11268 INDEX is the index 'i' of the element Ei to produce. ARGS,
11269 COMPLAIN, and IN_DECL are the same parameters as for the
11270 tsubst_pack_expansion function.
11272 The function returns the resulting Ei upon successful completion,
11273 or error_mark_node.
11275 Note that this function possibly modifies the ARGS parameter, so
11276 it's the responsibility of the caller to restore it. */
11278 static tree
11279 gen_elem_of_pack_expansion_instantiation (tree pattern,
11280 tree parm_packs,
11281 unsigned index,
11282 tree args /* This parm gets
11283 modified. */,
11284 tsubst_flags_t complain,
11285 tree in_decl)
11287 tree t;
11288 bool ith_elem_is_expansion = false;
11290 /* For each parameter pack, change the substitution of the parameter
11291 pack to the ith argument in its argument pack, then expand the
11292 pattern. */
11293 for (tree pack = parm_packs; pack; pack = TREE_CHAIN (pack))
11295 tree parm = TREE_PURPOSE (pack);
11296 tree arg_pack = TREE_VALUE (pack);
11297 tree aps; /* instance of ARGUMENT_PACK_SELECT. */
11299 ith_elem_is_expansion |=
11300 argument_pack_element_is_expansion_p (arg_pack, index);
11302 /* Select the Ith argument from the pack. */
11303 if (TREE_CODE (parm) == PARM_DECL
11304 || VAR_P (parm)
11305 || TREE_CODE (parm) == FIELD_DECL)
11307 if (index == 0)
11309 aps = make_argument_pack_select (arg_pack, index);
11310 if (!mark_used (parm, complain) && !(complain & tf_error))
11311 return error_mark_node;
11312 register_local_specialization (aps, parm);
11314 else
11315 aps = retrieve_local_specialization (parm);
11317 else
11319 int idx, level;
11320 template_parm_level_and_index (parm, &level, &idx);
11322 if (index == 0)
11324 aps = make_argument_pack_select (arg_pack, index);
11325 /* Update the corresponding argument. */
11326 TMPL_ARG (args, level, idx) = aps;
11328 else
11329 /* Re-use the ARGUMENT_PACK_SELECT. */
11330 aps = TMPL_ARG (args, level, idx);
11332 ARGUMENT_PACK_SELECT_INDEX (aps) = index;
11335 /* Substitute into the PATTERN with the (possibly altered)
11336 arguments. */
11337 if (pattern == in_decl)
11338 /* Expanding a fixed parameter pack from
11339 coerce_template_parameter_pack. */
11340 t = tsubst_decl (pattern, args, complain);
11341 else if (pattern == error_mark_node)
11342 t = error_mark_node;
11343 else if (constraint_p (pattern))
11345 if (processing_template_decl)
11346 t = tsubst_constraint (pattern, args, complain, in_decl);
11347 else
11348 t = (constraints_satisfied_p (pattern, args)
11349 ? boolean_true_node : boolean_false_node);
11351 else if (!TYPE_P (pattern))
11352 t = tsubst_expr (pattern, args, complain, in_decl,
11353 /*integral_constant_expression_p=*/false);
11354 else
11355 t = tsubst (pattern, args, complain, in_decl);
11357 /* If the Ith argument pack element is a pack expansion, then
11358 the Ith element resulting from the substituting is going to
11359 be a pack expansion as well. */
11360 if (ith_elem_is_expansion)
11361 t = make_pack_expansion (t, complain);
11363 return t;
11366 /* When the unexpanded parameter pack in a fold expression expands to an empty
11367 sequence, the value of the expression is as follows; the program is
11368 ill-formed if the operator is not listed in this table.
11370 && true
11371 || false
11372 , void() */
11374 tree
11375 expand_empty_fold (tree t, tsubst_flags_t complain)
11377 tree_code code = (tree_code)TREE_INT_CST_LOW (TREE_OPERAND (t, 0));
11378 if (!FOLD_EXPR_MODIFY_P (t))
11379 switch (code)
11381 case TRUTH_ANDIF_EXPR:
11382 return boolean_true_node;
11383 case TRUTH_ORIF_EXPR:
11384 return boolean_false_node;
11385 case COMPOUND_EXPR:
11386 return void_node;
11387 default:
11388 break;
11391 if (complain & tf_error)
11392 error_at (location_of (t),
11393 "fold of empty expansion over %O", code);
11394 return error_mark_node;
11397 /* Given a fold-expression T and a current LEFT and RIGHT operand,
11398 form an expression that combines the two terms using the
11399 operator of T. */
11401 static tree
11402 fold_expression (tree t, tree left, tree right, tsubst_flags_t complain)
11404 tree op = FOLD_EXPR_OP (t);
11405 tree_code code = (tree_code)TREE_INT_CST_LOW (op);
11407 // Handle compound assignment operators.
11408 if (FOLD_EXPR_MODIFY_P (t))
11409 return build_x_modify_expr (input_location, left, code, right, complain);
11411 switch (code)
11413 case COMPOUND_EXPR:
11414 return build_x_compound_expr (input_location, left, right, complain);
11415 case DOTSTAR_EXPR:
11416 return build_m_component_ref (left, right, complain);
11417 default:
11418 return build_x_binary_op (input_location, code,
11419 left, TREE_CODE (left),
11420 right, TREE_CODE (right),
11421 /*overload=*/NULL,
11422 complain);
11426 /* Substitute ARGS into the pack of a fold expression T. */
11428 static inline tree
11429 tsubst_fold_expr_pack (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11431 return tsubst_pack_expansion (FOLD_EXPR_PACK (t), args, complain, in_decl);
11434 /* Substitute ARGS into the pack of a fold expression T. */
11436 static inline tree
11437 tsubst_fold_expr_init (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11439 return tsubst_expr (FOLD_EXPR_INIT (t), args, complain, in_decl, false);
11442 /* Expand a PACK of arguments into a grouped as left fold.
11443 Given a pack containing elements A0, A1, ..., An and an
11444 operator @, this builds the expression:
11446 ((A0 @ A1) @ A2) ... @ An
11448 Note that PACK must not be empty.
11450 The operator is defined by the original fold expression T. */
11452 static tree
11453 expand_left_fold (tree t, tree pack, tsubst_flags_t complain)
11455 tree left = TREE_VEC_ELT (pack, 0);
11456 for (int i = 1; i < TREE_VEC_LENGTH (pack); ++i)
11458 tree right = TREE_VEC_ELT (pack, i);
11459 left = fold_expression (t, left, right, complain);
11461 return left;
11464 /* Substitute into a unary left fold expression. */
11466 static tree
11467 tsubst_unary_left_fold (tree t, tree args, tsubst_flags_t complain,
11468 tree in_decl)
11470 tree pack = tsubst_fold_expr_pack (t, args, complain, in_decl);
11471 if (pack == error_mark_node)
11472 return error_mark_node;
11473 if (PACK_EXPANSION_P (pack))
11475 tree r = copy_node (t);
11476 FOLD_EXPR_PACK (r) = pack;
11477 return r;
11479 if (TREE_VEC_LENGTH (pack) == 0)
11480 return expand_empty_fold (t, complain);
11481 else
11482 return expand_left_fold (t, pack, complain);
11485 /* Substitute into a binary left fold expression.
11487 Do ths by building a single (non-empty) vector of argumnts and
11488 building the expression from those elements. */
11490 static tree
11491 tsubst_binary_left_fold (tree t, tree args, tsubst_flags_t complain,
11492 tree in_decl)
11494 tree pack = tsubst_fold_expr_pack (t, args, complain, in_decl);
11495 if (pack == error_mark_node)
11496 return error_mark_node;
11497 tree init = tsubst_fold_expr_init (t, args, complain, in_decl);
11498 if (init == error_mark_node)
11499 return error_mark_node;
11501 if (PACK_EXPANSION_P (pack))
11503 tree r = copy_node (t);
11504 FOLD_EXPR_PACK (r) = pack;
11505 FOLD_EXPR_INIT (r) = init;
11506 return r;
11509 tree vec = make_tree_vec (TREE_VEC_LENGTH (pack) + 1);
11510 TREE_VEC_ELT (vec, 0) = init;
11511 for (int i = 0; i < TREE_VEC_LENGTH (pack); ++i)
11512 TREE_VEC_ELT (vec, i + 1) = TREE_VEC_ELT (pack, i);
11514 return expand_left_fold (t, vec, complain);
11517 /* Expand a PACK of arguments into a grouped as right fold.
11518 Given a pack containing elementns A0, A1, ..., and an
11519 operator @, this builds the expression:
11521 A0@ ... (An-2 @ (An-1 @ An))
11523 Note that PACK must not be empty.
11525 The operator is defined by the original fold expression T. */
11527 tree
11528 expand_right_fold (tree t, tree pack, tsubst_flags_t complain)
11530 // Build the expression.
11531 int n = TREE_VEC_LENGTH (pack);
11532 tree right = TREE_VEC_ELT (pack, n - 1);
11533 for (--n; n != 0; --n)
11535 tree left = TREE_VEC_ELT (pack, n - 1);
11536 right = fold_expression (t, left, right, complain);
11538 return right;
11541 /* Substitute into a unary right fold expression. */
11543 static tree
11544 tsubst_unary_right_fold (tree t, tree args, tsubst_flags_t complain,
11545 tree in_decl)
11547 tree pack = tsubst_fold_expr_pack (t, args, complain, in_decl);
11548 if (pack == error_mark_node)
11549 return error_mark_node;
11550 if (PACK_EXPANSION_P (pack))
11552 tree r = copy_node (t);
11553 FOLD_EXPR_PACK (r) = pack;
11554 return r;
11556 if (TREE_VEC_LENGTH (pack) == 0)
11557 return expand_empty_fold (t, complain);
11558 else
11559 return expand_right_fold (t, pack, complain);
11562 /* Substitute into a binary right fold expression.
11564 Do ths by building a single (non-empty) vector of arguments and
11565 building the expression from those elements. */
11567 static tree
11568 tsubst_binary_right_fold (tree t, tree args, tsubst_flags_t complain,
11569 tree in_decl)
11571 tree pack = tsubst_fold_expr_pack (t, args, complain, in_decl);
11572 if (pack == error_mark_node)
11573 return error_mark_node;
11574 tree init = tsubst_fold_expr_init (t, args, complain, in_decl);
11575 if (init == error_mark_node)
11576 return error_mark_node;
11578 if (PACK_EXPANSION_P (pack))
11580 tree r = copy_node (t);
11581 FOLD_EXPR_PACK (r) = pack;
11582 FOLD_EXPR_INIT (r) = init;
11583 return r;
11586 int n = TREE_VEC_LENGTH (pack);
11587 tree vec = make_tree_vec (n + 1);
11588 for (int i = 0; i < n; ++i)
11589 TREE_VEC_ELT (vec, i) = TREE_VEC_ELT (pack, i);
11590 TREE_VEC_ELT (vec, n) = init;
11592 return expand_right_fold (t, vec, complain);
11595 /* Walk through the pattern of a pack expansion, adding everything in
11596 local_specializations to a list. */
11598 struct el_data
11600 tree extra;
11601 tsubst_flags_t complain;
11603 static tree
11604 extract_locals_r (tree *tp, int */*walk_subtrees*/, void *data_)
11606 el_data &data = *reinterpret_cast<el_data*>(data_);
11607 tree *extra = &data.extra;
11608 tsubst_flags_t complain = data.complain;
11609 if (tree spec = retrieve_local_specialization (*tp))
11611 if (TREE_CODE (spec) == NONTYPE_ARGUMENT_PACK)
11613 /* Maybe pull out the PARM_DECL for a partial instantiation. */
11614 tree args = ARGUMENT_PACK_ARGS (spec);
11615 if (TREE_VEC_LENGTH (args) == 1)
11617 tree elt = TREE_VEC_ELT (args, 0);
11618 if (PACK_EXPANSION_P (elt))
11619 elt = PACK_EXPANSION_PATTERN (elt);
11620 if (DECL_PACK_P (elt))
11621 spec = elt;
11623 if (TREE_CODE (spec) == NONTYPE_ARGUMENT_PACK)
11625 /* Handle lambda capture here, since we aren't doing any
11626 substitution now, and so tsubst_copy won't call
11627 process_outer_var_ref. */
11628 tree args = ARGUMENT_PACK_ARGS (spec);
11629 int len = TREE_VEC_LENGTH (args);
11630 for (int i = 0; i < len; ++i)
11632 tree arg = TREE_VEC_ELT (args, i);
11633 tree carg = arg;
11634 if (outer_automatic_var_p (arg))
11635 carg = process_outer_var_ref (arg, complain);
11636 if (carg != arg)
11638 /* Make a new NONTYPE_ARGUMENT_PACK of the capture
11639 proxies. */
11640 if (i == 0)
11642 spec = copy_node (spec);
11643 args = copy_node (args);
11644 SET_ARGUMENT_PACK_ARGS (spec, args);
11645 register_local_specialization (spec, *tp);
11647 TREE_VEC_ELT (args, i) = carg;
11652 if (outer_automatic_var_p (spec))
11653 spec = process_outer_var_ref (spec, complain);
11654 *extra = tree_cons (*tp, spec, *extra);
11656 return NULL_TREE;
11658 static tree
11659 extract_local_specs (tree pattern, tsubst_flags_t complain)
11661 el_data data = { NULL_TREE, complain };
11662 cp_walk_tree_without_duplicates (&pattern, extract_locals_r, &data);
11663 return data.extra;
11666 /* Extract any uses of local_specializations from PATTERN and add them to ARGS
11667 for use in PACK_EXPANSION_EXTRA_ARGS. */
11669 tree
11670 build_extra_args (tree pattern, tree args, tsubst_flags_t complain)
11672 tree extra = args;
11673 if (local_specializations)
11674 if (tree locals = extract_local_specs (pattern, complain))
11675 extra = tree_cons (NULL_TREE, extra, locals);
11676 return extra;
11679 /* Apply any local specializations from PACK_EXPANSION_EXTRA_ARGS and add the
11680 normal template args to ARGS. */
11682 tree
11683 add_extra_args (tree extra, tree args)
11685 if (extra && TREE_CODE (extra) == TREE_LIST)
11687 for (tree elt = TREE_CHAIN (extra); elt; elt = TREE_CHAIN (elt))
11689 /* The partial instantiation involved local declarations collected in
11690 extract_local_specs; map from the general template to our local
11691 context. */
11692 tree gen = TREE_PURPOSE (elt);
11693 tree inst = TREE_VALUE (elt);
11694 if (DECL_P (inst))
11695 if (tree local = retrieve_local_specialization (inst))
11696 inst = local;
11697 /* else inst is already a full instantiation of the pack. */
11698 register_local_specialization (inst, gen);
11700 gcc_assert (!TREE_PURPOSE (extra));
11701 extra = TREE_VALUE (extra);
11703 return add_to_template_args (extra, args);
11706 /* Substitute ARGS into T, which is an pack expansion
11707 (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
11708 TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
11709 (if only a partial substitution could be performed) or
11710 ERROR_MARK_NODE if there was an error. */
11711 tree
11712 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
11713 tree in_decl)
11715 tree pattern;
11716 tree pack, packs = NULL_TREE;
11717 bool unsubstituted_packs = false;
11718 bool unsubstituted_fn_pack = false;
11719 int i, len = -1;
11720 tree result;
11721 hash_map<tree, tree> *saved_local_specializations = NULL;
11722 bool need_local_specializations = false;
11723 int levels;
11725 gcc_assert (PACK_EXPANSION_P (t));
11726 pattern = PACK_EXPANSION_PATTERN (t);
11728 /* Add in any args remembered from an earlier partial instantiation. */
11729 args = add_extra_args (PACK_EXPANSION_EXTRA_ARGS (t), args);
11731 levels = TMPL_ARGS_DEPTH (args);
11733 /* Determine the argument packs that will instantiate the parameter
11734 packs used in the expansion expression. While we're at it,
11735 compute the number of arguments to be expanded and make sure it
11736 is consistent. */
11737 for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack;
11738 pack = TREE_CHAIN (pack))
11740 tree parm_pack = TREE_VALUE (pack);
11741 tree arg_pack = NULL_TREE;
11742 tree orig_arg = NULL_TREE;
11743 int level = 0;
11745 if (TREE_CODE (parm_pack) == BASES)
11747 gcc_assert (parm_pack == pattern);
11748 if (BASES_DIRECT (parm_pack))
11749 return calculate_direct_bases (tsubst_expr (BASES_TYPE (parm_pack),
11750 args, complain,
11751 in_decl, false),
11752 complain);
11753 else
11754 return calculate_bases (tsubst_expr (BASES_TYPE (parm_pack),
11755 args, complain, in_decl,
11756 false), complain);
11758 else if (builtin_pack_call_p (parm_pack))
11760 /* ??? Support use in other patterns. */
11761 gcc_assert (parm_pack == pattern);
11762 return expand_builtin_pack_call (parm_pack, args,
11763 complain, in_decl);
11765 else if (TREE_CODE (parm_pack) == PARM_DECL)
11767 /* We know we have correct local_specializations if this
11768 expansion is at function scope, or if we're dealing with a
11769 local parameter in a requires expression; for the latter,
11770 tsubst_requires_expr set it up appropriately. */
11771 if (PACK_EXPANSION_LOCAL_P (t) || CONSTRAINT_VAR_P (parm_pack))
11772 arg_pack = retrieve_local_specialization (parm_pack);
11773 else
11774 /* We can't rely on local_specializations for a parameter
11775 name used later in a function declaration (such as in a
11776 late-specified return type). Even if it exists, it might
11777 have the wrong value for a recursive call. */
11778 need_local_specializations = true;
11780 if (!arg_pack)
11782 /* This parameter pack was used in an unevaluated context. Just
11783 make a dummy decl, since it's only used for its type. */
11784 ++cp_unevaluated_operand;
11785 arg_pack = tsubst_decl (parm_pack, args, complain);
11786 --cp_unevaluated_operand;
11787 if (arg_pack && DECL_PACK_P (arg_pack))
11788 /* Partial instantiation of the parm_pack, we can't build
11789 up an argument pack yet. */
11790 arg_pack = NULL_TREE;
11791 else
11792 arg_pack = make_fnparm_pack (arg_pack);
11794 else if (argument_pack_element_is_expansion_p (arg_pack, 0))
11795 /* This argument pack isn't fully instantiated yet. We set this
11796 flag rather than clear arg_pack because we do want to do the
11797 optimization below, and we don't want to substitute directly
11798 into the pattern (as that would expose a NONTYPE_ARGUMENT_PACK
11799 where it isn't expected). */
11800 unsubstituted_fn_pack = true;
11802 else if (is_normal_capture_proxy (parm_pack))
11804 arg_pack = retrieve_local_specialization (parm_pack);
11805 if (argument_pack_element_is_expansion_p (arg_pack, 0))
11806 unsubstituted_fn_pack = true;
11808 else
11810 int idx;
11811 template_parm_level_and_index (parm_pack, &level, &idx);
11813 if (level <= levels)
11814 arg_pack = TMPL_ARG (args, level, idx);
11817 orig_arg = arg_pack;
11818 if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
11819 arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
11821 if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
11822 /* This can only happen if we forget to expand an argument
11823 pack somewhere else. Just return an error, silently. */
11825 result = make_tree_vec (1);
11826 TREE_VEC_ELT (result, 0) = error_mark_node;
11827 return result;
11830 if (arg_pack)
11832 int my_len =
11833 TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
11835 /* Don't bother trying to do a partial substitution with
11836 incomplete packs; we'll try again after deduction. */
11837 if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
11838 return t;
11840 if (len < 0)
11841 len = my_len;
11842 else if (len != my_len
11843 && !unsubstituted_fn_pack)
11845 if (!(complain & tf_error))
11846 /* Fail quietly. */;
11847 else if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
11848 error ("mismatched argument pack lengths while expanding %qT",
11849 pattern);
11850 else
11851 error ("mismatched argument pack lengths while expanding %qE",
11852 pattern);
11853 return error_mark_node;
11856 /* Keep track of the parameter packs and their corresponding
11857 argument packs. */
11858 packs = tree_cons (parm_pack, arg_pack, packs);
11859 TREE_TYPE (packs) = orig_arg;
11861 else
11863 /* We can't substitute for this parameter pack. We use a flag as
11864 well as the missing_level counter because function parameter
11865 packs don't have a level. */
11866 gcc_assert (processing_template_decl || is_auto (parm_pack));
11867 unsubstituted_packs = true;
11871 /* If the expansion is just T..., return the matching argument pack, unless
11872 we need to call convert_from_reference on all the elements. This is an
11873 important optimization; see c++/68422. */
11874 if (!unsubstituted_packs
11875 && TREE_PURPOSE (packs) == pattern)
11877 tree args = ARGUMENT_PACK_ARGS (TREE_VALUE (packs));
11879 /* If the argument pack is a single pack expansion, pull it out. */
11880 if (TREE_VEC_LENGTH (args) == 1
11881 && pack_expansion_args_count (args))
11882 return TREE_VEC_ELT (args, 0);
11884 /* Types need no adjustment, nor does sizeof..., and if we still have
11885 some pack expansion args we won't do anything yet. */
11886 if (TREE_CODE (t) == TYPE_PACK_EXPANSION
11887 || PACK_EXPANSION_SIZEOF_P (t)
11888 || pack_expansion_args_count (args))
11889 return args;
11890 /* Also optimize expression pack expansions if we can tell that the
11891 elements won't have reference type. */
11892 tree type = TREE_TYPE (pattern);
11893 if (type && TREE_CODE (type) != REFERENCE_TYPE
11894 && !PACK_EXPANSION_P (type)
11895 && !WILDCARD_TYPE_P (type))
11896 return args;
11897 /* Otherwise use the normal path so we get convert_from_reference. */
11900 /* We cannot expand this expansion expression, because we don't have
11901 all of the argument packs we need. */
11902 if (use_pack_expansion_extra_args_p (packs, len, unsubstituted_packs))
11904 /* We got some full packs, but we can't substitute them in until we
11905 have values for all the packs. So remember these until then. */
11907 t = make_pack_expansion (pattern, complain);
11908 PACK_EXPANSION_EXTRA_ARGS (t)
11909 = build_extra_args (pattern, args, complain);
11910 return t;
11912 else if (unsubstituted_packs)
11914 /* There were no real arguments, we're just replacing a parameter
11915 pack with another version of itself. Substitute into the
11916 pattern and return a PACK_EXPANSION_*. The caller will need to
11917 deal with that. */
11918 if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
11919 t = tsubst_expr (pattern, args, complain, in_decl,
11920 /*integral_constant_expression_p=*/false);
11921 else
11922 t = tsubst (pattern, args, complain, in_decl);
11923 t = make_pack_expansion (t, complain);
11924 return t;
11927 gcc_assert (len >= 0);
11929 if (need_local_specializations)
11931 /* We're in a late-specified return type, so create our own local
11932 specializations map; the current map is either NULL or (in the
11933 case of recursive unification) might have bindings that we don't
11934 want to use or alter. */
11935 saved_local_specializations = local_specializations;
11936 local_specializations = new hash_map<tree, tree>;
11939 /* For each argument in each argument pack, substitute into the
11940 pattern. */
11941 result = make_tree_vec (len);
11942 tree elem_args = copy_template_args (args);
11943 for (i = 0; i < len; ++i)
11945 t = gen_elem_of_pack_expansion_instantiation (pattern, packs,
11947 elem_args, complain,
11948 in_decl);
11949 TREE_VEC_ELT (result, i) = t;
11950 if (t == error_mark_node)
11952 result = error_mark_node;
11953 break;
11957 /* Update ARGS to restore the substitution from parameter packs to
11958 their argument packs. */
11959 for (pack = packs; pack; pack = TREE_CHAIN (pack))
11961 tree parm = TREE_PURPOSE (pack);
11963 if (TREE_CODE (parm) == PARM_DECL
11964 || VAR_P (parm)
11965 || TREE_CODE (parm) == FIELD_DECL)
11966 register_local_specialization (TREE_TYPE (pack), parm);
11967 else
11969 int idx, level;
11971 if (TREE_VALUE (pack) == NULL_TREE)
11972 continue;
11974 template_parm_level_and_index (parm, &level, &idx);
11976 /* Update the corresponding argument. */
11977 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
11978 TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
11979 TREE_TYPE (pack);
11980 else
11981 TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
11985 if (need_local_specializations)
11987 delete local_specializations;
11988 local_specializations = saved_local_specializations;
11991 /* If the dependent pack arguments were such that we end up with only a
11992 single pack expansion again, there's no need to keep it in a TREE_VEC. */
11993 if (len == 1 && TREE_CODE (result) == TREE_VEC
11994 && PACK_EXPANSION_P (TREE_VEC_ELT (result, 0)))
11995 return TREE_VEC_ELT (result, 0);
11997 return result;
12000 /* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
12001 TMPL. We do this using DECL_PARM_INDEX, which should work even with
12002 parameter packs; all parms generated from a function parameter pack will
12003 have the same DECL_PARM_INDEX. */
12005 tree
12006 get_pattern_parm (tree parm, tree tmpl)
12008 tree pattern = DECL_TEMPLATE_RESULT (tmpl);
12009 tree patparm;
12011 if (DECL_ARTIFICIAL (parm))
12013 for (patparm = DECL_ARGUMENTS (pattern);
12014 patparm; patparm = DECL_CHAIN (patparm))
12015 if (DECL_ARTIFICIAL (patparm)
12016 && DECL_NAME (parm) == DECL_NAME (patparm))
12017 break;
12019 else
12021 patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
12022 patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
12023 gcc_assert (DECL_PARM_INDEX (patparm)
12024 == DECL_PARM_INDEX (parm));
12027 return patparm;
12030 /* Make an argument pack out of the TREE_VEC VEC. */
12032 static tree
12033 make_argument_pack (tree vec)
12035 tree pack;
12036 tree elt = TREE_VEC_ELT (vec, 0);
12037 if (TYPE_P (elt))
12038 pack = cxx_make_type (TYPE_ARGUMENT_PACK);
12039 else
12041 pack = make_node (NONTYPE_ARGUMENT_PACK);
12042 TREE_CONSTANT (pack) = 1;
12044 SET_ARGUMENT_PACK_ARGS (pack, vec);
12045 return pack;
12048 /* Return an exact copy of template args T that can be modified
12049 independently. */
12051 static tree
12052 copy_template_args (tree t)
12054 if (t == error_mark_node)
12055 return t;
12057 int len = TREE_VEC_LENGTH (t);
12058 tree new_vec = make_tree_vec (len);
12060 for (int i = 0; i < len; ++i)
12062 tree elt = TREE_VEC_ELT (t, i);
12063 if (elt && TREE_CODE (elt) == TREE_VEC)
12064 elt = copy_template_args (elt);
12065 TREE_VEC_ELT (new_vec, i) = elt;
12068 NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_vec)
12069 = NON_DEFAULT_TEMPLATE_ARGS_COUNT (t);
12071 return new_vec;
12074 /* Substitute ARGS into the vector or list of template arguments T. */
12076 static tree
12077 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
12079 tree orig_t = t;
12080 int len, need_new = 0, i, expanded_len_adjust = 0, out;
12081 tree *elts;
12083 if (t == error_mark_node)
12084 return error_mark_node;
12086 len = TREE_VEC_LENGTH (t);
12087 elts = XALLOCAVEC (tree, len);
12089 for (i = 0; i < len; i++)
12091 tree orig_arg = TREE_VEC_ELT (t, i);
12092 tree new_arg;
12094 if (TREE_CODE (orig_arg) == TREE_VEC)
12095 new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
12096 else if (PACK_EXPANSION_P (orig_arg))
12098 /* Substitute into an expansion expression. */
12099 new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
12101 if (TREE_CODE (new_arg) == TREE_VEC)
12102 /* Add to the expanded length adjustment the number of
12103 expanded arguments. We subtract one from this
12104 measurement, because the argument pack expression
12105 itself is already counted as 1 in
12106 LEN. EXPANDED_LEN_ADJUST can actually be negative, if
12107 the argument pack is empty. */
12108 expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
12110 else if (ARGUMENT_PACK_P (orig_arg))
12112 /* Substitute into each of the arguments. */
12113 new_arg = TYPE_P (orig_arg)
12114 ? cxx_make_type (TREE_CODE (orig_arg))
12115 : make_node (TREE_CODE (orig_arg));
12117 tree pack_args = tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
12118 args, complain, in_decl);
12119 if (pack_args == error_mark_node)
12120 new_arg = error_mark_node;
12121 else
12122 SET_ARGUMENT_PACK_ARGS (new_arg, pack_args);
12124 if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK)
12125 TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
12127 else
12128 new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
12130 if (new_arg == error_mark_node)
12131 return error_mark_node;
12133 elts[i] = new_arg;
12134 if (new_arg != orig_arg)
12135 need_new = 1;
12138 if (!need_new)
12139 return t;
12141 /* Make space for the expanded arguments coming from template
12142 argument packs. */
12143 t = make_tree_vec (len + expanded_len_adjust);
12144 /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
12145 arguments for a member template.
12146 In that case each TREE_VEC in ORIG_T represents a level of template
12147 arguments, and ORIG_T won't carry any non defaulted argument count.
12148 It will rather be the nested TREE_VECs that will carry one.
12149 In other words, ORIG_T carries a non defaulted argument count only
12150 if it doesn't contain any nested TREE_VEC. */
12151 if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
12153 int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
12154 count += expanded_len_adjust;
12155 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
12157 for (i = 0, out = 0; i < len; i++)
12159 if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
12160 || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
12161 && TREE_CODE (elts[i]) == TREE_VEC)
12163 int idx;
12165 /* Now expand the template argument pack "in place". */
12166 for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
12167 TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
12169 else
12171 TREE_VEC_ELT (t, out) = elts[i];
12172 out++;
12176 return t;
12179 /* Substitute ARGS into one level PARMS of template parameters. */
12181 static tree
12182 tsubst_template_parms_level (tree parms, tree args, tsubst_flags_t complain)
12184 if (parms == error_mark_node)
12185 return error_mark_node;
12187 tree new_vec = make_tree_vec (TREE_VEC_LENGTH (parms));
12189 for (int i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
12191 tree tuple = TREE_VEC_ELT (parms, i);
12193 if (tuple == error_mark_node)
12194 continue;
12196 TREE_VEC_ELT (new_vec, i) =
12197 tsubst_template_parm (tuple, args, complain);
12200 return new_vec;
12203 /* Return the result of substituting ARGS into the template parameters
12204 given by PARMS. If there are m levels of ARGS and m + n levels of
12205 PARMS, then the result will contain n levels of PARMS. For
12206 example, if PARMS is `template <class T> template <class U>
12207 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
12208 result will be `template <int*, double, class V>'. */
12210 static tree
12211 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
12213 tree r = NULL_TREE;
12214 tree* new_parms;
12216 /* When substituting into a template, we must set
12217 PROCESSING_TEMPLATE_DECL as the template parameters may be
12218 dependent if they are based on one-another, and the dependency
12219 predicates are short-circuit outside of templates. */
12220 ++processing_template_decl;
12222 for (new_parms = &r;
12223 parms && TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
12224 new_parms = &(TREE_CHAIN (*new_parms)),
12225 parms = TREE_CHAIN (parms))
12227 tree new_vec = tsubst_template_parms_level (TREE_VALUE (parms),
12228 args, complain);
12229 *new_parms =
12230 tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
12231 - TMPL_ARGS_DEPTH (args)),
12232 new_vec, NULL_TREE);
12235 --processing_template_decl;
12237 return r;
12240 /* Return the result of substituting ARGS into one template parameter
12241 given by T. T Must be a TREE_LIST which TREE_VALUE is the template
12242 parameter and which TREE_PURPOSE is the default argument of the
12243 template parameter. */
12245 static tree
12246 tsubst_template_parm (tree t, tree args, tsubst_flags_t complain)
12248 tree default_value, parm_decl;
12250 if (args == NULL_TREE
12251 || t == NULL_TREE
12252 || t == error_mark_node)
12253 return t;
12255 gcc_assert (TREE_CODE (t) == TREE_LIST);
12257 default_value = TREE_PURPOSE (t);
12258 parm_decl = TREE_VALUE (t);
12260 parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
12261 if (TREE_CODE (parm_decl) == PARM_DECL
12262 && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
12263 parm_decl = error_mark_node;
12264 default_value = tsubst_template_arg (default_value, args,
12265 complain, NULL_TREE);
12267 return build_tree_list (default_value, parm_decl);
12270 /* Substitute the ARGS into the indicated aggregate (or enumeration)
12271 type T. If T is not an aggregate or enumeration type, it is
12272 handled as if by tsubst. IN_DECL is as for tsubst. If
12273 ENTERING_SCOPE is nonzero, T is the context for a template which
12274 we are presently tsubst'ing. Return the substituted value. */
12276 static tree
12277 tsubst_aggr_type (tree t,
12278 tree args,
12279 tsubst_flags_t complain,
12280 tree in_decl,
12281 int entering_scope)
12283 if (t == NULL_TREE)
12284 return NULL_TREE;
12286 switch (TREE_CODE (t))
12288 case RECORD_TYPE:
12289 if (TYPE_PTRMEMFUNC_P (t))
12290 return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
12292 /* Fall through. */
12293 case ENUMERAL_TYPE:
12294 case UNION_TYPE:
12295 if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
12297 tree argvec;
12298 tree context;
12299 tree r;
12300 int saved_unevaluated_operand;
12301 int saved_inhibit_evaluation_warnings;
12303 /* In "sizeof(X<I>)" we need to evaluate "I". */
12304 saved_unevaluated_operand = cp_unevaluated_operand;
12305 cp_unevaluated_operand = 0;
12306 saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
12307 c_inhibit_evaluation_warnings = 0;
12309 /* First, determine the context for the type we are looking
12310 up. */
12311 context = TYPE_CONTEXT (t);
12312 if (context && TYPE_P (context))
12314 context = tsubst_aggr_type (context, args, complain,
12315 in_decl, /*entering_scope=*/1);
12316 /* If context is a nested class inside a class template,
12317 it may still need to be instantiated (c++/33959). */
12318 context = complete_type (context);
12321 /* Then, figure out what arguments are appropriate for the
12322 type we are trying to find. For example, given:
12324 template <class T> struct S;
12325 template <class T, class U> void f(T, U) { S<U> su; }
12327 and supposing that we are instantiating f<int, double>,
12328 then our ARGS will be {int, double}, but, when looking up
12329 S we only want {double}. */
12330 argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
12331 complain, in_decl);
12332 if (argvec == error_mark_node)
12333 r = error_mark_node;
12334 else
12336 r = lookup_template_class (t, argvec, in_decl, context,
12337 entering_scope, complain);
12338 r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
12341 cp_unevaluated_operand = saved_unevaluated_operand;
12342 c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
12344 return r;
12346 else
12347 /* This is not a template type, so there's nothing to do. */
12348 return t;
12350 default:
12351 return tsubst (t, args, complain, in_decl);
12355 static GTY((cache)) tree_cache_map *defarg_inst;
12357 /* Substitute into the default argument ARG (a default argument for
12358 FN), which has the indicated TYPE. */
12360 tree
12361 tsubst_default_argument (tree fn, int parmnum, tree type, tree arg,
12362 tsubst_flags_t complain)
12364 tree saved_class_ptr = NULL_TREE;
12365 tree saved_class_ref = NULL_TREE;
12366 int errs = errorcount + sorrycount;
12368 /* This can happen in invalid code. */
12369 if (TREE_CODE (arg) == DEFAULT_ARG)
12370 return arg;
12372 tree parm = FUNCTION_FIRST_USER_PARM (fn);
12373 parm = chain_index (parmnum, parm);
12374 tree parmtype = TREE_TYPE (parm);
12375 if (DECL_BY_REFERENCE (parm))
12376 parmtype = TREE_TYPE (parmtype);
12377 if (parmtype == error_mark_node)
12378 return error_mark_node;
12380 gcc_assert (same_type_ignoring_top_level_qualifiers_p (type, parmtype));
12382 tree *slot;
12383 if (defarg_inst && (slot = defarg_inst->get (parm)))
12384 return *slot;
12386 /* This default argument came from a template. Instantiate the
12387 default argument here, not in tsubst. In the case of
12388 something like:
12390 template <class T>
12391 struct S {
12392 static T t();
12393 void f(T = t());
12396 we must be careful to do name lookup in the scope of S<T>,
12397 rather than in the current class. */
12398 push_access_scope (fn);
12399 /* The "this" pointer is not valid in a default argument. */
12400 if (cfun)
12402 saved_class_ptr = current_class_ptr;
12403 cp_function_chain->x_current_class_ptr = NULL_TREE;
12404 saved_class_ref = current_class_ref;
12405 cp_function_chain->x_current_class_ref = NULL_TREE;
12408 start_lambda_scope (parm);
12410 push_deferring_access_checks(dk_no_deferred);
12411 /* The default argument expression may cause implicitly defined
12412 member functions to be synthesized, which will result in garbage
12413 collection. We must treat this situation as if we were within
12414 the body of function so as to avoid collecting live data on the
12415 stack. */
12416 ++function_depth;
12417 arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
12418 complain, NULL_TREE,
12419 /*integral_constant_expression_p=*/false);
12420 --function_depth;
12421 pop_deferring_access_checks();
12423 finish_lambda_scope ();
12425 /* Restore the "this" pointer. */
12426 if (cfun)
12428 cp_function_chain->x_current_class_ptr = saved_class_ptr;
12429 cp_function_chain->x_current_class_ref = saved_class_ref;
12432 if (errorcount+sorrycount > errs
12433 && (complain & tf_warning_or_error))
12434 inform (input_location,
12435 " when instantiating default argument for call to %qD", fn);
12437 /* Make sure the default argument is reasonable. */
12438 arg = check_default_argument (type, arg, complain);
12440 pop_access_scope (fn);
12442 if (arg != error_mark_node && !cp_unevaluated_operand)
12444 if (!defarg_inst)
12445 defarg_inst = tree_cache_map::create_ggc (37);
12446 defarg_inst->put (parm, arg);
12449 return arg;
12452 /* Substitute into all the default arguments for FN. */
12454 static void
12455 tsubst_default_arguments (tree fn, tsubst_flags_t complain)
12457 tree arg;
12458 tree tmpl_args;
12460 tmpl_args = DECL_TI_ARGS (fn);
12462 /* If this function is not yet instantiated, we certainly don't need
12463 its default arguments. */
12464 if (uses_template_parms (tmpl_args))
12465 return;
12466 /* Don't do this again for clones. */
12467 if (DECL_CLONED_FUNCTION_P (fn))
12468 return;
12470 int i = 0;
12471 for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
12472 arg;
12473 arg = TREE_CHAIN (arg), ++i)
12474 if (TREE_PURPOSE (arg))
12475 TREE_PURPOSE (arg) = tsubst_default_argument (fn, i,
12476 TREE_VALUE (arg),
12477 TREE_PURPOSE (arg),
12478 complain);
12481 /* Subroutine of tsubst_decl for the case when T is a FUNCTION_DECL. */
12483 static tree
12484 tsubst_function_decl (tree t, tree args, tsubst_flags_t complain,
12485 tree lambda_fntype)
12487 tree gen_tmpl, argvec;
12488 hashval_t hash = 0;
12489 tree in_decl = t;
12491 /* Nobody should be tsubst'ing into non-template functions. */
12492 gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
12494 if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
12496 /* If T is not dependent, just return it. */
12497 if (!uses_template_parms (DECL_TI_ARGS (t)))
12498 return t;
12500 /* Calculate the most general template of which R is a
12501 specialization. */
12502 gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
12504 /* We're substituting a lambda function under tsubst_lambda_expr but not
12505 directly from it; find the matching function we're already inside.
12506 But don't do this if T is a generic lambda with a single level of
12507 template parms, as in that case we're doing a normal instantiation. */
12508 if (LAMBDA_FUNCTION_P (t) && !lambda_fntype
12509 && (!generic_lambda_fn_p (t)
12510 || TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl)) > 1))
12511 return enclosing_instantiation_of (t);
12513 /* Calculate the complete set of arguments used to
12514 specialize R. */
12515 argvec = tsubst_template_args (DECL_TI_ARGS
12516 (DECL_TEMPLATE_RESULT
12517 (DECL_TI_TEMPLATE (t))),
12518 args, complain, in_decl);
12519 if (argvec == error_mark_node)
12520 return error_mark_node;
12522 /* Check to see if we already have this specialization. */
12523 if (!lambda_fntype)
12525 hash = hash_tmpl_and_args (gen_tmpl, argvec);
12526 if (tree spec = retrieve_specialization (gen_tmpl, argvec, hash))
12527 return spec;
12530 /* We can see more levels of arguments than parameters if
12531 there was a specialization of a member template, like
12532 this:
12534 template <class T> struct S { template <class U> void f(); }
12535 template <> template <class U> void S<int>::f(U);
12537 Here, we'll be substituting into the specialization,
12538 because that's where we can find the code we actually
12539 want to generate, but we'll have enough arguments for
12540 the most general template.
12542 We also deal with the peculiar case:
12544 template <class T> struct S {
12545 template <class U> friend void f();
12547 template <class U> void f() {}
12548 template S<int>;
12549 template void f<double>();
12551 Here, the ARGS for the instantiation of will be {int,
12552 double}. But, we only need as many ARGS as there are
12553 levels of template parameters in CODE_PATTERN. We are
12554 careful not to get fooled into reducing the ARGS in
12555 situations like:
12557 template <class T> struct S { template <class U> void f(U); }
12558 template <class T> template <> void S<T>::f(int) {}
12560 which we can spot because the pattern will be a
12561 specialization in this case. */
12562 int args_depth = TMPL_ARGS_DEPTH (args);
12563 int parms_depth =
12564 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
12566 if (args_depth > parms_depth && !DECL_TEMPLATE_SPECIALIZATION (t))
12567 args = get_innermost_template_args (args, parms_depth);
12569 else
12571 /* This special case arises when we have something like this:
12573 template <class T> struct S {
12574 friend void f<int>(int, double);
12577 Here, the DECL_TI_TEMPLATE for the friend declaration
12578 will be an IDENTIFIER_NODE. We are being called from
12579 tsubst_friend_function, and we want only to create a
12580 new decl (R) with appropriate types so that we can call
12581 determine_specialization. */
12582 gen_tmpl = NULL_TREE;
12583 argvec = NULL_TREE;
12586 tree closure = (lambda_fntype ? TYPE_METHOD_BASETYPE (lambda_fntype)
12587 : NULL_TREE);
12588 tree ctx = closure ? closure : DECL_CONTEXT (t);
12589 bool member = ctx && TYPE_P (ctx);
12591 if (member && !closure)
12592 ctx = tsubst_aggr_type (ctx, args,
12593 complain, t, /*entering_scope=*/1);
12595 tree type = (lambda_fntype ? lambda_fntype
12596 : tsubst (TREE_TYPE (t), args,
12597 complain | tf_fndecl_type, in_decl));
12598 if (type == error_mark_node)
12599 return error_mark_node;
12601 /* If we hit excessive deduction depth, the type is bogus even if
12602 it isn't error_mark_node, so don't build a decl. */
12603 if (excessive_deduction_depth)
12604 return error_mark_node;
12606 /* We do NOT check for matching decls pushed separately at this
12607 point, as they may not represent instantiations of this
12608 template, and in any case are considered separate under the
12609 discrete model. */
12610 tree r = copy_decl (t);
12611 DECL_USE_TEMPLATE (r) = 0;
12612 TREE_TYPE (r) = type;
12613 /* Clear out the mangled name and RTL for the instantiation. */
12614 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
12615 SET_DECL_RTL (r, NULL);
12616 /* Leave DECL_INITIAL set on deleted instantiations. */
12617 if (!DECL_DELETED_FN (r))
12618 DECL_INITIAL (r) = NULL_TREE;
12619 DECL_CONTEXT (r) = ctx;
12621 /* OpenMP UDRs have the only argument a reference to the declared
12622 type. We want to diagnose if the declared type is a reference,
12623 which is invalid, but as references to references are usually
12624 quietly merged, diagnose it here. */
12625 if (DECL_OMP_DECLARE_REDUCTION_P (t))
12627 tree argtype
12628 = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (t))));
12629 argtype = tsubst (argtype, args, complain, in_decl);
12630 if (TREE_CODE (argtype) == REFERENCE_TYPE)
12631 error_at (DECL_SOURCE_LOCATION (t),
12632 "reference type %qT in "
12633 "%<#pragma omp declare reduction%>", argtype);
12634 if (strchr (IDENTIFIER_POINTER (DECL_NAME (t)), '~') == NULL)
12635 DECL_NAME (r) = omp_reduction_id (ERROR_MARK, DECL_NAME (t),
12636 argtype);
12639 if (member && DECL_CONV_FN_P (r))
12640 /* Type-conversion operator. Reconstruct the name, in
12641 case it's the name of one of the template's parameters. */
12642 DECL_NAME (r) = make_conv_op_name (TREE_TYPE (type));
12644 tree parms = DECL_ARGUMENTS (t);
12645 if (closure)
12646 parms = DECL_CHAIN (parms);
12647 parms = tsubst (parms, args, complain, t);
12648 for (tree parm = parms; parm; parm = DECL_CHAIN (parm))
12649 DECL_CONTEXT (parm) = r;
12650 if (closure)
12652 tree tparm = build_this_parm (r, closure, type_memfn_quals (type));
12653 DECL_CHAIN (tparm) = parms;
12654 parms = tparm;
12656 DECL_ARGUMENTS (r) = parms;
12657 DECL_RESULT (r) = NULL_TREE;
12659 TREE_STATIC (r) = 0;
12660 TREE_PUBLIC (r) = TREE_PUBLIC (t);
12661 DECL_EXTERNAL (r) = 1;
12662 /* If this is an instantiation of a function with internal
12663 linkage, we already know what object file linkage will be
12664 assigned to the instantiation. */
12665 DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
12666 DECL_DEFER_OUTPUT (r) = 0;
12667 DECL_CHAIN (r) = NULL_TREE;
12668 DECL_PENDING_INLINE_INFO (r) = 0;
12669 DECL_PENDING_INLINE_P (r) = 0;
12670 DECL_SAVED_TREE (r) = NULL_TREE;
12671 DECL_STRUCT_FUNCTION (r) = NULL;
12672 TREE_USED (r) = 0;
12673 /* We'll re-clone as appropriate in instantiate_template. */
12674 DECL_CLONED_FUNCTION (r) = NULL_TREE;
12676 /* If we aren't complaining now, return on error before we register
12677 the specialization so that we'll complain eventually. */
12678 if ((complain & tf_error) == 0
12679 && IDENTIFIER_ANY_OP_P (DECL_NAME (r))
12680 && !grok_op_properties (r, /*complain=*/false))
12681 return error_mark_node;
12683 /* When instantiating a constrained member, substitute
12684 into the constraints to create a new constraint. */
12685 if (tree ci = get_constraints (t))
12686 if (member)
12688 ci = tsubst_constraint_info (ci, argvec, complain, NULL_TREE);
12689 set_constraints (r, ci);
12692 /* Set up the DECL_TEMPLATE_INFO for R. There's no need to do
12693 this in the special friend case mentioned above where
12694 GEN_TMPL is NULL. */
12695 if (gen_tmpl && !closure)
12697 DECL_TEMPLATE_INFO (r)
12698 = build_template_info (gen_tmpl, argvec);
12699 SET_DECL_IMPLICIT_INSTANTIATION (r);
12701 tree new_r
12702 = register_specialization (r, gen_tmpl, argvec, false, hash);
12703 if (new_r != r)
12704 /* We instantiated this while substituting into
12705 the type earlier (template/friend54.C). */
12706 return new_r;
12708 /* We're not supposed to instantiate default arguments
12709 until they are called, for a template. But, for a
12710 declaration like:
12712 template <class T> void f ()
12713 { extern void g(int i = T()); }
12715 we should do the substitution when the template is
12716 instantiated. We handle the member function case in
12717 instantiate_class_template since the default arguments
12718 might refer to other members of the class. */
12719 if (!member
12720 && !PRIMARY_TEMPLATE_P (gen_tmpl)
12721 && !uses_template_parms (argvec))
12722 tsubst_default_arguments (r, complain);
12724 else
12725 DECL_TEMPLATE_INFO (r) = NULL_TREE;
12727 /* Copy the list of befriending classes. */
12728 for (tree *friends = &DECL_BEFRIENDING_CLASSES (r);
12729 *friends;
12730 friends = &TREE_CHAIN (*friends))
12732 *friends = copy_node (*friends);
12733 TREE_VALUE (*friends)
12734 = tsubst (TREE_VALUE (*friends), args, complain, in_decl);
12737 if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
12739 maybe_retrofit_in_chrg (r);
12740 if (DECL_CONSTRUCTOR_P (r) && !grok_ctor_properties (ctx, r))
12741 return error_mark_node;
12742 /* If this is an instantiation of a member template, clone it.
12743 If it isn't, that'll be handled by
12744 clone_constructors_and_destructors. */
12745 if (PRIMARY_TEMPLATE_P (gen_tmpl))
12746 clone_function_decl (r, /*update_methods=*/false);
12748 else if ((complain & tf_error) != 0
12749 && IDENTIFIER_ANY_OP_P (DECL_NAME (r))
12750 && !grok_op_properties (r, /*complain=*/true))
12751 return error_mark_node;
12753 if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
12754 SET_DECL_FRIEND_CONTEXT (r,
12755 tsubst (DECL_FRIEND_CONTEXT (t),
12756 args, complain, in_decl));
12758 /* Possibly limit visibility based on template args. */
12759 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
12760 if (DECL_VISIBILITY_SPECIFIED (t))
12762 DECL_VISIBILITY_SPECIFIED (r) = 0;
12763 DECL_ATTRIBUTES (r)
12764 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
12766 determine_visibility (r);
12767 if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
12768 && !processing_template_decl)
12769 defaulted_late_check (r);
12771 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
12772 args, complain, in_decl);
12773 return r;
12776 /* Subroutine of tsubst_decl for the case when T is a TEMPLATE_DECL. */
12778 static tree
12779 tsubst_template_decl (tree t, tree args, tsubst_flags_t complain,
12780 tree lambda_fntype)
12782 /* We can get here when processing a member function template,
12783 member class template, or template template parameter. */
12784 tree decl = DECL_TEMPLATE_RESULT (t);
12785 tree in_decl = t;
12786 tree spec;
12787 tree tmpl_args;
12788 tree full_args;
12789 tree r;
12790 hashval_t hash = 0;
12792 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
12794 /* Template template parameter is treated here. */
12795 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12796 if (new_type == error_mark_node)
12797 r = error_mark_node;
12798 /* If we get a real template back, return it. This can happen in
12799 the context of most_specialized_partial_spec. */
12800 else if (TREE_CODE (new_type) == TEMPLATE_DECL)
12801 r = new_type;
12802 else
12803 /* The new TEMPLATE_DECL was built in
12804 reduce_template_parm_level. */
12805 r = TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (new_type);
12806 return r;
12809 if (!lambda_fntype)
12811 /* We might already have an instance of this template.
12812 The ARGS are for the surrounding class type, so the
12813 full args contain the tsubst'd args for the context,
12814 plus the innermost args from the template decl. */
12815 tmpl_args = DECL_CLASS_TEMPLATE_P (t)
12816 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
12817 : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
12818 /* Because this is a template, the arguments will still be
12819 dependent, even after substitution. If
12820 PROCESSING_TEMPLATE_DECL is not set, the dependency
12821 predicates will short-circuit. */
12822 ++processing_template_decl;
12823 full_args = tsubst_template_args (tmpl_args, args,
12824 complain, in_decl);
12825 --processing_template_decl;
12826 if (full_args == error_mark_node)
12827 return error_mark_node;
12829 /* If this is a default template template argument,
12830 tsubst might not have changed anything. */
12831 if (full_args == tmpl_args)
12832 return t;
12834 hash = hash_tmpl_and_args (t, full_args);
12835 spec = retrieve_specialization (t, full_args, hash);
12836 if (spec != NULL_TREE)
12837 return spec;
12840 /* Make a new template decl. It will be similar to the
12841 original, but will record the current template arguments.
12842 We also create a new function declaration, which is just
12843 like the old one, but points to this new template, rather
12844 than the old one. */
12845 r = copy_decl (t);
12846 gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
12847 DECL_CHAIN (r) = NULL_TREE;
12849 // Build new template info linking to the original template decl.
12850 if (!lambda_fntype)
12852 DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
12853 SET_DECL_IMPLICIT_INSTANTIATION (r);
12855 else
12856 DECL_TEMPLATE_INFO (r) = NULL_TREE;
12858 /* The template parameters for this new template are all the
12859 template parameters for the old template, except the
12860 outermost level of parameters. */
12861 DECL_TEMPLATE_PARMS (r)
12862 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
12863 complain);
12865 if (TREE_CODE (decl) == TYPE_DECL
12866 && !TYPE_DECL_ALIAS_P (decl))
12868 tree new_type;
12869 ++processing_template_decl;
12870 new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12871 --processing_template_decl;
12872 if (new_type == error_mark_node)
12873 return error_mark_node;
12875 TREE_TYPE (r) = new_type;
12876 /* For a partial specialization, we need to keep pointing to
12877 the primary template. */
12878 if (!DECL_TEMPLATE_SPECIALIZATION (t))
12879 CLASSTYPE_TI_TEMPLATE (new_type) = r;
12880 DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
12881 DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
12882 DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
12884 else
12886 tree new_decl;
12887 ++processing_template_decl;
12888 if (TREE_CODE (decl) == FUNCTION_DECL)
12889 new_decl = tsubst_function_decl (decl, args, complain, lambda_fntype);
12890 else
12891 new_decl = tsubst (decl, args, complain, in_decl);
12892 --processing_template_decl;
12893 if (new_decl == error_mark_node)
12894 return error_mark_node;
12896 DECL_TEMPLATE_RESULT (r) = new_decl;
12897 TREE_TYPE (r) = TREE_TYPE (new_decl);
12898 DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
12899 if (lambda_fntype)
12901 tree args = template_parms_to_args (DECL_TEMPLATE_PARMS (r));
12902 DECL_TEMPLATE_INFO (new_decl) = build_template_info (r, args);
12904 else
12906 DECL_TI_TEMPLATE (new_decl) = r;
12907 DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
12911 DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
12912 DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
12914 if (PRIMARY_TEMPLATE_P (t))
12915 DECL_PRIMARY_TEMPLATE (r) = r;
12917 if (TREE_CODE (decl) != TYPE_DECL && !VAR_P (decl)
12918 && !lambda_fntype)
12919 /* Record this non-type partial instantiation. */
12920 register_specialization (r, t,
12921 DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
12922 false, hash);
12924 return r;
12927 /* True if FN is the op() for a lambda in an uninstantiated template. */
12929 bool
12930 lambda_fn_in_template_p (tree fn)
12932 if (!fn || !LAMBDA_FUNCTION_P (fn))
12933 return false;
12934 tree closure = DECL_CONTEXT (fn);
12935 return CLASSTYPE_TEMPLATE_INFO (closure) != NULL_TREE;
12938 /* We're instantiating a variable from template function TCTX. Return the
12939 corresponding current enclosing scope. This gets complicated because lambda
12940 functions in templates are regenerated rather than instantiated, but generic
12941 lambda functions are subsequently instantiated. */
12943 static tree
12944 enclosing_instantiation_of (tree otctx)
12946 tree tctx = otctx;
12947 tree fn = current_function_decl;
12948 int lambda_count = 0;
12950 for (; tctx && lambda_fn_in_template_p (tctx);
12951 tctx = decl_function_context (tctx))
12952 ++lambda_count;
12953 for (; fn; fn = decl_function_context (fn))
12955 tree ofn = fn;
12956 int flambda_count = 0;
12957 for (; flambda_count < lambda_count && fn && LAMBDA_FUNCTION_P (fn);
12958 fn = decl_function_context (fn))
12959 ++flambda_count;
12960 if ((fn && DECL_TEMPLATE_INFO (fn))
12961 ? most_general_template (fn) != most_general_template (tctx)
12962 : fn != tctx)
12963 continue;
12964 gcc_assert (DECL_NAME (ofn) == DECL_NAME (otctx)
12965 || DECL_CONV_FN_P (ofn));
12966 return ofn;
12968 gcc_unreachable ();
12971 /* Substitute the ARGS into the T, which is a _DECL. Return the
12972 result of the substitution. Issue error and warning messages under
12973 control of COMPLAIN. */
12975 static tree
12976 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
12978 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
12979 location_t saved_loc;
12980 tree r = NULL_TREE;
12981 tree in_decl = t;
12982 hashval_t hash = 0;
12984 /* Set the filename and linenumber to improve error-reporting. */
12985 saved_loc = input_location;
12986 input_location = DECL_SOURCE_LOCATION (t);
12988 switch (TREE_CODE (t))
12990 case TEMPLATE_DECL:
12991 r = tsubst_template_decl (t, args, complain, /*lambda*/NULL_TREE);
12992 break;
12994 case FUNCTION_DECL:
12995 r = tsubst_function_decl (t, args, complain, /*lambda*/NULL_TREE);
12996 break;
12998 case PARM_DECL:
13000 tree type = NULL_TREE;
13001 int i, len = 1;
13002 tree expanded_types = NULL_TREE;
13003 tree prev_r = NULL_TREE;
13004 tree first_r = NULL_TREE;
13006 if (DECL_PACK_P (t))
13008 /* If there is a local specialization that isn't a
13009 parameter pack, it means that we're doing a "simple"
13010 substitution from inside tsubst_pack_expansion. Just
13011 return the local specialization (which will be a single
13012 parm). */
13013 tree spec = retrieve_local_specialization (t);
13014 if (spec
13015 && TREE_CODE (spec) == PARM_DECL
13016 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
13017 RETURN (spec);
13019 /* Expand the TYPE_PACK_EXPANSION that provides the types for
13020 the parameters in this function parameter pack. */
13021 expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
13022 complain, in_decl);
13023 if (TREE_CODE (expanded_types) == TREE_VEC)
13025 len = TREE_VEC_LENGTH (expanded_types);
13027 /* Zero-length parameter packs are boring. Just substitute
13028 into the chain. */
13029 if (len == 0)
13030 RETURN (tsubst (TREE_CHAIN (t), args, complain,
13031 TREE_CHAIN (t)));
13033 else
13035 /* All we did was update the type. Make a note of that. */
13036 type = expanded_types;
13037 expanded_types = NULL_TREE;
13041 /* Loop through all of the parameters we'll build. When T is
13042 a function parameter pack, LEN is the number of expanded
13043 types in EXPANDED_TYPES; otherwise, LEN is 1. */
13044 r = NULL_TREE;
13045 for (i = 0; i < len; ++i)
13047 prev_r = r;
13048 r = copy_node (t);
13049 if (DECL_TEMPLATE_PARM_P (t))
13050 SET_DECL_TEMPLATE_PARM_P (r);
13052 if (expanded_types)
13053 /* We're on the Ith parameter of the function parameter
13054 pack. */
13056 /* Get the Ith type. */
13057 type = TREE_VEC_ELT (expanded_types, i);
13059 /* Rename the parameter to include the index. */
13060 DECL_NAME (r)
13061 = make_ith_pack_parameter_name (DECL_NAME (r), i);
13063 else if (!type)
13064 /* We're dealing with a normal parameter. */
13065 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13067 type = type_decays_to (type);
13068 TREE_TYPE (r) = type;
13069 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
13071 if (DECL_INITIAL (r))
13073 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
13074 DECL_INITIAL (r) = TREE_TYPE (r);
13075 else
13076 DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
13077 complain, in_decl);
13080 DECL_CONTEXT (r) = NULL_TREE;
13082 if (!DECL_TEMPLATE_PARM_P (r))
13083 DECL_ARG_TYPE (r) = type_passed_as (type);
13085 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
13086 args, complain, in_decl);
13088 /* Keep track of the first new parameter we
13089 generate. That's what will be returned to the
13090 caller. */
13091 if (!first_r)
13092 first_r = r;
13094 /* Build a proper chain of parameters when substituting
13095 into a function parameter pack. */
13096 if (prev_r)
13097 DECL_CHAIN (prev_r) = r;
13100 /* If cp_unevaluated_operand is set, we're just looking for a
13101 single dummy parameter, so don't keep going. */
13102 if (DECL_CHAIN (t) && !cp_unevaluated_operand)
13103 DECL_CHAIN (r) = tsubst (DECL_CHAIN (t), args,
13104 complain, DECL_CHAIN (t));
13106 /* FIRST_R contains the start of the chain we've built. */
13107 r = first_r;
13109 break;
13111 case FIELD_DECL:
13113 tree type = NULL_TREE;
13114 tree vec = NULL_TREE;
13115 tree expanded_types = NULL_TREE;
13116 int len = 1;
13118 if (PACK_EXPANSION_P (TREE_TYPE (t)))
13120 /* This field is a lambda capture pack. Return a TREE_VEC of
13121 the expanded fields to instantiate_class_template_1. */
13122 expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
13123 complain, in_decl);
13124 if (TREE_CODE (expanded_types) == TREE_VEC)
13126 len = TREE_VEC_LENGTH (expanded_types);
13127 vec = make_tree_vec (len);
13129 else
13131 /* All we did was update the type. Make a note of that. */
13132 type = expanded_types;
13133 expanded_types = NULL_TREE;
13137 for (int i = 0; i < len; ++i)
13139 r = copy_decl (t);
13140 if (expanded_types)
13142 type = TREE_VEC_ELT (expanded_types, i);
13143 DECL_NAME (r)
13144 = make_ith_pack_parameter_name (DECL_NAME (r), i);
13146 else if (!type)
13147 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13149 if (type == error_mark_node)
13150 RETURN (error_mark_node);
13151 TREE_TYPE (r) = type;
13152 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
13154 if (DECL_C_BIT_FIELD (r))
13155 /* For bit-fields, DECL_BIT_FIELD_REPRESENTATIVE gives the
13156 number of bits. */
13157 DECL_BIT_FIELD_REPRESENTATIVE (r)
13158 = tsubst_expr (DECL_BIT_FIELD_REPRESENTATIVE (t), args,
13159 complain, in_decl,
13160 /*integral_constant_expression_p=*/true);
13161 if (DECL_INITIAL (t))
13163 /* Set up DECL_TEMPLATE_INFO so that we can get at the
13164 NSDMI in perform_member_init. Still set DECL_INITIAL
13165 so that we know there is one. */
13166 DECL_INITIAL (r) = void_node;
13167 gcc_assert (DECL_LANG_SPECIFIC (r) == NULL);
13168 retrofit_lang_decl (r);
13169 DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
13171 /* We don't have to set DECL_CONTEXT here; it is set by
13172 finish_member_declaration. */
13173 DECL_CHAIN (r) = NULL_TREE;
13175 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
13176 args, complain, in_decl);
13178 if (vec)
13179 TREE_VEC_ELT (vec, i) = r;
13182 if (vec)
13183 r = vec;
13185 break;
13187 case USING_DECL:
13188 /* We reach here only for member using decls. We also need to check
13189 uses_template_parms because DECL_DEPENDENT_P is not set for a
13190 using-declaration that designates a member of the current
13191 instantiation (c++/53549). */
13192 if (DECL_DEPENDENT_P (t)
13193 || uses_template_parms (USING_DECL_SCOPE (t)))
13195 tree scope = USING_DECL_SCOPE (t);
13196 tree name = tsubst_copy (DECL_NAME (t), args, complain, in_decl);
13197 if (PACK_EXPANSION_P (scope))
13199 tree vec = tsubst_pack_expansion (scope, args, complain, in_decl);
13200 int len = TREE_VEC_LENGTH (vec);
13201 r = make_tree_vec (len);
13202 for (int i = 0; i < len; ++i)
13204 tree escope = TREE_VEC_ELT (vec, i);
13205 tree elt = do_class_using_decl (escope, name);
13206 if (!elt)
13208 r = error_mark_node;
13209 break;
13211 else
13213 TREE_PROTECTED (elt) = TREE_PROTECTED (t);
13214 TREE_PRIVATE (elt) = TREE_PRIVATE (t);
13216 TREE_VEC_ELT (r, i) = elt;
13219 else
13221 tree inst_scope = tsubst_copy (USING_DECL_SCOPE (t), args,
13222 complain, in_decl);
13223 r = do_class_using_decl (inst_scope, name);
13224 if (!r)
13225 r = error_mark_node;
13226 else
13228 TREE_PROTECTED (r) = TREE_PROTECTED (t);
13229 TREE_PRIVATE (r) = TREE_PRIVATE (t);
13233 else
13235 r = copy_node (t);
13236 DECL_CHAIN (r) = NULL_TREE;
13238 break;
13240 case TYPE_DECL:
13241 case VAR_DECL:
13243 tree argvec = NULL_TREE;
13244 tree gen_tmpl = NULL_TREE;
13245 tree spec;
13246 tree tmpl = NULL_TREE;
13247 tree ctx;
13248 tree type = NULL_TREE;
13249 bool local_p;
13251 if (TREE_TYPE (t) == error_mark_node)
13252 RETURN (error_mark_node);
13254 if (TREE_CODE (t) == TYPE_DECL
13255 && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
13257 /* If this is the canonical decl, we don't have to
13258 mess with instantiations, and often we can't (for
13259 typename, template type parms and such). Note that
13260 TYPE_NAME is not correct for the above test if
13261 we've copied the type for a typedef. */
13262 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13263 if (type == error_mark_node)
13264 RETURN (error_mark_node);
13265 r = TYPE_NAME (type);
13266 break;
13269 /* Check to see if we already have the specialization we
13270 need. */
13271 spec = NULL_TREE;
13272 if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
13274 /* T is a static data member or namespace-scope entity.
13275 We have to substitute into namespace-scope variables
13276 (not just variable templates) because of cases like:
13278 template <class T> void f() { extern T t; }
13280 where the entity referenced is not known until
13281 instantiation time. */
13282 local_p = false;
13283 ctx = DECL_CONTEXT (t);
13284 if (DECL_CLASS_SCOPE_P (t))
13286 ctx = tsubst_aggr_type (ctx, args,
13287 complain,
13288 in_decl, /*entering_scope=*/1);
13289 /* If CTX is unchanged, then T is in fact the
13290 specialization we want. That situation occurs when
13291 referencing a static data member within in its own
13292 class. We can use pointer equality, rather than
13293 same_type_p, because DECL_CONTEXT is always
13294 canonical... */
13295 if (ctx == DECL_CONTEXT (t)
13296 /* ... unless T is a member template; in which
13297 case our caller can be willing to create a
13298 specialization of that template represented
13299 by T. */
13300 && !(DECL_TI_TEMPLATE (t)
13301 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (t))))
13302 spec = t;
13305 if (!spec)
13307 tmpl = DECL_TI_TEMPLATE (t);
13308 gen_tmpl = most_general_template (tmpl);
13309 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
13310 if (argvec != error_mark_node)
13311 argvec = (coerce_innermost_template_parms
13312 (DECL_TEMPLATE_PARMS (gen_tmpl),
13313 argvec, t, complain,
13314 /*all*/true, /*defarg*/true));
13315 if (argvec == error_mark_node)
13316 RETURN (error_mark_node);
13317 hash = hash_tmpl_and_args (gen_tmpl, argvec);
13318 spec = retrieve_specialization (gen_tmpl, argvec, hash);
13321 else
13323 /* A local variable. */
13324 local_p = true;
13325 /* Subsequent calls to pushdecl will fill this in. */
13326 ctx = NULL_TREE;
13327 /* Unless this is a reference to a static variable from an
13328 enclosing function, in which case we need to fill it in now. */
13329 if (TREE_STATIC (t))
13331 tree fn = enclosing_instantiation_of (DECL_CONTEXT (t));
13332 if (fn != current_function_decl)
13333 ctx = fn;
13335 spec = retrieve_local_specialization (t);
13337 /* If we already have the specialization we need, there is
13338 nothing more to do. */
13339 if (spec)
13341 r = spec;
13342 break;
13345 /* Create a new node for the specialization we need. */
13346 r = copy_decl (t);
13347 if (type == NULL_TREE)
13349 if (is_typedef_decl (t))
13350 type = DECL_ORIGINAL_TYPE (t);
13351 else
13352 type = TREE_TYPE (t);
13353 if (VAR_P (t)
13354 && VAR_HAD_UNKNOWN_BOUND (t)
13355 && type != error_mark_node)
13356 type = strip_array_domain (type);
13357 tree sub_args = args;
13358 if (tree auto_node = type_uses_auto (type))
13360 /* Mask off any template args past the variable's context so we
13361 don't replace the auto with an unrelated argument. */
13362 int nouter = TEMPLATE_TYPE_LEVEL (auto_node) - 1;
13363 int extra = TMPL_ARGS_DEPTH (args) - nouter;
13364 if (extra > 0)
13365 /* This should never happen with the new lambda instantiation
13366 model, but keep the handling just in case. */
13367 gcc_assert (!CHECKING_P),
13368 sub_args = strip_innermost_template_args (args, extra);
13370 type = tsubst (type, sub_args, complain, in_decl);
13372 if (VAR_P (r))
13374 /* Even if the original location is out of scope, the
13375 newly substituted one is not. */
13376 DECL_DEAD_FOR_LOCAL (r) = 0;
13377 DECL_INITIALIZED_P (r) = 0;
13378 DECL_TEMPLATE_INSTANTIATED (r) = 0;
13379 if (type == error_mark_node)
13380 RETURN (error_mark_node);
13381 if (TREE_CODE (type) == FUNCTION_TYPE)
13383 /* It may seem that this case cannot occur, since:
13385 typedef void f();
13386 void g() { f x; }
13388 declares a function, not a variable. However:
13390 typedef void f();
13391 template <typename T> void g() { T t; }
13392 template void g<f>();
13394 is an attempt to declare a variable with function
13395 type. */
13396 error ("variable %qD has function type",
13397 /* R is not yet sufficiently initialized, so we
13398 just use its name. */
13399 DECL_NAME (r));
13400 RETURN (error_mark_node);
13402 type = complete_type (type);
13403 /* Wait until cp_finish_decl to set this again, to handle
13404 circular dependency (template/instantiate6.C). */
13405 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r) = 0;
13406 type = check_var_type (DECL_NAME (r), type);
13408 if (DECL_HAS_VALUE_EXPR_P (t))
13410 tree ve = DECL_VALUE_EXPR (t);
13411 ve = tsubst_expr (ve, args, complain, in_decl,
13412 /*constant_expression_p=*/false);
13413 if (REFERENCE_REF_P (ve))
13415 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
13416 ve = TREE_OPERAND (ve, 0);
13418 SET_DECL_VALUE_EXPR (r, ve);
13420 if (CP_DECL_THREAD_LOCAL_P (r)
13421 && !processing_template_decl)
13422 set_decl_tls_model (r, decl_default_tls_model (r));
13424 else if (DECL_SELF_REFERENCE_P (t))
13425 SET_DECL_SELF_REFERENCE_P (r);
13426 TREE_TYPE (r) = type;
13427 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
13428 DECL_CONTEXT (r) = ctx;
13429 /* Clear out the mangled name and RTL for the instantiation. */
13430 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
13431 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
13432 SET_DECL_RTL (r, NULL);
13433 /* The initializer must not be expanded until it is required;
13434 see [temp.inst]. */
13435 DECL_INITIAL (r) = NULL_TREE;
13436 DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
13437 if (VAR_P (r))
13439 if (DECL_LANG_SPECIFIC (r))
13440 SET_DECL_DEPENDENT_INIT_P (r, false);
13442 SET_DECL_MODE (r, VOIDmode);
13444 /* Possibly limit visibility based on template args. */
13445 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
13446 if (DECL_VISIBILITY_SPECIFIED (t))
13448 DECL_VISIBILITY_SPECIFIED (r) = 0;
13449 DECL_ATTRIBUTES (r)
13450 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
13452 determine_visibility (r);
13455 if (!local_p)
13457 /* A static data member declaration is always marked
13458 external when it is declared in-class, even if an
13459 initializer is present. We mimic the non-template
13460 processing here. */
13461 DECL_EXTERNAL (r) = 1;
13462 if (DECL_NAMESPACE_SCOPE_P (t))
13463 DECL_NOT_REALLY_EXTERN (r) = 1;
13465 DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
13466 SET_DECL_IMPLICIT_INSTANTIATION (r);
13467 register_specialization (r, gen_tmpl, argvec, false, hash);
13469 else
13471 if (DECL_LANG_SPECIFIC (r))
13472 DECL_TEMPLATE_INFO (r) = NULL_TREE;
13473 if (!cp_unevaluated_operand)
13474 register_local_specialization (r, t);
13477 DECL_CHAIN (r) = NULL_TREE;
13479 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
13480 /*flags=*/0,
13481 args, complain, in_decl);
13483 /* Preserve a typedef that names a type. */
13484 if (is_typedef_decl (r) && type != error_mark_node)
13486 DECL_ORIGINAL_TYPE (r) = NULL_TREE;
13487 set_underlying_type (r);
13488 if (TYPE_DECL_ALIAS_P (r))
13489 /* An alias template specialization can be dependent
13490 even if its underlying type is not. */
13491 TYPE_DEPENDENT_P_VALID (TREE_TYPE (r)) = false;
13494 layout_decl (r, 0);
13496 break;
13498 default:
13499 gcc_unreachable ();
13501 #undef RETURN
13503 out:
13504 /* Restore the file and line information. */
13505 input_location = saved_loc;
13507 return r;
13510 /* Substitute into the ARG_TYPES of a function type.
13511 If END is a TREE_CHAIN, leave it and any following types
13512 un-substituted. */
13514 static tree
13515 tsubst_arg_types (tree arg_types,
13516 tree args,
13517 tree end,
13518 tsubst_flags_t complain,
13519 tree in_decl)
13521 tree remaining_arg_types;
13522 tree type = NULL_TREE;
13523 int i = 1;
13524 tree expanded_args = NULL_TREE;
13525 tree default_arg;
13527 if (!arg_types || arg_types == void_list_node || arg_types == end)
13528 return arg_types;
13530 remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
13531 args, end, complain, in_decl);
13532 if (remaining_arg_types == error_mark_node)
13533 return error_mark_node;
13535 if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
13537 /* For a pack expansion, perform substitution on the
13538 entire expression. Later on, we'll handle the arguments
13539 one-by-one. */
13540 expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
13541 args, complain, in_decl);
13543 if (TREE_CODE (expanded_args) == TREE_VEC)
13544 /* So that we'll spin through the parameters, one by one. */
13545 i = TREE_VEC_LENGTH (expanded_args);
13546 else
13548 /* We only partially substituted into the parameter
13549 pack. Our type is TYPE_PACK_EXPANSION. */
13550 type = expanded_args;
13551 expanded_args = NULL_TREE;
13555 while (i > 0) {
13556 --i;
13558 if (expanded_args)
13559 type = TREE_VEC_ELT (expanded_args, i);
13560 else if (!type)
13561 type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
13563 if (type == error_mark_node)
13564 return error_mark_node;
13565 if (VOID_TYPE_P (type))
13567 if (complain & tf_error)
13569 error ("invalid parameter type %qT", type);
13570 if (in_decl)
13571 error ("in declaration %q+D", in_decl);
13573 return error_mark_node;
13575 /* DR 657. */
13576 if (abstract_virtuals_error_sfinae (ACU_PARM, type, complain))
13577 return error_mark_node;
13579 /* Do array-to-pointer, function-to-pointer conversion, and ignore
13580 top-level qualifiers as required. */
13581 type = cv_unqualified (type_decays_to (type));
13583 /* We do not substitute into default arguments here. The standard
13584 mandates that they be instantiated only when needed, which is
13585 done in build_over_call. */
13586 default_arg = TREE_PURPOSE (arg_types);
13588 /* Except that we do substitute default arguments under tsubst_lambda_expr,
13589 since the new op() won't have any associated template arguments for us
13590 to refer to later. */
13591 if (lambda_fn_in_template_p (in_decl))
13592 default_arg = tsubst_copy_and_build (default_arg, args, complain, in_decl,
13593 false/*fn*/, false/*constexpr*/);
13595 if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
13597 /* We've instantiated a template before its default arguments
13598 have been parsed. This can happen for a nested template
13599 class, and is not an error unless we require the default
13600 argument in a call of this function. */
13601 remaining_arg_types =
13602 tree_cons (default_arg, type, remaining_arg_types);
13603 vec_safe_push (DEFARG_INSTANTIATIONS(default_arg), remaining_arg_types);
13605 else
13606 remaining_arg_types =
13607 hash_tree_cons (default_arg, type, remaining_arg_types);
13610 return remaining_arg_types;
13613 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
13614 *not* handle the exception-specification for FNTYPE, because the
13615 initial substitution of explicitly provided template parameters
13616 during argument deduction forbids substitution into the
13617 exception-specification:
13619 [temp.deduct]
13621 All references in the function type of the function template to the
13622 corresponding template parameters are replaced by the specified tem-
13623 plate argument values. If a substitution in a template parameter or
13624 in the function type of the function template results in an invalid
13625 type, type deduction fails. [Note: The equivalent substitution in
13626 exception specifications is done only when the function is instanti-
13627 ated, at which point a program is ill-formed if the substitution
13628 results in an invalid type.] */
13630 static tree
13631 tsubst_function_type (tree t,
13632 tree args,
13633 tsubst_flags_t complain,
13634 tree in_decl)
13636 tree return_type;
13637 tree arg_types = NULL_TREE;
13638 tree fntype;
13640 /* The TYPE_CONTEXT is not used for function/method types. */
13641 gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
13643 /* DR 1227: Mixing immediate and non-immediate contexts in deduction
13644 failure. */
13645 bool late_return_type_p = TYPE_HAS_LATE_RETURN_TYPE (t);
13647 if (late_return_type_p)
13649 /* Substitute the argument types. */
13650 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args, NULL_TREE,
13651 complain, in_decl);
13652 if (arg_types == error_mark_node)
13653 return error_mark_node;
13655 tree save_ccp = current_class_ptr;
13656 tree save_ccr = current_class_ref;
13657 tree this_type = (TREE_CODE (t) == METHOD_TYPE
13658 ? TREE_TYPE (TREE_VALUE (arg_types)) : NULL_TREE);
13659 bool do_inject = this_type && CLASS_TYPE_P (this_type);
13660 if (do_inject)
13662 /* DR 1207: 'this' is in scope in the trailing return type. */
13663 inject_this_parameter (this_type, cp_type_quals (this_type));
13666 /* Substitute the return type. */
13667 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13669 if (do_inject)
13671 current_class_ptr = save_ccp;
13672 current_class_ref = save_ccr;
13675 else
13676 /* Substitute the return type. */
13677 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13679 if (return_type == error_mark_node)
13680 return error_mark_node;
13681 /* DR 486 clarifies that creation of a function type with an
13682 invalid return type is a deduction failure. */
13683 if (TREE_CODE (return_type) == ARRAY_TYPE
13684 || TREE_CODE (return_type) == FUNCTION_TYPE)
13686 if (complain & tf_error)
13688 if (TREE_CODE (return_type) == ARRAY_TYPE)
13689 error ("function returning an array");
13690 else
13691 error ("function returning a function");
13693 return error_mark_node;
13695 /* And DR 657. */
13696 if (abstract_virtuals_error_sfinae (ACU_RETURN, return_type, complain))
13697 return error_mark_node;
13699 if (!late_return_type_p)
13701 /* Substitute the argument types. */
13702 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args, NULL_TREE,
13703 complain, in_decl);
13704 if (arg_types == error_mark_node)
13705 return error_mark_node;
13708 /* Construct a new type node and return it. */
13709 if (TREE_CODE (t) == FUNCTION_TYPE)
13711 fntype = build_function_type (return_type, arg_types);
13712 fntype = apply_memfn_quals (fntype,
13713 type_memfn_quals (t),
13714 type_memfn_rqual (t));
13716 else
13718 tree r = TREE_TYPE (TREE_VALUE (arg_types));
13719 /* Don't pick up extra function qualifiers from the basetype. */
13720 r = cp_build_qualified_type_real (r, type_memfn_quals (t), complain);
13721 if (! MAYBE_CLASS_TYPE_P (r))
13723 /* [temp.deduct]
13725 Type deduction may fail for any of the following
13726 reasons:
13728 -- Attempting to create "pointer to member of T" when T
13729 is not a class type. */
13730 if (complain & tf_error)
13731 error ("creating pointer to member function of non-class type %qT",
13733 return error_mark_node;
13736 fntype = build_method_type_directly (r, return_type,
13737 TREE_CHAIN (arg_types));
13738 fntype = build_ref_qualified_type (fntype, type_memfn_rqual (t));
13740 fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
13742 if (late_return_type_p)
13743 TYPE_HAS_LATE_RETURN_TYPE (fntype) = 1;
13745 return fntype;
13748 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE. Substitute the template
13749 ARGS into that specification, and return the substituted
13750 specification. If there is no specification, return NULL_TREE. */
13752 static tree
13753 tsubst_exception_specification (tree fntype,
13754 tree args,
13755 tsubst_flags_t complain,
13756 tree in_decl,
13757 bool defer_ok)
13759 tree specs;
13760 tree new_specs;
13762 specs = TYPE_RAISES_EXCEPTIONS (fntype);
13763 new_specs = NULL_TREE;
13764 if (specs && TREE_PURPOSE (specs))
13766 /* A noexcept-specifier. */
13767 tree expr = TREE_PURPOSE (specs);
13768 if (TREE_CODE (expr) == INTEGER_CST)
13769 new_specs = expr;
13770 else if (defer_ok)
13772 /* Defer instantiation of noexcept-specifiers to avoid
13773 excessive instantiations (c++/49107). */
13774 new_specs = make_node (DEFERRED_NOEXCEPT);
13775 if (DEFERRED_NOEXCEPT_SPEC_P (specs))
13777 /* We already partially instantiated this member template,
13778 so combine the new args with the old. */
13779 DEFERRED_NOEXCEPT_PATTERN (new_specs)
13780 = DEFERRED_NOEXCEPT_PATTERN (expr);
13781 DEFERRED_NOEXCEPT_ARGS (new_specs)
13782 = add_to_template_args (DEFERRED_NOEXCEPT_ARGS (expr), args);
13784 else
13786 DEFERRED_NOEXCEPT_PATTERN (new_specs) = expr;
13787 DEFERRED_NOEXCEPT_ARGS (new_specs) = args;
13790 else
13791 new_specs = tsubst_copy_and_build
13792 (expr, args, complain, in_decl, /*function_p=*/false,
13793 /*integral_constant_expression_p=*/true);
13794 new_specs = build_noexcept_spec (new_specs, complain);
13796 else if (specs)
13798 if (! TREE_VALUE (specs))
13799 new_specs = specs;
13800 else
13801 while (specs)
13803 tree spec;
13804 int i, len = 1;
13805 tree expanded_specs = NULL_TREE;
13807 if (PACK_EXPANSION_P (TREE_VALUE (specs)))
13809 /* Expand the pack expansion type. */
13810 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
13811 args, complain,
13812 in_decl);
13814 if (expanded_specs == error_mark_node)
13815 return error_mark_node;
13816 else if (TREE_CODE (expanded_specs) == TREE_VEC)
13817 len = TREE_VEC_LENGTH (expanded_specs);
13818 else
13820 /* We're substituting into a member template, so
13821 we got a TYPE_PACK_EXPANSION back. Add that
13822 expansion and move on. */
13823 gcc_assert (TREE_CODE (expanded_specs)
13824 == TYPE_PACK_EXPANSION);
13825 new_specs = add_exception_specifier (new_specs,
13826 expanded_specs,
13827 complain);
13828 specs = TREE_CHAIN (specs);
13829 continue;
13833 for (i = 0; i < len; ++i)
13835 if (expanded_specs)
13836 spec = TREE_VEC_ELT (expanded_specs, i);
13837 else
13838 spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
13839 if (spec == error_mark_node)
13840 return spec;
13841 new_specs = add_exception_specifier (new_specs, spec,
13842 complain);
13845 specs = TREE_CHAIN (specs);
13848 return new_specs;
13851 /* Take the tree structure T and replace template parameters used
13852 therein with the argument vector ARGS. IN_DECL is an associated
13853 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
13854 Issue error and warning messages under control of COMPLAIN. Note
13855 that we must be relatively non-tolerant of extensions here, in
13856 order to preserve conformance; if we allow substitutions that
13857 should not be allowed, we may allow argument deductions that should
13858 not succeed, and therefore report ambiguous overload situations
13859 where there are none. In theory, we could allow the substitution,
13860 but indicate that it should have failed, and allow our caller to
13861 make sure that the right thing happens, but we don't try to do this
13862 yet.
13864 This function is used for dealing with types, decls and the like;
13865 for expressions, use tsubst_expr or tsubst_copy. */
13867 tree
13868 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
13870 enum tree_code code;
13871 tree type, r = NULL_TREE;
13873 if (t == NULL_TREE || t == error_mark_node
13874 || t == integer_type_node
13875 || t == void_type_node
13876 || t == char_type_node
13877 || t == unknown_type_node
13878 || TREE_CODE (t) == NAMESPACE_DECL
13879 || TREE_CODE (t) == TRANSLATION_UNIT_DECL)
13880 return t;
13882 if (DECL_P (t))
13883 return tsubst_decl (t, args, complain);
13885 if (args == NULL_TREE)
13886 return t;
13888 code = TREE_CODE (t);
13890 if (code == IDENTIFIER_NODE)
13891 type = IDENTIFIER_TYPE_VALUE (t);
13892 else
13893 type = TREE_TYPE (t);
13895 gcc_assert (type != unknown_type_node);
13897 /* Reuse typedefs. We need to do this to handle dependent attributes,
13898 such as attribute aligned. */
13899 if (TYPE_P (t)
13900 && typedef_variant_p (t))
13902 tree decl = TYPE_NAME (t);
13904 if (alias_template_specialization_p (t))
13906 /* DECL represents an alias template and we want to
13907 instantiate it. */
13908 tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
13909 tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
13910 r = instantiate_alias_template (tmpl, gen_args, complain);
13912 else if (DECL_CLASS_SCOPE_P (decl)
13913 && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
13914 && uses_template_parms (DECL_CONTEXT (decl)))
13916 tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
13917 tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
13918 r = retrieve_specialization (tmpl, gen_args, 0);
13920 else if (DECL_FUNCTION_SCOPE_P (decl)
13921 && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
13922 && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
13923 r = retrieve_local_specialization (decl);
13924 else
13925 /* The typedef is from a non-template context. */
13926 return t;
13928 if (r)
13930 r = TREE_TYPE (r);
13931 r = cp_build_qualified_type_real
13932 (r, cp_type_quals (t) | cp_type_quals (r),
13933 complain | tf_ignore_bad_quals);
13934 return r;
13936 else
13938 /* We don't have an instantiation yet, so drop the typedef. */
13939 int quals = cp_type_quals (t);
13940 t = DECL_ORIGINAL_TYPE (decl);
13941 t = cp_build_qualified_type_real (t, quals,
13942 complain | tf_ignore_bad_quals);
13946 bool fndecl_type = (complain & tf_fndecl_type);
13947 complain &= ~tf_fndecl_type;
13949 if (type
13950 && code != TYPENAME_TYPE
13951 && code != TEMPLATE_TYPE_PARM
13952 && code != TEMPLATE_PARM_INDEX
13953 && code != IDENTIFIER_NODE
13954 && code != FUNCTION_TYPE
13955 && code != METHOD_TYPE)
13956 type = tsubst (type, args, complain, in_decl);
13957 if (type == error_mark_node)
13958 return error_mark_node;
13960 switch (code)
13962 case RECORD_TYPE:
13963 case UNION_TYPE:
13964 case ENUMERAL_TYPE:
13965 return tsubst_aggr_type (t, args, complain, in_decl,
13966 /*entering_scope=*/0);
13968 case ERROR_MARK:
13969 case IDENTIFIER_NODE:
13970 case VOID_TYPE:
13971 case REAL_TYPE:
13972 case COMPLEX_TYPE:
13973 case VECTOR_TYPE:
13974 case BOOLEAN_TYPE:
13975 case NULLPTR_TYPE:
13976 case LANG_TYPE:
13977 return t;
13979 case INTEGER_TYPE:
13980 if (t == integer_type_node)
13981 return t;
13983 if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
13984 && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
13985 return t;
13988 tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
13990 max = tsubst_expr (omax, args, complain, in_decl,
13991 /*integral_constant_expression_p=*/false);
13993 /* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
13994 needed. */
13995 if (TREE_CODE (max) == NOP_EXPR
13996 && TREE_SIDE_EFFECTS (omax)
13997 && !TREE_TYPE (max))
13998 TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
14000 /* If we're in a partial instantiation, preserve the magic NOP_EXPR
14001 with TREE_SIDE_EFFECTS that indicates this is not an integral
14002 constant expression. */
14003 if (processing_template_decl
14004 && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
14006 gcc_assert (TREE_CODE (max) == NOP_EXPR);
14007 TREE_SIDE_EFFECTS (max) = 1;
14010 return compute_array_index_type (NULL_TREE, max, complain);
14013 case TEMPLATE_TYPE_PARM:
14014 case TEMPLATE_TEMPLATE_PARM:
14015 case BOUND_TEMPLATE_TEMPLATE_PARM:
14016 case TEMPLATE_PARM_INDEX:
14018 int idx;
14019 int level;
14020 int levels;
14021 tree arg = NULL_TREE;
14023 /* Early in template argument deduction substitution, we don't
14024 want to reduce the level of 'auto', or it will be confused
14025 with a normal template parm in subsequent deduction. */
14026 if (is_auto (t) && (complain & tf_partial))
14027 return t;
14029 r = NULL_TREE;
14031 gcc_assert (TREE_VEC_LENGTH (args) > 0);
14032 template_parm_level_and_index (t, &level, &idx);
14034 levels = TMPL_ARGS_DEPTH (args);
14035 if (level <= levels
14036 && TREE_VEC_LENGTH (TMPL_ARGS_LEVEL (args, level)) > 0)
14038 arg = TMPL_ARG (args, level, idx);
14040 /* See through ARGUMENT_PACK_SELECT arguments. */
14041 if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
14042 arg = argument_pack_select_arg (arg);
14045 if (arg == error_mark_node)
14046 return error_mark_node;
14047 else if (arg != NULL_TREE)
14049 if (ARGUMENT_PACK_P (arg))
14050 /* If ARG is an argument pack, we don't actually want to
14051 perform a substitution here, because substitutions
14052 for argument packs are only done
14053 element-by-element. We can get to this point when
14054 substituting the type of a non-type template
14055 parameter pack, when that type actually contains
14056 template parameter packs from an outer template, e.g.,
14058 template<typename... Types> struct A {
14059 template<Types... Values> struct B { };
14060 }; */
14061 return t;
14063 if (code == TEMPLATE_TYPE_PARM)
14065 int quals;
14066 gcc_assert (TYPE_P (arg));
14068 quals = cp_type_quals (arg) | cp_type_quals (t);
14070 return cp_build_qualified_type_real
14071 (arg, quals, complain | tf_ignore_bad_quals);
14073 else if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
14075 /* We are processing a type constructed from a
14076 template template parameter. */
14077 tree argvec = tsubst (TYPE_TI_ARGS (t),
14078 args, complain, in_decl);
14079 if (argvec == error_mark_node)
14080 return error_mark_node;
14082 gcc_assert (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
14083 || TREE_CODE (arg) == TEMPLATE_DECL
14084 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
14086 if (TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE)
14087 /* Consider this code:
14089 template <template <class> class Template>
14090 struct Internal {
14091 template <class Arg> using Bind = Template<Arg>;
14094 template <template <class> class Template, class Arg>
14095 using Instantiate = Template<Arg>; //#0
14097 template <template <class> class Template,
14098 class Argument>
14099 using Bind =
14100 Instantiate<Internal<Template>::template Bind,
14101 Argument>; //#1
14103 When #1 is parsed, the
14104 BOUND_TEMPLATE_TEMPLATE_PARM representing the
14105 parameter `Template' in #0 matches the
14106 UNBOUND_CLASS_TEMPLATE representing the argument
14107 `Internal<Template>::template Bind'; We then want
14108 to assemble the type `Bind<Argument>' that can't
14109 be fully created right now, because
14110 `Internal<Template>' not being complete, the Bind
14111 template cannot be looked up in that context. So
14112 we need to "store" `Bind<Argument>' for later
14113 when the context of Bind becomes complete. Let's
14114 store that in a TYPENAME_TYPE. */
14115 return make_typename_type (TYPE_CONTEXT (arg),
14116 build_nt (TEMPLATE_ID_EXPR,
14117 TYPE_IDENTIFIER (arg),
14118 argvec),
14119 typename_type,
14120 complain);
14122 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
14123 are resolving nested-types in the signature of a
14124 member function templates. Otherwise ARG is a
14125 TEMPLATE_DECL and is the real template to be
14126 instantiated. */
14127 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
14128 arg = TYPE_NAME (arg);
14130 r = lookup_template_class (arg,
14131 argvec, in_decl,
14132 DECL_CONTEXT (arg),
14133 /*entering_scope=*/0,
14134 complain);
14135 return cp_build_qualified_type_real
14136 (r, cp_type_quals (t) | cp_type_quals (r), complain);
14138 else if (code == TEMPLATE_TEMPLATE_PARM)
14139 return arg;
14140 else
14141 /* TEMPLATE_PARM_INDEX. */
14142 return convert_from_reference (unshare_expr (arg));
14145 if (level == 1)
14146 /* This can happen during the attempted tsubst'ing in
14147 unify. This means that we don't yet have any information
14148 about the template parameter in question. */
14149 return t;
14151 /* If we get here, we must have been looking at a parm for a
14152 more deeply nested template. Make a new version of this
14153 template parameter, but with a lower level. */
14154 switch (code)
14156 case TEMPLATE_TYPE_PARM:
14157 case TEMPLATE_TEMPLATE_PARM:
14158 case BOUND_TEMPLATE_TEMPLATE_PARM:
14159 if (cp_type_quals (t))
14161 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
14162 r = cp_build_qualified_type_real
14163 (r, cp_type_quals (t),
14164 complain | (code == TEMPLATE_TYPE_PARM
14165 ? tf_ignore_bad_quals : 0));
14167 else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
14168 && PLACEHOLDER_TYPE_CONSTRAINTS (t)
14169 && (r = (TEMPLATE_PARM_DESCENDANTS
14170 (TEMPLATE_TYPE_PARM_INDEX (t))))
14171 && (r = TREE_TYPE (r))
14172 && !PLACEHOLDER_TYPE_CONSTRAINTS (r))
14173 /* Break infinite recursion when substituting the constraints
14174 of a constrained placeholder. */;
14175 else
14177 r = copy_type (t);
14178 TEMPLATE_TYPE_PARM_INDEX (r)
14179 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
14180 r, levels, args, complain);
14181 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
14182 TYPE_MAIN_VARIANT (r) = r;
14183 TYPE_POINTER_TO (r) = NULL_TREE;
14184 TYPE_REFERENCE_TO (r) = NULL_TREE;
14186 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
14188 /* Propagate constraints on placeholders. */
14189 if (tree constr = PLACEHOLDER_TYPE_CONSTRAINTS (t))
14190 PLACEHOLDER_TYPE_CONSTRAINTS (r)
14191 = tsubst_constraint (constr, args, complain, in_decl);
14192 else if (tree pl = CLASS_PLACEHOLDER_TEMPLATE (t))
14194 pl = tsubst_copy (pl, args, complain, in_decl);
14195 CLASS_PLACEHOLDER_TEMPLATE (r) = pl;
14199 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
14200 /* We have reduced the level of the template
14201 template parameter, but not the levels of its
14202 template parameters, so canonical_type_parameter
14203 will not be able to find the canonical template
14204 template parameter for this level. Thus, we
14205 require structural equality checking to compare
14206 TEMPLATE_TEMPLATE_PARMs. */
14207 SET_TYPE_STRUCTURAL_EQUALITY (r);
14208 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
14209 SET_TYPE_STRUCTURAL_EQUALITY (r);
14210 else
14211 TYPE_CANONICAL (r) = canonical_type_parameter (r);
14213 if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
14215 tree tinfo = TYPE_TEMPLATE_INFO (t);
14216 /* We might need to substitute into the types of non-type
14217 template parameters. */
14218 tree tmpl = tsubst (TI_TEMPLATE (tinfo), args,
14219 complain, in_decl);
14220 if (tmpl == error_mark_node)
14221 return error_mark_node;
14222 tree argvec = tsubst (TI_ARGS (tinfo), args,
14223 complain, in_decl);
14224 if (argvec == error_mark_node)
14225 return error_mark_node;
14227 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
14228 = build_template_info (tmpl, argvec);
14231 break;
14233 case TEMPLATE_PARM_INDEX:
14234 /* OK, now substitute the type of the non-type parameter. We
14235 couldn't do it earlier because it might be an auto parameter,
14236 and we wouldn't need to if we had an argument. */
14237 type = tsubst (type, args, complain, in_decl);
14238 if (type == error_mark_node)
14239 return error_mark_node;
14240 r = reduce_template_parm_level (t, type, levels, args, complain);
14241 break;
14243 default:
14244 gcc_unreachable ();
14247 return r;
14250 case TREE_LIST:
14252 tree purpose, value, chain;
14254 if (t == void_list_node)
14255 return t;
14257 purpose = TREE_PURPOSE (t);
14258 if (purpose)
14260 purpose = tsubst (purpose, args, complain, in_decl);
14261 if (purpose == error_mark_node)
14262 return error_mark_node;
14264 value = TREE_VALUE (t);
14265 if (value)
14267 value = tsubst (value, args, complain, in_decl);
14268 if (value == error_mark_node)
14269 return error_mark_node;
14271 chain = TREE_CHAIN (t);
14272 if (chain && chain != void_type_node)
14274 chain = tsubst (chain, args, complain, in_decl);
14275 if (chain == error_mark_node)
14276 return error_mark_node;
14278 if (purpose == TREE_PURPOSE (t)
14279 && value == TREE_VALUE (t)
14280 && chain == TREE_CHAIN (t))
14281 return t;
14282 return hash_tree_cons (purpose, value, chain);
14285 case TREE_BINFO:
14286 /* We should never be tsubsting a binfo. */
14287 gcc_unreachable ();
14289 case TREE_VEC:
14290 /* A vector of template arguments. */
14291 gcc_assert (!type);
14292 return tsubst_template_args (t, args, complain, in_decl);
14294 case POINTER_TYPE:
14295 case REFERENCE_TYPE:
14297 if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
14298 return t;
14300 /* [temp.deduct]
14302 Type deduction may fail for any of the following
14303 reasons:
14305 -- Attempting to create a pointer to reference type.
14306 -- Attempting to create a reference to a reference type or
14307 a reference to void.
14309 Core issue 106 says that creating a reference to a reference
14310 during instantiation is no longer a cause for failure. We
14311 only enforce this check in strict C++98 mode. */
14312 if ((TREE_CODE (type) == REFERENCE_TYPE
14313 && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
14314 || (code == REFERENCE_TYPE && VOID_TYPE_P (type)))
14316 static location_t last_loc;
14318 /* We keep track of the last time we issued this error
14319 message to avoid spewing a ton of messages during a
14320 single bad template instantiation. */
14321 if (complain & tf_error
14322 && last_loc != input_location)
14324 if (VOID_TYPE_P (type))
14325 error ("forming reference to void");
14326 else if (code == POINTER_TYPE)
14327 error ("forming pointer to reference type %qT", type);
14328 else
14329 error ("forming reference to reference type %qT", type);
14330 last_loc = input_location;
14333 return error_mark_node;
14335 else if (TREE_CODE (type) == FUNCTION_TYPE
14336 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
14337 || type_memfn_rqual (type) != REF_QUAL_NONE))
14339 if (complain & tf_error)
14341 if (code == POINTER_TYPE)
14342 error ("forming pointer to qualified function type %qT",
14343 type);
14344 else
14345 error ("forming reference to qualified function type %qT",
14346 type);
14348 return error_mark_node;
14350 else if (code == POINTER_TYPE)
14352 r = build_pointer_type (type);
14353 if (TREE_CODE (type) == METHOD_TYPE)
14354 r = build_ptrmemfunc_type (r);
14356 else if (TREE_CODE (type) == REFERENCE_TYPE)
14357 /* In C++0x, during template argument substitution, when there is an
14358 attempt to create a reference to a reference type, reference
14359 collapsing is applied as described in [14.3.1/4 temp.arg.type]:
14361 "If a template-argument for a template-parameter T names a type
14362 that is a reference to a type A, an attempt to create the type
14363 'lvalue reference to cv T' creates the type 'lvalue reference to
14364 A,' while an attempt to create the type type rvalue reference to
14365 cv T' creates the type T"
14367 r = cp_build_reference_type
14368 (TREE_TYPE (type),
14369 TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
14370 else
14371 r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
14372 r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
14374 if (r != error_mark_node)
14375 /* Will this ever be needed for TYPE_..._TO values? */
14376 layout_type (r);
14378 return r;
14380 case OFFSET_TYPE:
14382 r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
14383 if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
14385 /* [temp.deduct]
14387 Type deduction may fail for any of the following
14388 reasons:
14390 -- Attempting to create "pointer to member of T" when T
14391 is not a class type. */
14392 if (complain & tf_error)
14393 error ("creating pointer to member of non-class type %qT", r);
14394 return error_mark_node;
14396 if (TREE_CODE (type) == REFERENCE_TYPE)
14398 if (complain & tf_error)
14399 error ("creating pointer to member reference type %qT", type);
14400 return error_mark_node;
14402 if (VOID_TYPE_P (type))
14404 if (complain & tf_error)
14405 error ("creating pointer to member of type void");
14406 return error_mark_node;
14408 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
14409 if (TREE_CODE (type) == FUNCTION_TYPE)
14411 /* The type of the implicit object parameter gets its
14412 cv-qualifiers from the FUNCTION_TYPE. */
14413 tree memptr;
14414 tree method_type
14415 = build_memfn_type (type, r, type_memfn_quals (type),
14416 type_memfn_rqual (type));
14417 memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
14418 return cp_build_qualified_type_real (memptr, cp_type_quals (t),
14419 complain);
14421 else
14422 return cp_build_qualified_type_real (build_ptrmem_type (r, type),
14423 cp_type_quals (t),
14424 complain);
14426 case FUNCTION_TYPE:
14427 case METHOD_TYPE:
14429 tree fntype;
14430 tree specs;
14431 fntype = tsubst_function_type (t, args, complain, in_decl);
14432 if (fntype == error_mark_node)
14433 return error_mark_node;
14435 /* Substitute the exception specification. */
14436 specs = tsubst_exception_specification (t, args, complain, in_decl,
14437 /*defer_ok*/fndecl_type);
14438 if (specs == error_mark_node)
14439 return error_mark_node;
14440 if (specs)
14441 fntype = build_exception_variant (fntype, specs);
14442 return fntype;
14444 case ARRAY_TYPE:
14446 tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
14447 if (domain == error_mark_node)
14448 return error_mark_node;
14450 /* As an optimization, we avoid regenerating the array type if
14451 it will obviously be the same as T. */
14452 if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
14453 return t;
14455 /* These checks should match the ones in create_array_type_for_decl.
14457 [temp.deduct]
14459 The deduction may fail for any of the following reasons:
14461 -- Attempting to create an array with an element type that
14462 is void, a function type, or a reference type, or [DR337]
14463 an abstract class type. */
14464 if (VOID_TYPE_P (type)
14465 || TREE_CODE (type) == FUNCTION_TYPE
14466 || (TREE_CODE (type) == ARRAY_TYPE
14467 && TYPE_DOMAIN (type) == NULL_TREE)
14468 || TREE_CODE (type) == REFERENCE_TYPE)
14470 if (complain & tf_error)
14471 error ("creating array of %qT", type);
14472 return error_mark_node;
14475 if (abstract_virtuals_error_sfinae (ACU_ARRAY, type, complain))
14476 return error_mark_node;
14478 r = build_cplus_array_type (type, domain);
14480 if (TYPE_USER_ALIGN (t))
14482 SET_TYPE_ALIGN (r, TYPE_ALIGN (t));
14483 TYPE_USER_ALIGN (r) = 1;
14486 return r;
14489 case TYPENAME_TYPE:
14491 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
14492 in_decl, /*entering_scope=*/1);
14493 if (ctx == error_mark_node)
14494 return error_mark_node;
14496 tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
14497 complain, in_decl);
14498 if (f == error_mark_node)
14499 return error_mark_node;
14501 if (!MAYBE_CLASS_TYPE_P (ctx))
14503 if (complain & tf_error)
14504 error ("%qT is not a class, struct, or union type", ctx);
14505 return error_mark_node;
14507 else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
14509 /* Normally, make_typename_type does not require that the CTX
14510 have complete type in order to allow things like:
14512 template <class T> struct S { typename S<T>::X Y; };
14514 But, such constructs have already been resolved by this
14515 point, so here CTX really should have complete type, unless
14516 it's a partial instantiation. */
14517 ctx = complete_type (ctx);
14518 if (!COMPLETE_TYPE_P (ctx))
14520 if (complain & tf_error)
14521 cxx_incomplete_type_error (NULL_TREE, ctx);
14522 return error_mark_node;
14526 f = make_typename_type (ctx, f, typename_type,
14527 complain | tf_keep_type_decl);
14528 if (f == error_mark_node)
14529 return f;
14530 if (TREE_CODE (f) == TYPE_DECL)
14532 complain |= tf_ignore_bad_quals;
14533 f = TREE_TYPE (f);
14536 if (TREE_CODE (f) != TYPENAME_TYPE)
14538 if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
14540 if (complain & tf_error)
14541 error ("%qT resolves to %qT, which is not an enumeration type",
14542 t, f);
14543 else
14544 return error_mark_node;
14546 else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
14548 if (complain & tf_error)
14549 error ("%qT resolves to %qT, which is is not a class type",
14550 t, f);
14551 else
14552 return error_mark_node;
14556 return cp_build_qualified_type_real
14557 (f, cp_type_quals (f) | cp_type_quals (t), complain);
14560 case UNBOUND_CLASS_TEMPLATE:
14562 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
14563 in_decl, /*entering_scope=*/1);
14564 tree name = TYPE_IDENTIFIER (t);
14565 tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
14567 if (ctx == error_mark_node || name == error_mark_node)
14568 return error_mark_node;
14570 if (parm_list)
14571 parm_list = tsubst_template_parms (parm_list, args, complain);
14572 return make_unbound_class_template (ctx, name, parm_list, complain);
14575 case TYPEOF_TYPE:
14577 tree type;
14579 ++cp_unevaluated_operand;
14580 ++c_inhibit_evaluation_warnings;
14582 type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
14583 complain, in_decl,
14584 /*integral_constant_expression_p=*/false);
14586 --cp_unevaluated_operand;
14587 --c_inhibit_evaluation_warnings;
14589 type = finish_typeof (type);
14590 return cp_build_qualified_type_real (type,
14591 cp_type_quals (t)
14592 | cp_type_quals (type),
14593 complain);
14596 case DECLTYPE_TYPE:
14598 tree type;
14600 ++cp_unevaluated_operand;
14601 ++c_inhibit_evaluation_warnings;
14603 type = tsubst_copy_and_build (DECLTYPE_TYPE_EXPR (t), args,
14604 complain|tf_decltype, in_decl,
14605 /*function_p*/false,
14606 /*integral_constant_expression*/false);
14608 if (DECLTYPE_FOR_INIT_CAPTURE (t))
14610 if (type == NULL_TREE)
14612 if (complain & tf_error)
14613 error ("empty initializer in lambda init-capture");
14614 type = error_mark_node;
14616 else if (TREE_CODE (type) == TREE_LIST)
14617 type = build_x_compound_expr_from_list (type, ELK_INIT, complain);
14620 --cp_unevaluated_operand;
14621 --c_inhibit_evaluation_warnings;
14623 if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
14624 type = lambda_capture_field_type (type,
14625 DECLTYPE_FOR_INIT_CAPTURE (t),
14626 DECLTYPE_FOR_REF_CAPTURE (t));
14627 else if (DECLTYPE_FOR_LAMBDA_PROXY (t))
14628 type = lambda_proxy_type (type);
14629 else
14631 bool id = DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t);
14632 if (id && TREE_CODE (DECLTYPE_TYPE_EXPR (t)) == BIT_NOT_EXPR
14633 && EXPR_P (type))
14634 /* In a template ~id could be either a complement expression
14635 or an unqualified-id naming a destructor; if instantiating
14636 it produces an expression, it's not an id-expression or
14637 member access. */
14638 id = false;
14639 type = finish_decltype_type (type, id, complain);
14641 return cp_build_qualified_type_real (type,
14642 cp_type_quals (t)
14643 | cp_type_quals (type),
14644 complain | tf_ignore_bad_quals);
14647 case UNDERLYING_TYPE:
14649 tree type = tsubst (UNDERLYING_TYPE_TYPE (t), args,
14650 complain, in_decl);
14651 return finish_underlying_type (type);
14654 case TYPE_ARGUMENT_PACK:
14655 case NONTYPE_ARGUMENT_PACK:
14657 tree r;
14659 if (code == NONTYPE_ARGUMENT_PACK)
14660 r = make_node (code);
14661 else
14662 r = cxx_make_type (code);
14664 tree pack_args = ARGUMENT_PACK_ARGS (t);
14665 pack_args = tsubst_template_args (pack_args, args, complain, in_decl);
14666 SET_ARGUMENT_PACK_ARGS (r, pack_args);
14668 return r;
14671 case VOID_CST:
14672 case INTEGER_CST:
14673 case REAL_CST:
14674 case STRING_CST:
14675 case PLUS_EXPR:
14676 case MINUS_EXPR:
14677 case NEGATE_EXPR:
14678 case NOP_EXPR:
14679 case INDIRECT_REF:
14680 case ADDR_EXPR:
14681 case CALL_EXPR:
14682 case ARRAY_REF:
14683 case SCOPE_REF:
14684 /* We should use one of the expression tsubsts for these codes. */
14685 gcc_unreachable ();
14687 default:
14688 sorry ("use of %qs in template", get_tree_code_name (code));
14689 return error_mark_node;
14693 /* tsubst a BASELINK. OBJECT_TYPE, if non-NULL, is the type of the
14694 expression on the left-hand side of the "." or "->" operator. We
14695 only do the lookup if we had a dependent BASELINK. Otherwise we
14696 adjust it onto the instantiated heirarchy. */
14698 static tree
14699 tsubst_baselink (tree baselink, tree object_type,
14700 tree args, tsubst_flags_t complain, tree in_decl)
14702 bool qualified_p = BASELINK_QUALIFIED_P (baselink);
14703 tree qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
14704 qualifying_scope = tsubst (qualifying_scope, args, complain, in_decl);
14706 tree optype = BASELINK_OPTYPE (baselink);
14707 optype = tsubst (optype, args, complain, in_decl);
14709 tree template_args = NULL_TREE;
14710 bool template_id_p = false;
14711 tree fns = BASELINK_FUNCTIONS (baselink);
14712 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
14714 template_id_p = true;
14715 template_args = TREE_OPERAND (fns, 1);
14716 fns = TREE_OPERAND (fns, 0);
14717 if (template_args)
14718 template_args = tsubst_template_args (template_args, args,
14719 complain, in_decl);
14722 tree binfo_type = BINFO_TYPE (BASELINK_BINFO (baselink));
14723 binfo_type = tsubst (binfo_type, args, complain, in_decl);
14724 bool dependent_p = binfo_type != BINFO_TYPE (BASELINK_BINFO (baselink));
14726 if (dependent_p)
14728 tree name = OVL_NAME (fns);
14729 if (IDENTIFIER_CONV_OP_P (name))
14730 name = make_conv_op_name (optype);
14732 if (name == complete_dtor_identifier)
14733 /* Treat as-if non-dependent below. */
14734 dependent_p = false;
14736 baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
14737 if (!baselink)
14739 if ((complain & tf_error)
14740 && constructor_name_p (name, qualifying_scope))
14741 error ("cannot call constructor %<%T::%D%> directly",
14742 qualifying_scope, name);
14743 return error_mark_node;
14746 if (BASELINK_P (baselink))
14747 fns = BASELINK_FUNCTIONS (baselink);
14749 else
14750 /* We're going to overwrite pieces below, make a duplicate. */
14751 baselink = copy_node (baselink);
14753 /* If lookup found a single function, mark it as used at this point.
14754 (If lookup found multiple functions the one selected later by
14755 overload resolution will be marked as used at that point.) */
14756 if (!template_id_p && !really_overloaded_fn (fns))
14758 tree fn = OVL_FIRST (fns);
14759 bool ok = mark_used (fn, complain);
14760 if (!ok && !(complain & tf_error))
14761 return error_mark_node;
14762 if (ok && BASELINK_P (baselink))
14763 /* We might have instantiated an auto function. */
14764 TREE_TYPE (baselink) = TREE_TYPE (fn);
14767 if (BASELINK_P (baselink))
14769 /* Add back the template arguments, if present. */
14770 if (template_id_p)
14771 BASELINK_FUNCTIONS (baselink)
14772 = build2 (TEMPLATE_ID_EXPR, unknown_type_node, fns, template_args);
14774 /* Update the conversion operator type. */
14775 BASELINK_OPTYPE (baselink) = optype;
14778 if (!object_type)
14779 object_type = current_class_type;
14781 if (qualified_p || !dependent_p)
14783 baselink = adjust_result_of_qualified_name_lookup (baselink,
14784 qualifying_scope,
14785 object_type);
14786 if (!qualified_p)
14787 /* We need to call adjust_result_of_qualified_name_lookup in case the
14788 destructor names a base class, but we unset BASELINK_QUALIFIED_P
14789 so that we still get virtual function binding. */
14790 BASELINK_QUALIFIED_P (baselink) = false;
14793 return baselink;
14796 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID. DONE is
14797 true if the qualified-id will be a postfix-expression in-and-of
14798 itself; false if more of the postfix-expression follows the
14799 QUALIFIED_ID. ADDRESS_P is true if the qualified-id is the operand
14800 of "&". */
14802 static tree
14803 tsubst_qualified_id (tree qualified_id, tree args,
14804 tsubst_flags_t complain, tree in_decl,
14805 bool done, bool address_p)
14807 tree expr;
14808 tree scope;
14809 tree name;
14810 bool is_template;
14811 tree template_args;
14812 location_t loc = UNKNOWN_LOCATION;
14814 gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
14816 /* Figure out what name to look up. */
14817 name = TREE_OPERAND (qualified_id, 1);
14818 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
14820 is_template = true;
14821 loc = EXPR_LOCATION (name);
14822 template_args = TREE_OPERAND (name, 1);
14823 if (template_args)
14824 template_args = tsubst_template_args (template_args, args,
14825 complain, in_decl);
14826 if (template_args == error_mark_node)
14827 return error_mark_node;
14828 name = TREE_OPERAND (name, 0);
14830 else
14832 is_template = false;
14833 template_args = NULL_TREE;
14836 /* Substitute into the qualifying scope. When there are no ARGS, we
14837 are just trying to simplify a non-dependent expression. In that
14838 case the qualifying scope may be dependent, and, in any case,
14839 substituting will not help. */
14840 scope = TREE_OPERAND (qualified_id, 0);
14841 if (args)
14843 scope = tsubst (scope, args, complain, in_decl);
14844 expr = tsubst_copy (name, args, complain, in_decl);
14846 else
14847 expr = name;
14849 if (dependent_scope_p (scope))
14851 if (is_template)
14852 expr = build_min_nt_loc (loc, TEMPLATE_ID_EXPR, expr, template_args);
14853 tree r = build_qualified_name (NULL_TREE, scope, expr,
14854 QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
14855 REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (qualified_id);
14856 return r;
14859 if (!BASELINK_P (name) && !DECL_P (expr))
14861 if (TREE_CODE (expr) == BIT_NOT_EXPR)
14863 /* A BIT_NOT_EXPR is used to represent a destructor. */
14864 if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
14866 error ("qualifying type %qT does not match destructor name ~%qT",
14867 scope, TREE_OPERAND (expr, 0));
14868 expr = error_mark_node;
14870 else
14871 expr = lookup_qualified_name (scope, complete_dtor_identifier,
14872 /*is_type_p=*/0, false);
14874 else
14875 expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
14876 if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
14877 ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
14879 if (complain & tf_error)
14881 error ("dependent-name %qE is parsed as a non-type, but "
14882 "instantiation yields a type", qualified_id);
14883 inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
14885 return error_mark_node;
14889 if (DECL_P (expr))
14891 check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
14892 scope);
14893 /* Remember that there was a reference to this entity. */
14894 if (!mark_used (expr, complain) && !(complain & tf_error))
14895 return error_mark_node;
14898 if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
14900 if (complain & tf_error)
14901 qualified_name_lookup_error (scope,
14902 TREE_OPERAND (qualified_id, 1),
14903 expr, input_location);
14904 return error_mark_node;
14907 if (is_template)
14909 if (variable_template_p (expr))
14910 expr = lookup_and_finish_template_variable (expr, template_args,
14911 complain);
14912 else
14913 expr = lookup_template_function (expr, template_args);
14916 if (expr == error_mark_node && complain & tf_error)
14917 qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
14918 expr, input_location);
14919 else if (TYPE_P (scope))
14921 expr = (adjust_result_of_qualified_name_lookup
14922 (expr, scope, current_nonlambda_class_type ()));
14923 expr = (finish_qualified_id_expr
14924 (scope, expr, done, address_p && PTRMEM_OK_P (qualified_id),
14925 QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
14926 /*template_arg_p=*/false, complain));
14929 /* Expressions do not generally have reference type. */
14930 if (TREE_CODE (expr) != SCOPE_REF
14931 /* However, if we're about to form a pointer-to-member, we just
14932 want the referenced member referenced. */
14933 && TREE_CODE (expr) != OFFSET_REF)
14934 expr = convert_from_reference (expr);
14936 if (REF_PARENTHESIZED_P (qualified_id))
14937 expr = force_paren_expr (expr);
14939 return expr;
14942 /* tsubst the initializer for a VAR_DECL. INIT is the unsubstituted
14943 initializer, DECL is the substituted VAR_DECL. Other arguments are as
14944 for tsubst. */
14946 static tree
14947 tsubst_init (tree init, tree decl, tree args,
14948 tsubst_flags_t complain, tree in_decl)
14950 if (!init)
14951 return NULL_TREE;
14953 init = tsubst_expr (init, args, complain, in_decl, false);
14955 if (!init && TREE_TYPE (decl) != error_mark_node)
14957 /* If we had an initializer but it
14958 instantiated to nothing,
14959 value-initialize the object. This will
14960 only occur when the initializer was a
14961 pack expansion where the parameter packs
14962 used in that expansion were of length
14963 zero. */
14964 init = build_value_init (TREE_TYPE (decl),
14965 complain);
14966 if (TREE_CODE (init) == AGGR_INIT_EXPR)
14967 init = get_target_expr_sfinae (init, complain);
14968 if (TREE_CODE (init) == TARGET_EXPR)
14969 TARGET_EXPR_DIRECT_INIT_P (init) = true;
14972 return init;
14975 /* Like tsubst, but deals with expressions. This function just replaces
14976 template parms; to finish processing the resultant expression, use
14977 tsubst_copy_and_build or tsubst_expr. */
14979 static tree
14980 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
14982 enum tree_code code;
14983 tree r;
14985 if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
14986 return t;
14988 code = TREE_CODE (t);
14990 switch (code)
14992 case PARM_DECL:
14993 r = retrieve_local_specialization (t);
14995 if (r == NULL_TREE)
14997 /* We get here for a use of 'this' in an NSDMI. */
14998 if (DECL_NAME (t) == this_identifier && current_class_ptr)
14999 return current_class_ptr;
15001 /* This can happen for a parameter name used later in a function
15002 declaration (such as in a late-specified return type). Just
15003 make a dummy decl, since it's only used for its type. */
15004 gcc_assert (cp_unevaluated_operand != 0);
15005 r = tsubst_decl (t, args, complain);
15006 /* Give it the template pattern as its context; its true context
15007 hasn't been instantiated yet and this is good enough for
15008 mangling. */
15009 DECL_CONTEXT (r) = DECL_CONTEXT (t);
15012 if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
15013 r = argument_pack_select_arg (r);
15014 if (!mark_used (r, complain) && !(complain & tf_error))
15015 return error_mark_node;
15016 return r;
15018 case CONST_DECL:
15020 tree enum_type;
15021 tree v;
15023 if (DECL_TEMPLATE_PARM_P (t))
15024 return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
15025 /* There is no need to substitute into namespace-scope
15026 enumerators. */
15027 if (DECL_NAMESPACE_SCOPE_P (t))
15028 return t;
15029 /* If ARGS is NULL, then T is known to be non-dependent. */
15030 if (args == NULL_TREE)
15031 return scalar_constant_value (t);
15033 /* Unfortunately, we cannot just call lookup_name here.
15034 Consider:
15036 template <int I> int f() {
15037 enum E { a = I };
15038 struct S { void g() { E e = a; } };
15041 When we instantiate f<7>::S::g(), say, lookup_name is not
15042 clever enough to find f<7>::a. */
15043 enum_type
15044 = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
15045 /*entering_scope=*/0);
15047 for (v = TYPE_VALUES (enum_type);
15048 v != NULL_TREE;
15049 v = TREE_CHAIN (v))
15050 if (TREE_PURPOSE (v) == DECL_NAME (t))
15051 return TREE_VALUE (v);
15053 /* We didn't find the name. That should never happen; if
15054 name-lookup found it during preliminary parsing, we
15055 should find it again here during instantiation. */
15056 gcc_unreachable ();
15058 return t;
15060 case FIELD_DECL:
15061 if (DECL_CONTEXT (t))
15063 tree ctx;
15065 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
15066 /*entering_scope=*/1);
15067 if (ctx != DECL_CONTEXT (t))
15069 tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
15070 if (!r)
15072 if (complain & tf_error)
15073 error ("using invalid field %qD", t);
15074 return error_mark_node;
15076 return r;
15080 return t;
15082 case VAR_DECL:
15083 case FUNCTION_DECL:
15084 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
15085 r = tsubst (t, args, complain, in_decl);
15086 else if (local_variable_p (t)
15087 && uses_template_parms (DECL_CONTEXT (t)))
15089 r = retrieve_local_specialization (t);
15090 if (r == NULL_TREE)
15092 /* First try name lookup to find the instantiation. */
15093 r = lookup_name (DECL_NAME (t));
15094 if (r && !is_capture_proxy (r))
15096 /* Make sure that the one we found is the one we want. */
15097 tree ctx = enclosing_instantiation_of (DECL_CONTEXT (t));
15098 if (ctx != DECL_CONTEXT (r))
15099 r = NULL_TREE;
15102 if (r)
15103 /* OK */;
15104 else
15106 /* This can happen for a variable used in a
15107 late-specified return type of a local lambda, or for a
15108 local static or constant. Building a new VAR_DECL
15109 should be OK in all those cases. */
15110 r = tsubst_decl (t, args, complain);
15111 if (local_specializations)
15112 /* Avoid infinite recursion (79640). */
15113 register_local_specialization (r, t);
15114 if (decl_maybe_constant_var_p (r))
15116 /* We can't call cp_finish_decl, so handle the
15117 initializer by hand. */
15118 tree init = tsubst_init (DECL_INITIAL (t), r, args,
15119 complain, in_decl);
15120 if (!processing_template_decl)
15121 init = maybe_constant_init (init);
15122 if (processing_template_decl
15123 ? potential_constant_expression (init)
15124 : reduced_constant_expression_p (init))
15125 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
15126 = TREE_CONSTANT (r) = true;
15127 DECL_INITIAL (r) = init;
15128 if (tree auto_node = type_uses_auto (TREE_TYPE (r)))
15129 TREE_TYPE (r)
15130 = do_auto_deduction (TREE_TYPE (r), init, auto_node,
15131 complain, adc_variable_type);
15133 gcc_assert (cp_unevaluated_operand || TREE_STATIC (r)
15134 || decl_constant_var_p (r)
15135 || errorcount || sorrycount);
15136 if (!processing_template_decl
15137 && !TREE_STATIC (r))
15138 r = process_outer_var_ref (r, complain);
15140 /* Remember this for subsequent uses. */
15141 if (local_specializations)
15142 register_local_specialization (r, t);
15144 if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
15145 r = argument_pack_select_arg (r);
15147 else
15148 r = t;
15149 if (!mark_used (r, complain))
15150 return error_mark_node;
15151 return r;
15153 case NAMESPACE_DECL:
15154 return t;
15156 case OVERLOAD:
15157 /* An OVERLOAD will always be a non-dependent overload set; an
15158 overload set from function scope will just be represented with an
15159 IDENTIFIER_NODE, and from class scope with a BASELINK. */
15160 gcc_assert (!uses_template_parms (t));
15161 /* We must have marked any lookups as persistent. */
15162 gcc_assert (!OVL_LOOKUP_P (t) || OVL_USED_P (t));
15163 return t;
15165 case BASELINK:
15166 return tsubst_baselink (t, current_nonlambda_class_type (),
15167 args, complain, in_decl);
15169 case TEMPLATE_DECL:
15170 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
15171 return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
15172 args, complain, in_decl);
15173 else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
15174 return tsubst (t, args, complain, in_decl);
15175 else if (DECL_CLASS_SCOPE_P (t)
15176 && uses_template_parms (DECL_CONTEXT (t)))
15178 /* Template template argument like the following example need
15179 special treatment:
15181 template <template <class> class TT> struct C {};
15182 template <class T> struct D {
15183 template <class U> struct E {};
15184 C<E> c; // #1
15186 D<int> d; // #2
15188 We are processing the template argument `E' in #1 for
15189 the template instantiation #2. Originally, `E' is a
15190 TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT. Now we
15191 have to substitute this with one having context `D<int>'. */
15193 tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
15194 if (dependent_scope_p (context))
15196 /* When rewriting a constructor into a deduction guide, a
15197 non-dependent name can become dependent, so memtmpl<args>
15198 becomes context::template memtmpl<args>. */
15199 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
15200 return build_qualified_name (type, context, DECL_NAME (t),
15201 /*template*/true);
15203 return lookup_field (context, DECL_NAME(t), 0, false);
15205 else
15206 /* Ordinary template template argument. */
15207 return t;
15209 case NON_LVALUE_EXPR:
15210 case VIEW_CONVERT_EXPR:
15212 /* Handle location wrappers by substituting the wrapped node
15213 first, *then* reusing the resulting type. Doing the type
15214 first ensures that we handle template parameters and
15215 parameter pack expansions. */
15216 gcc_assert (location_wrapper_p (t));
15217 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
15218 return maybe_wrap_with_location (op0, EXPR_LOCATION (t));
15221 case CAST_EXPR:
15222 case REINTERPRET_CAST_EXPR:
15223 case CONST_CAST_EXPR:
15224 case STATIC_CAST_EXPR:
15225 case DYNAMIC_CAST_EXPR:
15226 case IMPLICIT_CONV_EXPR:
15227 case CONVERT_EXPR:
15228 case NOP_EXPR:
15230 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
15231 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
15232 return build1 (code, type, op0);
15235 case SIZEOF_EXPR:
15236 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0))
15237 || ARGUMENT_PACK_P (TREE_OPERAND (t, 0)))
15239 tree expanded, op = TREE_OPERAND (t, 0);
15240 int len = 0;
15242 if (SIZEOF_EXPR_TYPE_P (t))
15243 op = TREE_TYPE (op);
15245 ++cp_unevaluated_operand;
15246 ++c_inhibit_evaluation_warnings;
15247 /* We only want to compute the number of arguments. */
15248 if (PACK_EXPANSION_P (op))
15249 expanded = tsubst_pack_expansion (op, args, complain, in_decl);
15250 else
15251 expanded = tsubst_template_args (ARGUMENT_PACK_ARGS (op),
15252 args, complain, in_decl);
15253 --cp_unevaluated_operand;
15254 --c_inhibit_evaluation_warnings;
15256 if (TREE_CODE (expanded) == TREE_VEC)
15258 len = TREE_VEC_LENGTH (expanded);
15259 /* Set TREE_USED for the benefit of -Wunused. */
15260 for (int i = 0; i < len; i++)
15261 if (DECL_P (TREE_VEC_ELT (expanded, i)))
15262 TREE_USED (TREE_VEC_ELT (expanded, i)) = true;
15265 if (expanded == error_mark_node)
15266 return error_mark_node;
15267 else if (PACK_EXPANSION_P (expanded)
15268 || (TREE_CODE (expanded) == TREE_VEC
15269 && pack_expansion_args_count (expanded)))
15272 if (PACK_EXPANSION_P (expanded))
15273 /* OK. */;
15274 else if (TREE_VEC_LENGTH (expanded) == 1)
15275 expanded = TREE_VEC_ELT (expanded, 0);
15276 else
15277 expanded = make_argument_pack (expanded);
15279 if (TYPE_P (expanded))
15280 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR,
15281 complain & tf_error);
15282 else
15283 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
15284 complain & tf_error);
15286 else
15287 return build_int_cst (size_type_node, len);
15289 if (SIZEOF_EXPR_TYPE_P (t))
15291 r = tsubst (TREE_TYPE (TREE_OPERAND (t, 0)),
15292 args, complain, in_decl);
15293 r = build1 (NOP_EXPR, r, error_mark_node);
15294 r = build1 (SIZEOF_EXPR,
15295 tsubst (TREE_TYPE (t), args, complain, in_decl), r);
15296 SIZEOF_EXPR_TYPE_P (r) = 1;
15297 return r;
15299 /* Fall through */
15301 case INDIRECT_REF:
15302 case NEGATE_EXPR:
15303 case TRUTH_NOT_EXPR:
15304 case BIT_NOT_EXPR:
15305 case ADDR_EXPR:
15306 case UNARY_PLUS_EXPR: /* Unary + */
15307 case ALIGNOF_EXPR:
15308 case AT_ENCODE_EXPR:
15309 case ARROW_EXPR:
15310 case THROW_EXPR:
15311 case TYPEID_EXPR:
15312 case REALPART_EXPR:
15313 case IMAGPART_EXPR:
15314 case PAREN_EXPR:
15316 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
15317 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
15318 return build1 (code, type, op0);
15321 case COMPONENT_REF:
15323 tree object;
15324 tree name;
15326 object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
15327 name = TREE_OPERAND (t, 1);
15328 if (TREE_CODE (name) == BIT_NOT_EXPR)
15330 name = tsubst_copy (TREE_OPERAND (name, 0), args,
15331 complain, in_decl);
15332 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
15334 else if (TREE_CODE (name) == SCOPE_REF
15335 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
15337 tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
15338 complain, in_decl);
15339 name = TREE_OPERAND (name, 1);
15340 name = tsubst_copy (TREE_OPERAND (name, 0), args,
15341 complain, in_decl);
15342 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
15343 name = build_qualified_name (/*type=*/NULL_TREE,
15344 base, name,
15345 /*template_p=*/false);
15347 else if (BASELINK_P (name))
15348 name = tsubst_baselink (name,
15349 non_reference (TREE_TYPE (object)),
15350 args, complain,
15351 in_decl);
15352 else
15353 name = tsubst_copy (name, args, complain, in_decl);
15354 return build_nt (COMPONENT_REF, object, name, NULL_TREE);
15357 case PLUS_EXPR:
15358 case MINUS_EXPR:
15359 case MULT_EXPR:
15360 case TRUNC_DIV_EXPR:
15361 case CEIL_DIV_EXPR:
15362 case FLOOR_DIV_EXPR:
15363 case ROUND_DIV_EXPR:
15364 case EXACT_DIV_EXPR:
15365 case BIT_AND_EXPR:
15366 case BIT_IOR_EXPR:
15367 case BIT_XOR_EXPR:
15368 case TRUNC_MOD_EXPR:
15369 case FLOOR_MOD_EXPR:
15370 case TRUTH_ANDIF_EXPR:
15371 case TRUTH_ORIF_EXPR:
15372 case TRUTH_AND_EXPR:
15373 case TRUTH_OR_EXPR:
15374 case RSHIFT_EXPR:
15375 case LSHIFT_EXPR:
15376 case RROTATE_EXPR:
15377 case LROTATE_EXPR:
15378 case EQ_EXPR:
15379 case NE_EXPR:
15380 case MAX_EXPR:
15381 case MIN_EXPR:
15382 case LE_EXPR:
15383 case GE_EXPR:
15384 case LT_EXPR:
15385 case GT_EXPR:
15386 case COMPOUND_EXPR:
15387 case DOTSTAR_EXPR:
15388 case MEMBER_REF:
15389 case PREDECREMENT_EXPR:
15390 case PREINCREMENT_EXPR:
15391 case POSTDECREMENT_EXPR:
15392 case POSTINCREMENT_EXPR:
15394 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
15395 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
15396 return build_nt (code, op0, op1);
15399 case SCOPE_REF:
15401 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
15402 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
15403 return build_qualified_name (/*type=*/NULL_TREE, op0, op1,
15404 QUALIFIED_NAME_IS_TEMPLATE (t));
15407 case ARRAY_REF:
15409 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
15410 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
15411 return build_nt (ARRAY_REF, op0, op1, NULL_TREE, NULL_TREE);
15414 case CALL_EXPR:
15416 int n = VL_EXP_OPERAND_LENGTH (t);
15417 tree result = build_vl_exp (CALL_EXPR, n);
15418 int i;
15419 for (i = 0; i < n; i++)
15420 TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
15421 complain, in_decl);
15422 return result;
15425 case COND_EXPR:
15426 case MODOP_EXPR:
15427 case PSEUDO_DTOR_EXPR:
15428 case VEC_PERM_EXPR:
15430 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
15431 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
15432 tree op2 = tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl);
15433 r = build_nt (code, op0, op1, op2);
15434 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
15435 return r;
15438 case NEW_EXPR:
15440 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
15441 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
15442 tree op2 = tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl);
15443 r = build_nt (code, op0, op1, op2);
15444 NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
15445 return r;
15448 case DELETE_EXPR:
15450 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
15451 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
15452 r = build_nt (code, op0, op1);
15453 DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
15454 DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
15455 return r;
15458 case TEMPLATE_ID_EXPR:
15460 /* Substituted template arguments */
15461 tree fn = TREE_OPERAND (t, 0);
15462 tree targs = TREE_OPERAND (t, 1);
15464 fn = tsubst_copy (fn, args, complain, in_decl);
15465 if (targs)
15466 targs = tsubst_template_args (targs, args, complain, in_decl);
15468 return lookup_template_function (fn, targs);
15471 case TREE_LIST:
15473 tree purpose, value, chain;
15475 if (t == void_list_node)
15476 return t;
15478 purpose = TREE_PURPOSE (t);
15479 if (purpose)
15480 purpose = tsubst_copy (purpose, args, complain, in_decl);
15481 value = TREE_VALUE (t);
15482 if (value)
15483 value = tsubst_copy (value, args, complain, in_decl);
15484 chain = TREE_CHAIN (t);
15485 if (chain && chain != void_type_node)
15486 chain = tsubst_copy (chain, args, complain, in_decl);
15487 if (purpose == TREE_PURPOSE (t)
15488 && value == TREE_VALUE (t)
15489 && chain == TREE_CHAIN (t))
15490 return t;
15491 return tree_cons (purpose, value, chain);
15494 case RECORD_TYPE:
15495 case UNION_TYPE:
15496 case ENUMERAL_TYPE:
15497 case INTEGER_TYPE:
15498 case TEMPLATE_TYPE_PARM:
15499 case TEMPLATE_TEMPLATE_PARM:
15500 case BOUND_TEMPLATE_TEMPLATE_PARM:
15501 case TEMPLATE_PARM_INDEX:
15502 case POINTER_TYPE:
15503 case REFERENCE_TYPE:
15504 case OFFSET_TYPE:
15505 case FUNCTION_TYPE:
15506 case METHOD_TYPE:
15507 case ARRAY_TYPE:
15508 case TYPENAME_TYPE:
15509 case UNBOUND_CLASS_TEMPLATE:
15510 case TYPEOF_TYPE:
15511 case DECLTYPE_TYPE:
15512 case TYPE_DECL:
15513 return tsubst (t, args, complain, in_decl);
15515 case USING_DECL:
15516 t = DECL_NAME (t);
15517 /* Fall through. */
15518 case IDENTIFIER_NODE:
15519 if (IDENTIFIER_CONV_OP_P (t))
15521 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
15522 return make_conv_op_name (new_type);
15524 else
15525 return t;
15527 case CONSTRUCTOR:
15528 /* This is handled by tsubst_copy_and_build. */
15529 gcc_unreachable ();
15531 case VA_ARG_EXPR:
15533 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
15534 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
15535 return build_x_va_arg (EXPR_LOCATION (t), op0, type);
15538 case CLEANUP_POINT_EXPR:
15539 /* We shouldn't have built any of these during initial template
15540 generation. Instead, they should be built during instantiation
15541 in response to the saved STMT_IS_FULL_EXPR_P setting. */
15542 gcc_unreachable ();
15544 case OFFSET_REF:
15546 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
15547 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
15548 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
15549 r = build2 (code, type, op0, op1);
15550 PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
15551 if (!mark_used (TREE_OPERAND (r, 1), complain)
15552 && !(complain & tf_error))
15553 return error_mark_node;
15554 return r;
15557 case EXPR_PACK_EXPANSION:
15558 error ("invalid use of pack expansion expression");
15559 return error_mark_node;
15561 case NONTYPE_ARGUMENT_PACK:
15562 error ("use %<...%> to expand argument pack");
15563 return error_mark_node;
15565 case VOID_CST:
15566 gcc_checking_assert (t == void_node && VOID_TYPE_P (TREE_TYPE (t)));
15567 return t;
15569 case INTEGER_CST:
15570 case REAL_CST:
15571 case STRING_CST:
15572 case COMPLEX_CST:
15574 /* Instantiate any typedefs in the type. */
15575 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
15576 r = fold_convert (type, t);
15577 gcc_assert (TREE_CODE (r) == code);
15578 return r;
15581 case PTRMEM_CST:
15582 /* These can sometimes show up in a partial instantiation, but never
15583 involve template parms. */
15584 gcc_assert (!uses_template_parms (t));
15585 return t;
15587 case UNARY_LEFT_FOLD_EXPR:
15588 return tsubst_unary_left_fold (t, args, complain, in_decl);
15589 case UNARY_RIGHT_FOLD_EXPR:
15590 return tsubst_unary_right_fold (t, args, complain, in_decl);
15591 case BINARY_LEFT_FOLD_EXPR:
15592 return tsubst_binary_left_fold (t, args, complain, in_decl);
15593 case BINARY_RIGHT_FOLD_EXPR:
15594 return tsubst_binary_right_fold (t, args, complain, in_decl);
15595 case PREDICT_EXPR:
15596 return t;
15598 case DEBUG_BEGIN_STMT:
15599 /* ??? There's no point in copying it for now, but maybe some
15600 day it will contain more information, such as a pointer back
15601 to the containing function, inlined copy or so. */
15602 return t;
15604 default:
15605 /* We shouldn't get here, but keep going if !flag_checking. */
15606 if (flag_checking)
15607 gcc_unreachable ();
15608 return t;
15612 /* Helper function for tsubst_omp_clauses, used for instantiation of
15613 OMP_CLAUSE_DECL of clauses. */
15615 static tree
15616 tsubst_omp_clause_decl (tree decl, tree args, tsubst_flags_t complain,
15617 tree in_decl)
15619 if (decl == NULL_TREE)
15620 return NULL_TREE;
15622 /* Handle an OpenMP array section represented as a TREE_LIST (or
15623 OMP_CLAUSE_DEPEND_KIND). An OMP_CLAUSE_DEPEND (with a depend
15624 kind of OMP_CLAUSE_DEPEND_SINK) can also be represented as a
15625 TREE_LIST. We can handle it exactly the same as an array section
15626 (purpose, value, and a chain), even though the nomenclature
15627 (low_bound, length, etc) is different. */
15628 if (TREE_CODE (decl) == TREE_LIST)
15630 tree low_bound
15631 = tsubst_expr (TREE_PURPOSE (decl), args, complain, in_decl,
15632 /*integral_constant_expression_p=*/false);
15633 tree length = tsubst_expr (TREE_VALUE (decl), args, complain, in_decl,
15634 /*integral_constant_expression_p=*/false);
15635 tree chain = tsubst_omp_clause_decl (TREE_CHAIN (decl), args, complain,
15636 in_decl);
15637 if (TREE_PURPOSE (decl) == low_bound
15638 && TREE_VALUE (decl) == length
15639 && TREE_CHAIN (decl) == chain)
15640 return decl;
15641 tree ret = tree_cons (low_bound, length, chain);
15642 OMP_CLAUSE_DEPEND_SINK_NEGATIVE (ret)
15643 = OMP_CLAUSE_DEPEND_SINK_NEGATIVE (decl);
15644 return ret;
15646 tree ret = tsubst_expr (decl, args, complain, in_decl,
15647 /*integral_constant_expression_p=*/false);
15648 /* Undo convert_from_reference tsubst_expr could have called. */
15649 if (decl
15650 && REFERENCE_REF_P (ret)
15651 && !REFERENCE_REF_P (decl))
15652 ret = TREE_OPERAND (ret, 0);
15653 return ret;
15656 /* Like tsubst_copy, but specifically for OpenMP clauses. */
15658 static tree
15659 tsubst_omp_clauses (tree clauses, enum c_omp_region_type ort,
15660 tree args, tsubst_flags_t complain, tree in_decl)
15662 tree new_clauses = NULL_TREE, nc, oc;
15663 tree linear_no_step = NULL_TREE;
15665 for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
15667 nc = copy_node (oc);
15668 OMP_CLAUSE_CHAIN (nc) = new_clauses;
15669 new_clauses = nc;
15671 switch (OMP_CLAUSE_CODE (nc))
15673 case OMP_CLAUSE_LASTPRIVATE:
15674 if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
15676 OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
15677 tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
15678 in_decl, /*integral_constant_expression_p=*/false);
15679 OMP_CLAUSE_LASTPRIVATE_STMT (nc)
15680 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
15682 /* FALLTHRU */
15683 case OMP_CLAUSE_PRIVATE:
15684 case OMP_CLAUSE_SHARED:
15685 case OMP_CLAUSE_FIRSTPRIVATE:
15686 case OMP_CLAUSE_COPYIN:
15687 case OMP_CLAUSE_COPYPRIVATE:
15688 case OMP_CLAUSE_UNIFORM:
15689 case OMP_CLAUSE_DEPEND:
15690 case OMP_CLAUSE_FROM:
15691 case OMP_CLAUSE_TO:
15692 case OMP_CLAUSE_MAP:
15693 case OMP_CLAUSE_USE_DEVICE_PTR:
15694 case OMP_CLAUSE_IS_DEVICE_PTR:
15695 OMP_CLAUSE_DECL (nc)
15696 = tsubst_omp_clause_decl (OMP_CLAUSE_DECL (oc), args, complain,
15697 in_decl);
15698 break;
15699 case OMP_CLAUSE_TILE:
15700 case OMP_CLAUSE_IF:
15701 case OMP_CLAUSE_NUM_THREADS:
15702 case OMP_CLAUSE_SCHEDULE:
15703 case OMP_CLAUSE_COLLAPSE:
15704 case OMP_CLAUSE_FINAL:
15705 case OMP_CLAUSE_DEVICE:
15706 case OMP_CLAUSE_DIST_SCHEDULE:
15707 case OMP_CLAUSE_NUM_TEAMS:
15708 case OMP_CLAUSE_THREAD_LIMIT:
15709 case OMP_CLAUSE_SAFELEN:
15710 case OMP_CLAUSE_SIMDLEN:
15711 case OMP_CLAUSE_NUM_TASKS:
15712 case OMP_CLAUSE_GRAINSIZE:
15713 case OMP_CLAUSE_PRIORITY:
15714 case OMP_CLAUSE_ORDERED:
15715 case OMP_CLAUSE_HINT:
15716 case OMP_CLAUSE_NUM_GANGS:
15717 case OMP_CLAUSE_NUM_WORKERS:
15718 case OMP_CLAUSE_VECTOR_LENGTH:
15719 case OMP_CLAUSE_WORKER:
15720 case OMP_CLAUSE_VECTOR:
15721 case OMP_CLAUSE_ASYNC:
15722 case OMP_CLAUSE_WAIT:
15723 OMP_CLAUSE_OPERAND (nc, 0)
15724 = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
15725 in_decl, /*integral_constant_expression_p=*/false);
15726 break;
15727 case OMP_CLAUSE_REDUCTION:
15728 if (OMP_CLAUSE_REDUCTION_PLACEHOLDER (oc))
15730 tree placeholder = OMP_CLAUSE_REDUCTION_PLACEHOLDER (oc);
15731 if (TREE_CODE (placeholder) == SCOPE_REF)
15733 tree scope = tsubst (TREE_OPERAND (placeholder, 0), args,
15734 complain, in_decl);
15735 OMP_CLAUSE_REDUCTION_PLACEHOLDER (nc)
15736 = build_qualified_name (NULL_TREE, scope,
15737 TREE_OPERAND (placeholder, 1),
15738 false);
15740 else
15741 gcc_assert (identifier_p (placeholder));
15743 OMP_CLAUSE_DECL (nc)
15744 = tsubst_omp_clause_decl (OMP_CLAUSE_DECL (oc), args, complain,
15745 in_decl);
15746 break;
15747 case OMP_CLAUSE_GANG:
15748 case OMP_CLAUSE_ALIGNED:
15749 OMP_CLAUSE_DECL (nc)
15750 = tsubst_omp_clause_decl (OMP_CLAUSE_DECL (oc), args, complain,
15751 in_decl);
15752 OMP_CLAUSE_OPERAND (nc, 1)
15753 = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 1), args, complain,
15754 in_decl, /*integral_constant_expression_p=*/false);
15755 break;
15756 case OMP_CLAUSE_LINEAR:
15757 OMP_CLAUSE_DECL (nc)
15758 = tsubst_omp_clause_decl (OMP_CLAUSE_DECL (oc), args, complain,
15759 in_decl);
15760 if (OMP_CLAUSE_LINEAR_STEP (oc) == NULL_TREE)
15762 gcc_assert (!linear_no_step);
15763 linear_no_step = nc;
15765 else if (OMP_CLAUSE_LINEAR_VARIABLE_STRIDE (oc))
15766 OMP_CLAUSE_LINEAR_STEP (nc)
15767 = tsubst_omp_clause_decl (OMP_CLAUSE_LINEAR_STEP (oc), args,
15768 complain, in_decl);
15769 else
15770 OMP_CLAUSE_LINEAR_STEP (nc)
15771 = tsubst_expr (OMP_CLAUSE_LINEAR_STEP (oc), args, complain,
15772 in_decl,
15773 /*integral_constant_expression_p=*/false);
15774 break;
15775 case OMP_CLAUSE_NOWAIT:
15776 case OMP_CLAUSE_DEFAULT:
15777 case OMP_CLAUSE_UNTIED:
15778 case OMP_CLAUSE_MERGEABLE:
15779 case OMP_CLAUSE_INBRANCH:
15780 case OMP_CLAUSE_NOTINBRANCH:
15781 case OMP_CLAUSE_PROC_BIND:
15782 case OMP_CLAUSE_FOR:
15783 case OMP_CLAUSE_PARALLEL:
15784 case OMP_CLAUSE_SECTIONS:
15785 case OMP_CLAUSE_TASKGROUP:
15786 case OMP_CLAUSE_NOGROUP:
15787 case OMP_CLAUSE_THREADS:
15788 case OMP_CLAUSE_SIMD:
15789 case OMP_CLAUSE_DEFAULTMAP:
15790 case OMP_CLAUSE_INDEPENDENT:
15791 case OMP_CLAUSE_AUTO:
15792 case OMP_CLAUSE_SEQ:
15793 break;
15794 default:
15795 gcc_unreachable ();
15797 if ((ort & C_ORT_OMP_DECLARE_SIMD) == C_ORT_OMP)
15798 switch (OMP_CLAUSE_CODE (nc))
15800 case OMP_CLAUSE_SHARED:
15801 case OMP_CLAUSE_PRIVATE:
15802 case OMP_CLAUSE_FIRSTPRIVATE:
15803 case OMP_CLAUSE_LASTPRIVATE:
15804 case OMP_CLAUSE_COPYPRIVATE:
15805 case OMP_CLAUSE_LINEAR:
15806 case OMP_CLAUSE_REDUCTION:
15807 case OMP_CLAUSE_USE_DEVICE_PTR:
15808 case OMP_CLAUSE_IS_DEVICE_PTR:
15809 /* tsubst_expr on SCOPE_REF results in returning
15810 finish_non_static_data_member result. Undo that here. */
15811 if (TREE_CODE (OMP_CLAUSE_DECL (oc)) == SCOPE_REF
15812 && (TREE_CODE (TREE_OPERAND (OMP_CLAUSE_DECL (oc), 1))
15813 == IDENTIFIER_NODE))
15815 tree t = OMP_CLAUSE_DECL (nc);
15816 tree v = t;
15817 while (v)
15818 switch (TREE_CODE (v))
15820 case COMPONENT_REF:
15821 case MEM_REF:
15822 case INDIRECT_REF:
15823 CASE_CONVERT:
15824 case POINTER_PLUS_EXPR:
15825 v = TREE_OPERAND (v, 0);
15826 continue;
15827 case PARM_DECL:
15828 if (DECL_CONTEXT (v) == current_function_decl
15829 && DECL_ARTIFICIAL (v)
15830 && DECL_NAME (v) == this_identifier)
15831 OMP_CLAUSE_DECL (nc) = TREE_OPERAND (t, 1);
15832 /* FALLTHRU */
15833 default:
15834 v = NULL_TREE;
15835 break;
15838 else if (VAR_P (OMP_CLAUSE_DECL (oc))
15839 && DECL_HAS_VALUE_EXPR_P (OMP_CLAUSE_DECL (oc))
15840 && DECL_ARTIFICIAL (OMP_CLAUSE_DECL (oc))
15841 && DECL_LANG_SPECIFIC (OMP_CLAUSE_DECL (oc))
15842 && DECL_OMP_PRIVATIZED_MEMBER (OMP_CLAUSE_DECL (oc)))
15844 tree decl = OMP_CLAUSE_DECL (nc);
15845 if (VAR_P (decl))
15847 retrofit_lang_decl (decl);
15848 DECL_OMP_PRIVATIZED_MEMBER (decl) = 1;
15851 break;
15852 default:
15853 break;
15857 new_clauses = nreverse (new_clauses);
15858 if (ort != C_ORT_OMP_DECLARE_SIMD)
15860 new_clauses = finish_omp_clauses (new_clauses, ort);
15861 if (linear_no_step)
15862 for (nc = new_clauses; nc; nc = OMP_CLAUSE_CHAIN (nc))
15863 if (nc == linear_no_step)
15865 OMP_CLAUSE_LINEAR_STEP (nc) = NULL_TREE;
15866 break;
15869 return new_clauses;
15872 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes. */
15874 static tree
15875 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
15876 tree in_decl)
15878 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
15880 tree purpose, value, chain;
15882 if (t == NULL)
15883 return t;
15885 if (TREE_CODE (t) != TREE_LIST)
15886 return tsubst_copy_and_build (t, args, complain, in_decl,
15887 /*function_p=*/false,
15888 /*integral_constant_expression_p=*/false);
15890 if (t == void_list_node)
15891 return t;
15893 purpose = TREE_PURPOSE (t);
15894 if (purpose)
15895 purpose = RECUR (purpose);
15896 value = TREE_VALUE (t);
15897 if (value)
15899 if (TREE_CODE (value) != LABEL_DECL)
15900 value = RECUR (value);
15901 else
15903 value = lookup_label (DECL_NAME (value));
15904 gcc_assert (TREE_CODE (value) == LABEL_DECL);
15905 TREE_USED (value) = 1;
15908 chain = TREE_CHAIN (t);
15909 if (chain && chain != void_type_node)
15910 chain = RECUR (chain);
15911 return tree_cons (purpose, value, chain);
15912 #undef RECUR
15915 /* Used to temporarily communicate the list of #pragma omp parallel
15916 clauses to #pragma omp for instantiation if they are combined
15917 together. */
15919 static tree *omp_parallel_combined_clauses;
15921 /* Substitute one OMP_FOR iterator. */
15923 static void
15924 tsubst_omp_for_iterator (tree t, int i, tree declv, tree orig_declv,
15925 tree initv, tree condv, tree incrv, tree *clauses,
15926 tree args, tsubst_flags_t complain, tree in_decl,
15927 bool integral_constant_expression_p)
15929 #define RECUR(NODE) \
15930 tsubst_expr ((NODE), args, complain, in_decl, \
15931 integral_constant_expression_p)
15932 tree decl, init, cond, incr;
15934 init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
15935 gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
15937 if (orig_declv && OMP_FOR_ORIG_DECLS (t))
15939 tree o = TREE_VEC_ELT (OMP_FOR_ORIG_DECLS (t), i);
15940 TREE_VEC_ELT (orig_declv, i) = RECUR (o);
15943 decl = TREE_OPERAND (init, 0);
15944 init = TREE_OPERAND (init, 1);
15945 tree decl_expr = NULL_TREE;
15946 if (init && TREE_CODE (init) == DECL_EXPR)
15948 /* We need to jump through some hoops to handle declarations in the
15949 init-statement, since we might need to handle auto deduction,
15950 but we need to keep control of initialization. */
15951 decl_expr = init;
15952 init = DECL_INITIAL (DECL_EXPR_DECL (init));
15953 decl = tsubst_decl (decl, args, complain);
15955 else
15957 if (TREE_CODE (decl) == SCOPE_REF)
15959 decl = RECUR (decl);
15960 if (TREE_CODE (decl) == COMPONENT_REF)
15962 tree v = decl;
15963 while (v)
15964 switch (TREE_CODE (v))
15966 case COMPONENT_REF:
15967 case MEM_REF:
15968 case INDIRECT_REF:
15969 CASE_CONVERT:
15970 case POINTER_PLUS_EXPR:
15971 v = TREE_OPERAND (v, 0);
15972 continue;
15973 case PARM_DECL:
15974 if (DECL_CONTEXT (v) == current_function_decl
15975 && DECL_ARTIFICIAL (v)
15976 && DECL_NAME (v) == this_identifier)
15978 decl = TREE_OPERAND (decl, 1);
15979 decl = omp_privatize_field (decl, false);
15981 /* FALLTHRU */
15982 default:
15983 v = NULL_TREE;
15984 break;
15988 else
15989 decl = RECUR (decl);
15991 init = RECUR (init);
15993 tree auto_node = type_uses_auto (TREE_TYPE (decl));
15994 if (auto_node && init)
15995 TREE_TYPE (decl)
15996 = do_auto_deduction (TREE_TYPE (decl), init, auto_node, complain);
15998 gcc_assert (!type_dependent_expression_p (decl));
16000 if (!CLASS_TYPE_P (TREE_TYPE (decl)))
16002 if (decl_expr)
16004 /* Declare the variable, but don't let that initialize it. */
16005 tree init_sav = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
16006 DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL_TREE;
16007 RECUR (decl_expr);
16008 DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init_sav;
16011 cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
16012 incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
16013 if (TREE_CODE (incr) == MODIFY_EXPR)
16015 tree lhs = RECUR (TREE_OPERAND (incr, 0));
16016 tree rhs = RECUR (TREE_OPERAND (incr, 1));
16017 incr = build_x_modify_expr (EXPR_LOCATION (incr), lhs,
16018 NOP_EXPR, rhs, complain);
16020 else
16021 incr = RECUR (incr);
16022 TREE_VEC_ELT (declv, i) = decl;
16023 TREE_VEC_ELT (initv, i) = init;
16024 TREE_VEC_ELT (condv, i) = cond;
16025 TREE_VEC_ELT (incrv, i) = incr;
16026 return;
16029 if (decl_expr)
16031 /* Declare and initialize the variable. */
16032 RECUR (decl_expr);
16033 init = NULL_TREE;
16035 else if (init)
16037 tree *pc;
16038 int j;
16039 for (j = (omp_parallel_combined_clauses == NULL ? 1 : 0); j < 2; j++)
16041 for (pc = j ? clauses : omp_parallel_combined_clauses; *pc; )
16043 if (OMP_CLAUSE_CODE (*pc) == OMP_CLAUSE_PRIVATE
16044 && OMP_CLAUSE_DECL (*pc) == decl)
16045 break;
16046 else if (OMP_CLAUSE_CODE (*pc) == OMP_CLAUSE_LASTPRIVATE
16047 && OMP_CLAUSE_DECL (*pc) == decl)
16049 if (j)
16050 break;
16051 /* Move lastprivate (decl) clause to OMP_FOR_CLAUSES. */
16052 tree c = *pc;
16053 *pc = OMP_CLAUSE_CHAIN (c);
16054 OMP_CLAUSE_CHAIN (c) = *clauses;
16055 *clauses = c;
16057 else if (OMP_CLAUSE_CODE (*pc) == OMP_CLAUSE_FIRSTPRIVATE
16058 && OMP_CLAUSE_DECL (*pc) == decl)
16060 error ("iteration variable %qD should not be firstprivate",
16061 decl);
16062 *pc = OMP_CLAUSE_CHAIN (*pc);
16064 else if (OMP_CLAUSE_CODE (*pc) == OMP_CLAUSE_REDUCTION
16065 && OMP_CLAUSE_DECL (*pc) == decl)
16067 error ("iteration variable %qD should not be reduction",
16068 decl);
16069 *pc = OMP_CLAUSE_CHAIN (*pc);
16071 else
16072 pc = &OMP_CLAUSE_CHAIN (*pc);
16074 if (*pc)
16075 break;
16077 if (*pc == NULL_TREE)
16079 tree c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
16080 OMP_CLAUSE_DECL (c) = decl;
16081 c = finish_omp_clauses (c, C_ORT_OMP);
16082 if (c)
16084 OMP_CLAUSE_CHAIN (c) = *clauses;
16085 *clauses = c;
16089 cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
16090 if (COMPARISON_CLASS_P (cond))
16092 tree op0 = RECUR (TREE_OPERAND (cond, 0));
16093 tree op1 = RECUR (TREE_OPERAND (cond, 1));
16094 cond = build2 (TREE_CODE (cond), boolean_type_node, op0, op1);
16096 else
16097 cond = RECUR (cond);
16098 incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
16099 switch (TREE_CODE (incr))
16101 case PREINCREMENT_EXPR:
16102 case PREDECREMENT_EXPR:
16103 case POSTINCREMENT_EXPR:
16104 case POSTDECREMENT_EXPR:
16105 incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
16106 RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
16107 break;
16108 case MODIFY_EXPR:
16109 if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
16110 || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
16112 tree rhs = TREE_OPERAND (incr, 1);
16113 tree lhs = RECUR (TREE_OPERAND (incr, 0));
16114 tree rhs0 = RECUR (TREE_OPERAND (rhs, 0));
16115 tree rhs1 = RECUR (TREE_OPERAND (rhs, 1));
16116 incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
16117 build2 (TREE_CODE (rhs), TREE_TYPE (decl),
16118 rhs0, rhs1));
16120 else
16121 incr = RECUR (incr);
16122 break;
16123 case MODOP_EXPR:
16124 if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
16125 || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
16127 tree lhs = RECUR (TREE_OPERAND (incr, 0));
16128 incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
16129 build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
16130 TREE_TYPE (decl), lhs,
16131 RECUR (TREE_OPERAND (incr, 2))));
16133 else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
16134 && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
16135 || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
16137 tree rhs = TREE_OPERAND (incr, 2);
16138 tree lhs = RECUR (TREE_OPERAND (incr, 0));
16139 tree rhs0 = RECUR (TREE_OPERAND (rhs, 0));
16140 tree rhs1 = RECUR (TREE_OPERAND (rhs, 1));
16141 incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
16142 build2 (TREE_CODE (rhs), TREE_TYPE (decl),
16143 rhs0, rhs1));
16145 else
16146 incr = RECUR (incr);
16147 break;
16148 default:
16149 incr = RECUR (incr);
16150 break;
16153 TREE_VEC_ELT (declv, i) = decl;
16154 TREE_VEC_ELT (initv, i) = init;
16155 TREE_VEC_ELT (condv, i) = cond;
16156 TREE_VEC_ELT (incrv, i) = incr;
16157 #undef RECUR
16160 /* Helper function of tsubst_expr, find OMP_TEAMS inside
16161 of OMP_TARGET's body. */
16163 static tree
16164 tsubst_find_omp_teams (tree *tp, int *walk_subtrees, void *)
16166 *walk_subtrees = 0;
16167 switch (TREE_CODE (*tp))
16169 case OMP_TEAMS:
16170 return *tp;
16171 case BIND_EXPR:
16172 case STATEMENT_LIST:
16173 *walk_subtrees = 1;
16174 break;
16175 default:
16176 break;
16178 return NULL_TREE;
16181 /* Helper function for tsubst_expr. For decomposition declaration
16182 artificial base DECL, which is tsubsted PATTERN_DECL, tsubst
16183 also the corresponding decls representing the identifiers
16184 of the decomposition declaration. Return DECL if successful
16185 or error_mark_node otherwise, set *FIRST to the first decl
16186 in the list chained through DECL_CHAIN and *CNT to the number
16187 of such decls. */
16189 static tree
16190 tsubst_decomp_names (tree decl, tree pattern_decl, tree args,
16191 tsubst_flags_t complain, tree in_decl, tree *first,
16192 unsigned int *cnt)
16194 tree decl2, decl3, prev = decl;
16195 *cnt = 0;
16196 gcc_assert (DECL_NAME (decl) == NULL_TREE);
16197 for (decl2 = DECL_CHAIN (pattern_decl);
16198 decl2
16199 && VAR_P (decl2)
16200 && DECL_DECOMPOSITION_P (decl2)
16201 && DECL_NAME (decl2);
16202 decl2 = DECL_CHAIN (decl2))
16204 if (TREE_TYPE (decl2) == error_mark_node && *cnt == 0)
16206 gcc_assert (errorcount);
16207 return error_mark_node;
16209 (*cnt)++;
16210 gcc_assert (DECL_DECOMP_BASE (decl2) == pattern_decl);
16211 gcc_assert (DECL_HAS_VALUE_EXPR_P (decl2));
16212 tree v = DECL_VALUE_EXPR (decl2);
16213 DECL_HAS_VALUE_EXPR_P (decl2) = 0;
16214 SET_DECL_VALUE_EXPR (decl2, NULL_TREE);
16215 decl3 = tsubst (decl2, args, complain, in_decl);
16216 SET_DECL_VALUE_EXPR (decl2, v);
16217 DECL_HAS_VALUE_EXPR_P (decl2) = 1;
16218 if (VAR_P (decl3))
16219 DECL_TEMPLATE_INSTANTIATED (decl3) = 1;
16220 maybe_push_decl (decl3);
16221 if (error_operand_p (decl3))
16222 decl = error_mark_node;
16223 else if (decl != error_mark_node
16224 && DECL_CHAIN (decl3) != prev)
16226 gcc_assert (errorcount);
16227 decl = error_mark_node;
16229 else
16230 prev = decl3;
16232 *first = prev;
16233 return decl;
16236 /* Like tsubst_copy for expressions, etc. but also does semantic
16237 processing. */
16239 tree
16240 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
16241 bool integral_constant_expression_p)
16243 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
16244 #define RECUR(NODE) \
16245 tsubst_expr ((NODE), args, complain, in_decl, \
16246 integral_constant_expression_p)
16248 tree stmt, tmp;
16249 tree r;
16250 location_t loc;
16252 if (t == NULL_TREE || t == error_mark_node)
16253 return t;
16255 loc = input_location;
16256 if (EXPR_HAS_LOCATION (t))
16257 input_location = EXPR_LOCATION (t);
16258 if (STATEMENT_CODE_P (TREE_CODE (t)))
16259 current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
16261 switch (TREE_CODE (t))
16263 case STATEMENT_LIST:
16265 tree_stmt_iterator i;
16266 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
16267 RECUR (tsi_stmt (i));
16268 break;
16271 case CTOR_INITIALIZER:
16272 finish_mem_initializers (tsubst_initializer_list
16273 (TREE_OPERAND (t, 0), args));
16274 break;
16276 case RETURN_EXPR:
16277 finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
16278 break;
16280 case EXPR_STMT:
16281 tmp = RECUR (EXPR_STMT_EXPR (t));
16282 if (EXPR_STMT_STMT_EXPR_RESULT (t))
16283 finish_stmt_expr_expr (tmp, cur_stmt_expr);
16284 else
16285 finish_expr_stmt (tmp);
16286 break;
16288 case USING_STMT:
16289 finish_local_using_directive (USING_STMT_NAMESPACE (t),
16290 /*attribs=*/NULL_TREE);
16291 break;
16293 case DECL_EXPR:
16295 tree decl, pattern_decl;
16296 tree init;
16298 pattern_decl = decl = DECL_EXPR_DECL (t);
16299 if (TREE_CODE (decl) == LABEL_DECL)
16300 finish_label_decl (DECL_NAME (decl));
16301 else if (TREE_CODE (decl) == USING_DECL)
16303 tree scope = USING_DECL_SCOPE (decl);
16304 tree name = DECL_NAME (decl);
16306 scope = tsubst (scope, args, complain, in_decl);
16307 decl = lookup_qualified_name (scope, name,
16308 /*is_type_p=*/false,
16309 /*complain=*/false);
16310 if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
16311 qualified_name_lookup_error (scope, name, decl, input_location);
16312 else
16313 finish_local_using_decl (decl, scope, name);
16315 else if (is_capture_proxy (decl)
16316 && !DECL_TEMPLATE_INSTANTIATION (current_function_decl))
16318 /* We're in tsubst_lambda_expr, we've already inserted a new
16319 capture proxy, so look it up and register it. */
16320 tree inst;
16321 if (DECL_PACK_P (decl))
16323 inst = (retrieve_local_specialization
16324 (DECL_CAPTURED_VARIABLE (decl)));
16325 gcc_assert (TREE_CODE (inst) == NONTYPE_ARGUMENT_PACK);
16327 else
16329 inst = lookup_name_real (DECL_NAME (decl), 0, 0,
16330 /*block_p=*/true, 0, LOOKUP_HIDDEN);
16331 gcc_assert (inst != decl && is_capture_proxy (inst));
16333 register_local_specialization (inst, decl);
16334 break;
16336 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
16337 && LAMBDA_TYPE_P (TREE_TYPE (decl)))
16338 /* Don't copy the old closure; we'll create a new one in
16339 tsubst_lambda_expr. */
16340 break;
16341 else
16343 init = DECL_INITIAL (decl);
16344 decl = tsubst (decl, args, complain, in_decl);
16345 if (decl != error_mark_node)
16347 /* By marking the declaration as instantiated, we avoid
16348 trying to instantiate it. Since instantiate_decl can't
16349 handle local variables, and since we've already done
16350 all that needs to be done, that's the right thing to
16351 do. */
16352 if (VAR_P (decl))
16353 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
16354 if (VAR_P (decl)
16355 && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
16356 /* Anonymous aggregates are a special case. */
16357 finish_anon_union (decl);
16358 else if (is_capture_proxy (DECL_EXPR_DECL (t)))
16360 DECL_CONTEXT (decl) = current_function_decl;
16361 if (DECL_NAME (decl) == this_identifier)
16363 tree lam = DECL_CONTEXT (current_function_decl);
16364 lam = CLASSTYPE_LAMBDA_EXPR (lam);
16365 LAMBDA_EXPR_THIS_CAPTURE (lam) = decl;
16367 insert_capture_proxy (decl);
16369 else if (DECL_IMPLICIT_TYPEDEF_P (t))
16370 /* We already did a pushtag. */;
16371 else if (TREE_CODE (decl) == FUNCTION_DECL
16372 && DECL_OMP_DECLARE_REDUCTION_P (decl)
16373 && DECL_FUNCTION_SCOPE_P (pattern_decl))
16375 DECL_CONTEXT (decl) = NULL_TREE;
16376 pushdecl (decl);
16377 DECL_CONTEXT (decl) = current_function_decl;
16378 cp_check_omp_declare_reduction (decl);
16380 else
16382 int const_init = false;
16383 maybe_push_decl (decl);
16384 if (VAR_P (decl)
16385 && DECL_PRETTY_FUNCTION_P (decl))
16387 /* For __PRETTY_FUNCTION__ we have to adjust the
16388 initializer. */
16389 const char *const name
16390 = cxx_printable_name (current_function_decl, 2);
16391 init = cp_fname_init (name, &TREE_TYPE (decl));
16393 else
16394 init = tsubst_init (init, decl, args, complain, in_decl);
16396 if (VAR_P (decl))
16397 const_init = (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P
16398 (pattern_decl));
16399 if (VAR_P (decl)
16400 && DECL_DECOMPOSITION_P (decl)
16401 && TREE_TYPE (pattern_decl) != error_mark_node)
16403 unsigned int cnt;
16404 tree first;
16405 tree ndecl
16406 = tsubst_decomp_names (decl, pattern_decl, args,
16407 complain, in_decl, &first, &cnt);
16408 if (ndecl != error_mark_node)
16409 cp_maybe_mangle_decomp (ndecl, first, cnt);
16410 cp_finish_decl (decl, init, const_init, NULL_TREE, 0);
16411 if (ndecl != error_mark_node)
16412 cp_finish_decomp (ndecl, first, cnt);
16414 else
16415 cp_finish_decl (decl, init, const_init, NULL_TREE, 0);
16420 break;
16423 case FOR_STMT:
16424 stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
16425 RECUR (FOR_INIT_STMT (t));
16426 finish_init_stmt (stmt);
16427 tmp = RECUR (FOR_COND (t));
16428 finish_for_cond (tmp, stmt, false, 0);
16429 tmp = RECUR (FOR_EXPR (t));
16430 finish_for_expr (tmp, stmt);
16432 bool prev = note_iteration_stmt_body_start ();
16433 RECUR (FOR_BODY (t));
16434 note_iteration_stmt_body_end (prev);
16436 finish_for_stmt (stmt);
16437 break;
16439 case RANGE_FOR_STMT:
16441 /* Construct another range_for, if this is not a final
16442 substitution (for inside inside a generic lambda of a
16443 template). Otherwise convert to a regular for. */
16444 tree decl, expr;
16445 stmt = (processing_template_decl
16446 ? begin_range_for_stmt (NULL_TREE, NULL_TREE)
16447 : begin_for_stmt (NULL_TREE, NULL_TREE));
16448 decl = RANGE_FOR_DECL (t);
16449 decl = tsubst (decl, args, complain, in_decl);
16450 maybe_push_decl (decl);
16451 expr = RECUR (RANGE_FOR_EXPR (t));
16453 tree decomp_first = NULL_TREE;
16454 unsigned decomp_cnt = 0;
16455 if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl))
16456 decl = tsubst_decomp_names (decl, RANGE_FOR_DECL (t), args,
16457 complain, in_decl,
16458 &decomp_first, &decomp_cnt);
16460 if (processing_template_decl)
16462 RANGE_FOR_IVDEP (stmt) = RANGE_FOR_IVDEP (t);
16463 RANGE_FOR_UNROLL (stmt) = RANGE_FOR_UNROLL (t);
16464 finish_range_for_decl (stmt, decl, expr);
16466 else
16468 unsigned short unroll = (RANGE_FOR_UNROLL (t)
16469 ? tree_to_uhwi (RANGE_FOR_UNROLL (t)) : 0);
16470 stmt = cp_convert_range_for (stmt, decl, expr,
16471 decomp_first, decomp_cnt,
16472 RANGE_FOR_IVDEP (t), unroll);
16475 bool prev = note_iteration_stmt_body_start ();
16476 RECUR (RANGE_FOR_BODY (t));
16477 note_iteration_stmt_body_end (prev);
16478 finish_for_stmt (stmt);
16480 break;
16482 case WHILE_STMT:
16483 stmt = begin_while_stmt ();
16484 tmp = RECUR (WHILE_COND (t));
16485 finish_while_stmt_cond (tmp, stmt, false, 0);
16487 bool prev = note_iteration_stmt_body_start ();
16488 RECUR (WHILE_BODY (t));
16489 note_iteration_stmt_body_end (prev);
16491 finish_while_stmt (stmt);
16492 break;
16494 case DO_STMT:
16495 stmt = begin_do_stmt ();
16497 bool prev = note_iteration_stmt_body_start ();
16498 RECUR (DO_BODY (t));
16499 note_iteration_stmt_body_end (prev);
16501 finish_do_body (stmt);
16502 tmp = RECUR (DO_COND (t));
16503 finish_do_stmt (tmp, stmt, false, 0);
16504 break;
16506 case IF_STMT:
16507 stmt = begin_if_stmt ();
16508 IF_STMT_CONSTEXPR_P (stmt) = IF_STMT_CONSTEXPR_P (t);
16509 if (IF_STMT_CONSTEXPR_P (t))
16510 args = add_extra_args (IF_STMT_EXTRA_ARGS (t), args);
16511 tmp = RECUR (IF_COND (t));
16512 tmp = finish_if_stmt_cond (tmp, stmt);
16513 if (IF_STMT_CONSTEXPR_P (t)
16514 && instantiation_dependent_expression_p (tmp))
16516 /* We're partially instantiating a generic lambda, but the condition
16517 of the constexpr if is still dependent. Don't substitute into the
16518 branches now, just remember the template arguments. */
16519 do_poplevel (IF_SCOPE (stmt));
16520 IF_COND (stmt) = IF_COND (t);
16521 THEN_CLAUSE (stmt) = THEN_CLAUSE (t);
16522 ELSE_CLAUSE (stmt) = ELSE_CLAUSE (t);
16523 IF_STMT_EXTRA_ARGS (stmt) = build_extra_args (t, args, complain);
16524 add_stmt (stmt);
16525 break;
16527 if (IF_STMT_CONSTEXPR_P (t) && integer_zerop (tmp))
16528 /* Don't instantiate the THEN_CLAUSE. */;
16529 else
16531 bool inhibit = integer_zerop (fold_non_dependent_expr (tmp));
16532 if (inhibit)
16533 ++c_inhibit_evaluation_warnings;
16534 RECUR (THEN_CLAUSE (t));
16535 if (inhibit)
16536 --c_inhibit_evaluation_warnings;
16538 finish_then_clause (stmt);
16540 if (IF_STMT_CONSTEXPR_P (t) && integer_nonzerop (tmp))
16541 /* Don't instantiate the ELSE_CLAUSE. */;
16542 else if (ELSE_CLAUSE (t))
16544 bool inhibit = integer_nonzerop (fold_non_dependent_expr (tmp));
16545 begin_else_clause (stmt);
16546 if (inhibit)
16547 ++c_inhibit_evaluation_warnings;
16548 RECUR (ELSE_CLAUSE (t));
16549 if (inhibit)
16550 --c_inhibit_evaluation_warnings;
16551 finish_else_clause (stmt);
16554 finish_if_stmt (stmt);
16555 break;
16557 case BIND_EXPR:
16558 if (BIND_EXPR_BODY_BLOCK (t))
16559 stmt = begin_function_body ();
16560 else
16561 stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
16562 ? BCS_TRY_BLOCK : 0);
16564 RECUR (BIND_EXPR_BODY (t));
16566 if (BIND_EXPR_BODY_BLOCK (t))
16567 finish_function_body (stmt);
16568 else
16569 finish_compound_stmt (stmt);
16570 break;
16572 case BREAK_STMT:
16573 finish_break_stmt ();
16574 break;
16576 case CONTINUE_STMT:
16577 finish_continue_stmt ();
16578 break;
16580 case SWITCH_STMT:
16581 stmt = begin_switch_stmt ();
16582 tmp = RECUR (SWITCH_STMT_COND (t));
16583 finish_switch_cond (tmp, stmt);
16584 RECUR (SWITCH_STMT_BODY (t));
16585 finish_switch_stmt (stmt);
16586 break;
16588 case CASE_LABEL_EXPR:
16590 tree low = RECUR (CASE_LOW (t));
16591 tree high = RECUR (CASE_HIGH (t));
16592 tree l = finish_case_label (EXPR_LOCATION (t), low, high);
16593 if (l && TREE_CODE (l) == CASE_LABEL_EXPR)
16594 FALLTHROUGH_LABEL_P (CASE_LABEL (l))
16595 = FALLTHROUGH_LABEL_P (CASE_LABEL (t));
16597 break;
16599 case LABEL_EXPR:
16601 tree decl = LABEL_EXPR_LABEL (t);
16602 tree label;
16604 label = finish_label_stmt (DECL_NAME (decl));
16605 if (TREE_CODE (label) == LABEL_DECL)
16606 FALLTHROUGH_LABEL_P (label) = FALLTHROUGH_LABEL_P (decl);
16607 if (DECL_ATTRIBUTES (decl) != NULL_TREE)
16608 cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
16610 break;
16612 case GOTO_EXPR:
16613 tmp = GOTO_DESTINATION (t);
16614 if (TREE_CODE (tmp) != LABEL_DECL)
16615 /* Computed goto's must be tsubst'd into. On the other hand,
16616 non-computed gotos must not be; the identifier in question
16617 will have no binding. */
16618 tmp = RECUR (tmp);
16619 else
16620 tmp = DECL_NAME (tmp);
16621 finish_goto_stmt (tmp);
16622 break;
16624 case ASM_EXPR:
16626 tree string = RECUR (ASM_STRING (t));
16627 tree outputs = tsubst_copy_asm_operands (ASM_OUTPUTS (t), args,
16628 complain, in_decl);
16629 tree inputs = tsubst_copy_asm_operands (ASM_INPUTS (t), args,
16630 complain, in_decl);
16631 tree clobbers = tsubst_copy_asm_operands (ASM_CLOBBERS (t), args,
16632 complain, in_decl);
16633 tree labels = tsubst_copy_asm_operands (ASM_LABELS (t), args,
16634 complain, in_decl);
16635 tmp = finish_asm_stmt (ASM_VOLATILE_P (t), string, outputs, inputs,
16636 clobbers, labels);
16637 tree asm_expr = tmp;
16638 if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
16639 asm_expr = TREE_OPERAND (asm_expr, 0);
16640 ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
16642 break;
16644 case TRY_BLOCK:
16645 if (CLEANUP_P (t))
16647 stmt = begin_try_block ();
16648 RECUR (TRY_STMTS (t));
16649 finish_cleanup_try_block (stmt);
16650 finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
16652 else
16654 tree compound_stmt = NULL_TREE;
16656 if (FN_TRY_BLOCK_P (t))
16657 stmt = begin_function_try_block (&compound_stmt);
16658 else
16659 stmt = begin_try_block ();
16661 RECUR (TRY_STMTS (t));
16663 if (FN_TRY_BLOCK_P (t))
16664 finish_function_try_block (stmt);
16665 else
16666 finish_try_block (stmt);
16668 RECUR (TRY_HANDLERS (t));
16669 if (FN_TRY_BLOCK_P (t))
16670 finish_function_handler_sequence (stmt, compound_stmt);
16671 else
16672 finish_handler_sequence (stmt);
16674 break;
16676 case HANDLER:
16678 tree decl = HANDLER_PARMS (t);
16680 if (decl)
16682 decl = tsubst (decl, args, complain, in_decl);
16683 /* Prevent instantiate_decl from trying to instantiate
16684 this variable. We've already done all that needs to be
16685 done. */
16686 if (decl != error_mark_node)
16687 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
16689 stmt = begin_handler ();
16690 finish_handler_parms (decl, stmt);
16691 RECUR (HANDLER_BODY (t));
16692 finish_handler (stmt);
16694 break;
16696 case TAG_DEFN:
16697 tmp = tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
16698 if (CLASS_TYPE_P (tmp))
16700 /* Local classes are not independent templates; they are
16701 instantiated along with their containing function. And this
16702 way we don't have to deal with pushing out of one local class
16703 to instantiate a member of another local class. */
16704 /* Closures are handled by the LAMBDA_EXPR. */
16705 gcc_assert (!LAMBDA_TYPE_P (TREE_TYPE (t)));
16706 complete_type (tmp);
16707 for (tree fld = TYPE_FIELDS (tmp); fld; fld = DECL_CHAIN (fld))
16708 if ((VAR_P (fld)
16709 || (TREE_CODE (fld) == FUNCTION_DECL
16710 && !DECL_ARTIFICIAL (fld)))
16711 && DECL_TEMPLATE_INSTANTIATION (fld))
16712 instantiate_decl (fld, /*defer_ok=*/false,
16713 /*expl_inst_class=*/false);
16715 break;
16717 case STATIC_ASSERT:
16719 tree condition;
16721 ++c_inhibit_evaluation_warnings;
16722 condition =
16723 tsubst_expr (STATIC_ASSERT_CONDITION (t),
16724 args,
16725 complain, in_decl,
16726 /*integral_constant_expression_p=*/true);
16727 --c_inhibit_evaluation_warnings;
16729 finish_static_assert (condition,
16730 STATIC_ASSERT_MESSAGE (t),
16731 STATIC_ASSERT_SOURCE_LOCATION (t),
16732 /*member_p=*/false);
16734 break;
16736 case OACC_KERNELS:
16737 case OACC_PARALLEL:
16738 tmp = tsubst_omp_clauses (OMP_CLAUSES (t), C_ORT_ACC, args, complain,
16739 in_decl);
16740 stmt = begin_omp_parallel ();
16741 RECUR (OMP_BODY (t));
16742 finish_omp_construct (TREE_CODE (t), stmt, tmp);
16743 break;
16745 case OMP_PARALLEL:
16746 r = push_omp_privatization_clauses (OMP_PARALLEL_COMBINED (t));
16747 tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t), C_ORT_OMP, args,
16748 complain, in_decl);
16749 if (OMP_PARALLEL_COMBINED (t))
16750 omp_parallel_combined_clauses = &tmp;
16751 stmt = begin_omp_parallel ();
16752 RECUR (OMP_PARALLEL_BODY (t));
16753 gcc_assert (omp_parallel_combined_clauses == NULL);
16754 OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
16755 = OMP_PARALLEL_COMBINED (t);
16756 pop_omp_privatization_clauses (r);
16757 break;
16759 case OMP_TASK:
16760 r = push_omp_privatization_clauses (false);
16761 tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t), C_ORT_OMP, args,
16762 complain, in_decl);
16763 stmt = begin_omp_task ();
16764 RECUR (OMP_TASK_BODY (t));
16765 finish_omp_task (tmp, stmt);
16766 pop_omp_privatization_clauses (r);
16767 break;
16769 case OMP_FOR:
16770 case OMP_SIMD:
16771 case OMP_DISTRIBUTE:
16772 case OMP_TASKLOOP:
16773 case OACC_LOOP:
16775 tree clauses, body, pre_body;
16776 tree declv = NULL_TREE, initv = NULL_TREE, condv = NULL_TREE;
16777 tree orig_declv = NULL_TREE;
16778 tree incrv = NULL_TREE;
16779 enum c_omp_region_type ort = C_ORT_OMP;
16780 int i;
16782 if (TREE_CODE (t) == OACC_LOOP)
16783 ort = C_ORT_ACC;
16785 r = push_omp_privatization_clauses (OMP_FOR_INIT (t) == NULL_TREE);
16786 clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t), ort, args, complain,
16787 in_decl);
16788 if (OMP_FOR_INIT (t) != NULL_TREE)
16790 declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
16791 if (OMP_FOR_ORIG_DECLS (t))
16792 orig_declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
16793 initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
16794 condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
16795 incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
16798 stmt = begin_omp_structured_block ();
16800 pre_body = push_stmt_list ();
16801 RECUR (OMP_FOR_PRE_BODY (t));
16802 pre_body = pop_stmt_list (pre_body);
16804 if (OMP_FOR_INIT (t) != NULL_TREE)
16805 for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
16806 tsubst_omp_for_iterator (t, i, declv, orig_declv, initv, condv,
16807 incrv, &clauses, args, complain, in_decl,
16808 integral_constant_expression_p);
16809 omp_parallel_combined_clauses = NULL;
16811 body = push_stmt_list ();
16812 RECUR (OMP_FOR_BODY (t));
16813 body = pop_stmt_list (body);
16815 if (OMP_FOR_INIT (t) != NULL_TREE)
16816 t = finish_omp_for (EXPR_LOCATION (t), TREE_CODE (t), declv,
16817 orig_declv, initv, condv, incrv, body, pre_body,
16818 NULL, clauses);
16819 else
16821 t = make_node (TREE_CODE (t));
16822 TREE_TYPE (t) = void_type_node;
16823 OMP_FOR_BODY (t) = body;
16824 OMP_FOR_PRE_BODY (t) = pre_body;
16825 OMP_FOR_CLAUSES (t) = clauses;
16826 SET_EXPR_LOCATION (t, EXPR_LOCATION (t));
16827 add_stmt (t);
16830 add_stmt (finish_omp_structured_block (stmt));
16831 pop_omp_privatization_clauses (r);
16833 break;
16835 case OMP_SECTIONS:
16836 omp_parallel_combined_clauses = NULL;
16837 /* FALLTHRU */
16838 case OMP_SINGLE:
16839 case OMP_TEAMS:
16840 case OMP_CRITICAL:
16841 r = push_omp_privatization_clauses (TREE_CODE (t) == OMP_TEAMS
16842 && OMP_TEAMS_COMBINED (t));
16843 tmp = tsubst_omp_clauses (OMP_CLAUSES (t), C_ORT_OMP, args, complain,
16844 in_decl);
16845 stmt = push_stmt_list ();
16846 RECUR (OMP_BODY (t));
16847 stmt = pop_stmt_list (stmt);
16849 t = copy_node (t);
16850 OMP_BODY (t) = stmt;
16851 OMP_CLAUSES (t) = tmp;
16852 add_stmt (t);
16853 pop_omp_privatization_clauses (r);
16854 break;
16856 case OACC_DATA:
16857 case OMP_TARGET_DATA:
16858 case OMP_TARGET:
16859 tmp = tsubst_omp_clauses (OMP_CLAUSES (t), (TREE_CODE (t) == OACC_DATA)
16860 ? C_ORT_ACC : C_ORT_OMP, args, complain,
16861 in_decl);
16862 keep_next_level (true);
16863 stmt = begin_omp_structured_block ();
16865 RECUR (OMP_BODY (t));
16866 stmt = finish_omp_structured_block (stmt);
16868 t = copy_node (t);
16869 OMP_BODY (t) = stmt;
16870 OMP_CLAUSES (t) = tmp;
16871 if (TREE_CODE (t) == OMP_TARGET && OMP_TARGET_COMBINED (t))
16873 tree teams = cp_walk_tree (&stmt, tsubst_find_omp_teams, NULL, NULL);
16874 if (teams)
16876 /* For combined target teams, ensure the num_teams and
16877 thread_limit clause expressions are evaluated on the host,
16878 before entering the target construct. */
16879 tree c;
16880 for (c = OMP_TEAMS_CLAUSES (teams);
16881 c; c = OMP_CLAUSE_CHAIN (c))
16882 if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_NUM_TEAMS
16883 || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_THREAD_LIMIT)
16884 && TREE_CODE (OMP_CLAUSE_OPERAND (c, 0)) != INTEGER_CST)
16886 tree expr = OMP_CLAUSE_OPERAND (c, 0);
16887 expr = force_target_expr (TREE_TYPE (expr), expr, tf_none);
16888 if (expr == error_mark_node)
16889 continue;
16890 tmp = TARGET_EXPR_SLOT (expr);
16891 add_stmt (expr);
16892 OMP_CLAUSE_OPERAND (c, 0) = expr;
16893 tree tc = build_omp_clause (OMP_CLAUSE_LOCATION (c),
16894 OMP_CLAUSE_FIRSTPRIVATE);
16895 OMP_CLAUSE_DECL (tc) = tmp;
16896 OMP_CLAUSE_CHAIN (tc) = OMP_TARGET_CLAUSES (t);
16897 OMP_TARGET_CLAUSES (t) = tc;
16901 add_stmt (t);
16902 break;
16904 case OACC_DECLARE:
16905 t = copy_node (t);
16906 tmp = tsubst_omp_clauses (OACC_DECLARE_CLAUSES (t), C_ORT_ACC, args,
16907 complain, in_decl);
16908 OACC_DECLARE_CLAUSES (t) = tmp;
16909 add_stmt (t);
16910 break;
16912 case OMP_TARGET_UPDATE:
16913 case OMP_TARGET_ENTER_DATA:
16914 case OMP_TARGET_EXIT_DATA:
16915 tmp = tsubst_omp_clauses (OMP_STANDALONE_CLAUSES (t), C_ORT_OMP, args,
16916 complain, in_decl);
16917 t = copy_node (t);
16918 OMP_STANDALONE_CLAUSES (t) = tmp;
16919 add_stmt (t);
16920 break;
16922 case OACC_ENTER_DATA:
16923 case OACC_EXIT_DATA:
16924 case OACC_UPDATE:
16925 tmp = tsubst_omp_clauses (OMP_STANDALONE_CLAUSES (t), C_ORT_ACC, args,
16926 complain, in_decl);
16927 t = copy_node (t);
16928 OMP_STANDALONE_CLAUSES (t) = tmp;
16929 add_stmt (t);
16930 break;
16932 case OMP_ORDERED:
16933 tmp = tsubst_omp_clauses (OMP_ORDERED_CLAUSES (t), C_ORT_OMP, args,
16934 complain, in_decl);
16935 stmt = push_stmt_list ();
16936 RECUR (OMP_BODY (t));
16937 stmt = pop_stmt_list (stmt);
16939 t = copy_node (t);
16940 OMP_BODY (t) = stmt;
16941 OMP_ORDERED_CLAUSES (t) = tmp;
16942 add_stmt (t);
16943 break;
16945 case OMP_SECTION:
16946 case OMP_MASTER:
16947 case OMP_TASKGROUP:
16948 stmt = push_stmt_list ();
16949 RECUR (OMP_BODY (t));
16950 stmt = pop_stmt_list (stmt);
16952 t = copy_node (t);
16953 OMP_BODY (t) = stmt;
16954 add_stmt (t);
16955 break;
16957 case OMP_ATOMIC:
16958 gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
16959 if (TREE_CODE (TREE_OPERAND (t, 1)) != MODIFY_EXPR)
16961 tree op1 = TREE_OPERAND (t, 1);
16962 tree rhs1 = NULL_TREE;
16963 tree lhs, rhs;
16964 if (TREE_CODE (op1) == COMPOUND_EXPR)
16966 rhs1 = RECUR (TREE_OPERAND (op1, 0));
16967 op1 = TREE_OPERAND (op1, 1);
16969 lhs = RECUR (TREE_OPERAND (op1, 0));
16970 rhs = RECUR (TREE_OPERAND (op1, 1));
16971 finish_omp_atomic (OMP_ATOMIC, TREE_CODE (op1), lhs, rhs,
16972 NULL_TREE, NULL_TREE, rhs1,
16973 OMP_ATOMIC_SEQ_CST (t));
16975 else
16977 tree op1 = TREE_OPERAND (t, 1);
16978 tree v = NULL_TREE, lhs, rhs = NULL_TREE, lhs1 = NULL_TREE;
16979 tree rhs1 = NULL_TREE;
16980 enum tree_code code = TREE_CODE (TREE_OPERAND (op1, 1));
16981 enum tree_code opcode = NOP_EXPR;
16982 if (code == OMP_ATOMIC_READ)
16984 v = RECUR (TREE_OPERAND (op1, 0));
16985 lhs = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
16987 else if (code == OMP_ATOMIC_CAPTURE_OLD
16988 || code == OMP_ATOMIC_CAPTURE_NEW)
16990 tree op11 = TREE_OPERAND (TREE_OPERAND (op1, 1), 1);
16991 v = RECUR (TREE_OPERAND (op1, 0));
16992 lhs1 = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
16993 if (TREE_CODE (op11) == COMPOUND_EXPR)
16995 rhs1 = RECUR (TREE_OPERAND (op11, 0));
16996 op11 = TREE_OPERAND (op11, 1);
16998 lhs = RECUR (TREE_OPERAND (op11, 0));
16999 rhs = RECUR (TREE_OPERAND (op11, 1));
17000 opcode = TREE_CODE (op11);
17001 if (opcode == MODIFY_EXPR)
17002 opcode = NOP_EXPR;
17004 else
17006 code = OMP_ATOMIC;
17007 lhs = RECUR (TREE_OPERAND (op1, 0));
17008 rhs = RECUR (TREE_OPERAND (op1, 1));
17010 finish_omp_atomic (code, opcode, lhs, rhs, v, lhs1, rhs1,
17011 OMP_ATOMIC_SEQ_CST (t));
17013 break;
17015 case TRANSACTION_EXPR:
17017 int flags = 0;
17018 flags |= (TRANSACTION_EXPR_OUTER (t) ? TM_STMT_ATTR_OUTER : 0);
17019 flags |= (TRANSACTION_EXPR_RELAXED (t) ? TM_STMT_ATTR_RELAXED : 0);
17021 if (TRANSACTION_EXPR_IS_STMT (t))
17023 tree body = TRANSACTION_EXPR_BODY (t);
17024 tree noex = NULL_TREE;
17025 if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
17027 noex = MUST_NOT_THROW_COND (body);
17028 if (noex == NULL_TREE)
17029 noex = boolean_true_node;
17030 body = TREE_OPERAND (body, 0);
17032 stmt = begin_transaction_stmt (input_location, NULL, flags);
17033 RECUR (body);
17034 finish_transaction_stmt (stmt, NULL, flags, RECUR (noex));
17036 else
17038 stmt = build_transaction_expr (EXPR_LOCATION (t),
17039 RECUR (TRANSACTION_EXPR_BODY (t)),
17040 flags, NULL_TREE);
17041 RETURN (stmt);
17044 break;
17046 case MUST_NOT_THROW_EXPR:
17048 tree op0 = RECUR (TREE_OPERAND (t, 0));
17049 tree cond = RECUR (MUST_NOT_THROW_COND (t));
17050 RETURN (build_must_not_throw_expr (op0, cond));
17053 case EXPR_PACK_EXPANSION:
17054 error ("invalid use of pack expansion expression");
17055 RETURN (error_mark_node);
17057 case NONTYPE_ARGUMENT_PACK:
17058 error ("use %<...%> to expand argument pack");
17059 RETURN (error_mark_node);
17061 case COMPOUND_EXPR:
17062 tmp = RECUR (TREE_OPERAND (t, 0));
17063 if (tmp == NULL_TREE)
17064 /* If the first operand was a statement, we're done with it. */
17065 RETURN (RECUR (TREE_OPERAND (t, 1)));
17066 RETURN (build_x_compound_expr (EXPR_LOCATION (t), tmp,
17067 RECUR (TREE_OPERAND (t, 1)),
17068 complain));
17070 case ANNOTATE_EXPR:
17071 tmp = RECUR (TREE_OPERAND (t, 0));
17072 RETURN (build3_loc (EXPR_LOCATION (t), ANNOTATE_EXPR,
17073 TREE_TYPE (tmp), tmp,
17074 RECUR (TREE_OPERAND (t, 1)),
17075 RECUR (TREE_OPERAND (t, 2))));
17077 default:
17078 gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
17080 RETURN (tsubst_copy_and_build (t, args, complain, in_decl,
17081 /*function_p=*/false,
17082 integral_constant_expression_p));
17085 RETURN (NULL_TREE);
17086 out:
17087 input_location = loc;
17088 return r;
17089 #undef RECUR
17090 #undef RETURN
17093 /* Instantiate the special body of the artificial DECL_OMP_DECLARE_REDUCTION
17094 function. For description of the body see comment above
17095 cp_parser_omp_declare_reduction_exprs. */
17097 static void
17098 tsubst_omp_udr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
17100 if (t == NULL_TREE || t == error_mark_node)
17101 return;
17103 gcc_assert (TREE_CODE (t) == STATEMENT_LIST);
17105 tree_stmt_iterator tsi;
17106 int i;
17107 tree stmts[7];
17108 memset (stmts, 0, sizeof stmts);
17109 for (i = 0, tsi = tsi_start (t);
17110 i < 7 && !tsi_end_p (tsi);
17111 i++, tsi_next (&tsi))
17112 stmts[i] = tsi_stmt (tsi);
17113 gcc_assert (tsi_end_p (tsi));
17115 if (i >= 3)
17117 gcc_assert (TREE_CODE (stmts[0]) == DECL_EXPR
17118 && TREE_CODE (stmts[1]) == DECL_EXPR);
17119 tree omp_out = tsubst (DECL_EXPR_DECL (stmts[0]),
17120 args, complain, in_decl);
17121 tree omp_in = tsubst (DECL_EXPR_DECL (stmts[1]),
17122 args, complain, in_decl);
17123 DECL_CONTEXT (omp_out) = current_function_decl;
17124 DECL_CONTEXT (omp_in) = current_function_decl;
17125 keep_next_level (true);
17126 tree block = begin_omp_structured_block ();
17127 tsubst_expr (stmts[2], args, complain, in_decl, false);
17128 block = finish_omp_structured_block (block);
17129 block = maybe_cleanup_point_expr_void (block);
17130 add_decl_expr (omp_out);
17131 if (TREE_NO_WARNING (DECL_EXPR_DECL (stmts[0])))
17132 TREE_NO_WARNING (omp_out) = 1;
17133 add_decl_expr (omp_in);
17134 finish_expr_stmt (block);
17136 if (i >= 6)
17138 gcc_assert (TREE_CODE (stmts[3]) == DECL_EXPR
17139 && TREE_CODE (stmts[4]) == DECL_EXPR);
17140 tree omp_priv = tsubst (DECL_EXPR_DECL (stmts[3]),
17141 args, complain, in_decl);
17142 tree omp_orig = tsubst (DECL_EXPR_DECL (stmts[4]),
17143 args, complain, in_decl);
17144 DECL_CONTEXT (omp_priv) = current_function_decl;
17145 DECL_CONTEXT (omp_orig) = current_function_decl;
17146 keep_next_level (true);
17147 tree block = begin_omp_structured_block ();
17148 tsubst_expr (stmts[5], args, complain, in_decl, false);
17149 block = finish_omp_structured_block (block);
17150 block = maybe_cleanup_point_expr_void (block);
17151 cp_walk_tree (&block, cp_remove_omp_priv_cleanup_stmt, omp_priv, NULL);
17152 add_decl_expr (omp_priv);
17153 add_decl_expr (omp_orig);
17154 finish_expr_stmt (block);
17155 if (i == 7)
17156 add_decl_expr (omp_orig);
17160 /* T is a postfix-expression that is not being used in a function
17161 call. Return the substituted version of T. */
17163 static tree
17164 tsubst_non_call_postfix_expression (tree t, tree args,
17165 tsubst_flags_t complain,
17166 tree in_decl)
17168 if (TREE_CODE (t) == SCOPE_REF)
17169 t = tsubst_qualified_id (t, args, complain, in_decl,
17170 /*done=*/false, /*address_p=*/false);
17171 else
17172 t = tsubst_copy_and_build (t, args, complain, in_decl,
17173 /*function_p=*/false,
17174 /*integral_constant_expression_p=*/false);
17176 return t;
17179 /* T is a LAMBDA_EXPR. Generate a new LAMBDA_EXPR for the current
17180 instantiation context. Instantiating a pack expansion containing a lambda
17181 might result in multiple lambdas all based on the same lambda in the
17182 template. */
17184 tree
17185 tsubst_lambda_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
17187 tree oldfn = lambda_function (t);
17188 in_decl = oldfn;
17190 tree r = build_lambda_expr ();
17192 LAMBDA_EXPR_LOCATION (r)
17193 = LAMBDA_EXPR_LOCATION (t);
17194 LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
17195 = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
17196 LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
17198 if (LAMBDA_EXPR_EXTRA_SCOPE (t) == NULL_TREE)
17199 LAMBDA_EXPR_EXTRA_SCOPE (r) = NULL_TREE;
17200 else
17201 record_lambda_scope (r);
17203 gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (t) == NULL_TREE
17204 && LAMBDA_EXPR_PENDING_PROXIES (t) == NULL);
17206 for (tree cap = LAMBDA_EXPR_CAPTURE_LIST (t); cap;
17207 cap = TREE_CHAIN (cap))
17209 tree field = TREE_PURPOSE (cap);
17210 if (PACK_EXPANSION_P (field))
17211 field = PACK_EXPANSION_PATTERN (field);
17212 field = tsubst_decl (field, args, complain);
17214 if (field == error_mark_node)
17215 return error_mark_node;
17217 tree init = TREE_VALUE (cap);
17218 if (PACK_EXPANSION_P (init))
17219 init = tsubst_pack_expansion (init, args, complain, in_decl);
17220 else
17221 init = tsubst_copy_and_build (init, args, complain, in_decl,
17222 /*fn*/false, /*constexpr*/false);
17224 if (TREE_CODE (field) == TREE_VEC)
17226 int len = TREE_VEC_LENGTH (field);
17227 gcc_assert (TREE_CODE (init) == TREE_VEC
17228 && TREE_VEC_LENGTH (init) == len);
17229 for (int i = 0; i < len; ++i)
17230 LAMBDA_EXPR_CAPTURE_LIST (r)
17231 = tree_cons (TREE_VEC_ELT (field, i),
17232 TREE_VEC_ELT (init, i),
17233 LAMBDA_EXPR_CAPTURE_LIST (r));
17235 else
17237 LAMBDA_EXPR_CAPTURE_LIST (r)
17238 = tree_cons (field, init, LAMBDA_EXPR_CAPTURE_LIST (r));
17240 if (id_equal (DECL_NAME (field), "__this"))
17241 LAMBDA_EXPR_THIS_CAPTURE (r) = field;
17245 tree type = begin_lambda_type (r);
17247 /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set. */
17248 determine_visibility (TYPE_NAME (type));
17250 register_capture_members (LAMBDA_EXPR_CAPTURE_LIST (r));
17252 tree oldtmpl = (generic_lambda_fn_p (oldfn)
17253 ? DECL_TI_TEMPLATE (oldfn)
17254 : NULL_TREE);
17256 tree fntype = static_fn_type (oldfn);
17257 if (oldtmpl)
17258 ++processing_template_decl;
17259 fntype = tsubst (fntype, args, complain, in_decl);
17260 if (oldtmpl)
17261 --processing_template_decl;
17263 if (fntype == error_mark_node)
17264 r = error_mark_node;
17265 else
17267 /* Fix the type of 'this'. */
17268 fntype = build_memfn_type (fntype, type,
17269 type_memfn_quals (fntype),
17270 type_memfn_rqual (fntype));
17271 tree fn, tmpl;
17272 if (oldtmpl)
17274 tmpl = tsubst_template_decl (oldtmpl, args, complain, fntype);
17275 fn = DECL_TEMPLATE_RESULT (tmpl);
17276 finish_member_declaration (tmpl);
17278 else
17280 tmpl = NULL_TREE;
17281 fn = tsubst_function_decl (oldfn, args, complain, fntype);
17282 finish_member_declaration (fn);
17285 /* Let finish_function set this. */
17286 DECL_DECLARED_CONSTEXPR_P (fn) = false;
17288 bool nested = cfun;
17289 if (nested)
17290 push_function_context ();
17291 else
17292 /* Still increment function_depth so that we don't GC in the
17293 middle of an expression. */
17294 ++function_depth;
17296 local_specialization_stack s (lss_copy);
17298 tree body = start_lambda_function (fn, r);
17300 register_parameter_specializations (oldfn, fn);
17302 tsubst_expr (DECL_SAVED_TREE (oldfn), args, complain, r,
17303 /*constexpr*/false);
17305 finish_lambda_function (body);
17307 if (nested)
17308 pop_function_context ();
17309 else
17310 --function_depth;
17312 /* The capture list was built up in reverse order; fix that now. */
17313 LAMBDA_EXPR_CAPTURE_LIST (r)
17314 = nreverse (LAMBDA_EXPR_CAPTURE_LIST (r));
17316 LAMBDA_EXPR_THIS_CAPTURE (r) = NULL_TREE;
17318 maybe_add_lambda_conv_op (type);
17321 finish_struct (type, /*attr*/NULL_TREE);
17323 insert_pending_capture_proxies ();
17325 return r;
17328 /* Like tsubst but deals with expressions and performs semantic
17329 analysis. FUNCTION_P is true if T is the "F" in "F (ARGS)". */
17331 tree
17332 tsubst_copy_and_build (tree t,
17333 tree args,
17334 tsubst_flags_t complain,
17335 tree in_decl,
17336 bool function_p,
17337 bool integral_constant_expression_p)
17339 #define RETURN(EXP) do { retval = (EXP); goto out; } while(0)
17340 #define RECUR(NODE) \
17341 tsubst_copy_and_build (NODE, args, complain, in_decl, \
17342 /*function_p=*/false, \
17343 integral_constant_expression_p)
17345 tree retval, op1;
17346 location_t loc;
17348 if (t == NULL_TREE || t == error_mark_node)
17349 return t;
17351 loc = input_location;
17352 if (EXPR_HAS_LOCATION (t))
17353 input_location = EXPR_LOCATION (t);
17355 /* N3276 decltype magic only applies to calls at the top level or on the
17356 right side of a comma. */
17357 tsubst_flags_t decltype_flag = (complain & tf_decltype);
17358 complain &= ~tf_decltype;
17360 switch (TREE_CODE (t))
17362 case USING_DECL:
17363 t = DECL_NAME (t);
17364 /* Fall through. */
17365 case IDENTIFIER_NODE:
17367 tree decl;
17368 cp_id_kind idk;
17369 bool non_integral_constant_expression_p;
17370 const char *error_msg;
17372 if (IDENTIFIER_CONV_OP_P (t))
17374 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
17375 t = make_conv_op_name (new_type);
17378 /* Look up the name. */
17379 decl = lookup_name (t);
17381 /* By convention, expressions use ERROR_MARK_NODE to indicate
17382 failure, not NULL_TREE. */
17383 if (decl == NULL_TREE)
17384 decl = error_mark_node;
17386 decl = finish_id_expression (t, decl, NULL_TREE,
17387 &idk,
17388 integral_constant_expression_p,
17389 /*allow_non_integral_constant_expression_p=*/(cxx_dialect >= cxx11),
17390 &non_integral_constant_expression_p,
17391 /*template_p=*/false,
17392 /*done=*/true,
17393 /*address_p=*/false,
17394 /*template_arg_p=*/false,
17395 &error_msg,
17396 input_location);
17397 if (error_msg)
17398 error (error_msg);
17399 if (!function_p && identifier_p (decl))
17401 if (complain & tf_error)
17402 unqualified_name_lookup_error (decl);
17403 decl = error_mark_node;
17405 RETURN (decl);
17408 case TEMPLATE_ID_EXPR:
17410 tree object;
17411 tree templ = RECUR (TREE_OPERAND (t, 0));
17412 tree targs = TREE_OPERAND (t, 1);
17414 if (targs)
17415 targs = tsubst_template_args (targs, args, complain, in_decl);
17416 if (targs == error_mark_node)
17417 RETURN (error_mark_node);
17419 if (TREE_CODE (templ) == SCOPE_REF)
17421 tree name = TREE_OPERAND (templ, 1);
17422 tree tid = lookup_template_function (name, targs);
17423 TREE_OPERAND (templ, 1) = tid;
17424 RETURN (templ);
17427 if (variable_template_p (templ))
17428 RETURN (lookup_and_finish_template_variable (templ, targs, complain));
17430 if (TREE_CODE (templ) == COMPONENT_REF)
17432 object = TREE_OPERAND (templ, 0);
17433 templ = TREE_OPERAND (templ, 1);
17435 else
17436 object = NULL_TREE;
17437 templ = lookup_template_function (templ, targs);
17439 if (object)
17440 RETURN (build3 (COMPONENT_REF, TREE_TYPE (templ),
17441 object, templ, NULL_TREE));
17442 else
17443 RETURN (baselink_for_fns (templ));
17446 case INDIRECT_REF:
17448 tree r = RECUR (TREE_OPERAND (t, 0));
17450 if (REFERENCE_REF_P (t))
17452 /* A type conversion to reference type will be enclosed in
17453 such an indirect ref, but the substitution of the cast
17454 will have also added such an indirect ref. */
17455 r = convert_from_reference (r);
17457 else
17458 r = build_x_indirect_ref (input_location, r, RO_UNARY_STAR,
17459 complain|decltype_flag);
17461 if (REF_PARENTHESIZED_P (t))
17462 r = force_paren_expr (r);
17464 RETURN (r);
17467 case NOP_EXPR:
17469 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
17470 tree op0 = RECUR (TREE_OPERAND (t, 0));
17471 RETURN (build_nop (type, op0));
17474 case IMPLICIT_CONV_EXPR:
17476 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
17477 tree expr = RECUR (TREE_OPERAND (t, 0));
17478 if (dependent_type_p (type) || type_dependent_expression_p (expr))
17480 retval = copy_node (t);
17481 TREE_TYPE (retval) = type;
17482 TREE_OPERAND (retval, 0) = expr;
17483 RETURN (retval);
17485 if (IMPLICIT_CONV_EXPR_NONTYPE_ARG (t))
17486 /* We'll pass this to convert_nontype_argument again, we don't need
17487 to actually perform any conversion here. */
17488 RETURN (expr);
17489 int flags = LOOKUP_IMPLICIT;
17490 if (IMPLICIT_CONV_EXPR_DIRECT_INIT (t))
17491 flags = LOOKUP_NORMAL;
17492 RETURN (perform_implicit_conversion_flags (type, expr, complain,
17493 flags));
17496 case CONVERT_EXPR:
17498 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
17499 tree op0 = RECUR (TREE_OPERAND (t, 0));
17500 if (op0 == error_mark_node)
17501 RETURN (error_mark_node);
17502 RETURN (build1 (CONVERT_EXPR, type, op0));
17505 case CAST_EXPR:
17506 case REINTERPRET_CAST_EXPR:
17507 case CONST_CAST_EXPR:
17508 case DYNAMIC_CAST_EXPR:
17509 case STATIC_CAST_EXPR:
17511 tree type;
17512 tree op, r = NULL_TREE;
17514 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
17515 if (integral_constant_expression_p
17516 && !cast_valid_in_integral_constant_expression_p (type))
17518 if (complain & tf_error)
17519 error ("a cast to a type other than an integral or "
17520 "enumeration type cannot appear in a constant-expression");
17521 RETURN (error_mark_node);
17524 op = RECUR (TREE_OPERAND (t, 0));
17526 warning_sentinel s(warn_useless_cast);
17527 warning_sentinel s2(warn_ignored_qualifiers);
17528 switch (TREE_CODE (t))
17530 case CAST_EXPR:
17531 r = build_functional_cast (type, op, complain);
17532 break;
17533 case REINTERPRET_CAST_EXPR:
17534 r = build_reinterpret_cast (type, op, complain);
17535 break;
17536 case CONST_CAST_EXPR:
17537 r = build_const_cast (type, op, complain);
17538 break;
17539 case DYNAMIC_CAST_EXPR:
17540 r = build_dynamic_cast (type, op, complain);
17541 break;
17542 case STATIC_CAST_EXPR:
17543 r = build_static_cast (type, op, complain);
17544 break;
17545 default:
17546 gcc_unreachable ();
17549 RETURN (r);
17552 case POSTDECREMENT_EXPR:
17553 case POSTINCREMENT_EXPR:
17554 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
17555 args, complain, in_decl);
17556 RETURN (build_x_unary_op (input_location, TREE_CODE (t), op1,
17557 complain|decltype_flag));
17559 case PREDECREMENT_EXPR:
17560 case PREINCREMENT_EXPR:
17561 case NEGATE_EXPR:
17562 case BIT_NOT_EXPR:
17563 case ABS_EXPR:
17564 case TRUTH_NOT_EXPR:
17565 case UNARY_PLUS_EXPR: /* Unary + */
17566 case REALPART_EXPR:
17567 case IMAGPART_EXPR:
17568 RETURN (build_x_unary_op (input_location, TREE_CODE (t),
17569 RECUR (TREE_OPERAND (t, 0)),
17570 complain|decltype_flag));
17572 case FIX_TRUNC_EXPR:
17573 gcc_unreachable ();
17575 case ADDR_EXPR:
17576 op1 = TREE_OPERAND (t, 0);
17577 if (TREE_CODE (op1) == LABEL_DECL)
17578 RETURN (finish_label_address_expr (DECL_NAME (op1),
17579 EXPR_LOCATION (op1)));
17580 if (TREE_CODE (op1) == SCOPE_REF)
17581 op1 = tsubst_qualified_id (op1, args, complain, in_decl,
17582 /*done=*/true, /*address_p=*/true);
17583 else
17584 op1 = tsubst_non_call_postfix_expression (op1, args, complain,
17585 in_decl);
17586 RETURN (build_x_unary_op (input_location, ADDR_EXPR, op1,
17587 complain|decltype_flag));
17589 case PLUS_EXPR:
17590 case MINUS_EXPR:
17591 case MULT_EXPR:
17592 case TRUNC_DIV_EXPR:
17593 case CEIL_DIV_EXPR:
17594 case FLOOR_DIV_EXPR:
17595 case ROUND_DIV_EXPR:
17596 case EXACT_DIV_EXPR:
17597 case BIT_AND_EXPR:
17598 case BIT_IOR_EXPR:
17599 case BIT_XOR_EXPR:
17600 case TRUNC_MOD_EXPR:
17601 case FLOOR_MOD_EXPR:
17602 case TRUTH_ANDIF_EXPR:
17603 case TRUTH_ORIF_EXPR:
17604 case TRUTH_AND_EXPR:
17605 case TRUTH_OR_EXPR:
17606 case RSHIFT_EXPR:
17607 case LSHIFT_EXPR:
17608 case RROTATE_EXPR:
17609 case LROTATE_EXPR:
17610 case EQ_EXPR:
17611 case NE_EXPR:
17612 case MAX_EXPR:
17613 case MIN_EXPR:
17614 case LE_EXPR:
17615 case GE_EXPR:
17616 case LT_EXPR:
17617 case GT_EXPR:
17618 case MEMBER_REF:
17619 case DOTSTAR_EXPR:
17621 warning_sentinel s1(warn_type_limits);
17622 warning_sentinel s2(warn_div_by_zero);
17623 warning_sentinel s3(warn_logical_op);
17624 warning_sentinel s4(warn_tautological_compare);
17625 tree op0 = RECUR (TREE_OPERAND (t, 0));
17626 tree op1 = RECUR (TREE_OPERAND (t, 1));
17627 tree r = build_x_binary_op
17628 (input_location, TREE_CODE (t),
17629 op0,
17630 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
17631 ? ERROR_MARK
17632 : TREE_CODE (TREE_OPERAND (t, 0))),
17633 op1,
17634 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
17635 ? ERROR_MARK
17636 : TREE_CODE (TREE_OPERAND (t, 1))),
17637 /*overload=*/NULL,
17638 complain|decltype_flag);
17639 if (EXPR_P (r) && TREE_NO_WARNING (t))
17640 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
17642 RETURN (r);
17645 case POINTER_PLUS_EXPR:
17647 tree op0 = RECUR (TREE_OPERAND (t, 0));
17648 tree op1 = RECUR (TREE_OPERAND (t, 1));
17649 RETURN (fold_build_pointer_plus (op0, op1));
17652 case SCOPE_REF:
17653 RETURN (tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
17654 /*address_p=*/false));
17655 case ARRAY_REF:
17656 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
17657 args, complain, in_decl);
17658 RETURN (build_x_array_ref (EXPR_LOCATION (t), op1,
17659 RECUR (TREE_OPERAND (t, 1)),
17660 complain|decltype_flag));
17662 case SIZEOF_EXPR:
17663 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0))
17664 || ARGUMENT_PACK_P (TREE_OPERAND (t, 0)))
17665 RETURN (tsubst_copy (t, args, complain, in_decl));
17666 /* Fall through */
17668 case ALIGNOF_EXPR:
17670 tree r;
17672 op1 = TREE_OPERAND (t, 0);
17673 if (TREE_CODE (t) == SIZEOF_EXPR && SIZEOF_EXPR_TYPE_P (t))
17674 op1 = TREE_TYPE (op1);
17675 if (!args)
17677 /* When there are no ARGS, we are trying to evaluate a
17678 non-dependent expression from the parser. Trying to do
17679 the substitutions may not work. */
17680 if (!TYPE_P (op1))
17681 op1 = TREE_TYPE (op1);
17683 else
17685 ++cp_unevaluated_operand;
17686 ++c_inhibit_evaluation_warnings;
17687 if (TYPE_P (op1))
17688 op1 = tsubst (op1, args, complain, in_decl);
17689 else
17690 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
17691 /*function_p=*/false,
17692 /*integral_constant_expression_p=*/
17693 false);
17694 --cp_unevaluated_operand;
17695 --c_inhibit_evaluation_warnings;
17697 if (TYPE_P (op1))
17698 r = cxx_sizeof_or_alignof_type (op1, TREE_CODE (t),
17699 complain & tf_error);
17700 else
17701 r = cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t),
17702 complain & tf_error);
17703 if (TREE_CODE (t) == SIZEOF_EXPR && r != error_mark_node)
17705 if (TREE_CODE (r) != SIZEOF_EXPR || TYPE_P (op1))
17707 if (!processing_template_decl && TYPE_P (op1))
17709 r = build_min (SIZEOF_EXPR, size_type_node,
17710 build1 (NOP_EXPR, op1, error_mark_node));
17711 SIZEOF_EXPR_TYPE_P (r) = 1;
17713 else
17714 r = build_min (SIZEOF_EXPR, size_type_node, op1);
17715 TREE_SIDE_EFFECTS (r) = 0;
17716 TREE_READONLY (r) = 1;
17718 SET_EXPR_LOCATION (r, EXPR_LOCATION (t));
17720 RETURN (r);
17723 case AT_ENCODE_EXPR:
17725 op1 = TREE_OPERAND (t, 0);
17726 ++cp_unevaluated_operand;
17727 ++c_inhibit_evaluation_warnings;
17728 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
17729 /*function_p=*/false,
17730 /*integral_constant_expression_p=*/false);
17731 --cp_unevaluated_operand;
17732 --c_inhibit_evaluation_warnings;
17733 RETURN (objc_build_encode_expr (op1));
17736 case NOEXCEPT_EXPR:
17737 op1 = TREE_OPERAND (t, 0);
17738 ++cp_unevaluated_operand;
17739 ++c_inhibit_evaluation_warnings;
17740 ++cp_noexcept_operand;
17741 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
17742 /*function_p=*/false,
17743 /*integral_constant_expression_p=*/false);
17744 --cp_unevaluated_operand;
17745 --c_inhibit_evaluation_warnings;
17746 --cp_noexcept_operand;
17747 RETURN (finish_noexcept_expr (op1, complain));
17749 case MODOP_EXPR:
17751 warning_sentinel s(warn_div_by_zero);
17752 tree lhs = RECUR (TREE_OPERAND (t, 0));
17753 tree rhs = RECUR (TREE_OPERAND (t, 2));
17754 tree r = build_x_modify_expr
17755 (EXPR_LOCATION (t), lhs, TREE_CODE (TREE_OPERAND (t, 1)), rhs,
17756 complain|decltype_flag);
17757 /* TREE_NO_WARNING must be set if either the expression was
17758 parenthesized or it uses an operator such as >>= rather
17759 than plain assignment. In the former case, it was already
17760 set and must be copied. In the latter case,
17761 build_x_modify_expr sets it and it must not be reset
17762 here. */
17763 if (TREE_NO_WARNING (t))
17764 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
17766 RETURN (r);
17769 case ARROW_EXPR:
17770 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
17771 args, complain, in_decl);
17772 /* Remember that there was a reference to this entity. */
17773 if (DECL_P (op1)
17774 && !mark_used (op1, complain) && !(complain & tf_error))
17775 RETURN (error_mark_node);
17776 RETURN (build_x_arrow (input_location, op1, complain));
17778 case NEW_EXPR:
17780 tree placement = RECUR (TREE_OPERAND (t, 0));
17781 tree init = RECUR (TREE_OPERAND (t, 3));
17782 vec<tree, va_gc> *placement_vec;
17783 vec<tree, va_gc> *init_vec;
17784 tree ret;
17786 if (placement == NULL_TREE)
17787 placement_vec = NULL;
17788 else
17790 placement_vec = make_tree_vector ();
17791 for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
17792 vec_safe_push (placement_vec, TREE_VALUE (placement));
17795 /* If there was an initializer in the original tree, but it
17796 instantiated to an empty list, then we should pass a
17797 non-NULL empty vector to tell build_new that it was an
17798 empty initializer() rather than no initializer. This can
17799 only happen when the initializer is a pack expansion whose
17800 parameter packs are of length zero. */
17801 if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
17802 init_vec = NULL;
17803 else
17805 init_vec = make_tree_vector ();
17806 if (init == void_node)
17807 gcc_assert (init_vec != NULL);
17808 else
17810 for (; init != NULL_TREE; init = TREE_CHAIN (init))
17811 vec_safe_push (init_vec, TREE_VALUE (init));
17815 tree op1 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
17816 tree op2 = RECUR (TREE_OPERAND (t, 2));
17817 ret = build_new (&placement_vec, op1, op2, &init_vec,
17818 NEW_EXPR_USE_GLOBAL (t),
17819 complain);
17821 if (placement_vec != NULL)
17822 release_tree_vector (placement_vec);
17823 if (init_vec != NULL)
17824 release_tree_vector (init_vec);
17826 RETURN (ret);
17829 case DELETE_EXPR:
17831 tree op0 = RECUR (TREE_OPERAND (t, 0));
17832 tree op1 = RECUR (TREE_OPERAND (t, 1));
17833 RETURN (delete_sanity (op0, op1,
17834 DELETE_EXPR_USE_VEC (t),
17835 DELETE_EXPR_USE_GLOBAL (t),
17836 complain));
17839 case COMPOUND_EXPR:
17841 tree op0 = tsubst_copy_and_build (TREE_OPERAND (t, 0), args,
17842 complain & ~tf_decltype, in_decl,
17843 /*function_p=*/false,
17844 integral_constant_expression_p);
17845 RETURN (build_x_compound_expr (EXPR_LOCATION (t),
17846 op0,
17847 RECUR (TREE_OPERAND (t, 1)),
17848 complain|decltype_flag));
17851 case CALL_EXPR:
17853 tree function;
17854 vec<tree, va_gc> *call_args;
17855 unsigned int nargs, i;
17856 bool qualified_p;
17857 bool koenig_p;
17858 tree ret;
17860 function = CALL_EXPR_FN (t);
17861 /* Internal function with no arguments. */
17862 if (function == NULL_TREE && call_expr_nargs (t) == 0)
17863 RETURN (t);
17865 /* When we parsed the expression, we determined whether or
17866 not Koenig lookup should be performed. */
17867 koenig_p = KOENIG_LOOKUP_P (t);
17868 if (function == NULL_TREE)
17870 koenig_p = false;
17871 qualified_p = false;
17873 else if (TREE_CODE (function) == SCOPE_REF)
17875 qualified_p = true;
17876 function = tsubst_qualified_id (function, args, complain, in_decl,
17877 /*done=*/false,
17878 /*address_p=*/false);
17880 else if (koenig_p && identifier_p (function))
17882 /* Do nothing; calling tsubst_copy_and_build on an identifier
17883 would incorrectly perform unqualified lookup again.
17885 Note that we can also have an IDENTIFIER_NODE if the earlier
17886 unqualified lookup found a member function; in that case
17887 koenig_p will be false and we do want to do the lookup
17888 again to find the instantiated member function.
17890 FIXME but doing that causes c++/15272, so we need to stop
17891 using IDENTIFIER_NODE in that situation. */
17892 qualified_p = false;
17894 else
17896 if (TREE_CODE (function) == COMPONENT_REF)
17898 tree op = TREE_OPERAND (function, 1);
17900 qualified_p = (TREE_CODE (op) == SCOPE_REF
17901 || (BASELINK_P (op)
17902 && BASELINK_QUALIFIED_P (op)));
17904 else
17905 qualified_p = false;
17907 if (TREE_CODE (function) == ADDR_EXPR
17908 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
17909 /* Avoid error about taking the address of a constructor. */
17910 function = TREE_OPERAND (function, 0);
17912 function = tsubst_copy_and_build (function, args, complain,
17913 in_decl,
17914 !qualified_p,
17915 integral_constant_expression_p);
17917 if (BASELINK_P (function))
17918 qualified_p = true;
17921 nargs = call_expr_nargs (t);
17922 call_args = make_tree_vector ();
17923 for (i = 0; i < nargs; ++i)
17925 tree arg = CALL_EXPR_ARG (t, i);
17927 if (!PACK_EXPANSION_P (arg))
17928 vec_safe_push (call_args, RECUR (CALL_EXPR_ARG (t, i)));
17929 else
17931 /* Expand the pack expansion and push each entry onto
17932 CALL_ARGS. */
17933 arg = tsubst_pack_expansion (arg, args, complain, in_decl);
17934 if (TREE_CODE (arg) == TREE_VEC)
17936 unsigned int len, j;
17938 len = TREE_VEC_LENGTH (arg);
17939 for (j = 0; j < len; ++j)
17941 tree value = TREE_VEC_ELT (arg, j);
17942 if (value != NULL_TREE)
17943 value = convert_from_reference (value);
17944 vec_safe_push (call_args, value);
17947 else
17949 /* A partial substitution. Add one entry. */
17950 vec_safe_push (call_args, arg);
17955 /* We do not perform argument-dependent lookup if normal
17956 lookup finds a non-function, in accordance with the
17957 expected resolution of DR 218. */
17958 if (koenig_p
17959 && ((is_overloaded_fn (function)
17960 /* If lookup found a member function, the Koenig lookup is
17961 not appropriate, even if an unqualified-name was used
17962 to denote the function. */
17963 && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
17964 || identifier_p (function))
17965 /* Only do this when substitution turns a dependent call
17966 into a non-dependent call. */
17967 && type_dependent_expression_p_push (t)
17968 && !any_type_dependent_arguments_p (call_args))
17969 function = perform_koenig_lookup (function, call_args, tf_none);
17971 if (function != NULL_TREE
17972 && identifier_p (function)
17973 && !any_type_dependent_arguments_p (call_args))
17975 if (koenig_p && (complain & tf_warning_or_error))
17977 /* For backwards compatibility and good diagnostics, try
17978 the unqualified lookup again if we aren't in SFINAE
17979 context. */
17980 tree unq = (tsubst_copy_and_build
17981 (function, args, complain, in_decl, true,
17982 integral_constant_expression_p));
17983 if (unq == error_mark_node)
17985 release_tree_vector (call_args);
17986 RETURN (error_mark_node);
17989 if (unq != function)
17991 /* In a lambda fn, we have to be careful to not
17992 introduce new this captures. Legacy code can't
17993 be using lambdas anyway, so it's ok to be
17994 stricter. */
17995 bool in_lambda = (current_class_type
17996 && LAMBDA_TYPE_P (current_class_type));
17997 char const *const msg
17998 = G_("%qD was not declared in this scope, "
17999 "and no declarations were found by "
18000 "argument-dependent lookup at the point "
18001 "of instantiation");
18003 bool diag = true;
18004 if (in_lambda)
18005 error_at (EXPR_LOC_OR_LOC (t, input_location),
18006 msg, function);
18007 else
18008 diag = permerror (EXPR_LOC_OR_LOC (t, input_location),
18009 msg, function);
18010 if (diag)
18012 tree fn = unq;
18014 if (INDIRECT_REF_P (fn))
18015 fn = TREE_OPERAND (fn, 0);
18016 if (is_overloaded_fn (fn))
18017 fn = get_first_fn (fn);
18019 if (!DECL_P (fn))
18020 /* Can't say anything more. */;
18021 else if (DECL_CLASS_SCOPE_P (fn))
18023 location_t loc = EXPR_LOC_OR_LOC (t,
18024 input_location);
18025 inform (loc,
18026 "declarations in dependent base %qT are "
18027 "not found by unqualified lookup",
18028 DECL_CLASS_CONTEXT (fn));
18029 if (current_class_ptr)
18030 inform (loc,
18031 "use %<this->%D%> instead", function);
18032 else
18033 inform (loc,
18034 "use %<%T::%D%> instead",
18035 current_class_name, function);
18037 else
18038 inform (DECL_SOURCE_LOCATION (fn),
18039 "%qD declared here, later in the "
18040 "translation unit", fn);
18041 if (in_lambda)
18043 release_tree_vector (call_args);
18044 RETURN (error_mark_node);
18048 function = unq;
18051 if (identifier_p (function))
18053 if (complain & tf_error)
18054 unqualified_name_lookup_error (function);
18055 release_tree_vector (call_args);
18056 RETURN (error_mark_node);
18060 /* Remember that there was a reference to this entity. */
18061 if (function != NULL_TREE
18062 && DECL_P (function)
18063 && !mark_used (function, complain) && !(complain & tf_error))
18065 release_tree_vector (call_args);
18066 RETURN (error_mark_node);
18069 /* Put back tf_decltype for the actual call. */
18070 complain |= decltype_flag;
18072 if (function == NULL_TREE)
18073 switch (CALL_EXPR_IFN (t))
18075 case IFN_LAUNDER:
18076 gcc_assert (nargs == 1);
18077 if (vec_safe_length (call_args) != 1)
18079 error_at (EXPR_LOC_OR_LOC (t, input_location),
18080 "wrong number of arguments to "
18081 "%<__builtin_launder%>");
18082 ret = error_mark_node;
18084 else
18085 ret = finish_builtin_launder (EXPR_LOC_OR_LOC (t,
18086 input_location),
18087 (*call_args)[0], complain);
18088 break;
18090 default:
18091 /* Unsupported internal function with arguments. */
18092 gcc_unreachable ();
18094 else if (TREE_CODE (function) == OFFSET_REF)
18095 ret = build_offset_ref_call_from_tree (function, &call_args,
18096 complain);
18097 else if (TREE_CODE (function) == COMPONENT_REF)
18099 tree instance = TREE_OPERAND (function, 0);
18100 tree fn = TREE_OPERAND (function, 1);
18102 if (processing_template_decl
18103 && (type_dependent_expression_p (instance)
18104 || (!BASELINK_P (fn)
18105 && TREE_CODE (fn) != FIELD_DECL)
18106 || type_dependent_expression_p (fn)
18107 || any_type_dependent_arguments_p (call_args)))
18108 ret = build_min_nt_call_vec (function, call_args);
18109 else if (!BASELINK_P (fn))
18110 ret = finish_call_expr (function, &call_args,
18111 /*disallow_virtual=*/false,
18112 /*koenig_p=*/false,
18113 complain);
18114 else
18115 ret = (build_new_method_call
18116 (instance, fn,
18117 &call_args, NULL_TREE,
18118 qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
18119 /*fn_p=*/NULL,
18120 complain));
18122 else
18123 ret = finish_call_expr (function, &call_args,
18124 /*disallow_virtual=*/qualified_p,
18125 koenig_p,
18126 complain);
18128 release_tree_vector (call_args);
18130 if (ret != error_mark_node)
18132 bool op = CALL_EXPR_OPERATOR_SYNTAX (t);
18133 bool ord = CALL_EXPR_ORDERED_ARGS (t);
18134 bool rev = CALL_EXPR_REVERSE_ARGS (t);
18135 bool thk = CALL_FROM_THUNK_P (t);
18136 if (op || ord || rev || thk)
18138 function = extract_call_expr (ret);
18139 CALL_EXPR_OPERATOR_SYNTAX (function) = op;
18140 CALL_EXPR_ORDERED_ARGS (function) = ord;
18141 CALL_EXPR_REVERSE_ARGS (function) = rev;
18142 if (thk)
18144 if (TREE_CODE (function) == CALL_EXPR)
18145 CALL_FROM_THUNK_P (function) = true;
18146 else
18147 AGGR_INIT_FROM_THUNK_P (function) = true;
18148 /* The thunk location is not interesting. */
18149 SET_EXPR_LOCATION (function, UNKNOWN_LOCATION);
18154 RETURN (ret);
18157 case COND_EXPR:
18159 tree cond = RECUR (TREE_OPERAND (t, 0));
18160 tree folded_cond = fold_non_dependent_expr (cond);
18161 tree exp1, exp2;
18163 if (TREE_CODE (folded_cond) == INTEGER_CST)
18165 if (integer_zerop (folded_cond))
18167 ++c_inhibit_evaluation_warnings;
18168 exp1 = RECUR (TREE_OPERAND (t, 1));
18169 --c_inhibit_evaluation_warnings;
18170 exp2 = RECUR (TREE_OPERAND (t, 2));
18172 else
18174 exp1 = RECUR (TREE_OPERAND (t, 1));
18175 ++c_inhibit_evaluation_warnings;
18176 exp2 = RECUR (TREE_OPERAND (t, 2));
18177 --c_inhibit_evaluation_warnings;
18179 cond = folded_cond;
18181 else
18183 exp1 = RECUR (TREE_OPERAND (t, 1));
18184 exp2 = RECUR (TREE_OPERAND (t, 2));
18187 warning_sentinel s(warn_duplicated_branches);
18188 RETURN (build_x_conditional_expr (EXPR_LOCATION (t),
18189 cond, exp1, exp2, complain));
18192 case PSEUDO_DTOR_EXPR:
18194 tree op0 = RECUR (TREE_OPERAND (t, 0));
18195 tree op1 = RECUR (TREE_OPERAND (t, 1));
18196 tree op2 = tsubst (TREE_OPERAND (t, 2), args, complain, in_decl);
18197 RETURN (finish_pseudo_destructor_expr (op0, op1, op2,
18198 input_location));
18201 case TREE_LIST:
18203 tree purpose, value, chain;
18205 if (t == void_list_node)
18206 RETURN (t);
18208 if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
18209 || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
18211 /* We have pack expansions, so expand those and
18212 create a new list out of it. */
18213 tree purposevec = NULL_TREE;
18214 tree valuevec = NULL_TREE;
18215 tree chain;
18216 int i, len = -1;
18218 /* Expand the argument expressions. */
18219 if (TREE_PURPOSE (t))
18220 purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
18221 complain, in_decl);
18222 if (TREE_VALUE (t))
18223 valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
18224 complain, in_decl);
18226 /* Build the rest of the list. */
18227 chain = TREE_CHAIN (t);
18228 if (chain && chain != void_type_node)
18229 chain = RECUR (chain);
18231 /* Determine the number of arguments. */
18232 if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
18234 len = TREE_VEC_LENGTH (purposevec);
18235 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
18237 else if (TREE_CODE (valuevec) == TREE_VEC)
18238 len = TREE_VEC_LENGTH (valuevec);
18239 else
18241 /* Since we only performed a partial substitution into
18242 the argument pack, we only RETURN (a single list
18243 node. */
18244 if (purposevec == TREE_PURPOSE (t)
18245 && valuevec == TREE_VALUE (t)
18246 && chain == TREE_CHAIN (t))
18247 RETURN (t);
18249 RETURN (tree_cons (purposevec, valuevec, chain));
18252 /* Convert the argument vectors into a TREE_LIST */
18253 i = len;
18254 while (i > 0)
18256 /* Grab the Ith values. */
18257 i--;
18258 purpose = purposevec ? TREE_VEC_ELT (purposevec, i)
18259 : NULL_TREE;
18260 value
18261 = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i))
18262 : NULL_TREE;
18264 /* Build the list (backwards). */
18265 chain = tree_cons (purpose, value, chain);
18268 RETURN (chain);
18271 purpose = TREE_PURPOSE (t);
18272 if (purpose)
18273 purpose = RECUR (purpose);
18274 value = TREE_VALUE (t);
18275 if (value)
18276 value = RECUR (value);
18277 chain = TREE_CHAIN (t);
18278 if (chain && chain != void_type_node)
18279 chain = RECUR (chain);
18280 if (purpose == TREE_PURPOSE (t)
18281 && value == TREE_VALUE (t)
18282 && chain == TREE_CHAIN (t))
18283 RETURN (t);
18284 RETURN (tree_cons (purpose, value, chain));
18287 case COMPONENT_REF:
18289 tree object;
18290 tree object_type;
18291 tree member;
18292 tree r;
18294 object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
18295 args, complain, in_decl);
18296 /* Remember that there was a reference to this entity. */
18297 if (DECL_P (object)
18298 && !mark_used (object, complain) && !(complain & tf_error))
18299 RETURN (error_mark_node);
18300 object_type = TREE_TYPE (object);
18302 member = TREE_OPERAND (t, 1);
18303 if (BASELINK_P (member))
18304 member = tsubst_baselink (member,
18305 non_reference (TREE_TYPE (object)),
18306 args, complain, in_decl);
18307 else
18308 member = tsubst_copy (member, args, complain, in_decl);
18309 if (member == error_mark_node)
18310 RETURN (error_mark_node);
18312 if (TREE_CODE (member) == FIELD_DECL)
18314 r = finish_non_static_data_member (member, object, NULL_TREE);
18315 if (TREE_CODE (r) == COMPONENT_REF)
18316 REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
18317 RETURN (r);
18319 else if (type_dependent_expression_p (object))
18320 /* We can't do much here. */;
18321 else if (!CLASS_TYPE_P (object_type))
18323 if (scalarish_type_p (object_type))
18325 tree s = NULL_TREE;
18326 tree dtor = member;
18328 if (TREE_CODE (dtor) == SCOPE_REF)
18330 s = TREE_OPERAND (dtor, 0);
18331 dtor = TREE_OPERAND (dtor, 1);
18333 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
18335 dtor = TREE_OPERAND (dtor, 0);
18336 if (TYPE_P (dtor))
18337 RETURN (finish_pseudo_destructor_expr
18338 (object, s, dtor, input_location));
18342 else if (TREE_CODE (member) == SCOPE_REF
18343 && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
18345 /* Lookup the template functions now that we know what the
18346 scope is. */
18347 tree scope = TREE_OPERAND (member, 0);
18348 tree tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
18349 tree args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
18350 member = lookup_qualified_name (scope, tmpl,
18351 /*is_type_p=*/false,
18352 /*complain=*/false);
18353 if (BASELINK_P (member))
18355 BASELINK_FUNCTIONS (member)
18356 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
18357 args);
18358 member = (adjust_result_of_qualified_name_lookup
18359 (member, BINFO_TYPE (BASELINK_BINFO (member)),
18360 object_type));
18362 else
18364 qualified_name_lookup_error (scope, tmpl, member,
18365 input_location);
18366 RETURN (error_mark_node);
18369 else if (TREE_CODE (member) == SCOPE_REF
18370 && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
18371 && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
18373 if (complain & tf_error)
18375 if (TYPE_P (TREE_OPERAND (member, 0)))
18376 error ("%qT is not a class or namespace",
18377 TREE_OPERAND (member, 0));
18378 else
18379 error ("%qD is not a class or namespace",
18380 TREE_OPERAND (member, 0));
18382 RETURN (error_mark_node);
18385 r = finish_class_member_access_expr (object, member,
18386 /*template_p=*/false,
18387 complain);
18388 if (TREE_CODE (r) == COMPONENT_REF)
18389 REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
18390 RETURN (r);
18393 case THROW_EXPR:
18394 RETURN (build_throw
18395 (RECUR (TREE_OPERAND (t, 0))));
18397 case CONSTRUCTOR:
18399 vec<constructor_elt, va_gc> *n;
18400 constructor_elt *ce;
18401 unsigned HOST_WIDE_INT idx;
18402 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
18403 bool process_index_p;
18404 int newlen;
18405 bool need_copy_p = false;
18406 tree r;
18408 if (type == error_mark_node)
18409 RETURN (error_mark_node);
18411 /* We do not want to process the index of aggregate
18412 initializers as they are identifier nodes which will be
18413 looked up by digest_init. */
18414 process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
18416 n = vec_safe_copy (CONSTRUCTOR_ELTS (t));
18417 newlen = vec_safe_length (n);
18418 FOR_EACH_VEC_SAFE_ELT (n, idx, ce)
18420 if (ce->index && process_index_p
18421 /* An identifier index is looked up in the type
18422 being initialized, not the current scope. */
18423 && TREE_CODE (ce->index) != IDENTIFIER_NODE)
18424 ce->index = RECUR (ce->index);
18426 if (PACK_EXPANSION_P (ce->value))
18428 /* Substitute into the pack expansion. */
18429 ce->value = tsubst_pack_expansion (ce->value, args, complain,
18430 in_decl);
18432 if (ce->value == error_mark_node
18433 || PACK_EXPANSION_P (ce->value))
18435 else if (TREE_VEC_LENGTH (ce->value) == 1)
18436 /* Just move the argument into place. */
18437 ce->value = TREE_VEC_ELT (ce->value, 0);
18438 else
18440 /* Update the length of the final CONSTRUCTOR
18441 arguments vector, and note that we will need to
18442 copy.*/
18443 newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
18444 need_copy_p = true;
18447 else
18448 ce->value = RECUR (ce->value);
18451 if (need_copy_p)
18453 vec<constructor_elt, va_gc> *old_n = n;
18455 vec_alloc (n, newlen);
18456 FOR_EACH_VEC_ELT (*old_n, idx, ce)
18458 if (TREE_CODE (ce->value) == TREE_VEC)
18460 int i, len = TREE_VEC_LENGTH (ce->value);
18461 for (i = 0; i < len; ++i)
18462 CONSTRUCTOR_APPEND_ELT (n, 0,
18463 TREE_VEC_ELT (ce->value, i));
18465 else
18466 CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
18470 r = build_constructor (init_list_type_node, n);
18471 CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
18473 if (TREE_HAS_CONSTRUCTOR (t))
18475 fcl_t cl = fcl_functional;
18476 if (CONSTRUCTOR_C99_COMPOUND_LITERAL (t))
18477 cl = fcl_c99;
18478 RETURN (finish_compound_literal (type, r, complain, cl));
18481 TREE_TYPE (r) = type;
18482 RETURN (r);
18485 case TYPEID_EXPR:
18487 tree operand_0 = TREE_OPERAND (t, 0);
18488 if (TYPE_P (operand_0))
18490 operand_0 = tsubst (operand_0, args, complain, in_decl);
18491 RETURN (get_typeid (operand_0, complain));
18493 else
18495 operand_0 = RECUR (operand_0);
18496 RETURN (build_typeid (operand_0, complain));
18500 case VAR_DECL:
18501 if (!args)
18502 RETURN (t);
18503 /* Fall through */
18505 case PARM_DECL:
18507 tree r = tsubst_copy (t, args, complain, in_decl);
18508 /* ??? We're doing a subset of finish_id_expression here. */
18509 if (VAR_P (r)
18510 && !processing_template_decl
18511 && !cp_unevaluated_operand
18512 && (TREE_STATIC (r) || DECL_EXTERNAL (r))
18513 && CP_DECL_THREAD_LOCAL_P (r))
18515 if (tree wrap = get_tls_wrapper_fn (r))
18516 /* Replace an evaluated use of the thread_local variable with
18517 a call to its wrapper. */
18518 r = build_cxx_call (wrap, 0, NULL, tf_warning_or_error);
18520 else if (outer_automatic_var_p (r))
18521 r = process_outer_var_ref (r, complain);
18523 if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
18524 /* If the original type was a reference, we'll be wrapped in
18525 the appropriate INDIRECT_REF. */
18526 r = convert_from_reference (r);
18527 RETURN (r);
18530 case VA_ARG_EXPR:
18532 tree op0 = RECUR (TREE_OPERAND (t, 0));
18533 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
18534 RETURN (build_x_va_arg (EXPR_LOCATION (t), op0, type));
18537 case OFFSETOF_EXPR:
18539 tree object_ptr
18540 = tsubst_copy_and_build (TREE_OPERAND (t, 1), args, complain,
18541 in_decl, /*function_p=*/false,
18542 /*integral_constant_expression_p=*/false);
18543 RETURN (finish_offsetof (object_ptr,
18544 RECUR (TREE_OPERAND (t, 0)),
18545 EXPR_LOCATION (t)));
18548 case ADDRESSOF_EXPR:
18549 RETURN (cp_build_addressof (EXPR_LOCATION (t),
18550 RECUR (TREE_OPERAND (t, 0)), complain));
18552 case TRAIT_EXPR:
18554 tree type1 = tsubst (TRAIT_EXPR_TYPE1 (t), args,
18555 complain, in_decl);
18557 tree type2 = TRAIT_EXPR_TYPE2 (t);
18558 if (type2 && TREE_CODE (type2) == TREE_LIST)
18559 type2 = RECUR (type2);
18560 else if (type2)
18561 type2 = tsubst (type2, args, complain, in_decl);
18563 RETURN (finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2));
18566 case STMT_EXPR:
18568 tree old_stmt_expr = cur_stmt_expr;
18569 tree stmt_expr = begin_stmt_expr ();
18571 cur_stmt_expr = stmt_expr;
18572 tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
18573 integral_constant_expression_p);
18574 stmt_expr = finish_stmt_expr (stmt_expr, false);
18575 cur_stmt_expr = old_stmt_expr;
18577 /* If the resulting list of expression statement is empty,
18578 fold it further into void_node. */
18579 if (empty_expr_stmt_p (stmt_expr))
18580 stmt_expr = void_node;
18582 RETURN (stmt_expr);
18585 case LAMBDA_EXPR:
18587 tree r = tsubst_lambda_expr (t, args, complain, in_decl);
18589 RETURN (build_lambda_object (r));
18592 case TARGET_EXPR:
18593 /* We can get here for a constant initializer of non-dependent type.
18594 FIXME stop folding in cp_parser_initializer_clause. */
18596 tree r = get_target_expr_sfinae (RECUR (TARGET_EXPR_INITIAL (t)),
18597 complain);
18598 RETURN (r);
18601 case TRANSACTION_EXPR:
18602 RETURN (tsubst_expr(t, args, complain, in_decl,
18603 integral_constant_expression_p));
18605 case PAREN_EXPR:
18606 RETURN (finish_parenthesized_expr (RECUR (TREE_OPERAND (t, 0))));
18608 case VEC_PERM_EXPR:
18610 tree op0 = RECUR (TREE_OPERAND (t, 0));
18611 tree op1 = RECUR (TREE_OPERAND (t, 1));
18612 tree op2 = RECUR (TREE_OPERAND (t, 2));
18613 RETURN (build_x_vec_perm_expr (input_location, op0, op1, op2,
18614 complain));
18617 case REQUIRES_EXPR:
18618 RETURN (tsubst_requires_expr (t, args, complain, in_decl));
18620 case NON_LVALUE_EXPR:
18621 case VIEW_CONVERT_EXPR:
18622 /* We should only see these for location wrapper nodes, or within
18623 instantiate_non_dependent_expr (when args is NULL_TREE). */
18624 gcc_assert (location_wrapper_p (t) || args == NULL_TREE);
18625 if (location_wrapper_p (t))
18626 RETURN (maybe_wrap_with_location (RECUR (TREE_OPERAND (t, 0)),
18627 EXPR_LOCATION (t)));
18628 /* fallthrough. */
18630 default:
18631 /* Handle Objective-C++ constructs, if appropriate. */
18633 tree subst
18634 = objcp_tsubst_copy_and_build (t, args, complain,
18635 in_decl, /*function_p=*/false);
18636 if (subst)
18637 RETURN (subst);
18639 RETURN (tsubst_copy (t, args, complain, in_decl));
18642 #undef RECUR
18643 #undef RETURN
18644 out:
18645 input_location = loc;
18646 return retval;
18649 /* Verify that the instantiated ARGS are valid. For type arguments,
18650 make sure that the type's linkage is ok. For non-type arguments,
18651 make sure they are constants if they are integral or enumerations.
18652 Emit an error under control of COMPLAIN, and return TRUE on error. */
18654 static bool
18655 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
18657 if (dependent_template_arg_p (t))
18658 return false;
18659 if (ARGUMENT_PACK_P (t))
18661 tree vec = ARGUMENT_PACK_ARGS (t);
18662 int len = TREE_VEC_LENGTH (vec);
18663 bool result = false;
18664 int i;
18666 for (i = 0; i < len; ++i)
18667 if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
18668 result = true;
18669 return result;
18671 else if (TYPE_P (t))
18673 /* [basic.link]: A name with no linkage (notably, the name
18674 of a class or enumeration declared in a local scope)
18675 shall not be used to declare an entity with linkage.
18676 This implies that names with no linkage cannot be used as
18677 template arguments
18679 DR 757 relaxes this restriction for C++0x. */
18680 tree nt = (cxx_dialect > cxx98 ? NULL_TREE
18681 : no_linkage_check (t, /*relaxed_p=*/false));
18683 if (nt)
18685 /* DR 488 makes use of a type with no linkage cause
18686 type deduction to fail. */
18687 if (complain & tf_error)
18689 if (TYPE_UNNAMED_P (nt))
18690 error ("%qT is/uses unnamed type", t);
18691 else
18692 error ("template argument for %qD uses local type %qT",
18693 tmpl, t);
18695 return true;
18697 /* In order to avoid all sorts of complications, we do not
18698 allow variably-modified types as template arguments. */
18699 else if (variably_modified_type_p (t, NULL_TREE))
18701 if (complain & tf_error)
18702 error ("%qT is a variably modified type", t);
18703 return true;
18706 /* Class template and alias template arguments should be OK. */
18707 else if (DECL_TYPE_TEMPLATE_P (t))
18709 /* A non-type argument of integral or enumerated type must be a
18710 constant. */
18711 else if (TREE_TYPE (t)
18712 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
18713 && !REFERENCE_REF_P (t)
18714 && !TREE_CONSTANT (t))
18716 if (complain & tf_error)
18717 error ("integral expression %qE is not constant", t);
18718 return true;
18720 return false;
18723 static bool
18724 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
18726 int ix, len = DECL_NTPARMS (tmpl);
18727 bool result = false;
18729 for (ix = 0; ix != len; ix++)
18731 if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
18732 result = true;
18734 if (result && (complain & tf_error))
18735 error (" trying to instantiate %qD", tmpl);
18736 return result;
18739 /* We're out of SFINAE context now, so generate diagnostics for the access
18740 errors we saw earlier when instantiating D from TMPL and ARGS. */
18742 static void
18743 recheck_decl_substitution (tree d, tree tmpl, tree args)
18745 tree pattern = DECL_TEMPLATE_RESULT (tmpl);
18746 tree type = TREE_TYPE (pattern);
18747 location_t loc = input_location;
18749 push_access_scope (d);
18750 push_deferring_access_checks (dk_no_deferred);
18751 input_location = DECL_SOURCE_LOCATION (pattern);
18752 tsubst (type, args, tf_warning_or_error, d);
18753 input_location = loc;
18754 pop_deferring_access_checks ();
18755 pop_access_scope (d);
18758 /* Instantiate the indicated variable, function, or alias template TMPL with
18759 the template arguments in TARG_PTR. */
18761 static tree
18762 instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain)
18764 tree targ_ptr = orig_args;
18765 tree fndecl;
18766 tree gen_tmpl;
18767 tree spec;
18768 bool access_ok = true;
18770 if (tmpl == error_mark_node)
18771 return error_mark_node;
18773 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
18775 /* If this function is a clone, handle it specially. */
18776 if (DECL_CLONED_FUNCTION_P (tmpl))
18778 tree spec;
18779 tree clone;
18781 /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
18782 DECL_CLONED_FUNCTION. */
18783 spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
18784 targ_ptr, complain);
18785 if (spec == error_mark_node)
18786 return error_mark_node;
18788 /* Look for the clone. */
18789 FOR_EACH_CLONE (clone, spec)
18790 if (DECL_NAME (clone) == DECL_NAME (tmpl))
18791 return clone;
18792 /* We should always have found the clone by now. */
18793 gcc_unreachable ();
18794 return NULL_TREE;
18797 if (targ_ptr == error_mark_node)
18798 return error_mark_node;
18800 /* Check to see if we already have this specialization. */
18801 gen_tmpl = most_general_template (tmpl);
18802 if (TMPL_ARGS_DEPTH (targ_ptr)
18803 < TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl)))
18804 /* targ_ptr only has the innermost template args, so add the outer ones
18805 from tmpl, which could be either a partial instantiation or gen_tmpl (in
18806 the case of a non-dependent call within a template definition). */
18807 targ_ptr = (add_outermost_template_args
18808 (DECL_TI_ARGS (DECL_TEMPLATE_RESULT (tmpl)),
18809 targ_ptr));
18811 /* It would be nice to avoid hashing here and then again in tsubst_decl,
18812 but it doesn't seem to be on the hot path. */
18813 spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
18815 gcc_assert (tmpl == gen_tmpl
18816 || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
18817 == spec)
18818 || fndecl == NULL_TREE);
18820 if (spec != NULL_TREE)
18822 if (FNDECL_HAS_ACCESS_ERRORS (spec))
18824 if (complain & tf_error)
18825 recheck_decl_substitution (spec, gen_tmpl, targ_ptr);
18826 return error_mark_node;
18828 return spec;
18831 if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
18832 complain))
18833 return error_mark_node;
18835 /* We are building a FUNCTION_DECL, during which the access of its
18836 parameters and return types have to be checked. However this
18837 FUNCTION_DECL which is the desired context for access checking
18838 is not built yet. We solve this chicken-and-egg problem by
18839 deferring all checks until we have the FUNCTION_DECL. */
18840 push_deferring_access_checks (dk_deferred);
18842 /* Instantiation of the function happens in the context of the function
18843 template, not the context of the overload resolution we're doing. */
18844 push_to_top_level ();
18845 /* If there are dependent arguments, e.g. because we're doing partial
18846 ordering, make sure processing_template_decl stays set. */
18847 if (uses_template_parms (targ_ptr))
18848 ++processing_template_decl;
18849 if (DECL_CLASS_SCOPE_P (gen_tmpl))
18851 tree ctx = tsubst_aggr_type (DECL_CONTEXT (gen_tmpl), targ_ptr,
18852 complain, gen_tmpl, true);
18853 push_nested_class (ctx);
18856 tree pattern = DECL_TEMPLATE_RESULT (gen_tmpl);
18858 fndecl = NULL_TREE;
18859 if (VAR_P (pattern))
18861 /* We need to determine if we're using a partial or explicit
18862 specialization now, because the type of the variable could be
18863 different. */
18864 tree tid = lookup_template_variable (gen_tmpl, targ_ptr);
18865 tree elt = most_specialized_partial_spec (tid, complain);
18866 if (elt == error_mark_node)
18867 pattern = error_mark_node;
18868 else if (elt)
18870 tree partial_tmpl = TREE_VALUE (elt);
18871 tree partial_args = TREE_PURPOSE (elt);
18872 tree partial_pat = DECL_TEMPLATE_RESULT (partial_tmpl);
18873 fndecl = tsubst (partial_pat, partial_args, complain, gen_tmpl);
18877 /* Substitute template parameters to obtain the specialization. */
18878 if (fndecl == NULL_TREE)
18879 fndecl = tsubst (pattern, targ_ptr, complain, gen_tmpl);
18880 if (DECL_CLASS_SCOPE_P (gen_tmpl))
18881 pop_nested_class ();
18882 pop_from_top_level ();
18884 if (fndecl == error_mark_node)
18886 pop_deferring_access_checks ();
18887 return error_mark_node;
18890 /* The DECL_TI_TEMPLATE should always be the immediate parent
18891 template, not the most general template. */
18892 DECL_TI_TEMPLATE (fndecl) = tmpl;
18893 DECL_TI_ARGS (fndecl) = targ_ptr;
18895 /* Now we know the specialization, compute access previously
18896 deferred. Do no access control for inheriting constructors,
18897 as we already checked access for the inherited constructor. */
18898 if (!(flag_new_inheriting_ctors
18899 && DECL_INHERITED_CTOR (fndecl)))
18901 push_access_scope (fndecl);
18902 if (!perform_deferred_access_checks (complain))
18903 access_ok = false;
18904 pop_access_scope (fndecl);
18906 pop_deferring_access_checks ();
18908 /* If we've just instantiated the main entry point for a function,
18909 instantiate all the alternate entry points as well. We do this
18910 by cloning the instantiation of the main entry point, not by
18911 instantiating the template clones. */
18912 if (DECL_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (DECL_CHAIN (gen_tmpl)))
18913 clone_function_decl (fndecl, /*update_methods=*/false);
18915 if (!access_ok)
18917 if (!(complain & tf_error))
18919 /* Remember to reinstantiate when we're out of SFINAE so the user
18920 can see the errors. */
18921 FNDECL_HAS_ACCESS_ERRORS (fndecl) = true;
18923 return error_mark_node;
18925 return fndecl;
18928 /* Wrapper for instantiate_template_1. */
18930 tree
18931 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
18933 tree ret;
18934 timevar_push (TV_TEMPLATE_INST);
18935 ret = instantiate_template_1 (tmpl, orig_args, complain);
18936 timevar_pop (TV_TEMPLATE_INST);
18937 return ret;
18940 /* Instantiate the alias template TMPL with ARGS. Also push a template
18941 instantiation level, which instantiate_template doesn't do because
18942 functions and variables have sufficient context established by the
18943 callers. */
18945 static tree
18946 instantiate_alias_template (tree tmpl, tree args, tsubst_flags_t complain)
18948 struct pending_template *old_last_pend = last_pending_template;
18949 struct tinst_level *old_error_tinst = last_error_tinst_level;
18950 if (tmpl == error_mark_node || args == error_mark_node)
18951 return error_mark_node;
18952 tree tinst = build_tree_list (tmpl, args);
18953 if (!push_tinst_level (tinst))
18955 ggc_free (tinst);
18956 return error_mark_node;
18959 args =
18960 coerce_innermost_template_parms (DECL_TEMPLATE_PARMS (tmpl),
18961 args, tmpl, complain,
18962 /*require_all_args=*/true,
18963 /*use_default_args=*/true);
18965 tree r = instantiate_template (tmpl, args, complain);
18966 pop_tinst_level ();
18967 /* We can't free this if a pending_template entry or last_error_tinst_level
18968 is pointing at it. */
18969 if (last_pending_template == old_last_pend
18970 && last_error_tinst_level == old_error_tinst)
18971 ggc_free (tinst);
18973 return r;
18976 /* PARM is a template parameter pack for FN. Returns true iff
18977 PARM is used in a deducible way in the argument list of FN. */
18979 static bool
18980 pack_deducible_p (tree parm, tree fn)
18982 tree t = FUNCTION_FIRST_USER_PARMTYPE (fn);
18983 for (; t; t = TREE_CHAIN (t))
18985 tree type = TREE_VALUE (t);
18986 tree packs;
18987 if (!PACK_EXPANSION_P (type))
18988 continue;
18989 for (packs = PACK_EXPANSION_PARAMETER_PACKS (type);
18990 packs; packs = TREE_CHAIN (packs))
18991 if (template_args_equal (TREE_VALUE (packs), parm))
18993 /* The template parameter pack is used in a function parameter
18994 pack. If this is the end of the parameter list, the
18995 template parameter pack is deducible. */
18996 if (TREE_CHAIN (t) == void_list_node)
18997 return true;
18998 else
18999 /* Otherwise, not. Well, it could be deduced from
19000 a non-pack parameter, but doing so would end up with
19001 a deduction mismatch, so don't bother. */
19002 return false;
19005 /* The template parameter pack isn't used in any function parameter
19006 packs, but it might be used deeper, e.g. tuple<Args...>. */
19007 return true;
19010 /* The FN is a TEMPLATE_DECL for a function. ARGS is an array with
19011 NARGS elements of the arguments that are being used when calling
19012 it. TARGS is a vector into which the deduced template arguments
19013 are placed.
19015 Returns either a FUNCTION_DECL for the matching specialization of FN or
19016 NULL_TREE if no suitable specialization can be found. If EXPLAIN_P is
19017 true, diagnostics will be printed to explain why it failed.
19019 If FN is a conversion operator, or we are trying to produce a specific
19020 specialization, RETURN_TYPE is the return type desired.
19022 The EXPLICIT_TARGS are explicit template arguments provided via a
19023 template-id.
19025 The parameter STRICT is one of:
19027 DEDUCE_CALL:
19028 We are deducing arguments for a function call, as in
19029 [temp.deduct.call]. If RETURN_TYPE is non-null, we are
19030 deducing arguments for a call to the result of a conversion
19031 function template, as in [over.call.object].
19033 DEDUCE_CONV:
19034 We are deducing arguments for a conversion function, as in
19035 [temp.deduct.conv].
19037 DEDUCE_EXACT:
19038 We are deducing arguments when doing an explicit instantiation
19039 as in [temp.explicit], when determining an explicit specialization
19040 as in [temp.expl.spec], or when taking the address of a function
19041 template, as in [temp.deduct.funcaddr]. */
19043 tree
19044 fn_type_unification (tree fn,
19045 tree explicit_targs,
19046 tree targs,
19047 const tree *args,
19048 unsigned int nargs,
19049 tree return_type,
19050 unification_kind_t strict,
19051 int flags,
19052 bool explain_p,
19053 bool decltype_p)
19055 tree parms;
19056 tree fntype;
19057 tree decl = NULL_TREE;
19058 tsubst_flags_t complain = (explain_p ? tf_warning_or_error : tf_none);
19059 bool ok;
19060 static int deduction_depth;
19061 struct pending_template *old_last_pend = last_pending_template;
19062 struct tinst_level *old_error_tinst = last_error_tinst_level;
19064 tree orig_fn = fn;
19065 if (flag_new_inheriting_ctors)
19066 fn = strip_inheriting_ctors (fn);
19068 tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
19069 tree tinst;
19070 tree r = error_mark_node;
19072 tree full_targs = targs;
19073 if (TMPL_ARGS_DEPTH (targs)
19074 < TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (fn)))
19075 full_targs = (add_outermost_template_args
19076 (DECL_TI_ARGS (DECL_TEMPLATE_RESULT (fn)),
19077 targs));
19079 if (decltype_p)
19080 complain |= tf_decltype;
19082 /* In C++0x, it's possible to have a function template whose type depends
19083 on itself recursively. This is most obvious with decltype, but can also
19084 occur with enumeration scope (c++/48969). So we need to catch infinite
19085 recursion and reject the substitution at deduction time; this function
19086 will return error_mark_node for any repeated substitution.
19088 This also catches excessive recursion such as when f<N> depends on
19089 f<N-1> across all integers, and returns error_mark_node for all the
19090 substitutions back up to the initial one.
19092 This is, of course, not reentrant. */
19093 if (excessive_deduction_depth)
19094 return error_mark_node;
19095 tinst = build_tree_list (fn, NULL_TREE);
19096 ++deduction_depth;
19098 gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
19100 fntype = TREE_TYPE (fn);
19101 if (explicit_targs)
19103 /* [temp.deduct]
19105 The specified template arguments must match the template
19106 parameters in kind (i.e., type, nontype, template), and there
19107 must not be more arguments than there are parameters;
19108 otherwise type deduction fails.
19110 Nontype arguments must match the types of the corresponding
19111 nontype template parameters, or must be convertible to the
19112 types of the corresponding nontype parameters as specified in
19113 _temp.arg.nontype_, otherwise type deduction fails.
19115 All references in the function type of the function template
19116 to the corresponding template parameters are replaced by the
19117 specified template argument values. If a substitution in a
19118 template parameter or in the function type of the function
19119 template results in an invalid type, type deduction fails. */
19120 int i, len = TREE_VEC_LENGTH (tparms);
19121 location_t loc = input_location;
19122 bool incomplete = false;
19124 if (explicit_targs == error_mark_node)
19125 goto fail;
19127 if (TMPL_ARGS_DEPTH (explicit_targs)
19128 < TMPL_ARGS_DEPTH (full_targs))
19129 explicit_targs = add_outermost_template_args (full_targs,
19130 explicit_targs);
19132 /* Adjust any explicit template arguments before entering the
19133 substitution context. */
19134 explicit_targs
19135 = (coerce_template_parms (tparms, explicit_targs, NULL_TREE,
19136 complain,
19137 /*require_all_args=*/false,
19138 /*use_default_args=*/false));
19139 if (explicit_targs == error_mark_node)
19140 goto fail;
19142 /* Substitute the explicit args into the function type. This is
19143 necessary so that, for instance, explicitly declared function
19144 arguments can match null pointed constants. If we were given
19145 an incomplete set of explicit args, we must not do semantic
19146 processing during substitution as we could create partial
19147 instantiations. */
19148 for (i = 0; i < len; i++)
19150 tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
19151 bool parameter_pack = false;
19152 tree targ = TREE_VEC_ELT (explicit_targs, i);
19154 /* Dig out the actual parm. */
19155 if (TREE_CODE (parm) == TYPE_DECL
19156 || TREE_CODE (parm) == TEMPLATE_DECL)
19158 parm = TREE_TYPE (parm);
19159 parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
19161 else if (TREE_CODE (parm) == PARM_DECL)
19163 parm = DECL_INITIAL (parm);
19164 parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
19167 if (!parameter_pack && targ == NULL_TREE)
19168 /* No explicit argument for this template parameter. */
19169 incomplete = true;
19171 if (parameter_pack && pack_deducible_p (parm, fn))
19173 /* Mark the argument pack as "incomplete". We could
19174 still deduce more arguments during unification.
19175 We remove this mark in type_unification_real. */
19176 if (targ)
19178 ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
19179 ARGUMENT_PACK_EXPLICIT_ARGS (targ)
19180 = ARGUMENT_PACK_ARGS (targ);
19183 /* We have some incomplete argument packs. */
19184 incomplete = true;
19188 TREE_VALUE (tinst) = explicit_targs;
19189 if (!push_tinst_level (tinst))
19191 excessive_deduction_depth = true;
19192 goto fail;
19194 processing_template_decl += incomplete;
19195 input_location = DECL_SOURCE_LOCATION (fn);
19196 /* Ignore any access checks; we'll see them again in
19197 instantiate_template and they might have the wrong
19198 access path at this point. */
19199 push_deferring_access_checks (dk_deferred);
19200 fntype = tsubst (TREE_TYPE (fn), explicit_targs,
19201 complain | tf_partial | tf_fndecl_type, NULL_TREE);
19202 pop_deferring_access_checks ();
19203 input_location = loc;
19204 processing_template_decl -= incomplete;
19205 pop_tinst_level ();
19207 if (fntype == error_mark_node)
19208 goto fail;
19210 /* Place the explicitly specified arguments in TARGS. */
19211 explicit_targs = INNERMOST_TEMPLATE_ARGS (explicit_targs);
19212 for (i = NUM_TMPL_ARGS (explicit_targs); i--;)
19213 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (explicit_targs, i);
19216 /* Never do unification on the 'this' parameter. */
19217 parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
19219 if (return_type && strict == DEDUCE_CALL)
19221 /* We're deducing for a call to the result of a template conversion
19222 function. The parms we really want are in return_type. */
19223 if (POINTER_TYPE_P (return_type))
19224 return_type = TREE_TYPE (return_type);
19225 parms = TYPE_ARG_TYPES (return_type);
19227 else if (return_type)
19229 tree *new_args;
19231 parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
19232 new_args = XALLOCAVEC (tree, nargs + 1);
19233 new_args[0] = return_type;
19234 memcpy (new_args + 1, args, nargs * sizeof (tree));
19235 args = new_args;
19236 ++nargs;
19239 /* We allow incomplete unification without an error message here
19240 because the standard doesn't seem to explicitly prohibit it. Our
19241 callers must be ready to deal with unification failures in any
19242 event. */
19244 TREE_VALUE (tinst) = targs;
19245 /* If we aren't explaining yet, push tinst context so we can see where
19246 any errors (e.g. from class instantiations triggered by instantiation
19247 of default template arguments) come from. If we are explaining, this
19248 context is redundant. */
19249 if (!explain_p && !push_tinst_level (tinst))
19251 excessive_deduction_depth = true;
19252 goto fail;
19255 /* type_unification_real will pass back any access checks from default
19256 template argument substitution. */
19257 vec<deferred_access_check, va_gc> *checks;
19258 checks = NULL;
19260 ok = !type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
19261 full_targs, parms, args, nargs, /*subr=*/0,
19262 strict, flags, &checks, explain_p);
19263 if (!explain_p)
19264 pop_tinst_level ();
19265 if (!ok)
19266 goto fail;
19268 /* Now that we have bindings for all of the template arguments,
19269 ensure that the arguments deduced for the template template
19270 parameters have compatible template parameter lists. We cannot
19271 check this property before we have deduced all template
19272 arguments, because the template parameter types of a template
19273 template parameter might depend on prior template parameters
19274 deduced after the template template parameter. The following
19275 ill-formed example illustrates this issue:
19277 template<typename T, template<T> class C> void f(C<5>, T);
19279 template<int N> struct X {};
19281 void g() {
19282 f(X<5>(), 5l); // error: template argument deduction fails
19285 The template parameter list of 'C' depends on the template type
19286 parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
19287 'long'. Thus, we can't check that 'C' cannot bind to 'X' at the
19288 time that we deduce 'C'. */
19289 if (!template_template_parm_bindings_ok_p
19290 (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
19292 unify_inconsistent_template_template_parameters (explain_p);
19293 goto fail;
19296 /* All is well so far. Now, check:
19298 [temp.deduct]
19300 When all template arguments have been deduced, all uses of
19301 template parameters in nondeduced contexts are replaced with
19302 the corresponding deduced argument values. If the
19303 substitution results in an invalid type, as described above,
19304 type deduction fails. */
19305 TREE_VALUE (tinst) = targs;
19306 if (!push_tinst_level (tinst))
19308 excessive_deduction_depth = true;
19309 goto fail;
19312 /* Also collect access checks from the instantiation. */
19313 reopen_deferring_access_checks (checks);
19315 decl = instantiate_template (fn, targs, complain);
19317 checks = get_deferred_access_checks ();
19318 pop_deferring_access_checks ();
19320 pop_tinst_level ();
19322 if (decl == error_mark_node)
19323 goto fail;
19325 /* Now perform any access checks encountered during substitution. */
19326 push_access_scope (decl);
19327 ok = perform_access_checks (checks, complain);
19328 pop_access_scope (decl);
19329 if (!ok)
19330 goto fail;
19332 /* If we're looking for an exact match, check that what we got
19333 is indeed an exact match. It might not be if some template
19334 parameters are used in non-deduced contexts. But don't check
19335 for an exact match if we have dependent template arguments;
19336 in that case we're doing partial ordering, and we already know
19337 that we have two candidates that will provide the actual type. */
19338 if (strict == DEDUCE_EXACT && !any_dependent_template_arguments_p (targs))
19340 tree substed = TREE_TYPE (decl);
19341 unsigned int i;
19343 tree sarg
19344 = skip_artificial_parms_for (decl, TYPE_ARG_TYPES (substed));
19345 if (return_type)
19346 sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
19347 for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
19348 if (!same_type_p (args[i], TREE_VALUE (sarg)))
19350 unify_type_mismatch (explain_p, args[i],
19351 TREE_VALUE (sarg));
19352 goto fail;
19356 /* After doing deduction with the inherited constructor, actually return an
19357 instantiation of the inheriting constructor. */
19358 if (orig_fn != fn)
19359 decl = instantiate_template (orig_fn, targs, complain);
19361 r = decl;
19363 fail:
19364 --deduction_depth;
19365 if (excessive_deduction_depth)
19367 if (deduction_depth == 0)
19368 /* Reset once we're all the way out. */
19369 excessive_deduction_depth = false;
19372 /* We can't free this if a pending_template entry or last_error_tinst_level
19373 is pointing at it. */
19374 if (last_pending_template == old_last_pend
19375 && last_error_tinst_level == old_error_tinst)
19376 ggc_free (tinst);
19378 return r;
19381 /* Adjust types before performing type deduction, as described in
19382 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
19383 sections are symmetric. PARM is the type of a function parameter
19384 or the return type of the conversion function. ARG is the type of
19385 the argument passed to the call, or the type of the value
19386 initialized with the result of the conversion function.
19387 ARG_EXPR is the original argument expression, which may be null. */
19389 static int
19390 maybe_adjust_types_for_deduction (unification_kind_t strict,
19391 tree* parm,
19392 tree* arg,
19393 tree arg_expr)
19395 int result = 0;
19397 switch (strict)
19399 case DEDUCE_CALL:
19400 break;
19402 case DEDUCE_CONV:
19403 /* Swap PARM and ARG throughout the remainder of this
19404 function; the handling is precisely symmetric since PARM
19405 will initialize ARG rather than vice versa. */
19406 std::swap (parm, arg);
19407 break;
19409 case DEDUCE_EXACT:
19410 /* Core issue #873: Do the DR606 thing (see below) for these cases,
19411 too, but here handle it by stripping the reference from PARM
19412 rather than by adding it to ARG. */
19413 if (TREE_CODE (*parm) == REFERENCE_TYPE
19414 && TYPE_REF_IS_RVALUE (*parm)
19415 && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
19416 && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
19417 && TREE_CODE (*arg) == REFERENCE_TYPE
19418 && !TYPE_REF_IS_RVALUE (*arg))
19419 *parm = TREE_TYPE (*parm);
19420 /* Nothing else to do in this case. */
19421 return 0;
19423 default:
19424 gcc_unreachable ();
19427 if (TREE_CODE (*parm) != REFERENCE_TYPE)
19429 /* [temp.deduct.call]
19431 If P is not a reference type:
19433 --If A is an array type, the pointer type produced by the
19434 array-to-pointer standard conversion (_conv.array_) is
19435 used in place of A for type deduction; otherwise,
19437 --If A is a function type, the pointer type produced by
19438 the function-to-pointer standard conversion
19439 (_conv.func_) is used in place of A for type deduction;
19440 otherwise,
19442 --If A is a cv-qualified type, the top level
19443 cv-qualifiers of A's type are ignored for type
19444 deduction. */
19445 if (TREE_CODE (*arg) == ARRAY_TYPE)
19446 *arg = build_pointer_type (TREE_TYPE (*arg));
19447 else if (TREE_CODE (*arg) == FUNCTION_TYPE)
19448 *arg = build_pointer_type (*arg);
19449 else
19450 *arg = TYPE_MAIN_VARIANT (*arg);
19453 /* [14.8.2.1/3 temp.deduct.call], "A forwarding reference is an rvalue
19454 reference to a cv-unqualified template parameter that does not represent a
19455 template parameter of a class template (during class template argument
19456 deduction (13.3.1.8)). If P is a forwarding reference and the argument is
19457 an lvalue, the type "lvalue reference to A" is used in place of A for type
19458 deduction. */
19459 if (TREE_CODE (*parm) == REFERENCE_TYPE
19460 && TYPE_REF_IS_RVALUE (*parm)
19461 && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
19462 && !TEMPLATE_TYPE_PARM_FOR_CLASS (TREE_TYPE (*parm))
19463 && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
19464 && (arg_expr ? lvalue_p (arg_expr)
19465 /* try_one_overload doesn't provide an arg_expr, but
19466 functions are always lvalues. */
19467 : TREE_CODE (*arg) == FUNCTION_TYPE))
19468 *arg = build_reference_type (*arg);
19470 /* [temp.deduct.call]
19472 If P is a cv-qualified type, the top level cv-qualifiers
19473 of P's type are ignored for type deduction. If P is a
19474 reference type, the type referred to by P is used for
19475 type deduction. */
19476 *parm = TYPE_MAIN_VARIANT (*parm);
19477 if (TREE_CODE (*parm) == REFERENCE_TYPE)
19479 *parm = TREE_TYPE (*parm);
19480 result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
19483 /* DR 322. For conversion deduction, remove a reference type on parm
19484 too (which has been swapped into ARG). */
19485 if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
19486 *arg = TREE_TYPE (*arg);
19488 return result;
19491 /* Subroutine of unify_one_argument. PARM is a function parameter of a
19492 template which does contain any deducible template parameters; check if
19493 ARG is a suitable match for it. STRICT, FLAGS and EXPLAIN_P are as in
19494 unify_one_argument. */
19496 static int
19497 check_non_deducible_conversion (tree parm, tree arg, int strict,
19498 int flags, bool explain_p)
19500 tree type;
19502 if (!TYPE_P (arg))
19503 type = TREE_TYPE (arg);
19504 else
19505 type = arg;
19507 if (same_type_p (parm, type))
19508 return unify_success (explain_p);
19510 if (strict == DEDUCE_CONV)
19512 if (can_convert_arg (type, parm, NULL_TREE, flags,
19513 explain_p ? tf_warning_or_error : tf_none))
19514 return unify_success (explain_p);
19516 else if (strict != DEDUCE_EXACT)
19518 if (can_convert_arg (parm, type,
19519 TYPE_P (arg) ? NULL_TREE : arg,
19520 flags, explain_p ? tf_warning_or_error : tf_none))
19521 return unify_success (explain_p);
19524 if (strict == DEDUCE_EXACT)
19525 return unify_type_mismatch (explain_p, parm, arg);
19526 else
19527 return unify_arg_conversion (explain_p, parm, type, arg);
19530 static bool uses_deducible_template_parms (tree type);
19532 /* Returns true iff the expression EXPR is one from which a template
19533 argument can be deduced. In other words, if it's an undecorated
19534 use of a template non-type parameter. */
19536 static bool
19537 deducible_expression (tree expr)
19539 /* Strip implicit conversions. */
19540 while (CONVERT_EXPR_P (expr))
19541 expr = TREE_OPERAND (expr, 0);
19542 return (TREE_CODE (expr) == TEMPLATE_PARM_INDEX);
19545 /* Returns true iff the array domain DOMAIN uses a template parameter in a
19546 deducible way; that is, if it has a max value of <PARM> - 1. */
19548 static bool
19549 deducible_array_bound (tree domain)
19551 if (domain == NULL_TREE)
19552 return false;
19554 tree max = TYPE_MAX_VALUE (domain);
19555 if (TREE_CODE (max) != MINUS_EXPR)
19556 return false;
19558 return deducible_expression (TREE_OPERAND (max, 0));
19561 /* Returns true iff the template arguments ARGS use a template parameter
19562 in a deducible way. */
19564 static bool
19565 deducible_template_args (tree args)
19567 for (int i = 0; i < TREE_VEC_LENGTH (args); ++i)
19569 bool deducible;
19570 tree elt = TREE_VEC_ELT (args, i);
19571 if (ARGUMENT_PACK_P (elt))
19572 deducible = deducible_template_args (ARGUMENT_PACK_ARGS (elt));
19573 else
19575 if (PACK_EXPANSION_P (elt))
19576 elt = PACK_EXPANSION_PATTERN (elt);
19577 if (TREE_CODE (elt) == TEMPLATE_TEMPLATE_PARM)
19578 deducible = true;
19579 else if (TYPE_P (elt))
19580 deducible = uses_deducible_template_parms (elt);
19581 else
19582 deducible = deducible_expression (elt);
19584 if (deducible)
19585 return true;
19587 return false;
19590 /* Returns true iff TYPE contains any deducible references to template
19591 parameters, as per 14.8.2.5. */
19593 static bool
19594 uses_deducible_template_parms (tree type)
19596 if (PACK_EXPANSION_P (type))
19597 type = PACK_EXPANSION_PATTERN (type);
19599 /* T
19600 cv-list T
19601 TT<T>
19602 TT<i>
19603 TT<> */
19604 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
19605 || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
19606 return true;
19608 /* T*
19610 T&& */
19611 if (POINTER_TYPE_P (type))
19612 return uses_deducible_template_parms (TREE_TYPE (type));
19614 /* T[integer-constant ]
19615 type [i] */
19616 if (TREE_CODE (type) == ARRAY_TYPE)
19617 return (uses_deducible_template_parms (TREE_TYPE (type))
19618 || deducible_array_bound (TYPE_DOMAIN (type)));
19620 /* T type ::*
19621 type T::*
19622 T T::*
19623 T (type ::*)()
19624 type (T::*)()
19625 type (type ::*)(T)
19626 type (T::*)(T)
19627 T (type ::*)(T)
19628 T (T::*)()
19629 T (T::*)(T) */
19630 if (TYPE_PTRMEM_P (type))
19631 return (uses_deducible_template_parms (TYPE_PTRMEM_CLASS_TYPE (type))
19632 || (uses_deducible_template_parms
19633 (TYPE_PTRMEM_POINTED_TO_TYPE (type))));
19635 /* template-name <T> (where template-name refers to a class template)
19636 template-name <i> (where template-name refers to a class template) */
19637 if (CLASS_TYPE_P (type)
19638 && CLASSTYPE_TEMPLATE_INFO (type)
19639 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type)))
19640 return deducible_template_args (INNERMOST_TEMPLATE_ARGS
19641 (CLASSTYPE_TI_ARGS (type)));
19643 /* type (T)
19645 T(T) */
19646 if (TREE_CODE (type) == FUNCTION_TYPE
19647 || TREE_CODE (type) == METHOD_TYPE)
19649 if (uses_deducible_template_parms (TREE_TYPE (type)))
19650 return true;
19651 tree parm = TYPE_ARG_TYPES (type);
19652 if (TREE_CODE (type) == METHOD_TYPE)
19653 parm = TREE_CHAIN (parm);
19654 for (; parm; parm = TREE_CHAIN (parm))
19655 if (uses_deducible_template_parms (TREE_VALUE (parm)))
19656 return true;
19659 return false;
19662 /* Subroutine of type_unification_real and unify_pack_expansion to
19663 handle unification of a single P/A pair. Parameters are as
19664 for those functions. */
19666 static int
19667 unify_one_argument (tree tparms, tree targs, tree parm, tree arg,
19668 int subr, unification_kind_t strict,
19669 bool explain_p)
19671 tree arg_expr = NULL_TREE;
19672 int arg_strict;
19674 if (arg == error_mark_node || parm == error_mark_node)
19675 return unify_invalid (explain_p);
19676 if (arg == unknown_type_node)
19677 /* We can't deduce anything from this, but we might get all the
19678 template args from other function args. */
19679 return unify_success (explain_p);
19681 /* Implicit conversions (Clause 4) will be performed on a function
19682 argument to convert it to the type of the corresponding function
19683 parameter if the parameter type contains no template-parameters that
19684 participate in template argument deduction. */
19685 if (strict != DEDUCE_EXACT
19686 && TYPE_P (parm) && !uses_deducible_template_parms (parm))
19687 /* For function parameters with no deducible template parameters,
19688 just return. We'll check non-dependent conversions later. */
19689 return unify_success (explain_p);
19691 switch (strict)
19693 case DEDUCE_CALL:
19694 arg_strict = (UNIFY_ALLOW_OUTER_LEVEL
19695 | UNIFY_ALLOW_MORE_CV_QUAL
19696 | UNIFY_ALLOW_DERIVED);
19697 break;
19699 case DEDUCE_CONV:
19700 arg_strict = UNIFY_ALLOW_LESS_CV_QUAL;
19701 break;
19703 case DEDUCE_EXACT:
19704 arg_strict = UNIFY_ALLOW_NONE;
19705 break;
19707 default:
19708 gcc_unreachable ();
19711 /* We only do these transformations if this is the top-level
19712 parameter_type_list in a call or declaration matching; in other
19713 situations (nested function declarators, template argument lists) we
19714 won't be comparing a type to an expression, and we don't do any type
19715 adjustments. */
19716 if (!subr)
19718 if (!TYPE_P (arg))
19720 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
19721 if (type_unknown_p (arg))
19723 /* [temp.deduct.type] A template-argument can be
19724 deduced from a pointer to function or pointer
19725 to member function argument if the set of
19726 overloaded functions does not contain function
19727 templates and at most one of a set of
19728 overloaded functions provides a unique
19729 match. */
19730 resolve_overloaded_unification (tparms, targs, parm,
19731 arg, strict,
19732 arg_strict, explain_p);
19733 /* If a unique match was not found, this is a
19734 non-deduced context, so we still succeed. */
19735 return unify_success (explain_p);
19738 arg_expr = arg;
19739 arg = unlowered_expr_type (arg);
19740 if (arg == error_mark_node)
19741 return unify_invalid (explain_p);
19744 arg_strict |=
19745 maybe_adjust_types_for_deduction (strict, &parm, &arg, arg_expr);
19747 else
19748 if ((TYPE_P (parm) || TREE_CODE (parm) == TEMPLATE_DECL)
19749 != (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL))
19750 return unify_template_argument_mismatch (explain_p, parm, arg);
19752 /* For deduction from an init-list we need the actual list. */
19753 if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
19754 arg = arg_expr;
19755 return unify (tparms, targs, parm, arg, arg_strict, explain_p);
19758 /* for_each_template_parm callback that always returns 0. */
19760 static int
19761 zero_r (tree, void *)
19763 return 0;
19766 /* for_each_template_parm any_fn callback to handle deduction of a template
19767 type argument from the type of an array bound. */
19769 static int
19770 array_deduction_r (tree t, void *data)
19772 tree_pair_p d = (tree_pair_p)data;
19773 tree &tparms = d->purpose;
19774 tree &targs = d->value;
19776 if (TREE_CODE (t) == ARRAY_TYPE)
19777 if (tree dom = TYPE_DOMAIN (t))
19778 if (tree max = TYPE_MAX_VALUE (dom))
19780 if (TREE_CODE (max) == MINUS_EXPR)
19781 max = TREE_OPERAND (max, 0);
19782 if (TREE_CODE (max) == TEMPLATE_PARM_INDEX)
19783 unify (tparms, targs, TREE_TYPE (max), size_type_node,
19784 UNIFY_ALLOW_NONE, /*explain*/false);
19787 /* Keep walking. */
19788 return 0;
19791 /* Try to deduce any not-yet-deduced template type arguments from the type of
19792 an array bound. This is handled separately from unify because 14.8.2.5 says
19793 "The type of a type parameter is only deduced from an array bound if it is
19794 not otherwise deduced." */
19796 static void
19797 try_array_deduction (tree tparms, tree targs, tree parm)
19799 tree_pair_s data = { tparms, targs };
19800 hash_set<tree> visited;
19801 for_each_template_parm (parm, zero_r, &data, &visited,
19802 /*nondeduced*/false, array_deduction_r);
19805 /* Most parms like fn_type_unification.
19807 If SUBR is 1, we're being called recursively (to unify the
19808 arguments of a function or method parameter of a function
19809 template).
19811 CHECKS is a pointer to a vector of access checks encountered while
19812 substituting default template arguments. */
19814 static int
19815 type_unification_real (tree tparms,
19816 tree full_targs,
19817 tree xparms,
19818 const tree *xargs,
19819 unsigned int xnargs,
19820 int subr,
19821 unification_kind_t strict,
19822 int flags,
19823 vec<deferred_access_check, va_gc> **checks,
19824 bool explain_p)
19826 tree parm, arg;
19827 int i;
19828 int ntparms = TREE_VEC_LENGTH (tparms);
19829 int saw_undeduced = 0;
19830 tree parms;
19831 const tree *args;
19832 unsigned int nargs;
19833 unsigned int ia;
19835 gcc_assert (TREE_CODE (tparms) == TREE_VEC);
19836 gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
19837 gcc_assert (ntparms > 0);
19839 tree targs = INNERMOST_TEMPLATE_ARGS (full_targs);
19841 /* Reset the number of non-defaulted template arguments contained
19842 in TARGS. */
19843 NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
19845 again:
19846 parms = xparms;
19847 args = xargs;
19848 nargs = xnargs;
19850 ia = 0;
19851 while (parms && parms != void_list_node
19852 && ia < nargs)
19854 parm = TREE_VALUE (parms);
19856 if (TREE_CODE (parm) == TYPE_PACK_EXPANSION
19857 && (!TREE_CHAIN (parms) || TREE_CHAIN (parms) == void_list_node))
19858 /* For a function parameter pack that occurs at the end of the
19859 parameter-declaration-list, the type A of each remaining
19860 argument of the call is compared with the type P of the
19861 declarator-id of the function parameter pack. */
19862 break;
19864 parms = TREE_CHAIN (parms);
19866 if (TREE_CODE (parm) == TYPE_PACK_EXPANSION)
19867 /* For a function parameter pack that does not occur at the
19868 end of the parameter-declaration-list, the type of the
19869 parameter pack is a non-deduced context. */
19870 continue;
19872 arg = args[ia];
19873 ++ia;
19875 if (unify_one_argument (tparms, full_targs, parm, arg, subr, strict,
19876 explain_p))
19877 return 1;
19880 if (parms
19881 && parms != void_list_node
19882 && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
19884 /* Unify the remaining arguments with the pack expansion type. */
19885 tree argvec;
19886 tree parmvec = make_tree_vec (1);
19888 /* Allocate a TREE_VEC and copy in all of the arguments */
19889 argvec = make_tree_vec (nargs - ia);
19890 for (i = 0; ia < nargs; ++ia, ++i)
19891 TREE_VEC_ELT (argvec, i) = args[ia];
19893 /* Copy the parameter into parmvec. */
19894 TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
19895 if (unify_pack_expansion (tparms, full_targs, parmvec, argvec, strict,
19896 /*subr=*/subr, explain_p))
19897 return 1;
19899 /* Advance to the end of the list of parameters. */
19900 parms = TREE_CHAIN (parms);
19903 /* Fail if we've reached the end of the parm list, and more args
19904 are present, and the parm list isn't variadic. */
19905 if (ia < nargs && parms == void_list_node)
19906 return unify_too_many_arguments (explain_p, nargs, ia);
19907 /* Fail if parms are left and they don't have default values and
19908 they aren't all deduced as empty packs (c++/57397). This is
19909 consistent with sufficient_parms_p. */
19910 if (parms && parms != void_list_node
19911 && TREE_PURPOSE (parms) == NULL_TREE)
19913 unsigned int count = nargs;
19914 tree p = parms;
19915 bool type_pack_p;
19918 type_pack_p = TREE_CODE (TREE_VALUE (p)) == TYPE_PACK_EXPANSION;
19919 if (!type_pack_p)
19920 count++;
19921 p = TREE_CHAIN (p);
19923 while (p && p != void_list_node);
19924 if (count != nargs)
19925 return unify_too_few_arguments (explain_p, ia, count,
19926 type_pack_p);
19929 if (!subr)
19931 tsubst_flags_t complain = (explain_p
19932 ? tf_warning_or_error
19933 : tf_none);
19934 bool tried_array_deduction = (cxx_dialect < cxx17);
19936 for (i = 0; i < ntparms; i++)
19938 tree targ = TREE_VEC_ELT (targs, i);
19939 tree tparm = TREE_VEC_ELT (tparms, i);
19941 /* Clear the "incomplete" flags on all argument packs now so that
19942 substituting them into later default arguments works. */
19943 if (targ && ARGUMENT_PACK_P (targ))
19945 ARGUMENT_PACK_INCOMPLETE_P (targ) = 0;
19946 ARGUMENT_PACK_EXPLICIT_ARGS (targ) = NULL_TREE;
19949 if (targ || tparm == error_mark_node)
19950 continue;
19951 tparm = TREE_VALUE (tparm);
19953 if (TREE_CODE (tparm) == TYPE_DECL
19954 && !tried_array_deduction)
19956 try_array_deduction (tparms, targs, xparms);
19957 tried_array_deduction = true;
19958 if (TREE_VEC_ELT (targs, i))
19959 continue;
19962 /* If this is an undeduced nontype parameter that depends on
19963 a type parameter, try another pass; its type may have been
19964 deduced from a later argument than the one from which
19965 this parameter can be deduced. */
19966 if (TREE_CODE (tparm) == PARM_DECL
19967 && uses_template_parms (TREE_TYPE (tparm))
19968 && saw_undeduced < 2)
19970 saw_undeduced = 1;
19971 continue;
19974 /* Core issue #226 (C++0x) [temp.deduct]:
19976 If a template argument has not been deduced, its
19977 default template argument, if any, is used.
19979 When we are in C++98 mode, TREE_PURPOSE will either
19980 be NULL_TREE or ERROR_MARK_NODE, so we do not need
19981 to explicitly check cxx_dialect here. */
19982 if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
19983 /* OK, there is a default argument. Wait until after the
19984 conversion check to do substitution. */
19985 continue;
19987 /* If the type parameter is a parameter pack, then it will
19988 be deduced to an empty parameter pack. */
19989 if (template_parameter_pack_p (tparm))
19991 tree arg;
19993 if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
19995 arg = make_node (NONTYPE_ARGUMENT_PACK);
19996 TREE_CONSTANT (arg) = 1;
19998 else
19999 arg = cxx_make_type (TYPE_ARGUMENT_PACK);
20001 SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
20003 TREE_VEC_ELT (targs, i) = arg;
20004 continue;
20007 return unify_parameter_deduction_failure (explain_p, tparm);
20010 /* DR 1391: All parameters have args, now check non-dependent parms for
20011 convertibility. */
20012 if (saw_undeduced < 2)
20013 for (ia = 0, parms = xparms, args = xargs, nargs = xnargs;
20014 parms && parms != void_list_node && ia < nargs; )
20016 parm = TREE_VALUE (parms);
20018 if (TREE_CODE (parm) == TYPE_PACK_EXPANSION
20019 && (!TREE_CHAIN (parms)
20020 || TREE_CHAIN (parms) == void_list_node))
20021 /* For a function parameter pack that occurs at the end of the
20022 parameter-declaration-list, the type A of each remaining
20023 argument of the call is compared with the type P of the
20024 declarator-id of the function parameter pack. */
20025 break;
20027 parms = TREE_CHAIN (parms);
20029 if (TREE_CODE (parm) == TYPE_PACK_EXPANSION)
20030 /* For a function parameter pack that does not occur at the
20031 end of the parameter-declaration-list, the type of the
20032 parameter pack is a non-deduced context. */
20033 continue;
20035 arg = args[ia];
20036 ++ia;
20038 if (uses_template_parms (parm))
20039 continue;
20040 if (check_non_deducible_conversion (parm, arg, strict, flags,
20041 explain_p))
20042 return 1;
20045 /* Now substitute into the default template arguments. */
20046 for (i = 0; i < ntparms; i++)
20048 tree targ = TREE_VEC_ELT (targs, i);
20049 tree tparm = TREE_VEC_ELT (tparms, i);
20051 if (targ || tparm == error_mark_node)
20052 continue;
20053 tree parm = TREE_VALUE (tparm);
20054 tree arg = TREE_PURPOSE (tparm);
20055 reopen_deferring_access_checks (*checks);
20056 location_t save_loc = input_location;
20057 if (DECL_P (parm))
20058 input_location = DECL_SOURCE_LOCATION (parm);
20059 if (saw_undeduced == 1)
20060 ++processing_template_decl;
20062 if (saw_undeduced == 1
20063 && TREE_CODE (parm) == PARM_DECL
20064 && uses_template_parms (TREE_TYPE (parm)))
20066 /* The type of this non-type parameter depends on undeduced
20067 parameters. Don't try to use its default argument yet,
20068 but do check whether the arguments we already have cause
20069 substitution failure, so that that happens before we try
20070 later default arguments (78489). */
20071 tree type = tsubst (TREE_TYPE (parm), full_targs, complain,
20072 NULL_TREE);
20073 if (type == error_mark_node)
20074 arg = error_mark_node;
20075 else
20076 arg = NULL_TREE;
20078 else
20080 arg = tsubst_template_arg (arg, full_targs, complain, NULL_TREE);
20082 if (!uses_template_parms (arg))
20083 arg = convert_template_argument (parm, arg, full_targs,
20084 complain, i, NULL_TREE);
20085 else if (saw_undeduced == 1)
20086 arg = NULL_TREE;
20087 else
20088 arg = error_mark_node;
20091 if (saw_undeduced == 1)
20092 --processing_template_decl;
20093 input_location = save_loc;
20094 *checks = get_deferred_access_checks ();
20095 pop_deferring_access_checks ();
20097 if (arg == error_mark_node)
20098 return 1;
20099 else if (arg)
20101 TREE_VEC_ELT (targs, i) = arg;
20102 /* The position of the first default template argument,
20103 is also the number of non-defaulted arguments in TARGS.
20104 Record that. */
20105 if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
20106 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
20110 if (saw_undeduced++ == 1)
20111 goto again;
20114 if (CHECKING_P && !NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
20115 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
20117 return unify_success (explain_p);
20120 /* Subroutine of type_unification_real. Args are like the variables
20121 at the call site. ARG is an overloaded function (or template-id);
20122 we try deducing template args from each of the overloads, and if
20123 only one succeeds, we go with that. Modifies TARGS and returns
20124 true on success. */
20126 static bool
20127 resolve_overloaded_unification (tree tparms,
20128 tree targs,
20129 tree parm,
20130 tree arg,
20131 unification_kind_t strict,
20132 int sub_strict,
20133 bool explain_p)
20135 tree tempargs = copy_node (targs);
20136 int good = 0;
20137 tree goodfn = NULL_TREE;
20138 bool addr_p;
20140 if (TREE_CODE (arg) == ADDR_EXPR)
20142 arg = TREE_OPERAND (arg, 0);
20143 addr_p = true;
20145 else
20146 addr_p = false;
20148 if (TREE_CODE (arg) == COMPONENT_REF)
20149 /* Handle `&x' where `x' is some static or non-static member
20150 function name. */
20151 arg = TREE_OPERAND (arg, 1);
20153 if (TREE_CODE (arg) == OFFSET_REF)
20154 arg = TREE_OPERAND (arg, 1);
20156 /* Strip baselink information. */
20157 if (BASELINK_P (arg))
20158 arg = BASELINK_FUNCTIONS (arg);
20160 if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
20162 /* If we got some explicit template args, we need to plug them into
20163 the affected templates before we try to unify, in case the
20164 explicit args will completely resolve the templates in question. */
20166 int ok = 0;
20167 tree expl_subargs = TREE_OPERAND (arg, 1);
20168 arg = TREE_OPERAND (arg, 0);
20170 for (lkp_iterator iter (arg); iter; ++iter)
20172 tree fn = *iter;
20173 tree subargs, elem;
20175 if (TREE_CODE (fn) != TEMPLATE_DECL)
20176 continue;
20178 subargs = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
20179 expl_subargs, NULL_TREE, tf_none,
20180 /*require_all_args=*/true,
20181 /*use_default_args=*/true);
20182 if (subargs != error_mark_node
20183 && !any_dependent_template_arguments_p (subargs))
20185 elem = TREE_TYPE (instantiate_template (fn, subargs, tf_none));
20186 if (try_one_overload (tparms, targs, tempargs, parm,
20187 elem, strict, sub_strict, addr_p, explain_p)
20188 && (!goodfn || !same_type_p (goodfn, elem)))
20190 goodfn = elem;
20191 ++good;
20194 else if (subargs)
20195 ++ok;
20197 /* If no templates (or more than one) are fully resolved by the
20198 explicit arguments, this template-id is a non-deduced context; it
20199 could still be OK if we deduce all template arguments for the
20200 enclosing call through other arguments. */
20201 if (good != 1)
20202 good = ok;
20204 else if (TREE_CODE (arg) != OVERLOAD
20205 && TREE_CODE (arg) != FUNCTION_DECL)
20206 /* If ARG is, for example, "(0, &f)" then its type will be unknown
20207 -- but the deduction does not succeed because the expression is
20208 not just the function on its own. */
20209 return false;
20210 else
20211 for (lkp_iterator iter (arg); iter; ++iter)
20213 tree fn = *iter;
20214 if (try_one_overload (tparms, targs, tempargs, parm, TREE_TYPE (fn),
20215 strict, sub_strict, addr_p, explain_p)
20216 && (!goodfn || !decls_match (goodfn, fn)))
20218 goodfn = fn;
20219 ++good;
20223 /* [temp.deduct.type] A template-argument can be deduced from a pointer
20224 to function or pointer to member function argument if the set of
20225 overloaded functions does not contain function templates and at most
20226 one of a set of overloaded functions provides a unique match.
20228 So if we found multiple possibilities, we return success but don't
20229 deduce anything. */
20231 if (good == 1)
20233 int i = TREE_VEC_LENGTH (targs);
20234 for (; i--; )
20235 if (TREE_VEC_ELT (tempargs, i))
20237 tree old = TREE_VEC_ELT (targs, i);
20238 tree new_ = TREE_VEC_ELT (tempargs, i);
20239 if (new_ && old && ARGUMENT_PACK_P (old)
20240 && ARGUMENT_PACK_EXPLICIT_ARGS (old))
20241 /* Don't forget explicit template arguments in a pack. */
20242 ARGUMENT_PACK_EXPLICIT_ARGS (new_)
20243 = ARGUMENT_PACK_EXPLICIT_ARGS (old);
20244 TREE_VEC_ELT (targs, i) = new_;
20247 if (good)
20248 return true;
20250 return false;
20253 /* Core DR 115: In contexts where deduction is done and fails, or in
20254 contexts where deduction is not done, if a template argument list is
20255 specified and it, along with any default template arguments, identifies
20256 a single function template specialization, then the template-id is an
20257 lvalue for the function template specialization. */
20259 tree
20260 resolve_nondeduced_context (tree orig_expr, tsubst_flags_t complain)
20262 tree expr, offset, baselink;
20263 bool addr;
20265 if (!type_unknown_p (orig_expr))
20266 return orig_expr;
20268 expr = orig_expr;
20269 addr = false;
20270 offset = NULL_TREE;
20271 baselink = NULL_TREE;
20273 if (TREE_CODE (expr) == ADDR_EXPR)
20275 expr = TREE_OPERAND (expr, 0);
20276 addr = true;
20278 if (TREE_CODE (expr) == OFFSET_REF)
20280 offset = expr;
20281 expr = TREE_OPERAND (expr, 1);
20283 if (BASELINK_P (expr))
20285 baselink = expr;
20286 expr = BASELINK_FUNCTIONS (expr);
20289 if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
20291 int good = 0;
20292 tree goodfn = NULL_TREE;
20294 /* If we got some explicit template args, we need to plug them into
20295 the affected templates before we try to unify, in case the
20296 explicit args will completely resolve the templates in question. */
20298 tree expl_subargs = TREE_OPERAND (expr, 1);
20299 tree arg = TREE_OPERAND (expr, 0);
20300 tree badfn = NULL_TREE;
20301 tree badargs = NULL_TREE;
20303 for (lkp_iterator iter (arg); iter; ++iter)
20305 tree fn = *iter;
20306 tree subargs, elem;
20308 if (TREE_CODE (fn) != TEMPLATE_DECL)
20309 continue;
20311 subargs = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
20312 expl_subargs, NULL_TREE, tf_none,
20313 /*require_all_args=*/true,
20314 /*use_default_args=*/true);
20315 if (subargs != error_mark_node
20316 && !any_dependent_template_arguments_p (subargs))
20318 elem = instantiate_template (fn, subargs, tf_none);
20319 if (elem == error_mark_node)
20321 badfn = fn;
20322 badargs = subargs;
20324 else if (elem && (!goodfn || !decls_match (goodfn, elem)))
20326 goodfn = elem;
20327 ++good;
20331 if (good == 1)
20333 mark_used (goodfn);
20334 expr = goodfn;
20335 if (baselink)
20336 expr = build_baselink (BASELINK_BINFO (baselink),
20337 BASELINK_ACCESS_BINFO (baselink),
20338 expr, BASELINK_OPTYPE (baselink));
20339 if (offset)
20341 tree base
20342 = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (offset, 0)));
20343 expr = build_offset_ref (base, expr, addr, complain);
20345 if (addr)
20346 expr = cp_build_addr_expr (expr, complain);
20347 return expr;
20349 else if (good == 0 && badargs && (complain & tf_error))
20350 /* There were no good options and at least one bad one, so let the
20351 user know what the problem is. */
20352 instantiate_template (badfn, badargs, complain);
20354 return orig_expr;
20357 /* Subroutine of resolve_overloaded_unification; does deduction for a single
20358 overload. Fills TARGS with any deduced arguments, or error_mark_node if
20359 different overloads deduce different arguments for a given parm.
20360 ADDR_P is true if the expression for which deduction is being
20361 performed was of the form "& fn" rather than simply "fn".
20363 Returns 1 on success. */
20365 static int
20366 try_one_overload (tree tparms,
20367 tree orig_targs,
20368 tree targs,
20369 tree parm,
20370 tree arg,
20371 unification_kind_t strict,
20372 int sub_strict,
20373 bool addr_p,
20374 bool explain_p)
20376 int nargs;
20377 tree tempargs;
20378 int i;
20380 if (arg == error_mark_node)
20381 return 0;
20383 /* [temp.deduct.type] A template-argument can be deduced from a pointer
20384 to function or pointer to member function argument if the set of
20385 overloaded functions does not contain function templates and at most
20386 one of a set of overloaded functions provides a unique match.
20388 So if this is a template, just return success. */
20390 if (uses_template_parms (arg))
20391 return 1;
20393 if (TREE_CODE (arg) == METHOD_TYPE)
20394 arg = build_ptrmemfunc_type (build_pointer_type (arg));
20395 else if (addr_p)
20396 arg = build_pointer_type (arg);
20398 sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
20400 /* We don't copy orig_targs for this because if we have already deduced
20401 some template args from previous args, unify would complain when we
20402 try to deduce a template parameter for the same argument, even though
20403 there isn't really a conflict. */
20404 nargs = TREE_VEC_LENGTH (targs);
20405 tempargs = make_tree_vec (nargs);
20407 if (unify (tparms, tempargs, parm, arg, sub_strict, explain_p))
20408 return 0;
20410 /* First make sure we didn't deduce anything that conflicts with
20411 explicitly specified args. */
20412 for (i = nargs; i--; )
20414 tree elt = TREE_VEC_ELT (tempargs, i);
20415 tree oldelt = TREE_VEC_ELT (orig_targs, i);
20417 if (!elt)
20418 /*NOP*/;
20419 else if (uses_template_parms (elt))
20420 /* Since we're unifying against ourselves, we will fill in
20421 template args used in the function parm list with our own
20422 template parms. Discard them. */
20423 TREE_VEC_ELT (tempargs, i) = NULL_TREE;
20424 else if (oldelt && ARGUMENT_PACK_P (oldelt))
20426 /* Check that the argument at each index of the deduced argument pack
20427 is equivalent to the corresponding explicitly specified argument.
20428 We may have deduced more arguments than were explicitly specified,
20429 and that's OK. */
20431 /* We used to assert ARGUMENT_PACK_INCOMPLETE_P (oldelt) here, but
20432 that's wrong if we deduce the same argument pack from multiple
20433 function arguments: it's only incomplete the first time. */
20435 tree explicit_pack = ARGUMENT_PACK_ARGS (oldelt);
20436 tree deduced_pack = ARGUMENT_PACK_ARGS (elt);
20438 if (TREE_VEC_LENGTH (deduced_pack)
20439 < TREE_VEC_LENGTH (explicit_pack))
20440 return 0;
20442 for (int j = 0; j < TREE_VEC_LENGTH (explicit_pack); j++)
20443 if (!template_args_equal (TREE_VEC_ELT (explicit_pack, j),
20444 TREE_VEC_ELT (deduced_pack, j)))
20445 return 0;
20447 else if (oldelt && !template_args_equal (oldelt, elt))
20448 return 0;
20451 for (i = nargs; i--; )
20453 tree elt = TREE_VEC_ELT (tempargs, i);
20455 if (elt)
20456 TREE_VEC_ELT (targs, i) = elt;
20459 return 1;
20462 /* PARM is a template class (perhaps with unbound template
20463 parameters). ARG is a fully instantiated type. If ARG can be
20464 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
20465 TARGS are as for unify. */
20467 static tree
20468 try_class_unification (tree tparms, tree targs, tree parm, tree arg,
20469 bool explain_p)
20471 tree copy_of_targs;
20473 if (!CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
20474 return NULL_TREE;
20475 else if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
20476 /* Matches anything. */;
20477 else if (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
20478 != most_general_template (CLASSTYPE_TI_TEMPLATE (parm)))
20479 return NULL_TREE;
20481 /* We need to make a new template argument vector for the call to
20482 unify. If we used TARGS, we'd clutter it up with the result of
20483 the attempted unification, even if this class didn't work out.
20484 We also don't want to commit ourselves to all the unifications
20485 we've already done, since unification is supposed to be done on
20486 an argument-by-argument basis. In other words, consider the
20487 following pathological case:
20489 template <int I, int J, int K>
20490 struct S {};
20492 template <int I, int J>
20493 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
20495 template <int I, int J, int K>
20496 void f(S<I, J, K>, S<I, I, I>);
20498 void g() {
20499 S<0, 0, 0> s0;
20500 S<0, 1, 2> s2;
20502 f(s0, s2);
20505 Now, by the time we consider the unification involving `s2', we
20506 already know that we must have `f<0, 0, 0>'. But, even though
20507 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
20508 because there are two ways to unify base classes of S<0, 1, 2>
20509 with S<I, I, I>. If we kept the already deduced knowledge, we
20510 would reject the possibility I=1. */
20511 copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
20513 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
20515 if (unify_bound_ttp_args (tparms, copy_of_targs, parm, arg, explain_p))
20516 return NULL_TREE;
20517 return arg;
20520 /* If unification failed, we're done. */
20521 if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
20522 CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE, explain_p))
20523 return NULL_TREE;
20525 return arg;
20528 /* Given a template type PARM and a class type ARG, find the unique
20529 base type in ARG that is an instance of PARM. We do not examine
20530 ARG itself; only its base-classes. If there is not exactly one
20531 appropriate base class, return NULL_TREE. PARM may be the type of
20532 a partial specialization, as well as a plain template type. Used
20533 by unify. */
20535 static enum template_base_result
20536 get_template_base (tree tparms, tree targs, tree parm, tree arg,
20537 bool explain_p, tree *result)
20539 tree rval = NULL_TREE;
20540 tree binfo;
20542 gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
20544 binfo = TYPE_BINFO (complete_type (arg));
20545 if (!binfo)
20547 /* The type could not be completed. */
20548 *result = NULL_TREE;
20549 return tbr_incomplete_type;
20552 /* Walk in inheritance graph order. The search order is not
20553 important, and this avoids multiple walks of virtual bases. */
20554 for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
20556 tree r = try_class_unification (tparms, targs, parm,
20557 BINFO_TYPE (binfo), explain_p);
20559 if (r)
20561 /* If there is more than one satisfactory baseclass, then:
20563 [temp.deduct.call]
20565 If they yield more than one possible deduced A, the type
20566 deduction fails.
20568 applies. */
20569 if (rval && !same_type_p (r, rval))
20571 *result = NULL_TREE;
20572 return tbr_ambiguous_baseclass;
20575 rval = r;
20579 *result = rval;
20580 return tbr_success;
20583 /* Returns the level of DECL, which declares a template parameter. */
20585 static int
20586 template_decl_level (tree decl)
20588 switch (TREE_CODE (decl))
20590 case TYPE_DECL:
20591 case TEMPLATE_DECL:
20592 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
20594 case PARM_DECL:
20595 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
20597 default:
20598 gcc_unreachable ();
20600 return 0;
20603 /* Decide whether ARG can be unified with PARM, considering only the
20604 cv-qualifiers of each type, given STRICT as documented for unify.
20605 Returns nonzero iff the unification is OK on that basis. */
20607 static int
20608 check_cv_quals_for_unify (int strict, tree arg, tree parm)
20610 int arg_quals = cp_type_quals (arg);
20611 int parm_quals = cp_type_quals (parm);
20613 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
20614 && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
20616 /* Although a CVR qualifier is ignored when being applied to a
20617 substituted template parameter ([8.3.2]/1 for example), that
20618 does not allow us to unify "const T" with "int&" because both
20619 types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
20620 It is ok when we're allowing additional CV qualifiers
20621 at the outer level [14.8.2.1]/3,1st bullet. */
20622 if ((TREE_CODE (arg) == REFERENCE_TYPE
20623 || TREE_CODE (arg) == FUNCTION_TYPE
20624 || TREE_CODE (arg) == METHOD_TYPE)
20625 && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
20626 return 0;
20628 if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
20629 && (parm_quals & TYPE_QUAL_RESTRICT))
20630 return 0;
20633 if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
20634 && (arg_quals & parm_quals) != parm_quals)
20635 return 0;
20637 if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
20638 && (parm_quals & arg_quals) != arg_quals)
20639 return 0;
20641 return 1;
20644 /* Determines the LEVEL and INDEX for the template parameter PARM. */
20645 void
20646 template_parm_level_and_index (tree parm, int* level, int* index)
20648 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
20649 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
20650 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
20652 *index = TEMPLATE_TYPE_IDX (parm);
20653 *level = TEMPLATE_TYPE_LEVEL (parm);
20655 else
20657 *index = TEMPLATE_PARM_IDX (parm);
20658 *level = TEMPLATE_PARM_LEVEL (parm);
20662 #define RECUR_AND_CHECK_FAILURE(TP, TA, P, A, S, EP) \
20663 do { \
20664 if (unify (TP, TA, P, A, S, EP)) \
20665 return 1; \
20666 } while (0)
20668 /* Unifies the remaining arguments in PACKED_ARGS with the pack
20669 expansion at the end of PACKED_PARMS. Returns 0 if the type
20670 deduction succeeds, 1 otherwise. STRICT is the same as in
20671 fn_type_unification. CALL_ARGS_P is true iff PACKED_ARGS is actually a
20672 function call argument list. We'll need to adjust the arguments to make them
20673 types. SUBR tells us if this is from a recursive call to
20674 type_unification_real, or for comparing two template argument
20675 lists. */
20677 static int
20678 unify_pack_expansion (tree tparms, tree targs, tree packed_parms,
20679 tree packed_args, unification_kind_t strict,
20680 bool subr, bool explain_p)
20682 tree parm
20683 = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
20684 tree pattern = PACK_EXPANSION_PATTERN (parm);
20685 tree pack, packs = NULL_TREE;
20686 int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
20688 /* Add in any args remembered from an earlier partial instantiation. */
20689 targs = add_to_template_args (PACK_EXPANSION_EXTRA_ARGS (parm), targs);
20690 int levels = TMPL_ARGS_DEPTH (targs);
20692 packed_args = expand_template_argument_pack (packed_args);
20694 int len = TREE_VEC_LENGTH (packed_args);
20696 /* Determine the parameter packs we will be deducing from the
20697 pattern, and record their current deductions. */
20698 for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm);
20699 pack; pack = TREE_CHAIN (pack))
20701 tree parm_pack = TREE_VALUE (pack);
20702 int idx, level;
20704 /* Only template parameter packs can be deduced, not e.g. function
20705 parameter packs or __bases or __integer_pack. */
20706 if (!TEMPLATE_PARM_P (parm_pack))
20707 continue;
20709 /* Determine the index and level of this parameter pack. */
20710 template_parm_level_and_index (parm_pack, &level, &idx);
20711 if (level < levels)
20712 continue;
20714 /* Keep track of the parameter packs and their corresponding
20715 argument packs. */
20716 packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
20717 TREE_TYPE (packs) = make_tree_vec (len - start);
20720 /* Loop through all of the arguments that have not yet been
20721 unified and unify each with the pattern. */
20722 for (i = start; i < len; i++)
20724 tree parm;
20725 bool any_explicit = false;
20726 tree arg = TREE_VEC_ELT (packed_args, i);
20728 /* For each parameter pack, set its TMPL_ARG to either NULL_TREE
20729 or the element of its argument pack at the current index if
20730 this argument was explicitly specified. */
20731 for (pack = packs; pack; pack = TREE_CHAIN (pack))
20733 int idx, level;
20734 tree arg, pargs;
20735 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
20737 arg = NULL_TREE;
20738 if (TREE_VALUE (pack)
20739 && (pargs = ARGUMENT_PACK_EXPLICIT_ARGS (TREE_VALUE (pack)))
20740 && (i - start < TREE_VEC_LENGTH (pargs)))
20742 any_explicit = true;
20743 arg = TREE_VEC_ELT (pargs, i - start);
20745 TMPL_ARG (targs, level, idx) = arg;
20748 /* If we had explicit template arguments, substitute them into the
20749 pattern before deduction. */
20750 if (any_explicit)
20752 /* Some arguments might still be unspecified or dependent. */
20753 bool dependent;
20754 ++processing_template_decl;
20755 dependent = any_dependent_template_arguments_p (targs);
20756 if (!dependent)
20757 --processing_template_decl;
20758 parm = tsubst (pattern, targs,
20759 explain_p ? tf_warning_or_error : tf_none,
20760 NULL_TREE);
20761 if (dependent)
20762 --processing_template_decl;
20763 if (parm == error_mark_node)
20764 return 1;
20766 else
20767 parm = pattern;
20769 /* Unify the pattern with the current argument. */
20770 if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
20771 explain_p))
20772 return 1;
20774 /* For each parameter pack, collect the deduced value. */
20775 for (pack = packs; pack; pack = TREE_CHAIN (pack))
20777 int idx, level;
20778 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
20780 TREE_VEC_ELT (TREE_TYPE (pack), i - start) =
20781 TMPL_ARG (targs, level, idx);
20785 /* Verify that the results of unification with the parameter packs
20786 produce results consistent with what we've seen before, and make
20787 the deduced argument packs available. */
20788 for (pack = packs; pack; pack = TREE_CHAIN (pack))
20790 tree old_pack = TREE_VALUE (pack);
20791 tree new_args = TREE_TYPE (pack);
20792 int i, len = TREE_VEC_LENGTH (new_args);
20793 int idx, level;
20794 bool nondeduced_p = false;
20796 /* By default keep the original deduced argument pack.
20797 If necessary, more specific code is going to update the
20798 resulting deduced argument later down in this function. */
20799 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
20800 TMPL_ARG (targs, level, idx) = old_pack;
20802 /* If NEW_ARGS contains any NULL_TREE entries, we didn't
20803 actually deduce anything. */
20804 for (i = 0; i < len && !nondeduced_p; ++i)
20805 if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
20806 nondeduced_p = true;
20807 if (nondeduced_p)
20808 continue;
20810 if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
20812 /* If we had fewer function args than explicit template args,
20813 just use the explicits. */
20814 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
20815 int explicit_len = TREE_VEC_LENGTH (explicit_args);
20816 if (len < explicit_len)
20817 new_args = explicit_args;
20820 if (!old_pack)
20822 tree result;
20823 /* Build the deduced *_ARGUMENT_PACK. */
20824 if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
20826 result = make_node (NONTYPE_ARGUMENT_PACK);
20827 TREE_CONSTANT (result) = 1;
20829 else
20830 result = cxx_make_type (TYPE_ARGUMENT_PACK);
20832 SET_ARGUMENT_PACK_ARGS (result, new_args);
20834 /* Note the deduced argument packs for this parameter
20835 pack. */
20836 TMPL_ARG (targs, level, idx) = result;
20838 else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
20839 && (ARGUMENT_PACK_ARGS (old_pack)
20840 == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
20842 /* We only had the explicitly-provided arguments before, but
20843 now we have a complete set of arguments. */
20844 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
20846 SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
20847 ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
20848 ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
20850 else
20852 tree bad_old_arg = NULL_TREE, bad_new_arg = NULL_TREE;
20853 tree old_args = ARGUMENT_PACK_ARGS (old_pack);
20855 if (!comp_template_args (old_args, new_args,
20856 &bad_old_arg, &bad_new_arg))
20857 /* Inconsistent unification of this parameter pack. */
20858 return unify_parameter_pack_inconsistent (explain_p,
20859 bad_old_arg,
20860 bad_new_arg);
20864 return unify_success (explain_p);
20867 /* Handle unification of the domain of an array. PARM_DOM and ARG_DOM are
20868 INTEGER_TYPEs representing the TYPE_DOMAIN of ARRAY_TYPEs. The other
20869 parameters and return value are as for unify. */
20871 static int
20872 unify_array_domain (tree tparms, tree targs,
20873 tree parm_dom, tree arg_dom,
20874 bool explain_p)
20876 tree parm_max;
20877 tree arg_max;
20878 bool parm_cst;
20879 bool arg_cst;
20881 /* Our representation of array types uses "N - 1" as the
20882 TYPE_MAX_VALUE for an array with "N" elements, if "N" is
20883 not an integer constant. We cannot unify arbitrarily
20884 complex expressions, so we eliminate the MINUS_EXPRs
20885 here. */
20886 parm_max = TYPE_MAX_VALUE (parm_dom);
20887 parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
20888 if (!parm_cst)
20890 gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
20891 parm_max = TREE_OPERAND (parm_max, 0);
20893 arg_max = TYPE_MAX_VALUE (arg_dom);
20894 arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
20895 if (!arg_cst)
20897 /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
20898 trying to unify the type of a variable with the type
20899 of a template parameter. For example:
20901 template <unsigned int N>
20902 void f (char (&) [N]);
20903 int g();
20904 void h(int i) {
20905 char a[g(i)];
20906 f(a);
20909 Here, the type of the ARG will be "int [g(i)]", and
20910 may be a SAVE_EXPR, etc. */
20911 if (TREE_CODE (arg_max) != MINUS_EXPR)
20912 return unify_vla_arg (explain_p, arg_dom);
20913 arg_max = TREE_OPERAND (arg_max, 0);
20916 /* If only one of the bounds used a MINUS_EXPR, compensate
20917 by adding one to the other bound. */
20918 if (parm_cst && !arg_cst)
20919 parm_max = fold_build2_loc (input_location, PLUS_EXPR,
20920 integer_type_node,
20921 parm_max,
20922 integer_one_node);
20923 else if (arg_cst && !parm_cst)
20924 arg_max = fold_build2_loc (input_location, PLUS_EXPR,
20925 integer_type_node,
20926 arg_max,
20927 integer_one_node);
20929 return unify (tparms, targs, parm_max, arg_max,
20930 UNIFY_ALLOW_INTEGER, explain_p);
20933 /* Returns whether T, a P or A in unify, is a type, template or expression. */
20935 enum pa_kind_t { pa_type, pa_tmpl, pa_expr };
20937 static pa_kind_t
20938 pa_kind (tree t)
20940 if (PACK_EXPANSION_P (t))
20941 t = PACK_EXPANSION_PATTERN (t);
20942 if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
20943 || TREE_CODE (t) == UNBOUND_CLASS_TEMPLATE
20944 || DECL_TYPE_TEMPLATE_P (t))
20945 return pa_tmpl;
20946 else if (TYPE_P (t))
20947 return pa_type;
20948 else
20949 return pa_expr;
20952 /* Deduce the value of template parameters. TPARMS is the (innermost)
20953 set of template parameters to a template. TARGS is the bindings
20954 for those template parameters, as determined thus far; TARGS may
20955 include template arguments for outer levels of template parameters
20956 as well. PARM is a parameter to a template function, or a
20957 subcomponent of that parameter; ARG is the corresponding argument.
20958 This function attempts to match PARM with ARG in a manner
20959 consistent with the existing assignments in TARGS. If more values
20960 are deduced, then TARGS is updated.
20962 Returns 0 if the type deduction succeeds, 1 otherwise. The
20963 parameter STRICT is a bitwise or of the following flags:
20965 UNIFY_ALLOW_NONE:
20966 Require an exact match between PARM and ARG.
20967 UNIFY_ALLOW_MORE_CV_QUAL:
20968 Allow the deduced ARG to be more cv-qualified (by qualification
20969 conversion) than ARG.
20970 UNIFY_ALLOW_LESS_CV_QUAL:
20971 Allow the deduced ARG to be less cv-qualified than ARG.
20972 UNIFY_ALLOW_DERIVED:
20973 Allow the deduced ARG to be a template base class of ARG,
20974 or a pointer to a template base class of the type pointed to by
20975 ARG.
20976 UNIFY_ALLOW_INTEGER:
20977 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
20978 case for more information.
20979 UNIFY_ALLOW_OUTER_LEVEL:
20980 This is the outermost level of a deduction. Used to determine validity
20981 of qualification conversions. A valid qualification conversion must
20982 have const qualified pointers leading up to the inner type which
20983 requires additional CV quals, except at the outer level, where const
20984 is not required [conv.qual]. It would be normal to set this flag in
20985 addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
20986 UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
20987 This is the outermost level of a deduction, and PARM can be more CV
20988 qualified at this point.
20989 UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
20990 This is the outermost level of a deduction, and PARM can be less CV
20991 qualified at this point. */
20993 static int
20994 unify (tree tparms, tree targs, tree parm, tree arg, int strict,
20995 bool explain_p)
20997 int idx;
20998 tree targ;
20999 tree tparm;
21000 int strict_in = strict;
21001 tsubst_flags_t complain = (explain_p
21002 ? tf_warning_or_error
21003 : tf_none);
21005 /* I don't think this will do the right thing with respect to types.
21006 But the only case I've seen it in so far has been array bounds, where
21007 signedness is the only information lost, and I think that will be
21008 okay. */
21009 while (CONVERT_EXPR_P (parm))
21010 parm = TREE_OPERAND (parm, 0);
21012 if (arg == error_mark_node)
21013 return unify_invalid (explain_p);
21014 if (arg == unknown_type_node
21015 || arg == init_list_type_node)
21016 /* We can't deduce anything from this, but we might get all the
21017 template args from other function args. */
21018 return unify_success (explain_p);
21020 if (parm == any_targ_node || arg == any_targ_node)
21021 return unify_success (explain_p);
21023 /* If PARM uses template parameters, then we can't bail out here,
21024 even if ARG == PARM, since we won't record unifications for the
21025 template parameters. We might need them if we're trying to
21026 figure out which of two things is more specialized. */
21027 if (arg == parm && !uses_template_parms (parm))
21028 return unify_success (explain_p);
21030 /* Handle init lists early, so the rest of the function can assume
21031 we're dealing with a type. */
21032 if (BRACE_ENCLOSED_INITIALIZER_P (arg))
21034 tree elt, elttype;
21035 unsigned i;
21036 tree orig_parm = parm;
21038 /* Replace T with std::initializer_list<T> for deduction. */
21039 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
21040 && flag_deduce_init_list)
21041 parm = listify (parm);
21043 if (!is_std_init_list (parm)
21044 && TREE_CODE (parm) != ARRAY_TYPE)
21045 /* We can only deduce from an initializer list argument if the
21046 parameter is std::initializer_list or an array; otherwise this
21047 is a non-deduced context. */
21048 return unify_success (explain_p);
21050 if (TREE_CODE (parm) == ARRAY_TYPE)
21051 elttype = TREE_TYPE (parm);
21052 else
21054 elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
21055 /* Deduction is defined in terms of a single type, so just punt
21056 on the (bizarre) std::initializer_list<T...>. */
21057 if (PACK_EXPANSION_P (elttype))
21058 return unify_success (explain_p);
21061 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
21063 int elt_strict = strict;
21065 if (elt == error_mark_node)
21066 return unify_invalid (explain_p);
21068 if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
21070 tree type = TREE_TYPE (elt);
21071 if (type == error_mark_node)
21072 return unify_invalid (explain_p);
21073 /* It should only be possible to get here for a call. */
21074 gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
21075 elt_strict |= maybe_adjust_types_for_deduction
21076 (DEDUCE_CALL, &elttype, &type, elt);
21077 elt = type;
21080 RECUR_AND_CHECK_FAILURE (tparms, targs, elttype, elt, elt_strict,
21081 explain_p);
21084 if (TREE_CODE (parm) == ARRAY_TYPE
21085 && deducible_array_bound (TYPE_DOMAIN (parm)))
21087 /* Also deduce from the length of the initializer list. */
21088 tree max = size_int (CONSTRUCTOR_NELTS (arg));
21089 tree idx = compute_array_index_type (NULL_TREE, max, tf_none);
21090 if (idx == error_mark_node)
21091 return unify_invalid (explain_p);
21092 return unify_array_domain (tparms, targs, TYPE_DOMAIN (parm),
21093 idx, explain_p);
21096 /* If the std::initializer_list<T> deduction worked, replace the
21097 deduced A with std::initializer_list<A>. */
21098 if (orig_parm != parm)
21100 idx = TEMPLATE_TYPE_IDX (orig_parm);
21101 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
21102 targ = listify (targ);
21103 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
21105 return unify_success (explain_p);
21108 /* If parm and arg aren't the same kind of thing (template, type, or
21109 expression), fail early. */
21110 if (pa_kind (parm) != pa_kind (arg))
21111 return unify_invalid (explain_p);
21113 /* Immediately reject some pairs that won't unify because of
21114 cv-qualification mismatches. */
21115 if (TREE_CODE (arg) == TREE_CODE (parm)
21116 && TYPE_P (arg)
21117 /* It is the elements of the array which hold the cv quals of an array
21118 type, and the elements might be template type parms. We'll check
21119 when we recurse. */
21120 && TREE_CODE (arg) != ARRAY_TYPE
21121 /* We check the cv-qualifiers when unifying with template type
21122 parameters below. We want to allow ARG `const T' to unify with
21123 PARM `T' for example, when computing which of two templates
21124 is more specialized, for example. */
21125 && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
21126 && !check_cv_quals_for_unify (strict_in, arg, parm))
21127 return unify_cv_qual_mismatch (explain_p, parm, arg);
21129 if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
21130 && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
21131 strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
21132 strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
21133 strict &= ~UNIFY_ALLOW_DERIVED;
21134 strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
21135 strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
21137 switch (TREE_CODE (parm))
21139 case TYPENAME_TYPE:
21140 case SCOPE_REF:
21141 case UNBOUND_CLASS_TEMPLATE:
21142 /* In a type which contains a nested-name-specifier, template
21143 argument values cannot be deduced for template parameters used
21144 within the nested-name-specifier. */
21145 return unify_success (explain_p);
21147 case TEMPLATE_TYPE_PARM:
21148 case TEMPLATE_TEMPLATE_PARM:
21149 case BOUND_TEMPLATE_TEMPLATE_PARM:
21150 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
21151 if (error_operand_p (tparm))
21152 return unify_invalid (explain_p);
21154 if (TEMPLATE_TYPE_LEVEL (parm)
21155 != template_decl_level (tparm))
21156 /* The PARM is not one we're trying to unify. Just check
21157 to see if it matches ARG. */
21159 if (TREE_CODE (arg) == TREE_CODE (parm)
21160 && (is_auto (parm) ? is_auto (arg)
21161 : same_type_p (parm, arg)))
21162 return unify_success (explain_p);
21163 else
21164 return unify_type_mismatch (explain_p, parm, arg);
21166 idx = TEMPLATE_TYPE_IDX (parm);
21167 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
21168 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
21169 if (error_operand_p (tparm))
21170 return unify_invalid (explain_p);
21172 /* Check for mixed types and values. */
21173 if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
21174 && TREE_CODE (tparm) != TYPE_DECL)
21175 || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
21176 && TREE_CODE (tparm) != TEMPLATE_DECL))
21177 gcc_unreachable ();
21179 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
21181 if ((strict_in & UNIFY_ALLOW_DERIVED)
21182 && CLASS_TYPE_P (arg))
21184 /* First try to match ARG directly. */
21185 tree t = try_class_unification (tparms, targs, parm, arg,
21186 explain_p);
21187 if (!t)
21189 /* Otherwise, look for a suitable base of ARG, as below. */
21190 enum template_base_result r;
21191 r = get_template_base (tparms, targs, parm, arg,
21192 explain_p, &t);
21193 if (!t)
21194 return unify_no_common_base (explain_p, r, parm, arg);
21195 arg = t;
21198 /* ARG must be constructed from a template class or a template
21199 template parameter. */
21200 else if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
21201 && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
21202 return unify_template_deduction_failure (explain_p, parm, arg);
21204 /* Deduce arguments T, i from TT<T> or TT<i>. */
21205 if (unify_bound_ttp_args (tparms, targs, parm, arg, explain_p))
21206 return 1;
21208 arg = TYPE_TI_TEMPLATE (arg);
21210 /* Fall through to deduce template name. */
21213 if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
21214 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
21216 /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>. */
21218 /* Simple cases: Value already set, does match or doesn't. */
21219 if (targ != NULL_TREE && template_args_equal (targ, arg))
21220 return unify_success (explain_p);
21221 else if (targ)
21222 return unify_inconsistency (explain_p, parm, targ, arg);
21224 else
21226 /* If PARM is `const T' and ARG is only `int', we don't have
21227 a match unless we are allowing additional qualification.
21228 If ARG is `const int' and PARM is just `T' that's OK;
21229 that binds `const int' to `T'. */
21230 if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
21231 arg, parm))
21232 return unify_cv_qual_mismatch (explain_p, parm, arg);
21234 /* Consider the case where ARG is `const volatile int' and
21235 PARM is `const T'. Then, T should be `volatile int'. */
21236 arg = cp_build_qualified_type_real
21237 (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
21238 if (arg == error_mark_node)
21239 return unify_invalid (explain_p);
21241 /* Simple cases: Value already set, does match or doesn't. */
21242 if (targ != NULL_TREE && same_type_p (targ, arg))
21243 return unify_success (explain_p);
21244 else if (targ)
21245 return unify_inconsistency (explain_p, parm, targ, arg);
21247 /* Make sure that ARG is not a variable-sized array. (Note
21248 that were talking about variable-sized arrays (like
21249 `int[n]'), rather than arrays of unknown size (like
21250 `int[]').) We'll get very confused by such a type since
21251 the bound of the array is not constant, and therefore
21252 not mangleable. Besides, such types are not allowed in
21253 ISO C++, so we can do as we please here. We do allow
21254 them for 'auto' deduction, since that isn't ABI-exposed. */
21255 if (!is_auto (parm) && variably_modified_type_p (arg, NULL_TREE))
21256 return unify_vla_arg (explain_p, arg);
21258 /* Strip typedefs as in convert_template_argument. */
21259 arg = canonicalize_type_argument (arg, tf_none);
21262 /* If ARG is a parameter pack or an expansion, we cannot unify
21263 against it unless PARM is also a parameter pack. */
21264 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
21265 && !template_parameter_pack_p (parm))
21266 return unify_parameter_pack_mismatch (explain_p, parm, arg);
21268 /* If the argument deduction results is a METHOD_TYPE,
21269 then there is a problem.
21270 METHOD_TYPE doesn't map to any real C++ type the result of
21271 the deduction can not be of that type. */
21272 if (TREE_CODE (arg) == METHOD_TYPE)
21273 return unify_method_type_error (explain_p, arg);
21275 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
21276 return unify_success (explain_p);
21278 case TEMPLATE_PARM_INDEX:
21279 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
21280 if (error_operand_p (tparm))
21281 return unify_invalid (explain_p);
21283 if (TEMPLATE_PARM_LEVEL (parm)
21284 != template_decl_level (tparm))
21286 /* The PARM is not one we're trying to unify. Just check
21287 to see if it matches ARG. */
21288 int result = !(TREE_CODE (arg) == TREE_CODE (parm)
21289 && cp_tree_equal (parm, arg));
21290 if (result)
21291 unify_expression_unequal (explain_p, parm, arg);
21292 return result;
21295 idx = TEMPLATE_PARM_IDX (parm);
21296 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
21298 if (targ)
21300 if ((strict & UNIFY_ALLOW_INTEGER)
21301 && TREE_TYPE (targ) && TREE_TYPE (arg)
21302 && CP_INTEGRAL_TYPE_P (TREE_TYPE (targ)))
21303 /* We're deducing from an array bound, the type doesn't matter. */
21304 arg = fold_convert (TREE_TYPE (targ), arg);
21305 int x = !cp_tree_equal (targ, arg);
21306 if (x)
21307 unify_inconsistency (explain_p, parm, targ, arg);
21308 return x;
21311 /* [temp.deduct.type] If, in the declaration of a function template
21312 with a non-type template-parameter, the non-type
21313 template-parameter is used in an expression in the function
21314 parameter-list and, if the corresponding template-argument is
21315 deduced, the template-argument type shall match the type of the
21316 template-parameter exactly, except that a template-argument
21317 deduced from an array bound may be of any integral type.
21318 The non-type parameter might use already deduced type parameters. */
21319 tparm = TREE_TYPE (parm);
21320 if (TEMPLATE_PARM_LEVEL (parm) > TMPL_ARGS_DEPTH (targs))
21321 /* We don't have enough levels of args to do any substitution. This
21322 can happen in the context of -fnew-ttp-matching. */;
21323 else
21325 ++processing_template_decl;
21326 tparm = tsubst (tparm, targs, tf_none, NULL_TREE);
21327 --processing_template_decl;
21329 if (tree a = type_uses_auto (tparm))
21331 tparm = do_auto_deduction (tparm, arg, a, complain, adc_unify);
21332 if (tparm == error_mark_node)
21333 return 1;
21337 if (!TREE_TYPE (arg))
21338 /* Template-parameter dependent expression. Just accept it for now.
21339 It will later be processed in convert_template_argument. */
21341 else if (same_type_p (non_reference (TREE_TYPE (arg)),
21342 non_reference (tparm)))
21343 /* OK */;
21344 else if ((strict & UNIFY_ALLOW_INTEGER)
21345 && CP_INTEGRAL_TYPE_P (tparm))
21346 /* Convert the ARG to the type of PARM; the deduced non-type
21347 template argument must exactly match the types of the
21348 corresponding parameter. */
21349 arg = fold (build_nop (tparm, arg));
21350 else if (uses_template_parms (tparm))
21352 /* We haven't deduced the type of this parameter yet. */
21353 if (cxx_dialect >= cxx17
21354 /* We deduce from array bounds in try_array_deduction. */
21355 && !(strict & UNIFY_ALLOW_INTEGER))
21357 /* Deduce it from the non-type argument. */
21358 tree atype = TREE_TYPE (arg);
21359 RECUR_AND_CHECK_FAILURE (tparms, targs,
21360 tparm, atype,
21361 UNIFY_ALLOW_NONE, explain_p);
21363 else
21364 /* Try again later. */
21365 return unify_success (explain_p);
21367 else
21368 return unify_type_mismatch (explain_p, tparm, TREE_TYPE (arg));
21370 /* If ARG is a parameter pack or an expansion, we cannot unify
21371 against it unless PARM is also a parameter pack. */
21372 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
21373 && !TEMPLATE_PARM_PARAMETER_PACK (parm))
21374 return unify_parameter_pack_mismatch (explain_p, parm, arg);
21377 bool removed_attr = false;
21378 arg = strip_typedefs_expr (arg, &removed_attr);
21380 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
21381 return unify_success (explain_p);
21383 case PTRMEM_CST:
21385 /* A pointer-to-member constant can be unified only with
21386 another constant. */
21387 if (TREE_CODE (arg) != PTRMEM_CST)
21388 return unify_ptrmem_cst_mismatch (explain_p, parm, arg);
21390 /* Just unify the class member. It would be useless (and possibly
21391 wrong, depending on the strict flags) to unify also
21392 PTRMEM_CST_CLASS, because we want to be sure that both parm and
21393 arg refer to the same variable, even if through different
21394 classes. For instance:
21396 struct A { int x; };
21397 struct B : A { };
21399 Unification of &A::x and &B::x must succeed. */
21400 return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
21401 PTRMEM_CST_MEMBER (arg), strict, explain_p);
21404 case POINTER_TYPE:
21406 if (!TYPE_PTR_P (arg))
21407 return unify_type_mismatch (explain_p, parm, arg);
21409 /* [temp.deduct.call]
21411 A can be another pointer or pointer to member type that can
21412 be converted to the deduced A via a qualification
21413 conversion (_conv.qual_).
21415 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
21416 This will allow for additional cv-qualification of the
21417 pointed-to types if appropriate. */
21419 if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
21420 /* The derived-to-base conversion only persists through one
21421 level of pointers. */
21422 strict |= (strict_in & UNIFY_ALLOW_DERIVED);
21424 return unify (tparms, targs, TREE_TYPE (parm),
21425 TREE_TYPE (arg), strict, explain_p);
21428 case REFERENCE_TYPE:
21429 if (TREE_CODE (arg) != REFERENCE_TYPE)
21430 return unify_type_mismatch (explain_p, parm, arg);
21431 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
21432 strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
21434 case ARRAY_TYPE:
21435 if (TREE_CODE (arg) != ARRAY_TYPE)
21436 return unify_type_mismatch (explain_p, parm, arg);
21437 if ((TYPE_DOMAIN (parm) == NULL_TREE)
21438 != (TYPE_DOMAIN (arg) == NULL_TREE))
21439 return unify_type_mismatch (explain_p, parm, arg);
21440 RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
21441 strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
21442 if (TYPE_DOMAIN (parm) != NULL_TREE)
21443 return unify_array_domain (tparms, targs, TYPE_DOMAIN (parm),
21444 TYPE_DOMAIN (arg), explain_p);
21445 return unify_success (explain_p);
21447 case REAL_TYPE:
21448 case COMPLEX_TYPE:
21449 case VECTOR_TYPE:
21450 case INTEGER_TYPE:
21451 case BOOLEAN_TYPE:
21452 case ENUMERAL_TYPE:
21453 case VOID_TYPE:
21454 case NULLPTR_TYPE:
21455 if (TREE_CODE (arg) != TREE_CODE (parm))
21456 return unify_type_mismatch (explain_p, parm, arg);
21458 /* We have already checked cv-qualification at the top of the
21459 function. */
21460 if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
21461 return unify_type_mismatch (explain_p, parm, arg);
21463 /* As far as unification is concerned, this wins. Later checks
21464 will invalidate it if necessary. */
21465 return unify_success (explain_p);
21467 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
21468 /* Type INTEGER_CST can come from ordinary constant template args. */
21469 case INTEGER_CST:
21470 while (CONVERT_EXPR_P (arg))
21471 arg = TREE_OPERAND (arg, 0);
21473 if (TREE_CODE (arg) != INTEGER_CST)
21474 return unify_template_argument_mismatch (explain_p, parm, arg);
21475 return (tree_int_cst_equal (parm, arg)
21476 ? unify_success (explain_p)
21477 : unify_template_argument_mismatch (explain_p, parm, arg));
21479 case TREE_VEC:
21481 int i, len, argslen;
21482 int parm_variadic_p = 0;
21484 if (TREE_CODE (arg) != TREE_VEC)
21485 return unify_template_argument_mismatch (explain_p, parm, arg);
21487 len = TREE_VEC_LENGTH (parm);
21488 argslen = TREE_VEC_LENGTH (arg);
21490 /* Check for pack expansions in the parameters. */
21491 for (i = 0; i < len; ++i)
21493 if (PACK_EXPANSION_P (TREE_VEC_ELT (parm, i)))
21495 if (i == len - 1)
21496 /* We can unify against something with a trailing
21497 parameter pack. */
21498 parm_variadic_p = 1;
21499 else
21500 /* [temp.deduct.type]/9: If the template argument list of
21501 P contains a pack expansion that is not the last
21502 template argument, the entire template argument list
21503 is a non-deduced context. */
21504 return unify_success (explain_p);
21508 /* If we don't have enough arguments to satisfy the parameters
21509 (not counting the pack expression at the end), or we have
21510 too many arguments for a parameter list that doesn't end in
21511 a pack expression, we can't unify. */
21512 if (parm_variadic_p
21513 ? argslen < len - parm_variadic_p
21514 : argslen != len)
21515 return unify_arity (explain_p, TREE_VEC_LENGTH (arg), len);
21517 /* Unify all of the parameters that precede the (optional)
21518 pack expression. */
21519 for (i = 0; i < len - parm_variadic_p; ++i)
21521 RECUR_AND_CHECK_FAILURE (tparms, targs,
21522 TREE_VEC_ELT (parm, i),
21523 TREE_VEC_ELT (arg, i),
21524 UNIFY_ALLOW_NONE, explain_p);
21526 if (parm_variadic_p)
21527 return unify_pack_expansion (tparms, targs, parm, arg,
21528 DEDUCE_EXACT,
21529 /*subr=*/true, explain_p);
21530 return unify_success (explain_p);
21533 case RECORD_TYPE:
21534 case UNION_TYPE:
21535 if (TREE_CODE (arg) != TREE_CODE (parm))
21536 return unify_type_mismatch (explain_p, parm, arg);
21538 if (TYPE_PTRMEMFUNC_P (parm))
21540 if (!TYPE_PTRMEMFUNC_P (arg))
21541 return unify_type_mismatch (explain_p, parm, arg);
21543 return unify (tparms, targs,
21544 TYPE_PTRMEMFUNC_FN_TYPE (parm),
21545 TYPE_PTRMEMFUNC_FN_TYPE (arg),
21546 strict, explain_p);
21548 else if (TYPE_PTRMEMFUNC_P (arg))
21549 return unify_type_mismatch (explain_p, parm, arg);
21551 if (CLASSTYPE_TEMPLATE_INFO (parm))
21553 tree t = NULL_TREE;
21555 if (strict_in & UNIFY_ALLOW_DERIVED)
21557 /* First, we try to unify the PARM and ARG directly. */
21558 t = try_class_unification (tparms, targs,
21559 parm, arg, explain_p);
21561 if (!t)
21563 /* Fallback to the special case allowed in
21564 [temp.deduct.call]:
21566 If P is a class, and P has the form
21567 template-id, then A can be a derived class of
21568 the deduced A. Likewise, if P is a pointer to
21569 a class of the form template-id, A can be a
21570 pointer to a derived class pointed to by the
21571 deduced A. */
21572 enum template_base_result r;
21573 r = get_template_base (tparms, targs, parm, arg,
21574 explain_p, &t);
21576 if (!t)
21578 /* Don't give the derived diagnostic if we're
21579 already dealing with the same template. */
21580 bool same_template
21581 = (CLASSTYPE_TEMPLATE_INFO (arg)
21582 && (CLASSTYPE_TI_TEMPLATE (parm)
21583 == CLASSTYPE_TI_TEMPLATE (arg)));
21584 return unify_no_common_base (explain_p && !same_template,
21585 r, parm, arg);
21589 else if (CLASSTYPE_TEMPLATE_INFO (arg)
21590 && (CLASSTYPE_TI_TEMPLATE (parm)
21591 == CLASSTYPE_TI_TEMPLATE (arg)))
21592 /* Perhaps PARM is something like S<U> and ARG is S<int>.
21593 Then, we should unify `int' and `U'. */
21594 t = arg;
21595 else
21596 /* There's no chance of unification succeeding. */
21597 return unify_type_mismatch (explain_p, parm, arg);
21599 return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
21600 CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE, explain_p);
21602 else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
21603 return unify_type_mismatch (explain_p, parm, arg);
21604 return unify_success (explain_p);
21606 case METHOD_TYPE:
21607 case FUNCTION_TYPE:
21609 unsigned int nargs;
21610 tree *args;
21611 tree a;
21612 unsigned int i;
21614 if (TREE_CODE (arg) != TREE_CODE (parm))
21615 return unify_type_mismatch (explain_p, parm, arg);
21617 /* CV qualifications for methods can never be deduced, they must
21618 match exactly. We need to check them explicitly here,
21619 because type_unification_real treats them as any other
21620 cv-qualified parameter. */
21621 if (TREE_CODE (parm) == METHOD_TYPE
21622 && (!check_cv_quals_for_unify
21623 (UNIFY_ALLOW_NONE,
21624 class_of_this_parm (arg),
21625 class_of_this_parm (parm))))
21626 return unify_cv_qual_mismatch (explain_p, parm, arg);
21627 if (TREE_CODE (arg) == FUNCTION_TYPE
21628 && type_memfn_quals (parm) != type_memfn_quals (arg))
21629 return unify_cv_qual_mismatch (explain_p, parm, arg);
21630 if (type_memfn_rqual (parm) != type_memfn_rqual (arg))
21631 return unify_type_mismatch (explain_p, parm, arg);
21633 RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm),
21634 TREE_TYPE (arg), UNIFY_ALLOW_NONE, explain_p);
21636 nargs = list_length (TYPE_ARG_TYPES (arg));
21637 args = XALLOCAVEC (tree, nargs);
21638 for (a = TYPE_ARG_TYPES (arg), i = 0;
21639 a != NULL_TREE && a != void_list_node;
21640 a = TREE_CHAIN (a), ++i)
21641 args[i] = TREE_VALUE (a);
21642 nargs = i;
21644 if (type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
21645 args, nargs, 1, DEDUCE_EXACT,
21646 LOOKUP_NORMAL, NULL, explain_p))
21647 return 1;
21649 if (flag_noexcept_type)
21651 tree pspec = TYPE_RAISES_EXCEPTIONS (parm);
21652 tree aspec = canonical_eh_spec (TYPE_RAISES_EXCEPTIONS (arg));
21653 if (pspec == NULL_TREE) pspec = noexcept_false_spec;
21654 if (aspec == NULL_TREE) aspec = noexcept_false_spec;
21655 if (TREE_PURPOSE (pspec) && TREE_PURPOSE (aspec)
21656 && uses_template_parms (TREE_PURPOSE (pspec)))
21657 RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_PURPOSE (pspec),
21658 TREE_PURPOSE (aspec),
21659 UNIFY_ALLOW_NONE, explain_p);
21660 else if (nothrow_spec_p (pspec) && !nothrow_spec_p (aspec))
21661 return unify_type_mismatch (explain_p, parm, arg);
21664 return 0;
21667 case OFFSET_TYPE:
21668 /* Unify a pointer to member with a pointer to member function, which
21669 deduces the type of the member as a function type. */
21670 if (TYPE_PTRMEMFUNC_P (arg))
21672 /* Check top-level cv qualifiers */
21673 if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
21674 return unify_cv_qual_mismatch (explain_p, parm, arg);
21676 RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
21677 TYPE_PTRMEMFUNC_OBJECT_TYPE (arg),
21678 UNIFY_ALLOW_NONE, explain_p);
21680 /* Determine the type of the function we are unifying against. */
21681 tree fntype = static_fn_type (arg);
21683 return unify (tparms, targs, TREE_TYPE (parm), fntype, strict, explain_p);
21686 if (TREE_CODE (arg) != OFFSET_TYPE)
21687 return unify_type_mismatch (explain_p, parm, arg);
21688 RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
21689 TYPE_OFFSET_BASETYPE (arg),
21690 UNIFY_ALLOW_NONE, explain_p);
21691 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
21692 strict, explain_p);
21694 case CONST_DECL:
21695 if (DECL_TEMPLATE_PARM_P (parm))
21696 return unify (tparms, targs, DECL_INITIAL (parm), arg, strict, explain_p);
21697 if (arg != scalar_constant_value (parm))
21698 return unify_template_argument_mismatch (explain_p, parm, arg);
21699 return unify_success (explain_p);
21701 case FIELD_DECL:
21702 case TEMPLATE_DECL:
21703 /* Matched cases are handled by the ARG == PARM test above. */
21704 return unify_template_argument_mismatch (explain_p, parm, arg);
21706 case VAR_DECL:
21707 /* We might get a variable as a non-type template argument in parm if the
21708 corresponding parameter is type-dependent. Make any necessary
21709 adjustments based on whether arg is a reference. */
21710 if (CONSTANT_CLASS_P (arg))
21711 parm = fold_non_dependent_expr (parm);
21712 else if (REFERENCE_REF_P (arg))
21714 tree sub = TREE_OPERAND (arg, 0);
21715 STRIP_NOPS (sub);
21716 if (TREE_CODE (sub) == ADDR_EXPR)
21717 arg = TREE_OPERAND (sub, 0);
21719 /* Now use the normal expression code to check whether they match. */
21720 goto expr;
21722 case TYPE_ARGUMENT_PACK:
21723 case NONTYPE_ARGUMENT_PACK:
21724 return unify (tparms, targs, ARGUMENT_PACK_ARGS (parm),
21725 ARGUMENT_PACK_ARGS (arg), strict, explain_p);
21727 case TYPEOF_TYPE:
21728 case DECLTYPE_TYPE:
21729 case UNDERLYING_TYPE:
21730 /* Cannot deduce anything from TYPEOF_TYPE, DECLTYPE_TYPE,
21731 or UNDERLYING_TYPE nodes. */
21732 return unify_success (explain_p);
21734 case ERROR_MARK:
21735 /* Unification fails if we hit an error node. */
21736 return unify_invalid (explain_p);
21738 case INDIRECT_REF:
21739 if (REFERENCE_REF_P (parm))
21741 bool pexp = PACK_EXPANSION_P (arg);
21742 if (pexp)
21743 arg = PACK_EXPANSION_PATTERN (arg);
21744 if (REFERENCE_REF_P (arg))
21745 arg = TREE_OPERAND (arg, 0);
21746 if (pexp)
21747 arg = make_pack_expansion (arg, complain);
21748 return unify (tparms, targs, TREE_OPERAND (parm, 0), arg,
21749 strict, explain_p);
21751 /* FALLTHRU */
21753 default:
21754 /* An unresolved overload is a nondeduced context. */
21755 if (is_overloaded_fn (parm) || type_unknown_p (parm))
21756 return unify_success (explain_p);
21757 gcc_assert (EXPR_P (parm) || TREE_CODE (parm) == TRAIT_EXPR);
21758 expr:
21759 /* We must be looking at an expression. This can happen with
21760 something like:
21762 template <int I>
21763 void foo(S<I>, S<I + 2>);
21765 This is a "nondeduced context":
21767 [deduct.type]
21769 The nondeduced contexts are:
21771 --A type that is a template-id in which one or more of
21772 the template-arguments is an expression that references
21773 a template-parameter.
21775 In these cases, we assume deduction succeeded, but don't
21776 actually infer any unifications. */
21778 if (!uses_template_parms (parm)
21779 && !template_args_equal (parm, arg))
21780 return unify_expression_unequal (explain_p, parm, arg);
21781 else
21782 return unify_success (explain_p);
21785 #undef RECUR_AND_CHECK_FAILURE
21787 /* Note that DECL can be defined in this translation unit, if
21788 required. */
21790 static void
21791 mark_definable (tree decl)
21793 tree clone;
21794 DECL_NOT_REALLY_EXTERN (decl) = 1;
21795 FOR_EACH_CLONE (clone, decl)
21796 DECL_NOT_REALLY_EXTERN (clone) = 1;
21799 /* Called if RESULT is explicitly instantiated, or is a member of an
21800 explicitly instantiated class. */
21802 void
21803 mark_decl_instantiated (tree result, int extern_p)
21805 SET_DECL_EXPLICIT_INSTANTIATION (result);
21807 /* If this entity has already been written out, it's too late to
21808 make any modifications. */
21809 if (TREE_ASM_WRITTEN (result))
21810 return;
21812 /* For anonymous namespace we don't need to do anything. */
21813 if (decl_anon_ns_mem_p (result))
21815 gcc_assert (!TREE_PUBLIC (result));
21816 return;
21819 if (TREE_CODE (result) != FUNCTION_DECL)
21820 /* The TREE_PUBLIC flag for function declarations will have been
21821 set correctly by tsubst. */
21822 TREE_PUBLIC (result) = 1;
21824 /* This might have been set by an earlier implicit instantiation. */
21825 DECL_COMDAT (result) = 0;
21827 if (extern_p)
21828 DECL_NOT_REALLY_EXTERN (result) = 0;
21829 else
21831 mark_definable (result);
21832 mark_needed (result);
21833 /* Always make artificials weak. */
21834 if (DECL_ARTIFICIAL (result) && flag_weak)
21835 comdat_linkage (result);
21836 /* For WIN32 we also want to put explicit instantiations in
21837 linkonce sections. */
21838 else if (TREE_PUBLIC (result))
21839 maybe_make_one_only (result);
21842 /* If EXTERN_P, then this function will not be emitted -- unless
21843 followed by an explicit instantiation, at which point its linkage
21844 will be adjusted. If !EXTERN_P, then this function will be
21845 emitted here. In neither circumstance do we want
21846 import_export_decl to adjust the linkage. */
21847 DECL_INTERFACE_KNOWN (result) = 1;
21850 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
21851 important template arguments. If any are missing, we check whether
21852 they're important by using error_mark_node for substituting into any
21853 args that were used for partial ordering (the ones between ARGS and END)
21854 and seeing if it bubbles up. */
21856 static bool
21857 check_undeduced_parms (tree targs, tree args, tree end)
21859 bool found = false;
21860 int i;
21861 for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
21862 if (TREE_VEC_ELT (targs, i) == NULL_TREE)
21864 found = true;
21865 TREE_VEC_ELT (targs, i) = error_mark_node;
21867 if (found)
21869 tree substed = tsubst_arg_types (args, targs, end, tf_none, NULL_TREE);
21870 if (substed == error_mark_node)
21871 return true;
21873 return false;
21876 /* Given two function templates PAT1 and PAT2, return:
21878 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
21879 -1 if PAT2 is more specialized than PAT1.
21880 0 if neither is more specialized.
21882 LEN indicates the number of parameters we should consider
21883 (defaulted parameters should not be considered).
21885 The 1998 std underspecified function template partial ordering, and
21886 DR214 addresses the issue. We take pairs of arguments, one from
21887 each of the templates, and deduce them against each other. One of
21888 the templates will be more specialized if all the *other*
21889 template's arguments deduce against its arguments and at least one
21890 of its arguments *does* *not* deduce against the other template's
21891 corresponding argument. Deduction is done as for class templates.
21892 The arguments used in deduction have reference and top level cv
21893 qualifiers removed. Iff both arguments were originally reference
21894 types *and* deduction succeeds in both directions, an lvalue reference
21895 wins against an rvalue reference and otherwise the template
21896 with the more cv-qualified argument wins for that pairing (if
21897 neither is more cv-qualified, they both are equal). Unlike regular
21898 deduction, after all the arguments have been deduced in this way,
21899 we do *not* verify the deduced template argument values can be
21900 substituted into non-deduced contexts.
21902 The logic can be a bit confusing here, because we look at deduce1 and
21903 targs1 to see if pat2 is at least as specialized, and vice versa; if we
21904 can find template arguments for pat1 to make arg1 look like arg2, that
21905 means that arg2 is at least as specialized as arg1. */
21908 more_specialized_fn (tree pat1, tree pat2, int len)
21910 tree decl1 = DECL_TEMPLATE_RESULT (pat1);
21911 tree decl2 = DECL_TEMPLATE_RESULT (pat2);
21912 tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
21913 tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
21914 tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
21915 tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
21916 tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
21917 tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
21918 tree origs1, origs2;
21919 bool lose1 = false;
21920 bool lose2 = false;
21922 /* Remove the this parameter from non-static member functions. If
21923 one is a non-static member function and the other is not a static
21924 member function, remove the first parameter from that function
21925 also. This situation occurs for operator functions where we
21926 locate both a member function (with this pointer) and non-member
21927 operator (with explicit first operand). */
21928 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
21930 len--; /* LEN is the number of significant arguments for DECL1 */
21931 args1 = TREE_CHAIN (args1);
21932 if (!DECL_STATIC_FUNCTION_P (decl2))
21933 args2 = TREE_CHAIN (args2);
21935 else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
21937 args2 = TREE_CHAIN (args2);
21938 if (!DECL_STATIC_FUNCTION_P (decl1))
21940 len--;
21941 args1 = TREE_CHAIN (args1);
21945 /* If only one is a conversion operator, they are unordered. */
21946 if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
21947 return 0;
21949 /* Consider the return type for a conversion function */
21950 if (DECL_CONV_FN_P (decl1))
21952 args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
21953 args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
21954 len++;
21957 processing_template_decl++;
21959 origs1 = args1;
21960 origs2 = args2;
21962 while (len--
21963 /* Stop when an ellipsis is seen. */
21964 && args1 != NULL_TREE && args2 != NULL_TREE)
21966 tree arg1 = TREE_VALUE (args1);
21967 tree arg2 = TREE_VALUE (args2);
21968 int deduce1, deduce2;
21969 int quals1 = -1;
21970 int quals2 = -1;
21971 int ref1 = 0;
21972 int ref2 = 0;
21974 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
21975 && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
21977 /* When both arguments are pack expansions, we need only
21978 unify the patterns themselves. */
21979 arg1 = PACK_EXPANSION_PATTERN (arg1);
21980 arg2 = PACK_EXPANSION_PATTERN (arg2);
21982 /* This is the last comparison we need to do. */
21983 len = 0;
21986 /* DR 1847: If a particular P contains no template-parameters that
21987 participate in template argument deduction, that P is not used to
21988 determine the ordering. */
21989 if (!uses_deducible_template_parms (arg1)
21990 && !uses_deducible_template_parms (arg2))
21991 goto next;
21993 if (TREE_CODE (arg1) == REFERENCE_TYPE)
21995 ref1 = TYPE_REF_IS_RVALUE (arg1) + 1;
21996 arg1 = TREE_TYPE (arg1);
21997 quals1 = cp_type_quals (arg1);
22000 if (TREE_CODE (arg2) == REFERENCE_TYPE)
22002 ref2 = TYPE_REF_IS_RVALUE (arg2) + 1;
22003 arg2 = TREE_TYPE (arg2);
22004 quals2 = cp_type_quals (arg2);
22007 arg1 = TYPE_MAIN_VARIANT (arg1);
22008 arg2 = TYPE_MAIN_VARIANT (arg2);
22010 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
22012 int i, len2 = remaining_arguments (args2);
22013 tree parmvec = make_tree_vec (1);
22014 tree argvec = make_tree_vec (len2);
22015 tree ta = args2;
22017 /* Setup the parameter vector, which contains only ARG1. */
22018 TREE_VEC_ELT (parmvec, 0) = arg1;
22020 /* Setup the argument vector, which contains the remaining
22021 arguments. */
22022 for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
22023 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
22025 deduce1 = (unify_pack_expansion (tparms1, targs1, parmvec,
22026 argvec, DEDUCE_EXACT,
22027 /*subr=*/true, /*explain_p=*/false)
22028 == 0);
22030 /* We cannot deduce in the other direction, because ARG1 is
22031 a pack expansion but ARG2 is not. */
22032 deduce2 = 0;
22034 else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
22036 int i, len1 = remaining_arguments (args1);
22037 tree parmvec = make_tree_vec (1);
22038 tree argvec = make_tree_vec (len1);
22039 tree ta = args1;
22041 /* Setup the parameter vector, which contains only ARG1. */
22042 TREE_VEC_ELT (parmvec, 0) = arg2;
22044 /* Setup the argument vector, which contains the remaining
22045 arguments. */
22046 for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
22047 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
22049 deduce2 = (unify_pack_expansion (tparms2, targs2, parmvec,
22050 argvec, DEDUCE_EXACT,
22051 /*subr=*/true, /*explain_p=*/false)
22052 == 0);
22054 /* We cannot deduce in the other direction, because ARG2 is
22055 a pack expansion but ARG1 is not.*/
22056 deduce1 = 0;
22059 else
22061 /* The normal case, where neither argument is a pack
22062 expansion. */
22063 deduce1 = (unify (tparms1, targs1, arg1, arg2,
22064 UNIFY_ALLOW_NONE, /*explain_p=*/false)
22065 == 0);
22066 deduce2 = (unify (tparms2, targs2, arg2, arg1,
22067 UNIFY_ALLOW_NONE, /*explain_p=*/false)
22068 == 0);
22071 /* If we couldn't deduce arguments for tparms1 to make arg1 match
22072 arg2, then arg2 is not as specialized as arg1. */
22073 if (!deduce1)
22074 lose2 = true;
22075 if (!deduce2)
22076 lose1 = true;
22078 /* "If, for a given type, deduction succeeds in both directions
22079 (i.e., the types are identical after the transformations above)
22080 and both P and A were reference types (before being replaced with
22081 the type referred to above):
22082 - if the type from the argument template was an lvalue reference and
22083 the type from the parameter template was not, the argument type is
22084 considered to be more specialized than the other; otherwise,
22085 - if the type from the argument template is more cv-qualified
22086 than the type from the parameter template (as described above),
22087 the argument type is considered to be more specialized than the other;
22088 otherwise,
22089 - neither type is more specialized than the other." */
22091 if (deduce1 && deduce2)
22093 if (ref1 && ref2 && ref1 != ref2)
22095 if (ref1 > ref2)
22096 lose1 = true;
22097 else
22098 lose2 = true;
22100 else if (quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
22102 if ((quals1 & quals2) == quals2)
22103 lose2 = true;
22104 if ((quals1 & quals2) == quals1)
22105 lose1 = true;
22109 if (lose1 && lose2)
22110 /* We've failed to deduce something in either direction.
22111 These must be unordered. */
22112 break;
22114 next:
22116 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
22117 || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
22118 /* We have already processed all of the arguments in our
22119 handing of the pack expansion type. */
22120 len = 0;
22122 args1 = TREE_CHAIN (args1);
22123 args2 = TREE_CHAIN (args2);
22126 /* "In most cases, all template parameters must have values in order for
22127 deduction to succeed, but for partial ordering purposes a template
22128 parameter may remain without a value provided it is not used in the
22129 types being used for partial ordering."
22131 Thus, if we are missing any of the targs1 we need to substitute into
22132 origs1, then pat2 is not as specialized as pat1. This can happen when
22133 there is a nondeduced context. */
22134 if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
22135 lose2 = true;
22136 if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
22137 lose1 = true;
22139 processing_template_decl--;
22141 /* If both deductions succeed, the partial ordering selects the more
22142 constrained template. */
22143 if (!lose1 && !lose2)
22145 tree c1 = get_constraints (DECL_TEMPLATE_RESULT (pat1));
22146 tree c2 = get_constraints (DECL_TEMPLATE_RESULT (pat2));
22147 lose1 = !subsumes_constraints (c1, c2);
22148 lose2 = !subsumes_constraints (c2, c1);
22151 /* All things being equal, if the next argument is a pack expansion
22152 for one function but not for the other, prefer the
22153 non-variadic function. FIXME this is bogus; see c++/41958. */
22154 if (lose1 == lose2
22155 && args1 && TREE_VALUE (args1)
22156 && args2 && TREE_VALUE (args2))
22158 lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
22159 lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
22162 if (lose1 == lose2)
22163 return 0;
22164 else if (!lose1)
22165 return 1;
22166 else
22167 return -1;
22170 /* Determine which of two partial specializations of TMPL is more
22171 specialized.
22173 PAT1 is a TREE_LIST whose TREE_VALUE is the TEMPLATE_DECL corresponding
22174 to the first partial specialization. The TREE_PURPOSE is the
22175 innermost set of template parameters for the partial
22176 specialization. PAT2 is similar, but for the second template.
22178 Return 1 if the first partial specialization is more specialized;
22179 -1 if the second is more specialized; 0 if neither is more
22180 specialized.
22182 See [temp.class.order] for information about determining which of
22183 two templates is more specialized. */
22185 static int
22186 more_specialized_partial_spec (tree tmpl, tree pat1, tree pat2)
22188 tree targs;
22189 int winner = 0;
22190 bool any_deductions = false;
22192 tree tmpl1 = TREE_VALUE (pat1);
22193 tree tmpl2 = TREE_VALUE (pat2);
22194 tree specargs1 = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl1)));
22195 tree specargs2 = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl2)));
22197 /* Just like what happens for functions, if we are ordering between
22198 different template specializations, we may encounter dependent
22199 types in the arguments, and we need our dependency check functions
22200 to behave correctly. */
22201 ++processing_template_decl;
22202 targs = get_partial_spec_bindings (tmpl, tmpl1, specargs2);
22203 if (targs)
22205 --winner;
22206 any_deductions = true;
22209 targs = get_partial_spec_bindings (tmpl, tmpl2, specargs1);
22210 if (targs)
22212 ++winner;
22213 any_deductions = true;
22215 --processing_template_decl;
22217 /* If both deductions succeed, the partial ordering selects the more
22218 constrained template. */
22219 if (!winner && any_deductions)
22220 return more_constrained (tmpl1, tmpl2);
22222 /* In the case of a tie where at least one of the templates
22223 has a parameter pack at the end, the template with the most
22224 non-packed parameters wins. */
22225 if (winner == 0
22226 && any_deductions
22227 && (template_args_variadic_p (TREE_PURPOSE (pat1))
22228 || template_args_variadic_p (TREE_PURPOSE (pat2))))
22230 tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
22231 tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
22232 int len1 = TREE_VEC_LENGTH (args1);
22233 int len2 = TREE_VEC_LENGTH (args2);
22235 /* We don't count the pack expansion at the end. */
22236 if (template_args_variadic_p (TREE_PURPOSE (pat1)))
22237 --len1;
22238 if (template_args_variadic_p (TREE_PURPOSE (pat2)))
22239 --len2;
22241 if (len1 > len2)
22242 return 1;
22243 else if (len1 < len2)
22244 return -1;
22247 return winner;
22250 /* Return the template arguments that will produce the function signature
22251 DECL from the function template FN, with the explicit template
22252 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is true, the return type must
22253 also match. Return NULL_TREE if no satisfactory arguments could be
22254 found. */
22256 static tree
22257 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
22259 int ntparms = DECL_NTPARMS (fn);
22260 tree targs = make_tree_vec (ntparms);
22261 tree decl_type = TREE_TYPE (decl);
22262 tree decl_arg_types;
22263 tree *args;
22264 unsigned int nargs, ix;
22265 tree arg;
22267 gcc_assert (decl != DECL_TEMPLATE_RESULT (fn));
22269 /* Never do unification on the 'this' parameter. */
22270 decl_arg_types = skip_artificial_parms_for (decl,
22271 TYPE_ARG_TYPES (decl_type));
22273 nargs = list_length (decl_arg_types);
22274 args = XALLOCAVEC (tree, nargs);
22275 for (arg = decl_arg_types, ix = 0;
22276 arg != NULL_TREE && arg != void_list_node;
22277 arg = TREE_CHAIN (arg), ++ix)
22278 args[ix] = TREE_VALUE (arg);
22280 if (fn_type_unification (fn, explicit_args, targs,
22281 args, ix,
22282 (check_rettype || DECL_CONV_FN_P (fn)
22283 ? TREE_TYPE (decl_type) : NULL_TREE),
22284 DEDUCE_EXACT, LOOKUP_NORMAL, /*explain_p=*/false,
22285 /*decltype*/false)
22286 == error_mark_node)
22287 return NULL_TREE;
22289 return targs;
22292 /* Return the innermost template arguments that, when applied to a partial
22293 specialization SPEC_TMPL of TMPL, yield the ARGS.
22295 For example, suppose we have:
22297 template <class T, class U> struct S {};
22298 template <class T> struct S<T*, int> {};
22300 Then, suppose we want to get `S<double*, int>'. SPEC_TMPL will be the
22301 partial specialization and the ARGS will be {double*, int}. The resulting
22302 vector will be {double}, indicating that `T' is bound to `double'. */
22304 static tree
22305 get_partial_spec_bindings (tree tmpl, tree spec_tmpl, tree args)
22307 tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (spec_tmpl);
22308 tree spec_args
22309 = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (spec_tmpl)));
22310 int i, ntparms = TREE_VEC_LENGTH (tparms);
22311 tree deduced_args;
22312 tree innermost_deduced_args;
22314 innermost_deduced_args = make_tree_vec (ntparms);
22315 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
22317 deduced_args = copy_node (args);
22318 SET_TMPL_ARGS_LEVEL (deduced_args,
22319 TMPL_ARGS_DEPTH (deduced_args),
22320 innermost_deduced_args);
22322 else
22323 deduced_args = innermost_deduced_args;
22325 bool tried_array_deduction = (cxx_dialect < cxx17);
22326 again:
22327 if (unify (tparms, deduced_args,
22328 INNERMOST_TEMPLATE_ARGS (spec_args),
22329 INNERMOST_TEMPLATE_ARGS (args),
22330 UNIFY_ALLOW_NONE, /*explain_p=*/false))
22331 return NULL_TREE;
22333 for (i = 0; i < ntparms; ++i)
22334 if (! TREE_VEC_ELT (innermost_deduced_args, i))
22336 if (!tried_array_deduction)
22338 try_array_deduction (tparms, innermost_deduced_args,
22339 INNERMOST_TEMPLATE_ARGS (spec_args));
22340 tried_array_deduction = true;
22341 if (TREE_VEC_ELT (innermost_deduced_args, i))
22342 goto again;
22344 return NULL_TREE;
22347 tree tinst = build_tree_list (spec_tmpl, deduced_args);
22348 if (!push_tinst_level (tinst))
22350 excessive_deduction_depth = true;
22351 return NULL_TREE;
22354 /* Verify that nondeduced template arguments agree with the type
22355 obtained from argument deduction.
22357 For example:
22359 struct A { typedef int X; };
22360 template <class T, class U> struct C {};
22361 template <class T> struct C<T, typename T::X> {};
22363 Then with the instantiation `C<A, int>', we can deduce that
22364 `T' is `A' but unify () does not check whether `typename T::X'
22365 is `int'. */
22366 spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
22368 if (spec_args != error_mark_node)
22369 spec_args = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
22370 INNERMOST_TEMPLATE_ARGS (spec_args),
22371 tmpl, tf_none, false, false);
22373 pop_tinst_level ();
22375 if (spec_args == error_mark_node
22376 /* We only need to check the innermost arguments; the other
22377 arguments will always agree. */
22378 || !comp_template_args_porder (INNERMOST_TEMPLATE_ARGS (spec_args),
22379 INNERMOST_TEMPLATE_ARGS (args)))
22380 return NULL_TREE;
22382 /* Now that we have bindings for all of the template arguments,
22383 ensure that the arguments deduced for the template template
22384 parameters have compatible template parameter lists. See the use
22385 of template_template_parm_bindings_ok_p in fn_type_unification
22386 for more information. */
22387 if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
22388 return NULL_TREE;
22390 return deduced_args;
22393 // Compare two function templates T1 and T2 by deducing bindings
22394 // from one against the other. If both deductions succeed, compare
22395 // constraints to see which is more constrained.
22396 static int
22397 more_specialized_inst (tree t1, tree t2)
22399 int fate = 0;
22400 int count = 0;
22402 if (get_bindings (t1, DECL_TEMPLATE_RESULT (t2), NULL_TREE, true))
22404 --fate;
22405 ++count;
22408 if (get_bindings (t2, DECL_TEMPLATE_RESULT (t1), NULL_TREE, true))
22410 ++fate;
22411 ++count;
22414 // If both deductions succeed, then one may be more constrained.
22415 if (count == 2 && fate == 0)
22416 fate = more_constrained (t1, t2);
22418 return fate;
22421 /* TEMPLATES is a TREE_LIST. Each TREE_VALUE is a TEMPLATE_DECL.
22422 Return the TREE_LIST node with the most specialized template, if
22423 any. If there is no most specialized template, the error_mark_node
22424 is returned.
22426 Note that this function does not look at, or modify, the
22427 TREE_PURPOSE or TREE_TYPE of any of the nodes. Since the node
22428 returned is one of the elements of INSTANTIATIONS, callers may
22429 store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
22430 and retrieve it from the value returned. */
22432 tree
22433 most_specialized_instantiation (tree templates)
22435 tree fn, champ;
22437 ++processing_template_decl;
22439 champ = templates;
22440 for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
22442 gcc_assert (TREE_VALUE (champ) != TREE_VALUE (fn));
22443 int fate = more_specialized_inst (TREE_VALUE (champ), TREE_VALUE (fn));
22444 if (fate == -1)
22445 champ = fn;
22446 else if (!fate)
22448 /* Equally specialized, move to next function. If there
22449 is no next function, nothing's most specialized. */
22450 fn = TREE_CHAIN (fn);
22451 champ = fn;
22452 if (!fn)
22453 break;
22457 if (champ)
22458 /* Now verify that champ is better than everything earlier in the
22459 instantiation list. */
22460 for (fn = templates; fn != champ; fn = TREE_CHAIN (fn)) {
22461 if (more_specialized_inst (TREE_VALUE (champ), TREE_VALUE (fn)) != 1)
22463 champ = NULL_TREE;
22464 break;
22468 processing_template_decl--;
22470 if (!champ)
22471 return error_mark_node;
22473 return champ;
22476 /* If DECL is a specialization of some template, return the most
22477 general such template. Otherwise, returns NULL_TREE.
22479 For example, given:
22481 template <class T> struct S { template <class U> void f(U); };
22483 if TMPL is `template <class U> void S<int>::f(U)' this will return
22484 the full template. This function will not trace past partial
22485 specializations, however. For example, given in addition:
22487 template <class T> struct S<T*> { template <class U> void f(U); };
22489 if TMPL is `template <class U> void S<int*>::f(U)' this will return
22490 `template <class T> template <class U> S<T*>::f(U)'. */
22492 tree
22493 most_general_template (tree decl)
22495 if (TREE_CODE (decl) != TEMPLATE_DECL)
22497 if (tree tinfo = get_template_info (decl))
22498 decl = TI_TEMPLATE (tinfo);
22499 /* The TI_TEMPLATE can be an IDENTIFIER_NODE for a
22500 template friend, or a FIELD_DECL for a capture pack. */
22501 if (TREE_CODE (decl) != TEMPLATE_DECL)
22502 return NULL_TREE;
22505 /* Look for more and more general templates. */
22506 while (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
22508 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
22509 (See cp-tree.h for details.) */
22510 if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
22511 break;
22513 if (CLASS_TYPE_P (TREE_TYPE (decl))
22514 && !TYPE_DECL_ALIAS_P (TYPE_NAME (TREE_TYPE (decl)))
22515 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
22516 break;
22518 /* Stop if we run into an explicitly specialized class template. */
22519 if (!DECL_NAMESPACE_SCOPE_P (decl)
22520 && DECL_CONTEXT (decl)
22521 && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
22522 break;
22524 decl = DECL_TI_TEMPLATE (decl);
22527 return decl;
22530 /* Return the most specialized of the template partial specializations
22531 which can produce TARGET, a specialization of some class or variable
22532 template. The value returned is actually a TREE_LIST; the TREE_VALUE is
22533 a TEMPLATE_DECL node corresponding to the partial specialization, while
22534 the TREE_PURPOSE is the set of template arguments that must be
22535 substituted into the template pattern in order to generate TARGET.
22537 If the choice of partial specialization is ambiguous, a diagnostic
22538 is issued, and the error_mark_node is returned. If there are no
22539 partial specializations matching TARGET, then NULL_TREE is
22540 returned, indicating that the primary template should be used. */
22542 static tree
22543 most_specialized_partial_spec (tree target, tsubst_flags_t complain)
22545 tree list = NULL_TREE;
22546 tree t;
22547 tree champ;
22548 int fate;
22549 bool ambiguous_p;
22550 tree outer_args = NULL_TREE;
22551 tree tmpl, args;
22553 if (TYPE_P (target))
22555 tree tinfo = CLASSTYPE_TEMPLATE_INFO (target);
22556 tmpl = TI_TEMPLATE (tinfo);
22557 args = TI_ARGS (tinfo);
22559 else if (TREE_CODE (target) == TEMPLATE_ID_EXPR)
22561 tmpl = TREE_OPERAND (target, 0);
22562 args = TREE_OPERAND (target, 1);
22564 else if (VAR_P (target))
22566 tree tinfo = DECL_TEMPLATE_INFO (target);
22567 tmpl = TI_TEMPLATE (tinfo);
22568 args = TI_ARGS (tinfo);
22570 else
22571 gcc_unreachable ();
22573 tree main_tmpl = most_general_template (tmpl);
22575 /* For determining which partial specialization to use, only the
22576 innermost args are interesting. */
22577 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
22579 outer_args = strip_innermost_template_args (args, 1);
22580 args = INNERMOST_TEMPLATE_ARGS (args);
22583 for (t = DECL_TEMPLATE_SPECIALIZATIONS (main_tmpl); t; t = TREE_CHAIN (t))
22585 tree spec_args;
22586 tree spec_tmpl = TREE_VALUE (t);
22588 if (outer_args)
22590 /* Substitute in the template args from the enclosing class. */
22591 ++processing_template_decl;
22592 spec_tmpl = tsubst (spec_tmpl, outer_args, tf_none, NULL_TREE);
22593 --processing_template_decl;
22596 if (spec_tmpl == error_mark_node)
22597 return error_mark_node;
22599 spec_args = get_partial_spec_bindings (tmpl, spec_tmpl, args);
22600 if (spec_args)
22602 if (outer_args)
22603 spec_args = add_to_template_args (outer_args, spec_args);
22605 /* Keep the candidate only if the constraints are satisfied,
22606 or if we're not compiling with concepts. */
22607 if (!flag_concepts
22608 || constraints_satisfied_p (spec_tmpl, spec_args))
22610 list = tree_cons (spec_args, TREE_VALUE (t), list);
22611 TREE_TYPE (list) = TREE_TYPE (t);
22616 if (! list)
22617 return NULL_TREE;
22619 ambiguous_p = false;
22620 t = list;
22621 champ = t;
22622 t = TREE_CHAIN (t);
22623 for (; t; t = TREE_CHAIN (t))
22625 fate = more_specialized_partial_spec (tmpl, champ, t);
22626 if (fate == 1)
22628 else
22630 if (fate == 0)
22632 t = TREE_CHAIN (t);
22633 if (! t)
22635 ambiguous_p = true;
22636 break;
22639 champ = t;
22643 if (!ambiguous_p)
22644 for (t = list; t && t != champ; t = TREE_CHAIN (t))
22646 fate = more_specialized_partial_spec (tmpl, champ, t);
22647 if (fate != 1)
22649 ambiguous_p = true;
22650 break;
22654 if (ambiguous_p)
22656 const char *str;
22657 char *spaces = NULL;
22658 if (!(complain & tf_error))
22659 return error_mark_node;
22660 if (TYPE_P (target))
22661 error ("ambiguous template instantiation for %q#T", target);
22662 else
22663 error ("ambiguous template instantiation for %q#D", target);
22664 str = ngettext ("candidate is:", "candidates are:", list_length (list));
22665 for (t = list; t; t = TREE_CHAIN (t))
22667 tree subst = build_tree_list (TREE_VALUE (t), TREE_PURPOSE (t));
22668 inform (DECL_SOURCE_LOCATION (TREE_VALUE (t)),
22669 "%s %#qS", spaces ? spaces : str, subst);
22670 spaces = spaces ? spaces : get_spaces (str);
22672 free (spaces);
22673 return error_mark_node;
22676 return champ;
22679 /* Explicitly instantiate DECL. */
22681 void
22682 do_decl_instantiation (tree decl, tree storage)
22684 tree result = NULL_TREE;
22685 int extern_p = 0;
22687 if (!decl || decl == error_mark_node)
22688 /* An error occurred, for which grokdeclarator has already issued
22689 an appropriate message. */
22690 return;
22691 else if (! DECL_LANG_SPECIFIC (decl))
22693 error ("explicit instantiation of non-template %q#D", decl);
22694 return;
22697 bool var_templ = (DECL_TEMPLATE_INFO (decl)
22698 && variable_template_p (DECL_TI_TEMPLATE (decl)));
22700 if (VAR_P (decl) && !var_templ)
22702 /* There is an asymmetry here in the way VAR_DECLs and
22703 FUNCTION_DECLs are handled by grokdeclarator. In the case of
22704 the latter, the DECL we get back will be marked as a
22705 template instantiation, and the appropriate
22706 DECL_TEMPLATE_INFO will be set up. This does not happen for
22707 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
22708 should handle VAR_DECLs as it currently handles
22709 FUNCTION_DECLs. */
22710 if (!DECL_CLASS_SCOPE_P (decl))
22712 error ("%qD is not a static data member of a class template", decl);
22713 return;
22715 result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
22716 if (!result || !VAR_P (result))
22718 error ("no matching template for %qD found", decl);
22719 return;
22721 if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
22723 error ("type %qT for explicit instantiation %qD does not match "
22724 "declared type %qT", TREE_TYPE (result), decl,
22725 TREE_TYPE (decl));
22726 return;
22729 else if (TREE_CODE (decl) != FUNCTION_DECL && !var_templ)
22731 error ("explicit instantiation of %q#D", decl);
22732 return;
22734 else
22735 result = decl;
22737 /* Check for various error cases. Note that if the explicit
22738 instantiation is valid the RESULT will currently be marked as an
22739 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
22740 until we get here. */
22742 if (DECL_TEMPLATE_SPECIALIZATION (result))
22744 /* DR 259 [temp.spec].
22746 Both an explicit instantiation and a declaration of an explicit
22747 specialization shall not appear in a program unless the explicit
22748 instantiation follows a declaration of the explicit specialization.
22750 For a given set of template parameters, if an explicit
22751 instantiation of a template appears after a declaration of an
22752 explicit specialization for that template, the explicit
22753 instantiation has no effect. */
22754 return;
22756 else if (DECL_EXPLICIT_INSTANTIATION (result))
22758 /* [temp.spec]
22760 No program shall explicitly instantiate any template more
22761 than once.
22763 We check DECL_NOT_REALLY_EXTERN so as not to complain when
22764 the first instantiation was `extern' and the second is not,
22765 and EXTERN_P for the opposite case. */
22766 if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
22767 permerror (input_location, "duplicate explicit instantiation of %q#D", result);
22768 /* If an "extern" explicit instantiation follows an ordinary
22769 explicit instantiation, the template is instantiated. */
22770 if (extern_p)
22771 return;
22773 else if (!DECL_IMPLICIT_INSTANTIATION (result))
22775 error ("no matching template for %qD found", result);
22776 return;
22778 else if (!DECL_TEMPLATE_INFO (result))
22780 permerror (input_location, "explicit instantiation of non-template %q#D", result);
22781 return;
22784 if (storage == NULL_TREE)
22786 else if (storage == ridpointers[(int) RID_EXTERN])
22788 if (!in_system_header_at (input_location) && (cxx_dialect == cxx98))
22789 pedwarn (input_location, OPT_Wpedantic,
22790 "ISO C++ 1998 forbids the use of %<extern%> on explicit "
22791 "instantiations");
22792 extern_p = 1;
22794 else
22795 error ("storage class %qD applied to template instantiation", storage);
22797 check_explicit_instantiation_namespace (result);
22798 mark_decl_instantiated (result, extern_p);
22799 if (! extern_p)
22800 instantiate_decl (result, /*defer_ok=*/true,
22801 /*expl_inst_class_mem_p=*/false);
22804 static void
22805 mark_class_instantiated (tree t, int extern_p)
22807 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
22808 SET_CLASSTYPE_INTERFACE_KNOWN (t);
22809 CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
22810 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
22811 if (! extern_p)
22813 CLASSTYPE_DEBUG_REQUESTED (t) = 1;
22814 rest_of_type_compilation (t, 1);
22818 /* Called from do_type_instantiation through binding_table_foreach to
22819 do recursive instantiation for the type bound in ENTRY. */
22820 static void
22821 bt_instantiate_type_proc (binding_entry entry, void *data)
22823 tree storage = *(tree *) data;
22825 if (MAYBE_CLASS_TYPE_P (entry->type)
22826 && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
22827 do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
22830 /* Perform an explicit instantiation of template class T. STORAGE, if
22831 non-null, is the RID for extern, inline or static. COMPLAIN is
22832 nonzero if this is called from the parser, zero if called recursively,
22833 since the standard is unclear (as detailed below). */
22835 void
22836 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
22838 int extern_p = 0;
22839 int nomem_p = 0;
22840 int static_p = 0;
22841 int previous_instantiation_extern_p = 0;
22843 if (TREE_CODE (t) == TYPE_DECL)
22844 t = TREE_TYPE (t);
22846 if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
22848 tree tmpl =
22849 (TYPE_TEMPLATE_INFO (t)) ? TYPE_TI_TEMPLATE (t) : NULL;
22850 if (tmpl)
22851 error ("explicit instantiation of non-class template %qD", tmpl);
22852 else
22853 error ("explicit instantiation of non-template type %qT", t);
22854 return;
22857 complete_type (t);
22859 if (!COMPLETE_TYPE_P (t))
22861 if (complain & tf_error)
22862 error ("explicit instantiation of %q#T before definition of template",
22864 return;
22867 if (storage != NULL_TREE)
22869 if (!in_system_header_at (input_location))
22871 if (storage == ridpointers[(int) RID_EXTERN])
22873 if (cxx_dialect == cxx98)
22874 pedwarn (input_location, OPT_Wpedantic,
22875 "ISO C++ 1998 forbids the use of %<extern%> on "
22876 "explicit instantiations");
22878 else
22879 pedwarn (input_location, OPT_Wpedantic,
22880 "ISO C++ forbids the use of %qE"
22881 " on explicit instantiations", storage);
22884 if (storage == ridpointers[(int) RID_INLINE])
22885 nomem_p = 1;
22886 else if (storage == ridpointers[(int) RID_EXTERN])
22887 extern_p = 1;
22888 else if (storage == ridpointers[(int) RID_STATIC])
22889 static_p = 1;
22890 else
22892 error ("storage class %qD applied to template instantiation",
22893 storage);
22894 extern_p = 0;
22898 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
22900 /* DR 259 [temp.spec].
22902 Both an explicit instantiation and a declaration of an explicit
22903 specialization shall not appear in a program unless the explicit
22904 instantiation follows a declaration of the explicit specialization.
22906 For a given set of template parameters, if an explicit
22907 instantiation of a template appears after a declaration of an
22908 explicit specialization for that template, the explicit
22909 instantiation has no effect. */
22910 return;
22912 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
22914 /* [temp.spec]
22916 No program shall explicitly instantiate any template more
22917 than once.
22919 If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
22920 instantiation was `extern'. If EXTERN_P then the second is.
22921 These cases are OK. */
22922 previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
22924 if (!previous_instantiation_extern_p && !extern_p
22925 && (complain & tf_error))
22926 permerror (input_location, "duplicate explicit instantiation of %q#T", t);
22928 /* If we've already instantiated the template, just return now. */
22929 if (!CLASSTYPE_INTERFACE_ONLY (t))
22930 return;
22933 check_explicit_instantiation_namespace (TYPE_NAME (t));
22934 mark_class_instantiated (t, extern_p);
22936 if (nomem_p)
22937 return;
22939 /* In contrast to implicit instantiation, where only the
22940 declarations, and not the definitions, of members are
22941 instantiated, we have here:
22943 [temp.explicit]
22945 The explicit instantiation of a class template specialization
22946 implies the instantiation of all of its members not
22947 previously explicitly specialized in the translation unit
22948 containing the explicit instantiation.
22950 Of course, we can't instantiate member template classes, since we
22951 don't have any arguments for them. Note that the standard is
22952 unclear on whether the instantiation of the members are
22953 *explicit* instantiations or not. However, the most natural
22954 interpretation is that it should be an explicit
22955 instantiation. */
22956 for (tree fld = TYPE_FIELDS (t); fld; fld = DECL_CHAIN (fld))
22957 if ((VAR_P (fld)
22958 || (TREE_CODE (fld) == FUNCTION_DECL
22959 && !static_p
22960 && user_provided_p (fld)))
22961 && DECL_TEMPLATE_INSTANTIATION (fld))
22963 mark_decl_instantiated (fld, extern_p);
22964 if (! extern_p)
22965 instantiate_decl (fld, /*defer_ok=*/true,
22966 /*expl_inst_class_mem_p=*/true);
22969 if (CLASSTYPE_NESTED_UTDS (t))
22970 binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
22971 bt_instantiate_type_proc, &storage);
22974 /* Given a function DECL, which is a specialization of TMPL, modify
22975 DECL to be a re-instantiation of TMPL with the same template
22976 arguments. TMPL should be the template into which tsubst'ing
22977 should occur for DECL, not the most general template.
22979 One reason for doing this is a scenario like this:
22981 template <class T>
22982 void f(const T&, int i);
22984 void g() { f(3, 7); }
22986 template <class T>
22987 void f(const T& t, const int i) { }
22989 Note that when the template is first instantiated, with
22990 instantiate_template, the resulting DECL will have no name for the
22991 first parameter, and the wrong type for the second. So, when we go
22992 to instantiate the DECL, we regenerate it. */
22994 static void
22995 regenerate_decl_from_template (tree decl, tree tmpl, tree args)
22997 /* The arguments used to instantiate DECL, from the most general
22998 template. */
22999 tree code_pattern;
23001 code_pattern = DECL_TEMPLATE_RESULT (tmpl);
23003 /* Make sure that we can see identifiers, and compute access
23004 correctly. */
23005 push_access_scope (decl);
23007 if (TREE_CODE (decl) == FUNCTION_DECL)
23009 tree decl_parm;
23010 tree pattern_parm;
23011 tree specs;
23012 int args_depth;
23013 int parms_depth;
23015 args_depth = TMPL_ARGS_DEPTH (args);
23016 parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
23017 if (args_depth > parms_depth)
23018 args = get_innermost_template_args (args, parms_depth);
23020 specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
23021 args, tf_error, NULL_TREE,
23022 /*defer_ok*/false);
23023 if (specs && specs != error_mark_node)
23024 TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
23025 specs);
23027 /* Merge parameter declarations. */
23028 decl_parm = skip_artificial_parms_for (decl,
23029 DECL_ARGUMENTS (decl));
23030 pattern_parm
23031 = skip_artificial_parms_for (code_pattern,
23032 DECL_ARGUMENTS (code_pattern));
23033 while (decl_parm && !DECL_PACK_P (pattern_parm))
23035 tree parm_type;
23036 tree attributes;
23038 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
23039 DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
23040 parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
23041 NULL_TREE);
23042 parm_type = type_decays_to (parm_type);
23043 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
23044 TREE_TYPE (decl_parm) = parm_type;
23045 attributes = DECL_ATTRIBUTES (pattern_parm);
23046 if (DECL_ATTRIBUTES (decl_parm) != attributes)
23048 DECL_ATTRIBUTES (decl_parm) = attributes;
23049 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
23051 decl_parm = DECL_CHAIN (decl_parm);
23052 pattern_parm = DECL_CHAIN (pattern_parm);
23054 /* Merge any parameters that match with the function parameter
23055 pack. */
23056 if (pattern_parm && DECL_PACK_P (pattern_parm))
23058 int i, len;
23059 tree expanded_types;
23060 /* Expand the TYPE_PACK_EXPANSION that provides the types for
23061 the parameters in this function parameter pack. */
23062 expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm),
23063 args, tf_error, NULL_TREE);
23064 len = TREE_VEC_LENGTH (expanded_types);
23065 for (i = 0; i < len; i++)
23067 tree parm_type;
23068 tree attributes;
23070 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
23071 /* Rename the parameter to include the index. */
23072 DECL_NAME (decl_parm) =
23073 make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
23074 parm_type = TREE_VEC_ELT (expanded_types, i);
23075 parm_type = type_decays_to (parm_type);
23076 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
23077 TREE_TYPE (decl_parm) = parm_type;
23078 attributes = DECL_ATTRIBUTES (pattern_parm);
23079 if (DECL_ATTRIBUTES (decl_parm) != attributes)
23081 DECL_ATTRIBUTES (decl_parm) = attributes;
23082 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
23084 decl_parm = DECL_CHAIN (decl_parm);
23087 /* Merge additional specifiers from the CODE_PATTERN. */
23088 if (DECL_DECLARED_INLINE_P (code_pattern)
23089 && !DECL_DECLARED_INLINE_P (decl))
23090 DECL_DECLARED_INLINE_P (decl) = 1;
23092 else if (VAR_P (decl))
23094 start_lambda_scope (decl);
23095 DECL_INITIAL (decl) =
23096 tsubst_expr (DECL_INITIAL (code_pattern), args,
23097 tf_error, DECL_TI_TEMPLATE (decl),
23098 /*integral_constant_expression_p=*/false);
23099 finish_lambda_scope ();
23100 if (VAR_HAD_UNKNOWN_BOUND (decl))
23101 TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
23102 tf_error, DECL_TI_TEMPLATE (decl));
23104 else
23105 gcc_unreachable ();
23107 pop_access_scope (decl);
23110 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
23111 substituted to get DECL. */
23113 tree
23114 template_for_substitution (tree decl)
23116 tree tmpl = DECL_TI_TEMPLATE (decl);
23118 /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
23119 for the instantiation. This is not always the most general
23120 template. Consider, for example:
23122 template <class T>
23123 struct S { template <class U> void f();
23124 template <> void f<int>(); };
23126 and an instantiation of S<double>::f<int>. We want TD to be the
23127 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
23128 while (/* An instantiation cannot have a definition, so we need a
23129 more general template. */
23130 DECL_TEMPLATE_INSTANTIATION (tmpl)
23131 /* We must also deal with friend templates. Given:
23133 template <class T> struct S {
23134 template <class U> friend void f() {};
23137 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
23138 so far as the language is concerned, but that's still
23139 where we get the pattern for the instantiation from. On
23140 other hand, if the definition comes outside the class, say:
23142 template <class T> struct S {
23143 template <class U> friend void f();
23145 template <class U> friend void f() {}
23147 we don't need to look any further. That's what the check for
23148 DECL_INITIAL is for. */
23149 || (TREE_CODE (decl) == FUNCTION_DECL
23150 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
23151 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
23153 /* The present template, TD, should not be a definition. If it
23154 were a definition, we should be using it! Note that we
23155 cannot restructure the loop to just keep going until we find
23156 a template with a definition, since that might go too far if
23157 a specialization was declared, but not defined. */
23159 /* Fetch the more general template. */
23160 tmpl = DECL_TI_TEMPLATE (tmpl);
23163 return tmpl;
23166 /* Returns true if we need to instantiate this template instance even if we
23167 know we aren't going to emit it. */
23169 bool
23170 always_instantiate_p (tree decl)
23172 /* We always instantiate inline functions so that we can inline them. An
23173 explicit instantiation declaration prohibits implicit instantiation of
23174 non-inline functions. With high levels of optimization, we would
23175 normally inline non-inline functions -- but we're not allowed to do
23176 that for "extern template" functions. Therefore, we check
23177 DECL_DECLARED_INLINE_P, rather than possibly_inlined_p. */
23178 return ((TREE_CODE (decl) == FUNCTION_DECL
23179 && (DECL_DECLARED_INLINE_P (decl)
23180 || type_uses_auto (TREE_TYPE (TREE_TYPE (decl)))))
23181 /* And we need to instantiate static data members so that
23182 their initializers are available in integral constant
23183 expressions. */
23184 || (VAR_P (decl)
23185 && decl_maybe_constant_var_p (decl)));
23188 /* If FN has a noexcept-specifier that hasn't been instantiated yet,
23189 instantiate it now, modifying TREE_TYPE (fn). Returns false on
23190 error, true otherwise. */
23192 bool
23193 maybe_instantiate_noexcept (tree fn, tsubst_flags_t complain)
23195 tree fntype, spec, noex, clone;
23197 /* Don't instantiate a noexcept-specification from template context. */
23198 if (processing_template_decl)
23199 return true;
23201 if (DECL_CLONED_FUNCTION_P (fn))
23202 fn = DECL_CLONED_FUNCTION (fn);
23203 fntype = TREE_TYPE (fn);
23204 spec = TYPE_RAISES_EXCEPTIONS (fntype);
23206 if (!spec || !TREE_PURPOSE (spec))
23207 return true;
23209 noex = TREE_PURPOSE (spec);
23211 if (TREE_CODE (noex) == DEFERRED_NOEXCEPT)
23213 static hash_set<tree>* fns = new hash_set<tree>;
23214 bool added = false;
23215 if (DEFERRED_NOEXCEPT_PATTERN (noex) == NULL_TREE)
23216 spec = get_defaulted_eh_spec (fn, complain);
23217 else if (!(added = !fns->add (fn)))
23219 /* If hash_set::add returns true, the element was already there. */
23220 location_t loc = EXPR_LOC_OR_LOC (DEFERRED_NOEXCEPT_PATTERN (noex),
23221 DECL_SOURCE_LOCATION (fn));
23222 error_at (loc,
23223 "exception specification of %qD depends on itself",
23224 fn);
23225 spec = noexcept_false_spec;
23227 else if (push_tinst_level (fn))
23229 push_access_scope (fn);
23230 push_deferring_access_checks (dk_no_deferred);
23231 input_location = DECL_SOURCE_LOCATION (fn);
23232 noex = tsubst_copy_and_build (DEFERRED_NOEXCEPT_PATTERN (noex),
23233 DEFERRED_NOEXCEPT_ARGS (noex),
23234 tf_warning_or_error, fn,
23235 /*function_p=*/false,
23236 /*integral_constant_expression_p=*/true);
23237 pop_deferring_access_checks ();
23238 pop_access_scope (fn);
23239 pop_tinst_level ();
23240 spec = build_noexcept_spec (noex, tf_warning_or_error);
23241 if (spec == error_mark_node)
23242 spec = noexcept_false_spec;
23244 else
23245 spec = noexcept_false_spec;
23247 if (added)
23248 fns->remove (fn);
23250 if (spec == error_mark_node)
23251 return false;
23253 TREE_TYPE (fn) = build_exception_variant (fntype, spec);
23256 FOR_EACH_CLONE (clone, fn)
23258 if (TREE_TYPE (clone) == fntype)
23259 TREE_TYPE (clone) = TREE_TYPE (fn);
23260 else
23261 TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone), spec);
23264 return true;
23267 /* We're starting to process the function INST, an instantiation of PATTERN;
23268 add their parameters to local_specializations. */
23270 static void
23271 register_parameter_specializations (tree pattern, tree inst)
23273 tree tmpl_parm = DECL_ARGUMENTS (pattern);
23274 tree spec_parm = DECL_ARGUMENTS (inst);
23275 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (inst))
23277 register_local_specialization (spec_parm, tmpl_parm);
23278 spec_parm = skip_artificial_parms_for (inst, spec_parm);
23279 tmpl_parm = skip_artificial_parms_for (pattern, tmpl_parm);
23281 for (; tmpl_parm; tmpl_parm = DECL_CHAIN (tmpl_parm))
23283 if (!DECL_PACK_P (tmpl_parm))
23285 register_local_specialization (spec_parm, tmpl_parm);
23286 spec_parm = DECL_CHAIN (spec_parm);
23288 else
23290 /* Register the (value) argument pack as a specialization of
23291 TMPL_PARM, then move on. */
23292 tree argpack = extract_fnparm_pack (tmpl_parm, &spec_parm);
23293 register_local_specialization (argpack, tmpl_parm);
23296 gcc_assert (!spec_parm);
23299 /* Produce the definition of D, a _DECL generated from a template. If
23300 DEFER_OK is true, then we don't have to actually do the
23301 instantiation now; we just have to do it sometime. Normally it is
23302 an error if this is an explicit instantiation but D is undefined.
23303 EXPL_INST_CLASS_MEM_P is true iff D is a member of an explicitly
23304 instantiated class template. */
23306 tree
23307 instantiate_decl (tree d, bool defer_ok, bool expl_inst_class_mem_p)
23309 tree tmpl = DECL_TI_TEMPLATE (d);
23310 tree gen_args;
23311 tree args;
23312 tree td;
23313 tree code_pattern;
23314 tree spec;
23315 tree gen_tmpl;
23316 bool pattern_defined;
23317 location_t saved_loc = input_location;
23318 int saved_unevaluated_operand = cp_unevaluated_operand;
23319 int saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
23320 bool external_p;
23321 bool deleted_p;
23323 /* This function should only be used to instantiate templates for
23324 functions and static member variables. */
23325 gcc_assert (VAR_OR_FUNCTION_DECL_P (d));
23327 /* A concept is never instantiated. */
23328 gcc_assert (!DECL_DECLARED_CONCEPT_P (d));
23330 /* Variables are never deferred; if instantiation is required, they
23331 are instantiated right away. That allows for better code in the
23332 case that an expression refers to the value of the variable --
23333 if the variable has a constant value the referring expression can
23334 take advantage of that fact. */
23335 if (VAR_P (d))
23336 defer_ok = false;
23338 /* Don't instantiate cloned functions. Instead, instantiate the
23339 functions they cloned. */
23340 if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
23341 d = DECL_CLONED_FUNCTION (d);
23343 if (DECL_TEMPLATE_INSTANTIATED (d)
23344 || (TREE_CODE (d) == FUNCTION_DECL
23345 && DECL_DEFAULTED_FN (d) && DECL_INITIAL (d))
23346 || DECL_TEMPLATE_SPECIALIZATION (d))
23347 /* D has already been instantiated or explicitly specialized, so
23348 there's nothing for us to do here.
23350 It might seem reasonable to check whether or not D is an explicit
23351 instantiation, and, if so, stop here. But when an explicit
23352 instantiation is deferred until the end of the compilation,
23353 DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
23354 the instantiation. */
23355 return d;
23357 /* Check to see whether we know that this template will be
23358 instantiated in some other file, as with "extern template"
23359 extension. */
23360 external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
23362 /* In general, we do not instantiate such templates. */
23363 if (external_p && !always_instantiate_p (d))
23364 return d;
23366 gen_tmpl = most_general_template (tmpl);
23367 gen_args = DECL_TI_ARGS (d);
23369 if (tmpl != gen_tmpl)
23370 /* We should already have the extra args. */
23371 gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
23372 == TMPL_ARGS_DEPTH (gen_args));
23373 /* And what's in the hash table should match D. */
23374 gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
23375 || spec == NULL_TREE);
23377 /* This needs to happen before any tsubsting. */
23378 if (! push_tinst_level (d))
23379 return d;
23381 timevar_push (TV_TEMPLATE_INST);
23383 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
23384 for the instantiation. */
23385 td = template_for_substitution (d);
23386 args = gen_args;
23388 if (VAR_P (d))
23390 /* Look up an explicit specialization, if any. */
23391 tree tid = lookup_template_variable (gen_tmpl, gen_args);
23392 tree elt = most_specialized_partial_spec (tid, tf_warning_or_error);
23393 if (elt && elt != error_mark_node)
23395 td = TREE_VALUE (elt);
23396 args = TREE_PURPOSE (elt);
23400 code_pattern = DECL_TEMPLATE_RESULT (td);
23402 /* We should never be trying to instantiate a member of a class
23403 template or partial specialization. */
23404 gcc_assert (d != code_pattern);
23406 if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
23407 || DECL_TEMPLATE_SPECIALIZATION (td))
23408 /* In the case of a friend template whose definition is provided
23409 outside the class, we may have too many arguments. Drop the
23410 ones we don't need. The same is true for specializations. */
23411 args = get_innermost_template_args
23412 (args, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td)));
23414 if (TREE_CODE (d) == FUNCTION_DECL)
23416 deleted_p = DECL_DELETED_FN (code_pattern);
23417 pattern_defined = ((DECL_SAVED_TREE (code_pattern) != NULL_TREE
23418 && DECL_INITIAL (code_pattern) != error_mark_node)
23419 || DECL_DEFAULTED_OUTSIDE_CLASS_P (code_pattern)
23420 || deleted_p);
23422 else
23424 deleted_p = false;
23425 if (DECL_CLASS_SCOPE_P (code_pattern))
23426 pattern_defined = (! DECL_IN_AGGR_P (code_pattern)
23427 || DECL_INLINE_VAR_P (code_pattern));
23428 else
23429 pattern_defined = ! DECL_EXTERNAL (code_pattern);
23432 /* We may be in the middle of deferred access check. Disable it now. */
23433 push_deferring_access_checks (dk_no_deferred);
23435 /* Unless an explicit instantiation directive has already determined
23436 the linkage of D, remember that a definition is available for
23437 this entity. */
23438 if (pattern_defined
23439 && !DECL_INTERFACE_KNOWN (d)
23440 && !DECL_NOT_REALLY_EXTERN (d))
23441 mark_definable (d);
23443 DECL_SOURCE_LOCATION (td) = DECL_SOURCE_LOCATION (code_pattern);
23444 DECL_SOURCE_LOCATION (d) = DECL_SOURCE_LOCATION (code_pattern);
23445 input_location = DECL_SOURCE_LOCATION (d);
23447 /* If D is a member of an explicitly instantiated class template,
23448 and no definition is available, treat it like an implicit
23449 instantiation. */
23450 if (!pattern_defined && expl_inst_class_mem_p
23451 && DECL_EXPLICIT_INSTANTIATION (d))
23453 /* Leave linkage flags alone on instantiations with anonymous
23454 visibility. */
23455 if (TREE_PUBLIC (d))
23457 DECL_NOT_REALLY_EXTERN (d) = 0;
23458 DECL_INTERFACE_KNOWN (d) = 0;
23460 SET_DECL_IMPLICIT_INSTANTIATION (d);
23463 /* Defer all other templates, unless we have been explicitly
23464 forbidden from doing so. */
23465 if (/* If there is no definition, we cannot instantiate the
23466 template. */
23467 ! pattern_defined
23468 /* If it's OK to postpone instantiation, do so. */
23469 || defer_ok
23470 /* If this is a static data member that will be defined
23471 elsewhere, we don't want to instantiate the entire data
23472 member, but we do want to instantiate the initializer so that
23473 we can substitute that elsewhere. */
23474 || (external_p && VAR_P (d))
23475 /* Handle here a deleted function too, avoid generating
23476 its body (c++/61080). */
23477 || deleted_p)
23479 /* The definition of the static data member is now required so
23480 we must substitute the initializer. */
23481 if (VAR_P (d)
23482 && !DECL_INITIAL (d)
23483 && DECL_INITIAL (code_pattern))
23485 tree ns;
23486 tree init;
23487 bool const_init = false;
23488 bool enter_context = DECL_CLASS_SCOPE_P (d);
23490 ns = decl_namespace_context (d);
23491 push_nested_namespace (ns);
23492 if (enter_context)
23493 push_nested_class (DECL_CONTEXT (d));
23494 init = tsubst_expr (DECL_INITIAL (code_pattern),
23495 args,
23496 tf_warning_or_error, NULL_TREE,
23497 /*integral_constant_expression_p=*/false);
23498 /* If instantiating the initializer involved instantiating this
23499 again, don't call cp_finish_decl twice. */
23500 if (!DECL_INITIAL (d))
23502 /* Make sure the initializer is still constant, in case of
23503 circular dependency (template/instantiate6.C). */
23504 const_init
23505 = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
23506 cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
23507 /*asmspec_tree=*/NULL_TREE,
23508 LOOKUP_ONLYCONVERTING);
23510 if (enter_context)
23511 pop_nested_class ();
23512 pop_nested_namespace (ns);
23515 /* We restore the source position here because it's used by
23516 add_pending_template. */
23517 input_location = saved_loc;
23519 if (at_eof && !pattern_defined
23520 && DECL_EXPLICIT_INSTANTIATION (d)
23521 && DECL_NOT_REALLY_EXTERN (d))
23522 /* [temp.explicit]
23524 The definition of a non-exported function template, a
23525 non-exported member function template, or a non-exported
23526 member function or static data member of a class template
23527 shall be present in every translation unit in which it is
23528 explicitly instantiated. */
23529 permerror (input_location, "explicit instantiation of %qD "
23530 "but no definition available", d);
23532 /* If we're in unevaluated context, we just wanted to get the
23533 constant value; this isn't an odr use, so don't queue
23534 a full instantiation. */
23535 if (cp_unevaluated_operand != 0)
23536 goto out;
23537 /* ??? Historically, we have instantiated inline functions, even
23538 when marked as "extern template". */
23539 if (!(external_p && VAR_P (d)))
23540 add_pending_template (d);
23541 goto out;
23543 /* Tell the repository that D is available in this translation unit
23544 -- and see if it is supposed to be instantiated here. */
23545 if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
23547 /* In a PCH file, despite the fact that the repository hasn't
23548 requested instantiation in the PCH it is still possible that
23549 an instantiation will be required in a file that includes the
23550 PCH. */
23551 if (pch_file)
23552 add_pending_template (d);
23553 /* Instantiate inline functions so that the inliner can do its
23554 job, even though we'll not be emitting a copy of this
23555 function. */
23556 if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
23557 goto out;
23560 bool push_to_top, nested;
23561 tree fn_context;
23562 fn_context = decl_function_context (d);
23563 if (LAMBDA_FUNCTION_P (d))
23564 /* tsubst_lambda_expr resolved any references to enclosing functions. */
23565 fn_context = NULL_TREE;
23566 nested = current_function_decl != NULL_TREE;
23567 push_to_top = !(nested && fn_context == current_function_decl);
23569 vec<tree> omp_privatization_save;
23570 if (nested)
23571 save_omp_privatization_clauses (omp_privatization_save);
23573 if (push_to_top)
23574 push_to_top_level ();
23575 else
23577 push_function_context ();
23578 cp_unevaluated_operand = 0;
23579 c_inhibit_evaluation_warnings = 0;
23582 /* Mark D as instantiated so that recursive calls to
23583 instantiate_decl do not try to instantiate it again. */
23584 DECL_TEMPLATE_INSTANTIATED (d) = 1;
23586 /* Regenerate the declaration in case the template has been modified
23587 by a subsequent redeclaration. */
23588 regenerate_decl_from_template (d, td, args);
23590 /* We already set the file and line above. Reset them now in case
23591 they changed as a result of calling regenerate_decl_from_template. */
23592 input_location = DECL_SOURCE_LOCATION (d);
23594 if (VAR_P (d))
23596 tree init;
23597 bool const_init = false;
23599 /* Clear out DECL_RTL; whatever was there before may not be right
23600 since we've reset the type of the declaration. */
23601 SET_DECL_RTL (d, NULL);
23602 DECL_IN_AGGR_P (d) = 0;
23604 /* The initializer is placed in DECL_INITIAL by
23605 regenerate_decl_from_template so we don't need to
23606 push/pop_access_scope again here. Pull it out so that
23607 cp_finish_decl can process it. */
23608 init = DECL_INITIAL (d);
23609 DECL_INITIAL (d) = NULL_TREE;
23610 DECL_INITIALIZED_P (d) = 0;
23612 /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
23613 initializer. That function will defer actual emission until
23614 we have a chance to determine linkage. */
23615 DECL_EXTERNAL (d) = 0;
23617 /* Enter the scope of D so that access-checking works correctly. */
23618 bool enter_context = DECL_CLASS_SCOPE_P (d);
23619 if (enter_context)
23620 push_nested_class (DECL_CONTEXT (d));
23622 const_init = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
23623 cp_finish_decl (d, init, const_init, NULL_TREE, 0);
23625 if (enter_context)
23626 pop_nested_class ();
23628 if (variable_template_p (gen_tmpl))
23629 note_variable_template_instantiation (d);
23631 else if (TREE_CODE (d) == FUNCTION_DECL && DECL_DEFAULTED_FN (code_pattern))
23632 synthesize_method (d);
23633 else if (TREE_CODE (d) == FUNCTION_DECL)
23635 /* Set up the list of local specializations. */
23636 local_specialization_stack lss (push_to_top ? lss_blank : lss_copy);
23637 tree block = NULL_TREE;
23639 /* Set up context. */
23640 if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern)
23641 && TREE_CODE (DECL_CONTEXT (code_pattern)) == FUNCTION_DECL)
23642 block = push_stmt_list ();
23643 else
23644 start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
23646 /* Some typedefs referenced from within the template code need to be
23647 access checked at template instantiation time, i.e now. These
23648 types were added to the template at parsing time. Let's get those
23649 and perform the access checks then. */
23650 perform_typedefs_access_check (DECL_TEMPLATE_RESULT (td),
23651 args);
23653 /* Create substitution entries for the parameters. */
23654 register_parameter_specializations (code_pattern, d);
23656 /* Substitute into the body of the function. */
23657 if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern))
23658 tsubst_omp_udr (DECL_SAVED_TREE (code_pattern), args,
23659 tf_warning_or_error, tmpl);
23660 else
23662 tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
23663 tf_warning_or_error, tmpl,
23664 /*integral_constant_expression_p=*/false);
23666 /* Set the current input_location to the end of the function
23667 so that finish_function knows where we are. */
23668 input_location
23669 = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
23671 /* Remember if we saw an infinite loop in the template. */
23672 current_function_infinite_loop
23673 = DECL_STRUCT_FUNCTION (code_pattern)->language->infinite_loop;
23676 /* Finish the function. */
23677 if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern)
23678 && TREE_CODE (DECL_CONTEXT (code_pattern)) == FUNCTION_DECL)
23679 DECL_SAVED_TREE (d) = pop_stmt_list (block);
23680 else
23682 d = finish_function (/*inline_p=*/false);
23683 expand_or_defer_fn (d);
23686 if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern))
23687 cp_check_omp_declare_reduction (d);
23690 /* We're not deferring instantiation any more. */
23691 TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
23693 if (push_to_top)
23694 pop_from_top_level ();
23695 else
23696 pop_function_context ();
23698 if (nested)
23699 restore_omp_privatization_clauses (omp_privatization_save);
23701 out:
23702 pop_deferring_access_checks ();
23703 timevar_pop (TV_TEMPLATE_INST);
23704 pop_tinst_level ();
23705 input_location = saved_loc;
23706 cp_unevaluated_operand = saved_unevaluated_operand;
23707 c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
23709 return d;
23712 /* Run through the list of templates that we wish we could
23713 instantiate, and instantiate any we can. RETRIES is the
23714 number of times we retry pending template instantiation. */
23716 void
23717 instantiate_pending_templates (int retries)
23719 int reconsider;
23720 location_t saved_loc = input_location;
23722 /* Instantiating templates may trigger vtable generation. This in turn
23723 may require further template instantiations. We place a limit here
23724 to avoid infinite loop. */
23725 if (pending_templates && retries >= max_tinst_depth)
23727 tree decl = pending_templates->tinst->decl;
23729 fatal_error (input_location,
23730 "template instantiation depth exceeds maximum of %d"
23731 " instantiating %q+D, possibly from virtual table generation"
23732 " (use -ftemplate-depth= to increase the maximum)",
23733 max_tinst_depth, decl);
23734 if (TREE_CODE (decl) == FUNCTION_DECL)
23735 /* Pretend that we defined it. */
23736 DECL_INITIAL (decl) = error_mark_node;
23737 return;
23742 struct pending_template **t = &pending_templates;
23743 struct pending_template *last = NULL;
23744 reconsider = 0;
23745 while (*t)
23747 tree instantiation = reopen_tinst_level ((*t)->tinst);
23748 bool complete = false;
23750 if (TYPE_P (instantiation))
23752 if (!COMPLETE_TYPE_P (instantiation))
23754 instantiate_class_template (instantiation);
23755 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
23756 for (tree fld = TYPE_FIELDS (instantiation);
23757 fld; fld = TREE_CHAIN (fld))
23758 if ((VAR_P (fld)
23759 || (TREE_CODE (fld) == FUNCTION_DECL
23760 && !DECL_ARTIFICIAL (fld)))
23761 && DECL_TEMPLATE_INSTANTIATION (fld))
23762 instantiate_decl (fld,
23763 /*defer_ok=*/false,
23764 /*expl_inst_class_mem_p=*/false);
23766 if (COMPLETE_TYPE_P (instantiation))
23767 reconsider = 1;
23770 complete = COMPLETE_TYPE_P (instantiation);
23772 else
23774 if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
23775 && !DECL_TEMPLATE_INSTANTIATED (instantiation))
23777 instantiation
23778 = instantiate_decl (instantiation,
23779 /*defer_ok=*/false,
23780 /*expl_inst_class_mem_p=*/false);
23781 if (DECL_TEMPLATE_INSTANTIATED (instantiation))
23782 reconsider = 1;
23785 complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
23786 || DECL_TEMPLATE_INSTANTIATED (instantiation));
23789 if (complete)
23790 /* If INSTANTIATION has been instantiated, then we don't
23791 need to consider it again in the future. */
23792 *t = (*t)->next;
23793 else
23795 last = *t;
23796 t = &(*t)->next;
23798 tinst_depth = 0;
23799 current_tinst_level = NULL;
23801 last_pending_template = last;
23803 while (reconsider);
23805 input_location = saved_loc;
23808 /* Substitute ARGVEC into T, which is a list of initializers for
23809 either base class or a non-static data member. The TREE_PURPOSEs
23810 are DECLs, and the TREE_VALUEs are the initializer values. Used by
23811 instantiate_decl. */
23813 static tree
23814 tsubst_initializer_list (tree t, tree argvec)
23816 tree inits = NULL_TREE;
23817 tree target_ctor = error_mark_node;
23819 for (; t; t = TREE_CHAIN (t))
23821 tree decl;
23822 tree init;
23823 tree expanded_bases = NULL_TREE;
23824 tree expanded_arguments = NULL_TREE;
23825 int i, len = 1;
23827 if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
23829 tree expr;
23830 tree arg;
23832 /* Expand the base class expansion type into separate base
23833 classes. */
23834 expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
23835 tf_warning_or_error,
23836 NULL_TREE);
23837 if (expanded_bases == error_mark_node)
23838 continue;
23840 /* We'll be building separate TREE_LISTs of arguments for
23841 each base. */
23842 len = TREE_VEC_LENGTH (expanded_bases);
23843 expanded_arguments = make_tree_vec (len);
23844 for (i = 0; i < len; i++)
23845 TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
23847 /* Build a dummy EXPR_PACK_EXPANSION that will be used to
23848 expand each argument in the TREE_VALUE of t. */
23849 expr = make_node (EXPR_PACK_EXPANSION);
23850 PACK_EXPANSION_LOCAL_P (expr) = true;
23851 PACK_EXPANSION_PARAMETER_PACKS (expr) =
23852 PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
23854 if (TREE_VALUE (t) == void_type_node)
23855 /* VOID_TYPE_NODE is used to indicate
23856 value-initialization. */
23858 for (i = 0; i < len; i++)
23859 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
23861 else
23863 /* Substitute parameter packs into each argument in the
23864 TREE_LIST. */
23865 in_base_initializer = 1;
23866 for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
23868 tree expanded_exprs;
23870 /* Expand the argument. */
23871 SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
23872 expanded_exprs
23873 = tsubst_pack_expansion (expr, argvec,
23874 tf_warning_or_error,
23875 NULL_TREE);
23876 if (expanded_exprs == error_mark_node)
23877 continue;
23879 /* Prepend each of the expanded expressions to the
23880 corresponding TREE_LIST in EXPANDED_ARGUMENTS. */
23881 for (i = 0; i < len; i++)
23883 TREE_VEC_ELT (expanded_arguments, i) =
23884 tree_cons (NULL_TREE,
23885 TREE_VEC_ELT (expanded_exprs, i),
23886 TREE_VEC_ELT (expanded_arguments, i));
23889 in_base_initializer = 0;
23891 /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
23892 since we built them backwards. */
23893 for (i = 0; i < len; i++)
23895 TREE_VEC_ELT (expanded_arguments, i) =
23896 nreverse (TREE_VEC_ELT (expanded_arguments, i));
23901 for (i = 0; i < len; ++i)
23903 if (expanded_bases)
23905 decl = TREE_VEC_ELT (expanded_bases, i);
23906 decl = expand_member_init (decl);
23907 init = TREE_VEC_ELT (expanded_arguments, i);
23909 else
23911 tree tmp;
23912 decl = tsubst_copy (TREE_PURPOSE (t), argvec,
23913 tf_warning_or_error, NULL_TREE);
23915 decl = expand_member_init (decl);
23916 if (decl && !DECL_P (decl))
23917 in_base_initializer = 1;
23919 init = TREE_VALUE (t);
23920 tmp = init;
23921 if (init != void_type_node)
23922 init = tsubst_expr (init, argvec,
23923 tf_warning_or_error, NULL_TREE,
23924 /*integral_constant_expression_p=*/false);
23925 if (init == NULL_TREE && tmp != NULL_TREE)
23926 /* If we had an initializer but it instantiated to nothing,
23927 value-initialize the object. This will only occur when
23928 the initializer was a pack expansion where the parameter
23929 packs used in that expansion were of length zero. */
23930 init = void_type_node;
23931 in_base_initializer = 0;
23934 if (target_ctor != error_mark_node
23935 && init != error_mark_node)
23937 error ("mem-initializer for %qD follows constructor delegation",
23938 decl);
23939 return inits;
23941 /* Look for a target constructor. */
23942 if (init != error_mark_node
23943 && decl && CLASS_TYPE_P (decl)
23944 && same_type_p (decl, current_class_type))
23946 maybe_warn_cpp0x (CPP0X_DELEGATING_CTORS);
23947 if (inits)
23949 error ("constructor delegation follows mem-initializer for %qD",
23950 TREE_PURPOSE (inits));
23951 continue;
23953 target_ctor = init;
23956 if (decl)
23958 init = build_tree_list (decl, init);
23959 TREE_CHAIN (init) = inits;
23960 inits = init;
23964 return inits;
23967 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
23969 static void
23970 set_current_access_from_decl (tree decl)
23972 if (TREE_PRIVATE (decl))
23973 current_access_specifier = access_private_node;
23974 else if (TREE_PROTECTED (decl))
23975 current_access_specifier = access_protected_node;
23976 else
23977 current_access_specifier = access_public_node;
23980 /* Instantiate an enumerated type. TAG is the template type, NEWTAG
23981 is the instantiation (which should have been created with
23982 start_enum) and ARGS are the template arguments to use. */
23984 static void
23985 tsubst_enum (tree tag, tree newtag, tree args)
23987 tree e;
23989 if (SCOPED_ENUM_P (newtag))
23990 begin_scope (sk_scoped_enum, newtag);
23992 for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
23994 tree value;
23995 tree decl;
23997 decl = TREE_VALUE (e);
23998 /* Note that in a template enum, the TREE_VALUE is the
23999 CONST_DECL, not the corresponding INTEGER_CST. */
24000 value = tsubst_expr (DECL_INITIAL (decl),
24001 args, tf_warning_or_error, NULL_TREE,
24002 /*integral_constant_expression_p=*/true);
24004 /* Give this enumeration constant the correct access. */
24005 set_current_access_from_decl (decl);
24007 /* Actually build the enumerator itself. Here we're assuming that
24008 enumerators can't have dependent attributes. */
24009 build_enumerator (DECL_NAME (decl), value, newtag,
24010 DECL_ATTRIBUTES (decl), DECL_SOURCE_LOCATION (decl));
24013 if (SCOPED_ENUM_P (newtag))
24014 finish_scope ();
24016 finish_enum_value_list (newtag);
24017 finish_enum (newtag);
24019 DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
24020 = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
24023 /* DECL is a FUNCTION_DECL that is a template specialization. Return
24024 its type -- but without substituting the innermost set of template
24025 arguments. So, innermost set of template parameters will appear in
24026 the type. */
24028 tree
24029 get_mostly_instantiated_function_type (tree decl)
24031 /* For a function, DECL_TI_TEMPLATE is partially instantiated. */
24032 return TREE_TYPE (DECL_TI_TEMPLATE (decl));
24035 /* Return truthvalue if we're processing a template different from
24036 the last one involved in diagnostics. */
24037 bool
24038 problematic_instantiation_changed (void)
24040 return current_tinst_level != last_error_tinst_level;
24043 /* Remember current template involved in diagnostics. */
24044 void
24045 record_last_problematic_instantiation (void)
24047 last_error_tinst_level = current_tinst_level;
24050 struct tinst_level *
24051 current_instantiation (void)
24053 return current_tinst_level;
24056 /* Return TRUE if current_function_decl is being instantiated, false
24057 otherwise. */
24059 bool
24060 instantiating_current_function_p (void)
24062 return (current_instantiation ()
24063 && current_instantiation ()->decl == current_function_decl);
24066 /* [temp.param] Check that template non-type parm TYPE is of an allowable
24067 type. Return false for ok, true for disallowed. Issue error and
24068 inform messages under control of COMPLAIN. */
24070 static bool
24071 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
24073 if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
24074 return false;
24075 else if (TYPE_PTR_P (type))
24076 return false;
24077 else if (TREE_CODE (type) == REFERENCE_TYPE
24078 && !TYPE_REF_IS_RVALUE (type))
24079 return false;
24080 else if (TYPE_PTRMEM_P (type))
24081 return false;
24082 else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
24083 return false;
24084 else if (TREE_CODE (type) == TYPENAME_TYPE)
24085 return false;
24086 else if (TREE_CODE (type) == DECLTYPE_TYPE)
24087 return false;
24088 else if (TREE_CODE (type) == NULLPTR_TYPE)
24089 return false;
24090 /* A bound template template parm could later be instantiated to have a valid
24091 nontype parm type via an alias template. */
24092 else if (cxx_dialect >= cxx11
24093 && TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
24094 return false;
24096 if (complain & tf_error)
24098 if (type == error_mark_node)
24099 inform (input_location, "invalid template non-type parameter");
24100 else
24101 error ("%q#T is not a valid type for a template non-type parameter",
24102 type);
24104 return true;
24107 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
24108 Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
24110 static bool
24111 dependent_type_p_r (tree type)
24113 tree scope;
24115 /* [temp.dep.type]
24117 A type is dependent if it is:
24119 -- a template parameter. Template template parameters are types
24120 for us (since TYPE_P holds true for them) so we handle
24121 them here. */
24122 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
24123 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
24124 return true;
24125 /* -- a qualified-id with a nested-name-specifier which contains a
24126 class-name that names a dependent type or whose unqualified-id
24127 names a dependent type. */
24128 if (TREE_CODE (type) == TYPENAME_TYPE)
24129 return true;
24131 /* An alias template specialization can be dependent even if the
24132 resulting type is not. */
24133 if (dependent_alias_template_spec_p (type))
24134 return true;
24136 /* -- a cv-qualified type where the cv-unqualified type is
24137 dependent.
24138 No code is necessary for this bullet; the code below handles
24139 cv-qualified types, and we don't want to strip aliases with
24140 TYPE_MAIN_VARIANT because of DR 1558. */
24141 /* -- a compound type constructed from any dependent type. */
24142 if (TYPE_PTRMEM_P (type))
24143 return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
24144 || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
24145 (type)));
24146 else if (TYPE_PTR_P (type)
24147 || TREE_CODE (type) == REFERENCE_TYPE)
24148 return dependent_type_p (TREE_TYPE (type));
24149 else if (TREE_CODE (type) == FUNCTION_TYPE
24150 || TREE_CODE (type) == METHOD_TYPE)
24152 tree arg_type;
24154 if (dependent_type_p (TREE_TYPE (type)))
24155 return true;
24156 for (arg_type = TYPE_ARG_TYPES (type);
24157 arg_type;
24158 arg_type = TREE_CHAIN (arg_type))
24159 if (dependent_type_p (TREE_VALUE (arg_type)))
24160 return true;
24161 if (cxx_dialect >= cxx17)
24162 /* A value-dependent noexcept-specifier makes the type dependent. */
24163 if (tree spec = TYPE_RAISES_EXCEPTIONS (type))
24164 if (tree noex = TREE_PURPOSE (spec))
24165 /* Treat DEFERRED_NOEXCEPT as non-dependent, since it doesn't
24166 affect overload resolution and treating it as dependent breaks
24167 things. */
24168 if (TREE_CODE (noex) != DEFERRED_NOEXCEPT
24169 && value_dependent_expression_p (noex))
24170 return true;
24171 return false;
24173 /* -- an array type constructed from any dependent type or whose
24174 size is specified by a constant expression that is
24175 value-dependent.
24177 We checked for type- and value-dependence of the bounds in
24178 compute_array_index_type, so TYPE_DEPENDENT_P is already set. */
24179 if (TREE_CODE (type) == ARRAY_TYPE)
24181 if (TYPE_DOMAIN (type)
24182 && dependent_type_p (TYPE_DOMAIN (type)))
24183 return true;
24184 return dependent_type_p (TREE_TYPE (type));
24187 /* -- a template-id in which either the template name is a template
24188 parameter ... */
24189 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
24190 return true;
24191 /* ... or any of the template arguments is a dependent type or
24192 an expression that is type-dependent or value-dependent. */
24193 else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
24194 && (any_dependent_template_arguments_p
24195 (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
24196 return true;
24198 /* All TYPEOF_TYPEs, DECLTYPE_TYPEs, and UNDERLYING_TYPEs are
24199 dependent; if the argument of the `typeof' expression is not
24200 type-dependent, then it should already been have resolved. */
24201 if (TREE_CODE (type) == TYPEOF_TYPE
24202 || TREE_CODE (type) == DECLTYPE_TYPE
24203 || TREE_CODE (type) == UNDERLYING_TYPE)
24204 return true;
24206 /* A template argument pack is dependent if any of its packed
24207 arguments are. */
24208 if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
24210 tree args = ARGUMENT_PACK_ARGS (type);
24211 int i, len = TREE_VEC_LENGTH (args);
24212 for (i = 0; i < len; ++i)
24213 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
24214 return true;
24217 /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
24218 be template parameters. */
24219 if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
24220 return true;
24222 if (any_dependent_type_attributes_p (TYPE_ATTRIBUTES (type)))
24223 return true;
24225 /* The standard does not specifically mention types that are local
24226 to template functions or local classes, but they should be
24227 considered dependent too. For example:
24229 template <int I> void f() {
24230 enum E { a = I };
24231 S<sizeof (E)> s;
24234 The size of `E' cannot be known until the value of `I' has been
24235 determined. Therefore, `E' must be considered dependent. */
24236 scope = TYPE_CONTEXT (type);
24237 if (scope && TYPE_P (scope))
24238 return dependent_type_p (scope);
24239 /* Don't use type_dependent_expression_p here, as it can lead
24240 to infinite recursion trying to determine whether a lambda
24241 nested in a lambda is dependent (c++/47687). */
24242 else if (scope && TREE_CODE (scope) == FUNCTION_DECL
24243 && DECL_LANG_SPECIFIC (scope)
24244 && DECL_TEMPLATE_INFO (scope)
24245 && (any_dependent_template_arguments_p
24246 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (scope)))))
24247 return true;
24249 /* Other types are non-dependent. */
24250 return false;
24253 /* Returns TRUE if TYPE is dependent, in the sense of
24254 [temp.dep.type]. Note that a NULL type is considered dependent. */
24256 bool
24257 dependent_type_p (tree type)
24259 /* If there are no template parameters in scope, then there can't be
24260 any dependent types. */
24261 if (!processing_template_decl)
24263 /* If we are not processing a template, then nobody should be
24264 providing us with a dependent type. */
24265 gcc_assert (type);
24266 gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
24267 return false;
24270 /* If the type is NULL, we have not computed a type for the entity
24271 in question; in that case, the type is dependent. */
24272 if (!type)
24273 return true;
24275 /* Erroneous types can be considered non-dependent. */
24276 if (type == error_mark_node)
24277 return false;
24279 /* Getting here with global_type_node means we improperly called this
24280 function on the TREE_TYPE of an IDENTIFIER_NODE. */
24281 gcc_checking_assert (type != global_type_node);
24283 /* If we have not already computed the appropriate value for TYPE,
24284 do so now. */
24285 if (!TYPE_DEPENDENT_P_VALID (type))
24287 TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
24288 TYPE_DEPENDENT_P_VALID (type) = 1;
24291 return TYPE_DEPENDENT_P (type);
24294 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
24295 lookup. In other words, a dependent type that is not the current
24296 instantiation. */
24298 bool
24299 dependent_scope_p (tree scope)
24301 return (scope && TYPE_P (scope) && dependent_type_p (scope)
24302 && !currently_open_class (scope));
24305 /* T is a SCOPE_REF. Return whether it represents a non-static member of
24306 an unknown base of 'this' (and is therefore instantiation-dependent). */
24308 static bool
24309 unknown_base_ref_p (tree t)
24311 if (!current_class_ptr)
24312 return false;
24314 tree mem = TREE_OPERAND (t, 1);
24315 if (shared_member_p (mem))
24316 return false;
24318 tree cur = current_nonlambda_class_type ();
24319 if (!any_dependent_bases_p (cur))
24320 return false;
24322 tree ctx = TREE_OPERAND (t, 0);
24323 if (DERIVED_FROM_P (ctx, cur))
24324 return false;
24326 return true;
24329 /* T is a SCOPE_REF; return whether we need to consider it
24330 instantiation-dependent so that we can check access at instantiation
24331 time even though we know which member it resolves to. */
24333 static bool
24334 instantiation_dependent_scope_ref_p (tree t)
24336 if (DECL_P (TREE_OPERAND (t, 1))
24337 && CLASS_TYPE_P (TREE_OPERAND (t, 0))
24338 && !unknown_base_ref_p (t)
24339 && accessible_in_template_p (TREE_OPERAND (t, 0),
24340 TREE_OPERAND (t, 1)))
24341 return false;
24342 else
24343 return true;
24346 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
24347 [temp.dep.constexpr]. EXPRESSION is already known to be a constant
24348 expression. */
24350 /* Note that this predicate is not appropriate for general expressions;
24351 only constant expressions (that satisfy potential_constant_expression)
24352 can be tested for value dependence. */
24354 bool
24355 value_dependent_expression_p (tree expression)
24357 if (!processing_template_decl || expression == NULL_TREE)
24358 return false;
24360 /* A type-dependent expression is also value-dependent. */
24361 if (type_dependent_expression_p (expression))
24362 return true;
24364 switch (TREE_CODE (expression))
24366 case BASELINK:
24367 /* A dependent member function of the current instantiation. */
24368 return dependent_type_p (BINFO_TYPE (BASELINK_BINFO (expression)));
24370 case FUNCTION_DECL:
24371 /* A dependent member function of the current instantiation. */
24372 if (DECL_CLASS_SCOPE_P (expression)
24373 && dependent_type_p (DECL_CONTEXT (expression)))
24374 return true;
24375 break;
24377 case IDENTIFIER_NODE:
24378 /* A name that has not been looked up -- must be dependent. */
24379 return true;
24381 case TEMPLATE_PARM_INDEX:
24382 /* A non-type template parm. */
24383 return true;
24385 case CONST_DECL:
24386 /* A non-type template parm. */
24387 if (DECL_TEMPLATE_PARM_P (expression))
24388 return true;
24389 return value_dependent_expression_p (DECL_INITIAL (expression));
24391 case VAR_DECL:
24392 /* A constant with literal type and is initialized
24393 with an expression that is value-dependent. */
24394 if (DECL_DEPENDENT_INIT_P (expression)
24395 /* FIXME cp_finish_decl doesn't fold reference initializers. */
24396 || TREE_CODE (TREE_TYPE (expression)) == REFERENCE_TYPE)
24397 return true;
24398 if (DECL_HAS_VALUE_EXPR_P (expression))
24400 tree value_expr = DECL_VALUE_EXPR (expression);
24401 if (value_dependent_expression_p (value_expr))
24402 return true;
24404 return false;
24406 case DYNAMIC_CAST_EXPR:
24407 case STATIC_CAST_EXPR:
24408 case CONST_CAST_EXPR:
24409 case REINTERPRET_CAST_EXPR:
24410 case CAST_EXPR:
24411 case IMPLICIT_CONV_EXPR:
24412 /* These expressions are value-dependent if the type to which
24413 the cast occurs is dependent or the expression being casted
24414 is value-dependent. */
24416 tree type = TREE_TYPE (expression);
24418 if (dependent_type_p (type))
24419 return true;
24421 /* A functional cast has a list of operands. */
24422 expression = TREE_OPERAND (expression, 0);
24423 if (!expression)
24425 /* If there are no operands, it must be an expression such
24426 as "int()". This should not happen for aggregate types
24427 because it would form non-constant expressions. */
24428 gcc_assert (cxx_dialect >= cxx11
24429 || INTEGRAL_OR_ENUMERATION_TYPE_P (type));
24431 return false;
24434 if (TREE_CODE (expression) == TREE_LIST)
24435 return any_value_dependent_elements_p (expression);
24437 return value_dependent_expression_p (expression);
24440 case SIZEOF_EXPR:
24441 if (SIZEOF_EXPR_TYPE_P (expression))
24442 return dependent_type_p (TREE_TYPE (TREE_OPERAND (expression, 0)));
24443 /* FALLTHRU */
24444 case ALIGNOF_EXPR:
24445 case TYPEID_EXPR:
24446 /* A `sizeof' expression is value-dependent if the operand is
24447 type-dependent or is a pack expansion. */
24448 expression = TREE_OPERAND (expression, 0);
24449 if (PACK_EXPANSION_P (expression))
24450 return true;
24451 else if (TYPE_P (expression))
24452 return dependent_type_p (expression);
24453 return instantiation_dependent_uneval_expression_p (expression);
24455 case AT_ENCODE_EXPR:
24456 /* An 'encode' expression is value-dependent if the operand is
24457 type-dependent. */
24458 expression = TREE_OPERAND (expression, 0);
24459 return dependent_type_p (expression);
24461 case NOEXCEPT_EXPR:
24462 expression = TREE_OPERAND (expression, 0);
24463 return instantiation_dependent_uneval_expression_p (expression);
24465 case SCOPE_REF:
24466 /* All instantiation-dependent expressions should also be considered
24467 value-dependent. */
24468 return instantiation_dependent_scope_ref_p (expression);
24470 case COMPONENT_REF:
24471 return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
24472 || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
24474 case NONTYPE_ARGUMENT_PACK:
24475 /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
24476 is value-dependent. */
24478 tree values = ARGUMENT_PACK_ARGS (expression);
24479 int i, len = TREE_VEC_LENGTH (values);
24481 for (i = 0; i < len; ++i)
24482 if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
24483 return true;
24485 return false;
24488 case TRAIT_EXPR:
24490 tree type2 = TRAIT_EXPR_TYPE2 (expression);
24492 if (dependent_type_p (TRAIT_EXPR_TYPE1 (expression)))
24493 return true;
24495 if (!type2)
24496 return false;
24498 if (TREE_CODE (type2) != TREE_LIST)
24499 return dependent_type_p (type2);
24501 for (; type2; type2 = TREE_CHAIN (type2))
24502 if (dependent_type_p (TREE_VALUE (type2)))
24503 return true;
24505 return false;
24508 case MODOP_EXPR:
24509 return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
24510 || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
24512 case ARRAY_REF:
24513 return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
24514 || (value_dependent_expression_p (TREE_OPERAND (expression, 1))));
24516 case ADDR_EXPR:
24518 tree op = TREE_OPERAND (expression, 0);
24519 return (value_dependent_expression_p (op)
24520 || has_value_dependent_address (op));
24523 case REQUIRES_EXPR:
24524 /* Treat all requires-expressions as value-dependent so
24525 we don't try to fold them. */
24526 return true;
24528 case TYPE_REQ:
24529 return dependent_type_p (TREE_OPERAND (expression, 0));
24531 case CALL_EXPR:
24533 if (value_dependent_expression_p (CALL_EXPR_FN (expression)))
24534 return true;
24535 tree fn = get_callee_fndecl (expression);
24536 int i, nargs;
24537 nargs = call_expr_nargs (expression);
24538 for (i = 0; i < nargs; ++i)
24540 tree op = CALL_EXPR_ARG (expression, i);
24541 /* In a call to a constexpr member function, look through the
24542 implicit ADDR_EXPR on the object argument so that it doesn't
24543 cause the call to be considered value-dependent. We also
24544 look through it in potential_constant_expression. */
24545 if (i == 0 && fn && DECL_DECLARED_CONSTEXPR_P (fn)
24546 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
24547 && TREE_CODE (op) == ADDR_EXPR)
24548 op = TREE_OPERAND (op, 0);
24549 if (value_dependent_expression_p (op))
24550 return true;
24552 return false;
24555 case TEMPLATE_ID_EXPR:
24556 return variable_concept_p (TREE_OPERAND (expression, 0));
24558 case CONSTRUCTOR:
24560 unsigned ix;
24561 tree val;
24562 if (dependent_type_p (TREE_TYPE (expression)))
24563 return true;
24564 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), ix, val)
24565 if (value_dependent_expression_p (val))
24566 return true;
24567 return false;
24570 case STMT_EXPR:
24571 /* Treat a GNU statement expression as dependent to avoid crashing
24572 under instantiate_non_dependent_expr; it can't be constant. */
24573 return true;
24575 default:
24576 /* A constant expression is value-dependent if any subexpression is
24577 value-dependent. */
24578 switch (TREE_CODE_CLASS (TREE_CODE (expression)))
24580 case tcc_reference:
24581 case tcc_unary:
24582 case tcc_comparison:
24583 case tcc_binary:
24584 case tcc_expression:
24585 case tcc_vl_exp:
24587 int i, len = cp_tree_operand_length (expression);
24589 for (i = 0; i < len; i++)
24591 tree t = TREE_OPERAND (expression, i);
24593 /* In some cases, some of the operands may be missing.
24594 (For example, in the case of PREDECREMENT_EXPR, the
24595 amount to increment by may be missing.) That doesn't
24596 make the expression dependent. */
24597 if (t && value_dependent_expression_p (t))
24598 return true;
24601 break;
24602 default:
24603 break;
24605 break;
24608 /* The expression is not value-dependent. */
24609 return false;
24612 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
24613 [temp.dep.expr]. Note that an expression with no type is
24614 considered dependent. Other parts of the compiler arrange for an
24615 expression with type-dependent subexpressions to have no type, so
24616 this function doesn't have to be fully recursive. */
24618 bool
24619 type_dependent_expression_p (tree expression)
24621 if (!processing_template_decl)
24622 return false;
24624 if (expression == NULL_TREE || expression == error_mark_node)
24625 return false;
24627 STRIP_ANY_LOCATION_WRAPPER (expression);
24629 /* An unresolved name is always dependent. */
24630 if (identifier_p (expression)
24631 || TREE_CODE (expression) == USING_DECL
24632 || TREE_CODE (expression) == WILDCARD_DECL)
24633 return true;
24635 /* A fold expression is type-dependent. */
24636 if (TREE_CODE (expression) == UNARY_LEFT_FOLD_EXPR
24637 || TREE_CODE (expression) == UNARY_RIGHT_FOLD_EXPR
24638 || TREE_CODE (expression) == BINARY_LEFT_FOLD_EXPR
24639 || TREE_CODE (expression) == BINARY_RIGHT_FOLD_EXPR)
24640 return true;
24642 /* Some expression forms are never type-dependent. */
24643 if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
24644 || TREE_CODE (expression) == SIZEOF_EXPR
24645 || TREE_CODE (expression) == ALIGNOF_EXPR
24646 || TREE_CODE (expression) == AT_ENCODE_EXPR
24647 || TREE_CODE (expression) == NOEXCEPT_EXPR
24648 || TREE_CODE (expression) == TRAIT_EXPR
24649 || TREE_CODE (expression) == TYPEID_EXPR
24650 || TREE_CODE (expression) == DELETE_EXPR
24651 || TREE_CODE (expression) == VEC_DELETE_EXPR
24652 || TREE_CODE (expression) == THROW_EXPR
24653 || TREE_CODE (expression) == REQUIRES_EXPR)
24654 return false;
24656 /* The types of these expressions depends only on the type to which
24657 the cast occurs. */
24658 if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
24659 || TREE_CODE (expression) == STATIC_CAST_EXPR
24660 || TREE_CODE (expression) == CONST_CAST_EXPR
24661 || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
24662 || TREE_CODE (expression) == IMPLICIT_CONV_EXPR
24663 || TREE_CODE (expression) == CAST_EXPR)
24664 return dependent_type_p (TREE_TYPE (expression));
24666 /* The types of these expressions depends only on the type created
24667 by the expression. */
24668 if (TREE_CODE (expression) == NEW_EXPR
24669 || TREE_CODE (expression) == VEC_NEW_EXPR)
24671 /* For NEW_EXPR tree nodes created inside a template, either
24672 the object type itself or a TREE_LIST may appear as the
24673 operand 1. */
24674 tree type = TREE_OPERAND (expression, 1);
24675 if (TREE_CODE (type) == TREE_LIST)
24676 /* This is an array type. We need to check array dimensions
24677 as well. */
24678 return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
24679 || value_dependent_expression_p
24680 (TREE_OPERAND (TREE_VALUE (type), 1));
24681 else
24682 return dependent_type_p (type);
24685 if (TREE_CODE (expression) == SCOPE_REF)
24687 tree scope = TREE_OPERAND (expression, 0);
24688 tree name = TREE_OPERAND (expression, 1);
24690 /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
24691 contains an identifier associated by name lookup with one or more
24692 declarations declared with a dependent type, or...a
24693 nested-name-specifier or qualified-id that names a member of an
24694 unknown specialization. */
24695 return (type_dependent_expression_p (name)
24696 || dependent_scope_p (scope));
24699 if (TREE_CODE (expression) == TEMPLATE_DECL
24700 && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
24701 return uses_outer_template_parms (expression);
24703 if (TREE_CODE (expression) == STMT_EXPR)
24704 expression = stmt_expr_value_expr (expression);
24706 if (BRACE_ENCLOSED_INITIALIZER_P (expression))
24708 tree elt;
24709 unsigned i;
24711 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
24713 if (type_dependent_expression_p (elt))
24714 return true;
24716 return false;
24719 /* A static data member of the current instantiation with incomplete
24720 array type is type-dependent, as the definition and specializations
24721 can have different bounds. */
24722 if (VAR_P (expression)
24723 && DECL_CLASS_SCOPE_P (expression)
24724 && dependent_type_p (DECL_CONTEXT (expression))
24725 && VAR_HAD_UNKNOWN_BOUND (expression))
24726 return true;
24728 /* An array of unknown bound depending on a variadic parameter, eg:
24730 template<typename... Args>
24731 void foo (Args... args)
24733 int arr[] = { args... };
24736 template<int... vals>
24737 void bar ()
24739 int arr[] = { vals... };
24742 If the array has no length and has an initializer, it must be that
24743 we couldn't determine its length in cp_complete_array_type because
24744 it is dependent. */
24745 if (VAR_P (expression)
24746 && TREE_TYPE (expression) != NULL_TREE
24747 && TREE_CODE (TREE_TYPE (expression)) == ARRAY_TYPE
24748 && !TYPE_DOMAIN (TREE_TYPE (expression))
24749 && DECL_INITIAL (expression))
24750 return true;
24752 /* A function or variable template-id is type-dependent if it has any
24753 dependent template arguments. */
24754 if (VAR_OR_FUNCTION_DECL_P (expression)
24755 && DECL_LANG_SPECIFIC (expression)
24756 && DECL_TEMPLATE_INFO (expression))
24758 /* Consider the innermost template arguments, since those are the ones
24759 that come from the template-id; the template arguments for the
24760 enclosing class do not make it type-dependent unless they are used in
24761 the type of the decl. */
24762 if (PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (expression))
24763 && (any_dependent_template_arguments_p
24764 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
24765 return true;
24768 /* Otherwise, if the function decl isn't from a dependent scope, it can't be
24769 type-dependent. Checking this is important for functions with auto return
24770 type, which looks like a dependent type. */
24771 if (TREE_CODE (expression) == FUNCTION_DECL
24772 && !(DECL_CLASS_SCOPE_P (expression)
24773 && dependent_type_p (DECL_CONTEXT (expression)))
24774 && !(DECL_LANG_SPECIFIC (expression)
24775 && DECL_FRIEND_P (expression)
24776 && (!DECL_FRIEND_CONTEXT (expression)
24777 || dependent_type_p (DECL_FRIEND_CONTEXT (expression))))
24778 && !DECL_LOCAL_FUNCTION_P (expression))
24780 gcc_assert (!dependent_type_p (TREE_TYPE (expression))
24781 || undeduced_auto_decl (expression));
24782 return false;
24785 /* Always dependent, on the number of arguments if nothing else. */
24786 if (TREE_CODE (expression) == EXPR_PACK_EXPANSION)
24787 return true;
24789 if (TREE_TYPE (expression) == unknown_type_node)
24791 if (TREE_CODE (expression) == ADDR_EXPR)
24792 return type_dependent_expression_p (TREE_OPERAND (expression, 0));
24793 if (TREE_CODE (expression) == COMPONENT_REF
24794 || TREE_CODE (expression) == OFFSET_REF)
24796 if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
24797 return true;
24798 expression = TREE_OPERAND (expression, 1);
24799 if (identifier_p (expression))
24800 return false;
24802 /* SCOPE_REF with non-null TREE_TYPE is always non-dependent. */
24803 if (TREE_CODE (expression) == SCOPE_REF)
24804 return false;
24806 if (BASELINK_P (expression))
24808 if (BASELINK_OPTYPE (expression)
24809 && dependent_type_p (BASELINK_OPTYPE (expression)))
24810 return true;
24811 expression = BASELINK_FUNCTIONS (expression);
24814 if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
24816 if (any_dependent_template_arguments_p
24817 (TREE_OPERAND (expression, 1)))
24818 return true;
24819 expression = TREE_OPERAND (expression, 0);
24820 if (identifier_p (expression))
24821 return true;
24824 gcc_assert (TREE_CODE (expression) == OVERLOAD
24825 || TREE_CODE (expression) == FUNCTION_DECL);
24827 for (lkp_iterator iter (expression); iter; ++iter)
24828 if (type_dependent_expression_p (*iter))
24829 return true;
24831 return false;
24834 gcc_assert (TREE_CODE (expression) != TYPE_DECL);
24836 /* Dependent type attributes might not have made it from the decl to
24837 the type yet. */
24838 if (DECL_P (expression)
24839 && any_dependent_type_attributes_p (DECL_ATTRIBUTES (expression)))
24840 return true;
24842 return (dependent_type_p (TREE_TYPE (expression)));
24845 /* [temp.dep.expr]/5: A class member access expression (5.2.5) is
24846 type-dependent if the expression refers to a member of the current
24847 instantiation and the type of the referenced member is dependent, or the
24848 class member access expression refers to a member of an unknown
24849 specialization.
24851 This function returns true if the OBJECT in such a class member access
24852 expression is of an unknown specialization. */
24854 bool
24855 type_dependent_object_expression_p (tree object)
24857 /* An IDENTIFIER_NODE can sometimes have a TREE_TYPE, but it's still
24858 dependent. */
24859 if (TREE_CODE (object) == IDENTIFIER_NODE)
24860 return true;
24861 tree scope = TREE_TYPE (object);
24862 return (!scope || dependent_scope_p (scope));
24865 /* walk_tree callback function for instantiation_dependent_expression_p,
24866 below. Returns non-zero if a dependent subexpression is found. */
24868 static tree
24869 instantiation_dependent_r (tree *tp, int *walk_subtrees,
24870 void * /*data*/)
24872 if (TYPE_P (*tp))
24874 /* We don't have to worry about decltype currently because decltype
24875 of an instantiation-dependent expr is a dependent type. This
24876 might change depending on the resolution of DR 1172. */
24877 *walk_subtrees = false;
24878 return NULL_TREE;
24880 enum tree_code code = TREE_CODE (*tp);
24881 switch (code)
24883 /* Don't treat an argument list as dependent just because it has no
24884 TREE_TYPE. */
24885 case TREE_LIST:
24886 case TREE_VEC:
24887 return NULL_TREE;
24889 case TEMPLATE_PARM_INDEX:
24890 return *tp;
24892 /* Handle expressions with type operands. */
24893 case SIZEOF_EXPR:
24894 case ALIGNOF_EXPR:
24895 case TYPEID_EXPR:
24896 case AT_ENCODE_EXPR:
24898 tree op = TREE_OPERAND (*tp, 0);
24899 if (code == SIZEOF_EXPR && SIZEOF_EXPR_TYPE_P (*tp))
24900 op = TREE_TYPE (op);
24901 if (TYPE_P (op))
24903 if (dependent_type_p (op))
24904 return *tp;
24905 else
24907 *walk_subtrees = false;
24908 return NULL_TREE;
24911 break;
24914 case COMPONENT_REF:
24915 if (identifier_p (TREE_OPERAND (*tp, 1)))
24916 /* In a template, finish_class_member_access_expr creates a
24917 COMPONENT_REF with an IDENTIFIER_NODE for op1 even if it isn't
24918 type-dependent, so that we can check access control at
24919 instantiation time (PR 42277). See also Core issue 1273. */
24920 return *tp;
24921 break;
24923 case SCOPE_REF:
24924 if (instantiation_dependent_scope_ref_p (*tp))
24925 return *tp;
24926 else
24927 break;
24929 /* Treat statement-expressions as dependent. */
24930 case BIND_EXPR:
24931 return *tp;
24933 /* Treat requires-expressions as dependent. */
24934 case REQUIRES_EXPR:
24935 return *tp;
24937 case CALL_EXPR:
24938 /* Treat calls to function concepts as dependent. */
24939 if (function_concept_check_p (*tp))
24940 return *tp;
24941 break;
24943 case TEMPLATE_ID_EXPR:
24944 /* And variable concepts. */
24945 if (variable_concept_p (TREE_OPERAND (*tp, 0)))
24946 return *tp;
24947 break;
24949 default:
24950 break;
24953 if (type_dependent_expression_p (*tp))
24954 return *tp;
24955 else
24956 return NULL_TREE;
24959 /* Returns TRUE if the EXPRESSION is instantiation-dependent, in the
24960 sense defined by the ABI:
24962 "An expression is instantiation-dependent if it is type-dependent
24963 or value-dependent, or it has a subexpression that is type-dependent
24964 or value-dependent."
24966 Except don't actually check value-dependence for unevaluated expressions,
24967 because in sizeof(i) we don't care about the value of i. Checking
24968 type-dependence will in turn check value-dependence of array bounds/template
24969 arguments as needed. */
24971 bool
24972 instantiation_dependent_uneval_expression_p (tree expression)
24974 tree result;
24976 if (!processing_template_decl)
24977 return false;
24979 if (expression == error_mark_node)
24980 return false;
24982 result = cp_walk_tree_without_duplicates (&expression,
24983 instantiation_dependent_r, NULL);
24984 return result != NULL_TREE;
24987 /* As above, but also check value-dependence of the expression as a whole. */
24989 bool
24990 instantiation_dependent_expression_p (tree expression)
24992 return (instantiation_dependent_uneval_expression_p (expression)
24993 || value_dependent_expression_p (expression));
24996 /* Like type_dependent_expression_p, but it also works while not processing
24997 a template definition, i.e. during substitution or mangling. */
24999 bool
25000 type_dependent_expression_p_push (tree expr)
25002 bool b;
25003 ++processing_template_decl;
25004 b = type_dependent_expression_p (expr);
25005 --processing_template_decl;
25006 return b;
25009 /* Returns TRUE if ARGS contains a type-dependent expression. */
25011 bool
25012 any_type_dependent_arguments_p (const vec<tree, va_gc> *args)
25014 unsigned int i;
25015 tree arg;
25017 FOR_EACH_VEC_SAFE_ELT (args, i, arg)
25019 if (type_dependent_expression_p (arg))
25020 return true;
25022 return false;
25025 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
25026 expressions) contains any type-dependent expressions. */
25028 bool
25029 any_type_dependent_elements_p (const_tree list)
25031 for (; list; list = TREE_CHAIN (list))
25032 if (type_dependent_expression_p (TREE_VALUE (list)))
25033 return true;
25035 return false;
25038 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
25039 expressions) contains any value-dependent expressions. */
25041 bool
25042 any_value_dependent_elements_p (const_tree list)
25044 for (; list; list = TREE_CHAIN (list))
25045 if (value_dependent_expression_p (TREE_VALUE (list)))
25046 return true;
25048 return false;
25051 /* Returns TRUE if the ARG (a template argument) is dependent. */
25053 bool
25054 dependent_template_arg_p (tree arg)
25056 if (!processing_template_decl)
25057 return false;
25059 /* Assume a template argument that was wrongly written by the user
25060 is dependent. This is consistent with what
25061 any_dependent_template_arguments_p [that calls this function]
25062 does. */
25063 if (!arg || arg == error_mark_node)
25064 return true;
25066 if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
25067 arg = argument_pack_select_arg (arg);
25069 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
25070 return true;
25071 if (TREE_CODE (arg) == TEMPLATE_DECL)
25073 if (DECL_TEMPLATE_PARM_P (arg))
25074 return true;
25075 /* A member template of a dependent class is not necessarily
25076 type-dependent, but it is a dependent template argument because it
25077 will be a member of an unknown specialization to that template. */
25078 tree scope = CP_DECL_CONTEXT (arg);
25079 return TYPE_P (scope) && dependent_type_p (scope);
25081 else if (ARGUMENT_PACK_P (arg))
25083 tree args = ARGUMENT_PACK_ARGS (arg);
25084 int i, len = TREE_VEC_LENGTH (args);
25085 for (i = 0; i < len; ++i)
25087 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
25088 return true;
25091 return false;
25093 else if (TYPE_P (arg))
25094 return dependent_type_p (arg);
25095 else
25096 return (type_dependent_expression_p (arg)
25097 || value_dependent_expression_p (arg));
25100 /* Returns true if ARGS (a collection of template arguments) contains
25101 any types that require structural equality testing. */
25103 bool
25104 any_template_arguments_need_structural_equality_p (tree args)
25106 int i;
25107 int j;
25109 if (!args)
25110 return false;
25111 if (args == error_mark_node)
25112 return true;
25114 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
25116 tree level = TMPL_ARGS_LEVEL (args, i + 1);
25117 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
25119 tree arg = TREE_VEC_ELT (level, j);
25120 tree packed_args = NULL_TREE;
25121 int k, len = 1;
25123 if (ARGUMENT_PACK_P (arg))
25125 /* Look inside the argument pack. */
25126 packed_args = ARGUMENT_PACK_ARGS (arg);
25127 len = TREE_VEC_LENGTH (packed_args);
25130 for (k = 0; k < len; ++k)
25132 if (packed_args)
25133 arg = TREE_VEC_ELT (packed_args, k);
25135 if (error_operand_p (arg))
25136 return true;
25137 else if (TREE_CODE (arg) == TEMPLATE_DECL)
25138 continue;
25139 else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
25140 return true;
25141 else if (!TYPE_P (arg) && TREE_TYPE (arg)
25142 && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
25143 return true;
25148 return false;
25151 /* Returns true if ARGS (a collection of template arguments) contains
25152 any dependent arguments. */
25154 bool
25155 any_dependent_template_arguments_p (const_tree args)
25157 int i;
25158 int j;
25160 if (!args)
25161 return false;
25162 if (args == error_mark_node)
25163 return true;
25165 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
25167 const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
25168 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
25169 if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
25170 return true;
25173 return false;
25176 /* Returns true if ARGS contains any errors. */
25178 bool
25179 any_erroneous_template_args_p (const_tree args)
25181 int i;
25182 int j;
25184 if (args == error_mark_node)
25185 return true;
25187 if (args && TREE_CODE (args) != TREE_VEC)
25189 if (tree ti = get_template_info (args))
25190 args = TI_ARGS (ti);
25191 else
25192 args = NULL_TREE;
25195 if (!args)
25196 return false;
25198 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
25200 const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
25201 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
25202 if (error_operand_p (TREE_VEC_ELT (level, j)))
25203 return true;
25206 return false;
25209 /* Returns TRUE if the template TMPL is type-dependent. */
25211 bool
25212 dependent_template_p (tree tmpl)
25214 if (TREE_CODE (tmpl) == OVERLOAD)
25216 for (lkp_iterator iter (tmpl); iter; ++iter)
25217 if (dependent_template_p (*iter))
25218 return true;
25219 return false;
25222 /* Template template parameters are dependent. */
25223 if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
25224 || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
25225 return true;
25226 /* So are names that have not been looked up. */
25227 if (TREE_CODE (tmpl) == SCOPE_REF || identifier_p (tmpl))
25228 return true;
25229 return false;
25232 /* Returns TRUE if the specialization TMPL<ARGS> is dependent. */
25234 bool
25235 dependent_template_id_p (tree tmpl, tree args)
25237 return (dependent_template_p (tmpl)
25238 || any_dependent_template_arguments_p (args));
25241 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
25242 are dependent. */
25244 bool
25245 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
25247 int i;
25249 if (!processing_template_decl)
25250 return false;
25252 for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
25254 tree decl = TREE_VEC_ELT (declv, i);
25255 tree init = TREE_VEC_ELT (initv, i);
25256 tree cond = TREE_VEC_ELT (condv, i);
25257 tree incr = TREE_VEC_ELT (incrv, i);
25259 if (type_dependent_expression_p (decl)
25260 || TREE_CODE (decl) == SCOPE_REF)
25261 return true;
25263 if (init && type_dependent_expression_p (init))
25264 return true;
25266 if (type_dependent_expression_p (cond))
25267 return true;
25269 if (COMPARISON_CLASS_P (cond)
25270 && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
25271 || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
25272 return true;
25274 if (TREE_CODE (incr) == MODOP_EXPR)
25276 if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
25277 || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
25278 return true;
25280 else if (type_dependent_expression_p (incr))
25281 return true;
25282 else if (TREE_CODE (incr) == MODIFY_EXPR)
25284 if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
25285 return true;
25286 else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
25288 tree t = TREE_OPERAND (incr, 1);
25289 if (type_dependent_expression_p (TREE_OPERAND (t, 0))
25290 || type_dependent_expression_p (TREE_OPERAND (t, 1)))
25291 return true;
25296 return false;
25299 /* TYPE is a TYPENAME_TYPE. Returns the ordinary TYPE to which the
25300 TYPENAME_TYPE corresponds. Returns the original TYPENAME_TYPE if
25301 no such TYPE can be found. Note that this function peers inside
25302 uninstantiated templates and therefore should be used only in
25303 extremely limited situations. ONLY_CURRENT_P restricts this
25304 peering to the currently open classes hierarchy (which is required
25305 when comparing types). */
25307 tree
25308 resolve_typename_type (tree type, bool only_current_p)
25310 tree scope;
25311 tree name;
25312 tree decl;
25313 int quals;
25314 tree pushed_scope;
25315 tree result;
25317 gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
25319 scope = TYPE_CONTEXT (type);
25320 /* We shouldn't have built a TYPENAME_TYPE with a non-dependent scope. */
25321 gcc_checking_assert (uses_template_parms (scope));
25323 /* Usually the non-qualified identifier of a TYPENAME_TYPE is
25324 TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
25325 a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
25326 the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
25327 identifier of the TYPENAME_TYPE anymore.
25328 So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
25329 TYPENAME_TYPE instead, we avoid messing up with a possible
25330 typedef variant case. */
25331 name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
25333 /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
25334 it first before we can figure out what NAME refers to. */
25335 if (TREE_CODE (scope) == TYPENAME_TYPE)
25337 if (TYPENAME_IS_RESOLVING_P (scope))
25338 /* Given a class template A with a dependent base with nested type C,
25339 typedef typename A::C::C C will land us here, as trying to resolve
25340 the initial A::C leads to the local C typedef, which leads back to
25341 A::C::C. So we break the recursion now. */
25342 return type;
25343 else
25344 scope = resolve_typename_type (scope, only_current_p);
25346 /* If we don't know what SCOPE refers to, then we cannot resolve the
25347 TYPENAME_TYPE. */
25348 if (!CLASS_TYPE_P (scope))
25349 return type;
25350 /* If this is a typedef, we don't want to look inside (c++/11987). */
25351 if (typedef_variant_p (type))
25352 return type;
25353 /* If SCOPE isn't the template itself, it will not have a valid
25354 TYPE_FIELDS list. */
25355 if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
25356 /* scope is either the template itself or a compatible instantiation
25357 like X<T>, so look up the name in the original template. */
25358 scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
25359 /* If scope has no fields, it can't be a current instantiation. Check this
25360 before currently_open_class to avoid infinite recursion (71515). */
25361 if (!TYPE_FIELDS (scope))
25362 return type;
25363 /* If the SCOPE is not the current instantiation, there's no reason
25364 to look inside it. */
25365 if (only_current_p && !currently_open_class (scope))
25366 return type;
25367 /* Enter the SCOPE so that name lookup will be resolved as if we
25368 were in the class definition. In particular, SCOPE will no
25369 longer be considered a dependent type. */
25370 pushed_scope = push_scope (scope);
25371 /* Look up the declaration. */
25372 decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true,
25373 tf_warning_or_error);
25375 result = NULL_TREE;
25377 /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
25378 find a TEMPLATE_DECL. Otherwise, we want to find a TYPE_DECL. */
25379 tree fullname = TYPENAME_TYPE_FULLNAME (type);
25380 if (!decl)
25381 /*nop*/;
25382 else if (identifier_p (fullname)
25383 && TREE_CODE (decl) == TYPE_DECL)
25385 result = TREE_TYPE (decl);
25386 if (result == error_mark_node)
25387 result = NULL_TREE;
25389 else if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR
25390 && DECL_CLASS_TEMPLATE_P (decl))
25392 /* Obtain the template and the arguments. */
25393 tree tmpl = TREE_OPERAND (fullname, 0);
25394 if (TREE_CODE (tmpl) == IDENTIFIER_NODE)
25396 /* We get here with a plain identifier because a previous tentative
25397 parse of the nested-name-specifier as part of a ptr-operator saw
25398 ::template X<A>. The use of ::template is necessary in a
25399 ptr-operator, but wrong in a declarator-id.
25401 [temp.names]: In a qualified-id of a declarator-id, the keyword
25402 template shall not appear at the top level. */
25403 pedwarn (EXPR_LOC_OR_LOC (fullname, input_location), OPT_Wpedantic,
25404 "keyword %<template%> not allowed in declarator-id");
25405 tmpl = decl;
25407 tree args = TREE_OPERAND (fullname, 1);
25408 /* Instantiate the template. */
25409 result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
25410 /*entering_scope=*/true,
25411 tf_error | tf_user);
25412 if (result == error_mark_node)
25413 result = NULL_TREE;
25416 /* Leave the SCOPE. */
25417 if (pushed_scope)
25418 pop_scope (pushed_scope);
25420 /* If we failed to resolve it, return the original typename. */
25421 if (!result)
25422 return type;
25424 /* If lookup found a typename type, resolve that too. */
25425 if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
25427 /* Ill-formed programs can cause infinite recursion here, so we
25428 must catch that. */
25429 TYPENAME_IS_RESOLVING_P (result) = 1;
25430 result = resolve_typename_type (result, only_current_p);
25431 TYPENAME_IS_RESOLVING_P (result) = 0;
25434 /* Qualify the resulting type. */
25435 quals = cp_type_quals (type);
25436 if (quals)
25437 result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
25439 return result;
25442 /* EXPR is an expression which is not type-dependent. Return a proxy
25443 for EXPR that can be used to compute the types of larger
25444 expressions containing EXPR. */
25446 tree
25447 build_non_dependent_expr (tree expr)
25449 tree orig_expr = expr;
25450 tree inner_expr;
25452 /* When checking, try to get a constant value for all non-dependent
25453 expressions in order to expose bugs in *_dependent_expression_p
25454 and constexpr. This can affect code generation, see PR70704, so
25455 only do this for -fchecking=2. */
25456 if (flag_checking > 1
25457 && cxx_dialect >= cxx11
25458 /* Don't do this during nsdmi parsing as it can lead to
25459 unexpected recursive instantiations. */
25460 && !parsing_nsdmi ()
25461 /* Don't do this during concept expansion either and for
25462 the same reason. */
25463 && !expanding_concept ())
25464 fold_non_dependent_expr (expr);
25466 STRIP_ANY_LOCATION_WRAPPER (expr);
25468 /* Preserve OVERLOADs; the functions must be available to resolve
25469 types. */
25470 inner_expr = expr;
25471 if (TREE_CODE (inner_expr) == STMT_EXPR)
25472 inner_expr = stmt_expr_value_expr (inner_expr);
25473 if (TREE_CODE (inner_expr) == ADDR_EXPR)
25474 inner_expr = TREE_OPERAND (inner_expr, 0);
25475 if (TREE_CODE (inner_expr) == COMPONENT_REF)
25476 inner_expr = TREE_OPERAND (inner_expr, 1);
25477 if (is_overloaded_fn (inner_expr)
25478 || TREE_CODE (inner_expr) == OFFSET_REF)
25479 return orig_expr;
25480 /* There is no need to return a proxy for a variable. */
25481 if (VAR_P (expr))
25482 return orig_expr;
25483 /* Preserve string constants; conversions from string constants to
25484 "char *" are allowed, even though normally a "const char *"
25485 cannot be used to initialize a "char *". */
25486 if (TREE_CODE (expr) == STRING_CST)
25487 return orig_expr;
25488 /* Preserve void and arithmetic constants, as an optimization -- there is no
25489 reason to create a new node. */
25490 if (TREE_CODE (expr) == VOID_CST
25491 || TREE_CODE (expr) == INTEGER_CST
25492 || TREE_CODE (expr) == REAL_CST)
25493 return orig_expr;
25494 /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
25495 There is at least one place where we want to know that a
25496 particular expression is a throw-expression: when checking a ?:
25497 expression, there are special rules if the second or third
25498 argument is a throw-expression. */
25499 if (TREE_CODE (expr) == THROW_EXPR)
25500 return orig_expr;
25502 /* Don't wrap an initializer list, we need to be able to look inside. */
25503 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
25504 return orig_expr;
25506 /* Don't wrap a dummy object, we need to be able to test for it. */
25507 if (is_dummy_object (expr))
25508 return orig_expr;
25510 if (TREE_CODE (expr) == COND_EXPR)
25511 return build3 (COND_EXPR,
25512 TREE_TYPE (expr),
25513 TREE_OPERAND (expr, 0),
25514 (TREE_OPERAND (expr, 1)
25515 ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
25516 : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
25517 build_non_dependent_expr (TREE_OPERAND (expr, 2)));
25518 if (TREE_CODE (expr) == COMPOUND_EXPR
25519 && !COMPOUND_EXPR_OVERLOADED (expr))
25520 return build2 (COMPOUND_EXPR,
25521 TREE_TYPE (expr),
25522 TREE_OPERAND (expr, 0),
25523 build_non_dependent_expr (TREE_OPERAND (expr, 1)));
25525 /* If the type is unknown, it can't really be non-dependent */
25526 gcc_assert (TREE_TYPE (expr) != unknown_type_node);
25528 /* Otherwise, build a NON_DEPENDENT_EXPR. */
25529 return build1_loc (EXPR_LOCATION (orig_expr), NON_DEPENDENT_EXPR,
25530 TREE_TYPE (expr), expr);
25533 /* ARGS is a vector of expressions as arguments to a function call.
25534 Replace the arguments with equivalent non-dependent expressions.
25535 This modifies ARGS in place. */
25537 void
25538 make_args_non_dependent (vec<tree, va_gc> *args)
25540 unsigned int ix;
25541 tree arg;
25543 FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
25545 tree newarg = build_non_dependent_expr (arg);
25546 if (newarg != arg)
25547 (*args)[ix] = newarg;
25551 /* Returns a type which represents 'auto' or 'decltype(auto)'. We use a
25552 TEMPLATE_TYPE_PARM with a level one deeper than the actual template
25553 parms. If set_canonical is true, we set TYPE_CANONICAL on it. */
25555 static tree
25556 make_auto_1 (tree name, bool set_canonical)
25558 tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
25559 TYPE_NAME (au) = build_decl (input_location,
25560 TYPE_DECL, name, au);
25561 TYPE_STUB_DECL (au) = TYPE_NAME (au);
25562 TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
25563 (0, processing_template_decl + 1, processing_template_decl + 1,
25564 TYPE_NAME (au), NULL_TREE);
25565 if (set_canonical)
25566 TYPE_CANONICAL (au) = canonical_type_parameter (au);
25567 DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
25568 SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
25570 return au;
25573 tree
25574 make_decltype_auto (void)
25576 return make_auto_1 (decltype_auto_identifier, true);
25579 tree
25580 make_auto (void)
25582 return make_auto_1 (auto_identifier, true);
25585 /* Return a C++17 deduction placeholder for class template TMPL. */
25587 tree
25588 make_template_placeholder (tree tmpl)
25590 tree t = make_auto_1 (DECL_NAME (tmpl), true);
25591 CLASS_PLACEHOLDER_TEMPLATE (t) = tmpl;
25592 return t;
25595 /* True iff T is a C++17 class template deduction placeholder. */
25597 bool
25598 template_placeholder_p (tree t)
25600 return is_auto (t) && CLASS_PLACEHOLDER_TEMPLATE (t);
25603 /* Make a "constrained auto" type-specifier. This is an
25604 auto type with constraints that must be associated after
25605 deduction. The constraint is formed from the given
25606 CONC and its optional sequence of arguments, which are
25607 non-null if written as partial-concept-id. */
25609 tree
25610 make_constrained_auto (tree con, tree args)
25612 tree type = make_auto_1 (auto_identifier, false);
25614 /* Build the constraint. */
25615 tree tmpl = DECL_TI_TEMPLATE (con);
25616 tree expr = VAR_P (con) ? tmpl : ovl_make (tmpl);
25617 expr = build_concept_check (expr, type, args);
25619 tree constr = normalize_expression (expr);
25620 PLACEHOLDER_TYPE_CONSTRAINTS (type) = constr;
25622 /* Our canonical type depends on the constraint. */
25623 TYPE_CANONICAL (type) = canonical_type_parameter (type);
25625 /* Attach the constraint to the type declaration. */
25626 tree decl = TYPE_NAME (type);
25627 return decl;
25630 /* Given type ARG, return std::initializer_list<ARG>. */
25632 static tree
25633 listify (tree arg)
25635 tree std_init_list = get_namespace_binding (std_node, init_list_identifier);
25637 if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
25639 gcc_rich_location richloc (input_location);
25640 maybe_add_include_fixit (&richloc, "<initializer_list>");
25641 error_at (&richloc,
25642 "deducing from brace-enclosed initializer list"
25643 " requires %<#include <initializer_list>%>");
25645 return error_mark_node;
25647 tree argvec = make_tree_vec (1);
25648 TREE_VEC_ELT (argvec, 0) = arg;
25650 return lookup_template_class (std_init_list, argvec, NULL_TREE,
25651 NULL_TREE, 0, tf_warning_or_error);
25654 /* Replace auto in TYPE with std::initializer_list<auto>. */
25656 static tree
25657 listify_autos (tree type, tree auto_node)
25659 tree init_auto = listify (auto_node);
25660 tree argvec = make_tree_vec (1);
25661 TREE_VEC_ELT (argvec, 0) = init_auto;
25662 if (processing_template_decl)
25663 argvec = add_to_template_args (current_template_args (), argvec);
25664 return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
25667 /* Hash traits for hashing possibly constrained 'auto'
25668 TEMPLATE_TYPE_PARMs for use by do_auto_deduction. */
25670 struct auto_hash : default_hash_traits<tree>
25672 static inline hashval_t hash (tree);
25673 static inline bool equal (tree, tree);
25676 /* Hash the 'auto' T. */
25678 inline hashval_t
25679 auto_hash::hash (tree t)
25681 if (tree c = PLACEHOLDER_TYPE_CONSTRAINTS (t))
25682 /* Matching constrained-type-specifiers denote the same template
25683 parameter, so hash the constraint. */
25684 return hash_placeholder_constraint (c);
25685 else
25686 /* But unconstrained autos are all separate, so just hash the pointer. */
25687 return iterative_hash_object (t, 0);
25690 /* Compare two 'auto's. */
25692 inline bool
25693 auto_hash::equal (tree t1, tree t2)
25695 if (t1 == t2)
25696 return true;
25698 tree c1 = PLACEHOLDER_TYPE_CONSTRAINTS (t1);
25699 tree c2 = PLACEHOLDER_TYPE_CONSTRAINTS (t2);
25701 /* Two unconstrained autos are distinct. */
25702 if (!c1 || !c2)
25703 return false;
25705 return equivalent_placeholder_constraints (c1, c2);
25708 /* for_each_template_parm callback for extract_autos: if t is a (possibly
25709 constrained) auto, add it to the vector. */
25711 static int
25712 extract_autos_r (tree t, void *data)
25714 hash_table<auto_hash> &hash = *(hash_table<auto_hash>*)data;
25715 if (is_auto (t))
25717 /* All the autos were built with index 0; fix that up now. */
25718 tree *p = hash.find_slot (t, INSERT);
25719 unsigned idx;
25720 if (*p)
25721 /* If this is a repeated constrained-type-specifier, use the index we
25722 chose before. */
25723 idx = TEMPLATE_PARM_IDX (TEMPLATE_TYPE_PARM_INDEX (*p));
25724 else
25726 /* Otherwise this is new, so use the current count. */
25727 *p = t;
25728 idx = hash.elements () - 1;
25730 TEMPLATE_PARM_IDX (TEMPLATE_TYPE_PARM_INDEX (t)) = idx;
25733 /* Always keep walking. */
25734 return 0;
25737 /* Return a TREE_VEC of the 'auto's used in type under the Concepts TS, which
25738 says they can appear anywhere in the type. */
25740 static tree
25741 extract_autos (tree type)
25743 hash_set<tree> visited;
25744 hash_table<auto_hash> hash (2);
25746 for_each_template_parm (type, extract_autos_r, &hash, &visited, true);
25748 tree tree_vec = make_tree_vec (hash.elements());
25749 for (hash_table<auto_hash>::iterator iter = hash.begin();
25750 iter != hash.end(); ++iter)
25752 tree elt = *iter;
25753 unsigned i = TEMPLATE_PARM_IDX (TEMPLATE_TYPE_PARM_INDEX (elt));
25754 TREE_VEC_ELT (tree_vec, i)
25755 = build_tree_list (NULL_TREE, TYPE_NAME (elt));
25758 return tree_vec;
25761 /* The stem for deduction guide names. */
25762 const char *const dguide_base = "__dguide_";
25764 /* Return the name for a deduction guide for class template TMPL. */
25766 tree
25767 dguide_name (tree tmpl)
25769 tree type = (TYPE_P (tmpl) ? tmpl : TREE_TYPE (tmpl));
25770 tree tname = TYPE_IDENTIFIER (type);
25771 char *buf = (char *) alloca (1 + strlen (dguide_base)
25772 + IDENTIFIER_LENGTH (tname));
25773 memcpy (buf, dguide_base, strlen (dguide_base));
25774 memcpy (buf + strlen (dguide_base), IDENTIFIER_POINTER (tname),
25775 IDENTIFIER_LENGTH (tname) + 1);
25776 tree dname = get_identifier (buf);
25777 TREE_TYPE (dname) = type;
25778 return dname;
25781 /* True if NAME is the name of a deduction guide. */
25783 bool
25784 dguide_name_p (tree name)
25786 return (TREE_CODE (name) == IDENTIFIER_NODE
25787 && TREE_TYPE (name)
25788 && !strncmp (IDENTIFIER_POINTER (name), dguide_base,
25789 strlen (dguide_base)));
25792 /* True if FN is a deduction guide. */
25794 bool
25795 deduction_guide_p (const_tree fn)
25797 if (DECL_P (fn))
25798 if (tree name = DECL_NAME (fn))
25799 return dguide_name_p (name);
25800 return false;
25803 /* True if FN is the copy deduction guide, i.e. A(A)->A. */
25805 bool
25806 copy_guide_p (const_tree fn)
25808 gcc_assert (deduction_guide_p (fn));
25809 if (!DECL_ARTIFICIAL (fn))
25810 return false;
25811 tree parms = FUNCTION_FIRST_USER_PARMTYPE (DECL_TI_TEMPLATE (fn));
25812 return (TREE_CHAIN (parms) == void_list_node
25813 && same_type_p (TREE_VALUE (parms), TREE_TYPE (DECL_NAME (fn))));
25816 /* True if FN is a guide generated from a constructor template. */
25818 bool
25819 template_guide_p (const_tree fn)
25821 gcc_assert (deduction_guide_p (fn));
25822 if (!DECL_ARTIFICIAL (fn))
25823 return false;
25824 tree tmpl = DECL_TI_TEMPLATE (fn);
25825 if (tree org = DECL_ABSTRACT_ORIGIN (tmpl))
25826 return PRIMARY_TEMPLATE_P (org);
25827 return false;
25830 /* OLDDECL is a _DECL for a template parameter. Return a similar parameter at
25831 LEVEL:INDEX, using tsubst_args and complain for substitution into non-type
25832 template parameter types. Note that the handling of template template
25833 parameters relies on current_template_parms being set appropriately for the
25834 new template. */
25836 static tree
25837 rewrite_template_parm (tree olddecl, unsigned index, unsigned level,
25838 tree tsubst_args, tsubst_flags_t complain)
25840 if (olddecl == error_mark_node)
25841 return error_mark_node;
25843 tree oldidx = get_template_parm_index (olddecl);
25845 tree newtype;
25846 if (TREE_CODE (olddecl) == TYPE_DECL
25847 || TREE_CODE (olddecl) == TEMPLATE_DECL)
25849 tree oldtype = TREE_TYPE (olddecl);
25850 newtype = cxx_make_type (TREE_CODE (oldtype));
25851 TYPE_MAIN_VARIANT (newtype) = newtype;
25852 if (TREE_CODE (oldtype) == TEMPLATE_TYPE_PARM)
25853 TEMPLATE_TYPE_PARM_FOR_CLASS (newtype)
25854 = TEMPLATE_TYPE_PARM_FOR_CLASS (oldtype);
25856 else
25858 newtype = TREE_TYPE (olddecl);
25859 if (type_uses_auto (newtype))
25861 // Substitute once to fix references to other template parameters.
25862 newtype = tsubst (newtype, tsubst_args,
25863 complain|tf_partial, NULL_TREE);
25864 // Now substitute again to reduce the level of the auto.
25865 newtype = tsubst (newtype, current_template_args (),
25866 complain, NULL_TREE);
25868 else
25869 newtype = tsubst (newtype, tsubst_args,
25870 complain, NULL_TREE);
25873 tree newdecl
25874 = build_decl (DECL_SOURCE_LOCATION (olddecl), TREE_CODE (olddecl),
25875 DECL_NAME (olddecl), newtype);
25876 SET_DECL_TEMPLATE_PARM_P (newdecl);
25878 tree newidx;
25879 if (TREE_CODE (olddecl) == TYPE_DECL
25880 || TREE_CODE (olddecl) == TEMPLATE_DECL)
25882 newidx = TEMPLATE_TYPE_PARM_INDEX (newtype)
25883 = build_template_parm_index (index, level, level,
25884 newdecl, newtype);
25885 TEMPLATE_PARM_PARAMETER_PACK (newidx)
25886 = TEMPLATE_PARM_PARAMETER_PACK (oldidx);
25887 TYPE_STUB_DECL (newtype) = TYPE_NAME (newtype) = newdecl;
25888 TYPE_CANONICAL (newtype) = canonical_type_parameter (newtype);
25890 if (TREE_CODE (olddecl) == TEMPLATE_DECL)
25892 DECL_TEMPLATE_RESULT (newdecl)
25893 = build_decl (DECL_SOURCE_LOCATION (olddecl), TYPE_DECL,
25894 DECL_NAME (olddecl), newtype);
25895 DECL_ARTIFICIAL (DECL_TEMPLATE_RESULT (newdecl)) = true;
25896 // First create a copy (ttargs) of tsubst_args with an
25897 // additional level for the template template parameter's own
25898 // template parameters (ttparms).
25899 tree ttparms = (INNERMOST_TEMPLATE_PARMS
25900 (DECL_TEMPLATE_PARMS (olddecl)));
25901 const int depth = TMPL_ARGS_DEPTH (tsubst_args);
25902 tree ttargs = make_tree_vec (depth + 1);
25903 for (int i = 0; i < depth; ++i)
25904 TREE_VEC_ELT (ttargs, i) = TREE_VEC_ELT (tsubst_args, i);
25905 TREE_VEC_ELT (ttargs, depth)
25906 = template_parms_level_to_args (ttparms);
25907 // Substitute ttargs into ttparms to fix references to
25908 // other template parameters.
25909 ttparms = tsubst_template_parms_level (ttparms, ttargs,
25910 complain|tf_partial);
25911 // Now substitute again with args based on tparms, to reduce
25912 // the level of the ttparms.
25913 ttargs = current_template_args ();
25914 ttparms = tsubst_template_parms_level (ttparms, ttargs,
25915 complain);
25916 // Finally, tack the adjusted parms onto tparms.
25917 ttparms = tree_cons (size_int (depth), ttparms,
25918 current_template_parms);
25919 DECL_TEMPLATE_PARMS (newdecl) = ttparms;
25922 else
25924 tree oldconst = TEMPLATE_PARM_DECL (oldidx);
25925 tree newconst
25926 = build_decl (DECL_SOURCE_LOCATION (oldconst),
25927 TREE_CODE (oldconst),
25928 DECL_NAME (oldconst), newtype);
25929 TREE_CONSTANT (newconst) = TREE_CONSTANT (newdecl)
25930 = TREE_READONLY (newconst) = TREE_READONLY (newdecl) = true;
25931 SET_DECL_TEMPLATE_PARM_P (newconst);
25932 newidx = build_template_parm_index (index, level, level,
25933 newconst, newtype);
25934 TEMPLATE_PARM_PARAMETER_PACK (newidx)
25935 = TEMPLATE_PARM_PARAMETER_PACK (oldidx);
25936 DECL_INITIAL (newdecl) = DECL_INITIAL (newconst) = newidx;
25939 return newdecl;
25942 /* Returns a C++17 class deduction guide template based on the constructor
25943 CTOR. As a special case, CTOR can be a RECORD_TYPE for an implicit default
25944 guide, or REFERENCE_TYPE for an implicit copy/move guide. */
25946 static tree
25947 build_deduction_guide (tree ctor, tree outer_args, tsubst_flags_t complain)
25949 tree type, tparms, targs, fparms, fargs, ci;
25950 bool memtmpl = false;
25951 bool explicit_p;
25952 location_t loc;
25953 tree fn_tmpl = NULL_TREE;
25955 if (TYPE_P (ctor))
25957 type = ctor;
25958 bool copy_p = TREE_CODE (type) == REFERENCE_TYPE;
25959 if (copy_p)
25961 type = TREE_TYPE (type);
25962 fparms = tree_cons (NULL_TREE, type, void_list_node);
25964 else
25965 fparms = void_list_node;
25967 tree ctmpl = CLASSTYPE_TI_TEMPLATE (type);
25968 tparms = DECL_TEMPLATE_PARMS (ctmpl);
25969 targs = CLASSTYPE_TI_ARGS (type);
25970 ci = NULL_TREE;
25971 fargs = NULL_TREE;
25972 loc = DECL_SOURCE_LOCATION (ctmpl);
25973 explicit_p = false;
25975 else
25977 ++processing_template_decl;
25978 bool ok = true;
25980 fn_tmpl
25981 = (TREE_CODE (ctor) == TEMPLATE_DECL ? ctor
25982 : DECL_TI_TEMPLATE (ctor));
25983 if (outer_args)
25984 fn_tmpl = tsubst (fn_tmpl, outer_args, complain, ctor);
25985 ctor = DECL_TEMPLATE_RESULT (fn_tmpl);
25987 type = DECL_CONTEXT (ctor);
25989 tparms = DECL_TEMPLATE_PARMS (fn_tmpl);
25990 /* If type is a member class template, DECL_TI_ARGS (ctor) will have
25991 fully specialized args for the enclosing class. Strip those off, as
25992 the deduction guide won't have those template parameters. */
25993 targs = get_innermost_template_args (DECL_TI_ARGS (ctor),
25994 TMPL_PARMS_DEPTH (tparms));
25995 /* Discard the 'this' parameter. */
25996 fparms = FUNCTION_ARG_CHAIN (ctor);
25997 fargs = TREE_CHAIN (DECL_ARGUMENTS (ctor));
25998 ci = get_constraints (ctor);
25999 loc = DECL_SOURCE_LOCATION (ctor);
26000 explicit_p = DECL_NONCONVERTING_P (ctor);
26002 if (PRIMARY_TEMPLATE_P (fn_tmpl))
26004 memtmpl = true;
26006 /* For a member template constructor, we need to flatten the two
26007 template parameter lists into one, and then adjust the function
26008 signature accordingly. This gets...complicated. */
26009 tree save_parms = current_template_parms;
26011 /* For a member template we should have two levels of parms/args, one
26012 for the class and one for the constructor. We stripped
26013 specialized args for further enclosing classes above. */
26014 const int depth = 2;
26015 gcc_assert (TMPL_ARGS_DEPTH (targs) == depth);
26017 /* Template args for translating references to the two-level template
26018 parameters into references to the one-level template parameters we
26019 are creating. */
26020 tree tsubst_args = copy_node (targs);
26021 TMPL_ARGS_LEVEL (tsubst_args, depth)
26022 = copy_node (TMPL_ARGS_LEVEL (tsubst_args, depth));
26024 /* Template parms for the constructor template. */
26025 tree ftparms = TREE_VALUE (tparms);
26026 unsigned flen = TREE_VEC_LENGTH (ftparms);
26027 /* Template parms for the class template. */
26028 tparms = TREE_CHAIN (tparms);
26029 tree ctparms = TREE_VALUE (tparms);
26030 unsigned clen = TREE_VEC_LENGTH (ctparms);
26031 /* Template parms for the deduction guide start as a copy of the
26032 template parms for the class. We set current_template_parms for
26033 lookup_template_class_1. */
26034 current_template_parms = tparms = copy_node (tparms);
26035 tree new_vec = TREE_VALUE (tparms) = make_tree_vec (flen + clen);
26036 for (unsigned i = 0; i < clen; ++i)
26037 TREE_VEC_ELT (new_vec, i) = TREE_VEC_ELT (ctparms, i);
26039 /* Now we need to rewrite the constructor parms to append them to the
26040 class parms. */
26041 for (unsigned i = 0; i < flen; ++i)
26043 unsigned index = i + clen;
26044 unsigned level = 1;
26045 tree oldelt = TREE_VEC_ELT (ftparms, i);
26046 tree olddecl = TREE_VALUE (oldelt);
26047 tree newdecl = rewrite_template_parm (olddecl, index, level,
26048 tsubst_args, complain);
26049 if (newdecl == error_mark_node)
26050 ok = false;
26051 tree newdef = tsubst_template_arg (TREE_PURPOSE (oldelt),
26052 tsubst_args, complain, ctor);
26053 tree list = build_tree_list (newdef, newdecl);
26054 TEMPLATE_PARM_CONSTRAINTS (list)
26055 = tsubst_constraint_info (TEMPLATE_PARM_CONSTRAINTS (oldelt),
26056 tsubst_args, complain, ctor);
26057 TREE_VEC_ELT (new_vec, index) = list;
26058 TMPL_ARG (tsubst_args, depth, i) = template_parm_to_arg (list);
26061 /* Now we have a final set of template parms to substitute into the
26062 function signature. */
26063 targs = template_parms_to_args (tparms);
26064 fparms = tsubst_arg_types (fparms, tsubst_args, NULL_TREE,
26065 complain, ctor);
26066 fargs = tsubst (fargs, tsubst_args, complain, ctor);
26067 if (ci)
26068 ci = tsubst_constraint_info (ci, tsubst_args, complain, ctor);
26070 current_template_parms = save_parms;
26073 --processing_template_decl;
26074 if (!ok)
26075 return error_mark_node;
26078 if (!memtmpl)
26080 /* Copy the parms so we can set DECL_PRIMARY_TEMPLATE. */
26081 tparms = copy_node (tparms);
26082 INNERMOST_TEMPLATE_PARMS (tparms)
26083 = copy_node (INNERMOST_TEMPLATE_PARMS (tparms));
26086 tree fntype = build_function_type (type, fparms);
26087 tree ded_fn = build_lang_decl_loc (loc,
26088 FUNCTION_DECL,
26089 dguide_name (type), fntype);
26090 DECL_ARGUMENTS (ded_fn) = fargs;
26091 DECL_ARTIFICIAL (ded_fn) = true;
26092 DECL_NONCONVERTING_P (ded_fn) = explicit_p;
26093 tree ded_tmpl = build_template_decl (ded_fn, tparms, /*member*/false);
26094 DECL_ARTIFICIAL (ded_tmpl) = true;
26095 DECL_TEMPLATE_RESULT (ded_tmpl) = ded_fn;
26096 TREE_TYPE (ded_tmpl) = TREE_TYPE (ded_fn);
26097 DECL_TEMPLATE_INFO (ded_fn) = build_template_info (ded_tmpl, targs);
26098 DECL_PRIMARY_TEMPLATE (ded_tmpl) = ded_tmpl;
26099 if (DECL_P (ctor))
26100 DECL_ABSTRACT_ORIGIN (ded_tmpl) = fn_tmpl;
26101 if (ci)
26102 set_constraints (ded_tmpl, ci);
26104 return ded_tmpl;
26107 /* Deduce template arguments for the class template placeholder PTYPE for
26108 template TMPL based on the initializer INIT, and return the resulting
26109 type. */
26111 static tree
26112 do_class_deduction (tree ptype, tree tmpl, tree init, int flags,
26113 tsubst_flags_t complain)
26115 if (!DECL_CLASS_TEMPLATE_P (tmpl))
26117 /* We should have handled this in the caller. */
26118 if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl))
26119 return ptype;
26120 if (complain & tf_error)
26121 error ("non-class template %qT used without template arguments", tmpl);
26122 return error_mark_node;
26125 tree type = TREE_TYPE (tmpl);
26127 bool try_list_ctor = false;
26129 vec<tree,va_gc> *args;
26130 if (init == NULL_TREE
26131 || TREE_CODE (init) == TREE_LIST)
26132 args = make_tree_vector_from_list (init);
26133 else if (BRACE_ENCLOSED_INITIALIZER_P (init))
26135 try_list_ctor = TYPE_HAS_LIST_CTOR (type);
26136 if (try_list_ctor && CONSTRUCTOR_NELTS (init) == 1)
26138 /* As an exception, the first phase in 16.3.1.7 (considering the
26139 initializer list as a single argument) is omitted if the
26140 initializer list consists of a single expression of type cv U,
26141 where U is a specialization of C or a class derived from a
26142 specialization of C. */
26143 tree elt = CONSTRUCTOR_ELT (init, 0)->value;
26144 tree etype = TREE_TYPE (elt);
26146 tree tparms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (tmpl));
26147 tree targs = make_tree_vec (TREE_VEC_LENGTH (tparms));
26148 int err = unify (tparms, targs, type, etype,
26149 UNIFY_ALLOW_DERIVED, /*explain*/false);
26150 if (err == 0)
26151 try_list_ctor = false;
26152 ggc_free (targs);
26154 if (try_list_ctor || is_std_init_list (type))
26155 args = make_tree_vector_single (init);
26156 else
26157 args = make_tree_vector_from_ctor (init);
26159 else
26160 args = make_tree_vector_single (init);
26162 tree dname = dguide_name (tmpl);
26163 tree cands = lookup_qualified_name (CP_DECL_CONTEXT (tmpl), dname,
26164 /*type*/false, /*complain*/false,
26165 /*hidden*/false);
26166 bool elided = false;
26167 if (cands == error_mark_node)
26168 cands = NULL_TREE;
26170 /* Prune explicit deduction guides in copy-initialization context. */
26171 if (flags & LOOKUP_ONLYCONVERTING)
26173 for (lkp_iterator iter (cands); !elided && iter; ++iter)
26174 if (DECL_NONCONVERTING_P (STRIP_TEMPLATE (*iter)))
26175 elided = true;
26177 if (elided)
26179 /* Found a nonconverting guide, prune the candidates. */
26180 tree pruned = NULL_TREE;
26181 for (lkp_iterator iter (cands); iter; ++iter)
26182 if (!DECL_NONCONVERTING_P (STRIP_TEMPLATE (*iter)))
26183 pruned = lookup_add (*iter, pruned);
26185 cands = pruned;
26189 tree outer_args = NULL_TREE;
26190 if (DECL_CLASS_SCOPE_P (tmpl)
26191 && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (tmpl)))
26193 outer_args = CLASSTYPE_TI_ARGS (DECL_CONTEXT (tmpl));
26194 type = TREE_TYPE (most_general_template (tmpl));
26197 bool saw_ctor = false;
26198 // FIXME cache artificial deduction guides
26199 for (ovl_iterator iter (CLASSTYPE_CONSTRUCTORS (type)); iter; ++iter)
26201 tree guide = build_deduction_guide (*iter, outer_args, complain);
26202 if (guide == error_mark_node)
26203 return error_mark_node;
26204 if ((flags & LOOKUP_ONLYCONVERTING)
26205 && DECL_NONCONVERTING_P (STRIP_TEMPLATE (guide)))
26206 elided = true;
26207 else
26208 cands = lookup_add (guide, cands);
26210 saw_ctor = true;
26213 tree call = error_mark_node;
26215 /* If this is list-initialization and the class has a list constructor, first
26216 try deducing from the list as a single argument, as [over.match.list]. */
26217 tree list_cands = NULL_TREE;
26218 if (try_list_ctor && cands)
26219 for (lkp_iterator iter (cands); iter; ++iter)
26221 tree dg = *iter;
26222 if (is_list_ctor (dg))
26223 list_cands = lookup_add (dg, list_cands);
26225 if (list_cands)
26227 ++cp_unevaluated_operand;
26228 call = build_new_function_call (list_cands, &args, tf_decltype);
26229 --cp_unevaluated_operand;
26231 if (call == error_mark_node)
26233 /* That didn't work, now try treating the list as a sequence of
26234 arguments. */
26235 release_tree_vector (args);
26236 args = make_tree_vector_from_ctor (init);
26240 /* Maybe generate an implicit deduction guide. */
26241 if (call == error_mark_node && args->length () < 2)
26243 tree gtype = NULL_TREE;
26245 if (args->length () == 1)
26246 /* Generate a copy guide. */
26247 gtype = build_reference_type (type);
26248 else if (!saw_ctor)
26249 /* Generate a default guide. */
26250 gtype = type;
26252 if (gtype)
26254 tree guide = build_deduction_guide (gtype, outer_args, complain);
26255 if (guide == error_mark_node)
26256 return error_mark_node;
26257 cands = lookup_add (guide, cands);
26261 if (elided && !cands)
26263 error ("cannot deduce template arguments for copy-initialization"
26264 " of %qT, as it has no non-explicit deduction guides or "
26265 "user-declared constructors", type);
26266 return error_mark_node;
26268 else if (!cands && call == error_mark_node)
26270 error ("cannot deduce template arguments of %qT, as it has no viable "
26271 "deduction guides", type);
26272 return error_mark_node;
26275 if (call == error_mark_node)
26277 ++cp_unevaluated_operand;
26278 call = build_new_function_call (cands, &args, tf_decltype);
26279 --cp_unevaluated_operand;
26282 if (call == error_mark_node && (complain & tf_warning_or_error))
26284 error ("class template argument deduction failed:");
26286 ++cp_unevaluated_operand;
26287 call = build_new_function_call (cands, &args, complain | tf_decltype);
26288 --cp_unevaluated_operand;
26290 if (elided)
26291 inform (input_location, "explicit deduction guides not considered "
26292 "for copy-initialization");
26295 release_tree_vector (args);
26297 return cp_build_qualified_type (TREE_TYPE (call), cp_type_quals (ptype));
26300 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
26301 from INIT. AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.
26302 The CONTEXT determines the context in which auto deduction is performed
26303 and is used to control error diagnostics. FLAGS are the LOOKUP_* flags.
26304 OUTER_TARGS are used during template argument deduction
26305 (context == adc_unify) to properly substitute the result, and is ignored
26306 in other contexts.
26308 For partial-concept-ids, extra args may be appended to the list of deduced
26309 template arguments prior to determining constraint satisfaction. */
26311 tree
26312 do_auto_deduction (tree type, tree init, tree auto_node,
26313 tsubst_flags_t complain, auto_deduction_context context,
26314 tree outer_targs, int flags)
26316 tree targs;
26318 if (init == error_mark_node)
26319 return error_mark_node;
26321 if (init && type_dependent_expression_p (init)
26322 && context != adc_unify)
26323 /* Defining a subset of type-dependent expressions that we can deduce
26324 from ahead of time isn't worth the trouble. */
26325 return type;
26327 /* Similarly, we can't deduce from another undeduced decl. */
26328 if (init && undeduced_auto_decl (init))
26329 return type;
26331 if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (auto_node))
26332 /* C++17 class template argument deduction. */
26333 return do_class_deduction (type, tmpl, init, flags, complain);
26335 if (init == NULL_TREE || TREE_TYPE (init) == NULL_TREE)
26336 /* Nothing we can do with this, even in deduction context. */
26337 return type;
26339 /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
26340 with either a new invented type template parameter U or, if the
26341 initializer is a braced-init-list (8.5.4), with
26342 std::initializer_list<U>. */
26343 if (BRACE_ENCLOSED_INITIALIZER_P (init))
26345 if (!DIRECT_LIST_INIT_P (init))
26346 type = listify_autos (type, auto_node);
26347 else if (CONSTRUCTOR_NELTS (init) == 1)
26348 init = CONSTRUCTOR_ELT (init, 0)->value;
26349 else
26351 if (complain & tf_warning_or_error)
26353 if (permerror (input_location, "direct-list-initialization of "
26354 "%<auto%> requires exactly one element"))
26355 inform (input_location,
26356 "for deduction to %<std::initializer_list%>, use copy-"
26357 "list-initialization (i.e. add %<=%> before the %<{%>)");
26359 type = listify_autos (type, auto_node);
26363 if (type == error_mark_node)
26364 return error_mark_node;
26366 init = resolve_nondeduced_context (init, complain);
26368 if (context == adc_decomp_type
26369 && auto_node == type
26370 && init != error_mark_node
26371 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
26372 /* [dcl.decomp]/1 - if decomposition declaration has no ref-qualifiers
26373 and initializer has array type, deduce cv-qualified array type. */
26374 return cp_build_qualified_type_real (TREE_TYPE (init), TYPE_QUALS (type),
26375 complain);
26376 else if (AUTO_IS_DECLTYPE (auto_node))
26378 bool id = (DECL_P (init)
26379 || ((TREE_CODE (init) == COMPONENT_REF
26380 || TREE_CODE (init) == SCOPE_REF)
26381 && !REF_PARENTHESIZED_P (init)));
26382 targs = make_tree_vec (1);
26383 TREE_VEC_ELT (targs, 0)
26384 = finish_decltype_type (init, id, tf_warning_or_error);
26385 if (type != auto_node)
26387 if (complain & tf_error)
26388 error ("%qT as type rather than plain %<decltype(auto)%>", type);
26389 return error_mark_node;
26392 else
26394 tree parms = build_tree_list (NULL_TREE, type);
26395 tree tparms;
26397 if (flag_concepts)
26398 tparms = extract_autos (type);
26399 else
26401 tparms = make_tree_vec (1);
26402 TREE_VEC_ELT (tparms, 0)
26403 = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
26406 targs = make_tree_vec (TREE_VEC_LENGTH (tparms));
26407 int val = type_unification_real (tparms, targs, parms, &init, 1, 0,
26408 DEDUCE_CALL, LOOKUP_NORMAL,
26409 NULL, /*explain_p=*/false);
26410 if (val > 0)
26412 if (processing_template_decl)
26413 /* Try again at instantiation time. */
26414 return type;
26415 if (type && type != error_mark_node
26416 && (complain & tf_error))
26417 /* If type is error_mark_node a diagnostic must have been
26418 emitted by now. Also, having a mention to '<type error>'
26419 in the diagnostic is not really useful to the user. */
26421 if (cfun && auto_node == current_function_auto_return_pattern
26422 && LAMBDA_FUNCTION_P (current_function_decl))
26423 error ("unable to deduce lambda return type from %qE", init);
26424 else
26425 error ("unable to deduce %qT from %qE", type, init);
26426 type_unification_real (tparms, targs, parms, &init, 1, 0,
26427 DEDUCE_CALL, LOOKUP_NORMAL,
26428 NULL, /*explain_p=*/true);
26430 return error_mark_node;
26434 /* Check any placeholder constraints against the deduced type. */
26435 if (flag_concepts && !processing_template_decl)
26436 if (tree constr = PLACEHOLDER_TYPE_CONSTRAINTS (auto_node))
26438 /* Use the deduced type to check the associated constraints. If we
26439 have a partial-concept-id, rebuild the argument list so that
26440 we check using the extra arguments. */
26441 gcc_assert (TREE_CODE (constr) == CHECK_CONSTR);
26442 tree cargs = CHECK_CONSTR_ARGS (constr);
26443 if (TREE_VEC_LENGTH (cargs) > 1)
26445 cargs = copy_node (cargs);
26446 TREE_VEC_ELT (cargs, 0) = TREE_VEC_ELT (targs, 0);
26448 else
26449 cargs = targs;
26450 if (!constraints_satisfied_p (constr, cargs))
26452 if (complain & tf_warning_or_error)
26454 switch (context)
26456 case adc_unspecified:
26457 case adc_unify:
26458 error("placeholder constraints not satisfied");
26459 break;
26460 case adc_variable_type:
26461 case adc_decomp_type:
26462 error ("deduced initializer does not satisfy "
26463 "placeholder constraints");
26464 break;
26465 case adc_return_type:
26466 error ("deduced return type does not satisfy "
26467 "placeholder constraints");
26468 break;
26469 case adc_requirement:
26470 error ("deduced expression type does not satisfy "
26471 "placeholder constraints");
26472 break;
26474 diagnose_constraints (input_location, constr, targs);
26476 return error_mark_node;
26480 if (processing_template_decl && context != adc_unify)
26481 outer_targs = current_template_args ();
26482 targs = add_to_template_args (outer_targs, targs);
26483 return tsubst (type, targs, complain, NULL_TREE);
26486 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
26487 result. */
26489 tree
26490 splice_late_return_type (tree type, tree late_return_type)
26492 if (is_auto (type))
26494 if (late_return_type)
26495 return late_return_type;
26497 tree idx = get_template_parm_index (type);
26498 if (TEMPLATE_PARM_LEVEL (idx) <= processing_template_decl)
26499 /* In an abbreviated function template we didn't know we were dealing
26500 with a function template when we saw the auto return type, so update
26501 it to have the correct level. */
26502 return make_auto_1 (TYPE_IDENTIFIER (type), true);
26504 return type;
26507 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto' or
26508 'decltype(auto)' or a deduced class template. */
26510 bool
26511 is_auto (const_tree type)
26513 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
26514 && (TYPE_IDENTIFIER (type) == auto_identifier
26515 || TYPE_IDENTIFIER (type) == decltype_auto_identifier
26516 || CLASS_PLACEHOLDER_TEMPLATE (type)))
26517 return true;
26518 else
26519 return false;
26522 /* for_each_template_parm callback for type_uses_auto. */
26525 is_auto_r (tree tp, void */*data*/)
26527 return is_auto (tp);
26530 /* Returns the TEMPLATE_TYPE_PARM in TYPE representing `auto' iff TYPE contains
26531 a use of `auto'. Returns NULL_TREE otherwise. */
26533 tree
26534 type_uses_auto (tree type)
26536 if (type == NULL_TREE)
26537 return NULL_TREE;
26538 else if (flag_concepts)
26540 /* The Concepts TS allows multiple autos in one type-specifier; just
26541 return the first one we find, do_auto_deduction will collect all of
26542 them. */
26543 if (uses_template_parms (type))
26544 return for_each_template_parm (type, is_auto_r, /*data*/NULL,
26545 /*visited*/NULL, /*nondeduced*/true);
26546 else
26547 return NULL_TREE;
26549 else
26550 return find_type_usage (type, is_auto);
26553 /* For a given template T, return the vector of typedefs referenced
26554 in T for which access check is needed at T instantiation time.
26555 T is either a FUNCTION_DECL or a RECORD_TYPE.
26556 Those typedefs were added to T by the function
26557 append_type_to_template_for_access_check. */
26559 vec<qualified_typedef_usage_t, va_gc> *
26560 get_types_needing_access_check (tree t)
26562 tree ti;
26563 vec<qualified_typedef_usage_t, va_gc> *result = NULL;
26565 if (!t || t == error_mark_node)
26566 return NULL;
26568 if (!(ti = get_template_info (t)))
26569 return NULL;
26571 if (CLASS_TYPE_P (t)
26572 || TREE_CODE (t) == FUNCTION_DECL)
26574 if (!TI_TEMPLATE (ti))
26575 return NULL;
26577 result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
26580 return result;
26583 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
26584 tied to T. That list of typedefs will be access checked at
26585 T instantiation time.
26586 T is either a FUNCTION_DECL or a RECORD_TYPE.
26587 TYPE_DECL is a TYPE_DECL node representing a typedef.
26588 SCOPE is the scope through which TYPE_DECL is accessed.
26589 LOCATION is the location of the usage point of TYPE_DECL.
26591 This function is a subroutine of
26592 append_type_to_template_for_access_check. */
26594 static void
26595 append_type_to_template_for_access_check_1 (tree t,
26596 tree type_decl,
26597 tree scope,
26598 location_t location)
26600 qualified_typedef_usage_t typedef_usage;
26601 tree ti;
26603 if (!t || t == error_mark_node)
26604 return;
26606 gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
26607 || CLASS_TYPE_P (t))
26608 && type_decl
26609 && TREE_CODE (type_decl) == TYPE_DECL
26610 && scope);
26612 if (!(ti = get_template_info (t)))
26613 return;
26615 gcc_assert (TI_TEMPLATE (ti));
26617 typedef_usage.typedef_decl = type_decl;
26618 typedef_usage.context = scope;
26619 typedef_usage.locus = location;
26621 vec_safe_push (TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti), typedef_usage);
26624 /* Append TYPE_DECL to the template TEMPL.
26625 TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
26626 At TEMPL instanciation time, TYPE_DECL will be checked to see
26627 if it can be accessed through SCOPE.
26628 LOCATION is the location of the usage point of TYPE_DECL.
26630 e.g. consider the following code snippet:
26632 class C
26634 typedef int myint;
26637 template<class U> struct S
26639 C::myint mi; // <-- usage point of the typedef C::myint
26642 S<char> s;
26644 At S<char> instantiation time, we need to check the access of C::myint
26645 In other words, we need to check the access of the myint typedef through
26646 the C scope. For that purpose, this function will add the myint typedef
26647 and the scope C through which its being accessed to a list of typedefs
26648 tied to the template S. That list will be walked at template instantiation
26649 time and access check performed on each typedefs it contains.
26650 Note that this particular code snippet should yield an error because
26651 myint is private to C. */
26653 void
26654 append_type_to_template_for_access_check (tree templ,
26655 tree type_decl,
26656 tree scope,
26657 location_t location)
26659 qualified_typedef_usage_t *iter;
26660 unsigned i;
26662 gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
26664 /* Make sure we don't append the type to the template twice. */
26665 FOR_EACH_VEC_SAFE_ELT (get_types_needing_access_check (templ), i, iter)
26666 if (iter->typedef_decl == type_decl && scope == iter->context)
26667 return;
26669 append_type_to_template_for_access_check_1 (templ, type_decl,
26670 scope, location);
26673 /* Convert the generic type parameters in PARM that match the types given in the
26674 range [START_IDX, END_IDX) from the current_template_parms into generic type
26675 packs. */
26677 tree
26678 convert_generic_types_to_packs (tree parm, int start_idx, int end_idx)
26680 tree current = current_template_parms;
26681 int depth = TMPL_PARMS_DEPTH (current);
26682 current = INNERMOST_TEMPLATE_PARMS (current);
26683 tree replacement = make_tree_vec (TREE_VEC_LENGTH (current));
26685 for (int i = 0; i < start_idx; ++i)
26686 TREE_VEC_ELT (replacement, i)
26687 = TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (current, i)));
26689 for (int i = start_idx; i < end_idx; ++i)
26691 /* Create a distinct parameter pack type from the current parm and add it
26692 to the replacement args to tsubst below into the generic function
26693 parameter. */
26695 tree o = TREE_TYPE (TREE_VALUE
26696 (TREE_VEC_ELT (current, i)));
26697 tree t = copy_type (o);
26698 TEMPLATE_TYPE_PARM_INDEX (t)
26699 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (o),
26700 o, 0, 0, tf_none);
26701 TREE_TYPE (TEMPLATE_TYPE_DECL (t)) = t;
26702 TYPE_STUB_DECL (t) = TYPE_NAME (t) = TEMPLATE_TYPE_DECL (t);
26703 TYPE_MAIN_VARIANT (t) = t;
26704 TEMPLATE_TYPE_PARAMETER_PACK (t) = true;
26705 TYPE_CANONICAL (t) = canonical_type_parameter (t);
26706 TREE_VEC_ELT (replacement, i) = t;
26707 TREE_VALUE (TREE_VEC_ELT (current, i)) = TREE_CHAIN (t);
26710 for (int i = end_idx, e = TREE_VEC_LENGTH (current); i < e; ++i)
26711 TREE_VEC_ELT (replacement, i)
26712 = TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (current, i)));
26714 /* If there are more levels then build up the replacement with the outer
26715 template parms. */
26716 if (depth > 1)
26717 replacement = add_to_template_args (template_parms_to_args
26718 (TREE_CHAIN (current_template_parms)),
26719 replacement);
26721 return tsubst (parm, replacement, tf_none, NULL_TREE);
26724 /* Entries in the decl_constraint hash table. */
26725 struct GTY((for_user)) constr_entry
26727 tree decl;
26728 tree ci;
26731 /* Hashing function and equality for constraint entries. */
26732 struct constr_hasher : ggc_ptr_hash<constr_entry>
26734 static hashval_t hash (constr_entry *e)
26736 return (hashval_t)DECL_UID (e->decl);
26739 static bool equal (constr_entry *e1, constr_entry *e2)
26741 return e1->decl == e2->decl;
26745 /* A mapping from declarations to constraint information. Note that
26746 both templates and their underlying declarations are mapped to the
26747 same constraint information.
26749 FIXME: This is defined in pt.c because garbage collection
26750 code is not being generated for constraint.cc. */
26752 static GTY (()) hash_table<constr_hasher> *decl_constraints;
26754 /* Returns the template constraints of declaration T. If T is not
26755 constrained, return NULL_TREE. Note that T must be non-null. */
26757 tree
26758 get_constraints (tree t)
26760 if (!flag_concepts)
26761 return NULL_TREE;
26763 gcc_assert (DECL_P (t));
26764 if (TREE_CODE (t) == TEMPLATE_DECL)
26765 t = DECL_TEMPLATE_RESULT (t);
26766 constr_entry elt = { t, NULL_TREE };
26767 constr_entry* found = decl_constraints->find (&elt);
26768 if (found)
26769 return found->ci;
26770 else
26771 return NULL_TREE;
26774 /* Associate the given constraint information CI with the declaration
26775 T. If T is a template, then the constraints are associated with
26776 its underlying declaration. Don't build associations if CI is
26777 NULL_TREE. */
26779 void
26780 set_constraints (tree t, tree ci)
26782 if (!ci)
26783 return;
26784 gcc_assert (t && flag_concepts);
26785 if (TREE_CODE (t) == TEMPLATE_DECL)
26786 t = DECL_TEMPLATE_RESULT (t);
26787 gcc_assert (!get_constraints (t));
26788 constr_entry elt = {t, ci};
26789 constr_entry** slot = decl_constraints->find_slot (&elt, INSERT);
26790 constr_entry* entry = ggc_alloc<constr_entry> ();
26791 *entry = elt;
26792 *slot = entry;
26795 /* Remove the associated constraints of the declaration T. */
26797 void
26798 remove_constraints (tree t)
26800 gcc_assert (DECL_P (t));
26801 if (TREE_CODE (t) == TEMPLATE_DECL)
26802 t = DECL_TEMPLATE_RESULT (t);
26804 constr_entry elt = {t, NULL_TREE};
26805 constr_entry** slot = decl_constraints->find_slot (&elt, NO_INSERT);
26806 if (slot)
26807 decl_constraints->clear_slot (slot);
26810 /* Memoized satisfaction results for declarations. This
26811 maps the pair (constraint_info, arguments) to the result computed
26812 by constraints_satisfied_p. */
26814 struct GTY((for_user)) constraint_sat_entry
26816 tree ci;
26817 tree args;
26818 tree result;
26821 /* Hashing function and equality for constraint entries. */
26823 struct constraint_sat_hasher : ggc_ptr_hash<constraint_sat_entry>
26825 static hashval_t hash (constraint_sat_entry *e)
26827 hashval_t val = iterative_hash_object(e->ci, 0);
26828 return iterative_hash_template_arg (e->args, val);
26831 static bool equal (constraint_sat_entry *e1, constraint_sat_entry *e2)
26833 return e1->ci == e2->ci && comp_template_args (e1->args, e2->args);
26837 /* Memoized satisfaction results for concept checks. */
26839 struct GTY((for_user)) concept_spec_entry
26841 tree tmpl;
26842 tree args;
26843 tree result;
26846 /* Hashing function and equality for constraint entries. */
26848 struct concept_spec_hasher : ggc_ptr_hash<concept_spec_entry>
26850 static hashval_t hash (concept_spec_entry *e)
26852 return hash_tmpl_and_args (e->tmpl, e->args);
26855 static bool equal (concept_spec_entry *e1, concept_spec_entry *e2)
26857 ++comparing_specializations;
26858 bool eq = e1->tmpl == e2->tmpl && comp_template_args (e1->args, e2->args);
26859 --comparing_specializations;
26860 return eq;
26864 static GTY (()) hash_table<constraint_sat_hasher> *constraint_memos;
26865 static GTY (()) hash_table<concept_spec_hasher> *concept_memos;
26867 /* Search for a memoized satisfaction result. Returns one of the
26868 truth value nodes if previously memoized, or NULL_TREE otherwise. */
26870 tree
26871 lookup_constraint_satisfaction (tree ci, tree args)
26873 constraint_sat_entry elt = { ci, args, NULL_TREE };
26874 constraint_sat_entry* found = constraint_memos->find (&elt);
26875 if (found)
26876 return found->result;
26877 else
26878 return NULL_TREE;
26881 /* Memoize the result of a satisfication test. Returns the saved result. */
26883 tree
26884 memoize_constraint_satisfaction (tree ci, tree args, tree result)
26886 constraint_sat_entry elt = {ci, args, result};
26887 constraint_sat_entry** slot = constraint_memos->find_slot (&elt, INSERT);
26888 constraint_sat_entry* entry = ggc_alloc<constraint_sat_entry> ();
26889 *entry = elt;
26890 *slot = entry;
26891 return result;
26894 /* Search for a memoized satisfaction result for a concept. */
26896 tree
26897 lookup_concept_satisfaction (tree tmpl, tree args)
26899 concept_spec_entry elt = { tmpl, args, NULL_TREE };
26900 concept_spec_entry* found = concept_memos->find (&elt);
26901 if (found)
26902 return found->result;
26903 else
26904 return NULL_TREE;
26907 /* Memoize the result of a concept check. Returns the saved result. */
26909 tree
26910 memoize_concept_satisfaction (tree tmpl, tree args, tree result)
26912 concept_spec_entry elt = {tmpl, args, result};
26913 concept_spec_entry** slot = concept_memos->find_slot (&elt, INSERT);
26914 concept_spec_entry* entry = ggc_alloc<concept_spec_entry> ();
26915 *entry = elt;
26916 *slot = entry;
26917 return result;
26920 static GTY (()) hash_table<concept_spec_hasher> *concept_expansions;
26922 /* Returns a prior concept specialization. This returns the substituted
26923 and normalized constraints defined by the concept. */
26925 tree
26926 get_concept_expansion (tree tmpl, tree args)
26928 concept_spec_entry elt = { tmpl, args, NULL_TREE };
26929 concept_spec_entry* found = concept_expansions->find (&elt);
26930 if (found)
26931 return found->result;
26932 else
26933 return NULL_TREE;
26936 /* Save a concept expansion for later. */
26938 tree
26939 save_concept_expansion (tree tmpl, tree args, tree def)
26941 concept_spec_entry elt = {tmpl, args, def};
26942 concept_spec_entry** slot = concept_expansions->find_slot (&elt, INSERT);
26943 concept_spec_entry* entry = ggc_alloc<concept_spec_entry> ();
26944 *entry = elt;
26945 *slot = entry;
26946 return def;
26949 static hashval_t
26950 hash_subsumption_args (tree t1, tree t2)
26952 gcc_assert (TREE_CODE (t1) == CHECK_CONSTR);
26953 gcc_assert (TREE_CODE (t2) == CHECK_CONSTR);
26954 int val = 0;
26955 val = iterative_hash_object (CHECK_CONSTR_CONCEPT (t1), val);
26956 val = iterative_hash_template_arg (CHECK_CONSTR_ARGS (t1), val);
26957 val = iterative_hash_object (CHECK_CONSTR_CONCEPT (t2), val);
26958 val = iterative_hash_template_arg (CHECK_CONSTR_ARGS (t2), val);
26959 return val;
26962 /* Compare the constraints of two subsumption entries. The LEFT1 and
26963 LEFT2 arguments comprise the first subsumption pair and the RIGHT1
26964 and RIGHT2 arguments comprise the second. These are all CHECK_CONSTRs. */
26966 static bool
26967 comp_subsumption_args (tree left1, tree left2, tree right1, tree right2)
26969 if (CHECK_CONSTR_CONCEPT (left1) == CHECK_CONSTR_CONCEPT (right1))
26970 if (CHECK_CONSTR_CONCEPT (left2) == CHECK_CONSTR_CONCEPT (right2))
26971 if (comp_template_args (CHECK_CONSTR_ARGS (left1),
26972 CHECK_CONSTR_ARGS (right1)))
26973 return comp_template_args (CHECK_CONSTR_ARGS (left2),
26974 CHECK_CONSTR_ARGS (right2));
26975 return false;
26978 /* Key/value pair for learning and memoizing subsumption results. This
26979 associates a pair of check constraints (including arguments) with
26980 a boolean value indicating the result. */
26982 struct GTY((for_user)) subsumption_entry
26984 tree t1;
26985 tree t2;
26986 bool result;
26989 /* Hashing function and equality for constraint entries. */
26991 struct subsumption_hasher : ggc_ptr_hash<subsumption_entry>
26993 static hashval_t hash (subsumption_entry *e)
26995 return hash_subsumption_args (e->t1, e->t2);
26998 static bool equal (subsumption_entry *e1, subsumption_entry *e2)
27000 ++comparing_specializations;
27001 bool eq = comp_subsumption_args(e1->t1, e1->t2, e2->t1, e2->t2);
27002 --comparing_specializations;
27003 return eq;
27007 static GTY (()) hash_table<subsumption_hasher> *subsumption_table;
27009 /* Search for a previously cached subsumption result. */
27011 bool*
27012 lookup_subsumption_result (tree t1, tree t2)
27014 subsumption_entry elt = { t1, t2, false };
27015 subsumption_entry* found = subsumption_table->find (&elt);
27016 if (found)
27017 return &found->result;
27018 else
27019 return 0;
27022 /* Save a subsumption result. */
27024 bool
27025 save_subsumption_result (tree t1, tree t2, bool result)
27027 subsumption_entry elt = {t1, t2, result};
27028 subsumption_entry** slot = subsumption_table->find_slot (&elt, INSERT);
27029 subsumption_entry* entry = ggc_alloc<subsumption_entry> ();
27030 *entry = elt;
27031 *slot = entry;
27032 return result;
27035 /* Set up the hash table for constraint association. */
27037 void
27038 init_constraint_processing (void)
27040 if (!flag_concepts)
27041 return;
27043 decl_constraints = hash_table<constr_hasher>::create_ggc(37);
27044 constraint_memos = hash_table<constraint_sat_hasher>::create_ggc(37);
27045 concept_memos = hash_table<concept_spec_hasher>::create_ggc(37);
27046 concept_expansions = hash_table<concept_spec_hasher>::create_ggc(37);
27047 subsumption_table = hash_table<subsumption_hasher>::create_ggc(37);
27050 /* __integer_pack(N) in a pack expansion expands to a sequence of numbers from
27051 0..N-1. */
27053 void
27054 declare_integer_pack (void)
27056 tree ipfn = push_library_fn (get_identifier ("__integer_pack"),
27057 build_function_type_list (integer_type_node,
27058 integer_type_node,
27059 NULL_TREE),
27060 NULL_TREE, ECF_CONST);
27061 DECL_DECLARED_CONSTEXPR_P (ipfn) = true;
27062 DECL_BUILT_IN_CLASS (ipfn) = BUILT_IN_FRONTEND;
27065 /* Set up the hash tables for template instantiations. */
27067 void
27068 init_template_processing (void)
27070 decl_specializations = hash_table<spec_hasher>::create_ggc (37);
27071 type_specializations = hash_table<spec_hasher>::create_ggc (37);
27073 if (cxx_dialect >= cxx11)
27074 declare_integer_pack ();
27077 /* Print stats about the template hash tables for -fstats. */
27079 void
27080 print_template_statistics (void)
27082 fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
27083 "%f collisions\n", (long) decl_specializations->size (),
27084 (long) decl_specializations->elements (),
27085 decl_specializations->collisions ());
27086 fprintf (stderr, "type_specializations: size %ld, %ld elements, "
27087 "%f collisions\n", (long) type_specializations->size (),
27088 (long) type_specializations->elements (),
27089 type_specializations->collisions ());
27092 #if CHECKING_P
27094 namespace selftest {
27096 /* Verify that build_non_dependent_expr () works, for various expressions,
27097 and that location wrappers don't affect the results. */
27099 static void
27100 test_build_non_dependent_expr ()
27102 location_t loc = BUILTINS_LOCATION;
27104 /* Verify constants, without and with location wrappers. */
27105 tree int_cst = build_int_cst (integer_type_node, 42);
27106 ASSERT_EQ (int_cst, build_non_dependent_expr (int_cst));
27108 tree wrapped_int_cst = maybe_wrap_with_location (int_cst, loc);
27109 ASSERT_TRUE (location_wrapper_p (wrapped_int_cst));
27110 ASSERT_EQ (wrapped_int_cst, build_non_dependent_expr (wrapped_int_cst));
27112 tree string_lit = build_string (4, "foo");
27113 TREE_TYPE (string_lit) = char_array_type_node;
27114 string_lit = fix_string_type (string_lit);
27115 ASSERT_EQ (string_lit, build_non_dependent_expr (string_lit));
27117 tree wrapped_string_lit = maybe_wrap_with_location (string_lit, loc);
27118 ASSERT_TRUE (location_wrapper_p (wrapped_string_lit));
27119 ASSERT_EQ (wrapped_string_lit,
27120 build_non_dependent_expr (wrapped_string_lit));
27123 /* Verify that type_dependent_expression_p () works correctly, even
27124 in the presence of location wrapper nodes. */
27126 static void
27127 test_type_dependent_expression_p ()
27129 location_t loc = BUILTINS_LOCATION;
27131 tree name = get_identifier ("foo");
27133 /* If no templates are involved, nothing is type-dependent. */
27134 gcc_assert (!processing_template_decl);
27135 ASSERT_FALSE (type_dependent_expression_p (name));
27137 ++processing_template_decl;
27139 /* Within a template, an unresolved name is always type-dependent. */
27140 ASSERT_TRUE (type_dependent_expression_p (name));
27142 /* Ensure it copes with NULL_TREE and errors. */
27143 ASSERT_FALSE (type_dependent_expression_p (NULL_TREE));
27144 ASSERT_FALSE (type_dependent_expression_p (error_mark_node));
27146 /* A USING_DECL in a template should be type-dependent, even if wrapped
27147 with a location wrapper (PR c++/83799). */
27148 tree using_decl = build_lang_decl (USING_DECL, name, NULL_TREE);
27149 TREE_TYPE (using_decl) = integer_type_node;
27150 ASSERT_TRUE (type_dependent_expression_p (using_decl));
27151 tree wrapped_using_decl = maybe_wrap_with_location (using_decl, loc);
27152 ASSERT_TRUE (location_wrapper_p (wrapped_using_decl));
27153 ASSERT_TRUE (type_dependent_expression_p (wrapped_using_decl));
27155 --processing_template_decl;
27158 /* Run all of the selftests within this file. */
27160 void
27161 cp_pt_c_tests ()
27163 test_build_non_dependent_expr ();
27164 test_type_dependent_expression_p ();
27167 } // namespace selftest
27169 #endif /* #if CHECKING_P */
27171 #include "gt-cp-pt.h"