read-rtl.c (parse_reg_note_name): Replace Yoda conditions with typical order conditions.
[gcc.git] / gcc / cp / pt.c
1 /* Handle parameterized types (templates) for GNU -*- C++ -*-.
2 Copyright (C) 1992-2017 Free Software Foundation, Inc.
3 Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
4 Rewritten by Jason Merrill (jason@cygnus.com).
5
6 This file is part of GCC.
7
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.
12
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.
17
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/>. */
21
22 /* Known bugs or deficiencies include:
23
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". */
26
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
45 /* The type of functions taking a tree, and some additional data, and
46 returning an int. */
47 typedef int (*tree_fn_t) (tree, void*);
48
49 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
50 instantiations have been deferred, either because their definitions
51 were not yet available, or because we were putting off doing the work. */
52 struct GTY ((chain_next ("%h.next"))) pending_template {
53 struct pending_template *next;
54 struct tinst_level *tinst;
55 };
56
57 static GTY(()) struct pending_template *pending_templates;
58 static GTY(()) struct pending_template *last_pending_template;
59
60 int processing_template_parmlist;
61 static int template_header_count;
62
63 static GTY(()) tree saved_trees;
64 static vec<int> inline_parm_levels;
65
66 static GTY(()) struct tinst_level *current_tinst_level;
67
68 static GTY(()) tree saved_access_scope;
69
70 /* Live only within one (recursive) call to tsubst_expr. We use
71 this to pass the statement expression node from the STMT_EXPR
72 to the EXPR_STMT that is its result. */
73 static tree cur_stmt_expr;
74
75 // -------------------------------------------------------------------------- //
76 // Local Specialization Stack
77 //
78 // Implementation of the RAII helper for creating new local
79 // specializations.
80 local_specialization_stack::local_specialization_stack (lss_policy policy)
81 : saved (local_specializations)
82 {
83 if (policy == lss_blank || !saved)
84 local_specializations = new hash_map<tree, tree>;
85 else
86 local_specializations = new hash_map<tree, tree>(*saved);
87 }
88
89 local_specialization_stack::~local_specialization_stack ()
90 {
91 delete local_specializations;
92 local_specializations = saved;
93 }
94
95 /* True if we've recursed into fn_type_unification too many times. */
96 static bool excessive_deduction_depth;
97
98 struct GTY((for_user)) spec_entry
99 {
100 tree tmpl;
101 tree args;
102 tree spec;
103 };
104
105 struct spec_hasher : ggc_ptr_hash<spec_entry>
106 {
107 static hashval_t hash (spec_entry *);
108 static bool equal (spec_entry *, spec_entry *);
109 };
110
111 static GTY (()) hash_table<spec_hasher> *decl_specializations;
112
113 static GTY (()) hash_table<spec_hasher> *type_specializations;
114
115 /* Contains canonical template parameter types. The vector is indexed by
116 the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
117 TREE_LIST, whose TREE_VALUEs contain the canonical template
118 parameters of various types and levels. */
119 static GTY(()) vec<tree, va_gc> *canonical_template_parms;
120
121 #define UNIFY_ALLOW_NONE 0
122 #define UNIFY_ALLOW_MORE_CV_QUAL 1
123 #define UNIFY_ALLOW_LESS_CV_QUAL 2
124 #define UNIFY_ALLOW_DERIVED 4
125 #define UNIFY_ALLOW_INTEGER 8
126 #define UNIFY_ALLOW_OUTER_LEVEL 16
127 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
128 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
129
130 enum template_base_result {
131 tbr_incomplete_type,
132 tbr_ambiguous_baseclass,
133 tbr_success
134 };
135
136 static void push_access_scope (tree);
137 static void pop_access_scope (tree);
138 static bool resolve_overloaded_unification (tree, tree, tree, tree,
139 unification_kind_t, int,
140 bool);
141 static int try_one_overload (tree, tree, tree, tree, tree,
142 unification_kind_t, int, bool, bool);
143 static int unify (tree, tree, tree, tree, int, bool);
144 static void add_pending_template (tree);
145 static tree reopen_tinst_level (struct tinst_level *);
146 static tree tsubst_initializer_list (tree, tree);
147 static tree get_partial_spec_bindings (tree, tree, tree);
148 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
149 bool, bool);
150 static tree coerce_innermost_template_parms (tree, tree, tree, tsubst_flags_t,
151 bool, bool);
152 static void tsubst_enum (tree, tree, tree);
153 static tree add_to_template_args (tree, tree);
154 static tree add_outermost_template_args (tree, tree);
155 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
156 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
157 tree);
158 static int type_unification_real (tree, tree, tree, const tree *,
159 unsigned int, int, unification_kind_t, int,
160 vec<deferred_access_check, va_gc> **,
161 bool);
162 static void note_template_header (int);
163 static tree convert_nontype_argument_function (tree, tree, tsubst_flags_t);
164 static tree convert_nontype_argument (tree, tree, tsubst_flags_t);
165 static tree convert_template_argument (tree, tree, tree,
166 tsubst_flags_t, int, tree);
167 static tree for_each_template_parm (tree, tree_fn_t, void*,
168 hash_set<tree> *, bool, tree_fn_t = NULL);
169 static tree expand_template_argument_pack (tree);
170 static tree build_template_parm_index (int, int, int, tree, tree);
171 static bool inline_needs_template_parms (tree, bool);
172 static void push_inline_template_parms_recursive (tree, int);
173 static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
174 static int mark_template_parm (tree, void *);
175 static int template_parm_this_level_p (tree, void *);
176 static tree tsubst_friend_function (tree, tree);
177 static tree tsubst_friend_class (tree, tree);
178 static int can_complete_type_without_circularity (tree);
179 static tree get_bindings (tree, tree, tree, bool);
180 static int template_decl_level (tree);
181 static int check_cv_quals_for_unify (int, tree, tree);
182 static void template_parm_level_and_index (tree, int*, int*);
183 static int unify_pack_expansion (tree, tree, tree,
184 tree, unification_kind_t, bool, bool);
185 static tree copy_template_args (tree);
186 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
187 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
188 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
189 static tree most_specialized_partial_spec (tree, tsubst_flags_t);
190 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
191 static tree tsubst_arg_types (tree, tree, tree, tsubst_flags_t, tree);
192 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
193 static bool check_specialization_scope (void);
194 static tree process_partial_specialization (tree);
195 static void set_current_access_from_decl (tree);
196 static enum template_base_result get_template_base (tree, tree, tree, tree,
197 bool , tree *);
198 static tree try_class_unification (tree, tree, tree, tree, bool);
199 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
200 tree, tree);
201 static bool template_template_parm_bindings_ok_p (tree, tree);
202 static void tsubst_default_arguments (tree, tsubst_flags_t);
203 static tree for_each_template_parm_r (tree *, int *, void *);
204 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
205 static void copy_default_args_to_explicit_spec (tree);
206 static bool invalid_nontype_parm_type_p (tree, tsubst_flags_t);
207 static bool dependent_template_arg_p (tree);
208 static bool any_template_arguments_need_structural_equality_p (tree);
209 static bool dependent_type_p_r (tree);
210 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
211 static tree tsubst_decl (tree, tree, tsubst_flags_t);
212 static void perform_typedefs_access_check (tree tmpl, tree targs);
213 static void append_type_to_template_for_access_check_1 (tree, tree, tree,
214 location_t);
215 static tree listify (tree);
216 static tree listify_autos (tree, tree);
217 static tree tsubst_template_parm (tree, tree, tsubst_flags_t);
218 static tree instantiate_alias_template (tree, tree, tsubst_flags_t);
219 static bool complex_alias_template_p (const_tree tmpl);
220 static tree tsubst_attributes (tree, tree, tsubst_flags_t, tree);
221 static tree canonicalize_expr_argument (tree, tsubst_flags_t);
222 static tree make_argument_pack (tree);
223 static void register_parameter_specializations (tree, tree);
224
225 /* Make the current scope suitable for access checking when we are
226 processing T. T can be FUNCTION_DECL for instantiated function
227 template, VAR_DECL for static member variable, or TYPE_DECL for
228 alias template (needed by instantiate_decl). */
229
230 static void
231 push_access_scope (tree t)
232 {
233 gcc_assert (VAR_OR_FUNCTION_DECL_P (t)
234 || TREE_CODE (t) == TYPE_DECL);
235
236 if (DECL_FRIEND_CONTEXT (t))
237 push_nested_class (DECL_FRIEND_CONTEXT (t));
238 else if (DECL_CLASS_SCOPE_P (t))
239 push_nested_class (DECL_CONTEXT (t));
240 else
241 push_to_top_level ();
242
243 if (TREE_CODE (t) == FUNCTION_DECL)
244 {
245 saved_access_scope = tree_cons
246 (NULL_TREE, current_function_decl, saved_access_scope);
247 current_function_decl = t;
248 }
249 }
250
251 /* Restore the scope set up by push_access_scope. T is the node we
252 are processing. */
253
254 static void
255 pop_access_scope (tree t)
256 {
257 if (TREE_CODE (t) == FUNCTION_DECL)
258 {
259 current_function_decl = TREE_VALUE (saved_access_scope);
260 saved_access_scope = TREE_CHAIN (saved_access_scope);
261 }
262
263 if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
264 pop_nested_class ();
265 else
266 pop_from_top_level ();
267 }
268
269 /* Do any processing required when DECL (a member template
270 declaration) is finished. Returns the TEMPLATE_DECL corresponding
271 to DECL, unless it is a specialization, in which case the DECL
272 itself is returned. */
273
274 tree
275 finish_member_template_decl (tree decl)
276 {
277 if (decl == error_mark_node)
278 return error_mark_node;
279
280 gcc_assert (DECL_P (decl));
281
282 if (TREE_CODE (decl) == TYPE_DECL)
283 {
284 tree type;
285
286 type = TREE_TYPE (decl);
287 if (type == error_mark_node)
288 return error_mark_node;
289 if (MAYBE_CLASS_TYPE_P (type)
290 && CLASSTYPE_TEMPLATE_INFO (type)
291 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
292 {
293 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
294 check_member_template (tmpl);
295 return tmpl;
296 }
297 return NULL_TREE;
298 }
299 else if (TREE_CODE (decl) == FIELD_DECL)
300 error ("data member %qD cannot be a member template", decl);
301 else if (DECL_TEMPLATE_INFO (decl))
302 {
303 if (!DECL_TEMPLATE_SPECIALIZATION (decl))
304 {
305 check_member_template (DECL_TI_TEMPLATE (decl));
306 return DECL_TI_TEMPLATE (decl);
307 }
308 else
309 return decl;
310 }
311 else
312 error ("invalid member template declaration %qD", decl);
313
314 return error_mark_node;
315 }
316
317 /* Create a template info node. */
318
319 tree
320 build_template_info (tree template_decl, tree template_args)
321 {
322 tree result = make_node (TEMPLATE_INFO);
323 TI_TEMPLATE (result) = template_decl;
324 TI_ARGS (result) = template_args;
325 return result;
326 }
327
328 /* Return the template info node corresponding to T, whatever T is. */
329
330 tree
331 get_template_info (const_tree t)
332 {
333 tree tinfo = NULL_TREE;
334
335 if (!t || t == error_mark_node)
336 return NULL;
337
338 if (TREE_CODE (t) == NAMESPACE_DECL
339 || TREE_CODE (t) == PARM_DECL)
340 return NULL;
341
342 if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
343 tinfo = DECL_TEMPLATE_INFO (t);
344
345 if (!tinfo && DECL_IMPLICIT_TYPEDEF_P (t))
346 t = TREE_TYPE (t);
347
348 if (OVERLOAD_TYPE_P (t))
349 tinfo = TYPE_TEMPLATE_INFO (t);
350 else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
351 tinfo = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
352
353 return tinfo;
354 }
355
356 /* Returns the template nesting level of the indicated class TYPE.
357
358 For example, in:
359 template <class T>
360 struct A
361 {
362 template <class U>
363 struct B {};
364 };
365
366 A<T>::B<U> has depth two, while A<T> has depth one.
367 Both A<T>::B<int> and A<int>::B<U> have depth one, if
368 they are instantiations, not specializations.
369
370 This function is guaranteed to return 0 if passed NULL_TREE so
371 that, for example, `template_class_depth (current_class_type)' is
372 always safe. */
373
374 int
375 template_class_depth (tree type)
376 {
377 int depth;
378
379 for (depth = 0; type && TREE_CODE (type) != NAMESPACE_DECL; )
380 {
381 tree tinfo = get_template_info (type);
382
383 if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
384 && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
385 ++depth;
386
387 if (DECL_P (type))
388 type = CP_DECL_CONTEXT (type);
389 else if (LAMBDA_TYPE_P (type))
390 type = LAMBDA_TYPE_EXTRA_SCOPE (type);
391 else
392 type = CP_TYPE_CONTEXT (type);
393 }
394
395 return depth;
396 }
397
398 /* Subroutine of maybe_begin_member_template_processing.
399 Returns true if processing DECL needs us to push template parms. */
400
401 static bool
402 inline_needs_template_parms (tree decl, bool nsdmi)
403 {
404 if (!decl || (!nsdmi && ! DECL_TEMPLATE_INFO (decl)))
405 return false;
406
407 return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
408 > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
409 }
410
411 /* Subroutine of maybe_begin_member_template_processing.
412 Push the template parms in PARMS, starting from LEVELS steps into the
413 chain, and ending at the beginning, since template parms are listed
414 innermost first. */
415
416 static void
417 push_inline_template_parms_recursive (tree parmlist, int levels)
418 {
419 tree parms = TREE_VALUE (parmlist);
420 int i;
421
422 if (levels > 1)
423 push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
424
425 ++processing_template_decl;
426 current_template_parms
427 = tree_cons (size_int (processing_template_decl),
428 parms, current_template_parms);
429 TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
430
431 begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
432 NULL);
433 for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
434 {
435 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
436
437 if (error_operand_p (parm))
438 continue;
439
440 gcc_assert (DECL_P (parm));
441
442 switch (TREE_CODE (parm))
443 {
444 case TYPE_DECL:
445 case TEMPLATE_DECL:
446 pushdecl (parm);
447 break;
448
449 case PARM_DECL:
450 /* Push the CONST_DECL. */
451 pushdecl (TEMPLATE_PARM_DECL (DECL_INITIAL (parm)));
452 break;
453
454 default:
455 gcc_unreachable ();
456 }
457 }
458 }
459
460 /* Restore the template parameter context for a member template, a
461 friend template defined in a class definition, or a non-template
462 member of template class. */
463
464 void
465 maybe_begin_member_template_processing (tree decl)
466 {
467 tree parms;
468 int levels = 0;
469 bool nsdmi = TREE_CODE (decl) == FIELD_DECL;
470
471 if (nsdmi)
472 {
473 tree ctx = DECL_CONTEXT (decl);
474 decl = (CLASSTYPE_TEMPLATE_INFO (ctx)
475 /* Disregard full specializations (c++/60999). */
476 && uses_template_parms (ctx)
477 ? CLASSTYPE_TI_TEMPLATE (ctx) : NULL_TREE);
478 }
479
480 if (inline_needs_template_parms (decl, nsdmi))
481 {
482 parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
483 levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
484
485 if (DECL_TEMPLATE_SPECIALIZATION (decl))
486 {
487 --levels;
488 parms = TREE_CHAIN (parms);
489 }
490
491 push_inline_template_parms_recursive (parms, levels);
492 }
493
494 /* Remember how many levels of template parameters we pushed so that
495 we can pop them later. */
496 inline_parm_levels.safe_push (levels);
497 }
498
499 /* Undo the effects of maybe_begin_member_template_processing. */
500
501 void
502 maybe_end_member_template_processing (void)
503 {
504 int i;
505 int last;
506
507 if (inline_parm_levels.length () == 0)
508 return;
509
510 last = inline_parm_levels.pop ();
511 for (i = 0; i < last; ++i)
512 {
513 --processing_template_decl;
514 current_template_parms = TREE_CHAIN (current_template_parms);
515 poplevel (0, 0, 0);
516 }
517 }
518
519 /* Return a new template argument vector which contains all of ARGS,
520 but has as its innermost set of arguments the EXTRA_ARGS. */
521
522 static tree
523 add_to_template_args (tree args, tree extra_args)
524 {
525 tree new_args;
526 int extra_depth;
527 int i;
528 int j;
529
530 if (args == NULL_TREE || extra_args == error_mark_node)
531 return extra_args;
532
533 extra_depth = TMPL_ARGS_DEPTH (extra_args);
534 new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
535
536 for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
537 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
538
539 for (j = 1; j <= extra_depth; ++j, ++i)
540 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
541
542 return new_args;
543 }
544
545 /* Like add_to_template_args, but only the outermost ARGS are added to
546 the EXTRA_ARGS. In particular, all but TMPL_ARGS_DEPTH
547 (EXTRA_ARGS) levels are added. This function is used to combine
548 the template arguments from a partial instantiation with the
549 template arguments used to attain the full instantiation from the
550 partial instantiation. */
551
552 static tree
553 add_outermost_template_args (tree args, tree extra_args)
554 {
555 tree new_args;
556
557 /* If there are more levels of EXTRA_ARGS than there are ARGS,
558 something very fishy is going on. */
559 gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
560
561 /* If *all* the new arguments will be the EXTRA_ARGS, just return
562 them. */
563 if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
564 return extra_args;
565
566 /* For the moment, we make ARGS look like it contains fewer levels. */
567 TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
568
569 new_args = add_to_template_args (args, extra_args);
570
571 /* Now, we restore ARGS to its full dimensions. */
572 TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
573
574 return new_args;
575 }
576
577 /* Return the N levels of innermost template arguments from the ARGS. */
578
579 tree
580 get_innermost_template_args (tree args, int n)
581 {
582 tree new_args;
583 int extra_levels;
584 int i;
585
586 gcc_assert (n >= 0);
587
588 /* If N is 1, just return the innermost set of template arguments. */
589 if (n == 1)
590 return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
591
592 /* If we're not removing anything, just return the arguments we were
593 given. */
594 extra_levels = TMPL_ARGS_DEPTH (args) - n;
595 gcc_assert (extra_levels >= 0);
596 if (extra_levels == 0)
597 return args;
598
599 /* Make a new set of arguments, not containing the outer arguments. */
600 new_args = make_tree_vec (n);
601 for (i = 1; i <= n; ++i)
602 SET_TMPL_ARGS_LEVEL (new_args, i,
603 TMPL_ARGS_LEVEL (args, i + extra_levels));
604
605 return new_args;
606 }
607
608 /* The inverse of get_innermost_template_args: Return all but the innermost
609 EXTRA_LEVELS levels of template arguments from the ARGS. */
610
611 static tree
612 strip_innermost_template_args (tree args, int extra_levels)
613 {
614 tree new_args;
615 int n = TMPL_ARGS_DEPTH (args) - extra_levels;
616 int i;
617
618 gcc_assert (n >= 0);
619
620 /* If N is 1, just return the outermost set of template arguments. */
621 if (n == 1)
622 return TMPL_ARGS_LEVEL (args, 1);
623
624 /* If we're not removing anything, just return the arguments we were
625 given. */
626 gcc_assert (extra_levels >= 0);
627 if (extra_levels == 0)
628 return args;
629
630 /* Make a new set of arguments, not containing the inner arguments. */
631 new_args = make_tree_vec (n);
632 for (i = 1; i <= n; ++i)
633 SET_TMPL_ARGS_LEVEL (new_args, i,
634 TMPL_ARGS_LEVEL (args, i));
635
636 return new_args;
637 }
638
639 /* We've got a template header coming up; push to a new level for storing
640 the parms. */
641
642 void
643 begin_template_parm_list (void)
644 {
645 /* We use a non-tag-transparent scope here, which causes pushtag to
646 put tags in this scope, rather than in the enclosing class or
647 namespace scope. This is the right thing, since we want
648 TEMPLATE_DECLS, and not TYPE_DECLS for template classes. For a
649 global template class, push_template_decl handles putting the
650 TEMPLATE_DECL into top-level scope. For a nested template class,
651 e.g.:
652
653 template <class T> struct S1 {
654 template <class T> struct S2 {};
655 };
656
657 pushtag contains special code to insert the TEMPLATE_DECL for S2
658 at the right scope. */
659 begin_scope (sk_template_parms, NULL);
660 ++processing_template_decl;
661 ++processing_template_parmlist;
662 note_template_header (0);
663
664 /* Add a dummy parameter level while we process the parameter list. */
665 current_template_parms
666 = tree_cons (size_int (processing_template_decl),
667 make_tree_vec (0),
668 current_template_parms);
669 }
670
671 /* This routine is called when a specialization is declared. If it is
672 invalid to declare a specialization here, an error is reported and
673 false is returned, otherwise this routine will return true. */
674
675 static bool
676 check_specialization_scope (void)
677 {
678 tree scope = current_scope ();
679
680 /* [temp.expl.spec]
681
682 An explicit specialization shall be declared in the namespace of
683 which the template is a member, or, for member templates, in the
684 namespace of which the enclosing class or enclosing class
685 template is a member. An explicit specialization of a member
686 function, member class or static data member of a class template
687 shall be declared in the namespace of which the class template
688 is a member. */
689 if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
690 {
691 error ("explicit specialization in non-namespace scope %qD", scope);
692 return false;
693 }
694
695 /* [temp.expl.spec]
696
697 In an explicit specialization declaration for a member of a class
698 template or a member template that appears in namespace scope,
699 the member template and some of its enclosing class templates may
700 remain unspecialized, except that the declaration shall not
701 explicitly specialize a class member template if its enclosing
702 class templates are not explicitly specialized as well. */
703 if (current_template_parms)
704 {
705 error ("enclosing class templates are not explicitly specialized");
706 return false;
707 }
708
709 return true;
710 }
711
712 /* We've just seen template <>. */
713
714 bool
715 begin_specialization (void)
716 {
717 begin_scope (sk_template_spec, NULL);
718 note_template_header (1);
719 return check_specialization_scope ();
720 }
721
722 /* Called at then end of processing a declaration preceded by
723 template<>. */
724
725 void
726 end_specialization (void)
727 {
728 finish_scope ();
729 reset_specialization ();
730 }
731
732 /* Any template <>'s that we have seen thus far are not referring to a
733 function specialization. */
734
735 void
736 reset_specialization (void)
737 {
738 processing_specialization = 0;
739 template_header_count = 0;
740 }
741
742 /* We've just seen a template header. If SPECIALIZATION is nonzero,
743 it was of the form template <>. */
744
745 static void
746 note_template_header (int specialization)
747 {
748 processing_specialization = specialization;
749 template_header_count++;
750 }
751
752 /* We're beginning an explicit instantiation. */
753
754 void
755 begin_explicit_instantiation (void)
756 {
757 gcc_assert (!processing_explicit_instantiation);
758 processing_explicit_instantiation = true;
759 }
760
761
762 void
763 end_explicit_instantiation (void)
764 {
765 gcc_assert (processing_explicit_instantiation);
766 processing_explicit_instantiation = false;
767 }
768
769 /* An explicit specialization or partial specialization of TMPL is being
770 declared. Check that the namespace in which the specialization is
771 occurring is permissible. Returns false iff it is invalid to
772 specialize TMPL in the current namespace. */
773
774 static bool
775 check_specialization_namespace (tree tmpl)
776 {
777 tree tpl_ns = decl_namespace_context (tmpl);
778
779 /* [tmpl.expl.spec]
780
781 An explicit specialization shall be declared in a namespace enclosing the
782 specialized template. An explicit specialization whose declarator-id is
783 not qualified shall be declared in the nearest enclosing namespace of the
784 template, or, if the namespace is inline (7.3.1), any namespace from its
785 enclosing namespace set. */
786 if (current_scope() != DECL_CONTEXT (tmpl)
787 && !at_namespace_scope_p ())
788 {
789 error ("specialization of %qD must appear at namespace scope", tmpl);
790 return false;
791 }
792
793 if (is_nested_namespace (current_namespace, tpl_ns, cxx_dialect < cxx11))
794 /* Same or enclosing namespace. */
795 return true;
796 else
797 {
798 permerror (input_location,
799 "specialization of %qD in different namespace", tmpl);
800 inform (DECL_SOURCE_LOCATION (tmpl),
801 " from definition of %q#D", tmpl);
802 return false;
803 }
804 }
805
806 /* SPEC is an explicit instantiation. Check that it is valid to
807 perform this explicit instantiation in the current namespace. */
808
809 static void
810 check_explicit_instantiation_namespace (tree spec)
811 {
812 tree ns;
813
814 /* DR 275: An explicit instantiation shall appear in an enclosing
815 namespace of its template. */
816 ns = decl_namespace_context (spec);
817 if (!is_nested_namespace (current_namespace, ns))
818 permerror (input_location, "explicit instantiation of %qD in namespace %qD "
819 "(which does not enclose namespace %qD)",
820 spec, current_namespace, ns);
821 }
822
823 // Returns the type of a template specialization only if that
824 // specialization needs to be defined. Otherwise (e.g., if the type has
825 // already been defined), the function returns NULL_TREE.
826 static tree
827 maybe_new_partial_specialization (tree type)
828 {
829 // An implicit instantiation of an incomplete type implies
830 // the definition of a new class template.
831 //
832 // template<typename T>
833 // struct S;
834 //
835 // template<typename T>
836 // struct S<T*>;
837 //
838 // Here, S<T*> is an implicit instantiation of S whose type
839 // is incomplete.
840 if (CLASSTYPE_IMPLICIT_INSTANTIATION (type) && !COMPLETE_TYPE_P (type))
841 return type;
842
843 // It can also be the case that TYPE is a completed specialization.
844 // Continuing the previous example, suppose we also declare:
845 //
846 // template<typename T>
847 // requires Integral<T>
848 // struct S<T*>;
849 //
850 // Here, S<T*> refers to the specialization S<T*> defined
851 // above. However, we need to differentiate definitions because
852 // we intend to define a new partial specialization. In this case,
853 // we rely on the fact that the constraints are different for
854 // this declaration than that above.
855 //
856 // Note that we also get here for injected class names and
857 // late-parsed template definitions. We must ensure that we
858 // do not create new type declarations for those cases.
859 if (flag_concepts && CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
860 {
861 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
862 tree args = CLASSTYPE_TI_ARGS (type);
863
864 // If there are no template parameters, this cannot be a new
865 // partial template specializtion?
866 if (!current_template_parms)
867 return NULL_TREE;
868
869 // The injected-class-name is not a new partial specialization.
870 if (DECL_SELF_REFERENCE_P (TYPE_NAME (type)))
871 return NULL_TREE;
872
873 // If the constraints are not the same as those of the primary
874 // then, we can probably create a new specialization.
875 tree type_constr = current_template_constraints ();
876
877 if (type == TREE_TYPE (tmpl))
878 {
879 tree main_constr = get_constraints (tmpl);
880 if (equivalent_constraints (type_constr, main_constr))
881 return NULL_TREE;
882 }
883
884 // Also, if there's a pre-existing specialization with matching
885 // constraints, then this also isn't new.
886 tree specs = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
887 while (specs)
888 {
889 tree spec_tmpl = TREE_VALUE (specs);
890 tree spec_args = TREE_PURPOSE (specs);
891 tree spec_constr = get_constraints (spec_tmpl);
892 if (comp_template_args (args, spec_args)
893 && equivalent_constraints (type_constr, spec_constr))
894 return NULL_TREE;
895 specs = TREE_CHAIN (specs);
896 }
897
898 // Create a new type node (and corresponding type decl)
899 // for the newly declared specialization.
900 tree t = make_class_type (TREE_CODE (type));
901 CLASSTYPE_DECLARED_CLASS (t) = CLASSTYPE_DECLARED_CLASS (type);
902 SET_TYPE_TEMPLATE_INFO (t, build_template_info (tmpl, args));
903
904 /* We only need a separate type node for storing the definition of this
905 partial specialization; uses of S<T*> are unconstrained, so all are
906 equivalent. So keep TYPE_CANONICAL the same. */
907 TYPE_CANONICAL (t) = TYPE_CANONICAL (type);
908
909 // Build the corresponding type decl.
910 tree d = create_implicit_typedef (DECL_NAME (tmpl), t);
911 DECL_CONTEXT (d) = TYPE_CONTEXT (t);
912 DECL_SOURCE_LOCATION (d) = input_location;
913
914 return t;
915 }
916
917 return NULL_TREE;
918 }
919
920 /* The TYPE is being declared. If it is a template type, that means it
921 is a partial specialization. Do appropriate error-checking. */
922
923 tree
924 maybe_process_partial_specialization (tree type)
925 {
926 tree context;
927
928 if (type == error_mark_node)
929 return error_mark_node;
930
931 /* A lambda that appears in specialization context is not itself a
932 specialization. */
933 if (CLASS_TYPE_P (type) && CLASSTYPE_LAMBDA_EXPR (type))
934 return type;
935
936 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
937 {
938 error ("name of class shadows template template parameter %qD",
939 TYPE_NAME (type));
940 return error_mark_node;
941 }
942
943 context = TYPE_CONTEXT (type);
944
945 if (TYPE_ALIAS_P (type))
946 {
947 tree tinfo = TYPE_ALIAS_TEMPLATE_INFO (type);
948
949 if (tinfo && DECL_ALIAS_TEMPLATE_P (TI_TEMPLATE (tinfo)))
950 error ("specialization of alias template %qD",
951 TI_TEMPLATE (tinfo));
952 else
953 error ("explicit specialization of non-template %qT", type);
954 return error_mark_node;
955 }
956 else if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
957 {
958 /* This is for ordinary explicit specialization and partial
959 specialization of a template class such as:
960
961 template <> class C<int>;
962
963 or:
964
965 template <class T> class C<T*>;
966
967 Make sure that `C<int>' and `C<T*>' are implicit instantiations. */
968
969 if (tree t = maybe_new_partial_specialization (type))
970 {
971 if (!check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (t))
972 && !at_namespace_scope_p ())
973 return error_mark_node;
974 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (t);
975 DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (t)) = input_location;
976 if (processing_template_decl)
977 {
978 tree decl = push_template_decl (TYPE_MAIN_DECL (t));
979 if (decl == error_mark_node)
980 return error_mark_node;
981 return TREE_TYPE (decl);
982 }
983 }
984 else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
985 error ("specialization of %qT after instantiation", type);
986 else if (errorcount && !processing_specialization
987 && CLASSTYPE_TEMPLATE_SPECIALIZATION (type)
988 && !uses_template_parms (CLASSTYPE_TI_ARGS (type)))
989 /* Trying to define a specialization either without a template<> header
990 or in an inappropriate place. We've already given an error, so just
991 bail now so we don't actually define the specialization. */
992 return error_mark_node;
993 }
994 else if (CLASS_TYPE_P (type)
995 && !CLASSTYPE_USE_TEMPLATE (type)
996 && CLASSTYPE_TEMPLATE_INFO (type)
997 && context && CLASS_TYPE_P (context)
998 && CLASSTYPE_TEMPLATE_INFO (context))
999 {
1000 /* This is for an explicit specialization of member class
1001 template according to [temp.expl.spec/18]:
1002
1003 template <> template <class U> class C<int>::D;
1004
1005 The context `C<int>' must be an implicit instantiation.
1006 Otherwise this is just a member class template declared
1007 earlier like:
1008
1009 template <> class C<int> { template <class U> class D; };
1010 template <> template <class U> class C<int>::D;
1011
1012 In the first case, `C<int>::D' is a specialization of `C<T>::D'
1013 while in the second case, `C<int>::D' is a primary template
1014 and `C<T>::D' may not exist. */
1015
1016 if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
1017 && !COMPLETE_TYPE_P (type))
1018 {
1019 tree t;
1020 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
1021
1022 if (current_namespace
1023 != decl_namespace_context (tmpl))
1024 {
1025 permerror (input_location,
1026 "specializing %q#T in different namespace", type);
1027 permerror (DECL_SOURCE_LOCATION (tmpl),
1028 " from definition of %q#D", tmpl);
1029 }
1030
1031 /* Check for invalid specialization after instantiation:
1032
1033 template <> template <> class C<int>::D<int>;
1034 template <> template <class U> class C<int>::D; */
1035
1036 for (t = DECL_TEMPLATE_INSTANTIATIONS (tmpl);
1037 t; t = TREE_CHAIN (t))
1038 {
1039 tree inst = TREE_VALUE (t);
1040 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (inst)
1041 || !COMPLETE_OR_OPEN_TYPE_P (inst))
1042 {
1043 /* We already have a full specialization of this partial
1044 instantiation, or a full specialization has been
1045 looked up but not instantiated. Reassign it to the
1046 new member specialization template. */
1047 spec_entry elt;
1048 spec_entry *entry;
1049
1050 elt.tmpl = most_general_template (tmpl);
1051 elt.args = CLASSTYPE_TI_ARGS (inst);
1052 elt.spec = inst;
1053
1054 type_specializations->remove_elt (&elt);
1055
1056 elt.tmpl = tmpl;
1057 elt.args = INNERMOST_TEMPLATE_ARGS (elt.args);
1058
1059 spec_entry **slot
1060 = type_specializations->find_slot (&elt, INSERT);
1061 entry = ggc_alloc<spec_entry> ();
1062 *entry = elt;
1063 *slot = entry;
1064 }
1065 else
1066 /* But if we've had an implicit instantiation, that's a
1067 problem ([temp.expl.spec]/6). */
1068 error ("specialization %qT after instantiation %qT",
1069 type, inst);
1070 }
1071
1072 /* Mark TYPE as a specialization. And as a result, we only
1073 have one level of template argument for the innermost
1074 class template. */
1075 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
1076 DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)) = input_location;
1077 CLASSTYPE_TI_ARGS (type)
1078 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
1079 }
1080 }
1081 else if (processing_specialization)
1082 {
1083 /* Someday C++0x may allow for enum template specialization. */
1084 if (cxx_dialect > cxx98 && TREE_CODE (type) == ENUMERAL_TYPE
1085 && CLASS_TYPE_P (context) && CLASSTYPE_USE_TEMPLATE (context))
1086 pedwarn (input_location, OPT_Wpedantic, "template specialization "
1087 "of %qD not allowed by ISO C++", type);
1088 else
1089 {
1090 error ("explicit specialization of non-template %qT", type);
1091 return error_mark_node;
1092 }
1093 }
1094
1095 return type;
1096 }
1097
1098 /* Returns nonzero if we can optimize the retrieval of specializations
1099 for TMPL, a TEMPLATE_DECL. In particular, for such a template, we
1100 do not use DECL_TEMPLATE_SPECIALIZATIONS at all. */
1101
1102 static inline bool
1103 optimize_specialization_lookup_p (tree tmpl)
1104 {
1105 return (DECL_FUNCTION_TEMPLATE_P (tmpl)
1106 && DECL_CLASS_SCOPE_P (tmpl)
1107 /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
1108 parameter. */
1109 && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
1110 /* The optimized lookup depends on the fact that the
1111 template arguments for the member function template apply
1112 purely to the containing class, which is not true if the
1113 containing class is an explicit or partial
1114 specialization. */
1115 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
1116 && !DECL_MEMBER_TEMPLATE_P (tmpl)
1117 && !DECL_CONV_FN_P (tmpl)
1118 /* It is possible to have a template that is not a member
1119 template and is not a member of a template class:
1120
1121 template <typename T>
1122 struct S { friend A::f(); };
1123
1124 Here, the friend function is a template, but the context does
1125 not have template information. The optimized lookup relies
1126 on having ARGS be the template arguments for both the class
1127 and the function template. */
1128 && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
1129 }
1130
1131 /* Make sure ARGS doesn't use any inappropriate typedefs; we should have
1132 gone through coerce_template_parms by now. */
1133
1134 static void
1135 verify_unstripped_args (tree args)
1136 {
1137 ++processing_template_decl;
1138 if (!any_dependent_template_arguments_p (args))
1139 {
1140 tree inner = INNERMOST_TEMPLATE_ARGS (args);
1141 for (int i = 0; i < TREE_VEC_LENGTH (inner); ++i)
1142 {
1143 tree arg = TREE_VEC_ELT (inner, i);
1144 if (TREE_CODE (arg) == TEMPLATE_DECL)
1145 /* OK */;
1146 else if (TYPE_P (arg))
1147 gcc_assert (strip_typedefs (arg, NULL) == 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);
1153 }
1154 }
1155 --processing_template_decl;
1156 }
1157
1158 /* Retrieve the specialization (in the sense of [temp.spec] - a
1159 specialization is either an instantiation or an explicit
1160 specialization) of TMPL for the given template ARGS. If there is
1161 no such specialization, return NULL_TREE. The ARGS are a vector of
1162 arguments, or a vector of vectors of arguments, in the case of
1163 templates with more than one level of parameters.
1164
1165 If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
1166 then we search for a partial specialization matching ARGS. This
1167 parameter is ignored if TMPL is not a class template.
1168
1169 We can also look up a FIELD_DECL, if it is a lambda capture pack; the
1170 result is a NONTYPE_ARGUMENT_PACK. */
1171
1172 static tree
1173 retrieve_specialization (tree tmpl, tree args, hashval_t hash)
1174 {
1175 if (tmpl == NULL_TREE)
1176 return NULL_TREE;
1177
1178 if (args == error_mark_node)
1179 return NULL_TREE;
1180
1181 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL
1182 || TREE_CODE (tmpl) == FIELD_DECL);
1183
1184 /* There should be as many levels of arguments as there are
1185 levels of parameters. */
1186 gcc_assert (TMPL_ARGS_DEPTH (args)
1187 == (TREE_CODE (tmpl) == TEMPLATE_DECL
1188 ? TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl))
1189 : template_class_depth (DECL_CONTEXT (tmpl))));
1190
1191 if (flag_checking)
1192 verify_unstripped_args (args);
1193
1194 /* Lambda functions in templates aren't instantiated normally, but through
1195 tsubst_lambda_expr. */
1196 if (lambda_fn_in_template_p (tmpl))
1197 return NULL_TREE;
1198
1199 if (optimize_specialization_lookup_p (tmpl))
1200 {
1201 /* The template arguments actually apply to the containing
1202 class. Find the class specialization with those
1203 arguments. */
1204 tree class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
1205 tree class_specialization
1206 = retrieve_specialization (class_template, args, 0);
1207 if (!class_specialization)
1208 return NULL_TREE;
1209
1210 /* Find the instance of TMPL. */
1211 tree fns = get_class_binding (class_specialization, DECL_NAME (tmpl));
1212 for (ovl_iterator iter (fns); iter; ++iter)
1213 {
1214 tree fn = *iter;
1215 if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl
1216 /* using-declarations can add base methods to the method vec,
1217 and we don't want those here. */
1218 && DECL_CONTEXT (fn) == class_specialization)
1219 return fn;
1220 }
1221 return NULL_TREE;
1222 }
1223 else
1224 {
1225 spec_entry *found;
1226 spec_entry elt;
1227 hash_table<spec_hasher> *specializations;
1228
1229 elt.tmpl = tmpl;
1230 elt.args = args;
1231 elt.spec = NULL_TREE;
1232
1233 if (DECL_CLASS_TEMPLATE_P (tmpl))
1234 specializations = type_specializations;
1235 else
1236 specializations = decl_specializations;
1237
1238 if (hash == 0)
1239 hash = spec_hasher::hash (&elt);
1240 found = specializations->find_with_hash (&elt, hash);
1241 if (found)
1242 return found->spec;
1243 }
1244
1245 return NULL_TREE;
1246 }
1247
1248 /* Like retrieve_specialization, but for local declarations. */
1249
1250 tree
1251 retrieve_local_specialization (tree tmpl)
1252 {
1253 if (local_specializations == NULL)
1254 return NULL_TREE;
1255
1256 tree *slot = local_specializations->get (tmpl);
1257 return slot ? *slot : NULL_TREE;
1258 }
1259
1260 /* Returns nonzero iff DECL is a specialization of TMPL. */
1261
1262 int
1263 is_specialization_of (tree decl, tree tmpl)
1264 {
1265 tree t;
1266
1267 if (TREE_CODE (decl) == FUNCTION_DECL)
1268 {
1269 for (t = decl;
1270 t != NULL_TREE;
1271 t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1272 if (t == tmpl)
1273 return 1;
1274 }
1275 else
1276 {
1277 gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1278
1279 for (t = TREE_TYPE (decl);
1280 t != NULL_TREE;
1281 t = CLASSTYPE_USE_TEMPLATE (t)
1282 ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1283 if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1284 return 1;
1285 }
1286
1287 return 0;
1288 }
1289
1290 /* Returns nonzero iff DECL is a specialization of friend declaration
1291 FRIEND_DECL according to [temp.friend]. */
1292
1293 bool
1294 is_specialization_of_friend (tree decl, tree friend_decl)
1295 {
1296 bool need_template = true;
1297 int template_depth;
1298
1299 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1300 || TREE_CODE (decl) == TYPE_DECL);
1301
1302 /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1303 of a template class, we want to check if DECL is a specialization
1304 if this. */
1305 if (TREE_CODE (friend_decl) == FUNCTION_DECL
1306 && DECL_TEMPLATE_INFO (friend_decl)
1307 && !DECL_USE_TEMPLATE (friend_decl))
1308 {
1309 /* We want a TEMPLATE_DECL for `is_specialization_of'. */
1310 friend_decl = DECL_TI_TEMPLATE (friend_decl);
1311 need_template = false;
1312 }
1313 else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1314 && !PRIMARY_TEMPLATE_P (friend_decl))
1315 need_template = false;
1316
1317 /* There is nothing to do if this is not a template friend. */
1318 if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1319 return false;
1320
1321 if (is_specialization_of (decl, friend_decl))
1322 return true;
1323
1324 /* [temp.friend/6]
1325 A member of a class template may be declared to be a friend of a
1326 non-template class. In this case, the corresponding member of
1327 every specialization of the class template is a friend of the
1328 class granting friendship.
1329
1330 For example, given a template friend declaration
1331
1332 template <class T> friend void A<T>::f();
1333
1334 the member function below is considered a friend
1335
1336 template <> struct A<int> {
1337 void f();
1338 };
1339
1340 For this type of template friend, TEMPLATE_DEPTH below will be
1341 nonzero. To determine if DECL is a friend of FRIEND, we first
1342 check if the enclosing class is a specialization of another. */
1343
1344 template_depth = template_class_depth (CP_DECL_CONTEXT (friend_decl));
1345 if (template_depth
1346 && DECL_CLASS_SCOPE_P (decl)
1347 && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1348 CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1349 {
1350 /* Next, we check the members themselves. In order to handle
1351 a few tricky cases, such as when FRIEND_DECL's are
1352
1353 template <class T> friend void A<T>::g(T t);
1354 template <class T> template <T t> friend void A<T>::h();
1355
1356 and DECL's are
1357
1358 void A<int>::g(int);
1359 template <int> void A<int>::h();
1360
1361 we need to figure out ARGS, the template arguments from
1362 the context of DECL. This is required for template substitution
1363 of `T' in the function parameter of `g' and template parameter
1364 of `h' in the above examples. Here ARGS corresponds to `int'. */
1365
1366 tree context = DECL_CONTEXT (decl);
1367 tree args = NULL_TREE;
1368 int current_depth = 0;
1369
1370 while (current_depth < template_depth)
1371 {
1372 if (CLASSTYPE_TEMPLATE_INFO (context))
1373 {
1374 if (current_depth == 0)
1375 args = TYPE_TI_ARGS (context);
1376 else
1377 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1378 current_depth++;
1379 }
1380 context = TYPE_CONTEXT (context);
1381 }
1382
1383 if (TREE_CODE (decl) == FUNCTION_DECL)
1384 {
1385 bool is_template;
1386 tree friend_type;
1387 tree decl_type;
1388 tree friend_args_type;
1389 tree decl_args_type;
1390
1391 /* Make sure that both DECL and FRIEND_DECL are templates or
1392 non-templates. */
1393 is_template = DECL_TEMPLATE_INFO (decl)
1394 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1395 if (need_template ^ is_template)
1396 return false;
1397 else if (is_template)
1398 {
1399 /* If both are templates, check template parameter list. */
1400 tree friend_parms
1401 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1402 args, tf_none);
1403 if (!comp_template_parms
1404 (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1405 friend_parms))
1406 return false;
1407
1408 decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1409 }
1410 else
1411 decl_type = TREE_TYPE (decl);
1412
1413 friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1414 tf_none, NULL_TREE);
1415 if (friend_type == error_mark_node)
1416 return false;
1417
1418 /* Check if return types match. */
1419 if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1420 return false;
1421
1422 /* Check if function parameter types match, ignoring the
1423 `this' parameter. */
1424 friend_args_type = TYPE_ARG_TYPES (friend_type);
1425 decl_args_type = TYPE_ARG_TYPES (decl_type);
1426 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1427 friend_args_type = TREE_CHAIN (friend_args_type);
1428 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1429 decl_args_type = TREE_CHAIN (decl_args_type);
1430
1431 return compparms (decl_args_type, friend_args_type);
1432 }
1433 else
1434 {
1435 /* DECL is a TYPE_DECL */
1436 bool is_template;
1437 tree decl_type = TREE_TYPE (decl);
1438
1439 /* Make sure that both DECL and FRIEND_DECL are templates or
1440 non-templates. */
1441 is_template
1442 = CLASSTYPE_TEMPLATE_INFO (decl_type)
1443 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1444
1445 if (need_template ^ is_template)
1446 return false;
1447 else if (is_template)
1448 {
1449 tree friend_parms;
1450 /* If both are templates, check the name of the two
1451 TEMPLATE_DECL's first because is_friend didn't. */
1452 if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1453 != DECL_NAME (friend_decl))
1454 return false;
1455
1456 /* Now check template parameter list. */
1457 friend_parms
1458 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1459 args, tf_none);
1460 return comp_template_parms
1461 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1462 friend_parms);
1463 }
1464 else
1465 return (DECL_NAME (decl)
1466 == DECL_NAME (friend_decl));
1467 }
1468 }
1469 return false;
1470 }
1471
1472 /* Register the specialization SPEC as a specialization of TMPL with
1473 the indicated ARGS. IS_FRIEND indicates whether the specialization
1474 is actually just a friend declaration. Returns SPEC, or an
1475 equivalent prior declaration, if available.
1476
1477 We also store instantiations of field packs in the hash table, even
1478 though they are not themselves templates, to make lookup easier. */
1479
1480 static tree
1481 register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
1482 hashval_t hash)
1483 {
1484 tree fn;
1485 spec_entry **slot = NULL;
1486 spec_entry elt;
1487
1488 gcc_assert ((TREE_CODE (tmpl) == TEMPLATE_DECL && DECL_P (spec))
1489 || (TREE_CODE (tmpl) == FIELD_DECL
1490 && TREE_CODE (spec) == NONTYPE_ARGUMENT_PACK));
1491
1492 if (TREE_CODE (spec) == FUNCTION_DECL
1493 && uses_template_parms (DECL_TI_ARGS (spec)))
1494 /* This is the FUNCTION_DECL for a partial instantiation. Don't
1495 register it; we want the corresponding TEMPLATE_DECL instead.
1496 We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1497 the more obvious `uses_template_parms (spec)' to avoid problems
1498 with default function arguments. In particular, given
1499 something like this:
1500
1501 template <class T> void f(T t1, T t = T())
1502
1503 the default argument expression is not substituted for in an
1504 instantiation unless and until it is actually needed. */
1505 return spec;
1506
1507 if (optimize_specialization_lookup_p (tmpl))
1508 /* We don't put these specializations in the hash table, but we might
1509 want to give an error about a mismatch. */
1510 fn = retrieve_specialization (tmpl, args, 0);
1511 else
1512 {
1513 elt.tmpl = tmpl;
1514 elt.args = args;
1515 elt.spec = spec;
1516
1517 if (hash == 0)
1518 hash = spec_hasher::hash (&elt);
1519
1520 slot =
1521 decl_specializations->find_slot_with_hash (&elt, hash, INSERT);
1522 if (*slot)
1523 fn = ((spec_entry *) *slot)->spec;
1524 else
1525 fn = NULL_TREE;
1526 }
1527
1528 /* We can sometimes try to re-register a specialization that we've
1529 already got. In particular, regenerate_decl_from_template calls
1530 duplicate_decls which will update the specialization list. But,
1531 we'll still get called again here anyhow. It's more convenient
1532 to simply allow this than to try to prevent it. */
1533 if (fn == spec)
1534 return spec;
1535 else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1536 {
1537 if (DECL_TEMPLATE_INSTANTIATION (fn))
1538 {
1539 if (DECL_ODR_USED (fn)
1540 || DECL_EXPLICIT_INSTANTIATION (fn))
1541 {
1542 error ("specialization of %qD after instantiation",
1543 fn);
1544 return error_mark_node;
1545 }
1546 else
1547 {
1548 tree clone;
1549 /* This situation should occur only if the first
1550 specialization is an implicit instantiation, the
1551 second is an explicit specialization, and the
1552 implicit instantiation has not yet been used. That
1553 situation can occur if we have implicitly
1554 instantiated a member function and then specialized
1555 it later.
1556
1557 We can also wind up here if a friend declaration that
1558 looked like an instantiation turns out to be a
1559 specialization:
1560
1561 template <class T> void foo(T);
1562 class S { friend void foo<>(int) };
1563 template <> void foo(int);
1564
1565 We transform the existing DECL in place so that any
1566 pointers to it become pointers to the updated
1567 declaration.
1568
1569 If there was a definition for the template, but not
1570 for the specialization, we want this to look as if
1571 there were no definition, and vice versa. */
1572 DECL_INITIAL (fn) = NULL_TREE;
1573 duplicate_decls (spec, fn, is_friend);
1574 /* The call to duplicate_decls will have applied
1575 [temp.expl.spec]:
1576
1577 An explicit specialization of a function template
1578 is inline only if it is explicitly declared to be,
1579 and independently of whether its function template
1580 is.
1581
1582 to the primary function; now copy the inline bits to
1583 the various clones. */
1584 FOR_EACH_CLONE (clone, fn)
1585 {
1586 DECL_DECLARED_INLINE_P (clone)
1587 = DECL_DECLARED_INLINE_P (fn);
1588 DECL_SOURCE_LOCATION (clone)
1589 = DECL_SOURCE_LOCATION (fn);
1590 DECL_DELETED_FN (clone)
1591 = DECL_DELETED_FN (fn);
1592 }
1593 check_specialization_namespace (tmpl);
1594
1595 return fn;
1596 }
1597 }
1598 else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1599 {
1600 tree dd = duplicate_decls (spec, fn, is_friend);
1601 if (dd == error_mark_node)
1602 /* We've already complained in duplicate_decls. */
1603 return error_mark_node;
1604
1605 if (dd == NULL_TREE && DECL_INITIAL (spec))
1606 /* Dup decl failed, but this is a new definition. Set the
1607 line number so any errors match this new
1608 definition. */
1609 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1610
1611 return fn;
1612 }
1613 }
1614 else if (fn)
1615 return duplicate_decls (spec, fn, is_friend);
1616
1617 /* A specialization must be declared in the same namespace as the
1618 template it is specializing. */
1619 if (DECL_P (spec) && DECL_TEMPLATE_SPECIALIZATION (spec)
1620 && !check_specialization_namespace (tmpl))
1621 DECL_CONTEXT (spec) = DECL_CONTEXT (tmpl);
1622
1623 if (slot != NULL /* !optimize_specialization_lookup_p (tmpl) */)
1624 {
1625 spec_entry *entry = ggc_alloc<spec_entry> ();
1626 gcc_assert (tmpl && args && spec);
1627 *entry = elt;
1628 *slot = entry;
1629 if ((TREE_CODE (spec) == FUNCTION_DECL && DECL_NAMESPACE_SCOPE_P (spec)
1630 && PRIMARY_TEMPLATE_P (tmpl)
1631 && DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (tmpl)) == NULL_TREE)
1632 || variable_template_p (tmpl))
1633 /* If TMPL is a forward declaration of a template function, keep a list
1634 of all specializations in case we need to reassign them to a friend
1635 template later in tsubst_friend_function.
1636
1637 Also keep a list of all variable template instantiations so that
1638 process_partial_specialization can check whether a later partial
1639 specialization would have used it. */
1640 DECL_TEMPLATE_INSTANTIATIONS (tmpl)
1641 = tree_cons (args, spec, DECL_TEMPLATE_INSTANTIATIONS (tmpl));
1642 }
1643
1644 return spec;
1645 }
1646
1647 /* Returns true iff two spec_entry nodes are equivalent. */
1648
1649 int comparing_specializations;
1650
1651 bool
1652 spec_hasher::equal (spec_entry *e1, spec_entry *e2)
1653 {
1654 int equal;
1655
1656 ++comparing_specializations;
1657 equal = (e1->tmpl == e2->tmpl
1658 && comp_template_args (e1->args, e2->args));
1659 if (equal && flag_concepts
1660 /* tmpl could be a FIELD_DECL for a capture pack. */
1661 && TREE_CODE (e1->tmpl) == TEMPLATE_DECL
1662 && VAR_P (DECL_TEMPLATE_RESULT (e1->tmpl))
1663 && uses_template_parms (e1->args))
1664 {
1665 /* Partial specializations of a variable template can be distinguished by
1666 constraints. */
1667 tree c1 = e1->spec ? get_constraints (e1->spec) : NULL_TREE;
1668 tree c2 = e2->spec ? get_constraints (e2->spec) : NULL_TREE;
1669 equal = equivalent_constraints (c1, c2);
1670 }
1671 --comparing_specializations;
1672
1673 return equal;
1674 }
1675
1676 /* Returns a hash for a template TMPL and template arguments ARGS. */
1677
1678 static hashval_t
1679 hash_tmpl_and_args (tree tmpl, tree args)
1680 {
1681 hashval_t val = iterative_hash_object (DECL_UID (tmpl), 0);
1682 return iterative_hash_template_arg (args, val);
1683 }
1684
1685 /* Returns a hash for a spec_entry node based on the TMPL and ARGS members,
1686 ignoring SPEC. */
1687
1688 hashval_t
1689 spec_hasher::hash (spec_entry *e)
1690 {
1691 return hash_tmpl_and_args (e->tmpl, e->args);
1692 }
1693
1694 /* Recursively calculate a hash value for a template argument ARG, for use
1695 in the hash tables of template specializations. */
1696
1697 hashval_t
1698 iterative_hash_template_arg (tree arg, hashval_t val)
1699 {
1700 unsigned HOST_WIDE_INT i;
1701 enum tree_code code;
1702 char tclass;
1703
1704 if (arg == NULL_TREE)
1705 return iterative_hash_object (arg, val);
1706
1707 if (!TYPE_P (arg))
1708 STRIP_NOPS (arg);
1709
1710 if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
1711 gcc_unreachable ();
1712
1713 code = TREE_CODE (arg);
1714 tclass = TREE_CODE_CLASS (code);
1715
1716 val = iterative_hash_object (code, val);
1717
1718 switch (code)
1719 {
1720 case ERROR_MARK:
1721 return val;
1722
1723 case IDENTIFIER_NODE:
1724 return iterative_hash_object (IDENTIFIER_HASH_VALUE (arg), val);
1725
1726 case TREE_VEC:
1727 {
1728 int i, len = TREE_VEC_LENGTH (arg);
1729 for (i = 0; i < len; ++i)
1730 val = iterative_hash_template_arg (TREE_VEC_ELT (arg, i), val);
1731 return val;
1732 }
1733
1734 case TYPE_PACK_EXPANSION:
1735 case EXPR_PACK_EXPANSION:
1736 val = iterative_hash_template_arg (PACK_EXPANSION_PATTERN (arg), val);
1737 return iterative_hash_template_arg (PACK_EXPANSION_EXTRA_ARGS (arg), val);
1738
1739 case TYPE_ARGUMENT_PACK:
1740 case NONTYPE_ARGUMENT_PACK:
1741 return iterative_hash_template_arg (ARGUMENT_PACK_ARGS (arg), val);
1742
1743 case TREE_LIST:
1744 for (; arg; arg = TREE_CHAIN (arg))
1745 val = iterative_hash_template_arg (TREE_VALUE (arg), val);
1746 return val;
1747
1748 case OVERLOAD:
1749 for (lkp_iterator iter (arg); iter; ++iter)
1750 val = iterative_hash_template_arg (*iter, val);
1751 return val;
1752
1753 case CONSTRUCTOR:
1754 {
1755 tree field, value;
1756 iterative_hash_template_arg (TREE_TYPE (arg), val);
1757 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (arg), i, field, value)
1758 {
1759 val = iterative_hash_template_arg (field, val);
1760 val = iterative_hash_template_arg (value, val);
1761 }
1762 return val;
1763 }
1764
1765 case PARM_DECL:
1766 if (!DECL_ARTIFICIAL (arg))
1767 {
1768 val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
1769 val = iterative_hash_object (DECL_PARM_LEVEL (arg), val);
1770 }
1771 return iterative_hash_template_arg (TREE_TYPE (arg), val);
1772
1773 case TARGET_EXPR:
1774 return iterative_hash_template_arg (TARGET_EXPR_INITIAL (arg), val);
1775
1776 case PTRMEM_CST:
1777 val = iterative_hash_template_arg (PTRMEM_CST_CLASS (arg), val);
1778 return iterative_hash_template_arg (PTRMEM_CST_MEMBER (arg), val);
1779
1780 case TEMPLATE_PARM_INDEX:
1781 val = iterative_hash_template_arg
1782 (TREE_TYPE (TEMPLATE_PARM_DECL (arg)), val);
1783 val = iterative_hash_object (TEMPLATE_PARM_LEVEL (arg), val);
1784 return iterative_hash_object (TEMPLATE_PARM_IDX (arg), val);
1785
1786 case TRAIT_EXPR:
1787 val = iterative_hash_object (TRAIT_EXPR_KIND (arg), val);
1788 val = iterative_hash_template_arg (TRAIT_EXPR_TYPE1 (arg), val);
1789 return iterative_hash_template_arg (TRAIT_EXPR_TYPE2 (arg), val);
1790
1791 case BASELINK:
1792 val = iterative_hash_template_arg (BINFO_TYPE (BASELINK_BINFO (arg)),
1793 val);
1794 return iterative_hash_template_arg (DECL_NAME (get_first_fn (arg)),
1795 val);
1796
1797 case MODOP_EXPR:
1798 val = iterative_hash_template_arg (TREE_OPERAND (arg, 0), val);
1799 code = TREE_CODE (TREE_OPERAND (arg, 1));
1800 val = iterative_hash_object (code, val);
1801 return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
1802
1803 case LAMBDA_EXPR:
1804 /* A lambda can't appear in a template arg, but don't crash on
1805 erroneous input. */
1806 gcc_assert (seen_error ());
1807 return val;
1808
1809 case CAST_EXPR:
1810 case IMPLICIT_CONV_EXPR:
1811 case STATIC_CAST_EXPR:
1812 case REINTERPRET_CAST_EXPR:
1813 case CONST_CAST_EXPR:
1814 case DYNAMIC_CAST_EXPR:
1815 case NEW_EXPR:
1816 val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1817 /* Now hash operands as usual. */
1818 break;
1819
1820 default:
1821 break;
1822 }
1823
1824 switch (tclass)
1825 {
1826 case tcc_type:
1827 if (alias_template_specialization_p (arg))
1828 {
1829 // We want an alias specialization that survived strip_typedefs
1830 // to hash differently from its TYPE_CANONICAL, to avoid hash
1831 // collisions that compare as different in template_args_equal.
1832 // These could be dependent specializations that strip_typedefs
1833 // left alone, or untouched specializations because
1834 // coerce_template_parms returns the unconverted template
1835 // arguments if it sees incomplete argument packs.
1836 tree ti = TYPE_ALIAS_TEMPLATE_INFO (arg);
1837 return hash_tmpl_and_args (TI_TEMPLATE (ti), TI_ARGS (ti));
1838 }
1839 if (TYPE_CANONICAL (arg))
1840 return iterative_hash_object (TYPE_HASH (TYPE_CANONICAL (arg)),
1841 val);
1842 else if (TREE_CODE (arg) == DECLTYPE_TYPE)
1843 return iterative_hash_template_arg (DECLTYPE_TYPE_EXPR (arg), val);
1844 /* Otherwise just compare the types during lookup. */
1845 return val;
1846
1847 case tcc_declaration:
1848 case tcc_constant:
1849 return iterative_hash_expr (arg, val);
1850
1851 default:
1852 gcc_assert (IS_EXPR_CODE_CLASS (tclass));
1853 {
1854 unsigned n = cp_tree_operand_length (arg);
1855 for (i = 0; i < n; ++i)
1856 val = iterative_hash_template_arg (TREE_OPERAND (arg, i), val);
1857 return val;
1858 }
1859 }
1860 gcc_unreachable ();
1861 return 0;
1862 }
1863
1864 /* Unregister the specialization SPEC as a specialization of TMPL.
1865 Replace it with NEW_SPEC, if NEW_SPEC is non-NULL. Returns true
1866 if the SPEC was listed as a specialization of TMPL.
1867
1868 Note that SPEC has been ggc_freed, so we can't look inside it. */
1869
1870 bool
1871 reregister_specialization (tree spec, tree tinfo, tree new_spec)
1872 {
1873 spec_entry *entry;
1874 spec_entry elt;
1875
1876 elt.tmpl = most_general_template (TI_TEMPLATE (tinfo));
1877 elt.args = TI_ARGS (tinfo);
1878 elt.spec = NULL_TREE;
1879
1880 entry = decl_specializations->find (&elt);
1881 if (entry != NULL)
1882 {
1883 gcc_assert (entry->spec == spec || entry->spec == new_spec);
1884 gcc_assert (new_spec != NULL_TREE);
1885 entry->spec = new_spec;
1886 return 1;
1887 }
1888
1889 return 0;
1890 }
1891
1892 /* Like register_specialization, but for local declarations. We are
1893 registering SPEC, an instantiation of TMPL. */
1894
1895 void
1896 register_local_specialization (tree spec, tree tmpl)
1897 {
1898 gcc_assert (tmpl != spec);
1899 local_specializations->put (tmpl, spec);
1900 }
1901
1902 /* TYPE is a class type. Returns true if TYPE is an explicitly
1903 specialized class. */
1904
1905 bool
1906 explicit_class_specialization_p (tree type)
1907 {
1908 if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1909 return false;
1910 return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1911 }
1912
1913 /* Print the list of functions at FNS, going through all the overloads
1914 for each element of the list. Alternatively, FNS can not be a
1915 TREE_LIST, in which case it will be printed together with all the
1916 overloads.
1917
1918 MORE and *STR should respectively be FALSE and NULL when the function
1919 is called from the outside. They are used internally on recursive
1920 calls. print_candidates manages the two parameters and leaves NULL
1921 in *STR when it ends. */
1922
1923 static void
1924 print_candidates_1 (tree fns, char **str, bool more = false)
1925 {
1926 if (TREE_CODE (fns) == TREE_LIST)
1927 for (; fns; fns = TREE_CHAIN (fns))
1928 print_candidates_1 (TREE_VALUE (fns), str, more || TREE_CHAIN (fns));
1929 else
1930 for (lkp_iterator iter (fns); iter;)
1931 {
1932 tree cand = *iter;
1933 ++iter;
1934
1935 const char *pfx = *str;
1936 if (!pfx)
1937 {
1938 if (more || iter)
1939 pfx = _("candidates are:");
1940 else
1941 pfx = _("candidate is:");
1942 *str = get_spaces (pfx);
1943 }
1944 inform (DECL_SOURCE_LOCATION (cand), "%s %#qD", pfx, cand);
1945 }
1946 }
1947
1948 /* Print the list of candidate FNS in an error message. FNS can also
1949 be a TREE_LIST of non-functions in the case of an ambiguous lookup. */
1950
1951 void
1952 print_candidates (tree fns)
1953 {
1954 char *str = NULL;
1955 print_candidates_1 (fns, &str);
1956 free (str);
1957 }
1958
1959 /* Get a (possibly) constrained template declaration for the
1960 purpose of ordering candidates. */
1961 static tree
1962 get_template_for_ordering (tree list)
1963 {
1964 gcc_assert (TREE_CODE (list) == TREE_LIST);
1965 tree f = TREE_VALUE (list);
1966 if (tree ti = DECL_TEMPLATE_INFO (f))
1967 return TI_TEMPLATE (ti);
1968 return f;
1969 }
1970
1971 /* Among candidates having the same signature, return the
1972 most constrained or NULL_TREE if there is no best candidate.
1973 If the signatures of candidates vary (e.g., template
1974 specialization vs. member function), then there can be no
1975 most constrained.
1976
1977 Note that we don't compare constraints on the functions
1978 themselves, but rather those of their templates. */
1979 static tree
1980 most_constrained_function (tree candidates)
1981 {
1982 // Try to find the best candidate in a first pass.
1983 tree champ = candidates;
1984 for (tree c = TREE_CHAIN (champ); c; c = TREE_CHAIN (c))
1985 {
1986 int winner = more_constrained (get_template_for_ordering (champ),
1987 get_template_for_ordering (c));
1988 if (winner == -1)
1989 champ = c; // The candidate is more constrained
1990 else if (winner == 0)
1991 return NULL_TREE; // Neither is more constrained
1992 }
1993
1994 // Verify that the champ is better than previous candidates.
1995 for (tree c = candidates; c != champ; c = TREE_CHAIN (c)) {
1996 if (!more_constrained (get_template_for_ordering (champ),
1997 get_template_for_ordering (c)))
1998 return NULL_TREE;
1999 }
2000
2001 return champ;
2002 }
2003
2004
2005 /* Returns the template (one of the functions given by TEMPLATE_ID)
2006 which can be specialized to match the indicated DECL with the
2007 explicit template args given in TEMPLATE_ID. The DECL may be
2008 NULL_TREE if none is available. In that case, the functions in
2009 TEMPLATE_ID are non-members.
2010
2011 If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
2012 specialization of a member template.
2013
2014 The TEMPLATE_COUNT is the number of references to qualifying
2015 template classes that appeared in the name of the function. See
2016 check_explicit_specialization for a more accurate description.
2017
2018 TSK indicates what kind of template declaration (if any) is being
2019 declared. TSK_TEMPLATE indicates that the declaration given by
2020 DECL, though a FUNCTION_DECL, has template parameters, and is
2021 therefore a template function.
2022
2023 The template args (those explicitly specified and those deduced)
2024 are output in a newly created vector *TARGS_OUT.
2025
2026 If it is impossible to determine the result, an error message is
2027 issued. The error_mark_node is returned to indicate failure. */
2028
2029 static tree
2030 determine_specialization (tree template_id,
2031 tree decl,
2032 tree* targs_out,
2033 int need_member_template,
2034 int template_count,
2035 tmpl_spec_kind tsk)
2036 {
2037 tree fns;
2038 tree targs;
2039 tree explicit_targs;
2040 tree candidates = NULL_TREE;
2041
2042 /* A TREE_LIST of templates of which DECL may be a specialization.
2043 The TREE_VALUE of each node is a TEMPLATE_DECL. The
2044 corresponding TREE_PURPOSE is the set of template arguments that,
2045 when used to instantiate the template, would produce a function
2046 with the signature of DECL. */
2047 tree templates = NULL_TREE;
2048 int header_count;
2049 cp_binding_level *b;
2050
2051 *targs_out = NULL_TREE;
2052
2053 if (template_id == error_mark_node || decl == error_mark_node)
2054 return error_mark_node;
2055
2056 /* We shouldn't be specializing a member template of an
2057 unspecialized class template; we already gave an error in
2058 check_specialization_scope, now avoid crashing. */
2059 if (template_count && DECL_CLASS_SCOPE_P (decl)
2060 && template_class_depth (DECL_CONTEXT (decl)) > 0)
2061 {
2062 gcc_assert (errorcount);
2063 return error_mark_node;
2064 }
2065
2066 fns = TREE_OPERAND (template_id, 0);
2067 explicit_targs = TREE_OPERAND (template_id, 1);
2068
2069 if (fns == error_mark_node)
2070 return error_mark_node;
2071
2072 /* Check for baselinks. */
2073 if (BASELINK_P (fns))
2074 fns = BASELINK_FUNCTIONS (fns);
2075
2076 if (TREE_CODE (decl) == FUNCTION_DECL && !is_overloaded_fn (fns))
2077 {
2078 error ("%qD is not a function template", fns);
2079 return error_mark_node;
2080 }
2081 else if (VAR_P (decl) && !variable_template_p (fns))
2082 {
2083 error ("%qD is not a variable template", fns);
2084 return error_mark_node;
2085 }
2086
2087 /* Count the number of template headers specified for this
2088 specialization. */
2089 header_count = 0;
2090 for (b = current_binding_level;
2091 b->kind == sk_template_parms;
2092 b = b->level_chain)
2093 ++header_count;
2094
2095 tree orig_fns = fns;
2096
2097 if (variable_template_p (fns))
2098 {
2099 tree parms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (fns));
2100 targs = coerce_template_parms (parms, explicit_targs, fns,
2101 tf_warning_or_error,
2102 /*req_all*/true, /*use_defarg*/true);
2103 if (targs != error_mark_node)
2104 templates = tree_cons (targs, fns, templates);
2105 }
2106 else for (lkp_iterator iter (fns); iter; ++iter)
2107 {
2108 tree fn = *iter;
2109
2110 if (TREE_CODE (fn) == TEMPLATE_DECL)
2111 {
2112 tree decl_arg_types;
2113 tree fn_arg_types;
2114 tree insttype;
2115
2116 /* In case of explicit specialization, we need to check if
2117 the number of template headers appearing in the specialization
2118 is correct. This is usually done in check_explicit_specialization,
2119 but the check done there cannot be exhaustive when specializing
2120 member functions. Consider the following code:
2121
2122 template <> void A<int>::f(int);
2123 template <> template <> void A<int>::f(int);
2124
2125 Assuming that A<int> is not itself an explicit specialization
2126 already, the first line specializes "f" which is a non-template
2127 member function, whilst the second line specializes "f" which
2128 is a template member function. So both lines are syntactically
2129 correct, and check_explicit_specialization does not reject
2130 them.
2131
2132 Here, we can do better, as we are matching the specialization
2133 against the declarations. We count the number of template
2134 headers, and we check if they match TEMPLATE_COUNT + 1
2135 (TEMPLATE_COUNT is the number of qualifying template classes,
2136 plus there must be another header for the member template
2137 itself).
2138
2139 Notice that if header_count is zero, this is not a
2140 specialization but rather a template instantiation, so there
2141 is no check we can perform here. */
2142 if (header_count && header_count != template_count + 1)
2143 continue;
2144
2145 /* Check that the number of template arguments at the
2146 innermost level for DECL is the same as for FN. */
2147 if (current_binding_level->kind == sk_template_parms
2148 && !current_binding_level->explicit_spec_p
2149 && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
2150 != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
2151 (current_template_parms))))
2152 continue;
2153
2154 /* DECL might be a specialization of FN. */
2155 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
2156 fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
2157
2158 /* For a non-static member function, we need to make sure
2159 that the const qualification is the same. Since
2160 get_bindings does not try to merge the "this" parameter,
2161 we must do the comparison explicitly. */
2162 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
2163 && !same_type_p (TREE_VALUE (fn_arg_types),
2164 TREE_VALUE (decl_arg_types)))
2165 continue;
2166
2167 /* Skip the "this" parameter and, for constructors of
2168 classes with virtual bases, the VTT parameter. A
2169 full specialization of a constructor will have a VTT
2170 parameter, but a template never will. */
2171 decl_arg_types
2172 = skip_artificial_parms_for (decl, decl_arg_types);
2173 fn_arg_types
2174 = skip_artificial_parms_for (fn, fn_arg_types);
2175
2176 /* Function templates cannot be specializations; there are
2177 no partial specializations of functions. Therefore, if
2178 the type of DECL does not match FN, there is no
2179 match.
2180
2181 Note that it should never be the case that we have both
2182 candidates added here, and for regular member functions
2183 below. */
2184 if (tsk == tsk_template)
2185 {
2186 if (compparms (fn_arg_types, decl_arg_types))
2187 candidates = tree_cons (NULL_TREE, fn, candidates);
2188 continue;
2189 }
2190
2191 /* See whether this function might be a specialization of this
2192 template. Suppress access control because we might be trying
2193 to make this specialization a friend, and we have already done
2194 access control for the declaration of the specialization. */
2195 push_deferring_access_checks (dk_no_check);
2196 targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
2197 pop_deferring_access_checks ();
2198
2199 if (!targs)
2200 /* We cannot deduce template arguments that when used to
2201 specialize TMPL will produce DECL. */
2202 continue;
2203
2204 /* Remove, from the set of candidates, all those functions
2205 whose constraints are not satisfied. */
2206 if (flag_concepts && !constraints_satisfied_p (fn, targs))
2207 continue;
2208
2209 // Then, try to form the new function type.
2210 insttype = tsubst (TREE_TYPE (fn), targs, tf_fndecl_type, NULL_TREE);
2211 if (insttype == error_mark_node)
2212 continue;
2213 fn_arg_types
2214 = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (insttype));
2215 if (!compparms (fn_arg_types, decl_arg_types))
2216 continue;
2217
2218 /* Save this template, and the arguments deduced. */
2219 templates = tree_cons (targs, fn, templates);
2220 }
2221 else if (need_member_template)
2222 /* FN is an ordinary member function, and we need a
2223 specialization of a member template. */
2224 ;
2225 else if (TREE_CODE (fn) != FUNCTION_DECL)
2226 /* We can get IDENTIFIER_NODEs here in certain erroneous
2227 cases. */
2228 ;
2229 else if (!DECL_FUNCTION_MEMBER_P (fn))
2230 /* This is just an ordinary non-member function. Nothing can
2231 be a specialization of that. */
2232 ;
2233 else if (DECL_ARTIFICIAL (fn))
2234 /* Cannot specialize functions that are created implicitly. */
2235 ;
2236 else
2237 {
2238 tree decl_arg_types;
2239
2240 /* This is an ordinary member function. However, since
2241 we're here, we can assume its enclosing class is a
2242 template class. For example,
2243
2244 template <typename T> struct S { void f(); };
2245 template <> void S<int>::f() {}
2246
2247 Here, S<int>::f is a non-template, but S<int> is a
2248 template class. If FN has the same type as DECL, we
2249 might be in business. */
2250
2251 if (!DECL_TEMPLATE_INFO (fn))
2252 /* Its enclosing class is an explicit specialization
2253 of a template class. This is not a candidate. */
2254 continue;
2255
2256 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
2257 TREE_TYPE (TREE_TYPE (fn))))
2258 /* The return types differ. */
2259 continue;
2260
2261 /* Adjust the type of DECL in case FN is a static member. */
2262 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
2263 if (DECL_STATIC_FUNCTION_P (fn)
2264 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2265 decl_arg_types = TREE_CHAIN (decl_arg_types);
2266
2267 if (!compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
2268 decl_arg_types))
2269 continue;
2270
2271 // If the deduced arguments do not satisfy the constraints,
2272 // this is not a candidate.
2273 if (flag_concepts && !constraints_satisfied_p (fn))
2274 continue;
2275
2276 // Add the candidate.
2277 candidates = tree_cons (NULL_TREE, fn, candidates);
2278 }
2279 }
2280
2281 if (templates && TREE_CHAIN (templates))
2282 {
2283 /* We have:
2284
2285 [temp.expl.spec]
2286
2287 It is possible for a specialization with a given function
2288 signature to be instantiated from more than one function
2289 template. In such cases, explicit specification of the
2290 template arguments must be used to uniquely identify the
2291 function template specialization being specialized.
2292
2293 Note that here, there's no suggestion that we're supposed to
2294 determine which of the candidate templates is most
2295 specialized. However, we, also have:
2296
2297 [temp.func.order]
2298
2299 Partial ordering of overloaded function template
2300 declarations is used in the following contexts to select
2301 the function template to which a function template
2302 specialization refers:
2303
2304 -- when an explicit specialization refers to a function
2305 template.
2306
2307 So, we do use the partial ordering rules, at least for now.
2308 This extension can only serve to make invalid programs valid,
2309 so it's safe. And, there is strong anecdotal evidence that
2310 the committee intended the partial ordering rules to apply;
2311 the EDG front end has that behavior, and John Spicer claims
2312 that the committee simply forgot to delete the wording in
2313 [temp.expl.spec]. */
2314 tree tmpl = most_specialized_instantiation (templates);
2315 if (tmpl != error_mark_node)
2316 {
2317 templates = tmpl;
2318 TREE_CHAIN (templates) = NULL_TREE;
2319 }
2320 }
2321
2322 // Concepts allows multiple declarations of member functions
2323 // with the same signature. Like above, we need to rely on
2324 // on the partial ordering of those candidates to determine which
2325 // is the best.
2326 if (flag_concepts && candidates && TREE_CHAIN (candidates))
2327 {
2328 if (tree cand = most_constrained_function (candidates))
2329 {
2330 candidates = cand;
2331 TREE_CHAIN (cand) = NULL_TREE;
2332 }
2333 }
2334
2335 if (templates == NULL_TREE && candidates == NULL_TREE)
2336 {
2337 error ("template-id %qD for %q+D does not match any template "
2338 "declaration", template_id, decl);
2339 if (header_count && header_count != template_count + 1)
2340 inform (input_location, "saw %d %<template<>%>, need %d for "
2341 "specializing a member function template",
2342 header_count, template_count + 1);
2343 else
2344 print_candidates (orig_fns);
2345 return error_mark_node;
2346 }
2347 else if ((templates && TREE_CHAIN (templates))
2348 || (candidates && TREE_CHAIN (candidates))
2349 || (templates && candidates))
2350 {
2351 error ("ambiguous template specialization %qD for %q+D",
2352 template_id, decl);
2353 candidates = chainon (candidates, templates);
2354 print_candidates (candidates);
2355 return error_mark_node;
2356 }
2357
2358 /* We have one, and exactly one, match. */
2359 if (candidates)
2360 {
2361 tree fn = TREE_VALUE (candidates);
2362 *targs_out = copy_node (DECL_TI_ARGS (fn));
2363
2364 // Propagate the candidate's constraints to the declaration.
2365 set_constraints (decl, get_constraints (fn));
2366
2367 /* DECL is a re-declaration or partial instantiation of a template
2368 function. */
2369 if (TREE_CODE (fn) == TEMPLATE_DECL)
2370 return fn;
2371 /* It was a specialization of an ordinary member function in a
2372 template class. */
2373 return DECL_TI_TEMPLATE (fn);
2374 }
2375
2376 /* It was a specialization of a template. */
2377 targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
2378 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
2379 {
2380 *targs_out = copy_node (targs);
2381 SET_TMPL_ARGS_LEVEL (*targs_out,
2382 TMPL_ARGS_DEPTH (*targs_out),
2383 TREE_PURPOSE (templates));
2384 }
2385 else
2386 *targs_out = TREE_PURPOSE (templates);
2387 return TREE_VALUE (templates);
2388 }
2389
2390 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
2391 but with the default argument values filled in from those in the
2392 TMPL_TYPES. */
2393
2394 static tree
2395 copy_default_args_to_explicit_spec_1 (tree spec_types,
2396 tree tmpl_types)
2397 {
2398 tree new_spec_types;
2399
2400 if (!spec_types)
2401 return NULL_TREE;
2402
2403 if (spec_types == void_list_node)
2404 return void_list_node;
2405
2406 /* Substitute into the rest of the list. */
2407 new_spec_types =
2408 copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
2409 TREE_CHAIN (tmpl_types));
2410
2411 /* Add the default argument for this parameter. */
2412 return hash_tree_cons (TREE_PURPOSE (tmpl_types),
2413 TREE_VALUE (spec_types),
2414 new_spec_types);
2415 }
2416
2417 /* DECL is an explicit specialization. Replicate default arguments
2418 from the template it specializes. (That way, code like:
2419
2420 template <class T> void f(T = 3);
2421 template <> void f(double);
2422 void g () { f (); }
2423
2424 works, as required.) An alternative approach would be to look up
2425 the correct default arguments at the call-site, but this approach
2426 is consistent with how implicit instantiations are handled. */
2427
2428 static void
2429 copy_default_args_to_explicit_spec (tree decl)
2430 {
2431 tree tmpl;
2432 tree spec_types;
2433 tree tmpl_types;
2434 tree new_spec_types;
2435 tree old_type;
2436 tree new_type;
2437 tree t;
2438 tree object_type = NULL_TREE;
2439 tree in_charge = NULL_TREE;
2440 tree vtt = NULL_TREE;
2441
2442 /* See if there's anything we need to do. */
2443 tmpl = DECL_TI_TEMPLATE (decl);
2444 tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
2445 for (t = tmpl_types; t; t = TREE_CHAIN (t))
2446 if (TREE_PURPOSE (t))
2447 break;
2448 if (!t)
2449 return;
2450
2451 old_type = TREE_TYPE (decl);
2452 spec_types = TYPE_ARG_TYPES (old_type);
2453
2454 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2455 {
2456 /* Remove the this pointer, but remember the object's type for
2457 CV quals. */
2458 object_type = TREE_TYPE (TREE_VALUE (spec_types));
2459 spec_types = TREE_CHAIN (spec_types);
2460 tmpl_types = TREE_CHAIN (tmpl_types);
2461
2462 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
2463 {
2464 /* DECL may contain more parameters than TMPL due to the extra
2465 in-charge parameter in constructors and destructors. */
2466 in_charge = spec_types;
2467 spec_types = TREE_CHAIN (spec_types);
2468 }
2469 if (DECL_HAS_VTT_PARM_P (decl))
2470 {
2471 vtt = spec_types;
2472 spec_types = TREE_CHAIN (spec_types);
2473 }
2474 }
2475
2476 /* Compute the merged default arguments. */
2477 new_spec_types =
2478 copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
2479
2480 /* Compute the new FUNCTION_TYPE. */
2481 if (object_type)
2482 {
2483 if (vtt)
2484 new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
2485 TREE_VALUE (vtt),
2486 new_spec_types);
2487
2488 if (in_charge)
2489 /* Put the in-charge parameter back. */
2490 new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
2491 TREE_VALUE (in_charge),
2492 new_spec_types);
2493
2494 new_type = build_method_type_directly (object_type,
2495 TREE_TYPE (old_type),
2496 new_spec_types);
2497 }
2498 else
2499 new_type = build_function_type (TREE_TYPE (old_type),
2500 new_spec_types);
2501 new_type = cp_build_type_attribute_variant (new_type,
2502 TYPE_ATTRIBUTES (old_type));
2503 new_type = build_exception_variant (new_type,
2504 TYPE_RAISES_EXCEPTIONS (old_type));
2505
2506 if (TYPE_HAS_LATE_RETURN_TYPE (old_type))
2507 TYPE_HAS_LATE_RETURN_TYPE (new_type) = 1;
2508
2509 TREE_TYPE (decl) = new_type;
2510 }
2511
2512 /* Return the number of template headers we expect to see for a definition
2513 or specialization of CTYPE or one of its non-template members. */
2514
2515 int
2516 num_template_headers_for_class (tree ctype)
2517 {
2518 int num_templates = 0;
2519
2520 while (ctype && CLASS_TYPE_P (ctype))
2521 {
2522 /* You're supposed to have one `template <...>' for every
2523 template class, but you don't need one for a full
2524 specialization. For example:
2525
2526 template <class T> struct S{};
2527 template <> struct S<int> { void f(); };
2528 void S<int>::f () {}
2529
2530 is correct; there shouldn't be a `template <>' for the
2531 definition of `S<int>::f'. */
2532 if (!CLASSTYPE_TEMPLATE_INFO (ctype))
2533 /* If CTYPE does not have template information of any
2534 kind, then it is not a template, nor is it nested
2535 within a template. */
2536 break;
2537 if (explicit_class_specialization_p (ctype))
2538 break;
2539 if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (ctype)))
2540 ++num_templates;
2541
2542 ctype = TYPE_CONTEXT (ctype);
2543 }
2544
2545 return num_templates;
2546 }
2547
2548 /* Do a simple sanity check on the template headers that precede the
2549 variable declaration DECL. */
2550
2551 void
2552 check_template_variable (tree decl)
2553 {
2554 tree ctx = CP_DECL_CONTEXT (decl);
2555 int wanted = num_template_headers_for_class (ctx);
2556 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl)
2557 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl)))
2558 {
2559 if (cxx_dialect < cxx14)
2560 pedwarn (DECL_SOURCE_LOCATION (decl), 0,
2561 "variable templates only available with "
2562 "-std=c++14 or -std=gnu++14");
2563
2564 // Namespace-scope variable templates should have a template header.
2565 ++wanted;
2566 }
2567 if (template_header_count > wanted)
2568 {
2569 bool warned = pedwarn (DECL_SOURCE_LOCATION (decl), 0,
2570 "too many template headers for %qD "
2571 "(should be %d)",
2572 decl, wanted);
2573 if (warned && CLASS_TYPE_P (ctx)
2574 && CLASSTYPE_TEMPLATE_SPECIALIZATION (ctx))
2575 inform (DECL_SOURCE_LOCATION (decl),
2576 "members of an explicitly specialized class are defined "
2577 "without a template header");
2578 }
2579 }
2580
2581 /* An explicit specialization whose declarator-id or class-head-name is not
2582 qualified shall be declared in the nearest enclosing namespace of the
2583 template, or, if the namespace is inline (7.3.1), any namespace from its
2584 enclosing namespace set.
2585
2586 If the name declared in the explicit instantiation is an unqualified name,
2587 the explicit instantiation shall appear in the namespace where its template
2588 is declared or, if that namespace is inline (7.3.1), any namespace from its
2589 enclosing namespace set. */
2590
2591 void
2592 check_unqualified_spec_or_inst (tree t, location_t loc)
2593 {
2594 tree tmpl = most_general_template (t);
2595 if (DECL_NAMESPACE_SCOPE_P (tmpl)
2596 && !is_nested_namespace (current_namespace,
2597 CP_DECL_CONTEXT (tmpl), true))
2598 {
2599 if (processing_specialization)
2600 permerror (loc, "explicit specialization of %qD outside its "
2601 "namespace must use a nested-name-specifier", tmpl);
2602 else if (processing_explicit_instantiation
2603 && cxx_dialect >= cxx11)
2604 /* This was allowed in C++98, so only pedwarn. */
2605 pedwarn (loc, OPT_Wpedantic, "explicit instantiation of %qD "
2606 "outside its namespace must use a nested-name-"
2607 "specifier", tmpl);
2608 }
2609 }
2610
2611 /* Check to see if the function just declared, as indicated in
2612 DECLARATOR, and in DECL, is a specialization of a function
2613 template. We may also discover that the declaration is an explicit
2614 instantiation at this point.
2615
2616 Returns DECL, or an equivalent declaration that should be used
2617 instead if all goes well. Issues an error message if something is
2618 amiss. Returns error_mark_node if the error is not easily
2619 recoverable.
2620
2621 FLAGS is a bitmask consisting of the following flags:
2622
2623 2: The function has a definition.
2624 4: The function is a friend.
2625
2626 The TEMPLATE_COUNT is the number of references to qualifying
2627 template classes that appeared in the name of the function. For
2628 example, in
2629
2630 template <class T> struct S { void f(); };
2631 void S<int>::f();
2632
2633 the TEMPLATE_COUNT would be 1. However, explicitly specialized
2634 classes are not counted in the TEMPLATE_COUNT, so that in
2635
2636 template <class T> struct S {};
2637 template <> struct S<int> { void f(); }
2638 template <> void S<int>::f();
2639
2640 the TEMPLATE_COUNT would be 0. (Note that this declaration is
2641 invalid; there should be no template <>.)
2642
2643 If the function is a specialization, it is marked as such via
2644 DECL_TEMPLATE_SPECIALIZATION. Furthermore, its DECL_TEMPLATE_INFO
2645 is set up correctly, and it is added to the list of specializations
2646 for that template. */
2647
2648 tree
2649 check_explicit_specialization (tree declarator,
2650 tree decl,
2651 int template_count,
2652 int flags)
2653 {
2654 int have_def = flags & 2;
2655 int is_friend = flags & 4;
2656 bool is_concept = flags & 8;
2657 int specialization = 0;
2658 int explicit_instantiation = 0;
2659 int member_specialization = 0;
2660 tree ctype = DECL_CLASS_CONTEXT (decl);
2661 tree dname = DECL_NAME (decl);
2662 tmpl_spec_kind tsk;
2663
2664 if (is_friend)
2665 {
2666 if (!processing_specialization)
2667 tsk = tsk_none;
2668 else
2669 tsk = tsk_excessive_parms;
2670 }
2671 else
2672 tsk = current_tmpl_spec_kind (template_count);
2673
2674 switch (tsk)
2675 {
2676 case tsk_none:
2677 if (processing_specialization && !VAR_P (decl))
2678 {
2679 specialization = 1;
2680 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2681 }
2682 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2683 {
2684 if (is_friend)
2685 /* This could be something like:
2686
2687 template <class T> void f(T);
2688 class S { friend void f<>(int); } */
2689 specialization = 1;
2690 else
2691 {
2692 /* This case handles bogus declarations like template <>
2693 template <class T> void f<int>(); */
2694
2695 error ("template-id %qD in declaration of primary template",
2696 declarator);
2697 return decl;
2698 }
2699 }
2700 break;
2701
2702 case tsk_invalid_member_spec:
2703 /* The error has already been reported in
2704 check_specialization_scope. */
2705 return error_mark_node;
2706
2707 case tsk_invalid_expl_inst:
2708 error ("template parameter list used in explicit instantiation");
2709
2710 /* Fall through. */
2711
2712 case tsk_expl_inst:
2713 if (have_def)
2714 error ("definition provided for explicit instantiation");
2715
2716 explicit_instantiation = 1;
2717 break;
2718
2719 case tsk_excessive_parms:
2720 case tsk_insufficient_parms:
2721 if (tsk == tsk_excessive_parms)
2722 error ("too many template parameter lists in declaration of %qD",
2723 decl);
2724 else if (template_header_count)
2725 error("too few template parameter lists in declaration of %qD", decl);
2726 else
2727 error("explicit specialization of %qD must be introduced by "
2728 "%<template <>%>", decl);
2729
2730 /* Fall through. */
2731 case tsk_expl_spec:
2732 if (is_concept)
2733 error ("explicit specialization declared %<concept%>");
2734
2735 if (VAR_P (decl) && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2736 /* In cases like template<> constexpr bool v = true;
2737 We'll give an error in check_template_variable. */
2738 break;
2739
2740 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2741 if (ctype)
2742 member_specialization = 1;
2743 else
2744 specialization = 1;
2745 break;
2746
2747 case tsk_template:
2748 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2749 {
2750 /* This case handles bogus declarations like template <>
2751 template <class T> void f<int>(); */
2752
2753 if (!uses_template_parms (declarator))
2754 error ("template-id %qD in declaration of primary template",
2755 declarator);
2756 else if (variable_template_p (TREE_OPERAND (declarator, 0)))
2757 {
2758 /* Partial specialization of variable template. */
2759 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2760 specialization = 1;
2761 goto ok;
2762 }
2763 else if (cxx_dialect < cxx14)
2764 error ("non-type partial specialization %qD "
2765 "is not allowed", declarator);
2766 else
2767 error ("non-class, non-variable partial specialization %qD "
2768 "is not allowed", declarator);
2769 return decl;
2770 ok:;
2771 }
2772
2773 if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
2774 /* This is a specialization of a member template, without
2775 specialization the containing class. Something like:
2776
2777 template <class T> struct S {
2778 template <class U> void f (U);
2779 };
2780 template <> template <class U> void S<int>::f(U) {}
2781
2782 That's a specialization -- but of the entire template. */
2783 specialization = 1;
2784 break;
2785
2786 default:
2787 gcc_unreachable ();
2788 }
2789
2790 if ((specialization || member_specialization)
2791 /* This doesn't apply to variable templates. */
2792 && (TREE_CODE (TREE_TYPE (decl)) == FUNCTION_TYPE
2793 || TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE))
2794 {
2795 tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2796 for (; t; t = TREE_CHAIN (t))
2797 if (TREE_PURPOSE (t))
2798 {
2799 permerror (input_location,
2800 "default argument specified in explicit specialization");
2801 break;
2802 }
2803 }
2804
2805 if (specialization || member_specialization || explicit_instantiation)
2806 {
2807 tree tmpl = NULL_TREE;
2808 tree targs = NULL_TREE;
2809 bool was_template_id = (TREE_CODE (declarator) == TEMPLATE_ID_EXPR);
2810
2811 /* Make sure that the declarator is a TEMPLATE_ID_EXPR. */
2812 if (!was_template_id)
2813 {
2814 tree fns;
2815
2816 gcc_assert (identifier_p (declarator));
2817 if (ctype)
2818 fns = dname;
2819 else
2820 {
2821 /* If there is no class context, the explicit instantiation
2822 must be at namespace scope. */
2823 gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2824
2825 /* Find the namespace binding, using the declaration
2826 context. */
2827 fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2828 false, true);
2829 if (fns == error_mark_node)
2830 /* If lookup fails, look for a friend declaration so we can
2831 give a better diagnostic. */
2832 fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2833 /*type*/false, /*complain*/true,
2834 /*hidden*/true);
2835
2836 if (fns == error_mark_node || !is_overloaded_fn (fns))
2837 {
2838 error ("%qD is not a template function", dname);
2839 fns = error_mark_node;
2840 }
2841 }
2842
2843 declarator = lookup_template_function (fns, NULL_TREE);
2844 }
2845
2846 if (declarator == error_mark_node)
2847 return error_mark_node;
2848
2849 if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2850 {
2851 if (!explicit_instantiation)
2852 /* A specialization in class scope. This is invalid,
2853 but the error will already have been flagged by
2854 check_specialization_scope. */
2855 return error_mark_node;
2856 else
2857 {
2858 /* It's not valid to write an explicit instantiation in
2859 class scope, e.g.:
2860
2861 class C { template void f(); }
2862
2863 This case is caught by the parser. However, on
2864 something like:
2865
2866 template class C { void f(); };
2867
2868 (which is invalid) we can get here. The error will be
2869 issued later. */
2870 ;
2871 }
2872
2873 return decl;
2874 }
2875 else if (ctype != NULL_TREE
2876 && (identifier_p (TREE_OPERAND (declarator, 0))))
2877 {
2878 // We'll match variable templates in start_decl.
2879 if (VAR_P (decl))
2880 return decl;
2881
2882 /* Find the list of functions in ctype that have the same
2883 name as the declared function. */
2884 tree name = TREE_OPERAND (declarator, 0);
2885
2886 if (constructor_name_p (name, ctype))
2887 {
2888 if (DECL_CONSTRUCTOR_P (decl)
2889 ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2890 : !CLASSTYPE_DESTRUCTOR (ctype))
2891 {
2892 /* From [temp.expl.spec]:
2893
2894 If such an explicit specialization for the member
2895 of a class template names an implicitly-declared
2896 special member function (clause _special_), the
2897 program is ill-formed.
2898
2899 Similar language is found in [temp.explicit]. */
2900 error ("specialization of implicitly-declared special member function");
2901 return error_mark_node;
2902 }
2903
2904 name = DECL_NAME (decl);
2905 }
2906
2907 /* For a type-conversion operator, We might be looking for
2908 `operator int' which will be a specialization of
2909 `operator T'. Grab all the conversion operators, and
2910 then select from them. */
2911 tree fns = get_class_binding (ctype, IDENTIFIER_CONV_OP_P (name)
2912 ? conv_op_identifier : name);
2913
2914 if (fns == NULL_TREE)
2915 {
2916 error ("no member function %qD declared in %qT", name, ctype);
2917 return error_mark_node;
2918 }
2919 else
2920 TREE_OPERAND (declarator, 0) = fns;
2921 }
2922
2923 /* Figure out what exactly is being specialized at this point.
2924 Note that for an explicit instantiation, even one for a
2925 member function, we cannot tell a priori whether the
2926 instantiation is for a member template, or just a member
2927 function of a template class. Even if a member template is
2928 being instantiated, the member template arguments may be
2929 elided if they can be deduced from the rest of the
2930 declaration. */
2931 tmpl = determine_specialization (declarator, decl,
2932 &targs,
2933 member_specialization,
2934 template_count,
2935 tsk);
2936
2937 if (!tmpl || tmpl == error_mark_node)
2938 /* We couldn't figure out what this declaration was
2939 specializing. */
2940 return error_mark_node;
2941 else
2942 {
2943 if (TREE_CODE (decl) == FUNCTION_DECL
2944 && DECL_HIDDEN_FRIEND_P (tmpl))
2945 {
2946 if (pedwarn (DECL_SOURCE_LOCATION (decl), 0,
2947 "friend declaration %qD is not visible to "
2948 "explicit specialization", tmpl))
2949 inform (DECL_SOURCE_LOCATION (tmpl),
2950 "friend declaration here");
2951 }
2952 else if (!ctype && !is_friend
2953 && CP_DECL_CONTEXT (decl) == current_namespace)
2954 check_unqualified_spec_or_inst (tmpl, DECL_SOURCE_LOCATION (decl));
2955
2956 tree gen_tmpl = most_general_template (tmpl);
2957
2958 if (explicit_instantiation)
2959 {
2960 /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2961 is done by do_decl_instantiation later. */
2962
2963 int arg_depth = TMPL_ARGS_DEPTH (targs);
2964 int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2965
2966 if (arg_depth > parm_depth)
2967 {
2968 /* If TMPL is not the most general template (for
2969 example, if TMPL is a friend template that is
2970 injected into namespace scope), then there will
2971 be too many levels of TARGS. Remove some of them
2972 here. */
2973 int i;
2974 tree new_targs;
2975
2976 new_targs = make_tree_vec (parm_depth);
2977 for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2978 TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2979 = TREE_VEC_ELT (targs, i);
2980 targs = new_targs;
2981 }
2982
2983 return instantiate_template (tmpl, targs, tf_error);
2984 }
2985
2986 /* If we thought that the DECL was a member function, but it
2987 turns out to be specializing a static member function,
2988 make DECL a static member function as well. */
2989 if (DECL_FUNCTION_TEMPLATE_P (tmpl)
2990 && DECL_STATIC_FUNCTION_P (tmpl)
2991 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2992 revert_static_member_fn (decl);
2993
2994 /* If this is a specialization of a member template of a
2995 template class, we want to return the TEMPLATE_DECL, not
2996 the specialization of it. */
2997 if (tsk == tsk_template && !was_template_id)
2998 {
2999 tree result = DECL_TEMPLATE_RESULT (tmpl);
3000 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3001 DECL_INITIAL (result) = NULL_TREE;
3002 if (have_def)
3003 {
3004 tree parm;
3005 DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
3006 DECL_SOURCE_LOCATION (result)
3007 = DECL_SOURCE_LOCATION (decl);
3008 /* We want to use the argument list specified in the
3009 definition, not in the original declaration. */
3010 DECL_ARGUMENTS (result) = DECL_ARGUMENTS (decl);
3011 for (parm = DECL_ARGUMENTS (result); parm;
3012 parm = DECL_CHAIN (parm))
3013 DECL_CONTEXT (parm) = result;
3014 }
3015 return register_specialization (tmpl, gen_tmpl, targs,
3016 is_friend, 0);
3017 }
3018
3019 /* Set up the DECL_TEMPLATE_INFO for DECL. */
3020 DECL_TEMPLATE_INFO (decl) = build_template_info (tmpl, targs);
3021
3022 if (was_template_id)
3023 TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (decl)) = true;
3024
3025 /* Inherit default function arguments from the template
3026 DECL is specializing. */
3027 if (DECL_FUNCTION_TEMPLATE_P (tmpl))
3028 copy_default_args_to_explicit_spec (decl);
3029
3030 /* This specialization has the same protection as the
3031 template it specializes. */
3032 TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
3033 TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
3034
3035 /* 7.1.1-1 [dcl.stc]
3036
3037 A storage-class-specifier shall not be specified in an
3038 explicit specialization...
3039
3040 The parser rejects these, so unless action is taken here,
3041 explicit function specializations will always appear with
3042 global linkage.
3043
3044 The action recommended by the C++ CWG in response to C++
3045 defect report 605 is to make the storage class and linkage
3046 of the explicit specialization match the templated function:
3047
3048 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
3049 */
3050 if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
3051 {
3052 tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
3053 gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
3054
3055 /* A concept cannot be specialized. */
3056 if (DECL_DECLARED_CONCEPT_P (tmpl_func))
3057 {
3058 error ("explicit specialization of function concept %qD",
3059 gen_tmpl);
3060 return error_mark_node;
3061 }
3062
3063 /* This specialization has the same linkage and visibility as
3064 the function template it specializes. */
3065 TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
3066 if (! TREE_PUBLIC (decl))
3067 {
3068 DECL_INTERFACE_KNOWN (decl) = 1;
3069 DECL_NOT_REALLY_EXTERN (decl) = 1;
3070 }
3071 DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
3072 if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
3073 {
3074 DECL_VISIBILITY_SPECIFIED (decl) = 1;
3075 DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
3076 }
3077 }
3078
3079 /* If DECL is a friend declaration, declared using an
3080 unqualified name, the namespace associated with DECL may
3081 have been set incorrectly. For example, in:
3082
3083 template <typename T> void f(T);
3084 namespace N {
3085 struct S { friend void f<int>(int); }
3086 }
3087
3088 we will have set the DECL_CONTEXT for the friend
3089 declaration to N, rather than to the global namespace. */
3090 if (DECL_NAMESPACE_SCOPE_P (decl))
3091 DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
3092
3093 if (is_friend && !have_def)
3094 /* This is not really a declaration of a specialization.
3095 It's just the name of an instantiation. But, it's not
3096 a request for an instantiation, either. */
3097 SET_DECL_IMPLICIT_INSTANTIATION (decl);
3098 else if (TREE_CODE (decl) == FUNCTION_DECL)
3099 /* A specialization is not necessarily COMDAT. */
3100 DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
3101 && DECL_DECLARED_INLINE_P (decl));
3102 else if (VAR_P (decl))
3103 DECL_COMDAT (decl) = false;
3104
3105 /* If this is a full specialization, register it so that we can find
3106 it again. Partial specializations will be registered in
3107 process_partial_specialization. */
3108 if (!processing_template_decl)
3109 decl = register_specialization (decl, gen_tmpl, targs,
3110 is_friend, 0);
3111
3112 /* A 'structor should already have clones. */
3113 gcc_assert (decl == error_mark_node
3114 || variable_template_p (tmpl)
3115 || !(DECL_CONSTRUCTOR_P (decl)
3116 || DECL_DESTRUCTOR_P (decl))
3117 || DECL_CLONED_FUNCTION_P (DECL_CHAIN (decl)));
3118 }
3119 }
3120
3121 return decl;
3122 }
3123
3124 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
3125 parameters. These are represented in the same format used for
3126 DECL_TEMPLATE_PARMS. */
3127
3128 int
3129 comp_template_parms (const_tree parms1, const_tree parms2)
3130 {
3131 const_tree p1;
3132 const_tree p2;
3133
3134 if (parms1 == parms2)
3135 return 1;
3136
3137 for (p1 = parms1, p2 = parms2;
3138 p1 != NULL_TREE && p2 != NULL_TREE;
3139 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
3140 {
3141 tree t1 = TREE_VALUE (p1);
3142 tree t2 = TREE_VALUE (p2);
3143 int i;
3144
3145 gcc_assert (TREE_CODE (t1) == TREE_VEC);
3146 gcc_assert (TREE_CODE (t2) == TREE_VEC);
3147
3148 if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
3149 return 0;
3150
3151 for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
3152 {
3153 tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
3154 tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
3155
3156 /* If either of the template parameters are invalid, assume
3157 they match for the sake of error recovery. */
3158 if (error_operand_p (parm1) || error_operand_p (parm2))
3159 return 1;
3160
3161 if (TREE_CODE (parm1) != TREE_CODE (parm2))
3162 return 0;
3163
3164 if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
3165 && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
3166 == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
3167 continue;
3168 else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
3169 return 0;
3170 }
3171 }
3172
3173 if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
3174 /* One set of parameters has more parameters lists than the
3175 other. */
3176 return 0;
3177
3178 return 1;
3179 }
3180
3181 /* Determine whether PARM is a parameter pack. */
3182
3183 bool
3184 template_parameter_pack_p (const_tree parm)
3185 {
3186 /* Determine if we have a non-type template parameter pack. */
3187 if (TREE_CODE (parm) == PARM_DECL)
3188 return (DECL_TEMPLATE_PARM_P (parm)
3189 && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
3190 if (TREE_CODE (parm) == TEMPLATE_PARM_INDEX)
3191 return TEMPLATE_PARM_PARAMETER_PACK (parm);
3192
3193 /* If this is a list of template parameters, we could get a
3194 TYPE_DECL or a TEMPLATE_DECL. */
3195 if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
3196 parm = TREE_TYPE (parm);
3197
3198 /* Otherwise it must be a type template parameter. */
3199 return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
3200 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
3201 && TEMPLATE_TYPE_PARAMETER_PACK (parm));
3202 }
3203
3204 /* Determine if T is a function parameter pack. */
3205
3206 bool
3207 function_parameter_pack_p (const_tree t)
3208 {
3209 if (t && TREE_CODE (t) == PARM_DECL)
3210 return DECL_PACK_P (t);
3211 return false;
3212 }
3213
3214 /* Return the function template declaration of PRIMARY_FUNC_TMPL_INST.
3215 PRIMARY_FUNC_TMPL_INST is a primary function template instantiation. */
3216
3217 tree
3218 get_function_template_decl (const_tree primary_func_tmpl_inst)
3219 {
3220 if (! primary_func_tmpl_inst
3221 || TREE_CODE (primary_func_tmpl_inst) != FUNCTION_DECL
3222 || ! primary_template_specialization_p (primary_func_tmpl_inst))
3223 return NULL;
3224
3225 return DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (primary_func_tmpl_inst));
3226 }
3227
3228 /* Return true iff the function parameter PARAM_DECL was expanded
3229 from the function parameter pack PACK. */
3230
3231 bool
3232 function_parameter_expanded_from_pack_p (tree param_decl, tree pack)
3233 {
3234 if (DECL_ARTIFICIAL (param_decl)
3235 || !function_parameter_pack_p (pack))
3236 return false;
3237
3238 /* The parameter pack and its pack arguments have the same
3239 DECL_PARM_INDEX. */
3240 return DECL_PARM_INDEX (pack) == DECL_PARM_INDEX (param_decl);
3241 }
3242
3243 /* Determine whether ARGS describes a variadic template args list,
3244 i.e., one that is terminated by a template argument pack. */
3245
3246 static bool
3247 template_args_variadic_p (tree args)
3248 {
3249 int nargs;
3250 tree last_parm;
3251
3252 if (args == NULL_TREE)
3253 return false;
3254
3255 args = INNERMOST_TEMPLATE_ARGS (args);
3256 nargs = TREE_VEC_LENGTH (args);
3257
3258 if (nargs == 0)
3259 return false;
3260
3261 last_parm = TREE_VEC_ELT (args, nargs - 1);
3262
3263 return ARGUMENT_PACK_P (last_parm);
3264 }
3265
3266 /* Generate a new name for the parameter pack name NAME (an
3267 IDENTIFIER_NODE) that incorporates its */
3268
3269 static tree
3270 make_ith_pack_parameter_name (tree name, int i)
3271 {
3272 /* Munge the name to include the parameter index. */
3273 #define NUMBUF_LEN 128
3274 char numbuf[NUMBUF_LEN];
3275 char* newname;
3276 int newname_len;
3277
3278 if (name == NULL_TREE)
3279 return name;
3280 snprintf (numbuf, NUMBUF_LEN, "%i", i);
3281 newname_len = IDENTIFIER_LENGTH (name)
3282 + strlen (numbuf) + 2;
3283 newname = (char*)alloca (newname_len);
3284 snprintf (newname, newname_len,
3285 "%s#%i", IDENTIFIER_POINTER (name), i);
3286 return get_identifier (newname);
3287 }
3288
3289 /* Return true if T is a primary function, class or alias template
3290 specialization, not including the template pattern. */
3291
3292 bool
3293 primary_template_specialization_p (const_tree t)
3294 {
3295 if (!t)
3296 return false;
3297
3298 if (TREE_CODE (t) == FUNCTION_DECL || VAR_P (t))
3299 return (DECL_LANG_SPECIFIC (t)
3300 && DECL_USE_TEMPLATE (t)
3301 && DECL_TEMPLATE_INFO (t)
3302 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t)));
3303 else if (CLASS_TYPE_P (t) && !TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
3304 return (CLASSTYPE_TEMPLATE_INFO (t)
3305 && CLASSTYPE_USE_TEMPLATE (t)
3306 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)));
3307 else if (alias_template_specialization_p (t))
3308 return true;
3309 return false;
3310 }
3311
3312 /* Return true if PARM is a template template parameter. */
3313
3314 bool
3315 template_template_parameter_p (const_tree parm)
3316 {
3317 return DECL_TEMPLATE_TEMPLATE_PARM_P (parm);
3318 }
3319
3320 /* Return true iff PARM is a DECL representing a type template
3321 parameter. */
3322
3323 bool
3324 template_type_parameter_p (const_tree parm)
3325 {
3326 return (parm
3327 && (TREE_CODE (parm) == TYPE_DECL
3328 || TREE_CODE (parm) == TEMPLATE_DECL)
3329 && DECL_TEMPLATE_PARM_P (parm));
3330 }
3331
3332 /* Return the template parameters of T if T is a
3333 primary template instantiation, NULL otherwise. */
3334
3335 tree
3336 get_primary_template_innermost_parameters (const_tree t)
3337 {
3338 tree parms = NULL, template_info = NULL;
3339
3340 if ((template_info = get_template_info (t))
3341 && primary_template_specialization_p (t))
3342 parms = INNERMOST_TEMPLATE_PARMS
3343 (DECL_TEMPLATE_PARMS (TI_TEMPLATE (template_info)));
3344
3345 return parms;
3346 }
3347
3348 /* Return the template parameters of the LEVELth level from the full list
3349 of template parameters PARMS. */
3350
3351 tree
3352 get_template_parms_at_level (tree parms, int level)
3353 {
3354 tree p;
3355 if (!parms
3356 || TREE_CODE (parms) != TREE_LIST
3357 || level > TMPL_PARMS_DEPTH (parms))
3358 return NULL_TREE;
3359
3360 for (p = parms; p; p = TREE_CHAIN (p))
3361 if (TMPL_PARMS_DEPTH (p) == level)
3362 return p;
3363
3364 return NULL_TREE;
3365 }
3366
3367 /* Returns the template arguments of T if T is a template instantiation,
3368 NULL otherwise. */
3369
3370 tree
3371 get_template_innermost_arguments (const_tree t)
3372 {
3373 tree args = NULL, template_info = NULL;
3374
3375 if ((template_info = get_template_info (t))
3376 && TI_ARGS (template_info))
3377 args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (template_info));
3378
3379 return args;
3380 }
3381
3382 /* Return the argument pack elements of T if T is a template argument pack,
3383 NULL otherwise. */
3384
3385 tree
3386 get_template_argument_pack_elems (const_tree t)
3387 {
3388 if (TREE_CODE (t) != TYPE_ARGUMENT_PACK
3389 && TREE_CODE (t) != NONTYPE_ARGUMENT_PACK)
3390 return NULL;
3391
3392 return ARGUMENT_PACK_ARGS (t);
3393 }
3394
3395 /* True iff FN is a function representing a built-in variadic parameter
3396 pack. */
3397
3398 bool
3399 builtin_pack_fn_p (tree fn)
3400 {
3401 if (!fn
3402 || TREE_CODE (fn) != FUNCTION_DECL
3403 || !DECL_IS_BUILTIN (fn))
3404 return false;
3405
3406 if (id_equal (DECL_NAME (fn), "__integer_pack"))
3407 return true;
3408
3409 return false;
3410 }
3411
3412 /* True iff CALL is a call to a function representing a built-in variadic
3413 parameter pack. */
3414
3415 static bool
3416 builtin_pack_call_p (tree call)
3417 {
3418 if (TREE_CODE (call) != CALL_EXPR)
3419 return false;
3420 return builtin_pack_fn_p (CALL_EXPR_FN (call));
3421 }
3422
3423 /* Return a TREE_VEC for the expansion of __integer_pack(HI). */
3424
3425 static tree
3426 expand_integer_pack (tree call, tree args, tsubst_flags_t complain,
3427 tree in_decl)
3428 {
3429 tree ohi = CALL_EXPR_ARG (call, 0);
3430 tree hi = tsubst_copy_and_build (ohi, args, complain, in_decl,
3431 false/*fn*/, true/*int_cst*/);
3432
3433 if (value_dependent_expression_p (hi))
3434 {
3435 if (hi != ohi)
3436 {
3437 call = copy_node (call);
3438 CALL_EXPR_ARG (call, 0) = hi;
3439 }
3440 tree ex = make_pack_expansion (call, complain);
3441 tree vec = make_tree_vec (1);
3442 TREE_VEC_ELT (vec, 0) = ex;
3443 return vec;
3444 }
3445 else
3446 {
3447 hi = cxx_constant_value (hi);
3448 int len = valid_constant_size_p (hi) ? tree_to_shwi (hi) : -1;
3449
3450 /* Calculate the largest value of len that won't make the size of the vec
3451 overflow an int. The compiler will exceed resource limits long before
3452 this, but it seems a decent place to diagnose. */
3453 int max = ((INT_MAX - sizeof (tree_vec)) / sizeof (tree)) + 1;
3454
3455 if (len < 0 || len > max)
3456 {
3457 if ((complain & tf_error)
3458 && hi != error_mark_node)
3459 error ("argument to __integer_pack must be between 0 and %d", max);
3460 return error_mark_node;
3461 }
3462
3463 tree vec = make_tree_vec (len);
3464
3465 for (int i = 0; i < len; ++i)
3466 TREE_VEC_ELT (vec, i) = size_int (i);
3467
3468 return vec;
3469 }
3470 }
3471
3472 /* Return a TREE_VEC for the expansion of built-in template parameter pack
3473 CALL. */
3474
3475 static tree
3476 expand_builtin_pack_call (tree call, tree args, tsubst_flags_t complain,
3477 tree in_decl)
3478 {
3479 if (!builtin_pack_call_p (call))
3480 return NULL_TREE;
3481
3482 tree fn = CALL_EXPR_FN (call);
3483
3484 if (id_equal (DECL_NAME (fn), "__integer_pack"))
3485 return expand_integer_pack (call, args, complain, in_decl);
3486
3487 return NULL_TREE;
3488 }
3489
3490 /* Structure used to track the progress of find_parameter_packs_r. */
3491 struct find_parameter_pack_data
3492 {
3493 /* TREE_LIST that will contain all of the parameter packs found by
3494 the traversal. */
3495 tree* parameter_packs;
3496
3497 /* Set of AST nodes that have been visited by the traversal. */
3498 hash_set<tree> *visited;
3499
3500 /* True iff we're making a type pack expansion. */
3501 bool type_pack_expansion_p;
3502 };
3503
3504 /* Identifies all of the argument packs that occur in a template
3505 argument and appends them to the TREE_LIST inside DATA, which is a
3506 find_parameter_pack_data structure. This is a subroutine of
3507 make_pack_expansion and uses_parameter_packs. */
3508 static tree
3509 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
3510 {
3511 tree t = *tp;
3512 struct find_parameter_pack_data* ppd =
3513 (struct find_parameter_pack_data*)data;
3514 bool parameter_pack_p = false;
3515
3516 /* Handle type aliases/typedefs. */
3517 if (TYPE_ALIAS_P (t))
3518 {
3519 if (tree tinfo = TYPE_ALIAS_TEMPLATE_INFO (t))
3520 cp_walk_tree (&TI_ARGS (tinfo),
3521 &find_parameter_packs_r,
3522 ppd, ppd->visited);
3523 *walk_subtrees = 0;
3524 return NULL_TREE;
3525 }
3526
3527 /* Identify whether this is a parameter pack or not. */
3528 switch (TREE_CODE (t))
3529 {
3530 case TEMPLATE_PARM_INDEX:
3531 if (TEMPLATE_PARM_PARAMETER_PACK (t))
3532 parameter_pack_p = true;
3533 break;
3534
3535 case TEMPLATE_TYPE_PARM:
3536 t = TYPE_MAIN_VARIANT (t);
3537 /* FALLTHRU */
3538 case TEMPLATE_TEMPLATE_PARM:
3539 /* If the placeholder appears in the decl-specifier-seq of a function
3540 parameter pack (14.6.3), or the type-specifier-seq of a type-id that
3541 is a pack expansion, the invented template parameter is a template
3542 parameter pack. */
3543 if (ppd->type_pack_expansion_p && is_auto (t))
3544 TEMPLATE_TYPE_PARAMETER_PACK (t) = true;
3545 if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3546 parameter_pack_p = true;
3547 break;
3548
3549 case FIELD_DECL:
3550 case PARM_DECL:
3551 if (DECL_PACK_P (t))
3552 {
3553 /* We don't want to walk into the type of a PARM_DECL,
3554 because we don't want to see the type parameter pack. */
3555 *walk_subtrees = 0;
3556 parameter_pack_p = true;
3557 }
3558 break;
3559
3560 /* Look through a lambda capture proxy to the field pack. */
3561 case VAR_DECL:
3562 if (DECL_HAS_VALUE_EXPR_P (t))
3563 {
3564 tree v = DECL_VALUE_EXPR (t);
3565 cp_walk_tree (&v,
3566 &find_parameter_packs_r,
3567 ppd, ppd->visited);
3568 *walk_subtrees = 0;
3569 }
3570 else if (variable_template_specialization_p (t))
3571 {
3572 cp_walk_tree (&DECL_TI_ARGS (t),
3573 find_parameter_packs_r,
3574 ppd, ppd->visited);
3575 *walk_subtrees = 0;
3576 }
3577 break;
3578
3579 case CALL_EXPR:
3580 if (builtin_pack_call_p (t))
3581 parameter_pack_p = true;
3582 break;
3583
3584 case BASES:
3585 parameter_pack_p = true;
3586 break;
3587 default:
3588 /* Not a parameter pack. */
3589 break;
3590 }
3591
3592 if (parameter_pack_p)
3593 {
3594 /* Add this parameter pack to the list. */
3595 *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
3596 }
3597
3598 if (TYPE_P (t))
3599 cp_walk_tree (&TYPE_CONTEXT (t),
3600 &find_parameter_packs_r, ppd, ppd->visited);
3601
3602 /* This switch statement will return immediately if we don't find a
3603 parameter pack. */
3604 switch (TREE_CODE (t))
3605 {
3606 case TEMPLATE_PARM_INDEX:
3607 return NULL_TREE;
3608
3609 case BOUND_TEMPLATE_TEMPLATE_PARM:
3610 /* Check the template itself. */
3611 cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)),
3612 &find_parameter_packs_r, ppd, ppd->visited);
3613 /* Check the template arguments. */
3614 cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd,
3615 ppd->visited);
3616 *walk_subtrees = 0;
3617 return NULL_TREE;
3618
3619 case TEMPLATE_TYPE_PARM:
3620 case TEMPLATE_TEMPLATE_PARM:
3621 return NULL_TREE;
3622
3623 case PARM_DECL:
3624 return NULL_TREE;
3625
3626 case DECL_EXPR:
3627 /* Ignore the declaration of a capture proxy for a parameter pack. */
3628 if (is_capture_proxy (DECL_EXPR_DECL (t)))
3629 *walk_subtrees = 0;
3630 return NULL_TREE;
3631
3632 case RECORD_TYPE:
3633 if (TYPE_PTRMEMFUNC_P (t))
3634 return NULL_TREE;
3635 /* Fall through. */
3636
3637 case UNION_TYPE:
3638 case ENUMERAL_TYPE:
3639 if (TYPE_TEMPLATE_INFO (t))
3640 cp_walk_tree (&TYPE_TI_ARGS (t),
3641 &find_parameter_packs_r, ppd, ppd->visited);
3642
3643 *walk_subtrees = 0;
3644 return NULL_TREE;
3645
3646 case TEMPLATE_DECL:
3647 if (!DECL_TEMPLATE_TEMPLATE_PARM_P (t))
3648 return NULL_TREE;
3649 gcc_fallthrough();
3650
3651 case CONSTRUCTOR:
3652 cp_walk_tree (&TREE_TYPE (t),
3653 &find_parameter_packs_r, ppd, ppd->visited);
3654 return NULL_TREE;
3655
3656 case TYPENAME_TYPE:
3657 cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
3658 ppd, ppd->visited);
3659 *walk_subtrees = 0;
3660 return NULL_TREE;
3661
3662 case TYPE_PACK_EXPANSION:
3663 case EXPR_PACK_EXPANSION:
3664 *walk_subtrees = 0;
3665 return NULL_TREE;
3666
3667 case INTEGER_TYPE:
3668 cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r,
3669 ppd, ppd->visited);
3670 *walk_subtrees = 0;
3671 return NULL_TREE;
3672
3673 case IDENTIFIER_NODE:
3674 cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd,
3675 ppd->visited);
3676 *walk_subtrees = 0;
3677 return NULL_TREE;
3678
3679 case LAMBDA_EXPR:
3680 {
3681 tree fn = lambda_function (t);
3682 cp_walk_tree (&DECL_SAVED_TREE (fn), &find_parameter_packs_r, ppd,
3683 ppd->visited);
3684 *walk_subtrees = 0;
3685 return NULL_TREE;
3686 }
3687
3688 case DECLTYPE_TYPE:
3689 {
3690 /* When traversing a DECLTYPE_TYPE_EXPR, we need to set
3691 type_pack_expansion_p to false so that any placeholders
3692 within the expression don't get marked as parameter packs. */
3693 bool type_pack_expansion_p = ppd->type_pack_expansion_p;
3694 ppd->type_pack_expansion_p = false;
3695 cp_walk_tree (&DECLTYPE_TYPE_EXPR (t), &find_parameter_packs_r,
3696 ppd, ppd->visited);
3697 ppd->type_pack_expansion_p = type_pack_expansion_p;
3698 *walk_subtrees = 0;
3699 return NULL_TREE;
3700 }
3701
3702 default:
3703 return NULL_TREE;
3704 }
3705
3706 return NULL_TREE;
3707 }
3708
3709 /* Determines if the expression or type T uses any parameter packs. */
3710 bool
3711 uses_parameter_packs (tree t)
3712 {
3713 tree parameter_packs = NULL_TREE;
3714 struct find_parameter_pack_data ppd;
3715 ppd.parameter_packs = &parameter_packs;
3716 ppd.visited = new hash_set<tree>;
3717 ppd.type_pack_expansion_p = false;
3718 cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3719 delete ppd.visited;
3720 return parameter_packs != NULL_TREE;
3721 }
3722
3723 /* Turn ARG, which may be an expression, type, or a TREE_LIST
3724 representation a base-class initializer into a parameter pack
3725 expansion. If all goes well, the resulting node will be an
3726 EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
3727 respectively. */
3728 tree
3729 make_pack_expansion (tree arg, tsubst_flags_t complain)
3730 {
3731 tree result;
3732 tree parameter_packs = NULL_TREE;
3733 bool for_types = false;
3734 struct find_parameter_pack_data ppd;
3735
3736 if (!arg || arg == error_mark_node)
3737 return arg;
3738
3739 if (TREE_CODE (arg) == TREE_LIST && TREE_PURPOSE (arg))
3740 {
3741 /* A TREE_LIST with a non-null TREE_PURPOSE is for a base
3742 class initializer. In this case, the TREE_PURPOSE will be a
3743 _TYPE node (representing the base class expansion we're
3744 initializing) and the TREE_VALUE will be a TREE_LIST
3745 containing the initialization arguments.
3746
3747 The resulting expansion looks somewhat different from most
3748 expansions. Rather than returning just one _EXPANSION, we
3749 return a TREE_LIST whose TREE_PURPOSE is a
3750 TYPE_PACK_EXPANSION containing the bases that will be
3751 initialized. The TREE_VALUE will be identical to the
3752 original TREE_VALUE, which is a list of arguments that will
3753 be passed to each base. We do not introduce any new pack
3754 expansion nodes into the TREE_VALUE (although it is possible
3755 that some already exist), because the TREE_PURPOSE and
3756 TREE_VALUE all need to be expanded together with the same
3757 _EXPANSION node. Note that the TYPE_PACK_EXPANSION in the
3758 resulting TREE_PURPOSE will mention the parameter packs in
3759 both the bases and the arguments to the bases. */
3760 tree purpose;
3761 tree value;
3762 tree parameter_packs = NULL_TREE;
3763
3764 /* Determine which parameter packs will be used by the base
3765 class expansion. */
3766 ppd.visited = new hash_set<tree>;
3767 ppd.parameter_packs = &parameter_packs;
3768 ppd.type_pack_expansion_p = true;
3769 gcc_assert (TYPE_P (TREE_PURPOSE (arg)));
3770 cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r,
3771 &ppd, ppd.visited);
3772
3773 if (parameter_packs == NULL_TREE)
3774 {
3775 if (complain & tf_error)
3776 error ("base initializer expansion %qT contains no parameter packs",
3777 arg);
3778 delete ppd.visited;
3779 return error_mark_node;
3780 }
3781
3782 if (TREE_VALUE (arg) != void_type_node)
3783 {
3784 /* Collect the sets of parameter packs used in each of the
3785 initialization arguments. */
3786 for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
3787 {
3788 /* Determine which parameter packs will be expanded in this
3789 argument. */
3790 cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r,
3791 &ppd, ppd.visited);
3792 }
3793 }
3794
3795 delete ppd.visited;
3796
3797 /* Create the pack expansion type for the base type. */
3798 purpose = cxx_make_type (TYPE_PACK_EXPANSION);
3799 SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
3800 PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
3801 PACK_EXPANSION_LOCAL_P (purpose) = at_function_scope_p ();
3802
3803 /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3804 they will rarely be compared to anything. */
3805 SET_TYPE_STRUCTURAL_EQUALITY (purpose);
3806
3807 return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
3808 }
3809
3810 if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
3811 for_types = true;
3812
3813 /* Build the PACK_EXPANSION_* node. */
3814 result = for_types
3815 ? cxx_make_type (TYPE_PACK_EXPANSION)
3816 : make_node (EXPR_PACK_EXPANSION);
3817 SET_PACK_EXPANSION_PATTERN (result, arg);
3818 if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
3819 {
3820 /* Propagate type and const-expression information. */
3821 TREE_TYPE (result) = TREE_TYPE (arg);
3822 TREE_CONSTANT (result) = TREE_CONSTANT (arg);
3823 /* Mark this read now, since the expansion might be length 0. */
3824 mark_exp_read (arg);
3825 }
3826 else
3827 /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3828 they will rarely be compared to anything. */
3829 SET_TYPE_STRUCTURAL_EQUALITY (result);
3830
3831 /* Determine which parameter packs will be expanded. */
3832 ppd.parameter_packs = &parameter_packs;
3833 ppd.visited = new hash_set<tree>;
3834 ppd.type_pack_expansion_p = TYPE_P (arg);
3835 cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
3836 delete ppd.visited;
3837
3838 /* Make sure we found some parameter packs. */
3839 if (parameter_packs == NULL_TREE)
3840 {
3841 if (complain & tf_error)
3842 {
3843 if (TYPE_P (arg))
3844 error ("expansion pattern %qT contains no argument packs", arg);
3845 else
3846 error ("expansion pattern %qE contains no argument packs", arg);
3847 }
3848 return error_mark_node;
3849 }
3850 PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
3851
3852 PACK_EXPANSION_LOCAL_P (result) = at_function_scope_p ();
3853
3854 return result;
3855 }
3856
3857 /* Checks T for any "bare" parameter packs, which have not yet been
3858 expanded, and issues an error if any are found. This operation can
3859 only be done on full expressions or types (e.g., an expression
3860 statement, "if" condition, etc.), because we could have expressions like:
3861
3862 foo(f(g(h(args)))...)
3863
3864 where "args" is a parameter pack. check_for_bare_parameter_packs
3865 should not be called for the subexpressions args, h(args),
3866 g(h(args)), or f(g(h(args))), because we would produce erroneous
3867 error messages.
3868
3869 Returns TRUE and emits an error if there were bare parameter packs,
3870 returns FALSE otherwise. */
3871 bool
3872 check_for_bare_parameter_packs (tree t)
3873 {
3874 tree parameter_packs = NULL_TREE;
3875 struct find_parameter_pack_data ppd;
3876
3877 if (!processing_template_decl || !t || t == error_mark_node)
3878 return false;
3879
3880 /* A lambda might use a parameter pack from the containing context. */
3881 if (current_function_decl && LAMBDA_FUNCTION_P (current_function_decl))
3882 return false;
3883
3884 if (TREE_CODE (t) == TYPE_DECL)
3885 t = TREE_TYPE (t);
3886
3887 ppd.parameter_packs = &parameter_packs;
3888 ppd.visited = new hash_set<tree>;
3889 ppd.type_pack_expansion_p = false;
3890 cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3891 delete ppd.visited;
3892
3893 if (parameter_packs)
3894 {
3895 location_t loc = EXPR_LOC_OR_LOC (t, input_location);
3896 error_at (loc, "parameter packs not expanded with %<...%>:");
3897 while (parameter_packs)
3898 {
3899 tree pack = TREE_VALUE (parameter_packs);
3900 tree name = NULL_TREE;
3901
3902 if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
3903 || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
3904 name = TYPE_NAME (pack);
3905 else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
3906 name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
3907 else if (TREE_CODE (pack) == CALL_EXPR)
3908 name = DECL_NAME (CALL_EXPR_FN (pack));
3909 else
3910 name = DECL_NAME (pack);
3911
3912 if (name)
3913 inform (loc, " %qD", name);
3914 else
3915 inform (loc, " <anonymous>");
3916
3917 parameter_packs = TREE_CHAIN (parameter_packs);
3918 }
3919
3920 return true;
3921 }
3922
3923 return false;
3924 }
3925
3926 /* Expand any parameter packs that occur in the template arguments in
3927 ARGS. */
3928 tree
3929 expand_template_argument_pack (tree args)
3930 {
3931 if (args == error_mark_node)
3932 return error_mark_node;
3933
3934 tree result_args = NULL_TREE;
3935 int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
3936 int num_result_args = -1;
3937 int non_default_args_count = -1;
3938
3939 /* First, determine if we need to expand anything, and the number of
3940 slots we'll need. */
3941 for (in_arg = 0; in_arg < nargs; ++in_arg)
3942 {
3943 tree arg = TREE_VEC_ELT (args, in_arg);
3944 if (arg == NULL_TREE)
3945 return args;
3946 if (ARGUMENT_PACK_P (arg))
3947 {
3948 int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
3949 if (num_result_args < 0)
3950 num_result_args = in_arg + num_packed;
3951 else
3952 num_result_args += num_packed;
3953 }
3954 else
3955 {
3956 if (num_result_args >= 0)
3957 num_result_args++;
3958 }
3959 }
3960
3961 /* If no expansion is necessary, we're done. */
3962 if (num_result_args < 0)
3963 return args;
3964
3965 /* Expand arguments. */
3966 result_args = make_tree_vec (num_result_args);
3967 if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (args))
3968 non_default_args_count =
3969 GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
3970 for (in_arg = 0; in_arg < nargs; ++in_arg)
3971 {
3972 tree arg = TREE_VEC_ELT (args, in_arg);
3973 if (ARGUMENT_PACK_P (arg))
3974 {
3975 tree packed = ARGUMENT_PACK_ARGS (arg);
3976 int i, num_packed = TREE_VEC_LENGTH (packed);
3977 for (i = 0; i < num_packed; ++i, ++out_arg)
3978 TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
3979 if (non_default_args_count > 0)
3980 non_default_args_count += num_packed - 1;
3981 }
3982 else
3983 {
3984 TREE_VEC_ELT (result_args, out_arg) = arg;
3985 ++out_arg;
3986 }
3987 }
3988 if (non_default_args_count >= 0)
3989 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (result_args, non_default_args_count);
3990 return result_args;
3991 }
3992
3993 /* Checks if DECL shadows a template parameter.
3994
3995 [temp.local]: A template-parameter shall not be redeclared within its
3996 scope (including nested scopes).
3997
3998 Emits an error and returns TRUE if the DECL shadows a parameter,
3999 returns FALSE otherwise. */
4000
4001 bool
4002 check_template_shadow (tree decl)
4003 {
4004 tree olddecl;
4005
4006 /* If we're not in a template, we can't possibly shadow a template
4007 parameter. */
4008 if (!current_template_parms)
4009 return true;
4010
4011 /* Figure out what we're shadowing. */
4012 decl = OVL_FIRST (decl);
4013 olddecl = innermost_non_namespace_value (DECL_NAME (decl));
4014
4015 /* If there's no previous binding for this name, we're not shadowing
4016 anything, let alone a template parameter. */
4017 if (!olddecl)
4018 return true;
4019
4020 /* If we're not shadowing a template parameter, we're done. Note
4021 that OLDDECL might be an OVERLOAD (or perhaps even an
4022 ERROR_MARK), so we can't just blithely assume it to be a _DECL
4023 node. */
4024 if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
4025 return true;
4026
4027 /* We check for decl != olddecl to avoid bogus errors for using a
4028 name inside a class. We check TPFI to avoid duplicate errors for
4029 inline member templates. */
4030 if (decl == olddecl
4031 || (DECL_TEMPLATE_PARM_P (decl)
4032 && TEMPLATE_PARMS_FOR_INLINE (current_template_parms)))
4033 return true;
4034
4035 /* Don't complain about the injected class name, as we've already
4036 complained about the class itself. */
4037 if (DECL_SELF_REFERENCE_P (decl))
4038 return false;
4039
4040 if (DECL_TEMPLATE_PARM_P (decl))
4041 error ("declaration of template parameter %q+D shadows "
4042 "template parameter", decl);
4043 else
4044 error ("declaration of %q+#D shadows template parameter", decl);
4045 inform (DECL_SOURCE_LOCATION (olddecl),
4046 "template parameter %qD declared here", olddecl);
4047 return false;
4048 }
4049
4050 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
4051 ORIG_LEVEL, DECL, and TYPE. */
4052
4053 static tree
4054 build_template_parm_index (int index,
4055 int level,
4056 int orig_level,
4057 tree decl,
4058 tree type)
4059 {
4060 tree t = make_node (TEMPLATE_PARM_INDEX);
4061 TEMPLATE_PARM_IDX (t) = index;
4062 TEMPLATE_PARM_LEVEL (t) = level;
4063 TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
4064 TEMPLATE_PARM_DECL (t) = decl;
4065 TREE_TYPE (t) = type;
4066 TREE_CONSTANT (t) = TREE_CONSTANT (decl);
4067 TREE_READONLY (t) = TREE_READONLY (decl);
4068
4069 return t;
4070 }
4071
4072 /* Find the canonical type parameter for the given template type
4073 parameter. Returns the canonical type parameter, which may be TYPE
4074 if no such parameter existed. */
4075
4076 static tree
4077 canonical_type_parameter (tree type)
4078 {
4079 tree list;
4080 int idx = TEMPLATE_TYPE_IDX (type);
4081 if (!canonical_template_parms)
4082 vec_alloc (canonical_template_parms, idx + 1);
4083
4084 if (canonical_template_parms->length () <= (unsigned) idx)
4085 vec_safe_grow_cleared (canonical_template_parms, idx + 1);
4086
4087 list = (*canonical_template_parms)[idx];
4088 while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
4089 list = TREE_CHAIN (list);
4090
4091 if (list)
4092 return TREE_VALUE (list);
4093 else
4094 {
4095 (*canonical_template_parms)[idx]
4096 = tree_cons (NULL_TREE, type, (*canonical_template_parms)[idx]);
4097 return type;
4098 }
4099 }
4100
4101 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
4102 TEMPLATE_PARM_LEVEL has been decreased by LEVELS. If such a
4103 TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
4104 new one is created. */
4105
4106 static tree
4107 reduce_template_parm_level (tree index, tree type, int levels, tree args,
4108 tsubst_flags_t complain)
4109 {
4110 if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
4111 || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
4112 != TEMPLATE_PARM_LEVEL (index) - levels)
4113 || !same_type_p (type, TREE_TYPE (TEMPLATE_PARM_DESCENDANTS (index))))
4114 {
4115 tree orig_decl = TEMPLATE_PARM_DECL (index);
4116 tree decl, t;
4117
4118 decl = build_decl (DECL_SOURCE_LOCATION (orig_decl),
4119 TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
4120 TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
4121 TREE_READONLY (decl) = TREE_READONLY (orig_decl);
4122 DECL_ARTIFICIAL (decl) = 1;
4123 SET_DECL_TEMPLATE_PARM_P (decl);
4124
4125 t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
4126 TEMPLATE_PARM_LEVEL (index) - levels,
4127 TEMPLATE_PARM_ORIG_LEVEL (index),
4128 decl, type);
4129 TEMPLATE_PARM_DESCENDANTS (index) = t;
4130 TEMPLATE_PARM_PARAMETER_PACK (t)
4131 = TEMPLATE_PARM_PARAMETER_PACK (index);
4132
4133 /* Template template parameters need this. */
4134 if (TREE_CODE (decl) == TEMPLATE_DECL)
4135 {
4136 DECL_TEMPLATE_RESULT (decl)
4137 = build_decl (DECL_SOURCE_LOCATION (decl),
4138 TYPE_DECL, DECL_NAME (decl), type);
4139 DECL_ARTIFICIAL (DECL_TEMPLATE_RESULT (decl)) = true;
4140 DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
4141 (DECL_TEMPLATE_PARMS (orig_decl), args, complain);
4142 }
4143 }
4144
4145 return TEMPLATE_PARM_DESCENDANTS (index);
4146 }
4147
4148 /* Process information from new template parameter PARM and append it
4149 to the LIST being built. This new parameter is a non-type
4150 parameter iff IS_NON_TYPE is true. This new parameter is a
4151 parameter pack iff IS_PARAMETER_PACK is true. The location of PARM
4152 is in PARM_LOC. */
4153
4154 tree
4155 process_template_parm (tree list, location_t parm_loc, tree parm,
4156 bool is_non_type, bool is_parameter_pack)
4157 {
4158 tree decl = 0;
4159 int idx = 0;
4160
4161 gcc_assert (TREE_CODE (parm) == TREE_LIST);
4162 tree defval = TREE_PURPOSE (parm);
4163 tree constr = TREE_TYPE (parm);
4164
4165 if (list)
4166 {
4167 tree p = tree_last (list);
4168
4169 if (p && TREE_VALUE (p) != error_mark_node)
4170 {
4171 p = TREE_VALUE (p);
4172 if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
4173 idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
4174 else
4175 idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
4176 }
4177
4178 ++idx;
4179 }
4180
4181 if (is_non_type)
4182 {
4183 parm = TREE_VALUE (parm);
4184
4185 SET_DECL_TEMPLATE_PARM_P (parm);
4186
4187 if (TREE_TYPE (parm) != error_mark_node)
4188 {
4189 /* [temp.param]
4190
4191 The top-level cv-qualifiers on the template-parameter are
4192 ignored when determining its type. */
4193 TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
4194 if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
4195 TREE_TYPE (parm) = error_mark_node;
4196 else if (uses_parameter_packs (TREE_TYPE (parm))
4197 && !is_parameter_pack
4198 /* If we're in a nested template parameter list, the template
4199 template parameter could be a parameter pack. */
4200 && processing_template_parmlist == 1)
4201 {
4202 /* This template parameter is not a parameter pack, but it
4203 should be. Complain about "bare" parameter packs. */
4204 check_for_bare_parameter_packs (TREE_TYPE (parm));
4205
4206 /* Recover by calling this a parameter pack. */
4207 is_parameter_pack = true;
4208 }
4209 }
4210
4211 /* A template parameter is not modifiable. */
4212 TREE_CONSTANT (parm) = 1;
4213 TREE_READONLY (parm) = 1;
4214 decl = build_decl (parm_loc,
4215 CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
4216 TREE_CONSTANT (decl) = 1;
4217 TREE_READONLY (decl) = 1;
4218 DECL_INITIAL (parm) = DECL_INITIAL (decl)
4219 = build_template_parm_index (idx, processing_template_decl,
4220 processing_template_decl,
4221 decl, TREE_TYPE (parm));
4222
4223 TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
4224 = is_parameter_pack;
4225 }
4226 else
4227 {
4228 tree t;
4229 parm = TREE_VALUE (TREE_VALUE (parm));
4230
4231 if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
4232 {
4233 t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
4234 /* This is for distinguishing between real templates and template
4235 template parameters */
4236 TREE_TYPE (parm) = t;
4237 TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
4238 decl = parm;
4239 }
4240 else
4241 {
4242 t = cxx_make_type (TEMPLATE_TYPE_PARM);
4243 /* parm is either IDENTIFIER_NODE or NULL_TREE. */
4244 decl = build_decl (parm_loc,
4245 TYPE_DECL, parm, t);
4246 }
4247
4248 TYPE_NAME (t) = decl;
4249 TYPE_STUB_DECL (t) = decl;
4250 parm = decl;
4251 TEMPLATE_TYPE_PARM_INDEX (t)
4252 = build_template_parm_index (idx, processing_template_decl,
4253 processing_template_decl,
4254 decl, TREE_TYPE (parm));
4255 TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
4256 TYPE_CANONICAL (t) = canonical_type_parameter (t);
4257 }
4258 DECL_ARTIFICIAL (decl) = 1;
4259 SET_DECL_TEMPLATE_PARM_P (decl);
4260
4261 /* Build requirements for the type/template parameter.
4262 This must be done after SET_DECL_TEMPLATE_PARM_P or
4263 process_template_parm could fail. */
4264 tree reqs = finish_shorthand_constraint (parm, constr);
4265
4266 pushdecl (decl);
4267
4268 /* Build the parameter node linking the parameter declaration,
4269 its default argument (if any), and its constraints (if any). */
4270 parm = build_tree_list (defval, parm);
4271 TEMPLATE_PARM_CONSTRAINTS (parm) = reqs;
4272
4273 return chainon (list, parm);
4274 }
4275
4276 /* The end of a template parameter list has been reached. Process the
4277 tree list into a parameter vector, converting each parameter into a more
4278 useful form. Type parameters are saved as IDENTIFIER_NODEs, and others
4279 as PARM_DECLs. */
4280
4281 tree
4282 end_template_parm_list (tree parms)
4283 {
4284 int nparms;
4285 tree parm, next;
4286 tree saved_parmlist = make_tree_vec (list_length (parms));
4287
4288 /* Pop the dummy parameter level and add the real one. */
4289 current_template_parms = TREE_CHAIN (current_template_parms);
4290
4291 current_template_parms
4292 = tree_cons (size_int (processing_template_decl),
4293 saved_parmlist, current_template_parms);
4294
4295 for (parm = parms, nparms = 0; parm; parm = next, nparms++)
4296 {
4297 next = TREE_CHAIN (parm);
4298 TREE_VEC_ELT (saved_parmlist, nparms) = parm;
4299 TREE_CHAIN (parm) = NULL_TREE;
4300 }
4301
4302 --processing_template_parmlist;
4303
4304 return saved_parmlist;
4305 }
4306
4307 // Explicitly indicate the end of the template parameter list. We assume
4308 // that the current template parameters have been constructed and/or
4309 // managed explicitly, as when creating new template template parameters
4310 // from a shorthand constraint.
4311 void
4312 end_template_parm_list ()
4313 {
4314 --processing_template_parmlist;
4315 }
4316
4317 /* end_template_decl is called after a template declaration is seen. */
4318
4319 void
4320 end_template_decl (void)
4321 {
4322 reset_specialization ();
4323
4324 if (! processing_template_decl)
4325 return;
4326
4327 /* This matches the pushlevel in begin_template_parm_list. */
4328 finish_scope ();
4329
4330 --processing_template_decl;
4331 current_template_parms = TREE_CHAIN (current_template_parms);
4332 }
4333
4334 /* Takes a TREE_LIST representing a template parameter and convert it
4335 into an argument suitable to be passed to the type substitution
4336 functions. Note that If the TREE_LIST contains an error_mark
4337 node, the returned argument is error_mark_node. */
4338
4339 tree
4340 template_parm_to_arg (tree t)
4341 {
4342
4343 if (t == NULL_TREE
4344 || TREE_CODE (t) != TREE_LIST)
4345 return t;
4346
4347 if (error_operand_p (TREE_VALUE (t)))
4348 return error_mark_node;
4349
4350 t = TREE_VALUE (t);
4351
4352 if (TREE_CODE (t) == TYPE_DECL
4353 || TREE_CODE (t) == TEMPLATE_DECL)
4354 {
4355 t = TREE_TYPE (t);
4356
4357 if (TEMPLATE_TYPE_PARAMETER_PACK (t))
4358 {
4359 /* Turn this argument into a TYPE_ARGUMENT_PACK
4360 with a single element, which expands T. */
4361 tree vec = make_tree_vec (1);
4362 if (CHECKING_P)
4363 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (vec, TREE_VEC_LENGTH (vec));
4364
4365 TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
4366
4367 t = cxx_make_type (TYPE_ARGUMENT_PACK);
4368 SET_ARGUMENT_PACK_ARGS (t, vec);
4369 }
4370 }
4371 else
4372 {
4373 t = DECL_INITIAL (t);
4374
4375 if (TEMPLATE_PARM_PARAMETER_PACK (t))
4376 {
4377 /* Turn this argument into a NONTYPE_ARGUMENT_PACK
4378 with a single element, which expands T. */
4379 tree vec = make_tree_vec (1);
4380 if (CHECKING_P)
4381 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (vec, TREE_VEC_LENGTH (vec));
4382
4383 t = convert_from_reference (t);
4384 TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
4385
4386 t = make_node (NONTYPE_ARGUMENT_PACK);
4387 SET_ARGUMENT_PACK_ARGS (t, vec);
4388 }
4389 else
4390 t = convert_from_reference (t);
4391 }
4392 return t;
4393 }
4394
4395 /* Given a single level of template parameters (a TREE_VEC), return it
4396 as a set of template arguments. */
4397
4398 static tree
4399 template_parms_level_to_args (tree parms)
4400 {
4401 tree a = copy_node (parms);
4402 TREE_TYPE (a) = NULL_TREE;
4403 for (int i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
4404 TREE_VEC_ELT (a, i) = template_parm_to_arg (TREE_VEC_ELT (a, i));
4405
4406 if (CHECKING_P)
4407 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (a, TREE_VEC_LENGTH (a));
4408
4409 return a;
4410 }
4411
4412 /* Given a set of template parameters, return them as a set of template
4413 arguments. The template parameters are represented as a TREE_VEC, in
4414 the form documented in cp-tree.h for template arguments. */
4415
4416 static tree
4417 template_parms_to_args (tree parms)
4418 {
4419 tree header;
4420 tree args = NULL_TREE;
4421 int length = TMPL_PARMS_DEPTH (parms);
4422 int l = length;
4423
4424 /* If there is only one level of template parameters, we do not
4425 create a TREE_VEC of TREE_VECs. Instead, we return a single
4426 TREE_VEC containing the arguments. */
4427 if (length > 1)
4428 args = make_tree_vec (length);
4429
4430 for (header = parms; header; header = TREE_CHAIN (header))
4431 {
4432 tree a = template_parms_level_to_args (TREE_VALUE (header));
4433
4434 if (length > 1)
4435 TREE_VEC_ELT (args, --l) = a;
4436 else
4437 args = a;
4438 }
4439
4440 return args;
4441 }
4442
4443 /* Within the declaration of a template, return the currently active
4444 template parameters as an argument TREE_VEC. */
4445
4446 static tree
4447 current_template_args (void)
4448 {
4449 return template_parms_to_args (current_template_parms);
4450 }
4451
4452 /* Update the declared TYPE by doing any lookups which were thought to be
4453 dependent, but are not now that we know the SCOPE of the declarator. */
4454
4455 tree
4456 maybe_update_decl_type (tree orig_type, tree scope)
4457 {
4458 tree type = orig_type;
4459
4460 if (type == NULL_TREE)
4461 return type;
4462
4463 if (TREE_CODE (orig_type) == TYPE_DECL)
4464 type = TREE_TYPE (type);
4465
4466 if (scope && TYPE_P (scope) && dependent_type_p (scope)
4467 && dependent_type_p (type)
4468 /* Don't bother building up the args in this case. */
4469 && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
4470 {
4471 /* tsubst in the args corresponding to the template parameters,
4472 including auto if present. Most things will be unchanged, but
4473 make_typename_type and tsubst_qualified_id will resolve
4474 TYPENAME_TYPEs and SCOPE_REFs that were previously dependent. */
4475 tree args = current_template_args ();
4476 tree auto_node = type_uses_auto (type);
4477 tree pushed;
4478 if (auto_node)
4479 {
4480 tree auto_vec = make_tree_vec (1);
4481 TREE_VEC_ELT (auto_vec, 0) = auto_node;
4482 args = add_to_template_args (args, auto_vec);
4483 }
4484 pushed = push_scope (scope);
4485 type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
4486 if (pushed)
4487 pop_scope (scope);
4488 }
4489
4490 if (type == error_mark_node)
4491 return orig_type;
4492
4493 if (TREE_CODE (orig_type) == TYPE_DECL)
4494 {
4495 if (same_type_p (type, TREE_TYPE (orig_type)))
4496 type = orig_type;
4497 else
4498 type = TYPE_NAME (type);
4499 }
4500 return type;
4501 }
4502
4503 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
4504 template PARMS and constraints, CONSTR. If MEMBER_TEMPLATE_P is true,
4505 the new template is a member template. */
4506
4507 tree
4508 build_template_decl (tree decl, tree parms, bool member_template_p)
4509 {
4510 tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
4511 DECL_TEMPLATE_PARMS (tmpl) = parms;
4512 DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
4513 DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
4514 DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
4515
4516 return tmpl;
4517 }
4518
4519 struct template_parm_data
4520 {
4521 /* The level of the template parameters we are currently
4522 processing. */
4523 int level;
4524
4525 /* The index of the specialization argument we are currently
4526 processing. */
4527 int current_arg;
4528
4529 /* An array whose size is the number of template parameters. The
4530 elements are nonzero if the parameter has been used in any one
4531 of the arguments processed so far. */
4532 int* parms;
4533
4534 /* An array whose size is the number of template arguments. The
4535 elements are nonzero if the argument makes use of template
4536 parameters of this level. */
4537 int* arg_uses_template_parms;
4538 };
4539
4540 /* Subroutine of push_template_decl used to see if each template
4541 parameter in a partial specialization is used in the explicit
4542 argument list. If T is of the LEVEL given in DATA (which is
4543 treated as a template_parm_data*), then DATA->PARMS is marked
4544 appropriately. */
4545
4546 static int
4547 mark_template_parm (tree t, void* data)
4548 {
4549 int level;
4550 int idx;
4551 struct template_parm_data* tpd = (struct template_parm_data*) data;
4552
4553 template_parm_level_and_index (t, &level, &idx);
4554
4555 if (level == tpd->level)
4556 {
4557 tpd->parms[idx] = 1;
4558 tpd->arg_uses_template_parms[tpd->current_arg] = 1;
4559 }
4560
4561 /* In C++17 the type of a non-type argument is a deduced context. */
4562 if (cxx_dialect >= cxx17
4563 && TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4564 for_each_template_parm (TREE_TYPE (t),
4565 &mark_template_parm,
4566 data,
4567 NULL,
4568 /*include_nondeduced_p=*/false);
4569
4570 /* Return zero so that for_each_template_parm will continue the
4571 traversal of the tree; we want to mark *every* template parm. */
4572 return 0;
4573 }
4574
4575 /* Process the partial specialization DECL. */
4576
4577 static tree
4578 process_partial_specialization (tree decl)
4579 {
4580 tree type = TREE_TYPE (decl);
4581 tree tinfo = get_template_info (decl);
4582 tree maintmpl = TI_TEMPLATE (tinfo);
4583 tree specargs = TI_ARGS (tinfo);
4584 tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
4585 tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
4586 tree inner_parms;
4587 tree inst;
4588 int nargs = TREE_VEC_LENGTH (inner_args);
4589 int ntparms;
4590 int i;
4591 bool did_error_intro = false;
4592 struct template_parm_data tpd;
4593 struct template_parm_data tpd2;
4594
4595 gcc_assert (current_template_parms);
4596
4597 /* A concept cannot be specialized. */
4598 if (flag_concepts && variable_concept_p (maintmpl))
4599 {
4600 error ("specialization of variable concept %q#D", maintmpl);
4601 return error_mark_node;
4602 }
4603
4604 inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
4605 ntparms = TREE_VEC_LENGTH (inner_parms);
4606
4607 /* We check that each of the template parameters given in the
4608 partial specialization is used in the argument list to the
4609 specialization. For example:
4610
4611 template <class T> struct S;
4612 template <class T> struct S<T*>;
4613
4614 The second declaration is OK because `T*' uses the template
4615 parameter T, whereas
4616
4617 template <class T> struct S<int>;
4618
4619 is no good. Even trickier is:
4620
4621 template <class T>
4622 struct S1
4623 {
4624 template <class U>
4625 struct S2;
4626 template <class U>
4627 struct S2<T>;
4628 };
4629
4630 The S2<T> declaration is actually invalid; it is a
4631 full-specialization. Of course,
4632
4633 template <class U>
4634 struct S2<T (*)(U)>;
4635
4636 or some such would have been OK. */
4637 tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
4638 tpd.parms = XALLOCAVEC (int, ntparms);
4639 memset (tpd.parms, 0, sizeof (int) * ntparms);
4640
4641 tpd.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4642 memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
4643 for (i = 0; i < nargs; ++i)
4644 {
4645 tpd.current_arg = i;
4646 for_each_template_parm (TREE_VEC_ELT (inner_args, i),
4647 &mark_template_parm,
4648 &tpd,
4649 NULL,
4650 /*include_nondeduced_p=*/false);
4651 }
4652 for (i = 0; i < ntparms; ++i)
4653 if (tpd.parms[i] == 0)
4654 {
4655 /* One of the template parms was not used in a deduced context in the
4656 specialization. */
4657 if (!did_error_intro)
4658 {
4659 error ("template parameters not deducible in "
4660 "partial specialization:");
4661 did_error_intro = true;
4662 }
4663
4664 inform (input_location, " %qD",
4665 TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
4666 }
4667
4668 if (did_error_intro)
4669 return error_mark_node;
4670
4671 /* [temp.class.spec]
4672
4673 The argument list of the specialization shall not be identical to
4674 the implicit argument list of the primary template. */
4675 tree main_args
4676 = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (maintmpl)));
4677 if (comp_template_args (inner_args, INNERMOST_TEMPLATE_ARGS (main_args))
4678 && (!flag_concepts
4679 || !strictly_subsumes (current_template_constraints (),
4680 get_constraints (maintmpl))))
4681 {
4682 if (!flag_concepts)
4683 error ("partial specialization %q+D does not specialize "
4684 "any template arguments", decl);
4685 else
4686 error ("partial specialization %q+D does not specialize any "
4687 "template arguments and is not more constrained than", decl);
4688 inform (DECL_SOURCE_LOCATION (maintmpl), "primary template here");
4689 }
4690
4691 /* A partial specialization that replaces multiple parameters of the
4692 primary template with a pack expansion is less specialized for those
4693 parameters. */
4694 if (nargs < DECL_NTPARMS (maintmpl))
4695 {
4696 error ("partial specialization is not more specialized than the "
4697 "primary template because it replaces multiple parameters "
4698 "with a pack expansion");
4699 inform (DECL_SOURCE_LOCATION (maintmpl), "primary template here");
4700 /* Avoid crash in process_partial_specialization. */
4701 return decl;
4702 }
4703
4704 /* If we aren't in a dependent class, we can actually try deduction. */
4705 else if (tpd.level == 1
4706 /* FIXME we should be able to handle a partial specialization of a
4707 partial instantiation, but currently we can't (c++/41727). */
4708 && TMPL_ARGS_DEPTH (specargs) == 1
4709 && !get_partial_spec_bindings (maintmpl, maintmpl, specargs))
4710 {
4711 if (permerror (input_location, "partial specialization %qD is not "
4712 "more specialized than", decl))
4713 inform (DECL_SOURCE_LOCATION (maintmpl), "primary template %qD",
4714 maintmpl);
4715 }
4716
4717 /* [temp.class.spec]
4718
4719 A partially specialized non-type argument expression shall not
4720 involve template parameters of the partial specialization except
4721 when the argument expression is a simple identifier.
4722
4723 The type of a template parameter corresponding to a specialized
4724 non-type argument shall not be dependent on a parameter of the
4725 specialization.
4726
4727 Also, we verify that pack expansions only occur at the
4728 end of the argument list. */
4729 gcc_assert (nargs == DECL_NTPARMS (maintmpl));
4730 tpd2.parms = 0;
4731 for (i = 0; i < nargs; ++i)
4732 {
4733 tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
4734 tree arg = TREE_VEC_ELT (inner_args, i);
4735 tree packed_args = NULL_TREE;
4736 int j, len = 1;
4737
4738 if (ARGUMENT_PACK_P (arg))
4739 {
4740 /* Extract the arguments from the argument pack. We'll be
4741 iterating over these in the following loop. */
4742 packed_args = ARGUMENT_PACK_ARGS (arg);
4743 len = TREE_VEC_LENGTH (packed_args);
4744 }
4745
4746 for (j = 0; j < len; j++)
4747 {
4748 if (packed_args)
4749 /* Get the Jth argument in the parameter pack. */
4750 arg = TREE_VEC_ELT (packed_args, j);
4751
4752 if (PACK_EXPANSION_P (arg))
4753 {
4754 /* Pack expansions must come at the end of the
4755 argument list. */
4756 if ((packed_args && j < len - 1)
4757 || (!packed_args && i < nargs - 1))
4758 {
4759 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4760 error ("parameter pack argument %qE must be at the "
4761 "end of the template argument list", arg);
4762 else
4763 error ("parameter pack argument %qT must be at the "
4764 "end of the template argument list", arg);
4765 }
4766 }
4767
4768 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4769 /* We only care about the pattern. */
4770 arg = PACK_EXPANSION_PATTERN (arg);
4771
4772 if (/* These first two lines are the `non-type' bit. */
4773 !TYPE_P (arg)
4774 && TREE_CODE (arg) != TEMPLATE_DECL
4775 /* This next two lines are the `argument expression is not just a
4776 simple identifier' condition and also the `specialized
4777 non-type argument' bit. */
4778 && TREE_CODE (arg) != TEMPLATE_PARM_INDEX
4779 && !(REFERENCE_REF_P (arg)
4780 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_PARM_INDEX))
4781 {
4782 if ((!packed_args && tpd.arg_uses_template_parms[i])
4783 || (packed_args && uses_template_parms (arg)))
4784 error ("template argument %qE involves template parameter(s)",
4785 arg);
4786 else
4787 {
4788 /* Look at the corresponding template parameter,
4789 marking which template parameters its type depends
4790 upon. */
4791 tree type = TREE_TYPE (parm);
4792
4793 if (!tpd2.parms)
4794 {
4795 /* We haven't yet initialized TPD2. Do so now. */
4796 tpd2.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4797 /* The number of parameters here is the number in the
4798 main template, which, as checked in the assertion
4799 above, is NARGS. */
4800 tpd2.parms = XALLOCAVEC (int, nargs);
4801 tpd2.level =
4802 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
4803 }
4804
4805 /* Mark the template parameters. But this time, we're
4806 looking for the template parameters of the main
4807 template, not in the specialization. */
4808 tpd2.current_arg = i;
4809 tpd2.arg_uses_template_parms[i] = 0;
4810 memset (tpd2.parms, 0, sizeof (int) * nargs);
4811 for_each_template_parm (type,
4812 &mark_template_parm,
4813 &tpd2,
4814 NULL,
4815 /*include_nondeduced_p=*/false);
4816
4817 if (tpd2.arg_uses_template_parms [i])
4818 {
4819 /* The type depended on some template parameters.
4820 If they are fully specialized in the
4821 specialization, that's OK. */
4822 int j;
4823 int count = 0;
4824 for (j = 0; j < nargs; ++j)
4825 if (tpd2.parms[j] != 0
4826 && tpd.arg_uses_template_parms [j])
4827 ++count;
4828 if (count != 0)
4829 error_n (input_location, count,
4830 "type %qT of template argument %qE depends "
4831 "on a template parameter",
4832 "type %qT of template argument %qE depends "
4833 "on template parameters",
4834 type,
4835 arg);
4836 }
4837 }
4838 }
4839 }
4840 }
4841
4842 /* We should only get here once. */
4843 if (TREE_CODE (decl) == TYPE_DECL)
4844 gcc_assert (!COMPLETE_TYPE_P (type));
4845
4846 // Build the template decl.
4847 tree tmpl = build_template_decl (decl, current_template_parms,
4848 DECL_MEMBER_TEMPLATE_P (maintmpl));
4849 TREE_TYPE (tmpl) = type;
4850 DECL_TEMPLATE_RESULT (tmpl) = decl;
4851 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4852 DECL_TEMPLATE_INFO (tmpl) = build_template_info (maintmpl, specargs);
4853 DECL_PRIMARY_TEMPLATE (tmpl) = maintmpl;
4854
4855 /* Give template template parms a DECL_CONTEXT of the template
4856 for which they are a parameter. */
4857 for (i = 0; i < ntparms; ++i)
4858 {
4859 tree parm = TREE_VALUE (TREE_VEC_ELT (inner_parms, i));
4860 if (TREE_CODE (parm) == TEMPLATE_DECL)
4861 DECL_CONTEXT (parm) = tmpl;
4862 }
4863
4864 if (VAR_P (decl))
4865 /* We didn't register this in check_explicit_specialization so we could
4866 wait until the constraints were set. */
4867 decl = register_specialization (decl, maintmpl, specargs, false, 0);
4868 else
4869 associate_classtype_constraints (type);
4870
4871 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
4872 = tree_cons (specargs, tmpl,
4873 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
4874 TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
4875
4876 for (inst = DECL_TEMPLATE_INSTANTIATIONS (maintmpl); inst;
4877 inst = TREE_CHAIN (inst))
4878 {
4879 tree instance = TREE_VALUE (inst);
4880 if (TYPE_P (instance)
4881 ? (COMPLETE_TYPE_P (instance)
4882 && CLASSTYPE_IMPLICIT_INSTANTIATION (instance))
4883 : DECL_TEMPLATE_INSTANTIATION (instance))
4884 {
4885 tree spec = most_specialized_partial_spec (instance, tf_none);
4886 tree inst_decl = (DECL_P (instance)
4887 ? instance : TYPE_NAME (instance));
4888 if (!spec)
4889 /* OK */;
4890 else if (spec == error_mark_node)
4891 permerror (input_location,
4892 "declaration of %qD ambiguates earlier template "
4893 "instantiation for %qD", decl, inst_decl);
4894 else if (TREE_VALUE (spec) == tmpl)
4895 permerror (input_location,
4896 "partial specialization of %qD after instantiation "
4897 "of %qD", decl, inst_decl);
4898 }
4899 }
4900
4901 return decl;
4902 }
4903
4904 /* PARM is a template parameter of some form; return the corresponding
4905 TEMPLATE_PARM_INDEX. */
4906
4907 static tree
4908 get_template_parm_index (tree parm)
4909 {
4910 if (TREE_CODE (parm) == PARM_DECL
4911 || TREE_CODE (parm) == CONST_DECL)
4912 parm = DECL_INITIAL (parm);
4913 else if (TREE_CODE (parm) == TYPE_DECL
4914 || TREE_CODE (parm) == TEMPLATE_DECL)
4915 parm = TREE_TYPE (parm);
4916 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
4917 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM
4918 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
4919 parm = TEMPLATE_TYPE_PARM_INDEX (parm);
4920 gcc_assert (TREE_CODE (parm) == TEMPLATE_PARM_INDEX);
4921 return parm;
4922 }
4923
4924 /* Subroutine of fixed_parameter_pack_p below. Look for any template
4925 parameter packs used by the template parameter PARM. */
4926
4927 static void
4928 fixed_parameter_pack_p_1 (tree parm, struct find_parameter_pack_data *ppd)
4929 {
4930 /* A type parm can't refer to another parm. */
4931 if (TREE_CODE (parm) == TYPE_DECL)
4932 return;
4933 else if (TREE_CODE (parm) == PARM_DECL)
4934 {
4935 cp_walk_tree (&TREE_TYPE (parm), &find_parameter_packs_r,
4936 ppd, ppd->visited);
4937 return;
4938 }
4939
4940 gcc_assert (TREE_CODE (parm) == TEMPLATE_DECL);
4941
4942 tree vec = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (parm));
4943 for (int i = 0; i < TREE_VEC_LENGTH (vec); ++i)
4944 fixed_parameter_pack_p_1 (TREE_VALUE (TREE_VEC_ELT (vec, i)), ppd);
4945 }
4946
4947 /* PARM is a template parameter pack. Return any parameter packs used in
4948 its type or the type of any of its template parameters. If there are
4949 any such packs, it will be instantiated into a fixed template parameter
4950 list by partial instantiation rather than be fully deduced. */
4951
4952 tree
4953 fixed_parameter_pack_p (tree parm)
4954 {
4955 /* This can only be true in a member template. */
4956 if (TEMPLATE_PARM_ORIG_LEVEL (get_template_parm_index (parm)) < 2)
4957 return NULL_TREE;
4958 /* This can only be true for a parameter pack. */
4959 if (!template_parameter_pack_p (parm))
4960 return NULL_TREE;
4961 /* A type parm can't refer to another parm. */
4962 if (TREE_CODE (parm) == TYPE_DECL)
4963 return NULL_TREE;
4964
4965 tree parameter_packs = NULL_TREE;
4966 struct find_parameter_pack_data ppd;
4967 ppd.parameter_packs = &parameter_packs;
4968 ppd.visited = new hash_set<tree>;
4969 ppd.type_pack_expansion_p = false;
4970
4971 fixed_parameter_pack_p_1 (parm, &ppd);
4972
4973 delete ppd.visited;
4974 return parameter_packs;
4975 }
4976
4977 /* Check that a template declaration's use of default arguments and
4978 parameter packs is not invalid. Here, PARMS are the template
4979 parameters. IS_PRIMARY is true if DECL is the thing declared by
4980 a primary template. IS_PARTIAL is true if DECL is a partial
4981 specialization.
4982
4983 IS_FRIEND_DECL is nonzero if DECL is either a non-defining friend
4984 function template declaration or a friend class template
4985 declaration. In the function case, 1 indicates a declaration, 2
4986 indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
4987 emitted for extraneous default arguments.
4988
4989 Returns TRUE if there were no errors found, FALSE otherwise. */
4990
4991 bool
4992 check_default_tmpl_args (tree decl, tree parms, bool is_primary,
4993 bool is_partial, int is_friend_decl)
4994 {
4995 const char *msg;
4996 int last_level_to_check;
4997 tree parm_level;
4998 bool no_errors = true;
4999
5000 /* [temp.param]
5001
5002 A default template-argument shall not be specified in a
5003 function template declaration or a function template definition, nor
5004 in the template-parameter-list of the definition of a member of a
5005 class template. */
5006
5007 if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL
5008 || (TREE_CODE (decl) == FUNCTION_DECL && DECL_LOCAL_FUNCTION_P (decl)))
5009 /* You can't have a function template declaration in a local
5010 scope, nor you can you define a member of a class template in a
5011 local scope. */
5012 return true;
5013
5014 if ((TREE_CODE (decl) == TYPE_DECL
5015 && TREE_TYPE (decl)
5016 && LAMBDA_TYPE_P (TREE_TYPE (decl)))
5017 || (TREE_CODE (decl) == FUNCTION_DECL
5018 && LAMBDA_FUNCTION_P (decl)))
5019 /* A lambda doesn't have an explicit declaration; don't complain
5020 about the parms of the enclosing class. */
5021 return true;
5022
5023 if (current_class_type
5024 && !TYPE_BEING_DEFINED (current_class_type)
5025 && DECL_LANG_SPECIFIC (decl)
5026 && DECL_DECLARES_FUNCTION_P (decl)
5027 /* If this is either a friend defined in the scope of the class
5028 or a member function. */
5029 && (DECL_FUNCTION_MEMBER_P (decl)
5030 ? same_type_p (DECL_CONTEXT (decl), current_class_type)
5031 : DECL_FRIEND_CONTEXT (decl)
5032 ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
5033 : false)
5034 /* And, if it was a member function, it really was defined in
5035 the scope of the class. */
5036 && (!DECL_FUNCTION_MEMBER_P (decl)
5037 || DECL_INITIALIZED_IN_CLASS_P (decl)))
5038 /* We already checked these parameters when the template was
5039 declared, so there's no need to do it again now. This function
5040 was defined in class scope, but we're processing its body now
5041 that the class is complete. */
5042 return true;
5043
5044 /* Core issue 226 (C++0x only): the following only applies to class
5045 templates. */
5046 if (is_primary
5047 && ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL))
5048 {
5049 /* [temp.param]
5050
5051 If a template-parameter has a default template-argument, all
5052 subsequent template-parameters shall have a default
5053 template-argument supplied. */
5054 for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
5055 {
5056 tree inner_parms = TREE_VALUE (parm_level);
5057 int ntparms = TREE_VEC_LENGTH (inner_parms);
5058 int seen_def_arg_p = 0;
5059 int i;
5060
5061 for (i = 0; i < ntparms; ++i)
5062 {
5063 tree parm = TREE_VEC_ELT (inner_parms, i);
5064
5065 if (parm == error_mark_node)
5066 continue;
5067
5068 if (TREE_PURPOSE (parm))
5069 seen_def_arg_p = 1;
5070 else if (seen_def_arg_p
5071 && !template_parameter_pack_p (TREE_VALUE (parm)))
5072 {
5073 error ("no default argument for %qD", TREE_VALUE (parm));
5074 /* For better subsequent error-recovery, we indicate that
5075 there should have been a default argument. */
5076 TREE_PURPOSE (parm) = error_mark_node;
5077 no_errors = false;
5078 }
5079 else if (!is_partial
5080 && !is_friend_decl
5081 /* Don't complain about an enclosing partial
5082 specialization. */
5083 && parm_level == parms
5084 && TREE_CODE (decl) == TYPE_DECL
5085 && i < ntparms - 1
5086 && template_parameter_pack_p (TREE_VALUE (parm))
5087 /* A fixed parameter pack will be partially
5088 instantiated into a fixed length list. */
5089 && !fixed_parameter_pack_p (TREE_VALUE (parm)))
5090 {
5091 /* A primary class template can only have one
5092 parameter pack, at the end of the template
5093 parameter list. */
5094
5095 error ("parameter pack %q+D must be at the end of the"
5096 " template parameter list", TREE_VALUE (parm));
5097
5098 TREE_VALUE (TREE_VEC_ELT (inner_parms, i))
5099 = error_mark_node;
5100 no_errors = false;
5101 }
5102 }
5103 }
5104 }
5105
5106 if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
5107 || is_partial
5108 || !is_primary
5109 || is_friend_decl)
5110 /* For an ordinary class template, default template arguments are
5111 allowed at the innermost level, e.g.:
5112 template <class T = int>
5113 struct S {};
5114 but, in a partial specialization, they're not allowed even
5115 there, as we have in [temp.class.spec]:
5116
5117 The template parameter list of a specialization shall not
5118 contain default template argument values.
5119
5120 So, for a partial specialization, or for a function template
5121 (in C++98/C++03), we look at all of them. */
5122 ;
5123 else
5124 /* But, for a primary class template that is not a partial
5125 specialization we look at all template parameters except the
5126 innermost ones. */
5127 parms = TREE_CHAIN (parms);
5128
5129 /* Figure out what error message to issue. */
5130 if (is_friend_decl == 2)
5131 msg = G_("default template arguments may not be used in function template "
5132 "friend re-declaration");
5133 else if (is_friend_decl)
5134 msg = G_("default template arguments may not be used in template "
5135 "friend declarations");
5136 else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
5137 msg = G_("default template arguments may not be used in function templates "
5138 "without -std=c++11 or -std=gnu++11");
5139 else if (is_partial)
5140 msg = G_("default template arguments may not be used in "
5141 "partial specializations");
5142 else if (current_class_type && CLASSTYPE_IS_TEMPLATE (current_class_type))
5143 msg = G_("default argument for template parameter for class enclosing %qD");
5144 else
5145 /* Per [temp.param]/9, "A default template-argument shall not be
5146 specified in the template-parameter-lists of the definition of
5147 a member of a class template that appears outside of the member's
5148 class.", thus if we aren't handling a member of a class template
5149 there is no need to examine the parameters. */
5150 return true;
5151
5152 if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
5153 /* If we're inside a class definition, there's no need to
5154 examine the parameters to the class itself. On the one
5155 hand, they will be checked when the class is defined, and,
5156 on the other, default arguments are valid in things like:
5157 template <class T = double>
5158 struct S { template <class U> void f(U); };
5159 Here the default argument for `S' has no bearing on the
5160 declaration of `f'. */
5161 last_level_to_check = template_class_depth (current_class_type) + 1;
5162 else
5163 /* Check everything. */
5164 last_level_to_check = 0;
5165
5166 for (parm_level = parms;
5167 parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
5168 parm_level = TREE_CHAIN (parm_level))
5169 {
5170 tree inner_parms = TREE_VALUE (parm_level);
5171 int i;
5172 int ntparms;
5173
5174 ntparms = TREE_VEC_LENGTH (inner_parms);
5175 for (i = 0; i < ntparms; ++i)
5176 {
5177 if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
5178 continue;
5179
5180 if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
5181 {
5182 if (msg)
5183 {
5184 no_errors = false;
5185 if (is_friend_decl == 2)
5186 return no_errors;
5187
5188 error (msg, decl);
5189 msg = 0;
5190 }
5191
5192 /* Clear out the default argument so that we are not
5193 confused later. */
5194 TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
5195 }
5196 }
5197
5198 /* At this point, if we're still interested in issuing messages,
5199 they must apply to classes surrounding the object declared. */
5200 if (msg)
5201 msg = G_("default argument for template parameter for class "
5202 "enclosing %qD");
5203 }
5204
5205 return no_errors;
5206 }
5207
5208 /* Worker for push_template_decl_real, called via
5209 for_each_template_parm. DATA is really an int, indicating the
5210 level of the parameters we are interested in. If T is a template
5211 parameter of that level, return nonzero. */
5212
5213 static int
5214 template_parm_this_level_p (tree t, void* data)
5215 {
5216 int this_level = *(int *)data;
5217 int level;
5218
5219 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
5220 level = TEMPLATE_PARM_LEVEL (t);
5221 else
5222 level = TEMPLATE_TYPE_LEVEL (t);
5223 return level == this_level;
5224 }
5225
5226 /* Worker for uses_outer_template_parms, called via for_each_template_parm.
5227 DATA is really an int, indicating the innermost outer level of parameters.
5228 If T is a template parameter of that level or further out, return
5229 nonzero. */
5230
5231 static int
5232 template_parm_outer_level (tree t, void *data)
5233 {
5234 int this_level = *(int *)data;
5235 int level;
5236
5237 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
5238 level = TEMPLATE_PARM_LEVEL (t);
5239 else
5240 level = TEMPLATE_TYPE_LEVEL (t);
5241 return level <= this_level;
5242 }
5243
5244 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
5245 parameters given by current_template_args, or reuses a
5246 previously existing one, if appropriate. Returns the DECL, or an
5247 equivalent one, if it is replaced via a call to duplicate_decls.
5248
5249 If IS_FRIEND is true, DECL is a friend declaration. */
5250
5251 tree
5252 push_template_decl_real (tree decl, bool is_friend)
5253 {
5254 tree tmpl;
5255 tree args;
5256 tree info;
5257 tree ctx;
5258 bool is_primary;
5259 bool is_partial;
5260 int new_template_p = 0;
5261 /* True if the template is a member template, in the sense of
5262 [temp.mem]. */
5263 bool member_template_p = false;
5264
5265 if (decl == error_mark_node || !current_template_parms)
5266 return error_mark_node;
5267
5268 /* See if this is a partial specialization. */
5269 is_partial = ((DECL_IMPLICIT_TYPEDEF_P (decl)
5270 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
5271 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
5272 || (VAR_P (decl)
5273 && DECL_LANG_SPECIFIC (decl)
5274 && DECL_TEMPLATE_SPECIALIZATION (decl)
5275 && TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (decl))));
5276
5277 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
5278 is_friend = true;
5279
5280 if (is_friend)
5281 /* For a friend, we want the context of the friend, not
5282 the type of which it is a friend. */
5283 ctx = CP_DECL_CONTEXT (decl);
5284 else if (CP_DECL_CONTEXT (decl)
5285 && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
5286 /* In the case of a virtual function, we want the class in which
5287 it is defined. */
5288 ctx = CP_DECL_CONTEXT (decl);
5289 else
5290 /* Otherwise, if we're currently defining some class, the DECL
5291 is assumed to be a member of the class. */
5292 ctx = current_scope ();
5293
5294 if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
5295 ctx = NULL_TREE;
5296
5297 if (!DECL_CONTEXT (decl))
5298 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
5299
5300 /* See if this is a primary template. */
5301 if (is_friend && ctx
5302 && uses_template_parms_level (ctx, processing_template_decl))
5303 /* A friend template that specifies a class context, i.e.
5304 template <typename T> friend void A<T>::f();
5305 is not primary. */
5306 is_primary = false;
5307 else if (TREE_CODE (decl) == TYPE_DECL
5308 && LAMBDA_TYPE_P (TREE_TYPE (decl)))
5309 is_primary = false;
5310 else
5311 is_primary = template_parm_scope_p ();
5312
5313 if (is_primary)
5314 {
5315 warning (OPT_Wtemplates, "template %qD declared", decl);
5316
5317 if (DECL_CLASS_SCOPE_P (decl))
5318 member_template_p = true;
5319 if (TREE_CODE (decl) == TYPE_DECL
5320 && anon_aggrname_p (DECL_NAME (decl)))
5321 {
5322 error ("template class without a name");
5323 return error_mark_node;
5324 }
5325 else if (TREE_CODE (decl) == FUNCTION_DECL)
5326 {
5327 if (member_template_p)
5328 {
5329 if (DECL_OVERRIDE_P (decl) || DECL_FINAL_P (decl))
5330 error ("member template %qD may not have virt-specifiers", decl);
5331 }
5332 if (DECL_DESTRUCTOR_P (decl))
5333 {
5334 /* [temp.mem]
5335
5336 A destructor shall not be a member template. */
5337 error ("destructor %qD declared as member template", decl);
5338 return error_mark_node;
5339 }
5340 if (IDENTIFIER_NEWDEL_OP_P (DECL_NAME (decl))
5341 && (!prototype_p (TREE_TYPE (decl))
5342 || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
5343 || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
5344 || (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
5345 == void_list_node)))
5346 {
5347 /* [basic.stc.dynamic.allocation]
5348
5349 An allocation function can be a function
5350 template. ... Template allocation functions shall
5351 have two or more parameters. */
5352 error ("invalid template declaration of %qD", decl);
5353 return error_mark_node;
5354 }
5355 }
5356 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
5357 && CLASS_TYPE_P (TREE_TYPE (decl)))
5358 {
5359 /* Class template, set TEMPLATE_TYPE_PARM_FOR_CLASS. */
5360 tree parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
5361 for (int i = 0; i < TREE_VEC_LENGTH (parms); ++i)
5362 {
5363 tree t = TREE_VALUE (TREE_VEC_ELT (parms, i));
5364 if (TREE_CODE (t) == TYPE_DECL)
5365 t = TREE_TYPE (t);
5366 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
5367 TEMPLATE_TYPE_PARM_FOR_CLASS (t) = true;
5368 }
5369 }
5370 else if (TREE_CODE (decl) == TYPE_DECL
5371 && TYPE_DECL_ALIAS_P (decl))
5372 /* alias-declaration */
5373 gcc_assert (!DECL_ARTIFICIAL (decl));
5374 else if (VAR_P (decl))
5375 /* C++14 variable template. */;
5376 else
5377 {
5378 error ("template declaration of %q#D", decl);
5379 return error_mark_node;
5380 }
5381 }
5382
5383 /* Check to see that the rules regarding the use of default
5384 arguments are not being violated. We check args for a friend
5385 functions when we know whether it's a definition, introducing
5386 declaration or re-declaration. */
5387 if (!is_friend || TREE_CODE (decl) != FUNCTION_DECL)
5388 check_default_tmpl_args (decl, current_template_parms,
5389 is_primary, is_partial, is_friend);
5390
5391 /* Ensure that there are no parameter packs in the type of this
5392 declaration that have not been expanded. */
5393 if (TREE_CODE (decl) == FUNCTION_DECL)
5394 {
5395 /* Check each of the arguments individually to see if there are
5396 any bare parameter packs. */
5397 tree type = TREE_TYPE (decl);
5398 tree arg = DECL_ARGUMENTS (decl);
5399 tree argtype = TYPE_ARG_TYPES (type);
5400
5401 while (arg && argtype)
5402 {
5403 if (!DECL_PACK_P (arg)
5404 && check_for_bare_parameter_packs (TREE_TYPE (arg)))
5405 {
5406 /* This is a PARM_DECL that contains unexpanded parameter
5407 packs. We have already complained about this in the
5408 check_for_bare_parameter_packs call, so just replace
5409 these types with ERROR_MARK_NODE. */
5410 TREE_TYPE (arg) = error_mark_node;
5411 TREE_VALUE (argtype) = error_mark_node;
5412 }
5413
5414 arg = DECL_CHAIN (arg);
5415 argtype = TREE_CHAIN (argtype);
5416 }
5417
5418 /* Check for bare parameter packs in the return type and the
5419 exception specifiers. */
5420 if (check_for_bare_parameter_packs (TREE_TYPE (type)))
5421 /* Errors were already issued, set return type to int
5422 as the frontend doesn't expect error_mark_node as
5423 the return type. */
5424 TREE_TYPE (type) = integer_type_node;
5425 if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
5426 TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
5427 }
5428 else if (check_for_bare_parameter_packs ((TREE_CODE (decl) == TYPE_DECL
5429 && TYPE_DECL_ALIAS_P (decl))
5430 ? DECL_ORIGINAL_TYPE (decl)
5431 : TREE_TYPE (decl)))
5432 {
5433 TREE_TYPE (decl) = error_mark_node;
5434 return error_mark_node;
5435 }
5436
5437 if (is_partial)
5438 return process_partial_specialization (decl);
5439
5440 args = current_template_args ();
5441
5442 if (!ctx
5443 || TREE_CODE (ctx) == FUNCTION_DECL
5444 || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
5445 || (TREE_CODE (decl) == TYPE_DECL
5446 && LAMBDA_TYPE_P (TREE_TYPE (decl)))
5447 || (is_friend && !DECL_TEMPLATE_INFO (decl)))
5448 {
5449 if (DECL_LANG_SPECIFIC (decl)
5450 && DECL_TEMPLATE_INFO (decl)
5451 && DECL_TI_TEMPLATE (decl))
5452 tmpl = DECL_TI_TEMPLATE (decl);
5453 /* If DECL is a TYPE_DECL for a class-template, then there won't
5454 be DECL_LANG_SPECIFIC. The information equivalent to
5455 DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead. */
5456 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
5457 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
5458 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
5459 {
5460 /* Since a template declaration already existed for this
5461 class-type, we must be redeclaring it here. Make sure
5462 that the redeclaration is valid. */
5463 redeclare_class_template (TREE_TYPE (decl),
5464 current_template_parms,
5465 current_template_constraints ());
5466 /* We don't need to create a new TEMPLATE_DECL; just use the
5467 one we already had. */
5468 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
5469 }
5470 else
5471 {
5472 tmpl = build_template_decl (decl, current_template_parms,
5473 member_template_p);
5474 new_template_p = 1;
5475
5476 if (DECL_LANG_SPECIFIC (decl)
5477 && DECL_TEMPLATE_SPECIALIZATION (decl))
5478 {
5479 /* A specialization of a member template of a template
5480 class. */
5481 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
5482 DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
5483 DECL_TEMPLATE_INFO (decl) = NULL_TREE;
5484 }
5485 }
5486 }
5487 else
5488 {
5489 tree a, t, current, parms;
5490 int i;
5491 tree tinfo = get_template_info (decl);
5492
5493 if (!tinfo)
5494 {
5495 error ("template definition of non-template %q#D", decl);
5496 return error_mark_node;
5497 }
5498
5499 tmpl = TI_TEMPLATE (tinfo);
5500
5501 if (DECL_FUNCTION_TEMPLATE_P (tmpl)
5502 && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
5503 && DECL_TEMPLATE_SPECIALIZATION (decl)
5504 && DECL_MEMBER_TEMPLATE_P (tmpl))
5505 {
5506 tree new_tmpl;
5507
5508 /* The declaration is a specialization of a member
5509 template, declared outside the class. Therefore, the
5510 innermost template arguments will be NULL, so we
5511 replace them with the arguments determined by the
5512 earlier call to check_explicit_specialization. */
5513 args = DECL_TI_ARGS (decl);
5514
5515 new_tmpl
5516 = build_template_decl (decl, current_template_parms,
5517 member_template_p);
5518 DECL_TEMPLATE_RESULT (new_tmpl) = decl;
5519 TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
5520 DECL_TI_TEMPLATE (decl) = new_tmpl;
5521 SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
5522 DECL_TEMPLATE_INFO (new_tmpl)
5523 = build_template_info (tmpl, args);
5524
5525 register_specialization (new_tmpl,
5526 most_general_template (tmpl),
5527 args,
5528 is_friend, 0);
5529 return decl;
5530 }
5531
5532 /* Make sure the template headers we got make sense. */
5533
5534 parms = DECL_TEMPLATE_PARMS (tmpl);
5535 i = TMPL_PARMS_DEPTH (parms);
5536 if (TMPL_ARGS_DEPTH (args) != i)
5537 {
5538 error ("expected %d levels of template parms for %q#D, got %d",
5539 i, decl, TMPL_ARGS_DEPTH (args));
5540 DECL_INTERFACE_KNOWN (decl) = 1;
5541 return error_mark_node;
5542 }
5543 else
5544 for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
5545 {
5546 a = TMPL_ARGS_LEVEL (args, i);
5547 t = INNERMOST_TEMPLATE_PARMS (parms);
5548
5549 if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
5550 {
5551 if (current == decl)
5552 error ("got %d template parameters for %q#D",
5553 TREE_VEC_LENGTH (a), decl);
5554 else
5555 error ("got %d template parameters for %q#T",
5556 TREE_VEC_LENGTH (a), current);
5557 error (" but %d required", TREE_VEC_LENGTH (t));
5558 /* Avoid crash in import_export_decl. */
5559 DECL_INTERFACE_KNOWN (decl) = 1;
5560 return error_mark_node;
5561 }
5562
5563 if (current == decl)
5564 current = ctx;
5565 else if (current == NULL_TREE)
5566 /* Can happen in erroneous input. */
5567 break;
5568 else
5569 current = get_containing_scope (current);
5570 }
5571
5572 /* Check that the parms are used in the appropriate qualifying scopes
5573 in the declarator. */
5574 if (!comp_template_args
5575 (TI_ARGS (tinfo),
5576 TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
5577 {
5578 error ("template arguments to %qD do not match original "
5579 "template %qD", decl, DECL_TEMPLATE_RESULT (tmpl));
5580 if (!uses_template_parms (TI_ARGS (tinfo)))
5581 inform (input_location, "use %<template<>%> for"
5582 " an explicit specialization");
5583 /* Avoid crash in import_export_decl. */
5584 DECL_INTERFACE_KNOWN (decl) = 1;
5585 return error_mark_node;
5586 }
5587 }
5588
5589 DECL_TEMPLATE_RESULT (tmpl) = decl;
5590 TREE_TYPE (tmpl) = TREE_TYPE (decl);
5591
5592 /* Push template declarations for global functions and types. Note
5593 that we do not try to push a global template friend declared in a
5594 template class; such a thing may well depend on the template
5595 parameters of the class. */
5596 if (new_template_p && !ctx
5597 && !(is_friend && template_class_depth (current_class_type) > 0))
5598 {
5599 tmpl = pushdecl_namespace_level (tmpl, is_friend);
5600 if (tmpl == error_mark_node)
5601 return error_mark_node;
5602
5603 /* Hide template friend classes that haven't been declared yet. */
5604 if (is_friend && TREE_CODE (decl) == TYPE_DECL)
5605 {
5606 DECL_ANTICIPATED (tmpl) = 1;
5607 DECL_FRIEND_P (tmpl) = 1;
5608 }
5609 }
5610
5611 if (is_primary)
5612 {
5613 tree parms = DECL_TEMPLATE_PARMS (tmpl);
5614
5615 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
5616
5617 /* Give template template parms a DECL_CONTEXT of the template
5618 for which they are a parameter. */
5619 parms = INNERMOST_TEMPLATE_PARMS (parms);
5620 for (int i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
5621 {
5622 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5623 if (TREE_CODE (parm) == TEMPLATE_DECL)
5624 DECL_CONTEXT (parm) = tmpl;
5625 }
5626
5627 if (TREE_CODE (decl) == TYPE_DECL
5628 && TYPE_DECL_ALIAS_P (decl)
5629 && complex_alias_template_p (tmpl))
5630 TEMPLATE_DECL_COMPLEX_ALIAS_P (tmpl) = true;
5631 }
5632
5633 /* The DECL_TI_ARGS of DECL contains full set of arguments referring
5634 back to its most general template. If TMPL is a specialization,
5635 ARGS may only have the innermost set of arguments. Add the missing
5636 argument levels if necessary. */
5637 if (DECL_TEMPLATE_INFO (tmpl))
5638 args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
5639
5640 info = build_template_info (tmpl, args);
5641
5642 if (DECL_IMPLICIT_TYPEDEF_P (decl))
5643 SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
5644 else
5645 {
5646 if (is_primary)
5647 retrofit_lang_decl (decl);
5648 if (DECL_LANG_SPECIFIC (decl))
5649 DECL_TEMPLATE_INFO (decl) = info;
5650 }
5651
5652 if (flag_implicit_templates
5653 && !is_friend
5654 && TREE_PUBLIC (decl)
5655 && VAR_OR_FUNCTION_DECL_P (decl))
5656 /* Set DECL_COMDAT on template instantiations; if we force
5657 them to be emitted by explicit instantiation or -frepo,
5658 mark_needed will tell cgraph to do the right thing. */
5659 DECL_COMDAT (decl) = true;
5660
5661 return DECL_TEMPLATE_RESULT (tmpl);
5662 }
5663
5664 tree
5665 push_template_decl (tree decl)
5666 {
5667 return push_template_decl_real (decl, false);
5668 }
5669
5670 /* FN is an inheriting constructor that inherits from the constructor
5671 template INHERITED; turn FN into a constructor template with a matching
5672 template header. */
5673
5674 tree
5675 add_inherited_template_parms (tree fn, tree inherited)
5676 {
5677 tree inner_parms
5678 = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (inherited));
5679 inner_parms = copy_node (inner_parms);
5680 tree parms
5681 = tree_cons (size_int (processing_template_decl + 1),
5682 inner_parms, current_template_parms);
5683 tree tmpl = build_template_decl (fn, parms, /*member*/true);
5684 tree args = template_parms_to_args (parms);
5685 DECL_TEMPLATE_INFO (fn) = build_template_info (tmpl, args);
5686 TREE_TYPE (tmpl) = TREE_TYPE (fn);
5687 DECL_TEMPLATE_RESULT (tmpl) = fn;
5688 DECL_ARTIFICIAL (tmpl) = true;
5689 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
5690 return tmpl;
5691 }
5692
5693 /* Called when a class template TYPE is redeclared with the indicated
5694 template PARMS, e.g.:
5695
5696 template <class T> struct S;
5697 template <class T> struct S {}; */
5698
5699 bool
5700 redeclare_class_template (tree type, tree parms, tree cons)
5701 {
5702 tree tmpl;
5703 tree tmpl_parms;
5704 int i;
5705
5706 if (!TYPE_TEMPLATE_INFO (type))
5707 {
5708 error ("%qT is not a template type", type);
5709 return false;
5710 }
5711
5712 tmpl = TYPE_TI_TEMPLATE (type);
5713 if (!PRIMARY_TEMPLATE_P (tmpl))
5714 /* The type is nested in some template class. Nothing to worry
5715 about here; there are no new template parameters for the nested
5716 type. */
5717 return true;
5718
5719 if (!parms)
5720 {
5721 error ("template specifiers not specified in declaration of %qD",
5722 tmpl);
5723 return false;
5724 }
5725
5726 parms = INNERMOST_TEMPLATE_PARMS (parms);
5727 tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
5728
5729 if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
5730 {
5731 error_n (input_location, TREE_VEC_LENGTH (parms),
5732 "redeclared with %d template parameter",
5733 "redeclared with %d template parameters",
5734 TREE_VEC_LENGTH (parms));
5735 inform_n (DECL_SOURCE_LOCATION (tmpl), TREE_VEC_LENGTH (tmpl_parms),
5736 "previous declaration %qD used %d template parameter",
5737 "previous declaration %qD used %d template parameters",
5738 tmpl, TREE_VEC_LENGTH (tmpl_parms));
5739 return false;
5740 }
5741
5742 for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
5743 {
5744 tree tmpl_parm;
5745 tree parm;
5746 tree tmpl_default;
5747 tree parm_default;
5748
5749 if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
5750 || TREE_VEC_ELT (parms, i) == error_mark_node)
5751 continue;
5752
5753 tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
5754 if (error_operand_p (tmpl_parm))
5755 return false;
5756
5757 parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5758 tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
5759 parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
5760
5761 /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
5762 TEMPLATE_DECL. */
5763 if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
5764 || (TREE_CODE (tmpl_parm) != TYPE_DECL
5765 && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
5766 || (TREE_CODE (tmpl_parm) != PARM_DECL
5767 && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
5768 != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
5769 || (TREE_CODE (tmpl_parm) == PARM_DECL
5770 && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
5771 != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))))
5772 {
5773 error ("template parameter %q+#D", tmpl_parm);
5774 error ("redeclared here as %q#D", parm);
5775 return false;
5776 }
5777
5778 if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
5779 {
5780 /* We have in [temp.param]:
5781
5782 A template-parameter may not be given default arguments
5783 by two different declarations in the same scope. */
5784 error_at (input_location, "redefinition of default argument for %q#D", parm);
5785 inform (DECL_SOURCE_LOCATION (tmpl_parm),
5786 "original definition appeared here");
5787 return false;
5788 }
5789
5790 if (parm_default != NULL_TREE)
5791 /* Update the previous template parameters (which are the ones
5792 that will really count) with the new default value. */
5793 TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
5794 else if (tmpl_default != NULL_TREE)
5795 /* Update the new parameters, too; they'll be used as the
5796 parameters for any members. */
5797 TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
5798
5799 /* Give each template template parm in this redeclaration a
5800 DECL_CONTEXT of the template for which they are a parameter. */
5801 if (TREE_CODE (parm) == TEMPLATE_DECL)
5802 {
5803 gcc_assert (DECL_CONTEXT (parm) == NULL_TREE);
5804 DECL_CONTEXT (parm) = tmpl;
5805 }
5806
5807 if (TREE_CODE (parm) == TYPE_DECL)
5808 TEMPLATE_TYPE_PARM_FOR_CLASS (TREE_TYPE (parm)) = true;
5809 }
5810
5811 // Cannot redeclare a class template with a different set of constraints.
5812 if (!equivalent_constraints (get_constraints (tmpl), cons))
5813 {
5814 error_at (input_location, "redeclaration %q#D with different "
5815 "constraints", tmpl);
5816 inform (DECL_SOURCE_LOCATION (tmpl),
5817 "original declaration appeared here");
5818 }
5819
5820 return true;
5821 }
5822
5823 /* The actual substitution part of instantiate_non_dependent_expr_sfinae,
5824 to be used when the caller has already checked
5825 (processing_template_decl
5826 && !instantiation_dependent_expression_p (expr)
5827 && potential_constant_expression (expr))
5828 and cleared processing_template_decl. */
5829
5830 tree
5831 instantiate_non_dependent_expr_internal (tree expr, tsubst_flags_t complain)
5832 {
5833 return tsubst_copy_and_build (expr,
5834 /*args=*/NULL_TREE,
5835 complain,
5836 /*in_decl=*/NULL_TREE,
5837 /*function_p=*/false,
5838 /*integral_constant_expression_p=*/true);
5839 }
5840
5841 /* Simplify EXPR if it is a non-dependent expression. Returns the
5842 (possibly simplified) expression. */
5843
5844 tree
5845 instantiate_non_dependent_expr_sfinae (tree expr, tsubst_flags_t complain)
5846 {
5847 if (expr == NULL_TREE)
5848 return NULL_TREE;
5849
5850 /* If we're in a template, but EXPR isn't value dependent, simplify
5851 it. We're supposed to treat:
5852
5853 template <typename T> void f(T[1 + 1]);
5854 template <typename T> void f(T[2]);
5855
5856 as two declarations of the same function, for example. */
5857 if (processing_template_decl
5858 && is_nondependent_constant_expression (expr))
5859 {
5860 processing_template_decl_sentinel s;
5861 expr = instantiate_non_dependent_expr_internal (expr, complain);
5862 }
5863 return expr;
5864 }
5865
5866 tree
5867 instantiate_non_dependent_expr (tree expr)
5868 {
5869 return instantiate_non_dependent_expr_sfinae (expr, tf_error);
5870 }
5871
5872 /* Like instantiate_non_dependent_expr, but return NULL_TREE rather than
5873 an uninstantiated expression. */
5874
5875 tree
5876 instantiate_non_dependent_or_null (tree expr)
5877 {
5878 if (expr == NULL_TREE)
5879 return NULL_TREE;
5880 if (processing_template_decl)
5881 {
5882 if (!is_nondependent_constant_expression (expr))
5883 expr = NULL_TREE;
5884 else
5885 {
5886 processing_template_decl_sentinel s;
5887 expr = instantiate_non_dependent_expr_internal (expr, tf_error);
5888 }
5889 }
5890 return expr;
5891 }
5892
5893 /* True iff T is a specialization of a variable template. */
5894
5895 bool
5896 variable_template_specialization_p (tree t)
5897 {
5898 if (!VAR_P (t) || !DECL_LANG_SPECIFIC (t) || !DECL_TEMPLATE_INFO (t))
5899 return false;
5900 tree tmpl = DECL_TI_TEMPLATE (t);
5901 return variable_template_p (tmpl);
5902 }
5903
5904 /* Return TRUE iff T is a type alias, a TEMPLATE_DECL for an alias
5905 template declaration, or a TYPE_DECL for an alias declaration. */
5906
5907 bool
5908 alias_type_or_template_p (tree t)
5909 {
5910 if (t == NULL_TREE)
5911 return false;
5912 return ((TREE_CODE (t) == TYPE_DECL && TYPE_DECL_ALIAS_P (t))
5913 || (TYPE_P (t)
5914 && TYPE_NAME (t)
5915 && TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
5916 || DECL_ALIAS_TEMPLATE_P (t));
5917 }
5918
5919 /* Return TRUE iff T is a specialization of an alias template. */
5920
5921 bool
5922 alias_template_specialization_p (const_tree t)
5923 {
5924 /* It's an alias template specialization if it's an alias and its
5925 TYPE_NAME is a specialization of a primary template. */
5926 if (TYPE_ALIAS_P (t))
5927 if (tree tinfo = TYPE_ALIAS_TEMPLATE_INFO (t))
5928 return PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo));
5929
5930 return false;
5931 }
5932
5933 /* An alias template is complex from a SFINAE perspective if a template-id
5934 using that alias can be ill-formed when the expansion is not, as with
5935 the void_t template. We determine this by checking whether the
5936 expansion for the alias template uses all its template parameters. */
5937
5938 struct uses_all_template_parms_data
5939 {
5940 int level;
5941 bool *seen;
5942 };
5943
5944 static int
5945 uses_all_template_parms_r (tree t, void *data_)
5946 {
5947 struct uses_all_template_parms_data &data
5948 = *(struct uses_all_template_parms_data*)data_;
5949 tree idx = get_template_parm_index (t);
5950
5951 if (TEMPLATE_PARM_LEVEL (idx) == data.level)
5952 data.seen[TEMPLATE_PARM_IDX (idx)] = true;
5953 return 0;
5954 }
5955
5956 static bool
5957 complex_alias_template_p (const_tree tmpl)
5958 {
5959 struct uses_all_template_parms_data data;
5960 tree pat = DECL_ORIGINAL_TYPE (DECL_TEMPLATE_RESULT (tmpl));
5961 tree parms = DECL_TEMPLATE_PARMS (tmpl);
5962 data.level = TMPL_PARMS_DEPTH (parms);
5963 int len = TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS (parms));
5964 data.seen = XALLOCAVEC (bool, len);
5965 for (int i = 0; i < len; ++i)
5966 data.seen[i] = false;
5967
5968 for_each_template_parm (pat, uses_all_template_parms_r, &data, NULL, true);
5969 for (int i = 0; i < len; ++i)
5970 if (!data.seen[i])
5971 return true;
5972 return false;
5973 }
5974
5975 /* Return TRUE iff T is a specialization of a complex alias template with
5976 dependent template-arguments. */
5977
5978 bool
5979 dependent_alias_template_spec_p (const_tree t)
5980 {
5981 if (!alias_template_specialization_p (t))
5982 return false;
5983
5984 tree tinfo = TYPE_ALIAS_TEMPLATE_INFO (t);
5985 if (!TEMPLATE_DECL_COMPLEX_ALIAS_P (TI_TEMPLATE (tinfo)))
5986 return false;
5987
5988 tree args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo));
5989 if (!any_dependent_template_arguments_p (args))
5990 return false;
5991
5992 return true;
5993 }
5994
5995 /* Return the number of innermost template parameters in TMPL. */
5996
5997 static int
5998 num_innermost_template_parms (tree tmpl)
5999 {
6000 tree parms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (tmpl));
6001 return TREE_VEC_LENGTH (parms);
6002 }
6003
6004 /* Return either TMPL or another template that it is equivalent to under DR
6005 1286: An alias that just changes the name of a template is equivalent to
6006 the other template. */
6007
6008 static tree
6009 get_underlying_template (tree tmpl)
6010 {
6011 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
6012 while (DECL_ALIAS_TEMPLATE_P (tmpl))
6013 {
6014 /* Determine if the alias is equivalent to an underlying template. */
6015 tree orig_type = DECL_ORIGINAL_TYPE (DECL_TEMPLATE_RESULT (tmpl));
6016 tree tinfo = TYPE_TEMPLATE_INFO_MAYBE_ALIAS (orig_type);
6017 if (!tinfo)
6018 break;
6019
6020 tree underlying = TI_TEMPLATE (tinfo);
6021 if (!PRIMARY_TEMPLATE_P (underlying)
6022 || (num_innermost_template_parms (tmpl)
6023 != num_innermost_template_parms (underlying)))
6024 break;
6025
6026 tree alias_args = INNERMOST_TEMPLATE_ARGS
6027 (template_parms_to_args (DECL_TEMPLATE_PARMS (tmpl)));
6028 if (!comp_template_args (TI_ARGS (tinfo), alias_args))
6029 break;
6030
6031 /* Alias is equivalent. Strip it and repeat. */
6032 tmpl = underlying;
6033 }
6034
6035 return tmpl;
6036 }
6037
6038 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
6039 must be a reference-to-function or a pointer-to-function type, as specified
6040 in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
6041 and check that the resulting function has external linkage. */
6042
6043 static tree
6044 convert_nontype_argument_function (tree type, tree expr,
6045 tsubst_flags_t complain)
6046 {
6047 tree fns = expr;
6048 tree fn, fn_no_ptr;
6049 linkage_kind linkage;
6050
6051 fn = instantiate_type (type, fns, tf_none);
6052 if (fn == error_mark_node)
6053 return error_mark_node;
6054
6055 if (value_dependent_expression_p (fn))
6056 goto accept;
6057
6058 fn_no_ptr = strip_fnptr_conv (fn);
6059 if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
6060 fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
6061 if (BASELINK_P (fn_no_ptr))
6062 fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
6063
6064 /* [temp.arg.nontype]/1
6065
6066 A template-argument for a non-type, non-template template-parameter
6067 shall be one of:
6068 [...]
6069 -- the address of an object or function with external [C++11: or
6070 internal] linkage. */
6071
6072 if (TREE_CODE (fn_no_ptr) != FUNCTION_DECL)
6073 {
6074 if (complain & tf_error)
6075 {
6076 error ("%qE is not a valid template argument for type %qT",
6077 expr, type);
6078 if (TYPE_PTR_P (type))
6079 inform (input_location, "it must be the address of a function "
6080 "with external linkage");
6081 else
6082 inform (input_location, "it must be the name of a function with "
6083 "external linkage");
6084 }
6085 return NULL_TREE;
6086 }
6087
6088 linkage = decl_linkage (fn_no_ptr);
6089 if (cxx_dialect >= cxx11 ? linkage == lk_none : linkage != lk_external)
6090 {
6091 if (complain & tf_error)
6092 {
6093 if (cxx_dialect >= cxx11)
6094 error ("%qE is not a valid template argument for type %qT "
6095 "because %qD has no linkage",
6096 expr, type, fn_no_ptr);
6097 else
6098 error ("%qE is not a valid template argument for type %qT "
6099 "because %qD does not have external linkage",
6100 expr, type, fn_no_ptr);
6101 }
6102 return NULL_TREE;
6103 }
6104
6105 accept:
6106 if (TREE_CODE (type) == REFERENCE_TYPE)
6107 fn = build_address (fn);
6108 if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (fn)))
6109 fn = build_nop (type, fn);
6110
6111 return fn;
6112 }
6113
6114 /* Subroutine of convert_nontype_argument.
6115 Check if EXPR of type TYPE is a valid pointer-to-member constant.
6116 Emit an error otherwise. */
6117
6118 static bool
6119 check_valid_ptrmem_cst_expr (tree type, tree expr,
6120 tsubst_flags_t complain)
6121 {
6122 location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
6123 tree orig_expr = expr;
6124 STRIP_NOPS (expr);
6125 if (null_ptr_cst_p (expr))
6126 return true;
6127 if (TREE_CODE (expr) == PTRMEM_CST
6128 && same_type_p (TYPE_PTRMEM_CLASS_TYPE (type),
6129 PTRMEM_CST_CLASS (expr)))
6130 return true;
6131 if (cxx_dialect >= cxx11 && null_member_pointer_value_p (expr))
6132 return true;
6133 if (processing_template_decl
6134 && TREE_CODE (expr) == ADDR_EXPR
6135 && TREE_CODE (TREE_OPERAND (expr, 0)) == OFFSET_REF)
6136 return true;
6137 if (complain & tf_error)
6138 {
6139 error_at (loc, "%qE is not a valid template argument for type %qT",
6140 orig_expr, type);
6141 if (TREE_CODE (expr) != PTRMEM_CST)
6142 inform (loc, "it must be a pointer-to-member of the form %<&X::Y%>");
6143 else
6144 inform (loc, "because it is a member of %qT", PTRMEM_CST_CLASS (expr));
6145 }
6146 return false;
6147 }
6148
6149 /* Returns TRUE iff the address of OP is value-dependent.
6150
6151 14.6.2.4 [temp.dep.temp]:
6152 A non-integral non-type template-argument is dependent if its type is
6153 dependent or it has either of the following forms
6154 qualified-id
6155 & qualified-id
6156 and contains a nested-name-specifier which specifies a class-name that
6157 names a dependent type.
6158
6159 We generalize this to just say that the address of a member of a
6160 dependent class is value-dependent; the above doesn't cover the
6161 address of a static data member named with an unqualified-id. */
6162
6163 static bool
6164 has_value_dependent_address (tree op)
6165 {
6166 /* We could use get_inner_reference here, but there's no need;
6167 this is only relevant for template non-type arguments, which
6168 can only be expressed as &id-expression. */
6169 if (DECL_P (op))
6170 {
6171 tree ctx = CP_DECL_CONTEXT (op);
6172 if (TYPE_P (ctx) && dependent_type_p (ctx))
6173 return true;
6174 }
6175
6176 return false;
6177 }
6178
6179 /* The next set of functions are used for providing helpful explanatory
6180 diagnostics for failed overload resolution. Their messages should be
6181 indented by two spaces for consistency with the messages in
6182 call.c */
6183
6184 static int
6185 unify_success (bool /*explain_p*/)
6186 {
6187 return 0;
6188 }
6189
6190 /* Other failure functions should call this one, to provide a single function
6191 for setting a breakpoint on. */
6192
6193 static int
6194 unify_invalid (bool /*explain_p*/)
6195 {
6196 return 1;
6197 }
6198
6199 static int
6200 unify_parameter_deduction_failure (bool explain_p, tree parm)
6201 {
6202 if (explain_p)
6203 inform (input_location,
6204 " couldn't deduce template parameter %qD", parm);
6205 return unify_invalid (explain_p);
6206 }
6207
6208 static int
6209 unify_cv_qual_mismatch (bool explain_p, tree parm, tree arg)
6210 {
6211 if (explain_p)
6212 inform (input_location,
6213 " types %qT and %qT have incompatible cv-qualifiers",
6214 parm, arg);
6215 return unify_invalid (explain_p);
6216 }
6217
6218 static int
6219 unify_type_mismatch (bool explain_p, tree parm, tree arg)
6220 {
6221 if (explain_p)
6222 inform (input_location, " mismatched types %qT and %qT", parm, arg);
6223 return unify_invalid (explain_p);
6224 }
6225
6226 static int
6227 unify_parameter_pack_mismatch (bool explain_p, tree parm, tree arg)
6228 {
6229 if (explain_p)
6230 inform (input_location,
6231 " template parameter %qD is not a parameter pack, but "
6232 "argument %qD is",
6233 parm, arg);
6234 return unify_invalid (explain_p);
6235 }
6236
6237 static int
6238 unify_ptrmem_cst_mismatch (bool explain_p, tree parm, tree arg)
6239 {
6240 if (explain_p)
6241 inform (input_location,
6242 " template argument %qE does not match "
6243 "pointer-to-member constant %qE",
6244 arg, parm);
6245 return unify_invalid (explain_p);
6246 }
6247
6248 static int
6249 unify_expression_unequal (bool explain_p, tree parm, tree arg)
6250 {
6251 if (explain_p)
6252 inform (input_location, " %qE is not equivalent to %qE", parm, arg);
6253 return unify_invalid (explain_p);
6254 }
6255
6256 static int
6257 unify_parameter_pack_inconsistent (bool explain_p, tree old_arg, tree new_arg)
6258 {
6259 if (explain_p)
6260 inform (input_location,
6261 " inconsistent parameter pack deduction with %qT and %qT",
6262 old_arg, new_arg);
6263 return unify_invalid (explain_p);
6264 }
6265
6266 static int
6267 unify_inconsistency (bool explain_p, tree parm, tree first, tree second)
6268 {
6269 if (explain_p)
6270 {
6271 if (TYPE_P (parm))
6272 inform (input_location,
6273 " deduced conflicting types for parameter %qT (%qT and %qT)",
6274 parm, first, second);
6275 else
6276 inform (input_location,
6277 " deduced conflicting values for non-type parameter "
6278 "%qE (%qE and %qE)", parm, first, second);
6279 }
6280 return unify_invalid (explain_p);
6281 }
6282
6283 static int
6284 unify_vla_arg (bool explain_p, tree arg)
6285 {
6286 if (explain_p)
6287 inform (input_location,
6288 " variable-sized array type %qT is not "
6289 "a valid template argument",
6290 arg);
6291 return unify_invalid (explain_p);
6292 }
6293
6294 static int
6295 unify_method_type_error (bool explain_p, tree arg)
6296 {
6297 if (explain_p)
6298 inform (input_location,
6299 " member function type %qT is not a valid template argument",
6300 arg);
6301 return unify_invalid (explain_p);
6302 }
6303
6304 static int
6305 unify_arity (bool explain_p, int have, int wanted, bool least_p = false)
6306 {
6307 if (explain_p)
6308 {
6309 if (least_p)
6310 inform_n (input_location, wanted,
6311 " candidate expects at least %d argument, %d provided",
6312 " candidate expects at least %d arguments, %d provided",
6313 wanted, have);
6314 else
6315 inform_n (input_location, wanted,
6316 " candidate expects %d argument, %d provided",
6317 " candidate expects %d arguments, %d provided",
6318 wanted, have);
6319 }
6320 return unify_invalid (explain_p);
6321 }
6322
6323 static int
6324 unify_too_many_arguments (bool explain_p, int have, int wanted)
6325 {
6326 return unify_arity (explain_p, have, wanted);
6327 }
6328
6329 static int
6330 unify_too_few_arguments (bool explain_p, int have, int wanted,
6331 bool least_p = false)
6332 {
6333 return unify_arity (explain_p, have, wanted, least_p);
6334 }
6335
6336 static int
6337 unify_arg_conversion (bool explain_p, tree to_type,
6338 tree from_type, tree arg)
6339 {
6340 if (explain_p)
6341 inform (EXPR_LOC_OR_LOC (arg, input_location),
6342 " cannot convert %qE (type %qT) to type %qT",
6343 arg, from_type, to_type);
6344 return unify_invalid (explain_p);
6345 }
6346
6347 static int
6348 unify_no_common_base (bool explain_p, enum template_base_result r,
6349 tree parm, tree arg)
6350 {
6351 if (explain_p)
6352 switch (r)
6353 {
6354 case tbr_ambiguous_baseclass:
6355 inform (input_location, " %qT is an ambiguous base class of %qT",
6356 parm, arg);
6357 break;
6358 default:
6359 inform (input_location, " %qT is not derived from %qT", arg, parm);
6360 break;
6361 }
6362 return unify_invalid (explain_p);
6363 }
6364
6365 static int
6366 unify_inconsistent_template_template_parameters (bool explain_p)
6367 {
6368 if (explain_p)
6369 inform (input_location,
6370 " template parameters of a template template argument are "
6371 "inconsistent with other deduced template arguments");
6372 return unify_invalid (explain_p);
6373 }
6374
6375 static int
6376 unify_template_deduction_failure (bool explain_p, tree parm, tree arg)
6377 {
6378 if (explain_p)
6379 inform (input_location,
6380 " can't deduce a template for %qT from non-template type %qT",
6381 parm, arg);
6382 return unify_invalid (explain_p);
6383 }
6384
6385 static int
6386 unify_template_argument_mismatch (bool explain_p, tree parm, tree arg)
6387 {
6388 if (explain_p)
6389 inform (input_location,
6390 " template argument %qE does not match %qE", arg, parm);
6391 return unify_invalid (explain_p);
6392 }
6393
6394 /* Attempt to convert the non-type template parameter EXPR to the
6395 indicated TYPE. If the conversion is successful, return the
6396 converted value. If the conversion is unsuccessful, return
6397 NULL_TREE if we issued an error message, or error_mark_node if we
6398 did not. We issue error messages for out-and-out bad template
6399 parameters, but not simply because the conversion failed, since we
6400 might be just trying to do argument deduction. Both TYPE and EXPR
6401 must be non-dependent.
6402
6403 The conversion follows the special rules described in
6404 [temp.arg.nontype], and it is much more strict than an implicit
6405 conversion.
6406
6407 This function is called twice for each template argument (see
6408 lookup_template_class for a more accurate description of this
6409 problem). This means that we need to handle expressions which
6410 are not valid in a C++ source, but can be created from the
6411 first call (for instance, casts to perform conversions). These
6412 hacks can go away after we fix the double coercion problem. */
6413
6414 static tree
6415 convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
6416 {
6417 tree expr_type;
6418 location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
6419 tree orig_expr = expr;
6420
6421 /* Detect immediately string literals as invalid non-type argument.
6422 This special-case is not needed for correctness (we would easily
6423 catch this later), but only to provide better diagnostic for this
6424 common user mistake. As suggested by DR 100, we do not mention
6425 linkage issues in the diagnostic as this is not the point. */
6426 /* FIXME we're making this OK. */
6427 if (TREE_CODE (expr) == STRING_CST)
6428 {
6429 if (complain & tf_error)
6430 error ("%qE is not a valid template argument for type %qT "
6431 "because string literals can never be used in this context",
6432 expr, type);
6433 return NULL_TREE;
6434 }
6435
6436 /* Add the ADDR_EXPR now for the benefit of
6437 value_dependent_expression_p. */
6438 if (TYPE_PTROBV_P (type)
6439 && TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE)
6440 {
6441 expr = decay_conversion (expr, complain);
6442 if (expr == error_mark_node)
6443 return error_mark_node;
6444 }
6445
6446 /* If we are in a template, EXPR may be non-dependent, but still
6447 have a syntactic, rather than semantic, form. For example, EXPR
6448 might be a SCOPE_REF, rather than the VAR_DECL to which the
6449 SCOPE_REF refers. Preserving the qualifying scope is necessary
6450 so that access checking can be performed when the template is
6451 instantiated -- but here we need the resolved form so that we can
6452 convert the argument. */
6453 bool non_dep = false;
6454 if (TYPE_REF_OBJ_P (type)
6455 && has_value_dependent_address (expr))
6456 /* If we want the address and it's value-dependent, don't fold. */;
6457 else if (processing_template_decl
6458 && is_nondependent_constant_expression (expr))
6459 non_dep = true;
6460 if (error_operand_p (expr))
6461 return error_mark_node;
6462 expr_type = TREE_TYPE (expr);
6463
6464 /* If the argument is non-dependent, perform any conversions in
6465 non-dependent context as well. */
6466 processing_template_decl_sentinel s (non_dep);
6467 if (non_dep)
6468 expr = instantiate_non_dependent_expr_internal (expr, complain);
6469
6470 if (value_dependent_expression_p (expr))
6471 expr = canonicalize_expr_argument (expr, complain);
6472
6473 /* 14.3.2/5: The null pointer{,-to-member} conversion is applied
6474 to a non-type argument of "nullptr". */
6475 if (NULLPTR_TYPE_P (expr_type) && TYPE_PTR_OR_PTRMEM_P (type))
6476 expr = fold_simple (convert (type, expr));
6477
6478 /* In C++11, integral or enumeration non-type template arguments can be
6479 arbitrary constant expressions. Pointer and pointer to
6480 member arguments can be general constant expressions that evaluate
6481 to a null value, but otherwise still need to be of a specific form. */
6482 if (cxx_dialect >= cxx11)
6483 {
6484 if (TREE_CODE (expr) == PTRMEM_CST)
6485 /* A PTRMEM_CST is already constant, and a valid template
6486 argument for a parameter of pointer to member type, we just want
6487 to leave it in that form rather than lower it to a
6488 CONSTRUCTOR. */;
6489 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type)
6490 || cxx_dialect >= cxx17)
6491 {
6492 /* C++17: A template-argument for a non-type template-parameter shall
6493 be a converted constant expression (8.20) of the type of the
6494 template-parameter. */
6495 expr = build_converted_constant_expr (type, expr, complain);
6496 if (expr == error_mark_node)
6497 return error_mark_node;
6498 expr = maybe_constant_value (expr);
6499 expr = convert_from_reference (expr);
6500 }
6501 else if (TYPE_PTR_OR_PTRMEM_P (type))
6502 {
6503 tree folded = maybe_constant_value (expr);
6504 if (TYPE_PTR_P (type) ? integer_zerop (folded)
6505 : null_member_pointer_value_p (folded))
6506 expr = folded;
6507 }
6508 }
6509
6510 if (TREE_CODE (type) == REFERENCE_TYPE)
6511 expr = mark_lvalue_use (expr);
6512 else
6513 expr = mark_rvalue_use (expr);
6514
6515 /* HACK: Due to double coercion, we can get a
6516 NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
6517 which is the tree that we built on the first call (see
6518 below when coercing to reference to object or to reference to
6519 function). We just strip everything and get to the arg.
6520 See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
6521 for examples. */
6522 if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
6523 {
6524 tree probe_type, probe = expr;
6525 if (REFERENCE_REF_P (probe))
6526 probe = TREE_OPERAND (probe, 0);
6527 probe_type = TREE_TYPE (probe);
6528 if (TREE_CODE (probe) == NOP_EXPR)
6529 {
6530 /* ??? Maybe we could use convert_from_reference here, but we
6531 would need to relax its constraints because the NOP_EXPR
6532 could actually change the type to something more cv-qualified,
6533 and this is not folded by convert_from_reference. */
6534 tree addr = TREE_OPERAND (probe, 0);
6535 if (TREE_CODE (probe_type) == REFERENCE_TYPE
6536 && TREE_CODE (addr) == ADDR_EXPR
6537 && TYPE_PTR_P (TREE_TYPE (addr))
6538 && (same_type_ignoring_top_level_qualifiers_p
6539 (TREE_TYPE (probe_type),
6540 TREE_TYPE (TREE_TYPE (addr)))))
6541 {
6542 expr = TREE_OPERAND (addr, 0);
6543 expr_type = TREE_TYPE (probe_type);
6544 }
6545 }
6546 }
6547
6548 /* [temp.arg.nontype]/5, bullet 1
6549
6550 For a non-type template-parameter of integral or enumeration type,
6551 integral promotions (_conv.prom_) and integral conversions
6552 (_conv.integral_) are applied. */
6553 if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
6554 {
6555 if (cxx_dialect < cxx11)
6556 {
6557 tree t = build_converted_constant_expr (type, expr, complain);
6558 t = maybe_constant_value (t);
6559 if (t != error_mark_node)
6560 expr = t;
6561 }
6562
6563 if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (expr)))
6564 return error_mark_node;
6565
6566 /* Notice that there are constant expressions like '4 % 0' which
6567 do not fold into integer constants. */
6568 if (TREE_CODE (expr) != INTEGER_CST
6569 && !value_dependent_expression_p (expr))
6570 {
6571 if (complain & tf_error)
6572 {
6573 int errs = errorcount, warns = warningcount + werrorcount;
6574 if (!require_potential_constant_expression (expr))
6575 expr = error_mark_node;
6576 else
6577 expr = cxx_constant_value (expr);
6578 if (errorcount > errs || warningcount + werrorcount > warns)
6579 inform (loc, "in template argument for type %qT ", type);
6580 if (expr == error_mark_node)
6581 return NULL_TREE;
6582 /* else cxx_constant_value complained but gave us
6583 a real constant, so go ahead. */
6584 if (TREE_CODE (expr) != INTEGER_CST)
6585 {
6586 /* Some assemble time constant expressions like
6587 (intptr_t)&&lab1 - (intptr_t)&&lab2 or
6588 4 + (intptr_t)&&var satisfy reduced_constant_expression_p
6589 as we can emit them into .rodata initializers of
6590 variables, yet they can't fold into an INTEGER_CST at
6591 compile time. Refuse them here. */
6592 gcc_checking_assert (reduced_constant_expression_p (expr));
6593 error_at (loc, "template argument %qE for type %qT not "
6594 "a constant integer", expr, type);
6595 return NULL_TREE;
6596 }
6597 }
6598 else
6599 return NULL_TREE;
6600 }
6601
6602 /* Avoid typedef problems. */
6603 if (TREE_TYPE (expr) != type)
6604 expr = fold_convert (type, expr);
6605 }
6606 /* [temp.arg.nontype]/5, bullet 2
6607
6608 For a non-type template-parameter of type pointer to object,
6609 qualification conversions (_conv.qual_) and the array-to-pointer
6610 conversion (_conv.array_) are applied. */
6611 else if (TYPE_PTROBV_P (type))
6612 {
6613 tree decayed = expr;
6614
6615 /* Look through any NOP_EXPRs around an ADDR_EXPR, whether they come from
6616 decay_conversion or an explicit cast. If it's a problematic cast,
6617 we'll complain about it below. */
6618 if (TREE_CODE (expr) == NOP_EXPR)
6619 {
6620 tree probe = expr;
6621 STRIP_NOPS (probe);
6622 if (TREE_CODE (probe) == ADDR_EXPR
6623 && TYPE_PTR_P (TREE_TYPE (probe)))
6624 {
6625 expr = probe;
6626 expr_type = TREE_TYPE (expr);
6627 }
6628 }
6629
6630 /* [temp.arg.nontype]/1 (TC1 version, DR 49):
6631
6632 A template-argument for a non-type, non-template template-parameter
6633 shall be one of: [...]
6634
6635 -- the name of a non-type template-parameter;
6636 -- the address of an object or function with external linkage, [...]
6637 expressed as "& id-expression" where the & is optional if the name
6638 refers to a function or array, or if the corresponding
6639 template-parameter is a reference.
6640
6641 Here, we do not care about functions, as they are invalid anyway
6642 for a parameter of type pointer-to-object. */
6643
6644 if (value_dependent_expression_p (expr))
6645 /* Non-type template parameters are OK. */
6646 ;
6647 else if (cxx_dialect >= cxx11 && integer_zerop (expr))
6648 /* Null pointer values are OK in C++11. */;
6649 else if (TREE_CODE (expr) != ADDR_EXPR)
6650 {
6651 if (VAR_P (expr))
6652 {
6653 if (complain & tf_error)
6654 error ("%qD is not a valid template argument "
6655 "because %qD is a variable, not the address of "
6656 "a variable", orig_expr, expr);
6657 return NULL_TREE;
6658 }
6659 if (POINTER_TYPE_P (expr_type))
6660 {
6661 if (complain & tf_error)
6662 error ("%qE is not a valid template argument for %qT "
6663 "because it is not the address of a variable",
6664 orig_expr, type);
6665 return NULL_TREE;
6666 }
6667 /* Other values, like integer constants, might be valid
6668 non-type arguments of some other type. */
6669 return error_mark_node;
6670 }
6671 else
6672 {
6673 tree decl = TREE_OPERAND (expr, 0);
6674
6675 if (!VAR_P (decl))
6676 {
6677 if (complain & tf_error)
6678 error ("%qE is not a valid template argument of type %qT "
6679 "because %qE is not a variable", orig_expr, type, decl);
6680 return NULL_TREE;
6681 }
6682 else if (cxx_dialect < cxx11 && !DECL_EXTERNAL_LINKAGE_P (decl))
6683 {
6684 if (complain & tf_error)
6685 error ("%qE is not a valid template argument of type %qT "
6686 "because %qD does not have external linkage",
6687 orig_expr, type, decl);
6688 return NULL_TREE;
6689 }
6690 else if ((cxx_dialect >= cxx11 && cxx_dialect < cxx17)
6691 && decl_linkage (decl) == lk_none)
6692 {
6693 if (complain & tf_error)
6694 error ("%qE is not a valid template argument of type %qT "
6695 "because %qD has no linkage", orig_expr, type, decl);
6696 return NULL_TREE;
6697 }
6698 /* C++17: For a non-type template-parameter of reference or pointer
6699 type, the value of the constant expression shall not refer to (or
6700 for a pointer type, shall not be the address of):
6701 * a subobject (4.5),
6702 * a temporary object (15.2),
6703 * a string literal (5.13.5),
6704 * the result of a typeid expression (8.2.8), or
6705 * a predefined __func__ variable (11.4.1). */
6706 else if (DECL_ARTIFICIAL (decl))
6707 {
6708 if (complain & tf_error)
6709 error ("the address of %qD is not a valid template argument",
6710 decl);
6711 return NULL_TREE;
6712 }
6713 else if (!same_type_ignoring_top_level_qualifiers_p
6714 (strip_array_types (TREE_TYPE (type)),
6715 strip_array_types (TREE_TYPE (decl))))
6716 {
6717 if (complain & tf_error)
6718 error ("the address of the %qT subobject of %qD is not a "
6719 "valid template argument", TREE_TYPE (type), decl);
6720 return NULL_TREE;
6721 }
6722 else if (!TREE_STATIC (decl) && !DECL_EXTERNAL (decl))
6723 {
6724 if (complain & tf_error)
6725 error ("the address of %qD is not a valid template argument "
6726 "because it does not have static storage duration",
6727 decl);
6728 return NULL_TREE;
6729 }
6730 }
6731
6732 expr = decayed;
6733
6734 expr = perform_qualification_conversions (type, expr);
6735 if (expr == error_mark_node)
6736 return error_mark_node;
6737 }
6738 /* [temp.arg.nontype]/5, bullet 3
6739
6740 For a non-type template-parameter of type reference to object, no
6741 conversions apply. The type referred to by the reference may be more
6742 cv-qualified than the (otherwise identical) type of the
6743 template-argument. The template-parameter is bound directly to the
6744 template-argument, which must be an lvalue. */
6745 else if (TYPE_REF_OBJ_P (type))
6746 {
6747 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
6748 expr_type))
6749 return error_mark_node;
6750
6751 if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
6752 {
6753 if (complain & tf_error)
6754 error ("%qE is not a valid template argument for type %qT "
6755 "because of conflicts in cv-qualification", expr, type);
6756 return NULL_TREE;
6757 }
6758
6759 if (!lvalue_p (expr))
6760 {
6761 if (complain & tf_error)
6762 error ("%qE is not a valid template argument for type %qT "
6763 "because it is not an lvalue", expr, type);
6764 return NULL_TREE;
6765 }
6766
6767 /* [temp.arg.nontype]/1
6768
6769 A template-argument for a non-type, non-template template-parameter
6770 shall be one of: [...]
6771
6772 -- the address of an object or function with external linkage. */
6773 if (INDIRECT_REF_P (expr)
6774 && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
6775 {
6776 expr = TREE_OPERAND (expr, 0);
6777 if (DECL_P (expr))
6778 {
6779 if (complain & tf_error)
6780 error ("%q#D is not a valid template argument for type %qT "
6781 "because a reference variable does not have a constant "
6782 "address", expr, type);
6783 return NULL_TREE;
6784 }
6785 }
6786
6787 if (TYPE_REF_OBJ_P (TREE_TYPE (expr))
6788 && value_dependent_expression_p (expr))
6789 /* OK, dependent reference. We don't want to ask whether a DECL is
6790 itself value-dependent, since what we want here is its address. */;
6791 else
6792 {
6793 if (!DECL_P (expr))
6794 {
6795 if (complain & tf_error)
6796 error ("%qE is not a valid template argument for type %qT "
6797 "because it is not an object with linkage",
6798 expr, type);
6799 return NULL_TREE;
6800 }
6801
6802 /* DR 1155 allows internal linkage in C++11 and up. */
6803 linkage_kind linkage = decl_linkage (expr);
6804 if (linkage < (cxx_dialect >= cxx11 ? lk_internal : lk_external))
6805 {
6806 if (complain & tf_error)
6807 error ("%qE is not a valid template argument for type %qT "
6808 "because object %qD does not have linkage",
6809 expr, type, expr);
6810 return NULL_TREE;
6811 }
6812
6813 expr = build_address (expr);
6814 }
6815
6816 if (!same_type_p (type, TREE_TYPE (expr)))
6817 expr = build_nop (type, expr);
6818 }
6819 /* [temp.arg.nontype]/5, bullet 4
6820
6821 For a non-type template-parameter of type pointer to function, only
6822 the function-to-pointer conversion (_conv.func_) is applied. If the
6823 template-argument represents a set of overloaded functions (or a
6824 pointer to such), the matching function is selected from the set
6825 (_over.over_). */
6826 else if (TYPE_PTRFN_P (type))
6827 {
6828 /* If the argument is a template-id, we might not have enough
6829 context information to decay the pointer. */
6830 if (!type_unknown_p (expr_type))
6831 {
6832 expr = decay_conversion (expr, complain);
6833 if (expr == error_mark_node)
6834 return error_mark_node;
6835 }
6836
6837 if (cxx_dialect >= cxx11 && integer_zerop (expr))
6838 /* Null pointer values are OK in C++11. */
6839 return perform_qualification_conversions (type, expr);
6840
6841 expr = convert_nontype_argument_function (type, expr, complain);
6842 if (!expr || expr == error_mark_node)
6843 return expr;
6844 }
6845 /* [temp.arg.nontype]/5, bullet 5
6846
6847 For a non-type template-parameter of type reference to function, no
6848 conversions apply. If the template-argument represents a set of
6849 overloaded functions, the matching function is selected from the set
6850 (_over.over_). */
6851 else if (TYPE_REFFN_P (type))
6852 {
6853 if (TREE_CODE (expr) == ADDR_EXPR)
6854 {
6855 if (complain & tf_error)
6856 {
6857 error ("%qE is not a valid template argument for type %qT "
6858 "because it is a pointer", expr, type);
6859 inform (input_location, "try using %qE instead",
6860 TREE_OPERAND (expr, 0));
6861 }
6862 return NULL_TREE;
6863 }
6864
6865 expr = convert_nontype_argument_function (type, expr, complain);
6866 if (!expr || expr == error_mark_node)
6867 return expr;
6868 }
6869 /* [temp.arg.nontype]/5, bullet 6
6870
6871 For a non-type template-parameter of type pointer to member function,
6872 no conversions apply. If the template-argument represents a set of
6873 overloaded member functions, the matching member function is selected
6874 from the set (_over.over_). */
6875 else if (TYPE_PTRMEMFUNC_P (type))
6876 {
6877 expr = instantiate_type (type, expr, tf_none);
6878 if (expr == error_mark_node)
6879 return error_mark_node;
6880
6881 /* [temp.arg.nontype] bullet 1 says the pointer to member
6882 expression must be a pointer-to-member constant. */
6883 if (!value_dependent_expression_p (expr)
6884 && !check_valid_ptrmem_cst_expr (type, expr, complain))
6885 return NULL_TREE;
6886
6887 /* Repeated conversion can't deal with a conversion that turns PTRMEM_CST
6888 into a CONSTRUCTOR, so build up a new PTRMEM_CST instead. */
6889 if (fnptr_conv_p (type, TREE_TYPE (expr)))
6890 expr = make_ptrmem_cst (type, PTRMEM_CST_MEMBER (expr));
6891 }
6892 /* [temp.arg.nontype]/5, bullet 7
6893
6894 For a non-type template-parameter of type pointer to data member,
6895 qualification conversions (_conv.qual_) are applied. */
6896 else if (TYPE_PTRDATAMEM_P (type))
6897 {
6898 /* [temp.arg.nontype] bullet 1 says the pointer to member
6899 expression must be a pointer-to-member constant. */
6900 if (!value_dependent_expression_p (expr)
6901 && !check_valid_ptrmem_cst_expr (type, expr, complain))
6902 return NULL_TREE;
6903
6904 expr = perform_qualification_conversions (type, expr);
6905 if (expr == error_mark_node)
6906 return expr;
6907 }
6908 else if (NULLPTR_TYPE_P (type))
6909 {
6910 if (!NULLPTR_TYPE_P (TREE_TYPE (expr)))
6911 {
6912 if (complain & tf_error)
6913 error ("%qE is not a valid template argument for type %qT "
6914 "because it is of type %qT", expr, type, TREE_TYPE (expr));
6915 return NULL_TREE;
6916 }
6917 return expr;
6918 }
6919 /* A template non-type parameter must be one of the above. */
6920 else
6921 gcc_unreachable ();
6922
6923 /* Sanity check: did we actually convert the argument to the
6924 right type? */
6925 gcc_assert (same_type_ignoring_top_level_qualifiers_p
6926 (type, TREE_TYPE (expr)));
6927 return convert_from_reference (expr);
6928 }
6929
6930 /* Subroutine of coerce_template_template_parms, which returns 1 if
6931 PARM_PARM and ARG_PARM match using the rule for the template
6932 parameters of template template parameters. Both PARM and ARG are
6933 template parameters; the rest of the arguments are the same as for
6934 coerce_template_template_parms.
6935 */
6936 static int
6937 coerce_template_template_parm (tree parm,
6938 tree arg,
6939 tsubst_flags_t complain,
6940 tree in_decl,
6941 tree outer_args)
6942 {
6943 if (arg == NULL_TREE || error_operand_p (arg)
6944 || parm == NULL_TREE || error_operand_p (parm))
6945 return 0;
6946
6947 if (TREE_CODE (arg) != TREE_CODE (parm))
6948 return 0;
6949
6950 switch (TREE_CODE (parm))
6951 {
6952 case TEMPLATE_DECL:
6953 /* We encounter instantiations of templates like
6954 template <template <template <class> class> class TT>
6955 class C; */
6956 {
6957 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6958 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6959
6960 if (!coerce_template_template_parms
6961 (parmparm, argparm, complain, in_decl, outer_args))
6962 return 0;
6963 }
6964 /* Fall through. */
6965
6966 case TYPE_DECL:
6967 if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
6968 && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6969 /* Argument is a parameter pack but parameter is not. */
6970 return 0;
6971 break;
6972
6973 case PARM_DECL:
6974 /* The tsubst call is used to handle cases such as
6975
6976 template <int> class C {};
6977 template <class T, template <T> class TT> class D {};
6978 D<int, C> d;
6979
6980 i.e. the parameter list of TT depends on earlier parameters. */
6981 if (!uses_template_parms (TREE_TYPE (arg)))
6982 {
6983 tree t = tsubst (TREE_TYPE (parm), outer_args, complain, in_decl);
6984 if (!uses_template_parms (t)
6985 && !same_type_p (t, TREE_TYPE (arg)))
6986 return 0;
6987 }
6988
6989 if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
6990 && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6991 /* Argument is a parameter pack but parameter is not. */
6992 return 0;
6993
6994 break;
6995
6996 default:
6997 gcc_unreachable ();
6998 }
6999
7000 return 1;
7001 }
7002
7003 /* Coerce template argument list ARGLIST for use with template
7004 template-parameter TEMPL. */
7005
7006 static tree
7007 coerce_template_args_for_ttp (tree templ, tree arglist,
7008 tsubst_flags_t complain)
7009 {
7010 /* Consider an example where a template template parameter declared as
7011
7012 template <class T, class U = std::allocator<T> > class TT
7013
7014 The template parameter level of T and U are one level larger than
7015 of TT. To proper process the default argument of U, say when an
7016 instantiation `TT<int>' is seen, we need to build the full
7017 arguments containing {int} as the innermost level. Outer levels,
7018 available when not appearing as default template argument, can be
7019 obtained from the arguments of the enclosing template.
7020
7021 Suppose that TT is later substituted with std::vector. The above
7022 instantiation is `TT<int, std::allocator<T> >' with TT at
7023 level 1, and T at level 2, while the template arguments at level 1
7024 becomes {std::vector} and the inner level 2 is {int}. */
7025
7026 tree outer = DECL_CONTEXT (templ);
7027 if (outer)
7028 {
7029 if (DECL_TEMPLATE_SPECIALIZATION (outer))
7030 /* We want arguments for the partial specialization, not arguments for
7031 the primary template. */
7032 outer = template_parms_to_args (DECL_TEMPLATE_PARMS (outer));
7033 else
7034 outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
7035 }
7036 else if (current_template_parms)
7037 {
7038 /* This is an argument of the current template, so we haven't set
7039 DECL_CONTEXT yet. */
7040 tree relevant_template_parms;
7041
7042 /* Parameter levels that are greater than the level of the given
7043 template template parm are irrelevant. */
7044 relevant_template_parms = current_template_parms;
7045 while (TMPL_PARMS_DEPTH (relevant_template_parms)
7046 != TEMPLATE_TYPE_LEVEL (TREE_TYPE (templ)))
7047 relevant_template_parms = TREE_CHAIN (relevant_template_parms);
7048
7049 outer = template_parms_to_args (relevant_template_parms);
7050 }
7051
7052 if (outer)
7053 arglist = add_to_template_args (outer, arglist);
7054
7055 tree parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
7056 return coerce_template_parms (parmlist, arglist, templ,
7057 complain,
7058 /*require_all_args=*/true,
7059 /*use_default_args=*/true);
7060 }
7061
7062 /* A cache of template template parameters with match-all default
7063 arguments. */
7064 static GTY((deletable)) hash_map<tree,tree> *defaulted_ttp_cache;
7065 static void
7066 store_defaulted_ttp (tree v, tree t)
7067 {
7068 if (!defaulted_ttp_cache)
7069 defaulted_ttp_cache = hash_map<tree,tree>::create_ggc (13);
7070 defaulted_ttp_cache->put (v, t);
7071 }
7072 static tree
7073 lookup_defaulted_ttp (tree v)
7074 {
7075 if (defaulted_ttp_cache)
7076 if (tree *p = defaulted_ttp_cache->get (v))
7077 return *p;
7078 return NULL_TREE;
7079 }
7080
7081 /* T is a bound template template-parameter. Copy its arguments into default
7082 arguments of the template template-parameter's template parameters. */
7083
7084 static tree
7085 add_defaults_to_ttp (tree otmpl)
7086 {
7087 if (tree c = lookup_defaulted_ttp (otmpl))
7088 return c;
7089
7090 tree ntmpl = copy_node (otmpl);
7091
7092 tree ntype = copy_node (TREE_TYPE (otmpl));
7093 TYPE_STUB_DECL (ntype) = TYPE_NAME (ntype) = ntmpl;
7094 TYPE_MAIN_VARIANT (ntype) = ntype;
7095 TYPE_POINTER_TO (ntype) = TYPE_REFERENCE_TO (ntype) = NULL_TREE;
7096 TYPE_NAME (ntype) = ntmpl;
7097 SET_TYPE_STRUCTURAL_EQUALITY (ntype);
7098
7099 tree idx = TEMPLATE_TYPE_PARM_INDEX (ntype)
7100 = copy_node (TEMPLATE_TYPE_PARM_INDEX (ntype));
7101 TEMPLATE_PARM_DECL (idx) = ntmpl;
7102 TREE_TYPE (ntmpl) = TREE_TYPE (idx) = ntype;
7103
7104 tree oparms = DECL_TEMPLATE_PARMS (otmpl);
7105 tree parms = DECL_TEMPLATE_PARMS (ntmpl) = copy_node (oparms);
7106 TREE_CHAIN (parms) = TREE_CHAIN (oparms);
7107 tree vec = TREE_VALUE (parms) = copy_node (TREE_VALUE (parms));
7108 for (int i = 0; i < TREE_VEC_LENGTH (vec); ++i)
7109 {
7110 tree o = TREE_VEC_ELT (vec, i);
7111 if (!template_parameter_pack_p (TREE_VALUE (o)))
7112 {
7113 tree n = TREE_VEC_ELT (vec, i) = copy_node (o);
7114 TREE_PURPOSE (n) = any_targ_node;
7115 }
7116 }
7117
7118 store_defaulted_ttp (otmpl, ntmpl);
7119 return ntmpl;
7120 }
7121
7122 /* ARG is a bound potential template template-argument, and PARGS is a list
7123 of arguments for the corresponding template template-parameter. Adjust
7124 PARGS as appropriate for application to ARG's template, and if ARG is a
7125 BOUND_TEMPLATE_TEMPLATE_PARM, possibly adjust it to add default template
7126 arguments to the template template parameter. */
7127
7128 static tree
7129 coerce_ttp_args_for_tta (tree& arg, tree pargs, tsubst_flags_t complain)
7130 {
7131 ++processing_template_decl;
7132 tree arg_tmpl = TYPE_TI_TEMPLATE (arg);
7133 if (DECL_TEMPLATE_TEMPLATE_PARM_P (arg_tmpl))
7134 {
7135 /* When comparing two template template-parameters in partial ordering,
7136 rewrite the one currently being used as an argument to have default
7137 arguments for all parameters. */
7138 arg_tmpl = add_defaults_to_ttp (arg_tmpl);
7139 pargs = coerce_template_args_for_ttp (arg_tmpl, pargs, complain);
7140 if (pargs != error_mark_node)
7141 arg = bind_template_template_parm (TREE_TYPE (arg_tmpl),
7142 TYPE_TI_ARGS (arg));
7143 }
7144 else
7145 {
7146 tree aparms
7147 = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (arg_tmpl));
7148 pargs = coerce_template_parms (aparms, pargs, arg_tmpl, complain,
7149 /*require_all*/true,
7150 /*use_default*/true);
7151 }
7152 --processing_template_decl;
7153 return pargs;
7154 }
7155
7156 /* Subroutine of unify for the case when PARM is a
7157 BOUND_TEMPLATE_TEMPLATE_PARM. */
7158
7159 static int
7160 unify_bound_ttp_args (tree tparms, tree targs, tree parm, tree& arg,
7161 bool explain_p)
7162 {
7163 tree parmvec = TYPE_TI_ARGS (parm);
7164 tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
7165
7166 /* The template template parm might be variadic and the argument
7167 not, so flatten both argument lists. */
7168 parmvec = expand_template_argument_pack (parmvec);
7169 argvec = expand_template_argument_pack (argvec);
7170
7171 if (flag_new_ttp)
7172 {
7173 /* In keeping with P0522R0, adjust P's template arguments
7174 to apply to A's template; then flatten it again. */
7175 tree nparmvec = parmvec;
7176 nparmvec = coerce_ttp_args_for_tta (arg, parmvec, tf_none);
7177 nparmvec = expand_template_argument_pack (nparmvec);
7178
7179 if (unify (tparms, targs, nparmvec, argvec,
7180 UNIFY_ALLOW_NONE, explain_p))
7181 return 1;
7182
7183 /* If the P0522 adjustment eliminated a pack expansion, deduce
7184 empty packs. */
7185 if (flag_new_ttp
7186 && TREE_VEC_LENGTH (nparmvec) < TREE_VEC_LENGTH (parmvec)
7187 && unify_pack_expansion (tparms, targs, parmvec, argvec,
7188 DEDUCE_EXACT, /*sub*/true, explain_p))
7189 return 1;
7190 }
7191 else
7192 {
7193 /* Deduce arguments T, i from TT<T> or TT<i>.
7194 We check each element of PARMVEC and ARGVEC individually
7195 rather than the whole TREE_VEC since they can have
7196 different number of elements, which is allowed under N2555. */
7197
7198 int len = TREE_VEC_LENGTH (parmvec);
7199
7200 /* Check if the parameters end in a pack, making them
7201 variadic. */
7202 int parm_variadic_p = 0;
7203 if (len > 0
7204 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
7205 parm_variadic_p = 1;
7206
7207 for (int i = 0; i < len - parm_variadic_p; ++i)
7208 /* If the template argument list of P contains a pack
7209 expansion that is not the last template argument, the
7210 entire template argument list is a non-deduced
7211 context. */
7212 if (PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, i)))
7213 return unify_success (explain_p);
7214
7215 if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
7216 return unify_too_few_arguments (explain_p,
7217 TREE_VEC_LENGTH (argvec), len);
7218
7219 for (int i = 0; i < len - parm_variadic_p; ++i)
7220 if (unify (tparms, targs,
7221 TREE_VEC_ELT (parmvec, i),
7222 TREE_VEC_ELT (argvec, i),
7223 UNIFY_ALLOW_NONE, explain_p))
7224 return 1;
7225
7226 if (parm_variadic_p
7227 && unify_pack_expansion (tparms, targs,
7228 parmvec, argvec,
7229 DEDUCE_EXACT,
7230 /*subr=*/true, explain_p))
7231 return 1;
7232 }
7233
7234 return 0;
7235 }
7236
7237 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
7238 template template parameters. Both PARM_PARMS and ARG_PARMS are
7239 vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
7240 or PARM_DECL.
7241
7242 Consider the example:
7243 template <class T> class A;
7244 template<template <class U> class TT> class B;
7245
7246 For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
7247 the parameters to A, and OUTER_ARGS contains A. */
7248
7249 static int
7250 coerce_template_template_parms (tree parm_parms,
7251 tree arg_parms,
7252 tsubst_flags_t complain,
7253 tree in_decl,
7254 tree outer_args)
7255 {
7256 int nparms, nargs, i;
7257 tree parm, arg;
7258 int variadic_p = 0;
7259
7260 gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
7261 gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
7262
7263 nparms = TREE_VEC_LENGTH (parm_parms);
7264 nargs = TREE_VEC_LENGTH (arg_parms);
7265
7266 if (flag_new_ttp)
7267 {
7268 /* P0522R0: A template template-parameter P is at least as specialized as
7269 a template template-argument A if, given the following rewrite to two
7270 function templates, the function template corresponding to P is at
7271 least as specialized as the function template corresponding to A
7272 according to the partial ordering rules for function templates
7273 ([temp.func.order]). Given an invented class template X with the
7274 template parameter list of A (including default arguments):
7275
7276 * Each of the two function templates has the same template parameters,
7277 respectively, as P or A.
7278
7279 * Each function template has a single function parameter whose type is
7280 a specialization of X with template arguments corresponding to the
7281 template parameters from the respective function template where, for
7282 each template parameter PP in the template parameter list of the
7283 function template, a corresponding template argument AA is formed. If
7284 PP declares a parameter pack, then AA is the pack expansion
7285 PP... ([temp.variadic]); otherwise, AA is the id-expression PP.
7286
7287 If the rewrite produces an invalid type, then P is not at least as
7288 specialized as A. */
7289
7290 /* So coerce P's args to apply to A's parms, and then deduce between A's
7291 args and the converted args. If that succeeds, A is at least as
7292 specialized as P, so they match.*/
7293 tree pargs = template_parms_level_to_args (parm_parms);
7294 ++processing_template_decl;
7295 pargs = coerce_template_parms (arg_parms, pargs, NULL_TREE, tf_none,
7296 /*require_all*/true, /*use_default*/true);
7297 --processing_template_decl;
7298 if (pargs != error_mark_node)
7299 {
7300 tree targs = make_tree_vec (nargs);
7301 tree aargs = template_parms_level_to_args (arg_parms);
7302 if (!unify (arg_parms, targs, aargs, pargs, UNIFY_ALLOW_NONE,
7303 /*explain*/false))
7304 return 1;
7305 }
7306 }
7307
7308 /* Determine whether we have a parameter pack at the end of the
7309 template template parameter's template parameter list. */
7310 if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
7311 {
7312 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
7313
7314 if (error_operand_p (parm))
7315 return 0;
7316
7317 switch (TREE_CODE (parm))
7318 {
7319 case TEMPLATE_DECL:
7320 case TYPE_DECL:
7321 if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
7322 variadic_p = 1;
7323 break;
7324
7325 case PARM_DECL:
7326 if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
7327 variadic_p = 1;
7328 break;
7329
7330 default:
7331 gcc_unreachable ();
7332 }
7333 }
7334
7335 if (nargs != nparms
7336 && !(variadic_p && nargs >= nparms - 1))
7337 return 0;
7338
7339 /* Check all of the template parameters except the parameter pack at
7340 the end (if any). */
7341 for (i = 0; i < nparms - variadic_p; ++i)
7342 {
7343 if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
7344 || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
7345 continue;
7346
7347 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
7348 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
7349
7350 if (!coerce_template_template_parm (parm, arg, complain, in_decl,
7351 outer_args))
7352 return 0;
7353
7354 }
7355
7356 if (variadic_p)
7357 {
7358 /* Check each of the template parameters in the template
7359 argument against the template parameter pack at the end of
7360 the template template parameter. */
7361 if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
7362 return 0;
7363
7364 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
7365
7366 for (; i < nargs; ++i)
7367 {
7368 if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
7369 continue;
7370
7371 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
7372
7373 if (!coerce_template_template_parm (parm, arg, complain, in_decl,
7374 outer_args))
7375 return 0;
7376 }
7377 }
7378
7379 return 1;
7380 }
7381
7382 /* Verifies that the deduced template arguments (in TARGS) for the
7383 template template parameters (in TPARMS) represent valid bindings,
7384 by comparing the template parameter list of each template argument
7385 to the template parameter list of its corresponding template
7386 template parameter, in accordance with DR150. This
7387 routine can only be called after all template arguments have been
7388 deduced. It will return TRUE if all of the template template
7389 parameter bindings are okay, FALSE otherwise. */
7390 bool
7391 template_template_parm_bindings_ok_p (tree tparms, tree targs)
7392 {
7393 int i, ntparms = TREE_VEC_LENGTH (tparms);
7394 bool ret = true;
7395
7396 /* We're dealing with template parms in this process. */
7397 ++processing_template_decl;
7398
7399 targs = INNERMOST_TEMPLATE_ARGS (targs);
7400
7401 for (i = 0; i < ntparms; ++i)
7402 {
7403 tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
7404 tree targ = TREE_VEC_ELT (targs, i);
7405
7406 if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
7407 {
7408 tree packed_args = NULL_TREE;
7409 int idx, len = 1;
7410
7411 if (ARGUMENT_PACK_P (targ))
7412 {
7413 /* Look inside the argument pack. */
7414 packed_args = ARGUMENT_PACK_ARGS (targ);
7415 len = TREE_VEC_LENGTH (packed_args);
7416 }
7417
7418 for (idx = 0; idx < len; ++idx)
7419 {
7420 tree targ_parms = NULL_TREE;
7421
7422 if (packed_args)
7423 /* Extract the next argument from the argument
7424 pack. */
7425 targ = TREE_VEC_ELT (packed_args, idx);
7426
7427 if (PACK_EXPANSION_P (targ))
7428 /* Look at the pattern of the pack expansion. */
7429 targ = PACK_EXPANSION_PATTERN (targ);
7430
7431 /* Extract the template parameters from the template
7432 argument. */
7433 if (TREE_CODE (targ) == TEMPLATE_DECL)
7434 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
7435 else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
7436 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
7437
7438 /* Verify that we can coerce the template template
7439 parameters from the template argument to the template
7440 parameter. This requires an exact match. */
7441 if (targ_parms
7442 && !coerce_template_template_parms
7443 (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
7444 targ_parms,
7445 tf_none,
7446 tparm,
7447 targs))
7448 {
7449 ret = false;
7450 goto out;
7451 }
7452 }
7453 }
7454 }
7455
7456 out:
7457
7458 --processing_template_decl;
7459 return ret;
7460 }
7461
7462 /* Since type attributes aren't mangled, we need to strip them from
7463 template type arguments. */
7464
7465 static tree
7466 canonicalize_type_argument (tree arg, tsubst_flags_t complain)
7467 {
7468 if (!arg || arg == error_mark_node || arg == TYPE_CANONICAL (arg))
7469 return arg;
7470 bool removed_attributes = false;
7471 tree canon = strip_typedefs (arg, &removed_attributes);
7472 if (removed_attributes
7473 && (complain & tf_warning))
7474 warning (OPT_Wignored_attributes,
7475 "ignoring attributes on template argument %qT", arg);
7476 return canon;
7477 }
7478
7479 /* And from inside dependent non-type arguments like sizeof(Type). */
7480
7481 static tree
7482 canonicalize_expr_argument (tree arg, tsubst_flags_t complain)
7483 {
7484 if (!arg || arg == error_mark_node)
7485 return arg;
7486 bool removed_attributes = false;
7487 tree canon = strip_typedefs_expr (arg, &removed_attributes);
7488 if (removed_attributes
7489 && (complain & tf_warning))
7490 warning (OPT_Wignored_attributes,
7491 "ignoring attributes in template argument %qE", arg);
7492 return canon;
7493 }
7494
7495 // A template declaration can be substituted for a constrained
7496 // template template parameter only when the argument is more
7497 // constrained than the parameter.
7498 static bool
7499 is_compatible_template_arg (tree parm, tree arg)
7500 {
7501 tree parm_cons = get_constraints (parm);
7502
7503 /* For now, allow constrained template template arguments
7504 and unconstrained template template parameters. */
7505 if (parm_cons == NULL_TREE)
7506 return true;
7507
7508 tree arg_cons = get_constraints (arg);
7509
7510 // If the template parameter is constrained, we need to rewrite its
7511 // constraints in terms of the ARG's template parameters. This ensures
7512 // that all of the template parameter types will have the same depth.
7513 //
7514 // Note that this is only valid when coerce_template_template_parm is
7515 // true for the innermost template parameters of PARM and ARG. In other
7516 // words, because coercion is successful, this conversion will be valid.
7517 if (parm_cons)
7518 {
7519 tree args = template_parms_to_args (DECL_TEMPLATE_PARMS (arg));
7520 parm_cons = tsubst_constraint_info (parm_cons,
7521 INNERMOST_TEMPLATE_ARGS (args),
7522 tf_none, NULL_TREE);
7523 if (parm_cons == error_mark_node)
7524 return false;
7525 }
7526
7527 return subsumes (parm_cons, arg_cons);
7528 }
7529
7530 // Convert a placeholder argument into a binding to the original
7531 // parameter. The original parameter is saved as the TREE_TYPE of
7532 // ARG.
7533 static inline tree
7534 convert_wildcard_argument (tree parm, tree arg)
7535 {
7536 TREE_TYPE (arg) = parm;
7537 return arg;
7538 }
7539
7540 /* We can't fully resolve ARG given as a non-type template argument to TYPE,
7541 because one of them is dependent. But we need to represent the
7542 conversion for the benefit of cp_tree_equal. */
7543
7544 static tree
7545 maybe_convert_nontype_argument (tree type, tree arg)
7546 {
7547 /* Auto parms get no conversion. */
7548 if (type_uses_auto (type))
7549 return arg;
7550 /* We don't need or want to add this conversion now if we're going to use the
7551 argument for deduction. */
7552 if (value_dependent_expression_p (arg))
7553 return arg;
7554
7555 type = cv_unqualified (type);
7556 tree argtype = TREE_TYPE (arg);
7557 if (same_type_p (type, argtype))
7558 return arg;
7559
7560 arg = build1 (IMPLICIT_CONV_EXPR, type, arg);
7561 IMPLICIT_CONV_EXPR_NONTYPE_ARG (arg) = true;
7562 return arg;
7563 }
7564
7565 /* Convert the indicated template ARG as necessary to match the
7566 indicated template PARM. Returns the converted ARG, or
7567 error_mark_node if the conversion was unsuccessful. Error and
7568 warning messages are issued under control of COMPLAIN. This
7569 conversion is for the Ith parameter in the parameter list. ARGS is
7570 the full set of template arguments deduced so far. */
7571
7572 static tree
7573 convert_template_argument (tree parm,
7574 tree arg,
7575 tree args,
7576 tsubst_flags_t complain,
7577 int i,
7578 tree in_decl)
7579 {
7580 tree orig_arg;
7581 tree val;
7582 int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
7583
7584 if (parm == error_mark_node)
7585 return error_mark_node;
7586
7587 /* Trivially convert placeholders. */
7588 if (TREE_CODE (arg) == WILDCARD_DECL)
7589 return convert_wildcard_argument (parm, arg);
7590
7591 if (arg == any_targ_node)
7592 return arg;
7593
7594 if (TREE_CODE (arg) == TREE_LIST
7595 && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
7596 {
7597 /* The template argument was the name of some
7598 member function. That's usually
7599 invalid, but static members are OK. In any
7600 case, grab the underlying fields/functions
7601 and issue an error later if required. */
7602 orig_arg = TREE_VALUE (arg);
7603 TREE_TYPE (arg) = unknown_type_node;
7604 }
7605
7606 orig_arg = arg;
7607
7608 requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
7609 requires_type = (TREE_CODE (parm) == TYPE_DECL
7610 || requires_tmpl_type);
7611
7612 /* When determining whether an argument pack expansion is a template,
7613 look at the pattern. */
7614 if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
7615 arg = PACK_EXPANSION_PATTERN (arg);
7616
7617 /* Deal with an injected-class-name used as a template template arg. */
7618 if (requires_tmpl_type && CLASS_TYPE_P (arg))
7619 {
7620 tree t = maybe_get_template_decl_from_type_decl (TYPE_NAME (arg));
7621 if (TREE_CODE (t) == TEMPLATE_DECL)
7622 {
7623 if (cxx_dialect >= cxx11)
7624 /* OK under DR 1004. */;
7625 else if (complain & tf_warning_or_error)
7626 pedwarn (input_location, OPT_Wpedantic, "injected-class-name %qD"
7627 " used as template template argument", TYPE_NAME (arg));
7628 else if (flag_pedantic_errors)
7629 t = arg;
7630
7631 arg = t;
7632 }
7633 }
7634
7635 is_tmpl_type =
7636 ((TREE_CODE (arg) == TEMPLATE_DECL
7637 && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
7638 || (requires_tmpl_type && TREE_CODE (arg) == TYPE_ARGUMENT_PACK)
7639 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
7640 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
7641
7642 if (is_tmpl_type
7643 && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
7644 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
7645 arg = TYPE_STUB_DECL (arg);
7646
7647 is_type = TYPE_P (arg) || is_tmpl_type;
7648
7649 if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
7650 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
7651 {
7652 if (TREE_CODE (TREE_OPERAND (arg, 1)) == BIT_NOT_EXPR)
7653 {
7654 if (complain & tf_error)
7655 error ("invalid use of destructor %qE as a type", orig_arg);
7656 return error_mark_node;
7657 }
7658
7659 permerror (input_location,
7660 "to refer to a type member of a template parameter, "
7661 "use %<typename %E%>", orig_arg);
7662
7663 orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
7664 TREE_OPERAND (arg, 1),
7665 typename_type,
7666 complain);
7667 arg = orig_arg;
7668 is_type = 1;
7669 }
7670 if (is_type != requires_type)
7671 {
7672 if (in_decl)
7673 {
7674 if (complain & tf_error)
7675 {
7676 error ("type/value mismatch at argument %d in template "
7677 "parameter list for %qD",
7678 i + 1, in_decl);
7679 if (is_type)
7680 inform (input_location,
7681 " expected a constant of type %qT, got %qT",
7682 TREE_TYPE (parm),
7683 (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
7684 else if (requires_tmpl_type)
7685 inform (input_location,
7686 " expected a class template, got %qE", orig_arg);
7687 else
7688 inform (input_location,
7689 " expected a type, got %qE", orig_arg);
7690 }
7691 }
7692 return error_mark_node;
7693 }
7694 if (is_tmpl_type ^ requires_tmpl_type)
7695 {
7696 if (in_decl && (complain & tf_error))
7697 {
7698 error ("type/value mismatch at argument %d in template "
7699 "parameter list for %qD",
7700 i + 1, in_decl);
7701 if (is_tmpl_type)
7702 inform (input_location,
7703 " expected a type, got %qT", DECL_NAME (arg));
7704 else
7705 inform (input_location,
7706 " expected a class template, got %qT", orig_arg);
7707 }
7708 return error_mark_node;
7709 }
7710
7711 if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
7712 /* We already did the appropriate conversion when packing args. */
7713 val = orig_arg;
7714 else if (is_type)
7715 {
7716 if (requires_tmpl_type)
7717 {
7718 if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
7719 /* The number of argument required is not known yet.
7720 Just accept it for now. */
7721 val = orig_arg;
7722 else
7723 {
7724 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
7725 tree argparm;
7726
7727 /* Strip alias templates that are equivalent to another
7728 template. */
7729 arg = get_underlying_template (arg);
7730 argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
7731
7732 if (coerce_template_template_parms (parmparm, argparm,
7733 complain, in_decl,
7734 args))
7735 {
7736 val = arg;
7737
7738 /* TEMPLATE_TEMPLATE_PARM node is preferred over
7739 TEMPLATE_DECL. */
7740 if (val != error_mark_node)
7741 {
7742 if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
7743 val = TREE_TYPE (val);
7744 if (TREE_CODE (orig_arg) == TYPE_PACK_EXPANSION)
7745 val = make_pack_expansion (val, complain);
7746 }
7747 }
7748 else
7749 {
7750 if (in_decl && (complain & tf_error))
7751 {
7752 error ("type/value mismatch at argument %d in "
7753 "template parameter list for %qD",
7754 i + 1, in_decl);
7755 inform (input_location,
7756 " expected a template of type %qD, got %qT",
7757 parm, orig_arg);
7758 }
7759
7760 val = error_mark_node;
7761 }
7762
7763 // Check that the constraints are compatible before allowing the
7764 // substitution.
7765 if (val != error_mark_node)
7766 if (!is_compatible_template_arg (parm, arg))
7767 {
7768 if (in_decl && (complain & tf_error))
7769 {
7770 error ("constraint mismatch at argument %d in "
7771 "template parameter list for %qD",
7772 i + 1, in_decl);
7773 inform (input_location, " expected %qD but got %qD",
7774 parm, arg);
7775 }
7776 val = error_mark_node;
7777 }
7778 }
7779 }
7780 else
7781 val = orig_arg;
7782 /* We only form one instance of each template specialization.
7783 Therefore, if we use a non-canonical variant (i.e., a
7784 typedef), any future messages referring to the type will use
7785 the typedef, which is confusing if those future uses do not
7786 themselves also use the typedef. */
7787 if (TYPE_P (val))
7788 val = canonicalize_type_argument (val, complain);
7789 }
7790 else
7791 {
7792 tree t = TREE_TYPE (parm);
7793
7794 if (tree a = type_uses_auto (t))
7795 {
7796 t = do_auto_deduction (t, arg, a, complain, adc_unify, args);
7797 if (t == error_mark_node)
7798 return error_mark_node;
7799 }
7800 else
7801 t = tsubst (t, args, complain, in_decl);
7802
7803 if (invalid_nontype_parm_type_p (t, complain))
7804 return error_mark_node;
7805
7806 if (!type_dependent_expression_p (orig_arg)
7807 && !uses_template_parms (t))
7808 /* We used to call digest_init here. However, digest_init
7809 will report errors, which we don't want when complain
7810 is zero. More importantly, digest_init will try too
7811 hard to convert things: for example, `0' should not be
7812 converted to pointer type at this point according to
7813 the standard. Accepting this is not merely an
7814 extension, since deciding whether or not these
7815 conversions can occur is part of determining which
7816 function template to call, or whether a given explicit
7817 argument specification is valid. */
7818 val = convert_nontype_argument (t, orig_arg, complain);
7819 else
7820 {
7821 val = canonicalize_expr_argument (orig_arg, complain);
7822 val = maybe_convert_nontype_argument (t, val);
7823 }
7824
7825
7826 if (val == NULL_TREE)
7827 val = error_mark_node;
7828 else if (val == error_mark_node && (complain & tf_error))
7829 error ("could not convert template argument %qE from %qT to %qT",
7830 orig_arg, TREE_TYPE (orig_arg), t);
7831
7832 if (INDIRECT_REF_P (val))
7833 {
7834 /* Reject template arguments that are references to built-in
7835 functions with no library fallbacks. */
7836 const_tree inner = TREE_OPERAND (val, 0);
7837 const_tree innertype = TREE_TYPE (inner);
7838 if (innertype
7839 && TREE_CODE (innertype) == REFERENCE_TYPE
7840 && TREE_CODE (TREE_TYPE (innertype)) == FUNCTION_TYPE
7841 && TREE_OPERAND_LENGTH (inner) > 0
7842 && reject_gcc_builtin (TREE_OPERAND (inner, 0)))
7843 return error_mark_node;
7844 }
7845
7846 if (TREE_CODE (val) == SCOPE_REF)
7847 {
7848 /* Strip typedefs from the SCOPE_REF. */
7849 tree type = canonicalize_type_argument (TREE_TYPE (val), complain);
7850 tree scope = canonicalize_type_argument (TREE_OPERAND (val, 0),
7851 complain);
7852 val = build_qualified_name (type, scope, TREE_OPERAND (val, 1),
7853 QUALIFIED_NAME_IS_TEMPLATE (val));
7854 }
7855 }
7856
7857 return val;
7858 }
7859
7860 /* Coerces the remaining template arguments in INNER_ARGS (from
7861 ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
7862 Returns the coerced argument pack. PARM_IDX is the position of this
7863 parameter in the template parameter list. ARGS is the original
7864 template argument list. */
7865 static tree
7866 coerce_template_parameter_pack (tree parms,
7867 int parm_idx,
7868 tree args,
7869 tree inner_args,
7870 int arg_idx,
7871 tree new_args,
7872 int* lost,
7873 tree in_decl,
7874 tsubst_flags_t complain)
7875 {
7876 tree parm = TREE_VEC_ELT (parms, parm_idx);
7877 int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
7878 tree packed_args;
7879 tree argument_pack;
7880 tree packed_parms = NULL_TREE;
7881
7882 if (arg_idx > nargs)
7883 arg_idx = nargs;
7884
7885 if (tree packs = fixed_parameter_pack_p (TREE_VALUE (parm)))
7886 {
7887 /* When the template parameter is a non-type template parameter pack
7888 or template template parameter pack whose type or template
7889 parameters use parameter packs, we know exactly how many arguments
7890 we are looking for. Build a vector of the instantiated decls for
7891 these template parameters in PACKED_PARMS. */
7892 /* We can't use make_pack_expansion here because it would interpret a
7893 _DECL as a use rather than a declaration. */
7894 tree decl = TREE_VALUE (parm);
7895 tree exp = cxx_make_type (TYPE_PACK_EXPANSION);
7896 SET_PACK_EXPANSION_PATTERN (exp, decl);
7897 PACK_EXPANSION_PARAMETER_PACKS (exp) = packs;
7898 SET_TYPE_STRUCTURAL_EQUALITY (exp);
7899
7900 TREE_VEC_LENGTH (args)--;
7901 packed_parms = tsubst_pack_expansion (exp, args, complain, decl);
7902 TREE_VEC_LENGTH (args)++;
7903
7904 if (packed_parms == error_mark_node)
7905 return error_mark_node;
7906
7907 /* If we're doing a partial instantiation of a member template,
7908 verify that all of the types used for the non-type
7909 template parameter pack are, in fact, valid for non-type
7910 template parameters. */
7911 if (arg_idx < nargs
7912 && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
7913 {
7914 int j, len = TREE_VEC_LENGTH (packed_parms);
7915 for (j = 0; j < len; ++j)
7916 {
7917 tree t = TREE_TYPE (TREE_VEC_ELT (packed_parms, j));
7918 if (invalid_nontype_parm_type_p (t, complain))
7919 return error_mark_node;
7920 }
7921 /* We don't know how many args we have yet, just
7922 use the unconverted ones for now. */
7923 return NULL_TREE;
7924 }
7925
7926 packed_args = make_tree_vec (TREE_VEC_LENGTH (packed_parms));
7927 }
7928 /* Check if we have a placeholder pack, which indicates we're
7929 in the context of a introduction list. In that case we want
7930 to match this pack to the single placeholder. */
7931 else if (arg_idx < nargs
7932 && TREE_CODE (TREE_VEC_ELT (inner_args, arg_idx)) == WILDCARD_DECL
7933 && WILDCARD_PACK_P (TREE_VEC_ELT (inner_args, arg_idx)))
7934 {
7935 nargs = arg_idx + 1;
7936 packed_args = make_tree_vec (1);
7937 }
7938 else
7939 packed_args = make_tree_vec (nargs - arg_idx);
7940
7941 /* Convert the remaining arguments, which will be a part of the
7942 parameter pack "parm". */
7943 int first_pack_arg = arg_idx;
7944 for (; arg_idx < nargs; ++arg_idx)
7945 {
7946 tree arg = TREE_VEC_ELT (inner_args, arg_idx);
7947 tree actual_parm = TREE_VALUE (parm);
7948 int pack_idx = arg_idx - first_pack_arg;
7949
7950 if (packed_parms)
7951 {
7952 /* Once we've packed as many args as we have types, stop. */
7953 if (pack_idx >= TREE_VEC_LENGTH (packed_parms))
7954 break;
7955 else if (PACK_EXPANSION_P (arg))
7956 /* We don't know how many args we have yet, just
7957 use the unconverted ones for now. */
7958 return NULL_TREE;
7959 else
7960 actual_parm = TREE_VEC_ELT (packed_parms, pack_idx);
7961 }
7962
7963 if (arg == error_mark_node)
7964 {
7965 if (complain & tf_error)
7966 error ("template argument %d is invalid", arg_idx + 1);
7967 }
7968 else
7969 arg = convert_template_argument (actual_parm,
7970 arg, new_args, complain, parm_idx,
7971 in_decl);
7972 if (arg == error_mark_node)
7973 (*lost)++;
7974 TREE_VEC_ELT (packed_args, pack_idx) = arg;
7975 }
7976
7977 if (arg_idx - first_pack_arg < TREE_VEC_LENGTH (packed_args)
7978 && TREE_VEC_LENGTH (packed_args) > 0)
7979 {
7980 if (complain & tf_error)
7981 error ("wrong number of template arguments (%d, should be %d)",
7982 arg_idx - first_pack_arg, TREE_VEC_LENGTH (packed_args));
7983 return error_mark_node;
7984 }
7985
7986 if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
7987 || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
7988 argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
7989 else
7990 {
7991 argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
7992 TREE_CONSTANT (argument_pack) = 1;
7993 }
7994
7995 SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
7996 if (CHECKING_P)
7997 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
7998 TREE_VEC_LENGTH (packed_args));
7999 return argument_pack;
8000 }
8001
8002 /* Returns the number of pack expansions in the template argument vector
8003 ARGS. */
8004
8005 static int
8006 pack_expansion_args_count (tree args)
8007 {
8008 int i;
8009 int count = 0;
8010 if (args)
8011 for (i = 0; i < TREE_VEC_LENGTH (args); ++i)
8012 {
8013 tree elt = TREE_VEC_ELT (args, i);
8014 if (elt && PACK_EXPANSION_P (elt))
8015 ++count;
8016 }
8017 return count;
8018 }
8019
8020 /* Convert all template arguments to their appropriate types, and
8021 return a vector containing the innermost resulting template
8022 arguments. If any error occurs, return error_mark_node. Error and
8023 warning messages are issued under control of COMPLAIN.
8024
8025 If REQUIRE_ALL_ARGS is false, argument deduction will be performed
8026 for arguments not specified in ARGS. Otherwise, if
8027 USE_DEFAULT_ARGS is true, default arguments will be used to fill in
8028 unspecified arguments. If REQUIRE_ALL_ARGS is true, but
8029 USE_DEFAULT_ARGS is false, then all arguments must be specified in
8030 ARGS. */
8031
8032 static tree
8033 coerce_template_parms (tree parms,
8034 tree args,
8035 tree in_decl,
8036 tsubst_flags_t complain,
8037 bool require_all_args,
8038 bool use_default_args)
8039 {
8040 int nparms, nargs, parm_idx, arg_idx, lost = 0;
8041 tree orig_inner_args;
8042 tree inner_args;
8043 tree new_args;
8044 tree new_inner_args;
8045 int saved_unevaluated_operand;
8046 int saved_inhibit_evaluation_warnings;
8047
8048 /* When used as a boolean value, indicates whether this is a
8049 variadic template parameter list. Since it's an int, we can also
8050 subtract it from nparms to get the number of non-variadic
8051 parameters. */
8052 int variadic_p = 0;
8053 int variadic_args_p = 0;
8054 int post_variadic_parms = 0;
8055
8056 /* Likewise for parameters with default arguments. */
8057 int default_p = 0;
8058
8059 if (args == error_mark_node)
8060 return error_mark_node;
8061
8062 nparms = TREE_VEC_LENGTH (parms);
8063
8064 /* Determine if there are any parameter packs or default arguments. */
8065 for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
8066 {
8067 tree parm = TREE_VEC_ELT (parms, parm_idx);
8068 if (variadic_p)
8069 ++post_variadic_parms;
8070 if (template_parameter_pack_p (TREE_VALUE (parm)))
8071 ++variadic_p;
8072 if (TREE_PURPOSE (parm))
8073 ++default_p;
8074 }
8075
8076 inner_args = orig_inner_args = INNERMOST_TEMPLATE_ARGS (args);
8077 /* If there are no parameters that follow a parameter pack, we need to
8078 expand any argument packs so that we can deduce a parameter pack from
8079 some non-packed args followed by an argument pack, as in variadic85.C.
8080 If there are such parameters, we need to leave argument packs intact
8081 so the arguments are assigned properly. This can happen when dealing
8082 with a nested class inside a partial specialization of a class
8083 template, as in variadic92.C, or when deducing a template parameter pack
8084 from a sub-declarator, as in variadic114.C. */
8085 if (!post_variadic_parms)
8086 inner_args = expand_template_argument_pack (inner_args);
8087
8088 /* Count any pack expansion args. */
8089 variadic_args_p = pack_expansion_args_count (inner_args);
8090
8091 nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
8092 if ((nargs - variadic_args_p > nparms && !variadic_p)
8093 || (nargs < nparms - variadic_p
8094 && require_all_args
8095 && !variadic_args_p
8096 && (!use_default_args
8097 || (TREE_VEC_ELT (parms, nargs) != error_mark_node
8098 && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
8099 {
8100 if (complain & tf_error)
8101 {
8102 if (variadic_p || default_p)
8103 {
8104 nparms -= variadic_p + default_p;
8105 error ("wrong number of template arguments "
8106 "(%d, should be at least %d)", nargs, nparms);
8107 }
8108 else
8109 error ("wrong number of template arguments "
8110 "(%d, should be %d)", nargs, nparms);
8111
8112 if (in_decl)
8113 inform (DECL_SOURCE_LOCATION (in_decl),
8114 "provided for %qD", in_decl);
8115 }
8116
8117 return error_mark_node;
8118 }
8119 /* We can't pass a pack expansion to a non-pack parameter of an alias
8120 template (DR 1430). */
8121 else if (in_decl
8122 && (DECL_ALIAS_TEMPLATE_P (in_decl)
8123 || concept_template_p (in_decl))
8124 && variadic_args_p
8125 && nargs - variadic_args_p < nparms - variadic_p)
8126 {
8127 if (complain & tf_error)
8128 {
8129 for (int i = 0; i < TREE_VEC_LENGTH (inner_args); ++i)
8130 {
8131 tree arg = TREE_VEC_ELT (inner_args, i);
8132 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
8133
8134 if (PACK_EXPANSION_P (arg)
8135 && !template_parameter_pack_p (parm))
8136 {
8137 if (DECL_ALIAS_TEMPLATE_P (in_decl))
8138 error_at (location_of (arg),
8139 "pack expansion argument for non-pack parameter "
8140 "%qD of alias template %qD", parm, in_decl);
8141 else
8142 error_at (location_of (arg),
8143 "pack expansion argument for non-pack parameter "
8144 "%qD of concept %qD", parm, in_decl);
8145 inform (DECL_SOURCE_LOCATION (parm), "declared here");
8146 goto found;
8147 }
8148 }
8149 gcc_unreachable ();
8150 found:;
8151 }
8152 return error_mark_node;
8153 }
8154
8155 /* We need to evaluate the template arguments, even though this
8156 template-id may be nested within a "sizeof". */
8157 saved_unevaluated_operand = cp_unevaluated_operand;
8158 cp_unevaluated_operand = 0;
8159 saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
8160 c_inhibit_evaluation_warnings = 0;
8161 new_inner_args = make_tree_vec (nparms);
8162 new_args = add_outermost_template_args (args, new_inner_args);
8163 int pack_adjust = 0;
8164 for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
8165 {
8166 tree arg;
8167 tree parm;
8168
8169 /* Get the Ith template parameter. */
8170 parm = TREE_VEC_ELT (parms, parm_idx);
8171
8172 if (parm == error_mark_node)
8173 {
8174 TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
8175 continue;
8176 }
8177
8178 /* Calculate the next argument. */
8179 if (arg_idx < nargs)
8180 arg = TREE_VEC_ELT (inner_args, arg_idx);
8181 else
8182 arg = NULL_TREE;
8183
8184 if (template_parameter_pack_p (TREE_VALUE (parm))
8185 && !(arg && ARGUMENT_PACK_P (arg)))
8186 {
8187 /* Some arguments will be placed in the
8188 template parameter pack PARM. */
8189 arg = coerce_template_parameter_pack (parms, parm_idx, args,
8190 inner_args, arg_idx,
8191 new_args, &lost,
8192 in_decl, complain);
8193
8194 if (arg == NULL_TREE)
8195 {
8196 /* We don't know how many args we have yet, just use the
8197 unconverted (and still packed) ones for now. */
8198 new_inner_args = orig_inner_args;
8199 arg_idx = nargs;
8200 break;
8201 }
8202
8203 TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
8204
8205 /* Store this argument. */
8206 if (arg == error_mark_node)
8207 {
8208 lost++;
8209 /* We are done with all of the arguments. */
8210 arg_idx = nargs;
8211 }
8212 else
8213 {
8214 pack_adjust = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg)) - 1;
8215 arg_idx += pack_adjust;
8216 }
8217
8218 continue;
8219 }
8220 else if (arg)
8221 {
8222 if (PACK_EXPANSION_P (arg))
8223 {
8224 /* "If every valid specialization of a variadic template
8225 requires an empty template parameter pack, the template is
8226 ill-formed, no diagnostic required." So check that the
8227 pattern works with this parameter. */
8228 tree pattern = PACK_EXPANSION_PATTERN (arg);
8229 tree conv = convert_template_argument (TREE_VALUE (parm),
8230 pattern, new_args,
8231 complain, parm_idx,
8232 in_decl);
8233 if (conv == error_mark_node)
8234 {
8235 if (complain & tf_error)
8236 inform (input_location, "so any instantiation with a "
8237 "non-empty parameter pack would be ill-formed");
8238 ++lost;
8239 }
8240 else if (TYPE_P (conv) && !TYPE_P (pattern))
8241 /* Recover from missing typename. */
8242 TREE_VEC_ELT (inner_args, arg_idx)
8243 = make_pack_expansion (conv, complain);
8244
8245 /* We don't know how many args we have yet, just
8246 use the unconverted ones for now. */
8247 new_inner_args = inner_args;
8248 arg_idx = nargs;
8249 break;
8250 }
8251 }
8252 else if (require_all_args)
8253 {
8254 /* There must be a default arg in this case. */
8255 arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
8256 complain, in_decl);
8257 /* The position of the first default template argument,
8258 is also the number of non-defaulted arguments in NEW_INNER_ARGS.
8259 Record that. */
8260 if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
8261 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
8262 arg_idx - pack_adjust);
8263 }
8264 else
8265 break;
8266
8267 if (arg == error_mark_node)
8268 {
8269 if (complain & tf_error)
8270 error ("template argument %d is invalid", arg_idx + 1);
8271 }
8272 else if (!arg)
8273 /* This only occurs if there was an error in the template
8274 parameter list itself (which we would already have
8275 reported) that we are trying to recover from, e.g., a class
8276 template with a parameter list such as
8277 template<typename..., typename>. */
8278 ++lost;
8279 else
8280 arg = convert_template_argument (TREE_VALUE (parm),
8281 arg, new_args, complain,
8282 parm_idx, in_decl);
8283
8284 if (arg == error_mark_node)
8285 lost++;
8286 TREE_VEC_ELT (new_inner_args, arg_idx - pack_adjust) = arg;
8287 }
8288 cp_unevaluated_operand = saved_unevaluated_operand;
8289 c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
8290
8291 if (variadic_p && arg_idx < nargs)
8292 {
8293 if (complain & tf_error)
8294 {
8295 error ("wrong number of template arguments "
8296 "(%d, should be %d)", nargs, arg_idx);
8297 if (in_decl)
8298 error ("provided for %q+D", in_decl);
8299 }
8300 return error_mark_node;
8301 }
8302
8303 if (lost)
8304 return error_mark_node;
8305
8306 if (CHECKING_P && !NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
8307 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
8308 TREE_VEC_LENGTH (new_inner_args));
8309
8310 return new_inner_args;
8311 }
8312
8313 /* Convert all template arguments to their appropriate types, and
8314 return a vector containing the innermost resulting template
8315 arguments. If any error occurs, return error_mark_node. Error and
8316 warning messages are not issued.
8317
8318 Note that no function argument deduction is performed, and default
8319 arguments are used to fill in unspecified arguments. */
8320 tree
8321 coerce_template_parms (tree parms, tree args, tree in_decl)
8322 {
8323 return coerce_template_parms (parms, args, in_decl, tf_none, true, true);
8324 }
8325
8326 /* Convert all template arguments to their appropriate type, and
8327 instantiate default arguments as needed. This returns a vector
8328 containing the innermost resulting template arguments, or
8329 error_mark_node if unsuccessful. */
8330 tree
8331 coerce_template_parms (tree parms, tree args, tree in_decl,
8332 tsubst_flags_t complain)
8333 {
8334 return coerce_template_parms (parms, args, in_decl, complain, true, true);
8335 }
8336
8337 /* Like coerce_template_parms. If PARMS represents all template
8338 parameters levels, this function returns a vector of vectors
8339 representing all the resulting argument levels. Note that in this
8340 case, only the innermost arguments are coerced because the
8341 outermost ones are supposed to have been coerced already.
8342
8343 Otherwise, if PARMS represents only (the innermost) vector of
8344 parameters, this function returns a vector containing just the
8345 innermost resulting arguments. */
8346
8347 static tree
8348 coerce_innermost_template_parms (tree parms,
8349 tree args,
8350 tree in_decl,
8351 tsubst_flags_t complain,
8352 bool require_all_args,
8353 bool use_default_args)
8354 {
8355 int parms_depth = TMPL_PARMS_DEPTH (parms);
8356 int args_depth = TMPL_ARGS_DEPTH (args);
8357 tree coerced_args;
8358
8359 if (parms_depth > 1)
8360 {
8361 coerced_args = make_tree_vec (parms_depth);
8362 tree level;
8363 int cur_depth;
8364
8365 for (level = parms, cur_depth = parms_depth;
8366 parms_depth > 0 && level != NULL_TREE;
8367 level = TREE_CHAIN (level), --cur_depth)
8368 {
8369 tree l;
8370 if (cur_depth == args_depth)
8371 l = coerce_template_parms (TREE_VALUE (level),
8372 args, in_decl, complain,
8373 require_all_args,
8374 use_default_args);
8375 else
8376 l = TMPL_ARGS_LEVEL (args, cur_depth);
8377
8378 if (l == error_mark_node)
8379 return error_mark_node;
8380
8381 SET_TMPL_ARGS_LEVEL (coerced_args, cur_depth, l);
8382 }
8383 }
8384 else
8385 coerced_args = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parms),
8386 args, in_decl, complain,
8387 require_all_args,
8388 use_default_args);
8389 return coerced_args;
8390 }
8391
8392 /* Returns 1 if template args OT and NT are equivalent. */
8393
8394 int
8395 template_args_equal (tree ot, tree nt, bool partial_order /* = false */)
8396 {
8397 if (nt == ot)
8398 return 1;
8399 if (nt == NULL_TREE || ot == NULL_TREE)
8400 return false;
8401 if (nt == any_targ_node || ot == any_targ_node)
8402 return true;
8403
8404 if (TREE_CODE (nt) == TREE_VEC)
8405 /* For member templates */
8406 return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
8407 else if (PACK_EXPANSION_P (ot))
8408 return (PACK_EXPANSION_P (nt)
8409 && template_args_equal (PACK_EXPANSION_PATTERN (ot),
8410 PACK_EXPANSION_PATTERN (nt))
8411 && template_args_equal (PACK_EXPANSION_EXTRA_ARGS (ot),
8412 PACK_EXPANSION_EXTRA_ARGS (nt)));
8413 else if (ARGUMENT_PACK_P (ot))
8414 {
8415 int i, len;
8416 tree opack, npack;
8417
8418 if (!ARGUMENT_PACK_P (nt))
8419 return 0;
8420
8421 opack = ARGUMENT_PACK_ARGS (ot);
8422 npack = ARGUMENT_PACK_ARGS (nt);
8423 len = TREE_VEC_LENGTH (opack);
8424 if (TREE_VEC_LENGTH (npack) != len)
8425 return 0;
8426 for (i = 0; i < len; ++i)
8427 if (!template_args_equal (TREE_VEC_ELT (opack, i),
8428 TREE_VEC_ELT (npack, i)))
8429 return 0;
8430 return 1;
8431 }
8432 else if (ot && TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
8433 gcc_unreachable ();
8434 else if (TYPE_P (nt))
8435 {
8436 if (!TYPE_P (ot))
8437 return false;
8438 /* Don't treat an alias template specialization with dependent
8439 arguments as equivalent to its underlying type when used as a
8440 template argument; we need them to be distinct so that we
8441 substitute into the specialization arguments at instantiation
8442 time. And aliases can't be equivalent without being ==, so
8443 we don't need to look any deeper.
8444
8445 During partial ordering, however, we need to treat them normally so
8446 that we can order uses of the same alias with different
8447 cv-qualification (79960). */
8448 if (!partial_order
8449 && (TYPE_ALIAS_P (nt) || TYPE_ALIAS_P (ot)))
8450 return false;
8451 else
8452 return same_type_p (ot, nt);
8453 }
8454 else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
8455 return 0;
8456 else
8457 {
8458 /* Try to treat a template non-type argument that has been converted
8459 to the parameter type as equivalent to one that hasn't yet. */
8460 for (enum tree_code code1 = TREE_CODE (ot);
8461 CONVERT_EXPR_CODE_P (code1)
8462 || code1 == NON_LVALUE_EXPR;
8463 code1 = TREE_CODE (ot))
8464 ot = TREE_OPERAND (ot, 0);
8465 for (enum tree_code code2 = TREE_CODE (nt);
8466 CONVERT_EXPR_CODE_P (code2)
8467 || code2 == NON_LVALUE_EXPR;
8468 code2 = TREE_CODE (nt))
8469 nt = TREE_OPERAND (nt, 0);
8470
8471 return cp_tree_equal (ot, nt);
8472 }
8473 }
8474
8475 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets of
8476 template arguments. Returns 0 otherwise, and updates OLDARG_PTR and
8477 NEWARG_PTR with the offending arguments if they are non-NULL. */
8478
8479 int
8480 comp_template_args (tree oldargs, tree newargs,
8481 tree *oldarg_ptr, tree *newarg_ptr,
8482 bool partial_order)
8483 {
8484 int i;
8485
8486 if (oldargs == newargs)
8487 return 1;
8488
8489 if (!oldargs || !newargs)
8490 return 0;
8491
8492 if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
8493 return 0;
8494
8495 for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
8496 {
8497 tree nt = TREE_VEC_ELT (newargs, i);
8498 tree ot = TREE_VEC_ELT (oldargs, i);
8499
8500 if (! template_args_equal (ot, nt, partial_order))
8501 {
8502 if (oldarg_ptr != NULL)
8503 *oldarg_ptr = ot;
8504 if (newarg_ptr != NULL)
8505 *newarg_ptr = nt;
8506 return 0;
8507 }
8508 }
8509 return 1;
8510 }
8511
8512 inline bool
8513 comp_template_args_porder (tree oargs, tree nargs)
8514 {
8515 return comp_template_args (oargs, nargs, NULL, NULL, true);
8516 }
8517
8518 static void
8519 add_pending_template (tree d)
8520 {
8521 tree ti = (TYPE_P (d)
8522 ? CLASSTYPE_TEMPLATE_INFO (d)
8523 : DECL_TEMPLATE_INFO (d));
8524 struct pending_template *pt;
8525 int level;
8526
8527 if (TI_PENDING_TEMPLATE_FLAG (ti))
8528 return;
8529
8530 /* We are called both from instantiate_decl, where we've already had a
8531 tinst_level pushed, and instantiate_template, where we haven't.
8532 Compensate. */
8533 level = !current_tinst_level || current_tinst_level->decl != d;
8534
8535 if (level)
8536 push_tinst_level (d);
8537
8538 pt = ggc_alloc<pending_template> ();
8539 pt->next = NULL;
8540 pt->tinst = current_tinst_level;
8541 if (last_pending_template)
8542 last_pending_template->next = pt;
8543 else
8544 pending_templates = pt;
8545
8546 last_pending_template = pt;
8547
8548 TI_PENDING_TEMPLATE_FLAG (ti) = 1;
8549
8550 if (level)
8551 pop_tinst_level ();
8552 }
8553
8554
8555 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
8556 ARGLIST. Valid choices for FNS are given in the cp-tree.def
8557 documentation for TEMPLATE_ID_EXPR. */
8558
8559 tree
8560 lookup_template_function (tree fns, tree arglist)
8561 {
8562 tree type;
8563
8564 if (fns == error_mark_node || arglist == error_mark_node)
8565 return error_mark_node;
8566
8567 gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
8568
8569 if (!is_overloaded_fn (fns) && !identifier_p (fns))
8570 {
8571 error ("%q#D is not a function template", fns);
8572 return error_mark_node;
8573 }
8574
8575 if (BASELINK_P (fns))
8576 {
8577 BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
8578 unknown_type_node,
8579 BASELINK_FUNCTIONS (fns),
8580 arglist);
8581 return fns;
8582 }
8583
8584 type = TREE_TYPE (fns);
8585 if (TREE_CODE (fns) == OVERLOAD || !type)
8586 type = unknown_type_node;
8587
8588 return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
8589 }
8590
8591 /* Within the scope of a template class S<T>, the name S gets bound
8592 (in build_self_reference) to a TYPE_DECL for the class, not a
8593 TEMPLATE_DECL. If DECL is a TYPE_DECL for current_class_type,
8594 or one of its enclosing classes, and that type is a template,
8595 return the associated TEMPLATE_DECL. Otherwise, the original
8596 DECL is returned.
8597
8598 Also handle the case when DECL is a TREE_LIST of ambiguous
8599 injected-class-names from different bases. */
8600
8601 tree
8602 maybe_get_template_decl_from_type_decl (tree decl)
8603 {
8604 if (decl == NULL_TREE)
8605 return decl;
8606
8607 /* DR 176: A lookup that finds an injected-class-name (10.2
8608 [class.member.lookup]) can result in an ambiguity in certain cases
8609 (for example, if it is found in more than one base class). If all of
8610 the injected-class-names that are found refer to specializations of
8611 the same class template, and if the name is followed by a
8612 template-argument-list, the reference refers to the class template
8613 itself and not a specialization thereof, and is not ambiguous. */
8614 if (TREE_CODE (decl) == TREE_LIST)
8615 {
8616 tree t, tmpl = NULL_TREE;
8617 for (t = decl; t; t = TREE_CHAIN (t))
8618 {
8619 tree elt = maybe_get_template_decl_from_type_decl (TREE_VALUE (t));
8620 if (!tmpl)
8621 tmpl = elt;
8622 else if (tmpl != elt)
8623 break;
8624 }
8625 if (tmpl && t == NULL_TREE)
8626 return tmpl;
8627 else
8628 return decl;
8629 }
8630
8631 return (decl != NULL_TREE
8632 && DECL_SELF_REFERENCE_P (decl)
8633 && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
8634 ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
8635 }
8636
8637 /* Given an IDENTIFIER_NODE (or type TEMPLATE_DECL) and a chain of
8638 parameters, find the desired type.
8639
8640 D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
8641
8642 IN_DECL, if non-NULL, is the template declaration we are trying to
8643 instantiate.
8644
8645 If ENTERING_SCOPE is nonzero, we are about to enter the scope of
8646 the class we are looking up.
8647
8648 Issue error and warning messages under control of COMPLAIN.
8649
8650 If the template class is really a local class in a template
8651 function, then the FUNCTION_CONTEXT is the function in which it is
8652 being instantiated.
8653
8654 ??? Note that this function is currently called *twice* for each
8655 template-id: the first time from the parser, while creating the
8656 incomplete type (finish_template_type), and the second type during the
8657 real instantiation (instantiate_template_class). This is surely something
8658 that we want to avoid. It also causes some problems with argument
8659 coercion (see convert_nontype_argument for more information on this). */
8660
8661 static tree
8662 lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
8663 int entering_scope, tsubst_flags_t complain)
8664 {
8665 tree templ = NULL_TREE, parmlist;
8666 tree t;
8667 spec_entry **slot;
8668 spec_entry *entry;
8669 spec_entry elt;
8670 hashval_t hash;
8671
8672 if (identifier_p (d1))
8673 {
8674 tree value = innermost_non_namespace_value (d1);
8675 if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
8676 templ = value;
8677 else
8678 {
8679 if (context)
8680 push_decl_namespace (context);
8681 templ = lookup_name (d1);
8682 templ = maybe_get_template_decl_from_type_decl (templ);
8683 if (context)
8684 pop_decl_namespace ();
8685 }
8686 if (templ)
8687 context = DECL_CONTEXT (templ);
8688 }
8689 else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
8690 {
8691 tree type = TREE_TYPE (d1);
8692
8693 /* If we are declaring a constructor, say A<T>::A<T>, we will get
8694 an implicit typename for the second A. Deal with it. */
8695 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
8696 type = TREE_TYPE (type);
8697
8698 if (CLASSTYPE_TEMPLATE_INFO (type))
8699 {
8700 templ = CLASSTYPE_TI_TEMPLATE (type);
8701 d1 = DECL_NAME (templ);
8702 }
8703 }
8704 else if (TREE_CODE (d1) == ENUMERAL_TYPE
8705 || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
8706 {
8707 templ = TYPE_TI_TEMPLATE (d1);
8708 d1 = DECL_NAME (templ);
8709 }
8710 else if (DECL_TYPE_TEMPLATE_P (d1))
8711 {
8712 templ = d1;
8713 d1 = DECL_NAME (templ);
8714 context = DECL_CONTEXT (templ);
8715 }
8716 else if (DECL_TEMPLATE_TEMPLATE_PARM_P (d1))
8717 {
8718 templ = d1;
8719 d1 = DECL_NAME (templ);
8720 }
8721
8722 /* Issue an error message if we didn't find a template. */
8723 if (! templ)
8724 {
8725 if (complain & tf_error)
8726 error ("%qT is not a template", d1);
8727 return error_mark_node;
8728 }
8729
8730 if (TREE_CODE (templ) != TEMPLATE_DECL
8731 /* Make sure it's a user visible template, if it was named by
8732 the user. */
8733 || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
8734 && !PRIMARY_TEMPLATE_P (templ)))
8735 {
8736 if (complain & tf_error)
8737 {
8738 error ("non-template type %qT used as a template", d1);
8739 if (in_decl)
8740 error ("for template declaration %q+D", in_decl);
8741 }
8742 return error_mark_node;
8743 }
8744
8745 complain &= ~tf_user;
8746
8747 /* An alias that just changes the name of a template is equivalent to the
8748 other template, so if any of the arguments are pack expansions, strip
8749 the alias to avoid problems with a pack expansion passed to a non-pack
8750 alias template parameter (DR 1430). */
8751 if (pack_expansion_args_count (INNERMOST_TEMPLATE_ARGS (arglist)))
8752 templ = get_underlying_template (templ);
8753
8754 if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
8755 {
8756 tree parm;
8757 tree arglist2 = coerce_template_args_for_ttp (templ, arglist, complain);
8758 if (arglist2 == error_mark_node
8759 || (!uses_template_parms (arglist2)
8760 && check_instantiated_args (templ, arglist2, complain)))
8761 return error_mark_node;
8762
8763 parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
8764 return parm;
8765 }
8766 else
8767 {
8768 tree template_type = TREE_TYPE (templ);
8769 tree gen_tmpl;
8770 tree type_decl;
8771 tree found = NULL_TREE;
8772 int arg_depth;
8773 int parm_depth;
8774 int is_dependent_type;
8775 int use_partial_inst_tmpl = false;
8776
8777 if (template_type == error_mark_node)
8778 /* An error occurred while building the template TEMPL, and a
8779 diagnostic has most certainly been emitted for that
8780 already. Let's propagate that error. */
8781 return error_mark_node;
8782
8783 gen_tmpl = most_general_template (templ);
8784 parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
8785 parm_depth = TMPL_PARMS_DEPTH (parmlist);
8786 arg_depth = TMPL_ARGS_DEPTH (arglist);
8787
8788 if (arg_depth == 1 && parm_depth > 1)
8789 {
8790 /* We've been given an incomplete set of template arguments.
8791 For example, given:
8792
8793 template <class T> struct S1 {
8794 template <class U> struct S2 {};
8795 template <class U> struct S2<U*> {};
8796 };
8797
8798 we will be called with an ARGLIST of `U*', but the
8799 TEMPLATE will be `template <class T> template
8800 <class U> struct S1<T>::S2'. We must fill in the missing
8801 arguments. */
8802 tree ti = TYPE_TEMPLATE_INFO_MAYBE_ALIAS (TREE_TYPE (templ));
8803 arglist = add_outermost_template_args (TI_ARGS (ti), arglist);
8804 arg_depth = TMPL_ARGS_DEPTH (arglist);
8805 }
8806
8807 /* Now we should have enough arguments. */
8808 gcc_assert (parm_depth == arg_depth);
8809
8810 /* From here on, we're only interested in the most general
8811 template. */
8812
8813 /* Calculate the BOUND_ARGS. These will be the args that are
8814 actually tsubst'd into the definition to create the
8815 instantiation. */
8816 arglist = coerce_innermost_template_parms (parmlist, arglist, gen_tmpl,
8817 complain,
8818 /*require_all_args=*/true,
8819 /*use_default_args=*/true);
8820
8821 if (arglist == error_mark_node)
8822 /* We were unable to bind the arguments. */
8823 return error_mark_node;
8824
8825 /* In the scope of a template class, explicit references to the
8826 template class refer to the type of the template, not any
8827 instantiation of it. For example, in:
8828
8829 template <class T> class C { void f(C<T>); }
8830
8831 the `C<T>' is just the same as `C'. Outside of the
8832 class, however, such a reference is an instantiation. */
8833 if (entering_scope
8834 || !PRIMARY_TEMPLATE_P (gen_tmpl)
8835 || currently_open_class (template_type))
8836 {
8837 tree tinfo = TYPE_TEMPLATE_INFO (template_type);
8838
8839 if (tinfo && comp_template_args (TI_ARGS (tinfo), arglist))
8840 return template_type;
8841 }
8842
8843 /* If we already have this specialization, return it. */
8844 elt.tmpl = gen_tmpl;
8845 elt.args = arglist;
8846 elt.spec = NULL_TREE;
8847 hash = spec_hasher::hash (&elt);
8848 entry = type_specializations->find_with_hash (&elt, hash);
8849
8850 if (entry)
8851 return entry->spec;
8852
8853 /* If the the template's constraints are not satisfied,
8854 then we cannot form a valid type.
8855
8856 Note that the check is deferred until after the hash
8857 lookup. This prevents redundant checks on previously
8858 instantiated specializations. */
8859 if (flag_concepts && !constraints_satisfied_p (gen_tmpl, arglist))
8860 {
8861 if (complain & tf_error)
8862 {
8863 error ("template constraint failure");
8864 diagnose_constraints (input_location, gen_tmpl, arglist);
8865 }
8866 return error_mark_node;
8867 }
8868
8869 is_dependent_type = uses_template_parms (arglist);
8870
8871 /* If the deduced arguments are invalid, then the binding
8872 failed. */
8873 if (!is_dependent_type
8874 && check_instantiated_args (gen_tmpl,
8875 INNERMOST_TEMPLATE_ARGS (arglist),
8876 complain))
8877 return error_mark_node;
8878
8879 if (!is_dependent_type
8880 && !PRIMARY_TEMPLATE_P (gen_tmpl)
8881 && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
8882 && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
8883 {
8884 found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
8885 DECL_NAME (gen_tmpl),
8886 /*tag_scope=*/ts_global);
8887 return found;
8888 }
8889
8890 context = tsubst (DECL_CONTEXT (gen_tmpl), arglist,
8891 complain, in_decl);
8892 if (context == error_mark_node)
8893 return error_mark_node;
8894
8895 if (!context)
8896 context = global_namespace;
8897
8898 /* Create the type. */
8899 if (DECL_ALIAS_TEMPLATE_P (gen_tmpl))
8900 {
8901 /* The user referred to a specialization of an alias
8902 template represented by GEN_TMPL.
8903
8904 [temp.alias]/2 says:
8905
8906 When a template-id refers to the specialization of an
8907 alias template, it is equivalent to the associated
8908 type obtained by substitution of its
8909 template-arguments for the template-parameters in the
8910 type-id of the alias template. */
8911
8912 t = tsubst (TREE_TYPE (gen_tmpl), arglist, complain, in_decl);
8913 /* Note that the call above (by indirectly calling
8914 register_specialization in tsubst_decl) registers the
8915 TYPE_DECL representing the specialization of the alias
8916 template. So next time someone substitutes ARGLIST for
8917 the template parms into the alias template (GEN_TMPL),
8918 she'll get that TYPE_DECL back. */
8919
8920 if (t == error_mark_node)
8921 return t;
8922 }
8923 else if (TREE_CODE (template_type) == ENUMERAL_TYPE)
8924 {
8925 if (!is_dependent_type)
8926 {
8927 set_current_access_from_decl (TYPE_NAME (template_type));
8928 t = start_enum (TYPE_IDENTIFIER (template_type), NULL_TREE,
8929 tsubst (ENUM_UNDERLYING_TYPE (template_type),
8930 arglist, complain, in_decl),
8931 tsubst_attributes (TYPE_ATTRIBUTES (template_type),
8932 arglist, complain, in_decl),
8933 SCOPED_ENUM_P (template_type), NULL);
8934
8935 if (t == error_mark_node)
8936 return t;
8937 }
8938 else
8939 {
8940 /* We don't want to call start_enum for this type, since
8941 the values for the enumeration constants may involve
8942 template parameters. And, no one should be interested
8943 in the enumeration constants for such a type. */
8944 t = cxx_make_type (ENUMERAL_TYPE);
8945 SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
8946 }
8947 SET_OPAQUE_ENUM_P (t, OPAQUE_ENUM_P (template_type));
8948 ENUM_FIXED_UNDERLYING_TYPE_P (t)
8949 = ENUM_FIXED_UNDERLYING_TYPE_P (template_type);
8950 }
8951 else if (CLASS_TYPE_P (template_type))
8952 {
8953 t = make_class_type (TREE_CODE (template_type));
8954 CLASSTYPE_DECLARED_CLASS (t)
8955 = CLASSTYPE_DECLARED_CLASS (template_type);
8956 SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
8957
8958 /* A local class. Make sure the decl gets registered properly. */
8959 if (context == current_function_decl)
8960 pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current);
8961
8962 if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
8963 /* This instantiation is another name for the primary
8964 template type. Set the TYPE_CANONICAL field
8965 appropriately. */
8966 TYPE_CANONICAL (t) = template_type;
8967 else if (any_template_arguments_need_structural_equality_p (arglist))
8968 /* Some of the template arguments require structural
8969 equality testing, so this template class requires
8970 structural equality testing. */
8971 SET_TYPE_STRUCTURAL_EQUALITY (t);
8972 }
8973 else
8974 gcc_unreachable ();
8975
8976 /* If we called start_enum or pushtag above, this information
8977 will already be set up. */
8978 if (!TYPE_NAME (t))
8979 {
8980 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
8981
8982 type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
8983 DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
8984 DECL_SOURCE_LOCATION (type_decl)
8985 = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
8986 }
8987 else
8988 type_decl = TYPE_NAME (t);
8989
8990 if (CLASS_TYPE_P (template_type))
8991 {
8992 TREE_PRIVATE (type_decl)
8993 = TREE_PRIVATE (TYPE_MAIN_DECL (template_type));
8994 TREE_PROTECTED (type_decl)
8995 = TREE_PROTECTED (TYPE_MAIN_DECL (template_type));
8996 if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
8997 {
8998 DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
8999 DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
9000 }
9001 }
9002
9003 if (OVERLOAD_TYPE_P (t)
9004 && !DECL_ALIAS_TEMPLATE_P (gen_tmpl))
9005 {
9006 static const char *tags[] = {"abi_tag", "may_alias"};
9007
9008 for (unsigned ix = 0; ix != 2; ix++)
9009 {
9010 tree attributes
9011 = lookup_attribute (tags[ix], TYPE_ATTRIBUTES (template_type));
9012
9013 if (attributes)
9014 TYPE_ATTRIBUTES (t)
9015 = tree_cons (TREE_PURPOSE (attributes),
9016 TREE_VALUE (attributes),
9017 TYPE_ATTRIBUTES (t));
9018 }
9019 }
9020
9021 /* Let's consider the explicit specialization of a member
9022 of a class template specialization that is implicitly instantiated,
9023 e.g.:
9024 template<class T>
9025 struct S
9026 {
9027 template<class U> struct M {}; //#0
9028 };
9029
9030 template<>
9031 template<>
9032 struct S<int>::M<char> //#1
9033 {
9034 int i;
9035 };
9036 [temp.expl.spec]/4 says this is valid.
9037
9038 In this case, when we write:
9039 S<int>::M<char> m;
9040
9041 M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
9042 the one of #0.
9043
9044 When we encounter #1, we want to store the partial instantiation
9045 of M (template<class T> S<int>::M<T>) in its CLASSTYPE_TI_TEMPLATE.
9046
9047 For all cases other than this "explicit specialization of member of a
9048 class template", we just want to store the most general template into
9049 the CLASSTYPE_TI_TEMPLATE of M.
9050
9051 This case of "explicit specialization of member of a class template"
9052 only happens when:
9053 1/ the enclosing class is an instantiation of, and therefore not
9054 the same as, the context of the most general template, and
9055 2/ we aren't looking at the partial instantiation itself, i.e.
9056 the innermost arguments are not the same as the innermost parms of
9057 the most general template.
9058
9059 So it's only when 1/ and 2/ happens that we want to use the partial
9060 instantiation of the member template in lieu of its most general
9061 template. */
9062
9063 if (PRIMARY_TEMPLATE_P (gen_tmpl)
9064 && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
9065 /* the enclosing class must be an instantiation... */
9066 && CLASS_TYPE_P (context)
9067 && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
9068 {
9069 TREE_VEC_LENGTH (arglist)--;
9070 ++processing_template_decl;
9071 tree tinfo = TYPE_TEMPLATE_INFO_MAYBE_ALIAS (TREE_TYPE (gen_tmpl));
9072 tree partial_inst_args =
9073 tsubst (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo)),
9074 arglist, complain, NULL_TREE);
9075 --processing_template_decl;
9076 TREE_VEC_LENGTH (arglist)++;
9077 if (partial_inst_args == error_mark_node)
9078 return error_mark_node;
9079 use_partial_inst_tmpl =
9080 /*...and we must not be looking at the partial instantiation
9081 itself. */
9082 !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
9083 partial_inst_args);
9084 }
9085
9086 if (!use_partial_inst_tmpl)
9087 /* This case is easy; there are no member templates involved. */
9088 found = gen_tmpl;
9089 else
9090 {
9091 /* This is a full instantiation of a member template. Find
9092 the partial instantiation of which this is an instance. */
9093
9094 /* Temporarily reduce by one the number of levels in the ARGLIST
9095 so as to avoid comparing the last set of arguments. */
9096 TREE_VEC_LENGTH (arglist)--;
9097 found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
9098 TREE_VEC_LENGTH (arglist)++;
9099 /* FOUND is either a proper class type, or an alias
9100 template specialization. In the later case, it's a
9101 TYPE_DECL, resulting from the substituting of arguments
9102 for parameters in the TYPE_DECL of the alias template
9103 done earlier. So be careful while getting the template
9104 of FOUND. */
9105 found = (TREE_CODE (found) == TEMPLATE_DECL
9106 ? found
9107 : (TREE_CODE (found) == TYPE_DECL
9108 ? DECL_TI_TEMPLATE (found)
9109 : CLASSTYPE_TI_TEMPLATE (found)));
9110 }
9111
9112 // Build template info for the new specialization.
9113 SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
9114
9115 elt.spec = t;
9116 slot = type_specializations->find_slot_with_hash (&elt, hash, INSERT);
9117 entry = ggc_alloc<spec_entry> ();
9118 *entry = elt;
9119 *slot = entry;
9120
9121 /* Note this use of the partial instantiation so we can check it
9122 later in maybe_process_partial_specialization. */
9123 DECL_TEMPLATE_INSTANTIATIONS (found)
9124 = tree_cons (arglist, t,
9125 DECL_TEMPLATE_INSTANTIATIONS (found));
9126
9127 if (TREE_CODE (template_type) == ENUMERAL_TYPE && !is_dependent_type
9128 && !DECL_ALIAS_TEMPLATE_P (gen_tmpl))
9129 /* Now that the type has been registered on the instantiations
9130 list, we set up the enumerators. Because the enumeration
9131 constants may involve the enumeration type itself, we make
9132 sure to register the type first, and then create the
9133 constants. That way, doing tsubst_expr for the enumeration
9134 constants won't result in recursive calls here; we'll find
9135 the instantiation and exit above. */
9136 tsubst_enum (template_type, t, arglist);
9137
9138 if (CLASS_TYPE_P (template_type) && is_dependent_type)
9139 /* If the type makes use of template parameters, the
9140 code that generates debugging information will crash. */
9141 DECL_IGNORED_P (TYPE_MAIN_DECL (t)) = 1;
9142
9143 /* Possibly limit visibility based on template args. */
9144 TREE_PUBLIC (type_decl) = 1;
9145 determine_visibility (type_decl);
9146
9147 inherit_targ_abi_tags (t);
9148
9149 return t;
9150 }
9151 }
9152
9153 /* Wrapper for lookup_template_class_1. */
9154
9155 tree
9156 lookup_template_class (tree d1, tree arglist, tree in_decl, tree context,
9157 int entering_scope, tsubst_flags_t complain)
9158 {
9159 tree ret;
9160 timevar_push (TV_TEMPLATE_INST);
9161 ret = lookup_template_class_1 (d1, arglist, in_decl, context,
9162 entering_scope, complain);
9163 timevar_pop (TV_TEMPLATE_INST);
9164 return ret;
9165 }
9166
9167 /* Return a TEMPLATE_ID_EXPR for the given variable template and ARGLIST. */
9168
9169 tree
9170 lookup_template_variable (tree templ, tree arglist)
9171 {
9172 /* The type of the expression is NULL_TREE since the template-id could refer
9173 to an explicit or partial specialization. */
9174 tree type = NULL_TREE;
9175 if (flag_concepts && variable_concept_p (templ))
9176 /* Except that concepts are always bool. */
9177 type = boolean_type_node;
9178 return build2 (TEMPLATE_ID_EXPR, type, templ, arglist);
9179 }
9180
9181 /* Instantiate a variable declaration from a TEMPLATE_ID_EXPR for use. */
9182
9183 tree
9184 finish_template_variable (tree var, tsubst_flags_t complain)
9185 {
9186 tree templ = TREE_OPERAND (var, 0);
9187 tree arglist = TREE_OPERAND (var, 1);
9188
9189 /* We never want to return a VAR_DECL for a variable concept, since they
9190 aren't instantiated. In a template, leave the TEMPLATE_ID_EXPR alone. */
9191 bool concept_p = flag_concepts && variable_concept_p (templ);
9192 if (concept_p && processing_template_decl)
9193 return var;
9194
9195 tree tmpl_args = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (templ));
9196 arglist = add_outermost_template_args (tmpl_args, arglist);
9197
9198 templ = most_general_template (templ);
9199 tree parms = DECL_TEMPLATE_PARMS (templ);
9200 arglist = coerce_innermost_template_parms (parms, arglist, templ, complain,
9201 /*req_all*/true,
9202 /*use_default*/true);
9203
9204 if (flag_concepts && !constraints_satisfied_p (templ, arglist))
9205 {
9206 if (complain & tf_error)
9207 {
9208 error ("use of invalid variable template %qE", var);
9209 diagnose_constraints (location_of (var), templ, arglist);
9210 }
9211 return error_mark_node;
9212 }
9213
9214 /* If a template-id refers to a specialization of a variable
9215 concept, then the expression is true if and only if the
9216 concept's constraints are satisfied by the given template
9217 arguments.
9218
9219 NOTE: This is an extension of Concepts Lite TS that
9220 allows constraints to be used in expressions. */
9221 if (concept_p)
9222 {
9223 tree decl = DECL_TEMPLATE_RESULT (templ);
9224 return evaluate_variable_concept (decl, arglist);
9225 }
9226
9227 return instantiate_template (templ, arglist, complain);
9228 }
9229
9230 /* Construct a TEMPLATE_ID_EXPR for the given variable template TEMPL having
9231 TARGS template args, and instantiate it if it's not dependent. */
9232
9233 tree
9234 lookup_and_finish_template_variable (tree templ, tree targs,
9235 tsubst_flags_t complain)
9236 {
9237 templ = lookup_template_variable (templ, targs);
9238 if (!any_dependent_template_arguments_p (targs))
9239 {
9240 templ = finish_template_variable (templ, complain);
9241 mark_used (templ);
9242 }
9243
9244 return convert_from_reference (templ);
9245 }
9246
9247 \f
9248 struct pair_fn_data
9249 {
9250 tree_fn_t fn;
9251 tree_fn_t any_fn;
9252 void *data;
9253 /* True when we should also visit template parameters that occur in
9254 non-deduced contexts. */
9255 bool include_nondeduced_p;
9256 hash_set<tree> *visited;
9257 };
9258
9259 /* Called from for_each_template_parm via walk_tree. */
9260
9261 static tree
9262 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
9263 {
9264 tree t = *tp;
9265 struct pair_fn_data *pfd = (struct pair_fn_data *) d;
9266 tree_fn_t fn = pfd->fn;
9267 void *data = pfd->data;
9268 tree result = NULL_TREE;
9269
9270 #define WALK_SUBTREE(NODE) \
9271 do \
9272 { \
9273 result = for_each_template_parm (NODE, fn, data, pfd->visited, \
9274 pfd->include_nondeduced_p, \
9275 pfd->any_fn); \
9276 if (result) goto out; \
9277 } \
9278 while (0)
9279
9280 if (pfd->any_fn && (*pfd->any_fn)(t, data))
9281 return t;
9282
9283 if (TYPE_P (t)
9284 && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE))
9285 WALK_SUBTREE (TYPE_CONTEXT (t));
9286
9287 switch (TREE_CODE (t))
9288 {
9289 case RECORD_TYPE:
9290 if (TYPE_PTRMEMFUNC_P (t))
9291 break;
9292 /* Fall through. */
9293
9294 case UNION_TYPE:
9295 case ENUMERAL_TYPE:
9296 if (!TYPE_TEMPLATE_INFO (t))
9297 *walk_subtrees = 0;
9298 else
9299 WALK_SUBTREE (TYPE_TI_ARGS (t));
9300 break;
9301
9302 case INTEGER_TYPE:
9303 WALK_SUBTREE (TYPE_MIN_VALUE (t));
9304 WALK_SUBTREE (TYPE_MAX_VALUE (t));
9305 break;
9306
9307 case METHOD_TYPE:
9308 /* Since we're not going to walk subtrees, we have to do this
9309 explicitly here. */
9310 WALK_SUBTREE (TYPE_METHOD_BASETYPE (t));
9311 /* Fall through. */
9312
9313 case FUNCTION_TYPE:
9314 /* Check the return type. */
9315 WALK_SUBTREE (TREE_TYPE (t));
9316
9317 /* Check the parameter types. Since default arguments are not
9318 instantiated until they are needed, the TYPE_ARG_TYPES may
9319 contain expressions that involve template parameters. But,
9320 no-one should be looking at them yet. And, once they're
9321 instantiated, they don't contain template parameters, so
9322 there's no point in looking at them then, either. */
9323 {
9324 tree parm;
9325
9326 for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
9327 WALK_SUBTREE (TREE_VALUE (parm));
9328
9329 /* Since we've already handled the TYPE_ARG_TYPES, we don't
9330 want walk_tree walking into them itself. */
9331 *walk_subtrees = 0;
9332 }
9333
9334 if (flag_noexcept_type)
9335 {
9336 tree spec = TYPE_RAISES_EXCEPTIONS (t);
9337 if (spec)
9338 WALK_SUBTREE (TREE_PURPOSE (spec));
9339 }
9340 break;
9341
9342 case TYPEOF_TYPE:
9343 case UNDERLYING_TYPE:
9344 if (pfd->include_nondeduced_p
9345 && for_each_template_parm (TYPE_VALUES_RAW (t), fn, data,
9346 pfd->visited,
9347 pfd->include_nondeduced_p,
9348 pfd->any_fn))
9349 return error_mark_node;
9350 break;
9351
9352 case FUNCTION_DECL:
9353 case VAR_DECL:
9354 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
9355 WALK_SUBTREE (DECL_TI_ARGS (t));
9356 /* Fall through. */
9357
9358 case PARM_DECL:
9359 case CONST_DECL:
9360 if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t))
9361 WALK_SUBTREE (DECL_INITIAL (t));
9362 if (DECL_CONTEXT (t)
9363 && pfd->include_nondeduced_p)
9364 WALK_SUBTREE (DECL_CONTEXT (t));
9365 break;
9366
9367 case BOUND_TEMPLATE_TEMPLATE_PARM:
9368 /* Record template parameters such as `T' inside `TT<T>'. */
9369 WALK_SUBTREE (TYPE_TI_ARGS (t));
9370 /* Fall through. */
9371
9372 case TEMPLATE_TEMPLATE_PARM:
9373 case TEMPLATE_TYPE_PARM:
9374 case TEMPLATE_PARM_INDEX:
9375 if (fn && (*fn)(t, data))
9376 return t;
9377 else if (!fn)
9378 return t;
9379 break;
9380
9381 case TEMPLATE_DECL:
9382 /* A template template parameter is encountered. */
9383 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9384 WALK_SUBTREE (TREE_TYPE (t));
9385
9386 /* Already substituted template template parameter */
9387 *walk_subtrees = 0;
9388 break;
9389
9390 case TYPENAME_TYPE:
9391 /* A template-id in a TYPENAME_TYPE might be a deduced context after
9392 partial instantiation. */
9393 WALK_SUBTREE (TYPENAME_TYPE_FULLNAME (t));
9394 break;
9395
9396 case CONSTRUCTOR:
9397 if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
9398 && pfd->include_nondeduced_p)
9399 WALK_SUBTREE (TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (t)));
9400 break;
9401
9402 case INDIRECT_REF:
9403 case COMPONENT_REF:
9404 /* If there's no type, then this thing must be some expression
9405 involving template parameters. */
9406 if (!fn && !TREE_TYPE (t))
9407 return error_mark_node;
9408 break;
9409
9410 case MODOP_EXPR:
9411 case CAST_EXPR:
9412 case IMPLICIT_CONV_EXPR:
9413 case REINTERPRET_CAST_EXPR:
9414 case CONST_CAST_EXPR:
9415 case STATIC_CAST_EXPR:
9416 case DYNAMIC_CAST_EXPR:
9417 case ARROW_EXPR:
9418 case DOTSTAR_EXPR:
9419 case TYPEID_EXPR:
9420 case PSEUDO_DTOR_EXPR:
9421 if (!fn)
9422 return error_mark_node;
9423 break;
9424
9425 default:
9426 break;
9427 }
9428
9429 #undef WALK_SUBTREE
9430
9431 /* We didn't find any template parameters we liked. */
9432 out:
9433 return result;
9434 }
9435
9436 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
9437 BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
9438 call FN with the parameter and the DATA.
9439 If FN returns nonzero, the iteration is terminated, and
9440 for_each_template_parm returns 1. Otherwise, the iteration
9441 continues. If FN never returns a nonzero value, the value
9442 returned by for_each_template_parm is 0. If FN is NULL, it is
9443 considered to be the function which always returns 1.
9444
9445 If INCLUDE_NONDEDUCED_P, then this routine will also visit template
9446 parameters that occur in non-deduced contexts. When false, only
9447 visits those template parameters that can be deduced. */
9448
9449 static tree
9450 for_each_template_parm (tree t, tree_fn_t fn, void* data,
9451 hash_set<tree> *visited,
9452 bool include_nondeduced_p,
9453 tree_fn_t any_fn)
9454 {
9455 struct pair_fn_data pfd;
9456 tree result;
9457
9458 /* Set up. */
9459 pfd.fn = fn;
9460 pfd.any_fn = any_fn;
9461 pfd.data = data;
9462 pfd.include_nondeduced_p = include_nondeduced_p;
9463
9464 /* Walk the tree. (Conceptually, we would like to walk without
9465 duplicates, but for_each_template_parm_r recursively calls
9466 for_each_template_parm, so we would need to reorganize a fair
9467 bit to use walk_tree_without_duplicates, so we keep our own
9468 visited list.) */
9469 if (visited)
9470 pfd.visited = visited;
9471 else
9472 pfd.visited = new hash_set<tree>;
9473 result = cp_walk_tree (&t,
9474 for_each_template_parm_r,
9475 &pfd,
9476 pfd.visited);
9477
9478 /* Clean up. */
9479 if (!visited)
9480 {
9481 delete pfd.visited;
9482 pfd.visited = 0;
9483 }
9484
9485 return result;
9486 }
9487
9488 /* Returns true if T depends on any template parameter. */
9489
9490 int
9491 uses_template_parms (tree t)
9492 {
9493 if (t == NULL_TREE)
9494 return false;
9495
9496 bool dependent_p;
9497 int saved_processing_template_decl;
9498
9499 saved_processing_template_decl = processing_template_decl;
9500 if (!saved_processing_template_decl)
9501 processing_template_decl = 1;
9502 if (TYPE_P (t))
9503 dependent_p = dependent_type_p (t);
9504 else if (TREE_CODE (t) == TREE_VEC)
9505 dependent_p = any_dependent_template_arguments_p (t);
9506 else if (TREE_CODE (t) == TREE_LIST)
9507 dependent_p = (uses_template_parms (TREE_VALUE (t))
9508 || uses_template_parms (TREE_CHAIN (t)));
9509 else if (TREE_CODE (t) == TYPE_DECL)
9510 dependent_p = dependent_type_p (TREE_TYPE (t));
9511 else if (DECL_P (t)
9512 || EXPR_P (t)
9513 || TREE_CODE (t) == TEMPLATE_PARM_INDEX
9514 || TREE_CODE (t) == OVERLOAD
9515 || BASELINK_P (t)
9516 || identifier_p (t)
9517 || TREE_CODE (t) == TRAIT_EXPR
9518 || TREE_CODE (t) == CONSTRUCTOR
9519 || CONSTANT_CLASS_P (t))
9520 dependent_p = (type_dependent_expression_p (t)
9521 || value_dependent_expression_p (t));
9522 else
9523 {
9524 gcc_assert (t == error_mark_node);
9525 dependent_p = false;
9526 }
9527
9528 processing_template_decl = saved_processing_template_decl;
9529
9530 return dependent_p;
9531 }
9532
9533 /* Returns true iff current_function_decl is an incompletely instantiated
9534 template. Useful instead of processing_template_decl because the latter
9535 is set to 0 during instantiate_non_dependent_expr. */
9536
9537 bool
9538 in_template_function (void)
9539 {
9540 tree fn = current_function_decl;
9541 bool ret;
9542 ++processing_template_decl;
9543 ret = (fn && DECL_LANG_SPECIFIC (fn)
9544 && DECL_TEMPLATE_INFO (fn)
9545 && any_dependent_template_arguments_p (DECL_TI_ARGS (fn)));
9546 --processing_template_decl;
9547 return ret;
9548 }
9549
9550 /* Returns true if T depends on any template parameter with level LEVEL. */
9551
9552 bool
9553 uses_template_parms_level (tree t, int level)
9554 {
9555 return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
9556 /*include_nondeduced_p=*/true);
9557 }
9558
9559 /* Returns true if the signature of DECL depends on any template parameter from
9560 its enclosing class. */
9561
9562 bool
9563 uses_outer_template_parms (tree decl)
9564 {
9565 int depth = template_class_depth (CP_DECL_CONTEXT (decl));
9566 if (depth == 0)
9567 return false;
9568 if (for_each_template_parm (TREE_TYPE (decl), template_parm_outer_level,
9569 &depth, NULL, /*include_nondeduced_p=*/true))
9570 return true;
9571 if (PRIMARY_TEMPLATE_P (decl)
9572 && for_each_template_parm (INNERMOST_TEMPLATE_PARMS
9573 (DECL_TEMPLATE_PARMS (decl)),
9574 template_parm_outer_level,
9575 &depth, NULL, /*include_nondeduced_p=*/true))
9576 return true;
9577 tree ci = get_constraints (decl);
9578 if (ci)
9579 ci = CI_ASSOCIATED_CONSTRAINTS (ci);
9580 if (ci && for_each_template_parm (ci, template_parm_outer_level,
9581 &depth, NULL, /*nondeduced*/true))
9582 return true;
9583 return false;
9584 }
9585
9586 /* Returns TRUE iff INST is an instantiation we don't need to do in an
9587 ill-formed translation unit, i.e. a variable or function that isn't
9588 usable in a constant expression. */
9589
9590 static inline bool
9591 neglectable_inst_p (tree d)
9592 {
9593 return (DECL_P (d)
9594 && !undeduced_auto_decl (d)
9595 && !(TREE_CODE (d) == FUNCTION_DECL ? DECL_DECLARED_CONSTEXPR_P (d)
9596 : decl_maybe_constant_var_p (d)));
9597 }
9598
9599 /* Returns TRUE iff we should refuse to instantiate DECL because it's
9600 neglectable and instantiated from within an erroneous instantiation. */
9601
9602 static bool
9603 limit_bad_template_recursion (tree decl)
9604 {
9605 struct tinst_level *lev = current_tinst_level;
9606 int errs = errorcount + sorrycount;
9607 if (lev == NULL || errs == 0 || !neglectable_inst_p (decl))
9608 return false;
9609
9610 for (; lev; lev = lev->next)
9611 if (neglectable_inst_p (lev->decl))
9612 break;
9613
9614 return (lev && errs > lev->errors);
9615 }
9616
9617 static int tinst_depth;
9618 extern int max_tinst_depth;
9619 int depth_reached;
9620
9621 static GTY(()) struct tinst_level *last_error_tinst_level;
9622
9623 /* We're starting to instantiate D; record the template instantiation context
9624 for diagnostics and to restore it later. */
9625
9626 bool
9627 push_tinst_level (tree d)
9628 {
9629 return push_tinst_level_loc (d, input_location);
9630 }
9631
9632 /* We're starting to instantiate D; record the template instantiation context
9633 at LOC for diagnostics and to restore it later. */
9634
9635 bool
9636 push_tinst_level_loc (tree d, location_t loc)
9637 {
9638 struct tinst_level *new_level;
9639
9640 if (tinst_depth >= max_tinst_depth)
9641 {
9642 /* Tell error.c not to try to instantiate any templates. */
9643 at_eof = 2;
9644 fatal_error (input_location,
9645 "template instantiation depth exceeds maximum of %d"
9646 " (use -ftemplate-depth= to increase the maximum)",
9647 max_tinst_depth);
9648 return false;
9649 }
9650
9651 /* If the current instantiation caused problems, don't let it instantiate
9652 anything else. Do allow deduction substitution and decls usable in
9653 constant expressions. */
9654 if (limit_bad_template_recursion (d))
9655 return false;
9656
9657 /* When not -quiet, dump template instantiations other than functions, since
9658 announce_function will take care of those. */
9659 if (!quiet_flag
9660 && TREE_CODE (d) != TREE_LIST
9661 && TREE_CODE (d) != FUNCTION_DECL)
9662 fprintf (stderr, " %s", decl_as_string (d, TFF_DECL_SPECIFIERS));
9663
9664 new_level = ggc_alloc<tinst_level> ();
9665 new_level->decl = d;
9666 new_level->locus = loc;
9667 new_level->errors = errorcount+sorrycount;
9668 new_level->in_system_header_p = in_system_header_at (input_location);
9669 new_level->next = current_tinst_level;
9670 current_tinst_level = new_level;
9671
9672 ++tinst_depth;
9673 if (GATHER_STATISTICS && (tinst_depth > depth_reached))
9674 depth_reached = tinst_depth;
9675
9676 return true;
9677 }
9678
9679 /* We're done instantiating this template; return to the instantiation
9680 context. */
9681
9682 void
9683 pop_tinst_level (void)
9684 {
9685 /* Restore the filename and line number stashed away when we started
9686 this instantiation. */
9687 input_location = current_tinst_level->locus;
9688 current_tinst_level = current_tinst_level->next;
9689 --tinst_depth;
9690 }
9691
9692 /* We're instantiating a deferred template; restore the template
9693 instantiation context in which the instantiation was requested, which
9694 is one step out from LEVEL. Return the corresponding DECL or TYPE. */
9695
9696 static tree
9697 reopen_tinst_level (struct tinst_level *level)
9698 {
9699 struct tinst_level *t;
9700
9701 tinst_depth = 0;
9702 for (t = level; t; t = t->next)
9703 ++tinst_depth;
9704
9705 current_tinst_level = level;
9706 pop_tinst_level ();
9707 if (current_tinst_level)
9708 current_tinst_level->errors = errorcount+sorrycount;
9709 return level->decl;
9710 }
9711
9712 /* Returns the TINST_LEVEL which gives the original instantiation
9713 context. */
9714
9715 struct tinst_level *
9716 outermost_tinst_level (void)
9717 {
9718 struct tinst_level *level = current_tinst_level;
9719 if (level)
9720 while (level->next)
9721 level = level->next;
9722 return level;
9723 }
9724
9725 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
9726 vector of template arguments, as for tsubst.
9727
9728 Returns an appropriate tsubst'd friend declaration. */
9729
9730 static tree
9731 tsubst_friend_function (tree decl, tree args)
9732 {
9733 tree new_friend;
9734
9735 if (TREE_CODE (decl) == FUNCTION_DECL
9736 && DECL_TEMPLATE_INSTANTIATION (decl)
9737 && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
9738 /* This was a friend declared with an explicit template
9739 argument list, e.g.:
9740
9741 friend void f<>(T);
9742
9743 to indicate that f was a template instantiation, not a new
9744 function declaration. Now, we have to figure out what
9745 instantiation of what template. */
9746 {
9747 tree template_id, arglist, fns;
9748 tree new_args;
9749 tree tmpl;
9750 tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
9751
9752 /* Friend functions are looked up in the containing namespace scope.
9753 We must enter that scope, to avoid finding member functions of the
9754 current class with same name. */
9755 push_nested_namespace (ns);
9756 fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
9757 tf_warning_or_error, NULL_TREE,
9758 /*integral_constant_expression_p=*/false);
9759 pop_nested_namespace (ns);
9760 arglist = tsubst (DECL_TI_ARGS (decl), args,
9761 tf_warning_or_error, NULL_TREE);
9762 template_id = lookup_template_function (fns, arglist);
9763
9764 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
9765 tmpl = determine_specialization (template_id, new_friend,
9766 &new_args,
9767 /*need_member_template=*/0,
9768 TREE_VEC_LENGTH (args),
9769 tsk_none);
9770 return instantiate_template (tmpl, new_args, tf_error);
9771 }
9772
9773 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
9774
9775 /* The NEW_FRIEND will look like an instantiation, to the
9776 compiler, but is not an instantiation from the point of view of
9777 the language. For example, we might have had:
9778
9779 template <class T> struct S {
9780 template <class U> friend void f(T, U);
9781 };
9782
9783 Then, in S<int>, template <class U> void f(int, U) is not an
9784 instantiation of anything. */
9785 if (new_friend == error_mark_node)
9786 return error_mark_node;
9787
9788 DECL_USE_TEMPLATE (new_friend) = 0;
9789 if (TREE_CODE (decl) == TEMPLATE_DECL)
9790 {
9791 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
9792 DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
9793 = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
9794 }
9795
9796 /* The mangled name for the NEW_FRIEND is incorrect. The function
9797 is not a template instantiation and should not be mangled like
9798 one. Therefore, we forget the mangling here; we'll recompute it
9799 later if we need it. */
9800 if (TREE_CODE (new_friend) != TEMPLATE_DECL)
9801 {
9802 SET_DECL_RTL (new_friend, NULL);
9803 SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
9804 }
9805
9806 if (DECL_NAMESPACE_SCOPE_P (new_friend))
9807 {
9808 tree old_decl;
9809 tree new_friend_template_info;
9810 tree new_friend_result_template_info;
9811 tree ns;
9812 int new_friend_is_defn;
9813
9814 /* We must save some information from NEW_FRIEND before calling
9815 duplicate decls since that function will free NEW_FRIEND if
9816 possible. */
9817 new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
9818 new_friend_is_defn =
9819 (DECL_INITIAL (DECL_TEMPLATE_RESULT
9820 (template_for_substitution (new_friend)))
9821 != NULL_TREE);
9822 if (TREE_CODE (new_friend) == TEMPLATE_DECL)
9823 {
9824 /* This declaration is a `primary' template. */
9825 DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
9826
9827 new_friend_result_template_info
9828 = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
9829 }
9830 else
9831 new_friend_result_template_info = NULL_TREE;
9832
9833 /* Inside pushdecl_namespace_level, we will push into the
9834 current namespace. However, the friend function should go
9835 into the namespace of the template. */
9836 ns = decl_namespace_context (new_friend);
9837 push_nested_namespace (ns);
9838 old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
9839 pop_nested_namespace (ns);
9840
9841 if (old_decl == error_mark_node)
9842 return error_mark_node;
9843
9844 if (old_decl != new_friend)
9845 {
9846 /* This new friend declaration matched an existing
9847 declaration. For example, given:
9848
9849 template <class T> void f(T);
9850 template <class U> class C {
9851 template <class T> friend void f(T) {}
9852 };
9853
9854 the friend declaration actually provides the definition
9855 of `f', once C has been instantiated for some type. So,
9856 old_decl will be the out-of-class template declaration,
9857 while new_friend is the in-class definition.
9858
9859 But, if `f' was called before this point, the
9860 instantiation of `f' will have DECL_TI_ARGS corresponding
9861 to `T' but not to `U', references to which might appear
9862 in the definition of `f'. Previously, the most general
9863 template for an instantiation of `f' was the out-of-class
9864 version; now it is the in-class version. Therefore, we
9865 run through all specialization of `f', adding to their
9866 DECL_TI_ARGS appropriately. In particular, they need a
9867 new set of outer arguments, corresponding to the
9868 arguments for this class instantiation.
9869
9870 The same situation can arise with something like this:
9871
9872 friend void f(int);
9873 template <class T> class C {
9874 friend void f(T) {}
9875 };
9876
9877 when `C<int>' is instantiated. Now, `f(int)' is defined
9878 in the class. */
9879
9880 if (!new_friend_is_defn)
9881 /* On the other hand, if the in-class declaration does
9882 *not* provide a definition, then we don't want to alter
9883 existing definitions. We can just leave everything
9884 alone. */
9885 ;
9886 else
9887 {
9888 tree new_template = TI_TEMPLATE (new_friend_template_info);
9889 tree new_args = TI_ARGS (new_friend_template_info);
9890
9891 /* Overwrite whatever template info was there before, if
9892 any, with the new template information pertaining to
9893 the declaration. */
9894 DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
9895
9896 if (TREE_CODE (old_decl) != TEMPLATE_DECL)
9897 {
9898 /* We should have called reregister_specialization in
9899 duplicate_decls. */
9900 gcc_assert (retrieve_specialization (new_template,
9901 new_args, 0)
9902 == old_decl);
9903
9904 /* Instantiate it if the global has already been used. */
9905 if (DECL_ODR_USED (old_decl))
9906 instantiate_decl (old_decl, /*defer_ok=*/true,
9907 /*expl_inst_class_mem_p=*/false);
9908 }
9909 else
9910 {
9911 tree t;
9912
9913 /* Indicate that the old function template is a partial
9914 instantiation. */
9915 DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
9916 = new_friend_result_template_info;
9917
9918 gcc_assert (new_template
9919 == most_general_template (new_template));
9920 gcc_assert (new_template != old_decl);
9921
9922 /* Reassign any specializations already in the hash table
9923 to the new more general template, and add the
9924 additional template args. */
9925 for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
9926 t != NULL_TREE;
9927 t = TREE_CHAIN (t))
9928 {
9929 tree spec = TREE_VALUE (t);
9930 spec_entry elt;
9931
9932 elt.tmpl = old_decl;
9933 elt.args = DECL_TI_ARGS (spec);
9934 elt.spec = NULL_TREE;
9935
9936 decl_specializations->remove_elt (&elt);
9937
9938 DECL_TI_ARGS (spec)
9939 = add_outermost_template_args (new_args,
9940 DECL_TI_ARGS (spec));
9941
9942 register_specialization
9943 (spec, new_template, DECL_TI_ARGS (spec), true, 0);
9944
9945 }
9946 DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
9947 }
9948 }
9949
9950 /* The information from NEW_FRIEND has been merged into OLD_DECL
9951 by duplicate_decls. */
9952 new_friend = old_decl;
9953 }
9954 }
9955 else
9956 {
9957 tree context = DECL_CONTEXT (new_friend);
9958 bool dependent_p;
9959
9960 /* In the code
9961 template <class T> class C {
9962 template <class U> friend void C1<U>::f (); // case 1
9963 friend void C2<T>::f (); // case 2
9964 };
9965 we only need to make sure CONTEXT is a complete type for
9966 case 2. To distinguish between the two cases, we note that
9967 CONTEXT of case 1 remains dependent type after tsubst while
9968 this isn't true for case 2. */
9969 ++processing_template_decl;
9970 dependent_p = dependent_type_p (context);
9971 --processing_template_decl;
9972
9973 if (!dependent_p
9974 && !complete_type_or_else (context, NULL_TREE))
9975 return error_mark_node;
9976
9977 if (COMPLETE_TYPE_P (context))
9978 {
9979 tree fn = new_friend;
9980 /* do_friend adds the TEMPLATE_DECL for any member friend
9981 template even if it isn't a member template, i.e.
9982 template <class T> friend A<T>::f();
9983 Look through it in that case. */
9984 if (TREE_CODE (fn) == TEMPLATE_DECL
9985 && !PRIMARY_TEMPLATE_P (fn))
9986 fn = DECL_TEMPLATE_RESULT (fn);
9987 /* Check to see that the declaration is really present, and,
9988 possibly obtain an improved declaration. */
9989 fn = check_classfn (context, fn, NULL_TREE);
9990
9991 if (fn)
9992 new_friend = fn;
9993 }
9994 }
9995
9996 return new_friend;
9997 }
9998
9999 /* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
10000 template arguments, as for tsubst.
10001
10002 Returns an appropriate tsubst'd friend type or error_mark_node on
10003 failure. */
10004
10005 static tree
10006 tsubst_friend_class (tree friend_tmpl, tree args)
10007 {
10008 tree tmpl;
10009
10010 if (DECL_TEMPLATE_TEMPLATE_PARM_P (friend_tmpl))
10011 {
10012 tmpl = tsubst (TREE_TYPE (friend_tmpl), args, tf_none, NULL_TREE);
10013 return TREE_TYPE (tmpl);
10014 }
10015
10016 tree context = CP_DECL_CONTEXT (friend_tmpl);
10017 if (TREE_CODE (context) == NAMESPACE_DECL)
10018 push_nested_namespace (context);
10019 else
10020 push_nested_class (context);
10021
10022 tmpl = lookup_name_real (DECL_NAME (friend_tmpl), /*prefer_type=*/false,
10023 /*non_class=*/false, /*block_p=*/false,
10024 /*namespaces_only=*/false, LOOKUP_HIDDEN);
10025
10026 if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
10027 {
10028 /* The friend template has already been declared. Just
10029 check to see that the declarations match, and install any new
10030 default parameters. We must tsubst the default parameters,
10031 of course. We only need the innermost template parameters
10032 because that is all that redeclare_class_template will look
10033 at. */
10034 if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
10035 > TMPL_ARGS_DEPTH (args))
10036 {
10037 tree parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
10038 args, tf_warning_or_error);
10039 location_t saved_input_location = input_location;
10040 input_location = DECL_SOURCE_LOCATION (friend_tmpl);
10041 tree cons = get_constraints (tmpl);
10042 redeclare_class_template (TREE_TYPE (tmpl), parms, cons);
10043 input_location = saved_input_location;
10044 }
10045 }
10046 else
10047 {
10048 /* The friend template has not already been declared. In this
10049 case, the instantiation of the template class will cause the
10050 injection of this template into the namespace scope. */
10051 tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
10052
10053 if (tmpl != error_mark_node)
10054 {
10055 /* The new TMPL is not an instantiation of anything, so we
10056 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE
10057 for the new type because that is supposed to be the
10058 corresponding template decl, i.e., TMPL. */
10059 DECL_USE_TEMPLATE (tmpl) = 0;
10060 DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
10061 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
10062 CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
10063 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
10064
10065 /* It is hidden. */
10066 retrofit_lang_decl (DECL_TEMPLATE_RESULT (tmpl));
10067 DECL_ANTICIPATED (tmpl)
10068 = DECL_ANTICIPATED (DECL_TEMPLATE_RESULT (tmpl)) = true;
10069
10070 /* Inject this template into the enclosing namspace scope. */
10071 tmpl = pushdecl_namespace_level (tmpl, true);
10072 }
10073 }
10074
10075 if (TREE_CODE (context) == NAMESPACE_DECL)
10076 pop_nested_namespace (context);
10077 else
10078 pop_nested_class ();
10079
10080 return TREE_TYPE (tmpl);
10081 }
10082
10083 /* Returns zero if TYPE cannot be completed later due to circularity.
10084 Otherwise returns one. */
10085
10086 static int
10087 can_complete_type_without_circularity (tree type)
10088 {
10089 if (type == NULL_TREE || type == error_mark_node)
10090 return 0;
10091 else if (COMPLETE_TYPE_P (type))
10092 return 1;
10093 else if (TREE_CODE (type) == ARRAY_TYPE)
10094 return can_complete_type_without_circularity (TREE_TYPE (type));
10095 else if (CLASS_TYPE_P (type)
10096 && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
10097 return 0;
10098 else
10099 return 1;
10100 }
10101
10102 static tree tsubst_omp_clauses (tree, enum c_omp_region_type, tree,
10103 tsubst_flags_t, tree);
10104
10105 /* Instantiate a single dependent attribute T (a TREE_LIST), and return either
10106 T or a new TREE_LIST, possibly a chain in the case of a pack expansion. */
10107
10108 static tree
10109 tsubst_attribute (tree t, tree *decl_p, tree args,
10110 tsubst_flags_t complain, tree in_decl)
10111 {
10112 gcc_assert (ATTR_IS_DEPENDENT (t));
10113
10114 tree val = TREE_VALUE (t);
10115 if (val == NULL_TREE)
10116 /* Nothing to do. */;
10117 else if ((flag_openmp || flag_openmp_simd)
10118 && is_attribute_p ("omp declare simd",
10119 get_attribute_name (t)))
10120 {
10121 tree clauses = TREE_VALUE (val);
10122 clauses = tsubst_omp_clauses (clauses, C_ORT_OMP_DECLARE_SIMD, args,
10123 complain, in_decl);
10124 c_omp_declare_simd_clauses_to_decls (*decl_p, clauses);
10125 clauses = finish_omp_clauses (clauses, C_ORT_OMP_DECLARE_SIMD);
10126 tree parms = DECL_ARGUMENTS (*decl_p);
10127 clauses
10128 = c_omp_declare_simd_clauses_to_numbers (parms, clauses);
10129 if (clauses)
10130 val = build_tree_list (NULL_TREE, clauses);
10131 else
10132 val = NULL_TREE;
10133 }
10134 /* If the first attribute argument is an identifier, don't
10135 pass it through tsubst. Attributes like mode, format,
10136 cleanup and several target specific attributes expect it
10137 unmodified. */
10138 else if (attribute_takes_identifier_p (get_attribute_name (t)))
10139 {
10140 tree chain
10141 = tsubst_expr (TREE_CHAIN (val), args, complain, in_decl,
10142 /*integral_constant_expression_p=*/false);
10143 if (chain != TREE_CHAIN (val))
10144 val = tree_cons (NULL_TREE, TREE_VALUE (val), chain);
10145 }
10146 else if (PACK_EXPANSION_P (val))
10147 {
10148 /* An attribute pack expansion. */
10149 tree purp = TREE_PURPOSE (t);
10150 tree pack = tsubst_pack_expansion (val, args, complain, in_decl);
10151 if (pack == error_mark_node)
10152 return error_mark_node;
10153 int len = TREE_VEC_LENGTH (pack);
10154 tree list = NULL_TREE;
10155 tree *q = &list;
10156 for (int i = 0; i < len; ++i)
10157 {
10158 tree elt = TREE_VEC_ELT (pack, i);
10159 *q = build_tree_list (purp, elt);
10160 q = &TREE_CHAIN (*q);
10161 }
10162 return list;
10163 }
10164 else
10165 val = tsubst_expr (val, args, complain, in_decl,
10166 /*integral_constant_expression_p=*/false);
10167
10168 if (val != TREE_VALUE (t))
10169 return build_tree_list (TREE_PURPOSE (t), val);
10170 return t;
10171 }
10172
10173 /* Instantiate any dependent attributes in ATTRIBUTES, returning either it
10174 unchanged or a new TREE_LIST chain. */
10175
10176 static tree
10177 tsubst_attributes (tree attributes, tree args,
10178 tsubst_flags_t complain, tree in_decl)
10179 {
10180 tree last_dep = NULL_TREE;
10181
10182 for (tree t = attributes; t; t = TREE_CHAIN (t))
10183 if (ATTR_IS_DEPENDENT (t))
10184 {
10185 last_dep = t;
10186 attributes = copy_list (attributes);
10187 break;
10188 }
10189
10190 if (last_dep)
10191 for (tree *p = &attributes; *p; )
10192 {
10193 tree t = *p;
10194 if (ATTR_IS_DEPENDENT (t))
10195 {
10196 tree subst = tsubst_attribute (t, NULL, args, complain, in_decl);
10197 if (subst != t)
10198 {
10199 *p = subst;
10200 do
10201 p = &TREE_CHAIN (*p);
10202 while (*p);
10203 *p = TREE_CHAIN (t);
10204 continue;
10205 }
10206 }
10207 p = &TREE_CHAIN (*p);
10208 }
10209
10210 return attributes;
10211 }
10212
10213 /* Apply any attributes which had to be deferred until instantiation
10214 time. DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
10215 ARGS, COMPLAIN, IN_DECL are as tsubst. */
10216
10217 static void
10218 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
10219 tree args, tsubst_flags_t complain, tree in_decl)
10220 {
10221 tree last_dep = NULL_TREE;
10222 tree t;
10223 tree *p;
10224
10225 if (attributes == NULL_TREE)
10226 return;
10227
10228 if (DECL_P (*decl_p))
10229 {
10230 if (TREE_TYPE (*decl_p) == error_mark_node)
10231 return;
10232 p = &DECL_ATTRIBUTES (*decl_p);
10233 /* DECL_ATTRIBUTES comes from copy_node in tsubst_decl, and is identical
10234 to our attributes parameter. */
10235 gcc_assert (*p == attributes);
10236 }
10237 else
10238 {
10239 p = &TYPE_ATTRIBUTES (*decl_p);
10240 /* TYPE_ATTRIBUTES was set up (with abi_tag and may_alias) in
10241 lookup_template_class_1, and should be preserved. */
10242 gcc_assert (*p != attributes);
10243 while (*p)
10244 p = &TREE_CHAIN (*p);
10245 }
10246
10247 for (t = attributes; t; t = TREE_CHAIN (t))
10248 if (ATTR_IS_DEPENDENT (t))
10249 {
10250 last_dep = t;
10251 attributes = copy_list (attributes);
10252 break;
10253 }
10254
10255 *p = attributes;
10256 if (last_dep)
10257 {
10258 tree late_attrs = NULL_TREE;
10259 tree *q = &late_attrs;
10260
10261 for (; *p; )
10262 {
10263 t = *p;
10264 if (ATTR_IS_DEPENDENT (t))
10265 {
10266 *p = TREE_CHAIN (t);
10267 TREE_CHAIN (t) = NULL_TREE;
10268 *q = tsubst_attribute (t, decl_p, args, complain, in_decl);
10269 do
10270 q = &TREE_CHAIN (*q);
10271 while (*q);
10272 }
10273 else
10274 p = &TREE_CHAIN (t);
10275 }
10276
10277 cplus_decl_attributes (decl_p, late_attrs, attr_flags);
10278 }
10279 }
10280
10281 /* Perform (or defer) access check for typedefs that were referenced
10282 from within the template TMPL code.
10283 This is a subroutine of instantiate_decl and instantiate_class_template.
10284 TMPL is the template to consider and TARGS is the list of arguments of
10285 that template. */
10286
10287 static void
10288 perform_typedefs_access_check (tree tmpl, tree targs)
10289 {
10290 location_t saved_location;
10291 unsigned i;
10292 qualified_typedef_usage_t *iter;
10293
10294 if (!tmpl
10295 || (!CLASS_TYPE_P (tmpl)
10296 && TREE_CODE (tmpl) != FUNCTION_DECL))
10297 return;
10298
10299 saved_location = input_location;
10300 FOR_EACH_VEC_SAFE_ELT (get_types_needing_access_check (tmpl), i, iter)
10301 {
10302 tree type_decl = iter->typedef_decl;
10303 tree type_scope = iter->context;
10304
10305 if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
10306 continue;
10307
10308 if (uses_template_parms (type_decl))
10309 type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
10310 if (uses_template_parms (type_scope))
10311 type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
10312
10313 /* Make access check error messages point to the location
10314 of the use of the typedef. */
10315 input_location = iter->locus;
10316 perform_or_defer_access_check (TYPE_BINFO (type_scope),
10317 type_decl, type_decl,
10318 tf_warning_or_error);
10319 }
10320 input_location = saved_location;
10321 }
10322
10323 static tree
10324 instantiate_class_template_1 (tree type)
10325 {
10326 tree templ, args, pattern, t, member;
10327 tree typedecl;
10328 tree pbinfo;
10329 tree base_list;
10330 unsigned int saved_maximum_field_alignment;
10331 tree fn_context;
10332
10333 if (type == error_mark_node)
10334 return error_mark_node;
10335
10336 if (COMPLETE_OR_OPEN_TYPE_P (type)
10337 || uses_template_parms (type))
10338 return type;
10339
10340 /* Figure out which template is being instantiated. */
10341 templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
10342 gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
10343
10344 /* Determine what specialization of the original template to
10345 instantiate. */
10346 t = most_specialized_partial_spec (type, tf_warning_or_error);
10347 if (t == error_mark_node)
10348 {
10349 TYPE_BEING_DEFINED (type) = 1;
10350 return error_mark_node;
10351 }
10352 else if (t)
10353 {
10354 /* This TYPE is actually an instantiation of a partial
10355 specialization. We replace the innermost set of ARGS with
10356 the arguments appropriate for substitution. For example,
10357 given:
10358
10359 template <class T> struct S {};
10360 template <class T> struct S<T*> {};
10361
10362 and supposing that we are instantiating S<int*>, ARGS will
10363 presently be {int*} -- but we need {int}. */
10364 pattern = TREE_TYPE (t);
10365 args = TREE_PURPOSE (t);
10366 }
10367 else
10368 {
10369 pattern = TREE_TYPE (templ);
10370 args = CLASSTYPE_TI_ARGS (type);
10371 }
10372
10373 /* If the template we're instantiating is incomplete, then clearly
10374 there's nothing we can do. */
10375 if (!COMPLETE_TYPE_P (pattern))
10376 return type;
10377
10378 /* If we've recursively instantiated too many templates, stop. */
10379 if (! push_tinst_level (type))
10380 return type;
10381
10382 /* Now we're really doing the instantiation. Mark the type as in
10383 the process of being defined. */
10384 TYPE_BEING_DEFINED (type) = 1;
10385
10386 /* We may be in the middle of deferred access check. Disable
10387 it now. */
10388 push_deferring_access_checks (dk_no_deferred);
10389
10390 int saved_unevaluated_operand = cp_unevaluated_operand;
10391 int saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
10392
10393 fn_context = decl_function_context (TYPE_MAIN_DECL (type));
10394 /* Also avoid push_to_top_level for a lambda in an NSDMI. */
10395 if (!fn_context && LAMBDA_TYPE_P (type) && TYPE_CLASS_SCOPE_P (type))
10396 fn_context = error_mark_node;
10397 if (!fn_context)
10398 push_to_top_level ();
10399 else
10400 {
10401 cp_unevaluated_operand = 0;
10402 c_inhibit_evaluation_warnings = 0;
10403 }
10404 /* Use #pragma pack from the template context. */
10405 saved_maximum_field_alignment = maximum_field_alignment;
10406 maximum_field_alignment = TYPE_PRECISION (pattern);
10407
10408 SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
10409
10410 /* Set the input location to the most specialized template definition.
10411 This is needed if tsubsting causes an error. */
10412 typedecl = TYPE_MAIN_DECL (pattern);
10413 input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) =
10414 DECL_SOURCE_LOCATION (typedecl);
10415
10416 TYPE_PACKED (type) = TYPE_PACKED (pattern);
10417 SET_TYPE_ALIGN (type, TYPE_ALIGN (pattern));
10418 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
10419 CLASSTYPE_NON_AGGREGATE (type) = CLASSTYPE_NON_AGGREGATE (pattern);
10420 if (ANON_AGGR_TYPE_P (pattern))
10421 SET_ANON_AGGR_TYPE_P (type);
10422 if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
10423 {
10424 CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
10425 CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
10426 /* Adjust visibility for template arguments. */
10427 determine_visibility (TYPE_MAIN_DECL (type));
10428 }
10429 if (CLASS_TYPE_P (type))
10430 CLASSTYPE_FINAL (type) = CLASSTYPE_FINAL (pattern);
10431
10432 pbinfo = TYPE_BINFO (pattern);
10433
10434 /* We should never instantiate a nested class before its enclosing
10435 class; we need to look up the nested class by name before we can
10436 instantiate it, and that lookup should instantiate the enclosing
10437 class. */
10438 gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
10439 || COMPLETE_OR_OPEN_TYPE_P (TYPE_CONTEXT (type)));
10440
10441 base_list = NULL_TREE;
10442 if (BINFO_N_BASE_BINFOS (pbinfo))
10443 {
10444 tree pbase_binfo;
10445 tree pushed_scope;
10446 int i;
10447
10448 /* We must enter the scope containing the type, as that is where
10449 the accessibility of types named in dependent bases are
10450 looked up from. */
10451 pushed_scope = push_scope (CP_TYPE_CONTEXT (type));
10452
10453 /* Substitute into each of the bases to determine the actual
10454 basetypes. */
10455 for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
10456 {
10457 tree base;
10458 tree access = BINFO_BASE_ACCESS (pbinfo, i);
10459 tree expanded_bases = NULL_TREE;
10460 int idx, len = 1;
10461
10462 if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
10463 {
10464 expanded_bases =
10465 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
10466 args, tf_error, NULL_TREE);
10467 if (expanded_bases == error_mark_node)
10468 continue;
10469
10470 len = TREE_VEC_LENGTH (expanded_bases);
10471 }
10472
10473 for (idx = 0; idx < len; idx++)
10474 {
10475 if (expanded_bases)
10476 /* Extract the already-expanded base class. */
10477 base = TREE_VEC_ELT (expanded_bases, idx);
10478 else
10479 /* Substitute to figure out the base class. */
10480 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error,
10481 NULL_TREE);
10482
10483 if (base == error_mark_node)
10484 continue;
10485
10486 base_list = tree_cons (access, base, base_list);
10487 if (BINFO_VIRTUAL_P (pbase_binfo))
10488 TREE_TYPE (base_list) = integer_type_node;
10489 }
10490 }
10491
10492 /* The list is now in reverse order; correct that. */
10493 base_list = nreverse (base_list);
10494
10495 if (pushed_scope)
10496 pop_scope (pushed_scope);
10497 }
10498 /* Now call xref_basetypes to set up all the base-class
10499 information. */
10500 xref_basetypes (type, base_list);
10501
10502 apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
10503 (int) ATTR_FLAG_TYPE_IN_PLACE,
10504 args, tf_error, NULL_TREE);
10505 fixup_attribute_variants (type);
10506
10507 /* Now that our base classes are set up, enter the scope of the
10508 class, so that name lookups into base classes, etc. will work
10509 correctly. This is precisely analogous to what we do in
10510 begin_class_definition when defining an ordinary non-template
10511 class, except we also need to push the enclosing classes. */
10512 push_nested_class (type);
10513
10514 /* Now members are processed in the order of declaration. */
10515 for (member = CLASSTYPE_DECL_LIST (pattern);
10516 member; member = TREE_CHAIN (member))
10517 {
10518 tree t = TREE_VALUE (member);
10519
10520 if (TREE_PURPOSE (member))
10521 {
10522 if (TYPE_P (t))
10523 {
10524 /* Build new CLASSTYPE_NESTED_UTDS. */
10525
10526 tree newtag;
10527 bool class_template_p;
10528
10529 class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
10530 && TYPE_LANG_SPECIFIC (t)
10531 && CLASSTYPE_IS_TEMPLATE (t));
10532 /* If the member is a class template, then -- even after
10533 substitution -- there may be dependent types in the
10534 template argument list for the class. We increment
10535 PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
10536 that function will assume that no types are dependent
10537 when outside of a template. */
10538 if (class_template_p)
10539 ++processing_template_decl;
10540 newtag = tsubst (t, args, tf_error, NULL_TREE);
10541 if (class_template_p)
10542 --processing_template_decl;
10543 if (newtag == error_mark_node)
10544 continue;
10545
10546 if (TREE_CODE (newtag) != ENUMERAL_TYPE)
10547 {
10548 tree name = TYPE_IDENTIFIER (t);
10549
10550 if (class_template_p)
10551 /* Unfortunately, lookup_template_class sets
10552 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
10553 instantiation (i.e., for the type of a member
10554 template class nested within a template class.)
10555 This behavior is required for
10556 maybe_process_partial_specialization to work
10557 correctly, but is not accurate in this case;
10558 the TAG is not an instantiation of anything.
10559 (The corresponding TEMPLATE_DECL is an
10560 instantiation, but the TYPE is not.) */
10561 CLASSTYPE_USE_TEMPLATE (newtag) = 0;
10562
10563 /* Now, we call pushtag to put this NEWTAG into the scope of
10564 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
10565 pushtag calling push_template_decl. We don't have to do
10566 this for enums because it will already have been done in
10567 tsubst_enum. */
10568 if (name)
10569 SET_IDENTIFIER_TYPE_VALUE (name, newtag);
10570 pushtag (name, newtag, /*tag_scope=*/ts_current);
10571 }
10572 }
10573 else if (DECL_DECLARES_FUNCTION_P (t))
10574 {
10575 tree r;
10576
10577 if (TREE_CODE (t) == TEMPLATE_DECL)
10578 ++processing_template_decl;
10579 r = tsubst (t, args, tf_error, NULL_TREE);
10580 if (TREE_CODE (t) == TEMPLATE_DECL)
10581 --processing_template_decl;
10582 set_current_access_from_decl (r);
10583 finish_member_declaration (r);
10584 /* Instantiate members marked with attribute used. */
10585 if (r != error_mark_node && DECL_PRESERVE_P (r))
10586 mark_used (r);
10587 if (TREE_CODE (r) == FUNCTION_DECL
10588 && DECL_OMP_DECLARE_REDUCTION_P (r))
10589 cp_check_omp_declare_reduction (r);
10590 }
10591 else if (DECL_CLASS_TEMPLATE_P (t)
10592 && LAMBDA_TYPE_P (TREE_TYPE (t)))
10593 /* A closure type for a lambda in a default argument for a
10594 member template. Ignore it; it will be instantiated with
10595 the default argument. */;
10596 else
10597 {
10598 /* Build new TYPE_FIELDS. */
10599 if (TREE_CODE (t) == STATIC_ASSERT)
10600 {
10601 tree condition;
10602
10603 ++c_inhibit_evaluation_warnings;
10604 condition =
10605 tsubst_expr (STATIC_ASSERT_CONDITION (t), args,
10606 tf_warning_or_error, NULL_TREE,
10607 /*integral_constant_expression_p=*/true);
10608 --c_inhibit_evaluation_warnings;
10609
10610 finish_static_assert (condition,
10611 STATIC_ASSERT_MESSAGE (t),
10612 STATIC_ASSERT_SOURCE_LOCATION (t),
10613 /*member_p=*/true);
10614 }
10615 else if (TREE_CODE (t) != CONST_DECL)
10616 {
10617 tree r;
10618 tree vec = NULL_TREE;
10619 int len = 1;
10620
10621 /* The file and line for this declaration, to
10622 assist in error message reporting. Since we
10623 called push_tinst_level above, we don't need to
10624 restore these. */
10625 input_location = DECL_SOURCE_LOCATION (t);
10626
10627 if (TREE_CODE (t) == TEMPLATE_DECL)
10628 ++processing_template_decl;
10629 r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
10630 if (TREE_CODE (t) == TEMPLATE_DECL)
10631 --processing_template_decl;
10632
10633 if (TREE_CODE (r) == TREE_VEC)
10634 {
10635 /* A capture pack became multiple fields. */
10636 vec = r;
10637 len = TREE_VEC_LENGTH (vec);
10638 }
10639
10640 for (int i = 0; i < len; ++i)
10641 {
10642 if (vec)
10643 r = TREE_VEC_ELT (vec, i);
10644 if (VAR_P (r))
10645 {
10646 /* In [temp.inst]:
10647
10648 [t]he initialization (and any associated
10649 side-effects) of a static data member does
10650 not occur unless the static data member is
10651 itself used in a way that requires the
10652 definition of the static data member to
10653 exist.
10654
10655 Therefore, we do not substitute into the
10656 initialized for the static data member here. */
10657 finish_static_data_member_decl
10658 (r,
10659 /*init=*/NULL_TREE,
10660 /*init_const_expr_p=*/false,
10661 /*asmspec_tree=*/NULL_TREE,
10662 /*flags=*/0);
10663 /* Instantiate members marked with attribute used. */
10664 if (r != error_mark_node && DECL_PRESERVE_P (r))
10665 mark_used (r);
10666 }
10667 else if (TREE_CODE (r) == FIELD_DECL)
10668 {
10669 /* Determine whether R has a valid type and can be
10670 completed later. If R is invalid, then its type
10671 is replaced by error_mark_node. */
10672 tree rtype = TREE_TYPE (r);
10673 if (can_complete_type_without_circularity (rtype))
10674 complete_type (rtype);
10675
10676 if (!complete_or_array_type_p (rtype))
10677 {
10678 /* If R's type couldn't be completed and
10679 it isn't a flexible array member (whose
10680 type is incomplete by definition) give
10681 an error. */
10682 cxx_incomplete_type_error (r, rtype);
10683 TREE_TYPE (r) = error_mark_node;
10684 }
10685 }
10686
10687 /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
10688 such a thing will already have been added to the field
10689 list by tsubst_enum in finish_member_declaration in the
10690 CLASSTYPE_NESTED_UTDS case above. */
10691 if (!(TREE_CODE (r) == TYPE_DECL
10692 && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
10693 && DECL_ARTIFICIAL (r)))
10694 {
10695 set_current_access_from_decl (r);
10696 finish_member_declaration (r);
10697 }
10698 }
10699 }
10700 }
10701 }
10702 else
10703 {
10704 if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t)
10705 || DECL_TEMPLATE_TEMPLATE_PARM_P (t))
10706 {
10707 /* Build new CLASSTYPE_FRIEND_CLASSES. */
10708
10709 tree friend_type = t;
10710 bool adjust_processing_template_decl = false;
10711
10712 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
10713 {
10714 /* template <class T> friend class C; */
10715 friend_type = tsubst_friend_class (friend_type, args);
10716 adjust_processing_template_decl = true;
10717 }
10718 else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
10719 {
10720 /* template <class T> friend class C::D; */
10721 friend_type = tsubst (friend_type, args,
10722 tf_warning_or_error, NULL_TREE);
10723 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
10724 friend_type = TREE_TYPE (friend_type);
10725 adjust_processing_template_decl = true;
10726 }
10727 else if (TREE_CODE (friend_type) == TYPENAME_TYPE
10728 || TREE_CODE (friend_type) == TEMPLATE_TYPE_PARM)
10729 {
10730 /* This could be either
10731
10732 friend class T::C;
10733
10734 when dependent_type_p is false or
10735
10736 template <class U> friend class T::C;
10737
10738 otherwise. */
10739 /* Bump processing_template_decl in case this is something like
10740 template <class T> friend struct A<T>::B. */
10741 ++processing_template_decl;
10742 friend_type = tsubst (friend_type, args,
10743 tf_warning_or_error, NULL_TREE);
10744 if (dependent_type_p (friend_type))
10745 adjust_processing_template_decl = true;
10746 --processing_template_decl;
10747 }
10748 else if (TREE_CODE (friend_type) != BOUND_TEMPLATE_TEMPLATE_PARM
10749 && !CLASSTYPE_USE_TEMPLATE (friend_type)
10750 && TYPE_HIDDEN_P (friend_type))
10751 {
10752 /* friend class C;
10753
10754 where C hasn't been declared yet. Let's lookup name
10755 from namespace scope directly, bypassing any name that
10756 come from dependent base class. */
10757 tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
10758
10759 /* The call to xref_tag_from_type does injection for friend
10760 classes. */
10761 push_nested_namespace (ns);
10762 friend_type =
10763 xref_tag_from_type (friend_type, NULL_TREE,
10764 /*tag_scope=*/ts_current);
10765 pop_nested_namespace (ns);
10766 }
10767 else if (uses_template_parms (friend_type))
10768 /* friend class C<T>; */
10769 friend_type = tsubst (friend_type, args,
10770 tf_warning_or_error, NULL_TREE);
10771 /* Otherwise it's
10772
10773 friend class C;
10774
10775 where C is already declared or
10776
10777 friend class C<int>;
10778
10779 We don't have to do anything in these cases. */
10780
10781 if (adjust_processing_template_decl)
10782 /* Trick make_friend_class into realizing that the friend
10783 we're adding is a template, not an ordinary class. It's
10784 important that we use make_friend_class since it will
10785 perform some error-checking and output cross-reference
10786 information. */
10787 ++processing_template_decl;
10788
10789 if (friend_type != error_mark_node)
10790 make_friend_class (type, friend_type, /*complain=*/false);
10791
10792 if (adjust_processing_template_decl)
10793 --processing_template_decl;
10794 }
10795 else
10796 {
10797 /* Build new DECL_FRIENDLIST. */
10798 tree r;
10799
10800 /* The file and line for this declaration, to
10801 assist in error message reporting. Since we
10802 called push_tinst_level above, we don't need to
10803 restore these. */
10804 input_location = DECL_SOURCE_LOCATION (t);
10805
10806 if (TREE_CODE (t) == TEMPLATE_DECL)
10807 {
10808 ++processing_template_decl;
10809 push_deferring_access_checks (dk_no_check);
10810 }
10811
10812 r = tsubst_friend_function (t, args);
10813 add_friend (type, r, /*complain=*/false);
10814 if (TREE_CODE (t) == TEMPLATE_DECL)
10815 {
10816 pop_deferring_access_checks ();
10817 --processing_template_decl;
10818 }
10819 }
10820 }
10821 }
10822
10823 if (fn_context)
10824 {
10825 /* Restore these before substituting into the lambda capture
10826 initializers. */
10827 cp_unevaluated_operand = saved_unevaluated_operand;
10828 c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
10829 }
10830
10831 if (tree expr = CLASSTYPE_LAMBDA_EXPR (type))
10832 {
10833 tree decl = lambda_function (type);
10834 if (decl)
10835 {
10836 if (cxx_dialect >= cxx17)
10837 CLASSTYPE_LITERAL_P (type) = true;
10838
10839 if (!DECL_TEMPLATE_INFO (decl)
10840 || DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (decl)) != decl)
10841 {
10842 /* Set function_depth to avoid garbage collection. */
10843 ++function_depth;
10844 instantiate_decl (decl, /*defer_ok=*/false, false);
10845 --function_depth;
10846 }
10847
10848 /* We need to instantiate the capture list from the template
10849 after we've instantiated the closure members, but before we
10850 consider adding the conversion op. Also keep any captures
10851 that may have been added during instantiation of the op(). */
10852 tree tmpl_expr = CLASSTYPE_LAMBDA_EXPR (pattern);
10853 tree tmpl_cap
10854 = tsubst_copy_and_build (LAMBDA_EXPR_CAPTURE_LIST (tmpl_expr),
10855 args, tf_warning_or_error, NULL_TREE,
10856 false, false);
10857
10858 LAMBDA_EXPR_CAPTURE_LIST (expr)
10859 = chainon (tmpl_cap, nreverse (LAMBDA_EXPR_CAPTURE_LIST (expr)));
10860
10861 maybe_add_lambda_conv_op (type);
10862 }
10863 else
10864 gcc_assert (errorcount);
10865 }
10866
10867 /* Set the file and line number information to whatever is given for
10868 the class itself. This puts error messages involving generated
10869 implicit functions at a predictable point, and the same point
10870 that would be used for non-template classes. */
10871 input_location = DECL_SOURCE_LOCATION (typedecl);
10872
10873 unreverse_member_declarations (type);
10874 finish_struct_1 (type);
10875 TYPE_BEING_DEFINED (type) = 0;
10876
10877 /* We don't instantiate default arguments for member functions. 14.7.1:
10878
10879 The implicit instantiation of a class template specialization causes
10880 the implicit instantiation of the declarations, but not of the
10881 definitions or default arguments, of the class member functions,
10882 member classes, static data members and member templates.... */
10883
10884 /* Some typedefs referenced from within the template code need to be access
10885 checked at template instantiation time, i.e now. These types were
10886 added to the template at parsing time. Let's get those and perform
10887 the access checks then. */
10888 perform_typedefs_access_check (pattern, args);
10889 perform_deferred_access_checks (tf_warning_or_error);
10890 pop_nested_class ();
10891 maximum_field_alignment = saved_maximum_field_alignment;
10892 if (!fn_context)
10893 pop_from_top_level ();
10894 pop_deferring_access_checks ();
10895 pop_tinst_level ();
10896
10897 /* The vtable for a template class can be emitted in any translation
10898 unit in which the class is instantiated. When there is no key
10899 method, however, finish_struct_1 will already have added TYPE to
10900 the keyed_classes. */
10901 if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
10902 vec_safe_push (keyed_classes, type);
10903
10904 return type;
10905 }
10906
10907 /* Wrapper for instantiate_class_template_1. */
10908
10909 tree
10910 instantiate_class_template (tree type)
10911 {
10912 tree ret;
10913 timevar_push (TV_TEMPLATE_INST);
10914 ret = instantiate_class_template_1 (type);
10915 timevar_pop (TV_TEMPLATE_INST);
10916 return ret;
10917 }
10918
10919 static tree
10920 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
10921 {
10922 tree r;
10923
10924 if (!t)
10925 r = t;
10926 else if (TYPE_P (t))
10927 r = tsubst (t, args, complain, in_decl);
10928 else
10929 {
10930 if (!(complain & tf_warning))
10931 ++c_inhibit_evaluation_warnings;
10932 r = tsubst_expr (t, args, complain, in_decl,
10933 /*integral_constant_expression_p=*/true);
10934 if (!(complain & tf_warning))
10935 --c_inhibit_evaluation_warnings;
10936 }
10937 return r;
10938 }
10939
10940 /* Given a function parameter pack TMPL_PARM and some function parameters
10941 instantiated from it at *SPEC_P, return a NONTYPE_ARGUMENT_PACK of them
10942 and set *SPEC_P to point at the next point in the list. */
10943
10944 tree
10945 extract_fnparm_pack (tree tmpl_parm, tree *spec_p)
10946 {
10947 /* Collect all of the extra "packed" parameters into an
10948 argument pack. */
10949 tree parmvec;
10950 tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
10951 tree spec_parm = *spec_p;
10952 int i, len;
10953
10954 for (len = 0; spec_parm; ++len, spec_parm = TREE_CHAIN (spec_parm))
10955 if (tmpl_parm
10956 && !function_parameter_expanded_from_pack_p (spec_parm, tmpl_parm))
10957 break;
10958
10959 /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters. */
10960 parmvec = make_tree_vec (len);
10961 spec_parm = *spec_p;
10962 for (i = 0; i < len; i++, spec_parm = DECL_CHAIN (spec_parm))
10963 TREE_VEC_ELT (parmvec, i) = spec_parm;
10964
10965 /* Build the argument packs. */
10966 SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
10967 *spec_p = spec_parm;
10968
10969 return argpack;
10970 }
10971
10972 /* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
10973 NONTYPE_ARGUMENT_PACK. */
10974
10975 static tree
10976 make_fnparm_pack (tree spec_parm)
10977 {
10978 return extract_fnparm_pack (NULL_TREE, &spec_parm);
10979 }
10980
10981 /* Return 1 if the Ith element of the argument pack ARG_PACK is a
10982 pack expansion with no extra args, 2 if it has extra args, or 0
10983 if it is not a pack expansion. */
10984
10985 static int
10986 argument_pack_element_is_expansion_p (tree arg_pack, int i)
10987 {
10988 tree vec = ARGUMENT_PACK_ARGS (arg_pack);
10989 if (i >= TREE_VEC_LENGTH (vec))
10990 return 0;
10991 tree elt = TREE_VEC_ELT (vec, i);
10992 if (DECL_P (elt))
10993 /* A decl pack is itself an expansion. */
10994 elt = TREE_TYPE (elt);
10995 if (!PACK_EXPANSION_P (elt))
10996 return 0;
10997 if (PACK_EXPANSION_EXTRA_ARGS (elt))
10998 return 2;
10999 return 1;
11000 }
11001
11002
11003 /* Creates and return an ARGUMENT_PACK_SELECT tree node. */
11004
11005 static tree
11006 make_argument_pack_select (tree arg_pack, unsigned index)
11007 {
11008 tree aps = make_node (ARGUMENT_PACK_SELECT);
11009
11010 ARGUMENT_PACK_SELECT_FROM_PACK (aps) = arg_pack;
11011 ARGUMENT_PACK_SELECT_INDEX (aps) = index;
11012
11013 return aps;
11014 }
11015
11016 /* This is a subroutine of tsubst_pack_expansion.
11017
11018 It returns TRUE if we need to use the PACK_EXPANSION_EXTRA_ARGS
11019 mechanism to store the (non complete list of) arguments of the
11020 substitution and return a non substituted pack expansion, in order
11021 to wait for when we have enough arguments to really perform the
11022 substitution. */
11023
11024 static bool
11025 use_pack_expansion_extra_args_p (tree parm_packs,
11026 int arg_pack_len,
11027 bool has_empty_arg)
11028 {
11029 /* If one pack has an expansion and another pack has a normal
11030 argument or if one pack has an empty argument and an another
11031 one hasn't then tsubst_pack_expansion cannot perform the
11032 substitution and need to fall back on the
11033 PACK_EXPANSION_EXTRA mechanism. */
11034 if (parm_packs == NULL_TREE)
11035 return false;
11036 else if (has_empty_arg)
11037 return true;
11038
11039 bool has_expansion_arg = false;
11040 for (int i = 0 ; i < arg_pack_len; ++i)
11041 {
11042 bool has_non_expansion_arg = false;
11043 for (tree parm_pack = parm_packs;
11044 parm_pack;
11045 parm_pack = TREE_CHAIN (parm_pack))
11046 {
11047 tree arg = TREE_VALUE (parm_pack);
11048
11049 int exp = argument_pack_element_is_expansion_p (arg, i);
11050 if (exp == 2)
11051 /* We can't substitute a pack expansion with extra args into
11052 our pattern. */
11053 return true;
11054 else if (exp)
11055 has_expansion_arg = true;
11056 else
11057 has_non_expansion_arg = true;
11058 }
11059
11060 if (has_expansion_arg && has_non_expansion_arg)
11061 return true;
11062 }
11063 return false;
11064 }
11065
11066 /* [temp.variadic]/6 says that:
11067
11068 The instantiation of a pack expansion [...]
11069 produces a list E1,E2, ..., En, where N is the number of elements
11070 in the pack expansion parameters.
11071
11072 This subroutine of tsubst_pack_expansion produces one of these Ei.
11073
11074 PATTERN is the pattern of the pack expansion. PARM_PACKS is a
11075 TREE_LIST in which each TREE_PURPOSE is a parameter pack of
11076 PATTERN, and each TREE_VALUE is its corresponding argument pack.
11077 INDEX is the index 'i' of the element Ei to produce. ARGS,
11078 COMPLAIN, and IN_DECL are the same parameters as for the
11079 tsubst_pack_expansion function.
11080
11081 The function returns the resulting Ei upon successful completion,
11082 or error_mark_node.
11083
11084 Note that this function possibly modifies the ARGS parameter, so
11085 it's the responsibility of the caller to restore it. */
11086
11087 static tree
11088 gen_elem_of_pack_expansion_instantiation (tree pattern,
11089 tree parm_packs,
11090 unsigned index,
11091 tree args /* This parm gets
11092 modified. */,
11093 tsubst_flags_t complain,
11094 tree in_decl)
11095 {
11096 tree t;
11097 bool ith_elem_is_expansion = false;
11098
11099 /* For each parameter pack, change the substitution of the parameter
11100 pack to the ith argument in its argument pack, then expand the
11101 pattern. */
11102 for (tree pack = parm_packs; pack; pack = TREE_CHAIN (pack))
11103 {
11104 tree parm = TREE_PURPOSE (pack);
11105 tree arg_pack = TREE_VALUE (pack);
11106 tree aps; /* instance of ARGUMENT_PACK_SELECT. */
11107
11108 ith_elem_is_expansion |=
11109 argument_pack_element_is_expansion_p (arg_pack, index);
11110
11111 /* Select the Ith argument from the pack. */
11112 if (TREE_CODE (parm) == PARM_DECL
11113 || TREE_CODE (parm) == FIELD_DECL)
11114 {
11115 if (index == 0)
11116 {
11117 aps = make_argument_pack_select (arg_pack, index);
11118 if (!mark_used (parm, complain) && !(complain & tf_error))
11119 return error_mark_node;
11120 register_local_specialization (aps, parm);
11121 }
11122 else
11123 aps = retrieve_local_specialization (parm);
11124 }
11125 else
11126 {
11127 int idx, level;
11128 template_parm_level_and_index (parm, &level, &idx);
11129
11130 if (index == 0)
11131 {
11132 aps = make_argument_pack_select (arg_pack, index);
11133 /* Update the corresponding argument. */
11134 TMPL_ARG (args, level, idx) = aps;
11135 }
11136 else
11137 /* Re-use the ARGUMENT_PACK_SELECT. */
11138 aps = TMPL_ARG (args, level, idx);
11139 }
11140 ARGUMENT_PACK_SELECT_INDEX (aps) = index;
11141 }
11142
11143 /* Substitute into the PATTERN with the (possibly altered)
11144 arguments. */
11145 if (pattern == in_decl)
11146 /* Expanding a fixed parameter pack from
11147 coerce_template_parameter_pack. */
11148 t = tsubst_decl (pattern, args, complain);
11149 else if (pattern == error_mark_node)
11150 t = error_mark_node;
11151 else if (constraint_p (pattern))
11152 {
11153 if (processing_template_decl)
11154 t = tsubst_constraint (pattern, args, complain, in_decl);
11155 else
11156 t = (constraints_satisfied_p (pattern, args)
11157 ? boolean_true_node : boolean_false_node);
11158 }
11159 else if (!TYPE_P (pattern))
11160 t = tsubst_expr (pattern, args, complain, in_decl,
11161 /*integral_constant_expression_p=*/false);
11162 else
11163 t = tsubst (pattern, args, complain, in_decl);
11164
11165 /* If the Ith argument pack element is a pack expansion, then
11166 the Ith element resulting from the substituting is going to
11167 be a pack expansion as well. */
11168 if (ith_elem_is_expansion)
11169 t = make_pack_expansion (t, complain);
11170
11171 return t;
11172 }
11173
11174 /* When the unexpanded parameter pack in a fold expression expands to an empty
11175 sequence, the value of the expression is as follows; the program is
11176 ill-formed if the operator is not listed in this table.
11177
11178 && true
11179 || false
11180 , void() */
11181
11182 tree
11183 expand_empty_fold (tree t, tsubst_flags_t complain)
11184 {
11185 tree_code code = (tree_code)TREE_INT_CST_LOW (TREE_OPERAND (t, 0));
11186 if (!FOLD_EXPR_MODIFY_P (t))
11187 switch (code)
11188 {
11189 case TRUTH_ANDIF_EXPR:
11190 return boolean_true_node;
11191 case TRUTH_ORIF_EXPR:
11192 return boolean_false_node;
11193 case COMPOUND_EXPR:
11194 return void_node;
11195 default:
11196 break;
11197 }
11198
11199 if (complain & tf_error)
11200 error_at (location_of (t),
11201 "fold of empty expansion over %O", code);
11202 return error_mark_node;
11203 }
11204
11205 /* Given a fold-expression T and a current LEFT and RIGHT operand,
11206 form an expression that combines the two terms using the
11207 operator of T. */
11208
11209 static tree
11210 fold_expression (tree t, tree left, tree right, tsubst_flags_t complain)
11211 {
11212 tree op = FOLD_EXPR_OP (t);
11213 tree_code code = (tree_code)TREE_INT_CST_LOW (op);
11214
11215 // Handle compound assignment operators.
11216 if (FOLD_EXPR_MODIFY_P (t))
11217 return build_x_modify_expr (input_location, left, code, right, complain);
11218
11219 switch (code)
11220 {
11221 case COMPOUND_EXPR:
11222 return build_x_compound_expr (input_location, left, right, complain);
11223 case DOTSTAR_EXPR:
11224 return build_m_component_ref (left, right, complain);
11225 default:
11226 return build_x_binary_op (input_location, code,
11227 left, TREE_CODE (left),
11228 right, TREE_CODE (right),
11229 /*overload=*/NULL,
11230 complain);
11231 }
11232 }
11233
11234 /* Substitute ARGS into the pack of a fold expression T. */
11235
11236 static inline tree
11237 tsubst_fold_expr_pack (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11238 {
11239 return tsubst_pack_expansion (FOLD_EXPR_PACK (t), args, complain, in_decl);
11240 }
11241
11242 /* Substitute ARGS into the pack of a fold expression T. */
11243
11244 static inline tree
11245 tsubst_fold_expr_init (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11246 {
11247 return tsubst_expr (FOLD_EXPR_INIT (t), args, complain, in_decl, false);
11248 }
11249
11250 /* Expand a PACK of arguments into a grouped as left fold.
11251 Given a pack containing elements A0, A1, ..., An and an
11252 operator @, this builds the expression:
11253
11254 ((A0 @ A1) @ A2) ... @ An
11255
11256 Note that PACK must not be empty.
11257
11258 The operator is defined by the original fold expression T. */
11259
11260 static tree
11261 expand_left_fold (tree t, tree pack, tsubst_flags_t complain)
11262 {
11263 tree left = TREE_VEC_ELT (pack, 0);
11264 for (int i = 1; i < TREE_VEC_LENGTH (pack); ++i)
11265 {
11266 tree right = TREE_VEC_ELT (pack, i);
11267 left = fold_expression (t, left, right, complain);
11268 }
11269 return left;
11270 }
11271
11272 /* Substitute into a unary left fold expression. */
11273
11274 static tree
11275 tsubst_unary_left_fold (tree t, tree args, tsubst_flags_t complain,
11276 tree in_decl)
11277 {
11278 tree pack = tsubst_fold_expr_pack (t, args, complain, in_decl);
11279 if (pack == error_mark_node)
11280 return error_mark_node;
11281 if (PACK_EXPANSION_P (pack))
11282 {
11283 tree r = copy_node (t);
11284 FOLD_EXPR_PACK (r) = pack;
11285 return r;
11286 }
11287 if (TREE_VEC_LENGTH (pack) == 0)
11288 return expand_empty_fold (t, complain);
11289 else
11290 return expand_left_fold (t, pack, complain);
11291 }
11292
11293 /* Substitute into a binary left fold expression.
11294
11295 Do ths by building a single (non-empty) vector of argumnts and
11296 building the expression from those elements. */
11297
11298 static tree
11299 tsubst_binary_left_fold (tree t, tree args, tsubst_flags_t complain,
11300 tree in_decl)
11301 {
11302 tree pack = tsubst_fold_expr_pack (t, args, complain, in_decl);
11303 if (pack == error_mark_node)
11304 return error_mark_node;
11305 tree init = tsubst_fold_expr_init (t, args, complain, in_decl);
11306 if (init == error_mark_node)
11307 return error_mark_node;
11308
11309 if (PACK_EXPANSION_P (pack))
11310 {
11311 tree r = copy_node (t);
11312 FOLD_EXPR_PACK (r) = pack;
11313 FOLD_EXPR_INIT (r) = init;
11314 return r;
11315 }
11316
11317 tree vec = make_tree_vec (TREE_VEC_LENGTH (pack) + 1);
11318 TREE_VEC_ELT (vec, 0) = init;
11319 for (int i = 0; i < TREE_VEC_LENGTH (pack); ++i)
11320 TREE_VEC_ELT (vec, i + 1) = TREE_VEC_ELT (pack, i);
11321
11322 return expand_left_fold (t, vec, complain);
11323 }
11324
11325 /* Expand a PACK of arguments into a grouped as right fold.
11326 Given a pack containing elementns A0, A1, ..., and an
11327 operator @, this builds the expression:
11328
11329 A0@ ... (An-2 @ (An-1 @ An))
11330
11331 Note that PACK must not be empty.
11332
11333 The operator is defined by the original fold expression T. */
11334
11335 tree
11336 expand_right_fold (tree t, tree pack, tsubst_flags_t complain)
11337 {
11338 // Build the expression.
11339 int n = TREE_VEC_LENGTH (pack);
11340 tree right = TREE_VEC_ELT (pack, n - 1);
11341 for (--n; n != 0; --n)
11342 {
11343 tree left = TREE_VEC_ELT (pack, n - 1);
11344 right = fold_expression (t, left, right, complain);
11345 }
11346 return right;
11347 }
11348
11349 /* Substitute into a unary right fold expression. */
11350
11351 static tree
11352 tsubst_unary_right_fold (tree t, tree args, tsubst_flags_t complain,
11353 tree in_decl)
11354 {
11355 tree pack = tsubst_fold_expr_pack (t, args, complain, in_decl);
11356 if (pack == error_mark_node)
11357 return error_mark_node;
11358 if (PACK_EXPANSION_P (pack))
11359 {
11360 tree r = copy_node (t);
11361 FOLD_EXPR_PACK (r) = pack;
11362 return r;
11363 }
11364 if (TREE_VEC_LENGTH (pack) == 0)
11365 return expand_empty_fold (t, complain);
11366 else
11367 return expand_right_fold (t, pack, complain);
11368 }
11369
11370 /* Substitute into a binary right fold expression.
11371
11372 Do ths by building a single (non-empty) vector of arguments and
11373 building the expression from those elements. */
11374
11375 static tree
11376 tsubst_binary_right_fold (tree t, tree args, tsubst_flags_t complain,
11377 tree in_decl)
11378 {
11379 tree pack = tsubst_fold_expr_pack (t, args, complain, in_decl);
11380 if (pack == error_mark_node)
11381 return error_mark_node;
11382 tree init = tsubst_fold_expr_init (t, args, complain, in_decl);
11383 if (init == error_mark_node)
11384 return error_mark_node;
11385
11386 if (PACK_EXPANSION_P (pack))
11387 {
11388 tree r = copy_node (t);
11389 FOLD_EXPR_PACK (r) = pack;
11390 FOLD_EXPR_INIT (r) = init;
11391 return r;
11392 }
11393
11394 int n = TREE_VEC_LENGTH (pack);
11395 tree vec = make_tree_vec (n + 1);
11396 for (int i = 0; i < n; ++i)
11397 TREE_VEC_ELT (vec, i) = TREE_VEC_ELT (pack, i);
11398 TREE_VEC_ELT (vec, n) = init;
11399
11400 return expand_right_fold (t, vec, complain);
11401 }
11402
11403
11404 /* Substitute ARGS into T, which is an pack expansion
11405 (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
11406 TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
11407 (if only a partial substitution could be performed) or
11408 ERROR_MARK_NODE if there was an error. */
11409 tree
11410 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
11411 tree in_decl)
11412 {
11413 tree pattern;
11414 tree pack, packs = NULL_TREE;
11415 bool unsubstituted_packs = false;
11416 int i, len = -1;
11417 tree result;
11418 hash_map<tree, tree> *saved_local_specializations = NULL;
11419 bool need_local_specializations = false;
11420 int levels;
11421
11422 gcc_assert (PACK_EXPANSION_P (t));
11423 pattern = PACK_EXPANSION_PATTERN (t);
11424
11425 /* Add in any args remembered from an earlier partial instantiation. */
11426 args = add_to_template_args (PACK_EXPANSION_EXTRA_ARGS (t), args);
11427
11428 levels = TMPL_ARGS_DEPTH (args);
11429
11430 /* Determine the argument packs that will instantiate the parameter
11431 packs used in the expansion expression. While we're at it,
11432 compute the number of arguments to be expanded and make sure it
11433 is consistent. */
11434 for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack;
11435 pack = TREE_CHAIN (pack))
11436 {
11437 tree parm_pack = TREE_VALUE (pack);
11438 tree arg_pack = NULL_TREE;
11439 tree orig_arg = NULL_TREE;
11440 int level = 0;
11441
11442 if (TREE_CODE (parm_pack) == BASES)
11443 {
11444 gcc_assert (parm_pack == pattern);
11445 if (BASES_DIRECT (parm_pack))
11446 return calculate_direct_bases (tsubst_expr (BASES_TYPE (parm_pack),
11447 args, complain, in_decl, false));
11448 else
11449 return calculate_bases (tsubst_expr (BASES_TYPE (parm_pack),
11450 args, complain, in_decl, false));
11451 }
11452 else if (builtin_pack_call_p (parm_pack))
11453 {
11454 /* ??? Support use in other patterns. */
11455 gcc_assert (parm_pack == pattern);
11456 return expand_builtin_pack_call (parm_pack, args,
11457 complain, in_decl);
11458 }
11459 else if (TREE_CODE (parm_pack) == PARM_DECL)
11460 {
11461 /* We know we have correct local_specializations if this
11462 expansion is at function scope, or if we're dealing with a
11463 local parameter in a requires expression; for the latter,
11464 tsubst_requires_expr set it up appropriately. */
11465 if (PACK_EXPANSION_LOCAL_P (t) || CONSTRAINT_VAR_P (parm_pack))
11466 arg_pack = retrieve_local_specialization (parm_pack);
11467 else
11468 /* We can't rely on local_specializations for a parameter
11469 name used later in a function declaration (such as in a
11470 late-specified return type). Even if it exists, it might
11471 have the wrong value for a recursive call. */
11472 need_local_specializations = true;
11473
11474 if (!arg_pack)
11475 {
11476 /* This parameter pack was used in an unevaluated context. Just
11477 make a dummy decl, since it's only used for its type. */
11478 arg_pack = tsubst_decl (parm_pack, args, complain);
11479 if (arg_pack && DECL_PACK_P (arg_pack))
11480 /* Partial instantiation of the parm_pack, we can't build
11481 up an argument pack yet. */
11482 arg_pack = NULL_TREE;
11483 else
11484 arg_pack = make_fnparm_pack (arg_pack);
11485 }
11486 }
11487 else if (TREE_CODE (parm_pack) == FIELD_DECL)
11488 arg_pack = tsubst_copy (parm_pack, args, complain, in_decl);
11489 else
11490 {
11491 int idx;
11492 template_parm_level_and_index (parm_pack, &level, &idx);
11493
11494 if (level <= levels)
11495 arg_pack = TMPL_ARG (args, level, idx);
11496 }
11497
11498 orig_arg = arg_pack;
11499 if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
11500 arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
11501
11502 if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
11503 /* This can only happen if we forget to expand an argument
11504 pack somewhere else. Just return an error, silently. */
11505 {
11506 result = make_tree_vec (1);
11507 TREE_VEC_ELT (result, 0) = error_mark_node;
11508 return result;
11509 }
11510
11511 if (arg_pack)
11512 {
11513 int my_len =
11514 TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
11515
11516 /* Don't bother trying to do a partial substitution with
11517 incomplete packs; we'll try again after deduction. */
11518 if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
11519 return t;
11520
11521 if (len < 0)
11522 len = my_len;
11523 else if (len != my_len)
11524 {
11525 if (!(complain & tf_error))
11526 /* Fail quietly. */;
11527 else if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
11528 error ("mismatched argument pack lengths while expanding %qT",
11529 pattern);
11530 else
11531 error ("mismatched argument pack lengths while expanding %qE",
11532 pattern);
11533 return error_mark_node;
11534 }
11535
11536 /* Keep track of the parameter packs and their corresponding
11537 argument packs. */
11538 packs = tree_cons (parm_pack, arg_pack, packs);
11539 TREE_TYPE (packs) = orig_arg;
11540 }
11541 else
11542 {
11543 /* We can't substitute for this parameter pack. We use a flag as
11544 well as the missing_level counter because function parameter
11545 packs don't have a level. */
11546 gcc_assert (processing_template_decl);
11547 unsubstituted_packs = true;
11548 }
11549 }
11550
11551 /* If the expansion is just T..., return the matching argument pack, unless
11552 we need to call convert_from_reference on all the elements. This is an
11553 important optimization; see c++/68422. */
11554 if (!unsubstituted_packs
11555 && TREE_PURPOSE (packs) == pattern)
11556 {
11557 tree args = ARGUMENT_PACK_ARGS (TREE_VALUE (packs));
11558 /* Types need no adjustment, nor does sizeof..., and if we still have
11559 some pack expansion args we won't do anything yet. */
11560 if (TREE_CODE (t) == TYPE_PACK_EXPANSION
11561 || PACK_EXPANSION_SIZEOF_P (t)
11562 || pack_expansion_args_count (args))
11563 return args;
11564 /* Also optimize expression pack expansions if we can tell that the
11565 elements won't have reference type. */
11566 tree type = TREE_TYPE (pattern);
11567 if (type && TREE_CODE (type) != REFERENCE_TYPE
11568 && !PACK_EXPANSION_P (type)
11569 && !WILDCARD_TYPE_P (type))
11570 return args;
11571 /* Otherwise use the normal path so we get convert_from_reference. */
11572 }
11573
11574 /* We cannot expand this expansion expression, because we don't have
11575 all of the argument packs we need. */
11576 if (use_pack_expansion_extra_args_p (packs, len, unsubstituted_packs))
11577 {
11578 /* We got some full packs, but we can't substitute them in until we
11579 have values for all the packs. So remember these until then. */
11580
11581 t = make_pack_expansion (pattern, complain);
11582 PACK_EXPANSION_EXTRA_ARGS (t) = args;
11583 return t;
11584 }
11585 else if (unsubstituted_packs)
11586 {
11587 /* There were no real arguments, we're just replacing a parameter
11588 pack with another version of itself. Substitute into the
11589 pattern and return a PACK_EXPANSION_*. The caller will need to
11590 deal with that. */
11591 if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
11592 t = tsubst_expr (pattern, args, complain, in_decl,
11593 /*integral_constant_expression_p=*/false);
11594 else
11595 t = tsubst (pattern, args, complain, in_decl);
11596 t = make_pack_expansion (t, complain);
11597 return t;
11598 }
11599
11600 gcc_assert (len >= 0);
11601
11602 if (need_local_specializations)
11603 {
11604 /* We're in a late-specified return type, so create our own local
11605 specializations map; the current map is either NULL or (in the
11606 case of recursive unification) might have bindings that we don't
11607 want to use or alter. */
11608 saved_local_specializations = local_specializations;
11609 local_specializations = new hash_map<tree, tree>;
11610 }
11611
11612 /* For each argument in each argument pack, substitute into the
11613 pattern. */
11614 result = make_tree_vec (len);
11615 tree elem_args = copy_template_args (args);
11616 for (i = 0; i < len; ++i)
11617 {
11618 t = gen_elem_of_pack_expansion_instantiation (pattern, packs,
11619 i,
11620 elem_args, complain,
11621 in_decl);
11622 TREE_VEC_ELT (result, i) = t;
11623 if (t == error_mark_node)
11624 {
11625 result = error_mark_node;
11626 break;
11627 }
11628 }
11629
11630 /* Update ARGS to restore the substitution from parameter packs to
11631 their argument packs. */
11632 for (pack = packs; pack; pack = TREE_CHAIN (pack))
11633 {
11634 tree parm = TREE_PURPOSE (pack);
11635
11636 if (TREE_CODE (parm) == PARM_DECL
11637 || TREE_CODE (parm) == FIELD_DECL)
11638 register_local_specialization (TREE_TYPE (pack), parm);
11639 else
11640 {
11641 int idx, level;
11642
11643 if (TREE_VALUE (pack) == NULL_TREE)
11644 continue;
11645
11646 template_parm_level_and_index (parm, &level, &idx);
11647
11648 /* Update the corresponding argument. */
11649 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
11650 TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
11651 TREE_TYPE (pack);
11652 else
11653 TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
11654 }
11655 }
11656
11657 if (need_local_specializations)
11658 {
11659 delete local_specializations;
11660 local_specializations = saved_local_specializations;
11661 }
11662
11663 /* If the dependent pack arguments were such that we end up with only a
11664 single pack expansion again, there's no need to keep it in a TREE_VEC. */
11665 if (len == 1 && TREE_CODE (result) == TREE_VEC
11666 && PACK_EXPANSION_P (TREE_VEC_ELT (result, 0)))
11667 return TREE_VEC_ELT (result, 0);
11668
11669 return result;
11670 }
11671
11672 /* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
11673 TMPL. We do this using DECL_PARM_INDEX, which should work even with
11674 parameter packs; all parms generated from a function parameter pack will
11675 have the same DECL_PARM_INDEX. */
11676
11677 tree
11678 get_pattern_parm (tree parm, tree tmpl)
11679 {
11680 tree pattern = DECL_TEMPLATE_RESULT (tmpl);
11681 tree patparm;
11682
11683 if (DECL_ARTIFICIAL (parm))
11684 {
11685 for (patparm = DECL_ARGUMENTS (pattern);
11686 patparm; patparm = DECL_CHAIN (patparm))
11687 if (DECL_ARTIFICIAL (patparm)
11688 && DECL_NAME (parm) == DECL_NAME (patparm))
11689 break;
11690 }
11691 else
11692 {
11693 patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
11694 patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
11695 gcc_assert (DECL_PARM_INDEX (patparm)
11696 == DECL_PARM_INDEX (parm));
11697 }
11698
11699 return patparm;
11700 }
11701
11702 /* Make an argument pack out of the TREE_VEC VEC. */
11703
11704 static tree
11705 make_argument_pack (tree vec)
11706 {
11707 tree pack;
11708 tree elt = TREE_VEC_ELT (vec, 0);
11709 if (TYPE_P (elt))
11710 pack = cxx_make_type (TYPE_ARGUMENT_PACK);
11711 else
11712 {
11713 pack = make_node (NONTYPE_ARGUMENT_PACK);
11714 TREE_CONSTANT (pack) = 1;
11715 }
11716 SET_ARGUMENT_PACK_ARGS (pack, vec);
11717 return pack;
11718 }
11719
11720 /* Return an exact copy of template args T that can be modified
11721 independently. */
11722
11723 static tree
11724 copy_template_args (tree t)
11725 {
11726 if (t == error_mark_node)
11727 return t;
11728
11729 int len = TREE_VEC_LENGTH (t);
11730 tree new_vec = make_tree_vec (len);
11731
11732 for (int i = 0; i < len; ++i)
11733 {
11734 tree elt = TREE_VEC_ELT (t, i);
11735 if (elt && TREE_CODE (elt) == TREE_VEC)
11736 elt = copy_template_args (elt);
11737 TREE_VEC_ELT (new_vec, i) = elt;
11738 }
11739
11740 NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_vec)
11741 = NON_DEFAULT_TEMPLATE_ARGS_COUNT (t);
11742
11743 return new_vec;
11744 }
11745
11746 /* Substitute ARGS into the vector or list of template arguments T. */
11747
11748 static tree
11749 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11750 {
11751 tree orig_t = t;
11752 int len, need_new = 0, i, expanded_len_adjust = 0, out;
11753 tree *elts;
11754
11755 if (t == error_mark_node)
11756 return error_mark_node;
11757
11758 len = TREE_VEC_LENGTH (t);
11759 elts = XALLOCAVEC (tree, len);
11760
11761 for (i = 0; i < len; i++)
11762 {
11763 tree orig_arg = TREE_VEC_ELT (t, i);
11764 tree new_arg;
11765
11766 if (TREE_CODE (orig_arg) == TREE_VEC)
11767 new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
11768 else if (PACK_EXPANSION_P (orig_arg))
11769 {
11770 /* Substitute into an expansion expression. */
11771 new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
11772
11773 if (TREE_CODE (new_arg) == TREE_VEC)
11774 /* Add to the expanded length adjustment the number of
11775 expanded arguments. We subtract one from this
11776 measurement, because the argument pack expression
11777 itself is already counted as 1 in
11778 LEN. EXPANDED_LEN_ADJUST can actually be negative, if
11779 the argument pack is empty. */
11780 expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
11781 }
11782 else if (ARGUMENT_PACK_P (orig_arg))
11783 {
11784 /* Substitute into each of the arguments. */
11785 new_arg = TYPE_P (orig_arg)
11786 ? cxx_make_type (TREE_CODE (orig_arg))
11787 : make_node (TREE_CODE (orig_arg));
11788
11789 tree pack_args = tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
11790 args, complain, in_decl);
11791 if (pack_args == error_mark_node)
11792 new_arg = error_mark_node;
11793 else
11794 SET_ARGUMENT_PACK_ARGS (new_arg, pack_args);
11795
11796 if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK)
11797 TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
11798 }
11799 else
11800 new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
11801
11802 if (new_arg == error_mark_node)
11803 return error_mark_node;
11804
11805 elts[i] = new_arg;
11806 if (new_arg != orig_arg)
11807 need_new = 1;
11808 }
11809
11810 if (!need_new)
11811 return t;
11812
11813 /* Make space for the expanded arguments coming from template
11814 argument packs. */
11815 t = make_tree_vec (len + expanded_len_adjust);
11816 /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
11817 arguments for a member template.
11818 In that case each TREE_VEC in ORIG_T represents a level of template
11819 arguments, and ORIG_T won't carry any non defaulted argument count.
11820 It will rather be the nested TREE_VECs that will carry one.
11821 In other words, ORIG_T carries a non defaulted argument count only
11822 if it doesn't contain any nested TREE_VEC. */
11823 if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
11824 {
11825 int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
11826 count += expanded_len_adjust;
11827 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
11828 }
11829 for (i = 0, out = 0; i < len; i++)
11830 {
11831 if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
11832 || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
11833 && TREE_CODE (elts[i]) == TREE_VEC)
11834 {
11835 int idx;
11836
11837 /* Now expand the template argument pack "in place". */
11838 for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
11839 TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
11840 }
11841 else
11842 {
11843 TREE_VEC_ELT (t, out) = elts[i];
11844 out++;
11845 }
11846 }
11847
11848 return t;
11849 }
11850
11851 /* Substitute ARGS into one level PARMS of template parameters. */
11852
11853 static tree
11854 tsubst_template_parms_level (tree parms, tree args, tsubst_flags_t complain)
11855 {
11856 if (parms == error_mark_node)
11857 return error_mark_node;
11858
11859 tree new_vec = make_tree_vec (TREE_VEC_LENGTH (parms));
11860
11861 for (int i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
11862 {
11863 tree tuple = TREE_VEC_ELT (parms, i);
11864
11865 if (tuple == error_mark_node)
11866 continue;
11867
11868 TREE_VEC_ELT (new_vec, i) =
11869 tsubst_template_parm (tuple, args, complain);
11870 }
11871
11872 return new_vec;
11873 }
11874
11875 /* Return the result of substituting ARGS into the template parameters
11876 given by PARMS. If there are m levels of ARGS and m + n levels of
11877 PARMS, then the result will contain n levels of PARMS. For
11878 example, if PARMS is `template <class T> template <class U>
11879 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
11880 result will be `template <int*, double, class V>'. */
11881
11882 static tree
11883 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
11884 {
11885 tree r = NULL_TREE;
11886 tree* new_parms;
11887
11888 /* When substituting into a template, we must set
11889 PROCESSING_TEMPLATE_DECL as the template parameters may be
11890 dependent if they are based on one-another, and the dependency
11891 predicates are short-circuit outside of templates. */
11892 ++processing_template_decl;
11893
11894 for (new_parms = &r;
11895 parms && TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
11896 new_parms = &(TREE_CHAIN (*new_parms)),
11897 parms = TREE_CHAIN (parms))
11898 {
11899 tree new_vec = tsubst_template_parms_level (TREE_VALUE (parms),
11900 args, complain);
11901 *new_parms =
11902 tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
11903 - TMPL_ARGS_DEPTH (args)),
11904 new_vec, NULL_TREE);
11905 }
11906
11907 --processing_template_decl;
11908
11909 return r;
11910 }
11911
11912 /* Return the result of substituting ARGS into one template parameter
11913 given by T. T Must be a TREE_LIST which TREE_VALUE is the template
11914 parameter and which TREE_PURPOSE is the default argument of the
11915 template parameter. */
11916
11917 static tree
11918 tsubst_template_parm (tree t, tree args, tsubst_flags_t complain)
11919 {
11920 tree default_value, parm_decl;
11921
11922 if (args == NULL_TREE
11923 || t == NULL_TREE
11924 || t == error_mark_node)
11925 return t;
11926
11927 gcc_assert (TREE_CODE (t) == TREE_LIST);
11928
11929 default_value = TREE_PURPOSE (t);
11930 parm_decl = TREE_VALUE (t);
11931
11932 parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
11933 if (TREE_CODE (parm_decl) == PARM_DECL
11934 && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
11935 parm_decl = error_mark_node;
11936 default_value = tsubst_template_arg (default_value, args,
11937 complain, NULL_TREE);
11938
11939 return build_tree_list (default_value, parm_decl);
11940 }
11941
11942 /* Substitute the ARGS into the indicated aggregate (or enumeration)
11943 type T. If T is not an aggregate or enumeration type, it is
11944 handled as if by tsubst. IN_DECL is as for tsubst. If
11945 ENTERING_SCOPE is nonzero, T is the context for a template which
11946 we are presently tsubst'ing. Return the substituted value. */
11947
11948 static tree
11949 tsubst_aggr_type (tree t,
11950 tree args,
11951 tsubst_flags_t complain,
11952 tree in_decl,
11953 int entering_scope)
11954 {
11955 if (t == NULL_TREE)
11956 return NULL_TREE;
11957
11958 switch (TREE_CODE (t))
11959 {
11960 case RECORD_TYPE:
11961 if (TYPE_PTRMEMFUNC_P (t))
11962 return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
11963
11964 /* Fall through. */
11965 case ENUMERAL_TYPE:
11966 case UNION_TYPE:
11967 if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
11968 {
11969 tree argvec;
11970 tree context;
11971 tree r;
11972 int saved_unevaluated_operand;
11973 int saved_inhibit_evaluation_warnings;
11974
11975 /* In "sizeof(X<I>)" we need to evaluate "I". */
11976 saved_unevaluated_operand = cp_unevaluated_operand;
11977 cp_unevaluated_operand = 0;
11978 saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
11979 c_inhibit_evaluation_warnings = 0;
11980
11981 /* First, determine the context for the type we are looking
11982 up. */
11983 context = TYPE_CONTEXT (t);
11984 if (context && TYPE_P (context))
11985 {
11986 context = tsubst_aggr_type (context, args, complain,
11987 in_decl, /*entering_scope=*/1);
11988 /* If context is a nested class inside a class template,
11989 it may still need to be instantiated (c++/33959). */
11990 context = complete_type (context);
11991 }
11992
11993 /* Then, figure out what arguments are appropriate for the
11994 type we are trying to find. For example, given:
11995
11996 template <class T> struct S;
11997 template <class T, class U> void f(T, U) { S<U> su; }
11998
11999 and supposing that we are instantiating f<int, double>,
12000 then our ARGS will be {int, double}, but, when looking up
12001 S we only want {double}. */
12002 argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
12003 complain, in_decl);
12004 if (argvec == error_mark_node)
12005 r = error_mark_node;
12006 else
12007 {
12008 r = lookup_template_class (t, argvec, in_decl, context,
12009 entering_scope, complain);
12010 r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
12011 }
12012
12013 cp_unevaluated_operand = saved_unevaluated_operand;
12014 c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
12015
12016 return r;
12017 }
12018 else
12019 /* This is not a template type, so there's nothing to do. */
12020 return t;
12021
12022 default:
12023 return tsubst (t, args, complain, in_decl);
12024 }
12025 }
12026
12027 static GTY((cache)) tree_cache_map *defarg_inst;
12028
12029 /* Substitute into the default argument ARG (a default argument for
12030 FN), which has the indicated TYPE. */
12031
12032 tree
12033 tsubst_default_argument (tree fn, int parmnum, tree type, tree arg,
12034 tsubst_flags_t complain)
12035 {
12036 tree saved_class_ptr = NULL_TREE;
12037 tree saved_class_ref = NULL_TREE;
12038 int errs = errorcount + sorrycount;
12039
12040 /* This can happen in invalid code. */
12041 if (TREE_CODE (arg) == DEFAULT_ARG)
12042 return arg;
12043
12044 tree parm = FUNCTION_FIRST_USER_PARM (fn);
12045 parm = chain_index (parmnum, parm);
12046 tree parmtype = TREE_TYPE (parm);
12047 if (DECL_BY_REFERENCE (parm))
12048 parmtype = TREE_TYPE (parmtype);
12049 gcc_assert (same_type_ignoring_top_level_qualifiers_p (type, parmtype));
12050
12051 tree *slot;
12052 if (defarg_inst && (slot = defarg_inst->get (parm)))
12053 return *slot;
12054
12055 /* This default argument came from a template. Instantiate the
12056 default argument here, not in tsubst. In the case of
12057 something like:
12058
12059 template <class T>
12060 struct S {
12061 static T t();
12062 void f(T = t());
12063 };
12064
12065 we must be careful to do name lookup in the scope of S<T>,
12066 rather than in the current class. */
12067 push_access_scope (fn);
12068 /* The "this" pointer is not valid in a default argument. */
12069 if (cfun)
12070 {
12071 saved_class_ptr = current_class_ptr;
12072 cp_function_chain->x_current_class_ptr = NULL_TREE;
12073 saved_class_ref = current_class_ref;
12074 cp_function_chain->x_current_class_ref = NULL_TREE;
12075 }
12076
12077 start_lambda_scope (parm);
12078
12079 push_deferring_access_checks(dk_no_deferred);
12080 /* The default argument expression may cause implicitly defined
12081 member functions to be synthesized, which will result in garbage
12082 collection. We must treat this situation as if we were within
12083 the body of function so as to avoid collecting live data on the
12084 stack. */
12085 ++function_depth;
12086 arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
12087 complain, NULL_TREE,
12088 /*integral_constant_expression_p=*/false);
12089 --function_depth;
12090 pop_deferring_access_checks();
12091
12092 finish_lambda_scope ();
12093
12094 /* Restore the "this" pointer. */
12095 if (cfun)
12096 {
12097 cp_function_chain->x_current_class_ptr = saved_class_ptr;
12098 cp_function_chain->x_current_class_ref = saved_class_ref;
12099 }
12100
12101 if (errorcount+sorrycount > errs
12102 && (complain & tf_warning_or_error))
12103 inform (input_location,
12104 " when instantiating default argument for call to %qD", fn);
12105
12106 /* Make sure the default argument is reasonable. */
12107 arg = check_default_argument (type, arg, complain);
12108
12109 pop_access_scope (fn);
12110
12111 if (arg != error_mark_node && !cp_unevaluated_operand)
12112 {
12113 if (!defarg_inst)
12114 defarg_inst = tree_cache_map::create_ggc (37);
12115 defarg_inst->put (parm, arg);
12116 }
12117
12118 return arg;
12119 }
12120
12121 /* Substitute into all the default arguments for FN. */
12122
12123 static void
12124 tsubst_default_arguments (tree fn, tsubst_flags_t complain)
12125 {
12126 tree arg;
12127 tree tmpl_args;
12128
12129 tmpl_args = DECL_TI_ARGS (fn);
12130
12131 /* If this function is not yet instantiated, we certainly don't need
12132 its default arguments. */
12133 if (uses_template_parms (tmpl_args))
12134 return;
12135 /* Don't do this again for clones. */
12136 if (DECL_CLONED_FUNCTION_P (fn))
12137 return;
12138
12139 int i = 0;
12140 for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
12141 arg;
12142 arg = TREE_CHAIN (arg), ++i)
12143 if (TREE_PURPOSE (arg))
12144 TREE_PURPOSE (arg) = tsubst_default_argument (fn, i,
12145 TREE_VALUE (arg),
12146 TREE_PURPOSE (arg),
12147 complain);
12148 }
12149
12150 /* Subroutine of tsubst_decl for the case when T is a FUNCTION_DECL. */
12151
12152 static tree
12153 tsubst_function_decl (tree t, tree args, tsubst_flags_t complain,
12154 tree lambda_fntype)
12155 {
12156 tree gen_tmpl, argvec;
12157 hashval_t hash = 0;
12158 tree in_decl = t;
12159
12160 /* Nobody should be tsubst'ing into non-template functions. */
12161 gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
12162
12163 if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
12164 {
12165 /* If T is not dependent, just return it. */
12166 if (!uses_template_parms (DECL_TI_ARGS (t)))
12167 return t;
12168
12169 /* Calculate the most general template of which R is a
12170 specialization, and the complete set of arguments used to
12171 specialize R. */
12172 gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
12173 argvec = tsubst_template_args (DECL_TI_ARGS
12174 (DECL_TEMPLATE_RESULT
12175 (DECL_TI_TEMPLATE (t))),
12176 args, complain, in_decl);
12177 if (argvec == error_mark_node)
12178 return error_mark_node;
12179
12180 /* Check to see if we already have this specialization. */
12181 if (!lambda_fntype)
12182 {
12183 hash = hash_tmpl_and_args (gen_tmpl, argvec);
12184 if (tree spec = retrieve_specialization (gen_tmpl, argvec, hash))
12185 return spec;
12186 }
12187
12188 /* We can see more levels of arguments than parameters if
12189 there was a specialization of a member template, like
12190 this:
12191
12192 template <class T> struct S { template <class U> void f(); }
12193 template <> template <class U> void S<int>::f(U);
12194
12195 Here, we'll be substituting into the specialization,
12196 because that's where we can find the code we actually
12197 want to generate, but we'll have enough arguments for
12198 the most general template.
12199
12200 We also deal with the peculiar case:
12201
12202 template <class T> struct S {
12203 template <class U> friend void f();
12204 };
12205 template <class U> void f() {}
12206 template S<int>;
12207 template void f<double>();
12208
12209 Here, the ARGS for the instantiation of will be {int,
12210 double}. But, we only need as many ARGS as there are
12211 levels of template parameters in CODE_PATTERN. We are
12212 careful not to get fooled into reducing the ARGS in
12213 situations like:
12214
12215 template <class T> struct S { template <class U> void f(U); }
12216 template <class T> template <> void S<T>::f(int) {}
12217
12218 which we can spot because the pattern will be a
12219 specialization in this case. */
12220 int args_depth = TMPL_ARGS_DEPTH (args);
12221 int parms_depth =
12222 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
12223
12224 if (args_depth > parms_depth && !DECL_TEMPLATE_SPECIALIZATION (t))
12225 args = get_innermost_template_args (args, parms_depth);
12226 }
12227 else
12228 {
12229 /* This special case arises when we have something like this:
12230
12231 template <class T> struct S {
12232 friend void f<int>(int, double);
12233 };
12234
12235 Here, the DECL_TI_TEMPLATE for the friend declaration
12236 will be an IDENTIFIER_NODE. We are being called from
12237 tsubst_friend_function, and we want only to create a
12238 new decl (R) with appropriate types so that we can call
12239 determine_specialization. */
12240 gen_tmpl = NULL_TREE;
12241 argvec = NULL_TREE;
12242 }
12243
12244 tree closure = (lambda_fntype ? TYPE_METHOD_BASETYPE (lambda_fntype)
12245 : NULL_TREE);
12246 tree ctx = closure ? closure : DECL_CONTEXT (t);
12247 bool member = ctx && TYPE_P (ctx);
12248
12249 if (member && !closure)
12250 ctx = tsubst_aggr_type (ctx, args,
12251 complain, t, /*entering_scope=*/1);
12252
12253 tree type = (lambda_fntype ? lambda_fntype
12254 : tsubst (TREE_TYPE (t), args,
12255 complain | tf_fndecl_type, in_decl));
12256 if (type == error_mark_node)
12257 return error_mark_node;
12258
12259 /* If we hit excessive deduction depth, the type is bogus even if
12260 it isn't error_mark_node, so don't build a decl. */
12261 if (excessive_deduction_depth)
12262 return error_mark_node;
12263
12264 /* We do NOT check for matching decls pushed separately at this
12265 point, as they may not represent instantiations of this
12266 template, and in any case are considered separate under the
12267 discrete model. */
12268 tree r = copy_decl (t);
12269 DECL_USE_TEMPLATE (r) = 0;
12270 TREE_TYPE (r) = type;
12271 /* Clear out the mangled name and RTL for the instantiation. */
12272 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
12273 SET_DECL_RTL (r, NULL);
12274 /* Leave DECL_INITIAL set on deleted instantiations. */
12275 if (!DECL_DELETED_FN (r))
12276 DECL_INITIAL (r) = NULL_TREE;
12277 DECL_CONTEXT (r) = ctx;
12278
12279 /* OpenMP UDRs have the only argument a reference to the declared
12280 type. We want to diagnose if the declared type is a reference,
12281 which is invalid, but as references to references are usually
12282 quietly merged, diagnose it here. */
12283 if (DECL_OMP_DECLARE_REDUCTION_P (t))
12284 {
12285 tree argtype
12286 = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (t))));
12287 argtype = tsubst (argtype, args, complain, in_decl);
12288 if (TREE_CODE (argtype) == REFERENCE_TYPE)
12289 error_at (DECL_SOURCE_LOCATION (t),
12290 "reference type %qT in "
12291 "%<#pragma omp declare reduction%>", argtype);
12292 if (strchr (IDENTIFIER_POINTER (DECL_NAME (t)), '~') == NULL)
12293 DECL_NAME (r) = omp_reduction_id (ERROR_MARK, DECL_NAME (t),
12294 argtype);
12295 }
12296
12297 if (member && DECL_CONV_FN_P (r))
12298 /* Type-conversion operator. Reconstruct the name, in
12299 case it's the name of one of the template's parameters. */
12300 DECL_NAME (r) = make_conv_op_name (TREE_TYPE (type));
12301
12302 tree parms = DECL_ARGUMENTS (t);
12303 if (closure)
12304 parms = DECL_CHAIN (parms);
12305 parms = tsubst (parms, args, complain, t);
12306 for (tree parm = parms; parm; parm = DECL_CHAIN (parm))
12307 DECL_CONTEXT (parm) = r;
12308 if (closure)
12309 {
12310 tree tparm = build_this_parm (r, closure, type_memfn_quals (type));
12311 DECL_CHAIN (tparm) = parms;
12312 parms = tparm;
12313 }
12314 DECL_ARGUMENTS (r) = parms;
12315 DECL_RESULT (r) = NULL_TREE;
12316
12317 TREE_STATIC (r) = 0;
12318 TREE_PUBLIC (r) = TREE_PUBLIC (t);
12319 DECL_EXTERNAL (r) = 1;
12320 /* If this is an instantiation of a function with internal
12321 linkage, we already know what object file linkage will be
12322 assigned to the instantiation. */
12323 DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
12324 DECL_DEFER_OUTPUT (r) = 0;
12325 DECL_CHAIN (r) = NULL_TREE;
12326 DECL_PENDING_INLINE_INFO (r) = 0;
12327 DECL_PENDING_INLINE_P (r) = 0;
12328 DECL_SAVED_TREE (r) = NULL_TREE;
12329 DECL_STRUCT_FUNCTION (r) = NULL;
12330 TREE_USED (r) = 0;
12331 /* We'll re-clone as appropriate in instantiate_template. */
12332 DECL_CLONED_FUNCTION (r) = NULL_TREE;
12333
12334 /* If we aren't complaining now, return on error before we register
12335 the specialization so that we'll complain eventually. */
12336 if ((complain & tf_error) == 0
12337 && IDENTIFIER_ANY_OP_P (DECL_NAME (r))
12338 && !grok_op_properties (r, /*complain=*/false))
12339 return error_mark_node;
12340
12341 /* When instantiating a constrained member, substitute
12342 into the constraints to create a new constraint. */
12343 if (tree ci = get_constraints (t))
12344 if (member)
12345 {
12346 ci = tsubst_constraint_info (ci, argvec, complain, NULL_TREE);
12347 set_constraints (r, ci);
12348 }
12349
12350 /* Set up the DECL_TEMPLATE_INFO for R. There's no need to do
12351 this in the special friend case mentioned above where
12352 GEN_TMPL is NULL. */
12353 if (gen_tmpl && !closure)
12354 {
12355 DECL_TEMPLATE_INFO (r)
12356 = build_template_info (gen_tmpl, argvec);
12357 SET_DECL_IMPLICIT_INSTANTIATION (r);
12358
12359 tree new_r
12360 = register_specialization (r, gen_tmpl, argvec, false, hash);
12361 if (new_r != r)
12362 /* We instantiated this while substituting into
12363 the type earlier (template/friend54.C). */
12364 return new_r;
12365
12366 /* We're not supposed to instantiate default arguments
12367 until they are called, for a template. But, for a
12368 declaration like:
12369
12370 template <class T> void f ()
12371 { extern void g(int i = T()); }
12372
12373 we should do the substitution when the template is
12374 instantiated. We handle the member function case in
12375 instantiate_class_template since the default arguments
12376 might refer to other members of the class. */
12377 if (!member
12378 && !PRIMARY_TEMPLATE_P (gen_tmpl)
12379 && !uses_template_parms (argvec))
12380 tsubst_default_arguments (r, complain);
12381 }
12382 else
12383 DECL_TEMPLATE_INFO (r) = NULL_TREE;
12384
12385 /* Copy the list of befriending classes. */
12386 for (tree *friends = &DECL_BEFRIENDING_CLASSES (r);
12387 *friends;
12388 friends = &TREE_CHAIN (*friends))
12389 {
12390 *friends = copy_node (*friends);
12391 TREE_VALUE (*friends)
12392 = tsubst (TREE_VALUE (*friends), args, complain, in_decl);
12393 }
12394
12395 if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
12396 {
12397 maybe_retrofit_in_chrg (r);
12398 if (DECL_CONSTRUCTOR_P (r) && !grok_ctor_properties (ctx, r))
12399 return error_mark_node;
12400 /* If this is an instantiation of a member template, clone it.
12401 If it isn't, that'll be handled by
12402 clone_constructors_and_destructors. */
12403 if (PRIMARY_TEMPLATE_P (gen_tmpl))
12404 clone_function_decl (r, /*update_methods=*/false);
12405 }
12406 else if ((complain & tf_error) != 0
12407 && IDENTIFIER_ANY_OP_P (DECL_NAME (r))
12408 && !grok_op_properties (r, /*complain=*/true))
12409 return error_mark_node;
12410
12411 if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
12412 SET_DECL_FRIEND_CONTEXT (r,
12413 tsubst (DECL_FRIEND_CONTEXT (t),
12414 args, complain, in_decl));
12415
12416 /* Possibly limit visibility based on template args. */
12417 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
12418 if (DECL_VISIBILITY_SPECIFIED (t))
12419 {
12420 DECL_VISIBILITY_SPECIFIED (r) = 0;
12421 DECL_ATTRIBUTES (r)
12422 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
12423 }
12424 determine_visibility (r);
12425 if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
12426 && !processing_template_decl)
12427 defaulted_late_check (r);
12428
12429 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
12430 args, complain, in_decl);
12431 return r;
12432 }
12433
12434 /* Subroutine of tsubst_decl for the case when T is a TEMPLATE_DECL. */
12435
12436 static tree
12437 tsubst_template_decl (tree t, tree args, tsubst_flags_t complain,
12438 tree lambda_fntype)
12439 {
12440 /* We can get here when processing a member function template,
12441 member class template, or template template parameter. */
12442 tree decl = DECL_TEMPLATE_RESULT (t);
12443 tree in_decl = t;
12444 tree spec;
12445 tree tmpl_args;
12446 tree full_args;
12447 tree r;
12448 hashval_t hash = 0;
12449
12450 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
12451 {
12452 /* Template template parameter is treated here. */
12453 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12454 if (new_type == error_mark_node)
12455 r = error_mark_node;
12456 /* If we get a real template back, return it. This can happen in
12457 the context of most_specialized_partial_spec. */
12458 else if (TREE_CODE (new_type) == TEMPLATE_DECL)
12459 r = new_type;
12460 else
12461 /* The new TEMPLATE_DECL was built in
12462 reduce_template_parm_level. */
12463 r = TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (new_type);
12464 return r;
12465 }
12466
12467 if (!lambda_fntype)
12468 {
12469 /* We might already have an instance of this template.
12470 The ARGS are for the surrounding class type, so the
12471 full args contain the tsubst'd args for the context,
12472 plus the innermost args from the template decl. */
12473 tmpl_args = DECL_CLASS_TEMPLATE_P (t)
12474 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
12475 : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
12476 /* Because this is a template, the arguments will still be
12477 dependent, even after substitution. If
12478 PROCESSING_TEMPLATE_DECL is not set, the dependency
12479 predicates will short-circuit. */
12480 ++processing_template_decl;
12481 full_args = tsubst_template_args (tmpl_args, args,
12482 complain, in_decl);
12483 --processing_template_decl;
12484 if (full_args == error_mark_node)
12485 return error_mark_node;
12486
12487 /* If this is a default template template argument,
12488 tsubst might not have changed anything. */
12489 if (full_args == tmpl_args)
12490 return t;
12491
12492 hash = hash_tmpl_and_args (t, full_args);
12493 spec = retrieve_specialization (t, full_args, hash);
12494 if (spec != NULL_TREE)
12495 return spec;
12496 }
12497
12498 /* Make a new template decl. It will be similar to the
12499 original, but will record the current template arguments.
12500 We also create a new function declaration, which is just
12501 like the old one, but points to this new template, rather
12502 than the old one. */
12503 r = copy_decl (t);
12504 gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
12505 DECL_CHAIN (r) = NULL_TREE;
12506
12507 // Build new template info linking to the original template decl.
12508 if (!lambda_fntype)
12509 {
12510 DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
12511 SET_DECL_IMPLICIT_INSTANTIATION (r);
12512 }
12513 else
12514 DECL_TEMPLATE_INFO (r) = NULL_TREE;
12515
12516 /* The template parameters for this new template are all the
12517 template parameters for the old template, except the
12518 outermost level of parameters. */
12519 DECL_TEMPLATE_PARMS (r)
12520 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
12521 complain);
12522
12523 if (TREE_CODE (decl) == TYPE_DECL
12524 && !TYPE_DECL_ALIAS_P (decl))
12525 {
12526 tree new_type;
12527 ++processing_template_decl;
12528 new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12529 --processing_template_decl;
12530 if (new_type == error_mark_node)
12531 return error_mark_node;
12532
12533 TREE_TYPE (r) = new_type;
12534 /* For a partial specialization, we need to keep pointing to
12535 the primary template. */
12536 if (!DECL_TEMPLATE_SPECIALIZATION (t))
12537 CLASSTYPE_TI_TEMPLATE (new_type) = r;
12538 DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
12539 DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
12540 DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
12541 }
12542 else
12543 {
12544 tree new_decl;
12545 ++processing_template_decl;
12546 if (TREE_CODE (decl) == FUNCTION_DECL)
12547 new_decl = tsubst_function_decl (decl, args, complain, lambda_fntype);
12548 else
12549 new_decl = tsubst (decl, args, complain, in_decl);
12550 --processing_template_decl;
12551 if (new_decl == error_mark_node)
12552 return error_mark_node;
12553
12554 DECL_TEMPLATE_RESULT (r) = new_decl;
12555 TREE_TYPE (r) = TREE_TYPE (new_decl);
12556 DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
12557 if (lambda_fntype)
12558 {
12559 tree args = template_parms_to_args (DECL_TEMPLATE_PARMS (r));
12560 DECL_TEMPLATE_INFO (new_decl) = build_template_info (r, args);
12561 }
12562 else
12563 {
12564 DECL_TI_TEMPLATE (new_decl) = r;
12565 DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
12566 }
12567 }
12568
12569 DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
12570 DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
12571
12572 if (PRIMARY_TEMPLATE_P (t))
12573 DECL_PRIMARY_TEMPLATE (r) = r;
12574
12575 if (TREE_CODE (decl) != TYPE_DECL && !VAR_P (decl)
12576 && !lambda_fntype)
12577 /* Record this non-type partial instantiation. */
12578 register_specialization (r, t,
12579 DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
12580 false, hash);
12581
12582 return r;
12583 }
12584
12585 /* True if FN is the op() for a lambda in an uninstantiated template. */
12586
12587 bool
12588 lambda_fn_in_template_p (tree fn)
12589 {
12590 if (!fn || !LAMBDA_FUNCTION_P (fn))
12591 return false;
12592 tree closure = DECL_CONTEXT (fn);
12593 return CLASSTYPE_TEMPLATE_INFO (closure) != NULL_TREE;
12594 }
12595
12596 /* True if FN is the op() for a lambda regenerated from a lambda in an
12597 uninstantiated template. */
12598
12599 bool
12600 regenerated_lambda_fn_p (tree fn)
12601 {
12602 return (LAMBDA_FUNCTION_P (fn)
12603 && !DECL_TEMPLATE_INSTANTIATION (fn));
12604 }
12605
12606 /* We're instantiating a variable from template function TCTX. Return the
12607 corresponding current enclosing scope. This gets complicated because lambda
12608 functions in templates are regenerated rather than instantiated, but generic
12609 lambda functions are subsequently instantiated. */
12610
12611 static tree
12612 enclosing_instantiation_of (tree tctx)
12613 {
12614 tree fn = current_function_decl;
12615 int lambda_count = 0;
12616
12617 for (; tctx && lambda_fn_in_template_p (tctx);
12618 tctx = decl_function_context (tctx))
12619 ++lambda_count;
12620 for (; fn; fn = decl_function_context (fn))
12621 {
12622 tree lambda = fn;
12623 int flambda_count = 0;
12624 for (; fn && regenerated_lambda_fn_p (fn);
12625 fn = decl_function_context (fn))
12626 ++flambda_count;
12627 if (DECL_TEMPLATE_INFO (fn)
12628 ? most_general_template (fn) != most_general_template (tctx)
12629 : fn != tctx)
12630 continue;
12631 if (lambda_count)
12632 {
12633 fn = lambda;
12634 while (flambda_count-- > lambda_count)
12635 fn = decl_function_context (fn);
12636 }
12637 return fn;
12638 }
12639 gcc_unreachable ();
12640 }
12641
12642 /* Substitute the ARGS into the T, which is a _DECL. Return the
12643 result of the substitution. Issue error and warning messages under
12644 control of COMPLAIN. */
12645
12646 static tree
12647 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
12648 {
12649 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
12650 location_t saved_loc;
12651 tree r = NULL_TREE;
12652 tree in_decl = t;
12653 hashval_t hash = 0;
12654
12655 /* Set the filename and linenumber to improve error-reporting. */
12656 saved_loc = input_location;
12657 input_location = DECL_SOURCE_LOCATION (t);
12658
12659 switch (TREE_CODE (t))
12660 {
12661 case TEMPLATE_DECL:
12662 r = tsubst_template_decl (t, args, complain, /*lambda*/NULL_TREE);
12663 break;
12664
12665 case FUNCTION_DECL:
12666 r = tsubst_function_decl (t, args, complain, /*lambda*/NULL_TREE);
12667 break;
12668
12669 case PARM_DECL:
12670 {
12671 tree type = NULL_TREE;
12672 int i, len = 1;
12673 tree expanded_types = NULL_TREE;
12674 tree prev_r = NULL_TREE;
12675 tree first_r = NULL_TREE;
12676
12677 if (DECL_PACK_P (t))
12678 {
12679 /* If there is a local specialization that isn't a
12680 parameter pack, it means that we're doing a "simple"
12681 substitution from inside tsubst_pack_expansion. Just
12682 return the local specialization (which will be a single
12683 parm). */
12684 tree spec = retrieve_local_specialization (t);
12685 if (spec
12686 && TREE_CODE (spec) == PARM_DECL
12687 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
12688 RETURN (spec);
12689
12690 /* Expand the TYPE_PACK_EXPANSION that provides the types for
12691 the parameters in this function parameter pack. */
12692 expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
12693 complain, in_decl);
12694 if (TREE_CODE (expanded_types) == TREE_VEC)
12695 {
12696 len = TREE_VEC_LENGTH (expanded_types);
12697
12698 /* Zero-length parameter packs are boring. Just substitute
12699 into the chain. */
12700 if (len == 0)
12701 RETURN (tsubst (TREE_CHAIN (t), args, complain,
12702 TREE_CHAIN (t)));
12703 }
12704 else
12705 {
12706 /* All we did was update the type. Make a note of that. */
12707 type = expanded_types;
12708 expanded_types = NULL_TREE;
12709 }
12710 }
12711
12712 /* Loop through all of the parameters we'll build. When T is
12713 a function parameter pack, LEN is the number of expanded
12714 types in EXPANDED_TYPES; otherwise, LEN is 1. */
12715 r = NULL_TREE;
12716 for (i = 0; i < len; ++i)
12717 {
12718 prev_r = r;
12719 r = copy_node (t);
12720 if (DECL_TEMPLATE_PARM_P (t))
12721 SET_DECL_TEMPLATE_PARM_P (r);
12722
12723 if (expanded_types)
12724 /* We're on the Ith parameter of the function parameter
12725 pack. */
12726 {
12727 /* Get the Ith type. */
12728 type = TREE_VEC_ELT (expanded_types, i);
12729
12730 /* Rename the parameter to include the index. */
12731 DECL_NAME (r)
12732 = make_ith_pack_parameter_name (DECL_NAME (r), i);
12733 }
12734 else if (!type)
12735 /* We're dealing with a normal parameter. */
12736 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12737
12738 type = type_decays_to (type);
12739 TREE_TYPE (r) = type;
12740 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
12741
12742 if (DECL_INITIAL (r))
12743 {
12744 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
12745 DECL_INITIAL (r) = TREE_TYPE (r);
12746 else
12747 DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
12748 complain, in_decl);
12749 }
12750
12751 DECL_CONTEXT (r) = NULL_TREE;
12752
12753 if (!DECL_TEMPLATE_PARM_P (r))
12754 DECL_ARG_TYPE (r) = type_passed_as (type);
12755
12756 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
12757 args, complain, in_decl);
12758
12759 /* Keep track of the first new parameter we
12760 generate. That's what will be returned to the
12761 caller. */
12762 if (!first_r)
12763 first_r = r;
12764
12765 /* Build a proper chain of parameters when substituting
12766 into a function parameter pack. */
12767 if (prev_r)
12768 DECL_CHAIN (prev_r) = r;
12769 }
12770
12771 /* If cp_unevaluated_operand is set, we're just looking for a
12772 single dummy parameter, so don't keep going. */
12773 if (DECL_CHAIN (t) && !cp_unevaluated_operand)
12774 DECL_CHAIN (r) = tsubst (DECL_CHAIN (t), args,
12775 complain, DECL_CHAIN (t));
12776
12777 /* FIRST_R contains the start of the chain we've built. */
12778 r = first_r;
12779 }
12780 break;
12781
12782 case FIELD_DECL:
12783 {
12784 tree type = NULL_TREE;
12785 tree vec = NULL_TREE;
12786 tree expanded_types = NULL_TREE;
12787 int len = 1;
12788
12789 if (PACK_EXPANSION_P (TREE_TYPE (t)))
12790 {
12791 /* This field is a lambda capture pack. Return a TREE_VEC of
12792 the expanded fields to instantiate_class_template_1 and
12793 store them in the specializations hash table as a
12794 NONTYPE_ARGUMENT_PACK so that tsubst_copy can find them. */
12795 expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
12796 complain, in_decl);
12797 if (TREE_CODE (expanded_types) == TREE_VEC)
12798 {
12799 len = TREE_VEC_LENGTH (expanded_types);
12800 vec = make_tree_vec (len);
12801 }
12802 else
12803 {
12804 /* All we did was update the type. Make a note of that. */
12805 type = expanded_types;
12806 expanded_types = NULL_TREE;
12807 }
12808 }
12809
12810 for (int i = 0; i < len; ++i)
12811 {
12812 r = copy_decl (t);
12813 if (expanded_types)
12814 {
12815 type = TREE_VEC_ELT (expanded_types, i);
12816 DECL_NAME (r)
12817 = make_ith_pack_parameter_name (DECL_NAME (r), i);
12818 }
12819 else if (!type)
12820 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12821
12822 if (type == error_mark_node)
12823 RETURN (error_mark_node);
12824 TREE_TYPE (r) = type;
12825 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
12826
12827 if (DECL_C_BIT_FIELD (r))
12828 /* For bit-fields, DECL_BIT_FIELD_REPRESENTATIVE gives the
12829 number of bits. */
12830 DECL_BIT_FIELD_REPRESENTATIVE (r)
12831 = tsubst_expr (DECL_BIT_FIELD_REPRESENTATIVE (t), args,
12832 complain, in_decl,
12833 /*integral_constant_expression_p=*/true);
12834 if (DECL_INITIAL (t))
12835 {
12836 /* Set up DECL_TEMPLATE_INFO so that we can get at the
12837 NSDMI in perform_member_init. Still set DECL_INITIAL
12838 so that we know there is one. */
12839 DECL_INITIAL (r) = void_node;
12840 gcc_assert (DECL_LANG_SPECIFIC (r) == NULL);
12841 retrofit_lang_decl (r);
12842 DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
12843 }
12844 /* We don't have to set DECL_CONTEXT here; it is set by
12845 finish_member_declaration. */
12846 DECL_CHAIN (r) = NULL_TREE;
12847
12848 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
12849 args, complain, in_decl);
12850
12851 if (vec)
12852 TREE_VEC_ELT (vec, i) = r;
12853 }
12854
12855 if (vec)
12856 {
12857 r = vec;
12858 tree pack = make_node (NONTYPE_ARGUMENT_PACK);
12859 SET_ARGUMENT_PACK_ARGS (pack, vec);
12860 register_specialization (pack, t, args, false, 0);
12861 }
12862 }
12863 break;
12864
12865 case USING_DECL:
12866 /* We reach here only for member using decls. We also need to check
12867 uses_template_parms because DECL_DEPENDENT_P is not set for a
12868 using-declaration that designates a member of the current
12869 instantiation (c++/53549). */
12870 if (DECL_DEPENDENT_P (t)
12871 || uses_template_parms (USING_DECL_SCOPE (t)))
12872 {
12873 tree scope = USING_DECL_SCOPE (t);
12874 tree name = tsubst_copy (DECL_NAME (t), args, complain, in_decl);
12875 if (PACK_EXPANSION_P (scope))
12876 {
12877 tree vec = tsubst_pack_expansion (scope, args, complain, in_decl);
12878 int len = TREE_VEC_LENGTH (vec);
12879 r = make_tree_vec (len);
12880 for (int i = 0; i < len; ++i)
12881 {
12882 tree escope = TREE_VEC_ELT (vec, i);
12883 tree elt = do_class_using_decl (escope, name);
12884 if (!elt)
12885 {
12886 r = error_mark_node;
12887 break;
12888 }
12889 else
12890 {
12891 TREE_PROTECTED (elt) = TREE_PROTECTED (t);
12892 TREE_PRIVATE (elt) = TREE_PRIVATE (t);
12893 }
12894 TREE_VEC_ELT (r, i) = elt;
12895 }
12896 }
12897 else
12898 {
12899 tree inst_scope = tsubst_copy (USING_DECL_SCOPE (t), args,
12900 complain, in_decl);
12901 r = do_class_using_decl (inst_scope, name);
12902 if (!r)
12903 r = error_mark_node;
12904 else
12905 {
12906 TREE_PROTECTED (r) = TREE_PROTECTED (t);
12907 TREE_PRIVATE (r) = TREE_PRIVATE (t);
12908 }
12909 }
12910 }
12911 else
12912 {
12913 r = copy_node (t);
12914 DECL_CHAIN (r) = NULL_TREE;
12915 }
12916 break;
12917
12918 case TYPE_DECL:
12919 case VAR_DECL:
12920 {
12921 tree argvec = NULL_TREE;
12922 tree gen_tmpl = NULL_TREE;
12923 tree spec;
12924 tree tmpl = NULL_TREE;
12925 tree ctx;
12926 tree type = NULL_TREE;
12927 bool local_p;
12928
12929 if (TREE_TYPE (t) == error_mark_node)
12930 RETURN (error_mark_node);
12931
12932 if (TREE_CODE (t) == TYPE_DECL
12933 && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
12934 {
12935 /* If this is the canonical decl, we don't have to
12936 mess with instantiations, and often we can't (for
12937 typename, template type parms and such). Note that
12938 TYPE_NAME is not correct for the above test if
12939 we've copied the type for a typedef. */
12940 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12941 if (type == error_mark_node)
12942 RETURN (error_mark_node);
12943 r = TYPE_NAME (type);
12944 break;
12945 }
12946
12947 /* Check to see if we already have the specialization we
12948 need. */
12949 spec = NULL_TREE;
12950 if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
12951 {
12952 /* T is a static data member or namespace-scope entity.
12953 We have to substitute into namespace-scope variables
12954 (not just variable templates) because of cases like:
12955
12956 template <class T> void f() { extern T t; }
12957
12958 where the entity referenced is not known until
12959 instantiation time. */
12960 local_p = false;
12961 ctx = DECL_CONTEXT (t);
12962 if (DECL_CLASS_SCOPE_P (t))
12963 {
12964 ctx = tsubst_aggr_type (ctx, args,
12965 complain,
12966 in_decl, /*entering_scope=*/1);
12967 /* If CTX is unchanged, then T is in fact the
12968 specialization we want. That situation occurs when
12969 referencing a static data member within in its own
12970 class. We can use pointer equality, rather than
12971 same_type_p, because DECL_CONTEXT is always
12972 canonical... */
12973 if (ctx == DECL_CONTEXT (t)
12974 /* ... unless T is a member template; in which
12975 case our caller can be willing to create a
12976 specialization of that template represented
12977 by T. */
12978 && !(DECL_TI_TEMPLATE (t)
12979 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (t))))
12980 spec = t;
12981 }
12982
12983 if (!spec)
12984 {
12985 tmpl = DECL_TI_TEMPLATE (t);
12986 gen_tmpl = most_general_template (tmpl);
12987 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
12988 if (argvec != error_mark_node)
12989 argvec = (coerce_innermost_template_parms
12990 (DECL_TEMPLATE_PARMS (gen_tmpl),
12991 argvec, t, complain,
12992 /*all*/true, /*defarg*/true));
12993 if (argvec == error_mark_node)
12994 RETURN (error_mark_node);
12995 hash = hash_tmpl_and_args (gen_tmpl, argvec);
12996 spec = retrieve_specialization (gen_tmpl, argvec, hash);
12997 }
12998 }
12999 else
13000 {
13001 /* A local variable. */
13002 local_p = true;
13003 /* Subsequent calls to pushdecl will fill this in. */
13004 ctx = NULL_TREE;
13005 /* Unless this is a reference to a static variable from an
13006 enclosing function, in which case we need to fill it in now. */
13007 if (TREE_STATIC (t))
13008 {
13009 tree fn = enclosing_instantiation_of (DECL_CONTEXT (t));
13010 if (fn != current_function_decl)
13011 ctx = fn;
13012 }
13013 spec = retrieve_local_specialization (t);
13014 }
13015 /* If we already have the specialization we need, there is
13016 nothing more to do. */
13017 if (spec)
13018 {
13019 r = spec;
13020 break;
13021 }
13022
13023 /* Create a new node for the specialization we need. */
13024 r = copy_decl (t);
13025 if (type == NULL_TREE)
13026 {
13027 if (is_typedef_decl (t))
13028 type = DECL_ORIGINAL_TYPE (t);
13029 else
13030 type = TREE_TYPE (t);
13031 if (VAR_P (t)
13032 && VAR_HAD_UNKNOWN_BOUND (t)
13033 && type != error_mark_node)
13034 type = strip_array_domain (type);
13035 tree sub_args = args;
13036 if (tree auto_node = type_uses_auto (type))
13037 {
13038 /* Mask off any template args past the variable's context so we
13039 don't replace the auto with an unrelated argument. */
13040 int nouter = TEMPLATE_TYPE_LEVEL (auto_node) - 1;
13041 int extra = TMPL_ARGS_DEPTH (args) - nouter;
13042 if (extra > 0)
13043 /* This should never happen with the new lambda instantiation
13044 model, but keep the handling just in case. */
13045 gcc_assert (!CHECKING_P),
13046 sub_args = strip_innermost_template_args (args, extra);
13047 }
13048 type = tsubst (type, sub_args, complain, in_decl);
13049 }
13050 if (VAR_P (r))
13051 {
13052 /* Even if the original location is out of scope, the
13053 newly substituted one is not. */
13054 DECL_DEAD_FOR_LOCAL (r) = 0;
13055 DECL_INITIALIZED_P (r) = 0;
13056 DECL_TEMPLATE_INSTANTIATED (r) = 0;
13057 if (type == error_mark_node)
13058 RETURN (error_mark_node);
13059 if (TREE_CODE (type) == FUNCTION_TYPE)
13060 {
13061 /* It may seem that this case cannot occur, since:
13062
13063 typedef void f();
13064 void g() { f x; }
13065
13066 declares a function, not a variable. However:
13067
13068 typedef void f();
13069 template <typename T> void g() { T t; }
13070 template void g<f>();
13071
13072 is an attempt to declare a variable with function
13073 type. */
13074 error ("variable %qD has function type",
13075 /* R is not yet sufficiently initialized, so we
13076 just use its name. */
13077 DECL_NAME (r));
13078 RETURN (error_mark_node);
13079 }
13080 type = complete_type (type);
13081 /* Wait until cp_finish_decl to set this again, to handle
13082 circular dependency (template/instantiate6.C). */
13083 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r) = 0;
13084 type = check_var_type (DECL_NAME (r), type);
13085
13086 if (DECL_HAS_VALUE_EXPR_P (t))
13087 {
13088 tree ve = DECL_VALUE_EXPR (t);
13089 ve = tsubst_expr (ve, args, complain, in_decl,
13090 /*constant_expression_p=*/false);
13091 if (REFERENCE_REF_P (ve))
13092 {
13093 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
13094 ve = TREE_OPERAND (ve, 0);
13095 }
13096 SET_DECL_VALUE_EXPR (r, ve);
13097 }
13098 if (CP_DECL_THREAD_LOCAL_P (r)
13099 && !processing_template_decl)
13100 set_decl_tls_model (r, decl_default_tls_model (r));
13101 }
13102 else if (DECL_SELF_REFERENCE_P (t))
13103 SET_DECL_SELF_REFERENCE_P (r);
13104 TREE_TYPE (r) = type;
13105 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
13106 DECL_CONTEXT (r) = ctx;
13107 /* Clear out the mangled name and RTL for the instantiation. */
13108 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
13109 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
13110 SET_DECL_RTL (r, NULL);
13111 /* The initializer must not be expanded until it is required;
13112 see [temp.inst]. */
13113 DECL_INITIAL (r) = NULL_TREE;
13114 DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
13115 if (VAR_P (r))
13116 {
13117 if (DECL_LANG_SPECIFIC (r))
13118 SET_DECL_DEPENDENT_INIT_P (r, false);
13119
13120 SET_DECL_MODE (r, VOIDmode);
13121
13122 /* Possibly limit visibility based on template args. */
13123 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
13124 if (DECL_VISIBILITY_SPECIFIED (t))
13125 {
13126 DECL_VISIBILITY_SPECIFIED (r) = 0;
13127 DECL_ATTRIBUTES (r)
13128 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
13129 }
13130 determine_visibility (r);
13131 }
13132
13133 if (!local_p)
13134 {
13135 /* A static data member declaration is always marked
13136 external when it is declared in-class, even if an
13137 initializer is present. We mimic the non-template
13138 processing here. */
13139 DECL_EXTERNAL (r) = 1;
13140 if (DECL_NAMESPACE_SCOPE_P (t))
13141 DECL_NOT_REALLY_EXTERN (r) = 1;
13142
13143 DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
13144 SET_DECL_IMPLICIT_INSTANTIATION (r);
13145 register_specialization (r, gen_tmpl, argvec, false, hash);
13146 }
13147 else
13148 {
13149 if (DECL_LANG_SPECIFIC (r))
13150 DECL_TEMPLATE_INFO (r) = NULL_TREE;
13151 if (!cp_unevaluated_operand)
13152 register_local_specialization (r, t);
13153 }
13154
13155 DECL_CHAIN (r) = NULL_TREE;
13156
13157 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
13158 /*flags=*/0,
13159 args, complain, in_decl);
13160
13161 /* Preserve a typedef that names a type. */
13162 if (is_typedef_decl (r) && type != error_mark_node)
13163 {
13164 DECL_ORIGINAL_TYPE (r) = NULL_TREE;
13165 set_underlying_type (r);
13166 if (TYPE_DECL_ALIAS_P (r))
13167 /* An alias template specialization can be dependent
13168 even if its underlying type is not. */
13169 TYPE_DEPENDENT_P_VALID (TREE_TYPE (r)) = false;
13170 }
13171
13172 layout_decl (r, 0);
13173 }
13174 break;
13175
13176 default:
13177 gcc_unreachable ();
13178 }
13179 #undef RETURN
13180
13181 out:
13182 /* Restore the file and line information. */
13183 input_location = saved_loc;
13184
13185 return r;
13186 }
13187
13188 /* Substitute into the ARG_TYPES of a function type.
13189 If END is a TREE_CHAIN, leave it and any following types
13190 un-substituted. */
13191
13192 static tree
13193 tsubst_arg_types (tree arg_types,
13194 tree args,
13195 tree end,
13196 tsubst_flags_t complain,
13197 tree in_decl)
13198 {
13199 tree remaining_arg_types;
13200 tree type = NULL_TREE;
13201 int i = 1;
13202 tree expanded_args = NULL_TREE;
13203 tree default_arg;
13204
13205 if (!arg_types || arg_types == void_list_node || arg_types == end)
13206 return arg_types;
13207
13208 remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
13209 args, end, complain, in_decl);
13210 if (remaining_arg_types == error_mark_node)
13211 return error_mark_node;
13212
13213 if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
13214 {
13215 /* For a pack expansion, perform substitution on the
13216 entire expression. Later on, we'll handle the arguments
13217 one-by-one. */
13218 expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
13219 args, complain, in_decl);
13220
13221 if (TREE_CODE (expanded_args) == TREE_VEC)
13222 /* So that we'll spin through the parameters, one by one. */
13223 i = TREE_VEC_LENGTH (expanded_args);
13224 else
13225 {
13226 /* We only partially substituted into the parameter
13227 pack. Our type is TYPE_PACK_EXPANSION. */
13228 type = expanded_args;
13229 expanded_args = NULL_TREE;
13230 }
13231 }
13232
13233 while (i > 0) {
13234 --i;
13235
13236 if (expanded_args)
13237 type = TREE_VEC_ELT (expanded_args, i);
13238 else if (!type)
13239 type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
13240
13241 if (type == error_mark_node)
13242 return error_mark_node;
13243 if (VOID_TYPE_P (type))
13244 {
13245 if (complain & tf_error)
13246 {
13247 error ("invalid parameter type %qT", type);
13248 if (in_decl)
13249 error ("in declaration %q+D", in_decl);
13250 }
13251 return error_mark_node;
13252 }
13253 /* DR 657. */
13254 if (abstract_virtuals_error_sfinae (ACU_PARM, type, complain))
13255 return error_mark_node;
13256
13257 /* Do array-to-pointer, function-to-pointer conversion, and ignore
13258 top-level qualifiers as required. */
13259 type = cv_unqualified (type_decays_to (type));
13260
13261 /* We do not substitute into default arguments here. The standard
13262 mandates that they be instantiated only when needed, which is
13263 done in build_over_call. */
13264 default_arg = TREE_PURPOSE (arg_types);
13265
13266 /* Except that we do substitute default arguments under tsubst_lambda_expr,
13267 since the new op() won't have any associated template arguments for us
13268 to refer to later. */
13269 if (lambda_fn_in_template_p (in_decl))
13270 default_arg = tsubst_copy_and_build (default_arg, args, complain, in_decl,
13271 false/*fn*/, false/*constexpr*/);
13272
13273 if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
13274 {
13275 /* We've instantiated a template before its default arguments
13276 have been parsed. This can happen for a nested template
13277 class, and is not an error unless we require the default
13278 argument in a call of this function. */
13279 remaining_arg_types =
13280 tree_cons (default_arg, type, remaining_arg_types);
13281 vec_safe_push (DEFARG_INSTANTIATIONS(default_arg), remaining_arg_types);
13282 }
13283 else
13284 remaining_arg_types =
13285 hash_tree_cons (default_arg, type, remaining_arg_types);
13286 }
13287
13288 return remaining_arg_types;
13289 }
13290
13291 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
13292 *not* handle the exception-specification for FNTYPE, because the
13293 initial substitution of explicitly provided template parameters
13294 during argument deduction forbids substitution into the
13295 exception-specification:
13296
13297 [temp.deduct]
13298
13299 All references in the function type of the function template to the
13300 corresponding template parameters are replaced by the specified tem-
13301 plate argument values. If a substitution in a template parameter or
13302 in the function type of the function template results in an invalid
13303 type, type deduction fails. [Note: The equivalent substitution in
13304 exception specifications is done only when the function is instanti-
13305 ated, at which point a program is ill-formed if the substitution
13306 results in an invalid type.] */
13307
13308 static tree
13309 tsubst_function_type (tree t,
13310 tree args,
13311 tsubst_flags_t complain,
13312 tree in_decl)
13313 {
13314 tree return_type;
13315 tree arg_types = NULL_TREE;
13316 tree fntype;
13317
13318 /* The TYPE_CONTEXT is not used for function/method types. */
13319 gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
13320
13321 /* DR 1227: Mixing immediate and non-immediate contexts in deduction
13322 failure. */
13323 bool late_return_type_p = TYPE_HAS_LATE_RETURN_TYPE (t);
13324
13325 if (late_return_type_p)
13326 {
13327 /* Substitute the argument types. */
13328 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args, NULL_TREE,
13329 complain, in_decl);
13330 if (arg_types == error_mark_node)
13331 return error_mark_node;
13332
13333 tree save_ccp = current_class_ptr;
13334 tree save_ccr = current_class_ref;
13335 tree this_type = (TREE_CODE (t) == METHOD_TYPE
13336 ? TREE_TYPE (TREE_VALUE (arg_types)) : NULL_TREE);
13337 bool do_inject = this_type && CLASS_TYPE_P (this_type);
13338 if (do_inject)
13339 {
13340 /* DR 1207: 'this' is in scope in the trailing return type. */
13341 inject_this_parameter (this_type, cp_type_quals (this_type));
13342 }
13343
13344 /* Substitute the return type. */
13345 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13346
13347 if (do_inject)
13348 {
13349 current_class_ptr = save_ccp;
13350 current_class_ref = save_ccr;
13351 }
13352 }
13353 else
13354 /* Substitute the return type. */
13355 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13356
13357 if (return_type == error_mark_node)
13358 return error_mark_node;
13359 /* DR 486 clarifies that creation of a function type with an
13360 invalid return type is a deduction failure. */
13361 if (TREE_CODE (return_type) == ARRAY_TYPE
13362 || TREE_CODE (return_type) == FUNCTION_TYPE)
13363 {
13364 if (complain & tf_error)
13365 {
13366 if (TREE_CODE (return_type) == ARRAY_TYPE)
13367 error ("function returning an array");
13368 else
13369 error ("function returning a function");
13370 }
13371 return error_mark_node;
13372 }
13373 /* And DR 657. */
13374 if (abstract_virtuals_error_sfinae (ACU_RETURN, return_type, complain))
13375 return error_mark_node;
13376
13377 if (!late_return_type_p)
13378 {
13379 /* Substitute the argument types. */
13380 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args, NULL_TREE,
13381 complain, in_decl);
13382 if (arg_types == error_mark_node)
13383 return error_mark_node;
13384 }
13385
13386 /* Construct a new type node and return it. */
13387 if (TREE_CODE (t) == FUNCTION_TYPE)
13388 {
13389 fntype = build_function_type (return_type, arg_types);
13390 fntype = apply_memfn_quals (fntype,
13391 type_memfn_quals (t),
13392 type_memfn_rqual (t));
13393 }
13394 else
13395 {
13396 tree r = TREE_TYPE (TREE_VALUE (arg_types));
13397 /* Don't pick up extra function qualifiers from the basetype. */
13398 r = cp_build_qualified_type_real (r, type_memfn_quals (t), complain);
13399 if (! MAYBE_CLASS_TYPE_P (r))
13400 {
13401 /* [temp.deduct]
13402
13403 Type deduction may fail for any of the following
13404 reasons:
13405
13406 -- Attempting to create "pointer to member of T" when T
13407 is not a class type. */
13408 if (complain & tf_error)
13409 error ("creating pointer to member function of non-class type %qT",
13410 r);
13411 return error_mark_node;
13412 }
13413
13414 fntype = build_method_type_directly (r, return_type,
13415 TREE_CHAIN (arg_types));
13416 fntype = build_ref_qualified_type (fntype, type_memfn_rqual (t));
13417 }
13418 fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
13419
13420 if (late_return_type_p)
13421 TYPE_HAS_LATE_RETURN_TYPE (fntype) = 1;
13422
13423 return fntype;
13424 }
13425
13426 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE. Substitute the template
13427 ARGS into that specification, and return the substituted
13428 specification. If there is no specification, return NULL_TREE. */
13429
13430 static tree
13431 tsubst_exception_specification (tree fntype,
13432 tree args,
13433 tsubst_flags_t complain,
13434 tree in_decl,
13435 bool defer_ok)
13436 {
13437 tree specs;
13438 tree new_specs;
13439
13440 specs = TYPE_RAISES_EXCEPTIONS (fntype);
13441 new_specs = NULL_TREE;
13442 if (specs && TREE_PURPOSE (specs))
13443 {
13444 /* A noexcept-specifier. */
13445 tree expr = TREE_PURPOSE (specs);
13446 if (TREE_CODE (expr) == INTEGER_CST)
13447 new_specs = expr;
13448 else if (defer_ok)
13449 {
13450 /* Defer instantiation of noexcept-specifiers to avoid
13451 excessive instantiations (c++/49107). */
13452 new_specs = make_node (DEFERRED_NOEXCEPT);
13453 if (DEFERRED_NOEXCEPT_SPEC_P (specs))
13454 {
13455 /* We already partially instantiated this member template,
13456 so combine the new args with the old. */
13457 DEFERRED_NOEXCEPT_PATTERN (new_specs)
13458 = DEFERRED_NOEXCEPT_PATTERN (expr);
13459 DEFERRED_NOEXCEPT_ARGS (new_specs)
13460 = add_to_template_args (DEFERRED_NOEXCEPT_ARGS (expr), args);
13461 }
13462 else
13463 {
13464 DEFERRED_NOEXCEPT_PATTERN (new_specs) = expr;
13465 DEFERRED_NOEXCEPT_ARGS (new_specs) = args;
13466 }
13467 }
13468 else
13469 new_specs = tsubst_copy_and_build
13470 (expr, args, complain, in_decl, /*function_p=*/false,
13471 /*integral_constant_expression_p=*/true);
13472 new_specs = build_noexcept_spec (new_specs, complain);
13473 }
13474 else if (specs)
13475 {
13476 if (! TREE_VALUE (specs))
13477 new_specs = specs;
13478 else
13479 while (specs)
13480 {
13481 tree spec;
13482 int i, len = 1;
13483 tree expanded_specs = NULL_TREE;
13484
13485 if (PACK_EXPANSION_P (TREE_VALUE (specs)))
13486 {
13487 /* Expand the pack expansion type. */
13488 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
13489 args, complain,
13490 in_decl);
13491
13492 if (expanded_specs == error_mark_node)
13493 return error_mark_node;
13494 else if (TREE_CODE (expanded_specs) == TREE_VEC)
13495 len = TREE_VEC_LENGTH (expanded_specs);
13496 else
13497 {
13498 /* We're substituting into a member template, so
13499 we got a TYPE_PACK_EXPANSION back. Add that
13500 expansion and move on. */
13501 gcc_assert (TREE_CODE (expanded_specs)
13502 == TYPE_PACK_EXPANSION);
13503 new_specs = add_exception_specifier (new_specs,
13504 expanded_specs,
13505 complain);
13506 specs = TREE_CHAIN (specs);
13507 continue;
13508 }
13509 }
13510
13511 for (i = 0; i < len; ++i)
13512 {
13513 if (expanded_specs)
13514 spec = TREE_VEC_ELT (expanded_specs, i);
13515 else
13516 spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
13517 if (spec == error_mark_node)
13518 return spec;
13519 new_specs = add_exception_specifier (new_specs, spec,
13520 complain);
13521 }
13522
13523 specs = TREE_CHAIN (specs);
13524 }
13525 }
13526 return new_specs;
13527 }
13528
13529 /* Take the tree structure T and replace template parameters used
13530 therein with the argument vector ARGS. IN_DECL is an associated
13531 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
13532 Issue error and warning messages under control of COMPLAIN. Note
13533 that we must be relatively non-tolerant of extensions here, in
13534 order to preserve conformance; if we allow substitutions that
13535 should not be allowed, we may allow argument deductions that should
13536 not succeed, and therefore report ambiguous overload situations
13537 where there are none. In theory, we could allow the substitution,
13538 but indicate that it should have failed, and allow our caller to
13539 make sure that the right thing happens, but we don't try to do this
13540 yet.
13541
13542 This function is used for dealing with types, decls and the like;
13543 for expressions, use tsubst_expr or tsubst_copy. */
13544
13545 tree
13546 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
13547 {
13548 enum tree_code code;
13549 tree type, r = NULL_TREE;
13550
13551 if (t == NULL_TREE || t == error_mark_node
13552 || t == integer_type_node
13553 || t == void_type_node
13554 || t == char_type_node
13555 || t == unknown_type_node
13556 || TREE_CODE (t) == NAMESPACE_DECL
13557 || TREE_CODE (t) == TRANSLATION_UNIT_DECL)
13558 return t;
13559
13560 if (DECL_P (t))
13561 return tsubst_decl (t, args, complain);
13562
13563 if (args == NULL_TREE)
13564 return t;
13565
13566 code = TREE_CODE (t);
13567
13568 if (code == IDENTIFIER_NODE)
13569 type = IDENTIFIER_TYPE_VALUE (t);
13570 else
13571 type = TREE_TYPE (t);
13572
13573 gcc_assert (type != unknown_type_node);
13574
13575 /* Reuse typedefs. We need to do this to handle dependent attributes,
13576 such as attribute aligned. */
13577 if (TYPE_P (t)
13578 && typedef_variant_p (t))
13579 {
13580 tree decl = TYPE_NAME (t);
13581
13582 if (alias_template_specialization_p (t))
13583 {
13584 /* DECL represents an alias template and we want to
13585 instantiate it. */
13586 tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
13587 tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
13588 r = instantiate_alias_template (tmpl, gen_args, complain);
13589 }
13590 else if (DECL_CLASS_SCOPE_P (decl)
13591 && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
13592 && uses_template_parms (DECL_CONTEXT (decl)))
13593 {
13594 tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
13595 tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
13596 r = retrieve_specialization (tmpl, gen_args, 0);
13597 }
13598 else if (DECL_FUNCTION_SCOPE_P (decl)
13599 && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
13600 && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
13601 r = retrieve_local_specialization (decl);
13602 else
13603 /* The typedef is from a non-template context. */
13604 return t;
13605
13606 if (r)
13607 {
13608 r = TREE_TYPE (r);
13609 r = cp_build_qualified_type_real
13610 (r, cp_type_quals (t) | cp_type_quals (r),
13611 complain | tf_ignore_bad_quals);
13612 return r;
13613 }
13614 else
13615 {
13616 /* We don't have an instantiation yet, so drop the typedef. */
13617 int quals = cp_type_quals (t);
13618 t = DECL_ORIGINAL_TYPE (decl);
13619 t = cp_build_qualified_type_real (t, quals,
13620 complain | tf_ignore_bad_quals);
13621 }
13622 }
13623
13624 bool fndecl_type = (complain & tf_fndecl_type);
13625 complain &= ~tf_fndecl_type;
13626
13627 if (type
13628 && code != TYPENAME_TYPE
13629 && code != TEMPLATE_TYPE_PARM
13630 && code != TEMPLATE_PARM_INDEX
13631 && code != IDENTIFIER_NODE
13632 && code != FUNCTION_TYPE
13633 && code != METHOD_TYPE)
13634 type = tsubst (type, args, complain, in_decl);
13635 if (type == error_mark_node)
13636 return error_mark_node;
13637
13638 switch (code)
13639 {
13640 case RECORD_TYPE:
13641 case UNION_TYPE:
13642 case ENUMERAL_TYPE:
13643 return tsubst_aggr_type (t, args, complain, in_decl,
13644 /*entering_scope=*/0);
13645
13646 case ERROR_MARK:
13647 case IDENTIFIER_NODE:
13648 case VOID_TYPE:
13649 case REAL_TYPE:
13650 case COMPLEX_TYPE:
13651 case VECTOR_TYPE:
13652 case BOOLEAN_TYPE:
13653 case NULLPTR_TYPE:
13654 case LANG_TYPE:
13655 return t;
13656
13657 case INTEGER_TYPE:
13658 if (t == integer_type_node)
13659 return t;
13660
13661 if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
13662 && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
13663 return t;
13664
13665 {
13666 tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
13667
13668 max = tsubst_expr (omax, args, complain, in_decl,
13669 /*integral_constant_expression_p=*/false);
13670
13671 /* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
13672 needed. */
13673 if (TREE_CODE (max) == NOP_EXPR
13674 && TREE_SIDE_EFFECTS (omax)
13675 && !TREE_TYPE (max))
13676 TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
13677
13678 /* If we're in a partial instantiation, preserve the magic NOP_EXPR
13679 with TREE_SIDE_EFFECTS that indicates this is not an integral
13680 constant expression. */
13681 if (processing_template_decl
13682 && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
13683 {
13684 gcc_assert (TREE_CODE (max) == NOP_EXPR);
13685 TREE_SIDE_EFFECTS (max) = 1;
13686 }
13687
13688 return compute_array_index_type (NULL_TREE, max, complain);
13689 }
13690
13691 case TEMPLATE_TYPE_PARM:
13692 case TEMPLATE_TEMPLATE_PARM:
13693 case BOUND_TEMPLATE_TEMPLATE_PARM:
13694 case TEMPLATE_PARM_INDEX:
13695 {
13696 int idx;
13697 int level;
13698 int levels;
13699 tree arg = NULL_TREE;
13700
13701 /* Early in template argument deduction substitution, we don't
13702 want to reduce the level of 'auto', or it will be confused
13703 with a normal template parm in subsequent deduction. */
13704 if (is_auto (t) && (complain & tf_partial))
13705 return t;
13706
13707 r = NULL_TREE;
13708
13709 gcc_assert (TREE_VEC_LENGTH (args) > 0);
13710 template_parm_level_and_index (t, &level, &idx);
13711
13712 levels = TMPL_ARGS_DEPTH (args);
13713 if (level <= levels
13714 && TREE_VEC_LENGTH (TMPL_ARGS_LEVEL (args, level)) > 0)
13715 {
13716 arg = TMPL_ARG (args, level, idx);
13717
13718 if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
13719 {
13720 /* See through ARGUMENT_PACK_SELECT arguments. */
13721 arg = ARGUMENT_PACK_SELECT_ARG (arg);
13722 /* If the selected argument is an expansion E, that most
13723 likely means we were called from
13724 gen_elem_of_pack_expansion_instantiation during the
13725 substituting of pack an argument pack (which Ith
13726 element is a pack expansion, where I is
13727 ARGUMENT_PACK_SELECT_INDEX) into a pack expansion.
13728 In this case, the Ith element resulting from this
13729 substituting is going to be a pack expansion, which
13730 pattern is the pattern of E. Let's return the
13731 pattern of E, and
13732 gen_elem_of_pack_expansion_instantiation will
13733 build the resulting pack expansion from it. */
13734 if (PACK_EXPANSION_P (arg))
13735 {
13736 /* Make sure we aren't throwing away arg info. */
13737 gcc_assert (!PACK_EXPANSION_EXTRA_ARGS (arg));
13738 arg = PACK_EXPANSION_PATTERN (arg);
13739 }
13740 }
13741 }
13742
13743 if (arg == error_mark_node)
13744 return error_mark_node;
13745 else if (arg != NULL_TREE)
13746 {
13747 if (ARGUMENT_PACK_P (arg))
13748 /* If ARG is an argument pack, we don't actually want to
13749 perform a substitution here, because substitutions
13750 for argument packs are only done
13751 element-by-element. We can get to this point when
13752 substituting the type of a non-type template
13753 parameter pack, when that type actually contains
13754 template parameter packs from an outer template, e.g.,
13755
13756 template<typename... Types> struct A {
13757 template<Types... Values> struct B { };
13758 }; */
13759 return t;
13760
13761 if (code == TEMPLATE_TYPE_PARM)
13762 {
13763 int quals;
13764 gcc_assert (TYPE_P (arg));
13765
13766 quals = cp_type_quals (arg) | cp_type_quals (t);
13767
13768 return cp_build_qualified_type_real
13769 (arg, quals, complain | tf_ignore_bad_quals);
13770 }
13771 else if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
13772 {
13773 /* We are processing a type constructed from a
13774 template template parameter. */
13775 tree argvec = tsubst (TYPE_TI_ARGS (t),
13776 args, complain, in_decl);
13777 if (argvec == error_mark_node)
13778 return error_mark_node;
13779
13780 gcc_assert (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
13781 || TREE_CODE (arg) == TEMPLATE_DECL
13782 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
13783
13784 if (TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE)
13785 /* Consider this code:
13786
13787 template <template <class> class Template>
13788 struct Internal {
13789 template <class Arg> using Bind = Template<Arg>;
13790 };
13791
13792 template <template <class> class Template, class Arg>
13793 using Instantiate = Template<Arg>; //#0
13794
13795 template <template <class> class Template,
13796 class Argument>
13797 using Bind =
13798 Instantiate<Internal<Template>::template Bind,
13799 Argument>; //#1
13800
13801 When #1 is parsed, the
13802 BOUND_TEMPLATE_TEMPLATE_PARM representing the
13803 parameter `Template' in #0 matches the
13804 UNBOUND_CLASS_TEMPLATE representing the argument
13805 `Internal<Template>::template Bind'; We then want
13806 to assemble the type `Bind<Argument>' that can't
13807 be fully created right now, because
13808 `Internal<Template>' not being complete, the Bind
13809 template cannot be looked up in that context. So
13810 we need to "store" `Bind<Argument>' for later
13811 when the context of Bind becomes complete. Let's
13812 store that in a TYPENAME_TYPE. */
13813 return make_typename_type (TYPE_CONTEXT (arg),
13814 build_nt (TEMPLATE_ID_EXPR,
13815 TYPE_IDENTIFIER (arg),
13816 argvec),
13817 typename_type,
13818 complain);
13819
13820 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
13821 are resolving nested-types in the signature of a
13822 member function templates. Otherwise ARG is a
13823 TEMPLATE_DECL and is the real template to be
13824 instantiated. */
13825 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
13826 arg = TYPE_NAME (arg);
13827
13828 r = lookup_template_class (arg,
13829 argvec, in_decl,
13830 DECL_CONTEXT (arg),
13831 /*entering_scope=*/0,
13832 complain);
13833 return cp_build_qualified_type_real
13834 (r, cp_type_quals (t) | cp_type_quals (r), complain);
13835 }
13836 else if (code == TEMPLATE_TEMPLATE_PARM)
13837 return arg;
13838 else
13839 /* TEMPLATE_PARM_INDEX. */
13840 return convert_from_reference (unshare_expr (arg));
13841 }
13842
13843 if (level == 1)
13844 /* This can happen during the attempted tsubst'ing in
13845 unify. This means that we don't yet have any information
13846 about the template parameter in question. */
13847 return t;
13848
13849 /* If we get here, we must have been looking at a parm for a
13850 more deeply nested template. Make a new version of this
13851 template parameter, but with a lower level. */
13852 switch (code)
13853 {
13854 case TEMPLATE_TYPE_PARM:
13855 case TEMPLATE_TEMPLATE_PARM:
13856 case BOUND_TEMPLATE_TEMPLATE_PARM:
13857 if (cp_type_quals (t))
13858 {
13859 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
13860 r = cp_build_qualified_type_real
13861 (r, cp_type_quals (t),
13862 complain | (code == TEMPLATE_TYPE_PARM
13863 ? tf_ignore_bad_quals : 0));
13864 }
13865 else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
13866 && PLACEHOLDER_TYPE_CONSTRAINTS (t)
13867 && (r = (TEMPLATE_PARM_DESCENDANTS
13868 (TEMPLATE_TYPE_PARM_INDEX (t))))
13869 && (r = TREE_TYPE (r))
13870 && !PLACEHOLDER_TYPE_CONSTRAINTS (r))
13871 /* Break infinite recursion when substituting the constraints
13872 of a constrained placeholder. */;
13873 else
13874 {
13875 r = copy_type (t);
13876 TEMPLATE_TYPE_PARM_INDEX (r)
13877 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
13878 r, levels, args, complain);
13879 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
13880 TYPE_MAIN_VARIANT (r) = r;
13881 TYPE_POINTER_TO (r) = NULL_TREE;
13882 TYPE_REFERENCE_TO (r) = NULL_TREE;
13883
13884 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
13885 {
13886 /* Propagate constraints on placeholders. */
13887 if (tree constr = PLACEHOLDER_TYPE_CONSTRAINTS (t))
13888 PLACEHOLDER_TYPE_CONSTRAINTS (r)
13889 = tsubst_constraint (constr, args, complain, in_decl);
13890 else if (tree pl = CLASS_PLACEHOLDER_TEMPLATE (t))
13891 {
13892 if (DECL_TEMPLATE_TEMPLATE_PARM_P (pl))
13893 pl = tsubst (pl, args, complain, in_decl);
13894 CLASS_PLACEHOLDER_TEMPLATE (r) = pl;
13895 }
13896 }
13897
13898 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
13899 /* We have reduced the level of the template
13900 template parameter, but not the levels of its
13901 template parameters, so canonical_type_parameter
13902 will not be able to find the canonical template
13903 template parameter for this level. Thus, we
13904 require structural equality checking to compare
13905 TEMPLATE_TEMPLATE_PARMs. */
13906 SET_TYPE_STRUCTURAL_EQUALITY (r);
13907 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
13908 SET_TYPE_STRUCTURAL_EQUALITY (r);
13909 else
13910 TYPE_CANONICAL (r) = canonical_type_parameter (r);
13911
13912 if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
13913 {
13914 tree tinfo = TYPE_TEMPLATE_INFO (t);
13915 /* We might need to substitute into the types of non-type
13916 template parameters. */
13917 tree tmpl = tsubst (TI_TEMPLATE (tinfo), args,
13918 complain, in_decl);
13919 if (tmpl == error_mark_node)
13920 return error_mark_node;
13921 tree argvec = tsubst (TI_ARGS (tinfo), args,
13922 complain, in_decl);
13923 if (argvec == error_mark_node)
13924 return error_mark_node;
13925
13926 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
13927 = build_template_info (tmpl, argvec);
13928 }
13929 }
13930 break;
13931
13932 case TEMPLATE_PARM_INDEX:
13933 /* OK, now substitute the type of the non-type parameter. We
13934 couldn't do it earlier because it might be an auto parameter,
13935 and we wouldn't need to if we had an argument. */
13936 type = tsubst (type, args, complain, in_decl);
13937 if (type == error_mark_node)
13938 return error_mark_node;
13939 r = reduce_template_parm_level (t, type, levels, args, complain);
13940 break;
13941
13942 default:
13943 gcc_unreachable ();
13944 }
13945
13946 return r;
13947 }
13948
13949 case TREE_LIST:
13950 {
13951 tree purpose, value, chain;
13952
13953 if (t == void_list_node)
13954 return t;
13955
13956 purpose = TREE_PURPOSE (t);
13957 if (purpose)
13958 {
13959 purpose = tsubst (purpose, args, complain, in_decl);
13960 if (purpose == error_mark_node)
13961 return error_mark_node;
13962 }
13963 value = TREE_VALUE (t);
13964 if (value)
13965 {
13966 value = tsubst (value, args, complain, in_decl);
13967 if (value == error_mark_node)
13968 return error_mark_node;
13969 }
13970 chain = TREE_CHAIN (t);
13971 if (chain && chain != void_type_node)
13972 {
13973 chain = tsubst (chain, args, complain, in_decl);
13974 if (chain == error_mark_node)
13975 return error_mark_node;
13976 }
13977 if (purpose == TREE_PURPOSE (t)
13978 && value == TREE_VALUE (t)
13979 && chain == TREE_CHAIN (t))
13980 return t;
13981 return hash_tree_cons (purpose, value, chain);
13982 }
13983
13984 case TREE_BINFO:
13985 /* We should never be tsubsting a binfo. */
13986 gcc_unreachable ();
13987
13988 case TREE_VEC:
13989 /* A vector of template arguments. */
13990 gcc_assert (!type);
13991 return tsubst_template_args (t, args, complain, in_decl);
13992
13993 case POINTER_TYPE:
13994 case REFERENCE_TYPE:
13995 {
13996 if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
13997 return t;
13998
13999 /* [temp.deduct]
14000
14001 Type deduction may fail for any of the following
14002 reasons:
14003
14004 -- Attempting to create a pointer to reference type.
14005 -- Attempting to create a reference to a reference type or
14006 a reference to void.
14007
14008 Core issue 106 says that creating a reference to a reference
14009 during instantiation is no longer a cause for failure. We
14010 only enforce this check in strict C++98 mode. */
14011 if ((TREE_CODE (type) == REFERENCE_TYPE
14012 && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
14013 || (code == REFERENCE_TYPE && VOID_TYPE_P (type)))
14014 {
14015 static location_t last_loc;
14016
14017 /* We keep track of the last time we issued this error
14018 message to avoid spewing a ton of messages during a
14019 single bad template instantiation. */
14020 if (complain & tf_error
14021 && last_loc != input_location)
14022 {
14023 if (VOID_TYPE_P (type))
14024 error ("forming reference to void");
14025 else if (code == POINTER_TYPE)
14026 error ("forming pointer to reference type %qT", type);
14027 else
14028 error ("forming reference to reference type %qT", type);
14029 last_loc = input_location;
14030 }
14031
14032 return error_mark_node;
14033 }
14034 else if (TREE_CODE (type) == FUNCTION_TYPE
14035 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
14036 || type_memfn_rqual (type) != REF_QUAL_NONE))
14037 {
14038 if (complain & tf_error)
14039 {
14040 if (code == POINTER_TYPE)
14041 error ("forming pointer to qualified function type %qT",
14042 type);
14043 else
14044 error ("forming reference to qualified function type %qT",
14045 type);
14046 }
14047 return error_mark_node;
14048 }
14049 else if (code == POINTER_TYPE)
14050 {
14051 r = build_pointer_type (type);
14052 if (TREE_CODE (type) == METHOD_TYPE)
14053 r = build_ptrmemfunc_type (r);
14054 }
14055 else if (TREE_CODE (type) == REFERENCE_TYPE)
14056 /* In C++0x, during template argument substitution, when there is an
14057 attempt to create a reference to a reference type, reference
14058 collapsing is applied as described in [14.3.1/4 temp.arg.type]:
14059
14060 "If a template-argument for a template-parameter T names a type
14061 that is a reference to a type A, an attempt to create the type
14062 'lvalue reference to cv T' creates the type 'lvalue reference to
14063 A,' while an attempt to create the type type rvalue reference to
14064 cv T' creates the type T"
14065 */
14066 r = cp_build_reference_type
14067 (TREE_TYPE (type),
14068 TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
14069 else
14070 r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
14071 r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
14072
14073 if (r != error_mark_node)
14074 /* Will this ever be needed for TYPE_..._TO values? */
14075 layout_type (r);
14076
14077 return r;
14078 }
14079 case OFFSET_TYPE:
14080 {
14081 r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
14082 if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
14083 {
14084 /* [temp.deduct]
14085
14086 Type deduction may fail for any of the following
14087 reasons:
14088
14089 -- Attempting to create "pointer to member of T" when T
14090 is not a class type. */
14091 if (complain & tf_error)
14092 error ("creating pointer to member of non-class type %qT", r);
14093 return error_mark_node;
14094 }
14095 if (TREE_CODE (type) == REFERENCE_TYPE)
14096 {
14097 if (complain & tf_error)
14098 error ("creating pointer to member reference type %qT", type);
14099 return error_mark_node;
14100 }
14101 if (VOID_TYPE_P (type))
14102 {
14103 if (complain & tf_error)
14104 error ("creating pointer to member of type void");
14105 return error_mark_node;
14106 }
14107 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
14108 if (TREE_CODE (type) == FUNCTION_TYPE)
14109 {
14110 /* The type of the implicit object parameter gets its
14111 cv-qualifiers from the FUNCTION_TYPE. */
14112 tree memptr;
14113 tree method_type
14114 = build_memfn_type (type, r, type_memfn_quals (type),
14115 type_memfn_rqual (type));
14116 memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
14117 return cp_build_qualified_type_real (memptr, cp_type_quals (t),
14118 complain);
14119 }
14120 else
14121 return cp_build_qualified_type_real (build_ptrmem_type (r, type),
14122 cp_type_quals (t),
14123 complain);
14124 }
14125 case FUNCTION_TYPE:
14126 case METHOD_TYPE:
14127 {
14128 tree fntype;
14129 tree specs;
14130 fntype = tsubst_function_type (t, args, complain, in_decl);
14131 if (fntype == error_mark_node)
14132 return error_mark_node;
14133
14134 /* Substitute the exception specification. */
14135 specs = tsubst_exception_specification (t, args, complain, in_decl,
14136 /*defer_ok*/fndecl_type);
14137 if (specs == error_mark_node)
14138 return error_mark_node;
14139 if (specs)
14140 fntype = build_exception_variant (fntype, specs);
14141 return fntype;
14142 }
14143 case ARRAY_TYPE:
14144 {
14145 tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
14146 if (domain == error_mark_node)
14147 return error_mark_node;
14148
14149 /* As an optimization, we avoid regenerating the array type if
14150 it will obviously be the same as T. */
14151 if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
14152 return t;
14153
14154 /* These checks should match the ones in create_array_type_for_decl.
14155
14156 [temp.deduct]
14157
14158 The deduction may fail for any of the following reasons:
14159
14160 -- Attempting to create an array with an element type that
14161 is void, a function type, or a reference type, or [DR337]
14162 an abstract class type. */
14163 if (VOID_TYPE_P (type)
14164 || TREE_CODE (type) == FUNCTION_TYPE
14165 || (TREE_CODE (type) == ARRAY_TYPE
14166 && TYPE_DOMAIN (type) == NULL_TREE)
14167 || TREE_CODE (type) == REFERENCE_TYPE)
14168 {
14169 if (complain & tf_error)
14170 error ("creating array of %qT", type);
14171 return error_mark_node;
14172 }
14173
14174 if (abstract_virtuals_error_sfinae (ACU_ARRAY, type, complain))
14175 return error_mark_node;
14176
14177 r = build_cplus_array_type (type, domain);
14178
14179 if (TYPE_USER_ALIGN (t))
14180 {
14181 SET_TYPE_ALIGN (r, TYPE_ALIGN (t));
14182 TYPE_USER_ALIGN (r) = 1;
14183 }
14184
14185 return r;
14186 }
14187
14188 case TYPENAME_TYPE:
14189 {
14190 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
14191 in_decl, /*entering_scope=*/1);
14192 if (ctx == error_mark_node)
14193 return error_mark_node;
14194
14195 tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
14196 complain, in_decl);
14197 if (f == error_mark_node)
14198 return error_mark_node;
14199
14200 if (!MAYBE_CLASS_TYPE_P (ctx))
14201 {
14202 if (complain & tf_error)
14203 error ("%qT is not a class, struct, or union type", ctx);
14204 return error_mark_node;
14205 }
14206 else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
14207 {
14208 /* Normally, make_typename_type does not require that the CTX
14209 have complete type in order to allow things like:
14210
14211 template <class T> struct S { typename S<T>::X Y; };
14212
14213 But, such constructs have already been resolved by this
14214 point, so here CTX really should have complete type, unless
14215 it's a partial instantiation. */
14216 ctx = complete_type (ctx);
14217 if (!COMPLETE_TYPE_P (ctx))
14218 {
14219 if (complain & tf_error)
14220 cxx_incomplete_type_error (NULL_TREE, ctx);
14221 return error_mark_node;
14222 }
14223 }
14224
14225 f = make_typename_type (ctx, f, typename_type,
14226 complain | tf_keep_type_decl);
14227 if (f == error_mark_node)
14228 return f;
14229 if (TREE_CODE (f) == TYPE_DECL)
14230 {
14231 complain |= tf_ignore_bad_quals;
14232 f = TREE_TYPE (f);
14233 }
14234
14235 if (TREE_CODE (f) != TYPENAME_TYPE)
14236 {
14237 if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
14238 {
14239 if (complain & tf_error)
14240 error ("%qT resolves to %qT, which is not an enumeration type",
14241 t, f);
14242 else
14243 return error_mark_node;
14244 }
14245 else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
14246 {
14247 if (complain & tf_error)
14248 error ("%qT resolves to %qT, which is is not a class type",
14249 t, f);
14250 else
14251 return error_mark_node;
14252 }
14253 }
14254
14255 return cp_build_qualified_type_real
14256 (f, cp_type_quals (f) | cp_type_quals (t), complain);
14257 }
14258
14259 case UNBOUND_CLASS_TEMPLATE:
14260 {
14261 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
14262 in_decl, /*entering_scope=*/1);
14263 tree name = TYPE_IDENTIFIER (t);
14264 tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
14265
14266 if (ctx == error_mark_node || name == error_mark_node)
14267 return error_mark_node;
14268
14269 if (parm_list)
14270 parm_list = tsubst_template_parms (parm_list, args, complain);
14271 return make_unbound_class_template (ctx, name, parm_list, complain);
14272 }
14273
14274 case TYPEOF_TYPE:
14275 {
14276 tree type;
14277
14278 ++cp_unevaluated_operand;
14279 ++c_inhibit_evaluation_warnings;
14280
14281 type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
14282 complain, in_decl,
14283 /*integral_constant_expression_p=*/false);
14284
14285 --cp_unevaluated_operand;
14286 --c_inhibit_evaluation_warnings;
14287
14288 type = finish_typeof (type);
14289 return cp_build_qualified_type_real (type,
14290 cp_type_quals (t)
14291 | cp_type_quals (type),
14292 complain);
14293 }
14294
14295 case DECLTYPE_TYPE:
14296 {
14297 tree type;
14298
14299 ++cp_unevaluated_operand;
14300 ++c_inhibit_evaluation_warnings;
14301
14302 type = tsubst_copy_and_build (DECLTYPE_TYPE_EXPR (t), args,
14303 complain|tf_decltype, in_decl,
14304 /*function_p*/false,
14305 /*integral_constant_expression*/false);
14306
14307 if (DECLTYPE_FOR_INIT_CAPTURE (t))
14308 {
14309 if (type == NULL_TREE)
14310 {
14311 if (complain & tf_error)
14312 error ("empty initializer in lambda init-capture");
14313 type = error_mark_node;
14314 }
14315 else if (TREE_CODE (type) == TREE_LIST)
14316 type = build_x_compound_expr_from_list (type, ELK_INIT, complain);
14317 }
14318
14319 --cp_unevaluated_operand;
14320 --c_inhibit_evaluation_warnings;
14321
14322 if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
14323 type = lambda_capture_field_type (type,
14324 DECLTYPE_FOR_INIT_CAPTURE (t),
14325 DECLTYPE_FOR_REF_CAPTURE (t));
14326 else if (DECLTYPE_FOR_LAMBDA_PROXY (t))
14327 type = lambda_proxy_type (type);
14328 else
14329 {
14330 bool id = DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t);
14331 if (id && TREE_CODE (DECLTYPE_TYPE_EXPR (t)) == BIT_NOT_EXPR
14332 && EXPR_P (type))
14333 /* In a template ~id could be either a complement expression
14334 or an unqualified-id naming a destructor; if instantiating
14335 it produces an expression, it's not an id-expression or
14336 member access. */
14337 id = false;
14338 type = finish_decltype_type (type, id, complain);
14339 }
14340 return cp_build_qualified_type_real (type,
14341 cp_type_quals (t)
14342 | cp_type_quals (type),
14343 complain | tf_ignore_bad_quals);
14344 }
14345
14346 case UNDERLYING_TYPE:
14347 {
14348 tree type = tsubst (UNDERLYING_TYPE_TYPE (t), args,
14349 complain, in_decl);
14350 return finish_underlying_type (type);
14351 }
14352
14353 case TYPE_ARGUMENT_PACK:
14354 case NONTYPE_ARGUMENT_PACK:
14355 {
14356 tree r;
14357
14358 if (code == NONTYPE_ARGUMENT_PACK)
14359 r = make_node (code);
14360 else
14361 r = cxx_make_type (code);
14362
14363 tree pack_args = ARGUMENT_PACK_ARGS (t);
14364 pack_args = tsubst_template_args (pack_args, args, complain, in_decl);
14365 SET_ARGUMENT_PACK_ARGS (r, pack_args);
14366
14367 return r;
14368 }
14369
14370 case VOID_CST:
14371 case INTEGER_CST:
14372 case REAL_CST:
14373 case STRING_CST:
14374 case PLUS_EXPR:
14375 case MINUS_EXPR:
14376 case NEGATE_EXPR:
14377 case NOP_EXPR:
14378 case INDIRECT_REF:
14379 case ADDR_EXPR:
14380 case CALL_EXPR:
14381 case ARRAY_REF:
14382 case SCOPE_REF:
14383 /* We should use one of the expression tsubsts for these codes. */
14384 gcc_unreachable ();
14385
14386 default:
14387 sorry ("use of %qs in template", get_tree_code_name (code));
14388 return error_mark_node;
14389 }
14390 }
14391
14392 /* tsubst a BASELINK. OBJECT_TYPE, if non-NULL, is the type of the
14393 expression on the left-hand side of the "." or "->" operator. We
14394 only do the lookup if we had a dependent BASELINK. Otherwise we
14395 adjust it onto the instantiated heirarchy. */
14396
14397 static tree
14398 tsubst_baselink (tree baselink, tree object_type,
14399 tree args, tsubst_flags_t complain, tree in_decl)
14400 {
14401 bool qualified_p = BASELINK_QUALIFIED_P (baselink);
14402 tree qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
14403 qualifying_scope = tsubst (qualifying_scope, args, complain, in_decl);
14404
14405 tree optype = BASELINK_OPTYPE (baselink);
14406 optype = tsubst (optype, args, complain, in_decl);
14407
14408 tree template_args = NULL_TREE;
14409 bool template_id_p = false;
14410 tree fns = BASELINK_FUNCTIONS (baselink);
14411 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
14412 {
14413 template_id_p = true;
14414 template_args = TREE_OPERAND (fns, 1);
14415 fns = TREE_OPERAND (fns, 0);
14416 if (template_args)
14417 template_args = tsubst_template_args (template_args, args,
14418 complain, in_decl);
14419 }
14420
14421 tree binfo_type = BINFO_TYPE (BASELINK_BINFO (baselink));
14422 binfo_type = tsubst (binfo_type, args, complain, in_decl);
14423 bool dependent_p = binfo_type != BINFO_TYPE (BASELINK_BINFO (baselink));
14424
14425 if (dependent_p)
14426 {
14427 tree name = OVL_NAME (fns);
14428 if (IDENTIFIER_CONV_OP_P (name))
14429 name = make_conv_op_name (optype);
14430
14431 if (name == complete_dtor_identifier)
14432 /* Treat as-if non-dependent below. */
14433 dependent_p = false;
14434
14435 baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
14436 if (!baselink)
14437 {
14438 if ((complain & tf_error)
14439 && constructor_name_p (name, qualifying_scope))
14440 error ("cannot call constructor %<%T::%D%> directly",
14441 qualifying_scope, name);
14442 return error_mark_node;
14443 }
14444
14445 if (BASELINK_P (baselink))
14446 fns = BASELINK_FUNCTIONS (baselink);
14447 }
14448 else
14449 {
14450 gcc_assert (optype == BASELINK_OPTYPE (baselink));
14451 /* We're going to overwrite pieces below, make a duplicate. */
14452 baselink = copy_node (baselink);
14453 }
14454
14455 /* If lookup found a single function, mark it as used at this point.
14456 (If lookup found multiple functions the one selected later by
14457 overload resolution will be marked as used at that point.) */
14458 if (!template_id_p && !really_overloaded_fn (fns)
14459 && !mark_used (OVL_FIRST (fns), complain) && !(complain & tf_error))
14460 return error_mark_node;
14461
14462 if (BASELINK_P (baselink))
14463 {
14464 /* Add back the template arguments, if present. */
14465 if (template_id_p)
14466 BASELINK_FUNCTIONS (baselink)
14467 = build2 (TEMPLATE_ID_EXPR, unknown_type_node, fns, template_args);
14468
14469 /* Update the conversion operator type. */
14470 BASELINK_OPTYPE (baselink) = optype;
14471 }
14472
14473 if (!object_type)
14474 object_type = current_class_type;
14475
14476 if (qualified_p || !dependent_p)
14477 {
14478 baselink = adjust_result_of_qualified_name_lookup (baselink,
14479 qualifying_scope,
14480 object_type);
14481 if (!qualified_p)
14482 /* We need to call adjust_result_of_qualified_name_lookup in case the
14483 destructor names a base class, but we unset BASELINK_QUALIFIED_P
14484 so that we still get virtual function binding. */
14485 BASELINK_QUALIFIED_P (baselink) = false;
14486 }
14487
14488 return baselink;
14489 }
14490
14491 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID. DONE is
14492 true if the qualified-id will be a postfix-expression in-and-of
14493 itself; false if more of the postfix-expression follows the
14494 QUALIFIED_ID. ADDRESS_P is true if the qualified-id is the operand
14495 of "&". */
14496
14497 static tree
14498 tsubst_qualified_id (tree qualified_id, tree args,
14499 tsubst_flags_t complain, tree in_decl,
14500 bool done, bool address_p)
14501 {
14502 tree expr;
14503 tree scope;
14504 tree name;
14505 bool is_template;
14506 tree template_args;
14507 location_t loc = UNKNOWN_LOCATION;
14508
14509 gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
14510
14511 /* Figure out what name to look up. */
14512 name = TREE_OPERAND (qualified_id, 1);
14513 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
14514 {
14515 is_template = true;
14516 loc = EXPR_LOCATION (name);
14517 template_args = TREE_OPERAND (name, 1);
14518 if (template_args)
14519 template_args = tsubst_template_args (template_args, args,
14520 complain, in_decl);
14521 if (template_args == error_mark_node)
14522 return error_mark_node;
14523 name = TREE_OPERAND (name, 0);
14524 }
14525 else
14526 {
14527 is_template = false;
14528 template_args = NULL_TREE;
14529 }
14530
14531 /* Substitute into the qualifying scope. When there are no ARGS, we
14532 are just trying to simplify a non-dependent expression. In that
14533 case the qualifying scope may be dependent, and, in any case,
14534 substituting will not help. */
14535 scope = TREE_OPERAND (qualified_id, 0);
14536 if (args)
14537 {
14538 scope = tsubst (scope, args, complain, in_decl);
14539 expr = tsubst_copy (name, args, complain, in_decl);
14540 }
14541 else
14542 expr = name;
14543
14544 if (dependent_scope_p (scope))
14545 {
14546 if (is_template)
14547 expr = build_min_nt_loc (loc, TEMPLATE_ID_EXPR, expr, template_args);
14548 tree r = build_qualified_name (NULL_TREE, scope, expr,
14549 QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
14550 REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (qualified_id);
14551 return r;
14552 }
14553
14554 if (!BASELINK_P (name) && !DECL_P (expr))
14555 {
14556 if (TREE_CODE (expr) == BIT_NOT_EXPR)
14557 {
14558 /* A BIT_NOT_EXPR is used to represent a destructor. */
14559 if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
14560 {
14561 error ("qualifying type %qT does not match destructor name ~%qT",
14562 scope, TREE_OPERAND (expr, 0));
14563 expr = error_mark_node;
14564 }
14565 else
14566 expr = lookup_qualified_name (scope, complete_dtor_identifier,
14567 /*is_type_p=*/0, false);
14568 }
14569 else
14570 expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
14571 if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
14572 ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
14573 {
14574 if (complain & tf_error)
14575 {
14576 error ("dependent-name %qE is parsed as a non-type, but "
14577 "instantiation yields a type", qualified_id);
14578 inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
14579 }
14580 return error_mark_node;
14581 }
14582 }
14583
14584 if (DECL_P (expr))
14585 {
14586 check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
14587 scope);
14588 /* Remember that there was a reference to this entity. */
14589 if (!mark_used (expr, complain) && !(complain & tf_error))
14590 return error_mark_node;
14591 }
14592
14593 if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
14594 {
14595 if (complain & tf_error)
14596 qualified_name_lookup_error (scope,
14597 TREE_OPERAND (qualified_id, 1),
14598 expr, input_location);
14599 return error_mark_node;
14600 }
14601
14602 if (is_template)
14603 {
14604 if (variable_template_p (expr))
14605 expr = lookup_and_finish_template_variable (expr, template_args,
14606 complain);
14607 else
14608 expr = lookup_template_function (expr, template_args);
14609 }
14610
14611 if (expr == error_mark_node && complain & tf_error)
14612 qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
14613 expr, input_location);
14614 else if (TYPE_P (scope))
14615 {
14616 expr = (adjust_result_of_qualified_name_lookup
14617 (expr, scope, current_nonlambda_class_type ()));
14618 expr = (finish_qualified_id_expr
14619 (scope, expr, done, address_p && PTRMEM_OK_P (qualified_id),
14620 QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
14621 /*template_arg_p=*/false, complain));
14622 }
14623
14624 /* Expressions do not generally have reference type. */
14625 if (TREE_CODE (expr) != SCOPE_REF
14626 /* However, if we're about to form a pointer-to-member, we just
14627 want the referenced member referenced. */
14628 && TREE_CODE (expr) != OFFSET_REF)
14629 expr = convert_from_reference (expr);
14630
14631 if (REF_PARENTHESIZED_P (qualified_id))
14632 expr = force_paren_expr (expr);
14633
14634 return expr;
14635 }
14636
14637 /* tsubst the initializer for a VAR_DECL. INIT is the unsubstituted
14638 initializer, DECL is the substituted VAR_DECL. Other arguments are as
14639 for tsubst. */
14640
14641 static tree
14642 tsubst_init (tree init, tree decl, tree args,
14643 tsubst_flags_t complain, tree in_decl)
14644 {
14645 if (!init)
14646 return NULL_TREE;
14647
14648 init = tsubst_expr (init, args, complain, in_decl, false);
14649
14650 if (!init && TREE_TYPE (decl) != error_mark_node)
14651 {
14652 /* If we had an initializer but it
14653 instantiated to nothing,
14654 value-initialize the object. This will
14655 only occur when the initializer was a
14656 pack expansion where the parameter packs
14657 used in that expansion were of length
14658 zero. */
14659 init = build_value_init (TREE_TYPE (decl),
14660 complain);
14661 if (TREE_CODE (init) == AGGR_INIT_EXPR)
14662 init = get_target_expr_sfinae (init, complain);
14663 if (TREE_CODE (init) == TARGET_EXPR)
14664 TARGET_EXPR_DIRECT_INIT_P (init) = true;
14665 }
14666
14667 return init;
14668 }
14669
14670 /* Like tsubst, but deals with expressions. This function just replaces
14671 template parms; to finish processing the resultant expression, use
14672 tsubst_copy_and_build or tsubst_expr. */
14673
14674 static tree
14675 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
14676 {
14677 enum tree_code code;
14678 tree r;
14679
14680 if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
14681 return t;
14682
14683 code = TREE_CODE (t);
14684
14685 switch (code)
14686 {
14687 case PARM_DECL:
14688 r = retrieve_local_specialization (t);
14689
14690 if (r == NULL_TREE)
14691 {
14692 /* We get here for a use of 'this' in an NSDMI. */
14693 if (DECL_NAME (t) == this_identifier && current_class_ptr)
14694 return current_class_ptr;
14695
14696 /* This can happen for a parameter name used later in a function
14697 declaration (such as in a late-specified return type). Just
14698 make a dummy decl, since it's only used for its type. */
14699 gcc_assert (cp_unevaluated_operand != 0);
14700 r = tsubst_decl (t, args, complain);
14701 /* Give it the template pattern as its context; its true context
14702 hasn't been instantiated yet and this is good enough for
14703 mangling. */
14704 DECL_CONTEXT (r) = DECL_CONTEXT (t);
14705 }
14706
14707 if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
14708 r = ARGUMENT_PACK_SELECT_ARG (r);
14709 if (!mark_used (r, complain) && !(complain & tf_error))
14710 return error_mark_node;
14711 return r;
14712
14713 case CONST_DECL:
14714 {
14715 tree enum_type;
14716 tree v;
14717
14718 if (DECL_TEMPLATE_PARM_P (t))
14719 return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
14720 /* There is no need to substitute into namespace-scope
14721 enumerators. */
14722 if (DECL_NAMESPACE_SCOPE_P (t))
14723 return t;
14724 /* If ARGS is NULL, then T is known to be non-dependent. */
14725 if (args == NULL_TREE)
14726 return scalar_constant_value (t);
14727
14728 /* Unfortunately, we cannot just call lookup_name here.
14729 Consider:
14730
14731 template <int I> int f() {
14732 enum E { a = I };
14733 struct S { void g() { E e = a; } };
14734 };
14735
14736 When we instantiate f<7>::S::g(), say, lookup_name is not
14737 clever enough to find f<7>::a. */
14738 enum_type
14739 = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
14740 /*entering_scope=*/0);
14741
14742 for (v = TYPE_VALUES (enum_type);
14743 v != NULL_TREE;
14744 v = TREE_CHAIN (v))
14745 if (TREE_PURPOSE (v) == DECL_NAME (t))
14746 return TREE_VALUE (v);
14747
14748 /* We didn't find the name. That should never happen; if
14749 name-lookup found it during preliminary parsing, we
14750 should find it again here during instantiation. */
14751 gcc_unreachable ();
14752 }
14753 return t;
14754
14755 case FIELD_DECL:
14756 if (PACK_EXPANSION_P (TREE_TYPE (t)))
14757 {
14758 /* Check for a local specialization set up by
14759 tsubst_pack_expansion. */
14760 if (tree r = retrieve_local_specialization (t))
14761 {
14762 if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
14763 r = ARGUMENT_PACK_SELECT_ARG (r);
14764 return r;
14765 }
14766
14767 /* When retrieving a capture pack from a generic lambda, remove the
14768 lambda call op's own template argument list from ARGS. Only the
14769 template arguments active for the closure type should be used to
14770 retrieve the pack specialization. */
14771 if (LAMBDA_FUNCTION_P (current_function_decl)
14772 && (template_class_depth (DECL_CONTEXT (t))
14773 != TMPL_ARGS_DEPTH (args)))
14774 args = strip_innermost_template_args (args, 1);
14775
14776 /* Otherwise return the full NONTYPE_ARGUMENT_PACK that
14777 tsubst_decl put in the hash table. */
14778 return retrieve_specialization (t, args, 0);
14779 }
14780
14781 if (DECL_CONTEXT (t))
14782 {
14783 tree ctx;
14784
14785 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
14786 /*entering_scope=*/1);
14787 if (ctx != DECL_CONTEXT (t))
14788 {
14789 tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
14790 if (!r)
14791 {
14792 if (complain & tf_error)
14793 error ("using invalid field %qD", t);
14794 return error_mark_node;
14795 }
14796 return r;
14797 }
14798 }
14799
14800 return t;
14801
14802 case VAR_DECL:
14803 case FUNCTION_DECL:
14804 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
14805 r = tsubst (t, args, complain, in_decl);
14806 else if (local_variable_p (t)
14807 && uses_template_parms (DECL_CONTEXT (t)))
14808 {
14809 r = retrieve_local_specialization (t);
14810 if (r == NULL_TREE)
14811 {
14812 /* First try name lookup to find the instantiation. */
14813 r = lookup_name (DECL_NAME (t));
14814 if (r && !is_capture_proxy (r))
14815 {
14816 /* Make sure that the one we found is the one we want. */
14817 tree ctx = enclosing_instantiation_of (DECL_CONTEXT (t));
14818 if (ctx != DECL_CONTEXT (r))
14819 r = NULL_TREE;
14820 }
14821
14822 if (r)
14823 /* OK */;
14824 else
14825 {
14826 /* This can happen for a variable used in a
14827 late-specified return type of a local lambda, or for a
14828 local static or constant. Building a new VAR_DECL
14829 should be OK in all those cases. */
14830 r = tsubst_decl (t, args, complain);
14831 if (local_specializations)
14832 /* Avoid infinite recursion (79640). */
14833 register_local_specialization (r, t);
14834 if (decl_maybe_constant_var_p (r))
14835 {
14836 /* We can't call cp_finish_decl, so handle the
14837 initializer by hand. */
14838 tree init = tsubst_init (DECL_INITIAL (t), r, args,
14839 complain, in_decl);
14840 if (!processing_template_decl)
14841 init = maybe_constant_init (init);
14842 if (processing_template_decl
14843 ? potential_constant_expression (init)
14844 : reduced_constant_expression_p (init))
14845 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
14846 = TREE_CONSTANT (r) = true;
14847 DECL_INITIAL (r) = init;
14848 if (tree auto_node = type_uses_auto (TREE_TYPE (r)))
14849 TREE_TYPE (r)
14850 = do_auto_deduction (TREE_TYPE (r), init, auto_node,
14851 complain, adc_variable_type);
14852 }
14853 gcc_assert (cp_unevaluated_operand || TREE_STATIC (r)
14854 || decl_constant_var_p (r)
14855 || errorcount || sorrycount);
14856 if (!processing_template_decl
14857 && !TREE_STATIC (r))
14858 r = process_outer_var_ref (r, complain);
14859 }
14860 /* Remember this for subsequent uses. */
14861 if (local_specializations)
14862 register_local_specialization (r, t);
14863 }
14864 }
14865 else
14866 r = t;
14867 if (!mark_used (r, complain))
14868 return error_mark_node;
14869 return r;
14870
14871 case NAMESPACE_DECL:
14872 return t;
14873
14874 case OVERLOAD:
14875 /* An OVERLOAD will always be a non-dependent overload set; an
14876 overload set from function scope will just be represented with an
14877 IDENTIFIER_NODE, and from class scope with a BASELINK. */
14878 gcc_assert (!uses_template_parms (t));
14879 /* We must have marked any lookups as persistent. */
14880 gcc_assert (!OVL_LOOKUP_P (t) || OVL_USED_P (t));
14881 return t;
14882
14883 case BASELINK:
14884 return tsubst_baselink (t, current_nonlambda_class_type (),
14885 args, complain, in_decl);
14886
14887 case TEMPLATE_DECL:
14888 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
14889 return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
14890 args, complain, in_decl);
14891 else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
14892 return tsubst (t, args, complain, in_decl);
14893 else if (DECL_CLASS_SCOPE_P (t)
14894 && uses_template_parms (DECL_CONTEXT (t)))
14895 {
14896 /* Template template argument like the following example need
14897 special treatment:
14898
14899 template <template <class> class TT> struct C {};
14900 template <class T> struct D {
14901 template <class U> struct E {};
14902 C<E> c; // #1
14903 };
14904 D<int> d; // #2
14905
14906 We are processing the template argument `E' in #1 for
14907 the template instantiation #2. Originally, `E' is a
14908 TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT. Now we
14909 have to substitute this with one having context `D<int>'. */
14910
14911 tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
14912 if (dependent_scope_p (context))
14913 {
14914 /* When rewriting a constructor into a deduction guide, a
14915 non-dependent name can become dependent, so memtmpl<args>
14916 becomes context::template memtmpl<args>. */
14917 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14918 return build_qualified_name (type, context, DECL_NAME (t),
14919 /*template*/true);
14920 }
14921 return lookup_field (context, DECL_NAME(t), 0, false);
14922 }
14923 else
14924 /* Ordinary template template argument. */
14925 return t;
14926
14927 case CAST_EXPR:
14928 case REINTERPRET_CAST_EXPR:
14929 case CONST_CAST_EXPR:
14930 case STATIC_CAST_EXPR:
14931 case DYNAMIC_CAST_EXPR:
14932 case IMPLICIT_CONV_EXPR:
14933 case CONVERT_EXPR:
14934 case NOP_EXPR:
14935 {
14936 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14937 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
14938 return build1 (code, type, op0);
14939 }
14940
14941 case SIZEOF_EXPR:
14942 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0))
14943 || ARGUMENT_PACK_P (TREE_OPERAND (t, 0)))
14944 {
14945 tree expanded, op = TREE_OPERAND (t, 0);
14946 int len = 0;
14947
14948 if (SIZEOF_EXPR_TYPE_P (t))
14949 op = TREE_TYPE (op);
14950
14951 ++cp_unevaluated_operand;
14952 ++c_inhibit_evaluation_warnings;
14953 /* We only want to compute the number of arguments. */
14954 if (PACK_EXPANSION_P (op))
14955 expanded = tsubst_pack_expansion (op, args, complain, in_decl);
14956 else
14957 expanded = tsubst_template_args (ARGUMENT_PACK_ARGS (op),
14958 args, complain, in_decl);
14959 --cp_unevaluated_operand;
14960 --c_inhibit_evaluation_warnings;
14961
14962 if (TREE_CODE (expanded) == TREE_VEC)
14963 {
14964 len = TREE_VEC_LENGTH (expanded);
14965 /* Set TREE_USED for the benefit of -Wunused. */
14966 for (int i = 0; i < len; i++)
14967 if (DECL_P (TREE_VEC_ELT (expanded, i)))
14968 TREE_USED (TREE_VEC_ELT (expanded, i)) = true;
14969 }
14970
14971 if (expanded == error_mark_node)
14972 return error_mark_node;
14973 else if (PACK_EXPANSION_P (expanded)
14974 || (TREE_CODE (expanded) == TREE_VEC
14975 && pack_expansion_args_count (expanded)))
14976
14977 {
14978 if (PACK_EXPANSION_P (expanded))
14979 /* OK. */;
14980 else if (TREE_VEC_LENGTH (expanded) == 1)
14981 expanded = TREE_VEC_ELT (expanded, 0);
14982 else
14983 expanded = make_argument_pack (expanded);
14984
14985 if (TYPE_P (expanded))
14986 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR,
14987 complain & tf_error);
14988 else
14989 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
14990 complain & tf_error);
14991 }
14992 else
14993 return build_int_cst (size_type_node, len);
14994 }
14995 if (SIZEOF_EXPR_TYPE_P (t))
14996 {
14997 r = tsubst (TREE_TYPE (TREE_OPERAND (t, 0)),
14998 args, complain, in_decl);
14999 r = build1 (NOP_EXPR, r, error_mark_node);
15000 r = build1 (SIZEOF_EXPR,
15001 tsubst (TREE_TYPE (t), args, complain, in_decl), r);
15002 SIZEOF_EXPR_TYPE_P (r) = 1;
15003 return r;
15004 }
15005 /* Fall through */
15006
15007 case INDIRECT_REF:
15008 case NEGATE_EXPR:
15009 case TRUTH_NOT_EXPR:
15010 case BIT_NOT_EXPR:
15011 case ADDR_EXPR:
15012 case UNARY_PLUS_EXPR: /* Unary + */
15013 case ALIGNOF_EXPR:
15014 case AT_ENCODE_EXPR:
15015 case ARROW_EXPR:
15016 case THROW_EXPR:
15017 case TYPEID_EXPR:
15018 case REALPART_EXPR:
15019 case IMAGPART_EXPR:
15020 case PAREN_EXPR:
15021 {
15022 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
15023 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
15024 return build1 (code, type, op0);
15025 }
15026
15027 case COMPONENT_REF:
15028 {
15029 tree object;
15030 tree name;
15031
15032 object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
15033 name = TREE_OPERAND (t, 1);
15034 if (TREE_CODE (name) == BIT_NOT_EXPR)
15035 {
15036 name = tsubst_copy (TREE_OPERAND (name, 0), args,
15037 complain, in_decl);
15038 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
15039 }
15040 else if (TREE_CODE (name) == SCOPE_REF
15041 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
15042 {
15043 tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
15044 complain, in_decl);
15045 name = TREE_OPERAND (name, 1);
15046 name = tsubst_copy (TREE_OPERAND (name, 0), args,
15047 complain, in_decl);
15048 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
15049 name = build_qualified_name (/*type=*/NULL_TREE,
15050 base, name,
15051 /*template_p=*/false);
15052 }
15053 else if (BASELINK_P (name))
15054 name = tsubst_baselink (name,
15055 non_reference (TREE_TYPE (object)),
15056 args, complain,
15057 in_decl);
15058 else
15059 name = tsubst_copy (name, args, complain, in_decl);
15060 return build_nt (COMPONENT_REF, object, name, NULL_TREE);
15061 }
15062
15063 case PLUS_EXPR:
15064 case MINUS_EXPR:
15065 case MULT_EXPR:
15066 case TRUNC_DIV_EXPR:
15067 case CEIL_DIV_EXPR:
15068 case FLOOR_DIV_EXPR:
15069 case ROUND_DIV_EXPR:
15070 case EXACT_DIV_EXPR:
15071 case BIT_AND_EXPR:
15072 case BIT_IOR_EXPR:
15073 case BIT_XOR_EXPR:
15074 case TRUNC_MOD_EXPR:
15075 case FLOOR_MOD_EXPR:
15076 case TRUTH_ANDIF_EXPR:
15077 case TRUTH_ORIF_EXPR:
15078 case TRUTH_AND_EXPR:
15079 case TRUTH_OR_EXPR:
15080 case RSHIFT_EXPR:
15081 case LSHIFT_EXPR:
15082 case RROTATE_EXPR:
15083 case LROTATE_EXPR:
15084 case EQ_EXPR:
15085 case NE_EXPR:
15086 case MAX_EXPR:
15087 case MIN_EXPR:
15088 case LE_EXPR:
15089 case GE_EXPR:
15090 case LT_EXPR:
15091 case GT_EXPR:
15092 case COMPOUND_EXPR:
15093 case DOTSTAR_EXPR:
15094 case MEMBER_REF:
15095 case PREDECREMENT_EXPR:
15096 case PREINCREMENT_EXPR:
15097 case POSTDECREMENT_EXPR:
15098 case POSTINCREMENT_EXPR:
15099 {
15100 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
15101 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
15102 return build_nt (code, op0, op1);
15103 }
15104
15105 case SCOPE_REF:
15106 {
15107 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
15108 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
15109 return build_qualified_name (/*type=*/NULL_TREE, op0, op1,
15110 QUALIFIED_NAME_IS_TEMPLATE (t));
15111 }
15112
15113 case ARRAY_REF:
15114 {
15115 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
15116 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
15117 return build_nt (ARRAY_REF, op0, op1, NULL_TREE, NULL_TREE);
15118 }
15119
15120 case CALL_EXPR:
15121 {
15122 int n = VL_EXP_OPERAND_LENGTH (t);
15123 tree result = build_vl_exp (CALL_EXPR, n);
15124 int i;
15125 for (i = 0; i < n; i++)
15126 TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
15127 complain, in_decl);
15128 return result;
15129 }
15130
15131 case COND_EXPR:
15132 case MODOP_EXPR:
15133 case PSEUDO_DTOR_EXPR:
15134 case VEC_PERM_EXPR:
15135 {
15136 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
15137 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
15138 tree op2 = tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl);
15139 r = build_nt (code, op0, op1, op2);
15140 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
15141 return r;
15142 }
15143
15144 case NEW_EXPR:
15145 {
15146 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
15147 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
15148 tree op2 = tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl);
15149 r = build_nt (code, op0, op1, op2);
15150 NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
15151 return r;
15152 }
15153
15154 case DELETE_EXPR:
15155 {
15156 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
15157 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
15158 r = build_nt (code, op0, op1);
15159 DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
15160 DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
15161 return r;
15162 }
15163
15164 case TEMPLATE_ID_EXPR:
15165 {
15166 /* Substituted template arguments */
15167 tree fn = TREE_OPERAND (t, 0);
15168 tree targs = TREE_OPERAND (t, 1);
15169
15170 fn = tsubst_copy (fn, args, complain, in_decl);
15171 if (targs)
15172 targs = tsubst_template_args (targs, args, complain, in_decl);
15173
15174 return lookup_template_function (fn, targs);
15175 }
15176
15177 case TREE_LIST:
15178 {
15179 tree purpose, value, chain;
15180
15181 if (t == void_list_node)
15182 return t;
15183
15184 purpose = TREE_PURPOSE (t);
15185 if (purpose)
15186 purpose = tsubst_copy (purpose, args, complain, in_decl);
15187 value = TREE_VALUE (t);
15188 if (value)
15189 value = tsubst_copy (value, args, complain, in_decl);
15190 chain = TREE_CHAIN (t);
15191 if (chain && chain != void_type_node)
15192 chain = tsubst_copy (chain, args, complain, in_decl);
15193 if (purpose == TREE_PURPOSE (t)
15194 && value == TREE_VALUE (t)
15195 && chain == TREE_CHAIN (t))
15196 return t;
15197 return tree_cons (purpose, value, chain);
15198 }
15199
15200 case RECORD_TYPE:
15201 case UNION_TYPE:
15202 case ENUMERAL_TYPE:
15203 case INTEGER_TYPE:
15204 case TEMPLATE_TYPE_PARM:
15205 case TEMPLATE_TEMPLATE_PARM:
15206 case BOUND_TEMPLATE_TEMPLATE_PARM:
15207 case TEMPLATE_PARM_INDEX:
15208 case POINTER_TYPE:
15209 case REFERENCE_TYPE:
15210 case OFFSET_TYPE:
15211 case FUNCTION_TYPE:
15212 case METHOD_TYPE:
15213 case ARRAY_TYPE:
15214 case TYPENAME_TYPE:
15215 case UNBOUND_CLASS_TEMPLATE:
15216 case TYPEOF_TYPE:
15217 case DECLTYPE_TYPE:
15218 case TYPE_DECL:
15219 return tsubst (t, args, complain, in_decl);
15220
15221 case USING_DECL:
15222 t = DECL_NAME (t);
15223 /* Fall through. */
15224 case IDENTIFIER_NODE:
15225 if (IDENTIFIER_CONV_OP_P (t))
15226 {
15227 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
15228 return make_conv_op_name (new_type);
15229 }
15230 else
15231 return t;
15232
15233 case CONSTRUCTOR:
15234 /* This is handled by tsubst_copy_and_build. */
15235 gcc_unreachable ();
15236
15237 case VA_ARG_EXPR:
15238 {
15239 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
15240 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
15241 return build_x_va_arg (EXPR_LOCATION (t), op0, type);
15242 }
15243
15244 case CLEANUP_POINT_EXPR:
15245 /* We shouldn't have built any of these during initial template
15246 generation. Instead, they should be built during instantiation
15247 in response to the saved STMT_IS_FULL_EXPR_P setting. */
15248 gcc_unreachable ();
15249
15250 case OFFSET_REF:
15251 {
15252 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
15253 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
15254 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
15255 r = build2 (code, type, op0, op1);
15256 PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
15257 if (!mark_used (TREE_OPERAND (r, 1), complain)
15258 && !(complain & tf_error))
15259 return error_mark_node;
15260 return r;
15261 }
15262
15263 case EXPR_PACK_EXPANSION:
15264 error ("invalid use of pack expansion expression");
15265 return error_mark_node;
15266
15267 case NONTYPE_ARGUMENT_PACK:
15268 error ("use %<...%> to expand argument pack");
15269 return error_mark_node;
15270
15271 case VOID_CST:
15272 gcc_checking_assert (t == void_node && VOID_TYPE_P (TREE_TYPE (t)));
15273 return t;
15274
15275 case INTEGER_CST:
15276 case REAL_CST:
15277 case STRING_CST:
15278 case COMPLEX_CST:
15279 {
15280 /* Instantiate any typedefs in the type. */
15281 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
15282 r = fold_convert (type, t);
15283 gcc_assert (TREE_CODE (r) == code);
15284 return r;
15285 }
15286
15287 case PTRMEM_CST:
15288 /* These can sometimes show up in a partial instantiation, but never
15289 involve template parms. */
15290 gcc_assert (!uses_template_parms (t));
15291 return t;
15292
15293 case UNARY_LEFT_FOLD_EXPR:
15294 return tsubst_unary_left_fold (t, args, complain, in_decl);
15295 case UNARY_RIGHT_FOLD_EXPR:
15296 return tsubst_unary_right_fold (t, args, complain, in_decl);
15297 case BINARY_LEFT_FOLD_EXPR:
15298 return tsubst_binary_left_fold (t, args, complain, in_decl);
15299 case BINARY_RIGHT_FOLD_EXPR:
15300 return tsubst_binary_right_fold (t, args, complain, in_decl);
15301 case PREDICT_EXPR:
15302 return t;
15303
15304 case DEBUG_BEGIN_STMT:
15305 /* ??? There's no point in copying it for now, but maybe some
15306 day it will contain more information, such as a pointer back
15307 to the containing function, inlined copy or so. */
15308 return t;
15309
15310 default:
15311 /* We shouldn't get here, but keep going if !flag_checking. */
15312 if (flag_checking)
15313 gcc_unreachable ();
15314 return t;
15315 }
15316 }
15317
15318 /* Helper function for tsubst_omp_clauses, used for instantiation of
15319 OMP_CLAUSE_DECL of clauses. */
15320
15321 static tree
15322 tsubst_omp_clause_decl (tree decl, tree args, tsubst_flags_t complain,
15323 tree in_decl)
15324 {
15325 if (decl == NULL_TREE)
15326 return NULL_TREE;
15327
15328 /* Handle an OpenMP array section represented as a TREE_LIST (or
15329 OMP_CLAUSE_DEPEND_KIND). An OMP_CLAUSE_DEPEND (with a depend
15330 kind of OMP_CLAUSE_DEPEND_SINK) can also be represented as a
15331 TREE_LIST. We can handle it exactly the same as an array section
15332 (purpose, value, and a chain), even though the nomenclature
15333 (low_bound, length, etc) is different. */
15334 if (TREE_CODE (decl) == TREE_LIST)
15335 {
15336 tree low_bound
15337 = tsubst_expr (TREE_PURPOSE (decl), args, complain, in_decl,
15338 /*integral_constant_expression_p=*/false);
15339 tree length = tsubst_expr (TREE_VALUE (decl), args, complain, in_decl,
15340 /*integral_constant_expression_p=*/false);
15341 tree chain = tsubst_omp_clause_decl (TREE_CHAIN (decl), args, complain,
15342 in_decl);
15343 if (TREE_PURPOSE (decl) == low_bound
15344 && TREE_VALUE (decl) == length
15345 && TREE_CHAIN (decl) == chain)
15346 return decl;
15347 tree ret = tree_cons (low_bound, length, chain);
15348 OMP_CLAUSE_DEPEND_SINK_NEGATIVE (ret)
15349 = OMP_CLAUSE_DEPEND_SINK_NEGATIVE (decl);
15350 return ret;
15351 }
15352 tree ret = tsubst_expr (decl, args, complain, in_decl,
15353 /*integral_constant_expression_p=*/false);
15354 /* Undo convert_from_reference tsubst_expr could have called. */
15355 if (decl
15356 && REFERENCE_REF_P (ret)
15357 && !REFERENCE_REF_P (decl))
15358 ret = TREE_OPERAND (ret, 0);
15359 return ret;
15360 }
15361
15362 /* Like tsubst_copy, but specifically for OpenMP clauses. */
15363
15364 static tree
15365 tsubst_omp_clauses (tree clauses, enum c_omp_region_type ort,
15366 tree args, tsubst_flags_t complain, tree in_decl)
15367 {
15368 tree new_clauses = NULL_TREE, nc, oc;
15369 tree linear_no_step = NULL_TREE;
15370
15371 for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
15372 {
15373 nc = copy_node (oc);
15374 OMP_CLAUSE_CHAIN (nc) = new_clauses;
15375 new_clauses = nc;
15376
15377 switch (OMP_CLAUSE_CODE (nc))
15378 {
15379 case OMP_CLAUSE_LASTPRIVATE:
15380 if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
15381 {
15382 OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
15383 tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
15384 in_decl, /*integral_constant_expression_p=*/false);
15385 OMP_CLAUSE_LASTPRIVATE_STMT (nc)
15386 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
15387 }
15388 /* FALLTHRU */
15389 case OMP_CLAUSE_PRIVATE:
15390 case OMP_CLAUSE_SHARED:
15391 case OMP_CLAUSE_FIRSTPRIVATE:
15392 case OMP_CLAUSE_COPYIN:
15393 case OMP_CLAUSE_COPYPRIVATE:
15394 case OMP_CLAUSE_UNIFORM:
15395 case OMP_CLAUSE_DEPEND:
15396 case OMP_CLAUSE_FROM:
15397 case OMP_CLAUSE_TO:
15398 case OMP_CLAUSE_MAP:
15399 case OMP_CLAUSE_USE_DEVICE_PTR:
15400 case OMP_CLAUSE_IS_DEVICE_PTR:
15401 OMP_CLAUSE_DECL (nc)
15402 = tsubst_omp_clause_decl (OMP_CLAUSE_DECL (oc), args, complain,
15403 in_decl);
15404 break;
15405 case OMP_CLAUSE_TILE:
15406 case OMP_CLAUSE_IF:
15407 case OMP_CLAUSE_NUM_THREADS:
15408 case OMP_CLAUSE_SCHEDULE:
15409 case OMP_CLAUSE_COLLAPSE:
15410 case OMP_CLAUSE_FINAL:
15411 case OMP_CLAUSE_DEVICE:
15412 case OMP_CLAUSE_DIST_SCHEDULE:
15413 case OMP_CLAUSE_NUM_TEAMS:
15414 case OMP_CLAUSE_THREAD_LIMIT:
15415 case OMP_CLAUSE_SAFELEN:
15416 case OMP_CLAUSE_SIMDLEN:
15417 case OMP_CLAUSE_NUM_TASKS:
15418 case OMP_CLAUSE_GRAINSIZE:
15419 case OMP_CLAUSE_PRIORITY:
15420 case OMP_CLAUSE_ORDERED:
15421 case OMP_CLAUSE_HINT:
15422 case OMP_CLAUSE_NUM_GANGS:
15423 case OMP_CLAUSE_NUM_WORKERS:
15424 case OMP_CLAUSE_VECTOR_LENGTH:
15425 case OMP_CLAUSE_WORKER:
15426 case OMP_CLAUSE_VECTOR:
15427 case OMP_CLAUSE_ASYNC:
15428 case OMP_CLAUSE_WAIT:
15429 OMP_CLAUSE_OPERAND (nc, 0)
15430 = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
15431 in_decl, /*integral_constant_expression_p=*/false);
15432 break;
15433 case OMP_CLAUSE_REDUCTION:
15434 if (OMP_CLAUSE_REDUCTION_PLACEHOLDER (oc))
15435 {
15436 tree placeholder = OMP_CLAUSE_REDUCTION_PLACEHOLDER (oc);
15437 if (TREE_CODE (placeholder) == SCOPE_REF)
15438 {
15439 tree scope = tsubst (TREE_OPERAND (placeholder, 0), args,
15440 complain, in_decl);
15441 OMP_CLAUSE_REDUCTION_PLACEHOLDER (nc)
15442 = build_qualified_name (NULL_TREE, scope,
15443 TREE_OPERAND (placeholder, 1),
15444 false);
15445 }
15446 else
15447 gcc_assert (identifier_p (placeholder));
15448 }
15449 OMP_CLAUSE_DECL (nc)
15450 = tsubst_omp_clause_decl (OMP_CLAUSE_DECL (oc), args, complain,
15451 in_decl);
15452 break;
15453 case OMP_CLAUSE_GANG:
15454 case OMP_CLAUSE_ALIGNED:
15455 OMP_CLAUSE_DECL (nc)
15456 = tsubst_omp_clause_decl (OMP_CLAUSE_DECL (oc), args, complain,
15457 in_decl);
15458 OMP_CLAUSE_OPERAND (nc, 1)
15459 = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 1), args, complain,
15460 in_decl, /*integral_constant_expression_p=*/false);
15461 break;
15462 case OMP_CLAUSE_LINEAR:
15463 OMP_CLAUSE_DECL (nc)
15464 = tsubst_omp_clause_decl (OMP_CLAUSE_DECL (oc), args, complain,
15465 in_decl);
15466 if (OMP_CLAUSE_LINEAR_STEP (oc) == NULL_TREE)
15467 {
15468 gcc_assert (!linear_no_step);
15469 linear_no_step = nc;
15470 }
15471 else if (OMP_CLAUSE_LINEAR_VARIABLE_STRIDE (oc))
15472 OMP_CLAUSE_LINEAR_STEP (nc)
15473 = tsubst_omp_clause_decl (OMP_CLAUSE_LINEAR_STEP (oc), args,
15474 complain, in_decl);
15475 else
15476 OMP_CLAUSE_LINEAR_STEP (nc)
15477 = tsubst_expr (OMP_CLAUSE_LINEAR_STEP (oc), args, complain,
15478 in_decl,
15479 /*integral_constant_expression_p=*/false);
15480 break;
15481 case OMP_CLAUSE_NOWAIT:
15482 case OMP_CLAUSE_DEFAULT:
15483 case OMP_CLAUSE_UNTIED:
15484 case OMP_CLAUSE_MERGEABLE:
15485 case OMP_CLAUSE_INBRANCH:
15486 case OMP_CLAUSE_NOTINBRANCH:
15487 case OMP_CLAUSE_PROC_BIND:
15488 case OMP_CLAUSE_FOR:
15489 case OMP_CLAUSE_PARALLEL:
15490 case OMP_CLAUSE_SECTIONS:
15491 case OMP_CLAUSE_TASKGROUP:
15492 case OMP_CLAUSE_NOGROUP:
15493 case OMP_CLAUSE_THREADS:
15494 case OMP_CLAUSE_SIMD:
15495 case OMP_CLAUSE_DEFAULTMAP:
15496 case OMP_CLAUSE_INDEPENDENT:
15497 case OMP_CLAUSE_AUTO:
15498 case OMP_CLAUSE_SEQ:
15499 break;
15500 default:
15501 gcc_unreachable ();
15502 }
15503 if ((ort & C_ORT_OMP_DECLARE_SIMD) == C_ORT_OMP)
15504 switch (OMP_CLAUSE_CODE (nc))
15505 {
15506 case OMP_CLAUSE_SHARED:
15507 case OMP_CLAUSE_PRIVATE:
15508 case OMP_CLAUSE_FIRSTPRIVATE:
15509 case OMP_CLAUSE_LASTPRIVATE:
15510 case OMP_CLAUSE_COPYPRIVATE:
15511 case OMP_CLAUSE_LINEAR:
15512 case OMP_CLAUSE_REDUCTION:
15513 case OMP_CLAUSE_USE_DEVICE_PTR:
15514 case OMP_CLAUSE_IS_DEVICE_PTR:
15515 /* tsubst_expr on SCOPE_REF results in returning
15516 finish_non_static_data_member result. Undo that here. */
15517 if (TREE_CODE (OMP_CLAUSE_DECL (oc)) == SCOPE_REF
15518 && (TREE_CODE (TREE_OPERAND (OMP_CLAUSE_DECL (oc), 1))
15519 == IDENTIFIER_NODE))
15520 {
15521 tree t = OMP_CLAUSE_DECL (nc);
15522 tree v = t;
15523 while (v)
15524 switch (TREE_CODE (v))
15525 {
15526 case COMPONENT_REF:
15527 case MEM_REF:
15528 case INDIRECT_REF:
15529 CASE_CONVERT:
15530 case POINTER_PLUS_EXPR:
15531 v = TREE_OPERAND (v, 0);
15532 continue;
15533 case PARM_DECL:
15534 if (DECL_CONTEXT (v) == current_function_decl
15535 && DECL_ARTIFICIAL (v)
15536 && DECL_NAME (v) == this_identifier)
15537 OMP_CLAUSE_DECL (nc) = TREE_OPERAND (t, 1);
15538 /* FALLTHRU */
15539 default:
15540 v = NULL_TREE;
15541 break;
15542 }
15543 }
15544 else if (VAR_P (OMP_CLAUSE_DECL (oc))
15545 && DECL_HAS_VALUE_EXPR_P (OMP_CLAUSE_DECL (oc))
15546 && DECL_ARTIFICIAL (OMP_CLAUSE_DECL (oc))
15547 && DECL_LANG_SPECIFIC (OMP_CLAUSE_DECL (oc))
15548 && DECL_OMP_PRIVATIZED_MEMBER (OMP_CLAUSE_DECL (oc)))
15549 {
15550 tree decl = OMP_CLAUSE_DECL (nc);
15551 if (VAR_P (decl))
15552 {
15553 retrofit_lang_decl (decl);
15554 DECL_OMP_PRIVATIZED_MEMBER (decl) = 1;
15555 }
15556 }
15557 break;
15558 default:
15559 break;
15560 }
15561 }
15562
15563 new_clauses = nreverse (new_clauses);
15564 if (ort != C_ORT_OMP_DECLARE_SIMD)
15565 {
15566 new_clauses = finish_omp_clauses (new_clauses, ort);
15567 if (linear_no_step)
15568 for (nc = new_clauses; nc; nc = OMP_CLAUSE_CHAIN (nc))
15569 if (nc == linear_no_step)
15570 {
15571 OMP_CLAUSE_LINEAR_STEP (nc) = NULL_TREE;
15572 break;
15573 }
15574 }
15575 return new_clauses;
15576 }
15577
15578 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes. */
15579
15580 static tree
15581 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
15582 tree in_decl)
15583 {
15584 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
15585
15586 tree purpose, value, chain;
15587
15588 if (t == NULL)
15589 return t;
15590
15591 if (TREE_CODE (t) != TREE_LIST)
15592 return tsubst_copy_and_build (t, args, complain, in_decl,
15593 /*function_p=*/false,
15594 /*integral_constant_expression_p=*/false);
15595
15596 if (t == void_list_node)
15597 return t;
15598
15599 purpose = TREE_PURPOSE (t);
15600 if (purpose)
15601 purpose = RECUR (purpose);
15602 value = TREE_VALUE (t);
15603 if (value)
15604 {
15605 if (TREE_CODE (value) != LABEL_DECL)
15606 value = RECUR (value);
15607 else
15608 {
15609 value = lookup_label (DECL_NAME (value));
15610 gcc_assert (TREE_CODE (value) == LABEL_DECL);
15611 TREE_USED (value) = 1;
15612 }
15613 }
15614 chain = TREE_CHAIN (t);
15615 if (chain && chain != void_type_node)
15616 chain = RECUR (chain);
15617 return tree_cons (purpose, value, chain);
15618 #undef RECUR
15619 }
15620
15621 /* Used to temporarily communicate the list of #pragma omp parallel
15622 clauses to #pragma omp for instantiation if they are combined
15623 together. */
15624
15625 static tree *omp_parallel_combined_clauses;
15626
15627 /* Substitute one OMP_FOR iterator. */
15628
15629 static void
15630 tsubst_omp_for_iterator (tree t, int i, tree declv, tree orig_declv,
15631 tree initv, tree condv, tree incrv, tree *clauses,
15632 tree args, tsubst_flags_t complain, tree in_decl,
15633 bool integral_constant_expression_p)
15634 {
15635 #define RECUR(NODE) \
15636 tsubst_expr ((NODE), args, complain, in_decl, \
15637 integral_constant_expression_p)
15638 tree decl, init, cond, incr;
15639
15640 init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
15641 gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
15642
15643 if (orig_declv && OMP_FOR_ORIG_DECLS (t))
15644 {
15645 tree o = TREE_VEC_ELT (OMP_FOR_ORIG_DECLS (t), i);
15646 TREE_VEC_ELT (orig_declv, i) = RECUR (o);
15647 }
15648
15649 decl = TREE_OPERAND (init, 0);
15650 init = TREE_OPERAND (init, 1);
15651 tree decl_expr = NULL_TREE;
15652 if (init && TREE_CODE (init) == DECL_EXPR)
15653 {
15654 /* We need to jump through some hoops to handle declarations in the
15655 init-statement, since we might need to handle auto deduction,
15656 but we need to keep control of initialization. */
15657 decl_expr = init;
15658 init = DECL_INITIAL (DECL_EXPR_DECL (init));
15659 decl = tsubst_decl (decl, args, complain);
15660 }
15661 else
15662 {
15663 if (TREE_CODE (decl) == SCOPE_REF)
15664 {
15665 decl = RECUR (decl);
15666 if (TREE_CODE (decl) == COMPONENT_REF)
15667 {
15668 tree v = decl;
15669 while (v)
15670 switch (TREE_CODE (v))
15671 {
15672 case COMPONENT_REF:
15673 case MEM_REF:
15674 case INDIRECT_REF:
15675 CASE_CONVERT:
15676 case POINTER_PLUS_EXPR:
15677 v = TREE_OPERAND (v, 0);
15678 continue;
15679 case PARM_DECL:
15680 if (DECL_CONTEXT (v) == current_function_decl
15681 && DECL_ARTIFICIAL (v)
15682 && DECL_NAME (v) == this_identifier)
15683 {
15684 decl = TREE_OPERAND (decl, 1);
15685 decl = omp_privatize_field (decl, false);
15686 }
15687 /* FALLTHRU */
15688 default:
15689 v = NULL_TREE;
15690 break;
15691 }
15692 }
15693 }
15694 else
15695 decl = RECUR (decl);
15696 }
15697 init = RECUR (init);
15698
15699 tree auto_node = type_uses_auto (TREE_TYPE (decl));
15700 if (auto_node && init)
15701 TREE_TYPE (decl)
15702 = do_auto_deduction (TREE_TYPE (decl), init, auto_node);
15703
15704 gcc_assert (!type_dependent_expression_p (decl));
15705
15706 if (!CLASS_TYPE_P (TREE_TYPE (decl)))
15707 {
15708 if (decl_expr)
15709 {
15710 /* Declare the variable, but don't let that initialize it. */
15711 tree init_sav = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
15712 DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL_TREE;
15713 RECUR (decl_expr);
15714 DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init_sav;
15715 }
15716
15717 cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
15718 incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
15719 if (TREE_CODE (incr) == MODIFY_EXPR)
15720 {
15721 tree lhs = RECUR (TREE_OPERAND (incr, 0));
15722 tree rhs = RECUR (TREE_OPERAND (incr, 1));
15723 incr = build_x_modify_expr (EXPR_LOCATION (incr), lhs,
15724 NOP_EXPR, rhs, complain);
15725 }
15726 else
15727 incr = RECUR (incr);
15728 TREE_VEC_ELT (declv, i) = decl;
15729 TREE_VEC_ELT (initv, i) = init;
15730 TREE_VEC_ELT (condv, i) = cond;
15731 TREE_VEC_ELT (incrv, i) = incr;
15732 return;
15733 }
15734
15735 if (decl_expr)
15736 {
15737 /* Declare and initialize the variable. */
15738 RECUR (decl_expr);
15739 init = NULL_TREE;
15740 }
15741 else if (init)
15742 {
15743 tree *pc;
15744 int j;
15745 for (j = (omp_parallel_combined_clauses == NULL ? 1 : 0); j < 2; j++)
15746 {
15747 for (pc = j ? clauses : omp_parallel_combined_clauses; *pc; )
15748 {
15749 if (OMP_CLAUSE_CODE (*pc) == OMP_CLAUSE_PRIVATE
15750 && OMP_CLAUSE_DECL (*pc) == decl)
15751 break;
15752 else if (OMP_CLAUSE_CODE (*pc) == OMP_CLAUSE_LASTPRIVATE
15753 && OMP_CLAUSE_DECL (*pc) == decl)
15754 {
15755 if (j)
15756 break;
15757 /* Move lastprivate (decl) clause to OMP_FOR_CLAUSES. */
15758 tree c = *pc;
15759 *pc = OMP_CLAUSE_CHAIN (c);
15760 OMP_CLAUSE_CHAIN (c) = *clauses;
15761 *clauses = c;
15762 }
15763 else if (OMP_CLAUSE_CODE (*pc) == OMP_CLAUSE_FIRSTPRIVATE
15764 && OMP_CLAUSE_DECL (*pc) == decl)
15765 {
15766 error ("iteration variable %qD should not be firstprivate",
15767 decl);
15768 *pc = OMP_CLAUSE_CHAIN (*pc);
15769 }
15770 else if (OMP_CLAUSE_CODE (*pc) == OMP_CLAUSE_REDUCTION
15771 && OMP_CLAUSE_DECL (*pc) == decl)
15772 {
15773 error ("iteration variable %qD should not be reduction",
15774 decl);
15775 *pc = OMP_CLAUSE_CHAIN (*pc);
15776 }
15777 else
15778 pc = &OMP_CLAUSE_CHAIN (*pc);
15779 }
15780 if (*pc)
15781 break;
15782 }
15783 if (*pc == NULL_TREE)
15784 {
15785 tree c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
15786 OMP_CLAUSE_DECL (c) = decl;
15787 c = finish_omp_clauses (c, C_ORT_OMP);
15788 if (c)
15789 {
15790 OMP_CLAUSE_CHAIN (c) = *clauses;
15791 *clauses = c;
15792 }
15793 }
15794 }
15795 cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
15796 if (COMPARISON_CLASS_P (cond))
15797 {
15798 tree op0 = RECUR (TREE_OPERAND (cond, 0));
15799 tree op1 = RECUR (TREE_OPERAND (cond, 1));
15800 cond = build2 (TREE_CODE (cond), boolean_type_node, op0, op1);
15801 }
15802 else
15803 cond = RECUR (cond);
15804 incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
15805 switch (TREE_CODE (incr))
15806 {
15807 case PREINCREMENT_EXPR:
15808 case PREDECREMENT_EXPR:
15809 case POSTINCREMENT_EXPR:
15810 case POSTDECREMENT_EXPR:
15811 incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
15812 RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
15813 break;
15814 case MODIFY_EXPR:
15815 if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
15816 || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
15817 {
15818 tree rhs = TREE_OPERAND (incr, 1);
15819 tree lhs = RECUR (TREE_OPERAND (incr, 0));
15820 tree rhs0 = RECUR (TREE_OPERAND (rhs, 0));
15821 tree rhs1 = RECUR (TREE_OPERAND (rhs, 1));
15822 incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
15823 build2 (TREE_CODE (rhs), TREE_TYPE (decl),
15824 rhs0, rhs1));
15825 }
15826 else
15827 incr = RECUR (incr);
15828 break;
15829 case MODOP_EXPR:
15830 if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
15831 || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
15832 {
15833 tree lhs = RECUR (TREE_OPERAND (incr, 0));
15834 incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
15835 build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
15836 TREE_TYPE (decl), lhs,
15837 RECUR (TREE_OPERAND (incr, 2))));
15838 }
15839 else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
15840 && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
15841 || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
15842 {
15843 tree rhs = TREE_OPERAND (incr, 2);
15844 tree lhs = RECUR (TREE_OPERAND (incr, 0));
15845 tree rhs0 = RECUR (TREE_OPERAND (rhs, 0));
15846 tree rhs1 = RECUR (TREE_OPERAND (rhs, 1));
15847 incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
15848 build2 (TREE_CODE (rhs), TREE_TYPE (decl),
15849 rhs0, rhs1));
15850 }
15851 else
15852 incr = RECUR (incr);
15853 break;
15854 default:
15855 incr = RECUR (incr);
15856 break;
15857 }
15858
15859 TREE_VEC_ELT (declv, i) = decl;
15860 TREE_VEC_ELT (initv, i) = init;
15861 TREE_VEC_ELT (condv, i) = cond;
15862 TREE_VEC_ELT (incrv, i) = incr;
15863 #undef RECUR
15864 }
15865
15866 /* Helper function of tsubst_expr, find OMP_TEAMS inside
15867 of OMP_TARGET's body. */
15868
15869 static tree
15870 tsubst_find_omp_teams (tree *tp, int *walk_subtrees, void *)
15871 {
15872 *walk_subtrees = 0;
15873 switch (TREE_CODE (*tp))
15874 {
15875 case OMP_TEAMS:
15876 return *tp;
15877 case BIND_EXPR:
15878 case STATEMENT_LIST:
15879 *walk_subtrees = 1;
15880 break;
15881 default:
15882 break;
15883 }
15884 return NULL_TREE;
15885 }
15886
15887 /* Helper function for tsubst_expr. For decomposition declaration
15888 artificial base DECL, which is tsubsted PATTERN_DECL, tsubst
15889 also the corresponding decls representing the identifiers
15890 of the decomposition declaration. Return DECL if successful
15891 or error_mark_node otherwise, set *FIRST to the first decl
15892 in the list chained through DECL_CHAIN and *CNT to the number
15893 of such decls. */
15894
15895 static tree
15896 tsubst_decomp_names (tree decl, tree pattern_decl, tree args,
15897 tsubst_flags_t complain, tree in_decl, tree *first,
15898 unsigned int *cnt)
15899 {
15900 tree decl2, decl3, prev = decl;
15901 *cnt = 0;
15902 gcc_assert (DECL_NAME (decl) == NULL_TREE);
15903 for (decl2 = DECL_CHAIN (pattern_decl);
15904 decl2
15905 && VAR_P (decl2)
15906 && DECL_DECOMPOSITION_P (decl2)
15907 && DECL_NAME (decl2);
15908 decl2 = DECL_CHAIN (decl2))
15909 {
15910 if (TREE_TYPE (decl2) == error_mark_node && *cnt == 0)
15911 {
15912 gcc_assert (errorcount);
15913 return error_mark_node;
15914 }
15915 (*cnt)++;
15916 gcc_assert (DECL_DECOMP_BASE (decl2) == pattern_decl);
15917 gcc_assert (DECL_HAS_VALUE_EXPR_P (decl2));
15918 tree v = DECL_VALUE_EXPR (decl2);
15919 DECL_HAS_VALUE_EXPR_P (decl2) = 0;
15920 SET_DECL_VALUE_EXPR (decl2, NULL_TREE);
15921 decl3 = tsubst (decl2, args, complain, in_decl);
15922 SET_DECL_VALUE_EXPR (decl2, v);
15923 DECL_HAS_VALUE_EXPR_P (decl2) = 1;
15924 if (VAR_P (decl3))
15925 DECL_TEMPLATE_INSTANTIATED (decl3) = 1;
15926 maybe_push_decl (decl3);
15927 if (error_operand_p (decl3))
15928 decl = error_mark_node;
15929 else if (decl != error_mark_node
15930 && DECL_CHAIN (decl3) != prev)
15931 {
15932 gcc_assert (errorcount);
15933 decl = error_mark_node;
15934 }
15935 else
15936 prev = decl3;
15937 }
15938 *first = prev;
15939 return decl;
15940 }
15941
15942 /* Like tsubst_copy for expressions, etc. but also does semantic
15943 processing. */
15944
15945 tree
15946 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
15947 bool integral_constant_expression_p)
15948 {
15949 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
15950 #define RECUR(NODE) \
15951 tsubst_expr ((NODE), args, complain, in_decl, \
15952 integral_constant_expression_p)
15953
15954 tree stmt, tmp;
15955 tree r;
15956 location_t loc;
15957
15958 if (t == NULL_TREE || t == error_mark_node)
15959 return t;
15960
15961 loc = input_location;
15962 if (EXPR_HAS_LOCATION (t))
15963 input_location = EXPR_LOCATION (t);
15964 if (STATEMENT_CODE_P (TREE_CODE (t)))
15965 current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
15966
15967 switch (TREE_CODE (t))
15968 {
15969 case STATEMENT_LIST:
15970 {
15971 tree_stmt_iterator i;
15972 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
15973 RECUR (tsi_stmt (i));
15974 break;
15975 }
15976
15977 case CTOR_INITIALIZER:
15978 finish_mem_initializers (tsubst_initializer_list
15979 (TREE_OPERAND (t, 0), args));
15980 break;
15981
15982 case RETURN_EXPR:
15983 finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
15984 break;
15985
15986 case EXPR_STMT:
15987 tmp = RECUR (EXPR_STMT_EXPR (t));
15988 if (EXPR_STMT_STMT_EXPR_RESULT (t))
15989 finish_stmt_expr_expr (tmp, cur_stmt_expr);
15990 else
15991 finish_expr_stmt (tmp);
15992 break;
15993
15994 case USING_STMT:
15995 finish_local_using_directive (USING_STMT_NAMESPACE (t),
15996 /*attribs=*/NULL_TREE);
15997 break;
15998
15999 case DECL_EXPR:
16000 {
16001 tree decl, pattern_decl;
16002 tree init;
16003
16004 pattern_decl = decl = DECL_EXPR_DECL (t);
16005 if (TREE_CODE (decl) == LABEL_DECL)
16006 finish_label_decl (DECL_NAME (decl));
16007 else if (TREE_CODE (decl) == USING_DECL)
16008 {
16009 tree scope = USING_DECL_SCOPE (decl);
16010 tree name = DECL_NAME (decl);
16011
16012 scope = tsubst (scope, args, complain, in_decl);
16013 decl = lookup_qualified_name (scope, name,
16014 /*is_type_p=*/false,
16015 /*complain=*/false);
16016 if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
16017 qualified_name_lookup_error (scope, name, decl, input_location);
16018 else
16019 finish_local_using_decl (decl, scope, name);
16020 }
16021 else if (DECL_PACK_P (decl))
16022 {
16023 /* Don't build up decls for a variadic capture proxy, we'll
16024 instantiate the elements directly as needed. */
16025 break;
16026 }
16027 else if (is_capture_proxy (decl)
16028 && !DECL_TEMPLATE_INSTANTIATION (current_function_decl))
16029 {
16030 /* We're in tsubst_lambda_expr, we've already inserted a new
16031 capture proxy, so look it up and register it. */
16032 tree inst = lookup_name_real (DECL_NAME (decl), 0, 0,
16033 /*block_p=*/true, 0, LOOKUP_HIDDEN);
16034 gcc_assert (inst != decl && is_capture_proxy (inst));
16035 register_local_specialization (inst, decl);
16036 break;
16037 }
16038 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
16039 && LAMBDA_TYPE_P (TREE_TYPE (decl)))
16040 /* Don't copy the old closure; we'll create a new one in
16041 tsubst_lambda_expr. */
16042 break;
16043 else
16044 {
16045 init = DECL_INITIAL (decl);
16046 decl = tsubst (decl, args, complain, in_decl);
16047 if (decl != error_mark_node)
16048 {
16049 /* By marking the declaration as instantiated, we avoid
16050 trying to instantiate it. Since instantiate_decl can't
16051 handle local variables, and since we've already done
16052 all that needs to be done, that's the right thing to
16053 do. */
16054 if (VAR_P (decl))
16055 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
16056 if (VAR_P (decl)
16057 && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
16058 /* Anonymous aggregates are a special case. */
16059 finish_anon_union (decl);
16060 else if (is_capture_proxy (DECL_EXPR_DECL (t)))
16061 {
16062 DECL_CONTEXT (decl) = current_function_decl;
16063 if (DECL_NAME (decl) == this_identifier)
16064 {
16065 tree lam = DECL_CONTEXT (current_function_decl);
16066 lam = CLASSTYPE_LAMBDA_EXPR (lam);
16067 LAMBDA_EXPR_THIS_CAPTURE (lam) = decl;
16068 }
16069 insert_capture_proxy (decl);
16070 }
16071 else if (DECL_IMPLICIT_TYPEDEF_P (t))
16072 /* We already did a pushtag. */;
16073 else if (TREE_CODE (decl) == FUNCTION_DECL
16074 && DECL_OMP_DECLARE_REDUCTION_P (decl)
16075 && DECL_FUNCTION_SCOPE_P (pattern_decl))
16076 {
16077 DECL_CONTEXT (decl) = NULL_TREE;
16078 pushdecl (decl);
16079 DECL_CONTEXT (decl) = current_function_decl;
16080 cp_check_omp_declare_reduction (decl);
16081 }
16082 else
16083 {
16084 int const_init = false;
16085 maybe_push_decl (decl);
16086 if (VAR_P (decl)
16087 && DECL_PRETTY_FUNCTION_P (decl))
16088 {
16089 /* For __PRETTY_FUNCTION__ we have to adjust the
16090 initializer. */
16091 const char *const name
16092 = cxx_printable_name (current_function_decl, 2);
16093 init = cp_fname_init (name, &TREE_TYPE (decl));
16094 }
16095 else
16096 init = tsubst_init (init, decl, args, complain, in_decl);
16097
16098 if (VAR_P (decl))
16099 const_init = (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P
16100 (pattern_decl));
16101 if (VAR_P (decl)
16102 && DECL_DECOMPOSITION_P (decl)
16103 && TREE_TYPE (pattern_decl) != error_mark_node)
16104 {
16105 unsigned int cnt;
16106 tree first;
16107 tree ndecl
16108 = tsubst_decomp_names (decl, pattern_decl, args,
16109 complain, in_decl, &first, &cnt);
16110 if (ndecl != error_mark_node)
16111 cp_maybe_mangle_decomp (ndecl, first, cnt);
16112 cp_finish_decl (decl, init, const_init, NULL_TREE, 0);
16113 if (ndecl != error_mark_node)
16114 cp_finish_decomp (ndecl, first, cnt);
16115 }
16116 else
16117 cp_finish_decl (decl, init, const_init, NULL_TREE, 0);
16118 }
16119 }
16120 }
16121
16122 break;
16123 }
16124
16125 case FOR_STMT:
16126 stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
16127 RECUR (FOR_INIT_STMT (t));
16128 finish_init_stmt (stmt);
16129 tmp = RECUR (FOR_COND (t));
16130 finish_for_cond (tmp, stmt, false);
16131 tmp = RECUR (FOR_EXPR (t));
16132 finish_for_expr (tmp, stmt);
16133 {
16134 bool prev = note_iteration_stmt_body_start ();
16135 RECUR (FOR_BODY (t));
16136 note_iteration_stmt_body_end (prev);
16137 }
16138 finish_for_stmt (stmt);
16139 break;
16140
16141 case RANGE_FOR_STMT:
16142 {
16143 tree decl, expr;
16144 stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
16145 decl = RANGE_FOR_DECL (t);
16146 decl = tsubst (decl, args, complain, in_decl);
16147 maybe_push_decl (decl);
16148 expr = RECUR (RANGE_FOR_EXPR (t));
16149 if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl))
16150 {
16151 unsigned int cnt;
16152 tree first;
16153 decl = tsubst_decomp_names (decl, RANGE_FOR_DECL (t), args,
16154 complain, in_decl, &first, &cnt);
16155 stmt = cp_convert_range_for (stmt, decl, expr, first, cnt,
16156 RANGE_FOR_IVDEP (t));
16157 }
16158 else
16159 stmt = cp_convert_range_for (stmt, decl, expr, NULL_TREE, 0,
16160 RANGE_FOR_IVDEP (t));
16161 bool prev = note_iteration_stmt_body_start ();
16162 RECUR (RANGE_FOR_BODY (t));
16163 note_iteration_stmt_body_end (prev);
16164 finish_for_stmt (stmt);
16165 }
16166 break;
16167
16168 case WHILE_STMT:
16169 stmt = begin_while_stmt ();
16170 tmp = RECUR (WHILE_COND (t));
16171 finish_while_stmt_cond (tmp, stmt, false);
16172 {
16173 bool prev = note_iteration_stmt_body_start ();
16174 RECUR (WHILE_BODY (t));
16175 note_iteration_stmt_body_end (prev);
16176 }
16177 finish_while_stmt (stmt);
16178 break;
16179
16180 case DO_STMT:
16181 stmt = begin_do_stmt ();
16182 {
16183 bool prev = note_iteration_stmt_body_start ();
16184 RECUR (DO_BODY (t));
16185 note_iteration_stmt_body_end (prev);
16186 }
16187 finish_do_body (stmt);
16188 tmp = RECUR (DO_COND (t));
16189 finish_do_stmt (tmp, stmt, false);
16190 break;
16191
16192 case IF_STMT:
16193 stmt = begin_if_stmt ();
16194 IF_STMT_CONSTEXPR_P (stmt) = IF_STMT_CONSTEXPR_P (t);
16195 tmp = RECUR (IF_COND (t));
16196 tmp = finish_if_stmt_cond (tmp, stmt);
16197 if (IF_STMT_CONSTEXPR_P (t) && integer_zerop (tmp))
16198 /* Don't instantiate the THEN_CLAUSE. */;
16199 else
16200 {
16201 bool inhibit = integer_zerop (fold_non_dependent_expr (tmp));
16202 if (inhibit)
16203 ++c_inhibit_evaluation_warnings;
16204 RECUR (THEN_CLAUSE (t));
16205 if (inhibit)
16206 --c_inhibit_evaluation_warnings;
16207 }
16208 finish_then_clause (stmt);
16209
16210 if (IF_STMT_CONSTEXPR_P (t) && integer_nonzerop (tmp))
16211 /* Don't instantiate the ELSE_CLAUSE. */;
16212 else if (ELSE_CLAUSE (t))
16213 {
16214 bool inhibit = integer_nonzerop (fold_non_dependent_expr (tmp));
16215 begin_else_clause (stmt);
16216 if (inhibit)
16217 ++c_inhibit_evaluation_warnings;
16218 RECUR (ELSE_CLAUSE (t));
16219 if (inhibit)
16220 --c_inhibit_evaluation_warnings;
16221 finish_else_clause (stmt);
16222 }
16223
16224 finish_if_stmt (stmt);
16225 break;
16226
16227 case BIND_EXPR:
16228 if (BIND_EXPR_BODY_BLOCK (t))
16229 stmt = begin_function_body ();
16230 else
16231 stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
16232 ? BCS_TRY_BLOCK : 0);
16233
16234 RECUR (BIND_EXPR_BODY (t));
16235
16236 if (BIND_EXPR_BODY_BLOCK (t))
16237 finish_function_body (stmt);
16238 else
16239 finish_compound_stmt (stmt);
16240 break;
16241
16242 case BREAK_STMT:
16243 finish_break_stmt ();
16244 break;
16245
16246 case CONTINUE_STMT:
16247 finish_continue_stmt ();
16248 break;
16249
16250 case SWITCH_STMT:
16251 stmt = begin_switch_stmt ();
16252 tmp = RECUR (SWITCH_STMT_COND (t));
16253 finish_switch_cond (tmp, stmt);
16254 RECUR (SWITCH_STMT_BODY (t));
16255 finish_switch_stmt (stmt);
16256 break;
16257
16258 case CASE_LABEL_EXPR:
16259 {
16260 tree low = RECUR (CASE_LOW (t));
16261 tree high = RECUR (CASE_HIGH (t));
16262 tree l = finish_case_label (EXPR_LOCATION (t), low, high);
16263 if (l && TREE_CODE (l) == CASE_LABEL_EXPR)
16264 FALLTHROUGH_LABEL_P (CASE_LABEL (l))
16265 = FALLTHROUGH_LABEL_P (CASE_LABEL (t));
16266 }
16267 break;
16268
16269 case LABEL_EXPR:
16270 {
16271 tree decl = LABEL_EXPR_LABEL (t);
16272 tree label;
16273
16274 label = finish_label_stmt (DECL_NAME (decl));
16275 if (TREE_CODE (label) == LABEL_DECL)
16276 FALLTHROUGH_LABEL_P (label) = FALLTHROUGH_LABEL_P (decl);
16277 if (DECL_ATTRIBUTES (decl) != NULL_TREE)
16278 cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
16279 }
16280 break;
16281
16282 case GOTO_EXPR:
16283 tmp = GOTO_DESTINATION (t);
16284 if (TREE_CODE (tmp) != LABEL_DECL)
16285 /* Computed goto's must be tsubst'd into. On the other hand,
16286 non-computed gotos must not be; the identifier in question
16287 will have no binding. */
16288 tmp = RECUR (tmp);
16289 else
16290 tmp = DECL_NAME (tmp);
16291 finish_goto_stmt (tmp);
16292 break;
16293
16294 case ASM_EXPR:
16295 {
16296 tree string = RECUR (ASM_STRING (t));
16297 tree outputs = tsubst_copy_asm_operands (ASM_OUTPUTS (t), args,
16298 complain, in_decl);
16299 tree inputs = tsubst_copy_asm_operands (ASM_INPUTS (t), args,
16300 complain, in_decl);
16301 tree clobbers = tsubst_copy_asm_operands (ASM_CLOBBERS (t), args,
16302 complain, in_decl);
16303 tree labels = tsubst_copy_asm_operands (ASM_LABELS (t), args,
16304 complain, in_decl);
16305 tmp = finish_asm_stmt (ASM_VOLATILE_P (t), string, outputs, inputs,
16306 clobbers, labels);
16307 tree asm_expr = tmp;
16308 if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
16309 asm_expr = TREE_OPERAND (asm_expr, 0);
16310 ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
16311 }
16312 break;
16313
16314 case TRY_BLOCK:
16315 if (CLEANUP_P (t))
16316 {
16317 stmt = begin_try_block ();
16318 RECUR (TRY_STMTS (t));
16319 finish_cleanup_try_block (stmt);
16320 finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
16321 }
16322 else
16323 {
16324 tree compound_stmt = NULL_TREE;
16325
16326 if (FN_TRY_BLOCK_P (t))
16327 stmt = begin_function_try_block (&compound_stmt);
16328 else
16329 stmt = begin_try_block ();
16330
16331 RECUR (TRY_STMTS (t));
16332
16333 if (FN_TRY_BLOCK_P (t))
16334 finish_function_try_block (stmt);
16335 else
16336 finish_try_block (stmt);
16337
16338 RECUR (TRY_HANDLERS (t));
16339 if (FN_TRY_BLOCK_P (t))
16340 finish_function_handler_sequence (stmt, compound_stmt);
16341 else
16342 finish_handler_sequence (stmt);
16343 }
16344 break;
16345
16346 case HANDLER:
16347 {
16348 tree decl = HANDLER_PARMS (t);
16349
16350 if (decl)
16351 {
16352 decl = tsubst (decl, args, complain, in_decl);
16353 /* Prevent instantiate_decl from trying to instantiate
16354 this variable. We've already done all that needs to be
16355 done. */
16356 if (decl != error_mark_node)
16357 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
16358 }
16359 stmt = begin_handler ();
16360 finish_handler_parms (decl, stmt);
16361 RECUR (HANDLER_BODY (t));
16362 finish_handler (stmt);
16363 }
16364 break;
16365
16366 case TAG_DEFN:
16367 tmp = tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
16368 if (CLASS_TYPE_P (tmp))
16369 {
16370 /* Local classes are not independent templates; they are
16371 instantiated along with their containing function. And this
16372 way we don't have to deal with pushing out of one local class
16373 to instantiate a member of another local class. */
16374 /* Closures are handled by the LAMBDA_EXPR. */
16375 gcc_assert (!LAMBDA_TYPE_P (TREE_TYPE (t)));
16376 complete_type (tmp);
16377 for (tree fld = TYPE_FIELDS (tmp); fld; fld = DECL_CHAIN (fld))
16378 if ((VAR_P (fld)
16379 || (TREE_CODE (fld) == FUNCTION_DECL
16380 && !DECL_ARTIFICIAL (fld)))
16381 && DECL_TEMPLATE_INSTANTIATION (fld))
16382 instantiate_decl (fld, /*defer_ok=*/false,
16383 /*expl_inst_class=*/false);
16384 }
16385 break;
16386
16387 case STATIC_ASSERT:
16388 {
16389 tree condition;
16390
16391 ++c_inhibit_evaluation_warnings;
16392 condition =
16393 tsubst_expr (STATIC_ASSERT_CONDITION (t),
16394 args,
16395 complain, in_decl,
16396 /*integral_constant_expression_p=*/true);
16397 --c_inhibit_evaluation_warnings;
16398
16399 finish_static_assert (condition,
16400 STATIC_ASSERT_MESSAGE (t),
16401 STATIC_ASSERT_SOURCE_LOCATION (t),
16402 /*member_p=*/false);
16403 }
16404 break;
16405
16406 case OACC_KERNELS:
16407 case OACC_PARALLEL:
16408 tmp = tsubst_omp_clauses (OMP_CLAUSES (t), C_ORT_ACC, args, complain,
16409 in_decl);
16410 stmt = begin_omp_parallel ();
16411 RECUR (OMP_BODY (t));
16412 finish_omp_construct (TREE_CODE (t), stmt, tmp);
16413 break;
16414
16415 case OMP_PARALLEL:
16416 r = push_omp_privatization_clauses (OMP_PARALLEL_COMBINED (t));
16417 tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t), C_ORT_OMP, args,
16418 complain, in_decl);
16419 if (OMP_PARALLEL_COMBINED (t))
16420 omp_parallel_combined_clauses = &tmp;
16421 stmt = begin_omp_parallel ();
16422 RECUR (OMP_PARALLEL_BODY (t));
16423 gcc_assert (omp_parallel_combined_clauses == NULL);
16424 OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
16425 = OMP_PARALLEL_COMBINED (t);
16426 pop_omp_privatization_clauses (r);
16427 break;
16428
16429 case OMP_TASK:
16430 r = push_omp_privatization_clauses (false);
16431 tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t), C_ORT_OMP, args,
16432 complain, in_decl);
16433 stmt = begin_omp_task ();
16434 RECUR (OMP_TASK_BODY (t));
16435 finish_omp_task (tmp, stmt);
16436 pop_omp_privatization_clauses (r);
16437 break;
16438
16439 case OMP_FOR:
16440 case OMP_SIMD:
16441 case OMP_DISTRIBUTE:
16442 case OMP_TASKLOOP:
16443 case OACC_LOOP:
16444 {
16445 tree clauses, body, pre_body;
16446 tree declv = NULL_TREE, initv = NULL_TREE, condv = NULL_TREE;
16447 tree orig_declv = NULL_TREE;
16448 tree incrv = NULL_TREE;
16449 enum c_omp_region_type ort = C_ORT_OMP;
16450 int i;
16451
16452 if (TREE_CODE (t) == OACC_LOOP)
16453 ort = C_ORT_ACC;
16454
16455 r = push_omp_privatization_clauses (OMP_FOR_INIT (t) == NULL_TREE);
16456 clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t), ort, args, complain,
16457 in_decl);
16458 if (OMP_FOR_INIT (t) != NULL_TREE)
16459 {
16460 declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
16461 if (OMP_FOR_ORIG_DECLS (t))
16462 orig_declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
16463 initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
16464 condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
16465 incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
16466 }
16467
16468 stmt = begin_omp_structured_block ();
16469
16470 pre_body = push_stmt_list ();
16471 RECUR (OMP_FOR_PRE_BODY (t));
16472 pre_body = pop_stmt_list (pre_body);
16473
16474 if (OMP_FOR_INIT (t) != NULL_TREE)
16475 for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
16476 tsubst_omp_for_iterator (t, i, declv, orig_declv, initv, condv,
16477 incrv, &clauses, args, complain, in_decl,
16478 integral_constant_expression_p);
16479 omp_parallel_combined_clauses = NULL;
16480
16481 body = push_stmt_list ();
16482 RECUR (OMP_FOR_BODY (t));
16483 body = pop_stmt_list (body);
16484
16485 if (OMP_FOR_INIT (t) != NULL_TREE)
16486 t = finish_omp_for (EXPR_LOCATION (t), TREE_CODE (t), declv,
16487 orig_declv, initv, condv, incrv, body, pre_body,
16488 NULL, clauses);
16489 else
16490 {
16491 t = make_node (TREE_CODE (t));
16492 TREE_TYPE (t) = void_type_node;
16493 OMP_FOR_BODY (t) = body;
16494 OMP_FOR_PRE_BODY (t) = pre_body;
16495 OMP_FOR_CLAUSES (t) = clauses;
16496 SET_EXPR_LOCATION (t, EXPR_LOCATION (t));
16497 add_stmt (t);
16498 }
16499
16500 add_stmt (finish_omp_structured_block (stmt));
16501 pop_omp_privatization_clauses (r);
16502 }
16503 break;
16504
16505 case OMP_SECTIONS:
16506 omp_parallel_combined_clauses = NULL;
16507 /* FALLTHRU */
16508 case OMP_SINGLE:
16509 case OMP_TEAMS:
16510 case OMP_CRITICAL:
16511 r = push_omp_privatization_clauses (TREE_CODE (t) == OMP_TEAMS
16512 && OMP_TEAMS_COMBINED (t));
16513 tmp = tsubst_omp_clauses (OMP_CLAUSES (t), C_ORT_OMP, args, complain,
16514 in_decl);
16515 stmt = push_stmt_list ();
16516 RECUR (OMP_BODY (t));
16517 stmt = pop_stmt_list (stmt);
16518
16519 t = copy_node (t);
16520 OMP_BODY (t) = stmt;
16521 OMP_CLAUSES (t) = tmp;
16522 add_stmt (t);
16523 pop_omp_privatization_clauses (r);
16524 break;
16525
16526 case OACC_DATA:
16527 case OMP_TARGET_DATA:
16528 case OMP_TARGET:
16529 tmp = tsubst_omp_clauses (OMP_CLAUSES (t), (TREE_CODE (t) == OACC_DATA)
16530 ? C_ORT_ACC : C_ORT_OMP, args, complain,
16531 in_decl);
16532 keep_next_level (true);
16533 stmt = begin_omp_structured_block ();
16534
16535 RECUR (OMP_BODY (t));
16536 stmt = finish_omp_structured_block (stmt);
16537
16538 t = copy_node (t);
16539 OMP_BODY (t) = stmt;
16540 OMP_CLAUSES (t) = tmp;
16541 if (TREE_CODE (t) == OMP_TARGET && OMP_TARGET_COMBINED (t))
16542 {
16543 tree teams = cp_walk_tree (&stmt, tsubst_find_omp_teams, NULL, NULL);
16544 if (teams)
16545 {
16546 /* For combined target teams, ensure the num_teams and
16547 thread_limit clause expressions are evaluated on the host,
16548 before entering the target construct. */
16549 tree c;
16550 for (c = OMP_TEAMS_CLAUSES (teams);
16551 c; c = OMP_CLAUSE_CHAIN (c))
16552 if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_NUM_TEAMS
16553 || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_THREAD_LIMIT)
16554 && TREE_CODE (OMP_CLAUSE_OPERAND (c, 0)) != INTEGER_CST)
16555 {
16556 tree expr = OMP_CLAUSE_OPERAND (c, 0);
16557 expr = force_target_expr (TREE_TYPE (expr), expr, tf_none);
16558 if (expr == error_mark_node)
16559 continue;
16560 tmp = TARGET_EXPR_SLOT (expr);
16561 add_stmt (expr);
16562 OMP_CLAUSE_OPERAND (c, 0) = expr;
16563 tree tc = build_omp_clause (OMP_CLAUSE_LOCATION (c),
16564 OMP_CLAUSE_FIRSTPRIVATE);
16565 OMP_CLAUSE_DECL (tc) = tmp;
16566 OMP_CLAUSE_CHAIN (tc) = OMP_TARGET_CLAUSES (t);
16567 OMP_TARGET_CLAUSES (t) = tc;
16568 }
16569 }
16570 }
16571 add_stmt (t);
16572 break;
16573
16574 case OACC_DECLARE:
16575 t = copy_node (t);
16576 tmp = tsubst_omp_clauses (OACC_DECLARE_CLAUSES (t), C_ORT_ACC, args,
16577 complain, in_decl);
16578 OACC_DECLARE_CLAUSES (t) = tmp;
16579 add_stmt (t);
16580 break;
16581
16582 case OMP_TARGET_UPDATE:
16583 case OMP_TARGET_ENTER_DATA:
16584 case OMP_TARGET_EXIT_DATA:
16585 tmp = tsubst_omp_clauses (OMP_STANDALONE_CLAUSES (t), C_ORT_OMP, args,
16586 complain, in_decl);
16587 t = copy_node (t);
16588 OMP_STANDALONE_CLAUSES (t) = tmp;
16589 add_stmt (t);
16590 break;
16591
16592 case OACC_ENTER_DATA:
16593 case OACC_EXIT_DATA:
16594 case OACC_UPDATE:
16595 tmp = tsubst_omp_clauses (OMP_STANDALONE_CLAUSES (t), C_ORT_ACC, args,
16596 complain, in_decl);
16597 t = copy_node (t);
16598 OMP_STANDALONE_CLAUSES (t) = tmp;
16599 add_stmt (t);
16600 break;
16601
16602 case OMP_ORDERED:
16603 tmp = tsubst_omp_clauses (OMP_ORDERED_CLAUSES (t), C_ORT_OMP, args,
16604 complain, in_decl);
16605 stmt = push_stmt_list ();
16606 RECUR (OMP_BODY (t));
16607 stmt = pop_stmt_list (stmt);
16608
16609 t = copy_node (t);
16610 OMP_BODY (t) = stmt;
16611 OMP_ORDERED_CLAUSES (t) = tmp;
16612 add_stmt (t);
16613 break;
16614
16615 case OMP_SECTION:
16616 case OMP_MASTER:
16617 case OMP_TASKGROUP:
16618 stmt = push_stmt_list ();
16619 RECUR (OMP_BODY (t));
16620 stmt = pop_stmt_list (stmt);
16621
16622 t = copy_node (t);
16623 OMP_BODY (t) = stmt;
16624 add_stmt (t);
16625 break;
16626
16627 case OMP_ATOMIC:
16628 gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
16629 if (TREE_CODE (TREE_OPERAND (t, 1)) != MODIFY_EXPR)
16630 {
16631 tree op1 = TREE_OPERAND (t, 1);
16632 tree rhs1 = NULL_TREE;
16633 tree lhs, rhs;
16634 if (TREE_CODE (op1) == COMPOUND_EXPR)
16635 {
16636 rhs1 = RECUR (TREE_OPERAND (op1, 0));
16637 op1 = TREE_OPERAND (op1, 1);
16638 }
16639 lhs = RECUR (TREE_OPERAND (op1, 0));
16640 rhs = RECUR (TREE_OPERAND (op1, 1));
16641 finish_omp_atomic (OMP_ATOMIC, TREE_CODE (op1), lhs, rhs,
16642 NULL_TREE, NULL_TREE, rhs1,
16643 OMP_ATOMIC_SEQ_CST (t));
16644 }
16645 else
16646 {
16647 tree op1 = TREE_OPERAND (t, 1);
16648 tree v = NULL_TREE, lhs, rhs = NULL_TREE, lhs1 = NULL_TREE;
16649 tree rhs1 = NULL_TREE;
16650 enum tree_code code = TREE_CODE (TREE_OPERAND (op1, 1));
16651 enum tree_code opcode = NOP_EXPR;
16652 if (code == OMP_ATOMIC_READ)
16653 {
16654 v = RECUR (TREE_OPERAND (op1, 0));
16655 lhs = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
16656 }
16657 else if (code == OMP_ATOMIC_CAPTURE_OLD
16658 || code == OMP_ATOMIC_CAPTURE_NEW)
16659 {
16660 tree op11 = TREE_OPERAND (TREE_OPERAND (op1, 1), 1);
16661 v = RECUR (TREE_OPERAND (op1, 0));
16662 lhs1 = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
16663 if (TREE_CODE (op11) == COMPOUND_EXPR)
16664 {
16665 rhs1 = RECUR (TREE_OPERAND (op11, 0));
16666 op11 = TREE_OPERAND (op11, 1);
16667 }
16668 lhs = RECUR (TREE_OPERAND (op11, 0));
16669 rhs = RECUR (TREE_OPERAND (op11, 1));
16670 opcode = TREE_CODE (op11);
16671 if (opcode == MODIFY_EXPR)
16672 opcode = NOP_EXPR;
16673 }
16674 else
16675 {
16676 code = OMP_ATOMIC;
16677 lhs = RECUR (TREE_OPERAND (op1, 0));
16678 rhs = RECUR (TREE_OPERAND (op1, 1));
16679 }
16680 finish_omp_atomic (code, opcode, lhs, rhs, v, lhs1, rhs1,
16681 OMP_ATOMIC_SEQ_CST (t));
16682 }
16683 break;
16684
16685 case TRANSACTION_EXPR:
16686 {
16687 int flags = 0;
16688 flags |= (TRANSACTION_EXPR_OUTER (t) ? TM_STMT_ATTR_OUTER : 0);
16689 flags |= (TRANSACTION_EXPR_RELAXED (t) ? TM_STMT_ATTR_RELAXED : 0);
16690
16691 if (TRANSACTION_EXPR_IS_STMT (t))
16692 {
16693 tree body = TRANSACTION_EXPR_BODY (t);
16694 tree noex = NULL_TREE;
16695 if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
16696 {
16697 noex = MUST_NOT_THROW_COND (body);
16698 if (noex == NULL_TREE)
16699 noex = boolean_true_node;
16700 body = TREE_OPERAND (body, 0);
16701 }
16702 stmt = begin_transaction_stmt (input_location, NULL, flags);
16703 RECUR (body);
16704 finish_transaction_stmt (stmt, NULL, flags, RECUR (noex));
16705 }
16706 else
16707 {
16708 stmt = build_transaction_expr (EXPR_LOCATION (t),
16709 RECUR (TRANSACTION_EXPR_BODY (t)),
16710 flags, NULL_TREE);
16711 RETURN (stmt);
16712 }
16713 }
16714 break;
16715
16716 case MUST_NOT_THROW_EXPR:
16717 {
16718 tree op0 = RECUR (TREE_OPERAND (t, 0));
16719 tree cond = RECUR (MUST_NOT_THROW_COND (t));
16720 RETURN (build_must_not_throw_expr (op0, cond));
16721 }
16722
16723 case EXPR_PACK_EXPANSION:
16724 error ("invalid use of pack expansion expression");
16725 RETURN (error_mark_node);
16726
16727 case NONTYPE_ARGUMENT_PACK:
16728 error ("use %<...%> to expand argument pack");
16729 RETURN (error_mark_node);
16730
16731 case COMPOUND_EXPR:
16732 tmp = RECUR (TREE_OPERAND (t, 0));
16733 if (tmp == NULL_TREE)
16734 /* If the first operand was a statement, we're done with it. */
16735 RETURN (RECUR (TREE_OPERAND (t, 1)));
16736 RETURN (build_x_compound_expr (EXPR_LOCATION (t), tmp,
16737 RECUR (TREE_OPERAND (t, 1)),
16738 complain));
16739
16740 case ANNOTATE_EXPR:
16741 tmp = RECUR (TREE_OPERAND (t, 0));
16742 RETURN (build3_loc (EXPR_LOCATION (t), ANNOTATE_EXPR,
16743 TREE_TYPE (tmp), tmp,
16744 RECUR (TREE_OPERAND (t, 1)),
16745 RECUR (TREE_OPERAND (t, 2))));
16746
16747 default:
16748 gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
16749
16750 RETURN (tsubst_copy_and_build (t, args, complain, in_decl,
16751 /*function_p=*/false,
16752 integral_constant_expression_p));
16753 }
16754
16755 RETURN (NULL_TREE);
16756 out:
16757 input_location = loc;
16758 return r;
16759 #undef RECUR
16760 #undef RETURN
16761 }
16762
16763 /* Instantiate the special body of the artificial DECL_OMP_DECLARE_REDUCTION
16764 function. For description of the body see comment above
16765 cp_parser_omp_declare_reduction_exprs. */
16766
16767 static void
16768 tsubst_omp_udr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
16769 {
16770 if (t == NULL_TREE || t == error_mark_node)
16771 return;
16772
16773 gcc_assert (TREE_CODE (t) == STATEMENT_LIST);
16774
16775 tree_stmt_iterator tsi;
16776 int i;
16777 tree stmts[7];
16778 memset (stmts, 0, sizeof stmts);
16779 for (i = 0, tsi = tsi_start (t);
16780 i < 7 && !tsi_end_p (tsi);
16781 i++, tsi_next (&tsi))
16782 stmts[i] = tsi_stmt (tsi);
16783 gcc_assert (tsi_end_p (tsi));
16784
16785 if (i >= 3)
16786 {
16787 gcc_assert (TREE_CODE (stmts[0]) == DECL_EXPR
16788 && TREE_CODE (stmts[1]) == DECL_EXPR);
16789 tree omp_out = tsubst (DECL_EXPR_DECL (stmts[0]),
16790 args, complain, in_decl);
16791 tree omp_in = tsubst (DECL_EXPR_DECL (stmts[1]),
16792 args, complain, in_decl);
16793 DECL_CONTEXT (omp_out) = current_function_decl;
16794 DECL_CONTEXT (omp_in) = current_function_decl;
16795 keep_next_level (true);
16796 tree block = begin_omp_structured_block ();
16797 tsubst_expr (stmts[2], args, complain, in_decl, false);
16798 block = finish_omp_structured_block (block);
16799 block = maybe_cleanup_point_expr_void (block);
16800 add_decl_expr (omp_out);
16801 if (TREE_NO_WARNING (DECL_EXPR_DECL (stmts[0])))
16802 TREE_NO_WARNING (omp_out) = 1;
16803 add_decl_expr (omp_in);
16804 finish_expr_stmt (block);
16805 }
16806 if (i >= 6)
16807 {
16808 gcc_assert (TREE_CODE (stmts[3]) == DECL_EXPR
16809 && TREE_CODE (stmts[4]) == DECL_EXPR);
16810 tree omp_priv = tsubst (DECL_EXPR_DECL (stmts[3]),
16811 args, complain, in_decl);
16812 tree omp_orig = tsubst (DECL_EXPR_DECL (stmts[4]),
16813 args, complain, in_decl);
16814 DECL_CONTEXT (omp_priv) = current_function_decl;
16815 DECL_CONTEXT (omp_orig) = current_function_decl;
16816 keep_next_level (true);
16817 tree block = begin_omp_structured_block ();
16818 tsubst_expr (stmts[5], args, complain, in_decl, false);
16819 block = finish_omp_structured_block (block);
16820 block = maybe_cleanup_point_expr_void (block);
16821 cp_walk_tree (&block, cp_remove_omp_priv_cleanup_stmt, omp_priv, NULL);
16822 add_decl_expr (omp_priv);
16823 add_decl_expr (omp_orig);
16824 finish_expr_stmt (block);
16825 if (i == 7)
16826 add_decl_expr (omp_orig);
16827 }
16828 }
16829
16830 /* T is a postfix-expression that is not being used in a function
16831 call. Return the substituted version of T. */
16832
16833 static tree
16834 tsubst_non_call_postfix_expression (tree t, tree args,
16835 tsubst_flags_t complain,
16836 tree in_decl)
16837 {
16838 if (TREE_CODE (t) == SCOPE_REF)
16839 t = tsubst_qualified_id (t, args, complain, in_decl,
16840 /*done=*/false, /*address_p=*/false);
16841 else
16842 t = tsubst_copy_and_build (t, args, complain, in_decl,
16843 /*function_p=*/false,
16844 /*integral_constant_expression_p=*/false);
16845
16846 return t;
16847 }
16848
16849 /* T is a LAMBDA_EXPR. Generate a new LAMBDA_EXPR for the current
16850 instantiation context. Instantiating a pack expansion containing a lambda
16851 might result in multiple lambdas all based on the same lambda in the
16852 template. */
16853
16854 tree
16855 tsubst_lambda_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
16856 {
16857 tree oldfn = lambda_function (t);
16858 in_decl = oldfn;
16859
16860 tree r = build_lambda_expr ();
16861
16862 LAMBDA_EXPR_LOCATION (r)
16863 = LAMBDA_EXPR_LOCATION (t);
16864 LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
16865 = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
16866 LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
16867
16868 if (LAMBDA_EXPR_EXTRA_SCOPE (t) == NULL_TREE)
16869 LAMBDA_EXPR_EXTRA_SCOPE (r) = NULL_TREE;
16870 else
16871 record_lambda_scope (r);
16872
16873 gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (t) == NULL_TREE
16874 && LAMBDA_EXPR_PENDING_PROXIES (t) == NULL);
16875
16876 for (tree cap = LAMBDA_EXPR_CAPTURE_LIST (t); cap;
16877 cap = TREE_CHAIN (cap))
16878 {
16879 tree field = TREE_PURPOSE (cap);
16880 if (PACK_EXPANSION_P (field))
16881 field = PACK_EXPANSION_PATTERN (field);
16882 field = tsubst_decl (field, args, complain);
16883
16884 if (field == error_mark_node)
16885 return error_mark_node;
16886
16887 tree init = TREE_VALUE (cap);
16888 if (PACK_EXPANSION_P (init))
16889 init = tsubst_pack_expansion (init, args, complain, in_decl);
16890 else
16891 init = tsubst_copy_and_build (init, args, complain, in_decl,
16892 /*fn*/false, /*constexpr*/false);
16893
16894 if (TREE_CODE (field) == TREE_VEC)
16895 {
16896 int len = TREE_VEC_LENGTH (field);
16897 gcc_assert (TREE_CODE (init) == TREE_VEC
16898 && TREE_VEC_LENGTH (init) == len);
16899 for (int i = 0; i < len; ++i)
16900 LAMBDA_EXPR_CAPTURE_LIST (r)
16901 = tree_cons (TREE_VEC_ELT (field, i),
16902 TREE_VEC_ELT (init, i),
16903 LAMBDA_EXPR_CAPTURE_LIST (r));
16904 }
16905 else
16906 {
16907 LAMBDA_EXPR_CAPTURE_LIST (r)
16908 = tree_cons (field, init, LAMBDA_EXPR_CAPTURE_LIST (r));
16909
16910 if (id_equal (DECL_NAME (field), "__this"))
16911 LAMBDA_EXPR_THIS_CAPTURE (r) = field;
16912 }
16913 }
16914
16915 tree type = begin_lambda_type (r);
16916
16917 /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set. */
16918 determine_visibility (TYPE_NAME (type));
16919
16920 register_capture_members (LAMBDA_EXPR_CAPTURE_LIST (r));
16921
16922 tree oldtmpl = (generic_lambda_fn_p (oldfn)
16923 ? DECL_TI_TEMPLATE (oldfn)
16924 : NULL_TREE);
16925
16926 tree fntype = static_fn_type (oldfn);
16927 if (oldtmpl)
16928 ++processing_template_decl;
16929 fntype = tsubst (fntype, args, complain, in_decl);
16930 if (oldtmpl)
16931 --processing_template_decl;
16932
16933 if (fntype == error_mark_node)
16934 r = error_mark_node;
16935 else
16936 {
16937 /* Fix the type of 'this'. */
16938 fntype = build_memfn_type (fntype, type,
16939 type_memfn_quals (fntype),
16940 type_memfn_rqual (fntype));
16941 tree fn, tmpl;
16942 if (oldtmpl)
16943 {
16944 tmpl = tsubst_template_decl (oldtmpl, args, complain, fntype);
16945 fn = DECL_TEMPLATE_RESULT (tmpl);
16946 finish_member_declaration (tmpl);
16947 }
16948 else
16949 {
16950 tmpl = NULL_TREE;
16951 fn = tsubst_function_decl (oldfn, args, complain, fntype);
16952 finish_member_declaration (fn);
16953 }
16954
16955 /* Let finish_function set this. */
16956 DECL_DECLARED_CONSTEXPR_P (fn) = false;
16957
16958 bool nested = cfun;
16959 if (nested)
16960 push_function_context ();
16961
16962 local_specialization_stack s (lss_copy);
16963
16964 tree body = start_lambda_function (fn, r);
16965
16966 register_parameter_specializations (oldfn, fn);
16967
16968 tsubst_expr (DECL_SAVED_TREE (oldfn), args, complain, r,
16969 /*constexpr*/false);
16970
16971 finish_lambda_function (body);
16972
16973 if (nested)
16974 pop_function_context ();
16975
16976 /* The capture list was built up in reverse order; fix that now. */
16977 LAMBDA_EXPR_CAPTURE_LIST (r)
16978 = nreverse (LAMBDA_EXPR_CAPTURE_LIST (r));
16979
16980 LAMBDA_EXPR_THIS_CAPTURE (r) = NULL_TREE;
16981
16982 maybe_add_lambda_conv_op (type);
16983 }
16984
16985 finish_struct (type, /*attr*/NULL_TREE);
16986
16987 insert_pending_capture_proxies ();
16988
16989 return r;
16990 }
16991
16992 /* Like tsubst but deals with expressions and performs semantic
16993 analysis. FUNCTION_P is true if T is the "F" in "F (ARGS)". */
16994
16995 tree
16996 tsubst_copy_and_build (tree t,
16997 tree args,
16998 tsubst_flags_t complain,
16999 tree in_decl,
17000 bool function_p,
17001 bool integral_constant_expression_p)
17002 {
17003 #define RETURN(EXP) do { retval = (EXP); goto out; } while(0)
17004 #define RECUR(NODE) \
17005 tsubst_copy_and_build (NODE, args, complain, in_decl, \
17006 /*function_p=*/false, \
17007 integral_constant_expression_p)
17008
17009 tree retval, op1;
17010 location_t loc;
17011
17012 if (t == NULL_TREE || t == error_mark_node)
17013 return t;
17014
17015 loc = input_location;
17016 if (EXPR_HAS_LOCATION (t))
17017 input_location = EXPR_LOCATION (t);
17018
17019 /* N3276 decltype magic only applies to calls at the top level or on the
17020 right side of a comma. */
17021 tsubst_flags_t decltype_flag = (complain & tf_decltype);
17022 complain &= ~tf_decltype;
17023
17024 switch (TREE_CODE (t))
17025 {
17026 case USING_DECL:
17027 t = DECL_NAME (t);
17028 /* Fall through. */
17029 case IDENTIFIER_NODE:
17030 {
17031 tree decl;
17032 cp_id_kind idk;
17033 bool non_integral_constant_expression_p;
17034 const char *error_msg;
17035
17036 if (IDENTIFIER_CONV_OP_P (t))
17037 {
17038 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
17039 t = make_conv_op_name (new_type);
17040 }
17041
17042 /* Look up the name. */
17043 decl = lookup_name (t);
17044
17045 /* By convention, expressions use ERROR_MARK_NODE to indicate
17046 failure, not NULL_TREE. */
17047 if (decl == NULL_TREE)
17048 decl = error_mark_node;
17049
17050 decl = finish_id_expression (t, decl, NULL_TREE,
17051 &idk,
17052 integral_constant_expression_p,
17053 /*allow_non_integral_constant_expression_p=*/(cxx_dialect >= cxx11),
17054 &non_integral_constant_expression_p,
17055 /*template_p=*/false,
17056 /*done=*/true,
17057 /*address_p=*/false,
17058 /*template_arg_p=*/false,
17059 &error_msg,
17060 input_location);
17061 if (error_msg)
17062 error (error_msg);
17063 if (!function_p && identifier_p (decl))
17064 {
17065 if (complain & tf_error)
17066 unqualified_name_lookup_error (decl);
17067 decl = error_mark_node;
17068 }
17069 RETURN (decl);
17070 }
17071
17072 case TEMPLATE_ID_EXPR:
17073 {
17074 tree object;
17075 tree templ = RECUR (TREE_OPERAND (t, 0));
17076 tree targs = TREE_OPERAND (t, 1);
17077
17078 if (targs)
17079 targs = tsubst_template_args (targs, args, complain, in_decl);
17080 if (targs == error_mark_node)
17081 return error_mark_node;
17082
17083 if (TREE_CODE (templ) == SCOPE_REF)
17084 {
17085 tree name = TREE_OPERAND (templ, 1);
17086 tree tid = lookup_template_function (name, targs);
17087 TREE_OPERAND (templ, 1) = tid;
17088 return templ;
17089 }
17090
17091 if (variable_template_p (templ))
17092 RETURN (lookup_and_finish_template_variable (templ, targs, complain));
17093
17094 if (TREE_CODE (templ) == COMPONENT_REF)
17095 {
17096 object = TREE_OPERAND (templ, 0);
17097 templ = TREE_OPERAND (templ, 1);
17098 }
17099 else
17100 object = NULL_TREE;
17101 templ = lookup_template_function (templ, targs);
17102
17103 if (object)
17104 RETURN (build3 (COMPONENT_REF, TREE_TYPE (templ),
17105 object, templ, NULL_TREE));
17106 else
17107 RETURN (baselink_for_fns (templ));
17108 }
17109
17110 case INDIRECT_REF:
17111 {
17112 tree r = RECUR (TREE_OPERAND (t, 0));
17113
17114 if (REFERENCE_REF_P (t))
17115 {
17116 /* A type conversion to reference type will be enclosed in
17117 such an indirect ref, but the substitution of the cast
17118 will have also added such an indirect ref. */
17119 r = convert_from_reference (r);
17120 }
17121 else
17122 r = build_x_indirect_ref (input_location, r, RO_UNARY_STAR,
17123 complain|decltype_flag);
17124
17125 if (TREE_CODE (r) == INDIRECT_REF)
17126 REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
17127
17128 RETURN (r);
17129 }
17130
17131 case NOP_EXPR:
17132 {
17133 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
17134 tree op0 = RECUR (TREE_OPERAND (t, 0));
17135 RETURN (build_nop (type, op0));
17136 }
17137
17138 case IMPLICIT_CONV_EXPR:
17139 {
17140 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
17141 tree expr = RECUR (TREE_OPERAND (t, 0));
17142 if (dependent_type_p (type) || type_dependent_expression_p (expr))
17143 {
17144 retval = copy_node (t);
17145 TREE_TYPE (retval) = type;
17146 TREE_OPERAND (retval, 0) = expr;
17147 RETURN (retval);
17148 }
17149 if (IMPLICIT_CONV_EXPR_NONTYPE_ARG (t))
17150 /* We'll pass this to convert_nontype_argument again, we don't need
17151 to actually perform any conversion here. */
17152 RETURN (expr);
17153 int flags = LOOKUP_IMPLICIT;
17154 if (IMPLICIT_CONV_EXPR_DIRECT_INIT (t))
17155 flags = LOOKUP_NORMAL;
17156 RETURN (perform_implicit_conversion_flags (type, expr, complain,
17157 flags));
17158 }
17159
17160 case CONVERT_EXPR:
17161 {
17162 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
17163 tree op0 = RECUR (TREE_OPERAND (t, 0));
17164 RETURN (build1 (CONVERT_EXPR, type, op0));
17165 }
17166
17167 case CAST_EXPR:
17168 case REINTERPRET_CAST_EXPR:
17169 case CONST_CAST_EXPR:
17170 case DYNAMIC_CAST_EXPR:
17171 case STATIC_CAST_EXPR:
17172 {
17173 tree type;
17174 tree op, r = NULL_TREE;
17175
17176 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
17177 if (integral_constant_expression_p
17178 && !cast_valid_in_integral_constant_expression_p (type))
17179 {
17180 if (complain & tf_error)
17181 error ("a cast to a type other than an integral or "
17182 "enumeration type cannot appear in a constant-expression");
17183 RETURN (error_mark_node);
17184 }
17185
17186 op = RECUR (TREE_OPERAND (t, 0));
17187
17188 warning_sentinel s(warn_useless_cast);
17189 warning_sentinel s2(warn_ignored_qualifiers);
17190 switch (TREE_CODE (t))
17191 {
17192 case CAST_EXPR:
17193 r = build_functional_cast (type, op, complain);
17194 break;
17195 case REINTERPRET_CAST_EXPR:
17196 r = build_reinterpret_cast (type, op, complain);
17197 break;
17198 case CONST_CAST_EXPR:
17199 r = build_const_cast (type, op, complain);
17200 break;
17201 case DYNAMIC_CAST_EXPR:
17202 r = build_dynamic_cast (type, op, complain);
17203 break;
17204 case STATIC_CAST_EXPR:
17205 r = build_static_cast (type, op, complain);
17206 break;
17207 default:
17208 gcc_unreachable ();
17209 }
17210
17211 RETURN (r);
17212 }
17213
17214 case POSTDECREMENT_EXPR:
17215 case POSTINCREMENT_EXPR:
17216 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
17217 args, complain, in_decl);
17218 RETURN (build_x_unary_op (input_location, TREE_CODE (t), op1,
17219 complain|decltype_flag));
17220
17221 case PREDECREMENT_EXPR:
17222 case PREINCREMENT_EXPR:
17223 case NEGATE_EXPR:
17224 case BIT_NOT_EXPR:
17225 case ABS_EXPR:
17226 case TRUTH_NOT_EXPR:
17227 case UNARY_PLUS_EXPR: /* Unary + */
17228 case REALPART_EXPR:
17229 case IMAGPART_EXPR:
17230 RETURN (build_x_unary_op (input_location, TREE_CODE (t),
17231 RECUR (TREE_OPERAND (t, 0)),
17232 complain|decltype_flag));
17233
17234 case FIX_TRUNC_EXPR:
17235 RETURN (cp_build_unary_op (FIX_TRUNC_EXPR, RECUR (TREE_OPERAND (t, 0)),
17236 false, complain));
17237
17238 case ADDR_EXPR:
17239 op1 = TREE_OPERAND (t, 0);
17240 if (TREE_CODE (op1) == LABEL_DECL)
17241 RETURN (finish_label_address_expr (DECL_NAME (op1),
17242 EXPR_LOCATION (op1)));
17243 if (TREE_CODE (op1) == SCOPE_REF)
17244 op1 = tsubst_qualified_id (op1, args, complain, in_decl,
17245 /*done=*/true, /*address_p=*/true);
17246 else
17247 op1 = tsubst_non_call_postfix_expression (op1, args, complain,
17248 in_decl);
17249 RETURN (build_x_unary_op (input_location, ADDR_EXPR, op1,
17250 complain|decltype_flag));
17251
17252 case PLUS_EXPR:
17253 case MINUS_EXPR:
17254 case MULT_EXPR:
17255 case TRUNC_DIV_EXPR:
17256 case CEIL_DIV_EXPR:
17257 case FLOOR_DIV_EXPR:
17258 case ROUND_DIV_EXPR:
17259 case EXACT_DIV_EXPR:
17260 case BIT_AND_EXPR:
17261 case BIT_IOR_EXPR:
17262 case BIT_XOR_EXPR:
17263 case TRUNC_MOD_EXPR:
17264 case FLOOR_MOD_EXPR:
17265 case TRUTH_ANDIF_EXPR:
17266 case TRUTH_ORIF_EXPR:
17267 case TRUTH_AND_EXPR:
17268 case TRUTH_OR_EXPR:
17269 case RSHIFT_EXPR:
17270 case LSHIFT_EXPR:
17271 case RROTATE_EXPR:
17272 case LROTATE_EXPR:
17273 case EQ_EXPR:
17274 case NE_EXPR:
17275 case MAX_EXPR:
17276 case MIN_EXPR:
17277 case LE_EXPR:
17278 case GE_EXPR:
17279 case LT_EXPR:
17280 case GT_EXPR:
17281 case MEMBER_REF:
17282 case DOTSTAR_EXPR:
17283 {
17284 warning_sentinel s1(warn_type_limits);
17285 warning_sentinel s2(warn_div_by_zero);
17286 warning_sentinel s3(warn_logical_op);
17287 warning_sentinel s4(warn_tautological_compare);
17288 tree op0 = RECUR (TREE_OPERAND (t, 0));
17289 tree op1 = RECUR (TREE_OPERAND (t, 1));
17290 tree r = build_x_binary_op
17291 (input_location, TREE_CODE (t),
17292 op0,
17293 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
17294 ? ERROR_MARK
17295 : TREE_CODE (TREE_OPERAND (t, 0))),
17296 op1,
17297 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
17298 ? ERROR_MARK
17299 : TREE_CODE (TREE_OPERAND (t, 1))),
17300 /*overload=*/NULL,
17301 complain|decltype_flag);
17302 if (EXPR_P (r) && TREE_NO_WARNING (t))
17303 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
17304
17305 RETURN (r);
17306 }
17307
17308 case POINTER_PLUS_EXPR:
17309 {
17310 tree op0 = RECUR (TREE_OPERAND (t, 0));
17311 tree op1 = RECUR (TREE_OPERAND (t, 1));
17312 return fold_build_pointer_plus (op0, op1);
17313 }
17314
17315 case SCOPE_REF:
17316 RETURN (tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
17317 /*address_p=*/false));
17318 case ARRAY_REF:
17319 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
17320 args, complain, in_decl);
17321 RETURN (build_x_array_ref (EXPR_LOCATION (t), op1,
17322 RECUR (TREE_OPERAND (t, 1)),
17323 complain|decltype_flag));
17324
17325 case SIZEOF_EXPR:
17326 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0))
17327 || ARGUMENT_PACK_P (TREE_OPERAND (t, 0)))
17328 RETURN (tsubst_copy (t, args, complain, in_decl));
17329 /* Fall through */
17330
17331 case ALIGNOF_EXPR:
17332 {
17333 tree r;
17334
17335 op1 = TREE_OPERAND (t, 0);
17336 if (TREE_CODE (t) == SIZEOF_EXPR && SIZEOF_EXPR_TYPE_P (t))
17337 op1 = TREE_TYPE (op1);
17338 if (!args)
17339 {
17340 /* When there are no ARGS, we are trying to evaluate a
17341 non-dependent expression from the parser. Trying to do
17342 the substitutions may not work. */
17343 if (!TYPE_P (op1))
17344 op1 = TREE_TYPE (op1);
17345 }
17346 else
17347 {
17348 ++cp_unevaluated_operand;
17349 ++c_inhibit_evaluation_warnings;
17350 if (TYPE_P (op1))
17351 op1 = tsubst (op1, args, complain, in_decl);
17352 else
17353 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
17354 /*function_p=*/false,
17355 /*integral_constant_expression_p=*/
17356 false);
17357 --cp_unevaluated_operand;
17358 --c_inhibit_evaluation_warnings;
17359 }
17360 if (TYPE_P (op1))
17361 r = cxx_sizeof_or_alignof_type (op1, TREE_CODE (t),
17362 complain & tf_error);
17363 else
17364 r = cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t),
17365 complain & tf_error);
17366 if (TREE_CODE (t) == SIZEOF_EXPR && r != error_mark_node)
17367 {
17368 if (TREE_CODE (r) != SIZEOF_EXPR || TYPE_P (op1))
17369 {
17370 if (!processing_template_decl && TYPE_P (op1))
17371 {
17372 r = build_min (SIZEOF_EXPR, size_type_node,
17373 build1 (NOP_EXPR, op1, error_mark_node));
17374 SIZEOF_EXPR_TYPE_P (r) = 1;
17375 }
17376 else
17377 r = build_min (SIZEOF_EXPR, size_type_node, op1);
17378 TREE_SIDE_EFFECTS (r) = 0;
17379 TREE_READONLY (r) = 1;
17380 }
17381 SET_EXPR_LOCATION (r, EXPR_LOCATION (t));
17382 }
17383 RETURN (r);
17384 }
17385
17386 case AT_ENCODE_EXPR:
17387 {
17388 op1 = TREE_OPERAND (t, 0);
17389 ++cp_unevaluated_operand;
17390 ++c_inhibit_evaluation_warnings;
17391 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
17392 /*function_p=*/false,
17393 /*integral_constant_expression_p=*/false);
17394 --cp_unevaluated_operand;
17395 --c_inhibit_evaluation_warnings;
17396 RETURN (objc_build_encode_expr (op1));
17397 }
17398
17399 case NOEXCEPT_EXPR:
17400 op1 = TREE_OPERAND (t, 0);
17401 ++cp_unevaluated_operand;
17402 ++c_inhibit_evaluation_warnings;
17403 ++cp_noexcept_operand;
17404 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
17405 /*function_p=*/false,
17406 /*integral_constant_expression_p=*/false);
17407 --cp_unevaluated_operand;
17408 --c_inhibit_evaluation_warnings;
17409 --cp_noexcept_operand;
17410 RETURN (finish_noexcept_expr (op1, complain));
17411
17412 case MODOP_EXPR:
17413 {
17414 warning_sentinel s(warn_div_by_zero);
17415 tree lhs = RECUR (TREE_OPERAND (t, 0));
17416 tree rhs = RECUR (TREE_OPERAND (t, 2));
17417 tree r = build_x_modify_expr
17418 (EXPR_LOCATION (t), lhs, TREE_CODE (TREE_OPERAND (t, 1)), rhs,
17419 complain|decltype_flag);
17420 /* TREE_NO_WARNING must be set if either the expression was
17421 parenthesized or it uses an operator such as >>= rather
17422 than plain assignment. In the former case, it was already
17423 set and must be copied. In the latter case,
17424 build_x_modify_expr sets it and it must not be reset
17425 here. */
17426 if (TREE_NO_WARNING (t))
17427 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
17428
17429 RETURN (r);
17430 }
17431
17432 case ARROW_EXPR:
17433 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
17434 args, complain, in_decl);
17435 /* Remember that there was a reference to this entity. */
17436 if (DECL_P (op1)
17437 && !mark_used (op1, complain) && !(complain & tf_error))
17438 RETURN (error_mark_node);
17439 RETURN (build_x_arrow (input_location, op1, complain));
17440
17441 case NEW_EXPR:
17442 {
17443 tree placement = RECUR (TREE_OPERAND (t, 0));
17444 tree init = RECUR (TREE_OPERAND (t, 3));
17445 vec<tree, va_gc> *placement_vec;
17446 vec<tree, va_gc> *init_vec;
17447 tree ret;
17448
17449 if (placement == NULL_TREE)
17450 placement_vec = NULL;
17451 else
17452 {
17453 placement_vec = make_tree_vector ();
17454 for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
17455 vec_safe_push (placement_vec, TREE_VALUE (placement));
17456 }
17457
17458 /* If there was an initializer in the original tree, but it
17459 instantiated to an empty list, then we should pass a
17460 non-NULL empty vector to tell build_new that it was an
17461 empty initializer() rather than no initializer. This can
17462 only happen when the initializer is a pack expansion whose
17463 parameter packs are of length zero. */
17464 if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
17465 init_vec = NULL;
17466 else
17467 {
17468 init_vec = make_tree_vector ();
17469 if (init == void_node)
17470 gcc_assert (init_vec != NULL);
17471 else
17472 {
17473 for (; init != NULL_TREE; init = TREE_CHAIN (init))
17474 vec_safe_push (init_vec, TREE_VALUE (init));
17475 }
17476 }
17477
17478 tree op1 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
17479 tree op2 = RECUR (TREE_OPERAND (t, 2));
17480 ret = build_new (&placement_vec, op1, op2, &init_vec,
17481 NEW_EXPR_USE_GLOBAL (t),
17482 complain);
17483
17484 if (placement_vec != NULL)
17485 release_tree_vector (placement_vec);
17486 if (init_vec != NULL)
17487 release_tree_vector (init_vec);
17488
17489 RETURN (ret);
17490 }
17491
17492 case DELETE_EXPR:
17493 {
17494 tree op0 = RECUR (TREE_OPERAND (t, 0));
17495 tree op1 = RECUR (TREE_OPERAND (t, 1));
17496 RETURN (delete_sanity (op0, op1,
17497 DELETE_EXPR_USE_VEC (t),
17498 DELETE_EXPR_USE_GLOBAL (t),
17499 complain));
17500 }
17501
17502 case COMPOUND_EXPR:
17503 {
17504 tree op0 = tsubst_copy_and_build (TREE_OPERAND (t, 0), args,
17505 complain & ~tf_decltype, in_decl,
17506 /*function_p=*/false,
17507 integral_constant_expression_p);
17508 RETURN (build_x_compound_expr (EXPR_LOCATION (t),
17509 op0,
17510 RECUR (TREE_OPERAND (t, 1)),
17511 complain|decltype_flag));
17512 }
17513
17514 case CALL_EXPR:
17515 {
17516 tree function;
17517 vec<tree, va_gc> *call_args;
17518 unsigned int nargs, i;
17519 bool qualified_p;
17520 bool koenig_p;
17521 tree ret;
17522
17523 function = CALL_EXPR_FN (t);
17524 /* Internal function with no arguments. */
17525 if (function == NULL_TREE && call_expr_nargs (t) == 0)
17526 RETURN (t);
17527
17528 /* When we parsed the expression, we determined whether or
17529 not Koenig lookup should be performed. */
17530 koenig_p = KOENIG_LOOKUP_P (t);
17531 if (function == NULL_TREE)
17532 {
17533 koenig_p = false;
17534 qualified_p = false;
17535 }
17536 else if (TREE_CODE (function) == SCOPE_REF)
17537 {
17538 qualified_p = true;
17539 function = tsubst_qualified_id (function, args, complain, in_decl,
17540 /*done=*/false,
17541 /*address_p=*/false);
17542 }
17543 else if (koenig_p && identifier_p (function))
17544 {
17545 /* Do nothing; calling tsubst_copy_and_build on an identifier
17546 would incorrectly perform unqualified lookup again.
17547
17548 Note that we can also have an IDENTIFIER_NODE if the earlier
17549 unqualified lookup found a member function; in that case
17550 koenig_p will be false and we do want to do the lookup
17551 again to find the instantiated member function.
17552
17553 FIXME but doing that causes c++/15272, so we need to stop
17554 using IDENTIFIER_NODE in that situation. */
17555 qualified_p = false;
17556 }
17557 else
17558 {
17559 if (TREE_CODE (function) == COMPONENT_REF)
17560 {
17561 tree op = TREE_OPERAND (function, 1);
17562
17563 qualified_p = (TREE_CODE (op) == SCOPE_REF
17564 || (BASELINK_P (op)
17565 && BASELINK_QUALIFIED_P (op)));
17566 }
17567 else
17568 qualified_p = false;
17569
17570 if (TREE_CODE (function) == ADDR_EXPR
17571 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
17572 /* Avoid error about taking the address of a constructor. */
17573 function = TREE_OPERAND (function, 0);
17574
17575 function = tsubst_copy_and_build (function, args, complain,
17576 in_decl,
17577 !qualified_p,
17578 integral_constant_expression_p);
17579
17580 if (BASELINK_P (function))
17581 qualified_p = true;
17582 }
17583
17584 nargs = call_expr_nargs (t);
17585 call_args = make_tree_vector ();
17586 for (i = 0; i < nargs; ++i)
17587 {
17588 tree arg = CALL_EXPR_ARG (t, i);
17589
17590 if (!PACK_EXPANSION_P (arg))
17591 vec_safe_push (call_args, RECUR (CALL_EXPR_ARG (t, i)));
17592 else
17593 {
17594 /* Expand the pack expansion and push each entry onto
17595 CALL_ARGS. */
17596 arg = tsubst_pack_expansion (arg, args, complain, in_decl);
17597 if (TREE_CODE (arg) == TREE_VEC)
17598 {
17599 unsigned int len, j;
17600
17601 len = TREE_VEC_LENGTH (arg);
17602 for (j = 0; j < len; ++j)
17603 {
17604 tree value = TREE_VEC_ELT (arg, j);
17605 if (value != NULL_TREE)
17606 value = convert_from_reference (value);
17607 vec_safe_push (call_args, value);
17608 }
17609 }
17610 else
17611 {
17612 /* A partial substitution. Add one entry. */
17613 vec_safe_push (call_args, arg);
17614 }
17615 }
17616 }
17617
17618 /* We do not perform argument-dependent lookup if normal
17619 lookup finds a non-function, in accordance with the
17620 expected resolution of DR 218. */
17621 if (koenig_p
17622 && ((is_overloaded_fn (function)
17623 /* If lookup found a member function, the Koenig lookup is
17624 not appropriate, even if an unqualified-name was used
17625 to denote the function. */
17626 && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
17627 || identifier_p (function))
17628 /* Only do this when substitution turns a dependent call
17629 into a non-dependent call. */
17630 && type_dependent_expression_p_push (t)
17631 && !any_type_dependent_arguments_p (call_args))
17632 function = perform_koenig_lookup (function, call_args, tf_none);
17633
17634 if (function != NULL_TREE
17635 && identifier_p (function)
17636 && !any_type_dependent_arguments_p (call_args))
17637 {
17638 if (koenig_p && (complain & tf_warning_or_error))
17639 {
17640 /* For backwards compatibility and good diagnostics, try
17641 the unqualified lookup again if we aren't in SFINAE
17642 context. */
17643 tree unq = (tsubst_copy_and_build
17644 (function, args, complain, in_decl, true,
17645 integral_constant_expression_p));
17646 if (unq == error_mark_node)
17647 {
17648 release_tree_vector (call_args);
17649 RETURN (error_mark_node);
17650 }
17651
17652 if (unq != function)
17653 {
17654 /* In a lambda fn, we have to be careful to not
17655 introduce new this captures. Legacy code can't
17656 be using lambdas anyway, so it's ok to be
17657 stricter. */
17658 bool in_lambda = (current_class_type
17659 && LAMBDA_TYPE_P (current_class_type));
17660 char const *const msg
17661 = G_("%qD was not declared in this scope, "
17662 "and no declarations were found by "
17663 "argument-dependent lookup at the point "
17664 "of instantiation");
17665
17666 bool diag = true;
17667 if (in_lambda)
17668 error_at (EXPR_LOC_OR_LOC (t, input_location),
17669 msg, function);
17670 else
17671 diag = permerror (EXPR_LOC_OR_LOC (t, input_location),
17672 msg, function);
17673 if (diag)
17674 {
17675 tree fn = unq;
17676
17677 if (INDIRECT_REF_P (fn))
17678 fn = TREE_OPERAND (fn, 0);
17679 if (is_overloaded_fn (fn))
17680 fn = get_first_fn (fn);
17681
17682 if (!DECL_P (fn))
17683 /* Can't say anything more. */;
17684 else if (DECL_CLASS_SCOPE_P (fn))
17685 {
17686 location_t loc = EXPR_LOC_OR_LOC (t,
17687 input_location);
17688 inform (loc,
17689 "declarations in dependent base %qT are "
17690 "not found by unqualified lookup",
17691 DECL_CLASS_CONTEXT (fn));
17692 if (current_class_ptr)
17693 inform (loc,
17694 "use %<this->%D%> instead", function);
17695 else
17696 inform (loc,
17697 "use %<%T::%D%> instead",
17698 current_class_name, function);
17699 }
17700 else
17701 inform (DECL_SOURCE_LOCATION (fn),
17702 "%qD declared here, later in the "
17703 "translation unit", fn);
17704 if (in_lambda)
17705 {
17706 release_tree_vector (call_args);
17707 RETURN (error_mark_node);
17708 }
17709 }
17710
17711 function = unq;
17712 }
17713 }
17714 if (identifier_p (function))
17715 {
17716 if (complain & tf_error)
17717 unqualified_name_lookup_error (function);
17718 release_tree_vector (call_args);
17719 RETURN (error_mark_node);
17720 }
17721 }
17722
17723 /* Remember that there was a reference to this entity. */
17724 if (function != NULL_TREE
17725 && DECL_P (function)
17726 && !mark_used (function, complain) && !(complain & tf_error))
17727 {
17728 release_tree_vector (call_args);
17729 RETURN (error_mark_node);
17730 }
17731
17732 /* Put back tf_decltype for the actual call. */
17733 complain |= decltype_flag;
17734
17735 if (function == NULL_TREE)
17736 switch (CALL_EXPR_IFN (t))
17737 {
17738 case IFN_LAUNDER:
17739 gcc_assert (nargs == 1);
17740 if (vec_safe_length (call_args) != 1)
17741 {
17742 error_at (EXPR_LOC_OR_LOC (t, input_location),
17743 "wrong number of arguments to "
17744 "%<__builtin_launder%>");
17745 ret = error_mark_node;
17746 }
17747 else
17748 ret = finish_builtin_launder (EXPR_LOC_OR_LOC (t,
17749 input_location),
17750 (*call_args)[0], complain);
17751 break;
17752
17753 default:
17754 /* Unsupported internal function with arguments. */
17755 gcc_unreachable ();
17756 }
17757 else if (TREE_CODE (function) == OFFSET_REF)
17758 ret = build_offset_ref_call_from_tree (function, &call_args,
17759 complain);
17760 else if (TREE_CODE (function) == COMPONENT_REF)
17761 {
17762 tree instance = TREE_OPERAND (function, 0);
17763 tree fn = TREE_OPERAND (function, 1);
17764
17765 if (processing_template_decl
17766 && (type_dependent_expression_p (instance)
17767 || (!BASELINK_P (fn)
17768 && TREE_CODE (fn) != FIELD_DECL)
17769 || type_dependent_expression_p (fn)
17770 || any_type_dependent_arguments_p (call_args)))
17771 ret = build_min_nt_call_vec (function, call_args);
17772 else if (!BASELINK_P (fn))
17773 ret = finish_call_expr (function, &call_args,
17774 /*disallow_virtual=*/false,
17775 /*koenig_p=*/false,
17776 complain);
17777 else
17778 ret = (build_new_method_call
17779 (instance, fn,
17780 &call_args, NULL_TREE,
17781 qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
17782 /*fn_p=*/NULL,
17783 complain));
17784 }
17785 else
17786 ret = finish_call_expr (function, &call_args,
17787 /*disallow_virtual=*/qualified_p,
17788 koenig_p,
17789 complain);
17790
17791 release_tree_vector (call_args);
17792
17793 if (ret != error_mark_node)
17794 {
17795 bool op = CALL_EXPR_OPERATOR_SYNTAX (t);
17796 bool ord = CALL_EXPR_ORDERED_ARGS (t);
17797 bool rev = CALL_EXPR_REVERSE_ARGS (t);
17798 bool thk = CALL_FROM_THUNK_P (t);
17799 if (op || ord || rev || thk)
17800 {
17801 function = extract_call_expr (ret);
17802 CALL_EXPR_OPERATOR_SYNTAX (function) = op;
17803 CALL_EXPR_ORDERED_ARGS (function) = ord;
17804 CALL_EXPR_REVERSE_ARGS (function) = rev;
17805 if (thk)
17806 {
17807 CALL_FROM_THUNK_P (function) = true;
17808 /* The thunk location is not interesting. */
17809 SET_EXPR_LOCATION (function, UNKNOWN_LOCATION);
17810 }
17811 }
17812 }
17813
17814 RETURN (ret);
17815 }
17816
17817 case COND_EXPR:
17818 {
17819 tree cond = RECUR (TREE_OPERAND (t, 0));
17820 tree folded_cond = fold_non_dependent_expr (cond);
17821 tree exp1, exp2;
17822
17823 if (TREE_CODE (folded_cond) == INTEGER_CST)
17824 {
17825 if (integer_zerop (folded_cond))
17826 {
17827 ++c_inhibit_evaluation_warnings;
17828 exp1 = RECUR (TREE_OPERAND (t, 1));
17829 --c_inhibit_evaluation_warnings;
17830 exp2 = RECUR (TREE_OPERAND (t, 2));
17831 }
17832 else
17833 {
17834 exp1 = RECUR (TREE_OPERAND (t, 1));
17835 ++c_inhibit_evaluation_warnings;
17836 exp2 = RECUR (TREE_OPERAND (t, 2));
17837 --c_inhibit_evaluation_warnings;
17838 }
17839 cond = folded_cond;
17840 }
17841 else
17842 {
17843 exp1 = RECUR (TREE_OPERAND (t, 1));
17844 exp2 = RECUR (TREE_OPERAND (t, 2));
17845 }
17846
17847 RETURN (build_x_conditional_expr (EXPR_LOCATION (t),
17848 cond, exp1, exp2, complain));
17849 }
17850
17851 case PSEUDO_DTOR_EXPR:
17852 {
17853 tree op0 = RECUR (TREE_OPERAND (t, 0));
17854 tree op1 = RECUR (TREE_OPERAND (t, 1));
17855 tree op2 = tsubst (TREE_OPERAND (t, 2), args, complain, in_decl);
17856 RETURN (finish_pseudo_destructor_expr (op0, op1, op2,
17857 input_location));
17858 }
17859
17860 case TREE_LIST:
17861 {
17862 tree purpose, value, chain;
17863
17864 if (t == void_list_node)
17865 RETURN (t);
17866
17867 if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
17868 || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
17869 {
17870 /* We have pack expansions, so expand those and
17871 create a new list out of it. */
17872 tree purposevec = NULL_TREE;
17873 tree valuevec = NULL_TREE;
17874 tree chain;
17875 int i, len = -1;
17876
17877 /* Expand the argument expressions. */
17878 if (TREE_PURPOSE (t))
17879 purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
17880 complain, in_decl);
17881 if (TREE_VALUE (t))
17882 valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
17883 complain, in_decl);
17884
17885 /* Build the rest of the list. */
17886 chain = TREE_CHAIN (t);
17887 if (chain && chain != void_type_node)
17888 chain = RECUR (chain);
17889
17890 /* Determine the number of arguments. */
17891 if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
17892 {
17893 len = TREE_VEC_LENGTH (purposevec);
17894 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
17895 }
17896 else if (TREE_CODE (valuevec) == TREE_VEC)
17897 len = TREE_VEC_LENGTH (valuevec);
17898 else
17899 {
17900 /* Since we only performed a partial substitution into
17901 the argument pack, we only RETURN (a single list
17902 node. */
17903 if (purposevec == TREE_PURPOSE (t)
17904 && valuevec == TREE_VALUE (t)
17905 && chain == TREE_CHAIN (t))
17906 RETURN (t);
17907
17908 RETURN (tree_cons (purposevec, valuevec, chain));
17909 }
17910
17911 /* Convert the argument vectors into a TREE_LIST */
17912 i = len;
17913 while (i > 0)
17914 {
17915 /* Grab the Ith values. */
17916 i--;
17917 purpose = purposevec ? TREE_VEC_ELT (purposevec, i)
17918 : NULL_TREE;
17919 value
17920 = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i))
17921 : NULL_TREE;
17922
17923 /* Build the list (backwards). */
17924 chain = tree_cons (purpose, value, chain);
17925 }
17926
17927 RETURN (chain);
17928 }
17929
17930 purpose = TREE_PURPOSE (t);
17931 if (purpose)
17932 purpose = RECUR (purpose);
17933 value = TREE_VALUE (t);
17934 if (value)
17935 value = RECUR (value);
17936 chain = TREE_CHAIN (t);
17937 if (chain && chain != void_type_node)
17938 chain = RECUR (chain);
17939 if (purpose == TREE_PURPOSE (t)
17940 && value == TREE_VALUE (t)
17941 && chain == TREE_CHAIN (t))
17942 RETURN (t);
17943 RETURN (tree_cons (purpose, value, chain));
17944 }
17945
17946 case COMPONENT_REF:
17947 {
17948 tree object;
17949 tree object_type;
17950 tree member;
17951 tree r;
17952
17953 object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
17954 args, complain, in_decl);
17955 /* Remember that there was a reference to this entity. */
17956 if (DECL_P (object)
17957 && !mark_used (object, complain) && !(complain & tf_error))
17958 RETURN (error_mark_node);
17959 object_type = TREE_TYPE (object);
17960
17961 member = TREE_OPERAND (t, 1);
17962 if (BASELINK_P (member))
17963 member = tsubst_baselink (member,
17964 non_reference (TREE_TYPE (object)),
17965 args, complain, in_decl);
17966 else
17967 member = tsubst_copy (member, args, complain, in_decl);
17968 if (member == error_mark_node)
17969 RETURN (error_mark_node);
17970
17971 if (TREE_CODE (member) == FIELD_DECL)
17972 {
17973 r = finish_non_static_data_member (member, object, NULL_TREE);
17974 if (TREE_CODE (r) == COMPONENT_REF)
17975 REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
17976 RETURN (r);
17977 }
17978 else if (type_dependent_expression_p (object))
17979 /* We can't do much here. */;
17980 else if (!CLASS_TYPE_P (object_type))
17981 {
17982 if (scalarish_type_p (object_type))
17983 {
17984 tree s = NULL_TREE;
17985 tree dtor = member;
17986
17987 if (TREE_CODE (dtor) == SCOPE_REF)
17988 {
17989 s = TREE_OPERAND (dtor, 0);
17990 dtor = TREE_OPERAND (dtor, 1);
17991 }
17992 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
17993 {
17994 dtor = TREE_OPERAND (dtor, 0);
17995 if (TYPE_P (dtor))
17996 RETURN (finish_pseudo_destructor_expr
17997 (object, s, dtor, input_location));
17998 }
17999 }
18000 }
18001 else if (TREE_CODE (member) == SCOPE_REF
18002 && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
18003 {
18004 /* Lookup the template functions now that we know what the
18005 scope is. */
18006 tree scope = TREE_OPERAND (member, 0);
18007 tree tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
18008 tree args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
18009 member = lookup_qualified_name (scope, tmpl,
18010 /*is_type_p=*/false,
18011 /*complain=*/false);
18012 if (BASELINK_P (member))
18013 {
18014 BASELINK_FUNCTIONS (member)
18015 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
18016 args);
18017 member = (adjust_result_of_qualified_name_lookup
18018 (member, BINFO_TYPE (BASELINK_BINFO (member)),
18019 object_type));
18020 }
18021 else
18022 {
18023 qualified_name_lookup_error (scope, tmpl, member,
18024 input_location);
18025 RETURN (error_mark_node);
18026 }
18027 }
18028 else if (TREE_CODE (member) == SCOPE_REF
18029 && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
18030 && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
18031 {
18032 if (complain & tf_error)
18033 {
18034 if (TYPE_P (TREE_OPERAND (member, 0)))
18035 error ("%qT is not a class or namespace",
18036 TREE_OPERAND (member, 0));
18037 else
18038 error ("%qD is not a class or namespace",
18039 TREE_OPERAND (member, 0));
18040 }
18041 RETURN (error_mark_node);
18042 }
18043
18044 r = finish_class_member_access_expr (object, member,
18045 /*template_p=*/false,
18046 complain);
18047 if (TREE_CODE (r) == COMPONENT_REF)
18048 REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
18049 RETURN (r);
18050 }
18051
18052 case THROW_EXPR:
18053 RETURN (build_throw
18054 (RECUR (TREE_OPERAND (t, 0))));
18055
18056 case CONSTRUCTOR:
18057 {
18058 vec<constructor_elt, va_gc> *n;
18059 constructor_elt *ce;
18060 unsigned HOST_WIDE_INT idx;
18061 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
18062 bool process_index_p;
18063 int newlen;
18064 bool need_copy_p = false;
18065 tree r;
18066
18067 if (type == error_mark_node)
18068 RETURN (error_mark_node);
18069
18070 /* digest_init will do the wrong thing if we let it. */
18071 if (type && TYPE_PTRMEMFUNC_P (type))
18072 RETURN (t);
18073
18074 /* We do not want to process the index of aggregate
18075 initializers as they are identifier nodes which will be
18076 looked up by digest_init. */
18077 process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
18078
18079 n = vec_safe_copy (CONSTRUCTOR_ELTS (t));
18080 newlen = vec_safe_length (n);
18081 FOR_EACH_VEC_SAFE_ELT (n, idx, ce)
18082 {
18083 if (ce->index && process_index_p
18084 /* An identifier index is looked up in the type
18085 being initialized, not the current scope. */
18086 && TREE_CODE (ce->index) != IDENTIFIER_NODE)
18087 ce->index = RECUR (ce->index);
18088
18089 if (PACK_EXPANSION_P (ce->value))
18090 {
18091 /* Substitute into the pack expansion. */
18092 ce->value = tsubst_pack_expansion (ce->value, args, complain,
18093 in_decl);
18094
18095 if (ce->value == error_mark_node
18096 || PACK_EXPANSION_P (ce->value))
18097 ;
18098 else if (TREE_VEC_LENGTH (ce->value) == 1)
18099 /* Just move the argument into place. */
18100 ce->value = TREE_VEC_ELT (ce->value, 0);
18101 else
18102 {
18103 /* Update the length of the final CONSTRUCTOR
18104 arguments vector, and note that we will need to
18105 copy.*/
18106 newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
18107 need_copy_p = true;
18108 }
18109 }
18110 else
18111 ce->value = RECUR (ce->value);
18112 }
18113
18114 if (need_copy_p)
18115 {
18116 vec<constructor_elt, va_gc> *old_n = n;
18117
18118 vec_alloc (n, newlen);
18119 FOR_EACH_VEC_ELT (*old_n, idx, ce)
18120 {
18121 if (TREE_CODE (ce->value) == TREE_VEC)
18122 {
18123 int i, len = TREE_VEC_LENGTH (ce->value);
18124 for (i = 0; i < len; ++i)
18125 CONSTRUCTOR_APPEND_ELT (n, 0,
18126 TREE_VEC_ELT (ce->value, i));
18127 }
18128 else
18129 CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
18130 }
18131 }
18132
18133 r = build_constructor (init_list_type_node, n);
18134 CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
18135
18136 if (TREE_HAS_CONSTRUCTOR (t))
18137 {
18138 fcl_t cl = fcl_functional;
18139 if (CONSTRUCTOR_C99_COMPOUND_LITERAL (t))
18140 cl = fcl_c99;
18141 RETURN (finish_compound_literal (type, r, complain, cl));
18142 }
18143
18144 TREE_TYPE (r) = type;
18145 RETURN (r);
18146 }
18147
18148 case TYPEID_EXPR:
18149 {
18150 tree operand_0 = TREE_OPERAND (t, 0);
18151 if (TYPE_P (operand_0))
18152 {
18153 operand_0 = tsubst (operand_0, args, complain, in_decl);
18154 RETURN (get_typeid (operand_0, complain));
18155 }
18156 else
18157 {
18158 operand_0 = RECUR (operand_0);
18159 RETURN (build_typeid (operand_0, complain));
18160 }
18161 }
18162
18163 case VAR_DECL:
18164 if (!args)
18165 RETURN (t);
18166 else if (DECL_PACK_P (t))
18167 {
18168 /* We don't build decls for an instantiation of a
18169 variadic capture proxy, we instantiate the elements
18170 when needed. */
18171 gcc_assert (DECL_HAS_VALUE_EXPR_P (t));
18172 return RECUR (DECL_VALUE_EXPR (t));
18173 }
18174 /* Fall through */
18175
18176 case PARM_DECL:
18177 {
18178 tree r = tsubst_copy (t, args, complain, in_decl);
18179 /* ??? We're doing a subset of finish_id_expression here. */
18180 if (VAR_P (r)
18181 && !processing_template_decl
18182 && !cp_unevaluated_operand
18183 && (TREE_STATIC (r) || DECL_EXTERNAL (r))
18184 && CP_DECL_THREAD_LOCAL_P (r))
18185 {
18186 if (tree wrap = get_tls_wrapper_fn (r))
18187 /* Replace an evaluated use of the thread_local variable with
18188 a call to its wrapper. */
18189 r = build_cxx_call (wrap, 0, NULL, tf_warning_or_error);
18190 }
18191 else if (outer_automatic_var_p (r))
18192 r = process_outer_var_ref (r, complain);
18193
18194 if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
18195 /* If the original type was a reference, we'll be wrapped in
18196 the appropriate INDIRECT_REF. */
18197 r = convert_from_reference (r);
18198 RETURN (r);
18199 }
18200
18201 case VA_ARG_EXPR:
18202 {
18203 tree op0 = RECUR (TREE_OPERAND (t, 0));
18204 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
18205 RETURN (build_x_va_arg (EXPR_LOCATION (t), op0, type));
18206 }
18207
18208 case OFFSETOF_EXPR:
18209 {
18210 tree object_ptr
18211 = tsubst_copy_and_build (TREE_OPERAND (t, 1), args, complain,
18212 in_decl, /*function_p=*/false,
18213 /*integral_constant_expression_p=*/false);
18214 RETURN (finish_offsetof (object_ptr,
18215 RECUR (TREE_OPERAND (t, 0)),
18216 EXPR_LOCATION (t)));
18217 }
18218
18219 case ADDRESSOF_EXPR:
18220 RETURN (cp_build_addressof (EXPR_LOCATION (t),
18221 RECUR (TREE_OPERAND (t, 0)), complain));
18222
18223 case TRAIT_EXPR:
18224 {
18225 tree type1 = tsubst (TRAIT_EXPR_TYPE1 (t), args,
18226 complain, in_decl);
18227
18228 tree type2 = TRAIT_EXPR_TYPE2 (t);
18229 if (type2 && TREE_CODE (type2) == TREE_LIST)
18230 type2 = RECUR (type2);
18231 else if (type2)
18232 type2 = tsubst (type2, args, complain, in_decl);
18233
18234 RETURN (finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2));
18235 }
18236
18237 case STMT_EXPR:
18238 {
18239 tree old_stmt_expr = cur_stmt_expr;
18240 tree stmt_expr = begin_stmt_expr ();
18241
18242 cur_stmt_expr = stmt_expr;
18243 tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
18244 integral_constant_expression_p);
18245 stmt_expr = finish_stmt_expr (stmt_expr, false);
18246 cur_stmt_expr = old_stmt_expr;
18247
18248 /* If the resulting list of expression statement is empty,
18249 fold it further into void_node. */
18250 if (empty_expr_stmt_p (stmt_expr))
18251 stmt_expr = void_node;
18252
18253 RETURN (stmt_expr);
18254 }
18255
18256 case LAMBDA_EXPR:
18257 {
18258 tree r = tsubst_lambda_expr (t, args, complain, in_decl);
18259
18260 RETURN (build_lambda_object (r));
18261 }
18262
18263 case TARGET_EXPR:
18264 /* We can get here for a constant initializer of non-dependent type.
18265 FIXME stop folding in cp_parser_initializer_clause. */
18266 {
18267 tree r = get_target_expr_sfinae (RECUR (TARGET_EXPR_INITIAL (t)),
18268 complain);
18269 RETURN (r);
18270 }
18271
18272 case TRANSACTION_EXPR:
18273 RETURN (tsubst_expr(t, args, complain, in_decl,
18274 integral_constant_expression_p));
18275
18276 case PAREN_EXPR:
18277 RETURN (finish_parenthesized_expr (RECUR (TREE_OPERAND (t, 0))));
18278
18279 case VEC_PERM_EXPR:
18280 {
18281 tree op0 = RECUR (TREE_OPERAND (t, 0));
18282 tree op1 = RECUR (TREE_OPERAND (t, 1));
18283 tree op2 = RECUR (TREE_OPERAND (t, 2));
18284 RETURN (build_x_vec_perm_expr (input_location, op0, op1, op2,
18285 complain));
18286 }
18287
18288 case REQUIRES_EXPR:
18289 RETURN (tsubst_requires_expr (t, args, complain, in_decl));
18290
18291 default:
18292 /* Handle Objective-C++ constructs, if appropriate. */
18293 {
18294 tree subst
18295 = objcp_tsubst_copy_and_build (t, args, complain,
18296 in_decl, /*function_p=*/false);
18297 if (subst)
18298 RETURN (subst);
18299 }
18300 RETURN (tsubst_copy (t, args, complain, in_decl));
18301 }
18302
18303 #undef RECUR
18304 #undef RETURN
18305 out:
18306 input_location = loc;
18307 return retval;
18308 }
18309
18310 /* Verify that the instantiated ARGS are valid. For type arguments,
18311 make sure that the type's linkage is ok. For non-type arguments,
18312 make sure they are constants if they are integral or enumerations.
18313 Emit an error under control of COMPLAIN, and return TRUE on error. */
18314
18315 static bool
18316 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
18317 {
18318 if (dependent_template_arg_p (t))
18319 return false;
18320 if (ARGUMENT_PACK_P (t))
18321 {
18322 tree vec = ARGUMENT_PACK_ARGS (t);
18323 int len = TREE_VEC_LENGTH (vec);
18324 bool result = false;
18325 int i;
18326
18327 for (i = 0; i < len; ++i)
18328 if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
18329 result = true;
18330 return result;
18331 }
18332 else if (TYPE_P (t))
18333 {
18334 /* [basic.link]: A name with no linkage (notably, the name
18335 of a class or enumeration declared in a local scope)
18336 shall not be used to declare an entity with linkage.
18337 This implies that names with no linkage cannot be used as
18338 template arguments
18339
18340 DR 757 relaxes this restriction for C++0x. */
18341 tree nt = (cxx_dialect > cxx98 ? NULL_TREE
18342 : no_linkage_check (t, /*relaxed_p=*/false));
18343
18344 if (nt)
18345 {
18346 /* DR 488 makes use of a type with no linkage cause
18347 type deduction to fail. */
18348 if (complain & tf_error)
18349 {
18350 if (TYPE_UNNAMED_P (nt))
18351 error ("%qT is/uses unnamed type", t);
18352 else
18353 error ("template argument for %qD uses local type %qT",
18354 tmpl, t);
18355 }
18356 return true;
18357 }
18358 /* In order to avoid all sorts of complications, we do not
18359 allow variably-modified types as template arguments. */
18360 else if (variably_modified_type_p (t, NULL_TREE))
18361 {
18362 if (complain & tf_error)
18363 error ("%qT is a variably modified type", t);
18364 return true;
18365 }
18366 }
18367 /* Class template and alias template arguments should be OK. */
18368 else if (DECL_TYPE_TEMPLATE_P (t))
18369 ;
18370 /* A non-type argument of integral or enumerated type must be a
18371 constant. */
18372 else if (TREE_TYPE (t)
18373 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
18374 && !REFERENCE_REF_P (t)
18375 && !TREE_CONSTANT (t))
18376 {
18377 if (complain & tf_error)
18378 error ("integral expression %qE is not constant", t);
18379 return true;
18380 }
18381 return false;
18382 }
18383
18384 static bool
18385 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
18386 {
18387 int ix, len = DECL_NTPARMS (tmpl);
18388 bool result = false;
18389
18390 for (ix = 0; ix != len; ix++)
18391 {
18392 if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
18393 result = true;
18394 }
18395 if (result && (complain & tf_error))
18396 error (" trying to instantiate %qD", tmpl);
18397 return result;
18398 }
18399
18400 /* We're out of SFINAE context now, so generate diagnostics for the access
18401 errors we saw earlier when instantiating D from TMPL and ARGS. */
18402
18403 static void
18404 recheck_decl_substitution (tree d, tree tmpl, tree args)
18405 {
18406 tree pattern = DECL_TEMPLATE_RESULT (tmpl);
18407 tree type = TREE_TYPE (pattern);
18408 location_t loc = input_location;
18409
18410 push_access_scope (d);
18411 push_deferring_access_checks (dk_no_deferred);
18412 input_location = DECL_SOURCE_LOCATION (pattern);
18413 tsubst (type, args, tf_warning_or_error, d);
18414 input_location = loc;
18415 pop_deferring_access_checks ();
18416 pop_access_scope (d);
18417 }
18418
18419 /* Instantiate the indicated variable, function, or alias template TMPL with
18420 the template arguments in TARG_PTR. */
18421
18422 static tree
18423 instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain)
18424 {
18425 tree targ_ptr = orig_args;
18426 tree fndecl;
18427 tree gen_tmpl;
18428 tree spec;
18429 bool access_ok = true;
18430
18431 if (tmpl == error_mark_node)
18432 return error_mark_node;
18433
18434 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
18435
18436 /* If this function is a clone, handle it specially. */
18437 if (DECL_CLONED_FUNCTION_P (tmpl))
18438 {
18439 tree spec;
18440 tree clone;
18441
18442 /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
18443 DECL_CLONED_FUNCTION. */
18444 spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
18445 targ_ptr, complain);
18446 if (spec == error_mark_node)
18447 return error_mark_node;
18448
18449 /* Look for the clone. */
18450 FOR_EACH_CLONE (clone, spec)
18451 if (DECL_NAME (clone) == DECL_NAME (tmpl))
18452 return clone;
18453 /* We should always have found the clone by now. */
18454 gcc_unreachable ();
18455 return NULL_TREE;
18456 }
18457
18458 if (targ_ptr == error_mark_node)
18459 return error_mark_node;
18460
18461 /* Check to see if we already have this specialization. */
18462 gen_tmpl = most_general_template (tmpl);
18463 if (TMPL_ARGS_DEPTH (targ_ptr)
18464 < TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl)))
18465 /* targ_ptr only has the innermost template args, so add the outer ones
18466 from tmpl, which could be either a partial instantiation or gen_tmpl (in
18467 the case of a non-dependent call within a template definition). */
18468 targ_ptr = (add_outermost_template_args
18469 (DECL_TI_ARGS (DECL_TEMPLATE_RESULT (tmpl)),
18470 targ_ptr));
18471
18472 /* It would be nice to avoid hashing here and then again in tsubst_decl,
18473 but it doesn't seem to be on the hot path. */
18474 spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
18475
18476 gcc_assert (tmpl == gen_tmpl
18477 || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
18478 == spec)
18479 || fndecl == NULL_TREE);
18480
18481 if (spec != NULL_TREE)
18482 {
18483 if (FNDECL_HAS_ACCESS_ERRORS (spec))
18484 {
18485 if (complain & tf_error)
18486 recheck_decl_substitution (spec, gen_tmpl, targ_ptr);
18487 return error_mark_node;
18488 }
18489 return spec;
18490 }
18491
18492 if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
18493 complain))
18494 return error_mark_node;
18495
18496 /* We are building a FUNCTION_DECL, during which the access of its
18497 parameters and return types have to be checked. However this
18498 FUNCTION_DECL which is the desired context for access checking
18499 is not built yet. We solve this chicken-and-egg problem by
18500 deferring all checks until we have the FUNCTION_DECL. */
18501 push_deferring_access_checks (dk_deferred);
18502
18503 /* Instantiation of the function happens in the context of the function
18504 template, not the context of the overload resolution we're doing. */
18505 push_to_top_level ();
18506 /* If there are dependent arguments, e.g. because we're doing partial
18507 ordering, make sure processing_template_decl stays set. */
18508 if (uses_template_parms (targ_ptr))
18509 ++processing_template_decl;
18510 if (DECL_CLASS_SCOPE_P (gen_tmpl))
18511 {
18512 tree ctx = tsubst_aggr_type (DECL_CONTEXT (gen_tmpl), targ_ptr,
18513 complain, gen_tmpl, true);
18514 push_nested_class (ctx);
18515 }
18516
18517 tree pattern = DECL_TEMPLATE_RESULT (gen_tmpl);
18518
18519 fndecl = NULL_TREE;
18520 if (VAR_P (pattern))
18521 {
18522 /* We need to determine if we're using a partial or explicit
18523 specialization now, because the type of the variable could be
18524 different. */
18525 tree tid = lookup_template_variable (gen_tmpl, targ_ptr);
18526 tree elt = most_specialized_partial_spec (tid, complain);
18527 if (elt == error_mark_node)
18528 pattern = error_mark_node;
18529 else if (elt)
18530 {
18531 tree partial_tmpl = TREE_VALUE (elt);
18532 tree partial_args = TREE_PURPOSE (elt);
18533 tree partial_pat = DECL_TEMPLATE_RESULT (partial_tmpl);
18534 fndecl = tsubst (partial_pat, partial_args, complain, gen_tmpl);
18535 }
18536 }
18537
18538 /* Substitute template parameters to obtain the specialization. */
18539 if (fndecl == NULL_TREE)
18540 fndecl = tsubst (pattern, targ_ptr, complain, gen_tmpl);
18541 if (DECL_CLASS_SCOPE_P (gen_tmpl))
18542 pop_nested_class ();
18543 pop_from_top_level ();
18544
18545 if (fndecl == error_mark_node)
18546 {
18547 pop_deferring_access_checks ();
18548 return error_mark_node;
18549 }
18550
18551 /* The DECL_TI_TEMPLATE should always be the immediate parent
18552 template, not the most general template. */
18553 DECL_TI_TEMPLATE (fndecl) = tmpl;
18554 DECL_TI_ARGS (fndecl) = targ_ptr;
18555
18556 /* Now we know the specialization, compute access previously
18557 deferred. Do no access control for inheriting constructors,
18558 as we already checked access for the inherited constructor. */
18559 if (!(flag_new_inheriting_ctors
18560 && DECL_INHERITED_CTOR (fndecl)))
18561 {
18562 push_access_scope (fndecl);
18563 if (!perform_deferred_access_checks (complain))
18564 access_ok = false;
18565 pop_access_scope (fndecl);
18566 }
18567 pop_deferring_access_checks ();
18568
18569 /* If we've just instantiated the main entry point for a function,
18570 instantiate all the alternate entry points as well. We do this
18571 by cloning the instantiation of the main entry point, not by
18572 instantiating the template clones. */
18573 if (DECL_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (DECL_CHAIN (gen_tmpl)))
18574 clone_function_decl (fndecl, /*update_methods=*/false);
18575
18576 if (!access_ok)
18577 {
18578 if (!(complain & tf_error))
18579 {
18580 /* Remember to reinstantiate when we're out of SFINAE so the user
18581 can see the errors. */
18582 FNDECL_HAS_ACCESS_ERRORS (fndecl) = true;
18583 }
18584 return error_mark_node;
18585 }
18586 return fndecl;
18587 }
18588
18589 /* Wrapper for instantiate_template_1. */
18590
18591 tree
18592 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
18593 {
18594 tree ret;
18595 timevar_push (TV_TEMPLATE_INST);
18596 ret = instantiate_template_1 (tmpl, orig_args, complain);
18597 timevar_pop (TV_TEMPLATE_INST);
18598 return ret;
18599 }
18600
18601 /* Instantiate the alias template TMPL with ARGS. Also push a template
18602 instantiation level, which instantiate_template doesn't do because
18603 functions and variables have sufficient context established by the
18604 callers. */
18605
18606 static tree
18607 instantiate_alias_template (tree tmpl, tree args, tsubst_flags_t complain)
18608 {
18609 struct pending_template *old_last_pend = last_pending_template;
18610 struct tinst_level *old_error_tinst = last_error_tinst_level;
18611 if (tmpl == error_mark_node || args == error_mark_node)
18612 return error_mark_node;
18613 tree tinst = build_tree_list (tmpl, args);
18614 if (!push_tinst_level (tinst))
18615 {
18616 ggc_free (tinst);
18617 return error_mark_node;
18618 }
18619
18620 args =
18621 coerce_innermost_template_parms (DECL_TEMPLATE_PARMS (tmpl),
18622 args, tmpl, complain,
18623 /*require_all_args=*/true,
18624 /*use_default_args=*/true);
18625
18626 tree r = instantiate_template (tmpl, args, complain);
18627 pop_tinst_level ();
18628 /* We can't free this if a pending_template entry or last_error_tinst_level
18629 is pointing at it. */
18630 if (last_pending_template == old_last_pend
18631 && last_error_tinst_level == old_error_tinst)
18632 ggc_free (tinst);
18633
18634 return r;
18635 }
18636
18637 /* PARM is a template parameter pack for FN. Returns true iff
18638 PARM is used in a deducible way in the argument list of FN. */
18639
18640 static bool
18641 pack_deducible_p (tree parm, tree fn)
18642 {
18643 tree t = FUNCTION_FIRST_USER_PARMTYPE (fn);
18644 for (; t; t = TREE_CHAIN (t))
18645 {
18646 tree type = TREE_VALUE (t);
18647 tree packs;
18648 if (!PACK_EXPANSION_P (type))
18649 continue;
18650 for (packs = PACK_EXPANSION_PARAMETER_PACKS (type);
18651 packs; packs = TREE_CHAIN (packs))
18652 if (template_args_equal (TREE_VALUE (packs), parm))
18653 {
18654 /* The template parameter pack is used in a function parameter
18655 pack. If this is the end of the parameter list, the
18656 template parameter pack is deducible. */
18657 if (TREE_CHAIN (t) == void_list_node)
18658 return true;
18659 else
18660 /* Otherwise, not. Well, it could be deduced from
18661 a non-pack parameter, but doing so would end up with
18662 a deduction mismatch, so don't bother. */
18663 return false;
18664 }
18665 }
18666 /* The template parameter pack isn't used in any function parameter
18667 packs, but it might be used deeper, e.g. tuple<Args...>. */
18668 return true;
18669 }
18670
18671 /* The FN is a TEMPLATE_DECL for a function. ARGS is an array with
18672 NARGS elements of the arguments that are being used when calling
18673 it. TARGS is a vector into which the deduced template arguments
18674 are placed.
18675
18676 Returns either a FUNCTION_DECL for the matching specialization of FN or
18677 NULL_TREE if no suitable specialization can be found. If EXPLAIN_P is
18678 true, diagnostics will be printed to explain why it failed.
18679
18680 If FN is a conversion operator, or we are trying to produce a specific
18681 specialization, RETURN_TYPE is the return type desired.
18682
18683 The EXPLICIT_TARGS are explicit template arguments provided via a
18684 template-id.
18685
18686 The parameter STRICT is one of:
18687
18688 DEDUCE_CALL:
18689 We are deducing arguments for a function call, as in
18690 [temp.deduct.call]. If RETURN_TYPE is non-null, we are
18691 deducing arguments for a call to the result of a conversion
18692 function template, as in [over.call.object].
18693
18694 DEDUCE_CONV:
18695 We are deducing arguments for a conversion function, as in
18696 [temp.deduct.conv].
18697
18698 DEDUCE_EXACT:
18699 We are deducing arguments when doing an explicit instantiation
18700 as in [temp.explicit], when determining an explicit specialization
18701 as in [temp.expl.spec], or when taking the address of a function
18702 template, as in [temp.deduct.funcaddr]. */
18703
18704 tree
18705 fn_type_unification (tree fn,
18706 tree explicit_targs,
18707 tree targs,
18708 const tree *args,
18709 unsigned int nargs,
18710 tree return_type,
18711 unification_kind_t strict,
18712 int flags,
18713 bool explain_p,
18714 bool decltype_p)
18715 {
18716 tree parms;
18717 tree fntype;
18718 tree decl = NULL_TREE;
18719 tsubst_flags_t complain = (explain_p ? tf_warning_or_error : tf_none);
18720 bool ok;
18721 static int deduction_depth;
18722 struct pending_template *old_last_pend = last_pending_template;
18723 struct tinst_level *old_error_tinst = last_error_tinst_level;
18724
18725 tree orig_fn = fn;
18726 if (flag_new_inheriting_ctors)
18727 fn = strip_inheriting_ctors (fn);
18728
18729 tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
18730 tree tinst;
18731 tree r = error_mark_node;
18732
18733 tree full_targs = targs;
18734 if (TMPL_ARGS_DEPTH (targs)
18735 < TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (fn)))
18736 full_targs = (add_outermost_template_args
18737 (DECL_TI_ARGS (DECL_TEMPLATE_RESULT (fn)),
18738 targs));
18739
18740 if (decltype_p)
18741 complain |= tf_decltype;
18742
18743 /* In C++0x, it's possible to have a function template whose type depends
18744 on itself recursively. This is most obvious with decltype, but can also
18745 occur with enumeration scope (c++/48969). So we need to catch infinite
18746 recursion and reject the substitution at deduction time; this function
18747 will return error_mark_node for any repeated substitution.
18748
18749 This also catches excessive recursion such as when f<N> depends on
18750 f<N-1> across all integers, and returns error_mark_node for all the
18751 substitutions back up to the initial one.
18752
18753 This is, of course, not reentrant. */
18754 if (excessive_deduction_depth)
18755 return error_mark_node;
18756 tinst = build_tree_list (fn, NULL_TREE);
18757 ++deduction_depth;
18758
18759 gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
18760
18761 fntype = TREE_TYPE (fn);
18762 if (explicit_targs)
18763 {
18764 /* [temp.deduct]
18765
18766 The specified template arguments must match the template
18767 parameters in kind (i.e., type, nontype, template), and there
18768 must not be more arguments than there are parameters;
18769 otherwise type deduction fails.
18770
18771 Nontype arguments must match the types of the corresponding
18772 nontype template parameters, or must be convertible to the
18773 types of the corresponding nontype parameters as specified in
18774 _temp.arg.nontype_, otherwise type deduction fails.
18775
18776 All references in the function type of the function template
18777 to the corresponding template parameters are replaced by the
18778 specified template argument values. If a substitution in a
18779 template parameter or in the function type of the function
18780 template results in an invalid type, type deduction fails. */
18781 int i, len = TREE_VEC_LENGTH (tparms);
18782 location_t loc = input_location;
18783 bool incomplete = false;
18784
18785 if (explicit_targs == error_mark_node)
18786 goto fail;
18787
18788 if (TMPL_ARGS_DEPTH (explicit_targs)
18789 < TMPL_ARGS_DEPTH (full_targs))
18790 explicit_targs = add_outermost_template_args (full_targs,
18791 explicit_targs);
18792
18793 /* Adjust any explicit template arguments before entering the
18794 substitution context. */
18795 explicit_targs
18796 = (coerce_template_parms (tparms, explicit_targs, NULL_TREE,
18797 complain,
18798 /*require_all_args=*/false,
18799 /*use_default_args=*/false));
18800 if (explicit_targs == error_mark_node)
18801 goto fail;
18802
18803 /* Substitute the explicit args into the function type. This is
18804 necessary so that, for instance, explicitly declared function
18805 arguments can match null pointed constants. If we were given
18806 an incomplete set of explicit args, we must not do semantic
18807 processing during substitution as we could create partial
18808 instantiations. */
18809 for (i = 0; i < len; i++)
18810 {
18811 tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
18812 bool parameter_pack = false;
18813 tree targ = TREE_VEC_ELT (explicit_targs, i);
18814
18815 /* Dig out the actual parm. */
18816 if (TREE_CODE (parm) == TYPE_DECL
18817 || TREE_CODE (parm) == TEMPLATE_DECL)
18818 {
18819 parm = TREE_TYPE (parm);
18820 parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
18821 }
18822 else if (TREE_CODE (parm) == PARM_DECL)
18823 {
18824 parm = DECL_INITIAL (parm);
18825 parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
18826 }
18827
18828 if (!parameter_pack && targ == NULL_TREE)
18829 /* No explicit argument for this template parameter. */
18830 incomplete = true;
18831
18832 if (parameter_pack && pack_deducible_p (parm, fn))
18833 {
18834 /* Mark the argument pack as "incomplete". We could
18835 still deduce more arguments during unification.
18836 We remove this mark in type_unification_real. */
18837 if (targ)
18838 {
18839 ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
18840 ARGUMENT_PACK_EXPLICIT_ARGS (targ)
18841 = ARGUMENT_PACK_ARGS (targ);
18842 }
18843
18844 /* We have some incomplete argument packs. */
18845 incomplete = true;
18846 }
18847 }
18848
18849 TREE_VALUE (tinst) = explicit_targs;
18850 if (!push_tinst_level (tinst))
18851 {
18852 excessive_deduction_depth = true;
18853 goto fail;
18854 }
18855 processing_template_decl += incomplete;
18856 input_location = DECL_SOURCE_LOCATION (fn);
18857 /* Ignore any access checks; we'll see them again in
18858 instantiate_template and they might have the wrong
18859 access path at this point. */
18860 push_deferring_access_checks (dk_deferred);
18861 fntype = tsubst (TREE_TYPE (fn), explicit_targs,
18862 complain | tf_partial | tf_fndecl_type, NULL_TREE);
18863 pop_deferring_access_checks ();
18864 input_location = loc;
18865 processing_template_decl -= incomplete;
18866 pop_tinst_level ();
18867
18868 if (fntype == error_mark_node)
18869 goto fail;
18870
18871 /* Place the explicitly specified arguments in TARGS. */
18872 explicit_targs = INNERMOST_TEMPLATE_ARGS (explicit_targs);
18873 for (i = NUM_TMPL_ARGS (explicit_targs); i--;)
18874 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (explicit_targs, i);
18875 }
18876
18877 /* Never do unification on the 'this' parameter. */
18878 parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
18879
18880 if (return_type && strict == DEDUCE_CALL)
18881 {
18882 /* We're deducing for a call to the result of a template conversion
18883 function. The parms we really want are in return_type. */
18884 if (POINTER_TYPE_P (return_type))
18885 return_type = TREE_TYPE (return_type);
18886 parms = TYPE_ARG_TYPES (return_type);
18887 }
18888 else if (return_type)
18889 {
18890 tree *new_args;
18891
18892 parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
18893 new_args = XALLOCAVEC (tree, nargs + 1);
18894 new_args[0] = return_type;
18895 memcpy (new_args + 1, args, nargs * sizeof (tree));
18896 args = new_args;
18897 ++nargs;
18898 }
18899
18900 /* We allow incomplete unification without an error message here
18901 because the standard doesn't seem to explicitly prohibit it. Our
18902 callers must be ready to deal with unification failures in any
18903 event. */
18904
18905 TREE_VALUE (tinst) = targs;
18906 /* If we aren't explaining yet, push tinst context so we can see where
18907 any errors (e.g. from class instantiations triggered by instantiation
18908 of default template arguments) come from. If we are explaining, this
18909 context is redundant. */
18910 if (!explain_p && !push_tinst_level (tinst))
18911 {
18912 excessive_deduction_depth = true;
18913 goto fail;
18914 }
18915
18916 /* type_unification_real will pass back any access checks from default
18917 template argument substitution. */
18918 vec<deferred_access_check, va_gc> *checks;
18919 checks = NULL;
18920
18921 ok = !type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
18922 full_targs, parms, args, nargs, /*subr=*/0,
18923 strict, flags, &checks, explain_p);
18924 if (!explain_p)
18925 pop_tinst_level ();
18926 if (!ok)
18927 goto fail;
18928
18929 /* Now that we have bindings for all of the template arguments,
18930 ensure that the arguments deduced for the template template
18931 parameters have compatible template parameter lists. We cannot
18932 check this property before we have deduced all template
18933 arguments, because the template parameter types of a template
18934 template parameter might depend on prior template parameters
18935 deduced after the template template parameter. The following
18936 ill-formed example illustrates this issue:
18937
18938 template<typename T, template<T> class C> void f(C<5>, T);
18939
18940 template<int N> struct X {};
18941
18942 void g() {
18943 f(X<5>(), 5l); // error: template argument deduction fails
18944 }
18945
18946 The template parameter list of 'C' depends on the template type
18947 parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
18948 'long'. Thus, we can't check that 'C' cannot bind to 'X' at the
18949 time that we deduce 'C'. */
18950 if (!template_template_parm_bindings_ok_p
18951 (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
18952 {
18953 unify_inconsistent_template_template_parameters (explain_p);
18954 goto fail;
18955 }
18956
18957 /* All is well so far. Now, check:
18958
18959 [temp.deduct]
18960
18961 When all template arguments have been deduced, all uses of
18962 template parameters in nondeduced contexts are replaced with
18963 the corresponding deduced argument values. If the
18964 substitution results in an invalid type, as described above,
18965 type deduction fails. */
18966 TREE_VALUE (tinst) = targs;
18967 if (!push_tinst_level (tinst))
18968 {
18969 excessive_deduction_depth = true;
18970 goto fail;
18971 }
18972
18973 /* Also collect access checks from the instantiation. */
18974 reopen_deferring_access_checks (checks);
18975
18976 decl = instantiate_template (fn, targs, complain);
18977
18978 checks = get_deferred_access_checks ();
18979 pop_deferring_access_checks ();
18980
18981 pop_tinst_level ();
18982
18983 if (decl == error_mark_node)
18984 goto fail;
18985
18986 /* Now perform any access checks encountered during substitution. */
18987 push_access_scope (decl);
18988 ok = perform_access_checks (checks, complain);
18989 pop_access_scope (decl);
18990 if (!ok)
18991 goto fail;
18992
18993 /* If we're looking for an exact match, check that what we got
18994 is indeed an exact match. It might not be if some template
18995 parameters are used in non-deduced contexts. But don't check
18996 for an exact match if we have dependent template arguments;
18997 in that case we're doing partial ordering, and we already know
18998 that we have two candidates that will provide the actual type. */
18999 if (strict == DEDUCE_EXACT && !any_dependent_template_arguments_p (targs))
19000 {
19001 tree substed = TREE_TYPE (decl);
19002 unsigned int i;
19003
19004 tree sarg
19005 = skip_artificial_parms_for (decl, TYPE_ARG_TYPES (substed));
19006 if (return_type)
19007 sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
19008 for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
19009 if (!same_type_p (args[i], TREE_VALUE (sarg)))
19010 {
19011 unify_type_mismatch (explain_p, args[i],
19012 TREE_VALUE (sarg));
19013 goto fail;
19014 }
19015 }
19016
19017 /* After doing deduction with the inherited constructor, actually return an
19018 instantiation of the inheriting constructor. */
19019 if (orig_fn != fn)
19020 decl = instantiate_template (orig_fn, targs, complain);
19021
19022 r = decl;
19023
19024 fail:
19025 --deduction_depth;
19026 if (excessive_deduction_depth)
19027 {
19028 if (deduction_depth == 0)
19029 /* Reset once we're all the way out. */
19030 excessive_deduction_depth = false;
19031 }
19032
19033 /* We can't free this if a pending_template entry or last_error_tinst_level
19034 is pointing at it. */
19035 if (last_pending_template == old_last_pend
19036 && last_error_tinst_level == old_error_tinst)
19037 ggc_free (tinst);
19038
19039 return r;
19040 }
19041
19042 /* Adjust types before performing type deduction, as described in
19043 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
19044 sections are symmetric. PARM is the type of a function parameter
19045 or the return type of the conversion function. ARG is the type of
19046 the argument passed to the call, or the type of the value
19047 initialized with the result of the conversion function.
19048 ARG_EXPR is the original argument expression, which may be null. */
19049
19050 static int
19051 maybe_adjust_types_for_deduction (unification_kind_t strict,
19052 tree* parm,
19053 tree* arg,
19054 tree arg_expr)
19055 {
19056 int result = 0;
19057
19058 switch (strict)
19059 {
19060 case DEDUCE_CALL:
19061 break;
19062
19063 case DEDUCE_CONV:
19064 /* Swap PARM and ARG throughout the remainder of this
19065 function; the handling is precisely symmetric since PARM
19066 will initialize ARG rather than vice versa. */
19067 std::swap (parm, arg);
19068 break;
19069
19070 case DEDUCE_EXACT:
19071 /* Core issue #873: Do the DR606 thing (see below) for these cases,
19072 too, but here handle it by stripping the reference from PARM
19073 rather than by adding it to ARG. */
19074 if (TREE_CODE (*parm) == REFERENCE_TYPE
19075 && TYPE_REF_IS_RVALUE (*parm)
19076 && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
19077 && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
19078 && TREE_CODE (*arg) == REFERENCE_TYPE
19079 && !TYPE_REF_IS_RVALUE (*arg))
19080 *parm = TREE_TYPE (*parm);
19081 /* Nothing else to do in this case. */
19082 return 0;
19083
19084 default:
19085 gcc_unreachable ();
19086 }
19087
19088 if (TREE_CODE (*parm) != REFERENCE_TYPE)
19089 {
19090 /* [temp.deduct.call]
19091
19092 If P is not a reference type:
19093
19094 --If A is an array type, the pointer type produced by the
19095 array-to-pointer standard conversion (_conv.array_) is
19096 used in place of A for type deduction; otherwise,
19097
19098 --If A is a function type, the pointer type produced by
19099 the function-to-pointer standard conversion
19100 (_conv.func_) is used in place of A for type deduction;
19101 otherwise,
19102
19103 --If A is a cv-qualified type, the top level
19104 cv-qualifiers of A's type are ignored for type
19105 deduction. */
19106 if (TREE_CODE (*arg) == ARRAY_TYPE)
19107 *arg = build_pointer_type (TREE_TYPE (*arg));
19108 else if (TREE_CODE (*arg) == FUNCTION_TYPE)
19109 *arg = build_pointer_type (*arg);
19110 else
19111 *arg = TYPE_MAIN_VARIANT (*arg);
19112 }
19113
19114 /* [14.8.2.1/3 temp.deduct.call], "A forwarding reference is an rvalue
19115 reference to a cv-unqualified template parameter that does not represent a
19116 template parameter of a class template (during class template argument
19117 deduction (13.3.1.8)). If P is a forwarding reference and the argument is
19118 an lvalue, the type "lvalue reference to A" is used in place of A for type
19119 deduction. */
19120 if (TREE_CODE (*parm) == REFERENCE_TYPE
19121 && TYPE_REF_IS_RVALUE (*parm)
19122 && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
19123 && !TEMPLATE_TYPE_PARM_FOR_CLASS (TREE_TYPE (*parm))
19124 && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
19125 && (arg_expr ? lvalue_p (arg_expr)
19126 /* try_one_overload doesn't provide an arg_expr, but
19127 functions are always lvalues. */
19128 : TREE_CODE (*arg) == FUNCTION_TYPE))
19129 *arg = build_reference_type (*arg);
19130
19131 /* [temp.deduct.call]
19132
19133 If P is a cv-qualified type, the top level cv-qualifiers
19134 of P's type are ignored for type deduction. If P is a
19135 reference type, the type referred to by P is used for
19136 type deduction. */
19137 *parm = TYPE_MAIN_VARIANT (*parm);
19138 if (TREE_CODE (*parm) == REFERENCE_TYPE)
19139 {
19140 *parm = TREE_TYPE (*parm);
19141 result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
19142 }
19143
19144 /* DR 322. For conversion deduction, remove a reference type on parm
19145 too (which has been swapped into ARG). */
19146 if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
19147 *arg = TREE_TYPE (*arg);
19148
19149 return result;
19150 }
19151
19152 /* Subroutine of unify_one_argument. PARM is a function parameter of a
19153 template which does contain any deducible template parameters; check if
19154 ARG is a suitable match for it. STRICT, FLAGS and EXPLAIN_P are as in
19155 unify_one_argument. */
19156
19157 static int
19158 check_non_deducible_conversion (tree parm, tree arg, int strict,
19159 int flags, bool explain_p)
19160 {
19161 tree type;
19162
19163 if (!TYPE_P (arg))
19164 type = TREE_TYPE (arg);
19165 else
19166 type = arg;
19167
19168 if (same_type_p (parm, type))
19169 return unify_success (explain_p);
19170
19171 if (strict == DEDUCE_CONV)
19172 {
19173 if (can_convert_arg (type, parm, NULL_TREE, flags,
19174 explain_p ? tf_warning_or_error : tf_none))
19175 return unify_success (explain_p);
19176 }
19177 else if (strict != DEDUCE_EXACT)
19178 {
19179 if (can_convert_arg (parm, type,
19180 TYPE_P (arg) ? NULL_TREE : arg,
19181 flags, explain_p ? tf_warning_or_error : tf_none))
19182 return unify_success (explain_p);
19183 }
19184
19185 if (strict == DEDUCE_EXACT)
19186 return unify_type_mismatch (explain_p, parm, arg);
19187 else
19188 return unify_arg_conversion (explain_p, parm, type, arg);
19189 }
19190
19191 static bool uses_deducible_template_parms (tree type);
19192
19193 /* Returns true iff the expression EXPR is one from which a template
19194 argument can be deduced. In other words, if it's an undecorated
19195 use of a template non-type parameter. */
19196
19197 static bool
19198 deducible_expression (tree expr)
19199 {
19200 /* Strip implicit conversions. */
19201 while (CONVERT_EXPR_P (expr))
19202 expr = TREE_OPERAND (expr, 0);
19203 return (TREE_CODE (expr) == TEMPLATE_PARM_INDEX);
19204 }
19205
19206 /* Returns true iff the array domain DOMAIN uses a template parameter in a
19207 deducible way; that is, if it has a max value of <PARM> - 1. */
19208
19209 static bool
19210 deducible_array_bound (tree domain)
19211 {
19212 if (domain == NULL_TREE)
19213 return false;
19214
19215 tree max = TYPE_MAX_VALUE (domain);
19216 if (TREE_CODE (max) != MINUS_EXPR)
19217 return false;
19218
19219 return deducible_expression (TREE_OPERAND (max, 0));
19220 }
19221
19222 /* Returns true iff the template arguments ARGS use a template parameter
19223 in a deducible way. */
19224
19225 static bool
19226 deducible_template_args (tree args)
19227 {
19228 for (int i = 0; i < TREE_VEC_LENGTH (args); ++i)
19229 {
19230 bool deducible;
19231 tree elt = TREE_VEC_ELT (args, i);
19232 if (ARGUMENT_PACK_P (elt))
19233 deducible = deducible_template_args (ARGUMENT_PACK_ARGS (elt));
19234 else
19235 {
19236 if (PACK_EXPANSION_P (elt))
19237 elt = PACK_EXPANSION_PATTERN (elt);
19238 if (TREE_CODE (elt) == TEMPLATE_TEMPLATE_PARM)
19239 deducible = true;
19240 else if (TYPE_P (elt))
19241 deducible = uses_deducible_template_parms (elt);
19242 else
19243 deducible = deducible_expression (elt);
19244 }
19245 if (deducible)
19246 return true;
19247 }
19248 return false;
19249 }
19250
19251 /* Returns true iff TYPE contains any deducible references to template
19252 parameters, as per 14.8.2.5. */
19253
19254 static bool
19255 uses_deducible_template_parms (tree type)
19256 {
19257 if (PACK_EXPANSION_P (type))
19258 type = PACK_EXPANSION_PATTERN (type);
19259
19260 /* T
19261 cv-list T
19262 TT<T>
19263 TT<i>
19264 TT<> */
19265 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
19266 || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
19267 return true;
19268
19269 /* T*
19270 T&
19271 T&& */
19272 if (POINTER_TYPE_P (type))
19273 return uses_deducible_template_parms (TREE_TYPE (type));
19274
19275 /* T[integer-constant ]
19276 type [i] */
19277 if (TREE_CODE (type) == ARRAY_TYPE)
19278 return (uses_deducible_template_parms (TREE_TYPE (type))
19279 || deducible_array_bound (TYPE_DOMAIN (type)));
19280
19281 /* T type ::*
19282 type T::*
19283 T T::*
19284 T (type ::*)()
19285 type (T::*)()
19286 type (type ::*)(T)
19287 type (T::*)(T)
19288 T (type ::*)(T)
19289 T (T::*)()
19290 T (T::*)(T) */
19291 if (TYPE_PTRMEM_P (type))
19292 return (uses_deducible_template_parms (TYPE_PTRMEM_CLASS_TYPE (type))
19293 || (uses_deducible_template_parms
19294 (TYPE_PTRMEM_POINTED_TO_TYPE (type))));
19295
19296 /* template-name <T> (where template-name refers to a class template)
19297 template-name <i> (where template-name refers to a class template) */
19298 if (CLASS_TYPE_P (type)
19299 && CLASSTYPE_TEMPLATE_INFO (type)
19300 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type)))
19301 return deducible_template_args (INNERMOST_TEMPLATE_ARGS
19302 (CLASSTYPE_TI_ARGS (type)));
19303
19304 /* type (T)
19305 T()
19306 T(T) */
19307 if (TREE_CODE (type) == FUNCTION_TYPE
19308 || TREE_CODE (type) == METHOD_TYPE)
19309 {
19310 if (uses_deducible_template_parms (TREE_TYPE (type)))
19311 return true;
19312 tree parm = TYPE_ARG_TYPES (type);
19313 if (TREE_CODE (type) == METHOD_TYPE)
19314 parm = TREE_CHAIN (parm);
19315 for (; parm; parm = TREE_CHAIN (parm))
19316 if (uses_deducible_template_parms (TREE_VALUE (parm)))
19317 return true;
19318 }
19319
19320 return false;
19321 }
19322
19323 /* Subroutine of type_unification_real and unify_pack_expansion to
19324 handle unification of a single P/A pair. Parameters are as
19325 for those functions. */
19326
19327 static int
19328 unify_one_argument (tree tparms, tree targs, tree parm, tree arg,
19329 int subr, unification_kind_t strict,
19330 bool explain_p)
19331 {
19332 tree arg_expr = NULL_TREE;
19333 int arg_strict;
19334
19335 if (arg == error_mark_node || parm == error_mark_node)
19336 return unify_invalid (explain_p);
19337 if (arg == unknown_type_node)
19338 /* We can't deduce anything from this, but we might get all the
19339 template args from other function args. */
19340 return unify_success (explain_p);
19341
19342 /* Implicit conversions (Clause 4) will be performed on a function
19343 argument to convert it to the type of the corresponding function
19344 parameter if the parameter type contains no template-parameters that
19345 participate in template argument deduction. */
19346 if (strict != DEDUCE_EXACT
19347 && TYPE_P (parm) && !uses_deducible_template_parms (parm))
19348 /* For function parameters with no deducible template parameters,
19349 just return. We'll check non-dependent conversions later. */
19350 return unify_success (explain_p);
19351
19352 switch (strict)
19353 {
19354 case DEDUCE_CALL:
19355 arg_strict = (UNIFY_ALLOW_OUTER_LEVEL
19356 | UNIFY_ALLOW_MORE_CV_QUAL
19357 | UNIFY_ALLOW_DERIVED);
19358 break;
19359
19360 case DEDUCE_CONV:
19361 arg_strict = UNIFY_ALLOW_LESS_CV_QUAL;
19362 break;
19363
19364 case DEDUCE_EXACT:
19365 arg_strict = UNIFY_ALLOW_NONE;
19366 break;
19367
19368 default:
19369 gcc_unreachable ();
19370 }
19371
19372 /* We only do these transformations if this is the top-level
19373 parameter_type_list in a call or declaration matching; in other
19374 situations (nested function declarators, template argument lists) we
19375 won't be comparing a type to an expression, and we don't do any type
19376 adjustments. */
19377 if (!subr)
19378 {
19379 if (!TYPE_P (arg))
19380 {
19381 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
19382 if (type_unknown_p (arg))
19383 {
19384 /* [temp.deduct.type] A template-argument can be
19385 deduced from a pointer to function or pointer
19386 to member function argument if the set of
19387 overloaded functions does not contain function
19388 templates and at most one of a set of
19389 overloaded functions provides a unique
19390 match. */
19391 resolve_overloaded_unification (tparms, targs, parm,
19392 arg, strict,
19393 arg_strict, explain_p);
19394 /* If a unique match was not found, this is a
19395 non-deduced context, so we still succeed. */
19396 return unify_success (explain_p);
19397 }
19398
19399 arg_expr = arg;
19400 arg = unlowered_expr_type (arg);
19401 if (arg == error_mark_node)
19402 return unify_invalid (explain_p);
19403 }
19404
19405 arg_strict |=
19406 maybe_adjust_types_for_deduction (strict, &parm, &arg, arg_expr);
19407 }
19408 else
19409 if ((TYPE_P (parm) || TREE_CODE (parm) == TEMPLATE_DECL)
19410 != (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL))
19411 return unify_template_argument_mismatch (explain_p, parm, arg);
19412
19413 /* For deduction from an init-list we need the actual list. */
19414 if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
19415 arg = arg_expr;
19416 return unify (tparms, targs, parm, arg, arg_strict, explain_p);
19417 }
19418
19419 /* for_each_template_parm callback that always returns 0. */
19420
19421 static int
19422 zero_r (tree, void *)
19423 {
19424 return 0;
19425 }
19426
19427 /* for_each_template_parm any_fn callback to handle deduction of a template
19428 type argument from the type of an array bound. */
19429
19430 static int
19431 array_deduction_r (tree t, void *data)
19432 {
19433 tree_pair_p d = (tree_pair_p)data;
19434 tree &tparms = d->purpose;
19435 tree &targs = d->value;
19436
19437 if (TREE_CODE (t) == ARRAY_TYPE)
19438 if (tree dom = TYPE_DOMAIN (t))
19439 if (tree max = TYPE_MAX_VALUE (dom))
19440 {
19441 if (TREE_CODE (max) == MINUS_EXPR)
19442 max = TREE_OPERAND (max, 0);
19443 if (TREE_CODE (max) == TEMPLATE_PARM_INDEX)
19444 unify (tparms, targs, TREE_TYPE (max), size_type_node,
19445 UNIFY_ALLOW_NONE, /*explain*/false);
19446 }
19447
19448 /* Keep walking. */
19449 return 0;
19450 }
19451
19452 /* Try to deduce any not-yet-deduced template type arguments from the type of
19453 an array bound. This is handled separately from unify because 14.8.2.5 says
19454 "The type of a type parameter is only deduced from an array bound if it is
19455 not otherwise deduced." */
19456
19457 static void
19458 try_array_deduction (tree tparms, tree targs, tree parm)
19459 {
19460 tree_pair_s data = { tparms, targs };
19461 hash_set<tree> visited;
19462 for_each_template_parm (parm, zero_r, &data, &visited,
19463 /*nondeduced*/false, array_deduction_r);
19464 }
19465
19466 /* Most parms like fn_type_unification.
19467
19468 If SUBR is 1, we're being called recursively (to unify the
19469 arguments of a function or method parameter of a function
19470 template).
19471
19472 CHECKS is a pointer to a vector of access checks encountered while
19473 substituting default template arguments. */
19474
19475 static int
19476 type_unification_real (tree tparms,
19477 tree full_targs,
19478 tree xparms,
19479 const tree *xargs,
19480 unsigned int xnargs,
19481 int subr,
19482 unification_kind_t strict,
19483 int flags,
19484 vec<deferred_access_check, va_gc> **checks,
19485 bool explain_p)
19486 {
19487 tree parm, arg;
19488 int i;
19489 int ntparms = TREE_VEC_LENGTH (tparms);
19490 int saw_undeduced = 0;
19491 tree parms;
19492 const tree *args;
19493 unsigned int nargs;
19494 unsigned int ia;
19495
19496 gcc_assert (TREE_CODE (tparms) == TREE_VEC);
19497 gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
19498 gcc_assert (ntparms > 0);
19499
19500 tree targs = INNERMOST_TEMPLATE_ARGS (full_targs);
19501
19502 /* Reset the number of non-defaulted template arguments contained
19503 in TARGS. */
19504 NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
19505
19506 again:
19507 parms = xparms;
19508 args = xargs;
19509 nargs = xnargs;
19510
19511 ia = 0;
19512 while (parms && parms != void_list_node
19513 && ia < nargs)
19514 {
19515 parm = TREE_VALUE (parms);
19516
19517 if (TREE_CODE (parm) == TYPE_PACK_EXPANSION
19518 && (!TREE_CHAIN (parms) || TREE_CHAIN (parms) == void_list_node))
19519 /* For a function parameter pack that occurs at the end of the
19520 parameter-declaration-list, the type A of each remaining
19521 argument of the call is compared with the type P of the
19522 declarator-id of the function parameter pack. */
19523 break;
19524
19525 parms = TREE_CHAIN (parms);
19526
19527 if (TREE_CODE (parm) == TYPE_PACK_EXPANSION)
19528 /* For a function parameter pack that does not occur at the
19529 end of the parameter-declaration-list, the type of the
19530 parameter pack is a non-deduced context. */
19531 continue;
19532
19533 arg = args[ia];
19534 ++ia;
19535
19536 if (unify_one_argument (tparms, full_targs, parm, arg, subr, strict,
19537 explain_p))
19538 return 1;
19539 }
19540
19541 if (parms
19542 && parms != void_list_node
19543 && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
19544 {
19545 /* Unify the remaining arguments with the pack expansion type. */
19546 tree argvec;
19547 tree parmvec = make_tree_vec (1);
19548
19549 /* Allocate a TREE_VEC and copy in all of the arguments */
19550 argvec = make_tree_vec (nargs - ia);
19551 for (i = 0; ia < nargs; ++ia, ++i)
19552 TREE_VEC_ELT (argvec, i) = args[ia];
19553
19554 /* Copy the parameter into parmvec. */
19555 TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
19556 if (unify_pack_expansion (tparms, full_targs, parmvec, argvec, strict,
19557 /*subr=*/subr, explain_p))
19558 return 1;
19559
19560 /* Advance to the end of the list of parameters. */
19561 parms = TREE_CHAIN (parms);
19562 }
19563
19564 /* Fail if we've reached the end of the parm list, and more args
19565 are present, and the parm list isn't variadic. */
19566 if (ia < nargs && parms == void_list_node)
19567 return unify_too_many_arguments (explain_p, nargs, ia);
19568 /* Fail if parms are left and they don't have default values and
19569 they aren't all deduced as empty packs (c++/57397). This is
19570 consistent with sufficient_parms_p. */
19571 if (parms && parms != void_list_node
19572 && TREE_PURPOSE (parms) == NULL_TREE)
19573 {
19574 unsigned int count = nargs;
19575 tree p = parms;
19576 bool type_pack_p;
19577 do
19578 {
19579 type_pack_p = TREE_CODE (TREE_VALUE (p)) == TYPE_PACK_EXPANSION;
19580 if (!type_pack_p)
19581 count++;
19582 p = TREE_CHAIN (p);
19583 }
19584 while (p && p != void_list_node);
19585 if (count != nargs)
19586 return unify_too_few_arguments (explain_p, ia, count,
19587 type_pack_p);
19588 }
19589
19590 if (!subr)
19591 {
19592 tsubst_flags_t complain = (explain_p
19593 ? tf_warning_or_error
19594 : tf_none);
19595 bool tried_array_deduction = (cxx_dialect < cxx17);
19596
19597 for (i = 0; i < ntparms; i++)
19598 {
19599 tree targ = TREE_VEC_ELT (targs, i);
19600 tree tparm = TREE_VEC_ELT (tparms, i);
19601
19602 /* Clear the "incomplete" flags on all argument packs now so that
19603 substituting them into later default arguments works. */
19604 if (targ && ARGUMENT_PACK_P (targ))
19605 {
19606 ARGUMENT_PACK_INCOMPLETE_P (targ) = 0;
19607 ARGUMENT_PACK_EXPLICIT_ARGS (targ) = NULL_TREE;
19608 }
19609
19610 if (targ || tparm == error_mark_node)
19611 continue;
19612 tparm = TREE_VALUE (tparm);
19613
19614 if (TREE_CODE (tparm) == TYPE_DECL
19615 && !tried_array_deduction)
19616 {
19617 try_array_deduction (tparms, targs, xparms);
19618 tried_array_deduction = true;
19619 if (TREE_VEC_ELT (targs, i))
19620 continue;
19621 }
19622
19623 /* If this is an undeduced nontype parameter that depends on
19624 a type parameter, try another pass; its type may have been
19625 deduced from a later argument than the one from which
19626 this parameter can be deduced. */
19627 if (TREE_CODE (tparm) == PARM_DECL
19628 && uses_template_parms (TREE_TYPE (tparm))
19629 && saw_undeduced < 2)
19630 {
19631 saw_undeduced = 1;
19632 continue;
19633 }
19634
19635 /* Core issue #226 (C++0x) [temp.deduct]:
19636
19637 If a template argument has not been deduced, its
19638 default template argument, if any, is used.
19639
19640 When we are in C++98 mode, TREE_PURPOSE will either
19641 be NULL_TREE or ERROR_MARK_NODE, so we do not need
19642 to explicitly check cxx_dialect here. */
19643 if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
19644 /* OK, there is a default argument. Wait until after the
19645 conversion check to do substitution. */
19646 continue;
19647
19648 /* If the type parameter is a parameter pack, then it will
19649 be deduced to an empty parameter pack. */
19650 if (template_parameter_pack_p (tparm))
19651 {
19652 tree arg;
19653
19654 if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
19655 {
19656 arg = make_node (NONTYPE_ARGUMENT_PACK);
19657 TREE_CONSTANT (arg) = 1;
19658 }
19659 else
19660 arg = cxx_make_type (TYPE_ARGUMENT_PACK);
19661
19662 SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
19663
19664 TREE_VEC_ELT (targs, i) = arg;
19665 continue;
19666 }
19667
19668 return unify_parameter_deduction_failure (explain_p, tparm);
19669 }
19670
19671 /* DR 1391: All parameters have args, now check non-dependent parms for
19672 convertibility. */
19673 if (saw_undeduced < 2)
19674 for (ia = 0, parms = xparms, args = xargs, nargs = xnargs;
19675 parms && parms != void_list_node && ia < nargs; )
19676 {
19677 parm = TREE_VALUE (parms);
19678
19679 if (TREE_CODE (parm) == TYPE_PACK_EXPANSION
19680 && (!TREE_CHAIN (parms)
19681 || TREE_CHAIN (parms) == void_list_node))
19682 /* For a function parameter pack that occurs at the end of the
19683 parameter-declaration-list, the type A of each remaining
19684 argument of the call is compared with the type P of the
19685 declarator-id of the function parameter pack. */
19686 break;
19687
19688 parms = TREE_CHAIN (parms);
19689
19690 if (TREE_CODE (parm) == TYPE_PACK_EXPANSION)
19691 /* For a function parameter pack that does not occur at the
19692 end of the parameter-declaration-list, the type of the
19693 parameter pack is a non-deduced context. */
19694 continue;
19695
19696 arg = args[ia];
19697 ++ia;
19698
19699 if (uses_template_parms (parm))
19700 continue;
19701 if (check_non_deducible_conversion (parm, arg, strict, flags,
19702 explain_p))
19703 return 1;
19704 }
19705
19706 /* Now substitute into the default template arguments. */
19707 for (i = 0; i < ntparms; i++)
19708 {
19709 tree targ = TREE_VEC_ELT (targs, i);
19710 tree tparm = TREE_VEC_ELT (tparms, i);
19711
19712 if (targ || tparm == error_mark_node)
19713 continue;
19714 tree parm = TREE_VALUE (tparm);
19715
19716 if (TREE_CODE (parm) == PARM_DECL
19717 && uses_template_parms (TREE_TYPE (parm))
19718 && saw_undeduced < 2)
19719 continue;
19720
19721 tree arg = TREE_PURPOSE (tparm);
19722 reopen_deferring_access_checks (*checks);
19723 location_t save_loc = input_location;
19724 if (DECL_P (parm))
19725 input_location = DECL_SOURCE_LOCATION (parm);
19726 arg = tsubst_template_arg (arg, full_targs, complain, NULL_TREE);
19727 if (!uses_template_parms (arg))
19728 arg = convert_template_argument (parm, arg, full_targs, complain,
19729 i, NULL_TREE);
19730 else if (saw_undeduced < 2)
19731 arg = NULL_TREE;
19732 else
19733 arg = error_mark_node;
19734 input_location = save_loc;
19735 *checks = get_deferred_access_checks ();
19736 pop_deferring_access_checks ();
19737 if (arg == error_mark_node)
19738 return 1;
19739 else if (arg)
19740 {
19741 TREE_VEC_ELT (targs, i) = arg;
19742 /* The position of the first default template argument,
19743 is also the number of non-defaulted arguments in TARGS.
19744 Record that. */
19745 if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
19746 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
19747 }
19748 }
19749
19750 if (saw_undeduced++ == 1)
19751 goto again;
19752 }
19753
19754 if (CHECKING_P && !NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
19755 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
19756
19757 return unify_success (explain_p);
19758 }
19759
19760 /* Subroutine of type_unification_real. Args are like the variables
19761 at the call site. ARG is an overloaded function (or template-id);
19762 we try deducing template args from each of the overloads, and if
19763 only one succeeds, we go with that. Modifies TARGS and returns
19764 true on success. */
19765
19766 static bool
19767 resolve_overloaded_unification (tree tparms,
19768 tree targs,
19769 tree parm,
19770 tree arg,
19771 unification_kind_t strict,
19772 int sub_strict,
19773 bool explain_p)
19774 {
19775 tree tempargs = copy_node (targs);
19776 int good = 0;
19777 tree goodfn = NULL_TREE;
19778 bool addr_p;
19779
19780 if (TREE_CODE (arg) == ADDR_EXPR)
19781 {
19782 arg = TREE_OPERAND (arg, 0);
19783 addr_p = true;
19784 }
19785 else
19786 addr_p = false;
19787
19788 if (TREE_CODE (arg) == COMPONENT_REF)
19789 /* Handle `&x' where `x' is some static or non-static member
19790 function name. */
19791 arg = TREE_OPERAND (arg, 1);
19792
19793 if (TREE_CODE (arg) == OFFSET_REF)
19794 arg = TREE_OPERAND (arg, 1);
19795
19796 /* Strip baselink information. */
19797 if (BASELINK_P (arg))
19798 arg = BASELINK_FUNCTIONS (arg);
19799
19800 if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
19801 {
19802 /* If we got some explicit template args, we need to plug them into
19803 the affected templates before we try to unify, in case the
19804 explicit args will completely resolve the templates in question. */
19805
19806 int ok = 0;
19807 tree expl_subargs = TREE_OPERAND (arg, 1);
19808 arg = TREE_OPERAND (arg, 0);
19809
19810 for (lkp_iterator iter (arg); iter; ++iter)
19811 {
19812 tree fn = *iter;
19813 tree subargs, elem;
19814
19815 if (TREE_CODE (fn) != TEMPLATE_DECL)
19816 continue;
19817
19818 subargs = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
19819 expl_subargs, NULL_TREE, tf_none,
19820 /*require_all_args=*/true,
19821 /*use_default_args=*/true);
19822 if (subargs != error_mark_node
19823 && !any_dependent_template_arguments_p (subargs))
19824 {
19825 elem = TREE_TYPE (instantiate_template (fn, subargs, tf_none));
19826 if (try_one_overload (tparms, targs, tempargs, parm,
19827 elem, strict, sub_strict, addr_p, explain_p)
19828 && (!goodfn || !same_type_p (goodfn, elem)))
19829 {
19830 goodfn = elem;
19831 ++good;
19832 }
19833 }
19834 else if (subargs)
19835 ++ok;
19836 }
19837 /* If no templates (or more than one) are fully resolved by the
19838 explicit arguments, this template-id is a non-deduced context; it
19839 could still be OK if we deduce all template arguments for the
19840 enclosing call through other arguments. */
19841 if (good != 1)
19842 good = ok;
19843 }
19844 else if (TREE_CODE (arg) != OVERLOAD
19845 && TREE_CODE (arg) != FUNCTION_DECL)
19846 /* If ARG is, for example, "(0, &f)" then its type will be unknown
19847 -- but the deduction does not succeed because the expression is
19848 not just the function on its own. */
19849 return false;
19850 else
19851 for (lkp_iterator iter (arg); iter; ++iter)
19852 {
19853 tree fn = *iter;
19854 if (try_one_overload (tparms, targs, tempargs, parm, TREE_TYPE (fn),
19855 strict, sub_strict, addr_p, explain_p)
19856 && (!goodfn || !decls_match (goodfn, fn)))
19857 {
19858 goodfn = fn;
19859 ++good;
19860 }
19861 }
19862
19863 /* [temp.deduct.type] A template-argument can be deduced from a pointer
19864 to function or pointer to member function argument if the set of
19865 overloaded functions does not contain function templates and at most
19866 one of a set of overloaded functions provides a unique match.
19867
19868 So if we found multiple possibilities, we return success but don't
19869 deduce anything. */
19870
19871 if (good == 1)
19872 {
19873 int i = TREE_VEC_LENGTH (targs);
19874 for (; i--; )
19875 if (TREE_VEC_ELT (tempargs, i))
19876 {
19877 tree old = TREE_VEC_ELT (targs, i);
19878 tree new_ = TREE_VEC_ELT (tempargs, i);
19879 if (new_ && old && ARGUMENT_PACK_P (old)
19880 && ARGUMENT_PACK_EXPLICIT_ARGS (old))
19881 /* Don't forget explicit template arguments in a pack. */
19882 ARGUMENT_PACK_EXPLICIT_ARGS (new_)
19883 = ARGUMENT_PACK_EXPLICIT_ARGS (old);
19884 TREE_VEC_ELT (targs, i) = new_;
19885 }
19886 }
19887 if (good)
19888 return true;
19889
19890 return false;
19891 }
19892
19893 /* Core DR 115: In contexts where deduction is done and fails, or in
19894 contexts where deduction is not done, if a template argument list is
19895 specified and it, along with any default template arguments, identifies
19896 a single function template specialization, then the template-id is an
19897 lvalue for the function template specialization. */
19898
19899 tree
19900 resolve_nondeduced_context (tree orig_expr, tsubst_flags_t complain)
19901 {
19902 tree expr, offset, baselink;
19903 bool addr;
19904
19905 if (!type_unknown_p (orig_expr))
19906 return orig_expr;
19907
19908 expr = orig_expr;
19909 addr = false;
19910 offset = NULL_TREE;
19911 baselink = NULL_TREE;
19912
19913 if (TREE_CODE (expr) == ADDR_EXPR)
19914 {
19915 expr = TREE_OPERAND (expr, 0);
19916 addr = true;
19917 }
19918 if (TREE_CODE (expr) == OFFSET_REF)
19919 {
19920 offset = expr;
19921 expr = TREE_OPERAND (expr, 1);
19922 }
19923 if (BASELINK_P (expr))
19924 {
19925 baselink = expr;
19926 expr = BASELINK_FUNCTIONS (expr);
19927 }
19928
19929 if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
19930 {
19931 int good = 0;
19932 tree goodfn = NULL_TREE;
19933
19934 /* If we got some explicit template args, we need to plug them into
19935 the affected templates before we try to unify, in case the
19936 explicit args will completely resolve the templates in question. */
19937
19938 tree expl_subargs = TREE_OPERAND (expr, 1);
19939 tree arg = TREE_OPERAND (expr, 0);
19940 tree badfn = NULL_TREE;
19941 tree badargs = NULL_TREE;
19942
19943 for (lkp_iterator iter (arg); iter; ++iter)
19944 {
19945 tree fn = *iter;
19946 tree subargs, elem;
19947
19948 if (TREE_CODE (fn) != TEMPLATE_DECL)
19949 continue;
19950
19951 subargs = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
19952 expl_subargs, NULL_TREE, tf_none,
19953 /*require_all_args=*/true,
19954 /*use_default_args=*/true);
19955 if (subargs != error_mark_node
19956 && !any_dependent_template_arguments_p (subargs))
19957 {
19958 elem = instantiate_template (fn, subargs, tf_none);
19959 if (elem == error_mark_node)
19960 {
19961 badfn = fn;
19962 badargs = subargs;
19963 }
19964 else if (elem && (!goodfn || !decls_match (goodfn, elem)))
19965 {
19966 goodfn = elem;
19967 ++good;
19968 }
19969 }
19970 }
19971 if (good == 1)
19972 {
19973 mark_used (goodfn);
19974 expr = goodfn;
19975 if (baselink)
19976 expr = build_baselink (BASELINK_BINFO (baselink),
19977 BASELINK_ACCESS_BINFO (baselink),
19978 expr, BASELINK_OPTYPE (baselink));
19979 if (offset)
19980 {
19981 tree base
19982 = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (offset, 0)));
19983 expr = build_offset_ref (base, expr, addr, complain);
19984 }
19985 if (addr)
19986 expr = cp_build_addr_expr (expr, complain);
19987 return expr;
19988 }
19989 else if (good == 0 && badargs && (complain & tf_error))
19990 /* There were no good options and at least one bad one, so let the
19991 user know what the problem is. */
19992 instantiate_template (badfn, badargs, complain);
19993 }
19994 return orig_expr;
19995 }
19996
19997 /* Subroutine of resolve_overloaded_unification; does deduction for a single
19998 overload. Fills TARGS with any deduced arguments, or error_mark_node if
19999 different overloads deduce different arguments for a given parm.
20000 ADDR_P is true if the expression for which deduction is being
20001 performed was of the form "& fn" rather than simply "fn".
20002
20003 Returns 1 on success. */
20004
20005 static int
20006 try_one_overload (tree tparms,
20007 tree orig_targs,
20008 tree targs,
20009 tree parm,
20010 tree arg,
20011 unification_kind_t strict,
20012 int sub_strict,
20013 bool addr_p,
20014 bool explain_p)
20015 {
20016 int nargs;
20017 tree tempargs;
20018 int i;
20019
20020 if (arg == error_mark_node)
20021 return 0;
20022
20023 /* [temp.deduct.type] A template-argument can be deduced from a pointer
20024 to function or pointer to member function argument if the set of
20025 overloaded functions does not contain function templates and at most
20026 one of a set of overloaded functions provides a unique match.
20027
20028 So if this is a template, just return success. */
20029
20030 if (uses_template_parms (arg))
20031 return 1;
20032
20033 if (TREE_CODE (arg) == METHOD_TYPE)
20034 arg = build_ptrmemfunc_type (build_pointer_type (arg));
20035 else if (addr_p)
20036 arg = build_pointer_type (arg);
20037
20038 sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
20039
20040 /* We don't copy orig_targs for this because if we have already deduced
20041 some template args from previous args, unify would complain when we
20042 try to deduce a template parameter for the same argument, even though
20043 there isn't really a conflict. */
20044 nargs = TREE_VEC_LENGTH (targs);
20045 tempargs = make_tree_vec (nargs);
20046
20047 if (unify (tparms, tempargs, parm, arg, sub_strict, explain_p))
20048 return 0;
20049
20050 /* First make sure we didn't deduce anything that conflicts with
20051 explicitly specified args. */
20052 for (i = nargs; i--; )
20053 {
20054 tree elt = TREE_VEC_ELT (tempargs, i);
20055 tree oldelt = TREE_VEC_ELT (orig_targs, i);
20056
20057 if (!elt)
20058 /*NOP*/;
20059 else if (uses_template_parms (elt))
20060 /* Since we're unifying against ourselves, we will fill in
20061 template args used in the function parm list with our own
20062 template parms. Discard them. */
20063 TREE_VEC_ELT (tempargs, i) = NULL_TREE;
20064 else if (oldelt && ARGUMENT_PACK_P (oldelt))
20065 {
20066 /* Check that the argument at each index of the deduced argument pack
20067 is equivalent to the corresponding explicitly specified argument.
20068 We may have deduced more arguments than were explicitly specified,
20069 and that's OK. */
20070
20071 /* We used to assert ARGUMENT_PACK_INCOMPLETE_P (oldelt) here, but
20072 that's wrong if we deduce the same argument pack from multiple
20073 function arguments: it's only incomplete the first time. */
20074
20075 tree explicit_pack = ARGUMENT_PACK_ARGS (oldelt);
20076 tree deduced_pack = ARGUMENT_PACK_ARGS (elt);
20077
20078 if (TREE_VEC_LENGTH (deduced_pack)
20079 < TREE_VEC_LENGTH (explicit_pack))
20080 return 0;
20081
20082 for (int j = 0; j < TREE_VEC_LENGTH (explicit_pack); j++)
20083 if (!template_args_equal (TREE_VEC_ELT (explicit_pack, j),
20084 TREE_VEC_ELT (deduced_pack, j)))
20085 return 0;
20086 }
20087 else if (oldelt && !template_args_equal (oldelt, elt))
20088 return 0;
20089 }
20090
20091 for (i = nargs; i--; )
20092 {
20093 tree elt = TREE_VEC_ELT (tempargs, i);
20094
20095 if (elt)
20096 TREE_VEC_ELT (targs, i) = elt;
20097 }
20098
20099 return 1;
20100 }
20101
20102 /* PARM is a template class (perhaps with unbound template
20103 parameters). ARG is a fully instantiated type. If ARG can be
20104 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
20105 TARGS are as for unify. */
20106
20107 static tree
20108 try_class_unification (tree tparms, tree targs, tree parm, tree arg,
20109 bool explain_p)
20110 {
20111 tree copy_of_targs;
20112
20113 if (!CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
20114 return NULL_TREE;
20115 else if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
20116 /* Matches anything. */;
20117 else if (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
20118 != most_general_template (CLASSTYPE_TI_TEMPLATE (parm)))
20119 return NULL_TREE;
20120
20121 /* We need to make a new template argument vector for the call to
20122 unify. If we used TARGS, we'd clutter it up with the result of
20123 the attempted unification, even if this class didn't work out.
20124 We also don't want to commit ourselves to all the unifications
20125 we've already done, since unification is supposed to be done on
20126 an argument-by-argument basis. In other words, consider the
20127 following pathological case:
20128
20129 template <int I, int J, int K>
20130 struct S {};
20131
20132 template <int I, int J>
20133 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
20134
20135 template <int I, int J, int K>
20136 void f(S<I, J, K>, S<I, I, I>);
20137
20138 void g() {
20139 S<0, 0, 0> s0;
20140 S<0, 1, 2> s2;
20141
20142 f(s0, s2);
20143 }
20144
20145 Now, by the time we consider the unification involving `s2', we
20146 already know that we must have `f<0, 0, 0>'. But, even though
20147 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
20148 because there are two ways to unify base classes of S<0, 1, 2>
20149 with S<I, I, I>. If we kept the already deduced knowledge, we
20150 would reject the possibility I=1. */
20151 copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
20152
20153 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
20154 {
20155 if (unify_bound_ttp_args (tparms, copy_of_targs, parm, arg, explain_p))
20156 return NULL_TREE;
20157 return arg;
20158 }
20159
20160 /* If unification failed, we're done. */
20161 if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
20162 CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE, explain_p))
20163 return NULL_TREE;
20164
20165 return arg;
20166 }
20167
20168 /* Given a template type PARM and a class type ARG, find the unique
20169 base type in ARG that is an instance of PARM. We do not examine
20170 ARG itself; only its base-classes. If there is not exactly one
20171 appropriate base class, return NULL_TREE. PARM may be the type of
20172 a partial specialization, as well as a plain template type. Used
20173 by unify. */
20174
20175 static enum template_base_result
20176 get_template_base (tree tparms, tree targs, tree parm, tree arg,
20177 bool explain_p, tree *result)
20178 {
20179 tree rval = NULL_TREE;
20180 tree binfo;
20181
20182 gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
20183
20184 binfo = TYPE_BINFO (complete_type (arg));
20185 if (!binfo)
20186 {
20187 /* The type could not be completed. */
20188 *result = NULL_TREE;
20189 return tbr_incomplete_type;
20190 }
20191
20192 /* Walk in inheritance graph order. The search order is not
20193 important, and this avoids multiple walks of virtual bases. */
20194 for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
20195 {
20196 tree r = try_class_unification (tparms, targs, parm,
20197 BINFO_TYPE (binfo), explain_p);
20198
20199 if (r)
20200 {
20201 /* If there is more than one satisfactory baseclass, then:
20202
20203 [temp.deduct.call]
20204
20205 If they yield more than one possible deduced A, the type
20206 deduction fails.
20207
20208 applies. */
20209 if (rval && !same_type_p (r, rval))
20210 {
20211 *result = NULL_TREE;
20212 return tbr_ambiguous_baseclass;
20213 }
20214
20215 rval = r;
20216 }
20217 }
20218
20219 *result = rval;
20220 return tbr_success;
20221 }
20222
20223 /* Returns the level of DECL, which declares a template parameter. */
20224
20225 static int
20226 template_decl_level (tree decl)
20227 {
20228 switch (TREE_CODE (decl))
20229 {
20230 case TYPE_DECL:
20231 case TEMPLATE_DECL:
20232 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
20233
20234 case PARM_DECL:
20235 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
20236
20237 default:
20238 gcc_unreachable ();
20239 }
20240 return 0;
20241 }
20242
20243 /* Decide whether ARG can be unified with PARM, considering only the
20244 cv-qualifiers of each type, given STRICT as documented for unify.
20245 Returns nonzero iff the unification is OK on that basis. */
20246
20247 static int
20248 check_cv_quals_for_unify (int strict, tree arg, tree parm)
20249 {
20250 int arg_quals = cp_type_quals (arg);
20251 int parm_quals = cp_type_quals (parm);
20252
20253 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
20254 && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
20255 {
20256 /* Although a CVR qualifier is ignored when being applied to a
20257 substituted template parameter ([8.3.2]/1 for example), that
20258 does not allow us to unify "const T" with "int&" because both
20259 types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
20260 It is ok when we're allowing additional CV qualifiers
20261 at the outer level [14.8.2.1]/3,1st bullet. */
20262 if ((TREE_CODE (arg) == REFERENCE_TYPE
20263 || TREE_CODE (arg) == FUNCTION_TYPE
20264 || TREE_CODE (arg) == METHOD_TYPE)
20265 && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
20266 return 0;
20267
20268 if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
20269 && (parm_quals & TYPE_QUAL_RESTRICT))
20270 return 0;
20271 }
20272
20273 if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
20274 && (arg_quals & parm_quals) != parm_quals)
20275 return 0;
20276
20277 if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
20278 && (parm_quals & arg_quals) != arg_quals)
20279 return 0;
20280
20281 return 1;
20282 }
20283
20284 /* Determines the LEVEL and INDEX for the template parameter PARM. */
20285 void
20286 template_parm_level_and_index (tree parm, int* level, int* index)
20287 {
20288 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
20289 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
20290 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
20291 {
20292 *index = TEMPLATE_TYPE_IDX (parm);
20293 *level = TEMPLATE_TYPE_LEVEL (parm);
20294 }
20295 else
20296 {
20297 *index = TEMPLATE_PARM_IDX (parm);
20298 *level = TEMPLATE_PARM_LEVEL (parm);
20299 }
20300 }
20301
20302 #define RECUR_AND_CHECK_FAILURE(TP, TA, P, A, S, EP) \
20303 do { \
20304 if (unify (TP, TA, P, A, S, EP)) \
20305 return 1; \
20306 } while (0)
20307
20308 /* Unifies the remaining arguments in PACKED_ARGS with the pack
20309 expansion at the end of PACKED_PARMS. Returns 0 if the type
20310 deduction succeeds, 1 otherwise. STRICT is the same as in
20311 fn_type_unification. CALL_ARGS_P is true iff PACKED_ARGS is actually a
20312 function call argument list. We'll need to adjust the arguments to make them
20313 types. SUBR tells us if this is from a recursive call to
20314 type_unification_real, or for comparing two template argument
20315 lists. */
20316
20317 static int
20318 unify_pack_expansion (tree tparms, tree targs, tree packed_parms,
20319 tree packed_args, unification_kind_t strict,
20320 bool subr, bool explain_p)
20321 {
20322 tree parm
20323 = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
20324 tree pattern = PACK_EXPANSION_PATTERN (parm);
20325 tree pack, packs = NULL_TREE;
20326 int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
20327
20328 /* Add in any args remembered from an earlier partial instantiation. */
20329 targs = add_to_template_args (PACK_EXPANSION_EXTRA_ARGS (parm), targs);
20330
20331 packed_args = expand_template_argument_pack (packed_args);
20332
20333 int len = TREE_VEC_LENGTH (packed_args);
20334
20335 /* Determine the parameter packs we will be deducing from the
20336 pattern, and record their current deductions. */
20337 for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm);
20338 pack; pack = TREE_CHAIN (pack))
20339 {
20340 tree parm_pack = TREE_VALUE (pack);
20341 int idx, level;
20342
20343 /* Determine the index and level of this parameter pack. */
20344 template_parm_level_and_index (parm_pack, &level, &idx);
20345
20346 /* Keep track of the parameter packs and their corresponding
20347 argument packs. */
20348 packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
20349 TREE_TYPE (packs) = make_tree_vec (len - start);
20350 }
20351
20352 /* Loop through all of the arguments that have not yet been
20353 unified and unify each with the pattern. */
20354 for (i = start; i < len; i++)
20355 {
20356 tree parm;
20357 bool any_explicit = false;
20358 tree arg = TREE_VEC_ELT (packed_args, i);
20359
20360 /* For each parameter pack, set its TMPL_ARG to either NULL_TREE
20361 or the element of its argument pack at the current index if
20362 this argument was explicitly specified. */
20363 for (pack = packs; pack; pack = TREE_CHAIN (pack))
20364 {
20365 int idx, level;
20366 tree arg, pargs;
20367 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
20368
20369 arg = NULL_TREE;
20370 if (TREE_VALUE (pack)
20371 && (pargs = ARGUMENT_PACK_EXPLICIT_ARGS (TREE_VALUE (pack)))
20372 && (i - start < TREE_VEC_LENGTH (pargs)))
20373 {
20374 any_explicit = true;
20375 arg = TREE_VEC_ELT (pargs, i - start);
20376 }
20377 TMPL_ARG (targs, level, idx) = arg;
20378 }
20379
20380 /* If we had explicit template arguments, substitute them into the
20381 pattern before deduction. */
20382 if (any_explicit)
20383 {
20384 /* Some arguments might still be unspecified or dependent. */
20385 bool dependent;
20386 ++processing_template_decl;
20387 dependent = any_dependent_template_arguments_p (targs);
20388 if (!dependent)
20389 --processing_template_decl;
20390 parm = tsubst (pattern, targs,
20391 explain_p ? tf_warning_or_error : tf_none,
20392 NULL_TREE);
20393 if (dependent)
20394 --processing_template_decl;
20395 if (parm == error_mark_node)
20396 return 1;
20397 }
20398 else
20399 parm = pattern;
20400
20401 /* Unify the pattern with the current argument. */
20402 if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
20403 explain_p))
20404 return 1;
20405
20406 /* For each parameter pack, collect the deduced value. */
20407 for (pack = packs; pack; pack = TREE_CHAIN (pack))
20408 {
20409 int idx, level;
20410 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
20411
20412 TREE_VEC_ELT (TREE_TYPE (pack), i - start) =
20413 TMPL_ARG (targs, level, idx);
20414 }
20415 }
20416
20417 /* Verify that the results of unification with the parameter packs
20418 produce results consistent with what we've seen before, and make
20419 the deduced argument packs available. */
20420 for (pack = packs; pack; pack = TREE_CHAIN (pack))
20421 {
20422 tree old_pack = TREE_VALUE (pack);
20423 tree new_args = TREE_TYPE (pack);
20424 int i, len = TREE_VEC_LENGTH (new_args);
20425 int idx, level;
20426 bool nondeduced_p = false;
20427
20428 /* By default keep the original deduced argument pack.
20429 If necessary, more specific code is going to update the
20430 resulting deduced argument later down in this function. */
20431 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
20432 TMPL_ARG (targs, level, idx) = old_pack;
20433
20434 /* If NEW_ARGS contains any NULL_TREE entries, we didn't
20435 actually deduce anything. */
20436 for (i = 0; i < len && !nondeduced_p; ++i)
20437 if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
20438 nondeduced_p = true;
20439 if (nondeduced_p)
20440 continue;
20441
20442 if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
20443 {
20444 /* If we had fewer function args than explicit template args,
20445 just use the explicits. */
20446 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
20447 int explicit_len = TREE_VEC_LENGTH (explicit_args);
20448 if (len < explicit_len)
20449 new_args = explicit_args;
20450 }
20451
20452 if (!old_pack)
20453 {
20454 tree result;
20455 /* Build the deduced *_ARGUMENT_PACK. */
20456 if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
20457 {
20458 result = make_node (NONTYPE_ARGUMENT_PACK);
20459 TREE_CONSTANT (result) = 1;
20460 }
20461 else
20462 result = cxx_make_type (TYPE_ARGUMENT_PACK);
20463
20464 SET_ARGUMENT_PACK_ARGS (result, new_args);
20465
20466 /* Note the deduced argument packs for this parameter
20467 pack. */
20468 TMPL_ARG (targs, level, idx) = result;
20469 }
20470 else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
20471 && (ARGUMENT_PACK_ARGS (old_pack)
20472 == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
20473 {
20474 /* We only had the explicitly-provided arguments before, but
20475 now we have a complete set of arguments. */
20476 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
20477
20478 SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
20479 ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
20480 ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
20481 }
20482 else
20483 {
20484 tree bad_old_arg = NULL_TREE, bad_new_arg = NULL_TREE;
20485 tree old_args = ARGUMENT_PACK_ARGS (old_pack);
20486
20487 if (!comp_template_args (old_args, new_args,
20488 &bad_old_arg, &bad_new_arg))
20489 /* Inconsistent unification of this parameter pack. */
20490 return unify_parameter_pack_inconsistent (explain_p,
20491 bad_old_arg,
20492 bad_new_arg);
20493 }
20494 }
20495
20496 return unify_success (explain_p);
20497 }
20498
20499 /* Handle unification of the domain of an array. PARM_DOM and ARG_DOM are
20500 INTEGER_TYPEs representing the TYPE_DOMAIN of ARRAY_TYPEs. The other
20501 parameters and return value are as for unify. */
20502
20503 static int
20504 unify_array_domain (tree tparms, tree targs,
20505 tree parm_dom, tree arg_dom,
20506 bool explain_p)
20507 {
20508 tree parm_max;
20509 tree arg_max;
20510 bool parm_cst;
20511 bool arg_cst;
20512
20513 /* Our representation of array types uses "N - 1" as the
20514 TYPE_MAX_VALUE for an array with "N" elements, if "N" is
20515 not an integer constant. We cannot unify arbitrarily
20516 complex expressions, so we eliminate the MINUS_EXPRs
20517 here. */
20518 parm_max = TYPE_MAX_VALUE (parm_dom);
20519 parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
20520 if (!parm_cst)
20521 {
20522 gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
20523 parm_max = TREE_OPERAND (parm_max, 0);
20524 }
20525 arg_max = TYPE_MAX_VALUE (arg_dom);
20526 arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
20527 if (!arg_cst)
20528 {
20529 /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
20530 trying to unify the type of a variable with the type
20531 of a template parameter. For example:
20532
20533 template <unsigned int N>
20534 void f (char (&) [N]);
20535 int g();
20536 void h(int i) {
20537 char a[g(i)];
20538 f(a);
20539 }
20540
20541 Here, the type of the ARG will be "int [g(i)]", and
20542 may be a SAVE_EXPR, etc. */
20543 if (TREE_CODE (arg_max) != MINUS_EXPR)
20544 return unify_vla_arg (explain_p, arg_dom);
20545 arg_max = TREE_OPERAND (arg_max, 0);
20546 }
20547
20548 /* If only one of the bounds used a MINUS_EXPR, compensate
20549 by adding one to the other bound. */
20550 if (parm_cst && !arg_cst)
20551 parm_max = fold_build2_loc (input_location, PLUS_EXPR,
20552 integer_type_node,
20553 parm_max,
20554 integer_one_node);
20555 else if (arg_cst && !parm_cst)
20556 arg_max = fold_build2_loc (input_location, PLUS_EXPR,
20557 integer_type_node,
20558 arg_max,
20559 integer_one_node);
20560
20561 return unify (tparms, targs, parm_max, arg_max,
20562 UNIFY_ALLOW_INTEGER, explain_p);
20563 }
20564
20565 /* Returns whether T, a P or A in unify, is a type, template or expression. */
20566
20567 enum pa_kind_t { pa_type, pa_tmpl, pa_expr };
20568
20569 static pa_kind_t
20570 pa_kind (tree t)
20571 {
20572 if (PACK_EXPANSION_P (t))
20573 t = PACK_EXPANSION_PATTERN (t);
20574 if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
20575 || TREE_CODE (t) == UNBOUND_CLASS_TEMPLATE
20576 || DECL_TYPE_TEMPLATE_P (t))
20577 return pa_tmpl;
20578 else if (TYPE_P (t))
20579 return pa_type;
20580 else
20581 return pa_expr;
20582 }
20583
20584 /* Deduce the value of template parameters. TPARMS is the (innermost)
20585 set of template parameters to a template. TARGS is the bindings
20586 for those template parameters, as determined thus far; TARGS may
20587 include template arguments for outer levels of template parameters
20588 as well. PARM is a parameter to a template function, or a
20589 subcomponent of that parameter; ARG is the corresponding argument.
20590 This function attempts to match PARM with ARG in a manner
20591 consistent with the existing assignments in TARGS. If more values
20592 are deduced, then TARGS is updated.
20593
20594 Returns 0 if the type deduction succeeds, 1 otherwise. The
20595 parameter STRICT is a bitwise or of the following flags:
20596
20597 UNIFY_ALLOW_NONE:
20598 Require an exact match between PARM and ARG.
20599 UNIFY_ALLOW_MORE_CV_QUAL:
20600 Allow the deduced ARG to be more cv-qualified (by qualification
20601 conversion) than ARG.
20602 UNIFY_ALLOW_LESS_CV_QUAL:
20603 Allow the deduced ARG to be less cv-qualified than ARG.
20604 UNIFY_ALLOW_DERIVED:
20605 Allow the deduced ARG to be a template base class of ARG,
20606 or a pointer to a template base class of the type pointed to by
20607 ARG.
20608 UNIFY_ALLOW_INTEGER:
20609 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
20610 case for more information.
20611 UNIFY_ALLOW_OUTER_LEVEL:
20612 This is the outermost level of a deduction. Used to determine validity
20613 of qualification conversions. A valid qualification conversion must
20614 have const qualified pointers leading up to the inner type which
20615 requires additional CV quals, except at the outer level, where const
20616 is not required [conv.qual]. It would be normal to set this flag in
20617 addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
20618 UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
20619 This is the outermost level of a deduction, and PARM can be more CV
20620 qualified at this point.
20621 UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
20622 This is the outermost level of a deduction, and PARM can be less CV
20623 qualified at this point. */
20624
20625 static int
20626 unify (tree tparms, tree targs, tree parm, tree arg, int strict,
20627 bool explain_p)
20628 {
20629 int idx;
20630 tree targ;
20631 tree tparm;
20632 int strict_in = strict;
20633 tsubst_flags_t complain = (explain_p
20634 ? tf_warning_or_error
20635 : tf_none);
20636
20637 /* I don't think this will do the right thing with respect to types.
20638 But the only case I've seen it in so far has been array bounds, where
20639 signedness is the only information lost, and I think that will be
20640 okay. */
20641 while (CONVERT_EXPR_P (parm))
20642 parm = TREE_OPERAND (parm, 0);
20643
20644 if (arg == error_mark_node)
20645 return unify_invalid (explain_p);
20646 if (arg == unknown_type_node
20647 || arg == init_list_type_node)
20648 /* We can't deduce anything from this, but we might get all the
20649 template args from other function args. */
20650 return unify_success (explain_p);
20651
20652 if (parm == any_targ_node || arg == any_targ_node)
20653 return unify_success (explain_p);
20654
20655 /* If PARM uses template parameters, then we can't bail out here,
20656 even if ARG == PARM, since we won't record unifications for the
20657 template parameters. We might need them if we're trying to
20658 figure out which of two things is more specialized. */
20659 if (arg == parm && !uses_template_parms (parm))
20660 return unify_success (explain_p);
20661
20662 /* Handle init lists early, so the rest of the function can assume
20663 we're dealing with a type. */
20664 if (BRACE_ENCLOSED_INITIALIZER_P (arg))
20665 {
20666 tree elt, elttype;
20667 unsigned i;
20668 tree orig_parm = parm;
20669
20670 /* Replace T with std::initializer_list<T> for deduction. */
20671 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
20672 && flag_deduce_init_list)
20673 parm = listify (parm);
20674
20675 if (!is_std_init_list (parm)
20676 && TREE_CODE (parm) != ARRAY_TYPE)
20677 /* We can only deduce from an initializer list argument if the
20678 parameter is std::initializer_list or an array; otherwise this
20679 is a non-deduced context. */
20680 return unify_success (explain_p);
20681
20682 if (TREE_CODE (parm) == ARRAY_TYPE)
20683 elttype = TREE_TYPE (parm);
20684 else
20685 {
20686 elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
20687 /* Deduction is defined in terms of a single type, so just punt
20688 on the (bizarre) std::initializer_list<T...>. */
20689 if (PACK_EXPANSION_P (elttype))
20690 return unify_success (explain_p);
20691 }
20692
20693 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
20694 {
20695 int elt_strict = strict;
20696
20697 if (elt == error_mark_node)
20698 return unify_invalid (explain_p);
20699
20700 if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
20701 {
20702 tree type = TREE_TYPE (elt);
20703 if (type == error_mark_node)
20704 return unify_invalid (explain_p);
20705 /* It should only be possible to get here for a call. */
20706 gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
20707 elt_strict |= maybe_adjust_types_for_deduction
20708 (DEDUCE_CALL, &elttype, &type, elt);
20709 elt = type;
20710 }
20711
20712 RECUR_AND_CHECK_FAILURE (tparms, targs, elttype, elt, elt_strict,
20713 explain_p);
20714 }
20715
20716 if (TREE_CODE (parm) == ARRAY_TYPE
20717 && deducible_array_bound (TYPE_DOMAIN (parm)))
20718 {
20719 /* Also deduce from the length of the initializer list. */
20720 tree max = size_int (CONSTRUCTOR_NELTS (arg));
20721 tree idx = compute_array_index_type (NULL_TREE, max, tf_none);
20722 if (idx == error_mark_node)
20723 return unify_invalid (explain_p);
20724 return unify_array_domain (tparms, targs, TYPE_DOMAIN (parm),
20725 idx, explain_p);
20726 }
20727
20728 /* If the std::initializer_list<T> deduction worked, replace the
20729 deduced A with std::initializer_list<A>. */
20730 if (orig_parm != parm)
20731 {
20732 idx = TEMPLATE_TYPE_IDX (orig_parm);
20733 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
20734 targ = listify (targ);
20735 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
20736 }
20737 return unify_success (explain_p);
20738 }
20739
20740 /* If parm and arg aren't the same kind of thing (template, type, or
20741 expression), fail early. */
20742 if (pa_kind (parm) != pa_kind (arg))
20743 return unify_invalid (explain_p);
20744
20745 /* Immediately reject some pairs that won't unify because of
20746 cv-qualification mismatches. */
20747 if (TREE_CODE (arg) == TREE_CODE (parm)
20748 && TYPE_P (arg)
20749 /* It is the elements of the array which hold the cv quals of an array
20750 type, and the elements might be template type parms. We'll check
20751 when we recurse. */
20752 && TREE_CODE (arg) != ARRAY_TYPE
20753 /* We check the cv-qualifiers when unifying with template type
20754 parameters below. We want to allow ARG `const T' to unify with
20755 PARM `T' for example, when computing which of two templates
20756 is more specialized, for example. */
20757 && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
20758 && !check_cv_quals_for_unify (strict_in, arg, parm))
20759 return unify_cv_qual_mismatch (explain_p, parm, arg);
20760
20761 if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
20762 && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
20763 strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
20764 strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
20765 strict &= ~UNIFY_ALLOW_DERIVED;
20766 strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
20767 strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
20768
20769 switch (TREE_CODE (parm))
20770 {
20771 case TYPENAME_TYPE:
20772 case SCOPE_REF:
20773 case UNBOUND_CLASS_TEMPLATE:
20774 /* In a type which contains a nested-name-specifier, template
20775 argument values cannot be deduced for template parameters used
20776 within the nested-name-specifier. */
20777 return unify_success (explain_p);
20778
20779 case TEMPLATE_TYPE_PARM:
20780 case TEMPLATE_TEMPLATE_PARM:
20781 case BOUND_TEMPLATE_TEMPLATE_PARM:
20782 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
20783 if (error_operand_p (tparm))
20784 return unify_invalid (explain_p);
20785
20786 if (TEMPLATE_TYPE_LEVEL (parm)
20787 != template_decl_level (tparm))
20788 /* The PARM is not one we're trying to unify. Just check
20789 to see if it matches ARG. */
20790 {
20791 if (TREE_CODE (arg) == TREE_CODE (parm)
20792 && (is_auto (parm) ? is_auto (arg)
20793 : same_type_p (parm, arg)))
20794 return unify_success (explain_p);
20795 else
20796 return unify_type_mismatch (explain_p, parm, arg);
20797 }
20798 idx = TEMPLATE_TYPE_IDX (parm);
20799 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
20800 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
20801 if (error_operand_p (tparm))
20802 return unify_invalid (explain_p);
20803
20804 /* Check for mixed types and values. */
20805 if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
20806 && TREE_CODE (tparm) != TYPE_DECL)
20807 || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
20808 && TREE_CODE (tparm) != TEMPLATE_DECL))
20809 gcc_unreachable ();
20810
20811 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
20812 {
20813 if ((strict_in & UNIFY_ALLOW_DERIVED)
20814 && CLASS_TYPE_P (arg))
20815 {
20816 /* First try to match ARG directly. */
20817 tree t = try_class_unification (tparms, targs, parm, arg,
20818 explain_p);
20819 if (!t)
20820 {
20821 /* Otherwise, look for a suitable base of ARG, as below. */
20822 enum template_base_result r;
20823 r = get_template_base (tparms, targs, parm, arg,
20824 explain_p, &t);
20825 if (!t)
20826 return unify_no_common_base (explain_p, r, parm, arg);
20827 arg = t;
20828 }
20829 }
20830 /* ARG must be constructed from a template class or a template
20831 template parameter. */
20832 else if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
20833 && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
20834 return unify_template_deduction_failure (explain_p, parm, arg);
20835
20836 /* Deduce arguments T, i from TT<T> or TT<i>. */
20837 if (unify_bound_ttp_args (tparms, targs, parm, arg, explain_p))
20838 return 1;
20839
20840 arg = TYPE_TI_TEMPLATE (arg);
20841
20842 /* Fall through to deduce template name. */
20843 }
20844
20845 if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
20846 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
20847 {
20848 /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>. */
20849
20850 /* Simple cases: Value already set, does match or doesn't. */
20851 if (targ != NULL_TREE && template_args_equal (targ, arg))
20852 return unify_success (explain_p);
20853 else if (targ)
20854 return unify_inconsistency (explain_p, parm, targ, arg);
20855 }
20856 else
20857 {
20858 /* If PARM is `const T' and ARG is only `int', we don't have
20859 a match unless we are allowing additional qualification.
20860 If ARG is `const int' and PARM is just `T' that's OK;
20861 that binds `const int' to `T'. */
20862 if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
20863 arg, parm))
20864 return unify_cv_qual_mismatch (explain_p, parm, arg);
20865
20866 /* Consider the case where ARG is `const volatile int' and
20867 PARM is `const T'. Then, T should be `volatile int'. */
20868 arg = cp_build_qualified_type_real
20869 (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
20870 if (arg == error_mark_node)
20871 return unify_invalid (explain_p);
20872
20873 /* Simple cases: Value already set, does match or doesn't. */
20874 if (targ != NULL_TREE && same_type_p (targ, arg))
20875 return unify_success (explain_p);
20876 else if (targ)
20877 return unify_inconsistency (explain_p, parm, targ, arg);
20878
20879 /* Make sure that ARG is not a variable-sized array. (Note
20880 that were talking about variable-sized arrays (like
20881 `int[n]'), rather than arrays of unknown size (like
20882 `int[]').) We'll get very confused by such a type since
20883 the bound of the array is not constant, and therefore
20884 not mangleable. Besides, such types are not allowed in
20885 ISO C++, so we can do as we please here. We do allow
20886 them for 'auto' deduction, since that isn't ABI-exposed. */
20887 if (!is_auto (parm) && variably_modified_type_p (arg, NULL_TREE))
20888 return unify_vla_arg (explain_p, arg);
20889
20890 /* Strip typedefs as in convert_template_argument. */
20891 arg = canonicalize_type_argument (arg, tf_none);
20892 }
20893
20894 /* If ARG is a parameter pack or an expansion, we cannot unify
20895 against it unless PARM is also a parameter pack. */
20896 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
20897 && !template_parameter_pack_p (parm))
20898 return unify_parameter_pack_mismatch (explain_p, parm, arg);
20899
20900 /* If the argument deduction results is a METHOD_TYPE,
20901 then there is a problem.
20902 METHOD_TYPE doesn't map to any real C++ type the result of
20903 the deduction can not be of that type. */
20904 if (TREE_CODE (arg) == METHOD_TYPE)
20905 return unify_method_type_error (explain_p, arg);
20906
20907 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
20908 return unify_success (explain_p);
20909
20910 case TEMPLATE_PARM_INDEX:
20911 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
20912 if (error_operand_p (tparm))
20913 return unify_invalid (explain_p);
20914
20915 if (TEMPLATE_PARM_LEVEL (parm)
20916 != template_decl_level (tparm))
20917 {
20918 /* The PARM is not one we're trying to unify. Just check
20919 to see if it matches ARG. */
20920 int result = !(TREE_CODE (arg) == TREE_CODE (parm)
20921 && cp_tree_equal (parm, arg));
20922 if (result)
20923 unify_expression_unequal (explain_p, parm, arg);
20924 return result;
20925 }
20926
20927 idx = TEMPLATE_PARM_IDX (parm);
20928 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
20929
20930 if (targ)
20931 {
20932 if ((strict & UNIFY_ALLOW_INTEGER)
20933 && TREE_TYPE (targ) && TREE_TYPE (arg)
20934 && CP_INTEGRAL_TYPE_P (TREE_TYPE (targ)))
20935 /* We're deducing from an array bound, the type doesn't matter. */
20936 arg = fold_convert (TREE_TYPE (targ), arg);
20937 int x = !cp_tree_equal (targ, arg);
20938 if (x)
20939 unify_inconsistency (explain_p, parm, targ, arg);
20940 return x;
20941 }
20942
20943 /* [temp.deduct.type] If, in the declaration of a function template
20944 with a non-type template-parameter, the non-type
20945 template-parameter is used in an expression in the function
20946 parameter-list and, if the corresponding template-argument is
20947 deduced, the template-argument type shall match the type of the
20948 template-parameter exactly, except that a template-argument
20949 deduced from an array bound may be of any integral type.
20950 The non-type parameter might use already deduced type parameters. */
20951 ++processing_template_decl;
20952 tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
20953 --processing_template_decl;
20954 if (tree a = type_uses_auto (tparm))
20955 {
20956 tparm = do_auto_deduction (tparm, arg, a, complain, adc_unify);
20957 if (tparm == error_mark_node)
20958 return 1;
20959 }
20960
20961 if (!TREE_TYPE (arg))
20962 /* Template-parameter dependent expression. Just accept it for now.
20963 It will later be processed in convert_template_argument. */
20964 ;
20965 else if (same_type_p (non_reference (TREE_TYPE (arg)),
20966 non_reference (tparm)))
20967 /* OK */;
20968 else if ((strict & UNIFY_ALLOW_INTEGER)
20969 && CP_INTEGRAL_TYPE_P (tparm))
20970 /* Convert the ARG to the type of PARM; the deduced non-type
20971 template argument must exactly match the types of the
20972 corresponding parameter. */
20973 arg = fold (build_nop (tparm, arg));
20974 else if (uses_template_parms (tparm))
20975 {
20976 /* We haven't deduced the type of this parameter yet. */
20977 if (cxx_dialect >= cxx17
20978 /* We deduce from array bounds in try_array_deduction. */
20979 && !(strict & UNIFY_ALLOW_INTEGER))
20980 {
20981 /* Deduce it from the non-type argument. */
20982 tree atype = TREE_TYPE (arg);
20983 RECUR_AND_CHECK_FAILURE (tparms, targs,
20984 tparm, atype,
20985 UNIFY_ALLOW_NONE, explain_p);
20986 }
20987 else
20988 /* Try again later. */
20989 return unify_success (explain_p);
20990 }
20991 else
20992 return unify_type_mismatch (explain_p, tparm, TREE_TYPE (arg));
20993
20994 /* If ARG is a parameter pack or an expansion, we cannot unify
20995 against it unless PARM is also a parameter pack. */
20996 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
20997 && !TEMPLATE_PARM_PARAMETER_PACK (parm))
20998 return unify_parameter_pack_mismatch (explain_p, parm, arg);
20999
21000 {
21001 bool removed_attr = false;
21002 arg = strip_typedefs_expr (arg, &removed_attr);
21003 }
21004 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
21005 return unify_success (explain_p);
21006
21007 case PTRMEM_CST:
21008 {
21009 /* A pointer-to-member constant can be unified only with
21010 another constant. */
21011 if (TREE_CODE (arg) != PTRMEM_CST)
21012 return unify_ptrmem_cst_mismatch (explain_p, parm, arg);
21013
21014 /* Just unify the class member. It would be useless (and possibly
21015 wrong, depending on the strict flags) to unify also
21016 PTRMEM_CST_CLASS, because we want to be sure that both parm and
21017 arg refer to the same variable, even if through different
21018 classes. For instance:
21019
21020 struct A { int x; };
21021 struct B : A { };
21022
21023 Unification of &A::x and &B::x must succeed. */
21024 return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
21025 PTRMEM_CST_MEMBER (arg), strict, explain_p);
21026 }
21027
21028 case POINTER_TYPE:
21029 {
21030 if (!TYPE_PTR_P (arg))
21031 return unify_type_mismatch (explain_p, parm, arg);
21032
21033 /* [temp.deduct.call]
21034
21035 A can be another pointer or pointer to member type that can
21036 be converted to the deduced A via a qualification
21037 conversion (_conv.qual_).
21038
21039 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
21040 This will allow for additional cv-qualification of the
21041 pointed-to types if appropriate. */
21042
21043 if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
21044 /* The derived-to-base conversion only persists through one
21045 level of pointers. */
21046 strict |= (strict_in & UNIFY_ALLOW_DERIVED);
21047
21048 return unify (tparms, targs, TREE_TYPE (parm),
21049 TREE_TYPE (arg), strict, explain_p);
21050 }
21051
21052 case REFERENCE_TYPE:
21053 if (TREE_CODE (arg) != REFERENCE_TYPE)
21054 return unify_type_mismatch (explain_p, parm, arg);
21055 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
21056 strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
21057
21058 case ARRAY_TYPE:
21059 if (TREE_CODE (arg) != ARRAY_TYPE)
21060 return unify_type_mismatch (explain_p, parm, arg);
21061 if ((TYPE_DOMAIN (parm) == NULL_TREE)
21062 != (TYPE_DOMAIN (arg) == NULL_TREE))
21063 return unify_type_mismatch (explain_p, parm, arg);
21064 RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
21065 strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
21066 if (TYPE_DOMAIN (parm) != NULL_TREE)
21067 return unify_array_domain (tparms, targs, TYPE_DOMAIN (parm),
21068 TYPE_DOMAIN (arg), explain_p);
21069 return unify_success (explain_p);
21070
21071 case REAL_TYPE:
21072 case COMPLEX_TYPE:
21073 case VECTOR_TYPE:
21074 case INTEGER_TYPE:
21075 case BOOLEAN_TYPE:
21076 case ENUMERAL_TYPE:
21077 case VOID_TYPE:
21078 case NULLPTR_TYPE:
21079 if (TREE_CODE (arg) != TREE_CODE (parm))
21080 return unify_type_mismatch (explain_p, parm, arg);
21081
21082 /* We have already checked cv-qualification at the top of the
21083 function. */
21084 if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
21085 return unify_type_mismatch (explain_p, parm, arg);
21086
21087 /* As far as unification is concerned, this wins. Later checks
21088 will invalidate it if necessary. */
21089 return unify_success (explain_p);
21090
21091 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
21092 /* Type INTEGER_CST can come from ordinary constant template args. */
21093 case INTEGER_CST:
21094 while (CONVERT_EXPR_P (arg))
21095 arg = TREE_OPERAND (arg, 0);
21096
21097 if (TREE_CODE (arg) != INTEGER_CST)
21098 return unify_template_argument_mismatch (explain_p, parm, arg);
21099 return (tree_int_cst_equal (parm, arg)
21100 ? unify_success (explain_p)
21101 : unify_template_argument_mismatch (explain_p, parm, arg));
21102
21103 case TREE_VEC:
21104 {
21105 int i, len, argslen;
21106 int parm_variadic_p = 0;
21107
21108 if (TREE_CODE (arg) != TREE_VEC)
21109 return unify_template_argument_mismatch (explain_p, parm, arg);
21110
21111 len = TREE_VEC_LENGTH (parm);
21112 argslen = TREE_VEC_LENGTH (arg);
21113
21114 /* Check for pack expansions in the parameters. */
21115 for (i = 0; i < len; ++i)
21116 {
21117 if (PACK_EXPANSION_P (TREE_VEC_ELT (parm, i)))
21118 {
21119 if (i == len - 1)
21120 /* We can unify against something with a trailing
21121 parameter pack. */
21122 parm_variadic_p = 1;
21123 else
21124 /* [temp.deduct.type]/9: If the template argument list of
21125 P contains a pack expansion that is not the last
21126 template argument, the entire template argument list
21127 is a non-deduced context. */
21128 return unify_success (explain_p);
21129 }
21130 }
21131
21132 /* If we don't have enough arguments to satisfy the parameters
21133 (not counting the pack expression at the end), or we have
21134 too many arguments for a parameter list that doesn't end in
21135 a pack expression, we can't unify. */
21136 if (parm_variadic_p
21137 ? argslen < len - parm_variadic_p
21138 : argslen != len)
21139 return unify_arity (explain_p, TREE_VEC_LENGTH (arg), len);
21140
21141 /* Unify all of the parameters that precede the (optional)
21142 pack expression. */
21143 for (i = 0; i < len - parm_variadic_p; ++i)
21144 {
21145 RECUR_AND_CHECK_FAILURE (tparms, targs,
21146 TREE_VEC_ELT (parm, i),
21147 TREE_VEC_ELT (arg, i),
21148 UNIFY_ALLOW_NONE, explain_p);
21149 }
21150 if (parm_variadic_p)
21151 return unify_pack_expansion (tparms, targs, parm, arg,
21152 DEDUCE_EXACT,
21153 /*subr=*/true, explain_p);
21154 return unify_success (explain_p);
21155 }
21156
21157 case RECORD_TYPE:
21158 case UNION_TYPE:
21159 if (TREE_CODE (arg) != TREE_CODE (parm))
21160 return unify_type_mismatch (explain_p, parm, arg);
21161
21162 if (TYPE_PTRMEMFUNC_P (parm))
21163 {
21164 if (!TYPE_PTRMEMFUNC_P (arg))
21165 return unify_type_mismatch (explain_p, parm, arg);
21166
21167 return unify (tparms, targs,
21168 TYPE_PTRMEMFUNC_FN_TYPE (parm),
21169 TYPE_PTRMEMFUNC_FN_TYPE (arg),
21170 strict, explain_p);
21171 }
21172 else if (TYPE_PTRMEMFUNC_P (arg))
21173 return unify_type_mismatch (explain_p, parm, arg);
21174
21175 if (CLASSTYPE_TEMPLATE_INFO (parm))
21176 {
21177 tree t = NULL_TREE;
21178
21179 if (strict_in & UNIFY_ALLOW_DERIVED)
21180 {
21181 /* First, we try to unify the PARM and ARG directly. */
21182 t = try_class_unification (tparms, targs,
21183 parm, arg, explain_p);
21184
21185 if (!t)
21186 {
21187 /* Fallback to the special case allowed in
21188 [temp.deduct.call]:
21189
21190 If P is a class, and P has the form
21191 template-id, then A can be a derived class of
21192 the deduced A. Likewise, if P is a pointer to
21193 a class of the form template-id, A can be a
21194 pointer to a derived class pointed to by the
21195 deduced A. */
21196 enum template_base_result r;
21197 r = get_template_base (tparms, targs, parm, arg,
21198 explain_p, &t);
21199
21200 if (!t)
21201 {
21202 /* Don't give the derived diagnostic if we're
21203 already dealing with the same template. */
21204 bool same_template
21205 = (CLASSTYPE_TEMPLATE_INFO (arg)
21206 && (CLASSTYPE_TI_TEMPLATE (parm)
21207 == CLASSTYPE_TI_TEMPLATE (arg)));
21208 return unify_no_common_base (explain_p && !same_template,
21209 r, parm, arg);
21210 }
21211 }
21212 }
21213 else if (CLASSTYPE_TEMPLATE_INFO (arg)
21214 && (CLASSTYPE_TI_TEMPLATE (parm)
21215 == CLASSTYPE_TI_TEMPLATE (arg)))
21216 /* Perhaps PARM is something like S<U> and ARG is S<int>.
21217 Then, we should unify `int' and `U'. */
21218 t = arg;
21219 else
21220 /* There's no chance of unification succeeding. */
21221 return unify_type_mismatch (explain_p, parm, arg);
21222
21223 return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
21224 CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE, explain_p);
21225 }
21226 else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
21227 return unify_type_mismatch (explain_p, parm, arg);
21228 return unify_success (explain_p);
21229
21230 case METHOD_TYPE:
21231 case FUNCTION_TYPE:
21232 {
21233 unsigned int nargs;
21234 tree *args;
21235 tree a;
21236 unsigned int i;
21237
21238 if (TREE_CODE (arg) != TREE_CODE (parm))
21239 return unify_type_mismatch (explain_p, parm, arg);
21240
21241 /* CV qualifications for methods can never be deduced, they must
21242 match exactly. We need to check them explicitly here,
21243 because type_unification_real treats them as any other
21244 cv-qualified parameter. */
21245 if (TREE_CODE (parm) == METHOD_TYPE
21246 && (!check_cv_quals_for_unify
21247 (UNIFY_ALLOW_NONE,
21248 class_of_this_parm (arg),
21249 class_of_this_parm (parm))))
21250 return unify_cv_qual_mismatch (explain_p, parm, arg);
21251 if (TREE_CODE (arg) == FUNCTION_TYPE
21252 && type_memfn_quals (parm) != type_memfn_quals (arg))
21253 return unify_cv_qual_mismatch (explain_p, parm, arg);
21254 if (type_memfn_rqual (parm) != type_memfn_rqual (arg))
21255 return unify_type_mismatch (explain_p, parm, arg);
21256
21257 RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm),
21258 TREE_TYPE (arg), UNIFY_ALLOW_NONE, explain_p);
21259
21260 nargs = list_length (TYPE_ARG_TYPES (arg));
21261 args = XALLOCAVEC (tree, nargs);
21262 for (a = TYPE_ARG_TYPES (arg), i = 0;
21263 a != NULL_TREE && a != void_list_node;
21264 a = TREE_CHAIN (a), ++i)
21265 args[i] = TREE_VALUE (a);
21266 nargs = i;
21267
21268 if (type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
21269 args, nargs, 1, DEDUCE_EXACT,
21270 LOOKUP_NORMAL, NULL, explain_p))
21271 return 1;
21272
21273 if (flag_noexcept_type)
21274 {
21275 tree pspec = TYPE_RAISES_EXCEPTIONS (parm);
21276 tree aspec = canonical_eh_spec (TYPE_RAISES_EXCEPTIONS (arg));
21277 if (pspec == NULL_TREE) pspec = noexcept_false_spec;
21278 if (aspec == NULL_TREE) aspec = noexcept_false_spec;
21279 if (TREE_PURPOSE (pspec) && TREE_PURPOSE (aspec)
21280 && uses_template_parms (TREE_PURPOSE (pspec)))
21281 RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_PURPOSE (pspec),
21282 TREE_PURPOSE (aspec),
21283 UNIFY_ALLOW_NONE, explain_p);
21284 else if (nothrow_spec_p (pspec) && !nothrow_spec_p (aspec))
21285 return unify_type_mismatch (explain_p, parm, arg);
21286 }
21287
21288 return 0;
21289 }
21290
21291 case OFFSET_TYPE:
21292 /* Unify a pointer to member with a pointer to member function, which
21293 deduces the type of the member as a function type. */
21294 if (TYPE_PTRMEMFUNC_P (arg))
21295 {
21296 /* Check top-level cv qualifiers */
21297 if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
21298 return unify_cv_qual_mismatch (explain_p, parm, arg);
21299
21300 RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
21301 TYPE_PTRMEMFUNC_OBJECT_TYPE (arg),
21302 UNIFY_ALLOW_NONE, explain_p);
21303
21304 /* Determine the type of the function we are unifying against. */
21305 tree fntype = static_fn_type (arg);
21306
21307 return unify (tparms, targs, TREE_TYPE (parm), fntype, strict, explain_p);
21308 }
21309
21310 if (TREE_CODE (arg) != OFFSET_TYPE)
21311 return unify_type_mismatch (explain_p, parm, arg);
21312 RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
21313 TYPE_OFFSET_BASETYPE (arg),
21314 UNIFY_ALLOW_NONE, explain_p);
21315 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
21316 strict, explain_p);
21317
21318 case CONST_DECL:
21319 if (DECL_TEMPLATE_PARM_P (parm))
21320 return unify (tparms, targs, DECL_INITIAL (parm), arg, strict, explain_p);
21321 if (arg != scalar_constant_value (parm))
21322 return unify_template_argument_mismatch (explain_p, parm, arg);
21323 return unify_success (explain_p);
21324
21325 case FIELD_DECL:
21326 case TEMPLATE_DECL:
21327 /* Matched cases are handled by the ARG == PARM test above. */
21328 return unify_template_argument_mismatch (explain_p, parm, arg);
21329
21330 case VAR_DECL:
21331 /* We might get a variable as a non-type template argument in parm if the
21332 corresponding parameter is type-dependent. Make any necessary
21333 adjustments based on whether arg is a reference. */
21334 if (CONSTANT_CLASS_P (arg))
21335 parm = fold_non_dependent_expr (parm);
21336 else if (REFERENCE_REF_P (arg))
21337 {
21338 tree sub = TREE_OPERAND (arg, 0);
21339 STRIP_NOPS (sub);
21340 if (TREE_CODE (sub) == ADDR_EXPR)
21341 arg = TREE_OPERAND (sub, 0);
21342 }
21343 /* Now use the normal expression code to check whether they match. */
21344 goto expr;
21345
21346 case TYPE_ARGUMENT_PACK:
21347 case NONTYPE_ARGUMENT_PACK:
21348 return unify (tparms, targs, ARGUMENT_PACK_ARGS (parm),
21349 ARGUMENT_PACK_ARGS (arg), strict, explain_p);
21350
21351 case TYPEOF_TYPE:
21352 case DECLTYPE_TYPE:
21353 case UNDERLYING_TYPE:
21354 /* Cannot deduce anything from TYPEOF_TYPE, DECLTYPE_TYPE,
21355 or UNDERLYING_TYPE nodes. */
21356 return unify_success (explain_p);
21357
21358 case ERROR_MARK:
21359 /* Unification fails if we hit an error node. */
21360 return unify_invalid (explain_p);
21361
21362 case INDIRECT_REF:
21363 if (REFERENCE_REF_P (parm))
21364 {
21365 bool pexp = PACK_EXPANSION_P (arg);
21366 if (pexp)
21367 arg = PACK_EXPANSION_PATTERN (arg);
21368 if (REFERENCE_REF_P (arg))
21369 arg = TREE_OPERAND (arg, 0);
21370 if (pexp)
21371 arg = make_pack_expansion (arg, complain);
21372 return unify (tparms, targs, TREE_OPERAND (parm, 0), arg,
21373 strict, explain_p);
21374 }
21375 /* FALLTHRU */
21376
21377 default:
21378 /* An unresolved overload is a nondeduced context. */
21379 if (is_overloaded_fn (parm) || type_unknown_p (parm))
21380 return unify_success (explain_p);
21381 gcc_assert (EXPR_P (parm) || TREE_CODE (parm) == TRAIT_EXPR);
21382 expr:
21383 /* We must be looking at an expression. This can happen with
21384 something like:
21385
21386 template <int I>
21387 void foo(S<I>, S<I + 2>);
21388
21389 This is a "nondeduced context":
21390
21391 [deduct.type]
21392
21393 The nondeduced contexts are:
21394
21395 --A type that is a template-id in which one or more of
21396 the template-arguments is an expression that references
21397 a template-parameter.
21398
21399 In these cases, we assume deduction succeeded, but don't
21400 actually infer any unifications. */
21401
21402 if (!uses_template_parms (parm)
21403 && !template_args_equal (parm, arg))
21404 return unify_expression_unequal (explain_p, parm, arg);
21405 else
21406 return unify_success (explain_p);
21407 }
21408 }
21409 #undef RECUR_AND_CHECK_FAILURE
21410 \f
21411 /* Note that DECL can be defined in this translation unit, if
21412 required. */
21413
21414 static void
21415 mark_definable (tree decl)
21416 {
21417 tree clone;
21418 DECL_NOT_REALLY_EXTERN (decl) = 1;
21419 FOR_EACH_CLONE (clone, decl)
21420 DECL_NOT_REALLY_EXTERN (clone) = 1;
21421 }
21422
21423 /* Called if RESULT is explicitly instantiated, or is a member of an
21424 explicitly instantiated class. */
21425
21426 void
21427 mark_decl_instantiated (tree result, int extern_p)
21428 {
21429 SET_DECL_EXPLICIT_INSTANTIATION (result);
21430
21431 /* If this entity has already been written out, it's too late to
21432 make any modifications. */
21433 if (TREE_ASM_WRITTEN (result))
21434 return;
21435
21436 /* For anonymous namespace we don't need to do anything. */
21437 if (decl_anon_ns_mem_p (result))
21438 {
21439 gcc_assert (!TREE_PUBLIC (result));
21440 return;
21441 }
21442
21443 if (TREE_CODE (result) != FUNCTION_DECL)
21444 /* The TREE_PUBLIC flag for function declarations will have been
21445 set correctly by tsubst. */
21446 TREE_PUBLIC (result) = 1;
21447
21448 /* This might have been set by an earlier implicit instantiation. */
21449 DECL_COMDAT (result) = 0;
21450
21451 if (extern_p)
21452 DECL_NOT_REALLY_EXTERN (result) = 0;
21453 else
21454 {
21455 mark_definable (result);
21456 mark_needed (result);
21457 /* Always make artificials weak. */
21458 if (DECL_ARTIFICIAL (result) && flag_weak)
21459 comdat_linkage (result);
21460 /* For WIN32 we also want to put explicit instantiations in
21461 linkonce sections. */
21462 else if (TREE_PUBLIC (result))
21463 maybe_make_one_only (result);
21464 }
21465
21466 /* If EXTERN_P, then this function will not be emitted -- unless
21467 followed by an explicit instantiation, at which point its linkage
21468 will be adjusted. If !EXTERN_P, then this function will be
21469 emitted here. In neither circumstance do we want
21470 import_export_decl to adjust the linkage. */
21471 DECL_INTERFACE_KNOWN (result) = 1;
21472 }
21473
21474 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
21475 important template arguments. If any are missing, we check whether
21476 they're important by using error_mark_node for substituting into any
21477 args that were used for partial ordering (the ones between ARGS and END)
21478 and seeing if it bubbles up. */
21479
21480 static bool
21481 check_undeduced_parms (tree targs, tree args, tree end)
21482 {
21483 bool found = false;
21484 int i;
21485 for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
21486 if (TREE_VEC_ELT (targs, i) == NULL_TREE)
21487 {
21488 found = true;
21489 TREE_VEC_ELT (targs, i) = error_mark_node;
21490 }
21491 if (found)
21492 {
21493 tree substed = tsubst_arg_types (args, targs, end, tf_none, NULL_TREE);
21494 if (substed == error_mark_node)
21495 return true;
21496 }
21497 return false;
21498 }
21499
21500 /* Given two function templates PAT1 and PAT2, return:
21501
21502 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
21503 -1 if PAT2 is more specialized than PAT1.
21504 0 if neither is more specialized.
21505
21506 LEN indicates the number of parameters we should consider
21507 (defaulted parameters should not be considered).
21508
21509 The 1998 std underspecified function template partial ordering, and
21510 DR214 addresses the issue. We take pairs of arguments, one from
21511 each of the templates, and deduce them against each other. One of
21512 the templates will be more specialized if all the *other*
21513 template's arguments deduce against its arguments and at least one
21514 of its arguments *does* *not* deduce against the other template's
21515 corresponding argument. Deduction is done as for class templates.
21516 The arguments used in deduction have reference and top level cv
21517 qualifiers removed. Iff both arguments were originally reference
21518 types *and* deduction succeeds in both directions, an lvalue reference
21519 wins against an rvalue reference and otherwise the template
21520 with the more cv-qualified argument wins for that pairing (if
21521 neither is more cv-qualified, they both are equal). Unlike regular
21522 deduction, after all the arguments have been deduced in this way,
21523 we do *not* verify the deduced template argument values can be
21524 substituted into non-deduced contexts.
21525
21526 The logic can be a bit confusing here, because we look at deduce1 and
21527 targs1 to see if pat2 is at least as specialized, and vice versa; if we
21528 can find template arguments for pat1 to make arg1 look like arg2, that
21529 means that arg2 is at least as specialized as arg1. */
21530
21531 int
21532 more_specialized_fn (tree pat1, tree pat2, int len)
21533 {
21534 tree decl1 = DECL_TEMPLATE_RESULT (pat1);
21535 tree decl2 = DECL_TEMPLATE_RESULT (pat2);
21536 tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
21537 tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
21538 tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
21539 tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
21540 tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
21541 tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
21542 tree origs1, origs2;
21543 bool lose1 = false;
21544 bool lose2 = false;
21545
21546 /* Remove the this parameter from non-static member functions. If
21547 one is a non-static member function and the other is not a static
21548 member function, remove the first parameter from that function
21549 also. This situation occurs for operator functions where we
21550 locate both a member function (with this pointer) and non-member
21551 operator (with explicit first operand). */
21552 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
21553 {
21554 len--; /* LEN is the number of significant arguments for DECL1 */
21555 args1 = TREE_CHAIN (args1);
21556 if (!DECL_STATIC_FUNCTION_P (decl2))
21557 args2 = TREE_CHAIN (args2);
21558 }
21559 else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
21560 {
21561 args2 = TREE_CHAIN (args2);
21562 if (!DECL_STATIC_FUNCTION_P (decl1))
21563 {
21564 len--;
21565 args1 = TREE_CHAIN (args1);
21566 }
21567 }
21568
21569 /* If only one is a conversion operator, they are unordered. */
21570 if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
21571 return 0;
21572
21573 /* Consider the return type for a conversion function */
21574 if (DECL_CONV_FN_P (decl1))
21575 {
21576 args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
21577 args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
21578 len++;
21579 }
21580
21581 processing_template_decl++;
21582
21583 origs1 = args1;
21584 origs2 = args2;
21585
21586 while (len--
21587 /* Stop when an ellipsis is seen. */
21588 && args1 != NULL_TREE && args2 != NULL_TREE)
21589 {
21590 tree arg1 = TREE_VALUE (args1);
21591 tree arg2 = TREE_VALUE (args2);
21592 int deduce1, deduce2;
21593 int quals1 = -1;
21594 int quals2 = -1;
21595 int ref1 = 0;
21596 int ref2 = 0;
21597
21598 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
21599 && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
21600 {
21601 /* When both arguments are pack expansions, we need only
21602 unify the patterns themselves. */
21603 arg1 = PACK_EXPANSION_PATTERN (arg1);
21604 arg2 = PACK_EXPANSION_PATTERN (arg2);
21605
21606 /* This is the last comparison we need to do. */
21607 len = 0;
21608 }
21609
21610 /* DR 1847: If a particular P contains no template-parameters that
21611 participate in template argument deduction, that P is not used to
21612 determine the ordering. */
21613 if (!uses_deducible_template_parms (arg1)
21614 && !uses_deducible_template_parms (arg2))
21615 goto next;
21616
21617 if (TREE_CODE (arg1) == REFERENCE_TYPE)
21618 {
21619 ref1 = TYPE_REF_IS_RVALUE (arg1) + 1;
21620 arg1 = TREE_TYPE (arg1);
21621 quals1 = cp_type_quals (arg1);
21622 }
21623
21624 if (TREE_CODE (arg2) == REFERENCE_TYPE)
21625 {
21626 ref2 = TYPE_REF_IS_RVALUE (arg2) + 1;
21627 arg2 = TREE_TYPE (arg2);
21628 quals2 = cp_type_quals (arg2);
21629 }
21630
21631 arg1 = TYPE_MAIN_VARIANT (arg1);
21632 arg2 = TYPE_MAIN_VARIANT (arg2);
21633
21634 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
21635 {
21636 int i, len2 = remaining_arguments (args2);
21637 tree parmvec = make_tree_vec (1);
21638 tree argvec = make_tree_vec (len2);
21639 tree ta = args2;
21640
21641 /* Setup the parameter vector, which contains only ARG1. */
21642 TREE_VEC_ELT (parmvec, 0) = arg1;
21643
21644 /* Setup the argument vector, which contains the remaining
21645 arguments. */
21646 for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
21647 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
21648
21649 deduce1 = (unify_pack_expansion (tparms1, targs1, parmvec,
21650 argvec, DEDUCE_EXACT,
21651 /*subr=*/true, /*explain_p=*/false)
21652 == 0);
21653
21654 /* We cannot deduce in the other direction, because ARG1 is
21655 a pack expansion but ARG2 is not. */
21656 deduce2 = 0;
21657 }
21658 else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
21659 {
21660 int i, len1 = remaining_arguments (args1);
21661 tree parmvec = make_tree_vec (1);
21662 tree argvec = make_tree_vec (len1);
21663 tree ta = args1;
21664
21665 /* Setup the parameter vector, which contains only ARG1. */
21666 TREE_VEC_ELT (parmvec, 0) = arg2;
21667
21668 /* Setup the argument vector, which contains the remaining
21669 arguments. */
21670 for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
21671 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
21672
21673 deduce2 = (unify_pack_expansion (tparms2, targs2, parmvec,
21674 argvec, DEDUCE_EXACT,
21675 /*subr=*/true, /*explain_p=*/false)
21676 == 0);
21677
21678 /* We cannot deduce in the other direction, because ARG2 is
21679 a pack expansion but ARG1 is not.*/
21680 deduce1 = 0;
21681 }
21682
21683 else
21684 {
21685 /* The normal case, where neither argument is a pack
21686 expansion. */
21687 deduce1 = (unify (tparms1, targs1, arg1, arg2,
21688 UNIFY_ALLOW_NONE, /*explain_p=*/false)
21689 == 0);
21690 deduce2 = (unify (tparms2, targs2, arg2, arg1,
21691 UNIFY_ALLOW_NONE, /*explain_p=*/false)
21692 == 0);
21693 }
21694
21695 /* If we couldn't deduce arguments for tparms1 to make arg1 match
21696 arg2, then arg2 is not as specialized as arg1. */
21697 if (!deduce1)
21698 lose2 = true;
21699 if (!deduce2)
21700 lose1 = true;
21701
21702 /* "If, for a given type, deduction succeeds in both directions
21703 (i.e., the types are identical after the transformations above)
21704 and both P and A were reference types (before being replaced with
21705 the type referred to above):
21706 - if the type from the argument template was an lvalue reference and
21707 the type from the parameter template was not, the argument type is
21708 considered to be more specialized than the other; otherwise,
21709 - if the type from the argument template is more cv-qualified
21710 than the type from the parameter template (as described above),
21711 the argument type is considered to be more specialized than the other;
21712 otherwise,
21713 - neither type is more specialized than the other." */
21714
21715 if (deduce1 && deduce2)
21716 {
21717 if (ref1 && ref2 && ref1 != ref2)
21718 {
21719 if (ref1 > ref2)
21720 lose1 = true;
21721 else
21722 lose2 = true;
21723 }
21724 else if (quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
21725 {
21726 if ((quals1 & quals2) == quals2)
21727 lose2 = true;
21728 if ((quals1 & quals2) == quals1)
21729 lose1 = true;
21730 }
21731 }
21732
21733 if (lose1 && lose2)
21734 /* We've failed to deduce something in either direction.
21735 These must be unordered. */
21736 break;
21737
21738 next:
21739
21740 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
21741 || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
21742 /* We have already processed all of the arguments in our
21743 handing of the pack expansion type. */
21744 len = 0;
21745
21746 args1 = TREE_CHAIN (args1);
21747 args2 = TREE_CHAIN (args2);
21748 }
21749
21750 /* "In most cases, all template parameters must have values in order for
21751 deduction to succeed, but for partial ordering purposes a template
21752 parameter may remain without a value provided it is not used in the
21753 types being used for partial ordering."
21754
21755 Thus, if we are missing any of the targs1 we need to substitute into
21756 origs1, then pat2 is not as specialized as pat1. This can happen when
21757 there is a nondeduced context. */
21758 if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
21759 lose2 = true;
21760 if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
21761 lose1 = true;
21762
21763 processing_template_decl--;
21764
21765 /* If both deductions succeed, the partial ordering selects the more
21766 constrained template. */
21767 if (!lose1 && !lose2)
21768 {
21769 tree c1 = get_constraints (DECL_TEMPLATE_RESULT (pat1));
21770 tree c2 = get_constraints (DECL_TEMPLATE_RESULT (pat2));
21771 lose1 = !subsumes_constraints (c1, c2);
21772 lose2 = !subsumes_constraints (c2, c1);
21773 }
21774
21775 /* All things being equal, if the next argument is a pack expansion
21776 for one function but not for the other, prefer the
21777 non-variadic function. FIXME this is bogus; see c++/41958. */
21778 if (lose1 == lose2
21779 && args1 && TREE_VALUE (args1)
21780 && args2 && TREE_VALUE (args2))
21781 {
21782 lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
21783 lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
21784 }
21785
21786 if (lose1 == lose2)
21787 return 0;
21788 else if (!lose1)
21789 return 1;
21790 else
21791 return -1;
21792 }
21793
21794 /* Determine which of two partial specializations of TMPL is more
21795 specialized.
21796
21797 PAT1 is a TREE_LIST whose TREE_VALUE is the TEMPLATE_DECL corresponding
21798 to the first partial specialization. The TREE_PURPOSE is the
21799 innermost set of template parameters for the partial
21800 specialization. PAT2 is similar, but for the second template.
21801
21802 Return 1 if the first partial specialization is more specialized;
21803 -1 if the second is more specialized; 0 if neither is more
21804 specialized.
21805
21806 See [temp.class.order] for information about determining which of
21807 two templates is more specialized. */
21808
21809 static int
21810 more_specialized_partial_spec (tree tmpl, tree pat1, tree pat2)
21811 {
21812 tree targs;
21813 int winner = 0;
21814 bool any_deductions = false;
21815
21816 tree tmpl1 = TREE_VALUE (pat1);
21817 tree tmpl2 = TREE_VALUE (pat2);
21818 tree specargs1 = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl1)));
21819 tree specargs2 = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl2)));
21820
21821 /* Just like what happens for functions, if we are ordering between
21822 different template specializations, we may encounter dependent
21823 types in the arguments, and we need our dependency check functions
21824 to behave correctly. */
21825 ++processing_template_decl;
21826 targs = get_partial_spec_bindings (tmpl, tmpl1, specargs2);
21827 if (targs)
21828 {
21829 --winner;
21830 any_deductions = true;
21831 }
21832
21833 targs = get_partial_spec_bindings (tmpl, tmpl2, specargs1);
21834 if (targs)
21835 {
21836 ++winner;
21837 any_deductions = true;
21838 }
21839 --processing_template_decl;
21840
21841 /* If both deductions succeed, the partial ordering selects the more
21842 constrained template. */
21843 if (!winner && any_deductions)
21844 return more_constrained (tmpl1, tmpl2);
21845
21846 /* In the case of a tie where at least one of the templates
21847 has a parameter pack at the end, the template with the most
21848 non-packed parameters wins. */
21849 if (winner == 0
21850 && any_deductions
21851 && (template_args_variadic_p (TREE_PURPOSE (pat1))
21852 || template_args_variadic_p (TREE_PURPOSE (pat2))))
21853 {
21854 tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
21855 tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
21856 int len1 = TREE_VEC_LENGTH (args1);
21857 int len2 = TREE_VEC_LENGTH (args2);
21858
21859 /* We don't count the pack expansion at the end. */
21860 if (template_args_variadic_p (TREE_PURPOSE (pat1)))
21861 --len1;
21862 if (template_args_variadic_p (TREE_PURPOSE (pat2)))
21863 --len2;
21864
21865 if (len1 > len2)
21866 return 1;
21867 else if (len1 < len2)
21868 return -1;
21869 }
21870
21871 return winner;
21872 }
21873
21874 /* Return the template arguments that will produce the function signature
21875 DECL from the function template FN, with the explicit template
21876 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is true, the return type must
21877 also match. Return NULL_TREE if no satisfactory arguments could be
21878 found. */
21879
21880 static tree
21881 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
21882 {
21883 int ntparms = DECL_NTPARMS (fn);
21884 tree targs = make_tree_vec (ntparms);
21885 tree decl_type = TREE_TYPE (decl);
21886 tree decl_arg_types;
21887 tree *args;
21888 unsigned int nargs, ix;
21889 tree arg;
21890
21891 gcc_assert (decl != DECL_TEMPLATE_RESULT (fn));
21892
21893 /* Never do unification on the 'this' parameter. */
21894 decl_arg_types = skip_artificial_parms_for (decl,
21895 TYPE_ARG_TYPES (decl_type));
21896
21897 nargs = list_length (decl_arg_types);
21898 args = XALLOCAVEC (tree, nargs);
21899 for (arg = decl_arg_types, ix = 0;
21900 arg != NULL_TREE && arg != void_list_node;
21901 arg = TREE_CHAIN (arg), ++ix)
21902 args[ix] = TREE_VALUE (arg);
21903
21904 if (fn_type_unification (fn, explicit_args, targs,
21905 args, ix,
21906 (check_rettype || DECL_CONV_FN_P (fn)
21907 ? TREE_TYPE (decl_type) : NULL_TREE),
21908 DEDUCE_EXACT, LOOKUP_NORMAL, /*explain_p=*/false,
21909 /*decltype*/false)
21910 == error_mark_node)
21911 return NULL_TREE;
21912
21913 return targs;
21914 }
21915
21916 /* Return the innermost template arguments that, when applied to a partial
21917 specialization SPEC_TMPL of TMPL, yield the ARGS.
21918
21919 For example, suppose we have:
21920
21921 template <class T, class U> struct S {};
21922 template <class T> struct S<T*, int> {};
21923
21924 Then, suppose we want to get `S<double*, int>'. SPEC_TMPL will be the
21925 partial specialization and the ARGS will be {double*, int}. The resulting
21926 vector will be {double}, indicating that `T' is bound to `double'. */
21927
21928 static tree
21929 get_partial_spec_bindings (tree tmpl, tree spec_tmpl, tree args)
21930 {
21931 tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (spec_tmpl);
21932 tree spec_args
21933 = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (spec_tmpl)));
21934 int i, ntparms = TREE_VEC_LENGTH (tparms);
21935 tree deduced_args;
21936 tree innermost_deduced_args;
21937
21938 innermost_deduced_args = make_tree_vec (ntparms);
21939 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
21940 {
21941 deduced_args = copy_node (args);
21942 SET_TMPL_ARGS_LEVEL (deduced_args,
21943 TMPL_ARGS_DEPTH (deduced_args),
21944 innermost_deduced_args);
21945 }
21946 else
21947 deduced_args = innermost_deduced_args;
21948
21949 bool tried_array_deduction = (cxx_dialect < cxx17);
21950 again:
21951 if (unify (tparms, deduced_args,
21952 INNERMOST_TEMPLATE_ARGS (spec_args),
21953 INNERMOST_TEMPLATE_ARGS (args),
21954 UNIFY_ALLOW_NONE, /*explain_p=*/false))
21955 return NULL_TREE;
21956
21957 for (i = 0; i < ntparms; ++i)
21958 if (! TREE_VEC_ELT (innermost_deduced_args, i))
21959 {
21960 if (!tried_array_deduction)
21961 {
21962 try_array_deduction (tparms, innermost_deduced_args,
21963 INNERMOST_TEMPLATE_ARGS (spec_args));
21964 tried_array_deduction = true;
21965 if (TREE_VEC_ELT (innermost_deduced_args, i))
21966 goto again;
21967 }
21968 return NULL_TREE;
21969 }
21970
21971 tree tinst = build_tree_list (spec_tmpl, deduced_args);
21972 if (!push_tinst_level (tinst))
21973 {
21974 excessive_deduction_depth = true;
21975 return NULL_TREE;
21976 }
21977
21978 /* Verify that nondeduced template arguments agree with the type
21979 obtained from argument deduction.
21980
21981 For example:
21982
21983 struct A { typedef int X; };
21984 template <class T, class U> struct C {};
21985 template <class T> struct C<T, typename T::X> {};
21986
21987 Then with the instantiation `C<A, int>', we can deduce that
21988 `T' is `A' but unify () does not check whether `typename T::X'
21989 is `int'. */
21990 spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
21991
21992 if (spec_args != error_mark_node)
21993 spec_args = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
21994 INNERMOST_TEMPLATE_ARGS (spec_args),
21995 tmpl, tf_none, false, false);
21996
21997 pop_tinst_level ();
21998
21999 if (spec_args == error_mark_node
22000 /* We only need to check the innermost arguments; the other
22001 arguments will always agree. */
22002 || !comp_template_args_porder (INNERMOST_TEMPLATE_ARGS (spec_args),
22003 INNERMOST_TEMPLATE_ARGS (args)))
22004 return NULL_TREE;
22005
22006 /* Now that we have bindings for all of the template arguments,
22007 ensure that the arguments deduced for the template template
22008 parameters have compatible template parameter lists. See the use
22009 of template_template_parm_bindings_ok_p in fn_type_unification
22010 for more information. */
22011 if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
22012 return NULL_TREE;
22013
22014 return deduced_args;
22015 }
22016
22017 // Compare two function templates T1 and T2 by deducing bindings
22018 // from one against the other. If both deductions succeed, compare
22019 // constraints to see which is more constrained.
22020 static int
22021 more_specialized_inst (tree t1, tree t2)
22022 {
22023 int fate = 0;
22024 int count = 0;
22025
22026 if (get_bindings (t1, DECL_TEMPLATE_RESULT (t2), NULL_TREE, true))
22027 {
22028 --fate;
22029 ++count;
22030 }
22031
22032 if (get_bindings (t2, DECL_TEMPLATE_RESULT (t1), NULL_TREE, true))
22033 {
22034 ++fate;
22035 ++count;
22036 }
22037
22038 // If both deductions succeed, then one may be more constrained.
22039 if (count == 2 && fate == 0)
22040 fate = more_constrained (t1, t2);
22041
22042 return fate;
22043 }
22044
22045 /* TEMPLATES is a TREE_LIST. Each TREE_VALUE is a TEMPLATE_DECL.
22046 Return the TREE_LIST node with the most specialized template, if
22047 any. If there is no most specialized template, the error_mark_node
22048 is returned.
22049
22050 Note that this function does not look at, or modify, the
22051 TREE_PURPOSE or TREE_TYPE of any of the nodes. Since the node
22052 returned is one of the elements of INSTANTIATIONS, callers may
22053 store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
22054 and retrieve it from the value returned. */
22055
22056 tree
22057 most_specialized_instantiation (tree templates)
22058 {
22059 tree fn, champ;
22060
22061 ++processing_template_decl;
22062
22063 champ = templates;
22064 for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
22065 {
22066 gcc_assert (TREE_VALUE (champ) != TREE_VALUE (fn));
22067 int fate = more_specialized_inst (TREE_VALUE (champ), TREE_VALUE (fn));
22068 if (fate == -1)
22069 champ = fn;
22070 else if (!fate)
22071 {
22072 /* Equally specialized, move to next function. If there
22073 is no next function, nothing's most specialized. */
22074 fn = TREE_CHAIN (fn);
22075 champ = fn;
22076 if (!fn)
22077 break;
22078 }
22079 }
22080
22081 if (champ)
22082 /* Now verify that champ is better than everything earlier in the
22083 instantiation list. */
22084 for (fn = templates; fn != champ; fn = TREE_CHAIN (fn)) {
22085 if (more_specialized_inst (TREE_VALUE (champ), TREE_VALUE (fn)) != 1)
22086 {
22087 champ = NULL_TREE;
22088 break;
22089 }
22090 }
22091
22092 processing_template_decl--;
22093
22094 if (!champ)
22095 return error_mark_node;
22096
22097 return champ;
22098 }
22099
22100 /* If DECL is a specialization of some template, return the most
22101 general such template. Otherwise, returns NULL_TREE.
22102
22103 For example, given:
22104
22105 template <class T> struct S { template <class U> void f(U); };
22106
22107 if TMPL is `template <class U> void S<int>::f(U)' this will return
22108 the full template. This function will not trace past partial
22109 specializations, however. For example, given in addition:
22110
22111 template <class T> struct S<T*> { template <class U> void f(U); };
22112
22113 if TMPL is `template <class U> void S<int*>::f(U)' this will return
22114 `template <class T> template <class U> S<T*>::f(U)'. */
22115
22116 tree
22117 most_general_template (tree decl)
22118 {
22119 if (TREE_CODE (decl) != TEMPLATE_DECL)
22120 {
22121 if (tree tinfo = get_template_info (decl))
22122 decl = TI_TEMPLATE (tinfo);
22123 /* The TI_TEMPLATE can be an IDENTIFIER_NODE for a
22124 template friend, or a FIELD_DECL for a capture pack. */
22125 if (TREE_CODE (decl) != TEMPLATE_DECL)
22126 return NULL_TREE;
22127 }
22128
22129 /* Look for more and more general templates. */
22130 while (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
22131 {
22132 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
22133 (See cp-tree.h for details.) */
22134 if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
22135 break;
22136
22137 if (CLASS_TYPE_P (TREE_TYPE (decl))
22138 && !TYPE_DECL_ALIAS_P (TYPE_NAME (TREE_TYPE (decl)))
22139 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
22140 break;
22141
22142 /* Stop if we run into an explicitly specialized class template. */
22143 if (!DECL_NAMESPACE_SCOPE_P (decl)
22144 && DECL_CONTEXT (decl)
22145 && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
22146 break;
22147
22148 decl = DECL_TI_TEMPLATE (decl);
22149 }
22150
22151 return decl;
22152 }
22153
22154 /* Return the most specialized of the template partial specializations
22155 which can produce TARGET, a specialization of some class or variable
22156 template. The value returned is actually a TREE_LIST; the TREE_VALUE is
22157 a TEMPLATE_DECL node corresponding to the partial specialization, while
22158 the TREE_PURPOSE is the set of template arguments that must be
22159 substituted into the template pattern in order to generate TARGET.
22160
22161 If the choice of partial specialization is ambiguous, a diagnostic
22162 is issued, and the error_mark_node is returned. If there are no
22163 partial specializations matching TARGET, then NULL_TREE is
22164 returned, indicating that the primary template should be used. */
22165
22166 static tree
22167 most_specialized_partial_spec (tree target, tsubst_flags_t complain)
22168 {
22169 tree list = NULL_TREE;
22170 tree t;
22171 tree champ;
22172 int fate;
22173 bool ambiguous_p;
22174 tree outer_args = NULL_TREE;
22175 tree tmpl, args;
22176
22177 if (TYPE_P (target))
22178 {
22179 tree tinfo = CLASSTYPE_TEMPLATE_INFO (target);
22180 tmpl = TI_TEMPLATE (tinfo);
22181 args = TI_ARGS (tinfo);
22182 }
22183 else if (TREE_CODE (target) == TEMPLATE_ID_EXPR)
22184 {
22185 tmpl = TREE_OPERAND (target, 0);
22186 args = TREE_OPERAND (target, 1);
22187 }
22188 else if (VAR_P (target))
22189 {
22190 tree tinfo = DECL_TEMPLATE_INFO (target);
22191 tmpl = TI_TEMPLATE (tinfo);
22192 args = TI_ARGS (tinfo);
22193 }
22194 else
22195 gcc_unreachable ();
22196
22197 tree main_tmpl = most_general_template (tmpl);
22198
22199 /* For determining which partial specialization to use, only the
22200 innermost args are interesting. */
22201 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
22202 {
22203 outer_args = strip_innermost_template_args (args, 1);
22204 args = INNERMOST_TEMPLATE_ARGS (args);
22205 }
22206
22207 for (t = DECL_TEMPLATE_SPECIALIZATIONS (main_tmpl); t; t = TREE_CHAIN (t))
22208 {
22209 tree spec_args;
22210 tree spec_tmpl = TREE_VALUE (t);
22211
22212 if (outer_args)
22213 {
22214 /* Substitute in the template args from the enclosing class. */
22215 ++processing_template_decl;
22216 spec_tmpl = tsubst (spec_tmpl, outer_args, tf_none, NULL_TREE);
22217 --processing_template_decl;
22218 }
22219
22220 if (spec_tmpl == error_mark_node)
22221 return error_mark_node;
22222
22223 spec_args = get_partial_spec_bindings (tmpl, spec_tmpl, args);
22224 if (spec_args)
22225 {
22226 if (outer_args)
22227 spec_args = add_to_template_args (outer_args, spec_args);
22228
22229 /* Keep the candidate only if the constraints are satisfied,
22230 or if we're not compiling with concepts. */
22231 if (!flag_concepts
22232 || constraints_satisfied_p (spec_tmpl, spec_args))
22233 {
22234 list = tree_cons (spec_args, TREE_VALUE (t), list);
22235 TREE_TYPE (list) = TREE_TYPE (t);
22236 }
22237 }
22238 }
22239
22240 if (! list)
22241 return NULL_TREE;
22242
22243 ambiguous_p = false;
22244 t = list;
22245 champ = t;
22246 t = TREE_CHAIN (t);
22247 for (; t; t = TREE_CHAIN (t))
22248 {
22249 fate = more_specialized_partial_spec (tmpl, champ, t);
22250 if (fate == 1)
22251 ;
22252 else
22253 {
22254 if (fate == 0)
22255 {
22256 t = TREE_CHAIN (t);
22257 if (! t)
22258 {
22259 ambiguous_p = true;
22260 break;
22261 }
22262 }
22263 champ = t;
22264 }
22265 }
22266
22267 if (!ambiguous_p)
22268 for (t = list; t && t != champ; t = TREE_CHAIN (t))
22269 {
22270 fate = more_specialized_partial_spec (tmpl, champ, t);
22271 if (fate != 1)
22272 {
22273 ambiguous_p = true;
22274 break;
22275 }
22276 }
22277
22278 if (ambiguous_p)
22279 {
22280 const char *str;
22281 char *spaces = NULL;
22282 if (!(complain & tf_error))
22283 return error_mark_node;
22284 if (TYPE_P (target))
22285 error ("ambiguous template instantiation for %q#T", target);
22286 else
22287 error ("ambiguous template instantiation for %q#D", target);
22288 str = ngettext ("candidate is:", "candidates are:", list_length (list));
22289 for (t = list; t; t = TREE_CHAIN (t))
22290 {
22291 tree subst = build_tree_list (TREE_VALUE (t), TREE_PURPOSE (t));
22292 inform (DECL_SOURCE_LOCATION (TREE_VALUE (t)),
22293 "%s %#qS", spaces ? spaces : str, subst);
22294 spaces = spaces ? spaces : get_spaces (str);
22295 }
22296 free (spaces);
22297 return error_mark_node;
22298 }
22299
22300 return champ;
22301 }
22302
22303 /* Explicitly instantiate DECL. */
22304
22305 void
22306 do_decl_instantiation (tree decl, tree storage)
22307 {
22308 tree result = NULL_TREE;
22309 int extern_p = 0;
22310
22311 if (!decl || decl == error_mark_node)
22312 /* An error occurred, for which grokdeclarator has already issued
22313 an appropriate message. */
22314 return;
22315 else if (! DECL_LANG_SPECIFIC (decl))
22316 {
22317 error ("explicit instantiation of non-template %q#D", decl);
22318 return;
22319 }
22320
22321 bool var_templ = (DECL_TEMPLATE_INFO (decl)
22322 && variable_template_p (DECL_TI_TEMPLATE (decl)));
22323
22324 if (VAR_P (decl) && !var_templ)
22325 {
22326 /* There is an asymmetry here in the way VAR_DECLs and
22327 FUNCTION_DECLs are handled by grokdeclarator. In the case of
22328 the latter, the DECL we get back will be marked as a
22329 template instantiation, and the appropriate
22330 DECL_TEMPLATE_INFO will be set up. This does not happen for
22331 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
22332 should handle VAR_DECLs as it currently handles
22333 FUNCTION_DECLs. */
22334 if (!DECL_CLASS_SCOPE_P (decl))
22335 {
22336 error ("%qD is not a static data member of a class template", decl);
22337 return;
22338 }
22339 result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
22340 if (!result || !VAR_P (result))
22341 {
22342 error ("no matching template for %qD found", decl);
22343 return;
22344 }
22345 if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
22346 {
22347 error ("type %qT for explicit instantiation %qD does not match "
22348 "declared type %qT", TREE_TYPE (result), decl,
22349 TREE_TYPE (decl));
22350 return;
22351 }
22352 }
22353 else if (TREE_CODE (decl) != FUNCTION_DECL && !var_templ)
22354 {
22355 error ("explicit instantiation of %q#D", decl);
22356 return;
22357 }
22358 else
22359 result = decl;
22360
22361 /* Check for various error cases. Note that if the explicit
22362 instantiation is valid the RESULT will currently be marked as an
22363 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
22364 until we get here. */
22365
22366 if (DECL_TEMPLATE_SPECIALIZATION (result))
22367 {
22368 /* DR 259 [temp.spec].
22369
22370 Both an explicit instantiation and a declaration of an explicit
22371 specialization shall not appear in a program unless the explicit
22372 instantiation follows a declaration of the explicit specialization.
22373
22374 For a given set of template parameters, if an explicit
22375 instantiation of a template appears after a declaration of an
22376 explicit specialization for that template, the explicit
22377 instantiation has no effect. */
22378 return;
22379 }
22380 else if (DECL_EXPLICIT_INSTANTIATION (result))
22381 {
22382 /* [temp.spec]
22383
22384 No program shall explicitly instantiate any template more
22385 than once.
22386
22387 We check DECL_NOT_REALLY_EXTERN so as not to complain when
22388 the first instantiation was `extern' and the second is not,
22389 and EXTERN_P for the opposite case. */
22390 if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
22391 permerror (input_location, "duplicate explicit instantiation of %q#D", result);
22392 /* If an "extern" explicit instantiation follows an ordinary
22393 explicit instantiation, the template is instantiated. */
22394 if (extern_p)
22395 return;
22396 }
22397 else if (!DECL_IMPLICIT_INSTANTIATION (result))
22398 {
22399 error ("no matching template for %qD found", result);
22400 return;
22401 }
22402 else if (!DECL_TEMPLATE_INFO (result))
22403 {
22404 permerror (input_location, "explicit instantiation of non-template %q#D", result);
22405 return;
22406 }
22407
22408 if (storage == NULL_TREE)
22409 ;
22410 else if (storage == ridpointers[(int) RID_EXTERN])
22411 {
22412 if (!in_system_header_at (input_location) && (cxx_dialect == cxx98))
22413 pedwarn (input_location, OPT_Wpedantic,
22414 "ISO C++ 1998 forbids the use of %<extern%> on explicit "
22415 "instantiations");
22416 extern_p = 1;
22417 }
22418 else
22419 error ("storage class %qD applied to template instantiation", storage);
22420
22421 check_explicit_instantiation_namespace (result);
22422 mark_decl_instantiated (result, extern_p);
22423 if (! extern_p)
22424 instantiate_decl (result, /*defer_ok=*/true,
22425 /*expl_inst_class_mem_p=*/false);
22426 }
22427
22428 static void
22429 mark_class_instantiated (tree t, int extern_p)
22430 {
22431 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
22432 SET_CLASSTYPE_INTERFACE_KNOWN (t);
22433 CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
22434 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
22435 if (! extern_p)
22436 {
22437 CLASSTYPE_DEBUG_REQUESTED (t) = 1;
22438 rest_of_type_compilation (t, 1);
22439 }
22440 }
22441
22442 /* Called from do_type_instantiation through binding_table_foreach to
22443 do recursive instantiation for the type bound in ENTRY. */
22444 static void
22445 bt_instantiate_type_proc (binding_entry entry, void *data)
22446 {
22447 tree storage = *(tree *) data;
22448
22449 if (MAYBE_CLASS_TYPE_P (entry->type)
22450 && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
22451 do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
22452 }
22453
22454 /* Perform an explicit instantiation of template class T. STORAGE, if
22455 non-null, is the RID for extern, inline or static. COMPLAIN is
22456 nonzero if this is called from the parser, zero if called recursively,
22457 since the standard is unclear (as detailed below). */
22458
22459 void
22460 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
22461 {
22462 int extern_p = 0;
22463 int nomem_p = 0;
22464 int static_p = 0;
22465 int previous_instantiation_extern_p = 0;
22466
22467 if (TREE_CODE (t) == TYPE_DECL)
22468 t = TREE_TYPE (t);
22469
22470 if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
22471 {
22472 tree tmpl =
22473 (TYPE_TEMPLATE_INFO (t)) ? TYPE_TI_TEMPLATE (t) : NULL;
22474 if (tmpl)
22475 error ("explicit instantiation of non-class template %qD", tmpl);
22476 else
22477 error ("explicit instantiation of non-template type %qT", t);
22478 return;
22479 }
22480
22481 complete_type (t);
22482
22483 if (!COMPLETE_TYPE_P (t))
22484 {
22485 if (complain & tf_error)
22486 error ("explicit instantiation of %q#T before definition of template",
22487 t);
22488 return;
22489 }
22490
22491 if (storage != NULL_TREE)
22492 {
22493 if (!in_system_header_at (input_location))
22494 {
22495 if (storage == ridpointers[(int) RID_EXTERN])
22496 {
22497 if (cxx_dialect == cxx98)
22498 pedwarn (input_location, OPT_Wpedantic,
22499 "ISO C++ 1998 forbids the use of %<extern%> on "
22500 "explicit instantiations");
22501 }
22502 else
22503 pedwarn (input_location, OPT_Wpedantic,
22504 "ISO C++ forbids the use of %qE"
22505 " on explicit instantiations", storage);
22506 }
22507
22508 if (storage == ridpointers[(int) RID_INLINE])
22509 nomem_p = 1;
22510 else if (storage == ridpointers[(int) RID_EXTERN])
22511 extern_p = 1;
22512 else if (storage == ridpointers[(int) RID_STATIC])
22513 static_p = 1;
22514 else
22515 {
22516 error ("storage class %qD applied to template instantiation",
22517 storage);
22518 extern_p = 0;
22519 }
22520 }
22521
22522 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
22523 {
22524 /* DR 259 [temp.spec].
22525
22526 Both an explicit instantiation and a declaration of an explicit
22527 specialization shall not appear in a program unless the explicit
22528 instantiation follows a declaration of the explicit specialization.
22529
22530 For a given set of template parameters, if an explicit
22531 instantiation of a template appears after a declaration of an
22532 explicit specialization for that template, the explicit
22533 instantiation has no effect. */
22534 return;
22535 }
22536 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
22537 {
22538 /* [temp.spec]
22539
22540 No program shall explicitly instantiate any template more
22541 than once.
22542
22543 If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
22544 instantiation was `extern'. If EXTERN_P then the second is.
22545 These cases are OK. */
22546 previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
22547
22548 if (!previous_instantiation_extern_p && !extern_p
22549 && (complain & tf_error))
22550 permerror (input_location, "duplicate explicit instantiation of %q#T", t);
22551
22552 /* If we've already instantiated the template, just return now. */
22553 if (!CLASSTYPE_INTERFACE_ONLY (t))
22554 return;
22555 }
22556
22557 check_explicit_instantiation_namespace (TYPE_NAME (t));
22558 mark_class_instantiated (t, extern_p);
22559
22560 if (nomem_p)
22561 return;
22562
22563 /* In contrast to implicit instantiation, where only the
22564 declarations, and not the definitions, of members are
22565 instantiated, we have here:
22566
22567 [temp.explicit]
22568
22569 The explicit instantiation of a class template specialization
22570 implies the instantiation of all of its members not
22571 previously explicitly specialized in the translation unit
22572 containing the explicit instantiation.
22573
22574 Of course, we can't instantiate member template classes, since we
22575 don't have any arguments for them. Note that the standard is
22576 unclear on whether the instantiation of the members are
22577 *explicit* instantiations or not. However, the most natural
22578 interpretation is that it should be an explicit
22579 instantiation. */
22580 for (tree fld = TYPE_FIELDS (t); fld; fld = DECL_CHAIN (fld))
22581 if ((VAR_P (fld)
22582 || (TREE_CODE (fld) == FUNCTION_DECL
22583 && !static_p
22584 && user_provided_p (fld)))
22585 && DECL_TEMPLATE_INSTANTIATION (fld))
22586 {
22587 mark_decl_instantiated (fld, extern_p);
22588 if (! extern_p)
22589 instantiate_decl (fld, /*defer_ok=*/true,
22590 /*expl_inst_class_mem_p=*/true);
22591 }
22592
22593 if (CLASSTYPE_NESTED_UTDS (t))
22594 binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
22595 bt_instantiate_type_proc, &storage);
22596 }
22597
22598 /* Given a function DECL, which is a specialization of TMPL, modify
22599 DECL to be a re-instantiation of TMPL with the same template
22600 arguments. TMPL should be the template into which tsubst'ing
22601 should occur for DECL, not the most general template.
22602
22603 One reason for doing this is a scenario like this:
22604
22605 template <class T>
22606 void f(const T&, int i);
22607
22608 void g() { f(3, 7); }
22609
22610 template <class T>
22611 void f(const T& t, const int i) { }
22612
22613 Note that when the template is first instantiated, with
22614 instantiate_template, the resulting DECL will have no name for the
22615 first parameter, and the wrong type for the second. So, when we go
22616 to instantiate the DECL, we regenerate it. */
22617
22618 static void
22619 regenerate_decl_from_template (tree decl, tree tmpl, tree args)
22620 {
22621 /* The arguments used to instantiate DECL, from the most general
22622 template. */
22623 tree code_pattern;
22624
22625 code_pattern = DECL_TEMPLATE_RESULT (tmpl);
22626
22627 /* Make sure that we can see identifiers, and compute access
22628 correctly. */
22629 push_access_scope (decl);
22630
22631 if (TREE_CODE (decl) == FUNCTION_DECL)
22632 {
22633 tree decl_parm;
22634 tree pattern_parm;
22635 tree specs;
22636 int args_depth;
22637 int parms_depth;
22638
22639 args_depth = TMPL_ARGS_DEPTH (args);
22640 parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
22641 if (args_depth > parms_depth)
22642 args = get_innermost_template_args (args, parms_depth);
22643
22644 specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
22645 args, tf_error, NULL_TREE,
22646 /*defer_ok*/false);
22647 if (specs && specs != error_mark_node)
22648 TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
22649 specs);
22650
22651 /* Merge parameter declarations. */
22652 decl_parm = skip_artificial_parms_for (decl,
22653 DECL_ARGUMENTS (decl));
22654 pattern_parm
22655 = skip_artificial_parms_for (code_pattern,
22656 DECL_ARGUMENTS (code_pattern));
22657 while (decl_parm && !DECL_PACK_P (pattern_parm))
22658 {
22659 tree parm_type;
22660 tree attributes;
22661
22662 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
22663 DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
22664 parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
22665 NULL_TREE);
22666 parm_type = type_decays_to (parm_type);
22667 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
22668 TREE_TYPE (decl_parm) = parm_type;
22669 attributes = DECL_ATTRIBUTES (pattern_parm);
22670 if (DECL_ATTRIBUTES (decl_parm) != attributes)
22671 {
22672 DECL_ATTRIBUTES (decl_parm) = attributes;
22673 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
22674 }
22675 decl_parm = DECL_CHAIN (decl_parm);
22676 pattern_parm = DECL_CHAIN (pattern_parm);
22677 }
22678 /* Merge any parameters that match with the function parameter
22679 pack. */
22680 if (pattern_parm && DECL_PACK_P (pattern_parm))
22681 {
22682 int i, len;
22683 tree expanded_types;
22684 /* Expand the TYPE_PACK_EXPANSION that provides the types for
22685 the parameters in this function parameter pack. */
22686 expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm),
22687 args, tf_error, NULL_TREE);
22688 len = TREE_VEC_LENGTH (expanded_types);
22689 for (i = 0; i < len; i++)
22690 {
22691 tree parm_type;
22692 tree attributes;
22693
22694 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
22695 /* Rename the parameter to include the index. */
22696 DECL_NAME (decl_parm) =
22697 make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
22698 parm_type = TREE_VEC_ELT (expanded_types, i);
22699 parm_type = type_decays_to (parm_type);
22700 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
22701 TREE_TYPE (decl_parm) = parm_type;
22702 attributes = DECL_ATTRIBUTES (pattern_parm);
22703 if (DECL_ATTRIBUTES (decl_parm) != attributes)
22704 {
22705 DECL_ATTRIBUTES (decl_parm) = attributes;
22706 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
22707 }
22708 decl_parm = DECL_CHAIN (decl_parm);
22709 }
22710 }
22711 /* Merge additional specifiers from the CODE_PATTERN. */
22712 if (DECL_DECLARED_INLINE_P (code_pattern)
22713 && !DECL_DECLARED_INLINE_P (decl))
22714 DECL_DECLARED_INLINE_P (decl) = 1;
22715 }
22716 else if (VAR_P (decl))
22717 {
22718 start_lambda_scope (decl);
22719 DECL_INITIAL (decl) =
22720 tsubst_expr (DECL_INITIAL (code_pattern), args,
22721 tf_error, DECL_TI_TEMPLATE (decl),
22722 /*integral_constant_expression_p=*/false);
22723 finish_lambda_scope ();
22724 if (VAR_HAD_UNKNOWN_BOUND (decl))
22725 TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
22726 tf_error, DECL_TI_TEMPLATE (decl));
22727 }
22728 else
22729 gcc_unreachable ();
22730
22731 pop_access_scope (decl);
22732 }
22733
22734 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
22735 substituted to get DECL. */
22736
22737 tree
22738 template_for_substitution (tree decl)
22739 {
22740 tree tmpl = DECL_TI_TEMPLATE (decl);
22741
22742 /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
22743 for the instantiation. This is not always the most general
22744 template. Consider, for example:
22745
22746 template <class T>
22747 struct S { template <class U> void f();
22748 template <> void f<int>(); };
22749
22750 and an instantiation of S<double>::f<int>. We want TD to be the
22751 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
22752 while (/* An instantiation cannot have a definition, so we need a
22753 more general template. */
22754 DECL_TEMPLATE_INSTANTIATION (tmpl)
22755 /* We must also deal with friend templates. Given:
22756
22757 template <class T> struct S {
22758 template <class U> friend void f() {};
22759 };
22760
22761 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
22762 so far as the language is concerned, but that's still
22763 where we get the pattern for the instantiation from. On
22764 other hand, if the definition comes outside the class, say:
22765
22766 template <class T> struct S {
22767 template <class U> friend void f();
22768 };
22769 template <class U> friend void f() {}
22770
22771 we don't need to look any further. That's what the check for
22772 DECL_INITIAL is for. */
22773 || (TREE_CODE (decl) == FUNCTION_DECL
22774 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
22775 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
22776 {
22777 /* The present template, TD, should not be a definition. If it
22778 were a definition, we should be using it! Note that we
22779 cannot restructure the loop to just keep going until we find
22780 a template with a definition, since that might go too far if
22781 a specialization was declared, but not defined. */
22782
22783 /* Fetch the more general template. */
22784 tmpl = DECL_TI_TEMPLATE (tmpl);
22785 }
22786
22787 return tmpl;
22788 }
22789
22790 /* Returns true if we need to instantiate this template instance even if we
22791 know we aren't going to emit it. */
22792
22793 bool
22794 always_instantiate_p (tree decl)
22795 {
22796 /* We always instantiate inline functions so that we can inline them. An
22797 explicit instantiation declaration prohibits implicit instantiation of
22798 non-inline functions. With high levels of optimization, we would
22799 normally inline non-inline functions -- but we're not allowed to do
22800 that for "extern template" functions. Therefore, we check
22801 DECL_DECLARED_INLINE_P, rather than possibly_inlined_p. */
22802 return ((TREE_CODE (decl) == FUNCTION_DECL
22803 && (DECL_DECLARED_INLINE_P (decl)
22804 || type_uses_auto (TREE_TYPE (TREE_TYPE (decl)))))
22805 /* And we need to instantiate static data members so that
22806 their initializers are available in integral constant
22807 expressions. */
22808 || (VAR_P (decl)
22809 && decl_maybe_constant_var_p (decl)));
22810 }
22811
22812 /* If FN has a noexcept-specifier that hasn't been instantiated yet,
22813 instantiate it now, modifying TREE_TYPE (fn). Returns false on
22814 error, true otherwise. */
22815
22816 bool
22817 maybe_instantiate_noexcept (tree fn, tsubst_flags_t complain)
22818 {
22819 tree fntype, spec, noex, clone;
22820
22821 /* Don't instantiate a noexcept-specification from template context. */
22822 if (processing_template_decl)
22823 return true;
22824
22825 if (DECL_CLONED_FUNCTION_P (fn))
22826 fn = DECL_CLONED_FUNCTION (fn);
22827 fntype = TREE_TYPE (fn);
22828 spec = TYPE_RAISES_EXCEPTIONS (fntype);
22829
22830 if (!spec || !TREE_PURPOSE (spec))
22831 return true;
22832
22833 noex = TREE_PURPOSE (spec);
22834
22835 if (TREE_CODE (noex) == DEFERRED_NOEXCEPT)
22836 {
22837 static hash_set<tree>* fns = new hash_set<tree>;
22838 bool added = false;
22839 if (DEFERRED_NOEXCEPT_PATTERN (noex) == NULL_TREE)
22840 spec = get_defaulted_eh_spec (fn, complain);
22841 else if (!(added = !fns->add (fn)))
22842 {
22843 /* If hash_set::add returns true, the element was already there. */
22844 location_t loc = EXPR_LOC_OR_LOC (DEFERRED_NOEXCEPT_PATTERN (noex),
22845 DECL_SOURCE_LOCATION (fn));
22846 error_at (loc,
22847 "exception specification of %qD depends on itself",
22848 fn);
22849 spec = noexcept_false_spec;
22850 }
22851 else if (push_tinst_level (fn))
22852 {
22853 push_access_scope (fn);
22854 push_deferring_access_checks (dk_no_deferred);
22855 input_location = DECL_SOURCE_LOCATION (fn);
22856 noex = tsubst_copy_and_build (DEFERRED_NOEXCEPT_PATTERN (noex),
22857 DEFERRED_NOEXCEPT_ARGS (noex),
22858 tf_warning_or_error, fn,
22859 /*function_p=*/false,
22860 /*integral_constant_expression_p=*/true);
22861 pop_deferring_access_checks ();
22862 pop_access_scope (fn);
22863 pop_tinst_level ();
22864 spec = build_noexcept_spec (noex, tf_warning_or_error);
22865 if (spec == error_mark_node)
22866 spec = noexcept_false_spec;
22867 }
22868 else
22869 spec = noexcept_false_spec;
22870
22871 if (added)
22872 fns->remove (fn);
22873
22874 if (spec == error_mark_node)
22875 return false;
22876
22877 TREE_TYPE (fn) = build_exception_variant (fntype, spec);
22878 }
22879
22880 FOR_EACH_CLONE (clone, fn)
22881 {
22882 if (TREE_TYPE (clone) == fntype)
22883 TREE_TYPE (clone) = TREE_TYPE (fn);
22884 else
22885 TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone), spec);
22886 }
22887
22888 return true;
22889 }
22890
22891 /* We're starting to process the function INST, an instantiation of PATTERN;
22892 add their parameters to local_specializations. */
22893
22894 static void
22895 register_parameter_specializations (tree pattern, tree inst)
22896 {
22897 tree tmpl_parm = DECL_ARGUMENTS (pattern);
22898 tree spec_parm = DECL_ARGUMENTS (inst);
22899 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (inst))
22900 {
22901 register_local_specialization (spec_parm, tmpl_parm);
22902 spec_parm = skip_artificial_parms_for (inst, spec_parm);
22903 tmpl_parm = skip_artificial_parms_for (pattern, tmpl_parm);
22904 }
22905 for (; tmpl_parm; tmpl_parm = DECL_CHAIN (tmpl_parm))
22906 {
22907 if (!DECL_PACK_P (tmpl_parm))
22908 {
22909 register_local_specialization (spec_parm, tmpl_parm);
22910 spec_parm = DECL_CHAIN (spec_parm);
22911 }
22912 else
22913 {
22914 /* Register the (value) argument pack as a specialization of
22915 TMPL_PARM, then move on. */
22916 tree argpack = extract_fnparm_pack (tmpl_parm, &spec_parm);
22917 register_local_specialization (argpack, tmpl_parm);
22918 }
22919 }
22920 gcc_assert (!spec_parm);
22921 }
22922
22923 /* Produce the definition of D, a _DECL generated from a template. If
22924 DEFER_OK is true, then we don't have to actually do the
22925 instantiation now; we just have to do it sometime. Normally it is
22926 an error if this is an explicit instantiation but D is undefined.
22927 EXPL_INST_CLASS_MEM_P is true iff D is a member of an explicitly
22928 instantiated class template. */
22929
22930 tree
22931 instantiate_decl (tree d, bool defer_ok, bool expl_inst_class_mem_p)
22932 {
22933 tree tmpl = DECL_TI_TEMPLATE (d);
22934 tree gen_args;
22935 tree args;
22936 tree td;
22937 tree code_pattern;
22938 tree spec;
22939 tree gen_tmpl;
22940 bool pattern_defined;
22941 location_t saved_loc = input_location;
22942 int saved_unevaluated_operand = cp_unevaluated_operand;
22943 int saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
22944 bool external_p;
22945 bool deleted_p;
22946
22947 /* This function should only be used to instantiate templates for
22948 functions and static member variables. */
22949 gcc_assert (VAR_OR_FUNCTION_DECL_P (d));
22950
22951 /* A concept is never instantiated. */
22952 gcc_assert (!DECL_DECLARED_CONCEPT_P (d));
22953
22954 /* Variables are never deferred; if instantiation is required, they
22955 are instantiated right away. That allows for better code in the
22956 case that an expression refers to the value of the variable --
22957 if the variable has a constant value the referring expression can
22958 take advantage of that fact. */
22959 if (VAR_P (d))
22960 defer_ok = false;
22961
22962 /* Don't instantiate cloned functions. Instead, instantiate the
22963 functions they cloned. */
22964 if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
22965 d = DECL_CLONED_FUNCTION (d);
22966
22967 if (DECL_TEMPLATE_INSTANTIATED (d)
22968 || (TREE_CODE (d) == FUNCTION_DECL
22969 && DECL_DEFAULTED_FN (d) && DECL_INITIAL (d))
22970 || DECL_TEMPLATE_SPECIALIZATION (d))
22971 /* D has already been instantiated or explicitly specialized, so
22972 there's nothing for us to do here.
22973
22974 It might seem reasonable to check whether or not D is an explicit
22975 instantiation, and, if so, stop here. But when an explicit
22976 instantiation is deferred until the end of the compilation,
22977 DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
22978 the instantiation. */
22979 return d;
22980
22981 /* Check to see whether we know that this template will be
22982 instantiated in some other file, as with "extern template"
22983 extension. */
22984 external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
22985
22986 /* In general, we do not instantiate such templates. */
22987 if (external_p && !always_instantiate_p (d))
22988 return d;
22989
22990 gen_tmpl = most_general_template (tmpl);
22991 gen_args = DECL_TI_ARGS (d);
22992
22993 if (tmpl != gen_tmpl)
22994 /* We should already have the extra args. */
22995 gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
22996 == TMPL_ARGS_DEPTH (gen_args));
22997 /* And what's in the hash table should match D. */
22998 gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
22999 || spec == NULL_TREE);
23000
23001 /* This needs to happen before any tsubsting. */
23002 if (! push_tinst_level (d))
23003 return d;
23004
23005 timevar_push (TV_TEMPLATE_INST);
23006
23007 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
23008 for the instantiation. */
23009 td = template_for_substitution (d);
23010 args = gen_args;
23011
23012 if (VAR_P (d))
23013 {
23014 /* Look up an explicit specialization, if any. */
23015 tree tid = lookup_template_variable (gen_tmpl, gen_args);
23016 tree elt = most_specialized_partial_spec (tid, tf_warning_or_error);
23017 if (elt && elt != error_mark_node)
23018 {
23019 td = TREE_VALUE (elt);
23020 args = TREE_PURPOSE (elt);
23021 }
23022 }
23023
23024 code_pattern = DECL_TEMPLATE_RESULT (td);
23025
23026 /* We should never be trying to instantiate a member of a class
23027 template or partial specialization. */
23028 gcc_assert (d != code_pattern);
23029
23030 if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
23031 || DECL_TEMPLATE_SPECIALIZATION (td))
23032 /* In the case of a friend template whose definition is provided
23033 outside the class, we may have too many arguments. Drop the
23034 ones we don't need. The same is true for specializations. */
23035 args = get_innermost_template_args
23036 (args, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td)));
23037
23038 if (TREE_CODE (d) == FUNCTION_DECL)
23039 {
23040 deleted_p = DECL_DELETED_FN (code_pattern);
23041 pattern_defined = ((DECL_SAVED_TREE (code_pattern) != NULL_TREE
23042 && DECL_INITIAL (code_pattern) != error_mark_node)
23043 || DECL_DEFAULTED_OUTSIDE_CLASS_P (code_pattern)
23044 || deleted_p);
23045 }
23046 else
23047 {
23048 deleted_p = false;
23049 if (DECL_CLASS_SCOPE_P (code_pattern))
23050 pattern_defined = (! DECL_IN_AGGR_P (code_pattern)
23051 || DECL_INLINE_VAR_P (code_pattern));
23052 else
23053 pattern_defined = ! DECL_EXTERNAL (code_pattern);
23054 }
23055
23056 /* We may be in the middle of deferred access check. Disable it now. */
23057 push_deferring_access_checks (dk_no_deferred);
23058
23059 /* Unless an explicit instantiation directive has already determined
23060 the linkage of D, remember that a definition is available for
23061 this entity. */
23062 if (pattern_defined
23063 && !DECL_INTERFACE_KNOWN (d)
23064 && !DECL_NOT_REALLY_EXTERN (d))
23065 mark_definable (d);
23066
23067 DECL_SOURCE_LOCATION (td) = DECL_SOURCE_LOCATION (code_pattern);
23068 DECL_SOURCE_LOCATION (d) = DECL_SOURCE_LOCATION (code_pattern);
23069 input_location = DECL_SOURCE_LOCATION (d);
23070
23071 /* If D is a member of an explicitly instantiated class template,
23072 and no definition is available, treat it like an implicit
23073 instantiation. */
23074 if (!pattern_defined && expl_inst_class_mem_p
23075 && DECL_EXPLICIT_INSTANTIATION (d))
23076 {
23077 /* Leave linkage flags alone on instantiations with anonymous
23078 visibility. */
23079 if (TREE_PUBLIC (d))
23080 {
23081 DECL_NOT_REALLY_EXTERN (d) = 0;
23082 DECL_INTERFACE_KNOWN (d) = 0;
23083 }
23084 SET_DECL_IMPLICIT_INSTANTIATION (d);
23085 }
23086
23087 /* Defer all other templates, unless we have been explicitly
23088 forbidden from doing so. */
23089 if (/* If there is no definition, we cannot instantiate the
23090 template. */
23091 ! pattern_defined
23092 /* If it's OK to postpone instantiation, do so. */
23093 || defer_ok
23094 /* If this is a static data member that will be defined
23095 elsewhere, we don't want to instantiate the entire data
23096 member, but we do want to instantiate the initializer so that
23097 we can substitute that elsewhere. */
23098 || (external_p && VAR_P (d))
23099 /* Handle here a deleted function too, avoid generating
23100 its body (c++/61080). */
23101 || deleted_p)
23102 {
23103 /* The definition of the static data member is now required so
23104 we must substitute the initializer. */
23105 if (VAR_P (d)
23106 && !DECL_INITIAL (d)
23107 && DECL_INITIAL (code_pattern))
23108 {
23109 tree ns;
23110 tree init;
23111 bool const_init = false;
23112 bool enter_context = DECL_CLASS_SCOPE_P (d);
23113
23114 ns = decl_namespace_context (d);
23115 push_nested_namespace (ns);
23116 if (enter_context)
23117 push_nested_class (DECL_CONTEXT (d));
23118 init = tsubst_expr (DECL_INITIAL (code_pattern),
23119 args,
23120 tf_warning_or_error, NULL_TREE,
23121 /*integral_constant_expression_p=*/false);
23122 /* If instantiating the initializer involved instantiating this
23123 again, don't call cp_finish_decl twice. */
23124 if (!DECL_INITIAL (d))
23125 {
23126 /* Make sure the initializer is still constant, in case of
23127 circular dependency (template/instantiate6.C). */
23128 const_init
23129 = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
23130 cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
23131 /*asmspec_tree=*/NULL_TREE,
23132 LOOKUP_ONLYCONVERTING);
23133 }
23134 if (enter_context)
23135 pop_nested_class ();
23136 pop_nested_namespace (ns);
23137 }
23138
23139 /* We restore the source position here because it's used by
23140 add_pending_template. */
23141 input_location = saved_loc;
23142
23143 if (at_eof && !pattern_defined
23144 && DECL_EXPLICIT_INSTANTIATION (d)
23145 && DECL_NOT_REALLY_EXTERN (d))
23146 /* [temp.explicit]
23147
23148 The definition of a non-exported function template, a
23149 non-exported member function template, or a non-exported
23150 member function or static data member of a class template
23151 shall be present in every translation unit in which it is
23152 explicitly instantiated. */
23153 permerror (input_location, "explicit instantiation of %qD "
23154 "but no definition available", d);
23155
23156 /* If we're in unevaluated context, we just wanted to get the
23157 constant value; this isn't an odr use, so don't queue
23158 a full instantiation. */
23159 if (cp_unevaluated_operand != 0)
23160 goto out;
23161 /* ??? Historically, we have instantiated inline functions, even
23162 when marked as "extern template". */
23163 if (!(external_p && VAR_P (d)))
23164 add_pending_template (d);
23165 goto out;
23166 }
23167 /* Tell the repository that D is available in this translation unit
23168 -- and see if it is supposed to be instantiated here. */
23169 if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
23170 {
23171 /* In a PCH file, despite the fact that the repository hasn't
23172 requested instantiation in the PCH it is still possible that
23173 an instantiation will be required in a file that includes the
23174 PCH. */
23175 if (pch_file)
23176 add_pending_template (d);
23177 /* Instantiate inline functions so that the inliner can do its
23178 job, even though we'll not be emitting a copy of this
23179 function. */
23180 if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
23181 goto out;
23182 }
23183
23184 bool push_to_top, nested;
23185 tree fn_context;
23186 fn_context = decl_function_context (d);
23187 nested = current_function_decl != NULL_TREE;
23188 push_to_top = !(nested && fn_context == current_function_decl);
23189
23190 vec<tree> omp_privatization_save;
23191 if (nested)
23192 save_omp_privatization_clauses (omp_privatization_save);
23193
23194 if (push_to_top)
23195 push_to_top_level ();
23196 else
23197 {
23198 push_function_context ();
23199 cp_unevaluated_operand = 0;
23200 c_inhibit_evaluation_warnings = 0;
23201 }
23202
23203 /* Mark D as instantiated so that recursive calls to
23204 instantiate_decl do not try to instantiate it again. */
23205 DECL_TEMPLATE_INSTANTIATED (d) = 1;
23206
23207 /* Regenerate the declaration in case the template has been modified
23208 by a subsequent redeclaration. */
23209 regenerate_decl_from_template (d, td, args);
23210
23211 /* We already set the file and line above. Reset them now in case
23212 they changed as a result of calling regenerate_decl_from_template. */
23213 input_location = DECL_SOURCE_LOCATION (d);
23214
23215 if (VAR_P (d))
23216 {
23217 tree init;
23218 bool const_init = false;
23219
23220 /* Clear out DECL_RTL; whatever was there before may not be right
23221 since we've reset the type of the declaration. */
23222 SET_DECL_RTL (d, NULL);
23223 DECL_IN_AGGR_P (d) = 0;
23224
23225 /* The initializer is placed in DECL_INITIAL by
23226 regenerate_decl_from_template so we don't need to
23227 push/pop_access_scope again here. Pull it out so that
23228 cp_finish_decl can process it. */
23229 init = DECL_INITIAL (d);
23230 DECL_INITIAL (d) = NULL_TREE;
23231 DECL_INITIALIZED_P (d) = 0;
23232
23233 /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
23234 initializer. That function will defer actual emission until
23235 we have a chance to determine linkage. */
23236 DECL_EXTERNAL (d) = 0;
23237
23238 /* Enter the scope of D so that access-checking works correctly. */
23239 bool enter_context = DECL_CLASS_SCOPE_P (d);
23240 if (enter_context)
23241 push_nested_class (DECL_CONTEXT (d));
23242
23243 const_init = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
23244 cp_finish_decl (d, init, const_init, NULL_TREE, 0);
23245
23246 if (enter_context)
23247 pop_nested_class ();
23248
23249 if (variable_template_p (gen_tmpl))
23250 note_variable_template_instantiation (d);
23251 }
23252 else if (TREE_CODE (d) == FUNCTION_DECL && DECL_DEFAULTED_FN (code_pattern))
23253 synthesize_method (d);
23254 else if (TREE_CODE (d) == FUNCTION_DECL)
23255 {
23256 /* Set up the list of local specializations. */
23257 local_specialization_stack lss (push_to_top ? lss_blank : lss_copy);
23258 tree block = NULL_TREE;
23259
23260 /* Set up context. */
23261 if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern)
23262 && TREE_CODE (DECL_CONTEXT (code_pattern)) == FUNCTION_DECL)
23263 block = push_stmt_list ();
23264 else
23265 start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
23266
23267 /* Some typedefs referenced from within the template code need to be
23268 access checked at template instantiation time, i.e now. These
23269 types were added to the template at parsing time. Let's get those
23270 and perform the access checks then. */
23271 perform_typedefs_access_check (DECL_TEMPLATE_RESULT (td),
23272 args);
23273
23274 /* Create substitution entries for the parameters. */
23275 register_parameter_specializations (code_pattern, d);
23276
23277 /* Substitute into the body of the function. */
23278 if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern))
23279 tsubst_omp_udr (DECL_SAVED_TREE (code_pattern), args,
23280 tf_warning_or_error, tmpl);
23281 else
23282 {
23283 tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
23284 tf_warning_or_error, tmpl,
23285 /*integral_constant_expression_p=*/false);
23286
23287 /* Set the current input_location to the end of the function
23288 so that finish_function knows where we are. */
23289 input_location
23290 = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
23291
23292 /* Remember if we saw an infinite loop in the template. */
23293 current_function_infinite_loop
23294 = DECL_STRUCT_FUNCTION (code_pattern)->language->infinite_loop;
23295 }
23296
23297 /* Finish the function. */
23298 if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern)
23299 && TREE_CODE (DECL_CONTEXT (code_pattern)) == FUNCTION_DECL)
23300 DECL_SAVED_TREE (d) = pop_stmt_list (block);
23301 else
23302 {
23303 d = finish_function (/*inline_p=*/false);
23304 expand_or_defer_fn (d);
23305 }
23306
23307 if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern))
23308 cp_check_omp_declare_reduction (d);
23309 }
23310
23311 /* We're not deferring instantiation any more. */
23312 TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
23313
23314 if (push_to_top)
23315 pop_from_top_level ();
23316 else
23317 pop_function_context ();
23318
23319 if (nested)
23320 restore_omp_privatization_clauses (omp_privatization_save);
23321
23322 out:
23323 pop_deferring_access_checks ();
23324 timevar_pop (TV_TEMPLATE_INST);
23325 pop_tinst_level ();
23326 input_location = saved_loc;
23327 cp_unevaluated_operand = saved_unevaluated_operand;
23328 c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
23329
23330 return d;
23331 }
23332
23333 /* Run through the list of templates that we wish we could
23334 instantiate, and instantiate any we can. RETRIES is the
23335 number of times we retry pending template instantiation. */
23336
23337 void
23338 instantiate_pending_templates (int retries)
23339 {
23340 int reconsider;
23341 location_t saved_loc = input_location;
23342
23343 /* Instantiating templates may trigger vtable generation. This in turn
23344 may require further template instantiations. We place a limit here
23345 to avoid infinite loop. */
23346 if (pending_templates && retries >= max_tinst_depth)
23347 {
23348 tree decl = pending_templates->tinst->decl;
23349
23350 fatal_error (input_location,
23351 "template instantiation depth exceeds maximum of %d"
23352 " instantiating %q+D, possibly from virtual table generation"
23353 " (use -ftemplate-depth= to increase the maximum)",
23354 max_tinst_depth, decl);
23355 if (TREE_CODE (decl) == FUNCTION_DECL)
23356 /* Pretend that we defined it. */
23357 DECL_INITIAL (decl) = error_mark_node;
23358 return;
23359 }
23360
23361 do
23362 {
23363 struct pending_template **t = &pending_templates;
23364 struct pending_template *last = NULL;
23365 reconsider = 0;
23366 while (*t)
23367 {
23368 tree instantiation = reopen_tinst_level ((*t)->tinst);
23369 bool complete = false;
23370
23371 if (TYPE_P (instantiation))
23372 {
23373 if (!COMPLETE_TYPE_P (instantiation))
23374 {
23375 instantiate_class_template (instantiation);
23376 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
23377 for (tree fld = TYPE_FIELDS (instantiation);
23378 fld; fld = TREE_CHAIN (fld))
23379 if ((VAR_P (fld)
23380 || (TREE_CODE (fld) == FUNCTION_DECL
23381 && !DECL_ARTIFICIAL (fld)))
23382 && DECL_TEMPLATE_INSTANTIATION (fld))
23383 instantiate_decl (fld,
23384 /*defer_ok=*/false,
23385 /*expl_inst_class_mem_p=*/false);
23386
23387 if (COMPLETE_TYPE_P (instantiation))
23388 reconsider = 1;
23389 }
23390
23391 complete = COMPLETE_TYPE_P (instantiation);
23392 }
23393 else
23394 {
23395 if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
23396 && !DECL_TEMPLATE_INSTANTIATED (instantiation))
23397 {
23398 instantiation
23399 = instantiate_decl (instantiation,
23400 /*defer_ok=*/false,
23401 /*expl_inst_class_mem_p=*/false);
23402 if (DECL_TEMPLATE_INSTANTIATED (instantiation))
23403 reconsider = 1;
23404 }
23405
23406 complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
23407 || DECL_TEMPLATE_INSTANTIATED (instantiation));
23408 }
23409
23410 if (complete)
23411 /* If INSTANTIATION has been instantiated, then we don't
23412 need to consider it again in the future. */
23413 *t = (*t)->next;
23414 else
23415 {
23416 last = *t;
23417 t = &(*t)->next;
23418 }
23419 tinst_depth = 0;
23420 current_tinst_level = NULL;
23421 }
23422 last_pending_template = last;
23423 }
23424 while (reconsider);
23425
23426 input_location = saved_loc;
23427 }
23428
23429 /* Substitute ARGVEC into T, which is a list of initializers for
23430 either base class or a non-static data member. The TREE_PURPOSEs
23431 are DECLs, and the TREE_VALUEs are the initializer values. Used by
23432 instantiate_decl. */
23433
23434 static tree
23435 tsubst_initializer_list (tree t, tree argvec)
23436 {
23437 tree inits = NULL_TREE;
23438
23439 for (; t; t = TREE_CHAIN (t))
23440 {
23441 tree decl;
23442 tree init;
23443 tree expanded_bases = NULL_TREE;
23444 tree expanded_arguments = NULL_TREE;
23445 int i, len = 1;
23446
23447 if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
23448 {
23449 tree expr;
23450 tree arg;
23451
23452 /* Expand the base class expansion type into separate base
23453 classes. */
23454 expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
23455 tf_warning_or_error,
23456 NULL_TREE);
23457 if (expanded_bases == error_mark_node)
23458 continue;
23459
23460 /* We'll be building separate TREE_LISTs of arguments for
23461 each base. */
23462 len = TREE_VEC_LENGTH (expanded_bases);
23463 expanded_arguments = make_tree_vec (len);
23464 for (i = 0; i < len; i++)
23465 TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
23466
23467 /* Build a dummy EXPR_PACK_EXPANSION that will be used to
23468 expand each argument in the TREE_VALUE of t. */
23469 expr = make_node (EXPR_PACK_EXPANSION);
23470 PACK_EXPANSION_LOCAL_P (expr) = true;
23471 PACK_EXPANSION_PARAMETER_PACKS (expr) =
23472 PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
23473
23474 if (TREE_VALUE (t) == void_type_node)
23475 /* VOID_TYPE_NODE is used to indicate
23476 value-initialization. */
23477 {
23478 for (i = 0; i < len; i++)
23479 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
23480 }
23481 else
23482 {
23483 /* Substitute parameter packs into each argument in the
23484 TREE_LIST. */
23485 in_base_initializer = 1;
23486 for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
23487 {
23488 tree expanded_exprs;
23489
23490 /* Expand the argument. */
23491 SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
23492 expanded_exprs
23493 = tsubst_pack_expansion (expr, argvec,
23494 tf_warning_or_error,
23495 NULL_TREE);
23496 if (expanded_exprs == error_mark_node)
23497 continue;
23498
23499 /* Prepend each of the expanded expressions to the
23500 corresponding TREE_LIST in EXPANDED_ARGUMENTS. */
23501 for (i = 0; i < len; i++)
23502 {
23503 TREE_VEC_ELT (expanded_arguments, i) =
23504 tree_cons (NULL_TREE,
23505 TREE_VEC_ELT (expanded_exprs, i),
23506 TREE_VEC_ELT (expanded_arguments, i));
23507 }
23508 }
23509 in_base_initializer = 0;
23510
23511 /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
23512 since we built them backwards. */
23513 for (i = 0; i < len; i++)
23514 {
23515 TREE_VEC_ELT (expanded_arguments, i) =
23516 nreverse (TREE_VEC_ELT (expanded_arguments, i));
23517 }
23518 }
23519 }
23520
23521 for (i = 0; i < len; ++i)
23522 {
23523 if (expanded_bases)
23524 {
23525 decl = TREE_VEC_ELT (expanded_bases, i);
23526 decl = expand_member_init (decl);
23527 init = TREE_VEC_ELT (expanded_arguments, i);
23528 }
23529 else
23530 {
23531 tree tmp;
23532 decl = tsubst_copy (TREE_PURPOSE (t), argvec,
23533 tf_warning_or_error, NULL_TREE);
23534
23535 decl = expand_member_init (decl);
23536 if (decl && !DECL_P (decl))
23537 in_base_initializer = 1;
23538
23539 init = TREE_VALUE (t);
23540 tmp = init;
23541 if (init != void_type_node)
23542 init = tsubst_expr (init, argvec,
23543 tf_warning_or_error, NULL_TREE,
23544 /*integral_constant_expression_p=*/false);
23545 if (init == NULL_TREE && tmp != NULL_TREE)
23546 /* If we had an initializer but it instantiated to nothing,
23547 value-initialize the object. This will only occur when
23548 the initializer was a pack expansion where the parameter
23549 packs used in that expansion were of length zero. */
23550 init = void_type_node;
23551 in_base_initializer = 0;
23552 }
23553
23554 if (decl)
23555 {
23556 init = build_tree_list (decl, init);
23557 TREE_CHAIN (init) = inits;
23558 inits = init;
23559 }
23560 }
23561 }
23562 return inits;
23563 }
23564
23565 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
23566
23567 static void
23568 set_current_access_from_decl (tree decl)
23569 {
23570 if (TREE_PRIVATE (decl))
23571 current_access_specifier = access_private_node;
23572 else if (TREE_PROTECTED (decl))
23573 current_access_specifier = access_protected_node;
23574 else
23575 current_access_specifier = access_public_node;
23576 }
23577
23578 /* Instantiate an enumerated type. TAG is the template type, NEWTAG
23579 is the instantiation (which should have been created with
23580 start_enum) and ARGS are the template arguments to use. */
23581
23582 static void
23583 tsubst_enum (tree tag, tree newtag, tree args)
23584 {
23585 tree e;
23586
23587 if (SCOPED_ENUM_P (newtag))
23588 begin_scope (sk_scoped_enum, newtag);
23589
23590 for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
23591 {
23592 tree value;
23593 tree decl;
23594
23595 decl = TREE_VALUE (e);
23596 /* Note that in a template enum, the TREE_VALUE is the
23597 CONST_DECL, not the corresponding INTEGER_CST. */
23598 value = tsubst_expr (DECL_INITIAL (decl),
23599 args, tf_warning_or_error, NULL_TREE,
23600 /*integral_constant_expression_p=*/true);
23601
23602 /* Give this enumeration constant the correct access. */
23603 set_current_access_from_decl (decl);
23604
23605 /* Actually build the enumerator itself. Here we're assuming that
23606 enumerators can't have dependent attributes. */
23607 build_enumerator (DECL_NAME (decl), value, newtag,
23608 DECL_ATTRIBUTES (decl), DECL_SOURCE_LOCATION (decl));
23609 }
23610
23611 if (SCOPED_ENUM_P (newtag))
23612 finish_scope ();
23613
23614 finish_enum_value_list (newtag);
23615 finish_enum (newtag);
23616
23617 DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
23618 = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
23619 }
23620
23621 /* DECL is a FUNCTION_DECL that is a template specialization. Return
23622 its type -- but without substituting the innermost set of template
23623 arguments. So, innermost set of template parameters will appear in
23624 the type. */
23625
23626 tree
23627 get_mostly_instantiated_function_type (tree decl)
23628 {
23629 /* For a function, DECL_TI_TEMPLATE is partially instantiated. */
23630 return TREE_TYPE (DECL_TI_TEMPLATE (decl));
23631 }
23632
23633 /* Return truthvalue if we're processing a template different from
23634 the last one involved in diagnostics. */
23635 bool
23636 problematic_instantiation_changed (void)
23637 {
23638 return current_tinst_level != last_error_tinst_level;
23639 }
23640
23641 /* Remember current template involved in diagnostics. */
23642 void
23643 record_last_problematic_instantiation (void)
23644 {
23645 last_error_tinst_level = current_tinst_level;
23646 }
23647
23648 struct tinst_level *
23649 current_instantiation (void)
23650 {
23651 return current_tinst_level;
23652 }
23653
23654 /* Return TRUE if current_function_decl is being instantiated, false
23655 otherwise. */
23656
23657 bool
23658 instantiating_current_function_p (void)
23659 {
23660 return (current_instantiation ()
23661 && current_instantiation ()->decl == current_function_decl);
23662 }
23663
23664 /* [temp.param] Check that template non-type parm TYPE is of an allowable
23665 type. Return false for ok, true for disallowed. Issue error and
23666 inform messages under control of COMPLAIN. */
23667
23668 static bool
23669 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
23670 {
23671 if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
23672 return false;
23673 else if (POINTER_TYPE_P (type))
23674 return false;
23675 else if (TYPE_PTRMEM_P (type))
23676 return false;
23677 else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
23678 return false;
23679 else if (TREE_CODE (type) == TYPENAME_TYPE)
23680 return false;
23681 else if (TREE_CODE (type) == DECLTYPE_TYPE)
23682 return false;
23683 else if (TREE_CODE (type) == NULLPTR_TYPE)
23684 return false;
23685 /* A bound template template parm could later be instantiated to have a valid
23686 nontype parm type via an alias template. */
23687 else if (cxx_dialect >= cxx11
23688 && TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
23689 return false;
23690
23691 if (complain & tf_error)
23692 {
23693 if (type == error_mark_node)
23694 inform (input_location, "invalid template non-type parameter");
23695 else
23696 error ("%q#T is not a valid type for a template non-type parameter",
23697 type);
23698 }
23699 return true;
23700 }
23701
23702 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
23703 Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
23704
23705 static bool
23706 dependent_type_p_r (tree type)
23707 {
23708 tree scope;
23709
23710 /* [temp.dep.type]
23711
23712 A type is dependent if it is:
23713
23714 -- a template parameter. Template template parameters are types
23715 for us (since TYPE_P holds true for them) so we handle
23716 them here. */
23717 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
23718 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
23719 return true;
23720 /* -- a qualified-id with a nested-name-specifier which contains a
23721 class-name that names a dependent type or whose unqualified-id
23722 names a dependent type. */
23723 if (TREE_CODE (type) == TYPENAME_TYPE)
23724 return true;
23725
23726 /* An alias template specialization can be dependent even if the
23727 resulting type is not. */
23728 if (dependent_alias_template_spec_p (type))
23729 return true;
23730
23731 /* -- a cv-qualified type where the cv-unqualified type is
23732 dependent.
23733 No code is necessary for this bullet; the code below handles
23734 cv-qualified types, and we don't want to strip aliases with
23735 TYPE_MAIN_VARIANT because of DR 1558. */
23736 /* -- a compound type constructed from any dependent type. */
23737 if (TYPE_PTRMEM_P (type))
23738 return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
23739 || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
23740 (type)));
23741 else if (TYPE_PTR_P (type)
23742 || TREE_CODE (type) == REFERENCE_TYPE)
23743 return dependent_type_p (TREE_TYPE (type));
23744 else if (TREE_CODE (type) == FUNCTION_TYPE
23745 || TREE_CODE (type) == METHOD_TYPE)
23746 {
23747 tree arg_type;
23748
23749 if (dependent_type_p (TREE_TYPE (type)))
23750 return true;
23751 for (arg_type = TYPE_ARG_TYPES (type);
23752 arg_type;
23753 arg_type = TREE_CHAIN (arg_type))
23754 if (dependent_type_p (TREE_VALUE (arg_type)))
23755 return true;
23756 if (cxx_dialect >= cxx17)
23757 /* A value-dependent noexcept-specifier makes the type dependent. */
23758 if (tree spec = TYPE_RAISES_EXCEPTIONS (type))
23759 if (tree noex = TREE_PURPOSE (spec))
23760 /* Treat DEFERRED_NOEXCEPT as non-dependent, since it doesn't
23761 affect overload resolution and treating it as dependent breaks
23762 things. */
23763 if (TREE_CODE (noex) != DEFERRED_NOEXCEPT
23764 && value_dependent_expression_p (noex))
23765 return true;
23766 return false;
23767 }
23768 /* -- an array type constructed from any dependent type or whose
23769 size is specified by a constant expression that is
23770 value-dependent.
23771
23772 We checked for type- and value-dependence of the bounds in
23773 compute_array_index_type, so TYPE_DEPENDENT_P is already set. */
23774 if (TREE_CODE (type) == ARRAY_TYPE)
23775 {
23776 if (TYPE_DOMAIN (type)
23777 && dependent_type_p (TYPE_DOMAIN (type)))
23778 return true;
23779 return dependent_type_p (TREE_TYPE (type));
23780 }
23781
23782 /* -- a template-id in which either the template name is a template
23783 parameter ... */
23784 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
23785 return true;
23786 /* ... or any of the template arguments is a dependent type or
23787 an expression that is type-dependent or value-dependent. */
23788 else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
23789 && (any_dependent_template_arguments_p
23790 (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
23791 return true;
23792
23793 /* All TYPEOF_TYPEs, DECLTYPE_TYPEs, and UNDERLYING_TYPEs are
23794 dependent; if the argument of the `typeof' expression is not
23795 type-dependent, then it should already been have resolved. */
23796 if (TREE_CODE (type) == TYPEOF_TYPE
23797 || TREE_CODE (type) == DECLTYPE_TYPE
23798 || TREE_CODE (type) == UNDERLYING_TYPE)
23799 return true;
23800
23801 /* A template argument pack is dependent if any of its packed
23802 arguments are. */
23803 if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
23804 {
23805 tree args = ARGUMENT_PACK_ARGS (type);
23806 int i, len = TREE_VEC_LENGTH (args);
23807 for (i = 0; i < len; ++i)
23808 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
23809 return true;
23810 }
23811
23812 /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
23813 be template parameters. */
23814 if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
23815 return true;
23816
23817 if (any_dependent_type_attributes_p (TYPE_ATTRIBUTES (type)))
23818 return true;
23819
23820 /* The standard does not specifically mention types that are local
23821 to template functions or local classes, but they should be
23822 considered dependent too. For example:
23823
23824 template <int I> void f() {
23825 enum E { a = I };
23826 S<sizeof (E)> s;
23827 }
23828
23829 The size of `E' cannot be known until the value of `I' has been
23830 determined. Therefore, `E' must be considered dependent. */
23831 scope = TYPE_CONTEXT (type);
23832 if (scope && TYPE_P (scope))
23833 return dependent_type_p (scope);
23834 /* Don't use type_dependent_expression_p here, as it can lead
23835 to infinite recursion trying to determine whether a lambda
23836 nested in a lambda is dependent (c++/47687). */
23837 else if (scope && TREE_CODE (scope) == FUNCTION_DECL
23838 && DECL_LANG_SPECIFIC (scope)
23839 && DECL_TEMPLATE_INFO (scope)
23840 && (any_dependent_template_arguments_p
23841 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (scope)))))
23842 return true;
23843
23844 /* Other types are non-dependent. */
23845 return false;
23846 }
23847
23848 /* Returns TRUE if TYPE is dependent, in the sense of
23849 [temp.dep.type]. Note that a NULL type is considered dependent. */
23850
23851 bool
23852 dependent_type_p (tree type)
23853 {
23854 /* If there are no template parameters in scope, then there can't be
23855 any dependent types. */
23856 if (!processing_template_decl)
23857 {
23858 /* If we are not processing a template, then nobody should be
23859 providing us with a dependent type. */
23860 gcc_assert (type);
23861 gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
23862 return false;
23863 }
23864
23865 /* If the type is NULL, we have not computed a type for the entity
23866 in question; in that case, the type is dependent. */
23867 if (!type)
23868 return true;
23869
23870 /* Erroneous types can be considered non-dependent. */
23871 if (type == error_mark_node)
23872 return false;
23873
23874 /* Getting here with global_type_node means we improperly called this
23875 function on the TREE_TYPE of an IDENTIFIER_NODE. */
23876 gcc_checking_assert (type != global_type_node);
23877
23878 /* If we have not already computed the appropriate value for TYPE,
23879 do so now. */
23880 if (!TYPE_DEPENDENT_P_VALID (type))
23881 {
23882 TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
23883 TYPE_DEPENDENT_P_VALID (type) = 1;
23884 }
23885
23886 return TYPE_DEPENDENT_P (type);
23887 }
23888
23889 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
23890 lookup. In other words, a dependent type that is not the current
23891 instantiation. */
23892
23893 bool
23894 dependent_scope_p (tree scope)
23895 {
23896 return (scope && TYPE_P (scope) && dependent_type_p (scope)
23897 && !currently_open_class (scope));
23898 }
23899
23900 /* T is a SCOPE_REF; return whether we need to consider it
23901 instantiation-dependent so that we can check access at instantiation
23902 time even though we know which member it resolves to. */
23903
23904 static bool
23905 instantiation_dependent_scope_ref_p (tree t)
23906 {
23907 if (DECL_P (TREE_OPERAND (t, 1))
23908 && CLASS_TYPE_P (TREE_OPERAND (t, 0))
23909 && accessible_in_template_p (TREE_OPERAND (t, 0),
23910 TREE_OPERAND (t, 1)))
23911 return false;
23912 else
23913 return true;
23914 }
23915
23916 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
23917 [temp.dep.constexpr]. EXPRESSION is already known to be a constant
23918 expression. */
23919
23920 /* Note that this predicate is not appropriate for general expressions;
23921 only constant expressions (that satisfy potential_constant_expression)
23922 can be tested for value dependence. */
23923
23924 bool
23925 value_dependent_expression_p (tree expression)
23926 {
23927 if (!processing_template_decl || expression == NULL_TREE)
23928 return false;
23929
23930 /* A type-dependent expression is also value-dependent. */
23931 if (type_dependent_expression_p (expression))
23932 return true;
23933
23934 switch (TREE_CODE (expression))
23935 {
23936 case BASELINK:
23937 /* A dependent member function of the current instantiation. */
23938 return dependent_type_p (BINFO_TYPE (BASELINK_BINFO (expression)));
23939
23940 case FUNCTION_DECL:
23941 /* A dependent member function of the current instantiation. */
23942 if (DECL_CLASS_SCOPE_P (expression)
23943 && dependent_type_p (DECL_CONTEXT (expression)))
23944 return true;
23945 break;
23946
23947 case IDENTIFIER_NODE:
23948 /* A name that has not been looked up -- must be dependent. */
23949 return true;
23950
23951 case TEMPLATE_PARM_INDEX:
23952 /* A non-type template parm. */
23953 return true;
23954
23955 case CONST_DECL:
23956 /* A non-type template parm. */
23957 if (DECL_TEMPLATE_PARM_P (expression))
23958 return true;
23959 return value_dependent_expression_p (DECL_INITIAL (expression));
23960
23961 case VAR_DECL:
23962 /* A constant with literal type and is initialized
23963 with an expression that is value-dependent. */
23964 if (DECL_DEPENDENT_INIT_P (expression)
23965 /* FIXME cp_finish_decl doesn't fold reference initializers. */
23966 || TREE_CODE (TREE_TYPE (expression)) == REFERENCE_TYPE)
23967 return true;
23968 if (DECL_HAS_VALUE_EXPR_P (expression))
23969 {
23970 tree value_expr = DECL_VALUE_EXPR (expression);
23971 if (value_dependent_expression_p (value_expr))
23972 return true;
23973 }
23974 return false;
23975
23976 case DYNAMIC_CAST_EXPR:
23977 case STATIC_CAST_EXPR:
23978 case CONST_CAST_EXPR:
23979 case REINTERPRET_CAST_EXPR:
23980 case CAST_EXPR:
23981 case IMPLICIT_CONV_EXPR:
23982 /* These expressions are value-dependent if the type to which
23983 the cast occurs is dependent or the expression being casted
23984 is value-dependent. */
23985 {
23986 tree type = TREE_TYPE (expression);
23987
23988 if (dependent_type_p (type))
23989 return true;
23990
23991 /* A functional cast has a list of operands. */
23992 expression = TREE_OPERAND (expression, 0);
23993 if (!expression)
23994 {
23995 /* If there are no operands, it must be an expression such
23996 as "int()". This should not happen for aggregate types
23997 because it would form non-constant expressions. */
23998 gcc_assert (cxx_dialect >= cxx11
23999 || INTEGRAL_OR_ENUMERATION_TYPE_P (type));
24000
24001 return false;
24002 }
24003
24004 if (TREE_CODE (expression) == TREE_LIST)
24005 return any_value_dependent_elements_p (expression);
24006
24007 return value_dependent_expression_p (expression);
24008 }
24009
24010 case SIZEOF_EXPR:
24011 if (SIZEOF_EXPR_TYPE_P (expression))
24012 return dependent_type_p (TREE_TYPE (TREE_OPERAND (expression, 0)));
24013 /* FALLTHRU */
24014 case ALIGNOF_EXPR:
24015 case TYPEID_EXPR:
24016 /* A `sizeof' expression is value-dependent if the operand is
24017 type-dependent or is a pack expansion. */
24018 expression = TREE_OPERAND (expression, 0);
24019 if (PACK_EXPANSION_P (expression))
24020 return true;
24021 else if (TYPE_P (expression))
24022 return dependent_type_p (expression);
24023 return instantiation_dependent_uneval_expression_p (expression);
24024
24025 case AT_ENCODE_EXPR:
24026 /* An 'encode' expression is value-dependent if the operand is
24027 type-dependent. */
24028 expression = TREE_OPERAND (expression, 0);
24029 return dependent_type_p (expression);
24030
24031 case NOEXCEPT_EXPR:
24032 expression = TREE_OPERAND (expression, 0);
24033 return instantiation_dependent_uneval_expression_p (expression);
24034
24035 case SCOPE_REF:
24036 /* All instantiation-dependent expressions should also be considered
24037 value-dependent. */
24038 return instantiation_dependent_scope_ref_p (expression);
24039
24040 case COMPONENT_REF:
24041 return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
24042 || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
24043
24044 case NONTYPE_ARGUMENT_PACK:
24045 /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
24046 is value-dependent. */
24047 {
24048 tree values = ARGUMENT_PACK_ARGS (expression);
24049 int i, len = TREE_VEC_LENGTH (values);
24050
24051 for (i = 0; i < len; ++i)
24052 if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
24053 return true;
24054
24055 return false;
24056 }
24057
24058 case TRAIT_EXPR:
24059 {
24060 tree type2 = TRAIT_EXPR_TYPE2 (expression);
24061
24062 if (dependent_type_p (TRAIT_EXPR_TYPE1 (expression)))
24063 return true;
24064
24065 if (!type2)
24066 return false;
24067
24068 if (TREE_CODE (type2) != TREE_LIST)
24069 return dependent_type_p (type2);
24070
24071 for (; type2; type2 = TREE_CHAIN (type2))
24072 if (dependent_type_p (TREE_VALUE (type2)))
24073 return true;
24074
24075 return false;
24076 }
24077
24078 case MODOP_EXPR:
24079 return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
24080 || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
24081
24082 case ARRAY_REF:
24083 return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
24084 || (value_dependent_expression_p (TREE_OPERAND (expression, 1))));
24085
24086 case ADDR_EXPR:
24087 {
24088 tree op = TREE_OPERAND (expression, 0);
24089 return (value_dependent_expression_p (op)
24090 || has_value_dependent_address (op));
24091 }
24092
24093 case REQUIRES_EXPR:
24094 /* Treat all requires-expressions as value-dependent so
24095 we don't try to fold them. */
24096 return true;
24097
24098 case TYPE_REQ:
24099 return dependent_type_p (TREE_OPERAND (expression, 0));
24100
24101 case CALL_EXPR:
24102 {
24103 if (value_dependent_expression_p (CALL_EXPR_FN (expression)))
24104 return true;
24105 tree fn = get_callee_fndecl (expression);
24106 int i, nargs;
24107 nargs = call_expr_nargs (expression);
24108 for (i = 0; i < nargs; ++i)
24109 {
24110 tree op = CALL_EXPR_ARG (expression, i);
24111 /* In a call to a constexpr member function, look through the
24112 implicit ADDR_EXPR on the object argument so that it doesn't
24113 cause the call to be considered value-dependent. We also
24114 look through it in potential_constant_expression. */
24115 if (i == 0 && fn && DECL_DECLARED_CONSTEXPR_P (fn)
24116 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
24117 && TREE_CODE (op) == ADDR_EXPR)
24118 op = TREE_OPERAND (op, 0);
24119 if (value_dependent_expression_p (op))
24120 return true;
24121 }
24122 return false;
24123 }
24124
24125 case TEMPLATE_ID_EXPR:
24126 return variable_concept_p (TREE_OPERAND (expression, 0));
24127
24128 case CONSTRUCTOR:
24129 {
24130 unsigned ix;
24131 tree val;
24132 if (dependent_type_p (TREE_TYPE (expression)))
24133 return true;
24134 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), ix, val)
24135 if (value_dependent_expression_p (val))
24136 return true;
24137 return false;
24138 }
24139
24140 case STMT_EXPR:
24141 /* Treat a GNU statement expression as dependent to avoid crashing
24142 under instantiate_non_dependent_expr; it can't be constant. */
24143 return true;
24144
24145 default:
24146 /* A constant expression is value-dependent if any subexpression is
24147 value-dependent. */
24148 switch (TREE_CODE_CLASS (TREE_CODE (expression)))
24149 {
24150 case tcc_reference:
24151 case tcc_unary:
24152 case tcc_comparison:
24153 case tcc_binary:
24154 case tcc_expression:
24155 case tcc_vl_exp:
24156 {
24157 int i, len = cp_tree_operand_length (expression);
24158
24159 for (i = 0; i < len; i++)
24160 {
24161 tree t = TREE_OPERAND (expression, i);
24162
24163 /* In some cases, some of the operands may be missing.
24164 (For example, in the case of PREDECREMENT_EXPR, the
24165 amount to increment by may be missing.) That doesn't
24166 make the expression dependent. */
24167 if (t && value_dependent_expression_p (t))
24168 return true;
24169 }
24170 }
24171 break;
24172 default:
24173 break;
24174 }
24175 break;
24176 }
24177
24178 /* The expression is not value-dependent. */
24179 return false;
24180 }
24181
24182 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
24183 [temp.dep.expr]. Note that an expression with no type is
24184 considered dependent. Other parts of the compiler arrange for an
24185 expression with type-dependent subexpressions to have no type, so
24186 this function doesn't have to be fully recursive. */
24187
24188 bool
24189 type_dependent_expression_p (tree expression)
24190 {
24191 if (!processing_template_decl)
24192 return false;
24193
24194 if (expression == NULL_TREE || expression == error_mark_node)
24195 return false;
24196
24197 /* An unresolved name is always dependent. */
24198 if (identifier_p (expression)
24199 || TREE_CODE (expression) == USING_DECL
24200 || TREE_CODE (expression) == WILDCARD_DECL)
24201 return true;
24202
24203 /* A fold expression is type-dependent. */
24204 if (TREE_CODE (expression) == UNARY_LEFT_FOLD_EXPR
24205 || TREE_CODE (expression) == UNARY_RIGHT_FOLD_EXPR
24206 || TREE_CODE (expression) == BINARY_LEFT_FOLD_EXPR
24207 || TREE_CODE (expression) == BINARY_RIGHT_FOLD_EXPR)
24208 return true;
24209
24210 /* Some expression forms are never type-dependent. */
24211 if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
24212 || TREE_CODE (expression) == SIZEOF_EXPR
24213 || TREE_CODE (expression) == ALIGNOF_EXPR
24214 || TREE_CODE (expression) == AT_ENCODE_EXPR
24215 || TREE_CODE (expression) == NOEXCEPT_EXPR
24216 || TREE_CODE (expression) == TRAIT_EXPR
24217 || TREE_CODE (expression) == TYPEID_EXPR
24218 || TREE_CODE (expression) == DELETE_EXPR
24219 || TREE_CODE (expression) == VEC_DELETE_EXPR
24220 || TREE_CODE (expression) == THROW_EXPR
24221 || TREE_CODE (expression) == REQUIRES_EXPR)
24222 return false;
24223
24224 /* The types of these expressions depends only on the type to which
24225 the cast occurs. */
24226 if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
24227 || TREE_CODE (expression) == STATIC_CAST_EXPR
24228 || TREE_CODE (expression) == CONST_CAST_EXPR
24229 || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
24230 || TREE_CODE (expression) == IMPLICIT_CONV_EXPR
24231 || TREE_CODE (expression) == CAST_EXPR)
24232 return dependent_type_p (TREE_TYPE (expression));
24233
24234 /* The types of these expressions depends only on the type created
24235 by the expression. */
24236 if (TREE_CODE (expression) == NEW_EXPR
24237 || TREE_CODE (expression) == VEC_NEW_EXPR)
24238 {
24239 /* For NEW_EXPR tree nodes created inside a template, either
24240 the object type itself or a TREE_LIST may appear as the
24241 operand 1. */
24242 tree type = TREE_OPERAND (expression, 1);
24243 if (TREE_CODE (type) == TREE_LIST)
24244 /* This is an array type. We need to check array dimensions
24245 as well. */
24246 return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
24247 || value_dependent_expression_p
24248 (TREE_OPERAND (TREE_VALUE (type), 1));
24249 else
24250 return dependent_type_p (type);
24251 }
24252
24253 if (TREE_CODE (expression) == SCOPE_REF)
24254 {
24255 tree scope = TREE_OPERAND (expression, 0);
24256 tree name = TREE_OPERAND (expression, 1);
24257
24258 /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
24259 contains an identifier associated by name lookup with one or more
24260 declarations declared with a dependent type, or...a
24261 nested-name-specifier or qualified-id that names a member of an
24262 unknown specialization. */
24263 return (type_dependent_expression_p (name)
24264 || dependent_scope_p (scope));
24265 }
24266
24267 if (TREE_CODE (expression) == TEMPLATE_DECL
24268 && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
24269 return uses_outer_template_parms (expression);
24270
24271 if (TREE_CODE (expression) == STMT_EXPR)
24272 expression = stmt_expr_value_expr (expression);
24273
24274 if (BRACE_ENCLOSED_INITIALIZER_P (expression))
24275 {
24276 tree elt;
24277 unsigned i;
24278
24279 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
24280 {
24281 if (type_dependent_expression_p (elt))
24282 return true;
24283 }
24284 return false;
24285 }
24286
24287 /* A static data member of the current instantiation with incomplete
24288 array type is type-dependent, as the definition and specializations
24289 can have different bounds. */
24290 if (VAR_P (expression)
24291 && DECL_CLASS_SCOPE_P (expression)
24292 && dependent_type_p (DECL_CONTEXT (expression))
24293 && VAR_HAD_UNKNOWN_BOUND (expression))
24294 return true;
24295
24296 /* An array of unknown bound depending on a variadic parameter, eg:
24297
24298 template<typename... Args>
24299 void foo (Args... args)
24300 {
24301 int arr[] = { args... };
24302 }
24303
24304 template<int... vals>
24305 void bar ()
24306 {
24307 int arr[] = { vals... };
24308 }
24309
24310 If the array has no length and has an initializer, it must be that
24311 we couldn't determine its length in cp_complete_array_type because
24312 it is dependent. */
24313 if (VAR_P (expression)
24314 && TREE_TYPE (expression) != NULL_TREE
24315 && TREE_CODE (TREE_TYPE (expression)) == ARRAY_TYPE
24316 && !TYPE_DOMAIN (TREE_TYPE (expression))
24317 && DECL_INITIAL (expression))
24318 return true;
24319
24320 /* A function or variable template-id is type-dependent if it has any
24321 dependent template arguments. */
24322 if (VAR_OR_FUNCTION_DECL_P (expression)
24323 && DECL_LANG_SPECIFIC (expression)
24324 && DECL_TEMPLATE_INFO (expression))
24325 {
24326 /* Consider the innermost template arguments, since those are the ones
24327 that come from the template-id; the template arguments for the
24328 enclosing class do not make it type-dependent unless they are used in
24329 the type of the decl. */
24330 if (PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (expression))
24331 && (any_dependent_template_arguments_p
24332 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
24333 return true;
24334 }
24335
24336 /* Otherwise, if the function decl isn't from a dependent scope, it can't be
24337 type-dependent. Checking this is important for functions with auto return
24338 type, which looks like a dependent type. */
24339 if (TREE_CODE (expression) == FUNCTION_DECL
24340 && !(DECL_CLASS_SCOPE_P (expression)
24341 && dependent_type_p (DECL_CONTEXT (expression)))
24342 && !(DECL_FRIEND_P (expression)
24343 && (!DECL_FRIEND_CONTEXT (expression)
24344 || dependent_type_p (DECL_FRIEND_CONTEXT (expression))))
24345 && !DECL_LOCAL_FUNCTION_P (expression))
24346 {
24347 gcc_assert (!dependent_type_p (TREE_TYPE (expression))
24348 || undeduced_auto_decl (expression));
24349 return false;
24350 }
24351
24352 /* Always dependent, on the number of arguments if nothing else. */
24353 if (TREE_CODE (expression) == EXPR_PACK_EXPANSION)
24354 return true;
24355
24356 if (TREE_TYPE (expression) == unknown_type_node)
24357 {
24358 if (TREE_CODE (expression) == ADDR_EXPR)
24359 return type_dependent_expression_p (TREE_OPERAND (expression, 0));
24360 if (TREE_CODE (expression) == COMPONENT_REF
24361 || TREE_CODE (expression) == OFFSET_REF)
24362 {
24363 if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
24364 return true;
24365 expression = TREE_OPERAND (expression, 1);
24366 if (identifier_p (expression))
24367 return false;
24368 }
24369 /* SCOPE_REF with non-null TREE_TYPE is always non-dependent. */
24370 if (TREE_CODE (expression) == SCOPE_REF)
24371 return false;
24372
24373 if (BASELINK_P (expression))
24374 {
24375 if (BASELINK_OPTYPE (expression)
24376 && dependent_type_p (BASELINK_OPTYPE (expression)))
24377 return true;
24378 expression = BASELINK_FUNCTIONS (expression);
24379 }
24380
24381 if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
24382 {
24383 if (any_dependent_template_arguments_p
24384 (TREE_OPERAND (expression, 1)))
24385 return true;
24386 expression = TREE_OPERAND (expression, 0);
24387 if (identifier_p (expression))
24388 return true;
24389 }
24390
24391 gcc_assert (TREE_CODE (expression) == OVERLOAD
24392 || TREE_CODE (expression) == FUNCTION_DECL);
24393
24394 for (lkp_iterator iter (expression); iter; ++iter)
24395 if (type_dependent_expression_p (*iter))
24396 return true;
24397
24398 return false;
24399 }
24400
24401 gcc_assert (TREE_CODE (expression) != TYPE_DECL);
24402
24403 /* Dependent type attributes might not have made it from the decl to
24404 the type yet. */
24405 if (DECL_P (expression)
24406 && any_dependent_type_attributes_p (DECL_ATTRIBUTES (expression)))
24407 return true;
24408
24409 return (dependent_type_p (TREE_TYPE (expression)));
24410 }
24411
24412 /* [temp.dep.expr]/5: A class member access expression (5.2.5) is
24413 type-dependent if the expression refers to a member of the current
24414 instantiation and the type of the referenced member is dependent, or the
24415 class member access expression refers to a member of an unknown
24416 specialization.
24417
24418 This function returns true if the OBJECT in such a class member access
24419 expression is of an unknown specialization. */
24420
24421 bool
24422 type_dependent_object_expression_p (tree object)
24423 {
24424 /* An IDENTIFIER_NODE can sometimes have a TREE_TYPE, but it's still
24425 dependent. */
24426 if (TREE_CODE (object) == IDENTIFIER_NODE)
24427 return true;
24428 tree scope = TREE_TYPE (object);
24429 return (!scope || dependent_scope_p (scope));
24430 }
24431
24432 /* walk_tree callback function for instantiation_dependent_expression_p,
24433 below. Returns non-zero if a dependent subexpression is found. */
24434
24435 static tree
24436 instantiation_dependent_r (tree *tp, int *walk_subtrees,
24437 void * /*data*/)
24438 {
24439 if (TYPE_P (*tp))
24440 {
24441 /* We don't have to worry about decltype currently because decltype
24442 of an instantiation-dependent expr is a dependent type. This
24443 might change depending on the resolution of DR 1172. */
24444 *walk_subtrees = false;
24445 return NULL_TREE;
24446 }
24447 enum tree_code code = TREE_CODE (*tp);
24448 switch (code)
24449 {
24450 /* Don't treat an argument list as dependent just because it has no
24451 TREE_TYPE. */
24452 case TREE_LIST:
24453 case TREE_VEC:
24454 return NULL_TREE;
24455
24456 case TEMPLATE_PARM_INDEX:
24457 return *tp;
24458
24459 /* Handle expressions with type operands. */
24460 case SIZEOF_EXPR:
24461 case ALIGNOF_EXPR:
24462 case TYPEID_EXPR:
24463 case AT_ENCODE_EXPR:
24464 {
24465 tree op = TREE_OPERAND (*tp, 0);
24466 if (code == SIZEOF_EXPR && SIZEOF_EXPR_TYPE_P (*tp))
24467 op = TREE_TYPE (op);
24468 if (TYPE_P (op))
24469 {
24470 if (dependent_type_p (op))
24471 return *tp;
24472 else
24473 {
24474 *walk_subtrees = false;
24475 return NULL_TREE;
24476 }
24477 }
24478 break;
24479 }
24480
24481 case COMPONENT_REF:
24482 if (identifier_p (TREE_OPERAND (*tp, 1)))
24483 /* In a template, finish_class_member_access_expr creates a
24484 COMPONENT_REF with an IDENTIFIER_NODE for op1 even if it isn't
24485 type-dependent, so that we can check access control at
24486 instantiation time (PR 42277). See also Core issue 1273. */
24487 return *tp;
24488 break;
24489
24490 case SCOPE_REF:
24491 if (instantiation_dependent_scope_ref_p (*tp))
24492 return *tp;
24493 else
24494 break;
24495
24496 /* Treat statement-expressions as dependent. */
24497 case BIND_EXPR:
24498 return *tp;
24499
24500 /* Treat requires-expressions as dependent. */
24501 case REQUIRES_EXPR:
24502 return *tp;
24503
24504 case CALL_EXPR:
24505 /* Treat calls to function concepts as dependent. */
24506 if (function_concept_check_p (*tp))
24507 return *tp;
24508 break;
24509
24510 case TEMPLATE_ID_EXPR:
24511 /* And variable concepts. */
24512 if (variable_concept_p (TREE_OPERAND (*tp, 0)))
24513 return *tp;
24514 break;
24515
24516 default:
24517 break;
24518 }
24519
24520 if (type_dependent_expression_p (*tp))
24521 return *tp;
24522 else
24523 return NULL_TREE;
24524 }
24525
24526 /* Returns TRUE if the EXPRESSION is instantiation-dependent, in the
24527 sense defined by the ABI:
24528
24529 "An expression is instantiation-dependent if it is type-dependent
24530 or value-dependent, or it has a subexpression that is type-dependent
24531 or value-dependent."
24532
24533 Except don't actually check value-dependence for unevaluated expressions,
24534 because in sizeof(i) we don't care about the value of i. Checking
24535 type-dependence will in turn check value-dependence of array bounds/template
24536 arguments as needed. */
24537
24538 bool
24539 instantiation_dependent_uneval_expression_p (tree expression)
24540 {
24541 tree result;
24542
24543 if (!processing_template_decl)
24544 return false;
24545
24546 if (expression == error_mark_node)
24547 return false;
24548
24549 result = cp_walk_tree_without_duplicates (&expression,
24550 instantiation_dependent_r, NULL);
24551 return result != NULL_TREE;
24552 }
24553
24554 /* As above, but also check value-dependence of the expression as a whole. */
24555
24556 bool
24557 instantiation_dependent_expression_p (tree expression)
24558 {
24559 return (instantiation_dependent_uneval_expression_p (expression)
24560 || value_dependent_expression_p (expression));
24561 }
24562
24563 /* Like type_dependent_expression_p, but it also works while not processing
24564 a template definition, i.e. during substitution or mangling. */
24565
24566 bool
24567 type_dependent_expression_p_push (tree expr)
24568 {
24569 bool b;
24570 ++processing_template_decl;
24571 b = type_dependent_expression_p (expr);
24572 --processing_template_decl;
24573 return b;
24574 }
24575
24576 /* Returns TRUE if ARGS contains a type-dependent expression. */
24577
24578 bool
24579 any_type_dependent_arguments_p (const vec<tree, va_gc> *args)
24580 {
24581 unsigned int i;
24582 tree arg;
24583
24584 FOR_EACH_VEC_SAFE_ELT (args, i, arg)
24585 {
24586 if (type_dependent_expression_p (arg))
24587 return true;
24588 }
24589 return false;
24590 }
24591
24592 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
24593 expressions) contains any type-dependent expressions. */
24594
24595 bool
24596 any_type_dependent_elements_p (const_tree list)
24597 {
24598 for (; list; list = TREE_CHAIN (list))
24599 if (type_dependent_expression_p (TREE_VALUE (list)))
24600 return true;
24601
24602 return false;
24603 }
24604
24605 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
24606 expressions) contains any value-dependent expressions. */
24607
24608 bool
24609 any_value_dependent_elements_p (const_tree list)
24610 {
24611 for (; list; list = TREE_CHAIN (list))
24612 if (value_dependent_expression_p (TREE_VALUE (list)))
24613 return true;
24614
24615 return false;
24616 }
24617
24618 /* Returns TRUE if the ARG (a template argument) is dependent. */
24619
24620 bool
24621 dependent_template_arg_p (tree arg)
24622 {
24623 if (!processing_template_decl)
24624 return false;
24625
24626 /* Assume a template argument that was wrongly written by the user
24627 is dependent. This is consistent with what
24628 any_dependent_template_arguments_p [that calls this function]
24629 does. */
24630 if (!arg || arg == error_mark_node)
24631 return true;
24632
24633 if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
24634 arg = ARGUMENT_PACK_SELECT_ARG (arg);
24635
24636 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
24637 return true;
24638 if (TREE_CODE (arg) == TEMPLATE_DECL)
24639 {
24640 if (DECL_TEMPLATE_PARM_P (arg))
24641 return true;
24642 /* A member template of a dependent class is not necessarily
24643 type-dependent, but it is a dependent template argument because it
24644 will be a member of an unknown specialization to that template. */
24645 tree scope = CP_DECL_CONTEXT (arg);
24646 return TYPE_P (scope) && dependent_type_p (scope);
24647 }
24648 else if (ARGUMENT_PACK_P (arg))
24649 {
24650 tree args = ARGUMENT_PACK_ARGS (arg);
24651 int i, len = TREE_VEC_LENGTH (args);
24652 for (i = 0; i < len; ++i)
24653 {
24654 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
24655 return true;
24656 }
24657
24658 return false;
24659 }
24660 else if (TYPE_P (arg))
24661 return dependent_type_p (arg);
24662 else
24663 return (type_dependent_expression_p (arg)
24664 || value_dependent_expression_p (arg));
24665 }
24666
24667 /* Returns true if ARGS (a collection of template arguments) contains
24668 any types that require structural equality testing. */
24669
24670 bool
24671 any_template_arguments_need_structural_equality_p (tree args)
24672 {
24673 int i;
24674 int j;
24675
24676 if (!args)
24677 return false;
24678 if (args == error_mark_node)
24679 return true;
24680
24681 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
24682 {
24683 tree level = TMPL_ARGS_LEVEL (args, i + 1);
24684 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
24685 {
24686 tree arg = TREE_VEC_ELT (level, j);
24687 tree packed_args = NULL_TREE;
24688 int k, len = 1;
24689
24690 if (ARGUMENT_PACK_P (arg))
24691 {
24692 /* Look inside the argument pack. */
24693 packed_args = ARGUMENT_PACK_ARGS (arg);
24694 len = TREE_VEC_LENGTH (packed_args);
24695 }
24696
24697 for (k = 0; k < len; ++k)
24698 {
24699 if (packed_args)
24700 arg = TREE_VEC_ELT (packed_args, k);
24701
24702 if (error_operand_p (arg))
24703 return true;
24704 else if (TREE_CODE (arg) == TEMPLATE_DECL)
24705 continue;
24706 else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
24707 return true;
24708 else if (!TYPE_P (arg) && TREE_TYPE (arg)
24709 && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
24710 return true;
24711 }
24712 }
24713 }
24714
24715 return false;
24716 }
24717
24718 /* Returns true if ARGS (a collection of template arguments) contains
24719 any dependent arguments. */
24720
24721 bool
24722 any_dependent_template_arguments_p (const_tree args)
24723 {
24724 int i;
24725 int j;
24726
24727 if (!args)
24728 return false;
24729 if (args == error_mark_node)
24730 return true;
24731
24732 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
24733 {
24734 const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
24735 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
24736 if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
24737 return true;
24738 }
24739
24740 return false;
24741 }
24742
24743 /* Returns TRUE if the template TMPL is type-dependent. */
24744
24745 bool
24746 dependent_template_p (tree tmpl)
24747 {
24748 if (TREE_CODE (tmpl) == OVERLOAD)
24749 {
24750 for (lkp_iterator iter (tmpl); iter; ++iter)
24751 if (dependent_template_p (*iter))
24752 return true;
24753 return false;
24754 }
24755
24756 /* Template template parameters are dependent. */
24757 if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
24758 || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
24759 return true;
24760 /* So are names that have not been looked up. */
24761 if (TREE_CODE (tmpl) == SCOPE_REF || identifier_p (tmpl))
24762 return true;
24763 return false;
24764 }
24765
24766 /* Returns TRUE if the specialization TMPL<ARGS> is dependent. */
24767
24768 bool
24769 dependent_template_id_p (tree tmpl, tree args)
24770 {
24771 return (dependent_template_p (tmpl)
24772 || any_dependent_template_arguments_p (args));
24773 }
24774
24775 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
24776 are dependent. */
24777
24778 bool
24779 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
24780 {
24781 int i;
24782
24783 if (!processing_template_decl)
24784 return false;
24785
24786 for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
24787 {
24788 tree decl = TREE_VEC_ELT (declv, i);
24789 tree init = TREE_VEC_ELT (initv, i);
24790 tree cond = TREE_VEC_ELT (condv, i);
24791 tree incr = TREE_VEC_ELT (incrv, i);
24792
24793 if (type_dependent_expression_p (decl)
24794 || TREE_CODE (decl) == SCOPE_REF)
24795 return true;
24796
24797 if (init && type_dependent_expression_p (init))
24798 return true;
24799
24800 if (type_dependent_expression_p (cond))
24801 return true;
24802
24803 if (COMPARISON_CLASS_P (cond)
24804 && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
24805 || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
24806 return true;
24807
24808 if (TREE_CODE (incr) == MODOP_EXPR)
24809 {
24810 if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
24811 || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
24812 return true;
24813 }
24814 else if (type_dependent_expression_p (incr))
24815 return true;
24816 else if (TREE_CODE (incr) == MODIFY_EXPR)
24817 {
24818 if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
24819 return true;
24820 else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
24821 {
24822 tree t = TREE_OPERAND (incr, 1);
24823 if (type_dependent_expression_p (TREE_OPERAND (t, 0))
24824 || type_dependent_expression_p (TREE_OPERAND (t, 1)))
24825 return true;
24826 }
24827 }
24828 }
24829
24830 return false;
24831 }
24832
24833 /* TYPE is a TYPENAME_TYPE. Returns the ordinary TYPE to which the
24834 TYPENAME_TYPE corresponds. Returns the original TYPENAME_TYPE if
24835 no such TYPE can be found. Note that this function peers inside
24836 uninstantiated templates and therefore should be used only in
24837 extremely limited situations. ONLY_CURRENT_P restricts this
24838 peering to the currently open classes hierarchy (which is required
24839 when comparing types). */
24840
24841 tree
24842 resolve_typename_type (tree type, bool only_current_p)
24843 {
24844 tree scope;
24845 tree name;
24846 tree decl;
24847 int quals;
24848 tree pushed_scope;
24849 tree result;
24850
24851 gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
24852
24853 scope = TYPE_CONTEXT (type);
24854 /* Usually the non-qualified identifier of a TYPENAME_TYPE is
24855 TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
24856 a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
24857 the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
24858 identifier of the TYPENAME_TYPE anymore.
24859 So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
24860 TYPENAME_TYPE instead, we avoid messing up with a possible
24861 typedef variant case. */
24862 name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
24863
24864 /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
24865 it first before we can figure out what NAME refers to. */
24866 if (TREE_CODE (scope) == TYPENAME_TYPE)
24867 {
24868 if (TYPENAME_IS_RESOLVING_P (scope))
24869 /* Given a class template A with a dependent base with nested type C,
24870 typedef typename A::C::C C will land us here, as trying to resolve
24871 the initial A::C leads to the local C typedef, which leads back to
24872 A::C::C. So we break the recursion now. */
24873 return type;
24874 else
24875 scope = resolve_typename_type (scope, only_current_p);
24876 }
24877 /* If we don't know what SCOPE refers to, then we cannot resolve the
24878 TYPENAME_TYPE. */
24879 if (!CLASS_TYPE_P (scope))
24880 return type;
24881 /* If this is a typedef, we don't want to look inside (c++/11987). */
24882 if (typedef_variant_p (type))
24883 return type;
24884 /* If SCOPE isn't the template itself, it will not have a valid
24885 TYPE_FIELDS list. */
24886 if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
24887 /* scope is either the template itself or a compatible instantiation
24888 like X<T>, so look up the name in the original template. */
24889 scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
24890 /* We shouldn't have built a TYPENAME_TYPE with a non-dependent scope. */
24891 gcc_checking_assert (uses_template_parms (scope));
24892 /* If scope has no fields, it can't be a current instantiation. Check this
24893 before currently_open_class to avoid infinite recursion (71515). */
24894 if (!TYPE_FIELDS (scope))
24895 return type;
24896 /* If the SCOPE is not the current instantiation, there's no reason
24897 to look inside it. */
24898 if (only_current_p && !currently_open_class (scope))
24899 return type;
24900 /* Enter the SCOPE so that name lookup will be resolved as if we
24901 were in the class definition. In particular, SCOPE will no
24902 longer be considered a dependent type. */
24903 pushed_scope = push_scope (scope);
24904 /* Look up the declaration. */
24905 decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true,
24906 tf_warning_or_error);
24907
24908 result = NULL_TREE;
24909
24910 /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
24911 find a TEMPLATE_DECL. Otherwise, we want to find a TYPE_DECL. */
24912 tree fullname = TYPENAME_TYPE_FULLNAME (type);
24913 if (!decl)
24914 /*nop*/;
24915 else if (identifier_p (fullname)
24916 && TREE_CODE (decl) == TYPE_DECL)
24917 {
24918 result = TREE_TYPE (decl);
24919 if (result == error_mark_node)
24920 result = NULL_TREE;
24921 }
24922 else if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR
24923 && DECL_CLASS_TEMPLATE_P (decl))
24924 {
24925 /* Obtain the template and the arguments. */
24926 tree tmpl = TREE_OPERAND (fullname, 0);
24927 if (TREE_CODE (tmpl) == IDENTIFIER_NODE)
24928 {
24929 /* We get here with a plain identifier because a previous tentative
24930 parse of the nested-name-specifier as part of a ptr-operator saw
24931 ::template X<A>. The use of ::template is necessary in a
24932 ptr-operator, but wrong in a declarator-id.
24933
24934 [temp.names]: In a qualified-id of a declarator-id, the keyword
24935 template shall not appear at the top level. */
24936 pedwarn (EXPR_LOC_OR_LOC (fullname, input_location), OPT_Wpedantic,
24937 "keyword %<template%> not allowed in declarator-id");
24938 tmpl = decl;
24939 }
24940 tree args = TREE_OPERAND (fullname, 1);
24941 /* Instantiate the template. */
24942 result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
24943 /*entering_scope=*/true,
24944 tf_error | tf_user);
24945 if (result == error_mark_node)
24946 result = NULL_TREE;
24947 }
24948
24949 /* Leave the SCOPE. */
24950 if (pushed_scope)
24951 pop_scope (pushed_scope);
24952
24953 /* If we failed to resolve it, return the original typename. */
24954 if (!result)
24955 return type;
24956
24957 /* If lookup found a typename type, resolve that too. */
24958 if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
24959 {
24960 /* Ill-formed programs can cause infinite recursion here, so we
24961 must catch that. */
24962 TYPENAME_IS_RESOLVING_P (result) = 1;
24963 result = resolve_typename_type (result, only_current_p);
24964 TYPENAME_IS_RESOLVING_P (result) = 0;
24965 }
24966
24967 /* Qualify the resulting type. */
24968 quals = cp_type_quals (type);
24969 if (quals)
24970 result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
24971
24972 return result;
24973 }
24974
24975 /* EXPR is an expression which is not type-dependent. Return a proxy
24976 for EXPR that can be used to compute the types of larger
24977 expressions containing EXPR. */
24978
24979 tree
24980 build_non_dependent_expr (tree expr)
24981 {
24982 tree inner_expr;
24983
24984 /* When checking, try to get a constant value for all non-dependent
24985 expressions in order to expose bugs in *_dependent_expression_p
24986 and constexpr. This can affect code generation, see PR70704, so
24987 only do this for -fchecking=2. */
24988 if (flag_checking > 1
24989 && cxx_dialect >= cxx11
24990 /* Don't do this during nsdmi parsing as it can lead to
24991 unexpected recursive instantiations. */
24992 && !parsing_nsdmi ()
24993 /* Don't do this during concept expansion either and for
24994 the same reason. */
24995 && !expanding_concept ())
24996 fold_non_dependent_expr (expr);
24997
24998 /* Preserve OVERLOADs; the functions must be available to resolve
24999 types. */
25000 inner_expr = expr;
25001 if (TREE_CODE (inner_expr) == STMT_EXPR)
25002 inner_expr = stmt_expr_value_expr (inner_expr);
25003 if (TREE_CODE (inner_expr) == ADDR_EXPR)
25004 inner_expr = TREE_OPERAND (inner_expr, 0);
25005 if (TREE_CODE (inner_expr) == COMPONENT_REF)
25006 inner_expr = TREE_OPERAND (inner_expr, 1);
25007 if (is_overloaded_fn (inner_expr)
25008 || TREE_CODE (inner_expr) == OFFSET_REF)
25009 return expr;
25010 /* There is no need to return a proxy for a variable. */
25011 if (VAR_P (expr))
25012 return expr;
25013 /* Preserve string constants; conversions from string constants to
25014 "char *" are allowed, even though normally a "const char *"
25015 cannot be used to initialize a "char *". */
25016 if (TREE_CODE (expr) == STRING_CST)
25017 return expr;
25018 /* Preserve void and arithmetic constants, as an optimization -- there is no
25019 reason to create a new node. */
25020 if (TREE_CODE (expr) == VOID_CST
25021 || TREE_CODE (expr) == INTEGER_CST
25022 || TREE_CODE (expr) == REAL_CST)
25023 return expr;
25024 /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
25025 There is at least one place where we want to know that a
25026 particular expression is a throw-expression: when checking a ?:
25027 expression, there are special rules if the second or third
25028 argument is a throw-expression. */
25029 if (TREE_CODE (expr) == THROW_EXPR)
25030 return expr;
25031
25032 /* Don't wrap an initializer list, we need to be able to look inside. */
25033 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
25034 return expr;
25035
25036 /* Don't wrap a dummy object, we need to be able to test for it. */
25037 if (is_dummy_object (expr))
25038 return expr;
25039
25040 if (TREE_CODE (expr) == COND_EXPR)
25041 return build3 (COND_EXPR,
25042 TREE_TYPE (expr),
25043 TREE_OPERAND (expr, 0),
25044 (TREE_OPERAND (expr, 1)
25045 ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
25046 : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
25047 build_non_dependent_expr (TREE_OPERAND (expr, 2)));
25048 if (TREE_CODE (expr) == COMPOUND_EXPR
25049 && !COMPOUND_EXPR_OVERLOADED (expr))
25050 return build2 (COMPOUND_EXPR,
25051 TREE_TYPE (expr),
25052 TREE_OPERAND (expr, 0),
25053 build_non_dependent_expr (TREE_OPERAND (expr, 1)));
25054
25055 /* If the type is unknown, it can't really be non-dependent */
25056 gcc_assert (TREE_TYPE (expr) != unknown_type_node);
25057
25058 /* Otherwise, build a NON_DEPENDENT_EXPR. */
25059 return build1 (NON_DEPENDENT_EXPR, TREE_TYPE (expr), expr);
25060 }
25061
25062 /* ARGS is a vector of expressions as arguments to a function call.
25063 Replace the arguments with equivalent non-dependent expressions.
25064 This modifies ARGS in place. */
25065
25066 void
25067 make_args_non_dependent (vec<tree, va_gc> *args)
25068 {
25069 unsigned int ix;
25070 tree arg;
25071
25072 FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
25073 {
25074 tree newarg = build_non_dependent_expr (arg);
25075 if (newarg != arg)
25076 (*args)[ix] = newarg;
25077 }
25078 }
25079
25080 /* Returns a type which represents 'auto' or 'decltype(auto)'. We use a
25081 TEMPLATE_TYPE_PARM with a level one deeper than the actual template
25082 parms. If set_canonical is true, we set TYPE_CANONICAL on it. */
25083
25084 static tree
25085 make_auto_1 (tree name, bool set_canonical)
25086 {
25087 tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
25088 TYPE_NAME (au) = build_decl (input_location,
25089 TYPE_DECL, name, au);
25090 TYPE_STUB_DECL (au) = TYPE_NAME (au);
25091 TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
25092 (0, processing_template_decl + 1, processing_template_decl + 1,
25093 TYPE_NAME (au), NULL_TREE);
25094 if (set_canonical)
25095 TYPE_CANONICAL (au) = canonical_type_parameter (au);
25096 DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
25097 SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
25098
25099 return au;
25100 }
25101
25102 tree
25103 make_decltype_auto (void)
25104 {
25105 return make_auto_1 (decltype_auto_identifier, true);
25106 }
25107
25108 tree
25109 make_auto (void)
25110 {
25111 return make_auto_1 (auto_identifier, true);
25112 }
25113
25114 /* Return a C++17 deduction placeholder for class template TMPL. */
25115
25116 tree
25117 make_template_placeholder (tree tmpl)
25118 {
25119 tree t = make_auto_1 (DECL_NAME (tmpl), true);
25120 CLASS_PLACEHOLDER_TEMPLATE (t) = tmpl;
25121 return t;
25122 }
25123
25124 /* True iff T is a C++17 class template deduction placeholder. */
25125
25126 bool
25127 template_placeholder_p (tree t)
25128 {
25129 return is_auto (t) && CLASS_PLACEHOLDER_TEMPLATE (t);
25130 }
25131
25132 /* Make a "constrained auto" type-specifier. This is an
25133 auto type with constraints that must be associated after
25134 deduction. The constraint is formed from the given
25135 CONC and its optional sequence of arguments, which are
25136 non-null if written as partial-concept-id. */
25137
25138 tree
25139 make_constrained_auto (tree con, tree args)
25140 {
25141 tree type = make_auto_1 (auto_identifier, false);
25142
25143 /* Build the constraint. */
25144 tree tmpl = DECL_TI_TEMPLATE (con);
25145 tree expr = VAR_P (con) ? tmpl : ovl_make (tmpl);
25146 expr = build_concept_check (expr, type, args);
25147
25148 tree constr = normalize_expression (expr);
25149 PLACEHOLDER_TYPE_CONSTRAINTS (type) = constr;
25150
25151 /* Our canonical type depends on the constraint. */
25152 TYPE_CANONICAL (type) = canonical_type_parameter (type);
25153
25154 /* Attach the constraint to the type declaration. */
25155 tree decl = TYPE_NAME (type);
25156 return decl;
25157 }
25158
25159 /* Given type ARG, return std::initializer_list<ARG>. */
25160
25161 static tree
25162 listify (tree arg)
25163 {
25164 tree std_init_list = get_namespace_binding (std_node, init_list_identifier);
25165
25166 if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
25167 {
25168 gcc_rich_location richloc (input_location);
25169 maybe_add_include_fixit (&richloc, "<initializer_list>");
25170 error_at (&richloc,
25171 "deducing from brace-enclosed initializer list"
25172 " requires %<#include <initializer_list>%>");
25173
25174 return error_mark_node;
25175 }
25176 tree argvec = make_tree_vec (1);
25177 TREE_VEC_ELT (argvec, 0) = arg;
25178
25179 return lookup_template_class (std_init_list, argvec, NULL_TREE,
25180 NULL_TREE, 0, tf_warning_or_error);
25181 }
25182
25183 /* Replace auto in TYPE with std::initializer_list<auto>. */
25184
25185 static tree
25186 listify_autos (tree type, tree auto_node)
25187 {
25188 tree init_auto = listify (auto_node);
25189 tree argvec = make_tree_vec (1);
25190 TREE_VEC_ELT (argvec, 0) = init_auto;
25191 if (processing_template_decl)
25192 argvec = add_to_template_args (current_template_args (), argvec);
25193 return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
25194 }
25195
25196 /* Hash traits for hashing possibly constrained 'auto'
25197 TEMPLATE_TYPE_PARMs for use by do_auto_deduction. */
25198
25199 struct auto_hash : default_hash_traits<tree>
25200 {
25201 static inline hashval_t hash (tree);
25202 static inline bool equal (tree, tree);
25203 };
25204
25205 /* Hash the 'auto' T. */
25206
25207 inline hashval_t
25208 auto_hash::hash (tree t)
25209 {
25210 if (tree c = PLACEHOLDER_TYPE_CONSTRAINTS (t))
25211 /* Matching constrained-type-specifiers denote the same template
25212 parameter, so hash the constraint. */
25213 return hash_placeholder_constraint (c);
25214 else
25215 /* But unconstrained autos are all separate, so just hash the pointer. */
25216 return iterative_hash_object (t, 0);
25217 }
25218
25219 /* Compare two 'auto's. */
25220
25221 inline bool
25222 auto_hash::equal (tree t1, tree t2)
25223 {
25224 if (t1 == t2)
25225 return true;
25226
25227 tree c1 = PLACEHOLDER_TYPE_CONSTRAINTS (t1);
25228 tree c2 = PLACEHOLDER_TYPE_CONSTRAINTS (t2);
25229
25230 /* Two unconstrained autos are distinct. */
25231 if (!c1 || !c2)
25232 return false;
25233
25234 return equivalent_placeholder_constraints (c1, c2);
25235 }
25236
25237 /* for_each_template_parm callback for extract_autos: if t is a (possibly
25238 constrained) auto, add it to the vector. */
25239
25240 static int
25241 extract_autos_r (tree t, void *data)
25242 {
25243 hash_table<auto_hash> &hash = *(hash_table<auto_hash>*)data;
25244 if (is_auto (t))
25245 {
25246 /* All the autos were built with index 0; fix that up now. */
25247 tree *p = hash.find_slot (t, INSERT);
25248 unsigned idx;
25249 if (*p)
25250 /* If this is a repeated constrained-type-specifier, use the index we
25251 chose before. */
25252 idx = TEMPLATE_PARM_IDX (TEMPLATE_TYPE_PARM_INDEX (*p));
25253 else
25254 {
25255 /* Otherwise this is new, so use the current count. */
25256 *p = t;
25257 idx = hash.elements () - 1;
25258 }
25259 TEMPLATE_PARM_IDX (TEMPLATE_TYPE_PARM_INDEX (t)) = idx;
25260 }
25261
25262 /* Always keep walking. */
25263 return 0;
25264 }
25265
25266 /* Return a TREE_VEC of the 'auto's used in type under the Concepts TS, which
25267 says they can appear anywhere in the type. */
25268
25269 static tree
25270 extract_autos (tree type)
25271 {
25272 hash_set<tree> visited;
25273 hash_table<auto_hash> hash (2);
25274
25275 for_each_template_parm (type, extract_autos_r, &hash, &visited, true);
25276
25277 tree tree_vec = make_tree_vec (hash.elements());
25278 for (hash_table<auto_hash>::iterator iter = hash.begin();
25279 iter != hash.end(); ++iter)
25280 {
25281 tree elt = *iter;
25282 unsigned i = TEMPLATE_PARM_IDX (TEMPLATE_TYPE_PARM_INDEX (elt));
25283 TREE_VEC_ELT (tree_vec, i)
25284 = build_tree_list (NULL_TREE, TYPE_NAME (elt));
25285 }
25286
25287 return tree_vec;
25288 }
25289
25290 /* The stem for deduction guide names. */
25291 const char *const dguide_base = "__dguide_";
25292
25293 /* Return the name for a deduction guide for class template TMPL. */
25294
25295 tree
25296 dguide_name (tree tmpl)
25297 {
25298 tree type = (TYPE_P (tmpl) ? tmpl : TREE_TYPE (tmpl));
25299 tree tname = TYPE_IDENTIFIER (type);
25300 char *buf = (char *) alloca (1 + strlen (dguide_base)
25301 + IDENTIFIER_LENGTH (tname));
25302 memcpy (buf, dguide_base, strlen (dguide_base));
25303 memcpy (buf + strlen (dguide_base), IDENTIFIER_POINTER (tname),
25304 IDENTIFIER_LENGTH (tname) + 1);
25305 tree dname = get_identifier (buf);
25306 TREE_TYPE (dname) = type;
25307 return dname;
25308 }
25309
25310 /* True if NAME is the name of a deduction guide. */
25311
25312 bool
25313 dguide_name_p (tree name)
25314 {
25315 return (TREE_TYPE (name)
25316 && !strncmp (IDENTIFIER_POINTER (name), dguide_base,
25317 strlen (dguide_base)));
25318 }
25319
25320 /* True if FN is a deduction guide. */
25321
25322 bool
25323 deduction_guide_p (const_tree fn)
25324 {
25325 if (DECL_P (fn))
25326 if (tree name = DECL_NAME (fn))
25327 return dguide_name_p (name);
25328 return false;
25329 }
25330
25331 /* True if FN is the copy deduction guide, i.e. A(A)->A. */
25332
25333 bool
25334 copy_guide_p (const_tree fn)
25335 {
25336 gcc_assert (deduction_guide_p (fn));
25337 if (!DECL_ARTIFICIAL (fn))
25338 return false;
25339 tree parms = FUNCTION_FIRST_USER_PARMTYPE (DECL_TI_TEMPLATE (fn));
25340 return (TREE_CHAIN (parms) == void_list_node
25341 && same_type_p (TREE_VALUE (parms), TREE_TYPE (DECL_NAME (fn))));
25342 }
25343
25344 /* True if FN is a guide generated from a constructor template. */
25345
25346 bool
25347 template_guide_p (const_tree fn)
25348 {
25349 gcc_assert (deduction_guide_p (fn));
25350 if (!DECL_ARTIFICIAL (fn))
25351 return false;
25352 tree tmpl = DECL_TI_TEMPLATE (fn);
25353 if (tree org = DECL_ABSTRACT_ORIGIN (tmpl))
25354 return PRIMARY_TEMPLATE_P (org);
25355 return false;
25356 }
25357
25358 /* OLDDECL is a _DECL for a template parameter. Return a similar parameter at
25359 LEVEL:INDEX, using tsubst_args and complain for substitution into non-type
25360 template parameter types. Note that the handling of template template
25361 parameters relies on current_template_parms being set appropriately for the
25362 new template. */
25363
25364 static tree
25365 rewrite_template_parm (tree olddecl, unsigned index, unsigned level,
25366 tree tsubst_args, tsubst_flags_t complain)
25367 {
25368 tree oldidx = get_template_parm_index (olddecl);
25369
25370 tree newtype;
25371 if (TREE_CODE (olddecl) == TYPE_DECL
25372 || TREE_CODE (olddecl) == TEMPLATE_DECL)
25373 {
25374 tree oldtype = TREE_TYPE (olddecl);
25375 newtype = cxx_make_type (TREE_CODE (oldtype));
25376 TYPE_MAIN_VARIANT (newtype) = newtype;
25377 if (TREE_CODE (oldtype) == TEMPLATE_TYPE_PARM)
25378 TEMPLATE_TYPE_PARM_FOR_CLASS (newtype)
25379 = TEMPLATE_TYPE_PARM_FOR_CLASS (oldtype);
25380 }
25381 else
25382 newtype = tsubst (TREE_TYPE (olddecl), tsubst_args,
25383 complain, NULL_TREE);
25384
25385 tree newdecl
25386 = build_decl (DECL_SOURCE_LOCATION (olddecl), TREE_CODE (olddecl),
25387 DECL_NAME (olddecl), newtype);
25388 SET_DECL_TEMPLATE_PARM_P (newdecl);
25389
25390 tree newidx;
25391 if (TREE_CODE (olddecl) == TYPE_DECL
25392 || TREE_CODE (olddecl) == TEMPLATE_DECL)
25393 {
25394 newidx = TEMPLATE_TYPE_PARM_INDEX (newtype)
25395 = build_template_parm_index (index, level, level,
25396 newdecl, newtype);
25397 TEMPLATE_PARM_PARAMETER_PACK (newidx)
25398 = TEMPLATE_PARM_PARAMETER_PACK (oldidx);
25399 TYPE_STUB_DECL (newtype) = TYPE_NAME (newtype) = newdecl;
25400 TYPE_CANONICAL (newtype) = canonical_type_parameter (newtype);
25401
25402 if (TREE_CODE (olddecl) == TEMPLATE_DECL)
25403 {
25404 DECL_TEMPLATE_RESULT (newdecl)
25405 = build_decl (DECL_SOURCE_LOCATION (olddecl), TYPE_DECL,
25406 DECL_NAME (olddecl), newtype);
25407 DECL_ARTIFICIAL (DECL_TEMPLATE_RESULT (newdecl)) = true;
25408 // First create a copy (ttargs) of tsubst_args with an
25409 // additional level for the template template parameter's own
25410 // template parameters (ttparms).
25411 tree ttparms = (INNERMOST_TEMPLATE_PARMS
25412 (DECL_TEMPLATE_PARMS (olddecl)));
25413 const int depth = TMPL_ARGS_DEPTH (tsubst_args);
25414 tree ttargs = make_tree_vec (depth + 1);
25415 for (int i = 0; i < depth; ++i)
25416 TREE_VEC_ELT (ttargs, i) = TREE_VEC_ELT (tsubst_args, i);
25417 TREE_VEC_ELT (ttargs, depth)
25418 = template_parms_level_to_args (ttparms);
25419 // Substitute ttargs into ttparms to fix references to
25420 // other template parameters.
25421 ttparms = tsubst_template_parms_level (ttparms, ttargs,
25422 complain);
25423 // Now substitute again with args based on tparms, to reduce
25424 // the level of the ttparms.
25425 ttargs = current_template_args ();
25426 ttparms = tsubst_template_parms_level (ttparms, ttargs,
25427 complain);
25428 // Finally, tack the adjusted parms onto tparms.
25429 ttparms = tree_cons (size_int (depth), ttparms,
25430 current_template_parms);
25431 DECL_TEMPLATE_PARMS (newdecl) = ttparms;
25432 }
25433 }
25434 else
25435 {
25436 tree oldconst = TEMPLATE_PARM_DECL (oldidx);
25437 tree newconst
25438 = build_decl (DECL_SOURCE_LOCATION (oldconst),
25439 TREE_CODE (oldconst),
25440 DECL_NAME (oldconst), newtype);
25441 TREE_CONSTANT (newconst) = TREE_CONSTANT (newdecl)
25442 = TREE_READONLY (newconst) = TREE_READONLY (newdecl) = true;
25443 SET_DECL_TEMPLATE_PARM_P (newconst);
25444 newidx = build_template_parm_index (index, level, level,
25445 newconst, newtype);
25446 TEMPLATE_PARM_PARAMETER_PACK (newidx)
25447 = TEMPLATE_PARM_PARAMETER_PACK (oldidx);
25448 DECL_INITIAL (newdecl) = DECL_INITIAL (newconst) = newidx;
25449 }
25450
25451 return newdecl;
25452 }
25453
25454 /* Returns a C++17 class deduction guide template based on the constructor
25455 CTOR. As a special case, CTOR can be a RECORD_TYPE for an implicit default
25456 guide, or REFERENCE_TYPE for an implicit copy/move guide. */
25457
25458 static tree
25459 build_deduction_guide (tree ctor, tree outer_args, tsubst_flags_t complain)
25460 {
25461 tree type, tparms, targs, fparms, fargs, ci;
25462 bool memtmpl = false;
25463 bool explicit_p;
25464 location_t loc;
25465 tree fn_tmpl = NULL_TREE;
25466
25467 if (TYPE_P (ctor))
25468 {
25469 type = ctor;
25470 bool copy_p = TREE_CODE (type) == REFERENCE_TYPE;
25471 if (copy_p)
25472 {
25473 type = TREE_TYPE (type);
25474 fparms = tree_cons (NULL_TREE, type, void_list_node);
25475 }
25476 else
25477 fparms = void_list_node;
25478
25479 tree ctmpl = CLASSTYPE_TI_TEMPLATE (type);
25480 tparms = DECL_TEMPLATE_PARMS (ctmpl);
25481 targs = CLASSTYPE_TI_ARGS (type);
25482 ci = NULL_TREE;
25483 fargs = NULL_TREE;
25484 loc = DECL_SOURCE_LOCATION (ctmpl);
25485 explicit_p = false;
25486 }
25487 else
25488 {
25489 ++processing_template_decl;
25490
25491 fn_tmpl
25492 = (TREE_CODE (ctor) == TEMPLATE_DECL ? ctor
25493 : DECL_TI_TEMPLATE (ctor));
25494 if (outer_args)
25495 fn_tmpl = tsubst (fn_tmpl, outer_args, complain, ctor);
25496 ctor = DECL_TEMPLATE_RESULT (fn_tmpl);
25497
25498 type = DECL_CONTEXT (ctor);
25499
25500 tparms = DECL_TEMPLATE_PARMS (fn_tmpl);
25501 /* If type is a member class template, DECL_TI_ARGS (ctor) will have
25502 fully specialized args for the enclosing class. Strip those off, as
25503 the deduction guide won't have those template parameters. */
25504 targs = get_innermost_template_args (DECL_TI_ARGS (ctor),
25505 TMPL_PARMS_DEPTH (tparms));
25506 /* Discard the 'this' parameter. */
25507 fparms = FUNCTION_ARG_CHAIN (ctor);
25508 fargs = TREE_CHAIN (DECL_ARGUMENTS (ctor));
25509 ci = get_constraints (ctor);
25510 loc = DECL_SOURCE_LOCATION (ctor);
25511 explicit_p = DECL_NONCONVERTING_P (ctor);
25512
25513 if (PRIMARY_TEMPLATE_P (fn_tmpl))
25514 {
25515 memtmpl = true;
25516
25517 /* For a member template constructor, we need to flatten the two
25518 template parameter lists into one, and then adjust the function
25519 signature accordingly. This gets...complicated. */
25520 tree save_parms = current_template_parms;
25521
25522 /* For a member template we should have two levels of parms/args, one
25523 for the class and one for the constructor. We stripped
25524 specialized args for further enclosing classes above. */
25525 const int depth = 2;
25526 gcc_assert (TMPL_ARGS_DEPTH (targs) == depth);
25527
25528 /* Template args for translating references to the two-level template
25529 parameters into references to the one-level template parameters we
25530 are creating. */
25531 tree tsubst_args = copy_node (targs);
25532 TMPL_ARGS_LEVEL (tsubst_args, depth)
25533 = copy_node (TMPL_ARGS_LEVEL (tsubst_args, depth));
25534
25535 /* Template parms for the constructor template. */
25536 tree ftparms = TREE_VALUE (tparms);
25537 unsigned flen = TREE_VEC_LENGTH (ftparms);
25538 /* Template parms for the class template. */
25539 tparms = TREE_CHAIN (tparms);
25540 tree ctparms = TREE_VALUE (tparms);
25541 unsigned clen = TREE_VEC_LENGTH (ctparms);
25542 /* Template parms for the deduction guide start as a copy of the
25543 template parms for the class. We set current_template_parms for
25544 lookup_template_class_1. */
25545 current_template_parms = tparms = copy_node (tparms);
25546 tree new_vec = TREE_VALUE (tparms) = make_tree_vec (flen + clen);
25547 for (unsigned i = 0; i < clen; ++i)
25548 TREE_VEC_ELT (new_vec, i) = TREE_VEC_ELT (ctparms, i);
25549
25550 /* Now we need to rewrite the constructor parms to append them to the
25551 class parms. */
25552 for (unsigned i = 0; i < flen; ++i)
25553 {
25554 unsigned index = i + clen;
25555 unsigned level = 1;
25556 tree oldelt = TREE_VEC_ELT (ftparms, i);
25557 tree olddecl = TREE_VALUE (oldelt);
25558 tree newdecl = rewrite_template_parm (olddecl, index, level,
25559 tsubst_args, complain);
25560 tree newdef = tsubst_template_arg (TREE_PURPOSE (oldelt),
25561 tsubst_args, complain, ctor);
25562 tree list = build_tree_list (newdef, newdecl);
25563 TEMPLATE_PARM_CONSTRAINTS (list)
25564 = tsubst_constraint_info (TEMPLATE_PARM_CONSTRAINTS (oldelt),
25565 tsubst_args, complain, ctor);
25566 TREE_VEC_ELT (new_vec, index) = list;
25567 TMPL_ARG (tsubst_args, depth, i) = template_parm_to_arg (list);
25568 }
25569
25570 /* Now we have a final set of template parms to substitute into the
25571 function signature. */
25572 targs = template_parms_to_args (tparms);
25573 fparms = tsubst_arg_types (fparms, tsubst_args, NULL_TREE,
25574 complain, ctor);
25575 fargs = tsubst (fargs, tsubst_args, complain, ctor);
25576 if (ci)
25577 ci = tsubst_constraint_info (ci, tsubst_args, complain, ctor);
25578
25579 current_template_parms = save_parms;
25580 }
25581 --processing_template_decl;
25582 }
25583
25584 if (!memtmpl)
25585 {
25586 /* Copy the parms so we can set DECL_PRIMARY_TEMPLATE. */
25587 tparms = copy_node (tparms);
25588 INNERMOST_TEMPLATE_PARMS (tparms)
25589 = copy_node (INNERMOST_TEMPLATE_PARMS (tparms));
25590 }
25591
25592 tree fntype = build_function_type (type, fparms);
25593 tree ded_fn = build_lang_decl_loc (loc,
25594 FUNCTION_DECL,
25595 dguide_name (type), fntype);
25596 DECL_ARGUMENTS (ded_fn) = fargs;
25597 DECL_ARTIFICIAL (ded_fn) = true;
25598 DECL_NONCONVERTING_P (ded_fn) = explicit_p;
25599 tree ded_tmpl = build_template_decl (ded_fn, tparms, /*member*/false);
25600 DECL_ARTIFICIAL (ded_tmpl) = true;
25601 DECL_TEMPLATE_RESULT (ded_tmpl) = ded_fn;
25602 TREE_TYPE (ded_tmpl) = TREE_TYPE (ded_fn);
25603 DECL_TEMPLATE_INFO (ded_fn) = build_template_info (ded_tmpl, targs);
25604 DECL_PRIMARY_TEMPLATE (ded_tmpl) = ded_tmpl;
25605 if (DECL_P (ctor))
25606 DECL_ABSTRACT_ORIGIN (ded_tmpl) = fn_tmpl;
25607 if (ci)
25608 set_constraints (ded_tmpl, ci);
25609
25610 return ded_tmpl;
25611 }
25612
25613 /* Deduce template arguments for the class template placeholder PTYPE for
25614 template TMPL based on the initializer INIT, and return the resulting
25615 type. */
25616
25617 static tree
25618 do_class_deduction (tree ptype, tree tmpl, tree init, int flags,
25619 tsubst_flags_t complain)
25620 {
25621 if (!DECL_CLASS_TEMPLATE_P (tmpl))
25622 {
25623 /* We should have handled this in the caller. */
25624 if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl))
25625 return ptype;
25626 if (complain & tf_error)
25627 error ("non-class template %qT used without template arguments", tmpl);
25628 return error_mark_node;
25629 }
25630
25631 tree type = TREE_TYPE (tmpl);
25632
25633 bool try_list_ctor = false;
25634
25635 vec<tree,va_gc> *args;
25636 if (init == NULL_TREE
25637 || TREE_CODE (init) == TREE_LIST)
25638 args = make_tree_vector_from_list (init);
25639 else if (BRACE_ENCLOSED_INITIALIZER_P (init))
25640 {
25641 try_list_ctor = TYPE_HAS_LIST_CTOR (type);
25642 if (try_list_ctor && CONSTRUCTOR_NELTS (init) == 1)
25643 {
25644 /* As an exception, the first phase in 16.3.1.7 (considering the
25645 initializer list as a single argument) is omitted if the
25646 initializer list consists of a single expression of type cv U,
25647 where U is a specialization of C or a class derived from a
25648 specialization of C. */
25649 tree elt = CONSTRUCTOR_ELT (init, 0)->value;
25650 tree etype = TREE_TYPE (elt);
25651
25652 tree tparms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (tmpl));
25653 tree targs = make_tree_vec (TREE_VEC_LENGTH (tparms));
25654 int err = unify (tparms, targs, type, etype,
25655 UNIFY_ALLOW_DERIVED, /*explain*/false);
25656 if (err == 0)
25657 try_list_ctor = false;
25658 ggc_free (targs);
25659 }
25660 if (try_list_ctor || is_std_init_list (type))
25661 args = make_tree_vector_single (init);
25662 else
25663 args = make_tree_vector_from_ctor (init);
25664 }
25665 else
25666 args = make_tree_vector_single (init);
25667
25668 tree dname = dguide_name (tmpl);
25669 tree cands = lookup_qualified_name (CP_DECL_CONTEXT (tmpl), dname,
25670 /*type*/false, /*complain*/false,
25671 /*hidden*/false);
25672 bool elided = false;
25673 if (cands == error_mark_node)
25674 cands = NULL_TREE;
25675
25676 /* Prune explicit deduction guides in copy-initialization context. */
25677 if (flags & LOOKUP_ONLYCONVERTING)
25678 {
25679 for (lkp_iterator iter (cands); !elided && iter; ++iter)
25680 if (DECL_NONCONVERTING_P (STRIP_TEMPLATE (*iter)))
25681 elided = true;
25682
25683 if (elided)
25684 {
25685 /* Found a nonconverting guide, prune the candidates. */
25686 tree pruned = NULL_TREE;
25687 for (lkp_iterator iter (cands); iter; ++iter)
25688 if (!DECL_NONCONVERTING_P (STRIP_TEMPLATE (*iter)))
25689 pruned = lookup_add (*iter, pruned);
25690
25691 cands = pruned;
25692 }
25693 }
25694
25695 tree outer_args = NULL_TREE;
25696 if (DECL_CLASS_SCOPE_P (tmpl)
25697 && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (tmpl)))
25698 {
25699 outer_args = CLASSTYPE_TI_ARGS (DECL_CONTEXT (tmpl));
25700 type = TREE_TYPE (most_general_template (tmpl));
25701 }
25702
25703 bool saw_ctor = false;
25704 // FIXME cache artificial deduction guides
25705 for (ovl_iterator iter (CLASSTYPE_CONSTRUCTORS (type)); iter; ++iter)
25706 {
25707 tree guide = build_deduction_guide (*iter, outer_args, complain);
25708 if ((flags & LOOKUP_ONLYCONVERTING)
25709 && DECL_NONCONVERTING_P (STRIP_TEMPLATE (guide)))
25710 elided = true;
25711 else
25712 cands = lookup_add (guide, cands);
25713
25714 saw_ctor = true;
25715 }
25716
25717 tree call = error_mark_node;
25718
25719 /* If this is list-initialization and the class has a list constructor, first
25720 try deducing from the list as a single argument, as [over.match.list]. */
25721 tree list_cands = NULL_TREE;
25722 if (try_list_ctor && cands)
25723 for (lkp_iterator iter (cands); iter; ++iter)
25724 {
25725 tree dg = *iter;
25726 if (is_list_ctor (dg))
25727 list_cands = lookup_add (dg, list_cands);
25728 }
25729 if (list_cands)
25730 {
25731 ++cp_unevaluated_operand;
25732 call = build_new_function_call (list_cands, &args, tf_decltype);
25733 --cp_unevaluated_operand;
25734
25735 if (call == error_mark_node)
25736 {
25737 /* That didn't work, now try treating the list as a sequence of
25738 arguments. */
25739 release_tree_vector (args);
25740 args = make_tree_vector_from_ctor (init);
25741 }
25742 }
25743
25744 /* Maybe generate an implicit deduction guide. */
25745 if (call == error_mark_node && args->length () < 2)
25746 {
25747 tree gtype = NULL_TREE;
25748
25749 if (args->length () == 1)
25750 /* Generate a copy guide. */
25751 gtype = build_reference_type (type);
25752 else if (!saw_ctor)
25753 /* Generate a default guide. */
25754 gtype = type;
25755
25756 if (gtype)
25757 {
25758 tree guide = build_deduction_guide (gtype, outer_args, complain);
25759 cands = lookup_add (guide, cands);
25760 }
25761 }
25762
25763 if (elided && !cands)
25764 {
25765 error ("cannot deduce template arguments for copy-initialization"
25766 " of %qT, as it has no non-explicit deduction guides or "
25767 "user-declared constructors", type);
25768 return error_mark_node;
25769 }
25770 else if (!cands && call == error_mark_node)
25771 {
25772 error ("cannot deduce template arguments of %qT, as it has no viable "
25773 "deduction guides", type);
25774 return error_mark_node;
25775 }
25776
25777 if (call == error_mark_node)
25778 {
25779 ++cp_unevaluated_operand;
25780 call = build_new_function_call (cands, &args, tf_decltype);
25781 --cp_unevaluated_operand;
25782 }
25783
25784 if (call == error_mark_node && (complain & tf_warning_or_error))
25785 {
25786 error ("class template argument deduction failed:");
25787
25788 ++cp_unevaluated_operand;
25789 call = build_new_function_call (cands, &args, complain | tf_decltype);
25790 --cp_unevaluated_operand;
25791
25792 if (elided)
25793 inform (input_location, "explicit deduction guides not considered "
25794 "for copy-initialization");
25795 }
25796
25797 release_tree_vector (args);
25798
25799 return cp_build_qualified_type (TREE_TYPE (call), cp_type_quals (ptype));
25800 }
25801
25802 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
25803 from INIT. AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE. */
25804
25805 tree
25806 do_auto_deduction (tree type, tree init, tree auto_node)
25807 {
25808 return do_auto_deduction (type, init, auto_node,
25809 tf_warning_or_error,
25810 adc_unspecified);
25811 }
25812
25813 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
25814 from INIT. AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.
25815 The CONTEXT determines the context in which auto deduction is performed
25816 and is used to control error diagnostics. FLAGS are the LOOKUP_* flags.
25817 OUTER_TARGS are used during template argument deduction
25818 (context == adc_unify) to properly substitute the result, and is ignored
25819 in other contexts.
25820
25821 For partial-concept-ids, extra args may be appended to the list of deduced
25822 template arguments prior to determining constraint satisfaction. */
25823
25824 tree
25825 do_auto_deduction (tree type, tree init, tree auto_node,
25826 tsubst_flags_t complain, auto_deduction_context context,
25827 tree outer_targs, int flags)
25828 {
25829 tree targs;
25830
25831 if (init == error_mark_node)
25832 return error_mark_node;
25833
25834 if (init && type_dependent_expression_p (init)
25835 && context != adc_unify)
25836 /* Defining a subset of type-dependent expressions that we can deduce
25837 from ahead of time isn't worth the trouble. */
25838 return type;
25839
25840 if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (auto_node))
25841 /* C++17 class template argument deduction. */
25842 return do_class_deduction (type, tmpl, init, flags, complain);
25843
25844 if (TREE_TYPE (init) == NULL_TREE)
25845 /* Nothing we can do with this, even in deduction context. */
25846 return type;
25847
25848 /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
25849 with either a new invented type template parameter U or, if the
25850 initializer is a braced-init-list (8.5.4), with
25851 std::initializer_list<U>. */
25852 if (BRACE_ENCLOSED_INITIALIZER_P (init))
25853 {
25854 if (!DIRECT_LIST_INIT_P (init))
25855 type = listify_autos (type, auto_node);
25856 else if (CONSTRUCTOR_NELTS (init) == 1)
25857 init = CONSTRUCTOR_ELT (init, 0)->value;
25858 else
25859 {
25860 if (complain & tf_warning_or_error)
25861 {
25862 if (permerror (input_location, "direct-list-initialization of "
25863 "%<auto%> requires exactly one element"))
25864 inform (input_location,
25865 "for deduction to %<std::initializer_list%>, use copy-"
25866 "list-initialization (i.e. add %<=%> before the %<{%>)");
25867 }
25868 type = listify_autos (type, auto_node);
25869 }
25870 }
25871
25872 if (type == error_mark_node)
25873 return error_mark_node;
25874
25875 init = resolve_nondeduced_context (init, complain);
25876
25877 if (context == adc_decomp_type
25878 && auto_node == type
25879 && init != error_mark_node
25880 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
25881 /* [dcl.decomp]/1 - if decomposition declaration has no ref-qualifiers
25882 and initializer has array type, deduce cv-qualified array type. */
25883 return cp_build_qualified_type_real (TREE_TYPE (init), TYPE_QUALS (type),
25884 complain);
25885 else if (AUTO_IS_DECLTYPE (auto_node))
25886 {
25887 bool id = (DECL_P (init)
25888 || ((TREE_CODE (init) == COMPONENT_REF
25889 || TREE_CODE (init) == SCOPE_REF)
25890 && !REF_PARENTHESIZED_P (init)));
25891 targs = make_tree_vec (1);
25892 TREE_VEC_ELT (targs, 0)
25893 = finish_decltype_type (init, id, tf_warning_or_error);
25894 if (type != auto_node)
25895 {
25896 if (complain & tf_error)
25897 error ("%qT as type rather than plain %<decltype(auto)%>", type);
25898 return error_mark_node;
25899 }
25900 }
25901 else
25902 {
25903 tree parms = build_tree_list (NULL_TREE, type);
25904 tree tparms;
25905
25906 if (flag_concepts)
25907 tparms = extract_autos (type);
25908 else
25909 {
25910 tparms = make_tree_vec (1);
25911 TREE_VEC_ELT (tparms, 0)
25912 = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
25913 }
25914
25915 targs = make_tree_vec (TREE_VEC_LENGTH (tparms));
25916 int val = type_unification_real (tparms, targs, parms, &init, 1, 0,
25917 DEDUCE_CALL, LOOKUP_NORMAL,
25918 NULL, /*explain_p=*/false);
25919 if (val > 0)
25920 {
25921 if (processing_template_decl)
25922 /* Try again at instantiation time. */
25923 return type;
25924 if (type && type != error_mark_node
25925 && (complain & tf_error))
25926 /* If type is error_mark_node a diagnostic must have been
25927 emitted by now. Also, having a mention to '<type error>'
25928 in the diagnostic is not really useful to the user. */
25929 {
25930 if (cfun && auto_node == current_function_auto_return_pattern
25931 && LAMBDA_FUNCTION_P (current_function_decl))
25932 error ("unable to deduce lambda return type from %qE", init);
25933 else
25934 error ("unable to deduce %qT from %qE", type, init);
25935 type_unification_real (tparms, targs, parms, &init, 1, 0,
25936 DEDUCE_CALL, LOOKUP_NORMAL,
25937 NULL, /*explain_p=*/true);
25938 }
25939 return error_mark_node;
25940 }
25941 }
25942
25943 /* Check any placeholder constraints against the deduced type. */
25944 if (flag_concepts && !processing_template_decl)
25945 if (tree constr = PLACEHOLDER_TYPE_CONSTRAINTS (auto_node))
25946 {
25947 /* Use the deduced type to check the associated constraints. If we
25948 have a partial-concept-id, rebuild the argument list so that
25949 we check using the extra arguments. */
25950 gcc_assert (TREE_CODE (constr) == CHECK_CONSTR);
25951 tree cargs = CHECK_CONSTR_ARGS (constr);
25952 if (TREE_VEC_LENGTH (cargs) > 1)
25953 {
25954 cargs = copy_node (cargs);
25955 TREE_VEC_ELT (cargs, 0) = TREE_VEC_ELT (targs, 0);
25956 }
25957 else
25958 cargs = targs;
25959 if (!constraints_satisfied_p (constr, cargs))
25960 {
25961 if (complain & tf_warning_or_error)
25962 {
25963 switch (context)
25964 {
25965 case adc_unspecified:
25966 case adc_unify:
25967 error("placeholder constraints not satisfied");
25968 break;
25969 case adc_variable_type:
25970 case adc_decomp_type:
25971 error ("deduced initializer does not satisfy "
25972 "placeholder constraints");
25973 break;
25974 case adc_return_type:
25975 error ("deduced return type does not satisfy "
25976 "placeholder constraints");
25977 break;
25978 case adc_requirement:
25979 error ("deduced expression type does not satisfy "
25980 "placeholder constraints");
25981 break;
25982 }
25983 diagnose_constraints (input_location, constr, targs);
25984 }
25985 return error_mark_node;
25986 }
25987 }
25988
25989 if (processing_template_decl && context != adc_unify)
25990 outer_targs = current_template_args ();
25991 targs = add_to_template_args (outer_targs, targs);
25992 return tsubst (type, targs, complain, NULL_TREE);
25993 }
25994
25995 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
25996 result. */
25997
25998 tree
25999 splice_late_return_type (tree type, tree late_return_type)
26000 {
26001 if (is_auto (type))
26002 {
26003 if (late_return_type)
26004 return late_return_type;
26005
26006 tree idx = get_template_parm_index (type);
26007 if (TEMPLATE_PARM_LEVEL (idx) <= processing_template_decl)
26008 /* In an abbreviated function template we didn't know we were dealing
26009 with a function template when we saw the auto return type, so update
26010 it to have the correct level. */
26011 return make_auto_1 (TYPE_IDENTIFIER (type), true);
26012 }
26013 return type;
26014 }
26015
26016 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto' or
26017 'decltype(auto)' or a deduced class template. */
26018
26019 bool
26020 is_auto (const_tree type)
26021 {
26022 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
26023 && (TYPE_IDENTIFIER (type) == auto_identifier
26024 || TYPE_IDENTIFIER (type) == decltype_auto_identifier
26025 || CLASS_PLACEHOLDER_TEMPLATE (type)))
26026 return true;
26027 else
26028 return false;
26029 }
26030
26031 /* for_each_template_parm callback for type_uses_auto. */
26032
26033 int
26034 is_auto_r (tree tp, void */*data*/)
26035 {
26036 return is_auto (tp);
26037 }
26038
26039 /* Returns the TEMPLATE_TYPE_PARM in TYPE representing `auto' iff TYPE contains
26040 a use of `auto'. Returns NULL_TREE otherwise. */
26041
26042 tree
26043 type_uses_auto (tree type)
26044 {
26045 if (type == NULL_TREE)
26046 return NULL_TREE;
26047 else if (flag_concepts)
26048 {
26049 /* The Concepts TS allows multiple autos in one type-specifier; just
26050 return the first one we find, do_auto_deduction will collect all of
26051 them. */
26052 if (uses_template_parms (type))
26053 return for_each_template_parm (type, is_auto_r, /*data*/NULL,
26054 /*visited*/NULL, /*nondeduced*/true);
26055 else
26056 return NULL_TREE;
26057 }
26058 else
26059 return find_type_usage (type, is_auto);
26060 }
26061
26062 /* For a given template T, return the vector of typedefs referenced
26063 in T for which access check is needed at T instantiation time.
26064 T is either a FUNCTION_DECL or a RECORD_TYPE.
26065 Those typedefs were added to T by the function
26066 append_type_to_template_for_access_check. */
26067
26068 vec<qualified_typedef_usage_t, va_gc> *
26069 get_types_needing_access_check (tree t)
26070 {
26071 tree ti;
26072 vec<qualified_typedef_usage_t, va_gc> *result = NULL;
26073
26074 if (!t || t == error_mark_node)
26075 return NULL;
26076
26077 if (!(ti = get_template_info (t)))
26078 return NULL;
26079
26080 if (CLASS_TYPE_P (t)
26081 || TREE_CODE (t) == FUNCTION_DECL)
26082 {
26083 if (!TI_TEMPLATE (ti))
26084 return NULL;
26085
26086 result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
26087 }
26088
26089 return result;
26090 }
26091
26092 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
26093 tied to T. That list of typedefs will be access checked at
26094 T instantiation time.
26095 T is either a FUNCTION_DECL or a RECORD_TYPE.
26096 TYPE_DECL is a TYPE_DECL node representing a typedef.
26097 SCOPE is the scope through which TYPE_DECL is accessed.
26098 LOCATION is the location of the usage point of TYPE_DECL.
26099
26100 This function is a subroutine of
26101 append_type_to_template_for_access_check. */
26102
26103 static void
26104 append_type_to_template_for_access_check_1 (tree t,
26105 tree type_decl,
26106 tree scope,
26107 location_t location)
26108 {
26109 qualified_typedef_usage_t typedef_usage;
26110 tree ti;
26111
26112 if (!t || t == error_mark_node)
26113 return;
26114
26115 gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
26116 || CLASS_TYPE_P (t))
26117 && type_decl
26118 && TREE_CODE (type_decl) == TYPE_DECL
26119 && scope);
26120
26121 if (!(ti = get_template_info (t)))
26122 return;
26123
26124 gcc_assert (TI_TEMPLATE (ti));
26125
26126 typedef_usage.typedef_decl = type_decl;
26127 typedef_usage.context = scope;
26128 typedef_usage.locus = location;
26129
26130 vec_safe_push (TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti), typedef_usage);
26131 }
26132
26133 /* Append TYPE_DECL to the template TEMPL.
26134 TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
26135 At TEMPL instanciation time, TYPE_DECL will be checked to see
26136 if it can be accessed through SCOPE.
26137 LOCATION is the location of the usage point of TYPE_DECL.
26138
26139 e.g. consider the following code snippet:
26140
26141 class C
26142 {
26143 typedef int myint;
26144 };
26145
26146 template<class U> struct S
26147 {
26148 C::myint mi; // <-- usage point of the typedef C::myint
26149 };
26150
26151 S<char> s;
26152
26153 At S<char> instantiation time, we need to check the access of C::myint
26154 In other words, we need to check the access of the myint typedef through
26155 the C scope. For that purpose, this function will add the myint typedef
26156 and the scope C through which its being accessed to a list of typedefs
26157 tied to the template S. That list will be walked at template instantiation
26158 time and access check performed on each typedefs it contains.
26159 Note that this particular code snippet should yield an error because
26160 myint is private to C. */
26161
26162 void
26163 append_type_to_template_for_access_check (tree templ,
26164 tree type_decl,
26165 tree scope,
26166 location_t location)
26167 {
26168 qualified_typedef_usage_t *iter;
26169 unsigned i;
26170
26171 gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
26172
26173 /* Make sure we don't append the type to the template twice. */
26174 FOR_EACH_VEC_SAFE_ELT (get_types_needing_access_check (templ), i, iter)
26175 if (iter->typedef_decl == type_decl && scope == iter->context)
26176 return;
26177
26178 append_type_to_template_for_access_check_1 (templ, type_decl,
26179 scope, location);
26180 }
26181
26182 /* Convert the generic type parameters in PARM that match the types given in the
26183 range [START_IDX, END_IDX) from the current_template_parms into generic type
26184 packs. */
26185
26186 tree
26187 convert_generic_types_to_packs (tree parm, int start_idx, int end_idx)
26188 {
26189 tree current = current_template_parms;
26190 int depth = TMPL_PARMS_DEPTH (current);
26191 current = INNERMOST_TEMPLATE_PARMS (current);
26192 tree replacement = make_tree_vec (TREE_VEC_LENGTH (current));
26193
26194 for (int i = 0; i < start_idx; ++i)
26195 TREE_VEC_ELT (replacement, i)
26196 = TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (current, i)));
26197
26198 for (int i = start_idx; i < end_idx; ++i)
26199 {
26200 /* Create a distinct parameter pack type from the current parm and add it
26201 to the replacement args to tsubst below into the generic function
26202 parameter. */
26203
26204 tree o = TREE_TYPE (TREE_VALUE
26205 (TREE_VEC_ELT (current, i)));
26206 tree t = copy_type (o);
26207 TEMPLATE_TYPE_PARM_INDEX (t)
26208 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (o),
26209 o, 0, 0, tf_none);
26210 TREE_TYPE (TEMPLATE_TYPE_DECL (t)) = t;
26211 TYPE_STUB_DECL (t) = TYPE_NAME (t) = TEMPLATE_TYPE_DECL (t);
26212 TYPE_MAIN_VARIANT (t) = t;
26213 TEMPLATE_TYPE_PARAMETER_PACK (t) = true;
26214 TYPE_CANONICAL (t) = canonical_type_parameter (t);
26215 TREE_VEC_ELT (replacement, i) = t;
26216 TREE_VALUE (TREE_VEC_ELT (current, i)) = TREE_CHAIN (t);
26217 }
26218
26219 for (int i = end_idx, e = TREE_VEC_LENGTH (current); i < e; ++i)
26220 TREE_VEC_ELT (replacement, i)
26221 = TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (current, i)));
26222
26223 /* If there are more levels then build up the replacement with the outer
26224 template parms. */
26225 if (depth > 1)
26226 replacement = add_to_template_args (template_parms_to_args
26227 (TREE_CHAIN (current_template_parms)),
26228 replacement);
26229
26230 return tsubst (parm, replacement, tf_none, NULL_TREE);
26231 }
26232
26233 /* Entries in the decl_constraint hash table. */
26234 struct GTY((for_user)) constr_entry
26235 {
26236 tree decl;
26237 tree ci;
26238 };
26239
26240 /* Hashing function and equality for constraint entries. */
26241 struct constr_hasher : ggc_ptr_hash<constr_entry>
26242 {
26243 static hashval_t hash (constr_entry *e)
26244 {
26245 return (hashval_t)DECL_UID (e->decl);
26246 }
26247
26248 static bool equal (constr_entry *e1, constr_entry *e2)
26249 {
26250 return e1->decl == e2->decl;
26251 }
26252 };
26253
26254 /* A mapping from declarations to constraint information. Note that
26255 both templates and their underlying declarations are mapped to the
26256 same constraint information.
26257
26258 FIXME: This is defined in pt.c because garbage collection
26259 code is not being generated for constraint.cc. */
26260
26261 static GTY (()) hash_table<constr_hasher> *decl_constraints;
26262
26263 /* Returns the template constraints of declaration T. If T is not
26264 constrained, return NULL_TREE. Note that T must be non-null. */
26265
26266 tree
26267 get_constraints (tree t)
26268 {
26269 if (!flag_concepts)
26270 return NULL_TREE;
26271
26272 gcc_assert (DECL_P (t));
26273 if (TREE_CODE (t) == TEMPLATE_DECL)
26274 t = DECL_TEMPLATE_RESULT (t);
26275 constr_entry elt = { t, NULL_TREE };
26276 constr_entry* found = decl_constraints->find (&elt);
26277 if (found)
26278 return found->ci;
26279 else
26280 return NULL_TREE;
26281 }
26282
26283 /* Associate the given constraint information CI with the declaration
26284 T. If T is a template, then the constraints are associated with
26285 its underlying declaration. Don't build associations if CI is
26286 NULL_TREE. */
26287
26288 void
26289 set_constraints (tree t, tree ci)
26290 {
26291 if (!ci)
26292 return;
26293 gcc_assert (t && flag_concepts);
26294 if (TREE_CODE (t) == TEMPLATE_DECL)
26295 t = DECL_TEMPLATE_RESULT (t);
26296 gcc_assert (!get_constraints (t));
26297 constr_entry elt = {t, ci};
26298 constr_entry** slot = decl_constraints->find_slot (&elt, INSERT);
26299 constr_entry* entry = ggc_alloc<constr_entry> ();
26300 *entry = elt;
26301 *slot = entry;
26302 }
26303
26304 /* Remove the associated constraints of the declaration T. */
26305
26306 void
26307 remove_constraints (tree t)
26308 {
26309 gcc_assert (DECL_P (t));
26310 if (TREE_CODE (t) == TEMPLATE_DECL)
26311 t = DECL_TEMPLATE_RESULT (t);
26312
26313 constr_entry elt = {t, NULL_TREE};
26314 constr_entry** slot = decl_constraints->find_slot (&elt, NO_INSERT);
26315 if (slot)
26316 decl_constraints->clear_slot (slot);
26317 }
26318
26319 /* Memoized satisfaction results for declarations. This
26320 maps the pair (constraint_info, arguments) to the result computed
26321 by constraints_satisfied_p. */
26322
26323 struct GTY((for_user)) constraint_sat_entry
26324 {
26325 tree ci;
26326 tree args;
26327 tree result;
26328 };
26329
26330 /* Hashing function and equality for constraint entries. */
26331
26332 struct constraint_sat_hasher : ggc_ptr_hash<constraint_sat_entry>
26333 {
26334 static hashval_t hash (constraint_sat_entry *e)
26335 {
26336 hashval_t val = iterative_hash_object(e->ci, 0);
26337 return iterative_hash_template_arg (e->args, val);
26338 }
26339
26340 static bool equal (constraint_sat_entry *e1, constraint_sat_entry *e2)
26341 {
26342 return e1->ci == e2->ci && comp_template_args (e1->args, e2->args);
26343 }
26344 };
26345
26346 /* Memoized satisfaction results for concept checks. */
26347
26348 struct GTY((for_user)) concept_spec_entry
26349 {
26350 tree tmpl;
26351 tree args;
26352 tree result;
26353 };
26354
26355 /* Hashing function and equality for constraint entries. */
26356
26357 struct concept_spec_hasher : ggc_ptr_hash<concept_spec_entry>
26358 {
26359 static hashval_t hash (concept_spec_entry *e)
26360 {
26361 return hash_tmpl_and_args (e->tmpl, e->args);
26362 }
26363
26364 static bool equal (concept_spec_entry *e1, concept_spec_entry *e2)
26365 {
26366 ++comparing_specializations;
26367 bool eq = e1->tmpl == e2->tmpl && comp_template_args (e1->args, e2->args);
26368 --comparing_specializations;
26369 return eq;
26370 }
26371 };
26372
26373 static GTY (()) hash_table<constraint_sat_hasher> *constraint_memos;
26374 static GTY (()) hash_table<concept_spec_hasher> *concept_memos;
26375
26376 /* Search for a memoized satisfaction result. Returns one of the
26377 truth value nodes if previously memoized, or NULL_TREE otherwise. */
26378
26379 tree
26380 lookup_constraint_satisfaction (tree ci, tree args)
26381 {
26382 constraint_sat_entry elt = { ci, args, NULL_TREE };
26383 constraint_sat_entry* found = constraint_memos->find (&elt);
26384 if (found)
26385 return found->result;
26386 else
26387 return NULL_TREE;
26388 }
26389
26390 /* Memoize the result of a satisfication test. Returns the saved result. */
26391
26392 tree
26393 memoize_constraint_satisfaction (tree ci, tree args, tree result)
26394 {
26395 constraint_sat_entry elt = {ci, args, result};
26396 constraint_sat_entry** slot = constraint_memos->find_slot (&elt, INSERT);
26397 constraint_sat_entry* entry = ggc_alloc<constraint_sat_entry> ();
26398 *entry = elt;
26399 *slot = entry;
26400 return result;
26401 }
26402
26403 /* Search for a memoized satisfaction result for a concept. */
26404
26405 tree
26406 lookup_concept_satisfaction (tree tmpl, tree args)
26407 {
26408 concept_spec_entry elt = { tmpl, args, NULL_TREE };
26409 concept_spec_entry* found = concept_memos->find (&elt);
26410 if (found)
26411 return found->result;
26412 else
26413 return NULL_TREE;
26414 }
26415
26416 /* Memoize the result of a concept check. Returns the saved result. */
26417
26418 tree
26419 memoize_concept_satisfaction (tree tmpl, tree args, tree result)
26420 {
26421 concept_spec_entry elt = {tmpl, args, result};
26422 concept_spec_entry** slot = concept_memos->find_slot (&elt, INSERT);
26423 concept_spec_entry* entry = ggc_alloc<concept_spec_entry> ();
26424 *entry = elt;
26425 *slot = entry;
26426 return result;
26427 }
26428
26429 static GTY (()) hash_table<concept_spec_hasher> *concept_expansions;
26430
26431 /* Returns a prior concept specialization. This returns the substituted
26432 and normalized constraints defined by the concept. */
26433
26434 tree
26435 get_concept_expansion (tree tmpl, tree args)
26436 {
26437 concept_spec_entry elt = { tmpl, args, NULL_TREE };
26438 concept_spec_entry* found = concept_expansions->find (&elt);
26439 if (found)
26440 return found->result;
26441 else
26442 return NULL_TREE;
26443 }
26444
26445 /* Save a concept expansion for later. */
26446
26447 tree
26448 save_concept_expansion (tree tmpl, tree args, tree def)
26449 {
26450 concept_spec_entry elt = {tmpl, args, def};
26451 concept_spec_entry** slot = concept_expansions->find_slot (&elt, INSERT);
26452 concept_spec_entry* entry = ggc_alloc<concept_spec_entry> ();
26453 *entry = elt;
26454 *slot = entry;
26455 return def;
26456 }
26457
26458 static hashval_t
26459 hash_subsumption_args (tree t1, tree t2)
26460 {
26461 gcc_assert (TREE_CODE (t1) == CHECK_CONSTR);
26462 gcc_assert (TREE_CODE (t2) == CHECK_CONSTR);
26463 int val = 0;
26464 val = iterative_hash_object (CHECK_CONSTR_CONCEPT (t1), val);
26465 val = iterative_hash_template_arg (CHECK_CONSTR_ARGS (t1), val);
26466 val = iterative_hash_object (CHECK_CONSTR_CONCEPT (t2), val);
26467 val = iterative_hash_template_arg (CHECK_CONSTR_ARGS (t2), val);
26468 return val;
26469 }
26470
26471 /* Compare the constraints of two subsumption entries. The LEFT1 and
26472 LEFT2 arguments comprise the first subsumption pair and the RIGHT1
26473 and RIGHT2 arguments comprise the second. These are all CHECK_CONSTRs. */
26474
26475 static bool
26476 comp_subsumption_args (tree left1, tree left2, tree right1, tree right2)
26477 {
26478 if (CHECK_CONSTR_CONCEPT (left1) == CHECK_CONSTR_CONCEPT (right1))
26479 if (CHECK_CONSTR_CONCEPT (left2) == CHECK_CONSTR_CONCEPT (right2))
26480 if (comp_template_args (CHECK_CONSTR_ARGS (left1),
26481 CHECK_CONSTR_ARGS (right1)))
26482 return comp_template_args (CHECK_CONSTR_ARGS (left2),
26483 CHECK_CONSTR_ARGS (right2));
26484 return false;
26485 }
26486
26487 /* Key/value pair for learning and memoizing subsumption results. This
26488 associates a pair of check constraints (including arguments) with
26489 a boolean value indicating the result. */
26490
26491 struct GTY((for_user)) subsumption_entry
26492 {
26493 tree t1;
26494 tree t2;
26495 bool result;
26496 };
26497
26498 /* Hashing function and equality for constraint entries. */
26499
26500 struct subsumption_hasher : ggc_ptr_hash<subsumption_entry>
26501 {
26502 static hashval_t hash (subsumption_entry *e)
26503 {
26504 return hash_subsumption_args (e->t1, e->t2);
26505 }
26506
26507 static bool equal (subsumption_entry *e1, subsumption_entry *e2)
26508 {
26509 ++comparing_specializations;
26510 bool eq = comp_subsumption_args(e1->t1, e1->t2, e2->t1, e2->t2);
26511 --comparing_specializations;
26512 return eq;
26513 }
26514 };
26515
26516 static GTY (()) hash_table<subsumption_hasher> *subsumption_table;
26517
26518 /* Search for a previously cached subsumption result. */
26519
26520 bool*
26521 lookup_subsumption_result (tree t1, tree t2)
26522 {
26523 subsumption_entry elt = { t1, t2, false };
26524 subsumption_entry* found = subsumption_table->find (&elt);
26525 if (found)
26526 return &found->result;
26527 else
26528 return 0;
26529 }
26530
26531 /* Save a subsumption result. */
26532
26533 bool
26534 save_subsumption_result (tree t1, tree t2, bool result)
26535 {
26536 subsumption_entry elt = {t1, t2, result};
26537 subsumption_entry** slot = subsumption_table->find_slot (&elt, INSERT);
26538 subsumption_entry* entry = ggc_alloc<subsumption_entry> ();
26539 *entry = elt;
26540 *slot = entry;
26541 return result;
26542 }
26543
26544 /* Set up the hash table for constraint association. */
26545
26546 void
26547 init_constraint_processing (void)
26548 {
26549 if (!flag_concepts)
26550 return;
26551
26552 decl_constraints = hash_table<constr_hasher>::create_ggc(37);
26553 constraint_memos = hash_table<constraint_sat_hasher>::create_ggc(37);
26554 concept_memos = hash_table<concept_spec_hasher>::create_ggc(37);
26555 concept_expansions = hash_table<concept_spec_hasher>::create_ggc(37);
26556 subsumption_table = hash_table<subsumption_hasher>::create_ggc(37);
26557 }
26558
26559 /* __integer_pack(N) in a pack expansion expands to a sequence of numbers from
26560 0..N-1. */
26561
26562 void
26563 declare_integer_pack (void)
26564 {
26565 tree ipfn = push_library_fn (get_identifier ("__integer_pack"),
26566 build_function_type_list (integer_type_node,
26567 integer_type_node,
26568 NULL_TREE),
26569 NULL_TREE, ECF_CONST);
26570 DECL_DECLARED_CONSTEXPR_P (ipfn) = true;
26571 DECL_BUILT_IN_CLASS (ipfn) = BUILT_IN_FRONTEND;
26572 }
26573
26574 /* Set up the hash tables for template instantiations. */
26575
26576 void
26577 init_template_processing (void)
26578 {
26579 decl_specializations = hash_table<spec_hasher>::create_ggc (37);
26580 type_specializations = hash_table<spec_hasher>::create_ggc (37);
26581
26582 if (cxx_dialect >= cxx11)
26583 declare_integer_pack ();
26584 }
26585
26586 /* Print stats about the template hash tables for -fstats. */
26587
26588 void
26589 print_template_statistics (void)
26590 {
26591 fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
26592 "%f collisions\n", (long) decl_specializations->size (),
26593 (long) decl_specializations->elements (),
26594 decl_specializations->collisions ());
26595 fprintf (stderr, "type_specializations: size %ld, %ld elements, "
26596 "%f collisions\n", (long) type_specializations->size (),
26597 (long) type_specializations->elements (),
26598 type_specializations->collisions ());
26599 }
26600
26601 #include "gt-cp-pt.h"