af37586177252162b27e0c9037616112f46101de
[gcc.git] / gcc / cp / pt.c
1 /* Handle parameterized types (templates) for GNU -*- C++ -*-.
2 Copyright (C) 1992-2016 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
44 /* The type of functions taking a tree, and some additional data, and
45 returning an int. */
46 typedef int (*tree_fn_t) (tree, void*);
47
48 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
49 instantiations have been deferred, either because their definitions
50 were not yet available, or because we were putting off doing the work. */
51 struct GTY ((chain_next ("%h.next"))) pending_template {
52 struct pending_template *next;
53 struct tinst_level *tinst;
54 };
55
56 static GTY(()) struct pending_template *pending_templates;
57 static GTY(()) struct pending_template *last_pending_template;
58
59 int processing_template_parmlist;
60 static int template_header_count;
61
62 static GTY(()) tree saved_trees;
63 static vec<int> inline_parm_levels;
64
65 static GTY(()) struct tinst_level *current_tinst_level;
66
67 static GTY(()) tree saved_access_scope;
68
69 /* Live only within one (recursive) call to tsubst_expr. We use
70 this to pass the statement expression node from the STMT_EXPR
71 to the EXPR_STMT that is its result. */
72 static tree cur_stmt_expr;
73
74 // -------------------------------------------------------------------------- //
75 // Local Specialization Stack
76 //
77 // Implementation of the RAII helper for creating new local
78 // specializations.
79 local_specialization_stack::local_specialization_stack ()
80 : saved (local_specializations)
81 {
82 local_specializations = new hash_map<tree, tree>;
83 }
84
85 local_specialization_stack::~local_specialization_stack ()
86 {
87 delete local_specializations;
88 local_specializations = saved;
89 }
90
91 /* True if we've recursed into fn_type_unification too many times. */
92 static bool excessive_deduction_depth;
93
94 struct GTY((for_user)) spec_entry
95 {
96 tree tmpl;
97 tree args;
98 tree spec;
99 };
100
101 struct spec_hasher : ggc_ptr_hash<spec_entry>
102 {
103 static hashval_t hash (spec_entry *);
104 static bool equal (spec_entry *, spec_entry *);
105 };
106
107 static GTY (()) hash_table<spec_hasher> *decl_specializations;
108
109 static GTY (()) hash_table<spec_hasher> *type_specializations;
110
111 /* Contains canonical template parameter types. The vector is indexed by
112 the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
113 TREE_LIST, whose TREE_VALUEs contain the canonical template
114 parameters of various types and levels. */
115 static GTY(()) vec<tree, va_gc> *canonical_template_parms;
116
117 #define UNIFY_ALLOW_NONE 0
118 #define UNIFY_ALLOW_MORE_CV_QUAL 1
119 #define UNIFY_ALLOW_LESS_CV_QUAL 2
120 #define UNIFY_ALLOW_DERIVED 4
121 #define UNIFY_ALLOW_INTEGER 8
122 #define UNIFY_ALLOW_OUTER_LEVEL 16
123 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
124 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
125
126 enum template_base_result {
127 tbr_incomplete_type,
128 tbr_ambiguous_baseclass,
129 tbr_success
130 };
131
132 static void push_access_scope (tree);
133 static void pop_access_scope (tree);
134 static bool resolve_overloaded_unification (tree, tree, tree, tree,
135 unification_kind_t, int,
136 bool);
137 static int try_one_overload (tree, tree, tree, tree, tree,
138 unification_kind_t, int, bool, bool);
139 static int unify (tree, tree, tree, tree, int, bool);
140 static void add_pending_template (tree);
141 static tree reopen_tinst_level (struct tinst_level *);
142 static tree tsubst_initializer_list (tree, tree);
143 static tree get_partial_spec_bindings (tree, tree, tree, tree);
144 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
145 bool, bool);
146 static tree coerce_innermost_template_parms (tree, tree, tree, tsubst_flags_t,
147 bool, bool);
148 static void tsubst_enum (tree, tree, tree);
149 static tree add_to_template_args (tree, tree);
150 static tree add_outermost_template_args (tree, tree);
151 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
152 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
153 tree);
154 static int type_unification_real (tree, tree, tree, const tree *,
155 unsigned int, int, unification_kind_t, int,
156 vec<deferred_access_check, va_gc> **,
157 bool);
158 static void note_template_header (int);
159 static tree convert_nontype_argument_function (tree, tree, tsubst_flags_t);
160 static tree convert_nontype_argument (tree, tree, tsubst_flags_t);
161 static tree convert_template_argument (tree, tree, tree,
162 tsubst_flags_t, int, tree);
163 static tree for_each_template_parm (tree, tree_fn_t, void*,
164 hash_set<tree> *, bool);
165 static tree expand_template_argument_pack (tree);
166 static tree build_template_parm_index (int, int, int, tree, tree);
167 static bool inline_needs_template_parms (tree, bool);
168 static void push_inline_template_parms_recursive (tree, int);
169 static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
170 static int mark_template_parm (tree, void *);
171 static int template_parm_this_level_p (tree, void *);
172 static tree tsubst_friend_function (tree, tree);
173 static tree tsubst_friend_class (tree, tree);
174 static int can_complete_type_without_circularity (tree);
175 static tree get_bindings (tree, tree, tree, bool);
176 static int template_decl_level (tree);
177 static int check_cv_quals_for_unify (int, tree, tree);
178 static void template_parm_level_and_index (tree, int*, int*);
179 static int unify_pack_expansion (tree, tree, tree,
180 tree, unification_kind_t, bool, bool);
181 static tree copy_template_args (tree);
182 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
183 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
184 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
185 static void regenerate_decl_from_template (tree, tree);
186 static tree most_specialized_partial_spec (tree, tsubst_flags_t);
187 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
188 static tree tsubst_arg_types (tree, tree, tree, tsubst_flags_t, tree);
189 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
190 static bool check_specialization_scope (void);
191 static tree process_partial_specialization (tree);
192 static void set_current_access_from_decl (tree);
193 static enum template_base_result get_template_base (tree, tree, tree, tree,
194 bool , tree *);
195 static tree try_class_unification (tree, tree, tree, tree, bool);
196 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
197 tree, tree);
198 static bool template_template_parm_bindings_ok_p (tree, tree);
199 static int template_args_equal (tree, tree);
200 static void tsubst_default_arguments (tree, tsubst_flags_t);
201 static tree for_each_template_parm_r (tree *, int *, void *);
202 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
203 static void copy_default_args_to_explicit_spec (tree);
204 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
205 static bool dependent_template_arg_p (tree);
206 static bool any_template_arguments_need_structural_equality_p (tree);
207 static bool dependent_type_p_r (tree);
208 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
209 static tree tsubst_decl (tree, tree, tsubst_flags_t);
210 static void perform_typedefs_access_check (tree tmpl, tree targs);
211 static void append_type_to_template_for_access_check_1 (tree, tree, tree,
212 location_t);
213 static tree listify (tree);
214 static tree listify_autos (tree, tree);
215 static tree tsubst_template_parm (tree, tree, tsubst_flags_t);
216 static tree instantiate_alias_template (tree, tree, tsubst_flags_t);
217 static bool complex_alias_template_p (const_tree tmpl);
218 static tree tsubst_attributes (tree, tree, tsubst_flags_t, tree);
219
220 /* Make the current scope suitable for access checking when we are
221 processing T. T can be FUNCTION_DECL for instantiated function
222 template, VAR_DECL for static member variable, or TYPE_DECL for
223 alias template (needed by instantiate_decl). */
224
225 static void
226 push_access_scope (tree t)
227 {
228 gcc_assert (VAR_OR_FUNCTION_DECL_P (t)
229 || TREE_CODE (t) == TYPE_DECL);
230
231 if (DECL_FRIEND_CONTEXT (t))
232 push_nested_class (DECL_FRIEND_CONTEXT (t));
233 else if (DECL_CLASS_SCOPE_P (t))
234 push_nested_class (DECL_CONTEXT (t));
235 else
236 push_to_top_level ();
237
238 if (TREE_CODE (t) == FUNCTION_DECL)
239 {
240 saved_access_scope = tree_cons
241 (NULL_TREE, current_function_decl, saved_access_scope);
242 current_function_decl = t;
243 }
244 }
245
246 /* Restore the scope set up by push_access_scope. T is the node we
247 are processing. */
248
249 static void
250 pop_access_scope (tree t)
251 {
252 if (TREE_CODE (t) == FUNCTION_DECL)
253 {
254 current_function_decl = TREE_VALUE (saved_access_scope);
255 saved_access_scope = TREE_CHAIN (saved_access_scope);
256 }
257
258 if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
259 pop_nested_class ();
260 else
261 pop_from_top_level ();
262 }
263
264 /* Do any processing required when DECL (a member template
265 declaration) is finished. Returns the TEMPLATE_DECL corresponding
266 to DECL, unless it is a specialization, in which case the DECL
267 itself is returned. */
268
269 tree
270 finish_member_template_decl (tree decl)
271 {
272 if (decl == error_mark_node)
273 return error_mark_node;
274
275 gcc_assert (DECL_P (decl));
276
277 if (TREE_CODE (decl) == TYPE_DECL)
278 {
279 tree type;
280
281 type = TREE_TYPE (decl);
282 if (type == error_mark_node)
283 return error_mark_node;
284 if (MAYBE_CLASS_TYPE_P (type)
285 && CLASSTYPE_TEMPLATE_INFO (type)
286 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
287 {
288 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
289 check_member_template (tmpl);
290 return tmpl;
291 }
292 return NULL_TREE;
293 }
294 else if (TREE_CODE (decl) == FIELD_DECL)
295 error ("data member %qD cannot be a member template", decl);
296 else if (DECL_TEMPLATE_INFO (decl))
297 {
298 if (!DECL_TEMPLATE_SPECIALIZATION (decl))
299 {
300 check_member_template (DECL_TI_TEMPLATE (decl));
301 return DECL_TI_TEMPLATE (decl);
302 }
303 else
304 return decl;
305 }
306 else
307 error ("invalid member template declaration %qD", decl);
308
309 return error_mark_node;
310 }
311
312 /* Create a template info node. */
313
314 tree
315 build_template_info (tree template_decl, tree template_args)
316 {
317 tree result = make_node (TEMPLATE_INFO);
318 TI_TEMPLATE (result) = template_decl;
319 TI_ARGS (result) = template_args;
320 return result;
321 }
322
323 /* Return the template info node corresponding to T, whatever T is. */
324
325 tree
326 get_template_info (const_tree t)
327 {
328 tree tinfo = NULL_TREE;
329
330 if (!t || t == error_mark_node)
331 return NULL;
332
333 if (TREE_CODE (t) == NAMESPACE_DECL
334 || TREE_CODE (t) == PARM_DECL)
335 return NULL;
336
337 if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
338 tinfo = DECL_TEMPLATE_INFO (t);
339
340 if (!tinfo && DECL_IMPLICIT_TYPEDEF_P (t))
341 t = TREE_TYPE (t);
342
343 if (OVERLOAD_TYPE_P (t))
344 tinfo = TYPE_TEMPLATE_INFO (t);
345 else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
346 tinfo = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
347
348 return tinfo;
349 }
350
351 /* Returns the template nesting level of the indicated class TYPE.
352
353 For example, in:
354 template <class T>
355 struct A
356 {
357 template <class U>
358 struct B {};
359 };
360
361 A<T>::B<U> has depth two, while A<T> has depth one.
362 Both A<T>::B<int> and A<int>::B<U> have depth one, if
363 they are instantiations, not specializations.
364
365 This function is guaranteed to return 0 if passed NULL_TREE so
366 that, for example, `template_class_depth (current_class_type)' is
367 always safe. */
368
369 int
370 template_class_depth (tree type)
371 {
372 int depth;
373
374 for (depth = 0; type && TREE_CODE (type) != NAMESPACE_DECL; )
375 {
376 tree tinfo = get_template_info (type);
377
378 if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
379 && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
380 ++depth;
381
382 if (DECL_P (type))
383 type = CP_DECL_CONTEXT (type);
384 else if (LAMBDA_TYPE_P (type))
385 type = LAMBDA_TYPE_EXTRA_SCOPE (type);
386 else
387 type = CP_TYPE_CONTEXT (type);
388 }
389
390 return depth;
391 }
392
393 /* Subroutine of maybe_begin_member_template_processing.
394 Returns true if processing DECL needs us to push template parms. */
395
396 static bool
397 inline_needs_template_parms (tree decl, bool nsdmi)
398 {
399 if (!decl || (!nsdmi && ! DECL_TEMPLATE_INFO (decl)))
400 return false;
401
402 return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
403 > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
404 }
405
406 /* Subroutine of maybe_begin_member_template_processing.
407 Push the template parms in PARMS, starting from LEVELS steps into the
408 chain, and ending at the beginning, since template parms are listed
409 innermost first. */
410
411 static void
412 push_inline_template_parms_recursive (tree parmlist, int levels)
413 {
414 tree parms = TREE_VALUE (parmlist);
415 int i;
416
417 if (levels > 1)
418 push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
419
420 ++processing_template_decl;
421 current_template_parms
422 = tree_cons (size_int (processing_template_decl),
423 parms, current_template_parms);
424 TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
425
426 begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
427 NULL);
428 for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
429 {
430 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
431
432 if (error_operand_p (parm))
433 continue;
434
435 gcc_assert (DECL_P (parm));
436
437 switch (TREE_CODE (parm))
438 {
439 case TYPE_DECL:
440 case TEMPLATE_DECL:
441 pushdecl (parm);
442 break;
443
444 case PARM_DECL:
445 /* Push the CONST_DECL. */
446 pushdecl (TEMPLATE_PARM_DECL (DECL_INITIAL (parm)));
447 break;
448
449 default:
450 gcc_unreachable ();
451 }
452 }
453 }
454
455 /* Restore the template parameter context for a member template, a
456 friend template defined in a class definition, or a non-template
457 member of template class. */
458
459 void
460 maybe_begin_member_template_processing (tree decl)
461 {
462 tree parms;
463 int levels = 0;
464 bool nsdmi = TREE_CODE (decl) == FIELD_DECL;
465
466 if (nsdmi)
467 {
468 tree ctx = DECL_CONTEXT (decl);
469 decl = (CLASSTYPE_TEMPLATE_INFO (ctx)
470 /* Disregard full specializations (c++/60999). */
471 && uses_template_parms (ctx)
472 ? CLASSTYPE_TI_TEMPLATE (ctx) : NULL_TREE);
473 }
474
475 if (inline_needs_template_parms (decl, nsdmi))
476 {
477 parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
478 levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
479
480 if (DECL_TEMPLATE_SPECIALIZATION (decl))
481 {
482 --levels;
483 parms = TREE_CHAIN (parms);
484 }
485
486 push_inline_template_parms_recursive (parms, levels);
487 }
488
489 /* Remember how many levels of template parameters we pushed so that
490 we can pop them later. */
491 inline_parm_levels.safe_push (levels);
492 }
493
494 /* Undo the effects of maybe_begin_member_template_processing. */
495
496 void
497 maybe_end_member_template_processing (void)
498 {
499 int i;
500 int last;
501
502 if (inline_parm_levels.length () == 0)
503 return;
504
505 last = inline_parm_levels.pop ();
506 for (i = 0; i < last; ++i)
507 {
508 --processing_template_decl;
509 current_template_parms = TREE_CHAIN (current_template_parms);
510 poplevel (0, 0, 0);
511 }
512 }
513
514 /* Return a new template argument vector which contains all of ARGS,
515 but has as its innermost set of arguments the EXTRA_ARGS. */
516
517 static tree
518 add_to_template_args (tree args, tree extra_args)
519 {
520 tree new_args;
521 int extra_depth;
522 int i;
523 int j;
524
525 if (args == NULL_TREE || extra_args == error_mark_node)
526 return extra_args;
527
528 extra_depth = TMPL_ARGS_DEPTH (extra_args);
529 new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
530
531 for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
532 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
533
534 for (j = 1; j <= extra_depth; ++j, ++i)
535 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
536
537 return new_args;
538 }
539
540 /* Like add_to_template_args, but only the outermost ARGS are added to
541 the EXTRA_ARGS. In particular, all but TMPL_ARGS_DEPTH
542 (EXTRA_ARGS) levels are added. This function is used to combine
543 the template arguments from a partial instantiation with the
544 template arguments used to attain the full instantiation from the
545 partial instantiation. */
546
547 static tree
548 add_outermost_template_args (tree args, tree extra_args)
549 {
550 tree new_args;
551
552 /* If there are more levels of EXTRA_ARGS than there are ARGS,
553 something very fishy is going on. */
554 gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
555
556 /* If *all* the new arguments will be the EXTRA_ARGS, just return
557 them. */
558 if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
559 return extra_args;
560
561 /* For the moment, we make ARGS look like it contains fewer levels. */
562 TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
563
564 new_args = add_to_template_args (args, extra_args);
565
566 /* Now, we restore ARGS to its full dimensions. */
567 TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
568
569 return new_args;
570 }
571
572 /* Return the N levels of innermost template arguments from the ARGS. */
573
574 tree
575 get_innermost_template_args (tree args, int n)
576 {
577 tree new_args;
578 int extra_levels;
579 int i;
580
581 gcc_assert (n >= 0);
582
583 /* If N is 1, just return the innermost set of template arguments. */
584 if (n == 1)
585 return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
586
587 /* If we're not removing anything, just return the arguments we were
588 given. */
589 extra_levels = TMPL_ARGS_DEPTH (args) - n;
590 gcc_assert (extra_levels >= 0);
591 if (extra_levels == 0)
592 return args;
593
594 /* Make a new set of arguments, not containing the outer arguments. */
595 new_args = make_tree_vec (n);
596 for (i = 1; i <= n; ++i)
597 SET_TMPL_ARGS_LEVEL (new_args, i,
598 TMPL_ARGS_LEVEL (args, i + extra_levels));
599
600 return new_args;
601 }
602
603 /* The inverse of get_innermost_template_args: Return all but the innermost
604 EXTRA_LEVELS levels of template arguments from the ARGS. */
605
606 static tree
607 strip_innermost_template_args (tree args, int extra_levels)
608 {
609 tree new_args;
610 int n = TMPL_ARGS_DEPTH (args) - extra_levels;
611 int i;
612
613 gcc_assert (n >= 0);
614
615 /* If N is 1, just return the outermost set of template arguments. */
616 if (n == 1)
617 return TMPL_ARGS_LEVEL (args, 1);
618
619 /* If we're not removing anything, just return the arguments we were
620 given. */
621 gcc_assert (extra_levels >= 0);
622 if (extra_levels == 0)
623 return args;
624
625 /* Make a new set of arguments, not containing the inner arguments. */
626 new_args = make_tree_vec (n);
627 for (i = 1; i <= n; ++i)
628 SET_TMPL_ARGS_LEVEL (new_args, i,
629 TMPL_ARGS_LEVEL (args, i));
630
631 return new_args;
632 }
633
634 /* We've got a template header coming up; push to a new level for storing
635 the parms. */
636
637 void
638 begin_template_parm_list (void)
639 {
640 /* We use a non-tag-transparent scope here, which causes pushtag to
641 put tags in this scope, rather than in the enclosing class or
642 namespace scope. This is the right thing, since we want
643 TEMPLATE_DECLS, and not TYPE_DECLS for template classes. For a
644 global template class, push_template_decl handles putting the
645 TEMPLATE_DECL into top-level scope. For a nested template class,
646 e.g.:
647
648 template <class T> struct S1 {
649 template <class T> struct S2 {};
650 };
651
652 pushtag contains special code to call pushdecl_with_scope on the
653 TEMPLATE_DECL for S2. */
654 begin_scope (sk_template_parms, NULL);
655 ++processing_template_decl;
656 ++processing_template_parmlist;
657 note_template_header (0);
658
659 /* Add a dummy parameter level while we process the parameter list. */
660 current_template_parms
661 = tree_cons (size_int (processing_template_decl),
662 make_tree_vec (0),
663 current_template_parms);
664 }
665
666 /* This routine is called when a specialization is declared. If it is
667 invalid to declare a specialization here, an error is reported and
668 false is returned, otherwise this routine will return true. */
669
670 static bool
671 check_specialization_scope (void)
672 {
673 tree scope = current_scope ();
674
675 /* [temp.expl.spec]
676
677 An explicit specialization shall be declared in the namespace of
678 which the template is a member, or, for member templates, in the
679 namespace of which the enclosing class or enclosing class
680 template is a member. An explicit specialization of a member
681 function, member class or static data member of a class template
682 shall be declared in the namespace of which the class template
683 is a member. */
684 if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
685 {
686 error ("explicit specialization in non-namespace scope %qD", scope);
687 return false;
688 }
689
690 /* [temp.expl.spec]
691
692 In an explicit specialization declaration for a member of a class
693 template or a member template that appears in namespace scope,
694 the member template and some of its enclosing class templates may
695 remain unspecialized, except that the declaration shall not
696 explicitly specialize a class member template if its enclosing
697 class templates are not explicitly specialized as well. */
698 if (current_template_parms)
699 {
700 error ("enclosing class templates are not explicitly specialized");
701 return false;
702 }
703
704 return true;
705 }
706
707 /* We've just seen template <>. */
708
709 bool
710 begin_specialization (void)
711 {
712 begin_scope (sk_template_spec, NULL);
713 note_template_header (1);
714 return check_specialization_scope ();
715 }
716
717 /* Called at then end of processing a declaration preceded by
718 template<>. */
719
720 void
721 end_specialization (void)
722 {
723 finish_scope ();
724 reset_specialization ();
725 }
726
727 /* Any template <>'s that we have seen thus far are not referring to a
728 function specialization. */
729
730 void
731 reset_specialization (void)
732 {
733 processing_specialization = 0;
734 template_header_count = 0;
735 }
736
737 /* We've just seen a template header. If SPECIALIZATION is nonzero,
738 it was of the form template <>. */
739
740 static void
741 note_template_header (int specialization)
742 {
743 processing_specialization = specialization;
744 template_header_count++;
745 }
746
747 /* We're beginning an explicit instantiation. */
748
749 void
750 begin_explicit_instantiation (void)
751 {
752 gcc_assert (!processing_explicit_instantiation);
753 processing_explicit_instantiation = true;
754 }
755
756
757 void
758 end_explicit_instantiation (void)
759 {
760 gcc_assert (processing_explicit_instantiation);
761 processing_explicit_instantiation = false;
762 }
763
764 /* An explicit specialization or partial specialization of TMPL is being
765 declared. Check that the namespace in which the specialization is
766 occurring is permissible. Returns false iff it is invalid to
767 specialize TMPL in the current namespace. */
768
769 static bool
770 check_specialization_namespace (tree tmpl)
771 {
772 tree tpl_ns = decl_namespace_context (tmpl);
773
774 /* [tmpl.expl.spec]
775
776 An explicit specialization shall be declared in the namespace of
777 which the template is a member, or, for member templates, in the
778 namespace of which the enclosing class or enclosing class
779 template is a member. An explicit specialization of a member
780 function, member class or static data member of a class template
781 shall be declared in the namespace of which the class template is
782 a member. */
783 if (current_scope() != DECL_CONTEXT (tmpl)
784 && !at_namespace_scope_p ())
785 {
786 error ("specialization of %qD must appear at namespace scope", tmpl);
787 return false;
788 }
789 if (is_associated_namespace (current_namespace, tpl_ns))
790 /* Same or super-using namespace. */
791 return true;
792 else
793 {
794 permerror (input_location,
795 "specialization of %qD in different namespace", tmpl);
796 permerror (DECL_SOURCE_LOCATION (tmpl),
797 " from definition of %q#D", tmpl);
798 return false;
799 }
800 }
801
802 /* SPEC is an explicit instantiation. Check that it is valid to
803 perform this explicit instantiation in the current namespace. */
804
805 static void
806 check_explicit_instantiation_namespace (tree spec)
807 {
808 tree ns;
809
810 /* DR 275: An explicit instantiation shall appear in an enclosing
811 namespace of its template. */
812 ns = decl_namespace_context (spec);
813 if (!is_ancestor (current_namespace, ns))
814 permerror (input_location, "explicit instantiation of %qD in namespace %qD "
815 "(which does not enclose namespace %qD)",
816 spec, current_namespace, ns);
817 }
818
819 // Returns the type of a template specialization only if that
820 // specialization needs to be defined. Otherwise (e.g., if the type has
821 // already been defined), the function returns NULL_TREE.
822 static tree
823 maybe_new_partial_specialization (tree type)
824 {
825 // An implicit instantiation of an incomplete type implies
826 // the definition of a new class template.
827 //
828 // template<typename T>
829 // struct S;
830 //
831 // template<typename T>
832 // struct S<T*>;
833 //
834 // Here, S<T*> is an implicit instantiation of S whose type
835 // is incomplete.
836 if (CLASSTYPE_IMPLICIT_INSTANTIATION (type) && !COMPLETE_TYPE_P (type))
837 return type;
838
839 // It can also be the case that TYPE is a completed specialization.
840 // Continuing the previous example, suppose we also declare:
841 //
842 // template<typename T>
843 // requires Integral<T>
844 // struct S<T*>;
845 //
846 // Here, S<T*> refers to the specialization S<T*> defined
847 // above. However, we need to differentiate definitions because
848 // we intend to define a new partial specialization. In this case,
849 // we rely on the fact that the constraints are different for
850 // this declaration than that above.
851 //
852 // Note that we also get here for injected class names and
853 // late-parsed template definitions. We must ensure that we
854 // do not create new type declarations for those cases.
855 if (flag_concepts && CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
856 {
857 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
858 tree args = CLASSTYPE_TI_ARGS (type);
859
860 // If there are no template parameters, this cannot be a new
861 // partial template specializtion?
862 if (!current_template_parms)
863 return NULL_TREE;
864
865 // The injected-class-name is not a new partial specialization.
866 if (DECL_SELF_REFERENCE_P (TYPE_NAME (type)))
867 return NULL_TREE;
868
869 // If the constraints are not the same as those of the primary
870 // then, we can probably create a new specialization.
871 tree type_constr = current_template_constraints ();
872
873 if (type == TREE_TYPE (tmpl))
874 {
875 tree main_constr = get_constraints (tmpl);
876 if (equivalent_constraints (type_constr, main_constr))
877 return NULL_TREE;
878 }
879
880 // Also, if there's a pre-existing specialization with matching
881 // constraints, then this also isn't new.
882 tree specs = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
883 while (specs)
884 {
885 tree spec_tmpl = TREE_VALUE (specs);
886 tree spec_args = TREE_PURPOSE (specs);
887 tree spec_constr = get_constraints (spec_tmpl);
888 if (comp_template_args (args, spec_args)
889 && equivalent_constraints (type_constr, spec_constr))
890 return NULL_TREE;
891 specs = TREE_CHAIN (specs);
892 }
893
894 // Create a new type node (and corresponding type decl)
895 // for the newly declared specialization.
896 tree t = make_class_type (TREE_CODE (type));
897 CLASSTYPE_DECLARED_CLASS (t) = CLASSTYPE_DECLARED_CLASS (type);
898 TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (type);
899 SET_TYPE_TEMPLATE_INFO (t, build_template_info (tmpl, args));
900
901 /* We only need a separate type node for storing the definition of this
902 partial specialization; uses of S<T*> are unconstrained, so all are
903 equivalent. So keep TYPE_CANONICAL the same. */
904 TYPE_CANONICAL (t) = TYPE_CANONICAL (type);
905
906 // Build the corresponding type decl.
907 tree d = create_implicit_typedef (DECL_NAME (tmpl), t);
908 DECL_CONTEXT (d) = TYPE_CONTEXT (t);
909 DECL_SOURCE_LOCATION (d) = input_location;
910
911 return t;
912 }
913
914 return NULL_TREE;
915 }
916
917 /* The TYPE is being declared. If it is a template type, that means it
918 is a partial specialization. Do appropriate error-checking. */
919
920 tree
921 maybe_process_partial_specialization (tree type)
922 {
923 tree context;
924
925 if (type == error_mark_node)
926 return error_mark_node;
927
928 /* A lambda that appears in specialization context is not itself a
929 specialization. */
930 if (CLASS_TYPE_P (type) && CLASSTYPE_LAMBDA_EXPR (type))
931 return type;
932
933 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
934 {
935 error ("name of class shadows template template parameter %qD",
936 TYPE_NAME (type));
937 return error_mark_node;
938 }
939
940 context = TYPE_CONTEXT (type);
941
942 if (TYPE_ALIAS_P (type))
943 {
944 if (TYPE_TEMPLATE_INFO (type)
945 && DECL_ALIAS_TEMPLATE_P (TYPE_TI_TEMPLATE (type)))
946 error ("specialization of alias template %qD",
947 TYPE_TI_TEMPLATE (type));
948 else
949 error ("explicit specialization of non-template %qT", type);
950 return error_mark_node;
951 }
952 else if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
953 {
954 /* This is for ordinary explicit specialization and partial
955 specialization of a template class such as:
956
957 template <> class C<int>;
958
959 or:
960
961 template <class T> class C<T*>;
962
963 Make sure that `C<int>' and `C<T*>' are implicit instantiations. */
964
965 if (tree t = maybe_new_partial_specialization (type))
966 {
967 if (!check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (t))
968 && !at_namespace_scope_p ())
969 return error_mark_node;
970 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (t);
971 DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (t)) = input_location;
972 if (processing_template_decl)
973 {
974 tree decl = push_template_decl (TYPE_MAIN_DECL (t));
975 if (decl == error_mark_node)
976 return error_mark_node;
977 return TREE_TYPE (decl);
978 }
979 }
980 else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
981 error ("specialization of %qT after instantiation", type);
982 else if (errorcount && !processing_specialization
983 && CLASSTYPE_TEMPLATE_SPECIALIZATION (type)
984 && !uses_template_parms (CLASSTYPE_TI_ARGS (type)))
985 /* Trying to define a specialization either without a template<> header
986 or in an inappropriate place. We've already given an error, so just
987 bail now so we don't actually define the specialization. */
988 return error_mark_node;
989 }
990 else if (CLASS_TYPE_P (type)
991 && !CLASSTYPE_USE_TEMPLATE (type)
992 && CLASSTYPE_TEMPLATE_INFO (type)
993 && context && CLASS_TYPE_P (context)
994 && CLASSTYPE_TEMPLATE_INFO (context))
995 {
996 /* This is for an explicit specialization of member class
997 template according to [temp.expl.spec/18]:
998
999 template <> template <class U> class C<int>::D;
1000
1001 The context `C<int>' must be an implicit instantiation.
1002 Otherwise this is just a member class template declared
1003 earlier like:
1004
1005 template <> class C<int> { template <class U> class D; };
1006 template <> template <class U> class C<int>::D;
1007
1008 In the first case, `C<int>::D' is a specialization of `C<T>::D'
1009 while in the second case, `C<int>::D' is a primary template
1010 and `C<T>::D' may not exist. */
1011
1012 if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
1013 && !COMPLETE_TYPE_P (type))
1014 {
1015 tree t;
1016 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
1017
1018 if (current_namespace
1019 != decl_namespace_context (tmpl))
1020 {
1021 permerror (input_location,
1022 "specializing %q#T in different namespace", type);
1023 permerror (DECL_SOURCE_LOCATION (tmpl),
1024 " from definition of %q#D", tmpl);
1025 }
1026
1027 /* Check for invalid specialization after instantiation:
1028
1029 template <> template <> class C<int>::D<int>;
1030 template <> template <class U> class C<int>::D; */
1031
1032 for (t = DECL_TEMPLATE_INSTANTIATIONS (tmpl);
1033 t; t = TREE_CHAIN (t))
1034 {
1035 tree inst = TREE_VALUE (t);
1036 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (inst)
1037 || !COMPLETE_OR_OPEN_TYPE_P (inst))
1038 {
1039 /* We already have a full specialization of this partial
1040 instantiation, or a full specialization has been
1041 looked up but not instantiated. Reassign it to the
1042 new member specialization template. */
1043 spec_entry elt;
1044 spec_entry *entry;
1045
1046 elt.tmpl = most_general_template (tmpl);
1047 elt.args = CLASSTYPE_TI_ARGS (inst);
1048 elt.spec = inst;
1049
1050 type_specializations->remove_elt (&elt);
1051
1052 elt.tmpl = tmpl;
1053 elt.args = INNERMOST_TEMPLATE_ARGS (elt.args);
1054
1055 spec_entry **slot
1056 = type_specializations->find_slot (&elt, INSERT);
1057 entry = ggc_alloc<spec_entry> ();
1058 *entry = elt;
1059 *slot = entry;
1060 }
1061 else
1062 /* But if we've had an implicit instantiation, that's a
1063 problem ([temp.expl.spec]/6). */
1064 error ("specialization %qT after instantiation %qT",
1065 type, inst);
1066 }
1067
1068 /* Mark TYPE as a specialization. And as a result, we only
1069 have one level of template argument for the innermost
1070 class template. */
1071 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
1072 DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)) = input_location;
1073 CLASSTYPE_TI_ARGS (type)
1074 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
1075 }
1076 }
1077 else if (processing_specialization)
1078 {
1079 /* Someday C++0x may allow for enum template specialization. */
1080 if (cxx_dialect > cxx98 && TREE_CODE (type) == ENUMERAL_TYPE
1081 && CLASS_TYPE_P (context) && CLASSTYPE_USE_TEMPLATE (context))
1082 pedwarn (input_location, OPT_Wpedantic, "template specialization "
1083 "of %qD not allowed by ISO C++", type);
1084 else
1085 {
1086 error ("explicit specialization of non-template %qT", type);
1087 return error_mark_node;
1088 }
1089 }
1090
1091 return type;
1092 }
1093
1094 /* Returns nonzero if we can optimize the retrieval of specializations
1095 for TMPL, a TEMPLATE_DECL. In particular, for such a template, we
1096 do not use DECL_TEMPLATE_SPECIALIZATIONS at all. */
1097
1098 static inline bool
1099 optimize_specialization_lookup_p (tree tmpl)
1100 {
1101 return (DECL_FUNCTION_TEMPLATE_P (tmpl)
1102 && DECL_CLASS_SCOPE_P (tmpl)
1103 /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
1104 parameter. */
1105 && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
1106 /* The optimized lookup depends on the fact that the
1107 template arguments for the member function template apply
1108 purely to the containing class, which is not true if the
1109 containing class is an explicit or partial
1110 specialization. */
1111 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
1112 && !DECL_MEMBER_TEMPLATE_P (tmpl)
1113 && !DECL_CONV_FN_P (tmpl)
1114 /* It is possible to have a template that is not a member
1115 template and is not a member of a template class:
1116
1117 template <typename T>
1118 struct S { friend A::f(); };
1119
1120 Here, the friend function is a template, but the context does
1121 not have template information. The optimized lookup relies
1122 on having ARGS be the template arguments for both the class
1123 and the function template. */
1124 && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
1125 }
1126
1127 /* Make sure ARGS doesn't use any inappropriate typedefs; we should have
1128 gone through coerce_template_parms by now. */
1129
1130 static void
1131 verify_unstripped_args (tree args)
1132 {
1133 ++processing_template_decl;
1134 if (!any_dependent_template_arguments_p (args))
1135 {
1136 tree inner = INNERMOST_TEMPLATE_ARGS (args);
1137 for (int i = 0; i < TREE_VEC_LENGTH (inner); ++i)
1138 {
1139 tree arg = TREE_VEC_ELT (inner, i);
1140 if (TREE_CODE (arg) == TEMPLATE_DECL)
1141 /* OK */;
1142 else if (TYPE_P (arg))
1143 gcc_assert (strip_typedefs (arg, NULL) == arg);
1144 else if (strip_typedefs (TREE_TYPE (arg), NULL) != TREE_TYPE (arg))
1145 /* Allow typedefs on the type of a non-type argument, since a
1146 parameter can have them. */;
1147 else
1148 gcc_assert (strip_typedefs_expr (arg, NULL) == arg);
1149 }
1150 }
1151 --processing_template_decl;
1152 }
1153
1154 /* Retrieve the specialization (in the sense of [temp.spec] - a
1155 specialization is either an instantiation or an explicit
1156 specialization) of TMPL for the given template ARGS. If there is
1157 no such specialization, return NULL_TREE. The ARGS are a vector of
1158 arguments, or a vector of vectors of arguments, in the case of
1159 templates with more than one level of parameters.
1160
1161 If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
1162 then we search for a partial specialization matching ARGS. This
1163 parameter is ignored if TMPL is not a class template.
1164
1165 We can also look up a FIELD_DECL, if it is a lambda capture pack; the
1166 result is a NONTYPE_ARGUMENT_PACK. */
1167
1168 static tree
1169 retrieve_specialization (tree tmpl, tree args, hashval_t hash)
1170 {
1171 if (tmpl == NULL_TREE)
1172 return NULL_TREE;
1173
1174 if (args == error_mark_node)
1175 return NULL_TREE;
1176
1177 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL
1178 || TREE_CODE (tmpl) == FIELD_DECL);
1179
1180 /* There should be as many levels of arguments as there are
1181 levels of parameters. */
1182 gcc_assert (TMPL_ARGS_DEPTH (args)
1183 == (TREE_CODE (tmpl) == TEMPLATE_DECL
1184 ? TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl))
1185 : template_class_depth (DECL_CONTEXT (tmpl))));
1186
1187 if (flag_checking)
1188 verify_unstripped_args (args);
1189
1190 if (optimize_specialization_lookup_p (tmpl))
1191 {
1192 tree class_template;
1193 tree class_specialization;
1194 vec<tree, va_gc> *methods;
1195 tree fns;
1196 int idx;
1197
1198 /* The template arguments actually apply to the containing
1199 class. Find the class specialization with those
1200 arguments. */
1201 class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
1202 class_specialization
1203 = retrieve_specialization (class_template, args, 0);
1204 if (!class_specialization)
1205 return NULL_TREE;
1206 /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
1207 for the specialization. */
1208 idx = class_method_index_for_fn (class_specialization, tmpl);
1209 if (idx == -1)
1210 return NULL_TREE;
1211 /* Iterate through the methods with the indicated name, looking
1212 for the one that has an instance of TMPL. */
1213 methods = CLASSTYPE_METHOD_VEC (class_specialization);
1214 for (fns = (*methods)[idx]; fns; fns = OVL_NEXT (fns))
1215 {
1216 tree fn = OVL_CURRENT (fns);
1217 if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl
1218 /* using-declarations can add base methods to the method vec,
1219 and we don't want those here. */
1220 && DECL_CONTEXT (fn) == class_specialization)
1221 return fn;
1222 }
1223 return NULL_TREE;
1224 }
1225 else
1226 {
1227 spec_entry *found;
1228 spec_entry elt;
1229 hash_table<spec_hasher> *specializations;
1230
1231 elt.tmpl = tmpl;
1232 elt.args = args;
1233 elt.spec = NULL_TREE;
1234
1235 if (DECL_CLASS_TEMPLATE_P (tmpl))
1236 specializations = type_specializations;
1237 else
1238 specializations = decl_specializations;
1239
1240 if (hash == 0)
1241 hash = spec_hasher::hash (&elt);
1242 found = specializations->find_with_hash (&elt, hash);
1243 if (found)
1244 return found->spec;
1245 }
1246
1247 return NULL_TREE;
1248 }
1249
1250 /* Like retrieve_specialization, but for local declarations. */
1251
1252 tree
1253 retrieve_local_specialization (tree tmpl)
1254 {
1255 if (local_specializations == NULL)
1256 return NULL_TREE;
1257
1258 tree *slot = local_specializations->get (tmpl);
1259 return slot ? *slot : NULL_TREE;
1260 }
1261
1262 /* Returns nonzero iff DECL is a specialization of TMPL. */
1263
1264 int
1265 is_specialization_of (tree decl, tree tmpl)
1266 {
1267 tree t;
1268
1269 if (TREE_CODE (decl) == FUNCTION_DECL)
1270 {
1271 for (t = decl;
1272 t != NULL_TREE;
1273 t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1274 if (t == tmpl)
1275 return 1;
1276 }
1277 else
1278 {
1279 gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1280
1281 for (t = TREE_TYPE (decl);
1282 t != NULL_TREE;
1283 t = CLASSTYPE_USE_TEMPLATE (t)
1284 ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1285 if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1286 return 1;
1287 }
1288
1289 return 0;
1290 }
1291
1292 /* Returns nonzero iff DECL is a specialization of friend declaration
1293 FRIEND_DECL according to [temp.friend]. */
1294
1295 bool
1296 is_specialization_of_friend (tree decl, tree friend_decl)
1297 {
1298 bool need_template = true;
1299 int template_depth;
1300
1301 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1302 || TREE_CODE (decl) == TYPE_DECL);
1303
1304 /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1305 of a template class, we want to check if DECL is a specialization
1306 if this. */
1307 if (TREE_CODE (friend_decl) == FUNCTION_DECL
1308 && DECL_TEMPLATE_INFO (friend_decl)
1309 && !DECL_USE_TEMPLATE (friend_decl))
1310 {
1311 /* We want a TEMPLATE_DECL for `is_specialization_of'. */
1312 friend_decl = DECL_TI_TEMPLATE (friend_decl);
1313 need_template = false;
1314 }
1315 else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1316 && !PRIMARY_TEMPLATE_P (friend_decl))
1317 need_template = false;
1318
1319 /* There is nothing to do if this is not a template friend. */
1320 if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1321 return false;
1322
1323 if (is_specialization_of (decl, friend_decl))
1324 return true;
1325
1326 /* [temp.friend/6]
1327 A member of a class template may be declared to be a friend of a
1328 non-template class. In this case, the corresponding member of
1329 every specialization of the class template is a friend of the
1330 class granting friendship.
1331
1332 For example, given a template friend declaration
1333
1334 template <class T> friend void A<T>::f();
1335
1336 the member function below is considered a friend
1337
1338 template <> struct A<int> {
1339 void f();
1340 };
1341
1342 For this type of template friend, TEMPLATE_DEPTH below will be
1343 nonzero. To determine if DECL is a friend of FRIEND, we first
1344 check if the enclosing class is a specialization of another. */
1345
1346 template_depth = template_class_depth (CP_DECL_CONTEXT (friend_decl));
1347 if (template_depth
1348 && DECL_CLASS_SCOPE_P (decl)
1349 && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1350 CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1351 {
1352 /* Next, we check the members themselves. In order to handle
1353 a few tricky cases, such as when FRIEND_DECL's are
1354
1355 template <class T> friend void A<T>::g(T t);
1356 template <class T> template <T t> friend void A<T>::h();
1357
1358 and DECL's are
1359
1360 void A<int>::g(int);
1361 template <int> void A<int>::h();
1362
1363 we need to figure out ARGS, the template arguments from
1364 the context of DECL. This is required for template substitution
1365 of `T' in the function parameter of `g' and template parameter
1366 of `h' in the above examples. Here ARGS corresponds to `int'. */
1367
1368 tree context = DECL_CONTEXT (decl);
1369 tree args = NULL_TREE;
1370 int current_depth = 0;
1371
1372 while (current_depth < template_depth)
1373 {
1374 if (CLASSTYPE_TEMPLATE_INFO (context))
1375 {
1376 if (current_depth == 0)
1377 args = TYPE_TI_ARGS (context);
1378 else
1379 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1380 current_depth++;
1381 }
1382 context = TYPE_CONTEXT (context);
1383 }
1384
1385 if (TREE_CODE (decl) == FUNCTION_DECL)
1386 {
1387 bool is_template;
1388 tree friend_type;
1389 tree decl_type;
1390 tree friend_args_type;
1391 tree decl_args_type;
1392
1393 /* Make sure that both DECL and FRIEND_DECL are templates or
1394 non-templates. */
1395 is_template = DECL_TEMPLATE_INFO (decl)
1396 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1397 if (need_template ^ is_template)
1398 return false;
1399 else if (is_template)
1400 {
1401 /* If both are templates, check template parameter list. */
1402 tree friend_parms
1403 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1404 args, tf_none);
1405 if (!comp_template_parms
1406 (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1407 friend_parms))
1408 return false;
1409
1410 decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1411 }
1412 else
1413 decl_type = TREE_TYPE (decl);
1414
1415 friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1416 tf_none, NULL_TREE);
1417 if (friend_type == error_mark_node)
1418 return false;
1419
1420 /* Check if return types match. */
1421 if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1422 return false;
1423
1424 /* Check if function parameter types match, ignoring the
1425 `this' parameter. */
1426 friend_args_type = TYPE_ARG_TYPES (friend_type);
1427 decl_args_type = TYPE_ARG_TYPES (decl_type);
1428 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1429 friend_args_type = TREE_CHAIN (friend_args_type);
1430 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1431 decl_args_type = TREE_CHAIN (decl_args_type);
1432
1433 return compparms (decl_args_type, friend_args_type);
1434 }
1435 else
1436 {
1437 /* DECL is a TYPE_DECL */
1438 bool is_template;
1439 tree decl_type = TREE_TYPE (decl);
1440
1441 /* Make sure that both DECL and FRIEND_DECL are templates or
1442 non-templates. */
1443 is_template
1444 = CLASSTYPE_TEMPLATE_INFO (decl_type)
1445 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1446
1447 if (need_template ^ is_template)
1448 return false;
1449 else if (is_template)
1450 {
1451 tree friend_parms;
1452 /* If both are templates, check the name of the two
1453 TEMPLATE_DECL's first because is_friend didn't. */
1454 if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1455 != DECL_NAME (friend_decl))
1456 return false;
1457
1458 /* Now check template parameter list. */
1459 friend_parms
1460 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1461 args, tf_none);
1462 return comp_template_parms
1463 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1464 friend_parms);
1465 }
1466 else
1467 return (DECL_NAME (decl)
1468 == DECL_NAME (friend_decl));
1469 }
1470 }
1471 return false;
1472 }
1473
1474 /* Register the specialization SPEC as a specialization of TMPL with
1475 the indicated ARGS. IS_FRIEND indicates whether the specialization
1476 is actually just a friend declaration. Returns SPEC, or an
1477 equivalent prior declaration, if available.
1478
1479 We also store instantiations of field packs in the hash table, even
1480 though they are not themselves templates, to make lookup easier. */
1481
1482 static tree
1483 register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
1484 hashval_t hash)
1485 {
1486 tree fn;
1487 spec_entry **slot = NULL;
1488 spec_entry elt;
1489
1490 gcc_assert ((TREE_CODE (tmpl) == TEMPLATE_DECL && DECL_P (spec))
1491 || (TREE_CODE (tmpl) == FIELD_DECL
1492 && TREE_CODE (spec) == NONTYPE_ARGUMENT_PACK));
1493
1494 if (TREE_CODE (spec) == FUNCTION_DECL
1495 && uses_template_parms (DECL_TI_ARGS (spec)))
1496 /* This is the FUNCTION_DECL for a partial instantiation. Don't
1497 register it; we want the corresponding TEMPLATE_DECL instead.
1498 We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1499 the more obvious `uses_template_parms (spec)' to avoid problems
1500 with default function arguments. In particular, given
1501 something like this:
1502
1503 template <class T> void f(T t1, T t = T())
1504
1505 the default argument expression is not substituted for in an
1506 instantiation unless and until it is actually needed. */
1507 return spec;
1508
1509 if (optimize_specialization_lookup_p (tmpl))
1510 /* We don't put these specializations in the hash table, but we might
1511 want to give an error about a mismatch. */
1512 fn = retrieve_specialization (tmpl, args, 0);
1513 else
1514 {
1515 elt.tmpl = tmpl;
1516 elt.args = args;
1517 elt.spec = spec;
1518
1519 if (hash == 0)
1520 hash = spec_hasher::hash (&elt);
1521
1522 slot =
1523 decl_specializations->find_slot_with_hash (&elt, hash, INSERT);
1524 if (*slot)
1525 fn = ((spec_entry *) *slot)->spec;
1526 else
1527 fn = NULL_TREE;
1528 }
1529
1530 /* We can sometimes try to re-register a specialization that we've
1531 already got. In particular, regenerate_decl_from_template calls
1532 duplicate_decls which will update the specialization list. But,
1533 we'll still get called again here anyhow. It's more convenient
1534 to simply allow this than to try to prevent it. */
1535 if (fn == spec)
1536 return spec;
1537 else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1538 {
1539 if (DECL_TEMPLATE_INSTANTIATION (fn))
1540 {
1541 if (DECL_ODR_USED (fn)
1542 || DECL_EXPLICIT_INSTANTIATION (fn))
1543 {
1544 error ("specialization of %qD after instantiation",
1545 fn);
1546 return error_mark_node;
1547 }
1548 else
1549 {
1550 tree clone;
1551 /* This situation should occur only if the first
1552 specialization is an implicit instantiation, the
1553 second is an explicit specialization, and the
1554 implicit instantiation has not yet been used. That
1555 situation can occur if we have implicitly
1556 instantiated a member function and then specialized
1557 it later.
1558
1559 We can also wind up here if a friend declaration that
1560 looked like an instantiation turns out to be a
1561 specialization:
1562
1563 template <class T> void foo(T);
1564 class S { friend void foo<>(int) };
1565 template <> void foo(int);
1566
1567 We transform the existing DECL in place so that any
1568 pointers to it become pointers to the updated
1569 declaration.
1570
1571 If there was a definition for the template, but not
1572 for the specialization, we want this to look as if
1573 there were no definition, and vice versa. */
1574 DECL_INITIAL (fn) = NULL_TREE;
1575 duplicate_decls (spec, fn, is_friend);
1576 /* The call to duplicate_decls will have applied
1577 [temp.expl.spec]:
1578
1579 An explicit specialization of a function template
1580 is inline only if it is explicitly declared to be,
1581 and independently of whether its function template
1582 is.
1583
1584 to the primary function; now copy the inline bits to
1585 the various clones. */
1586 FOR_EACH_CLONE (clone, fn)
1587 {
1588 DECL_DECLARED_INLINE_P (clone)
1589 = DECL_DECLARED_INLINE_P (fn);
1590 DECL_SOURCE_LOCATION (clone)
1591 = DECL_SOURCE_LOCATION (fn);
1592 DECL_DELETED_FN (clone)
1593 = DECL_DELETED_FN (fn);
1594 }
1595 check_specialization_namespace (tmpl);
1596
1597 return fn;
1598 }
1599 }
1600 else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1601 {
1602 if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1603 /* Dup decl failed, but this is a new definition. Set the
1604 line number so any errors match this new
1605 definition. */
1606 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1607
1608 return fn;
1609 }
1610 }
1611 else if (fn)
1612 return duplicate_decls (spec, fn, is_friend);
1613
1614 /* A specialization must be declared in the same namespace as the
1615 template it is specializing. */
1616 if (DECL_P (spec) && DECL_TEMPLATE_SPECIALIZATION (spec)
1617 && !check_specialization_namespace (tmpl))
1618 DECL_CONTEXT (spec) = DECL_CONTEXT (tmpl);
1619
1620 if (slot != NULL /* !optimize_specialization_lookup_p (tmpl) */)
1621 {
1622 spec_entry *entry = ggc_alloc<spec_entry> ();
1623 gcc_assert (tmpl && args && spec);
1624 *entry = elt;
1625 *slot = entry;
1626 if ((TREE_CODE (spec) == FUNCTION_DECL && DECL_NAMESPACE_SCOPE_P (spec)
1627 && PRIMARY_TEMPLATE_P (tmpl)
1628 && DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (tmpl)) == NULL_TREE)
1629 || variable_template_p (tmpl))
1630 /* If TMPL is a forward declaration of a template function, keep a list
1631 of all specializations in case we need to reassign them to a friend
1632 template later in tsubst_friend_function.
1633
1634 Also keep a list of all variable template instantiations so that
1635 process_partial_specialization can check whether a later partial
1636 specialization would have used it. */
1637 DECL_TEMPLATE_INSTANTIATIONS (tmpl)
1638 = tree_cons (args, spec, DECL_TEMPLATE_INSTANTIATIONS (tmpl));
1639 }
1640
1641 return spec;
1642 }
1643
1644 /* Returns true iff two spec_entry nodes are equivalent. */
1645
1646 int comparing_specializations;
1647
1648 bool
1649 spec_hasher::equal (spec_entry *e1, spec_entry *e2)
1650 {
1651 int equal;
1652
1653 ++comparing_specializations;
1654 equal = (e1->tmpl == e2->tmpl
1655 && comp_template_args (e1->args, e2->args));
1656 if (equal && flag_concepts
1657 /* tmpl could be a FIELD_DECL for a capture pack. */
1658 && TREE_CODE (e1->tmpl) == TEMPLATE_DECL
1659 && VAR_P (DECL_TEMPLATE_RESULT (e1->tmpl))
1660 && uses_template_parms (e1->args))
1661 {
1662 /* Partial specializations of a variable template can be distinguished by
1663 constraints. */
1664 tree c1 = e1->spec ? get_constraints (e1->spec) : NULL_TREE;
1665 tree c2 = e2->spec ? get_constraints (e2->spec) : NULL_TREE;
1666 equal = equivalent_constraints (c1, c2);
1667 }
1668 --comparing_specializations;
1669
1670 return equal;
1671 }
1672
1673 /* Returns a hash for a template TMPL and template arguments ARGS. */
1674
1675 static hashval_t
1676 hash_tmpl_and_args (tree tmpl, tree args)
1677 {
1678 hashval_t val = iterative_hash_object (DECL_UID (tmpl), 0);
1679 return iterative_hash_template_arg (args, val);
1680 }
1681
1682 /* Returns a hash for a spec_entry node based on the TMPL and ARGS members,
1683 ignoring SPEC. */
1684
1685 hashval_t
1686 spec_hasher::hash (spec_entry *e)
1687 {
1688 return hash_tmpl_and_args (e->tmpl, e->args);
1689 }
1690
1691 /* Recursively calculate a hash value for a template argument ARG, for use
1692 in the hash tables of template specializations. */
1693
1694 hashval_t
1695 iterative_hash_template_arg (tree arg, hashval_t val)
1696 {
1697 unsigned HOST_WIDE_INT i;
1698 enum tree_code code;
1699 char tclass;
1700
1701 if (arg == NULL_TREE)
1702 return iterative_hash_object (arg, val);
1703
1704 if (!TYPE_P (arg))
1705 STRIP_NOPS (arg);
1706
1707 if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
1708 /* We can get one of these when re-hashing a previous entry in the middle
1709 of substituting into a pack expansion. Just look through it. */
1710 arg = ARGUMENT_PACK_SELECT_FROM_PACK (arg);
1711
1712 code = TREE_CODE (arg);
1713 tclass = TREE_CODE_CLASS (code);
1714
1715 val = iterative_hash_object (code, val);
1716
1717 switch (code)
1718 {
1719 case ERROR_MARK:
1720 return val;
1721
1722 case IDENTIFIER_NODE:
1723 return iterative_hash_object (IDENTIFIER_HASH_VALUE (arg), val);
1724
1725 case TREE_VEC:
1726 {
1727 int i, len = TREE_VEC_LENGTH (arg);
1728 for (i = 0; i < len; ++i)
1729 val = iterative_hash_template_arg (TREE_VEC_ELT (arg, i), val);
1730 return val;
1731 }
1732
1733 case TYPE_PACK_EXPANSION:
1734 case EXPR_PACK_EXPANSION:
1735 val = iterative_hash_template_arg (PACK_EXPANSION_PATTERN (arg), val);
1736 return iterative_hash_template_arg (PACK_EXPANSION_EXTRA_ARGS (arg), val);
1737
1738 case TYPE_ARGUMENT_PACK:
1739 case NONTYPE_ARGUMENT_PACK:
1740 return iterative_hash_template_arg (ARGUMENT_PACK_ARGS (arg), val);
1741
1742 case TREE_LIST:
1743 for (; arg; arg = TREE_CHAIN (arg))
1744 val = iterative_hash_template_arg (TREE_VALUE (arg), val);
1745 return val;
1746
1747 case OVERLOAD:
1748 for (; arg; arg = OVL_NEXT (arg))
1749 val = iterative_hash_template_arg (OVL_CURRENT (arg), val);
1750 return val;
1751
1752 case CONSTRUCTOR:
1753 {
1754 tree field, value;
1755 iterative_hash_template_arg (TREE_TYPE (arg), val);
1756 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (arg), i, field, value)
1757 {
1758 val = iterative_hash_template_arg (field, val);
1759 val = iterative_hash_template_arg (value, val);
1760 }
1761 return val;
1762 }
1763
1764 case PARM_DECL:
1765 if (!DECL_ARTIFICIAL (arg))
1766 {
1767 val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
1768 val = iterative_hash_object (DECL_PARM_LEVEL (arg), val);
1769 }
1770 return iterative_hash_template_arg (TREE_TYPE (arg), val);
1771
1772 case TARGET_EXPR:
1773 return iterative_hash_template_arg (TARGET_EXPR_INITIAL (arg), val);
1774
1775 case PTRMEM_CST:
1776 val = iterative_hash_template_arg (PTRMEM_CST_CLASS (arg), val);
1777 return iterative_hash_template_arg (PTRMEM_CST_MEMBER (arg), val);
1778
1779 case TEMPLATE_PARM_INDEX:
1780 val = iterative_hash_template_arg
1781 (TREE_TYPE (TEMPLATE_PARM_DECL (arg)), val);
1782 val = iterative_hash_object (TEMPLATE_PARM_LEVEL (arg), val);
1783 return iterative_hash_object (TEMPLATE_PARM_IDX (arg), val);
1784
1785 case TRAIT_EXPR:
1786 val = iterative_hash_object (TRAIT_EXPR_KIND (arg), val);
1787 val = iterative_hash_template_arg (TRAIT_EXPR_TYPE1 (arg), val);
1788 return iterative_hash_template_arg (TRAIT_EXPR_TYPE2 (arg), val);
1789
1790 case BASELINK:
1791 val = iterative_hash_template_arg (BINFO_TYPE (BASELINK_BINFO (arg)),
1792 val);
1793 return iterative_hash_template_arg (DECL_NAME (get_first_fn (arg)),
1794 val);
1795
1796 case MODOP_EXPR:
1797 val = iterative_hash_template_arg (TREE_OPERAND (arg, 0), val);
1798 code = TREE_CODE (TREE_OPERAND (arg, 1));
1799 val = iterative_hash_object (code, val);
1800 return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
1801
1802 case LAMBDA_EXPR:
1803 /* A lambda can't appear in a template arg, but don't crash on
1804 erroneous input. */
1805 gcc_assert (seen_error ());
1806 return val;
1807
1808 case CAST_EXPR:
1809 case IMPLICIT_CONV_EXPR:
1810 case STATIC_CAST_EXPR:
1811 case REINTERPRET_CAST_EXPR:
1812 case CONST_CAST_EXPR:
1813 case DYNAMIC_CAST_EXPR:
1814 case NEW_EXPR:
1815 val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1816 /* Now hash operands as usual. */
1817 break;
1818
1819 default:
1820 break;
1821 }
1822
1823 switch (tclass)
1824 {
1825 case tcc_type:
1826 if (alias_template_specialization_p (arg))
1827 {
1828 // We want an alias specialization that survived strip_typedefs
1829 // to hash differently from its TYPE_CANONICAL, to avoid hash
1830 // collisions that compare as different in template_args_equal.
1831 // These could be dependent specializations that strip_typedefs
1832 // left alone, or untouched specializations because
1833 // coerce_template_parms returns the unconverted template
1834 // arguments if it sees incomplete argument packs.
1835 tree ti = TYPE_TEMPLATE_INFO (arg);
1836 return hash_tmpl_and_args (TI_TEMPLATE (ti), TI_ARGS (ti));
1837 }
1838 if (TYPE_CANONICAL (arg))
1839 return iterative_hash_object (TYPE_HASH (TYPE_CANONICAL (arg)),
1840 val);
1841 else if (TREE_CODE (arg) == DECLTYPE_TYPE)
1842 return iterative_hash_template_arg (DECLTYPE_TYPE_EXPR (arg), val);
1843 /* Otherwise just compare the types during lookup. */
1844 return val;
1845
1846 case tcc_declaration:
1847 case tcc_constant:
1848 return iterative_hash_expr (arg, val);
1849
1850 default:
1851 gcc_assert (IS_EXPR_CODE_CLASS (tclass));
1852 {
1853 unsigned n = cp_tree_operand_length (arg);
1854 for (i = 0; i < n; ++i)
1855 val = iterative_hash_template_arg (TREE_OPERAND (arg, i), val);
1856 return val;
1857 }
1858 }
1859 gcc_unreachable ();
1860 return 0;
1861 }
1862
1863 /* Unregister the specialization SPEC as a specialization of TMPL.
1864 Replace it with NEW_SPEC, if NEW_SPEC is non-NULL. Returns true
1865 if the SPEC was listed as a specialization of TMPL.
1866
1867 Note that SPEC has been ggc_freed, so we can't look inside it. */
1868
1869 bool
1870 reregister_specialization (tree spec, tree tinfo, tree new_spec)
1871 {
1872 spec_entry *entry;
1873 spec_entry elt;
1874
1875 elt.tmpl = most_general_template (TI_TEMPLATE (tinfo));
1876 elt.args = TI_ARGS (tinfo);
1877 elt.spec = NULL_TREE;
1878
1879 entry = decl_specializations->find (&elt);
1880 if (entry != NULL)
1881 {
1882 gcc_assert (entry->spec == spec || entry->spec == new_spec);
1883 gcc_assert (new_spec != NULL_TREE);
1884 entry->spec = new_spec;
1885 return 1;
1886 }
1887
1888 return 0;
1889 }
1890
1891 /* Like register_specialization, but for local declarations. We are
1892 registering SPEC, an instantiation of TMPL. */
1893
1894 void
1895 register_local_specialization (tree spec, tree tmpl)
1896 {
1897 local_specializations->put (tmpl, spec);
1898 }
1899
1900 /* TYPE is a class type. Returns true if TYPE is an explicitly
1901 specialized class. */
1902
1903 bool
1904 explicit_class_specialization_p (tree type)
1905 {
1906 if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1907 return false;
1908 return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1909 }
1910
1911 /* Print the list of functions at FNS, going through all the overloads
1912 for each element of the list. Alternatively, FNS can not be a
1913 TREE_LIST, in which case it will be printed together with all the
1914 overloads.
1915
1916 MORE and *STR should respectively be FALSE and NULL when the function
1917 is called from the outside. They are used internally on recursive
1918 calls. print_candidates manages the two parameters and leaves NULL
1919 in *STR when it ends. */
1920
1921 static void
1922 print_candidates_1 (tree fns, bool more, const char **str)
1923 {
1924 tree fn, fn2;
1925 char *spaces = NULL;
1926
1927 for (fn = fns; fn; fn = OVL_NEXT (fn))
1928 if (TREE_CODE (fn) == TREE_LIST)
1929 {
1930 for (fn2 = fn; fn2 != NULL_TREE; fn2 = TREE_CHAIN (fn2))
1931 print_candidates_1 (TREE_VALUE (fn2),
1932 TREE_CHAIN (fn2) || more, str);
1933 }
1934 else
1935 {
1936 tree cand = OVL_CURRENT (fn);
1937 if (!*str)
1938 {
1939 /* Pick the prefix string. */
1940 if (!more && !OVL_NEXT (fns))
1941 {
1942 inform (DECL_SOURCE_LOCATION (cand),
1943 "candidate is: %#D", cand);
1944 continue;
1945 }
1946
1947 *str = _("candidates are:");
1948 spaces = get_spaces (*str);
1949 }
1950 inform (DECL_SOURCE_LOCATION (cand), "%s %#D", *str, cand);
1951 *str = spaces ? spaces : *str;
1952 }
1953
1954 if (!more)
1955 {
1956 free (spaces);
1957 *str = NULL;
1958 }
1959 }
1960
1961 /* Print the list of candidate FNS in an error message. FNS can also
1962 be a TREE_LIST of non-functions in the case of an ambiguous lookup. */
1963
1964 void
1965 print_candidates (tree fns)
1966 {
1967 const char *str = NULL;
1968 print_candidates_1 (fns, false, &str);
1969 gcc_assert (str == NULL);
1970 }
1971
1972 /* Get a (possibly) constrained template declaration for the
1973 purpose of ordering candidates. */
1974 static tree
1975 get_template_for_ordering (tree list)
1976 {
1977 gcc_assert (TREE_CODE (list) == TREE_LIST);
1978 tree f = TREE_VALUE (list);
1979 if (tree ti = DECL_TEMPLATE_INFO (f))
1980 return TI_TEMPLATE (ti);
1981 return f;
1982 }
1983
1984 /* Among candidates having the same signature, return the
1985 most constrained or NULL_TREE if there is no best candidate.
1986 If the signatures of candidates vary (e.g., template
1987 specialization vs. member function), then there can be no
1988 most constrained.
1989
1990 Note that we don't compare constraints on the functions
1991 themselves, but rather those of their templates. */
1992 static tree
1993 most_constrained_function (tree candidates)
1994 {
1995 // Try to find the best candidate in a first pass.
1996 tree champ = candidates;
1997 for (tree c = TREE_CHAIN (champ); c; c = TREE_CHAIN (c))
1998 {
1999 int winner = more_constrained (get_template_for_ordering (champ),
2000 get_template_for_ordering (c));
2001 if (winner == -1)
2002 champ = c; // The candidate is more constrained
2003 else if (winner == 0)
2004 return NULL_TREE; // Neither is more constrained
2005 }
2006
2007 // Verify that the champ is better than previous candidates.
2008 for (tree c = candidates; c != champ; c = TREE_CHAIN (c)) {
2009 if (!more_constrained (get_template_for_ordering (champ),
2010 get_template_for_ordering (c)))
2011 return NULL_TREE;
2012 }
2013
2014 return champ;
2015 }
2016
2017
2018 /* Returns the template (one of the functions given by TEMPLATE_ID)
2019 which can be specialized to match the indicated DECL with the
2020 explicit template args given in TEMPLATE_ID. The DECL may be
2021 NULL_TREE if none is available. In that case, the functions in
2022 TEMPLATE_ID are non-members.
2023
2024 If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
2025 specialization of a member template.
2026
2027 The TEMPLATE_COUNT is the number of references to qualifying
2028 template classes that appeared in the name of the function. See
2029 check_explicit_specialization for a more accurate description.
2030
2031 TSK indicates what kind of template declaration (if any) is being
2032 declared. TSK_TEMPLATE indicates that the declaration given by
2033 DECL, though a FUNCTION_DECL, has template parameters, and is
2034 therefore a template function.
2035
2036 The template args (those explicitly specified and those deduced)
2037 are output in a newly created vector *TARGS_OUT.
2038
2039 If it is impossible to determine the result, an error message is
2040 issued. The error_mark_node is returned to indicate failure. */
2041
2042 static tree
2043 determine_specialization (tree template_id,
2044 tree decl,
2045 tree* targs_out,
2046 int need_member_template,
2047 int template_count,
2048 tmpl_spec_kind tsk)
2049 {
2050 tree fns;
2051 tree targs;
2052 tree explicit_targs;
2053 tree candidates = NULL_TREE;
2054
2055 /* A TREE_LIST of templates of which DECL may be a specialization.
2056 The TREE_VALUE of each node is a TEMPLATE_DECL. The
2057 corresponding TREE_PURPOSE is the set of template arguments that,
2058 when used to instantiate the template, would produce a function
2059 with the signature of DECL. */
2060 tree templates = NULL_TREE;
2061 int header_count;
2062 cp_binding_level *b;
2063
2064 *targs_out = NULL_TREE;
2065
2066 if (template_id == error_mark_node || decl == error_mark_node)
2067 return error_mark_node;
2068
2069 /* We shouldn't be specializing a member template of an
2070 unspecialized class template; we already gave an error in
2071 check_specialization_scope, now avoid crashing. */
2072 if (template_count && DECL_CLASS_SCOPE_P (decl)
2073 && template_class_depth (DECL_CONTEXT (decl)) > 0)
2074 {
2075 gcc_assert (errorcount);
2076 return error_mark_node;
2077 }
2078
2079 fns = TREE_OPERAND (template_id, 0);
2080 explicit_targs = TREE_OPERAND (template_id, 1);
2081
2082 if (fns == error_mark_node)
2083 return error_mark_node;
2084
2085 /* Check for baselinks. */
2086 if (BASELINK_P (fns))
2087 fns = BASELINK_FUNCTIONS (fns);
2088
2089 if (TREE_CODE (decl) == FUNCTION_DECL && !is_overloaded_fn (fns))
2090 {
2091 error ("%qD is not a function template", fns);
2092 return error_mark_node;
2093 }
2094 else if (VAR_P (decl) && !variable_template_p (fns))
2095 {
2096 error ("%qD is not a variable template", fns);
2097 return error_mark_node;
2098 }
2099
2100 /* Count the number of template headers specified for this
2101 specialization. */
2102 header_count = 0;
2103 for (b = current_binding_level;
2104 b->kind == sk_template_parms;
2105 b = b->level_chain)
2106 ++header_count;
2107
2108 tree orig_fns = fns;
2109
2110 if (variable_template_p (fns))
2111 {
2112 tree parms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (fns));
2113 targs = coerce_template_parms (parms, explicit_targs, fns,
2114 tf_warning_or_error,
2115 /*req_all*/true, /*use_defarg*/true);
2116 if (targs != error_mark_node)
2117 templates = tree_cons (targs, fns, templates);
2118 }
2119 else for (; fns; fns = OVL_NEXT (fns))
2120 {
2121 tree fn = OVL_CURRENT (fns);
2122
2123 if (TREE_CODE (fn) == TEMPLATE_DECL)
2124 {
2125 tree decl_arg_types;
2126 tree fn_arg_types;
2127 tree insttype;
2128
2129 /* In case of explicit specialization, we need to check if
2130 the number of template headers appearing in the specialization
2131 is correct. This is usually done in check_explicit_specialization,
2132 but the check done there cannot be exhaustive when specializing
2133 member functions. Consider the following code:
2134
2135 template <> void A<int>::f(int);
2136 template <> template <> void A<int>::f(int);
2137
2138 Assuming that A<int> is not itself an explicit specialization
2139 already, the first line specializes "f" which is a non-template
2140 member function, whilst the second line specializes "f" which
2141 is a template member function. So both lines are syntactically
2142 correct, and check_explicit_specialization does not reject
2143 them.
2144
2145 Here, we can do better, as we are matching the specialization
2146 against the declarations. We count the number of template
2147 headers, and we check if they match TEMPLATE_COUNT + 1
2148 (TEMPLATE_COUNT is the number of qualifying template classes,
2149 plus there must be another header for the member template
2150 itself).
2151
2152 Notice that if header_count is zero, this is not a
2153 specialization but rather a template instantiation, so there
2154 is no check we can perform here. */
2155 if (header_count && header_count != template_count + 1)
2156 continue;
2157
2158 /* Check that the number of template arguments at the
2159 innermost level for DECL is the same as for FN. */
2160 if (current_binding_level->kind == sk_template_parms
2161 && !current_binding_level->explicit_spec_p
2162 && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
2163 != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
2164 (current_template_parms))))
2165 continue;
2166
2167 /* DECL might be a specialization of FN. */
2168 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
2169 fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
2170
2171 /* For a non-static member function, we need to make sure
2172 that the const qualification is the same. Since
2173 get_bindings does not try to merge the "this" parameter,
2174 we must do the comparison explicitly. */
2175 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
2176 && !same_type_p (TREE_VALUE (fn_arg_types),
2177 TREE_VALUE (decl_arg_types)))
2178 continue;
2179
2180 /* Skip the "this" parameter and, for constructors of
2181 classes with virtual bases, the VTT parameter. A
2182 full specialization of a constructor will have a VTT
2183 parameter, but a template never will. */
2184 decl_arg_types
2185 = skip_artificial_parms_for (decl, decl_arg_types);
2186 fn_arg_types
2187 = skip_artificial_parms_for (fn, fn_arg_types);
2188
2189 /* Function templates cannot be specializations; there are
2190 no partial specializations of functions. Therefore, if
2191 the type of DECL does not match FN, there is no
2192 match.
2193
2194 Note that it should never be the case that we have both
2195 candidates added here, and for regular member functions
2196 below. */
2197 if (tsk == tsk_template)
2198 {
2199 if (compparms (fn_arg_types, decl_arg_types))
2200 candidates = tree_cons (NULL_TREE, fn, candidates);
2201 continue;
2202 }
2203
2204 /* See whether this function might be a specialization of this
2205 template. Suppress access control because we might be trying
2206 to make this specialization a friend, and we have already done
2207 access control for the declaration of the specialization. */
2208 push_deferring_access_checks (dk_no_check);
2209 targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
2210 pop_deferring_access_checks ();
2211
2212 if (!targs)
2213 /* We cannot deduce template arguments that when used to
2214 specialize TMPL will produce DECL. */
2215 continue;
2216
2217 /* Remove, from the set of candidates, all those functions
2218 whose constraints are not satisfied. */
2219 if (flag_concepts && !constraints_satisfied_p (fn, targs))
2220 continue;
2221
2222 // Then, try to form the new function type.
2223 insttype = tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE);
2224 if (insttype == error_mark_node)
2225 continue;
2226 fn_arg_types
2227 = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (insttype));
2228 if (!compparms (fn_arg_types, decl_arg_types))
2229 continue;
2230
2231 /* Save this template, and the arguments deduced. */
2232 templates = tree_cons (targs, fn, templates);
2233 }
2234 else if (need_member_template)
2235 /* FN is an ordinary member function, and we need a
2236 specialization of a member template. */
2237 ;
2238 else if (TREE_CODE (fn) != FUNCTION_DECL)
2239 /* We can get IDENTIFIER_NODEs here in certain erroneous
2240 cases. */
2241 ;
2242 else if (!DECL_FUNCTION_MEMBER_P (fn))
2243 /* This is just an ordinary non-member function. Nothing can
2244 be a specialization of that. */
2245 ;
2246 else if (DECL_ARTIFICIAL (fn))
2247 /* Cannot specialize functions that are created implicitly. */
2248 ;
2249 else
2250 {
2251 tree decl_arg_types;
2252
2253 /* This is an ordinary member function. However, since
2254 we're here, we can assume its enclosing class is a
2255 template class. For example,
2256
2257 template <typename T> struct S { void f(); };
2258 template <> void S<int>::f() {}
2259
2260 Here, S<int>::f is a non-template, but S<int> is a
2261 template class. If FN has the same type as DECL, we
2262 might be in business. */
2263
2264 if (!DECL_TEMPLATE_INFO (fn))
2265 /* Its enclosing class is an explicit specialization
2266 of a template class. This is not a candidate. */
2267 continue;
2268
2269 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
2270 TREE_TYPE (TREE_TYPE (fn))))
2271 /* The return types differ. */
2272 continue;
2273
2274 /* Adjust the type of DECL in case FN is a static member. */
2275 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
2276 if (DECL_STATIC_FUNCTION_P (fn)
2277 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2278 decl_arg_types = TREE_CHAIN (decl_arg_types);
2279
2280 if (!compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
2281 decl_arg_types))
2282 continue;
2283
2284 // If the deduced arguments do not satisfy the constraints,
2285 // this is not a candidate.
2286 if (flag_concepts && !constraints_satisfied_p (fn))
2287 continue;
2288
2289 // Add the candidate.
2290 candidates = tree_cons (NULL_TREE, fn, candidates);
2291 }
2292 }
2293
2294 if (templates && TREE_CHAIN (templates))
2295 {
2296 /* We have:
2297
2298 [temp.expl.spec]
2299
2300 It is possible for a specialization with a given function
2301 signature to be instantiated from more than one function
2302 template. In such cases, explicit specification of the
2303 template arguments must be used to uniquely identify the
2304 function template specialization being specialized.
2305
2306 Note that here, there's no suggestion that we're supposed to
2307 determine which of the candidate templates is most
2308 specialized. However, we, also have:
2309
2310 [temp.func.order]
2311
2312 Partial ordering of overloaded function template
2313 declarations is used in the following contexts to select
2314 the function template to which a function template
2315 specialization refers:
2316
2317 -- when an explicit specialization refers to a function
2318 template.
2319
2320 So, we do use the partial ordering rules, at least for now.
2321 This extension can only serve to make invalid programs valid,
2322 so it's safe. And, there is strong anecdotal evidence that
2323 the committee intended the partial ordering rules to apply;
2324 the EDG front end has that behavior, and John Spicer claims
2325 that the committee simply forgot to delete the wording in
2326 [temp.expl.spec]. */
2327 tree tmpl = most_specialized_instantiation (templates);
2328 if (tmpl != error_mark_node)
2329 {
2330 templates = tmpl;
2331 TREE_CHAIN (templates) = NULL_TREE;
2332 }
2333 }
2334
2335 // Concepts allows multiple declarations of member functions
2336 // with the same signature. Like above, we need to rely on
2337 // on the partial ordering of those candidates to determine which
2338 // is the best.
2339 if (flag_concepts && candidates && TREE_CHAIN (candidates))
2340 {
2341 if (tree cand = most_constrained_function (candidates))
2342 {
2343 candidates = cand;
2344 TREE_CHAIN (cand) = NULL_TREE;
2345 }
2346 }
2347
2348 if (templates == NULL_TREE && candidates == NULL_TREE)
2349 {
2350 error ("template-id %qD for %q+D does not match any template "
2351 "declaration", template_id, decl);
2352 if (header_count && header_count != template_count + 1)
2353 inform (input_location, "saw %d %<template<>%>, need %d for "
2354 "specializing a member function template",
2355 header_count, template_count + 1);
2356 else
2357 print_candidates (orig_fns);
2358 return error_mark_node;
2359 }
2360 else if ((templates && TREE_CHAIN (templates))
2361 || (candidates && TREE_CHAIN (candidates))
2362 || (templates && candidates))
2363 {
2364 error ("ambiguous template specialization %qD for %q+D",
2365 template_id, decl);
2366 candidates = chainon (candidates, templates);
2367 print_candidates (candidates);
2368 return error_mark_node;
2369 }
2370
2371 /* We have one, and exactly one, match. */
2372 if (candidates)
2373 {
2374 tree fn = TREE_VALUE (candidates);
2375 *targs_out = copy_node (DECL_TI_ARGS (fn));
2376
2377 // Propagate the candidate's constraints to the declaration.
2378 set_constraints (decl, get_constraints (fn));
2379
2380 /* DECL is a re-declaration or partial instantiation of a template
2381 function. */
2382 if (TREE_CODE (fn) == TEMPLATE_DECL)
2383 return fn;
2384 /* It was a specialization of an ordinary member function in a
2385 template class. */
2386 return DECL_TI_TEMPLATE (fn);
2387 }
2388
2389 /* It was a specialization of a template. */
2390 targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
2391 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
2392 {
2393 *targs_out = copy_node (targs);
2394 SET_TMPL_ARGS_LEVEL (*targs_out,
2395 TMPL_ARGS_DEPTH (*targs_out),
2396 TREE_PURPOSE (templates));
2397 }
2398 else
2399 *targs_out = TREE_PURPOSE (templates);
2400 return TREE_VALUE (templates);
2401 }
2402
2403 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
2404 but with the default argument values filled in from those in the
2405 TMPL_TYPES. */
2406
2407 static tree
2408 copy_default_args_to_explicit_spec_1 (tree spec_types,
2409 tree tmpl_types)
2410 {
2411 tree new_spec_types;
2412
2413 if (!spec_types)
2414 return NULL_TREE;
2415
2416 if (spec_types == void_list_node)
2417 return void_list_node;
2418
2419 /* Substitute into the rest of the list. */
2420 new_spec_types =
2421 copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
2422 TREE_CHAIN (tmpl_types));
2423
2424 /* Add the default argument for this parameter. */
2425 return hash_tree_cons (TREE_PURPOSE (tmpl_types),
2426 TREE_VALUE (spec_types),
2427 new_spec_types);
2428 }
2429
2430 /* DECL is an explicit specialization. Replicate default arguments
2431 from the template it specializes. (That way, code like:
2432
2433 template <class T> void f(T = 3);
2434 template <> void f(double);
2435 void g () { f (); }
2436
2437 works, as required.) An alternative approach would be to look up
2438 the correct default arguments at the call-site, but this approach
2439 is consistent with how implicit instantiations are handled. */
2440
2441 static void
2442 copy_default_args_to_explicit_spec (tree decl)
2443 {
2444 tree tmpl;
2445 tree spec_types;
2446 tree tmpl_types;
2447 tree new_spec_types;
2448 tree old_type;
2449 tree new_type;
2450 tree t;
2451 tree object_type = NULL_TREE;
2452 tree in_charge = NULL_TREE;
2453 tree vtt = NULL_TREE;
2454
2455 /* See if there's anything we need to do. */
2456 tmpl = DECL_TI_TEMPLATE (decl);
2457 tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
2458 for (t = tmpl_types; t; t = TREE_CHAIN (t))
2459 if (TREE_PURPOSE (t))
2460 break;
2461 if (!t)
2462 return;
2463
2464 old_type = TREE_TYPE (decl);
2465 spec_types = TYPE_ARG_TYPES (old_type);
2466
2467 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2468 {
2469 /* Remove the this pointer, but remember the object's type for
2470 CV quals. */
2471 object_type = TREE_TYPE (TREE_VALUE (spec_types));
2472 spec_types = TREE_CHAIN (spec_types);
2473 tmpl_types = TREE_CHAIN (tmpl_types);
2474
2475 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
2476 {
2477 /* DECL may contain more parameters than TMPL due to the extra
2478 in-charge parameter in constructors and destructors. */
2479 in_charge = spec_types;
2480 spec_types = TREE_CHAIN (spec_types);
2481 }
2482 if (DECL_HAS_VTT_PARM_P (decl))
2483 {
2484 vtt = spec_types;
2485 spec_types = TREE_CHAIN (spec_types);
2486 }
2487 }
2488
2489 /* Compute the merged default arguments. */
2490 new_spec_types =
2491 copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
2492
2493 /* Compute the new FUNCTION_TYPE. */
2494 if (object_type)
2495 {
2496 if (vtt)
2497 new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
2498 TREE_VALUE (vtt),
2499 new_spec_types);
2500
2501 if (in_charge)
2502 /* Put the in-charge parameter back. */
2503 new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
2504 TREE_VALUE (in_charge),
2505 new_spec_types);
2506
2507 new_type = build_method_type_directly (object_type,
2508 TREE_TYPE (old_type),
2509 new_spec_types);
2510 }
2511 else
2512 new_type = build_function_type (TREE_TYPE (old_type),
2513 new_spec_types);
2514 new_type = cp_build_type_attribute_variant (new_type,
2515 TYPE_ATTRIBUTES (old_type));
2516 new_type = build_exception_variant (new_type,
2517 TYPE_RAISES_EXCEPTIONS (old_type));
2518
2519 if (TYPE_HAS_LATE_RETURN_TYPE (old_type))
2520 TYPE_HAS_LATE_RETURN_TYPE (new_type) = 1;
2521
2522 TREE_TYPE (decl) = new_type;
2523 }
2524
2525 /* Return the number of template headers we expect to see for a definition
2526 or specialization of CTYPE or one of its non-template members. */
2527
2528 int
2529 num_template_headers_for_class (tree ctype)
2530 {
2531 int num_templates = 0;
2532
2533 while (ctype && CLASS_TYPE_P (ctype))
2534 {
2535 /* You're supposed to have one `template <...>' for every
2536 template class, but you don't need one for a full
2537 specialization. For example:
2538
2539 template <class T> struct S{};
2540 template <> struct S<int> { void f(); };
2541 void S<int>::f () {}
2542
2543 is correct; there shouldn't be a `template <>' for the
2544 definition of `S<int>::f'. */
2545 if (!CLASSTYPE_TEMPLATE_INFO (ctype))
2546 /* If CTYPE does not have template information of any
2547 kind, then it is not a template, nor is it nested
2548 within a template. */
2549 break;
2550 if (explicit_class_specialization_p (ctype))
2551 break;
2552 if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (ctype)))
2553 ++num_templates;
2554
2555 ctype = TYPE_CONTEXT (ctype);
2556 }
2557
2558 return num_templates;
2559 }
2560
2561 /* Do a simple sanity check on the template headers that precede the
2562 variable declaration DECL. */
2563
2564 void
2565 check_template_variable (tree decl)
2566 {
2567 tree ctx = CP_DECL_CONTEXT (decl);
2568 int wanted = num_template_headers_for_class (ctx);
2569 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl)
2570 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl)))
2571 {
2572 if (cxx_dialect < cxx14)
2573 pedwarn (DECL_SOURCE_LOCATION (decl), 0,
2574 "variable templates only available with "
2575 "-std=c++14 or -std=gnu++14");
2576
2577 // Namespace-scope variable templates should have a template header.
2578 ++wanted;
2579 }
2580 if (template_header_count > wanted)
2581 {
2582 bool warned = pedwarn (DECL_SOURCE_LOCATION (decl), 0,
2583 "too many template headers for %D (should be %d)",
2584 decl, wanted);
2585 if (warned && CLASS_TYPE_P (ctx)
2586 && CLASSTYPE_TEMPLATE_SPECIALIZATION (ctx))
2587 inform (DECL_SOURCE_LOCATION (decl),
2588 "members of an explicitly specialized class are defined "
2589 "without a template header");
2590 }
2591 }
2592
2593 /* Check to see if the function just declared, as indicated in
2594 DECLARATOR, and in DECL, is a specialization of a function
2595 template. We may also discover that the declaration is an explicit
2596 instantiation at this point.
2597
2598 Returns DECL, or an equivalent declaration that should be used
2599 instead if all goes well. Issues an error message if something is
2600 amiss. Returns error_mark_node if the error is not easily
2601 recoverable.
2602
2603 FLAGS is a bitmask consisting of the following flags:
2604
2605 2: The function has a definition.
2606 4: The function is a friend.
2607
2608 The TEMPLATE_COUNT is the number of references to qualifying
2609 template classes that appeared in the name of the function. For
2610 example, in
2611
2612 template <class T> struct S { void f(); };
2613 void S<int>::f();
2614
2615 the TEMPLATE_COUNT would be 1. However, explicitly specialized
2616 classes are not counted in the TEMPLATE_COUNT, so that in
2617
2618 template <class T> struct S {};
2619 template <> struct S<int> { void f(); }
2620 template <> void S<int>::f();
2621
2622 the TEMPLATE_COUNT would be 0. (Note that this declaration is
2623 invalid; there should be no template <>.)
2624
2625 If the function is a specialization, it is marked as such via
2626 DECL_TEMPLATE_SPECIALIZATION. Furthermore, its DECL_TEMPLATE_INFO
2627 is set up correctly, and it is added to the list of specializations
2628 for that template. */
2629
2630 tree
2631 check_explicit_specialization (tree declarator,
2632 tree decl,
2633 int template_count,
2634 int flags)
2635 {
2636 int have_def = flags & 2;
2637 int is_friend = flags & 4;
2638 bool is_concept = flags & 8;
2639 int specialization = 0;
2640 int explicit_instantiation = 0;
2641 int member_specialization = 0;
2642 tree ctype = DECL_CLASS_CONTEXT (decl);
2643 tree dname = DECL_NAME (decl);
2644 tmpl_spec_kind tsk;
2645
2646 if (is_friend)
2647 {
2648 if (!processing_specialization)
2649 tsk = tsk_none;
2650 else
2651 tsk = tsk_excessive_parms;
2652 }
2653 else
2654 tsk = current_tmpl_spec_kind (template_count);
2655
2656 switch (tsk)
2657 {
2658 case tsk_none:
2659 if (processing_specialization && !VAR_P (decl))
2660 {
2661 specialization = 1;
2662 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2663 }
2664 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2665 {
2666 if (is_friend)
2667 /* This could be something like:
2668
2669 template <class T> void f(T);
2670 class S { friend void f<>(int); } */
2671 specialization = 1;
2672 else
2673 {
2674 /* This case handles bogus declarations like template <>
2675 template <class T> void f<int>(); */
2676
2677 error ("template-id %qD in declaration of primary template",
2678 declarator);
2679 return decl;
2680 }
2681 }
2682 break;
2683
2684 case tsk_invalid_member_spec:
2685 /* The error has already been reported in
2686 check_specialization_scope. */
2687 return error_mark_node;
2688
2689 case tsk_invalid_expl_inst:
2690 error ("template parameter list used in explicit instantiation");
2691
2692 /* Fall through. */
2693
2694 case tsk_expl_inst:
2695 if (have_def)
2696 error ("definition provided for explicit instantiation");
2697
2698 explicit_instantiation = 1;
2699 break;
2700
2701 case tsk_excessive_parms:
2702 case tsk_insufficient_parms:
2703 if (tsk == tsk_excessive_parms)
2704 error ("too many template parameter lists in declaration of %qD",
2705 decl);
2706 else if (template_header_count)
2707 error("too few template parameter lists in declaration of %qD", decl);
2708 else
2709 error("explicit specialization of %qD must be introduced by "
2710 "%<template <>%>", decl);
2711
2712 /* Fall through. */
2713 case tsk_expl_spec:
2714 if (is_concept)
2715 error ("explicit specialization declared %<concept%>");
2716
2717 if (VAR_P (decl) && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2718 /* In cases like template<> constexpr bool v = true;
2719 We'll give an error in check_template_variable. */
2720 break;
2721
2722 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2723 if (ctype)
2724 member_specialization = 1;
2725 else
2726 specialization = 1;
2727 break;
2728
2729 case tsk_template:
2730 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2731 {
2732 /* This case handles bogus declarations like template <>
2733 template <class T> void f<int>(); */
2734
2735 if (!uses_template_parms (declarator))
2736 error ("template-id %qD in declaration of primary template",
2737 declarator);
2738 else if (variable_template_p (TREE_OPERAND (declarator, 0)))
2739 {
2740 /* Partial specialization of variable template. */
2741 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2742 specialization = 1;
2743 goto ok;
2744 }
2745 else if (cxx_dialect < cxx14)
2746 error ("non-type partial specialization %qD "
2747 "is not allowed", declarator);
2748 else
2749 error ("non-class, non-variable partial specialization %qD "
2750 "is not allowed", declarator);
2751 return decl;
2752 ok:;
2753 }
2754
2755 if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
2756 /* This is a specialization of a member template, without
2757 specialization the containing class. Something like:
2758
2759 template <class T> struct S {
2760 template <class U> void f (U);
2761 };
2762 template <> template <class U> void S<int>::f(U) {}
2763
2764 That's a specialization -- but of the entire template. */
2765 specialization = 1;
2766 break;
2767
2768 default:
2769 gcc_unreachable ();
2770 }
2771
2772 if ((specialization || member_specialization)
2773 /* This doesn't apply to variable templates. */
2774 && (TREE_CODE (TREE_TYPE (decl)) == FUNCTION_TYPE
2775 || TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE))
2776 {
2777 tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2778 for (; t; t = TREE_CHAIN (t))
2779 if (TREE_PURPOSE (t))
2780 {
2781 permerror (input_location,
2782 "default argument specified in explicit specialization");
2783 break;
2784 }
2785 }
2786
2787 if (specialization || member_specialization || explicit_instantiation)
2788 {
2789 tree tmpl = NULL_TREE;
2790 tree targs = NULL_TREE;
2791 bool was_template_id = (TREE_CODE (declarator) == TEMPLATE_ID_EXPR);
2792
2793 /* Make sure that the declarator is a TEMPLATE_ID_EXPR. */
2794 if (!was_template_id)
2795 {
2796 tree fns;
2797
2798 gcc_assert (identifier_p (declarator));
2799 if (ctype)
2800 fns = dname;
2801 else
2802 {
2803 /* If there is no class context, the explicit instantiation
2804 must be at namespace scope. */
2805 gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2806
2807 /* Find the namespace binding, using the declaration
2808 context. */
2809 fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2810 false, true);
2811 if (fns == error_mark_node)
2812 /* If lookup fails, look for a friend declaration so we can
2813 give a better diagnostic. */
2814 fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2815 /*type*/false, /*complain*/true,
2816 /*hidden*/true);
2817
2818 if (fns == error_mark_node || !is_overloaded_fn (fns))
2819 {
2820 error ("%qD is not a template function", dname);
2821 fns = error_mark_node;
2822 }
2823 }
2824
2825 declarator = lookup_template_function (fns, NULL_TREE);
2826 }
2827
2828 if (declarator == error_mark_node)
2829 return error_mark_node;
2830
2831 if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2832 {
2833 if (!explicit_instantiation)
2834 /* A specialization in class scope. This is invalid,
2835 but the error will already have been flagged by
2836 check_specialization_scope. */
2837 return error_mark_node;
2838 else
2839 {
2840 /* It's not valid to write an explicit instantiation in
2841 class scope, e.g.:
2842
2843 class C { template void f(); }
2844
2845 This case is caught by the parser. However, on
2846 something like:
2847
2848 template class C { void f(); };
2849
2850 (which is invalid) we can get here. The error will be
2851 issued later. */
2852 ;
2853 }
2854
2855 return decl;
2856 }
2857 else if (ctype != NULL_TREE
2858 && (identifier_p (TREE_OPERAND (declarator, 0))))
2859 {
2860 // We'll match variable templates in start_decl.
2861 if (VAR_P (decl))
2862 return decl;
2863
2864 /* Find the list of functions in ctype that have the same
2865 name as the declared function. */
2866 tree name = TREE_OPERAND (declarator, 0);
2867 tree fns = NULL_TREE;
2868 int idx;
2869
2870 if (constructor_name_p (name, ctype))
2871 {
2872 int is_constructor = DECL_CONSTRUCTOR_P (decl);
2873
2874 if (is_constructor ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2875 : !CLASSTYPE_DESTRUCTORS (ctype))
2876 {
2877 /* From [temp.expl.spec]:
2878
2879 If such an explicit specialization for the member
2880 of a class template names an implicitly-declared
2881 special member function (clause _special_), the
2882 program is ill-formed.
2883
2884 Similar language is found in [temp.explicit]. */
2885 error ("specialization of implicitly-declared special member function");
2886 return error_mark_node;
2887 }
2888
2889 name = is_constructor ? ctor_identifier : dtor_identifier;
2890 }
2891
2892 if (!DECL_CONV_FN_P (decl))
2893 {
2894 idx = lookup_fnfields_1 (ctype, name);
2895 if (idx >= 0)
2896 fns = (*CLASSTYPE_METHOD_VEC (ctype))[idx];
2897 }
2898 else
2899 {
2900 vec<tree, va_gc> *methods;
2901 tree ovl;
2902
2903 /* For a type-conversion operator, we cannot do a
2904 name-based lookup. We might be looking for `operator
2905 int' which will be a specialization of `operator T'.
2906 So, we find *all* the conversion operators, and then
2907 select from them. */
2908 fns = NULL_TREE;
2909
2910 methods = CLASSTYPE_METHOD_VEC (ctype);
2911 if (methods)
2912 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2913 methods->iterate (idx, &ovl);
2914 ++idx)
2915 {
2916 if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2917 /* There are no more conversion functions. */
2918 break;
2919
2920 /* Glue all these conversion functions together
2921 with those we already have. */
2922 for (; ovl; ovl = OVL_NEXT (ovl))
2923 fns = ovl_cons (OVL_CURRENT (ovl), fns);
2924 }
2925 }
2926
2927 if (fns == NULL_TREE)
2928 {
2929 error ("no member function %qD declared in %qT", name, ctype);
2930 return error_mark_node;
2931 }
2932 else
2933 TREE_OPERAND (declarator, 0) = fns;
2934 }
2935
2936 /* Figure out what exactly is being specialized at this point.
2937 Note that for an explicit instantiation, even one for a
2938 member function, we cannot tell apriori whether the
2939 instantiation is for a member template, or just a member
2940 function of a template class. Even if a member template is
2941 being instantiated, the member template arguments may be
2942 elided if they can be deduced from the rest of the
2943 declaration. */
2944 tmpl = determine_specialization (declarator, decl,
2945 &targs,
2946 member_specialization,
2947 template_count,
2948 tsk);
2949
2950 if (!tmpl || tmpl == error_mark_node)
2951 /* We couldn't figure out what this declaration was
2952 specializing. */
2953 return error_mark_node;
2954 else
2955 {
2956 if (!ctype && !was_template_id
2957 && (specialization || member_specialization
2958 || explicit_instantiation)
2959 && !is_associated_namespace (CP_DECL_CONTEXT (decl),
2960 CP_DECL_CONTEXT (tmpl)))
2961 error ("%qD is not declared in %qD",
2962 tmpl, current_namespace);
2963 else if (TREE_CODE (decl) == FUNCTION_DECL
2964 && DECL_HIDDEN_FRIEND_P (tmpl))
2965 {
2966 if (pedwarn (DECL_SOURCE_LOCATION (decl), 0,
2967 "friend declaration %qD is not visible to "
2968 "explicit specialization", tmpl))
2969 inform (DECL_SOURCE_LOCATION (tmpl),
2970 "friend declaration here");
2971 }
2972
2973 tree gen_tmpl = most_general_template (tmpl);
2974
2975 if (explicit_instantiation)
2976 {
2977 /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2978 is done by do_decl_instantiation later. */
2979
2980 int arg_depth = TMPL_ARGS_DEPTH (targs);
2981 int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2982
2983 if (arg_depth > parm_depth)
2984 {
2985 /* If TMPL is not the most general template (for
2986 example, if TMPL is a friend template that is
2987 injected into namespace scope), then there will
2988 be too many levels of TARGS. Remove some of them
2989 here. */
2990 int i;
2991 tree new_targs;
2992
2993 new_targs = make_tree_vec (parm_depth);
2994 for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2995 TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2996 = TREE_VEC_ELT (targs, i);
2997 targs = new_targs;
2998 }
2999
3000 return instantiate_template (tmpl, targs, tf_error);
3001 }
3002
3003 /* If we thought that the DECL was a member function, but it
3004 turns out to be specializing a static member function,
3005 make DECL a static member function as well. */
3006 if (DECL_FUNCTION_TEMPLATE_P (tmpl)
3007 && DECL_STATIC_FUNCTION_P (tmpl)
3008 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
3009 revert_static_member_fn (decl);
3010
3011 /* If this is a specialization of a member template of a
3012 template class, we want to return the TEMPLATE_DECL, not
3013 the specialization of it. */
3014 if (tsk == tsk_template && !was_template_id)
3015 {
3016 tree result = DECL_TEMPLATE_RESULT (tmpl);
3017 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3018 DECL_INITIAL (result) = NULL_TREE;
3019 if (have_def)
3020 {
3021 tree parm;
3022 DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
3023 DECL_SOURCE_LOCATION (result)
3024 = DECL_SOURCE_LOCATION (decl);
3025 /* We want to use the argument list specified in the
3026 definition, not in the original declaration. */
3027 DECL_ARGUMENTS (result) = DECL_ARGUMENTS (decl);
3028 for (parm = DECL_ARGUMENTS (result); parm;
3029 parm = DECL_CHAIN (parm))
3030 DECL_CONTEXT (parm) = result;
3031 }
3032 return register_specialization (tmpl, gen_tmpl, targs,
3033 is_friend, 0);
3034 }
3035
3036 /* Set up the DECL_TEMPLATE_INFO for DECL. */
3037 DECL_TEMPLATE_INFO (decl) = build_template_info (tmpl, targs);
3038
3039 if (was_template_id)
3040 TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (decl)) = true;
3041
3042 /* Inherit default function arguments from the template
3043 DECL is specializing. */
3044 if (DECL_FUNCTION_TEMPLATE_P (tmpl))
3045 copy_default_args_to_explicit_spec (decl);
3046
3047 /* This specialization has the same protection as the
3048 template it specializes. */
3049 TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
3050 TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
3051
3052 /* 7.1.1-1 [dcl.stc]
3053
3054 A storage-class-specifier shall not be specified in an
3055 explicit specialization...
3056
3057 The parser rejects these, so unless action is taken here,
3058 explicit function specializations will always appear with
3059 global linkage.
3060
3061 The action recommended by the C++ CWG in response to C++
3062 defect report 605 is to make the storage class and linkage
3063 of the explicit specialization match the templated function:
3064
3065 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
3066 */
3067 if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
3068 {
3069 tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
3070 gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
3071
3072 /* A concept cannot be specialized. */
3073 if (DECL_DECLARED_CONCEPT_P (tmpl_func))
3074 {
3075 error ("explicit specialization of function concept %qD",
3076 gen_tmpl);
3077 return error_mark_node;
3078 }
3079
3080 /* This specialization has the same linkage and visibility as
3081 the function template it specializes. */
3082 TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
3083 if (! TREE_PUBLIC (decl))
3084 {
3085 DECL_INTERFACE_KNOWN (decl) = 1;
3086 DECL_NOT_REALLY_EXTERN (decl) = 1;
3087 }
3088 DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
3089 if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
3090 {
3091 DECL_VISIBILITY_SPECIFIED (decl) = 1;
3092 DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
3093 }
3094 }
3095
3096 /* If DECL is a friend declaration, declared using an
3097 unqualified name, the namespace associated with DECL may
3098 have been set incorrectly. For example, in:
3099
3100 template <typename T> void f(T);
3101 namespace N {
3102 struct S { friend void f<int>(int); }
3103 }
3104
3105 we will have set the DECL_CONTEXT for the friend
3106 declaration to N, rather than to the global namespace. */
3107 if (DECL_NAMESPACE_SCOPE_P (decl))
3108 DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
3109
3110 if (is_friend && !have_def)
3111 /* This is not really a declaration of a specialization.
3112 It's just the name of an instantiation. But, it's not
3113 a request for an instantiation, either. */
3114 SET_DECL_IMPLICIT_INSTANTIATION (decl);
3115 else if (TREE_CODE (decl) == FUNCTION_DECL)
3116 /* A specialization is not necessarily COMDAT. */
3117 DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
3118 && DECL_DECLARED_INLINE_P (decl));
3119 else if (VAR_P (decl))
3120 DECL_COMDAT (decl) = false;
3121
3122 /* If this is a full specialization, register it so that we can find
3123 it again. Partial specializations will be registered in
3124 process_partial_specialization. */
3125 if (!processing_template_decl)
3126 decl = register_specialization (decl, gen_tmpl, targs,
3127 is_friend, 0);
3128
3129 /* A 'structor should already have clones. */
3130 gcc_assert (decl == error_mark_node
3131 || variable_template_p (tmpl)
3132 || !(DECL_CONSTRUCTOR_P (decl)
3133 || DECL_DESTRUCTOR_P (decl))
3134 || DECL_CLONED_FUNCTION_P (DECL_CHAIN (decl)));
3135 }
3136 }
3137
3138 return decl;
3139 }
3140
3141 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
3142 parameters. These are represented in the same format used for
3143 DECL_TEMPLATE_PARMS. */
3144
3145 int
3146 comp_template_parms (const_tree parms1, const_tree parms2)
3147 {
3148 const_tree p1;
3149 const_tree p2;
3150
3151 if (parms1 == parms2)
3152 return 1;
3153
3154 for (p1 = parms1, p2 = parms2;
3155 p1 != NULL_TREE && p2 != NULL_TREE;
3156 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
3157 {
3158 tree t1 = TREE_VALUE (p1);
3159 tree t2 = TREE_VALUE (p2);
3160 int i;
3161
3162 gcc_assert (TREE_CODE (t1) == TREE_VEC);
3163 gcc_assert (TREE_CODE (t2) == TREE_VEC);
3164
3165 if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
3166 return 0;
3167
3168 for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
3169 {
3170 tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
3171 tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
3172
3173 /* If either of the template parameters are invalid, assume
3174 they match for the sake of error recovery. */
3175 if (error_operand_p (parm1) || error_operand_p (parm2))
3176 return 1;
3177
3178 if (TREE_CODE (parm1) != TREE_CODE (parm2))
3179 return 0;
3180
3181 if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
3182 && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
3183 == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
3184 continue;
3185 else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
3186 return 0;
3187 }
3188 }
3189
3190 if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
3191 /* One set of parameters has more parameters lists than the
3192 other. */
3193 return 0;
3194
3195 return 1;
3196 }
3197
3198 /* Determine whether PARM is a parameter pack. */
3199
3200 bool
3201 template_parameter_pack_p (const_tree parm)
3202 {
3203 /* Determine if we have a non-type template parameter pack. */
3204 if (TREE_CODE (parm) == PARM_DECL)
3205 return (DECL_TEMPLATE_PARM_P (parm)
3206 && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
3207 if (TREE_CODE (parm) == TEMPLATE_PARM_INDEX)
3208 return TEMPLATE_PARM_PARAMETER_PACK (parm);
3209
3210 /* If this is a list of template parameters, we could get a
3211 TYPE_DECL or a TEMPLATE_DECL. */
3212 if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
3213 parm = TREE_TYPE (parm);
3214
3215 /* Otherwise it must be a type template parameter. */
3216 return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
3217 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
3218 && TEMPLATE_TYPE_PARAMETER_PACK (parm));
3219 }
3220
3221 /* Determine if T is a function parameter pack. */
3222
3223 bool
3224 function_parameter_pack_p (const_tree t)
3225 {
3226 if (t && TREE_CODE (t) == PARM_DECL)
3227 return DECL_PACK_P (t);
3228 return false;
3229 }
3230
3231 /* Return the function template declaration of PRIMARY_FUNC_TMPL_INST.
3232 PRIMARY_FUNC_TMPL_INST is a primary function template instantiation. */
3233
3234 tree
3235 get_function_template_decl (const_tree primary_func_tmpl_inst)
3236 {
3237 if (! primary_func_tmpl_inst
3238 || TREE_CODE (primary_func_tmpl_inst) != FUNCTION_DECL
3239 || ! primary_template_instantiation_p (primary_func_tmpl_inst))
3240 return NULL;
3241
3242 return DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (primary_func_tmpl_inst));
3243 }
3244
3245 /* Return true iff the function parameter PARAM_DECL was expanded
3246 from the function parameter pack PACK. */
3247
3248 bool
3249 function_parameter_expanded_from_pack_p (tree param_decl, tree pack)
3250 {
3251 if (DECL_ARTIFICIAL (param_decl)
3252 || !function_parameter_pack_p (pack))
3253 return false;
3254
3255 /* The parameter pack and its pack arguments have the same
3256 DECL_PARM_INDEX. */
3257 return DECL_PARM_INDEX (pack) == DECL_PARM_INDEX (param_decl);
3258 }
3259
3260 /* Determine whether ARGS describes a variadic template args list,
3261 i.e., one that is terminated by a template argument pack. */
3262
3263 static bool
3264 template_args_variadic_p (tree args)
3265 {
3266 int nargs;
3267 tree last_parm;
3268
3269 if (args == NULL_TREE)
3270 return false;
3271
3272 args = INNERMOST_TEMPLATE_ARGS (args);
3273 nargs = TREE_VEC_LENGTH (args);
3274
3275 if (nargs == 0)
3276 return false;
3277
3278 last_parm = TREE_VEC_ELT (args, nargs - 1);
3279
3280 return ARGUMENT_PACK_P (last_parm);
3281 }
3282
3283 /* Generate a new name for the parameter pack name NAME (an
3284 IDENTIFIER_NODE) that incorporates its */
3285
3286 static tree
3287 make_ith_pack_parameter_name (tree name, int i)
3288 {
3289 /* Munge the name to include the parameter index. */
3290 #define NUMBUF_LEN 128
3291 char numbuf[NUMBUF_LEN];
3292 char* newname;
3293 int newname_len;
3294
3295 if (name == NULL_TREE)
3296 return name;
3297 snprintf (numbuf, NUMBUF_LEN, "%i", i);
3298 newname_len = IDENTIFIER_LENGTH (name)
3299 + strlen (numbuf) + 2;
3300 newname = (char*)alloca (newname_len);
3301 snprintf (newname, newname_len,
3302 "%s#%i", IDENTIFIER_POINTER (name), i);
3303 return get_identifier (newname);
3304 }
3305
3306 /* Return true if T is a primary function, class or alias template
3307 instantiation. */
3308
3309 bool
3310 primary_template_instantiation_p (const_tree t)
3311 {
3312 if (!t)
3313 return false;
3314
3315 if (TREE_CODE (t) == FUNCTION_DECL)
3316 return DECL_LANG_SPECIFIC (t)
3317 && DECL_TEMPLATE_INSTANTIATION (t)
3318 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t));
3319 else if (CLASS_TYPE_P (t) && !TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
3320 return CLASSTYPE_TEMPLATE_INSTANTIATION (t)
3321 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t));
3322 else if (alias_template_specialization_p (t))
3323 return true;
3324 return false;
3325 }
3326
3327 /* Return true if PARM is a template template parameter. */
3328
3329 bool
3330 template_template_parameter_p (const_tree parm)
3331 {
3332 return DECL_TEMPLATE_TEMPLATE_PARM_P (parm);
3333 }
3334
3335 /* Return true iff PARM is a DECL representing a type template
3336 parameter. */
3337
3338 bool
3339 template_type_parameter_p (const_tree parm)
3340 {
3341 return (parm
3342 && (TREE_CODE (parm) == TYPE_DECL
3343 || TREE_CODE (parm) == TEMPLATE_DECL)
3344 && DECL_TEMPLATE_PARM_P (parm));
3345 }
3346
3347 /* Return the template parameters of T if T is a
3348 primary template instantiation, NULL otherwise. */
3349
3350 tree
3351 get_primary_template_innermost_parameters (const_tree t)
3352 {
3353 tree parms = NULL, template_info = NULL;
3354
3355 if ((template_info = get_template_info (t))
3356 && primary_template_instantiation_p (t))
3357 parms = INNERMOST_TEMPLATE_PARMS
3358 (DECL_TEMPLATE_PARMS (TI_TEMPLATE (template_info)));
3359
3360 return parms;
3361 }
3362
3363 /* Return the template parameters of the LEVELth level from the full list
3364 of template parameters PARMS. */
3365
3366 tree
3367 get_template_parms_at_level (tree parms, int level)
3368 {
3369 tree p;
3370 if (!parms
3371 || TREE_CODE (parms) != TREE_LIST
3372 || level > TMPL_PARMS_DEPTH (parms))
3373 return NULL_TREE;
3374
3375 for (p = parms; p; p = TREE_CHAIN (p))
3376 if (TMPL_PARMS_DEPTH (p) == level)
3377 return p;
3378
3379 return NULL_TREE;
3380 }
3381
3382 /* Returns the template arguments of T if T is a template instantiation,
3383 NULL otherwise. */
3384
3385 tree
3386 get_template_innermost_arguments (const_tree t)
3387 {
3388 tree args = NULL, template_info = NULL;
3389
3390 if ((template_info = get_template_info (t))
3391 && TI_ARGS (template_info))
3392 args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (template_info));
3393
3394 return args;
3395 }
3396
3397 /* Return the argument pack elements of T if T is a template argument pack,
3398 NULL otherwise. */
3399
3400 tree
3401 get_template_argument_pack_elems (const_tree t)
3402 {
3403 if (TREE_CODE (t) != TYPE_ARGUMENT_PACK
3404 && TREE_CODE (t) != NONTYPE_ARGUMENT_PACK)
3405 return NULL;
3406
3407 return ARGUMENT_PACK_ARGS (t);
3408 }
3409
3410 /* Structure used to track the progress of find_parameter_packs_r. */
3411 struct find_parameter_pack_data
3412 {
3413 /* TREE_LIST that will contain all of the parameter packs found by
3414 the traversal. */
3415 tree* parameter_packs;
3416
3417 /* Set of AST nodes that have been visited by the traversal. */
3418 hash_set<tree> *visited;
3419
3420 /* True iff we're making a type pack expansion. */
3421 bool type_pack_expansion_p;
3422 };
3423
3424 /* Identifies all of the argument packs that occur in a template
3425 argument and appends them to the TREE_LIST inside DATA, which is a
3426 find_parameter_pack_data structure. This is a subroutine of
3427 make_pack_expansion and uses_parameter_packs. */
3428 static tree
3429 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
3430 {
3431 tree t = *tp;
3432 struct find_parameter_pack_data* ppd =
3433 (struct find_parameter_pack_data*)data;
3434 bool parameter_pack_p = false;
3435
3436 /* Handle type aliases/typedefs. */
3437 if (TYPE_ALIAS_P (t))
3438 {
3439 if (TYPE_TEMPLATE_INFO (t))
3440 cp_walk_tree (&TYPE_TI_ARGS (t),
3441 &find_parameter_packs_r,
3442 ppd, ppd->visited);
3443 *walk_subtrees = 0;
3444 return NULL_TREE;
3445 }
3446
3447 /* Identify whether this is a parameter pack or not. */
3448 switch (TREE_CODE (t))
3449 {
3450 case TEMPLATE_PARM_INDEX:
3451 if (TEMPLATE_PARM_PARAMETER_PACK (t))
3452 parameter_pack_p = true;
3453 break;
3454
3455 case TEMPLATE_TYPE_PARM:
3456 t = TYPE_MAIN_VARIANT (t);
3457 case TEMPLATE_TEMPLATE_PARM:
3458 /* If the placeholder appears in the decl-specifier-seq of a function
3459 parameter pack (14.6.3), or the type-specifier-seq of a type-id that
3460 is a pack expansion, the invented template parameter is a template
3461 parameter pack. */
3462 if (ppd->type_pack_expansion_p && is_auto_or_concept (t))
3463 TEMPLATE_TYPE_PARAMETER_PACK (t) = true;
3464 if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3465 parameter_pack_p = true;
3466 break;
3467
3468 case FIELD_DECL:
3469 case PARM_DECL:
3470 if (DECL_PACK_P (t))
3471 {
3472 /* We don't want to walk into the type of a PARM_DECL,
3473 because we don't want to see the type parameter pack. */
3474 *walk_subtrees = 0;
3475 parameter_pack_p = true;
3476 }
3477 break;
3478
3479 /* Look through a lambda capture proxy to the field pack. */
3480 case VAR_DECL:
3481 if (DECL_HAS_VALUE_EXPR_P (t))
3482 {
3483 tree v = DECL_VALUE_EXPR (t);
3484 cp_walk_tree (&v,
3485 &find_parameter_packs_r,
3486 ppd, ppd->visited);
3487 *walk_subtrees = 0;
3488 }
3489 else if (variable_template_specialization_p (t))
3490 {
3491 cp_walk_tree (&DECL_TI_ARGS (t),
3492 find_parameter_packs_r,
3493 ppd, ppd->visited);
3494 *walk_subtrees = 0;
3495 }
3496 break;
3497
3498 case BASES:
3499 parameter_pack_p = true;
3500 break;
3501 default:
3502 /* Not a parameter pack. */
3503 break;
3504 }
3505
3506 if (parameter_pack_p)
3507 {
3508 /* Add this parameter pack to the list. */
3509 *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
3510 }
3511
3512 if (TYPE_P (t))
3513 cp_walk_tree (&TYPE_CONTEXT (t),
3514 &find_parameter_packs_r, ppd, ppd->visited);
3515
3516 /* This switch statement will return immediately if we don't find a
3517 parameter pack. */
3518 switch (TREE_CODE (t))
3519 {
3520 case TEMPLATE_PARM_INDEX:
3521 return NULL_TREE;
3522
3523 case BOUND_TEMPLATE_TEMPLATE_PARM:
3524 /* Check the template itself. */
3525 cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)),
3526 &find_parameter_packs_r, ppd, ppd->visited);
3527 /* Check the template arguments. */
3528 cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd,
3529 ppd->visited);
3530 *walk_subtrees = 0;
3531 return NULL_TREE;
3532
3533 case TEMPLATE_TYPE_PARM:
3534 case TEMPLATE_TEMPLATE_PARM:
3535 return NULL_TREE;
3536
3537 case PARM_DECL:
3538 return NULL_TREE;
3539
3540 case RECORD_TYPE:
3541 if (TYPE_PTRMEMFUNC_P (t))
3542 return NULL_TREE;
3543 /* Fall through. */
3544
3545 case UNION_TYPE:
3546 case ENUMERAL_TYPE:
3547 if (TYPE_TEMPLATE_INFO (t))
3548 cp_walk_tree (&TYPE_TI_ARGS (t),
3549 &find_parameter_packs_r, ppd, ppd->visited);
3550
3551 *walk_subtrees = 0;
3552 return NULL_TREE;
3553
3554 case CONSTRUCTOR:
3555 case TEMPLATE_DECL:
3556 cp_walk_tree (&TREE_TYPE (t),
3557 &find_parameter_packs_r, ppd, ppd->visited);
3558 return NULL_TREE;
3559
3560 case TYPENAME_TYPE:
3561 cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
3562 ppd, ppd->visited);
3563 *walk_subtrees = 0;
3564 return NULL_TREE;
3565
3566 case TYPE_PACK_EXPANSION:
3567 case EXPR_PACK_EXPANSION:
3568 *walk_subtrees = 0;
3569 return NULL_TREE;
3570
3571 case INTEGER_TYPE:
3572 cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r,
3573 ppd, ppd->visited);
3574 *walk_subtrees = 0;
3575 return NULL_TREE;
3576
3577 case IDENTIFIER_NODE:
3578 cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd,
3579 ppd->visited);
3580 *walk_subtrees = 0;
3581 return NULL_TREE;
3582
3583 case DECLTYPE_TYPE:
3584 {
3585 /* When traversing a DECLTYPE_TYPE_EXPR, we need to set
3586 type_pack_expansion_p to false so that any placeholders
3587 within the expression don't get marked as parameter packs. */
3588 bool type_pack_expansion_p = ppd->type_pack_expansion_p;
3589 ppd->type_pack_expansion_p = false;
3590 cp_walk_tree (&DECLTYPE_TYPE_EXPR (t), &find_parameter_packs_r,
3591 ppd, ppd->visited);
3592 ppd->type_pack_expansion_p = type_pack_expansion_p;
3593 *walk_subtrees = 0;
3594 return NULL_TREE;
3595 }
3596
3597 default:
3598 return NULL_TREE;
3599 }
3600
3601 return NULL_TREE;
3602 }
3603
3604 /* Determines if the expression or type T uses any parameter packs. */
3605 bool
3606 uses_parameter_packs (tree t)
3607 {
3608 tree parameter_packs = NULL_TREE;
3609 struct find_parameter_pack_data ppd;
3610 ppd.parameter_packs = &parameter_packs;
3611 ppd.visited = new hash_set<tree>;
3612 ppd.type_pack_expansion_p = false;
3613 cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3614 delete ppd.visited;
3615 return parameter_packs != NULL_TREE;
3616 }
3617
3618 /* Turn ARG, which may be an expression, type, or a TREE_LIST
3619 representation a base-class initializer into a parameter pack
3620 expansion. If all goes well, the resulting node will be an
3621 EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
3622 respectively. */
3623 tree
3624 make_pack_expansion (tree arg)
3625 {
3626 tree result;
3627 tree parameter_packs = NULL_TREE;
3628 bool for_types = false;
3629 struct find_parameter_pack_data ppd;
3630
3631 if (!arg || arg == error_mark_node)
3632 return arg;
3633
3634 if (TREE_CODE (arg) == TREE_LIST && TREE_PURPOSE (arg))
3635 {
3636 /* A TREE_LIST with a non-null TREE_PURPOSE is for a base
3637 class initializer. In this case, the TREE_PURPOSE will be a
3638 _TYPE node (representing the base class expansion we're
3639 initializing) and the TREE_VALUE will be a TREE_LIST
3640 containing the initialization arguments.
3641
3642 The resulting expansion looks somewhat different from most
3643 expansions. Rather than returning just one _EXPANSION, we
3644 return a TREE_LIST whose TREE_PURPOSE is a
3645 TYPE_PACK_EXPANSION containing the bases that will be
3646 initialized. The TREE_VALUE will be identical to the
3647 original TREE_VALUE, which is a list of arguments that will
3648 be passed to each base. We do not introduce any new pack
3649 expansion nodes into the TREE_VALUE (although it is possible
3650 that some already exist), because the TREE_PURPOSE and
3651 TREE_VALUE all need to be expanded together with the same
3652 _EXPANSION node. Note that the TYPE_PACK_EXPANSION in the
3653 resulting TREE_PURPOSE will mention the parameter packs in
3654 both the bases and the arguments to the bases. */
3655 tree purpose;
3656 tree value;
3657 tree parameter_packs = NULL_TREE;
3658
3659 /* Determine which parameter packs will be used by the base
3660 class expansion. */
3661 ppd.visited = new hash_set<tree>;
3662 ppd.parameter_packs = &parameter_packs;
3663 ppd.type_pack_expansion_p = true;
3664 gcc_assert (TYPE_P (TREE_PURPOSE (arg)));
3665 cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r,
3666 &ppd, ppd.visited);
3667
3668 if (parameter_packs == NULL_TREE)
3669 {
3670 error ("base initializer expansion %<%T%> contains no parameter packs", arg);
3671 delete ppd.visited;
3672 return error_mark_node;
3673 }
3674
3675 if (TREE_VALUE (arg) != void_type_node)
3676 {
3677 /* Collect the sets of parameter packs used in each of the
3678 initialization arguments. */
3679 for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
3680 {
3681 /* Determine which parameter packs will be expanded in this
3682 argument. */
3683 cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r,
3684 &ppd, ppd.visited);
3685 }
3686 }
3687
3688 delete ppd.visited;
3689
3690 /* Create the pack expansion type for the base type. */
3691 purpose = cxx_make_type (TYPE_PACK_EXPANSION);
3692 SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
3693 PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
3694
3695 /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3696 they will rarely be compared to anything. */
3697 SET_TYPE_STRUCTURAL_EQUALITY (purpose);
3698
3699 return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
3700 }
3701
3702 if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
3703 for_types = true;
3704
3705 /* Build the PACK_EXPANSION_* node. */
3706 result = for_types
3707 ? cxx_make_type (TYPE_PACK_EXPANSION)
3708 : make_node (EXPR_PACK_EXPANSION);
3709 SET_PACK_EXPANSION_PATTERN (result, arg);
3710 if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
3711 {
3712 /* Propagate type and const-expression information. */
3713 TREE_TYPE (result) = TREE_TYPE (arg);
3714 TREE_CONSTANT (result) = TREE_CONSTANT (arg);
3715 /* Mark this read now, since the expansion might be length 0. */
3716 mark_exp_read (arg);
3717 }
3718 else
3719 /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3720 they will rarely be compared to anything. */
3721 SET_TYPE_STRUCTURAL_EQUALITY (result);
3722
3723 /* Determine which parameter packs will be expanded. */
3724 ppd.parameter_packs = &parameter_packs;
3725 ppd.visited = new hash_set<tree>;
3726 ppd.type_pack_expansion_p = TYPE_P (arg);
3727 cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
3728 delete ppd.visited;
3729
3730 /* Make sure we found some parameter packs. */
3731 if (parameter_packs == NULL_TREE)
3732 {
3733 if (TYPE_P (arg))
3734 error ("expansion pattern %<%T%> contains no argument packs", arg);
3735 else
3736 error ("expansion pattern %<%E%> contains no argument packs", arg);
3737 return error_mark_node;
3738 }
3739 PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
3740
3741 PACK_EXPANSION_LOCAL_P (result) = at_function_scope_p ();
3742
3743 return result;
3744 }
3745
3746 /* Checks T for any "bare" parameter packs, which have not yet been
3747 expanded, and issues an error if any are found. This operation can
3748 only be done on full expressions or types (e.g., an expression
3749 statement, "if" condition, etc.), because we could have expressions like:
3750
3751 foo(f(g(h(args)))...)
3752
3753 where "args" is a parameter pack. check_for_bare_parameter_packs
3754 should not be called for the subexpressions args, h(args),
3755 g(h(args)), or f(g(h(args))), because we would produce erroneous
3756 error messages.
3757
3758 Returns TRUE and emits an error if there were bare parameter packs,
3759 returns FALSE otherwise. */
3760 bool
3761 check_for_bare_parameter_packs (tree t)
3762 {
3763 tree parameter_packs = NULL_TREE;
3764 struct find_parameter_pack_data ppd;
3765
3766 if (!processing_template_decl || !t || t == error_mark_node)
3767 return false;
3768
3769 if (TREE_CODE (t) == TYPE_DECL)
3770 t = TREE_TYPE (t);
3771
3772 ppd.parameter_packs = &parameter_packs;
3773 ppd.visited = new hash_set<tree>;
3774 ppd.type_pack_expansion_p = false;
3775 cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3776 delete ppd.visited;
3777
3778 if (parameter_packs)
3779 {
3780 location_t loc = EXPR_LOC_OR_LOC (t, input_location);
3781 error_at (loc, "parameter packs not expanded with %<...%>:");
3782 while (parameter_packs)
3783 {
3784 tree pack = TREE_VALUE (parameter_packs);
3785 tree name = NULL_TREE;
3786
3787 if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
3788 || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
3789 name = TYPE_NAME (pack);
3790 else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
3791 name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
3792 else
3793 name = DECL_NAME (pack);
3794
3795 if (name)
3796 inform (loc, " %qD", name);
3797 else
3798 inform (loc, " <anonymous>");
3799
3800 parameter_packs = TREE_CHAIN (parameter_packs);
3801 }
3802
3803 return true;
3804 }
3805
3806 return false;
3807 }
3808
3809 /* Expand any parameter packs that occur in the template arguments in
3810 ARGS. */
3811 tree
3812 expand_template_argument_pack (tree args)
3813 {
3814 tree result_args = NULL_TREE;
3815 int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
3816 int num_result_args = -1;
3817 int non_default_args_count = -1;
3818
3819 /* First, determine if we need to expand anything, and the number of
3820 slots we'll need. */
3821 for (in_arg = 0; in_arg < nargs; ++in_arg)
3822 {
3823 tree arg = TREE_VEC_ELT (args, in_arg);
3824 if (arg == NULL_TREE)
3825 return args;
3826 if (ARGUMENT_PACK_P (arg))
3827 {
3828 int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
3829 if (num_result_args < 0)
3830 num_result_args = in_arg + num_packed;
3831 else
3832 num_result_args += num_packed;
3833 }
3834 else
3835 {
3836 if (num_result_args >= 0)
3837 num_result_args++;
3838 }
3839 }
3840
3841 /* If no expansion is necessary, we're done. */
3842 if (num_result_args < 0)
3843 return args;
3844
3845 /* Expand arguments. */
3846 result_args = make_tree_vec (num_result_args);
3847 if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (args))
3848 non_default_args_count =
3849 GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
3850 for (in_arg = 0; in_arg < nargs; ++in_arg)
3851 {
3852 tree arg = TREE_VEC_ELT (args, in_arg);
3853 if (ARGUMENT_PACK_P (arg))
3854 {
3855 tree packed = ARGUMENT_PACK_ARGS (arg);
3856 int i, num_packed = TREE_VEC_LENGTH (packed);
3857 for (i = 0; i < num_packed; ++i, ++out_arg)
3858 TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
3859 if (non_default_args_count > 0)
3860 non_default_args_count += num_packed - 1;
3861 }
3862 else
3863 {
3864 TREE_VEC_ELT (result_args, out_arg) = arg;
3865 ++out_arg;
3866 }
3867 }
3868 if (non_default_args_count >= 0)
3869 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (result_args, non_default_args_count);
3870 return result_args;
3871 }
3872
3873 /* Checks if DECL shadows a template parameter.
3874
3875 [temp.local]: A template-parameter shall not be redeclared within its
3876 scope (including nested scopes).
3877
3878 Emits an error and returns TRUE if the DECL shadows a parameter,
3879 returns FALSE otherwise. */
3880
3881 bool
3882 check_template_shadow (tree decl)
3883 {
3884 tree olddecl;
3885
3886 /* If we're not in a template, we can't possibly shadow a template
3887 parameter. */
3888 if (!current_template_parms)
3889 return true;
3890
3891 /* Figure out what we're shadowing. */
3892 if (TREE_CODE (decl) == OVERLOAD)
3893 decl = OVL_CURRENT (decl);
3894 olddecl = innermost_non_namespace_value (DECL_NAME (decl));
3895
3896 /* If there's no previous binding for this name, we're not shadowing
3897 anything, let alone a template parameter. */
3898 if (!olddecl)
3899 return true;
3900
3901 /* If we're not shadowing a template parameter, we're done. Note
3902 that OLDDECL might be an OVERLOAD (or perhaps even an
3903 ERROR_MARK), so we can't just blithely assume it to be a _DECL
3904 node. */
3905 if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
3906 return true;
3907
3908 /* We check for decl != olddecl to avoid bogus errors for using a
3909 name inside a class. We check TPFI to avoid duplicate errors for
3910 inline member templates. */
3911 if (decl == olddecl
3912 || (DECL_TEMPLATE_PARM_P (decl)
3913 && TEMPLATE_PARMS_FOR_INLINE (current_template_parms)))
3914 return true;
3915
3916 /* Don't complain about the injected class name, as we've already
3917 complained about the class itself. */
3918 if (DECL_SELF_REFERENCE_P (decl))
3919 return false;
3920
3921 if (DECL_TEMPLATE_PARM_P (decl))
3922 error ("declaration of template parameter %q+D shadows "
3923 "template parameter", decl);
3924 else
3925 error ("declaration of %q+#D shadows template parameter", decl);
3926 inform (DECL_SOURCE_LOCATION (olddecl),
3927 "template parameter %qD declared here", olddecl);
3928 return false;
3929 }
3930
3931 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
3932 ORIG_LEVEL, DECL, and TYPE. */
3933
3934 static tree
3935 build_template_parm_index (int index,
3936 int level,
3937 int orig_level,
3938 tree decl,
3939 tree type)
3940 {
3941 tree t = make_node (TEMPLATE_PARM_INDEX);
3942 TEMPLATE_PARM_IDX (t) = index;
3943 TEMPLATE_PARM_LEVEL (t) = level;
3944 TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
3945 TEMPLATE_PARM_DECL (t) = decl;
3946 TREE_TYPE (t) = type;
3947 TREE_CONSTANT (t) = TREE_CONSTANT (decl);
3948 TREE_READONLY (t) = TREE_READONLY (decl);
3949
3950 return t;
3951 }
3952
3953 /* Find the canonical type parameter for the given template type
3954 parameter. Returns the canonical type parameter, which may be TYPE
3955 if no such parameter existed. */
3956
3957 static tree
3958 canonical_type_parameter (tree type)
3959 {
3960 tree list;
3961 int idx = TEMPLATE_TYPE_IDX (type);
3962 if (!canonical_template_parms)
3963 vec_alloc (canonical_template_parms, idx+1);
3964
3965 while (canonical_template_parms->length () <= (unsigned)idx)
3966 vec_safe_push (canonical_template_parms, NULL_TREE);
3967
3968 list = (*canonical_template_parms)[idx];
3969 while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
3970 list = TREE_CHAIN (list);
3971
3972 if (list)
3973 return TREE_VALUE (list);
3974 else
3975 {
3976 (*canonical_template_parms)[idx]
3977 = tree_cons (NULL_TREE, type,
3978 (*canonical_template_parms)[idx]);
3979 return type;
3980 }
3981 }
3982
3983 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
3984 TEMPLATE_PARM_LEVEL has been decreased by LEVELS. If such a
3985 TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
3986 new one is created. */
3987
3988 static tree
3989 reduce_template_parm_level (tree index, tree type, int levels, tree args,
3990 tsubst_flags_t complain)
3991 {
3992 if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
3993 || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
3994 != TEMPLATE_PARM_LEVEL (index) - levels)
3995 || !same_type_p (type, TREE_TYPE (TEMPLATE_PARM_DESCENDANTS (index))))
3996 {
3997 tree orig_decl = TEMPLATE_PARM_DECL (index);
3998 tree decl, t;
3999
4000 decl = build_decl (DECL_SOURCE_LOCATION (orig_decl),
4001 TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
4002 TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
4003 TREE_READONLY (decl) = TREE_READONLY (orig_decl);
4004 DECL_ARTIFICIAL (decl) = 1;
4005 SET_DECL_TEMPLATE_PARM_P (decl);
4006
4007 t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
4008 TEMPLATE_PARM_LEVEL (index) - levels,
4009 TEMPLATE_PARM_ORIG_LEVEL (index),
4010 decl, type);
4011 TEMPLATE_PARM_DESCENDANTS (index) = t;
4012 TEMPLATE_PARM_PARAMETER_PACK (t)
4013 = TEMPLATE_PARM_PARAMETER_PACK (index);
4014
4015 /* Template template parameters need this. */
4016 if (TREE_CODE (decl) == TEMPLATE_DECL)
4017 {
4018 DECL_TEMPLATE_RESULT (decl)
4019 = build_decl (DECL_SOURCE_LOCATION (decl),
4020 TYPE_DECL, DECL_NAME (decl), type);
4021 DECL_ARTIFICIAL (DECL_TEMPLATE_RESULT (decl)) = true;
4022 DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
4023 (DECL_TEMPLATE_PARMS (orig_decl), args, complain);
4024 }
4025 }
4026
4027 return TEMPLATE_PARM_DESCENDANTS (index);
4028 }
4029
4030 /* Process information from new template parameter PARM and append it
4031 to the LIST being built. This new parameter is a non-type
4032 parameter iff IS_NON_TYPE is true. This new parameter is a
4033 parameter pack iff IS_PARAMETER_PACK is true. The location of PARM
4034 is in PARM_LOC. */
4035
4036 tree
4037 process_template_parm (tree list, location_t parm_loc, tree parm,
4038 bool is_non_type, bool is_parameter_pack)
4039 {
4040 tree decl = 0;
4041 int idx = 0;
4042
4043 gcc_assert (TREE_CODE (parm) == TREE_LIST);
4044 tree defval = TREE_PURPOSE (parm);
4045 tree constr = TREE_TYPE (parm);
4046
4047 if (list)
4048 {
4049 tree p = tree_last (list);
4050
4051 if (p && TREE_VALUE (p) != error_mark_node)
4052 {
4053 p = TREE_VALUE (p);
4054 if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
4055 idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
4056 else
4057 idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
4058 }
4059
4060 ++idx;
4061 }
4062
4063 if (is_non_type)
4064 {
4065 parm = TREE_VALUE (parm);
4066
4067 SET_DECL_TEMPLATE_PARM_P (parm);
4068
4069 if (TREE_TYPE (parm) != error_mark_node)
4070 {
4071 /* [temp.param]
4072
4073 The top-level cv-qualifiers on the template-parameter are
4074 ignored when determining its type. */
4075 TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
4076 if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
4077 TREE_TYPE (parm) = error_mark_node;
4078 else if (uses_parameter_packs (TREE_TYPE (parm))
4079 && !is_parameter_pack
4080 /* If we're in a nested template parameter list, the template
4081 template parameter could be a parameter pack. */
4082 && processing_template_parmlist == 1)
4083 {
4084 /* This template parameter is not a parameter pack, but it
4085 should be. Complain about "bare" parameter packs. */
4086 check_for_bare_parameter_packs (TREE_TYPE (parm));
4087
4088 /* Recover by calling this a parameter pack. */
4089 is_parameter_pack = true;
4090 }
4091 }
4092
4093 /* A template parameter is not modifiable. */
4094 TREE_CONSTANT (parm) = 1;
4095 TREE_READONLY (parm) = 1;
4096 decl = build_decl (parm_loc,
4097 CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
4098 TREE_CONSTANT (decl) = 1;
4099 TREE_READONLY (decl) = 1;
4100 DECL_INITIAL (parm) = DECL_INITIAL (decl)
4101 = build_template_parm_index (idx, processing_template_decl,
4102 processing_template_decl,
4103 decl, TREE_TYPE (parm));
4104
4105 TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
4106 = is_parameter_pack;
4107 }
4108 else
4109 {
4110 tree t;
4111 parm = TREE_VALUE (TREE_VALUE (parm));
4112
4113 if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
4114 {
4115 t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
4116 /* This is for distinguishing between real templates and template
4117 template parameters */
4118 TREE_TYPE (parm) = t;
4119 TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
4120 decl = parm;
4121 }
4122 else
4123 {
4124 t = cxx_make_type (TEMPLATE_TYPE_PARM);
4125 /* parm is either IDENTIFIER_NODE or NULL_TREE. */
4126 decl = build_decl (parm_loc,
4127 TYPE_DECL, parm, t);
4128 }
4129
4130 TYPE_NAME (t) = decl;
4131 TYPE_STUB_DECL (t) = decl;
4132 parm = decl;
4133 TEMPLATE_TYPE_PARM_INDEX (t)
4134 = build_template_parm_index (idx, processing_template_decl,
4135 processing_template_decl,
4136 decl, TREE_TYPE (parm));
4137 TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
4138 TYPE_CANONICAL (t) = canonical_type_parameter (t);
4139 }
4140 DECL_ARTIFICIAL (decl) = 1;
4141 SET_DECL_TEMPLATE_PARM_P (decl);
4142
4143 /* Build requirements for the type/template parameter.
4144 This must be done after SET_DECL_TEMPLATE_PARM_P or
4145 process_template_parm could fail. */
4146 tree reqs = finish_shorthand_constraint (parm, constr);
4147
4148 pushdecl (decl);
4149
4150 /* Build the parameter node linking the parameter declaration,
4151 its default argument (if any), and its constraints (if any). */
4152 parm = build_tree_list (defval, parm);
4153 TEMPLATE_PARM_CONSTRAINTS (parm) = reqs;
4154
4155 return chainon (list, parm);
4156 }
4157
4158 /* The end of a template parameter list has been reached. Process the
4159 tree list into a parameter vector, converting each parameter into a more
4160 useful form. Type parameters are saved as IDENTIFIER_NODEs, and others
4161 as PARM_DECLs. */
4162
4163 tree
4164 end_template_parm_list (tree parms)
4165 {
4166 int nparms;
4167 tree parm, next;
4168 tree saved_parmlist = make_tree_vec (list_length (parms));
4169
4170 /* Pop the dummy parameter level and add the real one. */
4171 current_template_parms = TREE_CHAIN (current_template_parms);
4172
4173 current_template_parms
4174 = tree_cons (size_int (processing_template_decl),
4175 saved_parmlist, current_template_parms);
4176
4177 for (parm = parms, nparms = 0; parm; parm = next, nparms++)
4178 {
4179 next = TREE_CHAIN (parm);
4180 TREE_VEC_ELT (saved_parmlist, nparms) = parm;
4181 TREE_CHAIN (parm) = NULL_TREE;
4182 }
4183
4184 --processing_template_parmlist;
4185
4186 return saved_parmlist;
4187 }
4188
4189 // Explicitly indicate the end of the template parameter list. We assume
4190 // that the current template parameters have been constructed and/or
4191 // managed explicitly, as when creating new template template parameters
4192 // from a shorthand constraint.
4193 void
4194 end_template_parm_list ()
4195 {
4196 --processing_template_parmlist;
4197 }
4198
4199 /* end_template_decl is called after a template declaration is seen. */
4200
4201 void
4202 end_template_decl (void)
4203 {
4204 reset_specialization ();
4205
4206 if (! processing_template_decl)
4207 return;
4208
4209 /* This matches the pushlevel in begin_template_parm_list. */
4210 finish_scope ();
4211
4212 --processing_template_decl;
4213 current_template_parms = TREE_CHAIN (current_template_parms);
4214 }
4215
4216 /* Takes a TREE_LIST representing a template parameter and convert it
4217 into an argument suitable to be passed to the type substitution
4218 functions. Note that If the TREE_LIST contains an error_mark
4219 node, the returned argument is error_mark_node. */
4220
4221 tree
4222 template_parm_to_arg (tree t)
4223 {
4224
4225 if (t == NULL_TREE
4226 || TREE_CODE (t) != TREE_LIST)
4227 return t;
4228
4229 if (error_operand_p (TREE_VALUE (t)))
4230 return error_mark_node;
4231
4232 t = TREE_VALUE (t);
4233
4234 if (TREE_CODE (t) == TYPE_DECL
4235 || TREE_CODE (t) == TEMPLATE_DECL)
4236 {
4237 t = TREE_TYPE (t);
4238
4239 if (TEMPLATE_TYPE_PARAMETER_PACK (t))
4240 {
4241 /* Turn this argument into a TYPE_ARGUMENT_PACK
4242 with a single element, which expands T. */
4243 tree vec = make_tree_vec (1);
4244 if (CHECKING_P)
4245 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (vec, TREE_VEC_LENGTH (vec));
4246
4247 TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
4248
4249 t = cxx_make_type (TYPE_ARGUMENT_PACK);
4250 SET_ARGUMENT_PACK_ARGS (t, vec);
4251 }
4252 }
4253 else
4254 {
4255 t = DECL_INITIAL (t);
4256
4257 if (TEMPLATE_PARM_PARAMETER_PACK (t))
4258 {
4259 /* Turn this argument into a NONTYPE_ARGUMENT_PACK
4260 with a single element, which expands T. */
4261 tree vec = make_tree_vec (1);
4262 tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
4263 if (CHECKING_P)
4264 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (vec, TREE_VEC_LENGTH (vec));
4265
4266 t = convert_from_reference (t);
4267 TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
4268
4269 t = make_node (NONTYPE_ARGUMENT_PACK);
4270 SET_ARGUMENT_PACK_ARGS (t, vec);
4271 TREE_TYPE (t) = type;
4272 }
4273 else
4274 t = convert_from_reference (t);
4275 }
4276 return t;
4277 }
4278
4279 /* Given a set of template parameters, return them as a set of template
4280 arguments. The template parameters are represented as a TREE_VEC, in
4281 the form documented in cp-tree.h for template arguments. */
4282
4283 static tree
4284 template_parms_to_args (tree parms)
4285 {
4286 tree header;
4287 tree args = NULL_TREE;
4288 int length = TMPL_PARMS_DEPTH (parms);
4289 int l = length;
4290
4291 /* If there is only one level of template parameters, we do not
4292 create a TREE_VEC of TREE_VECs. Instead, we return a single
4293 TREE_VEC containing the arguments. */
4294 if (length > 1)
4295 args = make_tree_vec (length);
4296
4297 for (header = parms; header; header = TREE_CHAIN (header))
4298 {
4299 tree a = copy_node (TREE_VALUE (header));
4300 int i;
4301
4302 TREE_TYPE (a) = NULL_TREE;
4303 for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
4304 TREE_VEC_ELT (a, i) = template_parm_to_arg (TREE_VEC_ELT (a, i));
4305
4306 if (CHECKING_P)
4307 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (a, TREE_VEC_LENGTH (a));
4308
4309 if (length > 1)
4310 TREE_VEC_ELT (args, --l) = a;
4311 else
4312 args = a;
4313 }
4314
4315 return args;
4316 }
4317
4318 /* Within the declaration of a template, return the currently active
4319 template parameters as an argument TREE_VEC. */
4320
4321 static tree
4322 current_template_args (void)
4323 {
4324 return template_parms_to_args (current_template_parms);
4325 }
4326
4327 /* Update the declared TYPE by doing any lookups which were thought to be
4328 dependent, but are not now that we know the SCOPE of the declarator. */
4329
4330 tree
4331 maybe_update_decl_type (tree orig_type, tree scope)
4332 {
4333 tree type = orig_type;
4334
4335 if (type == NULL_TREE)
4336 return type;
4337
4338 if (TREE_CODE (orig_type) == TYPE_DECL)
4339 type = TREE_TYPE (type);
4340
4341 if (scope && TYPE_P (scope) && dependent_type_p (scope)
4342 && dependent_type_p (type)
4343 /* Don't bother building up the args in this case. */
4344 && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
4345 {
4346 /* tsubst in the args corresponding to the template parameters,
4347 including auto if present. Most things will be unchanged, but
4348 make_typename_type and tsubst_qualified_id will resolve
4349 TYPENAME_TYPEs and SCOPE_REFs that were previously dependent. */
4350 tree args = current_template_args ();
4351 tree auto_node = type_uses_auto (type);
4352 tree pushed;
4353 if (auto_node)
4354 {
4355 tree auto_vec = make_tree_vec (1);
4356 TREE_VEC_ELT (auto_vec, 0) = auto_node;
4357 args = add_to_template_args (args, auto_vec);
4358 }
4359 pushed = push_scope (scope);
4360 type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
4361 if (pushed)
4362 pop_scope (scope);
4363 }
4364
4365 if (type == error_mark_node)
4366 return orig_type;
4367
4368 if (TREE_CODE (orig_type) == TYPE_DECL)
4369 {
4370 if (same_type_p (type, TREE_TYPE (orig_type)))
4371 type = orig_type;
4372 else
4373 type = TYPE_NAME (type);
4374 }
4375 return type;
4376 }
4377
4378 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
4379 template PARMS and constraints, CONSTR. If MEMBER_TEMPLATE_P is true,
4380 the new template is a member template. */
4381
4382 tree
4383 build_template_decl (tree decl, tree parms, bool member_template_p)
4384 {
4385 tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
4386 DECL_TEMPLATE_PARMS (tmpl) = parms;
4387 DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
4388 DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
4389 DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
4390
4391 return tmpl;
4392 }
4393
4394 struct template_parm_data
4395 {
4396 /* The level of the template parameters we are currently
4397 processing. */
4398 int level;
4399
4400 /* The index of the specialization argument we are currently
4401 processing. */
4402 int current_arg;
4403
4404 /* An array whose size is the number of template parameters. The
4405 elements are nonzero if the parameter has been used in any one
4406 of the arguments processed so far. */
4407 int* parms;
4408
4409 /* An array whose size is the number of template arguments. The
4410 elements are nonzero if the argument makes use of template
4411 parameters of this level. */
4412 int* arg_uses_template_parms;
4413 };
4414
4415 /* Subroutine of push_template_decl used to see if each template
4416 parameter in a partial specialization is used in the explicit
4417 argument list. If T is of the LEVEL given in DATA (which is
4418 treated as a template_parm_data*), then DATA->PARMS is marked
4419 appropriately. */
4420
4421 static int
4422 mark_template_parm (tree t, void* data)
4423 {
4424 int level;
4425 int idx;
4426 struct template_parm_data* tpd = (struct template_parm_data*) data;
4427
4428 template_parm_level_and_index (t, &level, &idx);
4429
4430 if (level == tpd->level)
4431 {
4432 tpd->parms[idx] = 1;
4433 tpd->arg_uses_template_parms[tpd->current_arg] = 1;
4434 }
4435
4436 /* Return zero so that for_each_template_parm will continue the
4437 traversal of the tree; we want to mark *every* template parm. */
4438 return 0;
4439 }
4440
4441 /* Process the partial specialization DECL. */
4442
4443 static tree
4444 process_partial_specialization (tree decl)
4445 {
4446 tree type = TREE_TYPE (decl);
4447 tree tinfo = get_template_info (decl);
4448 tree maintmpl = TI_TEMPLATE (tinfo);
4449 tree specargs = TI_ARGS (tinfo);
4450 tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
4451 tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
4452 tree inner_parms;
4453 tree inst;
4454 int nargs = TREE_VEC_LENGTH (inner_args);
4455 int ntparms;
4456 int i;
4457 bool did_error_intro = false;
4458 struct template_parm_data tpd;
4459 struct template_parm_data tpd2;
4460
4461 gcc_assert (current_template_parms);
4462
4463 /* A concept cannot be specialized. */
4464 if (flag_concepts && variable_concept_p (maintmpl))
4465 {
4466 error ("specialization of variable concept %q#D", maintmpl);
4467 return error_mark_node;
4468 }
4469
4470 inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
4471 ntparms = TREE_VEC_LENGTH (inner_parms);
4472
4473 /* We check that each of the template parameters given in the
4474 partial specialization is used in the argument list to the
4475 specialization. For example:
4476
4477 template <class T> struct S;
4478 template <class T> struct S<T*>;
4479
4480 The second declaration is OK because `T*' uses the template
4481 parameter T, whereas
4482
4483 template <class T> struct S<int>;
4484
4485 is no good. Even trickier is:
4486
4487 template <class T>
4488 struct S1
4489 {
4490 template <class U>
4491 struct S2;
4492 template <class U>
4493 struct S2<T>;
4494 };
4495
4496 The S2<T> declaration is actually invalid; it is a
4497 full-specialization. Of course,
4498
4499 template <class U>
4500 struct S2<T (*)(U)>;
4501
4502 or some such would have been OK. */
4503 tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
4504 tpd.parms = XALLOCAVEC (int, ntparms);
4505 memset (tpd.parms, 0, sizeof (int) * ntparms);
4506
4507 tpd.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4508 memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
4509 for (i = 0; i < nargs; ++i)
4510 {
4511 tpd.current_arg = i;
4512 for_each_template_parm (TREE_VEC_ELT (inner_args, i),
4513 &mark_template_parm,
4514 &tpd,
4515 NULL,
4516 /*include_nondeduced_p=*/false);
4517 }
4518 for (i = 0; i < ntparms; ++i)
4519 if (tpd.parms[i] == 0)
4520 {
4521 /* One of the template parms was not used in a deduced context in the
4522 specialization. */
4523 if (!did_error_intro)
4524 {
4525 error ("template parameters not deducible in "
4526 "partial specialization:");
4527 did_error_intro = true;
4528 }
4529
4530 inform (input_location, " %qD",
4531 TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
4532 }
4533
4534 if (did_error_intro)
4535 return error_mark_node;
4536
4537 /* [temp.class.spec]
4538
4539 The argument list of the specialization shall not be identical to
4540 the implicit argument list of the primary template. */
4541 tree main_args
4542 = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (maintmpl)));
4543 if (comp_template_args (inner_args, INNERMOST_TEMPLATE_ARGS (main_args))
4544 && (!flag_concepts
4545 || !strictly_subsumes (current_template_constraints (),
4546 get_constraints (maintmpl))))
4547 {
4548 if (!flag_concepts)
4549 error ("partial specialization %q+D does not specialize "
4550 "any template arguments", decl);
4551 else
4552 error ("partial specialization %q+D does not specialize any "
4553 "template arguments and is not more constrained than", decl);
4554 inform (DECL_SOURCE_LOCATION (maintmpl), "primary template here");
4555 }
4556
4557 /* A partial specialization that replaces multiple parameters of the
4558 primary template with a pack expansion is less specialized for those
4559 parameters. */
4560 if (nargs < DECL_NTPARMS (maintmpl))
4561 {
4562 error ("partial specialization is not more specialized than the "
4563 "primary template because it replaces multiple parameters "
4564 "with a pack expansion");
4565 inform (DECL_SOURCE_LOCATION (maintmpl), "primary template here");
4566 return decl;
4567 }
4568
4569 /* [temp.class.spec]
4570
4571 A partially specialized non-type argument expression shall not
4572 involve template parameters of the partial specialization except
4573 when the argument expression is a simple identifier.
4574
4575 The type of a template parameter corresponding to a specialized
4576 non-type argument shall not be dependent on a parameter of the
4577 specialization.
4578
4579 Also, we verify that pack expansions only occur at the
4580 end of the argument list. */
4581 gcc_assert (nargs == DECL_NTPARMS (maintmpl));
4582 tpd2.parms = 0;
4583 for (i = 0; i < nargs; ++i)
4584 {
4585 tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
4586 tree arg = TREE_VEC_ELT (inner_args, i);
4587 tree packed_args = NULL_TREE;
4588 int j, len = 1;
4589
4590 if (ARGUMENT_PACK_P (arg))
4591 {
4592 /* Extract the arguments from the argument pack. We'll be
4593 iterating over these in the following loop. */
4594 packed_args = ARGUMENT_PACK_ARGS (arg);
4595 len = TREE_VEC_LENGTH (packed_args);
4596 }
4597
4598 for (j = 0; j < len; j++)
4599 {
4600 if (packed_args)
4601 /* Get the Jth argument in the parameter pack. */
4602 arg = TREE_VEC_ELT (packed_args, j);
4603
4604 if (PACK_EXPANSION_P (arg))
4605 {
4606 /* Pack expansions must come at the end of the
4607 argument list. */
4608 if ((packed_args && j < len - 1)
4609 || (!packed_args && i < nargs - 1))
4610 {
4611 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4612 error ("parameter pack argument %qE must be at the "
4613 "end of the template argument list", arg);
4614 else
4615 error ("parameter pack argument %qT must be at the "
4616 "end of the template argument list", arg);
4617 }
4618 }
4619
4620 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4621 /* We only care about the pattern. */
4622 arg = PACK_EXPANSION_PATTERN (arg);
4623
4624 if (/* These first two lines are the `non-type' bit. */
4625 !TYPE_P (arg)
4626 && TREE_CODE (arg) != TEMPLATE_DECL
4627 /* This next two lines are the `argument expression is not just a
4628 simple identifier' condition and also the `specialized
4629 non-type argument' bit. */
4630 && TREE_CODE (arg) != TEMPLATE_PARM_INDEX
4631 && !(REFERENCE_REF_P (arg)
4632 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_PARM_INDEX))
4633 {
4634 if ((!packed_args && tpd.arg_uses_template_parms[i])
4635 || (packed_args && uses_template_parms (arg)))
4636 error ("template argument %qE involves template parameter(s)",
4637 arg);
4638 else
4639 {
4640 /* Look at the corresponding template parameter,
4641 marking which template parameters its type depends
4642 upon. */
4643 tree type = TREE_TYPE (parm);
4644
4645 if (!tpd2.parms)
4646 {
4647 /* We haven't yet initialized TPD2. Do so now. */
4648 tpd2.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4649 /* The number of parameters here is the number in the
4650 main template, which, as checked in the assertion
4651 above, is NARGS. */
4652 tpd2.parms = XALLOCAVEC (int, nargs);
4653 tpd2.level =
4654 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
4655 }
4656
4657 /* Mark the template parameters. But this time, we're
4658 looking for the template parameters of the main
4659 template, not in the specialization. */
4660 tpd2.current_arg = i;
4661 tpd2.arg_uses_template_parms[i] = 0;
4662 memset (tpd2.parms, 0, sizeof (int) * nargs);
4663 for_each_template_parm (type,
4664 &mark_template_parm,
4665 &tpd2,
4666 NULL,
4667 /*include_nondeduced_p=*/false);
4668
4669 if (tpd2.arg_uses_template_parms [i])
4670 {
4671 /* The type depended on some template parameters.
4672 If they are fully specialized in the
4673 specialization, that's OK. */
4674 int j;
4675 int count = 0;
4676 for (j = 0; j < nargs; ++j)
4677 if (tpd2.parms[j] != 0
4678 && tpd.arg_uses_template_parms [j])
4679 ++count;
4680 if (count != 0)
4681 error_n (input_location, count,
4682 "type %qT of template argument %qE depends "
4683 "on a template parameter",
4684 "type %qT of template argument %qE depends "
4685 "on template parameters",
4686 type,
4687 arg);
4688 }
4689 }
4690 }
4691 }
4692 }
4693
4694 /* We should only get here once. */
4695 if (TREE_CODE (decl) == TYPE_DECL)
4696 gcc_assert (!COMPLETE_TYPE_P (type));
4697
4698 // Build the template decl.
4699 tree tmpl = build_template_decl (decl, current_template_parms,
4700 DECL_MEMBER_TEMPLATE_P (maintmpl));
4701 TREE_TYPE (tmpl) = type;
4702 DECL_TEMPLATE_RESULT (tmpl) = decl;
4703 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4704 DECL_TEMPLATE_INFO (tmpl) = build_template_info (maintmpl, specargs);
4705 DECL_PRIMARY_TEMPLATE (tmpl) = maintmpl;
4706
4707 if (VAR_P (decl))
4708 /* We didn't register this in check_explicit_specialization so we could
4709 wait until the constraints were set. */
4710 decl = register_specialization (decl, maintmpl, specargs, false, 0);
4711 else
4712 associate_classtype_constraints (type);
4713
4714 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
4715 = tree_cons (specargs, tmpl,
4716 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
4717 TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
4718
4719 for (inst = DECL_TEMPLATE_INSTANTIATIONS (maintmpl); inst;
4720 inst = TREE_CHAIN (inst))
4721 {
4722 tree instance = TREE_VALUE (inst);
4723 if (TYPE_P (instance)
4724 ? (COMPLETE_TYPE_P (instance)
4725 && CLASSTYPE_IMPLICIT_INSTANTIATION (instance))
4726 : DECL_TEMPLATE_INSTANTIATION (instance))
4727 {
4728 tree spec = most_specialized_partial_spec (instance, tf_none);
4729 tree inst_decl = (DECL_P (instance)
4730 ? instance : TYPE_NAME (instance));
4731 if (!spec)
4732 /* OK */;
4733 else if (spec == error_mark_node)
4734 permerror (input_location,
4735 "declaration of %qD ambiguates earlier template "
4736 "instantiation for %qD", decl, inst_decl);
4737 else if (TREE_VALUE (spec) == tmpl)
4738 permerror (input_location,
4739 "partial specialization of %qD after instantiation "
4740 "of %qD", decl, inst_decl);
4741 }
4742 }
4743
4744 return decl;
4745 }
4746
4747 /* PARM is a template parameter of some form; return the corresponding
4748 TEMPLATE_PARM_INDEX. */
4749
4750 static tree
4751 get_template_parm_index (tree parm)
4752 {
4753 if (TREE_CODE (parm) == PARM_DECL
4754 || TREE_CODE (parm) == CONST_DECL)
4755 parm = DECL_INITIAL (parm);
4756 else if (TREE_CODE (parm) == TYPE_DECL
4757 || TREE_CODE (parm) == TEMPLATE_DECL)
4758 parm = TREE_TYPE (parm);
4759 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
4760 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM
4761 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
4762 parm = TEMPLATE_TYPE_PARM_INDEX (parm);
4763 gcc_assert (TREE_CODE (parm) == TEMPLATE_PARM_INDEX);
4764 return parm;
4765 }
4766
4767 /* Subroutine of fixed_parameter_pack_p below. Look for any template
4768 parameter packs used by the template parameter PARM. */
4769
4770 static void
4771 fixed_parameter_pack_p_1 (tree parm, struct find_parameter_pack_data *ppd)
4772 {
4773 /* A type parm can't refer to another parm. */
4774 if (TREE_CODE (parm) == TYPE_DECL)
4775 return;
4776 else if (TREE_CODE (parm) == PARM_DECL)
4777 {
4778 cp_walk_tree (&TREE_TYPE (parm), &find_parameter_packs_r,
4779 ppd, ppd->visited);
4780 return;
4781 }
4782
4783 gcc_assert (TREE_CODE (parm) == TEMPLATE_DECL);
4784
4785 tree vec = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (parm));
4786 for (int i = 0; i < TREE_VEC_LENGTH (vec); ++i)
4787 fixed_parameter_pack_p_1 (TREE_VALUE (TREE_VEC_ELT (vec, i)), ppd);
4788 }
4789
4790 /* PARM is a template parameter pack. Return any parameter packs used in
4791 its type or the type of any of its template parameters. If there are
4792 any such packs, it will be instantiated into a fixed template parameter
4793 list by partial instantiation rather than be fully deduced. */
4794
4795 tree
4796 fixed_parameter_pack_p (tree parm)
4797 {
4798 /* This can only be true in a member template. */
4799 if (TEMPLATE_PARM_ORIG_LEVEL (get_template_parm_index (parm)) < 2)
4800 return NULL_TREE;
4801 /* This can only be true for a parameter pack. */
4802 if (!template_parameter_pack_p (parm))
4803 return NULL_TREE;
4804 /* A type parm can't refer to another parm. */
4805 if (TREE_CODE (parm) == TYPE_DECL)
4806 return NULL_TREE;
4807
4808 tree parameter_packs = NULL_TREE;
4809 struct find_parameter_pack_data ppd;
4810 ppd.parameter_packs = &parameter_packs;
4811 ppd.visited = new hash_set<tree>;
4812 ppd.type_pack_expansion_p = false;
4813
4814 fixed_parameter_pack_p_1 (parm, &ppd);
4815
4816 delete ppd.visited;
4817 return parameter_packs;
4818 }
4819
4820 /* Check that a template declaration's use of default arguments and
4821 parameter packs is not invalid. Here, PARMS are the template
4822 parameters. IS_PRIMARY is true if DECL is the thing declared by
4823 a primary template. IS_PARTIAL is true if DECL is a partial
4824 specialization.
4825
4826 IS_FRIEND_DECL is nonzero if DECL is a friend function template
4827 declaration (but not a definition); 1 indicates a declaration, 2
4828 indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
4829 emitted for extraneous default arguments.
4830
4831 Returns TRUE if there were no errors found, FALSE otherwise. */
4832
4833 bool
4834 check_default_tmpl_args (tree decl, tree parms, bool is_primary,
4835 bool is_partial, int is_friend_decl)
4836 {
4837 const char *msg;
4838 int last_level_to_check;
4839 tree parm_level;
4840 bool no_errors = true;
4841
4842 /* [temp.param]
4843
4844 A default template-argument shall not be specified in a
4845 function template declaration or a function template definition, nor
4846 in the template-parameter-list of the definition of a member of a
4847 class template. */
4848
4849 if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL
4850 || (TREE_CODE (decl) == FUNCTION_DECL && DECL_LOCAL_FUNCTION_P (decl)))
4851 /* You can't have a function template declaration in a local
4852 scope, nor you can you define a member of a class template in a
4853 local scope. */
4854 return true;
4855
4856 if ((TREE_CODE (decl) == TYPE_DECL
4857 && TREE_TYPE (decl)
4858 && LAMBDA_TYPE_P (TREE_TYPE (decl)))
4859 || (TREE_CODE (decl) == FUNCTION_DECL
4860 && LAMBDA_FUNCTION_P (decl)))
4861 /* A lambda doesn't have an explicit declaration; don't complain
4862 about the parms of the enclosing class. */
4863 return true;
4864
4865 if (current_class_type
4866 && !TYPE_BEING_DEFINED (current_class_type)
4867 && DECL_LANG_SPECIFIC (decl)
4868 && DECL_DECLARES_FUNCTION_P (decl)
4869 /* If this is either a friend defined in the scope of the class
4870 or a member function. */
4871 && (DECL_FUNCTION_MEMBER_P (decl)
4872 ? same_type_p (DECL_CONTEXT (decl), current_class_type)
4873 : DECL_FRIEND_CONTEXT (decl)
4874 ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
4875 : false)
4876 /* And, if it was a member function, it really was defined in
4877 the scope of the class. */
4878 && (!DECL_FUNCTION_MEMBER_P (decl)
4879 || DECL_INITIALIZED_IN_CLASS_P (decl)))
4880 /* We already checked these parameters when the template was
4881 declared, so there's no need to do it again now. This function
4882 was defined in class scope, but we're processing its body now
4883 that the class is complete. */
4884 return true;
4885
4886 /* Core issue 226 (C++0x only): the following only applies to class
4887 templates. */
4888 if (is_primary
4889 && ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL))
4890 {
4891 /* [temp.param]
4892
4893 If a template-parameter has a default template-argument, all
4894 subsequent template-parameters shall have a default
4895 template-argument supplied. */
4896 for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
4897 {
4898 tree inner_parms = TREE_VALUE (parm_level);
4899 int ntparms = TREE_VEC_LENGTH (inner_parms);
4900 int seen_def_arg_p = 0;
4901 int i;
4902
4903 for (i = 0; i < ntparms; ++i)
4904 {
4905 tree parm = TREE_VEC_ELT (inner_parms, i);
4906
4907 if (parm == error_mark_node)
4908 continue;
4909
4910 if (TREE_PURPOSE (parm))
4911 seen_def_arg_p = 1;
4912 else if (seen_def_arg_p
4913 && !template_parameter_pack_p (TREE_VALUE (parm)))
4914 {
4915 error ("no default argument for %qD", TREE_VALUE (parm));
4916 /* For better subsequent error-recovery, we indicate that
4917 there should have been a default argument. */
4918 TREE_PURPOSE (parm) = error_mark_node;
4919 no_errors = false;
4920 }
4921 else if (!is_partial
4922 && !is_friend_decl
4923 /* Don't complain about an enclosing partial
4924 specialization. */
4925 && parm_level == parms
4926 && TREE_CODE (decl) == TYPE_DECL
4927 && i < ntparms - 1
4928 && template_parameter_pack_p (TREE_VALUE (parm))
4929 /* A fixed parameter pack will be partially
4930 instantiated into a fixed length list. */
4931 && !fixed_parameter_pack_p (TREE_VALUE (parm)))
4932 {
4933 /* A primary class template can only have one
4934 parameter pack, at the end of the template
4935 parameter list. */
4936
4937 error ("parameter pack %q+D must be at the end of the"
4938 " template parameter list", TREE_VALUE (parm));
4939
4940 TREE_VALUE (TREE_VEC_ELT (inner_parms, i))
4941 = error_mark_node;
4942 no_errors = false;
4943 }
4944 }
4945 }
4946 }
4947
4948 if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
4949 || is_partial
4950 || !is_primary
4951 || is_friend_decl)
4952 /* For an ordinary class template, default template arguments are
4953 allowed at the innermost level, e.g.:
4954 template <class T = int>
4955 struct S {};
4956 but, in a partial specialization, they're not allowed even
4957 there, as we have in [temp.class.spec]:
4958
4959 The template parameter list of a specialization shall not
4960 contain default template argument values.
4961
4962 So, for a partial specialization, or for a function template
4963 (in C++98/C++03), we look at all of them. */
4964 ;
4965 else
4966 /* But, for a primary class template that is not a partial
4967 specialization we look at all template parameters except the
4968 innermost ones. */
4969 parms = TREE_CHAIN (parms);
4970
4971 /* Figure out what error message to issue. */
4972 if (is_friend_decl == 2)
4973 msg = G_("default template arguments may not be used in function template "
4974 "friend re-declaration");
4975 else if (is_friend_decl)
4976 msg = G_("default template arguments may not be used in function template "
4977 "friend declarations");
4978 else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
4979 msg = G_("default template arguments may not be used in function templates "
4980 "without -std=c++11 or -std=gnu++11");
4981 else if (is_partial)
4982 msg = G_("default template arguments may not be used in "
4983 "partial specializations");
4984 else if (current_class_type && CLASSTYPE_IS_TEMPLATE (current_class_type))
4985 msg = G_("default argument for template parameter for class enclosing %qD");
4986 else
4987 /* Per [temp.param]/9, "A default template-argument shall not be
4988 specified in the template-parameter-lists of the definition of
4989 a member of a class template that appears outside of the member's
4990 class.", thus if we aren't handling a member of a class template
4991 there is no need to examine the parameters. */
4992 return true;
4993
4994 if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
4995 /* If we're inside a class definition, there's no need to
4996 examine the parameters to the class itself. On the one
4997 hand, they will be checked when the class is defined, and,
4998 on the other, default arguments are valid in things like:
4999 template <class T = double>
5000 struct S { template <class U> void f(U); };
5001 Here the default argument for `S' has no bearing on the
5002 declaration of `f'. */
5003 last_level_to_check = template_class_depth (current_class_type) + 1;
5004 else
5005 /* Check everything. */
5006 last_level_to_check = 0;
5007
5008 for (parm_level = parms;
5009 parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
5010 parm_level = TREE_CHAIN (parm_level))
5011 {
5012 tree inner_parms = TREE_VALUE (parm_level);
5013 int i;
5014 int ntparms;
5015
5016 ntparms = TREE_VEC_LENGTH (inner_parms);
5017 for (i = 0; i < ntparms; ++i)
5018 {
5019 if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
5020 continue;
5021
5022 if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
5023 {
5024 if (msg)
5025 {
5026 no_errors = false;
5027 if (is_friend_decl == 2)
5028 return no_errors;
5029
5030 error (msg, decl);
5031 msg = 0;
5032 }
5033
5034 /* Clear out the default argument so that we are not
5035 confused later. */
5036 TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
5037 }
5038 }
5039
5040 /* At this point, if we're still interested in issuing messages,
5041 they must apply to classes surrounding the object declared. */
5042 if (msg)
5043 msg = G_("default argument for template parameter for class "
5044 "enclosing %qD");
5045 }
5046
5047 return no_errors;
5048 }
5049
5050 /* Worker for push_template_decl_real, called via
5051 for_each_template_parm. DATA is really an int, indicating the
5052 level of the parameters we are interested in. If T is a template
5053 parameter of that level, return nonzero. */
5054
5055 static int
5056 template_parm_this_level_p (tree t, void* data)
5057 {
5058 int this_level = *(int *)data;
5059 int level;
5060
5061 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
5062 level = TEMPLATE_PARM_LEVEL (t);
5063 else
5064 level = TEMPLATE_TYPE_LEVEL (t);
5065 return level == this_level;
5066 }
5067
5068 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
5069 parameters given by current_template_args, or reuses a
5070 previously existing one, if appropriate. Returns the DECL, or an
5071 equivalent one, if it is replaced via a call to duplicate_decls.
5072
5073 If IS_FRIEND is true, DECL is a friend declaration. */
5074
5075 tree
5076 push_template_decl_real (tree decl, bool is_friend)
5077 {
5078 tree tmpl;
5079 tree args;
5080 tree info;
5081 tree ctx;
5082 bool is_primary;
5083 bool is_partial;
5084 int new_template_p = 0;
5085 /* True if the template is a member template, in the sense of
5086 [temp.mem]. */
5087 bool member_template_p = false;
5088
5089 if (decl == error_mark_node || !current_template_parms)
5090 return error_mark_node;
5091
5092 /* See if this is a partial specialization. */
5093 is_partial = ((DECL_IMPLICIT_TYPEDEF_P (decl)
5094 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
5095 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
5096 || (VAR_P (decl)
5097 && DECL_LANG_SPECIFIC (decl)
5098 && DECL_TEMPLATE_SPECIALIZATION (decl)
5099 && TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (decl))));
5100
5101 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
5102 is_friend = true;
5103
5104 if (is_friend)
5105 /* For a friend, we want the context of the friend function, not
5106 the type of which it is a friend. */
5107 ctx = CP_DECL_CONTEXT (decl);
5108 else if (CP_DECL_CONTEXT (decl)
5109 && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
5110 /* In the case of a virtual function, we want the class in which
5111 it is defined. */
5112 ctx = CP_DECL_CONTEXT (decl);
5113 else
5114 /* Otherwise, if we're currently defining some class, the DECL
5115 is assumed to be a member of the class. */
5116 ctx = current_scope ();
5117
5118 if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
5119 ctx = NULL_TREE;
5120
5121 if (!DECL_CONTEXT (decl))
5122 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
5123
5124 /* See if this is a primary template. */
5125 if (is_friend && ctx
5126 && uses_template_parms_level (ctx, processing_template_decl))
5127 /* A friend template that specifies a class context, i.e.
5128 template <typename T> friend void A<T>::f();
5129 is not primary. */
5130 is_primary = false;
5131 else if (TREE_CODE (decl) == TYPE_DECL
5132 && LAMBDA_TYPE_P (TREE_TYPE (decl)))
5133 is_primary = false;
5134 else
5135 is_primary = template_parm_scope_p ();
5136
5137 if (is_primary)
5138 {
5139 warning (OPT_Wtemplates, "template %qD declared", decl);
5140
5141 if (DECL_CLASS_SCOPE_P (decl))
5142 member_template_p = true;
5143 if (TREE_CODE (decl) == TYPE_DECL
5144 && anon_aggrname_p (DECL_NAME (decl)))
5145 {
5146 error ("template class without a name");
5147 return error_mark_node;
5148 }
5149 else if (TREE_CODE (decl) == FUNCTION_DECL)
5150 {
5151 if (member_template_p)
5152 {
5153 if (DECL_OVERRIDE_P (decl) || DECL_FINAL_P (decl))
5154 error ("member template %qD may not have virt-specifiers", decl);
5155 }
5156 if (DECL_DESTRUCTOR_P (decl))
5157 {
5158 /* [temp.mem]
5159
5160 A destructor shall not be a member template. */
5161 error ("destructor %qD declared as member template", decl);
5162 return error_mark_node;
5163 }
5164 if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
5165 && (!prototype_p (TREE_TYPE (decl))
5166 || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
5167 || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
5168 || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
5169 == void_list_node)))
5170 {
5171 /* [basic.stc.dynamic.allocation]
5172
5173 An allocation function can be a function
5174 template. ... Template allocation functions shall
5175 have two or more parameters. */
5176 error ("invalid template declaration of %qD", decl);
5177 return error_mark_node;
5178 }
5179 }
5180 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
5181 && CLASS_TYPE_P (TREE_TYPE (decl)))
5182 /* OK */;
5183 else if (TREE_CODE (decl) == TYPE_DECL
5184 && TYPE_DECL_ALIAS_P (decl))
5185 /* alias-declaration */
5186 gcc_assert (!DECL_ARTIFICIAL (decl));
5187 else if (VAR_P (decl))
5188 /* C++14 variable template. */;
5189 else
5190 {
5191 error ("template declaration of %q#D", decl);
5192 return error_mark_node;
5193 }
5194 }
5195
5196 /* Check to see that the rules regarding the use of default
5197 arguments are not being violated. */
5198 check_default_tmpl_args (decl, current_template_parms,
5199 is_primary, is_partial, /*is_friend_decl=*/0);
5200
5201 /* Ensure that there are no parameter packs in the type of this
5202 declaration that have not been expanded. */
5203 if (TREE_CODE (decl) == FUNCTION_DECL)
5204 {
5205 /* Check each of the arguments individually to see if there are
5206 any bare parameter packs. */
5207 tree type = TREE_TYPE (decl);
5208 tree arg = DECL_ARGUMENTS (decl);
5209 tree argtype = TYPE_ARG_TYPES (type);
5210
5211 while (arg && argtype)
5212 {
5213 if (!DECL_PACK_P (arg)
5214 && check_for_bare_parameter_packs (TREE_TYPE (arg)))
5215 {
5216 /* This is a PARM_DECL that contains unexpanded parameter
5217 packs. We have already complained about this in the
5218 check_for_bare_parameter_packs call, so just replace
5219 these types with ERROR_MARK_NODE. */
5220 TREE_TYPE (arg) = error_mark_node;
5221 TREE_VALUE (argtype) = error_mark_node;
5222 }
5223
5224 arg = DECL_CHAIN (arg);
5225 argtype = TREE_CHAIN (argtype);
5226 }
5227
5228 /* Check for bare parameter packs in the return type and the
5229 exception specifiers. */
5230 if (check_for_bare_parameter_packs (TREE_TYPE (type)))
5231 /* Errors were already issued, set return type to int
5232 as the frontend doesn't expect error_mark_node as
5233 the return type. */
5234 TREE_TYPE (type) = integer_type_node;
5235 if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
5236 TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
5237 }
5238 else if (check_for_bare_parameter_packs ((TREE_CODE (decl) == TYPE_DECL
5239 && TYPE_DECL_ALIAS_P (decl))
5240 ? DECL_ORIGINAL_TYPE (decl)
5241 : TREE_TYPE (decl)))
5242 {
5243 TREE_TYPE (decl) = error_mark_node;
5244 return error_mark_node;
5245 }
5246
5247 if (is_partial)
5248 return process_partial_specialization (decl);
5249
5250 args = current_template_args ();
5251
5252 if (!ctx
5253 || TREE_CODE (ctx) == FUNCTION_DECL
5254 || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
5255 || (TREE_CODE (decl) == TYPE_DECL
5256 && LAMBDA_TYPE_P (TREE_TYPE (decl)))
5257 || (is_friend && !DECL_TEMPLATE_INFO (decl)))
5258 {
5259 if (DECL_LANG_SPECIFIC (decl)
5260 && DECL_TEMPLATE_INFO (decl)
5261 && DECL_TI_TEMPLATE (decl))
5262 tmpl = DECL_TI_TEMPLATE (decl);
5263 /* If DECL is a TYPE_DECL for a class-template, then there won't
5264 be DECL_LANG_SPECIFIC. The information equivalent to
5265 DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead. */
5266 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
5267 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
5268 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
5269 {
5270 /* Since a template declaration already existed for this
5271 class-type, we must be redeclaring it here. Make sure
5272 that the redeclaration is valid. */
5273 redeclare_class_template (TREE_TYPE (decl),
5274 current_template_parms,
5275 current_template_constraints ());
5276 /* We don't need to create a new TEMPLATE_DECL; just use the
5277 one we already had. */
5278 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
5279 }
5280 else
5281 {
5282 tmpl = build_template_decl (decl, current_template_parms,
5283 member_template_p);
5284 new_template_p = 1;
5285
5286 if (DECL_LANG_SPECIFIC (decl)
5287 && DECL_TEMPLATE_SPECIALIZATION (decl))
5288 {
5289 /* A specialization of a member template of a template
5290 class. */
5291 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
5292 DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
5293 DECL_TEMPLATE_INFO (decl) = NULL_TREE;
5294 }
5295 }
5296 }
5297 else
5298 {
5299 tree a, t, current, parms;
5300 int i;
5301 tree tinfo = get_template_info (decl);
5302
5303 if (!tinfo)
5304 {
5305 error ("template definition of non-template %q#D", decl);
5306 return error_mark_node;
5307 }
5308
5309 tmpl = TI_TEMPLATE (tinfo);
5310
5311 if (DECL_FUNCTION_TEMPLATE_P (tmpl)
5312 && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
5313 && DECL_TEMPLATE_SPECIALIZATION (decl)
5314 && DECL_MEMBER_TEMPLATE_P (tmpl))
5315 {
5316 tree new_tmpl;
5317
5318 /* The declaration is a specialization of a member
5319 template, declared outside the class. Therefore, the
5320 innermost template arguments will be NULL, so we
5321 replace them with the arguments determined by the
5322 earlier call to check_explicit_specialization. */
5323 args = DECL_TI_ARGS (decl);
5324
5325 new_tmpl
5326 = build_template_decl (decl, current_template_parms,
5327 member_template_p);
5328 DECL_TEMPLATE_RESULT (new_tmpl) = decl;
5329 TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
5330 DECL_TI_TEMPLATE (decl) = new_tmpl;
5331 SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
5332 DECL_TEMPLATE_INFO (new_tmpl)
5333 = build_template_info (tmpl, args);
5334
5335 register_specialization (new_tmpl,
5336 most_general_template (tmpl),
5337 args,
5338 is_friend, 0);
5339 return decl;
5340 }
5341
5342 /* Make sure the template headers we got make sense. */
5343
5344 parms = DECL_TEMPLATE_PARMS (tmpl);
5345 i = TMPL_PARMS_DEPTH (parms);
5346 if (TMPL_ARGS_DEPTH (args) != i)
5347 {
5348 error ("expected %d levels of template parms for %q#D, got %d",
5349 i, decl, TMPL_ARGS_DEPTH (args));
5350 DECL_INTERFACE_KNOWN (decl) = 1;
5351 return error_mark_node;
5352 }
5353 else
5354 for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
5355 {
5356 a = TMPL_ARGS_LEVEL (args, i);
5357 t = INNERMOST_TEMPLATE_PARMS (parms);
5358
5359 if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
5360 {
5361 if (current == decl)
5362 error ("got %d template parameters for %q#D",
5363 TREE_VEC_LENGTH (a), decl);
5364 else
5365 error ("got %d template parameters for %q#T",
5366 TREE_VEC_LENGTH (a), current);
5367 error (" but %d required", TREE_VEC_LENGTH (t));
5368 /* Avoid crash in import_export_decl. */
5369 DECL_INTERFACE_KNOWN (decl) = 1;
5370 return error_mark_node;
5371 }
5372
5373 if (current == decl)
5374 current = ctx;
5375 else if (current == NULL_TREE)
5376 /* Can happen in erroneous input. */
5377 break;
5378 else
5379 current = get_containing_scope (current);
5380 }
5381
5382 /* Check that the parms are used in the appropriate qualifying scopes
5383 in the declarator. */
5384 if (!comp_template_args
5385 (TI_ARGS (tinfo),
5386 TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
5387 {
5388 error ("\
5389 template arguments to %qD do not match original template %qD",
5390 decl, DECL_TEMPLATE_RESULT (tmpl));
5391 if (!uses_template_parms (TI_ARGS (tinfo)))
5392 inform (input_location, "use template<> for an explicit specialization");
5393 /* Avoid crash in import_export_decl. */
5394 DECL_INTERFACE_KNOWN (decl) = 1;
5395 return error_mark_node;
5396 }
5397 }
5398
5399 DECL_TEMPLATE_RESULT (tmpl) = decl;
5400 TREE_TYPE (tmpl) = TREE_TYPE (decl);
5401
5402 /* Push template declarations for global functions and types. Note
5403 that we do not try to push a global template friend declared in a
5404 template class; such a thing may well depend on the template
5405 parameters of the class. */
5406 if (new_template_p && !ctx
5407 && !(is_friend && template_class_depth (current_class_type) > 0))
5408 {
5409 tmpl = pushdecl_namespace_level (tmpl, is_friend);
5410 if (tmpl == error_mark_node)
5411 return error_mark_node;
5412
5413 /* Hide template friend classes that haven't been declared yet. */
5414 if (is_friend && TREE_CODE (decl) == TYPE_DECL)
5415 {
5416 DECL_ANTICIPATED (tmpl) = 1;
5417 DECL_FRIEND_P (tmpl) = 1;
5418 }
5419 }
5420
5421 if (is_primary)
5422 {
5423 tree parms = DECL_TEMPLATE_PARMS (tmpl);
5424 int i;
5425
5426 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
5427 if (DECL_CONV_FN_P (tmpl))
5428 {
5429 int depth = TMPL_PARMS_DEPTH (parms);
5430
5431 /* It is a conversion operator. See if the type converted to
5432 depends on innermost template operands. */
5433
5434 if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
5435 depth))
5436 DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
5437 }
5438
5439 /* Give template template parms a DECL_CONTEXT of the template
5440 for which they are a parameter. */
5441 parms = INNERMOST_TEMPLATE_PARMS (parms);
5442 for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
5443 {
5444 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5445 if (TREE_CODE (parm) == TEMPLATE_DECL)
5446 DECL_CONTEXT (parm) = tmpl;
5447 }
5448
5449 if (TREE_CODE (decl) == TYPE_DECL
5450 && TYPE_DECL_ALIAS_P (decl)
5451 && complex_alias_template_p (tmpl))
5452 TEMPLATE_DECL_COMPLEX_ALIAS_P (tmpl) = true;
5453 }
5454
5455 /* The DECL_TI_ARGS of DECL contains full set of arguments referring
5456 back to its most general template. If TMPL is a specialization,
5457 ARGS may only have the innermost set of arguments. Add the missing
5458 argument levels if necessary. */
5459 if (DECL_TEMPLATE_INFO (tmpl))
5460 args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
5461
5462 info = build_template_info (tmpl, args);
5463
5464 if (DECL_IMPLICIT_TYPEDEF_P (decl))
5465 SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
5466 else
5467 {
5468 if (is_primary && !DECL_LANG_SPECIFIC (decl))
5469 retrofit_lang_decl (decl);
5470 if (DECL_LANG_SPECIFIC (decl))
5471 DECL_TEMPLATE_INFO (decl) = info;
5472 }
5473
5474 if (flag_implicit_templates
5475 && !is_friend
5476 && TREE_PUBLIC (decl)
5477 && VAR_OR_FUNCTION_DECL_P (decl))
5478 /* Set DECL_COMDAT on template instantiations; if we force
5479 them to be emitted by explicit instantiation or -frepo,
5480 mark_needed will tell cgraph to do the right thing. */
5481 DECL_COMDAT (decl) = true;
5482
5483 return DECL_TEMPLATE_RESULT (tmpl);
5484 }
5485
5486 tree
5487 push_template_decl (tree decl)
5488 {
5489 return push_template_decl_real (decl, false);
5490 }
5491
5492 /* FN is an inheriting constructor that inherits from the constructor
5493 template INHERITED; turn FN into a constructor template with a matching
5494 template header. */
5495
5496 tree
5497 add_inherited_template_parms (tree fn, tree inherited)
5498 {
5499 tree inner_parms
5500 = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (inherited));
5501 inner_parms = copy_node (inner_parms);
5502 tree parms
5503 = tree_cons (size_int (processing_template_decl + 1),
5504 inner_parms, current_template_parms);
5505 tree tmpl = build_template_decl (fn, parms, /*member*/true);
5506 tree args = template_parms_to_args (parms);
5507 DECL_TEMPLATE_INFO (fn) = build_template_info (tmpl, args);
5508 TREE_TYPE (tmpl) = TREE_TYPE (fn);
5509 DECL_TEMPLATE_RESULT (tmpl) = fn;
5510 DECL_ARTIFICIAL (tmpl) = true;
5511 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
5512 return tmpl;
5513 }
5514
5515 /* Called when a class template TYPE is redeclared with the indicated
5516 template PARMS, e.g.:
5517
5518 template <class T> struct S;
5519 template <class T> struct S {}; */
5520
5521 bool
5522 redeclare_class_template (tree type, tree parms, tree cons)
5523 {
5524 tree tmpl;
5525 tree tmpl_parms;
5526 int i;
5527
5528 if (!TYPE_TEMPLATE_INFO (type))
5529 {
5530 error ("%qT is not a template type", type);
5531 return false;
5532 }
5533
5534 tmpl = TYPE_TI_TEMPLATE (type);
5535 if (!PRIMARY_TEMPLATE_P (tmpl))
5536 /* The type is nested in some template class. Nothing to worry
5537 about here; there are no new template parameters for the nested
5538 type. */
5539 return true;
5540
5541 if (!parms)
5542 {
5543 error ("template specifiers not specified in declaration of %qD",
5544 tmpl);
5545 return false;
5546 }
5547
5548 parms = INNERMOST_TEMPLATE_PARMS (parms);
5549 tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
5550
5551 if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
5552 {
5553 error_n (input_location, TREE_VEC_LENGTH (parms),
5554 "redeclared with %d template parameter",
5555 "redeclared with %d template parameters",
5556 TREE_VEC_LENGTH (parms));
5557 inform_n (DECL_SOURCE_LOCATION (tmpl), TREE_VEC_LENGTH (tmpl_parms),
5558 "previous declaration %qD used %d template parameter",
5559 "previous declaration %qD used %d template parameters",
5560 tmpl, TREE_VEC_LENGTH (tmpl_parms));
5561 return false;
5562 }
5563
5564 for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
5565 {
5566 tree tmpl_parm;
5567 tree parm;
5568 tree tmpl_default;
5569 tree parm_default;
5570
5571 if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
5572 || TREE_VEC_ELT (parms, i) == error_mark_node)
5573 continue;
5574
5575 tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
5576 if (error_operand_p (tmpl_parm))
5577 return false;
5578
5579 parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5580 tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
5581 parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
5582
5583 /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
5584 TEMPLATE_DECL. */
5585 if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
5586 || (TREE_CODE (tmpl_parm) != TYPE_DECL
5587 && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
5588 || (TREE_CODE (tmpl_parm) != PARM_DECL
5589 && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
5590 != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
5591 || (TREE_CODE (tmpl_parm) == PARM_DECL
5592 && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
5593 != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))))
5594 {
5595 error ("template parameter %q+#D", tmpl_parm);
5596 error ("redeclared here as %q#D", parm);
5597 return false;
5598 }
5599
5600 if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
5601 {
5602 /* We have in [temp.param]:
5603
5604 A template-parameter may not be given default arguments
5605 by two different declarations in the same scope. */
5606 error_at (input_location, "redefinition of default argument for %q#D", parm);
5607 inform (DECL_SOURCE_LOCATION (tmpl_parm),
5608 "original definition appeared here");
5609 return false;
5610 }
5611
5612 if (parm_default != NULL_TREE)
5613 /* Update the previous template parameters (which are the ones
5614 that will really count) with the new default value. */
5615 TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
5616 else if (tmpl_default != NULL_TREE)
5617 /* Update the new parameters, too; they'll be used as the
5618 parameters for any members. */
5619 TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
5620
5621 /* Give each template template parm in this redeclaration a
5622 DECL_CONTEXT of the template for which they are a parameter. */
5623 if (TREE_CODE (parm) == TEMPLATE_DECL)
5624 {
5625 gcc_assert (DECL_CONTEXT (parm) == NULL_TREE);
5626 DECL_CONTEXT (parm) = tmpl;
5627 }
5628 }
5629
5630 // Cannot redeclare a class template with a different set of constraints.
5631 if (!equivalent_constraints (get_constraints (tmpl), cons))
5632 {
5633 error_at (input_location, "redeclaration %q#D with different "
5634 "constraints", tmpl);
5635 inform (DECL_SOURCE_LOCATION (tmpl),
5636 "original declaration appeared here");
5637 }
5638
5639 return true;
5640 }
5641
5642 /* The actual substitution part of instantiate_non_dependent_expr_sfinae,
5643 to be used when the caller has already checked
5644 (processing_template_decl
5645 && !instantiation_dependent_expression_p (expr)
5646 && potential_constant_expression (expr))
5647 and cleared processing_template_decl. */
5648
5649 tree
5650 instantiate_non_dependent_expr_internal (tree expr, tsubst_flags_t complain)
5651 {
5652 return tsubst_copy_and_build (expr,
5653 /*args=*/NULL_TREE,
5654 complain,
5655 /*in_decl=*/NULL_TREE,
5656 /*function_p=*/false,
5657 /*integral_constant_expression_p=*/true);
5658 }
5659
5660 /* Simplify EXPR if it is a non-dependent expression. Returns the
5661 (possibly simplified) expression. */
5662
5663 tree
5664 instantiate_non_dependent_expr_sfinae (tree expr, tsubst_flags_t complain)
5665 {
5666 if (expr == NULL_TREE)
5667 return NULL_TREE;
5668
5669 /* If we're in a template, but EXPR isn't value dependent, simplify
5670 it. We're supposed to treat:
5671
5672 template <typename T> void f(T[1 + 1]);
5673 template <typename T> void f(T[2]);
5674
5675 as two declarations of the same function, for example. */
5676 if (processing_template_decl
5677 && potential_nondependent_constant_expression (expr))
5678 {
5679 processing_template_decl_sentinel s;
5680 expr = instantiate_non_dependent_expr_internal (expr, complain);
5681 }
5682 return expr;
5683 }
5684
5685 tree
5686 instantiate_non_dependent_expr (tree expr)
5687 {
5688 return instantiate_non_dependent_expr_sfinae (expr, tf_error);
5689 }
5690
5691 /* Like instantiate_non_dependent_expr, but return NULL_TREE rather than
5692 an uninstantiated expression. */
5693
5694 tree
5695 instantiate_non_dependent_or_null (tree expr)
5696 {
5697 if (expr == NULL_TREE)
5698 return NULL_TREE;
5699 if (processing_template_decl)
5700 {
5701 if (!potential_nondependent_constant_expression (expr))
5702 expr = NULL_TREE;
5703 else
5704 {
5705 processing_template_decl_sentinel s;
5706 expr = instantiate_non_dependent_expr_internal (expr, tf_error);
5707 }
5708 }
5709 return expr;
5710 }
5711
5712 /* True iff T is a specialization of a variable template. */
5713
5714 bool
5715 variable_template_specialization_p (tree t)
5716 {
5717 if (!VAR_P (t) || !DECL_LANG_SPECIFIC (t) || !DECL_TEMPLATE_INFO (t))
5718 return false;
5719 tree tmpl = DECL_TI_TEMPLATE (t);
5720 return variable_template_p (tmpl);
5721 }
5722
5723 /* Return TRUE iff T is a type alias, a TEMPLATE_DECL for an alias
5724 template declaration, or a TYPE_DECL for an alias declaration. */
5725
5726 bool
5727 alias_type_or_template_p (tree t)
5728 {
5729 if (t == NULL_TREE)
5730 return false;
5731 return ((TREE_CODE (t) == TYPE_DECL && TYPE_DECL_ALIAS_P (t))
5732 || (TYPE_P (t)
5733 && TYPE_NAME (t)
5734 && TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
5735 || DECL_ALIAS_TEMPLATE_P (t));
5736 }
5737
5738 /* Return TRUE iff T is a specialization of an alias template. */
5739
5740 bool
5741 alias_template_specialization_p (const_tree t)
5742 {
5743 /* It's an alias template specialization if it's an alias and its
5744 TYPE_NAME is a specialization of a primary template. */
5745 if (TYPE_ALIAS_P (t))
5746 {
5747 tree name = TYPE_NAME (t);
5748 if (DECL_LANG_SPECIFIC (name))
5749 if (tree ti = DECL_TEMPLATE_INFO (name))
5750 {
5751 tree tmpl = TI_TEMPLATE (ti);
5752 return PRIMARY_TEMPLATE_P (tmpl);
5753 }
5754 }
5755 return false;
5756 }
5757
5758 /* An alias template is complex from a SFINAE perspective if a template-id
5759 using that alias can be ill-formed when the expansion is not, as with
5760 the void_t template. We determine this by checking whether the
5761 expansion for the alias template uses all its template parameters. */
5762
5763 struct uses_all_template_parms_data
5764 {
5765 int level;
5766 bool *seen;
5767 };
5768
5769 static int
5770 uses_all_template_parms_r (tree t, void *data_)
5771 {
5772 struct uses_all_template_parms_data &data
5773 = *(struct uses_all_template_parms_data*)data_;
5774 tree idx = get_template_parm_index (t);
5775
5776 if (TEMPLATE_PARM_LEVEL (idx) == data.level)
5777 data.seen[TEMPLATE_PARM_IDX (idx)] = true;
5778 return 0;
5779 }
5780
5781 static bool
5782 complex_alias_template_p (const_tree tmpl)
5783 {
5784 struct uses_all_template_parms_data data;
5785 tree pat = DECL_ORIGINAL_TYPE (DECL_TEMPLATE_RESULT (tmpl));
5786 tree parms = DECL_TEMPLATE_PARMS (tmpl);
5787 data.level = TMPL_PARMS_DEPTH (parms);
5788 int len = TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS (parms));
5789 data.seen = XALLOCAVEC (bool, len);
5790 for (int i = 0; i < len; ++i)
5791 data.seen[i] = false;
5792
5793 for_each_template_parm (pat, uses_all_template_parms_r, &data, NULL, true);
5794 for (int i = 0; i < len; ++i)
5795 if (!data.seen[i])
5796 return true;
5797 return false;
5798 }
5799
5800 /* Return TRUE iff T is a specialization of a complex alias template with
5801 dependent template-arguments. */
5802
5803 bool
5804 dependent_alias_template_spec_p (const_tree t)
5805 {
5806 return (alias_template_specialization_p (t)
5807 && TEMPLATE_DECL_COMPLEX_ALIAS_P (DECL_TI_TEMPLATE (TYPE_NAME (t)))
5808 && (any_dependent_template_arguments_p
5809 (INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (t)))));
5810 }
5811
5812 /* Return the number of innermost template parameters in TMPL. */
5813
5814 static int
5815 num_innermost_template_parms (tree tmpl)
5816 {
5817 tree parms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (tmpl));
5818 return TREE_VEC_LENGTH (parms);
5819 }
5820
5821 /* Return either TMPL or another template that it is equivalent to under DR
5822 1286: An alias that just changes the name of a template is equivalent to
5823 the other template. */
5824
5825 static tree
5826 get_underlying_template (tree tmpl)
5827 {
5828 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
5829 while (DECL_ALIAS_TEMPLATE_P (tmpl))
5830 {
5831 tree result = DECL_ORIGINAL_TYPE (DECL_TEMPLATE_RESULT (tmpl));
5832 if (TYPE_TEMPLATE_INFO (result))
5833 {
5834 tree sub = TYPE_TI_TEMPLATE (result);
5835 if (PRIMARY_TEMPLATE_P (sub)
5836 && (num_innermost_template_parms (tmpl)
5837 == num_innermost_template_parms (sub)))
5838 {
5839 tree alias_args = INNERMOST_TEMPLATE_ARGS
5840 (template_parms_to_args (DECL_TEMPLATE_PARMS (tmpl)));
5841 if (!comp_template_args (TYPE_TI_ARGS (result), alias_args))
5842 break;
5843 /* The alias type is equivalent to the pattern of the
5844 underlying template, so strip the alias. */
5845 tmpl = sub;
5846 continue;
5847 }
5848 }
5849 break;
5850 }
5851 return tmpl;
5852 }
5853
5854 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
5855 must be a function or a pointer-to-function type, as specified
5856 in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
5857 and check that the resulting function has external linkage. */
5858
5859 static tree
5860 convert_nontype_argument_function (tree type, tree expr,
5861 tsubst_flags_t complain)
5862 {
5863 tree fns = expr;
5864 tree fn, fn_no_ptr;
5865 linkage_kind linkage;
5866
5867 fn = instantiate_type (type, fns, tf_none);
5868 if (fn == error_mark_node)
5869 return error_mark_node;
5870
5871 fn_no_ptr = fn;
5872 if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
5873 fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
5874 if (BASELINK_P (fn_no_ptr))
5875 fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
5876
5877 /* [temp.arg.nontype]/1
5878
5879 A template-argument for a non-type, non-template template-parameter
5880 shall be one of:
5881 [...]
5882 -- the address of an object or function with external [C++11: or
5883 internal] linkage. */
5884
5885 if (TREE_CODE (fn_no_ptr) != FUNCTION_DECL)
5886 {
5887 if (complain & tf_error)
5888 {
5889 error ("%qE is not a valid template argument for type %qT",
5890 expr, type);
5891 if (TYPE_PTR_P (type))
5892 error ("it must be the address of a function with "
5893 "external linkage");
5894 else
5895 error ("it must be the name of a function with "
5896 "external linkage");
5897 }
5898 return NULL_TREE;
5899 }
5900
5901 linkage = decl_linkage (fn_no_ptr);
5902 if (cxx_dialect >= cxx11 ? linkage == lk_none : linkage != lk_external)
5903 {
5904 if (complain & tf_error)
5905 {
5906 if (cxx_dialect >= cxx11)
5907 error ("%qE is not a valid template argument for type %qT "
5908 "because %qD has no linkage",
5909 expr, type, fn_no_ptr);
5910 else
5911 error ("%qE is not a valid template argument for type %qT "
5912 "because %qD does not have external linkage",
5913 expr, type, fn_no_ptr);
5914 }
5915 return NULL_TREE;
5916 }
5917
5918 return fn;
5919 }
5920
5921 /* Subroutine of convert_nontype_argument.
5922 Check if EXPR of type TYPE is a valid pointer-to-member constant.
5923 Emit an error otherwise. */
5924
5925 static bool
5926 check_valid_ptrmem_cst_expr (tree type, tree expr,
5927 tsubst_flags_t complain)
5928 {
5929 STRIP_NOPS (expr);
5930 if (expr && (null_ptr_cst_p (expr) || TREE_CODE (expr) == PTRMEM_CST))
5931 return true;
5932 if (cxx_dialect >= cxx11 && null_member_pointer_value_p (expr))
5933 return true;
5934 if (processing_template_decl
5935 && TREE_CODE (expr) == ADDR_EXPR
5936 && TREE_CODE (TREE_OPERAND (expr, 0)) == OFFSET_REF)
5937 return true;
5938 if (complain & tf_error)
5939 {
5940 error ("%qE is not a valid template argument for type %qT",
5941 expr, type);
5942 error ("it must be a pointer-to-member of the form %<&X::Y%>");
5943 }
5944 return false;
5945 }
5946
5947 /* Returns TRUE iff the address of OP is value-dependent.
5948
5949 14.6.2.4 [temp.dep.temp]:
5950 A non-integral non-type template-argument is dependent if its type is
5951 dependent or it has either of the following forms
5952 qualified-id
5953 & qualified-id
5954 and contains a nested-name-specifier which specifies a class-name that
5955 names a dependent type.
5956
5957 We generalize this to just say that the address of a member of a
5958 dependent class is value-dependent; the above doesn't cover the
5959 address of a static data member named with an unqualified-id. */
5960
5961 static bool
5962 has_value_dependent_address (tree op)
5963 {
5964 /* We could use get_inner_reference here, but there's no need;
5965 this is only relevant for template non-type arguments, which
5966 can only be expressed as &id-expression. */
5967 if (DECL_P (op))
5968 {
5969 tree ctx = CP_DECL_CONTEXT (op);
5970 if (TYPE_P (ctx) && dependent_type_p (ctx))
5971 return true;
5972 }
5973
5974 return false;
5975 }
5976
5977 /* The next set of functions are used for providing helpful explanatory
5978 diagnostics for failed overload resolution. Their messages should be
5979 indented by two spaces for consistency with the messages in
5980 call.c */
5981
5982 static int
5983 unify_success (bool /*explain_p*/)
5984 {
5985 return 0;
5986 }
5987
5988 static int
5989 unify_parameter_deduction_failure (bool explain_p, tree parm)
5990 {
5991 if (explain_p)
5992 inform (input_location,
5993 " couldn't deduce template parameter %qD", parm);
5994 return 1;
5995 }
5996
5997 static int
5998 unify_invalid (bool /*explain_p*/)
5999 {
6000 return 1;
6001 }
6002
6003 static int
6004 unify_cv_qual_mismatch (bool explain_p, tree parm, tree arg)
6005 {
6006 if (explain_p)
6007 inform (input_location,
6008 " types %qT and %qT have incompatible cv-qualifiers",
6009 parm, arg);
6010 return 1;
6011 }
6012
6013 static int
6014 unify_type_mismatch (bool explain_p, tree parm, tree arg)
6015 {
6016 if (explain_p)
6017 inform (input_location, " mismatched types %qT and %qT", parm, arg);
6018 return 1;
6019 }
6020
6021 static int
6022 unify_parameter_pack_mismatch (bool explain_p, tree parm, tree arg)
6023 {
6024 if (explain_p)
6025 inform (input_location,
6026 " template parameter %qD is not a parameter pack, but "
6027 "argument %qD is",
6028 parm, arg);
6029 return 1;
6030 }
6031
6032 static int
6033 unify_ptrmem_cst_mismatch (bool explain_p, tree parm, tree arg)
6034 {
6035 if (explain_p)
6036 inform (input_location,
6037 " template argument %qE does not match "
6038 "pointer-to-member constant %qE",
6039 arg, parm);
6040 return 1;
6041 }
6042
6043 static int
6044 unify_expression_unequal (bool explain_p, tree parm, tree arg)
6045 {
6046 if (explain_p)
6047 inform (input_location, " %qE is not equivalent to %qE", parm, arg);
6048 return 1;
6049 }
6050
6051 static int
6052 unify_parameter_pack_inconsistent (bool explain_p, tree old_arg, tree new_arg)
6053 {
6054 if (explain_p)
6055 inform (input_location,
6056 " inconsistent parameter pack deduction with %qT and %qT",
6057 old_arg, new_arg);
6058 return 1;
6059 }
6060
6061 static int
6062 unify_inconsistency (bool explain_p, tree parm, tree first, tree second)
6063 {
6064 if (explain_p)
6065 {
6066 if (TYPE_P (parm))
6067 inform (input_location,
6068 " deduced conflicting types for parameter %qT (%qT and %qT)",
6069 parm, first, second);
6070 else
6071 inform (input_location,
6072 " deduced conflicting values for non-type parameter "
6073 "%qE (%qE and %qE)", parm, first, second);
6074 }
6075 return 1;
6076 }
6077
6078 static int
6079 unify_vla_arg (bool explain_p, tree arg)
6080 {
6081 if (explain_p)
6082 inform (input_location,
6083 " variable-sized array type %qT is not "
6084 "a valid template argument",
6085 arg);
6086 return 1;
6087 }
6088
6089 static int
6090 unify_method_type_error (bool explain_p, tree arg)
6091 {
6092 if (explain_p)
6093 inform (input_location,
6094 " member function type %qT is not a valid template argument",
6095 arg);
6096 return 1;
6097 }
6098
6099 static int
6100 unify_arity (bool explain_p, int have, int wanted, bool least_p = false)
6101 {
6102 if (explain_p)
6103 {
6104 if (least_p)
6105 inform_n (input_location, wanted,
6106 " candidate expects at least %d argument, %d provided",
6107 " candidate expects at least %d arguments, %d provided",
6108 wanted, have);
6109 else
6110 inform_n (input_location, wanted,
6111 " candidate expects %d argument, %d provided",
6112 " candidate expects %d arguments, %d provided",
6113 wanted, have);
6114 }
6115 return 1;
6116 }
6117
6118 static int
6119 unify_too_many_arguments (bool explain_p, int have, int wanted)
6120 {
6121 return unify_arity (explain_p, have, wanted);
6122 }
6123
6124 static int
6125 unify_too_few_arguments (bool explain_p, int have, int wanted,
6126 bool least_p = false)
6127 {
6128 return unify_arity (explain_p, have, wanted, least_p);
6129 }
6130
6131 static int
6132 unify_arg_conversion (bool explain_p, tree to_type,
6133 tree from_type, tree arg)
6134 {
6135 if (explain_p)
6136 inform (EXPR_LOC_OR_LOC (arg, input_location),
6137 " cannot convert %qE (type %qT) to type %qT",
6138 arg, from_type, to_type);
6139 return 1;
6140 }
6141
6142 static int
6143 unify_no_common_base (bool explain_p, enum template_base_result r,
6144 tree parm, tree arg)
6145 {
6146 if (explain_p)
6147 switch (r)
6148 {
6149 case tbr_ambiguous_baseclass:
6150 inform (input_location, " %qT is an ambiguous base class of %qT",
6151 parm, arg);
6152 break;
6153 default:
6154 inform (input_location, " %qT is not derived from %qT", arg, parm);
6155 break;
6156 }
6157 return 1;
6158 }
6159
6160 static int
6161 unify_inconsistent_template_template_parameters (bool explain_p)
6162 {
6163 if (explain_p)
6164 inform (input_location,
6165 " template parameters of a template template argument are "
6166 "inconsistent with other deduced template arguments");
6167 return 1;
6168 }
6169
6170 static int
6171 unify_template_deduction_failure (bool explain_p, tree parm, tree arg)
6172 {
6173 if (explain_p)
6174 inform (input_location,
6175 " can't deduce a template for %qT from non-template type %qT",
6176 parm, arg);
6177 return 1;
6178 }
6179
6180 static int
6181 unify_template_argument_mismatch (bool explain_p, tree parm, tree arg)
6182 {
6183 if (explain_p)
6184 inform (input_location,
6185 " template argument %qE does not match %qE", arg, parm);
6186 return 1;
6187 }
6188
6189 static int
6190 unify_overload_resolution_failure (bool explain_p, tree arg)
6191 {
6192 if (explain_p)
6193 inform (input_location,
6194 " could not resolve address from overloaded function %qE",
6195 arg);
6196 return 1;
6197 }
6198
6199 /* Attempt to convert the non-type template parameter EXPR to the
6200 indicated TYPE. If the conversion is successful, return the
6201 converted value. If the conversion is unsuccessful, return
6202 NULL_TREE if we issued an error message, or error_mark_node if we
6203 did not. We issue error messages for out-and-out bad template
6204 parameters, but not simply because the conversion failed, since we
6205 might be just trying to do argument deduction. Both TYPE and EXPR
6206 must be non-dependent.
6207
6208 The conversion follows the special rules described in
6209 [temp.arg.nontype], and it is much more strict than an implicit
6210 conversion.
6211
6212 This function is called twice for each template argument (see
6213 lookup_template_class for a more accurate description of this
6214 problem). This means that we need to handle expressions which
6215 are not valid in a C++ source, but can be created from the
6216 first call (for instance, casts to perform conversions). These
6217 hacks can go away after we fix the double coercion problem. */
6218
6219 static tree
6220 convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
6221 {
6222 tree expr_type;
6223
6224 /* Detect immediately string literals as invalid non-type argument.
6225 This special-case is not needed for correctness (we would easily
6226 catch this later), but only to provide better diagnostic for this
6227 common user mistake. As suggested by DR 100, we do not mention
6228 linkage issues in the diagnostic as this is not the point. */
6229 /* FIXME we're making this OK. */
6230 if (TREE_CODE (expr) == STRING_CST)
6231 {
6232 if (complain & tf_error)
6233 error ("%qE is not a valid template argument for type %qT "
6234 "because string literals can never be used in this context",
6235 expr, type);
6236 return NULL_TREE;
6237 }
6238
6239 /* Add the ADDR_EXPR now for the benefit of
6240 value_dependent_expression_p. */
6241 if (TYPE_PTROBV_P (type)
6242 && TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE)
6243 {
6244 expr = decay_conversion (expr, complain);
6245 if (expr == error_mark_node)
6246 return error_mark_node;
6247 }
6248
6249 /* If we are in a template, EXPR may be non-dependent, but still
6250 have a syntactic, rather than semantic, form. For example, EXPR
6251 might be a SCOPE_REF, rather than the VAR_DECL to which the
6252 SCOPE_REF refers. Preserving the qualifying scope is necessary
6253 so that access checking can be performed when the template is
6254 instantiated -- but here we need the resolved form so that we can
6255 convert the argument. */
6256 bool non_dep = false;
6257 if (TYPE_REF_OBJ_P (type)
6258 && has_value_dependent_address (expr))
6259 /* If we want the address and it's value-dependent, don't fold. */;
6260 else if (processing_template_decl
6261 && potential_nondependent_constant_expression (expr))
6262 non_dep = true;
6263 if (error_operand_p (expr))
6264 return error_mark_node;
6265 expr_type = TREE_TYPE (expr);
6266 if (TREE_CODE (type) == REFERENCE_TYPE)
6267 expr = mark_lvalue_use (expr);
6268 else
6269 expr = mark_rvalue_use (expr);
6270
6271 /* If the argument is non-dependent, perform any conversions in
6272 non-dependent context as well. */
6273 processing_template_decl_sentinel s (non_dep);
6274 if (non_dep)
6275 expr = instantiate_non_dependent_expr_internal (expr, complain);
6276
6277 /* 14.3.2/5: The null pointer{,-to-member} conversion is applied
6278 to a non-type argument of "nullptr". */
6279 if (expr == nullptr_node && TYPE_PTR_OR_PTRMEM_P (type))
6280 expr = fold_simple (convert (type, expr));
6281
6282 /* In C++11, integral or enumeration non-type template arguments can be
6283 arbitrary constant expressions. Pointer and pointer to
6284 member arguments can be general constant expressions that evaluate
6285 to a null value, but otherwise still need to be of a specific form. */
6286 if (cxx_dialect >= cxx11)
6287 {
6288 if (TREE_CODE (expr) == PTRMEM_CST)
6289 /* A PTRMEM_CST is already constant, and a valid template
6290 argument for a parameter of pointer to member type, we just want
6291 to leave it in that form rather than lower it to a
6292 CONSTRUCTOR. */;
6293 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
6294 expr = maybe_constant_value (expr);
6295 else if (cxx_dialect >= cxx1z)
6296 {
6297 if (TREE_CODE (type) != REFERENCE_TYPE)
6298 expr = maybe_constant_value (expr);
6299 else if (REFERENCE_REF_P (expr))
6300 {
6301 expr = TREE_OPERAND (expr, 0);
6302 expr = maybe_constant_value (expr);
6303 expr = convert_from_reference (expr);
6304 }
6305 }
6306 else if (TYPE_PTR_OR_PTRMEM_P (type))
6307 {
6308 tree folded = maybe_constant_value (expr);
6309 if (TYPE_PTR_P (type) ? integer_zerop (folded)
6310 : null_member_pointer_value_p (folded))
6311 expr = folded;
6312 }
6313 }
6314
6315 /* HACK: Due to double coercion, we can get a
6316 NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
6317 which is the tree that we built on the first call (see
6318 below when coercing to reference to object or to reference to
6319 function). We just strip everything and get to the arg.
6320 See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
6321 for examples. */
6322 if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
6323 {
6324 tree probe_type, probe = expr;
6325 if (REFERENCE_REF_P (probe))
6326 probe = TREE_OPERAND (probe, 0);
6327 probe_type = TREE_TYPE (probe);
6328 if (TREE_CODE (probe) == NOP_EXPR)
6329 {
6330 /* ??? Maybe we could use convert_from_reference here, but we
6331 would need to relax its constraints because the NOP_EXPR
6332 could actually change the type to something more cv-qualified,
6333 and this is not folded by convert_from_reference. */
6334 tree addr = TREE_OPERAND (probe, 0);
6335 if (TREE_CODE (probe_type) == REFERENCE_TYPE
6336 && TREE_CODE (addr) == ADDR_EXPR
6337 && TYPE_PTR_P (TREE_TYPE (addr))
6338 && (same_type_ignoring_top_level_qualifiers_p
6339 (TREE_TYPE (probe_type),
6340 TREE_TYPE (TREE_TYPE (addr)))))
6341 {
6342 expr = TREE_OPERAND (addr, 0);
6343 expr_type = TREE_TYPE (probe_type);
6344 }
6345 }
6346 }
6347
6348 /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
6349 parameter is a pointer to object, through decay and
6350 qualification conversion. Let's strip everything. */
6351 else if (TREE_CODE (expr) == NOP_EXPR && TYPE_PTROBV_P (type))
6352 {
6353 tree probe = expr;
6354 STRIP_NOPS (probe);
6355 if (TREE_CODE (probe) == ADDR_EXPR
6356 && TYPE_PTR_P (TREE_TYPE (probe)))
6357 {
6358 /* Skip the ADDR_EXPR only if it is part of the decay for
6359 an array. Otherwise, it is part of the original argument
6360 in the source code. */
6361 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (probe, 0))) == ARRAY_TYPE)
6362 probe = TREE_OPERAND (probe, 0);
6363 expr = probe;
6364 expr_type = TREE_TYPE (expr);
6365 }
6366 }
6367
6368 /* [temp.arg.nontype]/5, bullet 1
6369
6370 For a non-type template-parameter of integral or enumeration type,
6371 integral promotions (_conv.prom_) and integral conversions
6372 (_conv.integral_) are applied. */
6373 if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
6374 {
6375 tree t = build_integral_nontype_arg_conv (type, expr, complain);
6376 t = maybe_constant_value (t);
6377 if (t != error_mark_node)
6378 expr = t;
6379
6380 if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (expr)))
6381 return error_mark_node;
6382
6383 /* Notice that there are constant expressions like '4 % 0' which
6384 do not fold into integer constants. */
6385 if (TREE_CODE (expr) != INTEGER_CST)
6386 {
6387 if (complain & tf_error)
6388 {
6389 int errs = errorcount, warns = warningcount + werrorcount;
6390 if (processing_template_decl
6391 && !require_potential_constant_expression (expr))
6392 return NULL_TREE;
6393 expr = cxx_constant_value (expr);
6394 if (errorcount > errs || warningcount + werrorcount > warns)
6395 inform (EXPR_LOC_OR_LOC (expr, input_location),
6396 "in template argument for type %qT ", type);
6397 if (expr == error_mark_node)
6398 return NULL_TREE;
6399 /* else cxx_constant_value complained but gave us
6400 a real constant, so go ahead. */
6401 gcc_assert (TREE_CODE (expr) == INTEGER_CST);
6402 }
6403 else
6404 return NULL_TREE;
6405 }
6406
6407 /* Avoid typedef problems. */
6408 if (TREE_TYPE (expr) != type)
6409 expr = fold_convert (type, expr);
6410 }
6411 /* [temp.arg.nontype]/5, bullet 2
6412
6413 For a non-type template-parameter of type pointer to object,
6414 qualification conversions (_conv.qual_) and the array-to-pointer
6415 conversion (_conv.array_) are applied. */
6416 else if (TYPE_PTROBV_P (type))
6417 {
6418 /* [temp.arg.nontype]/1 (TC1 version, DR 49):
6419
6420 A template-argument for a non-type, non-template template-parameter
6421 shall be one of: [...]
6422
6423 -- the name of a non-type template-parameter;
6424 -- the address of an object or function with external linkage, [...]
6425 expressed as "& id-expression" where the & is optional if the name
6426 refers to a function or array, or if the corresponding
6427 template-parameter is a reference.
6428
6429 Here, we do not care about functions, as they are invalid anyway
6430 for a parameter of type pointer-to-object. */
6431
6432 if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
6433 /* Non-type template parameters are OK. */
6434 ;
6435 else if (cxx_dialect >= cxx11 && integer_zerop (expr))
6436 /* Null pointer values are OK in C++11. */;
6437 else if (TREE_CODE (expr) != ADDR_EXPR
6438 && TREE_CODE (expr_type) != ARRAY_TYPE)
6439 {
6440 if (VAR_P (expr))
6441 {
6442 if (complain & tf_error)
6443 error ("%qD is not a valid template argument "
6444 "because %qD is a variable, not the address of "
6445 "a variable", expr, expr);
6446 return NULL_TREE;
6447 }
6448 if (POINTER_TYPE_P (expr_type))
6449 {
6450 if (complain & tf_error)
6451 error ("%qE is not a valid template argument for %qT "
6452 "because it is not the address of a variable",
6453 expr, type);
6454 return NULL_TREE;
6455 }
6456 /* Other values, like integer constants, might be valid
6457 non-type arguments of some other type. */
6458 return error_mark_node;
6459 }
6460 else
6461 {
6462 tree decl;
6463
6464 decl = ((TREE_CODE (expr) == ADDR_EXPR)
6465 ? TREE_OPERAND (expr, 0) : expr);
6466 if (!VAR_P (decl))
6467 {
6468 if (complain & tf_error)
6469 error ("%qE is not a valid template argument of type %qT "
6470 "because %qE is not a variable", expr, type, decl);
6471 return NULL_TREE;
6472 }
6473 else if (cxx_dialect < cxx11 && !DECL_EXTERNAL_LINKAGE_P (decl))
6474 {
6475 if (complain & tf_error)
6476 error ("%qE is not a valid template argument of type %qT "
6477 "because %qD does not have external linkage",
6478 expr, type, decl);
6479 return NULL_TREE;
6480 }
6481 else if (cxx_dialect >= cxx11 && decl_linkage (decl) == lk_none)
6482 {
6483 if (complain & tf_error)
6484 error ("%qE is not a valid template argument of type %qT "
6485 "because %qD has no linkage", expr, type, decl);
6486 return NULL_TREE;
6487 }
6488 }
6489
6490 expr = decay_conversion (expr, complain);
6491 if (expr == error_mark_node)
6492 return error_mark_node;
6493
6494 expr = perform_qualification_conversions (type, expr);
6495 if (expr == error_mark_node)
6496 return error_mark_node;
6497 }
6498 /* [temp.arg.nontype]/5, bullet 3
6499
6500 For a non-type template-parameter of type reference to object, no
6501 conversions apply. The type referred to by the reference may be more
6502 cv-qualified than the (otherwise identical) type of the
6503 template-argument. The template-parameter is bound directly to the
6504 template-argument, which must be an lvalue. */
6505 else if (TYPE_REF_OBJ_P (type))
6506 {
6507 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
6508 expr_type))
6509 return error_mark_node;
6510
6511 if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
6512 {
6513 if (complain & tf_error)
6514 error ("%qE is not a valid template argument for type %qT "
6515 "because of conflicts in cv-qualification", expr, type);
6516 return NULL_TREE;
6517 }
6518
6519 if (!real_lvalue_p (expr))
6520 {
6521 if (complain & tf_error)
6522 error ("%qE is not a valid template argument for type %qT "
6523 "because it is not an lvalue", expr, type);
6524 return NULL_TREE;
6525 }
6526
6527 /* [temp.arg.nontype]/1
6528
6529 A template-argument for a non-type, non-template template-parameter
6530 shall be one of: [...]
6531
6532 -- the address of an object or function with external linkage. */
6533 if (INDIRECT_REF_P (expr)
6534 && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
6535 {
6536 expr = TREE_OPERAND (expr, 0);
6537 if (DECL_P (expr))
6538 {
6539 if (complain & tf_error)
6540 error ("%q#D is not a valid template argument for type %qT "
6541 "because a reference variable does not have a constant "
6542 "address", expr, type);
6543 return NULL_TREE;
6544 }
6545 }
6546
6547 if (!DECL_P (expr))
6548 {
6549 if (complain & tf_error)
6550 error ("%qE is not a valid template argument for type %qT "
6551 "because it is not an object with linkage",
6552 expr, type);
6553 return NULL_TREE;
6554 }
6555
6556 /* DR 1155 allows internal linkage in C++11 and up. */
6557 linkage_kind linkage = decl_linkage (expr);
6558 if (linkage < (cxx_dialect >= cxx11 ? lk_internal : lk_external))
6559 {
6560 if (complain & tf_error)
6561 error ("%qE is not a valid template argument for type %qT "
6562 "because object %qD does not have linkage",
6563 expr, type, expr);
6564 return NULL_TREE;
6565 }
6566
6567 expr = build_nop (type, build_address (expr));
6568 }
6569 /* [temp.arg.nontype]/5, bullet 4
6570
6571 For a non-type template-parameter of type pointer to function, only
6572 the function-to-pointer conversion (_conv.func_) is applied. If the
6573 template-argument represents a set of overloaded functions (or a
6574 pointer to such), the matching function is selected from the set
6575 (_over.over_). */
6576 else if (TYPE_PTRFN_P (type))
6577 {
6578 /* If the argument is a template-id, we might not have enough
6579 context information to decay the pointer. */
6580 if (!type_unknown_p (expr_type))
6581 {
6582 expr = decay_conversion (expr, complain);
6583 if (expr == error_mark_node)
6584 return error_mark_node;
6585 }
6586
6587 if (cxx_dialect >= cxx11 && integer_zerop (expr))
6588 /* Null pointer values are OK in C++11. */
6589 return perform_qualification_conversions (type, expr);
6590
6591 expr = convert_nontype_argument_function (type, expr, complain);
6592 if (!expr || expr == error_mark_node)
6593 return expr;
6594 }
6595 /* [temp.arg.nontype]/5, bullet 5
6596
6597 For a non-type template-parameter of type reference to function, no
6598 conversions apply. If the template-argument represents a set of
6599 overloaded functions, the matching function is selected from the set
6600 (_over.over_). */
6601 else if (TYPE_REFFN_P (type))
6602 {
6603 if (TREE_CODE (expr) == ADDR_EXPR)
6604 {
6605 if (complain & tf_error)
6606 {
6607 error ("%qE is not a valid template argument for type %qT "
6608 "because it is a pointer", expr, type);
6609 inform (input_location, "try using %qE instead",
6610 TREE_OPERAND (expr, 0));
6611 }
6612 return NULL_TREE;
6613 }
6614
6615 expr = convert_nontype_argument_function (type, expr, complain);
6616 if (!expr || expr == error_mark_node)
6617 return expr;
6618
6619 expr = build_nop (type, build_address (expr));
6620 }
6621 /* [temp.arg.nontype]/5, bullet 6
6622
6623 For a non-type template-parameter of type pointer to member function,
6624 no conversions apply. If the template-argument represents a set of
6625 overloaded member functions, the matching member function is selected
6626 from the set (_over.over_). */
6627 else if (TYPE_PTRMEMFUNC_P (type))
6628 {
6629 expr = instantiate_type (type, expr, tf_none);
6630 if (expr == error_mark_node)
6631 return error_mark_node;
6632
6633 /* [temp.arg.nontype] bullet 1 says the pointer to member
6634 expression must be a pointer-to-member constant. */
6635 if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6636 return error_mark_node;
6637
6638 /* There is no way to disable standard conversions in
6639 resolve_address_of_overloaded_function (called by
6640 instantiate_type). It is possible that the call succeeded by
6641 converting &B::I to &D::I (where B is a base of D), so we need
6642 to reject this conversion here.
6643
6644 Actually, even if there was a way to disable standard conversions,
6645 it would still be better to reject them here so that we can
6646 provide a superior diagnostic. */
6647 if (!same_type_p (TREE_TYPE (expr), type))
6648 {
6649 if (complain & tf_error)
6650 {
6651 error ("%qE is not a valid template argument for type %qT "
6652 "because it is of type %qT", expr, type,
6653 TREE_TYPE (expr));
6654 /* If we are just one standard conversion off, explain. */
6655 if (can_convert_standard (type, TREE_TYPE (expr), complain))
6656 inform (input_location,
6657 "standard conversions are not allowed in this context");
6658 }
6659 return NULL_TREE;
6660 }
6661 }
6662 /* [temp.arg.nontype]/5, bullet 7
6663
6664 For a non-type template-parameter of type pointer to data member,
6665 qualification conversions (_conv.qual_) are applied. */
6666 else if (TYPE_PTRDATAMEM_P (type))
6667 {
6668 /* [temp.arg.nontype] bullet 1 says the pointer to member
6669 expression must be a pointer-to-member constant. */
6670 if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6671 return error_mark_node;
6672
6673 expr = perform_qualification_conversions (type, expr);
6674 if (expr == error_mark_node)
6675 return expr;
6676 }
6677 else if (NULLPTR_TYPE_P (type))
6678 {
6679 if (expr != nullptr_node)
6680 {
6681 if (complain & tf_error)
6682 error ("%qE is not a valid template argument for type %qT "
6683 "because it is of type %qT", expr, type, TREE_TYPE (expr));
6684 return NULL_TREE;
6685 }
6686 return expr;
6687 }
6688 /* A template non-type parameter must be one of the above. */
6689 else
6690 gcc_unreachable ();
6691
6692 /* Sanity check: did we actually convert the argument to the
6693 right type? */
6694 gcc_assert (same_type_ignoring_top_level_qualifiers_p
6695 (type, TREE_TYPE (expr)));
6696 return convert_from_reference (expr);
6697 }
6698
6699 /* Subroutine of coerce_template_template_parms, which returns 1 if
6700 PARM_PARM and ARG_PARM match using the rule for the template
6701 parameters of template template parameters. Both PARM and ARG are
6702 template parameters; the rest of the arguments are the same as for
6703 coerce_template_template_parms.
6704 */
6705 static int
6706 coerce_template_template_parm (tree parm,
6707 tree arg,
6708 tsubst_flags_t complain,
6709 tree in_decl,
6710 tree outer_args)
6711 {
6712 if (arg == NULL_TREE || error_operand_p (arg)
6713 || parm == NULL_TREE || error_operand_p (parm))
6714 return 0;
6715
6716 if (TREE_CODE (arg) != TREE_CODE (parm))
6717 return 0;
6718
6719 switch (TREE_CODE (parm))
6720 {
6721 case TEMPLATE_DECL:
6722 /* We encounter instantiations of templates like
6723 template <template <template <class> class> class TT>
6724 class C; */
6725 {
6726 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6727 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6728
6729 if (!coerce_template_template_parms
6730 (parmparm, argparm, complain, in_decl, outer_args))
6731 return 0;
6732 }
6733 /* Fall through. */
6734
6735 case TYPE_DECL:
6736 if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
6737 && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6738 /* Argument is a parameter pack but parameter is not. */
6739 return 0;
6740 break;
6741
6742 case PARM_DECL:
6743 /* The tsubst call is used to handle cases such as
6744
6745 template <int> class C {};
6746 template <class T, template <T> class TT> class D {};
6747 D<int, C> d;
6748
6749 i.e. the parameter list of TT depends on earlier parameters. */
6750 if (!uses_template_parms (TREE_TYPE (arg)))
6751 {
6752 tree t = tsubst (TREE_TYPE (parm), outer_args, complain, in_decl);
6753 if (!uses_template_parms (t)
6754 && !same_type_p (t, TREE_TYPE (arg)))
6755 return 0;
6756 }
6757
6758 if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
6759 && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6760 /* Argument is a parameter pack but parameter is not. */
6761 return 0;
6762
6763 break;
6764
6765 default:
6766 gcc_unreachable ();
6767 }
6768
6769 return 1;
6770 }
6771
6772
6773 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
6774 template template parameters. Both PARM_PARMS and ARG_PARMS are
6775 vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
6776 or PARM_DECL.
6777
6778 Consider the example:
6779 template <class T> class A;
6780 template<template <class U> class TT> class B;
6781
6782 For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
6783 the parameters to A, and OUTER_ARGS contains A. */
6784
6785 static int
6786 coerce_template_template_parms (tree parm_parms,
6787 tree arg_parms,
6788 tsubst_flags_t complain,
6789 tree in_decl,
6790 tree outer_args)
6791 {
6792 int nparms, nargs, i;
6793 tree parm, arg;
6794 int variadic_p = 0;
6795
6796 gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
6797 gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
6798
6799 nparms = TREE_VEC_LENGTH (parm_parms);
6800 nargs = TREE_VEC_LENGTH (arg_parms);
6801
6802 /* Determine whether we have a parameter pack at the end of the
6803 template template parameter's template parameter list. */
6804 if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
6805 {
6806 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
6807
6808 if (error_operand_p (parm))
6809 return 0;
6810
6811 switch (TREE_CODE (parm))
6812 {
6813 case TEMPLATE_DECL:
6814 case TYPE_DECL:
6815 if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6816 variadic_p = 1;
6817 break;
6818
6819 case PARM_DECL:
6820 if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6821 variadic_p = 1;
6822 break;
6823
6824 default:
6825 gcc_unreachable ();
6826 }
6827 }
6828
6829 if (nargs != nparms
6830 && !(variadic_p && nargs >= nparms - 1))
6831 return 0;
6832
6833 /* Check all of the template parameters except the parameter pack at
6834 the end (if any). */
6835 for (i = 0; i < nparms - variadic_p; ++i)
6836 {
6837 if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
6838 || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6839 continue;
6840
6841 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6842 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6843
6844 if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6845 outer_args))
6846 return 0;
6847
6848 }
6849
6850 if (variadic_p)
6851 {
6852 /* Check each of the template parameters in the template
6853 argument against the template parameter pack at the end of
6854 the template template parameter. */
6855 if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
6856 return 0;
6857
6858 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6859
6860 for (; i < nargs; ++i)
6861 {
6862 if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6863 continue;
6864
6865 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6866
6867 if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6868 outer_args))
6869 return 0;
6870 }
6871 }
6872
6873 return 1;
6874 }
6875
6876 /* Verifies that the deduced template arguments (in TARGS) for the
6877 template template parameters (in TPARMS) represent valid bindings,
6878 by comparing the template parameter list of each template argument
6879 to the template parameter list of its corresponding template
6880 template parameter, in accordance with DR150. This
6881 routine can only be called after all template arguments have been
6882 deduced. It will return TRUE if all of the template template
6883 parameter bindings are okay, FALSE otherwise. */
6884 bool
6885 template_template_parm_bindings_ok_p (tree tparms, tree targs)
6886 {
6887 int i, ntparms = TREE_VEC_LENGTH (tparms);
6888 bool ret = true;
6889
6890 /* We're dealing with template parms in this process. */
6891 ++processing_template_decl;
6892
6893 targs = INNERMOST_TEMPLATE_ARGS (targs);
6894
6895 for (i = 0; i < ntparms; ++i)
6896 {
6897 tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
6898 tree targ = TREE_VEC_ELT (targs, i);
6899
6900 if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
6901 {
6902 tree packed_args = NULL_TREE;
6903 int idx, len = 1;
6904
6905 if (ARGUMENT_PACK_P (targ))
6906 {
6907 /* Look inside the argument pack. */
6908 packed_args = ARGUMENT_PACK_ARGS (targ);
6909 len = TREE_VEC_LENGTH (packed_args);
6910 }
6911
6912 for (idx = 0; idx < len; ++idx)
6913 {
6914 tree targ_parms = NULL_TREE;
6915
6916 if (packed_args)
6917 /* Extract the next argument from the argument
6918 pack. */
6919 targ = TREE_VEC_ELT (packed_args, idx);
6920
6921 if (PACK_EXPANSION_P (targ))
6922 /* Look at the pattern of the pack expansion. */
6923 targ = PACK_EXPANSION_PATTERN (targ);
6924
6925 /* Extract the template parameters from the template
6926 argument. */
6927 if (TREE_CODE (targ) == TEMPLATE_DECL)
6928 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
6929 else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
6930 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
6931
6932 /* Verify that we can coerce the template template
6933 parameters from the template argument to the template
6934 parameter. This requires an exact match. */
6935 if (targ_parms
6936 && !coerce_template_template_parms
6937 (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
6938 targ_parms,
6939 tf_none,
6940 tparm,
6941 targs))
6942 {
6943 ret = false;
6944 goto out;
6945 }
6946 }
6947 }
6948 }
6949
6950 out:
6951
6952 --processing_template_decl;
6953 return ret;
6954 }
6955
6956 /* Since type attributes aren't mangled, we need to strip them from
6957 template type arguments. */
6958
6959 static tree
6960 canonicalize_type_argument (tree arg, tsubst_flags_t complain)
6961 {
6962 if (!arg || arg == error_mark_node || arg == TYPE_CANONICAL (arg))
6963 return arg;
6964 bool removed_attributes = false;
6965 tree canon = strip_typedefs (arg, &removed_attributes);
6966 if (removed_attributes
6967 && (complain & tf_warning))
6968 warning (OPT_Wignored_attributes,
6969 "ignoring attributes on template argument %qT", arg);
6970 return canon;
6971 }
6972
6973 // A template declaration can be substituted for a constrained
6974 // template template parameter only when the argument is more
6975 // constrained than the parameter.
6976 static bool
6977 is_compatible_template_arg (tree parm, tree arg)
6978 {
6979 tree parm_cons = get_constraints (parm);
6980
6981 /* For now, allow constrained template template arguments
6982 and unconstrained template template parameters. */
6983 if (parm_cons == NULL_TREE)
6984 return true;
6985
6986 tree arg_cons = get_constraints (arg);
6987
6988 // If the template parameter is constrained, we need to rewrite its
6989 // constraints in terms of the ARG's template parameters. This ensures
6990 // that all of the template parameter types will have the same depth.
6991 //
6992 // Note that this is only valid when coerce_template_template_parm is
6993 // true for the innermost template parameters of PARM and ARG. In other
6994 // words, because coercion is successful, this conversion will be valid.
6995 if (parm_cons)
6996 {
6997 tree args = template_parms_to_args (DECL_TEMPLATE_PARMS (arg));
6998 parm_cons = tsubst_constraint_info (parm_cons,
6999 INNERMOST_TEMPLATE_ARGS (args),
7000 tf_none, NULL_TREE);
7001 if (parm_cons == error_mark_node)
7002 return false;
7003 }
7004
7005 return subsumes (parm_cons, arg_cons);
7006 }
7007
7008 // Convert a placeholder argument into a binding to the original
7009 // parameter. The original parameter is saved as the TREE_TYPE of
7010 // ARG.
7011 static inline tree
7012 convert_wildcard_argument (tree parm, tree arg)
7013 {
7014 TREE_TYPE (arg) = parm;
7015 return arg;
7016 }
7017
7018 /* Convert the indicated template ARG as necessary to match the
7019 indicated template PARM. Returns the converted ARG, or
7020 error_mark_node if the conversion was unsuccessful. Error and
7021 warning messages are issued under control of COMPLAIN. This
7022 conversion is for the Ith parameter in the parameter list. ARGS is
7023 the full set of template arguments deduced so far. */
7024
7025 static tree
7026 convert_template_argument (tree parm,
7027 tree arg,
7028 tree args,
7029 tsubst_flags_t complain,
7030 int i,
7031 tree in_decl)
7032 {
7033 tree orig_arg;
7034 tree val;
7035 int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
7036
7037 if (parm == error_mark_node)
7038 return error_mark_node;
7039
7040 /* Trivially convert placeholders. */
7041 if (TREE_CODE (arg) == WILDCARD_DECL)
7042 return convert_wildcard_argument (parm, arg);
7043
7044 if (TREE_CODE (arg) == TREE_LIST
7045 && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
7046 {
7047 /* The template argument was the name of some
7048 member function. That's usually
7049 invalid, but static members are OK. In any
7050 case, grab the underlying fields/functions
7051 and issue an error later if required. */
7052 orig_arg = TREE_VALUE (arg);
7053 TREE_TYPE (arg) = unknown_type_node;
7054 }
7055
7056 orig_arg = arg;
7057
7058 requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
7059 requires_type = (TREE_CODE (parm) == TYPE_DECL
7060 || requires_tmpl_type);
7061
7062 /* When determining whether an argument pack expansion is a template,
7063 look at the pattern. */
7064 if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
7065 arg = PACK_EXPANSION_PATTERN (arg);
7066
7067 /* Deal with an injected-class-name used as a template template arg. */
7068 if (requires_tmpl_type && CLASS_TYPE_P (arg))
7069 {
7070 tree t = maybe_get_template_decl_from_type_decl (TYPE_NAME (arg));
7071 if (TREE_CODE (t) == TEMPLATE_DECL)
7072 {
7073 if (cxx_dialect >= cxx11)
7074 /* OK under DR 1004. */;
7075 else if (complain & tf_warning_or_error)
7076 pedwarn (input_location, OPT_Wpedantic, "injected-class-name %qD"
7077 " used as template template argument", TYPE_NAME (arg));
7078 else if (flag_pedantic_errors)
7079 t = arg;
7080
7081 arg = t;
7082 }
7083 }
7084
7085 is_tmpl_type =
7086 ((TREE_CODE (arg) == TEMPLATE_DECL
7087 && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
7088 || (requires_tmpl_type && TREE_CODE (arg) == TYPE_ARGUMENT_PACK)
7089 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
7090 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
7091
7092 if (is_tmpl_type
7093 && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
7094 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
7095 arg = TYPE_STUB_DECL (arg);
7096
7097 is_type = TYPE_P (arg) || is_tmpl_type;
7098
7099 if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
7100 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
7101 {
7102 if (TREE_CODE (TREE_OPERAND (arg, 1)) == BIT_NOT_EXPR)
7103 {
7104 if (complain & tf_error)
7105 error ("invalid use of destructor %qE as a type", orig_arg);
7106 return error_mark_node;
7107 }
7108
7109 permerror (input_location,
7110 "to refer to a type member of a template parameter, "
7111 "use %<typename %E%>", orig_arg);
7112
7113 orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
7114 TREE_OPERAND (arg, 1),
7115 typename_type,
7116 complain);
7117 arg = orig_arg;
7118 is_type = 1;
7119 }
7120 if (is_type != requires_type)
7121 {
7122 if (in_decl)
7123 {
7124 if (complain & tf_error)
7125 {
7126 error ("type/value mismatch at argument %d in template "
7127 "parameter list for %qD",
7128 i + 1, in_decl);
7129 if (is_type)
7130 inform (input_location,
7131 " expected a constant of type %qT, got %qT",
7132 TREE_TYPE (parm),
7133 (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
7134 else if (requires_tmpl_type)
7135 inform (input_location,
7136 " expected a class template, got %qE", orig_arg);
7137 else
7138 inform (input_location,
7139 " expected a type, got %qE", orig_arg);
7140 }
7141 }
7142 return error_mark_node;
7143 }
7144 if (is_tmpl_type ^ requires_tmpl_type)
7145 {
7146 if (in_decl && (complain & tf_error))
7147 {
7148 error ("type/value mismatch at argument %d in template "
7149 "parameter list for %qD",
7150 i + 1, in_decl);
7151 if (is_tmpl_type)
7152 inform (input_location,
7153 " expected a type, got %qT", DECL_NAME (arg));
7154 else
7155 inform (input_location,
7156 " expected a class template, got %qT", orig_arg);
7157 }
7158 return error_mark_node;
7159 }
7160
7161 if (is_type)
7162 {
7163 if (requires_tmpl_type)
7164 {
7165 if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
7166 val = orig_arg;
7167 else if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
7168 /* The number of argument required is not known yet.
7169 Just accept it for now. */
7170 val = TREE_TYPE (arg);
7171 else
7172 {
7173 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
7174 tree argparm;
7175
7176 /* Strip alias templates that are equivalent to another
7177 template. */
7178 arg = get_underlying_template (arg);
7179 argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
7180
7181 if (coerce_template_template_parms (parmparm, argparm,
7182 complain, in_decl,
7183 args))
7184 {
7185 val = arg;
7186
7187 /* TEMPLATE_TEMPLATE_PARM node is preferred over
7188 TEMPLATE_DECL. */
7189 if (val != error_mark_node)
7190 {
7191 if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
7192 val = TREE_TYPE (val);
7193 if (TREE_CODE (orig_arg) == TYPE_PACK_EXPANSION)
7194 val = make_pack_expansion (val);
7195 }
7196 }
7197 else
7198 {
7199 if (in_decl && (complain & tf_error))
7200 {
7201 error ("type/value mismatch at argument %d in "
7202 "template parameter list for %qD",
7203 i + 1, in_decl);
7204 inform (input_location,
7205 " expected a template of type %qD, got %qT",
7206 parm, orig_arg);
7207 }
7208
7209 val = error_mark_node;
7210 }
7211
7212 // Check that the constraints are compatible before allowing the
7213 // substitution.
7214 if (val != error_mark_node)
7215 if (!is_compatible_template_arg (parm, arg))
7216 {
7217 if (in_decl && (complain & tf_error))
7218 {
7219 error ("constraint mismatch at argument %d in "
7220 "template parameter list for %qD",
7221 i + 1, in_decl);
7222 inform (input_location, " expected %qD but got %qD",
7223 parm, arg);
7224 }
7225 val = error_mark_node;
7226 }
7227 }
7228 }
7229 else
7230 val = orig_arg;
7231 /* We only form one instance of each template specialization.
7232 Therefore, if we use a non-canonical variant (i.e., a
7233 typedef), any future messages referring to the type will use
7234 the typedef, which is confusing if those future uses do not
7235 themselves also use the typedef. */
7236 if (TYPE_P (val))
7237 val = canonicalize_type_argument (val, complain);
7238 }
7239 else
7240 {
7241 tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
7242
7243 if (invalid_nontype_parm_type_p (t, complain))
7244 return error_mark_node;
7245
7246 if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
7247 {
7248 if (same_type_p (t, TREE_TYPE (orig_arg)))
7249 val = orig_arg;
7250 else
7251 {
7252 /* Not sure if this is reachable, but it doesn't hurt
7253 to be robust. */
7254 error ("type mismatch in nontype parameter pack");
7255 val = error_mark_node;
7256 }
7257 }
7258 else if (!dependent_template_arg_p (orig_arg)
7259 && !uses_template_parms (t))
7260 /* We used to call digest_init here. However, digest_init
7261 will report errors, which we don't want when complain
7262 is zero. More importantly, digest_init will try too
7263 hard to convert things: for example, `0' should not be
7264 converted to pointer type at this point according to
7265 the standard. Accepting this is not merely an
7266 extension, since deciding whether or not these
7267 conversions can occur is part of determining which
7268 function template to call, or whether a given explicit
7269 argument specification is valid. */
7270 val = convert_nontype_argument (t, orig_arg, complain);
7271 else
7272 {
7273 bool removed_attr = false;
7274 val = strip_typedefs_expr (orig_arg, &removed_attr);
7275 }
7276
7277 if (val == NULL_TREE)
7278 val = error_mark_node;
7279 else if (val == error_mark_node && (complain & tf_error))
7280 error ("could not convert template argument %qE to %qT", orig_arg, t);
7281
7282 if (INDIRECT_REF_P (val))
7283 {
7284 /* Reject template arguments that are references to built-in
7285 functions with no library fallbacks. */
7286 const_tree inner = TREE_OPERAND (val, 0);
7287 if (TREE_CODE (TREE_TYPE (inner)) == REFERENCE_TYPE
7288 && TREE_CODE (TREE_TYPE (TREE_TYPE (inner))) == FUNCTION_TYPE
7289 && TREE_CODE (TREE_TYPE (inner)) == REFERENCE_TYPE
7290 && 0 < TREE_OPERAND_LENGTH (inner)
7291 && reject_gcc_builtin (TREE_OPERAND (inner, 0)))
7292 return error_mark_node;
7293 }
7294
7295 if (TREE_CODE (val) == SCOPE_REF)
7296 {
7297 /* Strip typedefs from the SCOPE_REF. */
7298 tree type = canonicalize_type_argument (TREE_TYPE (val), complain);
7299 tree scope = canonicalize_type_argument (TREE_OPERAND (val, 0),
7300 complain);
7301 val = build_qualified_name (type, scope, TREE_OPERAND (val, 1),
7302 QUALIFIED_NAME_IS_TEMPLATE (val));
7303 }
7304 }
7305
7306 return val;
7307 }
7308
7309 /* Coerces the remaining template arguments in INNER_ARGS (from
7310 ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
7311 Returns the coerced argument pack. PARM_IDX is the position of this
7312 parameter in the template parameter list. ARGS is the original
7313 template argument list. */
7314 static tree
7315 coerce_template_parameter_pack (tree parms,
7316 int parm_idx,
7317 tree args,
7318 tree inner_args,
7319 int arg_idx,
7320 tree new_args,
7321 int* lost,
7322 tree in_decl,
7323 tsubst_flags_t complain)
7324 {
7325 tree parm = TREE_VEC_ELT (parms, parm_idx);
7326 int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
7327 tree packed_args;
7328 tree argument_pack;
7329 tree packed_parms = NULL_TREE;
7330
7331 if (arg_idx > nargs)
7332 arg_idx = nargs;
7333
7334 if (tree packs = fixed_parameter_pack_p (TREE_VALUE (parm)))
7335 {
7336 /* When the template parameter is a non-type template parameter pack
7337 or template template parameter pack whose type or template
7338 parameters use parameter packs, we know exactly how many arguments
7339 we are looking for. Build a vector of the instantiated decls for
7340 these template parameters in PACKED_PARMS. */
7341 /* We can't use make_pack_expansion here because it would interpret a
7342 _DECL as a use rather than a declaration. */
7343 tree decl = TREE_VALUE (parm);
7344 tree exp = cxx_make_type (TYPE_PACK_EXPANSION);
7345 SET_PACK_EXPANSION_PATTERN (exp, decl);
7346 PACK_EXPANSION_PARAMETER_PACKS (exp) = packs;
7347 SET_TYPE_STRUCTURAL_EQUALITY (exp);
7348
7349 TREE_VEC_LENGTH (args)--;
7350 packed_parms = tsubst_pack_expansion (exp, args, complain, decl);
7351 TREE_VEC_LENGTH (args)++;
7352
7353 if (packed_parms == error_mark_node)
7354 return error_mark_node;
7355
7356 /* If we're doing a partial instantiation of a member template,
7357 verify that all of the types used for the non-type
7358 template parameter pack are, in fact, valid for non-type
7359 template parameters. */
7360 if (arg_idx < nargs
7361 && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
7362 {
7363 int j, len = TREE_VEC_LENGTH (packed_parms);
7364 for (j = 0; j < len; ++j)
7365 {
7366 tree t = TREE_TYPE (TREE_VEC_ELT (packed_parms, j));
7367 if (invalid_nontype_parm_type_p (t, complain))
7368 return error_mark_node;
7369 }
7370 /* We don't know how many args we have yet, just
7371 use the unconverted ones for now. */
7372 return NULL_TREE;
7373 }
7374
7375 packed_args = make_tree_vec (TREE_VEC_LENGTH (packed_parms));
7376 }
7377 /* Check if we have a placeholder pack, which indicates we're
7378 in the context of a introduction list. In that case we want
7379 to match this pack to the single placeholder. */
7380 else if (arg_idx < nargs
7381 && TREE_CODE (TREE_VEC_ELT (inner_args, arg_idx)) == WILDCARD_DECL
7382 && WILDCARD_PACK_P (TREE_VEC_ELT (inner_args, arg_idx)))
7383 {
7384 nargs = arg_idx + 1;
7385 packed_args = make_tree_vec (1);
7386 }
7387 else
7388 packed_args = make_tree_vec (nargs - arg_idx);
7389
7390 /* Convert the remaining arguments, which will be a part of the
7391 parameter pack "parm". */
7392 for (; arg_idx < nargs; ++arg_idx)
7393 {
7394 tree arg = TREE_VEC_ELT (inner_args, arg_idx);
7395 tree actual_parm = TREE_VALUE (parm);
7396 int pack_idx = arg_idx - parm_idx;
7397
7398 if (packed_parms)
7399 {
7400 /* Once we've packed as many args as we have types, stop. */
7401 if (pack_idx >= TREE_VEC_LENGTH (packed_parms))
7402 break;
7403 else if (PACK_EXPANSION_P (arg))
7404 /* We don't know how many args we have yet, just
7405 use the unconverted ones for now. */
7406 return NULL_TREE;
7407 else
7408 actual_parm = TREE_VEC_ELT (packed_parms, pack_idx);
7409 }
7410
7411 if (arg == error_mark_node)
7412 {
7413 if (complain & tf_error)
7414 error ("template argument %d is invalid", arg_idx + 1);
7415 }
7416 else
7417 arg = convert_template_argument (actual_parm,
7418 arg, new_args, complain, parm_idx,
7419 in_decl);
7420 if (arg == error_mark_node)
7421 (*lost)++;
7422 TREE_VEC_ELT (packed_args, pack_idx) = arg;
7423 }
7424
7425 if (arg_idx - parm_idx < TREE_VEC_LENGTH (packed_args)
7426 && TREE_VEC_LENGTH (packed_args) > 0)
7427 {
7428 if (complain & tf_error)
7429 error ("wrong number of template arguments (%d, should be %d)",
7430 arg_idx - parm_idx, TREE_VEC_LENGTH (packed_args));
7431 return error_mark_node;
7432 }
7433
7434 if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
7435 || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
7436 argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
7437 else
7438 {
7439 argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
7440 TREE_TYPE (argument_pack)
7441 = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
7442 TREE_CONSTANT (argument_pack) = 1;
7443 }
7444
7445 SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
7446 if (CHECKING_P)
7447 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
7448 TREE_VEC_LENGTH (packed_args));
7449 return argument_pack;
7450 }
7451
7452 /* Returns the number of pack expansions in the template argument vector
7453 ARGS. */
7454
7455 static int
7456 pack_expansion_args_count (tree args)
7457 {
7458 int i;
7459 int count = 0;
7460 if (args)
7461 for (i = 0; i < TREE_VEC_LENGTH (args); ++i)
7462 {
7463 tree elt = TREE_VEC_ELT (args, i);
7464 if (elt && PACK_EXPANSION_P (elt))
7465 ++count;
7466 }
7467 return count;
7468 }
7469
7470 /* Convert all template arguments to their appropriate types, and
7471 return a vector containing the innermost resulting template
7472 arguments. If any error occurs, return error_mark_node. Error and
7473 warning messages are issued under control of COMPLAIN.
7474
7475 If REQUIRE_ALL_ARGS is false, argument deduction will be performed
7476 for arguments not specified in ARGS. Otherwise, if
7477 USE_DEFAULT_ARGS is true, default arguments will be used to fill in
7478 unspecified arguments. If REQUIRE_ALL_ARGS is true, but
7479 USE_DEFAULT_ARGS is false, then all arguments must be specified in
7480 ARGS. */
7481
7482 static tree
7483 coerce_template_parms (tree parms,
7484 tree args,
7485 tree in_decl,
7486 tsubst_flags_t complain,
7487 bool require_all_args,
7488 bool use_default_args)
7489 {
7490 int nparms, nargs, parm_idx, arg_idx, lost = 0;
7491 tree orig_inner_args;
7492 tree inner_args;
7493 tree new_args;
7494 tree new_inner_args;
7495 int saved_unevaluated_operand;
7496 int saved_inhibit_evaluation_warnings;
7497
7498 /* When used as a boolean value, indicates whether this is a
7499 variadic template parameter list. Since it's an int, we can also
7500 subtract it from nparms to get the number of non-variadic
7501 parameters. */
7502 int variadic_p = 0;
7503 int variadic_args_p = 0;
7504 int post_variadic_parms = 0;
7505
7506 /* Likewise for parameters with default arguments. */
7507 int default_p = 0;
7508
7509 if (args == error_mark_node)
7510 return error_mark_node;
7511
7512 nparms = TREE_VEC_LENGTH (parms);
7513
7514 /* Determine if there are any parameter packs or default arguments. */
7515 for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
7516 {
7517 tree parm = TREE_VEC_ELT (parms, parm_idx);
7518 if (variadic_p)
7519 ++post_variadic_parms;
7520 if (template_parameter_pack_p (TREE_VALUE (parm)))
7521 ++variadic_p;
7522 if (TREE_PURPOSE (parm))
7523 ++default_p;
7524 }
7525
7526 inner_args = orig_inner_args = INNERMOST_TEMPLATE_ARGS (args);
7527 /* If there are no parameters that follow a parameter pack, we need to
7528 expand any argument packs so that we can deduce a parameter pack from
7529 some non-packed args followed by an argument pack, as in variadic85.C.
7530 If there are such parameters, we need to leave argument packs intact
7531 so the arguments are assigned properly. This can happen when dealing
7532 with a nested class inside a partial specialization of a class
7533 template, as in variadic92.C, or when deducing a template parameter pack
7534 from a sub-declarator, as in variadic114.C. */
7535 if (!post_variadic_parms)
7536 inner_args = expand_template_argument_pack (inner_args);
7537
7538 /* Count any pack expansion args. */
7539 variadic_args_p = pack_expansion_args_count (inner_args);
7540
7541 nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
7542 if ((nargs > nparms && !variadic_p)
7543 || (nargs < nparms - variadic_p
7544 && require_all_args
7545 && !variadic_args_p
7546 && (!use_default_args
7547 || (TREE_VEC_ELT (parms, nargs) != error_mark_node
7548 && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
7549 {
7550 if (complain & tf_error)
7551 {
7552 if (variadic_p || default_p)
7553 {
7554 nparms -= variadic_p + default_p;
7555 error ("wrong number of template arguments "
7556 "(%d, should be at least %d)", nargs, nparms);
7557 }
7558 else
7559 error ("wrong number of template arguments "
7560 "(%d, should be %d)", nargs, nparms);
7561
7562 if (in_decl)
7563 inform (DECL_SOURCE_LOCATION (in_decl),
7564 "provided for %qD", in_decl);
7565 }
7566
7567 return error_mark_node;
7568 }
7569 /* We can't pass a pack expansion to a non-pack parameter of an alias
7570 template (DR 1430). */
7571 else if (in_decl
7572 && (DECL_ALIAS_TEMPLATE_P (in_decl)
7573 || concept_template_p (in_decl))
7574 && variadic_args_p
7575 && nargs - variadic_args_p < nparms - variadic_p)
7576 {
7577 if (complain & tf_error)
7578 {
7579 for (int i = 0; i < TREE_VEC_LENGTH (inner_args); ++i)
7580 {
7581 tree arg = TREE_VEC_ELT (inner_args, i);
7582 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
7583
7584 if (PACK_EXPANSION_P (arg)
7585 && !template_parameter_pack_p (parm))
7586 {
7587 if (DECL_ALIAS_TEMPLATE_P (in_decl))
7588 error_at (location_of (arg),
7589 "pack expansion argument for non-pack parameter "
7590 "%qD of alias template %qD", parm, in_decl);
7591 else
7592 error_at (location_of (arg),
7593 "pack expansion argument for non-pack parameter "
7594 "%qD of concept %qD", parm, in_decl);
7595 inform (DECL_SOURCE_LOCATION (parm), "declared here");
7596 goto found;
7597 }
7598 }
7599 gcc_unreachable ();
7600 found:;
7601 }
7602 return error_mark_node;
7603 }
7604
7605 /* We need to evaluate the template arguments, even though this
7606 template-id may be nested within a "sizeof". */
7607 saved_unevaluated_operand = cp_unevaluated_operand;
7608 cp_unevaluated_operand = 0;
7609 saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
7610 c_inhibit_evaluation_warnings = 0;
7611 new_inner_args = make_tree_vec (nparms);
7612 new_args = add_outermost_template_args (args, new_inner_args);
7613 int pack_adjust = 0;
7614 for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
7615 {
7616 tree arg;
7617 tree parm;
7618
7619 /* Get the Ith template parameter. */
7620 parm = TREE_VEC_ELT (parms, parm_idx);
7621
7622 if (parm == error_mark_node)
7623 {
7624 TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
7625 continue;
7626 }
7627
7628 /* Calculate the next argument. */
7629 if (arg_idx < nargs)
7630 arg = TREE_VEC_ELT (inner_args, arg_idx);
7631 else
7632 arg = NULL_TREE;
7633
7634 if (template_parameter_pack_p (TREE_VALUE (parm))
7635 && !(arg && ARGUMENT_PACK_P (arg)))
7636 {
7637 /* Some arguments will be placed in the
7638 template parameter pack PARM. */
7639 arg = coerce_template_parameter_pack (parms, parm_idx, args,
7640 inner_args, arg_idx,
7641 new_args, &lost,
7642 in_decl, complain);
7643
7644 if (arg == NULL_TREE)
7645 {
7646 /* We don't know how many args we have yet, just use the
7647 unconverted (and still packed) ones for now. */
7648 new_inner_args = orig_inner_args;
7649 arg_idx = nargs;
7650 break;
7651 }
7652
7653 TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
7654
7655 /* Store this argument. */
7656 if (arg == error_mark_node)
7657 {
7658 lost++;
7659 /* We are done with all of the arguments. */
7660 arg_idx = nargs;
7661 }
7662 else
7663 {
7664 pack_adjust = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg)) - 1;
7665 arg_idx += pack_adjust;
7666 }
7667
7668 continue;
7669 }
7670 else if (arg)
7671 {
7672 if (PACK_EXPANSION_P (arg))
7673 {
7674 /* "If every valid specialization of a variadic template
7675 requires an empty template parameter pack, the template is
7676 ill-formed, no diagnostic required." So check that the
7677 pattern works with this parameter. */
7678 tree pattern = PACK_EXPANSION_PATTERN (arg);
7679 tree conv = convert_template_argument (TREE_VALUE (parm),
7680 pattern, new_args,
7681 complain, parm_idx,
7682 in_decl);
7683 if (conv == error_mark_node)
7684 {
7685 inform (input_location, "so any instantiation with a "
7686 "non-empty parameter pack would be ill-formed");
7687 ++lost;
7688 }
7689 else if (TYPE_P (conv) && !TYPE_P (pattern))
7690 /* Recover from missing typename. */
7691 TREE_VEC_ELT (inner_args, arg_idx)
7692 = make_pack_expansion (conv);
7693
7694 /* We don't know how many args we have yet, just
7695 use the unconverted ones for now. */
7696 new_inner_args = inner_args;
7697 arg_idx = nargs;
7698 break;
7699 }
7700 }
7701 else if (require_all_args)
7702 {
7703 /* There must be a default arg in this case. */
7704 arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
7705 complain, in_decl);
7706 /* The position of the first default template argument,
7707 is also the number of non-defaulted arguments in NEW_INNER_ARGS.
7708 Record that. */
7709 if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
7710 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
7711 arg_idx - pack_adjust);
7712 }
7713 else
7714 break;
7715
7716 if (arg == error_mark_node)
7717 {
7718 if (complain & tf_error)
7719 error ("template argument %d is invalid", arg_idx + 1);
7720 }
7721 else if (!arg)
7722 /* This only occurs if there was an error in the template
7723 parameter list itself (which we would already have
7724 reported) that we are trying to recover from, e.g., a class
7725 template with a parameter list such as
7726 template<typename..., typename>. */
7727 ++lost;
7728 else
7729 arg = convert_template_argument (TREE_VALUE (parm),
7730 arg, new_args, complain,
7731 parm_idx, in_decl);
7732
7733 if (arg == error_mark_node)
7734 lost++;
7735 TREE_VEC_ELT (new_inner_args, arg_idx - pack_adjust) = arg;
7736 }
7737 cp_unevaluated_operand = saved_unevaluated_operand;
7738 c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
7739
7740 if (variadic_p && arg_idx < nargs)
7741 {
7742 if (complain & tf_error)
7743 {
7744 error ("wrong number of template arguments "
7745 "(%d, should be %d)", nargs, arg_idx);
7746 if (in_decl)
7747 error ("provided for %q+D", in_decl);
7748 }
7749 return error_mark_node;
7750 }
7751
7752 if (lost)
7753 return error_mark_node;
7754
7755 if (CHECKING_P && !NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
7756 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
7757 TREE_VEC_LENGTH (new_inner_args));
7758
7759 return new_inner_args;
7760 }
7761
7762 /* Convert all template arguments to their appropriate types, and
7763 return a vector containing the innermost resulting template
7764 arguments. If any error occurs, return error_mark_node. Error and
7765 warning messages are not issued.
7766
7767 Note that no function argument deduction is performed, and default
7768 arguments are used to fill in unspecified arguments. */
7769 tree
7770 coerce_template_parms (tree parms, tree args, tree in_decl)
7771 {
7772 return coerce_template_parms (parms, args, in_decl, tf_none, true, true);
7773 }
7774
7775 /* Convert all template arguments to their appropriate type, and
7776 instantiate default arguments as needed. This returns a vector
7777 containing the innermost resulting template arguments, or
7778 error_mark_node if unsuccessful. */
7779 tree
7780 coerce_template_parms (tree parms, tree args, tree in_decl,
7781 tsubst_flags_t complain)
7782 {
7783 return coerce_template_parms (parms, args, in_decl, complain, true, true);
7784 }
7785
7786 /* Like coerce_template_parms. If PARMS represents all template
7787 parameters levels, this function returns a vector of vectors
7788 representing all the resulting argument levels. Note that in this
7789 case, only the innermost arguments are coerced because the
7790 outermost ones are supposed to have been coerced already.
7791
7792 Otherwise, if PARMS represents only (the innermost) vector of
7793 parameters, this function returns a vector containing just the
7794 innermost resulting arguments. */
7795
7796 static tree
7797 coerce_innermost_template_parms (tree parms,
7798 tree args,
7799 tree in_decl,
7800 tsubst_flags_t complain,
7801 bool require_all_args,
7802 bool use_default_args)
7803 {
7804 int parms_depth = TMPL_PARMS_DEPTH (parms);
7805 int args_depth = TMPL_ARGS_DEPTH (args);
7806 tree coerced_args;
7807
7808 if (parms_depth > 1)
7809 {
7810 coerced_args = make_tree_vec (parms_depth);
7811 tree level;
7812 int cur_depth;
7813
7814 for (level = parms, cur_depth = parms_depth;
7815 parms_depth > 0 && level != NULL_TREE;
7816 level = TREE_CHAIN (level), --cur_depth)
7817 {
7818 tree l;
7819 if (cur_depth == args_depth)
7820 l = coerce_template_parms (TREE_VALUE (level),
7821 args, in_decl, complain,
7822 require_all_args,
7823 use_default_args);
7824 else
7825 l = TMPL_ARGS_LEVEL (args, cur_depth);
7826
7827 if (l == error_mark_node)
7828 return error_mark_node;
7829
7830 SET_TMPL_ARGS_LEVEL (coerced_args, cur_depth, l);
7831 }
7832 }
7833 else
7834 coerced_args = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parms),
7835 args, in_decl, complain,
7836 require_all_args,
7837 use_default_args);
7838 return coerced_args;
7839 }
7840
7841 /* Returns 1 if template args OT and NT are equivalent. */
7842
7843 static int
7844 template_args_equal (tree ot, tree nt)
7845 {
7846 if (nt == ot)
7847 return 1;
7848 if (nt == NULL_TREE || ot == NULL_TREE)
7849 return false;
7850
7851 if (TREE_CODE (nt) == TREE_VEC)
7852 /* For member templates */
7853 return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
7854 else if (PACK_EXPANSION_P (ot))
7855 return (PACK_EXPANSION_P (nt)
7856 && template_args_equal (PACK_EXPANSION_PATTERN (ot),
7857 PACK_EXPANSION_PATTERN (nt))
7858 && template_args_equal (PACK_EXPANSION_EXTRA_ARGS (ot),
7859 PACK_EXPANSION_EXTRA_ARGS (nt)));
7860 else if (ARGUMENT_PACK_P (ot))
7861 {
7862 int i, len;
7863 tree opack, npack;
7864
7865 if (!ARGUMENT_PACK_P (nt))
7866 return 0;
7867
7868 opack = ARGUMENT_PACK_ARGS (ot);
7869 npack = ARGUMENT_PACK_ARGS (nt);
7870 len = TREE_VEC_LENGTH (opack);
7871 if (TREE_VEC_LENGTH (npack) != len)
7872 return 0;
7873 for (i = 0; i < len; ++i)
7874 if (!template_args_equal (TREE_VEC_ELT (opack, i),
7875 TREE_VEC_ELT (npack, i)))
7876 return 0;
7877 return 1;
7878 }
7879 else if (ot && TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
7880 {
7881 /* We get here probably because we are in the middle of substituting
7882 into the pattern of a pack expansion. In that case the
7883 ARGUMENT_PACK_SELECT temporarily replaces the pack argument we are
7884 interested in. So we want to use the initial pack argument for
7885 the comparison. */
7886 ot = ARGUMENT_PACK_SELECT_FROM_PACK (ot);
7887 if (nt && TREE_CODE (nt) == ARGUMENT_PACK_SELECT)
7888 nt = ARGUMENT_PACK_SELECT_FROM_PACK (nt);
7889 return template_args_equal (ot, nt);
7890 }
7891 else if (TYPE_P (nt))
7892 {
7893 if (!TYPE_P (ot))
7894 return false;
7895 /* Don't treat an alias template specialization with dependent
7896 arguments as equivalent to its underlying type when used as a
7897 template argument; we need them to be distinct so that we
7898 substitute into the specialization arguments at instantiation
7899 time. And aliases can't be equivalent without being ==, so
7900 we don't need to look any deeper. */
7901 if (TYPE_ALIAS_P (nt) || TYPE_ALIAS_P (ot))
7902 return false;
7903 else
7904 return same_type_p (ot, nt);
7905 }
7906 else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
7907 return 0;
7908 else
7909 {
7910 /* Try to treat a template non-type argument that has been converted
7911 to the parameter type as equivalent to one that hasn't yet. */
7912 for (enum tree_code code1 = TREE_CODE (ot);
7913 CONVERT_EXPR_CODE_P (code1)
7914 || code1 == NON_LVALUE_EXPR;
7915 code1 = TREE_CODE (ot))
7916 ot = TREE_OPERAND (ot, 0);
7917 for (enum tree_code code2 = TREE_CODE (nt);
7918 CONVERT_EXPR_CODE_P (code2)
7919 || code2 == NON_LVALUE_EXPR;
7920 code2 = TREE_CODE (nt))
7921 nt = TREE_OPERAND (nt, 0);
7922
7923 return cp_tree_equal (ot, nt);
7924 }
7925 }
7926
7927 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets of
7928 template arguments. Returns 0 otherwise, and updates OLDARG_PTR and
7929 NEWARG_PTR with the offending arguments if they are non-NULL. */
7930
7931 int
7932 comp_template_args (tree oldargs, tree newargs,
7933 tree *oldarg_ptr, tree *newarg_ptr)
7934 {
7935 int i;
7936
7937 if (oldargs == newargs)
7938 return 1;
7939
7940 if (!oldargs || !newargs)
7941 return 0;
7942
7943 if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
7944 return 0;
7945
7946 for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
7947 {
7948 tree nt = TREE_VEC_ELT (newargs, i);
7949 tree ot = TREE_VEC_ELT (oldargs, i);
7950
7951 if (! template_args_equal (ot, nt))
7952 {
7953 if (oldarg_ptr != NULL)
7954 *oldarg_ptr = ot;
7955 if (newarg_ptr != NULL)
7956 *newarg_ptr = nt;
7957 return 0;
7958 }
7959 }
7960 return 1;
7961 }
7962
7963 static void
7964 add_pending_template (tree d)
7965 {
7966 tree ti = (TYPE_P (d)
7967 ? CLASSTYPE_TEMPLATE_INFO (d)
7968 : DECL_TEMPLATE_INFO (d));
7969 struct pending_template *pt;
7970 int level;
7971
7972 if (TI_PENDING_TEMPLATE_FLAG (ti))
7973 return;
7974
7975 /* We are called both from instantiate_decl, where we've already had a
7976 tinst_level pushed, and instantiate_template, where we haven't.
7977 Compensate. */
7978 level = !current_tinst_level || current_tinst_level->decl != d;
7979
7980 if (level)
7981 push_tinst_level (d);
7982
7983 pt = ggc_alloc<pending_template> ();
7984 pt->next = NULL;
7985 pt->tinst = current_tinst_level;
7986 if (last_pending_template)
7987 last_pending_template->next = pt;
7988 else
7989 pending_templates = pt;
7990
7991 last_pending_template = pt;
7992
7993 TI_PENDING_TEMPLATE_FLAG (ti) = 1;
7994
7995 if (level)
7996 pop_tinst_level ();
7997 }
7998
7999
8000 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
8001 ARGLIST. Valid choices for FNS are given in the cp-tree.def
8002 documentation for TEMPLATE_ID_EXPR. */
8003
8004 tree
8005 lookup_template_function (tree fns, tree arglist)
8006 {
8007 tree type;
8008
8009 if (fns == error_mark_node || arglist == error_mark_node)
8010 return error_mark_node;
8011
8012 gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
8013
8014 if (!is_overloaded_fn (fns) && !identifier_p (fns))
8015 {
8016 error ("%q#D is not a function template", fns);
8017 return error_mark_node;
8018 }
8019
8020 if (BASELINK_P (fns))
8021 {
8022 BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
8023 unknown_type_node,
8024 BASELINK_FUNCTIONS (fns),
8025 arglist);
8026 return fns;
8027 }
8028
8029 type = TREE_TYPE (fns);
8030 if (TREE_CODE (fns) == OVERLOAD || !type)
8031 type = unknown_type_node;
8032
8033 return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
8034 }
8035
8036 /* Within the scope of a template class S<T>, the name S gets bound
8037 (in build_self_reference) to a TYPE_DECL for the class, not a
8038 TEMPLATE_DECL. If DECL is a TYPE_DECL for current_class_type,
8039 or one of its enclosing classes, and that type is a template,
8040 return the associated TEMPLATE_DECL. Otherwise, the original
8041 DECL is returned.
8042
8043 Also handle the case when DECL is a TREE_LIST of ambiguous
8044 injected-class-names from different bases. */
8045
8046 tree
8047 maybe_get_template_decl_from_type_decl (tree decl)
8048 {
8049 if (decl == NULL_TREE)
8050 return decl;
8051
8052 /* DR 176: A lookup that finds an injected-class-name (10.2
8053 [class.member.lookup]) can result in an ambiguity in certain cases
8054 (for example, if it is found in more than one base class). If all of
8055 the injected-class-names that are found refer to specializations of
8056 the same class template, and if the name is followed by a
8057 template-argument-list, the reference refers to the class template
8058 itself and not a specialization thereof, and is not ambiguous. */
8059 if (TREE_CODE (decl) == TREE_LIST)
8060 {
8061 tree t, tmpl = NULL_TREE;
8062 for (t = decl; t; t = TREE_CHAIN (t))
8063 {
8064 tree elt = maybe_get_template_decl_from_type_decl (TREE_VALUE (t));
8065 if (!tmpl)
8066 tmpl = elt;
8067 else if (tmpl != elt)
8068 break;
8069 }
8070 if (tmpl && t == NULL_TREE)
8071 return tmpl;
8072 else
8073 return decl;
8074 }
8075
8076 return (decl != NULL_TREE
8077 && DECL_SELF_REFERENCE_P (decl)
8078 && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
8079 ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
8080 }
8081
8082 /* Given an IDENTIFIER_NODE (or type TEMPLATE_DECL) and a chain of
8083 parameters, find the desired type.
8084
8085 D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
8086
8087 IN_DECL, if non-NULL, is the template declaration we are trying to
8088 instantiate.
8089
8090 If ENTERING_SCOPE is nonzero, we are about to enter the scope of
8091 the class we are looking up.
8092
8093 Issue error and warning messages under control of COMPLAIN.
8094
8095 If the template class is really a local class in a template
8096 function, then the FUNCTION_CONTEXT is the function in which it is
8097 being instantiated.
8098
8099 ??? Note that this function is currently called *twice* for each
8100 template-id: the first time from the parser, while creating the
8101 incomplete type (finish_template_type), and the second type during the
8102 real instantiation (instantiate_template_class). This is surely something
8103 that we want to avoid. It also causes some problems with argument
8104 coercion (see convert_nontype_argument for more information on this). */
8105
8106 static tree
8107 lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
8108 int entering_scope, tsubst_flags_t complain)
8109 {
8110 tree templ = NULL_TREE, parmlist;
8111 tree t;
8112 spec_entry **slot;
8113 spec_entry *entry;
8114 spec_entry elt;
8115 hashval_t hash;
8116
8117 if (identifier_p (d1))
8118 {
8119 tree value = innermost_non_namespace_value (d1);
8120 if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
8121 templ = value;
8122 else
8123 {
8124 if (context)
8125 push_decl_namespace (context);
8126 templ = lookup_name (d1);
8127 templ = maybe_get_template_decl_from_type_decl (templ);
8128 if (context)
8129 pop_decl_namespace ();
8130 }
8131 if (templ)
8132 context = DECL_CONTEXT (templ);
8133 }
8134 else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
8135 {
8136 tree type = TREE_TYPE (d1);
8137
8138 /* If we are declaring a constructor, say A<T>::A<T>, we will get
8139 an implicit typename for the second A. Deal with it. */
8140 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
8141 type = TREE_TYPE (type);
8142
8143 if (CLASSTYPE_TEMPLATE_INFO (type))
8144 {
8145 templ = CLASSTYPE_TI_TEMPLATE (type);
8146 d1 = DECL_NAME (templ);
8147 }
8148 }
8149 else if (TREE_CODE (d1) == ENUMERAL_TYPE
8150 || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
8151 {
8152 templ = TYPE_TI_TEMPLATE (d1);
8153 d1 = DECL_NAME (templ);
8154 }
8155 else if (DECL_TYPE_TEMPLATE_P (d1))
8156 {
8157 templ = d1;
8158 d1 = DECL_NAME (templ);
8159 context = DECL_CONTEXT (templ);
8160 }
8161 else if (DECL_TEMPLATE_TEMPLATE_PARM_P (d1))
8162 {
8163 templ = d1;
8164 d1 = DECL_NAME (templ);
8165 }
8166
8167 /* Issue an error message if we didn't find a template. */
8168 if (! templ)
8169 {
8170 if (complain & tf_error)
8171 error ("%qT is not a template", d1);
8172 return error_mark_node;
8173 }
8174
8175 if (TREE_CODE (templ) != TEMPLATE_DECL
8176 /* Make sure it's a user visible template, if it was named by
8177 the user. */
8178 || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
8179 && !PRIMARY_TEMPLATE_P (templ)))
8180 {
8181 if (complain & tf_error)
8182 {
8183 error ("non-template type %qT used as a template", d1);
8184 if (in_decl)
8185 error ("for template declaration %q+D", in_decl);
8186 }
8187 return error_mark_node;
8188 }
8189
8190 complain &= ~tf_user;
8191
8192 /* An alias that just changes the name of a template is equivalent to the
8193 other template, so if any of the arguments are pack expansions, strip
8194 the alias to avoid problems with a pack expansion passed to a non-pack
8195 alias template parameter (DR 1430). */
8196 if (pack_expansion_args_count (INNERMOST_TEMPLATE_ARGS (arglist)))
8197 templ = get_underlying_template (templ);
8198
8199 if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
8200 {
8201 /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
8202 template arguments */
8203
8204 tree parm;
8205 tree arglist2;
8206 tree outer;
8207
8208 parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
8209
8210 /* Consider an example where a template template parameter declared as
8211
8212 template <class T, class U = std::allocator<T> > class TT
8213
8214 The template parameter level of T and U are one level larger than
8215 of TT. To proper process the default argument of U, say when an
8216 instantiation `TT<int>' is seen, we need to build the full
8217 arguments containing {int} as the innermost level. Outer levels,
8218 available when not appearing as default template argument, can be
8219 obtained from the arguments of the enclosing template.
8220
8221 Suppose that TT is later substituted with std::vector. The above
8222 instantiation is `TT<int, std::allocator<T> >' with TT at
8223 level 1, and T at level 2, while the template arguments at level 1
8224 becomes {std::vector} and the inner level 2 is {int}. */
8225
8226 outer = DECL_CONTEXT (templ);
8227 if (outer)
8228 outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
8229 else if (current_template_parms)
8230 {
8231 /* This is an argument of the current template, so we haven't set
8232 DECL_CONTEXT yet. */
8233 tree relevant_template_parms;
8234
8235 /* Parameter levels that are greater than the level of the given
8236 template template parm are irrelevant. */
8237 relevant_template_parms = current_template_parms;
8238 while (TMPL_PARMS_DEPTH (relevant_template_parms)
8239 != TEMPLATE_TYPE_LEVEL (TREE_TYPE (templ)))
8240 relevant_template_parms = TREE_CHAIN (relevant_template_parms);
8241
8242 outer = template_parms_to_args (relevant_template_parms);
8243 }
8244
8245 if (outer)
8246 arglist = add_to_template_args (outer, arglist);
8247
8248 arglist2 = coerce_template_parms (parmlist, arglist, templ,
8249 complain,
8250 /*require_all_args=*/true,
8251 /*use_default_args=*/true);
8252 if (arglist2 == error_mark_node
8253 || (!uses_template_parms (arglist2)
8254 && check_instantiated_args (templ, arglist2, complain)))
8255 return error_mark_node;
8256
8257 parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
8258 return parm;
8259 }
8260 else
8261 {
8262 tree template_type = TREE_TYPE (templ);
8263 tree gen_tmpl;
8264 tree type_decl;
8265 tree found = NULL_TREE;
8266 int arg_depth;
8267 int parm_depth;
8268 int is_dependent_type;
8269 int use_partial_inst_tmpl = false;
8270
8271 if (template_type == error_mark_node)
8272 /* An error occurred while building the template TEMPL, and a
8273 diagnostic has most certainly been emitted for that
8274 already. Let's propagate that error. */
8275 return error_mark_node;
8276
8277 gen_tmpl = most_general_template (templ);
8278 parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
8279 parm_depth = TMPL_PARMS_DEPTH (parmlist);
8280 arg_depth = TMPL_ARGS_DEPTH (arglist);
8281
8282 if (arg_depth == 1 && parm_depth > 1)
8283 {
8284 /* We've been given an incomplete set of template arguments.
8285 For example, given:
8286
8287 template <class T> struct S1 {
8288 template <class U> struct S2 {};
8289 template <class U> struct S2<U*> {};
8290 };
8291
8292 we will be called with an ARGLIST of `U*', but the
8293 TEMPLATE will be `template <class T> template
8294 <class U> struct S1<T>::S2'. We must fill in the missing
8295 arguments. */
8296 arglist
8297 = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
8298 arglist);
8299 arg_depth = TMPL_ARGS_DEPTH (arglist);
8300 }
8301
8302 /* Now we should have enough arguments. */
8303 gcc_assert (parm_depth == arg_depth);
8304
8305 /* From here on, we're only interested in the most general
8306 template. */
8307
8308 /* Calculate the BOUND_ARGS. These will be the args that are
8309 actually tsubst'd into the definition to create the
8310 instantiation. */
8311 arglist = coerce_innermost_template_parms (parmlist, arglist, gen_tmpl,
8312 complain,
8313 /*require_all_args=*/true,
8314 /*use_default_args=*/true);
8315
8316 if (arglist == error_mark_node)
8317 /* We were unable to bind the arguments. */
8318 return error_mark_node;
8319
8320 /* In the scope of a template class, explicit references to the
8321 template class refer to the type of the template, not any
8322 instantiation of it. For example, in:
8323
8324 template <class T> class C { void f(C<T>); }
8325
8326 the `C<T>' is just the same as `C'. Outside of the
8327 class, however, such a reference is an instantiation. */
8328 if ((entering_scope
8329 || !PRIMARY_TEMPLATE_P (gen_tmpl)
8330 || currently_open_class (template_type))
8331 /* comp_template_args is expensive, check it last. */
8332 && comp_template_args (TYPE_TI_ARGS (template_type),
8333 arglist))
8334 return template_type;
8335
8336 /* If we already have this specialization, return it. */
8337 elt.tmpl = gen_tmpl;
8338 elt.args = arglist;
8339 elt.spec = NULL_TREE;
8340 hash = spec_hasher::hash (&elt);
8341 entry = type_specializations->find_with_hash (&elt, hash);
8342
8343 if (entry)
8344 return entry->spec;
8345
8346 /* If the the template's constraints are not satisfied,
8347 then we cannot form a valid type.
8348
8349 Note that the check is deferred until after the hash
8350 lookup. This prevents redundant checks on previously
8351 instantiated specializations. */
8352 if (flag_concepts && !constraints_satisfied_p (gen_tmpl, arglist))
8353 {
8354 if (complain & tf_error)
8355 {
8356 error ("template constraint failure");
8357 diagnose_constraints (input_location, gen_tmpl, arglist);
8358 }
8359 return error_mark_node;
8360 }
8361
8362 is_dependent_type = uses_template_parms (arglist);
8363
8364 /* If the deduced arguments are invalid, then the binding
8365 failed. */
8366 if (!is_dependent_type
8367 && check_instantiated_args (gen_tmpl,
8368 INNERMOST_TEMPLATE_ARGS (arglist),
8369 complain))
8370 return error_mark_node;
8371
8372 if (!is_dependent_type
8373 && !PRIMARY_TEMPLATE_P (gen_tmpl)
8374 && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
8375 && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
8376 {
8377 found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
8378 DECL_NAME (gen_tmpl),
8379 /*tag_scope=*/ts_global);
8380 return found;
8381 }
8382
8383 context = tsubst (DECL_CONTEXT (gen_tmpl), arglist,
8384 complain, in_decl);
8385 if (context == error_mark_node)
8386 return error_mark_node;
8387
8388 if (!context)
8389 context = global_namespace;
8390
8391 /* Create the type. */
8392 if (DECL_ALIAS_TEMPLATE_P (gen_tmpl))
8393 {
8394 /* The user referred to a specialization of an alias
8395 template represented by GEN_TMPL.
8396
8397 [temp.alias]/2 says:
8398
8399 When a template-id refers to the specialization of an
8400 alias template, it is equivalent to the associated
8401 type obtained by substitution of its
8402 template-arguments for the template-parameters in the
8403 type-id of the alias template. */
8404
8405 t = tsubst (TREE_TYPE (gen_tmpl), arglist, complain, in_decl);
8406 /* Note that the call above (by indirectly calling
8407 register_specialization in tsubst_decl) registers the
8408 TYPE_DECL representing the specialization of the alias
8409 template. So next time someone substitutes ARGLIST for
8410 the template parms into the alias template (GEN_TMPL),
8411 she'll get that TYPE_DECL back. */
8412
8413 if (t == error_mark_node)
8414 return t;
8415 }
8416 else if (TREE_CODE (template_type) == ENUMERAL_TYPE)
8417 {
8418 if (!is_dependent_type)
8419 {
8420 set_current_access_from_decl (TYPE_NAME (template_type));
8421 t = start_enum (TYPE_IDENTIFIER (template_type), NULL_TREE,
8422 tsubst (ENUM_UNDERLYING_TYPE (template_type),
8423 arglist, complain, in_decl),
8424 tsubst_attributes (TYPE_ATTRIBUTES (template_type),
8425 arglist, complain, in_decl),
8426 SCOPED_ENUM_P (template_type), NULL);
8427
8428 if (t == error_mark_node)
8429 return t;
8430 }
8431 else
8432 {
8433 /* We don't want to call start_enum for this type, since
8434 the values for the enumeration constants may involve
8435 template parameters. And, no one should be interested
8436 in the enumeration constants for such a type. */
8437 t = cxx_make_type (ENUMERAL_TYPE);
8438 SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
8439 }
8440 SET_OPAQUE_ENUM_P (t, OPAQUE_ENUM_P (template_type));
8441 ENUM_FIXED_UNDERLYING_TYPE_P (t)
8442 = ENUM_FIXED_UNDERLYING_TYPE_P (template_type);
8443 }
8444 else if (CLASS_TYPE_P (template_type))
8445 {
8446 t = make_class_type (TREE_CODE (template_type));
8447 CLASSTYPE_DECLARED_CLASS (t)
8448 = CLASSTYPE_DECLARED_CLASS (template_type);
8449 SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
8450 TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
8451
8452 /* A local class. Make sure the decl gets registered properly. */
8453 if (context == current_function_decl)
8454 pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current);
8455
8456 if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
8457 /* This instantiation is another name for the primary
8458 template type. Set the TYPE_CANONICAL field
8459 appropriately. */
8460 TYPE_CANONICAL (t) = template_type;
8461 else if (any_template_arguments_need_structural_equality_p (arglist))
8462 /* Some of the template arguments require structural
8463 equality testing, so this template class requires
8464 structural equality testing. */
8465 SET_TYPE_STRUCTURAL_EQUALITY (t);
8466 }
8467 else
8468 gcc_unreachable ();
8469
8470 /* If we called start_enum or pushtag above, this information
8471 will already be set up. */
8472 if (!TYPE_NAME (t))
8473 {
8474 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
8475
8476 type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
8477 DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
8478 DECL_SOURCE_LOCATION (type_decl)
8479 = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
8480 }
8481 else
8482 type_decl = TYPE_NAME (t);
8483
8484 if (CLASS_TYPE_P (template_type))
8485 {
8486 TREE_PRIVATE (type_decl)
8487 = TREE_PRIVATE (TYPE_MAIN_DECL (template_type));
8488 TREE_PROTECTED (type_decl)
8489 = TREE_PROTECTED (TYPE_MAIN_DECL (template_type));
8490 if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
8491 {
8492 DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
8493 DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
8494 }
8495 }
8496
8497 if (OVERLOAD_TYPE_P (t)
8498 && !DECL_ALIAS_TEMPLATE_P (gen_tmpl))
8499 {
8500 static const char *tags[] = {"abi_tag", "may_alias"};
8501
8502 for (unsigned ix = 0; ix != 2; ix++)
8503 {
8504 tree attributes
8505 = lookup_attribute (tags[ix], TYPE_ATTRIBUTES (template_type));
8506
8507 if (attributes)
8508 TYPE_ATTRIBUTES (t)
8509 = tree_cons (TREE_PURPOSE (attributes),
8510 TREE_VALUE (attributes),
8511 TYPE_ATTRIBUTES (t));
8512 }
8513 }
8514
8515 /* Let's consider the explicit specialization of a member
8516 of a class template specialization that is implicitly instantiated,
8517 e.g.:
8518 template<class T>
8519 struct S
8520 {
8521 template<class U> struct M {}; //#0
8522 };
8523
8524 template<>
8525 template<>
8526 struct S<int>::M<char> //#1
8527 {
8528 int i;
8529 };
8530 [temp.expl.spec]/4 says this is valid.
8531
8532 In this case, when we write:
8533 S<int>::M<char> m;
8534
8535 M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
8536 the one of #0.
8537
8538 When we encounter #1, we want to store the partial instantiation
8539 of M (template<class T> S<int>::M<T>) in its CLASSTYPE_TI_TEMPLATE.
8540
8541 For all cases other than this "explicit specialization of member of a
8542 class template", we just want to store the most general template into
8543 the CLASSTYPE_TI_TEMPLATE of M.
8544
8545 This case of "explicit specialization of member of a class template"
8546 only happens when:
8547 1/ the enclosing class is an instantiation of, and therefore not
8548 the same as, the context of the most general template, and
8549 2/ we aren't looking at the partial instantiation itself, i.e.
8550 the innermost arguments are not the same as the innermost parms of
8551 the most general template.
8552
8553 So it's only when 1/ and 2/ happens that we want to use the partial
8554 instantiation of the member template in lieu of its most general
8555 template. */
8556
8557 if (PRIMARY_TEMPLATE_P (gen_tmpl)
8558 && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
8559 /* the enclosing class must be an instantiation... */
8560 && CLASS_TYPE_P (context)
8561 && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
8562 {
8563 tree partial_inst_args;
8564 TREE_VEC_LENGTH (arglist)--;
8565 ++processing_template_decl;
8566 partial_inst_args =
8567 tsubst (INNERMOST_TEMPLATE_ARGS
8568 (TYPE_TI_ARGS (TREE_TYPE (gen_tmpl))),
8569 arglist, complain, NULL_TREE);
8570 --processing_template_decl;
8571 TREE_VEC_LENGTH (arglist)++;
8572 if (partial_inst_args == error_mark_node)
8573 return error_mark_node;
8574 use_partial_inst_tmpl =
8575 /*...and we must not be looking at the partial instantiation
8576 itself. */
8577 !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
8578 partial_inst_args);
8579 }
8580
8581 if (!use_partial_inst_tmpl)
8582 /* This case is easy; there are no member templates involved. */
8583 found = gen_tmpl;
8584 else
8585 {
8586 /* This is a full instantiation of a member template. Find
8587 the partial instantiation of which this is an instance. */
8588
8589 /* Temporarily reduce by one the number of levels in the ARGLIST
8590 so as to avoid comparing the last set of arguments. */
8591 TREE_VEC_LENGTH (arglist)--;
8592 found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
8593 TREE_VEC_LENGTH (arglist)++;
8594 /* FOUND is either a proper class type, or an alias
8595 template specialization. In the later case, it's a
8596 TYPE_DECL, resulting from the substituting of arguments
8597 for parameters in the TYPE_DECL of the alias template
8598 done earlier. So be careful while getting the template
8599 of FOUND. */
8600 found = TREE_CODE (found) == TYPE_DECL
8601 ? TYPE_TI_TEMPLATE (TREE_TYPE (found))
8602 : CLASSTYPE_TI_TEMPLATE (found);
8603 }
8604
8605 // Build template info for the new specialization.
8606 SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
8607
8608 elt.spec = t;
8609 slot = type_specializations->find_slot_with_hash (&elt, hash, INSERT);
8610 entry = ggc_alloc<spec_entry> ();
8611 *entry = elt;
8612 *slot = entry;
8613
8614 /* Note this use of the partial instantiation so we can check it
8615 later in maybe_process_partial_specialization. */
8616 DECL_TEMPLATE_INSTANTIATIONS (found)
8617 = tree_cons (arglist, t,
8618 DECL_TEMPLATE_INSTANTIATIONS (found));
8619
8620 if (TREE_CODE (template_type) == ENUMERAL_TYPE && !is_dependent_type
8621 && !DECL_ALIAS_TEMPLATE_P (gen_tmpl))
8622 /* Now that the type has been registered on the instantiations
8623 list, we set up the enumerators. Because the enumeration
8624 constants may involve the enumeration type itself, we make
8625 sure to register the type first, and then create the
8626 constants. That way, doing tsubst_expr for the enumeration
8627 constants won't result in recursive calls here; we'll find
8628 the instantiation and exit above. */
8629 tsubst_enum (template_type, t, arglist);
8630
8631 if (CLASS_TYPE_P (template_type) && is_dependent_type)
8632 /* If the type makes use of template parameters, the
8633 code that generates debugging information will crash. */
8634 DECL_IGNORED_P (TYPE_MAIN_DECL (t)) = 1;
8635
8636 /* Possibly limit visibility based on template args. */
8637 TREE_PUBLIC (type_decl) = 1;
8638 determine_visibility (type_decl);
8639
8640 inherit_targ_abi_tags (t);
8641
8642 return t;
8643 }
8644 }
8645
8646 /* Wrapper for lookup_template_class_1. */
8647
8648 tree
8649 lookup_template_class (tree d1, tree arglist, tree in_decl, tree context,
8650 int entering_scope, tsubst_flags_t complain)
8651 {
8652 tree ret;
8653 timevar_push (TV_TEMPLATE_INST);
8654 ret = lookup_template_class_1 (d1, arglist, in_decl, context,
8655 entering_scope, complain);
8656 timevar_pop (TV_TEMPLATE_INST);
8657 return ret;
8658 }
8659
8660 /* Return a TEMPLATE_ID_EXPR for the given variable template and ARGLIST. */
8661
8662 tree
8663 lookup_template_variable (tree templ, tree arglist)
8664 {
8665 /* The type of the expression is NULL_TREE since the template-id could refer
8666 to an explicit or partial specialization. */
8667 tree type = NULL_TREE;
8668 if (flag_concepts && variable_concept_p (templ))
8669 /* Except that concepts are always bool. */
8670 type = boolean_type_node;
8671 return build2 (TEMPLATE_ID_EXPR, type, templ, arglist);
8672 }
8673
8674 /* Instantiate a variable declaration from a TEMPLATE_ID_EXPR for use. */
8675
8676 tree
8677 finish_template_variable (tree var, tsubst_flags_t complain)
8678 {
8679 tree templ = TREE_OPERAND (var, 0);
8680 tree arglist = TREE_OPERAND (var, 1);
8681
8682 /* We never want to return a VAR_DECL for a variable concept, since they
8683 aren't instantiated. In a template, leave the TEMPLATE_ID_EXPR alone. */
8684 bool concept_p = flag_concepts && variable_concept_p (templ);
8685 if (concept_p && processing_template_decl)
8686 return var;
8687
8688 tree tmpl_args = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (templ));
8689 arglist = add_outermost_template_args (tmpl_args, arglist);
8690
8691 tree parms = DECL_TEMPLATE_PARMS (templ);
8692 arglist = coerce_innermost_template_parms (parms, arglist, templ, complain,
8693 /*req_all*/true,
8694 /*use_default*/true);
8695
8696 if (flag_concepts && !constraints_satisfied_p (templ, arglist))
8697 {
8698 if (complain & tf_error)
8699 {
8700 error ("constraints for %qD not satisfied", templ);
8701 diagnose_constraints (location_of (var), templ, arglist);
8702 }
8703 return error_mark_node;
8704 }
8705
8706 /* If a template-id refers to a specialization of a variable
8707 concept, then the expression is true if and only if the
8708 concept's constraints are satisfied by the given template
8709 arguments.
8710
8711 NOTE: This is an extension of Concepts Lite TS that
8712 allows constraints to be used in expressions. */
8713 if (concept_p)
8714 {
8715 tree decl = DECL_TEMPLATE_RESULT (templ);
8716 return evaluate_variable_concept (decl, arglist);
8717 }
8718
8719 return instantiate_template (templ, arglist, complain);
8720 }
8721
8722 /* Construct a TEMPLATE_ID_EXPR for the given variable template TEMPL having
8723 TARGS template args, and instantiate it if it's not dependent. */
8724
8725 static tree
8726 lookup_and_finish_template_variable (tree templ, tree targs,
8727 tsubst_flags_t complain)
8728 {
8729 templ = lookup_template_variable (templ, targs);
8730 if (!any_dependent_template_arguments_p (targs))
8731 {
8732 templ = finish_template_variable (templ, complain);
8733 mark_used (templ);
8734 }
8735
8736 return convert_from_reference (templ);
8737 }
8738
8739 \f
8740 struct pair_fn_data
8741 {
8742 tree_fn_t fn;
8743 void *data;
8744 /* True when we should also visit template parameters that occur in
8745 non-deduced contexts. */
8746 bool include_nondeduced_p;
8747 hash_set<tree> *visited;
8748 };
8749
8750 /* Called from for_each_template_parm via walk_tree. */
8751
8752 static tree
8753 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
8754 {
8755 tree t = *tp;
8756 struct pair_fn_data *pfd = (struct pair_fn_data *) d;
8757 tree_fn_t fn = pfd->fn;
8758 void *data = pfd->data;
8759 tree result = NULL_TREE;
8760
8761 #define WALK_SUBTREE(NODE) \
8762 do \
8763 { \
8764 result = for_each_template_parm (NODE, fn, data, pfd->visited, \
8765 pfd->include_nondeduced_p); \
8766 if (result) goto out; \
8767 } \
8768 while (0)
8769
8770 if (TYPE_P (t)
8771 && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE))
8772 WALK_SUBTREE (TYPE_CONTEXT (t));
8773
8774 switch (TREE_CODE (t))
8775 {
8776 case RECORD_TYPE:
8777 if (TYPE_PTRMEMFUNC_P (t))
8778 break;
8779 /* Fall through. */
8780
8781 case UNION_TYPE:
8782 case ENUMERAL_TYPE:
8783 if (!TYPE_TEMPLATE_INFO (t))
8784 *walk_subtrees = 0;
8785 else
8786 WALK_SUBTREE (TYPE_TI_ARGS (t));
8787 break;
8788
8789 case INTEGER_TYPE:
8790 WALK_SUBTREE (TYPE_MIN_VALUE (t));
8791 WALK_SUBTREE (TYPE_MAX_VALUE (t));
8792 break;
8793
8794 case METHOD_TYPE:
8795 /* Since we're not going to walk subtrees, we have to do this
8796 explicitly here. */
8797 WALK_SUBTREE (TYPE_METHOD_BASETYPE (t));
8798 /* Fall through. */
8799
8800 case FUNCTION_TYPE:
8801 /* Check the return type. */
8802 WALK_SUBTREE (TREE_TYPE (t));
8803
8804 /* Check the parameter types. Since default arguments are not
8805 instantiated until they are needed, the TYPE_ARG_TYPES may
8806 contain expressions that involve template parameters. But,
8807 no-one should be looking at them yet. And, once they're
8808 instantiated, they don't contain template parameters, so
8809 there's no point in looking at them then, either. */
8810 {
8811 tree parm;
8812
8813 for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
8814 WALK_SUBTREE (TREE_VALUE (parm));
8815
8816 /* Since we've already handled the TYPE_ARG_TYPES, we don't
8817 want walk_tree walking into them itself. */
8818 *walk_subtrees = 0;
8819 }
8820 break;
8821
8822 case TYPEOF_TYPE:
8823 case UNDERLYING_TYPE:
8824 if (pfd->include_nondeduced_p
8825 && for_each_template_parm (TYPE_VALUES_RAW (t), fn, data,
8826 pfd->visited,
8827 pfd->include_nondeduced_p))
8828 return error_mark_node;
8829 break;
8830
8831 case FUNCTION_DECL:
8832 case VAR_DECL:
8833 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
8834 WALK_SUBTREE (DECL_TI_ARGS (t));
8835 /* Fall through. */
8836
8837 case PARM_DECL:
8838 case CONST_DECL:
8839 if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t))
8840 WALK_SUBTREE (DECL_INITIAL (t));
8841 if (DECL_CONTEXT (t)
8842 && pfd->include_nondeduced_p)
8843 WALK_SUBTREE (DECL_CONTEXT (t));
8844 break;
8845
8846 case BOUND_TEMPLATE_TEMPLATE_PARM:
8847 /* Record template parameters such as `T' inside `TT<T>'. */
8848 WALK_SUBTREE (TYPE_TI_ARGS (t));
8849 /* Fall through. */
8850
8851 case TEMPLATE_TEMPLATE_PARM:
8852 case TEMPLATE_TYPE_PARM:
8853 case TEMPLATE_PARM_INDEX:
8854 if (fn && (*fn)(t, data))
8855 return t;
8856 else if (!fn)
8857 return t;
8858 break;
8859
8860 case TEMPLATE_DECL:
8861 /* A template template parameter is encountered. */
8862 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
8863 WALK_SUBTREE (TREE_TYPE (t));
8864
8865 /* Already substituted template template parameter */
8866 *walk_subtrees = 0;
8867 break;
8868
8869 case TYPENAME_TYPE:
8870 /* A template-id in a TYPENAME_TYPE might be a deduced context after
8871 partial instantiation. */
8872 WALK_SUBTREE (TYPENAME_TYPE_FULLNAME (t));
8873 break;
8874
8875 case CONSTRUCTOR:
8876 if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
8877 && pfd->include_nondeduced_p)
8878 WALK_SUBTREE (TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (t)));
8879 break;
8880
8881 case INDIRECT_REF:
8882 case COMPONENT_REF:
8883 /* If there's no type, then this thing must be some expression
8884 involving template parameters. */
8885 if (!fn && !TREE_TYPE (t))
8886 return error_mark_node;
8887 break;
8888
8889 case MODOP_EXPR:
8890 case CAST_EXPR:
8891 case IMPLICIT_CONV_EXPR:
8892 case REINTERPRET_CAST_EXPR:
8893 case CONST_CAST_EXPR:
8894 case STATIC_CAST_EXPR:
8895 case DYNAMIC_CAST_EXPR:
8896 case ARROW_EXPR:
8897 case DOTSTAR_EXPR:
8898 case TYPEID_EXPR:
8899 case PSEUDO_DTOR_EXPR:
8900 if (!fn)
8901 return error_mark_node;
8902 break;
8903
8904 default:
8905 break;
8906 }
8907
8908 #undef WALK_SUBTREE
8909
8910 /* We didn't find any template parameters we liked. */
8911 out:
8912 return result;
8913 }
8914
8915 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
8916 BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
8917 call FN with the parameter and the DATA.
8918 If FN returns nonzero, the iteration is terminated, and
8919 for_each_template_parm returns 1. Otherwise, the iteration
8920 continues. If FN never returns a nonzero value, the value
8921 returned by for_each_template_parm is 0. If FN is NULL, it is
8922 considered to be the function which always returns 1.
8923
8924 If INCLUDE_NONDEDUCED_P, then this routine will also visit template
8925 parameters that occur in non-deduced contexts. When false, only
8926 visits those template parameters that can be deduced. */
8927
8928 static tree
8929 for_each_template_parm (tree t, tree_fn_t fn, void* data,
8930 hash_set<tree> *visited,
8931 bool include_nondeduced_p)
8932 {
8933 struct pair_fn_data pfd;
8934 tree result;
8935
8936 /* Set up. */
8937 pfd.fn = fn;
8938 pfd.data = data;
8939 pfd.include_nondeduced_p = include_nondeduced_p;
8940
8941 /* Walk the tree. (Conceptually, we would like to walk without
8942 duplicates, but for_each_template_parm_r recursively calls
8943 for_each_template_parm, so we would need to reorganize a fair
8944 bit to use walk_tree_without_duplicates, so we keep our own
8945 visited list.) */
8946 if (visited)
8947 pfd.visited = visited;
8948 else
8949 pfd.visited = new hash_set<tree>;
8950 result = cp_walk_tree (&t,
8951 for_each_template_parm_r,
8952 &pfd,
8953 pfd.visited);
8954
8955 /* Clean up. */
8956 if (!visited)
8957 {
8958 delete pfd.visited;
8959 pfd.visited = 0;
8960 }
8961
8962 return result;
8963 }
8964
8965 /* Returns true if T depends on any template parameter. */
8966
8967 int
8968 uses_template_parms (tree t)
8969 {
8970 if (t == NULL_TREE)
8971 return false;
8972
8973 bool dependent_p;
8974 int saved_processing_template_decl;
8975
8976 saved_processing_template_decl = processing_template_decl;
8977 if (!saved_processing_template_decl)
8978 processing_template_decl = 1;
8979 if (TYPE_P (t))
8980 dependent_p = dependent_type_p (t);
8981 else if (TREE_CODE (t) == TREE_VEC)
8982 dependent_p = any_dependent_template_arguments_p (t);
8983 else if (TREE_CODE (t) == TREE_LIST)
8984 dependent_p = (uses_template_parms (TREE_VALUE (t))
8985 || uses_template_parms (TREE_CHAIN (t)));
8986 else if (TREE_CODE (t) == TYPE_DECL)
8987 dependent_p = dependent_type_p (TREE_TYPE (t));
8988 else if (DECL_P (t)
8989 || EXPR_P (t)
8990 || TREE_CODE (t) == TEMPLATE_PARM_INDEX
8991 || TREE_CODE (t) == OVERLOAD
8992 || BASELINK_P (t)
8993 || identifier_p (t)
8994 || TREE_CODE (t) == TRAIT_EXPR
8995 || TREE_CODE (t) == CONSTRUCTOR
8996 || CONSTANT_CLASS_P (t))
8997 dependent_p = (type_dependent_expression_p (t)
8998 || value_dependent_expression_p (t));
8999 else
9000 {
9001 gcc_assert (t == error_mark_node);
9002 dependent_p = false;
9003 }
9004
9005 processing_template_decl = saved_processing_template_decl;
9006
9007 return dependent_p;
9008 }
9009
9010 /* Returns true iff current_function_decl is an incompletely instantiated
9011 template. Useful instead of processing_template_decl because the latter
9012 is set to 0 during instantiate_non_dependent_expr. */
9013
9014 bool
9015 in_template_function (void)
9016 {
9017 tree fn = current_function_decl;
9018 bool ret;
9019 ++processing_template_decl;
9020 ret = (fn && DECL_LANG_SPECIFIC (fn)
9021 && DECL_TEMPLATE_INFO (fn)
9022 && any_dependent_template_arguments_p (DECL_TI_ARGS (fn)));
9023 --processing_template_decl;
9024 return ret;
9025 }
9026
9027 /* Returns true if T depends on any template parameter with level LEVEL. */
9028
9029 bool
9030 uses_template_parms_level (tree t, int level)
9031 {
9032 return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
9033 /*include_nondeduced_p=*/true);
9034 }
9035
9036 /* Returns TRUE iff INST is an instantiation we don't need to do in an
9037 ill-formed translation unit, i.e. a variable or function that isn't
9038 usable in a constant expression. */
9039
9040 static inline bool
9041 neglectable_inst_p (tree d)
9042 {
9043 return (DECL_P (d)
9044 && !(TREE_CODE (d) == FUNCTION_DECL ? DECL_DECLARED_CONSTEXPR_P (d)
9045 : decl_maybe_constant_var_p (d)));
9046 }
9047
9048 /* Returns TRUE iff we should refuse to instantiate DECL because it's
9049 neglectable and instantiated from within an erroneous instantiation. */
9050
9051 static bool
9052 limit_bad_template_recursion (tree decl)
9053 {
9054 struct tinst_level *lev = current_tinst_level;
9055 int errs = errorcount + sorrycount;
9056 if (lev == NULL || errs == 0 || !neglectable_inst_p (decl))
9057 return false;
9058
9059 for (; lev; lev = lev->next)
9060 if (neglectable_inst_p (lev->decl))
9061 break;
9062
9063 return (lev && errs > lev->errors);
9064 }
9065
9066 static int tinst_depth;
9067 extern int max_tinst_depth;
9068 int depth_reached;
9069
9070 static GTY(()) struct tinst_level *last_error_tinst_level;
9071
9072 /* We're starting to instantiate D; record the template instantiation context
9073 for diagnostics and to restore it later. */
9074
9075 bool
9076 push_tinst_level (tree d)
9077 {
9078 return push_tinst_level_loc (d, input_location);
9079 }
9080
9081 /* We're starting to instantiate D; record the template instantiation context
9082 at LOC for diagnostics and to restore it later. */
9083
9084 bool
9085 push_tinst_level_loc (tree d, location_t loc)
9086 {
9087 struct tinst_level *new_level;
9088
9089 if (tinst_depth >= max_tinst_depth)
9090 {
9091 fatal_error (input_location,
9092 "template instantiation depth exceeds maximum of %d"
9093 " (use -ftemplate-depth= to increase the maximum)",
9094 max_tinst_depth);
9095 return false;
9096 }
9097
9098 /* If the current instantiation caused problems, don't let it instantiate
9099 anything else. Do allow deduction substitution and decls usable in
9100 constant expressions. */
9101 if (limit_bad_template_recursion (d))
9102 return false;
9103
9104 new_level = ggc_alloc<tinst_level> ();
9105 new_level->decl = d;
9106 new_level->locus = loc;
9107 new_level->errors = errorcount+sorrycount;
9108 new_level->in_system_header_p = in_system_header_at (input_location);
9109 new_level->next = current_tinst_level;
9110 current_tinst_level = new_level;
9111
9112 ++tinst_depth;
9113 if (GATHER_STATISTICS && (tinst_depth > depth_reached))
9114 depth_reached = tinst_depth;
9115
9116 return true;
9117 }
9118
9119 /* We're done instantiating this template; return to the instantiation
9120 context. */
9121
9122 void
9123 pop_tinst_level (void)
9124 {
9125 /* Restore the filename and line number stashed away when we started
9126 this instantiation. */
9127 input_location = current_tinst_level->locus;
9128 current_tinst_level = current_tinst_level->next;
9129 --tinst_depth;
9130 }
9131
9132 /* We're instantiating a deferred template; restore the template
9133 instantiation context in which the instantiation was requested, which
9134 is one step out from LEVEL. Return the corresponding DECL or TYPE. */
9135
9136 static tree
9137 reopen_tinst_level (struct tinst_level *level)
9138 {
9139 struct tinst_level *t;
9140
9141 tinst_depth = 0;
9142 for (t = level; t; t = t->next)
9143 ++tinst_depth;
9144
9145 current_tinst_level = level;
9146 pop_tinst_level ();
9147 if (current_tinst_level)
9148 current_tinst_level->errors = errorcount+sorrycount;
9149 return level->decl;
9150 }
9151
9152 /* Returns the TINST_LEVEL which gives the original instantiation
9153 context. */
9154
9155 struct tinst_level *
9156 outermost_tinst_level (void)
9157 {
9158 struct tinst_level *level = current_tinst_level;
9159 if (level)
9160 while (level->next)
9161 level = level->next;
9162 return level;
9163 }
9164
9165 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
9166 vector of template arguments, as for tsubst.
9167
9168 Returns an appropriate tsubst'd friend declaration. */
9169
9170 static tree
9171 tsubst_friend_function (tree decl, tree args)
9172 {
9173 tree new_friend;
9174
9175 if (TREE_CODE (decl) == FUNCTION_DECL
9176 && DECL_TEMPLATE_INSTANTIATION (decl)
9177 && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
9178 /* This was a friend declared with an explicit template
9179 argument list, e.g.:
9180
9181 friend void f<>(T);
9182
9183 to indicate that f was a template instantiation, not a new
9184 function declaration. Now, we have to figure out what
9185 instantiation of what template. */
9186 {
9187 tree template_id, arglist, fns;
9188 tree new_args;
9189 tree tmpl;
9190 tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
9191
9192 /* Friend functions are looked up in the containing namespace scope.
9193 We must enter that scope, to avoid finding member functions of the
9194 current class with same name. */
9195 push_nested_namespace (ns);
9196 fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
9197 tf_warning_or_error, NULL_TREE,
9198 /*integral_constant_expression_p=*/false);
9199 pop_nested_namespace (ns);
9200 arglist = tsubst (DECL_TI_ARGS (decl), args,
9201 tf_warning_or_error, NULL_TREE);
9202 template_id = lookup_template_function (fns, arglist);
9203
9204 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
9205 tmpl = determine_specialization (template_id, new_friend,
9206 &new_args,
9207 /*need_member_template=*/0,
9208 TREE_VEC_LENGTH (args),
9209 tsk_none);
9210 return instantiate_template (tmpl, new_args, tf_error);
9211 }
9212
9213 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
9214
9215 /* The NEW_FRIEND will look like an instantiation, to the
9216 compiler, but is not an instantiation from the point of view of
9217 the language. For example, we might have had:
9218
9219 template <class T> struct S {
9220 template <class U> friend void f(T, U);
9221 };
9222
9223 Then, in S<int>, template <class U> void f(int, U) is not an
9224 instantiation of anything. */
9225 if (new_friend == error_mark_node)
9226 return error_mark_node;
9227
9228 DECL_USE_TEMPLATE (new_friend) = 0;
9229 if (TREE_CODE (decl) == TEMPLATE_DECL)
9230 {
9231 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
9232 DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
9233 = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
9234 }
9235
9236 /* The mangled name for the NEW_FRIEND is incorrect. The function
9237 is not a template instantiation and should not be mangled like
9238 one. Therefore, we forget the mangling here; we'll recompute it
9239 later if we need it. */
9240 if (TREE_CODE (new_friend) != TEMPLATE_DECL)
9241 {
9242 SET_DECL_RTL (new_friend, NULL);
9243 SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
9244 }
9245
9246 if (DECL_NAMESPACE_SCOPE_P (new_friend))
9247 {
9248 tree old_decl;
9249 tree new_friend_template_info;
9250 tree new_friend_result_template_info;
9251 tree ns;
9252 int new_friend_is_defn;
9253
9254 /* We must save some information from NEW_FRIEND before calling
9255 duplicate decls since that function will free NEW_FRIEND if
9256 possible. */
9257 new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
9258 new_friend_is_defn =
9259 (DECL_INITIAL (DECL_TEMPLATE_RESULT
9260 (template_for_substitution (new_friend)))
9261 != NULL_TREE);
9262 if (TREE_CODE (new_friend) == TEMPLATE_DECL)
9263 {
9264 /* This declaration is a `primary' template. */
9265 DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
9266
9267 new_friend_result_template_info
9268 = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
9269 }
9270 else
9271 new_friend_result_template_info = NULL_TREE;
9272
9273 /* Make the init_value nonzero so pushdecl knows this is a defn. */
9274 if (new_friend_is_defn)
9275 DECL_INITIAL (new_friend) = error_mark_node;
9276
9277 /* Inside pushdecl_namespace_level, we will push into the
9278 current namespace. However, the friend function should go
9279 into the namespace of the template. */
9280 ns = decl_namespace_context (new_friend);
9281 push_nested_namespace (ns);
9282 old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
9283 pop_nested_namespace (ns);
9284
9285 if (old_decl == error_mark_node)
9286 return error_mark_node;
9287
9288 if (old_decl != new_friend)
9289 {
9290 /* This new friend declaration matched an existing
9291 declaration. For example, given:
9292
9293 template <class T> void f(T);
9294 template <class U> class C {
9295 template <class T> friend void f(T) {}
9296 };
9297
9298 the friend declaration actually provides the definition
9299 of `f', once C has been instantiated for some type. So,
9300 old_decl will be the out-of-class template declaration,
9301 while new_friend is the in-class definition.
9302
9303 But, if `f' was called before this point, the
9304 instantiation of `f' will have DECL_TI_ARGS corresponding
9305 to `T' but not to `U', references to which might appear
9306 in the definition of `f'. Previously, the most general
9307 template for an instantiation of `f' was the out-of-class
9308 version; now it is the in-class version. Therefore, we
9309 run through all specialization of `f', adding to their
9310 DECL_TI_ARGS appropriately. In particular, they need a
9311 new set of outer arguments, corresponding to the
9312 arguments for this class instantiation.
9313
9314 The same situation can arise with something like this:
9315
9316 friend void f(int);
9317 template <class T> class C {
9318 friend void f(T) {}
9319 };
9320
9321 when `C<int>' is instantiated. Now, `f(int)' is defined
9322 in the class. */
9323
9324 if (!new_friend_is_defn)
9325 /* On the other hand, if the in-class declaration does
9326 *not* provide a definition, then we don't want to alter
9327 existing definitions. We can just leave everything
9328 alone. */
9329 ;
9330 else
9331 {
9332 tree new_template = TI_TEMPLATE (new_friend_template_info);
9333 tree new_args = TI_ARGS (new_friend_template_info);
9334
9335 /* Overwrite whatever template info was there before, if
9336 any, with the new template information pertaining to
9337 the declaration. */
9338 DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
9339
9340 if (TREE_CODE (old_decl) != TEMPLATE_DECL)
9341 {
9342 /* We should have called reregister_specialization in
9343 duplicate_decls. */
9344 gcc_assert (retrieve_specialization (new_template,
9345 new_args, 0)
9346 == old_decl);
9347
9348 /* Instantiate it if the global has already been used. */
9349 if (DECL_ODR_USED (old_decl))
9350 instantiate_decl (old_decl, /*defer_ok=*/true,
9351 /*expl_inst_class_mem_p=*/false);
9352 }
9353 else
9354 {
9355 tree t;
9356
9357 /* Indicate that the old function template is a partial
9358 instantiation. */
9359 DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
9360 = new_friend_result_template_info;
9361
9362 gcc_assert (new_template
9363 == most_general_template (new_template));
9364 gcc_assert (new_template != old_decl);
9365
9366 /* Reassign any specializations already in the hash table
9367 to the new more general template, and add the
9368 additional template args. */
9369 for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
9370 t != NULL_TREE;
9371 t = TREE_CHAIN (t))
9372 {
9373 tree spec = TREE_VALUE (t);
9374 spec_entry elt;
9375
9376 elt.tmpl = old_decl;
9377 elt.args = DECL_TI_ARGS (spec);
9378 elt.spec = NULL_TREE;
9379
9380 decl_specializations->remove_elt (&elt);
9381
9382 DECL_TI_ARGS (spec)
9383 = add_outermost_template_args (new_args,
9384 DECL_TI_ARGS (spec));
9385
9386 register_specialization
9387 (spec, new_template, DECL_TI_ARGS (spec), true, 0);
9388
9389 }
9390 DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
9391 }
9392 }
9393
9394 /* The information from NEW_FRIEND has been merged into OLD_DECL
9395 by duplicate_decls. */
9396 new_friend = old_decl;
9397 }
9398 }
9399 else
9400 {
9401 tree context = DECL_CONTEXT (new_friend);
9402 bool dependent_p;
9403
9404 /* In the code
9405 template <class T> class C {
9406 template <class U> friend void C1<U>::f (); // case 1
9407 friend void C2<T>::f (); // case 2
9408 };
9409 we only need to make sure CONTEXT is a complete type for
9410 case 2. To distinguish between the two cases, we note that
9411 CONTEXT of case 1 remains dependent type after tsubst while
9412 this isn't true for case 2. */
9413 ++processing_template_decl;
9414 dependent_p = dependent_type_p (context);
9415 --processing_template_decl;
9416
9417 if (!dependent_p
9418 && !complete_type_or_else (context, NULL_TREE))
9419 return error_mark_node;
9420
9421 if (COMPLETE_TYPE_P (context))
9422 {
9423 tree fn = new_friend;
9424 /* do_friend adds the TEMPLATE_DECL for any member friend
9425 template even if it isn't a member template, i.e.
9426 template <class T> friend A<T>::f();
9427 Look through it in that case. */
9428 if (TREE_CODE (fn) == TEMPLATE_DECL
9429 && !PRIMARY_TEMPLATE_P (fn))
9430 fn = DECL_TEMPLATE_RESULT (fn);
9431 /* Check to see that the declaration is really present, and,
9432 possibly obtain an improved declaration. */
9433 fn = check_classfn (context, fn, NULL_TREE);
9434
9435 if (fn)
9436 new_friend = fn;
9437 }
9438 }
9439
9440 return new_friend;
9441 }
9442
9443 /* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
9444 template arguments, as for tsubst.
9445
9446 Returns an appropriate tsubst'd friend type or error_mark_node on
9447 failure. */
9448
9449 static tree
9450 tsubst_friend_class (tree friend_tmpl, tree args)
9451 {
9452 tree friend_type;
9453 tree tmpl;
9454 tree context;
9455
9456 if (DECL_TEMPLATE_TEMPLATE_PARM_P (friend_tmpl))
9457 {
9458 tree t = tsubst (TREE_TYPE (friend_tmpl), args, tf_none, NULL_TREE);
9459 return TREE_TYPE (t);
9460 }
9461
9462 context = CP_DECL_CONTEXT (friend_tmpl);
9463
9464 if (context != global_namespace)
9465 {
9466 if (TREE_CODE (context) == NAMESPACE_DECL)
9467 push_nested_namespace (context);
9468 else
9469 push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
9470 }
9471
9472 /* Look for a class template declaration. We look for hidden names
9473 because two friend declarations of the same template are the
9474 same. For example, in:
9475
9476 struct A {
9477 template <typename> friend class F;
9478 };
9479 template <typename> struct B {
9480 template <typename> friend class F;
9481 };
9482
9483 both F templates are the same. */
9484 tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
9485 /*block_p=*/true, 0, LOOKUP_HIDDEN);
9486
9487 /* But, if we don't find one, it might be because we're in a
9488 situation like this:
9489
9490 template <class T>
9491 struct S {
9492 template <class U>
9493 friend struct S;
9494 };
9495
9496 Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
9497 for `S<int>', not the TEMPLATE_DECL. */
9498 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
9499 {
9500 tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
9501 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
9502 }
9503
9504 if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
9505 {
9506 /* The friend template has already been declared. Just
9507 check to see that the declarations match, and install any new
9508 default parameters. We must tsubst the default parameters,
9509 of course. We only need the innermost template parameters
9510 because that is all that redeclare_class_template will look
9511 at. */
9512 if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
9513 > TMPL_ARGS_DEPTH (args))
9514 {
9515 tree parms;
9516 location_t saved_input_location;
9517 parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
9518 args, tf_warning_or_error);
9519
9520 saved_input_location = input_location;
9521 input_location = DECL_SOURCE_LOCATION (friend_tmpl);
9522 tree cons = get_constraints (tmpl);
9523 redeclare_class_template (TREE_TYPE (tmpl), parms, cons);
9524 input_location = saved_input_location;
9525
9526 }
9527
9528 friend_type = TREE_TYPE (tmpl);
9529 }
9530 else
9531 {
9532 /* The friend template has not already been declared. In this
9533 case, the instantiation of the template class will cause the
9534 injection of this template into the global scope. */
9535 tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
9536 if (tmpl == error_mark_node)
9537 return error_mark_node;
9538
9539 /* The new TMPL is not an instantiation of anything, so we
9540 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE for
9541 the new type because that is supposed to be the corresponding
9542 template decl, i.e., TMPL. */
9543 DECL_USE_TEMPLATE (tmpl) = 0;
9544 DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
9545 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
9546 CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
9547 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
9548
9549 /* Inject this template into the global scope. */
9550 friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
9551 }
9552
9553 if (context != global_namespace)
9554 {
9555 if (TREE_CODE (context) == NAMESPACE_DECL)
9556 pop_nested_namespace (context);
9557 else
9558 pop_nested_class ();
9559 }
9560
9561 return friend_type;
9562 }
9563
9564 /* Returns zero if TYPE cannot be completed later due to circularity.
9565 Otherwise returns one. */
9566
9567 static int
9568 can_complete_type_without_circularity (tree type)
9569 {
9570 if (type == NULL_TREE || type == error_mark_node)
9571 return 0;
9572 else if (COMPLETE_TYPE_P (type))
9573 return 1;
9574 else if (TREE_CODE (type) == ARRAY_TYPE)
9575 return can_complete_type_without_circularity (TREE_TYPE (type));
9576 else if (CLASS_TYPE_P (type)
9577 && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
9578 return 0;
9579 else
9580 return 1;
9581 }
9582
9583 static tree tsubst_omp_clauses (tree, enum c_omp_region_type, tree,
9584 tsubst_flags_t, tree);
9585
9586 /* Instantiate a single dependent attribute T (a TREE_LIST), and return either
9587 T or a new TREE_LIST, possibly a chain in the case of a pack expansion. */
9588
9589 static tree
9590 tsubst_attribute (tree t, tree *decl_p, tree args,
9591 tsubst_flags_t complain, tree in_decl)
9592 {
9593 gcc_assert (ATTR_IS_DEPENDENT (t));
9594
9595 tree val = TREE_VALUE (t);
9596 if (val == NULL_TREE)
9597 /* Nothing to do. */;
9598 else if ((flag_openmp || flag_openmp_simd || flag_cilkplus)
9599 && is_attribute_p ("omp declare simd",
9600 get_attribute_name (t)))
9601 {
9602 tree clauses = TREE_VALUE (val);
9603 clauses = tsubst_omp_clauses (clauses, C_ORT_OMP_DECLARE_SIMD, args,
9604 complain, in_decl);
9605 c_omp_declare_simd_clauses_to_decls (*decl_p, clauses);
9606 clauses = finish_omp_clauses (clauses, C_ORT_OMP_DECLARE_SIMD);
9607 tree parms = DECL_ARGUMENTS (*decl_p);
9608 clauses
9609 = c_omp_declare_simd_clauses_to_numbers (parms, clauses);
9610 if (clauses)
9611 val = build_tree_list (NULL_TREE, clauses);
9612 else
9613 val = NULL_TREE;
9614 }
9615 /* If the first attribute argument is an identifier, don't
9616 pass it through tsubst. Attributes like mode, format,
9617 cleanup and several target specific attributes expect it
9618 unmodified. */
9619 else if (attribute_takes_identifier_p (get_attribute_name (t)))
9620 {
9621 tree chain
9622 = tsubst_expr (TREE_CHAIN (val), args, complain, in_decl,
9623 /*integral_constant_expression_p=*/false);
9624 if (chain != TREE_CHAIN (val))
9625 val = tree_cons (NULL_TREE, TREE_VALUE (val), chain);
9626 }
9627 else if (PACK_EXPANSION_P (val))
9628 {
9629 /* An attribute pack expansion. */
9630 tree purp = TREE_PURPOSE (t);
9631 tree pack = tsubst_pack_expansion (val, args, complain, in_decl);
9632 int len = TREE_VEC_LENGTH (pack);
9633 tree list = NULL_TREE;
9634 tree *q = &list;
9635 for (int i = 0; i < len; ++i)
9636 {
9637 tree elt = TREE_VEC_ELT (pack, i);
9638 *q = build_tree_list (purp, elt);
9639 q = &TREE_CHAIN (*q);
9640 }
9641 return list;
9642 }
9643 else
9644 val = tsubst_expr (val, args, complain, in_decl,
9645 /*integral_constant_expression_p=*/false);
9646
9647 if (val != TREE_VALUE (t))
9648 return build_tree_list (TREE_PURPOSE (t), val);
9649 return t;
9650 }
9651
9652 /* Instantiate any dependent attributes in ATTRIBUTES, returning either it
9653 unchanged or a new TREE_LIST chain. */
9654
9655 static tree
9656 tsubst_attributes (tree attributes, tree args,
9657 tsubst_flags_t complain, tree in_decl)
9658 {
9659 tree last_dep = NULL_TREE;
9660
9661 for (tree t = attributes; t; t = TREE_CHAIN (t))
9662 if (ATTR_IS_DEPENDENT (t))
9663 {
9664 last_dep = t;
9665 attributes = copy_list (attributes);
9666 break;
9667 }
9668
9669 if (last_dep)
9670 for (tree *p = &attributes; *p; p = &TREE_CHAIN (*p))
9671 {
9672 tree t = *p;
9673 if (ATTR_IS_DEPENDENT (t))
9674 {
9675 tree subst = tsubst_attribute (t, NULL, args, complain, in_decl);
9676 if (subst == t)
9677 continue;
9678 *p = subst;
9679 do
9680 p = &TREE_CHAIN (*p);
9681 while (*p);
9682 *p = TREE_CHAIN (t);
9683 }
9684 }
9685
9686 return attributes;
9687 }
9688
9689 /* Apply any attributes which had to be deferred until instantiation
9690 time. DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
9691 ARGS, COMPLAIN, IN_DECL are as tsubst. */
9692
9693 static void
9694 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
9695 tree args, tsubst_flags_t complain, tree in_decl)
9696 {
9697 tree last_dep = NULL_TREE;
9698 tree t;
9699 tree *p;
9700
9701 for (t = attributes; t; t = TREE_CHAIN (t))
9702 if (ATTR_IS_DEPENDENT (t))
9703 {
9704 last_dep = t;
9705 attributes = copy_list (attributes);
9706 break;
9707 }
9708
9709 if (DECL_P (*decl_p))
9710 {
9711 if (TREE_TYPE (*decl_p) == error_mark_node)
9712 return;
9713 p = &DECL_ATTRIBUTES (*decl_p);
9714 }
9715 else
9716 p = &TYPE_ATTRIBUTES (*decl_p);
9717
9718 if (last_dep)
9719 {
9720 tree late_attrs = NULL_TREE;
9721 tree *q = &late_attrs;
9722
9723 for (*p = attributes; *p; )
9724 {
9725 t = *p;
9726 if (ATTR_IS_DEPENDENT (t))
9727 {
9728 *p = TREE_CHAIN (t);
9729 TREE_CHAIN (t) = NULL_TREE;
9730 *q = tsubst_attribute (t, decl_p, args, complain, in_decl);
9731 do
9732 q = &TREE_CHAIN (*q);
9733 while (*q);
9734 }
9735 else
9736 p = &TREE_CHAIN (t);
9737 }
9738
9739 cplus_decl_attributes (decl_p, late_attrs, attr_flags);
9740 }
9741 }
9742
9743 /* Perform (or defer) access check for typedefs that were referenced
9744 from within the template TMPL code.
9745 This is a subroutine of instantiate_decl and instantiate_class_template.
9746 TMPL is the template to consider and TARGS is the list of arguments of
9747 that template. */
9748
9749 static void
9750 perform_typedefs_access_check (tree tmpl, tree targs)
9751 {
9752 location_t saved_location;
9753 unsigned i;
9754 qualified_typedef_usage_t *iter;
9755
9756 if (!tmpl
9757 || (!CLASS_TYPE_P (tmpl)
9758 && TREE_CODE (tmpl) != FUNCTION_DECL))
9759 return;
9760
9761 saved_location = input_location;
9762 FOR_EACH_VEC_SAFE_ELT (get_types_needing_access_check (tmpl), i, iter)
9763 {
9764 tree type_decl = iter->typedef_decl;
9765 tree type_scope = iter->context;
9766
9767 if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
9768 continue;
9769
9770 if (uses_template_parms (type_decl))
9771 type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
9772 if (uses_template_parms (type_scope))
9773 type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
9774
9775 /* Make access check error messages point to the location
9776 of the use of the typedef. */
9777 input_location = iter->locus;
9778 perform_or_defer_access_check (TYPE_BINFO (type_scope),
9779 type_decl, type_decl,
9780 tf_warning_or_error);
9781 }
9782 input_location = saved_location;
9783 }
9784
9785 static tree
9786 instantiate_class_template_1 (tree type)
9787 {
9788 tree templ, args, pattern, t, member;
9789 tree typedecl;
9790 tree pbinfo;
9791 tree base_list;
9792 unsigned int saved_maximum_field_alignment;
9793 tree fn_context;
9794
9795 if (type == error_mark_node)
9796 return error_mark_node;
9797
9798 if (COMPLETE_OR_OPEN_TYPE_P (type)
9799 || uses_template_parms (type))
9800 return type;
9801
9802 /* Figure out which template is being instantiated. */
9803 templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
9804 gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
9805
9806 /* Determine what specialization of the original template to
9807 instantiate. */
9808 t = most_specialized_partial_spec (type, tf_warning_or_error);
9809 if (t == error_mark_node)
9810 {
9811 TYPE_BEING_DEFINED (type) = 1;
9812 return error_mark_node;
9813 }
9814 else if (t)
9815 {
9816 /* This TYPE is actually an instantiation of a partial
9817 specialization. We replace the innermost set of ARGS with
9818 the arguments appropriate for substitution. For example,
9819 given:
9820
9821 template <class T> struct S {};
9822 template <class T> struct S<T*> {};
9823
9824 and supposing that we are instantiating S<int*>, ARGS will
9825 presently be {int*} -- but we need {int}. */
9826 pattern = TREE_TYPE (t);
9827 args = TREE_PURPOSE (t);
9828 }
9829 else
9830 {
9831 pattern = TREE_TYPE (templ);
9832 args = CLASSTYPE_TI_ARGS (type);
9833 }
9834
9835 /* If the template we're instantiating is incomplete, then clearly
9836 there's nothing we can do. */
9837 if (!COMPLETE_TYPE_P (pattern))
9838 return type;
9839
9840 /* If we've recursively instantiated too many templates, stop. */
9841 if (! push_tinst_level (type))
9842 return type;
9843
9844 /* Now we're really doing the instantiation. Mark the type as in
9845 the process of being defined. */
9846 TYPE_BEING_DEFINED (type) = 1;
9847
9848 /* We may be in the middle of deferred access check. Disable
9849 it now. */
9850 push_deferring_access_checks (dk_no_deferred);
9851
9852 int saved_unevaluated_operand = cp_unevaluated_operand;
9853 int saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
9854
9855 fn_context = decl_function_context (TYPE_MAIN_DECL (type));
9856 /* Also avoid push_to_top_level for a lambda in an NSDMI. */
9857 if (!fn_context && LAMBDA_TYPE_P (type) && TYPE_CLASS_SCOPE_P (type))
9858 fn_context = error_mark_node;
9859 if (!fn_context)
9860 push_to_top_level ();
9861 else
9862 {
9863 cp_unevaluated_operand = 0;
9864 c_inhibit_evaluation_warnings = 0;
9865 }
9866 /* Use #pragma pack from the template context. */
9867 saved_maximum_field_alignment = maximum_field_alignment;
9868 maximum_field_alignment = TYPE_PRECISION (pattern);
9869
9870 SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
9871
9872 /* Set the input location to the most specialized template definition.
9873 This is needed if tsubsting causes an error. */
9874 typedecl = TYPE_MAIN_DECL (pattern);
9875 input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) =
9876 DECL_SOURCE_LOCATION (typedecl);
9877
9878 TYPE_PACKED (type) = TYPE_PACKED (pattern);
9879 SET_TYPE_ALIGN (type, TYPE_ALIGN (pattern));
9880 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
9881 TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
9882 if (ANON_AGGR_TYPE_P (pattern))
9883 SET_ANON_AGGR_TYPE_P (type);
9884 if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
9885 {
9886 CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
9887 CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
9888 /* Adjust visibility for template arguments. */
9889 determine_visibility (TYPE_MAIN_DECL (type));
9890 }
9891 if (CLASS_TYPE_P (type))
9892 CLASSTYPE_FINAL (type) = CLASSTYPE_FINAL (pattern);
9893
9894 pbinfo = TYPE_BINFO (pattern);
9895
9896 /* We should never instantiate a nested class before its enclosing
9897 class; we need to look up the nested class by name before we can
9898 instantiate it, and that lookup should instantiate the enclosing
9899 class. */
9900 gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
9901 || COMPLETE_OR_OPEN_TYPE_P (TYPE_CONTEXT (type)));
9902
9903 base_list = NULL_TREE;
9904 if (BINFO_N_BASE_BINFOS (pbinfo))
9905 {
9906 tree pbase_binfo;
9907 tree pushed_scope;
9908 int i;
9909
9910 /* We must enter the scope containing the type, as that is where
9911 the accessibility of types named in dependent bases are
9912 looked up from. */
9913 pushed_scope = push_scope (CP_TYPE_CONTEXT (type));
9914
9915 /* Substitute into each of the bases to determine the actual
9916 basetypes. */
9917 for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
9918 {
9919 tree base;
9920 tree access = BINFO_BASE_ACCESS (pbinfo, i);
9921 tree expanded_bases = NULL_TREE;
9922 int idx, len = 1;
9923
9924 if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
9925 {
9926 expanded_bases =
9927 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
9928 args, tf_error, NULL_TREE);
9929 if (expanded_bases == error_mark_node)
9930 continue;
9931
9932 len = TREE_VEC_LENGTH (expanded_bases);
9933 }
9934
9935 for (idx = 0; idx < len; idx++)
9936 {
9937 if (expanded_bases)
9938 /* Extract the already-expanded base class. */
9939 base = TREE_VEC_ELT (expanded_bases, idx);
9940 else
9941 /* Substitute to figure out the base class. */
9942 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error,
9943 NULL_TREE);
9944
9945 if (base == error_mark_node)
9946 continue;
9947
9948 base_list = tree_cons (access, base, base_list);
9949 if (BINFO_VIRTUAL_P (pbase_binfo))
9950 TREE_TYPE (base_list) = integer_type_node;
9951 }
9952 }
9953
9954 /* The list is now in reverse order; correct that. */
9955 base_list = nreverse (base_list);
9956
9957 if (pushed_scope)
9958 pop_scope (pushed_scope);
9959 }
9960 /* Now call xref_basetypes to set up all the base-class
9961 information. */
9962 xref_basetypes (type, base_list);
9963
9964 apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
9965 (int) ATTR_FLAG_TYPE_IN_PLACE,
9966 args, tf_error, NULL_TREE);
9967 fixup_attribute_variants (type);
9968
9969 /* Now that our base classes are set up, enter the scope of the
9970 class, so that name lookups into base classes, etc. will work
9971 correctly. This is precisely analogous to what we do in
9972 begin_class_definition when defining an ordinary non-template
9973 class, except we also need to push the enclosing classes. */
9974 push_nested_class (type);
9975
9976 /* Now members are processed in the order of declaration. */
9977 for (member = CLASSTYPE_DECL_LIST (pattern);
9978 member; member = TREE_CHAIN (member))
9979 {
9980 tree t = TREE_VALUE (member);
9981
9982 if (TREE_PURPOSE (member))
9983 {
9984 if (TYPE_P (t))
9985 {
9986 /* Build new CLASSTYPE_NESTED_UTDS. */
9987
9988 tree newtag;
9989 bool class_template_p;
9990
9991 class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
9992 && TYPE_LANG_SPECIFIC (t)
9993 && CLASSTYPE_IS_TEMPLATE (t));
9994 /* If the member is a class template, then -- even after
9995 substitution -- there may be dependent types in the
9996 template argument list for the class. We increment
9997 PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
9998 that function will assume that no types are dependent
9999 when outside of a template. */
10000 if (class_template_p)
10001 ++processing_template_decl;
10002 newtag = tsubst (t, args, tf_error, NULL_TREE);
10003 if (class_template_p)
10004 --processing_template_decl;
10005 if (newtag == error_mark_node)
10006 continue;
10007
10008 if (TREE_CODE (newtag) != ENUMERAL_TYPE)
10009 {
10010 tree name = TYPE_IDENTIFIER (t);
10011
10012 if (class_template_p)
10013 /* Unfortunately, lookup_template_class sets
10014 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
10015 instantiation (i.e., for the type of a member
10016 template class nested within a template class.)
10017 This behavior is required for
10018 maybe_process_partial_specialization to work
10019 correctly, but is not accurate in this case;
10020 the TAG is not an instantiation of anything.
10021 (The corresponding TEMPLATE_DECL is an
10022 instantiation, but the TYPE is not.) */
10023 CLASSTYPE_USE_TEMPLATE (newtag) = 0;
10024
10025 /* Now, we call pushtag to put this NEWTAG into the scope of
10026 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
10027 pushtag calling push_template_decl. We don't have to do
10028 this for enums because it will already have been done in
10029 tsubst_enum. */
10030 if (name)
10031 SET_IDENTIFIER_TYPE_VALUE (name, newtag);
10032 pushtag (name, newtag, /*tag_scope=*/ts_current);
10033 }
10034 }
10035 else if (DECL_DECLARES_FUNCTION_P (t))
10036 {
10037 /* Build new TYPE_METHODS. */
10038 tree r;
10039
10040 if (TREE_CODE (t) == TEMPLATE_DECL)
10041 ++processing_template_decl;
10042 r = tsubst (t, args, tf_error, NULL_TREE);
10043 if (TREE_CODE (t) == TEMPLATE_DECL)
10044 --processing_template_decl;
10045 set_current_access_from_decl (r);
10046 finish_member_declaration (r);
10047 /* Instantiate members marked with attribute used. */
10048 if (r != error_mark_node && DECL_PRESERVE_P (r))
10049 mark_used (r);
10050 if (TREE_CODE (r) == FUNCTION_DECL
10051 && DECL_OMP_DECLARE_REDUCTION_P (r))
10052 cp_check_omp_declare_reduction (r);
10053 }
10054 else if (DECL_CLASS_TEMPLATE_P (t)
10055 && LAMBDA_TYPE_P (TREE_TYPE (t)))
10056 /* A closure type for a lambda in a default argument for a
10057 member template. Ignore it; it will be instantiated with
10058 the default argument. */;
10059 else
10060 {
10061 /* Build new TYPE_FIELDS. */
10062 if (TREE_CODE (t) == STATIC_ASSERT)
10063 {
10064 tree condition;
10065
10066 ++c_inhibit_evaluation_warnings;
10067 condition =
10068 tsubst_expr (STATIC_ASSERT_CONDITION (t), args,
10069 tf_warning_or_error, NULL_TREE,
10070 /*integral_constant_expression_p=*/true);
10071 --c_inhibit_evaluation_warnings;
10072
10073 finish_static_assert (condition,
10074 STATIC_ASSERT_MESSAGE (t),
10075 STATIC_ASSERT_SOURCE_LOCATION (t),
10076 /*member_p=*/true);
10077 }
10078 else if (TREE_CODE (t) != CONST_DECL)
10079 {
10080 tree r;
10081 tree vec = NULL_TREE;
10082 int len = 1;
10083
10084 /* The file and line for this declaration, to
10085 assist in error message reporting. Since we
10086 called push_tinst_level above, we don't need to
10087 restore these. */
10088 input_location = DECL_SOURCE_LOCATION (t);
10089
10090 if (TREE_CODE (t) == TEMPLATE_DECL)
10091 ++processing_template_decl;
10092 r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
10093 if (TREE_CODE (t) == TEMPLATE_DECL)
10094 --processing_template_decl;
10095
10096 if (TREE_CODE (r) == TREE_VEC)
10097 {
10098 /* A capture pack became multiple fields. */
10099 vec = r;
10100 len = TREE_VEC_LENGTH (vec);
10101 }
10102
10103 for (int i = 0; i < len; ++i)
10104 {
10105 if (vec)
10106 r = TREE_VEC_ELT (vec, i);
10107 if (VAR_P (r))
10108 {
10109 /* In [temp.inst]:
10110
10111 [t]he initialization (and any associated
10112 side-effects) of a static data member does
10113 not occur unless the static data member is
10114 itself used in a way that requires the
10115 definition of the static data member to
10116 exist.
10117
10118 Therefore, we do not substitute into the
10119 initialized for the static data member here. */
10120 finish_static_data_member_decl
10121 (r,
10122 /*init=*/NULL_TREE,
10123 /*init_const_expr_p=*/false,
10124 /*asmspec_tree=*/NULL_TREE,
10125 /*flags=*/0);
10126 /* Instantiate members marked with attribute used. */
10127 if (r != error_mark_node && DECL_PRESERVE_P (r))
10128 mark_used (r);
10129 }
10130 else if (TREE_CODE (r) == FIELD_DECL)
10131 {
10132 /* Determine whether R has a valid type and can be
10133 completed later. If R is invalid, then its type
10134 is replaced by error_mark_node. */
10135 tree rtype = TREE_TYPE (r);
10136 if (can_complete_type_without_circularity (rtype))
10137 complete_type (rtype);
10138
10139 if (!complete_or_array_type_p (rtype))
10140 {
10141 /* If R's type couldn't be completed and
10142 it isn't a flexible array member (whose
10143 type is incomplete by definition) give
10144 an error. */
10145 cxx_incomplete_type_error (r, rtype);
10146 TREE_TYPE (r) = error_mark_node;
10147 }
10148 }
10149
10150 /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
10151 such a thing will already have been added to the field
10152 list by tsubst_enum in finish_member_declaration in the
10153 CLASSTYPE_NESTED_UTDS case above. */
10154 if (!(TREE_CODE (r) == TYPE_DECL
10155 && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
10156 && DECL_ARTIFICIAL (r)))
10157 {
10158 set_current_access_from_decl (r);
10159 finish_member_declaration (r);
10160 }
10161 }
10162 }
10163 }
10164 }
10165 else
10166 {
10167 if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t)
10168 || DECL_TEMPLATE_TEMPLATE_PARM_P (t))
10169 {
10170 /* Build new CLASSTYPE_FRIEND_CLASSES. */
10171
10172 tree friend_type = t;
10173 bool adjust_processing_template_decl = false;
10174
10175 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
10176 {
10177 /* template <class T> friend class C; */
10178 friend_type = tsubst_friend_class (friend_type, args);
10179 adjust_processing_template_decl = true;
10180 }
10181 else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
10182 {
10183 /* template <class T> friend class C::D; */
10184 friend_type = tsubst (friend_type, args,
10185 tf_warning_or_error, NULL_TREE);
10186 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
10187 friend_type = TREE_TYPE (friend_type);
10188 adjust_processing_template_decl = true;
10189 }
10190 else if (TREE_CODE (friend_type) == TYPENAME_TYPE
10191 || TREE_CODE (friend_type) == TEMPLATE_TYPE_PARM)
10192 {
10193 /* This could be either
10194
10195 friend class T::C;
10196
10197 when dependent_type_p is false or
10198
10199 template <class U> friend class T::C;
10200
10201 otherwise. */
10202 /* Bump processing_template_decl in case this is something like
10203 template <class T> friend struct A<T>::B. */
10204 ++processing_template_decl;
10205 friend_type = tsubst (friend_type, args,
10206 tf_warning_or_error, NULL_TREE);
10207 if (dependent_type_p (friend_type))
10208 adjust_processing_template_decl = true;
10209 --processing_template_decl;
10210 }
10211 else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
10212 && hidden_name_p (TYPE_NAME (friend_type)))
10213 {
10214 /* friend class C;
10215
10216 where C hasn't been declared yet. Let's lookup name
10217 from namespace scope directly, bypassing any name that
10218 come from dependent base class. */
10219 tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
10220
10221 /* The call to xref_tag_from_type does injection for friend
10222 classes. */
10223 push_nested_namespace (ns);
10224 friend_type =
10225 xref_tag_from_type (friend_type, NULL_TREE,
10226 /*tag_scope=*/ts_current);
10227 pop_nested_namespace (ns);
10228 }
10229 else if (uses_template_parms (friend_type))
10230 /* friend class C<T>; */
10231 friend_type = tsubst (friend_type, args,
10232 tf_warning_or_error, NULL_TREE);
10233 /* Otherwise it's
10234
10235 friend class C;
10236
10237 where C is already declared or
10238
10239 friend class C<int>;
10240
10241 We don't have to do anything in these cases. */
10242
10243 if (adjust_processing_template_decl)
10244 /* Trick make_friend_class into realizing that the friend
10245 we're adding is a template, not an ordinary class. It's
10246 important that we use make_friend_class since it will
10247 perform some error-checking and output cross-reference
10248 information. */
10249 ++processing_template_decl;
10250
10251 if (friend_type != error_mark_node)
10252 make_friend_class (type, friend_type, /*complain=*/false);
10253
10254 if (adjust_processing_template_decl)
10255 --processing_template_decl;
10256 }
10257 else
10258 {
10259 /* Build new DECL_FRIENDLIST. */
10260 tree r;
10261
10262 /* The file and line for this declaration, to
10263 assist in error message reporting. Since we
10264 called push_tinst_level above, we don't need to
10265 restore these. */
10266 input_location = DECL_SOURCE_LOCATION (t);
10267
10268 if (TREE_CODE (t) == TEMPLATE_DECL)
10269 {
10270 ++processing_template_decl;
10271 push_deferring_access_checks (dk_no_check);
10272 }
10273
10274 r = tsubst_friend_function (t, args);
10275 add_friend (type, r, /*complain=*/false);
10276 if (TREE_CODE (t) == TEMPLATE_DECL)
10277 {
10278 pop_deferring_access_checks ();
10279 --processing_template_decl;
10280 }
10281 }
10282 }
10283 }
10284
10285 if (fn_context)
10286 {
10287 /* Restore these before substituting into the lambda capture
10288 initializers. */
10289 cp_unevaluated_operand = saved_unevaluated_operand;
10290 c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
10291 }
10292
10293 if (tree expr = CLASSTYPE_LAMBDA_EXPR (type))
10294 {
10295 tree decl = lambda_function (type);
10296 if (decl)
10297 {
10298 if (!DECL_TEMPLATE_INFO (decl)
10299 || DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (decl)) != decl)
10300 {
10301 /* Set function_depth to avoid garbage collection. */
10302 ++function_depth;
10303 instantiate_decl (decl, false, false);
10304 --function_depth;
10305 }
10306
10307 /* We need to instantiate the capture list from the template
10308 after we've instantiated the closure members, but before we
10309 consider adding the conversion op. Also keep any captures
10310 that may have been added during instantiation of the op(). */
10311 tree tmpl_expr = CLASSTYPE_LAMBDA_EXPR (pattern);
10312 tree tmpl_cap
10313 = tsubst_copy_and_build (LAMBDA_EXPR_CAPTURE_LIST (tmpl_expr),
10314 args, tf_warning_or_error, NULL_TREE,
10315 false, false);
10316
10317 LAMBDA_EXPR_CAPTURE_LIST (expr)
10318 = chainon (tmpl_cap, nreverse (LAMBDA_EXPR_CAPTURE_LIST (expr)));
10319
10320 maybe_add_lambda_conv_op (type);
10321 }
10322 else
10323 gcc_assert (errorcount);
10324 }
10325
10326 /* Set the file and line number information to whatever is given for
10327 the class itself. This puts error messages involving generated
10328 implicit functions at a predictable point, and the same point
10329 that would be used for non-template classes. */
10330 input_location = DECL_SOURCE_LOCATION (typedecl);
10331
10332 unreverse_member_declarations (type);
10333 finish_struct_1 (type);
10334 TYPE_BEING_DEFINED (type) = 0;
10335
10336 /* We don't instantiate default arguments for member functions. 14.7.1:
10337
10338 The implicit instantiation of a class template specialization causes
10339 the implicit instantiation of the declarations, but not of the
10340 definitions or default arguments, of the class member functions,
10341 member classes, static data members and member templates.... */
10342
10343 /* Some typedefs referenced from within the template code need to be access
10344 checked at template instantiation time, i.e now. These types were
10345 added to the template at parsing time. Let's get those and perform
10346 the access checks then. */
10347 perform_typedefs_access_check (pattern, args);
10348 perform_deferred_access_checks (tf_warning_or_error);
10349 pop_nested_class ();
10350 maximum_field_alignment = saved_maximum_field_alignment;
10351 if (!fn_context)
10352 pop_from_top_level ();
10353 pop_deferring_access_checks ();
10354 pop_tinst_level ();
10355
10356 /* The vtable for a template class can be emitted in any translation
10357 unit in which the class is instantiated. When there is no key
10358 method, however, finish_struct_1 will already have added TYPE to
10359 the keyed_classes list. */
10360 if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
10361 keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
10362
10363 return type;
10364 }
10365
10366 /* Wrapper for instantiate_class_template_1. */
10367
10368 tree
10369 instantiate_class_template (tree type)
10370 {
10371 tree ret;
10372 timevar_push (TV_TEMPLATE_INST);
10373 ret = instantiate_class_template_1 (type);
10374 timevar_pop (TV_TEMPLATE_INST);
10375 return ret;
10376 }
10377
10378 static tree
10379 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
10380 {
10381 tree r;
10382
10383 if (!t)
10384 r = t;
10385 else if (TYPE_P (t))
10386 r = tsubst (t, args, complain, in_decl);
10387 else
10388 {
10389 if (!(complain & tf_warning))
10390 ++c_inhibit_evaluation_warnings;
10391 r = tsubst_expr (t, args, complain, in_decl,
10392 /*integral_constant_expression_p=*/true);
10393 if (!(complain & tf_warning))
10394 --c_inhibit_evaluation_warnings;
10395 }
10396 return r;
10397 }
10398
10399 /* Given a function parameter pack TMPL_PARM and some function parameters
10400 instantiated from it at *SPEC_P, return a NONTYPE_ARGUMENT_PACK of them
10401 and set *SPEC_P to point at the next point in the list. */
10402
10403 tree
10404 extract_fnparm_pack (tree tmpl_parm, tree *spec_p)
10405 {
10406 /* Collect all of the extra "packed" parameters into an
10407 argument pack. */
10408 tree parmvec;
10409 tree parmtypevec;
10410 tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
10411 tree argtypepack = cxx_make_type (TYPE_ARGUMENT_PACK);
10412 tree spec_parm = *spec_p;
10413 int i, len;
10414
10415 for (len = 0; spec_parm; ++len, spec_parm = TREE_CHAIN (spec_parm))
10416 if (tmpl_parm
10417 && !function_parameter_expanded_from_pack_p (spec_parm, tmpl_parm))
10418 break;
10419
10420 /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters. */
10421 parmvec = make_tree_vec (len);
10422 parmtypevec = make_tree_vec (len);
10423 spec_parm = *spec_p;
10424 for (i = 0; i < len; i++, spec_parm = DECL_CHAIN (spec_parm))
10425 {
10426 TREE_VEC_ELT (parmvec, i) = spec_parm;
10427 TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
10428 }
10429
10430 /* Build the argument packs. */
10431 SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
10432 SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
10433 TREE_TYPE (argpack) = argtypepack;
10434 *spec_p = spec_parm;
10435
10436 return argpack;
10437 }
10438
10439 /* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
10440 NONTYPE_ARGUMENT_PACK. */
10441
10442 static tree
10443 make_fnparm_pack (tree spec_parm)
10444 {
10445 return extract_fnparm_pack (NULL_TREE, &spec_parm);
10446 }
10447
10448 /* Return 1 if the Ith element of the argument pack ARG_PACK is a
10449 pack expansion with no extra args, 2 if it has extra args, or 0
10450 if it is not a pack expansion. */
10451
10452 static int
10453 argument_pack_element_is_expansion_p (tree arg_pack, int i)
10454 {
10455 tree vec = ARGUMENT_PACK_ARGS (arg_pack);
10456 if (i >= TREE_VEC_LENGTH (vec))
10457 return 0;
10458 tree elt = TREE_VEC_ELT (vec, i);
10459 if (DECL_P (elt))
10460 /* A decl pack is itself an expansion. */
10461 elt = TREE_TYPE (elt);
10462 if (!PACK_EXPANSION_P (elt))
10463 return 0;
10464 if (PACK_EXPANSION_EXTRA_ARGS (elt))
10465 return 2;
10466 return 1;
10467 }
10468
10469
10470 /* Creates and return an ARGUMENT_PACK_SELECT tree node. */
10471
10472 static tree
10473 make_argument_pack_select (tree arg_pack, unsigned index)
10474 {
10475 tree aps = make_node (ARGUMENT_PACK_SELECT);
10476
10477 ARGUMENT_PACK_SELECT_FROM_PACK (aps) = arg_pack;
10478 ARGUMENT_PACK_SELECT_INDEX (aps) = index;
10479
10480 return aps;
10481 }
10482
10483 /* This is a subroutine of tsubst_pack_expansion.
10484
10485 It returns TRUE if we need to use the PACK_EXPANSION_EXTRA_ARGS
10486 mechanism to store the (non complete list of) arguments of the
10487 substitution and return a non substituted pack expansion, in order
10488 to wait for when we have enough arguments to really perform the
10489 substitution. */
10490
10491 static bool
10492 use_pack_expansion_extra_args_p (tree parm_packs,
10493 int arg_pack_len,
10494 bool has_empty_arg)
10495 {
10496 /* If one pack has an expansion and another pack has a normal
10497 argument or if one pack has an empty argument and an another
10498 one hasn't then tsubst_pack_expansion cannot perform the
10499 substitution and need to fall back on the
10500 PACK_EXPANSION_EXTRA mechanism. */
10501 if (parm_packs == NULL_TREE)
10502 return false;
10503 else if (has_empty_arg)
10504 return true;
10505
10506 bool has_expansion_arg = false;
10507 for (int i = 0 ; i < arg_pack_len; ++i)
10508 {
10509 bool has_non_expansion_arg = false;
10510 for (tree parm_pack = parm_packs;
10511 parm_pack;
10512 parm_pack = TREE_CHAIN (parm_pack))
10513 {
10514 tree arg = TREE_VALUE (parm_pack);
10515
10516 int exp = argument_pack_element_is_expansion_p (arg, i);
10517 if (exp == 2)
10518 /* We can't substitute a pack expansion with extra args into
10519 our pattern. */
10520 return true;
10521 else if (exp)
10522 has_expansion_arg = true;
10523 else
10524 has_non_expansion_arg = true;
10525 }
10526
10527 if (has_expansion_arg && has_non_expansion_arg)
10528 return true;
10529 }
10530 return false;
10531 }
10532
10533 /* [temp.variadic]/6 says that:
10534
10535 The instantiation of a pack expansion [...]
10536 produces a list E1,E2, ..., En, where N is the number of elements
10537 in the pack expansion parameters.
10538
10539 This subroutine of tsubst_pack_expansion produces one of these Ei.
10540
10541 PATTERN is the pattern of the pack expansion. PARM_PACKS is a
10542 TREE_LIST in which each TREE_PURPOSE is a parameter pack of
10543 PATTERN, and each TREE_VALUE is its corresponding argument pack.
10544 INDEX is the index 'i' of the element Ei to produce. ARGS,
10545 COMPLAIN, and IN_DECL are the same parameters as for the
10546 tsubst_pack_expansion function.
10547
10548 The function returns the resulting Ei upon successful completion,
10549 or error_mark_node.
10550
10551 Note that this function possibly modifies the ARGS parameter, so
10552 it's the responsibility of the caller to restore it. */
10553
10554 static tree
10555 gen_elem_of_pack_expansion_instantiation (tree pattern,
10556 tree parm_packs,
10557 unsigned index,
10558 tree args /* This parm gets
10559 modified. */,
10560 tsubst_flags_t complain,
10561 tree in_decl)
10562 {
10563 tree t;
10564 bool ith_elem_is_expansion = false;
10565
10566 /* For each parameter pack, change the substitution of the parameter
10567 pack to the ith argument in its argument pack, then expand the
10568 pattern. */
10569 for (tree pack = parm_packs; pack; pack = TREE_CHAIN (pack))
10570 {
10571 tree parm = TREE_PURPOSE (pack);
10572 tree arg_pack = TREE_VALUE (pack);
10573 tree aps; /* instance of ARGUMENT_PACK_SELECT. */
10574
10575 ith_elem_is_expansion |=
10576 argument_pack_element_is_expansion_p (arg_pack, index);
10577
10578 /* Select the Ith argument from the pack. */
10579 if (TREE_CODE (parm) == PARM_DECL
10580 || TREE_CODE (parm) == FIELD_DECL)
10581 {
10582 if (index == 0)
10583 {
10584 aps = make_argument_pack_select (arg_pack, index);
10585 if (!mark_used (parm, complain) && !(complain & tf_error))
10586 return error_mark_node;
10587 register_local_specialization (aps, parm);
10588 }
10589 else
10590 aps = retrieve_local_specialization (parm);
10591 }
10592 else
10593 {
10594 int idx, level;
10595 template_parm_level_and_index (parm, &level, &idx);
10596
10597 if (index == 0)
10598 {
10599 aps = make_argument_pack_select (arg_pack, index);
10600 /* Update the corresponding argument. */
10601 TMPL_ARG (args, level, idx) = aps;
10602 }
10603 else
10604 /* Re-use the ARGUMENT_PACK_SELECT. */
10605 aps = TMPL_ARG (args, level, idx);
10606 }
10607 ARGUMENT_PACK_SELECT_INDEX (aps) = index;
10608 }
10609
10610 /* Substitute into the PATTERN with the (possibly altered)
10611 arguments. */
10612 if (pattern == in_decl)
10613 /* Expanding a fixed parameter pack from
10614 coerce_template_parameter_pack. */
10615 t = tsubst_decl (pattern, args, complain);
10616 else if (pattern == error_mark_node)
10617 t = error_mark_node;
10618 else if (constraint_p (pattern))
10619 {
10620 if (processing_template_decl)
10621 t = tsubst_constraint (pattern, args, complain, in_decl);
10622 else
10623 t = (constraints_satisfied_p (pattern, args)
10624 ? boolean_true_node : boolean_false_node);
10625 }
10626 else if (!TYPE_P (pattern))
10627 t = tsubst_expr (pattern, args, complain, in_decl,
10628 /*integral_constant_expression_p=*/false);
10629 else
10630 t = tsubst (pattern, args, complain, in_decl);
10631
10632 /* If the Ith argument pack element is a pack expansion, then
10633 the Ith element resulting from the substituting is going to
10634 be a pack expansion as well. */
10635 if (ith_elem_is_expansion)
10636 t = make_pack_expansion (t);
10637
10638 return t;
10639 }
10640
10641 /* When the unexpanded parameter pack in a fold expression expands to an empty
10642 sequence, the value of the expression is as follows; the program is
10643 ill-formed if the operator is not listed in this table.
10644
10645 && true
10646 || false
10647 , void() */
10648
10649 tree
10650 expand_empty_fold (tree t, tsubst_flags_t complain)
10651 {
10652 tree_code code = (tree_code)TREE_INT_CST_LOW (TREE_OPERAND (t, 0));
10653 if (!FOLD_EXPR_MODIFY_P (t))
10654 switch (code)
10655 {
10656 case TRUTH_ANDIF_EXPR:
10657 return boolean_true_node;
10658 case TRUTH_ORIF_EXPR:
10659 return boolean_false_node;
10660 case COMPOUND_EXPR:
10661 return void_node;
10662 default:
10663 break;
10664 }
10665
10666 if (complain & tf_error)
10667 error_at (location_of (t),
10668 "fold of empty expansion over %O", code);
10669 return error_mark_node;
10670 }
10671
10672 /* Given a fold-expression T and a current LEFT and RIGHT operand,
10673 form an expression that combines the two terms using the
10674 operator of T. */
10675
10676 static tree
10677 fold_expression (tree t, tree left, tree right, tsubst_flags_t complain)
10678 {
10679 tree op = FOLD_EXPR_OP (t);
10680 tree_code code = (tree_code)TREE_INT_CST_LOW (op);
10681
10682 // Handle compound assignment operators.
10683 if (FOLD_EXPR_MODIFY_P (t))
10684 return build_x_modify_expr (input_location, left, code, right, complain);
10685
10686 switch (code)
10687 {
10688 case COMPOUND_EXPR:
10689 return build_x_compound_expr (input_location, left, right, complain);
10690 case DOTSTAR_EXPR:
10691 return build_m_component_ref (left, right, complain);
10692 default:
10693 return build_x_binary_op (input_location, code,
10694 left, TREE_CODE (left),
10695 right, TREE_CODE (right),
10696 /*overload=*/NULL,
10697 complain);
10698 }
10699 }
10700
10701 /* Substitute ARGS into the pack of a fold expression T. */
10702
10703 static inline tree
10704 tsubst_fold_expr_pack (tree t, tree args, tsubst_flags_t complain, tree in_decl)
10705 {
10706 return tsubst_pack_expansion (FOLD_EXPR_PACK (t), args, complain, in_decl);
10707 }
10708
10709 /* Substitute ARGS into the pack of a fold expression T. */
10710
10711 static inline tree
10712 tsubst_fold_expr_init (tree t, tree args, tsubst_flags_t complain, tree in_decl)
10713 {
10714 return tsubst_expr (FOLD_EXPR_INIT (t), args, complain, in_decl, false);
10715 }
10716
10717 /* Expand a PACK of arguments into a grouped as left fold.
10718 Given a pack containing elements A0, A1, ..., An and an
10719 operator @, this builds the expression:
10720
10721 ((A0 @ A1) @ A2) ... @ An
10722
10723 Note that PACK must not be empty.
10724
10725 The operator is defined by the original fold expression T. */
10726
10727 static tree
10728 expand_left_fold (tree t, tree pack, tsubst_flags_t complain)
10729 {
10730 tree left = TREE_VEC_ELT (pack, 0);
10731 for (int i = 1; i < TREE_VEC_LENGTH (pack); ++i)
10732 {
10733 tree right = TREE_VEC_ELT (pack, i);
10734 left = fold_expression (t, left, right, complain);
10735 }
10736 return left;
10737 }
10738
10739 /* Substitute into a unary left fold expression. */
10740
10741 static tree
10742 tsubst_unary_left_fold (tree t, tree args, tsubst_flags_t complain,
10743 tree in_decl)
10744 {
10745 tree pack = tsubst_fold_expr_pack (t, args, complain, in_decl);
10746 if (pack == error_mark_node)
10747 return error_mark_node;
10748 if (TREE_VEC_LENGTH (pack) == 0)
10749 return expand_empty_fold (t, complain);
10750 else
10751 return expand_left_fold (t, pack, complain);
10752 }
10753
10754 /* Substitute into a binary left fold expression.
10755
10756 Do ths by building a single (non-empty) vector of argumnts and
10757 building the expression from those elements. */
10758
10759 static tree
10760 tsubst_binary_left_fold (tree t, tree args, tsubst_flags_t complain,
10761 tree in_decl)
10762 {
10763 tree pack = tsubst_fold_expr_pack (t, args, complain, in_decl);
10764 if (pack == error_mark_node)
10765 return error_mark_node;
10766 tree init = tsubst_fold_expr_init (t, args, complain, in_decl);
10767 if (init == error_mark_node)
10768 return error_mark_node;
10769
10770 tree vec = make_tree_vec (TREE_VEC_LENGTH (pack) + 1);
10771 TREE_VEC_ELT (vec, 0) = init;
10772 for (int i = 0; i < TREE_VEC_LENGTH (pack); ++i)
10773 TREE_VEC_ELT (vec, i + 1) = TREE_VEC_ELT (pack, i);
10774
10775 return expand_left_fold (t, vec, complain);
10776 }
10777
10778 /* Expand a PACK of arguments into a grouped as right fold.
10779 Given a pack containing elementns A0, A1, ..., and an
10780 operator @, this builds the expression:
10781
10782 A0@ ... (An-2 @ (An-1 @ An))
10783
10784 Note that PACK must not be empty.
10785
10786 The operator is defined by the original fold expression T. */
10787
10788 tree
10789 expand_right_fold (tree t, tree pack, tsubst_flags_t complain)
10790 {
10791 // Build the expression.
10792 int n = TREE_VEC_LENGTH (pack);
10793 tree right = TREE_VEC_ELT (pack, n - 1);
10794 for (--n; n != 0; --n)
10795 {
10796 tree left = TREE_VEC_ELT (pack, n - 1);
10797 right = fold_expression (t, left, right, complain);
10798 }
10799 return right;
10800 }
10801
10802 /* Substitute into a unary right fold expression. */
10803
10804 static tree
10805 tsubst_unary_right_fold (tree t, tree args, tsubst_flags_t complain,
10806 tree in_decl)
10807 {
10808 tree pack = tsubst_fold_expr_pack (t, args, complain, in_decl);
10809 if (pack == error_mark_node)
10810 return error_mark_node;
10811 if (TREE_VEC_LENGTH (pack) == 0)
10812 return expand_empty_fold (t, complain);
10813 else
10814 return expand_right_fold (t, pack, complain);
10815 }
10816
10817 /* Substitute into a binary right fold expression.
10818
10819 Do ths by building a single (non-empty) vector of arguments and
10820 building the expression from those elements. */
10821
10822 static tree
10823 tsubst_binary_right_fold (tree t, tree args, tsubst_flags_t complain,
10824 tree in_decl)
10825 {
10826 tree pack = tsubst_fold_expr_pack (t, args, complain, in_decl);
10827 if (pack == error_mark_node)
10828 return error_mark_node;
10829 tree init = tsubst_fold_expr_init (t, args, complain, in_decl);
10830 if (init == error_mark_node)
10831 return error_mark_node;
10832
10833 int n = TREE_VEC_LENGTH (pack);
10834 tree vec = make_tree_vec (n + 1);
10835 for (int i = 0; i < n; ++i)
10836 TREE_VEC_ELT (vec, i) = TREE_VEC_ELT (pack, i);
10837 TREE_VEC_ELT (vec, n) = init;
10838
10839 return expand_right_fold (t, vec, complain);
10840 }
10841
10842
10843 /* Substitute ARGS into T, which is an pack expansion
10844 (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
10845 TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
10846 (if only a partial substitution could be performed) or
10847 ERROR_MARK_NODE if there was an error. */
10848 tree
10849 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
10850 tree in_decl)
10851 {
10852 tree pattern;
10853 tree pack, packs = NULL_TREE;
10854 bool unsubstituted_packs = false;
10855 int i, len = -1;
10856 tree result;
10857 hash_map<tree, tree> *saved_local_specializations = NULL;
10858 bool need_local_specializations = false;
10859 int levels;
10860
10861 gcc_assert (PACK_EXPANSION_P (t));
10862 pattern = PACK_EXPANSION_PATTERN (t);
10863
10864 /* Add in any args remembered from an earlier partial instantiation. */
10865 args = add_to_template_args (PACK_EXPANSION_EXTRA_ARGS (t), args);
10866
10867 levels = TMPL_ARGS_DEPTH (args);
10868
10869 /* Determine the argument packs that will instantiate the parameter
10870 packs used in the expansion expression. While we're at it,
10871 compute the number of arguments to be expanded and make sure it
10872 is consistent. */
10873 for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack;
10874 pack = TREE_CHAIN (pack))
10875 {
10876 tree parm_pack = TREE_VALUE (pack);
10877 tree arg_pack = NULL_TREE;
10878 tree orig_arg = NULL_TREE;
10879 int level = 0;
10880
10881 if (TREE_CODE (parm_pack) == BASES)
10882 {
10883 if (BASES_DIRECT (parm_pack))
10884 return calculate_direct_bases (tsubst_expr (BASES_TYPE (parm_pack),
10885 args, complain, in_decl, false));
10886 else
10887 return calculate_bases (tsubst_expr (BASES_TYPE (parm_pack),
10888 args, complain, in_decl, false));
10889 }
10890 if (TREE_CODE (parm_pack) == PARM_DECL)
10891 {
10892 /* We know we have correct local_specializations if this
10893 expansion is at function scope, or if we're dealing with a
10894 local parameter in a requires expression; for the latter,
10895 tsubst_requires_expr set it up appropriately. */
10896 if (PACK_EXPANSION_LOCAL_P (t) || CONSTRAINT_VAR_P (parm_pack))
10897 arg_pack = retrieve_local_specialization (parm_pack);
10898 else
10899 /* We can't rely on local_specializations for a parameter
10900 name used later in a function declaration (such as in a
10901 late-specified return type). Even if it exists, it might
10902 have the wrong value for a recursive call. */
10903 need_local_specializations = true;
10904
10905 if (!arg_pack)
10906 {
10907 /* This parameter pack was used in an unevaluated context. Just
10908 make a dummy decl, since it's only used for its type. */
10909 arg_pack = tsubst_decl (parm_pack, args, complain);
10910 if (arg_pack && DECL_PACK_P (arg_pack))
10911 /* Partial instantiation of the parm_pack, we can't build
10912 up an argument pack yet. */
10913 arg_pack = NULL_TREE;
10914 else
10915 arg_pack = make_fnparm_pack (arg_pack);
10916 }
10917 }
10918 else if (TREE_CODE (parm_pack) == FIELD_DECL)
10919 arg_pack = tsubst_copy (parm_pack, args, complain, in_decl);
10920 else
10921 {
10922 int idx;
10923 template_parm_level_and_index (parm_pack, &level, &idx);
10924
10925 if (level <= levels)
10926 arg_pack = TMPL_ARG (args, level, idx);
10927 }
10928
10929 orig_arg = arg_pack;
10930 if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
10931 arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
10932
10933 if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
10934 /* This can only happen if we forget to expand an argument
10935 pack somewhere else. Just return an error, silently. */
10936 {
10937 result = make_tree_vec (1);
10938 TREE_VEC_ELT (result, 0) = error_mark_node;
10939 return result;
10940 }
10941
10942 if (arg_pack)
10943 {
10944 int my_len =
10945 TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
10946
10947 /* Don't bother trying to do a partial substitution with
10948 incomplete packs; we'll try again after deduction. */
10949 if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
10950 return t;
10951
10952 if (len < 0)
10953 len = my_len;
10954 else if (len != my_len)
10955 {
10956 if (!(complain & tf_error))
10957 /* Fail quietly. */;
10958 else if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
10959 error ("mismatched argument pack lengths while expanding "
10960 "%<%T%>",
10961 pattern);
10962 else
10963 error ("mismatched argument pack lengths while expanding "
10964 "%<%E%>",
10965 pattern);
10966 return error_mark_node;
10967 }
10968
10969 /* Keep track of the parameter packs and their corresponding
10970 argument packs. */
10971 packs = tree_cons (parm_pack, arg_pack, packs);
10972 TREE_TYPE (packs) = orig_arg;
10973 }
10974 else
10975 {
10976 /* We can't substitute for this parameter pack. We use a flag as
10977 well as the missing_level counter because function parameter
10978 packs don't have a level. */
10979 gcc_assert (processing_template_decl);
10980 unsubstituted_packs = true;
10981 }
10982 }
10983
10984 /* If the expansion is just T..., return the matching argument pack, unless
10985 we need to call convert_from_reference on all the elements. This is an
10986 important optimization; see c++/68422. */
10987 if (!unsubstituted_packs
10988 && TREE_PURPOSE (packs) == pattern)
10989 {
10990 tree args = ARGUMENT_PACK_ARGS (TREE_VALUE (packs));
10991 /* Types need no adjustment, nor does sizeof..., and if we still have
10992 some pack expansion args we won't do anything yet. */
10993 if (TREE_CODE (t) == TYPE_PACK_EXPANSION
10994 || PACK_EXPANSION_SIZEOF_P (t)
10995 || pack_expansion_args_count (args))
10996 return args;
10997 /* Also optimize expression pack expansions if we can tell that the
10998 elements won't have reference type. */
10999 tree type = TREE_TYPE (pattern);
11000 if (type && TREE_CODE (type) != REFERENCE_TYPE
11001 && !PACK_EXPANSION_P (type)
11002 && !WILDCARD_TYPE_P (type))
11003 return args;
11004 /* Otherwise use the normal path so we get convert_from_reference. */
11005 }
11006
11007 /* We cannot expand this expansion expression, because we don't have
11008 all of the argument packs we need. */
11009 if (use_pack_expansion_extra_args_p (packs, len, unsubstituted_packs))
11010 {
11011 /* We got some full packs, but we can't substitute them in until we
11012 have values for all the packs. So remember these until then. */
11013
11014 t = make_pack_expansion (pattern);
11015 PACK_EXPANSION_EXTRA_ARGS (t) = args;
11016 return t;
11017 }
11018 else if (unsubstituted_packs)
11019 {
11020 /* There were no real arguments, we're just replacing a parameter
11021 pack with another version of itself. Substitute into the
11022 pattern and return a PACK_EXPANSION_*. The caller will need to
11023 deal with that. */
11024 if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
11025 t = tsubst_expr (pattern, args, complain, in_decl,
11026 /*integral_constant_expression_p=*/false);
11027 else
11028 t = tsubst (pattern, args, complain, in_decl);
11029 t = make_pack_expansion (t);
11030 return t;
11031 }
11032
11033 gcc_assert (len >= 0);
11034
11035 if (need_local_specializations)
11036 {
11037 /* We're in a late-specified return type, so create our own local
11038 specializations map; the current map is either NULL or (in the
11039 case of recursive unification) might have bindings that we don't
11040 want to use or alter. */
11041 saved_local_specializations = local_specializations;
11042 local_specializations = new hash_map<tree, tree>;
11043 }
11044
11045 /* For each argument in each argument pack, substitute into the
11046 pattern. */
11047 result = make_tree_vec (len);
11048 tree elem_args = copy_template_args (args);
11049 for (i = 0; i < len; ++i)
11050 {
11051 t = gen_elem_of_pack_expansion_instantiation (pattern, packs,
11052 i,
11053 elem_args, complain,
11054 in_decl);
11055 TREE_VEC_ELT (result, i) = t;
11056 if (t == error_mark_node)
11057 {
11058 result = error_mark_node;
11059 break;
11060 }
11061 }
11062
11063 /* Update ARGS to restore the substitution from parameter packs to
11064 their argument packs. */
11065 for (pack = packs; pack; pack = TREE_CHAIN (pack))
11066 {
11067 tree parm = TREE_PURPOSE (pack);
11068
11069 if (TREE_CODE (parm) == PARM_DECL
11070 || TREE_CODE (parm) == FIELD_DECL)
11071 register_local_specialization (TREE_TYPE (pack), parm);
11072 else
11073 {
11074 int idx, level;
11075
11076 if (TREE_VALUE (pack) == NULL_TREE)
11077 continue;
11078
11079 template_parm_level_and_index (parm, &level, &idx);
11080
11081 /* Update the corresponding argument. */
11082 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
11083 TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
11084 TREE_TYPE (pack);
11085 else
11086 TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
11087 }
11088 }
11089
11090 if (need_local_specializations)
11091 {
11092 delete local_specializations;
11093 local_specializations = saved_local_specializations;
11094 }
11095
11096 return result;
11097 }
11098
11099 /* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
11100 TMPL. We do this using DECL_PARM_INDEX, which should work even with
11101 parameter packs; all parms generated from a function parameter pack will
11102 have the same DECL_PARM_INDEX. */
11103
11104 tree
11105 get_pattern_parm (tree parm, tree tmpl)
11106 {
11107 tree pattern = DECL_TEMPLATE_RESULT (tmpl);
11108 tree patparm;
11109
11110 if (DECL_ARTIFICIAL (parm))
11111 {
11112 for (patparm = DECL_ARGUMENTS (pattern);
11113 patparm; patparm = DECL_CHAIN (patparm))
11114 if (DECL_ARTIFICIAL (patparm)
11115 && DECL_NAME (parm) == DECL_NAME (patparm))
11116 break;
11117 }
11118 else
11119 {
11120 patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
11121 patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
11122 gcc_assert (DECL_PARM_INDEX (patparm)
11123 == DECL_PARM_INDEX (parm));
11124 }
11125
11126 return patparm;
11127 }
11128
11129 /* Make an argument pack out of the TREE_VEC VEC. */
11130
11131 static tree
11132 make_argument_pack (tree vec)
11133 {
11134 tree pack;
11135 tree elt = TREE_VEC_ELT (vec, 0);
11136 if (TYPE_P (elt))
11137 pack = cxx_make_type (TYPE_ARGUMENT_PACK);
11138 else
11139 {
11140 pack = make_node (NONTYPE_ARGUMENT_PACK);
11141 TREE_TYPE (pack) = TREE_TYPE (elt);
11142 TREE_CONSTANT (pack) = 1;
11143 }
11144 SET_ARGUMENT_PACK_ARGS (pack, vec);
11145 return pack;
11146 }
11147
11148 /* Return an exact copy of template args T that can be modified
11149 independently. */
11150
11151 static tree
11152 copy_template_args (tree t)
11153 {
11154 if (t == error_mark_node)
11155 return t;
11156
11157 int len = TREE_VEC_LENGTH (t);
11158 tree new_vec = make_tree_vec (len);
11159
11160 for (int i = 0; i < len; ++i)
11161 {
11162 tree elt = TREE_VEC_ELT (t, i);
11163 if (elt && TREE_CODE (elt) == TREE_VEC)
11164 elt = copy_template_args (elt);
11165 TREE_VEC_ELT (new_vec, i) = elt;
11166 }
11167
11168 NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_vec)
11169 = NON_DEFAULT_TEMPLATE_ARGS_COUNT (t);
11170
11171 return new_vec;
11172 }
11173
11174 /* Substitute ARGS into the vector or list of template arguments T. */
11175
11176 static tree
11177 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11178 {
11179 tree orig_t = t;
11180 int len, need_new = 0, i, expanded_len_adjust = 0, out;
11181 tree *elts;
11182
11183 if (t == error_mark_node)
11184 return error_mark_node;
11185
11186 len = TREE_VEC_LENGTH (t);
11187 elts = XALLOCAVEC (tree, len);
11188
11189 for (i = 0; i < len; i++)
11190 {
11191 tree orig_arg = TREE_VEC_ELT (t, i);
11192 tree new_arg;
11193
11194 if (TREE_CODE (orig_arg) == TREE_VEC)
11195 new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
11196 else if (PACK_EXPANSION_P (orig_arg))
11197 {
11198 /* Substitute into an expansion expression. */
11199 new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
11200
11201 if (TREE_CODE (new_arg) == TREE_VEC)
11202 /* Add to the expanded length adjustment the number of
11203 expanded arguments. We subtract one from this
11204 measurement, because the argument pack expression
11205 itself is already counted as 1 in
11206 LEN. EXPANDED_LEN_ADJUST can actually be negative, if
11207 the argument pack is empty. */
11208 expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
11209 }
11210 else if (ARGUMENT_PACK_P (orig_arg))
11211 {
11212 /* Substitute into each of the arguments. */
11213 new_arg = TYPE_P (orig_arg)
11214 ? cxx_make_type (TREE_CODE (orig_arg))
11215 : make_node (TREE_CODE (orig_arg));
11216
11217 SET_ARGUMENT_PACK_ARGS (
11218 new_arg,
11219 tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
11220 args, complain, in_decl));
11221
11222 if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
11223 new_arg = error_mark_node;
11224
11225 if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
11226 TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
11227 complain, in_decl);
11228 TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
11229
11230 if (TREE_TYPE (new_arg) == error_mark_node)
11231 new_arg = error_mark_node;
11232 }
11233 }
11234 else
11235 new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
11236
11237 if (new_arg == error_mark_node)
11238 return error_mark_node;
11239
11240 elts[i] = new_arg;
11241 if (new_arg != orig_arg)
11242 need_new = 1;
11243 }
11244
11245 if (!need_new)
11246 return t;
11247
11248 /* Make space for the expanded arguments coming from template
11249 argument packs. */
11250 t = make_tree_vec (len + expanded_len_adjust);
11251 /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
11252 arguments for a member template.
11253 In that case each TREE_VEC in ORIG_T represents a level of template
11254 arguments, and ORIG_T won't carry any non defaulted argument count.
11255 It will rather be the nested TREE_VECs that will carry one.
11256 In other words, ORIG_T carries a non defaulted argument count only
11257 if it doesn't contain any nested TREE_VEC. */
11258 if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
11259 {
11260 int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
11261 count += expanded_len_adjust;
11262 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
11263 }
11264 for (i = 0, out = 0; i < len; i++)
11265 {
11266 if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
11267 || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
11268 && TREE_CODE (elts[i]) == TREE_VEC)
11269 {
11270 int idx;
11271
11272 /* Now expand the template argument pack "in place". */
11273 for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
11274 TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
11275 }
11276 else
11277 {
11278 TREE_VEC_ELT (t, out) = elts[i];
11279 out++;
11280 }
11281 }
11282
11283 return t;
11284 }
11285
11286 /* Return the result of substituting ARGS into the template parameters
11287 given by PARMS. If there are m levels of ARGS and m + n levels of
11288 PARMS, then the result will contain n levels of PARMS. For
11289 example, if PARMS is `template <class T> template <class U>
11290 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
11291 result will be `template <int*, double, class V>'. */
11292
11293 static tree
11294 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
11295 {
11296 tree r = NULL_TREE;
11297 tree* new_parms;
11298
11299 /* When substituting into a template, we must set
11300 PROCESSING_TEMPLATE_DECL as the template parameters may be
11301 dependent if they are based on one-another, and the dependency
11302 predicates are short-circuit outside of templates. */
11303 ++processing_template_decl;
11304
11305 for (new_parms = &r;
11306 parms && TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
11307 new_parms = &(TREE_CHAIN (*new_parms)),
11308 parms = TREE_CHAIN (parms))
11309 {
11310 tree new_vec =
11311 make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
11312 int i;
11313
11314 for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
11315 {
11316 tree tuple;
11317
11318 if (parms == error_mark_node)
11319 continue;
11320
11321 tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
11322
11323 if (tuple == error_mark_node)
11324 continue;
11325
11326 TREE_VEC_ELT (new_vec, i) =
11327 tsubst_template_parm (tuple, args, complain);
11328 }
11329
11330 *new_parms =
11331 tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
11332 - TMPL_ARGS_DEPTH (args)),
11333 new_vec, NULL_TREE);
11334 }
11335
11336 --processing_template_decl;
11337
11338 return r;
11339 }
11340
11341 /* Return the result of substituting ARGS into one template parameter
11342 given by T. T Must be a TREE_LIST which TREE_VALUE is the template
11343 parameter and which TREE_PURPOSE is the default argument of the
11344 template parameter. */
11345
11346 static tree
11347 tsubst_template_parm (tree t, tree args, tsubst_flags_t complain)
11348 {
11349 tree default_value, parm_decl;
11350
11351 if (args == NULL_TREE
11352 || t == NULL_TREE
11353 || t == error_mark_node)
11354 return t;
11355
11356 gcc_assert (TREE_CODE (t) == TREE_LIST);
11357
11358 default_value = TREE_PURPOSE (t);
11359 parm_decl = TREE_VALUE (t);
11360
11361 parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
11362 if (TREE_CODE (parm_decl) == PARM_DECL
11363 && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
11364 parm_decl = error_mark_node;
11365 default_value = tsubst_template_arg (default_value, args,
11366 complain, NULL_TREE);
11367
11368 return build_tree_list (default_value, parm_decl);
11369 }
11370
11371 /* Substitute the ARGS into the indicated aggregate (or enumeration)
11372 type T. If T is not an aggregate or enumeration type, it is
11373 handled as if by tsubst. IN_DECL is as for tsubst. If
11374 ENTERING_SCOPE is nonzero, T is the context for a template which
11375 we are presently tsubst'ing. Return the substituted value. */
11376
11377 static tree
11378 tsubst_aggr_type (tree t,
11379 tree args,
11380 tsubst_flags_t complain,
11381 tree in_decl,
11382 int entering_scope)
11383 {
11384 if (t == NULL_TREE)
11385 return NULL_TREE;
11386
11387 switch (TREE_CODE (t))
11388 {
11389 case RECORD_TYPE:
11390 if (TYPE_PTRMEMFUNC_P (t))
11391 return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
11392
11393 /* Else fall through. */
11394 case ENUMERAL_TYPE:
11395 case UNION_TYPE:
11396 if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
11397 {
11398 tree argvec;
11399 tree context;
11400 tree r;
11401 int saved_unevaluated_operand;
11402 int saved_inhibit_evaluation_warnings;
11403
11404 /* In "sizeof(X<I>)" we need to evaluate "I". */
11405 saved_unevaluated_operand = cp_unevaluated_operand;
11406 cp_unevaluated_operand = 0;
11407 saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
11408 c_inhibit_evaluation_warnings = 0;
11409
11410 /* First, determine the context for the type we are looking
11411 up. */
11412 context = TYPE_CONTEXT (t);
11413 if (context && TYPE_P (context))
11414 {
11415 context = tsubst_aggr_type (context, args, complain,
11416 in_decl, /*entering_scope=*/1);
11417 /* If context is a nested class inside a class template,
11418 it may still need to be instantiated (c++/33959). */
11419 context = complete_type (context);
11420 }
11421
11422 /* Then, figure out what arguments are appropriate for the
11423 type we are trying to find. For example, given:
11424
11425 template <class T> struct S;
11426 template <class T, class U> void f(T, U) { S<U> su; }
11427
11428 and supposing that we are instantiating f<int, double>,
11429 then our ARGS will be {int, double}, but, when looking up
11430 S we only want {double}. */
11431 argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
11432 complain, in_decl);
11433 if (argvec == error_mark_node)
11434 r = error_mark_node;
11435 else
11436 {
11437 r = lookup_template_class (t, argvec, in_decl, context,
11438 entering_scope, complain);
11439 r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
11440 }
11441
11442 cp_unevaluated_operand = saved_unevaluated_operand;
11443 c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
11444
11445 return r;
11446 }
11447 else
11448 /* This is not a template type, so there's nothing to do. */
11449 return t;
11450
11451 default:
11452 return tsubst (t, args, complain, in_decl);
11453 }
11454 }
11455
11456 /* Substitute into the default argument ARG (a default argument for
11457 FN), which has the indicated TYPE. */
11458
11459 tree
11460 tsubst_default_argument (tree fn, tree type, tree arg, tsubst_flags_t complain)
11461 {
11462 tree saved_class_ptr = NULL_TREE;
11463 tree saved_class_ref = NULL_TREE;
11464 int errs = errorcount + sorrycount;
11465
11466 /* This can happen in invalid code. */
11467 if (TREE_CODE (arg) == DEFAULT_ARG)
11468 return arg;
11469
11470 /* This default argument came from a template. Instantiate the
11471 default argument here, not in tsubst. In the case of
11472 something like:
11473
11474 template <class T>
11475 struct S {
11476 static T t();
11477 void f(T = t());
11478 };
11479
11480 we must be careful to do name lookup in the scope of S<T>,
11481 rather than in the current class. */
11482 push_access_scope (fn);
11483 /* The "this" pointer is not valid in a default argument. */
11484 if (cfun)
11485 {
11486 saved_class_ptr = current_class_ptr;
11487 cp_function_chain->x_current_class_ptr = NULL_TREE;
11488 saved_class_ref = current_class_ref;
11489 cp_function_chain->x_current_class_ref = NULL_TREE;
11490 }
11491
11492 push_deferring_access_checks(dk_no_deferred);
11493 /* The default argument expression may cause implicitly defined
11494 member functions to be synthesized, which will result in garbage
11495 collection. We must treat this situation as if we were within
11496 the body of function so as to avoid collecting live data on the
11497 stack. */
11498 ++function_depth;
11499 arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
11500 complain, NULL_TREE,
11501 /*integral_constant_expression_p=*/false);
11502 --function_depth;
11503 pop_deferring_access_checks();
11504
11505 /* Restore the "this" pointer. */
11506 if (cfun)
11507 {
11508 cp_function_chain->x_current_class_ptr = saved_class_ptr;
11509 cp_function_chain->x_current_class_ref = saved_class_ref;
11510 }
11511
11512 if (errorcount+sorrycount > errs
11513 && (complain & tf_warning_or_error))
11514 inform (input_location,
11515 " when instantiating default argument for call to %D", fn);
11516
11517 /* Make sure the default argument is reasonable. */
11518 arg = check_default_argument (type, arg, complain);
11519
11520 pop_access_scope (fn);
11521
11522 return arg;
11523 }
11524
11525 /* Substitute into all the default arguments for FN. */
11526
11527 static void
11528 tsubst_default_arguments (tree fn, tsubst_flags_t complain)
11529 {
11530 tree arg;
11531 tree tmpl_args;
11532
11533 tmpl_args = DECL_TI_ARGS (fn);
11534
11535 /* If this function is not yet instantiated, we certainly don't need
11536 its default arguments. */
11537 if (uses_template_parms (tmpl_args))
11538 return;
11539 /* Don't do this again for clones. */
11540 if (DECL_CLONED_FUNCTION_P (fn))
11541 return;
11542
11543 for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
11544 arg;
11545 arg = TREE_CHAIN (arg))
11546 if (TREE_PURPOSE (arg))
11547 TREE_PURPOSE (arg) = tsubst_default_argument (fn,
11548 TREE_VALUE (arg),
11549 TREE_PURPOSE (arg),
11550 complain);
11551 }
11552
11553 /* Substitute the ARGS into the T, which is a _DECL. Return the
11554 result of the substitution. Issue error and warning messages under
11555 control of COMPLAIN. */
11556
11557 static tree
11558 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
11559 {
11560 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
11561 location_t saved_loc;
11562 tree r = NULL_TREE;
11563 tree in_decl = t;
11564 hashval_t hash = 0;
11565
11566 /* Set the filename and linenumber to improve error-reporting. */
11567 saved_loc = input_location;
11568 input_location = DECL_SOURCE_LOCATION (t);
11569
11570 switch (TREE_CODE (t))
11571 {
11572 case TEMPLATE_DECL:
11573 {
11574 /* We can get here when processing a member function template,
11575 member class template, or template template parameter. */
11576 tree decl = DECL_TEMPLATE_RESULT (t);
11577 tree spec;
11578 tree tmpl_args;
11579 tree full_args;
11580
11581 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
11582 {
11583 /* Template template parameter is treated here. */
11584 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11585 if (new_type == error_mark_node)
11586 r = error_mark_node;
11587 /* If we get a real template back, return it. This can happen in
11588 the context of most_specialized_partial_spec. */
11589 else if (TREE_CODE (new_type) == TEMPLATE_DECL)
11590 r = new_type;
11591 else
11592 /* The new TEMPLATE_DECL was built in
11593 reduce_template_parm_level. */
11594 r = TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (new_type);
11595 break;
11596 }
11597
11598 /* We might already have an instance of this template.
11599 The ARGS are for the surrounding class type, so the
11600 full args contain the tsubst'd args for the context,
11601 plus the innermost args from the template decl. */
11602 tmpl_args = DECL_CLASS_TEMPLATE_P (t)
11603 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
11604 : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
11605 /* Because this is a template, the arguments will still be
11606 dependent, even after substitution. If
11607 PROCESSING_TEMPLATE_DECL is not set, the dependency
11608 predicates will short-circuit. */
11609 ++processing_template_decl;
11610 full_args = tsubst_template_args (tmpl_args, args,
11611 complain, in_decl);
11612 --processing_template_decl;
11613 if (full_args == error_mark_node)
11614 RETURN (error_mark_node);
11615
11616 /* If this is a default template template argument,
11617 tsubst might not have changed anything. */
11618 if (full_args == tmpl_args)
11619 RETURN (t);
11620
11621 hash = hash_tmpl_and_args (t, full_args);
11622 spec = retrieve_specialization (t, full_args, hash);
11623 if (spec != NULL_TREE)
11624 {
11625 r = spec;
11626 break;
11627 }
11628
11629 /* Make a new template decl. It will be similar to the
11630 original, but will record the current template arguments.
11631 We also create a new function declaration, which is just
11632 like the old one, but points to this new template, rather
11633 than the old one. */
11634 r = copy_decl (t);
11635 gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
11636 DECL_CHAIN (r) = NULL_TREE;
11637
11638 // Build new template info linking to the original template decl.
11639 DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
11640
11641 if (TREE_CODE (decl) == TYPE_DECL
11642 && !TYPE_DECL_ALIAS_P (decl))
11643 {
11644 tree new_type;
11645 ++processing_template_decl;
11646 new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11647 --processing_template_decl;
11648 if (new_type == error_mark_node)
11649 RETURN (error_mark_node);
11650
11651 TREE_TYPE (r) = new_type;
11652 /* For a partial specialization, we need to keep pointing to
11653 the primary template. */
11654 if (!DECL_TEMPLATE_SPECIALIZATION (t))
11655 CLASSTYPE_TI_TEMPLATE (new_type) = r;
11656 DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
11657 DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
11658 DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
11659 }
11660 else
11661 {
11662 tree new_decl;
11663 ++processing_template_decl;
11664 new_decl = tsubst (decl, args, complain, in_decl);
11665 --processing_template_decl;
11666 if (new_decl == error_mark_node)
11667 RETURN (error_mark_node);
11668
11669 DECL_TEMPLATE_RESULT (r) = new_decl;
11670 DECL_TI_TEMPLATE (new_decl) = r;
11671 TREE_TYPE (r) = TREE_TYPE (new_decl);
11672 DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
11673 DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
11674 }
11675
11676 SET_DECL_IMPLICIT_INSTANTIATION (r);
11677 DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
11678 DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
11679
11680 /* The template parameters for this new template are all the
11681 template parameters for the old template, except the
11682 outermost level of parameters. */
11683 DECL_TEMPLATE_PARMS (r)
11684 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
11685 complain);
11686
11687 if (PRIMARY_TEMPLATE_P (t))
11688 DECL_PRIMARY_TEMPLATE (r) = r;
11689
11690 if (TREE_CODE (decl) != TYPE_DECL && !VAR_P (decl))
11691 /* Record this non-type partial instantiation. */
11692 register_specialization (r, t,
11693 DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
11694 false, hash);
11695 }
11696 break;
11697
11698 case FUNCTION_DECL:
11699 {
11700 tree ctx;
11701 tree argvec = NULL_TREE;
11702 tree *friends;
11703 tree gen_tmpl;
11704 tree type;
11705 int member;
11706 int args_depth;
11707 int parms_depth;
11708
11709 /* Nobody should be tsubst'ing into non-template functions. */
11710 gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
11711
11712 if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
11713 {
11714 tree spec;
11715
11716 /* If T is not dependent, just return it. */
11717 if (!uses_template_parms (DECL_TI_ARGS (t)))
11718 RETURN (t);
11719
11720 /* Calculate the most general template of which R is a
11721 specialization, and the complete set of arguments used to
11722 specialize R. */
11723 gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
11724 argvec = tsubst_template_args (DECL_TI_ARGS
11725 (DECL_TEMPLATE_RESULT
11726 (DECL_TI_TEMPLATE (t))),
11727 args, complain, in_decl);
11728 if (argvec == error_mark_node)
11729 RETURN (error_mark_node);
11730
11731 /* Check to see if we already have this specialization. */
11732 hash = hash_tmpl_and_args (gen_tmpl, argvec);
11733 spec = retrieve_specialization (gen_tmpl, argvec, hash);
11734
11735 if (spec)
11736 {
11737 r = spec;
11738 break;
11739 }
11740
11741 /* We can see more levels of arguments than parameters if
11742 there was a specialization of a member template, like
11743 this:
11744
11745 template <class T> struct S { template <class U> void f(); }
11746 template <> template <class U> void S<int>::f(U);
11747
11748 Here, we'll be substituting into the specialization,
11749 because that's where we can find the code we actually
11750 want to generate, but we'll have enough arguments for
11751 the most general template.
11752
11753 We also deal with the peculiar case:
11754
11755 template <class T> struct S {
11756 template <class U> friend void f();
11757 };
11758 template <class U> void f() {}
11759 template S<int>;
11760 template void f<double>();
11761
11762 Here, the ARGS for the instantiation of will be {int,
11763 double}. But, we only need as many ARGS as there are
11764 levels of template parameters in CODE_PATTERN. We are
11765 careful not to get fooled into reducing the ARGS in
11766 situations like:
11767
11768 template <class T> struct S { template <class U> void f(U); }
11769 template <class T> template <> void S<T>::f(int) {}
11770
11771 which we can spot because the pattern will be a
11772 specialization in this case. */
11773 args_depth = TMPL_ARGS_DEPTH (args);
11774 parms_depth =
11775 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
11776 if (args_depth > parms_depth
11777 && !DECL_TEMPLATE_SPECIALIZATION (t))
11778 args = get_innermost_template_args (args, parms_depth);
11779 }
11780 else
11781 {
11782 /* This special case arises when we have something like this:
11783
11784 template <class T> struct S {
11785 friend void f<int>(int, double);
11786 };
11787
11788 Here, the DECL_TI_TEMPLATE for the friend declaration
11789 will be an IDENTIFIER_NODE. We are being called from
11790 tsubst_friend_function, and we want only to create a
11791 new decl (R) with appropriate types so that we can call
11792 determine_specialization. */
11793 gen_tmpl = NULL_TREE;
11794 }
11795
11796 if (DECL_CLASS_SCOPE_P (t))
11797 {
11798 if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
11799 member = 2;
11800 else
11801 member = 1;
11802 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
11803 complain, t, /*entering_scope=*/1);
11804 }
11805 else
11806 {
11807 member = 0;
11808 ctx = DECL_CONTEXT (t);
11809 }
11810 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11811 if (type == error_mark_node)
11812 RETURN (error_mark_node);
11813
11814 /* If we hit excessive deduction depth, the type is bogus even if
11815 it isn't error_mark_node, so don't build a decl. */
11816 if (excessive_deduction_depth)
11817 RETURN (error_mark_node);
11818
11819 /* We do NOT check for matching decls pushed separately at this
11820 point, as they may not represent instantiations of this
11821 template, and in any case are considered separate under the
11822 discrete model. */
11823 r = copy_decl (t);
11824 DECL_USE_TEMPLATE (r) = 0;
11825 TREE_TYPE (r) = type;
11826 /* Clear out the mangled name and RTL for the instantiation. */
11827 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
11828 SET_DECL_RTL (r, NULL);
11829 /* Leave DECL_INITIAL set on deleted instantiations. */
11830 if (!DECL_DELETED_FN (r))
11831 DECL_INITIAL (r) = NULL_TREE;
11832 DECL_CONTEXT (r) = ctx;
11833
11834 /* OpenMP UDRs have the only argument a reference to the declared
11835 type. We want to diagnose if the declared type is a reference,
11836 which is invalid, but as references to references are usually
11837 quietly merged, diagnose it here. */
11838 if (DECL_OMP_DECLARE_REDUCTION_P (t))
11839 {
11840 tree argtype
11841 = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (t))));
11842 argtype = tsubst (argtype, args, complain, in_decl);
11843 if (TREE_CODE (argtype) == REFERENCE_TYPE)
11844 error_at (DECL_SOURCE_LOCATION (t),
11845 "reference type %qT in "
11846 "%<#pragma omp declare reduction%>", argtype);
11847 if (strchr (IDENTIFIER_POINTER (DECL_NAME (t)), '~') == NULL)
11848 DECL_NAME (r) = omp_reduction_id (ERROR_MARK, DECL_NAME (t),
11849 argtype);
11850 }
11851
11852 if (member && DECL_CONV_FN_P (r))
11853 /* Type-conversion operator. Reconstruct the name, in
11854 case it's the name of one of the template's parameters. */
11855 DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
11856
11857 DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
11858 complain, t);
11859 DECL_RESULT (r) = NULL_TREE;
11860
11861 TREE_STATIC (r) = 0;
11862 TREE_PUBLIC (r) = TREE_PUBLIC (t);
11863 DECL_EXTERNAL (r) = 1;
11864 /* If this is an instantiation of a function with internal
11865 linkage, we already know what object file linkage will be
11866 assigned to the instantiation. */
11867 DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
11868 DECL_DEFER_OUTPUT (r) = 0;
11869 DECL_CHAIN (r) = NULL_TREE;
11870 DECL_PENDING_INLINE_INFO (r) = 0;
11871 DECL_PENDING_INLINE_P (r) = 0;
11872 DECL_SAVED_TREE (r) = NULL_TREE;
11873 DECL_STRUCT_FUNCTION (r) = NULL;
11874 TREE_USED (r) = 0;
11875 /* We'll re-clone as appropriate in instantiate_template. */
11876 DECL_CLONED_FUNCTION (r) = NULL_TREE;
11877
11878 /* If we aren't complaining now, return on error before we register
11879 the specialization so that we'll complain eventually. */
11880 if ((complain & tf_error) == 0
11881 && IDENTIFIER_OPNAME_P (DECL_NAME (r))
11882 && !grok_op_properties (r, /*complain=*/false))
11883 RETURN (error_mark_node);
11884
11885 /* When instantiating a constrained member, substitute
11886 into the constraints to create a new constraint. */
11887 if (tree ci = get_constraints (t))
11888 if (member)
11889 {
11890 ci = tsubst_constraint_info (ci, argvec, complain, NULL_TREE);
11891 set_constraints (r, ci);
11892 }
11893
11894 /* Set up the DECL_TEMPLATE_INFO for R. There's no need to do
11895 this in the special friend case mentioned above where
11896 GEN_TMPL is NULL. */
11897 if (gen_tmpl)
11898 {
11899 DECL_TEMPLATE_INFO (r)
11900 = build_template_info (gen_tmpl, argvec);
11901 SET_DECL_IMPLICIT_INSTANTIATION (r);
11902
11903 tree new_r
11904 = register_specialization (r, gen_tmpl, argvec, false, hash);
11905 if (new_r != r)
11906 /* We instantiated this while substituting into
11907 the type earlier (template/friend54.C). */
11908 RETURN (new_r);
11909
11910 /* We're not supposed to instantiate default arguments
11911 until they are called, for a template. But, for a
11912 declaration like:
11913
11914 template <class T> void f ()
11915 { extern void g(int i = T()); }
11916
11917 we should do the substitution when the template is
11918 instantiated. We handle the member function case in
11919 instantiate_class_template since the default arguments
11920 might refer to other members of the class. */
11921 if (!member
11922 && !PRIMARY_TEMPLATE_P (gen_tmpl)
11923 && !uses_template_parms (argvec))
11924 tsubst_default_arguments (r, complain);
11925 }
11926 else
11927 DECL_TEMPLATE_INFO (r) = NULL_TREE;
11928
11929 /* Copy the list of befriending classes. */
11930 for (friends = &DECL_BEFRIENDING_CLASSES (r);
11931 *friends;
11932 friends = &TREE_CHAIN (*friends))
11933 {
11934 *friends = copy_node (*friends);
11935 TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
11936 args, complain,
11937 in_decl);
11938 }
11939
11940 if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
11941 {
11942 maybe_retrofit_in_chrg (r);
11943 if (DECL_CONSTRUCTOR_P (r))
11944 grok_ctor_properties (ctx, r);
11945 if (DECL_INHERITED_CTOR_BASE (r))
11946 deduce_inheriting_ctor (r);
11947 /* If this is an instantiation of a member template, clone it.
11948 If it isn't, that'll be handled by
11949 clone_constructors_and_destructors. */
11950 if (PRIMARY_TEMPLATE_P (gen_tmpl))
11951 clone_function_decl (r, /*update_method_vec_p=*/0);
11952 }
11953 else if ((complain & tf_error) != 0
11954 && IDENTIFIER_OPNAME_P (DECL_NAME (r))
11955 && !grok_op_properties (r, /*complain=*/true))
11956 RETURN (error_mark_node);
11957
11958 if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
11959 SET_DECL_FRIEND_CONTEXT (r,
11960 tsubst (DECL_FRIEND_CONTEXT (t),
11961 args, complain, in_decl));
11962
11963 /* Possibly limit visibility based on template args. */
11964 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
11965 if (DECL_VISIBILITY_SPECIFIED (t))
11966 {
11967 DECL_VISIBILITY_SPECIFIED (r) = 0;
11968 DECL_ATTRIBUTES (r)
11969 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
11970 }
11971 determine_visibility (r);
11972 if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
11973 && !processing_template_decl)
11974 defaulted_late_check (r);
11975
11976 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
11977 args, complain, in_decl);
11978 }
11979 break;
11980
11981 case PARM_DECL:
11982 {
11983 tree type = NULL_TREE;
11984 int i, len = 1;
11985 tree expanded_types = NULL_TREE;
11986 tree prev_r = NULL_TREE;
11987 tree first_r = NULL_TREE;
11988
11989 if (DECL_PACK_P (t))
11990 {
11991 /* If there is a local specialization that isn't a
11992 parameter pack, it means that we're doing a "simple"
11993 substitution from inside tsubst_pack_expansion. Just
11994 return the local specialization (which will be a single
11995 parm). */
11996 tree spec = retrieve_local_specialization (t);
11997 if (spec
11998 && TREE_CODE (spec) == PARM_DECL
11999 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
12000 RETURN (spec);
12001
12002 /* Expand the TYPE_PACK_EXPANSION that provides the types for
12003 the parameters in this function parameter pack. */
12004 expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
12005 complain, in_decl);
12006 if (TREE_CODE (expanded_types) == TREE_VEC)
12007 {
12008 len = TREE_VEC_LENGTH (expanded_types);
12009
12010 /* Zero-length parameter packs are boring. Just substitute
12011 into the chain. */
12012 if (len == 0)
12013 RETURN (tsubst (TREE_CHAIN (t), args, complain,
12014 TREE_CHAIN (t)));
12015 }
12016 else
12017 {
12018 /* All we did was update the type. Make a note of that. */
12019 type = expanded_types;
12020 expanded_types = NULL_TREE;
12021 }
12022 }
12023
12024 /* Loop through all of the parameters we'll build. When T is
12025 a function parameter pack, LEN is the number of expanded
12026 types in EXPANDED_TYPES; otherwise, LEN is 1. */
12027 r = NULL_TREE;
12028 for (i = 0; i < len; ++i)
12029 {
12030 prev_r = r;
12031 r = copy_node (t);
12032 if (DECL_TEMPLATE_PARM_P (t))
12033 SET_DECL_TEMPLATE_PARM_P (r);
12034
12035 if (expanded_types)
12036 /* We're on the Ith parameter of the function parameter
12037 pack. */
12038 {
12039 /* Get the Ith type. */
12040 type = TREE_VEC_ELT (expanded_types, i);
12041
12042 /* Rename the parameter to include the index. */
12043 DECL_NAME (r)
12044 = make_ith_pack_parameter_name (DECL_NAME (r), i);
12045 }
12046 else if (!type)
12047 /* We're dealing with a normal parameter. */
12048 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12049
12050 type = type_decays_to (type);
12051 TREE_TYPE (r) = type;
12052 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
12053
12054 if (DECL_INITIAL (r))
12055 {
12056 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
12057 DECL_INITIAL (r) = TREE_TYPE (r);
12058 else
12059 DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
12060 complain, in_decl);
12061 }
12062
12063 DECL_CONTEXT (r) = NULL_TREE;
12064
12065 if (!DECL_TEMPLATE_PARM_P (r))
12066 DECL_ARG_TYPE (r) = type_passed_as (type);
12067
12068 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
12069 args, complain, in_decl);
12070
12071 /* Keep track of the first new parameter we
12072 generate. That's what will be returned to the
12073 caller. */
12074 if (!first_r)
12075 first_r = r;
12076
12077 /* Build a proper chain of parameters when substituting
12078 into a function parameter pack. */
12079 if (prev_r)
12080 DECL_CHAIN (prev_r) = r;
12081 }
12082
12083 /* If cp_unevaluated_operand is set, we're just looking for a
12084 single dummy parameter, so don't keep going. */
12085 if (DECL_CHAIN (t) && !cp_unevaluated_operand)
12086 DECL_CHAIN (r) = tsubst (DECL_CHAIN (t), args,
12087 complain, DECL_CHAIN (t));
12088
12089 /* FIRST_R contains the start of the chain we've built. */
12090 r = first_r;
12091 }
12092 break;
12093
12094 case FIELD_DECL:
12095 {
12096 tree type = NULL_TREE;
12097 tree vec = NULL_TREE;
12098 tree expanded_types = NULL_TREE;
12099 int len = 1;
12100
12101 if (PACK_EXPANSION_P (TREE_TYPE (t)))
12102 {
12103 /* This field is a lambda capture pack. Return a TREE_VEC of
12104 the expanded fields to instantiate_class_template_1 and
12105 store them in the specializations hash table as a
12106 NONTYPE_ARGUMENT_PACK so that tsubst_copy can find them. */
12107 expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
12108 complain, in_decl);
12109 if (TREE_CODE (expanded_types) == TREE_VEC)
12110 {
12111 len = TREE_VEC_LENGTH (expanded_types);
12112 vec = make_tree_vec (len);
12113 }
12114 else
12115 {
12116 /* All we did was update the type. Make a note of that. */
12117 type = expanded_types;
12118 expanded_types = NULL_TREE;
12119 }
12120 }
12121
12122 for (int i = 0; i < len; ++i)
12123 {
12124 r = copy_decl (t);
12125 if (expanded_types)
12126 {
12127 type = TREE_VEC_ELT (expanded_types, i);
12128 DECL_NAME (r)
12129 = make_ith_pack_parameter_name (DECL_NAME (r), i);
12130 }
12131 else if (!type)
12132 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12133
12134 if (type == error_mark_node)
12135 RETURN (error_mark_node);
12136 TREE_TYPE (r) = type;
12137 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
12138
12139 if (DECL_C_BIT_FIELD (r))
12140 /* For bit-fields, DECL_INITIAL gives the number of bits. For
12141 non-bit-fields DECL_INITIAL is a non-static data member
12142 initializer, which gets deferred instantiation. */
12143 DECL_INITIAL (r)
12144 = tsubst_expr (DECL_INITIAL (t), args,
12145 complain, in_decl,
12146 /*integral_constant_expression_p=*/true);
12147 else if (DECL_INITIAL (t))
12148 {
12149 /* Set up DECL_TEMPLATE_INFO so that we can get at the
12150 NSDMI in perform_member_init. Still set DECL_INITIAL
12151 so that we know there is one. */
12152 DECL_INITIAL (r) = void_node;
12153 gcc_assert (DECL_LANG_SPECIFIC (r) == NULL);
12154 retrofit_lang_decl (r);
12155 DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
12156 }
12157 /* We don't have to set DECL_CONTEXT here; it is set by
12158 finish_member_declaration. */
12159 DECL_CHAIN (r) = NULL_TREE;
12160
12161 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
12162 args, complain, in_decl);
12163
12164 if (vec)
12165 TREE_VEC_ELT (vec, i) = r;
12166 }
12167
12168 if (vec)
12169 {
12170 r = vec;
12171 tree pack = make_node (NONTYPE_ARGUMENT_PACK);
12172 tree tpack = cxx_make_type (TYPE_ARGUMENT_PACK);
12173 SET_ARGUMENT_PACK_ARGS (pack, vec);
12174 SET_ARGUMENT_PACK_ARGS (tpack, expanded_types);
12175 TREE_TYPE (pack) = tpack;
12176 register_specialization (pack, t, args, false, 0);
12177 }
12178 }
12179 break;
12180
12181 case USING_DECL:
12182 /* We reach here only for member using decls. We also need to check
12183 uses_template_parms because DECL_DEPENDENT_P is not set for a
12184 using-declaration that designates a member of the current
12185 instantiation (c++/53549). */
12186 if (DECL_DEPENDENT_P (t)
12187 || uses_template_parms (USING_DECL_SCOPE (t)))
12188 {
12189 tree inst_scope = tsubst_copy (USING_DECL_SCOPE (t), args,
12190 complain, in_decl);
12191 tree name = tsubst_copy (DECL_NAME (t), args, complain, in_decl);
12192 r = do_class_using_decl (inst_scope, name);
12193 if (!r)
12194 r = error_mark_node;
12195 else
12196 {
12197 TREE_PROTECTED (r) = TREE_PROTECTED (t);
12198 TREE_PRIVATE (r) = TREE_PRIVATE (t);
12199 }
12200 }
12201 else
12202 {
12203 r = copy_node (t);
12204 DECL_CHAIN (r) = NULL_TREE;
12205 }
12206 break;
12207
12208 case TYPE_DECL:
12209 case VAR_DECL:
12210 {
12211 tree argvec = NULL_TREE;
12212 tree gen_tmpl = NULL_TREE;
12213 tree spec;
12214 tree tmpl = NULL_TREE;
12215 tree ctx;
12216 tree type = NULL_TREE;
12217 bool local_p;
12218
12219 if (TREE_TYPE (t) == error_mark_node)
12220 RETURN (error_mark_node);
12221
12222 if (TREE_CODE (t) == TYPE_DECL
12223 && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
12224 {
12225 /* If this is the canonical decl, we don't have to
12226 mess with instantiations, and often we can't (for
12227 typename, template type parms and such). Note that
12228 TYPE_NAME is not correct for the above test if
12229 we've copied the type for a typedef. */
12230 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12231 if (type == error_mark_node)
12232 RETURN (error_mark_node);
12233 r = TYPE_NAME (type);
12234 break;
12235 }
12236
12237 /* Check to see if we already have the specialization we
12238 need. */
12239 spec = NULL_TREE;
12240 if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
12241 {
12242 /* T is a static data member or namespace-scope entity.
12243 We have to substitute into namespace-scope variables
12244 (not just variable templates) because of cases like:
12245
12246 template <class T> void f() { extern T t; }
12247
12248 where the entity referenced is not known until
12249 instantiation time. */
12250 local_p = false;
12251 ctx = DECL_CONTEXT (t);
12252 if (DECL_CLASS_SCOPE_P (t))
12253 {
12254 ctx = tsubst_aggr_type (ctx, args,
12255 complain,
12256 in_decl, /*entering_scope=*/1);
12257 /* If CTX is unchanged, then T is in fact the
12258 specialization we want. That situation occurs when
12259 referencing a static data member within in its own
12260 class. We can use pointer equality, rather than
12261 same_type_p, because DECL_CONTEXT is always
12262 canonical... */
12263 if (ctx == DECL_CONTEXT (t)
12264 /* ... unless T is a member template; in which
12265 case our caller can be willing to create a
12266 specialization of that template represented
12267 by T. */
12268 && !(DECL_TI_TEMPLATE (t)
12269 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (t))))
12270 spec = t;
12271 }
12272
12273 if (!spec)
12274 {
12275 tmpl = DECL_TI_TEMPLATE (t);
12276 gen_tmpl = most_general_template (tmpl);
12277 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
12278 if (argvec != error_mark_node)
12279 argvec = (coerce_innermost_template_parms
12280 (DECL_TEMPLATE_PARMS (gen_tmpl),
12281 argvec, t, complain,
12282 /*all*/true, /*defarg*/true));
12283 if (argvec == error_mark_node)
12284 RETURN (error_mark_node);
12285 hash = hash_tmpl_and_args (gen_tmpl, argvec);
12286 spec = retrieve_specialization (gen_tmpl, argvec, hash);
12287 }
12288 }
12289 else
12290 {
12291 /* A local variable. */
12292 local_p = true;
12293 /* Subsequent calls to pushdecl will fill this in. */
12294 ctx = NULL_TREE;
12295 /* Unless this is a reference to a static variable from an
12296 enclosing function, in which case we need to fill it in now. */
12297 if (TREE_STATIC (t))
12298 {
12299 tree fn = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
12300 if (fn != current_function_decl)
12301 ctx = fn;
12302 }
12303 spec = retrieve_local_specialization (t);
12304 }
12305 /* If we already have the specialization we need, there is
12306 nothing more to do. */
12307 if (spec)
12308 {
12309 r = spec;
12310 break;
12311 }
12312
12313 /* Create a new node for the specialization we need. */
12314 r = copy_decl (t);
12315 if (type == NULL_TREE)
12316 {
12317 if (is_typedef_decl (t))
12318 type = DECL_ORIGINAL_TYPE (t);
12319 else
12320 type = TREE_TYPE (t);
12321 if (VAR_P (t)
12322 && VAR_HAD_UNKNOWN_BOUND (t)
12323 && type != error_mark_node)
12324 type = strip_array_domain (type);
12325 type = tsubst (type, args, complain, in_decl);
12326 }
12327 if (VAR_P (r))
12328 {
12329 /* Even if the original location is out of scope, the
12330 newly substituted one is not. */
12331 DECL_DEAD_FOR_LOCAL (r) = 0;
12332 DECL_INITIALIZED_P (r) = 0;
12333 DECL_TEMPLATE_INSTANTIATED (r) = 0;
12334 if (type == error_mark_node)
12335 RETURN (error_mark_node);
12336 if (TREE_CODE (type) == FUNCTION_TYPE)
12337 {
12338 /* It may seem that this case cannot occur, since:
12339
12340 typedef void f();
12341 void g() { f x; }
12342
12343 declares a function, not a variable. However:
12344
12345 typedef void f();
12346 template <typename T> void g() { T t; }
12347 template void g<f>();
12348
12349 is an attempt to declare a variable with function
12350 type. */
12351 error ("variable %qD has function type",
12352 /* R is not yet sufficiently initialized, so we
12353 just use its name. */
12354 DECL_NAME (r));
12355 RETURN (error_mark_node);
12356 }
12357 type = complete_type (type);
12358 /* Wait until cp_finish_decl to set this again, to handle
12359 circular dependency (template/instantiate6.C). */
12360 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r) = 0;
12361 type = check_var_type (DECL_NAME (r), type);
12362
12363 if (DECL_HAS_VALUE_EXPR_P (t))
12364 {
12365 tree ve = DECL_VALUE_EXPR (t);
12366 ve = tsubst_expr (ve, args, complain, in_decl,
12367 /*constant_expression_p=*/false);
12368 if (REFERENCE_REF_P (ve))
12369 {
12370 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
12371 ve = TREE_OPERAND (ve, 0);
12372 }
12373 SET_DECL_VALUE_EXPR (r, ve);
12374 }
12375 if (CP_DECL_THREAD_LOCAL_P (r)
12376 && !processing_template_decl)
12377 set_decl_tls_model (r, decl_default_tls_model (r));
12378 }
12379 else if (DECL_SELF_REFERENCE_P (t))
12380 SET_DECL_SELF_REFERENCE_P (r);
12381 TREE_TYPE (r) = type;
12382 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
12383 DECL_CONTEXT (r) = ctx;
12384 /* Clear out the mangled name and RTL for the instantiation. */
12385 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
12386 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
12387 SET_DECL_RTL (r, NULL);
12388 /* The initializer must not be expanded until it is required;
12389 see [temp.inst]. */
12390 DECL_INITIAL (r) = NULL_TREE;
12391 if (VAR_P (r))
12392 DECL_MODE (r) = VOIDmode;
12393 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
12394 SET_DECL_RTL (r, NULL);
12395 DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
12396 if (VAR_P (r))
12397 {
12398 /* Possibly limit visibility based on template args. */
12399 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
12400 if (DECL_VISIBILITY_SPECIFIED (t))
12401 {
12402 DECL_VISIBILITY_SPECIFIED (r) = 0;
12403 DECL_ATTRIBUTES (r)
12404 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
12405 }
12406 determine_visibility (r);
12407 }
12408
12409 if (!local_p)
12410 {
12411 /* A static data member declaration is always marked
12412 external when it is declared in-class, even if an
12413 initializer is present. We mimic the non-template
12414 processing here. */
12415 DECL_EXTERNAL (r) = 1;
12416 if (DECL_NAMESPACE_SCOPE_P (t))
12417 DECL_NOT_REALLY_EXTERN (r) = 1;
12418
12419 DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
12420 SET_DECL_IMPLICIT_INSTANTIATION (r);
12421 register_specialization (r, gen_tmpl, argvec, false, hash);
12422 }
12423 else
12424 {
12425 if (DECL_LANG_SPECIFIC (r))
12426 DECL_TEMPLATE_INFO (r) = NULL_TREE;
12427 if (!cp_unevaluated_operand)
12428 register_local_specialization (r, t);
12429 }
12430
12431 DECL_CHAIN (r) = NULL_TREE;
12432
12433 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
12434 /*flags=*/0,
12435 args, complain, in_decl);
12436
12437 /* Preserve a typedef that names a type. */
12438 if (is_typedef_decl (r))
12439 {
12440 DECL_ORIGINAL_TYPE (r) = NULL_TREE;
12441 set_underlying_type (r);
12442 if (TYPE_DECL_ALIAS_P (r) && type != error_mark_node)
12443 /* An alias template specialization can be dependent
12444 even if its underlying type is not. */
12445 TYPE_DEPENDENT_P_VALID (TREE_TYPE (r)) = false;
12446 }
12447
12448 layout_decl (r, 0);
12449 }
12450 break;
12451
12452 default:
12453 gcc_unreachable ();
12454 }
12455 #undef RETURN
12456
12457 out:
12458 /* Restore the file and line information. */
12459 input_location = saved_loc;
12460
12461 return r;
12462 }
12463
12464 /* Substitute into the ARG_TYPES of a function type.
12465 If END is a TREE_CHAIN, leave it and any following types
12466 un-substituted. */
12467
12468 static tree
12469 tsubst_arg_types (tree arg_types,
12470 tree args,
12471 tree end,
12472 tsubst_flags_t complain,
12473 tree in_decl)
12474 {
12475 tree remaining_arg_types;
12476 tree type = NULL_TREE;
12477 int i = 1;
12478 tree expanded_args = NULL_TREE;
12479 tree default_arg;
12480
12481 if (!arg_types || arg_types == void_list_node || arg_types == end)
12482 return arg_types;
12483
12484 remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
12485 args, end, complain, in_decl);
12486 if (remaining_arg_types == error_mark_node)
12487 return error_mark_node;
12488
12489 if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
12490 {
12491 /* For a pack expansion, perform substitution on the
12492 entire expression. Later on, we'll handle the arguments
12493 one-by-one. */
12494 expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
12495 args, complain, in_decl);
12496
12497 if (TREE_CODE (expanded_args) == TREE_VEC)
12498 /* So that we'll spin through the parameters, one by one. */
12499 i = TREE_VEC_LENGTH (expanded_args);
12500 else
12501 {
12502 /* We only partially substituted into the parameter
12503 pack. Our type is TYPE_PACK_EXPANSION. */
12504 type = expanded_args;
12505 expanded_args = NULL_TREE;
12506 }
12507 }
12508
12509 while (i > 0) {
12510 --i;
12511
12512 if (expanded_args)
12513 type = TREE_VEC_ELT (expanded_args, i);
12514 else if (!type)
12515 type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
12516
12517 if (type == error_mark_node)
12518 return error_mark_node;
12519 if (VOID_TYPE_P (type))
12520 {
12521 if (complain & tf_error)
12522 {
12523 error ("invalid parameter type %qT", type);
12524 if (in_decl)
12525 error ("in declaration %q+D", in_decl);
12526 }
12527 return error_mark_node;
12528 }
12529 /* DR 657. */
12530 if (abstract_virtuals_error_sfinae (ACU_PARM, type, complain))
12531 return error_mark_node;
12532
12533 /* Do array-to-pointer, function-to-pointer conversion, and ignore
12534 top-level qualifiers as required. */
12535 type = cv_unqualified (type_decays_to (type));
12536
12537 /* We do not substitute into default arguments here. The standard
12538 mandates that they be instantiated only when needed, which is
12539 done in build_over_call. */
12540 default_arg = TREE_PURPOSE (arg_types);
12541
12542 if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
12543 {
12544 /* We've instantiated a template before its default arguments
12545 have been parsed. This can happen for a nested template
12546 class, and is not an error unless we require the default
12547 argument in a call of this function. */
12548 remaining_arg_types =
12549 tree_cons (default_arg, type, remaining_arg_types);
12550 vec_safe_push (DEFARG_INSTANTIATIONS(default_arg), remaining_arg_types);
12551 }
12552 else
12553 remaining_arg_types =
12554 hash_tree_cons (default_arg, type, remaining_arg_types);
12555 }
12556
12557 return remaining_arg_types;
12558 }
12559
12560 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
12561 *not* handle the exception-specification for FNTYPE, because the
12562 initial substitution of explicitly provided template parameters
12563 during argument deduction forbids substitution into the
12564 exception-specification:
12565
12566 [temp.deduct]
12567
12568 All references in the function type of the function template to the
12569 corresponding template parameters are replaced by the specified tem-
12570 plate argument values. If a substitution in a template parameter or
12571 in the function type of the function template results in an invalid
12572 type, type deduction fails. [Note: The equivalent substitution in
12573 exception specifications is done only when the function is instanti-
12574 ated, at which point a program is ill-formed if the substitution
12575 results in an invalid type.] */
12576
12577 static tree
12578 tsubst_function_type (tree t,
12579 tree args,
12580 tsubst_flags_t complain,
12581 tree in_decl)
12582 {
12583 tree return_type;
12584 tree arg_types = NULL_TREE;
12585 tree fntype;
12586
12587 /* The TYPE_CONTEXT is not used for function/method types. */
12588 gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
12589
12590 /* DR 1227: Mixing immediate and non-immediate contexts in deduction
12591 failure. */
12592 bool late_return_type_p = TYPE_HAS_LATE_RETURN_TYPE (t);
12593
12594 if (late_return_type_p)
12595 {
12596 /* Substitute the argument types. */
12597 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args, NULL_TREE,
12598 complain, in_decl);
12599 if (arg_types == error_mark_node)
12600 return error_mark_node;
12601
12602 tree save_ccp = current_class_ptr;
12603 tree save_ccr = current_class_ref;
12604 tree this_type = (TREE_CODE (t) == METHOD_TYPE
12605 ? TREE_TYPE (TREE_VALUE (arg_types)) : NULL_TREE);
12606 bool do_inject = this_type && CLASS_TYPE_P (this_type);
12607 if (do_inject)
12608 {
12609 /* DR 1207: 'this' is in scope in the trailing return type. */
12610 inject_this_parameter (this_type, cp_type_quals (this_type));
12611 }
12612
12613 /* Substitute the return type. */
12614 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12615
12616 if (do_inject)
12617 {
12618 current_class_ptr = save_ccp;
12619 current_class_ref = save_ccr;
12620 }
12621 }
12622 else
12623 /* Substitute the return type. */
12624 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12625
12626 if (return_type == error_mark_node)
12627 return error_mark_node;
12628 /* DR 486 clarifies that creation of a function type with an
12629 invalid return type is a deduction failure. */
12630 if (TREE_CODE (return_type) == ARRAY_TYPE
12631 || TREE_CODE (return_type) == FUNCTION_TYPE)
12632 {
12633 if (complain & tf_error)
12634 {
12635 if (TREE_CODE (return_type) == ARRAY_TYPE)
12636 error ("function returning an array");
12637 else
12638 error ("function returning a function");
12639 }
12640 return error_mark_node;
12641 }
12642 /* And DR 657. */
12643 if (abstract_virtuals_error_sfinae (ACU_RETURN, return_type, complain))
12644 return error_mark_node;
12645
12646 if (!late_return_type_p)
12647 {
12648 /* Substitute the argument types. */
12649 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args, NULL_TREE,
12650 complain, in_decl);
12651 if (arg_types == error_mark_node)
12652 return error_mark_node;
12653 }
12654
12655 /* Construct a new type node and return it. */
12656 if (TREE_CODE (t) == FUNCTION_TYPE)
12657 {
12658 fntype = build_function_type (return_type, arg_types);
12659 fntype = apply_memfn_quals (fntype,
12660 type_memfn_quals (t),
12661 type_memfn_rqual (t));
12662 }
12663 else
12664 {
12665 tree r = TREE_TYPE (TREE_VALUE (arg_types));
12666 /* Don't pick up extra function qualifiers from the basetype. */
12667 r = cp_build_qualified_type_real (r, type_memfn_quals (t), complain);
12668 if (! MAYBE_CLASS_TYPE_P (r))
12669 {
12670 /* [temp.deduct]
12671
12672 Type deduction may fail for any of the following
12673 reasons:
12674
12675 -- Attempting to create "pointer to member of T" when T
12676 is not a class type. */
12677 if (complain & tf_error)
12678 error ("creating pointer to member function of non-class type %qT",
12679 r);
12680 return error_mark_node;
12681 }
12682
12683 fntype = build_method_type_directly (r, return_type,
12684 TREE_CHAIN (arg_types));
12685 fntype = build_ref_qualified_type (fntype, type_memfn_rqual (t));
12686 }
12687 fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
12688
12689 if (late_return_type_p)
12690 TYPE_HAS_LATE_RETURN_TYPE (fntype) = 1;
12691
12692 return fntype;
12693 }
12694
12695 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE. Substitute the template
12696 ARGS into that specification, and return the substituted
12697 specification. If there is no specification, return NULL_TREE. */
12698
12699 static tree
12700 tsubst_exception_specification (tree fntype,
12701 tree args,
12702 tsubst_flags_t complain,
12703 tree in_decl,
12704 bool defer_ok)
12705 {
12706 tree specs;
12707 tree new_specs;
12708
12709 specs = TYPE_RAISES_EXCEPTIONS (fntype);
12710 new_specs = NULL_TREE;
12711 if (specs && TREE_PURPOSE (specs))
12712 {
12713 /* A noexcept-specifier. */
12714 tree expr = TREE_PURPOSE (specs);
12715 if (TREE_CODE (expr) == INTEGER_CST)
12716 new_specs = expr;
12717 else if (defer_ok)
12718 {
12719 /* Defer instantiation of noexcept-specifiers to avoid
12720 excessive instantiations (c++/49107). */
12721 new_specs = make_node (DEFERRED_NOEXCEPT);
12722 if (DEFERRED_NOEXCEPT_SPEC_P (specs))
12723 {
12724 /* We already partially instantiated this member template,
12725 so combine the new args with the old. */
12726 DEFERRED_NOEXCEPT_PATTERN (new_specs)
12727 = DEFERRED_NOEXCEPT_PATTERN (expr);
12728 DEFERRED_NOEXCEPT_ARGS (new_specs)
12729 = add_to_template_args (DEFERRED_NOEXCEPT_ARGS (expr), args);
12730 }
12731 else
12732 {
12733 DEFERRED_NOEXCEPT_PATTERN (new_specs) = expr;
12734 DEFERRED_NOEXCEPT_ARGS (new_specs) = args;
12735 }
12736 }
12737 else
12738 new_specs = tsubst_copy_and_build
12739 (expr, args, complain, in_decl, /*function_p=*/false,
12740 /*integral_constant_expression_p=*/true);
12741 new_specs = build_noexcept_spec (new_specs, complain);
12742 }
12743 else if (specs)
12744 {
12745 if (! TREE_VALUE (specs))
12746 new_specs = specs;
12747 else
12748 while (specs)
12749 {
12750 tree spec;
12751 int i, len = 1;
12752 tree expanded_specs = NULL_TREE;
12753
12754 if (PACK_EXPANSION_P (TREE_VALUE (specs)))
12755 {
12756 /* Expand the pack expansion type. */
12757 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
12758 args, complain,
12759 in_decl);
12760
12761 if (expanded_specs == error_mark_node)
12762 return error_mark_node;
12763 else if (TREE_CODE (expanded_specs) == TREE_VEC)
12764 len = TREE_VEC_LENGTH (expanded_specs);
12765 else
12766 {
12767 /* We're substituting into a member template, so
12768 we got a TYPE_PACK_EXPANSION back. Add that
12769 expansion and move on. */
12770 gcc_assert (TREE_CODE (expanded_specs)
12771 == TYPE_PACK_EXPANSION);
12772 new_specs = add_exception_specifier (new_specs,
12773 expanded_specs,
12774 complain);
12775 specs = TREE_CHAIN (specs);
12776 continue;
12777 }
12778 }
12779
12780 for (i = 0; i < len; ++i)
12781 {
12782 if (expanded_specs)
12783 spec = TREE_VEC_ELT (expanded_specs, i);
12784 else
12785 spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
12786 if (spec == error_mark_node)
12787 return spec;
12788 new_specs = add_exception_specifier (new_specs, spec,
12789 complain);
12790 }
12791
12792 specs = TREE_CHAIN (specs);
12793 }
12794 }
12795 return new_specs;
12796 }
12797
12798 /* Take the tree structure T and replace template parameters used
12799 therein with the argument vector ARGS. IN_DECL is an associated
12800 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
12801 Issue error and warning messages under control of COMPLAIN. Note
12802 that we must be relatively non-tolerant of extensions here, in
12803 order to preserve conformance; if we allow substitutions that
12804 should not be allowed, we may allow argument deductions that should
12805 not succeed, and therefore report ambiguous overload situations
12806 where there are none. In theory, we could allow the substitution,
12807 but indicate that it should have failed, and allow our caller to
12808 make sure that the right thing happens, but we don't try to do this
12809 yet.
12810
12811 This function is used for dealing with types, decls and the like;
12812 for expressions, use tsubst_expr or tsubst_copy. */
12813
12814 tree
12815 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
12816 {
12817 enum tree_code code;
12818 tree type, r = NULL_TREE;
12819
12820 if (t == NULL_TREE || t == error_mark_node
12821 || t == integer_type_node
12822 || t == void_type_node
12823 || t == char_type_node
12824 || t == unknown_type_node
12825 || TREE_CODE (t) == NAMESPACE_DECL
12826 || TREE_CODE (t) == TRANSLATION_UNIT_DECL)
12827 return t;
12828
12829 if (DECL_P (t))
12830 return tsubst_decl (t, args, complain);
12831
12832 if (args == NULL_TREE)
12833 return t;
12834
12835 code = TREE_CODE (t);
12836
12837 if (code == IDENTIFIER_NODE)
12838 type = IDENTIFIER_TYPE_VALUE (t);
12839 else
12840 type = TREE_TYPE (t);
12841
12842 gcc_assert (type != unknown_type_node);
12843
12844 /* Reuse typedefs. We need to do this to handle dependent attributes,
12845 such as attribute aligned. */
12846 if (TYPE_P (t)
12847 && typedef_variant_p (t))
12848 {
12849 tree decl = TYPE_NAME (t);
12850
12851 if (alias_template_specialization_p (t))
12852 {
12853 /* DECL represents an alias template and we want to
12854 instantiate it. */
12855 tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
12856 tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
12857 r = instantiate_alias_template (tmpl, gen_args, complain);
12858 }
12859 else if (DECL_CLASS_SCOPE_P (decl)
12860 && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
12861 && uses_template_parms (DECL_CONTEXT (decl)))
12862 {
12863 tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
12864 tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
12865 r = retrieve_specialization (tmpl, gen_args, 0);
12866 }
12867 else if (DECL_FUNCTION_SCOPE_P (decl)
12868 && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
12869 && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
12870 r = retrieve_local_specialization (decl);
12871 else
12872 /* The typedef is from a non-template context. */
12873 return t;
12874
12875 if (r)
12876 {
12877 r = TREE_TYPE (r);
12878 r = cp_build_qualified_type_real
12879 (r, cp_type_quals (t) | cp_type_quals (r),
12880 complain | tf_ignore_bad_quals);
12881 return r;
12882 }
12883 else
12884 {
12885 /* We don't have an instantiation yet, so drop the typedef. */
12886 int quals = cp_type_quals (t);
12887 t = DECL_ORIGINAL_TYPE (decl);
12888 t = cp_build_qualified_type_real (t, quals,
12889 complain | tf_ignore_bad_quals);
12890 }
12891 }
12892
12893 if (type
12894 && code != TYPENAME_TYPE
12895 && code != TEMPLATE_TYPE_PARM
12896 && code != IDENTIFIER_NODE
12897 && code != FUNCTION_TYPE
12898 && code != METHOD_TYPE)
12899 type = tsubst (type, args, complain, in_decl);
12900 if (type == error_mark_node)
12901 return error_mark_node;
12902
12903 switch (code)
12904 {
12905 case RECORD_TYPE:
12906 case UNION_TYPE:
12907 case ENUMERAL_TYPE:
12908 return tsubst_aggr_type (t, args, complain, in_decl,
12909 /*entering_scope=*/0);
12910
12911 case ERROR_MARK:
12912 case IDENTIFIER_NODE:
12913 case VOID_TYPE:
12914 case REAL_TYPE:
12915 case COMPLEX_TYPE:
12916 case VECTOR_TYPE:
12917 case BOOLEAN_TYPE:
12918 case NULLPTR_TYPE:
12919 case LANG_TYPE:
12920 return t;
12921
12922 case INTEGER_TYPE:
12923 if (t == integer_type_node)
12924 return t;
12925
12926 if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
12927 && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
12928 return t;
12929
12930 {
12931 tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
12932
12933 max = tsubst_expr (omax, args, complain, in_decl,
12934 /*integral_constant_expression_p=*/false);
12935
12936 /* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
12937 needed. */
12938 if (TREE_CODE (max) == NOP_EXPR
12939 && TREE_SIDE_EFFECTS (omax)
12940 && !TREE_TYPE (max))
12941 TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
12942
12943 /* If we're in a partial instantiation, preserve the magic NOP_EXPR
12944 with TREE_SIDE_EFFECTS that indicates this is not an integral
12945 constant expression. */
12946 if (processing_template_decl
12947 && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
12948 {
12949 gcc_assert (TREE_CODE (max) == NOP_EXPR);
12950 TREE_SIDE_EFFECTS (max) = 1;
12951 }
12952
12953 return compute_array_index_type (NULL_TREE, max, complain);
12954 }
12955
12956 case TEMPLATE_TYPE_PARM:
12957 case TEMPLATE_TEMPLATE_PARM:
12958 case BOUND_TEMPLATE_TEMPLATE_PARM:
12959 case TEMPLATE_PARM_INDEX:
12960 {
12961 int idx;
12962 int level;
12963 int levels;
12964 tree arg = NULL_TREE;
12965
12966 /* Early in template argument deduction substitution, we don't
12967 want to reduce the level of 'auto', or it will be confused
12968 with a normal template parm in subsequent deduction. */
12969 if (is_auto (t) && (complain & tf_partial))
12970 return t;
12971
12972 r = NULL_TREE;
12973
12974 gcc_assert (TREE_VEC_LENGTH (args) > 0);
12975 template_parm_level_and_index (t, &level, &idx);
12976
12977 levels = TMPL_ARGS_DEPTH (args);
12978 if (level <= levels
12979 && TREE_VEC_LENGTH (TMPL_ARGS_LEVEL (args, level)) > 0)
12980 {
12981 arg = TMPL_ARG (args, level, idx);
12982
12983 if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
12984 {
12985 /* See through ARGUMENT_PACK_SELECT arguments. */
12986 arg = ARGUMENT_PACK_SELECT_ARG (arg);
12987 /* If the selected argument is an expansion E, that most
12988 likely means we were called from
12989 gen_elem_of_pack_expansion_instantiation during the
12990 substituting of pack an argument pack (which Ith
12991 element is a pack expansion, where I is
12992 ARGUMENT_PACK_SELECT_INDEX) into a pack expansion.
12993 In this case, the Ith element resulting from this
12994 substituting is going to be a pack expansion, which
12995 pattern is the pattern of E. Let's return the
12996 pattern of E, and
12997 gen_elem_of_pack_expansion_instantiation will
12998 build the resulting pack expansion from it. */
12999 if (PACK_EXPANSION_P (arg))
13000 {
13001 /* Make sure we aren't throwing away arg info. */
13002 gcc_assert (!PACK_EXPANSION_EXTRA_ARGS (arg));
13003 arg = PACK_EXPANSION_PATTERN (arg);
13004 }
13005 }
13006 }
13007
13008 if (arg == error_mark_node)
13009 return error_mark_node;
13010 else if (arg != NULL_TREE)
13011 {
13012 if (ARGUMENT_PACK_P (arg))
13013 /* If ARG is an argument pack, we don't actually want to
13014 perform a substitution here, because substitutions
13015 for argument packs are only done
13016 element-by-element. We can get to this point when
13017 substituting the type of a non-type template
13018 parameter pack, when that type actually contains
13019 template parameter packs from an outer template, e.g.,
13020
13021 template<typename... Types> struct A {
13022 template<Types... Values> struct B { };
13023 }; */
13024 return t;
13025
13026 if (code == TEMPLATE_TYPE_PARM)
13027 {
13028 int quals;
13029 gcc_assert (TYPE_P (arg));
13030
13031 quals = cp_type_quals (arg) | cp_type_quals (t);
13032
13033 return cp_build_qualified_type_real
13034 (arg, quals, complain | tf_ignore_bad_quals);
13035 }
13036 else if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
13037 {
13038 /* We are processing a type constructed from a
13039 template template parameter. */
13040 tree argvec = tsubst (TYPE_TI_ARGS (t),
13041 args, complain, in_decl);
13042 if (argvec == error_mark_node)
13043 return error_mark_node;
13044
13045 gcc_assert (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
13046 || TREE_CODE (arg) == TEMPLATE_DECL
13047 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
13048
13049 if (TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE)
13050 /* Consider this code:
13051
13052 template <template <class> class Template>
13053 struct Internal {
13054 template <class Arg> using Bind = Template<Arg>;
13055 };
13056
13057 template <template <class> class Template, class Arg>
13058 using Instantiate = Template<Arg>; //#0
13059
13060 template <template <class> class Template,
13061 class Argument>
13062 using Bind =
13063 Instantiate<Internal<Template>::template Bind,
13064 Argument>; //#1
13065
13066 When #1 is parsed, the
13067 BOUND_TEMPLATE_TEMPLATE_PARM representing the
13068 parameter `Template' in #0 matches the
13069 UNBOUND_CLASS_TEMPLATE representing the argument
13070 `Internal<Template>::template Bind'; We then want
13071 to assemble the type `Bind<Argument>' that can't
13072 be fully created right now, because
13073 `Internal<Template>' not being complete, the Bind
13074 template cannot be looked up in that context. So
13075 we need to "store" `Bind<Argument>' for later
13076 when the context of Bind becomes complete. Let's
13077 store that in a TYPENAME_TYPE. */
13078 return make_typename_type (TYPE_CONTEXT (arg),
13079 build_nt (TEMPLATE_ID_EXPR,
13080 TYPE_IDENTIFIER (arg),
13081 argvec),
13082 typename_type,
13083 complain);
13084
13085 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
13086 are resolving nested-types in the signature of a
13087 member function templates. Otherwise ARG is a
13088 TEMPLATE_DECL and is the real template to be
13089 instantiated. */
13090 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
13091 arg = TYPE_NAME (arg);
13092
13093 r = lookup_template_class (arg,
13094 argvec, in_decl,
13095 DECL_CONTEXT (arg),
13096 /*entering_scope=*/0,
13097 complain);
13098 return cp_build_qualified_type_real
13099 (r, cp_type_quals (t) | cp_type_quals (r), complain);
13100 }
13101 else
13102 /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX. */
13103 return convert_from_reference (unshare_expr (arg));
13104 }
13105
13106 if (level == 1)
13107 /* This can happen during the attempted tsubst'ing in
13108 unify. This means that we don't yet have any information
13109 about the template parameter in question. */
13110 return t;
13111
13112 /* If we get here, we must have been looking at a parm for a
13113 more deeply nested template. Make a new version of this
13114 template parameter, but with a lower level. */
13115 switch (code)
13116 {
13117 case TEMPLATE_TYPE_PARM:
13118 case TEMPLATE_TEMPLATE_PARM:
13119 case BOUND_TEMPLATE_TEMPLATE_PARM:
13120 if (cp_type_quals (t))
13121 {
13122 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
13123 r = cp_build_qualified_type_real
13124 (r, cp_type_quals (t),
13125 complain | (code == TEMPLATE_TYPE_PARM
13126 ? tf_ignore_bad_quals : 0));
13127 }
13128 else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
13129 && PLACEHOLDER_TYPE_CONSTRAINTS (t)
13130 && (r = (TEMPLATE_PARM_DESCENDANTS
13131 (TEMPLATE_TYPE_PARM_INDEX (t))))
13132 && (r = TREE_TYPE (r))
13133 && !PLACEHOLDER_TYPE_CONSTRAINTS (r))
13134 /* Break infinite recursion when substituting the constraints
13135 of a constrained placeholder. */;
13136 else
13137 {
13138 r = copy_type (t);
13139 TEMPLATE_TYPE_PARM_INDEX (r)
13140 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
13141 r, levels, args, complain);
13142 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
13143 TYPE_MAIN_VARIANT (r) = r;
13144 TYPE_POINTER_TO (r) = NULL_TREE;
13145 TYPE_REFERENCE_TO (r) = NULL_TREE;
13146
13147 /* Propagate constraints on placeholders. */
13148 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
13149 if (tree constr = PLACEHOLDER_TYPE_CONSTRAINTS (t))
13150 PLACEHOLDER_TYPE_CONSTRAINTS (r)
13151 = tsubst_constraint (constr, args, complain, in_decl);
13152
13153 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
13154 /* We have reduced the level of the template
13155 template parameter, but not the levels of its
13156 template parameters, so canonical_type_parameter
13157 will not be able to find the canonical template
13158 template parameter for this level. Thus, we
13159 require structural equality checking to compare
13160 TEMPLATE_TEMPLATE_PARMs. */
13161 SET_TYPE_STRUCTURAL_EQUALITY (r);
13162 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
13163 SET_TYPE_STRUCTURAL_EQUALITY (r);
13164 else
13165 TYPE_CANONICAL (r) = canonical_type_parameter (r);
13166
13167 if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
13168 {
13169 tree argvec = tsubst (TYPE_TI_ARGS (t), args,
13170 complain, in_decl);
13171 if (argvec == error_mark_node)
13172 return error_mark_node;
13173
13174 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
13175 = build_template_info (TYPE_TI_TEMPLATE (t), argvec);
13176 }
13177 }
13178 break;
13179
13180 case TEMPLATE_PARM_INDEX:
13181 r = reduce_template_parm_level (t, type, levels, args, complain);
13182 break;
13183
13184 default:
13185 gcc_unreachable ();
13186 }
13187
13188 return r;
13189 }
13190
13191 case TREE_LIST:
13192 {
13193 tree purpose, value, chain;
13194
13195 if (t == void_list_node)
13196 return t;
13197
13198 purpose = TREE_PURPOSE (t);
13199 if (purpose)
13200 {
13201 purpose = tsubst (purpose, args, complain, in_decl);
13202 if (purpose == error_mark_node)
13203 return error_mark_node;
13204 }
13205 value = TREE_VALUE (t);
13206 if (value)
13207 {
13208 value = tsubst (value, args, complain, in_decl);
13209 if (value == error_mark_node)
13210 return error_mark_node;
13211 }
13212 chain = TREE_CHAIN (t);
13213 if (chain && chain != void_type_node)
13214 {
13215 chain = tsubst (chain, args, complain, in_decl);
13216 if (chain == error_mark_node)
13217 return error_mark_node;
13218 }
13219 if (purpose == TREE_PURPOSE (t)
13220 && value == TREE_VALUE (t)
13221 && chain == TREE_CHAIN (t))
13222 return t;
13223 return hash_tree_cons (purpose, value, chain);
13224 }
13225
13226 case TREE_BINFO:
13227 /* We should never be tsubsting a binfo. */
13228 gcc_unreachable ();
13229
13230 case TREE_VEC:
13231 /* A vector of template arguments. */
13232 gcc_assert (!type);
13233 return tsubst_template_args (t, args, complain, in_decl);
13234
13235 case POINTER_TYPE:
13236 case REFERENCE_TYPE:
13237 {
13238 if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
13239 return t;
13240
13241 /* [temp.deduct]
13242
13243 Type deduction may fail for any of the following
13244 reasons:
13245
13246 -- Attempting to create a pointer to reference type.
13247 -- Attempting to create a reference to a reference type or
13248 a reference to void.
13249
13250 Core issue 106 says that creating a reference to a reference
13251 during instantiation is no longer a cause for failure. We
13252 only enforce this check in strict C++98 mode. */
13253 if ((TREE_CODE (type) == REFERENCE_TYPE
13254 && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
13255 || (code == REFERENCE_TYPE && VOID_TYPE_P (type)))
13256 {
13257 static location_t last_loc;
13258
13259 /* We keep track of the last time we issued this error
13260 message to avoid spewing a ton of messages during a
13261 single bad template instantiation. */
13262 if (complain & tf_error
13263 && last_loc != input_location)
13264 {
13265 if (VOID_TYPE_P (type))
13266 error ("forming reference to void");
13267 else if (code == POINTER_TYPE)
13268 error ("forming pointer to reference type %qT", type);
13269 else
13270 error ("forming reference to reference type %qT", type);
13271 last_loc = input_location;
13272 }
13273
13274 return error_mark_node;
13275 }
13276 else if (TREE_CODE (type) == FUNCTION_TYPE
13277 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
13278 || type_memfn_rqual (type) != REF_QUAL_NONE))
13279 {
13280 if (complain & tf_error)
13281 {
13282 if (code == POINTER_TYPE)
13283 error ("forming pointer to qualified function type %qT",
13284 type);
13285 else
13286 error ("forming reference to qualified function type %qT",
13287 type);
13288 }
13289 return error_mark_node;
13290 }
13291 else if (code == POINTER_TYPE)
13292 {
13293 r = build_pointer_type (type);
13294 if (TREE_CODE (type) == METHOD_TYPE)
13295 r = build_ptrmemfunc_type (r);
13296 }
13297 else if (TREE_CODE (type) == REFERENCE_TYPE)
13298 /* In C++0x, during template argument substitution, when there is an
13299 attempt to create a reference to a reference type, reference
13300 collapsing is applied as described in [14.3.1/4 temp.arg.type]:
13301
13302 "If a template-argument for a template-parameter T names a type
13303 that is a reference to a type A, an attempt to create the type
13304 'lvalue reference to cv T' creates the type 'lvalue reference to
13305 A,' while an attempt to create the type type rvalue reference to
13306 cv T' creates the type T"
13307 */
13308 r = cp_build_reference_type
13309 (TREE_TYPE (type),
13310 TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
13311 else
13312 r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
13313 r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
13314
13315 if (r != error_mark_node)
13316 /* Will this ever be needed for TYPE_..._TO values? */
13317 layout_type (r);
13318
13319 return r;
13320 }
13321 case OFFSET_TYPE:
13322 {
13323 r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
13324 if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
13325 {
13326 /* [temp.deduct]
13327
13328 Type deduction may fail for any of the following
13329 reasons:
13330
13331 -- Attempting to create "pointer to member of T" when T
13332 is not a class type. */
13333 if (complain & tf_error)
13334 error ("creating pointer to member of non-class type %qT", r);
13335 return error_mark_node;
13336 }
13337 if (TREE_CODE (type) == REFERENCE_TYPE)
13338 {
13339 if (complain & tf_error)
13340 error ("creating pointer to member reference type %qT", type);
13341 return error_mark_node;
13342 }
13343 if (VOID_TYPE_P (type))
13344 {
13345 if (complain & tf_error)
13346 error ("creating pointer to member of type void");
13347 return error_mark_node;
13348 }
13349 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
13350 if (TREE_CODE (type) == FUNCTION_TYPE)
13351 {
13352 /* The type of the implicit object parameter gets its
13353 cv-qualifiers from the FUNCTION_TYPE. */
13354 tree memptr;
13355 tree method_type
13356 = build_memfn_type (type, r, type_memfn_quals (type),
13357 type_memfn_rqual (type));
13358 memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
13359 return cp_build_qualified_type_real (memptr, cp_type_quals (t),
13360 complain);
13361 }
13362 else
13363 return cp_build_qualified_type_real (build_ptrmem_type (r, type),
13364 cp_type_quals (t),
13365 complain);
13366 }
13367 case FUNCTION_TYPE:
13368 case METHOD_TYPE:
13369 {
13370 tree fntype;
13371 tree specs;
13372 fntype = tsubst_function_type (t, args, complain, in_decl);
13373 if (fntype == error_mark_node)
13374 return error_mark_node;
13375
13376 /* Substitute the exception specification. */
13377 specs = tsubst_exception_specification (t, args, complain,
13378 in_decl, /*defer_ok*/true);
13379 if (specs == error_mark_node)
13380 return error_mark_node;
13381 if (specs)
13382 fntype = build_exception_variant (fntype, specs);
13383 return fntype;
13384 }
13385 case ARRAY_TYPE:
13386 {
13387 tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
13388 if (domain == error_mark_node)
13389 return error_mark_node;
13390
13391 /* As an optimization, we avoid regenerating the array type if
13392 it will obviously be the same as T. */
13393 if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
13394 return t;
13395
13396 /* These checks should match the ones in create_array_type_for_decl.
13397
13398 [temp.deduct]
13399
13400 The deduction may fail for any of the following reasons:
13401
13402 -- Attempting to create an array with an element type that
13403 is void, a function type, or a reference type, or [DR337]
13404 an abstract class type. */
13405 if (VOID_TYPE_P (type)
13406 || TREE_CODE (type) == FUNCTION_TYPE
13407 || (TREE_CODE (type) == ARRAY_TYPE
13408 && TYPE_DOMAIN (type) == NULL_TREE)
13409 || TREE_CODE (type) == REFERENCE_TYPE)
13410 {
13411 if (complain & tf_error)
13412 error ("creating array of %qT", type);
13413 return error_mark_node;
13414 }
13415
13416 if (abstract_virtuals_error_sfinae (ACU_ARRAY, type, complain))
13417 return error_mark_node;
13418
13419 r = build_cplus_array_type (type, domain);
13420
13421 if (TYPE_USER_ALIGN (t))
13422 {
13423 SET_TYPE_ALIGN (r, TYPE_ALIGN (t));
13424 TYPE_USER_ALIGN (r) = 1;
13425 }
13426
13427 return r;
13428 }
13429
13430 case TYPENAME_TYPE:
13431 {
13432 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
13433 in_decl, /*entering_scope=*/1);
13434 tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
13435 complain, in_decl);
13436
13437 if (ctx == error_mark_node || f == error_mark_node)
13438 return error_mark_node;
13439
13440 if (!MAYBE_CLASS_TYPE_P (ctx))
13441 {
13442 if (complain & tf_error)
13443 error ("%qT is not a class, struct, or union type", ctx);
13444 return error_mark_node;
13445 }
13446 else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
13447 {
13448 /* Normally, make_typename_type does not require that the CTX
13449 have complete type in order to allow things like:
13450
13451 template <class T> struct S { typename S<T>::X Y; };
13452
13453 But, such constructs have already been resolved by this
13454 point, so here CTX really should have complete type, unless
13455 it's a partial instantiation. */
13456 ctx = complete_type (ctx);
13457 if (!COMPLETE_TYPE_P (ctx))
13458 {
13459 if (complain & tf_error)
13460 cxx_incomplete_type_error (NULL_TREE, ctx);
13461 return error_mark_node;
13462 }
13463 }
13464
13465 f = make_typename_type (ctx, f, typename_type,
13466 complain | tf_keep_type_decl);
13467 if (f == error_mark_node)
13468 return f;
13469 if (TREE_CODE (f) == TYPE_DECL)
13470 {
13471 complain |= tf_ignore_bad_quals;
13472 f = TREE_TYPE (f);
13473 }
13474
13475 if (TREE_CODE (f) != TYPENAME_TYPE)
13476 {
13477 if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
13478 {
13479 if (complain & tf_error)
13480 error ("%qT resolves to %qT, which is not an enumeration type",
13481 t, f);
13482 else
13483 return error_mark_node;
13484 }
13485 else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
13486 {
13487 if (complain & tf_error)
13488 error ("%qT resolves to %qT, which is is not a class type",
13489 t, f);
13490 else
13491 return error_mark_node;
13492 }
13493 }
13494
13495 return cp_build_qualified_type_real
13496 (f, cp_type_quals (f) | cp_type_quals (t), complain);
13497 }
13498
13499 case UNBOUND_CLASS_TEMPLATE:
13500 {
13501 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
13502 in_decl, /*entering_scope=*/1);
13503 tree name = TYPE_IDENTIFIER (t);
13504 tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
13505
13506 if (ctx == error_mark_node || name == error_mark_node)
13507 return error_mark_node;
13508
13509 if (parm_list)
13510 parm_list = tsubst_template_parms (parm_list, args, complain);
13511 return make_unbound_class_template (ctx, name, parm_list, complain);
13512 }
13513
13514 case TYPEOF_TYPE:
13515 {
13516 tree type;
13517
13518 ++cp_unevaluated_operand;
13519 ++c_inhibit_evaluation_warnings;
13520
13521 type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
13522 complain, in_decl,
13523 /*integral_constant_expression_p=*/false);
13524
13525 --cp_unevaluated_operand;
13526 --c_inhibit_evaluation_warnings;
13527
13528 type = finish_typeof (type);
13529 return cp_build_qualified_type_real (type,
13530 cp_type_quals (t)
13531 | cp_type_quals (type),
13532 complain);
13533 }
13534
13535 case DECLTYPE_TYPE:
13536 {
13537 tree type;
13538
13539 ++cp_unevaluated_operand;
13540 ++c_inhibit_evaluation_warnings;
13541
13542 type = tsubst_copy_and_build (DECLTYPE_TYPE_EXPR (t), args,
13543 complain|tf_decltype, in_decl,
13544 /*function_p*/false,
13545 /*integral_constant_expression*/false);
13546
13547 --cp_unevaluated_operand;
13548 --c_inhibit_evaluation_warnings;
13549
13550 if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
13551 type = lambda_capture_field_type (type,
13552 DECLTYPE_FOR_INIT_CAPTURE (t));
13553 else if (DECLTYPE_FOR_LAMBDA_PROXY (t))
13554 type = lambda_proxy_type (type);
13555 else
13556 {
13557 bool id = DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t);
13558 if (id && TREE_CODE (DECLTYPE_TYPE_EXPR (t)) == BIT_NOT_EXPR
13559 && EXPR_P (type))
13560 /* In a template ~id could be either a complement expression
13561 or an unqualified-id naming a destructor; if instantiating
13562 it produces an expression, it's not an id-expression or
13563 member access. */
13564 id = false;
13565 type = finish_decltype_type (type, id, complain);
13566 }
13567 return cp_build_qualified_type_real (type,
13568 cp_type_quals (t)
13569 | cp_type_quals (type),
13570 complain | tf_ignore_bad_quals);
13571 }
13572
13573 case UNDERLYING_TYPE:
13574 {
13575 tree type = tsubst (UNDERLYING_TYPE_TYPE (t), args,
13576 complain, in_decl);
13577 return finish_underlying_type (type);
13578 }
13579
13580 case TYPE_ARGUMENT_PACK:
13581 case NONTYPE_ARGUMENT_PACK:
13582 {
13583 tree r = TYPE_P (t) ? cxx_make_type (code) : make_node (code);
13584 tree packed_out =
13585 tsubst_template_args (ARGUMENT_PACK_ARGS (t),
13586 args,
13587 complain,
13588 in_decl);
13589 SET_ARGUMENT_PACK_ARGS (r, packed_out);
13590
13591 /* For template nontype argument packs, also substitute into
13592 the type. */
13593 if (code == NONTYPE_ARGUMENT_PACK)
13594 TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
13595
13596 return r;
13597 }
13598 break;
13599
13600 case VOID_CST:
13601 case INTEGER_CST:
13602 case REAL_CST:
13603 case STRING_CST:
13604 case PLUS_EXPR:
13605 case MINUS_EXPR:
13606 case NEGATE_EXPR:
13607 case NOP_EXPR:
13608 case INDIRECT_REF:
13609 case ADDR_EXPR:
13610 case CALL_EXPR:
13611 case ARRAY_REF:
13612 case SCOPE_REF:
13613 /* We should use one of the expression tsubsts for these codes. */
13614 gcc_unreachable ();
13615
13616 default:
13617 sorry ("use of %qs in template", get_tree_code_name (code));
13618 return error_mark_node;
13619 }
13620 }
13621
13622 /* Like tsubst_expr for a BASELINK. OBJECT_TYPE, if non-NULL, is the
13623 type of the expression on the left-hand side of the "." or "->"
13624 operator. */
13625
13626 static tree
13627 tsubst_baselink (tree baselink, tree object_type,
13628 tree args, tsubst_flags_t complain, tree in_decl)
13629 {
13630 tree name;
13631 tree qualifying_scope;
13632 tree fns;
13633 tree optype;
13634 tree template_args = 0;
13635 bool template_id_p = false;
13636 bool qualified = BASELINK_QUALIFIED_P (baselink);
13637
13638 /* A baselink indicates a function from a base class. Both the
13639 BASELINK_ACCESS_BINFO and the base class referenced may
13640 indicate bases of the template class, rather than the
13641 instantiated class. In addition, lookups that were not
13642 ambiguous before may be ambiguous now. Therefore, we perform
13643 the lookup again. */
13644 qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
13645 qualifying_scope = tsubst (qualifying_scope, args,
13646 complain, in_decl);
13647 fns = BASELINK_FUNCTIONS (baselink);
13648 optype = tsubst (BASELINK_OPTYPE (baselink), args, complain, in_decl);
13649 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
13650 {
13651 template_id_p = true;
13652 template_args = TREE_OPERAND (fns, 1);
13653 fns = TREE_OPERAND (fns, 0);
13654 if (template_args)
13655 template_args = tsubst_template_args (template_args, args,
13656 complain, in_decl);
13657 }
13658 name = DECL_NAME (get_first_fn (fns));
13659 if (IDENTIFIER_TYPENAME_P (name))
13660 name = mangle_conv_op_name_for_type (optype);
13661 baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
13662 if (!baselink)
13663 {
13664 if (constructor_name_p (name, qualifying_scope))
13665 {
13666 if (complain & tf_error)
13667 error ("cannot call constructor %<%T::%D%> directly",
13668 qualifying_scope, name);
13669 }
13670 return error_mark_node;
13671 }
13672
13673 /* If lookup found a single function, mark it as used at this
13674 point. (If it lookup found multiple functions the one selected
13675 later by overload resolution will be marked as used at that
13676 point.) */
13677 if (BASELINK_P (baselink))
13678 fns = BASELINK_FUNCTIONS (baselink);
13679 if (!template_id_p && !really_overloaded_fn (fns)
13680 && !mark_used (OVL_CURRENT (fns), complain) && !(complain & tf_error))
13681 return error_mark_node;
13682
13683 /* Add back the template arguments, if present. */
13684 if (BASELINK_P (baselink) && template_id_p)
13685 BASELINK_FUNCTIONS (baselink)
13686 = build2 (TEMPLATE_ID_EXPR,
13687 unknown_type_node,
13688 BASELINK_FUNCTIONS (baselink),
13689 template_args);
13690 /* Update the conversion operator type. */
13691 BASELINK_OPTYPE (baselink) = optype;
13692
13693 if (!object_type)
13694 object_type = current_class_type;
13695
13696 if (qualified)
13697 baselink = adjust_result_of_qualified_name_lookup (baselink,
13698 qualifying_scope,
13699 object_type);
13700 return baselink;
13701 }
13702
13703 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID. DONE is
13704 true if the qualified-id will be a postfix-expression in-and-of
13705 itself; false if more of the postfix-expression follows the
13706 QUALIFIED_ID. ADDRESS_P is true if the qualified-id is the operand
13707 of "&". */
13708
13709 static tree
13710 tsubst_qualified_id (tree qualified_id, tree args,
13711 tsubst_flags_t complain, tree in_decl,
13712 bool done, bool address_p)
13713 {
13714 tree expr;
13715 tree scope;
13716 tree name;
13717 bool is_template;
13718 tree template_args;
13719 location_t loc = UNKNOWN_LOCATION;
13720
13721 gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
13722
13723 /* Figure out what name to look up. */
13724 name = TREE_OPERAND (qualified_id, 1);
13725 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
13726 {
13727 is_template = true;
13728 loc = EXPR_LOCATION (name);
13729 template_args = TREE_OPERAND (name, 1);
13730 if (template_args)
13731 template_args = tsubst_template_args (template_args, args,
13732 complain, in_decl);
13733 name = TREE_OPERAND (name, 0);
13734 }
13735 else
13736 {
13737 is_template = false;
13738 template_args = NULL_TREE;
13739 }
13740
13741 /* Substitute into the qualifying scope. When there are no ARGS, we
13742 are just trying to simplify a non-dependent expression. In that
13743 case the qualifying scope may be dependent, and, in any case,
13744 substituting will not help. */
13745 scope = TREE_OPERAND (qualified_id, 0);
13746 if (args)
13747 {
13748 scope = tsubst (scope, args, complain, in_decl);
13749 expr = tsubst_copy (name, args, complain, in_decl);
13750 }
13751 else
13752 expr = name;
13753
13754 if (dependent_scope_p (scope))
13755 {
13756 if (is_template)
13757 expr = build_min_nt_loc (loc, TEMPLATE_ID_EXPR, expr, template_args);
13758 tree r = build_qualified_name (NULL_TREE, scope, expr,
13759 QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
13760 REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (qualified_id);
13761 return r;
13762 }
13763
13764 if (!BASELINK_P (name) && !DECL_P (expr))
13765 {
13766 if (TREE_CODE (expr) == BIT_NOT_EXPR)
13767 {
13768 /* A BIT_NOT_EXPR is used to represent a destructor. */
13769 if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
13770 {
13771 error ("qualifying type %qT does not match destructor name ~%qT",
13772 scope, TREE_OPERAND (expr, 0));
13773 expr = error_mark_node;
13774 }
13775 else
13776 expr = lookup_qualified_name (scope, complete_dtor_identifier,
13777 /*is_type_p=*/0, false);
13778 }
13779 else
13780 expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
13781 if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
13782 ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
13783 {
13784 if (complain & tf_error)
13785 {
13786 error ("dependent-name %qE is parsed as a non-type, but "
13787 "instantiation yields a type", qualified_id);
13788 inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
13789 }
13790 return error_mark_node;
13791 }
13792 }
13793
13794 if (DECL_P (expr))
13795 {
13796 check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
13797 scope);
13798 /* Remember that there was a reference to this entity. */
13799 if (!mark_used (expr, complain) && !(complain & tf_error))
13800 return error_mark_node;
13801 }
13802
13803 if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
13804 {
13805 if (complain & tf_error)
13806 qualified_name_lookup_error (scope,
13807 TREE_OPERAND (qualified_id, 1),
13808 expr, input_location);
13809 return error_mark_node;
13810 }
13811
13812 if (is_template)
13813 {
13814 if (variable_template_p (expr))
13815 expr = lookup_and_finish_template_variable (expr, template_args,
13816 complain);
13817 else
13818 expr = lookup_template_function (expr, template_args);
13819 }
13820
13821 if (expr == error_mark_node && complain & tf_error)
13822 qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
13823 expr, input_location);
13824 else if (TYPE_P (scope))
13825 {
13826 expr = (adjust_result_of_qualified_name_lookup
13827 (expr, scope, current_nonlambda_class_type ()));
13828 expr = (finish_qualified_id_expr
13829 (scope, expr, done, address_p && PTRMEM_OK_P (qualified_id),
13830 QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
13831 /*template_arg_p=*/false, complain));
13832 }
13833
13834 /* Expressions do not generally have reference type. */
13835 if (TREE_CODE (expr) != SCOPE_REF
13836 /* However, if we're about to form a pointer-to-member, we just
13837 want the referenced member referenced. */
13838 && TREE_CODE (expr) != OFFSET_REF)
13839 expr = convert_from_reference (expr);
13840
13841 if (REF_PARENTHESIZED_P (qualified_id))
13842 expr = force_paren_expr (expr);
13843
13844 return expr;
13845 }
13846
13847 /* tsubst the initializer for a VAR_DECL. INIT is the unsubstituted
13848 initializer, DECL is the substituted VAR_DECL. Other arguments are as
13849 for tsubst. */
13850
13851 static tree
13852 tsubst_init (tree init, tree decl, tree args,
13853 tsubst_flags_t complain, tree in_decl)
13854 {
13855 if (!init)
13856 return NULL_TREE;
13857
13858 init = tsubst_expr (init, args, complain, in_decl, false);
13859
13860 if (!init)
13861 {
13862 /* If we had an initializer but it
13863 instantiated to nothing,
13864 value-initialize the object. This will
13865 only occur when the initializer was a
13866 pack expansion where the parameter packs
13867 used in that expansion were of length
13868 zero. */
13869 init = build_value_init (TREE_TYPE (decl),
13870 complain);
13871 if (TREE_CODE (init) == AGGR_INIT_EXPR)
13872 init = get_target_expr_sfinae (init, complain);
13873 }
13874
13875 return init;
13876 }
13877
13878 /* Like tsubst, but deals with expressions. This function just replaces
13879 template parms; to finish processing the resultant expression, use
13880 tsubst_copy_and_build or tsubst_expr. */
13881
13882 static tree
13883 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
13884 {
13885 enum tree_code code;
13886 tree r;
13887
13888 if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
13889 return t;
13890
13891 code = TREE_CODE (t);
13892
13893 switch (code)
13894 {
13895 case PARM_DECL:
13896 r = retrieve_local_specialization (t);
13897
13898 if (r == NULL_TREE)
13899 {
13900 /* We get here for a use of 'this' in an NSDMI as part of a
13901 constructor call or as part of an aggregate initialization. */
13902 if (DECL_NAME (t) == this_identifier
13903 && ((current_function_decl
13904 && DECL_CONSTRUCTOR_P (current_function_decl))
13905 || (current_class_ref
13906 && TREE_CODE (current_class_ref) == PLACEHOLDER_EXPR)))
13907 return current_class_ptr;
13908
13909 /* This can happen for a parameter name used later in a function
13910 declaration (such as in a late-specified return type). Just
13911 make a dummy decl, since it's only used for its type. */
13912 gcc_assert (cp_unevaluated_operand != 0);
13913 r = tsubst_decl (t, args, complain);
13914 /* Give it the template pattern as its context; its true context
13915 hasn't been instantiated yet and this is good enough for
13916 mangling. */
13917 DECL_CONTEXT (r) = DECL_CONTEXT (t);
13918 }
13919
13920 if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
13921 r = ARGUMENT_PACK_SELECT_ARG (r);
13922 if (!mark_used (r, complain) && !(complain & tf_error))
13923 return error_mark_node;
13924 return r;
13925
13926 case CONST_DECL:
13927 {
13928 tree enum_type;
13929 tree v;
13930
13931 if (DECL_TEMPLATE_PARM_P (t))
13932 return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
13933 /* There is no need to substitute into namespace-scope
13934 enumerators. */
13935 if (DECL_NAMESPACE_SCOPE_P (t))
13936 return t;
13937 /* If ARGS is NULL, then T is known to be non-dependent. */
13938 if (args == NULL_TREE)
13939 return scalar_constant_value (t);
13940
13941 /* Unfortunately, we cannot just call lookup_name here.
13942 Consider:
13943
13944 template <int I> int f() {
13945 enum E { a = I };
13946 struct S { void g() { E e = a; } };
13947 };
13948
13949 When we instantiate f<7>::S::g(), say, lookup_name is not
13950 clever enough to find f<7>::a. */
13951 enum_type
13952 = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
13953 /*entering_scope=*/0);
13954
13955 for (v = TYPE_VALUES (enum_type);
13956 v != NULL_TREE;
13957 v = TREE_CHAIN (v))
13958 if (TREE_PURPOSE (v) == DECL_NAME (t))
13959 return TREE_VALUE (v);
13960
13961 /* We didn't find the name. That should never happen; if
13962 name-lookup found it during preliminary parsing, we
13963 should find it again here during instantiation. */
13964 gcc_unreachable ();
13965 }
13966 return t;
13967
13968 case FIELD_DECL:
13969 if (PACK_EXPANSION_P (TREE_TYPE (t)))
13970 {
13971 /* Check for a local specialization set up by
13972 tsubst_pack_expansion. */
13973 if (tree r = retrieve_local_specialization (t))
13974 {
13975 if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
13976 r = ARGUMENT_PACK_SELECT_ARG (r);
13977 return r;
13978 }
13979
13980 /* When retrieving a capture pack from a generic lambda, remove the
13981 lambda call op's own template argument list from ARGS. Only the
13982 template arguments active for the closure type should be used to
13983 retrieve the pack specialization. */
13984 if (LAMBDA_FUNCTION_P (current_function_decl)
13985 && (template_class_depth (DECL_CONTEXT (t))
13986 != TMPL_ARGS_DEPTH (args)))
13987 args = strip_innermost_template_args (args, 1);
13988
13989 /* Otherwise return the full NONTYPE_ARGUMENT_PACK that
13990 tsubst_decl put in the hash table. */
13991 return retrieve_specialization (t, args, 0);
13992 }
13993
13994 if (DECL_CONTEXT (t))
13995 {
13996 tree ctx;
13997
13998 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
13999 /*entering_scope=*/1);
14000 if (ctx != DECL_CONTEXT (t))
14001 {
14002 tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
14003 if (!r)
14004 {
14005 if (complain & tf_error)
14006 error ("using invalid field %qD", t);
14007 return error_mark_node;
14008 }
14009 return r;
14010 }
14011 }
14012
14013 return t;
14014
14015 case VAR_DECL:
14016 case FUNCTION_DECL:
14017 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
14018 r = tsubst (t, args, complain, in_decl);
14019 else if (local_variable_p (t)
14020 && uses_template_parms (DECL_CONTEXT (t)))
14021 {
14022 r = retrieve_local_specialization (t);
14023 if (r == NULL_TREE)
14024 {
14025 /* First try name lookup to find the instantiation. */
14026 r = lookup_name (DECL_NAME (t));
14027 if (r)
14028 {
14029 /* Make sure that the one we found is the one we want. */
14030 tree ctx = DECL_CONTEXT (t);
14031 if (DECL_LANG_SPECIFIC (ctx) && DECL_TEMPLATE_INFO (ctx))
14032 ctx = tsubst (ctx, args, complain, in_decl);
14033 if (ctx != DECL_CONTEXT (r))
14034 r = NULL_TREE;
14035 }
14036
14037 if (r)
14038 /* OK */;
14039 else
14040 {
14041 /* This can happen for a variable used in a
14042 late-specified return type of a local lambda, or for a
14043 local static or constant. Building a new VAR_DECL
14044 should be OK in all those cases. */
14045 r = tsubst_decl (t, args, complain);
14046 if (decl_maybe_constant_var_p (r))
14047 {
14048 /* We can't call cp_finish_decl, so handle the
14049 initializer by hand. */
14050 tree init = tsubst_init (DECL_INITIAL (t), r, args,
14051 complain, in_decl);
14052 if (!processing_template_decl)
14053 init = maybe_constant_init (init);
14054 if (processing_template_decl
14055 ? potential_constant_expression (init)
14056 : reduced_constant_expression_p (init))
14057 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
14058 = TREE_CONSTANT (r) = true;
14059 DECL_INITIAL (r) = init;
14060 }
14061 gcc_assert (cp_unevaluated_operand || TREE_STATIC (r)
14062 || decl_constant_var_p (r)
14063 || errorcount || sorrycount);
14064 if (!processing_template_decl
14065 && !TREE_STATIC (r))
14066 r = process_outer_var_ref (r, complain);
14067 }
14068 /* Remember this for subsequent uses. */
14069 if (local_specializations)
14070 register_local_specialization (r, t);
14071 }
14072 }
14073 else
14074 r = t;
14075 if (!mark_used (r, complain) && !(complain & tf_error))
14076 return error_mark_node;
14077 return r;
14078
14079 case NAMESPACE_DECL:
14080 return t;
14081
14082 case OVERLOAD:
14083 /* An OVERLOAD will always be a non-dependent overload set; an
14084 overload set from function scope will just be represented with an
14085 IDENTIFIER_NODE, and from class scope with a BASELINK. */
14086 gcc_assert (!uses_template_parms (t));
14087 return t;
14088
14089 case BASELINK:
14090 return tsubst_baselink (t, current_nonlambda_class_type (),
14091 args, complain, in_decl);
14092
14093 case TEMPLATE_DECL:
14094 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
14095 return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
14096 args, complain, in_decl);
14097 else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
14098 return tsubst (t, args, complain, in_decl);
14099 else if (DECL_CLASS_SCOPE_P (t)
14100 && uses_template_parms (DECL_CONTEXT (t)))
14101 {
14102 /* Template template argument like the following example need
14103 special treatment:
14104
14105 template <template <class> class TT> struct C {};
14106 template <class T> struct D {
14107 template <class U> struct E {};
14108 C<E> c; // #1
14109 };
14110 D<int> d; // #2
14111
14112 We are processing the template argument `E' in #1 for
14113 the template instantiation #2. Originally, `E' is a
14114 TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT. Now we
14115 have to substitute this with one having context `D<int>'. */
14116
14117 tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
14118 return lookup_field (context, DECL_NAME(t), 0, false);
14119 }
14120 else
14121 /* Ordinary template template argument. */
14122 return t;
14123
14124 case CAST_EXPR:
14125 case REINTERPRET_CAST_EXPR:
14126 case CONST_CAST_EXPR:
14127 case STATIC_CAST_EXPR:
14128 case DYNAMIC_CAST_EXPR:
14129 case IMPLICIT_CONV_EXPR:
14130 case CONVERT_EXPR:
14131 case NOP_EXPR:
14132 {
14133 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14134 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
14135 return build1 (code, type, op0);
14136 }
14137
14138 case SIZEOF_EXPR:
14139 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0))
14140 || ARGUMENT_PACK_P (TREE_OPERAND (t, 0)))
14141 {
14142 tree expanded, op = TREE_OPERAND (t, 0);
14143 int len = 0;
14144
14145 if (SIZEOF_EXPR_TYPE_P (t))
14146 op = TREE_TYPE (op);
14147
14148 ++cp_unevaluated_operand;
14149 ++c_inhibit_evaluation_warnings;
14150 /* We only want to compute the number of arguments. */
14151 if (PACK_EXPANSION_P (op))
14152 expanded = tsubst_pack_expansion (op, args, complain, in_decl);
14153 else
14154 expanded = tsubst_template_args (ARGUMENT_PACK_ARGS (op),
14155 args, complain, in_decl);
14156 --cp_unevaluated_operand;
14157 --c_inhibit_evaluation_warnings;
14158
14159 if (TREE_CODE (expanded) == TREE_VEC)
14160 {
14161 len = TREE_VEC_LENGTH (expanded);
14162 /* Set TREE_USED for the benefit of -Wunused. */
14163 for (int i = 0; i < len; i++)
14164 TREE_USED (TREE_VEC_ELT (expanded, i)) = true;
14165 }
14166
14167 if (expanded == error_mark_node)
14168 return error_mark_node;
14169 else if (PACK_EXPANSION_P (expanded)
14170 || (TREE_CODE (expanded) == TREE_VEC
14171 && pack_expansion_args_count (expanded)))
14172
14173 {
14174 if (PACK_EXPANSION_P (expanded))
14175 /* OK. */;
14176 else if (TREE_VEC_LENGTH (expanded) == 1)
14177 expanded = TREE_VEC_ELT (expanded, 0);
14178 else
14179 expanded = make_argument_pack (expanded);
14180
14181 if (TYPE_P (expanded))
14182 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR,
14183 complain & tf_error);
14184 else
14185 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
14186 complain & tf_error);
14187 }
14188 else
14189 return build_int_cst (size_type_node, len);
14190 }
14191 if (SIZEOF_EXPR_TYPE_P (t))
14192 {
14193 r = tsubst (TREE_TYPE (TREE_OPERAND (t, 0)),
14194 args, complain, in_decl);
14195 r = build1 (NOP_EXPR, r, error_mark_node);
14196 r = build1 (SIZEOF_EXPR,
14197 tsubst (TREE_TYPE (t), args, complain, in_decl), r);
14198 SIZEOF_EXPR_TYPE_P (r) = 1;
14199 return r;
14200 }
14201 /* Fall through */
14202
14203 case INDIRECT_REF:
14204 case NEGATE_EXPR:
14205 case TRUTH_NOT_EXPR:
14206 case BIT_NOT_EXPR:
14207 case ADDR_EXPR:
14208 case UNARY_PLUS_EXPR: /* Unary + */
14209 case ALIGNOF_EXPR:
14210 case AT_ENCODE_EXPR:
14211 case ARROW_EXPR:
14212 case THROW_EXPR:
14213 case TYPEID_EXPR:
14214 case REALPART_EXPR:
14215 case IMAGPART_EXPR:
14216 case PAREN_EXPR:
14217 {
14218 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14219 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
14220 return build1 (code, type, op0);
14221 }
14222
14223 case COMPONENT_REF:
14224 {
14225 tree object;
14226 tree name;
14227
14228 object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
14229 name = TREE_OPERAND (t, 1);
14230 if (TREE_CODE (name) == BIT_NOT_EXPR)
14231 {
14232 name = tsubst_copy (TREE_OPERAND (name, 0), args,
14233 complain, in_decl);
14234 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
14235 }
14236 else if (TREE_CODE (name) == SCOPE_REF
14237 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
14238 {
14239 tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
14240 complain, in_decl);
14241 name = TREE_OPERAND (name, 1);
14242 name = tsubst_copy (TREE_OPERAND (name, 0), args,
14243 complain, in_decl);
14244 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
14245 name = build_qualified_name (/*type=*/NULL_TREE,
14246 base, name,
14247 /*template_p=*/false);
14248 }
14249 else if (BASELINK_P (name))
14250 name = tsubst_baselink (name,
14251 non_reference (TREE_TYPE (object)),
14252 args, complain,
14253 in_decl);
14254 else
14255 name = tsubst_copy (name, args, complain, in_decl);
14256 return build_nt (COMPONENT_REF, object, name, NULL_TREE);
14257 }
14258
14259 case PLUS_EXPR:
14260 case MINUS_EXPR:
14261 case MULT_EXPR:
14262 case TRUNC_DIV_EXPR:
14263 case CEIL_DIV_EXPR:
14264 case FLOOR_DIV_EXPR:
14265 case ROUND_DIV_EXPR:
14266 case EXACT_DIV_EXPR:
14267 case BIT_AND_EXPR:
14268 case BIT_IOR_EXPR:
14269 case BIT_XOR_EXPR:
14270 case TRUNC_MOD_EXPR:
14271 case FLOOR_MOD_EXPR:
14272 case TRUTH_ANDIF_EXPR:
14273 case TRUTH_ORIF_EXPR:
14274 case TRUTH_AND_EXPR:
14275 case TRUTH_OR_EXPR:
14276 case RSHIFT_EXPR:
14277 case LSHIFT_EXPR:
14278 case RROTATE_EXPR:
14279 case LROTATE_EXPR:
14280 case EQ_EXPR:
14281 case NE_EXPR:
14282 case MAX_EXPR:
14283 case MIN_EXPR:
14284 case LE_EXPR:
14285 case GE_EXPR:
14286 case LT_EXPR:
14287 case GT_EXPR:
14288 case COMPOUND_EXPR:
14289 case DOTSTAR_EXPR:
14290 case MEMBER_REF:
14291 case PREDECREMENT_EXPR:
14292 case PREINCREMENT_EXPR:
14293 case POSTDECREMENT_EXPR:
14294 case POSTINCREMENT_EXPR:
14295 {
14296 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
14297 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
14298 return build_nt (code, op0, op1);
14299 }
14300
14301 case SCOPE_REF:
14302 {
14303 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
14304 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
14305 return build_qualified_name (/*type=*/NULL_TREE, op0, op1,
14306 QUALIFIED_NAME_IS_TEMPLATE (t));
14307 }
14308
14309 case ARRAY_REF:
14310 {
14311 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
14312 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
14313 return build_nt (ARRAY_REF, op0, op1, NULL_TREE, NULL_TREE);
14314 }
14315
14316 case CALL_EXPR:
14317 {
14318 int n = VL_EXP_OPERAND_LENGTH (t);
14319 tree result = build_vl_exp (CALL_EXPR, n);
14320 int i;
14321 for (i = 0; i < n; i++)
14322 TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
14323 complain, in_decl);
14324 return result;
14325 }
14326
14327 case COND_EXPR:
14328 case MODOP_EXPR:
14329 case PSEUDO_DTOR_EXPR:
14330 case VEC_PERM_EXPR:
14331 {
14332 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
14333 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
14334 tree op2 = tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl);
14335 r = build_nt (code, op0, op1, op2);
14336 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
14337 return r;
14338 }
14339
14340 case NEW_EXPR:
14341 {
14342 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
14343 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
14344 tree op2 = tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl);
14345 r = build_nt (code, op0, op1, op2);
14346 NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
14347 return r;
14348 }
14349
14350 case DELETE_EXPR:
14351 {
14352 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
14353 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
14354 r = build_nt (code, op0, op1);
14355 DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
14356 DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
14357 return r;
14358 }
14359
14360 case TEMPLATE_ID_EXPR:
14361 {
14362 /* Substituted template arguments */
14363 tree fn = TREE_OPERAND (t, 0);
14364 tree targs = TREE_OPERAND (t, 1);
14365
14366 fn = tsubst_copy (fn, args, complain, in_decl);
14367 if (targs)
14368 targs = tsubst_template_args (targs, args, complain, in_decl);
14369
14370 return lookup_template_function (fn, targs);
14371 }
14372
14373 case TREE_LIST:
14374 {
14375 tree purpose, value, chain;
14376
14377 if (t == void_list_node)
14378 return t;
14379
14380 purpose = TREE_PURPOSE (t);
14381 if (purpose)
14382 purpose = tsubst_copy (purpose, args, complain, in_decl);
14383 value = TREE_VALUE (t);
14384 if (value)
14385 value = tsubst_copy (value, args, complain, in_decl);
14386 chain = TREE_CHAIN (t);
14387 if (chain && chain != void_type_node)
14388 chain = tsubst_copy (chain, args, complain, in_decl);
14389 if (purpose == TREE_PURPOSE (t)
14390 && value == TREE_VALUE (t)
14391 && chain == TREE_CHAIN (t))
14392 return t;
14393 return tree_cons (purpose, value, chain);
14394 }
14395
14396 case RECORD_TYPE:
14397 case UNION_TYPE:
14398 case ENUMERAL_TYPE:
14399 case INTEGER_TYPE:
14400 case TEMPLATE_TYPE_PARM:
14401 case TEMPLATE_TEMPLATE_PARM:
14402 case BOUND_TEMPLATE_TEMPLATE_PARM:
14403 case TEMPLATE_PARM_INDEX:
14404 case POINTER_TYPE:
14405 case REFERENCE_TYPE:
14406 case OFFSET_TYPE:
14407 case FUNCTION_TYPE:
14408 case METHOD_TYPE:
14409 case ARRAY_TYPE:
14410 case TYPENAME_TYPE:
14411 case UNBOUND_CLASS_TEMPLATE:
14412 case TYPEOF_TYPE:
14413 case DECLTYPE_TYPE:
14414 case TYPE_DECL:
14415 return tsubst (t, args, complain, in_decl);
14416
14417 case USING_DECL:
14418 t = DECL_NAME (t);
14419 /* Fall through. */
14420 case IDENTIFIER_NODE:
14421 if (IDENTIFIER_TYPENAME_P (t))
14422 {
14423 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14424 return mangle_conv_op_name_for_type (new_type);
14425 }
14426 else
14427 return t;
14428
14429 case CONSTRUCTOR:
14430 /* This is handled by tsubst_copy_and_build. */
14431 gcc_unreachable ();
14432
14433 case VA_ARG_EXPR:
14434 {
14435 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
14436 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14437 return build_x_va_arg (EXPR_LOCATION (t), op0, type);
14438 }
14439
14440 case CLEANUP_POINT_EXPR:
14441 /* We shouldn't have built any of these during initial template
14442 generation. Instead, they should be built during instantiation
14443 in response to the saved STMT_IS_FULL_EXPR_P setting. */
14444 gcc_unreachable ();
14445
14446 case OFFSET_REF:
14447 {
14448 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14449 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
14450 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
14451 r = build2 (code, type, op0, op1);
14452 PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
14453 if (!mark_used (TREE_OPERAND (r, 1), complain)
14454 && !(complain & tf_error))
14455 return error_mark_node;
14456 return r;
14457 }
14458
14459 case EXPR_PACK_EXPANSION:
14460 error ("invalid use of pack expansion expression");
14461 return error_mark_node;
14462
14463 case NONTYPE_ARGUMENT_PACK:
14464 error ("use %<...%> to expand argument pack");
14465 return error_mark_node;
14466
14467 case VOID_CST:
14468 gcc_checking_assert (t == void_node && VOID_TYPE_P (TREE_TYPE (t)));
14469 return t;
14470
14471 case INTEGER_CST:
14472 case REAL_CST:
14473 case STRING_CST:
14474 case COMPLEX_CST:
14475 {
14476 /* Instantiate any typedefs in the type. */
14477 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14478 r = fold_convert (type, t);
14479 gcc_assert (TREE_CODE (r) == code);
14480 return r;
14481 }
14482
14483 case PTRMEM_CST:
14484 /* These can sometimes show up in a partial instantiation, but never
14485 involve template parms. */
14486 gcc_assert (!uses_template_parms (t));
14487 return t;
14488
14489 case UNARY_LEFT_FOLD_EXPR:
14490 return tsubst_unary_left_fold (t, args, complain, in_decl);
14491 case UNARY_RIGHT_FOLD_EXPR:
14492 return tsubst_unary_right_fold (t, args, complain, in_decl);
14493 case BINARY_LEFT_FOLD_EXPR:
14494 return tsubst_binary_left_fold (t, args, complain, in_decl);
14495 case BINARY_RIGHT_FOLD_EXPR:
14496 return tsubst_binary_right_fold (t, args, complain, in_decl);
14497
14498 default:
14499 /* We shouldn't get here, but keep going if !flag_checking. */
14500 if (flag_checking)
14501 gcc_unreachable ();
14502 return t;
14503 }
14504 }
14505
14506 /* Helper function for tsubst_omp_clauses, used for instantiation of
14507 OMP_CLAUSE_DECL of clauses. */
14508
14509 static tree
14510 tsubst_omp_clause_decl (tree decl, tree args, tsubst_flags_t complain,
14511 tree in_decl)
14512 {
14513 if (decl == NULL_TREE)
14514 return NULL_TREE;
14515
14516 /* Handle an OpenMP array section represented as a TREE_LIST (or
14517 OMP_CLAUSE_DEPEND_KIND). An OMP_CLAUSE_DEPEND (with a depend
14518 kind of OMP_CLAUSE_DEPEND_SINK) can also be represented as a
14519 TREE_LIST. We can handle it exactly the same as an array section
14520 (purpose, value, and a chain), even though the nomenclature
14521 (low_bound, length, etc) is different. */
14522 if (TREE_CODE (decl) == TREE_LIST)
14523 {
14524 tree low_bound
14525 = tsubst_expr (TREE_PURPOSE (decl), args, complain, in_decl,
14526 /*integral_constant_expression_p=*/false);
14527 tree length = tsubst_expr (TREE_VALUE (decl), args, complain, in_decl,
14528 /*integral_constant_expression_p=*/false);
14529 tree chain = tsubst_omp_clause_decl (TREE_CHAIN (decl), args, complain,
14530 in_decl);
14531 if (TREE_PURPOSE (decl) == low_bound
14532 && TREE_VALUE (decl) == length
14533 && TREE_CHAIN (decl) == chain)
14534 return decl;
14535 tree ret = tree_cons (low_bound, length, chain);
14536 OMP_CLAUSE_DEPEND_SINK_NEGATIVE (ret)
14537 = OMP_CLAUSE_DEPEND_SINK_NEGATIVE (decl);
14538 return ret;
14539 }
14540 tree ret = tsubst_expr (decl, args, complain, in_decl,
14541 /*integral_constant_expression_p=*/false);
14542 /* Undo convert_from_reference tsubst_expr could have called. */
14543 if (decl
14544 && REFERENCE_REF_P (ret)
14545 && !REFERENCE_REF_P (decl))
14546 ret = TREE_OPERAND (ret, 0);
14547 return ret;
14548 }
14549
14550 /* Like tsubst_copy, but specifically for OpenMP clauses. */
14551
14552 static tree
14553 tsubst_omp_clauses (tree clauses, enum c_omp_region_type ort,
14554 tree args, tsubst_flags_t complain, tree in_decl)
14555 {
14556 tree new_clauses = NULL_TREE, nc, oc;
14557 tree linear_no_step = NULL_TREE;
14558
14559 for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
14560 {
14561 nc = copy_node (oc);
14562 OMP_CLAUSE_CHAIN (nc) = new_clauses;
14563 new_clauses = nc;
14564
14565 switch (OMP_CLAUSE_CODE (nc))
14566 {
14567 case OMP_CLAUSE_LASTPRIVATE:
14568 if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
14569 {
14570 OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
14571 tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
14572 in_decl, /*integral_constant_expression_p=*/false);
14573 OMP_CLAUSE_LASTPRIVATE_STMT (nc)
14574 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
14575 }
14576 /* FALLTHRU */
14577 case OMP_CLAUSE_PRIVATE:
14578 case OMP_CLAUSE_SHARED:
14579 case OMP_CLAUSE_FIRSTPRIVATE:
14580 case OMP_CLAUSE_COPYIN:
14581 case OMP_CLAUSE_COPYPRIVATE:
14582 case OMP_CLAUSE_UNIFORM:
14583 case OMP_CLAUSE_DEPEND:
14584 case OMP_CLAUSE_FROM:
14585 case OMP_CLAUSE_TO:
14586 case OMP_CLAUSE_MAP:
14587 case OMP_CLAUSE_USE_DEVICE_PTR:
14588 case OMP_CLAUSE_IS_DEVICE_PTR:
14589 OMP_CLAUSE_DECL (nc)
14590 = tsubst_omp_clause_decl (OMP_CLAUSE_DECL (oc), args, complain,
14591 in_decl);
14592 break;
14593 case OMP_CLAUSE_IF:
14594 case OMP_CLAUSE_NUM_THREADS:
14595 case OMP_CLAUSE_SCHEDULE:
14596 case OMP_CLAUSE_COLLAPSE:
14597 case OMP_CLAUSE_FINAL:
14598 case OMP_CLAUSE_DEVICE:
14599 case OMP_CLAUSE_DIST_SCHEDULE:
14600 case OMP_CLAUSE_NUM_TEAMS:
14601 case OMP_CLAUSE_THREAD_LIMIT:
14602 case OMP_CLAUSE_SAFELEN:
14603 case OMP_CLAUSE_SIMDLEN:
14604 case OMP_CLAUSE_NUM_TASKS:
14605 case OMP_CLAUSE_GRAINSIZE:
14606 case OMP_CLAUSE_PRIORITY:
14607 case OMP_CLAUSE_ORDERED:
14608 case OMP_CLAUSE_HINT:
14609 case OMP_CLAUSE_NUM_GANGS:
14610 case OMP_CLAUSE_NUM_WORKERS:
14611 case OMP_CLAUSE_VECTOR_LENGTH:
14612 case OMP_CLAUSE_WORKER:
14613 case OMP_CLAUSE_VECTOR:
14614 case OMP_CLAUSE_ASYNC:
14615 case OMP_CLAUSE_WAIT:
14616 OMP_CLAUSE_OPERAND (nc, 0)
14617 = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
14618 in_decl, /*integral_constant_expression_p=*/false);
14619 break;
14620 case OMP_CLAUSE_REDUCTION:
14621 if (OMP_CLAUSE_REDUCTION_PLACEHOLDER (oc))
14622 {
14623 tree placeholder = OMP_CLAUSE_REDUCTION_PLACEHOLDER (oc);
14624 if (TREE_CODE (placeholder) == SCOPE_REF)
14625 {
14626 tree scope = tsubst (TREE_OPERAND (placeholder, 0), args,
14627 complain, in_decl);
14628 OMP_CLAUSE_REDUCTION_PLACEHOLDER (nc)
14629 = build_qualified_name (NULL_TREE, scope,
14630 TREE_OPERAND (placeholder, 1),
14631 false);
14632 }
14633 else
14634 gcc_assert (identifier_p (placeholder));
14635 }
14636 OMP_CLAUSE_DECL (nc)
14637 = tsubst_omp_clause_decl (OMP_CLAUSE_DECL (oc), args, complain,
14638 in_decl);
14639 break;
14640 case OMP_CLAUSE_GANG:
14641 case OMP_CLAUSE_ALIGNED:
14642 OMP_CLAUSE_DECL (nc)
14643 = tsubst_omp_clause_decl (OMP_CLAUSE_DECL (oc), args, complain,
14644 in_decl);
14645 OMP_CLAUSE_OPERAND (nc, 1)
14646 = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 1), args, complain,
14647 in_decl, /*integral_constant_expression_p=*/false);
14648 break;
14649 case OMP_CLAUSE_LINEAR:
14650 OMP_CLAUSE_DECL (nc)
14651 = tsubst_omp_clause_decl (OMP_CLAUSE_DECL (oc), args, complain,
14652 in_decl);
14653 if (OMP_CLAUSE_LINEAR_STEP (oc) == NULL_TREE)
14654 {
14655 gcc_assert (!linear_no_step);
14656 linear_no_step = nc;
14657 }
14658 else if (OMP_CLAUSE_LINEAR_VARIABLE_STRIDE (oc))
14659 OMP_CLAUSE_LINEAR_STEP (nc)
14660 = tsubst_omp_clause_decl (OMP_CLAUSE_LINEAR_STEP (oc), args,
14661 complain, in_decl);
14662 else
14663 OMP_CLAUSE_LINEAR_STEP (nc)
14664 = tsubst_expr (OMP_CLAUSE_LINEAR_STEP (oc), args, complain,
14665 in_decl,
14666 /*integral_constant_expression_p=*/false);
14667 break;
14668 case OMP_CLAUSE_NOWAIT:
14669 case OMP_CLAUSE_DEFAULT:
14670 case OMP_CLAUSE_UNTIED:
14671 case OMP_CLAUSE_MERGEABLE:
14672 case OMP_CLAUSE_INBRANCH:
14673 case OMP_CLAUSE_NOTINBRANCH:
14674 case OMP_CLAUSE_PROC_BIND:
14675 case OMP_CLAUSE_FOR:
14676 case OMP_CLAUSE_PARALLEL:
14677 case OMP_CLAUSE_SECTIONS:
14678 case OMP_CLAUSE_TASKGROUP:
14679 case OMP_CLAUSE_NOGROUP:
14680 case OMP_CLAUSE_THREADS:
14681 case OMP_CLAUSE_SIMD:
14682 case OMP_CLAUSE_DEFAULTMAP:
14683 case OMP_CLAUSE_INDEPENDENT:
14684 case OMP_CLAUSE_AUTO:
14685 case OMP_CLAUSE_SEQ:
14686 break;
14687 case OMP_CLAUSE_TILE:
14688 {
14689 tree lnc, loc;
14690 for (lnc = OMP_CLAUSE_TILE_LIST (nc),
14691 loc = OMP_CLAUSE_TILE_LIST (oc);
14692 loc;
14693 loc = TREE_CHAIN (loc), lnc = TREE_CHAIN (lnc))
14694 {
14695 TREE_VALUE (lnc) = tsubst_expr (TREE_VALUE (loc), args,
14696 complain, in_decl, false);
14697 }
14698 }
14699 break;
14700 default:
14701 gcc_unreachable ();
14702 }
14703 if ((ort & C_ORT_OMP_DECLARE_SIMD) == C_ORT_OMP)
14704 switch (OMP_CLAUSE_CODE (nc))
14705 {
14706 case OMP_CLAUSE_SHARED:
14707 case OMP_CLAUSE_PRIVATE:
14708 case OMP_CLAUSE_FIRSTPRIVATE:
14709 case OMP_CLAUSE_LASTPRIVATE:
14710 case OMP_CLAUSE_COPYPRIVATE:
14711 case OMP_CLAUSE_LINEAR:
14712 case OMP_CLAUSE_REDUCTION:
14713 case OMP_CLAUSE_USE_DEVICE_PTR:
14714 case OMP_CLAUSE_IS_DEVICE_PTR:
14715 /* tsubst_expr on SCOPE_REF results in returning
14716 finish_non_static_data_member result. Undo that here. */
14717 if (TREE_CODE (OMP_CLAUSE_DECL (oc)) == SCOPE_REF
14718 && (TREE_CODE (TREE_OPERAND (OMP_CLAUSE_DECL (oc), 1))
14719 == IDENTIFIER_NODE))
14720 {
14721 tree t = OMP_CLAUSE_DECL (nc);
14722 tree v = t;
14723 while (v)
14724 switch (TREE_CODE (v))
14725 {
14726 case COMPONENT_REF:
14727 case MEM_REF:
14728 case INDIRECT_REF:
14729 CASE_CONVERT:
14730 case POINTER_PLUS_EXPR:
14731 v = TREE_OPERAND (v, 0);
14732 continue;
14733 case PARM_DECL:
14734 if (DECL_CONTEXT (v) == current_function_decl
14735 && DECL_ARTIFICIAL (v)
14736 && DECL_NAME (v) == this_identifier)
14737 OMP_CLAUSE_DECL (nc) = TREE_OPERAND (t, 1);
14738 /* FALLTHRU */
14739 default:
14740 v = NULL_TREE;
14741 break;
14742 }
14743 }
14744 else if (VAR_P (OMP_CLAUSE_DECL (oc))
14745 && DECL_HAS_VALUE_EXPR_P (OMP_CLAUSE_DECL (oc))
14746 && DECL_ARTIFICIAL (OMP_CLAUSE_DECL (oc))
14747 && DECL_LANG_SPECIFIC (OMP_CLAUSE_DECL (oc))
14748 && DECL_OMP_PRIVATIZED_MEMBER (OMP_CLAUSE_DECL (oc)))
14749 {
14750 tree decl = OMP_CLAUSE_DECL (nc);
14751 if (VAR_P (decl))
14752 {
14753 if (!DECL_LANG_SPECIFIC (decl))
14754 retrofit_lang_decl (decl);
14755 DECL_OMP_PRIVATIZED_MEMBER (decl) = 1;
14756 }
14757 }
14758 break;
14759 default:
14760 break;
14761 }
14762 }
14763
14764 new_clauses = nreverse (new_clauses);
14765 if (ort != C_ORT_OMP_DECLARE_SIMD)
14766 {
14767 new_clauses = finish_omp_clauses (new_clauses, ort);
14768 if (linear_no_step)
14769 for (nc = new_clauses; nc; nc = OMP_CLAUSE_CHAIN (nc))
14770 if (nc == linear_no_step)
14771 {
14772 OMP_CLAUSE_LINEAR_STEP (nc) = NULL_TREE;
14773 break;
14774 }
14775 }
14776 return new_clauses;
14777 }
14778
14779 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes. */
14780
14781 static tree
14782 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
14783 tree in_decl)
14784 {
14785 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
14786
14787 tree purpose, value, chain;
14788
14789 if (t == NULL)
14790 return t;
14791
14792 if (TREE_CODE (t) != TREE_LIST)
14793 return tsubst_copy_and_build (t, args, complain, in_decl,
14794 /*function_p=*/false,
14795 /*integral_constant_expression_p=*/false);
14796
14797 if (t == void_list_node)
14798 return t;
14799
14800 purpose = TREE_PURPOSE (t);
14801 if (purpose)
14802 purpose = RECUR (purpose);
14803 value = TREE_VALUE (t);
14804 if (value)
14805 {
14806 if (TREE_CODE (value) != LABEL_DECL)
14807 value = RECUR (value);
14808 else
14809 {
14810 value = lookup_label (DECL_NAME (value));
14811 gcc_assert (TREE_CODE (value) == LABEL_DECL);
14812 TREE_USED (value) = 1;
14813 }
14814 }
14815 chain = TREE_CHAIN (t);
14816 if (chain && chain != void_type_node)
14817 chain = RECUR (chain);
14818 return tree_cons (purpose, value, chain);
14819 #undef RECUR
14820 }
14821
14822 /* Used to temporarily communicate the list of #pragma omp parallel
14823 clauses to #pragma omp for instantiation if they are combined
14824 together. */
14825
14826 static tree *omp_parallel_combined_clauses;
14827
14828 /* Substitute one OMP_FOR iterator. */
14829
14830 static void
14831 tsubst_omp_for_iterator (tree t, int i, tree declv, tree orig_declv,
14832 tree initv, tree condv, tree incrv, tree *clauses,
14833 tree args, tsubst_flags_t complain, tree in_decl,
14834 bool integral_constant_expression_p)
14835 {
14836 #define RECUR(NODE) \
14837 tsubst_expr ((NODE), args, complain, in_decl, \
14838 integral_constant_expression_p)
14839 tree decl, init, cond, incr;
14840
14841 init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
14842 gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
14843
14844 if (orig_declv && OMP_FOR_ORIG_DECLS (t))
14845 {
14846 tree o = TREE_VEC_ELT (OMP_FOR_ORIG_DECLS (t), i);
14847 TREE_VEC_ELT (orig_declv, i) = RECUR (o);
14848 }
14849
14850 decl = TREE_OPERAND (init, 0);
14851 init = TREE_OPERAND (init, 1);
14852 tree decl_expr = NULL_TREE;
14853 if (init && TREE_CODE (init) == DECL_EXPR)
14854 {
14855 /* We need to jump through some hoops to handle declarations in the
14856 for-init-statement, since we might need to handle auto deduction,
14857 but we need to keep control of initialization. */
14858 decl_expr = init;
14859 init = DECL_INITIAL (DECL_EXPR_DECL (init));
14860 decl = tsubst_decl (decl, args, complain);
14861 }
14862 else
14863 {
14864 if (TREE_CODE (decl) == SCOPE_REF)
14865 {
14866 decl = RECUR (decl);
14867 if (TREE_CODE (decl) == COMPONENT_REF)
14868 {
14869 tree v = decl;
14870 while (v)
14871 switch (TREE_CODE (v))
14872 {
14873 case COMPONENT_REF:
14874 case MEM_REF:
14875 case INDIRECT_REF:
14876 CASE_CONVERT:
14877 case POINTER_PLUS_EXPR:
14878 v = TREE_OPERAND (v, 0);
14879 continue;
14880 case PARM_DECL:
14881 if (DECL_CONTEXT (v) == current_function_decl
14882 && DECL_ARTIFICIAL (v)
14883 && DECL_NAME (v) == this_identifier)
14884 {
14885 decl = TREE_OPERAND (decl, 1);
14886 decl = omp_privatize_field (decl, false);
14887 }
14888 /* FALLTHRU */
14889 default:
14890 v = NULL_TREE;
14891 break;
14892 }
14893 }
14894 }
14895 else
14896 decl = RECUR (decl);
14897 }
14898 init = RECUR (init);
14899
14900 tree auto_node = type_uses_auto (TREE_TYPE (decl));
14901 if (auto_node && init)
14902 TREE_TYPE (decl)
14903 = do_auto_deduction (TREE_TYPE (decl), init, auto_node);
14904
14905 gcc_assert (!type_dependent_expression_p (decl));
14906
14907 if (!CLASS_TYPE_P (TREE_TYPE (decl)))
14908 {
14909 if (decl_expr)
14910 {
14911 /* Declare the variable, but don't let that initialize it. */
14912 tree init_sav = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
14913 DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL_TREE;
14914 RECUR (decl_expr);
14915 DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init_sav;
14916 }
14917
14918 cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
14919 incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
14920 if (TREE_CODE (incr) == MODIFY_EXPR)
14921 {
14922 tree lhs = RECUR (TREE_OPERAND (incr, 0));
14923 tree rhs = RECUR (TREE_OPERAND (incr, 1));
14924 incr = build_x_modify_expr (EXPR_LOCATION (incr), lhs,
14925 NOP_EXPR, rhs, complain);
14926 }
14927 else
14928 incr = RECUR (incr);
14929 TREE_VEC_ELT (declv, i) = decl;
14930 TREE_VEC_ELT (initv, i) = init;
14931 TREE_VEC_ELT (condv, i) = cond;
14932 TREE_VEC_ELT (incrv, i) = incr;
14933 return;
14934 }
14935
14936 if (decl_expr)
14937 {
14938 /* Declare and initialize the variable. */
14939 RECUR (decl_expr);
14940 init = NULL_TREE;
14941 }
14942 else if (init)
14943 {
14944 tree *pc;
14945 int j;
14946 for (j = (omp_parallel_combined_clauses == NULL ? 1 : 0); j < 2; j++)
14947 {
14948 for (pc = j ? clauses : omp_parallel_combined_clauses; *pc; )
14949 {
14950 if (OMP_CLAUSE_CODE (*pc) == OMP_CLAUSE_PRIVATE
14951 && OMP_CLAUSE_DECL (*pc) == decl)
14952 break;
14953 else if (OMP_CLAUSE_CODE (*pc) == OMP_CLAUSE_LASTPRIVATE
14954 && OMP_CLAUSE_DECL (*pc) == decl)
14955 {
14956 if (j)
14957 break;
14958 /* Move lastprivate (decl) clause to OMP_FOR_CLAUSES. */
14959 tree c = *pc;
14960 *pc = OMP_CLAUSE_CHAIN (c);
14961 OMP_CLAUSE_CHAIN (c) = *clauses;
14962 *clauses = c;
14963 }
14964 else if (OMP_CLAUSE_CODE (*pc) == OMP_CLAUSE_FIRSTPRIVATE
14965 && OMP_CLAUSE_DECL (*pc) == decl)
14966 {
14967 error ("iteration variable %qD should not be firstprivate",
14968 decl);
14969 *pc = OMP_CLAUSE_CHAIN (*pc);
14970 }
14971 else if (OMP_CLAUSE_CODE (*pc) == OMP_CLAUSE_REDUCTION
14972 && OMP_CLAUSE_DECL (*pc) == decl)
14973 {
14974 error ("iteration variable %qD should not be reduction",
14975 decl);
14976 *pc = OMP_CLAUSE_CHAIN (*pc);
14977 }
14978 else
14979 pc = &OMP_CLAUSE_CHAIN (*pc);
14980 }
14981 if (*pc)
14982 break;
14983 }
14984 if (*pc == NULL_TREE)
14985 {
14986 tree c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
14987 OMP_CLAUSE_DECL (c) = decl;
14988 c = finish_omp_clauses (c, C_ORT_OMP);
14989 if (c)
14990 {
14991 OMP_CLAUSE_CHAIN (c) = *clauses;
14992 *clauses = c;
14993 }
14994 }
14995 }
14996 cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
14997 if (COMPARISON_CLASS_P (cond))
14998 {
14999 tree op0 = RECUR (TREE_OPERAND (cond, 0));
15000 tree op1 = RECUR (TREE_OPERAND (cond, 1));
15001 cond = build2 (TREE_CODE (cond), boolean_type_node, op0, op1);
15002 }
15003 else
15004 cond = RECUR (cond);
15005 incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
15006 switch (TREE_CODE (incr))
15007 {
15008 case PREINCREMENT_EXPR:
15009 case PREDECREMENT_EXPR:
15010 case POSTINCREMENT_EXPR:
15011 case POSTDECREMENT_EXPR:
15012 incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
15013 RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
15014 break;
15015 case MODIFY_EXPR:
15016 if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
15017 || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
15018 {
15019 tree rhs = TREE_OPERAND (incr, 1);
15020 tree lhs = RECUR (TREE_OPERAND (incr, 0));
15021 tree rhs0 = RECUR (TREE_OPERAND (rhs, 0));
15022 tree rhs1 = RECUR (TREE_OPERAND (rhs, 1));
15023 incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
15024 build2 (TREE_CODE (rhs), TREE_TYPE (decl),
15025 rhs0, rhs1));
15026 }
15027 else
15028 incr = RECUR (incr);
15029 break;
15030 case MODOP_EXPR:
15031 if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
15032 || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
15033 {
15034 tree lhs = RECUR (TREE_OPERAND (incr, 0));
15035 incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
15036 build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
15037 TREE_TYPE (decl), lhs,
15038 RECUR (TREE_OPERAND (incr, 2))));
15039 }
15040 else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
15041 && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
15042 || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
15043 {
15044 tree rhs = TREE_OPERAND (incr, 2);
15045 tree lhs = RECUR (TREE_OPERAND (incr, 0));
15046 tree rhs0 = RECUR (TREE_OPERAND (rhs, 0));
15047 tree rhs1 = RECUR (TREE_OPERAND (rhs, 1));
15048 incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
15049 build2 (TREE_CODE (rhs), TREE_TYPE (decl),
15050 rhs0, rhs1));
15051 }
15052 else
15053 incr = RECUR (incr);
15054 break;
15055 default:
15056 incr = RECUR (incr);
15057 break;
15058 }
15059
15060 TREE_VEC_ELT (declv, i) = decl;
15061 TREE_VEC_ELT (initv, i) = init;
15062 TREE_VEC_ELT (condv, i) = cond;
15063 TREE_VEC_ELT (incrv, i) = incr;
15064 #undef RECUR
15065 }
15066
15067 /* Helper function of tsubst_expr, find OMP_TEAMS inside
15068 of OMP_TARGET's body. */
15069
15070 static tree
15071 tsubst_find_omp_teams (tree *tp, int *walk_subtrees, void *)
15072 {
15073 *walk_subtrees = 0;
15074 switch (TREE_CODE (*tp))
15075 {
15076 case OMP_TEAMS:
15077 return *tp;
15078 case BIND_EXPR:
15079 case STATEMENT_LIST:
15080 *walk_subtrees = 1;
15081 break;
15082 default:
15083 break;
15084 }
15085 return NULL_TREE;
15086 }
15087
15088 /* Like tsubst_copy for expressions, etc. but also does semantic
15089 processing. */
15090
15091 tree
15092 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
15093 bool integral_constant_expression_p)
15094 {
15095 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
15096 #define RECUR(NODE) \
15097 tsubst_expr ((NODE), args, complain, in_decl, \
15098 integral_constant_expression_p)
15099
15100 tree stmt, tmp;
15101 tree r;
15102 location_t loc;
15103
15104 if (t == NULL_TREE || t == error_mark_node)
15105 return t;
15106
15107 loc = input_location;
15108 if (EXPR_HAS_LOCATION (t))
15109 input_location = EXPR_LOCATION (t);
15110 if (STATEMENT_CODE_P (TREE_CODE (t)))
15111 current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
15112
15113 switch (TREE_CODE (t))
15114 {
15115 case STATEMENT_LIST:
15116 {
15117 tree_stmt_iterator i;
15118 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
15119 RECUR (tsi_stmt (i));
15120 break;
15121 }
15122
15123 case CTOR_INITIALIZER:
15124 finish_mem_initializers (tsubst_initializer_list
15125 (TREE_OPERAND (t, 0), args));
15126 break;
15127
15128 case RETURN_EXPR:
15129 finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
15130 break;
15131
15132 case EXPR_STMT:
15133 tmp = RECUR (EXPR_STMT_EXPR (t));
15134 if (EXPR_STMT_STMT_EXPR_RESULT (t))
15135 finish_stmt_expr_expr (tmp, cur_stmt_expr);
15136 else
15137 finish_expr_stmt (tmp);
15138 break;
15139
15140 case USING_STMT:
15141 do_using_directive (USING_STMT_NAMESPACE (t));
15142 break;
15143
15144 case DECL_EXPR:
15145 {
15146 tree decl, pattern_decl;
15147 tree init;
15148
15149 pattern_decl = decl = DECL_EXPR_DECL (t);
15150 if (TREE_CODE (decl) == LABEL_DECL)
15151 finish_label_decl (DECL_NAME (decl));
15152 else if (TREE_CODE (decl) == USING_DECL)
15153 {
15154 tree scope = USING_DECL_SCOPE (decl);
15155 tree name = DECL_NAME (decl);
15156
15157 scope = tsubst (scope, args, complain, in_decl);
15158 decl = lookup_qualified_name (scope, name,
15159 /*is_type_p=*/false,
15160 /*complain=*/false);
15161 if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
15162 qualified_name_lookup_error (scope, name, decl, input_location);
15163 else
15164 do_local_using_decl (decl, scope, name);
15165 }
15166 else if (DECL_PACK_P (decl))
15167 {
15168 /* Don't build up decls for a variadic capture proxy, we'll
15169 instantiate the elements directly as needed. */
15170 break;
15171 }
15172 else
15173 {
15174 init = DECL_INITIAL (decl);
15175 decl = tsubst (decl, args, complain, in_decl);
15176 if (decl != error_mark_node)
15177 {
15178 /* By marking the declaration as instantiated, we avoid
15179 trying to instantiate it. Since instantiate_decl can't
15180 handle local variables, and since we've already done
15181 all that needs to be done, that's the right thing to
15182 do. */
15183 if (VAR_P (decl))
15184 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
15185 if (VAR_P (decl)
15186 && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
15187 /* Anonymous aggregates are a special case. */
15188 finish_anon_union (decl);
15189 else if (is_capture_proxy (DECL_EXPR_DECL (t)))
15190 {
15191 DECL_CONTEXT (decl) = current_function_decl;
15192 if (DECL_NAME (decl) == this_identifier)
15193 {
15194 tree lam = DECL_CONTEXT (current_function_decl);
15195 lam = CLASSTYPE_LAMBDA_EXPR (lam);
15196 LAMBDA_EXPR_THIS_CAPTURE (lam) = decl;
15197 }
15198 insert_capture_proxy (decl);
15199 }
15200 else if (DECL_IMPLICIT_TYPEDEF_P (t))
15201 /* We already did a pushtag. */;
15202 else if (TREE_CODE (decl) == FUNCTION_DECL
15203 && DECL_OMP_DECLARE_REDUCTION_P (decl)
15204 && DECL_FUNCTION_SCOPE_P (pattern_decl))
15205 {
15206 DECL_CONTEXT (decl) = NULL_TREE;
15207 pushdecl (decl);
15208 DECL_CONTEXT (decl) = current_function_decl;
15209 cp_check_omp_declare_reduction (decl);
15210 }
15211 else
15212 {
15213 int const_init = false;
15214 maybe_push_decl (decl);
15215 if (VAR_P (decl)
15216 && DECL_PRETTY_FUNCTION_P (decl))
15217 {
15218 /* For __PRETTY_FUNCTION__ we have to adjust the
15219 initializer. */
15220 const char *const name
15221 = cxx_printable_name (current_function_decl, 2);
15222 init = cp_fname_init (name, &TREE_TYPE (decl));
15223 }
15224 else
15225 init = tsubst_init (init, decl, args, complain, in_decl);
15226
15227 if (VAR_P (decl))
15228 const_init = (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P
15229 (pattern_decl));
15230 cp_finish_decl (decl, init, const_init, NULL_TREE, 0);
15231 }
15232 }
15233 }
15234
15235 break;
15236 }
15237
15238 case FOR_STMT:
15239 stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
15240 RECUR (FOR_INIT_STMT (t));
15241 finish_for_init_stmt (stmt);
15242 tmp = RECUR (FOR_COND (t));
15243 finish_for_cond (tmp, stmt, false);
15244 tmp = RECUR (FOR_EXPR (t));
15245 finish_for_expr (tmp, stmt);
15246 RECUR (FOR_BODY (t));
15247 finish_for_stmt (stmt);
15248 break;
15249
15250 case RANGE_FOR_STMT:
15251 {
15252 tree decl, expr;
15253 stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
15254 decl = RANGE_FOR_DECL (t);
15255 decl = tsubst (decl, args, complain, in_decl);
15256 maybe_push_decl (decl);
15257 expr = RECUR (RANGE_FOR_EXPR (t));
15258 stmt = cp_convert_range_for (stmt, decl, expr, RANGE_FOR_IVDEP (t));
15259 RECUR (RANGE_FOR_BODY (t));
15260 finish_for_stmt (stmt);
15261 }
15262 break;
15263
15264 case WHILE_STMT:
15265 stmt = begin_while_stmt ();
15266 tmp = RECUR (WHILE_COND (t));
15267 finish_while_stmt_cond (tmp, stmt, false);
15268 RECUR (WHILE_BODY (t));
15269 finish_while_stmt (stmt);
15270 break;
15271
15272 case DO_STMT:
15273 stmt = begin_do_stmt ();
15274 RECUR (DO_BODY (t));
15275 finish_do_body (stmt);
15276 tmp = RECUR (DO_COND (t));
15277 finish_do_stmt (tmp, stmt, false);
15278 break;
15279
15280 case IF_STMT:
15281 stmt = begin_if_stmt ();
15282 tmp = RECUR (IF_COND (t));
15283 finish_if_stmt_cond (tmp, stmt);
15284 RECUR (THEN_CLAUSE (t));
15285 finish_then_clause (stmt);
15286
15287 if (ELSE_CLAUSE (t))
15288 {
15289 begin_else_clause (stmt);
15290 RECUR (ELSE_CLAUSE (t));
15291 finish_else_clause (stmt);
15292 }
15293
15294 finish_if_stmt (stmt);
15295 break;
15296
15297 case BIND_EXPR:
15298 if (BIND_EXPR_BODY_BLOCK (t))
15299 stmt = begin_function_body ();
15300 else
15301 stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
15302 ? BCS_TRY_BLOCK : 0);
15303
15304 RECUR (BIND_EXPR_BODY (t));
15305
15306 if (BIND_EXPR_BODY_BLOCK (t))
15307 finish_function_body (stmt);
15308 else
15309 finish_compound_stmt (stmt);
15310 break;
15311
15312 case BREAK_STMT:
15313 finish_break_stmt ();
15314 break;
15315
15316 case CONTINUE_STMT:
15317 finish_continue_stmt ();
15318 break;
15319
15320 case SWITCH_STMT:
15321 stmt = begin_switch_stmt ();
15322 tmp = RECUR (SWITCH_STMT_COND (t));
15323 finish_switch_cond (tmp, stmt);
15324 RECUR (SWITCH_STMT_BODY (t));
15325 finish_switch_stmt (stmt);
15326 break;
15327
15328 case CASE_LABEL_EXPR:
15329 {
15330 tree low = RECUR (CASE_LOW (t));
15331 tree high = RECUR (CASE_HIGH (t));
15332 finish_case_label (EXPR_LOCATION (t), low, high);
15333 }
15334 break;
15335
15336 case LABEL_EXPR:
15337 {
15338 tree decl = LABEL_EXPR_LABEL (t);
15339 tree label;
15340
15341 label = finish_label_stmt (DECL_NAME (decl));
15342 if (DECL_ATTRIBUTES (decl) != NULL_TREE)
15343 cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
15344 }
15345 break;
15346
15347 case GOTO_EXPR:
15348 tmp = GOTO_DESTINATION (t);
15349 if (TREE_CODE (tmp) != LABEL_DECL)
15350 /* Computed goto's must be tsubst'd into. On the other hand,
15351 non-computed gotos must not be; the identifier in question
15352 will have no binding. */
15353 tmp = RECUR (tmp);
15354 else
15355 tmp = DECL_NAME (tmp);
15356 finish_goto_stmt (tmp);
15357 break;
15358
15359 case ASM_EXPR:
15360 {
15361 tree string = RECUR (ASM_STRING (t));
15362 tree outputs = tsubst_copy_asm_operands (ASM_OUTPUTS (t), args,
15363 complain, in_decl);
15364 tree inputs = tsubst_copy_asm_operands (ASM_INPUTS (t), args,
15365 complain, in_decl);
15366 tree clobbers = tsubst_copy_asm_operands (ASM_CLOBBERS (t), args,
15367 complain, in_decl);
15368 tree labels = tsubst_copy_asm_operands (ASM_LABELS (t), args,
15369 complain, in_decl);
15370 tmp = finish_asm_stmt (ASM_VOLATILE_P (t), string, outputs, inputs,
15371 clobbers, labels);
15372 tree asm_expr = tmp;
15373 if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
15374 asm_expr = TREE_OPERAND (asm_expr, 0);
15375 ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
15376 }
15377 break;
15378
15379 case TRY_BLOCK:
15380 if (CLEANUP_P (t))
15381 {
15382 stmt = begin_try_block ();
15383 RECUR (TRY_STMTS (t));
15384 finish_cleanup_try_block (stmt);
15385 finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
15386 }
15387 else
15388 {
15389 tree compound_stmt = NULL_TREE;
15390
15391 if (FN_TRY_BLOCK_P (t))
15392 stmt = begin_function_try_block (&compound_stmt);
15393 else
15394 stmt = begin_try_block ();
15395
15396 RECUR (TRY_STMTS (t));
15397
15398 if (FN_TRY_BLOCK_P (t))
15399 finish_function_try_block (stmt);
15400 else
15401 finish_try_block (stmt);
15402
15403 RECUR (TRY_HANDLERS (t));
15404 if (FN_TRY_BLOCK_P (t))
15405 finish_function_handler_sequence (stmt, compound_stmt);
15406 else
15407 finish_handler_sequence (stmt);
15408 }
15409 break;
15410
15411 case HANDLER:
15412 {
15413 tree decl = HANDLER_PARMS (t);
15414
15415 if (decl)
15416 {
15417 decl = tsubst (decl, args, complain, in_decl);
15418 /* Prevent instantiate_decl from trying to instantiate
15419 this variable. We've already done all that needs to be
15420 done. */
15421 if (decl != error_mark_node)
15422 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
15423 }
15424 stmt = begin_handler ();
15425 finish_handler_parms (decl, stmt);
15426 RECUR (HANDLER_BODY (t));
15427 finish_handler (stmt);
15428 }
15429 break;
15430
15431 case TAG_DEFN:
15432 tmp = tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
15433 if (CLASS_TYPE_P (tmp))
15434 {
15435 /* Local classes are not independent templates; they are
15436 instantiated along with their containing function. And this
15437 way we don't have to deal with pushing out of one local class
15438 to instantiate a member of another local class. */
15439 tree fn;
15440 /* Closures are handled by the LAMBDA_EXPR. */
15441 gcc_assert (!LAMBDA_TYPE_P (TREE_TYPE (t)));
15442 complete_type (tmp);
15443 for (fn = TYPE_METHODS (tmp); fn; fn = DECL_CHAIN (fn))
15444 if (!DECL_ARTIFICIAL (fn))
15445 instantiate_decl (fn, /*defer_ok*/0, /*expl_inst_class*/false);
15446 }
15447 break;
15448
15449 case STATIC_ASSERT:
15450 {
15451 tree condition;
15452
15453 ++c_inhibit_evaluation_warnings;
15454 condition =
15455 tsubst_expr (STATIC_ASSERT_CONDITION (t),
15456 args,
15457 complain, in_decl,
15458 /*integral_constant_expression_p=*/true);
15459 --c_inhibit_evaluation_warnings;
15460
15461 finish_static_assert (condition,
15462 STATIC_ASSERT_MESSAGE (t),
15463 STATIC_ASSERT_SOURCE_LOCATION (t),
15464 /*member_p=*/false);
15465 }
15466 break;
15467
15468 case OACC_KERNELS:
15469 case OACC_PARALLEL:
15470 tmp = tsubst_omp_clauses (OMP_CLAUSES (t), C_ORT_ACC, args, complain,
15471 in_decl);
15472 stmt = begin_omp_parallel ();
15473 RECUR (OMP_BODY (t));
15474 finish_omp_construct (TREE_CODE (t), stmt, tmp);
15475 break;
15476
15477 case OMP_PARALLEL:
15478 r = push_omp_privatization_clauses (OMP_PARALLEL_COMBINED (t));
15479 tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t), C_ORT_OMP, args,
15480 complain, in_decl);
15481 if (OMP_PARALLEL_COMBINED (t))
15482 omp_parallel_combined_clauses = &tmp;
15483 stmt = begin_omp_parallel ();
15484 RECUR (OMP_PARALLEL_BODY (t));
15485 gcc_assert (omp_parallel_combined_clauses == NULL);
15486 OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
15487 = OMP_PARALLEL_COMBINED (t);
15488 pop_omp_privatization_clauses (r);
15489 break;
15490
15491 case OMP_TASK:
15492 r = push_omp_privatization_clauses (false);
15493 tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t), C_ORT_OMP, args,
15494 complain, in_decl);
15495 stmt = begin_omp_task ();
15496 RECUR (OMP_TASK_BODY (t));
15497 finish_omp_task (tmp, stmt);
15498 pop_omp_privatization_clauses (r);
15499 break;
15500
15501 case OMP_FOR:
15502 case OMP_SIMD:
15503 case CILK_SIMD:
15504 case CILK_FOR:
15505 case OMP_DISTRIBUTE:
15506 case OMP_TASKLOOP:
15507 case OACC_LOOP:
15508 {
15509 tree clauses, body, pre_body;
15510 tree declv = NULL_TREE, initv = NULL_TREE, condv = NULL_TREE;
15511 tree orig_declv = NULL_TREE;
15512 tree incrv = NULL_TREE;
15513 enum c_omp_region_type ort = C_ORT_OMP;
15514 int i;
15515
15516 if (TREE_CODE (t) == CILK_SIMD || TREE_CODE (t) == CILK_FOR)
15517 ort = C_ORT_CILK;
15518 else if (TREE_CODE (t) == OACC_LOOP)
15519 ort = C_ORT_ACC;
15520
15521 r = push_omp_privatization_clauses (OMP_FOR_INIT (t) == NULL_TREE);
15522 clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t), ort, args, complain,
15523 in_decl);
15524 if (OMP_FOR_INIT (t) != NULL_TREE)
15525 {
15526 declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
15527 if (OMP_FOR_ORIG_DECLS (t))
15528 orig_declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
15529 initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
15530 condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
15531 incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
15532 }
15533
15534 stmt = begin_omp_structured_block ();
15535
15536 pre_body = push_stmt_list ();
15537 RECUR (OMP_FOR_PRE_BODY (t));
15538 pre_body = pop_stmt_list (pre_body);
15539
15540 if (OMP_FOR_INIT (t) != NULL_TREE)
15541 for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
15542 tsubst_omp_for_iterator (t, i, declv, orig_declv, initv, condv,
15543 incrv, &clauses, args, complain, in_decl,
15544 integral_constant_expression_p);
15545 omp_parallel_combined_clauses = NULL;
15546
15547 body = push_stmt_list ();
15548 RECUR (OMP_FOR_BODY (t));
15549 body = pop_stmt_list (body);
15550
15551 if (OMP_FOR_INIT (t) != NULL_TREE)
15552 t = finish_omp_for (EXPR_LOCATION (t), TREE_CODE (t), declv,
15553 orig_declv, initv, condv, incrv, body, pre_body,
15554 NULL, clauses);
15555 else
15556 {
15557 t = make_node (TREE_CODE (t));
15558 TREE_TYPE (t) = void_type_node;
15559 OMP_FOR_BODY (t) = body;
15560 OMP_FOR_PRE_BODY (t) = pre_body;
15561 OMP_FOR_CLAUSES (t) = clauses;
15562 SET_EXPR_LOCATION (t, EXPR_LOCATION (t));
15563 add_stmt (t);
15564 }
15565
15566 add_stmt (finish_omp_structured_block (stmt));
15567 pop_omp_privatization_clauses (r);
15568 }
15569 break;
15570
15571 case OMP_SECTIONS:
15572 omp_parallel_combined_clauses = NULL;
15573 /* FALLTHRU */
15574 case OMP_SINGLE:
15575 case OMP_TEAMS:
15576 case OMP_CRITICAL:
15577 r = push_omp_privatization_clauses (TREE_CODE (t) == OMP_TEAMS
15578 && OMP_TEAMS_COMBINED (t));
15579 tmp = tsubst_omp_clauses (OMP_CLAUSES (t), C_ORT_OMP, args, complain,
15580 in_decl);
15581 stmt = push_stmt_list ();
15582 RECUR (OMP_BODY (t));
15583 stmt = pop_stmt_list (stmt);
15584
15585 t = copy_node (t);
15586 OMP_BODY (t) = stmt;
15587 OMP_CLAUSES (t) = tmp;
15588 add_stmt (t);
15589 pop_omp_privatization_clauses (r);
15590 break;
15591
15592 case OACC_DATA:
15593 case OMP_TARGET_DATA:
15594 case OMP_TARGET:
15595 tmp = tsubst_omp_clauses (OMP_CLAUSES (t), (TREE_CODE (t) == OACC_DATA)
15596 ? C_ORT_ACC : C_ORT_OMP, args, complain,
15597 in_decl);
15598 keep_next_level (true);
15599 stmt = begin_omp_structured_block ();
15600
15601 RECUR (OMP_BODY (t));
15602 stmt = finish_omp_structured_block (stmt);
15603
15604 t = copy_node (t);
15605 OMP_BODY (t) = stmt;
15606 OMP_CLAUSES (t) = tmp;
15607 if (TREE_CODE (t) == OMP_TARGET && OMP_TARGET_COMBINED (t))
15608 {
15609 tree teams = cp_walk_tree (&stmt, tsubst_find_omp_teams, NULL, NULL);
15610 if (teams)
15611 {
15612 /* For combined target teams, ensure the num_teams and
15613 thread_limit clause expressions are evaluated on the host,
15614 before entering the target construct. */
15615 tree c;
15616 for (c = OMP_TEAMS_CLAUSES (teams);
15617 c; c = OMP_CLAUSE_CHAIN (c))
15618 if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_NUM_TEAMS
15619 || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_THREAD_LIMIT)
15620 && TREE_CODE (OMP_CLAUSE_OPERAND (c, 0)) != INTEGER_CST)
15621 {
15622 tree expr = OMP_CLAUSE_OPERAND (c, 0);
15623 expr = force_target_expr (TREE_TYPE (expr), expr, tf_none);
15624 if (expr == error_mark_node)
15625 continue;
15626 tmp = TARGET_EXPR_SLOT (expr);
15627 add_stmt (expr);
15628 OMP_CLAUSE_OPERAND (c, 0) = expr;
15629 tree tc = build_omp_clause (OMP_CLAUSE_LOCATION (c),
15630 OMP_CLAUSE_FIRSTPRIVATE);
15631 OMP_CLAUSE_DECL (tc) = tmp;
15632 OMP_CLAUSE_CHAIN (tc) = OMP_TARGET_CLAUSES (t);
15633 OMP_TARGET_CLAUSES (t) = tc;
15634 }
15635 }
15636 }
15637 add_stmt (t);
15638 break;
15639
15640 case OACC_DECLARE:
15641 t = copy_node (t);
15642 tmp = tsubst_omp_clauses (OACC_DECLARE_CLAUSES (t), C_ORT_ACC, args,
15643 complain, in_decl);
15644 OACC_DECLARE_CLAUSES (t) = tmp;
15645 add_stmt (t);
15646 break;
15647
15648 case OMP_TARGET_UPDATE:
15649 case OMP_TARGET_ENTER_DATA:
15650 case OMP_TARGET_EXIT_DATA:
15651 tmp = tsubst_omp_clauses (OMP_STANDALONE_CLAUSES (t), C_ORT_OMP, args,
15652 complain, in_decl);
15653 t = copy_node (t);
15654 OMP_STANDALONE_CLAUSES (t) = tmp;
15655 add_stmt (t);
15656 break;
15657
15658 case OACC_ENTER_DATA:
15659 case OACC_EXIT_DATA:
15660 case OACC_UPDATE:
15661 tmp = tsubst_omp_clauses (OMP_STANDALONE_CLAUSES (t), C_ORT_ACC, args,
15662 complain, in_decl);
15663 t = copy_node (t);
15664 OMP_STANDALONE_CLAUSES (t) = tmp;
15665 add_stmt (t);
15666 break;
15667
15668 case OMP_ORDERED:
15669 tmp = tsubst_omp_clauses (OMP_ORDERED_CLAUSES (t), C_ORT_OMP, args,
15670 complain, in_decl);
15671 stmt = push_stmt_list ();
15672 RECUR (OMP_BODY (t));
15673 stmt = pop_stmt_list (stmt);
15674
15675 t = copy_node (t);
15676 OMP_BODY (t) = stmt;
15677 OMP_ORDERED_CLAUSES (t) = tmp;
15678 add_stmt (t);
15679 break;
15680
15681 case OMP_SECTION:
15682 case OMP_MASTER:
15683 case OMP_TASKGROUP:
15684 stmt = push_stmt_list ();
15685 RECUR (OMP_BODY (t));
15686 stmt = pop_stmt_list (stmt);
15687
15688 t = copy_node (t);
15689 OMP_BODY (t) = stmt;
15690 add_stmt (t);
15691 break;
15692
15693 case OMP_ATOMIC:
15694 gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
15695 if (TREE_CODE (TREE_OPERAND (t, 1)) != MODIFY_EXPR)
15696 {
15697 tree op1 = TREE_OPERAND (t, 1);
15698 tree rhs1 = NULL_TREE;
15699 tree lhs, rhs;
15700 if (TREE_CODE (op1) == COMPOUND_EXPR)
15701 {
15702 rhs1 = RECUR (TREE_OPERAND (op1, 0));
15703 op1 = TREE_OPERAND (op1, 1);
15704 }
15705 lhs = RECUR (TREE_OPERAND (op1, 0));
15706 rhs = RECUR (TREE_OPERAND (op1, 1));
15707 finish_omp_atomic (OMP_ATOMIC, TREE_CODE (op1), lhs, rhs,
15708 NULL_TREE, NULL_TREE, rhs1,
15709 OMP_ATOMIC_SEQ_CST (t));
15710 }
15711 else
15712 {
15713 tree op1 = TREE_OPERAND (t, 1);
15714 tree v = NULL_TREE, lhs, rhs = NULL_TREE, lhs1 = NULL_TREE;
15715 tree rhs1 = NULL_TREE;
15716 enum tree_code code = TREE_CODE (TREE_OPERAND (op1, 1));
15717 enum tree_code opcode = NOP_EXPR;
15718 if (code == OMP_ATOMIC_READ)
15719 {
15720 v = RECUR (TREE_OPERAND (op1, 0));
15721 lhs = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
15722 }
15723 else if (code == OMP_ATOMIC_CAPTURE_OLD
15724 || code == OMP_ATOMIC_CAPTURE_NEW)
15725 {
15726 tree op11 = TREE_OPERAND (TREE_OPERAND (op1, 1), 1);
15727 v = RECUR (TREE_OPERAND (op1, 0));
15728 lhs1 = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
15729 if (TREE_CODE (op11) == COMPOUND_EXPR)
15730 {
15731 rhs1 = RECUR (TREE_OPERAND (op11, 0));
15732 op11 = TREE_OPERAND (op11, 1);
15733 }
15734 lhs = RECUR (TREE_OPERAND (op11, 0));
15735 rhs = RECUR (TREE_OPERAND (op11, 1));
15736 opcode = TREE_CODE (op11);
15737 if (opcode == MODIFY_EXPR)
15738 opcode = NOP_EXPR;
15739 }
15740 else
15741 {
15742 code = OMP_ATOMIC;
15743 lhs = RECUR (TREE_OPERAND (op1, 0));
15744 rhs = RECUR (TREE_OPERAND (op1, 1));
15745 }
15746 finish_omp_atomic (code, opcode, lhs, rhs, v, lhs1, rhs1,
15747 OMP_ATOMIC_SEQ_CST (t));
15748 }
15749 break;
15750
15751 case TRANSACTION_EXPR:
15752 {
15753 int flags = 0;
15754 flags |= (TRANSACTION_EXPR_OUTER (t) ? TM_STMT_ATTR_OUTER : 0);
15755 flags |= (TRANSACTION_EXPR_RELAXED (t) ? TM_STMT_ATTR_RELAXED : 0);
15756
15757 if (TRANSACTION_EXPR_IS_STMT (t))
15758 {
15759 tree body = TRANSACTION_EXPR_BODY (t);
15760 tree noex = NULL_TREE;
15761 if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
15762 {
15763 noex = MUST_NOT_THROW_COND (body);
15764 if (noex == NULL_TREE)
15765 noex = boolean_true_node;
15766 body = TREE_OPERAND (body, 0);
15767 }
15768 stmt = begin_transaction_stmt (input_location, NULL, flags);
15769 RECUR (body);
15770 finish_transaction_stmt (stmt, NULL, flags, RECUR (noex));
15771 }
15772 else
15773 {
15774 stmt = build_transaction_expr (EXPR_LOCATION (t),
15775 RECUR (TRANSACTION_EXPR_BODY (t)),
15776 flags, NULL_TREE);
15777 RETURN (stmt);
15778 }
15779 }
15780 break;
15781
15782 case MUST_NOT_THROW_EXPR:
15783 {
15784 tree op0 = RECUR (TREE_OPERAND (t, 0));
15785 tree cond = RECUR (MUST_NOT_THROW_COND (t));
15786 RETURN (build_must_not_throw_expr (op0, cond));
15787 }
15788
15789 case EXPR_PACK_EXPANSION:
15790 error ("invalid use of pack expansion expression");
15791 RETURN (error_mark_node);
15792
15793 case NONTYPE_ARGUMENT_PACK:
15794 error ("use %<...%> to expand argument pack");
15795 RETURN (error_mark_node);
15796
15797 case CILK_SPAWN_STMT:
15798 cfun->calls_cilk_spawn = 1;
15799 RETURN (build_cilk_spawn (EXPR_LOCATION (t), RECUR (CILK_SPAWN_FN (t))));
15800
15801 case CILK_SYNC_STMT:
15802 RETURN (build_cilk_sync ());
15803
15804 case COMPOUND_EXPR:
15805 tmp = RECUR (TREE_OPERAND (t, 0));
15806 if (tmp == NULL_TREE)
15807 /* If the first operand was a statement, we're done with it. */
15808 RETURN (RECUR (TREE_OPERAND (t, 1)));
15809 RETURN (build_x_compound_expr (EXPR_LOCATION (t), tmp,
15810 RECUR (TREE_OPERAND (t, 1)),
15811 complain));
15812
15813 case ANNOTATE_EXPR:
15814 tmp = RECUR (TREE_OPERAND (t, 0));
15815 RETURN (build2_loc (EXPR_LOCATION (t), ANNOTATE_EXPR,
15816 TREE_TYPE (tmp), tmp, RECUR (TREE_OPERAND (t, 1))));
15817
15818 default:
15819 gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
15820
15821 RETURN (tsubst_copy_and_build (t, args, complain, in_decl,
15822 /*function_p=*/false,
15823 integral_constant_expression_p));
15824 }
15825
15826 RETURN (NULL_TREE);
15827 out:
15828 input_location = loc;
15829 return r;
15830 #undef RECUR
15831 #undef RETURN
15832 }
15833
15834 /* Instantiate the special body of the artificial DECL_OMP_DECLARE_REDUCTION
15835 function. For description of the body see comment above
15836 cp_parser_omp_declare_reduction_exprs. */
15837
15838 static void
15839 tsubst_omp_udr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
15840 {
15841 if (t == NULL_TREE || t == error_mark_node)
15842 return;
15843
15844 gcc_assert (TREE_CODE (t) == STATEMENT_LIST);
15845
15846 tree_stmt_iterator tsi;
15847 int i;
15848 tree stmts[7];
15849 memset (stmts, 0, sizeof stmts);
15850 for (i = 0, tsi = tsi_start (t);
15851 i < 7 && !tsi_end_p (tsi);
15852 i++, tsi_next (&tsi))
15853 stmts[i] = tsi_stmt (tsi);
15854 gcc_assert (tsi_end_p (tsi));
15855
15856 if (i >= 3)
15857 {
15858 gcc_assert (TREE_CODE (stmts[0]) == DECL_EXPR
15859 && TREE_CODE (stmts[1]) == DECL_EXPR);
15860 tree omp_out = tsubst (DECL_EXPR_DECL (stmts[0]),
15861 args, complain, in_decl);
15862 tree omp_in = tsubst (DECL_EXPR_DECL (stmts[1]),
15863 args, complain, in_decl);
15864 DECL_CONTEXT (omp_out) = current_function_decl;
15865 DECL_CONTEXT (omp_in) = current_function_decl;
15866 keep_next_level (true);
15867 tree block = begin_omp_structured_block ();
15868 tsubst_expr (stmts[2], args, complain, in_decl, false);
15869 block = finish_omp_structured_block (block);
15870 block = maybe_cleanup_point_expr_void (block);
15871 add_decl_expr (omp_out);
15872 if (TREE_NO_WARNING (DECL_EXPR_DECL (stmts[0])))
15873 TREE_NO_WARNING (omp_out) = 1;
15874 add_decl_expr (omp_in);
15875 finish_expr_stmt (block);
15876 }
15877 if (i >= 6)
15878 {
15879 gcc_assert (TREE_CODE (stmts[3]) == DECL_EXPR
15880 && TREE_CODE (stmts[4]) == DECL_EXPR);
15881 tree omp_priv = tsubst (DECL_EXPR_DECL (stmts[3]),
15882 args, complain, in_decl);
15883 tree omp_orig = tsubst (DECL_EXPR_DECL (stmts[4]),
15884 args, complain, in_decl);
15885 DECL_CONTEXT (omp_priv) = current_function_decl;
15886 DECL_CONTEXT (omp_orig) = current_function_decl;
15887 keep_next_level (true);
15888 tree block = begin_omp_structured_block ();
15889 tsubst_expr (stmts[5], args, complain, in_decl, false);
15890 block = finish_omp_structured_block (block);
15891 block = maybe_cleanup_point_expr_void (block);
15892 cp_walk_tree (&block, cp_remove_omp_priv_cleanup_stmt, omp_priv, NULL);
15893 add_decl_expr (omp_priv);
15894 add_decl_expr (omp_orig);
15895 finish_expr_stmt (block);
15896 if (i == 7)
15897 add_decl_expr (omp_orig);
15898 }
15899 }
15900
15901 /* T is a postfix-expression that is not being used in a function
15902 call. Return the substituted version of T. */
15903
15904 static tree
15905 tsubst_non_call_postfix_expression (tree t, tree args,
15906 tsubst_flags_t complain,
15907 tree in_decl)
15908 {
15909 if (TREE_CODE (t) == SCOPE_REF)
15910 t = tsubst_qualified_id (t, args, complain, in_decl,
15911 /*done=*/false, /*address_p=*/false);
15912 else
15913 t = tsubst_copy_and_build (t, args, complain, in_decl,
15914 /*function_p=*/false,
15915 /*integral_constant_expression_p=*/false);
15916
15917 return t;
15918 }
15919
15920 /* Like tsubst but deals with expressions and performs semantic
15921 analysis. FUNCTION_P is true if T is the "F" in "F (ARGS)". */
15922
15923 tree
15924 tsubst_copy_and_build (tree t,
15925 tree args,
15926 tsubst_flags_t complain,
15927 tree in_decl,
15928 bool function_p,
15929 bool integral_constant_expression_p)
15930 {
15931 #define RETURN(EXP) do { retval = (EXP); goto out; } while(0)
15932 #define RECUR(NODE) \
15933 tsubst_copy_and_build (NODE, args, complain, in_decl, \
15934 /*function_p=*/false, \
15935 integral_constant_expression_p)
15936
15937 tree retval, op1;
15938 location_t loc;
15939
15940 if (t == NULL_TREE || t == error_mark_node)
15941 return t;
15942
15943 loc = input_location;
15944 if (EXPR_HAS_LOCATION (t))
15945 input_location = EXPR_LOCATION (t);
15946
15947 /* N3276 decltype magic only applies to calls at the top level or on the
15948 right side of a comma. */
15949 tsubst_flags_t decltype_flag = (complain & tf_decltype);
15950 complain &= ~tf_decltype;
15951
15952 switch (TREE_CODE (t))
15953 {
15954 case USING_DECL:
15955 t = DECL_NAME (t);
15956 /* Fall through. */
15957 case IDENTIFIER_NODE:
15958 {
15959 tree decl;
15960 cp_id_kind idk;
15961 bool non_integral_constant_expression_p;
15962 const char *error_msg;
15963
15964 if (IDENTIFIER_TYPENAME_P (t))
15965 {
15966 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
15967 t = mangle_conv_op_name_for_type (new_type);
15968 }
15969
15970 /* Look up the name. */
15971 decl = lookup_name (t);
15972
15973 /* By convention, expressions use ERROR_MARK_NODE to indicate
15974 failure, not NULL_TREE. */
15975 if (decl == NULL_TREE)
15976 decl = error_mark_node;
15977
15978 decl = finish_id_expression (t, decl, NULL_TREE,
15979 &idk,
15980 integral_constant_expression_p,
15981 /*allow_non_integral_constant_expression_p=*/(cxx_dialect >= cxx11),
15982 &non_integral_constant_expression_p,
15983 /*template_p=*/false,
15984 /*done=*/true,
15985 /*address_p=*/false,
15986 /*template_arg_p=*/false,
15987 &error_msg,
15988 input_location);
15989 if (error_msg)
15990 error (error_msg);
15991 if (!function_p && identifier_p (decl))
15992 {
15993 if (complain & tf_error)
15994 unqualified_name_lookup_error (decl);
15995 decl = error_mark_node;
15996 }
15997 RETURN (decl);
15998 }
15999
16000 case TEMPLATE_ID_EXPR:
16001 {
16002 tree object;
16003 tree templ = RECUR (TREE_OPERAND (t, 0));
16004 tree targs = TREE_OPERAND (t, 1);
16005
16006 if (targs)
16007 targs = tsubst_template_args (targs, args, complain, in_decl);
16008 if (targs == error_mark_node)
16009 return error_mark_node;
16010
16011 if (variable_template_p (templ))
16012 RETURN (lookup_and_finish_template_variable (templ, targs, complain));
16013
16014 if (TREE_CODE (templ) == COMPONENT_REF)
16015 {
16016 object = TREE_OPERAND (templ, 0);
16017 templ = TREE_OPERAND (templ, 1);
16018 }
16019 else
16020 object = NULL_TREE;
16021 templ = lookup_template_function (templ, targs);
16022
16023 if (object)
16024 RETURN (build3 (COMPONENT_REF, TREE_TYPE (templ),
16025 object, templ, NULL_TREE));
16026 else
16027 RETURN (baselink_for_fns (templ));
16028 }
16029
16030 case INDIRECT_REF:
16031 {
16032 tree r = RECUR (TREE_OPERAND (t, 0));
16033
16034 if (REFERENCE_REF_P (t))
16035 {
16036 /* A type conversion to reference type will be enclosed in
16037 such an indirect ref, but the substitution of the cast
16038 will have also added such an indirect ref. */
16039 if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
16040 r = convert_from_reference (r);
16041 }
16042 else
16043 r = build_x_indirect_ref (input_location, r, RO_UNARY_STAR,
16044 complain|decltype_flag);
16045
16046 if (TREE_CODE (r) == INDIRECT_REF)
16047 REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
16048
16049 RETURN (r);
16050 }
16051
16052 case NOP_EXPR:
16053 {
16054 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
16055 tree op0 = RECUR (TREE_OPERAND (t, 0));
16056 RETURN (build_nop (type, op0));
16057 }
16058
16059 case IMPLICIT_CONV_EXPR:
16060 {
16061 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
16062 tree expr = RECUR (TREE_OPERAND (t, 0));
16063 int flags = LOOKUP_IMPLICIT;
16064 if (IMPLICIT_CONV_EXPR_DIRECT_INIT (t))
16065 flags = LOOKUP_NORMAL;
16066 RETURN (perform_implicit_conversion_flags (type, expr, complain,
16067 flags));
16068 }
16069
16070 case CONVERT_EXPR:
16071 {
16072 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
16073 tree op0 = RECUR (TREE_OPERAND (t, 0));
16074 RETURN (build1 (CONVERT_EXPR, type, op0));
16075 }
16076
16077 case CAST_EXPR:
16078 case REINTERPRET_CAST_EXPR:
16079 case CONST_CAST_EXPR:
16080 case DYNAMIC_CAST_EXPR:
16081 case STATIC_CAST_EXPR:
16082 {
16083 tree type;
16084 tree op, r = NULL_TREE;
16085
16086 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
16087 if (integral_constant_expression_p
16088 && !cast_valid_in_integral_constant_expression_p (type))
16089 {
16090 if (complain & tf_error)
16091 error ("a cast to a type other than an integral or "
16092 "enumeration type cannot appear in a constant-expression");
16093 RETURN (error_mark_node);
16094 }
16095
16096 op = RECUR (TREE_OPERAND (t, 0));
16097
16098 warning_sentinel s(warn_useless_cast);
16099 switch (TREE_CODE (t))
16100 {
16101 case CAST_EXPR:
16102 r = build_functional_cast (type, op, complain);
16103 break;
16104 case REINTERPRET_CAST_EXPR:
16105 r = build_reinterpret_cast (type, op, complain);
16106 break;
16107 case CONST_CAST_EXPR:
16108 r = build_const_cast (type, op, complain);
16109 break;
16110 case DYNAMIC_CAST_EXPR:
16111 r = build_dynamic_cast (type, op, complain);
16112 break;
16113 case STATIC_CAST_EXPR:
16114 r = build_static_cast (type, op, complain);
16115 break;
16116 default:
16117 gcc_unreachable ();
16118 }
16119
16120 RETURN (r);
16121 }
16122
16123 case POSTDECREMENT_EXPR:
16124 case POSTINCREMENT_EXPR:
16125 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
16126 args, complain, in_decl);
16127 RETURN (build_x_unary_op (input_location, TREE_CODE (t), op1,
16128 complain|decltype_flag));
16129
16130 case PREDECREMENT_EXPR:
16131 case PREINCREMENT_EXPR:
16132 case NEGATE_EXPR:
16133 case BIT_NOT_EXPR:
16134 case ABS_EXPR:
16135 case TRUTH_NOT_EXPR:
16136 case UNARY_PLUS_EXPR: /* Unary + */
16137 case REALPART_EXPR:
16138 case IMAGPART_EXPR:
16139 RETURN (build_x_unary_op (input_location, TREE_CODE (t),
16140 RECUR (TREE_OPERAND (t, 0)),
16141 complain|decltype_flag));
16142
16143 case FIX_TRUNC_EXPR:
16144 RETURN (cp_build_unary_op (FIX_TRUNC_EXPR, RECUR (TREE_OPERAND (t, 0)),
16145 0, complain));
16146
16147 case ADDR_EXPR:
16148 op1 = TREE_OPERAND (t, 0);
16149 if (TREE_CODE (op1) == LABEL_DECL)
16150 RETURN (finish_label_address_expr (DECL_NAME (op1),
16151 EXPR_LOCATION (op1)));
16152 if (TREE_CODE (op1) == SCOPE_REF)
16153 op1 = tsubst_qualified_id (op1, args, complain, in_decl,
16154 /*done=*/true, /*address_p=*/true);
16155 else
16156 op1 = tsubst_non_call_postfix_expression (op1, args, complain,
16157 in_decl);
16158 RETURN (build_x_unary_op (input_location, ADDR_EXPR, op1,
16159 complain|decltype_flag));
16160
16161 case PLUS_EXPR:
16162 case MINUS_EXPR:
16163 case MULT_EXPR:
16164 case TRUNC_DIV_EXPR:
16165 case CEIL_DIV_EXPR:
16166 case FLOOR_DIV_EXPR:
16167 case ROUND_DIV_EXPR:
16168 case EXACT_DIV_EXPR:
16169 case BIT_AND_EXPR:
16170 case BIT_IOR_EXPR:
16171 case BIT_XOR_EXPR:
16172 case TRUNC_MOD_EXPR:
16173 case FLOOR_MOD_EXPR:
16174 case TRUTH_ANDIF_EXPR:
16175 case TRUTH_ORIF_EXPR:
16176 case TRUTH_AND_EXPR:
16177 case TRUTH_OR_EXPR:
16178 case RSHIFT_EXPR:
16179 case LSHIFT_EXPR:
16180 case RROTATE_EXPR:
16181 case LROTATE_EXPR:
16182 case EQ_EXPR:
16183 case NE_EXPR:
16184 case MAX_EXPR:
16185 case MIN_EXPR:
16186 case LE_EXPR:
16187 case GE_EXPR:
16188 case LT_EXPR:
16189 case GT_EXPR:
16190 case MEMBER_REF:
16191 case DOTSTAR_EXPR:
16192 {
16193 warning_sentinel s1(warn_type_limits);
16194 warning_sentinel s2(warn_div_by_zero);
16195 warning_sentinel s3(warn_logical_op);
16196 warning_sentinel s4(warn_tautological_compare);
16197 tree op0 = RECUR (TREE_OPERAND (t, 0));
16198 tree op1 = RECUR (TREE_OPERAND (t, 1));
16199 tree r = build_x_binary_op
16200 (input_location, TREE_CODE (t),
16201 op0,
16202 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
16203 ? ERROR_MARK
16204 : TREE_CODE (TREE_OPERAND (t, 0))),
16205 op1,
16206 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
16207 ? ERROR_MARK
16208 : TREE_CODE (TREE_OPERAND (t, 1))),
16209 /*overload=*/NULL,
16210 complain|decltype_flag);
16211 if (EXPR_P (r) && TREE_NO_WARNING (t))
16212 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
16213
16214 RETURN (r);
16215 }
16216
16217 case POINTER_PLUS_EXPR:
16218 {
16219 tree op0 = RECUR (TREE_OPERAND (t, 0));
16220 tree op1 = RECUR (TREE_OPERAND (t, 1));
16221 return fold_build_pointer_plus (op0, op1);
16222 }
16223
16224 case SCOPE_REF:
16225 RETURN (tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
16226 /*address_p=*/false));
16227 case ARRAY_REF:
16228 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
16229 args, complain, in_decl);
16230 RETURN (build_x_array_ref (EXPR_LOCATION (t), op1,
16231 RECUR (TREE_OPERAND (t, 1)),
16232 complain|decltype_flag));
16233
16234 case ARRAY_NOTATION_REF:
16235 {
16236 tree start_index, length, stride;
16237 op1 = tsubst_non_call_postfix_expression (ARRAY_NOTATION_ARRAY (t),
16238 args, complain, in_decl);
16239 start_index = RECUR (ARRAY_NOTATION_START (t));
16240 length = RECUR (ARRAY_NOTATION_LENGTH (t));
16241 stride = RECUR (ARRAY_NOTATION_STRIDE (t));
16242 RETURN (build_array_notation_ref (EXPR_LOCATION (t), op1, start_index,
16243 length, stride, TREE_TYPE (op1)));
16244 }
16245 case SIZEOF_EXPR:
16246 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0))
16247 || ARGUMENT_PACK_P (TREE_OPERAND (t, 0)))
16248 RETURN (tsubst_copy (t, args, complain, in_decl));
16249 /* Fall through */
16250
16251 case ALIGNOF_EXPR:
16252 {
16253 tree r;
16254
16255 op1 = TREE_OPERAND (t, 0);
16256 if (TREE_CODE (t) == SIZEOF_EXPR && SIZEOF_EXPR_TYPE_P (t))
16257 op1 = TREE_TYPE (op1);
16258 if (!args)
16259 {
16260 /* When there are no ARGS, we are trying to evaluate a
16261 non-dependent expression from the parser. Trying to do
16262 the substitutions may not work. */
16263 if (!TYPE_P (op1))
16264 op1 = TREE_TYPE (op1);
16265 }
16266 else
16267 {
16268 ++cp_unevaluated_operand;
16269 ++c_inhibit_evaluation_warnings;
16270 if (TYPE_P (op1))
16271 op1 = tsubst (op1, args, complain, in_decl);
16272 else
16273 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
16274 /*function_p=*/false,
16275 /*integral_constant_expression_p=*/
16276 false);
16277 --cp_unevaluated_operand;
16278 --c_inhibit_evaluation_warnings;
16279 }
16280 if (TYPE_P (op1))
16281 r = cxx_sizeof_or_alignof_type (op1, TREE_CODE (t),
16282 complain & tf_error);
16283 else
16284 r = cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t),
16285 complain & tf_error);
16286 if (TREE_CODE (t) == SIZEOF_EXPR && r != error_mark_node)
16287 {
16288 if (TREE_CODE (r) != SIZEOF_EXPR || TYPE_P (op1))
16289 {
16290 if (!processing_template_decl && TYPE_P (op1))
16291 {
16292 r = build_min (SIZEOF_EXPR, size_type_node,
16293 build1 (NOP_EXPR, op1, error_mark_node));
16294 SIZEOF_EXPR_TYPE_P (r) = 1;
16295 }
16296 else
16297 r = build_min (SIZEOF_EXPR, size_type_node, op1);
16298 TREE_SIDE_EFFECTS (r) = 0;
16299 TREE_READONLY (r) = 1;
16300 }
16301 SET_EXPR_LOCATION (r, EXPR_LOCATION (t));
16302 }
16303 RETURN (r);
16304 }
16305
16306 case AT_ENCODE_EXPR:
16307 {
16308 op1 = TREE_OPERAND (t, 0);
16309 ++cp_unevaluated_operand;
16310 ++c_inhibit_evaluation_warnings;
16311 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
16312 /*function_p=*/false,
16313 /*integral_constant_expression_p=*/false);
16314 --cp_unevaluated_operand;
16315 --c_inhibit_evaluation_warnings;
16316 RETURN (objc_build_encode_expr (op1));
16317 }
16318
16319 case NOEXCEPT_EXPR:
16320 op1 = TREE_OPERAND (t, 0);
16321 ++cp_unevaluated_operand;
16322 ++c_inhibit_evaluation_warnings;
16323 ++cp_noexcept_operand;
16324 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
16325 /*function_p=*/false,
16326 /*integral_constant_expression_p=*/false);
16327 --cp_unevaluated_operand;
16328 --c_inhibit_evaluation_warnings;
16329 --cp_noexcept_operand;
16330 RETURN (finish_noexcept_expr (op1, complain));
16331
16332 case MODOP_EXPR:
16333 {
16334 warning_sentinel s(warn_div_by_zero);
16335 tree lhs = RECUR (TREE_OPERAND (t, 0));
16336 tree rhs = RECUR (TREE_OPERAND (t, 2));
16337 tree r = build_x_modify_expr
16338 (EXPR_LOCATION (t), lhs, TREE_CODE (TREE_OPERAND (t, 1)), rhs,
16339 complain|decltype_flag);
16340 /* TREE_NO_WARNING must be set if either the expression was
16341 parenthesized or it uses an operator such as >>= rather
16342 than plain assignment. In the former case, it was already
16343 set and must be copied. In the latter case,
16344 build_x_modify_expr sets it and it must not be reset
16345 here. */
16346 if (TREE_NO_WARNING (t))
16347 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
16348
16349 RETURN (r);
16350 }
16351
16352 case ARROW_EXPR:
16353 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
16354 args, complain, in_decl);
16355 /* Remember that there was a reference to this entity. */
16356 if (DECL_P (op1)
16357 && !mark_used (op1, complain) && !(complain & tf_error))
16358 RETURN (error_mark_node);
16359 RETURN (build_x_arrow (input_location, op1, complain));
16360
16361 case NEW_EXPR:
16362 {
16363 tree placement = RECUR (TREE_OPERAND (t, 0));
16364 tree init = RECUR (TREE_OPERAND (t, 3));
16365 vec<tree, va_gc> *placement_vec;
16366 vec<tree, va_gc> *init_vec;
16367 tree ret;
16368
16369 if (placement == NULL_TREE)
16370 placement_vec = NULL;
16371 else
16372 {
16373 placement_vec = make_tree_vector ();
16374 for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
16375 vec_safe_push (placement_vec, TREE_VALUE (placement));
16376 }
16377
16378 /* If there was an initializer in the original tree, but it
16379 instantiated to an empty list, then we should pass a
16380 non-NULL empty vector to tell build_new that it was an
16381 empty initializer() rather than no initializer. This can
16382 only happen when the initializer is a pack expansion whose
16383 parameter packs are of length zero. */
16384 if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
16385 init_vec = NULL;
16386 else
16387 {
16388 init_vec = make_tree_vector ();
16389 if (init == void_node)
16390 gcc_assert (init_vec != NULL);
16391 else
16392 {
16393 for (; init != NULL_TREE; init = TREE_CHAIN (init))
16394 vec_safe_push (init_vec, TREE_VALUE (init));
16395 }
16396 }
16397
16398 tree op1 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
16399 tree op2 = RECUR (TREE_OPERAND (t, 2));
16400 ret = build_new (&placement_vec, op1, op2, &init_vec,
16401 NEW_EXPR_USE_GLOBAL (t),
16402 complain);
16403
16404 if (placement_vec != NULL)
16405 release_tree_vector (placement_vec);
16406 if (init_vec != NULL)
16407 release_tree_vector (init_vec);
16408
16409 RETURN (ret);
16410 }
16411
16412 case DELETE_EXPR:
16413 {
16414 tree op0 = RECUR (TREE_OPERAND (t, 0));
16415 tree op1 = RECUR (TREE_OPERAND (t, 1));
16416 RETURN (delete_sanity (op0, op1,
16417 DELETE_EXPR_USE_VEC (t),
16418 DELETE_EXPR_USE_GLOBAL (t),
16419 complain));
16420 }
16421
16422 case COMPOUND_EXPR:
16423 {
16424 tree op0 = tsubst_copy_and_build (TREE_OPERAND (t, 0), args,
16425 complain & ~tf_decltype, in_decl,
16426 /*function_p=*/false,
16427 integral_constant_expression_p);
16428 RETURN (build_x_compound_expr (EXPR_LOCATION (t),
16429 op0,
16430 RECUR (TREE_OPERAND (t, 1)),
16431 complain|decltype_flag));
16432 }
16433
16434 case CALL_EXPR:
16435 {
16436 tree function;
16437 vec<tree, va_gc> *call_args;
16438 unsigned int nargs, i;
16439 bool qualified_p;
16440 bool koenig_p;
16441 tree ret;
16442
16443 function = CALL_EXPR_FN (t);
16444 /* When we parsed the expression, we determined whether or
16445 not Koenig lookup should be performed. */
16446 koenig_p = KOENIG_LOOKUP_P (t);
16447 if (TREE_CODE (function) == SCOPE_REF)
16448 {
16449 qualified_p = true;
16450 function = tsubst_qualified_id (function, args, complain, in_decl,
16451 /*done=*/false,
16452 /*address_p=*/false);
16453 }
16454 else if (koenig_p && identifier_p (function))
16455 {
16456 /* Do nothing; calling tsubst_copy_and_build on an identifier
16457 would incorrectly perform unqualified lookup again.
16458
16459 Note that we can also have an IDENTIFIER_NODE if the earlier
16460 unqualified lookup found a member function; in that case
16461 koenig_p will be false and we do want to do the lookup
16462 again to find the instantiated member function.
16463
16464 FIXME but doing that causes c++/15272, so we need to stop
16465 using IDENTIFIER_NODE in that situation. */
16466 qualified_p = false;
16467 }
16468 else
16469 {
16470 if (TREE_CODE (function) == COMPONENT_REF)
16471 {
16472 tree op = TREE_OPERAND (function, 1);
16473
16474 qualified_p = (TREE_CODE (op) == SCOPE_REF
16475 || (BASELINK_P (op)
16476 && BASELINK_QUALIFIED_P (op)));
16477 }
16478 else
16479 qualified_p = false;
16480
16481 if (TREE_CODE (function) == ADDR_EXPR
16482 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
16483 /* Avoid error about taking the address of a constructor. */
16484 function = TREE_OPERAND (function, 0);
16485
16486 function = tsubst_copy_and_build (function, args, complain,
16487 in_decl,
16488 !qualified_p,
16489 integral_constant_expression_p);
16490
16491 if (BASELINK_P (function))
16492 qualified_p = true;
16493 }
16494
16495 nargs = call_expr_nargs (t);
16496 call_args = make_tree_vector ();
16497 for (i = 0; i < nargs; ++i)
16498 {
16499 tree arg = CALL_EXPR_ARG (t, i);
16500
16501 if (!PACK_EXPANSION_P (arg))
16502 vec_safe_push (call_args, RECUR (CALL_EXPR_ARG (t, i)));
16503 else
16504 {
16505 /* Expand the pack expansion and push each entry onto
16506 CALL_ARGS. */
16507 arg = tsubst_pack_expansion (arg, args, complain, in_decl);
16508 if (TREE_CODE (arg) == TREE_VEC)
16509 {
16510 unsigned int len, j;
16511
16512 len = TREE_VEC_LENGTH (arg);
16513 for (j = 0; j < len; ++j)
16514 {
16515 tree value = TREE_VEC_ELT (arg, j);
16516 if (value != NULL_TREE)
16517 value = convert_from_reference (value);
16518 vec_safe_push (call_args, value);
16519 }
16520 }
16521 else
16522 {
16523 /* A partial substitution. Add one entry. */
16524 vec_safe_push (call_args, arg);
16525 }
16526 }
16527 }
16528
16529 /* We do not perform argument-dependent lookup if normal
16530 lookup finds a non-function, in accordance with the
16531 expected resolution of DR 218. */
16532 if (koenig_p
16533 && ((is_overloaded_fn (function)
16534 /* If lookup found a member function, the Koenig lookup is
16535 not appropriate, even if an unqualified-name was used
16536 to denote the function. */
16537 && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
16538 || identifier_p (function))
16539 /* Only do this when substitution turns a dependent call
16540 into a non-dependent call. */
16541 && type_dependent_expression_p_push (t)
16542 && !any_type_dependent_arguments_p (call_args))
16543 function = perform_koenig_lookup (function, call_args, tf_none);
16544
16545 if (identifier_p (function)
16546 && !any_type_dependent_arguments_p (call_args))
16547 {
16548 if (koenig_p && (complain & tf_warning_or_error))
16549 {
16550 /* For backwards compatibility and good diagnostics, try
16551 the unqualified lookup again if we aren't in SFINAE
16552 context. */
16553 tree unq = (tsubst_copy_and_build
16554 (function, args, complain, in_decl, true,
16555 integral_constant_expression_p));
16556 if (unq == error_mark_node)
16557 RETURN (error_mark_node);
16558
16559 if (unq != function)
16560 {
16561 tree fn = unq;
16562 if (INDIRECT_REF_P (fn))
16563 fn = TREE_OPERAND (fn, 0);
16564 if (TREE_CODE (fn) == COMPONENT_REF)
16565 fn = TREE_OPERAND (fn, 1);
16566 if (is_overloaded_fn (fn))
16567 fn = get_first_fn (fn);
16568 if (permerror (EXPR_LOC_OR_LOC (t, input_location),
16569 "%qD was not declared in this scope, "
16570 "and no declarations were found by "
16571 "argument-dependent lookup at the point "
16572 "of instantiation", function))
16573 {
16574 if (!DECL_P (fn))
16575 /* Can't say anything more. */;
16576 else if (DECL_CLASS_SCOPE_P (fn))
16577 {
16578 location_t loc = EXPR_LOC_OR_LOC (t,
16579 input_location);
16580 inform (loc,
16581 "declarations in dependent base %qT are "
16582 "not found by unqualified lookup",
16583 DECL_CLASS_CONTEXT (fn));
16584 if (current_class_ptr)
16585 inform (loc,
16586 "use %<this->%D%> instead", function);
16587 else
16588 inform (loc,
16589 "use %<%T::%D%> instead",
16590 current_class_name, function);
16591 }
16592 else
16593 inform (DECL_SOURCE_LOCATION (fn),
16594 "%qD declared here, later in the "
16595 "translation unit", fn);
16596 }
16597 function = unq;
16598 }
16599 }
16600 if (identifier_p (function))
16601 {
16602 if (complain & tf_error)
16603 unqualified_name_lookup_error (function);
16604 release_tree_vector (call_args);
16605 RETURN (error_mark_node);
16606 }
16607 }
16608
16609 /* Remember that there was a reference to this entity. */
16610 if (DECL_P (function)
16611 && !mark_used (function, complain) && !(complain & tf_error))
16612 RETURN (error_mark_node);
16613
16614 /* Put back tf_decltype for the actual call. */
16615 complain |= decltype_flag;
16616
16617 if (TREE_CODE (function) == OFFSET_REF)
16618 ret = build_offset_ref_call_from_tree (function, &call_args,
16619 complain);
16620 else if (TREE_CODE (function) == COMPONENT_REF)
16621 {
16622 tree instance = TREE_OPERAND (function, 0);
16623 tree fn = TREE_OPERAND (function, 1);
16624
16625 if (processing_template_decl
16626 && (type_dependent_expression_p (instance)
16627 || (!BASELINK_P (fn)
16628 && TREE_CODE (fn) != FIELD_DECL)
16629 || type_dependent_expression_p (fn)
16630 || any_type_dependent_arguments_p (call_args)))
16631 ret = build_nt_call_vec (function, call_args);
16632 else if (!BASELINK_P (fn))
16633 ret = finish_call_expr (function, &call_args,
16634 /*disallow_virtual=*/false,
16635 /*koenig_p=*/false,
16636 complain);
16637 else
16638 ret = (build_new_method_call
16639 (instance, fn,
16640 &call_args, NULL_TREE,
16641 qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
16642 /*fn_p=*/NULL,
16643 complain));
16644 }
16645 else
16646 ret = finish_call_expr (function, &call_args,
16647 /*disallow_virtual=*/qualified_p,
16648 koenig_p,
16649 complain);
16650
16651 release_tree_vector (call_args);
16652
16653 RETURN (ret);
16654 }
16655
16656 case COND_EXPR:
16657 {
16658 tree cond = RECUR (TREE_OPERAND (t, 0));
16659 tree folded_cond = fold_non_dependent_expr (cond);
16660 tree exp1, exp2;
16661
16662 if (TREE_CODE (folded_cond) == INTEGER_CST)
16663 {
16664 if (integer_zerop (folded_cond))
16665 {
16666 ++c_inhibit_evaluation_warnings;
16667 exp1 = RECUR (TREE_OPERAND (t, 1));
16668 --c_inhibit_evaluation_warnings;
16669 exp2 = RECUR (TREE_OPERAND (t, 2));
16670 }
16671 else
16672 {
16673 exp1 = RECUR (TREE_OPERAND (t, 1));
16674 ++c_inhibit_evaluation_warnings;
16675 exp2 = RECUR (TREE_OPERAND (t, 2));
16676 --c_inhibit_evaluation_warnings;
16677 }
16678 cond = folded_cond;
16679 }
16680 else
16681 {
16682 exp1 = RECUR (TREE_OPERAND (t, 1));
16683 exp2 = RECUR (TREE_OPERAND (t, 2));
16684 }
16685
16686 RETURN (build_x_conditional_expr (EXPR_LOCATION (t),
16687 cond, exp1, exp2, complain));
16688 }
16689
16690 case PSEUDO_DTOR_EXPR:
16691 {
16692 tree op0 = RECUR (TREE_OPERAND (t, 0));
16693 tree op1 = RECUR (TREE_OPERAND (t, 1));
16694 tree op2 = tsubst (TREE_OPERAND (t, 2), args, complain, in_decl);
16695 RETURN (finish_pseudo_destructor_expr (op0, op1, op2,
16696 input_location));
16697 }
16698
16699 case TREE_LIST:
16700 {
16701 tree purpose, value, chain;
16702
16703 if (t == void_list_node)
16704 RETURN (t);
16705
16706 if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
16707 || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
16708 {
16709 /* We have pack expansions, so expand those and
16710 create a new list out of it. */
16711 tree purposevec = NULL_TREE;
16712 tree valuevec = NULL_TREE;
16713 tree chain;
16714 int i, len = -1;
16715
16716 /* Expand the argument expressions. */
16717 if (TREE_PURPOSE (t))
16718 purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
16719 complain, in_decl);
16720 if (TREE_VALUE (t))
16721 valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
16722 complain, in_decl);
16723
16724 /* Build the rest of the list. */
16725 chain = TREE_CHAIN (t);
16726 if (chain && chain != void_type_node)
16727 chain = RECUR (chain);
16728
16729 /* Determine the number of arguments. */
16730 if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
16731 {
16732 len = TREE_VEC_LENGTH (purposevec);
16733 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
16734 }
16735 else if (TREE_CODE (valuevec) == TREE_VEC)
16736 len = TREE_VEC_LENGTH (valuevec);
16737 else
16738 {
16739 /* Since we only performed a partial substitution into
16740 the argument pack, we only RETURN (a single list
16741 node. */
16742 if (purposevec == TREE_PURPOSE (t)
16743 && valuevec == TREE_VALUE (t)
16744 && chain == TREE_CHAIN (t))
16745 RETURN (t);
16746
16747 RETURN (tree_cons (purposevec, valuevec, chain));
16748 }
16749
16750 /* Convert the argument vectors into a TREE_LIST */
16751 i = len;
16752 while (i > 0)
16753 {
16754 /* Grab the Ith values. */
16755 i--;
16756 purpose = purposevec ? TREE_VEC_ELT (purposevec, i)
16757 : NULL_TREE;
16758 value
16759 = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i))
16760 : NULL_TREE;
16761
16762 /* Build the list (backwards). */
16763 chain = tree_cons (purpose, value, chain);
16764 }
16765
16766 RETURN (chain);
16767 }
16768
16769 purpose = TREE_PURPOSE (t);
16770 if (purpose)
16771 purpose = RECUR (purpose);
16772 value = TREE_VALUE (t);
16773 if (value)
16774 value = RECUR (value);
16775 chain = TREE_CHAIN (t);
16776 if (chain && chain != void_type_node)
16777 chain = RECUR (chain);
16778 if (purpose == TREE_PURPOSE (t)
16779 && value == TREE_VALUE (t)
16780 && chain == TREE_CHAIN (t))
16781 RETURN (t);
16782 RETURN (tree_cons (purpose, value, chain));
16783 }
16784
16785 case COMPONENT_REF:
16786 {
16787 tree object;
16788 tree object_type;
16789 tree member;
16790 tree r;
16791
16792 object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
16793 args, complain, in_decl);
16794 /* Remember that there was a reference to this entity. */
16795 if (DECL_P (object)
16796 && !mark_used (object, complain) && !(complain & tf_error))
16797 RETURN (error_mark_node);
16798 object_type = TREE_TYPE (object);
16799
16800 member = TREE_OPERAND (t, 1);
16801 if (BASELINK_P (member))
16802 member = tsubst_baselink (member,
16803 non_reference (TREE_TYPE (object)),
16804 args, complain, in_decl);
16805 else
16806 member = tsubst_copy (member, args, complain, in_decl);
16807 if (member == error_mark_node)
16808 RETURN (error_mark_node);
16809
16810 if (type_dependent_expression_p (object))
16811 /* We can't do much here. */;
16812 else if (!CLASS_TYPE_P (object_type))
16813 {
16814 if (scalarish_type_p (object_type))
16815 {
16816 tree s = NULL_TREE;
16817 tree dtor = member;
16818
16819 if (TREE_CODE (dtor) == SCOPE_REF)
16820 {
16821 s = TREE_OPERAND (dtor, 0);
16822 dtor = TREE_OPERAND (dtor, 1);
16823 }
16824 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
16825 {
16826 dtor = TREE_OPERAND (dtor, 0);
16827 if (TYPE_P (dtor))
16828 RETURN (finish_pseudo_destructor_expr
16829 (object, s, dtor, input_location));
16830 }
16831 }
16832 }
16833 else if (TREE_CODE (member) == SCOPE_REF
16834 && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
16835 {
16836 /* Lookup the template functions now that we know what the
16837 scope is. */
16838 tree scope = TREE_OPERAND (member, 0);
16839 tree tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
16840 tree args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
16841 member = lookup_qualified_name (scope, tmpl,
16842 /*is_type_p=*/false,
16843 /*complain=*/false);
16844 if (BASELINK_P (member))
16845 {
16846 BASELINK_FUNCTIONS (member)
16847 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
16848 args);
16849 member = (adjust_result_of_qualified_name_lookup
16850 (member, BINFO_TYPE (BASELINK_BINFO (member)),
16851 object_type));
16852 }
16853 else
16854 {
16855 qualified_name_lookup_error (scope, tmpl, member,
16856 input_location);
16857 RETURN (error_mark_node);
16858 }
16859 }
16860 else if (TREE_CODE (member) == SCOPE_REF
16861 && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
16862 && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
16863 {
16864 if (complain & tf_error)
16865 {
16866 if (TYPE_P (TREE_OPERAND (member, 0)))
16867 error ("%qT is not a class or namespace",
16868 TREE_OPERAND (member, 0));
16869 else
16870 error ("%qD is not a class or namespace",
16871 TREE_OPERAND (member, 0));
16872 }
16873 RETURN (error_mark_node);
16874 }
16875 else if (TREE_CODE (member) == FIELD_DECL)
16876 {
16877 r = finish_non_static_data_member (member, object, NULL_TREE);
16878 if (TREE_CODE (r) == COMPONENT_REF)
16879 REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
16880 RETURN (r);
16881 }
16882
16883 r = finish_class_member_access_expr (object, member,
16884 /*template_p=*/false,
16885 complain);
16886 if (TREE_CODE (r) == COMPONENT_REF)
16887 REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
16888 RETURN (r);
16889 }
16890
16891 case THROW_EXPR:
16892 RETURN (build_throw
16893 (RECUR (TREE_OPERAND (t, 0))));
16894
16895 case CONSTRUCTOR:
16896 {
16897 vec<constructor_elt, va_gc> *n;
16898 constructor_elt *ce;
16899 unsigned HOST_WIDE_INT idx;
16900 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
16901 bool process_index_p;
16902 int newlen;
16903 bool need_copy_p = false;
16904 tree r;
16905
16906 if (type == error_mark_node)
16907 RETURN (error_mark_node);
16908
16909 /* digest_init will do the wrong thing if we let it. */
16910 if (type && TYPE_PTRMEMFUNC_P (type))
16911 RETURN (t);
16912
16913 /* We do not want to process the index of aggregate
16914 initializers as they are identifier nodes which will be
16915 looked up by digest_init. */
16916 process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
16917
16918 n = vec_safe_copy (CONSTRUCTOR_ELTS (t));
16919 newlen = vec_safe_length (n);
16920 FOR_EACH_VEC_SAFE_ELT (n, idx, ce)
16921 {
16922 if (ce->index && process_index_p
16923 /* An identifier index is looked up in the type
16924 being initialized, not the current scope. */
16925 && TREE_CODE (ce->index) != IDENTIFIER_NODE)
16926 ce->index = RECUR (ce->index);
16927
16928 if (PACK_EXPANSION_P (ce->value))
16929 {
16930 /* Substitute into the pack expansion. */
16931 ce->value = tsubst_pack_expansion (ce->value, args, complain,
16932 in_decl);
16933
16934 if (ce->value == error_mark_node
16935 || PACK_EXPANSION_P (ce->value))
16936 ;
16937 else if (TREE_VEC_LENGTH (ce->value) == 1)
16938 /* Just move the argument into place. */
16939 ce->value = TREE_VEC_ELT (ce->value, 0);
16940 else
16941 {
16942 /* Update the length of the final CONSTRUCTOR
16943 arguments vector, and note that we will need to
16944 copy.*/
16945 newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
16946 need_copy_p = true;
16947 }
16948 }
16949 else
16950 ce->value = RECUR (ce->value);
16951 }
16952
16953 if (need_copy_p)
16954 {
16955 vec<constructor_elt, va_gc> *old_n = n;
16956
16957 vec_alloc (n, newlen);
16958 FOR_EACH_VEC_ELT (*old_n, idx, ce)
16959 {
16960 if (TREE_CODE (ce->value) == TREE_VEC)
16961 {
16962 int i, len = TREE_VEC_LENGTH (ce->value);
16963 for (i = 0; i < len; ++i)
16964 CONSTRUCTOR_APPEND_ELT (n, 0,
16965 TREE_VEC_ELT (ce->value, i));
16966 }
16967 else
16968 CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
16969 }
16970 }
16971
16972 r = build_constructor (init_list_type_node, n);
16973 CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
16974
16975 if (TREE_HAS_CONSTRUCTOR (t))
16976 RETURN (finish_compound_literal (type, r, complain));
16977
16978 TREE_TYPE (r) = type;
16979 RETURN (r);
16980 }
16981
16982 case TYPEID_EXPR:
16983 {
16984 tree operand_0 = TREE_OPERAND (t, 0);
16985 if (TYPE_P (operand_0))
16986 {
16987 operand_0 = tsubst (operand_0, args, complain, in_decl);
16988 RETURN (get_typeid (operand_0, complain));
16989 }
16990 else
16991 {
16992 operand_0 = RECUR (operand_0);
16993 RETURN (build_typeid (operand_0, complain));
16994 }
16995 }
16996
16997 case VAR_DECL:
16998 if (!args)
16999 RETURN (t);
17000 else if (DECL_PACK_P (t))
17001 {
17002 /* We don't build decls for an instantiation of a
17003 variadic capture proxy, we instantiate the elements
17004 when needed. */
17005 gcc_assert (DECL_HAS_VALUE_EXPR_P (t));
17006 return RECUR (DECL_VALUE_EXPR (t));
17007 }
17008 /* Fall through */
17009
17010 case PARM_DECL:
17011 {
17012 tree r = tsubst_copy (t, args, complain, in_decl);
17013 /* ??? We're doing a subset of finish_id_expression here. */
17014 if (VAR_P (r)
17015 && !processing_template_decl
17016 && !cp_unevaluated_operand
17017 && (TREE_STATIC (r) || DECL_EXTERNAL (r))
17018 && CP_DECL_THREAD_LOCAL_P (r))
17019 {
17020 if (tree wrap = get_tls_wrapper_fn (r))
17021 /* Replace an evaluated use of the thread_local variable with
17022 a call to its wrapper. */
17023 r = build_cxx_call (wrap, 0, NULL, tf_warning_or_error);
17024 }
17025 else if (outer_automatic_var_p (r))
17026 {
17027 r = process_outer_var_ref (r, complain);
17028 if (is_capture_proxy (r))
17029 register_local_specialization (r, t);
17030 }
17031
17032 if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
17033 /* If the original type was a reference, we'll be wrapped in
17034 the appropriate INDIRECT_REF. */
17035 r = convert_from_reference (r);
17036 RETURN (r);
17037 }
17038
17039 case VA_ARG_EXPR:
17040 {
17041 tree op0 = RECUR (TREE_OPERAND (t, 0));
17042 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
17043 RETURN (build_x_va_arg (EXPR_LOCATION (t), op0, type));
17044 }
17045
17046 case OFFSETOF_EXPR:
17047 RETURN (finish_offsetof (RECUR (TREE_OPERAND (t, 0)),
17048 EXPR_LOCATION (t)));
17049
17050 case TRAIT_EXPR:
17051 {
17052 tree type1 = tsubst (TRAIT_EXPR_TYPE1 (t), args,
17053 complain, in_decl);
17054
17055 tree type2 = TRAIT_EXPR_TYPE2 (t);
17056 if (type2 && TREE_CODE (type2) == TREE_LIST)
17057 type2 = RECUR (type2);
17058 else if (type2)
17059 type2 = tsubst (type2, args, complain, in_decl);
17060
17061 RETURN (finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2));
17062 }
17063
17064 case STMT_EXPR:
17065 {
17066 tree old_stmt_expr = cur_stmt_expr;
17067 tree stmt_expr = begin_stmt_expr ();
17068
17069 cur_stmt_expr = stmt_expr;
17070 tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
17071 integral_constant_expression_p);
17072 stmt_expr = finish_stmt_expr (stmt_expr, false);
17073 cur_stmt_expr = old_stmt_expr;
17074
17075 /* If the resulting list of expression statement is empty,
17076 fold it further into void_node. */
17077 if (empty_expr_stmt_p (stmt_expr))
17078 stmt_expr = void_node;
17079
17080 RETURN (stmt_expr);
17081 }
17082
17083 case LAMBDA_EXPR:
17084 {
17085 tree r = build_lambda_expr ();
17086
17087 tree type = tsubst (LAMBDA_EXPR_CLOSURE (t), args, complain, NULL_TREE);
17088 LAMBDA_EXPR_CLOSURE (r) = type;
17089 CLASSTYPE_LAMBDA_EXPR (type) = r;
17090
17091 LAMBDA_EXPR_LOCATION (r)
17092 = LAMBDA_EXPR_LOCATION (t);
17093 LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
17094 = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
17095 LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
17096 LAMBDA_EXPR_DISCRIMINATOR (r)
17097 = (LAMBDA_EXPR_DISCRIMINATOR (t));
17098 tree scope = LAMBDA_EXPR_EXTRA_SCOPE (t);
17099 if (!scope)
17100 /* No substitution needed. */;
17101 else if (VAR_OR_FUNCTION_DECL_P (scope))
17102 /* For a function or variable scope, we want to use tsubst so that we
17103 don't complain about referring to an auto before deduction. */
17104 scope = tsubst (scope, args, complain, in_decl);
17105 else if (TREE_CODE (scope) == PARM_DECL)
17106 {
17107 /* Look up the parameter we want directly, as tsubst_copy
17108 doesn't do what we need. */
17109 tree fn = tsubst (DECL_CONTEXT (scope), args, complain, in_decl);
17110 tree parm = FUNCTION_FIRST_USER_PARM (fn);
17111 while (DECL_PARM_INDEX (parm) != DECL_PARM_INDEX (scope))
17112 parm = DECL_CHAIN (parm);
17113 scope = parm;
17114 /* FIXME Work around the parm not having DECL_CONTEXT set. */
17115 if (DECL_CONTEXT (scope) == NULL_TREE)
17116 DECL_CONTEXT (scope) = fn;
17117 }
17118 else if (TREE_CODE (scope) == FIELD_DECL)
17119 /* For a field, use tsubst_copy so that we look up the existing field
17120 rather than build a new one. */
17121 scope = RECUR (scope);
17122 else
17123 gcc_unreachable ();
17124 LAMBDA_EXPR_EXTRA_SCOPE (r) = scope;
17125
17126 gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (t) == NULL_TREE
17127 && LAMBDA_EXPR_PENDING_PROXIES (t) == NULL);
17128
17129 /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set. */
17130 determine_visibility (TYPE_NAME (type));
17131 /* Now that we know visibility, instantiate the type so we have a
17132 declaration of the op() for later calls to lambda_function. */
17133 complete_type (type);
17134
17135 if (tree fn = lambda_function (type))
17136 LAMBDA_EXPR_RETURN_TYPE (r) = TREE_TYPE (TREE_TYPE (fn));
17137
17138 LAMBDA_EXPR_THIS_CAPTURE (r) = NULL_TREE;
17139
17140 insert_pending_capture_proxies ();
17141
17142 RETURN (build_lambda_object (r));
17143 }
17144
17145 case TARGET_EXPR:
17146 /* We can get here for a constant initializer of non-dependent type.
17147 FIXME stop folding in cp_parser_initializer_clause. */
17148 {
17149 tree r = get_target_expr_sfinae (RECUR (TARGET_EXPR_INITIAL (t)),
17150 complain);
17151 RETURN (r);
17152 }
17153
17154 case TRANSACTION_EXPR:
17155 RETURN (tsubst_expr(t, args, complain, in_decl,
17156 integral_constant_expression_p));
17157
17158 case PAREN_EXPR:
17159 RETURN (finish_parenthesized_expr (RECUR (TREE_OPERAND (t, 0))));
17160
17161 case VEC_PERM_EXPR:
17162 {
17163 tree op0 = RECUR (TREE_OPERAND (t, 0));
17164 tree op1 = RECUR (TREE_OPERAND (t, 1));
17165 tree op2 = RECUR (TREE_OPERAND (t, 2));
17166 RETURN (build_x_vec_perm_expr (input_location, op0, op1, op2,
17167 complain));
17168 }
17169
17170 case REQUIRES_EXPR:
17171 RETURN (tsubst_requires_expr (t, args, complain, in_decl));
17172
17173 default:
17174 /* Handle Objective-C++ constructs, if appropriate. */
17175 {
17176 tree subst
17177 = objcp_tsubst_copy_and_build (t, args, complain,
17178 in_decl, /*function_p=*/false);
17179 if (subst)
17180 RETURN (subst);
17181 }
17182 RETURN (tsubst_copy (t, args, complain, in_decl));
17183 }
17184
17185 #undef RECUR
17186 #undef RETURN
17187 out:
17188 input_location = loc;
17189 return retval;
17190 }
17191
17192 /* Verify that the instantiated ARGS are valid. For type arguments,
17193 make sure that the type's linkage is ok. For non-type arguments,
17194 make sure they are constants if they are integral or enumerations.
17195 Emit an error under control of COMPLAIN, and return TRUE on error. */
17196
17197 static bool
17198 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
17199 {
17200 if (dependent_template_arg_p (t))
17201 return false;
17202 if (ARGUMENT_PACK_P (t))
17203 {
17204 tree vec = ARGUMENT_PACK_ARGS (t);
17205 int len = TREE_VEC_LENGTH (vec);
17206 bool result = false;
17207 int i;
17208
17209 for (i = 0; i < len; ++i)
17210 if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
17211 result = true;
17212 return result;
17213 }
17214 else if (TYPE_P (t))
17215 {
17216 /* [basic.link]: A name with no linkage (notably, the name
17217 of a class or enumeration declared in a local scope)
17218 shall not be used to declare an entity with linkage.
17219 This implies that names with no linkage cannot be used as
17220 template arguments
17221
17222 DR 757 relaxes this restriction for C++0x. */
17223 tree nt = (cxx_dialect > cxx98 ? NULL_TREE
17224 : no_linkage_check (t, /*relaxed_p=*/false));
17225
17226 if (nt)
17227 {
17228 /* DR 488 makes use of a type with no linkage cause
17229 type deduction to fail. */
17230 if (complain & tf_error)
17231 {
17232 if (TYPE_ANONYMOUS_P (nt))
17233 error ("%qT is/uses anonymous type", t);
17234 else
17235 error ("template argument for %qD uses local type %qT",
17236 tmpl, t);
17237 }
17238 return true;
17239 }
17240 /* In order to avoid all sorts of complications, we do not
17241 allow variably-modified types as template arguments. */
17242 else if (variably_modified_type_p (t, NULL_TREE))
17243 {
17244 if (complain & tf_error)
17245 error ("%qT is a variably modified type", t);
17246 return true;
17247 }
17248 }
17249 /* Class template and alias template arguments should be OK. */
17250 else if (DECL_TYPE_TEMPLATE_P (t))
17251 ;
17252 /* A non-type argument of integral or enumerated type must be a
17253 constant. */
17254 else if (TREE_TYPE (t)
17255 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
17256 && !REFERENCE_REF_P (t)
17257 && !TREE_CONSTANT (t))
17258 {
17259 if (complain & tf_error)
17260 error ("integral expression %qE is not constant", t);
17261 return true;
17262 }
17263 return false;
17264 }
17265
17266 static bool
17267 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
17268 {
17269 int ix, len = DECL_NTPARMS (tmpl);
17270 bool result = false;
17271
17272 for (ix = 0; ix != len; ix++)
17273 {
17274 if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
17275 result = true;
17276 }
17277 if (result && (complain & tf_error))
17278 error (" trying to instantiate %qD", tmpl);
17279 return result;
17280 }
17281
17282 /* We're out of SFINAE context now, so generate diagnostics for the access
17283 errors we saw earlier when instantiating D from TMPL and ARGS. */
17284
17285 static void
17286 recheck_decl_substitution (tree d, tree tmpl, tree args)
17287 {
17288 tree pattern = DECL_TEMPLATE_RESULT (tmpl);
17289 tree type = TREE_TYPE (pattern);
17290 location_t loc = input_location;
17291
17292 push_access_scope (d);
17293 push_deferring_access_checks (dk_no_deferred);
17294 input_location = DECL_SOURCE_LOCATION (pattern);
17295 tsubst (type, args, tf_warning_or_error, d);
17296 input_location = loc;
17297 pop_deferring_access_checks ();
17298 pop_access_scope (d);
17299 }
17300
17301 /* Instantiate the indicated variable, function, or alias template TMPL with
17302 the template arguments in TARG_PTR. */
17303
17304 static tree
17305 instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain)
17306 {
17307 tree targ_ptr = orig_args;
17308 tree fndecl;
17309 tree gen_tmpl;
17310 tree spec;
17311 bool access_ok = true;
17312
17313 if (tmpl == error_mark_node)
17314 return error_mark_node;
17315
17316 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
17317
17318 /* If this function is a clone, handle it specially. */
17319 if (DECL_CLONED_FUNCTION_P (tmpl))
17320 {
17321 tree spec;
17322 tree clone;
17323
17324 /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
17325 DECL_CLONED_FUNCTION. */
17326 spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
17327 targ_ptr, complain);
17328 if (spec == error_mark_node)
17329 return error_mark_node;
17330
17331 /* Look for the clone. */
17332 FOR_EACH_CLONE (clone, spec)
17333 if (DECL_NAME (clone) == DECL_NAME (tmpl))
17334 return clone;
17335 /* We should always have found the clone by now. */
17336 gcc_unreachable ();
17337 return NULL_TREE;
17338 }
17339
17340 if (targ_ptr == error_mark_node)
17341 return error_mark_node;
17342
17343 /* Check to see if we already have this specialization. */
17344 gen_tmpl = most_general_template (tmpl);
17345 if (TMPL_ARGS_DEPTH (targ_ptr)
17346 < TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl)))
17347 /* targ_ptr only has the innermost template args, so add the outer ones
17348 from tmpl, which could be either a partial instantiation or gen_tmpl (in
17349 the case of a non-dependent call within a template definition). */
17350 targ_ptr = (add_outermost_template_args
17351 (DECL_TI_ARGS (DECL_TEMPLATE_RESULT (tmpl)),
17352 targ_ptr));
17353
17354 /* It would be nice to avoid hashing here and then again in tsubst_decl,
17355 but it doesn't seem to be on the hot path. */
17356 spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
17357
17358 gcc_assert (tmpl == gen_tmpl
17359 || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
17360 == spec)
17361 || fndecl == NULL_TREE);
17362
17363 if (spec != NULL_TREE)
17364 {
17365 if (FNDECL_HAS_ACCESS_ERRORS (spec))
17366 {
17367 if (complain & tf_error)
17368 recheck_decl_substitution (spec, gen_tmpl, targ_ptr);
17369 return error_mark_node;
17370 }
17371 return spec;
17372 }
17373
17374 if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
17375 complain))
17376 return error_mark_node;
17377
17378 /* We are building a FUNCTION_DECL, during which the access of its
17379 parameters and return types have to be checked. However this
17380 FUNCTION_DECL which is the desired context for access checking
17381 is not built yet. We solve this chicken-and-egg problem by
17382 deferring all checks until we have the FUNCTION_DECL. */
17383 push_deferring_access_checks (dk_deferred);
17384
17385 /* Instantiation of the function happens in the context of the function
17386 template, not the context of the overload resolution we're doing. */
17387 push_to_top_level ();
17388 /* If there are dependent arguments, e.g. because we're doing partial
17389 ordering, make sure processing_template_decl stays set. */
17390 if (uses_template_parms (targ_ptr))
17391 ++processing_template_decl;
17392 if (DECL_CLASS_SCOPE_P (gen_tmpl))
17393 {
17394 tree ctx = tsubst_aggr_type (DECL_CONTEXT (gen_tmpl), targ_ptr,
17395 complain, gen_tmpl, true);
17396 push_nested_class (ctx);
17397 }
17398
17399 tree pattern = DECL_TEMPLATE_RESULT (gen_tmpl);
17400
17401 if (VAR_P (pattern))
17402 {
17403 /* We need to determine if we're using a partial or explicit
17404 specialization now, because the type of the variable could be
17405 different. */
17406 tree tid = lookup_template_variable (gen_tmpl, targ_ptr);
17407 tree elt = most_specialized_partial_spec (tid, complain);
17408 if (elt == error_mark_node)
17409 pattern = error_mark_node;
17410 else if (elt)
17411 {
17412 tmpl = TREE_VALUE (elt);
17413 pattern = DECL_TEMPLATE_RESULT (tmpl);
17414 targ_ptr = TREE_PURPOSE (elt);
17415 }
17416 }
17417
17418 /* Substitute template parameters to obtain the specialization. */
17419 fndecl = tsubst (pattern, targ_ptr, complain, gen_tmpl);
17420 if (DECL_CLASS_SCOPE_P (gen_tmpl))
17421 pop_nested_class ();
17422 pop_from_top_level ();
17423
17424 if (fndecl == error_mark_node)
17425 {
17426 pop_deferring_access_checks ();
17427 return error_mark_node;
17428 }
17429
17430 /* The DECL_TI_TEMPLATE should always be the immediate parent
17431 template, not the most general template. */
17432 DECL_TI_TEMPLATE (fndecl) = tmpl;
17433 DECL_TI_ARGS (fndecl) = targ_ptr;
17434
17435 /* Now we know the specialization, compute access previously
17436 deferred. */
17437 push_access_scope (fndecl);
17438 if (!perform_deferred_access_checks (complain))
17439 access_ok = false;
17440 pop_access_scope (fndecl);
17441 pop_deferring_access_checks ();
17442
17443 /* If we've just instantiated the main entry point for a function,
17444 instantiate all the alternate entry points as well. We do this
17445 by cloning the instantiation of the main entry point, not by
17446 instantiating the template clones. */
17447 if (DECL_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (DECL_CHAIN (gen_tmpl)))
17448 clone_function_decl (fndecl, /*update_method_vec_p=*/0);
17449
17450 if (!access_ok)
17451 {
17452 if (!(complain & tf_error))
17453 {
17454 /* Remember to reinstantiate when we're out of SFINAE so the user
17455 can see the errors. */
17456 FNDECL_HAS_ACCESS_ERRORS (fndecl) = true;
17457 }
17458 return error_mark_node;
17459 }
17460 return fndecl;
17461 }
17462
17463 /* Wrapper for instantiate_template_1. */
17464
17465 tree
17466 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
17467 {
17468 tree ret;
17469 timevar_push (TV_TEMPLATE_INST);
17470 ret = instantiate_template_1 (tmpl, orig_args, complain);
17471 timevar_pop (TV_TEMPLATE_INST);
17472 return ret;
17473 }
17474
17475 /* Instantiate the alias template TMPL with ARGS. Also push a template
17476 instantiation level, which instantiate_template doesn't do because
17477 functions and variables have sufficient context established by the
17478 callers. */
17479
17480 static tree
17481 instantiate_alias_template (tree tmpl, tree args, tsubst_flags_t complain)
17482 {
17483 struct pending_template *old_last_pend = last_pending_template;
17484 struct tinst_level *old_error_tinst = last_error_tinst_level;
17485 if (tmpl == error_mark_node || args == error_mark_node)
17486 return error_mark_node;
17487 tree tinst = build_tree_list (tmpl, args);
17488 if (!push_tinst_level (tinst))
17489 {
17490 ggc_free (tinst);
17491 return error_mark_node;
17492 }
17493
17494 args =
17495 coerce_innermost_template_parms (DECL_TEMPLATE_PARMS (tmpl),
17496 args, tmpl, complain,
17497 /*require_all_args=*/true,
17498 /*use_default_args=*/true);
17499
17500 tree r = instantiate_template (tmpl, args, complain);
17501 pop_tinst_level ();
17502 /* We can't free this if a pending_template entry or last_error_tinst_level
17503 is pointing at it. */
17504 if (last_pending_template == old_last_pend
17505 && last_error_tinst_level == old_error_tinst)
17506 ggc_free (tinst);
17507
17508 return r;
17509 }
17510
17511 /* PARM is a template parameter pack for FN. Returns true iff
17512 PARM is used in a deducible way in the argument list of FN. */
17513
17514 static bool
17515 pack_deducible_p (tree parm, tree fn)
17516 {
17517 tree t = FUNCTION_FIRST_USER_PARMTYPE (fn);
17518 for (; t; t = TREE_CHAIN (t))
17519 {
17520 tree type = TREE_VALUE (t);
17521 tree packs;
17522 if (!PACK_EXPANSION_P (type))
17523 continue;
17524 for (packs = PACK_EXPANSION_PARAMETER_PACKS (type);
17525 packs; packs = TREE_CHAIN (packs))
17526 if (template_args_equal (TREE_VALUE (packs), parm))
17527 {
17528 /* The template parameter pack is used in a function parameter
17529 pack. If this is the end of the parameter list, the
17530 template parameter pack is deducible. */
17531 if (TREE_CHAIN (t) == void_list_node)
17532 return true;
17533 else
17534 /* Otherwise, not. Well, it could be deduced from
17535 a non-pack parameter, but doing so would end up with
17536 a deduction mismatch, so don't bother. */
17537 return false;
17538 }
17539 }
17540 /* The template parameter pack isn't used in any function parameter
17541 packs, but it might be used deeper, e.g. tuple<Args...>. */
17542 return true;
17543 }
17544
17545 /* The FN is a TEMPLATE_DECL for a function. ARGS is an array with
17546 NARGS elements of the arguments that are being used when calling
17547 it. TARGS is a vector into which the deduced template arguments
17548 are placed.
17549
17550 Returns either a FUNCTION_DECL for the matching specialization of FN or
17551 NULL_TREE if no suitable specialization can be found. If EXPLAIN_P is
17552 true, diagnostics will be printed to explain why it failed.
17553
17554 If FN is a conversion operator, or we are trying to produce a specific
17555 specialization, RETURN_TYPE is the return type desired.
17556
17557 The EXPLICIT_TARGS are explicit template arguments provided via a
17558 template-id.
17559
17560 The parameter STRICT is one of:
17561
17562 DEDUCE_CALL:
17563 We are deducing arguments for a function call, as in
17564 [temp.deduct.call]. If RETURN_TYPE is non-null, we are
17565 deducing arguments for a call to the result of a conversion
17566 function template, as in [over.call.object].
17567
17568 DEDUCE_CONV:
17569 We are deducing arguments for a conversion function, as in
17570 [temp.deduct.conv].
17571
17572 DEDUCE_EXACT:
17573 We are deducing arguments when doing an explicit instantiation
17574 as in [temp.explicit], when determining an explicit specialization
17575 as in [temp.expl.spec], or when taking the address of a function
17576 template, as in [temp.deduct.funcaddr]. */
17577
17578 tree
17579 fn_type_unification (tree fn,
17580 tree explicit_targs,
17581 tree targs,
17582 const tree *args,
17583 unsigned int nargs,
17584 tree return_type,
17585 unification_kind_t strict,
17586 int flags,
17587 bool explain_p,
17588 bool decltype_p)
17589 {
17590 tree parms;
17591 tree fntype;
17592 tree decl = NULL_TREE;
17593 tsubst_flags_t complain = (explain_p ? tf_warning_or_error : tf_none);
17594 bool ok;
17595 static int deduction_depth;
17596 struct pending_template *old_last_pend = last_pending_template;
17597 struct tinst_level *old_error_tinst = last_error_tinst_level;
17598 tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
17599 tree tinst;
17600 tree r = error_mark_node;
17601
17602 tree full_targs = targs;
17603 if (TMPL_ARGS_DEPTH (targs)
17604 < TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (fn)))
17605 full_targs = (add_outermost_template_args
17606 (DECL_TI_ARGS (DECL_TEMPLATE_RESULT (fn)),
17607 targs));
17608
17609 if (decltype_p)
17610 complain |= tf_decltype;
17611
17612 /* In C++0x, it's possible to have a function template whose type depends
17613 on itself recursively. This is most obvious with decltype, but can also
17614 occur with enumeration scope (c++/48969). So we need to catch infinite
17615 recursion and reject the substitution at deduction time; this function
17616 will return error_mark_node for any repeated substitution.
17617
17618 This also catches excessive recursion such as when f<N> depends on
17619 f<N-1> across all integers, and returns error_mark_node for all the
17620 substitutions back up to the initial one.
17621
17622 This is, of course, not reentrant. */
17623 if (excessive_deduction_depth)
17624 return error_mark_node;
17625 tinst = build_tree_list (fn, NULL_TREE);
17626 ++deduction_depth;
17627
17628 gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
17629
17630 fntype = TREE_TYPE (fn);
17631 if (explicit_targs)
17632 {
17633 /* [temp.deduct]
17634
17635 The specified template arguments must match the template
17636 parameters in kind (i.e., type, nontype, template), and there
17637 must not be more arguments than there are parameters;
17638 otherwise type deduction fails.
17639
17640 Nontype arguments must match the types of the corresponding
17641 nontype template parameters, or must be convertible to the
17642 types of the corresponding nontype parameters as specified in
17643 _temp.arg.nontype_, otherwise type deduction fails.
17644
17645 All references in the function type of the function template
17646 to the corresponding template parameters are replaced by the
17647 specified template argument values. If a substitution in a
17648 template parameter or in the function type of the function
17649 template results in an invalid type, type deduction fails. */
17650 int i, len = TREE_VEC_LENGTH (tparms);
17651 location_t loc = input_location;
17652 bool incomplete = false;
17653
17654 if (explicit_targs == error_mark_node)
17655 goto fail;
17656
17657 if (TMPL_ARGS_DEPTH (explicit_targs)
17658 < TMPL_ARGS_DEPTH (full_targs))
17659 explicit_targs = add_outermost_template_args (full_targs,
17660 explicit_targs);
17661
17662 /* Adjust any explicit template arguments before entering the
17663 substitution context. */
17664 explicit_targs
17665 = (coerce_template_parms (tparms, explicit_targs, NULL_TREE,
17666 complain,
17667 /*require_all_args=*/false,
17668 /*use_default_args=*/false));
17669 if (explicit_targs == error_mark_node)
17670 goto fail;
17671
17672 /* Substitute the explicit args into the function type. This is
17673 necessary so that, for instance, explicitly declared function
17674 arguments can match null pointed constants. If we were given
17675 an incomplete set of explicit args, we must not do semantic
17676 processing during substitution as we could create partial
17677 instantiations. */
17678 for (i = 0; i < len; i++)
17679 {
17680 tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
17681 bool parameter_pack = false;
17682 tree targ = TREE_VEC_ELT (explicit_targs, i);
17683
17684 /* Dig out the actual parm. */
17685 if (TREE_CODE (parm) == TYPE_DECL
17686 || TREE_CODE (parm) == TEMPLATE_DECL)
17687 {
17688 parm = TREE_TYPE (parm);
17689 parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
17690 }
17691 else if (TREE_CODE (parm) == PARM_DECL)
17692 {
17693 parm = DECL_INITIAL (parm);
17694 parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
17695 }
17696
17697 if (!parameter_pack && targ == NULL_TREE)
17698 /* No explicit argument for this template parameter. */
17699 incomplete = true;
17700
17701 if (parameter_pack && pack_deducible_p (parm, fn))
17702 {
17703 /* Mark the argument pack as "incomplete". We could
17704 still deduce more arguments during unification.
17705 We remove this mark in type_unification_real. */
17706 if (targ)
17707 {
17708 ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
17709 ARGUMENT_PACK_EXPLICIT_ARGS (targ)
17710 = ARGUMENT_PACK_ARGS (targ);
17711 }
17712
17713 /* We have some incomplete argument packs. */
17714 incomplete = true;
17715 }
17716 }
17717
17718 TREE_VALUE (tinst) = explicit_targs;
17719 if (!push_tinst_level (tinst))
17720 {
17721 excessive_deduction_depth = true;
17722 goto fail;
17723 }
17724 processing_template_decl += incomplete;
17725 input_location = DECL_SOURCE_LOCATION (fn);
17726 /* Ignore any access checks; we'll see them again in
17727 instantiate_template and they might have the wrong
17728 access path at this point. */
17729 push_deferring_access_checks (dk_deferred);
17730 fntype = tsubst (TREE_TYPE (fn), explicit_targs,
17731 complain | tf_partial, NULL_TREE);
17732 pop_deferring_access_checks ();
17733 input_location = loc;
17734 processing_template_decl -= incomplete;
17735 pop_tinst_level ();
17736
17737 if (fntype == error_mark_node)
17738 goto fail;
17739
17740 /* Place the explicitly specified arguments in TARGS. */
17741 explicit_targs = INNERMOST_TEMPLATE_ARGS (explicit_targs);
17742 for (i = NUM_TMPL_ARGS (explicit_targs); i--;)
17743 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (explicit_targs, i);
17744 }
17745
17746 /* Never do unification on the 'this' parameter. */
17747 parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
17748
17749 if (return_type && strict == DEDUCE_CALL)
17750 {
17751 /* We're deducing for a call to the result of a template conversion
17752 function. The parms we really want are in return_type. */
17753 if (POINTER_TYPE_P (return_type))
17754 return_type = TREE_TYPE (return_type);
17755 parms = TYPE_ARG_TYPES (return_type);
17756 }
17757 else if (return_type)
17758 {
17759 tree *new_args;
17760
17761 parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
17762 new_args = XALLOCAVEC (tree, nargs + 1);
17763 new_args[0] = return_type;
17764 memcpy (new_args + 1, args, nargs * sizeof (tree));
17765 args = new_args;
17766 ++nargs;
17767 }
17768
17769 /* We allow incomplete unification without an error message here
17770 because the standard doesn't seem to explicitly prohibit it. Our
17771 callers must be ready to deal with unification failures in any
17772 event. */
17773
17774 TREE_VALUE (tinst) = targs;
17775 /* If we aren't explaining yet, push tinst context so we can see where
17776 any errors (e.g. from class instantiations triggered by instantiation
17777 of default template arguments) come from. If we are explaining, this
17778 context is redundant. */
17779 if (!explain_p && !push_tinst_level (tinst))
17780 {
17781 excessive_deduction_depth = true;
17782 goto fail;
17783 }
17784
17785 /* type_unification_real will pass back any access checks from default
17786 template argument substitution. */
17787 vec<deferred_access_check, va_gc> *checks;
17788 checks = NULL;
17789
17790 ok = !type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
17791 full_targs, parms, args, nargs, /*subr=*/0,
17792 strict, flags, &checks, explain_p);
17793 if (!explain_p)
17794 pop_tinst_level ();
17795 if (!ok)
17796 goto fail;
17797
17798 /* Now that we have bindings for all of the template arguments,
17799 ensure that the arguments deduced for the template template
17800 parameters have compatible template parameter lists. We cannot
17801 check this property before we have deduced all template
17802 arguments, because the template parameter types of a template
17803 template parameter might depend on prior template parameters
17804 deduced after the template template parameter. The following
17805 ill-formed example illustrates this issue:
17806
17807 template<typename T, template<T> class C> void f(C<5>, T);
17808
17809 template<int N> struct X {};
17810
17811 void g() {
17812 f(X<5>(), 5l); // error: template argument deduction fails
17813 }
17814
17815 The template parameter list of 'C' depends on the template type
17816 parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
17817 'long'. Thus, we can't check that 'C' cannot bind to 'X' at the
17818 time that we deduce 'C'. */
17819 if (!template_template_parm_bindings_ok_p
17820 (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
17821 {
17822 unify_inconsistent_template_template_parameters (explain_p);
17823 goto fail;
17824 }
17825
17826 /* All is well so far. Now, check:
17827
17828 [temp.deduct]
17829
17830 When all template arguments have been deduced, all uses of
17831 template parameters in nondeduced contexts are replaced with
17832 the corresponding deduced argument values. If the
17833 substitution results in an invalid type, as described above,
17834 type deduction fails. */
17835 TREE_VALUE (tinst) = targs;
17836 if (!push_tinst_level (tinst))
17837 {
17838 excessive_deduction_depth = true;
17839 goto fail;
17840 }
17841
17842 /* Also collect access checks from the instantiation. */
17843 reopen_deferring_access_checks (checks);
17844
17845 decl = instantiate_template (fn, targs, complain);
17846
17847 checks = get_deferred_access_checks ();
17848 pop_deferring_access_checks ();
17849
17850 pop_tinst_level ();
17851
17852 if (decl == error_mark_node)
17853 goto fail;
17854
17855 /* Now perform any access checks encountered during substitution. */
17856 push_access_scope (decl);
17857 ok = perform_access_checks (checks, complain);
17858 pop_access_scope (decl);
17859 if (!ok)
17860 goto fail;
17861
17862 /* If we're looking for an exact match, check that what we got
17863 is indeed an exact match. It might not be if some template
17864 parameters are used in non-deduced contexts. But don't check
17865 for an exact match if we have dependent template arguments;
17866 in that case we're doing partial ordering, and we already know
17867 that we have two candidates that will provide the actual type. */
17868 if (strict == DEDUCE_EXACT && !any_dependent_template_arguments_p (targs))
17869 {
17870 tree substed = TREE_TYPE (decl);
17871 unsigned int i;
17872
17873 tree sarg
17874 = skip_artificial_parms_for (decl, TYPE_ARG_TYPES (substed));
17875 if (return_type)
17876 sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
17877 for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
17878 if (!same_type_p (args[i], TREE_VALUE (sarg)))
17879 {
17880 unify_type_mismatch (explain_p, args[i],
17881 TREE_VALUE (sarg));
17882 goto fail;
17883 }
17884 }
17885
17886 r = decl;
17887
17888 fail:
17889 --deduction_depth;
17890 if (excessive_deduction_depth)
17891 {
17892 if (deduction_depth == 0)
17893 /* Reset once we're all the way out. */
17894 excessive_deduction_depth = false;
17895 }
17896
17897 /* We can't free this if a pending_template entry or last_error_tinst_level
17898 is pointing at it. */
17899 if (last_pending_template == old_last_pend
17900 && last_error_tinst_level == old_error_tinst)
17901 ggc_free (tinst);
17902
17903 return r;
17904 }
17905
17906 /* Adjust types before performing type deduction, as described in
17907 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
17908 sections are symmetric. PARM is the type of a function parameter
17909 or the return type of the conversion function. ARG is the type of
17910 the argument passed to the call, or the type of the value
17911 initialized with the result of the conversion function.
17912 ARG_EXPR is the original argument expression, which may be null. */
17913
17914 static int
17915 maybe_adjust_types_for_deduction (unification_kind_t strict,
17916 tree* parm,
17917 tree* arg,
17918 tree arg_expr)
17919 {
17920 int result = 0;
17921
17922 switch (strict)
17923 {
17924 case DEDUCE_CALL:
17925 break;
17926
17927 case DEDUCE_CONV:
17928 /* Swap PARM and ARG throughout the remainder of this
17929 function; the handling is precisely symmetric since PARM
17930 will initialize ARG rather than vice versa. */
17931 std::swap (parm, arg);
17932 break;
17933
17934 case DEDUCE_EXACT:
17935 /* Core issue #873: Do the DR606 thing (see below) for these cases,
17936 too, but here handle it by stripping the reference from PARM
17937 rather than by adding it to ARG. */
17938 if (TREE_CODE (*parm) == REFERENCE_TYPE
17939 && TYPE_REF_IS_RVALUE (*parm)
17940 && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
17941 && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
17942 && TREE_CODE (*arg) == REFERENCE_TYPE
17943 && !TYPE_REF_IS_RVALUE (*arg))
17944 *parm = TREE_TYPE (*parm);
17945 /* Nothing else to do in this case. */
17946 return 0;
17947
17948 default:
17949 gcc_unreachable ();
17950 }
17951
17952 if (TREE_CODE (*parm) != REFERENCE_TYPE)
17953 {
17954 /* [temp.deduct.call]
17955
17956 If P is not a reference type:
17957
17958 --If A is an array type, the pointer type produced by the
17959 array-to-pointer standard conversion (_conv.array_) is
17960 used in place of A for type deduction; otherwise,
17961
17962 --If A is a function type, the pointer type produced by
17963 the function-to-pointer standard conversion
17964 (_conv.func_) is used in place of A for type deduction;
17965 otherwise,
17966
17967 --If A is a cv-qualified type, the top level
17968 cv-qualifiers of A's type are ignored for type
17969 deduction. */
17970 if (TREE_CODE (*arg) == ARRAY_TYPE)
17971 *arg = build_pointer_type (TREE_TYPE (*arg));
17972 else if (TREE_CODE (*arg) == FUNCTION_TYPE)
17973 *arg = build_pointer_type (*arg);
17974 else
17975 *arg = TYPE_MAIN_VARIANT (*arg);
17976 }
17977
17978 /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
17979 of the form T&&, where T is a template parameter, and the argument
17980 is an lvalue, T is deduced as A& */
17981 if (TREE_CODE (*parm) == REFERENCE_TYPE
17982 && TYPE_REF_IS_RVALUE (*parm)
17983 && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
17984 && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
17985 && (arg_expr ? real_lvalue_p (arg_expr)
17986 /* try_one_overload doesn't provide an arg_expr, but
17987 functions are always lvalues. */
17988 : TREE_CODE (*arg) == FUNCTION_TYPE))
17989 *arg = build_reference_type (*arg);
17990
17991 /* [temp.deduct.call]
17992
17993 If P is a cv-qualified type, the top level cv-qualifiers
17994 of P's type are ignored for type deduction. If P is a
17995 reference type, the type referred to by P is used for
17996 type deduction. */
17997 *parm = TYPE_MAIN_VARIANT (*parm);
17998 if (TREE_CODE (*parm) == REFERENCE_TYPE)
17999 {
18000 *parm = TREE_TYPE (*parm);
18001 result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
18002 }
18003
18004 /* DR 322. For conversion deduction, remove a reference type on parm
18005 too (which has been swapped into ARG). */
18006 if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
18007 *arg = TREE_TYPE (*arg);
18008
18009 return result;
18010 }
18011
18012 /* Subroutine of unify_one_argument. PARM is a function parameter of a
18013 template which does contain any deducible template parameters; check if
18014 ARG is a suitable match for it. STRICT, FLAGS and EXPLAIN_P are as in
18015 unify_one_argument. */
18016
18017 static int
18018 check_non_deducible_conversion (tree parm, tree arg, int strict,
18019 int flags, bool explain_p)
18020 {
18021 tree type;
18022
18023 if (!TYPE_P (arg))
18024 type = TREE_TYPE (arg);
18025 else
18026 type = arg;
18027
18028 if (same_type_p (parm, type))
18029 return unify_success (explain_p);
18030
18031 if (strict == DEDUCE_CONV)
18032 {
18033 if (can_convert_arg (type, parm, NULL_TREE, flags,
18034 explain_p ? tf_warning_or_error : tf_none))
18035 return unify_success (explain_p);
18036 }
18037 else if (strict != DEDUCE_EXACT)
18038 {
18039 if (can_convert_arg (parm, type,
18040 TYPE_P (arg) ? NULL_TREE : arg,
18041 flags, explain_p ? tf_warning_or_error : tf_none))
18042 return unify_success (explain_p);
18043 }
18044
18045 if (strict == DEDUCE_EXACT)
18046 return unify_type_mismatch (explain_p, parm, arg);
18047 else
18048 return unify_arg_conversion (explain_p, parm, type, arg);
18049 }
18050
18051 static bool uses_deducible_template_parms (tree type);
18052
18053 /* Returns true iff the expression EXPR is one from which a template
18054 argument can be deduced. In other words, if it's an undecorated
18055 use of a template non-type parameter. */
18056
18057 static bool
18058 deducible_expression (tree expr)
18059 {
18060 return (TREE_CODE (expr) == TEMPLATE_PARM_INDEX);
18061 }
18062
18063 /* Returns true iff the array domain DOMAIN uses a template parameter in a
18064 deducible way; that is, if it has a max value of <PARM> - 1. */
18065
18066 static bool
18067 deducible_array_bound (tree domain)
18068 {
18069 if (domain == NULL_TREE)
18070 return false;
18071
18072 tree max = TYPE_MAX_VALUE (domain);
18073 if (TREE_CODE (max) != MINUS_EXPR)
18074 return false;
18075
18076 return deducible_expression (TREE_OPERAND (max, 0));
18077 }
18078
18079 /* Returns true iff the template arguments ARGS use a template parameter
18080 in a deducible way. */
18081
18082 static bool
18083 deducible_template_args (tree args)
18084 {
18085 for (int i = 0; i < TREE_VEC_LENGTH (args); ++i)
18086 {
18087 bool deducible;
18088 tree elt = TREE_VEC_ELT (args, i);
18089 if (ARGUMENT_PACK_P (elt))
18090 deducible = deducible_template_args (ARGUMENT_PACK_ARGS (elt));
18091 else
18092 {
18093 if (PACK_EXPANSION_P (elt))
18094 elt = PACK_EXPANSION_PATTERN (elt);
18095 if (TREE_CODE (elt) == TEMPLATE_TEMPLATE_PARM)
18096 deducible = true;
18097 else if (TYPE_P (elt))
18098 deducible = uses_deducible_template_parms (elt);
18099 else
18100 deducible = deducible_expression (elt);
18101 }
18102 if (deducible)
18103 return true;
18104 }
18105 return false;
18106 }
18107
18108 /* Returns true iff TYPE contains any deducible references to template
18109 parameters, as per 14.8.2.5. */
18110
18111 static bool
18112 uses_deducible_template_parms (tree type)
18113 {
18114 if (PACK_EXPANSION_P (type))
18115 type = PACK_EXPANSION_PATTERN (type);
18116
18117 /* T
18118 cv-list T
18119 TT<T>
18120 TT<i>
18121 TT<> */
18122 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
18123 || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
18124 return true;
18125
18126 /* T*
18127 T&
18128 T&& */
18129 if (POINTER_TYPE_P (type))
18130 return uses_deducible_template_parms (TREE_TYPE (type));
18131
18132 /* T[integer-constant ]
18133 type [i] */
18134 if (TREE_CODE (type) == ARRAY_TYPE)
18135 return (uses_deducible_template_parms (TREE_TYPE (type))
18136 || deducible_array_bound (TYPE_DOMAIN (type)));
18137
18138 /* T type ::*
18139 type T::*
18140 T T::*
18141 T (type ::*)()
18142 type (T::*)()
18143 type (type ::*)(T)
18144 type (T::*)(T)
18145 T (type ::*)(T)
18146 T (T::*)()
18147 T (T::*)(T) */
18148 if (TYPE_PTRMEM_P (type))
18149 return (uses_deducible_template_parms (TYPE_PTRMEM_CLASS_TYPE (type))
18150 || (uses_deducible_template_parms
18151 (TYPE_PTRMEM_POINTED_TO_TYPE (type))));
18152
18153 /* template-name <T> (where template-name refers to a class template)
18154 template-name <i> (where template-name refers to a class template) */
18155 if (CLASS_TYPE_P (type)
18156 && CLASSTYPE_TEMPLATE_INFO (type)
18157 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type)))
18158 return deducible_template_args (INNERMOST_TEMPLATE_ARGS
18159 (CLASSTYPE_TI_ARGS (type)));
18160
18161 /* type (T)
18162 T()
18163 T(T) */
18164 if (TREE_CODE (type) == FUNCTION_TYPE
18165 || TREE_CODE (type) == METHOD_TYPE)
18166 {
18167 if (uses_deducible_template_parms (TREE_TYPE (type)))
18168 return true;
18169 tree parm = TYPE_ARG_TYPES (type);
18170 if (TREE_CODE (type) == METHOD_TYPE)
18171 parm = TREE_CHAIN (parm);
18172 for (; parm; parm = TREE_CHAIN (parm))
18173 if (uses_deducible_template_parms (TREE_VALUE (parm)))
18174 return true;
18175 }
18176
18177 return false;
18178 }
18179
18180 /* Subroutine of type_unification_real and unify_pack_expansion to
18181 handle unification of a single P/A pair. Parameters are as
18182 for those functions. */
18183
18184 static int
18185 unify_one_argument (tree tparms, tree targs, tree parm, tree arg,
18186 int subr, unification_kind_t strict,
18187 bool explain_p)
18188 {
18189 tree arg_expr = NULL_TREE;
18190 int arg_strict;
18191
18192 if (arg == error_mark_node || parm == error_mark_node)
18193 return unify_invalid (explain_p);
18194 if (arg == unknown_type_node)
18195 /* We can't deduce anything from this, but we might get all the
18196 template args from other function args. */
18197 return unify_success (explain_p);
18198
18199 /* Implicit conversions (Clause 4) will be performed on a function
18200 argument to convert it to the type of the corresponding function
18201 parameter if the parameter type contains no template-parameters that
18202 participate in template argument deduction. */
18203 if (strict != DEDUCE_EXACT
18204 && TYPE_P (parm) && !uses_deducible_template_parms (parm))
18205 /* For function parameters with no deducible template parameters,
18206 just return. We'll check non-dependent conversions later. */
18207 return unify_success (explain_p);
18208
18209 switch (strict)
18210 {
18211 case DEDUCE_CALL:
18212 arg_strict = (UNIFY_ALLOW_OUTER_LEVEL
18213 | UNIFY_ALLOW_MORE_CV_QUAL
18214 | UNIFY_ALLOW_DERIVED);
18215 break;
18216
18217 case DEDUCE_CONV:
18218 arg_strict = UNIFY_ALLOW_LESS_CV_QUAL;
18219 break;
18220
18221 case DEDUCE_EXACT:
18222 arg_strict = UNIFY_ALLOW_NONE;
18223 break;
18224
18225 default:
18226 gcc_unreachable ();
18227 }
18228
18229 /* We only do these transformations if this is the top-level
18230 parameter_type_list in a call or declaration matching; in other
18231 situations (nested function declarators, template argument lists) we
18232 won't be comparing a type to an expression, and we don't do any type
18233 adjustments. */
18234 if (!subr)
18235 {
18236 if (!TYPE_P (arg))
18237 {
18238 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
18239 if (type_unknown_p (arg))
18240 {
18241 /* [temp.deduct.type] A template-argument can be
18242 deduced from a pointer to function or pointer
18243 to member function argument if the set of
18244 overloaded functions does not contain function
18245 templates and at most one of a set of
18246 overloaded functions provides a unique
18247 match. */
18248
18249 if (resolve_overloaded_unification
18250 (tparms, targs, parm, arg, strict,
18251 arg_strict, explain_p))
18252 return unify_success (explain_p);
18253 return unify_overload_resolution_failure (explain_p, arg);
18254 }
18255
18256 arg_expr = arg;
18257 arg = unlowered_expr_type (arg);
18258 if (arg == error_mark_node)
18259 return unify_invalid (explain_p);
18260 }
18261
18262 arg_strict |=
18263 maybe_adjust_types_for_deduction (strict, &parm, &arg, arg_expr);
18264 }
18265 else
18266 if ((TYPE_P (parm) || TREE_CODE (parm) == TEMPLATE_DECL)
18267 != (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL))
18268 return unify_template_argument_mismatch (explain_p, parm, arg);
18269
18270 /* For deduction from an init-list we need the actual list. */
18271 if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
18272 arg = arg_expr;
18273 return unify (tparms, targs, parm, arg, arg_strict, explain_p);
18274 }
18275
18276 /* Most parms like fn_type_unification.
18277
18278 If SUBR is 1, we're being called recursively (to unify the
18279 arguments of a function or method parameter of a function
18280 template).
18281
18282 CHECKS is a pointer to a vector of access checks encountered while
18283 substituting default template arguments. */
18284
18285 static int
18286 type_unification_real (tree tparms,
18287 tree full_targs,
18288 tree xparms,
18289 const tree *xargs,
18290 unsigned int xnargs,
18291 int subr,
18292 unification_kind_t strict,
18293 int flags,
18294 vec<deferred_access_check, va_gc> **checks,
18295 bool explain_p)
18296 {
18297 tree parm, arg;
18298 int i;
18299 int ntparms = TREE_VEC_LENGTH (tparms);
18300 int saw_undeduced = 0;
18301 tree parms;
18302 const tree *args;
18303 unsigned int nargs;
18304 unsigned int ia;
18305
18306 gcc_assert (TREE_CODE (tparms) == TREE_VEC);
18307 gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
18308 gcc_assert (ntparms > 0);
18309
18310 tree targs = INNERMOST_TEMPLATE_ARGS (full_targs);
18311
18312 /* Reset the number of non-defaulted template arguments contained
18313 in TARGS. */
18314 NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
18315
18316 again:
18317 parms = xparms;
18318 args = xargs;
18319 nargs = xnargs;
18320
18321 ia = 0;
18322 while (parms && parms != void_list_node
18323 && ia < nargs)
18324 {
18325 parm = TREE_VALUE (parms);
18326
18327 if (TREE_CODE (parm) == TYPE_PACK_EXPANSION
18328 && (!TREE_CHAIN (parms) || TREE_CHAIN (parms) == void_list_node))
18329 /* For a function parameter pack that occurs at the end of the
18330 parameter-declaration-list, the type A of each remaining
18331 argument of the call is compared with the type P of the
18332 declarator-id of the function parameter pack. */
18333 break;
18334
18335 parms = TREE_CHAIN (parms);
18336
18337 if (TREE_CODE (parm) == TYPE_PACK_EXPANSION)
18338 /* For a function parameter pack that does not occur at the
18339 end of the parameter-declaration-list, the type of the
18340 parameter pack is a non-deduced context. */
18341 continue;
18342
18343 arg = args[ia];
18344 ++ia;
18345
18346 if (unify_one_argument (tparms, full_targs, parm, arg, subr, strict,
18347 explain_p))
18348 return 1;
18349 }
18350
18351 if (parms
18352 && parms != void_list_node
18353 && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
18354 {
18355 /* Unify the remaining arguments with the pack expansion type. */
18356 tree argvec;
18357 tree parmvec = make_tree_vec (1);
18358
18359 /* Allocate a TREE_VEC and copy in all of the arguments */
18360 argvec = make_tree_vec (nargs - ia);
18361 for (i = 0; ia < nargs; ++ia, ++i)
18362 TREE_VEC_ELT (argvec, i) = args[ia];
18363
18364 /* Copy the parameter into parmvec. */
18365 TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
18366 if (unify_pack_expansion (tparms, full_targs, parmvec, argvec, strict,
18367 /*subr=*/subr, explain_p))
18368 return 1;
18369
18370 /* Advance to the end of the list of parameters. */
18371 parms = TREE_CHAIN (parms);
18372 }
18373
18374 /* Fail if we've reached the end of the parm list, and more args
18375 are present, and the parm list isn't variadic. */
18376 if (ia < nargs && parms == void_list_node)
18377 return unify_too_many_arguments (explain_p, nargs, ia);
18378 /* Fail if parms are left and they don't have default values and
18379 they aren't all deduced as empty packs (c++/57397). This is
18380 consistent with sufficient_parms_p. */
18381 if (parms && parms != void_list_node
18382 && TREE_PURPOSE (parms) == NULL_TREE)
18383 {
18384 unsigned int count = nargs;
18385 tree p = parms;
18386 bool type_pack_p;
18387 do
18388 {
18389 type_pack_p = TREE_CODE (TREE_VALUE (p)) == TYPE_PACK_EXPANSION;
18390 if (!type_pack_p)
18391 count++;
18392 p = TREE_CHAIN (p);
18393 }
18394 while (p && p != void_list_node);
18395 if (count != nargs)
18396 return unify_too_few_arguments (explain_p, ia, count,
18397 type_pack_p);
18398 }
18399
18400 if (!subr)
18401 {
18402 tsubst_flags_t complain = (explain_p
18403 ? tf_warning_or_error
18404 : tf_none);
18405
18406 for (i = 0; i < ntparms; i++)
18407 {
18408 tree targ = TREE_VEC_ELT (targs, i);
18409 tree tparm = TREE_VEC_ELT (tparms, i);
18410
18411 /* Clear the "incomplete" flags on all argument packs now so that
18412 substituting them into later default arguments works. */
18413 if (targ && ARGUMENT_PACK_P (targ))
18414 {
18415 ARGUMENT_PACK_INCOMPLETE_P (targ) = 0;
18416 ARGUMENT_PACK_EXPLICIT_ARGS (targ) = NULL_TREE;
18417 }
18418
18419 if (targ || tparm == error_mark_node)
18420 continue;
18421 tparm = TREE_VALUE (tparm);
18422
18423 /* If this is an undeduced nontype parameter that depends on
18424 a type parameter, try another pass; its type may have been
18425 deduced from a later argument than the one from which
18426 this parameter can be deduced. */
18427 if (TREE_CODE (tparm) == PARM_DECL
18428 && uses_template_parms (TREE_TYPE (tparm))
18429 && saw_undeduced < 2)
18430 {
18431 saw_undeduced = 1;
18432 continue;
18433 }
18434
18435 /* Core issue #226 (C++0x) [temp.deduct]:
18436
18437 If a template argument has not been deduced, its
18438 default template argument, if any, is used.
18439
18440 When we are in C++98 mode, TREE_PURPOSE will either
18441 be NULL_TREE or ERROR_MARK_NODE, so we do not need
18442 to explicitly check cxx_dialect here. */
18443 if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
18444 /* OK, there is a default argument. Wait until after the
18445 conversion check to do substitution. */
18446 continue;
18447
18448 /* If the type parameter is a parameter pack, then it will
18449 be deduced to an empty parameter pack. */
18450 if (template_parameter_pack_p (tparm))
18451 {
18452 tree arg;
18453
18454 if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
18455 {
18456 arg = make_node (NONTYPE_ARGUMENT_PACK);
18457 TREE_TYPE (arg) = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
18458 TREE_CONSTANT (arg) = 1;
18459 }
18460 else
18461 arg = cxx_make_type (TYPE_ARGUMENT_PACK);
18462
18463 SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
18464
18465 TREE_VEC_ELT (targs, i) = arg;
18466 continue;
18467 }
18468
18469 return unify_parameter_deduction_failure (explain_p, tparm);
18470 }
18471
18472 /* DR 1391: All parameters have args, now check non-dependent parms for
18473 convertibility. */
18474 if (saw_undeduced < 2)
18475 for (ia = 0, parms = xparms, args = xargs, nargs = xnargs;
18476 parms && parms != void_list_node && ia < nargs; )
18477 {
18478 parm = TREE_VALUE (parms);
18479
18480 if (TREE_CODE (parm) == TYPE_PACK_EXPANSION
18481 && (!TREE_CHAIN (parms)
18482 || TREE_CHAIN (parms) == void_list_node))
18483 /* For a function parameter pack that occurs at the end of the
18484 parameter-declaration-list, the type A of each remaining
18485 argument of the call is compared with the type P of the
18486 declarator-id of the function parameter pack. */
18487 break;
18488
18489 parms = TREE_CHAIN (parms);
18490
18491 if (TREE_CODE (parm) == TYPE_PACK_EXPANSION)
18492 /* For a function parameter pack that does not occur at the
18493 end of the parameter-declaration-list, the type of the
18494 parameter pack is a non-deduced context. */
18495 continue;
18496
18497 arg = args[ia];
18498 ++ia;
18499
18500 if (uses_template_parms (parm))
18501 continue;
18502 if (check_non_deducible_conversion (parm, arg, strict, flags,
18503 explain_p))
18504 return 1;
18505 }
18506
18507 /* Now substitute into the default template arguments. */
18508 for (i = 0; i < ntparms; i++)
18509 {
18510 tree targ = TREE_VEC_ELT (targs, i);
18511 tree tparm = TREE_VEC_ELT (tparms, i);
18512
18513 if (targ || tparm == error_mark_node)
18514 continue;
18515 tree parm = TREE_VALUE (tparm);
18516
18517 if (TREE_CODE (parm) == PARM_DECL
18518 && uses_template_parms (TREE_TYPE (parm))
18519 && saw_undeduced < 2)
18520 continue;
18521
18522 tree arg = TREE_PURPOSE (tparm);
18523 reopen_deferring_access_checks (*checks);
18524 location_t save_loc = input_location;
18525 if (DECL_P (parm))
18526 input_location = DECL_SOURCE_LOCATION (parm);
18527 arg = tsubst_template_arg (arg, full_targs, complain, NULL_TREE);
18528 arg = convert_template_argument (parm, arg, full_targs, complain,
18529 i, NULL_TREE);
18530 input_location = save_loc;
18531 *checks = get_deferred_access_checks ();
18532 pop_deferring_access_checks ();
18533 if (arg == error_mark_node)
18534 return 1;
18535 else
18536 {
18537 TREE_VEC_ELT (targs, i) = arg;
18538 /* The position of the first default template argument,
18539 is also the number of non-defaulted arguments in TARGS.
18540 Record that. */
18541 if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
18542 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
18543 continue;
18544 }
18545 }
18546
18547 if (saw_undeduced++ == 1)
18548 goto again;
18549 }
18550
18551 if (CHECKING_P && !NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
18552 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
18553
18554 return unify_success (explain_p);
18555 }
18556
18557 /* Subroutine of type_unification_real. Args are like the variables
18558 at the call site. ARG is an overloaded function (or template-id);
18559 we try deducing template args from each of the overloads, and if
18560 only one succeeds, we go with that. Modifies TARGS and returns
18561 true on success. */
18562
18563 static bool
18564 resolve_overloaded_unification (tree tparms,
18565 tree targs,
18566 tree parm,
18567 tree arg,
18568 unification_kind_t strict,
18569 int sub_strict,
18570 bool explain_p)
18571 {
18572 tree tempargs = copy_node (targs);
18573 int good = 0;
18574 tree goodfn = NULL_TREE;
18575 bool addr_p;
18576
18577 if (TREE_CODE (arg) == ADDR_EXPR)
18578 {
18579 arg = TREE_OPERAND (arg, 0);
18580 addr_p = true;
18581 }
18582 else
18583 addr_p = false;
18584
18585 if (TREE_CODE (arg) == COMPONENT_REF)
18586 /* Handle `&x' where `x' is some static or non-static member
18587 function name. */
18588 arg = TREE_OPERAND (arg, 1);
18589
18590 if (TREE_CODE (arg) == OFFSET_REF)
18591 arg = TREE_OPERAND (arg, 1);
18592
18593 /* Strip baselink information. */
18594 if (BASELINK_P (arg))
18595 arg = BASELINK_FUNCTIONS (arg);
18596
18597 if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
18598 {
18599 /* If we got some explicit template args, we need to plug them into
18600 the affected templates before we try to unify, in case the
18601 explicit args will completely resolve the templates in question. */
18602
18603 int ok = 0;
18604 tree expl_subargs = TREE_OPERAND (arg, 1);
18605 arg = TREE_OPERAND (arg, 0);
18606
18607 for (; arg; arg = OVL_NEXT (arg))
18608 {
18609 tree fn = OVL_CURRENT (arg);
18610 tree subargs, elem;
18611
18612 if (TREE_CODE (fn) != TEMPLATE_DECL)
18613 continue;
18614
18615 subargs = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
18616 expl_subargs, NULL_TREE, tf_none,
18617 /*require_all_args=*/true,
18618 /*use_default_args=*/true);
18619 if (subargs != error_mark_node
18620 && !any_dependent_template_arguments_p (subargs))
18621 {
18622 elem = TREE_TYPE (instantiate_template (fn, subargs, tf_none));
18623 if (try_one_overload (tparms, targs, tempargs, parm,
18624 elem, strict, sub_strict, addr_p, explain_p)
18625 && (!goodfn || !same_type_p (goodfn, elem)))
18626 {
18627 goodfn = elem;
18628 ++good;
18629 }
18630 }
18631 else if (subargs)
18632 ++ok;
18633 }
18634 /* If no templates (or more than one) are fully resolved by the
18635 explicit arguments, this template-id is a non-deduced context; it
18636 could still be OK if we deduce all template arguments for the
18637 enclosing call through other arguments. */
18638 if (good != 1)
18639 good = ok;
18640 }
18641 else if (TREE_CODE (arg) != OVERLOAD
18642 && TREE_CODE (arg) != FUNCTION_DECL)
18643 /* If ARG is, for example, "(0, &f)" then its type will be unknown
18644 -- but the deduction does not succeed because the expression is
18645 not just the function on its own. */
18646 return false;
18647 else
18648 for (; arg; arg = OVL_NEXT (arg))
18649 if (try_one_overload (tparms, targs, tempargs, parm,
18650 TREE_TYPE (OVL_CURRENT (arg)),
18651 strict, sub_strict, addr_p, explain_p)
18652 && (!goodfn || !decls_match (goodfn, OVL_CURRENT (arg))))
18653 {
18654 goodfn = OVL_CURRENT (arg);
18655 ++good;
18656 }
18657
18658 /* [temp.deduct.type] A template-argument can be deduced from a pointer
18659 to function or pointer to member function argument if the set of
18660 overloaded functions does not contain function templates and at most
18661 one of a set of overloaded functions provides a unique match.
18662
18663 So if we found multiple possibilities, we return success but don't
18664 deduce anything. */
18665
18666 if (good == 1)
18667 {
18668 int i = TREE_VEC_LENGTH (targs);
18669 for (; i--; )
18670 if (TREE_VEC_ELT (tempargs, i))
18671 {
18672 tree old = TREE_VEC_ELT (targs, i);
18673 tree new_ = TREE_VEC_ELT (tempargs, i);
18674 if (new_ && old && ARGUMENT_PACK_P (old)
18675 && ARGUMENT_PACK_EXPLICIT_ARGS (old))
18676 /* Don't forget explicit template arguments in a pack. */
18677 ARGUMENT_PACK_EXPLICIT_ARGS (new_)
18678 = ARGUMENT_PACK_EXPLICIT_ARGS (old);
18679 TREE_VEC_ELT (targs, i) = new_;
18680 }
18681 }
18682 if (good)
18683 return true;
18684
18685 return false;
18686 }
18687
18688 /* Core DR 115: In contexts where deduction is done and fails, or in
18689 contexts where deduction is not done, if a template argument list is
18690 specified and it, along with any default template arguments, identifies
18691 a single function template specialization, then the template-id is an
18692 lvalue for the function template specialization. */
18693
18694 tree
18695 resolve_nondeduced_context (tree orig_expr, tsubst_flags_t complain)
18696 {
18697 tree expr, offset, baselink;
18698 bool addr;
18699
18700 if (!type_unknown_p (orig_expr))
18701 return orig_expr;
18702
18703 expr = orig_expr;
18704 addr = false;
18705 offset = NULL_TREE;
18706 baselink = NULL_TREE;
18707
18708 if (TREE_CODE (expr) == ADDR_EXPR)
18709 {
18710 expr = TREE_OPERAND (expr, 0);
18711 addr = true;
18712 }
18713 if (TREE_CODE (expr) == OFFSET_REF)
18714 {
18715 offset = expr;
18716 expr = TREE_OPERAND (expr, 1);
18717 }
18718 if (BASELINK_P (expr))
18719 {
18720 baselink = expr;
18721 expr = BASELINK_FUNCTIONS (expr);
18722 }
18723
18724 if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
18725 {
18726 int good = 0;
18727 tree goodfn = NULL_TREE;
18728
18729 /* If we got some explicit template args, we need to plug them into
18730 the affected templates before we try to unify, in case the
18731 explicit args will completely resolve the templates in question. */
18732
18733 tree expl_subargs = TREE_OPERAND (expr, 1);
18734 tree arg = TREE_OPERAND (expr, 0);
18735 tree badfn = NULL_TREE;
18736 tree badargs = NULL_TREE;
18737
18738 for (; arg; arg = OVL_NEXT (arg))
18739 {
18740 tree fn = OVL_CURRENT (arg);
18741 tree subargs, elem;
18742
18743 if (TREE_CODE (fn) != TEMPLATE_DECL)
18744 continue;
18745
18746 subargs = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
18747 expl_subargs, NULL_TREE, tf_none,
18748 /*require_all_args=*/true,
18749 /*use_default_args=*/true);
18750 if (subargs != error_mark_node
18751 && !any_dependent_template_arguments_p (subargs))
18752 {
18753 elem = instantiate_template (fn, subargs, tf_none);
18754 if (elem == error_mark_node)
18755 {
18756 badfn = fn;
18757 badargs = subargs;
18758 }
18759 else if (elem && (!goodfn || !decls_match (goodfn, elem)))
18760 {
18761 goodfn = elem;
18762 ++good;
18763 }
18764 }
18765 }
18766 if (good == 1)
18767 {
18768 mark_used (goodfn);
18769 expr = goodfn;
18770 if (baselink)
18771 expr = build_baselink (BASELINK_BINFO (baselink),
18772 BASELINK_ACCESS_BINFO (baselink),
18773 expr, BASELINK_OPTYPE (baselink));
18774 if (offset)
18775 {
18776 tree base
18777 = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (offset, 0)));
18778 expr = build_offset_ref (base, expr, addr, complain);
18779 }
18780 if (addr)
18781 expr = cp_build_addr_expr (expr, complain);
18782 return expr;
18783 }
18784 else if (good == 0 && badargs && (complain & tf_error))
18785 /* There were no good options and at least one bad one, so let the
18786 user know what the problem is. */
18787 instantiate_template (badfn, badargs, complain);
18788 }
18789 return orig_expr;
18790 }
18791
18792 /* Subroutine of resolve_overloaded_unification; does deduction for a single
18793 overload. Fills TARGS with any deduced arguments, or error_mark_node if
18794 different overloads deduce different arguments for a given parm.
18795 ADDR_P is true if the expression for which deduction is being
18796 performed was of the form "& fn" rather than simply "fn".
18797
18798 Returns 1 on success. */
18799
18800 static int
18801 try_one_overload (tree tparms,
18802 tree orig_targs,
18803 tree targs,
18804 tree parm,
18805 tree arg,
18806 unification_kind_t strict,
18807 int sub_strict,
18808 bool addr_p,
18809 bool explain_p)
18810 {
18811 int nargs;
18812 tree tempargs;
18813 int i;
18814
18815 if (arg == error_mark_node)
18816 return 0;
18817
18818 /* [temp.deduct.type] A template-argument can be deduced from a pointer
18819 to function or pointer to member function argument if the set of
18820 overloaded functions does not contain function templates and at most
18821 one of a set of overloaded functions provides a unique match.
18822
18823 So if this is a template, just return success. */
18824
18825 if (uses_template_parms (arg))
18826 return 1;
18827
18828 if (TREE_CODE (arg) == METHOD_TYPE)
18829 arg = build_ptrmemfunc_type (build_pointer_type (arg));
18830 else if (addr_p)
18831 arg = build_pointer_type (arg);
18832
18833 sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
18834
18835 /* We don't copy orig_targs for this because if we have already deduced
18836 some template args from previous args, unify would complain when we
18837 try to deduce a template parameter for the same argument, even though
18838 there isn't really a conflict. */
18839 nargs = TREE_VEC_LENGTH (targs);
18840 tempargs = make_tree_vec (nargs);
18841
18842 if (unify (tparms, tempargs, parm, arg, sub_strict, explain_p))
18843 return 0;
18844
18845 /* First make sure we didn't deduce anything that conflicts with
18846 explicitly specified args. */
18847 for (i = nargs; i--; )
18848 {
18849 tree elt = TREE_VEC_ELT (tempargs, i);
18850 tree oldelt = TREE_VEC_ELT (orig_targs, i);
18851
18852 if (!elt)
18853 /*NOP*/;
18854 else if (uses_template_parms (elt))
18855 /* Since we're unifying against ourselves, we will fill in
18856 template args used in the function parm list with our own
18857 template parms. Discard them. */
18858 TREE_VEC_ELT (tempargs, i) = NULL_TREE;
18859 else if (oldelt && ARGUMENT_PACK_P (oldelt))
18860 {
18861 /* Check that the argument at each index of the deduced argument pack
18862 is equivalent to the corresponding explicitly specified argument.
18863 We may have deduced more arguments than were explicitly specified,
18864 and that's OK. */
18865 gcc_assert (ARGUMENT_PACK_INCOMPLETE_P (oldelt));
18866 gcc_assert (ARGUMENT_PACK_ARGS (oldelt)
18867 == ARGUMENT_PACK_EXPLICIT_ARGS (oldelt));
18868
18869 tree explicit_pack = ARGUMENT_PACK_ARGS (oldelt);
18870 tree deduced_pack = ARGUMENT_PACK_ARGS (elt);
18871
18872 if (TREE_VEC_LENGTH (deduced_pack)
18873 < TREE_VEC_LENGTH (explicit_pack))
18874 return 0;
18875
18876 for (int j = 0; j < TREE_VEC_LENGTH (explicit_pack); j++)
18877 if (!template_args_equal (TREE_VEC_ELT (explicit_pack, j),
18878 TREE_VEC_ELT (deduced_pack, j)))
18879 return 0;
18880 }
18881 else if (oldelt && !template_args_equal (oldelt, elt))
18882 return 0;
18883 }
18884
18885 for (i = nargs; i--; )
18886 {
18887 tree elt = TREE_VEC_ELT (tempargs, i);
18888
18889 if (elt)
18890 TREE_VEC_ELT (targs, i) = elt;
18891 }
18892
18893 return 1;
18894 }
18895
18896 /* PARM is a template class (perhaps with unbound template
18897 parameters). ARG is a fully instantiated type. If ARG can be
18898 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
18899 TARGS are as for unify. */
18900
18901 static tree
18902 try_class_unification (tree tparms, tree targs, tree parm, tree arg,
18903 bool explain_p)
18904 {
18905 tree copy_of_targs;
18906
18907 if (!CLASSTYPE_TEMPLATE_INFO (arg)
18908 || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
18909 != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
18910 return NULL_TREE;
18911
18912 /* We need to make a new template argument vector for the call to
18913 unify. If we used TARGS, we'd clutter it up with the result of
18914 the attempted unification, even if this class didn't work out.
18915 We also don't want to commit ourselves to all the unifications
18916 we've already done, since unification is supposed to be done on
18917 an argument-by-argument basis. In other words, consider the
18918 following pathological case:
18919
18920 template <int I, int J, int K>
18921 struct S {};
18922
18923 template <int I, int J>
18924 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
18925
18926 template <int I, int J, int K>
18927 void f(S<I, J, K>, S<I, I, I>);
18928
18929 void g() {
18930 S<0, 0, 0> s0;
18931 S<0, 1, 2> s2;
18932
18933 f(s0, s2);
18934 }
18935
18936 Now, by the time we consider the unification involving `s2', we
18937 already know that we must have `f<0, 0, 0>'. But, even though
18938 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
18939 because there are two ways to unify base classes of S<0, 1, 2>
18940 with S<I, I, I>. If we kept the already deduced knowledge, we
18941 would reject the possibility I=1. */
18942 copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
18943
18944 /* If unification failed, we're done. */
18945 if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
18946 CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE, explain_p))
18947 return NULL_TREE;
18948
18949 return arg;
18950 }
18951
18952 /* Given a template type PARM and a class type ARG, find the unique
18953 base type in ARG that is an instance of PARM. We do not examine
18954 ARG itself; only its base-classes. If there is not exactly one
18955 appropriate base class, return NULL_TREE. PARM may be the type of
18956 a partial specialization, as well as a plain template type. Used
18957 by unify. */
18958
18959 static enum template_base_result
18960 get_template_base (tree tparms, tree targs, tree parm, tree arg,
18961 bool explain_p, tree *result)
18962 {
18963 tree rval = NULL_TREE;
18964 tree binfo;
18965
18966 gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
18967
18968 binfo = TYPE_BINFO (complete_type (arg));
18969 if (!binfo)
18970 {
18971 /* The type could not be completed. */
18972 *result = NULL_TREE;
18973 return tbr_incomplete_type;
18974 }
18975
18976 /* Walk in inheritance graph order. The search order is not
18977 important, and this avoids multiple walks of virtual bases. */
18978 for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
18979 {
18980 tree r = try_class_unification (tparms, targs, parm,
18981 BINFO_TYPE (binfo), explain_p);
18982
18983 if (r)
18984 {
18985 /* If there is more than one satisfactory baseclass, then:
18986
18987 [temp.deduct.call]
18988
18989 If they yield more than one possible deduced A, the type
18990 deduction fails.
18991
18992 applies. */
18993 if (rval && !same_type_p (r, rval))
18994 {
18995 *result = NULL_TREE;
18996 return tbr_ambiguous_baseclass;
18997 }
18998
18999 rval = r;
19000 }
19001 }
19002
19003 *result = rval;
19004 return tbr_success;
19005 }
19006
19007 /* Returns the level of DECL, which declares a template parameter. */
19008
19009 static int
19010 template_decl_level (tree decl)
19011 {
19012 switch (TREE_CODE (decl))
19013 {
19014 case TYPE_DECL:
19015 case TEMPLATE_DECL:
19016 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
19017
19018 case PARM_DECL:
19019 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
19020
19021 default:
19022 gcc_unreachable ();
19023 }
19024 return 0;
19025 }
19026
19027 /* Decide whether ARG can be unified with PARM, considering only the
19028 cv-qualifiers of each type, given STRICT as documented for unify.
19029 Returns nonzero iff the unification is OK on that basis. */
19030
19031 static int
19032 check_cv_quals_for_unify (int strict, tree arg, tree parm)
19033 {
19034 int arg_quals = cp_type_quals (arg);
19035 int parm_quals = cp_type_quals (parm);
19036
19037 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
19038 && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
19039 {
19040 /* Although a CVR qualifier is ignored when being applied to a
19041 substituted template parameter ([8.3.2]/1 for example), that
19042 does not allow us to unify "const T" with "int&" because both
19043 types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
19044 It is ok when we're allowing additional CV qualifiers
19045 at the outer level [14.8.2.1]/3,1st bullet. */
19046 if ((TREE_CODE (arg) == REFERENCE_TYPE
19047 || TREE_CODE (arg) == FUNCTION_TYPE
19048 || TREE_CODE (arg) == METHOD_TYPE)
19049 && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
19050 return 0;
19051
19052 if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
19053 && (parm_quals & TYPE_QUAL_RESTRICT))
19054 return 0;
19055 }
19056
19057 if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
19058 && (arg_quals & parm_quals) != parm_quals)
19059 return 0;
19060
19061 if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
19062 && (parm_quals & arg_quals) != arg_quals)
19063 return 0;
19064
19065 return 1;
19066 }
19067
19068 /* Determines the LEVEL and INDEX for the template parameter PARM. */
19069 void
19070 template_parm_level_and_index (tree parm, int* level, int* index)
19071 {
19072 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
19073 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
19074 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
19075 {
19076 *index = TEMPLATE_TYPE_IDX (parm);
19077 *level = TEMPLATE_TYPE_LEVEL (parm);
19078 }
19079 else
19080 {
19081 *index = TEMPLATE_PARM_IDX (parm);
19082 *level = TEMPLATE_PARM_LEVEL (parm);
19083 }
19084 }
19085
19086 #define RECUR_AND_CHECK_FAILURE(TP, TA, P, A, S, EP) \
19087 do { \
19088 if (unify (TP, TA, P, A, S, EP)) \
19089 return 1; \
19090 } while (0);
19091
19092 /* Unifies the remaining arguments in PACKED_ARGS with the pack
19093 expansion at the end of PACKED_PARMS. Returns 0 if the type
19094 deduction succeeds, 1 otherwise. STRICT is the same as in
19095 unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
19096 call argument list. We'll need to adjust the arguments to make them
19097 types. SUBR tells us if this is from a recursive call to
19098 type_unification_real, or for comparing two template argument
19099 lists. */
19100
19101 static int
19102 unify_pack_expansion (tree tparms, tree targs, tree packed_parms,
19103 tree packed_args, unification_kind_t strict,
19104 bool subr, bool explain_p)
19105 {
19106 tree parm
19107 = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
19108 tree pattern = PACK_EXPANSION_PATTERN (parm);
19109 tree pack, packs = NULL_TREE;
19110 int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
19111
19112 packed_args = expand_template_argument_pack (packed_args);
19113
19114 int len = TREE_VEC_LENGTH (packed_args);
19115
19116 /* Determine the parameter packs we will be deducing from the
19117 pattern, and record their current deductions. */
19118 for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm);
19119 pack; pack = TREE_CHAIN (pack))
19120 {
19121 tree parm_pack = TREE_VALUE (pack);
19122 int idx, level;
19123
19124 /* Determine the index and level of this parameter pack. */
19125 template_parm_level_and_index (parm_pack, &level, &idx);
19126
19127 /* Keep track of the parameter packs and their corresponding
19128 argument packs. */
19129 packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
19130 TREE_TYPE (packs) = make_tree_vec (len - start);
19131 }
19132
19133 /* Loop through all of the arguments that have not yet been
19134 unified and unify each with the pattern. */
19135 for (i = start; i < len; i++)
19136 {
19137 tree parm;
19138 bool any_explicit = false;
19139 tree arg = TREE_VEC_ELT (packed_args, i);
19140
19141 /* For each parameter pack, set its TMPL_ARG to either NULL_TREE
19142 or the element of its argument pack at the current index if
19143 this argument was explicitly specified. */
19144 for (pack = packs; pack; pack = TREE_CHAIN (pack))
19145 {
19146 int idx, level;
19147 tree arg, pargs;
19148 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
19149
19150 arg = NULL_TREE;
19151 if (TREE_VALUE (pack)
19152 && (pargs = ARGUMENT_PACK_EXPLICIT_ARGS (TREE_VALUE (pack)))
19153 && (i - start < TREE_VEC_LENGTH (pargs)))
19154 {
19155 any_explicit = true;
19156 arg = TREE_VEC_ELT (pargs, i - start);
19157 }
19158 TMPL_ARG (targs, level, idx) = arg;
19159 }
19160
19161 /* If we had explicit template arguments, substitute them into the
19162 pattern before deduction. */
19163 if (any_explicit)
19164 {
19165 /* Some arguments might still be unspecified or dependent. */
19166 bool dependent;
19167 ++processing_template_decl;
19168 dependent = any_dependent_template_arguments_p (targs);
19169 if (!dependent)
19170 --processing_template_decl;
19171 parm = tsubst (pattern, targs,
19172 explain_p ? tf_warning_or_error : tf_none,
19173 NULL_TREE);
19174 if (dependent)
19175 --processing_template_decl;
19176 if (parm == error_mark_node)
19177 return 1;
19178 }
19179 else
19180 parm = pattern;
19181
19182 /* Unify the pattern with the current argument. */
19183 if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
19184 explain_p))
19185 return 1;
19186
19187 /* For each parameter pack, collect the deduced value. */
19188 for (pack = packs; pack; pack = TREE_CHAIN (pack))
19189 {
19190 int idx, level;
19191 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
19192
19193 TREE_VEC_ELT (TREE_TYPE (pack), i - start) =
19194 TMPL_ARG (targs, level, idx);
19195 }
19196 }
19197
19198 /* Verify that the results of unification with the parameter packs
19199 produce results consistent with what we've seen before, and make
19200 the deduced argument packs available. */
19201 for (pack = packs; pack; pack = TREE_CHAIN (pack))
19202 {
19203 tree old_pack = TREE_VALUE (pack);
19204 tree new_args = TREE_TYPE (pack);
19205 int i, len = TREE_VEC_LENGTH (new_args);
19206 int idx, level;
19207 bool nondeduced_p = false;
19208
19209 /* By default keep the original deduced argument pack.
19210 If necessary, more specific code is going to update the
19211 resulting deduced argument later down in this function. */
19212 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
19213 TMPL_ARG (targs, level, idx) = old_pack;
19214
19215 /* If NEW_ARGS contains any NULL_TREE entries, we didn't
19216 actually deduce anything. */
19217 for (i = 0; i < len && !nondeduced_p; ++i)
19218 if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
19219 nondeduced_p = true;
19220 if (nondeduced_p)
19221 continue;
19222
19223 if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
19224 {
19225 /* If we had fewer function args than explicit template args,
19226 just use the explicits. */
19227 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
19228 int explicit_len = TREE_VEC_LENGTH (explicit_args);
19229 if (len < explicit_len)
19230 new_args = explicit_args;
19231 }
19232
19233 if (!old_pack)
19234 {
19235 tree result;
19236 /* Build the deduced *_ARGUMENT_PACK. */
19237 if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
19238 {
19239 result = make_node (NONTYPE_ARGUMENT_PACK);
19240 TREE_TYPE (result) =
19241 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
19242 TREE_CONSTANT (result) = 1;
19243 }
19244 else
19245 result = cxx_make_type (TYPE_ARGUMENT_PACK);
19246
19247 SET_ARGUMENT_PACK_ARGS (result, new_args);
19248
19249 /* Note the deduced argument packs for this parameter
19250 pack. */
19251 TMPL_ARG (targs, level, idx) = result;
19252 }
19253 else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
19254 && (ARGUMENT_PACK_ARGS (old_pack)
19255 == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
19256 {
19257 /* We only had the explicitly-provided arguments before, but
19258 now we have a complete set of arguments. */
19259 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
19260
19261 SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
19262 ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
19263 ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
19264 }
19265 else
19266 {
19267 tree bad_old_arg = NULL_TREE, bad_new_arg = NULL_TREE;
19268 tree old_args = ARGUMENT_PACK_ARGS (old_pack);
19269
19270 if (!comp_template_args (old_args, new_args,
19271 &bad_old_arg, &bad_new_arg))
19272 /* Inconsistent unification of this parameter pack. */
19273 return unify_parameter_pack_inconsistent (explain_p,
19274 bad_old_arg,
19275 bad_new_arg);
19276 }
19277 }
19278
19279 return unify_success (explain_p);
19280 }
19281
19282 /* Handle unification of the domain of an array. PARM_DOM and ARG_DOM are
19283 INTEGER_TYPEs representing the TYPE_DOMAIN of ARRAY_TYPEs. The other
19284 parameters and return value are as for unify. */
19285
19286 static int
19287 unify_array_domain (tree tparms, tree targs,
19288 tree parm_dom, tree arg_dom,
19289 bool explain_p)
19290 {
19291 tree parm_max;
19292 tree arg_max;
19293 bool parm_cst;
19294 bool arg_cst;
19295
19296 /* Our representation of array types uses "N - 1" as the
19297 TYPE_MAX_VALUE for an array with "N" elements, if "N" is
19298 not an integer constant. We cannot unify arbitrarily
19299 complex expressions, so we eliminate the MINUS_EXPRs
19300 here. */
19301 parm_max = TYPE_MAX_VALUE (parm_dom);
19302 parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
19303 if (!parm_cst)
19304 {
19305 gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
19306 parm_max = TREE_OPERAND (parm_max, 0);
19307 }
19308 arg_max = TYPE_MAX_VALUE (arg_dom);
19309 arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
19310 if (!arg_cst)
19311 {
19312 /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
19313 trying to unify the type of a variable with the type
19314 of a template parameter. For example:
19315
19316 template <unsigned int N>
19317 void f (char (&) [N]);
19318 int g();
19319 void h(int i) {
19320 char a[g(i)];
19321 f(a);
19322 }
19323
19324 Here, the type of the ARG will be "int [g(i)]", and
19325 may be a SAVE_EXPR, etc. */
19326 if (TREE_CODE (arg_max) != MINUS_EXPR)
19327 return unify_vla_arg (explain_p, arg_dom);
19328 arg_max = TREE_OPERAND (arg_max, 0);
19329 }
19330
19331 /* If only one of the bounds used a MINUS_EXPR, compensate
19332 by adding one to the other bound. */
19333 if (parm_cst && !arg_cst)
19334 parm_max = fold_build2_loc (input_location, PLUS_EXPR,
19335 integer_type_node,
19336 parm_max,
19337 integer_one_node);
19338 else if (arg_cst && !parm_cst)
19339 arg_max = fold_build2_loc (input_location, PLUS_EXPR,
19340 integer_type_node,
19341 arg_max,
19342 integer_one_node);
19343
19344 return unify (tparms, targs, parm_max, arg_max,
19345 UNIFY_ALLOW_INTEGER, explain_p);
19346 }
19347
19348 /* Deduce the value of template parameters. TPARMS is the (innermost)
19349 set of template parameters to a template. TARGS is the bindings
19350 for those template parameters, as determined thus far; TARGS may
19351 include template arguments for outer levels of template parameters
19352 as well. PARM is a parameter to a template function, or a
19353 subcomponent of that parameter; ARG is the corresponding argument.
19354 This function attempts to match PARM with ARG in a manner
19355 consistent with the existing assignments in TARGS. If more values
19356 are deduced, then TARGS is updated.
19357
19358 Returns 0 if the type deduction succeeds, 1 otherwise. The
19359 parameter STRICT is a bitwise or of the following flags:
19360
19361 UNIFY_ALLOW_NONE:
19362 Require an exact match between PARM and ARG.
19363 UNIFY_ALLOW_MORE_CV_QUAL:
19364 Allow the deduced ARG to be more cv-qualified (by qualification
19365 conversion) than ARG.
19366 UNIFY_ALLOW_LESS_CV_QUAL:
19367 Allow the deduced ARG to be less cv-qualified than ARG.
19368 UNIFY_ALLOW_DERIVED:
19369 Allow the deduced ARG to be a template base class of ARG,
19370 or a pointer to a template base class of the type pointed to by
19371 ARG.
19372 UNIFY_ALLOW_INTEGER:
19373 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
19374 case for more information.
19375 UNIFY_ALLOW_OUTER_LEVEL:
19376 This is the outermost level of a deduction. Used to determine validity
19377 of qualification conversions. A valid qualification conversion must
19378 have const qualified pointers leading up to the inner type which
19379 requires additional CV quals, except at the outer level, where const
19380 is not required [conv.qual]. It would be normal to set this flag in
19381 addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
19382 UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
19383 This is the outermost level of a deduction, and PARM can be more CV
19384 qualified at this point.
19385 UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
19386 This is the outermost level of a deduction, and PARM can be less CV
19387 qualified at this point. */
19388
19389 static int
19390 unify (tree tparms, tree targs, tree parm, tree arg, int strict,
19391 bool explain_p)
19392 {
19393 int idx;
19394 tree targ;
19395 tree tparm;
19396 int strict_in = strict;
19397
19398 /* I don't think this will do the right thing with respect to types.
19399 But the only case I've seen it in so far has been array bounds, where
19400 signedness is the only information lost, and I think that will be
19401 okay. */
19402 while (TREE_CODE (parm) == NOP_EXPR)
19403 parm = TREE_OPERAND (parm, 0);
19404
19405 if (arg == error_mark_node)
19406 return unify_invalid (explain_p);
19407 if (arg == unknown_type_node
19408 || arg == init_list_type_node)
19409 /* We can't deduce anything from this, but we might get all the
19410 template args from other function args. */
19411 return unify_success (explain_p);
19412
19413 /* If PARM uses template parameters, then we can't bail out here,
19414 even if ARG == PARM, since we won't record unifications for the
19415 template parameters. We might need them if we're trying to
19416 figure out which of two things is more specialized. */
19417 if (arg == parm && !uses_template_parms (parm))
19418 return unify_success (explain_p);
19419
19420 /* Handle init lists early, so the rest of the function can assume
19421 we're dealing with a type. */
19422 if (BRACE_ENCLOSED_INITIALIZER_P (arg))
19423 {
19424 tree elt, elttype;
19425 unsigned i;
19426 tree orig_parm = parm;
19427
19428 /* Replace T with std::initializer_list<T> for deduction. */
19429 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
19430 && flag_deduce_init_list)
19431 parm = listify (parm);
19432
19433 if (!is_std_init_list (parm)
19434 && TREE_CODE (parm) != ARRAY_TYPE)
19435 /* We can only deduce from an initializer list argument if the
19436 parameter is std::initializer_list or an array; otherwise this
19437 is a non-deduced context. */
19438 return unify_success (explain_p);
19439
19440 if (TREE_CODE (parm) == ARRAY_TYPE)
19441 elttype = TREE_TYPE (parm);
19442 else
19443 {
19444 elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
19445 /* Deduction is defined in terms of a single type, so just punt
19446 on the (bizarre) std::initializer_list<T...>. */
19447 if (PACK_EXPANSION_P (elttype))
19448 return unify_success (explain_p);
19449 }
19450
19451 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
19452 {
19453 int elt_strict = strict;
19454
19455 if (elt == error_mark_node)
19456 return unify_invalid (explain_p);
19457
19458 if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
19459 {
19460 tree type = TREE_TYPE (elt);
19461 if (type == error_mark_node)
19462 return unify_invalid (explain_p);
19463 /* It should only be possible to get here for a call. */
19464 gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
19465 elt_strict |= maybe_adjust_types_for_deduction
19466 (DEDUCE_CALL, &elttype, &type, elt);
19467 elt = type;
19468 }
19469
19470 RECUR_AND_CHECK_FAILURE (tparms, targs, elttype, elt, elt_strict,
19471 explain_p);
19472 }
19473
19474 if (TREE_CODE (parm) == ARRAY_TYPE
19475 && deducible_array_bound (TYPE_DOMAIN (parm)))
19476 {
19477 /* Also deduce from the length of the initializer list. */
19478 tree max = size_int (CONSTRUCTOR_NELTS (arg));
19479 tree idx = compute_array_index_type (NULL_TREE, max, tf_none);
19480 if (idx == error_mark_node)
19481 return unify_invalid (explain_p);
19482 return unify_array_domain (tparms, targs, TYPE_DOMAIN (parm),
19483 idx, explain_p);
19484 }
19485
19486 /* If the std::initializer_list<T> deduction worked, replace the
19487 deduced A with std::initializer_list<A>. */
19488 if (orig_parm != parm)
19489 {
19490 idx = TEMPLATE_TYPE_IDX (orig_parm);
19491 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
19492 targ = listify (targ);
19493 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
19494 }
19495 return unify_success (explain_p);
19496 }
19497
19498 /* Immediately reject some pairs that won't unify because of
19499 cv-qualification mismatches. */
19500 if (TREE_CODE (arg) == TREE_CODE (parm)
19501 && TYPE_P (arg)
19502 /* It is the elements of the array which hold the cv quals of an array
19503 type, and the elements might be template type parms. We'll check
19504 when we recurse. */
19505 && TREE_CODE (arg) != ARRAY_TYPE
19506 /* We check the cv-qualifiers when unifying with template type
19507 parameters below. We want to allow ARG `const T' to unify with
19508 PARM `T' for example, when computing which of two templates
19509 is more specialized, for example. */
19510 && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
19511 && !check_cv_quals_for_unify (strict_in, arg, parm))
19512 return unify_cv_qual_mismatch (explain_p, parm, arg);
19513
19514 if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
19515 && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
19516 strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
19517 strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
19518 strict &= ~UNIFY_ALLOW_DERIVED;
19519 strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
19520 strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
19521
19522 switch (TREE_CODE (parm))
19523 {
19524 case TYPENAME_TYPE:
19525 case SCOPE_REF:
19526 case UNBOUND_CLASS_TEMPLATE:
19527 /* In a type which contains a nested-name-specifier, template
19528 argument values cannot be deduced for template parameters used
19529 within the nested-name-specifier. */
19530 return unify_success (explain_p);
19531
19532 case TEMPLATE_TYPE_PARM:
19533 case TEMPLATE_TEMPLATE_PARM:
19534 case BOUND_TEMPLATE_TEMPLATE_PARM:
19535 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
19536 if (error_operand_p (tparm))
19537 return unify_invalid (explain_p);
19538
19539 if (TEMPLATE_TYPE_LEVEL (parm)
19540 != template_decl_level (tparm))
19541 /* The PARM is not one we're trying to unify. Just check
19542 to see if it matches ARG. */
19543 {
19544 if (TREE_CODE (arg) == TREE_CODE (parm)
19545 && (is_auto (parm) ? is_auto (arg)
19546 : same_type_p (parm, arg)))
19547 return unify_success (explain_p);
19548 else
19549 return unify_type_mismatch (explain_p, parm, arg);
19550 }
19551 idx = TEMPLATE_TYPE_IDX (parm);
19552 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
19553 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
19554 if (error_operand_p (tparm))
19555 return unify_invalid (explain_p);
19556
19557 /* Check for mixed types and values. */
19558 if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
19559 && TREE_CODE (tparm) != TYPE_DECL)
19560 || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
19561 && TREE_CODE (tparm) != TEMPLATE_DECL))
19562 gcc_unreachable ();
19563
19564 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
19565 {
19566 /* ARG must be constructed from a template class or a template
19567 template parameter. */
19568 if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
19569 && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
19570 return unify_template_deduction_failure (explain_p, parm, arg);
19571 {
19572 tree parmvec = TYPE_TI_ARGS (parm);
19573 /* An alias template name is never deduced. */
19574 if (TYPE_ALIAS_P (arg))
19575 arg = strip_typedefs (arg);
19576 tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
19577 tree full_argvec = add_to_template_args (targs, argvec);
19578 tree parm_parms
19579 = DECL_INNERMOST_TEMPLATE_PARMS
19580 (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
19581 int i, len;
19582 int parm_variadic_p = 0;
19583
19584 /* The resolution to DR150 makes clear that default
19585 arguments for an N-argument may not be used to bind T
19586 to a template template parameter with fewer than N
19587 parameters. It is not safe to permit the binding of
19588 default arguments as an extension, as that may change
19589 the meaning of a conforming program. Consider:
19590
19591 struct Dense { static const unsigned int dim = 1; };
19592
19593 template <template <typename> class View,
19594 typename Block>
19595 void operator+(float, View<Block> const&);
19596
19597 template <typename Block,
19598 unsigned int Dim = Block::dim>
19599 struct Lvalue_proxy { operator float() const; };
19600
19601 void
19602 test_1d (void) {
19603 Lvalue_proxy<Dense> p;
19604 float b;
19605 b + p;
19606 }
19607
19608 Here, if Lvalue_proxy is permitted to bind to View, then
19609 the global operator+ will be used; if they are not, the
19610 Lvalue_proxy will be converted to float. */
19611 if (coerce_template_parms (parm_parms,
19612 full_argvec,
19613 TYPE_TI_TEMPLATE (parm),
19614 (explain_p
19615 ? tf_warning_or_error
19616 : tf_none),
19617 /*require_all_args=*/true,
19618 /*use_default_args=*/false)
19619 == error_mark_node)
19620 return 1;
19621
19622 /* Deduce arguments T, i from TT<T> or TT<i>.
19623 We check each element of PARMVEC and ARGVEC individually
19624 rather than the whole TREE_VEC since they can have
19625 different number of elements. */
19626
19627 parmvec = expand_template_argument_pack (parmvec);
19628 argvec = expand_template_argument_pack (argvec);
19629
19630 len = TREE_VEC_LENGTH (parmvec);
19631
19632 /* Check if the parameters end in a pack, making them
19633 variadic. */
19634 if (len > 0
19635 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
19636 parm_variadic_p = 1;
19637
19638 for (i = 0; i < len - parm_variadic_p; ++i)
19639 /* If the template argument list of P contains a pack
19640 expansion that is not the last template argument, the
19641 entire template argument list is a non-deduced
19642 context. */
19643 if (PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, i)))
19644 return unify_success (explain_p);
19645
19646 if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
19647 return unify_too_few_arguments (explain_p,
19648 TREE_VEC_LENGTH (argvec), len);
19649
19650 for (i = 0; i < len - parm_variadic_p; ++i)
19651 {
19652 RECUR_AND_CHECK_FAILURE (tparms, targs,
19653 TREE_VEC_ELT (parmvec, i),
19654 TREE_VEC_ELT (argvec, i),
19655 UNIFY_ALLOW_NONE, explain_p);
19656 }
19657
19658 if (parm_variadic_p
19659 && unify_pack_expansion (tparms, targs,
19660 parmvec, argvec,
19661 DEDUCE_EXACT,
19662 /*subr=*/true, explain_p))
19663 return 1;
19664 }
19665 arg = TYPE_TI_TEMPLATE (arg);
19666
19667 /* Fall through to deduce template name. */
19668 }
19669
19670 if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
19671 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
19672 {
19673 /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>. */
19674
19675 /* Simple cases: Value already set, does match or doesn't. */
19676 if (targ != NULL_TREE && template_args_equal (targ, arg))
19677 return unify_success (explain_p);
19678 else if (targ)
19679 return unify_inconsistency (explain_p, parm, targ, arg);
19680 }
19681 else
19682 {
19683 /* If PARM is `const T' and ARG is only `int', we don't have
19684 a match unless we are allowing additional qualification.
19685 If ARG is `const int' and PARM is just `T' that's OK;
19686 that binds `const int' to `T'. */
19687 if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
19688 arg, parm))
19689 return unify_cv_qual_mismatch (explain_p, parm, arg);
19690
19691 /* Consider the case where ARG is `const volatile int' and
19692 PARM is `const T'. Then, T should be `volatile int'. */
19693 arg = cp_build_qualified_type_real
19694 (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
19695 if (arg == error_mark_node)
19696 return unify_invalid (explain_p);
19697
19698 /* Simple cases: Value already set, does match or doesn't. */
19699 if (targ != NULL_TREE && same_type_p (targ, arg))
19700 return unify_success (explain_p);
19701 else if (targ)
19702 return unify_inconsistency (explain_p, parm, targ, arg);
19703
19704 /* Make sure that ARG is not a variable-sized array. (Note
19705 that were talking about variable-sized arrays (like
19706 `int[n]'), rather than arrays of unknown size (like
19707 `int[]').) We'll get very confused by such a type since
19708 the bound of the array is not constant, and therefore
19709 not mangleable. Besides, such types are not allowed in
19710 ISO C++, so we can do as we please here. We do allow
19711 them for 'auto' deduction, since that isn't ABI-exposed. */
19712 if (!is_auto (parm) && variably_modified_type_p (arg, NULL_TREE))
19713 return unify_vla_arg (explain_p, arg);
19714
19715 /* Strip typedefs as in convert_template_argument. */
19716 arg = canonicalize_type_argument (arg, tf_none);
19717 }
19718
19719 /* If ARG is a parameter pack or an expansion, we cannot unify
19720 against it unless PARM is also a parameter pack. */
19721 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
19722 && !template_parameter_pack_p (parm))
19723 return unify_parameter_pack_mismatch (explain_p, parm, arg);
19724
19725 /* If the argument deduction results is a METHOD_TYPE,
19726 then there is a problem.
19727 METHOD_TYPE doesn't map to any real C++ type the result of
19728 the deduction can not be of that type. */
19729 if (TREE_CODE (arg) == METHOD_TYPE)
19730 return unify_method_type_error (explain_p, arg);
19731
19732 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
19733 return unify_success (explain_p);
19734
19735 case TEMPLATE_PARM_INDEX:
19736 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
19737 if (error_operand_p (tparm))
19738 return unify_invalid (explain_p);
19739
19740 if (TEMPLATE_PARM_LEVEL (parm)
19741 != template_decl_level (tparm))
19742 {
19743 /* The PARM is not one we're trying to unify. Just check
19744 to see if it matches ARG. */
19745 int result = !(TREE_CODE (arg) == TREE_CODE (parm)
19746 && cp_tree_equal (parm, arg));
19747 if (result)
19748 unify_expression_unequal (explain_p, parm, arg);
19749 return result;
19750 }
19751
19752 idx = TEMPLATE_PARM_IDX (parm);
19753 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
19754
19755 if (targ)
19756 {
19757 int x = !cp_tree_equal (targ, arg);
19758 if (x)
19759 unify_inconsistency (explain_p, parm, targ, arg);
19760 return x;
19761 }
19762
19763 /* [temp.deduct.type] If, in the declaration of a function template
19764 with a non-type template-parameter, the non-type
19765 template-parameter is used in an expression in the function
19766 parameter-list and, if the corresponding template-argument is
19767 deduced, the template-argument type shall match the type of the
19768 template-parameter exactly, except that a template-argument
19769 deduced from an array bound may be of any integral type.
19770 The non-type parameter might use already deduced type parameters. */
19771 tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
19772 if (!TREE_TYPE (arg))
19773 /* Template-parameter dependent expression. Just accept it for now.
19774 It will later be processed in convert_template_argument. */
19775 ;
19776 else if (same_type_p (TREE_TYPE (arg), tparm))
19777 /* OK */;
19778 else if ((strict & UNIFY_ALLOW_INTEGER)
19779 && CP_INTEGRAL_TYPE_P (tparm))
19780 /* Convert the ARG to the type of PARM; the deduced non-type
19781 template argument must exactly match the types of the
19782 corresponding parameter. */
19783 arg = fold (build_nop (tparm, arg));
19784 else if (uses_template_parms (tparm))
19785 /* We haven't deduced the type of this parameter yet. Try again
19786 later. */
19787 return unify_success (explain_p);
19788 else
19789 return unify_type_mismatch (explain_p, tparm, TREE_TYPE (arg));
19790
19791 /* If ARG is a parameter pack or an expansion, we cannot unify
19792 against it unless PARM is also a parameter pack. */
19793 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
19794 && !TEMPLATE_PARM_PARAMETER_PACK (parm))
19795 return unify_parameter_pack_mismatch (explain_p, parm, arg);
19796
19797 {
19798 bool removed_attr = false;
19799 arg = strip_typedefs_expr (arg, &removed_attr);
19800 }
19801 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
19802 return unify_success (explain_p);
19803
19804 case PTRMEM_CST:
19805 {
19806 /* A pointer-to-member constant can be unified only with
19807 another constant. */
19808 if (TREE_CODE (arg) != PTRMEM_CST)
19809 return unify_ptrmem_cst_mismatch (explain_p, parm, arg);
19810
19811 /* Just unify the class member. It would be useless (and possibly
19812 wrong, depending on the strict flags) to unify also
19813 PTRMEM_CST_CLASS, because we want to be sure that both parm and
19814 arg refer to the same variable, even if through different
19815 classes. For instance:
19816
19817 struct A { int x; };
19818 struct B : A { };
19819
19820 Unification of &A::x and &B::x must succeed. */
19821 return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
19822 PTRMEM_CST_MEMBER (arg), strict, explain_p);
19823 }
19824
19825 case POINTER_TYPE:
19826 {
19827 if (!TYPE_PTR_P (arg))
19828 return unify_type_mismatch (explain_p, parm, arg);
19829
19830 /* [temp.deduct.call]
19831
19832 A can be another pointer or pointer to member type that can
19833 be converted to the deduced A via a qualification
19834 conversion (_conv.qual_).
19835
19836 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
19837 This will allow for additional cv-qualification of the
19838 pointed-to types if appropriate. */
19839
19840 if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
19841 /* The derived-to-base conversion only persists through one
19842 level of pointers. */
19843 strict |= (strict_in & UNIFY_ALLOW_DERIVED);
19844
19845 return unify (tparms, targs, TREE_TYPE (parm),
19846 TREE_TYPE (arg), strict, explain_p);
19847 }
19848
19849 case REFERENCE_TYPE:
19850 if (TREE_CODE (arg) != REFERENCE_TYPE)
19851 return unify_type_mismatch (explain_p, parm, arg);
19852 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
19853 strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
19854
19855 case ARRAY_TYPE:
19856 if (TREE_CODE (arg) != ARRAY_TYPE)
19857 return unify_type_mismatch (explain_p, parm, arg);
19858 if ((TYPE_DOMAIN (parm) == NULL_TREE)
19859 != (TYPE_DOMAIN (arg) == NULL_TREE))
19860 return unify_type_mismatch (explain_p, parm, arg);
19861 RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
19862 strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
19863 if (TYPE_DOMAIN (parm) != NULL_TREE)
19864 return unify_array_domain (tparms, targs, TYPE_DOMAIN (parm),
19865 TYPE_DOMAIN (arg), explain_p);
19866 return unify_success (explain_p);
19867
19868 case REAL_TYPE:
19869 case COMPLEX_TYPE:
19870 case VECTOR_TYPE:
19871 case INTEGER_TYPE:
19872 case BOOLEAN_TYPE:
19873 case ENUMERAL_TYPE:
19874 case VOID_TYPE:
19875 case NULLPTR_TYPE:
19876 if (TREE_CODE (arg) != TREE_CODE (parm))
19877 return unify_type_mismatch (explain_p, parm, arg);
19878
19879 /* We have already checked cv-qualification at the top of the
19880 function. */
19881 if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
19882 return unify_type_mismatch (explain_p, parm, arg);
19883
19884 /* As far as unification is concerned, this wins. Later checks
19885 will invalidate it if necessary. */
19886 return unify_success (explain_p);
19887
19888 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
19889 /* Type INTEGER_CST can come from ordinary constant template args. */
19890 case INTEGER_CST:
19891 while (TREE_CODE (arg) == NOP_EXPR)
19892 arg = TREE_OPERAND (arg, 0);
19893
19894 if (TREE_CODE (arg) != INTEGER_CST)
19895 return unify_template_argument_mismatch (explain_p, parm, arg);
19896 return (tree_int_cst_equal (parm, arg)
19897 ? unify_success (explain_p)
19898 : unify_template_argument_mismatch (explain_p, parm, arg));
19899
19900 case TREE_VEC:
19901 {
19902 int i, len, argslen;
19903 int parm_variadic_p = 0;
19904
19905 if (TREE_CODE (arg) != TREE_VEC)
19906 return unify_template_argument_mismatch (explain_p, parm, arg);
19907
19908 len = TREE_VEC_LENGTH (parm);
19909 argslen = TREE_VEC_LENGTH (arg);
19910
19911 /* Check for pack expansions in the parameters. */
19912 for (i = 0; i < len; ++i)
19913 {
19914 if (PACK_EXPANSION_P (TREE_VEC_ELT (parm, i)))
19915 {
19916 if (i == len - 1)
19917 /* We can unify against something with a trailing
19918 parameter pack. */
19919 parm_variadic_p = 1;
19920 else
19921 /* [temp.deduct.type]/9: If the template argument list of
19922 P contains a pack expansion that is not the last
19923 template argument, the entire template argument list
19924 is a non-deduced context. */
19925 return unify_success (explain_p);
19926 }
19927 }
19928
19929 /* If we don't have enough arguments to satisfy the parameters
19930 (not counting the pack expression at the end), or we have
19931 too many arguments for a parameter list that doesn't end in
19932 a pack expression, we can't unify. */
19933 if (parm_variadic_p
19934 ? argslen < len - parm_variadic_p
19935 : argslen != len)
19936 return unify_arity (explain_p, TREE_VEC_LENGTH (arg), len);
19937
19938 /* Unify all of the parameters that precede the (optional)
19939 pack expression. */
19940 for (i = 0; i < len - parm_variadic_p; ++i)
19941 {
19942 RECUR_AND_CHECK_FAILURE (tparms, targs,
19943 TREE_VEC_ELT (parm, i),
19944 TREE_VEC_ELT (arg, i),
19945 UNIFY_ALLOW_NONE, explain_p);
19946 }
19947 if (parm_variadic_p)
19948 return unify_pack_expansion (tparms, targs, parm, arg,
19949 DEDUCE_EXACT,
19950 /*subr=*/true, explain_p);
19951 return unify_success (explain_p);
19952 }
19953
19954 case RECORD_TYPE:
19955 case UNION_TYPE:
19956 if (TREE_CODE (arg) != TREE_CODE (parm))
19957 return unify_type_mismatch (explain_p, parm, arg);
19958
19959 if (TYPE_PTRMEMFUNC_P (parm))
19960 {
19961 if (!TYPE_PTRMEMFUNC_P (arg))
19962 return unify_type_mismatch (explain_p, parm, arg);
19963
19964 return unify (tparms, targs,
19965 TYPE_PTRMEMFUNC_FN_TYPE (parm),
19966 TYPE_PTRMEMFUNC_FN_TYPE (arg),
19967 strict, explain_p);
19968 }
19969 else if (TYPE_PTRMEMFUNC_P (arg))
19970 return unify_type_mismatch (explain_p, parm, arg);
19971
19972 if (CLASSTYPE_TEMPLATE_INFO (parm))
19973 {
19974 tree t = NULL_TREE;
19975
19976 if (strict_in & UNIFY_ALLOW_DERIVED)
19977 {
19978 /* First, we try to unify the PARM and ARG directly. */
19979 t = try_class_unification (tparms, targs,
19980 parm, arg, explain_p);
19981
19982 if (!t)
19983 {
19984 /* Fallback to the special case allowed in
19985 [temp.deduct.call]:
19986
19987 If P is a class, and P has the form
19988 template-id, then A can be a derived class of
19989 the deduced A. Likewise, if P is a pointer to
19990 a class of the form template-id, A can be a
19991 pointer to a derived class pointed to by the
19992 deduced A. */
19993 enum template_base_result r;
19994 r = get_template_base (tparms, targs, parm, arg,
19995 explain_p, &t);
19996
19997 if (!t)
19998 {
19999 /* Don't give the derived diagnostic if we're
20000 already dealing with the same template. */
20001 bool same_template
20002 = (CLASSTYPE_TEMPLATE_INFO (arg)
20003 && (CLASSTYPE_TI_TEMPLATE (parm)
20004 == CLASSTYPE_TI_TEMPLATE (arg)));
20005 return unify_no_common_base (explain_p && !same_template,
20006 r, parm, arg);
20007 }
20008 }
20009 }
20010 else if (CLASSTYPE_TEMPLATE_INFO (arg)
20011 && (CLASSTYPE_TI_TEMPLATE (parm)
20012 == CLASSTYPE_TI_TEMPLATE (arg)))
20013 /* Perhaps PARM is something like S<U> and ARG is S<int>.
20014 Then, we should unify `int' and `U'. */
20015 t = arg;
20016 else
20017 /* There's no chance of unification succeeding. */
20018 return unify_type_mismatch (explain_p, parm, arg);
20019
20020 return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
20021 CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE, explain_p);
20022 }
20023 else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
20024 return unify_type_mismatch (explain_p, parm, arg);
20025 return unify_success (explain_p);
20026
20027 case METHOD_TYPE:
20028 case FUNCTION_TYPE:
20029 {
20030 unsigned int nargs;
20031 tree *args;
20032 tree a;
20033 unsigned int i;
20034
20035 if (TREE_CODE (arg) != TREE_CODE (parm))
20036 return unify_type_mismatch (explain_p, parm, arg);
20037
20038 /* CV qualifications for methods can never be deduced, they must
20039 match exactly. We need to check them explicitly here,
20040 because type_unification_real treats them as any other
20041 cv-qualified parameter. */
20042 if (TREE_CODE (parm) == METHOD_TYPE
20043 && (!check_cv_quals_for_unify
20044 (UNIFY_ALLOW_NONE,
20045 class_of_this_parm (arg),
20046 class_of_this_parm (parm))))
20047 return unify_cv_qual_mismatch (explain_p, parm, arg);
20048
20049 RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm),
20050 TREE_TYPE (arg), UNIFY_ALLOW_NONE, explain_p);
20051
20052 nargs = list_length (TYPE_ARG_TYPES (arg));
20053 args = XALLOCAVEC (tree, nargs);
20054 for (a = TYPE_ARG_TYPES (arg), i = 0;
20055 a != NULL_TREE && a != void_list_node;
20056 a = TREE_CHAIN (a), ++i)
20057 args[i] = TREE_VALUE (a);
20058 nargs = i;
20059
20060 return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
20061 args, nargs, 1, DEDUCE_EXACT,
20062 LOOKUP_NORMAL, NULL, explain_p);
20063 }
20064
20065 case OFFSET_TYPE:
20066 /* Unify a pointer to member with a pointer to member function, which
20067 deduces the type of the member as a function type. */
20068 if (TYPE_PTRMEMFUNC_P (arg))
20069 {
20070 /* Check top-level cv qualifiers */
20071 if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
20072 return unify_cv_qual_mismatch (explain_p, parm, arg);
20073
20074 RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
20075 TYPE_PTRMEMFUNC_OBJECT_TYPE (arg),
20076 UNIFY_ALLOW_NONE, explain_p);
20077
20078 /* Determine the type of the function we are unifying against. */
20079 tree fntype = static_fn_type (arg);
20080
20081 return unify (tparms, targs, TREE_TYPE (parm), fntype, strict, explain_p);
20082 }
20083
20084 if (TREE_CODE (arg) != OFFSET_TYPE)
20085 return unify_type_mismatch (explain_p, parm, arg);
20086 RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
20087 TYPE_OFFSET_BASETYPE (arg),
20088 UNIFY_ALLOW_NONE, explain_p);
20089 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
20090 strict, explain_p);
20091
20092 case CONST_DECL:
20093 if (DECL_TEMPLATE_PARM_P (parm))
20094 return unify (tparms, targs, DECL_INITIAL (parm), arg, strict, explain_p);
20095 if (arg != scalar_constant_value (parm))
20096 return unify_template_argument_mismatch (explain_p, parm, arg);
20097 return unify_success (explain_p);
20098
20099 case FIELD_DECL:
20100 case TEMPLATE_DECL:
20101 /* Matched cases are handled by the ARG == PARM test above. */
20102 return unify_template_argument_mismatch (explain_p, parm, arg);
20103
20104 case VAR_DECL:
20105 /* We might get a variable as a non-type template argument in parm if the
20106 corresponding parameter is type-dependent. Make any necessary
20107 adjustments based on whether arg is a reference. */
20108 if (CONSTANT_CLASS_P (arg))
20109 parm = fold_non_dependent_expr (parm);
20110 else if (REFERENCE_REF_P (arg))
20111 {
20112 tree sub = TREE_OPERAND (arg, 0);
20113 STRIP_NOPS (sub);
20114 if (TREE_CODE (sub) == ADDR_EXPR)
20115 arg = TREE_OPERAND (sub, 0);
20116 }
20117 /* Now use the normal expression code to check whether they match. */
20118 goto expr;
20119
20120 case TYPE_ARGUMENT_PACK:
20121 case NONTYPE_ARGUMENT_PACK:
20122 return unify (tparms, targs, ARGUMENT_PACK_ARGS (parm),
20123 ARGUMENT_PACK_ARGS (arg), strict, explain_p);
20124
20125 case TYPEOF_TYPE:
20126 case DECLTYPE_TYPE:
20127 case UNDERLYING_TYPE:
20128 /* Cannot deduce anything from TYPEOF_TYPE, DECLTYPE_TYPE,
20129 or UNDERLYING_TYPE nodes. */
20130 return unify_success (explain_p);
20131
20132 case ERROR_MARK:
20133 /* Unification fails if we hit an error node. */
20134 return unify_invalid (explain_p);
20135
20136 case INDIRECT_REF:
20137 if (REFERENCE_REF_P (parm))
20138 {
20139 if (REFERENCE_REF_P (arg))
20140 arg = TREE_OPERAND (arg, 0);
20141 return unify (tparms, targs, TREE_OPERAND (parm, 0), arg,
20142 strict, explain_p);
20143 }
20144 /* FALLTHRU */
20145
20146 default:
20147 /* An unresolved overload is a nondeduced context. */
20148 if (is_overloaded_fn (parm) || type_unknown_p (parm))
20149 return unify_success (explain_p);
20150 gcc_assert (EXPR_P (parm));
20151 expr:
20152 /* We must be looking at an expression. This can happen with
20153 something like:
20154
20155 template <int I>
20156 void foo(S<I>, S<I + 2>);
20157
20158 This is a "nondeduced context":
20159
20160 [deduct.type]
20161
20162 The nondeduced contexts are:
20163
20164 --A type that is a template-id in which one or more of
20165 the template-arguments is an expression that references
20166 a template-parameter.
20167
20168 In these cases, we assume deduction succeeded, but don't
20169 actually infer any unifications. */
20170
20171 if (!uses_template_parms (parm)
20172 && !template_args_equal (parm, arg))
20173 return unify_expression_unequal (explain_p, parm, arg);
20174 else
20175 return unify_success (explain_p);
20176 }
20177 }
20178 #undef RECUR_AND_CHECK_FAILURE
20179 \f
20180 /* Note that DECL can be defined in this translation unit, if
20181 required. */
20182
20183 static void
20184 mark_definable (tree decl)
20185 {
20186 tree clone;
20187 DECL_NOT_REALLY_EXTERN (decl) = 1;
20188 FOR_EACH_CLONE (clone, decl)
20189 DECL_NOT_REALLY_EXTERN (clone) = 1;
20190 }
20191
20192 /* Called if RESULT is explicitly instantiated, or is a member of an
20193 explicitly instantiated class. */
20194
20195 void
20196 mark_decl_instantiated (tree result, int extern_p)
20197 {
20198 SET_DECL_EXPLICIT_INSTANTIATION (result);
20199
20200 /* If this entity has already been written out, it's too late to
20201 make any modifications. */
20202 if (TREE_ASM_WRITTEN (result))
20203 return;
20204
20205 /* For anonymous namespace we don't need to do anything. */
20206 if (decl_anon_ns_mem_p (result))
20207 {
20208 gcc_assert (!TREE_PUBLIC (result));
20209 return;
20210 }
20211
20212 if (TREE_CODE (result) != FUNCTION_DECL)
20213 /* The TREE_PUBLIC flag for function declarations will have been
20214 set correctly by tsubst. */
20215 TREE_PUBLIC (result) = 1;
20216
20217 /* This might have been set by an earlier implicit instantiation. */
20218 DECL_COMDAT (result) = 0;
20219
20220 if (extern_p)
20221 DECL_NOT_REALLY_EXTERN (result) = 0;
20222 else
20223 {
20224 mark_definable (result);
20225 mark_needed (result);
20226 /* Always make artificials weak. */
20227 if (DECL_ARTIFICIAL (result) && flag_weak)
20228 comdat_linkage (result);
20229 /* For WIN32 we also want to put explicit instantiations in
20230 linkonce sections. */
20231 else if (TREE_PUBLIC (result))
20232 maybe_make_one_only (result);
20233 }
20234
20235 /* If EXTERN_P, then this function will not be emitted -- unless
20236 followed by an explicit instantiation, at which point its linkage
20237 will be adjusted. If !EXTERN_P, then this function will be
20238 emitted here. In neither circumstance do we want
20239 import_export_decl to adjust the linkage. */
20240 DECL_INTERFACE_KNOWN (result) = 1;
20241 }
20242
20243 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
20244 important template arguments. If any are missing, we check whether
20245 they're important by using error_mark_node for substituting into any
20246 args that were used for partial ordering (the ones between ARGS and END)
20247 and seeing if it bubbles up. */
20248
20249 static bool
20250 check_undeduced_parms (tree targs, tree args, tree end)
20251 {
20252 bool found = false;
20253 int i;
20254 for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
20255 if (TREE_VEC_ELT (targs, i) == NULL_TREE)
20256 {
20257 found = true;
20258 TREE_VEC_ELT (targs, i) = error_mark_node;
20259 }
20260 if (found)
20261 {
20262 tree substed = tsubst_arg_types (args, targs, end, tf_none, NULL_TREE);
20263 if (substed == error_mark_node)
20264 return true;
20265 }
20266 return false;
20267 }
20268
20269 /* Given two function templates PAT1 and PAT2, return:
20270
20271 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
20272 -1 if PAT2 is more specialized than PAT1.
20273 0 if neither is more specialized.
20274
20275 LEN indicates the number of parameters we should consider
20276 (defaulted parameters should not be considered).
20277
20278 The 1998 std underspecified function template partial ordering, and
20279 DR214 addresses the issue. We take pairs of arguments, one from
20280 each of the templates, and deduce them against each other. One of
20281 the templates will be more specialized if all the *other*
20282 template's arguments deduce against its arguments and at least one
20283 of its arguments *does* *not* deduce against the other template's
20284 corresponding argument. Deduction is done as for class templates.
20285 The arguments used in deduction have reference and top level cv
20286 qualifiers removed. Iff both arguments were originally reference
20287 types *and* deduction succeeds in both directions, an lvalue reference
20288 wins against an rvalue reference and otherwise the template
20289 with the more cv-qualified argument wins for that pairing (if
20290 neither is more cv-qualified, they both are equal). Unlike regular
20291 deduction, after all the arguments have been deduced in this way,
20292 we do *not* verify the deduced template argument values can be
20293 substituted into non-deduced contexts.
20294
20295 The logic can be a bit confusing here, because we look at deduce1 and
20296 targs1 to see if pat2 is at least as specialized, and vice versa; if we
20297 can find template arguments for pat1 to make arg1 look like arg2, that
20298 means that arg2 is at least as specialized as arg1. */
20299
20300 int
20301 more_specialized_fn (tree pat1, tree pat2, int len)
20302 {
20303 tree decl1 = DECL_TEMPLATE_RESULT (pat1);
20304 tree decl2 = DECL_TEMPLATE_RESULT (pat2);
20305 tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
20306 tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
20307 tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
20308 tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
20309 tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
20310 tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
20311 tree origs1, origs2;
20312 bool lose1 = false;
20313 bool lose2 = false;
20314
20315 /* Remove the this parameter from non-static member functions. If
20316 one is a non-static member function and the other is not a static
20317 member function, remove the first parameter from that function
20318 also. This situation occurs for operator functions where we
20319 locate both a member function (with this pointer) and non-member
20320 operator (with explicit first operand). */
20321 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
20322 {
20323 len--; /* LEN is the number of significant arguments for DECL1 */
20324 args1 = TREE_CHAIN (args1);
20325 if (!DECL_STATIC_FUNCTION_P (decl2))
20326 args2 = TREE_CHAIN (args2);
20327 }
20328 else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
20329 {
20330 args2 = TREE_CHAIN (args2);
20331 if (!DECL_STATIC_FUNCTION_P (decl1))
20332 {
20333 len--;
20334 args1 = TREE_CHAIN (args1);
20335 }
20336 }
20337
20338 /* If only one is a conversion operator, they are unordered. */
20339 if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
20340 return 0;
20341
20342 /* Consider the return type for a conversion function */
20343 if (DECL_CONV_FN_P (decl1))
20344 {
20345 args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
20346 args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
20347 len++;
20348 }
20349
20350 processing_template_decl++;
20351
20352 origs1 = args1;
20353 origs2 = args2;
20354
20355 while (len--
20356 /* Stop when an ellipsis is seen. */
20357 && args1 != NULL_TREE && args2 != NULL_TREE)
20358 {
20359 tree arg1 = TREE_VALUE (args1);
20360 tree arg2 = TREE_VALUE (args2);
20361 int deduce1, deduce2;
20362 int quals1 = -1;
20363 int quals2 = -1;
20364 int ref1 = 0;
20365 int ref2 = 0;
20366
20367 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
20368 && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
20369 {
20370 /* When both arguments are pack expansions, we need only
20371 unify the patterns themselves. */
20372 arg1 = PACK_EXPANSION_PATTERN (arg1);
20373 arg2 = PACK_EXPANSION_PATTERN (arg2);
20374
20375 /* This is the last comparison we need to do. */
20376 len = 0;
20377 }
20378
20379 if (TREE_CODE (arg1) == REFERENCE_TYPE)
20380 {
20381 ref1 = TYPE_REF_IS_RVALUE (arg1) + 1;
20382 arg1 = TREE_TYPE (arg1);
20383 quals1 = cp_type_quals (arg1);
20384 }
20385
20386 if (TREE_CODE (arg2) == REFERENCE_TYPE)
20387 {
20388 ref2 = TYPE_REF_IS_RVALUE (arg2) + 1;
20389 arg2 = TREE_TYPE (arg2);
20390 quals2 = cp_type_quals (arg2);
20391 }
20392
20393 arg1 = TYPE_MAIN_VARIANT (arg1);
20394 arg2 = TYPE_MAIN_VARIANT (arg2);
20395
20396 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
20397 {
20398 int i, len2 = remaining_arguments (args2);
20399 tree parmvec = make_tree_vec (1);
20400 tree argvec = make_tree_vec (len2);
20401 tree ta = args2;
20402
20403 /* Setup the parameter vector, which contains only ARG1. */
20404 TREE_VEC_ELT (parmvec, 0) = arg1;
20405
20406 /* Setup the argument vector, which contains the remaining
20407 arguments. */
20408 for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
20409 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
20410
20411 deduce1 = (unify_pack_expansion (tparms1, targs1, parmvec,
20412 argvec, DEDUCE_EXACT,
20413 /*subr=*/true, /*explain_p=*/false)
20414 == 0);
20415
20416 /* We cannot deduce in the other direction, because ARG1 is
20417 a pack expansion but ARG2 is not. */
20418 deduce2 = 0;
20419 }
20420 else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
20421 {
20422 int i, len1 = remaining_arguments (args1);
20423 tree parmvec = make_tree_vec (1);
20424 tree argvec = make_tree_vec (len1);
20425 tree ta = args1;
20426
20427 /* Setup the parameter vector, which contains only ARG1. */
20428 TREE_VEC_ELT (parmvec, 0) = arg2;
20429
20430 /* Setup the argument vector, which contains the remaining
20431 arguments. */
20432 for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
20433 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
20434
20435 deduce2 = (unify_pack_expansion (tparms2, targs2, parmvec,
20436 argvec, DEDUCE_EXACT,
20437 /*subr=*/true, /*explain_p=*/false)
20438 == 0);
20439
20440 /* We cannot deduce in the other direction, because ARG2 is
20441 a pack expansion but ARG1 is not.*/
20442 deduce1 = 0;
20443 }
20444
20445 else
20446 {
20447 /* The normal case, where neither argument is a pack
20448 expansion. */
20449 deduce1 = (unify (tparms1, targs1, arg1, arg2,
20450 UNIFY_ALLOW_NONE, /*explain_p=*/false)
20451 == 0);
20452 deduce2 = (unify (tparms2, targs2, arg2, arg1,
20453 UNIFY_ALLOW_NONE, /*explain_p=*/false)
20454 == 0);
20455 }
20456
20457 /* If we couldn't deduce arguments for tparms1 to make arg1 match
20458 arg2, then arg2 is not as specialized as arg1. */
20459 if (!deduce1)
20460 lose2 = true;
20461 if (!deduce2)
20462 lose1 = true;
20463
20464 /* "If, for a given type, deduction succeeds in both directions
20465 (i.e., the types are identical after the transformations above)
20466 and both P and A were reference types (before being replaced with
20467 the type referred to above):
20468 - if the type from the argument template was an lvalue reference and
20469 the type from the parameter template was not, the argument type is
20470 considered to be more specialized than the other; otherwise,
20471 - if the type from the argument template is more cv-qualified
20472 than the type from the parameter template (as described above),
20473 the argument type is considered to be more specialized than the other;
20474 otherwise,
20475 - neither type is more specialized than the other." */
20476
20477 if (deduce1 && deduce2)
20478 {
20479 if (ref1 && ref2 && ref1 != ref2)
20480 {
20481 if (ref1 > ref2)
20482 lose1 = true;
20483 else
20484 lose2 = true;
20485 }
20486 else if (quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
20487 {
20488 if ((quals1 & quals2) == quals2)
20489 lose2 = true;
20490 if ((quals1 & quals2) == quals1)
20491 lose1 = true;
20492 }
20493 }
20494
20495 if (lose1 && lose2)
20496 /* We've failed to deduce something in either direction.
20497 These must be unordered. */
20498 break;
20499
20500 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
20501 || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
20502 /* We have already processed all of the arguments in our
20503 handing of the pack expansion type. */
20504 len = 0;
20505
20506 args1 = TREE_CHAIN (args1);
20507 args2 = TREE_CHAIN (args2);
20508 }
20509
20510 /* "In most cases, all template parameters must have values in order for
20511 deduction to succeed, but for partial ordering purposes a template
20512 parameter may remain without a value provided it is not used in the
20513 types being used for partial ordering."
20514
20515 Thus, if we are missing any of the targs1 we need to substitute into
20516 origs1, then pat2 is not as specialized as pat1. This can happen when
20517 there is a nondeduced context. */
20518 if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
20519 lose2 = true;
20520 if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
20521 lose1 = true;
20522
20523 processing_template_decl--;
20524
20525 /* If both deductions succeed, the partial ordering selects the more
20526 constrained template. */
20527 if (!lose1 && !lose2)
20528 {
20529 tree c1 = get_constraints (DECL_TEMPLATE_RESULT (pat1));
20530 tree c2 = get_constraints (DECL_TEMPLATE_RESULT (pat2));
20531 lose1 = !subsumes_constraints (c1, c2);
20532 lose2 = !subsumes_constraints (c2, c1);
20533 }
20534
20535 /* All things being equal, if the next argument is a pack expansion
20536 for one function but not for the other, prefer the
20537 non-variadic function. FIXME this is bogus; see c++/41958. */
20538 if (lose1 == lose2
20539 && args1 && TREE_VALUE (args1)
20540 && args2 && TREE_VALUE (args2))
20541 {
20542 lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
20543 lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
20544 }
20545
20546 if (lose1 == lose2)
20547 return 0;
20548 else if (!lose1)
20549 return 1;
20550 else
20551 return -1;
20552 }
20553
20554 /* Determine which of two partial specializations of TMPL is more
20555 specialized.
20556
20557 PAT1 is a TREE_LIST whose TREE_VALUE is the TEMPLATE_DECL corresponding
20558 to the first partial specialization. The TREE_PURPOSE is the
20559 innermost set of template parameters for the partial
20560 specialization. PAT2 is similar, but for the second template.
20561
20562 Return 1 if the first partial specialization is more specialized;
20563 -1 if the second is more specialized; 0 if neither is more
20564 specialized.
20565
20566 See [temp.class.order] for information about determining which of
20567 two templates is more specialized. */
20568
20569 static int
20570 more_specialized_partial_spec (tree tmpl, tree pat1, tree pat2)
20571 {
20572 tree targs;
20573 int winner = 0;
20574 bool any_deductions = false;
20575
20576 tree tmpl1 = TREE_VALUE (pat1);
20577 tree tmpl2 = TREE_VALUE (pat2);
20578 tree parms1 = DECL_INNERMOST_TEMPLATE_PARMS (tmpl1);
20579 tree parms2 = DECL_INNERMOST_TEMPLATE_PARMS (tmpl2);
20580 tree specargs1 = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl1)));
20581 tree specargs2 = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl2)));
20582
20583 /* Just like what happens for functions, if we are ordering between
20584 different template specializations, we may encounter dependent
20585 types in the arguments, and we need our dependency check functions
20586 to behave correctly. */
20587 ++processing_template_decl;
20588 targs = get_partial_spec_bindings (tmpl, parms1, specargs1, specargs2);
20589 if (targs)
20590 {
20591 --winner;
20592 any_deductions = true;
20593 }
20594
20595 targs = get_partial_spec_bindings (tmpl, parms2, specargs2, specargs1);
20596 if (targs)
20597 {
20598 ++winner;
20599 any_deductions = true;
20600 }
20601 --processing_template_decl;
20602
20603 /* If both deductions succeed, the partial ordering selects the more
20604 constrained template. */
20605 if (!winner && any_deductions)
20606 return more_constrained (tmpl1, tmpl2);
20607
20608 /* In the case of a tie where at least one of the templates
20609 has a parameter pack at the end, the template with the most
20610 non-packed parameters wins. */
20611 if (winner == 0
20612 && any_deductions
20613 && (template_args_variadic_p (TREE_PURPOSE (pat1))
20614 || template_args_variadic_p (TREE_PURPOSE (pat2))))
20615 {
20616 tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
20617 tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
20618 int len1 = TREE_VEC_LENGTH (args1);
20619 int len2 = TREE_VEC_LENGTH (args2);
20620
20621 /* We don't count the pack expansion at the end. */
20622 if (template_args_variadic_p (TREE_PURPOSE (pat1)))
20623 --len1;
20624 if (template_args_variadic_p (TREE_PURPOSE (pat2)))
20625 --len2;
20626
20627 if (len1 > len2)
20628 return 1;
20629 else if (len1 < len2)
20630 return -1;
20631 }
20632
20633 return winner;
20634 }
20635
20636 /* Return the template arguments that will produce the function signature
20637 DECL from the function template FN, with the explicit template
20638 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is true, the return type must
20639 also match. Return NULL_TREE if no satisfactory arguments could be
20640 found. */
20641
20642 static tree
20643 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
20644 {
20645 int ntparms = DECL_NTPARMS (fn);
20646 tree targs = make_tree_vec (ntparms);
20647 tree decl_type = TREE_TYPE (decl);
20648 tree decl_arg_types;
20649 tree *args;
20650 unsigned int nargs, ix;
20651 tree arg;
20652
20653 gcc_assert (decl != DECL_TEMPLATE_RESULT (fn));
20654
20655 /* Never do unification on the 'this' parameter. */
20656 decl_arg_types = skip_artificial_parms_for (decl,
20657 TYPE_ARG_TYPES (decl_type));
20658
20659 nargs = list_length (decl_arg_types);
20660 args = XALLOCAVEC (tree, nargs);
20661 for (arg = decl_arg_types, ix = 0;
20662 arg != NULL_TREE && arg != void_list_node;
20663 arg = TREE_CHAIN (arg), ++ix)
20664 args[ix] = TREE_VALUE (arg);
20665
20666 if (fn_type_unification (fn, explicit_args, targs,
20667 args, ix,
20668 (check_rettype || DECL_CONV_FN_P (fn)
20669 ? TREE_TYPE (decl_type) : NULL_TREE),
20670 DEDUCE_EXACT, LOOKUP_NORMAL, /*explain_p=*/false,
20671 /*decltype*/false)
20672 == error_mark_node)
20673 return NULL_TREE;
20674
20675 return targs;
20676 }
20677
20678 /* Return the innermost template arguments that, when applied to a partial
20679 specialization of TMPL whose innermost template parameters are
20680 TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
20681 ARGS.
20682
20683 For example, suppose we have:
20684
20685 template <class T, class U> struct S {};
20686 template <class T> struct S<T*, int> {};
20687
20688 Then, suppose we want to get `S<double*, int>'. The TPARMS will be
20689 {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
20690 int}. The resulting vector will be {double}, indicating that `T'
20691 is bound to `double'. */
20692
20693 static tree
20694 get_partial_spec_bindings (tree tmpl, tree tparms, tree spec_args, tree args)
20695 {
20696 int i, ntparms = TREE_VEC_LENGTH (tparms);
20697 tree deduced_args;
20698 tree innermost_deduced_args;
20699
20700 innermost_deduced_args = make_tree_vec (ntparms);
20701 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
20702 {
20703 deduced_args = copy_node (args);
20704 SET_TMPL_ARGS_LEVEL (deduced_args,
20705 TMPL_ARGS_DEPTH (deduced_args),
20706 innermost_deduced_args);
20707 }
20708 else
20709 deduced_args = innermost_deduced_args;
20710
20711 if (unify (tparms, deduced_args,
20712 INNERMOST_TEMPLATE_ARGS (spec_args),
20713 INNERMOST_TEMPLATE_ARGS (args),
20714 UNIFY_ALLOW_NONE, /*explain_p=*/false))
20715 return NULL_TREE;
20716
20717 for (i = 0; i < ntparms; ++i)
20718 if (! TREE_VEC_ELT (innermost_deduced_args, i))
20719 return NULL_TREE;
20720
20721 /* Verify that nondeduced template arguments agree with the type
20722 obtained from argument deduction.
20723
20724 For example:
20725
20726 struct A { typedef int X; };
20727 template <class T, class U> struct C {};
20728 template <class T> struct C<T, typename T::X> {};
20729
20730 Then with the instantiation `C<A, int>', we can deduce that
20731 `T' is `A' but unify () does not check whether `typename T::X'
20732 is `int'. */
20733 spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
20734 spec_args = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
20735 spec_args, tmpl,
20736 tf_none, false, false);
20737 if (spec_args == error_mark_node
20738 /* We only need to check the innermost arguments; the other
20739 arguments will always agree. */
20740 || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
20741 INNERMOST_TEMPLATE_ARGS (args)))
20742 return NULL_TREE;
20743
20744 /* Now that we have bindings for all of the template arguments,
20745 ensure that the arguments deduced for the template template
20746 parameters have compatible template parameter lists. See the use
20747 of template_template_parm_bindings_ok_p in fn_type_unification
20748 for more information. */
20749 if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
20750 return NULL_TREE;
20751
20752 return deduced_args;
20753 }
20754
20755 // Compare two function templates T1 and T2 by deducing bindings
20756 // from one against the other. If both deductions succeed, compare
20757 // constraints to see which is more constrained.
20758 static int
20759 more_specialized_inst (tree t1, tree t2)
20760 {
20761 int fate = 0;
20762 int count = 0;
20763
20764 if (get_bindings (t1, DECL_TEMPLATE_RESULT (t2), NULL_TREE, true))
20765 {
20766 --fate;
20767 ++count;
20768 }
20769
20770 if (get_bindings (t2, DECL_TEMPLATE_RESULT (t1), NULL_TREE, true))
20771 {
20772 ++fate;
20773 ++count;
20774 }
20775
20776 // If both deductions succeed, then one may be more constrained.
20777 if (count == 2 && fate == 0)
20778 fate = more_constrained (t1, t2);
20779
20780 return fate;
20781 }
20782
20783 /* TEMPLATES is a TREE_LIST. Each TREE_VALUE is a TEMPLATE_DECL.
20784 Return the TREE_LIST node with the most specialized template, if
20785 any. If there is no most specialized template, the error_mark_node
20786 is returned.
20787
20788 Note that this function does not look at, or modify, the
20789 TREE_PURPOSE or TREE_TYPE of any of the nodes. Since the node
20790 returned is one of the elements of INSTANTIATIONS, callers may
20791 store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
20792 and retrieve it from the value returned. */
20793
20794 tree
20795 most_specialized_instantiation (tree templates)
20796 {
20797 tree fn, champ;
20798
20799 ++processing_template_decl;
20800
20801 champ = templates;
20802 for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
20803 {
20804 int fate = more_specialized_inst (TREE_VALUE (champ), TREE_VALUE (fn));
20805 if (fate == -1)
20806 champ = fn;
20807 else if (!fate)
20808 {
20809 /* Equally specialized, move to next function. If there
20810 is no next function, nothing's most specialized. */
20811 fn = TREE_CHAIN (fn);
20812 champ = fn;
20813 if (!fn)
20814 break;
20815 }
20816 }
20817
20818 if (champ)
20819 /* Now verify that champ is better than everything earlier in the
20820 instantiation list. */
20821 for (fn = templates; fn != champ; fn = TREE_CHAIN (fn)) {
20822 if (more_specialized_inst (TREE_VALUE (champ), TREE_VALUE (fn)) != 1)
20823 {
20824 champ = NULL_TREE;
20825 break;
20826 }
20827 }
20828
20829 processing_template_decl--;
20830
20831 if (!champ)
20832 return error_mark_node;
20833
20834 return champ;
20835 }
20836
20837 /* If DECL is a specialization of some template, return the most
20838 general such template. Otherwise, returns NULL_TREE.
20839
20840 For example, given:
20841
20842 template <class T> struct S { template <class U> void f(U); };
20843
20844 if TMPL is `template <class U> void S<int>::f(U)' this will return
20845 the full template. This function will not trace past partial
20846 specializations, however. For example, given in addition:
20847
20848 template <class T> struct S<T*> { template <class U> void f(U); };
20849
20850 if TMPL is `template <class U> void S<int*>::f(U)' this will return
20851 `template <class T> template <class U> S<T*>::f(U)'. */
20852
20853 tree
20854 most_general_template (tree decl)
20855 {
20856 if (TREE_CODE (decl) != TEMPLATE_DECL)
20857 {
20858 if (tree tinfo = get_template_info (decl))
20859 decl = TI_TEMPLATE (tinfo);
20860 /* The TI_TEMPLATE can be an IDENTIFIER_NODE for a
20861 template friend, or a FIELD_DECL for a capture pack. */
20862 if (TREE_CODE (decl) != TEMPLATE_DECL)
20863 return NULL_TREE;
20864 }
20865
20866 /* Look for more and more general templates. */
20867 while (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
20868 {
20869 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
20870 (See cp-tree.h for details.) */
20871 if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
20872 break;
20873
20874 if (CLASS_TYPE_P (TREE_TYPE (decl))
20875 && !TYPE_DECL_ALIAS_P (TYPE_NAME (TREE_TYPE (decl)))
20876 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
20877 break;
20878
20879 /* Stop if we run into an explicitly specialized class template. */
20880 if (!DECL_NAMESPACE_SCOPE_P (decl)
20881 && DECL_CONTEXT (decl)
20882 && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
20883 break;
20884
20885 decl = DECL_TI_TEMPLATE (decl);
20886 }
20887
20888 return decl;
20889 }
20890
20891 /* True iff the TEMPLATE_DECL tmpl is a partial specialization. */
20892
20893 static bool
20894 partial_specialization_p (tree tmpl)
20895 {
20896 /* Any specialization has DECL_TEMPLATE_SPECIALIZATION. */
20897 if (!DECL_TEMPLATE_SPECIALIZATION (tmpl))
20898 return false;
20899 tree t = DECL_TI_TEMPLATE (tmpl);
20900 /* A specialization that fully specializes one of the containing classes is
20901 not a partial specialization. */
20902 return (list_length (DECL_TEMPLATE_PARMS (tmpl))
20903 == list_length (DECL_TEMPLATE_PARMS (t)));
20904 }
20905
20906 /* If TMPL is a partial specialization, return the arguments for its primary
20907 template. */
20908
20909 static tree
20910 impartial_args (tree tmpl, tree args)
20911 {
20912 if (!partial_specialization_p (tmpl))
20913 return args;
20914
20915 /* If TMPL is a partial specialization, we need to substitute to get
20916 the args for the primary template. */
20917 return tsubst_template_args (DECL_TI_ARGS (tmpl), args,
20918 tf_warning_or_error, tmpl);
20919 }
20920
20921 /* Return the most specialized of the template partial specializations
20922 which can produce TARGET, a specialization of some class or variable
20923 template. The value returned is actually a TREE_LIST; the TREE_VALUE is
20924 a TEMPLATE_DECL node corresponding to the partial specialization, while
20925 the TREE_PURPOSE is the set of template arguments that must be
20926 substituted into the template pattern in order to generate TARGET.
20927
20928 If the choice of partial specialization is ambiguous, a diagnostic
20929 is issued, and the error_mark_node is returned. If there are no
20930 partial specializations matching TARGET, then NULL_TREE is
20931 returned, indicating that the primary template should be used. */
20932
20933 static tree
20934 most_specialized_partial_spec (tree target, tsubst_flags_t complain)
20935 {
20936 tree list = NULL_TREE;
20937 tree t;
20938 tree champ;
20939 int fate;
20940 bool ambiguous_p;
20941 tree outer_args = NULL_TREE;
20942 tree tmpl, args;
20943
20944 if (TYPE_P (target))
20945 {
20946 tree tinfo = CLASSTYPE_TEMPLATE_INFO (target);
20947 tmpl = TI_TEMPLATE (tinfo);
20948 args = TI_ARGS (tinfo);
20949 }
20950 else if (TREE_CODE (target) == TEMPLATE_ID_EXPR)
20951 {
20952 tmpl = TREE_OPERAND (target, 0);
20953 args = TREE_OPERAND (target, 1);
20954 }
20955 else if (VAR_P (target))
20956 {
20957 tree tinfo = DECL_TEMPLATE_INFO (target);
20958 tmpl = TI_TEMPLATE (tinfo);
20959 args = TI_ARGS (tinfo);
20960 }
20961 else
20962 gcc_unreachable ();
20963
20964 tree main_tmpl = most_general_template (tmpl);
20965
20966 /* For determining which partial specialization to use, only the
20967 innermost args are interesting. */
20968 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
20969 {
20970 outer_args = strip_innermost_template_args (args, 1);
20971 args = INNERMOST_TEMPLATE_ARGS (args);
20972 }
20973
20974 for (t = DECL_TEMPLATE_SPECIALIZATIONS (main_tmpl); t; t = TREE_CHAIN (t))
20975 {
20976 tree partial_spec_args;
20977 tree spec_args;
20978 tree spec_tmpl = TREE_VALUE (t);
20979
20980 partial_spec_args = TREE_PURPOSE (t);
20981
20982 ++processing_template_decl;
20983
20984 if (outer_args)
20985 {
20986 /* Discard the outer levels of args, and then substitute in the
20987 template args from the enclosing class. */
20988 partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
20989 partial_spec_args = tsubst_template_args
20990 (partial_spec_args, outer_args, tf_none, NULL_TREE);
20991
20992 /* And the same for the partial specialization TEMPLATE_DECL. */
20993 spec_tmpl = tsubst (spec_tmpl, outer_args, tf_none, NULL_TREE);
20994 }
20995
20996 partial_spec_args =
20997 coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
20998 partial_spec_args,
20999 tmpl, tf_none,
21000 /*require_all_args=*/true,
21001 /*use_default_args=*/true);
21002
21003 --processing_template_decl;
21004
21005 if (partial_spec_args == error_mark_node)
21006 return error_mark_node;
21007 if (spec_tmpl == error_mark_node)
21008 return error_mark_node;
21009
21010 tree parms = DECL_INNERMOST_TEMPLATE_PARMS (spec_tmpl);
21011 spec_args = get_partial_spec_bindings (tmpl, parms,
21012 partial_spec_args,
21013 args);
21014 if (spec_args)
21015 {
21016 if (outer_args)
21017 spec_args = add_to_template_args (outer_args, spec_args);
21018
21019 /* Keep the candidate only if the constraints are satisfied,
21020 or if we're not compiling with concepts. */
21021 if (!flag_concepts
21022 || constraints_satisfied_p (spec_tmpl, spec_args))
21023 {
21024 list = tree_cons (spec_args, TREE_VALUE (t), list);
21025 TREE_TYPE (list) = TREE_TYPE (t);
21026 }
21027 }
21028 }
21029
21030 if (! list)
21031 return NULL_TREE;
21032
21033 ambiguous_p = false;
21034 t = list;
21035 champ = t;
21036 t = TREE_CHAIN (t);
21037 for (; t; t = TREE_CHAIN (t))
21038 {
21039 fate = more_specialized_partial_spec (tmpl, champ, t);
21040 if (fate == 1)
21041 ;
21042 else
21043 {
21044 if (fate == 0)
21045 {
21046 t = TREE_CHAIN (t);
21047 if (! t)
21048 {
21049 ambiguous_p = true;
21050 break;
21051 }
21052 }
21053 champ = t;
21054 }
21055 }
21056
21057 if (!ambiguous_p)
21058 for (t = list; t && t != champ; t = TREE_CHAIN (t))
21059 {
21060 fate = more_specialized_partial_spec (tmpl, champ, t);
21061 if (fate != 1)
21062 {
21063 ambiguous_p = true;
21064 break;
21065 }
21066 }
21067
21068 if (ambiguous_p)
21069 {
21070 const char *str;
21071 char *spaces = NULL;
21072 if (!(complain & tf_error))
21073 return error_mark_node;
21074 if (TYPE_P (target))
21075 error ("ambiguous template instantiation for %q#T", target);
21076 else
21077 error ("ambiguous template instantiation for %q#D", target);
21078 str = ngettext ("candidate is:", "candidates are:", list_length (list));
21079 for (t = list; t; t = TREE_CHAIN (t))
21080 {
21081 tree subst = build_tree_list (TREE_VALUE (t), TREE_PURPOSE (t));
21082 inform (DECL_SOURCE_LOCATION (TREE_VALUE (t)),
21083 "%s %#S", spaces ? spaces : str, subst);
21084 spaces = spaces ? spaces : get_spaces (str);
21085 }
21086 free (spaces);
21087 return error_mark_node;
21088 }
21089
21090 return champ;
21091 }
21092
21093 /* Explicitly instantiate DECL. */
21094
21095 void
21096 do_decl_instantiation (tree decl, tree storage)
21097 {
21098 tree result = NULL_TREE;
21099 int extern_p = 0;
21100
21101 if (!decl || decl == error_mark_node)
21102 /* An error occurred, for which grokdeclarator has already issued
21103 an appropriate message. */
21104 return;
21105 else if (! DECL_LANG_SPECIFIC (decl))
21106 {
21107 error ("explicit instantiation of non-template %q#D", decl);
21108 return;
21109 }
21110
21111 bool var_templ = (DECL_TEMPLATE_INFO (decl)
21112 && variable_template_p (DECL_TI_TEMPLATE (decl)));
21113
21114 if (VAR_P (decl) && !var_templ)
21115 {
21116 /* There is an asymmetry here in the way VAR_DECLs and
21117 FUNCTION_DECLs are handled by grokdeclarator. In the case of
21118 the latter, the DECL we get back will be marked as a
21119 template instantiation, and the appropriate
21120 DECL_TEMPLATE_INFO will be set up. This does not happen for
21121 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
21122 should handle VAR_DECLs as it currently handles
21123 FUNCTION_DECLs. */
21124 if (!DECL_CLASS_SCOPE_P (decl))
21125 {
21126 error ("%qD is not a static data member of a class template", decl);
21127 return;
21128 }
21129 result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
21130 if (!result || !VAR_P (result))
21131 {
21132 error ("no matching template for %qD found", decl);
21133 return;
21134 }
21135 if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
21136 {
21137 error ("type %qT for explicit instantiation %qD does not match "
21138 "declared type %qT", TREE_TYPE (result), decl,
21139 TREE_TYPE (decl));
21140 return;
21141 }
21142 }
21143 else if (TREE_CODE (decl) != FUNCTION_DECL && !var_templ)
21144 {
21145 error ("explicit instantiation of %q#D", decl);
21146 return;
21147 }
21148 else
21149 result = decl;
21150
21151 /* Check for various error cases. Note that if the explicit
21152 instantiation is valid the RESULT will currently be marked as an
21153 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
21154 until we get here. */
21155
21156 if (DECL_TEMPLATE_SPECIALIZATION (result))
21157 {
21158 /* DR 259 [temp.spec].
21159
21160 Both an explicit instantiation and a declaration of an explicit
21161 specialization shall not appear in a program unless the explicit
21162 instantiation follows a declaration of the explicit specialization.
21163
21164 For a given set of template parameters, if an explicit
21165 instantiation of a template appears after a declaration of an
21166 explicit specialization for that template, the explicit
21167 instantiation has no effect. */
21168 return;
21169 }
21170 else if (DECL_EXPLICIT_INSTANTIATION (result))
21171 {
21172 /* [temp.spec]
21173
21174 No program shall explicitly instantiate any template more
21175 than once.
21176
21177 We check DECL_NOT_REALLY_EXTERN so as not to complain when
21178 the first instantiation was `extern' and the second is not,
21179 and EXTERN_P for the opposite case. */
21180 if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
21181 permerror (input_location, "duplicate explicit instantiation of %q#D", result);
21182 /* If an "extern" explicit instantiation follows an ordinary
21183 explicit instantiation, the template is instantiated. */
21184 if (extern_p)
21185 return;
21186 }
21187 else if (!DECL_IMPLICIT_INSTANTIATION (result))
21188 {
21189 error ("no matching template for %qD found", result);
21190 return;
21191 }
21192 else if (!DECL_TEMPLATE_INFO (result))
21193 {
21194 permerror (input_location, "explicit instantiation of non-template %q#D", result);
21195 return;
21196 }
21197
21198 if (storage == NULL_TREE)
21199 ;
21200 else if (storage == ridpointers[(int) RID_EXTERN])
21201 {
21202 if (!in_system_header_at (input_location) && (cxx_dialect == cxx98))
21203 pedwarn (input_location, OPT_Wpedantic,
21204 "ISO C++ 1998 forbids the use of %<extern%> on explicit "
21205 "instantiations");
21206 extern_p = 1;
21207 }
21208 else
21209 error ("storage class %qD applied to template instantiation", storage);
21210
21211 check_explicit_instantiation_namespace (result);
21212 mark_decl_instantiated (result, extern_p);
21213 if (! extern_p)
21214 instantiate_decl (result, /*defer_ok=*/1,
21215 /*expl_inst_class_mem_p=*/false);
21216 }
21217
21218 static void
21219 mark_class_instantiated (tree t, int extern_p)
21220 {
21221 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
21222 SET_CLASSTYPE_INTERFACE_KNOWN (t);
21223 CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
21224 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
21225 if (! extern_p)
21226 {
21227 CLASSTYPE_DEBUG_REQUESTED (t) = 1;
21228 rest_of_type_compilation (t, 1);
21229 }
21230 }
21231
21232 /* Called from do_type_instantiation through binding_table_foreach to
21233 do recursive instantiation for the type bound in ENTRY. */
21234 static void
21235 bt_instantiate_type_proc (binding_entry entry, void *data)
21236 {
21237 tree storage = *(tree *) data;
21238
21239 if (MAYBE_CLASS_TYPE_P (entry->type)
21240 && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
21241 do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
21242 }
21243
21244 /* Called from do_type_instantiation to instantiate a member
21245 (a member function or a static member variable) of an
21246 explicitly instantiated class template. */
21247 static void
21248 instantiate_class_member (tree decl, int extern_p)
21249 {
21250 mark_decl_instantiated (decl, extern_p);
21251 if (! extern_p)
21252 instantiate_decl (decl, /*defer_ok=*/1,
21253 /*expl_inst_class_mem_p=*/true);
21254 }
21255
21256 /* Perform an explicit instantiation of template class T. STORAGE, if
21257 non-null, is the RID for extern, inline or static. COMPLAIN is
21258 nonzero if this is called from the parser, zero if called recursively,
21259 since the standard is unclear (as detailed below). */
21260
21261 void
21262 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
21263 {
21264 int extern_p = 0;
21265 int nomem_p = 0;
21266 int static_p = 0;
21267 int previous_instantiation_extern_p = 0;
21268
21269 if (TREE_CODE (t) == TYPE_DECL)
21270 t = TREE_TYPE (t);
21271
21272 if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
21273 {
21274 tree tmpl =
21275 (TYPE_TEMPLATE_INFO (t)) ? TYPE_TI_TEMPLATE (t) : NULL;
21276 if (tmpl)
21277 error ("explicit instantiation of non-class template %qD", tmpl);
21278 else
21279 error ("explicit instantiation of non-template type %qT", t);
21280 return;
21281 }
21282
21283 complete_type (t);
21284
21285 if (!COMPLETE_TYPE_P (t))
21286 {
21287 if (complain & tf_error)
21288 error ("explicit instantiation of %q#T before definition of template",
21289 t);
21290 return;
21291 }
21292
21293 if (storage != NULL_TREE)
21294 {
21295 if (!in_system_header_at (input_location))
21296 {
21297 if (storage == ridpointers[(int) RID_EXTERN])
21298 {
21299 if (cxx_dialect == cxx98)
21300 pedwarn (input_location, OPT_Wpedantic,
21301 "ISO C++ 1998 forbids the use of %<extern%> on "
21302 "explicit instantiations");
21303 }
21304 else
21305 pedwarn (input_location, OPT_Wpedantic,
21306 "ISO C++ forbids the use of %qE"
21307 " on explicit instantiations", storage);
21308 }
21309
21310 if (storage == ridpointers[(int) RID_INLINE])
21311 nomem_p = 1;
21312 else if (storage == ridpointers[(int) RID_EXTERN])
21313 extern_p = 1;
21314 else if (storage == ridpointers[(int) RID_STATIC])
21315 static_p = 1;
21316 else
21317 {
21318 error ("storage class %qD applied to template instantiation",
21319 storage);
21320 extern_p = 0;
21321 }
21322 }
21323
21324 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
21325 {
21326 /* DR 259 [temp.spec].
21327
21328 Both an explicit instantiation and a declaration of an explicit
21329 specialization shall not appear in a program unless the explicit
21330 instantiation follows a declaration of the explicit specialization.
21331
21332 For a given set of template parameters, if an explicit
21333 instantiation of a template appears after a declaration of an
21334 explicit specialization for that template, the explicit
21335 instantiation has no effect. */
21336 return;
21337 }
21338 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
21339 {
21340 /* [temp.spec]
21341
21342 No program shall explicitly instantiate any template more
21343 than once.
21344
21345 If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
21346 instantiation was `extern'. If EXTERN_P then the second is.
21347 These cases are OK. */
21348 previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
21349
21350 if (!previous_instantiation_extern_p && !extern_p
21351 && (complain & tf_error))
21352 permerror (input_location, "duplicate explicit instantiation of %q#T", t);
21353
21354 /* If we've already instantiated the template, just return now. */
21355 if (!CLASSTYPE_INTERFACE_ONLY (t))
21356 return;
21357 }
21358
21359 check_explicit_instantiation_namespace (TYPE_NAME (t));
21360 mark_class_instantiated (t, extern_p);
21361
21362 if (nomem_p)
21363 return;
21364
21365 {
21366 tree tmp;
21367
21368 /* In contrast to implicit instantiation, where only the
21369 declarations, and not the definitions, of members are
21370 instantiated, we have here:
21371
21372 [temp.explicit]
21373
21374 The explicit instantiation of a class template specialization
21375 implies the instantiation of all of its members not
21376 previously explicitly specialized in the translation unit
21377 containing the explicit instantiation.
21378
21379 Of course, we can't instantiate member template classes, since
21380 we don't have any arguments for them. Note that the standard
21381 is unclear on whether the instantiation of the members are
21382 *explicit* instantiations or not. However, the most natural
21383 interpretation is that it should be an explicit instantiation. */
21384
21385 if (! static_p)
21386 for (tmp = TYPE_METHODS (t); tmp; tmp = DECL_CHAIN (tmp))
21387 if (TREE_CODE (tmp) == FUNCTION_DECL
21388 && DECL_TEMPLATE_INSTANTIATION (tmp))
21389 instantiate_class_member (tmp, extern_p);
21390
21391 for (tmp = TYPE_FIELDS (t); tmp; tmp = DECL_CHAIN (tmp))
21392 if (VAR_P (tmp) && DECL_TEMPLATE_INSTANTIATION (tmp))
21393 instantiate_class_member (tmp, extern_p);
21394
21395 if (CLASSTYPE_NESTED_UTDS (t))
21396 binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
21397 bt_instantiate_type_proc, &storage);
21398 }
21399 }
21400
21401 /* Given a function DECL, which is a specialization of TMPL, modify
21402 DECL to be a re-instantiation of TMPL with the same template
21403 arguments. TMPL should be the template into which tsubst'ing
21404 should occur for DECL, not the most general template.
21405
21406 One reason for doing this is a scenario like this:
21407
21408 template <class T>
21409 void f(const T&, int i);
21410
21411 void g() { f(3, 7); }
21412
21413 template <class T>
21414 void f(const T& t, const int i) { }
21415
21416 Note that when the template is first instantiated, with
21417 instantiate_template, the resulting DECL will have no name for the
21418 first parameter, and the wrong type for the second. So, when we go
21419 to instantiate the DECL, we regenerate it. */
21420
21421 static void
21422 regenerate_decl_from_template (tree decl, tree tmpl)
21423 {
21424 /* The arguments used to instantiate DECL, from the most general
21425 template. */
21426 tree args;
21427 tree code_pattern;
21428
21429 args = DECL_TI_ARGS (decl);
21430 code_pattern = DECL_TEMPLATE_RESULT (tmpl);
21431
21432 /* Make sure that we can see identifiers, and compute access
21433 correctly. */
21434 push_access_scope (decl);
21435
21436 if (TREE_CODE (decl) == FUNCTION_DECL)
21437 {
21438 tree decl_parm;
21439 tree pattern_parm;
21440 tree specs;
21441 int args_depth;
21442 int parms_depth;
21443
21444 args_depth = TMPL_ARGS_DEPTH (args);
21445 parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
21446 if (args_depth > parms_depth)
21447 args = get_innermost_template_args (args, parms_depth);
21448
21449 specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
21450 args, tf_error, NULL_TREE,
21451 /*defer_ok*/false);
21452 if (specs && specs != error_mark_node)
21453 TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
21454 specs);
21455
21456 /* Merge parameter declarations. */
21457 decl_parm = skip_artificial_parms_for (decl,
21458 DECL_ARGUMENTS (decl));
21459 pattern_parm
21460 = skip_artificial_parms_for (code_pattern,
21461 DECL_ARGUMENTS (code_pattern));
21462 while (decl_parm && !DECL_PACK_P (pattern_parm))
21463 {
21464 tree parm_type;
21465 tree attributes;
21466
21467 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
21468 DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
21469 parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
21470 NULL_TREE);
21471 parm_type = type_decays_to (parm_type);
21472 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
21473 TREE_TYPE (decl_parm) = parm_type;
21474 attributes = DECL_ATTRIBUTES (pattern_parm);
21475 if (DECL_ATTRIBUTES (decl_parm) != attributes)
21476 {
21477 DECL_ATTRIBUTES (decl_parm) = attributes;
21478 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
21479 }
21480 decl_parm = DECL_CHAIN (decl_parm);
21481 pattern_parm = DECL_CHAIN (pattern_parm);
21482 }
21483 /* Merge any parameters that match with the function parameter
21484 pack. */
21485 if (pattern_parm && DECL_PACK_P (pattern_parm))
21486 {
21487 int i, len;
21488 tree expanded_types;
21489 /* Expand the TYPE_PACK_EXPANSION that provides the types for
21490 the parameters in this function parameter pack. */
21491 expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm),
21492 args, tf_error, NULL_TREE);
21493 len = TREE_VEC_LENGTH (expanded_types);
21494 for (i = 0; i < len; i++)
21495 {
21496 tree parm_type;
21497 tree attributes;
21498
21499 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
21500 /* Rename the parameter to include the index. */
21501 DECL_NAME (decl_parm) =
21502 make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
21503 parm_type = TREE_VEC_ELT (expanded_types, i);
21504 parm_type = type_decays_to (parm_type);
21505 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
21506 TREE_TYPE (decl_parm) = parm_type;
21507 attributes = DECL_ATTRIBUTES (pattern_parm);
21508 if (DECL_ATTRIBUTES (decl_parm) != attributes)
21509 {
21510 DECL_ATTRIBUTES (decl_parm) = attributes;
21511 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
21512 }
21513 decl_parm = DECL_CHAIN (decl_parm);
21514 }
21515 }
21516 /* Merge additional specifiers from the CODE_PATTERN. */
21517 if (DECL_DECLARED_INLINE_P (code_pattern)
21518 && !DECL_DECLARED_INLINE_P (decl))
21519 DECL_DECLARED_INLINE_P (decl) = 1;
21520 }
21521 else if (VAR_P (decl))
21522 {
21523 DECL_INITIAL (decl) =
21524 tsubst_expr (DECL_INITIAL (code_pattern), args,
21525 tf_error, DECL_TI_TEMPLATE (decl),
21526 /*integral_constant_expression_p=*/false);
21527 if (VAR_HAD_UNKNOWN_BOUND (decl))
21528 TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
21529 tf_error, DECL_TI_TEMPLATE (decl));
21530 }
21531 else
21532 gcc_unreachable ();
21533
21534 pop_access_scope (decl);
21535 }
21536
21537 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
21538 substituted to get DECL. */
21539
21540 tree
21541 template_for_substitution (tree decl)
21542 {
21543 tree tmpl = DECL_TI_TEMPLATE (decl);
21544
21545 /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
21546 for the instantiation. This is not always the most general
21547 template. Consider, for example:
21548
21549 template <class T>
21550 struct S { template <class U> void f();
21551 template <> void f<int>(); };
21552
21553 and an instantiation of S<double>::f<int>. We want TD to be the
21554 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
21555 while (/* An instantiation cannot have a definition, so we need a
21556 more general template. */
21557 DECL_TEMPLATE_INSTANTIATION (tmpl)
21558 /* We must also deal with friend templates. Given:
21559
21560 template <class T> struct S {
21561 template <class U> friend void f() {};
21562 };
21563
21564 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
21565 so far as the language is concerned, but that's still
21566 where we get the pattern for the instantiation from. On
21567 other hand, if the definition comes outside the class, say:
21568
21569 template <class T> struct S {
21570 template <class U> friend void f();
21571 };
21572 template <class U> friend void f() {}
21573
21574 we don't need to look any further. That's what the check for
21575 DECL_INITIAL is for. */
21576 || (TREE_CODE (decl) == FUNCTION_DECL
21577 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
21578 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
21579 {
21580 /* The present template, TD, should not be a definition. If it
21581 were a definition, we should be using it! Note that we
21582 cannot restructure the loop to just keep going until we find
21583 a template with a definition, since that might go too far if
21584 a specialization was declared, but not defined. */
21585
21586 /* Fetch the more general template. */
21587 tmpl = DECL_TI_TEMPLATE (tmpl);
21588 }
21589
21590 return tmpl;
21591 }
21592
21593 /* Returns true if we need to instantiate this template instance even if we
21594 know we aren't going to emit it. */
21595
21596 bool
21597 always_instantiate_p (tree decl)
21598 {
21599 /* We always instantiate inline functions so that we can inline them. An
21600 explicit instantiation declaration prohibits implicit instantiation of
21601 non-inline functions. With high levels of optimization, we would
21602 normally inline non-inline functions -- but we're not allowed to do
21603 that for "extern template" functions. Therefore, we check
21604 DECL_DECLARED_INLINE_P, rather than possibly_inlined_p. */
21605 return ((TREE_CODE (decl) == FUNCTION_DECL
21606 && (DECL_DECLARED_INLINE_P (decl)
21607 || type_uses_auto (TREE_TYPE (TREE_TYPE (decl)))))
21608 /* And we need to instantiate static data members so that
21609 their initializers are available in integral constant
21610 expressions. */
21611 || (VAR_P (decl)
21612 && decl_maybe_constant_var_p (decl)));
21613 }
21614
21615 /* If FN has a noexcept-specifier that hasn't been instantiated yet,
21616 instantiate it now, modifying TREE_TYPE (fn). */
21617
21618 void
21619 maybe_instantiate_noexcept (tree fn)
21620 {
21621 tree fntype, spec, noex, clone;
21622
21623 /* Don't instantiate a noexcept-specification from template context. */
21624 if (processing_template_decl)
21625 return;
21626
21627 if (DECL_CLONED_FUNCTION_P (fn))
21628 fn = DECL_CLONED_FUNCTION (fn);
21629 fntype = TREE_TYPE (fn);
21630 spec = TYPE_RAISES_EXCEPTIONS (fntype);
21631
21632 if (!spec || !TREE_PURPOSE (spec))
21633 return;
21634
21635 noex = TREE_PURPOSE (spec);
21636
21637 if (TREE_CODE (noex) == DEFERRED_NOEXCEPT)
21638 {
21639 if (DEFERRED_NOEXCEPT_PATTERN (noex) == NULL_TREE)
21640 spec = get_defaulted_eh_spec (fn);
21641 else if (push_tinst_level (fn))
21642 {
21643 push_access_scope (fn);
21644 push_deferring_access_checks (dk_no_deferred);
21645 input_location = DECL_SOURCE_LOCATION (fn);
21646 noex = tsubst_copy_and_build (DEFERRED_NOEXCEPT_PATTERN (noex),
21647 DEFERRED_NOEXCEPT_ARGS (noex),
21648 tf_warning_or_error, fn,
21649 /*function_p=*/false,
21650 /*integral_constant_expression_p=*/true);
21651 pop_deferring_access_checks ();
21652 pop_access_scope (fn);
21653 pop_tinst_level ();
21654 spec = build_noexcept_spec (noex, tf_warning_or_error);
21655 if (spec == error_mark_node)
21656 spec = noexcept_false_spec;
21657 }
21658 else
21659 spec = noexcept_false_spec;
21660
21661 TREE_TYPE (fn) = build_exception_variant (fntype, spec);
21662 }
21663
21664 FOR_EACH_CLONE (clone, fn)
21665 {
21666 if (TREE_TYPE (clone) == fntype)
21667 TREE_TYPE (clone) = TREE_TYPE (fn);
21668 else
21669 TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone), spec);
21670 }
21671 }
21672
21673 /* Produce the definition of D, a _DECL generated from a template. If
21674 DEFER_OK is nonzero, then we don't have to actually do the
21675 instantiation now; we just have to do it sometime. Normally it is
21676 an error if this is an explicit instantiation but D is undefined.
21677 EXPL_INST_CLASS_MEM_P is true iff D is a member of an
21678 explicitly instantiated class template. */
21679
21680 tree
21681 instantiate_decl (tree d, int defer_ok,
21682 bool expl_inst_class_mem_p)
21683 {
21684 tree tmpl = DECL_TI_TEMPLATE (d);
21685 tree gen_args;
21686 tree args;
21687 tree td;
21688 tree code_pattern;
21689 tree spec;
21690 tree gen_tmpl;
21691 bool pattern_defined;
21692 location_t saved_loc = input_location;
21693 int saved_unevaluated_operand = cp_unevaluated_operand;
21694 int saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
21695 bool external_p;
21696 bool deleted_p;
21697 tree fn_context;
21698 bool nested = false;
21699
21700 /* This function should only be used to instantiate templates for
21701 functions and static member variables. */
21702 gcc_assert (VAR_OR_FUNCTION_DECL_P (d));
21703
21704 /* A concept is never instantiated. */
21705 gcc_assert (!DECL_DECLARED_CONCEPT_P (d));
21706
21707 /* Variables are never deferred; if instantiation is required, they
21708 are instantiated right away. That allows for better code in the
21709 case that an expression refers to the value of the variable --
21710 if the variable has a constant value the referring expression can
21711 take advantage of that fact. */
21712 if (VAR_P (d)
21713 || DECL_DECLARED_CONSTEXPR_P (d))
21714 defer_ok = 0;
21715
21716 /* Don't instantiate cloned functions. Instead, instantiate the
21717 functions they cloned. */
21718 if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
21719 d = DECL_CLONED_FUNCTION (d);
21720
21721 if (DECL_TEMPLATE_INSTANTIATED (d)
21722 || (TREE_CODE (d) == FUNCTION_DECL
21723 && DECL_DEFAULTED_FN (d) && DECL_INITIAL (d))
21724 || DECL_TEMPLATE_SPECIALIZATION (d))
21725 /* D has already been instantiated or explicitly specialized, so
21726 there's nothing for us to do here.
21727
21728 It might seem reasonable to check whether or not D is an explicit
21729 instantiation, and, if so, stop here. But when an explicit
21730 instantiation is deferred until the end of the compilation,
21731 DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
21732 the instantiation. */
21733 return d;
21734
21735 /* Check to see whether we know that this template will be
21736 instantiated in some other file, as with "extern template"
21737 extension. */
21738 external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
21739
21740 /* In general, we do not instantiate such templates. */
21741 if (external_p && !always_instantiate_p (d))
21742 return d;
21743
21744 gen_tmpl = most_general_template (tmpl);
21745 gen_args = impartial_args (tmpl, DECL_TI_ARGS (d));
21746
21747 if (tmpl != gen_tmpl)
21748 /* We should already have the extra args. */
21749 gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
21750 == TMPL_ARGS_DEPTH (gen_args));
21751 /* And what's in the hash table should match D. */
21752 gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
21753 || spec == NULL_TREE);
21754
21755 /* This needs to happen before any tsubsting. */
21756 if (! push_tinst_level (d))
21757 return d;
21758
21759 timevar_push (TV_TEMPLATE_INST);
21760
21761 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
21762 for the instantiation. */
21763 td = template_for_substitution (d);
21764 code_pattern = DECL_TEMPLATE_RESULT (td);
21765
21766 /* We should never be trying to instantiate a member of a class
21767 template or partial specialization. */
21768 gcc_assert (d != code_pattern);
21769
21770 if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
21771 || DECL_TEMPLATE_SPECIALIZATION (td))
21772 /* In the case of a friend template whose definition is provided
21773 outside the class, we may have too many arguments. Drop the
21774 ones we don't need. The same is true for specializations. */
21775 args = get_innermost_template_args
21776 (gen_args, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td)));
21777 else
21778 args = gen_args;
21779
21780 if (TREE_CODE (d) == FUNCTION_DECL)
21781 {
21782 deleted_p = DECL_DELETED_FN (code_pattern);
21783 pattern_defined = ((DECL_SAVED_TREE (code_pattern) != NULL_TREE
21784 && DECL_INITIAL (code_pattern) != error_mark_node)
21785 || DECL_DEFAULTED_OUTSIDE_CLASS_P (code_pattern)
21786 || deleted_p);
21787 }
21788 else
21789 {
21790 deleted_p = false;
21791 pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
21792 }
21793
21794 /* We may be in the middle of deferred access check. Disable it now. */
21795 push_deferring_access_checks (dk_no_deferred);
21796
21797 /* Unless an explicit instantiation directive has already determined
21798 the linkage of D, remember that a definition is available for
21799 this entity. */
21800 if (pattern_defined
21801 && !DECL_INTERFACE_KNOWN (d)
21802 && !DECL_NOT_REALLY_EXTERN (d))
21803 mark_definable (d);
21804
21805 DECL_SOURCE_LOCATION (td) = DECL_SOURCE_LOCATION (code_pattern);
21806 DECL_SOURCE_LOCATION (d) = DECL_SOURCE_LOCATION (code_pattern);
21807 input_location = DECL_SOURCE_LOCATION (d);
21808
21809 /* If D is a member of an explicitly instantiated class template,
21810 and no definition is available, treat it like an implicit
21811 instantiation. */
21812 if (!pattern_defined && expl_inst_class_mem_p
21813 && DECL_EXPLICIT_INSTANTIATION (d))
21814 {
21815 /* Leave linkage flags alone on instantiations with anonymous
21816 visibility. */
21817 if (TREE_PUBLIC (d))
21818 {
21819 DECL_NOT_REALLY_EXTERN (d) = 0;
21820 DECL_INTERFACE_KNOWN (d) = 0;
21821 }
21822 SET_DECL_IMPLICIT_INSTANTIATION (d);
21823 }
21824
21825 /* Defer all other templates, unless we have been explicitly
21826 forbidden from doing so. */
21827 if (/* If there is no definition, we cannot instantiate the
21828 template. */
21829 ! pattern_defined
21830 /* If it's OK to postpone instantiation, do so. */
21831 || defer_ok
21832 /* If this is a static data member that will be defined
21833 elsewhere, we don't want to instantiate the entire data
21834 member, but we do want to instantiate the initializer so that
21835 we can substitute that elsewhere. */
21836 || (external_p && VAR_P (d))
21837 /* Handle here a deleted function too, avoid generating
21838 its body (c++/61080). */
21839 || deleted_p)
21840 {
21841 /* The definition of the static data member is now required so
21842 we must substitute the initializer. */
21843 if (VAR_P (d)
21844 && !DECL_INITIAL (d)
21845 && DECL_INITIAL (code_pattern))
21846 {
21847 tree ns;
21848 tree init;
21849 bool const_init = false;
21850 bool enter_context = DECL_CLASS_SCOPE_P (d);
21851
21852 ns = decl_namespace_context (d);
21853 push_nested_namespace (ns);
21854 if (enter_context)
21855 push_nested_class (DECL_CONTEXT (d));
21856 init = tsubst_expr (DECL_INITIAL (code_pattern),
21857 args,
21858 tf_warning_or_error, NULL_TREE,
21859 /*integral_constant_expression_p=*/false);
21860 /* If instantiating the initializer involved instantiating this
21861 again, don't call cp_finish_decl twice. */
21862 if (!DECL_INITIAL (d))
21863 {
21864 /* Make sure the initializer is still constant, in case of
21865 circular dependency (template/instantiate6.C). */
21866 const_init
21867 = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
21868 cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
21869 /*asmspec_tree=*/NULL_TREE,
21870 LOOKUP_ONLYCONVERTING);
21871 }
21872 if (enter_context)
21873 pop_nested_class ();
21874 pop_nested_namespace (ns);
21875 }
21876
21877 /* We restore the source position here because it's used by
21878 add_pending_template. */
21879 input_location = saved_loc;
21880
21881 if (at_eof && !pattern_defined
21882 && DECL_EXPLICIT_INSTANTIATION (d)
21883 && DECL_NOT_REALLY_EXTERN (d))
21884 /* [temp.explicit]
21885
21886 The definition of a non-exported function template, a
21887 non-exported member function template, or a non-exported
21888 member function or static data member of a class template
21889 shall be present in every translation unit in which it is
21890 explicitly instantiated. */
21891 permerror (input_location, "explicit instantiation of %qD "
21892 "but no definition available", d);
21893
21894 /* If we're in unevaluated context, we just wanted to get the
21895 constant value; this isn't an odr use, so don't queue
21896 a full instantiation. */
21897 if (cp_unevaluated_operand != 0)
21898 goto out;
21899 /* ??? Historically, we have instantiated inline functions, even
21900 when marked as "extern template". */
21901 if (!(external_p && VAR_P (d)))
21902 add_pending_template (d);
21903 goto out;
21904 }
21905 /* Tell the repository that D is available in this translation unit
21906 -- and see if it is supposed to be instantiated here. */
21907 if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
21908 {
21909 /* In a PCH file, despite the fact that the repository hasn't
21910 requested instantiation in the PCH it is still possible that
21911 an instantiation will be required in a file that includes the
21912 PCH. */
21913 if (pch_file)
21914 add_pending_template (d);
21915 /* Instantiate inline functions so that the inliner can do its
21916 job, even though we'll not be emitting a copy of this
21917 function. */
21918 if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
21919 goto out;
21920 }
21921
21922 fn_context = decl_function_context (d);
21923 nested = (current_function_decl != NULL_TREE);
21924 vec<tree> omp_privatization_save;
21925 if (nested)
21926 save_omp_privatization_clauses (omp_privatization_save);
21927
21928 if (!fn_context)
21929 push_to_top_level ();
21930 else
21931 {
21932 if (nested)
21933 push_function_context ();
21934 cp_unevaluated_operand = 0;
21935 c_inhibit_evaluation_warnings = 0;
21936 }
21937
21938 /* Mark D as instantiated so that recursive calls to
21939 instantiate_decl do not try to instantiate it again. */
21940 DECL_TEMPLATE_INSTANTIATED (d) = 1;
21941
21942 /* Regenerate the declaration in case the template has been modified
21943 by a subsequent redeclaration. */
21944 regenerate_decl_from_template (d, td);
21945
21946 /* We already set the file and line above. Reset them now in case
21947 they changed as a result of calling regenerate_decl_from_template. */
21948 input_location = DECL_SOURCE_LOCATION (d);
21949
21950 if (VAR_P (d))
21951 {
21952 tree init;
21953 bool const_init = false;
21954
21955 /* Clear out DECL_RTL; whatever was there before may not be right
21956 since we've reset the type of the declaration. */
21957 SET_DECL_RTL (d, NULL);
21958 DECL_IN_AGGR_P (d) = 0;
21959
21960 /* The initializer is placed in DECL_INITIAL by
21961 regenerate_decl_from_template so we don't need to
21962 push/pop_access_scope again here. Pull it out so that
21963 cp_finish_decl can process it. */
21964 init = DECL_INITIAL (d);
21965 DECL_INITIAL (d) = NULL_TREE;
21966 DECL_INITIALIZED_P (d) = 0;
21967
21968 /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
21969 initializer. That function will defer actual emission until
21970 we have a chance to determine linkage. */
21971 DECL_EXTERNAL (d) = 0;
21972
21973 /* Enter the scope of D so that access-checking works correctly. */
21974 bool enter_context = DECL_CLASS_SCOPE_P (d);
21975 if (enter_context)
21976 push_nested_class (DECL_CONTEXT (d));
21977
21978 const_init = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
21979 cp_finish_decl (d, init, const_init, NULL_TREE, 0);
21980
21981 if (enter_context)
21982 pop_nested_class ();
21983
21984 if (variable_template_p (gen_tmpl))
21985 note_variable_template_instantiation (d);
21986 }
21987 else if (TREE_CODE (d) == FUNCTION_DECL && DECL_DEFAULTED_FN (code_pattern))
21988 synthesize_method (d);
21989 else if (TREE_CODE (d) == FUNCTION_DECL)
21990 {
21991 hash_map<tree, tree> *saved_local_specializations;
21992 tree subst_decl;
21993 tree tmpl_parm;
21994 tree spec_parm;
21995 tree block = NULL_TREE;
21996
21997 /* Save away the current list, in case we are instantiating one
21998 template from within the body of another. */
21999 saved_local_specializations = local_specializations;
22000
22001 /* Set up the list of local specializations. */
22002 local_specializations = new hash_map<tree, tree>;
22003
22004 /* Set up context. */
22005 if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern)
22006 && TREE_CODE (DECL_CONTEXT (code_pattern)) == FUNCTION_DECL)
22007 block = push_stmt_list ();
22008 else
22009 start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
22010
22011 /* Some typedefs referenced from within the template code need to be
22012 access checked at template instantiation time, i.e now. These
22013 types were added to the template at parsing time. Let's get those
22014 and perform the access checks then. */
22015 perform_typedefs_access_check (DECL_TEMPLATE_RESULT (gen_tmpl),
22016 gen_args);
22017
22018 /* Create substitution entries for the parameters. */
22019 subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
22020 tmpl_parm = DECL_ARGUMENTS (subst_decl);
22021 spec_parm = DECL_ARGUMENTS (d);
22022 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
22023 {
22024 register_local_specialization (spec_parm, tmpl_parm);
22025 spec_parm = skip_artificial_parms_for (d, spec_parm);
22026 tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
22027 }
22028 for (; tmpl_parm; tmpl_parm = DECL_CHAIN (tmpl_parm))
22029 {
22030 if (!DECL_PACK_P (tmpl_parm))
22031 {
22032 register_local_specialization (spec_parm, tmpl_parm);
22033 spec_parm = DECL_CHAIN (spec_parm);
22034 }
22035 else
22036 {
22037 /* Register the (value) argument pack as a specialization of
22038 TMPL_PARM, then move on. */
22039 tree argpack = extract_fnparm_pack (tmpl_parm, &spec_parm);
22040 register_local_specialization (argpack, tmpl_parm);
22041 }
22042 }
22043 gcc_assert (!spec_parm);
22044
22045 /* Substitute into the body of the function. */
22046 if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern))
22047 tsubst_omp_udr (DECL_SAVED_TREE (code_pattern), args,
22048 tf_warning_or_error, tmpl);
22049 else
22050 {
22051 tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
22052 tf_warning_or_error, tmpl,
22053 /*integral_constant_expression_p=*/false);
22054
22055 /* Set the current input_location to the end of the function
22056 so that finish_function knows where we are. */
22057 input_location
22058 = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
22059
22060 /* Remember if we saw an infinite loop in the template. */
22061 current_function_infinite_loop
22062 = DECL_STRUCT_FUNCTION (code_pattern)->language->infinite_loop;
22063 }
22064
22065 /* We don't need the local specializations any more. */
22066 delete local_specializations;
22067 local_specializations = saved_local_specializations;
22068
22069 /* Finish the function. */
22070 if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern)
22071 && TREE_CODE (DECL_CONTEXT (code_pattern)) == FUNCTION_DECL)
22072 DECL_SAVED_TREE (d) = pop_stmt_list (block);
22073 else
22074 {
22075 d = finish_function (0);
22076 expand_or_defer_fn (d);
22077 }
22078
22079 if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern))
22080 cp_check_omp_declare_reduction (d);
22081 }
22082
22083 /* We're not deferring instantiation any more. */
22084 TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
22085
22086 if (!fn_context)
22087 pop_from_top_level ();
22088 else if (nested)
22089 pop_function_context ();
22090
22091 out:
22092 input_location = saved_loc;
22093 cp_unevaluated_operand = saved_unevaluated_operand;
22094 c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
22095 pop_deferring_access_checks ();
22096 pop_tinst_level ();
22097 if (nested)
22098 restore_omp_privatization_clauses (omp_privatization_save);
22099
22100 timevar_pop (TV_TEMPLATE_INST);
22101
22102 return d;
22103 }
22104
22105 /* Run through the list of templates that we wish we could
22106 instantiate, and instantiate any we can. RETRIES is the
22107 number of times we retry pending template instantiation. */
22108
22109 void
22110 instantiate_pending_templates (int retries)
22111 {
22112 int reconsider;
22113 location_t saved_loc = input_location;
22114
22115 /* Instantiating templates may trigger vtable generation. This in turn
22116 may require further template instantiations. We place a limit here
22117 to avoid infinite loop. */
22118 if (pending_templates && retries >= max_tinst_depth)
22119 {
22120 tree decl = pending_templates->tinst->decl;
22121
22122 fatal_error (input_location,
22123 "template instantiation depth exceeds maximum of %d"
22124 " instantiating %q+D, possibly from virtual table generation"
22125 " (use -ftemplate-depth= to increase the maximum)",
22126 max_tinst_depth, decl);
22127 if (TREE_CODE (decl) == FUNCTION_DECL)
22128 /* Pretend that we defined it. */
22129 DECL_INITIAL (decl) = error_mark_node;
22130 return;
22131 }
22132
22133 do
22134 {
22135 struct pending_template **t = &pending_templates;
22136 struct pending_template *last = NULL;
22137 reconsider = 0;
22138 while (*t)
22139 {
22140 tree instantiation = reopen_tinst_level ((*t)->tinst);
22141 bool complete = false;
22142
22143 if (TYPE_P (instantiation))
22144 {
22145 tree fn;
22146
22147 if (!COMPLETE_TYPE_P (instantiation))
22148 {
22149 instantiate_class_template (instantiation);
22150 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
22151 for (fn = TYPE_METHODS (instantiation);
22152 fn;
22153 fn = TREE_CHAIN (fn))
22154 if (! DECL_ARTIFICIAL (fn))
22155 instantiate_decl (fn,
22156 /*defer_ok=*/0,
22157 /*expl_inst_class_mem_p=*/false);
22158 if (COMPLETE_TYPE_P (instantiation))
22159 reconsider = 1;
22160 }
22161
22162 complete = COMPLETE_TYPE_P (instantiation);
22163 }
22164 else
22165 {
22166 if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
22167 && !DECL_TEMPLATE_INSTANTIATED (instantiation))
22168 {
22169 instantiation
22170 = instantiate_decl (instantiation,
22171 /*defer_ok=*/0,
22172 /*expl_inst_class_mem_p=*/false);
22173 if (DECL_TEMPLATE_INSTANTIATED (instantiation))
22174 reconsider = 1;
22175 }
22176
22177 complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
22178 || DECL_TEMPLATE_INSTANTIATED (instantiation));
22179 }
22180
22181 if (complete)
22182 /* If INSTANTIATION has been instantiated, then we don't
22183 need to consider it again in the future. */
22184 *t = (*t)->next;
22185 else
22186 {
22187 last = *t;
22188 t = &(*t)->next;
22189 }
22190 tinst_depth = 0;
22191 current_tinst_level = NULL;
22192 }
22193 last_pending_template = last;
22194 }
22195 while (reconsider);
22196
22197 input_location = saved_loc;
22198 }
22199
22200 /* Substitute ARGVEC into T, which is a list of initializers for
22201 either base class or a non-static data member. The TREE_PURPOSEs
22202 are DECLs, and the TREE_VALUEs are the initializer values. Used by
22203 instantiate_decl. */
22204
22205 static tree
22206 tsubst_initializer_list (tree t, tree argvec)
22207 {
22208 tree inits = NULL_TREE;
22209
22210 for (; t; t = TREE_CHAIN (t))
22211 {
22212 tree decl;
22213 tree init;
22214 tree expanded_bases = NULL_TREE;
22215 tree expanded_arguments = NULL_TREE;
22216 int i, len = 1;
22217
22218 if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
22219 {
22220 tree expr;
22221 tree arg;
22222
22223 /* Expand the base class expansion type into separate base
22224 classes. */
22225 expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
22226 tf_warning_or_error,
22227 NULL_TREE);
22228 if (expanded_bases == error_mark_node)
22229 continue;
22230
22231 /* We'll be building separate TREE_LISTs of arguments for
22232 each base. */
22233 len = TREE_VEC_LENGTH (expanded_bases);
22234 expanded_arguments = make_tree_vec (len);
22235 for (i = 0; i < len; i++)
22236 TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
22237
22238 /* Build a dummy EXPR_PACK_EXPANSION that will be used to
22239 expand each argument in the TREE_VALUE of t. */
22240 expr = make_node (EXPR_PACK_EXPANSION);
22241 PACK_EXPANSION_LOCAL_P (expr) = true;
22242 PACK_EXPANSION_PARAMETER_PACKS (expr) =
22243 PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
22244
22245 if (TREE_VALUE (t) == void_type_node)
22246 /* VOID_TYPE_NODE is used to indicate
22247 value-initialization. */
22248 {
22249 for (i = 0; i < len; i++)
22250 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
22251 }
22252 else
22253 {
22254 /* Substitute parameter packs into each argument in the
22255 TREE_LIST. */
22256 in_base_initializer = 1;
22257 for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
22258 {
22259 tree expanded_exprs;
22260
22261 /* Expand the argument. */
22262 SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
22263 expanded_exprs
22264 = tsubst_pack_expansion (expr, argvec,
22265 tf_warning_or_error,
22266 NULL_TREE);
22267 if (expanded_exprs == error_mark_node)
22268 continue;
22269
22270 /* Prepend each of the expanded expressions to the
22271 corresponding TREE_LIST in EXPANDED_ARGUMENTS. */
22272 for (i = 0; i < len; i++)
22273 {
22274 TREE_VEC_ELT (expanded_arguments, i) =
22275 tree_cons (NULL_TREE,
22276 TREE_VEC_ELT (expanded_exprs, i),
22277 TREE_VEC_ELT (expanded_arguments, i));
22278 }
22279 }
22280 in_base_initializer = 0;
22281
22282 /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
22283 since we built them backwards. */
22284 for (i = 0; i < len; i++)
22285 {
22286 TREE_VEC_ELT (expanded_arguments, i) =
22287 nreverse (TREE_VEC_ELT (expanded_arguments, i));
22288 }
22289 }
22290 }
22291
22292 for (i = 0; i < len; ++i)
22293 {
22294 if (expanded_bases)
22295 {
22296 decl = TREE_VEC_ELT (expanded_bases, i);
22297 decl = expand_member_init (decl);
22298 init = TREE_VEC_ELT (expanded_arguments, i);
22299 }
22300 else
22301 {
22302 tree tmp;
22303 decl = tsubst_copy (TREE_PURPOSE (t), argvec,
22304 tf_warning_or_error, NULL_TREE);
22305
22306 decl = expand_member_init (decl);
22307 if (decl && !DECL_P (decl))
22308 in_base_initializer = 1;
22309
22310 init = TREE_VALUE (t);
22311 tmp = init;
22312 if (init != void_type_node)
22313 init = tsubst_expr (init, argvec,
22314 tf_warning_or_error, NULL_TREE,
22315 /*integral_constant_expression_p=*/false);
22316 if (init == NULL_TREE && tmp != NULL_TREE)
22317 /* If we had an initializer but it instantiated to nothing,
22318 value-initialize the object. This will only occur when
22319 the initializer was a pack expansion where the parameter
22320 packs used in that expansion were of length zero. */
22321 init = void_type_node;
22322 in_base_initializer = 0;
22323 }
22324
22325 if (decl)
22326 {
22327 init = build_tree_list (decl, init);
22328 TREE_CHAIN (init) = inits;
22329 inits = init;
22330 }
22331 }
22332 }
22333 return inits;
22334 }
22335
22336 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
22337
22338 static void
22339 set_current_access_from_decl (tree decl)
22340 {
22341 if (TREE_PRIVATE (decl))
22342 current_access_specifier = access_private_node;
22343 else if (TREE_PROTECTED (decl))
22344 current_access_specifier = access_protected_node;
22345 else
22346 current_access_specifier = access_public_node;
22347 }
22348
22349 /* Instantiate an enumerated type. TAG is the template type, NEWTAG
22350 is the instantiation (which should have been created with
22351 start_enum) and ARGS are the template arguments to use. */
22352
22353 static void
22354 tsubst_enum (tree tag, tree newtag, tree args)
22355 {
22356 tree e;
22357
22358 if (SCOPED_ENUM_P (newtag))
22359 begin_scope (sk_scoped_enum, newtag);
22360
22361 for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
22362 {
22363 tree value;
22364 tree decl;
22365
22366 decl = TREE_VALUE (e);
22367 /* Note that in a template enum, the TREE_VALUE is the
22368 CONST_DECL, not the corresponding INTEGER_CST. */
22369 value = tsubst_expr (DECL_INITIAL (decl),
22370 args, tf_warning_or_error, NULL_TREE,
22371 /*integral_constant_expression_p=*/true);
22372
22373 /* Give this enumeration constant the correct access. */
22374 set_current_access_from_decl (decl);
22375
22376 /* Actually build the enumerator itself. Here we're assuming that
22377 enumerators can't have dependent attributes. */
22378 build_enumerator (DECL_NAME (decl), value, newtag,
22379 DECL_ATTRIBUTES (decl), DECL_SOURCE_LOCATION (decl));
22380 }
22381
22382 if (SCOPED_ENUM_P (newtag))
22383 finish_scope ();
22384
22385 finish_enum_value_list (newtag);
22386 finish_enum (newtag);
22387
22388 DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
22389 = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
22390 }
22391
22392 /* DECL is a FUNCTION_DECL that is a template specialization. Return
22393 its type -- but without substituting the innermost set of template
22394 arguments. So, innermost set of template parameters will appear in
22395 the type. */
22396
22397 tree
22398 get_mostly_instantiated_function_type (tree decl)
22399 {
22400 /* For a function, DECL_TI_TEMPLATE is partially instantiated. */
22401 return TREE_TYPE (DECL_TI_TEMPLATE (decl));
22402 }
22403
22404 /* Return truthvalue if we're processing a template different from
22405 the last one involved in diagnostics. */
22406 bool
22407 problematic_instantiation_changed (void)
22408 {
22409 return current_tinst_level != last_error_tinst_level;
22410 }
22411
22412 /* Remember current template involved in diagnostics. */
22413 void
22414 record_last_problematic_instantiation (void)
22415 {
22416 last_error_tinst_level = current_tinst_level;
22417 }
22418
22419 struct tinst_level *
22420 current_instantiation (void)
22421 {
22422 return current_tinst_level;
22423 }
22424
22425 /* Return TRUE if current_function_decl is being instantiated, false
22426 otherwise. */
22427
22428 bool
22429 instantiating_current_function_p (void)
22430 {
22431 return (current_instantiation ()
22432 && current_instantiation ()->decl == current_function_decl);
22433 }
22434
22435 /* [temp.param] Check that template non-type parm TYPE is of an allowable
22436 type. Return zero for ok, nonzero for disallowed. Issue error and
22437 warning messages under control of COMPLAIN. */
22438
22439 static int
22440 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
22441 {
22442 if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
22443 return 0;
22444 else if (POINTER_TYPE_P (type))
22445 return 0;
22446 else if (TYPE_PTRMEM_P (type))
22447 return 0;
22448 else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
22449 return 0;
22450 else if (TREE_CODE (type) == TYPENAME_TYPE)
22451 return 0;
22452 else if (TREE_CODE (type) == DECLTYPE_TYPE)
22453 return 0;
22454 else if (TREE_CODE (type) == NULLPTR_TYPE)
22455 return 0;
22456 /* A bound template template parm could later be instantiated to have a valid
22457 nontype parm type via an alias template. */
22458 else if (cxx_dialect >= cxx11
22459 && TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
22460 return 0;
22461
22462 if (complain & tf_error)
22463 {
22464 if (type == error_mark_node)
22465 inform (input_location, "invalid template non-type parameter");
22466 else
22467 error ("%q#T is not a valid type for a template non-type parameter",
22468 type);
22469 }
22470 return 1;
22471 }
22472
22473 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
22474 Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
22475
22476 static bool
22477 dependent_type_p_r (tree type)
22478 {
22479 tree scope;
22480
22481 /* [temp.dep.type]
22482
22483 A type is dependent if it is:
22484
22485 -- a template parameter. Template template parameters are types
22486 for us (since TYPE_P holds true for them) so we handle
22487 them here. */
22488 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
22489 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
22490 return true;
22491 /* -- a qualified-id with a nested-name-specifier which contains a
22492 class-name that names a dependent type or whose unqualified-id
22493 names a dependent type. */
22494 if (TREE_CODE (type) == TYPENAME_TYPE)
22495 return true;
22496
22497 /* An alias template specialization can be dependent even if the
22498 resulting type is not. */
22499 if (dependent_alias_template_spec_p (type))
22500 return true;
22501
22502 /* -- a cv-qualified type where the cv-unqualified type is
22503 dependent.
22504 No code is necessary for this bullet; the code below handles
22505 cv-qualified types, and we don't want to strip aliases with
22506 TYPE_MAIN_VARIANT because of DR 1558. */
22507 /* -- a compound type constructed from any dependent type. */
22508 if (TYPE_PTRMEM_P (type))
22509 return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
22510 || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
22511 (type)));
22512 else if (TYPE_PTR_P (type)
22513 || TREE_CODE (type) == REFERENCE_TYPE)
22514 return dependent_type_p (TREE_TYPE (type));
22515 else if (TREE_CODE (type) == FUNCTION_TYPE
22516 || TREE_CODE (type) == METHOD_TYPE)
22517 {
22518 tree arg_type;
22519
22520 if (dependent_type_p (TREE_TYPE (type)))
22521 return true;
22522 for (arg_type = TYPE_ARG_TYPES (type);
22523 arg_type;
22524 arg_type = TREE_CHAIN (arg_type))
22525 if (dependent_type_p (TREE_VALUE (arg_type)))
22526 return true;
22527 return false;
22528 }
22529 /* -- an array type constructed from any dependent type or whose
22530 size is specified by a constant expression that is
22531 value-dependent.
22532
22533 We checked for type- and value-dependence of the bounds in
22534 compute_array_index_type, so TYPE_DEPENDENT_P is already set. */
22535 if (TREE_CODE (type) == ARRAY_TYPE)
22536 {
22537 if (TYPE_DOMAIN (type)
22538 && dependent_type_p (TYPE_DOMAIN (type)))
22539 return true;
22540 return dependent_type_p (TREE_TYPE (type));
22541 }
22542
22543 /* -- a template-id in which either the template name is a template
22544 parameter ... */
22545 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
22546 return true;
22547 /* ... or any of the template arguments is a dependent type or
22548 an expression that is type-dependent or value-dependent. */
22549 else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
22550 && (any_dependent_template_arguments_p
22551 (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
22552 return true;
22553
22554 /* All TYPEOF_TYPEs, DECLTYPE_TYPEs, and UNDERLYING_TYPEs are
22555 dependent; if the argument of the `typeof' expression is not
22556 type-dependent, then it should already been have resolved. */
22557 if (TREE_CODE (type) == TYPEOF_TYPE
22558 || TREE_CODE (type) == DECLTYPE_TYPE
22559 || TREE_CODE (type) == UNDERLYING_TYPE)
22560 return true;
22561
22562 /* A template argument pack is dependent if any of its packed
22563 arguments are. */
22564 if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
22565 {
22566 tree args = ARGUMENT_PACK_ARGS (type);
22567 int i, len = TREE_VEC_LENGTH (args);
22568 for (i = 0; i < len; ++i)
22569 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
22570 return true;
22571 }
22572
22573 /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
22574 be template parameters. */
22575 if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
22576 return true;
22577
22578 /* The standard does not specifically mention types that are local
22579 to template functions or local classes, but they should be
22580 considered dependent too. For example:
22581
22582 template <int I> void f() {
22583 enum E { a = I };
22584 S<sizeof (E)> s;
22585 }
22586
22587 The size of `E' cannot be known until the value of `I' has been
22588 determined. Therefore, `E' must be considered dependent. */
22589 scope = TYPE_CONTEXT (type);
22590 if (scope && TYPE_P (scope))
22591 return dependent_type_p (scope);
22592 /* Don't use type_dependent_expression_p here, as it can lead
22593 to infinite recursion trying to determine whether a lambda
22594 nested in a lambda is dependent (c++/47687). */
22595 else if (scope && TREE_CODE (scope) == FUNCTION_DECL
22596 && DECL_LANG_SPECIFIC (scope)
22597 && DECL_TEMPLATE_INFO (scope)
22598 && (any_dependent_template_arguments_p
22599 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (scope)))))
22600 return true;
22601
22602 /* Other types are non-dependent. */
22603 return false;
22604 }
22605
22606 /* Returns TRUE if TYPE is dependent, in the sense of
22607 [temp.dep.type]. Note that a NULL type is considered dependent. */
22608
22609 bool
22610 dependent_type_p (tree type)
22611 {
22612 /* If there are no template parameters in scope, then there can't be
22613 any dependent types. */
22614 if (!processing_template_decl)
22615 {
22616 /* If we are not processing a template, then nobody should be
22617 providing us with a dependent type. */
22618 gcc_assert (type);
22619 gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
22620 return false;
22621 }
22622
22623 /* If the type is NULL, we have not computed a type for the entity
22624 in question; in that case, the type is dependent. */
22625 if (!type)
22626 return true;
22627
22628 /* Erroneous types can be considered non-dependent. */
22629 if (type == error_mark_node)
22630 return false;
22631
22632 /* If we have not already computed the appropriate value for TYPE,
22633 do so now. */
22634 if (!TYPE_DEPENDENT_P_VALID (type))
22635 {
22636 TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
22637 TYPE_DEPENDENT_P_VALID (type) = 1;
22638 }
22639
22640 return TYPE_DEPENDENT_P (type);
22641 }
22642
22643 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
22644 lookup. In other words, a dependent type that is not the current
22645 instantiation. */
22646
22647 bool
22648 dependent_scope_p (tree scope)
22649 {
22650 return (scope && TYPE_P (scope) && dependent_type_p (scope)
22651 && !currently_open_class (scope));
22652 }
22653
22654 /* T is a SCOPE_REF; return whether we need to consider it
22655 instantiation-dependent so that we can check access at instantiation
22656 time even though we know which member it resolves to. */
22657
22658 static bool
22659 instantiation_dependent_scope_ref_p (tree t)
22660 {
22661 if (DECL_P (TREE_OPERAND (t, 1))
22662 && CLASS_TYPE_P (TREE_OPERAND (t, 0))
22663 && accessible_in_template_p (TREE_OPERAND (t, 0),
22664 TREE_OPERAND (t, 1)))
22665 return false;
22666 else
22667 return true;
22668 }
22669
22670 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
22671 [temp.dep.constexpr]. EXPRESSION is already known to be a constant
22672 expression. */
22673
22674 /* Note that this predicate is not appropriate for general expressions;
22675 only constant expressions (that satisfy potential_constant_expression)
22676 can be tested for value dependence. */
22677
22678 bool
22679 value_dependent_expression_p (tree expression)
22680 {
22681 if (!processing_template_decl)
22682 return false;
22683
22684 /* A name declared with a dependent type. */
22685 if (DECL_P (expression) && type_dependent_expression_p (expression))
22686 return true;
22687
22688 switch (TREE_CODE (expression))
22689 {
22690 case BASELINK:
22691 /* A dependent member function of the current instantiation. */
22692 return dependent_type_p (BINFO_TYPE (BASELINK_BINFO (expression)));
22693
22694 case FUNCTION_DECL:
22695 /* A dependent member function of the current instantiation. */
22696 if (DECL_CLASS_SCOPE_P (expression)
22697 && dependent_type_p (DECL_CONTEXT (expression)))
22698 return true;
22699 break;
22700
22701 case IDENTIFIER_NODE:
22702 /* A name that has not been looked up -- must be dependent. */
22703 return true;
22704
22705 case TEMPLATE_PARM_INDEX:
22706 /* A non-type template parm. */
22707 return true;
22708
22709 case CONST_DECL:
22710 /* A non-type template parm. */
22711 if (DECL_TEMPLATE_PARM_P (expression))
22712 return true;
22713 return value_dependent_expression_p (DECL_INITIAL (expression));
22714
22715 case VAR_DECL:
22716 /* A constant with literal type and is initialized
22717 with an expression that is value-dependent.
22718
22719 Note that a non-dependent parenthesized initializer will have
22720 already been replaced with its constant value, so if we see
22721 a TREE_LIST it must be dependent. */
22722 if (DECL_INITIAL (expression)
22723 && decl_constant_var_p (expression)
22724 && (TREE_CODE (DECL_INITIAL (expression)) == TREE_LIST
22725 /* cp_finish_decl doesn't fold reference initializers. */
22726 || TREE_CODE (TREE_TYPE (expression)) == REFERENCE_TYPE
22727 || type_dependent_expression_p (DECL_INITIAL (expression))
22728 || value_dependent_expression_p (DECL_INITIAL (expression))))
22729 return true;
22730 return false;
22731
22732 case DYNAMIC_CAST_EXPR:
22733 case STATIC_CAST_EXPR:
22734 case CONST_CAST_EXPR:
22735 case REINTERPRET_CAST_EXPR:
22736 case CAST_EXPR:
22737 /* These expressions are value-dependent if the type to which
22738 the cast occurs is dependent or the expression being casted
22739 is value-dependent. */
22740 {
22741 tree type = TREE_TYPE (expression);
22742
22743 if (dependent_type_p (type))
22744 return true;
22745
22746 /* A functional cast has a list of operands. */
22747 expression = TREE_OPERAND (expression, 0);
22748 if (!expression)
22749 {
22750 /* If there are no operands, it must be an expression such
22751 as "int()". This should not happen for aggregate types
22752 because it would form non-constant expressions. */
22753 gcc_assert (cxx_dialect >= cxx11
22754 || INTEGRAL_OR_ENUMERATION_TYPE_P (type));
22755
22756 return false;
22757 }
22758
22759 if (TREE_CODE (expression) == TREE_LIST)
22760 return any_value_dependent_elements_p (expression);
22761
22762 return value_dependent_expression_p (expression);
22763 }
22764
22765 case SIZEOF_EXPR:
22766 if (SIZEOF_EXPR_TYPE_P (expression))
22767 return dependent_type_p (TREE_TYPE (TREE_OPERAND (expression, 0)));
22768 /* FALLTHRU */
22769 case ALIGNOF_EXPR:
22770 case TYPEID_EXPR:
22771 /* A `sizeof' expression is value-dependent if the operand is
22772 type-dependent or is a pack expansion. */
22773 expression = TREE_OPERAND (expression, 0);
22774 if (PACK_EXPANSION_P (expression))
22775 return true;
22776 else if (TYPE_P (expression))
22777 return dependent_type_p (expression);
22778 return instantiation_dependent_uneval_expression_p (expression);
22779
22780 case AT_ENCODE_EXPR:
22781 /* An 'encode' expression is value-dependent if the operand is
22782 type-dependent. */
22783 expression = TREE_OPERAND (expression, 0);
22784 return dependent_type_p (expression);
22785
22786 case NOEXCEPT_EXPR:
22787 expression = TREE_OPERAND (expression, 0);
22788 return instantiation_dependent_uneval_expression_p (expression);
22789
22790 case SCOPE_REF:
22791 /* All instantiation-dependent expressions should also be considered
22792 value-dependent. */
22793 return instantiation_dependent_scope_ref_p (expression);
22794
22795 case COMPONENT_REF:
22796 return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
22797 || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
22798
22799 case NONTYPE_ARGUMENT_PACK:
22800 /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
22801 is value-dependent. */
22802 {
22803 tree values = ARGUMENT_PACK_ARGS (expression);
22804 int i, len = TREE_VEC_LENGTH (values);
22805
22806 for (i = 0; i < len; ++i)
22807 if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
22808 return true;
22809
22810 return false;
22811 }
22812
22813 case TRAIT_EXPR:
22814 {
22815 tree type2 = TRAIT_EXPR_TYPE2 (expression);
22816 return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
22817 || (type2 ? dependent_type_p (type2) : false));
22818 }
22819
22820 case MODOP_EXPR:
22821 return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
22822 || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
22823
22824 case ARRAY_REF:
22825 return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
22826 || (value_dependent_expression_p (TREE_OPERAND (expression, 1))));
22827
22828 case ADDR_EXPR:
22829 {
22830 tree op = TREE_OPERAND (expression, 0);
22831 return (value_dependent_expression_p (op)
22832 || has_value_dependent_address (op));
22833 }
22834
22835 case REQUIRES_EXPR:
22836 /* Treat all requires-expressions as value-dependent so
22837 we don't try to fold them. */
22838 return true;
22839
22840 case TYPE_REQ:
22841 return dependent_type_p (TREE_OPERAND (expression, 0));
22842
22843 case CALL_EXPR:
22844 {
22845 if (value_dependent_expression_p (CALL_EXPR_FN (expression)))
22846 return true;
22847 tree fn = get_callee_fndecl (expression);
22848 int i, nargs;
22849 nargs = call_expr_nargs (expression);
22850 for (i = 0; i < nargs; ++i)
22851 {
22852 tree op = CALL_EXPR_ARG (expression, i);
22853 /* In a call to a constexpr member function, look through the
22854 implicit ADDR_EXPR on the object argument so that it doesn't
22855 cause the call to be considered value-dependent. We also
22856 look through it in potential_constant_expression. */
22857 if (i == 0 && fn && DECL_DECLARED_CONSTEXPR_P (fn)
22858 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
22859 && TREE_CODE (op) == ADDR_EXPR)
22860 op = TREE_OPERAND (op, 0);
22861 if (value_dependent_expression_p (op))
22862 return true;
22863 }
22864 return false;
22865 }
22866
22867 case TEMPLATE_ID_EXPR:
22868 /* If a TEMPLATE_ID_EXPR involves a dependent name, it will be
22869 type-dependent. */
22870 return type_dependent_expression_p (expression)
22871 || variable_concept_p (TREE_OPERAND (expression, 0));
22872
22873 case CONSTRUCTOR:
22874 {
22875 unsigned ix;
22876 tree val;
22877 if (dependent_type_p (TREE_TYPE (expression)))
22878 return true;
22879 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), ix, val)
22880 if (value_dependent_expression_p (val))
22881 return true;
22882 return false;
22883 }
22884
22885 case STMT_EXPR:
22886 /* Treat a GNU statement expression as dependent to avoid crashing
22887 under instantiate_non_dependent_expr; it can't be constant. */
22888 return true;
22889
22890 default:
22891 /* A constant expression is value-dependent if any subexpression is
22892 value-dependent. */
22893 switch (TREE_CODE_CLASS (TREE_CODE (expression)))
22894 {
22895 case tcc_reference:
22896 case tcc_unary:
22897 case tcc_comparison:
22898 case tcc_binary:
22899 case tcc_expression:
22900 case tcc_vl_exp:
22901 {
22902 int i, len = cp_tree_operand_length (expression);
22903
22904 for (i = 0; i < len; i++)
22905 {
22906 tree t = TREE_OPERAND (expression, i);
22907
22908 /* In some cases, some of the operands may be missing.l
22909 (For example, in the case of PREDECREMENT_EXPR, the
22910 amount to increment by may be missing.) That doesn't
22911 make the expression dependent. */
22912 if (t && value_dependent_expression_p (t))
22913 return true;
22914 }
22915 }
22916 break;
22917 default:
22918 break;
22919 }
22920 break;
22921 }
22922
22923 /* The expression is not value-dependent. */
22924 return false;
22925 }
22926
22927 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
22928 [temp.dep.expr]. Note that an expression with no type is
22929 considered dependent. Other parts of the compiler arrange for an
22930 expression with type-dependent subexpressions to have no type, so
22931 this function doesn't have to be fully recursive. */
22932
22933 bool
22934 type_dependent_expression_p (tree expression)
22935 {
22936 if (!processing_template_decl)
22937 return false;
22938
22939 if (expression == NULL_TREE || expression == error_mark_node)
22940 return false;
22941
22942 /* An unresolved name is always dependent. */
22943 if (identifier_p (expression)
22944 || TREE_CODE (expression) == USING_DECL
22945 || TREE_CODE (expression) == WILDCARD_DECL)
22946 return true;
22947
22948 /* A fold expression is type-dependent. */
22949 if (TREE_CODE (expression) == UNARY_LEFT_FOLD_EXPR
22950 || TREE_CODE (expression) == UNARY_RIGHT_FOLD_EXPR
22951 || TREE_CODE (expression) == BINARY_LEFT_FOLD_EXPR
22952 || TREE_CODE (expression) == BINARY_RIGHT_FOLD_EXPR)
22953 return true;
22954
22955 /* Some expression forms are never type-dependent. */
22956 if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
22957 || TREE_CODE (expression) == SIZEOF_EXPR
22958 || TREE_CODE (expression) == ALIGNOF_EXPR
22959 || TREE_CODE (expression) == AT_ENCODE_EXPR
22960 || TREE_CODE (expression) == NOEXCEPT_EXPR
22961 || TREE_CODE (expression) == TRAIT_EXPR
22962 || TREE_CODE (expression) == TYPEID_EXPR
22963 || TREE_CODE (expression) == DELETE_EXPR
22964 || TREE_CODE (expression) == VEC_DELETE_EXPR
22965 || TREE_CODE (expression) == THROW_EXPR
22966 || TREE_CODE (expression) == REQUIRES_EXPR)
22967 return false;
22968
22969 /* The types of these expressions depends only on the type to which
22970 the cast occurs. */
22971 if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
22972 || TREE_CODE (expression) == STATIC_CAST_EXPR
22973 || TREE_CODE (expression) == CONST_CAST_EXPR
22974 || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
22975 || TREE_CODE (expression) == IMPLICIT_CONV_EXPR
22976 || TREE_CODE (expression) == CAST_EXPR)
22977 return dependent_type_p (TREE_TYPE (expression));
22978
22979 /* The types of these expressions depends only on the type created
22980 by the expression. */
22981 if (TREE_CODE (expression) == NEW_EXPR
22982 || TREE_CODE (expression) == VEC_NEW_EXPR)
22983 {
22984 /* For NEW_EXPR tree nodes created inside a template, either
22985 the object type itself or a TREE_LIST may appear as the
22986 operand 1. */
22987 tree type = TREE_OPERAND (expression, 1);
22988 if (TREE_CODE (type) == TREE_LIST)
22989 /* This is an array type. We need to check array dimensions
22990 as well. */
22991 return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
22992 || value_dependent_expression_p
22993 (TREE_OPERAND (TREE_VALUE (type), 1));
22994 else
22995 return dependent_type_p (type);
22996 }
22997
22998 if (TREE_CODE (expression) == SCOPE_REF)
22999 {
23000 tree scope = TREE_OPERAND (expression, 0);
23001 tree name = TREE_OPERAND (expression, 1);
23002
23003 /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
23004 contains an identifier associated by name lookup with one or more
23005 declarations declared with a dependent type, or...a
23006 nested-name-specifier or qualified-id that names a member of an
23007 unknown specialization. */
23008 return (type_dependent_expression_p (name)
23009 || dependent_scope_p (scope));
23010 }
23011
23012 if (TREE_CODE (expression) == TEMPLATE_DECL
23013 && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
23014 return false;
23015
23016 if (TREE_CODE (expression) == STMT_EXPR)
23017 expression = stmt_expr_value_expr (expression);
23018
23019 if (BRACE_ENCLOSED_INITIALIZER_P (expression))
23020 {
23021 tree elt;
23022 unsigned i;
23023
23024 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
23025 {
23026 if (type_dependent_expression_p (elt))
23027 return true;
23028 }
23029 return false;
23030 }
23031
23032 /* A static data member of the current instantiation with incomplete
23033 array type is type-dependent, as the definition and specializations
23034 can have different bounds. */
23035 if (VAR_P (expression)
23036 && DECL_CLASS_SCOPE_P (expression)
23037 && dependent_type_p (DECL_CONTEXT (expression))
23038 && VAR_HAD_UNKNOWN_BOUND (expression))
23039 return true;
23040
23041 /* An array of unknown bound depending on a variadic parameter, eg:
23042
23043 template<typename... Args>
23044 void foo (Args... args)
23045 {
23046 int arr[] = { args... };
23047 }
23048
23049 template<int... vals>
23050 void bar ()
23051 {
23052 int arr[] = { vals... };
23053 }
23054
23055 If the array has no length and has an initializer, it must be that
23056 we couldn't determine its length in cp_complete_array_type because
23057 it is dependent. */
23058 if (VAR_P (expression)
23059 && TREE_CODE (TREE_TYPE (expression)) == ARRAY_TYPE
23060 && !TYPE_DOMAIN (TREE_TYPE (expression))
23061 && DECL_INITIAL (expression))
23062 return true;
23063
23064 /* A function or variable template-id is type-dependent if it has any
23065 dependent template arguments. Note that we only consider the innermost
23066 template arguments here, since those are the ones that come from the
23067 template-id; the template arguments for the enclosing class do not make it
23068 type-dependent, they only make a member function value-dependent. */
23069 if (VAR_OR_FUNCTION_DECL_P (expression)
23070 && DECL_LANG_SPECIFIC (expression)
23071 && DECL_TEMPLATE_INFO (expression)
23072 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (expression))
23073 && (any_dependent_template_arguments_p
23074 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
23075 return true;
23076
23077 /* Always dependent, on the number of arguments if nothing else. */
23078 if (TREE_CODE (expression) == EXPR_PACK_EXPANSION)
23079 return true;
23080
23081 if (TREE_TYPE (expression) == unknown_type_node)
23082 {
23083 if (TREE_CODE (expression) == ADDR_EXPR)
23084 return type_dependent_expression_p (TREE_OPERAND (expression, 0));
23085 if (TREE_CODE (expression) == COMPONENT_REF
23086 || TREE_CODE (expression) == OFFSET_REF)
23087 {
23088 if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
23089 return true;
23090 expression = TREE_OPERAND (expression, 1);
23091 if (identifier_p (expression))
23092 return false;
23093 }
23094 /* SCOPE_REF with non-null TREE_TYPE is always non-dependent. */
23095 if (TREE_CODE (expression) == SCOPE_REF)
23096 return false;
23097
23098 if (BASELINK_P (expression))
23099 {
23100 if (BASELINK_OPTYPE (expression)
23101 && dependent_type_p (BASELINK_OPTYPE (expression)))
23102 return true;
23103 expression = BASELINK_FUNCTIONS (expression);
23104 }
23105
23106 if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
23107 {
23108 if (any_dependent_template_arguments_p
23109 (TREE_OPERAND (expression, 1)))
23110 return true;
23111 expression = TREE_OPERAND (expression, 0);
23112 if (identifier_p (expression))
23113 return true;
23114 }
23115
23116 gcc_assert (TREE_CODE (expression) == OVERLOAD
23117 || TREE_CODE (expression) == FUNCTION_DECL);
23118
23119 while (expression)
23120 {
23121 if (type_dependent_expression_p (OVL_CURRENT (expression)))
23122 return true;
23123 expression = OVL_NEXT (expression);
23124 }
23125 return false;
23126 }
23127
23128 gcc_assert (TREE_CODE (expression) != TYPE_DECL);
23129
23130 return (dependent_type_p (TREE_TYPE (expression)));
23131 }
23132
23133 /* [temp.dep.expr]/5: A class member access expression (5.2.5) is
23134 type-dependent if the expression refers to a member of the current
23135 instantiation and the type of the referenced member is dependent, or the
23136 class member access expression refers to a member of an unknown
23137 specialization.
23138
23139 This function returns true if the OBJECT in such a class member access
23140 expression is of an unknown specialization. */
23141
23142 bool
23143 type_dependent_object_expression_p (tree object)
23144 {
23145 tree scope = TREE_TYPE (object);
23146 return (!scope || dependent_scope_p (scope));
23147 }
23148
23149 /* walk_tree callback function for instantiation_dependent_expression_p,
23150 below. Returns non-zero if a dependent subexpression is found. */
23151
23152 static tree
23153 instantiation_dependent_r (tree *tp, int *walk_subtrees,
23154 void * /*data*/)
23155 {
23156 if (TYPE_P (*tp))
23157 {
23158 /* We don't have to worry about decltype currently because decltype
23159 of an instantiation-dependent expr is a dependent type. This
23160 might change depending on the resolution of DR 1172. */
23161 *walk_subtrees = false;
23162 return NULL_TREE;
23163 }
23164 enum tree_code code = TREE_CODE (*tp);
23165 switch (code)
23166 {
23167 /* Don't treat an argument list as dependent just because it has no
23168 TREE_TYPE. */
23169 case TREE_LIST:
23170 case TREE_VEC:
23171 return NULL_TREE;
23172
23173 case TEMPLATE_PARM_INDEX:
23174 return *tp;
23175
23176 /* Handle expressions with type operands. */
23177 case SIZEOF_EXPR:
23178 case ALIGNOF_EXPR:
23179 case TYPEID_EXPR:
23180 case AT_ENCODE_EXPR:
23181 {
23182 tree op = TREE_OPERAND (*tp, 0);
23183 if (code == SIZEOF_EXPR && SIZEOF_EXPR_TYPE_P (*tp))
23184 op = TREE_TYPE (op);
23185 if (TYPE_P (op))
23186 {
23187 if (dependent_type_p (op))
23188 return *tp;
23189 else
23190 {
23191 *walk_subtrees = false;
23192 return NULL_TREE;
23193 }
23194 }
23195 break;
23196 }
23197
23198 case COMPONENT_REF:
23199 if (identifier_p (TREE_OPERAND (*tp, 1)))
23200 /* In a template, finish_class_member_access_expr creates a
23201 COMPONENT_REF with an IDENTIFIER_NODE for op1 even if it isn't
23202 type-dependent, so that we can check access control at
23203 instantiation time (PR 42277). See also Core issue 1273. */
23204 return *tp;
23205 break;
23206
23207 case SCOPE_REF:
23208 if (instantiation_dependent_scope_ref_p (*tp))
23209 return *tp;
23210 else
23211 break;
23212
23213 /* Treat statement-expressions as dependent. */
23214 case BIND_EXPR:
23215 return *tp;
23216
23217 /* Treat requires-expressions as dependent. */
23218 case REQUIRES_EXPR:
23219 return *tp;
23220
23221 case CALL_EXPR:
23222 /* Treat calls to function concepts as dependent. */
23223 if (function_concept_check_p (*tp))
23224 return *tp;
23225 break;
23226
23227 case TEMPLATE_ID_EXPR:
23228 /* And variable concepts. */
23229 if (variable_concept_p (TREE_OPERAND (*tp, 0)))
23230 return *tp;
23231 break;
23232
23233 default:
23234 break;
23235 }
23236
23237 if (type_dependent_expression_p (*tp))
23238 return *tp;
23239 else
23240 return NULL_TREE;
23241 }
23242
23243 /* Returns TRUE if the EXPRESSION is instantiation-dependent, in the
23244 sense defined by the ABI:
23245
23246 "An expression is instantiation-dependent if it is type-dependent
23247 or value-dependent, or it has a subexpression that is type-dependent
23248 or value-dependent."
23249
23250 Except don't actually check value-dependence for unevaluated expressions,
23251 because in sizeof(i) we don't care about the value of i. Checking
23252 type-dependence will in turn check value-dependence of array bounds/template
23253 arguments as needed. */
23254
23255 bool
23256 instantiation_dependent_uneval_expression_p (tree expression)
23257 {
23258 tree result;
23259
23260 if (!processing_template_decl)
23261 return false;
23262
23263 if (expression == error_mark_node)
23264 return false;
23265
23266 result = cp_walk_tree_without_duplicates (&expression,
23267 instantiation_dependent_r, NULL);
23268 return result != NULL_TREE;
23269 }
23270
23271 /* As above, but also check value-dependence of the expression as a whole. */
23272
23273 bool
23274 instantiation_dependent_expression_p (tree expression)
23275 {
23276 return (instantiation_dependent_uneval_expression_p (expression)
23277 || value_dependent_expression_p (expression));
23278 }
23279
23280 /* Like type_dependent_expression_p, but it also works while not processing
23281 a template definition, i.e. during substitution or mangling. */
23282
23283 bool
23284 type_dependent_expression_p_push (tree expr)
23285 {
23286 bool b;
23287 ++processing_template_decl;
23288 b = type_dependent_expression_p (expr);
23289 --processing_template_decl;
23290 return b;
23291 }
23292
23293 /* Returns TRUE if ARGS contains a type-dependent expression. */
23294
23295 bool
23296 any_type_dependent_arguments_p (const vec<tree, va_gc> *args)
23297 {
23298 unsigned int i;
23299 tree arg;
23300
23301 FOR_EACH_VEC_SAFE_ELT (args, i, arg)
23302 {
23303 if (type_dependent_expression_p (arg))
23304 return true;
23305 }
23306 return false;
23307 }
23308
23309 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
23310 expressions) contains any type-dependent expressions. */
23311
23312 bool
23313 any_type_dependent_elements_p (const_tree list)
23314 {
23315 for (; list; list = TREE_CHAIN (list))
23316 if (type_dependent_expression_p (TREE_VALUE (list)))
23317 return true;
23318
23319 return false;
23320 }
23321
23322 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
23323 expressions) contains any value-dependent expressions. */
23324
23325 bool
23326 any_value_dependent_elements_p (const_tree list)
23327 {
23328 for (; list; list = TREE_CHAIN (list))
23329 if (value_dependent_expression_p (TREE_VALUE (list)))
23330 return true;
23331
23332 return false;
23333 }
23334
23335 /* Returns TRUE if the ARG (a template argument) is dependent. */
23336
23337 bool
23338 dependent_template_arg_p (tree arg)
23339 {
23340 if (!processing_template_decl)
23341 return false;
23342
23343 /* Assume a template argument that was wrongly written by the user
23344 is dependent. This is consistent with what
23345 any_dependent_template_arguments_p [that calls this function]
23346 does. */
23347 if (!arg || arg == error_mark_node)
23348 return true;
23349
23350 if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
23351 arg = ARGUMENT_PACK_SELECT_ARG (arg);
23352
23353 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
23354 return true;
23355 if (TREE_CODE (arg) == TEMPLATE_DECL)
23356 {
23357 if (DECL_TEMPLATE_PARM_P (arg))
23358 return true;
23359 /* A member template of a dependent class is not necessarily
23360 type-dependent, but it is a dependent template argument because it
23361 will be a member of an unknown specialization to that template. */
23362 tree scope = CP_DECL_CONTEXT (arg);
23363 return TYPE_P (scope) && dependent_type_p (scope);
23364 }
23365 else if (ARGUMENT_PACK_P (arg))
23366 {
23367 tree args = ARGUMENT_PACK_ARGS (arg);
23368 int i, len = TREE_VEC_LENGTH (args);
23369 for (i = 0; i < len; ++i)
23370 {
23371 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
23372 return true;
23373 }
23374
23375 return false;
23376 }
23377 else if (TYPE_P (arg))
23378 return dependent_type_p (arg);
23379 else
23380 return (type_dependent_expression_p (arg)
23381 || value_dependent_expression_p (arg));
23382 }
23383
23384 /* Returns true if ARGS (a collection of template arguments) contains
23385 any types that require structural equality testing. */
23386
23387 bool
23388 any_template_arguments_need_structural_equality_p (tree args)
23389 {
23390 int i;
23391 int j;
23392
23393 if (!args)
23394 return false;
23395 if (args == error_mark_node)
23396 return true;
23397
23398 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
23399 {
23400 tree level = TMPL_ARGS_LEVEL (args, i + 1);
23401 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
23402 {
23403 tree arg = TREE_VEC_ELT (level, j);
23404 tree packed_args = NULL_TREE;
23405 int k, len = 1;
23406
23407 if (ARGUMENT_PACK_P (arg))
23408 {
23409 /* Look inside the argument pack. */
23410 packed_args = ARGUMENT_PACK_ARGS (arg);
23411 len = TREE_VEC_LENGTH (packed_args);
23412 }
23413
23414 for (k = 0; k < len; ++k)
23415 {
23416 if (packed_args)
23417 arg = TREE_VEC_ELT (packed_args, k);
23418
23419 if (error_operand_p (arg))
23420 return true;
23421 else if (TREE_CODE (arg) == TEMPLATE_DECL)
23422 continue;
23423 else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
23424 return true;
23425 else if (!TYPE_P (arg) && TREE_TYPE (arg)
23426 && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
23427 return true;
23428 }
23429 }
23430 }
23431
23432 return false;
23433 }
23434
23435 /* Returns true if ARGS (a collection of template arguments) contains
23436 any dependent arguments. */
23437
23438 bool
23439 any_dependent_template_arguments_p (const_tree args)
23440 {
23441 int i;
23442 int j;
23443
23444 if (!args)
23445 return false;
23446 if (args == error_mark_node)
23447 return true;
23448
23449 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
23450 {
23451 const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
23452 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
23453 if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
23454 return true;
23455 }
23456
23457 return false;
23458 }
23459
23460 /* Returns TRUE if the template TMPL is type-dependent. */
23461
23462 bool
23463 dependent_template_p (tree tmpl)
23464 {
23465 if (TREE_CODE (tmpl) == OVERLOAD)
23466 {
23467 while (tmpl)
23468 {
23469 if (dependent_template_p (OVL_CURRENT (tmpl)))
23470 return true;
23471 tmpl = OVL_NEXT (tmpl);
23472 }
23473 return false;
23474 }
23475
23476 /* Template template parameters are dependent. */
23477 if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
23478 || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
23479 return true;
23480 /* So are names that have not been looked up. */
23481 if (TREE_CODE (tmpl) == SCOPE_REF || identifier_p (tmpl))
23482 return true;
23483 return false;
23484 }
23485
23486 /* Returns TRUE if the specialization TMPL<ARGS> is dependent. */
23487
23488 bool
23489 dependent_template_id_p (tree tmpl, tree args)
23490 {
23491 return (dependent_template_p (tmpl)
23492 || any_dependent_template_arguments_p (args));
23493 }
23494
23495 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
23496 are dependent. */
23497
23498 bool
23499 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
23500 {
23501 int i;
23502
23503 if (!processing_template_decl)
23504 return false;
23505
23506 for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
23507 {
23508 tree decl = TREE_VEC_ELT (declv, i);
23509 tree init = TREE_VEC_ELT (initv, i);
23510 tree cond = TREE_VEC_ELT (condv, i);
23511 tree incr = TREE_VEC_ELT (incrv, i);
23512
23513 if (type_dependent_expression_p (decl)
23514 || TREE_CODE (decl) == SCOPE_REF)
23515 return true;
23516
23517 if (init && type_dependent_expression_p (init))
23518 return true;
23519
23520 if (type_dependent_expression_p (cond))
23521 return true;
23522
23523 if (COMPARISON_CLASS_P (cond)
23524 && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
23525 || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
23526 return true;
23527
23528 if (TREE_CODE (incr) == MODOP_EXPR)
23529 {
23530 if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
23531 || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
23532 return true;
23533 }
23534 else if (type_dependent_expression_p (incr))
23535 return true;
23536 else if (TREE_CODE (incr) == MODIFY_EXPR)
23537 {
23538 if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
23539 return true;
23540 else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
23541 {
23542 tree t = TREE_OPERAND (incr, 1);
23543 if (type_dependent_expression_p (TREE_OPERAND (t, 0))
23544 || type_dependent_expression_p (TREE_OPERAND (t, 1)))
23545 return true;
23546 }
23547 }
23548 }
23549
23550 return false;
23551 }
23552
23553 /* TYPE is a TYPENAME_TYPE. Returns the ordinary TYPE to which the
23554 TYPENAME_TYPE corresponds. Returns the original TYPENAME_TYPE if
23555 no such TYPE can be found. Note that this function peers inside
23556 uninstantiated templates and therefore should be used only in
23557 extremely limited situations. ONLY_CURRENT_P restricts this
23558 peering to the currently open classes hierarchy (which is required
23559 when comparing types). */
23560
23561 tree
23562 resolve_typename_type (tree type, bool only_current_p)
23563 {
23564 tree scope;
23565 tree name;
23566 tree decl;
23567 int quals;
23568 tree pushed_scope;
23569 tree result;
23570
23571 gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
23572
23573 scope = TYPE_CONTEXT (type);
23574 /* Usually the non-qualified identifier of a TYPENAME_TYPE is
23575 TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
23576 a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
23577 the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
23578 identifier of the TYPENAME_TYPE anymore.
23579 So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
23580 TYPENAME_TYPE instead, we avoid messing up with a possible
23581 typedef variant case. */
23582 name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
23583
23584 /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
23585 it first before we can figure out what NAME refers to. */
23586 if (TREE_CODE (scope) == TYPENAME_TYPE)
23587 {
23588 if (TYPENAME_IS_RESOLVING_P (scope))
23589 /* Given a class template A with a dependent base with nested type C,
23590 typedef typename A::C::C C will land us here, as trying to resolve
23591 the initial A::C leads to the local C typedef, which leads back to
23592 A::C::C. So we break the recursion now. */
23593 return type;
23594 else
23595 scope = resolve_typename_type (scope, only_current_p);
23596 }
23597 /* If we don't know what SCOPE refers to, then we cannot resolve the
23598 TYPENAME_TYPE. */
23599 if (TREE_CODE (scope) == TYPENAME_TYPE)
23600 return type;
23601 /* If the SCOPE is a template type parameter, we have no way of
23602 resolving the name. */
23603 if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
23604 return type;
23605 /* If the SCOPE is not the current instantiation, there's no reason
23606 to look inside it. */
23607 if (only_current_p && !currently_open_class (scope))
23608 return type;
23609 /* If this is a typedef, we don't want to look inside (c++/11987). */
23610 if (typedef_variant_p (type))
23611 return type;
23612 /* If SCOPE isn't the template itself, it will not have a valid
23613 TYPE_FIELDS list. */
23614 if (CLASS_TYPE_P (scope)
23615 && same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
23616 /* scope is either the template itself or a compatible instantiation
23617 like X<T>, so look up the name in the original template. */
23618 scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
23619 else
23620 /* scope is a partial instantiation, so we can't do the lookup or we
23621 will lose the template arguments. */
23622 return type;
23623 /* Enter the SCOPE so that name lookup will be resolved as if we
23624 were in the class definition. In particular, SCOPE will no
23625 longer be considered a dependent type. */
23626 pushed_scope = push_scope (scope);
23627 /* Look up the declaration. */
23628 decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true,
23629 tf_warning_or_error);
23630
23631 result = NULL_TREE;
23632
23633 /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
23634 find a TEMPLATE_DECL. Otherwise, we want to find a TYPE_DECL. */
23635 if (!decl)
23636 /*nop*/;
23637 else if (identifier_p (TYPENAME_TYPE_FULLNAME (type))
23638 && TREE_CODE (decl) == TYPE_DECL)
23639 {
23640 result = TREE_TYPE (decl);
23641 if (result == error_mark_node)
23642 result = NULL_TREE;
23643 }
23644 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
23645 && DECL_CLASS_TEMPLATE_P (decl))
23646 {
23647 tree tmpl;
23648 tree args;
23649 /* Obtain the template and the arguments. */
23650 tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
23651 args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
23652 /* Instantiate the template. */
23653 result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
23654 /*entering_scope=*/0,
23655 tf_error | tf_user);
23656 if (result == error_mark_node)
23657 result = NULL_TREE;
23658 }
23659
23660 /* Leave the SCOPE. */
23661 if (pushed_scope)
23662 pop_scope (pushed_scope);
23663
23664 /* If we failed to resolve it, return the original typename. */
23665 if (!result)
23666 return type;
23667
23668 /* If lookup found a typename type, resolve that too. */
23669 if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
23670 {
23671 /* Ill-formed programs can cause infinite recursion here, so we
23672 must catch that. */
23673 TYPENAME_IS_RESOLVING_P (result) = 1;
23674 result = resolve_typename_type (result, only_current_p);
23675 TYPENAME_IS_RESOLVING_P (result) = 0;
23676 }
23677
23678 /* Qualify the resulting type. */
23679 quals = cp_type_quals (type);
23680 if (quals)
23681 result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
23682
23683 return result;
23684 }
23685
23686 /* EXPR is an expression which is not type-dependent. Return a proxy
23687 for EXPR that can be used to compute the types of larger
23688 expressions containing EXPR. */
23689
23690 tree
23691 build_non_dependent_expr (tree expr)
23692 {
23693 tree inner_expr;
23694
23695 /* When checking, try to get a constant value for all non-dependent
23696 expressions in order to expose bugs in *_dependent_expression_p
23697 and constexpr. This can affect code generation, see PR70704, so
23698 only do this for -fchecking=2. */
23699 if (flag_checking > 1
23700 && cxx_dialect >= cxx11
23701 /* Don't do this during nsdmi parsing as it can lead to
23702 unexpected recursive instantiations. */
23703 && !parsing_nsdmi ())
23704 fold_non_dependent_expr (expr);
23705
23706 /* Preserve OVERLOADs; the functions must be available to resolve
23707 types. */
23708 inner_expr = expr;
23709 if (TREE_CODE (inner_expr) == STMT_EXPR)
23710 inner_expr = stmt_expr_value_expr (inner_expr);
23711 if (TREE_CODE (inner_expr) == ADDR_EXPR)
23712 inner_expr = TREE_OPERAND (inner_expr, 0);
23713 if (TREE_CODE (inner_expr) == COMPONENT_REF)
23714 inner_expr = TREE_OPERAND (inner_expr, 1);
23715 if (is_overloaded_fn (inner_expr)
23716 || TREE_CODE (inner_expr) == OFFSET_REF)
23717 return expr;
23718 /* There is no need to return a proxy for a variable. */
23719 if (VAR_P (expr))
23720 return expr;
23721 /* Preserve string constants; conversions from string constants to
23722 "char *" are allowed, even though normally a "const char *"
23723 cannot be used to initialize a "char *". */
23724 if (TREE_CODE (expr) == STRING_CST)
23725 return expr;
23726 /* Preserve void and arithmetic constants, as an optimization -- there is no
23727 reason to create a new node. */
23728 if (TREE_CODE (expr) == VOID_CST
23729 || TREE_CODE (expr) == INTEGER_CST
23730 || TREE_CODE (expr) == REAL_CST)
23731 return expr;
23732 /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
23733 There is at least one place where we want to know that a
23734 particular expression is a throw-expression: when checking a ?:
23735 expression, there are special rules if the second or third
23736 argument is a throw-expression. */
23737 if (TREE_CODE (expr) == THROW_EXPR)
23738 return expr;
23739
23740 /* Don't wrap an initializer list, we need to be able to look inside. */
23741 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
23742 return expr;
23743
23744 /* Don't wrap a dummy object, we need to be able to test for it. */
23745 if (is_dummy_object (expr))
23746 return expr;
23747
23748 if (TREE_CODE (expr) == COND_EXPR)
23749 return build3 (COND_EXPR,
23750 TREE_TYPE (expr),
23751 TREE_OPERAND (expr, 0),
23752 (TREE_OPERAND (expr, 1)
23753 ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
23754 : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
23755 build_non_dependent_expr (TREE_OPERAND (expr, 2)));
23756 if (TREE_CODE (expr) == COMPOUND_EXPR
23757 && !COMPOUND_EXPR_OVERLOADED (expr))
23758 return build2 (COMPOUND_EXPR,
23759 TREE_TYPE (expr),
23760 TREE_OPERAND (expr, 0),
23761 build_non_dependent_expr (TREE_OPERAND (expr, 1)));
23762
23763 /* If the type is unknown, it can't really be non-dependent */
23764 gcc_assert (TREE_TYPE (expr) != unknown_type_node);
23765
23766 /* Otherwise, build a NON_DEPENDENT_EXPR. */
23767 return build1 (NON_DEPENDENT_EXPR, TREE_TYPE (expr), expr);
23768 }
23769
23770 /* ARGS is a vector of expressions as arguments to a function call.
23771 Replace the arguments with equivalent non-dependent expressions.
23772 This modifies ARGS in place. */
23773
23774 void
23775 make_args_non_dependent (vec<tree, va_gc> *args)
23776 {
23777 unsigned int ix;
23778 tree arg;
23779
23780 FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
23781 {
23782 tree newarg = build_non_dependent_expr (arg);
23783 if (newarg != arg)
23784 (*args)[ix] = newarg;
23785 }
23786 }
23787
23788 /* Returns a type which represents 'auto' or 'decltype(auto)'. We use a
23789 TEMPLATE_TYPE_PARM with a level one deeper than the actual template
23790 parms. If set_canonical is true, we set TYPE_CANONICAL on it. */
23791
23792 static tree
23793 make_auto_1 (tree name, bool set_canonical)
23794 {
23795 tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
23796 TYPE_NAME (au) = build_decl (input_location,
23797 TYPE_DECL, name, au);
23798 TYPE_STUB_DECL (au) = TYPE_NAME (au);
23799 TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
23800 (0, processing_template_decl + 1, processing_template_decl + 1,
23801 TYPE_NAME (au), NULL_TREE);
23802 if (set_canonical)
23803 TYPE_CANONICAL (au) = canonical_type_parameter (au);
23804 DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
23805 SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
23806
23807 return au;
23808 }
23809
23810 tree
23811 make_decltype_auto (void)
23812 {
23813 return make_auto_1 (get_identifier ("decltype(auto)"), true);
23814 }
23815
23816 tree
23817 make_auto (void)
23818 {
23819 return make_auto_1 (get_identifier ("auto"), true);
23820 }
23821
23822 /* Make a "constrained auto" type-specifier. This is an
23823 auto type with constraints that must be associated after
23824 deduction. The constraint is formed from the given
23825 CONC and its optional sequence of arguments, which are
23826 non-null if written as partial-concept-id. */
23827
23828 tree
23829 make_constrained_auto (tree con, tree args)
23830 {
23831 tree type = make_auto_1 (get_identifier ("auto"), false);
23832
23833 /* Build the constraint. */
23834 tree tmpl = DECL_TI_TEMPLATE (con);
23835 tree expr;
23836 if (VAR_P (con))
23837 expr = build_concept_check (tmpl, type, args);
23838 else
23839 expr = build_concept_check (build_overload (tmpl, NULL_TREE), type, args);
23840
23841 tree constr = make_predicate_constraint (expr);
23842 PLACEHOLDER_TYPE_CONSTRAINTS (type) = constr;
23843
23844 /* Our canonical type depends on the constraint. */
23845 TYPE_CANONICAL (type) = canonical_type_parameter (type);
23846
23847 /* Attach the constraint to the type declaration. */
23848 tree decl = TYPE_NAME (type);
23849 return decl;
23850 }
23851
23852 /* Given type ARG, return std::initializer_list<ARG>. */
23853
23854 static tree
23855 listify (tree arg)
23856 {
23857 tree std_init_list = namespace_binding
23858 (get_identifier ("initializer_list"), std_node);
23859 tree argvec;
23860 if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
23861 {
23862 error ("deducing from brace-enclosed initializer list requires "
23863 "#include <initializer_list>");
23864 return error_mark_node;
23865 }
23866 argvec = make_tree_vec (1);
23867 TREE_VEC_ELT (argvec, 0) = arg;
23868 return lookup_template_class (std_init_list, argvec, NULL_TREE,
23869 NULL_TREE, 0, tf_warning_or_error);
23870 }
23871
23872 /* Replace auto in TYPE with std::initializer_list<auto>. */
23873
23874 static tree
23875 listify_autos (tree type, tree auto_node)
23876 {
23877 tree init_auto = listify (auto_node);
23878 tree argvec = make_tree_vec (1);
23879 TREE_VEC_ELT (argvec, 0) = init_auto;
23880 if (processing_template_decl)
23881 argvec = add_to_template_args (current_template_args (), argvec);
23882 return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
23883 }
23884
23885 /* Hash traits for hashing possibly constrained 'auto'
23886 TEMPLATE_TYPE_PARMs for use by do_auto_deduction. */
23887
23888 struct auto_hash : default_hash_traits<tree>
23889 {
23890 static inline hashval_t hash (tree);
23891 static inline bool equal (tree, tree);
23892 };
23893
23894 /* Hash the 'auto' T. */
23895
23896 inline hashval_t
23897 auto_hash::hash (tree t)
23898 {
23899 if (tree c = PLACEHOLDER_TYPE_CONSTRAINTS (t))
23900 /* Matching constrained-type-specifiers denote the same template
23901 parameter, so hash the constraint. */
23902 return hash_placeholder_constraint (c);
23903 else
23904 /* But unconstrained autos are all separate, so just hash the pointer. */
23905 return iterative_hash_object (t, 0);
23906 }
23907
23908 /* Compare two 'auto's. */
23909
23910 inline bool
23911 auto_hash::equal (tree t1, tree t2)
23912 {
23913 if (t1 == t2)
23914 return true;
23915
23916 tree c1 = PLACEHOLDER_TYPE_CONSTRAINTS (t1);
23917 tree c2 = PLACEHOLDER_TYPE_CONSTRAINTS (t2);
23918
23919 /* Two unconstrained autos are distinct. */
23920 if (!c1 || !c2)
23921 return false;
23922
23923 return equivalent_placeholder_constraints (c1, c2);
23924 }
23925
23926 /* for_each_template_parm callback for extract_autos: if t is a (possibly
23927 constrained) auto, add it to the vector. */
23928
23929 static int
23930 extract_autos_r (tree t, void *data)
23931 {
23932 hash_table<auto_hash> &hash = *(hash_table<auto_hash>*)data;
23933 if (is_auto_or_concept (t))
23934 {
23935 /* All the autos were built with index 0; fix that up now. */
23936 tree *p = hash.find_slot (t, INSERT);
23937 unsigned idx;
23938 if (*p)
23939 /* If this is a repeated constrained-type-specifier, use the index we
23940 chose before. */
23941 idx = TEMPLATE_PARM_IDX (TEMPLATE_TYPE_PARM_INDEX (*p));
23942 else
23943 {
23944 /* Otherwise this is new, so use the current count. */
23945 *p = t;
23946 idx = hash.elements () - 1;
23947 }
23948 TEMPLATE_PARM_IDX (TEMPLATE_TYPE_PARM_INDEX (t)) = idx;
23949 }
23950
23951 /* Always keep walking. */
23952 return 0;
23953 }
23954
23955 /* Return a TREE_VEC of the 'auto's used in type under the Concepts TS, which
23956 says they can appear anywhere in the type. */
23957
23958 static tree
23959 extract_autos (tree type)
23960 {
23961 hash_set<tree> visited;
23962 hash_table<auto_hash> hash (2);
23963
23964 for_each_template_parm (type, extract_autos_r, &hash, &visited, true);
23965
23966 tree tree_vec = make_tree_vec (hash.elements());
23967 for (hash_table<auto_hash>::iterator iter = hash.begin();
23968 iter != hash.end(); ++iter)
23969 {
23970 tree elt = *iter;
23971 unsigned i = TEMPLATE_PARM_IDX (TEMPLATE_TYPE_PARM_INDEX (elt));
23972 TREE_VEC_ELT (tree_vec, i)
23973 = build_tree_list (NULL_TREE, TYPE_NAME (elt));
23974 }
23975
23976 return tree_vec;
23977 }
23978
23979 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
23980 from INIT. AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE. */
23981
23982 tree
23983 do_auto_deduction (tree type, tree init, tree auto_node)
23984 {
23985 return do_auto_deduction (type, init, auto_node,
23986 tf_warning_or_error,
23987 adc_unspecified);
23988 }
23989
23990 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
23991 from INIT. AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.
23992 The CONTEXT determines the context in which auto deduction is performed
23993 and is used to control error diagnostics. */
23994
23995 tree
23996 do_auto_deduction (tree type, tree init, tree auto_node,
23997 tsubst_flags_t complain, auto_deduction_context context)
23998 {
23999 tree targs;
24000
24001 if (init == error_mark_node)
24002 return error_mark_node;
24003
24004 if (type_dependent_expression_p (init))
24005 /* Defining a subset of type-dependent expressions that we can deduce
24006 from ahead of time isn't worth the trouble. */
24007 return type;
24008
24009 /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
24010 with either a new invented type template parameter U or, if the
24011 initializer is a braced-init-list (8.5.4), with
24012 std::initializer_list<U>. */
24013 if (BRACE_ENCLOSED_INITIALIZER_P (init))
24014 {
24015 if (!DIRECT_LIST_INIT_P (init))
24016 type = listify_autos (type, auto_node);
24017 else if (CONSTRUCTOR_NELTS (init) == 1)
24018 init = CONSTRUCTOR_ELT (init, 0)->value;
24019 else
24020 {
24021 if (complain & tf_warning_or_error)
24022 {
24023 if (permerror (input_location, "direct-list-initialization of "
24024 "%<auto%> requires exactly one element"))
24025 inform (input_location,
24026 "for deduction to %<std::initializer_list%>, use copy-"
24027 "list-initialization (i.e. add %<=%> before the %<{%>)");
24028 }
24029 type = listify_autos (type, auto_node);
24030 }
24031 }
24032
24033 if (type == error_mark_node)
24034 return error_mark_node;
24035
24036 init = resolve_nondeduced_context (init, complain);
24037
24038 if (AUTO_IS_DECLTYPE (auto_node))
24039 {
24040 bool id = (DECL_P (init)
24041 || ((TREE_CODE (init) == COMPONENT_REF
24042 || TREE_CODE (init) == SCOPE_REF)
24043 && !REF_PARENTHESIZED_P (init)));
24044 targs = make_tree_vec (1);
24045 TREE_VEC_ELT (targs, 0)
24046 = finish_decltype_type (init, id, tf_warning_or_error);
24047 if (type != auto_node)
24048 {
24049 if (complain & tf_error)
24050 error ("%qT as type rather than plain %<decltype(auto)%>", type);
24051 return error_mark_node;
24052 }
24053 }
24054 else
24055 {
24056 tree parms = build_tree_list (NULL_TREE, type);
24057 tree tparms;
24058
24059 if (flag_concepts)
24060 tparms = extract_autos (type);
24061 else
24062 {
24063 tparms = make_tree_vec (1);
24064 TREE_VEC_ELT (tparms, 0)
24065 = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
24066 }
24067
24068 targs = make_tree_vec (TREE_VEC_LENGTH (tparms));
24069 int val = type_unification_real (tparms, targs, parms, &init, 1, 0,
24070 DEDUCE_CALL, LOOKUP_NORMAL,
24071 NULL, /*explain_p=*/false);
24072 if (val > 0)
24073 {
24074 if (processing_template_decl)
24075 /* Try again at instantiation time. */
24076 return type;
24077 if (type && type != error_mark_node
24078 && (complain & tf_error))
24079 /* If type is error_mark_node a diagnostic must have been
24080 emitted by now. Also, having a mention to '<type error>'
24081 in the diagnostic is not really useful to the user. */
24082 {
24083 if (cfun && auto_node == current_function_auto_return_pattern
24084 && LAMBDA_FUNCTION_P (current_function_decl))
24085 error ("unable to deduce lambda return type from %qE", init);
24086 else
24087 error ("unable to deduce %qT from %qE", type, init);
24088 type_unification_real (tparms, targs, parms, &init, 1, 0,
24089 DEDUCE_CALL, LOOKUP_NORMAL,
24090 NULL, /*explain_p=*/true);
24091 }
24092 return error_mark_node;
24093 }
24094 }
24095
24096 /* Check any placeholder constraints against the deduced type. */
24097 if (flag_concepts && !processing_template_decl)
24098 if (tree constr = PLACEHOLDER_TYPE_CONSTRAINTS (auto_node))
24099 {
24100 /* Use the deduced type to check the associated constraints. */
24101 if (!constraints_satisfied_p (constr, targs))
24102 {
24103 if (complain & tf_warning_or_error)
24104 {
24105 switch (context)
24106 {
24107 case adc_unspecified:
24108 error("placeholder constraints not satisfied");
24109 break;
24110 case adc_variable_type:
24111 error ("deduced initializer does not satisfy "
24112 "placeholder constraints");
24113 break;
24114 case adc_return_type:
24115 error ("deduced return type does not satisfy "
24116 "placeholder constraints");
24117 break;
24118 case adc_requirement:
24119 error ("deduced expression type does not saatisy "
24120 "placeholder constraints");
24121 break;
24122 }
24123 diagnose_constraints (input_location, constr, targs);
24124 }
24125 return error_mark_node;
24126 }
24127 }
24128
24129 if (processing_template_decl)
24130 targs = add_to_template_args (current_template_args (), targs);
24131 return tsubst (type, targs, complain, NULL_TREE);
24132 }
24133
24134 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
24135 result. */
24136
24137 tree
24138 splice_late_return_type (tree type, tree late_return_type)
24139 {
24140 if (is_auto (type))
24141 {
24142 if (late_return_type)
24143 return late_return_type;
24144
24145 tree idx = get_template_parm_index (type);
24146 if (TEMPLATE_PARM_LEVEL (idx) <= processing_template_decl)
24147 /* In an abbreviated function template we didn't know we were dealing
24148 with a function template when we saw the auto return type, so update
24149 it to have the correct level. */
24150 return make_auto_1 (TYPE_IDENTIFIER (type), true);
24151 }
24152 return type;
24153 }
24154
24155 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto' or
24156 'decltype(auto)'. */
24157
24158 bool
24159 is_auto (const_tree type)
24160 {
24161 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
24162 && (TYPE_IDENTIFIER (type) == get_identifier ("auto")
24163 || TYPE_IDENTIFIER (type) == get_identifier ("decltype(auto)")))
24164 return true;
24165 else
24166 return false;
24167 }
24168
24169 /* for_each_template_parm callback for type_uses_auto. */
24170
24171 int
24172 is_auto_r (tree tp, void */*data*/)
24173 {
24174 return is_auto_or_concept (tp);
24175 }
24176
24177 /* Returns the TEMPLATE_TYPE_PARM in TYPE representing `auto' iff TYPE contains
24178 a use of `auto'. Returns NULL_TREE otherwise. */
24179
24180 tree
24181 type_uses_auto (tree type)
24182 {
24183 if (type == NULL_TREE)
24184 return NULL_TREE;
24185 else if (flag_concepts)
24186 {
24187 /* The Concepts TS allows multiple autos in one type-specifier; just
24188 return the first one we find, do_auto_deduction will collect all of
24189 them. */
24190 if (uses_template_parms (type))
24191 return for_each_template_parm (type, is_auto_r, /*data*/NULL,
24192 /*visited*/NULL, /*nondeduced*/true);
24193 else
24194 return NULL_TREE;
24195 }
24196 else
24197 return find_type_usage (type, is_auto);
24198 }
24199
24200 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto',
24201 'decltype(auto)' or a concept. */
24202
24203 bool
24204 is_auto_or_concept (const_tree type)
24205 {
24206 return is_auto (type); // or concept
24207 }
24208
24209 /* Returns the TEMPLATE_TYPE_PARM in TYPE representing a generic type (`auto' or
24210 a concept identifier) iff TYPE contains a use of a generic type. Returns
24211 NULL_TREE otherwise. */
24212
24213 tree
24214 type_uses_auto_or_concept (tree type)
24215 {
24216 return find_type_usage (type, is_auto_or_concept);
24217 }
24218
24219
24220 /* For a given template T, return the vector of typedefs referenced
24221 in T for which access check is needed at T instantiation time.
24222 T is either a FUNCTION_DECL or a RECORD_TYPE.
24223 Those typedefs were added to T by the function
24224 append_type_to_template_for_access_check. */
24225
24226 vec<qualified_typedef_usage_t, va_gc> *
24227 get_types_needing_access_check (tree t)
24228 {
24229 tree ti;
24230 vec<qualified_typedef_usage_t, va_gc> *result = NULL;
24231
24232 if (!t || t == error_mark_node)
24233 return NULL;
24234
24235 if (!(ti = get_template_info (t)))
24236 return NULL;
24237
24238 if (CLASS_TYPE_P (t)
24239 || TREE_CODE (t) == FUNCTION_DECL)
24240 {
24241 if (!TI_TEMPLATE (ti))
24242 return NULL;
24243
24244 result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
24245 }
24246
24247 return result;
24248 }
24249
24250 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
24251 tied to T. That list of typedefs will be access checked at
24252 T instantiation time.
24253 T is either a FUNCTION_DECL or a RECORD_TYPE.
24254 TYPE_DECL is a TYPE_DECL node representing a typedef.
24255 SCOPE is the scope through which TYPE_DECL is accessed.
24256 LOCATION is the location of the usage point of TYPE_DECL.
24257
24258 This function is a subroutine of
24259 append_type_to_template_for_access_check. */
24260
24261 static void
24262 append_type_to_template_for_access_check_1 (tree t,
24263 tree type_decl,
24264 tree scope,
24265 location_t location)
24266 {
24267 qualified_typedef_usage_t typedef_usage;
24268 tree ti;
24269
24270 if (!t || t == error_mark_node)
24271 return;
24272
24273 gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
24274 || CLASS_TYPE_P (t))
24275 && type_decl
24276 && TREE_CODE (type_decl) == TYPE_DECL
24277 && scope);
24278
24279 if (!(ti = get_template_info (t)))
24280 return;
24281
24282 gcc_assert (TI_TEMPLATE (ti));
24283
24284 typedef_usage.typedef_decl = type_decl;
24285 typedef_usage.context = scope;
24286 typedef_usage.locus = location;
24287
24288 vec_safe_push (TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti), typedef_usage);
24289 }
24290
24291 /* Append TYPE_DECL to the template TEMPL.
24292 TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
24293 At TEMPL instanciation time, TYPE_DECL will be checked to see
24294 if it can be accessed through SCOPE.
24295 LOCATION is the location of the usage point of TYPE_DECL.
24296
24297 e.g. consider the following code snippet:
24298
24299 class C
24300 {
24301 typedef int myint;
24302 };
24303
24304 template<class U> struct S
24305 {
24306 C::myint mi; // <-- usage point of the typedef C::myint
24307 };
24308
24309 S<char> s;
24310
24311 At S<char> instantiation time, we need to check the access of C::myint
24312 In other words, we need to check the access of the myint typedef through
24313 the C scope. For that purpose, this function will add the myint typedef
24314 and the scope C through which its being accessed to a list of typedefs
24315 tied to the template S. That list will be walked at template instantiation
24316 time and access check performed on each typedefs it contains.
24317 Note that this particular code snippet should yield an error because
24318 myint is private to C. */
24319
24320 void
24321 append_type_to_template_for_access_check (tree templ,
24322 tree type_decl,
24323 tree scope,
24324 location_t location)
24325 {
24326 qualified_typedef_usage_t *iter;
24327 unsigned i;
24328
24329 gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
24330
24331 /* Make sure we don't append the type to the template twice. */
24332 FOR_EACH_VEC_SAFE_ELT (get_types_needing_access_check (templ), i, iter)
24333 if (iter->typedef_decl == type_decl && scope == iter->context)
24334 return;
24335
24336 append_type_to_template_for_access_check_1 (templ, type_decl,
24337 scope, location);
24338 }
24339
24340 /* Convert the generic type parameters in PARM that match the types given in the
24341 range [START_IDX, END_IDX) from the current_template_parms into generic type
24342 packs. */
24343
24344 tree
24345 convert_generic_types_to_packs (tree parm, int start_idx, int end_idx)
24346 {
24347 tree current = current_template_parms;
24348 int depth = TMPL_PARMS_DEPTH (current);
24349 current = INNERMOST_TEMPLATE_PARMS (current);
24350 tree replacement = make_tree_vec (TREE_VEC_LENGTH (current));
24351
24352 for (int i = 0; i < start_idx; ++i)
24353 TREE_VEC_ELT (replacement, i)
24354 = TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (current, i)));
24355
24356 for (int i = start_idx; i < end_idx; ++i)
24357 {
24358 /* Create a distinct parameter pack type from the current parm and add it
24359 to the replacement args to tsubst below into the generic function
24360 parameter. */
24361
24362 tree o = TREE_TYPE (TREE_VALUE
24363 (TREE_VEC_ELT (current, i)));
24364 tree t = copy_type (o);
24365 TEMPLATE_TYPE_PARM_INDEX (t)
24366 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (o),
24367 o, 0, 0, tf_none);
24368 TREE_TYPE (TEMPLATE_TYPE_DECL (t)) = t;
24369 TYPE_STUB_DECL (t) = TYPE_NAME (t) = TEMPLATE_TYPE_DECL (t);
24370 TYPE_MAIN_VARIANT (t) = t;
24371 TEMPLATE_TYPE_PARAMETER_PACK (t) = true;
24372 TYPE_CANONICAL (t) = canonical_type_parameter (t);
24373 TREE_VEC_ELT (replacement, i) = t;
24374 TREE_VALUE (TREE_VEC_ELT (current, i)) = TREE_CHAIN (t);
24375 }
24376
24377 for (int i = end_idx, e = TREE_VEC_LENGTH (current); i < e; ++i)
24378 TREE_VEC_ELT (replacement, i)
24379 = TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (current, i)));
24380
24381 /* If there are more levels then build up the replacement with the outer
24382 template parms. */
24383 if (depth > 1)
24384 replacement = add_to_template_args (template_parms_to_args
24385 (TREE_CHAIN (current_template_parms)),
24386 replacement);
24387
24388 return tsubst (parm, replacement, tf_none, NULL_TREE);
24389 }
24390
24391 /* Entries in the decl_constraint hash table. */
24392 struct GTY((for_user)) constr_entry
24393 {
24394 tree decl;
24395 tree ci;
24396 };
24397
24398 /* Hashing function and equality for constraint entries. */
24399 struct constr_hasher : ggc_ptr_hash<constr_entry>
24400 {
24401 static hashval_t hash (constr_entry *e)
24402 {
24403 return (hashval_t)DECL_UID (e->decl);
24404 }
24405
24406 static bool equal (constr_entry *e1, constr_entry *e2)
24407 {
24408 return e1->decl == e2->decl;
24409 }
24410 };
24411
24412 /* A mapping from declarations to constraint information. Note that
24413 both templates and their underlying declarations are mapped to the
24414 same constraint information.
24415
24416 FIXME: This is defined in pt.c because garbage collection
24417 code is not being generated for constraint.cc. */
24418
24419 static GTY (()) hash_table<constr_hasher> *decl_constraints;
24420
24421 /* Returns true iff cinfo contains a valid set of constraints.
24422 This is the case when the associated requirements have been
24423 successfully decomposed into lists of atomic constraints.
24424 That is, when the saved assumptions are not error_mark_node. */
24425
24426 bool
24427 valid_constraints_p (tree cinfo)
24428 {
24429 gcc_assert (cinfo);
24430 return CI_ASSUMPTIONS (cinfo) != error_mark_node;
24431 }
24432
24433 /* Returns the template constraints of declaration T. If T is not
24434 constrained, return NULL_TREE. Note that T must be non-null. */
24435
24436 tree
24437 get_constraints (tree t)
24438 {
24439 gcc_assert (DECL_P (t));
24440 if (TREE_CODE (t) == TEMPLATE_DECL)
24441 t = DECL_TEMPLATE_RESULT (t);
24442 constr_entry elt = { t, NULL_TREE };
24443 constr_entry* found = decl_constraints->find (&elt);
24444 if (found)
24445 return found->ci;
24446 else
24447 return NULL_TREE;
24448 }
24449
24450 /* Associate the given constraint information CI with the declaration
24451 T. If T is a template, then the constraints are associated with
24452 its underlying declaration. Don't build associations if CI is
24453 NULL_TREE. */
24454
24455 void
24456 set_constraints (tree t, tree ci)
24457 {
24458 if (!ci)
24459 return;
24460 gcc_assert (t);
24461 if (TREE_CODE (t) == TEMPLATE_DECL)
24462 t = DECL_TEMPLATE_RESULT (t);
24463 gcc_assert (!get_constraints (t));
24464 constr_entry elt = {t, ci};
24465 constr_entry** slot = decl_constraints->find_slot (&elt, INSERT);
24466 constr_entry* entry = ggc_alloc<constr_entry> ();
24467 *entry = elt;
24468 *slot = entry;
24469 }
24470
24471 /* Remove the associated constraints of the declaration T. */
24472
24473 void
24474 remove_constraints (tree t)
24475 {
24476 gcc_assert (DECL_P (t));
24477 if (TREE_CODE (t) == TEMPLATE_DECL)
24478 t = DECL_TEMPLATE_RESULT (t);
24479
24480 constr_entry elt = {t, NULL_TREE};
24481 constr_entry** slot = decl_constraints->find_slot (&elt, NO_INSERT);
24482 if (slot)
24483 decl_constraints->clear_slot (slot);
24484 }
24485
24486 /* Set up the hash table for constraint association. */
24487
24488 void
24489 init_constraint_processing (void)
24490 {
24491 decl_constraints = hash_table<constr_hasher>::create_ggc(37);
24492 }
24493
24494 /* Set up the hash tables for template instantiations. */
24495
24496 void
24497 init_template_processing (void)
24498 {
24499 decl_specializations = hash_table<spec_hasher>::create_ggc (37);
24500 type_specializations = hash_table<spec_hasher>::create_ggc (37);
24501 }
24502
24503 /* Print stats about the template hash tables for -fstats. */
24504
24505 void
24506 print_template_statistics (void)
24507 {
24508 fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
24509 "%f collisions\n", (long) decl_specializations->size (),
24510 (long) decl_specializations->elements (),
24511 decl_specializations->collisions ());
24512 fprintf (stderr, "type_specializations: size %ld, %ld elements, "
24513 "%f collisions\n", (long) type_specializations->size (),
24514 (long) type_specializations->elements (),
24515 type_specializations->collisions ());
24516 }
24517
24518 #include "gt-cp-pt.h"