]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/cp/pt.c
move many gc hashtab to hash_table
[thirdparty/gcc.git] / gcc / cp / pt.c
1 /* Handle parameterized types (templates) for GNU -*- C++ -*-.
2 Copyright (C) 1992-2014 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 "tm.h"
31 #include "tree.h"
32 #include "stringpool.h"
33 #include "varasm.h"
34 #include "attribs.h"
35 #include "stor-layout.h"
36 #include "intl.h"
37 #include "flags.h"
38 #include "cp-tree.h"
39 #include "c-family/c-common.h"
40 #include "c-family/c-objc.h"
41 #include "cp-objcp-common.h"
42 #include "tree-inline.h"
43 #include "decl.h"
44 #include "toplev.h"
45 #include "timevar.h"
46 #include "tree-iterator.h"
47 #include "type-utils.h"
48 #include "gimplify.h"
49
50 /* The type of functions taking a tree, and some additional data, and
51 returning an int. */
52 typedef int (*tree_fn_t) (tree, void*);
53
54 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
55 instantiations have been deferred, either because their definitions
56 were not yet available, or because we were putting off doing the work. */
57 struct GTY ((chain_next ("%h.next"))) pending_template {
58 struct pending_template *next;
59 struct tinst_level *tinst;
60 };
61
62 static GTY(()) struct pending_template *pending_templates;
63 static GTY(()) struct pending_template *last_pending_template;
64
65 int processing_template_parmlist;
66 static int template_header_count;
67
68 static GTY(()) tree saved_trees;
69 static vec<int> inline_parm_levels;
70
71 static GTY(()) struct tinst_level *current_tinst_level;
72
73 static GTY(()) tree saved_access_scope;
74
75 /* Live only within one (recursive) call to tsubst_expr. We use
76 this to pass the statement expression node from the STMT_EXPR
77 to the EXPR_STMT that is its result. */
78 static tree cur_stmt_expr;
79
80 /* True if we've recursed into fn_type_unification too many times. */
81 static bool excessive_deduction_depth;
82
83 struct GTY((for_user)) spec_entry
84 {
85 tree tmpl;
86 tree args;
87 tree spec;
88 };
89
90 struct spec_hasher : ggc_hasher<spec_entry *>
91 {
92 static hashval_t hash (spec_entry *);
93 static bool equal (spec_entry *, spec_entry *);
94 };
95
96 static GTY (()) hash_table<spec_hasher> *decl_specializations;
97
98 static GTY (()) hash_table<spec_hasher> *type_specializations;
99
100 /* Contains canonical template parameter types. The vector is indexed by
101 the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
102 TREE_LIST, whose TREE_VALUEs contain the canonical template
103 parameters of various types and levels. */
104 static GTY(()) vec<tree, va_gc> *canonical_template_parms;
105
106 #define UNIFY_ALLOW_NONE 0
107 #define UNIFY_ALLOW_MORE_CV_QUAL 1
108 #define UNIFY_ALLOW_LESS_CV_QUAL 2
109 #define UNIFY_ALLOW_DERIVED 4
110 #define UNIFY_ALLOW_INTEGER 8
111 #define UNIFY_ALLOW_OUTER_LEVEL 16
112 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
113 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
114
115 enum template_base_result {
116 tbr_incomplete_type,
117 tbr_ambiguous_baseclass,
118 tbr_success
119 };
120
121 static void push_access_scope (tree);
122 static void pop_access_scope (tree);
123 static bool resolve_overloaded_unification (tree, tree, tree, tree,
124 unification_kind_t, int,
125 bool);
126 static int try_one_overload (tree, tree, tree, tree, tree,
127 unification_kind_t, int, bool, bool);
128 static int unify (tree, tree, tree, tree, int, bool);
129 static void add_pending_template (tree);
130 static tree reopen_tinst_level (struct tinst_level *);
131 static tree tsubst_initializer_list (tree, tree);
132 static tree get_class_bindings (tree, tree, tree, tree);
133 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
134 bool, bool);
135 static tree coerce_innermost_template_parms (tree, tree, tree, tsubst_flags_t,
136 bool, bool);
137 static void tsubst_enum (tree, tree, tree);
138 static tree add_to_template_args (tree, tree);
139 static tree add_outermost_template_args (tree, tree);
140 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
141 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
142 tree);
143 static int type_unification_real (tree, tree, tree, const tree *,
144 unsigned int, int, unification_kind_t, int,
145 vec<deferred_access_check, va_gc> **,
146 bool);
147 static void note_template_header (int);
148 static tree convert_nontype_argument_function (tree, tree, tsubst_flags_t);
149 static tree convert_nontype_argument (tree, tree, tsubst_flags_t);
150 static tree convert_template_argument (tree, tree, tree,
151 tsubst_flags_t, int, tree);
152 static int for_each_template_parm (tree, tree_fn_t, void*,
153 hash_set<tree> *, bool);
154 static tree expand_template_argument_pack (tree);
155 static tree build_template_parm_index (int, int, int, tree, tree);
156 static bool inline_needs_template_parms (tree, bool);
157 static void push_inline_template_parms_recursive (tree, int);
158 static tree retrieve_local_specialization (tree);
159 static void register_local_specialization (tree, tree);
160 static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
161 static int mark_template_parm (tree, void *);
162 static int template_parm_this_level_p (tree, void *);
163 static tree tsubst_friend_function (tree, tree);
164 static tree tsubst_friend_class (tree, tree);
165 static int can_complete_type_without_circularity (tree);
166 static tree get_bindings (tree, tree, tree, bool);
167 static int template_decl_level (tree);
168 static int check_cv_quals_for_unify (int, tree, tree);
169 static void template_parm_level_and_index (tree, int*, int*);
170 static int unify_pack_expansion (tree, tree, tree,
171 tree, unification_kind_t, bool, bool);
172 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
173 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
174 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
175 static void regenerate_decl_from_template (tree, tree);
176 static tree most_specialized_class (tree, tsubst_flags_t);
177 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
178 static tree tsubst_arg_types (tree, tree, tree, tsubst_flags_t, tree);
179 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
180 static bool check_specialization_scope (void);
181 static tree process_partial_specialization (tree);
182 static void set_current_access_from_decl (tree);
183 static enum template_base_result get_template_base (tree, tree, tree, tree,
184 bool , tree *);
185 static tree try_class_unification (tree, tree, tree, tree, bool);
186 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
187 tree, tree);
188 static bool template_template_parm_bindings_ok_p (tree, tree);
189 static int template_args_equal (tree, tree);
190 static void tsubst_default_arguments (tree, tsubst_flags_t);
191 static tree for_each_template_parm_r (tree *, int *, void *);
192 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
193 static void copy_default_args_to_explicit_spec (tree);
194 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
195 static bool dependent_template_arg_p (tree);
196 static bool any_template_arguments_need_structural_equality_p (tree);
197 static bool dependent_type_p_r (tree);
198 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
199 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
200 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
201 static tree tsubst_decl (tree, tree, tsubst_flags_t);
202 static void perform_typedefs_access_check (tree tmpl, tree targs);
203 static void append_type_to_template_for_access_check_1 (tree, tree, tree,
204 location_t);
205 static tree listify (tree);
206 static tree listify_autos (tree, tree);
207 static tree template_parm_to_arg (tree t);
208 static tree current_template_args (void);
209 static tree tsubst_template_parm (tree, tree, tsubst_flags_t);
210 static tree instantiate_alias_template (tree, tree, tsubst_flags_t);
211
212 /* Make the current scope suitable for access checking when we are
213 processing T. T can be FUNCTION_DECL for instantiated function
214 template, VAR_DECL for static member variable, or TYPE_DECL for
215 alias template (needed by instantiate_decl). */
216
217 static void
218 push_access_scope (tree t)
219 {
220 gcc_assert (VAR_OR_FUNCTION_DECL_P (t)
221 || TREE_CODE (t) == TYPE_DECL);
222
223 if (DECL_FRIEND_CONTEXT (t))
224 push_nested_class (DECL_FRIEND_CONTEXT (t));
225 else if (DECL_CLASS_SCOPE_P (t))
226 push_nested_class (DECL_CONTEXT (t));
227 else
228 push_to_top_level ();
229
230 if (TREE_CODE (t) == FUNCTION_DECL)
231 {
232 saved_access_scope = tree_cons
233 (NULL_TREE, current_function_decl, saved_access_scope);
234 current_function_decl = t;
235 }
236 }
237
238 /* Restore the scope set up by push_access_scope. T is the node we
239 are processing. */
240
241 static void
242 pop_access_scope (tree t)
243 {
244 if (TREE_CODE (t) == FUNCTION_DECL)
245 {
246 current_function_decl = TREE_VALUE (saved_access_scope);
247 saved_access_scope = TREE_CHAIN (saved_access_scope);
248 }
249
250 if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
251 pop_nested_class ();
252 else
253 pop_from_top_level ();
254 }
255
256 /* Do any processing required when DECL (a member template
257 declaration) is finished. Returns the TEMPLATE_DECL corresponding
258 to DECL, unless it is a specialization, in which case the DECL
259 itself is returned. */
260
261 tree
262 finish_member_template_decl (tree decl)
263 {
264 if (decl == error_mark_node)
265 return error_mark_node;
266
267 gcc_assert (DECL_P (decl));
268
269 if (TREE_CODE (decl) == TYPE_DECL)
270 {
271 tree type;
272
273 type = TREE_TYPE (decl);
274 if (type == error_mark_node)
275 return error_mark_node;
276 if (MAYBE_CLASS_TYPE_P (type)
277 && CLASSTYPE_TEMPLATE_INFO (type)
278 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
279 {
280 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
281 check_member_template (tmpl);
282 return tmpl;
283 }
284 return NULL_TREE;
285 }
286 else if (TREE_CODE (decl) == FIELD_DECL)
287 error ("data member %qD cannot be a member template", decl);
288 else if (DECL_TEMPLATE_INFO (decl))
289 {
290 if (!DECL_TEMPLATE_SPECIALIZATION (decl))
291 {
292 check_member_template (DECL_TI_TEMPLATE (decl));
293 return DECL_TI_TEMPLATE (decl);
294 }
295 else
296 return decl;
297 }
298 else
299 error ("invalid member template declaration %qD", decl);
300
301 return error_mark_node;
302 }
303
304 /* Create a template info node. */
305
306 tree
307 build_template_info (tree template_decl, tree template_args)
308 {
309 tree result = make_node (TEMPLATE_INFO);
310 TI_TEMPLATE (result) = template_decl;
311 TI_ARGS (result) = template_args;
312 return result;
313 }
314
315 /* Return the template info node corresponding to T, whatever T is. */
316
317 tree
318 get_template_info (const_tree t)
319 {
320 tree tinfo = NULL_TREE;
321
322 if (!t || t == error_mark_node)
323 return NULL;
324
325 if (TREE_CODE (t) == NAMESPACE_DECL)
326 return NULL;
327
328 if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
329 tinfo = DECL_TEMPLATE_INFO (t);
330
331 if (!tinfo && DECL_IMPLICIT_TYPEDEF_P (t))
332 t = TREE_TYPE (t);
333
334 if (OVERLOAD_TYPE_P (t))
335 tinfo = TYPE_TEMPLATE_INFO (t);
336 else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
337 tinfo = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
338
339 return tinfo;
340 }
341
342 /* Returns the template nesting level of the indicated class TYPE.
343
344 For example, in:
345 template <class T>
346 struct A
347 {
348 template <class U>
349 struct B {};
350 };
351
352 A<T>::B<U> has depth two, while A<T> has depth one.
353 Both A<T>::B<int> and A<int>::B<U> have depth one, if
354 they are instantiations, not specializations.
355
356 This function is guaranteed to return 0 if passed NULL_TREE so
357 that, for example, `template_class_depth (current_class_type)' is
358 always safe. */
359
360 int
361 template_class_depth (tree type)
362 {
363 int depth;
364
365 for (depth = 0;
366 type && TREE_CODE (type) != NAMESPACE_DECL;
367 type = (TREE_CODE (type) == FUNCTION_DECL)
368 ? CP_DECL_CONTEXT (type) : CP_TYPE_CONTEXT (type))
369 {
370 tree tinfo = get_template_info (type);
371
372 if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
373 && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
374 ++depth;
375 }
376
377 return depth;
378 }
379
380 /* Subroutine of maybe_begin_member_template_processing.
381 Returns true if processing DECL needs us to push template parms. */
382
383 static bool
384 inline_needs_template_parms (tree decl, bool nsdmi)
385 {
386 if (!decl || (!nsdmi && ! DECL_TEMPLATE_INFO (decl)))
387 return false;
388
389 return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
390 > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
391 }
392
393 /* Subroutine of maybe_begin_member_template_processing.
394 Push the template parms in PARMS, starting from LEVELS steps into the
395 chain, and ending at the beginning, since template parms are listed
396 innermost first. */
397
398 static void
399 push_inline_template_parms_recursive (tree parmlist, int levels)
400 {
401 tree parms = TREE_VALUE (parmlist);
402 int i;
403
404 if (levels > 1)
405 push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
406
407 ++processing_template_decl;
408 current_template_parms
409 = tree_cons (size_int (processing_template_decl),
410 parms, current_template_parms);
411 TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
412
413 begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
414 NULL);
415 for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
416 {
417 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
418
419 if (error_operand_p (parm))
420 continue;
421
422 gcc_assert (DECL_P (parm));
423
424 switch (TREE_CODE (parm))
425 {
426 case TYPE_DECL:
427 case TEMPLATE_DECL:
428 pushdecl (parm);
429 break;
430
431 case PARM_DECL:
432 {
433 /* Make a CONST_DECL as is done in process_template_parm.
434 It is ugly that we recreate this here; the original
435 version built in process_template_parm is no longer
436 available. */
437 tree decl = build_decl (DECL_SOURCE_LOCATION (parm),
438 CONST_DECL, DECL_NAME (parm),
439 TREE_TYPE (parm));
440 DECL_ARTIFICIAL (decl) = 1;
441 TREE_CONSTANT (decl) = 1;
442 TREE_READONLY (decl) = 1;
443 DECL_INITIAL (decl) = DECL_INITIAL (parm);
444 SET_DECL_TEMPLATE_PARM_P (decl);
445 pushdecl (decl);
446 }
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
660 /* This routine is called when a specialization is declared. If it is
661 invalid to declare a specialization here, an error is reported and
662 false is returned, otherwise this routine will return true. */
663
664 static bool
665 check_specialization_scope (void)
666 {
667 tree scope = current_scope ();
668
669 /* [temp.expl.spec]
670
671 An explicit specialization shall be declared in the namespace of
672 which the template is a member, or, for member templates, in the
673 namespace of which the enclosing class or enclosing class
674 template is a member. An explicit specialization of a member
675 function, member class or static data member of a class template
676 shall be declared in the namespace of which the class template
677 is a member. */
678 if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
679 {
680 error ("explicit specialization in non-namespace scope %qD", scope);
681 return false;
682 }
683
684 /* [temp.expl.spec]
685
686 In an explicit specialization declaration for a member of a class
687 template or a member template that appears in namespace scope,
688 the member template and some of its enclosing class templates may
689 remain unspecialized, except that the declaration shall not
690 explicitly specialize a class member template if its enclosing
691 class templates are not explicitly specialized as well. */
692 if (current_template_parms)
693 {
694 error ("enclosing class templates are not explicitly specialized");
695 return false;
696 }
697
698 return true;
699 }
700
701 /* We've just seen template <>. */
702
703 bool
704 begin_specialization (void)
705 {
706 begin_scope (sk_template_spec, NULL);
707 note_template_header (1);
708 return check_specialization_scope ();
709 }
710
711 /* Called at then end of processing a declaration preceded by
712 template<>. */
713
714 void
715 end_specialization (void)
716 {
717 finish_scope ();
718 reset_specialization ();
719 }
720
721 /* Any template <>'s that we have seen thus far are not referring to a
722 function specialization. */
723
724 void
725 reset_specialization (void)
726 {
727 processing_specialization = 0;
728 template_header_count = 0;
729 }
730
731 /* We've just seen a template header. If SPECIALIZATION is nonzero,
732 it was of the form template <>. */
733
734 static void
735 note_template_header (int specialization)
736 {
737 processing_specialization = specialization;
738 template_header_count++;
739 }
740
741 /* We're beginning an explicit instantiation. */
742
743 void
744 begin_explicit_instantiation (void)
745 {
746 gcc_assert (!processing_explicit_instantiation);
747 processing_explicit_instantiation = true;
748 }
749
750
751 void
752 end_explicit_instantiation (void)
753 {
754 gcc_assert (processing_explicit_instantiation);
755 processing_explicit_instantiation = false;
756 }
757
758 /* An explicit specialization or partial specialization of TMPL is being
759 declared. Check that the namespace in which the specialization is
760 occurring is permissible. Returns false iff it is invalid to
761 specialize TMPL in the current namespace. */
762
763 static bool
764 check_specialization_namespace (tree tmpl)
765 {
766 tree tpl_ns = decl_namespace_context (tmpl);
767
768 /* [tmpl.expl.spec]
769
770 An explicit specialization shall be declared in the namespace of
771 which the template is a member, or, for member templates, in the
772 namespace of which the enclosing class or enclosing class
773 template is a member. An explicit specialization of a member
774 function, member class or static data member of a class template
775 shall be declared in the namespace of which the class template is
776 a member. */
777 if (current_scope() != DECL_CONTEXT (tmpl)
778 && !at_namespace_scope_p ())
779 {
780 error ("specialization of %qD must appear at namespace scope", tmpl);
781 return false;
782 }
783 if (is_associated_namespace (current_namespace, tpl_ns))
784 /* Same or super-using namespace. */
785 return true;
786 else
787 {
788 permerror (input_location, "specialization of %qD in different namespace", tmpl);
789 permerror (input_location, " from definition of %q+#D", tmpl);
790 return false;
791 }
792 }
793
794 /* SPEC is an explicit instantiation. Check that it is valid to
795 perform this explicit instantiation in the current namespace. */
796
797 static void
798 check_explicit_instantiation_namespace (tree spec)
799 {
800 tree ns;
801
802 /* DR 275: An explicit instantiation shall appear in an enclosing
803 namespace of its template. */
804 ns = decl_namespace_context (spec);
805 if (!is_ancestor (current_namespace, ns))
806 permerror (input_location, "explicit instantiation of %qD in namespace %qD "
807 "(which does not enclose namespace %qD)",
808 spec, current_namespace, ns);
809 }
810
811 /* The TYPE is being declared. If it is a template type, that means it
812 is a partial specialization. Do appropriate error-checking. */
813
814 tree
815 maybe_process_partial_specialization (tree type)
816 {
817 tree context;
818
819 if (type == error_mark_node)
820 return error_mark_node;
821
822 /* A lambda that appears in specialization context is not itself a
823 specialization. */
824 if (CLASS_TYPE_P (type) && CLASSTYPE_LAMBDA_EXPR (type))
825 return type;
826
827 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
828 {
829 error ("name of class shadows template template parameter %qD",
830 TYPE_NAME (type));
831 return error_mark_node;
832 }
833
834 context = TYPE_CONTEXT (type);
835
836 if (TYPE_ALIAS_P (type))
837 {
838 if (TYPE_TEMPLATE_INFO (type)
839 && DECL_ALIAS_TEMPLATE_P (TYPE_TI_TEMPLATE (type)))
840 error ("specialization of alias template %qD",
841 TYPE_TI_TEMPLATE (type));
842 else
843 error ("explicit specialization of non-template %qT", type);
844 return error_mark_node;
845 }
846 else if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
847 {
848 /* This is for ordinary explicit specialization and partial
849 specialization of a template class such as:
850
851 template <> class C<int>;
852
853 or:
854
855 template <class T> class C<T*>;
856
857 Make sure that `C<int>' and `C<T*>' are implicit instantiations. */
858
859 if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
860 && !COMPLETE_TYPE_P (type))
861 {
862 if (!check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type))
863 && !at_namespace_scope_p ())
864 return error_mark_node;
865 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
866 DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)) = input_location;
867 if (processing_template_decl)
868 {
869 if (push_template_decl (TYPE_MAIN_DECL (type))
870 == error_mark_node)
871 return error_mark_node;
872 }
873 }
874 else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
875 error ("specialization of %qT after instantiation", type);
876 else if (errorcount && !processing_specialization
877 && CLASSTYPE_TEMPLATE_SPECIALIZATION (type)
878 && !uses_template_parms (CLASSTYPE_TI_ARGS (type)))
879 /* Trying to define a specialization either without a template<> header
880 or in an inappropriate place. We've already given an error, so just
881 bail now so we don't actually define the specialization. */
882 return error_mark_node;
883 }
884 else if (CLASS_TYPE_P (type)
885 && !CLASSTYPE_USE_TEMPLATE (type)
886 && CLASSTYPE_TEMPLATE_INFO (type)
887 && context && CLASS_TYPE_P (context)
888 && CLASSTYPE_TEMPLATE_INFO (context))
889 {
890 /* This is for an explicit specialization of member class
891 template according to [temp.expl.spec/18]:
892
893 template <> template <class U> class C<int>::D;
894
895 The context `C<int>' must be an implicit instantiation.
896 Otherwise this is just a member class template declared
897 earlier like:
898
899 template <> class C<int> { template <class U> class D; };
900 template <> template <class U> class C<int>::D;
901
902 In the first case, `C<int>::D' is a specialization of `C<T>::D'
903 while in the second case, `C<int>::D' is a primary template
904 and `C<T>::D' may not exist. */
905
906 if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
907 && !COMPLETE_TYPE_P (type))
908 {
909 tree t;
910 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
911
912 if (current_namespace
913 != decl_namespace_context (tmpl))
914 {
915 permerror (input_location, "specializing %q#T in different namespace", type);
916 permerror (input_location, " from definition of %q+#D", tmpl);
917 }
918
919 /* Check for invalid specialization after instantiation:
920
921 template <> template <> class C<int>::D<int>;
922 template <> template <class U> class C<int>::D; */
923
924 for (t = DECL_TEMPLATE_INSTANTIATIONS (tmpl);
925 t; t = TREE_CHAIN (t))
926 {
927 tree inst = TREE_VALUE (t);
928 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (inst)
929 || !COMPLETE_OR_OPEN_TYPE_P (inst))
930 {
931 /* We already have a full specialization of this partial
932 instantiation, or a full specialization has been
933 looked up but not instantiated. Reassign it to the
934 new member specialization template. */
935 spec_entry elt;
936 spec_entry *entry;
937
938 elt.tmpl = most_general_template (tmpl);
939 elt.args = CLASSTYPE_TI_ARGS (inst);
940 elt.spec = inst;
941
942 type_specializations->remove_elt (&elt);
943
944 elt.tmpl = tmpl;
945 elt.args = INNERMOST_TEMPLATE_ARGS (elt.args);
946
947 spec_entry **slot
948 = type_specializations->find_slot (&elt, INSERT);
949 entry = ggc_alloc<spec_entry> ();
950 *entry = elt;
951 *slot = entry;
952 }
953 else
954 /* But if we've had an implicit instantiation, that's a
955 problem ([temp.expl.spec]/6). */
956 error ("specialization %qT after instantiation %qT",
957 type, inst);
958 }
959
960 /* Mark TYPE as a specialization. And as a result, we only
961 have one level of template argument for the innermost
962 class template. */
963 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
964 DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)) = input_location;
965 CLASSTYPE_TI_ARGS (type)
966 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
967 }
968 }
969 else if (processing_specialization)
970 {
971 /* Someday C++0x may allow for enum template specialization. */
972 if (cxx_dialect > cxx98 && TREE_CODE (type) == ENUMERAL_TYPE
973 && CLASS_TYPE_P (context) && CLASSTYPE_USE_TEMPLATE (context))
974 pedwarn (input_location, OPT_Wpedantic, "template specialization "
975 "of %qD not allowed by ISO C++", type);
976 else
977 {
978 error ("explicit specialization of non-template %qT", type);
979 return error_mark_node;
980 }
981 }
982
983 return type;
984 }
985
986 /* Returns nonzero if we can optimize the retrieval of specializations
987 for TMPL, a TEMPLATE_DECL. In particular, for such a template, we
988 do not use DECL_TEMPLATE_SPECIALIZATIONS at all. */
989
990 static inline bool
991 optimize_specialization_lookup_p (tree tmpl)
992 {
993 return (DECL_FUNCTION_TEMPLATE_P (tmpl)
994 && DECL_CLASS_SCOPE_P (tmpl)
995 /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
996 parameter. */
997 && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
998 /* The optimized lookup depends on the fact that the
999 template arguments for the member function template apply
1000 purely to the containing class, which is not true if the
1001 containing class is an explicit or partial
1002 specialization. */
1003 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
1004 && !DECL_MEMBER_TEMPLATE_P (tmpl)
1005 && !DECL_CONV_FN_P (tmpl)
1006 /* It is possible to have a template that is not a member
1007 template and is not a member of a template class:
1008
1009 template <typename T>
1010 struct S { friend A::f(); };
1011
1012 Here, the friend function is a template, but the context does
1013 not have template information. The optimized lookup relies
1014 on having ARGS be the template arguments for both the class
1015 and the function template. */
1016 && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
1017 }
1018
1019 /* Retrieve the specialization (in the sense of [temp.spec] - a
1020 specialization is either an instantiation or an explicit
1021 specialization) of TMPL for the given template ARGS. If there is
1022 no such specialization, return NULL_TREE. The ARGS are a vector of
1023 arguments, or a vector of vectors of arguments, in the case of
1024 templates with more than one level of parameters.
1025
1026 If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
1027 then we search for a partial specialization matching ARGS. This
1028 parameter is ignored if TMPL is not a class template.
1029
1030 We can also look up a FIELD_DECL, if it is a lambda capture pack; the
1031 result is a NONTYPE_ARGUMENT_PACK. */
1032
1033 static tree
1034 retrieve_specialization (tree tmpl, tree args, hashval_t hash)
1035 {
1036 if (tmpl == NULL_TREE)
1037 return NULL_TREE;
1038
1039 if (args == error_mark_node)
1040 return NULL_TREE;
1041
1042 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL
1043 || TREE_CODE (tmpl) == FIELD_DECL);
1044
1045 /* There should be as many levels of arguments as there are
1046 levels of parameters. */
1047 gcc_assert (TMPL_ARGS_DEPTH (args)
1048 == (TREE_CODE (tmpl) == TEMPLATE_DECL
1049 ? TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl))
1050 : template_class_depth (DECL_CONTEXT (tmpl))));
1051
1052 if (optimize_specialization_lookup_p (tmpl))
1053 {
1054 tree class_template;
1055 tree class_specialization;
1056 vec<tree, va_gc> *methods;
1057 tree fns;
1058 int idx;
1059
1060 /* The template arguments actually apply to the containing
1061 class. Find the class specialization with those
1062 arguments. */
1063 class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
1064 class_specialization
1065 = retrieve_specialization (class_template, args, 0);
1066 if (!class_specialization)
1067 return NULL_TREE;
1068 /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
1069 for the specialization. */
1070 idx = class_method_index_for_fn (class_specialization, tmpl);
1071 if (idx == -1)
1072 return NULL_TREE;
1073 /* Iterate through the methods with the indicated name, looking
1074 for the one that has an instance of TMPL. */
1075 methods = CLASSTYPE_METHOD_VEC (class_specialization);
1076 for (fns = (*methods)[idx]; fns; fns = OVL_NEXT (fns))
1077 {
1078 tree fn = OVL_CURRENT (fns);
1079 if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl
1080 /* using-declarations can add base methods to the method vec,
1081 and we don't want those here. */
1082 && DECL_CONTEXT (fn) == class_specialization)
1083 return fn;
1084 }
1085 return NULL_TREE;
1086 }
1087 else
1088 {
1089 spec_entry *found;
1090 spec_entry elt;
1091 hash_table<spec_hasher> *specializations;
1092
1093 elt.tmpl = tmpl;
1094 elt.args = args;
1095 elt.spec = NULL_TREE;
1096
1097 if (DECL_CLASS_TEMPLATE_P (tmpl))
1098 specializations = type_specializations;
1099 else
1100 specializations = decl_specializations;
1101
1102 if (hash == 0)
1103 hash = spec_hasher::hash (&elt);
1104 found = specializations->find_with_hash (&elt, hash);
1105 if (found)
1106 return found->spec;
1107 }
1108
1109 return NULL_TREE;
1110 }
1111
1112 /* Like retrieve_specialization, but for local declarations. */
1113
1114 static tree
1115 retrieve_local_specialization (tree tmpl)
1116 {
1117 if (local_specializations == NULL)
1118 return NULL_TREE;
1119
1120 tree *slot = local_specializations->get (tmpl);
1121 return slot ? *slot : NULL_TREE;
1122 }
1123
1124 /* Returns nonzero iff DECL is a specialization of TMPL. */
1125
1126 int
1127 is_specialization_of (tree decl, tree tmpl)
1128 {
1129 tree t;
1130
1131 if (TREE_CODE (decl) == FUNCTION_DECL)
1132 {
1133 for (t = decl;
1134 t != NULL_TREE;
1135 t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1136 if (t == tmpl)
1137 return 1;
1138 }
1139 else
1140 {
1141 gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1142
1143 for (t = TREE_TYPE (decl);
1144 t != NULL_TREE;
1145 t = CLASSTYPE_USE_TEMPLATE (t)
1146 ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1147 if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1148 return 1;
1149 }
1150
1151 return 0;
1152 }
1153
1154 /* Returns nonzero iff DECL is a specialization of friend declaration
1155 FRIEND_DECL according to [temp.friend]. */
1156
1157 bool
1158 is_specialization_of_friend (tree decl, tree friend_decl)
1159 {
1160 bool need_template = true;
1161 int template_depth;
1162
1163 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1164 || TREE_CODE (decl) == TYPE_DECL);
1165
1166 /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1167 of a template class, we want to check if DECL is a specialization
1168 if this. */
1169 if (TREE_CODE (friend_decl) == FUNCTION_DECL
1170 && DECL_TEMPLATE_INFO (friend_decl)
1171 && !DECL_USE_TEMPLATE (friend_decl))
1172 {
1173 /* We want a TEMPLATE_DECL for `is_specialization_of'. */
1174 friend_decl = DECL_TI_TEMPLATE (friend_decl);
1175 need_template = false;
1176 }
1177 else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1178 && !PRIMARY_TEMPLATE_P (friend_decl))
1179 need_template = false;
1180
1181 /* There is nothing to do if this is not a template friend. */
1182 if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1183 return false;
1184
1185 if (is_specialization_of (decl, friend_decl))
1186 return true;
1187
1188 /* [temp.friend/6]
1189 A member of a class template may be declared to be a friend of a
1190 non-template class. In this case, the corresponding member of
1191 every specialization of the class template is a friend of the
1192 class granting friendship.
1193
1194 For example, given a template friend declaration
1195
1196 template <class T> friend void A<T>::f();
1197
1198 the member function below is considered a friend
1199
1200 template <> struct A<int> {
1201 void f();
1202 };
1203
1204 For this type of template friend, TEMPLATE_DEPTH below will be
1205 nonzero. To determine if DECL is a friend of FRIEND, we first
1206 check if the enclosing class is a specialization of another. */
1207
1208 template_depth = template_class_depth (CP_DECL_CONTEXT (friend_decl));
1209 if (template_depth
1210 && DECL_CLASS_SCOPE_P (decl)
1211 && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1212 CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1213 {
1214 /* Next, we check the members themselves. In order to handle
1215 a few tricky cases, such as when FRIEND_DECL's are
1216
1217 template <class T> friend void A<T>::g(T t);
1218 template <class T> template <T t> friend void A<T>::h();
1219
1220 and DECL's are
1221
1222 void A<int>::g(int);
1223 template <int> void A<int>::h();
1224
1225 we need to figure out ARGS, the template arguments from
1226 the context of DECL. This is required for template substitution
1227 of `T' in the function parameter of `g' and template parameter
1228 of `h' in the above examples. Here ARGS corresponds to `int'. */
1229
1230 tree context = DECL_CONTEXT (decl);
1231 tree args = NULL_TREE;
1232 int current_depth = 0;
1233
1234 while (current_depth < template_depth)
1235 {
1236 if (CLASSTYPE_TEMPLATE_INFO (context))
1237 {
1238 if (current_depth == 0)
1239 args = TYPE_TI_ARGS (context);
1240 else
1241 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1242 current_depth++;
1243 }
1244 context = TYPE_CONTEXT (context);
1245 }
1246
1247 if (TREE_CODE (decl) == FUNCTION_DECL)
1248 {
1249 bool is_template;
1250 tree friend_type;
1251 tree decl_type;
1252 tree friend_args_type;
1253 tree decl_args_type;
1254
1255 /* Make sure that both DECL and FRIEND_DECL are templates or
1256 non-templates. */
1257 is_template = DECL_TEMPLATE_INFO (decl)
1258 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1259 if (need_template ^ is_template)
1260 return false;
1261 else if (is_template)
1262 {
1263 /* If both are templates, check template parameter list. */
1264 tree friend_parms
1265 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1266 args, tf_none);
1267 if (!comp_template_parms
1268 (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1269 friend_parms))
1270 return false;
1271
1272 decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1273 }
1274 else
1275 decl_type = TREE_TYPE (decl);
1276
1277 friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1278 tf_none, NULL_TREE);
1279 if (friend_type == error_mark_node)
1280 return false;
1281
1282 /* Check if return types match. */
1283 if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1284 return false;
1285
1286 /* Check if function parameter types match, ignoring the
1287 `this' parameter. */
1288 friend_args_type = TYPE_ARG_TYPES (friend_type);
1289 decl_args_type = TYPE_ARG_TYPES (decl_type);
1290 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1291 friend_args_type = TREE_CHAIN (friend_args_type);
1292 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1293 decl_args_type = TREE_CHAIN (decl_args_type);
1294
1295 return compparms (decl_args_type, friend_args_type);
1296 }
1297 else
1298 {
1299 /* DECL is a TYPE_DECL */
1300 bool is_template;
1301 tree decl_type = TREE_TYPE (decl);
1302
1303 /* Make sure that both DECL and FRIEND_DECL are templates or
1304 non-templates. */
1305 is_template
1306 = CLASSTYPE_TEMPLATE_INFO (decl_type)
1307 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1308
1309 if (need_template ^ is_template)
1310 return false;
1311 else if (is_template)
1312 {
1313 tree friend_parms;
1314 /* If both are templates, check the name of the two
1315 TEMPLATE_DECL's first because is_friend didn't. */
1316 if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1317 != DECL_NAME (friend_decl))
1318 return false;
1319
1320 /* Now check template parameter list. */
1321 friend_parms
1322 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1323 args, tf_none);
1324 return comp_template_parms
1325 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1326 friend_parms);
1327 }
1328 else
1329 return (DECL_NAME (decl)
1330 == DECL_NAME (friend_decl));
1331 }
1332 }
1333 return false;
1334 }
1335
1336 /* Register the specialization SPEC as a specialization of TMPL with
1337 the indicated ARGS. IS_FRIEND indicates whether the specialization
1338 is actually just a friend declaration. Returns SPEC, or an
1339 equivalent prior declaration, if available.
1340
1341 We also store instantiations of field packs in the hash table, even
1342 though they are not themselves templates, to make lookup easier. */
1343
1344 static tree
1345 register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
1346 hashval_t hash)
1347 {
1348 tree fn;
1349 spec_entry **slot = NULL;
1350 spec_entry elt;
1351
1352 gcc_assert ((TREE_CODE (tmpl) == TEMPLATE_DECL && DECL_P (spec))
1353 || (TREE_CODE (tmpl) == FIELD_DECL
1354 && TREE_CODE (spec) == NONTYPE_ARGUMENT_PACK));
1355
1356 if (TREE_CODE (spec) == FUNCTION_DECL
1357 && uses_template_parms (DECL_TI_ARGS (spec)))
1358 /* This is the FUNCTION_DECL for a partial instantiation. Don't
1359 register it; we want the corresponding TEMPLATE_DECL instead.
1360 We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1361 the more obvious `uses_template_parms (spec)' to avoid problems
1362 with default function arguments. In particular, given
1363 something like this:
1364
1365 template <class T> void f(T t1, T t = T())
1366
1367 the default argument expression is not substituted for in an
1368 instantiation unless and until it is actually needed. */
1369 return spec;
1370
1371 if (optimize_specialization_lookup_p (tmpl))
1372 /* We don't put these specializations in the hash table, but we might
1373 want to give an error about a mismatch. */
1374 fn = retrieve_specialization (tmpl, args, 0);
1375 else
1376 {
1377 elt.tmpl = tmpl;
1378 elt.args = args;
1379 elt.spec = spec;
1380
1381 if (hash == 0)
1382 hash = spec_hasher::hash (&elt);
1383
1384 slot =
1385 decl_specializations->find_slot_with_hash (&elt, hash, INSERT);
1386 if (*slot)
1387 fn = ((spec_entry *) *slot)->spec;
1388 else
1389 fn = NULL_TREE;
1390 }
1391
1392 /* We can sometimes try to re-register a specialization that we've
1393 already got. In particular, regenerate_decl_from_template calls
1394 duplicate_decls which will update the specialization list. But,
1395 we'll still get called again here anyhow. It's more convenient
1396 to simply allow this than to try to prevent it. */
1397 if (fn == spec)
1398 return spec;
1399 else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1400 {
1401 if (DECL_TEMPLATE_INSTANTIATION (fn))
1402 {
1403 if (DECL_ODR_USED (fn)
1404 || DECL_EXPLICIT_INSTANTIATION (fn))
1405 {
1406 error ("specialization of %qD after instantiation",
1407 fn);
1408 return error_mark_node;
1409 }
1410 else
1411 {
1412 tree clone;
1413 /* This situation should occur only if the first
1414 specialization is an implicit instantiation, the
1415 second is an explicit specialization, and the
1416 implicit instantiation has not yet been used. That
1417 situation can occur if we have implicitly
1418 instantiated a member function and then specialized
1419 it later.
1420
1421 We can also wind up here if a friend declaration that
1422 looked like an instantiation turns out to be a
1423 specialization:
1424
1425 template <class T> void foo(T);
1426 class S { friend void foo<>(int) };
1427 template <> void foo(int);
1428
1429 We transform the existing DECL in place so that any
1430 pointers to it become pointers to the updated
1431 declaration.
1432
1433 If there was a definition for the template, but not
1434 for the specialization, we want this to look as if
1435 there were no definition, and vice versa. */
1436 DECL_INITIAL (fn) = NULL_TREE;
1437 duplicate_decls (spec, fn, is_friend);
1438 /* The call to duplicate_decls will have applied
1439 [temp.expl.spec]:
1440
1441 An explicit specialization of a function template
1442 is inline only if it is explicitly declared to be,
1443 and independently of whether its function template
1444 is.
1445
1446 to the primary function; now copy the inline bits to
1447 the various clones. */
1448 FOR_EACH_CLONE (clone, fn)
1449 {
1450 DECL_DECLARED_INLINE_P (clone)
1451 = DECL_DECLARED_INLINE_P (fn);
1452 DECL_SOURCE_LOCATION (clone)
1453 = DECL_SOURCE_LOCATION (fn);
1454 DECL_DELETED_FN (clone)
1455 = DECL_DELETED_FN (fn);
1456 }
1457 check_specialization_namespace (tmpl);
1458
1459 return fn;
1460 }
1461 }
1462 else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1463 {
1464 if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1465 /* Dup decl failed, but this is a new definition. Set the
1466 line number so any errors match this new
1467 definition. */
1468 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1469
1470 return fn;
1471 }
1472 }
1473 else if (fn)
1474 return duplicate_decls (spec, fn, is_friend);
1475
1476 /* A specialization must be declared in the same namespace as the
1477 template it is specializing. */
1478 if (DECL_P (spec) && DECL_TEMPLATE_SPECIALIZATION (spec)
1479 && !check_specialization_namespace (tmpl))
1480 DECL_CONTEXT (spec) = DECL_CONTEXT (tmpl);
1481
1482 if (slot != NULL /* !optimize_specialization_lookup_p (tmpl) */)
1483 {
1484 spec_entry *entry = ggc_alloc<spec_entry> ();
1485 gcc_assert (tmpl && args && spec);
1486 *entry = elt;
1487 *slot = entry;
1488 if (TREE_CODE (spec) == FUNCTION_DECL && DECL_NAMESPACE_SCOPE_P (spec)
1489 && PRIMARY_TEMPLATE_P (tmpl)
1490 && DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (tmpl)) == NULL_TREE)
1491 /* TMPL is a forward declaration of a template function; keep a list
1492 of all specializations in case we need to reassign them to a friend
1493 template later in tsubst_friend_function. */
1494 DECL_TEMPLATE_INSTANTIATIONS (tmpl)
1495 = tree_cons (args, spec, DECL_TEMPLATE_INSTANTIATIONS (tmpl));
1496 }
1497
1498 return spec;
1499 }
1500
1501 /* Returns true iff two spec_entry nodes are equivalent. Only compares the
1502 TMPL and ARGS members, ignores SPEC. */
1503
1504 int comparing_specializations;
1505
1506 bool
1507 spec_hasher::equal (spec_entry *e1, spec_entry *e2)
1508 {
1509 int equal;
1510
1511 ++comparing_specializations;
1512 equal = (e1->tmpl == e2->tmpl
1513 && comp_template_args (e1->args, e2->args));
1514 --comparing_specializations;
1515
1516 return equal;
1517 }
1518
1519 /* Returns a hash for a template TMPL and template arguments ARGS. */
1520
1521 static hashval_t
1522 hash_tmpl_and_args (tree tmpl, tree args)
1523 {
1524 hashval_t val = DECL_UID (tmpl);
1525 return iterative_hash_template_arg (args, val);
1526 }
1527
1528 /* Returns a hash for a spec_entry node based on the TMPL and ARGS members,
1529 ignoring SPEC. */
1530
1531 hashval_t
1532 spec_hasher::hash (spec_entry *e)
1533 {
1534 return hash_tmpl_and_args (e->tmpl, e->args);
1535 }
1536
1537 /* Recursively calculate a hash value for a template argument ARG, for use
1538 in the hash tables of template specializations. */
1539
1540 hashval_t
1541 iterative_hash_template_arg (tree arg, hashval_t val)
1542 {
1543 unsigned HOST_WIDE_INT i;
1544 enum tree_code code;
1545 char tclass;
1546
1547 if (arg == NULL_TREE)
1548 return iterative_hash_object (arg, val);
1549
1550 if (!TYPE_P (arg))
1551 STRIP_NOPS (arg);
1552
1553 if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
1554 /* We can get one of these when re-hashing a previous entry in the middle
1555 of substituting into a pack expansion. Just look through it. */
1556 arg = ARGUMENT_PACK_SELECT_FROM_PACK (arg);
1557
1558 code = TREE_CODE (arg);
1559 tclass = TREE_CODE_CLASS (code);
1560
1561 val = iterative_hash_object (code, val);
1562
1563 switch (code)
1564 {
1565 case ERROR_MARK:
1566 return val;
1567
1568 case IDENTIFIER_NODE:
1569 return iterative_hash_object (IDENTIFIER_HASH_VALUE (arg), val);
1570
1571 case TREE_VEC:
1572 {
1573 int i, len = TREE_VEC_LENGTH (arg);
1574 for (i = 0; i < len; ++i)
1575 val = iterative_hash_template_arg (TREE_VEC_ELT (arg, i), val);
1576 return val;
1577 }
1578
1579 case TYPE_PACK_EXPANSION:
1580 case EXPR_PACK_EXPANSION:
1581 val = iterative_hash_template_arg (PACK_EXPANSION_PATTERN (arg), val);
1582 return iterative_hash_template_arg (PACK_EXPANSION_EXTRA_ARGS (arg), val);
1583
1584 case TYPE_ARGUMENT_PACK:
1585 case NONTYPE_ARGUMENT_PACK:
1586 return iterative_hash_template_arg (ARGUMENT_PACK_ARGS (arg), val);
1587
1588 case TREE_LIST:
1589 for (; arg; arg = TREE_CHAIN (arg))
1590 val = iterative_hash_template_arg (TREE_VALUE (arg), val);
1591 return val;
1592
1593 case OVERLOAD:
1594 for (; arg; arg = OVL_NEXT (arg))
1595 val = iterative_hash_template_arg (OVL_CURRENT (arg), val);
1596 return val;
1597
1598 case CONSTRUCTOR:
1599 {
1600 tree field, value;
1601 iterative_hash_template_arg (TREE_TYPE (arg), val);
1602 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (arg), i, field, value)
1603 {
1604 val = iterative_hash_template_arg (field, val);
1605 val = iterative_hash_template_arg (value, val);
1606 }
1607 return val;
1608 }
1609
1610 case PARM_DECL:
1611 if (!DECL_ARTIFICIAL (arg))
1612 {
1613 val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
1614 val = iterative_hash_object (DECL_PARM_LEVEL (arg), val);
1615 }
1616 return iterative_hash_template_arg (TREE_TYPE (arg), val);
1617
1618 case TARGET_EXPR:
1619 return iterative_hash_template_arg (TARGET_EXPR_INITIAL (arg), val);
1620
1621 case PTRMEM_CST:
1622 val = iterative_hash_template_arg (PTRMEM_CST_CLASS (arg), val);
1623 return iterative_hash_template_arg (PTRMEM_CST_MEMBER (arg), val);
1624
1625 case TEMPLATE_PARM_INDEX:
1626 val = iterative_hash_template_arg
1627 (TREE_TYPE (TEMPLATE_PARM_DECL (arg)), val);
1628 val = iterative_hash_object (TEMPLATE_PARM_LEVEL (arg), val);
1629 return iterative_hash_object (TEMPLATE_PARM_IDX (arg), val);
1630
1631 case TRAIT_EXPR:
1632 val = iterative_hash_object (TRAIT_EXPR_KIND (arg), val);
1633 val = iterative_hash_template_arg (TRAIT_EXPR_TYPE1 (arg), val);
1634 return iterative_hash_template_arg (TRAIT_EXPR_TYPE2 (arg), val);
1635
1636 case BASELINK:
1637 val = iterative_hash_template_arg (BINFO_TYPE (BASELINK_BINFO (arg)),
1638 val);
1639 return iterative_hash_template_arg (DECL_NAME (get_first_fn (arg)),
1640 val);
1641
1642 case MODOP_EXPR:
1643 val = iterative_hash_template_arg (TREE_OPERAND (arg, 0), val);
1644 code = TREE_CODE (TREE_OPERAND (arg, 1));
1645 val = iterative_hash_object (code, val);
1646 return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
1647
1648 case LAMBDA_EXPR:
1649 /* A lambda can't appear in a template arg, but don't crash on
1650 erroneous input. */
1651 gcc_assert (seen_error ());
1652 return val;
1653
1654 case CAST_EXPR:
1655 case IMPLICIT_CONV_EXPR:
1656 case STATIC_CAST_EXPR:
1657 case REINTERPRET_CAST_EXPR:
1658 case CONST_CAST_EXPR:
1659 case DYNAMIC_CAST_EXPR:
1660 case NEW_EXPR:
1661 val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1662 /* Now hash operands as usual. */
1663 break;
1664
1665 default:
1666 break;
1667 }
1668
1669 switch (tclass)
1670 {
1671 case tcc_type:
1672 if (TYPE_CANONICAL (arg))
1673 return iterative_hash_object (TYPE_HASH (TYPE_CANONICAL (arg)),
1674 val);
1675 else if (TREE_CODE (arg) == DECLTYPE_TYPE)
1676 return iterative_hash_template_arg (DECLTYPE_TYPE_EXPR (arg), val);
1677 /* Otherwise just compare the types during lookup. */
1678 return val;
1679
1680 case tcc_declaration:
1681 case tcc_constant:
1682 return iterative_hash_expr (arg, val);
1683
1684 default:
1685 gcc_assert (IS_EXPR_CODE_CLASS (tclass));
1686 {
1687 unsigned n = cp_tree_operand_length (arg);
1688 for (i = 0; i < n; ++i)
1689 val = iterative_hash_template_arg (TREE_OPERAND (arg, i), val);
1690 return val;
1691 }
1692 }
1693 gcc_unreachable ();
1694 return 0;
1695 }
1696
1697 /* Unregister the specialization SPEC as a specialization of TMPL.
1698 Replace it with NEW_SPEC, if NEW_SPEC is non-NULL. Returns true
1699 if the SPEC was listed as a specialization of TMPL.
1700
1701 Note that SPEC has been ggc_freed, so we can't look inside it. */
1702
1703 bool
1704 reregister_specialization (tree spec, tree tinfo, tree new_spec)
1705 {
1706 spec_entry *entry;
1707 spec_entry elt;
1708
1709 elt.tmpl = most_general_template (TI_TEMPLATE (tinfo));
1710 elt.args = TI_ARGS (tinfo);
1711 elt.spec = NULL_TREE;
1712
1713 entry = decl_specializations->find (&elt);
1714 if (entry != NULL)
1715 {
1716 gcc_assert (entry->spec == spec || entry->spec == new_spec);
1717 gcc_assert (new_spec != NULL_TREE);
1718 entry->spec = new_spec;
1719 return 1;
1720 }
1721
1722 return 0;
1723 }
1724
1725 /* Like register_specialization, but for local declarations. We are
1726 registering SPEC, an instantiation of TMPL. */
1727
1728 static void
1729 register_local_specialization (tree spec, tree tmpl)
1730 {
1731 local_specializations->put (tmpl, spec);
1732 }
1733
1734 /* TYPE is a class type. Returns true if TYPE is an explicitly
1735 specialized class. */
1736
1737 bool
1738 explicit_class_specialization_p (tree type)
1739 {
1740 if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1741 return false;
1742 return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1743 }
1744
1745 /* Print the list of functions at FNS, going through all the overloads
1746 for each element of the list. Alternatively, FNS can not be a
1747 TREE_LIST, in which case it will be printed together with all the
1748 overloads.
1749
1750 MORE and *STR should respectively be FALSE and NULL when the function
1751 is called from the outside. They are used internally on recursive
1752 calls. print_candidates manages the two parameters and leaves NULL
1753 in *STR when it ends. */
1754
1755 static void
1756 print_candidates_1 (tree fns, bool more, const char **str)
1757 {
1758 tree fn, fn2;
1759 char *spaces = NULL;
1760
1761 for (fn = fns; fn; fn = OVL_NEXT (fn))
1762 if (TREE_CODE (fn) == TREE_LIST)
1763 {
1764 for (fn2 = fn; fn2 != NULL_TREE; fn2 = TREE_CHAIN (fn2))
1765 print_candidates_1 (TREE_VALUE (fn2),
1766 TREE_CHAIN (fn2) || more, str);
1767 }
1768 else
1769 {
1770 tree cand = OVL_CURRENT (fn);
1771 if (!*str)
1772 {
1773 /* Pick the prefix string. */
1774 if (!more && !OVL_NEXT (fns))
1775 {
1776 inform (DECL_SOURCE_LOCATION (cand),
1777 "candidate is: %#D", cand);
1778 continue;
1779 }
1780
1781 *str = _("candidates are:");
1782 spaces = get_spaces (*str);
1783 }
1784 inform (DECL_SOURCE_LOCATION (cand), "%s %#D", *str, cand);
1785 *str = spaces ? spaces : *str;
1786 }
1787
1788 if (!more)
1789 {
1790 free (spaces);
1791 *str = NULL;
1792 }
1793 }
1794
1795 /* Print the list of candidate FNS in an error message. FNS can also
1796 be a TREE_LIST of non-functions in the case of an ambiguous lookup. */
1797
1798 void
1799 print_candidates (tree fns)
1800 {
1801 const char *str = NULL;
1802 print_candidates_1 (fns, false, &str);
1803 gcc_assert (str == NULL);
1804 }
1805
1806 /* Returns the template (one of the functions given by TEMPLATE_ID)
1807 which can be specialized to match the indicated DECL with the
1808 explicit template args given in TEMPLATE_ID. The DECL may be
1809 NULL_TREE if none is available. In that case, the functions in
1810 TEMPLATE_ID are non-members.
1811
1812 If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1813 specialization of a member template.
1814
1815 The TEMPLATE_COUNT is the number of references to qualifying
1816 template classes that appeared in the name of the function. See
1817 check_explicit_specialization for a more accurate description.
1818
1819 TSK indicates what kind of template declaration (if any) is being
1820 declared. TSK_TEMPLATE indicates that the declaration given by
1821 DECL, though a FUNCTION_DECL, has template parameters, and is
1822 therefore a template function.
1823
1824 The template args (those explicitly specified and those deduced)
1825 are output in a newly created vector *TARGS_OUT.
1826
1827 If it is impossible to determine the result, an error message is
1828 issued. The error_mark_node is returned to indicate failure. */
1829
1830 static tree
1831 determine_specialization (tree template_id,
1832 tree decl,
1833 tree* targs_out,
1834 int need_member_template,
1835 int template_count,
1836 tmpl_spec_kind tsk)
1837 {
1838 tree fns;
1839 tree targs;
1840 tree explicit_targs;
1841 tree candidates = NULL_TREE;
1842 /* A TREE_LIST of templates of which DECL may be a specialization.
1843 The TREE_VALUE of each node is a TEMPLATE_DECL. The
1844 corresponding TREE_PURPOSE is the set of template arguments that,
1845 when used to instantiate the template, would produce a function
1846 with the signature of DECL. */
1847 tree templates = NULL_TREE;
1848 int header_count;
1849 cp_binding_level *b;
1850
1851 *targs_out = NULL_TREE;
1852
1853 if (template_id == error_mark_node || decl == error_mark_node)
1854 return error_mark_node;
1855
1856 /* We shouldn't be specializing a member template of an
1857 unspecialized class template; we already gave an error in
1858 check_specialization_scope, now avoid crashing. */
1859 if (template_count && DECL_CLASS_SCOPE_P (decl)
1860 && template_class_depth (DECL_CONTEXT (decl)) > 0)
1861 {
1862 gcc_assert (errorcount);
1863 return error_mark_node;
1864 }
1865
1866 fns = TREE_OPERAND (template_id, 0);
1867 explicit_targs = TREE_OPERAND (template_id, 1);
1868
1869 if (fns == error_mark_node)
1870 return error_mark_node;
1871
1872 /* Check for baselinks. */
1873 if (BASELINK_P (fns))
1874 fns = BASELINK_FUNCTIONS (fns);
1875
1876 if (TREE_CODE (decl) == FUNCTION_DECL && !is_overloaded_fn (fns))
1877 {
1878 error ("%qD is not a function template", fns);
1879 return error_mark_node;
1880 }
1881 else if (VAR_P (decl) && !variable_template_p (fns))
1882 {
1883 error ("%qD is not a variable template", fns);
1884 return error_mark_node;
1885 }
1886
1887 /* Count the number of template headers specified for this
1888 specialization. */
1889 header_count = 0;
1890 for (b = current_binding_level;
1891 b->kind == sk_template_parms;
1892 b = b->level_chain)
1893 ++header_count;
1894
1895 if (variable_template_p (fns))
1896 templates = tree_cons (explicit_targs, fns, templates);
1897 else for (; fns; fns = OVL_NEXT (fns))
1898 {
1899 tree fn = OVL_CURRENT (fns);
1900
1901 if (TREE_CODE (fn) == TEMPLATE_DECL)
1902 {
1903 tree decl_arg_types;
1904 tree fn_arg_types;
1905 tree insttype;
1906
1907 /* In case of explicit specialization, we need to check if
1908 the number of template headers appearing in the specialization
1909 is correct. This is usually done in check_explicit_specialization,
1910 but the check done there cannot be exhaustive when specializing
1911 member functions. Consider the following code:
1912
1913 template <> void A<int>::f(int);
1914 template <> template <> void A<int>::f(int);
1915
1916 Assuming that A<int> is not itself an explicit specialization
1917 already, the first line specializes "f" which is a non-template
1918 member function, whilst the second line specializes "f" which
1919 is a template member function. So both lines are syntactically
1920 correct, and check_explicit_specialization does not reject
1921 them.
1922
1923 Here, we can do better, as we are matching the specialization
1924 against the declarations. We count the number of template
1925 headers, and we check if they match TEMPLATE_COUNT + 1
1926 (TEMPLATE_COUNT is the number of qualifying template classes,
1927 plus there must be another header for the member template
1928 itself).
1929
1930 Notice that if header_count is zero, this is not a
1931 specialization but rather a template instantiation, so there
1932 is no check we can perform here. */
1933 if (header_count && header_count != template_count + 1)
1934 continue;
1935
1936 /* Check that the number of template arguments at the
1937 innermost level for DECL is the same as for FN. */
1938 if (current_binding_level->kind == sk_template_parms
1939 && !current_binding_level->explicit_spec_p
1940 && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1941 != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1942 (current_template_parms))))
1943 continue;
1944
1945 /* DECL might be a specialization of FN. */
1946 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1947 fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1948
1949 /* For a non-static member function, we need to make sure
1950 that the const qualification is the same. Since
1951 get_bindings does not try to merge the "this" parameter,
1952 we must do the comparison explicitly. */
1953 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1954 && !same_type_p (TREE_VALUE (fn_arg_types),
1955 TREE_VALUE (decl_arg_types)))
1956 continue;
1957
1958 /* Skip the "this" parameter and, for constructors of
1959 classes with virtual bases, the VTT parameter. A
1960 full specialization of a constructor will have a VTT
1961 parameter, but a template never will. */
1962 decl_arg_types
1963 = skip_artificial_parms_for (decl, decl_arg_types);
1964 fn_arg_types
1965 = skip_artificial_parms_for (fn, fn_arg_types);
1966
1967 /* Function templates cannot be specializations; there are
1968 no partial specializations of functions. Therefore, if
1969 the type of DECL does not match FN, there is no
1970 match. */
1971 if (tsk == tsk_template)
1972 {
1973 if (compparms (fn_arg_types, decl_arg_types))
1974 candidates = tree_cons (NULL_TREE, fn, candidates);
1975 continue;
1976 }
1977
1978 /* See whether this function might be a specialization of this
1979 template. Suppress access control because we might be trying
1980 to make this specialization a friend, and we have already done
1981 access control for the declaration of the specialization. */
1982 push_deferring_access_checks (dk_no_check);
1983 targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1984 pop_deferring_access_checks ();
1985
1986 if (!targs)
1987 /* We cannot deduce template arguments that when used to
1988 specialize TMPL will produce DECL. */
1989 continue;
1990
1991 /* Make sure that the deduced arguments actually work. */
1992 insttype = tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE);
1993 if (insttype == error_mark_node)
1994 continue;
1995 fn_arg_types
1996 = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (insttype));
1997 if (!compparms (fn_arg_types, decl_arg_types))
1998 continue;
1999
2000 /* Save this template, and the arguments deduced. */
2001 templates = tree_cons (targs, fn, templates);
2002 }
2003 else if (need_member_template)
2004 /* FN is an ordinary member function, and we need a
2005 specialization of a member template. */
2006 ;
2007 else if (TREE_CODE (fn) != FUNCTION_DECL)
2008 /* We can get IDENTIFIER_NODEs here in certain erroneous
2009 cases. */
2010 ;
2011 else if (!DECL_FUNCTION_MEMBER_P (fn))
2012 /* This is just an ordinary non-member function. Nothing can
2013 be a specialization of that. */
2014 ;
2015 else if (DECL_ARTIFICIAL (fn))
2016 /* Cannot specialize functions that are created implicitly. */
2017 ;
2018 else
2019 {
2020 tree decl_arg_types;
2021
2022 /* This is an ordinary member function. However, since
2023 we're here, we can assume its enclosing class is a
2024 template class. For example,
2025
2026 template <typename T> struct S { void f(); };
2027 template <> void S<int>::f() {}
2028
2029 Here, S<int>::f is a non-template, but S<int> is a
2030 template class. If FN has the same type as DECL, we
2031 might be in business. */
2032
2033 if (!DECL_TEMPLATE_INFO (fn))
2034 /* Its enclosing class is an explicit specialization
2035 of a template class. This is not a candidate. */
2036 continue;
2037
2038 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
2039 TREE_TYPE (TREE_TYPE (fn))))
2040 /* The return types differ. */
2041 continue;
2042
2043 /* Adjust the type of DECL in case FN is a static member. */
2044 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
2045 if (DECL_STATIC_FUNCTION_P (fn)
2046 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2047 decl_arg_types = TREE_CHAIN (decl_arg_types);
2048
2049 if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
2050 decl_arg_types))
2051 /* They match! */
2052 candidates = tree_cons (NULL_TREE, fn, candidates);
2053 }
2054 }
2055
2056 if (templates && TREE_CHAIN (templates))
2057 {
2058 /* We have:
2059
2060 [temp.expl.spec]
2061
2062 It is possible for a specialization with a given function
2063 signature to be instantiated from more than one function
2064 template. In such cases, explicit specification of the
2065 template arguments must be used to uniquely identify the
2066 function template specialization being specialized.
2067
2068 Note that here, there's no suggestion that we're supposed to
2069 determine which of the candidate templates is most
2070 specialized. However, we, also have:
2071
2072 [temp.func.order]
2073
2074 Partial ordering of overloaded function template
2075 declarations is used in the following contexts to select
2076 the function template to which a function template
2077 specialization refers:
2078
2079 -- when an explicit specialization refers to a function
2080 template.
2081
2082 So, we do use the partial ordering rules, at least for now.
2083 This extension can only serve to make invalid programs valid,
2084 so it's safe. And, there is strong anecdotal evidence that
2085 the committee intended the partial ordering rules to apply;
2086 the EDG front end has that behavior, and John Spicer claims
2087 that the committee simply forgot to delete the wording in
2088 [temp.expl.spec]. */
2089 tree tmpl = most_specialized_instantiation (templates);
2090 if (tmpl != error_mark_node)
2091 {
2092 templates = tmpl;
2093 TREE_CHAIN (templates) = NULL_TREE;
2094 }
2095 }
2096
2097 if (templates == NULL_TREE && candidates == NULL_TREE)
2098 {
2099 error ("template-id %qD for %q+D does not match any template "
2100 "declaration", template_id, decl);
2101 if (header_count && header_count != template_count + 1)
2102 inform (input_location, "saw %d %<template<>%>, need %d for "
2103 "specializing a member function template",
2104 header_count, template_count + 1);
2105 return error_mark_node;
2106 }
2107 else if ((templates && TREE_CHAIN (templates))
2108 || (candidates && TREE_CHAIN (candidates))
2109 || (templates && candidates))
2110 {
2111 error ("ambiguous template specialization %qD for %q+D",
2112 template_id, decl);
2113 candidates = chainon (candidates, templates);
2114 print_candidates (candidates);
2115 return error_mark_node;
2116 }
2117
2118 /* We have one, and exactly one, match. */
2119 if (candidates)
2120 {
2121 tree fn = TREE_VALUE (candidates);
2122 *targs_out = copy_node (DECL_TI_ARGS (fn));
2123 /* DECL is a re-declaration or partial instantiation of a template
2124 function. */
2125 if (TREE_CODE (fn) == TEMPLATE_DECL)
2126 return fn;
2127 /* It was a specialization of an ordinary member function in a
2128 template class. */
2129 return DECL_TI_TEMPLATE (fn);
2130 }
2131
2132 /* It was a specialization of a template. */
2133 targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
2134 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
2135 {
2136 *targs_out = copy_node (targs);
2137 SET_TMPL_ARGS_LEVEL (*targs_out,
2138 TMPL_ARGS_DEPTH (*targs_out),
2139 TREE_PURPOSE (templates));
2140 }
2141 else
2142 *targs_out = TREE_PURPOSE (templates);
2143 return TREE_VALUE (templates);
2144 }
2145
2146 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
2147 but with the default argument values filled in from those in the
2148 TMPL_TYPES. */
2149
2150 static tree
2151 copy_default_args_to_explicit_spec_1 (tree spec_types,
2152 tree tmpl_types)
2153 {
2154 tree new_spec_types;
2155
2156 if (!spec_types)
2157 return NULL_TREE;
2158
2159 if (spec_types == void_list_node)
2160 return void_list_node;
2161
2162 /* Substitute into the rest of the list. */
2163 new_spec_types =
2164 copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
2165 TREE_CHAIN (tmpl_types));
2166
2167 /* Add the default argument for this parameter. */
2168 return hash_tree_cons (TREE_PURPOSE (tmpl_types),
2169 TREE_VALUE (spec_types),
2170 new_spec_types);
2171 }
2172
2173 /* DECL is an explicit specialization. Replicate default arguments
2174 from the template it specializes. (That way, code like:
2175
2176 template <class T> void f(T = 3);
2177 template <> void f(double);
2178 void g () { f (); }
2179
2180 works, as required.) An alternative approach would be to look up
2181 the correct default arguments at the call-site, but this approach
2182 is consistent with how implicit instantiations are handled. */
2183
2184 static void
2185 copy_default_args_to_explicit_spec (tree decl)
2186 {
2187 tree tmpl;
2188 tree spec_types;
2189 tree tmpl_types;
2190 tree new_spec_types;
2191 tree old_type;
2192 tree new_type;
2193 tree t;
2194 tree object_type = NULL_TREE;
2195 tree in_charge = NULL_TREE;
2196 tree vtt = NULL_TREE;
2197
2198 /* See if there's anything we need to do. */
2199 tmpl = DECL_TI_TEMPLATE (decl);
2200 tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
2201 for (t = tmpl_types; t; t = TREE_CHAIN (t))
2202 if (TREE_PURPOSE (t))
2203 break;
2204 if (!t)
2205 return;
2206
2207 old_type = TREE_TYPE (decl);
2208 spec_types = TYPE_ARG_TYPES (old_type);
2209
2210 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2211 {
2212 /* Remove the this pointer, but remember the object's type for
2213 CV quals. */
2214 object_type = TREE_TYPE (TREE_VALUE (spec_types));
2215 spec_types = TREE_CHAIN (spec_types);
2216 tmpl_types = TREE_CHAIN (tmpl_types);
2217
2218 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
2219 {
2220 /* DECL may contain more parameters than TMPL due to the extra
2221 in-charge parameter in constructors and destructors. */
2222 in_charge = spec_types;
2223 spec_types = TREE_CHAIN (spec_types);
2224 }
2225 if (DECL_HAS_VTT_PARM_P (decl))
2226 {
2227 vtt = spec_types;
2228 spec_types = TREE_CHAIN (spec_types);
2229 }
2230 }
2231
2232 /* Compute the merged default arguments. */
2233 new_spec_types =
2234 copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
2235
2236 /* Compute the new FUNCTION_TYPE. */
2237 if (object_type)
2238 {
2239 if (vtt)
2240 new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
2241 TREE_VALUE (vtt),
2242 new_spec_types);
2243
2244 if (in_charge)
2245 /* Put the in-charge parameter back. */
2246 new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
2247 TREE_VALUE (in_charge),
2248 new_spec_types);
2249
2250 new_type = build_method_type_directly (object_type,
2251 TREE_TYPE (old_type),
2252 new_spec_types);
2253 }
2254 else
2255 new_type = build_function_type (TREE_TYPE (old_type),
2256 new_spec_types);
2257 new_type = cp_build_type_attribute_variant (new_type,
2258 TYPE_ATTRIBUTES (old_type));
2259 new_type = build_exception_variant (new_type,
2260 TYPE_RAISES_EXCEPTIONS (old_type));
2261
2262 if (TYPE_HAS_LATE_RETURN_TYPE (old_type))
2263 TYPE_HAS_LATE_RETURN_TYPE (new_type) = 1;
2264
2265 TREE_TYPE (decl) = new_type;
2266 }
2267
2268 /* Return the number of template headers we expect to see for a definition
2269 or specialization of CTYPE or one of its non-template members. */
2270
2271 int
2272 num_template_headers_for_class (tree ctype)
2273 {
2274 int num_templates = 0;
2275
2276 while (ctype && CLASS_TYPE_P (ctype))
2277 {
2278 /* You're supposed to have one `template <...>' for every
2279 template class, but you don't need one for a full
2280 specialization. For example:
2281
2282 template <class T> struct S{};
2283 template <> struct S<int> { void f(); };
2284 void S<int>::f () {}
2285
2286 is correct; there shouldn't be a `template <>' for the
2287 definition of `S<int>::f'. */
2288 if (!CLASSTYPE_TEMPLATE_INFO (ctype))
2289 /* If CTYPE does not have template information of any
2290 kind, then it is not a template, nor is it nested
2291 within a template. */
2292 break;
2293 if (explicit_class_specialization_p (ctype))
2294 break;
2295 if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (ctype)))
2296 ++num_templates;
2297
2298 ctype = TYPE_CONTEXT (ctype);
2299 }
2300
2301 return num_templates;
2302 }
2303
2304 /* Do a simple sanity check on the template headers that precede the
2305 variable declaration DECL. */
2306
2307 void
2308 check_template_variable (tree decl)
2309 {
2310 tree ctx = CP_DECL_CONTEXT (decl);
2311 int wanted = num_template_headers_for_class (ctx);
2312 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl)
2313 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl)))
2314 {
2315 if (cxx_dialect < cxx14)
2316 pedwarn (DECL_SOURCE_LOCATION (decl), 0,
2317 "variable templates only available with "
2318 "-std=c++14 or -std=gnu++14");
2319
2320 // Namespace-scope variable templates should have a template header.
2321 ++wanted;
2322 }
2323 if (template_header_count > wanted)
2324 {
2325 bool warned = pedwarn (DECL_SOURCE_LOCATION (decl), 0,
2326 "too many template headers for %D (should be %d)",
2327 decl, wanted);
2328 if (warned && CLASS_TYPE_P (ctx)
2329 && CLASSTYPE_TEMPLATE_SPECIALIZATION (ctx))
2330 inform (DECL_SOURCE_LOCATION (decl),
2331 "members of an explicitly specialized class are defined "
2332 "without a template header");
2333 }
2334 }
2335
2336 /* Check to see if the function just declared, as indicated in
2337 DECLARATOR, and in DECL, is a specialization of a function
2338 template. We may also discover that the declaration is an explicit
2339 instantiation at this point.
2340
2341 Returns DECL, or an equivalent declaration that should be used
2342 instead if all goes well. Issues an error message if something is
2343 amiss. Returns error_mark_node if the error is not easily
2344 recoverable.
2345
2346 FLAGS is a bitmask consisting of the following flags:
2347
2348 2: The function has a definition.
2349 4: The function is a friend.
2350
2351 The TEMPLATE_COUNT is the number of references to qualifying
2352 template classes that appeared in the name of the function. For
2353 example, in
2354
2355 template <class T> struct S { void f(); };
2356 void S<int>::f();
2357
2358 the TEMPLATE_COUNT would be 1. However, explicitly specialized
2359 classes are not counted in the TEMPLATE_COUNT, so that in
2360
2361 template <class T> struct S {};
2362 template <> struct S<int> { void f(); }
2363 template <> void S<int>::f();
2364
2365 the TEMPLATE_COUNT would be 0. (Note that this declaration is
2366 invalid; there should be no template <>.)
2367
2368 If the function is a specialization, it is marked as such via
2369 DECL_TEMPLATE_SPECIALIZATION. Furthermore, its DECL_TEMPLATE_INFO
2370 is set up correctly, and it is added to the list of specializations
2371 for that template. */
2372
2373 tree
2374 check_explicit_specialization (tree declarator,
2375 tree decl,
2376 int template_count,
2377 int flags)
2378 {
2379 int have_def = flags & 2;
2380 int is_friend = flags & 4;
2381 int specialization = 0;
2382 int explicit_instantiation = 0;
2383 int member_specialization = 0;
2384 tree ctype = DECL_CLASS_CONTEXT (decl);
2385 tree dname = DECL_NAME (decl);
2386 tmpl_spec_kind tsk;
2387
2388 if (is_friend)
2389 {
2390 if (!processing_specialization)
2391 tsk = tsk_none;
2392 else
2393 tsk = tsk_excessive_parms;
2394 }
2395 else
2396 tsk = current_tmpl_spec_kind (template_count);
2397
2398 switch (tsk)
2399 {
2400 case tsk_none:
2401 if (processing_specialization)
2402 {
2403 specialization = 1;
2404 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2405 }
2406 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2407 {
2408 if (is_friend)
2409 /* This could be something like:
2410
2411 template <class T> void f(T);
2412 class S { friend void f<>(int); } */
2413 specialization = 1;
2414 else
2415 {
2416 /* This case handles bogus declarations like template <>
2417 template <class T> void f<int>(); */
2418
2419 error ("template-id %qD in declaration of primary template",
2420 declarator);
2421 return decl;
2422 }
2423 }
2424 break;
2425
2426 case tsk_invalid_member_spec:
2427 /* The error has already been reported in
2428 check_specialization_scope. */
2429 return error_mark_node;
2430
2431 case tsk_invalid_expl_inst:
2432 error ("template parameter list used in explicit instantiation");
2433
2434 /* Fall through. */
2435
2436 case tsk_expl_inst:
2437 if (have_def)
2438 error ("definition provided for explicit instantiation");
2439
2440 explicit_instantiation = 1;
2441 break;
2442
2443 case tsk_excessive_parms:
2444 case tsk_insufficient_parms:
2445 if (tsk == tsk_excessive_parms)
2446 error ("too many template parameter lists in declaration of %qD",
2447 decl);
2448 else if (template_header_count)
2449 error("too few template parameter lists in declaration of %qD", decl);
2450 else
2451 error("explicit specialization of %qD must be introduced by "
2452 "%<template <>%>", decl);
2453
2454 /* Fall through. */
2455 case tsk_expl_spec:
2456 if (VAR_P (decl) && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2457 /* In cases like template<> constexpr bool v = true;
2458 We'll give an error in check_template_variable. */
2459 break;
2460
2461 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2462 if (ctype)
2463 member_specialization = 1;
2464 else
2465 specialization = 1;
2466 break;
2467
2468 case tsk_template:
2469 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2470 {
2471 /* This case handles bogus declarations like template <>
2472 template <class T> void f<int>(); */
2473
2474 if (uses_template_parms (declarator))
2475 error ("non-type partial specialization %qD "
2476 "is not allowed", declarator);
2477 else
2478 error ("template-id %qD in declaration of primary template",
2479 declarator);
2480 return decl;
2481 }
2482
2483 if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
2484 /* This is a specialization of a member template, without
2485 specialization the containing class. Something like:
2486
2487 template <class T> struct S {
2488 template <class U> void f (U);
2489 };
2490 template <> template <class U> void S<int>::f(U) {}
2491
2492 That's a specialization -- but of the entire template. */
2493 specialization = 1;
2494 break;
2495
2496 default:
2497 gcc_unreachable ();
2498 }
2499
2500 if ((specialization || member_specialization)
2501 /* This doesn't apply to variable templates. */
2502 && (TREE_CODE (TREE_TYPE (decl)) == FUNCTION_TYPE
2503 || TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE))
2504 {
2505 tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2506 for (; t; t = TREE_CHAIN (t))
2507 if (TREE_PURPOSE (t))
2508 {
2509 permerror (input_location,
2510 "default argument specified in explicit specialization");
2511 break;
2512 }
2513 }
2514
2515 if (specialization || member_specialization || explicit_instantiation)
2516 {
2517 tree tmpl = NULL_TREE;
2518 tree targs = NULL_TREE;
2519
2520 /* Make sure that the declarator is a TEMPLATE_ID_EXPR. */
2521 if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2522 {
2523 tree fns;
2524
2525 gcc_assert (identifier_p (declarator));
2526 if (ctype)
2527 fns = dname;
2528 else
2529 {
2530 /* If there is no class context, the explicit instantiation
2531 must be at namespace scope. */
2532 gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2533
2534 /* Find the namespace binding, using the declaration
2535 context. */
2536 fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2537 false, true);
2538 if (fns == error_mark_node || !is_overloaded_fn (fns))
2539 {
2540 error ("%qD is not a template function", dname);
2541 fns = error_mark_node;
2542 }
2543 else
2544 {
2545 tree fn = OVL_CURRENT (fns);
2546 if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2547 CP_DECL_CONTEXT (fn)))
2548 error ("%qD is not declared in %qD",
2549 decl, current_namespace);
2550 }
2551 }
2552
2553 declarator = lookup_template_function (fns, NULL_TREE);
2554 }
2555
2556 if (declarator == error_mark_node)
2557 return error_mark_node;
2558
2559 if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2560 {
2561 if (!explicit_instantiation)
2562 /* A specialization in class scope. This is invalid,
2563 but the error will already have been flagged by
2564 check_specialization_scope. */
2565 return error_mark_node;
2566 else
2567 {
2568 /* It's not valid to write an explicit instantiation in
2569 class scope, e.g.:
2570
2571 class C { template void f(); }
2572
2573 This case is caught by the parser. However, on
2574 something like:
2575
2576 template class C { void f(); };
2577
2578 (which is invalid) we can get here. The error will be
2579 issued later. */
2580 ;
2581 }
2582
2583 return decl;
2584 }
2585 else if (ctype != NULL_TREE
2586 && (identifier_p (TREE_OPERAND (declarator, 0))))
2587 {
2588 // Ignore variable templates.
2589 if (VAR_P (decl))
2590 return decl;
2591
2592 /* Find the list of functions in ctype that have the same
2593 name as the declared function. */
2594 tree name = TREE_OPERAND (declarator, 0);
2595 tree fns = NULL_TREE;
2596 int idx;
2597
2598 if (constructor_name_p (name, ctype))
2599 {
2600 int is_constructor = DECL_CONSTRUCTOR_P (decl);
2601
2602 if (is_constructor ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2603 : !CLASSTYPE_DESTRUCTORS (ctype))
2604 {
2605 /* From [temp.expl.spec]:
2606
2607 If such an explicit specialization for the member
2608 of a class template names an implicitly-declared
2609 special member function (clause _special_), the
2610 program is ill-formed.
2611
2612 Similar language is found in [temp.explicit]. */
2613 error ("specialization of implicitly-declared special member function");
2614 return error_mark_node;
2615 }
2616
2617 name = is_constructor ? ctor_identifier : dtor_identifier;
2618 }
2619
2620 if (!DECL_CONV_FN_P (decl))
2621 {
2622 idx = lookup_fnfields_1 (ctype, name);
2623 if (idx >= 0)
2624 fns = (*CLASSTYPE_METHOD_VEC (ctype))[idx];
2625 }
2626 else
2627 {
2628 vec<tree, va_gc> *methods;
2629 tree ovl;
2630
2631 /* For a type-conversion operator, we cannot do a
2632 name-based lookup. We might be looking for `operator
2633 int' which will be a specialization of `operator T'.
2634 So, we find *all* the conversion operators, and then
2635 select from them. */
2636 fns = NULL_TREE;
2637
2638 methods = CLASSTYPE_METHOD_VEC (ctype);
2639 if (methods)
2640 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2641 methods->iterate (idx, &ovl);
2642 ++idx)
2643 {
2644 if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2645 /* There are no more conversion functions. */
2646 break;
2647
2648 /* Glue all these conversion functions together
2649 with those we already have. */
2650 for (; ovl; ovl = OVL_NEXT (ovl))
2651 fns = ovl_cons (OVL_CURRENT (ovl), fns);
2652 }
2653 }
2654
2655 if (fns == NULL_TREE)
2656 {
2657 error ("no member function %qD declared in %qT", name, ctype);
2658 return error_mark_node;
2659 }
2660 else
2661 TREE_OPERAND (declarator, 0) = fns;
2662 }
2663
2664 /* Figure out what exactly is being specialized at this point.
2665 Note that for an explicit instantiation, even one for a
2666 member function, we cannot tell apriori whether the
2667 instantiation is for a member template, or just a member
2668 function of a template class. Even if a member template is
2669 being instantiated, the member template arguments may be
2670 elided if they can be deduced from the rest of the
2671 declaration. */
2672 tmpl = determine_specialization (declarator, decl,
2673 &targs,
2674 member_specialization,
2675 template_count,
2676 tsk);
2677
2678 if (!tmpl || tmpl == error_mark_node)
2679 /* We couldn't figure out what this declaration was
2680 specializing. */
2681 return error_mark_node;
2682 else
2683 {
2684 tree gen_tmpl = most_general_template (tmpl);
2685
2686 if (explicit_instantiation)
2687 {
2688 /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2689 is done by do_decl_instantiation later. */
2690
2691 int arg_depth = TMPL_ARGS_DEPTH (targs);
2692 int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2693
2694 if (arg_depth > parm_depth)
2695 {
2696 /* If TMPL is not the most general template (for
2697 example, if TMPL is a friend template that is
2698 injected into namespace scope), then there will
2699 be too many levels of TARGS. Remove some of them
2700 here. */
2701 int i;
2702 tree new_targs;
2703
2704 new_targs = make_tree_vec (parm_depth);
2705 for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2706 TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2707 = TREE_VEC_ELT (targs, i);
2708 targs = new_targs;
2709 }
2710
2711 return instantiate_template (tmpl, targs, tf_error);
2712 }
2713
2714 /* If we thought that the DECL was a member function, but it
2715 turns out to be specializing a static member function,
2716 make DECL a static member function as well. */
2717 if (DECL_FUNCTION_TEMPLATE_P (tmpl)
2718 && DECL_STATIC_FUNCTION_P (tmpl)
2719 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2720 revert_static_member_fn (decl);
2721
2722 /* If this is a specialization of a member template of a
2723 template class, we want to return the TEMPLATE_DECL, not
2724 the specialization of it. */
2725 if (tsk == tsk_template)
2726 {
2727 tree result = DECL_TEMPLATE_RESULT (tmpl);
2728 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2729 DECL_INITIAL (result) = NULL_TREE;
2730 if (have_def)
2731 {
2732 tree parm;
2733 DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2734 DECL_SOURCE_LOCATION (result)
2735 = DECL_SOURCE_LOCATION (decl);
2736 /* We want to use the argument list specified in the
2737 definition, not in the original declaration. */
2738 DECL_ARGUMENTS (result) = DECL_ARGUMENTS (decl);
2739 for (parm = DECL_ARGUMENTS (result); parm;
2740 parm = DECL_CHAIN (parm))
2741 DECL_CONTEXT (parm) = result;
2742 }
2743 return register_specialization (tmpl, gen_tmpl, targs,
2744 is_friend, 0);
2745 }
2746
2747 /* Set up the DECL_TEMPLATE_INFO for DECL. */
2748 DECL_TEMPLATE_INFO (decl) = build_template_info (tmpl, targs);
2749
2750 /* Inherit default function arguments from the template
2751 DECL is specializing. */
2752 if (DECL_FUNCTION_TEMPLATE_P (tmpl))
2753 copy_default_args_to_explicit_spec (decl);
2754
2755 /* This specialization has the same protection as the
2756 template it specializes. */
2757 TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2758 TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2759
2760 /* 7.1.1-1 [dcl.stc]
2761
2762 A storage-class-specifier shall not be specified in an
2763 explicit specialization...
2764
2765 The parser rejects these, so unless action is taken here,
2766 explicit function specializations will always appear with
2767 global linkage.
2768
2769 The action recommended by the C++ CWG in response to C++
2770 defect report 605 is to make the storage class and linkage
2771 of the explicit specialization match the templated function:
2772
2773 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2774 */
2775 if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2776 {
2777 tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2778 gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2779
2780 /* This specialization has the same linkage and visibility as
2781 the function template it specializes. */
2782 TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2783 if (! TREE_PUBLIC (decl))
2784 {
2785 DECL_INTERFACE_KNOWN (decl) = 1;
2786 DECL_NOT_REALLY_EXTERN (decl) = 1;
2787 }
2788 DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2789 if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2790 {
2791 DECL_VISIBILITY_SPECIFIED (decl) = 1;
2792 DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2793 }
2794 }
2795
2796 /* If DECL is a friend declaration, declared using an
2797 unqualified name, the namespace associated with DECL may
2798 have been set incorrectly. For example, in:
2799
2800 template <typename T> void f(T);
2801 namespace N {
2802 struct S { friend void f<int>(int); }
2803 }
2804
2805 we will have set the DECL_CONTEXT for the friend
2806 declaration to N, rather than to the global namespace. */
2807 if (DECL_NAMESPACE_SCOPE_P (decl))
2808 DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2809
2810 if (is_friend && !have_def)
2811 /* This is not really a declaration of a specialization.
2812 It's just the name of an instantiation. But, it's not
2813 a request for an instantiation, either. */
2814 SET_DECL_IMPLICIT_INSTANTIATION (decl);
2815 else if (TREE_CODE (decl) == FUNCTION_DECL)
2816 /* A specialization is not necessarily COMDAT. */
2817 DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
2818 && DECL_DECLARED_INLINE_P (decl));
2819 else if (TREE_CODE (decl) == VAR_DECL)
2820 DECL_COMDAT (decl) = false;
2821
2822 /* Register this specialization so that we can find it
2823 again. */
2824 decl = register_specialization (decl, gen_tmpl, targs, is_friend, 0);
2825
2826 /* A 'structor should already have clones. */
2827 gcc_assert (decl == error_mark_node
2828 || variable_template_p (tmpl)
2829 || !(DECL_CONSTRUCTOR_P (decl)
2830 || DECL_DESTRUCTOR_P (decl))
2831 || DECL_CLONED_FUNCTION_P (DECL_CHAIN (decl)));
2832 }
2833 }
2834
2835 return decl;
2836 }
2837
2838 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2839 parameters. These are represented in the same format used for
2840 DECL_TEMPLATE_PARMS. */
2841
2842 int
2843 comp_template_parms (const_tree parms1, const_tree parms2)
2844 {
2845 const_tree p1;
2846 const_tree p2;
2847
2848 if (parms1 == parms2)
2849 return 1;
2850
2851 for (p1 = parms1, p2 = parms2;
2852 p1 != NULL_TREE && p2 != NULL_TREE;
2853 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2854 {
2855 tree t1 = TREE_VALUE (p1);
2856 tree t2 = TREE_VALUE (p2);
2857 int i;
2858
2859 gcc_assert (TREE_CODE (t1) == TREE_VEC);
2860 gcc_assert (TREE_CODE (t2) == TREE_VEC);
2861
2862 if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2863 return 0;
2864
2865 for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2866 {
2867 tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2868 tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2869
2870 /* If either of the template parameters are invalid, assume
2871 they match for the sake of error recovery. */
2872 if (error_operand_p (parm1) || error_operand_p (parm2))
2873 return 1;
2874
2875 if (TREE_CODE (parm1) != TREE_CODE (parm2))
2876 return 0;
2877
2878 if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2879 && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2880 == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2881 continue;
2882 else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2883 return 0;
2884 }
2885 }
2886
2887 if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2888 /* One set of parameters has more parameters lists than the
2889 other. */
2890 return 0;
2891
2892 return 1;
2893 }
2894
2895 /* Determine whether PARM is a parameter pack. */
2896
2897 bool
2898 template_parameter_pack_p (const_tree parm)
2899 {
2900 /* Determine if we have a non-type template parameter pack. */
2901 if (TREE_CODE (parm) == PARM_DECL)
2902 return (DECL_TEMPLATE_PARM_P (parm)
2903 && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2904 if (TREE_CODE (parm) == TEMPLATE_PARM_INDEX)
2905 return TEMPLATE_PARM_PARAMETER_PACK (parm);
2906
2907 /* If this is a list of template parameters, we could get a
2908 TYPE_DECL or a TEMPLATE_DECL. */
2909 if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2910 parm = TREE_TYPE (parm);
2911
2912 /* Otherwise it must be a type template parameter. */
2913 return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2914 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2915 && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2916 }
2917
2918 /* Determine if T is a function parameter pack. */
2919
2920 bool
2921 function_parameter_pack_p (const_tree t)
2922 {
2923 if (t && TREE_CODE (t) == PARM_DECL)
2924 return DECL_PACK_P (t);
2925 return false;
2926 }
2927
2928 /* Return the function template declaration of PRIMARY_FUNC_TMPL_INST.
2929 PRIMARY_FUNC_TMPL_INST is a primary function template instantiation. */
2930
2931 tree
2932 get_function_template_decl (const_tree primary_func_tmpl_inst)
2933 {
2934 if (! primary_func_tmpl_inst
2935 || TREE_CODE (primary_func_tmpl_inst) != FUNCTION_DECL
2936 || ! primary_template_instantiation_p (primary_func_tmpl_inst))
2937 return NULL;
2938
2939 return DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (primary_func_tmpl_inst));
2940 }
2941
2942 /* Return true iff the function parameter PARAM_DECL was expanded
2943 from the function parameter pack PACK. */
2944
2945 bool
2946 function_parameter_expanded_from_pack_p (tree param_decl, tree pack)
2947 {
2948 if (DECL_ARTIFICIAL (param_decl)
2949 || !function_parameter_pack_p (pack))
2950 return false;
2951
2952 /* The parameter pack and its pack arguments have the same
2953 DECL_PARM_INDEX. */
2954 return DECL_PARM_INDEX (pack) == DECL_PARM_INDEX (param_decl);
2955 }
2956
2957 /* Determine whether ARGS describes a variadic template args list,
2958 i.e., one that is terminated by a template argument pack. */
2959
2960 static bool
2961 template_args_variadic_p (tree args)
2962 {
2963 int nargs;
2964 tree last_parm;
2965
2966 if (args == NULL_TREE)
2967 return false;
2968
2969 args = INNERMOST_TEMPLATE_ARGS (args);
2970 nargs = TREE_VEC_LENGTH (args);
2971
2972 if (nargs == 0)
2973 return false;
2974
2975 last_parm = TREE_VEC_ELT (args, nargs - 1);
2976
2977 return ARGUMENT_PACK_P (last_parm);
2978 }
2979
2980 /* Generate a new name for the parameter pack name NAME (an
2981 IDENTIFIER_NODE) that incorporates its */
2982
2983 static tree
2984 make_ith_pack_parameter_name (tree name, int i)
2985 {
2986 /* Munge the name to include the parameter index. */
2987 #define NUMBUF_LEN 128
2988 char numbuf[NUMBUF_LEN];
2989 char* newname;
2990 int newname_len;
2991
2992 if (name == NULL_TREE)
2993 return name;
2994 snprintf (numbuf, NUMBUF_LEN, "%i", i);
2995 newname_len = IDENTIFIER_LENGTH (name)
2996 + strlen (numbuf) + 2;
2997 newname = (char*)alloca (newname_len);
2998 snprintf (newname, newname_len,
2999 "%s#%i", IDENTIFIER_POINTER (name), i);
3000 return get_identifier (newname);
3001 }
3002
3003 /* Return true if T is a primary function, class or alias template
3004 instantiation. */
3005
3006 bool
3007 primary_template_instantiation_p (const_tree t)
3008 {
3009 if (!t)
3010 return false;
3011
3012 if (TREE_CODE (t) == FUNCTION_DECL)
3013 return DECL_LANG_SPECIFIC (t)
3014 && DECL_TEMPLATE_INSTANTIATION (t)
3015 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t));
3016 else if (CLASS_TYPE_P (t) && !TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
3017 return CLASSTYPE_TEMPLATE_INSTANTIATION (t)
3018 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t));
3019 else if (alias_template_specialization_p (t))
3020 return true;
3021 return false;
3022 }
3023
3024 /* Return true if PARM is a template template parameter. */
3025
3026 bool
3027 template_template_parameter_p (const_tree parm)
3028 {
3029 return DECL_TEMPLATE_TEMPLATE_PARM_P (parm);
3030 }
3031
3032 /* Return true iff PARM is a DECL representing a type template
3033 parameter. */
3034
3035 bool
3036 template_type_parameter_p (const_tree parm)
3037 {
3038 return (parm
3039 && (TREE_CODE (parm) == TYPE_DECL
3040 || TREE_CODE (parm) == TEMPLATE_DECL)
3041 && DECL_TEMPLATE_PARM_P (parm));
3042 }
3043
3044 /* Return the template parameters of T if T is a
3045 primary template instantiation, NULL otherwise. */
3046
3047 tree
3048 get_primary_template_innermost_parameters (const_tree t)
3049 {
3050 tree parms = NULL, template_info = NULL;
3051
3052 if ((template_info = get_template_info (t))
3053 && primary_template_instantiation_p (t))
3054 parms = INNERMOST_TEMPLATE_PARMS
3055 (DECL_TEMPLATE_PARMS (TI_TEMPLATE (template_info)));
3056
3057 return parms;
3058 }
3059
3060 /* Return the template parameters of the LEVELth level from the full list
3061 of template parameters PARMS. */
3062
3063 tree
3064 get_template_parms_at_level (tree parms, int level)
3065 {
3066 tree p;
3067 if (!parms
3068 || TREE_CODE (parms) != TREE_LIST
3069 || level > TMPL_PARMS_DEPTH (parms))
3070 return NULL_TREE;
3071
3072 for (p = parms; p; p = TREE_CHAIN (p))
3073 if (TMPL_PARMS_DEPTH (p) == level)
3074 return p;
3075
3076 return NULL_TREE;
3077 }
3078
3079 /* Returns the template arguments of T if T is a template instantiation,
3080 NULL otherwise. */
3081
3082 tree
3083 get_template_innermost_arguments (const_tree t)
3084 {
3085 tree args = NULL, template_info = NULL;
3086
3087 if ((template_info = get_template_info (t))
3088 && TI_ARGS (template_info))
3089 args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (template_info));
3090
3091 return args;
3092 }
3093
3094 /* Return the argument pack elements of T if T is a template argument pack,
3095 NULL otherwise. */
3096
3097 tree
3098 get_template_argument_pack_elems (const_tree t)
3099 {
3100 if (TREE_CODE (t) != TYPE_ARGUMENT_PACK
3101 && TREE_CODE (t) != NONTYPE_ARGUMENT_PACK)
3102 return NULL;
3103
3104 return ARGUMENT_PACK_ARGS (t);
3105 }
3106
3107 /* Structure used to track the progress of find_parameter_packs_r. */
3108 struct find_parameter_pack_data
3109 {
3110 /* TREE_LIST that will contain all of the parameter packs found by
3111 the traversal. */
3112 tree* parameter_packs;
3113
3114 /* Set of AST nodes that have been visited by the traversal. */
3115 hash_set<tree> *visited;
3116 };
3117
3118 /* Identifies all of the argument packs that occur in a template
3119 argument and appends them to the TREE_LIST inside DATA, which is a
3120 find_parameter_pack_data structure. This is a subroutine of
3121 make_pack_expansion and uses_parameter_packs. */
3122 static tree
3123 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
3124 {
3125 tree t = *tp;
3126 struct find_parameter_pack_data* ppd =
3127 (struct find_parameter_pack_data*)data;
3128 bool parameter_pack_p = false;
3129
3130 /* Handle type aliases/typedefs. */
3131 if (TYPE_ALIAS_P (t))
3132 {
3133 if (TYPE_TEMPLATE_INFO (t))
3134 cp_walk_tree (&TYPE_TI_ARGS (t),
3135 &find_parameter_packs_r,
3136 ppd, ppd->visited);
3137 *walk_subtrees = 0;
3138 return NULL_TREE;
3139 }
3140
3141 /* Identify whether this is a parameter pack or not. */
3142 switch (TREE_CODE (t))
3143 {
3144 case TEMPLATE_PARM_INDEX:
3145 if (TEMPLATE_PARM_PARAMETER_PACK (t))
3146 parameter_pack_p = true;
3147 break;
3148
3149 case TEMPLATE_TYPE_PARM:
3150 t = TYPE_MAIN_VARIANT (t);
3151 case TEMPLATE_TEMPLATE_PARM:
3152 if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3153 parameter_pack_p = true;
3154 break;
3155
3156 case FIELD_DECL:
3157 case PARM_DECL:
3158 if (DECL_PACK_P (t))
3159 {
3160 /* We don't want to walk into the type of a PARM_DECL,
3161 because we don't want to see the type parameter pack. */
3162 *walk_subtrees = 0;
3163 parameter_pack_p = true;
3164 }
3165 break;
3166
3167 /* Look through a lambda capture proxy to the field pack. */
3168 case VAR_DECL:
3169 if (DECL_HAS_VALUE_EXPR_P (t))
3170 {
3171 tree v = DECL_VALUE_EXPR (t);
3172 cp_walk_tree (&v,
3173 &find_parameter_packs_r,
3174 ppd, ppd->visited);
3175 *walk_subtrees = 0;
3176 }
3177 break;
3178
3179 case BASES:
3180 parameter_pack_p = true;
3181 break;
3182 default:
3183 /* Not a parameter pack. */
3184 break;
3185 }
3186
3187 if (parameter_pack_p)
3188 {
3189 /* Add this parameter pack to the list. */
3190 *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
3191 }
3192
3193 if (TYPE_P (t))
3194 cp_walk_tree (&TYPE_CONTEXT (t),
3195 &find_parameter_packs_r, ppd, ppd->visited);
3196
3197 /* This switch statement will return immediately if we don't find a
3198 parameter pack. */
3199 switch (TREE_CODE (t))
3200 {
3201 case TEMPLATE_PARM_INDEX:
3202 return NULL_TREE;
3203
3204 case BOUND_TEMPLATE_TEMPLATE_PARM:
3205 /* Check the template itself. */
3206 cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)),
3207 &find_parameter_packs_r, ppd, ppd->visited);
3208 /* Check the template arguments. */
3209 cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd,
3210 ppd->visited);
3211 *walk_subtrees = 0;
3212 return NULL_TREE;
3213
3214 case TEMPLATE_TYPE_PARM:
3215 case TEMPLATE_TEMPLATE_PARM:
3216 return NULL_TREE;
3217
3218 case PARM_DECL:
3219 return NULL_TREE;
3220
3221 case RECORD_TYPE:
3222 if (TYPE_PTRMEMFUNC_P (t))
3223 return NULL_TREE;
3224 /* Fall through. */
3225
3226 case UNION_TYPE:
3227 case ENUMERAL_TYPE:
3228 if (TYPE_TEMPLATE_INFO (t))
3229 cp_walk_tree (&TYPE_TI_ARGS (t),
3230 &find_parameter_packs_r, ppd, ppd->visited);
3231
3232 *walk_subtrees = 0;
3233 return NULL_TREE;
3234
3235 case CONSTRUCTOR:
3236 case TEMPLATE_DECL:
3237 cp_walk_tree (&TREE_TYPE (t),
3238 &find_parameter_packs_r, ppd, ppd->visited);
3239 return NULL_TREE;
3240
3241 case TYPENAME_TYPE:
3242 cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
3243 ppd, ppd->visited);
3244 *walk_subtrees = 0;
3245 return NULL_TREE;
3246
3247 case TYPE_PACK_EXPANSION:
3248 case EXPR_PACK_EXPANSION:
3249 *walk_subtrees = 0;
3250 return NULL_TREE;
3251
3252 case INTEGER_TYPE:
3253 cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r,
3254 ppd, ppd->visited);
3255 *walk_subtrees = 0;
3256 return NULL_TREE;
3257
3258 case IDENTIFIER_NODE:
3259 cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd,
3260 ppd->visited);
3261 *walk_subtrees = 0;
3262 return NULL_TREE;
3263
3264 default:
3265 return NULL_TREE;
3266 }
3267
3268 return NULL_TREE;
3269 }
3270
3271 /* Determines if the expression or type T uses any parameter packs. */
3272 bool
3273 uses_parameter_packs (tree t)
3274 {
3275 tree parameter_packs = NULL_TREE;
3276 struct find_parameter_pack_data ppd;
3277 ppd.parameter_packs = &parameter_packs;
3278 ppd.visited = new hash_set<tree>;
3279 cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3280 delete ppd.visited;
3281 return parameter_packs != NULL_TREE;
3282 }
3283
3284 /* Turn ARG, which may be an expression, type, or a TREE_LIST
3285 representation a base-class initializer into a parameter pack
3286 expansion. If all goes well, the resulting node will be an
3287 EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
3288 respectively. */
3289 tree
3290 make_pack_expansion (tree arg)
3291 {
3292 tree result;
3293 tree parameter_packs = NULL_TREE;
3294 bool for_types = false;
3295 struct find_parameter_pack_data ppd;
3296
3297 if (!arg || arg == error_mark_node)
3298 return arg;
3299
3300 if (TREE_CODE (arg) == TREE_LIST)
3301 {
3302 /* The only time we will see a TREE_LIST here is for a base
3303 class initializer. In this case, the TREE_PURPOSE will be a
3304 _TYPE node (representing the base class expansion we're
3305 initializing) and the TREE_VALUE will be a TREE_LIST
3306 containing the initialization arguments.
3307
3308 The resulting expansion looks somewhat different from most
3309 expansions. Rather than returning just one _EXPANSION, we
3310 return a TREE_LIST whose TREE_PURPOSE is a
3311 TYPE_PACK_EXPANSION containing the bases that will be
3312 initialized. The TREE_VALUE will be identical to the
3313 original TREE_VALUE, which is a list of arguments that will
3314 be passed to each base. We do not introduce any new pack
3315 expansion nodes into the TREE_VALUE (although it is possible
3316 that some already exist), because the TREE_PURPOSE and
3317 TREE_VALUE all need to be expanded together with the same
3318 _EXPANSION node. Note that the TYPE_PACK_EXPANSION in the
3319 resulting TREE_PURPOSE will mention the parameter packs in
3320 both the bases and the arguments to the bases. */
3321 tree purpose;
3322 tree value;
3323 tree parameter_packs = NULL_TREE;
3324
3325 /* Determine which parameter packs will be used by the base
3326 class expansion. */
3327 ppd.visited = new hash_set<tree>;
3328 ppd.parameter_packs = &parameter_packs;
3329 cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r,
3330 &ppd, ppd.visited);
3331
3332 if (parameter_packs == NULL_TREE)
3333 {
3334 error ("base initializer expansion %<%T%> contains no parameter packs", arg);
3335 delete ppd.visited;
3336 return error_mark_node;
3337 }
3338
3339 if (TREE_VALUE (arg) != void_type_node)
3340 {
3341 /* Collect the sets of parameter packs used in each of the
3342 initialization arguments. */
3343 for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
3344 {
3345 /* Determine which parameter packs will be expanded in this
3346 argument. */
3347 cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r,
3348 &ppd, ppd.visited);
3349 }
3350 }
3351
3352 delete ppd.visited;
3353
3354 /* Create the pack expansion type for the base type. */
3355 purpose = cxx_make_type (TYPE_PACK_EXPANSION);
3356 SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
3357 PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
3358
3359 /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3360 they will rarely be compared to anything. */
3361 SET_TYPE_STRUCTURAL_EQUALITY (purpose);
3362
3363 return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
3364 }
3365
3366 if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
3367 for_types = true;
3368
3369 /* Build the PACK_EXPANSION_* node. */
3370 result = for_types
3371 ? cxx_make_type (TYPE_PACK_EXPANSION)
3372 : make_node (EXPR_PACK_EXPANSION);
3373 SET_PACK_EXPANSION_PATTERN (result, arg);
3374 if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
3375 {
3376 /* Propagate type and const-expression information. */
3377 TREE_TYPE (result) = TREE_TYPE (arg);
3378 TREE_CONSTANT (result) = TREE_CONSTANT (arg);
3379 }
3380 else
3381 /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3382 they will rarely be compared to anything. */
3383 SET_TYPE_STRUCTURAL_EQUALITY (result);
3384
3385 /* Determine which parameter packs will be expanded. */
3386 ppd.parameter_packs = &parameter_packs;
3387 ppd.visited = new hash_set<tree>;
3388 cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
3389 delete ppd.visited;
3390
3391 /* Make sure we found some parameter packs. */
3392 if (parameter_packs == NULL_TREE)
3393 {
3394 if (TYPE_P (arg))
3395 error ("expansion pattern %<%T%> contains no argument packs", arg);
3396 else
3397 error ("expansion pattern %<%E%> contains no argument packs", arg);
3398 return error_mark_node;
3399 }
3400 PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
3401
3402 PACK_EXPANSION_LOCAL_P (result) = at_function_scope_p ();
3403
3404 return result;
3405 }
3406
3407 /* Checks T for any "bare" parameter packs, which have not yet been
3408 expanded, and issues an error if any are found. This operation can
3409 only be done on full expressions or types (e.g., an expression
3410 statement, "if" condition, etc.), because we could have expressions like:
3411
3412 foo(f(g(h(args)))...)
3413
3414 where "args" is a parameter pack. check_for_bare_parameter_packs
3415 should not be called for the subexpressions args, h(args),
3416 g(h(args)), or f(g(h(args))), because we would produce erroneous
3417 error messages.
3418
3419 Returns TRUE and emits an error if there were bare parameter packs,
3420 returns FALSE otherwise. */
3421 bool
3422 check_for_bare_parameter_packs (tree t)
3423 {
3424 tree parameter_packs = NULL_TREE;
3425 struct find_parameter_pack_data ppd;
3426
3427 if (!processing_template_decl || !t || t == error_mark_node)
3428 return false;
3429
3430 if (TREE_CODE (t) == TYPE_DECL)
3431 t = TREE_TYPE (t);
3432
3433 ppd.parameter_packs = &parameter_packs;
3434 ppd.visited = new hash_set<tree>;
3435 cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3436 delete ppd.visited;
3437
3438 if (parameter_packs)
3439 {
3440 error ("parameter packs not expanded with %<...%>:");
3441 while (parameter_packs)
3442 {
3443 tree pack = TREE_VALUE (parameter_packs);
3444 tree name = NULL_TREE;
3445
3446 if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
3447 || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
3448 name = TYPE_NAME (pack);
3449 else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
3450 name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
3451 else
3452 name = DECL_NAME (pack);
3453
3454 if (name)
3455 inform (input_location, " %qD", name);
3456 else
3457 inform (input_location, " <anonymous>");
3458
3459 parameter_packs = TREE_CHAIN (parameter_packs);
3460 }
3461
3462 return true;
3463 }
3464
3465 return false;
3466 }
3467
3468 /* Expand any parameter packs that occur in the template arguments in
3469 ARGS. */
3470 tree
3471 expand_template_argument_pack (tree args)
3472 {
3473 tree result_args = NULL_TREE;
3474 int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
3475 int num_result_args = -1;
3476 int non_default_args_count = -1;
3477
3478 /* First, determine if we need to expand anything, and the number of
3479 slots we'll need. */
3480 for (in_arg = 0; in_arg < nargs; ++in_arg)
3481 {
3482 tree arg = TREE_VEC_ELT (args, in_arg);
3483 if (arg == NULL_TREE)
3484 return args;
3485 if (ARGUMENT_PACK_P (arg))
3486 {
3487 int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
3488 if (num_result_args < 0)
3489 num_result_args = in_arg + num_packed;
3490 else
3491 num_result_args += num_packed;
3492 }
3493 else
3494 {
3495 if (num_result_args >= 0)
3496 num_result_args++;
3497 }
3498 }
3499
3500 /* If no expansion is necessary, we're done. */
3501 if (num_result_args < 0)
3502 return args;
3503
3504 /* Expand arguments. */
3505 result_args = make_tree_vec (num_result_args);
3506 if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (args))
3507 non_default_args_count =
3508 GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
3509 for (in_arg = 0; in_arg < nargs; ++in_arg)
3510 {
3511 tree arg = TREE_VEC_ELT (args, in_arg);
3512 if (ARGUMENT_PACK_P (arg))
3513 {
3514 tree packed = ARGUMENT_PACK_ARGS (arg);
3515 int i, num_packed = TREE_VEC_LENGTH (packed);
3516 for (i = 0; i < num_packed; ++i, ++out_arg)
3517 TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
3518 if (non_default_args_count > 0)
3519 non_default_args_count += num_packed - 1;
3520 }
3521 else
3522 {
3523 TREE_VEC_ELT (result_args, out_arg) = arg;
3524 ++out_arg;
3525 }
3526 }
3527 if (non_default_args_count >= 0)
3528 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (result_args, non_default_args_count);
3529 return result_args;
3530 }
3531
3532 /* Checks if DECL shadows a template parameter.
3533
3534 [temp.local]: A template-parameter shall not be redeclared within its
3535 scope (including nested scopes).
3536
3537 Emits an error and returns TRUE if the DECL shadows a parameter,
3538 returns FALSE otherwise. */
3539
3540 bool
3541 check_template_shadow (tree decl)
3542 {
3543 tree olddecl;
3544
3545 /* If we're not in a template, we can't possibly shadow a template
3546 parameter. */
3547 if (!current_template_parms)
3548 return true;
3549
3550 /* Figure out what we're shadowing. */
3551 if (TREE_CODE (decl) == OVERLOAD)
3552 decl = OVL_CURRENT (decl);
3553 olddecl = innermost_non_namespace_value (DECL_NAME (decl));
3554
3555 /* If there's no previous binding for this name, we're not shadowing
3556 anything, let alone a template parameter. */
3557 if (!olddecl)
3558 return true;
3559
3560 /* If we're not shadowing a template parameter, we're done. Note
3561 that OLDDECL might be an OVERLOAD (or perhaps even an
3562 ERROR_MARK), so we can't just blithely assume it to be a _DECL
3563 node. */
3564 if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
3565 return true;
3566
3567 /* We check for decl != olddecl to avoid bogus errors for using a
3568 name inside a class. We check TPFI to avoid duplicate errors for
3569 inline member templates. */
3570 if (decl == olddecl
3571 || (DECL_TEMPLATE_PARM_P (decl)
3572 && TEMPLATE_PARMS_FOR_INLINE (current_template_parms)))
3573 return true;
3574
3575 /* Don't complain about the injected class name, as we've already
3576 complained about the class itself. */
3577 if (DECL_SELF_REFERENCE_P (decl))
3578 return false;
3579
3580 error ("declaration of %q+#D", decl);
3581 error (" shadows template parm %q+#D", olddecl);
3582 return false;
3583 }
3584
3585 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
3586 ORIG_LEVEL, DECL, and TYPE. */
3587
3588 static tree
3589 build_template_parm_index (int index,
3590 int level,
3591 int orig_level,
3592 tree decl,
3593 tree type)
3594 {
3595 tree t = make_node (TEMPLATE_PARM_INDEX);
3596 TEMPLATE_PARM_IDX (t) = index;
3597 TEMPLATE_PARM_LEVEL (t) = level;
3598 TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
3599 TEMPLATE_PARM_DECL (t) = decl;
3600 TREE_TYPE (t) = type;
3601 TREE_CONSTANT (t) = TREE_CONSTANT (decl);
3602 TREE_READONLY (t) = TREE_READONLY (decl);
3603
3604 return t;
3605 }
3606
3607 /* Find the canonical type parameter for the given template type
3608 parameter. Returns the canonical type parameter, which may be TYPE
3609 if no such parameter existed. */
3610
3611 static tree
3612 canonical_type_parameter (tree type)
3613 {
3614 tree list;
3615 int idx = TEMPLATE_TYPE_IDX (type);
3616 if (!canonical_template_parms)
3617 vec_alloc (canonical_template_parms, idx+1);
3618
3619 while (canonical_template_parms->length () <= (unsigned)idx)
3620 vec_safe_push (canonical_template_parms, NULL_TREE);
3621
3622 list = (*canonical_template_parms)[idx];
3623 while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
3624 list = TREE_CHAIN (list);
3625
3626 if (list)
3627 return TREE_VALUE (list);
3628 else
3629 {
3630 (*canonical_template_parms)[idx]
3631 = tree_cons (NULL_TREE, type,
3632 (*canonical_template_parms)[idx]);
3633 return type;
3634 }
3635 }
3636
3637 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
3638 TEMPLATE_PARM_LEVEL has been decreased by LEVELS. If such a
3639 TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
3640 new one is created. */
3641
3642 static tree
3643 reduce_template_parm_level (tree index, tree type, int levels, tree args,
3644 tsubst_flags_t complain)
3645 {
3646 if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
3647 || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
3648 != TEMPLATE_PARM_LEVEL (index) - levels)
3649 || !same_type_p (type, TREE_TYPE (TEMPLATE_PARM_DESCENDANTS (index))))
3650 {
3651 tree orig_decl = TEMPLATE_PARM_DECL (index);
3652 tree decl, t;
3653
3654 decl = build_decl (DECL_SOURCE_LOCATION (orig_decl),
3655 TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
3656 TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
3657 TREE_READONLY (decl) = TREE_READONLY (orig_decl);
3658 DECL_ARTIFICIAL (decl) = 1;
3659 SET_DECL_TEMPLATE_PARM_P (decl);
3660
3661 t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
3662 TEMPLATE_PARM_LEVEL (index) - levels,
3663 TEMPLATE_PARM_ORIG_LEVEL (index),
3664 decl, type);
3665 TEMPLATE_PARM_DESCENDANTS (index) = t;
3666 TEMPLATE_PARM_PARAMETER_PACK (t)
3667 = TEMPLATE_PARM_PARAMETER_PACK (index);
3668
3669 /* Template template parameters need this. */
3670 if (TREE_CODE (decl) == TEMPLATE_DECL)
3671 DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
3672 (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
3673 args, complain);
3674 }
3675
3676 return TEMPLATE_PARM_DESCENDANTS (index);
3677 }
3678
3679 /* Process information from new template parameter PARM and append it
3680 to the LIST being built. This new parameter is a non-type
3681 parameter iff IS_NON_TYPE is true. This new parameter is a
3682 parameter pack iff IS_PARAMETER_PACK is true. The location of PARM
3683 is in PARM_LOC. */
3684
3685 tree
3686 process_template_parm (tree list, location_t parm_loc, tree parm,
3687 bool is_non_type, bool is_parameter_pack)
3688 {
3689 tree decl = 0;
3690 tree defval;
3691 int idx = 0;
3692
3693 gcc_assert (TREE_CODE (parm) == TREE_LIST);
3694 defval = TREE_PURPOSE (parm);
3695
3696 if (list)
3697 {
3698 tree p = tree_last (list);
3699
3700 if (p && TREE_VALUE (p) != error_mark_node)
3701 {
3702 p = TREE_VALUE (p);
3703 if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
3704 idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
3705 else
3706 idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
3707 }
3708
3709 ++idx;
3710 }
3711
3712 if (is_non_type)
3713 {
3714 parm = TREE_VALUE (parm);
3715
3716 SET_DECL_TEMPLATE_PARM_P (parm);
3717
3718 if (TREE_TYPE (parm) != error_mark_node)
3719 {
3720 /* [temp.param]
3721
3722 The top-level cv-qualifiers on the template-parameter are
3723 ignored when determining its type. */
3724 TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3725 if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3726 TREE_TYPE (parm) = error_mark_node;
3727 else if (uses_parameter_packs (TREE_TYPE (parm))
3728 && !is_parameter_pack
3729 /* If we're in a nested template parameter list, the template
3730 template parameter could be a parameter pack. */
3731 && processing_template_parmlist == 1)
3732 {
3733 /* This template parameter is not a parameter pack, but it
3734 should be. Complain about "bare" parameter packs. */
3735 check_for_bare_parameter_packs (TREE_TYPE (parm));
3736
3737 /* Recover by calling this a parameter pack. */
3738 is_parameter_pack = true;
3739 }
3740 }
3741
3742 /* A template parameter is not modifiable. */
3743 TREE_CONSTANT (parm) = 1;
3744 TREE_READONLY (parm) = 1;
3745 decl = build_decl (parm_loc,
3746 CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3747 TREE_CONSTANT (decl) = 1;
3748 TREE_READONLY (decl) = 1;
3749 DECL_INITIAL (parm) = DECL_INITIAL (decl)
3750 = build_template_parm_index (idx, processing_template_decl,
3751 processing_template_decl,
3752 decl, TREE_TYPE (parm));
3753
3754 TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
3755 = is_parameter_pack;
3756 }
3757 else
3758 {
3759 tree t;
3760 parm = TREE_VALUE (TREE_VALUE (parm));
3761
3762 if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3763 {
3764 t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3765 /* This is for distinguishing between real templates and template
3766 template parameters */
3767 TREE_TYPE (parm) = t;
3768 TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3769 decl = parm;
3770 }
3771 else
3772 {
3773 t = cxx_make_type (TEMPLATE_TYPE_PARM);
3774 /* parm is either IDENTIFIER_NODE or NULL_TREE. */
3775 decl = build_decl (parm_loc,
3776 TYPE_DECL, parm, t);
3777 }
3778
3779 TYPE_NAME (t) = decl;
3780 TYPE_STUB_DECL (t) = decl;
3781 parm = decl;
3782 TEMPLATE_TYPE_PARM_INDEX (t)
3783 = build_template_parm_index (idx, processing_template_decl,
3784 processing_template_decl,
3785 decl, TREE_TYPE (parm));
3786 TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3787 TYPE_CANONICAL (t) = canonical_type_parameter (t);
3788 }
3789 DECL_ARTIFICIAL (decl) = 1;
3790 SET_DECL_TEMPLATE_PARM_P (decl);
3791 pushdecl (decl);
3792 parm = build_tree_list (defval, parm);
3793 return chainon (list, parm);
3794 }
3795
3796 /* The end of a template parameter list has been reached. Process the
3797 tree list into a parameter vector, converting each parameter into a more
3798 useful form. Type parameters are saved as IDENTIFIER_NODEs, and others
3799 as PARM_DECLs. */
3800
3801 tree
3802 end_template_parm_list (tree parms)
3803 {
3804 int nparms;
3805 tree parm, next;
3806 tree saved_parmlist = make_tree_vec (list_length (parms));
3807
3808 current_template_parms
3809 = tree_cons (size_int (processing_template_decl),
3810 saved_parmlist, current_template_parms);
3811
3812 for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3813 {
3814 next = TREE_CHAIN (parm);
3815 TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3816 TREE_CHAIN (parm) = NULL_TREE;
3817 }
3818
3819 --processing_template_parmlist;
3820
3821 return saved_parmlist;
3822 }
3823
3824 /* end_template_decl is called after a template declaration is seen. */
3825
3826 void
3827 end_template_decl (void)
3828 {
3829 reset_specialization ();
3830
3831 if (! processing_template_decl)
3832 return;
3833
3834 /* This matches the pushlevel in begin_template_parm_list. */
3835 finish_scope ();
3836
3837 --processing_template_decl;
3838 current_template_parms = TREE_CHAIN (current_template_parms);
3839 }
3840
3841 /* Takes a TREE_LIST representing a template parameter and convert it
3842 into an argument suitable to be passed to the type substitution
3843 functions. Note that If the TREE_LIST contains an error_mark
3844 node, the returned argument is error_mark_node. */
3845
3846 static tree
3847 template_parm_to_arg (tree t)
3848 {
3849
3850 if (t == NULL_TREE
3851 || TREE_CODE (t) != TREE_LIST)
3852 return t;
3853
3854 if (error_operand_p (TREE_VALUE (t)))
3855 return error_mark_node;
3856
3857 t = TREE_VALUE (t);
3858
3859 if (TREE_CODE (t) == TYPE_DECL
3860 || TREE_CODE (t) == TEMPLATE_DECL)
3861 {
3862 t = TREE_TYPE (t);
3863
3864 if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3865 {
3866 /* Turn this argument into a TYPE_ARGUMENT_PACK
3867 with a single element, which expands T. */
3868 tree vec = make_tree_vec (1);
3869 #ifdef ENABLE_CHECKING
3870 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3871 (vec, TREE_VEC_LENGTH (vec));
3872 #endif
3873 TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3874
3875 t = cxx_make_type (TYPE_ARGUMENT_PACK);
3876 SET_ARGUMENT_PACK_ARGS (t, vec);
3877 }
3878 }
3879 else
3880 {
3881 t = DECL_INITIAL (t);
3882
3883 if (TEMPLATE_PARM_PARAMETER_PACK (t))
3884 {
3885 /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3886 with a single element, which expands T. */
3887 tree vec = make_tree_vec (1);
3888 tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3889 #ifdef ENABLE_CHECKING
3890 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3891 (vec, TREE_VEC_LENGTH (vec));
3892 #endif
3893 t = convert_from_reference (t);
3894 TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3895
3896 t = make_node (NONTYPE_ARGUMENT_PACK);
3897 SET_ARGUMENT_PACK_ARGS (t, vec);
3898 TREE_TYPE (t) = type;
3899 }
3900 else
3901 t = convert_from_reference (t);
3902 }
3903 return t;
3904 }
3905
3906 /* Given a set of template parameters, return them as a set of template
3907 arguments. The template parameters are represented as a TREE_VEC, in
3908 the form documented in cp-tree.h for template arguments. */
3909
3910 static tree
3911 template_parms_to_args (tree parms)
3912 {
3913 tree header;
3914 tree args = NULL_TREE;
3915 int length = TMPL_PARMS_DEPTH (parms);
3916 int l = length;
3917
3918 /* If there is only one level of template parameters, we do not
3919 create a TREE_VEC of TREE_VECs. Instead, we return a single
3920 TREE_VEC containing the arguments. */
3921 if (length > 1)
3922 args = make_tree_vec (length);
3923
3924 for (header = parms; header; header = TREE_CHAIN (header))
3925 {
3926 tree a = copy_node (TREE_VALUE (header));
3927 int i;
3928
3929 TREE_TYPE (a) = NULL_TREE;
3930 for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
3931 TREE_VEC_ELT (a, i) = template_parm_to_arg (TREE_VEC_ELT (a, i));
3932
3933 #ifdef ENABLE_CHECKING
3934 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (a, TREE_VEC_LENGTH (a));
3935 #endif
3936
3937 if (length > 1)
3938 TREE_VEC_ELT (args, --l) = a;
3939 else
3940 args = a;
3941 }
3942
3943 if (length > 1 && TREE_VEC_ELT (args, 0) == NULL_TREE)
3944 /* This can happen for template parms of a template template
3945 parameter, e.g:
3946
3947 template<template<class T, class U> class TT> struct S;
3948
3949 Consider the level of the parms of TT; T and U both have
3950 level 2; TT has no template parm of level 1. So in this case
3951 the first element of full_template_args is NULL_TREE. If we
3952 leave it like this TMPL_ARGS_DEPTH on args returns 1 instead
3953 of 2. This will make tsubst wrongly consider that T and U
3954 have level 1. Instead, let's create a dummy vector as the
3955 first element of full_template_args so that TMPL_ARGS_DEPTH
3956 returns the correct depth for args. */
3957 TREE_VEC_ELT (args, 0) = make_tree_vec (1);
3958 return args;
3959 }
3960
3961 /* Within the declaration of a template, return the currently active
3962 template parameters as an argument TREE_VEC. */
3963
3964 static tree
3965 current_template_args (void)
3966 {
3967 return template_parms_to_args (current_template_parms);
3968 }
3969
3970 /* Update the declared TYPE by doing any lookups which were thought to be
3971 dependent, but are not now that we know the SCOPE of the declarator. */
3972
3973 tree
3974 maybe_update_decl_type (tree orig_type, tree scope)
3975 {
3976 tree type = orig_type;
3977
3978 if (type == NULL_TREE)
3979 return type;
3980
3981 if (TREE_CODE (orig_type) == TYPE_DECL)
3982 type = TREE_TYPE (type);
3983
3984 if (scope && TYPE_P (scope) && dependent_type_p (scope)
3985 && dependent_type_p (type)
3986 /* Don't bother building up the args in this case. */
3987 && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
3988 {
3989 /* tsubst in the args corresponding to the template parameters,
3990 including auto if present. Most things will be unchanged, but
3991 make_typename_type and tsubst_qualified_id will resolve
3992 TYPENAME_TYPEs and SCOPE_REFs that were previously dependent. */
3993 tree args = current_template_args ();
3994 tree auto_node = type_uses_auto (type);
3995 tree pushed;
3996 if (auto_node)
3997 {
3998 tree auto_vec = make_tree_vec (1);
3999 TREE_VEC_ELT (auto_vec, 0) = auto_node;
4000 args = add_to_template_args (args, auto_vec);
4001 }
4002 pushed = push_scope (scope);
4003 type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
4004 if (pushed)
4005 pop_scope (scope);
4006 }
4007
4008 if (type == error_mark_node)
4009 return orig_type;
4010
4011 if (TREE_CODE (orig_type) == TYPE_DECL)
4012 {
4013 if (same_type_p (type, TREE_TYPE (orig_type)))
4014 type = orig_type;
4015 else
4016 type = TYPE_NAME (type);
4017 }
4018 return type;
4019 }
4020
4021 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
4022 template PARMS. If MEMBER_TEMPLATE_P is true, the new template is
4023 a member template. Used by push_template_decl below. */
4024
4025 static tree
4026 build_template_decl (tree decl, tree parms, bool member_template_p)
4027 {
4028 tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
4029 DECL_TEMPLATE_PARMS (tmpl) = parms;
4030 DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
4031 DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
4032 DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
4033
4034 return tmpl;
4035 }
4036
4037 struct template_parm_data
4038 {
4039 /* The level of the template parameters we are currently
4040 processing. */
4041 int level;
4042
4043 /* The index of the specialization argument we are currently
4044 processing. */
4045 int current_arg;
4046
4047 /* An array whose size is the number of template parameters. The
4048 elements are nonzero if the parameter has been used in any one
4049 of the arguments processed so far. */
4050 int* parms;
4051
4052 /* An array whose size is the number of template arguments. The
4053 elements are nonzero if the argument makes use of template
4054 parameters of this level. */
4055 int* arg_uses_template_parms;
4056 };
4057
4058 /* Subroutine of push_template_decl used to see if each template
4059 parameter in a partial specialization is used in the explicit
4060 argument list. If T is of the LEVEL given in DATA (which is
4061 treated as a template_parm_data*), then DATA->PARMS is marked
4062 appropriately. */
4063
4064 static int
4065 mark_template_parm (tree t, void* data)
4066 {
4067 int level;
4068 int idx;
4069 struct template_parm_data* tpd = (struct template_parm_data*) data;
4070
4071 template_parm_level_and_index (t, &level, &idx);
4072
4073 if (level == tpd->level)
4074 {
4075 tpd->parms[idx] = 1;
4076 tpd->arg_uses_template_parms[tpd->current_arg] = 1;
4077 }
4078
4079 /* Return zero so that for_each_template_parm will continue the
4080 traversal of the tree; we want to mark *every* template parm. */
4081 return 0;
4082 }
4083
4084 /* Process the partial specialization DECL. */
4085
4086 static tree
4087 process_partial_specialization (tree decl)
4088 {
4089 tree type = TREE_TYPE (decl);
4090 tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
4091 tree specargs = CLASSTYPE_TI_ARGS (type);
4092 tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
4093 tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
4094 tree inner_parms;
4095 tree inst;
4096 int nargs = TREE_VEC_LENGTH (inner_args);
4097 int ntparms;
4098 int i;
4099 bool did_error_intro = false;
4100 struct template_parm_data tpd;
4101 struct template_parm_data tpd2;
4102
4103 gcc_assert (current_template_parms);
4104
4105 inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
4106 ntparms = TREE_VEC_LENGTH (inner_parms);
4107
4108 /* We check that each of the template parameters given in the
4109 partial specialization is used in the argument list to the
4110 specialization. For example:
4111
4112 template <class T> struct S;
4113 template <class T> struct S<T*>;
4114
4115 The second declaration is OK because `T*' uses the template
4116 parameter T, whereas
4117
4118 template <class T> struct S<int>;
4119
4120 is no good. Even trickier is:
4121
4122 template <class T>
4123 struct S1
4124 {
4125 template <class U>
4126 struct S2;
4127 template <class U>
4128 struct S2<T>;
4129 };
4130
4131 The S2<T> declaration is actually invalid; it is a
4132 full-specialization. Of course,
4133
4134 template <class U>
4135 struct S2<T (*)(U)>;
4136
4137 or some such would have been OK. */
4138 tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
4139 tpd.parms = XALLOCAVEC (int, ntparms);
4140 memset (tpd.parms, 0, sizeof (int) * ntparms);
4141
4142 tpd.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4143 memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
4144 for (i = 0; i < nargs; ++i)
4145 {
4146 tpd.current_arg = i;
4147 for_each_template_parm (TREE_VEC_ELT (inner_args, i),
4148 &mark_template_parm,
4149 &tpd,
4150 NULL,
4151 /*include_nondeduced_p=*/false);
4152 }
4153 for (i = 0; i < ntparms; ++i)
4154 if (tpd.parms[i] == 0)
4155 {
4156 /* One of the template parms was not used in a deduced context in the
4157 specialization. */
4158 if (!did_error_intro)
4159 {
4160 error ("template parameters not deducible in "
4161 "partial specialization:");
4162 did_error_intro = true;
4163 }
4164
4165 inform (input_location, " %qD",
4166 TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
4167 }
4168
4169 if (did_error_intro)
4170 return error_mark_node;
4171
4172 /* [temp.class.spec]
4173
4174 The argument list of the specialization shall not be identical to
4175 the implicit argument list of the primary template. */
4176 if (comp_template_args
4177 (inner_args,
4178 INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
4179 (maintmpl)))))
4180 error ("partial specialization %qT does not specialize any template arguments", type);
4181
4182 /* A partial specialization that replaces multiple parameters of the
4183 primary template with a pack expansion is less specialized for those
4184 parameters. */
4185 if (nargs < DECL_NTPARMS (maintmpl))
4186 {
4187 error ("partial specialization is not more specialized than the "
4188 "primary template because it replaces multiple parameters "
4189 "with a pack expansion");
4190 inform (DECL_SOURCE_LOCATION (maintmpl), "primary template here");
4191 return decl;
4192 }
4193
4194 /* [temp.class.spec]
4195
4196 A partially specialized non-type argument expression shall not
4197 involve template parameters of the partial specialization except
4198 when the argument expression is a simple identifier.
4199
4200 The type of a template parameter corresponding to a specialized
4201 non-type argument shall not be dependent on a parameter of the
4202 specialization.
4203
4204 Also, we verify that pack expansions only occur at the
4205 end of the argument list. */
4206 gcc_assert (nargs == DECL_NTPARMS (maintmpl));
4207 tpd2.parms = 0;
4208 for (i = 0; i < nargs; ++i)
4209 {
4210 tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
4211 tree arg = TREE_VEC_ELT (inner_args, i);
4212 tree packed_args = NULL_TREE;
4213 int j, len = 1;
4214
4215 if (ARGUMENT_PACK_P (arg))
4216 {
4217 /* Extract the arguments from the argument pack. We'll be
4218 iterating over these in the following loop. */
4219 packed_args = ARGUMENT_PACK_ARGS (arg);
4220 len = TREE_VEC_LENGTH (packed_args);
4221 }
4222
4223 for (j = 0; j < len; j++)
4224 {
4225 if (packed_args)
4226 /* Get the Jth argument in the parameter pack. */
4227 arg = TREE_VEC_ELT (packed_args, j);
4228
4229 if (PACK_EXPANSION_P (arg))
4230 {
4231 /* Pack expansions must come at the end of the
4232 argument list. */
4233 if ((packed_args && j < len - 1)
4234 || (!packed_args && i < nargs - 1))
4235 {
4236 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4237 error ("parameter pack argument %qE must be at the "
4238 "end of the template argument list", arg);
4239 else
4240 error ("parameter pack argument %qT must be at the "
4241 "end of the template argument list", arg);
4242 }
4243 }
4244
4245 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4246 /* We only care about the pattern. */
4247 arg = PACK_EXPANSION_PATTERN (arg);
4248
4249 if (/* These first two lines are the `non-type' bit. */
4250 !TYPE_P (arg)
4251 && TREE_CODE (arg) != TEMPLATE_DECL
4252 /* This next two lines are the `argument expression is not just a
4253 simple identifier' condition and also the `specialized
4254 non-type argument' bit. */
4255 && TREE_CODE (arg) != TEMPLATE_PARM_INDEX
4256 && !(REFERENCE_REF_P (arg)
4257 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_PARM_INDEX))
4258 {
4259 if ((!packed_args && tpd.arg_uses_template_parms[i])
4260 || (packed_args && uses_template_parms (arg)))
4261 error ("template argument %qE involves template parameter(s)",
4262 arg);
4263 else
4264 {
4265 /* Look at the corresponding template parameter,
4266 marking which template parameters its type depends
4267 upon. */
4268 tree type = TREE_TYPE (parm);
4269
4270 if (!tpd2.parms)
4271 {
4272 /* We haven't yet initialized TPD2. Do so now. */
4273 tpd2.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4274 /* The number of parameters here is the number in the
4275 main template, which, as checked in the assertion
4276 above, is NARGS. */
4277 tpd2.parms = XALLOCAVEC (int, nargs);
4278 tpd2.level =
4279 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
4280 }
4281
4282 /* Mark the template parameters. But this time, we're
4283 looking for the template parameters of the main
4284 template, not in the specialization. */
4285 tpd2.current_arg = i;
4286 tpd2.arg_uses_template_parms[i] = 0;
4287 memset (tpd2.parms, 0, sizeof (int) * nargs);
4288 for_each_template_parm (type,
4289 &mark_template_parm,
4290 &tpd2,
4291 NULL,
4292 /*include_nondeduced_p=*/false);
4293
4294 if (tpd2.arg_uses_template_parms [i])
4295 {
4296 /* The type depended on some template parameters.
4297 If they are fully specialized in the
4298 specialization, that's OK. */
4299 int j;
4300 int count = 0;
4301 for (j = 0; j < nargs; ++j)
4302 if (tpd2.parms[j] != 0
4303 && tpd.arg_uses_template_parms [j])
4304 ++count;
4305 if (count != 0)
4306 error_n (input_location, count,
4307 "type %qT of template argument %qE depends "
4308 "on a template parameter",
4309 "type %qT of template argument %qE depends "
4310 "on template parameters",
4311 type,
4312 arg);
4313 }
4314 }
4315 }
4316 }
4317 }
4318
4319 /* We should only get here once. */
4320 gcc_assert (!COMPLETE_TYPE_P (type));
4321
4322 tree tmpl = build_template_decl (decl, current_template_parms,
4323 DECL_MEMBER_TEMPLATE_P (maintmpl));
4324 TREE_TYPE (tmpl) = type;
4325 DECL_TEMPLATE_RESULT (tmpl) = decl;
4326 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4327 DECL_TEMPLATE_INFO (tmpl) = build_template_info (maintmpl, specargs);
4328 DECL_PRIMARY_TEMPLATE (tmpl) = maintmpl;
4329
4330 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
4331 = tree_cons (specargs, tmpl,
4332 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
4333 TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
4334
4335 for (inst = DECL_TEMPLATE_INSTANTIATIONS (maintmpl); inst;
4336 inst = TREE_CHAIN (inst))
4337 {
4338 tree inst_type = TREE_VALUE (inst);
4339 if (COMPLETE_TYPE_P (inst_type)
4340 && CLASSTYPE_IMPLICIT_INSTANTIATION (inst_type))
4341 {
4342 tree spec = most_specialized_class (inst_type, tf_none);
4343 if (spec && TREE_TYPE (spec) == type)
4344 permerror (input_location,
4345 "partial specialization of %qT after instantiation "
4346 "of %qT", type, inst_type);
4347 }
4348 }
4349
4350 return decl;
4351 }
4352
4353 /* PARM is a template parameter of some form; return the corresponding
4354 TEMPLATE_PARM_INDEX. */
4355
4356 static tree
4357 get_template_parm_index (tree parm)
4358 {
4359 if (TREE_CODE (parm) == PARM_DECL
4360 || TREE_CODE (parm) == CONST_DECL)
4361 parm = DECL_INITIAL (parm);
4362 else if (TREE_CODE (parm) == TYPE_DECL
4363 || TREE_CODE (parm) == TEMPLATE_DECL)
4364 parm = TREE_TYPE (parm);
4365 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
4366 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
4367 parm = TEMPLATE_TYPE_PARM_INDEX (parm);
4368 gcc_assert (TREE_CODE (parm) == TEMPLATE_PARM_INDEX);
4369 return parm;
4370 }
4371
4372 /* Subroutine of fixed_parameter_pack_p below. Look for any template
4373 parameter packs used by the template parameter PARM. */
4374
4375 static void
4376 fixed_parameter_pack_p_1 (tree parm, struct find_parameter_pack_data *ppd)
4377 {
4378 /* A type parm can't refer to another parm. */
4379 if (TREE_CODE (parm) == TYPE_DECL)
4380 return;
4381 else if (TREE_CODE (parm) == PARM_DECL)
4382 {
4383 cp_walk_tree (&TREE_TYPE (parm), &find_parameter_packs_r,
4384 ppd, ppd->visited);
4385 return;
4386 }
4387
4388 gcc_assert (TREE_CODE (parm) == TEMPLATE_DECL);
4389
4390 tree vec = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (parm));
4391 for (int i = 0; i < TREE_VEC_LENGTH (vec); ++i)
4392 fixed_parameter_pack_p_1 (TREE_VALUE (TREE_VEC_ELT (vec, i)), ppd);
4393 }
4394
4395 /* PARM is a template parameter pack. Return any parameter packs used in
4396 its type or the type of any of its template parameters. If there are
4397 any such packs, it will be instantiated into a fixed template parameter
4398 list by partial instantiation rather than be fully deduced. */
4399
4400 tree
4401 fixed_parameter_pack_p (tree parm)
4402 {
4403 /* This can only be true in a member template. */
4404 if (TEMPLATE_PARM_ORIG_LEVEL (get_template_parm_index (parm)) < 2)
4405 return NULL_TREE;
4406 /* This can only be true for a parameter pack. */
4407 if (!template_parameter_pack_p (parm))
4408 return NULL_TREE;
4409 /* A type parm can't refer to another parm. */
4410 if (TREE_CODE (parm) == TYPE_DECL)
4411 return NULL_TREE;
4412
4413 tree parameter_packs = NULL_TREE;
4414 struct find_parameter_pack_data ppd;
4415 ppd.parameter_packs = &parameter_packs;
4416 ppd.visited = new hash_set<tree>;
4417
4418 fixed_parameter_pack_p_1 (parm, &ppd);
4419
4420 delete ppd.visited;
4421 return parameter_packs;
4422 }
4423
4424 /* Check that a template declaration's use of default arguments and
4425 parameter packs is not invalid. Here, PARMS are the template
4426 parameters. IS_PRIMARY is true if DECL is the thing declared by
4427 a primary template. IS_PARTIAL is true if DECL is a partial
4428 specialization.
4429
4430 IS_FRIEND_DECL is nonzero if DECL is a friend function template
4431 declaration (but not a definition); 1 indicates a declaration, 2
4432 indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
4433 emitted for extraneous default arguments.
4434
4435 Returns TRUE if there were no errors found, FALSE otherwise. */
4436
4437 bool
4438 check_default_tmpl_args (tree decl, tree parms, bool is_primary,
4439 bool is_partial, int is_friend_decl)
4440 {
4441 const char *msg;
4442 int last_level_to_check;
4443 tree parm_level;
4444 bool no_errors = true;
4445
4446 /* [temp.param]
4447
4448 A default template-argument shall not be specified in a
4449 function template declaration or a function template definition, nor
4450 in the template-parameter-list of the definition of a member of a
4451 class template. */
4452
4453 if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL
4454 || (TREE_CODE (decl) == FUNCTION_DECL && DECL_LOCAL_FUNCTION_P (decl)))
4455 /* You can't have a function template declaration in a local
4456 scope, nor you can you define a member of a class template in a
4457 local scope. */
4458 return true;
4459
4460 if ((TREE_CODE (decl) == TYPE_DECL
4461 && TREE_TYPE (decl)
4462 && LAMBDA_TYPE_P (TREE_TYPE (decl)))
4463 || (TREE_CODE (decl) == FUNCTION_DECL
4464 && LAMBDA_FUNCTION_P (decl)))
4465 /* A lambda doesn't have an explicit declaration; don't complain
4466 about the parms of the enclosing class. */
4467 return true;
4468
4469 if (current_class_type
4470 && !TYPE_BEING_DEFINED (current_class_type)
4471 && DECL_LANG_SPECIFIC (decl)
4472 && DECL_DECLARES_FUNCTION_P (decl)
4473 /* If this is either a friend defined in the scope of the class
4474 or a member function. */
4475 && (DECL_FUNCTION_MEMBER_P (decl)
4476 ? same_type_p (DECL_CONTEXT (decl), current_class_type)
4477 : DECL_FRIEND_CONTEXT (decl)
4478 ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
4479 : false)
4480 /* And, if it was a member function, it really was defined in
4481 the scope of the class. */
4482 && (!DECL_FUNCTION_MEMBER_P (decl)
4483 || DECL_INITIALIZED_IN_CLASS_P (decl)))
4484 /* We already checked these parameters when the template was
4485 declared, so there's no need to do it again now. This function
4486 was defined in class scope, but we're processing its body now
4487 that the class is complete. */
4488 return true;
4489
4490 /* Core issue 226 (C++0x only): the following only applies to class
4491 templates. */
4492 if (is_primary
4493 && ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL))
4494 {
4495 /* [temp.param]
4496
4497 If a template-parameter has a default template-argument, all
4498 subsequent template-parameters shall have a default
4499 template-argument supplied. */
4500 for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
4501 {
4502 tree inner_parms = TREE_VALUE (parm_level);
4503 int ntparms = TREE_VEC_LENGTH (inner_parms);
4504 int seen_def_arg_p = 0;
4505 int i;
4506
4507 for (i = 0; i < ntparms; ++i)
4508 {
4509 tree parm = TREE_VEC_ELT (inner_parms, i);
4510
4511 if (parm == error_mark_node)
4512 continue;
4513
4514 if (TREE_PURPOSE (parm))
4515 seen_def_arg_p = 1;
4516 else if (seen_def_arg_p
4517 && !template_parameter_pack_p (TREE_VALUE (parm)))
4518 {
4519 error ("no default argument for %qD", TREE_VALUE (parm));
4520 /* For better subsequent error-recovery, we indicate that
4521 there should have been a default argument. */
4522 TREE_PURPOSE (parm) = error_mark_node;
4523 no_errors = false;
4524 }
4525 else if (!is_partial
4526 && !is_friend_decl
4527 /* Don't complain about an enclosing partial
4528 specialization. */
4529 && parm_level == parms
4530 && TREE_CODE (decl) == TYPE_DECL
4531 && i < ntparms - 1
4532 && template_parameter_pack_p (TREE_VALUE (parm))
4533 /* A fixed parameter pack will be partially
4534 instantiated into a fixed length list. */
4535 && !fixed_parameter_pack_p (TREE_VALUE (parm)))
4536 {
4537 /* A primary class template can only have one
4538 parameter pack, at the end of the template
4539 parameter list. */
4540
4541 if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
4542 error ("parameter pack %qE must be at the end of the"
4543 " template parameter list", TREE_VALUE (parm));
4544 else
4545 error ("parameter pack %qT must be at the end of the"
4546 " template parameter list",
4547 TREE_TYPE (TREE_VALUE (parm)));
4548
4549 TREE_VALUE (TREE_VEC_ELT (inner_parms, i))
4550 = error_mark_node;
4551 no_errors = false;
4552 }
4553 }
4554 }
4555 }
4556
4557 if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
4558 || is_partial
4559 || !is_primary
4560 || is_friend_decl)
4561 /* For an ordinary class template, default template arguments are
4562 allowed at the innermost level, e.g.:
4563 template <class T = int>
4564 struct S {};
4565 but, in a partial specialization, they're not allowed even
4566 there, as we have in [temp.class.spec]:
4567
4568 The template parameter list of a specialization shall not
4569 contain default template argument values.
4570
4571 So, for a partial specialization, or for a function template
4572 (in C++98/C++03), we look at all of them. */
4573 ;
4574 else
4575 /* But, for a primary class template that is not a partial
4576 specialization we look at all template parameters except the
4577 innermost ones. */
4578 parms = TREE_CHAIN (parms);
4579
4580 /* Figure out what error message to issue. */
4581 if (is_friend_decl == 2)
4582 msg = G_("default template arguments may not be used in function template "
4583 "friend re-declaration");
4584 else if (is_friend_decl)
4585 msg = G_("default template arguments may not be used in function template "
4586 "friend declarations");
4587 else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
4588 msg = G_("default template arguments may not be used in function templates "
4589 "without -std=c++11 or -std=gnu++11");
4590 else if (is_partial)
4591 msg = G_("default template arguments may not be used in "
4592 "partial specializations");
4593 else
4594 msg = G_("default argument for template parameter for class enclosing %qD");
4595
4596 if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
4597 /* If we're inside a class definition, there's no need to
4598 examine the parameters to the class itself. On the one
4599 hand, they will be checked when the class is defined, and,
4600 on the other, default arguments are valid in things like:
4601 template <class T = double>
4602 struct S { template <class U> void f(U); };
4603 Here the default argument for `S' has no bearing on the
4604 declaration of `f'. */
4605 last_level_to_check = template_class_depth (current_class_type) + 1;
4606 else
4607 /* Check everything. */
4608 last_level_to_check = 0;
4609
4610 for (parm_level = parms;
4611 parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
4612 parm_level = TREE_CHAIN (parm_level))
4613 {
4614 tree inner_parms = TREE_VALUE (parm_level);
4615 int i;
4616 int ntparms;
4617
4618 ntparms = TREE_VEC_LENGTH (inner_parms);
4619 for (i = 0; i < ntparms; ++i)
4620 {
4621 if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
4622 continue;
4623
4624 if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
4625 {
4626 if (msg)
4627 {
4628 no_errors = false;
4629 if (is_friend_decl == 2)
4630 return no_errors;
4631
4632 error (msg, decl);
4633 msg = 0;
4634 }
4635
4636 /* Clear out the default argument so that we are not
4637 confused later. */
4638 TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
4639 }
4640 }
4641
4642 /* At this point, if we're still interested in issuing messages,
4643 they must apply to classes surrounding the object declared. */
4644 if (msg)
4645 msg = G_("default argument for template parameter for class "
4646 "enclosing %qD");
4647 }
4648
4649 return no_errors;
4650 }
4651
4652 /* Worker for push_template_decl_real, called via
4653 for_each_template_parm. DATA is really an int, indicating the
4654 level of the parameters we are interested in. If T is a template
4655 parameter of that level, return nonzero. */
4656
4657 static int
4658 template_parm_this_level_p (tree t, void* data)
4659 {
4660 int this_level = *(int *)data;
4661 int level;
4662
4663 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4664 level = TEMPLATE_PARM_LEVEL (t);
4665 else
4666 level = TEMPLATE_TYPE_LEVEL (t);
4667 return level == this_level;
4668 }
4669
4670 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
4671 parameters given by current_template_args, or reuses a
4672 previously existing one, if appropriate. Returns the DECL, or an
4673 equivalent one, if it is replaced via a call to duplicate_decls.
4674
4675 If IS_FRIEND is true, DECL is a friend declaration. */
4676
4677 tree
4678 push_template_decl_real (tree decl, bool is_friend)
4679 {
4680 tree tmpl;
4681 tree args;
4682 tree info;
4683 tree ctx;
4684 bool is_primary;
4685 bool is_partial;
4686 int new_template_p = 0;
4687 /* True if the template is a member template, in the sense of
4688 [temp.mem]. */
4689 bool member_template_p = false;
4690
4691 if (decl == error_mark_node || !current_template_parms)
4692 return error_mark_node;
4693
4694 /* See if this is a partial specialization. */
4695 is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
4696 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
4697 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
4698
4699 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
4700 is_friend = true;
4701
4702 if (is_friend)
4703 /* For a friend, we want the context of the friend function, not
4704 the type of which it is a friend. */
4705 ctx = CP_DECL_CONTEXT (decl);
4706 else if (CP_DECL_CONTEXT (decl)
4707 && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4708 /* In the case of a virtual function, we want the class in which
4709 it is defined. */
4710 ctx = CP_DECL_CONTEXT (decl);
4711 else
4712 /* Otherwise, if we're currently defining some class, the DECL
4713 is assumed to be a member of the class. */
4714 ctx = current_scope ();
4715
4716 if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
4717 ctx = NULL_TREE;
4718
4719 if (!DECL_CONTEXT (decl))
4720 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
4721
4722 /* See if this is a primary template. */
4723 if (is_friend && ctx
4724 && uses_template_parms_level (ctx, processing_template_decl))
4725 /* A friend template that specifies a class context, i.e.
4726 template <typename T> friend void A<T>::f();
4727 is not primary. */
4728 is_primary = false;
4729 else if (TREE_CODE (decl) == TYPE_DECL
4730 && LAMBDA_TYPE_P (TREE_TYPE (decl)))
4731 is_primary = false;
4732 else
4733 is_primary = template_parm_scope_p ();
4734
4735 if (is_primary)
4736 {
4737 if (DECL_CLASS_SCOPE_P (decl))
4738 member_template_p = true;
4739 if (TREE_CODE (decl) == TYPE_DECL
4740 && ANON_AGGRNAME_P (DECL_NAME (decl)))
4741 {
4742 error ("template class without a name");
4743 return error_mark_node;
4744 }
4745 else if (TREE_CODE (decl) == FUNCTION_DECL)
4746 {
4747 if (member_template_p)
4748 {
4749 if (DECL_OVERRIDE_P (decl) || DECL_FINAL_P (decl))
4750 error ("member template %qD may not have virt-specifiers", decl);
4751 }
4752 if (DECL_DESTRUCTOR_P (decl))
4753 {
4754 /* [temp.mem]
4755
4756 A destructor shall not be a member template. */
4757 error ("destructor %qD declared as member template", decl);
4758 return error_mark_node;
4759 }
4760 if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
4761 && (!prototype_p (TREE_TYPE (decl))
4762 || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
4763 || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
4764 || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
4765 == void_list_node)))
4766 {
4767 /* [basic.stc.dynamic.allocation]
4768
4769 An allocation function can be a function
4770 template. ... Template allocation functions shall
4771 have two or more parameters. */
4772 error ("invalid template declaration of %qD", decl);
4773 return error_mark_node;
4774 }
4775 }
4776 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4777 && CLASS_TYPE_P (TREE_TYPE (decl)))
4778 /* OK */;
4779 else if (TREE_CODE (decl) == TYPE_DECL
4780 && TYPE_DECL_ALIAS_P (decl))
4781 /* alias-declaration */
4782 gcc_assert (!DECL_ARTIFICIAL (decl));
4783 else if (VAR_P (decl))
4784 /* C++14 variable template. */;
4785 else
4786 {
4787 error ("template declaration of %q#D", decl);
4788 return error_mark_node;
4789 }
4790 }
4791
4792 /* Check to see that the rules regarding the use of default
4793 arguments are not being violated. */
4794 check_default_tmpl_args (decl, current_template_parms,
4795 is_primary, is_partial, /*is_friend_decl=*/0);
4796
4797 /* Ensure that there are no parameter packs in the type of this
4798 declaration that have not been expanded. */
4799 if (TREE_CODE (decl) == FUNCTION_DECL)
4800 {
4801 /* Check each of the arguments individually to see if there are
4802 any bare parameter packs. */
4803 tree type = TREE_TYPE (decl);
4804 tree arg = DECL_ARGUMENTS (decl);
4805 tree argtype = TYPE_ARG_TYPES (type);
4806
4807 while (arg && argtype)
4808 {
4809 if (!DECL_PACK_P (arg)
4810 && check_for_bare_parameter_packs (TREE_TYPE (arg)))
4811 {
4812 /* This is a PARM_DECL that contains unexpanded parameter
4813 packs. We have already complained about this in the
4814 check_for_bare_parameter_packs call, so just replace
4815 these types with ERROR_MARK_NODE. */
4816 TREE_TYPE (arg) = error_mark_node;
4817 TREE_VALUE (argtype) = error_mark_node;
4818 }
4819
4820 arg = DECL_CHAIN (arg);
4821 argtype = TREE_CHAIN (argtype);
4822 }
4823
4824 /* Check for bare parameter packs in the return type and the
4825 exception specifiers. */
4826 if (check_for_bare_parameter_packs (TREE_TYPE (type)))
4827 /* Errors were already issued, set return type to int
4828 as the frontend doesn't expect error_mark_node as
4829 the return type. */
4830 TREE_TYPE (type) = integer_type_node;
4831 if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
4832 TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
4833 }
4834 else if (check_for_bare_parameter_packs ((TREE_CODE (decl) == TYPE_DECL
4835 && TYPE_DECL_ALIAS_P (decl))
4836 ? DECL_ORIGINAL_TYPE (decl)
4837 : TREE_TYPE (decl)))
4838 {
4839 TREE_TYPE (decl) = error_mark_node;
4840 return error_mark_node;
4841 }
4842
4843 if (is_partial)
4844 return process_partial_specialization (decl);
4845
4846 args = current_template_args ();
4847
4848 if (!ctx
4849 || TREE_CODE (ctx) == FUNCTION_DECL
4850 || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
4851 || (TREE_CODE (decl) == TYPE_DECL
4852 && LAMBDA_TYPE_P (TREE_TYPE (decl)))
4853 || (is_friend && !DECL_TEMPLATE_INFO (decl)))
4854 {
4855 if (DECL_LANG_SPECIFIC (decl)
4856 && DECL_TEMPLATE_INFO (decl)
4857 && DECL_TI_TEMPLATE (decl))
4858 tmpl = DECL_TI_TEMPLATE (decl);
4859 /* If DECL is a TYPE_DECL for a class-template, then there won't
4860 be DECL_LANG_SPECIFIC. The information equivalent to
4861 DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead. */
4862 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4863 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
4864 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
4865 {
4866 /* Since a template declaration already existed for this
4867 class-type, we must be redeclaring it here. Make sure
4868 that the redeclaration is valid. */
4869 redeclare_class_template (TREE_TYPE (decl),
4870 current_template_parms);
4871 /* We don't need to create a new TEMPLATE_DECL; just use the
4872 one we already had. */
4873 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
4874 }
4875 else
4876 {
4877 tmpl = build_template_decl (decl, current_template_parms,
4878 member_template_p);
4879 new_template_p = 1;
4880
4881 if (DECL_LANG_SPECIFIC (decl)
4882 && DECL_TEMPLATE_SPECIALIZATION (decl))
4883 {
4884 /* A specialization of a member template of a template
4885 class. */
4886 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4887 DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
4888 DECL_TEMPLATE_INFO (decl) = NULL_TREE;
4889 }
4890 }
4891 }
4892 else
4893 {
4894 tree a, t, current, parms;
4895 int i;
4896 tree tinfo = get_template_info (decl);
4897
4898 if (!tinfo)
4899 {
4900 error ("template definition of non-template %q#D", decl);
4901 return error_mark_node;
4902 }
4903
4904 tmpl = TI_TEMPLATE (tinfo);
4905
4906 if (DECL_FUNCTION_TEMPLATE_P (tmpl)
4907 && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
4908 && DECL_TEMPLATE_SPECIALIZATION (decl)
4909 && DECL_MEMBER_TEMPLATE_P (tmpl))
4910 {
4911 tree new_tmpl;
4912
4913 /* The declaration is a specialization of a member
4914 template, declared outside the class. Therefore, the
4915 innermost template arguments will be NULL, so we
4916 replace them with the arguments determined by the
4917 earlier call to check_explicit_specialization. */
4918 args = DECL_TI_ARGS (decl);
4919
4920 new_tmpl
4921 = build_template_decl (decl, current_template_parms,
4922 member_template_p);
4923 DECL_TEMPLATE_RESULT (new_tmpl) = decl;
4924 TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
4925 DECL_TI_TEMPLATE (decl) = new_tmpl;
4926 SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
4927 DECL_TEMPLATE_INFO (new_tmpl)
4928 = build_template_info (tmpl, args);
4929
4930 register_specialization (new_tmpl,
4931 most_general_template (tmpl),
4932 args,
4933 is_friend, 0);
4934 return decl;
4935 }
4936
4937 /* Make sure the template headers we got make sense. */
4938
4939 parms = DECL_TEMPLATE_PARMS (tmpl);
4940 i = TMPL_PARMS_DEPTH (parms);
4941 if (TMPL_ARGS_DEPTH (args) != i)
4942 {
4943 error ("expected %d levels of template parms for %q#D, got %d",
4944 i, decl, TMPL_ARGS_DEPTH (args));
4945 DECL_INTERFACE_KNOWN (decl) = 1;
4946 return error_mark_node;
4947 }
4948 else
4949 for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
4950 {
4951 a = TMPL_ARGS_LEVEL (args, i);
4952 t = INNERMOST_TEMPLATE_PARMS (parms);
4953
4954 if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
4955 {
4956 if (current == decl)
4957 error ("got %d template parameters for %q#D",
4958 TREE_VEC_LENGTH (a), decl);
4959 else
4960 error ("got %d template parameters for %q#T",
4961 TREE_VEC_LENGTH (a), current);
4962 error (" but %d required", TREE_VEC_LENGTH (t));
4963 /* Avoid crash in import_export_decl. */
4964 DECL_INTERFACE_KNOWN (decl) = 1;
4965 return error_mark_node;
4966 }
4967
4968 if (current == decl)
4969 current = ctx;
4970 else if (current == NULL_TREE)
4971 /* Can happen in erroneous input. */
4972 break;
4973 else
4974 current = get_containing_scope (current);
4975 }
4976
4977 /* Check that the parms are used in the appropriate qualifying scopes
4978 in the declarator. */
4979 if (!comp_template_args
4980 (TI_ARGS (tinfo),
4981 TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
4982 {
4983 error ("\
4984 template arguments to %qD do not match original template %qD",
4985 decl, DECL_TEMPLATE_RESULT (tmpl));
4986 if (!uses_template_parms (TI_ARGS (tinfo)))
4987 inform (input_location, "use template<> for an explicit specialization");
4988 /* Avoid crash in import_export_decl. */
4989 DECL_INTERFACE_KNOWN (decl) = 1;
4990 return error_mark_node;
4991 }
4992 }
4993
4994 DECL_TEMPLATE_RESULT (tmpl) = decl;
4995 TREE_TYPE (tmpl) = TREE_TYPE (decl);
4996
4997 /* Push template declarations for global functions and types. Note
4998 that we do not try to push a global template friend declared in a
4999 template class; such a thing may well depend on the template
5000 parameters of the class. */
5001 if (new_template_p && !ctx
5002 && !(is_friend && template_class_depth (current_class_type) > 0))
5003 {
5004 tmpl = pushdecl_namespace_level (tmpl, is_friend);
5005 if (tmpl == error_mark_node)
5006 return error_mark_node;
5007
5008 /* Hide template friend classes that haven't been declared yet. */
5009 if (is_friend && TREE_CODE (decl) == TYPE_DECL)
5010 {
5011 DECL_ANTICIPATED (tmpl) = 1;
5012 DECL_FRIEND_P (tmpl) = 1;
5013 }
5014 }
5015
5016 if (is_primary)
5017 {
5018 tree parms = DECL_TEMPLATE_PARMS (tmpl);
5019 int i;
5020
5021 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
5022 if (DECL_CONV_FN_P (tmpl))
5023 {
5024 int depth = TMPL_PARMS_DEPTH (parms);
5025
5026 /* It is a conversion operator. See if the type converted to
5027 depends on innermost template operands. */
5028
5029 if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
5030 depth))
5031 DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
5032 }
5033
5034 /* Give template template parms a DECL_CONTEXT of the template
5035 for which they are a parameter. */
5036 parms = INNERMOST_TEMPLATE_PARMS (parms);
5037 for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
5038 {
5039 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5040 if (TREE_CODE (parm) == TEMPLATE_DECL)
5041 DECL_CONTEXT (parm) = tmpl;
5042 }
5043 }
5044
5045 /* The DECL_TI_ARGS of DECL contains full set of arguments referring
5046 back to its most general template. If TMPL is a specialization,
5047 ARGS may only have the innermost set of arguments. Add the missing
5048 argument levels if necessary. */
5049 if (DECL_TEMPLATE_INFO (tmpl))
5050 args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
5051
5052 info = build_template_info (tmpl, args);
5053
5054 if (DECL_IMPLICIT_TYPEDEF_P (decl))
5055 SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
5056 else
5057 {
5058 if (is_primary && !DECL_LANG_SPECIFIC (decl))
5059 retrofit_lang_decl (decl);
5060 if (DECL_LANG_SPECIFIC (decl))
5061 DECL_TEMPLATE_INFO (decl) = info;
5062 }
5063
5064 if (flag_implicit_templates
5065 && !is_friend
5066 && TREE_PUBLIC (decl)
5067 && VAR_OR_FUNCTION_DECL_P (decl))
5068 /* Set DECL_COMDAT on template instantiations; if we force
5069 them to be emitted by explicit instantiation or -frepo,
5070 mark_needed will tell cgraph to do the right thing. */
5071 DECL_COMDAT (decl) = true;
5072
5073 return DECL_TEMPLATE_RESULT (tmpl);
5074 }
5075
5076 tree
5077 push_template_decl (tree decl)
5078 {
5079 return push_template_decl_real (decl, false);
5080 }
5081
5082 /* FN is an inheriting constructor that inherits from the constructor
5083 template INHERITED; turn FN into a constructor template with a matching
5084 template header. */
5085
5086 tree
5087 add_inherited_template_parms (tree fn, tree inherited)
5088 {
5089 tree inner_parms
5090 = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (inherited));
5091 inner_parms = copy_node (inner_parms);
5092 tree parms
5093 = tree_cons (size_int (processing_template_decl + 1),
5094 inner_parms, current_template_parms);
5095 tree tmpl = build_template_decl (fn, parms, /*member*/true);
5096 tree args = template_parms_to_args (parms);
5097 DECL_TEMPLATE_INFO (fn) = build_template_info (tmpl, args);
5098 TREE_TYPE (tmpl) = TREE_TYPE (fn);
5099 DECL_TEMPLATE_RESULT (tmpl) = fn;
5100 DECL_ARTIFICIAL (tmpl) = true;
5101 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
5102 return tmpl;
5103 }
5104
5105 /* Called when a class template TYPE is redeclared with the indicated
5106 template PARMS, e.g.:
5107
5108 template <class T> struct S;
5109 template <class T> struct S {}; */
5110
5111 bool
5112 redeclare_class_template (tree type, tree parms)
5113 {
5114 tree tmpl;
5115 tree tmpl_parms;
5116 int i;
5117
5118 if (!TYPE_TEMPLATE_INFO (type))
5119 {
5120 error ("%qT is not a template type", type);
5121 return false;
5122 }
5123
5124 tmpl = TYPE_TI_TEMPLATE (type);
5125 if (!PRIMARY_TEMPLATE_P (tmpl))
5126 /* The type is nested in some template class. Nothing to worry
5127 about here; there are no new template parameters for the nested
5128 type. */
5129 return true;
5130
5131 if (!parms)
5132 {
5133 error ("template specifiers not specified in declaration of %qD",
5134 tmpl);
5135 return false;
5136 }
5137
5138 parms = INNERMOST_TEMPLATE_PARMS (parms);
5139 tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
5140
5141 if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
5142 {
5143 error_n (input_location, TREE_VEC_LENGTH (parms),
5144 "redeclared with %d template parameter",
5145 "redeclared with %d template parameters",
5146 TREE_VEC_LENGTH (parms));
5147 inform_n (input_location, TREE_VEC_LENGTH (tmpl_parms),
5148 "previous declaration %q+D used %d template parameter",
5149 "previous declaration %q+D used %d template parameters",
5150 tmpl, TREE_VEC_LENGTH (tmpl_parms));
5151 return false;
5152 }
5153
5154 for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
5155 {
5156 tree tmpl_parm;
5157 tree parm;
5158 tree tmpl_default;
5159 tree parm_default;
5160
5161 if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
5162 || TREE_VEC_ELT (parms, i) == error_mark_node)
5163 continue;
5164
5165 tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
5166 if (error_operand_p (tmpl_parm))
5167 return false;
5168
5169 parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5170 tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
5171 parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
5172
5173 /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
5174 TEMPLATE_DECL. */
5175 if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
5176 || (TREE_CODE (tmpl_parm) != TYPE_DECL
5177 && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
5178 || (TREE_CODE (tmpl_parm) != PARM_DECL
5179 && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
5180 != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
5181 || (TREE_CODE (tmpl_parm) == PARM_DECL
5182 && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
5183 != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))))
5184 {
5185 error ("template parameter %q+#D", tmpl_parm);
5186 error ("redeclared here as %q#D", parm);
5187 return false;
5188 }
5189
5190 if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
5191 {
5192 /* We have in [temp.param]:
5193
5194 A template-parameter may not be given default arguments
5195 by two different declarations in the same scope. */
5196 error_at (input_location, "redefinition of default argument for %q#D", parm);
5197 inform (DECL_SOURCE_LOCATION (tmpl_parm),
5198 "original definition appeared here");
5199 return false;
5200 }
5201
5202 if (parm_default != NULL_TREE)
5203 /* Update the previous template parameters (which are the ones
5204 that will really count) with the new default value. */
5205 TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
5206 else if (tmpl_default != NULL_TREE)
5207 /* Update the new parameters, too; they'll be used as the
5208 parameters for any members. */
5209 TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
5210 }
5211
5212 return true;
5213 }
5214
5215 /* Simplify EXPR if it is a non-dependent expression. Returns the
5216 (possibly simplified) expression. */
5217
5218 tree
5219 fold_non_dependent_expr_sfinae (tree expr, tsubst_flags_t complain)
5220 {
5221 if (expr == NULL_TREE)
5222 return NULL_TREE;
5223
5224 /* If we're in a template, but EXPR isn't value dependent, simplify
5225 it. We're supposed to treat:
5226
5227 template <typename T> void f(T[1 + 1]);
5228 template <typename T> void f(T[2]);
5229
5230 as two declarations of the same function, for example. */
5231 if (processing_template_decl
5232 && !instantiation_dependent_expression_p (expr)
5233 && potential_constant_expression (expr))
5234 {
5235 HOST_WIDE_INT saved_processing_template_decl;
5236
5237 saved_processing_template_decl = processing_template_decl;
5238 processing_template_decl = 0;
5239 expr = tsubst_copy_and_build (expr,
5240 /*args=*/NULL_TREE,
5241 complain,
5242 /*in_decl=*/NULL_TREE,
5243 /*function_p=*/false,
5244 /*integral_constant_expression_p=*/true);
5245 processing_template_decl = saved_processing_template_decl;
5246 }
5247 return expr;
5248 }
5249
5250 tree
5251 fold_non_dependent_expr (tree expr)
5252 {
5253 return fold_non_dependent_expr_sfinae (expr, tf_error);
5254 }
5255
5256 /* Return TRUE iff T is a type alias, a TEMPLATE_DECL for an alias
5257 template declaration, or a TYPE_DECL for an alias declaration. */
5258
5259 bool
5260 alias_type_or_template_p (tree t)
5261 {
5262 if (t == NULL_TREE)
5263 return false;
5264 return ((TREE_CODE (t) == TYPE_DECL && TYPE_DECL_ALIAS_P (t))
5265 || (TYPE_P (t)
5266 && TYPE_NAME (t)
5267 && TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
5268 || DECL_ALIAS_TEMPLATE_P (t));
5269 }
5270
5271 /* Return TRUE iff is a specialization of an alias template. */
5272
5273 bool
5274 alias_template_specialization_p (const_tree t)
5275 {
5276 if (t == NULL_TREE)
5277 return false;
5278
5279 return (TYPE_P (t)
5280 && TYPE_TEMPLATE_INFO (t)
5281 && PRIMARY_TEMPLATE_P (TYPE_TI_TEMPLATE (t))
5282 && DECL_ALIAS_TEMPLATE_P (TYPE_TI_TEMPLATE (t)));
5283 }
5284
5285 /* Return the number of innermost template parameters in TMPL. */
5286
5287 static int
5288 num_innermost_template_parms (tree tmpl)
5289 {
5290 tree parms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (tmpl));
5291 return TREE_VEC_LENGTH (parms);
5292 }
5293
5294 /* Return either TMPL or another template that it is equivalent to under DR
5295 1286: An alias that just changes the name of a template is equivalent to
5296 the other template. */
5297
5298 static tree
5299 get_underlying_template (tree tmpl)
5300 {
5301 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
5302 while (DECL_ALIAS_TEMPLATE_P (tmpl))
5303 {
5304 tree result = DECL_ORIGINAL_TYPE (DECL_TEMPLATE_RESULT (tmpl));
5305 if (TYPE_TEMPLATE_INFO (result))
5306 {
5307 tree sub = TYPE_TI_TEMPLATE (result);
5308 if (PRIMARY_TEMPLATE_P (sub)
5309 && (num_innermost_template_parms (tmpl)
5310 == num_innermost_template_parms (sub)))
5311 {
5312 tree alias_args = INNERMOST_TEMPLATE_ARGS
5313 (template_parms_to_args (DECL_TEMPLATE_PARMS (tmpl)));
5314 if (!comp_template_args (TYPE_TI_ARGS (result), alias_args))
5315 break;
5316 /* The alias type is equivalent to the pattern of the
5317 underlying template, so strip the alias. */
5318 tmpl = sub;
5319 continue;
5320 }
5321 }
5322 break;
5323 }
5324 return tmpl;
5325 }
5326
5327 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
5328 must be a function or a pointer-to-function type, as specified
5329 in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
5330 and check that the resulting function has external linkage. */
5331
5332 static tree
5333 convert_nontype_argument_function (tree type, tree expr,
5334 tsubst_flags_t complain)
5335 {
5336 tree fns = expr;
5337 tree fn, fn_no_ptr;
5338 linkage_kind linkage;
5339
5340 fn = instantiate_type (type, fns, tf_none);
5341 if (fn == error_mark_node)
5342 return error_mark_node;
5343
5344 fn_no_ptr = fn;
5345 if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
5346 fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
5347 if (BASELINK_P (fn_no_ptr))
5348 fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
5349
5350 /* [temp.arg.nontype]/1
5351
5352 A template-argument for a non-type, non-template template-parameter
5353 shall be one of:
5354 [...]
5355 -- the address of an object or function with external [C++11: or
5356 internal] linkage. */
5357
5358 if (TREE_CODE (fn_no_ptr) != FUNCTION_DECL)
5359 {
5360 if (complain & tf_error)
5361 {
5362 error ("%qE is not a valid template argument for type %qT",
5363 expr, type);
5364 if (TYPE_PTR_P (type))
5365 error ("it must be the address of a function with "
5366 "external linkage");
5367 else
5368 error ("it must be the name of a function with "
5369 "external linkage");
5370 }
5371 return NULL_TREE;
5372 }
5373
5374 linkage = decl_linkage (fn_no_ptr);
5375 if (cxx_dialect >= cxx11 ? linkage == lk_none : linkage != lk_external)
5376 {
5377 if (complain & tf_error)
5378 {
5379 if (cxx_dialect >= cxx11)
5380 error ("%qE is not a valid template argument for type %qT "
5381 "because %qD has no linkage",
5382 expr, type, fn_no_ptr);
5383 else
5384 error ("%qE is not a valid template argument for type %qT "
5385 "because %qD does not have external linkage",
5386 expr, type, fn_no_ptr);
5387 }
5388 return NULL_TREE;
5389 }
5390
5391 return fn;
5392 }
5393
5394 /* Subroutine of convert_nontype_argument.
5395 Check if EXPR of type TYPE is a valid pointer-to-member constant.
5396 Emit an error otherwise. */
5397
5398 static bool
5399 check_valid_ptrmem_cst_expr (tree type, tree expr,
5400 tsubst_flags_t complain)
5401 {
5402 STRIP_NOPS (expr);
5403 if (expr && (null_ptr_cst_p (expr) || TREE_CODE (expr) == PTRMEM_CST))
5404 return true;
5405 if (cxx_dialect >= cxx11 && null_member_pointer_value_p (expr))
5406 return true;
5407 if (processing_template_decl
5408 && TREE_CODE (expr) == ADDR_EXPR
5409 && TREE_CODE (TREE_OPERAND (expr, 0)) == OFFSET_REF)
5410 return true;
5411 if (complain & tf_error)
5412 {
5413 error ("%qE is not a valid template argument for type %qT",
5414 expr, type);
5415 error ("it must be a pointer-to-member of the form %<&X::Y%>");
5416 }
5417 return false;
5418 }
5419
5420 /* Returns TRUE iff the address of OP is value-dependent.
5421
5422 14.6.2.4 [temp.dep.temp]:
5423 A non-integral non-type template-argument is dependent if its type is
5424 dependent or it has either of the following forms
5425 qualified-id
5426 & qualified-id
5427 and contains a nested-name-specifier which specifies a class-name that
5428 names a dependent type.
5429
5430 We generalize this to just say that the address of a member of a
5431 dependent class is value-dependent; the above doesn't cover the
5432 address of a static data member named with an unqualified-id. */
5433
5434 static bool
5435 has_value_dependent_address (tree op)
5436 {
5437 /* We could use get_inner_reference here, but there's no need;
5438 this is only relevant for template non-type arguments, which
5439 can only be expressed as &id-expression. */
5440 if (DECL_P (op))
5441 {
5442 tree ctx = CP_DECL_CONTEXT (op);
5443 if (TYPE_P (ctx) && dependent_type_p (ctx))
5444 return true;
5445 }
5446
5447 return false;
5448 }
5449
5450 /* The next set of functions are used for providing helpful explanatory
5451 diagnostics for failed overload resolution. Their messages should be
5452 indented by two spaces for consistency with the messages in
5453 call.c */
5454
5455 static int
5456 unify_success (bool /*explain_p*/)
5457 {
5458 return 0;
5459 }
5460
5461 static int
5462 unify_parameter_deduction_failure (bool explain_p, tree parm)
5463 {
5464 if (explain_p)
5465 inform (input_location,
5466 " couldn't deduce template parameter %qD", parm);
5467 return 1;
5468 }
5469
5470 static int
5471 unify_invalid (bool /*explain_p*/)
5472 {
5473 return 1;
5474 }
5475
5476 static int
5477 unify_cv_qual_mismatch (bool explain_p, tree parm, tree arg)
5478 {
5479 if (explain_p)
5480 inform (input_location,
5481 " types %qT and %qT have incompatible cv-qualifiers",
5482 parm, arg);
5483 return 1;
5484 }
5485
5486 static int
5487 unify_type_mismatch (bool explain_p, tree parm, tree arg)
5488 {
5489 if (explain_p)
5490 inform (input_location, " mismatched types %qT and %qT", parm, arg);
5491 return 1;
5492 }
5493
5494 static int
5495 unify_parameter_pack_mismatch (bool explain_p, tree parm, tree arg)
5496 {
5497 if (explain_p)
5498 inform (input_location,
5499 " template parameter %qD is not a parameter pack, but "
5500 "argument %qD is",
5501 parm, arg);
5502 return 1;
5503 }
5504
5505 static int
5506 unify_ptrmem_cst_mismatch (bool explain_p, tree parm, tree arg)
5507 {
5508 if (explain_p)
5509 inform (input_location,
5510 " template argument %qE does not match "
5511 "pointer-to-member constant %qE",
5512 arg, parm);
5513 return 1;
5514 }
5515
5516 static int
5517 unify_expression_unequal (bool explain_p, tree parm, tree arg)
5518 {
5519 if (explain_p)
5520 inform (input_location, " %qE is not equivalent to %qE", parm, arg);
5521 return 1;
5522 }
5523
5524 static int
5525 unify_parameter_pack_inconsistent (bool explain_p, tree old_arg, tree new_arg)
5526 {
5527 if (explain_p)
5528 inform (input_location,
5529 " inconsistent parameter pack deduction with %qT and %qT",
5530 old_arg, new_arg);
5531 return 1;
5532 }
5533
5534 static int
5535 unify_inconsistency (bool explain_p, tree parm, tree first, tree second)
5536 {
5537 if (explain_p)
5538 {
5539 if (TYPE_P (parm))
5540 inform (input_location,
5541 " deduced conflicting types for parameter %qT (%qT and %qT)",
5542 parm, first, second);
5543 else
5544 inform (input_location,
5545 " deduced conflicting values for non-type parameter "
5546 "%qE (%qE and %qE)", parm, first, second);
5547 }
5548 return 1;
5549 }
5550
5551 static int
5552 unify_vla_arg (bool explain_p, tree arg)
5553 {
5554 if (explain_p)
5555 inform (input_location,
5556 " variable-sized array type %qT is not "
5557 "a valid template argument",
5558 arg);
5559 return 1;
5560 }
5561
5562 static int
5563 unify_method_type_error (bool explain_p, tree arg)
5564 {
5565 if (explain_p)
5566 inform (input_location,
5567 " member function type %qT is not a valid template argument",
5568 arg);
5569 return 1;
5570 }
5571
5572 static int
5573 unify_arity (bool explain_p, int have, int wanted, bool least_p = false)
5574 {
5575 if (explain_p)
5576 {
5577 if (least_p)
5578 inform_n (input_location, wanted,
5579 " candidate expects at least %d argument, %d provided",
5580 " candidate expects at least %d arguments, %d provided",
5581 wanted, have);
5582 else
5583 inform_n (input_location, wanted,
5584 " candidate expects %d argument, %d provided",
5585 " candidate expects %d arguments, %d provided",
5586 wanted, have);
5587 }
5588 return 1;
5589 }
5590
5591 static int
5592 unify_too_many_arguments (bool explain_p, int have, int wanted)
5593 {
5594 return unify_arity (explain_p, have, wanted);
5595 }
5596
5597 static int
5598 unify_too_few_arguments (bool explain_p, int have, int wanted,
5599 bool least_p = false)
5600 {
5601 return unify_arity (explain_p, have, wanted, least_p);
5602 }
5603
5604 static int
5605 unify_arg_conversion (bool explain_p, tree to_type,
5606 tree from_type, tree arg)
5607 {
5608 if (explain_p)
5609 inform (EXPR_LOC_OR_LOC (arg, input_location),
5610 " cannot convert %qE (type %qT) to type %qT",
5611 arg, from_type, to_type);
5612 return 1;
5613 }
5614
5615 static int
5616 unify_no_common_base (bool explain_p, enum template_base_result r,
5617 tree parm, tree arg)
5618 {
5619 if (explain_p)
5620 switch (r)
5621 {
5622 case tbr_ambiguous_baseclass:
5623 inform (input_location, " %qT is an ambiguous base class of %qT",
5624 parm, arg);
5625 break;
5626 default:
5627 inform (input_location, " %qT is not derived from %qT", arg, parm);
5628 break;
5629 }
5630 return 1;
5631 }
5632
5633 static int
5634 unify_inconsistent_template_template_parameters (bool explain_p)
5635 {
5636 if (explain_p)
5637 inform (input_location,
5638 " template parameters of a template template argument are "
5639 "inconsistent with other deduced template arguments");
5640 return 1;
5641 }
5642
5643 static int
5644 unify_template_deduction_failure (bool explain_p, tree parm, tree arg)
5645 {
5646 if (explain_p)
5647 inform (input_location,
5648 " can't deduce a template for %qT from non-template type %qT",
5649 parm, arg);
5650 return 1;
5651 }
5652
5653 static int
5654 unify_template_argument_mismatch (bool explain_p, tree parm, tree arg)
5655 {
5656 if (explain_p)
5657 inform (input_location,
5658 " template argument %qE does not match %qD", arg, parm);
5659 return 1;
5660 }
5661
5662 static int
5663 unify_overload_resolution_failure (bool explain_p, tree arg)
5664 {
5665 if (explain_p)
5666 inform (input_location,
5667 " could not resolve address from overloaded function %qE",
5668 arg);
5669 return 1;
5670 }
5671
5672 /* Attempt to convert the non-type template parameter EXPR to the
5673 indicated TYPE. If the conversion is successful, return the
5674 converted value. If the conversion is unsuccessful, return
5675 NULL_TREE if we issued an error message, or error_mark_node if we
5676 did not. We issue error messages for out-and-out bad template
5677 parameters, but not simply because the conversion failed, since we
5678 might be just trying to do argument deduction. Both TYPE and EXPR
5679 must be non-dependent.
5680
5681 The conversion follows the special rules described in
5682 [temp.arg.nontype], and it is much more strict than an implicit
5683 conversion.
5684
5685 This function is called twice for each template argument (see
5686 lookup_template_class for a more accurate description of this
5687 problem). This means that we need to handle expressions which
5688 are not valid in a C++ source, but can be created from the
5689 first call (for instance, casts to perform conversions). These
5690 hacks can go away after we fix the double coercion problem. */
5691
5692 static tree
5693 convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
5694 {
5695 tree expr_type;
5696
5697 /* Detect immediately string literals as invalid non-type argument.
5698 This special-case is not needed for correctness (we would easily
5699 catch this later), but only to provide better diagnostic for this
5700 common user mistake. As suggested by DR 100, we do not mention
5701 linkage issues in the diagnostic as this is not the point. */
5702 /* FIXME we're making this OK. */
5703 if (TREE_CODE (expr) == STRING_CST)
5704 {
5705 if (complain & tf_error)
5706 error ("%qE is not a valid template argument for type %qT "
5707 "because string literals can never be used in this context",
5708 expr, type);
5709 return NULL_TREE;
5710 }
5711
5712 /* Add the ADDR_EXPR now for the benefit of
5713 value_dependent_expression_p. */
5714 if (TYPE_PTROBV_P (type)
5715 && TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE)
5716 {
5717 expr = decay_conversion (expr, complain);
5718 if (expr == error_mark_node)
5719 return error_mark_node;
5720 }
5721
5722 /* If we are in a template, EXPR may be non-dependent, but still
5723 have a syntactic, rather than semantic, form. For example, EXPR
5724 might be a SCOPE_REF, rather than the VAR_DECL to which the
5725 SCOPE_REF refers. Preserving the qualifying scope is necessary
5726 so that access checking can be performed when the template is
5727 instantiated -- but here we need the resolved form so that we can
5728 convert the argument. */
5729 if (TYPE_REF_OBJ_P (type)
5730 && has_value_dependent_address (expr))
5731 /* If we want the address and it's value-dependent, don't fold. */;
5732 else if (!type_unknown_p (expr))
5733 expr = fold_non_dependent_expr_sfinae (expr, complain);
5734 if (error_operand_p (expr))
5735 return error_mark_node;
5736 expr_type = TREE_TYPE (expr);
5737 if (TREE_CODE (type) == REFERENCE_TYPE)
5738 expr = mark_lvalue_use (expr);
5739 else
5740 expr = mark_rvalue_use (expr);
5741
5742 /* 14.3.2/5: The null pointer{,-to-member} conversion is applied
5743 to a non-type argument of "nullptr". */
5744 if (expr == nullptr_node && TYPE_PTR_OR_PTRMEM_P (type))
5745 expr = convert (type, expr);
5746
5747 /* In C++11, integral or enumeration non-type template arguments can be
5748 arbitrary constant expressions. Pointer and pointer to
5749 member arguments can be general constant expressions that evaluate
5750 to a null value, but otherwise still need to be of a specific form. */
5751 if (cxx_dialect >= cxx11)
5752 {
5753 if (TREE_CODE (expr) == PTRMEM_CST)
5754 /* A PTRMEM_CST is already constant, and a valid template
5755 argument for a parameter of pointer to member type, we just want
5756 to leave it in that form rather than lower it to a
5757 CONSTRUCTOR. */;
5758 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5759 expr = maybe_constant_value (expr);
5760 else if (TYPE_PTR_OR_PTRMEM_P (type))
5761 {
5762 tree folded = maybe_constant_value (expr);
5763 if (TYPE_PTR_P (type) ? integer_zerop (folded)
5764 : null_member_pointer_value_p (folded))
5765 expr = folded;
5766 }
5767 }
5768
5769 /* HACK: Due to double coercion, we can get a
5770 NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
5771 which is the tree that we built on the first call (see
5772 below when coercing to reference to object or to reference to
5773 function). We just strip everything and get to the arg.
5774 See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
5775 for examples. */
5776 if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
5777 {
5778 tree probe_type, probe = expr;
5779 if (REFERENCE_REF_P (probe))
5780 probe = TREE_OPERAND (probe, 0);
5781 probe_type = TREE_TYPE (probe);
5782 if (TREE_CODE (probe) == NOP_EXPR)
5783 {
5784 /* ??? Maybe we could use convert_from_reference here, but we
5785 would need to relax its constraints because the NOP_EXPR
5786 could actually change the type to something more cv-qualified,
5787 and this is not folded by convert_from_reference. */
5788 tree addr = TREE_OPERAND (probe, 0);
5789 if (TREE_CODE (probe_type) == REFERENCE_TYPE
5790 && TREE_CODE (addr) == ADDR_EXPR
5791 && TYPE_PTR_P (TREE_TYPE (addr))
5792 && (same_type_ignoring_top_level_qualifiers_p
5793 (TREE_TYPE (probe_type),
5794 TREE_TYPE (TREE_TYPE (addr)))))
5795 {
5796 expr = TREE_OPERAND (addr, 0);
5797 expr_type = TREE_TYPE (probe_type);
5798 }
5799 }
5800 }
5801
5802 /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
5803 parameter is a pointer to object, through decay and
5804 qualification conversion. Let's strip everything. */
5805 else if (TREE_CODE (expr) == NOP_EXPR && TYPE_PTROBV_P (type))
5806 {
5807 tree probe = expr;
5808 STRIP_NOPS (probe);
5809 if (TREE_CODE (probe) == ADDR_EXPR
5810 && TYPE_PTR_P (TREE_TYPE (probe)))
5811 {
5812 /* Skip the ADDR_EXPR only if it is part of the decay for
5813 an array. Otherwise, it is part of the original argument
5814 in the source code. */
5815 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (probe, 0))) == ARRAY_TYPE)
5816 probe = TREE_OPERAND (probe, 0);
5817 expr = probe;
5818 expr_type = TREE_TYPE (expr);
5819 }
5820 }
5821
5822 /* [temp.arg.nontype]/5, bullet 1
5823
5824 For a non-type template-parameter of integral or enumeration type,
5825 integral promotions (_conv.prom_) and integral conversions
5826 (_conv.integral_) are applied. */
5827 if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5828 {
5829 tree t = build_integral_nontype_arg_conv (type, expr, complain);
5830 t = maybe_constant_value (t);
5831 if (t != error_mark_node)
5832 expr = t;
5833
5834 if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (expr)))
5835 return error_mark_node;
5836
5837 /* Notice that there are constant expressions like '4 % 0' which
5838 do not fold into integer constants. */
5839 if (TREE_CODE (expr) != INTEGER_CST)
5840 {
5841 if (complain & tf_error)
5842 {
5843 int errs = errorcount, warns = warningcount + werrorcount;
5844 if (processing_template_decl
5845 && !require_potential_constant_expression (expr))
5846 return NULL_TREE;
5847 expr = cxx_constant_value (expr);
5848 if (errorcount > errs || warningcount + werrorcount > warns)
5849 inform (EXPR_LOC_OR_LOC (expr, input_location),
5850 "in template argument for type %qT ", type);
5851 if (expr == error_mark_node)
5852 return NULL_TREE;
5853 /* else cxx_constant_value complained but gave us
5854 a real constant, so go ahead. */
5855 gcc_assert (TREE_CODE (expr) == INTEGER_CST);
5856 }
5857 else
5858 return NULL_TREE;
5859 }
5860
5861 /* Avoid typedef problems. */
5862 if (TREE_TYPE (expr) != type)
5863 expr = fold_convert (type, expr);
5864 }
5865 /* [temp.arg.nontype]/5, bullet 2
5866
5867 For a non-type template-parameter of type pointer to object,
5868 qualification conversions (_conv.qual_) and the array-to-pointer
5869 conversion (_conv.array_) are applied. */
5870 else if (TYPE_PTROBV_P (type))
5871 {
5872 /* [temp.arg.nontype]/1 (TC1 version, DR 49):
5873
5874 A template-argument for a non-type, non-template template-parameter
5875 shall be one of: [...]
5876
5877 -- the name of a non-type template-parameter;
5878 -- the address of an object or function with external linkage, [...]
5879 expressed as "& id-expression" where the & is optional if the name
5880 refers to a function or array, or if the corresponding
5881 template-parameter is a reference.
5882
5883 Here, we do not care about functions, as they are invalid anyway
5884 for a parameter of type pointer-to-object. */
5885
5886 if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
5887 /* Non-type template parameters are OK. */
5888 ;
5889 else if (cxx_dialect >= cxx11 && integer_zerop (expr))
5890 /* Null pointer values are OK in C++11. */;
5891 else if (TREE_CODE (expr) != ADDR_EXPR
5892 && TREE_CODE (expr_type) != ARRAY_TYPE)
5893 {
5894 if (VAR_P (expr))
5895 {
5896 if (complain & tf_error)
5897 error ("%qD is not a valid template argument "
5898 "because %qD is a variable, not the address of "
5899 "a variable", expr, expr);
5900 return NULL_TREE;
5901 }
5902 if (POINTER_TYPE_P (expr_type))
5903 {
5904 if (complain & tf_error)
5905 error ("%qE is not a valid template argument for %qT "
5906 "because it is not the address of a variable",
5907 expr, type);
5908 return NULL_TREE;
5909 }
5910 /* Other values, like integer constants, might be valid
5911 non-type arguments of some other type. */
5912 return error_mark_node;
5913 }
5914 else
5915 {
5916 tree decl;
5917
5918 decl = ((TREE_CODE (expr) == ADDR_EXPR)
5919 ? TREE_OPERAND (expr, 0) : expr);
5920 if (!VAR_P (decl))
5921 {
5922 if (complain & tf_error)
5923 error ("%qE is not a valid template argument of type %qT "
5924 "because %qE is not a variable", expr, type, decl);
5925 return NULL_TREE;
5926 }
5927 else if (cxx_dialect < cxx11 && !DECL_EXTERNAL_LINKAGE_P (decl))
5928 {
5929 if (complain & tf_error)
5930 error ("%qE is not a valid template argument of type %qT "
5931 "because %qD does not have external linkage",
5932 expr, type, decl);
5933 return NULL_TREE;
5934 }
5935 else if (cxx_dialect >= cxx11 && decl_linkage (decl) == lk_none)
5936 {
5937 if (complain & tf_error)
5938 error ("%qE is not a valid template argument of type %qT "
5939 "because %qD has no linkage", expr, type, decl);
5940 return NULL_TREE;
5941 }
5942 }
5943
5944 expr = decay_conversion (expr, complain);
5945 if (expr == error_mark_node)
5946 return error_mark_node;
5947
5948 expr = perform_qualification_conversions (type, expr);
5949 if (expr == error_mark_node)
5950 return error_mark_node;
5951 }
5952 /* [temp.arg.nontype]/5, bullet 3
5953
5954 For a non-type template-parameter of type reference to object, no
5955 conversions apply. The type referred to by the reference may be more
5956 cv-qualified than the (otherwise identical) type of the
5957 template-argument. The template-parameter is bound directly to the
5958 template-argument, which must be an lvalue. */
5959 else if (TYPE_REF_OBJ_P (type))
5960 {
5961 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
5962 expr_type))
5963 return error_mark_node;
5964
5965 if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
5966 {
5967 if (complain & tf_error)
5968 error ("%qE is not a valid template argument for type %qT "
5969 "because of conflicts in cv-qualification", expr, type);
5970 return NULL_TREE;
5971 }
5972
5973 if (!real_lvalue_p (expr))
5974 {
5975 if (complain & tf_error)
5976 error ("%qE is not a valid template argument for type %qT "
5977 "because it is not an lvalue", expr, type);
5978 return NULL_TREE;
5979 }
5980
5981 /* [temp.arg.nontype]/1
5982
5983 A template-argument for a non-type, non-template template-parameter
5984 shall be one of: [...]
5985
5986 -- the address of an object or function with external linkage. */
5987 if (INDIRECT_REF_P (expr)
5988 && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
5989 {
5990 expr = TREE_OPERAND (expr, 0);
5991 if (DECL_P (expr))
5992 {
5993 if (complain & tf_error)
5994 error ("%q#D is not a valid template argument for type %qT "
5995 "because a reference variable does not have a constant "
5996 "address", expr, type);
5997 return NULL_TREE;
5998 }
5999 }
6000
6001 if (!DECL_P (expr))
6002 {
6003 if (complain & tf_error)
6004 error ("%qE is not a valid template argument for type %qT "
6005 "because it is not an object with external linkage",
6006 expr, type);
6007 return NULL_TREE;
6008 }
6009
6010 if (!DECL_EXTERNAL_LINKAGE_P (expr))
6011 {
6012 if (complain & tf_error)
6013 error ("%qE is not a valid template argument for type %qT "
6014 "because object %qD has not external linkage",
6015 expr, type, expr);
6016 return NULL_TREE;
6017 }
6018
6019 expr = build_nop (type, build_address (expr));
6020 }
6021 /* [temp.arg.nontype]/5, bullet 4
6022
6023 For a non-type template-parameter of type pointer to function, only
6024 the function-to-pointer conversion (_conv.func_) is applied. If the
6025 template-argument represents a set of overloaded functions (or a
6026 pointer to such), the matching function is selected from the set
6027 (_over.over_). */
6028 else if (TYPE_PTRFN_P (type))
6029 {
6030 /* If the argument is a template-id, we might not have enough
6031 context information to decay the pointer. */
6032 if (!type_unknown_p (expr_type))
6033 {
6034 expr = decay_conversion (expr, complain);
6035 if (expr == error_mark_node)
6036 return error_mark_node;
6037 }
6038
6039 if (cxx_dialect >= cxx11 && integer_zerop (expr))
6040 /* Null pointer values are OK in C++11. */
6041 return perform_qualification_conversions (type, expr);
6042
6043 expr = convert_nontype_argument_function (type, expr, complain);
6044 if (!expr || expr == error_mark_node)
6045 return expr;
6046 }
6047 /* [temp.arg.nontype]/5, bullet 5
6048
6049 For a non-type template-parameter of type reference to function, no
6050 conversions apply. If the template-argument represents a set of
6051 overloaded functions, the matching function is selected from the set
6052 (_over.over_). */
6053 else if (TYPE_REFFN_P (type))
6054 {
6055 if (TREE_CODE (expr) == ADDR_EXPR)
6056 {
6057 if (complain & tf_error)
6058 {
6059 error ("%qE is not a valid template argument for type %qT "
6060 "because it is a pointer", expr, type);
6061 inform (input_location, "try using %qE instead",
6062 TREE_OPERAND (expr, 0));
6063 }
6064 return NULL_TREE;
6065 }
6066
6067 expr = convert_nontype_argument_function (type, expr, complain);
6068 if (!expr || expr == error_mark_node)
6069 return expr;
6070
6071 expr = build_nop (type, build_address (expr));
6072 }
6073 /* [temp.arg.nontype]/5, bullet 6
6074
6075 For a non-type template-parameter of type pointer to member function,
6076 no conversions apply. If the template-argument represents a set of
6077 overloaded member functions, the matching member function is selected
6078 from the set (_over.over_). */
6079 else if (TYPE_PTRMEMFUNC_P (type))
6080 {
6081 expr = instantiate_type (type, expr, tf_none);
6082 if (expr == error_mark_node)
6083 return error_mark_node;
6084
6085 /* [temp.arg.nontype] bullet 1 says the pointer to member
6086 expression must be a pointer-to-member constant. */
6087 if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6088 return error_mark_node;
6089
6090 /* There is no way to disable standard conversions in
6091 resolve_address_of_overloaded_function (called by
6092 instantiate_type). It is possible that the call succeeded by
6093 converting &B::I to &D::I (where B is a base of D), so we need
6094 to reject this conversion here.
6095
6096 Actually, even if there was a way to disable standard conversions,
6097 it would still be better to reject them here so that we can
6098 provide a superior diagnostic. */
6099 if (!same_type_p (TREE_TYPE (expr), type))
6100 {
6101 if (complain & tf_error)
6102 {
6103 error ("%qE is not a valid template argument for type %qT "
6104 "because it is of type %qT", expr, type,
6105 TREE_TYPE (expr));
6106 /* If we are just one standard conversion off, explain. */
6107 if (can_convert_standard (type, TREE_TYPE (expr), complain))
6108 inform (input_location,
6109 "standard conversions are not allowed in this context");
6110 }
6111 return NULL_TREE;
6112 }
6113 }
6114 /* [temp.arg.nontype]/5, bullet 7
6115
6116 For a non-type template-parameter of type pointer to data member,
6117 qualification conversions (_conv.qual_) are applied. */
6118 else if (TYPE_PTRDATAMEM_P (type))
6119 {
6120 /* [temp.arg.nontype] bullet 1 says the pointer to member
6121 expression must be a pointer-to-member constant. */
6122 if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6123 return error_mark_node;
6124
6125 expr = perform_qualification_conversions (type, expr);
6126 if (expr == error_mark_node)
6127 return expr;
6128 }
6129 else if (NULLPTR_TYPE_P (type))
6130 {
6131 if (expr != nullptr_node)
6132 {
6133 if (complain & tf_error)
6134 error ("%qE is not a valid template argument for type %qT "
6135 "because it is of type %qT", expr, type, TREE_TYPE (expr));
6136 return NULL_TREE;
6137 }
6138 return expr;
6139 }
6140 /* A template non-type parameter must be one of the above. */
6141 else
6142 gcc_unreachable ();
6143
6144 /* Sanity check: did we actually convert the argument to the
6145 right type? */
6146 gcc_assert (same_type_ignoring_top_level_qualifiers_p
6147 (type, TREE_TYPE (expr)));
6148 return expr;
6149 }
6150
6151 /* Subroutine of coerce_template_template_parms, which returns 1 if
6152 PARM_PARM and ARG_PARM match using the rule for the template
6153 parameters of template template parameters. Both PARM and ARG are
6154 template parameters; the rest of the arguments are the same as for
6155 coerce_template_template_parms.
6156 */
6157 static int
6158 coerce_template_template_parm (tree parm,
6159 tree arg,
6160 tsubst_flags_t complain,
6161 tree in_decl,
6162 tree outer_args)
6163 {
6164 if (arg == NULL_TREE || error_operand_p (arg)
6165 || parm == NULL_TREE || error_operand_p (parm))
6166 return 0;
6167
6168 if (TREE_CODE (arg) != TREE_CODE (parm))
6169 return 0;
6170
6171 switch (TREE_CODE (parm))
6172 {
6173 case TEMPLATE_DECL:
6174 /* We encounter instantiations of templates like
6175 template <template <template <class> class> class TT>
6176 class C; */
6177 {
6178 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6179 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6180
6181 if (!coerce_template_template_parms
6182 (parmparm, argparm, complain, in_decl, outer_args))
6183 return 0;
6184 }
6185 /* Fall through. */
6186
6187 case TYPE_DECL:
6188 if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
6189 && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6190 /* Argument is a parameter pack but parameter is not. */
6191 return 0;
6192 break;
6193
6194 case PARM_DECL:
6195 /* The tsubst call is used to handle cases such as
6196
6197 template <int> class C {};
6198 template <class T, template <T> class TT> class D {};
6199 D<int, C> d;
6200
6201 i.e. the parameter list of TT depends on earlier parameters. */
6202 if (!uses_template_parms (TREE_TYPE (arg))
6203 && !same_type_p
6204 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
6205 TREE_TYPE (arg)))
6206 return 0;
6207
6208 if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
6209 && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6210 /* Argument is a parameter pack but parameter is not. */
6211 return 0;
6212
6213 break;
6214
6215 default:
6216 gcc_unreachable ();
6217 }
6218
6219 return 1;
6220 }
6221
6222
6223 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
6224 template template parameters. Both PARM_PARMS and ARG_PARMS are
6225 vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
6226 or PARM_DECL.
6227
6228 Consider the example:
6229 template <class T> class A;
6230 template<template <class U> class TT> class B;
6231
6232 For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
6233 the parameters to A, and OUTER_ARGS contains A. */
6234
6235 static int
6236 coerce_template_template_parms (tree parm_parms,
6237 tree arg_parms,
6238 tsubst_flags_t complain,
6239 tree in_decl,
6240 tree outer_args)
6241 {
6242 int nparms, nargs, i;
6243 tree parm, arg;
6244 int variadic_p = 0;
6245
6246 gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
6247 gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
6248
6249 nparms = TREE_VEC_LENGTH (parm_parms);
6250 nargs = TREE_VEC_LENGTH (arg_parms);
6251
6252 /* Determine whether we have a parameter pack at the end of the
6253 template template parameter's template parameter list. */
6254 if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
6255 {
6256 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
6257
6258 if (error_operand_p (parm))
6259 return 0;
6260
6261 switch (TREE_CODE (parm))
6262 {
6263 case TEMPLATE_DECL:
6264 case TYPE_DECL:
6265 if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6266 variadic_p = 1;
6267 break;
6268
6269 case PARM_DECL:
6270 if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6271 variadic_p = 1;
6272 break;
6273
6274 default:
6275 gcc_unreachable ();
6276 }
6277 }
6278
6279 if (nargs != nparms
6280 && !(variadic_p && nargs >= nparms - 1))
6281 return 0;
6282
6283 /* Check all of the template parameters except the parameter pack at
6284 the end (if any). */
6285 for (i = 0; i < nparms - variadic_p; ++i)
6286 {
6287 if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
6288 || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6289 continue;
6290
6291 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6292 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6293
6294 if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6295 outer_args))
6296 return 0;
6297
6298 }
6299
6300 if (variadic_p)
6301 {
6302 /* Check each of the template parameters in the template
6303 argument against the template parameter pack at the end of
6304 the template template parameter. */
6305 if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
6306 return 0;
6307
6308 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6309
6310 for (; i < nargs; ++i)
6311 {
6312 if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6313 continue;
6314
6315 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6316
6317 if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6318 outer_args))
6319 return 0;
6320 }
6321 }
6322
6323 return 1;
6324 }
6325
6326 /* Verifies that the deduced template arguments (in TARGS) for the
6327 template template parameters (in TPARMS) represent valid bindings,
6328 by comparing the template parameter list of each template argument
6329 to the template parameter list of its corresponding template
6330 template parameter, in accordance with DR150. This
6331 routine can only be called after all template arguments have been
6332 deduced. It will return TRUE if all of the template template
6333 parameter bindings are okay, FALSE otherwise. */
6334 bool
6335 template_template_parm_bindings_ok_p (tree tparms, tree targs)
6336 {
6337 int i, ntparms = TREE_VEC_LENGTH (tparms);
6338 bool ret = true;
6339
6340 /* We're dealing with template parms in this process. */
6341 ++processing_template_decl;
6342
6343 targs = INNERMOST_TEMPLATE_ARGS (targs);
6344
6345 for (i = 0; i < ntparms; ++i)
6346 {
6347 tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
6348 tree targ = TREE_VEC_ELT (targs, i);
6349
6350 if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
6351 {
6352 tree packed_args = NULL_TREE;
6353 int idx, len = 1;
6354
6355 if (ARGUMENT_PACK_P (targ))
6356 {
6357 /* Look inside the argument pack. */
6358 packed_args = ARGUMENT_PACK_ARGS (targ);
6359 len = TREE_VEC_LENGTH (packed_args);
6360 }
6361
6362 for (idx = 0; idx < len; ++idx)
6363 {
6364 tree targ_parms = NULL_TREE;
6365
6366 if (packed_args)
6367 /* Extract the next argument from the argument
6368 pack. */
6369 targ = TREE_VEC_ELT (packed_args, idx);
6370
6371 if (PACK_EXPANSION_P (targ))
6372 /* Look at the pattern of the pack expansion. */
6373 targ = PACK_EXPANSION_PATTERN (targ);
6374
6375 /* Extract the template parameters from the template
6376 argument. */
6377 if (TREE_CODE (targ) == TEMPLATE_DECL)
6378 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
6379 else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
6380 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
6381
6382 /* Verify that we can coerce the template template
6383 parameters from the template argument to the template
6384 parameter. This requires an exact match. */
6385 if (targ_parms
6386 && !coerce_template_template_parms
6387 (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
6388 targ_parms,
6389 tf_none,
6390 tparm,
6391 targs))
6392 {
6393 ret = false;
6394 goto out;
6395 }
6396 }
6397 }
6398 }
6399
6400 out:
6401
6402 --processing_template_decl;
6403 return ret;
6404 }
6405
6406 /* Since type attributes aren't mangled, we need to strip them from
6407 template type arguments. */
6408
6409 static tree
6410 canonicalize_type_argument (tree arg, tsubst_flags_t complain)
6411 {
6412 tree mv;
6413 if (!arg || arg == error_mark_node || arg == TYPE_CANONICAL (arg))
6414 return arg;
6415 mv = TYPE_MAIN_VARIANT (arg);
6416 arg = strip_typedefs (arg);
6417 if (TYPE_ALIGN (arg) != TYPE_ALIGN (mv)
6418 || TYPE_ATTRIBUTES (arg) != TYPE_ATTRIBUTES (mv))
6419 {
6420 if (complain & tf_warning)
6421 warning (0, "ignoring attributes on template argument %qT", arg);
6422 arg = build_aligned_type (arg, TYPE_ALIGN (mv));
6423 arg = cp_build_type_attribute_variant (arg, TYPE_ATTRIBUTES (mv));
6424 }
6425 return arg;
6426 }
6427
6428 /* Convert the indicated template ARG as necessary to match the
6429 indicated template PARM. Returns the converted ARG, or
6430 error_mark_node if the conversion was unsuccessful. Error and
6431 warning messages are issued under control of COMPLAIN. This
6432 conversion is for the Ith parameter in the parameter list. ARGS is
6433 the full set of template arguments deduced so far. */
6434
6435 static tree
6436 convert_template_argument (tree parm,
6437 tree arg,
6438 tree args,
6439 tsubst_flags_t complain,
6440 int i,
6441 tree in_decl)
6442 {
6443 tree orig_arg;
6444 tree val;
6445 int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
6446
6447 if (TREE_CODE (arg) == TREE_LIST
6448 && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
6449 {
6450 /* The template argument was the name of some
6451 member function. That's usually
6452 invalid, but static members are OK. In any
6453 case, grab the underlying fields/functions
6454 and issue an error later if required. */
6455 orig_arg = TREE_VALUE (arg);
6456 TREE_TYPE (arg) = unknown_type_node;
6457 }
6458
6459 orig_arg = arg;
6460
6461 requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
6462 requires_type = (TREE_CODE (parm) == TYPE_DECL
6463 || requires_tmpl_type);
6464
6465 /* When determining whether an argument pack expansion is a template,
6466 look at the pattern. */
6467 if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
6468 arg = PACK_EXPANSION_PATTERN (arg);
6469
6470 /* Deal with an injected-class-name used as a template template arg. */
6471 if (requires_tmpl_type && CLASS_TYPE_P (arg))
6472 {
6473 tree t = maybe_get_template_decl_from_type_decl (TYPE_NAME (arg));
6474 if (TREE_CODE (t) == TEMPLATE_DECL)
6475 {
6476 if (cxx_dialect >= cxx11)
6477 /* OK under DR 1004. */;
6478 else if (complain & tf_warning_or_error)
6479 pedwarn (input_location, OPT_Wpedantic, "injected-class-name %qD"
6480 " used as template template argument", TYPE_NAME (arg));
6481 else if (flag_pedantic_errors)
6482 t = arg;
6483
6484 arg = t;
6485 }
6486 }
6487
6488 is_tmpl_type =
6489 ((TREE_CODE (arg) == TEMPLATE_DECL
6490 && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
6491 || (requires_tmpl_type && TREE_CODE (arg) == TYPE_ARGUMENT_PACK)
6492 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6493 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
6494
6495 if (is_tmpl_type
6496 && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6497 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
6498 arg = TYPE_STUB_DECL (arg);
6499
6500 is_type = TYPE_P (arg) || is_tmpl_type;
6501
6502 if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
6503 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
6504 {
6505 if (TREE_CODE (TREE_OPERAND (arg, 1)) == BIT_NOT_EXPR)
6506 {
6507 if (complain & tf_error)
6508 error ("invalid use of destructor %qE as a type", orig_arg);
6509 return error_mark_node;
6510 }
6511
6512 permerror (input_location,
6513 "to refer to a type member of a template parameter, "
6514 "use %<typename %E%>", orig_arg);
6515
6516 orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
6517 TREE_OPERAND (arg, 1),
6518 typename_type,
6519 complain);
6520 arg = orig_arg;
6521 is_type = 1;
6522 }
6523 if (is_type != requires_type)
6524 {
6525 if (in_decl)
6526 {
6527 if (complain & tf_error)
6528 {
6529 error ("type/value mismatch at argument %d in template "
6530 "parameter list for %qD",
6531 i + 1, in_decl);
6532 if (is_type)
6533 inform (input_location,
6534 " expected a constant of type %qT, got %qT",
6535 TREE_TYPE (parm),
6536 (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
6537 else if (requires_tmpl_type)
6538 inform (input_location,
6539 " expected a class template, got %qE", orig_arg);
6540 else
6541 inform (input_location,
6542 " expected a type, got %qE", orig_arg);
6543 }
6544 }
6545 return error_mark_node;
6546 }
6547 if (is_tmpl_type ^ requires_tmpl_type)
6548 {
6549 if (in_decl && (complain & tf_error))
6550 {
6551 error ("type/value mismatch at argument %d in template "
6552 "parameter list for %qD",
6553 i + 1, in_decl);
6554 if (is_tmpl_type)
6555 inform (input_location,
6556 " expected a type, got %qT", DECL_NAME (arg));
6557 else
6558 inform (input_location,
6559 " expected a class template, got %qT", orig_arg);
6560 }
6561 return error_mark_node;
6562 }
6563
6564 if (is_type)
6565 {
6566 if (requires_tmpl_type)
6567 {
6568 if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
6569 val = orig_arg;
6570 else if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
6571 /* The number of argument required is not known yet.
6572 Just accept it for now. */
6573 val = TREE_TYPE (arg);
6574 else
6575 {
6576 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6577 tree argparm;
6578
6579 /* Strip alias templates that are equivalent to another
6580 template. */
6581 arg = get_underlying_template (arg);
6582 argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6583
6584 if (coerce_template_template_parms (parmparm, argparm,
6585 complain, in_decl,
6586 args))
6587 {
6588 val = arg;
6589
6590 /* TEMPLATE_TEMPLATE_PARM node is preferred over
6591 TEMPLATE_DECL. */
6592 if (val != error_mark_node)
6593 {
6594 if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
6595 val = TREE_TYPE (val);
6596 if (TREE_CODE (orig_arg) == TYPE_PACK_EXPANSION)
6597 val = make_pack_expansion (val);
6598 }
6599 }
6600 else
6601 {
6602 if (in_decl && (complain & tf_error))
6603 {
6604 error ("type/value mismatch at argument %d in "
6605 "template parameter list for %qD",
6606 i + 1, in_decl);
6607 inform (input_location,
6608 " expected a template of type %qD, got %qT",
6609 parm, orig_arg);
6610 }
6611
6612 val = error_mark_node;
6613 }
6614 }
6615 }
6616 else
6617 val = orig_arg;
6618 /* We only form one instance of each template specialization.
6619 Therefore, if we use a non-canonical variant (i.e., a
6620 typedef), any future messages referring to the type will use
6621 the typedef, which is confusing if those future uses do not
6622 themselves also use the typedef. */
6623 if (TYPE_P (val))
6624 val = canonicalize_type_argument (val, complain);
6625 }
6626 else
6627 {
6628 tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
6629
6630 if (invalid_nontype_parm_type_p (t, complain))
6631 return error_mark_node;
6632
6633 if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
6634 {
6635 if (same_type_p (t, TREE_TYPE (orig_arg)))
6636 val = orig_arg;
6637 else
6638 {
6639 /* Not sure if this is reachable, but it doesn't hurt
6640 to be robust. */
6641 error ("type mismatch in nontype parameter pack");
6642 val = error_mark_node;
6643 }
6644 }
6645 else if (!dependent_template_arg_p (orig_arg)
6646 && !uses_template_parms (t))
6647 /* We used to call digest_init here. However, digest_init
6648 will report errors, which we don't want when complain
6649 is zero. More importantly, digest_init will try too
6650 hard to convert things: for example, `0' should not be
6651 converted to pointer type at this point according to
6652 the standard. Accepting this is not merely an
6653 extension, since deciding whether or not these
6654 conversions can occur is part of determining which
6655 function template to call, or whether a given explicit
6656 argument specification is valid. */
6657 val = convert_nontype_argument (t, orig_arg, complain);
6658 else
6659 val = strip_typedefs_expr (orig_arg);
6660
6661 if (val == NULL_TREE)
6662 val = error_mark_node;
6663 else if (val == error_mark_node && (complain & tf_error))
6664 error ("could not convert template argument %qE to %qT", orig_arg, t);
6665
6666 if (TREE_CODE (val) == SCOPE_REF)
6667 {
6668 /* Strip typedefs from the SCOPE_REF. */
6669 tree type = canonicalize_type_argument (TREE_TYPE (val), complain);
6670 tree scope = canonicalize_type_argument (TREE_OPERAND (val, 0),
6671 complain);
6672 val = build_qualified_name (type, scope, TREE_OPERAND (val, 1),
6673 QUALIFIED_NAME_IS_TEMPLATE (val));
6674 }
6675 }
6676
6677 return val;
6678 }
6679
6680 /* Coerces the remaining template arguments in INNER_ARGS (from
6681 ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
6682 Returns the coerced argument pack. PARM_IDX is the position of this
6683 parameter in the template parameter list. ARGS is the original
6684 template argument list. */
6685 static tree
6686 coerce_template_parameter_pack (tree parms,
6687 int parm_idx,
6688 tree args,
6689 tree inner_args,
6690 int arg_idx,
6691 tree new_args,
6692 int* lost,
6693 tree in_decl,
6694 tsubst_flags_t complain)
6695 {
6696 tree parm = TREE_VEC_ELT (parms, parm_idx);
6697 int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6698 tree packed_args;
6699 tree argument_pack;
6700 tree packed_parms = NULL_TREE;
6701
6702 if (arg_idx > nargs)
6703 arg_idx = nargs;
6704
6705 if (tree packs = fixed_parameter_pack_p (TREE_VALUE (parm)))
6706 {
6707 /* When the template parameter is a non-type template parameter pack
6708 or template template parameter pack whose type or template
6709 parameters use parameter packs, we know exactly how many arguments
6710 we are looking for. Build a vector of the instantiated decls for
6711 these template parameters in PACKED_PARMS. */
6712 /* We can't use make_pack_expansion here because it would interpret a
6713 _DECL as a use rather than a declaration. */
6714 tree decl = TREE_VALUE (parm);
6715 tree exp = cxx_make_type (TYPE_PACK_EXPANSION);
6716 SET_PACK_EXPANSION_PATTERN (exp, decl);
6717 PACK_EXPANSION_PARAMETER_PACKS (exp) = packs;
6718 SET_TYPE_STRUCTURAL_EQUALITY (exp);
6719
6720 TREE_VEC_LENGTH (args)--;
6721 packed_parms = tsubst_pack_expansion (exp, args, complain, decl);
6722 TREE_VEC_LENGTH (args)++;
6723
6724 if (packed_parms == error_mark_node)
6725 return error_mark_node;
6726
6727 /* If we're doing a partial instantiation of a member template,
6728 verify that all of the types used for the non-type
6729 template parameter pack are, in fact, valid for non-type
6730 template parameters. */
6731 if (arg_idx < nargs
6732 && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
6733 {
6734 int j, len = TREE_VEC_LENGTH (packed_parms);
6735 for (j = 0; j < len; ++j)
6736 {
6737 tree t = TREE_TYPE (TREE_VEC_ELT (packed_parms, j));
6738 if (invalid_nontype_parm_type_p (t, complain))
6739 return error_mark_node;
6740 }
6741 }
6742
6743 packed_args = make_tree_vec (TREE_VEC_LENGTH (packed_parms));
6744 }
6745 else
6746 packed_args = make_tree_vec (nargs - arg_idx);
6747
6748 /* Convert the remaining arguments, which will be a part of the
6749 parameter pack "parm". */
6750 for (; arg_idx < nargs; ++arg_idx)
6751 {
6752 tree arg = TREE_VEC_ELT (inner_args, arg_idx);
6753 tree actual_parm = TREE_VALUE (parm);
6754 int pack_idx = arg_idx - parm_idx;
6755
6756 if (packed_parms)
6757 {
6758 /* Once we've packed as many args as we have types, stop. */
6759 if (pack_idx >= TREE_VEC_LENGTH (packed_parms))
6760 break;
6761 else if (PACK_EXPANSION_P (arg))
6762 /* We don't know how many args we have yet, just
6763 use the unconverted ones for now. */
6764 return NULL_TREE;
6765 else
6766 actual_parm = TREE_VEC_ELT (packed_parms, pack_idx);
6767 }
6768
6769 if (arg == error_mark_node)
6770 {
6771 if (complain & tf_error)
6772 error ("template argument %d is invalid", arg_idx + 1);
6773 }
6774 else
6775 arg = convert_template_argument (actual_parm,
6776 arg, new_args, complain, parm_idx,
6777 in_decl);
6778 if (arg == error_mark_node)
6779 (*lost)++;
6780 TREE_VEC_ELT (packed_args, pack_idx) = arg;
6781 }
6782
6783 if (arg_idx - parm_idx < TREE_VEC_LENGTH (packed_args)
6784 && TREE_VEC_LENGTH (packed_args) > 0)
6785 {
6786 if (complain & tf_error)
6787 error ("wrong number of template arguments (%d, should be %d)",
6788 arg_idx - parm_idx, TREE_VEC_LENGTH (packed_args));
6789 return error_mark_node;
6790 }
6791
6792 if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
6793 || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
6794 argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
6795 else
6796 {
6797 argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
6798 TREE_TYPE (argument_pack)
6799 = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
6800 TREE_CONSTANT (argument_pack) = 1;
6801 }
6802
6803 SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
6804 #ifdef ENABLE_CHECKING
6805 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
6806 TREE_VEC_LENGTH (packed_args));
6807 #endif
6808 return argument_pack;
6809 }
6810
6811 /* Returns the number of pack expansions in the template argument vector
6812 ARGS. */
6813
6814 static int
6815 pack_expansion_args_count (tree args)
6816 {
6817 int i;
6818 int count = 0;
6819 if (args)
6820 for (i = 0; i < TREE_VEC_LENGTH (args); ++i)
6821 {
6822 tree elt = TREE_VEC_ELT (args, i);
6823 if (elt && PACK_EXPANSION_P (elt))
6824 ++count;
6825 }
6826 return count;
6827 }
6828
6829 /* Convert all template arguments to their appropriate types, and
6830 return a vector containing the innermost resulting template
6831 arguments. If any error occurs, return error_mark_node. Error and
6832 warning messages are issued under control of COMPLAIN.
6833
6834 If REQUIRE_ALL_ARGS is false, argument deduction will be performed
6835 for arguments not specified in ARGS. Otherwise, if
6836 USE_DEFAULT_ARGS is true, default arguments will be used to fill in
6837 unspecified arguments. If REQUIRE_ALL_ARGS is true, but
6838 USE_DEFAULT_ARGS is false, then all arguments must be specified in
6839 ARGS. */
6840
6841 static tree
6842 coerce_template_parms (tree parms,
6843 tree args,
6844 tree in_decl,
6845 tsubst_flags_t complain,
6846 bool require_all_args,
6847 bool use_default_args)
6848 {
6849 int nparms, nargs, parm_idx, arg_idx, lost = 0;
6850 tree orig_inner_args;
6851 tree inner_args;
6852 tree new_args;
6853 tree new_inner_args;
6854 int saved_unevaluated_operand;
6855 int saved_inhibit_evaluation_warnings;
6856
6857 /* When used as a boolean value, indicates whether this is a
6858 variadic template parameter list. Since it's an int, we can also
6859 subtract it from nparms to get the number of non-variadic
6860 parameters. */
6861 int variadic_p = 0;
6862 int variadic_args_p = 0;
6863 int post_variadic_parms = 0;
6864
6865 /* Likewise for parameters with default arguments. */
6866 int default_p = 0;
6867
6868 if (args == error_mark_node)
6869 return error_mark_node;
6870
6871 nparms = TREE_VEC_LENGTH (parms);
6872
6873 /* Determine if there are any parameter packs or default arguments. */
6874 for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
6875 {
6876 tree parm = TREE_VEC_ELT (parms, parm_idx);
6877 if (variadic_p)
6878 ++post_variadic_parms;
6879 if (template_parameter_pack_p (TREE_VALUE (parm)))
6880 ++variadic_p;
6881 if (TREE_PURPOSE (parm))
6882 ++default_p;
6883 }
6884
6885 inner_args = orig_inner_args = INNERMOST_TEMPLATE_ARGS (args);
6886 /* If there are no parameters that follow a parameter pack, we need to
6887 expand any argument packs so that we can deduce a parameter pack from
6888 some non-packed args followed by an argument pack, as in variadic85.C.
6889 If there are such parameters, we need to leave argument packs intact
6890 so the arguments are assigned properly. This can happen when dealing
6891 with a nested class inside a partial specialization of a class
6892 template, as in variadic92.C, or when deducing a template parameter pack
6893 from a sub-declarator, as in variadic114.C. */
6894 if (!post_variadic_parms)
6895 inner_args = expand_template_argument_pack (inner_args);
6896
6897 /* Count any pack expansion args. */
6898 variadic_args_p = pack_expansion_args_count (inner_args);
6899
6900 nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6901 if ((nargs > nparms && !variadic_p)
6902 || (nargs < nparms - variadic_p
6903 && require_all_args
6904 && !variadic_args_p
6905 && (!use_default_args
6906 || (TREE_VEC_ELT (parms, nargs) != error_mark_node
6907 && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
6908 {
6909 if (complain & tf_error)
6910 {
6911 if (variadic_p || default_p)
6912 {
6913 nparms -= variadic_p + default_p;
6914 error ("wrong number of template arguments "
6915 "(%d, should be at least %d)", nargs, nparms);
6916 }
6917 else
6918 error ("wrong number of template arguments "
6919 "(%d, should be %d)", nargs, nparms);
6920
6921 if (in_decl)
6922 inform (input_location, "provided for %q+D", in_decl);
6923 }
6924
6925 return error_mark_node;
6926 }
6927 /* We can't pass a pack expansion to a non-pack parameter of an alias
6928 template (DR 1430). */
6929 else if (in_decl && DECL_ALIAS_TEMPLATE_P (in_decl)
6930 && variadic_args_p
6931 && nargs - variadic_args_p < nparms - variadic_p)
6932 {
6933 if (complain & tf_error)
6934 {
6935 for (int i = 0; i < TREE_VEC_LENGTH (inner_args); ++i)
6936 {
6937 tree arg = TREE_VEC_ELT (inner_args, i);
6938 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
6939
6940 if (PACK_EXPANSION_P (arg)
6941 && !template_parameter_pack_p (parm))
6942 {
6943 error ("pack expansion argument for non-pack parameter "
6944 "%qD of alias template %qD", parm, in_decl);
6945 inform (DECL_SOURCE_LOCATION (parm), "declared here");
6946 goto found;
6947 }
6948 }
6949 gcc_unreachable ();
6950 found:;
6951 }
6952 return error_mark_node;
6953 }
6954
6955 /* We need to evaluate the template arguments, even though this
6956 template-id may be nested within a "sizeof". */
6957 saved_unevaluated_operand = cp_unevaluated_operand;
6958 cp_unevaluated_operand = 0;
6959 saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
6960 c_inhibit_evaluation_warnings = 0;
6961 new_inner_args = make_tree_vec (nparms);
6962 new_args = add_outermost_template_args (args, new_inner_args);
6963 int pack_adjust = 0;
6964 for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
6965 {
6966 tree arg;
6967 tree parm;
6968
6969 /* Get the Ith template parameter. */
6970 parm = TREE_VEC_ELT (parms, parm_idx);
6971
6972 if (parm == error_mark_node)
6973 {
6974 TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
6975 continue;
6976 }
6977
6978 /* Calculate the next argument. */
6979 if (arg_idx < nargs)
6980 arg = TREE_VEC_ELT (inner_args, arg_idx);
6981 else
6982 arg = NULL_TREE;
6983
6984 if (template_parameter_pack_p (TREE_VALUE (parm))
6985 && !(arg && ARGUMENT_PACK_P (arg)))
6986 {
6987 /* Some arguments will be placed in the
6988 template parameter pack PARM. */
6989 arg = coerce_template_parameter_pack (parms, parm_idx, args,
6990 inner_args, arg_idx,
6991 new_args, &lost,
6992 in_decl, complain);
6993
6994 if (arg == NULL_TREE)
6995 {
6996 /* We don't know how many args we have yet, just use the
6997 unconverted (and still packed) ones for now. */
6998 new_inner_args = orig_inner_args;
6999 arg_idx = nargs;
7000 break;
7001 }
7002
7003 TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
7004
7005 /* Store this argument. */
7006 if (arg == error_mark_node)
7007 {
7008 lost++;
7009 /* We are done with all of the arguments. */
7010 arg_idx = nargs;
7011 }
7012 else
7013 {
7014 pack_adjust = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg)) - 1;
7015 arg_idx += pack_adjust;
7016 }
7017
7018 continue;
7019 }
7020 else if (arg)
7021 {
7022 if (PACK_EXPANSION_P (arg))
7023 {
7024 /* "If every valid specialization of a variadic template
7025 requires an empty template parameter pack, the template is
7026 ill-formed, no diagnostic required." So check that the
7027 pattern works with this parameter. */
7028 tree pattern = PACK_EXPANSION_PATTERN (arg);
7029 tree conv = convert_template_argument (TREE_VALUE (parm),
7030 pattern, new_args,
7031 complain, parm_idx,
7032 in_decl);
7033 if (conv == error_mark_node)
7034 {
7035 inform (input_location, "so any instantiation with a "
7036 "non-empty parameter pack would be ill-formed");
7037 ++lost;
7038 }
7039 else if (TYPE_P (conv) && !TYPE_P (pattern))
7040 /* Recover from missing typename. */
7041 TREE_VEC_ELT (inner_args, arg_idx)
7042 = make_pack_expansion (conv);
7043
7044 /* We don't know how many args we have yet, just
7045 use the unconverted ones for now. */
7046 new_inner_args = inner_args;
7047 arg_idx = nargs;
7048 break;
7049 }
7050 }
7051 else if (require_all_args)
7052 {
7053 /* There must be a default arg in this case. */
7054 arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
7055 complain, in_decl);
7056 /* The position of the first default template argument,
7057 is also the number of non-defaulted arguments in NEW_INNER_ARGS.
7058 Record that. */
7059 if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
7060 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
7061 arg_idx - pack_adjust);
7062 }
7063 else
7064 break;
7065
7066 if (arg == error_mark_node)
7067 {
7068 if (complain & tf_error)
7069 error ("template argument %d is invalid", arg_idx + 1);
7070 }
7071 else if (!arg)
7072 /* This only occurs if there was an error in the template
7073 parameter list itself (which we would already have
7074 reported) that we are trying to recover from, e.g., a class
7075 template with a parameter list such as
7076 template<typename..., typename>. */
7077 ++lost;
7078 else
7079 arg = convert_template_argument (TREE_VALUE (parm),
7080 arg, new_args, complain,
7081 parm_idx, in_decl);
7082
7083 if (arg == error_mark_node)
7084 lost++;
7085 TREE_VEC_ELT (new_inner_args, arg_idx - pack_adjust) = arg;
7086 }
7087 cp_unevaluated_operand = saved_unevaluated_operand;
7088 c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
7089
7090 if (variadic_p && arg_idx < nargs)
7091 {
7092 if (complain & tf_error)
7093 {
7094 error ("wrong number of template arguments "
7095 "(%d, should be %d)", nargs, arg_idx);
7096 if (in_decl)
7097 error ("provided for %q+D", in_decl);
7098 }
7099 return error_mark_node;
7100 }
7101
7102 if (lost)
7103 return error_mark_node;
7104
7105 #ifdef ENABLE_CHECKING
7106 if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
7107 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
7108 TREE_VEC_LENGTH (new_inner_args));
7109 #endif
7110
7111 return new_inner_args;
7112 }
7113
7114 /* Like coerce_template_parms. If PARMS represents all template
7115 parameters levels, this function returns a vector of vectors
7116 representing all the resulting argument levels. Note that in this
7117 case, only the innermost arguments are coerced because the
7118 outermost ones are supposed to have been coerced already.
7119
7120 Otherwise, if PARMS represents only (the innermost) vector of
7121 parameters, this function returns a vector containing just the
7122 innermost resulting arguments. */
7123
7124 static tree
7125 coerce_innermost_template_parms (tree parms,
7126 tree args,
7127 tree in_decl,
7128 tsubst_flags_t complain,
7129 bool require_all_args,
7130 bool use_default_args)
7131 {
7132 int parms_depth = TMPL_PARMS_DEPTH (parms);
7133 int args_depth = TMPL_ARGS_DEPTH (args);
7134 tree coerced_args;
7135
7136 if (parms_depth > 1)
7137 {
7138 coerced_args = make_tree_vec (parms_depth);
7139 tree level;
7140 int cur_depth;
7141
7142 for (level = parms, cur_depth = parms_depth;
7143 parms_depth > 0 && level != NULL_TREE;
7144 level = TREE_CHAIN (level), --cur_depth)
7145 {
7146 tree l;
7147 if (cur_depth == args_depth)
7148 l = coerce_template_parms (TREE_VALUE (level),
7149 args, in_decl, complain,
7150 require_all_args,
7151 use_default_args);
7152 else
7153 l = TMPL_ARGS_LEVEL (args, cur_depth);
7154
7155 if (l == error_mark_node)
7156 return error_mark_node;
7157
7158 SET_TMPL_ARGS_LEVEL (coerced_args, cur_depth, l);
7159 }
7160 }
7161 else
7162 coerced_args = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parms),
7163 args, in_decl, complain,
7164 require_all_args,
7165 use_default_args);
7166 return coerced_args;
7167 }
7168
7169 /* Returns 1 if template args OT and NT are equivalent. */
7170
7171 static int
7172 template_args_equal (tree ot, tree nt)
7173 {
7174 if (nt == ot)
7175 return 1;
7176 if (nt == NULL_TREE || ot == NULL_TREE)
7177 return false;
7178
7179 if (TREE_CODE (nt) == TREE_VEC)
7180 /* For member templates */
7181 return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
7182 else if (PACK_EXPANSION_P (ot))
7183 return (PACK_EXPANSION_P (nt)
7184 && template_args_equal (PACK_EXPANSION_PATTERN (ot),
7185 PACK_EXPANSION_PATTERN (nt))
7186 && template_args_equal (PACK_EXPANSION_EXTRA_ARGS (ot),
7187 PACK_EXPANSION_EXTRA_ARGS (nt)));
7188 else if (ARGUMENT_PACK_P (ot))
7189 {
7190 int i, len;
7191 tree opack, npack;
7192
7193 if (!ARGUMENT_PACK_P (nt))
7194 return 0;
7195
7196 opack = ARGUMENT_PACK_ARGS (ot);
7197 npack = ARGUMENT_PACK_ARGS (nt);
7198 len = TREE_VEC_LENGTH (opack);
7199 if (TREE_VEC_LENGTH (npack) != len)
7200 return 0;
7201 for (i = 0; i < len; ++i)
7202 if (!template_args_equal (TREE_VEC_ELT (opack, i),
7203 TREE_VEC_ELT (npack, i)))
7204 return 0;
7205 return 1;
7206 }
7207 else if (ot && TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
7208 {
7209 /* We get here probably because we are in the middle of substituting
7210 into the pattern of a pack expansion. In that case the
7211 ARGUMENT_PACK_SELECT temporarily replaces the pack argument we are
7212 interested in. So we want to use the initial pack argument for
7213 the comparison. */
7214 ot = ARGUMENT_PACK_SELECT_FROM_PACK (ot);
7215 if (nt && TREE_CODE (nt) == ARGUMENT_PACK_SELECT)
7216 nt = ARGUMENT_PACK_SELECT_FROM_PACK (nt);
7217 return template_args_equal (ot, nt);
7218 }
7219 else if (TYPE_P (nt))
7220 return TYPE_P (ot) && same_type_p (ot, nt);
7221 else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
7222 return 0;
7223 else
7224 return cp_tree_equal (ot, nt);
7225 }
7226
7227 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets of
7228 template arguments. Returns 0 otherwise, and updates OLDARG_PTR and
7229 NEWARG_PTR with the offending arguments if they are non-NULL. */
7230
7231 static int
7232 comp_template_args_with_info (tree oldargs, tree newargs,
7233 tree *oldarg_ptr, tree *newarg_ptr)
7234 {
7235 int i;
7236
7237 if (oldargs == newargs)
7238 return 1;
7239
7240 if (!oldargs || !newargs)
7241 return 0;
7242
7243 if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
7244 return 0;
7245
7246 for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
7247 {
7248 tree nt = TREE_VEC_ELT (newargs, i);
7249 tree ot = TREE_VEC_ELT (oldargs, i);
7250
7251 if (! template_args_equal (ot, nt))
7252 {
7253 if (oldarg_ptr != NULL)
7254 *oldarg_ptr = ot;
7255 if (newarg_ptr != NULL)
7256 *newarg_ptr = nt;
7257 return 0;
7258 }
7259 }
7260 return 1;
7261 }
7262
7263 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
7264 of template arguments. Returns 0 otherwise. */
7265
7266 int
7267 comp_template_args (tree oldargs, tree newargs)
7268 {
7269 return comp_template_args_with_info (oldargs, newargs, NULL, NULL);
7270 }
7271
7272 static void
7273 add_pending_template (tree d)
7274 {
7275 tree ti = (TYPE_P (d)
7276 ? CLASSTYPE_TEMPLATE_INFO (d)
7277 : DECL_TEMPLATE_INFO (d));
7278 struct pending_template *pt;
7279 int level;
7280
7281 if (TI_PENDING_TEMPLATE_FLAG (ti))
7282 return;
7283
7284 /* We are called both from instantiate_decl, where we've already had a
7285 tinst_level pushed, and instantiate_template, where we haven't.
7286 Compensate. */
7287 level = !current_tinst_level || current_tinst_level->decl != d;
7288
7289 if (level)
7290 push_tinst_level (d);
7291
7292 pt = ggc_alloc<pending_template> ();
7293 pt->next = NULL;
7294 pt->tinst = current_tinst_level;
7295 if (last_pending_template)
7296 last_pending_template->next = pt;
7297 else
7298 pending_templates = pt;
7299
7300 last_pending_template = pt;
7301
7302 TI_PENDING_TEMPLATE_FLAG (ti) = 1;
7303
7304 if (level)
7305 pop_tinst_level ();
7306 }
7307
7308
7309 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
7310 ARGLIST. Valid choices for FNS are given in the cp-tree.def
7311 documentation for TEMPLATE_ID_EXPR. */
7312
7313 tree
7314 lookup_template_function (tree fns, tree arglist)
7315 {
7316 tree type;
7317
7318 if (fns == error_mark_node || arglist == error_mark_node)
7319 return error_mark_node;
7320
7321 gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
7322
7323 if (!is_overloaded_fn (fns) && !identifier_p (fns))
7324 {
7325 error ("%q#D is not a function template", fns);
7326 return error_mark_node;
7327 }
7328
7329 if (BASELINK_P (fns))
7330 {
7331 BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
7332 unknown_type_node,
7333 BASELINK_FUNCTIONS (fns),
7334 arglist);
7335 return fns;
7336 }
7337
7338 type = TREE_TYPE (fns);
7339 if (TREE_CODE (fns) == OVERLOAD || !type)
7340 type = unknown_type_node;
7341
7342 return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
7343 }
7344
7345 /* Within the scope of a template class S<T>, the name S gets bound
7346 (in build_self_reference) to a TYPE_DECL for the class, not a
7347 TEMPLATE_DECL. If DECL is a TYPE_DECL for current_class_type,
7348 or one of its enclosing classes, and that type is a template,
7349 return the associated TEMPLATE_DECL. Otherwise, the original
7350 DECL is returned.
7351
7352 Also handle the case when DECL is a TREE_LIST of ambiguous
7353 injected-class-names from different bases. */
7354
7355 tree
7356 maybe_get_template_decl_from_type_decl (tree decl)
7357 {
7358 if (decl == NULL_TREE)
7359 return decl;
7360
7361 /* DR 176: A lookup that finds an injected-class-name (10.2
7362 [class.member.lookup]) can result in an ambiguity in certain cases
7363 (for example, if it is found in more than one base class). If all of
7364 the injected-class-names that are found refer to specializations of
7365 the same class template, and if the name is followed by a
7366 template-argument-list, the reference refers to the class template
7367 itself and not a specialization thereof, and is not ambiguous. */
7368 if (TREE_CODE (decl) == TREE_LIST)
7369 {
7370 tree t, tmpl = NULL_TREE;
7371 for (t = decl; t; t = TREE_CHAIN (t))
7372 {
7373 tree elt = maybe_get_template_decl_from_type_decl (TREE_VALUE (t));
7374 if (!tmpl)
7375 tmpl = elt;
7376 else if (tmpl != elt)
7377 break;
7378 }
7379 if (tmpl && t == NULL_TREE)
7380 return tmpl;
7381 else
7382 return decl;
7383 }
7384
7385 return (decl != NULL_TREE
7386 && DECL_SELF_REFERENCE_P (decl)
7387 && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
7388 ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
7389 }
7390
7391 /* Given an IDENTIFIER_NODE (or type TEMPLATE_DECL) and a chain of
7392 parameters, find the desired type.
7393
7394 D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
7395
7396 IN_DECL, if non-NULL, is the template declaration we are trying to
7397 instantiate.
7398
7399 If ENTERING_SCOPE is nonzero, we are about to enter the scope of
7400 the class we are looking up.
7401
7402 Issue error and warning messages under control of COMPLAIN.
7403
7404 If the template class is really a local class in a template
7405 function, then the FUNCTION_CONTEXT is the function in which it is
7406 being instantiated.
7407
7408 ??? Note that this function is currently called *twice* for each
7409 template-id: the first time from the parser, while creating the
7410 incomplete type (finish_template_type), and the second type during the
7411 real instantiation (instantiate_template_class). This is surely something
7412 that we want to avoid. It also causes some problems with argument
7413 coercion (see convert_nontype_argument for more information on this). */
7414
7415 static tree
7416 lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
7417 int entering_scope, tsubst_flags_t complain)
7418 {
7419 tree templ = NULL_TREE, parmlist;
7420 tree t;
7421 spec_entry **slot;
7422 spec_entry *entry;
7423 spec_entry elt;
7424 hashval_t hash;
7425
7426 if (identifier_p (d1))
7427 {
7428 tree value = innermost_non_namespace_value (d1);
7429 if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
7430 templ = value;
7431 else
7432 {
7433 if (context)
7434 push_decl_namespace (context);
7435 templ = lookup_name (d1);
7436 templ = maybe_get_template_decl_from_type_decl (templ);
7437 if (context)
7438 pop_decl_namespace ();
7439 }
7440 if (templ)
7441 context = DECL_CONTEXT (templ);
7442 }
7443 else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
7444 {
7445 tree type = TREE_TYPE (d1);
7446
7447 /* If we are declaring a constructor, say A<T>::A<T>, we will get
7448 an implicit typename for the second A. Deal with it. */
7449 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
7450 type = TREE_TYPE (type);
7451
7452 if (CLASSTYPE_TEMPLATE_INFO (type))
7453 {
7454 templ = CLASSTYPE_TI_TEMPLATE (type);
7455 d1 = DECL_NAME (templ);
7456 }
7457 }
7458 else if (TREE_CODE (d1) == ENUMERAL_TYPE
7459 || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
7460 {
7461 templ = TYPE_TI_TEMPLATE (d1);
7462 d1 = DECL_NAME (templ);
7463 }
7464 else if (DECL_TYPE_TEMPLATE_P (d1))
7465 {
7466 templ = d1;
7467 d1 = DECL_NAME (templ);
7468 context = DECL_CONTEXT (templ);
7469 }
7470 else if (DECL_TEMPLATE_TEMPLATE_PARM_P (d1))
7471 {
7472 templ = d1;
7473 d1 = DECL_NAME (templ);
7474 }
7475
7476 /* Issue an error message if we didn't find a template. */
7477 if (! templ)
7478 {
7479 if (complain & tf_error)
7480 error ("%qT is not a template", d1);
7481 return error_mark_node;
7482 }
7483
7484 if (TREE_CODE (templ) != TEMPLATE_DECL
7485 /* Make sure it's a user visible template, if it was named by
7486 the user. */
7487 || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
7488 && !PRIMARY_TEMPLATE_P (templ)))
7489 {
7490 if (complain & tf_error)
7491 {
7492 error ("non-template type %qT used as a template", d1);
7493 if (in_decl)
7494 error ("for template declaration %q+D", in_decl);
7495 }
7496 return error_mark_node;
7497 }
7498
7499 complain &= ~tf_user;
7500
7501 /* An alias that just changes the name of a template is equivalent to the
7502 other template, so if any of the arguments are pack expansions, strip
7503 the alias to avoid problems with a pack expansion passed to a non-pack
7504 alias template parameter (DR 1430). */
7505 if (pack_expansion_args_count (INNERMOST_TEMPLATE_ARGS (arglist)))
7506 templ = get_underlying_template (templ);
7507
7508 if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
7509 {
7510 /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
7511 template arguments */
7512
7513 tree parm;
7514 tree arglist2;
7515 tree outer;
7516
7517 parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
7518
7519 /* Consider an example where a template template parameter declared as
7520
7521 template <class T, class U = std::allocator<T> > class TT
7522
7523 The template parameter level of T and U are one level larger than
7524 of TT. To proper process the default argument of U, say when an
7525 instantiation `TT<int>' is seen, we need to build the full
7526 arguments containing {int} as the innermost level. Outer levels,
7527 available when not appearing as default template argument, can be
7528 obtained from the arguments of the enclosing template.
7529
7530 Suppose that TT is later substituted with std::vector. The above
7531 instantiation is `TT<int, std::allocator<T> >' with TT at
7532 level 1, and T at level 2, while the template arguments at level 1
7533 becomes {std::vector} and the inner level 2 is {int}. */
7534
7535 outer = DECL_CONTEXT (templ);
7536 if (outer)
7537 outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
7538 else if (current_template_parms)
7539 /* This is an argument of the current template, so we haven't set
7540 DECL_CONTEXT yet. */
7541 outer = current_template_args ();
7542
7543 if (outer)
7544 arglist = add_to_template_args (outer, arglist);
7545
7546 arglist2 = coerce_template_parms (parmlist, arglist, templ,
7547 complain,
7548 /*require_all_args=*/true,
7549 /*use_default_args=*/true);
7550 if (arglist2 == error_mark_node
7551 || (!uses_template_parms (arglist2)
7552 && check_instantiated_args (templ, arglist2, complain)))
7553 return error_mark_node;
7554
7555 parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
7556 return parm;
7557 }
7558 else
7559 {
7560 tree template_type = TREE_TYPE (templ);
7561 tree gen_tmpl;
7562 tree type_decl;
7563 tree found = NULL_TREE;
7564 int arg_depth;
7565 int parm_depth;
7566 int is_dependent_type;
7567 int use_partial_inst_tmpl = false;
7568
7569 if (template_type == error_mark_node)
7570 /* An error occurred while building the template TEMPL, and a
7571 diagnostic has most certainly been emitted for that
7572 already. Let's propagate that error. */
7573 return error_mark_node;
7574
7575 gen_tmpl = most_general_template (templ);
7576 parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
7577 parm_depth = TMPL_PARMS_DEPTH (parmlist);
7578 arg_depth = TMPL_ARGS_DEPTH (arglist);
7579
7580 if (arg_depth == 1 && parm_depth > 1)
7581 {
7582 /* We've been given an incomplete set of template arguments.
7583 For example, given:
7584
7585 template <class T> struct S1 {
7586 template <class U> struct S2 {};
7587 template <class U> struct S2<U*> {};
7588 };
7589
7590 we will be called with an ARGLIST of `U*', but the
7591 TEMPLATE will be `template <class T> template
7592 <class U> struct S1<T>::S2'. We must fill in the missing
7593 arguments. */
7594 arglist
7595 = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
7596 arglist);
7597 arg_depth = TMPL_ARGS_DEPTH (arglist);
7598 }
7599
7600 /* Now we should have enough arguments. */
7601 gcc_assert (parm_depth == arg_depth);
7602
7603 /* From here on, we're only interested in the most general
7604 template. */
7605
7606 /* Calculate the BOUND_ARGS. These will be the args that are
7607 actually tsubst'd into the definition to create the
7608 instantiation. */
7609 if (parm_depth > 1)
7610 {
7611 /* We have multiple levels of arguments to coerce, at once. */
7612 int i;
7613 int saved_depth = TMPL_ARGS_DEPTH (arglist);
7614
7615 tree bound_args = make_tree_vec (parm_depth);
7616
7617 for (i = saved_depth,
7618 t = DECL_TEMPLATE_PARMS (gen_tmpl);
7619 i > 0 && t != NULL_TREE;
7620 --i, t = TREE_CHAIN (t))
7621 {
7622 tree a;
7623 if (i == saved_depth)
7624 a = coerce_template_parms (TREE_VALUE (t),
7625 arglist, gen_tmpl,
7626 complain,
7627 /*require_all_args=*/true,
7628 /*use_default_args=*/true);
7629 else
7630 /* Outer levels should have already been coerced. */
7631 a = TMPL_ARGS_LEVEL (arglist, i);
7632
7633 /* Don't process further if one of the levels fails. */
7634 if (a == error_mark_node)
7635 {
7636 /* Restore the ARGLIST to its full size. */
7637 TREE_VEC_LENGTH (arglist) = saved_depth;
7638 return error_mark_node;
7639 }
7640
7641 SET_TMPL_ARGS_LEVEL (bound_args, i, a);
7642
7643 /* We temporarily reduce the length of the ARGLIST so
7644 that coerce_template_parms will see only the arguments
7645 corresponding to the template parameters it is
7646 examining. */
7647 TREE_VEC_LENGTH (arglist)--;
7648 }
7649
7650 /* Restore the ARGLIST to its full size. */
7651 TREE_VEC_LENGTH (arglist) = saved_depth;
7652
7653 arglist = bound_args;
7654 }
7655 else
7656 arglist
7657 = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
7658 INNERMOST_TEMPLATE_ARGS (arglist),
7659 gen_tmpl,
7660 complain,
7661 /*require_all_args=*/true,
7662 /*use_default_args=*/true);
7663
7664 if (arglist == error_mark_node)
7665 /* We were unable to bind the arguments. */
7666 return error_mark_node;
7667
7668 /* In the scope of a template class, explicit references to the
7669 template class refer to the type of the template, not any
7670 instantiation of it. For example, in:
7671
7672 template <class T> class C { void f(C<T>); }
7673
7674 the `C<T>' is just the same as `C'. Outside of the
7675 class, however, such a reference is an instantiation. */
7676 if ((entering_scope
7677 || !PRIMARY_TEMPLATE_P (gen_tmpl)
7678 || currently_open_class (template_type))
7679 /* comp_template_args is expensive, check it last. */
7680 && comp_template_args (TYPE_TI_ARGS (template_type),
7681 arglist))
7682 return template_type;
7683
7684 /* If we already have this specialization, return it. */
7685 elt.tmpl = gen_tmpl;
7686 elt.args = arglist;
7687 hash = spec_hasher::hash (&elt);
7688 entry = type_specializations->find_with_hash (&elt, hash);
7689
7690 if (entry)
7691 return entry->spec;
7692
7693 is_dependent_type = uses_template_parms (arglist);
7694
7695 /* If the deduced arguments are invalid, then the binding
7696 failed. */
7697 if (!is_dependent_type
7698 && check_instantiated_args (gen_tmpl,
7699 INNERMOST_TEMPLATE_ARGS (arglist),
7700 complain))
7701 return error_mark_node;
7702
7703 if (!is_dependent_type
7704 && !PRIMARY_TEMPLATE_P (gen_tmpl)
7705 && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
7706 && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
7707 {
7708 found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
7709 DECL_NAME (gen_tmpl),
7710 /*tag_scope=*/ts_global);
7711 return found;
7712 }
7713
7714 context = tsubst (DECL_CONTEXT (gen_tmpl), arglist,
7715 complain, in_decl);
7716 if (context == error_mark_node)
7717 return error_mark_node;
7718
7719 if (!context)
7720 context = global_namespace;
7721
7722 /* Create the type. */
7723 if (DECL_ALIAS_TEMPLATE_P (gen_tmpl))
7724 {
7725 /* The user referred to a specialization of an alias
7726 template represented by GEN_TMPL.
7727
7728 [temp.alias]/2 says:
7729
7730 When a template-id refers to the specialization of an
7731 alias template, it is equivalent to the associated
7732 type obtained by substitution of its
7733 template-arguments for the template-parameters in the
7734 type-id of the alias template. */
7735
7736 t = tsubst (TREE_TYPE (gen_tmpl), arglist, complain, in_decl);
7737 /* Note that the call above (by indirectly calling
7738 register_specialization in tsubst_decl) registers the
7739 TYPE_DECL representing the specialization of the alias
7740 template. So next time someone substitutes ARGLIST for
7741 the template parms into the alias template (GEN_TMPL),
7742 she'll get that TYPE_DECL back. */
7743
7744 if (t == error_mark_node)
7745 return t;
7746 }
7747 else if (TREE_CODE (template_type) == ENUMERAL_TYPE)
7748 {
7749 if (!is_dependent_type)
7750 {
7751 set_current_access_from_decl (TYPE_NAME (template_type));
7752 t = start_enum (TYPE_IDENTIFIER (template_type), NULL_TREE,
7753 tsubst (ENUM_UNDERLYING_TYPE (template_type),
7754 arglist, complain, in_decl),
7755 SCOPED_ENUM_P (template_type), NULL);
7756
7757 if (t == error_mark_node)
7758 return t;
7759 }
7760 else
7761 {
7762 /* We don't want to call start_enum for this type, since
7763 the values for the enumeration constants may involve
7764 template parameters. And, no one should be interested
7765 in the enumeration constants for such a type. */
7766 t = cxx_make_type (ENUMERAL_TYPE);
7767 SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
7768 }
7769 SET_OPAQUE_ENUM_P (t, OPAQUE_ENUM_P (template_type));
7770 ENUM_FIXED_UNDERLYING_TYPE_P (t)
7771 = ENUM_FIXED_UNDERLYING_TYPE_P (template_type);
7772 }
7773 else if (CLASS_TYPE_P (template_type))
7774 {
7775 t = make_class_type (TREE_CODE (template_type));
7776 CLASSTYPE_DECLARED_CLASS (t)
7777 = CLASSTYPE_DECLARED_CLASS (template_type);
7778 SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
7779 TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
7780
7781 /* A local class. Make sure the decl gets registered properly. */
7782 if (context == current_function_decl)
7783 pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current);
7784
7785 if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
7786 /* This instantiation is another name for the primary
7787 template type. Set the TYPE_CANONICAL field
7788 appropriately. */
7789 TYPE_CANONICAL (t) = template_type;
7790 else if (any_template_arguments_need_structural_equality_p (arglist))
7791 /* Some of the template arguments require structural
7792 equality testing, so this template class requires
7793 structural equality testing. */
7794 SET_TYPE_STRUCTURAL_EQUALITY (t);
7795 }
7796 else
7797 gcc_unreachable ();
7798
7799 /* If we called start_enum or pushtag above, this information
7800 will already be set up. */
7801 if (!TYPE_NAME (t))
7802 {
7803 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
7804
7805 type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
7806 DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
7807 DECL_SOURCE_LOCATION (type_decl)
7808 = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
7809 }
7810 else
7811 type_decl = TYPE_NAME (t);
7812
7813 if (CLASS_TYPE_P (template_type))
7814 {
7815 TREE_PRIVATE (type_decl)
7816 = TREE_PRIVATE (TYPE_MAIN_DECL (template_type));
7817 TREE_PROTECTED (type_decl)
7818 = TREE_PROTECTED (TYPE_MAIN_DECL (template_type));
7819 if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
7820 {
7821 DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
7822 DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
7823 }
7824 }
7825
7826 if (OVERLOAD_TYPE_P (t)
7827 && !DECL_ALIAS_TEMPLATE_P (gen_tmpl))
7828 {
7829 if (tree attributes
7830 = lookup_attribute ("abi_tag", TYPE_ATTRIBUTES (template_type)))
7831 {
7832 if (!TREE_CHAIN (attributes))
7833 TYPE_ATTRIBUTES (t) = attributes;
7834 else
7835 TYPE_ATTRIBUTES (t)
7836 = build_tree_list (TREE_PURPOSE (attributes),
7837 TREE_VALUE (attributes));
7838 }
7839 }
7840
7841 /* Let's consider the explicit specialization of a member
7842 of a class template specialization that is implicitly instantiated,
7843 e.g.:
7844 template<class T>
7845 struct S
7846 {
7847 template<class U> struct M {}; //#0
7848 };
7849
7850 template<>
7851 template<>
7852 struct S<int>::M<char> //#1
7853 {
7854 int i;
7855 };
7856 [temp.expl.spec]/4 says this is valid.
7857
7858 In this case, when we write:
7859 S<int>::M<char> m;
7860
7861 M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
7862 the one of #0.
7863
7864 When we encounter #1, we want to store the partial instantiation
7865 of M (template<class T> S<int>::M<T>) in its CLASSTYPE_TI_TEMPLATE.
7866
7867 For all cases other than this "explicit specialization of member of a
7868 class template", we just want to store the most general template into
7869 the CLASSTYPE_TI_TEMPLATE of M.
7870
7871 This case of "explicit specialization of member of a class template"
7872 only happens when:
7873 1/ the enclosing class is an instantiation of, and therefore not
7874 the same as, the context of the most general template, and
7875 2/ we aren't looking at the partial instantiation itself, i.e.
7876 the innermost arguments are not the same as the innermost parms of
7877 the most general template.
7878
7879 So it's only when 1/ and 2/ happens that we want to use the partial
7880 instantiation of the member template in lieu of its most general
7881 template. */
7882
7883 if (PRIMARY_TEMPLATE_P (gen_tmpl)
7884 && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
7885 /* the enclosing class must be an instantiation... */
7886 && CLASS_TYPE_P (context)
7887 && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
7888 {
7889 tree partial_inst_args;
7890 TREE_VEC_LENGTH (arglist)--;
7891 ++processing_template_decl;
7892 partial_inst_args =
7893 tsubst (INNERMOST_TEMPLATE_ARGS
7894 (TYPE_TI_ARGS (TREE_TYPE (gen_tmpl))),
7895 arglist, complain, NULL_TREE);
7896 --processing_template_decl;
7897 TREE_VEC_LENGTH (arglist)++;
7898 use_partial_inst_tmpl =
7899 /*...and we must not be looking at the partial instantiation
7900 itself. */
7901 !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
7902 partial_inst_args);
7903 }
7904
7905 if (!use_partial_inst_tmpl)
7906 /* This case is easy; there are no member templates involved. */
7907 found = gen_tmpl;
7908 else
7909 {
7910 /* This is a full instantiation of a member template. Find
7911 the partial instantiation of which this is an instance. */
7912
7913 /* Temporarily reduce by one the number of levels in the ARGLIST
7914 so as to avoid comparing the last set of arguments. */
7915 TREE_VEC_LENGTH (arglist)--;
7916 found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
7917 TREE_VEC_LENGTH (arglist)++;
7918 /* FOUND is either a proper class type, or an alias
7919 template specialization. In the later case, it's a
7920 TYPE_DECL, resulting from the substituting of arguments
7921 for parameters in the TYPE_DECL of the alias template
7922 done earlier. So be careful while getting the template
7923 of FOUND. */
7924 found = TREE_CODE (found) == TYPE_DECL
7925 ? TYPE_TI_TEMPLATE (TREE_TYPE (found))
7926 : CLASSTYPE_TI_TEMPLATE (found);
7927 }
7928
7929 SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
7930
7931 elt.spec = t;
7932 slot = type_specializations->find_slot_with_hash (&elt, hash, INSERT);
7933 entry = ggc_alloc<spec_entry> ();
7934 *entry = elt;
7935 *slot = entry;
7936
7937 /* Note this use of the partial instantiation so we can check it
7938 later in maybe_process_partial_specialization. */
7939 DECL_TEMPLATE_INSTANTIATIONS (found)
7940 = tree_cons (arglist, t,
7941 DECL_TEMPLATE_INSTANTIATIONS (found));
7942
7943 if (TREE_CODE (template_type) == ENUMERAL_TYPE && !is_dependent_type
7944 && !DECL_ALIAS_TEMPLATE_P (gen_tmpl))
7945 /* Now that the type has been registered on the instantiations
7946 list, we set up the enumerators. Because the enumeration
7947 constants may involve the enumeration type itself, we make
7948 sure to register the type first, and then create the
7949 constants. That way, doing tsubst_expr for the enumeration
7950 constants won't result in recursive calls here; we'll find
7951 the instantiation and exit above. */
7952 tsubst_enum (template_type, t, arglist);
7953
7954 if (CLASS_TYPE_P (template_type) && is_dependent_type)
7955 /* If the type makes use of template parameters, the
7956 code that generates debugging information will crash. */
7957 DECL_IGNORED_P (TYPE_MAIN_DECL (t)) = 1;
7958
7959 /* Possibly limit visibility based on template args. */
7960 TREE_PUBLIC (type_decl) = 1;
7961 determine_visibility (type_decl);
7962
7963 inherit_targ_abi_tags (t);
7964
7965 return t;
7966 }
7967 }
7968
7969 /* Wrapper for lookup_template_class_1. */
7970
7971 tree
7972 lookup_template_class (tree d1, tree arglist, tree in_decl, tree context,
7973 int entering_scope, tsubst_flags_t complain)
7974 {
7975 tree ret;
7976 timevar_push (TV_TEMPLATE_INST);
7977 ret = lookup_template_class_1 (d1, arglist, in_decl, context,
7978 entering_scope, complain);
7979 timevar_pop (TV_TEMPLATE_INST);
7980 return ret;
7981 }
7982
7983 /* Return a TEMPLATE_ID_EXPR for the given variable template and ARGLIST.
7984 If the ARGLIST refers to any template parameters, the type of the
7985 expression is the unknown_type_node since the template-id could
7986 refer to an explicit or partial specialization. */
7987
7988 tree
7989 lookup_template_variable (tree templ, tree arglist)
7990 {
7991 tree type;
7992 if (uses_template_parms (arglist))
7993 type = unknown_type_node;
7994 else
7995 type = TREE_TYPE (templ);
7996 return build2 (TEMPLATE_ID_EXPR, type, templ, arglist);
7997 }
7998
7999 \f
8000 struct pair_fn_data
8001 {
8002 tree_fn_t fn;
8003 void *data;
8004 /* True when we should also visit template parameters that occur in
8005 non-deduced contexts. */
8006 bool include_nondeduced_p;
8007 hash_set<tree> *visited;
8008 };
8009
8010 /* Called from for_each_template_parm via walk_tree. */
8011
8012 static tree
8013 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
8014 {
8015 tree t = *tp;
8016 struct pair_fn_data *pfd = (struct pair_fn_data *) d;
8017 tree_fn_t fn = pfd->fn;
8018 void *data = pfd->data;
8019
8020 if (TYPE_P (t)
8021 && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
8022 && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
8023 pfd->include_nondeduced_p))
8024 return error_mark_node;
8025
8026 switch (TREE_CODE (t))
8027 {
8028 case RECORD_TYPE:
8029 if (TYPE_PTRMEMFUNC_P (t))
8030 break;
8031 /* Fall through. */
8032
8033 case UNION_TYPE:
8034 case ENUMERAL_TYPE:
8035 if (!TYPE_TEMPLATE_INFO (t))
8036 *walk_subtrees = 0;
8037 else if (for_each_template_parm (TYPE_TI_ARGS (t),
8038 fn, data, pfd->visited,
8039 pfd->include_nondeduced_p))
8040 return error_mark_node;
8041 break;
8042
8043 case INTEGER_TYPE:
8044 if (for_each_template_parm (TYPE_MIN_VALUE (t),
8045 fn, data, pfd->visited,
8046 pfd->include_nondeduced_p)
8047 || for_each_template_parm (TYPE_MAX_VALUE (t),
8048 fn, data, pfd->visited,
8049 pfd->include_nondeduced_p))
8050 return error_mark_node;
8051 break;
8052
8053 case METHOD_TYPE:
8054 /* Since we're not going to walk subtrees, we have to do this
8055 explicitly here. */
8056 if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
8057 pfd->visited, pfd->include_nondeduced_p))
8058 return error_mark_node;
8059 /* Fall through. */
8060
8061 case FUNCTION_TYPE:
8062 /* Check the return type. */
8063 if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
8064 pfd->include_nondeduced_p))
8065 return error_mark_node;
8066
8067 /* Check the parameter types. Since default arguments are not
8068 instantiated until they are needed, the TYPE_ARG_TYPES may
8069 contain expressions that involve template parameters. But,
8070 no-one should be looking at them yet. And, once they're
8071 instantiated, they don't contain template parameters, so
8072 there's no point in looking at them then, either. */
8073 {
8074 tree parm;
8075
8076 for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
8077 if (for_each_template_parm (TREE_VALUE (parm), fn, data,
8078 pfd->visited, pfd->include_nondeduced_p))
8079 return error_mark_node;
8080
8081 /* Since we've already handled the TYPE_ARG_TYPES, we don't
8082 want walk_tree walking into them itself. */
8083 *walk_subtrees = 0;
8084 }
8085 break;
8086
8087 case TYPEOF_TYPE:
8088 case UNDERLYING_TYPE:
8089 if (pfd->include_nondeduced_p
8090 && for_each_template_parm (TYPE_FIELDS (t), fn, data,
8091 pfd->visited,
8092 pfd->include_nondeduced_p))
8093 return error_mark_node;
8094 break;
8095
8096 case FUNCTION_DECL:
8097 case VAR_DECL:
8098 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
8099 && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
8100 pfd->visited, pfd->include_nondeduced_p))
8101 return error_mark_node;
8102 /* Fall through. */
8103
8104 case PARM_DECL:
8105 case CONST_DECL:
8106 if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
8107 && for_each_template_parm (DECL_INITIAL (t), fn, data,
8108 pfd->visited, pfd->include_nondeduced_p))
8109 return error_mark_node;
8110 if (DECL_CONTEXT (t)
8111 && pfd->include_nondeduced_p
8112 && for_each_template_parm (DECL_CONTEXT (t), fn, data,
8113 pfd->visited, pfd->include_nondeduced_p))
8114 return error_mark_node;
8115 break;
8116
8117 case BOUND_TEMPLATE_TEMPLATE_PARM:
8118 /* Record template parameters such as `T' inside `TT<T>'. */
8119 if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
8120 pfd->include_nondeduced_p))
8121 return error_mark_node;
8122 /* Fall through. */
8123
8124 case TEMPLATE_TEMPLATE_PARM:
8125 case TEMPLATE_TYPE_PARM:
8126 case TEMPLATE_PARM_INDEX:
8127 if (fn && (*fn)(t, data))
8128 return error_mark_node;
8129 else if (!fn)
8130 return error_mark_node;
8131 break;
8132
8133 case TEMPLATE_DECL:
8134 /* A template template parameter is encountered. */
8135 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
8136 && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
8137 pfd->include_nondeduced_p))
8138 return error_mark_node;
8139
8140 /* Already substituted template template parameter */
8141 *walk_subtrees = 0;
8142 break;
8143
8144 case TYPENAME_TYPE:
8145 if (!fn
8146 || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
8147 data, pfd->visited,
8148 pfd->include_nondeduced_p))
8149 return error_mark_node;
8150 break;
8151
8152 case CONSTRUCTOR:
8153 if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
8154 && pfd->include_nondeduced_p
8155 && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
8156 (TREE_TYPE (t)), fn, data,
8157 pfd->visited, pfd->include_nondeduced_p))
8158 return error_mark_node;
8159 break;
8160
8161 case INDIRECT_REF:
8162 case COMPONENT_REF:
8163 /* If there's no type, then this thing must be some expression
8164 involving template parameters. */
8165 if (!fn && !TREE_TYPE (t))
8166 return error_mark_node;
8167 break;
8168
8169 case MODOP_EXPR:
8170 case CAST_EXPR:
8171 case IMPLICIT_CONV_EXPR:
8172 case REINTERPRET_CAST_EXPR:
8173 case CONST_CAST_EXPR:
8174 case STATIC_CAST_EXPR:
8175 case DYNAMIC_CAST_EXPR:
8176 case ARROW_EXPR:
8177 case DOTSTAR_EXPR:
8178 case TYPEID_EXPR:
8179 case PSEUDO_DTOR_EXPR:
8180 if (!fn)
8181 return error_mark_node;
8182 break;
8183
8184 default:
8185 break;
8186 }
8187
8188 /* We didn't find any template parameters we liked. */
8189 return NULL_TREE;
8190 }
8191
8192 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
8193 BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
8194 call FN with the parameter and the DATA.
8195 If FN returns nonzero, the iteration is terminated, and
8196 for_each_template_parm returns 1. Otherwise, the iteration
8197 continues. If FN never returns a nonzero value, the value
8198 returned by for_each_template_parm is 0. If FN is NULL, it is
8199 considered to be the function which always returns 1.
8200
8201 If INCLUDE_NONDEDUCED_P, then this routine will also visit template
8202 parameters that occur in non-deduced contexts. When false, only
8203 visits those template parameters that can be deduced. */
8204
8205 static int
8206 for_each_template_parm (tree t, tree_fn_t fn, void* data,
8207 hash_set<tree> *visited,
8208 bool include_nondeduced_p)
8209 {
8210 struct pair_fn_data pfd;
8211 int result;
8212
8213 /* Set up. */
8214 pfd.fn = fn;
8215 pfd.data = data;
8216 pfd.include_nondeduced_p = include_nondeduced_p;
8217
8218 /* Walk the tree. (Conceptually, we would like to walk without
8219 duplicates, but for_each_template_parm_r recursively calls
8220 for_each_template_parm, so we would need to reorganize a fair
8221 bit to use walk_tree_without_duplicates, so we keep our own
8222 visited list.) */
8223 if (visited)
8224 pfd.visited = visited;
8225 else
8226 pfd.visited = new hash_set<tree>;
8227 result = cp_walk_tree (&t,
8228 for_each_template_parm_r,
8229 &pfd,
8230 pfd.visited) != NULL_TREE;
8231
8232 /* Clean up. */
8233 if (!visited)
8234 {
8235 delete pfd.visited;
8236 pfd.visited = 0;
8237 }
8238
8239 return result;
8240 }
8241
8242 /* Returns true if T depends on any template parameter. */
8243
8244 int
8245 uses_template_parms (tree t)
8246 {
8247 bool dependent_p;
8248 int saved_processing_template_decl;
8249
8250 saved_processing_template_decl = processing_template_decl;
8251 if (!saved_processing_template_decl)
8252 processing_template_decl = 1;
8253 if (TYPE_P (t))
8254 dependent_p = dependent_type_p (t);
8255 else if (TREE_CODE (t) == TREE_VEC)
8256 dependent_p = any_dependent_template_arguments_p (t);
8257 else if (TREE_CODE (t) == TREE_LIST)
8258 dependent_p = (uses_template_parms (TREE_VALUE (t))
8259 || uses_template_parms (TREE_CHAIN (t)));
8260 else if (TREE_CODE (t) == TYPE_DECL)
8261 dependent_p = dependent_type_p (TREE_TYPE (t));
8262 else if (DECL_P (t)
8263 || EXPR_P (t)
8264 || TREE_CODE (t) == TEMPLATE_PARM_INDEX
8265 || TREE_CODE (t) == OVERLOAD
8266 || BASELINK_P (t)
8267 || identifier_p (t)
8268 || TREE_CODE (t) == TRAIT_EXPR
8269 || TREE_CODE (t) == CONSTRUCTOR
8270 || CONSTANT_CLASS_P (t))
8271 dependent_p = (type_dependent_expression_p (t)
8272 || value_dependent_expression_p (t));
8273 else
8274 {
8275 gcc_assert (t == error_mark_node);
8276 dependent_p = false;
8277 }
8278
8279 processing_template_decl = saved_processing_template_decl;
8280
8281 return dependent_p;
8282 }
8283
8284 /* Returns true iff current_function_decl is an incompletely instantiated
8285 template. Useful instead of processing_template_decl because the latter
8286 is set to 0 during fold_non_dependent_expr. */
8287
8288 bool
8289 in_template_function (void)
8290 {
8291 tree fn = current_function_decl;
8292 bool ret;
8293 ++processing_template_decl;
8294 ret = (fn && DECL_LANG_SPECIFIC (fn)
8295 && DECL_TEMPLATE_INFO (fn)
8296 && any_dependent_template_arguments_p (DECL_TI_ARGS (fn)));
8297 --processing_template_decl;
8298 return ret;
8299 }
8300
8301 /* Returns true if T depends on any template parameter with level LEVEL. */
8302
8303 int
8304 uses_template_parms_level (tree t, int level)
8305 {
8306 return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
8307 /*include_nondeduced_p=*/true);
8308 }
8309
8310 /* Returns TRUE iff INST is an instantiation we don't need to do in an
8311 ill-formed translation unit, i.e. a variable or function that isn't
8312 usable in a constant expression. */
8313
8314 static inline bool
8315 neglectable_inst_p (tree d)
8316 {
8317 return (DECL_P (d)
8318 && !(TREE_CODE (d) == FUNCTION_DECL ? DECL_DECLARED_CONSTEXPR_P (d)
8319 : decl_maybe_constant_var_p (d)));
8320 }
8321
8322 /* Returns TRUE iff we should refuse to instantiate DECL because it's
8323 neglectable and instantiated from within an erroneous instantiation. */
8324
8325 static bool
8326 limit_bad_template_recursion (tree decl)
8327 {
8328 struct tinst_level *lev = current_tinst_level;
8329 int errs = errorcount + sorrycount;
8330 if (lev == NULL || errs == 0 || !neglectable_inst_p (decl))
8331 return false;
8332
8333 for (; lev; lev = lev->next)
8334 if (neglectable_inst_p (lev->decl))
8335 break;
8336
8337 return (lev && errs > lev->errors);
8338 }
8339
8340 static int tinst_depth;
8341 extern int max_tinst_depth;
8342 int depth_reached;
8343
8344 static GTY(()) struct tinst_level *last_error_tinst_level;
8345
8346 /* We're starting to instantiate D; record the template instantiation context
8347 for diagnostics and to restore it later. */
8348
8349 bool
8350 push_tinst_level (tree d)
8351 {
8352 return push_tinst_level_loc (d, input_location);
8353 }
8354
8355 /* We're starting to instantiate D; record the template instantiation context
8356 at LOC for diagnostics and to restore it later. */
8357
8358 bool
8359 push_tinst_level_loc (tree d, location_t loc)
8360 {
8361 struct tinst_level *new_level;
8362
8363 if (tinst_depth >= max_tinst_depth)
8364 {
8365 fatal_error ("template instantiation depth exceeds maximum of %d"
8366 " (use -ftemplate-depth= to increase the maximum)",
8367 max_tinst_depth);
8368 return false;
8369 }
8370
8371 /* If the current instantiation caused problems, don't let it instantiate
8372 anything else. Do allow deduction substitution and decls usable in
8373 constant expressions. */
8374 if (limit_bad_template_recursion (d))
8375 return false;
8376
8377 new_level = ggc_alloc<tinst_level> ();
8378 new_level->decl = d;
8379 new_level->locus = loc;
8380 new_level->errors = errorcount+sorrycount;
8381 new_level->in_system_header_p = in_system_header_at (input_location);
8382 new_level->next = current_tinst_level;
8383 current_tinst_level = new_level;
8384
8385 ++tinst_depth;
8386 if (GATHER_STATISTICS && (tinst_depth > depth_reached))
8387 depth_reached = tinst_depth;
8388
8389 return true;
8390 }
8391
8392 /* We're done instantiating this template; return to the instantiation
8393 context. */
8394
8395 void
8396 pop_tinst_level (void)
8397 {
8398 /* Restore the filename and line number stashed away when we started
8399 this instantiation. */
8400 input_location = current_tinst_level->locus;
8401 current_tinst_level = current_tinst_level->next;
8402 --tinst_depth;
8403 }
8404
8405 /* We're instantiating a deferred template; restore the template
8406 instantiation context in which the instantiation was requested, which
8407 is one step out from LEVEL. Return the corresponding DECL or TYPE. */
8408
8409 static tree
8410 reopen_tinst_level (struct tinst_level *level)
8411 {
8412 struct tinst_level *t;
8413
8414 tinst_depth = 0;
8415 for (t = level; t; t = t->next)
8416 ++tinst_depth;
8417
8418 current_tinst_level = level;
8419 pop_tinst_level ();
8420 if (current_tinst_level)
8421 current_tinst_level->errors = errorcount+sorrycount;
8422 return level->decl;
8423 }
8424
8425 /* Returns the TINST_LEVEL which gives the original instantiation
8426 context. */
8427
8428 struct tinst_level *
8429 outermost_tinst_level (void)
8430 {
8431 struct tinst_level *level = current_tinst_level;
8432 if (level)
8433 while (level->next)
8434 level = level->next;
8435 return level;
8436 }
8437
8438 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
8439 vector of template arguments, as for tsubst.
8440
8441 Returns an appropriate tsubst'd friend declaration. */
8442
8443 static tree
8444 tsubst_friend_function (tree decl, tree args)
8445 {
8446 tree new_friend;
8447
8448 if (TREE_CODE (decl) == FUNCTION_DECL
8449 && DECL_TEMPLATE_INSTANTIATION (decl)
8450 && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
8451 /* This was a friend declared with an explicit template
8452 argument list, e.g.:
8453
8454 friend void f<>(T);
8455
8456 to indicate that f was a template instantiation, not a new
8457 function declaration. Now, we have to figure out what
8458 instantiation of what template. */
8459 {
8460 tree template_id, arglist, fns;
8461 tree new_args;
8462 tree tmpl;
8463 tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
8464
8465 /* Friend functions are looked up in the containing namespace scope.
8466 We must enter that scope, to avoid finding member functions of the
8467 current class with same name. */
8468 push_nested_namespace (ns);
8469 fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
8470 tf_warning_or_error, NULL_TREE,
8471 /*integral_constant_expression_p=*/false);
8472 pop_nested_namespace (ns);
8473 arglist = tsubst (DECL_TI_ARGS (decl), args,
8474 tf_warning_or_error, NULL_TREE);
8475 template_id = lookup_template_function (fns, arglist);
8476
8477 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8478 tmpl = determine_specialization (template_id, new_friend,
8479 &new_args,
8480 /*need_member_template=*/0,
8481 TREE_VEC_LENGTH (args),
8482 tsk_none);
8483 return instantiate_template (tmpl, new_args, tf_error);
8484 }
8485
8486 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8487
8488 /* The NEW_FRIEND will look like an instantiation, to the
8489 compiler, but is not an instantiation from the point of view of
8490 the language. For example, we might have had:
8491
8492 template <class T> struct S {
8493 template <class U> friend void f(T, U);
8494 };
8495
8496 Then, in S<int>, template <class U> void f(int, U) is not an
8497 instantiation of anything. */
8498 if (new_friend == error_mark_node)
8499 return error_mark_node;
8500
8501 DECL_USE_TEMPLATE (new_friend) = 0;
8502 if (TREE_CODE (decl) == TEMPLATE_DECL)
8503 {
8504 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
8505 DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
8506 = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
8507 }
8508
8509 /* The mangled name for the NEW_FRIEND is incorrect. The function
8510 is not a template instantiation and should not be mangled like
8511 one. Therefore, we forget the mangling here; we'll recompute it
8512 later if we need it. */
8513 if (TREE_CODE (new_friend) != TEMPLATE_DECL)
8514 {
8515 SET_DECL_RTL (new_friend, NULL);
8516 SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
8517 }
8518
8519 if (DECL_NAMESPACE_SCOPE_P (new_friend))
8520 {
8521 tree old_decl;
8522 tree new_friend_template_info;
8523 tree new_friend_result_template_info;
8524 tree ns;
8525 int new_friend_is_defn;
8526
8527 /* We must save some information from NEW_FRIEND before calling
8528 duplicate decls since that function will free NEW_FRIEND if
8529 possible. */
8530 new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
8531 new_friend_is_defn =
8532 (DECL_INITIAL (DECL_TEMPLATE_RESULT
8533 (template_for_substitution (new_friend)))
8534 != NULL_TREE);
8535 if (TREE_CODE (new_friend) == TEMPLATE_DECL)
8536 {
8537 /* This declaration is a `primary' template. */
8538 DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
8539
8540 new_friend_result_template_info
8541 = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
8542 }
8543 else
8544 new_friend_result_template_info = NULL_TREE;
8545
8546 /* Make the init_value nonzero so pushdecl knows this is a defn. */
8547 if (new_friend_is_defn)
8548 DECL_INITIAL (new_friend) = error_mark_node;
8549
8550 /* Inside pushdecl_namespace_level, we will push into the
8551 current namespace. However, the friend function should go
8552 into the namespace of the template. */
8553 ns = decl_namespace_context (new_friend);
8554 push_nested_namespace (ns);
8555 old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
8556 pop_nested_namespace (ns);
8557
8558 if (old_decl == error_mark_node)
8559 return error_mark_node;
8560
8561 if (old_decl != new_friend)
8562 {
8563 /* This new friend declaration matched an existing
8564 declaration. For example, given:
8565
8566 template <class T> void f(T);
8567 template <class U> class C {
8568 template <class T> friend void f(T) {}
8569 };
8570
8571 the friend declaration actually provides the definition
8572 of `f', once C has been instantiated for some type. So,
8573 old_decl will be the out-of-class template declaration,
8574 while new_friend is the in-class definition.
8575
8576 But, if `f' was called before this point, the
8577 instantiation of `f' will have DECL_TI_ARGS corresponding
8578 to `T' but not to `U', references to which might appear
8579 in the definition of `f'. Previously, the most general
8580 template for an instantiation of `f' was the out-of-class
8581 version; now it is the in-class version. Therefore, we
8582 run through all specialization of `f', adding to their
8583 DECL_TI_ARGS appropriately. In particular, they need a
8584 new set of outer arguments, corresponding to the
8585 arguments for this class instantiation.
8586
8587 The same situation can arise with something like this:
8588
8589 friend void f(int);
8590 template <class T> class C {
8591 friend void f(T) {}
8592 };
8593
8594 when `C<int>' is instantiated. Now, `f(int)' is defined
8595 in the class. */
8596
8597 if (!new_friend_is_defn)
8598 /* On the other hand, if the in-class declaration does
8599 *not* provide a definition, then we don't want to alter
8600 existing definitions. We can just leave everything
8601 alone. */
8602 ;
8603 else
8604 {
8605 tree new_template = TI_TEMPLATE (new_friend_template_info);
8606 tree new_args = TI_ARGS (new_friend_template_info);
8607
8608 /* Overwrite whatever template info was there before, if
8609 any, with the new template information pertaining to
8610 the declaration. */
8611 DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
8612
8613 if (TREE_CODE (old_decl) != TEMPLATE_DECL)
8614 {
8615 /* We should have called reregister_specialization in
8616 duplicate_decls. */
8617 gcc_assert (retrieve_specialization (new_template,
8618 new_args, 0)
8619 == old_decl);
8620
8621 /* Instantiate it if the global has already been used. */
8622 if (DECL_ODR_USED (old_decl))
8623 instantiate_decl (old_decl, /*defer_ok=*/true,
8624 /*expl_inst_class_mem_p=*/false);
8625 }
8626 else
8627 {
8628 tree t;
8629
8630 /* Indicate that the old function template is a partial
8631 instantiation. */
8632 DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
8633 = new_friend_result_template_info;
8634
8635 gcc_assert (new_template
8636 == most_general_template (new_template));
8637 gcc_assert (new_template != old_decl);
8638
8639 /* Reassign any specializations already in the hash table
8640 to the new more general template, and add the
8641 additional template args. */
8642 for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
8643 t != NULL_TREE;
8644 t = TREE_CHAIN (t))
8645 {
8646 tree spec = TREE_VALUE (t);
8647 spec_entry elt;
8648
8649 elt.tmpl = old_decl;
8650 elt.args = DECL_TI_ARGS (spec);
8651 elt.spec = NULL_TREE;
8652
8653 decl_specializations->remove_elt (&elt);
8654
8655 DECL_TI_ARGS (spec)
8656 = add_outermost_template_args (new_args,
8657 DECL_TI_ARGS (spec));
8658
8659 register_specialization
8660 (spec, new_template, DECL_TI_ARGS (spec), true, 0);
8661
8662 }
8663 DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
8664 }
8665 }
8666
8667 /* The information from NEW_FRIEND has been merged into OLD_DECL
8668 by duplicate_decls. */
8669 new_friend = old_decl;
8670 }
8671 }
8672 else
8673 {
8674 tree context = DECL_CONTEXT (new_friend);
8675 bool dependent_p;
8676
8677 /* In the code
8678 template <class T> class C {
8679 template <class U> friend void C1<U>::f (); // case 1
8680 friend void C2<T>::f (); // case 2
8681 };
8682 we only need to make sure CONTEXT is a complete type for
8683 case 2. To distinguish between the two cases, we note that
8684 CONTEXT of case 1 remains dependent type after tsubst while
8685 this isn't true for case 2. */
8686 ++processing_template_decl;
8687 dependent_p = dependent_type_p (context);
8688 --processing_template_decl;
8689
8690 if (!dependent_p
8691 && !complete_type_or_else (context, NULL_TREE))
8692 return error_mark_node;
8693
8694 if (COMPLETE_TYPE_P (context))
8695 {
8696 tree fn = new_friend;
8697 /* do_friend adds the TEMPLATE_DECL for any member friend
8698 template even if it isn't a member template, i.e.
8699 template <class T> friend A<T>::f();
8700 Look through it in that case. */
8701 if (TREE_CODE (fn) == TEMPLATE_DECL
8702 && !PRIMARY_TEMPLATE_P (fn))
8703 fn = DECL_TEMPLATE_RESULT (fn);
8704 /* Check to see that the declaration is really present, and,
8705 possibly obtain an improved declaration. */
8706 fn = check_classfn (context, fn, NULL_TREE);
8707
8708 if (fn)
8709 new_friend = fn;
8710 }
8711 }
8712
8713 return new_friend;
8714 }
8715
8716 /* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
8717 template arguments, as for tsubst.
8718
8719 Returns an appropriate tsubst'd friend type or error_mark_node on
8720 failure. */
8721
8722 static tree
8723 tsubst_friend_class (tree friend_tmpl, tree args)
8724 {
8725 tree friend_type;
8726 tree tmpl;
8727 tree context;
8728
8729 if (DECL_TEMPLATE_TEMPLATE_PARM_P (friend_tmpl))
8730 {
8731 tree t = tsubst (TREE_TYPE (friend_tmpl), args, tf_none, NULL_TREE);
8732 return TREE_TYPE (t);
8733 }
8734
8735 context = CP_DECL_CONTEXT (friend_tmpl);
8736
8737 if (context != global_namespace)
8738 {
8739 if (TREE_CODE (context) == NAMESPACE_DECL)
8740 push_nested_namespace (context);
8741 else
8742 push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
8743 }
8744
8745 /* Look for a class template declaration. We look for hidden names
8746 because two friend declarations of the same template are the
8747 same. For example, in:
8748
8749 struct A {
8750 template <typename> friend class F;
8751 };
8752 template <typename> struct B {
8753 template <typename> friend class F;
8754 };
8755
8756 both F templates are the same. */
8757 tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
8758 /*block_p=*/true, 0, LOOKUP_HIDDEN);
8759
8760 /* But, if we don't find one, it might be because we're in a
8761 situation like this:
8762
8763 template <class T>
8764 struct S {
8765 template <class U>
8766 friend struct S;
8767 };
8768
8769 Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
8770 for `S<int>', not the TEMPLATE_DECL. */
8771 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
8772 {
8773 tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
8774 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
8775 }
8776
8777 if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
8778 {
8779 /* The friend template has already been declared. Just
8780 check to see that the declarations match, and install any new
8781 default parameters. We must tsubst the default parameters,
8782 of course. We only need the innermost template parameters
8783 because that is all that redeclare_class_template will look
8784 at. */
8785 if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
8786 > TMPL_ARGS_DEPTH (args))
8787 {
8788 tree parms;
8789 location_t saved_input_location;
8790 parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
8791 args, tf_warning_or_error);
8792
8793 saved_input_location = input_location;
8794 input_location = DECL_SOURCE_LOCATION (friend_tmpl);
8795 redeclare_class_template (TREE_TYPE (tmpl), parms);
8796 input_location = saved_input_location;
8797
8798 }
8799
8800 friend_type = TREE_TYPE (tmpl);
8801 }
8802 else
8803 {
8804 /* The friend template has not already been declared. In this
8805 case, the instantiation of the template class will cause the
8806 injection of this template into the global scope. */
8807 tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
8808 if (tmpl == error_mark_node)
8809 return error_mark_node;
8810
8811 /* The new TMPL is not an instantiation of anything, so we
8812 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE for
8813 the new type because that is supposed to be the corresponding
8814 template decl, i.e., TMPL. */
8815 DECL_USE_TEMPLATE (tmpl) = 0;
8816 DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
8817 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
8818 CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
8819 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
8820
8821 /* Inject this template into the global scope. */
8822 friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
8823 }
8824
8825 if (context != global_namespace)
8826 {
8827 if (TREE_CODE (context) == NAMESPACE_DECL)
8828 pop_nested_namespace (context);
8829 else
8830 pop_nested_class ();
8831 }
8832
8833 return friend_type;
8834 }
8835
8836 /* Returns zero if TYPE cannot be completed later due to circularity.
8837 Otherwise returns one. */
8838
8839 static int
8840 can_complete_type_without_circularity (tree type)
8841 {
8842 if (type == NULL_TREE || type == error_mark_node)
8843 return 0;
8844 else if (COMPLETE_TYPE_P (type))
8845 return 1;
8846 else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
8847 return can_complete_type_without_circularity (TREE_TYPE (type));
8848 else if (CLASS_TYPE_P (type)
8849 && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
8850 return 0;
8851 else
8852 return 1;
8853 }
8854
8855 static tree tsubst_omp_clauses (tree, bool, tree, tsubst_flags_t, tree);
8856
8857 /* Apply any attributes which had to be deferred until instantiation
8858 time. DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
8859 ARGS, COMPLAIN, IN_DECL are as tsubst. */
8860
8861 static void
8862 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
8863 tree args, tsubst_flags_t complain, tree in_decl)
8864 {
8865 tree last_dep = NULL_TREE;
8866 tree t;
8867 tree *p;
8868
8869 for (t = attributes; t; t = TREE_CHAIN (t))
8870 if (ATTR_IS_DEPENDENT (t))
8871 {
8872 last_dep = t;
8873 attributes = copy_list (attributes);
8874 break;
8875 }
8876
8877 if (DECL_P (*decl_p))
8878 {
8879 if (TREE_TYPE (*decl_p) == error_mark_node)
8880 return;
8881 p = &DECL_ATTRIBUTES (*decl_p);
8882 }
8883 else
8884 p = &TYPE_ATTRIBUTES (*decl_p);
8885
8886 if (last_dep)
8887 {
8888 tree late_attrs = NULL_TREE;
8889 tree *q = &late_attrs;
8890
8891 for (*p = attributes; *p; )
8892 {
8893 t = *p;
8894 if (ATTR_IS_DEPENDENT (t))
8895 {
8896 *p = TREE_CHAIN (t);
8897 TREE_CHAIN (t) = NULL_TREE;
8898 if ((flag_openmp || flag_cilkplus)
8899 && is_attribute_p ("omp declare simd",
8900 get_attribute_name (t))
8901 && TREE_VALUE (t))
8902 {
8903 tree clauses = TREE_VALUE (TREE_VALUE (t));
8904 clauses = tsubst_omp_clauses (clauses, true, args,
8905 complain, in_decl);
8906 c_omp_declare_simd_clauses_to_decls (*decl_p, clauses);
8907 clauses = finish_omp_clauses (clauses);
8908 tree parms = DECL_ARGUMENTS (*decl_p);
8909 clauses
8910 = c_omp_declare_simd_clauses_to_numbers (parms, clauses);
8911 if (clauses)
8912 TREE_VALUE (TREE_VALUE (t)) = clauses;
8913 else
8914 TREE_VALUE (t) = NULL_TREE;
8915 }
8916 /* If the first attribute argument is an identifier, don't
8917 pass it through tsubst. Attributes like mode, format,
8918 cleanup and several target specific attributes expect it
8919 unmodified. */
8920 else if (attribute_takes_identifier_p (get_attribute_name (t))
8921 && TREE_VALUE (t))
8922 {
8923 tree chain
8924 = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
8925 in_decl,
8926 /*integral_constant_expression_p=*/false);
8927 if (chain != TREE_CHAIN (TREE_VALUE (t)))
8928 TREE_VALUE (t)
8929 = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
8930 chain);
8931 }
8932 else
8933 TREE_VALUE (t)
8934 = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
8935 /*integral_constant_expression_p=*/false);
8936 *q = t;
8937 q = &TREE_CHAIN (t);
8938 }
8939 else
8940 p = &TREE_CHAIN (t);
8941 }
8942
8943 cplus_decl_attributes (decl_p, late_attrs, attr_flags);
8944 }
8945 }
8946
8947 /* Perform (or defer) access check for typedefs that were referenced
8948 from within the template TMPL code.
8949 This is a subroutine of instantiate_decl and instantiate_class_template.
8950 TMPL is the template to consider and TARGS is the list of arguments of
8951 that template. */
8952
8953 static void
8954 perform_typedefs_access_check (tree tmpl, tree targs)
8955 {
8956 location_t saved_location;
8957 unsigned i;
8958 qualified_typedef_usage_t *iter;
8959
8960 if (!tmpl
8961 || (!CLASS_TYPE_P (tmpl)
8962 && TREE_CODE (tmpl) != FUNCTION_DECL))
8963 return;
8964
8965 saved_location = input_location;
8966 FOR_EACH_VEC_SAFE_ELT (get_types_needing_access_check (tmpl), i, iter)
8967 {
8968 tree type_decl = iter->typedef_decl;
8969 tree type_scope = iter->context;
8970
8971 if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
8972 continue;
8973
8974 if (uses_template_parms (type_decl))
8975 type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
8976 if (uses_template_parms (type_scope))
8977 type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
8978
8979 /* Make access check error messages point to the location
8980 of the use of the typedef. */
8981 input_location = iter->locus;
8982 perform_or_defer_access_check (TYPE_BINFO (type_scope),
8983 type_decl, type_decl,
8984 tf_warning_or_error);
8985 }
8986 input_location = saved_location;
8987 }
8988
8989 static tree
8990 instantiate_class_template_1 (tree type)
8991 {
8992 tree templ, args, pattern, t, member;
8993 tree typedecl;
8994 tree pbinfo;
8995 tree base_list;
8996 unsigned int saved_maximum_field_alignment;
8997 tree fn_context;
8998
8999 if (type == error_mark_node)
9000 return error_mark_node;
9001
9002 if (COMPLETE_OR_OPEN_TYPE_P (type)
9003 || uses_template_parms (type))
9004 return type;
9005
9006 /* Figure out which template is being instantiated. */
9007 templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
9008 gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
9009
9010 /* Determine what specialization of the original template to
9011 instantiate. */
9012 t = most_specialized_class (type, tf_warning_or_error);
9013 if (t == error_mark_node)
9014 {
9015 TYPE_BEING_DEFINED (type) = 1;
9016 return error_mark_node;
9017 }
9018 else if (t)
9019 {
9020 /* This TYPE is actually an instantiation of a partial
9021 specialization. We replace the innermost set of ARGS with
9022 the arguments appropriate for substitution. For example,
9023 given:
9024
9025 template <class T> struct S {};
9026 template <class T> struct S<T*> {};
9027
9028 and supposing that we are instantiating S<int*>, ARGS will
9029 presently be {int*} -- but we need {int}. */
9030 pattern = TREE_TYPE (t);
9031 args = TREE_PURPOSE (t);
9032 }
9033 else
9034 {
9035 pattern = TREE_TYPE (templ);
9036 args = CLASSTYPE_TI_ARGS (type);
9037 }
9038
9039 /* If the template we're instantiating is incomplete, then clearly
9040 there's nothing we can do. */
9041 if (!COMPLETE_TYPE_P (pattern))
9042 return type;
9043
9044 /* If we've recursively instantiated too many templates, stop. */
9045 if (! push_tinst_level (type))
9046 return type;
9047
9048 /* Now we're really doing the instantiation. Mark the type as in
9049 the process of being defined. */
9050 TYPE_BEING_DEFINED (type) = 1;
9051
9052 /* We may be in the middle of deferred access check. Disable
9053 it now. */
9054 push_deferring_access_checks (dk_no_deferred);
9055
9056 fn_context = decl_function_context (TYPE_MAIN_DECL (type));
9057 /* Also avoid push_to_top_level for a lambda in an NSDMI. */
9058 if (!fn_context && LAMBDA_TYPE_P (type) && TYPE_CLASS_SCOPE_P (type))
9059 fn_context = error_mark_node;
9060 if (!fn_context)
9061 push_to_top_level ();
9062 /* Use #pragma pack from the template context. */
9063 saved_maximum_field_alignment = maximum_field_alignment;
9064 maximum_field_alignment = TYPE_PRECISION (pattern);
9065
9066 SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
9067
9068 /* Set the input location to the most specialized template definition.
9069 This is needed if tsubsting causes an error. */
9070 typedecl = TYPE_MAIN_DECL (pattern);
9071 input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) =
9072 DECL_SOURCE_LOCATION (typedecl);
9073
9074 TYPE_PACKED (type) = TYPE_PACKED (pattern);
9075 TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
9076 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
9077 TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
9078 if (ANON_AGGR_TYPE_P (pattern))
9079 SET_ANON_AGGR_TYPE_P (type);
9080 if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
9081 {
9082 CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
9083 CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
9084 /* Adjust visibility for template arguments. */
9085 determine_visibility (TYPE_MAIN_DECL (type));
9086 }
9087 if (CLASS_TYPE_P (type))
9088 CLASSTYPE_FINAL (type) = CLASSTYPE_FINAL (pattern);
9089
9090 pbinfo = TYPE_BINFO (pattern);
9091
9092 /* We should never instantiate a nested class before its enclosing
9093 class; we need to look up the nested class by name before we can
9094 instantiate it, and that lookup should instantiate the enclosing
9095 class. */
9096 gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
9097 || COMPLETE_OR_OPEN_TYPE_P (TYPE_CONTEXT (type)));
9098
9099 base_list = NULL_TREE;
9100 if (BINFO_N_BASE_BINFOS (pbinfo))
9101 {
9102 tree pbase_binfo;
9103 tree pushed_scope;
9104 int i;
9105
9106 /* We must enter the scope containing the type, as that is where
9107 the accessibility of types named in dependent bases are
9108 looked up from. */
9109 pushed_scope = push_scope (CP_TYPE_CONTEXT (type));
9110
9111 /* Substitute into each of the bases to determine the actual
9112 basetypes. */
9113 for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
9114 {
9115 tree base;
9116 tree access = BINFO_BASE_ACCESS (pbinfo, i);
9117 tree expanded_bases = NULL_TREE;
9118 int idx, len = 1;
9119
9120 if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
9121 {
9122 expanded_bases =
9123 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
9124 args, tf_error, NULL_TREE);
9125 if (expanded_bases == error_mark_node)
9126 continue;
9127
9128 len = TREE_VEC_LENGTH (expanded_bases);
9129 }
9130
9131 for (idx = 0; idx < len; idx++)
9132 {
9133 if (expanded_bases)
9134 /* Extract the already-expanded base class. */
9135 base = TREE_VEC_ELT (expanded_bases, idx);
9136 else
9137 /* Substitute to figure out the base class. */
9138 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error,
9139 NULL_TREE);
9140
9141 if (base == error_mark_node)
9142 continue;
9143
9144 base_list = tree_cons (access, base, base_list);
9145 if (BINFO_VIRTUAL_P (pbase_binfo))
9146 TREE_TYPE (base_list) = integer_type_node;
9147 }
9148 }
9149
9150 /* The list is now in reverse order; correct that. */
9151 base_list = nreverse (base_list);
9152
9153 if (pushed_scope)
9154 pop_scope (pushed_scope);
9155 }
9156 /* Now call xref_basetypes to set up all the base-class
9157 information. */
9158 xref_basetypes (type, base_list);
9159
9160 apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
9161 (int) ATTR_FLAG_TYPE_IN_PLACE,
9162 args, tf_error, NULL_TREE);
9163 fixup_attribute_variants (type);
9164
9165 /* Now that our base classes are set up, enter the scope of the
9166 class, so that name lookups into base classes, etc. will work
9167 correctly. This is precisely analogous to what we do in
9168 begin_class_definition when defining an ordinary non-template
9169 class, except we also need to push the enclosing classes. */
9170 push_nested_class (type);
9171
9172 /* Now members are processed in the order of declaration. */
9173 for (member = CLASSTYPE_DECL_LIST (pattern);
9174 member; member = TREE_CHAIN (member))
9175 {
9176 tree t = TREE_VALUE (member);
9177
9178 if (TREE_PURPOSE (member))
9179 {
9180 if (TYPE_P (t))
9181 {
9182 /* Build new CLASSTYPE_NESTED_UTDS. */
9183
9184 tree newtag;
9185 bool class_template_p;
9186
9187 class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
9188 && TYPE_LANG_SPECIFIC (t)
9189 && CLASSTYPE_IS_TEMPLATE (t));
9190 /* If the member is a class template, then -- even after
9191 substitution -- there may be dependent types in the
9192 template argument list for the class. We increment
9193 PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
9194 that function will assume that no types are dependent
9195 when outside of a template. */
9196 if (class_template_p)
9197 ++processing_template_decl;
9198 newtag = tsubst (t, args, tf_error, NULL_TREE);
9199 if (class_template_p)
9200 --processing_template_decl;
9201 if (newtag == error_mark_node)
9202 continue;
9203
9204 if (TREE_CODE (newtag) != ENUMERAL_TYPE)
9205 {
9206 tree name = TYPE_IDENTIFIER (t);
9207
9208 if (class_template_p)
9209 /* Unfortunately, lookup_template_class sets
9210 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
9211 instantiation (i.e., for the type of a member
9212 template class nested within a template class.)
9213 This behavior is required for
9214 maybe_process_partial_specialization to work
9215 correctly, but is not accurate in this case;
9216 the TAG is not an instantiation of anything.
9217 (The corresponding TEMPLATE_DECL is an
9218 instantiation, but the TYPE is not.) */
9219 CLASSTYPE_USE_TEMPLATE (newtag) = 0;
9220
9221 /* Now, we call pushtag to put this NEWTAG into the scope of
9222 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
9223 pushtag calling push_template_decl. We don't have to do
9224 this for enums because it will already have been done in
9225 tsubst_enum. */
9226 if (name)
9227 SET_IDENTIFIER_TYPE_VALUE (name, newtag);
9228 pushtag (name, newtag, /*tag_scope=*/ts_current);
9229 }
9230 }
9231 else if (DECL_DECLARES_FUNCTION_P (t))
9232 {
9233 /* Build new TYPE_METHODS. */
9234 tree r;
9235
9236 if (TREE_CODE (t) == TEMPLATE_DECL)
9237 ++processing_template_decl;
9238 r = tsubst (t, args, tf_error, NULL_TREE);
9239 if (TREE_CODE (t) == TEMPLATE_DECL)
9240 --processing_template_decl;
9241 set_current_access_from_decl (r);
9242 finish_member_declaration (r);
9243 /* Instantiate members marked with attribute used. */
9244 if (r != error_mark_node && DECL_PRESERVE_P (r))
9245 mark_used (r);
9246 if (TREE_CODE (r) == FUNCTION_DECL
9247 && DECL_OMP_DECLARE_REDUCTION_P (r))
9248 cp_check_omp_declare_reduction (r);
9249 }
9250 else if (DECL_CLASS_TEMPLATE_P (t)
9251 && LAMBDA_TYPE_P (TREE_TYPE (t)))
9252 /* A closure type for a lambda in a default argument for a
9253 member template. Ignore it; it will be instantiated with
9254 the default argument. */;
9255 else
9256 {
9257 /* Build new TYPE_FIELDS. */
9258 if (TREE_CODE (t) == STATIC_ASSERT)
9259 {
9260 tree condition;
9261
9262 ++c_inhibit_evaluation_warnings;
9263 condition =
9264 tsubst_expr (STATIC_ASSERT_CONDITION (t), args,
9265 tf_warning_or_error, NULL_TREE,
9266 /*integral_constant_expression_p=*/true);
9267 --c_inhibit_evaluation_warnings;
9268
9269 finish_static_assert (condition,
9270 STATIC_ASSERT_MESSAGE (t),
9271 STATIC_ASSERT_SOURCE_LOCATION (t),
9272 /*member_p=*/true);
9273 }
9274 else if (TREE_CODE (t) != CONST_DECL)
9275 {
9276 tree r;
9277 tree vec = NULL_TREE;
9278 int len = 1;
9279
9280 /* The file and line for this declaration, to
9281 assist in error message reporting. Since we
9282 called push_tinst_level above, we don't need to
9283 restore these. */
9284 input_location = DECL_SOURCE_LOCATION (t);
9285
9286 if (TREE_CODE (t) == TEMPLATE_DECL)
9287 ++processing_template_decl;
9288 r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
9289 if (TREE_CODE (t) == TEMPLATE_DECL)
9290 --processing_template_decl;
9291
9292 if (TREE_CODE (r) == TREE_VEC)
9293 {
9294 /* A capture pack became multiple fields. */
9295 vec = r;
9296 len = TREE_VEC_LENGTH (vec);
9297 }
9298
9299 for (int i = 0; i < len; ++i)
9300 {
9301 if (vec)
9302 r = TREE_VEC_ELT (vec, i);
9303 if (VAR_P (r))
9304 {
9305 /* In [temp.inst]:
9306
9307 [t]he initialization (and any associated
9308 side-effects) of a static data member does
9309 not occur unless the static data member is
9310 itself used in a way that requires the
9311 definition of the static data member to
9312 exist.
9313
9314 Therefore, we do not substitute into the
9315 initialized for the static data member here. */
9316 finish_static_data_member_decl
9317 (r,
9318 /*init=*/NULL_TREE,
9319 /*init_const_expr_p=*/false,
9320 /*asmspec_tree=*/NULL_TREE,
9321 /*flags=*/0);
9322 /* Instantiate members marked with attribute used. */
9323 if (r != error_mark_node && DECL_PRESERVE_P (r))
9324 mark_used (r);
9325 }
9326 else if (TREE_CODE (r) == FIELD_DECL)
9327 {
9328 /* Determine whether R has a valid type and can be
9329 completed later. If R is invalid, then its type
9330 is replaced by error_mark_node. */
9331 tree rtype = TREE_TYPE (r);
9332 if (can_complete_type_without_circularity (rtype))
9333 complete_type (rtype);
9334
9335 if (!COMPLETE_TYPE_P (rtype))
9336 {
9337 cxx_incomplete_type_error (r, rtype);
9338 TREE_TYPE (r) = error_mark_node;
9339 }
9340 }
9341
9342 /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
9343 such a thing will already have been added to the field
9344 list by tsubst_enum in finish_member_declaration in the
9345 CLASSTYPE_NESTED_UTDS case above. */
9346 if (!(TREE_CODE (r) == TYPE_DECL
9347 && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
9348 && DECL_ARTIFICIAL (r)))
9349 {
9350 set_current_access_from_decl (r);
9351 finish_member_declaration (r);
9352 }
9353 }
9354 }
9355 }
9356 }
9357 else
9358 {
9359 if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t)
9360 || DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9361 {
9362 /* Build new CLASSTYPE_FRIEND_CLASSES. */
9363
9364 tree friend_type = t;
9365 bool adjust_processing_template_decl = false;
9366
9367 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
9368 {
9369 /* template <class T> friend class C; */
9370 friend_type = tsubst_friend_class (friend_type, args);
9371 adjust_processing_template_decl = true;
9372 }
9373 else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
9374 {
9375 /* template <class T> friend class C::D; */
9376 friend_type = tsubst (friend_type, args,
9377 tf_warning_or_error, NULL_TREE);
9378 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
9379 friend_type = TREE_TYPE (friend_type);
9380 adjust_processing_template_decl = true;
9381 }
9382 else if (TREE_CODE (friend_type) == TYPENAME_TYPE
9383 || TREE_CODE (friend_type) == TEMPLATE_TYPE_PARM)
9384 {
9385 /* This could be either
9386
9387 friend class T::C;
9388
9389 when dependent_type_p is false or
9390
9391 template <class U> friend class T::C;
9392
9393 otherwise. */
9394 friend_type = tsubst (friend_type, args,
9395 tf_warning_or_error, NULL_TREE);
9396 /* Bump processing_template_decl for correct
9397 dependent_type_p calculation. */
9398 ++processing_template_decl;
9399 if (dependent_type_p (friend_type))
9400 adjust_processing_template_decl = true;
9401 --processing_template_decl;
9402 }
9403 else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
9404 && hidden_name_p (TYPE_NAME (friend_type)))
9405 {
9406 /* friend class C;
9407
9408 where C hasn't been declared yet. Let's lookup name
9409 from namespace scope directly, bypassing any name that
9410 come from dependent base class. */
9411 tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
9412
9413 /* The call to xref_tag_from_type does injection for friend
9414 classes. */
9415 push_nested_namespace (ns);
9416 friend_type =
9417 xref_tag_from_type (friend_type, NULL_TREE,
9418 /*tag_scope=*/ts_current);
9419 pop_nested_namespace (ns);
9420 }
9421 else if (uses_template_parms (friend_type))
9422 /* friend class C<T>; */
9423 friend_type = tsubst (friend_type, args,
9424 tf_warning_or_error, NULL_TREE);
9425 /* Otherwise it's
9426
9427 friend class C;
9428
9429 where C is already declared or
9430
9431 friend class C<int>;
9432
9433 We don't have to do anything in these cases. */
9434
9435 if (adjust_processing_template_decl)
9436 /* Trick make_friend_class into realizing that the friend
9437 we're adding is a template, not an ordinary class. It's
9438 important that we use make_friend_class since it will
9439 perform some error-checking and output cross-reference
9440 information. */
9441 ++processing_template_decl;
9442
9443 if (friend_type != error_mark_node)
9444 make_friend_class (type, friend_type, /*complain=*/false);
9445
9446 if (adjust_processing_template_decl)
9447 --processing_template_decl;
9448 }
9449 else
9450 {
9451 /* Build new DECL_FRIENDLIST. */
9452 tree r;
9453
9454 /* The file and line for this declaration, to
9455 assist in error message reporting. Since we
9456 called push_tinst_level above, we don't need to
9457 restore these. */
9458 input_location = DECL_SOURCE_LOCATION (t);
9459
9460 if (TREE_CODE (t) == TEMPLATE_DECL)
9461 {
9462 ++processing_template_decl;
9463 push_deferring_access_checks (dk_no_check);
9464 }
9465
9466 r = tsubst_friend_function (t, args);
9467 add_friend (type, r, /*complain=*/false);
9468 if (TREE_CODE (t) == TEMPLATE_DECL)
9469 {
9470 pop_deferring_access_checks ();
9471 --processing_template_decl;
9472 }
9473 }
9474 }
9475 }
9476
9477 if (tree expr = CLASSTYPE_LAMBDA_EXPR (type))
9478 {
9479 tree decl = lambda_function (type);
9480 if (decl)
9481 {
9482 if (!DECL_TEMPLATE_INFO (decl)
9483 || DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (decl)) != decl)
9484 instantiate_decl (decl, false, false);
9485
9486 /* We need to instantiate the capture list from the template
9487 after we've instantiated the closure members, but before we
9488 consider adding the conversion op. Also keep any captures
9489 that may have been added during instantiation of the op(). */
9490 tree tmpl_expr = CLASSTYPE_LAMBDA_EXPR (pattern);
9491 tree tmpl_cap
9492 = tsubst_copy_and_build (LAMBDA_EXPR_CAPTURE_LIST (tmpl_expr),
9493 args, tf_warning_or_error, NULL_TREE,
9494 false, false);
9495
9496 LAMBDA_EXPR_CAPTURE_LIST (expr)
9497 = chainon (tmpl_cap, nreverse (LAMBDA_EXPR_CAPTURE_LIST (expr)));
9498
9499 maybe_add_lambda_conv_op (type);
9500 }
9501 else
9502 gcc_assert (errorcount);
9503 }
9504
9505 /* Set the file and line number information to whatever is given for
9506 the class itself. This puts error messages involving generated
9507 implicit functions at a predictable point, and the same point
9508 that would be used for non-template classes. */
9509 input_location = DECL_SOURCE_LOCATION (typedecl);
9510
9511 unreverse_member_declarations (type);
9512 finish_struct_1 (type);
9513 TYPE_BEING_DEFINED (type) = 0;
9514
9515 /* We don't instantiate default arguments for member functions. 14.7.1:
9516
9517 The implicit instantiation of a class template specialization causes
9518 the implicit instantiation of the declarations, but not of the
9519 definitions or default arguments, of the class member functions,
9520 member classes, static data members and member templates.... */
9521
9522 /* Some typedefs referenced from within the template code need to be access
9523 checked at template instantiation time, i.e now. These types were
9524 added to the template at parsing time. Let's get those and perform
9525 the access checks then. */
9526 perform_typedefs_access_check (pattern, args);
9527 perform_deferred_access_checks (tf_warning_or_error);
9528 pop_nested_class ();
9529 maximum_field_alignment = saved_maximum_field_alignment;
9530 if (!fn_context)
9531 pop_from_top_level ();
9532 pop_deferring_access_checks ();
9533 pop_tinst_level ();
9534
9535 /* The vtable for a template class can be emitted in any translation
9536 unit in which the class is instantiated. When there is no key
9537 method, however, finish_struct_1 will already have added TYPE to
9538 the keyed_classes list. */
9539 if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
9540 keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
9541
9542 return type;
9543 }
9544
9545 /* Wrapper for instantiate_class_template_1. */
9546
9547 tree
9548 instantiate_class_template (tree type)
9549 {
9550 tree ret;
9551 timevar_push (TV_TEMPLATE_INST);
9552 ret = instantiate_class_template_1 (type);
9553 timevar_pop (TV_TEMPLATE_INST);
9554 return ret;
9555 }
9556
9557 static tree
9558 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9559 {
9560 tree r;
9561
9562 if (!t)
9563 r = t;
9564 else if (TYPE_P (t))
9565 r = tsubst (t, args, complain, in_decl);
9566 else
9567 {
9568 if (!(complain & tf_warning))
9569 ++c_inhibit_evaluation_warnings;
9570 r = tsubst_expr (t, args, complain, in_decl,
9571 /*integral_constant_expression_p=*/true);
9572 if (!(complain & tf_warning))
9573 --c_inhibit_evaluation_warnings;
9574 }
9575 return r;
9576 }
9577
9578 /* Given a function parameter pack TMPL_PARM and some function parameters
9579 instantiated from it at *SPEC_P, return a NONTYPE_ARGUMENT_PACK of them
9580 and set *SPEC_P to point at the next point in the list. */
9581
9582 static tree
9583 extract_fnparm_pack (tree tmpl_parm, tree *spec_p)
9584 {
9585 /* Collect all of the extra "packed" parameters into an
9586 argument pack. */
9587 tree parmvec;
9588 tree parmtypevec;
9589 tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
9590 tree argtypepack = cxx_make_type (TYPE_ARGUMENT_PACK);
9591 tree spec_parm = *spec_p;
9592 int i, len;
9593
9594 for (len = 0; spec_parm; ++len, spec_parm = TREE_CHAIN (spec_parm))
9595 if (tmpl_parm
9596 && !function_parameter_expanded_from_pack_p (spec_parm, tmpl_parm))
9597 break;
9598
9599 /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters. */
9600 parmvec = make_tree_vec (len);
9601 parmtypevec = make_tree_vec (len);
9602 spec_parm = *spec_p;
9603 for (i = 0; i < len; i++, spec_parm = DECL_CHAIN (spec_parm))
9604 {
9605 TREE_VEC_ELT (parmvec, i) = spec_parm;
9606 TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
9607 }
9608
9609 /* Build the argument packs. */
9610 SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
9611 SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
9612 TREE_TYPE (argpack) = argtypepack;
9613 *spec_p = spec_parm;
9614
9615 return argpack;
9616 }
9617
9618 /* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
9619 NONTYPE_ARGUMENT_PACK. */
9620
9621 static tree
9622 make_fnparm_pack (tree spec_parm)
9623 {
9624 return extract_fnparm_pack (NULL_TREE, &spec_parm);
9625 }
9626
9627 /* Return true iff the Ith element of the argument pack ARG_PACK is a
9628 pack expansion. */
9629
9630 static bool
9631 argument_pack_element_is_expansion_p (tree arg_pack, int i)
9632 {
9633 tree vec = ARGUMENT_PACK_ARGS (arg_pack);
9634 if (i >= TREE_VEC_LENGTH (vec))
9635 return false;
9636 return PACK_EXPANSION_P (TREE_VEC_ELT (vec, i));
9637 }
9638
9639
9640 /* Creates and return an ARGUMENT_PACK_SELECT tree node. */
9641
9642 static tree
9643 make_argument_pack_select (tree arg_pack, unsigned index)
9644 {
9645 tree aps = make_node (ARGUMENT_PACK_SELECT);
9646
9647 ARGUMENT_PACK_SELECT_FROM_PACK (aps) = arg_pack;
9648 ARGUMENT_PACK_SELECT_INDEX (aps) = index;
9649
9650 return aps;
9651 }
9652
9653 /* This is a subroutine of tsubst_pack_expansion.
9654
9655 It returns TRUE if we need to use the PACK_EXPANSION_EXTRA_ARGS
9656 mechanism to store the (non complete list of) arguments of the
9657 substitution and return a non substituted pack expansion, in order
9658 to wait for when we have enough arguments to really perform the
9659 substitution. */
9660
9661 static bool
9662 use_pack_expansion_extra_args_p (tree parm_packs,
9663 int arg_pack_len,
9664 bool has_empty_arg)
9665 {
9666 /* If one pack has an expansion and another pack has a normal
9667 argument or if one pack has an empty argument and an another
9668 one hasn't then tsubst_pack_expansion cannot perform the
9669 substitution and need to fall back on the
9670 PACK_EXPANSION_EXTRA mechanism. */
9671 if (parm_packs == NULL_TREE)
9672 return false;
9673 else if (has_empty_arg)
9674 return true;
9675
9676 bool has_expansion_arg = false;
9677 for (int i = 0 ; i < arg_pack_len; ++i)
9678 {
9679 bool has_non_expansion_arg = false;
9680 for (tree parm_pack = parm_packs;
9681 parm_pack;
9682 parm_pack = TREE_CHAIN (parm_pack))
9683 {
9684 tree arg = TREE_VALUE (parm_pack);
9685
9686 if (argument_pack_element_is_expansion_p (arg, i))
9687 has_expansion_arg = true;
9688 else
9689 has_non_expansion_arg = true;
9690 }
9691
9692 if (has_expansion_arg && has_non_expansion_arg)
9693 return true;
9694 }
9695 return false;
9696 }
9697
9698 /* [temp.variadic]/6 says that:
9699
9700 The instantiation of a pack expansion [...]
9701 produces a list E1,E2, ..., En, where N is the number of elements
9702 in the pack expansion parameters.
9703
9704 This subroutine of tsubst_pack_expansion produces one of these Ei.
9705
9706 PATTERN is the pattern of the pack expansion. PARM_PACKS is a
9707 TREE_LIST in which each TREE_PURPOSE is a parameter pack of
9708 PATTERN, and each TREE_VALUE is its corresponding argument pack.
9709 INDEX is the index 'i' of the element Ei to produce. ARGS,
9710 COMPLAIN, and IN_DECL are the same parameters as for the
9711 tsubst_pack_expansion function.
9712
9713 The function returns the resulting Ei upon successful completion,
9714 or error_mark_node.
9715
9716 Note that this function possibly modifies the ARGS parameter, so
9717 it's the responsibility of the caller to restore it. */
9718
9719 static tree
9720 gen_elem_of_pack_expansion_instantiation (tree pattern,
9721 tree parm_packs,
9722 unsigned index,
9723 tree args /* This parm gets
9724 modified. */,
9725 tsubst_flags_t complain,
9726 tree in_decl)
9727 {
9728 tree t;
9729 bool ith_elem_is_expansion = false;
9730
9731 /* For each parameter pack, change the substitution of the parameter
9732 pack to the ith argument in its argument pack, then expand the
9733 pattern. */
9734 for (tree pack = parm_packs; pack; pack = TREE_CHAIN (pack))
9735 {
9736 tree parm = TREE_PURPOSE (pack);
9737 tree arg_pack = TREE_VALUE (pack);
9738 tree aps; /* instance of ARGUMENT_PACK_SELECT. */
9739
9740 ith_elem_is_expansion |=
9741 argument_pack_element_is_expansion_p (arg_pack, index);
9742
9743 /* Select the Ith argument from the pack. */
9744 if (TREE_CODE (parm) == PARM_DECL
9745 || TREE_CODE (parm) == FIELD_DECL)
9746 {
9747 if (index == 0)
9748 {
9749 aps = make_argument_pack_select (arg_pack, index);
9750 mark_used (parm);
9751 register_local_specialization (aps, parm);
9752 }
9753 else
9754 aps = retrieve_local_specialization (parm);
9755 }
9756 else
9757 {
9758 int idx, level;
9759 template_parm_level_and_index (parm, &level, &idx);
9760
9761 if (index == 0)
9762 {
9763 aps = make_argument_pack_select (arg_pack, index);
9764 /* Update the corresponding argument. */
9765 TMPL_ARG (args, level, idx) = aps;
9766 }
9767 else
9768 /* Re-use the ARGUMENT_PACK_SELECT. */
9769 aps = TMPL_ARG (args, level, idx);
9770 }
9771 ARGUMENT_PACK_SELECT_INDEX (aps) = index;
9772 }
9773
9774 /* Substitute into the PATTERN with the (possibly altered)
9775 arguments. */
9776 if (pattern == in_decl)
9777 /* Expanding a fixed parameter pack from
9778 coerce_template_parameter_pack. */
9779 t = tsubst_decl (pattern, args, complain);
9780 else if (!TYPE_P (pattern))
9781 t = tsubst_expr (pattern, args, complain, in_decl,
9782 /*integral_constant_expression_p=*/false);
9783 else
9784 t = tsubst (pattern, args, complain, in_decl);
9785
9786 /* If the Ith argument pack element is a pack expansion, then
9787 the Ith element resulting from the substituting is going to
9788 be a pack expansion as well. */
9789 if (ith_elem_is_expansion)
9790 t = make_pack_expansion (t);
9791
9792 return t;
9793 }
9794
9795 /* Substitute ARGS into T, which is an pack expansion
9796 (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
9797 TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
9798 (if only a partial substitution could be performed) or
9799 ERROR_MARK_NODE if there was an error. */
9800 tree
9801 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
9802 tree in_decl)
9803 {
9804 tree pattern;
9805 tree pack, packs = NULL_TREE;
9806 bool unsubstituted_packs = false;
9807 int i, len = -1;
9808 tree result;
9809 hash_map<tree, tree> *saved_local_specializations = NULL;
9810 bool need_local_specializations = false;
9811 int levels;
9812
9813 gcc_assert (PACK_EXPANSION_P (t));
9814 pattern = PACK_EXPANSION_PATTERN (t);
9815
9816 /* Add in any args remembered from an earlier partial instantiation. */
9817 args = add_to_template_args (PACK_EXPANSION_EXTRA_ARGS (t), args);
9818
9819 levels = TMPL_ARGS_DEPTH (args);
9820
9821 /* Determine the argument packs that will instantiate the parameter
9822 packs used in the expansion expression. While we're at it,
9823 compute the number of arguments to be expanded and make sure it
9824 is consistent. */
9825 for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack;
9826 pack = TREE_CHAIN (pack))
9827 {
9828 tree parm_pack = TREE_VALUE (pack);
9829 tree arg_pack = NULL_TREE;
9830 tree orig_arg = NULL_TREE;
9831 int level = 0;
9832
9833 if (TREE_CODE (parm_pack) == BASES)
9834 {
9835 if (BASES_DIRECT (parm_pack))
9836 return calculate_direct_bases (tsubst_expr (BASES_TYPE (parm_pack),
9837 args, complain, in_decl, false));
9838 else
9839 return calculate_bases (tsubst_expr (BASES_TYPE (parm_pack),
9840 args, complain, in_decl, false));
9841 }
9842 if (TREE_CODE (parm_pack) == PARM_DECL)
9843 {
9844 if (PACK_EXPANSION_LOCAL_P (t))
9845 arg_pack = retrieve_local_specialization (parm_pack);
9846 else
9847 {
9848 /* We can't rely on local_specializations for a parameter
9849 name used later in a function declaration (such as in a
9850 late-specified return type). Even if it exists, it might
9851 have the wrong value for a recursive call. Just make a
9852 dummy decl, since it's only used for its type. */
9853 arg_pack = tsubst_decl (parm_pack, args, complain);
9854 if (arg_pack && DECL_PACK_P (arg_pack))
9855 /* Partial instantiation of the parm_pack, we can't build
9856 up an argument pack yet. */
9857 arg_pack = NULL_TREE;
9858 else
9859 arg_pack = make_fnparm_pack (arg_pack);
9860 need_local_specializations = true;
9861 }
9862 }
9863 else if (TREE_CODE (parm_pack) == FIELD_DECL)
9864 arg_pack = tsubst_copy (parm_pack, args, complain, in_decl);
9865 else
9866 {
9867 int idx;
9868 template_parm_level_and_index (parm_pack, &level, &idx);
9869
9870 if (level <= levels)
9871 arg_pack = TMPL_ARG (args, level, idx);
9872 }
9873
9874 orig_arg = arg_pack;
9875 if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
9876 arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
9877
9878 if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
9879 /* This can only happen if we forget to expand an argument
9880 pack somewhere else. Just return an error, silently. */
9881 {
9882 result = make_tree_vec (1);
9883 TREE_VEC_ELT (result, 0) = error_mark_node;
9884 return result;
9885 }
9886
9887 if (arg_pack)
9888 {
9889 int my_len =
9890 TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
9891
9892 /* Don't bother trying to do a partial substitution with
9893 incomplete packs; we'll try again after deduction. */
9894 if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
9895 return t;
9896
9897 if (len < 0)
9898 len = my_len;
9899 else if (len != my_len)
9900 {
9901 if (!(complain & tf_error))
9902 /* Fail quietly. */;
9903 else if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
9904 error ("mismatched argument pack lengths while expanding "
9905 "%<%T%>",
9906 pattern);
9907 else
9908 error ("mismatched argument pack lengths while expanding "
9909 "%<%E%>",
9910 pattern);
9911 return error_mark_node;
9912 }
9913
9914 /* Keep track of the parameter packs and their corresponding
9915 argument packs. */
9916 packs = tree_cons (parm_pack, arg_pack, packs);
9917 TREE_TYPE (packs) = orig_arg;
9918 }
9919 else
9920 {
9921 /* We can't substitute for this parameter pack. We use a flag as
9922 well as the missing_level counter because function parameter
9923 packs don't have a level. */
9924 unsubstituted_packs = true;
9925 }
9926 }
9927
9928 /* If the expansion is just T..., return the matching argument pack. */
9929 if (!unsubstituted_packs
9930 && TREE_PURPOSE (packs) == pattern)
9931 {
9932 tree args = ARGUMENT_PACK_ARGS (TREE_VALUE (packs));
9933 if (TREE_CODE (t) == TYPE_PACK_EXPANSION
9934 || pack_expansion_args_count (args))
9935 return args;
9936 /* Otherwise use the normal path so we get convert_from_reference. */
9937 }
9938
9939 /* We cannot expand this expansion expression, because we don't have
9940 all of the argument packs we need. */
9941 if (use_pack_expansion_extra_args_p (packs, len, unsubstituted_packs))
9942 {
9943 /* We got some full packs, but we can't substitute them in until we
9944 have values for all the packs. So remember these until then. */
9945
9946 t = make_pack_expansion (pattern);
9947 PACK_EXPANSION_EXTRA_ARGS (t) = args;
9948 return t;
9949 }
9950 else if (unsubstituted_packs)
9951 {
9952 /* There were no real arguments, we're just replacing a parameter
9953 pack with another version of itself. Substitute into the
9954 pattern and return a PACK_EXPANSION_*. The caller will need to
9955 deal with that. */
9956 if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
9957 t = tsubst_expr (pattern, args, complain, in_decl,
9958 /*integral_constant_expression_p=*/false);
9959 else
9960 t = tsubst (pattern, args, complain, in_decl);
9961 t = make_pack_expansion (t);
9962 return t;
9963 }
9964
9965 gcc_assert (len >= 0);
9966
9967 if (need_local_specializations)
9968 {
9969 /* We're in a late-specified return type, so create our own local
9970 specializations map; the current map is either NULL or (in the
9971 case of recursive unification) might have bindings that we don't
9972 want to use or alter. */
9973 saved_local_specializations = local_specializations;
9974 local_specializations = new hash_map<tree, tree>;
9975 }
9976
9977 /* For each argument in each argument pack, substitute into the
9978 pattern. */
9979 result = make_tree_vec (len);
9980 for (i = 0; i < len; ++i)
9981 {
9982 t = gen_elem_of_pack_expansion_instantiation (pattern, packs,
9983 i,
9984 args, complain,
9985 in_decl);
9986 TREE_VEC_ELT (result, i) = t;
9987 if (t == error_mark_node)
9988 {
9989 result = error_mark_node;
9990 break;
9991 }
9992 }
9993
9994 /* Update ARGS to restore the substitution from parameter packs to
9995 their argument packs. */
9996 for (pack = packs; pack; pack = TREE_CHAIN (pack))
9997 {
9998 tree parm = TREE_PURPOSE (pack);
9999
10000 if (TREE_CODE (parm) == PARM_DECL
10001 || TREE_CODE (parm) == FIELD_DECL)
10002 register_local_specialization (TREE_TYPE (pack), parm);
10003 else
10004 {
10005 int idx, level;
10006
10007 if (TREE_VALUE (pack) == NULL_TREE)
10008 continue;
10009
10010 template_parm_level_and_index (parm, &level, &idx);
10011
10012 /* Update the corresponding argument. */
10013 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
10014 TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
10015 TREE_TYPE (pack);
10016 else
10017 TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
10018 }
10019 }
10020
10021 if (need_local_specializations)
10022 {
10023 delete local_specializations;
10024 local_specializations = saved_local_specializations;
10025 }
10026
10027 return result;
10028 }
10029
10030 /* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
10031 TMPL. We do this using DECL_PARM_INDEX, which should work even with
10032 parameter packs; all parms generated from a function parameter pack will
10033 have the same DECL_PARM_INDEX. */
10034
10035 tree
10036 get_pattern_parm (tree parm, tree tmpl)
10037 {
10038 tree pattern = DECL_TEMPLATE_RESULT (tmpl);
10039 tree patparm;
10040
10041 if (DECL_ARTIFICIAL (parm))
10042 {
10043 for (patparm = DECL_ARGUMENTS (pattern);
10044 patparm; patparm = DECL_CHAIN (patparm))
10045 if (DECL_ARTIFICIAL (patparm)
10046 && DECL_NAME (parm) == DECL_NAME (patparm))
10047 break;
10048 }
10049 else
10050 {
10051 patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
10052 patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
10053 gcc_assert (DECL_PARM_INDEX (patparm)
10054 == DECL_PARM_INDEX (parm));
10055 }
10056
10057 return patparm;
10058 }
10059
10060 /* Substitute ARGS into the vector or list of template arguments T. */
10061
10062 static tree
10063 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
10064 {
10065 tree orig_t = t;
10066 int len, need_new = 0, i, expanded_len_adjust = 0, out;
10067 tree *elts;
10068
10069 if (t == error_mark_node)
10070 return error_mark_node;
10071
10072 len = TREE_VEC_LENGTH (t);
10073 elts = XALLOCAVEC (tree, len);
10074
10075 for (i = 0; i < len; i++)
10076 {
10077 tree orig_arg = TREE_VEC_ELT (t, i);
10078 tree new_arg;
10079
10080 if (TREE_CODE (orig_arg) == TREE_VEC)
10081 new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
10082 else if (PACK_EXPANSION_P (orig_arg))
10083 {
10084 /* Substitute into an expansion expression. */
10085 new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
10086
10087 if (TREE_CODE (new_arg) == TREE_VEC)
10088 /* Add to the expanded length adjustment the number of
10089 expanded arguments. We subtract one from this
10090 measurement, because the argument pack expression
10091 itself is already counted as 1 in
10092 LEN. EXPANDED_LEN_ADJUST can actually be negative, if
10093 the argument pack is empty. */
10094 expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
10095 }
10096 else if (ARGUMENT_PACK_P (orig_arg))
10097 {
10098 /* Substitute into each of the arguments. */
10099 new_arg = TYPE_P (orig_arg)
10100 ? cxx_make_type (TREE_CODE (orig_arg))
10101 : make_node (TREE_CODE (orig_arg));
10102
10103 SET_ARGUMENT_PACK_ARGS (
10104 new_arg,
10105 tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
10106 args, complain, in_decl));
10107
10108 if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
10109 new_arg = error_mark_node;
10110
10111 if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
10112 TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
10113 complain, in_decl);
10114 TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
10115
10116 if (TREE_TYPE (new_arg) == error_mark_node)
10117 new_arg = error_mark_node;
10118 }
10119 }
10120 else
10121 new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
10122
10123 if (new_arg == error_mark_node)
10124 return error_mark_node;
10125
10126 elts[i] = new_arg;
10127 if (new_arg != orig_arg)
10128 need_new = 1;
10129 }
10130
10131 if (!need_new)
10132 return t;
10133
10134 /* Make space for the expanded arguments coming from template
10135 argument packs. */
10136 t = make_tree_vec (len + expanded_len_adjust);
10137 /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
10138 arguments for a member template.
10139 In that case each TREE_VEC in ORIG_T represents a level of template
10140 arguments, and ORIG_T won't carry any non defaulted argument count.
10141 It will rather be the nested TREE_VECs that will carry one.
10142 In other words, ORIG_T carries a non defaulted argument count only
10143 if it doesn't contain any nested TREE_VEC. */
10144 if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
10145 {
10146 int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
10147 count += expanded_len_adjust;
10148 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
10149 }
10150 for (i = 0, out = 0; i < len; i++)
10151 {
10152 if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
10153 || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
10154 && TREE_CODE (elts[i]) == TREE_VEC)
10155 {
10156 int idx;
10157
10158 /* Now expand the template argument pack "in place". */
10159 for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
10160 TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
10161 }
10162 else
10163 {
10164 TREE_VEC_ELT (t, out) = elts[i];
10165 out++;
10166 }
10167 }
10168
10169 return t;
10170 }
10171
10172 /* Return the result of substituting ARGS into the template parameters
10173 given by PARMS. If there are m levels of ARGS and m + n levels of
10174 PARMS, then the result will contain n levels of PARMS. For
10175 example, if PARMS is `template <class T> template <class U>
10176 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
10177 result will be `template <int*, double, class V>'. */
10178
10179 static tree
10180 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
10181 {
10182 tree r = NULL_TREE;
10183 tree* new_parms;
10184
10185 /* When substituting into a template, we must set
10186 PROCESSING_TEMPLATE_DECL as the template parameters may be
10187 dependent if they are based on one-another, and the dependency
10188 predicates are short-circuit outside of templates. */
10189 ++processing_template_decl;
10190
10191 for (new_parms = &r;
10192 parms && TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
10193 new_parms = &(TREE_CHAIN (*new_parms)),
10194 parms = TREE_CHAIN (parms))
10195 {
10196 tree new_vec =
10197 make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
10198 int i;
10199
10200 for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
10201 {
10202 tree tuple;
10203
10204 if (parms == error_mark_node)
10205 continue;
10206
10207 tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
10208
10209 if (tuple == error_mark_node)
10210 continue;
10211
10212 TREE_VEC_ELT (new_vec, i) =
10213 tsubst_template_parm (tuple, args, complain);
10214 }
10215
10216 *new_parms =
10217 tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
10218 - TMPL_ARGS_DEPTH (args)),
10219 new_vec, NULL_TREE);
10220 }
10221
10222 --processing_template_decl;
10223
10224 return r;
10225 }
10226
10227 /* Return the result of substituting ARGS into one template parameter
10228 given by T. T Must be a TREE_LIST which TREE_VALUE is the template
10229 parameter and which TREE_PURPOSE is the default argument of the
10230 template parameter. */
10231
10232 static tree
10233 tsubst_template_parm (tree t, tree args, tsubst_flags_t complain)
10234 {
10235 tree default_value, parm_decl;
10236
10237 if (args == NULL_TREE
10238 || t == NULL_TREE
10239 || t == error_mark_node)
10240 return t;
10241
10242 gcc_assert (TREE_CODE (t) == TREE_LIST);
10243
10244 default_value = TREE_PURPOSE (t);
10245 parm_decl = TREE_VALUE (t);
10246
10247 parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
10248 if (TREE_CODE (parm_decl) == PARM_DECL
10249 && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
10250 parm_decl = error_mark_node;
10251 default_value = tsubst_template_arg (default_value, args,
10252 complain, NULL_TREE);
10253
10254 return build_tree_list (default_value, parm_decl);
10255 }
10256
10257 /* Substitute the ARGS into the indicated aggregate (or enumeration)
10258 type T. If T is not an aggregate or enumeration type, it is
10259 handled as if by tsubst. IN_DECL is as for tsubst. If
10260 ENTERING_SCOPE is nonzero, T is the context for a template which
10261 we are presently tsubst'ing. Return the substituted value. */
10262
10263 static tree
10264 tsubst_aggr_type (tree t,
10265 tree args,
10266 tsubst_flags_t complain,
10267 tree in_decl,
10268 int entering_scope)
10269 {
10270 if (t == NULL_TREE)
10271 return NULL_TREE;
10272
10273 switch (TREE_CODE (t))
10274 {
10275 case RECORD_TYPE:
10276 if (TYPE_PTRMEMFUNC_P (t))
10277 return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
10278
10279 /* Else fall through. */
10280 case ENUMERAL_TYPE:
10281 case UNION_TYPE:
10282 if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
10283 {
10284 tree argvec;
10285 tree context;
10286 tree r;
10287 int saved_unevaluated_operand;
10288 int saved_inhibit_evaluation_warnings;
10289
10290 /* In "sizeof(X<I>)" we need to evaluate "I". */
10291 saved_unevaluated_operand = cp_unevaluated_operand;
10292 cp_unevaluated_operand = 0;
10293 saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
10294 c_inhibit_evaluation_warnings = 0;
10295
10296 /* First, determine the context for the type we are looking
10297 up. */
10298 context = TYPE_CONTEXT (t);
10299 if (context && TYPE_P (context))
10300 {
10301 context = tsubst_aggr_type (context, args, complain,
10302 in_decl, /*entering_scope=*/1);
10303 /* If context is a nested class inside a class template,
10304 it may still need to be instantiated (c++/33959). */
10305 context = complete_type (context);
10306 }
10307
10308 /* Then, figure out what arguments are appropriate for the
10309 type we are trying to find. For example, given:
10310
10311 template <class T> struct S;
10312 template <class T, class U> void f(T, U) { S<U> su; }
10313
10314 and supposing that we are instantiating f<int, double>,
10315 then our ARGS will be {int, double}, but, when looking up
10316 S we only want {double}. */
10317 argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
10318 complain, in_decl);
10319 if (argvec == error_mark_node)
10320 r = error_mark_node;
10321 else
10322 {
10323 r = lookup_template_class (t, argvec, in_decl, context,
10324 entering_scope, complain);
10325 r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
10326 }
10327
10328 cp_unevaluated_operand = saved_unevaluated_operand;
10329 c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
10330
10331 return r;
10332 }
10333 else
10334 /* This is not a template type, so there's nothing to do. */
10335 return t;
10336
10337 default:
10338 return tsubst (t, args, complain, in_decl);
10339 }
10340 }
10341
10342 /* Substitute into the default argument ARG (a default argument for
10343 FN), which has the indicated TYPE. */
10344
10345 tree
10346 tsubst_default_argument (tree fn, tree type, tree arg, tsubst_flags_t complain)
10347 {
10348 tree saved_class_ptr = NULL_TREE;
10349 tree saved_class_ref = NULL_TREE;
10350 int errs = errorcount + sorrycount;
10351
10352 /* This can happen in invalid code. */
10353 if (TREE_CODE (arg) == DEFAULT_ARG)
10354 return arg;
10355
10356 /* This default argument came from a template. Instantiate the
10357 default argument here, not in tsubst. In the case of
10358 something like:
10359
10360 template <class T>
10361 struct S {
10362 static T t();
10363 void f(T = t());
10364 };
10365
10366 we must be careful to do name lookup in the scope of S<T>,
10367 rather than in the current class. */
10368 push_access_scope (fn);
10369 /* The "this" pointer is not valid in a default argument. */
10370 if (cfun)
10371 {
10372 saved_class_ptr = current_class_ptr;
10373 cp_function_chain->x_current_class_ptr = NULL_TREE;
10374 saved_class_ref = current_class_ref;
10375 cp_function_chain->x_current_class_ref = NULL_TREE;
10376 }
10377
10378 push_deferring_access_checks(dk_no_deferred);
10379 /* The default argument expression may cause implicitly defined
10380 member functions to be synthesized, which will result in garbage
10381 collection. We must treat this situation as if we were within
10382 the body of function so as to avoid collecting live data on the
10383 stack. */
10384 ++function_depth;
10385 arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
10386 complain, NULL_TREE,
10387 /*integral_constant_expression_p=*/false);
10388 --function_depth;
10389 pop_deferring_access_checks();
10390
10391 /* Restore the "this" pointer. */
10392 if (cfun)
10393 {
10394 cp_function_chain->x_current_class_ptr = saved_class_ptr;
10395 cp_function_chain->x_current_class_ref = saved_class_ref;
10396 }
10397
10398 if (errorcount+sorrycount > errs
10399 && (complain & tf_warning_or_error))
10400 inform (input_location,
10401 " when instantiating default argument for call to %D", fn);
10402
10403 /* Make sure the default argument is reasonable. */
10404 arg = check_default_argument (type, arg, complain);
10405
10406 pop_access_scope (fn);
10407
10408 return arg;
10409 }
10410
10411 /* Substitute into all the default arguments for FN. */
10412
10413 static void
10414 tsubst_default_arguments (tree fn, tsubst_flags_t complain)
10415 {
10416 tree arg;
10417 tree tmpl_args;
10418
10419 tmpl_args = DECL_TI_ARGS (fn);
10420
10421 /* If this function is not yet instantiated, we certainly don't need
10422 its default arguments. */
10423 if (uses_template_parms (tmpl_args))
10424 return;
10425 /* Don't do this again for clones. */
10426 if (DECL_CLONED_FUNCTION_P (fn))
10427 return;
10428
10429 for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
10430 arg;
10431 arg = TREE_CHAIN (arg))
10432 if (TREE_PURPOSE (arg))
10433 TREE_PURPOSE (arg) = tsubst_default_argument (fn,
10434 TREE_VALUE (arg),
10435 TREE_PURPOSE (arg),
10436 complain);
10437 }
10438
10439 /* Substitute the ARGS into the T, which is a _DECL. Return the
10440 result of the substitution. Issue error and warning messages under
10441 control of COMPLAIN. */
10442
10443 static tree
10444 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
10445 {
10446 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
10447 location_t saved_loc;
10448 tree r = NULL_TREE;
10449 tree in_decl = t;
10450 hashval_t hash = 0;
10451
10452 /* Set the filename and linenumber to improve error-reporting. */
10453 saved_loc = input_location;
10454 input_location = DECL_SOURCE_LOCATION (t);
10455
10456 switch (TREE_CODE (t))
10457 {
10458 case TEMPLATE_DECL:
10459 {
10460 /* We can get here when processing a member function template,
10461 member class template, or template template parameter. */
10462 tree decl = DECL_TEMPLATE_RESULT (t);
10463 tree spec;
10464 tree tmpl_args;
10465 tree full_args;
10466
10467 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
10468 {
10469 /* Template template parameter is treated here. */
10470 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10471 if (new_type == error_mark_node)
10472 RETURN (error_mark_node);
10473 /* If we get a real template back, return it. This can happen in
10474 the context of most_specialized_class. */
10475 if (TREE_CODE (new_type) == TEMPLATE_DECL)
10476 return new_type;
10477
10478 r = copy_decl (t);
10479 DECL_CHAIN (r) = NULL_TREE;
10480 TREE_TYPE (r) = new_type;
10481 DECL_TEMPLATE_RESULT (r)
10482 = build_decl (DECL_SOURCE_LOCATION (decl),
10483 TYPE_DECL, DECL_NAME (decl), new_type);
10484 DECL_TEMPLATE_PARMS (r)
10485 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
10486 complain);
10487 TYPE_NAME (new_type) = r;
10488 break;
10489 }
10490
10491 /* We might already have an instance of this template.
10492 The ARGS are for the surrounding class type, so the
10493 full args contain the tsubst'd args for the context,
10494 plus the innermost args from the template decl. */
10495 tmpl_args = DECL_CLASS_TEMPLATE_P (t)
10496 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
10497 : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
10498 /* Because this is a template, the arguments will still be
10499 dependent, even after substitution. If
10500 PROCESSING_TEMPLATE_DECL is not set, the dependency
10501 predicates will short-circuit. */
10502 ++processing_template_decl;
10503 full_args = tsubst_template_args (tmpl_args, args,
10504 complain, in_decl);
10505 --processing_template_decl;
10506 if (full_args == error_mark_node)
10507 RETURN (error_mark_node);
10508
10509 /* If this is a default template template argument,
10510 tsubst might not have changed anything. */
10511 if (full_args == tmpl_args)
10512 RETURN (t);
10513
10514 hash = hash_tmpl_and_args (t, full_args);
10515 spec = retrieve_specialization (t, full_args, hash);
10516 if (spec != NULL_TREE)
10517 {
10518 r = spec;
10519 break;
10520 }
10521
10522 /* Make a new template decl. It will be similar to the
10523 original, but will record the current template arguments.
10524 We also create a new function declaration, which is just
10525 like the old one, but points to this new template, rather
10526 than the old one. */
10527 r = copy_decl (t);
10528 gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
10529 DECL_CHAIN (r) = NULL_TREE;
10530
10531 DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
10532
10533 if (TREE_CODE (decl) == TYPE_DECL
10534 && !TYPE_DECL_ALIAS_P (decl))
10535 {
10536 tree new_type;
10537 ++processing_template_decl;
10538 new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10539 --processing_template_decl;
10540 if (new_type == error_mark_node)
10541 RETURN (error_mark_node);
10542
10543 TREE_TYPE (r) = new_type;
10544 /* For a partial specialization, we need to keep pointing to
10545 the primary template. */
10546 if (!DECL_TEMPLATE_SPECIALIZATION (t))
10547 CLASSTYPE_TI_TEMPLATE (new_type) = r;
10548 DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
10549 DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
10550 DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
10551 }
10552 else
10553 {
10554 tree new_decl;
10555 ++processing_template_decl;
10556 new_decl = tsubst (decl, args, complain, in_decl);
10557 --processing_template_decl;
10558 if (new_decl == error_mark_node)
10559 RETURN (error_mark_node);
10560
10561 DECL_TEMPLATE_RESULT (r) = new_decl;
10562 DECL_TI_TEMPLATE (new_decl) = r;
10563 TREE_TYPE (r) = TREE_TYPE (new_decl);
10564 DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
10565 DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
10566 }
10567
10568 SET_DECL_IMPLICIT_INSTANTIATION (r);
10569 DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
10570 DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
10571
10572 /* The template parameters for this new template are all the
10573 template parameters for the old template, except the
10574 outermost level of parameters. */
10575 DECL_TEMPLATE_PARMS (r)
10576 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
10577 complain);
10578
10579 if (PRIMARY_TEMPLATE_P (t))
10580 DECL_PRIMARY_TEMPLATE (r) = r;
10581
10582 if (TREE_CODE (decl) != TYPE_DECL && TREE_CODE (decl) != VAR_DECL)
10583 /* Record this non-type partial instantiation. */
10584 register_specialization (r, t,
10585 DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
10586 false, hash);
10587 }
10588 break;
10589
10590 case FUNCTION_DECL:
10591 {
10592 tree ctx;
10593 tree argvec = NULL_TREE;
10594 tree *friends;
10595 tree gen_tmpl;
10596 tree type;
10597 int member;
10598 int args_depth;
10599 int parms_depth;
10600
10601 /* Nobody should be tsubst'ing into non-template functions. */
10602 gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
10603
10604 if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
10605 {
10606 tree spec;
10607 bool dependent_p;
10608
10609 /* If T is not dependent, just return it. We have to
10610 increment PROCESSING_TEMPLATE_DECL because
10611 value_dependent_expression_p assumes that nothing is
10612 dependent when PROCESSING_TEMPLATE_DECL is zero. */
10613 ++processing_template_decl;
10614 dependent_p = value_dependent_expression_p (t);
10615 --processing_template_decl;
10616 if (!dependent_p)
10617 RETURN (t);
10618
10619 /* Calculate the most general template of which R is a
10620 specialization, and the complete set of arguments used to
10621 specialize R. */
10622 gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
10623 argvec = tsubst_template_args (DECL_TI_ARGS
10624 (DECL_TEMPLATE_RESULT
10625 (DECL_TI_TEMPLATE (t))),
10626 args, complain, in_decl);
10627 if (argvec == error_mark_node)
10628 RETURN (error_mark_node);
10629
10630 /* Check to see if we already have this specialization. */
10631 hash = hash_tmpl_and_args (gen_tmpl, argvec);
10632 spec = retrieve_specialization (gen_tmpl, argvec, hash);
10633
10634 if (spec)
10635 {
10636 r = spec;
10637 break;
10638 }
10639
10640 /* We can see more levels of arguments than parameters if
10641 there was a specialization of a member template, like
10642 this:
10643
10644 template <class T> struct S { template <class U> void f(); }
10645 template <> template <class U> void S<int>::f(U);
10646
10647 Here, we'll be substituting into the specialization,
10648 because that's where we can find the code we actually
10649 want to generate, but we'll have enough arguments for
10650 the most general template.
10651
10652 We also deal with the peculiar case:
10653
10654 template <class T> struct S {
10655 template <class U> friend void f();
10656 };
10657 template <class U> void f() {}
10658 template S<int>;
10659 template void f<double>();
10660
10661 Here, the ARGS for the instantiation of will be {int,
10662 double}. But, we only need as many ARGS as there are
10663 levels of template parameters in CODE_PATTERN. We are
10664 careful not to get fooled into reducing the ARGS in
10665 situations like:
10666
10667 template <class T> struct S { template <class U> void f(U); }
10668 template <class T> template <> void S<T>::f(int) {}
10669
10670 which we can spot because the pattern will be a
10671 specialization in this case. */
10672 args_depth = TMPL_ARGS_DEPTH (args);
10673 parms_depth =
10674 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
10675 if (args_depth > parms_depth
10676 && !DECL_TEMPLATE_SPECIALIZATION (t))
10677 args = get_innermost_template_args (args, parms_depth);
10678 }
10679 else
10680 {
10681 /* This special case arises when we have something like this:
10682
10683 template <class T> struct S {
10684 friend void f<int>(int, double);
10685 };
10686
10687 Here, the DECL_TI_TEMPLATE for the friend declaration
10688 will be an IDENTIFIER_NODE. We are being called from
10689 tsubst_friend_function, and we want only to create a
10690 new decl (R) with appropriate types so that we can call
10691 determine_specialization. */
10692 gen_tmpl = NULL_TREE;
10693 }
10694
10695 if (DECL_CLASS_SCOPE_P (t))
10696 {
10697 if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
10698 member = 2;
10699 else
10700 member = 1;
10701 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
10702 complain, t, /*entering_scope=*/1);
10703 }
10704 else
10705 {
10706 member = 0;
10707 ctx = DECL_CONTEXT (t);
10708 }
10709 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10710 if (type == error_mark_node)
10711 RETURN (error_mark_node);
10712
10713 /* If we hit excessive deduction depth, the type is bogus even if
10714 it isn't error_mark_node, so don't build a decl. */
10715 if (excessive_deduction_depth)
10716 RETURN (error_mark_node);
10717
10718 /* We do NOT check for matching decls pushed separately at this
10719 point, as they may not represent instantiations of this
10720 template, and in any case are considered separate under the
10721 discrete model. */
10722 r = copy_decl (t);
10723 DECL_USE_TEMPLATE (r) = 0;
10724 TREE_TYPE (r) = type;
10725 /* Clear out the mangled name and RTL for the instantiation. */
10726 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
10727 SET_DECL_RTL (r, NULL);
10728 /* Leave DECL_INITIAL set on deleted instantiations. */
10729 if (!DECL_DELETED_FN (r))
10730 DECL_INITIAL (r) = NULL_TREE;
10731 DECL_CONTEXT (r) = ctx;
10732
10733 /* OpenMP UDRs have the only argument a reference to the declared
10734 type. We want to diagnose if the declared type is a reference,
10735 which is invalid, but as references to references are usually
10736 quietly merged, diagnose it here. */
10737 if (DECL_OMP_DECLARE_REDUCTION_P (t))
10738 {
10739 tree argtype
10740 = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (t))));
10741 argtype = tsubst (argtype, args, complain, in_decl);
10742 if (TREE_CODE (argtype) == REFERENCE_TYPE)
10743 error_at (DECL_SOURCE_LOCATION (t),
10744 "reference type %qT in "
10745 "%<#pragma omp declare reduction%>", argtype);
10746 if (strchr (IDENTIFIER_POINTER (DECL_NAME (t)), '~') == NULL)
10747 DECL_NAME (r) = omp_reduction_id (ERROR_MARK, DECL_NAME (t),
10748 argtype);
10749 }
10750
10751 if (member && DECL_CONV_FN_P (r))
10752 /* Type-conversion operator. Reconstruct the name, in
10753 case it's the name of one of the template's parameters. */
10754 DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
10755
10756 DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
10757 complain, t);
10758 DECL_RESULT (r) = NULL_TREE;
10759
10760 TREE_STATIC (r) = 0;
10761 TREE_PUBLIC (r) = TREE_PUBLIC (t);
10762 DECL_EXTERNAL (r) = 1;
10763 /* If this is an instantiation of a function with internal
10764 linkage, we already know what object file linkage will be
10765 assigned to the instantiation. */
10766 DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
10767 DECL_DEFER_OUTPUT (r) = 0;
10768 DECL_CHAIN (r) = NULL_TREE;
10769 DECL_PENDING_INLINE_INFO (r) = 0;
10770 DECL_PENDING_INLINE_P (r) = 0;
10771 DECL_SAVED_TREE (r) = NULL_TREE;
10772 DECL_STRUCT_FUNCTION (r) = NULL;
10773 TREE_USED (r) = 0;
10774 /* We'll re-clone as appropriate in instantiate_template. */
10775 DECL_CLONED_FUNCTION (r) = NULL_TREE;
10776
10777 /* If we aren't complaining now, return on error before we register
10778 the specialization so that we'll complain eventually. */
10779 if ((complain & tf_error) == 0
10780 && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10781 && !grok_op_properties (r, /*complain=*/false))
10782 RETURN (error_mark_node);
10783
10784 /* Set up the DECL_TEMPLATE_INFO for R. There's no need to do
10785 this in the special friend case mentioned above where
10786 GEN_TMPL is NULL. */
10787 if (gen_tmpl)
10788 {
10789 DECL_TEMPLATE_INFO (r)
10790 = build_template_info (gen_tmpl, argvec);
10791 SET_DECL_IMPLICIT_INSTANTIATION (r);
10792
10793 tree new_r
10794 = register_specialization (r, gen_tmpl, argvec, false, hash);
10795 if (new_r != r)
10796 /* We instantiated this while substituting into
10797 the type earlier (template/friend54.C). */
10798 RETURN (new_r);
10799
10800 /* We're not supposed to instantiate default arguments
10801 until they are called, for a template. But, for a
10802 declaration like:
10803
10804 template <class T> void f ()
10805 { extern void g(int i = T()); }
10806
10807 we should do the substitution when the template is
10808 instantiated. We handle the member function case in
10809 instantiate_class_template since the default arguments
10810 might refer to other members of the class. */
10811 if (!member
10812 && !PRIMARY_TEMPLATE_P (gen_tmpl)
10813 && !uses_template_parms (argvec))
10814 tsubst_default_arguments (r, complain);
10815 }
10816 else
10817 DECL_TEMPLATE_INFO (r) = NULL_TREE;
10818
10819 /* Copy the list of befriending classes. */
10820 for (friends = &DECL_BEFRIENDING_CLASSES (r);
10821 *friends;
10822 friends = &TREE_CHAIN (*friends))
10823 {
10824 *friends = copy_node (*friends);
10825 TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
10826 args, complain,
10827 in_decl);
10828 }
10829
10830 if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
10831 {
10832 maybe_retrofit_in_chrg (r);
10833 if (DECL_CONSTRUCTOR_P (r))
10834 grok_ctor_properties (ctx, r);
10835 if (DECL_INHERITED_CTOR_BASE (r))
10836 deduce_inheriting_ctor (r);
10837 /* If this is an instantiation of a member template, clone it.
10838 If it isn't, that'll be handled by
10839 clone_constructors_and_destructors. */
10840 if (PRIMARY_TEMPLATE_P (gen_tmpl))
10841 clone_function_decl (r, /*update_method_vec_p=*/0);
10842 }
10843 else if ((complain & tf_error) != 0
10844 && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10845 && !grok_op_properties (r, /*complain=*/true))
10846 RETURN (error_mark_node);
10847
10848 if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
10849 SET_DECL_FRIEND_CONTEXT (r,
10850 tsubst (DECL_FRIEND_CONTEXT (t),
10851 args, complain, in_decl));
10852
10853 /* Possibly limit visibility based on template args. */
10854 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10855 if (DECL_VISIBILITY_SPECIFIED (t))
10856 {
10857 DECL_VISIBILITY_SPECIFIED (r) = 0;
10858 DECL_ATTRIBUTES (r)
10859 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10860 }
10861 determine_visibility (r);
10862 if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
10863 && !processing_template_decl)
10864 defaulted_late_check (r);
10865
10866 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10867 args, complain, in_decl);
10868 }
10869 break;
10870
10871 case PARM_DECL:
10872 {
10873 tree type = NULL_TREE;
10874 int i, len = 1;
10875 tree expanded_types = NULL_TREE;
10876 tree prev_r = NULL_TREE;
10877 tree first_r = NULL_TREE;
10878
10879 if (DECL_PACK_P (t))
10880 {
10881 /* If there is a local specialization that isn't a
10882 parameter pack, it means that we're doing a "simple"
10883 substitution from inside tsubst_pack_expansion. Just
10884 return the local specialization (which will be a single
10885 parm). */
10886 tree spec = retrieve_local_specialization (t);
10887 if (spec
10888 && TREE_CODE (spec) == PARM_DECL
10889 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
10890 RETURN (spec);
10891
10892 /* Expand the TYPE_PACK_EXPANSION that provides the types for
10893 the parameters in this function parameter pack. */
10894 expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
10895 complain, in_decl);
10896 if (TREE_CODE (expanded_types) == TREE_VEC)
10897 {
10898 len = TREE_VEC_LENGTH (expanded_types);
10899
10900 /* Zero-length parameter packs are boring. Just substitute
10901 into the chain. */
10902 if (len == 0)
10903 RETURN (tsubst (TREE_CHAIN (t), args, complain,
10904 TREE_CHAIN (t)));
10905 }
10906 else
10907 {
10908 /* All we did was update the type. Make a note of that. */
10909 type = expanded_types;
10910 expanded_types = NULL_TREE;
10911 }
10912 }
10913
10914 /* Loop through all of the parameters we'll build. When T is
10915 a function parameter pack, LEN is the number of expanded
10916 types in EXPANDED_TYPES; otherwise, LEN is 1. */
10917 r = NULL_TREE;
10918 for (i = 0; i < len; ++i)
10919 {
10920 prev_r = r;
10921 r = copy_node (t);
10922 if (DECL_TEMPLATE_PARM_P (t))
10923 SET_DECL_TEMPLATE_PARM_P (r);
10924
10925 if (expanded_types)
10926 /* We're on the Ith parameter of the function parameter
10927 pack. */
10928 {
10929 /* Get the Ith type. */
10930 type = TREE_VEC_ELT (expanded_types, i);
10931
10932 /* Rename the parameter to include the index. */
10933 DECL_NAME (r)
10934 = make_ith_pack_parameter_name (DECL_NAME (r), i);
10935 }
10936 else if (!type)
10937 /* We're dealing with a normal parameter. */
10938 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10939
10940 type = type_decays_to (type);
10941 TREE_TYPE (r) = type;
10942 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10943
10944 if (DECL_INITIAL (r))
10945 {
10946 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
10947 DECL_INITIAL (r) = TREE_TYPE (r);
10948 else
10949 DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
10950 complain, in_decl);
10951 }
10952
10953 DECL_CONTEXT (r) = NULL_TREE;
10954
10955 if (!DECL_TEMPLATE_PARM_P (r))
10956 DECL_ARG_TYPE (r) = type_passed_as (type);
10957
10958 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10959 args, complain, in_decl);
10960
10961 /* Keep track of the first new parameter we
10962 generate. That's what will be returned to the
10963 caller. */
10964 if (!first_r)
10965 first_r = r;
10966
10967 /* Build a proper chain of parameters when substituting
10968 into a function parameter pack. */
10969 if (prev_r)
10970 DECL_CHAIN (prev_r) = r;
10971 }
10972
10973 /* If cp_unevaluated_operand is set, we're just looking for a
10974 single dummy parameter, so don't keep going. */
10975 if (DECL_CHAIN (t) && !cp_unevaluated_operand)
10976 DECL_CHAIN (r) = tsubst (DECL_CHAIN (t), args,
10977 complain, DECL_CHAIN (t));
10978
10979 /* FIRST_R contains the start of the chain we've built. */
10980 r = first_r;
10981 }
10982 break;
10983
10984 case FIELD_DECL:
10985 {
10986 tree type = NULL_TREE;
10987 tree vec = NULL_TREE;
10988 tree expanded_types = NULL_TREE;
10989 int len = 1;
10990
10991 if (PACK_EXPANSION_P (TREE_TYPE (t)))
10992 {
10993 /* This field is a lambda capture pack. Return a TREE_VEC of
10994 the expanded fields to instantiate_class_template_1 and
10995 store them in the specializations hash table as a
10996 NONTYPE_ARGUMENT_PACK so that tsubst_copy can find them. */
10997 expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
10998 complain, in_decl);
10999 if (TREE_CODE (expanded_types) == TREE_VEC)
11000 {
11001 len = TREE_VEC_LENGTH (expanded_types);
11002 vec = make_tree_vec (len);
11003 }
11004 else
11005 {
11006 /* All we did was update the type. Make a note of that. */
11007 type = expanded_types;
11008 expanded_types = NULL_TREE;
11009 }
11010 }
11011
11012 for (int i = 0; i < len; ++i)
11013 {
11014 r = copy_decl (t);
11015 if (expanded_types)
11016 {
11017 type = TREE_VEC_ELT (expanded_types, i);
11018 DECL_NAME (r)
11019 = make_ith_pack_parameter_name (DECL_NAME (r), i);
11020 }
11021 else if (!type)
11022 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11023
11024 if (type == error_mark_node)
11025 RETURN (error_mark_node);
11026 TREE_TYPE (r) = type;
11027 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
11028
11029 if (DECL_C_BIT_FIELD (r))
11030 /* For bit-fields, DECL_INITIAL gives the number of bits. For
11031 non-bit-fields DECL_INITIAL is a non-static data member
11032 initializer, which gets deferred instantiation. */
11033 DECL_INITIAL (r)
11034 = tsubst_expr (DECL_INITIAL (t), args,
11035 complain, in_decl,
11036 /*integral_constant_expression_p=*/true);
11037 else if (DECL_INITIAL (t))
11038 {
11039 /* Set up DECL_TEMPLATE_INFO so that we can get at the
11040 NSDMI in perform_member_init. Still set DECL_INITIAL
11041 so that we know there is one. */
11042 DECL_INITIAL (r) = void_node;
11043 gcc_assert (DECL_LANG_SPECIFIC (r) == NULL);
11044 retrofit_lang_decl (r);
11045 DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
11046 }
11047 /* We don't have to set DECL_CONTEXT here; it is set by
11048 finish_member_declaration. */
11049 DECL_CHAIN (r) = NULL_TREE;
11050
11051 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
11052 args, complain, in_decl);
11053
11054 if (vec)
11055 TREE_VEC_ELT (vec, i) = r;
11056 }
11057
11058 if (vec)
11059 {
11060 r = vec;
11061 tree pack = make_node (NONTYPE_ARGUMENT_PACK);
11062 tree tpack = cxx_make_type (TYPE_ARGUMENT_PACK);
11063 SET_ARGUMENT_PACK_ARGS (pack, vec);
11064 SET_ARGUMENT_PACK_ARGS (tpack, expanded_types);
11065 TREE_TYPE (pack) = tpack;
11066 register_specialization (pack, t, args, false, 0);
11067 }
11068 }
11069 break;
11070
11071 case USING_DECL:
11072 /* We reach here only for member using decls. We also need to check
11073 uses_template_parms because DECL_DEPENDENT_P is not set for a
11074 using-declaration that designates a member of the current
11075 instantiation (c++/53549). */
11076 if (DECL_DEPENDENT_P (t)
11077 || uses_template_parms (USING_DECL_SCOPE (t)))
11078 {
11079 tree inst_scope = tsubst_copy (USING_DECL_SCOPE (t), args,
11080 complain, in_decl);
11081 tree name = tsubst_copy (DECL_NAME (t), args, complain, in_decl);
11082 r = do_class_using_decl (inst_scope, name);
11083 if (!r)
11084 r = error_mark_node;
11085 else
11086 {
11087 TREE_PROTECTED (r) = TREE_PROTECTED (t);
11088 TREE_PRIVATE (r) = TREE_PRIVATE (t);
11089 }
11090 }
11091 else
11092 {
11093 r = copy_node (t);
11094 DECL_CHAIN (r) = NULL_TREE;
11095 }
11096 break;
11097
11098 case TYPE_DECL:
11099 case VAR_DECL:
11100 {
11101 tree argvec = NULL_TREE;
11102 tree gen_tmpl = NULL_TREE;
11103 tree spec;
11104 tree tmpl = NULL_TREE;
11105 tree ctx;
11106 tree type = NULL_TREE;
11107 bool local_p;
11108
11109 if (TREE_TYPE (t) == error_mark_node)
11110 RETURN (error_mark_node);
11111
11112 if (TREE_CODE (t) == TYPE_DECL
11113 && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
11114 {
11115 /* If this is the canonical decl, we don't have to
11116 mess with instantiations, and often we can't (for
11117 typename, template type parms and such). Note that
11118 TYPE_NAME is not correct for the above test if
11119 we've copied the type for a typedef. */
11120 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11121 if (type == error_mark_node)
11122 RETURN (error_mark_node);
11123 r = TYPE_NAME (type);
11124 break;
11125 }
11126
11127 /* Check to see if we already have the specialization we
11128 need. */
11129 spec = NULL_TREE;
11130 if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
11131 {
11132 /* T is a static data member or namespace-scope entity.
11133 We have to substitute into namespace-scope variables
11134 (even though such entities are never templates) because
11135 of cases like:
11136
11137 template <class T> void f() { extern T t; }
11138
11139 where the entity referenced is not known until
11140 instantiation time. */
11141 local_p = false;
11142 ctx = DECL_CONTEXT (t);
11143 if (DECL_CLASS_SCOPE_P (t))
11144 {
11145 ctx = tsubst_aggr_type (ctx, args,
11146 complain,
11147 in_decl, /*entering_scope=*/1);
11148 /* If CTX is unchanged, then T is in fact the
11149 specialization we want. That situation occurs when
11150 referencing a static data member within in its own
11151 class. We can use pointer equality, rather than
11152 same_type_p, because DECL_CONTEXT is always
11153 canonical... */
11154 if (ctx == DECL_CONTEXT (t)
11155 /* ... unless T is a member template; in which
11156 case our caller can be willing to create a
11157 specialization of that template represented
11158 by T. */
11159 && !(DECL_TI_TEMPLATE (t)
11160 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (t))))
11161 spec = t;
11162 }
11163
11164 if (!spec)
11165 {
11166 tmpl = DECL_TI_TEMPLATE (t);
11167 gen_tmpl = most_general_template (tmpl);
11168 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
11169 if (argvec == error_mark_node)
11170 RETURN (error_mark_node);
11171 hash = hash_tmpl_and_args (gen_tmpl, argvec);
11172 spec = retrieve_specialization (gen_tmpl, argvec, hash);
11173 }
11174 }
11175 else
11176 {
11177 /* A local variable. */
11178 local_p = true;
11179 /* Subsequent calls to pushdecl will fill this in. */
11180 ctx = NULL_TREE;
11181 spec = retrieve_local_specialization (t);
11182 }
11183 /* If we already have the specialization we need, there is
11184 nothing more to do. */
11185 if (spec)
11186 {
11187 r = spec;
11188 break;
11189 }
11190
11191 /* Create a new node for the specialization we need. */
11192 r = copy_decl (t);
11193 if (type == NULL_TREE)
11194 {
11195 if (is_typedef_decl (t))
11196 type = DECL_ORIGINAL_TYPE (t);
11197 else
11198 type = TREE_TYPE (t);
11199 if (VAR_P (t)
11200 && VAR_HAD_UNKNOWN_BOUND (t)
11201 && type != error_mark_node)
11202 type = strip_array_domain (type);
11203 type = tsubst (type, args, complain, in_decl);
11204 }
11205 if (VAR_P (r))
11206 {
11207 /* Even if the original location is out of scope, the
11208 newly substituted one is not. */
11209 DECL_DEAD_FOR_LOCAL (r) = 0;
11210 DECL_INITIALIZED_P (r) = 0;
11211 DECL_TEMPLATE_INSTANTIATED (r) = 0;
11212 if (type == error_mark_node)
11213 RETURN (error_mark_node);
11214 if (TREE_CODE (type) == FUNCTION_TYPE)
11215 {
11216 /* It may seem that this case cannot occur, since:
11217
11218 typedef void f();
11219 void g() { f x; }
11220
11221 declares a function, not a variable. However:
11222
11223 typedef void f();
11224 template <typename T> void g() { T t; }
11225 template void g<f>();
11226
11227 is an attempt to declare a variable with function
11228 type. */
11229 error ("variable %qD has function type",
11230 /* R is not yet sufficiently initialized, so we
11231 just use its name. */
11232 DECL_NAME (r));
11233 RETURN (error_mark_node);
11234 }
11235 type = complete_type (type);
11236 /* Wait until cp_finish_decl to set this again, to handle
11237 circular dependency (template/instantiate6.C). */
11238 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r) = 0;
11239 type = check_var_type (DECL_NAME (r), type);
11240
11241 if (DECL_HAS_VALUE_EXPR_P (t))
11242 {
11243 tree ve = DECL_VALUE_EXPR (t);
11244 ve = tsubst_expr (ve, args, complain, in_decl,
11245 /*constant_expression_p=*/false);
11246 if (REFERENCE_REF_P (ve))
11247 {
11248 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
11249 ve = TREE_OPERAND (ve, 0);
11250 }
11251 SET_DECL_VALUE_EXPR (r, ve);
11252 }
11253 if (TREE_STATIC (r) || DECL_EXTERNAL (r))
11254 set_decl_tls_model (r, decl_tls_model (t));
11255 }
11256 else if (DECL_SELF_REFERENCE_P (t))
11257 SET_DECL_SELF_REFERENCE_P (r);
11258 TREE_TYPE (r) = type;
11259 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
11260 DECL_CONTEXT (r) = ctx;
11261 /* Clear out the mangled name and RTL for the instantiation. */
11262 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
11263 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
11264 SET_DECL_RTL (r, NULL);
11265 /* The initializer must not be expanded until it is required;
11266 see [temp.inst]. */
11267 DECL_INITIAL (r) = NULL_TREE;
11268 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
11269 SET_DECL_RTL (r, NULL);
11270 DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
11271 if (VAR_P (r))
11272 {
11273 /* Possibly limit visibility based on template args. */
11274 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
11275 if (DECL_VISIBILITY_SPECIFIED (t))
11276 {
11277 DECL_VISIBILITY_SPECIFIED (r) = 0;
11278 DECL_ATTRIBUTES (r)
11279 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
11280 }
11281 determine_visibility (r);
11282 }
11283
11284 if (!local_p)
11285 {
11286 /* A static data member declaration is always marked
11287 external when it is declared in-class, even if an
11288 initializer is present. We mimic the non-template
11289 processing here. */
11290 DECL_EXTERNAL (r) = 1;
11291
11292 register_specialization (r, gen_tmpl, argvec, false, hash);
11293 DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
11294 SET_DECL_IMPLICIT_INSTANTIATION (r);
11295 }
11296 else if (!cp_unevaluated_operand)
11297 register_local_specialization (r, t);
11298
11299 DECL_CHAIN (r) = NULL_TREE;
11300
11301 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
11302 /*flags=*/0,
11303 args, complain, in_decl);
11304
11305 /* Preserve a typedef that names a type. */
11306 if (is_typedef_decl (r))
11307 {
11308 DECL_ORIGINAL_TYPE (r) = NULL_TREE;
11309 set_underlying_type (r);
11310 }
11311
11312 layout_decl (r, 0);
11313 }
11314 break;
11315
11316 default:
11317 gcc_unreachable ();
11318 }
11319 #undef RETURN
11320
11321 out:
11322 /* Restore the file and line information. */
11323 input_location = saved_loc;
11324
11325 return r;
11326 }
11327
11328 /* Substitute into the ARG_TYPES of a function type.
11329 If END is a TREE_CHAIN, leave it and any following types
11330 un-substituted. */
11331
11332 static tree
11333 tsubst_arg_types (tree arg_types,
11334 tree args,
11335 tree end,
11336 tsubst_flags_t complain,
11337 tree in_decl)
11338 {
11339 tree remaining_arg_types;
11340 tree type = NULL_TREE;
11341 int i = 1;
11342 tree expanded_args = NULL_TREE;
11343 tree default_arg;
11344
11345 if (!arg_types || arg_types == void_list_node || arg_types == end)
11346 return arg_types;
11347
11348 remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
11349 args, end, complain, in_decl);
11350 if (remaining_arg_types == error_mark_node)
11351 return error_mark_node;
11352
11353 if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
11354 {
11355 /* For a pack expansion, perform substitution on the
11356 entire expression. Later on, we'll handle the arguments
11357 one-by-one. */
11358 expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
11359 args, complain, in_decl);
11360
11361 if (TREE_CODE (expanded_args) == TREE_VEC)
11362 /* So that we'll spin through the parameters, one by one. */
11363 i = TREE_VEC_LENGTH (expanded_args);
11364 else
11365 {
11366 /* We only partially substituted into the parameter
11367 pack. Our type is TYPE_PACK_EXPANSION. */
11368 type = expanded_args;
11369 expanded_args = NULL_TREE;
11370 }
11371 }
11372
11373 while (i > 0) {
11374 --i;
11375
11376 if (expanded_args)
11377 type = TREE_VEC_ELT (expanded_args, i);
11378 else if (!type)
11379 type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
11380
11381 if (type == error_mark_node)
11382 return error_mark_node;
11383 if (VOID_TYPE_P (type))
11384 {
11385 if (complain & tf_error)
11386 {
11387 error ("invalid parameter type %qT", type);
11388 if (in_decl)
11389 error ("in declaration %q+D", in_decl);
11390 }
11391 return error_mark_node;
11392 }
11393 /* DR 657. */
11394 if (abstract_virtuals_error_sfinae (ACU_PARM, type, complain))
11395 return error_mark_node;
11396
11397 /* Do array-to-pointer, function-to-pointer conversion, and ignore
11398 top-level qualifiers as required. */
11399 type = cv_unqualified (type_decays_to (type));
11400
11401 /* We do not substitute into default arguments here. The standard
11402 mandates that they be instantiated only when needed, which is
11403 done in build_over_call. */
11404 default_arg = TREE_PURPOSE (arg_types);
11405
11406 if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
11407 {
11408 /* We've instantiated a template before its default arguments
11409 have been parsed. This can happen for a nested template
11410 class, and is not an error unless we require the default
11411 argument in a call of this function. */
11412 remaining_arg_types =
11413 tree_cons (default_arg, type, remaining_arg_types);
11414 vec_safe_push (DEFARG_INSTANTIATIONS(default_arg), remaining_arg_types);
11415 }
11416 else
11417 remaining_arg_types =
11418 hash_tree_cons (default_arg, type, remaining_arg_types);
11419 }
11420
11421 return remaining_arg_types;
11422 }
11423
11424 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
11425 *not* handle the exception-specification for FNTYPE, because the
11426 initial substitution of explicitly provided template parameters
11427 during argument deduction forbids substitution into the
11428 exception-specification:
11429
11430 [temp.deduct]
11431
11432 All references in the function type of the function template to the
11433 corresponding template parameters are replaced by the specified tem-
11434 plate argument values. If a substitution in a template parameter or
11435 in the function type of the function template results in an invalid
11436 type, type deduction fails. [Note: The equivalent substitution in
11437 exception specifications is done only when the function is instanti-
11438 ated, at which point a program is ill-formed if the substitution
11439 results in an invalid type.] */
11440
11441 static tree
11442 tsubst_function_type (tree t,
11443 tree args,
11444 tsubst_flags_t complain,
11445 tree in_decl)
11446 {
11447 tree return_type;
11448 tree arg_types = NULL_TREE;
11449 tree fntype;
11450
11451 /* The TYPE_CONTEXT is not used for function/method types. */
11452 gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
11453
11454 /* DR 1227: Mixing immediate and non-immediate contexts in deduction
11455 failure. */
11456 bool late_return_type_p = TYPE_HAS_LATE_RETURN_TYPE (t);
11457
11458 if (late_return_type_p)
11459 {
11460 /* Substitute the argument types. */
11461 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args, NULL_TREE,
11462 complain, in_decl);
11463 if (arg_types == error_mark_node)
11464 return error_mark_node;
11465
11466 tree save_ccp = current_class_ptr;
11467 tree save_ccr = current_class_ref;
11468 tree this_type = (TREE_CODE (t) == METHOD_TYPE
11469 ? TREE_TYPE (TREE_VALUE (arg_types)) : NULL_TREE);
11470 bool do_inject = this_type && CLASS_TYPE_P (this_type);
11471 if (do_inject)
11472 {
11473 /* DR 1207: 'this' is in scope in the trailing return type. */
11474 inject_this_parameter (this_type, cp_type_quals (this_type));
11475 }
11476
11477 /* Substitute the return type. */
11478 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11479
11480 if (do_inject)
11481 {
11482 current_class_ptr = save_ccp;
11483 current_class_ref = save_ccr;
11484 }
11485 }
11486 else
11487 /* Substitute the return type. */
11488 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11489
11490 if (return_type == error_mark_node)
11491 return error_mark_node;
11492 /* DR 486 clarifies that creation of a function type with an
11493 invalid return type is a deduction failure. */
11494 if (TREE_CODE (return_type) == ARRAY_TYPE
11495 || TREE_CODE (return_type) == FUNCTION_TYPE)
11496 {
11497 if (complain & tf_error)
11498 {
11499 if (TREE_CODE (return_type) == ARRAY_TYPE)
11500 error ("function returning an array");
11501 else
11502 error ("function returning a function");
11503 }
11504 return error_mark_node;
11505 }
11506 /* And DR 657. */
11507 if (abstract_virtuals_error_sfinae (ACU_RETURN, return_type, complain))
11508 return error_mark_node;
11509
11510 if (!late_return_type_p)
11511 {
11512 /* Substitute the argument types. */
11513 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args, NULL_TREE,
11514 complain, in_decl);
11515 if (arg_types == error_mark_node)
11516 return error_mark_node;
11517 }
11518
11519 /* Construct a new type node and return it. */
11520 if (TREE_CODE (t) == FUNCTION_TYPE)
11521 {
11522 fntype = build_function_type (return_type, arg_types);
11523 fntype = apply_memfn_quals (fntype,
11524 type_memfn_quals (t),
11525 type_memfn_rqual (t));
11526 }
11527 else
11528 {
11529 tree r = TREE_TYPE (TREE_VALUE (arg_types));
11530 /* Don't pick up extra function qualifiers from the basetype. */
11531 r = cp_build_qualified_type_real (r, type_memfn_quals (t), complain);
11532 if (! MAYBE_CLASS_TYPE_P (r))
11533 {
11534 /* [temp.deduct]
11535
11536 Type deduction may fail for any of the following
11537 reasons:
11538
11539 -- Attempting to create "pointer to member of T" when T
11540 is not a class type. */
11541 if (complain & tf_error)
11542 error ("creating pointer to member function of non-class type %qT",
11543 r);
11544 return error_mark_node;
11545 }
11546
11547 fntype = build_method_type_directly (r, return_type,
11548 TREE_CHAIN (arg_types));
11549 fntype = build_ref_qualified_type (fntype, type_memfn_rqual (t));
11550 }
11551 fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
11552
11553 if (late_return_type_p)
11554 TYPE_HAS_LATE_RETURN_TYPE (fntype) = 1;
11555
11556 return fntype;
11557 }
11558
11559 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE. Substitute the template
11560 ARGS into that specification, and return the substituted
11561 specification. If there is no specification, return NULL_TREE. */
11562
11563 static tree
11564 tsubst_exception_specification (tree fntype,
11565 tree args,
11566 tsubst_flags_t complain,
11567 tree in_decl,
11568 bool defer_ok)
11569 {
11570 tree specs;
11571 tree new_specs;
11572
11573 specs = TYPE_RAISES_EXCEPTIONS (fntype);
11574 new_specs = NULL_TREE;
11575 if (specs && TREE_PURPOSE (specs))
11576 {
11577 /* A noexcept-specifier. */
11578 tree expr = TREE_PURPOSE (specs);
11579 if (TREE_CODE (expr) == INTEGER_CST)
11580 new_specs = expr;
11581 else if (defer_ok)
11582 {
11583 /* Defer instantiation of noexcept-specifiers to avoid
11584 excessive instantiations (c++/49107). */
11585 new_specs = make_node (DEFERRED_NOEXCEPT);
11586 if (DEFERRED_NOEXCEPT_SPEC_P (specs))
11587 {
11588 /* We already partially instantiated this member template,
11589 so combine the new args with the old. */
11590 DEFERRED_NOEXCEPT_PATTERN (new_specs)
11591 = DEFERRED_NOEXCEPT_PATTERN (expr);
11592 DEFERRED_NOEXCEPT_ARGS (new_specs)
11593 = add_to_template_args (DEFERRED_NOEXCEPT_ARGS (expr), args);
11594 }
11595 else
11596 {
11597 DEFERRED_NOEXCEPT_PATTERN (new_specs) = expr;
11598 DEFERRED_NOEXCEPT_ARGS (new_specs) = args;
11599 }
11600 }
11601 else
11602 new_specs = tsubst_copy_and_build
11603 (expr, args, complain, in_decl, /*function_p=*/false,
11604 /*integral_constant_expression_p=*/true);
11605 new_specs = build_noexcept_spec (new_specs, complain);
11606 }
11607 else if (specs)
11608 {
11609 if (! TREE_VALUE (specs))
11610 new_specs = specs;
11611 else
11612 while (specs)
11613 {
11614 tree spec;
11615 int i, len = 1;
11616 tree expanded_specs = NULL_TREE;
11617
11618 if (PACK_EXPANSION_P (TREE_VALUE (specs)))
11619 {
11620 /* Expand the pack expansion type. */
11621 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
11622 args, complain,
11623 in_decl);
11624
11625 if (expanded_specs == error_mark_node)
11626 return error_mark_node;
11627 else if (TREE_CODE (expanded_specs) == TREE_VEC)
11628 len = TREE_VEC_LENGTH (expanded_specs);
11629 else
11630 {
11631 /* We're substituting into a member template, so
11632 we got a TYPE_PACK_EXPANSION back. Add that
11633 expansion and move on. */
11634 gcc_assert (TREE_CODE (expanded_specs)
11635 == TYPE_PACK_EXPANSION);
11636 new_specs = add_exception_specifier (new_specs,
11637 expanded_specs,
11638 complain);
11639 specs = TREE_CHAIN (specs);
11640 continue;
11641 }
11642 }
11643
11644 for (i = 0; i < len; ++i)
11645 {
11646 if (expanded_specs)
11647 spec = TREE_VEC_ELT (expanded_specs, i);
11648 else
11649 spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
11650 if (spec == error_mark_node)
11651 return spec;
11652 new_specs = add_exception_specifier (new_specs, spec,
11653 complain);
11654 }
11655
11656 specs = TREE_CHAIN (specs);
11657 }
11658 }
11659 return new_specs;
11660 }
11661
11662 /* Take the tree structure T and replace template parameters used
11663 therein with the argument vector ARGS. IN_DECL is an associated
11664 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
11665 Issue error and warning messages under control of COMPLAIN. Note
11666 that we must be relatively non-tolerant of extensions here, in
11667 order to preserve conformance; if we allow substitutions that
11668 should not be allowed, we may allow argument deductions that should
11669 not succeed, and therefore report ambiguous overload situations
11670 where there are none. In theory, we could allow the substitution,
11671 but indicate that it should have failed, and allow our caller to
11672 make sure that the right thing happens, but we don't try to do this
11673 yet.
11674
11675 This function is used for dealing with types, decls and the like;
11676 for expressions, use tsubst_expr or tsubst_copy. */
11677
11678 tree
11679 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11680 {
11681 enum tree_code code;
11682 tree type, r = NULL_TREE;
11683
11684 if (t == NULL_TREE || t == error_mark_node
11685 || t == integer_type_node
11686 || t == void_type_node
11687 || t == char_type_node
11688 || t == unknown_type_node
11689 || TREE_CODE (t) == NAMESPACE_DECL
11690 || TREE_CODE (t) == TRANSLATION_UNIT_DECL)
11691 return t;
11692
11693 if (DECL_P (t))
11694 return tsubst_decl (t, args, complain);
11695
11696 if (args == NULL_TREE)
11697 return t;
11698
11699 code = TREE_CODE (t);
11700
11701 if (code == IDENTIFIER_NODE)
11702 type = IDENTIFIER_TYPE_VALUE (t);
11703 else
11704 type = TREE_TYPE (t);
11705
11706 gcc_assert (type != unknown_type_node);
11707
11708 /* Reuse typedefs. We need to do this to handle dependent attributes,
11709 such as attribute aligned. */
11710 if (TYPE_P (t)
11711 && typedef_variant_p (t))
11712 {
11713 tree decl = TYPE_NAME (t);
11714
11715 if (alias_template_specialization_p (t))
11716 {
11717 /* DECL represents an alias template and we want to
11718 instantiate it. */
11719 tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11720 tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
11721 r = instantiate_alias_template (tmpl, gen_args, complain);
11722 }
11723 else if (DECL_CLASS_SCOPE_P (decl)
11724 && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
11725 && uses_template_parms (DECL_CONTEXT (decl)))
11726 {
11727 tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11728 tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
11729 r = retrieve_specialization (tmpl, gen_args, 0);
11730 }
11731 else if (DECL_FUNCTION_SCOPE_P (decl)
11732 && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
11733 && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
11734 r = retrieve_local_specialization (decl);
11735 else
11736 /* The typedef is from a non-template context. */
11737 return t;
11738
11739 if (r)
11740 {
11741 r = TREE_TYPE (r);
11742 r = cp_build_qualified_type_real
11743 (r, cp_type_quals (t) | cp_type_quals (r),
11744 complain | tf_ignore_bad_quals);
11745 return r;
11746 }
11747 else
11748 {
11749 /* We don't have an instantiation yet, so drop the typedef. */
11750 int quals = cp_type_quals (t);
11751 t = DECL_ORIGINAL_TYPE (decl);
11752 t = cp_build_qualified_type_real (t, quals,
11753 complain | tf_ignore_bad_quals);
11754 }
11755 }
11756
11757 if (type
11758 && code != TYPENAME_TYPE
11759 && code != TEMPLATE_TYPE_PARM
11760 && code != IDENTIFIER_NODE
11761 && code != FUNCTION_TYPE
11762 && code != METHOD_TYPE)
11763 type = tsubst (type, args, complain, in_decl);
11764 if (type == error_mark_node)
11765 return error_mark_node;
11766
11767 switch (code)
11768 {
11769 case RECORD_TYPE:
11770 case UNION_TYPE:
11771 case ENUMERAL_TYPE:
11772 return tsubst_aggr_type (t, args, complain, in_decl,
11773 /*entering_scope=*/0);
11774
11775 case ERROR_MARK:
11776 case IDENTIFIER_NODE:
11777 case VOID_TYPE:
11778 case REAL_TYPE:
11779 case COMPLEX_TYPE:
11780 case VECTOR_TYPE:
11781 case BOOLEAN_TYPE:
11782 case NULLPTR_TYPE:
11783 case LANG_TYPE:
11784 return t;
11785
11786 case INTEGER_TYPE:
11787 if (t == integer_type_node)
11788 return t;
11789
11790 if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
11791 && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
11792 return t;
11793
11794 {
11795 tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
11796
11797 max = tsubst_expr (omax, args, complain, in_decl,
11798 /*integral_constant_expression_p=*/false);
11799
11800 /* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
11801 needed. */
11802 if (TREE_CODE (max) == NOP_EXPR
11803 && TREE_SIDE_EFFECTS (omax)
11804 && !TREE_TYPE (max))
11805 TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
11806
11807 /* If we're in a partial instantiation, preserve the magic NOP_EXPR
11808 with TREE_SIDE_EFFECTS that indicates this is not an integral
11809 constant expression. */
11810 if (processing_template_decl
11811 && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
11812 {
11813 gcc_assert (TREE_CODE (max) == NOP_EXPR);
11814 TREE_SIDE_EFFECTS (max) = 1;
11815 }
11816
11817 return compute_array_index_type (NULL_TREE, max, complain);
11818 }
11819
11820 case TEMPLATE_TYPE_PARM:
11821 case TEMPLATE_TEMPLATE_PARM:
11822 case BOUND_TEMPLATE_TEMPLATE_PARM:
11823 case TEMPLATE_PARM_INDEX:
11824 {
11825 int idx;
11826 int level;
11827 int levels;
11828 tree arg = NULL_TREE;
11829
11830 r = NULL_TREE;
11831
11832 gcc_assert (TREE_VEC_LENGTH (args) > 0);
11833 template_parm_level_and_index (t, &level, &idx);
11834
11835 levels = TMPL_ARGS_DEPTH (args);
11836 if (level <= levels)
11837 {
11838 arg = TMPL_ARG (args, level, idx);
11839
11840 if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
11841 {
11842 /* See through ARGUMENT_PACK_SELECT arguments. */
11843 arg = ARGUMENT_PACK_SELECT_ARG (arg);
11844 /* If the selected argument is an expansion E, that most
11845 likely means we were called from
11846 gen_elem_of_pack_expansion_instantiation during the
11847 substituting of pack an argument pack (which Ith
11848 element is a pack expansion, where I is
11849 ARGUMENT_PACK_SELECT_INDEX) into a pack expansion.
11850 In this case, the Ith element resulting from this
11851 substituting is going to be a pack expansion, which
11852 pattern is the pattern of E. Let's return the
11853 pattern of E, and
11854 gen_elem_of_pack_expansion_instantiation will
11855 build the resulting pack expansion from it. */
11856 if (PACK_EXPANSION_P (arg))
11857 {
11858 /* Make sure we aren't throwing away arg info. */
11859 gcc_assert (!PACK_EXPANSION_EXTRA_ARGS (arg));
11860 arg = PACK_EXPANSION_PATTERN (arg);
11861 }
11862 }
11863 }
11864
11865 if (arg == error_mark_node)
11866 return error_mark_node;
11867 else if (arg != NULL_TREE)
11868 {
11869 if (ARGUMENT_PACK_P (arg))
11870 /* If ARG is an argument pack, we don't actually want to
11871 perform a substitution here, because substitutions
11872 for argument packs are only done
11873 element-by-element. We can get to this point when
11874 substituting the type of a non-type template
11875 parameter pack, when that type actually contains
11876 template parameter packs from an outer template, e.g.,
11877
11878 template<typename... Types> struct A {
11879 template<Types... Values> struct B { };
11880 }; */
11881 return t;
11882
11883 if (code == TEMPLATE_TYPE_PARM)
11884 {
11885 int quals;
11886 gcc_assert (TYPE_P (arg));
11887
11888 quals = cp_type_quals (arg) | cp_type_quals (t);
11889
11890 return cp_build_qualified_type_real
11891 (arg, quals, complain | tf_ignore_bad_quals);
11892 }
11893 else if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
11894 {
11895 /* We are processing a type constructed from a
11896 template template parameter. */
11897 tree argvec = tsubst (TYPE_TI_ARGS (t),
11898 args, complain, in_decl);
11899 if (argvec == error_mark_node)
11900 return error_mark_node;
11901
11902 gcc_assert (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
11903 || TREE_CODE (arg) == TEMPLATE_DECL
11904 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
11905
11906 if (TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE)
11907 /* Consider this code:
11908
11909 template <template <class> class Template>
11910 struct Internal {
11911 template <class Arg> using Bind = Template<Arg>;
11912 };
11913
11914 template <template <class> class Template, class Arg>
11915 using Instantiate = Template<Arg>; //#0
11916
11917 template <template <class> class Template,
11918 class Argument>
11919 using Bind =
11920 Instantiate<Internal<Template>::template Bind,
11921 Argument>; //#1
11922
11923 When #1 is parsed, the
11924 BOUND_TEMPLATE_TEMPLATE_PARM representing the
11925 parameter `Template' in #0 matches the
11926 UNBOUND_CLASS_TEMPLATE representing the argument
11927 `Internal<Template>::template Bind'; We then want
11928 to assemble the type `Bind<Argument>' that can't
11929 be fully created right now, because
11930 `Internal<Template>' not being complete, the Bind
11931 template cannot be looked up in that context. So
11932 we need to "store" `Bind<Argument>' for later
11933 when the context of Bind becomes complete. Let's
11934 store that in a TYPENAME_TYPE. */
11935 return make_typename_type (TYPE_CONTEXT (arg),
11936 build_nt (TEMPLATE_ID_EXPR,
11937 TYPE_IDENTIFIER (arg),
11938 argvec),
11939 typename_type,
11940 complain);
11941
11942 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
11943 are resolving nested-types in the signature of a
11944 member function templates. Otherwise ARG is a
11945 TEMPLATE_DECL and is the real template to be
11946 instantiated. */
11947 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11948 arg = TYPE_NAME (arg);
11949
11950 r = lookup_template_class (arg,
11951 argvec, in_decl,
11952 DECL_CONTEXT (arg),
11953 /*entering_scope=*/0,
11954 complain);
11955 return cp_build_qualified_type_real
11956 (r, cp_type_quals (t) | cp_type_quals (r), complain);
11957 }
11958 else
11959 /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX. */
11960 return convert_from_reference (unshare_expr (arg));
11961 }
11962
11963 if (level == 1)
11964 /* This can happen during the attempted tsubst'ing in
11965 unify. This means that we don't yet have any information
11966 about the template parameter in question. */
11967 return t;
11968
11969 /* Early in template argument deduction substitution, we don't
11970 want to reduce the level of 'auto', or it will be confused
11971 with a normal template parm in subsequent deduction. */
11972 if (is_auto (t) && (complain & tf_partial))
11973 return t;
11974
11975 /* If we get here, we must have been looking at a parm for a
11976 more deeply nested template. Make a new version of this
11977 template parameter, but with a lower level. */
11978 switch (code)
11979 {
11980 case TEMPLATE_TYPE_PARM:
11981 case TEMPLATE_TEMPLATE_PARM:
11982 case BOUND_TEMPLATE_TEMPLATE_PARM:
11983 if (cp_type_quals (t))
11984 {
11985 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
11986 r = cp_build_qualified_type_real
11987 (r, cp_type_quals (t),
11988 complain | (code == TEMPLATE_TYPE_PARM
11989 ? tf_ignore_bad_quals : 0));
11990 }
11991 else
11992 {
11993 r = copy_type (t);
11994 TEMPLATE_TYPE_PARM_INDEX (r)
11995 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
11996 r, levels, args, complain);
11997 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
11998 TYPE_MAIN_VARIANT (r) = r;
11999 TYPE_POINTER_TO (r) = NULL_TREE;
12000 TYPE_REFERENCE_TO (r) = NULL_TREE;
12001
12002 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
12003 /* We have reduced the level of the template
12004 template parameter, but not the levels of its
12005 template parameters, so canonical_type_parameter
12006 will not be able to find the canonical template
12007 template parameter for this level. Thus, we
12008 require structural equality checking to compare
12009 TEMPLATE_TEMPLATE_PARMs. */
12010 SET_TYPE_STRUCTURAL_EQUALITY (r);
12011 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
12012 SET_TYPE_STRUCTURAL_EQUALITY (r);
12013 else
12014 TYPE_CANONICAL (r) = canonical_type_parameter (r);
12015
12016 if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
12017 {
12018 tree argvec = tsubst (TYPE_TI_ARGS (t), args,
12019 complain, in_decl);
12020 if (argvec == error_mark_node)
12021 return error_mark_node;
12022
12023 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
12024 = build_template_info (TYPE_TI_TEMPLATE (t), argvec);
12025 }
12026 }
12027 break;
12028
12029 case TEMPLATE_PARM_INDEX:
12030 r = reduce_template_parm_level (t, type, levels, args, complain);
12031 break;
12032
12033 default:
12034 gcc_unreachable ();
12035 }
12036
12037 return r;
12038 }
12039
12040 case TREE_LIST:
12041 {
12042 tree purpose, value, chain;
12043
12044 if (t == void_list_node)
12045 return t;
12046
12047 purpose = TREE_PURPOSE (t);
12048 if (purpose)
12049 {
12050 purpose = tsubst (purpose, args, complain, in_decl);
12051 if (purpose == error_mark_node)
12052 return error_mark_node;
12053 }
12054 value = TREE_VALUE (t);
12055 if (value)
12056 {
12057 value = tsubst (value, args, complain, in_decl);
12058 if (value == error_mark_node)
12059 return error_mark_node;
12060 }
12061 chain = TREE_CHAIN (t);
12062 if (chain && chain != void_type_node)
12063 {
12064 chain = tsubst (chain, args, complain, in_decl);
12065 if (chain == error_mark_node)
12066 return error_mark_node;
12067 }
12068 if (purpose == TREE_PURPOSE (t)
12069 && value == TREE_VALUE (t)
12070 && chain == TREE_CHAIN (t))
12071 return t;
12072 return hash_tree_cons (purpose, value, chain);
12073 }
12074
12075 case TREE_BINFO:
12076 /* We should never be tsubsting a binfo. */
12077 gcc_unreachable ();
12078
12079 case TREE_VEC:
12080 /* A vector of template arguments. */
12081 gcc_assert (!type);
12082 return tsubst_template_args (t, args, complain, in_decl);
12083
12084 case POINTER_TYPE:
12085 case REFERENCE_TYPE:
12086 {
12087 if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
12088 return t;
12089
12090 /* [temp.deduct]
12091
12092 Type deduction may fail for any of the following
12093 reasons:
12094
12095 -- Attempting to create a pointer to reference type.
12096 -- Attempting to create a reference to a reference type or
12097 a reference to void.
12098
12099 Core issue 106 says that creating a reference to a reference
12100 during instantiation is no longer a cause for failure. We
12101 only enforce this check in strict C++98 mode. */
12102 if ((TREE_CODE (type) == REFERENCE_TYPE
12103 && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
12104 || (code == REFERENCE_TYPE && VOID_TYPE_P (type)))
12105 {
12106 static location_t last_loc;
12107
12108 /* We keep track of the last time we issued this error
12109 message to avoid spewing a ton of messages during a
12110 single bad template instantiation. */
12111 if (complain & tf_error
12112 && last_loc != input_location)
12113 {
12114 if (VOID_TYPE_P (type))
12115 error ("forming reference to void");
12116 else if (code == POINTER_TYPE)
12117 error ("forming pointer to reference type %qT", type);
12118 else
12119 error ("forming reference to reference type %qT", type);
12120 last_loc = input_location;
12121 }
12122
12123 return error_mark_node;
12124 }
12125 else if (TREE_CODE (type) == FUNCTION_TYPE
12126 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
12127 || type_memfn_rqual (type) != REF_QUAL_NONE))
12128 {
12129 if (complain & tf_error)
12130 {
12131 if (code == POINTER_TYPE)
12132 error ("forming pointer to qualified function type %qT",
12133 type);
12134 else
12135 error ("forming reference to qualified function type %qT",
12136 type);
12137 }
12138 return error_mark_node;
12139 }
12140 else if (code == POINTER_TYPE)
12141 {
12142 r = build_pointer_type (type);
12143 if (TREE_CODE (type) == METHOD_TYPE)
12144 r = build_ptrmemfunc_type (r);
12145 }
12146 else if (TREE_CODE (type) == REFERENCE_TYPE)
12147 /* In C++0x, during template argument substitution, when there is an
12148 attempt to create a reference to a reference type, reference
12149 collapsing is applied as described in [14.3.1/4 temp.arg.type]:
12150
12151 "If a template-argument for a template-parameter T names a type
12152 that is a reference to a type A, an attempt to create the type
12153 'lvalue reference to cv T' creates the type 'lvalue reference to
12154 A,' while an attempt to create the type type rvalue reference to
12155 cv T' creates the type T"
12156 */
12157 r = cp_build_reference_type
12158 (TREE_TYPE (type),
12159 TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
12160 else
12161 r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
12162 r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
12163
12164 if (cxx_dialect >= cxx14
12165 && !(TREE_CODE (t) == REFERENCE_TYPE && REFERENCE_VLA_OK (t))
12166 && array_of_runtime_bound_p (type)
12167 && (flag_iso || warn_vla > 0))
12168 {
12169 if (complain & tf_warning_or_error)
12170 pedwarn
12171 (input_location, OPT_Wvla,
12172 code == REFERENCE_TYPE
12173 ? G_("cannot declare reference to array of runtime bound")
12174 : G_("cannot declare pointer to array of runtime bound"));
12175 else
12176 r = error_mark_node;
12177 }
12178
12179 if (r != error_mark_node)
12180 /* Will this ever be needed for TYPE_..._TO values? */
12181 layout_type (r);
12182
12183 return r;
12184 }
12185 case OFFSET_TYPE:
12186 {
12187 r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
12188 if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
12189 {
12190 /* [temp.deduct]
12191
12192 Type deduction may fail for any of the following
12193 reasons:
12194
12195 -- Attempting to create "pointer to member of T" when T
12196 is not a class type. */
12197 if (complain & tf_error)
12198 error ("creating pointer to member of non-class type %qT", r);
12199 return error_mark_node;
12200 }
12201 if (TREE_CODE (type) == REFERENCE_TYPE)
12202 {
12203 if (complain & tf_error)
12204 error ("creating pointer to member reference type %qT", type);
12205 return error_mark_node;
12206 }
12207 if (VOID_TYPE_P (type))
12208 {
12209 if (complain & tf_error)
12210 error ("creating pointer to member of type void");
12211 return error_mark_node;
12212 }
12213 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
12214 if (TREE_CODE (type) == FUNCTION_TYPE)
12215 {
12216 /* The type of the implicit object parameter gets its
12217 cv-qualifiers from the FUNCTION_TYPE. */
12218 tree memptr;
12219 tree method_type
12220 = build_memfn_type (type, r, type_memfn_quals (type),
12221 type_memfn_rqual (type));
12222 memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
12223 return cp_build_qualified_type_real (memptr, cp_type_quals (t),
12224 complain);
12225 }
12226 else
12227 return cp_build_qualified_type_real (build_ptrmem_type (r, type),
12228 cp_type_quals (t),
12229 complain);
12230 }
12231 case FUNCTION_TYPE:
12232 case METHOD_TYPE:
12233 {
12234 tree fntype;
12235 tree specs;
12236 fntype = tsubst_function_type (t, args, complain, in_decl);
12237 if (fntype == error_mark_node)
12238 return error_mark_node;
12239
12240 /* Substitute the exception specification. */
12241 specs = tsubst_exception_specification (t, args, complain,
12242 in_decl, /*defer_ok*/true);
12243 if (specs == error_mark_node)
12244 return error_mark_node;
12245 if (specs)
12246 fntype = build_exception_variant (fntype, specs);
12247 return fntype;
12248 }
12249 case ARRAY_TYPE:
12250 {
12251 tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
12252 if (domain == error_mark_node)
12253 return error_mark_node;
12254
12255 /* As an optimization, we avoid regenerating the array type if
12256 it will obviously be the same as T. */
12257 if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
12258 return t;
12259
12260 /* These checks should match the ones in create_array_type_for_decl.
12261
12262 [temp.deduct]
12263
12264 The deduction may fail for any of the following reasons:
12265
12266 -- Attempting to create an array with an element type that
12267 is void, a function type, or a reference type, or [DR337]
12268 an abstract class type. */
12269 if (VOID_TYPE_P (type)
12270 || TREE_CODE (type) == FUNCTION_TYPE
12271 || (TREE_CODE (type) == ARRAY_TYPE
12272 && TYPE_DOMAIN (type) == NULL_TREE)
12273 || TREE_CODE (type) == REFERENCE_TYPE)
12274 {
12275 if (complain & tf_error)
12276 error ("creating array of %qT", type);
12277 return error_mark_node;
12278 }
12279
12280 if (abstract_virtuals_error_sfinae (ACU_ARRAY, type, complain))
12281 return error_mark_node;
12282
12283 r = build_cplus_array_type (type, domain);
12284
12285 if (TYPE_USER_ALIGN (t))
12286 {
12287 TYPE_ALIGN (r) = TYPE_ALIGN (t);
12288 TYPE_USER_ALIGN (r) = 1;
12289 }
12290
12291 return r;
12292 }
12293
12294 case TYPENAME_TYPE:
12295 {
12296 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
12297 in_decl, /*entering_scope=*/1);
12298 tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
12299 complain, in_decl);
12300
12301 if (ctx == error_mark_node || f == error_mark_node)
12302 return error_mark_node;
12303
12304 if (!MAYBE_CLASS_TYPE_P (ctx))
12305 {
12306 if (complain & tf_error)
12307 error ("%qT is not a class, struct, or union type", ctx);
12308 return error_mark_node;
12309 }
12310 else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
12311 {
12312 /* Normally, make_typename_type does not require that the CTX
12313 have complete type in order to allow things like:
12314
12315 template <class T> struct S { typename S<T>::X Y; };
12316
12317 But, such constructs have already been resolved by this
12318 point, so here CTX really should have complete type, unless
12319 it's a partial instantiation. */
12320 ctx = complete_type (ctx);
12321 if (!COMPLETE_TYPE_P (ctx))
12322 {
12323 if (complain & tf_error)
12324 cxx_incomplete_type_error (NULL_TREE, ctx);
12325 return error_mark_node;
12326 }
12327 }
12328
12329 f = make_typename_type (ctx, f, typename_type,
12330 complain | tf_keep_type_decl);
12331 if (f == error_mark_node)
12332 return f;
12333 if (TREE_CODE (f) == TYPE_DECL)
12334 {
12335 complain |= tf_ignore_bad_quals;
12336 f = TREE_TYPE (f);
12337 }
12338
12339 if (TREE_CODE (f) != TYPENAME_TYPE)
12340 {
12341 if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
12342 {
12343 if (complain & tf_error)
12344 error ("%qT resolves to %qT, which is not an enumeration type",
12345 t, f);
12346 else
12347 return error_mark_node;
12348 }
12349 else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
12350 {
12351 if (complain & tf_error)
12352 error ("%qT resolves to %qT, which is is not a class type",
12353 t, f);
12354 else
12355 return error_mark_node;
12356 }
12357 }
12358
12359 return cp_build_qualified_type_real
12360 (f, cp_type_quals (f) | cp_type_quals (t), complain);
12361 }
12362
12363 case UNBOUND_CLASS_TEMPLATE:
12364 {
12365 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
12366 in_decl, /*entering_scope=*/1);
12367 tree name = TYPE_IDENTIFIER (t);
12368 tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
12369
12370 if (ctx == error_mark_node || name == error_mark_node)
12371 return error_mark_node;
12372
12373 if (parm_list)
12374 parm_list = tsubst_template_parms (parm_list, args, complain);
12375 return make_unbound_class_template (ctx, name, parm_list, complain);
12376 }
12377
12378 case TYPEOF_TYPE:
12379 {
12380 tree type;
12381
12382 ++cp_unevaluated_operand;
12383 ++c_inhibit_evaluation_warnings;
12384
12385 type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
12386 complain, in_decl,
12387 /*integral_constant_expression_p=*/false);
12388
12389 --cp_unevaluated_operand;
12390 --c_inhibit_evaluation_warnings;
12391
12392 type = finish_typeof (type);
12393 return cp_build_qualified_type_real (type,
12394 cp_type_quals (t)
12395 | cp_type_quals (type),
12396 complain);
12397 }
12398
12399 case DECLTYPE_TYPE:
12400 {
12401 tree type;
12402
12403 ++cp_unevaluated_operand;
12404 ++c_inhibit_evaluation_warnings;
12405
12406 type = tsubst_copy_and_build (DECLTYPE_TYPE_EXPR (t), args,
12407 complain|tf_decltype, in_decl,
12408 /*function_p*/false,
12409 /*integral_constant_expression*/false);
12410
12411 --cp_unevaluated_operand;
12412 --c_inhibit_evaluation_warnings;
12413
12414 if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
12415 type = lambda_capture_field_type (type,
12416 DECLTYPE_FOR_INIT_CAPTURE (t));
12417 else if (DECLTYPE_FOR_LAMBDA_PROXY (t))
12418 type = lambda_proxy_type (type);
12419 else
12420 {
12421 bool id = DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t);
12422 if (id && TREE_CODE (DECLTYPE_TYPE_EXPR (t)) == BIT_NOT_EXPR
12423 && EXPR_P (type))
12424 /* In a template ~id could be either a complement expression
12425 or an unqualified-id naming a destructor; if instantiating
12426 it produces an expression, it's not an id-expression or
12427 member access. */
12428 id = false;
12429 type = finish_decltype_type (type, id, complain);
12430 }
12431 return cp_build_qualified_type_real (type,
12432 cp_type_quals (t)
12433 | cp_type_quals (type),
12434 complain);
12435 }
12436
12437 case UNDERLYING_TYPE:
12438 {
12439 tree type = tsubst (UNDERLYING_TYPE_TYPE (t), args,
12440 complain, in_decl);
12441 return finish_underlying_type (type);
12442 }
12443
12444 case TYPE_ARGUMENT_PACK:
12445 case NONTYPE_ARGUMENT_PACK:
12446 {
12447 tree r = TYPE_P (t) ? cxx_make_type (code) : make_node (code);
12448 tree packed_out =
12449 tsubst_template_args (ARGUMENT_PACK_ARGS (t),
12450 args,
12451 complain,
12452 in_decl);
12453 SET_ARGUMENT_PACK_ARGS (r, packed_out);
12454
12455 /* For template nontype argument packs, also substitute into
12456 the type. */
12457 if (code == NONTYPE_ARGUMENT_PACK)
12458 TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
12459
12460 return r;
12461 }
12462 break;
12463
12464 case VOID_CST:
12465 case INTEGER_CST:
12466 case REAL_CST:
12467 case STRING_CST:
12468 case PLUS_EXPR:
12469 case MINUS_EXPR:
12470 case NEGATE_EXPR:
12471 case NOP_EXPR:
12472 case INDIRECT_REF:
12473 case ADDR_EXPR:
12474 case CALL_EXPR:
12475 case ARRAY_REF:
12476 case SCOPE_REF:
12477 /* We should use one of the expression tsubsts for these codes. */
12478 gcc_unreachable ();
12479
12480 default:
12481 sorry ("use of %qs in template", get_tree_code_name (code));
12482 return error_mark_node;
12483 }
12484 }
12485
12486 /* Like tsubst_expr for a BASELINK. OBJECT_TYPE, if non-NULL, is the
12487 type of the expression on the left-hand side of the "." or "->"
12488 operator. */
12489
12490 static tree
12491 tsubst_baselink (tree baselink, tree object_type,
12492 tree args, tsubst_flags_t complain, tree in_decl)
12493 {
12494 tree name;
12495 tree qualifying_scope;
12496 tree fns;
12497 tree optype;
12498 tree template_args = 0;
12499 bool template_id_p = false;
12500 bool qualified = BASELINK_QUALIFIED_P (baselink);
12501
12502 /* A baselink indicates a function from a base class. Both the
12503 BASELINK_ACCESS_BINFO and the base class referenced may
12504 indicate bases of the template class, rather than the
12505 instantiated class. In addition, lookups that were not
12506 ambiguous before may be ambiguous now. Therefore, we perform
12507 the lookup again. */
12508 qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
12509 qualifying_scope = tsubst (qualifying_scope, args,
12510 complain, in_decl);
12511 fns = BASELINK_FUNCTIONS (baselink);
12512 optype = tsubst (BASELINK_OPTYPE (baselink), args, complain, in_decl);
12513 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
12514 {
12515 template_id_p = true;
12516 template_args = TREE_OPERAND (fns, 1);
12517 fns = TREE_OPERAND (fns, 0);
12518 if (template_args)
12519 template_args = tsubst_template_args (template_args, args,
12520 complain, in_decl);
12521 }
12522 name = DECL_NAME (get_first_fn (fns));
12523 if (IDENTIFIER_TYPENAME_P (name))
12524 name = mangle_conv_op_name_for_type (optype);
12525 baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
12526 if (!baselink)
12527 return error_mark_node;
12528
12529 /* If lookup found a single function, mark it as used at this
12530 point. (If it lookup found multiple functions the one selected
12531 later by overload resolution will be marked as used at that
12532 point.) */
12533 if (BASELINK_P (baselink))
12534 fns = BASELINK_FUNCTIONS (baselink);
12535 if (!template_id_p && !really_overloaded_fn (fns))
12536 mark_used (OVL_CURRENT (fns));
12537
12538 /* Add back the template arguments, if present. */
12539 if (BASELINK_P (baselink) && template_id_p)
12540 BASELINK_FUNCTIONS (baselink)
12541 = build_nt (TEMPLATE_ID_EXPR,
12542 BASELINK_FUNCTIONS (baselink),
12543 template_args);
12544 /* Update the conversion operator type. */
12545 BASELINK_OPTYPE (baselink) = optype;
12546
12547 if (!object_type)
12548 object_type = current_class_type;
12549
12550 if (qualified)
12551 baselink = adjust_result_of_qualified_name_lookup (baselink,
12552 qualifying_scope,
12553 object_type);
12554 return baselink;
12555 }
12556
12557 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID. DONE is
12558 true if the qualified-id will be a postfix-expression in-and-of
12559 itself; false if more of the postfix-expression follows the
12560 QUALIFIED_ID. ADDRESS_P is true if the qualified-id is the operand
12561 of "&". */
12562
12563 static tree
12564 tsubst_qualified_id (tree qualified_id, tree args,
12565 tsubst_flags_t complain, tree in_decl,
12566 bool done, bool address_p)
12567 {
12568 tree expr;
12569 tree scope;
12570 tree name;
12571 bool is_template;
12572 tree template_args;
12573 location_t loc = UNKNOWN_LOCATION;
12574
12575 gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
12576
12577 /* Figure out what name to look up. */
12578 name = TREE_OPERAND (qualified_id, 1);
12579 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
12580 {
12581 is_template = true;
12582 loc = EXPR_LOCATION (name);
12583 template_args = TREE_OPERAND (name, 1);
12584 if (template_args)
12585 template_args = tsubst_template_args (template_args, args,
12586 complain, in_decl);
12587 name = TREE_OPERAND (name, 0);
12588 }
12589 else
12590 {
12591 is_template = false;
12592 template_args = NULL_TREE;
12593 }
12594
12595 /* Substitute into the qualifying scope. When there are no ARGS, we
12596 are just trying to simplify a non-dependent expression. In that
12597 case the qualifying scope may be dependent, and, in any case,
12598 substituting will not help. */
12599 scope = TREE_OPERAND (qualified_id, 0);
12600 if (args)
12601 {
12602 scope = tsubst (scope, args, complain, in_decl);
12603 expr = tsubst_copy (name, args, complain, in_decl);
12604 }
12605 else
12606 expr = name;
12607
12608 if (dependent_scope_p (scope))
12609 {
12610 if (is_template)
12611 expr = build_min_nt_loc (loc, TEMPLATE_ID_EXPR, expr, template_args);
12612 return build_qualified_name (NULL_TREE, scope, expr,
12613 QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
12614 }
12615
12616 if (!BASELINK_P (name) && !DECL_P (expr))
12617 {
12618 if (TREE_CODE (expr) == BIT_NOT_EXPR)
12619 {
12620 /* A BIT_NOT_EXPR is used to represent a destructor. */
12621 if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
12622 {
12623 error ("qualifying type %qT does not match destructor name ~%qT",
12624 scope, TREE_OPERAND (expr, 0));
12625 expr = error_mark_node;
12626 }
12627 else
12628 expr = lookup_qualified_name (scope, complete_dtor_identifier,
12629 /*is_type_p=*/0, false);
12630 }
12631 else
12632 expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
12633 if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
12634 ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
12635 {
12636 if (complain & tf_error)
12637 {
12638 error ("dependent-name %qE is parsed as a non-type, but "
12639 "instantiation yields a type", qualified_id);
12640 inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
12641 }
12642 return error_mark_node;
12643 }
12644 }
12645
12646 if (DECL_P (expr))
12647 {
12648 check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
12649 scope);
12650 /* Remember that there was a reference to this entity. */
12651 mark_used (expr);
12652 }
12653
12654 if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
12655 {
12656 if (complain & tf_error)
12657 qualified_name_lookup_error (scope,
12658 TREE_OPERAND (qualified_id, 1),
12659 expr, input_location);
12660 return error_mark_node;
12661 }
12662
12663 if (is_template)
12664 expr = lookup_template_function (expr, template_args);
12665
12666 if (expr == error_mark_node && complain & tf_error)
12667 qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
12668 expr, input_location);
12669 else if (TYPE_P (scope))
12670 {
12671 expr = (adjust_result_of_qualified_name_lookup
12672 (expr, scope, current_nonlambda_class_type ()));
12673 expr = (finish_qualified_id_expr
12674 (scope, expr, done, address_p && PTRMEM_OK_P (qualified_id),
12675 QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
12676 /*template_arg_p=*/false, complain));
12677 }
12678
12679 /* Expressions do not generally have reference type. */
12680 if (TREE_CODE (expr) != SCOPE_REF
12681 /* However, if we're about to form a pointer-to-member, we just
12682 want the referenced member referenced. */
12683 && TREE_CODE (expr) != OFFSET_REF)
12684 expr = convert_from_reference (expr);
12685
12686 return expr;
12687 }
12688
12689 /* tsubst the initializer for a VAR_DECL. INIT is the unsubstituted
12690 initializer, DECL is the substituted VAR_DECL. Other arguments are as
12691 for tsubst. */
12692
12693 static tree
12694 tsubst_init (tree init, tree decl, tree args,
12695 tsubst_flags_t complain, tree in_decl)
12696 {
12697 if (!init)
12698 return NULL_TREE;
12699
12700 init = tsubst_expr (init, args, complain, in_decl, false);
12701
12702 if (!init)
12703 {
12704 /* If we had an initializer but it
12705 instantiated to nothing,
12706 value-initialize the object. This will
12707 only occur when the initializer was a
12708 pack expansion where the parameter packs
12709 used in that expansion were of length
12710 zero. */
12711 init = build_value_init (TREE_TYPE (decl),
12712 complain);
12713 if (TREE_CODE (init) == AGGR_INIT_EXPR)
12714 init = get_target_expr_sfinae (init, complain);
12715 }
12716
12717 return init;
12718 }
12719
12720 /* Like tsubst, but deals with expressions. This function just replaces
12721 template parms; to finish processing the resultant expression, use
12722 tsubst_copy_and_build or tsubst_expr. */
12723
12724 static tree
12725 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
12726 {
12727 enum tree_code code;
12728 tree r;
12729
12730 if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
12731 return t;
12732
12733 code = TREE_CODE (t);
12734
12735 switch (code)
12736 {
12737 case PARM_DECL:
12738 r = retrieve_local_specialization (t);
12739
12740 if (r == NULL_TREE)
12741 {
12742 /* We get here for a use of 'this' in an NSDMI. */
12743 if (DECL_NAME (t) == this_identifier
12744 && current_function_decl
12745 && DECL_CONSTRUCTOR_P (current_function_decl))
12746 return current_class_ptr;
12747
12748 /* This can happen for a parameter name used later in a function
12749 declaration (such as in a late-specified return type). Just
12750 make a dummy decl, since it's only used for its type. */
12751 gcc_assert (cp_unevaluated_operand != 0);
12752 r = tsubst_decl (t, args, complain);
12753 /* Give it the template pattern as its context; its true context
12754 hasn't been instantiated yet and this is good enough for
12755 mangling. */
12756 DECL_CONTEXT (r) = DECL_CONTEXT (t);
12757 }
12758
12759 if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
12760 r = ARGUMENT_PACK_SELECT_ARG (r);
12761 mark_used (r);
12762 return r;
12763
12764 case CONST_DECL:
12765 {
12766 tree enum_type;
12767 tree v;
12768
12769 if (DECL_TEMPLATE_PARM_P (t))
12770 return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
12771 /* There is no need to substitute into namespace-scope
12772 enumerators. */
12773 if (DECL_NAMESPACE_SCOPE_P (t))
12774 return t;
12775 /* If ARGS is NULL, then T is known to be non-dependent. */
12776 if (args == NULL_TREE)
12777 return integral_constant_value (t);
12778
12779 /* Unfortunately, we cannot just call lookup_name here.
12780 Consider:
12781
12782 template <int I> int f() {
12783 enum E { a = I };
12784 struct S { void g() { E e = a; } };
12785 };
12786
12787 When we instantiate f<7>::S::g(), say, lookup_name is not
12788 clever enough to find f<7>::a. */
12789 enum_type
12790 = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
12791 /*entering_scope=*/0);
12792
12793 for (v = TYPE_VALUES (enum_type);
12794 v != NULL_TREE;
12795 v = TREE_CHAIN (v))
12796 if (TREE_PURPOSE (v) == DECL_NAME (t))
12797 return TREE_VALUE (v);
12798
12799 /* We didn't find the name. That should never happen; if
12800 name-lookup found it during preliminary parsing, we
12801 should find it again here during instantiation. */
12802 gcc_unreachable ();
12803 }
12804 return t;
12805
12806 case FIELD_DECL:
12807 if (PACK_EXPANSION_P (TREE_TYPE (t)))
12808 {
12809 /* Check for a local specialization set up by
12810 tsubst_pack_expansion. */
12811 if (tree r = retrieve_local_specialization (t))
12812 {
12813 if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
12814 r = ARGUMENT_PACK_SELECT_ARG (r);
12815 return r;
12816 }
12817
12818 /* When retrieving a capture pack from a generic lambda, remove the
12819 lambda call op's own template argument list from ARGS. Only the
12820 template arguments active for the closure type should be used to
12821 retrieve the pack specialization. */
12822 if (LAMBDA_FUNCTION_P (current_function_decl)
12823 && (template_class_depth (DECL_CONTEXT (t))
12824 != TMPL_ARGS_DEPTH (args)))
12825 args = strip_innermost_template_args (args, 1);
12826
12827 /* Otherwise return the full NONTYPE_ARGUMENT_PACK that
12828 tsubst_decl put in the hash table. */
12829 return retrieve_specialization (t, args, 0);
12830 }
12831
12832 if (DECL_CONTEXT (t))
12833 {
12834 tree ctx;
12835
12836 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
12837 /*entering_scope=*/1);
12838 if (ctx != DECL_CONTEXT (t))
12839 {
12840 tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
12841 if (!r)
12842 {
12843 if (complain & tf_error)
12844 error ("using invalid field %qD", t);
12845 return error_mark_node;
12846 }
12847 return r;
12848 }
12849 }
12850
12851 return t;
12852
12853 case VAR_DECL:
12854 case FUNCTION_DECL:
12855 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
12856 r = tsubst (t, args, complain, in_decl);
12857 else if (local_variable_p (t))
12858 {
12859 r = retrieve_local_specialization (t);
12860 if (r == NULL_TREE)
12861 {
12862 /* First try name lookup to find the instantiation. */
12863 r = lookup_name (DECL_NAME (t));
12864 if (r)
12865 {
12866 /* Make sure that the one we found is the one we want. */
12867 tree ctx = tsubst (DECL_CONTEXT (t), args,
12868 complain, in_decl);
12869 if (ctx != DECL_CONTEXT (r))
12870 r = NULL_TREE;
12871 }
12872
12873 if (r)
12874 /* OK */;
12875 else
12876 {
12877 /* This can happen for a variable used in a
12878 late-specified return type of a local lambda, or for a
12879 local static or constant. Building a new VAR_DECL
12880 should be OK in all those cases. */
12881 r = tsubst_decl (t, args, complain);
12882 if (decl_maybe_constant_var_p (r))
12883 {
12884 /* We can't call cp_finish_decl, so handle the
12885 initializer by hand. */
12886 tree init = tsubst_init (DECL_INITIAL (t), r, args,
12887 complain, in_decl);
12888 if (!processing_template_decl)
12889 init = maybe_constant_init (init);
12890 if (processing_template_decl
12891 ? potential_constant_expression (init)
12892 : reduced_constant_expression_p (init))
12893 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
12894 = TREE_CONSTANT (r) = true;
12895 DECL_INITIAL (r) = init;
12896 }
12897 gcc_assert (cp_unevaluated_operand || TREE_STATIC (r)
12898 || decl_constant_var_p (r)
12899 || errorcount || sorrycount);
12900 if (!processing_template_decl)
12901 {
12902 if (TREE_STATIC (r))
12903 rest_of_decl_compilation (r, toplevel_bindings_p (),
12904 at_eof);
12905 else if (decl_constant_var_p (r))
12906 /* A use of a local constant decays to its value.
12907 FIXME update for core DR 696. */
12908 r = integral_constant_value (r);
12909 }
12910 }
12911 /* Remember this for subsequent uses. */
12912 if (local_specializations)
12913 register_local_specialization (r, t);
12914 }
12915 }
12916 else
12917 r = t;
12918 mark_used (r);
12919 return r;
12920
12921 case NAMESPACE_DECL:
12922 return t;
12923
12924 case OVERLOAD:
12925 /* An OVERLOAD will always be a non-dependent overload set; an
12926 overload set from function scope will just be represented with an
12927 IDENTIFIER_NODE, and from class scope with a BASELINK. */
12928 gcc_assert (!uses_template_parms (t));
12929 return t;
12930
12931 case BASELINK:
12932 return tsubst_baselink (t, current_nonlambda_class_type (),
12933 args, complain, in_decl);
12934
12935 case TEMPLATE_DECL:
12936 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
12937 return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
12938 args, complain, in_decl);
12939 else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
12940 return tsubst (t, args, complain, in_decl);
12941 else if (DECL_CLASS_SCOPE_P (t)
12942 && uses_template_parms (DECL_CONTEXT (t)))
12943 {
12944 /* Template template argument like the following example need
12945 special treatment:
12946
12947 template <template <class> class TT> struct C {};
12948 template <class T> struct D {
12949 template <class U> struct E {};
12950 C<E> c; // #1
12951 };
12952 D<int> d; // #2
12953
12954 We are processing the template argument `E' in #1 for
12955 the template instantiation #2. Originally, `E' is a
12956 TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT. Now we
12957 have to substitute this with one having context `D<int>'. */
12958
12959 tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
12960 return lookup_field (context, DECL_NAME(t), 0, false);
12961 }
12962 else
12963 /* Ordinary template template argument. */
12964 return t;
12965
12966 case CAST_EXPR:
12967 case REINTERPRET_CAST_EXPR:
12968 case CONST_CAST_EXPR:
12969 case STATIC_CAST_EXPR:
12970 case DYNAMIC_CAST_EXPR:
12971 case IMPLICIT_CONV_EXPR:
12972 case CONVERT_EXPR:
12973 case NOP_EXPR:
12974 {
12975 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12976 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
12977 return build1 (code, type, op0);
12978 }
12979
12980 case SIZEOF_EXPR:
12981 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
12982 {
12983
12984 tree expanded, op = TREE_OPERAND (t, 0);
12985 int len = 0;
12986
12987 if (SIZEOF_EXPR_TYPE_P (t))
12988 op = TREE_TYPE (op);
12989
12990 ++cp_unevaluated_operand;
12991 ++c_inhibit_evaluation_warnings;
12992 /* We only want to compute the number of arguments. */
12993 expanded = tsubst_pack_expansion (op, args, complain, in_decl);
12994 --cp_unevaluated_operand;
12995 --c_inhibit_evaluation_warnings;
12996
12997 if (TREE_CODE (expanded) == TREE_VEC)
12998 len = TREE_VEC_LENGTH (expanded);
12999
13000 if (expanded == error_mark_node)
13001 return error_mark_node;
13002 else if (PACK_EXPANSION_P (expanded)
13003 || (TREE_CODE (expanded) == TREE_VEC
13004 && len > 0
13005 && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
13006 {
13007 if (TREE_CODE (expanded) == TREE_VEC)
13008 expanded = TREE_VEC_ELT (expanded, len - 1);
13009
13010 if (TYPE_P (expanded))
13011 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR,
13012 complain & tf_error);
13013 else
13014 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
13015 complain & tf_error);
13016 }
13017 else
13018 return build_int_cst (size_type_node, len);
13019 }
13020 if (SIZEOF_EXPR_TYPE_P (t))
13021 {
13022 r = tsubst (TREE_TYPE (TREE_OPERAND (t, 0)),
13023 args, complain, in_decl);
13024 r = build1 (NOP_EXPR, r, error_mark_node);
13025 r = build1 (SIZEOF_EXPR,
13026 tsubst (TREE_TYPE (t), args, complain, in_decl), r);
13027 SIZEOF_EXPR_TYPE_P (r) = 1;
13028 return r;
13029 }
13030 /* Fall through */
13031
13032 case INDIRECT_REF:
13033 case NEGATE_EXPR:
13034 case TRUTH_NOT_EXPR:
13035 case BIT_NOT_EXPR:
13036 case ADDR_EXPR:
13037 case UNARY_PLUS_EXPR: /* Unary + */
13038 case ALIGNOF_EXPR:
13039 case AT_ENCODE_EXPR:
13040 case ARROW_EXPR:
13041 case THROW_EXPR:
13042 case TYPEID_EXPR:
13043 case REALPART_EXPR:
13044 case IMAGPART_EXPR:
13045 case PAREN_EXPR:
13046 {
13047 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13048 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13049 return build1 (code, type, op0);
13050 }
13051
13052 case COMPONENT_REF:
13053 {
13054 tree object;
13055 tree name;
13056
13057 object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13058 name = TREE_OPERAND (t, 1);
13059 if (TREE_CODE (name) == BIT_NOT_EXPR)
13060 {
13061 name = tsubst_copy (TREE_OPERAND (name, 0), args,
13062 complain, in_decl);
13063 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
13064 }
13065 else if (TREE_CODE (name) == SCOPE_REF
13066 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
13067 {
13068 tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
13069 complain, in_decl);
13070 name = TREE_OPERAND (name, 1);
13071 name = tsubst_copy (TREE_OPERAND (name, 0), args,
13072 complain, in_decl);
13073 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
13074 name = build_qualified_name (/*type=*/NULL_TREE,
13075 base, name,
13076 /*template_p=*/false);
13077 }
13078 else if (BASELINK_P (name))
13079 name = tsubst_baselink (name,
13080 non_reference (TREE_TYPE (object)),
13081 args, complain,
13082 in_decl);
13083 else
13084 name = tsubst_copy (name, args, complain, in_decl);
13085 return build_nt (COMPONENT_REF, object, name, NULL_TREE);
13086 }
13087
13088 case PLUS_EXPR:
13089 case MINUS_EXPR:
13090 case MULT_EXPR:
13091 case TRUNC_DIV_EXPR:
13092 case CEIL_DIV_EXPR:
13093 case FLOOR_DIV_EXPR:
13094 case ROUND_DIV_EXPR:
13095 case EXACT_DIV_EXPR:
13096 case BIT_AND_EXPR:
13097 case BIT_IOR_EXPR:
13098 case BIT_XOR_EXPR:
13099 case TRUNC_MOD_EXPR:
13100 case FLOOR_MOD_EXPR:
13101 case TRUTH_ANDIF_EXPR:
13102 case TRUTH_ORIF_EXPR:
13103 case TRUTH_AND_EXPR:
13104 case TRUTH_OR_EXPR:
13105 case RSHIFT_EXPR:
13106 case LSHIFT_EXPR:
13107 case RROTATE_EXPR:
13108 case LROTATE_EXPR:
13109 case EQ_EXPR:
13110 case NE_EXPR:
13111 case MAX_EXPR:
13112 case MIN_EXPR:
13113 case LE_EXPR:
13114 case GE_EXPR:
13115 case LT_EXPR:
13116 case GT_EXPR:
13117 case COMPOUND_EXPR:
13118 case DOTSTAR_EXPR:
13119 case MEMBER_REF:
13120 case PREDECREMENT_EXPR:
13121 case PREINCREMENT_EXPR:
13122 case POSTDECREMENT_EXPR:
13123 case POSTINCREMENT_EXPR:
13124 {
13125 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13126 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13127 return build_nt (code, op0, op1);
13128 }
13129
13130 case SCOPE_REF:
13131 {
13132 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13133 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13134 return build_qualified_name (/*type=*/NULL_TREE, op0, op1,
13135 QUALIFIED_NAME_IS_TEMPLATE (t));
13136 }
13137
13138 case ARRAY_REF:
13139 {
13140 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13141 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13142 return build_nt (ARRAY_REF, op0, op1, NULL_TREE, NULL_TREE);
13143 }
13144
13145 case CALL_EXPR:
13146 {
13147 int n = VL_EXP_OPERAND_LENGTH (t);
13148 tree result = build_vl_exp (CALL_EXPR, n);
13149 int i;
13150 for (i = 0; i < n; i++)
13151 TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
13152 complain, in_decl);
13153 return result;
13154 }
13155
13156 case COND_EXPR:
13157 case MODOP_EXPR:
13158 case PSEUDO_DTOR_EXPR:
13159 case VEC_PERM_EXPR:
13160 {
13161 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13162 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13163 tree op2 = tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl);
13164 r = build_nt (code, op0, op1, op2);
13165 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
13166 return r;
13167 }
13168
13169 case NEW_EXPR:
13170 {
13171 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13172 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13173 tree op2 = tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl);
13174 r = build_nt (code, op0, op1, op2);
13175 NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
13176 return r;
13177 }
13178
13179 case DELETE_EXPR:
13180 {
13181 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13182 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13183 r = build_nt (code, op0, op1);
13184 DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
13185 DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
13186 return r;
13187 }
13188
13189 case TEMPLATE_ID_EXPR:
13190 {
13191 /* Substituted template arguments */
13192 tree fn = TREE_OPERAND (t, 0);
13193 tree targs = TREE_OPERAND (t, 1);
13194
13195 fn = tsubst_copy (fn, args, complain, in_decl);
13196 if (targs)
13197 targs = tsubst_template_args (targs, args, complain, in_decl);
13198
13199 return lookup_template_function (fn, targs);
13200 }
13201
13202 case TREE_LIST:
13203 {
13204 tree purpose, value, chain;
13205
13206 if (t == void_list_node)
13207 return t;
13208
13209 purpose = TREE_PURPOSE (t);
13210 if (purpose)
13211 purpose = tsubst_copy (purpose, args, complain, in_decl);
13212 value = TREE_VALUE (t);
13213 if (value)
13214 value = tsubst_copy (value, args, complain, in_decl);
13215 chain = TREE_CHAIN (t);
13216 if (chain && chain != void_type_node)
13217 chain = tsubst_copy (chain, args, complain, in_decl);
13218 if (purpose == TREE_PURPOSE (t)
13219 && value == TREE_VALUE (t)
13220 && chain == TREE_CHAIN (t))
13221 return t;
13222 return tree_cons (purpose, value, chain);
13223 }
13224
13225 case RECORD_TYPE:
13226 case UNION_TYPE:
13227 case ENUMERAL_TYPE:
13228 case INTEGER_TYPE:
13229 case TEMPLATE_TYPE_PARM:
13230 case TEMPLATE_TEMPLATE_PARM:
13231 case BOUND_TEMPLATE_TEMPLATE_PARM:
13232 case TEMPLATE_PARM_INDEX:
13233 case POINTER_TYPE:
13234 case REFERENCE_TYPE:
13235 case OFFSET_TYPE:
13236 case FUNCTION_TYPE:
13237 case METHOD_TYPE:
13238 case ARRAY_TYPE:
13239 case TYPENAME_TYPE:
13240 case UNBOUND_CLASS_TEMPLATE:
13241 case TYPEOF_TYPE:
13242 case DECLTYPE_TYPE:
13243 case TYPE_DECL:
13244 return tsubst (t, args, complain, in_decl);
13245
13246 case USING_DECL:
13247 t = DECL_NAME (t);
13248 /* Fall through. */
13249 case IDENTIFIER_NODE:
13250 if (IDENTIFIER_TYPENAME_P (t))
13251 {
13252 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13253 return mangle_conv_op_name_for_type (new_type);
13254 }
13255 else
13256 return t;
13257
13258 case CONSTRUCTOR:
13259 /* This is handled by tsubst_copy_and_build. */
13260 gcc_unreachable ();
13261
13262 case VA_ARG_EXPR:
13263 {
13264 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13265 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13266 return build_x_va_arg (EXPR_LOCATION (t), op0, type);
13267 }
13268
13269 case CLEANUP_POINT_EXPR:
13270 /* We shouldn't have built any of these during initial template
13271 generation. Instead, they should be built during instantiation
13272 in response to the saved STMT_IS_FULL_EXPR_P setting. */
13273 gcc_unreachable ();
13274
13275 case OFFSET_REF:
13276 {
13277 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13278 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13279 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13280 r = build2 (code, type, op0, op1);
13281 PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
13282 mark_used (TREE_OPERAND (r, 1));
13283 return r;
13284 }
13285
13286 case EXPR_PACK_EXPANSION:
13287 error ("invalid use of pack expansion expression");
13288 return error_mark_node;
13289
13290 case NONTYPE_ARGUMENT_PACK:
13291 error ("use %<...%> to expand argument pack");
13292 return error_mark_node;
13293
13294 case VOID_CST:
13295 gcc_checking_assert (t == void_node && VOID_TYPE_P (TREE_TYPE (t)));
13296 return t;
13297
13298 case INTEGER_CST:
13299 case REAL_CST:
13300 case STRING_CST:
13301 case COMPLEX_CST:
13302 {
13303 /* Instantiate any typedefs in the type. */
13304 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13305 r = fold_convert (type, t);
13306 gcc_assert (TREE_CODE (r) == code);
13307 return r;
13308 }
13309
13310 case PTRMEM_CST:
13311 /* These can sometimes show up in a partial instantiation, but never
13312 involve template parms. */
13313 gcc_assert (!uses_template_parms (t));
13314 return t;
13315
13316 default:
13317 /* We shouldn't get here, but keep going if !ENABLE_CHECKING. */
13318 gcc_checking_assert (false);
13319 return t;
13320 }
13321 }
13322
13323 /* Like tsubst_copy, but specifically for OpenMP clauses. */
13324
13325 static tree
13326 tsubst_omp_clauses (tree clauses, bool declare_simd,
13327 tree args, tsubst_flags_t complain, tree in_decl)
13328 {
13329 tree new_clauses = NULL, nc, oc;
13330
13331 for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
13332 {
13333 nc = copy_node (oc);
13334 OMP_CLAUSE_CHAIN (nc) = new_clauses;
13335 new_clauses = nc;
13336
13337 switch (OMP_CLAUSE_CODE (nc))
13338 {
13339 case OMP_CLAUSE_LASTPRIVATE:
13340 if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
13341 {
13342 OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
13343 tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
13344 in_decl, /*integral_constant_expression_p=*/false);
13345 OMP_CLAUSE_LASTPRIVATE_STMT (nc)
13346 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
13347 }
13348 /* FALLTHRU */
13349 case OMP_CLAUSE_PRIVATE:
13350 case OMP_CLAUSE_SHARED:
13351 case OMP_CLAUSE_FIRSTPRIVATE:
13352 case OMP_CLAUSE_COPYIN:
13353 case OMP_CLAUSE_COPYPRIVATE:
13354 case OMP_CLAUSE_IF:
13355 case OMP_CLAUSE_NUM_THREADS:
13356 case OMP_CLAUSE_SCHEDULE:
13357 case OMP_CLAUSE_COLLAPSE:
13358 case OMP_CLAUSE_FINAL:
13359 case OMP_CLAUSE_DEPEND:
13360 case OMP_CLAUSE_FROM:
13361 case OMP_CLAUSE_TO:
13362 case OMP_CLAUSE_UNIFORM:
13363 case OMP_CLAUSE_MAP:
13364 case OMP_CLAUSE_DEVICE:
13365 case OMP_CLAUSE_DIST_SCHEDULE:
13366 case OMP_CLAUSE_NUM_TEAMS:
13367 case OMP_CLAUSE_THREAD_LIMIT:
13368 case OMP_CLAUSE_SAFELEN:
13369 case OMP_CLAUSE_SIMDLEN:
13370 OMP_CLAUSE_OPERAND (nc, 0)
13371 = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
13372 in_decl, /*integral_constant_expression_p=*/false);
13373 break;
13374 case OMP_CLAUSE_REDUCTION:
13375 if (OMP_CLAUSE_REDUCTION_PLACEHOLDER (oc))
13376 {
13377 tree placeholder = OMP_CLAUSE_REDUCTION_PLACEHOLDER (oc);
13378 if (TREE_CODE (placeholder) == SCOPE_REF)
13379 {
13380 tree scope = tsubst (TREE_OPERAND (placeholder, 0), args,
13381 complain, in_decl);
13382 OMP_CLAUSE_REDUCTION_PLACEHOLDER (nc)
13383 = build_qualified_name (NULL_TREE, scope,
13384 TREE_OPERAND (placeholder, 1),
13385 false);
13386 }
13387 else
13388 gcc_assert (identifier_p (placeholder));
13389 }
13390 OMP_CLAUSE_OPERAND (nc, 0)
13391 = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
13392 in_decl, /*integral_constant_expression_p=*/false);
13393 break;
13394 case OMP_CLAUSE_LINEAR:
13395 case OMP_CLAUSE_ALIGNED:
13396 OMP_CLAUSE_OPERAND (nc, 0)
13397 = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
13398 in_decl, /*integral_constant_expression_p=*/false);
13399 OMP_CLAUSE_OPERAND (nc, 1)
13400 = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 1), args, complain,
13401 in_decl, /*integral_constant_expression_p=*/false);
13402 break;
13403
13404 case OMP_CLAUSE_NOWAIT:
13405 case OMP_CLAUSE_ORDERED:
13406 case OMP_CLAUSE_DEFAULT:
13407 case OMP_CLAUSE_UNTIED:
13408 case OMP_CLAUSE_MERGEABLE:
13409 case OMP_CLAUSE_INBRANCH:
13410 case OMP_CLAUSE_NOTINBRANCH:
13411 case OMP_CLAUSE_PROC_BIND:
13412 case OMP_CLAUSE_FOR:
13413 case OMP_CLAUSE_PARALLEL:
13414 case OMP_CLAUSE_SECTIONS:
13415 case OMP_CLAUSE_TASKGROUP:
13416 break;
13417 default:
13418 gcc_unreachable ();
13419 }
13420 }
13421
13422 new_clauses = nreverse (new_clauses);
13423 if (!declare_simd)
13424 new_clauses = finish_omp_clauses (new_clauses);
13425 return new_clauses;
13426 }
13427
13428 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes. */
13429
13430 static tree
13431 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
13432 tree in_decl)
13433 {
13434 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
13435
13436 tree purpose, value, chain;
13437
13438 if (t == NULL)
13439 return t;
13440
13441 if (TREE_CODE (t) != TREE_LIST)
13442 return tsubst_copy_and_build (t, args, complain, in_decl,
13443 /*function_p=*/false,
13444 /*integral_constant_expression_p=*/false);
13445
13446 if (t == void_list_node)
13447 return t;
13448
13449 purpose = TREE_PURPOSE (t);
13450 if (purpose)
13451 purpose = RECUR (purpose);
13452 value = TREE_VALUE (t);
13453 if (value)
13454 {
13455 if (TREE_CODE (value) != LABEL_DECL)
13456 value = RECUR (value);
13457 else
13458 {
13459 value = lookup_label (DECL_NAME (value));
13460 gcc_assert (TREE_CODE (value) == LABEL_DECL);
13461 TREE_USED (value) = 1;
13462 }
13463 }
13464 chain = TREE_CHAIN (t);
13465 if (chain && chain != void_type_node)
13466 chain = RECUR (chain);
13467 return tree_cons (purpose, value, chain);
13468 #undef RECUR
13469 }
13470
13471 /* Substitute one OMP_FOR iterator. */
13472
13473 static void
13474 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
13475 tree condv, tree incrv, tree *clauses,
13476 tree args, tsubst_flags_t complain, tree in_decl,
13477 bool integral_constant_expression_p)
13478 {
13479 #define RECUR(NODE) \
13480 tsubst_expr ((NODE), args, complain, in_decl, \
13481 integral_constant_expression_p)
13482 tree decl, init, cond, incr;
13483
13484 init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
13485 gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
13486 decl = TREE_OPERAND (init, 0);
13487 init = TREE_OPERAND (init, 1);
13488 tree decl_expr = NULL_TREE;
13489 if (init && TREE_CODE (init) == DECL_EXPR)
13490 {
13491 /* We need to jump through some hoops to handle declarations in the
13492 for-init-statement, since we might need to handle auto deduction,
13493 but we need to keep control of initialization. */
13494 decl_expr = init;
13495 init = DECL_INITIAL (DECL_EXPR_DECL (init));
13496 decl = tsubst_decl (decl, args, complain);
13497 }
13498 else
13499 decl = RECUR (decl);
13500 init = RECUR (init);
13501
13502 tree auto_node = type_uses_auto (TREE_TYPE (decl));
13503 if (auto_node && init)
13504 TREE_TYPE (decl)
13505 = do_auto_deduction (TREE_TYPE (decl), init, auto_node);
13506
13507 gcc_assert (!type_dependent_expression_p (decl));
13508
13509 if (!CLASS_TYPE_P (TREE_TYPE (decl)))
13510 {
13511 if (decl_expr)
13512 {
13513 /* Declare the variable, but don't let that initialize it. */
13514 tree init_sav = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
13515 DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL_TREE;
13516 RECUR (decl_expr);
13517 DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init_sav;
13518 }
13519
13520 cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
13521 incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
13522 if (TREE_CODE (incr) == MODIFY_EXPR)
13523 {
13524 tree lhs = RECUR (TREE_OPERAND (incr, 0));
13525 tree rhs = RECUR (TREE_OPERAND (incr, 1));
13526 incr = build_x_modify_expr (EXPR_LOCATION (incr), lhs,
13527 NOP_EXPR, rhs, complain);
13528 }
13529 else
13530 incr = RECUR (incr);
13531 TREE_VEC_ELT (declv, i) = decl;
13532 TREE_VEC_ELT (initv, i) = init;
13533 TREE_VEC_ELT (condv, i) = cond;
13534 TREE_VEC_ELT (incrv, i) = incr;
13535 return;
13536 }
13537
13538 if (decl_expr)
13539 {
13540 /* Declare and initialize the variable. */
13541 RECUR (decl_expr);
13542 init = NULL_TREE;
13543 }
13544 else if (init)
13545 {
13546 tree c;
13547 for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
13548 {
13549 if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
13550 || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
13551 && OMP_CLAUSE_DECL (c) == decl)
13552 break;
13553 else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
13554 && OMP_CLAUSE_DECL (c) == decl)
13555 error ("iteration variable %qD should not be firstprivate", decl);
13556 else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
13557 && OMP_CLAUSE_DECL (c) == decl)
13558 error ("iteration variable %qD should not be reduction", decl);
13559 }
13560 if (c == NULL)
13561 {
13562 c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
13563 OMP_CLAUSE_DECL (c) = decl;
13564 c = finish_omp_clauses (c);
13565 if (c)
13566 {
13567 OMP_CLAUSE_CHAIN (c) = *clauses;
13568 *clauses = c;
13569 }
13570 }
13571 }
13572 cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
13573 if (COMPARISON_CLASS_P (cond))
13574 {
13575 tree op0 = RECUR (TREE_OPERAND (cond, 0));
13576 tree op1 = RECUR (TREE_OPERAND (cond, 1));
13577 cond = build2 (TREE_CODE (cond), boolean_type_node, op0, op1);
13578 }
13579 else
13580 cond = RECUR (cond);
13581 incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
13582 switch (TREE_CODE (incr))
13583 {
13584 case PREINCREMENT_EXPR:
13585 case PREDECREMENT_EXPR:
13586 case POSTINCREMENT_EXPR:
13587 case POSTDECREMENT_EXPR:
13588 incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
13589 RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
13590 break;
13591 case MODIFY_EXPR:
13592 if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
13593 || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
13594 {
13595 tree rhs = TREE_OPERAND (incr, 1);
13596 tree lhs = RECUR (TREE_OPERAND (incr, 0));
13597 tree rhs0 = RECUR (TREE_OPERAND (rhs, 0));
13598 tree rhs1 = RECUR (TREE_OPERAND (rhs, 1));
13599 incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
13600 build2 (TREE_CODE (rhs), TREE_TYPE (decl),
13601 rhs0, rhs1));
13602 }
13603 else
13604 incr = RECUR (incr);
13605 break;
13606 case MODOP_EXPR:
13607 if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
13608 || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
13609 {
13610 tree lhs = RECUR (TREE_OPERAND (incr, 0));
13611 incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
13612 build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
13613 TREE_TYPE (decl), lhs,
13614 RECUR (TREE_OPERAND (incr, 2))));
13615 }
13616 else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
13617 && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
13618 || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
13619 {
13620 tree rhs = TREE_OPERAND (incr, 2);
13621 tree lhs = RECUR (TREE_OPERAND (incr, 0));
13622 tree rhs0 = RECUR (TREE_OPERAND (rhs, 0));
13623 tree rhs1 = RECUR (TREE_OPERAND (rhs, 1));
13624 incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
13625 build2 (TREE_CODE (rhs), TREE_TYPE (decl),
13626 rhs0, rhs1));
13627 }
13628 else
13629 incr = RECUR (incr);
13630 break;
13631 default:
13632 incr = RECUR (incr);
13633 break;
13634 }
13635
13636 TREE_VEC_ELT (declv, i) = decl;
13637 TREE_VEC_ELT (initv, i) = init;
13638 TREE_VEC_ELT (condv, i) = cond;
13639 TREE_VEC_ELT (incrv, i) = incr;
13640 #undef RECUR
13641 }
13642
13643 /* Like tsubst_copy for expressions, etc. but also does semantic
13644 processing. */
13645
13646 static tree
13647 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
13648 bool integral_constant_expression_p)
13649 {
13650 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
13651 #define RECUR(NODE) \
13652 tsubst_expr ((NODE), args, complain, in_decl, \
13653 integral_constant_expression_p)
13654
13655 tree stmt, tmp;
13656 tree r;
13657 location_t loc;
13658
13659 if (t == NULL_TREE || t == error_mark_node)
13660 return t;
13661
13662 loc = input_location;
13663 if (EXPR_HAS_LOCATION (t))
13664 input_location = EXPR_LOCATION (t);
13665 if (STATEMENT_CODE_P (TREE_CODE (t)))
13666 current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
13667
13668 switch (TREE_CODE (t))
13669 {
13670 case STATEMENT_LIST:
13671 {
13672 tree_stmt_iterator i;
13673 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
13674 RECUR (tsi_stmt (i));
13675 break;
13676 }
13677
13678 case CTOR_INITIALIZER:
13679 finish_mem_initializers (tsubst_initializer_list
13680 (TREE_OPERAND (t, 0), args));
13681 break;
13682
13683 case RETURN_EXPR:
13684 finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
13685 break;
13686
13687 case EXPR_STMT:
13688 tmp = RECUR (EXPR_STMT_EXPR (t));
13689 if (EXPR_STMT_STMT_EXPR_RESULT (t))
13690 finish_stmt_expr_expr (tmp, cur_stmt_expr);
13691 else
13692 finish_expr_stmt (tmp);
13693 break;
13694
13695 case USING_STMT:
13696 do_using_directive (USING_STMT_NAMESPACE (t));
13697 break;
13698
13699 case DECL_EXPR:
13700 {
13701 tree decl, pattern_decl;
13702 tree init;
13703
13704 pattern_decl = decl = DECL_EXPR_DECL (t);
13705 if (TREE_CODE (decl) == LABEL_DECL)
13706 finish_label_decl (DECL_NAME (decl));
13707 else if (TREE_CODE (decl) == USING_DECL)
13708 {
13709 tree scope = USING_DECL_SCOPE (decl);
13710 tree name = DECL_NAME (decl);
13711 tree decl;
13712
13713 scope = tsubst (scope, args, complain, in_decl);
13714 decl = lookup_qualified_name (scope, name,
13715 /*is_type_p=*/false,
13716 /*complain=*/false);
13717 if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
13718 qualified_name_lookup_error (scope, name, decl, input_location);
13719 else
13720 do_local_using_decl (decl, scope, name);
13721 }
13722 else if (DECL_PACK_P (decl))
13723 {
13724 /* Don't build up decls for a variadic capture proxy, we'll
13725 instantiate the elements directly as needed. */
13726 break;
13727 }
13728 else
13729 {
13730 init = DECL_INITIAL (decl);
13731 decl = tsubst (decl, args, complain, in_decl);
13732 if (decl != error_mark_node)
13733 {
13734 /* By marking the declaration as instantiated, we avoid
13735 trying to instantiate it. Since instantiate_decl can't
13736 handle local variables, and since we've already done
13737 all that needs to be done, that's the right thing to
13738 do. */
13739 if (VAR_P (decl))
13740 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
13741 if (VAR_P (decl)
13742 && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
13743 /* Anonymous aggregates are a special case. */
13744 finish_anon_union (decl);
13745 else if (is_capture_proxy (DECL_EXPR_DECL (t)))
13746 {
13747 DECL_CONTEXT (decl) = current_function_decl;
13748 if (DECL_NAME (decl) == this_identifier)
13749 {
13750 tree lam = DECL_CONTEXT (current_function_decl);
13751 lam = CLASSTYPE_LAMBDA_EXPR (lam);
13752 LAMBDA_EXPR_THIS_CAPTURE (lam) = decl;
13753 }
13754 insert_capture_proxy (decl);
13755 }
13756 else if (DECL_IMPLICIT_TYPEDEF_P (t))
13757 /* We already did a pushtag. */;
13758 else if (TREE_CODE (decl) == FUNCTION_DECL
13759 && DECL_OMP_DECLARE_REDUCTION_P (decl)
13760 && DECL_FUNCTION_SCOPE_P (pattern_decl))
13761 {
13762 DECL_CONTEXT (decl) = NULL_TREE;
13763 pushdecl (decl);
13764 DECL_CONTEXT (decl) = current_function_decl;
13765 cp_check_omp_declare_reduction (decl);
13766 }
13767 else
13768 {
13769 int const_init = false;
13770 maybe_push_decl (decl);
13771 if (VAR_P (decl)
13772 && DECL_PRETTY_FUNCTION_P (decl))
13773 {
13774 /* For __PRETTY_FUNCTION__ we have to adjust the
13775 initializer. */
13776 const char *const name
13777 = cxx_printable_name (current_function_decl, 2);
13778 init = cp_fname_init (name, &TREE_TYPE (decl));
13779 }
13780 else
13781 init = tsubst_init (init, decl, args, complain, in_decl);
13782
13783 if (VAR_P (decl))
13784 const_init = (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P
13785 (pattern_decl));
13786 cp_finish_decl (decl, init, const_init, NULL_TREE, 0);
13787 }
13788 }
13789 }
13790
13791 break;
13792 }
13793
13794 case FOR_STMT:
13795 stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
13796 RECUR (FOR_INIT_STMT (t));
13797 finish_for_init_stmt (stmt);
13798 tmp = RECUR (FOR_COND (t));
13799 finish_for_cond (tmp, stmt, false);
13800 tmp = RECUR (FOR_EXPR (t));
13801 finish_for_expr (tmp, stmt);
13802 RECUR (FOR_BODY (t));
13803 finish_for_stmt (stmt);
13804 break;
13805
13806 case RANGE_FOR_STMT:
13807 {
13808 tree decl, expr;
13809 stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
13810 decl = RANGE_FOR_DECL (t);
13811 decl = tsubst (decl, args, complain, in_decl);
13812 maybe_push_decl (decl);
13813 expr = RECUR (RANGE_FOR_EXPR (t));
13814 stmt = cp_convert_range_for (stmt, decl, expr, RANGE_FOR_IVDEP (t));
13815 RECUR (RANGE_FOR_BODY (t));
13816 finish_for_stmt (stmt);
13817 }
13818 break;
13819
13820 case WHILE_STMT:
13821 stmt = begin_while_stmt ();
13822 tmp = RECUR (WHILE_COND (t));
13823 finish_while_stmt_cond (tmp, stmt, false);
13824 RECUR (WHILE_BODY (t));
13825 finish_while_stmt (stmt);
13826 break;
13827
13828 case DO_STMT:
13829 stmt = begin_do_stmt ();
13830 RECUR (DO_BODY (t));
13831 finish_do_body (stmt);
13832 tmp = RECUR (DO_COND (t));
13833 finish_do_stmt (tmp, stmt, false);
13834 break;
13835
13836 case IF_STMT:
13837 stmt = begin_if_stmt ();
13838 tmp = RECUR (IF_COND (t));
13839 finish_if_stmt_cond (tmp, stmt);
13840 RECUR (THEN_CLAUSE (t));
13841 finish_then_clause (stmt);
13842
13843 if (ELSE_CLAUSE (t))
13844 {
13845 begin_else_clause (stmt);
13846 RECUR (ELSE_CLAUSE (t));
13847 finish_else_clause (stmt);
13848 }
13849
13850 finish_if_stmt (stmt);
13851 break;
13852
13853 case BIND_EXPR:
13854 if (BIND_EXPR_BODY_BLOCK (t))
13855 stmt = begin_function_body ();
13856 else
13857 stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
13858 ? BCS_TRY_BLOCK : 0);
13859
13860 RECUR (BIND_EXPR_BODY (t));
13861
13862 if (BIND_EXPR_BODY_BLOCK (t))
13863 finish_function_body (stmt);
13864 else
13865 finish_compound_stmt (stmt);
13866 break;
13867
13868 case BREAK_STMT:
13869 finish_break_stmt ();
13870 break;
13871
13872 case CONTINUE_STMT:
13873 finish_continue_stmt ();
13874 break;
13875
13876 case SWITCH_STMT:
13877 stmt = begin_switch_stmt ();
13878 tmp = RECUR (SWITCH_STMT_COND (t));
13879 finish_switch_cond (tmp, stmt);
13880 RECUR (SWITCH_STMT_BODY (t));
13881 finish_switch_stmt (stmt);
13882 break;
13883
13884 case CASE_LABEL_EXPR:
13885 {
13886 tree low = RECUR (CASE_LOW (t));
13887 tree high = RECUR (CASE_HIGH (t));
13888 finish_case_label (EXPR_LOCATION (t), low, high);
13889 }
13890 break;
13891
13892 case LABEL_EXPR:
13893 {
13894 tree decl = LABEL_EXPR_LABEL (t);
13895 tree label;
13896
13897 label = finish_label_stmt (DECL_NAME (decl));
13898 if (DECL_ATTRIBUTES (decl) != NULL_TREE)
13899 cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
13900 }
13901 break;
13902
13903 case GOTO_EXPR:
13904 tmp = GOTO_DESTINATION (t);
13905 if (TREE_CODE (tmp) != LABEL_DECL)
13906 /* Computed goto's must be tsubst'd into. On the other hand,
13907 non-computed gotos must not be; the identifier in question
13908 will have no binding. */
13909 tmp = RECUR (tmp);
13910 else
13911 tmp = DECL_NAME (tmp);
13912 finish_goto_stmt (tmp);
13913 break;
13914
13915 case ASM_EXPR:
13916 {
13917 tree string = RECUR (ASM_STRING (t));
13918 tree outputs = tsubst_copy_asm_operands (ASM_OUTPUTS (t), args,
13919 complain, in_decl);
13920 tree inputs = tsubst_copy_asm_operands (ASM_INPUTS (t), args,
13921 complain, in_decl);
13922 tree clobbers = tsubst_copy_asm_operands (ASM_CLOBBERS (t), args,
13923 complain, in_decl);
13924 tree labels = tsubst_copy_asm_operands (ASM_LABELS (t), args,
13925 complain, in_decl);
13926 tmp = finish_asm_stmt (ASM_VOLATILE_P (t), string, outputs, inputs,
13927 clobbers, labels);
13928 tree asm_expr = tmp;
13929 if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
13930 asm_expr = TREE_OPERAND (asm_expr, 0);
13931 ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
13932 }
13933 break;
13934
13935 case TRY_BLOCK:
13936 if (CLEANUP_P (t))
13937 {
13938 stmt = begin_try_block ();
13939 RECUR (TRY_STMTS (t));
13940 finish_cleanup_try_block (stmt);
13941 finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
13942 }
13943 else
13944 {
13945 tree compound_stmt = NULL_TREE;
13946
13947 if (FN_TRY_BLOCK_P (t))
13948 stmt = begin_function_try_block (&compound_stmt);
13949 else
13950 stmt = begin_try_block ();
13951
13952 RECUR (TRY_STMTS (t));
13953
13954 if (FN_TRY_BLOCK_P (t))
13955 finish_function_try_block (stmt);
13956 else
13957 finish_try_block (stmt);
13958
13959 RECUR (TRY_HANDLERS (t));
13960 if (FN_TRY_BLOCK_P (t))
13961 finish_function_handler_sequence (stmt, compound_stmt);
13962 else
13963 finish_handler_sequence (stmt);
13964 }
13965 break;
13966
13967 case HANDLER:
13968 {
13969 tree decl = HANDLER_PARMS (t);
13970
13971 if (decl)
13972 {
13973 decl = tsubst (decl, args, complain, in_decl);
13974 /* Prevent instantiate_decl from trying to instantiate
13975 this variable. We've already done all that needs to be
13976 done. */
13977 if (decl != error_mark_node)
13978 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
13979 }
13980 stmt = begin_handler ();
13981 finish_handler_parms (decl, stmt);
13982 RECUR (HANDLER_BODY (t));
13983 finish_handler (stmt);
13984 }
13985 break;
13986
13987 case TAG_DEFN:
13988 tmp = tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
13989 if (CLASS_TYPE_P (tmp))
13990 {
13991 /* Local classes are not independent templates; they are
13992 instantiated along with their containing function. And this
13993 way we don't have to deal with pushing out of one local class
13994 to instantiate a member of another local class. */
13995 tree fn;
13996 /* Closures are handled by the LAMBDA_EXPR. */
13997 gcc_assert (!LAMBDA_TYPE_P (TREE_TYPE (t)));
13998 complete_type (tmp);
13999 for (fn = TYPE_METHODS (tmp); fn; fn = DECL_CHAIN (fn))
14000 if (!DECL_ARTIFICIAL (fn))
14001 instantiate_decl (fn, /*defer_ok*/0, /*expl_inst_class*/false);
14002 }
14003 break;
14004
14005 case STATIC_ASSERT:
14006 {
14007 tree condition;
14008
14009 ++c_inhibit_evaluation_warnings;
14010 condition =
14011 tsubst_expr (STATIC_ASSERT_CONDITION (t),
14012 args,
14013 complain, in_decl,
14014 /*integral_constant_expression_p=*/true);
14015 --c_inhibit_evaluation_warnings;
14016
14017 finish_static_assert (condition,
14018 STATIC_ASSERT_MESSAGE (t),
14019 STATIC_ASSERT_SOURCE_LOCATION (t),
14020 /*member_p=*/false);
14021 }
14022 break;
14023
14024 case OMP_PARALLEL:
14025 tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t), false,
14026 args, complain, in_decl);
14027 stmt = begin_omp_parallel ();
14028 RECUR (OMP_PARALLEL_BODY (t));
14029 OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
14030 = OMP_PARALLEL_COMBINED (t);
14031 break;
14032
14033 case OMP_TASK:
14034 tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t), false,
14035 args, complain, in_decl);
14036 stmt = begin_omp_task ();
14037 RECUR (OMP_TASK_BODY (t));
14038 finish_omp_task (tmp, stmt);
14039 break;
14040
14041 case OMP_FOR:
14042 case OMP_SIMD:
14043 case CILK_SIMD:
14044 case CILK_FOR:
14045 case OMP_DISTRIBUTE:
14046 {
14047 tree clauses, body, pre_body;
14048 tree declv = NULL_TREE, initv = NULL_TREE, condv = NULL_TREE;
14049 tree incrv = NULL_TREE;
14050 int i;
14051
14052 clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t), false,
14053 args, complain, in_decl);
14054 if (OMP_FOR_INIT (t) != NULL_TREE)
14055 {
14056 declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
14057 initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
14058 condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
14059 incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
14060 }
14061
14062 stmt = begin_omp_structured_block ();
14063
14064 pre_body = push_stmt_list ();
14065 RECUR (OMP_FOR_PRE_BODY (t));
14066 pre_body = pop_stmt_list (pre_body);
14067
14068 if (OMP_FOR_INIT (t) != NULL_TREE)
14069 for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
14070 tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
14071 &clauses, args, complain, in_decl,
14072 integral_constant_expression_p);
14073
14074 body = push_stmt_list ();
14075 RECUR (OMP_FOR_BODY (t));
14076 body = pop_stmt_list (body);
14077
14078 if (OMP_FOR_INIT (t) != NULL_TREE)
14079 t = finish_omp_for (EXPR_LOCATION (t), TREE_CODE (t), declv, initv,
14080 condv, incrv, body, pre_body, clauses);
14081 else
14082 {
14083 t = make_node (TREE_CODE (t));
14084 TREE_TYPE (t) = void_type_node;
14085 OMP_FOR_BODY (t) = body;
14086 OMP_FOR_PRE_BODY (t) = pre_body;
14087 OMP_FOR_CLAUSES (t) = clauses;
14088 SET_EXPR_LOCATION (t, EXPR_LOCATION (t));
14089 add_stmt (t);
14090 }
14091
14092 add_stmt (finish_omp_structured_block (stmt));
14093 }
14094 break;
14095
14096 case OMP_SECTIONS:
14097 case OMP_SINGLE:
14098 case OMP_TEAMS:
14099 tmp = tsubst_omp_clauses (OMP_CLAUSES (t), false,
14100 args, complain, in_decl);
14101 stmt = push_stmt_list ();
14102 RECUR (OMP_BODY (t));
14103 stmt = pop_stmt_list (stmt);
14104
14105 t = copy_node (t);
14106 OMP_BODY (t) = stmt;
14107 OMP_CLAUSES (t) = tmp;
14108 add_stmt (t);
14109 break;
14110
14111 case OMP_TARGET_DATA:
14112 case OMP_TARGET:
14113 tmp = tsubst_omp_clauses (OMP_CLAUSES (t), false,
14114 args, complain, in_decl);
14115 keep_next_level (true);
14116 stmt = begin_omp_structured_block ();
14117
14118 RECUR (OMP_BODY (t));
14119 stmt = finish_omp_structured_block (stmt);
14120
14121 t = copy_node (t);
14122 OMP_BODY (t) = stmt;
14123 OMP_CLAUSES (t) = tmp;
14124 add_stmt (t);
14125 break;
14126
14127 case OMP_TARGET_UPDATE:
14128 tmp = tsubst_omp_clauses (OMP_TARGET_UPDATE_CLAUSES (t), false,
14129 args, complain, in_decl);
14130 t = copy_node (t);
14131 OMP_CLAUSES (t) = tmp;
14132 add_stmt (t);
14133 break;
14134
14135 case OMP_SECTION:
14136 case OMP_CRITICAL:
14137 case OMP_MASTER:
14138 case OMP_TASKGROUP:
14139 case OMP_ORDERED:
14140 stmt = push_stmt_list ();
14141 RECUR (OMP_BODY (t));
14142 stmt = pop_stmt_list (stmt);
14143
14144 t = copy_node (t);
14145 OMP_BODY (t) = stmt;
14146 add_stmt (t);
14147 break;
14148
14149 case OMP_ATOMIC:
14150 gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
14151 if (TREE_CODE (TREE_OPERAND (t, 1)) != MODIFY_EXPR)
14152 {
14153 tree op1 = TREE_OPERAND (t, 1);
14154 tree rhs1 = NULL_TREE;
14155 tree lhs, rhs;
14156 if (TREE_CODE (op1) == COMPOUND_EXPR)
14157 {
14158 rhs1 = RECUR (TREE_OPERAND (op1, 0));
14159 op1 = TREE_OPERAND (op1, 1);
14160 }
14161 lhs = RECUR (TREE_OPERAND (op1, 0));
14162 rhs = RECUR (TREE_OPERAND (op1, 1));
14163 finish_omp_atomic (OMP_ATOMIC, TREE_CODE (op1), lhs, rhs,
14164 NULL_TREE, NULL_TREE, rhs1,
14165 OMP_ATOMIC_SEQ_CST (t));
14166 }
14167 else
14168 {
14169 tree op1 = TREE_OPERAND (t, 1);
14170 tree v = NULL_TREE, lhs, rhs = NULL_TREE, lhs1 = NULL_TREE;
14171 tree rhs1 = NULL_TREE;
14172 enum tree_code code = TREE_CODE (TREE_OPERAND (op1, 1));
14173 enum tree_code opcode = NOP_EXPR;
14174 if (code == OMP_ATOMIC_READ)
14175 {
14176 v = RECUR (TREE_OPERAND (op1, 0));
14177 lhs = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
14178 }
14179 else if (code == OMP_ATOMIC_CAPTURE_OLD
14180 || code == OMP_ATOMIC_CAPTURE_NEW)
14181 {
14182 tree op11 = TREE_OPERAND (TREE_OPERAND (op1, 1), 1);
14183 v = RECUR (TREE_OPERAND (op1, 0));
14184 lhs1 = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
14185 if (TREE_CODE (op11) == COMPOUND_EXPR)
14186 {
14187 rhs1 = RECUR (TREE_OPERAND (op11, 0));
14188 op11 = TREE_OPERAND (op11, 1);
14189 }
14190 lhs = RECUR (TREE_OPERAND (op11, 0));
14191 rhs = RECUR (TREE_OPERAND (op11, 1));
14192 opcode = TREE_CODE (op11);
14193 if (opcode == MODIFY_EXPR)
14194 opcode = NOP_EXPR;
14195 }
14196 else
14197 {
14198 code = OMP_ATOMIC;
14199 lhs = RECUR (TREE_OPERAND (op1, 0));
14200 rhs = RECUR (TREE_OPERAND (op1, 1));
14201 }
14202 finish_omp_atomic (code, opcode, lhs, rhs, v, lhs1, rhs1,
14203 OMP_ATOMIC_SEQ_CST (t));
14204 }
14205 break;
14206
14207 case TRANSACTION_EXPR:
14208 {
14209 int flags = 0;
14210 flags |= (TRANSACTION_EXPR_OUTER (t) ? TM_STMT_ATTR_OUTER : 0);
14211 flags |= (TRANSACTION_EXPR_RELAXED (t) ? TM_STMT_ATTR_RELAXED : 0);
14212
14213 if (TRANSACTION_EXPR_IS_STMT (t))
14214 {
14215 tree body = TRANSACTION_EXPR_BODY (t);
14216 tree noex = NULL_TREE;
14217 if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
14218 {
14219 noex = MUST_NOT_THROW_COND (body);
14220 if (noex == NULL_TREE)
14221 noex = boolean_true_node;
14222 body = TREE_OPERAND (body, 0);
14223 }
14224 stmt = begin_transaction_stmt (input_location, NULL, flags);
14225 RECUR (body);
14226 finish_transaction_stmt (stmt, NULL, flags, RECUR (noex));
14227 }
14228 else
14229 {
14230 stmt = build_transaction_expr (EXPR_LOCATION (t),
14231 RECUR (TRANSACTION_EXPR_BODY (t)),
14232 flags, NULL_TREE);
14233 RETURN (stmt);
14234 }
14235 }
14236 break;
14237
14238 case MUST_NOT_THROW_EXPR:
14239 {
14240 tree op0 = RECUR (TREE_OPERAND (t, 0));
14241 tree cond = RECUR (MUST_NOT_THROW_COND (t));
14242 RETURN (build_must_not_throw_expr (op0, cond));
14243 }
14244
14245 case EXPR_PACK_EXPANSION:
14246 error ("invalid use of pack expansion expression");
14247 RETURN (error_mark_node);
14248
14249 case NONTYPE_ARGUMENT_PACK:
14250 error ("use %<...%> to expand argument pack");
14251 RETURN (error_mark_node);
14252
14253 case CILK_SPAWN_STMT:
14254 cfun->calls_cilk_spawn = 1;
14255 RETURN (build_cilk_spawn (EXPR_LOCATION (t), RECUR (CILK_SPAWN_FN (t))));
14256
14257 case CILK_SYNC_STMT:
14258 RETURN (build_cilk_sync ());
14259
14260 case COMPOUND_EXPR:
14261 tmp = RECUR (TREE_OPERAND (t, 0));
14262 if (tmp == NULL_TREE)
14263 /* If the first operand was a statement, we're done with it. */
14264 RETURN (RECUR (TREE_OPERAND (t, 1)));
14265 RETURN (build_x_compound_expr (EXPR_LOCATION (t), tmp,
14266 RECUR (TREE_OPERAND (t, 1)),
14267 complain));
14268
14269 case ANNOTATE_EXPR:
14270 tmp = RECUR (TREE_OPERAND (t, 0));
14271 RETURN (build2_loc (EXPR_LOCATION (t), ANNOTATE_EXPR,
14272 TREE_TYPE (tmp), tmp, RECUR (TREE_OPERAND (t, 1))));
14273
14274 default:
14275 gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
14276
14277 RETURN (tsubst_copy_and_build (t, args, complain, in_decl,
14278 /*function_p=*/false,
14279 integral_constant_expression_p));
14280 }
14281
14282 RETURN (NULL_TREE);
14283 out:
14284 input_location = loc;
14285 return r;
14286 #undef RECUR
14287 #undef RETURN
14288 }
14289
14290 /* Instantiate the special body of the artificial DECL_OMP_DECLARE_REDUCTION
14291 function. For description of the body see comment above
14292 cp_parser_omp_declare_reduction_exprs. */
14293
14294 static void
14295 tsubst_omp_udr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
14296 {
14297 if (t == NULL_TREE || t == error_mark_node)
14298 return;
14299
14300 gcc_assert (TREE_CODE (t) == STATEMENT_LIST);
14301
14302 tree_stmt_iterator tsi;
14303 int i;
14304 tree stmts[7];
14305 memset (stmts, 0, sizeof stmts);
14306 for (i = 0, tsi = tsi_start (t);
14307 i < 7 && !tsi_end_p (tsi);
14308 i++, tsi_next (&tsi))
14309 stmts[i] = tsi_stmt (tsi);
14310 gcc_assert (tsi_end_p (tsi));
14311
14312 if (i >= 3)
14313 {
14314 gcc_assert (TREE_CODE (stmts[0]) == DECL_EXPR
14315 && TREE_CODE (stmts[1]) == DECL_EXPR);
14316 tree omp_out = tsubst (DECL_EXPR_DECL (stmts[0]),
14317 args, complain, in_decl);
14318 tree omp_in = tsubst (DECL_EXPR_DECL (stmts[1]),
14319 args, complain, in_decl);
14320 DECL_CONTEXT (omp_out) = current_function_decl;
14321 DECL_CONTEXT (omp_in) = current_function_decl;
14322 keep_next_level (true);
14323 tree block = begin_omp_structured_block ();
14324 tsubst_expr (stmts[2], args, complain, in_decl, false);
14325 block = finish_omp_structured_block (block);
14326 block = maybe_cleanup_point_expr_void (block);
14327 add_decl_expr (omp_out);
14328 if (TREE_NO_WARNING (DECL_EXPR_DECL (stmts[0])))
14329 TREE_NO_WARNING (omp_out) = 1;
14330 add_decl_expr (omp_in);
14331 finish_expr_stmt (block);
14332 }
14333 if (i >= 6)
14334 {
14335 gcc_assert (TREE_CODE (stmts[3]) == DECL_EXPR
14336 && TREE_CODE (stmts[4]) == DECL_EXPR);
14337 tree omp_priv = tsubst (DECL_EXPR_DECL (stmts[3]),
14338 args, complain, in_decl);
14339 tree omp_orig = tsubst (DECL_EXPR_DECL (stmts[4]),
14340 args, complain, in_decl);
14341 DECL_CONTEXT (omp_priv) = current_function_decl;
14342 DECL_CONTEXT (omp_orig) = current_function_decl;
14343 keep_next_level (true);
14344 tree block = begin_omp_structured_block ();
14345 tsubst_expr (stmts[5], args, complain, in_decl, false);
14346 block = finish_omp_structured_block (block);
14347 block = maybe_cleanup_point_expr_void (block);
14348 cp_walk_tree (&block, cp_remove_omp_priv_cleanup_stmt, omp_priv, NULL);
14349 add_decl_expr (omp_priv);
14350 add_decl_expr (omp_orig);
14351 finish_expr_stmt (block);
14352 if (i == 7)
14353 add_decl_expr (omp_orig);
14354 }
14355 }
14356
14357 /* T is a postfix-expression that is not being used in a function
14358 call. Return the substituted version of T. */
14359
14360 static tree
14361 tsubst_non_call_postfix_expression (tree t, tree args,
14362 tsubst_flags_t complain,
14363 tree in_decl)
14364 {
14365 if (TREE_CODE (t) == SCOPE_REF)
14366 t = tsubst_qualified_id (t, args, complain, in_decl,
14367 /*done=*/false, /*address_p=*/false);
14368 else
14369 t = tsubst_copy_and_build (t, args, complain, in_decl,
14370 /*function_p=*/false,
14371 /*integral_constant_expression_p=*/false);
14372
14373 return t;
14374 }
14375
14376 /* Sentinel to disable certain warnings during template substitution. */
14377
14378 struct warning_sentinel {
14379 int &flag;
14380 int val;
14381 warning_sentinel(int& flag, bool suppress=true)
14382 : flag(flag), val(flag) { if (suppress) flag = 0; }
14383 ~warning_sentinel() { flag = val; }
14384 };
14385
14386 /* Like tsubst but deals with expressions and performs semantic
14387 analysis. FUNCTION_P is true if T is the "F" in "F (ARGS)". */
14388
14389 tree
14390 tsubst_copy_and_build (tree t,
14391 tree args,
14392 tsubst_flags_t complain,
14393 tree in_decl,
14394 bool function_p,
14395 bool integral_constant_expression_p)
14396 {
14397 #define RETURN(EXP) do { retval = (EXP); goto out; } while(0)
14398 #define RECUR(NODE) \
14399 tsubst_copy_and_build (NODE, args, complain, in_decl, \
14400 /*function_p=*/false, \
14401 integral_constant_expression_p)
14402
14403 tree retval, op1;
14404 location_t loc;
14405
14406 if (t == NULL_TREE || t == error_mark_node)
14407 return t;
14408
14409 loc = input_location;
14410 if (EXPR_HAS_LOCATION (t))
14411 input_location = EXPR_LOCATION (t);
14412
14413 /* N3276 decltype magic only applies to calls at the top level or on the
14414 right side of a comma. */
14415 tsubst_flags_t decltype_flag = (complain & tf_decltype);
14416 complain &= ~tf_decltype;
14417
14418 switch (TREE_CODE (t))
14419 {
14420 case USING_DECL:
14421 t = DECL_NAME (t);
14422 /* Fall through. */
14423 case IDENTIFIER_NODE:
14424 {
14425 tree decl;
14426 cp_id_kind idk;
14427 bool non_integral_constant_expression_p;
14428 const char *error_msg;
14429
14430 if (IDENTIFIER_TYPENAME_P (t))
14431 {
14432 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14433 t = mangle_conv_op_name_for_type (new_type);
14434 }
14435
14436 /* Look up the name. */
14437 decl = lookup_name (t);
14438
14439 /* By convention, expressions use ERROR_MARK_NODE to indicate
14440 failure, not NULL_TREE. */
14441 if (decl == NULL_TREE)
14442 decl = error_mark_node;
14443
14444 decl = finish_id_expression (t, decl, NULL_TREE,
14445 &idk,
14446 integral_constant_expression_p,
14447 /*allow_non_integral_constant_expression_p=*/(cxx_dialect >= cxx11),
14448 &non_integral_constant_expression_p,
14449 /*template_p=*/false,
14450 /*done=*/true,
14451 /*address_p=*/false,
14452 /*template_arg_p=*/false,
14453 &error_msg,
14454 input_location);
14455 if (error_msg)
14456 error (error_msg);
14457 if (!function_p && identifier_p (decl))
14458 {
14459 if (complain & tf_error)
14460 unqualified_name_lookup_error (decl);
14461 decl = error_mark_node;
14462 }
14463 RETURN (decl);
14464 }
14465
14466 case TEMPLATE_ID_EXPR:
14467 {
14468 tree object;
14469 tree templ = RECUR (TREE_OPERAND (t, 0));
14470 tree targs = TREE_OPERAND (t, 1);
14471
14472 if (targs)
14473 targs = tsubst_template_args (targs, args, complain, in_decl);
14474
14475 if (TREE_CODE (templ) == COMPONENT_REF)
14476 {
14477 object = TREE_OPERAND (templ, 0);
14478 templ = TREE_OPERAND (templ, 1);
14479 }
14480 else
14481 object = NULL_TREE;
14482 templ = lookup_template_function (templ, targs);
14483
14484 if (object)
14485 RETURN (build3 (COMPONENT_REF, TREE_TYPE (templ),
14486 object, templ, NULL_TREE));
14487 else
14488 RETURN (baselink_for_fns (templ));
14489 }
14490
14491 case INDIRECT_REF:
14492 {
14493 tree r = RECUR (TREE_OPERAND (t, 0));
14494
14495 if (REFERENCE_REF_P (t))
14496 {
14497 /* A type conversion to reference type will be enclosed in
14498 such an indirect ref, but the substitution of the cast
14499 will have also added such an indirect ref. */
14500 if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
14501 r = convert_from_reference (r);
14502 }
14503 else
14504 r = build_x_indirect_ref (input_location, r, RO_UNARY_STAR,
14505 complain|decltype_flag);
14506 RETURN (r);
14507 }
14508
14509 case NOP_EXPR:
14510 {
14511 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14512 tree op0 = RECUR (TREE_OPERAND (t, 0));
14513 RETURN (build_nop (type, op0));
14514 }
14515
14516 case IMPLICIT_CONV_EXPR:
14517 {
14518 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14519 tree expr = RECUR (TREE_OPERAND (t, 0));
14520 int flags = LOOKUP_IMPLICIT;
14521 if (IMPLICIT_CONV_EXPR_DIRECT_INIT (t))
14522 flags = LOOKUP_NORMAL;
14523 RETURN (perform_implicit_conversion_flags (type, expr, complain,
14524 flags));
14525 }
14526
14527 case CONVERT_EXPR:
14528 {
14529 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14530 tree op0 = RECUR (TREE_OPERAND (t, 0));
14531 RETURN (build1 (CONVERT_EXPR, type, op0));
14532 }
14533
14534 case CAST_EXPR:
14535 case REINTERPRET_CAST_EXPR:
14536 case CONST_CAST_EXPR:
14537 case DYNAMIC_CAST_EXPR:
14538 case STATIC_CAST_EXPR:
14539 {
14540 tree type;
14541 tree op, r = NULL_TREE;
14542
14543 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14544 if (integral_constant_expression_p
14545 && !cast_valid_in_integral_constant_expression_p (type))
14546 {
14547 if (complain & tf_error)
14548 error ("a cast to a type other than an integral or "
14549 "enumeration type cannot appear in a constant-expression");
14550 RETURN (error_mark_node);
14551 }
14552
14553 op = RECUR (TREE_OPERAND (t, 0));
14554
14555 warning_sentinel s(warn_useless_cast);
14556 switch (TREE_CODE (t))
14557 {
14558 case CAST_EXPR:
14559 r = build_functional_cast (type, op, complain);
14560 break;
14561 case REINTERPRET_CAST_EXPR:
14562 r = build_reinterpret_cast (type, op, complain);
14563 break;
14564 case CONST_CAST_EXPR:
14565 r = build_const_cast (type, op, complain);
14566 break;
14567 case DYNAMIC_CAST_EXPR:
14568 r = build_dynamic_cast (type, op, complain);
14569 break;
14570 case STATIC_CAST_EXPR:
14571 r = build_static_cast (type, op, complain);
14572 break;
14573 default:
14574 gcc_unreachable ();
14575 }
14576
14577 RETURN (r);
14578 }
14579
14580 case POSTDECREMENT_EXPR:
14581 case POSTINCREMENT_EXPR:
14582 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
14583 args, complain, in_decl);
14584 RETURN (build_x_unary_op (input_location, TREE_CODE (t), op1,
14585 complain|decltype_flag));
14586
14587 case PREDECREMENT_EXPR:
14588 case PREINCREMENT_EXPR:
14589 case NEGATE_EXPR:
14590 case BIT_NOT_EXPR:
14591 case ABS_EXPR:
14592 case TRUTH_NOT_EXPR:
14593 case UNARY_PLUS_EXPR: /* Unary + */
14594 case REALPART_EXPR:
14595 case IMAGPART_EXPR:
14596 RETURN (build_x_unary_op (input_location, TREE_CODE (t),
14597 RECUR (TREE_OPERAND (t, 0)),
14598 complain|decltype_flag));
14599
14600 case FIX_TRUNC_EXPR:
14601 RETURN (cp_build_unary_op (FIX_TRUNC_EXPR, RECUR (TREE_OPERAND (t, 0)),
14602 0, complain));
14603
14604 case ADDR_EXPR:
14605 op1 = TREE_OPERAND (t, 0);
14606 if (TREE_CODE (op1) == LABEL_DECL)
14607 RETURN (finish_label_address_expr (DECL_NAME (op1),
14608 EXPR_LOCATION (op1)));
14609 if (TREE_CODE (op1) == SCOPE_REF)
14610 op1 = tsubst_qualified_id (op1, args, complain, in_decl,
14611 /*done=*/true, /*address_p=*/true);
14612 else
14613 op1 = tsubst_non_call_postfix_expression (op1, args, complain,
14614 in_decl);
14615 RETURN (build_x_unary_op (input_location, ADDR_EXPR, op1,
14616 complain|decltype_flag));
14617
14618 case PLUS_EXPR:
14619 case MINUS_EXPR:
14620 case MULT_EXPR:
14621 case TRUNC_DIV_EXPR:
14622 case CEIL_DIV_EXPR:
14623 case FLOOR_DIV_EXPR:
14624 case ROUND_DIV_EXPR:
14625 case EXACT_DIV_EXPR:
14626 case BIT_AND_EXPR:
14627 case BIT_IOR_EXPR:
14628 case BIT_XOR_EXPR:
14629 case TRUNC_MOD_EXPR:
14630 case FLOOR_MOD_EXPR:
14631 case TRUTH_ANDIF_EXPR:
14632 case TRUTH_ORIF_EXPR:
14633 case TRUTH_AND_EXPR:
14634 case TRUTH_OR_EXPR:
14635 case RSHIFT_EXPR:
14636 case LSHIFT_EXPR:
14637 case RROTATE_EXPR:
14638 case LROTATE_EXPR:
14639 case EQ_EXPR:
14640 case NE_EXPR:
14641 case MAX_EXPR:
14642 case MIN_EXPR:
14643 case LE_EXPR:
14644 case GE_EXPR:
14645 case LT_EXPR:
14646 case GT_EXPR:
14647 case MEMBER_REF:
14648 case DOTSTAR_EXPR:
14649 {
14650 warning_sentinel s1(warn_type_limits);
14651 warning_sentinel s2(warn_div_by_zero);
14652 tree op0 = RECUR (TREE_OPERAND (t, 0));
14653 tree op1 = RECUR (TREE_OPERAND (t, 1));
14654 tree r = build_x_binary_op
14655 (input_location, TREE_CODE (t),
14656 op0,
14657 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
14658 ? ERROR_MARK
14659 : TREE_CODE (TREE_OPERAND (t, 0))),
14660 op1,
14661 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
14662 ? ERROR_MARK
14663 : TREE_CODE (TREE_OPERAND (t, 1))),
14664 /*overload=*/NULL,
14665 complain|decltype_flag);
14666 if (EXPR_P (r) && TREE_NO_WARNING (t))
14667 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
14668
14669 RETURN (r);
14670 }
14671
14672 case POINTER_PLUS_EXPR:
14673 {
14674 tree op0 = RECUR (TREE_OPERAND (t, 0));
14675 tree op1 = RECUR (TREE_OPERAND (t, 1));
14676 return fold_build_pointer_plus (op0, op1);
14677 }
14678
14679 case SCOPE_REF:
14680 RETURN (tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
14681 /*address_p=*/false));
14682 case ARRAY_REF:
14683 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
14684 args, complain, in_decl);
14685 RETURN (build_x_array_ref (EXPR_LOCATION (t), op1,
14686 RECUR (TREE_OPERAND (t, 1)),
14687 complain|decltype_flag));
14688
14689 case ARRAY_NOTATION_REF:
14690 {
14691 tree start_index, length, stride;
14692 op1 = tsubst_non_call_postfix_expression (ARRAY_NOTATION_ARRAY (t),
14693 args, complain, in_decl);
14694 start_index = RECUR (ARRAY_NOTATION_START (t));
14695 length = RECUR (ARRAY_NOTATION_LENGTH (t));
14696 stride = RECUR (ARRAY_NOTATION_STRIDE (t));
14697 RETURN (build_array_notation_ref (EXPR_LOCATION (t), op1, start_index,
14698 length, stride, TREE_TYPE (op1)));
14699 }
14700 case SIZEOF_EXPR:
14701 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
14702 RETURN (tsubst_copy (t, args, complain, in_decl));
14703 /* Fall through */
14704
14705 case ALIGNOF_EXPR:
14706 {
14707 tree r;
14708
14709 op1 = TREE_OPERAND (t, 0);
14710 if (TREE_CODE (t) == SIZEOF_EXPR && SIZEOF_EXPR_TYPE_P (t))
14711 op1 = TREE_TYPE (op1);
14712 if (!args)
14713 {
14714 /* When there are no ARGS, we are trying to evaluate a
14715 non-dependent expression from the parser. Trying to do
14716 the substitutions may not work. */
14717 if (!TYPE_P (op1))
14718 op1 = TREE_TYPE (op1);
14719 }
14720 else
14721 {
14722 ++cp_unevaluated_operand;
14723 ++c_inhibit_evaluation_warnings;
14724 if (TYPE_P (op1))
14725 op1 = tsubst (op1, args, complain, in_decl);
14726 else
14727 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
14728 /*function_p=*/false,
14729 /*integral_constant_expression_p=*/
14730 false);
14731 --cp_unevaluated_operand;
14732 --c_inhibit_evaluation_warnings;
14733 }
14734 if (TYPE_P (op1))
14735 r = cxx_sizeof_or_alignof_type (op1, TREE_CODE (t),
14736 complain & tf_error);
14737 else
14738 r = cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t),
14739 complain & tf_error);
14740 if (TREE_CODE (t) == SIZEOF_EXPR && r != error_mark_node)
14741 {
14742 if (TREE_CODE (r) != SIZEOF_EXPR || TYPE_P (op1))
14743 {
14744 if (!processing_template_decl && TYPE_P (op1))
14745 {
14746 r = build_min (SIZEOF_EXPR, size_type_node,
14747 build1 (NOP_EXPR, op1, error_mark_node));
14748 SIZEOF_EXPR_TYPE_P (r) = 1;
14749 }
14750 else
14751 r = build_min (SIZEOF_EXPR, size_type_node, op1);
14752 TREE_SIDE_EFFECTS (r) = 0;
14753 TREE_READONLY (r) = 1;
14754 }
14755 SET_EXPR_LOCATION (r, EXPR_LOCATION (t));
14756 }
14757 RETURN (r);
14758 }
14759
14760 case AT_ENCODE_EXPR:
14761 {
14762 op1 = TREE_OPERAND (t, 0);
14763 ++cp_unevaluated_operand;
14764 ++c_inhibit_evaluation_warnings;
14765 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
14766 /*function_p=*/false,
14767 /*integral_constant_expression_p=*/false);
14768 --cp_unevaluated_operand;
14769 --c_inhibit_evaluation_warnings;
14770 RETURN (objc_build_encode_expr (op1));
14771 }
14772
14773 case NOEXCEPT_EXPR:
14774 op1 = TREE_OPERAND (t, 0);
14775 ++cp_unevaluated_operand;
14776 ++c_inhibit_evaluation_warnings;
14777 ++cp_noexcept_operand;
14778 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
14779 /*function_p=*/false,
14780 /*integral_constant_expression_p=*/false);
14781 --cp_unevaluated_operand;
14782 --c_inhibit_evaluation_warnings;
14783 --cp_noexcept_operand;
14784 RETURN (finish_noexcept_expr (op1, complain));
14785
14786 case MODOP_EXPR:
14787 {
14788 warning_sentinel s(warn_div_by_zero);
14789 tree lhs = RECUR (TREE_OPERAND (t, 0));
14790 tree rhs = RECUR (TREE_OPERAND (t, 2));
14791 tree r = build_x_modify_expr
14792 (EXPR_LOCATION (t), lhs, TREE_CODE (TREE_OPERAND (t, 1)), rhs,
14793 complain|decltype_flag);
14794 /* TREE_NO_WARNING must be set if either the expression was
14795 parenthesized or it uses an operator such as >>= rather
14796 than plain assignment. In the former case, it was already
14797 set and must be copied. In the latter case,
14798 build_x_modify_expr sets it and it must not be reset
14799 here. */
14800 if (TREE_NO_WARNING (t))
14801 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
14802
14803 RETURN (r);
14804 }
14805
14806 case ARROW_EXPR:
14807 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
14808 args, complain, in_decl);
14809 /* Remember that there was a reference to this entity. */
14810 if (DECL_P (op1))
14811 mark_used (op1);
14812 RETURN (build_x_arrow (input_location, op1, complain));
14813
14814 case NEW_EXPR:
14815 {
14816 tree placement = RECUR (TREE_OPERAND (t, 0));
14817 tree init = RECUR (TREE_OPERAND (t, 3));
14818 vec<tree, va_gc> *placement_vec;
14819 vec<tree, va_gc> *init_vec;
14820 tree ret;
14821
14822 if (placement == NULL_TREE)
14823 placement_vec = NULL;
14824 else
14825 {
14826 placement_vec = make_tree_vector ();
14827 for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
14828 vec_safe_push (placement_vec, TREE_VALUE (placement));
14829 }
14830
14831 /* If there was an initializer in the original tree, but it
14832 instantiated to an empty list, then we should pass a
14833 non-NULL empty vector to tell build_new that it was an
14834 empty initializer() rather than no initializer. This can
14835 only happen when the initializer is a pack expansion whose
14836 parameter packs are of length zero. */
14837 if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
14838 init_vec = NULL;
14839 else
14840 {
14841 init_vec = make_tree_vector ();
14842 if (init == void_node)
14843 gcc_assert (init_vec != NULL);
14844 else
14845 {
14846 for (; init != NULL_TREE; init = TREE_CHAIN (init))
14847 vec_safe_push (init_vec, TREE_VALUE (init));
14848 }
14849 }
14850
14851 tree op1 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
14852 tree op2 = RECUR (TREE_OPERAND (t, 2));
14853 ret = build_new (&placement_vec, op1, op2, &init_vec,
14854 NEW_EXPR_USE_GLOBAL (t),
14855 complain);
14856
14857 if (placement_vec != NULL)
14858 release_tree_vector (placement_vec);
14859 if (init_vec != NULL)
14860 release_tree_vector (init_vec);
14861
14862 RETURN (ret);
14863 }
14864
14865 case DELETE_EXPR:
14866 {
14867 tree op0 = RECUR (TREE_OPERAND (t, 0));
14868 tree op1 = RECUR (TREE_OPERAND (t, 1));
14869 RETURN (delete_sanity (op0, op1,
14870 DELETE_EXPR_USE_VEC (t),
14871 DELETE_EXPR_USE_GLOBAL (t),
14872 complain));
14873 }
14874
14875 case COMPOUND_EXPR:
14876 {
14877 tree op0 = tsubst_copy_and_build (TREE_OPERAND (t, 0), args,
14878 complain & ~tf_decltype, in_decl,
14879 /*function_p=*/false,
14880 integral_constant_expression_p);
14881 RETURN (build_x_compound_expr (EXPR_LOCATION (t),
14882 op0,
14883 RECUR (TREE_OPERAND (t, 1)),
14884 complain|decltype_flag));
14885 }
14886
14887 case CALL_EXPR:
14888 {
14889 tree function;
14890 vec<tree, va_gc> *call_args;
14891 unsigned int nargs, i;
14892 bool qualified_p;
14893 bool koenig_p;
14894 tree ret;
14895
14896 function = CALL_EXPR_FN (t);
14897 /* When we parsed the expression, we determined whether or
14898 not Koenig lookup should be performed. */
14899 koenig_p = KOENIG_LOOKUP_P (t);
14900 if (TREE_CODE (function) == SCOPE_REF)
14901 {
14902 qualified_p = true;
14903 function = tsubst_qualified_id (function, args, complain, in_decl,
14904 /*done=*/false,
14905 /*address_p=*/false);
14906 }
14907 else if (koenig_p && identifier_p (function))
14908 {
14909 /* Do nothing; calling tsubst_copy_and_build on an identifier
14910 would incorrectly perform unqualified lookup again.
14911
14912 Note that we can also have an IDENTIFIER_NODE if the earlier
14913 unqualified lookup found a member function; in that case
14914 koenig_p will be false and we do want to do the lookup
14915 again to find the instantiated member function.
14916
14917 FIXME but doing that causes c++/15272, so we need to stop
14918 using IDENTIFIER_NODE in that situation. */
14919 qualified_p = false;
14920 }
14921 else
14922 {
14923 if (TREE_CODE (function) == COMPONENT_REF)
14924 {
14925 tree op = TREE_OPERAND (function, 1);
14926
14927 qualified_p = (TREE_CODE (op) == SCOPE_REF
14928 || (BASELINK_P (op)
14929 && BASELINK_QUALIFIED_P (op)));
14930 }
14931 else
14932 qualified_p = false;
14933
14934 if (TREE_CODE (function) == ADDR_EXPR
14935 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
14936 /* Avoid error about taking the address of a constructor. */
14937 function = TREE_OPERAND (function, 0);
14938
14939 function = tsubst_copy_and_build (function, args, complain,
14940 in_decl,
14941 !qualified_p,
14942 integral_constant_expression_p);
14943
14944 if (BASELINK_P (function))
14945 qualified_p = true;
14946 }
14947
14948 nargs = call_expr_nargs (t);
14949 call_args = make_tree_vector ();
14950 for (i = 0; i < nargs; ++i)
14951 {
14952 tree arg = CALL_EXPR_ARG (t, i);
14953
14954 if (!PACK_EXPANSION_P (arg))
14955 vec_safe_push (call_args, RECUR (CALL_EXPR_ARG (t, i)));
14956 else
14957 {
14958 /* Expand the pack expansion and push each entry onto
14959 CALL_ARGS. */
14960 arg = tsubst_pack_expansion (arg, args, complain, in_decl);
14961 if (TREE_CODE (arg) == TREE_VEC)
14962 {
14963 unsigned int len, j;
14964
14965 len = TREE_VEC_LENGTH (arg);
14966 for (j = 0; j < len; ++j)
14967 {
14968 tree value = TREE_VEC_ELT (arg, j);
14969 if (value != NULL_TREE)
14970 value = convert_from_reference (value);
14971 vec_safe_push (call_args, value);
14972 }
14973 }
14974 else
14975 {
14976 /* A partial substitution. Add one entry. */
14977 vec_safe_push (call_args, arg);
14978 }
14979 }
14980 }
14981
14982 /* We do not perform argument-dependent lookup if normal
14983 lookup finds a non-function, in accordance with the
14984 expected resolution of DR 218. */
14985 if (koenig_p
14986 && ((is_overloaded_fn (function)
14987 /* If lookup found a member function, the Koenig lookup is
14988 not appropriate, even if an unqualified-name was used
14989 to denote the function. */
14990 && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
14991 || identifier_p (function))
14992 /* Only do this when substitution turns a dependent call
14993 into a non-dependent call. */
14994 && type_dependent_expression_p_push (t)
14995 && !any_type_dependent_arguments_p (call_args))
14996 function = perform_koenig_lookup (function, call_args, tf_none);
14997
14998 if (identifier_p (function)
14999 && !any_type_dependent_arguments_p (call_args))
15000 {
15001 if (koenig_p && (complain & tf_warning_or_error))
15002 {
15003 /* For backwards compatibility and good diagnostics, try
15004 the unqualified lookup again if we aren't in SFINAE
15005 context. */
15006 tree unq = (tsubst_copy_and_build
15007 (function, args, complain, in_decl, true,
15008 integral_constant_expression_p));
15009 if (unq == error_mark_node)
15010 RETURN (error_mark_node);
15011
15012 if (unq != function)
15013 {
15014 tree fn = unq;
15015 if (INDIRECT_REF_P (fn))
15016 fn = TREE_OPERAND (fn, 0);
15017 if (TREE_CODE (fn) == COMPONENT_REF)
15018 fn = TREE_OPERAND (fn, 1);
15019 if (is_overloaded_fn (fn))
15020 fn = get_first_fn (fn);
15021 if (permerror (EXPR_LOC_OR_LOC (t, input_location),
15022 "%qD was not declared in this scope, "
15023 "and no declarations were found by "
15024 "argument-dependent lookup at the point "
15025 "of instantiation", function))
15026 {
15027 if (!DECL_P (fn))
15028 /* Can't say anything more. */;
15029 else if (DECL_CLASS_SCOPE_P (fn))
15030 {
15031 location_t loc = EXPR_LOC_OR_LOC (t,
15032 input_location);
15033 inform (loc,
15034 "declarations in dependent base %qT are "
15035 "not found by unqualified lookup",
15036 DECL_CLASS_CONTEXT (fn));
15037 if (current_class_ptr)
15038 inform (loc,
15039 "use %<this->%D%> instead", function);
15040 else
15041 inform (loc,
15042 "use %<%T::%D%> instead",
15043 current_class_name, function);
15044 }
15045 else
15046 inform (0, "%q+D declared here, later in the "
15047 "translation unit", fn);
15048 }
15049 function = unq;
15050 }
15051 }
15052 if (identifier_p (function))
15053 {
15054 if (complain & tf_error)
15055 unqualified_name_lookup_error (function);
15056 release_tree_vector (call_args);
15057 RETURN (error_mark_node);
15058 }
15059 }
15060
15061 /* Remember that there was a reference to this entity. */
15062 if (DECL_P (function))
15063 mark_used (function);
15064
15065 /* Put back tf_decltype for the actual call. */
15066 complain |= decltype_flag;
15067
15068 if (TREE_CODE (function) == OFFSET_REF)
15069 ret = build_offset_ref_call_from_tree (function, &call_args,
15070 complain);
15071 else if (TREE_CODE (function) == COMPONENT_REF)
15072 {
15073 tree instance = TREE_OPERAND (function, 0);
15074 tree fn = TREE_OPERAND (function, 1);
15075
15076 if (processing_template_decl
15077 && (type_dependent_expression_p (instance)
15078 || (!BASELINK_P (fn)
15079 && TREE_CODE (fn) != FIELD_DECL)
15080 || type_dependent_expression_p (fn)
15081 || any_type_dependent_arguments_p (call_args)))
15082 ret = build_nt_call_vec (function, call_args);
15083 else if (!BASELINK_P (fn))
15084 ret = finish_call_expr (function, &call_args,
15085 /*disallow_virtual=*/false,
15086 /*koenig_p=*/false,
15087 complain);
15088 else
15089 ret = (build_new_method_call
15090 (instance, fn,
15091 &call_args, NULL_TREE,
15092 qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
15093 /*fn_p=*/NULL,
15094 complain));
15095 }
15096 else
15097 ret = finish_call_expr (function, &call_args,
15098 /*disallow_virtual=*/qualified_p,
15099 koenig_p,
15100 complain);
15101
15102 release_tree_vector (call_args);
15103
15104 RETURN (ret);
15105 }
15106
15107 case COND_EXPR:
15108 {
15109 tree cond = RECUR (TREE_OPERAND (t, 0));
15110 tree exp1, exp2;
15111
15112 if (TREE_CODE (cond) == INTEGER_CST)
15113 {
15114 if (integer_zerop (cond))
15115 {
15116 ++c_inhibit_evaluation_warnings;
15117 exp1 = RECUR (TREE_OPERAND (t, 1));
15118 --c_inhibit_evaluation_warnings;
15119 exp2 = RECUR (TREE_OPERAND (t, 2));
15120 }
15121 else
15122 {
15123 exp1 = RECUR (TREE_OPERAND (t, 1));
15124 ++c_inhibit_evaluation_warnings;
15125 exp2 = RECUR (TREE_OPERAND (t, 2));
15126 --c_inhibit_evaluation_warnings;
15127 }
15128 }
15129 else
15130 {
15131 exp1 = RECUR (TREE_OPERAND (t, 1));
15132 exp2 = RECUR (TREE_OPERAND (t, 2));
15133 }
15134
15135 RETURN (build_x_conditional_expr (EXPR_LOCATION (t),
15136 cond, exp1, exp2, complain));
15137 }
15138
15139 case PSEUDO_DTOR_EXPR:
15140 {
15141 tree op0 = RECUR (TREE_OPERAND (t, 0));
15142 tree op1 = RECUR (TREE_OPERAND (t, 1));
15143 tree op2 = tsubst (TREE_OPERAND (t, 2), args, complain, in_decl);
15144 RETURN (finish_pseudo_destructor_expr (op0, op1, op2,
15145 input_location));
15146 }
15147
15148 case TREE_LIST:
15149 {
15150 tree purpose, value, chain;
15151
15152 if (t == void_list_node)
15153 RETURN (t);
15154
15155 if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
15156 || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
15157 {
15158 /* We have pack expansions, so expand those and
15159 create a new list out of it. */
15160 tree purposevec = NULL_TREE;
15161 tree valuevec = NULL_TREE;
15162 tree chain;
15163 int i, len = -1;
15164
15165 /* Expand the argument expressions. */
15166 if (TREE_PURPOSE (t))
15167 purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
15168 complain, in_decl);
15169 if (TREE_VALUE (t))
15170 valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
15171 complain, in_decl);
15172
15173 /* Build the rest of the list. */
15174 chain = TREE_CHAIN (t);
15175 if (chain && chain != void_type_node)
15176 chain = RECUR (chain);
15177
15178 /* Determine the number of arguments. */
15179 if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
15180 {
15181 len = TREE_VEC_LENGTH (purposevec);
15182 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
15183 }
15184 else if (TREE_CODE (valuevec) == TREE_VEC)
15185 len = TREE_VEC_LENGTH (valuevec);
15186 else
15187 {
15188 /* Since we only performed a partial substitution into
15189 the argument pack, we only RETURN (a single list
15190 node. */
15191 if (purposevec == TREE_PURPOSE (t)
15192 && valuevec == TREE_VALUE (t)
15193 && chain == TREE_CHAIN (t))
15194 RETURN (t);
15195
15196 RETURN (tree_cons (purposevec, valuevec, chain));
15197 }
15198
15199 /* Convert the argument vectors into a TREE_LIST */
15200 i = len;
15201 while (i > 0)
15202 {
15203 /* Grab the Ith values. */
15204 i--;
15205 purpose = purposevec ? TREE_VEC_ELT (purposevec, i)
15206 : NULL_TREE;
15207 value
15208 = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i))
15209 : NULL_TREE;
15210
15211 /* Build the list (backwards). */
15212 chain = tree_cons (purpose, value, chain);
15213 }
15214
15215 RETURN (chain);
15216 }
15217
15218 purpose = TREE_PURPOSE (t);
15219 if (purpose)
15220 purpose = RECUR (purpose);
15221 value = TREE_VALUE (t);
15222 if (value)
15223 value = RECUR (value);
15224 chain = TREE_CHAIN (t);
15225 if (chain && chain != void_type_node)
15226 chain = RECUR (chain);
15227 if (purpose == TREE_PURPOSE (t)
15228 && value == TREE_VALUE (t)
15229 && chain == TREE_CHAIN (t))
15230 RETURN (t);
15231 RETURN (tree_cons (purpose, value, chain));
15232 }
15233
15234 case COMPONENT_REF:
15235 {
15236 tree object;
15237 tree object_type;
15238 tree member;
15239 tree r;
15240
15241 object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
15242 args, complain, in_decl);
15243 /* Remember that there was a reference to this entity. */
15244 if (DECL_P (object))
15245 mark_used (object);
15246 object_type = TREE_TYPE (object);
15247
15248 member = TREE_OPERAND (t, 1);
15249 if (BASELINK_P (member))
15250 member = tsubst_baselink (member,
15251 non_reference (TREE_TYPE (object)),
15252 args, complain, in_decl);
15253 else
15254 member = tsubst_copy (member, args, complain, in_decl);
15255 if (member == error_mark_node)
15256 RETURN (error_mark_node);
15257
15258 if (type_dependent_expression_p (object))
15259 /* We can't do much here. */;
15260 else if (!CLASS_TYPE_P (object_type))
15261 {
15262 if (scalarish_type_p (object_type))
15263 {
15264 tree s = NULL_TREE;
15265 tree dtor = member;
15266
15267 if (TREE_CODE (dtor) == SCOPE_REF)
15268 {
15269 s = TREE_OPERAND (dtor, 0);
15270 dtor = TREE_OPERAND (dtor, 1);
15271 }
15272 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
15273 {
15274 dtor = TREE_OPERAND (dtor, 0);
15275 if (TYPE_P (dtor))
15276 RETURN (finish_pseudo_destructor_expr
15277 (object, s, dtor, input_location));
15278 }
15279 }
15280 }
15281 else if (TREE_CODE (member) == SCOPE_REF
15282 && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
15283 {
15284 /* Lookup the template functions now that we know what the
15285 scope is. */
15286 tree scope = TREE_OPERAND (member, 0);
15287 tree tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
15288 tree args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
15289 member = lookup_qualified_name (scope, tmpl,
15290 /*is_type_p=*/false,
15291 /*complain=*/false);
15292 if (BASELINK_P (member))
15293 {
15294 BASELINK_FUNCTIONS (member)
15295 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
15296 args);
15297 member = (adjust_result_of_qualified_name_lookup
15298 (member, BINFO_TYPE (BASELINK_BINFO (member)),
15299 object_type));
15300 }
15301 else
15302 {
15303 qualified_name_lookup_error (scope, tmpl, member,
15304 input_location);
15305 RETURN (error_mark_node);
15306 }
15307 }
15308 else if (TREE_CODE (member) == SCOPE_REF
15309 && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
15310 && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
15311 {
15312 if (complain & tf_error)
15313 {
15314 if (TYPE_P (TREE_OPERAND (member, 0)))
15315 error ("%qT is not a class or namespace",
15316 TREE_OPERAND (member, 0));
15317 else
15318 error ("%qD is not a class or namespace",
15319 TREE_OPERAND (member, 0));
15320 }
15321 RETURN (error_mark_node);
15322 }
15323 else if (TREE_CODE (member) == FIELD_DECL)
15324 {
15325 r = finish_non_static_data_member (member, object, NULL_TREE);
15326 if (TREE_CODE (r) == COMPONENT_REF)
15327 REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
15328 RETURN (r);
15329 }
15330
15331 r = finish_class_member_access_expr (object, member,
15332 /*template_p=*/false,
15333 complain);
15334 if (TREE_CODE (r) == COMPONENT_REF)
15335 REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
15336 RETURN (r);
15337 }
15338
15339 case THROW_EXPR:
15340 RETURN (build_throw
15341 (RECUR (TREE_OPERAND (t, 0))));
15342
15343 case CONSTRUCTOR:
15344 {
15345 vec<constructor_elt, va_gc> *n;
15346 constructor_elt *ce;
15347 unsigned HOST_WIDE_INT idx;
15348 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
15349 bool process_index_p;
15350 int newlen;
15351 bool need_copy_p = false;
15352 tree r;
15353
15354 if (type == error_mark_node)
15355 RETURN (error_mark_node);
15356
15357 /* digest_init will do the wrong thing if we let it. */
15358 if (type && TYPE_PTRMEMFUNC_P (type))
15359 RETURN (t);
15360
15361 /* We do not want to process the index of aggregate
15362 initializers as they are identifier nodes which will be
15363 looked up by digest_init. */
15364 process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
15365
15366 n = vec_safe_copy (CONSTRUCTOR_ELTS (t));
15367 newlen = vec_safe_length (n);
15368 FOR_EACH_VEC_SAFE_ELT (n, idx, ce)
15369 {
15370 if (ce->index && process_index_p
15371 /* An identifier index is looked up in the type
15372 being initialized, not the current scope. */
15373 && TREE_CODE (ce->index) != IDENTIFIER_NODE)
15374 ce->index = RECUR (ce->index);
15375
15376 if (PACK_EXPANSION_P (ce->value))
15377 {
15378 /* Substitute into the pack expansion. */
15379 ce->value = tsubst_pack_expansion (ce->value, args, complain,
15380 in_decl);
15381
15382 if (ce->value == error_mark_node
15383 || PACK_EXPANSION_P (ce->value))
15384 ;
15385 else if (TREE_VEC_LENGTH (ce->value) == 1)
15386 /* Just move the argument into place. */
15387 ce->value = TREE_VEC_ELT (ce->value, 0);
15388 else
15389 {
15390 /* Update the length of the final CONSTRUCTOR
15391 arguments vector, and note that we will need to
15392 copy.*/
15393 newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
15394 need_copy_p = true;
15395 }
15396 }
15397 else
15398 ce->value = RECUR (ce->value);
15399 }
15400
15401 if (need_copy_p)
15402 {
15403 vec<constructor_elt, va_gc> *old_n = n;
15404
15405 vec_alloc (n, newlen);
15406 FOR_EACH_VEC_ELT (*old_n, idx, ce)
15407 {
15408 if (TREE_CODE (ce->value) == TREE_VEC)
15409 {
15410 int i, len = TREE_VEC_LENGTH (ce->value);
15411 for (i = 0; i < len; ++i)
15412 CONSTRUCTOR_APPEND_ELT (n, 0,
15413 TREE_VEC_ELT (ce->value, i));
15414 }
15415 else
15416 CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
15417 }
15418 }
15419
15420 r = build_constructor (init_list_type_node, n);
15421 CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
15422
15423 if (TREE_HAS_CONSTRUCTOR (t))
15424 RETURN (finish_compound_literal (type, r, complain));
15425
15426 TREE_TYPE (r) = type;
15427 RETURN (r);
15428 }
15429
15430 case TYPEID_EXPR:
15431 {
15432 tree operand_0 = TREE_OPERAND (t, 0);
15433 if (TYPE_P (operand_0))
15434 {
15435 operand_0 = tsubst (operand_0, args, complain, in_decl);
15436 RETURN (get_typeid (operand_0, complain));
15437 }
15438 else
15439 {
15440 operand_0 = RECUR (operand_0);
15441 RETURN (build_typeid (operand_0, complain));
15442 }
15443 }
15444
15445 case VAR_DECL:
15446 if (!args)
15447 RETURN (t);
15448 else if (DECL_PACK_P (t))
15449 {
15450 /* We don't build decls for an instantiation of a
15451 variadic capture proxy, we instantiate the elements
15452 when needed. */
15453 gcc_assert (DECL_HAS_VALUE_EXPR_P (t));
15454 return RECUR (DECL_VALUE_EXPR (t));
15455 }
15456 /* Fall through */
15457
15458 case PARM_DECL:
15459 {
15460 tree r = tsubst_copy (t, args, complain, in_decl);
15461 /* ??? We're doing a subset of finish_id_expression here. */
15462 if (VAR_P (r)
15463 && !processing_template_decl
15464 && !cp_unevaluated_operand
15465 && (TREE_STATIC (r) || DECL_EXTERNAL (r))
15466 && DECL_THREAD_LOCAL_P (r))
15467 {
15468 if (tree wrap = get_tls_wrapper_fn (r))
15469 /* Replace an evaluated use of the thread_local variable with
15470 a call to its wrapper. */
15471 r = build_cxx_call (wrap, 0, NULL, tf_warning_or_error);
15472 }
15473 else if (outer_automatic_var_p (r))
15474 r = process_outer_var_ref (r, complain);
15475
15476 if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
15477 /* If the original type was a reference, we'll be wrapped in
15478 the appropriate INDIRECT_REF. */
15479 r = convert_from_reference (r);
15480 RETURN (r);
15481 }
15482
15483 case VA_ARG_EXPR:
15484 {
15485 tree op0 = RECUR (TREE_OPERAND (t, 0));
15486 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
15487 RETURN (build_x_va_arg (EXPR_LOCATION (t), op0, type));
15488 }
15489
15490 case OFFSETOF_EXPR:
15491 RETURN (finish_offsetof (RECUR (TREE_OPERAND (t, 0)),
15492 EXPR_LOCATION (t)));
15493
15494 case TRAIT_EXPR:
15495 {
15496 tree type1 = tsubst (TRAIT_EXPR_TYPE1 (t), args,
15497 complain, in_decl);
15498
15499 tree type2 = TRAIT_EXPR_TYPE2 (t);
15500 if (type2 && TREE_CODE (type2) == TREE_LIST)
15501 type2 = RECUR (type2);
15502 else if (type2)
15503 type2 = tsubst (type2, args, complain, in_decl);
15504
15505 RETURN (finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2));
15506 }
15507
15508 case STMT_EXPR:
15509 {
15510 tree old_stmt_expr = cur_stmt_expr;
15511 tree stmt_expr = begin_stmt_expr ();
15512
15513 cur_stmt_expr = stmt_expr;
15514 tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
15515 integral_constant_expression_p);
15516 stmt_expr = finish_stmt_expr (stmt_expr, false);
15517 cur_stmt_expr = old_stmt_expr;
15518
15519 /* If the resulting list of expression statement is empty,
15520 fold it further into void_node. */
15521 if (empty_expr_stmt_p (stmt_expr))
15522 stmt_expr = void_node;
15523
15524 RETURN (stmt_expr);
15525 }
15526
15527 case LAMBDA_EXPR:
15528 {
15529 tree r = build_lambda_expr ();
15530
15531 tree type = tsubst (LAMBDA_EXPR_CLOSURE (t), args, complain, NULL_TREE);
15532 LAMBDA_EXPR_CLOSURE (r) = type;
15533 CLASSTYPE_LAMBDA_EXPR (type) = r;
15534
15535 LAMBDA_EXPR_LOCATION (r)
15536 = LAMBDA_EXPR_LOCATION (t);
15537 LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
15538 = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
15539 LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
15540 LAMBDA_EXPR_DISCRIMINATOR (r)
15541 = (LAMBDA_EXPR_DISCRIMINATOR (t));
15542 /* For a function scope, we want to use tsubst so that we don't
15543 complain about referring to an auto function before its return
15544 type has been deduced. Otherwise, we want to use tsubst_copy so
15545 that we look up the existing field/parameter/variable rather
15546 than build a new one. */
15547 tree scope = LAMBDA_EXPR_EXTRA_SCOPE (t);
15548 if (scope && TREE_CODE (scope) == FUNCTION_DECL)
15549 scope = tsubst (scope, args, complain, in_decl);
15550 else if (scope && TREE_CODE (scope) == PARM_DECL)
15551 {
15552 /* Look up the parameter we want directly, as tsubst_copy
15553 doesn't do what we need. */
15554 tree fn = tsubst (DECL_CONTEXT (scope), args, complain, in_decl);
15555 tree parm = FUNCTION_FIRST_USER_PARM (fn);
15556 while (DECL_PARM_INDEX (parm) != DECL_PARM_INDEX (scope))
15557 parm = DECL_CHAIN (parm);
15558 scope = parm;
15559 /* FIXME Work around the parm not having DECL_CONTEXT set. */
15560 if (DECL_CONTEXT (scope) == NULL_TREE)
15561 DECL_CONTEXT (scope) = fn;
15562 }
15563 else
15564 scope = RECUR (scope);
15565 LAMBDA_EXPR_EXTRA_SCOPE (r) = scope;
15566 LAMBDA_EXPR_RETURN_TYPE (r)
15567 = tsubst (LAMBDA_EXPR_RETURN_TYPE (t), args, complain, in_decl);
15568
15569 gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (t) == NULL_TREE
15570 && LAMBDA_EXPR_PENDING_PROXIES (t) == NULL);
15571
15572 /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set. */
15573 determine_visibility (TYPE_NAME (type));
15574 /* Now that we know visibility, instantiate the type so we have a
15575 declaration of the op() for later calls to lambda_function. */
15576 complete_type (type);
15577
15578 LAMBDA_EXPR_THIS_CAPTURE (r) = NULL_TREE;
15579
15580 RETURN (build_lambda_object (r));
15581 }
15582
15583 case TARGET_EXPR:
15584 /* We can get here for a constant initializer of non-dependent type.
15585 FIXME stop folding in cp_parser_initializer_clause. */
15586 {
15587 tree r = get_target_expr_sfinae (RECUR (TARGET_EXPR_INITIAL (t)),
15588 complain);
15589 RETURN (r);
15590 }
15591
15592 case TRANSACTION_EXPR:
15593 RETURN (tsubst_expr(t, args, complain, in_decl,
15594 integral_constant_expression_p));
15595
15596 case PAREN_EXPR:
15597 RETURN (finish_parenthesized_expr (RECUR (TREE_OPERAND (t, 0))));
15598
15599 case VEC_PERM_EXPR:
15600 {
15601 tree op0 = RECUR (TREE_OPERAND (t, 0));
15602 tree op1 = RECUR (TREE_OPERAND (t, 1));
15603 tree op2 = RECUR (TREE_OPERAND (t, 2));
15604 RETURN (build_x_vec_perm_expr (input_location, op0, op1, op2,
15605 complain));
15606 }
15607
15608 default:
15609 /* Handle Objective-C++ constructs, if appropriate. */
15610 {
15611 tree subst
15612 = objcp_tsubst_copy_and_build (t, args, complain,
15613 in_decl, /*function_p=*/false);
15614 if (subst)
15615 RETURN (subst);
15616 }
15617 RETURN (tsubst_copy (t, args, complain, in_decl));
15618 }
15619
15620 #undef RECUR
15621 #undef RETURN
15622 out:
15623 input_location = loc;
15624 return retval;
15625 }
15626
15627 /* Verify that the instantiated ARGS are valid. For type arguments,
15628 make sure that the type's linkage is ok. For non-type arguments,
15629 make sure they are constants if they are integral or enumerations.
15630 Emit an error under control of COMPLAIN, and return TRUE on error. */
15631
15632 static bool
15633 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
15634 {
15635 if (dependent_template_arg_p (t))
15636 return false;
15637 if (ARGUMENT_PACK_P (t))
15638 {
15639 tree vec = ARGUMENT_PACK_ARGS (t);
15640 int len = TREE_VEC_LENGTH (vec);
15641 bool result = false;
15642 int i;
15643
15644 for (i = 0; i < len; ++i)
15645 if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
15646 result = true;
15647 return result;
15648 }
15649 else if (TYPE_P (t))
15650 {
15651 /* [basic.link]: A name with no linkage (notably, the name
15652 of a class or enumeration declared in a local scope)
15653 shall not be used to declare an entity with linkage.
15654 This implies that names with no linkage cannot be used as
15655 template arguments
15656
15657 DR 757 relaxes this restriction for C++0x. */
15658 tree nt = (cxx_dialect > cxx98 ? NULL_TREE
15659 : no_linkage_check (t, /*relaxed_p=*/false));
15660
15661 if (nt)
15662 {
15663 /* DR 488 makes use of a type with no linkage cause
15664 type deduction to fail. */
15665 if (complain & tf_error)
15666 {
15667 if (TYPE_ANONYMOUS_P (nt))
15668 error ("%qT is/uses anonymous type", t);
15669 else
15670 error ("template argument for %qD uses local type %qT",
15671 tmpl, t);
15672 }
15673 return true;
15674 }
15675 /* In order to avoid all sorts of complications, we do not
15676 allow variably-modified types as template arguments. */
15677 else if (variably_modified_type_p (t, NULL_TREE))
15678 {
15679 if (complain & tf_error)
15680 error ("%qT is a variably modified type", t);
15681 return true;
15682 }
15683 }
15684 /* Class template and alias template arguments should be OK. */
15685 else if (DECL_TYPE_TEMPLATE_P (t))
15686 ;
15687 /* A non-type argument of integral or enumerated type must be a
15688 constant. */
15689 else if (TREE_TYPE (t)
15690 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
15691 && !TREE_CONSTANT (t))
15692 {
15693 if (complain & tf_error)
15694 error ("integral expression %qE is not constant", t);
15695 return true;
15696 }
15697 return false;
15698 }
15699
15700 static bool
15701 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
15702 {
15703 int ix, len = DECL_NTPARMS (tmpl);
15704 bool result = false;
15705
15706 for (ix = 0; ix != len; ix++)
15707 {
15708 if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
15709 result = true;
15710 }
15711 if (result && (complain & tf_error))
15712 error (" trying to instantiate %qD", tmpl);
15713 return result;
15714 }
15715
15716 /* We're out of SFINAE context now, so generate diagnostics for the access
15717 errors we saw earlier when instantiating D from TMPL and ARGS. */
15718
15719 static void
15720 recheck_decl_substitution (tree d, tree tmpl, tree args)
15721 {
15722 tree pattern = DECL_TEMPLATE_RESULT (tmpl);
15723 tree type = TREE_TYPE (pattern);
15724 location_t loc = input_location;
15725
15726 push_access_scope (d);
15727 push_deferring_access_checks (dk_no_deferred);
15728 input_location = DECL_SOURCE_LOCATION (pattern);
15729 tsubst (type, args, tf_warning_or_error, d);
15730 input_location = loc;
15731 pop_deferring_access_checks ();
15732 pop_access_scope (d);
15733 }
15734
15735 /* Instantiate the indicated variable, function, or alias template TMPL with
15736 the template arguments in TARG_PTR. */
15737
15738 static tree
15739 instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain)
15740 {
15741 tree targ_ptr = orig_args;
15742 tree fndecl;
15743 tree gen_tmpl;
15744 tree spec;
15745 bool access_ok = true;
15746
15747 if (tmpl == error_mark_node)
15748 return error_mark_node;
15749
15750 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
15751
15752 /* If this function is a clone, handle it specially. */
15753 if (DECL_CLONED_FUNCTION_P (tmpl))
15754 {
15755 tree spec;
15756 tree clone;
15757
15758 /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
15759 DECL_CLONED_FUNCTION. */
15760 spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
15761 targ_ptr, complain);
15762 if (spec == error_mark_node)
15763 return error_mark_node;
15764
15765 /* Look for the clone. */
15766 FOR_EACH_CLONE (clone, spec)
15767 if (DECL_NAME (clone) == DECL_NAME (tmpl))
15768 return clone;
15769 /* We should always have found the clone by now. */
15770 gcc_unreachable ();
15771 return NULL_TREE;
15772 }
15773
15774 if (targ_ptr == error_mark_node)
15775 return error_mark_node;
15776
15777 /* Check to see if we already have this specialization. */
15778 gen_tmpl = most_general_template (tmpl);
15779 if (tmpl != gen_tmpl)
15780 /* The TMPL is a partial instantiation. To get a full set of
15781 arguments we must add the arguments used to perform the
15782 partial instantiation. */
15783 targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
15784 targ_ptr);
15785
15786 /* It would be nice to avoid hashing here and then again in tsubst_decl,
15787 but it doesn't seem to be on the hot path. */
15788 spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
15789
15790 gcc_assert (tmpl == gen_tmpl
15791 || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
15792 == spec)
15793 || fndecl == NULL_TREE);
15794
15795 if (spec != NULL_TREE)
15796 {
15797 if (FNDECL_HAS_ACCESS_ERRORS (spec))
15798 {
15799 if (complain & tf_error)
15800 recheck_decl_substitution (spec, gen_tmpl, targ_ptr);
15801 return error_mark_node;
15802 }
15803 return spec;
15804 }
15805
15806 if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
15807 complain))
15808 return error_mark_node;
15809
15810 /* We are building a FUNCTION_DECL, during which the access of its
15811 parameters and return types have to be checked. However this
15812 FUNCTION_DECL which is the desired context for access checking
15813 is not built yet. We solve this chicken-and-egg problem by
15814 deferring all checks until we have the FUNCTION_DECL. */
15815 push_deferring_access_checks (dk_deferred);
15816
15817 /* Instantiation of the function happens in the context of the function
15818 template, not the context of the overload resolution we're doing. */
15819 push_to_top_level ();
15820 /* If there are dependent arguments, e.g. because we're doing partial
15821 ordering, make sure processing_template_decl stays set. */
15822 if (uses_template_parms (targ_ptr))
15823 ++processing_template_decl;
15824 if (DECL_CLASS_SCOPE_P (gen_tmpl))
15825 {
15826 tree ctx = tsubst (DECL_CONTEXT (gen_tmpl), targ_ptr,
15827 complain, gen_tmpl);
15828 push_nested_class (ctx);
15829 }
15830 /* Substitute template parameters to obtain the specialization. */
15831 fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
15832 targ_ptr, complain, gen_tmpl);
15833 if (DECL_CLASS_SCOPE_P (gen_tmpl))
15834 pop_nested_class ();
15835 pop_from_top_level ();
15836
15837 if (fndecl == error_mark_node)
15838 {
15839 pop_deferring_access_checks ();
15840 return error_mark_node;
15841 }
15842
15843 /* The DECL_TI_TEMPLATE should always be the immediate parent
15844 template, not the most general template. */
15845 DECL_TI_TEMPLATE (fndecl) = tmpl;
15846
15847 /* Now we know the specialization, compute access previously
15848 deferred. */
15849 push_access_scope (fndecl);
15850 if (!perform_deferred_access_checks (complain))
15851 access_ok = false;
15852 pop_access_scope (fndecl);
15853 pop_deferring_access_checks ();
15854
15855 /* If we've just instantiated the main entry point for a function,
15856 instantiate all the alternate entry points as well. We do this
15857 by cloning the instantiation of the main entry point, not by
15858 instantiating the template clones. */
15859 if (DECL_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (DECL_CHAIN (gen_tmpl)))
15860 clone_function_decl (fndecl, /*update_method_vec_p=*/0);
15861
15862 if (!access_ok)
15863 {
15864 if (!(complain & tf_error))
15865 {
15866 /* Remember to reinstantiate when we're out of SFINAE so the user
15867 can see the errors. */
15868 FNDECL_HAS_ACCESS_ERRORS (fndecl) = true;
15869 }
15870 return error_mark_node;
15871 }
15872 return fndecl;
15873 }
15874
15875 /* Wrapper for instantiate_template_1. */
15876
15877 tree
15878 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
15879 {
15880 tree ret;
15881 timevar_push (TV_TEMPLATE_INST);
15882 ret = instantiate_template_1 (tmpl, orig_args, complain);
15883 timevar_pop (TV_TEMPLATE_INST);
15884 return ret;
15885 }
15886
15887 /* Instantiate the alias template TMPL with ARGS. Also push a template
15888 instantiation level, which instantiate_template doesn't do because
15889 functions and variables have sufficient context established by the
15890 callers. */
15891
15892 static tree
15893 instantiate_alias_template (tree tmpl, tree args, tsubst_flags_t complain)
15894 {
15895 struct pending_template *old_last_pend = last_pending_template;
15896 struct tinst_level *old_error_tinst = last_error_tinst_level;
15897 if (tmpl == error_mark_node || args == error_mark_node)
15898 return error_mark_node;
15899 tree tinst = build_tree_list (tmpl, args);
15900 if (!push_tinst_level (tinst))
15901 {
15902 ggc_free (tinst);
15903 return error_mark_node;
15904 }
15905
15906 args =
15907 coerce_innermost_template_parms (DECL_TEMPLATE_PARMS (tmpl),
15908 args, tmpl, complain,
15909 /*require_all_args=*/true,
15910 /*use_default_args=*/true);
15911
15912 tree r = instantiate_template (tmpl, args, complain);
15913 pop_tinst_level ();
15914 /* We can't free this if a pending_template entry or last_error_tinst_level
15915 is pointing at it. */
15916 if (last_pending_template == old_last_pend
15917 && last_error_tinst_level == old_error_tinst)
15918 ggc_free (tinst);
15919
15920 return r;
15921 }
15922
15923 /* PARM is a template parameter pack for FN. Returns true iff
15924 PARM is used in a deducible way in the argument list of FN. */
15925
15926 static bool
15927 pack_deducible_p (tree parm, tree fn)
15928 {
15929 tree t = FUNCTION_FIRST_USER_PARMTYPE (fn);
15930 for (; t; t = TREE_CHAIN (t))
15931 {
15932 tree type = TREE_VALUE (t);
15933 tree packs;
15934 if (!PACK_EXPANSION_P (type))
15935 continue;
15936 for (packs = PACK_EXPANSION_PARAMETER_PACKS (type);
15937 packs; packs = TREE_CHAIN (packs))
15938 if (template_args_equal (TREE_VALUE (packs), parm))
15939 {
15940 /* The template parameter pack is used in a function parameter
15941 pack. If this is the end of the parameter list, the
15942 template parameter pack is deducible. */
15943 if (TREE_CHAIN (t) == void_list_node)
15944 return true;
15945 else
15946 /* Otherwise, not. Well, it could be deduced from
15947 a non-pack parameter, but doing so would end up with
15948 a deduction mismatch, so don't bother. */
15949 return false;
15950 }
15951 }
15952 /* The template parameter pack isn't used in any function parameter
15953 packs, but it might be used deeper, e.g. tuple<Args...>. */
15954 return true;
15955 }
15956
15957 /* The FN is a TEMPLATE_DECL for a function. ARGS is an array with
15958 NARGS elements of the arguments that are being used when calling
15959 it. TARGS is a vector into which the deduced template arguments
15960 are placed.
15961
15962 Returns either a FUNCTION_DECL for the matching specialization of FN or
15963 NULL_TREE if no suitable specialization can be found. If EXPLAIN_P is
15964 true, diagnostics will be printed to explain why it failed.
15965
15966 If FN is a conversion operator, or we are trying to produce a specific
15967 specialization, RETURN_TYPE is the return type desired.
15968
15969 The EXPLICIT_TARGS are explicit template arguments provided via a
15970 template-id.
15971
15972 The parameter STRICT is one of:
15973
15974 DEDUCE_CALL:
15975 We are deducing arguments for a function call, as in
15976 [temp.deduct.call].
15977
15978 DEDUCE_CONV:
15979 We are deducing arguments for a conversion function, as in
15980 [temp.deduct.conv].
15981
15982 DEDUCE_EXACT:
15983 We are deducing arguments when doing an explicit instantiation
15984 as in [temp.explicit], when determining an explicit specialization
15985 as in [temp.expl.spec], or when taking the address of a function
15986 template, as in [temp.deduct.funcaddr]. */
15987
15988 tree
15989 fn_type_unification (tree fn,
15990 tree explicit_targs,
15991 tree targs,
15992 const tree *args,
15993 unsigned int nargs,
15994 tree return_type,
15995 unification_kind_t strict,
15996 int flags,
15997 bool explain_p,
15998 bool decltype_p)
15999 {
16000 tree parms;
16001 tree fntype;
16002 tree decl = NULL_TREE;
16003 tsubst_flags_t complain = (explain_p ? tf_warning_or_error : tf_none);
16004 bool ok;
16005 static int deduction_depth;
16006 struct pending_template *old_last_pend = last_pending_template;
16007 struct tinst_level *old_error_tinst = last_error_tinst_level;
16008 tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
16009 tree tinst;
16010 tree r = error_mark_node;
16011
16012 if (decltype_p)
16013 complain |= tf_decltype;
16014
16015 /* In C++0x, it's possible to have a function template whose type depends
16016 on itself recursively. This is most obvious with decltype, but can also
16017 occur with enumeration scope (c++/48969). So we need to catch infinite
16018 recursion and reject the substitution at deduction time; this function
16019 will return error_mark_node for any repeated substitution.
16020
16021 This also catches excessive recursion such as when f<N> depends on
16022 f<N-1> across all integers, and returns error_mark_node for all the
16023 substitutions back up to the initial one.
16024
16025 This is, of course, not reentrant. */
16026 if (excessive_deduction_depth)
16027 return error_mark_node;
16028 tinst = build_tree_list (fn, NULL_TREE);
16029 ++deduction_depth;
16030
16031 gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
16032
16033 fntype = TREE_TYPE (fn);
16034 if (explicit_targs)
16035 {
16036 /* [temp.deduct]
16037
16038 The specified template arguments must match the template
16039 parameters in kind (i.e., type, nontype, template), and there
16040 must not be more arguments than there are parameters;
16041 otherwise type deduction fails.
16042
16043 Nontype arguments must match the types of the corresponding
16044 nontype template parameters, or must be convertible to the
16045 types of the corresponding nontype parameters as specified in
16046 _temp.arg.nontype_, otherwise type deduction fails.
16047
16048 All references in the function type of the function template
16049 to the corresponding template parameters are replaced by the
16050 specified template argument values. If a substitution in a
16051 template parameter or in the function type of the function
16052 template results in an invalid type, type deduction fails. */
16053 int i, len = TREE_VEC_LENGTH (tparms);
16054 location_t loc = input_location;
16055 bool incomplete = false;
16056
16057 /* Adjust any explicit template arguments before entering the
16058 substitution context. */
16059 explicit_targs
16060 = (coerce_template_parms (tparms, explicit_targs, NULL_TREE,
16061 complain,
16062 /*require_all_args=*/false,
16063 /*use_default_args=*/false));
16064 if (explicit_targs == error_mark_node)
16065 goto fail;
16066
16067 /* Substitute the explicit args into the function type. This is
16068 necessary so that, for instance, explicitly declared function
16069 arguments can match null pointed constants. If we were given
16070 an incomplete set of explicit args, we must not do semantic
16071 processing during substitution as we could create partial
16072 instantiations. */
16073 for (i = 0; i < len; i++)
16074 {
16075 tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
16076 bool parameter_pack = false;
16077 tree targ = TREE_VEC_ELT (explicit_targs, i);
16078
16079 /* Dig out the actual parm. */
16080 if (TREE_CODE (parm) == TYPE_DECL
16081 || TREE_CODE (parm) == TEMPLATE_DECL)
16082 {
16083 parm = TREE_TYPE (parm);
16084 parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
16085 }
16086 else if (TREE_CODE (parm) == PARM_DECL)
16087 {
16088 parm = DECL_INITIAL (parm);
16089 parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
16090 }
16091
16092 if (!parameter_pack && targ == NULL_TREE)
16093 /* No explicit argument for this template parameter. */
16094 incomplete = true;
16095
16096 if (parameter_pack && pack_deducible_p (parm, fn))
16097 {
16098 /* Mark the argument pack as "incomplete". We could
16099 still deduce more arguments during unification.
16100 We remove this mark in type_unification_real. */
16101 if (targ)
16102 {
16103 ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
16104 ARGUMENT_PACK_EXPLICIT_ARGS (targ)
16105 = ARGUMENT_PACK_ARGS (targ);
16106 }
16107
16108 /* We have some incomplete argument packs. */
16109 incomplete = true;
16110 }
16111 }
16112
16113 TREE_VALUE (tinst) = explicit_targs;
16114 if (!push_tinst_level (tinst))
16115 {
16116 excessive_deduction_depth = true;
16117 goto fail;
16118 }
16119 processing_template_decl += incomplete;
16120 input_location = DECL_SOURCE_LOCATION (fn);
16121 /* Ignore any access checks; we'll see them again in
16122 instantiate_template and they might have the wrong
16123 access path at this point. */
16124 push_deferring_access_checks (dk_deferred);
16125 fntype = tsubst (TREE_TYPE (fn), explicit_targs,
16126 complain | tf_partial, NULL_TREE);
16127 pop_deferring_access_checks ();
16128 input_location = loc;
16129 processing_template_decl -= incomplete;
16130 pop_tinst_level ();
16131
16132 if (fntype == error_mark_node)
16133 goto fail;
16134
16135 /* Place the explicitly specified arguments in TARGS. */
16136 for (i = NUM_TMPL_ARGS (explicit_targs); i--;)
16137 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (explicit_targs, i);
16138 }
16139
16140 /* Never do unification on the 'this' parameter. */
16141 parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
16142
16143 if (return_type)
16144 {
16145 tree *new_args;
16146
16147 parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
16148 new_args = XALLOCAVEC (tree, nargs + 1);
16149 new_args[0] = return_type;
16150 memcpy (new_args + 1, args, nargs * sizeof (tree));
16151 args = new_args;
16152 ++nargs;
16153 }
16154
16155 /* We allow incomplete unification without an error message here
16156 because the standard doesn't seem to explicitly prohibit it. Our
16157 callers must be ready to deal with unification failures in any
16158 event. */
16159
16160 TREE_VALUE (tinst) = targs;
16161 /* If we aren't explaining yet, push tinst context so we can see where
16162 any errors (e.g. from class instantiations triggered by instantiation
16163 of default template arguments) come from. If we are explaining, this
16164 context is redundant. */
16165 if (!explain_p && !push_tinst_level (tinst))
16166 {
16167 excessive_deduction_depth = true;
16168 goto fail;
16169 }
16170
16171 /* type_unification_real will pass back any access checks from default
16172 template argument substitution. */
16173 vec<deferred_access_check, va_gc> *checks;
16174 checks = NULL;
16175
16176 ok = !type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
16177 targs, parms, args, nargs, /*subr=*/0,
16178 strict, flags, &checks, explain_p);
16179 if (!explain_p)
16180 pop_tinst_level ();
16181 if (!ok)
16182 goto fail;
16183
16184 /* Now that we have bindings for all of the template arguments,
16185 ensure that the arguments deduced for the template template
16186 parameters have compatible template parameter lists. We cannot
16187 check this property before we have deduced all template
16188 arguments, because the template parameter types of a template
16189 template parameter might depend on prior template parameters
16190 deduced after the template template parameter. The following
16191 ill-formed example illustrates this issue:
16192
16193 template<typename T, template<T> class C> void f(C<5>, T);
16194
16195 template<int N> struct X {};
16196
16197 void g() {
16198 f(X<5>(), 5l); // error: template argument deduction fails
16199 }
16200
16201 The template parameter list of 'C' depends on the template type
16202 parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
16203 'long'. Thus, we can't check that 'C' cannot bind to 'X' at the
16204 time that we deduce 'C'. */
16205 if (!template_template_parm_bindings_ok_p
16206 (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
16207 {
16208 unify_inconsistent_template_template_parameters (explain_p);
16209 goto fail;
16210 }
16211
16212 /* All is well so far. Now, check:
16213
16214 [temp.deduct]
16215
16216 When all template arguments have been deduced, all uses of
16217 template parameters in nondeduced contexts are replaced with
16218 the corresponding deduced argument values. If the
16219 substitution results in an invalid type, as described above,
16220 type deduction fails. */
16221 TREE_VALUE (tinst) = targs;
16222 if (!push_tinst_level (tinst))
16223 {
16224 excessive_deduction_depth = true;
16225 goto fail;
16226 }
16227
16228 /* Also collect access checks from the instantiation. */
16229 reopen_deferring_access_checks (checks);
16230
16231 decl = instantiate_template (fn, targs, complain);
16232
16233 checks = get_deferred_access_checks ();
16234 pop_deferring_access_checks ();
16235
16236 pop_tinst_level ();
16237
16238 if (decl == error_mark_node)
16239 goto fail;
16240
16241 /* Now perform any access checks encountered during substitution. */
16242 push_access_scope (decl);
16243 ok = perform_access_checks (checks, complain);
16244 pop_access_scope (decl);
16245 if (!ok)
16246 goto fail;
16247
16248 /* If we're looking for an exact match, check that what we got
16249 is indeed an exact match. It might not be if some template
16250 parameters are used in non-deduced contexts. But don't check
16251 for an exact match if we have dependent template arguments;
16252 in that case we're doing partial ordering, and we already know
16253 that we have two candidates that will provide the actual type. */
16254 if (strict == DEDUCE_EXACT && !any_dependent_template_arguments_p (targs))
16255 {
16256 tree substed = TREE_TYPE (decl);
16257 unsigned int i;
16258
16259 tree sarg
16260 = skip_artificial_parms_for (decl, TYPE_ARG_TYPES (substed));
16261 if (return_type)
16262 sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
16263 for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
16264 if (!same_type_p (args[i], TREE_VALUE (sarg)))
16265 {
16266 unify_type_mismatch (explain_p, args[i],
16267 TREE_VALUE (sarg));
16268 goto fail;
16269 }
16270 }
16271
16272 r = decl;
16273
16274 fail:
16275 --deduction_depth;
16276 if (excessive_deduction_depth)
16277 {
16278 if (deduction_depth == 0)
16279 /* Reset once we're all the way out. */
16280 excessive_deduction_depth = false;
16281 }
16282
16283 /* We can't free this if a pending_template entry or last_error_tinst_level
16284 is pointing at it. */
16285 if (last_pending_template == old_last_pend
16286 && last_error_tinst_level == old_error_tinst)
16287 ggc_free (tinst);
16288
16289 return r;
16290 }
16291
16292 /* Adjust types before performing type deduction, as described in
16293 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
16294 sections are symmetric. PARM is the type of a function parameter
16295 or the return type of the conversion function. ARG is the type of
16296 the argument passed to the call, or the type of the value
16297 initialized with the result of the conversion function.
16298 ARG_EXPR is the original argument expression, which may be null. */
16299
16300 static int
16301 maybe_adjust_types_for_deduction (unification_kind_t strict,
16302 tree* parm,
16303 tree* arg,
16304 tree arg_expr)
16305 {
16306 int result = 0;
16307
16308 switch (strict)
16309 {
16310 case DEDUCE_CALL:
16311 break;
16312
16313 case DEDUCE_CONV:
16314 {
16315 /* Swap PARM and ARG throughout the remainder of this
16316 function; the handling is precisely symmetric since PARM
16317 will initialize ARG rather than vice versa. */
16318 tree* temp = parm;
16319 parm = arg;
16320 arg = temp;
16321 break;
16322 }
16323
16324 case DEDUCE_EXACT:
16325 /* Core issue #873: Do the DR606 thing (see below) for these cases,
16326 too, but here handle it by stripping the reference from PARM
16327 rather than by adding it to ARG. */
16328 if (TREE_CODE (*parm) == REFERENCE_TYPE
16329 && TYPE_REF_IS_RVALUE (*parm)
16330 && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
16331 && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
16332 && TREE_CODE (*arg) == REFERENCE_TYPE
16333 && !TYPE_REF_IS_RVALUE (*arg))
16334 *parm = TREE_TYPE (*parm);
16335 /* Nothing else to do in this case. */
16336 return 0;
16337
16338 default:
16339 gcc_unreachable ();
16340 }
16341
16342 if (TREE_CODE (*parm) != REFERENCE_TYPE)
16343 {
16344 /* [temp.deduct.call]
16345
16346 If P is not a reference type:
16347
16348 --If A is an array type, the pointer type produced by the
16349 array-to-pointer standard conversion (_conv.array_) is
16350 used in place of A for type deduction; otherwise,
16351
16352 --If A is a function type, the pointer type produced by
16353 the function-to-pointer standard conversion
16354 (_conv.func_) is used in place of A for type deduction;
16355 otherwise,
16356
16357 --If A is a cv-qualified type, the top level
16358 cv-qualifiers of A's type are ignored for type
16359 deduction. */
16360 if (TREE_CODE (*arg) == ARRAY_TYPE)
16361 *arg = build_pointer_type (TREE_TYPE (*arg));
16362 else if (TREE_CODE (*arg) == FUNCTION_TYPE)
16363 *arg = build_pointer_type (*arg);
16364 else
16365 *arg = TYPE_MAIN_VARIANT (*arg);
16366 }
16367
16368 /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
16369 of the form T&&, where T is a template parameter, and the argument
16370 is an lvalue, T is deduced as A& */
16371 if (TREE_CODE (*parm) == REFERENCE_TYPE
16372 && TYPE_REF_IS_RVALUE (*parm)
16373 && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
16374 && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
16375 && (arg_expr ? real_lvalue_p (arg_expr)
16376 /* try_one_overload doesn't provide an arg_expr, but
16377 functions are always lvalues. */
16378 : TREE_CODE (*arg) == FUNCTION_TYPE))
16379 *arg = build_reference_type (*arg);
16380
16381 /* [temp.deduct.call]
16382
16383 If P is a cv-qualified type, the top level cv-qualifiers
16384 of P's type are ignored for type deduction. If P is a
16385 reference type, the type referred to by P is used for
16386 type deduction. */
16387 *parm = TYPE_MAIN_VARIANT (*parm);
16388 if (TREE_CODE (*parm) == REFERENCE_TYPE)
16389 {
16390 *parm = TREE_TYPE (*parm);
16391 result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
16392 }
16393
16394 /* DR 322. For conversion deduction, remove a reference type on parm
16395 too (which has been swapped into ARG). */
16396 if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
16397 *arg = TREE_TYPE (*arg);
16398
16399 return result;
16400 }
16401
16402 /* Subroutine of unify_one_argument. PARM is a function parameter of a
16403 template which does contain any deducible template parameters; check if
16404 ARG is a suitable match for it. STRICT, FLAGS and EXPLAIN_P are as in
16405 unify_one_argument. */
16406
16407 static int
16408 check_non_deducible_conversion (tree parm, tree arg, int strict,
16409 int flags, bool explain_p)
16410 {
16411 tree type;
16412
16413 if (!TYPE_P (arg))
16414 type = TREE_TYPE (arg);
16415 else
16416 type = arg;
16417
16418 if (same_type_p (parm, type))
16419 return unify_success (explain_p);
16420
16421 if (strict == DEDUCE_CONV)
16422 {
16423 if (can_convert_arg (type, parm, NULL_TREE, flags,
16424 explain_p ? tf_warning_or_error : tf_none))
16425 return unify_success (explain_p);
16426 }
16427 else if (strict != DEDUCE_EXACT)
16428 {
16429 if (can_convert_arg (parm, type,
16430 TYPE_P (arg) ? NULL_TREE : arg,
16431 flags, explain_p ? tf_warning_or_error : tf_none))
16432 return unify_success (explain_p);
16433 }
16434
16435 if (strict == DEDUCE_EXACT)
16436 return unify_type_mismatch (explain_p, parm, arg);
16437 else
16438 return unify_arg_conversion (explain_p, parm, type, arg);
16439 }
16440
16441 static bool uses_deducible_template_parms (tree type);
16442
16443 /* Returns true iff the expression EXPR is one from which a template
16444 argument can be deduced. In other words, if it's an undecorated
16445 use of a template non-type parameter. */
16446
16447 static bool
16448 deducible_expression (tree expr)
16449 {
16450 return (TREE_CODE (expr) == TEMPLATE_PARM_INDEX);
16451 }
16452
16453 /* Returns true iff the array domain DOMAIN uses a template parameter in a
16454 deducible way; that is, if it has a max value of <PARM> - 1. */
16455
16456 static bool
16457 deducible_array_bound (tree domain)
16458 {
16459 if (domain == NULL_TREE)
16460 return false;
16461
16462 tree max = TYPE_MAX_VALUE (domain);
16463 if (TREE_CODE (max) != MINUS_EXPR)
16464 return false;
16465
16466 return deducible_expression (TREE_OPERAND (max, 0));
16467 }
16468
16469 /* Returns true iff the template arguments ARGS use a template parameter
16470 in a deducible way. */
16471
16472 static bool
16473 deducible_template_args (tree args)
16474 {
16475 for (int i = 0; i < TREE_VEC_LENGTH (args); ++i)
16476 {
16477 bool deducible;
16478 tree elt = TREE_VEC_ELT (args, i);
16479 if (ARGUMENT_PACK_P (elt))
16480 deducible = deducible_template_args (ARGUMENT_PACK_ARGS (elt));
16481 else
16482 {
16483 if (PACK_EXPANSION_P (elt))
16484 elt = PACK_EXPANSION_PATTERN (elt);
16485 if (TREE_CODE (elt) == TEMPLATE_TEMPLATE_PARM)
16486 deducible = true;
16487 else if (TYPE_P (elt))
16488 deducible = uses_deducible_template_parms (elt);
16489 else
16490 deducible = deducible_expression (elt);
16491 }
16492 if (deducible)
16493 return true;
16494 }
16495 return false;
16496 }
16497
16498 /* Returns true iff TYPE contains any deducible references to template
16499 parameters, as per 14.8.2.5. */
16500
16501 static bool
16502 uses_deducible_template_parms (tree type)
16503 {
16504 if (PACK_EXPANSION_P (type))
16505 type = PACK_EXPANSION_PATTERN (type);
16506
16507 /* T
16508 cv-list T
16509 TT<T>
16510 TT<i>
16511 TT<> */
16512 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
16513 || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
16514 return true;
16515
16516 /* T*
16517 T&
16518 T&& */
16519 if (POINTER_TYPE_P (type))
16520 return uses_deducible_template_parms (TREE_TYPE (type));
16521
16522 /* T[integer-constant ]
16523 type [i] */
16524 if (TREE_CODE (type) == ARRAY_TYPE)
16525 return (uses_deducible_template_parms (TREE_TYPE (type))
16526 || deducible_array_bound (TYPE_DOMAIN (type)));
16527
16528 /* T type ::*
16529 type T::*
16530 T T::*
16531 T (type ::*)()
16532 type (T::*)()
16533 type (type ::*)(T)
16534 type (T::*)(T)
16535 T (type ::*)(T)
16536 T (T::*)()
16537 T (T::*)(T) */
16538 if (TYPE_PTRMEM_P (type))
16539 return (uses_deducible_template_parms (TYPE_PTRMEM_CLASS_TYPE (type))
16540 || (uses_deducible_template_parms
16541 (TYPE_PTRMEM_POINTED_TO_TYPE (type))));
16542
16543 /* template-name <T> (where template-name refers to a class template)
16544 template-name <i> (where template-name refers to a class template) */
16545 if (CLASS_TYPE_P (type)
16546 && CLASSTYPE_TEMPLATE_INFO (type)
16547 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type)))
16548 return deducible_template_args (INNERMOST_TEMPLATE_ARGS
16549 (CLASSTYPE_TI_ARGS (type)));
16550
16551 /* type (T)
16552 T()
16553 T(T) */
16554 if (TREE_CODE (type) == FUNCTION_TYPE
16555 || TREE_CODE (type) == METHOD_TYPE)
16556 {
16557 if (uses_deducible_template_parms (TREE_TYPE (type)))
16558 return true;
16559 tree parm = TYPE_ARG_TYPES (type);
16560 if (TREE_CODE (type) == METHOD_TYPE)
16561 parm = TREE_CHAIN (parm);
16562 for (; parm; parm = TREE_CHAIN (parm))
16563 if (uses_deducible_template_parms (TREE_VALUE (parm)))
16564 return true;
16565 }
16566
16567 return false;
16568 }
16569
16570 /* Subroutine of type_unification_real and unify_pack_expansion to
16571 handle unification of a single P/A pair. Parameters are as
16572 for those functions. */
16573
16574 static int
16575 unify_one_argument (tree tparms, tree targs, tree parm, tree arg,
16576 int subr, unification_kind_t strict, int flags,
16577 bool explain_p)
16578 {
16579 tree arg_expr = NULL_TREE;
16580 int arg_strict;
16581
16582 if (arg == error_mark_node || parm == error_mark_node)
16583 return unify_invalid (explain_p);
16584 if (arg == unknown_type_node)
16585 /* We can't deduce anything from this, but we might get all the
16586 template args from other function args. */
16587 return unify_success (explain_p);
16588
16589 /* Implicit conversions (Clause 4) will be performed on a function
16590 argument to convert it to the type of the corresponding function
16591 parameter if the parameter type contains no template-parameters that
16592 participate in template argument deduction. */
16593 if (TYPE_P (parm) && !uses_template_parms (parm))
16594 /* For function parameters that contain no template-parameters at all,
16595 we have historically checked for convertibility in order to shortcut
16596 consideration of this candidate. */
16597 return check_non_deducible_conversion (parm, arg, strict, flags,
16598 explain_p);
16599 else if (strict == DEDUCE_CALL
16600 && TYPE_P (parm) && !uses_deducible_template_parms (parm))
16601 /* For function parameters with only non-deducible template parameters,
16602 just return. */
16603 return unify_success (explain_p);
16604
16605 switch (strict)
16606 {
16607 case DEDUCE_CALL:
16608 arg_strict = (UNIFY_ALLOW_OUTER_LEVEL
16609 | UNIFY_ALLOW_MORE_CV_QUAL
16610 | UNIFY_ALLOW_DERIVED);
16611 break;
16612
16613 case DEDUCE_CONV:
16614 arg_strict = UNIFY_ALLOW_LESS_CV_QUAL;
16615 break;
16616
16617 case DEDUCE_EXACT:
16618 arg_strict = UNIFY_ALLOW_NONE;
16619 break;
16620
16621 default:
16622 gcc_unreachable ();
16623 }
16624
16625 /* We only do these transformations if this is the top-level
16626 parameter_type_list in a call or declaration matching; in other
16627 situations (nested function declarators, template argument lists) we
16628 won't be comparing a type to an expression, and we don't do any type
16629 adjustments. */
16630 if (!subr)
16631 {
16632 if (!TYPE_P (arg))
16633 {
16634 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
16635 if (type_unknown_p (arg))
16636 {
16637 /* [temp.deduct.type] A template-argument can be
16638 deduced from a pointer to function or pointer
16639 to member function argument if the set of
16640 overloaded functions does not contain function
16641 templates and at most one of a set of
16642 overloaded functions provides a unique
16643 match. */
16644
16645 if (resolve_overloaded_unification
16646 (tparms, targs, parm, arg, strict,
16647 arg_strict, explain_p))
16648 return unify_success (explain_p);
16649 return unify_overload_resolution_failure (explain_p, arg);
16650 }
16651
16652 arg_expr = arg;
16653 arg = unlowered_expr_type (arg);
16654 if (arg == error_mark_node)
16655 return unify_invalid (explain_p);
16656 }
16657
16658 arg_strict |=
16659 maybe_adjust_types_for_deduction (strict, &parm, &arg, arg_expr);
16660 }
16661 else
16662 if ((TYPE_P (parm) || TREE_CODE (parm) == TEMPLATE_DECL)
16663 != (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL))
16664 return unify_template_argument_mismatch (explain_p, parm, arg);
16665
16666 /* For deduction from an init-list we need the actual list. */
16667 if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
16668 arg = arg_expr;
16669 return unify (tparms, targs, parm, arg, arg_strict, explain_p);
16670 }
16671
16672 /* Most parms like fn_type_unification.
16673
16674 If SUBR is 1, we're being called recursively (to unify the
16675 arguments of a function or method parameter of a function
16676 template).
16677
16678 CHECKS is a pointer to a vector of access checks encountered while
16679 substituting default template arguments. */
16680
16681 static int
16682 type_unification_real (tree tparms,
16683 tree targs,
16684 tree xparms,
16685 const tree *xargs,
16686 unsigned int xnargs,
16687 int subr,
16688 unification_kind_t strict,
16689 int flags,
16690 vec<deferred_access_check, va_gc> **checks,
16691 bool explain_p)
16692 {
16693 tree parm, arg;
16694 int i;
16695 int ntparms = TREE_VEC_LENGTH (tparms);
16696 int saw_undeduced = 0;
16697 tree parms;
16698 const tree *args;
16699 unsigned int nargs;
16700 unsigned int ia;
16701
16702 gcc_assert (TREE_CODE (tparms) == TREE_VEC);
16703 gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
16704 gcc_assert (ntparms > 0);
16705
16706 /* Reset the number of non-defaulted template arguments contained
16707 in TARGS. */
16708 NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
16709
16710 again:
16711 parms = xparms;
16712 args = xargs;
16713 nargs = xnargs;
16714
16715 ia = 0;
16716 while (parms && parms != void_list_node
16717 && ia < nargs)
16718 {
16719 parm = TREE_VALUE (parms);
16720
16721 if (TREE_CODE (parm) == TYPE_PACK_EXPANSION
16722 && (!TREE_CHAIN (parms) || TREE_CHAIN (parms) == void_list_node))
16723 /* For a function parameter pack that occurs at the end of the
16724 parameter-declaration-list, the type A of each remaining
16725 argument of the call is compared with the type P of the
16726 declarator-id of the function parameter pack. */
16727 break;
16728
16729 parms = TREE_CHAIN (parms);
16730
16731 if (TREE_CODE (parm) == TYPE_PACK_EXPANSION)
16732 /* For a function parameter pack that does not occur at the
16733 end of the parameter-declaration-list, the type of the
16734 parameter pack is a non-deduced context. */
16735 continue;
16736
16737 arg = args[ia];
16738 ++ia;
16739
16740 if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
16741 flags, explain_p))
16742 return 1;
16743 }
16744
16745 if (parms
16746 && parms != void_list_node
16747 && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
16748 {
16749 /* Unify the remaining arguments with the pack expansion type. */
16750 tree argvec;
16751 tree parmvec = make_tree_vec (1);
16752
16753 /* Allocate a TREE_VEC and copy in all of the arguments */
16754 argvec = make_tree_vec (nargs - ia);
16755 for (i = 0; ia < nargs; ++ia, ++i)
16756 TREE_VEC_ELT (argvec, i) = args[ia];
16757
16758 /* Copy the parameter into parmvec. */
16759 TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
16760 if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
16761 /*subr=*/subr, explain_p))
16762 return 1;
16763
16764 /* Advance to the end of the list of parameters. */
16765 parms = TREE_CHAIN (parms);
16766 }
16767
16768 /* Fail if we've reached the end of the parm list, and more args
16769 are present, and the parm list isn't variadic. */
16770 if (ia < nargs && parms == void_list_node)
16771 return unify_too_many_arguments (explain_p, nargs, ia);
16772 /* Fail if parms are left and they don't have default values and
16773 they aren't all deduced as empty packs (c++/57397). This is
16774 consistent with sufficient_parms_p. */
16775 if (parms && parms != void_list_node
16776 && TREE_PURPOSE (parms) == NULL_TREE)
16777 {
16778 unsigned int count = nargs;
16779 tree p = parms;
16780 bool type_pack_p;
16781 do
16782 {
16783 type_pack_p = TREE_CODE (TREE_VALUE (p)) == TYPE_PACK_EXPANSION;
16784 if (!type_pack_p)
16785 count++;
16786 p = TREE_CHAIN (p);
16787 }
16788 while (p && p != void_list_node);
16789 if (count != nargs)
16790 return unify_too_few_arguments (explain_p, ia, count,
16791 type_pack_p);
16792 }
16793
16794 if (!subr)
16795 {
16796 tsubst_flags_t complain = (explain_p
16797 ? tf_warning_or_error
16798 : tf_none);
16799
16800 for (i = 0; i < ntparms; i++)
16801 {
16802 tree targ = TREE_VEC_ELT (targs, i);
16803 tree tparm = TREE_VEC_ELT (tparms, i);
16804
16805 /* Clear the "incomplete" flags on all argument packs now so that
16806 substituting them into later default arguments works. */
16807 if (targ && ARGUMENT_PACK_P (targ))
16808 {
16809 ARGUMENT_PACK_INCOMPLETE_P (targ) = 0;
16810 ARGUMENT_PACK_EXPLICIT_ARGS (targ) = NULL_TREE;
16811 }
16812
16813 if (targ || tparm == error_mark_node)
16814 continue;
16815 tparm = TREE_VALUE (tparm);
16816
16817 /* If this is an undeduced nontype parameter that depends on
16818 a type parameter, try another pass; its type may have been
16819 deduced from a later argument than the one from which
16820 this parameter can be deduced. */
16821 if (TREE_CODE (tparm) == PARM_DECL
16822 && uses_template_parms (TREE_TYPE (tparm))
16823 && !saw_undeduced++)
16824 goto again;
16825
16826 /* Core issue #226 (C++0x) [temp.deduct]:
16827
16828 If a template argument has not been deduced, its
16829 default template argument, if any, is used.
16830
16831 When we are in C++98 mode, TREE_PURPOSE will either
16832 be NULL_TREE or ERROR_MARK_NODE, so we do not need
16833 to explicitly check cxx_dialect here. */
16834 if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
16835 {
16836 tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
16837 tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i));
16838 reopen_deferring_access_checks (*checks);
16839 location_t save_loc = input_location;
16840 if (DECL_P (parm))
16841 input_location = DECL_SOURCE_LOCATION (parm);
16842 arg = tsubst_template_arg (arg, targs, complain, NULL_TREE);
16843 arg = convert_template_argument (parm, arg, targs, complain,
16844 i, NULL_TREE);
16845 input_location = save_loc;
16846 *checks = get_deferred_access_checks ();
16847 pop_deferring_access_checks ();
16848 if (arg == error_mark_node)
16849 return 1;
16850 else
16851 {
16852 TREE_VEC_ELT (targs, i) = arg;
16853 /* The position of the first default template argument,
16854 is also the number of non-defaulted arguments in TARGS.
16855 Record that. */
16856 if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
16857 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
16858 continue;
16859 }
16860 }
16861
16862 /* If the type parameter is a parameter pack, then it will
16863 be deduced to an empty parameter pack. */
16864 if (template_parameter_pack_p (tparm))
16865 {
16866 tree arg;
16867
16868 if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
16869 {
16870 arg = make_node (NONTYPE_ARGUMENT_PACK);
16871 TREE_TYPE (arg) = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
16872 TREE_CONSTANT (arg) = 1;
16873 }
16874 else
16875 arg = cxx_make_type (TYPE_ARGUMENT_PACK);
16876
16877 SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
16878
16879 TREE_VEC_ELT (targs, i) = arg;
16880 continue;
16881 }
16882
16883 return unify_parameter_deduction_failure (explain_p, tparm);
16884 }
16885 }
16886 #ifdef ENABLE_CHECKING
16887 if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
16888 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
16889 #endif
16890
16891 return unify_success (explain_p);
16892 }
16893
16894 /* Subroutine of type_unification_real. Args are like the variables
16895 at the call site. ARG is an overloaded function (or template-id);
16896 we try deducing template args from each of the overloads, and if
16897 only one succeeds, we go with that. Modifies TARGS and returns
16898 true on success. */
16899
16900 static bool
16901 resolve_overloaded_unification (tree tparms,
16902 tree targs,
16903 tree parm,
16904 tree arg,
16905 unification_kind_t strict,
16906 int sub_strict,
16907 bool explain_p)
16908 {
16909 tree tempargs = copy_node (targs);
16910 int good = 0;
16911 tree goodfn = NULL_TREE;
16912 bool addr_p;
16913
16914 if (TREE_CODE (arg) == ADDR_EXPR)
16915 {
16916 arg = TREE_OPERAND (arg, 0);
16917 addr_p = true;
16918 }
16919 else
16920 addr_p = false;
16921
16922 if (TREE_CODE (arg) == COMPONENT_REF)
16923 /* Handle `&x' where `x' is some static or non-static member
16924 function name. */
16925 arg = TREE_OPERAND (arg, 1);
16926
16927 if (TREE_CODE (arg) == OFFSET_REF)
16928 arg = TREE_OPERAND (arg, 1);
16929
16930 /* Strip baselink information. */
16931 if (BASELINK_P (arg))
16932 arg = BASELINK_FUNCTIONS (arg);
16933
16934 if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
16935 {
16936 /* If we got some explicit template args, we need to plug them into
16937 the affected templates before we try to unify, in case the
16938 explicit args will completely resolve the templates in question. */
16939
16940 int ok = 0;
16941 tree expl_subargs = TREE_OPERAND (arg, 1);
16942 arg = TREE_OPERAND (arg, 0);
16943
16944 for (; arg; arg = OVL_NEXT (arg))
16945 {
16946 tree fn = OVL_CURRENT (arg);
16947 tree subargs, elem;
16948
16949 if (TREE_CODE (fn) != TEMPLATE_DECL)
16950 continue;
16951
16952 subargs = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
16953 expl_subargs, NULL_TREE, tf_none,
16954 /*require_all_args=*/true,
16955 /*use_default_args=*/true);
16956 if (subargs != error_mark_node
16957 && !any_dependent_template_arguments_p (subargs))
16958 {
16959 elem = TREE_TYPE (instantiate_template (fn, subargs, tf_none));
16960 if (try_one_overload (tparms, targs, tempargs, parm,
16961 elem, strict, sub_strict, addr_p, explain_p)
16962 && (!goodfn || !same_type_p (goodfn, elem)))
16963 {
16964 goodfn = elem;
16965 ++good;
16966 }
16967 }
16968 else if (subargs)
16969 ++ok;
16970 }
16971 /* If no templates (or more than one) are fully resolved by the
16972 explicit arguments, this template-id is a non-deduced context; it
16973 could still be OK if we deduce all template arguments for the
16974 enclosing call through other arguments. */
16975 if (good != 1)
16976 good = ok;
16977 }
16978 else if (TREE_CODE (arg) != OVERLOAD
16979 && TREE_CODE (arg) != FUNCTION_DECL)
16980 /* If ARG is, for example, "(0, &f)" then its type will be unknown
16981 -- but the deduction does not succeed because the expression is
16982 not just the function on its own. */
16983 return false;
16984 else
16985 for (; arg; arg = OVL_NEXT (arg))
16986 if (try_one_overload (tparms, targs, tempargs, parm,
16987 TREE_TYPE (OVL_CURRENT (arg)),
16988 strict, sub_strict, addr_p, explain_p)
16989 && (!goodfn || !decls_match (goodfn, OVL_CURRENT (arg))))
16990 {
16991 goodfn = OVL_CURRENT (arg);
16992 ++good;
16993 }
16994
16995 /* [temp.deduct.type] A template-argument can be deduced from a pointer
16996 to function or pointer to member function argument if the set of
16997 overloaded functions does not contain function templates and at most
16998 one of a set of overloaded functions provides a unique match.
16999
17000 So if we found multiple possibilities, we return success but don't
17001 deduce anything. */
17002
17003 if (good == 1)
17004 {
17005 int i = TREE_VEC_LENGTH (targs);
17006 for (; i--; )
17007 if (TREE_VEC_ELT (tempargs, i))
17008 {
17009 tree old = TREE_VEC_ELT (targs, i);
17010 tree new_ = TREE_VEC_ELT (tempargs, i);
17011 if (new_ && old && ARGUMENT_PACK_P (old)
17012 && ARGUMENT_PACK_EXPLICIT_ARGS (old))
17013 /* Don't forget explicit template arguments in a pack. */
17014 ARGUMENT_PACK_EXPLICIT_ARGS (new_)
17015 = ARGUMENT_PACK_EXPLICIT_ARGS (old);
17016 TREE_VEC_ELT (targs, i) = new_;
17017 }
17018 }
17019 if (good)
17020 return true;
17021
17022 return false;
17023 }
17024
17025 /* Core DR 115: In contexts where deduction is done and fails, or in
17026 contexts where deduction is not done, if a template argument list is
17027 specified and it, along with any default template arguments, identifies
17028 a single function template specialization, then the template-id is an
17029 lvalue for the function template specialization. */
17030
17031 tree
17032 resolve_nondeduced_context (tree orig_expr)
17033 {
17034 tree expr, offset, baselink;
17035 bool addr;
17036
17037 if (!type_unknown_p (orig_expr))
17038 return orig_expr;
17039
17040 expr = orig_expr;
17041 addr = false;
17042 offset = NULL_TREE;
17043 baselink = NULL_TREE;
17044
17045 if (TREE_CODE (expr) == ADDR_EXPR)
17046 {
17047 expr = TREE_OPERAND (expr, 0);
17048 addr = true;
17049 }
17050 if (TREE_CODE (expr) == OFFSET_REF)
17051 {
17052 offset = expr;
17053 expr = TREE_OPERAND (expr, 1);
17054 }
17055 if (BASELINK_P (expr))
17056 {
17057 baselink = expr;
17058 expr = BASELINK_FUNCTIONS (expr);
17059 }
17060
17061 if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
17062 {
17063 int good = 0;
17064 tree goodfn = NULL_TREE;
17065
17066 /* If we got some explicit template args, we need to plug them into
17067 the affected templates before we try to unify, in case the
17068 explicit args will completely resolve the templates in question. */
17069
17070 tree expl_subargs = TREE_OPERAND (expr, 1);
17071 tree arg = TREE_OPERAND (expr, 0);
17072 tree badfn = NULL_TREE;
17073 tree badargs = NULL_TREE;
17074
17075 for (; arg; arg = OVL_NEXT (arg))
17076 {
17077 tree fn = OVL_CURRENT (arg);
17078 tree subargs, elem;
17079
17080 if (TREE_CODE (fn) != TEMPLATE_DECL)
17081 continue;
17082
17083 subargs = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
17084 expl_subargs, NULL_TREE, tf_none,
17085 /*require_all_args=*/true,
17086 /*use_default_args=*/true);
17087 if (subargs != error_mark_node
17088 && !any_dependent_template_arguments_p (subargs))
17089 {
17090 elem = instantiate_template (fn, subargs, tf_none);
17091 if (elem == error_mark_node)
17092 {
17093 badfn = fn;
17094 badargs = subargs;
17095 }
17096 else if (elem && (!goodfn || !decls_match (goodfn, elem)))
17097 {
17098 goodfn = elem;
17099 ++good;
17100 }
17101 }
17102 }
17103 if (good == 1)
17104 {
17105 mark_used (goodfn);
17106 expr = goodfn;
17107 if (baselink)
17108 expr = build_baselink (BASELINK_BINFO (baselink),
17109 BASELINK_ACCESS_BINFO (baselink),
17110 expr, BASELINK_OPTYPE (baselink));
17111 if (offset)
17112 {
17113 tree base
17114 = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (offset, 0)));
17115 expr = build_offset_ref (base, expr, addr, tf_warning_or_error);
17116 }
17117 if (addr)
17118 expr = cp_build_addr_expr (expr, tf_warning_or_error);
17119 return expr;
17120 }
17121 else if (good == 0 && badargs)
17122 /* There were no good options and at least one bad one, so let the
17123 user know what the problem is. */
17124 instantiate_template (badfn, badargs, tf_warning_or_error);
17125 }
17126 return orig_expr;
17127 }
17128
17129 /* Subroutine of resolve_overloaded_unification; does deduction for a single
17130 overload. Fills TARGS with any deduced arguments, or error_mark_node if
17131 different overloads deduce different arguments for a given parm.
17132 ADDR_P is true if the expression for which deduction is being
17133 performed was of the form "& fn" rather than simply "fn".
17134
17135 Returns 1 on success. */
17136
17137 static int
17138 try_one_overload (tree tparms,
17139 tree orig_targs,
17140 tree targs,
17141 tree parm,
17142 tree arg,
17143 unification_kind_t strict,
17144 int sub_strict,
17145 bool addr_p,
17146 bool explain_p)
17147 {
17148 int nargs;
17149 tree tempargs;
17150 int i;
17151
17152 if (arg == error_mark_node)
17153 return 0;
17154
17155 /* [temp.deduct.type] A template-argument can be deduced from a pointer
17156 to function or pointer to member function argument if the set of
17157 overloaded functions does not contain function templates and at most
17158 one of a set of overloaded functions provides a unique match.
17159
17160 So if this is a template, just return success. */
17161
17162 if (uses_template_parms (arg))
17163 return 1;
17164
17165 if (TREE_CODE (arg) == METHOD_TYPE)
17166 arg = build_ptrmemfunc_type (build_pointer_type (arg));
17167 else if (addr_p)
17168 arg = build_pointer_type (arg);
17169
17170 sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
17171
17172 /* We don't copy orig_targs for this because if we have already deduced
17173 some template args from previous args, unify would complain when we
17174 try to deduce a template parameter for the same argument, even though
17175 there isn't really a conflict. */
17176 nargs = TREE_VEC_LENGTH (targs);
17177 tempargs = make_tree_vec (nargs);
17178
17179 if (unify (tparms, tempargs, parm, arg, sub_strict, explain_p))
17180 return 0;
17181
17182 /* First make sure we didn't deduce anything that conflicts with
17183 explicitly specified args. */
17184 for (i = nargs; i--; )
17185 {
17186 tree elt = TREE_VEC_ELT (tempargs, i);
17187 tree oldelt = TREE_VEC_ELT (orig_targs, i);
17188
17189 if (!elt)
17190 /*NOP*/;
17191 else if (uses_template_parms (elt))
17192 /* Since we're unifying against ourselves, we will fill in
17193 template args used in the function parm list with our own
17194 template parms. Discard them. */
17195 TREE_VEC_ELT (tempargs, i) = NULL_TREE;
17196 else if (oldelt && !template_args_equal (oldelt, elt))
17197 return 0;
17198 }
17199
17200 for (i = nargs; i--; )
17201 {
17202 tree elt = TREE_VEC_ELT (tempargs, i);
17203
17204 if (elt)
17205 TREE_VEC_ELT (targs, i) = elt;
17206 }
17207
17208 return 1;
17209 }
17210
17211 /* PARM is a template class (perhaps with unbound template
17212 parameters). ARG is a fully instantiated type. If ARG can be
17213 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
17214 TARGS are as for unify. */
17215
17216 static tree
17217 try_class_unification (tree tparms, tree targs, tree parm, tree arg,
17218 bool explain_p)
17219 {
17220 tree copy_of_targs;
17221
17222 if (!CLASSTYPE_TEMPLATE_INFO (arg)
17223 || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
17224 != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
17225 return NULL_TREE;
17226
17227 /* We need to make a new template argument vector for the call to
17228 unify. If we used TARGS, we'd clutter it up with the result of
17229 the attempted unification, even if this class didn't work out.
17230 We also don't want to commit ourselves to all the unifications
17231 we've already done, since unification is supposed to be done on
17232 an argument-by-argument basis. In other words, consider the
17233 following pathological case:
17234
17235 template <int I, int J, int K>
17236 struct S {};
17237
17238 template <int I, int J>
17239 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
17240
17241 template <int I, int J, int K>
17242 void f(S<I, J, K>, S<I, I, I>);
17243
17244 void g() {
17245 S<0, 0, 0> s0;
17246 S<0, 1, 2> s2;
17247
17248 f(s0, s2);
17249 }
17250
17251 Now, by the time we consider the unification involving `s2', we
17252 already know that we must have `f<0, 0, 0>'. But, even though
17253 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
17254 because there are two ways to unify base classes of S<0, 1, 2>
17255 with S<I, I, I>. If we kept the already deduced knowledge, we
17256 would reject the possibility I=1. */
17257 copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
17258
17259 /* If unification failed, we're done. */
17260 if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
17261 CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE, explain_p))
17262 return NULL_TREE;
17263
17264 return arg;
17265 }
17266
17267 /* Given a template type PARM and a class type ARG, find the unique
17268 base type in ARG that is an instance of PARM. We do not examine
17269 ARG itself; only its base-classes. If there is not exactly one
17270 appropriate base class, return NULL_TREE. PARM may be the type of
17271 a partial specialization, as well as a plain template type. Used
17272 by unify. */
17273
17274 static enum template_base_result
17275 get_template_base (tree tparms, tree targs, tree parm, tree arg,
17276 bool explain_p, tree *result)
17277 {
17278 tree rval = NULL_TREE;
17279 tree binfo;
17280
17281 gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
17282
17283 binfo = TYPE_BINFO (complete_type (arg));
17284 if (!binfo)
17285 {
17286 /* The type could not be completed. */
17287 *result = NULL_TREE;
17288 return tbr_incomplete_type;
17289 }
17290
17291 /* Walk in inheritance graph order. The search order is not
17292 important, and this avoids multiple walks of virtual bases. */
17293 for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
17294 {
17295 tree r = try_class_unification (tparms, targs, parm,
17296 BINFO_TYPE (binfo), explain_p);
17297
17298 if (r)
17299 {
17300 /* If there is more than one satisfactory baseclass, then:
17301
17302 [temp.deduct.call]
17303
17304 If they yield more than one possible deduced A, the type
17305 deduction fails.
17306
17307 applies. */
17308 if (rval && !same_type_p (r, rval))
17309 {
17310 *result = NULL_TREE;
17311 return tbr_ambiguous_baseclass;
17312 }
17313
17314 rval = r;
17315 }
17316 }
17317
17318 *result = rval;
17319 return tbr_success;
17320 }
17321
17322 /* Returns the level of DECL, which declares a template parameter. */
17323
17324 static int
17325 template_decl_level (tree decl)
17326 {
17327 switch (TREE_CODE (decl))
17328 {
17329 case TYPE_DECL:
17330 case TEMPLATE_DECL:
17331 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
17332
17333 case PARM_DECL:
17334 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
17335
17336 default:
17337 gcc_unreachable ();
17338 }
17339 return 0;
17340 }
17341
17342 /* Decide whether ARG can be unified with PARM, considering only the
17343 cv-qualifiers of each type, given STRICT as documented for unify.
17344 Returns nonzero iff the unification is OK on that basis. */
17345
17346 static int
17347 check_cv_quals_for_unify (int strict, tree arg, tree parm)
17348 {
17349 int arg_quals = cp_type_quals (arg);
17350 int parm_quals = cp_type_quals (parm);
17351
17352 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
17353 && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
17354 {
17355 /* Although a CVR qualifier is ignored when being applied to a
17356 substituted template parameter ([8.3.2]/1 for example), that
17357 does not allow us to unify "const T" with "int&" because both
17358 types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
17359 It is ok when we're allowing additional CV qualifiers
17360 at the outer level [14.8.2.1]/3,1st bullet. */
17361 if ((TREE_CODE (arg) == REFERENCE_TYPE
17362 || TREE_CODE (arg) == FUNCTION_TYPE
17363 || TREE_CODE (arg) == METHOD_TYPE)
17364 && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
17365 return 0;
17366
17367 if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
17368 && (parm_quals & TYPE_QUAL_RESTRICT))
17369 return 0;
17370 }
17371
17372 if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
17373 && (arg_quals & parm_quals) != parm_quals)
17374 return 0;
17375
17376 if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
17377 && (parm_quals & arg_quals) != arg_quals)
17378 return 0;
17379
17380 return 1;
17381 }
17382
17383 /* Determines the LEVEL and INDEX for the template parameter PARM. */
17384 void
17385 template_parm_level_and_index (tree parm, int* level, int* index)
17386 {
17387 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
17388 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
17389 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
17390 {
17391 *index = TEMPLATE_TYPE_IDX (parm);
17392 *level = TEMPLATE_TYPE_LEVEL (parm);
17393 }
17394 else
17395 {
17396 *index = TEMPLATE_PARM_IDX (parm);
17397 *level = TEMPLATE_PARM_LEVEL (parm);
17398 }
17399 }
17400
17401 #define RECUR_AND_CHECK_FAILURE(TP, TA, P, A, S, EP) \
17402 do { \
17403 if (unify (TP, TA, P, A, S, EP)) \
17404 return 1; \
17405 } while (0);
17406
17407 /* Unifies the remaining arguments in PACKED_ARGS with the pack
17408 expansion at the end of PACKED_PARMS. Returns 0 if the type
17409 deduction succeeds, 1 otherwise. STRICT is the same as in
17410 unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
17411 call argument list. We'll need to adjust the arguments to make them
17412 types. SUBR tells us if this is from a recursive call to
17413 type_unification_real, or for comparing two template argument
17414 lists. */
17415
17416 static int
17417 unify_pack_expansion (tree tparms, tree targs, tree packed_parms,
17418 tree packed_args, unification_kind_t strict,
17419 bool subr, bool explain_p)
17420 {
17421 tree parm
17422 = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
17423 tree pattern = PACK_EXPANSION_PATTERN (parm);
17424 tree pack, packs = NULL_TREE;
17425 int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
17426
17427 packed_args = expand_template_argument_pack (packed_args);
17428
17429 int len = TREE_VEC_LENGTH (packed_args);
17430
17431 /* Determine the parameter packs we will be deducing from the
17432 pattern, and record their current deductions. */
17433 for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm);
17434 pack; pack = TREE_CHAIN (pack))
17435 {
17436 tree parm_pack = TREE_VALUE (pack);
17437 int idx, level;
17438
17439 /* Determine the index and level of this parameter pack. */
17440 template_parm_level_and_index (parm_pack, &level, &idx);
17441
17442 /* Keep track of the parameter packs and their corresponding
17443 argument packs. */
17444 packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
17445 TREE_TYPE (packs) = make_tree_vec (len - start);
17446 }
17447
17448 /* Loop through all of the arguments that have not yet been
17449 unified and unify each with the pattern. */
17450 for (i = start; i < len; i++)
17451 {
17452 tree parm;
17453 bool any_explicit = false;
17454 tree arg = TREE_VEC_ELT (packed_args, i);
17455
17456 /* For each parameter pack, set its TMPL_ARG to either NULL_TREE
17457 or the element of its argument pack at the current index if
17458 this argument was explicitly specified. */
17459 for (pack = packs; pack; pack = TREE_CHAIN (pack))
17460 {
17461 int idx, level;
17462 tree arg, pargs;
17463 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
17464
17465 arg = NULL_TREE;
17466 if (TREE_VALUE (pack)
17467 && (pargs = ARGUMENT_PACK_EXPLICIT_ARGS (TREE_VALUE (pack)))
17468 && (i - start < TREE_VEC_LENGTH (pargs)))
17469 {
17470 any_explicit = true;
17471 arg = TREE_VEC_ELT (pargs, i - start);
17472 }
17473 TMPL_ARG (targs, level, idx) = arg;
17474 }
17475
17476 /* If we had explicit template arguments, substitute them into the
17477 pattern before deduction. */
17478 if (any_explicit)
17479 {
17480 /* Some arguments might still be unspecified or dependent. */
17481 bool dependent;
17482 ++processing_template_decl;
17483 dependent = any_dependent_template_arguments_p (targs);
17484 if (!dependent)
17485 --processing_template_decl;
17486 parm = tsubst (pattern, targs,
17487 explain_p ? tf_warning_or_error : tf_none,
17488 NULL_TREE);
17489 if (dependent)
17490 --processing_template_decl;
17491 if (parm == error_mark_node)
17492 return 1;
17493 }
17494 else
17495 parm = pattern;
17496
17497 /* Unify the pattern with the current argument. */
17498 if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
17499 LOOKUP_IMPLICIT, explain_p))
17500 return 1;
17501
17502 /* For each parameter pack, collect the deduced value. */
17503 for (pack = packs; pack; pack = TREE_CHAIN (pack))
17504 {
17505 int idx, level;
17506 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
17507
17508 TREE_VEC_ELT (TREE_TYPE (pack), i - start) =
17509 TMPL_ARG (targs, level, idx);
17510 }
17511 }
17512
17513 /* Verify that the results of unification with the parameter packs
17514 produce results consistent with what we've seen before, and make
17515 the deduced argument packs available. */
17516 for (pack = packs; pack; pack = TREE_CHAIN (pack))
17517 {
17518 tree old_pack = TREE_VALUE (pack);
17519 tree new_args = TREE_TYPE (pack);
17520 int i, len = TREE_VEC_LENGTH (new_args);
17521 int idx, level;
17522 bool nondeduced_p = false;
17523
17524 /* By default keep the original deduced argument pack.
17525 If necessary, more specific code is going to update the
17526 resulting deduced argument later down in this function. */
17527 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
17528 TMPL_ARG (targs, level, idx) = old_pack;
17529
17530 /* If NEW_ARGS contains any NULL_TREE entries, we didn't
17531 actually deduce anything. */
17532 for (i = 0; i < len && !nondeduced_p; ++i)
17533 if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
17534 nondeduced_p = true;
17535 if (nondeduced_p)
17536 continue;
17537
17538 if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
17539 {
17540 /* If we had fewer function args than explicit template args,
17541 just use the explicits. */
17542 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
17543 int explicit_len = TREE_VEC_LENGTH (explicit_args);
17544 if (len < explicit_len)
17545 new_args = explicit_args;
17546 }
17547
17548 if (!old_pack)
17549 {
17550 tree result;
17551 /* Build the deduced *_ARGUMENT_PACK. */
17552 if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
17553 {
17554 result = make_node (NONTYPE_ARGUMENT_PACK);
17555 TREE_TYPE (result) =
17556 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
17557 TREE_CONSTANT (result) = 1;
17558 }
17559 else
17560 result = cxx_make_type (TYPE_ARGUMENT_PACK);
17561
17562 SET_ARGUMENT_PACK_ARGS (result, new_args);
17563
17564 /* Note the deduced argument packs for this parameter
17565 pack. */
17566 TMPL_ARG (targs, level, idx) = result;
17567 }
17568 else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
17569 && (ARGUMENT_PACK_ARGS (old_pack)
17570 == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
17571 {
17572 /* We only had the explicitly-provided arguments before, but
17573 now we have a complete set of arguments. */
17574 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
17575
17576 SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
17577 ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
17578 ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
17579 }
17580 else
17581 {
17582 tree bad_old_arg = NULL_TREE, bad_new_arg = NULL_TREE;
17583 tree old_args = ARGUMENT_PACK_ARGS (old_pack);
17584
17585 if (!comp_template_args_with_info (old_args, new_args,
17586 &bad_old_arg, &bad_new_arg))
17587 /* Inconsistent unification of this parameter pack. */
17588 return unify_parameter_pack_inconsistent (explain_p,
17589 bad_old_arg,
17590 bad_new_arg);
17591 }
17592 }
17593
17594 return unify_success (explain_p);
17595 }
17596
17597 /* Handle unification of the domain of an array. PARM_DOM and ARG_DOM are
17598 INTEGER_TYPEs representing the TYPE_DOMAIN of ARRAY_TYPEs. The other
17599 parameters and return value are as for unify. */
17600
17601 static int
17602 unify_array_domain (tree tparms, tree targs,
17603 tree parm_dom, tree arg_dom,
17604 bool explain_p)
17605 {
17606 tree parm_max;
17607 tree arg_max;
17608 bool parm_cst;
17609 bool arg_cst;
17610
17611 /* Our representation of array types uses "N - 1" as the
17612 TYPE_MAX_VALUE for an array with "N" elements, if "N" is
17613 not an integer constant. We cannot unify arbitrarily
17614 complex expressions, so we eliminate the MINUS_EXPRs
17615 here. */
17616 parm_max = TYPE_MAX_VALUE (parm_dom);
17617 parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
17618 if (!parm_cst)
17619 {
17620 gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
17621 parm_max = TREE_OPERAND (parm_max, 0);
17622 }
17623 arg_max = TYPE_MAX_VALUE (arg_dom);
17624 arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
17625 if (!arg_cst)
17626 {
17627 /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
17628 trying to unify the type of a variable with the type
17629 of a template parameter. For example:
17630
17631 template <unsigned int N>
17632 void f (char (&) [N]);
17633 int g();
17634 void h(int i) {
17635 char a[g(i)];
17636 f(a);
17637 }
17638
17639 Here, the type of the ARG will be "int [g(i)]", and
17640 may be a SAVE_EXPR, etc. */
17641 if (TREE_CODE (arg_max) != MINUS_EXPR)
17642 return unify_vla_arg (explain_p, arg_dom);
17643 arg_max = TREE_OPERAND (arg_max, 0);
17644 }
17645
17646 /* If only one of the bounds used a MINUS_EXPR, compensate
17647 by adding one to the other bound. */
17648 if (parm_cst && !arg_cst)
17649 parm_max = fold_build2_loc (input_location, PLUS_EXPR,
17650 integer_type_node,
17651 parm_max,
17652 integer_one_node);
17653 else if (arg_cst && !parm_cst)
17654 arg_max = fold_build2_loc (input_location, PLUS_EXPR,
17655 integer_type_node,
17656 arg_max,
17657 integer_one_node);
17658
17659 return unify (tparms, targs, parm_max, arg_max,
17660 UNIFY_ALLOW_INTEGER, explain_p);
17661 }
17662
17663 /* Deduce the value of template parameters. TPARMS is the (innermost)
17664 set of template parameters to a template. TARGS is the bindings
17665 for those template parameters, as determined thus far; TARGS may
17666 include template arguments for outer levels of template parameters
17667 as well. PARM is a parameter to a template function, or a
17668 subcomponent of that parameter; ARG is the corresponding argument.
17669 This function attempts to match PARM with ARG in a manner
17670 consistent with the existing assignments in TARGS. If more values
17671 are deduced, then TARGS is updated.
17672
17673 Returns 0 if the type deduction succeeds, 1 otherwise. The
17674 parameter STRICT is a bitwise or of the following flags:
17675
17676 UNIFY_ALLOW_NONE:
17677 Require an exact match between PARM and ARG.
17678 UNIFY_ALLOW_MORE_CV_QUAL:
17679 Allow the deduced ARG to be more cv-qualified (by qualification
17680 conversion) than ARG.
17681 UNIFY_ALLOW_LESS_CV_QUAL:
17682 Allow the deduced ARG to be less cv-qualified than ARG.
17683 UNIFY_ALLOW_DERIVED:
17684 Allow the deduced ARG to be a template base class of ARG,
17685 or a pointer to a template base class of the type pointed to by
17686 ARG.
17687 UNIFY_ALLOW_INTEGER:
17688 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
17689 case for more information.
17690 UNIFY_ALLOW_OUTER_LEVEL:
17691 This is the outermost level of a deduction. Used to determine validity
17692 of qualification conversions. A valid qualification conversion must
17693 have const qualified pointers leading up to the inner type which
17694 requires additional CV quals, except at the outer level, where const
17695 is not required [conv.qual]. It would be normal to set this flag in
17696 addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
17697 UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
17698 This is the outermost level of a deduction, and PARM can be more CV
17699 qualified at this point.
17700 UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
17701 This is the outermost level of a deduction, and PARM can be less CV
17702 qualified at this point. */
17703
17704 static int
17705 unify (tree tparms, tree targs, tree parm, tree arg, int strict,
17706 bool explain_p)
17707 {
17708 int idx;
17709 tree targ;
17710 tree tparm;
17711 int strict_in = strict;
17712
17713 /* I don't think this will do the right thing with respect to types.
17714 But the only case I've seen it in so far has been array bounds, where
17715 signedness is the only information lost, and I think that will be
17716 okay. */
17717 while (TREE_CODE (parm) == NOP_EXPR)
17718 parm = TREE_OPERAND (parm, 0);
17719
17720 if (arg == error_mark_node)
17721 return unify_invalid (explain_p);
17722 if (arg == unknown_type_node
17723 || arg == init_list_type_node)
17724 /* We can't deduce anything from this, but we might get all the
17725 template args from other function args. */
17726 return unify_success (explain_p);
17727
17728 /* If PARM uses template parameters, then we can't bail out here,
17729 even if ARG == PARM, since we won't record unifications for the
17730 template parameters. We might need them if we're trying to
17731 figure out which of two things is more specialized. */
17732 if (arg == parm && !uses_template_parms (parm))
17733 return unify_success (explain_p);
17734
17735 /* Handle init lists early, so the rest of the function can assume
17736 we're dealing with a type. */
17737 if (BRACE_ENCLOSED_INITIALIZER_P (arg))
17738 {
17739 tree elt, elttype;
17740 unsigned i;
17741 tree orig_parm = parm;
17742
17743 /* Replace T with std::initializer_list<T> for deduction. */
17744 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
17745 && flag_deduce_init_list)
17746 parm = listify (parm);
17747
17748 if (!is_std_init_list (parm)
17749 && TREE_CODE (parm) != ARRAY_TYPE)
17750 /* We can only deduce from an initializer list argument if the
17751 parameter is std::initializer_list or an array; otherwise this
17752 is a non-deduced context. */
17753 return unify_success (explain_p);
17754
17755 if (TREE_CODE (parm) == ARRAY_TYPE)
17756 elttype = TREE_TYPE (parm);
17757 else
17758 elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
17759
17760 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
17761 {
17762 int elt_strict = strict;
17763
17764 if (elt == error_mark_node)
17765 return unify_invalid (explain_p);
17766
17767 if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
17768 {
17769 tree type = TREE_TYPE (elt);
17770 /* It should only be possible to get here for a call. */
17771 gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
17772 elt_strict |= maybe_adjust_types_for_deduction
17773 (DEDUCE_CALL, &elttype, &type, elt);
17774 elt = type;
17775 }
17776
17777 RECUR_AND_CHECK_FAILURE (tparms, targs, elttype, elt, elt_strict,
17778 explain_p);
17779 }
17780
17781 if (TREE_CODE (parm) == ARRAY_TYPE
17782 && deducible_array_bound (TYPE_DOMAIN (parm)))
17783 {
17784 /* Also deduce from the length of the initializer list. */
17785 tree max = size_int (CONSTRUCTOR_NELTS (arg));
17786 tree idx = compute_array_index_type (NULL_TREE, max, tf_none);
17787 if (idx == error_mark_node)
17788 return unify_invalid (explain_p);
17789 return unify_array_domain (tparms, targs, TYPE_DOMAIN (parm),
17790 idx, explain_p);
17791 }
17792
17793 /* If the std::initializer_list<T> deduction worked, replace the
17794 deduced A with std::initializer_list<A>. */
17795 if (orig_parm != parm)
17796 {
17797 idx = TEMPLATE_TYPE_IDX (orig_parm);
17798 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
17799 targ = listify (targ);
17800 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
17801 }
17802 return unify_success (explain_p);
17803 }
17804
17805 /* Immediately reject some pairs that won't unify because of
17806 cv-qualification mismatches. */
17807 if (TREE_CODE (arg) == TREE_CODE (parm)
17808 && TYPE_P (arg)
17809 /* It is the elements of the array which hold the cv quals of an array
17810 type, and the elements might be template type parms. We'll check
17811 when we recurse. */
17812 && TREE_CODE (arg) != ARRAY_TYPE
17813 /* We check the cv-qualifiers when unifying with template type
17814 parameters below. We want to allow ARG `const T' to unify with
17815 PARM `T' for example, when computing which of two templates
17816 is more specialized, for example. */
17817 && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
17818 && !check_cv_quals_for_unify (strict_in, arg, parm))
17819 return unify_cv_qual_mismatch (explain_p, parm, arg);
17820
17821 if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
17822 && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
17823 strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
17824 strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
17825 strict &= ~UNIFY_ALLOW_DERIVED;
17826 strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
17827 strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
17828
17829 switch (TREE_CODE (parm))
17830 {
17831 case TYPENAME_TYPE:
17832 case SCOPE_REF:
17833 case UNBOUND_CLASS_TEMPLATE:
17834 /* In a type which contains a nested-name-specifier, template
17835 argument values cannot be deduced for template parameters used
17836 within the nested-name-specifier. */
17837 return unify_success (explain_p);
17838
17839 case TEMPLATE_TYPE_PARM:
17840 case TEMPLATE_TEMPLATE_PARM:
17841 case BOUND_TEMPLATE_TEMPLATE_PARM:
17842 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
17843 if (error_operand_p (tparm))
17844 return unify_invalid (explain_p);
17845
17846 if (TEMPLATE_TYPE_LEVEL (parm)
17847 != template_decl_level (tparm))
17848 /* The PARM is not one we're trying to unify. Just check
17849 to see if it matches ARG. */
17850 {
17851 if (TREE_CODE (arg) == TREE_CODE (parm)
17852 && (is_auto (parm) ? is_auto (arg)
17853 : same_type_p (parm, arg)))
17854 return unify_success (explain_p);
17855 else
17856 return unify_type_mismatch (explain_p, parm, arg);
17857 }
17858 idx = TEMPLATE_TYPE_IDX (parm);
17859 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
17860 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
17861 if (error_operand_p (tparm))
17862 return unify_invalid (explain_p);
17863
17864 /* Check for mixed types and values. */
17865 if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
17866 && TREE_CODE (tparm) != TYPE_DECL)
17867 || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
17868 && TREE_CODE (tparm) != TEMPLATE_DECL))
17869 gcc_unreachable ();
17870
17871 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
17872 {
17873 /* ARG must be constructed from a template class or a template
17874 template parameter. */
17875 if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
17876 && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
17877 return unify_template_deduction_failure (explain_p, parm, arg);
17878 {
17879 tree parmvec = TYPE_TI_ARGS (parm);
17880 /* An alias template name is never deduced. */
17881 if (TYPE_ALIAS_P (arg))
17882 arg = strip_typedefs (arg);
17883 tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
17884 tree full_argvec = add_to_template_args (targs, argvec);
17885 tree parm_parms
17886 = DECL_INNERMOST_TEMPLATE_PARMS
17887 (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
17888 int i, len;
17889 int parm_variadic_p = 0;
17890
17891 /* The resolution to DR150 makes clear that default
17892 arguments for an N-argument may not be used to bind T
17893 to a template template parameter with fewer than N
17894 parameters. It is not safe to permit the binding of
17895 default arguments as an extension, as that may change
17896 the meaning of a conforming program. Consider:
17897
17898 struct Dense { static const unsigned int dim = 1; };
17899
17900 template <template <typename> class View,
17901 typename Block>
17902 void operator+(float, View<Block> const&);
17903
17904 template <typename Block,
17905 unsigned int Dim = Block::dim>
17906 struct Lvalue_proxy { operator float() const; };
17907
17908 void
17909 test_1d (void) {
17910 Lvalue_proxy<Dense> p;
17911 float b;
17912 b + p;
17913 }
17914
17915 Here, if Lvalue_proxy is permitted to bind to View, then
17916 the global operator+ will be used; if they are not, the
17917 Lvalue_proxy will be converted to float. */
17918 if (coerce_template_parms (parm_parms,
17919 full_argvec,
17920 TYPE_TI_TEMPLATE (parm),
17921 (explain_p
17922 ? tf_warning_or_error
17923 : tf_none),
17924 /*require_all_args=*/true,
17925 /*use_default_args=*/false)
17926 == error_mark_node)
17927 return 1;
17928
17929 /* Deduce arguments T, i from TT<T> or TT<i>.
17930 We check each element of PARMVEC and ARGVEC individually
17931 rather than the whole TREE_VEC since they can have
17932 different number of elements. */
17933
17934 parmvec = expand_template_argument_pack (parmvec);
17935 argvec = expand_template_argument_pack (argvec);
17936
17937 len = TREE_VEC_LENGTH (parmvec);
17938
17939 /* Check if the parameters end in a pack, making them
17940 variadic. */
17941 if (len > 0
17942 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
17943 parm_variadic_p = 1;
17944
17945 for (i = 0; i < len - parm_variadic_p; ++i)
17946 /* If the template argument list of P contains a pack
17947 expansion that is not the last template argument, the
17948 entire template argument list is a non-deduced
17949 context. */
17950 if (PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, i)))
17951 return unify_success (explain_p);
17952
17953 if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
17954 return unify_too_few_arguments (explain_p,
17955 TREE_VEC_LENGTH (argvec), len);
17956
17957 for (i = 0; i < len - parm_variadic_p; ++i)
17958 {
17959 RECUR_AND_CHECK_FAILURE (tparms, targs,
17960 TREE_VEC_ELT (parmvec, i),
17961 TREE_VEC_ELT (argvec, i),
17962 UNIFY_ALLOW_NONE, explain_p);
17963 }
17964
17965 if (parm_variadic_p
17966 && unify_pack_expansion (tparms, targs,
17967 parmvec, argvec,
17968 DEDUCE_EXACT,
17969 /*subr=*/true, explain_p))
17970 return 1;
17971 }
17972 arg = TYPE_TI_TEMPLATE (arg);
17973
17974 /* Fall through to deduce template name. */
17975 }
17976
17977 if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
17978 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
17979 {
17980 /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>. */
17981
17982 /* Simple cases: Value already set, does match or doesn't. */
17983 if (targ != NULL_TREE && template_args_equal (targ, arg))
17984 return unify_success (explain_p);
17985 else if (targ)
17986 return unify_inconsistency (explain_p, parm, targ, arg);
17987 }
17988 else
17989 {
17990 /* If PARM is `const T' and ARG is only `int', we don't have
17991 a match unless we are allowing additional qualification.
17992 If ARG is `const int' and PARM is just `T' that's OK;
17993 that binds `const int' to `T'. */
17994 if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
17995 arg, parm))
17996 return unify_cv_qual_mismatch (explain_p, parm, arg);
17997
17998 /* Consider the case where ARG is `const volatile int' and
17999 PARM is `const T'. Then, T should be `volatile int'. */
18000 arg = cp_build_qualified_type_real
18001 (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
18002 if (arg == error_mark_node)
18003 return unify_invalid (explain_p);
18004
18005 /* Simple cases: Value already set, does match or doesn't. */
18006 if (targ != NULL_TREE && same_type_p (targ, arg))
18007 return unify_success (explain_p);
18008 else if (targ)
18009 return unify_inconsistency (explain_p, parm, targ, arg);
18010
18011 /* Make sure that ARG is not a variable-sized array. (Note
18012 that were talking about variable-sized arrays (like
18013 `int[n]'), rather than arrays of unknown size (like
18014 `int[]').) We'll get very confused by such a type since
18015 the bound of the array is not constant, and therefore
18016 not mangleable. Besides, such types are not allowed in
18017 ISO C++, so we can do as we please here. We do allow
18018 them for 'auto' deduction, since that isn't ABI-exposed. */
18019 if (!is_auto (parm) && variably_modified_type_p (arg, NULL_TREE))
18020 return unify_vla_arg (explain_p, arg);
18021
18022 /* Strip typedefs as in convert_template_argument. */
18023 arg = canonicalize_type_argument (arg, tf_none);
18024 }
18025
18026 /* If ARG is a parameter pack or an expansion, we cannot unify
18027 against it unless PARM is also a parameter pack. */
18028 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
18029 && !template_parameter_pack_p (parm))
18030 return unify_parameter_pack_mismatch (explain_p, parm, arg);
18031
18032 /* If the argument deduction results is a METHOD_TYPE,
18033 then there is a problem.
18034 METHOD_TYPE doesn't map to any real C++ type the result of
18035 the deduction can not be of that type. */
18036 if (TREE_CODE (arg) == METHOD_TYPE)
18037 return unify_method_type_error (explain_p, arg);
18038
18039 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
18040 return unify_success (explain_p);
18041
18042 case TEMPLATE_PARM_INDEX:
18043 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
18044 if (error_operand_p (tparm))
18045 return unify_invalid (explain_p);
18046
18047 if (TEMPLATE_PARM_LEVEL (parm)
18048 != template_decl_level (tparm))
18049 {
18050 /* The PARM is not one we're trying to unify. Just check
18051 to see if it matches ARG. */
18052 int result = !(TREE_CODE (arg) == TREE_CODE (parm)
18053 && cp_tree_equal (parm, arg));
18054 if (result)
18055 unify_expression_unequal (explain_p, parm, arg);
18056 return result;
18057 }
18058
18059 idx = TEMPLATE_PARM_IDX (parm);
18060 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
18061
18062 if (targ)
18063 {
18064 int x = !cp_tree_equal (targ, arg);
18065 if (x)
18066 unify_inconsistency (explain_p, parm, targ, arg);
18067 return x;
18068 }
18069
18070 /* [temp.deduct.type] If, in the declaration of a function template
18071 with a non-type template-parameter, the non-type
18072 template-parameter is used in an expression in the function
18073 parameter-list and, if the corresponding template-argument is
18074 deduced, the template-argument type shall match the type of the
18075 template-parameter exactly, except that a template-argument
18076 deduced from an array bound may be of any integral type.
18077 The non-type parameter might use already deduced type parameters. */
18078 tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
18079 if (!TREE_TYPE (arg))
18080 /* Template-parameter dependent expression. Just accept it for now.
18081 It will later be processed in convert_template_argument. */
18082 ;
18083 else if (same_type_p (TREE_TYPE (arg), tparm))
18084 /* OK */;
18085 else if ((strict & UNIFY_ALLOW_INTEGER)
18086 && CP_INTEGRAL_TYPE_P (tparm))
18087 /* Convert the ARG to the type of PARM; the deduced non-type
18088 template argument must exactly match the types of the
18089 corresponding parameter. */
18090 arg = fold (build_nop (tparm, arg));
18091 else if (uses_template_parms (tparm))
18092 /* We haven't deduced the type of this parameter yet. Try again
18093 later. */
18094 return unify_success (explain_p);
18095 else
18096 return unify_type_mismatch (explain_p, tparm, TREE_TYPE (arg));
18097
18098 /* If ARG is a parameter pack or an expansion, we cannot unify
18099 against it unless PARM is also a parameter pack. */
18100 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
18101 && !TEMPLATE_PARM_PARAMETER_PACK (parm))
18102 return unify_parameter_pack_mismatch (explain_p, parm, arg);
18103
18104 arg = strip_typedefs_expr (arg);
18105 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
18106 return unify_success (explain_p);
18107
18108 case PTRMEM_CST:
18109 {
18110 /* A pointer-to-member constant can be unified only with
18111 another constant. */
18112 if (TREE_CODE (arg) != PTRMEM_CST)
18113 return unify_ptrmem_cst_mismatch (explain_p, parm, arg);
18114
18115 /* Just unify the class member. It would be useless (and possibly
18116 wrong, depending on the strict flags) to unify also
18117 PTRMEM_CST_CLASS, because we want to be sure that both parm and
18118 arg refer to the same variable, even if through different
18119 classes. For instance:
18120
18121 struct A { int x; };
18122 struct B : A { };
18123
18124 Unification of &A::x and &B::x must succeed. */
18125 return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
18126 PTRMEM_CST_MEMBER (arg), strict, explain_p);
18127 }
18128
18129 case POINTER_TYPE:
18130 {
18131 if (!TYPE_PTR_P (arg))
18132 return unify_type_mismatch (explain_p, parm, arg);
18133
18134 /* [temp.deduct.call]
18135
18136 A can be another pointer or pointer to member type that can
18137 be converted to the deduced A via a qualification
18138 conversion (_conv.qual_).
18139
18140 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
18141 This will allow for additional cv-qualification of the
18142 pointed-to types if appropriate. */
18143
18144 if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
18145 /* The derived-to-base conversion only persists through one
18146 level of pointers. */
18147 strict |= (strict_in & UNIFY_ALLOW_DERIVED);
18148
18149 return unify (tparms, targs, TREE_TYPE (parm),
18150 TREE_TYPE (arg), strict, explain_p);
18151 }
18152
18153 case REFERENCE_TYPE:
18154 if (TREE_CODE (arg) != REFERENCE_TYPE)
18155 return unify_type_mismatch (explain_p, parm, arg);
18156 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
18157 strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
18158
18159 case ARRAY_TYPE:
18160 if (TREE_CODE (arg) != ARRAY_TYPE)
18161 return unify_type_mismatch (explain_p, parm, arg);
18162 if ((TYPE_DOMAIN (parm) == NULL_TREE)
18163 != (TYPE_DOMAIN (arg) == NULL_TREE))
18164 return unify_type_mismatch (explain_p, parm, arg);
18165 RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
18166 strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
18167 if (TYPE_DOMAIN (parm) != NULL_TREE)
18168 return unify_array_domain (tparms, targs, TYPE_DOMAIN (parm),
18169 TYPE_DOMAIN (arg), explain_p);
18170 return unify_success (explain_p);
18171
18172 case REAL_TYPE:
18173 case COMPLEX_TYPE:
18174 case VECTOR_TYPE:
18175 case INTEGER_TYPE:
18176 case BOOLEAN_TYPE:
18177 case ENUMERAL_TYPE:
18178 case VOID_TYPE:
18179 case NULLPTR_TYPE:
18180 if (TREE_CODE (arg) != TREE_CODE (parm))
18181 return unify_type_mismatch (explain_p, parm, arg);
18182
18183 /* We have already checked cv-qualification at the top of the
18184 function. */
18185 if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
18186 return unify_type_mismatch (explain_p, parm, arg);
18187
18188 /* As far as unification is concerned, this wins. Later checks
18189 will invalidate it if necessary. */
18190 return unify_success (explain_p);
18191
18192 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
18193 /* Type INTEGER_CST can come from ordinary constant template args. */
18194 case INTEGER_CST:
18195 while (TREE_CODE (arg) == NOP_EXPR)
18196 arg = TREE_OPERAND (arg, 0);
18197
18198 if (TREE_CODE (arg) != INTEGER_CST)
18199 return unify_template_argument_mismatch (explain_p, parm, arg);
18200 return (tree_int_cst_equal (parm, arg)
18201 ? unify_success (explain_p)
18202 : unify_template_argument_mismatch (explain_p, parm, arg));
18203
18204 case TREE_VEC:
18205 {
18206 int i, len, argslen;
18207 int parm_variadic_p = 0;
18208
18209 if (TREE_CODE (arg) != TREE_VEC)
18210 return unify_template_argument_mismatch (explain_p, parm, arg);
18211
18212 len = TREE_VEC_LENGTH (parm);
18213 argslen = TREE_VEC_LENGTH (arg);
18214
18215 /* Check for pack expansions in the parameters. */
18216 for (i = 0; i < len; ++i)
18217 {
18218 if (PACK_EXPANSION_P (TREE_VEC_ELT (parm, i)))
18219 {
18220 if (i == len - 1)
18221 /* We can unify against something with a trailing
18222 parameter pack. */
18223 parm_variadic_p = 1;
18224 else
18225 /* [temp.deduct.type]/9: If the template argument list of
18226 P contains a pack expansion that is not the last
18227 template argument, the entire template argument list
18228 is a non-deduced context. */
18229 return unify_success (explain_p);
18230 }
18231 }
18232
18233 /* If we don't have enough arguments to satisfy the parameters
18234 (not counting the pack expression at the end), or we have
18235 too many arguments for a parameter list that doesn't end in
18236 a pack expression, we can't unify. */
18237 if (parm_variadic_p
18238 ? argslen < len - parm_variadic_p
18239 : argslen != len)
18240 return unify_arity (explain_p, TREE_VEC_LENGTH (arg), len);
18241
18242 /* Unify all of the parameters that precede the (optional)
18243 pack expression. */
18244 for (i = 0; i < len - parm_variadic_p; ++i)
18245 {
18246 RECUR_AND_CHECK_FAILURE (tparms, targs,
18247 TREE_VEC_ELT (parm, i),
18248 TREE_VEC_ELT (arg, i),
18249 UNIFY_ALLOW_NONE, explain_p);
18250 }
18251 if (parm_variadic_p)
18252 return unify_pack_expansion (tparms, targs, parm, arg,
18253 DEDUCE_EXACT,
18254 /*subr=*/true, explain_p);
18255 return unify_success (explain_p);
18256 }
18257
18258 case RECORD_TYPE:
18259 case UNION_TYPE:
18260 if (TREE_CODE (arg) != TREE_CODE (parm))
18261 return unify_type_mismatch (explain_p, parm, arg);
18262
18263 if (TYPE_PTRMEMFUNC_P (parm))
18264 {
18265 if (!TYPE_PTRMEMFUNC_P (arg))
18266 return unify_type_mismatch (explain_p, parm, arg);
18267
18268 return unify (tparms, targs,
18269 TYPE_PTRMEMFUNC_FN_TYPE (parm),
18270 TYPE_PTRMEMFUNC_FN_TYPE (arg),
18271 strict, explain_p);
18272 }
18273 else if (TYPE_PTRMEMFUNC_P (arg))
18274 return unify_type_mismatch (explain_p, parm, arg);
18275
18276 if (CLASSTYPE_TEMPLATE_INFO (parm))
18277 {
18278 tree t = NULL_TREE;
18279
18280 if (strict_in & UNIFY_ALLOW_DERIVED)
18281 {
18282 /* First, we try to unify the PARM and ARG directly. */
18283 t = try_class_unification (tparms, targs,
18284 parm, arg, explain_p);
18285
18286 if (!t)
18287 {
18288 /* Fallback to the special case allowed in
18289 [temp.deduct.call]:
18290
18291 If P is a class, and P has the form
18292 template-id, then A can be a derived class of
18293 the deduced A. Likewise, if P is a pointer to
18294 a class of the form template-id, A can be a
18295 pointer to a derived class pointed to by the
18296 deduced A. */
18297 enum template_base_result r;
18298 r = get_template_base (tparms, targs, parm, arg,
18299 explain_p, &t);
18300
18301 if (!t)
18302 return unify_no_common_base (explain_p, r, parm, arg);
18303 }
18304 }
18305 else if (CLASSTYPE_TEMPLATE_INFO (arg)
18306 && (CLASSTYPE_TI_TEMPLATE (parm)
18307 == CLASSTYPE_TI_TEMPLATE (arg)))
18308 /* Perhaps PARM is something like S<U> and ARG is S<int>.
18309 Then, we should unify `int' and `U'. */
18310 t = arg;
18311 else
18312 /* There's no chance of unification succeeding. */
18313 return unify_type_mismatch (explain_p, parm, arg);
18314
18315 return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
18316 CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE, explain_p);
18317 }
18318 else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
18319 return unify_type_mismatch (explain_p, parm, arg);
18320 return unify_success (explain_p);
18321
18322 case METHOD_TYPE:
18323 case FUNCTION_TYPE:
18324 {
18325 unsigned int nargs;
18326 tree *args;
18327 tree a;
18328 unsigned int i;
18329
18330 if (TREE_CODE (arg) != TREE_CODE (parm))
18331 return unify_type_mismatch (explain_p, parm, arg);
18332
18333 /* CV qualifications for methods can never be deduced, they must
18334 match exactly. We need to check them explicitly here,
18335 because type_unification_real treats them as any other
18336 cv-qualified parameter. */
18337 if (TREE_CODE (parm) == METHOD_TYPE
18338 && (!check_cv_quals_for_unify
18339 (UNIFY_ALLOW_NONE,
18340 class_of_this_parm (arg),
18341 class_of_this_parm (parm))))
18342 return unify_cv_qual_mismatch (explain_p, parm, arg);
18343
18344 RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm),
18345 TREE_TYPE (arg), UNIFY_ALLOW_NONE, explain_p);
18346
18347 nargs = list_length (TYPE_ARG_TYPES (arg));
18348 args = XALLOCAVEC (tree, nargs);
18349 for (a = TYPE_ARG_TYPES (arg), i = 0;
18350 a != NULL_TREE && a != void_list_node;
18351 a = TREE_CHAIN (a), ++i)
18352 args[i] = TREE_VALUE (a);
18353 nargs = i;
18354
18355 return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
18356 args, nargs, 1, DEDUCE_EXACT,
18357 LOOKUP_NORMAL, NULL, explain_p);
18358 }
18359
18360 case OFFSET_TYPE:
18361 /* Unify a pointer to member with a pointer to member function, which
18362 deduces the type of the member as a function type. */
18363 if (TYPE_PTRMEMFUNC_P (arg))
18364 {
18365 /* Check top-level cv qualifiers */
18366 if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
18367 return unify_cv_qual_mismatch (explain_p, parm, arg);
18368
18369 RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
18370 TYPE_PTRMEMFUNC_OBJECT_TYPE (arg),
18371 UNIFY_ALLOW_NONE, explain_p);
18372
18373 /* Determine the type of the function we are unifying against. */
18374 tree fntype = static_fn_type (arg);
18375
18376 return unify (tparms, targs, TREE_TYPE (parm), fntype, strict, explain_p);
18377 }
18378
18379 if (TREE_CODE (arg) != OFFSET_TYPE)
18380 return unify_type_mismatch (explain_p, parm, arg);
18381 RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
18382 TYPE_OFFSET_BASETYPE (arg),
18383 UNIFY_ALLOW_NONE, explain_p);
18384 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
18385 strict, explain_p);
18386
18387 case CONST_DECL:
18388 if (DECL_TEMPLATE_PARM_P (parm))
18389 return unify (tparms, targs, DECL_INITIAL (parm), arg, strict, explain_p);
18390 if (arg != integral_constant_value (parm))
18391 return unify_template_argument_mismatch (explain_p, parm, arg);
18392 return unify_success (explain_p);
18393
18394 case FIELD_DECL:
18395 case TEMPLATE_DECL:
18396 /* Matched cases are handled by the ARG == PARM test above. */
18397 return unify_template_argument_mismatch (explain_p, parm, arg);
18398
18399 case VAR_DECL:
18400 /* A non-type template parameter that is a variable should be a
18401 an integral constant, in which case, it whould have been
18402 folded into its (constant) value. So we should not be getting
18403 a variable here. */
18404 gcc_unreachable ();
18405
18406 case TYPE_ARGUMENT_PACK:
18407 case NONTYPE_ARGUMENT_PACK:
18408 return unify (tparms, targs, ARGUMENT_PACK_ARGS (parm),
18409 ARGUMENT_PACK_ARGS (arg), strict, explain_p);
18410
18411 case TYPEOF_TYPE:
18412 case DECLTYPE_TYPE:
18413 case UNDERLYING_TYPE:
18414 /* Cannot deduce anything from TYPEOF_TYPE, DECLTYPE_TYPE,
18415 or UNDERLYING_TYPE nodes. */
18416 return unify_success (explain_p);
18417
18418 case ERROR_MARK:
18419 /* Unification fails if we hit an error node. */
18420 return unify_invalid (explain_p);
18421
18422 case INDIRECT_REF:
18423 if (REFERENCE_REF_P (parm))
18424 return unify (tparms, targs, TREE_OPERAND (parm, 0), arg,
18425 strict, explain_p);
18426 /* FALLTHRU */
18427
18428 default:
18429 /* An unresolved overload is a nondeduced context. */
18430 if (is_overloaded_fn (parm) || type_unknown_p (parm))
18431 return unify_success (explain_p);
18432 gcc_assert (EXPR_P (parm));
18433
18434 /* We must be looking at an expression. This can happen with
18435 something like:
18436
18437 template <int I>
18438 void foo(S<I>, S<I + 2>);
18439
18440 This is a "nondeduced context":
18441
18442 [deduct.type]
18443
18444 The nondeduced contexts are:
18445
18446 --A type that is a template-id in which one or more of
18447 the template-arguments is an expression that references
18448 a template-parameter.
18449
18450 In these cases, we assume deduction succeeded, but don't
18451 actually infer any unifications. */
18452
18453 if (!uses_template_parms (parm)
18454 && !template_args_equal (parm, arg))
18455 return unify_expression_unequal (explain_p, parm, arg);
18456 else
18457 return unify_success (explain_p);
18458 }
18459 }
18460 #undef RECUR_AND_CHECK_FAILURE
18461 \f
18462 /* Note that DECL can be defined in this translation unit, if
18463 required. */
18464
18465 static void
18466 mark_definable (tree decl)
18467 {
18468 tree clone;
18469 DECL_NOT_REALLY_EXTERN (decl) = 1;
18470 FOR_EACH_CLONE (clone, decl)
18471 DECL_NOT_REALLY_EXTERN (clone) = 1;
18472 }
18473
18474 /* Called if RESULT is explicitly instantiated, or is a member of an
18475 explicitly instantiated class. */
18476
18477 void
18478 mark_decl_instantiated (tree result, int extern_p)
18479 {
18480 SET_DECL_EXPLICIT_INSTANTIATION (result);
18481
18482 /* If this entity has already been written out, it's too late to
18483 make any modifications. */
18484 if (TREE_ASM_WRITTEN (result))
18485 return;
18486
18487 /* For anonymous namespace we don't need to do anything. */
18488 if (decl_anon_ns_mem_p (result))
18489 {
18490 gcc_assert (!TREE_PUBLIC (result));
18491 return;
18492 }
18493
18494 if (TREE_CODE (result) != FUNCTION_DECL)
18495 /* The TREE_PUBLIC flag for function declarations will have been
18496 set correctly by tsubst. */
18497 TREE_PUBLIC (result) = 1;
18498
18499 /* This might have been set by an earlier implicit instantiation. */
18500 DECL_COMDAT (result) = 0;
18501
18502 if (extern_p)
18503 DECL_NOT_REALLY_EXTERN (result) = 0;
18504 else
18505 {
18506 mark_definable (result);
18507 mark_needed (result);
18508 /* Always make artificials weak. */
18509 if (DECL_ARTIFICIAL (result) && flag_weak)
18510 comdat_linkage (result);
18511 /* For WIN32 we also want to put explicit instantiations in
18512 linkonce sections. */
18513 else if (TREE_PUBLIC (result))
18514 maybe_make_one_only (result);
18515 }
18516
18517 /* If EXTERN_P, then this function will not be emitted -- unless
18518 followed by an explicit instantiation, at which point its linkage
18519 will be adjusted. If !EXTERN_P, then this function will be
18520 emitted here. In neither circumstance do we want
18521 import_export_decl to adjust the linkage. */
18522 DECL_INTERFACE_KNOWN (result) = 1;
18523 }
18524
18525 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
18526 important template arguments. If any are missing, we check whether
18527 they're important by using error_mark_node for substituting into any
18528 args that were used for partial ordering (the ones between ARGS and END)
18529 and seeing if it bubbles up. */
18530
18531 static bool
18532 check_undeduced_parms (tree targs, tree args, tree end)
18533 {
18534 bool found = false;
18535 int i;
18536 for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
18537 if (TREE_VEC_ELT (targs, i) == NULL_TREE)
18538 {
18539 found = true;
18540 TREE_VEC_ELT (targs, i) = error_mark_node;
18541 }
18542 if (found)
18543 {
18544 tree substed = tsubst_arg_types (args, targs, end, tf_none, NULL_TREE);
18545 if (substed == error_mark_node)
18546 return true;
18547 }
18548 return false;
18549 }
18550
18551 /* Given two function templates PAT1 and PAT2, return:
18552
18553 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
18554 -1 if PAT2 is more specialized than PAT1.
18555 0 if neither is more specialized.
18556
18557 LEN indicates the number of parameters we should consider
18558 (defaulted parameters should not be considered).
18559
18560 The 1998 std underspecified function template partial ordering, and
18561 DR214 addresses the issue. We take pairs of arguments, one from
18562 each of the templates, and deduce them against each other. One of
18563 the templates will be more specialized if all the *other*
18564 template's arguments deduce against its arguments and at least one
18565 of its arguments *does* *not* deduce against the other template's
18566 corresponding argument. Deduction is done as for class templates.
18567 The arguments used in deduction have reference and top level cv
18568 qualifiers removed. Iff both arguments were originally reference
18569 types *and* deduction succeeds in both directions, an lvalue reference
18570 wins against an rvalue reference and otherwise the template
18571 with the more cv-qualified argument wins for that pairing (if
18572 neither is more cv-qualified, they both are equal). Unlike regular
18573 deduction, after all the arguments have been deduced in this way,
18574 we do *not* verify the deduced template argument values can be
18575 substituted into non-deduced contexts.
18576
18577 The logic can be a bit confusing here, because we look at deduce1 and
18578 targs1 to see if pat2 is at least as specialized, and vice versa; if we
18579 can find template arguments for pat1 to make arg1 look like arg2, that
18580 means that arg2 is at least as specialized as arg1. */
18581
18582 int
18583 more_specialized_fn (tree pat1, tree pat2, int len)
18584 {
18585 tree decl1 = DECL_TEMPLATE_RESULT (pat1);
18586 tree decl2 = DECL_TEMPLATE_RESULT (pat2);
18587 tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
18588 tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
18589 tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
18590 tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
18591 tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
18592 tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
18593 tree origs1, origs2;
18594 bool lose1 = false;
18595 bool lose2 = false;
18596
18597 /* Remove the this parameter from non-static member functions. If
18598 one is a non-static member function and the other is not a static
18599 member function, remove the first parameter from that function
18600 also. This situation occurs for operator functions where we
18601 locate both a member function (with this pointer) and non-member
18602 operator (with explicit first operand). */
18603 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
18604 {
18605 len--; /* LEN is the number of significant arguments for DECL1 */
18606 args1 = TREE_CHAIN (args1);
18607 if (!DECL_STATIC_FUNCTION_P (decl2))
18608 args2 = TREE_CHAIN (args2);
18609 }
18610 else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
18611 {
18612 args2 = TREE_CHAIN (args2);
18613 if (!DECL_STATIC_FUNCTION_P (decl1))
18614 {
18615 len--;
18616 args1 = TREE_CHAIN (args1);
18617 }
18618 }
18619
18620 /* If only one is a conversion operator, they are unordered. */
18621 if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
18622 return 0;
18623
18624 /* Consider the return type for a conversion function */
18625 if (DECL_CONV_FN_P (decl1))
18626 {
18627 args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
18628 args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
18629 len++;
18630 }
18631
18632 processing_template_decl++;
18633
18634 origs1 = args1;
18635 origs2 = args2;
18636
18637 while (len--
18638 /* Stop when an ellipsis is seen. */
18639 && args1 != NULL_TREE && args2 != NULL_TREE)
18640 {
18641 tree arg1 = TREE_VALUE (args1);
18642 tree arg2 = TREE_VALUE (args2);
18643 int deduce1, deduce2;
18644 int quals1 = -1;
18645 int quals2 = -1;
18646 int ref1 = 0;
18647 int ref2 = 0;
18648
18649 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
18650 && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
18651 {
18652 /* When both arguments are pack expansions, we need only
18653 unify the patterns themselves. */
18654 arg1 = PACK_EXPANSION_PATTERN (arg1);
18655 arg2 = PACK_EXPANSION_PATTERN (arg2);
18656
18657 /* This is the last comparison we need to do. */
18658 len = 0;
18659 }
18660
18661 if (TREE_CODE (arg1) == REFERENCE_TYPE)
18662 {
18663 ref1 = TYPE_REF_IS_RVALUE (arg1) + 1;
18664 arg1 = TREE_TYPE (arg1);
18665 quals1 = cp_type_quals (arg1);
18666 }
18667
18668 if (TREE_CODE (arg2) == REFERENCE_TYPE)
18669 {
18670 ref2 = TYPE_REF_IS_RVALUE (arg2) + 1;
18671 arg2 = TREE_TYPE (arg2);
18672 quals2 = cp_type_quals (arg2);
18673 }
18674
18675 arg1 = TYPE_MAIN_VARIANT (arg1);
18676 arg2 = TYPE_MAIN_VARIANT (arg2);
18677
18678 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
18679 {
18680 int i, len2 = list_length (args2);
18681 tree parmvec = make_tree_vec (1);
18682 tree argvec = make_tree_vec (len2);
18683 tree ta = args2;
18684
18685 /* Setup the parameter vector, which contains only ARG1. */
18686 TREE_VEC_ELT (parmvec, 0) = arg1;
18687
18688 /* Setup the argument vector, which contains the remaining
18689 arguments. */
18690 for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
18691 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
18692
18693 deduce1 = (unify_pack_expansion (tparms1, targs1, parmvec,
18694 argvec, DEDUCE_EXACT,
18695 /*subr=*/true, /*explain_p=*/false)
18696 == 0);
18697
18698 /* We cannot deduce in the other direction, because ARG1 is
18699 a pack expansion but ARG2 is not. */
18700 deduce2 = 0;
18701 }
18702 else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
18703 {
18704 int i, len1 = list_length (args1);
18705 tree parmvec = make_tree_vec (1);
18706 tree argvec = make_tree_vec (len1);
18707 tree ta = args1;
18708
18709 /* Setup the parameter vector, which contains only ARG1. */
18710 TREE_VEC_ELT (parmvec, 0) = arg2;
18711
18712 /* Setup the argument vector, which contains the remaining
18713 arguments. */
18714 for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
18715 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
18716
18717 deduce2 = (unify_pack_expansion (tparms2, targs2, parmvec,
18718 argvec, DEDUCE_EXACT,
18719 /*subr=*/true, /*explain_p=*/false)
18720 == 0);
18721
18722 /* We cannot deduce in the other direction, because ARG2 is
18723 a pack expansion but ARG1 is not.*/
18724 deduce1 = 0;
18725 }
18726
18727 else
18728 {
18729 /* The normal case, where neither argument is a pack
18730 expansion. */
18731 deduce1 = (unify (tparms1, targs1, arg1, arg2,
18732 UNIFY_ALLOW_NONE, /*explain_p=*/false)
18733 == 0);
18734 deduce2 = (unify (tparms2, targs2, arg2, arg1,
18735 UNIFY_ALLOW_NONE, /*explain_p=*/false)
18736 == 0);
18737 }
18738
18739 /* If we couldn't deduce arguments for tparms1 to make arg1 match
18740 arg2, then arg2 is not as specialized as arg1. */
18741 if (!deduce1)
18742 lose2 = true;
18743 if (!deduce2)
18744 lose1 = true;
18745
18746 /* "If, for a given type, deduction succeeds in both directions
18747 (i.e., the types are identical after the transformations above)
18748 and both P and A were reference types (before being replaced with
18749 the type referred to above):
18750 - if the type from the argument template was an lvalue reference and
18751 the type from the parameter template was not, the argument type is
18752 considered to be more specialized than the other; otherwise,
18753 - if the type from the argument template is more cv-qualified
18754 than the type from the parameter template (as described above),
18755 the argument type is considered to be more specialized than the other;
18756 otherwise,
18757 - neither type is more specialized than the other." */
18758
18759 if (deduce1 && deduce2)
18760 {
18761 if (ref1 && ref2 && ref1 != ref2)
18762 {
18763 if (ref1 > ref2)
18764 lose1 = true;
18765 else
18766 lose2 = true;
18767 }
18768 else if (quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
18769 {
18770 if ((quals1 & quals2) == quals2)
18771 lose2 = true;
18772 if ((quals1 & quals2) == quals1)
18773 lose1 = true;
18774 }
18775 }
18776
18777 if (lose1 && lose2)
18778 /* We've failed to deduce something in either direction.
18779 These must be unordered. */
18780 break;
18781
18782 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
18783 || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
18784 /* We have already processed all of the arguments in our
18785 handing of the pack expansion type. */
18786 len = 0;
18787
18788 args1 = TREE_CHAIN (args1);
18789 args2 = TREE_CHAIN (args2);
18790 }
18791
18792 /* "In most cases, all template parameters must have values in order for
18793 deduction to succeed, but for partial ordering purposes a template
18794 parameter may remain without a value provided it is not used in the
18795 types being used for partial ordering."
18796
18797 Thus, if we are missing any of the targs1 we need to substitute into
18798 origs1, then pat2 is not as specialized as pat1. This can happen when
18799 there is a nondeduced context. */
18800 if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
18801 lose2 = true;
18802 if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
18803 lose1 = true;
18804
18805 processing_template_decl--;
18806
18807 /* All things being equal, if the next argument is a pack expansion
18808 for one function but not for the other, prefer the
18809 non-variadic function. FIXME this is bogus; see c++/41958. */
18810 if (lose1 == lose2
18811 && args1 && TREE_VALUE (args1)
18812 && args2 && TREE_VALUE (args2))
18813 {
18814 lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
18815 lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
18816 }
18817
18818 if (lose1 == lose2)
18819 return 0;
18820 else if (!lose1)
18821 return 1;
18822 else
18823 return -1;
18824 }
18825
18826 /* Determine which of two partial specializations of TMPL is more
18827 specialized.
18828
18829 PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
18830 to the first partial specialization. The TREE_VALUE is the
18831 innermost set of template parameters for the partial
18832 specialization. PAT2 is similar, but for the second template.
18833
18834 Return 1 if the first partial specialization is more specialized;
18835 -1 if the second is more specialized; 0 if neither is more
18836 specialized.
18837
18838 See [temp.class.order] for information about determining which of
18839 two templates is more specialized. */
18840
18841 static int
18842 more_specialized_class (tree tmpl, tree pat1, tree pat2)
18843 {
18844 tree targs;
18845 tree tmpl1, tmpl2;
18846 int winner = 0;
18847 bool any_deductions = false;
18848
18849 tmpl1 = TREE_TYPE (pat1);
18850 tmpl2 = TREE_TYPE (pat2);
18851
18852 /* Just like what happens for functions, if we are ordering between
18853 different class template specializations, we may encounter dependent
18854 types in the arguments, and we need our dependency check functions
18855 to behave correctly. */
18856 ++processing_template_decl;
18857 targs = get_class_bindings (tmpl, TREE_VALUE (pat1),
18858 CLASSTYPE_TI_ARGS (tmpl1),
18859 CLASSTYPE_TI_ARGS (tmpl2));
18860 if (targs)
18861 {
18862 --winner;
18863 any_deductions = true;
18864 }
18865
18866 targs = get_class_bindings (tmpl, TREE_VALUE (pat2),
18867 CLASSTYPE_TI_ARGS (tmpl2),
18868 CLASSTYPE_TI_ARGS (tmpl1));
18869 if (targs)
18870 {
18871 ++winner;
18872 any_deductions = true;
18873 }
18874 --processing_template_decl;
18875
18876 /* In the case of a tie where at least one of the class templates
18877 has a parameter pack at the end, the template with the most
18878 non-packed parameters wins. */
18879 if (winner == 0
18880 && any_deductions
18881 && (template_args_variadic_p (TREE_PURPOSE (pat1))
18882 || template_args_variadic_p (TREE_PURPOSE (pat2))))
18883 {
18884 tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
18885 tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
18886 int len1 = TREE_VEC_LENGTH (args1);
18887 int len2 = TREE_VEC_LENGTH (args2);
18888
18889 /* We don't count the pack expansion at the end. */
18890 if (template_args_variadic_p (TREE_PURPOSE (pat1)))
18891 --len1;
18892 if (template_args_variadic_p (TREE_PURPOSE (pat2)))
18893 --len2;
18894
18895 if (len1 > len2)
18896 return 1;
18897 else if (len1 < len2)
18898 return -1;
18899 }
18900
18901 return winner;
18902 }
18903
18904 /* Return the template arguments that will produce the function signature
18905 DECL from the function template FN, with the explicit template
18906 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is true, the return type must
18907 also match. Return NULL_TREE if no satisfactory arguments could be
18908 found. */
18909
18910 static tree
18911 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
18912 {
18913 int ntparms = DECL_NTPARMS (fn);
18914 tree targs = make_tree_vec (ntparms);
18915 tree decl_type = TREE_TYPE (decl);
18916 tree decl_arg_types;
18917 tree *args;
18918 unsigned int nargs, ix;
18919 tree arg;
18920
18921 gcc_assert (decl != DECL_TEMPLATE_RESULT (fn));
18922
18923 /* Never do unification on the 'this' parameter. */
18924 decl_arg_types = skip_artificial_parms_for (decl,
18925 TYPE_ARG_TYPES (decl_type));
18926
18927 nargs = list_length (decl_arg_types);
18928 args = XALLOCAVEC (tree, nargs);
18929 for (arg = decl_arg_types, ix = 0;
18930 arg != NULL_TREE && arg != void_list_node;
18931 arg = TREE_CHAIN (arg), ++ix)
18932 args[ix] = TREE_VALUE (arg);
18933
18934 if (fn_type_unification (fn, explicit_args, targs,
18935 args, ix,
18936 (check_rettype || DECL_CONV_FN_P (fn)
18937 ? TREE_TYPE (decl_type) : NULL_TREE),
18938 DEDUCE_EXACT, LOOKUP_NORMAL, /*explain_p=*/false,
18939 /*decltype*/false)
18940 == error_mark_node)
18941 return NULL_TREE;
18942
18943 return targs;
18944 }
18945
18946 /* Return the innermost template arguments that, when applied to a partial
18947 specialization of TMPL whose innermost template parameters are
18948 TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
18949 ARGS.
18950
18951 For example, suppose we have:
18952
18953 template <class T, class U> struct S {};
18954 template <class T> struct S<T*, int> {};
18955
18956 Then, suppose we want to get `S<double*, int>'. The TPARMS will be
18957 {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
18958 int}. The resulting vector will be {double}, indicating that `T'
18959 is bound to `double'. */
18960
18961 static tree
18962 get_class_bindings (tree tmpl, tree tparms, tree spec_args, tree args)
18963 {
18964 int i, ntparms = TREE_VEC_LENGTH (tparms);
18965 tree deduced_args;
18966 tree innermost_deduced_args;
18967
18968 innermost_deduced_args = make_tree_vec (ntparms);
18969 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
18970 {
18971 deduced_args = copy_node (args);
18972 SET_TMPL_ARGS_LEVEL (deduced_args,
18973 TMPL_ARGS_DEPTH (deduced_args),
18974 innermost_deduced_args);
18975 }
18976 else
18977 deduced_args = innermost_deduced_args;
18978
18979 if (unify (tparms, deduced_args,
18980 INNERMOST_TEMPLATE_ARGS (spec_args),
18981 INNERMOST_TEMPLATE_ARGS (args),
18982 UNIFY_ALLOW_NONE, /*explain_p=*/false))
18983 return NULL_TREE;
18984
18985 for (i = 0; i < ntparms; ++i)
18986 if (! TREE_VEC_ELT (innermost_deduced_args, i))
18987 return NULL_TREE;
18988
18989 /* Verify that nondeduced template arguments agree with the type
18990 obtained from argument deduction.
18991
18992 For example:
18993
18994 struct A { typedef int X; };
18995 template <class T, class U> struct C {};
18996 template <class T> struct C<T, typename T::X> {};
18997
18998 Then with the instantiation `C<A, int>', we can deduce that
18999 `T' is `A' but unify () does not check whether `typename T::X'
19000 is `int'. */
19001 spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
19002 spec_args = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
19003 spec_args, tmpl,
19004 tf_none, false, false);
19005 if (spec_args == error_mark_node
19006 /* We only need to check the innermost arguments; the other
19007 arguments will always agree. */
19008 || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
19009 INNERMOST_TEMPLATE_ARGS (args)))
19010 return NULL_TREE;
19011
19012 /* Now that we have bindings for all of the template arguments,
19013 ensure that the arguments deduced for the template template
19014 parameters have compatible template parameter lists. See the use
19015 of template_template_parm_bindings_ok_p in fn_type_unification
19016 for more information. */
19017 if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
19018 return NULL_TREE;
19019
19020 return deduced_args;
19021 }
19022
19023 /* TEMPLATES is a TREE_LIST. Each TREE_VALUE is a TEMPLATE_DECL.
19024 Return the TREE_LIST node with the most specialized template, if
19025 any. If there is no most specialized template, the error_mark_node
19026 is returned.
19027
19028 Note that this function does not look at, or modify, the
19029 TREE_PURPOSE or TREE_TYPE of any of the nodes. Since the node
19030 returned is one of the elements of INSTANTIATIONS, callers may
19031 store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
19032 and retrieve it from the value returned. */
19033
19034 tree
19035 most_specialized_instantiation (tree templates)
19036 {
19037 tree fn, champ;
19038
19039 ++processing_template_decl;
19040
19041 champ = templates;
19042 for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
19043 {
19044 int fate = 0;
19045
19046 if (get_bindings (TREE_VALUE (champ),
19047 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
19048 NULL_TREE, /*check_ret=*/true))
19049 fate--;
19050
19051 if (get_bindings (TREE_VALUE (fn),
19052 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
19053 NULL_TREE, /*check_ret=*/true))
19054 fate++;
19055
19056 if (fate == -1)
19057 champ = fn;
19058 else if (!fate)
19059 {
19060 /* Equally specialized, move to next function. If there
19061 is no next function, nothing's most specialized. */
19062 fn = TREE_CHAIN (fn);
19063 champ = fn;
19064 if (!fn)
19065 break;
19066 }
19067 }
19068
19069 if (champ)
19070 /* Now verify that champ is better than everything earlier in the
19071 instantiation list. */
19072 for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
19073 if (get_bindings (TREE_VALUE (champ),
19074 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
19075 NULL_TREE, /*check_ret=*/true)
19076 || !get_bindings (TREE_VALUE (fn),
19077 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
19078 NULL_TREE, /*check_ret=*/true))
19079 {
19080 champ = NULL_TREE;
19081 break;
19082 }
19083
19084 processing_template_decl--;
19085
19086 if (!champ)
19087 return error_mark_node;
19088
19089 return champ;
19090 }
19091
19092 /* If DECL is a specialization of some template, return the most
19093 general such template. Otherwise, returns NULL_TREE.
19094
19095 For example, given:
19096
19097 template <class T> struct S { template <class U> void f(U); };
19098
19099 if TMPL is `template <class U> void S<int>::f(U)' this will return
19100 the full template. This function will not trace past partial
19101 specializations, however. For example, given in addition:
19102
19103 template <class T> struct S<T*> { template <class U> void f(U); };
19104
19105 if TMPL is `template <class U> void S<int*>::f(U)' this will return
19106 `template <class T> template <class U> S<T*>::f(U)'. */
19107
19108 tree
19109 most_general_template (tree decl)
19110 {
19111 if (TREE_CODE (decl) != TEMPLATE_DECL)
19112 {
19113 if (tree tinfo = get_template_info (decl))
19114 decl = TI_TEMPLATE (tinfo);
19115 /* The TI_TEMPLATE can be an IDENTIFIER_NODE for a
19116 template friend, or a FIELD_DECL for a capture pack. */
19117 if (TREE_CODE (decl) != TEMPLATE_DECL)
19118 return NULL_TREE;
19119 }
19120
19121 /* Look for more and more general templates. */
19122 while (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
19123 {
19124 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
19125 (See cp-tree.h for details.) */
19126 if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
19127 break;
19128
19129 if (CLASS_TYPE_P (TREE_TYPE (decl))
19130 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
19131 break;
19132
19133 /* Stop if we run into an explicitly specialized class template. */
19134 if (!DECL_NAMESPACE_SCOPE_P (decl)
19135 && DECL_CONTEXT (decl)
19136 && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
19137 break;
19138
19139 decl = DECL_TI_TEMPLATE (decl);
19140 }
19141
19142 return decl;
19143 }
19144
19145 /* Return the most specialized of the class template partial
19146 specializations which can produce TYPE, a specialization of some class
19147 template. The value returned is actually a TREE_LIST; the TREE_TYPE is
19148 a _TYPE node corresponding to the partial specialization, while the
19149 TREE_PURPOSE is the set of template arguments that must be
19150 substituted into the TREE_TYPE in order to generate TYPE.
19151
19152 If the choice of partial specialization is ambiguous, a diagnostic
19153 is issued, and the error_mark_node is returned. If there are no
19154 partial specializations matching TYPE, then NULL_TREE is
19155 returned, indicating that the primary template should be used. */
19156
19157 static tree
19158 most_specialized_class (tree type, tsubst_flags_t complain)
19159 {
19160 tree list = NULL_TREE;
19161 tree t;
19162 tree champ;
19163 int fate;
19164 bool ambiguous_p;
19165 tree outer_args = NULL_TREE;
19166
19167 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
19168 tree main_tmpl = most_general_template (tmpl);
19169 tree args = CLASSTYPE_TI_ARGS (type);
19170
19171 /* For determining which partial specialization to use, only the
19172 innermost args are interesting. */
19173 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
19174 {
19175 outer_args = strip_innermost_template_args (args, 1);
19176 args = INNERMOST_TEMPLATE_ARGS (args);
19177 }
19178
19179 for (t = DECL_TEMPLATE_SPECIALIZATIONS (main_tmpl); t; t = TREE_CHAIN (t))
19180 {
19181 tree partial_spec_args;
19182 tree spec_args;
19183 tree spec_tmpl = TREE_VALUE (t);
19184 tree orig_parms = DECL_INNERMOST_TEMPLATE_PARMS (spec_tmpl);
19185
19186 partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
19187
19188 ++processing_template_decl;
19189
19190 if (outer_args)
19191 {
19192 /* Discard the outer levels of args, and then substitute in the
19193 template args from the enclosing class. */
19194 partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
19195 partial_spec_args = tsubst_template_args
19196 (partial_spec_args, outer_args, tf_none, NULL_TREE);
19197
19198 /* And the same for the partial specialization TEMPLATE_DECL. */
19199 spec_tmpl = tsubst (spec_tmpl, outer_args, tf_none, NULL_TREE);
19200 }
19201
19202 partial_spec_args =
19203 coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
19204 partial_spec_args,
19205 tmpl, tf_none,
19206 /*require_all_args=*/true,
19207 /*use_default_args=*/true);
19208
19209 --processing_template_decl;
19210
19211 if (partial_spec_args == error_mark_node)
19212 return error_mark_node;
19213 if (spec_tmpl == error_mark_node)
19214 return error_mark_node;
19215
19216 tree parms = DECL_INNERMOST_TEMPLATE_PARMS (spec_tmpl);
19217 spec_args = get_class_bindings (tmpl, parms,
19218 partial_spec_args,
19219 args);
19220 if (spec_args)
19221 {
19222 if (outer_args)
19223 spec_args = add_to_template_args (outer_args, spec_args);
19224 list = tree_cons (spec_args, orig_parms, list);
19225 TREE_TYPE (list) = TREE_TYPE (t);
19226 }
19227 }
19228
19229 if (! list)
19230 return NULL_TREE;
19231
19232 ambiguous_p = false;
19233 t = list;
19234 champ = t;
19235 t = TREE_CHAIN (t);
19236 for (; t; t = TREE_CHAIN (t))
19237 {
19238 fate = more_specialized_class (tmpl, champ, t);
19239 if (fate == 1)
19240 ;
19241 else
19242 {
19243 if (fate == 0)
19244 {
19245 t = TREE_CHAIN (t);
19246 if (! t)
19247 {
19248 ambiguous_p = true;
19249 break;
19250 }
19251 }
19252 champ = t;
19253 }
19254 }
19255
19256 if (!ambiguous_p)
19257 for (t = list; t && t != champ; t = TREE_CHAIN (t))
19258 {
19259 fate = more_specialized_class (tmpl, champ, t);
19260 if (fate != 1)
19261 {
19262 ambiguous_p = true;
19263 break;
19264 }
19265 }
19266
19267 if (ambiguous_p)
19268 {
19269 const char *str;
19270 char *spaces = NULL;
19271 if (!(complain & tf_error))
19272 return error_mark_node;
19273 error ("ambiguous class template instantiation for %q#T", type);
19274 str = ngettext ("candidate is:", "candidates are:", list_length (list));
19275 for (t = list; t; t = TREE_CHAIN (t))
19276 {
19277 error ("%s %+#T", spaces ? spaces : str, TREE_TYPE (t));
19278 spaces = spaces ? spaces : get_spaces (str);
19279 }
19280 free (spaces);
19281 return error_mark_node;
19282 }
19283
19284 return champ;
19285 }
19286
19287 /* Explicitly instantiate DECL. */
19288
19289 void
19290 do_decl_instantiation (tree decl, tree storage)
19291 {
19292 tree result = NULL_TREE;
19293 int extern_p = 0;
19294
19295 if (!decl || decl == error_mark_node)
19296 /* An error occurred, for which grokdeclarator has already issued
19297 an appropriate message. */
19298 return;
19299 else if (! DECL_LANG_SPECIFIC (decl))
19300 {
19301 error ("explicit instantiation of non-template %q#D", decl);
19302 return;
19303 }
19304
19305 bool var_templ = (DECL_TEMPLATE_INFO (decl)
19306 && variable_template_p (DECL_TI_TEMPLATE (decl)));
19307
19308 if (VAR_P (decl) && !var_templ)
19309 {
19310 /* There is an asymmetry here in the way VAR_DECLs and
19311 FUNCTION_DECLs are handled by grokdeclarator. In the case of
19312 the latter, the DECL we get back will be marked as a
19313 template instantiation, and the appropriate
19314 DECL_TEMPLATE_INFO will be set up. This does not happen for
19315 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
19316 should handle VAR_DECLs as it currently handles
19317 FUNCTION_DECLs. */
19318 if (!DECL_CLASS_SCOPE_P (decl))
19319 {
19320 error ("%qD is not a static data member of a class template", decl);
19321 return;
19322 }
19323 result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
19324 if (!result || !VAR_P (result))
19325 {
19326 error ("no matching template for %qD found", decl);
19327 return;
19328 }
19329 if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
19330 {
19331 error ("type %qT for explicit instantiation %qD does not match "
19332 "declared type %qT", TREE_TYPE (result), decl,
19333 TREE_TYPE (decl));
19334 return;
19335 }
19336 }
19337 else if (TREE_CODE (decl) != FUNCTION_DECL && !var_templ)
19338 {
19339 error ("explicit instantiation of %q#D", decl);
19340 return;
19341 }
19342 else
19343 result = decl;
19344
19345 /* Check for various error cases. Note that if the explicit
19346 instantiation is valid the RESULT will currently be marked as an
19347 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
19348 until we get here. */
19349
19350 if (DECL_TEMPLATE_SPECIALIZATION (result))
19351 {
19352 /* DR 259 [temp.spec].
19353
19354 Both an explicit instantiation and a declaration of an explicit
19355 specialization shall not appear in a program unless the explicit
19356 instantiation follows a declaration of the explicit specialization.
19357
19358 For a given set of template parameters, if an explicit
19359 instantiation of a template appears after a declaration of an
19360 explicit specialization for that template, the explicit
19361 instantiation has no effect. */
19362 return;
19363 }
19364 else if (DECL_EXPLICIT_INSTANTIATION (result))
19365 {
19366 /* [temp.spec]
19367
19368 No program shall explicitly instantiate any template more
19369 than once.
19370
19371 We check DECL_NOT_REALLY_EXTERN so as not to complain when
19372 the first instantiation was `extern' and the second is not,
19373 and EXTERN_P for the opposite case. */
19374 if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
19375 permerror (input_location, "duplicate explicit instantiation of %q#D", result);
19376 /* If an "extern" explicit instantiation follows an ordinary
19377 explicit instantiation, the template is instantiated. */
19378 if (extern_p)
19379 return;
19380 }
19381 else if (!DECL_IMPLICIT_INSTANTIATION (result))
19382 {
19383 error ("no matching template for %qD found", result);
19384 return;
19385 }
19386 else if (!DECL_TEMPLATE_INFO (result))
19387 {
19388 permerror (input_location, "explicit instantiation of non-template %q#D", result);
19389 return;
19390 }
19391
19392 if (storage == NULL_TREE)
19393 ;
19394 else if (storage == ridpointers[(int) RID_EXTERN])
19395 {
19396 if (!in_system_header_at (input_location) && (cxx_dialect == cxx98))
19397 pedwarn (input_location, OPT_Wpedantic,
19398 "ISO C++ 1998 forbids the use of %<extern%> on explicit "
19399 "instantiations");
19400 extern_p = 1;
19401 }
19402 else
19403 error ("storage class %qD applied to template instantiation", storage);
19404
19405 check_explicit_instantiation_namespace (result);
19406 mark_decl_instantiated (result, extern_p);
19407 if (! extern_p)
19408 instantiate_decl (result, /*defer_ok=*/1,
19409 /*expl_inst_class_mem_p=*/false);
19410 }
19411
19412 static void
19413 mark_class_instantiated (tree t, int extern_p)
19414 {
19415 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
19416 SET_CLASSTYPE_INTERFACE_KNOWN (t);
19417 CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
19418 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
19419 if (! extern_p)
19420 {
19421 CLASSTYPE_DEBUG_REQUESTED (t) = 1;
19422 rest_of_type_compilation (t, 1);
19423 }
19424 }
19425
19426 /* Called from do_type_instantiation through binding_table_foreach to
19427 do recursive instantiation for the type bound in ENTRY. */
19428 static void
19429 bt_instantiate_type_proc (binding_entry entry, void *data)
19430 {
19431 tree storage = *(tree *) data;
19432
19433 if (MAYBE_CLASS_TYPE_P (entry->type)
19434 && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
19435 do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
19436 }
19437
19438 /* Called from do_type_instantiation to instantiate a member
19439 (a member function or a static member variable) of an
19440 explicitly instantiated class template. */
19441 static void
19442 instantiate_class_member (tree decl, int extern_p)
19443 {
19444 mark_decl_instantiated (decl, extern_p);
19445 if (! extern_p)
19446 instantiate_decl (decl, /*defer_ok=*/1,
19447 /*expl_inst_class_mem_p=*/true);
19448 }
19449
19450 /* Perform an explicit instantiation of template class T. STORAGE, if
19451 non-null, is the RID for extern, inline or static. COMPLAIN is
19452 nonzero if this is called from the parser, zero if called recursively,
19453 since the standard is unclear (as detailed below). */
19454
19455 void
19456 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
19457 {
19458 int extern_p = 0;
19459 int nomem_p = 0;
19460 int static_p = 0;
19461 int previous_instantiation_extern_p = 0;
19462
19463 if (TREE_CODE (t) == TYPE_DECL)
19464 t = TREE_TYPE (t);
19465
19466 if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
19467 {
19468 tree tmpl =
19469 (TYPE_TEMPLATE_INFO (t)) ? TYPE_TI_TEMPLATE (t) : NULL;
19470 if (tmpl)
19471 error ("explicit instantiation of non-class template %qD", tmpl);
19472 else
19473 error ("explicit instantiation of non-template type %qT", t);
19474 return;
19475 }
19476
19477 complete_type (t);
19478
19479 if (!COMPLETE_TYPE_P (t))
19480 {
19481 if (complain & tf_error)
19482 error ("explicit instantiation of %q#T before definition of template",
19483 t);
19484 return;
19485 }
19486
19487 if (storage != NULL_TREE)
19488 {
19489 if (!in_system_header_at (input_location))
19490 {
19491 if (storage == ridpointers[(int) RID_EXTERN])
19492 {
19493 if (cxx_dialect == cxx98)
19494 pedwarn (input_location, OPT_Wpedantic,
19495 "ISO C++ 1998 forbids the use of %<extern%> on "
19496 "explicit instantiations");
19497 }
19498 else
19499 pedwarn (input_location, OPT_Wpedantic,
19500 "ISO C++ forbids the use of %qE"
19501 " on explicit instantiations", storage);
19502 }
19503
19504 if (storage == ridpointers[(int) RID_INLINE])
19505 nomem_p = 1;
19506 else if (storage == ridpointers[(int) RID_EXTERN])
19507 extern_p = 1;
19508 else if (storage == ridpointers[(int) RID_STATIC])
19509 static_p = 1;
19510 else
19511 {
19512 error ("storage class %qD applied to template instantiation",
19513 storage);
19514 extern_p = 0;
19515 }
19516 }
19517
19518 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
19519 {
19520 /* DR 259 [temp.spec].
19521
19522 Both an explicit instantiation and a declaration of an explicit
19523 specialization shall not appear in a program unless the explicit
19524 instantiation follows a declaration of the explicit specialization.
19525
19526 For a given set of template parameters, if an explicit
19527 instantiation of a template appears after a declaration of an
19528 explicit specialization for that template, the explicit
19529 instantiation has no effect. */
19530 return;
19531 }
19532 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
19533 {
19534 /* [temp.spec]
19535
19536 No program shall explicitly instantiate any template more
19537 than once.
19538
19539 If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
19540 instantiation was `extern'. If EXTERN_P then the second is.
19541 These cases are OK. */
19542 previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
19543
19544 if (!previous_instantiation_extern_p && !extern_p
19545 && (complain & tf_error))
19546 permerror (input_location, "duplicate explicit instantiation of %q#T", t);
19547
19548 /* If we've already instantiated the template, just return now. */
19549 if (!CLASSTYPE_INTERFACE_ONLY (t))
19550 return;
19551 }
19552
19553 check_explicit_instantiation_namespace (TYPE_NAME (t));
19554 mark_class_instantiated (t, extern_p);
19555
19556 if (nomem_p)
19557 return;
19558
19559 {
19560 tree tmp;
19561
19562 /* In contrast to implicit instantiation, where only the
19563 declarations, and not the definitions, of members are
19564 instantiated, we have here:
19565
19566 [temp.explicit]
19567
19568 The explicit instantiation of a class template specialization
19569 implies the instantiation of all of its members not
19570 previously explicitly specialized in the translation unit
19571 containing the explicit instantiation.
19572
19573 Of course, we can't instantiate member template classes, since
19574 we don't have any arguments for them. Note that the standard
19575 is unclear on whether the instantiation of the members are
19576 *explicit* instantiations or not. However, the most natural
19577 interpretation is that it should be an explicit instantiation. */
19578
19579 if (! static_p)
19580 for (tmp = TYPE_METHODS (t); tmp; tmp = DECL_CHAIN (tmp))
19581 if (TREE_CODE (tmp) == FUNCTION_DECL
19582 && DECL_TEMPLATE_INSTANTIATION (tmp))
19583 instantiate_class_member (tmp, extern_p);
19584
19585 for (tmp = TYPE_FIELDS (t); tmp; tmp = DECL_CHAIN (tmp))
19586 if (VAR_P (tmp) && DECL_TEMPLATE_INSTANTIATION (tmp))
19587 instantiate_class_member (tmp, extern_p);
19588
19589 if (CLASSTYPE_NESTED_UTDS (t))
19590 binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
19591 bt_instantiate_type_proc, &storage);
19592 }
19593 }
19594
19595 /* Given a function DECL, which is a specialization of TMPL, modify
19596 DECL to be a re-instantiation of TMPL with the same template
19597 arguments. TMPL should be the template into which tsubst'ing
19598 should occur for DECL, not the most general template.
19599
19600 One reason for doing this is a scenario like this:
19601
19602 template <class T>
19603 void f(const T&, int i);
19604
19605 void g() { f(3, 7); }
19606
19607 template <class T>
19608 void f(const T& t, const int i) { }
19609
19610 Note that when the template is first instantiated, with
19611 instantiate_template, the resulting DECL will have no name for the
19612 first parameter, and the wrong type for the second. So, when we go
19613 to instantiate the DECL, we regenerate it. */
19614
19615 static void
19616 regenerate_decl_from_template (tree decl, tree tmpl)
19617 {
19618 /* The arguments used to instantiate DECL, from the most general
19619 template. */
19620 tree args;
19621 tree code_pattern;
19622
19623 args = DECL_TI_ARGS (decl);
19624 code_pattern = DECL_TEMPLATE_RESULT (tmpl);
19625
19626 /* Make sure that we can see identifiers, and compute access
19627 correctly. */
19628 push_access_scope (decl);
19629
19630 if (TREE_CODE (decl) == FUNCTION_DECL)
19631 {
19632 tree decl_parm;
19633 tree pattern_parm;
19634 tree specs;
19635 int args_depth;
19636 int parms_depth;
19637
19638 args_depth = TMPL_ARGS_DEPTH (args);
19639 parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
19640 if (args_depth > parms_depth)
19641 args = get_innermost_template_args (args, parms_depth);
19642
19643 specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
19644 args, tf_error, NULL_TREE,
19645 /*defer_ok*/false);
19646 if (specs && specs != error_mark_node)
19647 TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
19648 specs);
19649
19650 /* Merge parameter declarations. */
19651 decl_parm = skip_artificial_parms_for (decl,
19652 DECL_ARGUMENTS (decl));
19653 pattern_parm
19654 = skip_artificial_parms_for (code_pattern,
19655 DECL_ARGUMENTS (code_pattern));
19656 while (decl_parm && !DECL_PACK_P (pattern_parm))
19657 {
19658 tree parm_type;
19659 tree attributes;
19660
19661 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
19662 DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
19663 parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
19664 NULL_TREE);
19665 parm_type = type_decays_to (parm_type);
19666 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
19667 TREE_TYPE (decl_parm) = parm_type;
19668 attributes = DECL_ATTRIBUTES (pattern_parm);
19669 if (DECL_ATTRIBUTES (decl_parm) != attributes)
19670 {
19671 DECL_ATTRIBUTES (decl_parm) = attributes;
19672 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
19673 }
19674 decl_parm = DECL_CHAIN (decl_parm);
19675 pattern_parm = DECL_CHAIN (pattern_parm);
19676 }
19677 /* Merge any parameters that match with the function parameter
19678 pack. */
19679 if (pattern_parm && DECL_PACK_P (pattern_parm))
19680 {
19681 int i, len;
19682 tree expanded_types;
19683 /* Expand the TYPE_PACK_EXPANSION that provides the types for
19684 the parameters in this function parameter pack. */
19685 expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm),
19686 args, tf_error, NULL_TREE);
19687 len = TREE_VEC_LENGTH (expanded_types);
19688 for (i = 0; i < len; i++)
19689 {
19690 tree parm_type;
19691 tree attributes;
19692
19693 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
19694 /* Rename the parameter to include the index. */
19695 DECL_NAME (decl_parm) =
19696 make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
19697 parm_type = TREE_VEC_ELT (expanded_types, i);
19698 parm_type = type_decays_to (parm_type);
19699 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
19700 TREE_TYPE (decl_parm) = parm_type;
19701 attributes = DECL_ATTRIBUTES (pattern_parm);
19702 if (DECL_ATTRIBUTES (decl_parm) != attributes)
19703 {
19704 DECL_ATTRIBUTES (decl_parm) = attributes;
19705 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
19706 }
19707 decl_parm = DECL_CHAIN (decl_parm);
19708 }
19709 }
19710 /* Merge additional specifiers from the CODE_PATTERN. */
19711 if (DECL_DECLARED_INLINE_P (code_pattern)
19712 && !DECL_DECLARED_INLINE_P (decl))
19713 DECL_DECLARED_INLINE_P (decl) = 1;
19714 }
19715 else if (VAR_P (decl))
19716 {
19717 DECL_INITIAL (decl) =
19718 tsubst_expr (DECL_INITIAL (code_pattern), args,
19719 tf_error, DECL_TI_TEMPLATE (decl),
19720 /*integral_constant_expression_p=*/false);
19721 if (VAR_HAD_UNKNOWN_BOUND (decl))
19722 TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
19723 tf_error, DECL_TI_TEMPLATE (decl));
19724 }
19725 else
19726 gcc_unreachable ();
19727
19728 pop_access_scope (decl);
19729 }
19730
19731 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
19732 substituted to get DECL. */
19733
19734 tree
19735 template_for_substitution (tree decl)
19736 {
19737 tree tmpl = DECL_TI_TEMPLATE (decl);
19738
19739 /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
19740 for the instantiation. This is not always the most general
19741 template. Consider, for example:
19742
19743 template <class T>
19744 struct S { template <class U> void f();
19745 template <> void f<int>(); };
19746
19747 and an instantiation of S<double>::f<int>. We want TD to be the
19748 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
19749 while (/* An instantiation cannot have a definition, so we need a
19750 more general template. */
19751 DECL_TEMPLATE_INSTANTIATION (tmpl)
19752 /* We must also deal with friend templates. Given:
19753
19754 template <class T> struct S {
19755 template <class U> friend void f() {};
19756 };
19757
19758 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
19759 so far as the language is concerned, but that's still
19760 where we get the pattern for the instantiation from. On
19761 other hand, if the definition comes outside the class, say:
19762
19763 template <class T> struct S {
19764 template <class U> friend void f();
19765 };
19766 template <class U> friend void f() {}
19767
19768 we don't need to look any further. That's what the check for
19769 DECL_INITIAL is for. */
19770 || (TREE_CODE (decl) == FUNCTION_DECL
19771 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
19772 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
19773 {
19774 /* The present template, TD, should not be a definition. If it
19775 were a definition, we should be using it! Note that we
19776 cannot restructure the loop to just keep going until we find
19777 a template with a definition, since that might go too far if
19778 a specialization was declared, but not defined. */
19779
19780 /* Fetch the more general template. */
19781 tmpl = DECL_TI_TEMPLATE (tmpl);
19782 }
19783
19784 return tmpl;
19785 }
19786
19787 /* Returns true if we need to instantiate this template instance even if we
19788 know we aren't going to emit it.. */
19789
19790 bool
19791 always_instantiate_p (tree decl)
19792 {
19793 /* We always instantiate inline functions so that we can inline them. An
19794 explicit instantiation declaration prohibits implicit instantiation of
19795 non-inline functions. With high levels of optimization, we would
19796 normally inline non-inline functions -- but we're not allowed to do
19797 that for "extern template" functions. Therefore, we check
19798 DECL_DECLARED_INLINE_P, rather than possibly_inlined_p. */
19799 return ((TREE_CODE (decl) == FUNCTION_DECL
19800 && (DECL_DECLARED_INLINE_P (decl)
19801 || type_uses_auto (TREE_TYPE (TREE_TYPE (decl)))))
19802 /* And we need to instantiate static data members so that
19803 their initializers are available in integral constant
19804 expressions. */
19805 || (VAR_P (decl)
19806 && decl_maybe_constant_var_p (decl)));
19807 }
19808
19809 /* If FN has a noexcept-specifier that hasn't been instantiated yet,
19810 instantiate it now, modifying TREE_TYPE (fn). */
19811
19812 void
19813 maybe_instantiate_noexcept (tree fn)
19814 {
19815 tree fntype, spec, noex, clone;
19816
19817 /* Don't instantiate a noexcept-specification from template context. */
19818 if (processing_template_decl)
19819 return;
19820
19821 if (DECL_CLONED_FUNCTION_P (fn))
19822 fn = DECL_CLONED_FUNCTION (fn);
19823 fntype = TREE_TYPE (fn);
19824 spec = TYPE_RAISES_EXCEPTIONS (fntype);
19825
19826 if (!spec || !TREE_PURPOSE (spec))
19827 return;
19828
19829 noex = TREE_PURPOSE (spec);
19830
19831 if (TREE_CODE (noex) == DEFERRED_NOEXCEPT)
19832 {
19833 if (DEFERRED_NOEXCEPT_PATTERN (noex) == NULL_TREE)
19834 spec = get_defaulted_eh_spec (fn);
19835 else if (push_tinst_level (fn))
19836 {
19837 push_access_scope (fn);
19838 push_deferring_access_checks (dk_no_deferred);
19839 input_location = DECL_SOURCE_LOCATION (fn);
19840 noex = tsubst_copy_and_build (DEFERRED_NOEXCEPT_PATTERN (noex),
19841 DEFERRED_NOEXCEPT_ARGS (noex),
19842 tf_warning_or_error, fn,
19843 /*function_p=*/false,
19844 /*integral_constant_expression_p=*/true);
19845 pop_deferring_access_checks ();
19846 pop_access_scope (fn);
19847 pop_tinst_level ();
19848 spec = build_noexcept_spec (noex, tf_warning_or_error);
19849 if (spec == error_mark_node)
19850 spec = noexcept_false_spec;
19851 }
19852 else
19853 spec = noexcept_false_spec;
19854
19855 TREE_TYPE (fn) = build_exception_variant (fntype, spec);
19856 }
19857
19858 FOR_EACH_CLONE (clone, fn)
19859 {
19860 if (TREE_TYPE (clone) == fntype)
19861 TREE_TYPE (clone) = TREE_TYPE (fn);
19862 else
19863 TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone), spec);
19864 }
19865 }
19866
19867 /* Produce the definition of D, a _DECL generated from a template. If
19868 DEFER_OK is nonzero, then we don't have to actually do the
19869 instantiation now; we just have to do it sometime. Normally it is
19870 an error if this is an explicit instantiation but D is undefined.
19871 EXPL_INST_CLASS_MEM_P is true iff D is a member of an
19872 explicitly instantiated class template. */
19873
19874 tree
19875 instantiate_decl (tree d, int defer_ok,
19876 bool expl_inst_class_mem_p)
19877 {
19878 tree tmpl = DECL_TI_TEMPLATE (d);
19879 tree gen_args;
19880 tree args;
19881 tree td;
19882 tree code_pattern;
19883 tree spec;
19884 tree gen_tmpl;
19885 bool pattern_defined;
19886 location_t saved_loc = input_location;
19887 int saved_unevaluated_operand = cp_unevaluated_operand;
19888 int saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
19889 bool external_p;
19890 bool deleted_p;
19891 tree fn_context;
19892 bool nested;
19893
19894 /* This function should only be used to instantiate templates for
19895 functions and static member variables. */
19896 gcc_assert (VAR_OR_FUNCTION_DECL_P (d));
19897
19898 /* Variables are never deferred; if instantiation is required, they
19899 are instantiated right away. That allows for better code in the
19900 case that an expression refers to the value of the variable --
19901 if the variable has a constant value the referring expression can
19902 take advantage of that fact. */
19903 if (VAR_P (d)
19904 || DECL_DECLARED_CONSTEXPR_P (d))
19905 defer_ok = 0;
19906
19907 /* Don't instantiate cloned functions. Instead, instantiate the
19908 functions they cloned. */
19909 if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
19910 d = DECL_CLONED_FUNCTION (d);
19911
19912 if (DECL_TEMPLATE_INSTANTIATED (d)
19913 || (TREE_CODE (d) == FUNCTION_DECL
19914 && DECL_DEFAULTED_FN (d) && DECL_INITIAL (d))
19915 || DECL_TEMPLATE_SPECIALIZATION (d))
19916 /* D has already been instantiated or explicitly specialized, so
19917 there's nothing for us to do here.
19918
19919 It might seem reasonable to check whether or not D is an explicit
19920 instantiation, and, if so, stop here. But when an explicit
19921 instantiation is deferred until the end of the compilation,
19922 DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
19923 the instantiation. */
19924 return d;
19925
19926 /* Check to see whether we know that this template will be
19927 instantiated in some other file, as with "extern template"
19928 extension. */
19929 external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
19930
19931 /* In general, we do not instantiate such templates. */
19932 if (external_p && !always_instantiate_p (d))
19933 return d;
19934
19935 gen_tmpl = most_general_template (tmpl);
19936 gen_args = DECL_TI_ARGS (d);
19937
19938 if (tmpl != gen_tmpl)
19939 /* We should already have the extra args. */
19940 gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
19941 == TMPL_ARGS_DEPTH (gen_args));
19942 /* And what's in the hash table should match D. */
19943 gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
19944 || spec == NULL_TREE);
19945
19946 /* This needs to happen before any tsubsting. */
19947 if (! push_tinst_level (d))
19948 return d;
19949
19950 timevar_push (TV_TEMPLATE_INST);
19951
19952 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
19953 for the instantiation. */
19954 td = template_for_substitution (d);
19955 code_pattern = DECL_TEMPLATE_RESULT (td);
19956
19957 /* We should never be trying to instantiate a member of a class
19958 template or partial specialization. */
19959 gcc_assert (d != code_pattern);
19960
19961 if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
19962 || DECL_TEMPLATE_SPECIALIZATION (td))
19963 /* In the case of a friend template whose definition is provided
19964 outside the class, we may have too many arguments. Drop the
19965 ones we don't need. The same is true for specializations. */
19966 args = get_innermost_template_args
19967 (gen_args, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td)));
19968 else
19969 args = gen_args;
19970
19971 if (TREE_CODE (d) == FUNCTION_DECL)
19972 {
19973 deleted_p = DECL_DELETED_FN (code_pattern);
19974 pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE
19975 || DECL_DEFAULTED_OUTSIDE_CLASS_P (code_pattern)
19976 || deleted_p);
19977 }
19978 else
19979 {
19980 deleted_p = false;
19981 pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
19982 }
19983
19984 /* We may be in the middle of deferred access check. Disable it now. */
19985 push_deferring_access_checks (dk_no_deferred);
19986
19987 /* Unless an explicit instantiation directive has already determined
19988 the linkage of D, remember that a definition is available for
19989 this entity. */
19990 if (pattern_defined
19991 && !DECL_INTERFACE_KNOWN (d)
19992 && !DECL_NOT_REALLY_EXTERN (d))
19993 mark_definable (d);
19994
19995 DECL_SOURCE_LOCATION (td) = DECL_SOURCE_LOCATION (code_pattern);
19996 DECL_SOURCE_LOCATION (d) = DECL_SOURCE_LOCATION (code_pattern);
19997 input_location = DECL_SOURCE_LOCATION (d);
19998
19999 /* If D is a member of an explicitly instantiated class template,
20000 and no definition is available, treat it like an implicit
20001 instantiation. */
20002 if (!pattern_defined && expl_inst_class_mem_p
20003 && DECL_EXPLICIT_INSTANTIATION (d))
20004 {
20005 /* Leave linkage flags alone on instantiations with anonymous
20006 visibility. */
20007 if (TREE_PUBLIC (d))
20008 {
20009 DECL_NOT_REALLY_EXTERN (d) = 0;
20010 DECL_INTERFACE_KNOWN (d) = 0;
20011 }
20012 SET_DECL_IMPLICIT_INSTANTIATION (d);
20013 }
20014
20015 /* Defer all other templates, unless we have been explicitly
20016 forbidden from doing so. */
20017 if (/* If there is no definition, we cannot instantiate the
20018 template. */
20019 ! pattern_defined
20020 /* If it's OK to postpone instantiation, do so. */
20021 || defer_ok
20022 /* If this is a static data member that will be defined
20023 elsewhere, we don't want to instantiate the entire data
20024 member, but we do want to instantiate the initializer so that
20025 we can substitute that elsewhere. */
20026 || (external_p && VAR_P (d))
20027 /* Handle here a deleted function too, avoid generating
20028 its body (c++/61080). */
20029 || deleted_p)
20030 {
20031 /* The definition of the static data member is now required so
20032 we must substitute the initializer. */
20033 if (VAR_P (d)
20034 && !DECL_INITIAL (d)
20035 && DECL_INITIAL (code_pattern))
20036 {
20037 tree ns;
20038 tree init;
20039 bool const_init = false;
20040 bool enter_context = DECL_CLASS_SCOPE_P (d);
20041
20042 ns = decl_namespace_context (d);
20043 push_nested_namespace (ns);
20044 if (enter_context)
20045 push_nested_class (DECL_CONTEXT (d));
20046 init = tsubst_expr (DECL_INITIAL (code_pattern),
20047 args,
20048 tf_warning_or_error, NULL_TREE,
20049 /*integral_constant_expression_p=*/false);
20050 /* If instantiating the initializer involved instantiating this
20051 again, don't call cp_finish_decl twice. */
20052 if (!DECL_INITIAL (d))
20053 {
20054 /* Make sure the initializer is still constant, in case of
20055 circular dependency (template/instantiate6.C). */
20056 const_init
20057 = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
20058 cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
20059 /*asmspec_tree=*/NULL_TREE,
20060 LOOKUP_ONLYCONVERTING);
20061 }
20062 if (enter_context)
20063 pop_nested_class ();
20064 pop_nested_namespace (ns);
20065 }
20066
20067 /* We restore the source position here because it's used by
20068 add_pending_template. */
20069 input_location = saved_loc;
20070
20071 if (at_eof && !pattern_defined
20072 && DECL_EXPLICIT_INSTANTIATION (d)
20073 && DECL_NOT_REALLY_EXTERN (d))
20074 /* [temp.explicit]
20075
20076 The definition of a non-exported function template, a
20077 non-exported member function template, or a non-exported
20078 member function or static data member of a class template
20079 shall be present in every translation unit in which it is
20080 explicitly instantiated. */
20081 permerror (input_location, "explicit instantiation of %qD "
20082 "but no definition available", d);
20083
20084 /* If we're in unevaluated context, we just wanted to get the
20085 constant value; this isn't an odr use, so don't queue
20086 a full instantiation. */
20087 if (cp_unevaluated_operand != 0)
20088 goto out;
20089 /* ??? Historically, we have instantiated inline functions, even
20090 when marked as "extern template". */
20091 if (!(external_p && VAR_P (d)))
20092 add_pending_template (d);
20093 goto out;
20094 }
20095 /* Tell the repository that D is available in this translation unit
20096 -- and see if it is supposed to be instantiated here. */
20097 if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
20098 {
20099 /* In a PCH file, despite the fact that the repository hasn't
20100 requested instantiation in the PCH it is still possible that
20101 an instantiation will be required in a file that includes the
20102 PCH. */
20103 if (pch_file)
20104 add_pending_template (d);
20105 /* Instantiate inline functions so that the inliner can do its
20106 job, even though we'll not be emitting a copy of this
20107 function. */
20108 if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
20109 goto out;
20110 }
20111
20112 fn_context = decl_function_context (d);
20113 nested = (current_function_decl != NULL_TREE);
20114 if (!fn_context)
20115 push_to_top_level ();
20116 else
20117 {
20118 if (nested)
20119 push_function_context ();
20120 cp_unevaluated_operand = 0;
20121 c_inhibit_evaluation_warnings = 0;
20122 }
20123
20124 /* Mark D as instantiated so that recursive calls to
20125 instantiate_decl do not try to instantiate it again. */
20126 DECL_TEMPLATE_INSTANTIATED (d) = 1;
20127
20128 /* Regenerate the declaration in case the template has been modified
20129 by a subsequent redeclaration. */
20130 regenerate_decl_from_template (d, td);
20131
20132 /* We already set the file and line above. Reset them now in case
20133 they changed as a result of calling regenerate_decl_from_template. */
20134 input_location = DECL_SOURCE_LOCATION (d);
20135
20136 if (VAR_P (d))
20137 {
20138 tree init;
20139 bool const_init = false;
20140
20141 /* Clear out DECL_RTL; whatever was there before may not be right
20142 since we've reset the type of the declaration. */
20143 SET_DECL_RTL (d, NULL);
20144 DECL_IN_AGGR_P (d) = 0;
20145
20146 /* The initializer is placed in DECL_INITIAL by
20147 regenerate_decl_from_template so we don't need to
20148 push/pop_access_scope again here. Pull it out so that
20149 cp_finish_decl can process it. */
20150 init = DECL_INITIAL (d);
20151 DECL_INITIAL (d) = NULL_TREE;
20152 DECL_INITIALIZED_P (d) = 0;
20153
20154 /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
20155 initializer. That function will defer actual emission until
20156 we have a chance to determine linkage. */
20157 DECL_EXTERNAL (d) = 0;
20158
20159 /* Enter the scope of D so that access-checking works correctly. */
20160 bool enter_context = DECL_CLASS_SCOPE_P (d);
20161 if (enter_context)
20162 push_nested_class (DECL_CONTEXT (d));
20163
20164 const_init = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
20165 cp_finish_decl (d, init, const_init, NULL_TREE, 0);
20166
20167 if (enter_context)
20168 pop_nested_class ();
20169
20170 if (variable_template_p (td))
20171 note_variable_template_instantiation (d);
20172 }
20173 else if (TREE_CODE (d) == FUNCTION_DECL && DECL_DEFAULTED_FN (code_pattern))
20174 synthesize_method (d);
20175 else if (TREE_CODE (d) == FUNCTION_DECL)
20176 {
20177 hash_map<tree, tree> *saved_local_specializations;
20178 tree subst_decl;
20179 tree tmpl_parm;
20180 tree spec_parm;
20181 tree block = NULL_TREE;
20182
20183 /* Save away the current list, in case we are instantiating one
20184 template from within the body of another. */
20185 saved_local_specializations = local_specializations;
20186
20187 /* Set up the list of local specializations. */
20188 local_specializations = new hash_map<tree, tree>;
20189
20190 /* Set up context. */
20191 if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern)
20192 && TREE_CODE (DECL_CONTEXT (code_pattern)) == FUNCTION_DECL)
20193 block = push_stmt_list ();
20194 else
20195 start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
20196
20197 /* Some typedefs referenced from within the template code need to be
20198 access checked at template instantiation time, i.e now. These
20199 types were added to the template at parsing time. Let's get those
20200 and perform the access checks then. */
20201 perform_typedefs_access_check (DECL_TEMPLATE_RESULT (gen_tmpl),
20202 gen_args);
20203
20204 /* Create substitution entries for the parameters. */
20205 subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
20206 tmpl_parm = DECL_ARGUMENTS (subst_decl);
20207 spec_parm = DECL_ARGUMENTS (d);
20208 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
20209 {
20210 register_local_specialization (spec_parm, tmpl_parm);
20211 spec_parm = skip_artificial_parms_for (d, spec_parm);
20212 tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
20213 }
20214 for (; tmpl_parm; tmpl_parm = DECL_CHAIN (tmpl_parm))
20215 {
20216 if (!DECL_PACK_P (tmpl_parm))
20217 {
20218 register_local_specialization (spec_parm, tmpl_parm);
20219 spec_parm = DECL_CHAIN (spec_parm);
20220 }
20221 else
20222 {
20223 /* Register the (value) argument pack as a specialization of
20224 TMPL_PARM, then move on. */
20225 tree argpack = extract_fnparm_pack (tmpl_parm, &spec_parm);
20226 register_local_specialization (argpack, tmpl_parm);
20227 }
20228 }
20229 gcc_assert (!spec_parm);
20230
20231 /* Substitute into the body of the function. */
20232 if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern))
20233 tsubst_omp_udr (DECL_SAVED_TREE (code_pattern), args,
20234 tf_warning_or_error, tmpl);
20235 else
20236 {
20237 tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
20238 tf_warning_or_error, tmpl,
20239 /*integral_constant_expression_p=*/false);
20240
20241 /* Set the current input_location to the end of the function
20242 so that finish_function knows where we are. */
20243 input_location
20244 = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
20245
20246 /* Remember if we saw an infinite loop in the template. */
20247 current_function_infinite_loop
20248 = DECL_STRUCT_FUNCTION (code_pattern)->language->infinite_loop;
20249 }
20250
20251 /* We don't need the local specializations any more. */
20252 delete local_specializations;
20253 local_specializations = saved_local_specializations;
20254
20255 /* Finish the function. */
20256 if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern)
20257 && TREE_CODE (DECL_CONTEXT (code_pattern)) == FUNCTION_DECL)
20258 DECL_SAVED_TREE (d) = pop_stmt_list (block);
20259 else
20260 {
20261 d = finish_function (0);
20262 expand_or_defer_fn (d);
20263 }
20264
20265 if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern))
20266 cp_check_omp_declare_reduction (d);
20267 }
20268
20269 /* We're not deferring instantiation any more. */
20270 TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
20271
20272 if (!fn_context)
20273 pop_from_top_level ();
20274 else if (nested)
20275 pop_function_context ();
20276
20277 out:
20278 input_location = saved_loc;
20279 cp_unevaluated_operand = saved_unevaluated_operand;
20280 c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
20281 pop_deferring_access_checks ();
20282 pop_tinst_level ();
20283
20284 timevar_pop (TV_TEMPLATE_INST);
20285
20286 return d;
20287 }
20288
20289 /* Run through the list of templates that we wish we could
20290 instantiate, and instantiate any we can. RETRIES is the
20291 number of times we retry pending template instantiation. */
20292
20293 void
20294 instantiate_pending_templates (int retries)
20295 {
20296 int reconsider;
20297 location_t saved_loc = input_location;
20298
20299 /* Instantiating templates may trigger vtable generation. This in turn
20300 may require further template instantiations. We place a limit here
20301 to avoid infinite loop. */
20302 if (pending_templates && retries >= max_tinst_depth)
20303 {
20304 tree decl = pending_templates->tinst->decl;
20305
20306 fatal_error ("template instantiation depth exceeds maximum of %d"
20307 " instantiating %q+D, possibly from virtual table generation"
20308 " (use -ftemplate-depth= to increase the maximum)",
20309 max_tinst_depth, decl);
20310 if (TREE_CODE (decl) == FUNCTION_DECL)
20311 /* Pretend that we defined it. */
20312 DECL_INITIAL (decl) = error_mark_node;
20313 return;
20314 }
20315
20316 do
20317 {
20318 struct pending_template **t = &pending_templates;
20319 struct pending_template *last = NULL;
20320 reconsider = 0;
20321 while (*t)
20322 {
20323 tree instantiation = reopen_tinst_level ((*t)->tinst);
20324 bool complete = false;
20325
20326 if (TYPE_P (instantiation))
20327 {
20328 tree fn;
20329
20330 if (!COMPLETE_TYPE_P (instantiation))
20331 {
20332 instantiate_class_template (instantiation);
20333 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
20334 for (fn = TYPE_METHODS (instantiation);
20335 fn;
20336 fn = TREE_CHAIN (fn))
20337 if (! DECL_ARTIFICIAL (fn))
20338 instantiate_decl (fn,
20339 /*defer_ok=*/0,
20340 /*expl_inst_class_mem_p=*/false);
20341 if (COMPLETE_TYPE_P (instantiation))
20342 reconsider = 1;
20343 }
20344
20345 complete = COMPLETE_TYPE_P (instantiation);
20346 }
20347 else
20348 {
20349 if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
20350 && !DECL_TEMPLATE_INSTANTIATED (instantiation))
20351 {
20352 instantiation
20353 = instantiate_decl (instantiation,
20354 /*defer_ok=*/0,
20355 /*expl_inst_class_mem_p=*/false);
20356 if (DECL_TEMPLATE_INSTANTIATED (instantiation))
20357 reconsider = 1;
20358 }
20359
20360 complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
20361 || DECL_TEMPLATE_INSTANTIATED (instantiation));
20362 }
20363
20364 if (complete)
20365 /* If INSTANTIATION has been instantiated, then we don't
20366 need to consider it again in the future. */
20367 *t = (*t)->next;
20368 else
20369 {
20370 last = *t;
20371 t = &(*t)->next;
20372 }
20373 tinst_depth = 0;
20374 current_tinst_level = NULL;
20375 }
20376 last_pending_template = last;
20377 }
20378 while (reconsider);
20379
20380 input_location = saved_loc;
20381 }
20382
20383 /* Substitute ARGVEC into T, which is a list of initializers for
20384 either base class or a non-static data member. The TREE_PURPOSEs
20385 are DECLs, and the TREE_VALUEs are the initializer values. Used by
20386 instantiate_decl. */
20387
20388 static tree
20389 tsubst_initializer_list (tree t, tree argvec)
20390 {
20391 tree inits = NULL_TREE;
20392
20393 for (; t; t = TREE_CHAIN (t))
20394 {
20395 tree decl;
20396 tree init;
20397 tree expanded_bases = NULL_TREE;
20398 tree expanded_arguments = NULL_TREE;
20399 int i, len = 1;
20400
20401 if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
20402 {
20403 tree expr;
20404 tree arg;
20405
20406 /* Expand the base class expansion type into separate base
20407 classes. */
20408 expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
20409 tf_warning_or_error,
20410 NULL_TREE);
20411 if (expanded_bases == error_mark_node)
20412 continue;
20413
20414 /* We'll be building separate TREE_LISTs of arguments for
20415 each base. */
20416 len = TREE_VEC_LENGTH (expanded_bases);
20417 expanded_arguments = make_tree_vec (len);
20418 for (i = 0; i < len; i++)
20419 TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
20420
20421 /* Build a dummy EXPR_PACK_EXPANSION that will be used to
20422 expand each argument in the TREE_VALUE of t. */
20423 expr = make_node (EXPR_PACK_EXPANSION);
20424 PACK_EXPANSION_LOCAL_P (expr) = true;
20425 PACK_EXPANSION_PARAMETER_PACKS (expr) =
20426 PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
20427
20428 if (TREE_VALUE (t) == void_type_node)
20429 /* VOID_TYPE_NODE is used to indicate
20430 value-initialization. */
20431 {
20432 for (i = 0; i < len; i++)
20433 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
20434 }
20435 else
20436 {
20437 /* Substitute parameter packs into each argument in the
20438 TREE_LIST. */
20439 in_base_initializer = 1;
20440 for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
20441 {
20442 tree expanded_exprs;
20443
20444 /* Expand the argument. */
20445 SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
20446 expanded_exprs
20447 = tsubst_pack_expansion (expr, argvec,
20448 tf_warning_or_error,
20449 NULL_TREE);
20450 if (expanded_exprs == error_mark_node)
20451 continue;
20452
20453 /* Prepend each of the expanded expressions to the
20454 corresponding TREE_LIST in EXPANDED_ARGUMENTS. */
20455 for (i = 0; i < len; i++)
20456 {
20457 TREE_VEC_ELT (expanded_arguments, i) =
20458 tree_cons (NULL_TREE,
20459 TREE_VEC_ELT (expanded_exprs, i),
20460 TREE_VEC_ELT (expanded_arguments, i));
20461 }
20462 }
20463 in_base_initializer = 0;
20464
20465 /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
20466 since we built them backwards. */
20467 for (i = 0; i < len; i++)
20468 {
20469 TREE_VEC_ELT (expanded_arguments, i) =
20470 nreverse (TREE_VEC_ELT (expanded_arguments, i));
20471 }
20472 }
20473 }
20474
20475 for (i = 0; i < len; ++i)
20476 {
20477 if (expanded_bases)
20478 {
20479 decl = TREE_VEC_ELT (expanded_bases, i);
20480 decl = expand_member_init (decl);
20481 init = TREE_VEC_ELT (expanded_arguments, i);
20482 }
20483 else
20484 {
20485 tree tmp;
20486 decl = tsubst_copy (TREE_PURPOSE (t), argvec,
20487 tf_warning_or_error, NULL_TREE);
20488
20489 decl = expand_member_init (decl);
20490 if (decl && !DECL_P (decl))
20491 in_base_initializer = 1;
20492
20493 init = TREE_VALUE (t);
20494 tmp = init;
20495 if (init != void_type_node)
20496 init = tsubst_expr (init, argvec,
20497 tf_warning_or_error, NULL_TREE,
20498 /*integral_constant_expression_p=*/false);
20499 if (init == NULL_TREE && tmp != NULL_TREE)
20500 /* If we had an initializer but it instantiated to nothing,
20501 value-initialize the object. This will only occur when
20502 the initializer was a pack expansion where the parameter
20503 packs used in that expansion were of length zero. */
20504 init = void_type_node;
20505 in_base_initializer = 0;
20506 }
20507
20508 if (decl)
20509 {
20510 init = build_tree_list (decl, init);
20511 TREE_CHAIN (init) = inits;
20512 inits = init;
20513 }
20514 }
20515 }
20516 return inits;
20517 }
20518
20519 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
20520
20521 static void
20522 set_current_access_from_decl (tree decl)
20523 {
20524 if (TREE_PRIVATE (decl))
20525 current_access_specifier = access_private_node;
20526 else if (TREE_PROTECTED (decl))
20527 current_access_specifier = access_protected_node;
20528 else
20529 current_access_specifier = access_public_node;
20530 }
20531
20532 /* Instantiate an enumerated type. TAG is the template type, NEWTAG
20533 is the instantiation (which should have been created with
20534 start_enum) and ARGS are the template arguments to use. */
20535
20536 static void
20537 tsubst_enum (tree tag, tree newtag, tree args)
20538 {
20539 tree e;
20540
20541 if (SCOPED_ENUM_P (newtag))
20542 begin_scope (sk_scoped_enum, newtag);
20543
20544 for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
20545 {
20546 tree value;
20547 tree decl;
20548
20549 decl = TREE_VALUE (e);
20550 /* Note that in a template enum, the TREE_VALUE is the
20551 CONST_DECL, not the corresponding INTEGER_CST. */
20552 value = tsubst_expr (DECL_INITIAL (decl),
20553 args, tf_warning_or_error, NULL_TREE,
20554 /*integral_constant_expression_p=*/true);
20555
20556 /* Give this enumeration constant the correct access. */
20557 set_current_access_from_decl (decl);
20558
20559 /* Actually build the enumerator itself. */
20560 build_enumerator
20561 (DECL_NAME (decl), value, newtag, DECL_SOURCE_LOCATION (decl));
20562 }
20563
20564 if (SCOPED_ENUM_P (newtag))
20565 finish_scope ();
20566
20567 finish_enum_value_list (newtag);
20568 finish_enum (newtag);
20569
20570 DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
20571 = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
20572 }
20573
20574 /* DECL is a FUNCTION_DECL that is a template specialization. Return
20575 its type -- but without substituting the innermost set of template
20576 arguments. So, innermost set of template parameters will appear in
20577 the type. */
20578
20579 tree
20580 get_mostly_instantiated_function_type (tree decl)
20581 {
20582 tree fn_type;
20583 tree tmpl;
20584 tree targs;
20585 tree tparms;
20586 int parm_depth;
20587
20588 tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
20589 targs = DECL_TI_ARGS (decl);
20590 tparms = DECL_TEMPLATE_PARMS (tmpl);
20591 parm_depth = TMPL_PARMS_DEPTH (tparms);
20592
20593 /* There should be as many levels of arguments as there are levels
20594 of parameters. */
20595 gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
20596
20597 fn_type = TREE_TYPE (tmpl);
20598
20599 if (parm_depth == 1)
20600 /* No substitution is necessary. */
20601 ;
20602 else
20603 {
20604 int i;
20605 tree partial_args;
20606
20607 /* Replace the innermost level of the TARGS with NULL_TREEs to
20608 let tsubst know not to substitute for those parameters. */
20609 partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
20610 for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
20611 SET_TMPL_ARGS_LEVEL (partial_args, i,
20612 TMPL_ARGS_LEVEL (targs, i));
20613 SET_TMPL_ARGS_LEVEL (partial_args,
20614 TMPL_ARGS_DEPTH (targs),
20615 make_tree_vec (DECL_NTPARMS (tmpl)));
20616
20617 /* Make sure that we can see identifiers, and compute access
20618 correctly. */
20619 push_access_scope (decl);
20620
20621 ++processing_template_decl;
20622 /* Now, do the (partial) substitution to figure out the
20623 appropriate function type. */
20624 fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
20625 --processing_template_decl;
20626
20627 /* Substitute into the template parameters to obtain the real
20628 innermost set of parameters. This step is important if the
20629 innermost set of template parameters contains value
20630 parameters whose types depend on outer template parameters. */
20631 TREE_VEC_LENGTH (partial_args)--;
20632 tparms = tsubst_template_parms (tparms, partial_args, tf_error);
20633
20634 pop_access_scope (decl);
20635 }
20636
20637 return fn_type;
20638 }
20639
20640 /* Return truthvalue if we're processing a template different from
20641 the last one involved in diagnostics. */
20642 bool
20643 problematic_instantiation_changed (void)
20644 {
20645 return current_tinst_level != last_error_tinst_level;
20646 }
20647
20648 /* Remember current template involved in diagnostics. */
20649 void
20650 record_last_problematic_instantiation (void)
20651 {
20652 last_error_tinst_level = current_tinst_level;
20653 }
20654
20655 struct tinst_level *
20656 current_instantiation (void)
20657 {
20658 return current_tinst_level;
20659 }
20660
20661 /* [temp.param] Check that template non-type parm TYPE is of an allowable
20662 type. Return zero for ok, nonzero for disallowed. Issue error and
20663 warning messages under control of COMPLAIN. */
20664
20665 static int
20666 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
20667 {
20668 if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
20669 return 0;
20670 else if (POINTER_TYPE_P (type))
20671 return 0;
20672 else if (TYPE_PTRMEM_P (type))
20673 return 0;
20674 else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
20675 return 0;
20676 else if (TREE_CODE (type) == TYPENAME_TYPE)
20677 return 0;
20678 else if (TREE_CODE (type) == DECLTYPE_TYPE)
20679 return 0;
20680 else if (TREE_CODE (type) == NULLPTR_TYPE)
20681 return 0;
20682
20683 if (complain & tf_error)
20684 {
20685 if (type == error_mark_node)
20686 inform (input_location, "invalid template non-type parameter");
20687 else
20688 error ("%q#T is not a valid type for a template non-type parameter",
20689 type);
20690 }
20691 return 1;
20692 }
20693
20694 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
20695 Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
20696
20697 static bool
20698 dependent_type_p_r (tree type)
20699 {
20700 tree scope;
20701
20702 /* [temp.dep.type]
20703
20704 A type is dependent if it is:
20705
20706 -- a template parameter. Template template parameters are types
20707 for us (since TYPE_P holds true for them) so we handle
20708 them here. */
20709 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
20710 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
20711 return true;
20712 /* -- a qualified-id with a nested-name-specifier which contains a
20713 class-name that names a dependent type or whose unqualified-id
20714 names a dependent type. */
20715 if (TREE_CODE (type) == TYPENAME_TYPE)
20716 return true;
20717 /* -- a cv-qualified type where the cv-unqualified type is
20718 dependent. */
20719 type = TYPE_MAIN_VARIANT (type);
20720 /* -- a compound type constructed from any dependent type. */
20721 if (TYPE_PTRMEM_P (type))
20722 return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
20723 || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
20724 (type)));
20725 else if (TYPE_PTR_P (type)
20726 || TREE_CODE (type) == REFERENCE_TYPE)
20727 return dependent_type_p (TREE_TYPE (type));
20728 else if (TREE_CODE (type) == FUNCTION_TYPE
20729 || TREE_CODE (type) == METHOD_TYPE)
20730 {
20731 tree arg_type;
20732
20733 if (dependent_type_p (TREE_TYPE (type)))
20734 return true;
20735 for (arg_type = TYPE_ARG_TYPES (type);
20736 arg_type;
20737 arg_type = TREE_CHAIN (arg_type))
20738 if (dependent_type_p (TREE_VALUE (arg_type)))
20739 return true;
20740 return false;
20741 }
20742 /* -- an array type constructed from any dependent type or whose
20743 size is specified by a constant expression that is
20744 value-dependent.
20745
20746 We checked for type- and value-dependence of the bounds in
20747 compute_array_index_type, so TYPE_DEPENDENT_P is already set. */
20748 if (TREE_CODE (type) == ARRAY_TYPE)
20749 {
20750 if (TYPE_DOMAIN (type)
20751 && dependent_type_p (TYPE_DOMAIN (type)))
20752 return true;
20753 return dependent_type_p (TREE_TYPE (type));
20754 }
20755
20756 /* -- a template-id in which either the template name is a template
20757 parameter ... */
20758 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
20759 return true;
20760 /* ... or any of the template arguments is a dependent type or
20761 an expression that is type-dependent or value-dependent. */
20762 else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
20763 && (any_dependent_template_arguments_p
20764 (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
20765 return true;
20766
20767 /* All TYPEOF_TYPEs, DECLTYPE_TYPEs, and UNDERLYING_TYPEs are
20768 dependent; if the argument of the `typeof' expression is not
20769 type-dependent, then it should already been have resolved. */
20770 if (TREE_CODE (type) == TYPEOF_TYPE
20771 || TREE_CODE (type) == DECLTYPE_TYPE
20772 || TREE_CODE (type) == UNDERLYING_TYPE)
20773 return true;
20774
20775 /* A template argument pack is dependent if any of its packed
20776 arguments are. */
20777 if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
20778 {
20779 tree args = ARGUMENT_PACK_ARGS (type);
20780 int i, len = TREE_VEC_LENGTH (args);
20781 for (i = 0; i < len; ++i)
20782 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
20783 return true;
20784 }
20785
20786 /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
20787 be template parameters. */
20788 if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
20789 return true;
20790
20791 /* The standard does not specifically mention types that are local
20792 to template functions or local classes, but they should be
20793 considered dependent too. For example:
20794
20795 template <int I> void f() {
20796 enum E { a = I };
20797 S<sizeof (E)> s;
20798 }
20799
20800 The size of `E' cannot be known until the value of `I' has been
20801 determined. Therefore, `E' must be considered dependent. */
20802 scope = TYPE_CONTEXT (type);
20803 if (scope && TYPE_P (scope))
20804 return dependent_type_p (scope);
20805 /* Don't use type_dependent_expression_p here, as it can lead
20806 to infinite recursion trying to determine whether a lambda
20807 nested in a lambda is dependent (c++/47687). */
20808 else if (scope && TREE_CODE (scope) == FUNCTION_DECL
20809 && DECL_LANG_SPECIFIC (scope)
20810 && DECL_TEMPLATE_INFO (scope)
20811 && (any_dependent_template_arguments_p
20812 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (scope)))))
20813 return true;
20814
20815 /* Other types are non-dependent. */
20816 return false;
20817 }
20818
20819 /* Returns TRUE if TYPE is dependent, in the sense of
20820 [temp.dep.type]. Note that a NULL type is considered dependent. */
20821
20822 bool
20823 dependent_type_p (tree type)
20824 {
20825 /* If there are no template parameters in scope, then there can't be
20826 any dependent types. */
20827 if (!processing_template_decl)
20828 {
20829 /* If we are not processing a template, then nobody should be
20830 providing us with a dependent type. */
20831 gcc_assert (type);
20832 gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
20833 return false;
20834 }
20835
20836 /* If the type is NULL, we have not computed a type for the entity
20837 in question; in that case, the type is dependent. */
20838 if (!type)
20839 return true;
20840
20841 /* Erroneous types can be considered non-dependent. */
20842 if (type == error_mark_node)
20843 return false;
20844
20845 /* If we have not already computed the appropriate value for TYPE,
20846 do so now. */
20847 if (!TYPE_DEPENDENT_P_VALID (type))
20848 {
20849 TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
20850 TYPE_DEPENDENT_P_VALID (type) = 1;
20851 }
20852
20853 return TYPE_DEPENDENT_P (type);
20854 }
20855
20856 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
20857 lookup. In other words, a dependent type that is not the current
20858 instantiation. */
20859
20860 bool
20861 dependent_scope_p (tree scope)
20862 {
20863 return (scope && TYPE_P (scope) && dependent_type_p (scope)
20864 && !currently_open_class (scope));
20865 }
20866
20867 /* T is a SCOPE_REF; return whether we need to consider it
20868 instantiation-dependent so that we can check access at instantiation
20869 time even though we know which member it resolves to. */
20870
20871 static bool
20872 instantiation_dependent_scope_ref_p (tree t)
20873 {
20874 if (DECL_P (TREE_OPERAND (t, 1))
20875 && CLASS_TYPE_P (TREE_OPERAND (t, 0))
20876 && accessible_in_template_p (TREE_OPERAND (t, 0),
20877 TREE_OPERAND (t, 1)))
20878 return false;
20879 else
20880 return true;
20881 }
20882
20883 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
20884 [temp.dep.constexpr]. EXPRESSION is already known to be a constant
20885 expression. */
20886
20887 /* Note that this predicate is not appropriate for general expressions;
20888 only constant expressions (that satisfy potential_constant_expression)
20889 can be tested for value dependence. */
20890
20891 bool
20892 value_dependent_expression_p (tree expression)
20893 {
20894 if (!processing_template_decl)
20895 return false;
20896
20897 /* A name declared with a dependent type. */
20898 if (DECL_P (expression) && type_dependent_expression_p (expression))
20899 return true;
20900
20901 switch (TREE_CODE (expression))
20902 {
20903 case IDENTIFIER_NODE:
20904 /* A name that has not been looked up -- must be dependent. */
20905 return true;
20906
20907 case TEMPLATE_PARM_INDEX:
20908 /* A non-type template parm. */
20909 return true;
20910
20911 case CONST_DECL:
20912 /* A non-type template parm. */
20913 if (DECL_TEMPLATE_PARM_P (expression))
20914 return true;
20915 return value_dependent_expression_p (DECL_INITIAL (expression));
20916
20917 case VAR_DECL:
20918 /* A constant with literal type and is initialized
20919 with an expression that is value-dependent.
20920
20921 Note that a non-dependent parenthesized initializer will have
20922 already been replaced with its constant value, so if we see
20923 a TREE_LIST it must be dependent. */
20924 if (DECL_INITIAL (expression)
20925 && decl_constant_var_p (expression)
20926 && (TREE_CODE (DECL_INITIAL (expression)) == TREE_LIST
20927 || value_dependent_expression_p (DECL_INITIAL (expression))))
20928 return true;
20929 return false;
20930
20931 case DYNAMIC_CAST_EXPR:
20932 case STATIC_CAST_EXPR:
20933 case CONST_CAST_EXPR:
20934 case REINTERPRET_CAST_EXPR:
20935 case CAST_EXPR:
20936 /* These expressions are value-dependent if the type to which
20937 the cast occurs is dependent or the expression being casted
20938 is value-dependent. */
20939 {
20940 tree type = TREE_TYPE (expression);
20941
20942 if (dependent_type_p (type))
20943 return true;
20944
20945 /* A functional cast has a list of operands. */
20946 expression = TREE_OPERAND (expression, 0);
20947 if (!expression)
20948 {
20949 /* If there are no operands, it must be an expression such
20950 as "int()". This should not happen for aggregate types
20951 because it would form non-constant expressions. */
20952 gcc_assert (cxx_dialect >= cxx11
20953 || INTEGRAL_OR_ENUMERATION_TYPE_P (type));
20954
20955 return false;
20956 }
20957
20958 if (TREE_CODE (expression) == TREE_LIST)
20959 return any_value_dependent_elements_p (expression);
20960
20961 return value_dependent_expression_p (expression);
20962 }
20963
20964 case SIZEOF_EXPR:
20965 if (SIZEOF_EXPR_TYPE_P (expression))
20966 return dependent_type_p (TREE_TYPE (TREE_OPERAND (expression, 0)));
20967 /* FALLTHRU */
20968 case ALIGNOF_EXPR:
20969 case TYPEID_EXPR:
20970 /* A `sizeof' expression is value-dependent if the operand is
20971 type-dependent or is a pack expansion. */
20972 expression = TREE_OPERAND (expression, 0);
20973 if (PACK_EXPANSION_P (expression))
20974 return true;
20975 else if (TYPE_P (expression))
20976 return dependent_type_p (expression);
20977 return instantiation_dependent_expression_p (expression);
20978
20979 case AT_ENCODE_EXPR:
20980 /* An 'encode' expression is value-dependent if the operand is
20981 type-dependent. */
20982 expression = TREE_OPERAND (expression, 0);
20983 return dependent_type_p (expression);
20984
20985 case NOEXCEPT_EXPR:
20986 expression = TREE_OPERAND (expression, 0);
20987 return instantiation_dependent_expression_p (expression);
20988
20989 case SCOPE_REF:
20990 /* All instantiation-dependent expressions should also be considered
20991 value-dependent. */
20992 return instantiation_dependent_scope_ref_p (expression);
20993
20994 case COMPONENT_REF:
20995 return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
20996 || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
20997
20998 case NONTYPE_ARGUMENT_PACK:
20999 /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
21000 is value-dependent. */
21001 {
21002 tree values = ARGUMENT_PACK_ARGS (expression);
21003 int i, len = TREE_VEC_LENGTH (values);
21004
21005 for (i = 0; i < len; ++i)
21006 if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
21007 return true;
21008
21009 return false;
21010 }
21011
21012 case TRAIT_EXPR:
21013 {
21014 tree type2 = TRAIT_EXPR_TYPE2 (expression);
21015 return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
21016 || (type2 ? dependent_type_p (type2) : false));
21017 }
21018
21019 case MODOP_EXPR:
21020 return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
21021 || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
21022
21023 case ARRAY_REF:
21024 return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
21025 || (value_dependent_expression_p (TREE_OPERAND (expression, 1))));
21026
21027 case ADDR_EXPR:
21028 {
21029 tree op = TREE_OPERAND (expression, 0);
21030 return (value_dependent_expression_p (op)
21031 || has_value_dependent_address (op));
21032 }
21033
21034 case CALL_EXPR:
21035 {
21036 tree fn = get_callee_fndecl (expression);
21037 int i, nargs;
21038 if (!fn && value_dependent_expression_p (CALL_EXPR_FN (expression)))
21039 return true;
21040 nargs = call_expr_nargs (expression);
21041 for (i = 0; i < nargs; ++i)
21042 {
21043 tree op = CALL_EXPR_ARG (expression, i);
21044 /* In a call to a constexpr member function, look through the
21045 implicit ADDR_EXPR on the object argument so that it doesn't
21046 cause the call to be considered value-dependent. We also
21047 look through it in potential_constant_expression. */
21048 if (i == 0 && fn && DECL_DECLARED_CONSTEXPR_P (fn)
21049 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
21050 && TREE_CODE (op) == ADDR_EXPR)
21051 op = TREE_OPERAND (op, 0);
21052 if (value_dependent_expression_p (op))
21053 return true;
21054 }
21055 return false;
21056 }
21057
21058 case TEMPLATE_ID_EXPR:
21059 /* If a TEMPLATE_ID_EXPR involves a dependent name, it will be
21060 type-dependent. */
21061 return type_dependent_expression_p (expression);
21062
21063 case CONSTRUCTOR:
21064 {
21065 unsigned ix;
21066 tree val;
21067 if (dependent_type_p (TREE_TYPE (expression)))
21068 return true;
21069 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), ix, val)
21070 if (value_dependent_expression_p (val))
21071 return true;
21072 return false;
21073 }
21074
21075 case STMT_EXPR:
21076 /* Treat a GNU statement expression as dependent to avoid crashing
21077 under fold_non_dependent_expr; it can't be constant. */
21078 return true;
21079
21080 default:
21081 /* A constant expression is value-dependent if any subexpression is
21082 value-dependent. */
21083 switch (TREE_CODE_CLASS (TREE_CODE (expression)))
21084 {
21085 case tcc_reference:
21086 case tcc_unary:
21087 case tcc_comparison:
21088 case tcc_binary:
21089 case tcc_expression:
21090 case tcc_vl_exp:
21091 {
21092 int i, len = cp_tree_operand_length (expression);
21093
21094 for (i = 0; i < len; i++)
21095 {
21096 tree t = TREE_OPERAND (expression, i);
21097
21098 /* In some cases, some of the operands may be missing.l
21099 (For example, in the case of PREDECREMENT_EXPR, the
21100 amount to increment by may be missing.) That doesn't
21101 make the expression dependent. */
21102 if (t && value_dependent_expression_p (t))
21103 return true;
21104 }
21105 }
21106 break;
21107 default:
21108 break;
21109 }
21110 break;
21111 }
21112
21113 /* The expression is not value-dependent. */
21114 return false;
21115 }
21116
21117 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
21118 [temp.dep.expr]. Note that an expression with no type is
21119 considered dependent. Other parts of the compiler arrange for an
21120 expression with type-dependent subexpressions to have no type, so
21121 this function doesn't have to be fully recursive. */
21122
21123 bool
21124 type_dependent_expression_p (tree expression)
21125 {
21126 if (!processing_template_decl)
21127 return false;
21128
21129 if (expression == NULL_TREE || expression == error_mark_node)
21130 return false;
21131
21132 /* An unresolved name is always dependent. */
21133 if (identifier_p (expression) || TREE_CODE (expression) == USING_DECL)
21134 return true;
21135
21136 /* Some expression forms are never type-dependent. */
21137 if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
21138 || TREE_CODE (expression) == SIZEOF_EXPR
21139 || TREE_CODE (expression) == ALIGNOF_EXPR
21140 || TREE_CODE (expression) == AT_ENCODE_EXPR
21141 || TREE_CODE (expression) == NOEXCEPT_EXPR
21142 || TREE_CODE (expression) == TRAIT_EXPR
21143 || TREE_CODE (expression) == TYPEID_EXPR
21144 || TREE_CODE (expression) == DELETE_EXPR
21145 || TREE_CODE (expression) == VEC_DELETE_EXPR
21146 || TREE_CODE (expression) == THROW_EXPR)
21147 return false;
21148
21149 /* The types of these expressions depends only on the type to which
21150 the cast occurs. */
21151 if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
21152 || TREE_CODE (expression) == STATIC_CAST_EXPR
21153 || TREE_CODE (expression) == CONST_CAST_EXPR
21154 || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
21155 || TREE_CODE (expression) == IMPLICIT_CONV_EXPR
21156 || TREE_CODE (expression) == CAST_EXPR)
21157 return dependent_type_p (TREE_TYPE (expression));
21158
21159 /* The types of these expressions depends only on the type created
21160 by the expression. */
21161 if (TREE_CODE (expression) == NEW_EXPR
21162 || TREE_CODE (expression) == VEC_NEW_EXPR)
21163 {
21164 /* For NEW_EXPR tree nodes created inside a template, either
21165 the object type itself or a TREE_LIST may appear as the
21166 operand 1. */
21167 tree type = TREE_OPERAND (expression, 1);
21168 if (TREE_CODE (type) == TREE_LIST)
21169 /* This is an array type. We need to check array dimensions
21170 as well. */
21171 return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
21172 || value_dependent_expression_p
21173 (TREE_OPERAND (TREE_VALUE (type), 1));
21174 else
21175 return dependent_type_p (type);
21176 }
21177
21178 if (TREE_CODE (expression) == SCOPE_REF)
21179 {
21180 tree scope = TREE_OPERAND (expression, 0);
21181 tree name = TREE_OPERAND (expression, 1);
21182
21183 /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
21184 contains an identifier associated by name lookup with one or more
21185 declarations declared with a dependent type, or...a
21186 nested-name-specifier or qualified-id that names a member of an
21187 unknown specialization. */
21188 return (type_dependent_expression_p (name)
21189 || dependent_scope_p (scope));
21190 }
21191
21192 if (TREE_CODE (expression) == FUNCTION_DECL
21193 && DECL_LANG_SPECIFIC (expression)
21194 && DECL_TEMPLATE_INFO (expression)
21195 && (any_dependent_template_arguments_p
21196 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
21197 return true;
21198
21199 if (TREE_CODE (expression) == TEMPLATE_DECL
21200 && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
21201 return false;
21202
21203 if (TREE_CODE (expression) == STMT_EXPR)
21204 expression = stmt_expr_value_expr (expression);
21205
21206 if (BRACE_ENCLOSED_INITIALIZER_P (expression))
21207 {
21208 tree elt;
21209 unsigned i;
21210
21211 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
21212 {
21213 if (type_dependent_expression_p (elt))
21214 return true;
21215 }
21216 return false;
21217 }
21218
21219 /* A static data member of the current instantiation with incomplete
21220 array type is type-dependent, as the definition and specializations
21221 can have different bounds. */
21222 if (VAR_P (expression)
21223 && DECL_CLASS_SCOPE_P (expression)
21224 && dependent_type_p (DECL_CONTEXT (expression))
21225 && VAR_HAD_UNKNOWN_BOUND (expression))
21226 return true;
21227
21228 /* An array of unknown bound depending on a variadic parameter, eg:
21229
21230 template<typename... Args>
21231 void foo (Args... args)
21232 {
21233 int arr[] = { args... };
21234 }
21235
21236 template<int... vals>
21237 void bar ()
21238 {
21239 int arr[] = { vals... };
21240 }
21241
21242 If the array has no length and has an initializer, it must be that
21243 we couldn't determine its length in cp_complete_array_type because
21244 it is dependent. */
21245 if (VAR_P (expression)
21246 && TREE_CODE (TREE_TYPE (expression)) == ARRAY_TYPE
21247 && !TYPE_DOMAIN (TREE_TYPE (expression))
21248 && DECL_INITIAL (expression))
21249 return true;
21250
21251 if (TREE_TYPE (expression) == unknown_type_node)
21252 {
21253 if (TREE_CODE (expression) == ADDR_EXPR)
21254 return type_dependent_expression_p (TREE_OPERAND (expression, 0));
21255 if (TREE_CODE (expression) == COMPONENT_REF
21256 || TREE_CODE (expression) == OFFSET_REF)
21257 {
21258 if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
21259 return true;
21260 expression = TREE_OPERAND (expression, 1);
21261 if (identifier_p (expression))
21262 return false;
21263 }
21264 /* SCOPE_REF with non-null TREE_TYPE is always non-dependent. */
21265 if (TREE_CODE (expression) == SCOPE_REF)
21266 return false;
21267
21268 /* Always dependent, on the number of arguments if nothing else. */
21269 if (TREE_CODE (expression) == EXPR_PACK_EXPANSION)
21270 return true;
21271
21272 if (BASELINK_P (expression))
21273 {
21274 if (BASELINK_OPTYPE (expression)
21275 && dependent_type_p (BASELINK_OPTYPE (expression)))
21276 return true;
21277 expression = BASELINK_FUNCTIONS (expression);
21278 }
21279
21280 if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
21281 {
21282 if (any_dependent_template_arguments_p
21283 (TREE_OPERAND (expression, 1)))
21284 return true;
21285 expression = TREE_OPERAND (expression, 0);
21286 }
21287 gcc_assert (TREE_CODE (expression) == OVERLOAD
21288 || TREE_CODE (expression) == FUNCTION_DECL);
21289
21290 while (expression)
21291 {
21292 if (type_dependent_expression_p (OVL_CURRENT (expression)))
21293 return true;
21294 expression = OVL_NEXT (expression);
21295 }
21296 return false;
21297 }
21298
21299 gcc_assert (TREE_CODE (expression) != TYPE_DECL);
21300
21301 return (dependent_type_p (TREE_TYPE (expression)));
21302 }
21303
21304 /* walk_tree callback function for instantiation_dependent_expression_p,
21305 below. Returns non-zero if a dependent subexpression is found. */
21306
21307 static tree
21308 instantiation_dependent_r (tree *tp, int *walk_subtrees,
21309 void * /*data*/)
21310 {
21311 if (TYPE_P (*tp))
21312 {
21313 /* We don't have to worry about decltype currently because decltype
21314 of an instantiation-dependent expr is a dependent type. This
21315 might change depending on the resolution of DR 1172. */
21316 *walk_subtrees = false;
21317 return NULL_TREE;
21318 }
21319 enum tree_code code = TREE_CODE (*tp);
21320 switch (code)
21321 {
21322 /* Don't treat an argument list as dependent just because it has no
21323 TREE_TYPE. */
21324 case TREE_LIST:
21325 case TREE_VEC:
21326 return NULL_TREE;
21327
21328 case VAR_DECL:
21329 case CONST_DECL:
21330 /* A constant with a dependent initializer is dependent. */
21331 if (value_dependent_expression_p (*tp))
21332 return *tp;
21333 break;
21334
21335 case TEMPLATE_PARM_INDEX:
21336 return *tp;
21337
21338 /* Handle expressions with type operands. */
21339 case SIZEOF_EXPR:
21340 case ALIGNOF_EXPR:
21341 case TYPEID_EXPR:
21342 case AT_ENCODE_EXPR:
21343 {
21344 tree op = TREE_OPERAND (*tp, 0);
21345 if (code == SIZEOF_EXPR && SIZEOF_EXPR_TYPE_P (*tp))
21346 op = TREE_TYPE (op);
21347 if (TYPE_P (op))
21348 {
21349 if (dependent_type_p (op))
21350 return *tp;
21351 else
21352 {
21353 *walk_subtrees = false;
21354 return NULL_TREE;
21355 }
21356 }
21357 break;
21358 }
21359
21360 case TRAIT_EXPR:
21361 if (dependent_type_p (TRAIT_EXPR_TYPE1 (*tp))
21362 || (TRAIT_EXPR_TYPE2 (*tp)
21363 && dependent_type_p (TRAIT_EXPR_TYPE2 (*tp))))
21364 return *tp;
21365 *walk_subtrees = false;
21366 return NULL_TREE;
21367
21368 case COMPONENT_REF:
21369 if (identifier_p (TREE_OPERAND (*tp, 1)))
21370 /* In a template, finish_class_member_access_expr creates a
21371 COMPONENT_REF with an IDENTIFIER_NODE for op1 even if it isn't
21372 type-dependent, so that we can check access control at
21373 instantiation time (PR 42277). See also Core issue 1273. */
21374 return *tp;
21375 break;
21376
21377 case SCOPE_REF:
21378 if (instantiation_dependent_scope_ref_p (*tp))
21379 return *tp;
21380 else
21381 break;
21382
21383 /* Treat statement-expressions as dependent. */
21384 case BIND_EXPR:
21385 return *tp;
21386
21387 default:
21388 break;
21389 }
21390
21391 if (type_dependent_expression_p (*tp))
21392 return *tp;
21393 else
21394 return NULL_TREE;
21395 }
21396
21397 /* Returns TRUE if the EXPRESSION is instantiation-dependent, in the
21398 sense defined by the ABI:
21399
21400 "An expression is instantiation-dependent if it is type-dependent
21401 or value-dependent, or it has a subexpression that is type-dependent
21402 or value-dependent." */
21403
21404 bool
21405 instantiation_dependent_expression_p (tree expression)
21406 {
21407 tree result;
21408
21409 if (!processing_template_decl)
21410 return false;
21411
21412 if (expression == error_mark_node)
21413 return false;
21414
21415 result = cp_walk_tree_without_duplicates (&expression,
21416 instantiation_dependent_r, NULL);
21417 return result != NULL_TREE;
21418 }
21419
21420 /* Like type_dependent_expression_p, but it also works while not processing
21421 a template definition, i.e. during substitution or mangling. */
21422
21423 bool
21424 type_dependent_expression_p_push (tree expr)
21425 {
21426 bool b;
21427 ++processing_template_decl;
21428 b = type_dependent_expression_p (expr);
21429 --processing_template_decl;
21430 return b;
21431 }
21432
21433 /* Returns TRUE if ARGS contains a type-dependent expression. */
21434
21435 bool
21436 any_type_dependent_arguments_p (const vec<tree, va_gc> *args)
21437 {
21438 unsigned int i;
21439 tree arg;
21440
21441 FOR_EACH_VEC_SAFE_ELT (args, i, arg)
21442 {
21443 if (type_dependent_expression_p (arg))
21444 return true;
21445 }
21446 return false;
21447 }
21448
21449 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
21450 expressions) contains any type-dependent expressions. */
21451
21452 bool
21453 any_type_dependent_elements_p (const_tree list)
21454 {
21455 for (; list; list = TREE_CHAIN (list))
21456 if (type_dependent_expression_p (TREE_VALUE (list)))
21457 return true;
21458
21459 return false;
21460 }
21461
21462 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
21463 expressions) contains any value-dependent expressions. */
21464
21465 bool
21466 any_value_dependent_elements_p (const_tree list)
21467 {
21468 for (; list; list = TREE_CHAIN (list))
21469 if (value_dependent_expression_p (TREE_VALUE (list)))
21470 return true;
21471
21472 return false;
21473 }
21474
21475 /* Returns TRUE if the ARG (a template argument) is dependent. */
21476
21477 bool
21478 dependent_template_arg_p (tree arg)
21479 {
21480 if (!processing_template_decl)
21481 return false;
21482
21483 /* Assume a template argument that was wrongly written by the user
21484 is dependent. This is consistent with what
21485 any_dependent_template_arguments_p [that calls this function]
21486 does. */
21487 if (!arg || arg == error_mark_node)
21488 return true;
21489
21490 if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
21491 arg = ARGUMENT_PACK_SELECT_ARG (arg);
21492
21493 if (TREE_CODE (arg) == TEMPLATE_DECL
21494 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
21495 return dependent_template_p (arg);
21496 else if (ARGUMENT_PACK_P (arg))
21497 {
21498 tree args = ARGUMENT_PACK_ARGS (arg);
21499 int i, len = TREE_VEC_LENGTH (args);
21500 for (i = 0; i < len; ++i)
21501 {
21502 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
21503 return true;
21504 }
21505
21506 return false;
21507 }
21508 else if (TYPE_P (arg))
21509 return dependent_type_p (arg);
21510 else
21511 return (type_dependent_expression_p (arg)
21512 || value_dependent_expression_p (arg));
21513 }
21514
21515 /* Returns true if ARGS (a collection of template arguments) contains
21516 any types that require structural equality testing. */
21517
21518 bool
21519 any_template_arguments_need_structural_equality_p (tree args)
21520 {
21521 int i;
21522 int j;
21523
21524 if (!args)
21525 return false;
21526 if (args == error_mark_node)
21527 return true;
21528
21529 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
21530 {
21531 tree level = TMPL_ARGS_LEVEL (args, i + 1);
21532 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
21533 {
21534 tree arg = TREE_VEC_ELT (level, j);
21535 tree packed_args = NULL_TREE;
21536 int k, len = 1;
21537
21538 if (ARGUMENT_PACK_P (arg))
21539 {
21540 /* Look inside the argument pack. */
21541 packed_args = ARGUMENT_PACK_ARGS (arg);
21542 len = TREE_VEC_LENGTH (packed_args);
21543 }
21544
21545 for (k = 0; k < len; ++k)
21546 {
21547 if (packed_args)
21548 arg = TREE_VEC_ELT (packed_args, k);
21549
21550 if (error_operand_p (arg))
21551 return true;
21552 else if (TREE_CODE (arg) == TEMPLATE_DECL)
21553 continue;
21554 else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
21555 return true;
21556 else if (!TYPE_P (arg) && TREE_TYPE (arg)
21557 && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
21558 return true;
21559 }
21560 }
21561 }
21562
21563 return false;
21564 }
21565
21566 /* Returns true if ARGS (a collection of template arguments) contains
21567 any dependent arguments. */
21568
21569 bool
21570 any_dependent_template_arguments_p (const_tree args)
21571 {
21572 int i;
21573 int j;
21574
21575 if (!args)
21576 return false;
21577 if (args == error_mark_node)
21578 return true;
21579
21580 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
21581 {
21582 const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
21583 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
21584 if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
21585 return true;
21586 }
21587
21588 return false;
21589 }
21590
21591 /* Returns TRUE if the template TMPL is dependent. */
21592
21593 bool
21594 dependent_template_p (tree tmpl)
21595 {
21596 if (TREE_CODE (tmpl) == OVERLOAD)
21597 {
21598 while (tmpl)
21599 {
21600 if (dependent_template_p (OVL_CURRENT (tmpl)))
21601 return true;
21602 tmpl = OVL_NEXT (tmpl);
21603 }
21604 return false;
21605 }
21606
21607 /* Template template parameters are dependent. */
21608 if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
21609 || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
21610 return true;
21611 /* So are names that have not been looked up. */
21612 if (TREE_CODE (tmpl) == SCOPE_REF || identifier_p (tmpl))
21613 return true;
21614 /* So are member templates of dependent classes. */
21615 if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
21616 return dependent_type_p (DECL_CONTEXT (tmpl));
21617 return false;
21618 }
21619
21620 /* Returns TRUE if the specialization TMPL<ARGS> is dependent. */
21621
21622 bool
21623 dependent_template_id_p (tree tmpl, tree args)
21624 {
21625 return (dependent_template_p (tmpl)
21626 || any_dependent_template_arguments_p (args));
21627 }
21628
21629 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
21630 is dependent. */
21631
21632 bool
21633 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
21634 {
21635 int i;
21636
21637 if (!processing_template_decl)
21638 return false;
21639
21640 for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
21641 {
21642 tree decl = TREE_VEC_ELT (declv, i);
21643 tree init = TREE_VEC_ELT (initv, i);
21644 tree cond = TREE_VEC_ELT (condv, i);
21645 tree incr = TREE_VEC_ELT (incrv, i);
21646
21647 if (type_dependent_expression_p (decl))
21648 return true;
21649
21650 if (init && type_dependent_expression_p (init))
21651 return true;
21652
21653 if (type_dependent_expression_p (cond))
21654 return true;
21655
21656 if (COMPARISON_CLASS_P (cond)
21657 && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
21658 || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
21659 return true;
21660
21661 if (TREE_CODE (incr) == MODOP_EXPR)
21662 {
21663 if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
21664 || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
21665 return true;
21666 }
21667 else if (type_dependent_expression_p (incr))
21668 return true;
21669 else if (TREE_CODE (incr) == MODIFY_EXPR)
21670 {
21671 if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
21672 return true;
21673 else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
21674 {
21675 tree t = TREE_OPERAND (incr, 1);
21676 if (type_dependent_expression_p (TREE_OPERAND (t, 0))
21677 || type_dependent_expression_p (TREE_OPERAND (t, 1)))
21678 return true;
21679 }
21680 }
21681 }
21682
21683 return false;
21684 }
21685
21686 /* TYPE is a TYPENAME_TYPE. Returns the ordinary TYPE to which the
21687 TYPENAME_TYPE corresponds. Returns the original TYPENAME_TYPE if
21688 no such TYPE can be found. Note that this function peers inside
21689 uninstantiated templates and therefore should be used only in
21690 extremely limited situations. ONLY_CURRENT_P restricts this
21691 peering to the currently open classes hierarchy (which is required
21692 when comparing types). */
21693
21694 tree
21695 resolve_typename_type (tree type, bool only_current_p)
21696 {
21697 tree scope;
21698 tree name;
21699 tree decl;
21700 int quals;
21701 tree pushed_scope;
21702 tree result;
21703
21704 gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
21705
21706 scope = TYPE_CONTEXT (type);
21707 /* Usually the non-qualified identifier of a TYPENAME_TYPE is
21708 TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
21709 a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
21710 the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
21711 identifier of the TYPENAME_TYPE anymore.
21712 So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
21713 TYPENAME_TYPE instead, we avoid messing up with a possible
21714 typedef variant case. */
21715 name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
21716
21717 /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
21718 it first before we can figure out what NAME refers to. */
21719 if (TREE_CODE (scope) == TYPENAME_TYPE)
21720 {
21721 if (TYPENAME_IS_RESOLVING_P (scope))
21722 /* Given a class template A with a dependent base with nested type C,
21723 typedef typename A::C::C C will land us here, as trying to resolve
21724 the initial A::C leads to the local C typedef, which leads back to
21725 A::C::C. So we break the recursion now. */
21726 return type;
21727 else
21728 scope = resolve_typename_type (scope, only_current_p);
21729 }
21730 /* If we don't know what SCOPE refers to, then we cannot resolve the
21731 TYPENAME_TYPE. */
21732 if (TREE_CODE (scope) == TYPENAME_TYPE)
21733 return type;
21734 /* If the SCOPE is a template type parameter, we have no way of
21735 resolving the name. */
21736 if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
21737 return type;
21738 /* If the SCOPE is not the current instantiation, there's no reason
21739 to look inside it. */
21740 if (only_current_p && !currently_open_class (scope))
21741 return type;
21742 /* If this is a typedef, we don't want to look inside (c++/11987). */
21743 if (typedef_variant_p (type))
21744 return type;
21745 /* If SCOPE isn't the template itself, it will not have a valid
21746 TYPE_FIELDS list. */
21747 if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
21748 /* scope is either the template itself or a compatible instantiation
21749 like X<T>, so look up the name in the original template. */
21750 scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
21751 else
21752 /* scope is a partial instantiation, so we can't do the lookup or we
21753 will lose the template arguments. */
21754 return type;
21755 /* Enter the SCOPE so that name lookup will be resolved as if we
21756 were in the class definition. In particular, SCOPE will no
21757 longer be considered a dependent type. */
21758 pushed_scope = push_scope (scope);
21759 /* Look up the declaration. */
21760 decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true,
21761 tf_warning_or_error);
21762
21763 result = NULL_TREE;
21764
21765 /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
21766 find a TEMPLATE_DECL. Otherwise, we want to find a TYPE_DECL. */
21767 if (!decl)
21768 /*nop*/;
21769 else if (identifier_p (TYPENAME_TYPE_FULLNAME (type))
21770 && TREE_CODE (decl) == TYPE_DECL)
21771 {
21772 result = TREE_TYPE (decl);
21773 if (result == error_mark_node)
21774 result = NULL_TREE;
21775 }
21776 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
21777 && DECL_CLASS_TEMPLATE_P (decl))
21778 {
21779 tree tmpl;
21780 tree args;
21781 /* Obtain the template and the arguments. */
21782 tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
21783 args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
21784 /* Instantiate the template. */
21785 result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
21786 /*entering_scope=*/0,
21787 tf_error | tf_user);
21788 if (result == error_mark_node)
21789 result = NULL_TREE;
21790 }
21791
21792 /* Leave the SCOPE. */
21793 if (pushed_scope)
21794 pop_scope (pushed_scope);
21795
21796 /* If we failed to resolve it, return the original typename. */
21797 if (!result)
21798 return type;
21799
21800 /* If lookup found a typename type, resolve that too. */
21801 if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
21802 {
21803 /* Ill-formed programs can cause infinite recursion here, so we
21804 must catch that. */
21805 TYPENAME_IS_RESOLVING_P (type) = 1;
21806 result = resolve_typename_type (result, only_current_p);
21807 TYPENAME_IS_RESOLVING_P (type) = 0;
21808 }
21809
21810 /* Qualify the resulting type. */
21811 quals = cp_type_quals (type);
21812 if (quals)
21813 result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
21814
21815 return result;
21816 }
21817
21818 /* EXPR is an expression which is not type-dependent. Return a proxy
21819 for EXPR that can be used to compute the types of larger
21820 expressions containing EXPR. */
21821
21822 tree
21823 build_non_dependent_expr (tree expr)
21824 {
21825 tree inner_expr;
21826
21827 #ifdef ENABLE_CHECKING
21828 /* Try to get a constant value for all non-dependent expressions in
21829 order to expose bugs in *_dependent_expression_p and constexpr. */
21830 if (cxx_dialect >= cxx11)
21831 maybe_constant_value (fold_non_dependent_expr_sfinae (expr, tf_none));
21832 #endif
21833
21834 /* Preserve OVERLOADs; the functions must be available to resolve
21835 types. */
21836 inner_expr = expr;
21837 if (TREE_CODE (inner_expr) == STMT_EXPR)
21838 inner_expr = stmt_expr_value_expr (inner_expr);
21839 if (TREE_CODE (inner_expr) == ADDR_EXPR)
21840 inner_expr = TREE_OPERAND (inner_expr, 0);
21841 if (TREE_CODE (inner_expr) == COMPONENT_REF)
21842 inner_expr = TREE_OPERAND (inner_expr, 1);
21843 if (is_overloaded_fn (inner_expr)
21844 || TREE_CODE (inner_expr) == OFFSET_REF)
21845 return expr;
21846 /* There is no need to return a proxy for a variable. */
21847 if (VAR_P (expr))
21848 return expr;
21849 /* Preserve string constants; conversions from string constants to
21850 "char *" are allowed, even though normally a "const char *"
21851 cannot be used to initialize a "char *". */
21852 if (TREE_CODE (expr) == STRING_CST)
21853 return expr;
21854 /* Preserve void and arithmetic constants, as an optimization -- there is no
21855 reason to create a new node. */
21856 if (TREE_CODE (expr) == VOID_CST
21857 || TREE_CODE (expr) == INTEGER_CST
21858 || TREE_CODE (expr) == REAL_CST)
21859 return expr;
21860 /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
21861 There is at least one place where we want to know that a
21862 particular expression is a throw-expression: when checking a ?:
21863 expression, there are special rules if the second or third
21864 argument is a throw-expression. */
21865 if (TREE_CODE (expr) == THROW_EXPR)
21866 return expr;
21867
21868 /* Don't wrap an initializer list, we need to be able to look inside. */
21869 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
21870 return expr;
21871
21872 /* Don't wrap a dummy object, we need to be able to test for it. */
21873 if (is_dummy_object (expr))
21874 return expr;
21875
21876 if (TREE_CODE (expr) == COND_EXPR)
21877 return build3 (COND_EXPR,
21878 TREE_TYPE (expr),
21879 TREE_OPERAND (expr, 0),
21880 (TREE_OPERAND (expr, 1)
21881 ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
21882 : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
21883 build_non_dependent_expr (TREE_OPERAND (expr, 2)));
21884 if (TREE_CODE (expr) == COMPOUND_EXPR
21885 && !COMPOUND_EXPR_OVERLOADED (expr))
21886 return build2 (COMPOUND_EXPR,
21887 TREE_TYPE (expr),
21888 TREE_OPERAND (expr, 0),
21889 build_non_dependent_expr (TREE_OPERAND (expr, 1)));
21890
21891 /* If the type is unknown, it can't really be non-dependent */
21892 gcc_assert (TREE_TYPE (expr) != unknown_type_node);
21893
21894 /* Otherwise, build a NON_DEPENDENT_EXPR. */
21895 return build1 (NON_DEPENDENT_EXPR, TREE_TYPE (expr), expr);
21896 }
21897
21898 /* ARGS is a vector of expressions as arguments to a function call.
21899 Replace the arguments with equivalent non-dependent expressions.
21900 This modifies ARGS in place. */
21901
21902 void
21903 make_args_non_dependent (vec<tree, va_gc> *args)
21904 {
21905 unsigned int ix;
21906 tree arg;
21907
21908 FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
21909 {
21910 tree newarg = build_non_dependent_expr (arg);
21911 if (newarg != arg)
21912 (*args)[ix] = newarg;
21913 }
21914 }
21915
21916 /* Returns a type which represents 'auto' or 'decltype(auto)'. We use a
21917 TEMPLATE_TYPE_PARM with a level one deeper than the actual template
21918 parms. */
21919
21920 static tree
21921 make_auto_1 (tree name)
21922 {
21923 tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
21924 TYPE_NAME (au) = build_decl (input_location,
21925 TYPE_DECL, name, au);
21926 TYPE_STUB_DECL (au) = TYPE_NAME (au);
21927 TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
21928 (0, processing_template_decl + 1, processing_template_decl + 1,
21929 TYPE_NAME (au), NULL_TREE);
21930 TYPE_CANONICAL (au) = canonical_type_parameter (au);
21931 DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
21932 SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
21933
21934 return au;
21935 }
21936
21937 tree
21938 make_decltype_auto (void)
21939 {
21940 return make_auto_1 (get_identifier ("decltype(auto)"));
21941 }
21942
21943 tree
21944 make_auto (void)
21945 {
21946 return make_auto_1 (get_identifier ("auto"));
21947 }
21948
21949 /* Given type ARG, return std::initializer_list<ARG>. */
21950
21951 static tree
21952 listify (tree arg)
21953 {
21954 tree std_init_list = namespace_binding
21955 (get_identifier ("initializer_list"), std_node);
21956 tree argvec;
21957 if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
21958 {
21959 error ("deducing from brace-enclosed initializer list requires "
21960 "#include <initializer_list>");
21961 return error_mark_node;
21962 }
21963 argvec = make_tree_vec (1);
21964 TREE_VEC_ELT (argvec, 0) = arg;
21965 return lookup_template_class (std_init_list, argvec, NULL_TREE,
21966 NULL_TREE, 0, tf_warning_or_error);
21967 }
21968
21969 /* Replace auto in TYPE with std::initializer_list<auto>. */
21970
21971 static tree
21972 listify_autos (tree type, tree auto_node)
21973 {
21974 tree init_auto = listify (auto_node);
21975 tree argvec = make_tree_vec (1);
21976 TREE_VEC_ELT (argvec, 0) = init_auto;
21977 if (processing_template_decl)
21978 argvec = add_to_template_args (current_template_args (), argvec);
21979 return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
21980 }
21981
21982 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
21983 from INIT. AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE. */
21984
21985 tree
21986 do_auto_deduction (tree type, tree init, tree auto_node)
21987 {
21988 tree targs;
21989
21990 if (init == error_mark_node)
21991 return error_mark_node;
21992
21993 if (type_dependent_expression_p (init))
21994 /* Defining a subset of type-dependent expressions that we can deduce
21995 from ahead of time isn't worth the trouble. */
21996 return type;
21997
21998 /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
21999 with either a new invented type template parameter U or, if the
22000 initializer is a braced-init-list (8.5.4), with
22001 std::initializer_list<U>. */
22002 if (BRACE_ENCLOSED_INITIALIZER_P (init))
22003 type = listify_autos (type, auto_node);
22004
22005 init = resolve_nondeduced_context (init);
22006
22007 targs = make_tree_vec (1);
22008 if (AUTO_IS_DECLTYPE (auto_node))
22009 {
22010 bool id = (DECL_P (init) || (TREE_CODE (init) == COMPONENT_REF
22011 && !REF_PARENTHESIZED_P (init)));
22012 TREE_VEC_ELT (targs, 0)
22013 = finish_decltype_type (init, id, tf_warning_or_error);
22014 if (type != auto_node)
22015 {
22016 error ("%qT as type rather than plain %<decltype(auto)%>", type);
22017 return error_mark_node;
22018 }
22019 }
22020 else
22021 {
22022 tree parms = build_tree_list (NULL_TREE, type);
22023 tree tparms = make_tree_vec (1);
22024 int val;
22025
22026 TREE_VEC_ELT (tparms, 0)
22027 = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
22028 val = type_unification_real (tparms, targs, parms, &init, 1, 0,
22029 DEDUCE_CALL, LOOKUP_NORMAL,
22030 NULL, /*explain_p=*/false);
22031 if (val > 0)
22032 {
22033 if (processing_template_decl)
22034 /* Try again at instantiation time. */
22035 return type;
22036 if (type && type != error_mark_node)
22037 /* If type is error_mark_node a diagnostic must have been
22038 emitted by now. Also, having a mention to '<type error>'
22039 in the diagnostic is not really useful to the user. */
22040 {
22041 if (cfun && auto_node == current_function_auto_return_pattern
22042 && LAMBDA_FUNCTION_P (current_function_decl))
22043 error ("unable to deduce lambda return type from %qE", init);
22044 else
22045 error ("unable to deduce %qT from %qE", type, init);
22046 }
22047 return error_mark_node;
22048 }
22049 }
22050
22051 /* If the list of declarators contains more than one declarator, the type
22052 of each declared variable is determined as described above. If the
22053 type deduced for the template parameter U is not the same in each
22054 deduction, the program is ill-formed. */
22055 if (TREE_TYPE (auto_node)
22056 && !same_type_p (TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0)))
22057 {
22058 if (cfun && auto_node == current_function_auto_return_pattern
22059 && LAMBDA_FUNCTION_P (current_function_decl))
22060 error ("inconsistent types %qT and %qT deduced for "
22061 "lambda return type", TREE_TYPE (auto_node),
22062 TREE_VEC_ELT (targs, 0));
22063 else
22064 error ("inconsistent deduction for %qT: %qT and then %qT",
22065 auto_node, TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0));
22066 return error_mark_node;
22067 }
22068 TREE_TYPE (auto_node) = TREE_VEC_ELT (targs, 0);
22069
22070 if (processing_template_decl)
22071 targs = add_to_template_args (current_template_args (), targs);
22072 return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
22073 }
22074
22075 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
22076 result. */
22077
22078 tree
22079 splice_late_return_type (tree type, tree late_return_type)
22080 {
22081 tree argvec;
22082
22083 if (late_return_type == NULL_TREE)
22084 return type;
22085 argvec = make_tree_vec (1);
22086 TREE_VEC_ELT (argvec, 0) = late_return_type;
22087 if (processing_template_parmlist)
22088 /* For a late-specified return type in a template type-parameter, we
22089 need to add a dummy argument level for its parmlist. */
22090 argvec = add_to_template_args
22091 (make_tree_vec (processing_template_parmlist), argvec);
22092 if (current_template_parms)
22093 argvec = add_to_template_args (current_template_args (), argvec);
22094 return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
22095 }
22096
22097 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto' or
22098 'decltype(auto)'. */
22099
22100 bool
22101 is_auto (const_tree type)
22102 {
22103 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
22104 && (TYPE_IDENTIFIER (type) == get_identifier ("auto")
22105 || TYPE_IDENTIFIER (type) == get_identifier ("decltype(auto)")))
22106 return true;
22107 else
22108 return false;
22109 }
22110
22111 /* Returns the TEMPLATE_TYPE_PARM in TYPE representing `auto' iff TYPE contains
22112 a use of `auto'. Returns NULL_TREE otherwise. */
22113
22114 tree
22115 type_uses_auto (tree type)
22116 {
22117 return find_type_usage (type, is_auto);
22118 }
22119
22120 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto',
22121 'decltype(auto)' or a concept. */
22122
22123 bool
22124 is_auto_or_concept (const_tree type)
22125 {
22126 return is_auto (type); // or concept
22127 }
22128
22129 /* Returns the TEMPLATE_TYPE_PARM in TYPE representing a generic type (`auto' or
22130 a concept identifier) iff TYPE contains a use of a generic type. Returns
22131 NULL_TREE otherwise. */
22132
22133 tree
22134 type_uses_auto_or_concept (tree type)
22135 {
22136 return find_type_usage (type, is_auto_or_concept);
22137 }
22138
22139
22140 /* For a given template T, return the vector of typedefs referenced
22141 in T for which access check is needed at T instantiation time.
22142 T is either a FUNCTION_DECL or a RECORD_TYPE.
22143 Those typedefs were added to T by the function
22144 append_type_to_template_for_access_check. */
22145
22146 vec<qualified_typedef_usage_t, va_gc> *
22147 get_types_needing_access_check (tree t)
22148 {
22149 tree ti;
22150 vec<qualified_typedef_usage_t, va_gc> *result = NULL;
22151
22152 if (!t || t == error_mark_node)
22153 return NULL;
22154
22155 if (!(ti = get_template_info (t)))
22156 return NULL;
22157
22158 if (CLASS_TYPE_P (t)
22159 || TREE_CODE (t) == FUNCTION_DECL)
22160 {
22161 if (!TI_TEMPLATE (ti))
22162 return NULL;
22163
22164 result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
22165 }
22166
22167 return result;
22168 }
22169
22170 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
22171 tied to T. That list of typedefs will be access checked at
22172 T instantiation time.
22173 T is either a FUNCTION_DECL or a RECORD_TYPE.
22174 TYPE_DECL is a TYPE_DECL node representing a typedef.
22175 SCOPE is the scope through which TYPE_DECL is accessed.
22176 LOCATION is the location of the usage point of TYPE_DECL.
22177
22178 This function is a subroutine of
22179 append_type_to_template_for_access_check. */
22180
22181 static void
22182 append_type_to_template_for_access_check_1 (tree t,
22183 tree type_decl,
22184 tree scope,
22185 location_t location)
22186 {
22187 qualified_typedef_usage_t typedef_usage;
22188 tree ti;
22189
22190 if (!t || t == error_mark_node)
22191 return;
22192
22193 gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
22194 || CLASS_TYPE_P (t))
22195 && type_decl
22196 && TREE_CODE (type_decl) == TYPE_DECL
22197 && scope);
22198
22199 if (!(ti = get_template_info (t)))
22200 return;
22201
22202 gcc_assert (TI_TEMPLATE (ti));
22203
22204 typedef_usage.typedef_decl = type_decl;
22205 typedef_usage.context = scope;
22206 typedef_usage.locus = location;
22207
22208 vec_safe_push (TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti), typedef_usage);
22209 }
22210
22211 /* Append TYPE_DECL to the template TEMPL.
22212 TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
22213 At TEMPL instanciation time, TYPE_DECL will be checked to see
22214 if it can be accessed through SCOPE.
22215 LOCATION is the location of the usage point of TYPE_DECL.
22216
22217 e.g. consider the following code snippet:
22218
22219 class C
22220 {
22221 typedef int myint;
22222 };
22223
22224 template<class U> struct S
22225 {
22226 C::myint mi; // <-- usage point of the typedef C::myint
22227 };
22228
22229 S<char> s;
22230
22231 At S<char> instantiation time, we need to check the access of C::myint
22232 In other words, we need to check the access of the myint typedef through
22233 the C scope. For that purpose, this function will add the myint typedef
22234 and the scope C through which its being accessed to a list of typedefs
22235 tied to the template S. That list will be walked at template instantiation
22236 time and access check performed on each typedefs it contains.
22237 Note that this particular code snippet should yield an error because
22238 myint is private to C. */
22239
22240 void
22241 append_type_to_template_for_access_check (tree templ,
22242 tree type_decl,
22243 tree scope,
22244 location_t location)
22245 {
22246 qualified_typedef_usage_t *iter;
22247 unsigned i;
22248
22249 gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
22250
22251 /* Make sure we don't append the type to the template twice. */
22252 FOR_EACH_VEC_SAFE_ELT (get_types_needing_access_check (templ), i, iter)
22253 if (iter->typedef_decl == type_decl && scope == iter->context)
22254 return;
22255
22256 append_type_to_template_for_access_check_1 (templ, type_decl,
22257 scope, location);
22258 }
22259
22260 /* Convert the generic type parameters in PARM that match the types given in the
22261 range [START_IDX, END_IDX) from the current_template_parms into generic type
22262 packs. */
22263
22264 tree
22265 convert_generic_types_to_packs (tree parm, int start_idx, int end_idx)
22266 {
22267 tree current = current_template_parms;
22268 int depth = TMPL_PARMS_DEPTH (current);
22269 current = INNERMOST_TEMPLATE_PARMS (current);
22270 tree replacement = make_tree_vec (TREE_VEC_LENGTH (current));
22271
22272 for (int i = 0; i < start_idx; ++i)
22273 TREE_VEC_ELT (replacement, i)
22274 = TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (current, i)));
22275
22276 for (int i = start_idx; i < end_idx; ++i)
22277 {
22278 /* Create a distinct parameter pack type from the current parm and add it
22279 to the replacement args to tsubst below into the generic function
22280 parameter. */
22281
22282 tree o = TREE_TYPE (TREE_VALUE
22283 (TREE_VEC_ELT (current, i)));
22284 tree t = copy_type (o);
22285 TEMPLATE_TYPE_PARM_INDEX (t)
22286 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (o),
22287 o, 0, 0, tf_none);
22288 TREE_TYPE (TEMPLATE_TYPE_DECL (t)) = t;
22289 TYPE_STUB_DECL (t) = TYPE_NAME (t) = TEMPLATE_TYPE_DECL (t);
22290 TYPE_MAIN_VARIANT (t) = t;
22291 TEMPLATE_TYPE_PARAMETER_PACK (t) = true;
22292 TYPE_CANONICAL (t) = canonical_type_parameter (t);
22293 TREE_VEC_ELT (replacement, i) = t;
22294 TREE_VALUE (TREE_VEC_ELT (current, i)) = TREE_CHAIN (t);
22295 }
22296
22297 for (int i = end_idx, e = TREE_VEC_LENGTH (current); i < e; ++i)
22298 TREE_VEC_ELT (replacement, i)
22299 = TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (current, i)));
22300
22301 /* If there are more levels then build up the replacement with the outer
22302 template parms. */
22303 if (depth > 1)
22304 replacement = add_to_template_args (template_parms_to_args
22305 (TREE_CHAIN (current_template_parms)),
22306 replacement);
22307
22308 return tsubst (parm, replacement, tf_none, NULL_TREE);
22309 }
22310
22311
22312 /* Set up the hash tables for template instantiations. */
22313
22314 void
22315 init_template_processing (void)
22316 {
22317 decl_specializations = hash_table<spec_hasher>::create_ggc (37);
22318 type_specializations = hash_table<spec_hasher>::create_ggc (37);
22319 }
22320
22321 /* Print stats about the template hash tables for -fstats. */
22322
22323 void
22324 print_template_statistics (void)
22325 {
22326 fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
22327 "%f collisions\n", decl_specializations->size (),
22328 decl_specializations->elements (),
22329 decl_specializations->collisions ());
22330 fprintf (stderr, "type_specializations: size %ld, %ld elements, "
22331 "%f collisions\n", type_specializations->size (),
22332 type_specializations->elements (),
22333 type_specializations->collisions ());
22334 }
22335
22336 #include "gt-cp-pt.h"