re PR c++/50848 (ICE in derived template class missing using for member of template...
[gcc.git] / gcc / cp / pt.c
1 /* Handle parameterized types (templates) for GNU C++.
2 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
4 Free Software Foundation, Inc.
5 Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
6 Rewritten by Jason Merrill (jason@cygnus.com).
7
8 This file is part of GCC.
9
10 GCC is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3, or (at your option)
13 any later version.
14
15 GCC is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING3. If not see
22 <http://www.gnu.org/licenses/>. */
23
24 /* Known bugs or deficiencies include:
25
26 all methods must be provided in header files; can't use a source
27 file that contains only the method templates and "just win". */
28
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "tm.h"
33 #include "tree.h"
34 #include "intl.h"
35 #include "pointer-set.h"
36 #include "flags.h"
37 #include "cp-tree.h"
38 #include "c-family/c-common.h"
39 #include "c-family/c-objc.h"
40 #include "cp-objcp-common.h"
41 #include "tree-inline.h"
42 #include "decl.h"
43 #include "output.h"
44 #include "toplev.h"
45 #include "timevar.h"
46 #include "tree-iterator.h"
47 #include "vecprim.h"
48
49 /* The type of functions taking a tree, and some additional data, and
50 returning an int. */
51 typedef int (*tree_fn_t) (tree, void*);
52
53 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
54 instantiations have been deferred, either because their definitions
55 were not yet available, or because we were putting off doing the work. */
56 struct GTY ((chain_next ("%h.next"))) pending_template {
57 struct pending_template *next;
58 struct tinst_level *tinst;
59 };
60
61 static GTY(()) struct pending_template *pending_templates;
62 static GTY(()) struct pending_template *last_pending_template;
63
64 int processing_template_parmlist;
65 static int template_header_count;
66
67 static GTY(()) tree saved_trees;
68 static VEC(int,heap) *inline_parm_levels;
69
70 static GTY(()) struct tinst_level *current_tinst_level;
71
72 static GTY(()) tree saved_access_scope;
73
74 /* Live only within one (recursive) call to tsubst_expr. We use
75 this to pass the statement expression node from the STMT_EXPR
76 to the EXPR_STMT that is its result. */
77 static tree cur_stmt_expr;
78
79 /* A map from local variable declarations in the body of the template
80 presently being instantiated to the corresponding instantiated
81 local variables. */
82 static htab_t local_specializations;
83
84 typedef struct GTY(()) spec_entry
85 {
86 tree tmpl;
87 tree args;
88 tree spec;
89 } spec_entry;
90
91 static GTY ((param_is (spec_entry)))
92 htab_t decl_specializations;
93
94 static GTY ((param_is (spec_entry)))
95 htab_t type_specializations;
96
97 /* Contains canonical template parameter types. The vector is indexed by
98 the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
99 TREE_LIST, whose TREE_VALUEs contain the canonical template
100 parameters of various types and levels. */
101 static GTY(()) VEC(tree,gc) *canonical_template_parms;
102
103 #define UNIFY_ALLOW_NONE 0
104 #define UNIFY_ALLOW_MORE_CV_QUAL 1
105 #define UNIFY_ALLOW_LESS_CV_QUAL 2
106 #define UNIFY_ALLOW_DERIVED 4
107 #define UNIFY_ALLOW_INTEGER 8
108 #define UNIFY_ALLOW_OUTER_LEVEL 16
109 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
110 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
111
112 enum template_base_result {
113 tbr_incomplete_type,
114 tbr_ambiguous_baseclass,
115 tbr_success
116 };
117
118 static void push_access_scope (tree);
119 static void pop_access_scope (tree);
120 static void push_deduction_access_scope (tree);
121 static void pop_deduction_access_scope (tree);
122 static bool resolve_overloaded_unification (tree, tree, tree, tree,
123 unification_kind_t, int,
124 bool);
125 static int try_one_overload (tree, tree, tree, tree, tree,
126 unification_kind_t, int, bool, bool);
127 static int unify (tree, tree, tree, tree, int, bool);
128 static void add_pending_template (tree);
129 static tree reopen_tinst_level (struct tinst_level *);
130 static tree tsubst_initializer_list (tree, tree);
131 static tree get_class_bindings (tree, tree, tree);
132 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
133 bool, bool);
134 static void tsubst_enum (tree, tree, tree);
135 static tree add_to_template_args (tree, tree);
136 static tree add_outermost_template_args (tree, tree);
137 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
138 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
139 tree);
140 static int type_unification_real (tree, tree, tree, const tree *,
141 unsigned int, int, unification_kind_t, int,
142 bool);
143 static void note_template_header (int);
144 static tree convert_nontype_argument_function (tree, tree);
145 static tree convert_nontype_argument (tree, tree, tsubst_flags_t);
146 static tree convert_template_argument (tree, tree, tree,
147 tsubst_flags_t, int, tree);
148 static int for_each_template_parm (tree, tree_fn_t, void*,
149 struct pointer_set_t*, bool);
150 static tree expand_template_argument_pack (tree);
151 static tree build_template_parm_index (int, int, int, int, tree, tree);
152 static bool inline_needs_template_parms (tree);
153 static void push_inline_template_parms_recursive (tree, int);
154 static tree retrieve_local_specialization (tree);
155 static void register_local_specialization (tree, tree);
156 static hashval_t hash_specialization (const void *p);
157 static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
158 static int mark_template_parm (tree, void *);
159 static int template_parm_this_level_p (tree, void *);
160 static tree tsubst_friend_function (tree, tree);
161 static tree tsubst_friend_class (tree, tree);
162 static int can_complete_type_without_circularity (tree);
163 static tree get_bindings (tree, tree, tree, bool);
164 static int template_decl_level (tree);
165 static int check_cv_quals_for_unify (int, tree, tree);
166 static void template_parm_level_and_index (tree, int*, int*);
167 static int unify_pack_expansion (tree, tree, tree,
168 tree, unification_kind_t, bool, bool);
169 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
170 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
171 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
172 static void regenerate_decl_from_template (tree, tree);
173 static tree most_specialized_class (tree, tree, tsubst_flags_t);
174 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
175 static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
176 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
177 static bool check_specialization_scope (void);
178 static tree process_partial_specialization (tree);
179 static void set_current_access_from_decl (tree);
180 static enum template_base_result get_template_base (tree, tree, tree, tree,
181 bool , tree *);
182 static tree try_class_unification (tree, tree, tree, tree, bool);
183 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
184 tree, tree);
185 static bool template_template_parm_bindings_ok_p (tree, tree);
186 static int template_args_equal (tree, tree);
187 static void tsubst_default_arguments (tree);
188 static tree for_each_template_parm_r (tree *, int *, void *);
189 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
190 static void copy_default_args_to_explicit_spec (tree);
191 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
192 static int eq_local_specializations (const void *, const void *);
193 static bool dependent_template_arg_p (tree);
194 static bool any_template_arguments_need_structural_equality_p (tree);
195 static bool dependent_type_p_r (tree);
196 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
197 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
198 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
199 static tree tsubst_decl (tree, tree, tsubst_flags_t);
200 static void perform_typedefs_access_check (tree tmpl, tree targs);
201 static void append_type_to_template_for_access_check_1 (tree, tree, tree,
202 location_t);
203 static tree listify (tree);
204 static tree listify_autos (tree, tree);
205 static tree template_parm_to_arg (tree t);
206 static bool arg_from_parm_pack_p (tree, tree);
207 static tree current_template_args (void);
208 static tree fixup_template_type_parm_type (tree, int);
209 static tree fixup_template_parm_index (tree, tree, int);
210 static tree tsubst_template_parm (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, or VAR_DECL for static member variable (need by
215 instantiate_decl). */
216
217 static void
218 push_access_scope (tree t)
219 {
220 gcc_assert (TREE_CODE (t) == FUNCTION_DECL
221 || TREE_CODE (t) == VAR_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 (DECL_P (t) && DECL_LANG_SPECIFIC (t))
326 tinfo = DECL_TEMPLATE_INFO (t);
327
328 if (!tinfo && DECL_IMPLICIT_TYPEDEF_P (t))
329 t = TREE_TYPE (t);
330
331 if (TAGGED_TYPE_P (t))
332 tinfo = TYPE_TEMPLATE_INFO (t);
333 else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
334 tinfo = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
335
336 return tinfo;
337 }
338
339 /* Returns the template nesting level of the indicated class TYPE.
340
341 For example, in:
342 template <class T>
343 struct A
344 {
345 template <class U>
346 struct B {};
347 };
348
349 A<T>::B<U> has depth two, while A<T> has depth one.
350 Both A<T>::B<int> and A<int>::B<U> have depth one, if
351 they are instantiations, not specializations.
352
353 This function is guaranteed to return 0 if passed NULL_TREE so
354 that, for example, `template_class_depth (current_class_type)' is
355 always safe. */
356
357 int
358 template_class_depth (tree type)
359 {
360 int depth;
361
362 for (depth = 0;
363 type && TREE_CODE (type) != NAMESPACE_DECL;
364 type = (TREE_CODE (type) == FUNCTION_DECL)
365 ? CP_DECL_CONTEXT (type) : CP_TYPE_CONTEXT (type))
366 {
367 tree tinfo = get_template_info (type);
368
369 if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
370 && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
371 ++depth;
372 }
373
374 return depth;
375 }
376
377 /* Subroutine of maybe_begin_member_template_processing.
378 Returns true if processing DECL needs us to push template parms. */
379
380 static bool
381 inline_needs_template_parms (tree decl)
382 {
383 if (! DECL_TEMPLATE_INFO (decl))
384 return false;
385
386 return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
387 > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
388 }
389
390 /* Subroutine of maybe_begin_member_template_processing.
391 Push the template parms in PARMS, starting from LEVELS steps into the
392 chain, and ending at the beginning, since template parms are listed
393 innermost first. */
394
395 static void
396 push_inline_template_parms_recursive (tree parmlist, int levels)
397 {
398 tree parms = TREE_VALUE (parmlist);
399 int i;
400
401 if (levels > 1)
402 push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
403
404 ++processing_template_decl;
405 current_template_parms
406 = tree_cons (size_int (processing_template_decl),
407 parms, current_template_parms);
408 TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
409
410 begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
411 NULL);
412 for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
413 {
414 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
415
416 if (parm == error_mark_node)
417 continue;
418
419 gcc_assert (DECL_P (parm));
420
421 switch (TREE_CODE (parm))
422 {
423 case TYPE_DECL:
424 case TEMPLATE_DECL:
425 pushdecl (parm);
426 break;
427
428 case PARM_DECL:
429 {
430 /* Make a CONST_DECL as is done in process_template_parm.
431 It is ugly that we recreate this here; the original
432 version built in process_template_parm is no longer
433 available. */
434 tree decl = build_decl (DECL_SOURCE_LOCATION (parm),
435 CONST_DECL, DECL_NAME (parm),
436 TREE_TYPE (parm));
437 DECL_ARTIFICIAL (decl) = 1;
438 TREE_CONSTANT (decl) = 1;
439 TREE_READONLY (decl) = 1;
440 DECL_INITIAL (decl) = DECL_INITIAL (parm);
441 SET_DECL_TEMPLATE_PARM_P (decl);
442 pushdecl (decl);
443 }
444 break;
445
446 default:
447 gcc_unreachable ();
448 }
449 }
450 }
451
452 /* Restore the template parameter context for a member template or
453 a friend template defined in a class definition. */
454
455 void
456 maybe_begin_member_template_processing (tree decl)
457 {
458 tree parms;
459 int levels = 0;
460
461 if (inline_needs_template_parms (decl))
462 {
463 parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
464 levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
465
466 if (DECL_TEMPLATE_SPECIALIZATION (decl))
467 {
468 --levels;
469 parms = TREE_CHAIN (parms);
470 }
471
472 push_inline_template_parms_recursive (parms, levels);
473 }
474
475 /* Remember how many levels of template parameters we pushed so that
476 we can pop them later. */
477 VEC_safe_push (int, heap, inline_parm_levels, levels);
478 }
479
480 /* Undo the effects of maybe_begin_member_template_processing. */
481
482 void
483 maybe_end_member_template_processing (void)
484 {
485 int i;
486 int last;
487
488 if (VEC_length (int, inline_parm_levels) == 0)
489 return;
490
491 last = VEC_pop (int, inline_parm_levels);
492 for (i = 0; i < last; ++i)
493 {
494 --processing_template_decl;
495 current_template_parms = TREE_CHAIN (current_template_parms);
496 poplevel (0, 0, 0);
497 }
498 }
499
500 /* Return a new template argument vector which contains all of ARGS,
501 but has as its innermost set of arguments the EXTRA_ARGS. */
502
503 static tree
504 add_to_template_args (tree args, tree extra_args)
505 {
506 tree new_args;
507 int extra_depth;
508 int i;
509 int j;
510
511 if (args == NULL_TREE || extra_args == error_mark_node)
512 return extra_args;
513
514 extra_depth = TMPL_ARGS_DEPTH (extra_args);
515 new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
516
517 for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
518 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
519
520 for (j = 1; j <= extra_depth; ++j, ++i)
521 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
522
523 return new_args;
524 }
525
526 /* Like add_to_template_args, but only the outermost ARGS are added to
527 the EXTRA_ARGS. In particular, all but TMPL_ARGS_DEPTH
528 (EXTRA_ARGS) levels are added. This function is used to combine
529 the template arguments from a partial instantiation with the
530 template arguments used to attain the full instantiation from the
531 partial instantiation. */
532
533 static tree
534 add_outermost_template_args (tree args, tree extra_args)
535 {
536 tree new_args;
537
538 /* If there are more levels of EXTRA_ARGS than there are ARGS,
539 something very fishy is going on. */
540 gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
541
542 /* If *all* the new arguments will be the EXTRA_ARGS, just return
543 them. */
544 if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
545 return extra_args;
546
547 /* For the moment, we make ARGS look like it contains fewer levels. */
548 TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
549
550 new_args = add_to_template_args (args, extra_args);
551
552 /* Now, we restore ARGS to its full dimensions. */
553 TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
554
555 return new_args;
556 }
557
558 /* Return the N levels of innermost template arguments from the ARGS. */
559
560 tree
561 get_innermost_template_args (tree args, int n)
562 {
563 tree new_args;
564 int extra_levels;
565 int i;
566
567 gcc_assert (n >= 0);
568
569 /* If N is 1, just return the innermost set of template arguments. */
570 if (n == 1)
571 return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
572
573 /* If we're not removing anything, just return the arguments we were
574 given. */
575 extra_levels = TMPL_ARGS_DEPTH (args) - n;
576 gcc_assert (extra_levels >= 0);
577 if (extra_levels == 0)
578 return args;
579
580 /* Make a new set of arguments, not containing the outer arguments. */
581 new_args = make_tree_vec (n);
582 for (i = 1; i <= n; ++i)
583 SET_TMPL_ARGS_LEVEL (new_args, i,
584 TMPL_ARGS_LEVEL (args, i + extra_levels));
585
586 return new_args;
587 }
588
589 /* The inverse of get_innermost_template_args: Return all but the innermost
590 EXTRA_LEVELS levels of template arguments from the ARGS. */
591
592 static tree
593 strip_innermost_template_args (tree args, int extra_levels)
594 {
595 tree new_args;
596 int n = TMPL_ARGS_DEPTH (args) - extra_levels;
597 int i;
598
599 gcc_assert (n >= 0);
600
601 /* If N is 1, just return the outermost set of template arguments. */
602 if (n == 1)
603 return TMPL_ARGS_LEVEL (args, 1);
604
605 /* If we're not removing anything, just return the arguments we were
606 given. */
607 gcc_assert (extra_levels >= 0);
608 if (extra_levels == 0)
609 return args;
610
611 /* Make a new set of arguments, not containing the inner arguments. */
612 new_args = make_tree_vec (n);
613 for (i = 1; i <= n; ++i)
614 SET_TMPL_ARGS_LEVEL (new_args, i,
615 TMPL_ARGS_LEVEL (args, i));
616
617 return new_args;
618 }
619
620 /* We've got a template header coming up; push to a new level for storing
621 the parms. */
622
623 void
624 begin_template_parm_list (void)
625 {
626 /* We use a non-tag-transparent scope here, which causes pushtag to
627 put tags in this scope, rather than in the enclosing class or
628 namespace scope. This is the right thing, since we want
629 TEMPLATE_DECLS, and not TYPE_DECLS for template classes. For a
630 global template class, push_template_decl handles putting the
631 TEMPLATE_DECL into top-level scope. For a nested template class,
632 e.g.:
633
634 template <class T> struct S1 {
635 template <class T> struct S2 {};
636 };
637
638 pushtag contains special code to call pushdecl_with_scope on the
639 TEMPLATE_DECL for S2. */
640 begin_scope (sk_template_parms, NULL);
641 ++processing_template_decl;
642 ++processing_template_parmlist;
643 note_template_header (0);
644 }
645
646 /* This routine is called when a specialization is declared. If it is
647 invalid to declare a specialization here, an error is reported and
648 false is returned, otherwise this routine will return true. */
649
650 static bool
651 check_specialization_scope (void)
652 {
653 tree scope = current_scope ();
654
655 /* [temp.expl.spec]
656
657 An explicit specialization shall be declared in the namespace of
658 which the template is a member, or, for member templates, in the
659 namespace of which the enclosing class or enclosing class
660 template is a member. An explicit specialization of a member
661 function, member class or static data member of a class template
662 shall be declared in the namespace of which the class template
663 is a member. */
664 if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
665 {
666 error ("explicit specialization in non-namespace scope %qD", scope);
667 return false;
668 }
669
670 /* [temp.expl.spec]
671
672 In an explicit specialization declaration for a member of a class
673 template or a member template that appears in namespace scope,
674 the member template and some of its enclosing class templates may
675 remain unspecialized, except that the declaration shall not
676 explicitly specialize a class member template if its enclosing
677 class templates are not explicitly specialized as well. */
678 if (current_template_parms)
679 {
680 error ("enclosing class templates are not explicitly specialized");
681 return false;
682 }
683
684 return true;
685 }
686
687 /* We've just seen template <>. */
688
689 bool
690 begin_specialization (void)
691 {
692 begin_scope (sk_template_spec, NULL);
693 note_template_header (1);
694 return check_specialization_scope ();
695 }
696
697 /* Called at then end of processing a declaration preceded by
698 template<>. */
699
700 void
701 end_specialization (void)
702 {
703 finish_scope ();
704 reset_specialization ();
705 }
706
707 /* Any template <>'s that we have seen thus far are not referring to a
708 function specialization. */
709
710 void
711 reset_specialization (void)
712 {
713 processing_specialization = 0;
714 template_header_count = 0;
715 }
716
717 /* We've just seen a template header. If SPECIALIZATION is nonzero,
718 it was of the form template <>. */
719
720 static void
721 note_template_header (int specialization)
722 {
723 processing_specialization = specialization;
724 template_header_count++;
725 }
726
727 /* We're beginning an explicit instantiation. */
728
729 void
730 begin_explicit_instantiation (void)
731 {
732 gcc_assert (!processing_explicit_instantiation);
733 processing_explicit_instantiation = true;
734 }
735
736
737 void
738 end_explicit_instantiation (void)
739 {
740 gcc_assert (processing_explicit_instantiation);
741 processing_explicit_instantiation = false;
742 }
743
744 /* An explicit specialization or partial specialization TMPL is being
745 declared. Check that the namespace in which the specialization is
746 occurring is permissible. Returns false iff it is invalid to
747 specialize TMPL in the current namespace. */
748
749 static bool
750 check_specialization_namespace (tree tmpl)
751 {
752 tree tpl_ns = decl_namespace_context (tmpl);
753
754 /* [tmpl.expl.spec]
755
756 An explicit specialization shall be declared in the namespace of
757 which the template is a member, or, for member templates, in the
758 namespace of which the enclosing class or enclosing class
759 template is a member. An explicit specialization of a member
760 function, member class or static data member of a class template
761 shall be declared in the namespace of which the class template is
762 a member. */
763 if (current_scope() != DECL_CONTEXT (tmpl)
764 && !at_namespace_scope_p ())
765 {
766 error ("specialization of %qD must appear at namespace scope", tmpl);
767 return false;
768 }
769 if (is_associated_namespace (current_namespace, tpl_ns))
770 /* Same or super-using namespace. */
771 return true;
772 else
773 {
774 permerror (input_location, "specialization of %qD in different namespace", tmpl);
775 permerror (input_location, " from definition of %q+#D", tmpl);
776 return false;
777 }
778 }
779
780 /* SPEC is an explicit instantiation. Check that it is valid to
781 perform this explicit instantiation in the current namespace. */
782
783 static void
784 check_explicit_instantiation_namespace (tree spec)
785 {
786 tree ns;
787
788 /* DR 275: An explicit instantiation shall appear in an enclosing
789 namespace of its template. */
790 ns = decl_namespace_context (spec);
791 if (!is_ancestor (current_namespace, ns))
792 permerror (input_location, "explicit instantiation of %qD in namespace %qD "
793 "(which does not enclose namespace %qD)",
794 spec, current_namespace, ns);
795 }
796
797 /* The TYPE is being declared. If it is a template type, that means it
798 is a partial specialization. Do appropriate error-checking. */
799
800 tree
801 maybe_process_partial_specialization (tree type)
802 {
803 tree context;
804
805 if (type == error_mark_node)
806 return error_mark_node;
807
808 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
809 {
810 error ("name of class shadows template template parameter %qD",
811 TYPE_NAME (type));
812 return error_mark_node;
813 }
814
815 context = TYPE_CONTEXT (type);
816
817 if ((CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
818 /* Consider non-class instantiations of alias templates as
819 well. */
820 || (TYPE_P (type)
821 && TYPE_TEMPLATE_INFO (type)
822 && DECL_LANG_SPECIFIC (TYPE_NAME (type))
823 && DECL_USE_TEMPLATE (TYPE_NAME (type))))
824 {
825 /* This is for ordinary explicit specialization and partial
826 specialization of a template class such as:
827
828 template <> class C<int>;
829
830 or:
831
832 template <class T> class C<T*>;
833
834 Make sure that `C<int>' and `C<T*>' are implicit instantiations. */
835
836 if (CLASS_TYPE_P (type)
837 && CLASSTYPE_IMPLICIT_INSTANTIATION (type)
838 && !COMPLETE_TYPE_P (type))
839 {
840 check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
841 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
842 if (processing_template_decl)
843 {
844 if (push_template_decl (TYPE_MAIN_DECL (type))
845 == error_mark_node)
846 return error_mark_node;
847 }
848 }
849 else if (CLASS_TYPE_P (type)
850 && CLASSTYPE_TEMPLATE_INSTANTIATION (type))
851 error ("specialization of %qT after instantiation", type);
852
853 if (DECL_ALIAS_TEMPLATE_P (TYPE_TI_TEMPLATE (type)))
854 {
855 error ("partial specialization of alias template %qD",
856 TYPE_TI_TEMPLATE (type));
857 return error_mark_node;
858 }
859 }
860 else if (CLASS_TYPE_P (type)
861 && !CLASSTYPE_USE_TEMPLATE (type)
862 && CLASSTYPE_TEMPLATE_INFO (type)
863 && context && CLASS_TYPE_P (context)
864 && CLASSTYPE_TEMPLATE_INFO (context))
865 {
866 /* This is for an explicit specialization of member class
867 template according to [temp.expl.spec/18]:
868
869 template <> template <class U> class C<int>::D;
870
871 The context `C<int>' must be an implicit instantiation.
872 Otherwise this is just a member class template declared
873 earlier like:
874
875 template <> class C<int> { template <class U> class D; };
876 template <> template <class U> class C<int>::D;
877
878 In the first case, `C<int>::D' is a specialization of `C<T>::D'
879 while in the second case, `C<int>::D' is a primary template
880 and `C<T>::D' may not exist. */
881
882 if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
883 && !COMPLETE_TYPE_P (type))
884 {
885 tree t;
886 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
887
888 if (current_namespace
889 != decl_namespace_context (tmpl))
890 {
891 permerror (input_location, "specializing %q#T in different namespace", type);
892 permerror (input_location, " from definition of %q+#D", tmpl);
893 }
894
895 /* Check for invalid specialization after instantiation:
896
897 template <> template <> class C<int>::D<int>;
898 template <> template <class U> class C<int>::D; */
899
900 for (t = DECL_TEMPLATE_INSTANTIATIONS (tmpl);
901 t; t = TREE_CHAIN (t))
902 {
903 tree inst = TREE_VALUE (t);
904 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (inst))
905 {
906 /* We already have a full specialization of this partial
907 instantiation. Reassign it to the new member
908 specialization template. */
909 spec_entry elt;
910 spec_entry *entry;
911 void **slot;
912
913 elt.tmpl = most_general_template (tmpl);
914 elt.args = CLASSTYPE_TI_ARGS (inst);
915 elt.spec = inst;
916
917 htab_remove_elt (type_specializations, &elt);
918
919 elt.tmpl = tmpl;
920 elt.args = INNERMOST_TEMPLATE_ARGS (elt.args);
921
922 slot = htab_find_slot (type_specializations, &elt, INSERT);
923 entry = ggc_alloc_spec_entry ();
924 *entry = elt;
925 *slot = entry;
926 }
927 else if (COMPLETE_OR_OPEN_TYPE_P (inst))
928 /* But if we've had an implicit instantiation, that's a
929 problem ([temp.expl.spec]/6). */
930 error ("specialization %qT after instantiation %qT",
931 type, inst);
932 }
933
934 /* Mark TYPE as a specialization. And as a result, we only
935 have one level of template argument for the innermost
936 class template. */
937 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
938 CLASSTYPE_TI_ARGS (type)
939 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
940 }
941 }
942 else if (processing_specialization)
943 {
944 /* Someday C++0x may allow for enum template specialization. */
945 if (cxx_dialect > cxx98 && TREE_CODE (type) == ENUMERAL_TYPE
946 && CLASS_TYPE_P (context) && CLASSTYPE_USE_TEMPLATE (context))
947 pedwarn (input_location, OPT_pedantic, "template specialization "
948 "of %qD not allowed by ISO C++", type);
949 else
950 {
951 error ("explicit specialization of non-template %qT", type);
952 return error_mark_node;
953 }
954 }
955
956 return type;
957 }
958
959 /* Returns nonzero if we can optimize the retrieval of specializations
960 for TMPL, a TEMPLATE_DECL. In particular, for such a template, we
961 do not use DECL_TEMPLATE_SPECIALIZATIONS at all. */
962
963 static inline bool
964 optimize_specialization_lookup_p (tree tmpl)
965 {
966 return (DECL_FUNCTION_TEMPLATE_P (tmpl)
967 && DECL_CLASS_SCOPE_P (tmpl)
968 /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
969 parameter. */
970 && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
971 /* The optimized lookup depends on the fact that the
972 template arguments for the member function template apply
973 purely to the containing class, which is not true if the
974 containing class is an explicit or partial
975 specialization. */
976 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
977 && !DECL_MEMBER_TEMPLATE_P (tmpl)
978 && !DECL_CONV_FN_P (tmpl)
979 /* It is possible to have a template that is not a member
980 template and is not a member of a template class:
981
982 template <typename T>
983 struct S { friend A::f(); };
984
985 Here, the friend function is a template, but the context does
986 not have template information. The optimized lookup relies
987 on having ARGS be the template arguments for both the class
988 and the function template. */
989 && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
990 }
991
992 /* Retrieve the specialization (in the sense of [temp.spec] - a
993 specialization is either an instantiation or an explicit
994 specialization) of TMPL for the given template ARGS. If there is
995 no such specialization, return NULL_TREE. The ARGS are a vector of
996 arguments, or a vector of vectors of arguments, in the case of
997 templates with more than one level of parameters.
998
999 If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
1000 then we search for a partial specialization matching ARGS. This
1001 parameter is ignored if TMPL is not a class template. */
1002
1003 static tree
1004 retrieve_specialization (tree tmpl, tree args, hashval_t hash)
1005 {
1006 if (args == error_mark_node)
1007 return NULL_TREE;
1008
1009 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
1010
1011 /* There should be as many levels of arguments as there are
1012 levels of parameters. */
1013 gcc_assert (TMPL_ARGS_DEPTH (args)
1014 == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
1015
1016 if (optimize_specialization_lookup_p (tmpl))
1017 {
1018 tree class_template;
1019 tree class_specialization;
1020 VEC(tree,gc) *methods;
1021 tree fns;
1022 int idx;
1023
1024 /* The template arguments actually apply to the containing
1025 class. Find the class specialization with those
1026 arguments. */
1027 class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
1028 class_specialization
1029 = retrieve_specialization (class_template, args, 0);
1030 if (!class_specialization)
1031 return NULL_TREE;
1032 /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
1033 for the specialization. */
1034 idx = class_method_index_for_fn (class_specialization, tmpl);
1035 if (idx == -1)
1036 return NULL_TREE;
1037 /* Iterate through the methods with the indicated name, looking
1038 for the one that has an instance of TMPL. */
1039 methods = CLASSTYPE_METHOD_VEC (class_specialization);
1040 for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
1041 {
1042 tree fn = OVL_CURRENT (fns);
1043 if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl
1044 /* using-declarations can add base methods to the method vec,
1045 and we don't want those here. */
1046 && DECL_CONTEXT (fn) == class_specialization)
1047 return fn;
1048 }
1049 return NULL_TREE;
1050 }
1051 else
1052 {
1053 spec_entry *found;
1054 spec_entry elt;
1055 htab_t specializations;
1056
1057 elt.tmpl = tmpl;
1058 elt.args = args;
1059 elt.spec = NULL_TREE;
1060
1061 if (DECL_CLASS_TEMPLATE_P (tmpl))
1062 specializations = type_specializations;
1063 else
1064 specializations = decl_specializations;
1065
1066 if (hash == 0)
1067 hash = hash_specialization (&elt);
1068 found = (spec_entry *) htab_find_with_hash (specializations, &elt, hash);
1069 if (found)
1070 return found->spec;
1071 }
1072
1073 return NULL_TREE;
1074 }
1075
1076 /* Like retrieve_specialization, but for local declarations. */
1077
1078 static tree
1079 retrieve_local_specialization (tree tmpl)
1080 {
1081 tree spec;
1082
1083 if (local_specializations == NULL)
1084 return NULL_TREE;
1085
1086 spec = (tree) htab_find_with_hash (local_specializations, tmpl,
1087 htab_hash_pointer (tmpl));
1088 return spec ? TREE_PURPOSE (spec) : NULL_TREE;
1089 }
1090
1091 /* Returns nonzero iff DECL is a specialization of TMPL. */
1092
1093 int
1094 is_specialization_of (tree decl, tree tmpl)
1095 {
1096 tree t;
1097
1098 if (TREE_CODE (decl) == FUNCTION_DECL)
1099 {
1100 for (t = decl;
1101 t != NULL_TREE;
1102 t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1103 if (t == tmpl)
1104 return 1;
1105 }
1106 else
1107 {
1108 gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1109
1110 for (t = TREE_TYPE (decl);
1111 t != NULL_TREE;
1112 t = CLASSTYPE_USE_TEMPLATE (t)
1113 ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1114 if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1115 return 1;
1116 }
1117
1118 return 0;
1119 }
1120
1121 /* Returns nonzero iff DECL is a specialization of friend declaration
1122 FRIEND_DECL according to [temp.friend]. */
1123
1124 bool
1125 is_specialization_of_friend (tree decl, tree friend_decl)
1126 {
1127 bool need_template = true;
1128 int template_depth;
1129
1130 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1131 || TREE_CODE (decl) == TYPE_DECL);
1132
1133 /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1134 of a template class, we want to check if DECL is a specialization
1135 if this. */
1136 if (TREE_CODE (friend_decl) == FUNCTION_DECL
1137 && DECL_TEMPLATE_INFO (friend_decl)
1138 && !DECL_USE_TEMPLATE (friend_decl))
1139 {
1140 /* We want a TEMPLATE_DECL for `is_specialization_of'. */
1141 friend_decl = DECL_TI_TEMPLATE (friend_decl);
1142 need_template = false;
1143 }
1144 else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1145 && !PRIMARY_TEMPLATE_P (friend_decl))
1146 need_template = false;
1147
1148 /* There is nothing to do if this is not a template friend. */
1149 if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1150 return false;
1151
1152 if (is_specialization_of (decl, friend_decl))
1153 return true;
1154
1155 /* [temp.friend/6]
1156 A member of a class template may be declared to be a friend of a
1157 non-template class. In this case, the corresponding member of
1158 every specialization of the class template is a friend of the
1159 class granting friendship.
1160
1161 For example, given a template friend declaration
1162
1163 template <class T> friend void A<T>::f();
1164
1165 the member function below is considered a friend
1166
1167 template <> struct A<int> {
1168 void f();
1169 };
1170
1171 For this type of template friend, TEMPLATE_DEPTH below will be
1172 nonzero. To determine if DECL is a friend of FRIEND, we first
1173 check if the enclosing class is a specialization of another. */
1174
1175 template_depth = template_class_depth (CP_DECL_CONTEXT (friend_decl));
1176 if (template_depth
1177 && DECL_CLASS_SCOPE_P (decl)
1178 && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1179 CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1180 {
1181 /* Next, we check the members themselves. In order to handle
1182 a few tricky cases, such as when FRIEND_DECL's are
1183
1184 template <class T> friend void A<T>::g(T t);
1185 template <class T> template <T t> friend void A<T>::h();
1186
1187 and DECL's are
1188
1189 void A<int>::g(int);
1190 template <int> void A<int>::h();
1191
1192 we need to figure out ARGS, the template arguments from
1193 the context of DECL. This is required for template substitution
1194 of `T' in the function parameter of `g' and template parameter
1195 of `h' in the above examples. Here ARGS corresponds to `int'. */
1196
1197 tree context = DECL_CONTEXT (decl);
1198 tree args = NULL_TREE;
1199 int current_depth = 0;
1200
1201 while (current_depth < template_depth)
1202 {
1203 if (CLASSTYPE_TEMPLATE_INFO (context))
1204 {
1205 if (current_depth == 0)
1206 args = TYPE_TI_ARGS (context);
1207 else
1208 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1209 current_depth++;
1210 }
1211 context = TYPE_CONTEXT (context);
1212 }
1213
1214 if (TREE_CODE (decl) == FUNCTION_DECL)
1215 {
1216 bool is_template;
1217 tree friend_type;
1218 tree decl_type;
1219 tree friend_args_type;
1220 tree decl_args_type;
1221
1222 /* Make sure that both DECL and FRIEND_DECL are templates or
1223 non-templates. */
1224 is_template = DECL_TEMPLATE_INFO (decl)
1225 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1226 if (need_template ^ is_template)
1227 return false;
1228 else if (is_template)
1229 {
1230 /* If both are templates, check template parameter list. */
1231 tree friend_parms
1232 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1233 args, tf_none);
1234 if (!comp_template_parms
1235 (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1236 friend_parms))
1237 return false;
1238
1239 decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1240 }
1241 else
1242 decl_type = TREE_TYPE (decl);
1243
1244 friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1245 tf_none, NULL_TREE);
1246 if (friend_type == error_mark_node)
1247 return false;
1248
1249 /* Check if return types match. */
1250 if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1251 return false;
1252
1253 /* Check if function parameter types match, ignoring the
1254 `this' parameter. */
1255 friend_args_type = TYPE_ARG_TYPES (friend_type);
1256 decl_args_type = TYPE_ARG_TYPES (decl_type);
1257 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1258 friend_args_type = TREE_CHAIN (friend_args_type);
1259 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1260 decl_args_type = TREE_CHAIN (decl_args_type);
1261
1262 return compparms (decl_args_type, friend_args_type);
1263 }
1264 else
1265 {
1266 /* DECL is a TYPE_DECL */
1267 bool is_template;
1268 tree decl_type = TREE_TYPE (decl);
1269
1270 /* Make sure that both DECL and FRIEND_DECL are templates or
1271 non-templates. */
1272 is_template
1273 = CLASSTYPE_TEMPLATE_INFO (decl_type)
1274 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1275
1276 if (need_template ^ is_template)
1277 return false;
1278 else if (is_template)
1279 {
1280 tree friend_parms;
1281 /* If both are templates, check the name of the two
1282 TEMPLATE_DECL's first because is_friend didn't. */
1283 if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1284 != DECL_NAME (friend_decl))
1285 return false;
1286
1287 /* Now check template parameter list. */
1288 friend_parms
1289 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1290 args, tf_none);
1291 return comp_template_parms
1292 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1293 friend_parms);
1294 }
1295 else
1296 return (DECL_NAME (decl)
1297 == DECL_NAME (friend_decl));
1298 }
1299 }
1300 return false;
1301 }
1302
1303 /* Register the specialization SPEC as a specialization of TMPL with
1304 the indicated ARGS. IS_FRIEND indicates whether the specialization
1305 is actually just a friend declaration. Returns SPEC, or an
1306 equivalent prior declaration, if available. */
1307
1308 static tree
1309 register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
1310 hashval_t hash)
1311 {
1312 tree fn;
1313 void **slot = NULL;
1314 spec_entry elt;
1315
1316 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL && DECL_P (spec));
1317
1318 if (TREE_CODE (spec) == FUNCTION_DECL
1319 && uses_template_parms (DECL_TI_ARGS (spec)))
1320 /* This is the FUNCTION_DECL for a partial instantiation. Don't
1321 register it; we want the corresponding TEMPLATE_DECL instead.
1322 We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1323 the more obvious `uses_template_parms (spec)' to avoid problems
1324 with default function arguments. In particular, given
1325 something like this:
1326
1327 template <class T> void f(T t1, T t = T())
1328
1329 the default argument expression is not substituted for in an
1330 instantiation unless and until it is actually needed. */
1331 return spec;
1332
1333 if (optimize_specialization_lookup_p (tmpl))
1334 /* We don't put these specializations in the hash table, but we might
1335 want to give an error about a mismatch. */
1336 fn = retrieve_specialization (tmpl, args, 0);
1337 else
1338 {
1339 elt.tmpl = tmpl;
1340 elt.args = args;
1341 elt.spec = spec;
1342
1343 if (hash == 0)
1344 hash = hash_specialization (&elt);
1345
1346 slot =
1347 htab_find_slot_with_hash (decl_specializations, &elt, hash, INSERT);
1348 if (*slot)
1349 fn = ((spec_entry *) *slot)->spec;
1350 else
1351 fn = NULL_TREE;
1352 }
1353
1354 /* We can sometimes try to re-register a specialization that we've
1355 already got. In particular, regenerate_decl_from_template calls
1356 duplicate_decls which will update the specialization list. But,
1357 we'll still get called again here anyhow. It's more convenient
1358 to simply allow this than to try to prevent it. */
1359 if (fn == spec)
1360 return spec;
1361 else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1362 {
1363 if (DECL_TEMPLATE_INSTANTIATION (fn))
1364 {
1365 if (DECL_ODR_USED (fn)
1366 || DECL_EXPLICIT_INSTANTIATION (fn))
1367 {
1368 error ("specialization of %qD after instantiation",
1369 fn);
1370 return error_mark_node;
1371 }
1372 else
1373 {
1374 tree clone;
1375 /* This situation should occur only if the first
1376 specialization is an implicit instantiation, the
1377 second is an explicit specialization, and the
1378 implicit instantiation has not yet been used. That
1379 situation can occur if we have implicitly
1380 instantiated a member function and then specialized
1381 it later.
1382
1383 We can also wind up here if a friend declaration that
1384 looked like an instantiation turns out to be a
1385 specialization:
1386
1387 template <class T> void foo(T);
1388 class S { friend void foo<>(int) };
1389 template <> void foo(int);
1390
1391 We transform the existing DECL in place so that any
1392 pointers to it become pointers to the updated
1393 declaration.
1394
1395 If there was a definition for the template, but not
1396 for the specialization, we want this to look as if
1397 there were no definition, and vice versa. */
1398 DECL_INITIAL (fn) = NULL_TREE;
1399 duplicate_decls (spec, fn, is_friend);
1400 /* The call to duplicate_decls will have applied
1401 [temp.expl.spec]:
1402
1403 An explicit specialization of a function template
1404 is inline only if it is explicitly declared to be,
1405 and independently of whether its function template
1406 is.
1407
1408 to the primary function; now copy the inline bits to
1409 the various clones. */
1410 FOR_EACH_CLONE (clone, fn)
1411 {
1412 DECL_DECLARED_INLINE_P (clone)
1413 = DECL_DECLARED_INLINE_P (fn);
1414 DECL_SOURCE_LOCATION (clone)
1415 = DECL_SOURCE_LOCATION (fn);
1416 }
1417 check_specialization_namespace (fn);
1418
1419 return fn;
1420 }
1421 }
1422 else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1423 {
1424 if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1425 /* Dup decl failed, but this is a new definition. Set the
1426 line number so any errors match this new
1427 definition. */
1428 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1429
1430 return fn;
1431 }
1432 }
1433 else if (fn)
1434 return duplicate_decls (spec, fn, is_friend);
1435
1436 /* A specialization must be declared in the same namespace as the
1437 template it is specializing. */
1438 if (DECL_TEMPLATE_SPECIALIZATION (spec)
1439 && !check_specialization_namespace (tmpl))
1440 DECL_CONTEXT (spec) = DECL_CONTEXT (tmpl);
1441
1442 if (slot != NULL /* !optimize_specialization_lookup_p (tmpl) */)
1443 {
1444 spec_entry *entry = ggc_alloc_spec_entry ();
1445 gcc_assert (tmpl && args && spec);
1446 *entry = elt;
1447 *slot = entry;
1448 if (TREE_CODE (spec) == FUNCTION_DECL && DECL_NAMESPACE_SCOPE_P (spec)
1449 && PRIMARY_TEMPLATE_P (tmpl)
1450 && DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (tmpl)) == NULL_TREE)
1451 /* TMPL is a forward declaration of a template function; keep a list
1452 of all specializations in case we need to reassign them to a friend
1453 template later in tsubst_friend_function. */
1454 DECL_TEMPLATE_INSTANTIATIONS (tmpl)
1455 = tree_cons (args, spec, DECL_TEMPLATE_INSTANTIATIONS (tmpl));
1456 }
1457
1458 return spec;
1459 }
1460
1461 /* Returns true iff two spec_entry nodes are equivalent. Only compares the
1462 TMPL and ARGS members, ignores SPEC. */
1463
1464 static int
1465 eq_specializations (const void *p1, const void *p2)
1466 {
1467 const spec_entry *e1 = (const spec_entry *)p1;
1468 const spec_entry *e2 = (const spec_entry *)p2;
1469
1470 return (e1->tmpl == e2->tmpl
1471 && comp_template_args (e1->args, e2->args));
1472 }
1473
1474 /* Returns a hash for a template TMPL and template arguments ARGS. */
1475
1476 static hashval_t
1477 hash_tmpl_and_args (tree tmpl, tree args)
1478 {
1479 hashval_t val = DECL_UID (tmpl);
1480 return iterative_hash_template_arg (args, val);
1481 }
1482
1483 /* Returns a hash for a spec_entry node based on the TMPL and ARGS members,
1484 ignoring SPEC. */
1485
1486 static hashval_t
1487 hash_specialization (const void *p)
1488 {
1489 const spec_entry *e = (const spec_entry *)p;
1490 return hash_tmpl_and_args (e->tmpl, e->args);
1491 }
1492
1493 /* Recursively calculate a hash value for a template argument ARG, for use
1494 in the hash tables of template specializations. */
1495
1496 hashval_t
1497 iterative_hash_template_arg (tree arg, hashval_t val)
1498 {
1499 unsigned HOST_WIDE_INT i;
1500 enum tree_code code;
1501 char tclass;
1502
1503 if (arg == NULL_TREE)
1504 return iterative_hash_object (arg, val);
1505
1506 if (!TYPE_P (arg))
1507 STRIP_NOPS (arg);
1508
1509 if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
1510 /* We can get one of these when re-hashing a previous entry in the middle
1511 of substituting into a pack expansion. Just look through it. */
1512 arg = ARGUMENT_PACK_SELECT_FROM_PACK (arg);
1513
1514 code = TREE_CODE (arg);
1515 tclass = TREE_CODE_CLASS (code);
1516
1517 val = iterative_hash_object (code, val);
1518
1519 switch (code)
1520 {
1521 case ERROR_MARK:
1522 return val;
1523
1524 case IDENTIFIER_NODE:
1525 return iterative_hash_object (IDENTIFIER_HASH_VALUE (arg), val);
1526
1527 case TREE_VEC:
1528 {
1529 int i, len = TREE_VEC_LENGTH (arg);
1530 for (i = 0; i < len; ++i)
1531 val = iterative_hash_template_arg (TREE_VEC_ELT (arg, i), val);
1532 return val;
1533 }
1534
1535 case TYPE_PACK_EXPANSION:
1536 case EXPR_PACK_EXPANSION:
1537 return iterative_hash_template_arg (PACK_EXPANSION_PATTERN (arg), val);
1538
1539 case TYPE_ARGUMENT_PACK:
1540 case NONTYPE_ARGUMENT_PACK:
1541 return iterative_hash_template_arg (ARGUMENT_PACK_ARGS (arg), val);
1542
1543 case TREE_LIST:
1544 for (; arg; arg = TREE_CHAIN (arg))
1545 val = iterative_hash_template_arg (TREE_VALUE (arg), val);
1546 return val;
1547
1548 case OVERLOAD:
1549 for (; arg; arg = OVL_NEXT (arg))
1550 val = iterative_hash_template_arg (OVL_CURRENT (arg), val);
1551 return val;
1552
1553 case CONSTRUCTOR:
1554 {
1555 tree field, value;
1556 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (arg), i, field, value)
1557 {
1558 val = iterative_hash_template_arg (field, val);
1559 val = iterative_hash_template_arg (value, val);
1560 }
1561 return val;
1562 }
1563
1564 case PARM_DECL:
1565 if (!DECL_ARTIFICIAL (arg))
1566 {
1567 val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
1568 val = iterative_hash_object (DECL_PARM_LEVEL (arg), val);
1569 }
1570 return iterative_hash_template_arg (TREE_TYPE (arg), val);
1571
1572 case TARGET_EXPR:
1573 return iterative_hash_template_arg (TARGET_EXPR_INITIAL (arg), val);
1574
1575 case PTRMEM_CST:
1576 val = iterative_hash_template_arg (PTRMEM_CST_CLASS (arg), val);
1577 return iterative_hash_template_arg (PTRMEM_CST_MEMBER (arg), val);
1578
1579 case TEMPLATE_PARM_INDEX:
1580 val = iterative_hash_template_arg
1581 (TREE_TYPE (TEMPLATE_PARM_DECL (arg)), val);
1582 val = iterative_hash_object (TEMPLATE_PARM_LEVEL (arg), val);
1583 return iterative_hash_object (TEMPLATE_PARM_IDX (arg), val);
1584
1585 case TRAIT_EXPR:
1586 val = iterative_hash_object (TRAIT_EXPR_KIND (arg), val);
1587 val = iterative_hash_template_arg (TRAIT_EXPR_TYPE1 (arg), val);
1588 return iterative_hash_template_arg (TRAIT_EXPR_TYPE2 (arg), val);
1589
1590 case BASELINK:
1591 val = iterative_hash_template_arg (BINFO_TYPE (BASELINK_BINFO (arg)),
1592 val);
1593 return iterative_hash_template_arg (DECL_NAME (get_first_fn (arg)),
1594 val);
1595
1596 case MODOP_EXPR:
1597 val = iterative_hash_template_arg (TREE_OPERAND (arg, 0), val);
1598 code = TREE_CODE (TREE_OPERAND (arg, 1));
1599 val = iterative_hash_object (code, val);
1600 return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
1601
1602 case LAMBDA_EXPR:
1603 /* A lambda can't appear in a template arg, but don't crash on
1604 erroneous input. */
1605 gcc_assert (seen_error ());
1606 return val;
1607
1608 case CAST_EXPR:
1609 case IMPLICIT_CONV_EXPR:
1610 case STATIC_CAST_EXPR:
1611 case REINTERPRET_CAST_EXPR:
1612 case CONST_CAST_EXPR:
1613 case DYNAMIC_CAST_EXPR:
1614 case NEW_EXPR:
1615 val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1616 /* Now hash operands as usual. */
1617 break;
1618
1619 default:
1620 break;
1621 }
1622
1623 switch (tclass)
1624 {
1625 case tcc_type:
1626 if (TYPE_CANONICAL (arg))
1627 return iterative_hash_object (TYPE_HASH (TYPE_CANONICAL (arg)),
1628 val);
1629 else if (TREE_CODE (arg) == DECLTYPE_TYPE)
1630 return iterative_hash_template_arg (DECLTYPE_TYPE_EXPR (arg), val);
1631 /* Otherwise just compare the types during lookup. */
1632 return val;
1633
1634 case tcc_declaration:
1635 case tcc_constant:
1636 return iterative_hash_expr (arg, val);
1637
1638 default:
1639 gcc_assert (IS_EXPR_CODE_CLASS (tclass));
1640 {
1641 unsigned n = cp_tree_operand_length (arg);
1642 for (i = 0; i < n; ++i)
1643 val = iterative_hash_template_arg (TREE_OPERAND (arg, i), val);
1644 return val;
1645 }
1646 }
1647 gcc_unreachable ();
1648 return 0;
1649 }
1650
1651 /* Unregister the specialization SPEC as a specialization of TMPL.
1652 Replace it with NEW_SPEC, if NEW_SPEC is non-NULL. Returns true
1653 if the SPEC was listed as a specialization of TMPL.
1654
1655 Note that SPEC has been ggc_freed, so we can't look inside it. */
1656
1657 bool
1658 reregister_specialization (tree spec, tree tinfo, tree new_spec)
1659 {
1660 spec_entry *entry;
1661 spec_entry elt;
1662
1663 elt.tmpl = most_general_template (TI_TEMPLATE (tinfo));
1664 elt.args = TI_ARGS (tinfo);
1665 elt.spec = NULL_TREE;
1666
1667 entry = (spec_entry *) htab_find (decl_specializations, &elt);
1668 if (entry != NULL)
1669 {
1670 gcc_assert (entry->spec == spec || entry->spec == new_spec);
1671 gcc_assert (new_spec != NULL_TREE);
1672 entry->spec = new_spec;
1673 return 1;
1674 }
1675
1676 return 0;
1677 }
1678
1679 /* Compare an entry in the local specializations hash table P1 (which
1680 is really a pointer to a TREE_LIST) with P2 (which is really a
1681 DECL). */
1682
1683 static int
1684 eq_local_specializations (const void *p1, const void *p2)
1685 {
1686 return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1687 }
1688
1689 /* Hash P1, an entry in the local specializations table. */
1690
1691 static hashval_t
1692 hash_local_specialization (const void* p1)
1693 {
1694 return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1695 }
1696
1697 /* Like register_specialization, but for local declarations. We are
1698 registering SPEC, an instantiation of TMPL. */
1699
1700 static void
1701 register_local_specialization (tree spec, tree tmpl)
1702 {
1703 void **slot;
1704
1705 slot = htab_find_slot_with_hash (local_specializations, tmpl,
1706 htab_hash_pointer (tmpl), INSERT);
1707 *slot = build_tree_list (spec, tmpl);
1708 }
1709
1710 /* TYPE is a class type. Returns true if TYPE is an explicitly
1711 specialized class. */
1712
1713 bool
1714 explicit_class_specialization_p (tree type)
1715 {
1716 if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1717 return false;
1718 return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1719 }
1720
1721 /* Print the list of functions at FNS, going through all the overloads
1722 for each element of the list. Alternatively, FNS can not be a
1723 TREE_LIST, in which case it will be printed together with all the
1724 overloads.
1725
1726 MORE and *STR should respectively be FALSE and NULL when the function
1727 is called from the outside. They are used internally on recursive
1728 calls. print_candidates manages the two parameters and leaves NULL
1729 in *STR when it ends. */
1730
1731 static void
1732 print_candidates_1 (tree fns, bool more, const char **str)
1733 {
1734 tree fn, fn2;
1735 char *spaces = NULL;
1736
1737 for (fn = fns; fn; fn = OVL_NEXT (fn))
1738 if (TREE_CODE (fn) == TREE_LIST)
1739 {
1740 for (fn2 = fn; fn2 != NULL_TREE; fn2 = TREE_CHAIN (fn2))
1741 print_candidates_1 (TREE_VALUE (fn2),
1742 TREE_CHAIN (fn2) || more, str);
1743 }
1744 else
1745 {
1746 if (!*str)
1747 {
1748 /* Pick the prefix string. */
1749 if (!more && !OVL_NEXT (fns))
1750 {
1751 error ("candidate is: %+#D", OVL_CURRENT (fn));
1752 continue;
1753 }
1754
1755 *str = _("candidates are:");
1756 spaces = get_spaces (*str);
1757 }
1758 error ("%s %+#D", *str, OVL_CURRENT (fn));
1759 *str = spaces ? spaces : *str;
1760 }
1761
1762 if (!more)
1763 {
1764 free (spaces);
1765 *str = NULL;
1766 }
1767 }
1768
1769 /* Print the list of candidate FNS in an error message. FNS can also
1770 be a TREE_LIST of non-functions in the case of an ambiguous lookup. */
1771
1772 void
1773 print_candidates (tree fns)
1774 {
1775 const char *str = NULL;
1776 print_candidates_1 (fns, false, &str);
1777 gcc_assert (str == NULL);
1778 }
1779
1780 /* Returns the template (one of the functions given by TEMPLATE_ID)
1781 which can be specialized to match the indicated DECL with the
1782 explicit template args given in TEMPLATE_ID. The DECL may be
1783 NULL_TREE if none is available. In that case, the functions in
1784 TEMPLATE_ID are non-members.
1785
1786 If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1787 specialization of a member template.
1788
1789 The TEMPLATE_COUNT is the number of references to qualifying
1790 template classes that appeared in the name of the function. See
1791 check_explicit_specialization for a more accurate description.
1792
1793 TSK indicates what kind of template declaration (if any) is being
1794 declared. TSK_TEMPLATE indicates that the declaration given by
1795 DECL, though a FUNCTION_DECL, has template parameters, and is
1796 therefore a template function.
1797
1798 The template args (those explicitly specified and those deduced)
1799 are output in a newly created vector *TARGS_OUT.
1800
1801 If it is impossible to determine the result, an error message is
1802 issued. The error_mark_node is returned to indicate failure. */
1803
1804 static tree
1805 determine_specialization (tree template_id,
1806 tree decl,
1807 tree* targs_out,
1808 int need_member_template,
1809 int template_count,
1810 tmpl_spec_kind tsk)
1811 {
1812 tree fns;
1813 tree targs;
1814 tree explicit_targs;
1815 tree candidates = NULL_TREE;
1816 /* A TREE_LIST of templates of which DECL may be a specialization.
1817 The TREE_VALUE of each node is a TEMPLATE_DECL. The
1818 corresponding TREE_PURPOSE is the set of template arguments that,
1819 when used to instantiate the template, would produce a function
1820 with the signature of DECL. */
1821 tree templates = NULL_TREE;
1822 int header_count;
1823 cp_binding_level *b;
1824
1825 *targs_out = NULL_TREE;
1826
1827 if (template_id == error_mark_node || decl == error_mark_node)
1828 return error_mark_node;
1829
1830 fns = TREE_OPERAND (template_id, 0);
1831 explicit_targs = TREE_OPERAND (template_id, 1);
1832
1833 if (fns == error_mark_node)
1834 return error_mark_node;
1835
1836 /* Check for baselinks. */
1837 if (BASELINK_P (fns))
1838 fns = BASELINK_FUNCTIONS (fns);
1839
1840 if (!is_overloaded_fn (fns))
1841 {
1842 error ("%qD is not a function template", fns);
1843 return error_mark_node;
1844 }
1845
1846 /* Count the number of template headers specified for this
1847 specialization. */
1848 header_count = 0;
1849 for (b = current_binding_level;
1850 b->kind == sk_template_parms;
1851 b = b->level_chain)
1852 ++header_count;
1853
1854 for (; fns; fns = OVL_NEXT (fns))
1855 {
1856 tree fn = OVL_CURRENT (fns);
1857
1858 if (TREE_CODE (fn) == TEMPLATE_DECL)
1859 {
1860 tree decl_arg_types;
1861 tree fn_arg_types;
1862
1863 /* In case of explicit specialization, we need to check if
1864 the number of template headers appearing in the specialization
1865 is correct. This is usually done in check_explicit_specialization,
1866 but the check done there cannot be exhaustive when specializing
1867 member functions. Consider the following code:
1868
1869 template <> void A<int>::f(int);
1870 template <> template <> void A<int>::f(int);
1871
1872 Assuming that A<int> is not itself an explicit specialization
1873 already, the first line specializes "f" which is a non-template
1874 member function, whilst the second line specializes "f" which
1875 is a template member function. So both lines are syntactically
1876 correct, and check_explicit_specialization does not reject
1877 them.
1878
1879 Here, we can do better, as we are matching the specialization
1880 against the declarations. We count the number of template
1881 headers, and we check if they match TEMPLATE_COUNT + 1
1882 (TEMPLATE_COUNT is the number of qualifying template classes,
1883 plus there must be another header for the member template
1884 itself).
1885
1886 Notice that if header_count is zero, this is not a
1887 specialization but rather a template instantiation, so there
1888 is no check we can perform here. */
1889 if (header_count && header_count != template_count + 1)
1890 continue;
1891
1892 /* Check that the number of template arguments at the
1893 innermost level for DECL is the same as for FN. */
1894 if (current_binding_level->kind == sk_template_parms
1895 && !current_binding_level->explicit_spec_p
1896 && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1897 != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1898 (current_template_parms))))
1899 continue;
1900
1901 /* DECL might be a specialization of FN. */
1902 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1903 fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1904
1905 /* For a non-static member function, we need to make sure
1906 that the const qualification is the same. Since
1907 get_bindings does not try to merge the "this" parameter,
1908 we must do the comparison explicitly. */
1909 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1910 && !same_type_p (TREE_VALUE (fn_arg_types),
1911 TREE_VALUE (decl_arg_types)))
1912 continue;
1913
1914 /* Skip the "this" parameter and, for constructors of
1915 classes with virtual bases, the VTT parameter. A
1916 full specialization of a constructor will have a VTT
1917 parameter, but a template never will. */
1918 decl_arg_types
1919 = skip_artificial_parms_for (decl, decl_arg_types);
1920 fn_arg_types
1921 = skip_artificial_parms_for (fn, fn_arg_types);
1922
1923 /* Check that the number of function parameters matches.
1924 For example,
1925 template <class T> void f(int i = 0);
1926 template <> void f<int>();
1927 The specialization f<int> is invalid but is not caught
1928 by get_bindings below. */
1929 if (list_length (fn_arg_types) != list_length (decl_arg_types))
1930 continue;
1931
1932 /* Function templates cannot be specializations; there are
1933 no partial specializations of functions. Therefore, if
1934 the type of DECL does not match FN, there is no
1935 match. */
1936 if (tsk == tsk_template)
1937 {
1938 if (compparms (fn_arg_types, decl_arg_types))
1939 candidates = tree_cons (NULL_TREE, fn, candidates);
1940 continue;
1941 }
1942
1943 /* See whether this function might be a specialization of this
1944 template. */
1945 targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1946
1947 if (!targs)
1948 /* We cannot deduce template arguments that when used to
1949 specialize TMPL will produce DECL. */
1950 continue;
1951
1952 /* Save this template, and the arguments deduced. */
1953 templates = tree_cons (targs, fn, templates);
1954 }
1955 else if (need_member_template)
1956 /* FN is an ordinary member function, and we need a
1957 specialization of a member template. */
1958 ;
1959 else if (TREE_CODE (fn) != FUNCTION_DECL)
1960 /* We can get IDENTIFIER_NODEs here in certain erroneous
1961 cases. */
1962 ;
1963 else if (!DECL_FUNCTION_MEMBER_P (fn))
1964 /* This is just an ordinary non-member function. Nothing can
1965 be a specialization of that. */
1966 ;
1967 else if (DECL_ARTIFICIAL (fn))
1968 /* Cannot specialize functions that are created implicitly. */
1969 ;
1970 else
1971 {
1972 tree decl_arg_types;
1973
1974 /* This is an ordinary member function. However, since
1975 we're here, we can assume it's enclosing class is a
1976 template class. For example,
1977
1978 template <typename T> struct S { void f(); };
1979 template <> void S<int>::f() {}
1980
1981 Here, S<int>::f is a non-template, but S<int> is a
1982 template class. If FN has the same type as DECL, we
1983 might be in business. */
1984
1985 if (!DECL_TEMPLATE_INFO (fn))
1986 /* Its enclosing class is an explicit specialization
1987 of a template class. This is not a candidate. */
1988 continue;
1989
1990 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1991 TREE_TYPE (TREE_TYPE (fn))))
1992 /* The return types differ. */
1993 continue;
1994
1995 /* Adjust the type of DECL in case FN is a static member. */
1996 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1997 if (DECL_STATIC_FUNCTION_P (fn)
1998 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1999 decl_arg_types = TREE_CHAIN (decl_arg_types);
2000
2001 if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
2002 decl_arg_types))
2003 /* They match! */
2004 candidates = tree_cons (NULL_TREE, fn, candidates);
2005 }
2006 }
2007
2008 if (templates && TREE_CHAIN (templates))
2009 {
2010 /* We have:
2011
2012 [temp.expl.spec]
2013
2014 It is possible for a specialization with a given function
2015 signature to be instantiated from more than one function
2016 template. In such cases, explicit specification of the
2017 template arguments must be used to uniquely identify the
2018 function template specialization being specialized.
2019
2020 Note that here, there's no suggestion that we're supposed to
2021 determine which of the candidate templates is most
2022 specialized. However, we, also have:
2023
2024 [temp.func.order]
2025
2026 Partial ordering of overloaded function template
2027 declarations is used in the following contexts to select
2028 the function template to which a function template
2029 specialization refers:
2030
2031 -- when an explicit specialization refers to a function
2032 template.
2033
2034 So, we do use the partial ordering rules, at least for now.
2035 This extension can only serve to make invalid programs valid,
2036 so it's safe. And, there is strong anecdotal evidence that
2037 the committee intended the partial ordering rules to apply;
2038 the EDG front end has that behavior, and John Spicer claims
2039 that the committee simply forgot to delete the wording in
2040 [temp.expl.spec]. */
2041 tree tmpl = most_specialized_instantiation (templates);
2042 if (tmpl != error_mark_node)
2043 {
2044 templates = tmpl;
2045 TREE_CHAIN (templates) = NULL_TREE;
2046 }
2047 }
2048
2049 if (templates == NULL_TREE && candidates == NULL_TREE)
2050 {
2051 error ("template-id %qD for %q+D does not match any template "
2052 "declaration", template_id, decl);
2053 if (header_count && header_count != template_count + 1)
2054 inform (input_location, "saw %d %<template<>%>, need %d for "
2055 "specializing a member function template",
2056 header_count, template_count + 1);
2057 return error_mark_node;
2058 }
2059 else if ((templates && TREE_CHAIN (templates))
2060 || (candidates && TREE_CHAIN (candidates))
2061 || (templates && candidates))
2062 {
2063 error ("ambiguous template specialization %qD for %q+D",
2064 template_id, decl);
2065 candidates = chainon (candidates, templates);
2066 print_candidates (candidates);
2067 return error_mark_node;
2068 }
2069
2070 /* We have one, and exactly one, match. */
2071 if (candidates)
2072 {
2073 tree fn = TREE_VALUE (candidates);
2074 *targs_out = copy_node (DECL_TI_ARGS (fn));
2075 /* DECL is a re-declaration or partial instantiation of a template
2076 function. */
2077 if (TREE_CODE (fn) == TEMPLATE_DECL)
2078 return fn;
2079 /* It was a specialization of an ordinary member function in a
2080 template class. */
2081 return DECL_TI_TEMPLATE (fn);
2082 }
2083
2084 /* It was a specialization of a template. */
2085 targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
2086 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
2087 {
2088 *targs_out = copy_node (targs);
2089 SET_TMPL_ARGS_LEVEL (*targs_out,
2090 TMPL_ARGS_DEPTH (*targs_out),
2091 TREE_PURPOSE (templates));
2092 }
2093 else
2094 *targs_out = TREE_PURPOSE (templates);
2095 return TREE_VALUE (templates);
2096 }
2097
2098 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
2099 but with the default argument values filled in from those in the
2100 TMPL_TYPES. */
2101
2102 static tree
2103 copy_default_args_to_explicit_spec_1 (tree spec_types,
2104 tree tmpl_types)
2105 {
2106 tree new_spec_types;
2107
2108 if (!spec_types)
2109 return NULL_TREE;
2110
2111 if (spec_types == void_list_node)
2112 return void_list_node;
2113
2114 /* Substitute into the rest of the list. */
2115 new_spec_types =
2116 copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
2117 TREE_CHAIN (tmpl_types));
2118
2119 /* Add the default argument for this parameter. */
2120 return hash_tree_cons (TREE_PURPOSE (tmpl_types),
2121 TREE_VALUE (spec_types),
2122 new_spec_types);
2123 }
2124
2125 /* DECL is an explicit specialization. Replicate default arguments
2126 from the template it specializes. (That way, code like:
2127
2128 template <class T> void f(T = 3);
2129 template <> void f(double);
2130 void g () { f (); }
2131
2132 works, as required.) An alternative approach would be to look up
2133 the correct default arguments at the call-site, but this approach
2134 is consistent with how implicit instantiations are handled. */
2135
2136 static void
2137 copy_default_args_to_explicit_spec (tree decl)
2138 {
2139 tree tmpl;
2140 tree spec_types;
2141 tree tmpl_types;
2142 tree new_spec_types;
2143 tree old_type;
2144 tree new_type;
2145 tree t;
2146 tree object_type = NULL_TREE;
2147 tree in_charge = NULL_TREE;
2148 tree vtt = NULL_TREE;
2149
2150 /* See if there's anything we need to do. */
2151 tmpl = DECL_TI_TEMPLATE (decl);
2152 tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
2153 for (t = tmpl_types; t; t = TREE_CHAIN (t))
2154 if (TREE_PURPOSE (t))
2155 break;
2156 if (!t)
2157 return;
2158
2159 old_type = TREE_TYPE (decl);
2160 spec_types = TYPE_ARG_TYPES (old_type);
2161
2162 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2163 {
2164 /* Remove the this pointer, but remember the object's type for
2165 CV quals. */
2166 object_type = TREE_TYPE (TREE_VALUE (spec_types));
2167 spec_types = TREE_CHAIN (spec_types);
2168 tmpl_types = TREE_CHAIN (tmpl_types);
2169
2170 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
2171 {
2172 /* DECL may contain more parameters than TMPL due to the extra
2173 in-charge parameter in constructors and destructors. */
2174 in_charge = spec_types;
2175 spec_types = TREE_CHAIN (spec_types);
2176 }
2177 if (DECL_HAS_VTT_PARM_P (decl))
2178 {
2179 vtt = spec_types;
2180 spec_types = TREE_CHAIN (spec_types);
2181 }
2182 }
2183
2184 /* Compute the merged default arguments. */
2185 new_spec_types =
2186 copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
2187
2188 /* Compute the new FUNCTION_TYPE. */
2189 if (object_type)
2190 {
2191 if (vtt)
2192 new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
2193 TREE_VALUE (vtt),
2194 new_spec_types);
2195
2196 if (in_charge)
2197 /* Put the in-charge parameter back. */
2198 new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
2199 TREE_VALUE (in_charge),
2200 new_spec_types);
2201
2202 new_type = build_method_type_directly (object_type,
2203 TREE_TYPE (old_type),
2204 new_spec_types);
2205 }
2206 else
2207 new_type = build_function_type (TREE_TYPE (old_type),
2208 new_spec_types);
2209 new_type = cp_build_type_attribute_variant (new_type,
2210 TYPE_ATTRIBUTES (old_type));
2211 new_type = build_exception_variant (new_type,
2212 TYPE_RAISES_EXCEPTIONS (old_type));
2213 TREE_TYPE (decl) = new_type;
2214 }
2215
2216 /* Check to see if the function just declared, as indicated in
2217 DECLARATOR, and in DECL, is a specialization of a function
2218 template. We may also discover that the declaration is an explicit
2219 instantiation at this point.
2220
2221 Returns DECL, or an equivalent declaration that should be used
2222 instead if all goes well. Issues an error message if something is
2223 amiss. Returns error_mark_node if the error is not easily
2224 recoverable.
2225
2226 FLAGS is a bitmask consisting of the following flags:
2227
2228 2: The function has a definition.
2229 4: The function is a friend.
2230
2231 The TEMPLATE_COUNT is the number of references to qualifying
2232 template classes that appeared in the name of the function. For
2233 example, in
2234
2235 template <class T> struct S { void f(); };
2236 void S<int>::f();
2237
2238 the TEMPLATE_COUNT would be 1. However, explicitly specialized
2239 classes are not counted in the TEMPLATE_COUNT, so that in
2240
2241 template <class T> struct S {};
2242 template <> struct S<int> { void f(); }
2243 template <> void S<int>::f();
2244
2245 the TEMPLATE_COUNT would be 0. (Note that this declaration is
2246 invalid; there should be no template <>.)
2247
2248 If the function is a specialization, it is marked as such via
2249 DECL_TEMPLATE_SPECIALIZATION. Furthermore, its DECL_TEMPLATE_INFO
2250 is set up correctly, and it is added to the list of specializations
2251 for that template. */
2252
2253 tree
2254 check_explicit_specialization (tree declarator,
2255 tree decl,
2256 int template_count,
2257 int flags)
2258 {
2259 int have_def = flags & 2;
2260 int is_friend = flags & 4;
2261 int specialization = 0;
2262 int explicit_instantiation = 0;
2263 int member_specialization = 0;
2264 tree ctype = DECL_CLASS_CONTEXT (decl);
2265 tree dname = DECL_NAME (decl);
2266 tmpl_spec_kind tsk;
2267
2268 if (is_friend)
2269 {
2270 if (!processing_specialization)
2271 tsk = tsk_none;
2272 else
2273 tsk = tsk_excessive_parms;
2274 }
2275 else
2276 tsk = current_tmpl_spec_kind (template_count);
2277
2278 switch (tsk)
2279 {
2280 case tsk_none:
2281 if (processing_specialization)
2282 {
2283 specialization = 1;
2284 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2285 }
2286 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2287 {
2288 if (is_friend)
2289 /* This could be something like:
2290
2291 template <class T> void f(T);
2292 class S { friend void f<>(int); } */
2293 specialization = 1;
2294 else
2295 {
2296 /* This case handles bogus declarations like template <>
2297 template <class T> void f<int>(); */
2298
2299 error ("template-id %qD in declaration of primary template",
2300 declarator);
2301 return decl;
2302 }
2303 }
2304 break;
2305
2306 case tsk_invalid_member_spec:
2307 /* The error has already been reported in
2308 check_specialization_scope. */
2309 return error_mark_node;
2310
2311 case tsk_invalid_expl_inst:
2312 error ("template parameter list used in explicit instantiation");
2313
2314 /* Fall through. */
2315
2316 case tsk_expl_inst:
2317 if (have_def)
2318 error ("definition provided for explicit instantiation");
2319
2320 explicit_instantiation = 1;
2321 break;
2322
2323 case tsk_excessive_parms:
2324 case tsk_insufficient_parms:
2325 if (tsk == tsk_excessive_parms)
2326 error ("too many template parameter lists in declaration of %qD",
2327 decl);
2328 else if (template_header_count)
2329 error("too few template parameter lists in declaration of %qD", decl);
2330 else
2331 error("explicit specialization of %qD must be introduced by "
2332 "%<template <>%>", decl);
2333
2334 /* Fall through. */
2335 case tsk_expl_spec:
2336 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2337 if (ctype)
2338 member_specialization = 1;
2339 else
2340 specialization = 1;
2341 break;
2342
2343 case tsk_template:
2344 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2345 {
2346 /* This case handles bogus declarations like template <>
2347 template <class T> void f<int>(); */
2348
2349 if (uses_template_parms (declarator))
2350 error ("function template partial specialization %qD "
2351 "is not allowed", declarator);
2352 else
2353 error ("template-id %qD in declaration of primary template",
2354 declarator);
2355 return decl;
2356 }
2357
2358 if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
2359 /* This is a specialization of a member template, without
2360 specialization the containing class. Something like:
2361
2362 template <class T> struct S {
2363 template <class U> void f (U);
2364 };
2365 template <> template <class U> void S<int>::f(U) {}
2366
2367 That's a specialization -- but of the entire template. */
2368 specialization = 1;
2369 break;
2370
2371 default:
2372 gcc_unreachable ();
2373 }
2374
2375 if (specialization || member_specialization)
2376 {
2377 tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2378 for (; t; t = TREE_CHAIN (t))
2379 if (TREE_PURPOSE (t))
2380 {
2381 permerror (input_location,
2382 "default argument specified in explicit specialization");
2383 break;
2384 }
2385 }
2386
2387 if (specialization || member_specialization || explicit_instantiation)
2388 {
2389 tree tmpl = NULL_TREE;
2390 tree targs = NULL_TREE;
2391
2392 /* Make sure that the declarator is a TEMPLATE_ID_EXPR. */
2393 if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2394 {
2395 tree fns;
2396
2397 gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2398 if (ctype)
2399 fns = dname;
2400 else
2401 {
2402 /* If there is no class context, the explicit instantiation
2403 must be at namespace scope. */
2404 gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2405
2406 /* Find the namespace binding, using the declaration
2407 context. */
2408 fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2409 false, true);
2410 if (fns == error_mark_node || !is_overloaded_fn (fns))
2411 {
2412 error ("%qD is not a template function", dname);
2413 fns = error_mark_node;
2414 }
2415 else
2416 {
2417 tree fn = OVL_CURRENT (fns);
2418 if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2419 CP_DECL_CONTEXT (fn)))
2420 error ("%qD is not declared in %qD",
2421 decl, current_namespace);
2422 }
2423 }
2424
2425 declarator = lookup_template_function (fns, NULL_TREE);
2426 }
2427
2428 if (declarator == error_mark_node)
2429 return error_mark_node;
2430
2431 if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2432 {
2433 if (!explicit_instantiation)
2434 /* A specialization in class scope. This is invalid,
2435 but the error will already have been flagged by
2436 check_specialization_scope. */
2437 return error_mark_node;
2438 else
2439 {
2440 /* It's not valid to write an explicit instantiation in
2441 class scope, e.g.:
2442
2443 class C { template void f(); }
2444
2445 This case is caught by the parser. However, on
2446 something like:
2447
2448 template class C { void f(); };
2449
2450 (which is invalid) we can get here. The error will be
2451 issued later. */
2452 ;
2453 }
2454
2455 return decl;
2456 }
2457 else if (ctype != NULL_TREE
2458 && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2459 IDENTIFIER_NODE))
2460 {
2461 /* Find the list of functions in ctype that have the same
2462 name as the declared function. */
2463 tree name = TREE_OPERAND (declarator, 0);
2464 tree fns = NULL_TREE;
2465 int idx;
2466
2467 if (constructor_name_p (name, ctype))
2468 {
2469 int is_constructor = DECL_CONSTRUCTOR_P (decl);
2470
2471 if (is_constructor ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2472 : !CLASSTYPE_DESTRUCTORS (ctype))
2473 {
2474 /* From [temp.expl.spec]:
2475
2476 If such an explicit specialization for the member
2477 of a class template names an implicitly-declared
2478 special member function (clause _special_), the
2479 program is ill-formed.
2480
2481 Similar language is found in [temp.explicit]. */
2482 error ("specialization of implicitly-declared special member function");
2483 return error_mark_node;
2484 }
2485
2486 name = is_constructor ? ctor_identifier : dtor_identifier;
2487 }
2488
2489 if (!DECL_CONV_FN_P (decl))
2490 {
2491 idx = lookup_fnfields_1 (ctype, name);
2492 if (idx >= 0)
2493 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2494 }
2495 else
2496 {
2497 VEC(tree,gc) *methods;
2498 tree ovl;
2499
2500 /* For a type-conversion operator, we cannot do a
2501 name-based lookup. We might be looking for `operator
2502 int' which will be a specialization of `operator T'.
2503 So, we find *all* the conversion operators, and then
2504 select from them. */
2505 fns = NULL_TREE;
2506
2507 methods = CLASSTYPE_METHOD_VEC (ctype);
2508 if (methods)
2509 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2510 VEC_iterate (tree, methods, idx, ovl);
2511 ++idx)
2512 {
2513 if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2514 /* There are no more conversion functions. */
2515 break;
2516
2517 /* Glue all these conversion functions together
2518 with those we already have. */
2519 for (; ovl; ovl = OVL_NEXT (ovl))
2520 fns = ovl_cons (OVL_CURRENT (ovl), fns);
2521 }
2522 }
2523
2524 if (fns == NULL_TREE)
2525 {
2526 error ("no member function %qD declared in %qT", name, ctype);
2527 return error_mark_node;
2528 }
2529 else
2530 TREE_OPERAND (declarator, 0) = fns;
2531 }
2532
2533 /* Figure out what exactly is being specialized at this point.
2534 Note that for an explicit instantiation, even one for a
2535 member function, we cannot tell apriori whether the
2536 instantiation is for a member template, or just a member
2537 function of a template class. Even if a member template is
2538 being instantiated, the member template arguments may be
2539 elided if they can be deduced from the rest of the
2540 declaration. */
2541 tmpl = determine_specialization (declarator, decl,
2542 &targs,
2543 member_specialization,
2544 template_count,
2545 tsk);
2546
2547 if (!tmpl || tmpl == error_mark_node)
2548 /* We couldn't figure out what this declaration was
2549 specializing. */
2550 return error_mark_node;
2551 else
2552 {
2553 tree gen_tmpl = most_general_template (tmpl);
2554
2555 if (explicit_instantiation)
2556 {
2557 /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2558 is done by do_decl_instantiation later. */
2559
2560 int arg_depth = TMPL_ARGS_DEPTH (targs);
2561 int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2562
2563 if (arg_depth > parm_depth)
2564 {
2565 /* If TMPL is not the most general template (for
2566 example, if TMPL is a friend template that is
2567 injected into namespace scope), then there will
2568 be too many levels of TARGS. Remove some of them
2569 here. */
2570 int i;
2571 tree new_targs;
2572
2573 new_targs = make_tree_vec (parm_depth);
2574 for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2575 TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2576 = TREE_VEC_ELT (targs, i);
2577 targs = new_targs;
2578 }
2579
2580 return instantiate_template (tmpl, targs, tf_error);
2581 }
2582
2583 /* If we thought that the DECL was a member function, but it
2584 turns out to be specializing a static member function,
2585 make DECL a static member function as well. */
2586 if (DECL_STATIC_FUNCTION_P (tmpl)
2587 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2588 revert_static_member_fn (decl);
2589
2590 /* If this is a specialization of a member template of a
2591 template class, we want to return the TEMPLATE_DECL, not
2592 the specialization of it. */
2593 if (tsk == tsk_template)
2594 {
2595 tree result = DECL_TEMPLATE_RESULT (tmpl);
2596 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2597 DECL_INITIAL (result) = NULL_TREE;
2598 if (have_def)
2599 {
2600 tree parm;
2601 DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2602 DECL_SOURCE_LOCATION (result)
2603 = DECL_SOURCE_LOCATION (decl);
2604 /* We want to use the argument list specified in the
2605 definition, not in the original declaration. */
2606 DECL_ARGUMENTS (result) = DECL_ARGUMENTS (decl);
2607 for (parm = DECL_ARGUMENTS (result); parm;
2608 parm = DECL_CHAIN (parm))
2609 DECL_CONTEXT (parm) = result;
2610 }
2611 return register_specialization (tmpl, gen_tmpl, targs,
2612 is_friend, 0);
2613 }
2614
2615 /* Set up the DECL_TEMPLATE_INFO for DECL. */
2616 DECL_TEMPLATE_INFO (decl) = build_template_info (tmpl, targs);
2617
2618 /* Inherit default function arguments from the template
2619 DECL is specializing. */
2620 copy_default_args_to_explicit_spec (decl);
2621
2622 /* This specialization has the same protection as the
2623 template it specializes. */
2624 TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2625 TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2626
2627 /* 7.1.1-1 [dcl.stc]
2628
2629 A storage-class-specifier shall not be specified in an
2630 explicit specialization...
2631
2632 The parser rejects these, so unless action is taken here,
2633 explicit function specializations will always appear with
2634 global linkage.
2635
2636 The action recommended by the C++ CWG in response to C++
2637 defect report 605 is to make the storage class and linkage
2638 of the explicit specialization match the templated function:
2639
2640 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2641 */
2642 if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2643 {
2644 tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2645 gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2646
2647 /* This specialization has the same linkage and visibility as
2648 the function template it specializes. */
2649 TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2650 if (! TREE_PUBLIC (decl))
2651 {
2652 DECL_INTERFACE_KNOWN (decl) = 1;
2653 DECL_NOT_REALLY_EXTERN (decl) = 1;
2654 }
2655 DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2656 if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2657 {
2658 DECL_VISIBILITY_SPECIFIED (decl) = 1;
2659 DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2660 }
2661 }
2662
2663 /* If DECL is a friend declaration, declared using an
2664 unqualified name, the namespace associated with DECL may
2665 have been set incorrectly. For example, in:
2666
2667 template <typename T> void f(T);
2668 namespace N {
2669 struct S { friend void f<int>(int); }
2670 }
2671
2672 we will have set the DECL_CONTEXT for the friend
2673 declaration to N, rather than to the global namespace. */
2674 if (DECL_NAMESPACE_SCOPE_P (decl))
2675 DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2676
2677 if (is_friend && !have_def)
2678 /* This is not really a declaration of a specialization.
2679 It's just the name of an instantiation. But, it's not
2680 a request for an instantiation, either. */
2681 SET_DECL_IMPLICIT_INSTANTIATION (decl);
2682 else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2683 /* This is indeed a specialization. In case of constructors
2684 and destructors, we need in-charge and not-in-charge
2685 versions in V3 ABI. */
2686 clone_function_decl (decl, /*update_method_vec_p=*/0);
2687
2688 /* Register this specialization so that we can find it
2689 again. */
2690 decl = register_specialization (decl, gen_tmpl, targs, is_friend, 0);
2691 }
2692 }
2693
2694 return decl;
2695 }
2696
2697 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2698 parameters. These are represented in the same format used for
2699 DECL_TEMPLATE_PARMS. */
2700
2701 int
2702 comp_template_parms (const_tree parms1, const_tree parms2)
2703 {
2704 const_tree p1;
2705 const_tree p2;
2706
2707 if (parms1 == parms2)
2708 return 1;
2709
2710 for (p1 = parms1, p2 = parms2;
2711 p1 != NULL_TREE && p2 != NULL_TREE;
2712 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2713 {
2714 tree t1 = TREE_VALUE (p1);
2715 tree t2 = TREE_VALUE (p2);
2716 int i;
2717
2718 gcc_assert (TREE_CODE (t1) == TREE_VEC);
2719 gcc_assert (TREE_CODE (t2) == TREE_VEC);
2720
2721 if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2722 return 0;
2723
2724 for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2725 {
2726 tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2727 tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2728
2729 /* If either of the template parameters are invalid, assume
2730 they match for the sake of error recovery. */
2731 if (parm1 == error_mark_node || parm2 == error_mark_node)
2732 return 1;
2733
2734 if (TREE_CODE (parm1) != TREE_CODE (parm2))
2735 return 0;
2736
2737 if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2738 && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2739 == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2740 continue;
2741 else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2742 return 0;
2743 }
2744 }
2745
2746 if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2747 /* One set of parameters has more parameters lists than the
2748 other. */
2749 return 0;
2750
2751 return 1;
2752 }
2753
2754 /* Determine whether PARM is a parameter pack. */
2755
2756 bool
2757 template_parameter_pack_p (const_tree parm)
2758 {
2759 /* Determine if we have a non-type template parameter pack. */
2760 if (TREE_CODE (parm) == PARM_DECL)
2761 return (DECL_TEMPLATE_PARM_P (parm)
2762 && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2763 if (TREE_CODE (parm) == TEMPLATE_PARM_INDEX)
2764 return TEMPLATE_PARM_PARAMETER_PACK (parm);
2765
2766 /* If this is a list of template parameters, we could get a
2767 TYPE_DECL or a TEMPLATE_DECL. */
2768 if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2769 parm = TREE_TYPE (parm);
2770
2771 /* Otherwise it must be a type template parameter. */
2772 return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2773 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2774 && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2775 }
2776
2777 /* Determine if T is a function parameter pack. */
2778
2779 bool
2780 function_parameter_pack_p (const_tree t)
2781 {
2782 if (t && TREE_CODE (t) == PARM_DECL)
2783 return FUNCTION_PARAMETER_PACK_P (t);
2784 return false;
2785 }
2786
2787 /* Return the function template declaration of PRIMARY_FUNC_TMPL_INST.
2788 PRIMARY_FUNC_TMPL_INST is a primary function template instantiation. */
2789
2790 tree
2791 get_function_template_decl (const_tree primary_func_tmpl_inst)
2792 {
2793 if (! primary_func_tmpl_inst
2794 || TREE_CODE (primary_func_tmpl_inst) != FUNCTION_DECL
2795 || ! primary_template_instantiation_p (primary_func_tmpl_inst))
2796 return NULL;
2797
2798 return DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (primary_func_tmpl_inst));
2799 }
2800
2801 /* Return true iff the function parameter PARAM_DECL was expanded
2802 from the function parameter pack PACK. */
2803
2804 bool
2805 function_parameter_expanded_from_pack_p (tree param_decl, tree pack)
2806 {
2807 if (DECL_ARTIFICIAL (param_decl)
2808 || !function_parameter_pack_p (pack))
2809 return false;
2810
2811 /* The parameter pack and its pack arguments have the same
2812 DECL_PARM_INDEX. */
2813 return DECL_PARM_INDEX (pack) == DECL_PARM_INDEX (param_decl);
2814 }
2815
2816 /* Determine whether ARGS describes a variadic template args list,
2817 i.e., one that is terminated by a template argument pack. */
2818
2819 static bool
2820 template_args_variadic_p (tree args)
2821 {
2822 int nargs;
2823 tree last_parm;
2824
2825 if (args == NULL_TREE)
2826 return false;
2827
2828 args = INNERMOST_TEMPLATE_ARGS (args);
2829 nargs = TREE_VEC_LENGTH (args);
2830
2831 if (nargs == 0)
2832 return false;
2833
2834 last_parm = TREE_VEC_ELT (args, nargs - 1);
2835
2836 return ARGUMENT_PACK_P (last_parm);
2837 }
2838
2839 /* Generate a new name for the parameter pack name NAME (an
2840 IDENTIFIER_NODE) that incorporates its */
2841
2842 static tree
2843 make_ith_pack_parameter_name (tree name, int i)
2844 {
2845 /* Munge the name to include the parameter index. */
2846 #define NUMBUF_LEN 128
2847 char numbuf[NUMBUF_LEN];
2848 char* newname;
2849 int newname_len;
2850
2851 snprintf (numbuf, NUMBUF_LEN, "%i", i);
2852 newname_len = IDENTIFIER_LENGTH (name)
2853 + strlen (numbuf) + 2;
2854 newname = (char*)alloca (newname_len);
2855 snprintf (newname, newname_len,
2856 "%s#%i", IDENTIFIER_POINTER (name), i);
2857 return get_identifier (newname);
2858 }
2859
2860 /* Return true if T is a primary function, class or alias template
2861 instantiation. */
2862
2863 bool
2864 primary_template_instantiation_p (const_tree t)
2865 {
2866 if (!t)
2867 return false;
2868
2869 if (TREE_CODE (t) == FUNCTION_DECL)
2870 return DECL_LANG_SPECIFIC (t)
2871 && DECL_TEMPLATE_INSTANTIATION (t)
2872 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t));
2873 else if (CLASS_TYPE_P (t))
2874 return CLASSTYPE_TEMPLATE_INSTANTIATION (t)
2875 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t));
2876 else if (TYPE_P (t)
2877 && TYPE_TEMPLATE_INFO (t)
2878 && PRIMARY_TEMPLATE_P (TYPE_TI_TEMPLATE (t))
2879 && DECL_TEMPLATE_INSTANTIATION (TYPE_NAME (t)))
2880 return true;
2881 return false;
2882 }
2883
2884 /* Return true if PARM is a template template parameter. */
2885
2886 bool
2887 template_template_parameter_p (const_tree parm)
2888 {
2889 return DECL_TEMPLATE_TEMPLATE_PARM_P (parm);
2890 }
2891
2892 /* Return the template parameters of T if T is a
2893 primary template instantiation, NULL otherwise. */
2894
2895 tree
2896 get_primary_template_innermost_parameters (const_tree t)
2897 {
2898 tree parms = NULL, template_info = NULL;
2899
2900 if ((template_info = get_template_info (t))
2901 && primary_template_instantiation_p (t))
2902 parms = INNERMOST_TEMPLATE_PARMS
2903 (DECL_TEMPLATE_PARMS (TI_TEMPLATE (template_info)));
2904
2905 return parms;
2906 }
2907
2908 /* Return the template parameters of the LEVELth level from the full list
2909 of template parameters PARMS. */
2910
2911 tree
2912 get_template_parms_at_level (tree parms, int level)
2913 {
2914 tree p;
2915 if (!parms
2916 || TREE_CODE (parms) != TREE_LIST
2917 || level > TMPL_PARMS_DEPTH (parms))
2918 return NULL_TREE;
2919
2920 for (p = parms; p; p = TREE_CHAIN (p))
2921 if (TMPL_PARMS_DEPTH (p) == level)
2922 return p;
2923
2924 return NULL_TREE;
2925 }
2926
2927 /* Returns the template arguments of T if T is a template instantiation,
2928 NULL otherwise. */
2929
2930 tree
2931 get_template_innermost_arguments (const_tree t)
2932 {
2933 tree args = NULL, template_info = NULL;
2934
2935 if ((template_info = get_template_info (t))
2936 && TI_ARGS (template_info))
2937 args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (template_info));
2938
2939 return args;
2940 }
2941
2942 /* Return the argument pack elements of T if T is a template argument pack,
2943 NULL otherwise. */
2944
2945 tree
2946 get_template_argument_pack_elems (const_tree t)
2947 {
2948 if (TREE_CODE (t) != TYPE_ARGUMENT_PACK
2949 && TREE_CODE (t) != NONTYPE_ARGUMENT_PACK)
2950 return NULL;
2951
2952 return ARGUMENT_PACK_ARGS (t);
2953 }
2954
2955 /* Structure used to track the progress of find_parameter_packs_r. */
2956 struct find_parameter_pack_data
2957 {
2958 /* TREE_LIST that will contain all of the parameter packs found by
2959 the traversal. */
2960 tree* parameter_packs;
2961
2962 /* Set of AST nodes that have been visited by the traversal. */
2963 struct pointer_set_t *visited;
2964 };
2965
2966 /* Identifies all of the argument packs that occur in a template
2967 argument and appends them to the TREE_LIST inside DATA, which is a
2968 find_parameter_pack_data structure. This is a subroutine of
2969 make_pack_expansion and uses_parameter_packs. */
2970 static tree
2971 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2972 {
2973 tree t = *tp;
2974 struct find_parameter_pack_data* ppd =
2975 (struct find_parameter_pack_data*)data;
2976 bool parameter_pack_p = false;
2977
2978 /* Identify whether this is a parameter pack or not. */
2979 switch (TREE_CODE (t))
2980 {
2981 case TEMPLATE_PARM_INDEX:
2982 if (TEMPLATE_PARM_PARAMETER_PACK (t))
2983 parameter_pack_p = true;
2984 break;
2985
2986 case TEMPLATE_TYPE_PARM:
2987 t = TYPE_MAIN_VARIANT (t);
2988 case TEMPLATE_TEMPLATE_PARM:
2989 if (TEMPLATE_TYPE_PARAMETER_PACK (t))
2990 parameter_pack_p = true;
2991 break;
2992
2993 case PARM_DECL:
2994 if (FUNCTION_PARAMETER_PACK_P (t))
2995 {
2996 /* We don't want to walk into the type of a PARM_DECL,
2997 because we don't want to see the type parameter pack. */
2998 *walk_subtrees = 0;
2999 parameter_pack_p = true;
3000 }
3001 break;
3002
3003 case BASES:
3004 parameter_pack_p = true;
3005 break;
3006 default:
3007 /* Not a parameter pack. */
3008 break;
3009 }
3010
3011 if (parameter_pack_p)
3012 {
3013 /* Add this parameter pack to the list. */
3014 *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
3015 }
3016
3017 if (TYPE_P (t))
3018 cp_walk_tree (&TYPE_CONTEXT (t),
3019 &find_parameter_packs_r, ppd, ppd->visited);
3020
3021 /* This switch statement will return immediately if we don't find a
3022 parameter pack. */
3023 switch (TREE_CODE (t))
3024 {
3025 case TEMPLATE_PARM_INDEX:
3026 return NULL_TREE;
3027
3028 case BOUND_TEMPLATE_TEMPLATE_PARM:
3029 /* Check the template itself. */
3030 cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)),
3031 &find_parameter_packs_r, ppd, ppd->visited);
3032 /* Check the template arguments. */
3033 cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd,
3034 ppd->visited);
3035 *walk_subtrees = 0;
3036 return NULL_TREE;
3037
3038 case TEMPLATE_TYPE_PARM:
3039 case TEMPLATE_TEMPLATE_PARM:
3040 return NULL_TREE;
3041
3042 case PARM_DECL:
3043 return NULL_TREE;
3044
3045 case RECORD_TYPE:
3046 if (TYPE_PTRMEMFUNC_P (t))
3047 return NULL_TREE;
3048 /* Fall through. */
3049
3050 case UNION_TYPE:
3051 case ENUMERAL_TYPE:
3052 if (TYPE_TEMPLATE_INFO (t))
3053 cp_walk_tree (&TI_ARGS (TYPE_TEMPLATE_INFO (t)),
3054 &find_parameter_packs_r, ppd, ppd->visited);
3055
3056 *walk_subtrees = 0;
3057 return NULL_TREE;
3058
3059 case CONSTRUCTOR:
3060 case TEMPLATE_DECL:
3061 cp_walk_tree (&TREE_TYPE (t),
3062 &find_parameter_packs_r, ppd, ppd->visited);
3063 return NULL_TREE;
3064
3065 case TYPENAME_TYPE:
3066 cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
3067 ppd, ppd->visited);
3068 *walk_subtrees = 0;
3069 return NULL_TREE;
3070
3071 case TYPE_PACK_EXPANSION:
3072 case EXPR_PACK_EXPANSION:
3073 *walk_subtrees = 0;
3074 return NULL_TREE;
3075
3076 case INTEGER_TYPE:
3077 cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r,
3078 ppd, ppd->visited);
3079 *walk_subtrees = 0;
3080 return NULL_TREE;
3081
3082 case IDENTIFIER_NODE:
3083 cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd,
3084 ppd->visited);
3085 *walk_subtrees = 0;
3086 return NULL_TREE;
3087
3088 default:
3089 return NULL_TREE;
3090 }
3091
3092 return NULL_TREE;
3093 }
3094
3095 /* Determines if the expression or type T uses any parameter packs. */
3096 bool
3097 uses_parameter_packs (tree t)
3098 {
3099 tree parameter_packs = NULL_TREE;
3100 struct find_parameter_pack_data ppd;
3101 ppd.parameter_packs = &parameter_packs;
3102 ppd.visited = pointer_set_create ();
3103 cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3104 pointer_set_destroy (ppd.visited);
3105 return parameter_packs != NULL_TREE;
3106 }
3107
3108 /* Turn ARG, which may be an expression, type, or a TREE_LIST
3109 representation a base-class initializer into a parameter pack
3110 expansion. If all goes well, the resulting node will be an
3111 EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
3112 respectively. */
3113 tree
3114 make_pack_expansion (tree arg)
3115 {
3116 tree result;
3117 tree parameter_packs = NULL_TREE;
3118 bool for_types = false;
3119 struct find_parameter_pack_data ppd;
3120
3121 if (!arg || arg == error_mark_node)
3122 return arg;
3123
3124 if (TREE_CODE (arg) == TREE_LIST)
3125 {
3126 /* The only time we will see a TREE_LIST here is for a base
3127 class initializer. In this case, the TREE_PURPOSE will be a
3128 _TYPE node (representing the base class expansion we're
3129 initializing) and the TREE_VALUE will be a TREE_LIST
3130 containing the initialization arguments.
3131
3132 The resulting expansion looks somewhat different from most
3133 expansions. Rather than returning just one _EXPANSION, we
3134 return a TREE_LIST whose TREE_PURPOSE is a
3135 TYPE_PACK_EXPANSION containing the bases that will be
3136 initialized. The TREE_VALUE will be identical to the
3137 original TREE_VALUE, which is a list of arguments that will
3138 be passed to each base. We do not introduce any new pack
3139 expansion nodes into the TREE_VALUE (although it is possible
3140 that some already exist), because the TREE_PURPOSE and
3141 TREE_VALUE all need to be expanded together with the same
3142 _EXPANSION node. Note that the TYPE_PACK_EXPANSION in the
3143 resulting TREE_PURPOSE will mention the parameter packs in
3144 both the bases and the arguments to the bases. */
3145 tree purpose;
3146 tree value;
3147 tree parameter_packs = NULL_TREE;
3148
3149 /* Determine which parameter packs will be used by the base
3150 class expansion. */
3151 ppd.visited = pointer_set_create ();
3152 ppd.parameter_packs = &parameter_packs;
3153 cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r,
3154 &ppd, ppd.visited);
3155
3156 if (parameter_packs == NULL_TREE)
3157 {
3158 error ("base initializer expansion %<%T%> contains no parameter packs", arg);
3159 pointer_set_destroy (ppd.visited);
3160 return error_mark_node;
3161 }
3162
3163 if (TREE_VALUE (arg) != void_type_node)
3164 {
3165 /* Collect the sets of parameter packs used in each of the
3166 initialization arguments. */
3167 for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
3168 {
3169 /* Determine which parameter packs will be expanded in this
3170 argument. */
3171 cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r,
3172 &ppd, ppd.visited);
3173 }
3174 }
3175
3176 pointer_set_destroy (ppd.visited);
3177
3178 /* Create the pack expansion type for the base type. */
3179 purpose = cxx_make_type (TYPE_PACK_EXPANSION);
3180 SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
3181 PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
3182
3183 /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3184 they will rarely be compared to anything. */
3185 SET_TYPE_STRUCTURAL_EQUALITY (purpose);
3186
3187 return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
3188 }
3189
3190 if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
3191 for_types = true;
3192
3193 /* Build the PACK_EXPANSION_* node. */
3194 result = for_types
3195 ? cxx_make_type (TYPE_PACK_EXPANSION)
3196 : make_node (EXPR_PACK_EXPANSION);
3197 SET_PACK_EXPANSION_PATTERN (result, arg);
3198 if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
3199 {
3200 /* Propagate type and const-expression information. */
3201 TREE_TYPE (result) = TREE_TYPE (arg);
3202 TREE_CONSTANT (result) = TREE_CONSTANT (arg);
3203 }
3204 else
3205 /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3206 they will rarely be compared to anything. */
3207 SET_TYPE_STRUCTURAL_EQUALITY (result);
3208
3209 /* Determine which parameter packs will be expanded. */
3210 ppd.parameter_packs = &parameter_packs;
3211 ppd.visited = pointer_set_create ();
3212 cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
3213 pointer_set_destroy (ppd.visited);
3214
3215 /* Make sure we found some parameter packs. */
3216 if (parameter_packs == NULL_TREE)
3217 {
3218 if (TYPE_P (arg))
3219 error ("expansion pattern %<%T%> contains no argument packs", arg);
3220 else
3221 error ("expansion pattern %<%E%> contains no argument packs", arg);
3222 return error_mark_node;
3223 }
3224 PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
3225
3226 return result;
3227 }
3228
3229 /* Checks T for any "bare" parameter packs, which have not yet been
3230 expanded, and issues an error if any are found. This operation can
3231 only be done on full expressions or types (e.g., an expression
3232 statement, "if" condition, etc.), because we could have expressions like:
3233
3234 foo(f(g(h(args)))...)
3235
3236 where "args" is a parameter pack. check_for_bare_parameter_packs
3237 should not be called for the subexpressions args, h(args),
3238 g(h(args)), or f(g(h(args))), because we would produce erroneous
3239 error messages.
3240
3241 Returns TRUE and emits an error if there were bare parameter packs,
3242 returns FALSE otherwise. */
3243 bool
3244 check_for_bare_parameter_packs (tree t)
3245 {
3246 tree parameter_packs = NULL_TREE;
3247 struct find_parameter_pack_data ppd;
3248
3249 if (!processing_template_decl || !t || t == error_mark_node)
3250 return false;
3251
3252 if (TREE_CODE (t) == TYPE_DECL)
3253 t = TREE_TYPE (t);
3254
3255 ppd.parameter_packs = &parameter_packs;
3256 ppd.visited = pointer_set_create ();
3257 cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3258 pointer_set_destroy (ppd.visited);
3259
3260 if (parameter_packs)
3261 {
3262 error ("parameter packs not expanded with %<...%>:");
3263 while (parameter_packs)
3264 {
3265 tree pack = TREE_VALUE (parameter_packs);
3266 tree name = NULL_TREE;
3267
3268 if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
3269 || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
3270 name = TYPE_NAME (pack);
3271 else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
3272 name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
3273 else
3274 name = DECL_NAME (pack);
3275
3276 if (name)
3277 inform (input_location, " %qD", name);
3278 else
3279 inform (input_location, " <anonymous>");
3280
3281 parameter_packs = TREE_CHAIN (parameter_packs);
3282 }
3283
3284 return true;
3285 }
3286
3287 return false;
3288 }
3289
3290 /* Expand any parameter packs that occur in the template arguments in
3291 ARGS. */
3292 tree
3293 expand_template_argument_pack (tree args)
3294 {
3295 tree result_args = NULL_TREE;
3296 int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
3297 int num_result_args = -1;
3298 int non_default_args_count = -1;
3299
3300 /* First, determine if we need to expand anything, and the number of
3301 slots we'll need. */
3302 for (in_arg = 0; in_arg < nargs; ++in_arg)
3303 {
3304 tree arg = TREE_VEC_ELT (args, in_arg);
3305 if (arg == NULL_TREE)
3306 return args;
3307 if (ARGUMENT_PACK_P (arg))
3308 {
3309 int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
3310 if (num_result_args < 0)
3311 num_result_args = in_arg + num_packed;
3312 else
3313 num_result_args += num_packed;
3314 }
3315 else
3316 {
3317 if (num_result_args >= 0)
3318 num_result_args++;
3319 }
3320 }
3321
3322 /* If no expansion is necessary, we're done. */
3323 if (num_result_args < 0)
3324 return args;
3325
3326 /* Expand arguments. */
3327 result_args = make_tree_vec (num_result_args);
3328 if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (args))
3329 non_default_args_count =
3330 GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
3331 for (in_arg = 0; in_arg < nargs; ++in_arg)
3332 {
3333 tree arg = TREE_VEC_ELT (args, in_arg);
3334 if (ARGUMENT_PACK_P (arg))
3335 {
3336 tree packed = ARGUMENT_PACK_ARGS (arg);
3337 int i, num_packed = TREE_VEC_LENGTH (packed);
3338 for (i = 0; i < num_packed; ++i, ++out_arg)
3339 TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
3340 if (non_default_args_count > 0)
3341 non_default_args_count += num_packed;
3342 }
3343 else
3344 {
3345 TREE_VEC_ELT (result_args, out_arg) = arg;
3346 ++out_arg;
3347 }
3348 }
3349 if (non_default_args_count >= 0)
3350 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (result_args, non_default_args_count);
3351 return result_args;
3352 }
3353
3354 /* Checks if DECL shadows a template parameter.
3355
3356 [temp.local]: A template-parameter shall not be redeclared within its
3357 scope (including nested scopes).
3358
3359 Emits an error and returns TRUE if the DECL shadows a parameter,
3360 returns FALSE otherwise. */
3361
3362 bool
3363 check_template_shadow (tree decl)
3364 {
3365 tree olddecl;
3366
3367 /* If we're not in a template, we can't possibly shadow a template
3368 parameter. */
3369 if (!current_template_parms)
3370 return true;
3371
3372 /* Figure out what we're shadowing. */
3373 if (TREE_CODE (decl) == OVERLOAD)
3374 decl = OVL_CURRENT (decl);
3375 olddecl = innermost_non_namespace_value (DECL_NAME (decl));
3376
3377 /* If there's no previous binding for this name, we're not shadowing
3378 anything, let alone a template parameter. */
3379 if (!olddecl)
3380 return true;
3381
3382 /* If we're not shadowing a template parameter, we're done. Note
3383 that OLDDECL might be an OVERLOAD (or perhaps even an
3384 ERROR_MARK), so we can't just blithely assume it to be a _DECL
3385 node. */
3386 if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
3387 return true;
3388
3389 /* We check for decl != olddecl to avoid bogus errors for using a
3390 name inside a class. We check TPFI to avoid duplicate errors for
3391 inline member templates. */
3392 if (decl == olddecl
3393 || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
3394 return true;
3395
3396 error ("declaration of %q+#D", decl);
3397 error (" shadows template parm %q+#D", olddecl);
3398 return false;
3399 }
3400
3401 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
3402 ORIG_LEVEL, DECL, and TYPE. NUM_SIBLINGS is the total number of
3403 template parameters. */
3404
3405 static tree
3406 build_template_parm_index (int index,
3407 int level,
3408 int orig_level,
3409 int num_siblings,
3410 tree decl,
3411 tree type)
3412 {
3413 tree t = make_node (TEMPLATE_PARM_INDEX);
3414 TEMPLATE_PARM_IDX (t) = index;
3415 TEMPLATE_PARM_LEVEL (t) = level;
3416 TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
3417 TEMPLATE_PARM_NUM_SIBLINGS (t) = num_siblings;
3418 TEMPLATE_PARM_DECL (t) = decl;
3419 TREE_TYPE (t) = type;
3420 TREE_CONSTANT (t) = TREE_CONSTANT (decl);
3421 TREE_READONLY (t) = TREE_READONLY (decl);
3422
3423 return t;
3424 }
3425
3426 /* Find the canonical type parameter for the given template type
3427 parameter. Returns the canonical type parameter, which may be TYPE
3428 if no such parameter existed. */
3429
3430 static tree
3431 canonical_type_parameter (tree type)
3432 {
3433 tree list;
3434 int idx = TEMPLATE_TYPE_IDX (type);
3435 if (!canonical_template_parms)
3436 canonical_template_parms = VEC_alloc (tree, gc, idx+1);
3437
3438 while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
3439 VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
3440
3441 list = VEC_index (tree, canonical_template_parms, idx);
3442 while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
3443 list = TREE_CHAIN (list);
3444
3445 if (list)
3446 return TREE_VALUE (list);
3447 else
3448 {
3449 VEC_replace(tree, canonical_template_parms, idx,
3450 tree_cons (NULL_TREE, type,
3451 VEC_index (tree, canonical_template_parms, idx)));
3452 return type;
3453 }
3454 }
3455
3456 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
3457 TEMPLATE_PARM_LEVEL has been decreased by LEVELS. If such a
3458 TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
3459 new one is created. */
3460
3461 static tree
3462 reduce_template_parm_level (tree index, tree type, int levels, tree args,
3463 tsubst_flags_t complain)
3464 {
3465 if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
3466 || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
3467 != TEMPLATE_PARM_LEVEL (index) - levels)
3468 || !same_type_p (type, TREE_TYPE (TEMPLATE_PARM_DESCENDANTS (index))))
3469 {
3470 tree orig_decl = TEMPLATE_PARM_DECL (index);
3471 tree decl, t;
3472
3473 decl = build_decl (DECL_SOURCE_LOCATION (orig_decl),
3474 TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
3475 TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
3476 TREE_READONLY (decl) = TREE_READONLY (orig_decl);
3477 DECL_ARTIFICIAL (decl) = 1;
3478 SET_DECL_TEMPLATE_PARM_P (decl);
3479
3480 t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
3481 TEMPLATE_PARM_LEVEL (index) - levels,
3482 TEMPLATE_PARM_ORIG_LEVEL (index),
3483 TEMPLATE_PARM_NUM_SIBLINGS (index),
3484 decl, type);
3485 TEMPLATE_PARM_DESCENDANTS (index) = t;
3486 TEMPLATE_PARM_PARAMETER_PACK (t)
3487 = TEMPLATE_PARM_PARAMETER_PACK (index);
3488
3489 /* Template template parameters need this. */
3490 if (TREE_CODE (decl) == TEMPLATE_DECL)
3491 DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
3492 (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
3493 args, complain);
3494 }
3495
3496 return TEMPLATE_PARM_DESCENDANTS (index);
3497 }
3498
3499 /* Process information from new template parameter PARM and append it
3500 to the LIST being built. This new parameter is a non-type
3501 parameter iff IS_NON_TYPE is true. This new parameter is a
3502 parameter pack iff IS_PARAMETER_PACK is true. The location of PARM
3503 is in PARM_LOC. NUM_TEMPLATE_PARMS is the size of the template
3504 parameter list PARM belongs to. This is used used to create a
3505 proper canonical type for the type of PARM that is to be created,
3506 iff PARM is a type. If the size is not known, this parameter shall
3507 be set to 0. */
3508
3509 tree
3510 process_template_parm (tree list, location_t parm_loc, tree parm,
3511 bool is_non_type, bool is_parameter_pack,
3512 unsigned num_template_parms)
3513 {
3514 tree decl = 0;
3515 tree defval;
3516 tree err_parm_list;
3517 int idx = 0;
3518
3519 gcc_assert (TREE_CODE (parm) == TREE_LIST);
3520 defval = TREE_PURPOSE (parm);
3521
3522 if (list)
3523 {
3524 tree p = tree_last (list);
3525
3526 if (p && TREE_VALUE (p) != error_mark_node)
3527 {
3528 p = TREE_VALUE (p);
3529 if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
3530 idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
3531 else
3532 idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
3533 }
3534
3535 ++idx;
3536 }
3537 else
3538 idx = 0;
3539
3540 if (is_non_type)
3541 {
3542 parm = TREE_VALUE (parm);
3543
3544 SET_DECL_TEMPLATE_PARM_P (parm);
3545
3546 if (TREE_TYPE (parm) == error_mark_node)
3547 {
3548 err_parm_list = build_tree_list (defval, parm);
3549 TREE_VALUE (err_parm_list) = error_mark_node;
3550 return chainon (list, err_parm_list);
3551 }
3552 else
3553 {
3554 /* [temp.param]
3555
3556 The top-level cv-qualifiers on the template-parameter are
3557 ignored when determining its type. */
3558 TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3559 if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3560 {
3561 err_parm_list = build_tree_list (defval, parm);
3562 TREE_VALUE (err_parm_list) = error_mark_node;
3563 return chainon (list, err_parm_list);
3564 }
3565
3566 if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
3567 {
3568 /* This template parameter is not a parameter pack, but it
3569 should be. Complain about "bare" parameter packs. */
3570 check_for_bare_parameter_packs (TREE_TYPE (parm));
3571
3572 /* Recover by calling this a parameter pack. */
3573 is_parameter_pack = true;
3574 }
3575 }
3576
3577 /* A template parameter is not modifiable. */
3578 TREE_CONSTANT (parm) = 1;
3579 TREE_READONLY (parm) = 1;
3580 decl = build_decl (parm_loc,
3581 CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3582 TREE_CONSTANT (decl) = 1;
3583 TREE_READONLY (decl) = 1;
3584 DECL_INITIAL (parm) = DECL_INITIAL (decl)
3585 = build_template_parm_index (idx, processing_template_decl,
3586 processing_template_decl,
3587 num_template_parms,
3588 decl, TREE_TYPE (parm));
3589
3590 TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
3591 = is_parameter_pack;
3592 }
3593 else
3594 {
3595 tree t;
3596 parm = TREE_VALUE (TREE_VALUE (parm));
3597
3598 if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3599 {
3600 t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3601 /* This is for distinguishing between real templates and template
3602 template parameters */
3603 TREE_TYPE (parm) = t;
3604 TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3605 decl = parm;
3606 }
3607 else
3608 {
3609 t = cxx_make_type (TEMPLATE_TYPE_PARM);
3610 /* parm is either IDENTIFIER_NODE or NULL_TREE. */
3611 decl = build_decl (parm_loc,
3612 TYPE_DECL, parm, t);
3613 }
3614
3615 TYPE_NAME (t) = decl;
3616 TYPE_STUB_DECL (t) = decl;
3617 parm = decl;
3618 TEMPLATE_TYPE_PARM_INDEX (t)
3619 = build_template_parm_index (idx, processing_template_decl,
3620 processing_template_decl,
3621 num_template_parms,
3622 decl, TREE_TYPE (parm));
3623 TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3624 TYPE_CANONICAL (t) = canonical_type_parameter (t);
3625 }
3626 DECL_ARTIFICIAL (decl) = 1;
3627 SET_DECL_TEMPLATE_PARM_P (decl);
3628 pushdecl (decl);
3629 parm = build_tree_list (defval, parm);
3630 return chainon (list, parm);
3631 }
3632
3633 /* The end of a template parameter list has been reached. Process the
3634 tree list into a parameter vector, converting each parameter into a more
3635 useful form. Type parameters are saved as IDENTIFIER_NODEs, and others
3636 as PARM_DECLs. */
3637
3638 tree
3639 end_template_parm_list (tree parms)
3640 {
3641 int nparms;
3642 tree parm, next;
3643 tree saved_parmlist = make_tree_vec (list_length (parms));
3644
3645 current_template_parms
3646 = tree_cons (size_int (processing_template_decl),
3647 saved_parmlist, current_template_parms);
3648
3649 for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3650 {
3651 next = TREE_CHAIN (parm);
3652 TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3653 TREE_CHAIN (parm) = NULL_TREE;
3654 }
3655
3656 --processing_template_parmlist;
3657
3658 return saved_parmlist;
3659 }
3660
3661 /* Create a new type almost identical to TYPE but which has the
3662 following differences:
3663
3664 1/ T has a new TEMPLATE_PARM_INDEX that carries the new number of
3665 template sibling parameters of T.
3666
3667 2/ T has a new canonical type that matches the new number
3668 of sibling parms.
3669
3670 3/ From now on, T is going to be what lookups referring to the
3671 name of TYPE will return. No lookup should return TYPE anymore.
3672
3673 NUM_PARMS is the new number of sibling parms TYPE belongs to.
3674
3675 This is a subroutine of fixup_template_parms. */
3676
3677 static tree
3678 fixup_template_type_parm_type (tree type, int num_parms)
3679 {
3680 tree orig_idx = TEMPLATE_TYPE_PARM_INDEX (type), idx;
3681 tree t;
3682 /* This is the decl which name is inserted into the symbol table for
3683 the template parm type. So whenever we lookup the type name, this
3684 is the DECL we get. */
3685 tree decl;
3686
3687 /* Do not fix up the type twice. */
3688 if (orig_idx && TEMPLATE_PARM_NUM_SIBLINGS (orig_idx) != 0)
3689 return type;
3690
3691 t = copy_type (type);
3692 decl = TYPE_NAME (t);
3693
3694 TYPE_MAIN_VARIANT (t) = t;
3695 TYPE_NEXT_VARIANT (t)= NULL_TREE;
3696 TYPE_POINTER_TO (t) = 0;
3697 TYPE_REFERENCE_TO (t) = 0;
3698
3699 idx = build_template_parm_index (TEMPLATE_PARM_IDX (orig_idx),
3700 TEMPLATE_PARM_LEVEL (orig_idx),
3701 TEMPLATE_PARM_ORIG_LEVEL (orig_idx),
3702 num_parms,
3703 decl, t);
3704 TEMPLATE_PARM_DESCENDANTS (idx) = TEMPLATE_PARM_DESCENDANTS (orig_idx);
3705 TEMPLATE_PARM_PARAMETER_PACK (idx) = TEMPLATE_PARM_PARAMETER_PACK (orig_idx);
3706 TEMPLATE_TYPE_PARM_INDEX (t) = idx;
3707
3708 TYPE_STUB_DECL (t) = decl;
3709 TEMPLATE_TYPE_DECL (t) = decl;
3710 if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
3711 TREE_TYPE (DECL_TEMPLATE_RESULT (decl)) = t;
3712
3713 /* Update the type associated to the type name stored in the symbol
3714 table. Now, whenever the type name is looked up, the resulting
3715 type is properly fixed up. */
3716 TREE_TYPE (decl) = t;
3717
3718 TYPE_CANONICAL (t) = canonical_type_parameter (t);
3719
3720 return t;
3721 }
3722
3723 /* Create and return a new TEMPLATE_PARM_INDEX that is almost
3724 identical to I, but that is fixed up as to:
3725
3726 1/ carry the number of sibling parms (NUM_PARMS) of the template
3727 parm represented by I.
3728
3729 2/ replace all references to template parm types declared before I
3730 (in the same template parm list as I) by references to template
3731 parm types contained in ARGS. ARGS should contain the list of
3732 template parms that have been fixed up so far, in a form suitable
3733 to be passed to tsubst.
3734
3735 This is a subroutine of fixup_template_parms. */
3736
3737 static tree
3738 fixup_template_parm_index (tree i, tree args, int num_parms)
3739 {
3740 tree index, decl, type;
3741
3742 if (i == NULL_TREE
3743 || TREE_CODE (i) != TEMPLATE_PARM_INDEX
3744 /* Do not fix up the index twice. */
3745 || (TEMPLATE_PARM_NUM_SIBLINGS (i) != 0))
3746 return i;
3747
3748 decl = TEMPLATE_PARM_DECL (i);
3749 type = TREE_TYPE (decl);
3750
3751 index = build_template_parm_index (TEMPLATE_PARM_IDX (i),
3752 TEMPLATE_PARM_LEVEL (i),
3753 TEMPLATE_PARM_ORIG_LEVEL (i),
3754 num_parms,
3755 decl, type);
3756
3757 TEMPLATE_PARM_DESCENDANTS (index) = TEMPLATE_PARM_DESCENDANTS (i);
3758 TEMPLATE_PARM_PARAMETER_PACK (index) = TEMPLATE_PARM_PARAMETER_PACK (i);
3759
3760 type = tsubst (type, args, tf_none, NULL_TREE);
3761
3762 TREE_TYPE (decl) = type;
3763 TREE_TYPE (index) = type;
3764
3765 return index;
3766 }
3767
3768 /*
3769 This is a subroutine of fixup_template_parms.
3770
3771 It computes the canonical type of the type of the template
3772 parameter PARM_DESC and update all references to that type so that
3773 they use the newly computed canonical type. No access check is
3774 performed during the fixup. PARM_DESC is a TREE_LIST which
3775 TREE_VALUE is the template parameter and its TREE_PURPOSE is the
3776 default argument of the template parm if any. IDX is the index of
3777 the template parameter, starting at 0. NUM_PARMS is the number of
3778 template parameters in the set PARM_DESC belongs to. ARGLIST is a
3779 TREE_VEC containing the full set of template parameters in a form
3780 suitable to be passed to substs functions as their ARGS
3781 argument. This is what current_template_args returns for a given
3782 template. The innermost vector of args in ARGLIST is the set of
3783 template parms that have been fixed up so far. This function adds
3784 the fixed up parameter into that vector. */
3785
3786 static void
3787 fixup_template_parm (tree parm_desc,
3788 int idx,
3789 int num_parms,
3790 tree arglist)
3791 {
3792 tree parm = TREE_VALUE (parm_desc);
3793 tree fixedup_args = INNERMOST_TEMPLATE_ARGS (arglist);
3794
3795 push_deferring_access_checks (dk_no_check);
3796
3797 if (TREE_CODE (parm) == TYPE_DECL)
3798 {
3799 /* PARM is a template type parameter. Fix up its type, add
3800 the fixed-up template parm to the vector of fixed-up
3801 template parms so far, and substitute the fixed-up
3802 template parms into the default argument of this
3803 parameter. */
3804 tree t =
3805 fixup_template_type_parm_type (TREE_TYPE (parm), num_parms);
3806 TREE_TYPE (parm) = t;
3807
3808 TREE_VEC_ELT (fixedup_args, idx) = template_parm_to_arg (parm_desc);
3809 }
3810 else if (TREE_CODE (parm) == TEMPLATE_DECL)
3811 {
3812 /* PARM is a template template parameter. This is going to
3813 be interesting. */
3814 tree tparms, targs, innermost_args, t;
3815 int j;
3816
3817 /* First, fix up the parms of the template template parm
3818 because the parms are involved in defining the new canonical
3819 type of the template template parm. */
3820
3821 /* So we need to substitute the template parm types that have
3822 been fixed up so far into the template parms of this template
3823 template parm. E.g, consider this:
3824
3825 template<class T, template<T u> class TT> class S;
3826
3827 In this case we want to substitute T into the
3828 template parameters of TT.
3829
3830 So let's walk the template parms of PARM here, and
3831 tsubst ARGLIST into into each of the template
3832 parms. */
3833
3834 /* For this substitution we need to build the full set of
3835 template parameters and use that as arguments for the
3836 tsubsting function. */
3837 tparms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (parm));
3838
3839 /* This will contain the innermost parms of PARM into which
3840 we have substituted so far. */
3841 innermost_args = make_tree_vec (TREE_VEC_LENGTH (tparms));
3842 targs = add_to_template_args (arglist, innermost_args);
3843 for (j = 0; j < TREE_VEC_LENGTH (tparms); ++j)
3844 {
3845 tree parameter;
3846
3847 parameter = TREE_VEC_ELT (tparms, j);
3848
3849 /* INNERMOST_ARGS needs to have at least the same number
3850 of elements as the index PARAMETER, ortherwise
3851 tsubsting into PARAMETER will result in partially
3852 instantiating it, reducing its tempate parm
3853 level. Let's tactically fill INNERMOST_ARGS for that
3854 purpose. */
3855 TREE_VEC_ELT (innermost_args, j) =
3856 template_parm_to_arg (parameter);
3857
3858 fixup_template_parm (parameter, j,
3859 TREE_VEC_LENGTH (tparms),
3860 targs);
3861 }
3862
3863 /* Now fix up the type of the template template parm. */
3864
3865 t = fixup_template_type_parm_type (TREE_TYPE (parm), num_parms);
3866 TREE_TYPE (parm) = t;
3867
3868 TREE_VEC_ELT (fixedup_args, idx) =
3869 template_parm_to_arg (parm_desc);
3870 }
3871 else if (TREE_CODE (parm) == PARM_DECL)
3872 {
3873 /* PARM is a non-type template parameter. We need to:
3874
3875 * Fix up its TEMPLATE_PARM_INDEX to make it carry the
3876 proper number of sibling parameters.
3877
3878 * Make lookups of the template parameter return a reference
3879 to the fixed-up index. No lookup should return references
3880 to the former index anymore.
3881
3882 * Substitute the template parms that got fixed up so far
3883
3884 * into the type of PARM. */
3885
3886 tree index = DECL_INITIAL (parm);
3887
3888 /* PUSHED_DECL is the decl added to the symbol table with
3889 the name of the parameter. E,g:
3890
3891 template<class T, T u> //#0
3892 auto my_function(T t) -> decltype(u); //#1
3893
3894 Here, when looking up u at //#1, we get the decl of u
3895 resulting from the declaration in #0. This is what
3896 PUSHED_DECL is. We need to replace the reference to the
3897 old TEMPLATE_PARM_INDEX carried by PUSHED_DECL by the
3898 fixed-up TEMPLATE_PARM_INDEX. */
3899 tree pushed_decl = TEMPLATE_PARM_DECL (index);
3900
3901 /* Let's fix up the TEMPLATE_PARM_INDEX then. Note that we must
3902 fixup the type of PUSHED_DECL as well and luckily
3903 fixup_template_parm_index does it for us too. */
3904 tree fixed_up_index =
3905 fixup_template_parm_index (index, arglist, num_parms);
3906
3907 DECL_INITIAL (pushed_decl) = DECL_INITIAL (parm) = fixed_up_index;
3908
3909 /* Add this fixed up PARM to the template parms we've fixed
3910 up so far and use that to substitute the fixed-up
3911 template parms into the type of PARM. */
3912 TREE_VEC_ELT (fixedup_args, idx) =
3913 template_parm_to_arg (parm_desc);
3914 TREE_TYPE (parm) = tsubst (TREE_TYPE (parm), arglist,
3915 tf_none, NULL_TREE);
3916 }
3917
3918 TREE_PURPOSE (parm_desc) =
3919 tsubst_template_arg (TREE_PURPOSE (parm_desc),
3920 arglist, tf_none, parm);
3921
3922 pop_deferring_access_checks ();
3923 }
3924
3925 /* Walk the current template parms and properly compute the canonical
3926 types of the dependent types created during
3927 cp_parser_template_parameter_list. */
3928
3929 void
3930 fixup_template_parms (void)
3931 {
3932 tree arglist;
3933 tree parameter_vec;
3934 tree fixedup_args;
3935 int i, num_parms;
3936
3937 parameter_vec = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3938 if (parameter_vec == NULL_TREE)
3939 return;
3940
3941 num_parms = TREE_VEC_LENGTH (parameter_vec);
3942
3943 /* This vector contains the current innermost template parms that
3944 have been fixed up so far. The form of FIXEDUP_ARGS is suitable
3945 to be passed to tsubst* functions as their ARGS argument. */
3946 fixedup_args = make_tree_vec (num_parms);
3947
3948 /* This vector contains the full set of template parms in a form
3949 suitable to be passed to substs functions as their ARGS
3950 argument. */
3951 arglist = current_template_args ();
3952 arglist = add_outermost_template_args (arglist, fixedup_args);
3953
3954 /* Let's do the proper fixup now. */
3955 for (i = 0; i < num_parms; ++i)
3956 fixup_template_parm (TREE_VEC_ELT (parameter_vec, i),
3957 i, num_parms, arglist);
3958 }
3959
3960 /* end_template_decl is called after a template declaration is seen. */
3961
3962 void
3963 end_template_decl (void)
3964 {
3965 reset_specialization ();
3966
3967 if (! processing_template_decl)
3968 return;
3969
3970 /* This matches the pushlevel in begin_template_parm_list. */
3971 finish_scope ();
3972
3973 --processing_template_decl;
3974 current_template_parms = TREE_CHAIN (current_template_parms);
3975 }
3976
3977 /* Takes a TREE_LIST representing a template parameter and convert it
3978 into an argument suitable to be passed to the type substitution
3979 functions. Note that If the TREE_LIST contains an error_mark
3980 node, the returned argument is error_mark_node. */
3981
3982 static tree
3983 template_parm_to_arg (tree t)
3984 {
3985
3986 if (t == NULL_TREE
3987 || TREE_CODE (t) != TREE_LIST)
3988 return t;
3989
3990 if (error_operand_p (TREE_VALUE (t)))
3991 return error_mark_node;
3992
3993 t = TREE_VALUE (t);
3994
3995 if (TREE_CODE (t) == TYPE_DECL
3996 || TREE_CODE (t) == TEMPLATE_DECL)
3997 {
3998 t = TREE_TYPE (t);
3999
4000 if (TEMPLATE_TYPE_PARAMETER_PACK (t))
4001 {
4002 /* Turn this argument into a TYPE_ARGUMENT_PACK
4003 with a single element, which expands T. */
4004 tree vec = make_tree_vec (1);
4005 #ifdef ENABLE_CHECKING
4006 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
4007 (vec, TREE_VEC_LENGTH (vec));
4008 #endif
4009 TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
4010
4011 t = cxx_make_type (TYPE_ARGUMENT_PACK);
4012 SET_ARGUMENT_PACK_ARGS (t, vec);
4013 }
4014 }
4015 else
4016 {
4017 t = DECL_INITIAL (t);
4018
4019 if (TEMPLATE_PARM_PARAMETER_PACK (t))
4020 {
4021 /* Turn this argument into a NONTYPE_ARGUMENT_PACK
4022 with a single element, which expands T. */
4023 tree vec = make_tree_vec (1);
4024 tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
4025 #ifdef ENABLE_CHECKING
4026 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
4027 (vec, TREE_VEC_LENGTH (vec));
4028 #endif
4029 TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
4030
4031 t = make_node (NONTYPE_ARGUMENT_PACK);
4032 SET_ARGUMENT_PACK_ARGS (t, vec);
4033 TREE_TYPE (t) = type;
4034 }
4035 }
4036 return t;
4037 }
4038
4039 /* This function returns TRUE if PARM_PACK is a template parameter
4040 pack and if ARG_PACK is what template_parm_to_arg returned when
4041 passed PARM_PACK. */
4042
4043 static bool
4044 arg_from_parm_pack_p (tree arg_pack, tree parm_pack)
4045 {
4046 /* For clarity in the comments below let's use the representation
4047 argument_pack<elements>' to denote an argument pack and its
4048 elements.
4049
4050 In the 'if' block below, we want to detect cases where
4051 ARG_PACK is argument_pack<PARM_PACK...>. I.e, we want to
4052 check if ARG_PACK is an argument pack which sole element is
4053 the expansion of PARM_PACK. That argument pack is typically
4054 created by template_parm_to_arg when passed a parameter
4055 pack. */
4056
4057 if (arg_pack
4058 && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
4059 && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
4060 {
4061 tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
4062 tree pattern = PACK_EXPANSION_PATTERN (expansion);
4063 /* So we have an argument_pack<P...>. We want to test if P
4064 is actually PARM_PACK. We will not use cp_tree_equal to
4065 test P and PARM_PACK because during type fixup (by
4066 fixup_template_parm) P can be a pre-fixup version of a
4067 type and PARM_PACK be its post-fixup version.
4068 cp_tree_equal would consider them as different even
4069 though we would want to consider them compatible for our
4070 precise purpose here.
4071
4072 Thus we are going to consider that P and PARM_PACK are
4073 compatible if they have the same DECL. */
4074 if ((/* If ARG_PACK is a type parameter pack named by the
4075 same DECL as parm_pack ... */
4076 (TYPE_P (pattern)
4077 && TYPE_P (parm_pack)
4078 && TYPE_NAME (pattern) == TYPE_NAME (parm_pack))
4079 /* ... or if PARM_PACK is a non-type parameter named by the
4080 same DECL as ARG_PACK. Note that PARM_PACK being a
4081 non-type parameter means it's either a PARM_DECL or a
4082 TEMPLATE_PARM_INDEX. */
4083 || (TREE_CODE (pattern) == TEMPLATE_PARM_INDEX
4084 && ((TREE_CODE (parm_pack) == PARM_DECL
4085 && (TEMPLATE_PARM_DECL (pattern)
4086 == TEMPLATE_PARM_DECL (DECL_INITIAL (parm_pack))))
4087 || (TREE_CODE (parm_pack) == TEMPLATE_PARM_INDEX
4088 && (TEMPLATE_PARM_DECL (pattern)
4089 == TEMPLATE_PARM_DECL (parm_pack))))))
4090 && template_parameter_pack_p (pattern))
4091 return true;
4092 }
4093 return false;
4094 }
4095
4096 /* Within the declaration of a template, return all levels of template
4097 parameters that apply. The template parameters are represented as
4098 a TREE_VEC, in the form documented in cp-tree.h for template
4099 arguments. */
4100
4101 static tree
4102 current_template_args (void)
4103 {
4104 tree header;
4105 tree args = NULL_TREE;
4106 int length = TMPL_PARMS_DEPTH (current_template_parms);
4107 int l = length;
4108
4109 /* If there is only one level of template parameters, we do not
4110 create a TREE_VEC of TREE_VECs. Instead, we return a single
4111 TREE_VEC containing the arguments. */
4112 if (length > 1)
4113 args = make_tree_vec (length);
4114
4115 for (header = current_template_parms; header; header = TREE_CHAIN (header))
4116 {
4117 tree a = copy_node (TREE_VALUE (header));
4118 int i;
4119
4120 TREE_TYPE (a) = NULL_TREE;
4121 for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
4122 TREE_VEC_ELT (a, i) = template_parm_to_arg (TREE_VEC_ELT (a, i));
4123
4124 #ifdef ENABLE_CHECKING
4125 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (a, TREE_VEC_LENGTH (a));
4126 #endif
4127
4128 if (length > 1)
4129 TREE_VEC_ELT (args, --l) = a;
4130 else
4131 args = a;
4132 }
4133
4134 if (length > 1 && TREE_VEC_ELT (args, 0) == NULL_TREE)
4135 /* This can happen for template parms of a template template
4136 parameter, e.g:
4137
4138 template<template<class T, class U> class TT> struct S;
4139
4140 Consider the level of the parms of TT; T and U both have
4141 level 2; TT has no template parm of level 1. So in this case
4142 the first element of full_template_args is NULL_TREE. If we
4143 leave it like this TMPL_ARG_DEPTH on args returns 1 instead
4144 of 2. This will make tsubst wrongly consider that T and U
4145 have level 1. Instead, let's create a dummy vector as the
4146 first element of full_template_args so that TMPL_ARG_DEPTH
4147 returns the correct depth for args. */
4148 TREE_VEC_ELT (args, 0) = make_tree_vec (1);
4149 return args;
4150 }
4151
4152 /* Update the declared TYPE by doing any lookups which were thought to be
4153 dependent, but are not now that we know the SCOPE of the declarator. */
4154
4155 tree
4156 maybe_update_decl_type (tree orig_type, tree scope)
4157 {
4158 tree type = orig_type;
4159
4160 if (type == NULL_TREE)
4161 return type;
4162
4163 if (TREE_CODE (orig_type) == TYPE_DECL)
4164 type = TREE_TYPE (type);
4165
4166 if (scope && TYPE_P (scope) && dependent_type_p (scope)
4167 && dependent_type_p (type)
4168 /* Don't bother building up the args in this case. */
4169 && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
4170 {
4171 /* tsubst in the args corresponding to the template parameters,
4172 including auto if present. Most things will be unchanged, but
4173 make_typename_type and tsubst_qualified_id will resolve
4174 TYPENAME_TYPEs and SCOPE_REFs that were previously dependent. */
4175 tree args = current_template_args ();
4176 tree auto_node = type_uses_auto (type);
4177 tree pushed;
4178 if (auto_node)
4179 {
4180 tree auto_vec = make_tree_vec (1);
4181 TREE_VEC_ELT (auto_vec, 0) = auto_node;
4182 args = add_to_template_args (args, auto_vec);
4183 }
4184 pushed = push_scope (scope);
4185 type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
4186 if (pushed)
4187 pop_scope (scope);
4188 }
4189
4190 if (type == error_mark_node)
4191 return orig_type;
4192
4193 if (TREE_CODE (orig_type) == TYPE_DECL)
4194 {
4195 if (same_type_p (type, TREE_TYPE (orig_type)))
4196 type = orig_type;
4197 else
4198 type = TYPE_NAME (type);
4199 }
4200 return type;
4201 }
4202
4203 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
4204 template PARMS. If MEMBER_TEMPLATE_P is true, the new template is
4205 a member template. Used by push_template_decl below. */
4206
4207 static tree
4208 build_template_decl (tree decl, tree parms, bool member_template_p)
4209 {
4210 tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
4211 DECL_TEMPLATE_PARMS (tmpl) = parms;
4212 DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
4213 DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
4214 DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
4215
4216 return tmpl;
4217 }
4218
4219 struct template_parm_data
4220 {
4221 /* The level of the template parameters we are currently
4222 processing. */
4223 int level;
4224
4225 /* The index of the specialization argument we are currently
4226 processing. */
4227 int current_arg;
4228
4229 /* An array whose size is the number of template parameters. The
4230 elements are nonzero if the parameter has been used in any one
4231 of the arguments processed so far. */
4232 int* parms;
4233
4234 /* An array whose size is the number of template arguments. The
4235 elements are nonzero if the argument makes use of template
4236 parameters of this level. */
4237 int* arg_uses_template_parms;
4238 };
4239
4240 /* Subroutine of push_template_decl used to see if each template
4241 parameter in a partial specialization is used in the explicit
4242 argument list. If T is of the LEVEL given in DATA (which is
4243 treated as a template_parm_data*), then DATA->PARMS is marked
4244 appropriately. */
4245
4246 static int
4247 mark_template_parm (tree t, void* data)
4248 {
4249 int level;
4250 int idx;
4251 struct template_parm_data* tpd = (struct template_parm_data*) data;
4252
4253 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4254 {
4255 level = TEMPLATE_PARM_LEVEL (t);
4256 idx = TEMPLATE_PARM_IDX (t);
4257 }
4258 else
4259 {
4260 level = TEMPLATE_TYPE_LEVEL (t);
4261 idx = TEMPLATE_TYPE_IDX (t);
4262 }
4263
4264 if (level == tpd->level)
4265 {
4266 tpd->parms[idx] = 1;
4267 tpd->arg_uses_template_parms[tpd->current_arg] = 1;
4268 }
4269
4270 /* Return zero so that for_each_template_parm will continue the
4271 traversal of the tree; we want to mark *every* template parm. */
4272 return 0;
4273 }
4274
4275 /* Process the partial specialization DECL. */
4276
4277 static tree
4278 process_partial_specialization (tree decl)
4279 {
4280 tree type = TREE_TYPE (decl);
4281 tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
4282 tree specargs = CLASSTYPE_TI_ARGS (type);
4283 tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
4284 tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
4285 tree inner_parms;
4286 tree inst;
4287 int nargs = TREE_VEC_LENGTH (inner_args);
4288 int ntparms;
4289 int i;
4290 bool did_error_intro = false;
4291 struct template_parm_data tpd;
4292 struct template_parm_data tpd2;
4293
4294 gcc_assert (current_template_parms);
4295
4296 inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
4297 ntparms = TREE_VEC_LENGTH (inner_parms);
4298
4299 /* We check that each of the template parameters given in the
4300 partial specialization is used in the argument list to the
4301 specialization. For example:
4302
4303 template <class T> struct S;
4304 template <class T> struct S<T*>;
4305
4306 The second declaration is OK because `T*' uses the template
4307 parameter T, whereas
4308
4309 template <class T> struct S<int>;
4310
4311 is no good. Even trickier is:
4312
4313 template <class T>
4314 struct S1
4315 {
4316 template <class U>
4317 struct S2;
4318 template <class U>
4319 struct S2<T>;
4320 };
4321
4322 The S2<T> declaration is actually invalid; it is a
4323 full-specialization. Of course,
4324
4325 template <class U>
4326 struct S2<T (*)(U)>;
4327
4328 or some such would have been OK. */
4329 tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
4330 tpd.parms = XALLOCAVEC (int, ntparms);
4331 memset (tpd.parms, 0, sizeof (int) * ntparms);
4332
4333 tpd.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4334 memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
4335 for (i = 0; i < nargs; ++i)
4336 {
4337 tpd.current_arg = i;
4338 for_each_template_parm (TREE_VEC_ELT (inner_args, i),
4339 &mark_template_parm,
4340 &tpd,
4341 NULL,
4342 /*include_nondeduced_p=*/false);
4343 }
4344 for (i = 0; i < ntparms; ++i)
4345 if (tpd.parms[i] == 0)
4346 {
4347 /* One of the template parms was not used in the
4348 specialization. */
4349 if (!did_error_intro)
4350 {
4351 error ("template parameters not used in partial specialization:");
4352 did_error_intro = true;
4353 }
4354
4355 error (" %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
4356 }
4357
4358 if (did_error_intro)
4359 return error_mark_node;
4360
4361 /* [temp.class.spec]
4362
4363 The argument list of the specialization shall not be identical to
4364 the implicit argument list of the primary template. */
4365 if (comp_template_args
4366 (inner_args,
4367 INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
4368 (maintmpl)))))
4369 error ("partial specialization %qT does not specialize any template arguments", type);
4370
4371 /* [temp.class.spec]
4372
4373 A partially specialized non-type argument expression shall not
4374 involve template parameters of the partial specialization except
4375 when the argument expression is a simple identifier.
4376
4377 The type of a template parameter corresponding to a specialized
4378 non-type argument shall not be dependent on a parameter of the
4379 specialization.
4380
4381 Also, we verify that pack expansions only occur at the
4382 end of the argument list. */
4383 gcc_assert (nargs == DECL_NTPARMS (maintmpl));
4384 tpd2.parms = 0;
4385 for (i = 0; i < nargs; ++i)
4386 {
4387 tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
4388 tree arg = TREE_VEC_ELT (inner_args, i);
4389 tree packed_args = NULL_TREE;
4390 int j, len = 1;
4391
4392 if (ARGUMENT_PACK_P (arg))
4393 {
4394 /* Extract the arguments from the argument pack. We'll be
4395 iterating over these in the following loop. */
4396 packed_args = ARGUMENT_PACK_ARGS (arg);
4397 len = TREE_VEC_LENGTH (packed_args);
4398 }
4399
4400 for (j = 0; j < len; j++)
4401 {
4402 if (packed_args)
4403 /* Get the Jth argument in the parameter pack. */
4404 arg = TREE_VEC_ELT (packed_args, j);
4405
4406 if (PACK_EXPANSION_P (arg))
4407 {
4408 /* Pack expansions must come at the end of the
4409 argument list. */
4410 if ((packed_args && j < len - 1)
4411 || (!packed_args && i < nargs - 1))
4412 {
4413 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4414 error ("parameter pack argument %qE must be at the "
4415 "end of the template argument list", arg);
4416 else
4417 error ("parameter pack argument %qT must be at the "
4418 "end of the template argument list", arg);
4419 }
4420 }
4421
4422 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4423 /* We only care about the pattern. */
4424 arg = PACK_EXPANSION_PATTERN (arg);
4425
4426 if (/* These first two lines are the `non-type' bit. */
4427 !TYPE_P (arg)
4428 && TREE_CODE (arg) != TEMPLATE_DECL
4429 /* This next line is the `argument expression is not just a
4430 simple identifier' condition and also the `specialized
4431 non-type argument' bit. */
4432 && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
4433 {
4434 if ((!packed_args && tpd.arg_uses_template_parms[i])
4435 || (packed_args && uses_template_parms (arg)))
4436 error ("template argument %qE involves template parameter(s)",
4437 arg);
4438 else
4439 {
4440 /* Look at the corresponding template parameter,
4441 marking which template parameters its type depends
4442 upon. */
4443 tree type = TREE_TYPE (parm);
4444
4445 if (!tpd2.parms)
4446 {
4447 /* We haven't yet initialized TPD2. Do so now. */
4448 tpd2.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4449 /* The number of parameters here is the number in the
4450 main template, which, as checked in the assertion
4451 above, is NARGS. */
4452 tpd2.parms = XALLOCAVEC (int, nargs);
4453 tpd2.level =
4454 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
4455 }
4456
4457 /* Mark the template parameters. But this time, we're
4458 looking for the template parameters of the main
4459 template, not in the specialization. */
4460 tpd2.current_arg = i;
4461 tpd2.arg_uses_template_parms[i] = 0;
4462 memset (tpd2.parms, 0, sizeof (int) * nargs);
4463 for_each_template_parm (type,
4464 &mark_template_parm,
4465 &tpd2,
4466 NULL,
4467 /*include_nondeduced_p=*/false);
4468
4469 if (tpd2.arg_uses_template_parms [i])
4470 {
4471 /* The type depended on some template parameters.
4472 If they are fully specialized in the
4473 specialization, that's OK. */
4474 int j;
4475 int count = 0;
4476 for (j = 0; j < nargs; ++j)
4477 if (tpd2.parms[j] != 0
4478 && tpd.arg_uses_template_parms [j])
4479 ++count;
4480 if (count != 0)
4481 error_n (input_location, count,
4482 "type %qT of template argument %qE depends "
4483 "on a template parameter",
4484 "type %qT of template argument %qE depends "
4485 "on template parameters",
4486 type,
4487 arg);
4488 }
4489 }
4490 }
4491 }
4492 }
4493
4494 /* We should only get here once. */
4495 gcc_assert (!COMPLETE_TYPE_P (type));
4496
4497 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
4498 = tree_cons (specargs, inner_parms,
4499 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
4500 TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
4501
4502 for (inst = DECL_TEMPLATE_INSTANTIATIONS (maintmpl); inst;
4503 inst = TREE_CHAIN (inst))
4504 {
4505 tree inst_type = TREE_VALUE (inst);
4506 if (COMPLETE_TYPE_P (inst_type)
4507 && CLASSTYPE_IMPLICIT_INSTANTIATION (inst_type))
4508 {
4509 tree spec = most_specialized_class (inst_type, maintmpl, tf_none);
4510 if (spec && TREE_TYPE (spec) == type)
4511 permerror (input_location,
4512 "partial specialization of %qT after instantiation "
4513 "of %qT", type, inst_type);
4514 }
4515 }
4516
4517 return decl;
4518 }
4519
4520 /* Check that a template declaration's use of default arguments and
4521 parameter packs is not invalid. Here, PARMS are the template
4522 parameters. IS_PRIMARY is nonzero if DECL is the thing declared by
4523 a primary template. IS_PARTIAL is nonzero if DECL is a partial
4524 specialization.
4525
4526
4527 IS_FRIEND_DECL is nonzero if DECL is a friend function template
4528 declaration (but not a definition); 1 indicates a declaration, 2
4529 indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
4530 emitted for extraneous default arguments.
4531
4532 Returns TRUE if there were no errors found, FALSE otherwise. */
4533
4534 bool
4535 check_default_tmpl_args (tree decl, tree parms, int is_primary,
4536 int is_partial, int is_friend_decl)
4537 {
4538 const char *msg;
4539 int last_level_to_check;
4540 tree parm_level;
4541 bool no_errors = true;
4542
4543 /* [temp.param]
4544
4545 A default template-argument shall not be specified in a
4546 function template declaration or a function template definition, nor
4547 in the template-parameter-list of the definition of a member of a
4548 class template. */
4549
4550 if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
4551 /* You can't have a function template declaration in a local
4552 scope, nor you can you define a member of a class template in a
4553 local scope. */
4554 return true;
4555
4556 if (current_class_type
4557 && !TYPE_BEING_DEFINED (current_class_type)
4558 && DECL_LANG_SPECIFIC (decl)
4559 && DECL_DECLARES_FUNCTION_P (decl)
4560 /* If this is either a friend defined in the scope of the class
4561 or a member function. */
4562 && (DECL_FUNCTION_MEMBER_P (decl)
4563 ? same_type_p (DECL_CONTEXT (decl), current_class_type)
4564 : DECL_FRIEND_CONTEXT (decl)
4565 ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
4566 : false)
4567 /* And, if it was a member function, it really was defined in
4568 the scope of the class. */
4569 && (!DECL_FUNCTION_MEMBER_P (decl)
4570 || DECL_INITIALIZED_IN_CLASS_P (decl)))
4571 /* We already checked these parameters when the template was
4572 declared, so there's no need to do it again now. This function
4573 was defined in class scope, but we're processing it's body now
4574 that the class is complete. */
4575 return true;
4576
4577 /* Core issue 226 (C++0x only): the following only applies to class
4578 templates. */
4579 if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
4580 {
4581 /* [temp.param]
4582
4583 If a template-parameter has a default template-argument, all
4584 subsequent template-parameters shall have a default
4585 template-argument supplied. */
4586 for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
4587 {
4588 tree inner_parms = TREE_VALUE (parm_level);
4589 int ntparms = TREE_VEC_LENGTH (inner_parms);
4590 int seen_def_arg_p = 0;
4591 int i;
4592
4593 for (i = 0; i < ntparms; ++i)
4594 {
4595 tree parm = TREE_VEC_ELT (inner_parms, i);
4596
4597 if (parm == error_mark_node)
4598 continue;
4599
4600 if (TREE_PURPOSE (parm))
4601 seen_def_arg_p = 1;
4602 else if (seen_def_arg_p
4603 && !template_parameter_pack_p (TREE_VALUE (parm)))
4604 {
4605 error ("no default argument for %qD", TREE_VALUE (parm));
4606 /* For better subsequent error-recovery, we indicate that
4607 there should have been a default argument. */
4608 TREE_PURPOSE (parm) = error_mark_node;
4609 no_errors = false;
4610 }
4611 else if (is_primary
4612 && !is_partial
4613 && !is_friend_decl
4614 /* Don't complain about an enclosing partial
4615 specialization. */
4616 && parm_level == parms
4617 && TREE_CODE (decl) == TYPE_DECL
4618 && i < ntparms - 1
4619 && template_parameter_pack_p (TREE_VALUE (parm)))
4620 {
4621 /* A primary class template can only have one
4622 parameter pack, at the end of the template
4623 parameter list. */
4624
4625 if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
4626 error ("parameter pack %qE must be at the end of the"
4627 " template parameter list", TREE_VALUE (parm));
4628 else
4629 error ("parameter pack %qT must be at the end of the"
4630 " template parameter list",
4631 TREE_TYPE (TREE_VALUE (parm)));
4632
4633 TREE_VALUE (TREE_VEC_ELT (inner_parms, i))
4634 = error_mark_node;
4635 no_errors = false;
4636 }
4637 }
4638 }
4639 }
4640
4641 if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
4642 || is_partial
4643 || !is_primary
4644 || is_friend_decl)
4645 /* For an ordinary class template, default template arguments are
4646 allowed at the innermost level, e.g.:
4647 template <class T = int>
4648 struct S {};
4649 but, in a partial specialization, they're not allowed even
4650 there, as we have in [temp.class.spec]:
4651
4652 The template parameter list of a specialization shall not
4653 contain default template argument values.
4654
4655 So, for a partial specialization, or for a function template
4656 (in C++98/C++03), we look at all of them. */
4657 ;
4658 else
4659 /* But, for a primary class template that is not a partial
4660 specialization we look at all template parameters except the
4661 innermost ones. */
4662 parms = TREE_CHAIN (parms);
4663
4664 /* Figure out what error message to issue. */
4665 if (is_friend_decl == 2)
4666 msg = G_("default template arguments may not be used in function template "
4667 "friend re-declaration");
4668 else if (is_friend_decl)
4669 msg = G_("default template arguments may not be used in function template "
4670 "friend declarations");
4671 else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
4672 msg = G_("default template arguments may not be used in function templates "
4673 "without -std=c++11 or -std=gnu++11");
4674 else if (is_partial)
4675 msg = G_("default template arguments may not be used in "
4676 "partial specializations");
4677 else
4678 msg = G_("default argument for template parameter for class enclosing %qD");
4679
4680 if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
4681 /* If we're inside a class definition, there's no need to
4682 examine the parameters to the class itself. On the one
4683 hand, they will be checked when the class is defined, and,
4684 on the other, default arguments are valid in things like:
4685 template <class T = double>
4686 struct S { template <class U> void f(U); };
4687 Here the default argument for `S' has no bearing on the
4688 declaration of `f'. */
4689 last_level_to_check = template_class_depth (current_class_type) + 1;
4690 else
4691 /* Check everything. */
4692 last_level_to_check = 0;
4693
4694 for (parm_level = parms;
4695 parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
4696 parm_level = TREE_CHAIN (parm_level))
4697 {
4698 tree inner_parms = TREE_VALUE (parm_level);
4699 int i;
4700 int ntparms;
4701
4702 ntparms = TREE_VEC_LENGTH (inner_parms);
4703 for (i = 0; i < ntparms; ++i)
4704 {
4705 if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
4706 continue;
4707
4708 if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
4709 {
4710 if (msg)
4711 {
4712 no_errors = false;
4713 if (is_friend_decl == 2)
4714 return no_errors;
4715
4716 error (msg, decl);
4717 msg = 0;
4718 }
4719
4720 /* Clear out the default argument so that we are not
4721 confused later. */
4722 TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
4723 }
4724 }
4725
4726 /* At this point, if we're still interested in issuing messages,
4727 they must apply to classes surrounding the object declared. */
4728 if (msg)
4729 msg = G_("default argument for template parameter for class "
4730 "enclosing %qD");
4731 }
4732
4733 return no_errors;
4734 }
4735
4736 /* Worker for push_template_decl_real, called via
4737 for_each_template_parm. DATA is really an int, indicating the
4738 level of the parameters we are interested in. If T is a template
4739 parameter of that level, return nonzero. */
4740
4741 static int
4742 template_parm_this_level_p (tree t, void* data)
4743 {
4744 int this_level = *(int *)data;
4745 int level;
4746
4747 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4748 level = TEMPLATE_PARM_LEVEL (t);
4749 else
4750 level = TEMPLATE_TYPE_LEVEL (t);
4751 return level == this_level;
4752 }
4753
4754 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
4755 parameters given by current_template_args, or reuses a
4756 previously existing one, if appropriate. Returns the DECL, or an
4757 equivalent one, if it is replaced via a call to duplicate_decls.
4758
4759 If IS_FRIEND is true, DECL is a friend declaration. */
4760
4761 tree
4762 push_template_decl_real (tree decl, bool is_friend)
4763 {
4764 tree tmpl;
4765 tree args;
4766 tree info;
4767 tree ctx;
4768 int primary;
4769 int is_partial;
4770 int new_template_p = 0;
4771 /* True if the template is a member template, in the sense of
4772 [temp.mem]. */
4773 bool member_template_p = false;
4774
4775 if (decl == error_mark_node || !current_template_parms)
4776 return error_mark_node;
4777
4778 /* See if this is a partial specialization. */
4779 is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
4780 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
4781 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
4782
4783 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
4784 is_friend = true;
4785
4786 if (is_friend)
4787 /* For a friend, we want the context of the friend function, not
4788 the type of which it is a friend. */
4789 ctx = CP_DECL_CONTEXT (decl);
4790 else if (CP_DECL_CONTEXT (decl)
4791 && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4792 /* In the case of a virtual function, we want the class in which
4793 it is defined. */
4794 ctx = CP_DECL_CONTEXT (decl);
4795 else
4796 /* Otherwise, if we're currently defining some class, the DECL
4797 is assumed to be a member of the class. */
4798 ctx = current_scope ();
4799
4800 if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
4801 ctx = NULL_TREE;
4802
4803 if (!DECL_CONTEXT (decl))
4804 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
4805
4806 /* See if this is a primary template. */
4807 if (is_friend && ctx)
4808 /* A friend template that specifies a class context, i.e.
4809 template <typename T> friend void A<T>::f();
4810 is not primary. */
4811 primary = 0;
4812 else
4813 primary = template_parm_scope_p ();
4814
4815 if (primary)
4816 {
4817 if (DECL_CLASS_SCOPE_P (decl))
4818 member_template_p = true;
4819 if (TREE_CODE (decl) == TYPE_DECL
4820 && ANON_AGGRNAME_P (DECL_NAME (decl)))
4821 {
4822 error ("template class without a name");
4823 return error_mark_node;
4824 }
4825 else if (TREE_CODE (decl) == FUNCTION_DECL)
4826 {
4827 if (DECL_DESTRUCTOR_P (decl))
4828 {
4829 /* [temp.mem]
4830
4831 A destructor shall not be a member template. */
4832 error ("destructor %qD declared as member template", decl);
4833 return error_mark_node;
4834 }
4835 if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
4836 && (!prototype_p (TREE_TYPE (decl))
4837 || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
4838 || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
4839 || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
4840 == void_list_node)))
4841 {
4842 /* [basic.stc.dynamic.allocation]
4843
4844 An allocation function can be a function
4845 template. ... Template allocation functions shall
4846 have two or more parameters. */
4847 error ("invalid template declaration of %qD", decl);
4848 return error_mark_node;
4849 }
4850 }
4851 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4852 && CLASS_TYPE_P (TREE_TYPE (decl)))
4853 /* OK */;
4854 else if (TREE_CODE (decl) == TYPE_DECL
4855 && TYPE_DECL_ALIAS_P (decl))
4856 /* alias-declaration */
4857 gcc_assert (!DECL_ARTIFICIAL (decl));
4858 else
4859 {
4860 error ("template declaration of %q#D", decl);
4861 return error_mark_node;
4862 }
4863 }
4864
4865 /* Check to see that the rules regarding the use of default
4866 arguments are not being violated. */
4867 check_default_tmpl_args (decl, current_template_parms,
4868 primary, is_partial, /*is_friend_decl=*/0);
4869
4870 /* Ensure that there are no parameter packs in the type of this
4871 declaration that have not been expanded. */
4872 if (TREE_CODE (decl) == FUNCTION_DECL)
4873 {
4874 /* Check each of the arguments individually to see if there are
4875 any bare parameter packs. */
4876 tree type = TREE_TYPE (decl);
4877 tree arg = DECL_ARGUMENTS (decl);
4878 tree argtype = TYPE_ARG_TYPES (type);
4879
4880 while (arg && argtype)
4881 {
4882 if (!FUNCTION_PARAMETER_PACK_P (arg)
4883 && check_for_bare_parameter_packs (TREE_TYPE (arg)))
4884 {
4885 /* This is a PARM_DECL that contains unexpanded parameter
4886 packs. We have already complained about this in the
4887 check_for_bare_parameter_packs call, so just replace
4888 these types with ERROR_MARK_NODE. */
4889 TREE_TYPE (arg) = error_mark_node;
4890 TREE_VALUE (argtype) = error_mark_node;
4891 }
4892
4893 arg = DECL_CHAIN (arg);
4894 argtype = TREE_CHAIN (argtype);
4895 }
4896
4897 /* Check for bare parameter packs in the return type and the
4898 exception specifiers. */
4899 if (check_for_bare_parameter_packs (TREE_TYPE (type)))
4900 /* Errors were already issued, set return type to int
4901 as the frontend doesn't expect error_mark_node as
4902 the return type. */
4903 TREE_TYPE (type) = integer_type_node;
4904 if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
4905 TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
4906 }
4907 else if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
4908 {
4909 TREE_TYPE (decl) = error_mark_node;
4910 return error_mark_node;
4911 }
4912
4913 if (is_partial)
4914 return process_partial_specialization (decl);
4915
4916 args = current_template_args ();
4917
4918 if (!ctx
4919 || TREE_CODE (ctx) == FUNCTION_DECL
4920 || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
4921 || (is_friend && !DECL_TEMPLATE_INFO (decl)))
4922 {
4923 if (DECL_LANG_SPECIFIC (decl)
4924 && DECL_TEMPLATE_INFO (decl)
4925 && DECL_TI_TEMPLATE (decl))
4926 tmpl = DECL_TI_TEMPLATE (decl);
4927 /* If DECL is a TYPE_DECL for a class-template, then there won't
4928 be DECL_LANG_SPECIFIC. The information equivalent to
4929 DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead. */
4930 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4931 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
4932 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
4933 {
4934 /* Since a template declaration already existed for this
4935 class-type, we must be redeclaring it here. Make sure
4936 that the redeclaration is valid. */
4937 redeclare_class_template (TREE_TYPE (decl),
4938 current_template_parms);
4939 /* We don't need to create a new TEMPLATE_DECL; just use the
4940 one we already had. */
4941 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
4942 }
4943 else
4944 {
4945 tmpl = build_template_decl (decl, current_template_parms,
4946 member_template_p);
4947 new_template_p = 1;
4948
4949 if (DECL_LANG_SPECIFIC (decl)
4950 && DECL_TEMPLATE_SPECIALIZATION (decl))
4951 {
4952 /* A specialization of a member template of a template
4953 class. */
4954 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4955 DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
4956 DECL_TEMPLATE_INFO (decl) = NULL_TREE;
4957 }
4958 }
4959 }
4960 else
4961 {
4962 tree a, t, current, parms;
4963 int i;
4964 tree tinfo = get_template_info (decl);
4965
4966 if (!tinfo)
4967 {
4968 error ("template definition of non-template %q#D", decl);
4969 return error_mark_node;
4970 }
4971
4972 tmpl = TI_TEMPLATE (tinfo);
4973
4974 if (DECL_FUNCTION_TEMPLATE_P (tmpl)
4975 && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
4976 && DECL_TEMPLATE_SPECIALIZATION (decl)
4977 && DECL_MEMBER_TEMPLATE_P (tmpl))
4978 {
4979 tree new_tmpl;
4980
4981 /* The declaration is a specialization of a member
4982 template, declared outside the class. Therefore, the
4983 innermost template arguments will be NULL, so we
4984 replace them with the arguments determined by the
4985 earlier call to check_explicit_specialization. */
4986 args = DECL_TI_ARGS (decl);
4987
4988 new_tmpl
4989 = build_template_decl (decl, current_template_parms,
4990 member_template_p);
4991 DECL_TEMPLATE_RESULT (new_tmpl) = decl;
4992 TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
4993 DECL_TI_TEMPLATE (decl) = new_tmpl;
4994 SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
4995 DECL_TEMPLATE_INFO (new_tmpl)
4996 = build_template_info (tmpl, args);
4997
4998 register_specialization (new_tmpl,
4999 most_general_template (tmpl),
5000 args,
5001 is_friend, 0);
5002 return decl;
5003 }
5004
5005 /* Make sure the template headers we got make sense. */
5006
5007 parms = DECL_TEMPLATE_PARMS (tmpl);
5008 i = TMPL_PARMS_DEPTH (parms);
5009 if (TMPL_ARGS_DEPTH (args) != i)
5010 {
5011 error ("expected %d levels of template parms for %q#D, got %d",
5012 i, decl, TMPL_ARGS_DEPTH (args));
5013 }
5014 else
5015 for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
5016 {
5017 a = TMPL_ARGS_LEVEL (args, i);
5018 t = INNERMOST_TEMPLATE_PARMS (parms);
5019
5020 if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
5021 {
5022 if (current == decl)
5023 error ("got %d template parameters for %q#D",
5024 TREE_VEC_LENGTH (a), decl);
5025 else
5026 error ("got %d template parameters for %q#T",
5027 TREE_VEC_LENGTH (a), current);
5028 error (" but %d required", TREE_VEC_LENGTH (t));
5029 return error_mark_node;
5030 }
5031
5032 if (current == decl)
5033 current = ctx;
5034 else if (current == NULL_TREE)
5035 /* Can happen in erroneous input. */
5036 break;
5037 else
5038 current = (TYPE_P (current)
5039 ? TYPE_CONTEXT (current)
5040 : DECL_CONTEXT (current));
5041 }
5042
5043 /* Check that the parms are used in the appropriate qualifying scopes
5044 in the declarator. */
5045 if (!comp_template_args
5046 (TI_ARGS (tinfo),
5047 TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
5048 {
5049 error ("\
5050 template arguments to %qD do not match original template %qD",
5051 decl, DECL_TEMPLATE_RESULT (tmpl));
5052 if (!uses_template_parms (TI_ARGS (tinfo)))
5053 inform (input_location, "use template<> for an explicit specialization");
5054 /* Avoid crash in import_export_decl. */
5055 DECL_INTERFACE_KNOWN (decl) = 1;
5056 return error_mark_node;
5057 }
5058 }
5059
5060 DECL_TEMPLATE_RESULT (tmpl) = decl;
5061 TREE_TYPE (tmpl) = TREE_TYPE (decl);
5062
5063 /* Push template declarations for global functions and types. Note
5064 that we do not try to push a global template friend declared in a
5065 template class; such a thing may well depend on the template
5066 parameters of the class. */
5067 if (new_template_p && !ctx
5068 && !(is_friend && template_class_depth (current_class_type) > 0))
5069 {
5070 tmpl = pushdecl_namespace_level (tmpl, is_friend);
5071 if (tmpl == error_mark_node)
5072 return error_mark_node;
5073
5074 /* Hide template friend classes that haven't been declared yet. */
5075 if (is_friend && TREE_CODE (decl) == TYPE_DECL)
5076 {
5077 DECL_ANTICIPATED (tmpl) = 1;
5078 DECL_FRIEND_P (tmpl) = 1;
5079 }
5080 }
5081
5082 if (primary)
5083 {
5084 tree parms = DECL_TEMPLATE_PARMS (tmpl);
5085 int i;
5086
5087 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
5088 if (DECL_CONV_FN_P (tmpl))
5089 {
5090 int depth = TMPL_PARMS_DEPTH (parms);
5091
5092 /* It is a conversion operator. See if the type converted to
5093 depends on innermost template operands. */
5094
5095 if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
5096 depth))
5097 DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
5098 }
5099
5100 /* Give template template parms a DECL_CONTEXT of the template
5101 for which they are a parameter. */
5102 parms = INNERMOST_TEMPLATE_PARMS (parms);
5103 for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
5104 {
5105 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5106 if (TREE_CODE (parm) == TEMPLATE_DECL)
5107 DECL_CONTEXT (parm) = tmpl;
5108 }
5109 }
5110
5111 /* The DECL_TI_ARGS of DECL contains full set of arguments referring
5112 back to its most general template. If TMPL is a specialization,
5113 ARGS may only have the innermost set of arguments. Add the missing
5114 argument levels if necessary. */
5115 if (DECL_TEMPLATE_INFO (tmpl))
5116 args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
5117
5118 info = build_template_info (tmpl, args);
5119
5120 if (DECL_IMPLICIT_TYPEDEF_P (decl))
5121 SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
5122 else
5123 {
5124 if (primary && !DECL_LANG_SPECIFIC (decl))
5125 retrofit_lang_decl (decl);
5126 if (DECL_LANG_SPECIFIC (decl))
5127 DECL_TEMPLATE_INFO (decl) = info;
5128 }
5129
5130 return DECL_TEMPLATE_RESULT (tmpl);
5131 }
5132
5133 tree
5134 push_template_decl (tree decl)
5135 {
5136 return push_template_decl_real (decl, false);
5137 }
5138
5139 /* Called when a class template TYPE is redeclared with the indicated
5140 template PARMS, e.g.:
5141
5142 template <class T> struct S;
5143 template <class T> struct S {}; */
5144
5145 bool
5146 redeclare_class_template (tree type, tree parms)
5147 {
5148 tree tmpl;
5149 tree tmpl_parms;
5150 int i;
5151
5152 if (!TYPE_TEMPLATE_INFO (type))
5153 {
5154 error ("%qT is not a template type", type);
5155 return false;
5156 }
5157
5158 tmpl = TYPE_TI_TEMPLATE (type);
5159 if (!PRIMARY_TEMPLATE_P (tmpl))
5160 /* The type is nested in some template class. Nothing to worry
5161 about here; there are no new template parameters for the nested
5162 type. */
5163 return true;
5164
5165 if (!parms)
5166 {
5167 error ("template specifiers not specified in declaration of %qD",
5168 tmpl);
5169 return false;
5170 }
5171
5172 parms = INNERMOST_TEMPLATE_PARMS (parms);
5173 tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
5174
5175 if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
5176 {
5177 error_n (input_location, TREE_VEC_LENGTH (parms),
5178 "redeclared with %d template parameter",
5179 "redeclared with %d template parameters",
5180 TREE_VEC_LENGTH (parms));
5181 inform_n (input_location, TREE_VEC_LENGTH (tmpl_parms),
5182 "previous declaration %q+D used %d template parameter",
5183 "previous declaration %q+D used %d template parameters",
5184 tmpl, TREE_VEC_LENGTH (tmpl_parms));
5185 return false;
5186 }
5187
5188 for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
5189 {
5190 tree tmpl_parm;
5191 tree parm;
5192 tree tmpl_default;
5193 tree parm_default;
5194
5195 if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
5196 || TREE_VEC_ELT (parms, i) == error_mark_node)
5197 continue;
5198
5199 tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
5200 if (tmpl_parm == error_mark_node)
5201 return false;
5202
5203 parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5204 tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
5205 parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
5206
5207 /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
5208 TEMPLATE_DECL. */
5209 if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
5210 || (TREE_CODE (tmpl_parm) != TYPE_DECL
5211 && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
5212 || (TREE_CODE (tmpl_parm) != PARM_DECL
5213 && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
5214 != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
5215 || (TREE_CODE (tmpl_parm) == PARM_DECL
5216 && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
5217 != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))))
5218 {
5219 error ("template parameter %q+#D", tmpl_parm);
5220 error ("redeclared here as %q#D", parm);
5221 return false;
5222 }
5223
5224 if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
5225 {
5226 /* We have in [temp.param]:
5227
5228 A template-parameter may not be given default arguments
5229 by two different declarations in the same scope. */
5230 error_at (input_location, "redefinition of default argument for %q#D", parm);
5231 inform (DECL_SOURCE_LOCATION (tmpl_parm),
5232 "original definition appeared here");
5233 return false;
5234 }
5235
5236 if (parm_default != NULL_TREE)
5237 /* Update the previous template parameters (which are the ones
5238 that will really count) with the new default value. */
5239 TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
5240 else if (tmpl_default != NULL_TREE)
5241 /* Update the new parameters, too; they'll be used as the
5242 parameters for any members. */
5243 TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
5244 }
5245
5246 return true;
5247 }
5248
5249 /* Simplify EXPR if it is a non-dependent expression. Returns the
5250 (possibly simplified) expression. */
5251
5252 static tree
5253 fold_non_dependent_expr_sfinae (tree expr, tsubst_flags_t complain)
5254 {
5255 if (expr == NULL_TREE)
5256 return NULL_TREE;
5257
5258 /* If we're in a template, but EXPR isn't value dependent, simplify
5259 it. We're supposed to treat:
5260
5261 template <typename T> void f(T[1 + 1]);
5262 template <typename T> void f(T[2]);
5263
5264 as two declarations of the same function, for example. */
5265 if (processing_template_decl
5266 && !type_dependent_expression_p (expr)
5267 && potential_constant_expression (expr)
5268 && !value_dependent_expression_p (expr))
5269 {
5270 HOST_WIDE_INT saved_processing_template_decl;
5271
5272 saved_processing_template_decl = processing_template_decl;
5273 processing_template_decl = 0;
5274 expr = tsubst_copy_and_build (expr,
5275 /*args=*/NULL_TREE,
5276 complain,
5277 /*in_decl=*/NULL_TREE,
5278 /*function_p=*/false,
5279 /*integral_constant_expression_p=*/true);
5280 processing_template_decl = saved_processing_template_decl;
5281 }
5282 return expr;
5283 }
5284
5285 tree
5286 fold_non_dependent_expr (tree expr)
5287 {
5288 return fold_non_dependent_expr_sfinae (expr, tf_error);
5289 }
5290
5291 /* Return TRUE iff T is a type alias, a TEMPLATE_DECL for an alias
5292 template declaration, or a TYPE_DECL for an alias declaration. */
5293
5294 bool
5295 alias_type_or_template_p (tree t)
5296 {
5297 if (t == NULL_TREE)
5298 return false;
5299 return ((TREE_CODE (t) == TYPE_DECL && TYPE_DECL_ALIAS_P (t))
5300 || (TYPE_P (t)
5301 && TYPE_NAME (t)
5302 && TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
5303 || DECL_ALIAS_TEMPLATE_P (t));
5304 }
5305
5306 /* Return TRUE iff is a specialization of an alias template. */
5307
5308 bool
5309 alias_template_specialization_p (tree t)
5310 {
5311 if (t == NULL_TREE)
5312 return false;
5313 return (primary_template_instantiation_p (t)
5314 && DECL_ALIAS_TEMPLATE_P (TYPE_TI_TEMPLATE (t)));
5315 }
5316
5317 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
5318 must be a function or a pointer-to-function type, as specified
5319 in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
5320 and check that the resulting function has external linkage. */
5321
5322 static tree
5323 convert_nontype_argument_function (tree type, tree expr)
5324 {
5325 tree fns = expr;
5326 tree fn, fn_no_ptr;
5327
5328 fn = instantiate_type (type, fns, tf_none);
5329 if (fn == error_mark_node)
5330 return error_mark_node;
5331
5332 fn_no_ptr = fn;
5333 if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
5334 fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
5335 if (BASELINK_P (fn_no_ptr))
5336 fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
5337
5338 /* [temp.arg.nontype]/1
5339
5340 A template-argument for a non-type, non-template template-parameter
5341 shall be one of:
5342 [...]
5343 -- the address of an object or function with external linkage. */
5344 if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
5345 {
5346 error ("%qE is not a valid template argument for type %qT "
5347 "because function %qD has not external linkage",
5348 expr, type, fn_no_ptr);
5349 return NULL_TREE;
5350 }
5351
5352 return fn;
5353 }
5354
5355 /* Subroutine of convert_nontype_argument.
5356 Check if EXPR of type TYPE is a valid pointer-to-member constant.
5357 Emit an error otherwise. */
5358
5359 static bool
5360 check_valid_ptrmem_cst_expr (tree type, tree expr,
5361 tsubst_flags_t complain)
5362 {
5363 STRIP_NOPS (expr);
5364 if (expr && (null_ptr_cst_p (expr) || TREE_CODE (expr) == PTRMEM_CST))
5365 return true;
5366 if (cxx_dialect >= cxx0x && null_member_pointer_value_p (expr))
5367 return true;
5368 if (complain & tf_error)
5369 {
5370 error ("%qE is not a valid template argument for type %qT",
5371 expr, type);
5372 error ("it must be a pointer-to-member of the form %<&X::Y%>");
5373 }
5374 return false;
5375 }
5376
5377 /* Returns TRUE iff the address of OP is value-dependent.
5378
5379 14.6.2.4 [temp.dep.temp]:
5380 A non-integral non-type template-argument is dependent if its type is
5381 dependent or it has either of the following forms
5382 qualified-id
5383 & qualified-id
5384 and contains a nested-name-specifier which specifies a class-name that
5385 names a dependent type.
5386
5387 We generalize this to just say that the address of a member of a
5388 dependent class is value-dependent; the above doesn't cover the
5389 address of a static data member named with an unqualified-id. */
5390
5391 static bool
5392 has_value_dependent_address (tree op)
5393 {
5394 /* We could use get_inner_reference here, but there's no need;
5395 this is only relevant for template non-type arguments, which
5396 can only be expressed as &id-expression. */
5397 if (DECL_P (op))
5398 {
5399 tree ctx = CP_DECL_CONTEXT (op);
5400 if (TYPE_P (ctx) && dependent_type_p (ctx))
5401 return true;
5402 }
5403
5404 return false;
5405 }
5406
5407 /* The next set of functions are used for providing helpful explanatory
5408 diagnostics for failed overload resolution. Their messages should be
5409 indented by two spaces for consistency with the messages in
5410 call.c */
5411
5412 static int
5413 unify_success (bool explain_p ATTRIBUTE_UNUSED)
5414 {
5415 return 0;
5416 }
5417
5418 static int
5419 unify_parameter_deduction_failure (bool explain_p, tree parm)
5420 {
5421 if (explain_p)
5422 inform (input_location,
5423 " couldn't deduce template parameter %qD", parm);
5424 return 1;
5425 }
5426
5427 static int
5428 unify_invalid (bool explain_p ATTRIBUTE_UNUSED)
5429 {
5430 return 1;
5431 }
5432
5433 static int
5434 unify_cv_qual_mismatch (bool explain_p, tree parm, tree arg)
5435 {
5436 if (explain_p)
5437 inform (input_location,
5438 " types %qT and %qT have incompatible cv-qualifiers",
5439 parm, arg);
5440 return 1;
5441 }
5442
5443 static int
5444 unify_type_mismatch (bool explain_p, tree parm, tree arg)
5445 {
5446 if (explain_p)
5447 inform (input_location, " mismatched types %qT and %qT", parm, arg);
5448 return 1;
5449 }
5450
5451 static int
5452 unify_parameter_pack_mismatch (bool explain_p, tree parm, tree arg)
5453 {
5454 if (explain_p)
5455 inform (input_location,
5456 " template parameter %qD is not a parameter pack, but "
5457 "argument %qD is",
5458 parm, arg);
5459 return 1;
5460 }
5461
5462 static int
5463 unify_ptrmem_cst_mismatch (bool explain_p, tree parm, tree arg)
5464 {
5465 if (explain_p)
5466 inform (input_location,
5467 " template argument %qE does not match "
5468 "pointer-to-member constant %qE",
5469 arg, parm);
5470 return 1;
5471 }
5472
5473 static int
5474 unify_expression_unequal (bool explain_p, tree parm, tree arg)
5475 {
5476 if (explain_p)
5477 inform (input_location, " %qE is not equivalent to %qE", parm, arg);
5478 return 1;
5479 }
5480
5481 static int
5482 unify_parameter_pack_inconsistent (bool explain_p, tree old_arg, tree new_arg)
5483 {
5484 if (explain_p)
5485 inform (input_location,
5486 " inconsistent parameter pack deduction with %qT and %qT",
5487 old_arg, new_arg);
5488 return 1;
5489 }
5490
5491 static int
5492 unify_inconsistency (bool explain_p, tree parm, tree first, tree second)
5493 {
5494 if (explain_p)
5495 inform (input_location,
5496 " deduced conflicting types for parameter %qT (%qT and %qT)",
5497 parm, first, second);
5498 return 1;
5499 }
5500
5501 static int
5502 unify_vla_arg (bool explain_p, tree arg)
5503 {
5504 if (explain_p)
5505 inform (input_location,
5506 " variable-sized array type %qT is not "
5507 "a valid template argument",
5508 arg);
5509 return 1;
5510 }
5511
5512 static int
5513 unify_method_type_error (bool explain_p, tree arg)
5514 {
5515 if (explain_p)
5516 inform (input_location,
5517 " member function type %qT is not a valid template argument",
5518 arg);
5519 return 1;
5520 }
5521
5522 static int
5523 unify_arity (bool explain_p, int have, int wanted)
5524 {
5525 if (explain_p)
5526 inform_n (input_location, wanted,
5527 " candidate expects %d argument, %d provided",
5528 " candidate expects %d arguments, %d provided",
5529 wanted, have);
5530 return 1;
5531 }
5532
5533 static int
5534 unify_too_many_arguments (bool explain_p, int have, int wanted)
5535 {
5536 return unify_arity (explain_p, have, wanted);
5537 }
5538
5539 static int
5540 unify_too_few_arguments (bool explain_p, int have, int wanted)
5541 {
5542 return unify_arity (explain_p, have, wanted);
5543 }
5544
5545 static int
5546 unify_arg_conversion (bool explain_p, tree to_type,
5547 tree from_type, tree arg)
5548 {
5549 if (explain_p)
5550 inform (input_location, " cannot convert %qE (type %qT) to type %qT",
5551 arg, from_type, to_type);
5552 return 1;
5553 }
5554
5555 static int
5556 unify_no_common_base (bool explain_p, enum template_base_result r,
5557 tree parm, tree arg)
5558 {
5559 if (explain_p)
5560 switch (r)
5561 {
5562 case tbr_ambiguous_baseclass:
5563 inform (input_location, " %qT is an ambiguous base class of %qT",
5564 arg, parm);
5565 break;
5566 default:
5567 inform (input_location, " %qT is not derived from %qT", arg, parm);
5568 break;
5569 }
5570 return 1;
5571 }
5572
5573 static int
5574 unify_inconsistent_template_template_parameters (bool explain_p)
5575 {
5576 if (explain_p)
5577 inform (input_location,
5578 " template parameters of a template template argument are "
5579 "inconsistent with other deduced template arguments");
5580 return 1;
5581 }
5582
5583 static int
5584 unify_template_deduction_failure (bool explain_p, tree parm, tree arg)
5585 {
5586 if (explain_p)
5587 inform (input_location,
5588 " can't deduce a template for %qT from non-template type %qT",
5589 parm, arg);
5590 return 1;
5591 }
5592
5593 static int
5594 unify_template_argument_mismatch (bool explain_p, tree parm, tree arg)
5595 {
5596 if (explain_p)
5597 inform (input_location,
5598 " template argument %qE does not match %qD", arg, parm);
5599 return 1;
5600 }
5601
5602 static int
5603 unify_overload_resolution_failure (bool explain_p, tree arg)
5604 {
5605 if (explain_p)
5606 inform (input_location,
5607 " could not resolve address from overloaded function %qE",
5608 arg);
5609 return 1;
5610 }
5611
5612 /* Attempt to convert the non-type template parameter EXPR to the
5613 indicated TYPE. If the conversion is successful, return the
5614 converted value. If the conversion is unsuccessful, return
5615 NULL_TREE if we issued an error message, or error_mark_node if we
5616 did not. We issue error messages for out-and-out bad template
5617 parameters, but not simply because the conversion failed, since we
5618 might be just trying to do argument deduction. Both TYPE and EXPR
5619 must be non-dependent.
5620
5621 The conversion follows the special rules described in
5622 [temp.arg.nontype], and it is much more strict than an implicit
5623 conversion.
5624
5625 This function is called twice for each template argument (see
5626 lookup_template_class for a more accurate description of this
5627 problem). This means that we need to handle expressions which
5628 are not valid in a C++ source, but can be created from the
5629 first call (for instance, casts to perform conversions). These
5630 hacks can go away after we fix the double coercion problem. */
5631
5632 static tree
5633 convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
5634 {
5635 tree expr_type;
5636
5637 /* Detect immediately string literals as invalid non-type argument.
5638 This special-case is not needed for correctness (we would easily
5639 catch this later), but only to provide better diagnostic for this
5640 common user mistake. As suggested by DR 100, we do not mention
5641 linkage issues in the diagnostic as this is not the point. */
5642 /* FIXME we're making this OK. */
5643 if (TREE_CODE (expr) == STRING_CST)
5644 {
5645 if (complain & tf_error)
5646 error ("%qE is not a valid template argument for type %qT "
5647 "because string literals can never be used in this context",
5648 expr, type);
5649 return NULL_TREE;
5650 }
5651
5652 /* Add the ADDR_EXPR now for the benefit of
5653 value_dependent_expression_p. */
5654 if (TYPE_PTROBV_P (type)
5655 && TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE)
5656 expr = decay_conversion (expr);
5657
5658 /* If we are in a template, EXPR may be non-dependent, but still
5659 have a syntactic, rather than semantic, form. For example, EXPR
5660 might be a SCOPE_REF, rather than the VAR_DECL to which the
5661 SCOPE_REF refers. Preserving the qualifying scope is necessary
5662 so that access checking can be performed when the template is
5663 instantiated -- but here we need the resolved form so that we can
5664 convert the argument. */
5665 if (TYPE_REF_OBJ_P (type)
5666 && has_value_dependent_address (expr))
5667 /* If we want the address and it's value-dependent, don't fold. */;
5668 else if (!type_unknown_p (expr))
5669 expr = fold_non_dependent_expr_sfinae (expr, complain);
5670 if (error_operand_p (expr))
5671 return error_mark_node;
5672 expr_type = TREE_TYPE (expr);
5673 if (TREE_CODE (type) == REFERENCE_TYPE)
5674 expr = mark_lvalue_use (expr);
5675 else
5676 expr = mark_rvalue_use (expr);
5677
5678 /* 14.3.2/5: The null pointer{,-to-member} conversion is applied
5679 to a non-type argument of "nullptr". */
5680 if (expr == nullptr_node
5681 && (TYPE_PTR_P (type) || TYPE_PTR_TO_MEMBER_P (type)))
5682 expr = convert (type, expr);
5683
5684 /* In C++11, non-type template arguments can be arbitrary constant
5685 expressions. But don't fold a PTRMEM_CST to a CONSTRUCTOR yet. */
5686 if (cxx_dialect >= cxx0x && TREE_CODE (expr) != PTRMEM_CST)
5687 expr = maybe_constant_value (expr);
5688
5689 /* HACK: Due to double coercion, we can get a
5690 NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
5691 which is the tree that we built on the first call (see
5692 below when coercing to reference to object or to reference to
5693 function). We just strip everything and get to the arg.
5694 See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
5695 for examples. */
5696 if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
5697 {
5698 tree probe_type, probe = expr;
5699 if (REFERENCE_REF_P (probe))
5700 probe = TREE_OPERAND (probe, 0);
5701 probe_type = TREE_TYPE (probe);
5702 if (TREE_CODE (probe) == NOP_EXPR)
5703 {
5704 /* ??? Maybe we could use convert_from_reference here, but we
5705 would need to relax its constraints because the NOP_EXPR
5706 could actually change the type to something more cv-qualified,
5707 and this is not folded by convert_from_reference. */
5708 tree addr = TREE_OPERAND (probe, 0);
5709 gcc_assert (TREE_CODE (probe_type) == REFERENCE_TYPE);
5710 gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
5711 gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
5712 gcc_assert (same_type_ignoring_top_level_qualifiers_p
5713 (TREE_TYPE (probe_type),
5714 TREE_TYPE (TREE_TYPE (addr))));
5715
5716 expr = TREE_OPERAND (addr, 0);
5717 expr_type = TREE_TYPE (expr);
5718 }
5719 }
5720
5721 /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
5722 parameter is a pointer to object, through decay and
5723 qualification conversion. Let's strip everything. */
5724 else if (TREE_CODE (expr) == NOP_EXPR && TYPE_PTROBV_P (type))
5725 {
5726 STRIP_NOPS (expr);
5727 gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
5728 gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
5729 /* Skip the ADDR_EXPR only if it is part of the decay for
5730 an array. Otherwise, it is part of the original argument
5731 in the source code. */
5732 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
5733 expr = TREE_OPERAND (expr, 0);
5734 expr_type = TREE_TYPE (expr);
5735 }
5736
5737 /* [temp.arg.nontype]/5, bullet 1
5738
5739 For a non-type template-parameter of integral or enumeration type,
5740 integral promotions (_conv.prom_) and integral conversions
5741 (_conv.integral_) are applied. */
5742 if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5743 {
5744 tree t = build_integral_nontype_arg_conv (type, expr, complain);
5745 t = maybe_constant_value (t);
5746 if (t != error_mark_node)
5747 expr = t;
5748
5749 if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (expr)))
5750 return error_mark_node;
5751
5752 /* Notice that there are constant expressions like '4 % 0' which
5753 do not fold into integer constants. */
5754 if (TREE_CODE (expr) != INTEGER_CST)
5755 {
5756 if (complain & tf_error)
5757 {
5758 int errs = errorcount, warns = warningcount;
5759 expr = cxx_constant_value (expr);
5760 if (errorcount > errs || warningcount > warns)
5761 inform (EXPR_LOC_OR_HERE (expr),
5762 "in template argument for type %qT ", type);
5763 if (expr == error_mark_node)
5764 return NULL_TREE;
5765 /* else cxx_constant_value complained but gave us
5766 a real constant, so go ahead. */
5767 gcc_assert (TREE_CODE (expr) == INTEGER_CST);
5768 }
5769 else
5770 return NULL_TREE;
5771 }
5772 }
5773 /* [temp.arg.nontype]/5, bullet 2
5774
5775 For a non-type template-parameter of type pointer to object,
5776 qualification conversions (_conv.qual_) and the array-to-pointer
5777 conversion (_conv.array_) are applied. */
5778 else if (TYPE_PTROBV_P (type))
5779 {
5780 /* [temp.arg.nontype]/1 (TC1 version, DR 49):
5781
5782 A template-argument for a non-type, non-template template-parameter
5783 shall be one of: [...]
5784
5785 -- the name of a non-type template-parameter;
5786 -- the address of an object or function with external linkage, [...]
5787 expressed as "& id-expression" where the & is optional if the name
5788 refers to a function or array, or if the corresponding
5789 template-parameter is a reference.
5790
5791 Here, we do not care about functions, as they are invalid anyway
5792 for a parameter of type pointer-to-object. */
5793
5794 if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
5795 /* Non-type template parameters are OK. */
5796 ;
5797 else if (cxx_dialect >= cxx0x && integer_zerop (expr))
5798 /* Null pointer values are OK in C++11. */;
5799 else if (TREE_CODE (expr) != ADDR_EXPR
5800 && TREE_CODE (expr_type) != ARRAY_TYPE)
5801 {
5802 if (TREE_CODE (expr) == VAR_DECL)
5803 {
5804 error ("%qD is not a valid template argument "
5805 "because %qD is a variable, not the address of "
5806 "a variable",
5807 expr, expr);
5808 return NULL_TREE;
5809 }
5810 /* Other values, like integer constants, might be valid
5811 non-type arguments of some other type. */
5812 return error_mark_node;
5813 }
5814 else
5815 {
5816 tree decl;
5817
5818 decl = ((TREE_CODE (expr) == ADDR_EXPR)
5819 ? TREE_OPERAND (expr, 0) : expr);
5820 if (TREE_CODE (decl) != VAR_DECL)
5821 {
5822 error ("%qE is not a valid template argument of type %qT "
5823 "because %qE is not a variable",
5824 expr, type, decl);
5825 return NULL_TREE;
5826 }
5827 else if (!DECL_EXTERNAL_LINKAGE_P (decl))
5828 {
5829 error ("%qE is not a valid template argument of type %qT "
5830 "because %qD does not have external linkage",
5831 expr, type, decl);
5832 return NULL_TREE;
5833 }
5834 }
5835
5836 expr = decay_conversion (expr);
5837 if (expr == error_mark_node)
5838 return error_mark_node;
5839
5840 expr = perform_qualification_conversions (type, expr);
5841 if (expr == error_mark_node)
5842 return error_mark_node;
5843 }
5844 /* [temp.arg.nontype]/5, bullet 3
5845
5846 For a non-type template-parameter of type reference to object, no
5847 conversions apply. The type referred to by the reference may be more
5848 cv-qualified than the (otherwise identical) type of the
5849 template-argument. The template-parameter is bound directly to the
5850 template-argument, which must be an lvalue. */
5851 else if (TYPE_REF_OBJ_P (type))
5852 {
5853 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
5854 expr_type))
5855 return error_mark_node;
5856
5857 if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
5858 {
5859 error ("%qE is not a valid template argument for type %qT "
5860 "because of conflicts in cv-qualification", expr, type);
5861 return NULL_TREE;
5862 }
5863
5864 if (!real_lvalue_p (expr))
5865 {
5866 error ("%qE is not a valid template argument for type %qT "
5867 "because it is not an lvalue", expr, type);
5868 return NULL_TREE;
5869 }
5870
5871 /* [temp.arg.nontype]/1
5872
5873 A template-argument for a non-type, non-template template-parameter
5874 shall be one of: [...]
5875
5876 -- the address of an object or function with external linkage. */
5877 if (TREE_CODE (expr) == INDIRECT_REF
5878 && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
5879 {
5880 expr = TREE_OPERAND (expr, 0);
5881 if (DECL_P (expr))
5882 {
5883 error ("%q#D is not a valid template argument for type %qT "
5884 "because a reference variable does not have a constant "
5885 "address", expr, type);
5886 return NULL_TREE;
5887 }
5888 }
5889
5890 if (!DECL_P (expr))
5891 {
5892 error ("%qE is not a valid template argument for type %qT "
5893 "because it is not an object with external linkage",
5894 expr, type);
5895 return NULL_TREE;
5896 }
5897
5898 if (!DECL_EXTERNAL_LINKAGE_P (expr))
5899 {
5900 error ("%qE is not a valid template argument for type %qT "
5901 "because object %qD has not external linkage",
5902 expr, type, expr);
5903 return NULL_TREE;
5904 }
5905
5906 expr = build_nop (type, build_address (expr));
5907 }
5908 /* [temp.arg.nontype]/5, bullet 4
5909
5910 For a non-type template-parameter of type pointer to function, only
5911 the function-to-pointer conversion (_conv.func_) is applied. If the
5912 template-argument represents a set of overloaded functions (or a
5913 pointer to such), the matching function is selected from the set
5914 (_over.over_). */
5915 else if (TYPE_PTRFN_P (type))
5916 {
5917 /* If the argument is a template-id, we might not have enough
5918 context information to decay the pointer. */
5919 if (!type_unknown_p (expr_type))
5920 {
5921 expr = decay_conversion (expr);
5922 if (expr == error_mark_node)
5923 return error_mark_node;
5924 }
5925
5926 if (cxx_dialect >= cxx0x && integer_zerop (expr))
5927 /* Null pointer values are OK in C++11. */
5928 return perform_qualification_conversions (type, expr);
5929
5930 expr = convert_nontype_argument_function (type, expr);
5931 if (!expr || expr == error_mark_node)
5932 return expr;
5933
5934 if (TREE_CODE (expr) != ADDR_EXPR)
5935 {
5936 error ("%qE is not a valid template argument for type %qT", expr, type);
5937 error ("it must be the address of a function with external linkage");
5938 return NULL_TREE;
5939 }
5940 }
5941 /* [temp.arg.nontype]/5, bullet 5
5942
5943 For a non-type template-parameter of type reference to function, no
5944 conversions apply. If the template-argument represents a set of
5945 overloaded functions, the matching function is selected from the set
5946 (_over.over_). */
5947 else if (TYPE_REFFN_P (type))
5948 {
5949 if (TREE_CODE (expr) == ADDR_EXPR)
5950 {
5951 error ("%qE is not a valid template argument for type %qT "
5952 "because it is a pointer", expr, type);
5953 inform (input_location, "try using %qE instead", TREE_OPERAND (expr, 0));
5954 return NULL_TREE;
5955 }
5956
5957 expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
5958 if (!expr || expr == error_mark_node)
5959 return expr;
5960
5961 expr = build_nop (type, build_address (expr));
5962 }
5963 /* [temp.arg.nontype]/5, bullet 6
5964
5965 For a non-type template-parameter of type pointer to member function,
5966 no conversions apply. If the template-argument represents a set of
5967 overloaded member functions, the matching member function is selected
5968 from the set (_over.over_). */
5969 else if (TYPE_PTRMEMFUNC_P (type))
5970 {
5971 expr = instantiate_type (type, expr, tf_none);
5972 if (expr == error_mark_node)
5973 return error_mark_node;
5974
5975 /* [temp.arg.nontype] bullet 1 says the pointer to member
5976 expression must be a pointer-to-member constant. */
5977 if (!check_valid_ptrmem_cst_expr (type, expr, complain))
5978 return error_mark_node;
5979
5980 /* There is no way to disable standard conversions in
5981 resolve_address_of_overloaded_function (called by
5982 instantiate_type). It is possible that the call succeeded by
5983 converting &B::I to &D::I (where B is a base of D), so we need
5984 to reject this conversion here.
5985
5986 Actually, even if there was a way to disable standard conversions,
5987 it would still be better to reject them here so that we can
5988 provide a superior diagnostic. */
5989 if (!same_type_p (TREE_TYPE (expr), type))
5990 {
5991 error ("%qE is not a valid template argument for type %qT "
5992 "because it is of type %qT", expr, type,
5993 TREE_TYPE (expr));
5994 /* If we are just one standard conversion off, explain. */
5995 if (can_convert (type, TREE_TYPE (expr)))
5996 inform (input_location,
5997 "standard conversions are not allowed in this context");
5998 return NULL_TREE;
5999 }
6000 }
6001 /* [temp.arg.nontype]/5, bullet 7
6002
6003 For a non-type template-parameter of type pointer to data member,
6004 qualification conversions (_conv.qual_) are applied. */
6005 else if (TYPE_PTRMEM_P (type))
6006 {
6007 /* [temp.arg.nontype] bullet 1 says the pointer to member
6008 expression must be a pointer-to-member constant. */
6009 if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6010 return error_mark_node;
6011
6012 expr = perform_qualification_conversions (type, expr);
6013 if (expr == error_mark_node)
6014 return expr;
6015 }
6016 else if (NULLPTR_TYPE_P (type))
6017 {
6018 if (expr != nullptr_node)
6019 {
6020 error ("%qE is not a valid template argument for type %qT "
6021 "because it is of type %qT", expr, type, TREE_TYPE (expr));
6022 return NULL_TREE;
6023 }
6024 return expr;
6025 }
6026 /* A template non-type parameter must be one of the above. */
6027 else
6028 gcc_unreachable ();
6029
6030 /* Sanity check: did we actually convert the argument to the
6031 right type? */
6032 gcc_assert (same_type_ignoring_top_level_qualifiers_p
6033 (type, TREE_TYPE (expr)));
6034 return expr;
6035 }
6036
6037 /* Subroutine of coerce_template_template_parms, which returns 1 if
6038 PARM_PARM and ARG_PARM match using the rule for the template
6039 parameters of template template parameters. Both PARM and ARG are
6040 template parameters; the rest of the arguments are the same as for
6041 coerce_template_template_parms.
6042 */
6043 static int
6044 coerce_template_template_parm (tree parm,
6045 tree arg,
6046 tsubst_flags_t complain,
6047 tree in_decl,
6048 tree outer_args)
6049 {
6050 if (arg == NULL_TREE || arg == error_mark_node
6051 || parm == NULL_TREE || parm == error_mark_node)
6052 return 0;
6053
6054 if (TREE_CODE (arg) != TREE_CODE (parm))
6055 return 0;
6056
6057 switch (TREE_CODE (parm))
6058 {
6059 case TEMPLATE_DECL:
6060 /* We encounter instantiations of templates like
6061 template <template <template <class> class> class TT>
6062 class C; */
6063 {
6064 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6065 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6066
6067 if (!coerce_template_template_parms
6068 (parmparm, argparm, complain, in_decl, outer_args))
6069 return 0;
6070 }
6071 /* Fall through. */
6072
6073 case TYPE_DECL:
6074 if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
6075 && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6076 /* Argument is a parameter pack but parameter is not. */
6077 return 0;
6078 break;
6079
6080 case PARM_DECL:
6081 /* The tsubst call is used to handle cases such as
6082
6083 template <int> class C {};
6084 template <class T, template <T> class TT> class D {};
6085 D<int, C> d;
6086
6087 i.e. the parameter list of TT depends on earlier parameters. */
6088 if (!uses_template_parms (TREE_TYPE (arg))
6089 && !same_type_p
6090 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
6091 TREE_TYPE (arg)))
6092 return 0;
6093
6094 if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
6095 && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6096 /* Argument is a parameter pack but parameter is not. */
6097 return 0;
6098
6099 break;
6100
6101 default:
6102 gcc_unreachable ();
6103 }
6104
6105 return 1;
6106 }
6107
6108
6109 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
6110 template template parameters. Both PARM_PARMS and ARG_PARMS are
6111 vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
6112 or PARM_DECL.
6113
6114 Consider the example:
6115 template <class T> class A;
6116 template<template <class U> class TT> class B;
6117
6118 For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
6119 the parameters to A, and OUTER_ARGS contains A. */
6120
6121 static int
6122 coerce_template_template_parms (tree parm_parms,
6123 tree arg_parms,
6124 tsubst_flags_t complain,
6125 tree in_decl,
6126 tree outer_args)
6127 {
6128 int nparms, nargs, i;
6129 tree parm, arg;
6130 int variadic_p = 0;
6131
6132 gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
6133 gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
6134
6135 nparms = TREE_VEC_LENGTH (parm_parms);
6136 nargs = TREE_VEC_LENGTH (arg_parms);
6137
6138 /* Determine whether we have a parameter pack at the end of the
6139 template template parameter's template parameter list. */
6140 if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
6141 {
6142 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
6143
6144 if (parm == error_mark_node)
6145 return 0;
6146
6147 switch (TREE_CODE (parm))
6148 {
6149 case TEMPLATE_DECL:
6150 case TYPE_DECL:
6151 if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6152 variadic_p = 1;
6153 break;
6154
6155 case PARM_DECL:
6156 if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6157 variadic_p = 1;
6158 break;
6159
6160 default:
6161 gcc_unreachable ();
6162 }
6163 }
6164
6165 if (nargs != nparms
6166 && !(variadic_p && nargs >= nparms - 1))
6167 return 0;
6168
6169 /* Check all of the template parameters except the parameter pack at
6170 the end (if any). */
6171 for (i = 0; i < nparms - variadic_p; ++i)
6172 {
6173 if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
6174 || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6175 continue;
6176
6177 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6178 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6179
6180 if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6181 outer_args))
6182 return 0;
6183
6184 }
6185
6186 if (variadic_p)
6187 {
6188 /* Check each of the template parameters in the template
6189 argument against the template parameter pack at the end of
6190 the template template parameter. */
6191 if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
6192 return 0;
6193
6194 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6195
6196 for (; i < nargs; ++i)
6197 {
6198 if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6199 continue;
6200
6201 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6202
6203 if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6204 outer_args))
6205 return 0;
6206 }
6207 }
6208
6209 return 1;
6210 }
6211
6212 /* Verifies that the deduced template arguments (in TARGS) for the
6213 template template parameters (in TPARMS) represent valid bindings,
6214 by comparing the template parameter list of each template argument
6215 to the template parameter list of its corresponding template
6216 template parameter, in accordance with DR150. This
6217 routine can only be called after all template arguments have been
6218 deduced. It will return TRUE if all of the template template
6219 parameter bindings are okay, FALSE otherwise. */
6220 bool
6221 template_template_parm_bindings_ok_p (tree tparms, tree targs)
6222 {
6223 int i, ntparms = TREE_VEC_LENGTH (tparms);
6224 bool ret = true;
6225
6226 /* We're dealing with template parms in this process. */
6227 ++processing_template_decl;
6228
6229 targs = INNERMOST_TEMPLATE_ARGS (targs);
6230
6231 for (i = 0; i < ntparms; ++i)
6232 {
6233 tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
6234 tree targ = TREE_VEC_ELT (targs, i);
6235
6236 if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
6237 {
6238 tree packed_args = NULL_TREE;
6239 int idx, len = 1;
6240
6241 if (ARGUMENT_PACK_P (targ))
6242 {
6243 /* Look inside the argument pack. */
6244 packed_args = ARGUMENT_PACK_ARGS (targ);
6245 len = TREE_VEC_LENGTH (packed_args);
6246 }
6247
6248 for (idx = 0; idx < len; ++idx)
6249 {
6250 tree targ_parms = NULL_TREE;
6251
6252 if (packed_args)
6253 /* Extract the next argument from the argument
6254 pack. */
6255 targ = TREE_VEC_ELT (packed_args, idx);
6256
6257 if (PACK_EXPANSION_P (targ))
6258 /* Look at the pattern of the pack expansion. */
6259 targ = PACK_EXPANSION_PATTERN (targ);
6260
6261 /* Extract the template parameters from the template
6262 argument. */
6263 if (TREE_CODE (targ) == TEMPLATE_DECL)
6264 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
6265 else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
6266 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
6267
6268 /* Verify that we can coerce the template template
6269 parameters from the template argument to the template
6270 parameter. This requires an exact match. */
6271 if (targ_parms
6272 && !coerce_template_template_parms
6273 (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
6274 targ_parms,
6275 tf_none,
6276 tparm,
6277 targs))
6278 {
6279 ret = false;
6280 goto out;
6281 }
6282 }
6283 }
6284 }
6285
6286 out:
6287
6288 --processing_template_decl;
6289 return ret;
6290 }
6291
6292 /* Since type attributes aren't mangled, we need to strip them from
6293 template type arguments. */
6294
6295 static tree
6296 canonicalize_type_argument (tree arg, tsubst_flags_t complain)
6297 {
6298 tree mv;
6299 if (!arg || arg == error_mark_node || arg == TYPE_CANONICAL (arg))
6300 return arg;
6301 mv = TYPE_MAIN_VARIANT (arg);
6302 arg = strip_typedefs (arg);
6303 if (TYPE_ALIGN (arg) != TYPE_ALIGN (mv)
6304 || TYPE_ATTRIBUTES (arg) != TYPE_ATTRIBUTES (mv))
6305 {
6306 if (complain & tf_warning)
6307 warning (0, "ignoring attributes on template argument %qT", arg);
6308 arg = build_aligned_type (arg, TYPE_ALIGN (mv));
6309 arg = cp_build_type_attribute_variant (arg, TYPE_ATTRIBUTES (mv));
6310 }
6311 return arg;
6312 }
6313
6314 /* Convert the indicated template ARG as necessary to match the
6315 indicated template PARM. Returns the converted ARG, or
6316 error_mark_node if the conversion was unsuccessful. Error and
6317 warning messages are issued under control of COMPLAIN. This
6318 conversion is for the Ith parameter in the parameter list. ARGS is
6319 the full set of template arguments deduced so far. */
6320
6321 static tree
6322 convert_template_argument (tree parm,
6323 tree arg,
6324 tree args,
6325 tsubst_flags_t complain,
6326 int i,
6327 tree in_decl)
6328 {
6329 tree orig_arg;
6330 tree val;
6331 int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
6332
6333 if (TREE_CODE (arg) == TREE_LIST
6334 && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
6335 {
6336 /* The template argument was the name of some
6337 member function. That's usually
6338 invalid, but static members are OK. In any
6339 case, grab the underlying fields/functions
6340 and issue an error later if required. */
6341 orig_arg = TREE_VALUE (arg);
6342 TREE_TYPE (arg) = unknown_type_node;
6343 }
6344
6345 orig_arg = arg;
6346
6347 requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
6348 requires_type = (TREE_CODE (parm) == TYPE_DECL
6349 || requires_tmpl_type);
6350
6351 /* When determining whether an argument pack expansion is a template,
6352 look at the pattern. */
6353 if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
6354 arg = PACK_EXPANSION_PATTERN (arg);
6355
6356 /* Deal with an injected-class-name used as a template template arg. */
6357 if (requires_tmpl_type && CLASS_TYPE_P (arg))
6358 {
6359 tree t = maybe_get_template_decl_from_type_decl (TYPE_NAME (arg));
6360 if (TREE_CODE (t) == TEMPLATE_DECL)
6361 {
6362 if (cxx_dialect >= cxx0x)
6363 /* OK under DR 1004. */;
6364 else if (complain & tf_warning_or_error)
6365 pedwarn (input_location, OPT_pedantic, "injected-class-name %qD"
6366 " used as template template argument", TYPE_NAME (arg));
6367 else if (flag_pedantic_errors)
6368 t = arg;
6369
6370 arg = t;
6371 }
6372 }
6373
6374 is_tmpl_type =
6375 ((TREE_CODE (arg) == TEMPLATE_DECL
6376 && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
6377 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6378 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
6379
6380 if (is_tmpl_type
6381 && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6382 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
6383 arg = TYPE_STUB_DECL (arg);
6384
6385 is_type = TYPE_P (arg) || is_tmpl_type;
6386
6387 if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
6388 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
6389 {
6390 permerror (input_location, "to refer to a type member of a template parameter, "
6391 "use %<typename %E%>", orig_arg);
6392
6393 orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
6394 TREE_OPERAND (arg, 1),
6395 typename_type,
6396 complain & tf_error);
6397 arg = orig_arg;
6398 is_type = 1;
6399 }
6400 if (is_type != requires_type)
6401 {
6402 if (in_decl)
6403 {
6404 if (complain & tf_error)
6405 {
6406 error ("type/value mismatch at argument %d in template "
6407 "parameter list for %qD",
6408 i + 1, in_decl);
6409 if (is_type)
6410 error (" expected a constant of type %qT, got %qT",
6411 TREE_TYPE (parm),
6412 (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
6413 else if (requires_tmpl_type)
6414 error (" expected a class template, got %qE", orig_arg);
6415 else
6416 error (" expected a type, got %qE", orig_arg);
6417 }
6418 }
6419 return error_mark_node;
6420 }
6421 if (is_tmpl_type ^ requires_tmpl_type)
6422 {
6423 if (in_decl && (complain & tf_error))
6424 {
6425 error ("type/value mismatch at argument %d in template "
6426 "parameter list for %qD",
6427 i + 1, in_decl);
6428 if (is_tmpl_type)
6429 error (" expected a type, got %qT", DECL_NAME (arg));
6430 else
6431 error (" expected a class template, got %qT", orig_arg);
6432 }
6433 return error_mark_node;
6434 }
6435
6436 if (is_type)
6437 {
6438 if (requires_tmpl_type)
6439 {
6440 if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
6441 /* The number of argument required is not known yet.
6442 Just accept it for now. */
6443 val = TREE_TYPE (arg);
6444 else
6445 {
6446 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6447 tree argparm;
6448
6449 argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6450
6451 if (coerce_template_template_parms (parmparm, argparm,
6452 complain, in_decl,
6453 args))
6454 {
6455 val = arg;
6456
6457 /* TEMPLATE_TEMPLATE_PARM node is preferred over
6458 TEMPLATE_DECL. */
6459 if (val != error_mark_node)
6460 {
6461 if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
6462 val = TREE_TYPE (val);
6463 if (TREE_CODE (orig_arg) == TYPE_PACK_EXPANSION)
6464 val = make_pack_expansion (val);
6465 }
6466 }
6467 else
6468 {
6469 if (in_decl && (complain & tf_error))
6470 {
6471 error ("type/value mismatch at argument %d in "
6472 "template parameter list for %qD",
6473 i + 1, in_decl);
6474 error (" expected a template of type %qD, got %qT",
6475 parm, orig_arg);
6476 }
6477
6478 val = error_mark_node;
6479 }
6480 }
6481 }
6482 else
6483 val = orig_arg;
6484 /* We only form one instance of each template specialization.
6485 Therefore, if we use a non-canonical variant (i.e., a
6486 typedef), any future messages referring to the type will use
6487 the typedef, which is confusing if those future uses do not
6488 themselves also use the typedef. */
6489 if (TYPE_P (val))
6490 val = canonicalize_type_argument (val, complain);
6491 }
6492 else
6493 {
6494 tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
6495
6496 if (invalid_nontype_parm_type_p (t, complain))
6497 return error_mark_node;
6498
6499 if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
6500 {
6501 if (same_type_p (t, TREE_TYPE (orig_arg)))
6502 val = orig_arg;
6503 else
6504 {
6505 /* Not sure if this is reachable, but it doesn't hurt
6506 to be robust. */
6507 error ("type mismatch in nontype parameter pack");
6508 val = error_mark_node;
6509 }
6510 }
6511 else if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
6512 /* We used to call digest_init here. However, digest_init
6513 will report errors, which we don't want when complain
6514 is zero. More importantly, digest_init will try too
6515 hard to convert things: for example, `0' should not be
6516 converted to pointer type at this point according to
6517 the standard. Accepting this is not merely an
6518 extension, since deciding whether or not these
6519 conversions can occur is part of determining which
6520 function template to call, or whether a given explicit
6521 argument specification is valid. */
6522 val = convert_nontype_argument (t, orig_arg, complain);
6523 else
6524 val = orig_arg;
6525
6526 if (val == NULL_TREE)
6527 val = error_mark_node;
6528 else if (val == error_mark_node && (complain & tf_error))
6529 error ("could not convert template argument %qE to %qT", orig_arg, t);
6530
6531 if (TREE_CODE (val) == SCOPE_REF)
6532 {
6533 /* Strip typedefs from the SCOPE_REF. */
6534 tree type = canonicalize_type_argument (TREE_TYPE (val), complain);
6535 tree scope = canonicalize_type_argument (TREE_OPERAND (val, 0),
6536 complain);
6537 val = build_qualified_name (type, scope, TREE_OPERAND (val, 1),
6538 QUALIFIED_NAME_IS_TEMPLATE (val));
6539 }
6540 }
6541
6542 return val;
6543 }
6544
6545 /* Coerces the remaining template arguments in INNER_ARGS (from
6546 ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
6547 Returns the coerced argument pack. PARM_IDX is the position of this
6548 parameter in the template parameter list. ARGS is the original
6549 template argument list. */
6550 static tree
6551 coerce_template_parameter_pack (tree parms,
6552 int parm_idx,
6553 tree args,
6554 tree inner_args,
6555 int arg_idx,
6556 tree new_args,
6557 int* lost,
6558 tree in_decl,
6559 tsubst_flags_t complain)
6560 {
6561 tree parm = TREE_VEC_ELT (parms, parm_idx);
6562 int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6563 tree packed_args;
6564 tree argument_pack;
6565 tree packed_types = NULL_TREE;
6566
6567 if (arg_idx > nargs)
6568 arg_idx = nargs;
6569
6570 packed_args = make_tree_vec (nargs - arg_idx);
6571
6572 if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
6573 && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
6574 {
6575 /* When the template parameter is a non-type template
6576 parameter pack whose type uses parameter packs, we need
6577 to look at each of the template arguments
6578 separately. Build a vector of the types for these
6579 non-type template parameters in PACKED_TYPES. */
6580 tree expansion
6581 = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
6582 packed_types = tsubst_pack_expansion (expansion, args,
6583 complain, in_decl);
6584
6585 if (packed_types == error_mark_node)
6586 return error_mark_node;
6587
6588 /* Check that we have the right number of arguments. */
6589 if (arg_idx < nargs
6590 && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
6591 && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
6592 {
6593 int needed_parms
6594 = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
6595 error ("wrong number of template arguments (%d, should be %d)",
6596 nargs, needed_parms);
6597 return error_mark_node;
6598 }
6599
6600 /* If we aren't able to check the actual arguments now
6601 (because they haven't been expanded yet), we can at least
6602 verify that all of the types used for the non-type
6603 template parameter pack are, in fact, valid for non-type
6604 template parameters. */
6605 if (arg_idx < nargs
6606 && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
6607 {
6608 int j, len = TREE_VEC_LENGTH (packed_types);
6609 for (j = 0; j < len; ++j)
6610 {
6611 tree t = TREE_VEC_ELT (packed_types, j);
6612 if (invalid_nontype_parm_type_p (t, complain))
6613 return error_mark_node;
6614 }
6615 }
6616 }
6617
6618 /* Convert the remaining arguments, which will be a part of the
6619 parameter pack "parm". */
6620 for (; arg_idx < nargs; ++arg_idx)
6621 {
6622 tree arg = TREE_VEC_ELT (inner_args, arg_idx);
6623 tree actual_parm = TREE_VALUE (parm);
6624
6625 if (packed_types && !PACK_EXPANSION_P (arg))
6626 {
6627 /* When we have a vector of types (corresponding to the
6628 non-type template parameter pack that uses parameter
6629 packs in its type, as mention above), and the
6630 argument is not an expansion (which expands to a
6631 currently unknown number of arguments), clone the
6632 parm and give it the next type in PACKED_TYPES. */
6633 actual_parm = copy_node (actual_parm);
6634 TREE_TYPE (actual_parm) =
6635 TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
6636 }
6637
6638 if (arg != error_mark_node)
6639 arg = convert_template_argument (actual_parm,
6640 arg, new_args, complain, parm_idx,
6641 in_decl);
6642 if (arg == error_mark_node)
6643 (*lost)++;
6644 TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg;
6645 }
6646
6647 if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
6648 || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
6649 argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
6650 else
6651 {
6652 argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
6653 TREE_TYPE (argument_pack)
6654 = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
6655 TREE_CONSTANT (argument_pack) = 1;
6656 }
6657
6658 SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
6659 #ifdef ENABLE_CHECKING
6660 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
6661 TREE_VEC_LENGTH (packed_args));
6662 #endif
6663 return argument_pack;
6664 }
6665
6666 /* Convert all template arguments to their appropriate types, and
6667 return a vector containing the innermost resulting template
6668 arguments. If any error occurs, return error_mark_node. Error and
6669 warning messages are issued under control of COMPLAIN.
6670
6671 If REQUIRE_ALL_ARGS is false, argument deduction will be performed
6672 for arguments not specified in ARGS. Otherwise, if
6673 USE_DEFAULT_ARGS is true, default arguments will be used to fill in
6674 unspecified arguments. If REQUIRE_ALL_ARGS is true, but
6675 USE_DEFAULT_ARGS is false, then all arguments must be specified in
6676 ARGS. */
6677
6678 static tree
6679 coerce_template_parms (tree parms,
6680 tree args,
6681 tree in_decl,
6682 tsubst_flags_t complain,
6683 bool require_all_args,
6684 bool use_default_args)
6685 {
6686 int nparms, nargs, parm_idx, arg_idx, lost = 0;
6687 tree inner_args;
6688 tree new_args;
6689 tree new_inner_args;
6690 int saved_unevaluated_operand;
6691 int saved_inhibit_evaluation_warnings;
6692
6693 /* When used as a boolean value, indicates whether this is a
6694 variadic template parameter list. Since it's an int, we can also
6695 subtract it from nparms to get the number of non-variadic
6696 parameters. */
6697 int variadic_p = 0;
6698 int post_variadic_parms = 0;
6699
6700 if (args == error_mark_node)
6701 return error_mark_node;
6702
6703 nparms = TREE_VEC_LENGTH (parms);
6704
6705 /* Determine if there are any parameter packs. */
6706 for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
6707 {
6708 tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
6709 if (variadic_p)
6710 ++post_variadic_parms;
6711 if (template_parameter_pack_p (tparm))
6712 ++variadic_p;
6713 }
6714
6715 inner_args = INNERMOST_TEMPLATE_ARGS (args);
6716 /* If there are no parameters that follow a parameter pack, we need to
6717 expand any argument packs so that we can deduce a parameter pack from
6718 some non-packed args followed by an argument pack, as in variadic85.C.
6719 If there are such parameters, we need to leave argument packs intact
6720 so the arguments are assigned properly. This can happen when dealing
6721 with a nested class inside a partial specialization of a class
6722 template, as in variadic92.C, or when deducing a template parameter pack
6723 from a sub-declarator, as in variadic114.C. */
6724 if (!post_variadic_parms)
6725 inner_args = expand_template_argument_pack (inner_args);
6726
6727 nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6728 if ((nargs > nparms && !variadic_p)
6729 || (nargs < nparms - variadic_p
6730 && require_all_args
6731 && (!use_default_args
6732 || (TREE_VEC_ELT (parms, nargs) != error_mark_node
6733 && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
6734 {
6735 if (complain & tf_error)
6736 {
6737 if (variadic_p)
6738 {
6739 nparms -= variadic_p;
6740 error ("wrong number of template arguments "
6741 "(%d, should be %d or more)", nargs, nparms);
6742 }
6743 else
6744 error ("wrong number of template arguments "
6745 "(%d, should be %d)", nargs, nparms);
6746
6747 if (in_decl)
6748 error ("provided for %q+D", in_decl);
6749 }
6750
6751 return error_mark_node;
6752 }
6753
6754 /* We need to evaluate the template arguments, even though this
6755 template-id may be nested within a "sizeof". */
6756 saved_unevaluated_operand = cp_unevaluated_operand;
6757 cp_unevaluated_operand = 0;
6758 saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
6759 c_inhibit_evaluation_warnings = 0;
6760 new_inner_args = make_tree_vec (nparms);
6761 new_args = add_outermost_template_args (args, new_inner_args);
6762 for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
6763 {
6764 tree arg;
6765 tree parm;
6766
6767 /* Get the Ith template parameter. */
6768 parm = TREE_VEC_ELT (parms, parm_idx);
6769
6770 if (parm == error_mark_node)
6771 {
6772 TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
6773 continue;
6774 }
6775
6776 /* Calculate the next argument. */
6777 if (arg_idx < nargs)
6778 arg = TREE_VEC_ELT (inner_args, arg_idx);
6779 else
6780 arg = NULL_TREE;
6781
6782 if (template_parameter_pack_p (TREE_VALUE (parm))
6783 && !(arg && ARGUMENT_PACK_P (arg)))
6784 {
6785 /* All remaining arguments will be placed in the
6786 template parameter pack PARM. */
6787 arg = coerce_template_parameter_pack (parms, parm_idx, args,
6788 inner_args, arg_idx,
6789 new_args, &lost,
6790 in_decl, complain);
6791
6792 /* Store this argument. */
6793 if (arg == error_mark_node)
6794 lost++;
6795 TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
6796
6797 /* We are done with all of the arguments. */
6798 arg_idx = nargs;
6799
6800 continue;
6801 }
6802 else if (arg)
6803 {
6804 if (PACK_EXPANSION_P (arg))
6805 {
6806 /* We don't know how many args we have yet, just
6807 use the unconverted ones for now. */
6808 new_inner_args = args;
6809 break;
6810 }
6811 }
6812 else if (require_all_args)
6813 {
6814 /* There must be a default arg in this case. */
6815 arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
6816 complain, in_decl);
6817 /* The position of the first default template argument,
6818 is also the number of non-defaulted arguments in NEW_INNER_ARGS.
6819 Record that. */
6820 if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6821 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args, arg_idx);
6822 }
6823 else
6824 break;
6825
6826 if (arg == error_mark_node)
6827 {
6828 if (complain & tf_error)
6829 error ("template argument %d is invalid", arg_idx + 1);
6830 }
6831 else if (!arg)
6832 /* This only occurs if there was an error in the template
6833 parameter list itself (which we would already have
6834 reported) that we are trying to recover from, e.g., a class
6835 template with a parameter list such as
6836 template<typename..., typename>. */
6837 ++lost;
6838 else
6839 arg = convert_template_argument (TREE_VALUE (parm),
6840 arg, new_args, complain,
6841 parm_idx, in_decl);
6842
6843 if (arg == error_mark_node)
6844 lost++;
6845 TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
6846 }
6847 cp_unevaluated_operand = saved_unevaluated_operand;
6848 c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
6849
6850 if (lost)
6851 return error_mark_node;
6852
6853 #ifdef ENABLE_CHECKING
6854 if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6855 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
6856 TREE_VEC_LENGTH (new_inner_args));
6857 #endif
6858
6859 return new_inner_args;
6860 }
6861
6862 /* Returns 1 if template args OT and NT are equivalent. */
6863
6864 static int
6865 template_args_equal (tree ot, tree nt)
6866 {
6867 if (nt == ot)
6868 return 1;
6869 if (nt == NULL_TREE || ot == NULL_TREE)
6870 return false;
6871
6872 if (TREE_CODE (nt) == TREE_VEC)
6873 /* For member templates */
6874 return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
6875 else if (PACK_EXPANSION_P (ot))
6876 return PACK_EXPANSION_P (nt)
6877 && template_args_equal (PACK_EXPANSION_PATTERN (ot),
6878 PACK_EXPANSION_PATTERN (nt));
6879 else if (ARGUMENT_PACK_P (ot))
6880 {
6881 int i, len;
6882 tree opack, npack;
6883
6884 if (!ARGUMENT_PACK_P (nt))
6885 return 0;
6886
6887 opack = ARGUMENT_PACK_ARGS (ot);
6888 npack = ARGUMENT_PACK_ARGS (nt);
6889 len = TREE_VEC_LENGTH (opack);
6890 if (TREE_VEC_LENGTH (npack) != len)
6891 return 0;
6892 for (i = 0; i < len; ++i)
6893 if (!template_args_equal (TREE_VEC_ELT (opack, i),
6894 TREE_VEC_ELT (npack, i)))
6895 return 0;
6896 return 1;
6897 }
6898 else if (ot && TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
6899 {
6900 /* We get here probably because we are in the middle of substituting
6901 into the pattern of a pack expansion. In that case the
6902 ARGUMENT_PACK_SELECT temporarily replaces the pack argument we are
6903 interested in. So we want to use the initial pack argument for
6904 the comparison. */
6905 ot = ARGUMENT_PACK_SELECT_FROM_PACK (ot);
6906 if (nt && TREE_CODE (nt) == ARGUMENT_PACK_SELECT)
6907 nt = ARGUMENT_PACK_SELECT_FROM_PACK (nt);
6908 return template_args_equal (ot, nt);
6909 }
6910 else if (TYPE_P (nt))
6911 return TYPE_P (ot) && same_type_p (ot, nt);
6912 else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
6913 return 0;
6914 else
6915 return cp_tree_equal (ot, nt);
6916 }
6917
6918 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets of
6919 template arguments. Returns 0 otherwise, and updates OLDARG_PTR and
6920 NEWARG_PTR with the offending arguments if they are non-NULL. */
6921
6922 static int
6923 comp_template_args_with_info (tree oldargs, tree newargs,
6924 tree *oldarg_ptr, tree *newarg_ptr)
6925 {
6926 int i;
6927
6928 if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
6929 return 0;
6930
6931 for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
6932 {
6933 tree nt = TREE_VEC_ELT (newargs, i);
6934 tree ot = TREE_VEC_ELT (oldargs, i);
6935
6936 if (! template_args_equal (ot, nt))
6937 {
6938 if (oldarg_ptr != NULL)
6939 *oldarg_ptr = ot;
6940 if (newarg_ptr != NULL)
6941 *newarg_ptr = nt;
6942 return 0;
6943 }
6944 }
6945 return 1;
6946 }
6947
6948 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
6949 of template arguments. Returns 0 otherwise. */
6950
6951 int
6952 comp_template_args (tree oldargs, tree newargs)
6953 {
6954 return comp_template_args_with_info (oldargs, newargs, NULL, NULL);
6955 }
6956
6957 static void
6958 add_pending_template (tree d)
6959 {
6960 tree ti = (TYPE_P (d)
6961 ? CLASSTYPE_TEMPLATE_INFO (d)
6962 : DECL_TEMPLATE_INFO (d));
6963 struct pending_template *pt;
6964 int level;
6965
6966 if (TI_PENDING_TEMPLATE_FLAG (ti))
6967 return;
6968
6969 /* We are called both from instantiate_decl, where we've already had a
6970 tinst_level pushed, and instantiate_template, where we haven't.
6971 Compensate. */
6972 level = !current_tinst_level || current_tinst_level->decl != d;
6973
6974 if (level)
6975 push_tinst_level (d);
6976
6977 pt = ggc_alloc_pending_template ();
6978 pt->next = NULL;
6979 pt->tinst = current_tinst_level;
6980 if (last_pending_template)
6981 last_pending_template->next = pt;
6982 else
6983 pending_templates = pt;
6984
6985 last_pending_template = pt;
6986
6987 TI_PENDING_TEMPLATE_FLAG (ti) = 1;
6988
6989 if (level)
6990 pop_tinst_level ();
6991 }
6992
6993
6994 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
6995 ARGLIST. Valid choices for FNS are given in the cp-tree.def
6996 documentation for TEMPLATE_ID_EXPR. */
6997
6998 tree
6999 lookup_template_function (tree fns, tree arglist)
7000 {
7001 tree type;
7002
7003 if (fns == error_mark_node || arglist == error_mark_node)
7004 return error_mark_node;
7005
7006 gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
7007
7008 if (!is_overloaded_fn (fns) && TREE_CODE (fns) != IDENTIFIER_NODE)
7009 {
7010 error ("%q#D is not a function template", fns);
7011 return error_mark_node;
7012 }
7013
7014 if (BASELINK_P (fns))
7015 {
7016 BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
7017 unknown_type_node,
7018 BASELINK_FUNCTIONS (fns),
7019 arglist);
7020 return fns;
7021 }
7022
7023 type = TREE_TYPE (fns);
7024 if (TREE_CODE (fns) == OVERLOAD || !type)
7025 type = unknown_type_node;
7026
7027 return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
7028 }
7029
7030 /* Within the scope of a template class S<T>, the name S gets bound
7031 (in build_self_reference) to a TYPE_DECL for the class, not a
7032 TEMPLATE_DECL. If DECL is a TYPE_DECL for current_class_type,
7033 or one of its enclosing classes, and that type is a template,
7034 return the associated TEMPLATE_DECL. Otherwise, the original
7035 DECL is returned.
7036
7037 Also handle the case when DECL is a TREE_LIST of ambiguous
7038 injected-class-names from different bases. */
7039
7040 tree
7041 maybe_get_template_decl_from_type_decl (tree decl)
7042 {
7043 if (decl == NULL_TREE)
7044 return decl;
7045
7046 /* DR 176: A lookup that finds an injected-class-name (10.2
7047 [class.member.lookup]) can result in an ambiguity in certain cases
7048 (for example, if it is found in more than one base class). If all of
7049 the injected-class-names that are found refer to specializations of
7050 the same class template, and if the name is followed by a
7051 template-argument-list, the reference refers to the class template
7052 itself and not a specialization thereof, and is not ambiguous. */
7053 if (TREE_CODE (decl) == TREE_LIST)
7054 {
7055 tree t, tmpl = NULL_TREE;
7056 for (t = decl; t; t = TREE_CHAIN (t))
7057 {
7058 tree elt = maybe_get_template_decl_from_type_decl (TREE_VALUE (t));
7059 if (!tmpl)
7060 tmpl = elt;
7061 else if (tmpl != elt)
7062 break;
7063 }
7064 if (tmpl && t == NULL_TREE)
7065 return tmpl;
7066 else
7067 return decl;
7068 }
7069
7070 return (decl != NULL_TREE
7071 && DECL_SELF_REFERENCE_P (decl)
7072 && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
7073 ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
7074 }
7075
7076 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
7077 parameters, find the desired type.
7078
7079 D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
7080
7081 IN_DECL, if non-NULL, is the template declaration we are trying to
7082 instantiate.
7083
7084 If ENTERING_SCOPE is nonzero, we are about to enter the scope of
7085 the class we are looking up.
7086
7087 Issue error and warning messages under control of COMPLAIN.
7088
7089 If the template class is really a local class in a template
7090 function, then the FUNCTION_CONTEXT is the function in which it is
7091 being instantiated.
7092
7093 ??? Note that this function is currently called *twice* for each
7094 template-id: the first time from the parser, while creating the
7095 incomplete type (finish_template_type), and the second type during the
7096 real instantiation (instantiate_template_class). This is surely something
7097 that we want to avoid. It also causes some problems with argument
7098 coercion (see convert_nontype_argument for more information on this). */
7099
7100 static tree
7101 lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
7102 int entering_scope, tsubst_flags_t complain)
7103 {
7104 tree templ = NULL_TREE, parmlist;
7105 tree t;
7106 void **slot;
7107 spec_entry *entry;
7108 spec_entry elt;
7109 hashval_t hash;
7110
7111 if (TREE_CODE (d1) == IDENTIFIER_NODE)
7112 {
7113 tree value = innermost_non_namespace_value (d1);
7114 if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
7115 templ = value;
7116 else
7117 {
7118 if (context)
7119 push_decl_namespace (context);
7120 templ = lookup_name (d1);
7121 templ = maybe_get_template_decl_from_type_decl (templ);
7122 if (context)
7123 pop_decl_namespace ();
7124 }
7125 if (templ)
7126 context = DECL_CONTEXT (templ);
7127 }
7128 else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
7129 {
7130 tree type = TREE_TYPE (d1);
7131
7132 /* If we are declaring a constructor, say A<T>::A<T>, we will get
7133 an implicit typename for the second A. Deal with it. */
7134 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
7135 type = TREE_TYPE (type);
7136
7137 if (CLASSTYPE_TEMPLATE_INFO (type))
7138 {
7139 templ = CLASSTYPE_TI_TEMPLATE (type);
7140 d1 = DECL_NAME (templ);
7141 }
7142 }
7143 else if (TREE_CODE (d1) == ENUMERAL_TYPE
7144 || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
7145 {
7146 templ = TYPE_TI_TEMPLATE (d1);
7147 d1 = DECL_NAME (templ);
7148 }
7149 else if (TREE_CODE (d1) == TEMPLATE_DECL
7150 && DECL_TEMPLATE_RESULT (d1)
7151 && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
7152 {
7153 templ = d1;
7154 d1 = DECL_NAME (templ);
7155 context = DECL_CONTEXT (templ);
7156 }
7157
7158 /* Issue an error message if we didn't find a template. */
7159 if (! templ)
7160 {
7161 if (complain & tf_error)
7162 error ("%qT is not a template", d1);
7163 return error_mark_node;
7164 }
7165
7166 if (TREE_CODE (templ) != TEMPLATE_DECL
7167 /* Make sure it's a user visible template, if it was named by
7168 the user. */
7169 || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
7170 && !PRIMARY_TEMPLATE_P (templ)))
7171 {
7172 if (complain & tf_error)
7173 {
7174 error ("non-template type %qT used as a template", d1);
7175 if (in_decl)
7176 error ("for template declaration %q+D", in_decl);
7177 }
7178 return error_mark_node;
7179 }
7180
7181 complain &= ~tf_user;
7182
7183 if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
7184 {
7185 /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
7186 template arguments */
7187
7188 tree parm;
7189 tree arglist2;
7190 tree outer;
7191
7192 parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
7193
7194 /* Consider an example where a template template parameter declared as
7195
7196 template <class T, class U = std::allocator<T> > class TT
7197
7198 The template parameter level of T and U are one level larger than
7199 of TT. To proper process the default argument of U, say when an
7200 instantiation `TT<int>' is seen, we need to build the full
7201 arguments containing {int} as the innermost level. Outer levels,
7202 available when not appearing as default template argument, can be
7203 obtained from the arguments of the enclosing template.
7204
7205 Suppose that TT is later substituted with std::vector. The above
7206 instantiation is `TT<int, std::allocator<T> >' with TT at
7207 level 1, and T at level 2, while the template arguments at level 1
7208 becomes {std::vector} and the inner level 2 is {int}. */
7209
7210 outer = DECL_CONTEXT (templ);
7211 if (outer)
7212 outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
7213 else if (current_template_parms)
7214 /* This is an argument of the current template, so we haven't set
7215 DECL_CONTEXT yet. */
7216 outer = current_template_args ();
7217
7218 if (outer)
7219 arglist = add_to_template_args (outer, arglist);
7220
7221 arglist2 = coerce_template_parms (parmlist, arglist, templ,
7222 complain,
7223 /*require_all_args=*/true,
7224 /*use_default_args=*/true);
7225 if (arglist2 == error_mark_node
7226 || (!uses_template_parms (arglist2)
7227 && check_instantiated_args (templ, arglist2, complain)))
7228 return error_mark_node;
7229
7230 parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
7231 return parm;
7232 }
7233 else
7234 {
7235 tree template_type = TREE_TYPE (templ);
7236 tree gen_tmpl;
7237 tree type_decl;
7238 tree found = NULL_TREE;
7239 int arg_depth;
7240 int parm_depth;
7241 int is_dependent_type;
7242 int use_partial_inst_tmpl = false;
7243
7244 gen_tmpl = most_general_template (templ);
7245 parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
7246 parm_depth = TMPL_PARMS_DEPTH (parmlist);
7247 arg_depth = TMPL_ARGS_DEPTH (arglist);
7248
7249 if (arg_depth == 1 && parm_depth > 1)
7250 {
7251 /* We've been given an incomplete set of template arguments.
7252 For example, given:
7253
7254 template <class T> struct S1 {
7255 template <class U> struct S2 {};
7256 template <class U> struct S2<U*> {};
7257 };
7258
7259 we will be called with an ARGLIST of `U*', but the
7260 TEMPLATE will be `template <class T> template
7261 <class U> struct S1<T>::S2'. We must fill in the missing
7262 arguments. */
7263 arglist
7264 = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
7265 arglist);
7266 arg_depth = TMPL_ARGS_DEPTH (arglist);
7267 }
7268
7269 /* Now we should have enough arguments. */
7270 gcc_assert (parm_depth == arg_depth);
7271
7272 /* From here on, we're only interested in the most general
7273 template. */
7274
7275 /* Calculate the BOUND_ARGS. These will be the args that are
7276 actually tsubst'd into the definition to create the
7277 instantiation. */
7278 if (parm_depth > 1)
7279 {
7280 /* We have multiple levels of arguments to coerce, at once. */
7281 int i;
7282 int saved_depth = TMPL_ARGS_DEPTH (arglist);
7283
7284 tree bound_args = make_tree_vec (parm_depth);
7285
7286 for (i = saved_depth,
7287 t = DECL_TEMPLATE_PARMS (gen_tmpl);
7288 i > 0 && t != NULL_TREE;
7289 --i, t = TREE_CHAIN (t))
7290 {
7291 tree a;
7292 if (i == saved_depth)
7293 a = coerce_template_parms (TREE_VALUE (t),
7294 arglist, gen_tmpl,
7295 complain,
7296 /*require_all_args=*/true,
7297 /*use_default_args=*/true);
7298 else
7299 /* Outer levels should have already been coerced. */
7300 a = TMPL_ARGS_LEVEL (arglist, i);
7301
7302 /* Don't process further if one of the levels fails. */
7303 if (a == error_mark_node)
7304 {
7305 /* Restore the ARGLIST to its full size. */
7306 TREE_VEC_LENGTH (arglist) = saved_depth;
7307 return error_mark_node;
7308 }
7309
7310 SET_TMPL_ARGS_LEVEL (bound_args, i, a);
7311
7312 /* We temporarily reduce the length of the ARGLIST so
7313 that coerce_template_parms will see only the arguments
7314 corresponding to the template parameters it is
7315 examining. */
7316 TREE_VEC_LENGTH (arglist)--;
7317 }
7318
7319 /* Restore the ARGLIST to its full size. */
7320 TREE_VEC_LENGTH (arglist) = saved_depth;
7321
7322 arglist = bound_args;
7323 }
7324 else
7325 arglist
7326 = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
7327 INNERMOST_TEMPLATE_ARGS (arglist),
7328 gen_tmpl,
7329 complain,
7330 /*require_all_args=*/true,
7331 /*use_default_args=*/true);
7332
7333 if (arglist == error_mark_node)
7334 /* We were unable to bind the arguments. */
7335 return error_mark_node;
7336
7337 /* In the scope of a template class, explicit references to the
7338 template class refer to the type of the template, not any
7339 instantiation of it. For example, in:
7340
7341 template <class T> class C { void f(C<T>); }
7342
7343 the `C<T>' is just the same as `C'. Outside of the
7344 class, however, such a reference is an instantiation. */
7345 if ((entering_scope
7346 || !PRIMARY_TEMPLATE_P (gen_tmpl)
7347 || currently_open_class (template_type))
7348 /* comp_template_args is expensive, check it last. */
7349 && comp_template_args (TYPE_TI_ARGS (template_type),
7350 arglist))
7351 return template_type;
7352
7353 /* If we already have this specialization, return it. */
7354 elt.tmpl = gen_tmpl;
7355 elt.args = arglist;
7356 hash = hash_specialization (&elt);
7357 entry = (spec_entry *) htab_find_with_hash (type_specializations,
7358 &elt, hash);
7359
7360 if (entry)
7361 return entry->spec;
7362
7363 is_dependent_type = uses_template_parms (arglist);
7364
7365 /* If the deduced arguments are invalid, then the binding
7366 failed. */
7367 if (!is_dependent_type
7368 && check_instantiated_args (gen_tmpl,
7369 INNERMOST_TEMPLATE_ARGS (arglist),
7370 complain))
7371 return error_mark_node;
7372
7373 if (!is_dependent_type
7374 && !PRIMARY_TEMPLATE_P (gen_tmpl)
7375 && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
7376 && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
7377 {
7378 found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
7379 DECL_NAME (gen_tmpl),
7380 /*tag_scope=*/ts_global);
7381 return found;
7382 }
7383
7384 context = tsubst (DECL_CONTEXT (gen_tmpl), arglist,
7385 complain, in_decl);
7386 if (!context)
7387 context = global_namespace;
7388
7389 /* Create the type. */
7390 if (TREE_CODE (template_type) == ENUMERAL_TYPE)
7391 {
7392 if (!is_dependent_type)
7393 {
7394 set_current_access_from_decl (TYPE_NAME (template_type));
7395 t = start_enum (TYPE_IDENTIFIER (template_type), NULL_TREE,
7396 tsubst (ENUM_UNDERLYING_TYPE (template_type),
7397 arglist, complain, in_decl),
7398 SCOPED_ENUM_P (template_type), NULL);
7399 }
7400 else
7401 {
7402 /* We don't want to call start_enum for this type, since
7403 the values for the enumeration constants may involve
7404 template parameters. And, no one should be interested
7405 in the enumeration constants for such a type. */
7406 t = cxx_make_type (ENUMERAL_TYPE);
7407 SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
7408 }
7409 SET_OPAQUE_ENUM_P (t, OPAQUE_ENUM_P (template_type));
7410 ENUM_FIXED_UNDERLYING_TYPE_P (t)
7411 = ENUM_FIXED_UNDERLYING_TYPE_P (template_type);
7412 }
7413 else if (DECL_ALIAS_TEMPLATE_P (gen_tmpl))
7414 {
7415 /* The user referred to a specialization of an alias
7416 template represented by GEN_TMPL.
7417
7418 [temp.alias]/2 says:
7419
7420 When a template-id refers to the specialization of an
7421 alias template, it is equivalent to the associated
7422 type obtained by substitution of its
7423 template-arguments for the template-parameters in the
7424 type-id of the alias template. */
7425
7426 t = tsubst (TREE_TYPE (gen_tmpl), arglist, complain, in_decl);
7427 /* Note that the call above (by indirectly calling
7428 register_specialization in tsubst_decl) registers the
7429 TYPE_DECL representing the specialization of the alias
7430 template. So next time someone substitutes ARGLIST for
7431 the template parms into the alias template (GEN_TMPL),
7432 she'll get that TYPE_DECL back. */
7433
7434 if (t == error_mark_node)
7435 return t;
7436 }
7437 else if (CLASS_TYPE_P (template_type))
7438 {
7439 t = make_class_type (TREE_CODE (template_type));
7440 CLASSTYPE_DECLARED_CLASS (t)
7441 = CLASSTYPE_DECLARED_CLASS (template_type);
7442 SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
7443 TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
7444
7445 /* A local class. Make sure the decl gets registered properly. */
7446 if (context == current_function_decl)
7447 pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current);
7448
7449 if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
7450 /* This instantiation is another name for the primary
7451 template type. Set the TYPE_CANONICAL field
7452 appropriately. */
7453 TYPE_CANONICAL (t) = template_type;
7454 else if (any_template_arguments_need_structural_equality_p (arglist))
7455 /* Some of the template arguments require structural
7456 equality testing, so this template class requires
7457 structural equality testing. */
7458 SET_TYPE_STRUCTURAL_EQUALITY (t);
7459 }
7460 else
7461 gcc_unreachable ();
7462
7463 /* If we called start_enum or pushtag above, this information
7464 will already be set up. */
7465 if (!TYPE_NAME (t))
7466 {
7467 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
7468
7469 type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
7470 DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
7471 DECL_SOURCE_LOCATION (type_decl)
7472 = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
7473 }
7474 else
7475 type_decl = TYPE_NAME (t);
7476
7477 if (CLASS_TYPE_P (template_type))
7478 {
7479 TREE_PRIVATE (type_decl)
7480 = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
7481 TREE_PROTECTED (type_decl)
7482 = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
7483 if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
7484 {
7485 DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
7486 DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
7487 }
7488 }
7489
7490 /* Let's consider the explicit specialization of a member
7491 of a class template specialization that is implicitely instantiated,
7492 e.g.:
7493 template<class T>
7494 struct S
7495 {
7496 template<class U> struct M {}; //#0
7497 };
7498
7499 template<>
7500 template<>
7501 struct S<int>::M<char> //#1
7502 {
7503 int i;
7504 };
7505 [temp.expl.spec]/4 says this is valid.
7506
7507 In this case, when we write:
7508 S<int>::M<char> m;
7509
7510 M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
7511 the one of #0.
7512
7513 When we encounter #1, we want to store the partial instantiation
7514 of M (template<class T> S<int>::M<T>) in it's CLASSTYPE_TI_TEMPLATE.
7515
7516 For all cases other than this "explicit specialization of member of a
7517 class template", we just want to store the most general template into
7518 the CLASSTYPE_TI_TEMPLATE of M.
7519
7520 This case of "explicit specialization of member of a class template"
7521 only happens when:
7522 1/ the enclosing class is an instantiation of, and therefore not
7523 the same as, the context of the most general template, and
7524 2/ we aren't looking at the partial instantiation itself, i.e.
7525 the innermost arguments are not the same as the innermost parms of
7526 the most general template.
7527
7528 So it's only when 1/ and 2/ happens that we want to use the partial
7529 instantiation of the member template in lieu of its most general
7530 template. */
7531
7532 if (PRIMARY_TEMPLATE_P (gen_tmpl)
7533 && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
7534 /* the enclosing class must be an instantiation... */
7535 && CLASS_TYPE_P (context)
7536 && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
7537 {
7538 tree partial_inst_args;
7539 TREE_VEC_LENGTH (arglist)--;
7540 ++processing_template_decl;
7541 partial_inst_args =
7542 tsubst (INNERMOST_TEMPLATE_ARGS
7543 (TYPE_TI_ARGS (TREE_TYPE (gen_tmpl))),
7544 arglist, complain, NULL_TREE);
7545 --processing_template_decl;
7546 TREE_VEC_LENGTH (arglist)++;
7547 use_partial_inst_tmpl =
7548 /*...and we must not be looking at the partial instantiation
7549 itself. */
7550 !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
7551 partial_inst_args);
7552 }
7553
7554 if (!use_partial_inst_tmpl)
7555 /* This case is easy; there are no member templates involved. */
7556 found = gen_tmpl;
7557 else
7558 {
7559 /* This is a full instantiation of a member template. Find
7560 the partial instantiation of which this is an instance. */
7561
7562 /* Temporarily reduce by one the number of levels in the ARGLIST
7563 so as to avoid comparing the last set of arguments. */
7564 TREE_VEC_LENGTH (arglist)--;
7565 found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
7566 TREE_VEC_LENGTH (arglist)++;
7567 /* FOUND is either a proper class type, or an alias
7568 template specialization. In the later case, it's a
7569 TYPE_DECL, resulting from the substituting of arguments
7570 for parameters in the TYPE_DECL of the alias template
7571 done earlier. So be careful while getting the template
7572 of FOUND. */
7573 found = TREE_CODE (found) == TYPE_DECL
7574 ? TYPE_TI_TEMPLATE (TREE_TYPE (found))
7575 : CLASSTYPE_TI_TEMPLATE (found);
7576 }
7577
7578 SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
7579
7580 elt.spec = t;
7581 slot = htab_find_slot_with_hash (type_specializations,
7582 &elt, hash, INSERT);
7583 entry = ggc_alloc_spec_entry ();
7584 *entry = elt;
7585 *slot = entry;
7586
7587 /* Note this use of the partial instantiation so we can check it
7588 later in maybe_process_partial_specialization. */
7589 DECL_TEMPLATE_INSTANTIATIONS (templ)
7590 = tree_cons (arglist, t,
7591 DECL_TEMPLATE_INSTANTIATIONS (templ));
7592
7593 if (TREE_CODE (t) == ENUMERAL_TYPE && !is_dependent_type)
7594 /* Now that the type has been registered on the instantiations
7595 list, we set up the enumerators. Because the enumeration
7596 constants may involve the enumeration type itself, we make
7597 sure to register the type first, and then create the
7598 constants. That way, doing tsubst_expr for the enumeration
7599 constants won't result in recursive calls here; we'll find
7600 the instantiation and exit above. */
7601 tsubst_enum (template_type, t, arglist);
7602
7603 if (CLASS_TYPE_P (template_type) && is_dependent_type)
7604 /* If the type makes use of template parameters, the
7605 code that generates debugging information will crash. */
7606 DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
7607
7608 /* Possibly limit visibility based on template args. */
7609 TREE_PUBLIC (type_decl) = 1;
7610 determine_visibility (type_decl);
7611
7612 return t;
7613 }
7614 }
7615
7616 /* Wrapper for lookup_template_class_1. */
7617
7618 tree
7619 lookup_template_class (tree d1, tree arglist, tree in_decl, tree context,
7620 int entering_scope, tsubst_flags_t complain)
7621 {
7622 tree ret;
7623 timevar_push (TV_TEMPLATE_INST);
7624 ret = lookup_template_class_1 (d1, arglist, in_decl, context,
7625 entering_scope, complain);
7626 timevar_pop (TV_TEMPLATE_INST);
7627 return ret;
7628 }
7629 \f
7630 struct pair_fn_data
7631 {
7632 tree_fn_t fn;
7633 void *data;
7634 /* True when we should also visit template parameters that occur in
7635 non-deduced contexts. */
7636 bool include_nondeduced_p;
7637 struct pointer_set_t *visited;
7638 };
7639
7640 /* Called from for_each_template_parm via walk_tree. */
7641
7642 static tree
7643 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
7644 {
7645 tree t = *tp;
7646 struct pair_fn_data *pfd = (struct pair_fn_data *) d;
7647 tree_fn_t fn = pfd->fn;
7648 void *data = pfd->data;
7649
7650 if (TYPE_P (t)
7651 && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
7652 && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
7653 pfd->include_nondeduced_p))
7654 return error_mark_node;
7655
7656 switch (TREE_CODE (t))
7657 {
7658 case RECORD_TYPE:
7659 if (TYPE_PTRMEMFUNC_P (t))
7660 break;
7661 /* Fall through. */
7662
7663 case UNION_TYPE:
7664 case ENUMERAL_TYPE:
7665 if (!TYPE_TEMPLATE_INFO (t))
7666 *walk_subtrees = 0;
7667 else if (for_each_template_parm (TI_ARGS (TYPE_TEMPLATE_INFO (t)),
7668 fn, data, pfd->visited,
7669 pfd->include_nondeduced_p))
7670 return error_mark_node;
7671 break;
7672
7673 case INTEGER_TYPE:
7674 if (for_each_template_parm (TYPE_MIN_VALUE (t),
7675 fn, data, pfd->visited,
7676 pfd->include_nondeduced_p)
7677 || for_each_template_parm (TYPE_MAX_VALUE (t),
7678 fn, data, pfd->visited,
7679 pfd->include_nondeduced_p))
7680 return error_mark_node;
7681 break;
7682
7683 case METHOD_TYPE:
7684 /* Since we're not going to walk subtrees, we have to do this
7685 explicitly here. */
7686 if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
7687 pfd->visited, pfd->include_nondeduced_p))
7688 return error_mark_node;
7689 /* Fall through. */
7690
7691 case FUNCTION_TYPE:
7692 /* Check the return type. */
7693 if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7694 pfd->include_nondeduced_p))
7695 return error_mark_node;
7696
7697 /* Check the parameter types. Since default arguments are not
7698 instantiated until they are needed, the TYPE_ARG_TYPES may
7699 contain expressions that involve template parameters. But,
7700 no-one should be looking at them yet. And, once they're
7701 instantiated, they don't contain template parameters, so
7702 there's no point in looking at them then, either. */
7703 {
7704 tree parm;
7705
7706 for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
7707 if (for_each_template_parm (TREE_VALUE (parm), fn, data,
7708 pfd->visited, pfd->include_nondeduced_p))
7709 return error_mark_node;
7710
7711 /* Since we've already handled the TYPE_ARG_TYPES, we don't
7712 want walk_tree walking into them itself. */
7713 *walk_subtrees = 0;
7714 }
7715 break;
7716
7717 case TYPEOF_TYPE:
7718 case UNDERLYING_TYPE:
7719 if (pfd->include_nondeduced_p
7720 && for_each_template_parm (TYPE_FIELDS (t), fn, data,
7721 pfd->visited,
7722 pfd->include_nondeduced_p))
7723 return error_mark_node;
7724 break;
7725
7726 case FUNCTION_DECL:
7727 case VAR_DECL:
7728 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
7729 && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
7730 pfd->visited, pfd->include_nondeduced_p))
7731 return error_mark_node;
7732 /* Fall through. */
7733
7734 case PARM_DECL:
7735 case CONST_DECL:
7736 if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
7737 && for_each_template_parm (DECL_INITIAL (t), fn, data,
7738 pfd->visited, pfd->include_nondeduced_p))
7739 return error_mark_node;
7740 if (DECL_CONTEXT (t)
7741 && pfd->include_nondeduced_p
7742 && for_each_template_parm (DECL_CONTEXT (t), fn, data,
7743 pfd->visited, pfd->include_nondeduced_p))
7744 return error_mark_node;
7745 break;
7746
7747 case BOUND_TEMPLATE_TEMPLATE_PARM:
7748 /* Record template parameters such as `T' inside `TT<T>'. */
7749 if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
7750 pfd->include_nondeduced_p))
7751 return error_mark_node;
7752 /* Fall through. */
7753
7754 case TEMPLATE_TEMPLATE_PARM:
7755 case TEMPLATE_TYPE_PARM:
7756 case TEMPLATE_PARM_INDEX:
7757 if (fn && (*fn)(t, data))
7758 return error_mark_node;
7759 else if (!fn)
7760 return error_mark_node;
7761 break;
7762
7763 case TEMPLATE_DECL:
7764 /* A template template parameter is encountered. */
7765 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
7766 && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7767 pfd->include_nondeduced_p))
7768 return error_mark_node;
7769
7770 /* Already substituted template template parameter */
7771 *walk_subtrees = 0;
7772 break;
7773
7774 case TYPENAME_TYPE:
7775 if (!fn
7776 || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
7777 data, pfd->visited,
7778 pfd->include_nondeduced_p))
7779 return error_mark_node;
7780 break;
7781
7782 case CONSTRUCTOR:
7783 if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
7784 && pfd->include_nondeduced_p
7785 && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
7786 (TREE_TYPE (t)), fn, data,
7787 pfd->visited, pfd->include_nondeduced_p))
7788 return error_mark_node;
7789 break;
7790
7791 case INDIRECT_REF:
7792 case COMPONENT_REF:
7793 /* If there's no type, then this thing must be some expression
7794 involving template parameters. */
7795 if (!fn && !TREE_TYPE (t))
7796 return error_mark_node;
7797 break;
7798
7799 case MODOP_EXPR:
7800 case CAST_EXPR:
7801 case IMPLICIT_CONV_EXPR:
7802 case REINTERPRET_CAST_EXPR:
7803 case CONST_CAST_EXPR:
7804 case STATIC_CAST_EXPR:
7805 case DYNAMIC_CAST_EXPR:
7806 case ARROW_EXPR:
7807 case DOTSTAR_EXPR:
7808 case TYPEID_EXPR:
7809 case PSEUDO_DTOR_EXPR:
7810 if (!fn)
7811 return error_mark_node;
7812 break;
7813
7814 default:
7815 break;
7816 }
7817
7818 /* We didn't find any template parameters we liked. */
7819 return NULL_TREE;
7820 }
7821
7822 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
7823 BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
7824 call FN with the parameter and the DATA.
7825 If FN returns nonzero, the iteration is terminated, and
7826 for_each_template_parm returns 1. Otherwise, the iteration
7827 continues. If FN never returns a nonzero value, the value
7828 returned by for_each_template_parm is 0. If FN is NULL, it is
7829 considered to be the function which always returns 1.
7830
7831 If INCLUDE_NONDEDUCED_P, then this routine will also visit template
7832 parameters that occur in non-deduced contexts. When false, only
7833 visits those template parameters that can be deduced. */
7834
7835 static int
7836 for_each_template_parm (tree t, tree_fn_t fn, void* data,
7837 struct pointer_set_t *visited,
7838 bool include_nondeduced_p)
7839 {
7840 struct pair_fn_data pfd;
7841 int result;
7842
7843 /* Set up. */
7844 pfd.fn = fn;
7845 pfd.data = data;
7846 pfd.include_nondeduced_p = include_nondeduced_p;
7847
7848 /* Walk the tree. (Conceptually, we would like to walk without
7849 duplicates, but for_each_template_parm_r recursively calls
7850 for_each_template_parm, so we would need to reorganize a fair
7851 bit to use walk_tree_without_duplicates, so we keep our own
7852 visited list.) */
7853 if (visited)
7854 pfd.visited = visited;
7855 else
7856 pfd.visited = pointer_set_create ();
7857 result = cp_walk_tree (&t,
7858 for_each_template_parm_r,
7859 &pfd,
7860 pfd.visited) != NULL_TREE;
7861
7862 /* Clean up. */
7863 if (!visited)
7864 {
7865 pointer_set_destroy (pfd.visited);
7866 pfd.visited = 0;
7867 }
7868
7869 return result;
7870 }
7871
7872 /* Returns true if T depends on any template parameter. */
7873
7874 int
7875 uses_template_parms (tree t)
7876 {
7877 bool dependent_p;
7878 int saved_processing_template_decl;
7879
7880 saved_processing_template_decl = processing_template_decl;
7881 if (!saved_processing_template_decl)
7882 processing_template_decl = 1;
7883 if (TYPE_P (t))
7884 dependent_p = dependent_type_p (t);
7885 else if (TREE_CODE (t) == TREE_VEC)
7886 dependent_p = any_dependent_template_arguments_p (t);
7887 else if (TREE_CODE (t) == TREE_LIST)
7888 dependent_p = (uses_template_parms (TREE_VALUE (t))
7889 || uses_template_parms (TREE_CHAIN (t)));
7890 else if (TREE_CODE (t) == TYPE_DECL)
7891 dependent_p = dependent_type_p (TREE_TYPE (t));
7892 else if (DECL_P (t)
7893 || EXPR_P (t)
7894 || TREE_CODE (t) == TEMPLATE_PARM_INDEX
7895 || TREE_CODE (t) == OVERLOAD
7896 || BASELINK_P (t)
7897 || TREE_CODE (t) == IDENTIFIER_NODE
7898 || TREE_CODE (t) == TRAIT_EXPR
7899 || TREE_CODE (t) == CONSTRUCTOR
7900 || CONSTANT_CLASS_P (t))
7901 dependent_p = (type_dependent_expression_p (t)
7902 || value_dependent_expression_p (t));
7903 else
7904 {
7905 gcc_assert (t == error_mark_node);
7906 dependent_p = false;
7907 }
7908
7909 processing_template_decl = saved_processing_template_decl;
7910
7911 return dependent_p;
7912 }
7913
7914 /* Returns true if T depends on any template parameter with level LEVEL. */
7915
7916 int
7917 uses_template_parms_level (tree t, int level)
7918 {
7919 return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
7920 /*include_nondeduced_p=*/true);
7921 }
7922
7923 /* Returns TRUE iff INST is an instantiation we don't need to do in an
7924 ill-formed translation unit, i.e. a variable or function that isn't
7925 usable in a constant expression. */
7926
7927 static inline bool
7928 neglectable_inst_p (tree d)
7929 {
7930 return (DECL_P (d)
7931 && !(TREE_CODE (d) == FUNCTION_DECL ? DECL_DECLARED_CONSTEXPR_P (d)
7932 : decl_maybe_constant_var_p (d)));
7933 }
7934
7935 /* Returns TRUE iff we should refuse to instantiate DECL because it's
7936 neglectable and instantiated from within an erroneous instantiation. */
7937
7938 static bool
7939 limit_bad_template_recursion (tree decl)
7940 {
7941 struct tinst_level *lev = current_tinst_level;
7942 int errs = errorcount + sorrycount;
7943 if (lev == NULL || errs == 0 || !neglectable_inst_p (decl))
7944 return false;
7945
7946 for (; lev; lev = lev->next)
7947 if (neglectable_inst_p (lev->decl))
7948 break;
7949
7950 return (lev && errs > lev->errors);
7951 }
7952
7953 static int tinst_depth;
7954 extern int max_tinst_depth;
7955 #ifdef GATHER_STATISTICS
7956 int depth_reached;
7957 #endif
7958 static GTY(()) struct tinst_level *last_error_tinst_level;
7959
7960 /* We're starting to instantiate D; record the template instantiation context
7961 for diagnostics and to restore it later. */
7962
7963 int
7964 push_tinst_level (tree d)
7965 {
7966 struct tinst_level *new_level;
7967
7968 if (tinst_depth >= max_tinst_depth)
7969 {
7970 last_error_tinst_level = current_tinst_level;
7971 if (TREE_CODE (d) == TREE_LIST)
7972 error ("template instantiation depth exceeds maximum of %d (use "
7973 "-ftemplate-depth= to increase the maximum) substituting %qS",
7974 max_tinst_depth, d);
7975 else
7976 error ("template instantiation depth exceeds maximum of %d (use "
7977 "-ftemplate-depth= to increase the maximum) instantiating %qD",
7978 max_tinst_depth, d);
7979
7980 print_instantiation_context ();
7981
7982 return 0;
7983 }
7984
7985 /* If the current instantiation caused problems, don't let it instantiate
7986 anything else. Do allow deduction substitution and decls usable in
7987 constant expressions. */
7988 if (limit_bad_template_recursion (d))
7989 return 0;
7990
7991 new_level = ggc_alloc_tinst_level ();
7992 new_level->decl = d;
7993 new_level->locus = input_location;
7994 new_level->errors = errorcount+sorrycount;
7995 new_level->in_system_header_p = in_system_header;
7996 new_level->next = current_tinst_level;
7997 current_tinst_level = new_level;
7998
7999 ++tinst_depth;
8000 #ifdef GATHER_STATISTICS
8001 if (tinst_depth > depth_reached)
8002 depth_reached = tinst_depth;
8003 #endif
8004
8005 return 1;
8006 }
8007
8008 /* We're done instantiating this template; return to the instantiation
8009 context. */
8010
8011 void
8012 pop_tinst_level (void)
8013 {
8014 /* Restore the filename and line number stashed away when we started
8015 this instantiation. */
8016 input_location = current_tinst_level->locus;
8017 current_tinst_level = current_tinst_level->next;
8018 --tinst_depth;
8019 }
8020
8021 /* We're instantiating a deferred template; restore the template
8022 instantiation context in which the instantiation was requested, which
8023 is one step out from LEVEL. Return the corresponding DECL or TYPE. */
8024
8025 static tree
8026 reopen_tinst_level (struct tinst_level *level)
8027 {
8028 struct tinst_level *t;
8029
8030 tinst_depth = 0;
8031 for (t = level; t; t = t->next)
8032 ++tinst_depth;
8033
8034 current_tinst_level = level;
8035 pop_tinst_level ();
8036 if (current_tinst_level)
8037 current_tinst_level->errors = errorcount+sorrycount;
8038 return level->decl;
8039 }
8040
8041 /* Returns the TINST_LEVEL which gives the original instantiation
8042 context. */
8043
8044 struct tinst_level *
8045 outermost_tinst_level (void)
8046 {
8047 struct tinst_level *level = current_tinst_level;
8048 if (level)
8049 while (level->next)
8050 level = level->next;
8051 return level;
8052 }
8053
8054 /* Returns TRUE if PARM is a parameter of the template TEMPL. */
8055
8056 bool
8057 parameter_of_template_p (tree parm, tree templ)
8058 {
8059 tree parms;
8060 int i;
8061
8062 if (!parm || !templ)
8063 return false;
8064
8065 gcc_assert (DECL_TEMPLATE_PARM_P (parm));
8066 gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
8067
8068 parms = DECL_TEMPLATE_PARMS (templ);
8069 parms = INNERMOST_TEMPLATE_PARMS (parms);
8070
8071 for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
8072 {
8073 tree p = TREE_VALUE (TREE_VEC_ELT (parms, i));
8074 if (parm == p
8075 || (DECL_INITIAL (parm)
8076 && DECL_INITIAL (parm) == DECL_INITIAL (p)))
8077 return true;
8078 }
8079
8080 return false;
8081 }
8082
8083 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
8084 vector of template arguments, as for tsubst.
8085
8086 Returns an appropriate tsubst'd friend declaration. */
8087
8088 static tree
8089 tsubst_friend_function (tree decl, tree args)
8090 {
8091 tree new_friend;
8092
8093 if (TREE_CODE (decl) == FUNCTION_DECL
8094 && DECL_TEMPLATE_INSTANTIATION (decl)
8095 && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
8096 /* This was a friend declared with an explicit template
8097 argument list, e.g.:
8098
8099 friend void f<>(T);
8100
8101 to indicate that f was a template instantiation, not a new
8102 function declaration. Now, we have to figure out what
8103 instantiation of what template. */
8104 {
8105 tree template_id, arglist, fns;
8106 tree new_args;
8107 tree tmpl;
8108 tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
8109
8110 /* Friend functions are looked up in the containing namespace scope.
8111 We must enter that scope, to avoid finding member functions of the
8112 current class with same name. */
8113 push_nested_namespace (ns);
8114 fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
8115 tf_warning_or_error, NULL_TREE,
8116 /*integral_constant_expression_p=*/false);
8117 pop_nested_namespace (ns);
8118 arglist = tsubst (DECL_TI_ARGS (decl), args,
8119 tf_warning_or_error, NULL_TREE);
8120 template_id = lookup_template_function (fns, arglist);
8121
8122 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8123 tmpl = determine_specialization (template_id, new_friend,
8124 &new_args,
8125 /*need_member_template=*/0,
8126 TREE_VEC_LENGTH (args),
8127 tsk_none);
8128 return instantiate_template (tmpl, new_args, tf_error);
8129 }
8130
8131 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8132
8133 /* The NEW_FRIEND will look like an instantiation, to the
8134 compiler, but is not an instantiation from the point of view of
8135 the language. For example, we might have had:
8136
8137 template <class T> struct S {
8138 template <class U> friend void f(T, U);
8139 };
8140
8141 Then, in S<int>, template <class U> void f(int, U) is not an
8142 instantiation of anything. */
8143 if (new_friend == error_mark_node)
8144 return error_mark_node;
8145
8146 DECL_USE_TEMPLATE (new_friend) = 0;
8147 if (TREE_CODE (decl) == TEMPLATE_DECL)
8148 {
8149 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
8150 DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
8151 = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
8152 }
8153
8154 /* The mangled name for the NEW_FRIEND is incorrect. The function
8155 is not a template instantiation and should not be mangled like
8156 one. Therefore, we forget the mangling here; we'll recompute it
8157 later if we need it. */
8158 if (TREE_CODE (new_friend) != TEMPLATE_DECL)
8159 {
8160 SET_DECL_RTL (new_friend, NULL);
8161 SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
8162 }
8163
8164 if (DECL_NAMESPACE_SCOPE_P (new_friend))
8165 {
8166 tree old_decl;
8167 tree new_friend_template_info;
8168 tree new_friend_result_template_info;
8169 tree ns;
8170 int new_friend_is_defn;
8171
8172 /* We must save some information from NEW_FRIEND before calling
8173 duplicate decls since that function will free NEW_FRIEND if
8174 possible. */
8175 new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
8176 new_friend_is_defn =
8177 (DECL_INITIAL (DECL_TEMPLATE_RESULT
8178 (template_for_substitution (new_friend)))
8179 != NULL_TREE);
8180 if (TREE_CODE (new_friend) == TEMPLATE_DECL)
8181 {
8182 /* This declaration is a `primary' template. */
8183 DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
8184
8185 new_friend_result_template_info
8186 = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
8187 }
8188 else
8189 new_friend_result_template_info = NULL_TREE;
8190
8191 /* Make the init_value nonzero so pushdecl knows this is a defn. */
8192 if (new_friend_is_defn)
8193 DECL_INITIAL (new_friend) = error_mark_node;
8194
8195 /* Inside pushdecl_namespace_level, we will push into the
8196 current namespace. However, the friend function should go
8197 into the namespace of the template. */
8198 ns = decl_namespace_context (new_friend);
8199 push_nested_namespace (ns);
8200 old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
8201 pop_nested_namespace (ns);
8202
8203 if (old_decl == error_mark_node)
8204 return error_mark_node;
8205
8206 if (old_decl != new_friend)
8207 {
8208 /* This new friend declaration matched an existing
8209 declaration. For example, given:
8210
8211 template <class T> void f(T);
8212 template <class U> class C {
8213 template <class T> friend void f(T) {}
8214 };
8215
8216 the friend declaration actually provides the definition
8217 of `f', once C has been instantiated for some type. So,
8218 old_decl will be the out-of-class template declaration,
8219 while new_friend is the in-class definition.
8220
8221 But, if `f' was called before this point, the
8222 instantiation of `f' will have DECL_TI_ARGS corresponding
8223 to `T' but not to `U', references to which might appear
8224 in the definition of `f'. Previously, the most general
8225 template for an instantiation of `f' was the out-of-class
8226 version; now it is the in-class version. Therefore, we
8227 run through all specialization of `f', adding to their
8228 DECL_TI_ARGS appropriately. In particular, they need a
8229 new set of outer arguments, corresponding to the
8230 arguments for this class instantiation.
8231
8232 The same situation can arise with something like this:
8233
8234 friend void f(int);
8235 template <class T> class C {
8236 friend void f(T) {}
8237 };
8238
8239 when `C<int>' is instantiated. Now, `f(int)' is defined
8240 in the class. */
8241
8242 if (!new_friend_is_defn)
8243 /* On the other hand, if the in-class declaration does
8244 *not* provide a definition, then we don't want to alter
8245 existing definitions. We can just leave everything
8246 alone. */
8247 ;
8248 else
8249 {
8250 tree new_template = TI_TEMPLATE (new_friend_template_info);
8251 tree new_args = TI_ARGS (new_friend_template_info);
8252
8253 /* Overwrite whatever template info was there before, if
8254 any, with the new template information pertaining to
8255 the declaration. */
8256 DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
8257
8258 if (TREE_CODE (old_decl) != TEMPLATE_DECL)
8259 {
8260 /* We should have called reregister_specialization in
8261 duplicate_decls. */
8262 gcc_assert (retrieve_specialization (new_template,
8263 new_args, 0)
8264 == old_decl);
8265
8266 /* Instantiate it if the global has already been used. */
8267 if (DECL_ODR_USED (old_decl))
8268 instantiate_decl (old_decl, /*defer_ok=*/true,
8269 /*expl_inst_class_mem_p=*/false);
8270 }
8271 else
8272 {
8273 tree t;
8274
8275 /* Indicate that the old function template is a partial
8276 instantiation. */
8277 DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
8278 = new_friend_result_template_info;
8279
8280 gcc_assert (new_template
8281 == most_general_template (new_template));
8282 gcc_assert (new_template != old_decl);
8283
8284 /* Reassign any specializations already in the hash table
8285 to the new more general template, and add the
8286 additional template args. */
8287 for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
8288 t != NULL_TREE;
8289 t = TREE_CHAIN (t))
8290 {
8291 tree spec = TREE_VALUE (t);
8292 spec_entry elt;
8293
8294 elt.tmpl = old_decl;
8295 elt.args = DECL_TI_ARGS (spec);
8296 elt.spec = NULL_TREE;
8297
8298 htab_remove_elt (decl_specializations, &elt);
8299
8300 DECL_TI_ARGS (spec)
8301 = add_outermost_template_args (new_args,
8302 DECL_TI_ARGS (spec));
8303
8304 register_specialization
8305 (spec, new_template, DECL_TI_ARGS (spec), true, 0);
8306
8307 }
8308 DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
8309 }
8310 }
8311
8312 /* The information from NEW_FRIEND has been merged into OLD_DECL
8313 by duplicate_decls. */
8314 new_friend = old_decl;
8315 }
8316 }
8317 else
8318 {
8319 tree context = DECL_CONTEXT (new_friend);
8320 bool dependent_p;
8321
8322 /* In the code
8323 template <class T> class C {
8324 template <class U> friend void C1<U>::f (); // case 1
8325 friend void C2<T>::f (); // case 2
8326 };
8327 we only need to make sure CONTEXT is a complete type for
8328 case 2. To distinguish between the two cases, we note that
8329 CONTEXT of case 1 remains dependent type after tsubst while
8330 this isn't true for case 2. */
8331 ++processing_template_decl;
8332 dependent_p = dependent_type_p (context);
8333 --processing_template_decl;
8334
8335 if (!dependent_p
8336 && !complete_type_or_else (context, NULL_TREE))
8337 return error_mark_node;
8338
8339 if (COMPLETE_TYPE_P (context))
8340 {
8341 /* Check to see that the declaration is really present, and,
8342 possibly obtain an improved declaration. */
8343 tree fn = check_classfn (context,
8344 new_friend, NULL_TREE);
8345
8346 if (fn)
8347 new_friend = fn;
8348 }
8349 }
8350
8351 return new_friend;
8352 }
8353
8354 /* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
8355 template arguments, as for tsubst.
8356
8357 Returns an appropriate tsubst'd friend type or error_mark_node on
8358 failure. */
8359
8360 static tree
8361 tsubst_friend_class (tree friend_tmpl, tree args)
8362 {
8363 tree friend_type;
8364 tree tmpl;
8365 tree context;
8366
8367 context = CP_DECL_CONTEXT (friend_tmpl);
8368
8369 if (context != global_namespace)
8370 {
8371 if (TREE_CODE (context) == NAMESPACE_DECL)
8372 push_nested_namespace (context);
8373 else
8374 push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
8375 }
8376
8377 /* Look for a class template declaration. We look for hidden names
8378 because two friend declarations of the same template are the
8379 same. For example, in:
8380
8381 struct A {
8382 template <typename> friend class F;
8383 };
8384 template <typename> struct B {
8385 template <typename> friend class F;
8386 };
8387
8388 both F templates are the same. */
8389 tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
8390 /*block_p=*/true, 0,
8391 LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
8392
8393 /* But, if we don't find one, it might be because we're in a
8394 situation like this:
8395
8396 template <class T>
8397 struct S {
8398 template <class U>
8399 friend struct S;
8400 };
8401
8402 Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
8403 for `S<int>', not the TEMPLATE_DECL. */
8404 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
8405 {
8406 tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
8407 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
8408 }
8409
8410 if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
8411 {
8412 /* The friend template has already been declared. Just
8413 check to see that the declarations match, and install any new
8414 default parameters. We must tsubst the default parameters,
8415 of course. We only need the innermost template parameters
8416 because that is all that redeclare_class_template will look
8417 at. */
8418 if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
8419 > TMPL_ARGS_DEPTH (args))
8420 {
8421 tree parms;
8422 location_t saved_input_location;
8423 parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
8424 args, tf_warning_or_error);
8425
8426 saved_input_location = input_location;
8427 input_location = DECL_SOURCE_LOCATION (friend_tmpl);
8428 redeclare_class_template (TREE_TYPE (tmpl), parms);
8429 input_location = saved_input_location;
8430
8431 }
8432
8433 friend_type = TREE_TYPE (tmpl);
8434 }
8435 else
8436 {
8437 /* The friend template has not already been declared. In this
8438 case, the instantiation of the template class will cause the
8439 injection of this template into the global scope. */
8440 tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
8441 if (tmpl == error_mark_node)
8442 return error_mark_node;
8443
8444 /* The new TMPL is not an instantiation of anything, so we
8445 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE for
8446 the new type because that is supposed to be the corresponding
8447 template decl, i.e., TMPL. */
8448 DECL_USE_TEMPLATE (tmpl) = 0;
8449 DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
8450 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
8451 CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
8452 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
8453
8454 /* Inject this template into the global scope. */
8455 friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
8456 }
8457
8458 if (context != global_namespace)
8459 {
8460 if (TREE_CODE (context) == NAMESPACE_DECL)
8461 pop_nested_namespace (context);
8462 else
8463 pop_nested_class ();
8464 }
8465
8466 return friend_type;
8467 }
8468
8469 /* Returns zero if TYPE cannot be completed later due to circularity.
8470 Otherwise returns one. */
8471
8472 static int
8473 can_complete_type_without_circularity (tree type)
8474 {
8475 if (type == NULL_TREE || type == error_mark_node)
8476 return 0;
8477 else if (COMPLETE_TYPE_P (type))
8478 return 1;
8479 else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
8480 return can_complete_type_without_circularity (TREE_TYPE (type));
8481 else if (CLASS_TYPE_P (type)
8482 && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
8483 return 0;
8484 else
8485 return 1;
8486 }
8487
8488 /* Apply any attributes which had to be deferred until instantiation
8489 time. DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
8490 ARGS, COMPLAIN, IN_DECL are as tsubst. */
8491
8492 static void
8493 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
8494 tree args, tsubst_flags_t complain, tree in_decl)
8495 {
8496 tree last_dep = NULL_TREE;
8497 tree t;
8498 tree *p;
8499
8500 for (t = attributes; t; t = TREE_CHAIN (t))
8501 if (ATTR_IS_DEPENDENT (t))
8502 {
8503 last_dep = t;
8504 attributes = copy_list (attributes);
8505 break;
8506 }
8507
8508 if (DECL_P (*decl_p))
8509 {
8510 if (TREE_TYPE (*decl_p) == error_mark_node)
8511 return;
8512 p = &DECL_ATTRIBUTES (*decl_p);
8513 }
8514 else
8515 p = &TYPE_ATTRIBUTES (*decl_p);
8516
8517 if (last_dep)
8518 {
8519 tree late_attrs = NULL_TREE;
8520 tree *q = &late_attrs;
8521
8522 for (*p = attributes; *p; )
8523 {
8524 t = *p;
8525 if (ATTR_IS_DEPENDENT (t))
8526 {
8527 *p = TREE_CHAIN (t);
8528 TREE_CHAIN (t) = NULL_TREE;
8529 /* If the first attribute argument is an identifier, don't
8530 pass it through tsubst. Attributes like mode, format,
8531 cleanup and several target specific attributes expect it
8532 unmodified. */
8533 if (TREE_VALUE (t)
8534 && TREE_CODE (TREE_VALUE (t)) == TREE_LIST
8535 && TREE_VALUE (TREE_VALUE (t))
8536 && (TREE_CODE (TREE_VALUE (TREE_VALUE (t)))
8537 == IDENTIFIER_NODE))
8538 {
8539 tree chain
8540 = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
8541 in_decl,
8542 /*integral_constant_expression_p=*/false);
8543 if (chain != TREE_CHAIN (TREE_VALUE (t)))
8544 TREE_VALUE (t)
8545 = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
8546 chain);
8547 }
8548 else
8549 TREE_VALUE (t)
8550 = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
8551 /*integral_constant_expression_p=*/false);
8552 *q = t;
8553 q = &TREE_CHAIN (t);
8554 }
8555 else
8556 p = &TREE_CHAIN (t);
8557 }
8558
8559 cplus_decl_attributes (decl_p, late_attrs, attr_flags);
8560 }
8561 }
8562
8563 /* Perform (or defer) access check for typedefs that were referenced
8564 from within the template TMPL code.
8565 This is a subroutine of instantiate_template and instantiate_class_template.
8566 TMPL is the template to consider and TARGS is the list of arguments of
8567 that template. */
8568
8569 static void
8570 perform_typedefs_access_check (tree tmpl, tree targs)
8571 {
8572 location_t saved_location;
8573 int i;
8574 qualified_typedef_usage_t *iter;
8575
8576 if (!tmpl
8577 || (!CLASS_TYPE_P (tmpl)
8578 && TREE_CODE (tmpl) != FUNCTION_DECL))
8579 return;
8580
8581 saved_location = input_location;
8582 FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
8583 get_types_needing_access_check (tmpl),
8584 i, iter)
8585 {
8586 tree type_decl = iter->typedef_decl;
8587 tree type_scope = iter->context;
8588
8589 if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
8590 continue;
8591
8592 if (uses_template_parms (type_decl))
8593 type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
8594 if (uses_template_parms (type_scope))
8595 type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
8596
8597 /* Make access check error messages point to the location
8598 of the use of the typedef. */
8599 input_location = iter->locus;
8600 perform_or_defer_access_check (TYPE_BINFO (type_scope),
8601 type_decl, type_decl);
8602 }
8603 input_location = saved_location;
8604 }
8605
8606 static tree
8607 instantiate_class_template_1 (tree type)
8608 {
8609 tree templ, args, pattern, t, member;
8610 tree typedecl;
8611 tree pbinfo;
8612 tree base_list;
8613 unsigned int saved_maximum_field_alignment;
8614
8615 if (type == error_mark_node)
8616 return error_mark_node;
8617
8618 if (COMPLETE_OR_OPEN_TYPE_P (type)
8619 || uses_template_parms (type))
8620 return type;
8621
8622 /* Figure out which template is being instantiated. */
8623 templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
8624 gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
8625
8626 /* Determine what specialization of the original template to
8627 instantiate. */
8628 t = most_specialized_class (type, templ, tf_warning_or_error);
8629 if (t == error_mark_node)
8630 {
8631 TYPE_BEING_DEFINED (type) = 1;
8632 return error_mark_node;
8633 }
8634 else if (t)
8635 {
8636 /* This TYPE is actually an instantiation of a partial
8637 specialization. We replace the innermost set of ARGS with
8638 the arguments appropriate for substitution. For example,
8639 given:
8640
8641 template <class T> struct S {};
8642 template <class T> struct S<T*> {};
8643
8644 and supposing that we are instantiating S<int*>, ARGS will
8645 presently be {int*} -- but we need {int}. */
8646 pattern = TREE_TYPE (t);
8647 args = TREE_PURPOSE (t);
8648 }
8649 else
8650 {
8651 pattern = TREE_TYPE (templ);
8652 args = CLASSTYPE_TI_ARGS (type);
8653 }
8654
8655 /* If the template we're instantiating is incomplete, then clearly
8656 there's nothing we can do. */
8657 if (!COMPLETE_TYPE_P (pattern))
8658 return type;
8659
8660 /* If we've recursively instantiated too many templates, stop. */
8661 if (! push_tinst_level (type))
8662 return type;
8663
8664 /* Now we're really doing the instantiation. Mark the type as in
8665 the process of being defined. */
8666 TYPE_BEING_DEFINED (type) = 1;
8667
8668 /* We may be in the middle of deferred access check. Disable
8669 it now. */
8670 push_deferring_access_checks (dk_no_deferred);
8671
8672 push_to_top_level ();
8673 /* Use #pragma pack from the template context. */
8674 saved_maximum_field_alignment = maximum_field_alignment;
8675 maximum_field_alignment = TYPE_PRECISION (pattern);
8676
8677 SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
8678
8679 /* Set the input location to the most specialized template definition.
8680 This is needed if tsubsting causes an error. */
8681 typedecl = TYPE_MAIN_DECL (pattern);
8682 input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) =
8683 DECL_SOURCE_LOCATION (typedecl);
8684
8685 TYPE_PACKED (type) = TYPE_PACKED (pattern);
8686 TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
8687 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
8688 TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
8689 if (ANON_AGGR_TYPE_P (pattern))
8690 SET_ANON_AGGR_TYPE_P (type);
8691 if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
8692 {
8693 CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
8694 CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
8695 /* Adjust visibility for template arguments. */
8696 determine_visibility (TYPE_MAIN_DECL (type));
8697 }
8698 CLASSTYPE_FINAL (type) = CLASSTYPE_FINAL (pattern);
8699
8700 pbinfo = TYPE_BINFO (pattern);
8701
8702 /* We should never instantiate a nested class before its enclosing
8703 class; we need to look up the nested class by name before we can
8704 instantiate it, and that lookup should instantiate the enclosing
8705 class. */
8706 gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
8707 || COMPLETE_OR_OPEN_TYPE_P (TYPE_CONTEXT (type)));
8708
8709 base_list = NULL_TREE;
8710 if (BINFO_N_BASE_BINFOS (pbinfo))
8711 {
8712 tree pbase_binfo;
8713 tree pushed_scope;
8714 int i;
8715
8716 /* We must enter the scope containing the type, as that is where
8717 the accessibility of types named in dependent bases are
8718 looked up from. */
8719 pushed_scope = push_scope (CP_TYPE_CONTEXT (type));
8720
8721 /* Substitute into each of the bases to determine the actual
8722 basetypes. */
8723 for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
8724 {
8725 tree base;
8726 tree access = BINFO_BASE_ACCESS (pbinfo, i);
8727 tree expanded_bases = NULL_TREE;
8728 int idx, len = 1;
8729
8730 if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
8731 {
8732 expanded_bases =
8733 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
8734 args, tf_error, NULL_TREE);
8735 if (expanded_bases == error_mark_node)
8736 continue;
8737
8738 len = TREE_VEC_LENGTH (expanded_bases);
8739 }
8740
8741 for (idx = 0; idx < len; idx++)
8742 {
8743 if (expanded_bases)
8744 /* Extract the already-expanded base class. */
8745 base = TREE_VEC_ELT (expanded_bases, idx);
8746 else
8747 /* Substitute to figure out the base class. */
8748 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error,
8749 NULL_TREE);
8750
8751 if (base == error_mark_node)
8752 continue;
8753
8754 base_list = tree_cons (access, base, base_list);
8755 if (BINFO_VIRTUAL_P (pbase_binfo))
8756 TREE_TYPE (base_list) = integer_type_node;
8757 }
8758 }
8759
8760 /* The list is now in reverse order; correct that. */
8761 base_list = nreverse (base_list);
8762
8763 if (pushed_scope)
8764 pop_scope (pushed_scope);
8765 }
8766 /* Now call xref_basetypes to set up all the base-class
8767 information. */
8768 xref_basetypes (type, base_list);
8769
8770 apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
8771 (int) ATTR_FLAG_TYPE_IN_PLACE,
8772 args, tf_error, NULL_TREE);
8773 fixup_attribute_variants (type);
8774
8775 /* Now that our base classes are set up, enter the scope of the
8776 class, so that name lookups into base classes, etc. will work
8777 correctly. This is precisely analogous to what we do in
8778 begin_class_definition when defining an ordinary non-template
8779 class, except we also need to push the enclosing classes. */
8780 push_nested_class (type);
8781
8782 /* Now members are processed in the order of declaration. */
8783 for (member = CLASSTYPE_DECL_LIST (pattern);
8784 member; member = TREE_CHAIN (member))
8785 {
8786 tree t = TREE_VALUE (member);
8787
8788 if (TREE_PURPOSE (member))
8789 {
8790 if (TYPE_P (t))
8791 {
8792 /* Build new CLASSTYPE_NESTED_UTDS. */
8793
8794 tree newtag;
8795 bool class_template_p;
8796
8797 class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
8798 && TYPE_LANG_SPECIFIC (t)
8799 && CLASSTYPE_IS_TEMPLATE (t));
8800 /* If the member is a class template, then -- even after
8801 substitution -- there may be dependent types in the
8802 template argument list for the class. We increment
8803 PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
8804 that function will assume that no types are dependent
8805 when outside of a template. */
8806 if (class_template_p)
8807 ++processing_template_decl;
8808 newtag = tsubst (t, args, tf_error, NULL_TREE);
8809 if (class_template_p)
8810 --processing_template_decl;
8811 if (newtag == error_mark_node)
8812 continue;
8813
8814 if (TREE_CODE (newtag) != ENUMERAL_TYPE)
8815 {
8816 tree name = TYPE_IDENTIFIER (t);
8817
8818 if (class_template_p)
8819 /* Unfortunately, lookup_template_class sets
8820 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
8821 instantiation (i.e., for the type of a member
8822 template class nested within a template class.)
8823 This behavior is required for
8824 maybe_process_partial_specialization to work
8825 correctly, but is not accurate in this case;
8826 the TAG is not an instantiation of anything.
8827 (The corresponding TEMPLATE_DECL is an
8828 instantiation, but the TYPE is not.) */
8829 CLASSTYPE_USE_TEMPLATE (newtag) = 0;
8830
8831 /* Now, we call pushtag to put this NEWTAG into the scope of
8832 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
8833 pushtag calling push_template_decl. We don't have to do
8834 this for enums because it will already have been done in
8835 tsubst_enum. */
8836 if (name)
8837 SET_IDENTIFIER_TYPE_VALUE (name, newtag);
8838 pushtag (name, newtag, /*tag_scope=*/ts_current);
8839 }
8840 }
8841 else if (TREE_CODE (t) == FUNCTION_DECL
8842 || DECL_FUNCTION_TEMPLATE_P (t))
8843 {
8844 /* Build new TYPE_METHODS. */
8845 tree r;
8846
8847 if (TREE_CODE (t) == TEMPLATE_DECL)
8848 ++processing_template_decl;
8849 r = tsubst (t, args, tf_error, NULL_TREE);
8850 if (TREE_CODE (t) == TEMPLATE_DECL)
8851 --processing_template_decl;
8852 set_current_access_from_decl (r);
8853 finish_member_declaration (r);
8854 /* Instantiate members marked with attribute used. */
8855 if (r != error_mark_node && DECL_PRESERVE_P (r))
8856 mark_used (r);
8857 }
8858 else
8859 {
8860 /* Build new TYPE_FIELDS. */
8861 if (TREE_CODE (t) == STATIC_ASSERT)
8862 {
8863 tree condition =
8864 tsubst_expr (STATIC_ASSERT_CONDITION (t), args,
8865 tf_warning_or_error, NULL_TREE,
8866 /*integral_constant_expression_p=*/true);
8867 finish_static_assert (condition,
8868 STATIC_ASSERT_MESSAGE (t),
8869 STATIC_ASSERT_SOURCE_LOCATION (t),
8870 /*member_p=*/true);
8871 }
8872 else if (TREE_CODE (t) != CONST_DECL)
8873 {
8874 tree r;
8875
8876 /* The file and line for this declaration, to
8877 assist in error message reporting. Since we
8878 called push_tinst_level above, we don't need to
8879 restore these. */
8880 input_location = DECL_SOURCE_LOCATION (t);
8881
8882 if (TREE_CODE (t) == TEMPLATE_DECL)
8883 ++processing_template_decl;
8884 r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
8885 if (TREE_CODE (t) == TEMPLATE_DECL)
8886 --processing_template_decl;
8887 if (TREE_CODE (r) == VAR_DECL)
8888 {
8889 /* In [temp.inst]:
8890
8891 [t]he initialization (and any associated
8892 side-effects) of a static data member does
8893 not occur unless the static data member is
8894 itself used in a way that requires the
8895 definition of the static data member to
8896 exist.
8897
8898 Therefore, we do not substitute into the
8899 initialized for the static data member here. */
8900 finish_static_data_member_decl
8901 (r,
8902 /*init=*/NULL_TREE,
8903 /*init_const_expr_p=*/false,
8904 /*asmspec_tree=*/NULL_TREE,
8905 /*flags=*/0);
8906 /* Instantiate members marked with attribute used. */
8907 if (r != error_mark_node && DECL_PRESERVE_P (r))
8908 mark_used (r);
8909 }
8910 else if (TREE_CODE (r) == FIELD_DECL)
8911 {
8912 /* Determine whether R has a valid type and can be
8913 completed later. If R is invalid, then it is
8914 replaced by error_mark_node so that it will not be
8915 added to TYPE_FIELDS. */
8916 tree rtype = TREE_TYPE (r);
8917 if (can_complete_type_without_circularity (rtype))
8918 complete_type (rtype);
8919
8920 if (!COMPLETE_TYPE_P (rtype))
8921 {
8922 cxx_incomplete_type_error (r, rtype);
8923 r = error_mark_node;
8924 }
8925 }
8926
8927 /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
8928 such a thing will already have been added to the field
8929 list by tsubst_enum in finish_member_declaration in the
8930 CLASSTYPE_NESTED_UTDS case above. */
8931 if (!(TREE_CODE (r) == TYPE_DECL
8932 && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
8933 && DECL_ARTIFICIAL (r)))
8934 {
8935 set_current_access_from_decl (r);
8936 finish_member_declaration (r);
8937 }
8938 }
8939 }
8940 }
8941 else
8942 {
8943 if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
8944 {
8945 /* Build new CLASSTYPE_FRIEND_CLASSES. */
8946
8947 tree friend_type = t;
8948 bool adjust_processing_template_decl = false;
8949
8950 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
8951 {
8952 /* template <class T> friend class C; */
8953 friend_type = tsubst_friend_class (friend_type, args);
8954 adjust_processing_template_decl = true;
8955 }
8956 else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
8957 {
8958 /* template <class T> friend class C::D; */
8959 friend_type = tsubst (friend_type, args,
8960 tf_warning_or_error, NULL_TREE);
8961 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
8962 friend_type = TREE_TYPE (friend_type);
8963 adjust_processing_template_decl = true;
8964 }
8965 else if (TREE_CODE (friend_type) == TYPENAME_TYPE
8966 || TREE_CODE (friend_type) == TEMPLATE_TYPE_PARM)
8967 {
8968 /* This could be either
8969
8970 friend class T::C;
8971
8972 when dependent_type_p is false or
8973
8974 template <class U> friend class T::C;
8975
8976 otherwise. */
8977 friend_type = tsubst (friend_type, args,
8978 tf_warning_or_error, NULL_TREE);
8979 /* Bump processing_template_decl for correct
8980 dependent_type_p calculation. */
8981 ++processing_template_decl;
8982 if (dependent_type_p (friend_type))
8983 adjust_processing_template_decl = true;
8984 --processing_template_decl;
8985 }
8986 else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
8987 && hidden_name_p (TYPE_NAME (friend_type)))
8988 {
8989 /* friend class C;
8990
8991 where C hasn't been declared yet. Let's lookup name
8992 from namespace scope directly, bypassing any name that
8993 come from dependent base class. */
8994 tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
8995
8996 /* The call to xref_tag_from_type does injection for friend
8997 classes. */
8998 push_nested_namespace (ns);
8999 friend_type =
9000 xref_tag_from_type (friend_type, NULL_TREE,
9001 /*tag_scope=*/ts_current);
9002 pop_nested_namespace (ns);
9003 }
9004 else if (uses_template_parms (friend_type))
9005 /* friend class C<T>; */
9006 friend_type = tsubst (friend_type, args,
9007 tf_warning_or_error, NULL_TREE);
9008 /* Otherwise it's
9009
9010 friend class C;
9011
9012 where C is already declared or
9013
9014 friend class C<int>;
9015
9016 We don't have to do anything in these cases. */
9017
9018 if (adjust_processing_template_decl)
9019 /* Trick make_friend_class into realizing that the friend
9020 we're adding is a template, not an ordinary class. It's
9021 important that we use make_friend_class since it will
9022 perform some error-checking and output cross-reference
9023 information. */
9024 ++processing_template_decl;
9025
9026 if (friend_type != error_mark_node)
9027 make_friend_class (type, friend_type, /*complain=*/false);
9028
9029 if (adjust_processing_template_decl)
9030 --processing_template_decl;
9031 }
9032 else
9033 {
9034 /* Build new DECL_FRIENDLIST. */
9035 tree r;
9036
9037 /* The file and line for this declaration, to
9038 assist in error message reporting. Since we
9039 called push_tinst_level above, we don't need to
9040 restore these. */
9041 input_location = DECL_SOURCE_LOCATION (t);
9042
9043 if (TREE_CODE (t) == TEMPLATE_DECL)
9044 {
9045 ++processing_template_decl;
9046 push_deferring_access_checks (dk_no_check);
9047 }
9048
9049 r = tsubst_friend_function (t, args);
9050 add_friend (type, r, /*complain=*/false);
9051 if (TREE_CODE (t) == TEMPLATE_DECL)
9052 {
9053 pop_deferring_access_checks ();
9054 --processing_template_decl;
9055 }
9056 }
9057 }
9058 }
9059
9060 if (CLASSTYPE_LAMBDA_EXPR (type))
9061 {
9062 tree lambda = CLASSTYPE_LAMBDA_EXPR (type);
9063 if (LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (lambda))
9064 {
9065 apply_lambda_return_type (lambda, void_type_node);
9066 LAMBDA_EXPR_RETURN_TYPE (lambda) = NULL_TREE;
9067 }
9068 instantiate_decl (lambda_function (type), false, false);
9069 maybe_add_lambda_conv_op (type);
9070 }
9071
9072 /* Set the file and line number information to whatever is given for
9073 the class itself. This puts error messages involving generated
9074 implicit functions at a predictable point, and the same point
9075 that would be used for non-template classes. */
9076 input_location = DECL_SOURCE_LOCATION (typedecl);
9077
9078 unreverse_member_declarations (type);
9079 finish_struct_1 (type);
9080 TYPE_BEING_DEFINED (type) = 0;
9081
9082 /* We don't instantiate default arguments for member functions. 14.7.1:
9083
9084 The implicit instantiation of a class template specialization causes
9085 the implicit instantiation of the declarations, but not of the
9086 definitions or default arguments, of the class member functions,
9087 member classes, static data members and member templates.... */
9088
9089 /* Some typedefs referenced from within the template code need to be access
9090 checked at template instantiation time, i.e now. These types were
9091 added to the template at parsing time. Let's get those and perform
9092 the access checks then. */
9093 perform_typedefs_access_check (pattern, args);
9094 perform_deferred_access_checks ();
9095 pop_nested_class ();
9096 maximum_field_alignment = saved_maximum_field_alignment;
9097 pop_from_top_level ();
9098 pop_deferring_access_checks ();
9099 pop_tinst_level ();
9100
9101 /* The vtable for a template class can be emitted in any translation
9102 unit in which the class is instantiated. When there is no key
9103 method, however, finish_struct_1 will already have added TYPE to
9104 the keyed_classes list. */
9105 if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
9106 keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
9107
9108 return type;
9109 }
9110
9111 /* Wrapper for instantiate_class_template_1. */
9112
9113 tree
9114 instantiate_class_template (tree type)
9115 {
9116 tree ret;
9117 timevar_push (TV_TEMPLATE_INST);
9118 ret = instantiate_class_template_1 (type);
9119 timevar_pop (TV_TEMPLATE_INST);
9120 return ret;
9121 }
9122
9123 static tree
9124 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9125 {
9126 tree r;
9127
9128 if (!t)
9129 r = t;
9130 else if (TYPE_P (t))
9131 r = tsubst (t, args, complain, in_decl);
9132 else
9133 {
9134 if (!(complain & tf_warning))
9135 ++c_inhibit_evaluation_warnings;
9136 r = tsubst_expr (t, args, complain, in_decl,
9137 /*integral_constant_expression_p=*/true);
9138 if (!(complain & tf_warning))
9139 --c_inhibit_evaluation_warnings;
9140 /* Preserve the raw-reference nature of T. */
9141 if (TREE_TYPE (t) && TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE
9142 && REFERENCE_REF_P (r))
9143 r = TREE_OPERAND (r, 0);
9144 }
9145 return r;
9146 }
9147
9148 /* Given a function parameter pack TMPL_PARM and some function parameters
9149 instantiated from it at *SPEC_P, return a NONTYPE_ARGUMENT_PACK of them
9150 and set *SPEC_P to point at the next point in the list. */
9151
9152 static tree
9153 extract_fnparm_pack (tree tmpl_parm, tree *spec_p)
9154 {
9155 /* Collect all of the extra "packed" parameters into an
9156 argument pack. */
9157 tree parmvec;
9158 tree parmtypevec;
9159 tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
9160 tree argtypepack = cxx_make_type (TYPE_ARGUMENT_PACK);
9161 tree spec_parm = *spec_p;
9162 int i, len;
9163
9164 for (len = 0; spec_parm; ++len, spec_parm = TREE_CHAIN (spec_parm))
9165 if (tmpl_parm
9166 && !function_parameter_expanded_from_pack_p (spec_parm, tmpl_parm))
9167 break;
9168
9169 /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters. */
9170 parmvec = make_tree_vec (len);
9171 parmtypevec = make_tree_vec (len);
9172 spec_parm = *spec_p;
9173 for (i = 0; i < len; i++, spec_parm = DECL_CHAIN (spec_parm))
9174 {
9175 TREE_VEC_ELT (parmvec, i) = spec_parm;
9176 TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
9177 }
9178
9179 /* Build the argument packs. */
9180 SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
9181 SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
9182 TREE_TYPE (argpack) = argtypepack;
9183 *spec_p = spec_parm;
9184
9185 return argpack;
9186 }
9187
9188 /* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
9189 NONTYPE_ARGUMENT_PACK. */
9190
9191 static tree
9192 make_fnparm_pack (tree spec_parm)
9193 {
9194 return extract_fnparm_pack (NULL_TREE, &spec_parm);
9195 }
9196
9197 /* Substitute ARGS into T, which is an pack expansion
9198 (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
9199 TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
9200 (if only a partial substitution could be performed) or
9201 ERROR_MARK_NODE if there was an error. */
9202 tree
9203 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
9204 tree in_decl)
9205 {
9206 tree pattern;
9207 tree pack, packs = NULL_TREE;
9208 bool unsubstituted_packs = false;
9209 int i, len = -1;
9210 tree result;
9211 htab_t saved_local_specializations = NULL;
9212
9213 gcc_assert (PACK_EXPANSION_P (t));
9214 pattern = PACK_EXPANSION_PATTERN (t);
9215
9216 /* Determine the argument packs that will instantiate the parameter
9217 packs used in the expansion expression. While we're at it,
9218 compute the number of arguments to be expanded and make sure it
9219 is consistent. */
9220 for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack;
9221 pack = TREE_CHAIN (pack))
9222 {
9223 tree parm_pack = TREE_VALUE (pack);
9224 tree arg_pack = NULL_TREE;
9225 tree orig_arg = NULL_TREE;
9226
9227 if (TREE_CODE (parm_pack) == BASES)
9228 {
9229 if (BASES_DIRECT (parm_pack))
9230 return calculate_direct_bases (tsubst_expr (BASES_TYPE (parm_pack),
9231 args, complain, in_decl, false));
9232 else
9233 return calculate_bases (tsubst_expr (BASES_TYPE (parm_pack),
9234 args, complain, in_decl, false));
9235 }
9236 if (TREE_CODE (parm_pack) == PARM_DECL)
9237 {
9238 if (!cp_unevaluated_operand)
9239 arg_pack = retrieve_local_specialization (parm_pack);
9240 else
9241 {
9242 /* We can't rely on local_specializations for a parameter
9243 name used later in a function declaration (such as in a
9244 late-specified return type). Even if it exists, it might
9245 have the wrong value for a recursive call. Just make a
9246 dummy decl, since it's only used for its type. */
9247 arg_pack = tsubst_decl (parm_pack, args, complain);
9248 if (arg_pack && FUNCTION_PARAMETER_PACK_P (arg_pack))
9249 /* Partial instantiation of the parm_pack, we can't build
9250 up an argument pack yet. */
9251 arg_pack = NULL_TREE;
9252 else
9253 arg_pack = make_fnparm_pack (arg_pack);
9254 }
9255 }
9256 else
9257 {
9258 int level, idx, levels;
9259 template_parm_level_and_index (parm_pack, &level, &idx);
9260
9261 levels = TMPL_ARGS_DEPTH (args);
9262 if (level <= levels)
9263 arg_pack = TMPL_ARG (args, level, idx);
9264 }
9265
9266 orig_arg = arg_pack;
9267 if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
9268 arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
9269
9270 if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
9271 /* This can only happen if we forget to expand an argument
9272 pack somewhere else. Just return an error, silently. */
9273 {
9274 result = make_tree_vec (1);
9275 TREE_VEC_ELT (result, 0) = error_mark_node;
9276 return result;
9277 }
9278
9279 if (arg_from_parm_pack_p (arg_pack, parm_pack))
9280 /* The argument pack that the parameter maps to is just an
9281 expansion of the parameter itself, such as one would find
9282 in the implicit typedef of a class inside the class itself.
9283 Consider this parameter "unsubstituted", so that we will
9284 maintain the outer pack expansion. */
9285 arg_pack = NULL_TREE;
9286
9287 if (arg_pack)
9288 {
9289 int my_len =
9290 TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
9291
9292 /* Don't bother trying to do a partial substitution with
9293 incomplete packs; we'll try again after deduction. */
9294 if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
9295 return t;
9296
9297 if (len < 0)
9298 len = my_len;
9299 else if (len != my_len)
9300 {
9301 if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
9302 error ("mismatched argument pack lengths while expanding "
9303 "%<%T%>",
9304 pattern);
9305 else
9306 error ("mismatched argument pack lengths while expanding "
9307 "%<%E%>",
9308 pattern);
9309 return error_mark_node;
9310 }
9311
9312 /* Keep track of the parameter packs and their corresponding
9313 argument packs. */
9314 packs = tree_cons (parm_pack, arg_pack, packs);
9315 TREE_TYPE (packs) = orig_arg;
9316 }
9317 else
9318 {
9319 /* We can't substitute for this parameter pack. */
9320 unsubstituted_packs = true;
9321 break;
9322 }
9323 }
9324
9325 /* We cannot expand this expansion expression, because we don't have
9326 all of the argument packs we need. Substitute into the pattern
9327 and return a PACK_EXPANSION_*. The caller will need to deal with
9328 that. */
9329 if (unsubstituted_packs)
9330 {
9331 tree new_pat;
9332 if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
9333 new_pat = tsubst_expr (pattern, args, complain, in_decl,
9334 /*integral_constant_expression_p=*/false);
9335 else
9336 new_pat = tsubst (pattern, args, complain, in_decl);
9337 return make_pack_expansion (new_pat);
9338 }
9339
9340 /* We could not find any argument packs that work. */
9341 if (len < 0)
9342 return error_mark_node;
9343
9344 if (cp_unevaluated_operand)
9345 {
9346 /* We're in a late-specified return type, so create our own local
9347 specializations table; the current table is either NULL or (in the
9348 case of recursive unification) might have bindings that we don't
9349 want to use or alter. */
9350 saved_local_specializations = local_specializations;
9351 local_specializations = htab_create (37,
9352 hash_local_specialization,
9353 eq_local_specializations,
9354 NULL);
9355 }
9356
9357 /* For each argument in each argument pack, substitute into the
9358 pattern. */
9359 result = make_tree_vec (len);
9360 for (i = 0; i < len; ++i)
9361 {
9362 /* For parameter pack, change the substitution of the parameter
9363 pack to the ith argument in its argument pack, then expand
9364 the pattern. */
9365 for (pack = packs; pack; pack = TREE_CHAIN (pack))
9366 {
9367 tree parm = TREE_PURPOSE (pack);
9368 tree arg;
9369
9370 /* Select the Ith argument from the pack. */
9371 if (TREE_CODE (parm) == PARM_DECL)
9372 {
9373 if (i == 0)
9374 {
9375 arg = make_node (ARGUMENT_PACK_SELECT);
9376 ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
9377 mark_used (parm);
9378 register_local_specialization (arg, parm);
9379 }
9380 else
9381 arg = retrieve_local_specialization (parm);
9382 }
9383 else
9384 {
9385 int idx, level;
9386 template_parm_level_and_index (parm, &level, &idx);
9387
9388 if (i == 0)
9389 {
9390 arg = make_node (ARGUMENT_PACK_SELECT);
9391 ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
9392 /* Update the corresponding argument. */
9393 TMPL_ARG (args, level, idx) = arg;
9394 }
9395 else
9396 /* Re-use the ARGUMENT_PACK_SELECT. */
9397 arg = TMPL_ARG (args, level, idx);
9398 }
9399 ARGUMENT_PACK_SELECT_INDEX (arg) = i;
9400 }
9401
9402 /* Substitute into the PATTERN with the altered arguments. */
9403 if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
9404 TREE_VEC_ELT (result, i) =
9405 tsubst_expr (pattern, args, complain, in_decl,
9406 /*integral_constant_expression_p=*/false);
9407 else
9408 TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
9409
9410 if (TREE_VEC_ELT (result, i) == error_mark_node)
9411 {
9412 result = error_mark_node;
9413 break;
9414 }
9415 }
9416
9417 /* Update ARGS to restore the substitution from parameter packs to
9418 their argument packs. */
9419 for (pack = packs; pack; pack = TREE_CHAIN (pack))
9420 {
9421 tree parm = TREE_PURPOSE (pack);
9422
9423 if (TREE_CODE (parm) == PARM_DECL)
9424 register_local_specialization (TREE_TYPE (pack), parm);
9425 else
9426 {
9427 int idx, level;
9428 template_parm_level_and_index (parm, &level, &idx);
9429
9430 /* Update the corresponding argument. */
9431 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
9432 TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
9433 TREE_TYPE (pack);
9434 else
9435 TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
9436 }
9437 }
9438
9439 if (saved_local_specializations)
9440 {
9441 htab_delete (local_specializations);
9442 local_specializations = saved_local_specializations;
9443 }
9444
9445 return result;
9446 }
9447
9448 /* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
9449 TMPL. We do this using DECL_PARM_INDEX, which should work even with
9450 parameter packs; all parms generated from a function parameter pack will
9451 have the same DECL_PARM_INDEX. */
9452
9453 tree
9454 get_pattern_parm (tree parm, tree tmpl)
9455 {
9456 tree pattern = DECL_TEMPLATE_RESULT (tmpl);
9457 tree patparm;
9458
9459 if (DECL_ARTIFICIAL (parm))
9460 {
9461 for (patparm = DECL_ARGUMENTS (pattern);
9462 patparm; patparm = DECL_CHAIN (patparm))
9463 if (DECL_ARTIFICIAL (patparm)
9464 && DECL_NAME (parm) == DECL_NAME (patparm))
9465 break;
9466 }
9467 else
9468 {
9469 patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
9470 patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
9471 gcc_assert (DECL_PARM_INDEX (patparm)
9472 == DECL_PARM_INDEX (parm));
9473 }
9474
9475 return patparm;
9476 }
9477
9478 /* Substitute ARGS into the vector or list of template arguments T. */
9479
9480 static tree
9481 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9482 {
9483 tree orig_t = t;
9484 int len, need_new = 0, i, expanded_len_adjust = 0, out;
9485 tree *elts;
9486
9487 if (t == error_mark_node)
9488 return error_mark_node;
9489
9490 len = TREE_VEC_LENGTH (t);
9491 elts = XALLOCAVEC (tree, len);
9492
9493 for (i = 0; i < len; i++)
9494 {
9495 tree orig_arg = TREE_VEC_ELT (t, i);
9496 tree new_arg;
9497
9498 if (TREE_CODE (orig_arg) == TREE_VEC)
9499 new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
9500 else if (PACK_EXPANSION_P (orig_arg))
9501 {
9502 /* Substitute into an expansion expression. */
9503 new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
9504
9505 if (TREE_CODE (new_arg) == TREE_VEC)
9506 /* Add to the expanded length adjustment the number of
9507 expanded arguments. We subtract one from this
9508 measurement, because the argument pack expression
9509 itself is already counted as 1 in
9510 LEN. EXPANDED_LEN_ADJUST can actually be negative, if
9511 the argument pack is empty. */
9512 expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
9513 }
9514 else if (ARGUMENT_PACK_P (orig_arg))
9515 {
9516 /* Substitute into each of the arguments. */
9517 new_arg = TYPE_P (orig_arg)
9518 ? cxx_make_type (TREE_CODE (orig_arg))
9519 : make_node (TREE_CODE (orig_arg));
9520
9521 SET_ARGUMENT_PACK_ARGS (
9522 new_arg,
9523 tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
9524 args, complain, in_decl));
9525
9526 if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
9527 new_arg = error_mark_node;
9528
9529 if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
9530 TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
9531 complain, in_decl);
9532 TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
9533
9534 if (TREE_TYPE (new_arg) == error_mark_node)
9535 new_arg = error_mark_node;
9536 }
9537 }
9538 else
9539 new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
9540
9541 if (new_arg == error_mark_node)
9542 return error_mark_node;
9543
9544 elts[i] = new_arg;
9545 if (new_arg != orig_arg)
9546 need_new = 1;
9547 }
9548
9549 if (!need_new)
9550 return t;
9551
9552 /* Make space for the expanded arguments coming from template
9553 argument packs. */
9554 t = make_tree_vec (len + expanded_len_adjust);
9555 /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
9556 arguments for a member template.
9557 In that case each TREE_VEC in ORIG_T represents a level of template
9558 arguments, and ORIG_T won't carry any non defaulted argument count.
9559 It will rather be the nested TREE_VECs that will carry one.
9560 In other words, ORIG_T carries a non defaulted argument count only
9561 if it doesn't contain any nested TREE_VEC. */
9562 if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
9563 {
9564 int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
9565 count += expanded_len_adjust;
9566 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
9567 }
9568 for (i = 0, out = 0; i < len; i++)
9569 {
9570 if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
9571 || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
9572 && TREE_CODE (elts[i]) == TREE_VEC)
9573 {
9574 int idx;
9575
9576 /* Now expand the template argument pack "in place". */
9577 for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
9578 TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
9579 }
9580 else
9581 {
9582 TREE_VEC_ELT (t, out) = elts[i];
9583 out++;
9584 }
9585 }
9586
9587 return t;
9588 }
9589
9590 /* Return the result of substituting ARGS into the template parameters
9591 given by PARMS. If there are m levels of ARGS and m + n levels of
9592 PARMS, then the result will contain n levels of PARMS. For
9593 example, if PARMS is `template <class T> template <class U>
9594 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
9595 result will be `template <int*, double, class V>'. */
9596
9597 static tree
9598 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
9599 {
9600 tree r = NULL_TREE;
9601 tree* new_parms;
9602
9603 /* When substituting into a template, we must set
9604 PROCESSING_TEMPLATE_DECL as the template parameters may be
9605 dependent if they are based on one-another, and the dependency
9606 predicates are short-circuit outside of templates. */
9607 ++processing_template_decl;
9608
9609 for (new_parms = &r;
9610 TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
9611 new_parms = &(TREE_CHAIN (*new_parms)),
9612 parms = TREE_CHAIN (parms))
9613 {
9614 tree new_vec =
9615 make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
9616 int i;
9617
9618 for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
9619 {
9620 tree tuple;
9621
9622 if (parms == error_mark_node)
9623 continue;
9624
9625 tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
9626
9627 if (tuple == error_mark_node)
9628 continue;
9629
9630 TREE_VEC_ELT (new_vec, i) =
9631 tsubst_template_parm (tuple, args, complain);
9632 }
9633
9634 *new_parms =
9635 tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
9636 - TMPL_ARGS_DEPTH (args)),
9637 new_vec, NULL_TREE);
9638 }
9639
9640 --processing_template_decl;
9641
9642 return r;
9643 }
9644
9645 /* Return the result of substituting ARGS into one template parameter
9646 given by T. T Must be a TREE_LIST which TREE_VALUE is the template
9647 parameter and which TREE_PURPOSE is the default argument of the
9648 template parameter. */
9649
9650 static tree
9651 tsubst_template_parm (tree t, tree args, tsubst_flags_t complain)
9652 {
9653 tree default_value, parm_decl;
9654
9655 if (args == NULL_TREE
9656 || t == NULL_TREE
9657 || t == error_mark_node)
9658 return t;
9659
9660 gcc_assert (TREE_CODE (t) == TREE_LIST);
9661
9662 default_value = TREE_PURPOSE (t);
9663 parm_decl = TREE_VALUE (t);
9664
9665 parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
9666 if (TREE_CODE (parm_decl) == PARM_DECL
9667 && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
9668 parm_decl = error_mark_node;
9669 default_value = tsubst_template_arg (default_value, args,
9670 complain, NULL_TREE);
9671
9672 return build_tree_list (default_value, parm_decl);
9673 }
9674
9675 /* Substitute the ARGS into the indicated aggregate (or enumeration)
9676 type T. If T is not an aggregate or enumeration type, it is
9677 handled as if by tsubst. IN_DECL is as for tsubst. If
9678 ENTERING_SCOPE is nonzero, T is the context for a template which
9679 we are presently tsubst'ing. Return the substituted value. */
9680
9681 static tree
9682 tsubst_aggr_type (tree t,
9683 tree args,
9684 tsubst_flags_t complain,
9685 tree in_decl,
9686 int entering_scope)
9687 {
9688 if (t == NULL_TREE)
9689 return NULL_TREE;
9690
9691 switch (TREE_CODE (t))
9692 {
9693 case RECORD_TYPE:
9694 if (TYPE_PTRMEMFUNC_P (t))
9695 return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
9696
9697 /* Else fall through. */
9698 case ENUMERAL_TYPE:
9699 case UNION_TYPE:
9700 if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
9701 {
9702 tree argvec;
9703 tree context;
9704 tree r;
9705 int saved_unevaluated_operand;
9706 int saved_inhibit_evaluation_warnings;
9707
9708 /* In "sizeof(X<I>)" we need to evaluate "I". */
9709 saved_unevaluated_operand = cp_unevaluated_operand;
9710 cp_unevaluated_operand = 0;
9711 saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
9712 c_inhibit_evaluation_warnings = 0;
9713
9714 /* First, determine the context for the type we are looking
9715 up. */
9716 context = TYPE_CONTEXT (t);
9717 if (context && TYPE_P (context))
9718 {
9719 context = tsubst_aggr_type (context, args, complain,
9720 in_decl, /*entering_scope=*/1);
9721 /* If context is a nested class inside a class template,
9722 it may still need to be instantiated (c++/33959). */
9723 context = complete_type (context);
9724 }
9725
9726 /* Then, figure out what arguments are appropriate for the
9727 type we are trying to find. For example, given:
9728
9729 template <class T> struct S;
9730 template <class T, class U> void f(T, U) { S<U> su; }
9731
9732 and supposing that we are instantiating f<int, double>,
9733 then our ARGS will be {int, double}, but, when looking up
9734 S we only want {double}. */
9735 argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
9736 complain, in_decl);
9737 if (argvec == error_mark_node)
9738 r = error_mark_node;
9739 else
9740 {
9741 r = lookup_template_class (t, argvec, in_decl, context,
9742 entering_scope, complain);
9743 r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
9744 }
9745
9746 cp_unevaluated_operand = saved_unevaluated_operand;
9747 c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
9748
9749 return r;
9750 }
9751 else
9752 /* This is not a template type, so there's nothing to do. */
9753 return t;
9754
9755 default:
9756 return tsubst (t, args, complain, in_decl);
9757 }
9758 }
9759
9760 /* Substitute into the default argument ARG (a default argument for
9761 FN), which has the indicated TYPE. */
9762
9763 tree
9764 tsubst_default_argument (tree fn, tree type, tree arg)
9765 {
9766 tree saved_class_ptr = NULL_TREE;
9767 tree saved_class_ref = NULL_TREE;
9768
9769 /* This can happen in invalid code. */
9770 if (TREE_CODE (arg) == DEFAULT_ARG)
9771 return arg;
9772
9773 /* This default argument came from a template. Instantiate the
9774 default argument here, not in tsubst. In the case of
9775 something like:
9776
9777 template <class T>
9778 struct S {
9779 static T t();
9780 void f(T = t());
9781 };
9782
9783 we must be careful to do name lookup in the scope of S<T>,
9784 rather than in the current class. */
9785 push_access_scope (fn);
9786 /* The "this" pointer is not valid in a default argument. */
9787 if (cfun)
9788 {
9789 saved_class_ptr = current_class_ptr;
9790 cp_function_chain->x_current_class_ptr = NULL_TREE;
9791 saved_class_ref = current_class_ref;
9792 cp_function_chain->x_current_class_ref = NULL_TREE;
9793 }
9794
9795 push_deferring_access_checks(dk_no_deferred);
9796 /* The default argument expression may cause implicitly defined
9797 member functions to be synthesized, which will result in garbage
9798 collection. We must treat this situation as if we were within
9799 the body of function so as to avoid collecting live data on the
9800 stack. */
9801 ++function_depth;
9802 arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
9803 tf_warning_or_error, NULL_TREE,
9804 /*integral_constant_expression_p=*/false);
9805 --function_depth;
9806 pop_deferring_access_checks();
9807
9808 /* Restore the "this" pointer. */
9809 if (cfun)
9810 {
9811 cp_function_chain->x_current_class_ptr = saved_class_ptr;
9812 cp_function_chain->x_current_class_ref = saved_class_ref;
9813 }
9814
9815 /* Make sure the default argument is reasonable. */
9816 arg = check_default_argument (type, arg);
9817
9818 pop_access_scope (fn);
9819
9820 return arg;
9821 }
9822
9823 /* Substitute into all the default arguments for FN. */
9824
9825 static void
9826 tsubst_default_arguments (tree fn)
9827 {
9828 tree arg;
9829 tree tmpl_args;
9830
9831 tmpl_args = DECL_TI_ARGS (fn);
9832
9833 /* If this function is not yet instantiated, we certainly don't need
9834 its default arguments. */
9835 if (uses_template_parms (tmpl_args))
9836 return;
9837 /* Don't do this again for clones. */
9838 if (DECL_CLONED_FUNCTION_P (fn))
9839 return;
9840
9841 for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
9842 arg;
9843 arg = TREE_CHAIN (arg))
9844 if (TREE_PURPOSE (arg))
9845 TREE_PURPOSE (arg) = tsubst_default_argument (fn,
9846 TREE_VALUE (arg),
9847 TREE_PURPOSE (arg));
9848 }
9849
9850 /* Substitute the ARGS into the T, which is a _DECL. Return the
9851 result of the substitution. Issue error and warning messages under
9852 control of COMPLAIN. */
9853
9854 static tree
9855 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
9856 {
9857 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
9858 location_t saved_loc;
9859 tree r = NULL_TREE;
9860 tree in_decl = t;
9861 hashval_t hash = 0;
9862
9863 /* Set the filename and linenumber to improve error-reporting. */
9864 saved_loc = input_location;
9865 input_location = DECL_SOURCE_LOCATION (t);
9866
9867 switch (TREE_CODE (t))
9868 {
9869 case TEMPLATE_DECL:
9870 {
9871 /* We can get here when processing a member function template,
9872 member class template, or template template parameter. */
9873 tree decl = DECL_TEMPLATE_RESULT (t);
9874 tree spec;
9875 tree tmpl_args;
9876 tree full_args;
9877
9878 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9879 {
9880 /* Template template parameter is treated here. */
9881 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9882 if (new_type == error_mark_node)
9883 RETURN (error_mark_node);
9884
9885 r = copy_decl (t);
9886 DECL_CHAIN (r) = NULL_TREE;
9887 TREE_TYPE (r) = new_type;
9888 DECL_TEMPLATE_RESULT (r)
9889 = build_decl (DECL_SOURCE_LOCATION (decl),
9890 TYPE_DECL, DECL_NAME (decl), new_type);
9891 DECL_TEMPLATE_PARMS (r)
9892 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
9893 complain);
9894 TYPE_NAME (new_type) = r;
9895 break;
9896 }
9897
9898 /* We might already have an instance of this template.
9899 The ARGS are for the surrounding class type, so the
9900 full args contain the tsubst'd args for the context,
9901 plus the innermost args from the template decl. */
9902 tmpl_args = DECL_CLASS_TEMPLATE_P (t)
9903 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
9904 : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
9905 /* Because this is a template, the arguments will still be
9906 dependent, even after substitution. If
9907 PROCESSING_TEMPLATE_DECL is not set, the dependency
9908 predicates will short-circuit. */
9909 ++processing_template_decl;
9910 full_args = tsubst_template_args (tmpl_args, args,
9911 complain, in_decl);
9912 --processing_template_decl;
9913 if (full_args == error_mark_node)
9914 RETURN (error_mark_node);
9915
9916 /* If this is a default template template argument,
9917 tsubst might not have changed anything. */
9918 if (full_args == tmpl_args)
9919 RETURN (t);
9920
9921 hash = hash_tmpl_and_args (t, full_args);
9922 spec = retrieve_specialization (t, full_args, hash);
9923 if (spec != NULL_TREE)
9924 {
9925 r = spec;
9926 break;
9927 }
9928
9929 /* Make a new template decl. It will be similar to the
9930 original, but will record the current template arguments.
9931 We also create a new function declaration, which is just
9932 like the old one, but points to this new template, rather
9933 than the old one. */
9934 r = copy_decl (t);
9935 gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
9936 DECL_CHAIN (r) = NULL_TREE;
9937
9938 DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
9939
9940 if (TREE_CODE (decl) == TYPE_DECL
9941 && !TYPE_DECL_ALIAS_P (decl))
9942 {
9943 tree new_type;
9944 ++processing_template_decl;
9945 new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9946 --processing_template_decl;
9947 if (new_type == error_mark_node)
9948 RETURN (error_mark_node);
9949
9950 TREE_TYPE (r) = new_type;
9951 CLASSTYPE_TI_TEMPLATE (new_type) = r;
9952 DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
9953 DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
9954 DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
9955 }
9956 else
9957 {
9958 tree new_decl;
9959 ++processing_template_decl;
9960 new_decl = tsubst (decl, args, complain, in_decl);
9961 --processing_template_decl;
9962 if (new_decl == error_mark_node)
9963 RETURN (error_mark_node);
9964
9965 DECL_TEMPLATE_RESULT (r) = new_decl;
9966 DECL_TI_TEMPLATE (new_decl) = r;
9967 TREE_TYPE (r) = TREE_TYPE (new_decl);
9968 DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
9969 DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
9970 }
9971
9972 SET_DECL_IMPLICIT_INSTANTIATION (r);
9973 DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
9974 DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
9975
9976 /* The template parameters for this new template are all the
9977 template parameters for the old template, except the
9978 outermost level of parameters. */
9979 DECL_TEMPLATE_PARMS (r)
9980 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
9981 complain);
9982
9983 if (PRIMARY_TEMPLATE_P (t))
9984 DECL_PRIMARY_TEMPLATE (r) = r;
9985
9986 if (TREE_CODE (decl) != TYPE_DECL)
9987 /* Record this non-type partial instantiation. */
9988 register_specialization (r, t,
9989 DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
9990 false, hash);
9991 }
9992 break;
9993
9994 case FUNCTION_DECL:
9995 {
9996 tree ctx;
9997 tree argvec = NULL_TREE;
9998 tree *friends;
9999 tree gen_tmpl;
10000 tree type;
10001 int member;
10002 int args_depth;
10003 int parms_depth;
10004
10005 /* Nobody should be tsubst'ing into non-template functions. */
10006 gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
10007
10008 if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
10009 {
10010 tree spec;
10011 bool dependent_p;
10012
10013 /* If T is not dependent, just return it. We have to
10014 increment PROCESSING_TEMPLATE_DECL because
10015 value_dependent_expression_p assumes that nothing is
10016 dependent when PROCESSING_TEMPLATE_DECL is zero. */
10017 ++processing_template_decl;
10018 dependent_p = value_dependent_expression_p (t);
10019 --processing_template_decl;
10020 if (!dependent_p)
10021 RETURN (t);
10022
10023 /* Calculate the most general template of which R is a
10024 specialization, and the complete set of arguments used to
10025 specialize R. */
10026 gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
10027 argvec = tsubst_template_args (DECL_TI_ARGS
10028 (DECL_TEMPLATE_RESULT
10029 (DECL_TI_TEMPLATE (t))),
10030 args, complain, in_decl);
10031 if (argvec == error_mark_node)
10032 RETURN (error_mark_node);
10033
10034 /* Check to see if we already have this specialization. */
10035 hash = hash_tmpl_and_args (gen_tmpl, argvec);
10036 spec = retrieve_specialization (gen_tmpl, argvec, hash);
10037
10038 if (spec)
10039 {
10040 r = spec;
10041 break;
10042 }
10043
10044 /* We can see more levels of arguments than parameters if
10045 there was a specialization of a member template, like
10046 this:
10047
10048 template <class T> struct S { template <class U> void f(); }
10049 template <> template <class U> void S<int>::f(U);
10050
10051 Here, we'll be substituting into the specialization,
10052 because that's where we can find the code we actually
10053 want to generate, but we'll have enough arguments for
10054 the most general template.
10055
10056 We also deal with the peculiar case:
10057
10058 template <class T> struct S {
10059 template <class U> friend void f();
10060 };
10061 template <class U> void f() {}
10062 template S<int>;
10063 template void f<double>();
10064
10065 Here, the ARGS for the instantiation of will be {int,
10066 double}. But, we only need as many ARGS as there are
10067 levels of template parameters in CODE_PATTERN. We are
10068 careful not to get fooled into reducing the ARGS in
10069 situations like:
10070
10071 template <class T> struct S { template <class U> void f(U); }
10072 template <class T> template <> void S<T>::f(int) {}
10073
10074 which we can spot because the pattern will be a
10075 specialization in this case. */
10076 args_depth = TMPL_ARGS_DEPTH (args);
10077 parms_depth =
10078 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
10079 if (args_depth > parms_depth
10080 && !DECL_TEMPLATE_SPECIALIZATION (t))
10081 args = get_innermost_template_args (args, parms_depth);
10082 }
10083 else
10084 {
10085 /* This special case arises when we have something like this:
10086
10087 template <class T> struct S {
10088 friend void f<int>(int, double);
10089 };
10090
10091 Here, the DECL_TI_TEMPLATE for the friend declaration
10092 will be an IDENTIFIER_NODE. We are being called from
10093 tsubst_friend_function, and we want only to create a
10094 new decl (R) with appropriate types so that we can call
10095 determine_specialization. */
10096 gen_tmpl = NULL_TREE;
10097 }
10098
10099 if (DECL_CLASS_SCOPE_P (t))
10100 {
10101 if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
10102 member = 2;
10103 else
10104 member = 1;
10105 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
10106 complain, t, /*entering_scope=*/1);
10107 }
10108 else
10109 {
10110 member = 0;
10111 ctx = DECL_CONTEXT (t);
10112 }
10113 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10114 if (type == error_mark_node)
10115 RETURN (error_mark_node);
10116
10117 /* We do NOT check for matching decls pushed separately at this
10118 point, as they may not represent instantiations of this
10119 template, and in any case are considered separate under the
10120 discrete model. */
10121 r = copy_decl (t);
10122 DECL_USE_TEMPLATE (r) = 0;
10123 TREE_TYPE (r) = type;
10124 /* Clear out the mangled name and RTL for the instantiation. */
10125 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
10126 SET_DECL_RTL (r, NULL);
10127 /* Leave DECL_INITIAL set on deleted instantiations. */
10128 if (!DECL_DELETED_FN (r))
10129 DECL_INITIAL (r) = NULL_TREE;
10130 DECL_CONTEXT (r) = ctx;
10131
10132 if (member && DECL_CONV_FN_P (r))
10133 /* Type-conversion operator. Reconstruct the name, in
10134 case it's the name of one of the template's parameters. */
10135 DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
10136
10137 DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
10138 complain, t);
10139 DECL_RESULT (r) = NULL_TREE;
10140
10141 TREE_STATIC (r) = 0;
10142 TREE_PUBLIC (r) = TREE_PUBLIC (t);
10143 DECL_EXTERNAL (r) = 1;
10144 /* If this is an instantiation of a function with internal
10145 linkage, we already know what object file linkage will be
10146 assigned to the instantiation. */
10147 DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
10148 DECL_DEFER_OUTPUT (r) = 0;
10149 DECL_CHAIN (r) = NULL_TREE;
10150 DECL_PENDING_INLINE_INFO (r) = 0;
10151 DECL_PENDING_INLINE_P (r) = 0;
10152 DECL_SAVED_TREE (r) = NULL_TREE;
10153 DECL_STRUCT_FUNCTION (r) = NULL;
10154 TREE_USED (r) = 0;
10155 /* We'll re-clone as appropriate in instantiate_template. */
10156 DECL_CLONED_FUNCTION (r) = NULL_TREE;
10157
10158 /* If we aren't complaining now, return on error before we register
10159 the specialization so that we'll complain eventually. */
10160 if ((complain & tf_error) == 0
10161 && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10162 && !grok_op_properties (r, /*complain=*/false))
10163 RETURN (error_mark_node);
10164
10165 /* Set up the DECL_TEMPLATE_INFO for R. There's no need to do
10166 this in the special friend case mentioned above where
10167 GEN_TMPL is NULL. */
10168 if (gen_tmpl)
10169 {
10170 DECL_TEMPLATE_INFO (r)
10171 = build_template_info (gen_tmpl, argvec);
10172 SET_DECL_IMPLICIT_INSTANTIATION (r);
10173 register_specialization (r, gen_tmpl, argvec, false, hash);
10174
10175 /* We're not supposed to instantiate default arguments
10176 until they are called, for a template. But, for a
10177 declaration like:
10178
10179 template <class T> void f ()
10180 { extern void g(int i = T()); }
10181
10182 we should do the substitution when the template is
10183 instantiated. We handle the member function case in
10184 instantiate_class_template since the default arguments
10185 might refer to other members of the class. */
10186 if (!member
10187 && !PRIMARY_TEMPLATE_P (gen_tmpl)
10188 && !uses_template_parms (argvec))
10189 tsubst_default_arguments (r);
10190 }
10191 else
10192 DECL_TEMPLATE_INFO (r) = NULL_TREE;
10193
10194 /* Copy the list of befriending classes. */
10195 for (friends = &DECL_BEFRIENDING_CLASSES (r);
10196 *friends;
10197 friends = &TREE_CHAIN (*friends))
10198 {
10199 *friends = copy_node (*friends);
10200 TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
10201 args, complain,
10202 in_decl);
10203 }
10204
10205 if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
10206 {
10207 maybe_retrofit_in_chrg (r);
10208 if (DECL_CONSTRUCTOR_P (r))
10209 grok_ctor_properties (ctx, r);
10210 /* If this is an instantiation of a member template, clone it.
10211 If it isn't, that'll be handled by
10212 clone_constructors_and_destructors. */
10213 if (PRIMARY_TEMPLATE_P (gen_tmpl))
10214 clone_function_decl (r, /*update_method_vec_p=*/0);
10215 }
10216 else if ((complain & tf_error) != 0
10217 && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10218 && !grok_op_properties (r, /*complain=*/true))
10219 RETURN (error_mark_node);
10220
10221 if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
10222 SET_DECL_FRIEND_CONTEXT (r,
10223 tsubst (DECL_FRIEND_CONTEXT (t),
10224 args, complain, in_decl));
10225
10226 /* Possibly limit visibility based on template args. */
10227 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10228 if (DECL_VISIBILITY_SPECIFIED (t))
10229 {
10230 DECL_VISIBILITY_SPECIFIED (r) = 0;
10231 DECL_ATTRIBUTES (r)
10232 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10233 }
10234 determine_visibility (r);
10235 if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
10236 && !processing_template_decl)
10237 defaulted_late_check (r);
10238
10239 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10240 args, complain, in_decl);
10241 }
10242 break;
10243
10244 case PARM_DECL:
10245 {
10246 tree type = NULL_TREE;
10247 int i, len = 1;
10248 tree expanded_types = NULL_TREE;
10249 tree prev_r = NULL_TREE;
10250 tree first_r = NULL_TREE;
10251
10252 if (FUNCTION_PARAMETER_PACK_P (t))
10253 {
10254 /* If there is a local specialization that isn't a
10255 parameter pack, it means that we're doing a "simple"
10256 substitution from inside tsubst_pack_expansion. Just
10257 return the local specialization (which will be a single
10258 parm). */
10259 tree spec = retrieve_local_specialization (t);
10260 if (spec
10261 && TREE_CODE (spec) == PARM_DECL
10262 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
10263 RETURN (spec);
10264
10265 /* Expand the TYPE_PACK_EXPANSION that provides the types for
10266 the parameters in this function parameter pack. */
10267 expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
10268 complain, in_decl);
10269 if (TREE_CODE (expanded_types) == TREE_VEC)
10270 {
10271 len = TREE_VEC_LENGTH (expanded_types);
10272
10273 /* Zero-length parameter packs are boring. Just substitute
10274 into the chain. */
10275 if (len == 0)
10276 RETURN (tsubst (TREE_CHAIN (t), args, complain,
10277 TREE_CHAIN (t)));
10278 }
10279 else
10280 {
10281 /* All we did was update the type. Make a note of that. */
10282 type = expanded_types;
10283 expanded_types = NULL_TREE;
10284 }
10285 }
10286
10287 /* Loop through all of the parameter's we'll build. When T is
10288 a function parameter pack, LEN is the number of expanded
10289 types in EXPANDED_TYPES; otherwise, LEN is 1. */
10290 r = NULL_TREE;
10291 for (i = 0; i < len; ++i)
10292 {
10293 prev_r = r;
10294 r = copy_node (t);
10295 if (DECL_TEMPLATE_PARM_P (t))
10296 SET_DECL_TEMPLATE_PARM_P (r);
10297
10298 if (expanded_types)
10299 /* We're on the Ith parameter of the function parameter
10300 pack. */
10301 {
10302 /* An argument of a function parameter pack is not a parameter
10303 pack. */
10304 FUNCTION_PARAMETER_PACK_P (r) = false;
10305
10306 /* Get the Ith type. */
10307 type = TREE_VEC_ELT (expanded_types, i);
10308
10309 if (DECL_NAME (r))
10310 /* Rename the parameter to include the index. */
10311 DECL_NAME (r) =
10312 make_ith_pack_parameter_name (DECL_NAME (r), i);
10313 }
10314 else if (!type)
10315 /* We're dealing with a normal parameter. */
10316 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10317
10318 type = type_decays_to (type);
10319 TREE_TYPE (r) = type;
10320 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10321
10322 if (DECL_INITIAL (r))
10323 {
10324 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
10325 DECL_INITIAL (r) = TREE_TYPE (r);
10326 else
10327 DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
10328 complain, in_decl);
10329 }
10330
10331 DECL_CONTEXT (r) = NULL_TREE;
10332
10333 if (!DECL_TEMPLATE_PARM_P (r))
10334 DECL_ARG_TYPE (r) = type_passed_as (type);
10335
10336 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10337 args, complain, in_decl);
10338
10339 /* Keep track of the first new parameter we
10340 generate. That's what will be returned to the
10341 caller. */
10342 if (!first_r)
10343 first_r = r;
10344
10345 /* Build a proper chain of parameters when substituting
10346 into a function parameter pack. */
10347 if (prev_r)
10348 DECL_CHAIN (prev_r) = r;
10349 }
10350
10351 if (DECL_CHAIN (t))
10352 DECL_CHAIN (r) = tsubst (DECL_CHAIN (t), args,
10353 complain, DECL_CHAIN (t));
10354
10355 /* FIRST_R contains the start of the chain we've built. */
10356 r = first_r;
10357 }
10358 break;
10359
10360 case FIELD_DECL:
10361 {
10362 tree type;
10363
10364 r = copy_decl (t);
10365 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10366 if (type == error_mark_node)
10367 RETURN (error_mark_node);
10368 TREE_TYPE (r) = type;
10369 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10370
10371 if (DECL_C_BIT_FIELD (r))
10372 /* For bit-fields, DECL_INITIAL gives the number of bits. For
10373 non-bit-fields DECL_INITIAL is a non-static data member
10374 initializer, which gets deferred instantiation. */
10375 DECL_INITIAL (r)
10376 = tsubst_expr (DECL_INITIAL (t), args,
10377 complain, in_decl,
10378 /*integral_constant_expression_p=*/true);
10379 else if (DECL_INITIAL (t))
10380 {
10381 /* Set up DECL_TEMPLATE_INFO so that we can get at the
10382 NSDMI in perform_member_init. Still set DECL_INITIAL
10383 so that we know there is one. */
10384 DECL_INITIAL (r) = void_zero_node;
10385 gcc_assert (DECL_LANG_SPECIFIC (r) == NULL);
10386 retrofit_lang_decl (r);
10387 DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
10388 }
10389 /* We don't have to set DECL_CONTEXT here; it is set by
10390 finish_member_declaration. */
10391 DECL_CHAIN (r) = NULL_TREE;
10392 if (VOID_TYPE_P (type))
10393 error ("instantiation of %q+D as type %qT", r, type);
10394
10395 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10396 args, complain, in_decl);
10397 }
10398 break;
10399
10400 case USING_DECL:
10401 /* We reach here only for member using decls. */
10402 if (DECL_DEPENDENT_P (t))
10403 {
10404 r = do_class_using_decl
10405 (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
10406 tsubst_copy (DECL_NAME (t), args, complain, in_decl));
10407 if (!r)
10408 r = error_mark_node;
10409 else
10410 {
10411 TREE_PROTECTED (r) = TREE_PROTECTED (t);
10412 TREE_PRIVATE (r) = TREE_PRIVATE (t);
10413 }
10414 }
10415 else
10416 {
10417 r = copy_node (t);
10418 DECL_CHAIN (r) = NULL_TREE;
10419 }
10420 break;
10421
10422 case TYPE_DECL:
10423 case VAR_DECL:
10424 {
10425 tree argvec = NULL_TREE;
10426 tree gen_tmpl = NULL_TREE;
10427 tree spec;
10428 tree tmpl = NULL_TREE;
10429 tree ctx;
10430 tree type = NULL_TREE;
10431 bool local_p;
10432
10433 if (TREE_CODE (t) == TYPE_DECL
10434 && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
10435 {
10436 /* If this is the canonical decl, we don't have to
10437 mess with instantiations, and often we can't (for
10438 typename, template type parms and such). Note that
10439 TYPE_NAME is not correct for the above test if
10440 we've copied the type for a typedef. */
10441 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10442 if (type == error_mark_node)
10443 RETURN (error_mark_node);
10444 r = TYPE_NAME (type);
10445 break;
10446 }
10447
10448 /* Check to see if we already have the specialization we
10449 need. */
10450 spec = NULL_TREE;
10451 if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
10452 {
10453 /* T is a static data member or namespace-scope entity.
10454 We have to substitute into namespace-scope variables
10455 (even though such entities are never templates) because
10456 of cases like:
10457
10458 template <class T> void f() { extern T t; }
10459
10460 where the entity referenced is not known until
10461 instantiation time. */
10462 local_p = false;
10463 ctx = DECL_CONTEXT (t);
10464 if (DECL_CLASS_SCOPE_P (t))
10465 {
10466 ctx = tsubst_aggr_type (ctx, args,
10467 complain,
10468 in_decl, /*entering_scope=*/1);
10469 /* If CTX is unchanged, then T is in fact the
10470 specialization we want. That situation occurs when
10471 referencing a static data member within in its own
10472 class. We can use pointer equality, rather than
10473 same_type_p, because DECL_CONTEXT is always
10474 canonical... */
10475 if (ctx == DECL_CONTEXT (t)
10476 && (TREE_CODE (t) != TYPE_DECL
10477 /* ... unless T is a member template; in which
10478 case our caller can be willing to create a
10479 specialization of that template represented
10480 by T. */
10481 || !(DECL_TI_TEMPLATE (t)
10482 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (t)))))
10483 spec = t;
10484 }
10485
10486 if (!spec)
10487 {
10488 tmpl = DECL_TI_TEMPLATE (t);
10489 gen_tmpl = most_general_template (tmpl);
10490 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
10491 hash = hash_tmpl_and_args (gen_tmpl, argvec);
10492 spec = retrieve_specialization (gen_tmpl, argvec, hash);
10493 }
10494 }
10495 else
10496 {
10497 /* A local variable. */
10498 local_p = true;
10499 /* Subsequent calls to pushdecl will fill this in. */
10500 ctx = NULL_TREE;
10501 spec = retrieve_local_specialization (t);
10502 }
10503 /* If we already have the specialization we need, there is
10504 nothing more to do. */
10505 if (spec)
10506 {
10507 r = spec;
10508 break;
10509 }
10510
10511 /* Create a new node for the specialization we need. */
10512 r = copy_decl (t);
10513 if (type == NULL_TREE)
10514 {
10515 if (is_typedef_decl (t))
10516 type = DECL_ORIGINAL_TYPE (t);
10517 else
10518 type = TREE_TYPE (t);
10519 if (TREE_CODE (t) == VAR_DECL && VAR_HAD_UNKNOWN_BOUND (t))
10520 type = strip_array_domain (type);
10521 type = tsubst (type, args, complain, in_decl);
10522 }
10523 if (TREE_CODE (r) == VAR_DECL)
10524 {
10525 /* Even if the original location is out of scope, the
10526 newly substituted one is not. */
10527 DECL_DEAD_FOR_LOCAL (r) = 0;
10528 DECL_INITIALIZED_P (r) = 0;
10529 DECL_TEMPLATE_INSTANTIATED (r) = 0;
10530 if (type == error_mark_node)
10531 RETURN (error_mark_node);
10532 if (TREE_CODE (type) == FUNCTION_TYPE)
10533 {
10534 /* It may seem that this case cannot occur, since:
10535
10536 typedef void f();
10537 void g() { f x; }
10538
10539 declares a function, not a variable. However:
10540
10541 typedef void f();
10542 template <typename T> void g() { T t; }
10543 template void g<f>();
10544
10545 is an attempt to declare a variable with function
10546 type. */
10547 error ("variable %qD has function type",
10548 /* R is not yet sufficiently initialized, so we
10549 just use its name. */
10550 DECL_NAME (r));
10551 RETURN (error_mark_node);
10552 }
10553 type = complete_type (type);
10554 /* Wait until cp_finish_decl to set this again, to handle
10555 circular dependency (template/instantiate6.C). */
10556 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r) = 0;
10557 type = check_var_type (DECL_NAME (r), type);
10558
10559 if (DECL_HAS_VALUE_EXPR_P (t))
10560 {
10561 tree ve = DECL_VALUE_EXPR (t);
10562 ve = tsubst_expr (ve, args, complain, in_decl,
10563 /*constant_expression_p=*/false);
10564 if (REFERENCE_REF_P (ve))
10565 {
10566 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
10567 ve = TREE_OPERAND (ve, 0);
10568 }
10569 SET_DECL_VALUE_EXPR (r, ve);
10570 }
10571 }
10572 else if (DECL_SELF_REFERENCE_P (t))
10573 SET_DECL_SELF_REFERENCE_P (r);
10574 TREE_TYPE (r) = type;
10575 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10576 DECL_CONTEXT (r) = ctx;
10577 /* Clear out the mangled name and RTL for the instantiation. */
10578 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
10579 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10580 SET_DECL_RTL (r, NULL);
10581 /* The initializer must not be expanded until it is required;
10582 see [temp.inst]. */
10583 DECL_INITIAL (r) = NULL_TREE;
10584 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10585 SET_DECL_RTL (r, NULL);
10586 DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
10587 if (TREE_CODE (r) == VAR_DECL)
10588 {
10589 /* Possibly limit visibility based on template args. */
10590 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10591 if (DECL_VISIBILITY_SPECIFIED (t))
10592 {
10593 DECL_VISIBILITY_SPECIFIED (r) = 0;
10594 DECL_ATTRIBUTES (r)
10595 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10596 }
10597 determine_visibility (r);
10598 }
10599
10600 if (!local_p)
10601 {
10602 /* A static data member declaration is always marked
10603 external when it is declared in-class, even if an
10604 initializer is present. We mimic the non-template
10605 processing here. */
10606 DECL_EXTERNAL (r) = 1;
10607
10608 register_specialization (r, gen_tmpl, argvec, false, hash);
10609 DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
10610 SET_DECL_IMPLICIT_INSTANTIATION (r);
10611 }
10612 else if (cp_unevaluated_operand)
10613 {
10614 /* We're substituting this var in a decltype outside of its
10615 scope, such as for a lambda return type. Don't add it to
10616 local_specializations, do perform auto deduction. */
10617 tree auto_node = type_uses_auto (type);
10618 if (auto_node)
10619 {
10620 tree init
10621 = tsubst_expr (DECL_INITIAL (t), args, complain, in_decl,
10622 /*constant_expression_p=*/false);
10623 init = resolve_nondeduced_context (init);
10624 TREE_TYPE (r) = type
10625 = do_auto_deduction (type, init, auto_node);
10626 }
10627 }
10628 else
10629 register_local_specialization (r, t);
10630
10631 DECL_CHAIN (r) = NULL_TREE;
10632
10633 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
10634 /*flags=*/0,
10635 args, complain, in_decl);
10636
10637 /* Preserve a typedef that names a type. */
10638 if (is_typedef_decl (r))
10639 {
10640 DECL_ORIGINAL_TYPE (r) = NULL_TREE;
10641 set_underlying_type (r);
10642 }
10643
10644 layout_decl (r, 0);
10645 }
10646 break;
10647
10648 default:
10649 gcc_unreachable ();
10650 }
10651 #undef RETURN
10652
10653 out:
10654 /* Restore the file and line information. */
10655 input_location = saved_loc;
10656
10657 return r;
10658 }
10659
10660 /* Substitute into the ARG_TYPES of a function type. */
10661
10662 static tree
10663 tsubst_arg_types (tree arg_types,
10664 tree args,
10665 tsubst_flags_t complain,
10666 tree in_decl)
10667 {
10668 tree remaining_arg_types;
10669 tree type = NULL_TREE;
10670 int i = 1;
10671 tree expanded_args = NULL_TREE;
10672 tree default_arg;
10673
10674 if (!arg_types || arg_types == void_list_node)
10675 return arg_types;
10676
10677 remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
10678 args, complain, in_decl);
10679 if (remaining_arg_types == error_mark_node)
10680 return error_mark_node;
10681
10682 if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
10683 {
10684 /* For a pack expansion, perform substitution on the
10685 entire expression. Later on, we'll handle the arguments
10686 one-by-one. */
10687 expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
10688 args, complain, in_decl);
10689
10690 if (TREE_CODE (expanded_args) == TREE_VEC)
10691 /* So that we'll spin through the parameters, one by one. */
10692 i = TREE_VEC_LENGTH (expanded_args);
10693 else
10694 {
10695 /* We only partially substituted into the parameter
10696 pack. Our type is TYPE_PACK_EXPANSION. */
10697 type = expanded_args;
10698 expanded_args = NULL_TREE;
10699 }
10700 }
10701
10702 while (i > 0) {
10703 --i;
10704
10705 if (expanded_args)
10706 type = TREE_VEC_ELT (expanded_args, i);
10707 else if (!type)
10708 type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
10709
10710 if (type == error_mark_node)
10711 return error_mark_node;
10712 if (VOID_TYPE_P (type))
10713 {
10714 if (complain & tf_error)
10715 {
10716 error ("invalid parameter type %qT", type);
10717 if (in_decl)
10718 error ("in declaration %q+D", in_decl);
10719 }
10720 return error_mark_node;
10721 }
10722
10723 /* Do array-to-pointer, function-to-pointer conversion, and ignore
10724 top-level qualifiers as required. */
10725 type = cv_unqualified (type_decays_to (type));
10726
10727 /* We do not substitute into default arguments here. The standard
10728 mandates that they be instantiated only when needed, which is
10729 done in build_over_call. */
10730 default_arg = TREE_PURPOSE (arg_types);
10731
10732 if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
10733 {
10734 /* We've instantiated a template before its default arguments
10735 have been parsed. This can happen for a nested template
10736 class, and is not an error unless we require the default
10737 argument in a call of this function. */
10738 remaining_arg_types =
10739 tree_cons (default_arg, type, remaining_arg_types);
10740 VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg),
10741 remaining_arg_types);
10742 }
10743 else
10744 remaining_arg_types =
10745 hash_tree_cons (default_arg, type, remaining_arg_types);
10746 }
10747
10748 return remaining_arg_types;
10749 }
10750
10751 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
10752 *not* handle the exception-specification for FNTYPE, because the
10753 initial substitution of explicitly provided template parameters
10754 during argument deduction forbids substitution into the
10755 exception-specification:
10756
10757 [temp.deduct]
10758
10759 All references in the function type of the function template to the
10760 corresponding template parameters are replaced by the specified tem-
10761 plate argument values. If a substitution in a template parameter or
10762 in the function type of the function template results in an invalid
10763 type, type deduction fails. [Note: The equivalent substitution in
10764 exception specifications is done only when the function is instanti-
10765 ated, at which point a program is ill-formed if the substitution
10766 results in an invalid type.] */
10767
10768 static tree
10769 tsubst_function_type (tree t,
10770 tree args,
10771 tsubst_flags_t complain,
10772 tree in_decl)
10773 {
10774 tree return_type;
10775 tree arg_types;
10776 tree fntype;
10777
10778 /* The TYPE_CONTEXT is not used for function/method types. */
10779 gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
10780
10781 /* Substitute the return type. */
10782 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10783 if (return_type == error_mark_node)
10784 return error_mark_node;
10785 /* The standard does not presently indicate that creation of a
10786 function type with an invalid return type is a deduction failure.
10787 However, that is clearly analogous to creating an array of "void"
10788 or a reference to a reference. This is core issue #486. */
10789 if (TREE_CODE (return_type) == ARRAY_TYPE
10790 || TREE_CODE (return_type) == FUNCTION_TYPE)
10791 {
10792 if (complain & tf_error)
10793 {
10794 if (TREE_CODE (return_type) == ARRAY_TYPE)
10795 error ("function returning an array");
10796 else
10797 error ("function returning a function");
10798 }
10799 return error_mark_node;
10800 }
10801
10802 /* Substitute the argument types. */
10803 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
10804 complain, in_decl);
10805 if (arg_types == error_mark_node)
10806 return error_mark_node;
10807
10808 /* Construct a new type node and return it. */
10809 if (TREE_CODE (t) == FUNCTION_TYPE)
10810 {
10811 fntype = build_function_type (return_type, arg_types);
10812 fntype = apply_memfn_quals (fntype, type_memfn_quals (t));
10813 }
10814 else
10815 {
10816 tree r = TREE_TYPE (TREE_VALUE (arg_types));
10817 if (! MAYBE_CLASS_TYPE_P (r))
10818 {
10819 /* [temp.deduct]
10820
10821 Type deduction may fail for any of the following
10822 reasons:
10823
10824 -- Attempting to create "pointer to member of T" when T
10825 is not a class type. */
10826 if (complain & tf_error)
10827 error ("creating pointer to member function of non-class type %qT",
10828 r);
10829 return error_mark_node;
10830 }
10831
10832 fntype = build_method_type_directly (r, return_type,
10833 TREE_CHAIN (arg_types));
10834 }
10835 fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
10836
10837 return fntype;
10838 }
10839
10840 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE. Substitute the template
10841 ARGS into that specification, and return the substituted
10842 specification. If there is no specification, return NULL_TREE. */
10843
10844 static tree
10845 tsubst_exception_specification (tree fntype,
10846 tree args,
10847 tsubst_flags_t complain,
10848 tree in_decl,
10849 bool defer_ok)
10850 {
10851 tree specs;
10852 tree new_specs;
10853
10854 specs = TYPE_RAISES_EXCEPTIONS (fntype);
10855 new_specs = NULL_TREE;
10856 if (specs && TREE_PURPOSE (specs))
10857 {
10858 /* A noexcept-specifier. */
10859 tree expr = TREE_PURPOSE (specs);
10860 if (expr == boolean_true_node || expr == boolean_false_node)
10861 new_specs = expr;
10862 else if (defer_ok)
10863 {
10864 /* Defer instantiation of noexcept-specifiers to avoid
10865 excessive instantiations (c++/49107). */
10866 new_specs = make_node (DEFERRED_NOEXCEPT);
10867 if (DEFERRED_NOEXCEPT_SPEC_P (specs))
10868 {
10869 /* We already partially instantiated this member template,
10870 so combine the new args with the old. */
10871 DEFERRED_NOEXCEPT_PATTERN (new_specs)
10872 = DEFERRED_NOEXCEPT_PATTERN (expr);
10873 DEFERRED_NOEXCEPT_ARGS (new_specs)
10874 = add_to_template_args (DEFERRED_NOEXCEPT_ARGS (expr), args);
10875 }
10876 else
10877 {
10878 DEFERRED_NOEXCEPT_PATTERN (new_specs) = expr;
10879 DEFERRED_NOEXCEPT_ARGS (new_specs) = args;
10880 }
10881 }
10882 else
10883 new_specs = tsubst_copy_and_build
10884 (expr, args, complain, in_decl, /*function_p=*/false,
10885 /*integral_constant_expression_p=*/true);
10886 new_specs = build_noexcept_spec (new_specs, complain);
10887 }
10888 else if (specs)
10889 {
10890 if (! TREE_VALUE (specs))
10891 new_specs = specs;
10892 else
10893 while (specs)
10894 {
10895 tree spec;
10896 int i, len = 1;
10897 tree expanded_specs = NULL_TREE;
10898
10899 if (PACK_EXPANSION_P (TREE_VALUE (specs)))
10900 {
10901 /* Expand the pack expansion type. */
10902 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
10903 args, complain,
10904 in_decl);
10905
10906 if (expanded_specs == error_mark_node)
10907 return error_mark_node;
10908 else if (TREE_CODE (expanded_specs) == TREE_VEC)
10909 len = TREE_VEC_LENGTH (expanded_specs);
10910 else
10911 {
10912 /* We're substituting into a member template, so
10913 we got a TYPE_PACK_EXPANSION back. Add that
10914 expansion and move on. */
10915 gcc_assert (TREE_CODE (expanded_specs)
10916 == TYPE_PACK_EXPANSION);
10917 new_specs = add_exception_specifier (new_specs,
10918 expanded_specs,
10919 complain);
10920 specs = TREE_CHAIN (specs);
10921 continue;
10922 }
10923 }
10924
10925 for (i = 0; i < len; ++i)
10926 {
10927 if (expanded_specs)
10928 spec = TREE_VEC_ELT (expanded_specs, i);
10929 else
10930 spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
10931 if (spec == error_mark_node)
10932 return spec;
10933 new_specs = add_exception_specifier (new_specs, spec,
10934 complain);
10935 }
10936
10937 specs = TREE_CHAIN (specs);
10938 }
10939 }
10940 return new_specs;
10941 }
10942
10943 /* Take the tree structure T and replace template parameters used
10944 therein with the argument vector ARGS. IN_DECL is an associated
10945 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
10946 Issue error and warning messages under control of COMPLAIN. Note
10947 that we must be relatively non-tolerant of extensions here, in
10948 order to preserve conformance; if we allow substitutions that
10949 should not be allowed, we may allow argument deductions that should
10950 not succeed, and therefore report ambiguous overload situations
10951 where there are none. In theory, we could allow the substitution,
10952 but indicate that it should have failed, and allow our caller to
10953 make sure that the right thing happens, but we don't try to do this
10954 yet.
10955
10956 This function is used for dealing with types, decls and the like;
10957 for expressions, use tsubst_expr or tsubst_copy. */
10958
10959 tree
10960 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
10961 {
10962 enum tree_code code;
10963 tree type, r = NULL_TREE;
10964
10965 if (t == NULL_TREE || t == error_mark_node
10966 || t == integer_type_node
10967 || t == void_type_node
10968 || t == char_type_node
10969 || t == unknown_type_node
10970 || TREE_CODE (t) == NAMESPACE_DECL
10971 || TREE_CODE (t) == TRANSLATION_UNIT_DECL)
10972 return t;
10973
10974 if (DECL_P (t))
10975 return tsubst_decl (t, args, complain);
10976
10977 if (args == NULL_TREE)
10978 return t;
10979
10980 code = TREE_CODE (t);
10981
10982 if (code == IDENTIFIER_NODE)
10983 type = IDENTIFIER_TYPE_VALUE (t);
10984 else
10985 type = TREE_TYPE (t);
10986
10987 gcc_assert (type != unknown_type_node);
10988
10989 /* Reuse typedefs. We need to do this to handle dependent attributes,
10990 such as attribute aligned. */
10991 if (TYPE_P (t)
10992 && typedef_variant_p (t))
10993 {
10994 tree decl = TYPE_NAME (t);
10995
10996 if (TYPE_DECL_ALIAS_P (decl)
10997 && DECL_LANG_SPECIFIC (decl)
10998 && DECL_TEMPLATE_INFO (decl)
10999 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl)))
11000 {
11001 /* DECL represents an alias template and we want to
11002 instantiate it. Let's substitute our arguments for the
11003 template parameters into the declaration and get the
11004 resulting type. */
11005 r = tsubst (decl, args, complain, decl);
11006 }
11007 else if (DECL_CLASS_SCOPE_P (decl)
11008 && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
11009 && uses_template_parms (DECL_CONTEXT (decl)))
11010 {
11011 tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11012 tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
11013 r = retrieve_specialization (tmpl, gen_args, 0);
11014 }
11015 else if (DECL_FUNCTION_SCOPE_P (decl)
11016 && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
11017 && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
11018 r = retrieve_local_specialization (decl);
11019 else
11020 /* The typedef is from a non-template context. */
11021 return t;
11022
11023 if (r)
11024 {
11025 r = TREE_TYPE (r);
11026 r = cp_build_qualified_type_real
11027 (r, cp_type_quals (t) | cp_type_quals (r),
11028 complain | tf_ignore_bad_quals);
11029 return r;
11030 }
11031 /* Else we must be instantiating the typedef, so fall through. */
11032 }
11033
11034 if (type
11035 && code != TYPENAME_TYPE
11036 && code != TEMPLATE_TYPE_PARM
11037 && code != IDENTIFIER_NODE
11038 && code != FUNCTION_TYPE
11039 && code != METHOD_TYPE)
11040 type = tsubst (type, args, complain, in_decl);
11041 if (type == error_mark_node)
11042 return error_mark_node;
11043
11044 switch (code)
11045 {
11046 case RECORD_TYPE:
11047 case UNION_TYPE:
11048 case ENUMERAL_TYPE:
11049 return tsubst_aggr_type (t, args, complain, in_decl,
11050 /*entering_scope=*/0);
11051
11052 case ERROR_MARK:
11053 case IDENTIFIER_NODE:
11054 case VOID_TYPE:
11055 case REAL_TYPE:
11056 case COMPLEX_TYPE:
11057 case VECTOR_TYPE:
11058 case BOOLEAN_TYPE:
11059 case NULLPTR_TYPE:
11060 case LANG_TYPE:
11061 return t;
11062
11063 case INTEGER_TYPE:
11064 if (t == integer_type_node)
11065 return t;
11066
11067 if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
11068 && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
11069 return t;
11070
11071 {
11072 tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
11073
11074 max = tsubst_expr (omax, args, complain, in_decl,
11075 /*integral_constant_expression_p=*/false);
11076
11077 /* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
11078 needed. */
11079 if (TREE_CODE (max) == NOP_EXPR
11080 && TREE_SIDE_EFFECTS (omax)
11081 && !TREE_TYPE (max))
11082 TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
11083
11084 /* If we're in a partial instantiation, preserve the magic NOP_EXPR
11085 with TREE_SIDE_EFFECTS that indicates this is not an integral
11086 constant expression. */
11087 if (processing_template_decl
11088 && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
11089 {
11090 gcc_assert (TREE_CODE (max) == NOP_EXPR);
11091 TREE_SIDE_EFFECTS (max) = 1;
11092 }
11093
11094 return compute_array_index_type (NULL_TREE, max, complain);
11095 }
11096
11097 case TEMPLATE_TYPE_PARM:
11098 case TEMPLATE_TEMPLATE_PARM:
11099 case BOUND_TEMPLATE_TEMPLATE_PARM:
11100 case TEMPLATE_PARM_INDEX:
11101 {
11102 int idx;
11103 int level;
11104 int levels;
11105 tree arg = NULL_TREE;
11106
11107 r = NULL_TREE;
11108
11109 gcc_assert (TREE_VEC_LENGTH (args) > 0);
11110 template_parm_level_and_index (t, &level, &idx);
11111
11112 levels = TMPL_ARGS_DEPTH (args);
11113 if (level <= levels)
11114 {
11115 arg = TMPL_ARG (args, level, idx);
11116
11117 if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
11118 /* See through ARGUMENT_PACK_SELECT arguments. */
11119 arg = ARGUMENT_PACK_SELECT_ARG (arg);
11120 }
11121
11122 if (arg == error_mark_node)
11123 return error_mark_node;
11124 else if (arg != NULL_TREE)
11125 {
11126 if (ARGUMENT_PACK_P (arg))
11127 /* If ARG is an argument pack, we don't actually want to
11128 perform a substitution here, because substitutions
11129 for argument packs are only done
11130 element-by-element. We can get to this point when
11131 substituting the type of a non-type template
11132 parameter pack, when that type actually contains
11133 template parameter packs from an outer template, e.g.,
11134
11135 template<typename... Types> struct A {
11136 template<Types... Values> struct B { };
11137 }; */
11138 return t;
11139
11140 if (code == TEMPLATE_TYPE_PARM)
11141 {
11142 int quals;
11143 gcc_assert (TYPE_P (arg));
11144
11145 quals = cp_type_quals (arg) | cp_type_quals (t);
11146
11147 return cp_build_qualified_type_real
11148 (arg, quals, complain | tf_ignore_bad_quals);
11149 }
11150 else if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
11151 {
11152 /* We are processing a type constructed from a
11153 template template parameter. */
11154 tree argvec = tsubst (TYPE_TI_ARGS (t),
11155 args, complain, in_decl);
11156 if (argvec == error_mark_node)
11157 return error_mark_node;
11158
11159 gcc_assert (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
11160 || TREE_CODE (arg) == TEMPLATE_DECL
11161 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
11162
11163 if (TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE)
11164 /* Consider this code:
11165
11166 template <template <class> class Template>
11167 struct Internal {
11168 template <class Arg> using Bind = Template<Arg>;
11169 };
11170
11171 template <template <class> class Template, class Arg>
11172 using Instantiate = Template<Arg>; //#0
11173
11174 template <template <class> class Template,
11175 class Argument>
11176 using Bind =
11177 Instantiate<Internal<Template>::template Bind,
11178 Argument>; //#1
11179
11180 When #1 is parsed, the
11181 BOUND_TEMPLATE_TEMPLATE_PARM representing the
11182 parameter `Template' in #0 matches the
11183 UNBOUND_CLASS_TEMPLATE representing the argument
11184 `Internal<Template>::template Bind'; We then want
11185 to assemble the type `Bind<Argument>' that can't
11186 be fully created right now, because
11187 `Internal<Template>' not being complete, the Bind
11188 template cannot be looked up in that context. So
11189 we need to "store" `Bind<Argument>' for later
11190 when the context of Bind becomes complete. Let's
11191 store that in a TYPENAME_TYPE. */
11192 return make_typename_type (TYPE_CONTEXT (arg),
11193 build_nt (TEMPLATE_ID_EXPR,
11194 TYPE_IDENTIFIER (arg),
11195 argvec),
11196 typename_type,
11197 complain);
11198
11199 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
11200 are resolving nested-types in the signature of a
11201 member function templates. Otherwise ARG is a
11202 TEMPLATE_DECL and is the real template to be
11203 instantiated. */
11204 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11205 arg = TYPE_NAME (arg);
11206
11207 r = lookup_template_class (arg,
11208 argvec, in_decl,
11209 DECL_CONTEXT (arg),
11210 /*entering_scope=*/0,
11211 complain);
11212 return cp_build_qualified_type_real
11213 (r, cp_type_quals (t), complain);
11214 }
11215 else
11216 /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX. */
11217 return convert_from_reference (unshare_expr (arg));
11218 }
11219
11220 if (level == 1)
11221 /* This can happen during the attempted tsubst'ing in
11222 unify. This means that we don't yet have any information
11223 about the template parameter in question. */
11224 return t;
11225
11226 /* If we get here, we must have been looking at a parm for a
11227 more deeply nested template. Make a new version of this
11228 template parameter, but with a lower level. */
11229 switch (code)
11230 {
11231 case TEMPLATE_TYPE_PARM:
11232 case TEMPLATE_TEMPLATE_PARM:
11233 case BOUND_TEMPLATE_TEMPLATE_PARM:
11234 if (cp_type_quals (t))
11235 {
11236 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
11237 r = cp_build_qualified_type_real
11238 (r, cp_type_quals (t),
11239 complain | (code == TEMPLATE_TYPE_PARM
11240 ? tf_ignore_bad_quals : 0));
11241 }
11242 else
11243 {
11244 r = copy_type (t);
11245 TEMPLATE_TYPE_PARM_INDEX (r)
11246 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
11247 r, levels, args, complain);
11248 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
11249 TYPE_MAIN_VARIANT (r) = r;
11250 TYPE_POINTER_TO (r) = NULL_TREE;
11251 TYPE_REFERENCE_TO (r) = NULL_TREE;
11252
11253 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
11254 /* We have reduced the level of the template
11255 template parameter, but not the levels of its
11256 template parameters, so canonical_type_parameter
11257 will not be able to find the canonical template
11258 template parameter for this level. Thus, we
11259 require structural equality checking to compare
11260 TEMPLATE_TEMPLATE_PARMs. */
11261 SET_TYPE_STRUCTURAL_EQUALITY (r);
11262 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
11263 SET_TYPE_STRUCTURAL_EQUALITY (r);
11264 else
11265 TYPE_CANONICAL (r) = canonical_type_parameter (r);
11266
11267 if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
11268 {
11269 tree argvec = tsubst (TYPE_TI_ARGS (t), args,
11270 complain, in_decl);
11271 if (argvec == error_mark_node)
11272 return error_mark_node;
11273
11274 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
11275 = build_template_info (TYPE_TI_TEMPLATE (t), argvec);
11276 }
11277 }
11278 break;
11279
11280 case TEMPLATE_PARM_INDEX:
11281 r = reduce_template_parm_level (t, type, levels, args, complain);
11282 break;
11283
11284 default:
11285 gcc_unreachable ();
11286 }
11287
11288 return r;
11289 }
11290
11291 case TREE_LIST:
11292 {
11293 tree purpose, value, chain;
11294
11295 if (t == void_list_node)
11296 return t;
11297
11298 purpose = TREE_PURPOSE (t);
11299 if (purpose)
11300 {
11301 purpose = tsubst (purpose, args, complain, in_decl);
11302 if (purpose == error_mark_node)
11303 return error_mark_node;
11304 }
11305 value = TREE_VALUE (t);
11306 if (value)
11307 {
11308 value = tsubst (value, args, complain, in_decl);
11309 if (value == error_mark_node)
11310 return error_mark_node;
11311 }
11312 chain = TREE_CHAIN (t);
11313 if (chain && chain != void_type_node)
11314 {
11315 chain = tsubst (chain, args, complain, in_decl);
11316 if (chain == error_mark_node)
11317 return error_mark_node;
11318 }
11319 if (purpose == TREE_PURPOSE (t)
11320 && value == TREE_VALUE (t)
11321 && chain == TREE_CHAIN (t))
11322 return t;
11323 return hash_tree_cons (purpose, value, chain);
11324 }
11325
11326 case TREE_BINFO:
11327 /* We should never be tsubsting a binfo. */
11328 gcc_unreachable ();
11329
11330 case TREE_VEC:
11331 /* A vector of template arguments. */
11332 gcc_assert (!type);
11333 return tsubst_template_args (t, args, complain, in_decl);
11334
11335 case POINTER_TYPE:
11336 case REFERENCE_TYPE:
11337 {
11338 if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
11339 return t;
11340
11341 /* [temp.deduct]
11342
11343 Type deduction may fail for any of the following
11344 reasons:
11345
11346 -- Attempting to create a pointer to reference type.
11347 -- Attempting to create a reference to a reference type or
11348 a reference to void.
11349
11350 Core issue 106 says that creating a reference to a reference
11351 during instantiation is no longer a cause for failure. We
11352 only enforce this check in strict C++98 mode. */
11353 if ((TREE_CODE (type) == REFERENCE_TYPE
11354 && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
11355 || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
11356 {
11357 static location_t last_loc;
11358
11359 /* We keep track of the last time we issued this error
11360 message to avoid spewing a ton of messages during a
11361 single bad template instantiation. */
11362 if (complain & tf_error
11363 && last_loc != input_location)
11364 {
11365 if (TREE_CODE (type) == VOID_TYPE)
11366 error ("forming reference to void");
11367 else if (code == POINTER_TYPE)
11368 error ("forming pointer to reference type %qT", type);
11369 else
11370 error ("forming reference to reference type %qT", type);
11371 last_loc = input_location;
11372 }
11373
11374 return error_mark_node;
11375 }
11376 else if (code == POINTER_TYPE)
11377 {
11378 r = build_pointer_type (type);
11379 if (TREE_CODE (type) == METHOD_TYPE)
11380 r = build_ptrmemfunc_type (r);
11381 }
11382 else if (TREE_CODE (type) == REFERENCE_TYPE)
11383 /* In C++0x, during template argument substitution, when there is an
11384 attempt to create a reference to a reference type, reference
11385 collapsing is applied as described in [14.3.1/4 temp.arg.type]:
11386
11387 "If a template-argument for a template-parameter T names a type
11388 that is a reference to a type A, an attempt to create the type
11389 'lvalue reference to cv T' creates the type 'lvalue reference to
11390 A,' while an attempt to create the type type rvalue reference to
11391 cv T' creates the type T"
11392 */
11393 r = cp_build_reference_type
11394 (TREE_TYPE (type),
11395 TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
11396 else
11397 r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
11398 r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
11399
11400 if (r != error_mark_node)
11401 /* Will this ever be needed for TYPE_..._TO values? */
11402 layout_type (r);
11403
11404 return r;
11405 }
11406 case OFFSET_TYPE:
11407 {
11408 r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
11409 if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
11410 {
11411 /* [temp.deduct]
11412
11413 Type deduction may fail for any of the following
11414 reasons:
11415
11416 -- Attempting to create "pointer to member of T" when T
11417 is not a class type. */
11418 if (complain & tf_error)
11419 error ("creating pointer to member of non-class type %qT", r);
11420 return error_mark_node;
11421 }
11422 if (TREE_CODE (type) == REFERENCE_TYPE)
11423 {
11424 if (complain & tf_error)
11425 error ("creating pointer to member reference type %qT", type);
11426 return error_mark_node;
11427 }
11428 if (TREE_CODE (type) == VOID_TYPE)
11429 {
11430 if (complain & tf_error)
11431 error ("creating pointer to member of type void");
11432 return error_mark_node;
11433 }
11434 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
11435 if (TREE_CODE (type) == FUNCTION_TYPE)
11436 {
11437 /* The type of the implicit object parameter gets its
11438 cv-qualifiers from the FUNCTION_TYPE. */
11439 tree memptr;
11440 tree method_type = build_memfn_type (type, r, type_memfn_quals (type));
11441 memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
11442 return cp_build_qualified_type_real (memptr, cp_type_quals (t),
11443 complain);
11444 }
11445 else
11446 return cp_build_qualified_type_real (build_ptrmem_type (r, type),
11447 cp_type_quals (t),
11448 complain);
11449 }
11450 case FUNCTION_TYPE:
11451 case METHOD_TYPE:
11452 {
11453 tree fntype;
11454 tree specs;
11455 fntype = tsubst_function_type (t, args, complain, in_decl);
11456 if (fntype == error_mark_node)
11457 return error_mark_node;
11458
11459 /* Substitute the exception specification. */
11460 specs = tsubst_exception_specification (t, args, complain,
11461 in_decl, /*defer_ok*/true);
11462 if (specs == error_mark_node)
11463 return error_mark_node;
11464 if (specs)
11465 fntype = build_exception_variant (fntype, specs);
11466 return fntype;
11467 }
11468 case ARRAY_TYPE:
11469 {
11470 tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
11471 if (domain == error_mark_node)
11472 return error_mark_node;
11473
11474 /* As an optimization, we avoid regenerating the array type if
11475 it will obviously be the same as T. */
11476 if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
11477 return t;
11478
11479 /* These checks should match the ones in grokdeclarator.
11480
11481 [temp.deduct]
11482
11483 The deduction may fail for any of the following reasons:
11484
11485 -- Attempting to create an array with an element type that
11486 is void, a function type, or a reference type, or [DR337]
11487 an abstract class type. */
11488 if (TREE_CODE (type) == VOID_TYPE
11489 || TREE_CODE (type) == FUNCTION_TYPE
11490 || TREE_CODE (type) == REFERENCE_TYPE)
11491 {
11492 if (complain & tf_error)
11493 error ("creating array of %qT", type);
11494 return error_mark_node;
11495 }
11496 if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
11497 {
11498 if (complain & tf_error)
11499 error ("creating array of %qT, which is an abstract class type",
11500 type);
11501 return error_mark_node;
11502 }
11503
11504 r = build_cplus_array_type (type, domain);
11505
11506 if (TYPE_USER_ALIGN (t))
11507 {
11508 TYPE_ALIGN (r) = TYPE_ALIGN (t);
11509 TYPE_USER_ALIGN (r) = 1;
11510 }
11511
11512 return r;
11513 }
11514
11515 case TYPENAME_TYPE:
11516 {
11517 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
11518 in_decl, /*entering_scope=*/1);
11519 tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
11520 complain, in_decl);
11521
11522 if (ctx == error_mark_node || f == error_mark_node)
11523 return error_mark_node;
11524
11525 if (!MAYBE_CLASS_TYPE_P (ctx))
11526 {
11527 if (complain & tf_error)
11528 error ("%qT is not a class, struct, or union type", ctx);
11529 return error_mark_node;
11530 }
11531 else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
11532 {
11533 /* Normally, make_typename_type does not require that the CTX
11534 have complete type in order to allow things like:
11535
11536 template <class T> struct S { typename S<T>::X Y; };
11537
11538 But, such constructs have already been resolved by this
11539 point, so here CTX really should have complete type, unless
11540 it's a partial instantiation. */
11541 ctx = complete_type (ctx);
11542 if (!COMPLETE_TYPE_P (ctx))
11543 {
11544 if (complain & tf_error)
11545 cxx_incomplete_type_error (NULL_TREE, ctx);
11546 return error_mark_node;
11547 }
11548 }
11549
11550 f = make_typename_type (ctx, f, typename_type,
11551 (complain & tf_error) | tf_keep_type_decl);
11552 if (f == error_mark_node)
11553 return f;
11554 if (TREE_CODE (f) == TYPE_DECL)
11555 {
11556 complain |= tf_ignore_bad_quals;
11557 f = TREE_TYPE (f);
11558 }
11559
11560 if (TREE_CODE (f) != TYPENAME_TYPE)
11561 {
11562 if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
11563 {
11564 if (complain & tf_error)
11565 error ("%qT resolves to %qT, which is not an enumeration type",
11566 t, f);
11567 else
11568 return error_mark_node;
11569 }
11570 else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
11571 {
11572 if (complain & tf_error)
11573 error ("%qT resolves to %qT, which is is not a class type",
11574 t, f);
11575 else
11576 return error_mark_node;
11577 }
11578 }
11579
11580 return cp_build_qualified_type_real
11581 (f, cp_type_quals (f) | cp_type_quals (t), complain);
11582 }
11583
11584 case UNBOUND_CLASS_TEMPLATE:
11585 {
11586 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
11587 in_decl, /*entering_scope=*/1);
11588 tree name = TYPE_IDENTIFIER (t);
11589 tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
11590
11591 if (ctx == error_mark_node || name == error_mark_node)
11592 return error_mark_node;
11593
11594 if (parm_list)
11595 parm_list = tsubst_template_parms (parm_list, args, complain);
11596 return make_unbound_class_template (ctx, name, parm_list, complain);
11597 }
11598
11599 case TYPEOF_TYPE:
11600 {
11601 tree type;
11602
11603 ++cp_unevaluated_operand;
11604 ++c_inhibit_evaluation_warnings;
11605
11606 type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
11607 complain, in_decl,
11608 /*integral_constant_expression_p=*/false);
11609
11610 --cp_unevaluated_operand;
11611 --c_inhibit_evaluation_warnings;
11612
11613 type = finish_typeof (type);
11614 return cp_build_qualified_type_real (type,
11615 cp_type_quals (t)
11616 | cp_type_quals (type),
11617 complain);
11618 }
11619
11620 case DECLTYPE_TYPE:
11621 {
11622 tree type;
11623
11624 ++cp_unevaluated_operand;
11625 ++c_inhibit_evaluation_warnings;
11626
11627 type = tsubst_expr (DECLTYPE_TYPE_EXPR (t), args,
11628 complain, in_decl,
11629 /*integral_constant_expression_p=*/false);
11630
11631 --cp_unevaluated_operand;
11632 --c_inhibit_evaluation_warnings;
11633
11634 if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
11635 type = lambda_capture_field_type (type);
11636 else if (DECLTYPE_FOR_LAMBDA_PROXY (t))
11637 type = lambda_proxy_type (type);
11638 else
11639 type = finish_decltype_type
11640 (type, DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t), complain);
11641 return cp_build_qualified_type_real (type,
11642 cp_type_quals (t)
11643 | cp_type_quals (type),
11644 complain);
11645 }
11646
11647 case UNDERLYING_TYPE:
11648 {
11649 tree type = tsubst (UNDERLYING_TYPE_TYPE (t), args,
11650 complain, in_decl);
11651 return finish_underlying_type (type);
11652 }
11653
11654 case TYPE_ARGUMENT_PACK:
11655 case NONTYPE_ARGUMENT_PACK:
11656 {
11657 tree r = TYPE_P (t) ? cxx_make_type (code) : make_node (code);
11658 tree packed_out =
11659 tsubst_template_args (ARGUMENT_PACK_ARGS (t),
11660 args,
11661 complain,
11662 in_decl);
11663 SET_ARGUMENT_PACK_ARGS (r, packed_out);
11664
11665 /* For template nontype argument packs, also substitute into
11666 the type. */
11667 if (code == NONTYPE_ARGUMENT_PACK)
11668 TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
11669
11670 return r;
11671 }
11672 break;
11673
11674 case INTEGER_CST:
11675 case REAL_CST:
11676 case STRING_CST:
11677 case PLUS_EXPR:
11678 case MINUS_EXPR:
11679 case NEGATE_EXPR:
11680 case NOP_EXPR:
11681 case INDIRECT_REF:
11682 case ADDR_EXPR:
11683 case CALL_EXPR:
11684 case ARRAY_REF:
11685 case SCOPE_REF:
11686 /* We should use one of the expression tsubsts for these codes. */
11687 gcc_unreachable ();
11688
11689 default:
11690 sorry ("use of %qs in template", tree_code_name [(int) code]);
11691 return error_mark_node;
11692 }
11693 }
11694
11695 /* Like tsubst_expr for a BASELINK. OBJECT_TYPE, if non-NULL, is the
11696 type of the expression on the left-hand side of the "." or "->"
11697 operator. */
11698
11699 static tree
11700 tsubst_baselink (tree baselink, tree object_type,
11701 tree args, tsubst_flags_t complain, tree in_decl)
11702 {
11703 tree name;
11704 tree qualifying_scope;
11705 tree fns;
11706 tree optype;
11707 tree template_args = 0;
11708 bool template_id_p = false;
11709
11710 /* A baselink indicates a function from a base class. Both the
11711 BASELINK_ACCESS_BINFO and the base class referenced may
11712 indicate bases of the template class, rather than the
11713 instantiated class. In addition, lookups that were not
11714 ambiguous before may be ambiguous now. Therefore, we perform
11715 the lookup again. */
11716 qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
11717 qualifying_scope = tsubst (qualifying_scope, args,
11718 complain, in_decl);
11719 fns = BASELINK_FUNCTIONS (baselink);
11720 optype = tsubst (BASELINK_OPTYPE (baselink), args, complain, in_decl);
11721 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
11722 {
11723 template_id_p = true;
11724 template_args = TREE_OPERAND (fns, 1);
11725 fns = TREE_OPERAND (fns, 0);
11726 if (template_args)
11727 template_args = tsubst_template_args (template_args, args,
11728 complain, in_decl);
11729 }
11730 name = DECL_NAME (get_first_fn (fns));
11731 if (IDENTIFIER_TYPENAME_P (name))
11732 name = mangle_conv_op_name_for_type (optype);
11733 baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
11734 if (!baselink)
11735 return error_mark_node;
11736
11737 /* If lookup found a single function, mark it as used at this
11738 point. (If it lookup found multiple functions the one selected
11739 later by overload resolution will be marked as used at that
11740 point.) */
11741 if (BASELINK_P (baselink))
11742 fns = BASELINK_FUNCTIONS (baselink);
11743 if (!template_id_p && !really_overloaded_fn (fns))
11744 mark_used (OVL_CURRENT (fns));
11745
11746 /* Add back the template arguments, if present. */
11747 if (BASELINK_P (baselink) && template_id_p)
11748 BASELINK_FUNCTIONS (baselink)
11749 = build_nt (TEMPLATE_ID_EXPR,
11750 BASELINK_FUNCTIONS (baselink),
11751 template_args);
11752 /* Update the conversion operator type. */
11753 BASELINK_OPTYPE (baselink) = optype;
11754
11755 if (!object_type)
11756 object_type = current_class_type;
11757 return adjust_result_of_qualified_name_lookup (baselink,
11758 qualifying_scope,
11759 object_type);
11760 }
11761
11762 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID. DONE is
11763 true if the qualified-id will be a postfix-expression in-and-of
11764 itself; false if more of the postfix-expression follows the
11765 QUALIFIED_ID. ADDRESS_P is true if the qualified-id is the operand
11766 of "&". */
11767
11768 static tree
11769 tsubst_qualified_id (tree qualified_id, tree args,
11770 tsubst_flags_t complain, tree in_decl,
11771 bool done, bool address_p)
11772 {
11773 tree expr;
11774 tree scope;
11775 tree name;
11776 bool is_template;
11777 tree template_args;
11778
11779 gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
11780
11781 /* Figure out what name to look up. */
11782 name = TREE_OPERAND (qualified_id, 1);
11783 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11784 {
11785 is_template = true;
11786 template_args = TREE_OPERAND (name, 1);
11787 if (template_args)
11788 template_args = tsubst_template_args (template_args, args,
11789 complain, in_decl);
11790 name = TREE_OPERAND (name, 0);
11791 }
11792 else
11793 {
11794 is_template = false;
11795 template_args = NULL_TREE;
11796 }
11797
11798 /* Substitute into the qualifying scope. When there are no ARGS, we
11799 are just trying to simplify a non-dependent expression. In that
11800 case the qualifying scope may be dependent, and, in any case,
11801 substituting will not help. */
11802 scope = TREE_OPERAND (qualified_id, 0);
11803 if (args)
11804 {
11805 scope = tsubst (scope, args, complain, in_decl);
11806 expr = tsubst_copy (name, args, complain, in_decl);
11807 }
11808 else
11809 expr = name;
11810
11811 if (dependent_scope_p (scope))
11812 {
11813 if (is_template)
11814 expr = build_min_nt (TEMPLATE_ID_EXPR, expr, template_args);
11815 return build_qualified_name (NULL_TREE, scope, expr,
11816 QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
11817 }
11818
11819 if (!BASELINK_P (name) && !DECL_P (expr))
11820 {
11821 if (TREE_CODE (expr) == BIT_NOT_EXPR)
11822 {
11823 /* A BIT_NOT_EXPR is used to represent a destructor. */
11824 if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
11825 {
11826 error ("qualifying type %qT does not match destructor name ~%qT",
11827 scope, TREE_OPERAND (expr, 0));
11828 expr = error_mark_node;
11829 }
11830 else
11831 expr = lookup_qualified_name (scope, complete_dtor_identifier,
11832 /*is_type_p=*/0, false);
11833 }
11834 else
11835 expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
11836 if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
11837 ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
11838 {
11839 if (complain & tf_error)
11840 {
11841 error ("dependent-name %qE is parsed as a non-type, but "
11842 "instantiation yields a type", qualified_id);
11843 inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
11844 }
11845 return error_mark_node;
11846 }
11847 }
11848
11849 if (DECL_P (expr))
11850 {
11851 check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
11852 scope);
11853 /* Remember that there was a reference to this entity. */
11854 mark_used (expr);
11855 }
11856
11857 if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
11858 {
11859 if (complain & tf_error)
11860 qualified_name_lookup_error (scope,
11861 TREE_OPERAND (qualified_id, 1),
11862 expr, input_location);
11863 return error_mark_node;
11864 }
11865
11866 if (is_template)
11867 expr = lookup_template_function (expr, template_args);
11868
11869 if (expr == error_mark_node && complain & tf_error)
11870 qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
11871 expr, input_location);
11872 else if (TYPE_P (scope))
11873 {
11874 expr = (adjust_result_of_qualified_name_lookup
11875 (expr, scope, current_class_type));
11876 expr = (finish_qualified_id_expr
11877 (scope, expr, done, address_p && PTRMEM_OK_P (qualified_id),
11878 QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
11879 /*template_arg_p=*/false));
11880 }
11881
11882 /* Expressions do not generally have reference type. */
11883 if (TREE_CODE (expr) != SCOPE_REF
11884 /* However, if we're about to form a pointer-to-member, we just
11885 want the referenced member referenced. */
11886 && TREE_CODE (expr) != OFFSET_REF)
11887 expr = convert_from_reference (expr);
11888
11889 return expr;
11890 }
11891
11892 /* Like tsubst, but deals with expressions. This function just replaces
11893 template parms; to finish processing the resultant expression, use
11894 tsubst_copy_and_build or tsubst_expr. */
11895
11896 static tree
11897 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11898 {
11899 enum tree_code code;
11900 tree r;
11901
11902 if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
11903 return t;
11904
11905 code = TREE_CODE (t);
11906
11907 switch (code)
11908 {
11909 case PARM_DECL:
11910 r = retrieve_local_specialization (t);
11911
11912 if (r == NULL)
11913 {
11914 tree c;
11915
11916 /* We get here for a use of 'this' in an NSDMI. */
11917 if (DECL_NAME (t) == this_identifier
11918 && at_function_scope_p ()
11919 && DECL_CONSTRUCTOR_P (current_function_decl))
11920 return current_class_ptr;
11921
11922 /* This can happen for a parameter name used later in a function
11923 declaration (such as in a late-specified return type). Just
11924 make a dummy decl, since it's only used for its type. */
11925 gcc_assert (cp_unevaluated_operand != 0);
11926 /* We copy T because want to tsubst the PARM_DECL only,
11927 not the following PARM_DECLs that are chained to T. */
11928 c = copy_node (t);
11929 r = tsubst_decl (c, args, complain);
11930 /* Give it the template pattern as its context; its true context
11931 hasn't been instantiated yet and this is good enough for
11932 mangling. */
11933 DECL_CONTEXT (r) = DECL_CONTEXT (t);
11934 }
11935
11936 if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
11937 r = ARGUMENT_PACK_SELECT_ARG (r);
11938 mark_used (r);
11939 return r;
11940
11941 case CONST_DECL:
11942 {
11943 tree enum_type;
11944 tree v;
11945
11946 if (DECL_TEMPLATE_PARM_P (t))
11947 return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
11948 /* There is no need to substitute into namespace-scope
11949 enumerators. */
11950 if (DECL_NAMESPACE_SCOPE_P (t))
11951 return t;
11952 /* If ARGS is NULL, then T is known to be non-dependent. */
11953 if (args == NULL_TREE)
11954 return integral_constant_value (t);
11955
11956 /* Unfortunately, we cannot just call lookup_name here.
11957 Consider:
11958
11959 template <int I> int f() {
11960 enum E { a = I };
11961 struct S { void g() { E e = a; } };
11962 };
11963
11964 When we instantiate f<7>::S::g(), say, lookup_name is not
11965 clever enough to find f<7>::a. */
11966 enum_type
11967 = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
11968 /*entering_scope=*/0);
11969
11970 for (v = TYPE_VALUES (enum_type);
11971 v != NULL_TREE;
11972 v = TREE_CHAIN (v))
11973 if (TREE_PURPOSE (v) == DECL_NAME (t))
11974 return TREE_VALUE (v);
11975
11976 /* We didn't find the name. That should never happen; if
11977 name-lookup found it during preliminary parsing, we
11978 should find it again here during instantiation. */
11979 gcc_unreachable ();
11980 }
11981 return t;
11982
11983 case FIELD_DECL:
11984 if (DECL_CONTEXT (t))
11985 {
11986 tree ctx;
11987
11988 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
11989 /*entering_scope=*/1);
11990 if (ctx != DECL_CONTEXT (t))
11991 {
11992 tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
11993 if (!r)
11994 {
11995 if (complain & tf_error)
11996 error ("using invalid field %qD", t);
11997 return error_mark_node;
11998 }
11999 return r;
12000 }
12001 }
12002
12003 return t;
12004
12005 case VAR_DECL:
12006 case FUNCTION_DECL:
12007 if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
12008 || local_variable_p (t))
12009 t = tsubst (t, args, complain, in_decl);
12010 mark_used (t);
12011 return t;
12012
12013 case NAMESPACE_DECL:
12014 return t;
12015
12016 case OVERLOAD:
12017 /* An OVERLOAD will always be a non-dependent overload set; an
12018 overload set from function scope will just be represented with an
12019 IDENTIFIER_NODE, and from class scope with a BASELINK. */
12020 gcc_assert (!uses_template_parms (t));
12021 return t;
12022
12023 case BASELINK:
12024 return tsubst_baselink (t, current_class_type, args, complain, in_decl);
12025
12026 case TEMPLATE_DECL:
12027 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
12028 return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
12029 args, complain, in_decl);
12030 else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
12031 return tsubst (t, args, complain, in_decl);
12032 else if (DECL_CLASS_SCOPE_P (t)
12033 && uses_template_parms (DECL_CONTEXT (t)))
12034 {
12035 /* Template template argument like the following example need
12036 special treatment:
12037
12038 template <template <class> class TT> struct C {};
12039 template <class T> struct D {
12040 template <class U> struct E {};
12041 C<E> c; // #1
12042 };
12043 D<int> d; // #2
12044
12045 We are processing the template argument `E' in #1 for
12046 the template instantiation #2. Originally, `E' is a
12047 TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT. Now we
12048 have to substitute this with one having context `D<int>'. */
12049
12050 tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
12051 return lookup_field (context, DECL_NAME(t), 0, false);
12052 }
12053 else
12054 /* Ordinary template template argument. */
12055 return t;
12056
12057 case CAST_EXPR:
12058 case REINTERPRET_CAST_EXPR:
12059 case CONST_CAST_EXPR:
12060 case STATIC_CAST_EXPR:
12061 case DYNAMIC_CAST_EXPR:
12062 case IMPLICIT_CONV_EXPR:
12063 case CONVERT_EXPR:
12064 case NOP_EXPR:
12065 return build1
12066 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12067 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
12068
12069 case SIZEOF_EXPR:
12070 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
12071 {
12072
12073 tree expanded;
12074 int len = 0;
12075
12076 ++cp_unevaluated_operand;
12077 ++c_inhibit_evaluation_warnings;
12078 /* We only want to compute the number of arguments. */
12079 expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
12080 complain, in_decl);
12081 --cp_unevaluated_operand;
12082 --c_inhibit_evaluation_warnings;
12083
12084 if (TREE_CODE (expanded) == TREE_VEC)
12085 len = TREE_VEC_LENGTH (expanded);
12086
12087 if (expanded == error_mark_node)
12088 return error_mark_node;
12089 else if (PACK_EXPANSION_P (expanded)
12090 || (TREE_CODE (expanded) == TREE_VEC
12091 && len > 0
12092 && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
12093 {
12094 if (TREE_CODE (expanded) == TREE_VEC)
12095 expanded = TREE_VEC_ELT (expanded, len - 1);
12096
12097 if (TYPE_P (expanded))
12098 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR,
12099 complain & tf_error);
12100 else
12101 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
12102 complain & tf_error);
12103 }
12104 else
12105 return build_int_cst (size_type_node, len);
12106 }
12107 /* Fall through */
12108
12109 case INDIRECT_REF:
12110 case NEGATE_EXPR:
12111 case TRUTH_NOT_EXPR:
12112 case BIT_NOT_EXPR:
12113 case ADDR_EXPR:
12114 case UNARY_PLUS_EXPR: /* Unary + */
12115 case ALIGNOF_EXPR:
12116 case AT_ENCODE_EXPR:
12117 case ARROW_EXPR:
12118 case THROW_EXPR:
12119 case TYPEID_EXPR:
12120 case REALPART_EXPR:
12121 case IMAGPART_EXPR:
12122 return build1
12123 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12124 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
12125
12126 case COMPONENT_REF:
12127 {
12128 tree object;
12129 tree name;
12130
12131 object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
12132 name = TREE_OPERAND (t, 1);
12133 if (TREE_CODE (name) == BIT_NOT_EXPR)
12134 {
12135 name = tsubst_copy (TREE_OPERAND (name, 0), args,
12136 complain, in_decl);
12137 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
12138 }
12139 else if (TREE_CODE (name) == SCOPE_REF
12140 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
12141 {
12142 tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
12143 complain, in_decl);
12144 name = TREE_OPERAND (name, 1);
12145 name = tsubst_copy (TREE_OPERAND (name, 0), args,
12146 complain, in_decl);
12147 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
12148 name = build_qualified_name (/*type=*/NULL_TREE,
12149 base, name,
12150 /*template_p=*/false);
12151 }
12152 else if (BASELINK_P (name))
12153 name = tsubst_baselink (name,
12154 non_reference (TREE_TYPE (object)),
12155 args, complain,
12156 in_decl);
12157 else
12158 name = tsubst_copy (name, args, complain, in_decl);
12159 return build_nt (COMPONENT_REF, object, name, NULL_TREE);
12160 }
12161
12162 case PLUS_EXPR:
12163 case MINUS_EXPR:
12164 case MULT_EXPR:
12165 case TRUNC_DIV_EXPR:
12166 case CEIL_DIV_EXPR:
12167 case FLOOR_DIV_EXPR:
12168 case ROUND_DIV_EXPR:
12169 case EXACT_DIV_EXPR:
12170 case BIT_AND_EXPR:
12171 case BIT_IOR_EXPR:
12172 case BIT_XOR_EXPR:
12173 case TRUNC_MOD_EXPR:
12174 case FLOOR_MOD_EXPR:
12175 case TRUTH_ANDIF_EXPR:
12176 case TRUTH_ORIF_EXPR:
12177 case TRUTH_AND_EXPR:
12178 case TRUTH_OR_EXPR:
12179 case RSHIFT_EXPR:
12180 case LSHIFT_EXPR:
12181 case RROTATE_EXPR:
12182 case LROTATE_EXPR:
12183 case EQ_EXPR:
12184 case NE_EXPR:
12185 case MAX_EXPR:
12186 case MIN_EXPR:
12187 case LE_EXPR:
12188 case GE_EXPR:
12189 case LT_EXPR:
12190 case GT_EXPR:
12191 case COMPOUND_EXPR:
12192 case DOTSTAR_EXPR:
12193 case MEMBER_REF:
12194 case PREDECREMENT_EXPR:
12195 case PREINCREMENT_EXPR:
12196 case POSTDECREMENT_EXPR:
12197 case POSTINCREMENT_EXPR:
12198 return build_nt
12199 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12200 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12201
12202 case SCOPE_REF:
12203 return build_qualified_name (/*type=*/NULL_TREE,
12204 tsubst_copy (TREE_OPERAND (t, 0),
12205 args, complain, in_decl),
12206 tsubst_copy (TREE_OPERAND (t, 1),
12207 args, complain, in_decl),
12208 QUALIFIED_NAME_IS_TEMPLATE (t));
12209
12210 case ARRAY_REF:
12211 return build_nt
12212 (ARRAY_REF,
12213 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12214 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12215 NULL_TREE, NULL_TREE);
12216
12217 case CALL_EXPR:
12218 {
12219 int n = VL_EXP_OPERAND_LENGTH (t);
12220 tree result = build_vl_exp (CALL_EXPR, n);
12221 int i;
12222 for (i = 0; i < n; i++)
12223 TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
12224 complain, in_decl);
12225 return result;
12226 }
12227
12228 case COND_EXPR:
12229 case MODOP_EXPR:
12230 case PSEUDO_DTOR_EXPR:
12231 {
12232 r = build_nt
12233 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12234 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12235 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
12236 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
12237 return r;
12238 }
12239
12240 case NEW_EXPR:
12241 {
12242 r = build_nt
12243 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12244 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12245 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
12246 NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
12247 return r;
12248 }
12249
12250 case DELETE_EXPR:
12251 {
12252 r = build_nt
12253 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12254 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12255 DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
12256 DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
12257 return r;
12258 }
12259
12260 case TEMPLATE_ID_EXPR:
12261 {
12262 /* Substituted template arguments */
12263 tree fn = TREE_OPERAND (t, 0);
12264 tree targs = TREE_OPERAND (t, 1);
12265
12266 fn = tsubst_copy (fn, args, complain, in_decl);
12267 if (targs)
12268 targs = tsubst_template_args (targs, args, complain, in_decl);
12269
12270 return lookup_template_function (fn, targs);
12271 }
12272
12273 case TREE_LIST:
12274 {
12275 tree purpose, value, chain;
12276
12277 if (t == void_list_node)
12278 return t;
12279
12280 purpose = TREE_PURPOSE (t);
12281 if (purpose)
12282 purpose = tsubst_copy (purpose, args, complain, in_decl);
12283 value = TREE_VALUE (t);
12284 if (value)
12285 value = tsubst_copy (value, args, complain, in_decl);
12286 chain = TREE_CHAIN (t);
12287 if (chain && chain != void_type_node)
12288 chain = tsubst_copy (chain, args, complain, in_decl);
12289 if (purpose == TREE_PURPOSE (t)
12290 && value == TREE_VALUE (t)
12291 && chain == TREE_CHAIN (t))
12292 return t;
12293 return tree_cons (purpose, value, chain);
12294 }
12295
12296 case RECORD_TYPE:
12297 case UNION_TYPE:
12298 case ENUMERAL_TYPE:
12299 case INTEGER_TYPE:
12300 case TEMPLATE_TYPE_PARM:
12301 case TEMPLATE_TEMPLATE_PARM:
12302 case BOUND_TEMPLATE_TEMPLATE_PARM:
12303 case TEMPLATE_PARM_INDEX:
12304 case POINTER_TYPE:
12305 case REFERENCE_TYPE:
12306 case OFFSET_TYPE:
12307 case FUNCTION_TYPE:
12308 case METHOD_TYPE:
12309 case ARRAY_TYPE:
12310 case TYPENAME_TYPE:
12311 case UNBOUND_CLASS_TEMPLATE:
12312 case TYPEOF_TYPE:
12313 case DECLTYPE_TYPE:
12314 case TYPE_DECL:
12315 return tsubst (t, args, complain, in_decl);
12316
12317 case IDENTIFIER_NODE:
12318 if (IDENTIFIER_TYPENAME_P (t))
12319 {
12320 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12321 return mangle_conv_op_name_for_type (new_type);
12322 }
12323 else
12324 return t;
12325
12326 case CONSTRUCTOR:
12327 /* This is handled by tsubst_copy_and_build. */
12328 gcc_unreachable ();
12329
12330 case VA_ARG_EXPR:
12331 return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
12332 in_decl),
12333 tsubst (TREE_TYPE (t), args, complain, in_decl));
12334
12335 case CLEANUP_POINT_EXPR:
12336 /* We shouldn't have built any of these during initial template
12337 generation. Instead, they should be built during instantiation
12338 in response to the saved STMT_IS_FULL_EXPR_P setting. */
12339 gcc_unreachable ();
12340
12341 case OFFSET_REF:
12342 r = build2
12343 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12344 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12345 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12346 PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
12347 mark_used (TREE_OPERAND (r, 1));
12348 return r;
12349
12350 case EXPR_PACK_EXPANSION:
12351 error ("invalid use of pack expansion expression");
12352 return error_mark_node;
12353
12354 case NONTYPE_ARGUMENT_PACK:
12355 error ("use %<...%> to expand argument pack");
12356 return error_mark_node;
12357
12358 case INTEGER_CST:
12359 case REAL_CST:
12360 case STRING_CST:
12361 case COMPLEX_CST:
12362 {
12363 /* Instantiate any typedefs in the type. */
12364 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12365 r = fold_convert (type, t);
12366 gcc_assert (TREE_CODE (r) == code);
12367 return r;
12368 }
12369
12370 case PTRMEM_CST:
12371 /* These can sometimes show up in a partial instantiation, but never
12372 involve template parms. */
12373 gcc_assert (!uses_template_parms (t));
12374 return t;
12375
12376 default:
12377 /* We shouldn't get here, but keep going if !ENABLE_CHECKING. */
12378 gcc_checking_assert (false);
12379 return t;
12380 }
12381 }
12382
12383 /* Like tsubst_copy, but specifically for OpenMP clauses. */
12384
12385 static tree
12386 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
12387 tree in_decl)
12388 {
12389 tree new_clauses = NULL, nc, oc;
12390
12391 for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
12392 {
12393 nc = copy_node (oc);
12394 OMP_CLAUSE_CHAIN (nc) = new_clauses;
12395 new_clauses = nc;
12396
12397 switch (OMP_CLAUSE_CODE (nc))
12398 {
12399 case OMP_CLAUSE_LASTPRIVATE:
12400 if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
12401 {
12402 OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
12403 tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
12404 in_decl, /*integral_constant_expression_p=*/false);
12405 OMP_CLAUSE_LASTPRIVATE_STMT (nc)
12406 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
12407 }
12408 /* FALLTHRU */
12409 case OMP_CLAUSE_PRIVATE:
12410 case OMP_CLAUSE_SHARED:
12411 case OMP_CLAUSE_FIRSTPRIVATE:
12412 case OMP_CLAUSE_REDUCTION:
12413 case OMP_CLAUSE_COPYIN:
12414 case OMP_CLAUSE_COPYPRIVATE:
12415 case OMP_CLAUSE_IF:
12416 case OMP_CLAUSE_NUM_THREADS:
12417 case OMP_CLAUSE_SCHEDULE:
12418 case OMP_CLAUSE_COLLAPSE:
12419 case OMP_CLAUSE_FINAL:
12420 OMP_CLAUSE_OPERAND (nc, 0)
12421 = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
12422 in_decl, /*integral_constant_expression_p=*/false);
12423 break;
12424 case OMP_CLAUSE_NOWAIT:
12425 case OMP_CLAUSE_ORDERED:
12426 case OMP_CLAUSE_DEFAULT:
12427 case OMP_CLAUSE_UNTIED:
12428 case OMP_CLAUSE_MERGEABLE:
12429 break;
12430 default:
12431 gcc_unreachable ();
12432 }
12433 }
12434
12435 return finish_omp_clauses (nreverse (new_clauses));
12436 }
12437
12438 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes. */
12439
12440 static tree
12441 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
12442 tree in_decl)
12443 {
12444 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
12445
12446 tree purpose, value, chain;
12447
12448 if (t == NULL)
12449 return t;
12450
12451 if (TREE_CODE (t) != TREE_LIST)
12452 return tsubst_copy_and_build (t, args, complain, in_decl,
12453 /*function_p=*/false,
12454 /*integral_constant_expression_p=*/false);
12455
12456 if (t == void_list_node)
12457 return t;
12458
12459 purpose = TREE_PURPOSE (t);
12460 if (purpose)
12461 purpose = RECUR (purpose);
12462 value = TREE_VALUE (t);
12463 if (value && TREE_CODE (value) != LABEL_DECL)
12464 value = RECUR (value);
12465 chain = TREE_CHAIN (t);
12466 if (chain && chain != void_type_node)
12467 chain = RECUR (chain);
12468 return tree_cons (purpose, value, chain);
12469 #undef RECUR
12470 }
12471
12472 /* Substitute one OMP_FOR iterator. */
12473
12474 static void
12475 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
12476 tree condv, tree incrv, tree *clauses,
12477 tree args, tsubst_flags_t complain, tree in_decl,
12478 bool integral_constant_expression_p)
12479 {
12480 #define RECUR(NODE) \
12481 tsubst_expr ((NODE), args, complain, in_decl, \
12482 integral_constant_expression_p)
12483 tree decl, init, cond, incr, auto_node;
12484
12485 init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
12486 gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
12487 decl = RECUR (TREE_OPERAND (init, 0));
12488 init = TREE_OPERAND (init, 1);
12489 auto_node = type_uses_auto (TREE_TYPE (decl));
12490 if (auto_node && init)
12491 {
12492 tree init_expr = init;
12493 if (TREE_CODE (init_expr) == DECL_EXPR)
12494 init_expr = DECL_INITIAL (DECL_EXPR_DECL (init_expr));
12495 init_expr = RECUR (init_expr);
12496 TREE_TYPE (decl)
12497 = do_auto_deduction (TREE_TYPE (decl), init_expr, auto_node);
12498 }
12499 gcc_assert (!type_dependent_expression_p (decl));
12500
12501 if (!CLASS_TYPE_P (TREE_TYPE (decl)))
12502 {
12503 cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
12504 incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
12505 if (TREE_CODE (incr) == MODIFY_EXPR)
12506 incr = build_x_modify_expr (RECUR (TREE_OPERAND (incr, 0)), NOP_EXPR,
12507 RECUR (TREE_OPERAND (incr, 1)),
12508 complain);
12509 else
12510 incr = RECUR (incr);
12511 TREE_VEC_ELT (declv, i) = decl;
12512 TREE_VEC_ELT (initv, i) = init;
12513 TREE_VEC_ELT (condv, i) = cond;
12514 TREE_VEC_ELT (incrv, i) = incr;
12515 return;
12516 }
12517
12518 if (init && TREE_CODE (init) != DECL_EXPR)
12519 {
12520 tree c;
12521 for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
12522 {
12523 if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
12524 || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
12525 && OMP_CLAUSE_DECL (c) == decl)
12526 break;
12527 else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
12528 && OMP_CLAUSE_DECL (c) == decl)
12529 error ("iteration variable %qD should not be firstprivate", decl);
12530 else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
12531 && OMP_CLAUSE_DECL (c) == decl)
12532 error ("iteration variable %qD should not be reduction", decl);
12533 }
12534 if (c == NULL)
12535 {
12536 c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
12537 OMP_CLAUSE_DECL (c) = decl;
12538 c = finish_omp_clauses (c);
12539 if (c)
12540 {
12541 OMP_CLAUSE_CHAIN (c) = *clauses;
12542 *clauses = c;
12543 }
12544 }
12545 }
12546 cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
12547 if (COMPARISON_CLASS_P (cond))
12548 cond = build2 (TREE_CODE (cond), boolean_type_node,
12549 RECUR (TREE_OPERAND (cond, 0)),
12550 RECUR (TREE_OPERAND (cond, 1)));
12551 else
12552 cond = RECUR (cond);
12553 incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
12554 switch (TREE_CODE (incr))
12555 {
12556 case PREINCREMENT_EXPR:
12557 case PREDECREMENT_EXPR:
12558 case POSTINCREMENT_EXPR:
12559 case POSTDECREMENT_EXPR:
12560 incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
12561 RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
12562 break;
12563 case MODIFY_EXPR:
12564 if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
12565 || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
12566 {
12567 tree rhs = TREE_OPERAND (incr, 1);
12568 incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
12569 RECUR (TREE_OPERAND (incr, 0)),
12570 build2 (TREE_CODE (rhs), TREE_TYPE (decl),
12571 RECUR (TREE_OPERAND (rhs, 0)),
12572 RECUR (TREE_OPERAND (rhs, 1))));
12573 }
12574 else
12575 incr = RECUR (incr);
12576 break;
12577 case MODOP_EXPR:
12578 if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
12579 || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
12580 {
12581 tree lhs = RECUR (TREE_OPERAND (incr, 0));
12582 incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
12583 build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
12584 TREE_TYPE (decl), lhs,
12585 RECUR (TREE_OPERAND (incr, 2))));
12586 }
12587 else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
12588 && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
12589 || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
12590 {
12591 tree rhs = TREE_OPERAND (incr, 2);
12592 incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
12593 RECUR (TREE_OPERAND (incr, 0)),
12594 build2 (TREE_CODE (rhs), TREE_TYPE (decl),
12595 RECUR (TREE_OPERAND (rhs, 0)),
12596 RECUR (TREE_OPERAND (rhs, 1))));
12597 }
12598 else
12599 incr = RECUR (incr);
12600 break;
12601 default:
12602 incr = RECUR (incr);
12603 break;
12604 }
12605
12606 TREE_VEC_ELT (declv, i) = decl;
12607 TREE_VEC_ELT (initv, i) = init;
12608 TREE_VEC_ELT (condv, i) = cond;
12609 TREE_VEC_ELT (incrv, i) = incr;
12610 #undef RECUR
12611 }
12612
12613 /* Like tsubst_copy for expressions, etc. but also does semantic
12614 processing. */
12615
12616 static tree
12617 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
12618 bool integral_constant_expression_p)
12619 {
12620 #define RECUR(NODE) \
12621 tsubst_expr ((NODE), args, complain, in_decl, \
12622 integral_constant_expression_p)
12623
12624 tree stmt, tmp;
12625
12626 if (t == NULL_TREE || t == error_mark_node)
12627 return t;
12628
12629 if (EXPR_HAS_LOCATION (t))
12630 input_location = EXPR_LOCATION (t);
12631 if (STATEMENT_CODE_P (TREE_CODE (t)))
12632 current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
12633
12634 switch (TREE_CODE (t))
12635 {
12636 case STATEMENT_LIST:
12637 {
12638 tree_stmt_iterator i;
12639 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
12640 RECUR (tsi_stmt (i));
12641 break;
12642 }
12643
12644 case CTOR_INITIALIZER:
12645 finish_mem_initializers (tsubst_initializer_list
12646 (TREE_OPERAND (t, 0), args));
12647 break;
12648
12649 case RETURN_EXPR:
12650 finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
12651 break;
12652
12653 case EXPR_STMT:
12654 tmp = RECUR (EXPR_STMT_EXPR (t));
12655 if (EXPR_STMT_STMT_EXPR_RESULT (t))
12656 finish_stmt_expr_expr (tmp, cur_stmt_expr);
12657 else
12658 finish_expr_stmt (tmp);
12659 break;
12660
12661 case USING_STMT:
12662 do_using_directive (USING_STMT_NAMESPACE (t));
12663 break;
12664
12665 case DECL_EXPR:
12666 {
12667 tree decl, pattern_decl;
12668 tree init;
12669
12670 pattern_decl = decl = DECL_EXPR_DECL (t);
12671 if (TREE_CODE (decl) == LABEL_DECL)
12672 finish_label_decl (DECL_NAME (decl));
12673 else if (TREE_CODE (decl) == USING_DECL)
12674 {
12675 tree scope = USING_DECL_SCOPE (decl);
12676 tree name = DECL_NAME (decl);
12677 tree decl;
12678
12679 scope = tsubst (scope, args, complain, in_decl);
12680 decl = lookup_qualified_name (scope, name,
12681 /*is_type_p=*/false,
12682 /*complain=*/false);
12683 if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
12684 qualified_name_lookup_error (scope, name, decl, input_location);
12685 else
12686 do_local_using_decl (decl, scope, name);
12687 }
12688 else
12689 {
12690 init = DECL_INITIAL (decl);
12691 decl = tsubst (decl, args, complain, in_decl);
12692 if (decl != error_mark_node)
12693 {
12694 /* By marking the declaration as instantiated, we avoid
12695 trying to instantiate it. Since instantiate_decl can't
12696 handle local variables, and since we've already done
12697 all that needs to be done, that's the right thing to
12698 do. */
12699 if (TREE_CODE (decl) == VAR_DECL)
12700 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
12701 if (TREE_CODE (decl) == VAR_DECL
12702 && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
12703 /* Anonymous aggregates are a special case. */
12704 finish_anon_union (decl);
12705 else
12706 {
12707 int const_init = false;
12708 maybe_push_decl (decl);
12709 if (TREE_CODE (decl) == VAR_DECL
12710 && DECL_PRETTY_FUNCTION_P (decl))
12711 {
12712 /* For __PRETTY_FUNCTION__ we have to adjust the
12713 initializer. */
12714 const char *const name
12715 = cxx_printable_name (current_function_decl, 2);
12716 init = cp_fname_init (name, &TREE_TYPE (decl));
12717 }
12718 else
12719 {
12720 tree t = RECUR (init);
12721
12722 if (init && !t)
12723 {
12724 /* If we had an initializer but it
12725 instantiated to nothing,
12726 value-initialize the object. This will
12727 only occur when the initializer was a
12728 pack expansion where the parameter packs
12729 used in that expansion were of length
12730 zero. */
12731 init = build_value_init (TREE_TYPE (decl),
12732 complain);
12733 if (TREE_CODE (init) == AGGR_INIT_EXPR)
12734 init = get_target_expr_sfinae (init, complain);
12735 }
12736 else
12737 init = t;
12738 }
12739
12740 if (TREE_CODE (decl) == VAR_DECL)
12741 const_init = (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P
12742 (pattern_decl));
12743 cp_finish_decl (decl, init, const_init, NULL_TREE, 0);
12744 }
12745 }
12746 }
12747
12748 /* A DECL_EXPR can also be used as an expression, in the condition
12749 clause of an if/for/while construct. */
12750 return decl;
12751 }
12752
12753 case FOR_STMT:
12754 stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12755 RECUR (FOR_INIT_STMT (t));
12756 finish_for_init_stmt (stmt);
12757 tmp = RECUR (FOR_COND (t));
12758 finish_for_cond (tmp, stmt);
12759 tmp = RECUR (FOR_EXPR (t));
12760 finish_for_expr (tmp, stmt);
12761 RECUR (FOR_BODY (t));
12762 finish_for_stmt (stmt);
12763 break;
12764
12765 case RANGE_FOR_STMT:
12766 {
12767 tree decl, expr;
12768 stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12769 decl = RANGE_FOR_DECL (t);
12770 decl = tsubst (decl, args, complain, in_decl);
12771 maybe_push_decl (decl);
12772 expr = RECUR (RANGE_FOR_EXPR (t));
12773 stmt = cp_convert_range_for (stmt, decl, expr);
12774 RECUR (RANGE_FOR_BODY (t));
12775 finish_for_stmt (stmt);
12776 }
12777 break;
12778
12779 case WHILE_STMT:
12780 stmt = begin_while_stmt ();
12781 tmp = RECUR (WHILE_COND (t));
12782 finish_while_stmt_cond (tmp, stmt);
12783 RECUR (WHILE_BODY (t));
12784 finish_while_stmt (stmt);
12785 break;
12786
12787 case DO_STMT:
12788 stmt = begin_do_stmt ();
12789 RECUR (DO_BODY (t));
12790 finish_do_body (stmt);
12791 tmp = RECUR (DO_COND (t));
12792 finish_do_stmt (tmp, stmt);
12793 break;
12794
12795 case IF_STMT:
12796 stmt = begin_if_stmt ();
12797 tmp = RECUR (IF_COND (t));
12798 finish_if_stmt_cond (tmp, stmt);
12799 RECUR (THEN_CLAUSE (t));
12800 finish_then_clause (stmt);
12801
12802 if (ELSE_CLAUSE (t))
12803 {
12804 begin_else_clause (stmt);
12805 RECUR (ELSE_CLAUSE (t));
12806 finish_else_clause (stmt);
12807 }
12808
12809 finish_if_stmt (stmt);
12810 break;
12811
12812 case BIND_EXPR:
12813 if (BIND_EXPR_BODY_BLOCK (t))
12814 stmt = begin_function_body ();
12815 else
12816 stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
12817 ? BCS_TRY_BLOCK : 0);
12818
12819 RECUR (BIND_EXPR_BODY (t));
12820
12821 if (BIND_EXPR_BODY_BLOCK (t))
12822 finish_function_body (stmt);
12823 else
12824 finish_compound_stmt (stmt);
12825 break;
12826
12827 case BREAK_STMT:
12828 finish_break_stmt ();
12829 break;
12830
12831 case CONTINUE_STMT:
12832 finish_continue_stmt ();
12833 break;
12834
12835 case SWITCH_STMT:
12836 stmt = begin_switch_stmt ();
12837 tmp = RECUR (SWITCH_STMT_COND (t));
12838 finish_switch_cond (tmp, stmt);
12839 RECUR (SWITCH_STMT_BODY (t));
12840 finish_switch_stmt (stmt);
12841 break;
12842
12843 case CASE_LABEL_EXPR:
12844 finish_case_label (EXPR_LOCATION (t),
12845 RECUR (CASE_LOW (t)),
12846 RECUR (CASE_HIGH (t)));
12847 break;
12848
12849 case LABEL_EXPR:
12850 {
12851 tree decl = LABEL_EXPR_LABEL (t);
12852 tree label;
12853
12854 label = finish_label_stmt (DECL_NAME (decl));
12855 if (DECL_ATTRIBUTES (decl) != NULL_TREE)
12856 cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
12857 }
12858 break;
12859
12860 case GOTO_EXPR:
12861 tmp = GOTO_DESTINATION (t);
12862 if (TREE_CODE (tmp) != LABEL_DECL)
12863 /* Computed goto's must be tsubst'd into. On the other hand,
12864 non-computed gotos must not be; the identifier in question
12865 will have no binding. */
12866 tmp = RECUR (tmp);
12867 else
12868 tmp = DECL_NAME (tmp);
12869 finish_goto_stmt (tmp);
12870 break;
12871
12872 case ASM_EXPR:
12873 tmp = finish_asm_stmt
12874 (ASM_VOLATILE_P (t),
12875 RECUR (ASM_STRING (t)),
12876 tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
12877 tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
12878 tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl),
12879 tsubst_copy_asm_operands (ASM_LABELS (t), args, complain, in_decl));
12880 {
12881 tree asm_expr = tmp;
12882 if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
12883 asm_expr = TREE_OPERAND (asm_expr, 0);
12884 ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
12885 }
12886 break;
12887
12888 case TRY_BLOCK:
12889 if (CLEANUP_P (t))
12890 {
12891 stmt = begin_try_block ();
12892 RECUR (TRY_STMTS (t));
12893 finish_cleanup_try_block (stmt);
12894 finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
12895 }
12896 else
12897 {
12898 tree compound_stmt = NULL_TREE;
12899
12900 if (FN_TRY_BLOCK_P (t))
12901 stmt = begin_function_try_block (&compound_stmt);
12902 else
12903 stmt = begin_try_block ();
12904
12905 RECUR (TRY_STMTS (t));
12906
12907 if (FN_TRY_BLOCK_P (t))
12908 finish_function_try_block (stmt);
12909 else
12910 finish_try_block (stmt);
12911
12912 RECUR (TRY_HANDLERS (t));
12913 if (FN_TRY_BLOCK_P (t))
12914 finish_function_handler_sequence (stmt, compound_stmt);
12915 else
12916 finish_handler_sequence (stmt);
12917 }
12918 break;
12919
12920 case HANDLER:
12921 {
12922 tree decl = HANDLER_PARMS (t);
12923
12924 if (decl)
12925 {
12926 decl = tsubst (decl, args, complain, in_decl);
12927 /* Prevent instantiate_decl from trying to instantiate
12928 this variable. We've already done all that needs to be
12929 done. */
12930 if (decl != error_mark_node)
12931 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
12932 }
12933 stmt = begin_handler ();
12934 finish_handler_parms (decl, stmt);
12935 RECUR (HANDLER_BODY (t));
12936 finish_handler (stmt);
12937 }
12938 break;
12939
12940 case TAG_DEFN:
12941 tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
12942 break;
12943
12944 case STATIC_ASSERT:
12945 {
12946 tree condition =
12947 tsubst_expr (STATIC_ASSERT_CONDITION (t),
12948 args,
12949 complain, in_decl,
12950 /*integral_constant_expression_p=*/true);
12951 finish_static_assert (condition,
12952 STATIC_ASSERT_MESSAGE (t),
12953 STATIC_ASSERT_SOURCE_LOCATION (t),
12954 /*member_p=*/false);
12955 }
12956 break;
12957
12958 case OMP_PARALLEL:
12959 tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
12960 args, complain, in_decl);
12961 stmt = begin_omp_parallel ();
12962 RECUR (OMP_PARALLEL_BODY (t));
12963 OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
12964 = OMP_PARALLEL_COMBINED (t);
12965 break;
12966
12967 case OMP_TASK:
12968 tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t),
12969 args, complain, in_decl);
12970 stmt = begin_omp_task ();
12971 RECUR (OMP_TASK_BODY (t));
12972 finish_omp_task (tmp, stmt);
12973 break;
12974
12975 case OMP_FOR:
12976 {
12977 tree clauses, body, pre_body;
12978 tree declv, initv, condv, incrv;
12979 int i;
12980
12981 clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
12982 args, complain, in_decl);
12983 declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
12984 initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
12985 condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
12986 incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
12987
12988 for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
12989 tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
12990 &clauses, args, complain, in_decl,
12991 integral_constant_expression_p);
12992
12993 stmt = begin_omp_structured_block ();
12994
12995 for (i = 0; i < TREE_VEC_LENGTH (initv); i++)
12996 if (TREE_VEC_ELT (initv, i) == NULL
12997 || TREE_CODE (TREE_VEC_ELT (initv, i)) != DECL_EXPR)
12998 TREE_VEC_ELT (initv, i) = RECUR (TREE_VEC_ELT (initv, i));
12999 else if (CLASS_TYPE_P (TREE_TYPE (TREE_VEC_ELT (initv, i))))
13000 {
13001 tree init = RECUR (TREE_VEC_ELT (initv, i));
13002 gcc_assert (init == TREE_VEC_ELT (declv, i));
13003 TREE_VEC_ELT (initv, i) = NULL_TREE;
13004 }
13005 else
13006 {
13007 tree decl_expr = TREE_VEC_ELT (initv, i);
13008 tree init = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
13009 gcc_assert (init != NULL);
13010 TREE_VEC_ELT (initv, i) = RECUR (init);
13011 DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL;
13012 RECUR (decl_expr);
13013 DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init;
13014 }
13015
13016 pre_body = push_stmt_list ();
13017 RECUR (OMP_FOR_PRE_BODY (t));
13018 pre_body = pop_stmt_list (pre_body);
13019
13020 body = push_stmt_list ();
13021 RECUR (OMP_FOR_BODY (t));
13022 body = pop_stmt_list (body);
13023
13024 t = finish_omp_for (EXPR_LOCATION (t), declv, initv, condv, incrv,
13025 body, pre_body, clauses);
13026
13027 add_stmt (finish_omp_structured_block (stmt));
13028 }
13029 break;
13030
13031 case OMP_SECTIONS:
13032 case OMP_SINGLE:
13033 tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
13034 stmt = push_stmt_list ();
13035 RECUR (OMP_BODY (t));
13036 stmt = pop_stmt_list (stmt);
13037
13038 t = copy_node (t);
13039 OMP_BODY (t) = stmt;
13040 OMP_CLAUSES (t) = tmp;
13041 add_stmt (t);
13042 break;
13043
13044 case OMP_SECTION:
13045 case OMP_CRITICAL:
13046 case OMP_MASTER:
13047 case OMP_ORDERED:
13048 stmt = push_stmt_list ();
13049 RECUR (OMP_BODY (t));
13050 stmt = pop_stmt_list (stmt);
13051
13052 t = copy_node (t);
13053 OMP_BODY (t) = stmt;
13054 add_stmt (t);
13055 break;
13056
13057 case OMP_ATOMIC:
13058 gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
13059 if (TREE_CODE (TREE_OPERAND (t, 1)) != MODIFY_EXPR)
13060 {
13061 tree op1 = TREE_OPERAND (t, 1);
13062 tree rhs1 = NULL_TREE;
13063 tree lhs, rhs;
13064 if (TREE_CODE (op1) == COMPOUND_EXPR)
13065 {
13066 rhs1 = RECUR (TREE_OPERAND (op1, 0));
13067 op1 = TREE_OPERAND (op1, 1);
13068 }
13069 lhs = RECUR (TREE_OPERAND (op1, 0));
13070 rhs = RECUR (TREE_OPERAND (op1, 1));
13071 finish_omp_atomic (OMP_ATOMIC, TREE_CODE (op1), lhs, rhs,
13072 NULL_TREE, NULL_TREE, rhs1);
13073 }
13074 else
13075 {
13076 tree op1 = TREE_OPERAND (t, 1);
13077 tree v = NULL_TREE, lhs, rhs = NULL_TREE, lhs1 = NULL_TREE;
13078 tree rhs1 = NULL_TREE;
13079 enum tree_code code = TREE_CODE (TREE_OPERAND (op1, 1));
13080 enum tree_code opcode = NOP_EXPR;
13081 if (code == OMP_ATOMIC_READ)
13082 {
13083 v = RECUR (TREE_OPERAND (op1, 0));
13084 lhs = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
13085 }
13086 else if (code == OMP_ATOMIC_CAPTURE_OLD
13087 || code == OMP_ATOMIC_CAPTURE_NEW)
13088 {
13089 tree op11 = TREE_OPERAND (TREE_OPERAND (op1, 1), 1);
13090 v = RECUR (TREE_OPERAND (op1, 0));
13091 lhs1 = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
13092 if (TREE_CODE (op11) == COMPOUND_EXPR)
13093 {
13094 rhs1 = RECUR (TREE_OPERAND (op11, 0));
13095 op11 = TREE_OPERAND (op11, 1);
13096 }
13097 lhs = RECUR (TREE_OPERAND (op11, 0));
13098 rhs = RECUR (TREE_OPERAND (op11, 1));
13099 opcode = TREE_CODE (op11);
13100 }
13101 else
13102 {
13103 code = OMP_ATOMIC;
13104 lhs = RECUR (TREE_OPERAND (op1, 0));
13105 rhs = RECUR (TREE_OPERAND (op1, 1));
13106 }
13107 finish_omp_atomic (code, opcode, lhs, rhs, v, lhs1, rhs1);
13108 }
13109 break;
13110
13111 case EXPR_PACK_EXPANSION:
13112 error ("invalid use of pack expansion expression");
13113 return error_mark_node;
13114
13115 case NONTYPE_ARGUMENT_PACK:
13116 error ("use %<...%> to expand argument pack");
13117 return error_mark_node;
13118
13119 default:
13120 gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
13121
13122 return tsubst_copy_and_build (t, args, complain, in_decl,
13123 /*function_p=*/false,
13124 integral_constant_expression_p);
13125 }
13126
13127 return NULL_TREE;
13128 #undef RECUR
13129 }
13130
13131 /* T is a postfix-expression that is not being used in a function
13132 call. Return the substituted version of T. */
13133
13134 static tree
13135 tsubst_non_call_postfix_expression (tree t, tree args,
13136 tsubst_flags_t complain,
13137 tree in_decl)
13138 {
13139 if (TREE_CODE (t) == SCOPE_REF)
13140 t = tsubst_qualified_id (t, args, complain, in_decl,
13141 /*done=*/false, /*address_p=*/false);
13142 else
13143 t = tsubst_copy_and_build (t, args, complain, in_decl,
13144 /*function_p=*/false,
13145 /*integral_constant_expression_p=*/false);
13146
13147 return t;
13148 }
13149
13150 /* Like tsubst but deals with expressions and performs semantic
13151 analysis. FUNCTION_P is true if T is the "F" in "F (ARGS)". */
13152
13153 tree
13154 tsubst_copy_and_build (tree t,
13155 tree args,
13156 tsubst_flags_t complain,
13157 tree in_decl,
13158 bool function_p,
13159 bool integral_constant_expression_p)
13160 {
13161 #define RECUR(NODE) \
13162 tsubst_copy_and_build (NODE, args, complain, in_decl, \
13163 /*function_p=*/false, \
13164 integral_constant_expression_p)
13165
13166 tree op1;
13167
13168 if (t == NULL_TREE || t == error_mark_node)
13169 return t;
13170
13171 switch (TREE_CODE (t))
13172 {
13173 case USING_DECL:
13174 t = DECL_NAME (t);
13175 /* Fall through. */
13176 case IDENTIFIER_NODE:
13177 {
13178 tree decl;
13179 cp_id_kind idk;
13180 bool non_integral_constant_expression_p;
13181 const char *error_msg;
13182
13183 if (IDENTIFIER_TYPENAME_P (t))
13184 {
13185 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13186 t = mangle_conv_op_name_for_type (new_type);
13187 }
13188
13189 /* Look up the name. */
13190 decl = lookup_name (t);
13191
13192 /* By convention, expressions use ERROR_MARK_NODE to indicate
13193 failure, not NULL_TREE. */
13194 if (decl == NULL_TREE)
13195 decl = error_mark_node;
13196
13197 decl = finish_id_expression (t, decl, NULL_TREE,
13198 &idk,
13199 integral_constant_expression_p,
13200 /*allow_non_integral_constant_expression_p=*/false,
13201 &non_integral_constant_expression_p,
13202 /*template_p=*/false,
13203 /*done=*/true,
13204 /*address_p=*/false,
13205 /*template_arg_p=*/false,
13206 &error_msg,
13207 input_location);
13208 if (error_msg)
13209 error (error_msg);
13210 if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
13211 {
13212 if (complain & tf_error)
13213 unqualified_name_lookup_error (decl);
13214 decl = error_mark_node;
13215 }
13216 return decl;
13217 }
13218
13219 case TEMPLATE_ID_EXPR:
13220 {
13221 tree object;
13222 tree templ = RECUR (TREE_OPERAND (t, 0));
13223 tree targs = TREE_OPERAND (t, 1);
13224
13225 if (targs)
13226 targs = tsubst_template_args (targs, args, complain, in_decl);
13227
13228 if (TREE_CODE (templ) == COMPONENT_REF)
13229 {
13230 object = TREE_OPERAND (templ, 0);
13231 templ = TREE_OPERAND (templ, 1);
13232 }
13233 else
13234 object = NULL_TREE;
13235 templ = lookup_template_function (templ, targs);
13236
13237 if (object)
13238 return build3 (COMPONENT_REF, TREE_TYPE (templ),
13239 object, templ, NULL_TREE);
13240 else
13241 return baselink_for_fns (templ);
13242 }
13243
13244 case INDIRECT_REF:
13245 {
13246 tree r = RECUR (TREE_OPERAND (t, 0));
13247
13248 if (REFERENCE_REF_P (t))
13249 {
13250 /* A type conversion to reference type will be enclosed in
13251 such an indirect ref, but the substitution of the cast
13252 will have also added such an indirect ref. */
13253 if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
13254 r = convert_from_reference (r);
13255 }
13256 else
13257 r = build_x_indirect_ref (r, RO_UNARY_STAR, complain);
13258 return r;
13259 }
13260
13261 case NOP_EXPR:
13262 return build_nop
13263 (tsubst (TREE_TYPE (t), args, complain, in_decl),
13264 RECUR (TREE_OPERAND (t, 0)));
13265
13266 case IMPLICIT_CONV_EXPR:
13267 {
13268 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13269 tree expr = RECUR (TREE_OPERAND (t, 0));
13270 int flags = LOOKUP_IMPLICIT;
13271 if (IMPLICIT_CONV_EXPR_DIRECT_INIT (t))
13272 flags = LOOKUP_NORMAL;
13273 return perform_implicit_conversion_flags (type, expr, complain,
13274 flags);
13275 }
13276
13277 case CONVERT_EXPR:
13278 return build1
13279 (CONVERT_EXPR,
13280 tsubst (TREE_TYPE (t), args, complain, in_decl),
13281 RECUR (TREE_OPERAND (t, 0)));
13282
13283 case CAST_EXPR:
13284 case REINTERPRET_CAST_EXPR:
13285 case CONST_CAST_EXPR:
13286 case DYNAMIC_CAST_EXPR:
13287 case STATIC_CAST_EXPR:
13288 {
13289 tree type;
13290 tree op;
13291
13292 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13293 if (integral_constant_expression_p
13294 && !cast_valid_in_integral_constant_expression_p (type))
13295 {
13296 if (complain & tf_error)
13297 error ("a cast to a type other than an integral or "
13298 "enumeration type cannot appear in a constant-expression");
13299 return error_mark_node;
13300 }
13301
13302 op = RECUR (TREE_OPERAND (t, 0));
13303
13304 switch (TREE_CODE (t))
13305 {
13306 case CAST_EXPR:
13307 return build_functional_cast (type, op, complain);
13308 case REINTERPRET_CAST_EXPR:
13309 return build_reinterpret_cast (type, op, complain);
13310 case CONST_CAST_EXPR:
13311 return build_const_cast (type, op, complain);
13312 case DYNAMIC_CAST_EXPR:
13313 return build_dynamic_cast (type, op, complain);
13314 case STATIC_CAST_EXPR:
13315 return build_static_cast (type, op, complain);
13316 default:
13317 gcc_unreachable ();
13318 }
13319 }
13320
13321 case POSTDECREMENT_EXPR:
13322 case POSTINCREMENT_EXPR:
13323 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13324 args, complain, in_decl);
13325 return build_x_unary_op (TREE_CODE (t), op1, complain);
13326
13327 case PREDECREMENT_EXPR:
13328 case PREINCREMENT_EXPR:
13329 case NEGATE_EXPR:
13330 case BIT_NOT_EXPR:
13331 case ABS_EXPR:
13332 case TRUTH_NOT_EXPR:
13333 case UNARY_PLUS_EXPR: /* Unary + */
13334 case REALPART_EXPR:
13335 case IMAGPART_EXPR:
13336 return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
13337 complain);
13338
13339 case ADDR_EXPR:
13340 op1 = TREE_OPERAND (t, 0);
13341 if (TREE_CODE (op1) == LABEL_DECL)
13342 return finish_label_address_expr (DECL_NAME (op1),
13343 EXPR_LOCATION (op1));
13344 if (TREE_CODE (op1) == SCOPE_REF)
13345 op1 = tsubst_qualified_id (op1, args, complain, in_decl,
13346 /*done=*/true, /*address_p=*/true);
13347 else
13348 op1 = tsubst_non_call_postfix_expression (op1, args, complain,
13349 in_decl);
13350 return build_x_unary_op (ADDR_EXPR, op1, complain);
13351
13352 case PLUS_EXPR:
13353 case MINUS_EXPR:
13354 case MULT_EXPR:
13355 case TRUNC_DIV_EXPR:
13356 case CEIL_DIV_EXPR:
13357 case FLOOR_DIV_EXPR:
13358 case ROUND_DIV_EXPR:
13359 case EXACT_DIV_EXPR:
13360 case BIT_AND_EXPR:
13361 case BIT_IOR_EXPR:
13362 case BIT_XOR_EXPR:
13363 case TRUNC_MOD_EXPR:
13364 case FLOOR_MOD_EXPR:
13365 case TRUTH_ANDIF_EXPR:
13366 case TRUTH_ORIF_EXPR:
13367 case TRUTH_AND_EXPR:
13368 case TRUTH_OR_EXPR:
13369 case RSHIFT_EXPR:
13370 case LSHIFT_EXPR:
13371 case RROTATE_EXPR:
13372 case LROTATE_EXPR:
13373 case EQ_EXPR:
13374 case NE_EXPR:
13375 case MAX_EXPR:
13376 case MIN_EXPR:
13377 case LE_EXPR:
13378 case GE_EXPR:
13379 case LT_EXPR:
13380 case GT_EXPR:
13381 case MEMBER_REF:
13382 case DOTSTAR_EXPR:
13383 return build_x_binary_op
13384 (TREE_CODE (t),
13385 RECUR (TREE_OPERAND (t, 0)),
13386 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
13387 ? ERROR_MARK
13388 : TREE_CODE (TREE_OPERAND (t, 0))),
13389 RECUR (TREE_OPERAND (t, 1)),
13390 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
13391 ? ERROR_MARK
13392 : TREE_CODE (TREE_OPERAND (t, 1))),
13393 /*overload=*/NULL,
13394 complain);
13395
13396 case SCOPE_REF:
13397 return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
13398 /*address_p=*/false);
13399 case ARRAY_REF:
13400 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13401 args, complain, in_decl);
13402 return build_x_array_ref (op1, RECUR (TREE_OPERAND (t, 1)), complain);
13403
13404 case SIZEOF_EXPR:
13405 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
13406 return tsubst_copy (t, args, complain, in_decl);
13407 /* Fall through */
13408
13409 case ALIGNOF_EXPR:
13410 op1 = TREE_OPERAND (t, 0);
13411 if (!args)
13412 {
13413 /* When there are no ARGS, we are trying to evaluate a
13414 non-dependent expression from the parser. Trying to do
13415 the substitutions may not work. */
13416 if (!TYPE_P (op1))
13417 op1 = TREE_TYPE (op1);
13418 }
13419 else
13420 {
13421 ++cp_unevaluated_operand;
13422 ++c_inhibit_evaluation_warnings;
13423 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13424 /*function_p=*/false,
13425 /*integral_constant_expression_p=*/false);
13426 --cp_unevaluated_operand;
13427 --c_inhibit_evaluation_warnings;
13428 }
13429 if (TYPE_P (op1))
13430 return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t),
13431 complain & tf_error);
13432 else
13433 return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t),
13434 complain & tf_error);
13435
13436 case AT_ENCODE_EXPR:
13437 {
13438 op1 = TREE_OPERAND (t, 0);
13439 ++cp_unevaluated_operand;
13440 ++c_inhibit_evaluation_warnings;
13441 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13442 /*function_p=*/false,
13443 /*integral_constant_expression_p=*/false);
13444 --cp_unevaluated_operand;
13445 --c_inhibit_evaluation_warnings;
13446 return objc_build_encode_expr (op1);
13447 }
13448
13449 case NOEXCEPT_EXPR:
13450 op1 = TREE_OPERAND (t, 0);
13451 ++cp_unevaluated_operand;
13452 ++c_inhibit_evaluation_warnings;
13453 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13454 /*function_p=*/false,
13455 /*integral_constant_expression_p=*/false);
13456 --cp_unevaluated_operand;
13457 --c_inhibit_evaluation_warnings;
13458 return finish_noexcept_expr (op1, complain);
13459
13460 case MODOP_EXPR:
13461 {
13462 tree r = build_x_modify_expr
13463 (RECUR (TREE_OPERAND (t, 0)),
13464 TREE_CODE (TREE_OPERAND (t, 1)),
13465 RECUR (TREE_OPERAND (t, 2)),
13466 complain);
13467 /* TREE_NO_WARNING must be set if either the expression was
13468 parenthesized or it uses an operator such as >>= rather
13469 than plain assignment. In the former case, it was already
13470 set and must be copied. In the latter case,
13471 build_x_modify_expr sets it and it must not be reset
13472 here. */
13473 if (TREE_NO_WARNING (t))
13474 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
13475 return r;
13476 }
13477
13478 case ARROW_EXPR:
13479 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13480 args, complain, in_decl);
13481 /* Remember that there was a reference to this entity. */
13482 if (DECL_P (op1))
13483 mark_used (op1);
13484 return build_x_arrow (op1);
13485
13486 case NEW_EXPR:
13487 {
13488 tree placement = RECUR (TREE_OPERAND (t, 0));
13489 tree init = RECUR (TREE_OPERAND (t, 3));
13490 VEC(tree,gc) *placement_vec;
13491 VEC(tree,gc) *init_vec;
13492 tree ret;
13493
13494 if (placement == NULL_TREE)
13495 placement_vec = NULL;
13496 else
13497 {
13498 placement_vec = make_tree_vector ();
13499 for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
13500 VEC_safe_push (tree, gc, placement_vec, TREE_VALUE (placement));
13501 }
13502
13503 /* If there was an initializer in the original tree, but it
13504 instantiated to an empty list, then we should pass a
13505 non-NULL empty vector to tell build_new that it was an
13506 empty initializer() rather than no initializer. This can
13507 only happen when the initializer is a pack expansion whose
13508 parameter packs are of length zero. */
13509 if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
13510 init_vec = NULL;
13511 else
13512 {
13513 init_vec = make_tree_vector ();
13514 if (init == void_zero_node)
13515 gcc_assert (init_vec != NULL);
13516 else
13517 {
13518 for (; init != NULL_TREE; init = TREE_CHAIN (init))
13519 VEC_safe_push (tree, gc, init_vec, TREE_VALUE (init));
13520 }
13521 }
13522
13523 ret = build_new (&placement_vec,
13524 tsubst (TREE_OPERAND (t, 1), args, complain, in_decl),
13525 RECUR (TREE_OPERAND (t, 2)),
13526 &init_vec,
13527 NEW_EXPR_USE_GLOBAL (t),
13528 complain);
13529
13530 if (placement_vec != NULL)
13531 release_tree_vector (placement_vec);
13532 if (init_vec != NULL)
13533 release_tree_vector (init_vec);
13534
13535 return ret;
13536 }
13537
13538 case DELETE_EXPR:
13539 return delete_sanity
13540 (RECUR (TREE_OPERAND (t, 0)),
13541 RECUR (TREE_OPERAND (t, 1)),
13542 DELETE_EXPR_USE_VEC (t),
13543 DELETE_EXPR_USE_GLOBAL (t),
13544 complain);
13545
13546 case COMPOUND_EXPR:
13547 return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
13548 RECUR (TREE_OPERAND (t, 1)),
13549 complain);
13550
13551 case CALL_EXPR:
13552 {
13553 tree function;
13554 VEC(tree,gc) *call_args;
13555 unsigned int nargs, i;
13556 bool qualified_p;
13557 bool koenig_p;
13558 tree ret;
13559
13560 function = CALL_EXPR_FN (t);
13561 /* When we parsed the expression, we determined whether or
13562 not Koenig lookup should be performed. */
13563 koenig_p = KOENIG_LOOKUP_P (t);
13564 if (TREE_CODE (function) == SCOPE_REF)
13565 {
13566 qualified_p = true;
13567 function = tsubst_qualified_id (function, args, complain, in_decl,
13568 /*done=*/false,
13569 /*address_p=*/false);
13570 }
13571 else if (koenig_p && TREE_CODE (function) == IDENTIFIER_NODE)
13572 {
13573 /* Do nothing; calling tsubst_copy_and_build on an identifier
13574 would incorrectly perform unqualified lookup again.
13575
13576 Note that we can also have an IDENTIFIER_NODE if the earlier
13577 unqualified lookup found a member function; in that case
13578 koenig_p will be false and we do want to do the lookup
13579 again to find the instantiated member function.
13580
13581 FIXME but doing that causes c++/15272, so we need to stop
13582 using IDENTIFIER_NODE in that situation. */
13583 qualified_p = false;
13584 }
13585 else
13586 {
13587 if (TREE_CODE (function) == COMPONENT_REF)
13588 {
13589 tree op = TREE_OPERAND (function, 1);
13590
13591 qualified_p = (TREE_CODE (op) == SCOPE_REF
13592 || (BASELINK_P (op)
13593 && BASELINK_QUALIFIED_P (op)));
13594 }
13595 else
13596 qualified_p = false;
13597
13598 function = tsubst_copy_and_build (function, args, complain,
13599 in_decl,
13600 !qualified_p,
13601 integral_constant_expression_p);
13602
13603 if (BASELINK_P (function))
13604 qualified_p = true;
13605 }
13606
13607 nargs = call_expr_nargs (t);
13608 call_args = make_tree_vector ();
13609 for (i = 0; i < nargs; ++i)
13610 {
13611 tree arg = CALL_EXPR_ARG (t, i);
13612
13613 if (!PACK_EXPANSION_P (arg))
13614 VEC_safe_push (tree, gc, call_args,
13615 RECUR (CALL_EXPR_ARG (t, i)));
13616 else
13617 {
13618 /* Expand the pack expansion and push each entry onto
13619 CALL_ARGS. */
13620 arg = tsubst_pack_expansion (arg, args, complain, in_decl);
13621 if (TREE_CODE (arg) == TREE_VEC)
13622 {
13623 unsigned int len, j;
13624
13625 len = TREE_VEC_LENGTH (arg);
13626 for (j = 0; j < len; ++j)
13627 {
13628 tree value = TREE_VEC_ELT (arg, j);
13629 if (value != NULL_TREE)
13630 value = convert_from_reference (value);
13631 VEC_safe_push (tree, gc, call_args, value);
13632 }
13633 }
13634 else
13635 {
13636 /* A partial substitution. Add one entry. */
13637 VEC_safe_push (tree, gc, call_args, arg);
13638 }
13639 }
13640 }
13641
13642 /* We do not perform argument-dependent lookup if normal
13643 lookup finds a non-function, in accordance with the
13644 expected resolution of DR 218. */
13645 if (koenig_p
13646 && ((is_overloaded_fn (function)
13647 /* If lookup found a member function, the Koenig lookup is
13648 not appropriate, even if an unqualified-name was used
13649 to denote the function. */
13650 && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
13651 || TREE_CODE (function) == IDENTIFIER_NODE)
13652 /* Only do this when substitution turns a dependent call
13653 into a non-dependent call. */
13654 && type_dependent_expression_p_push (t)
13655 && !any_type_dependent_arguments_p (call_args))
13656 function = perform_koenig_lookup (function, call_args, false,
13657 tf_none);
13658
13659 if (TREE_CODE (function) == IDENTIFIER_NODE
13660 && !any_type_dependent_arguments_p (call_args))
13661 {
13662 if (koenig_p && (complain & tf_warning_or_error))
13663 {
13664 /* For backwards compatibility and good diagnostics, try
13665 the unqualified lookup again if we aren't in SFINAE
13666 context. */
13667 tree unq = (tsubst_copy_and_build
13668 (function, args, complain, in_decl, true,
13669 integral_constant_expression_p));
13670 if (unq == error_mark_node)
13671 return error_mark_node;
13672
13673 if (unq != function)
13674 {
13675 tree fn = unq;
13676 if (TREE_CODE (fn) == INDIRECT_REF)
13677 fn = TREE_OPERAND (fn, 0);
13678 if (TREE_CODE (fn) == COMPONENT_REF)
13679 fn = TREE_OPERAND (fn, 1);
13680 if (is_overloaded_fn (fn))
13681 fn = get_first_fn (fn);
13682 permerror (EXPR_LOC_OR_HERE (t),
13683 "%qD was not declared in this scope, "
13684 "and no declarations were found by "
13685 "argument-dependent lookup at the point "
13686 "of instantiation", function);
13687 if (!DECL_P (fn))
13688 /* Can't say anything more. */;
13689 else if (DECL_CLASS_SCOPE_P (fn))
13690 {
13691 inform (EXPR_LOC_OR_HERE (t),
13692 "declarations in dependent base %qT are "
13693 "not found by unqualified lookup",
13694 DECL_CLASS_CONTEXT (fn));
13695 if (current_class_ptr)
13696 inform (EXPR_LOC_OR_HERE (t),
13697 "use %<this->%D%> instead", function);
13698 else
13699 inform (EXPR_LOC_OR_HERE (t),
13700 "use %<%T::%D%> instead",
13701 current_class_name, function);
13702 }
13703 else
13704 inform (0, "%q+D declared here, later in the "
13705 "translation unit", fn);
13706 function = unq;
13707 }
13708 }
13709 if (TREE_CODE (function) == IDENTIFIER_NODE)
13710 {
13711 unqualified_name_lookup_error (function);
13712 release_tree_vector (call_args);
13713 return error_mark_node;
13714 }
13715 }
13716
13717 /* Remember that there was a reference to this entity. */
13718 if (DECL_P (function))
13719 mark_used (function);
13720
13721 if (TREE_CODE (function) == OFFSET_REF)
13722 ret = build_offset_ref_call_from_tree (function, &call_args);
13723 else if (TREE_CODE (function) == COMPONENT_REF)
13724 {
13725 tree instance = TREE_OPERAND (function, 0);
13726 tree fn = TREE_OPERAND (function, 1);
13727
13728 if (processing_template_decl
13729 && (type_dependent_expression_p (instance)
13730 || (!BASELINK_P (fn)
13731 && TREE_CODE (fn) != FIELD_DECL)
13732 || type_dependent_expression_p (fn)
13733 || any_type_dependent_arguments_p (call_args)))
13734 ret = build_nt_call_vec (function, call_args);
13735 else if (!BASELINK_P (fn))
13736 ret = finish_call_expr (function, &call_args,
13737 /*disallow_virtual=*/false,
13738 /*koenig_p=*/false,
13739 complain);
13740 else
13741 ret = (build_new_method_call
13742 (instance, fn,
13743 &call_args, NULL_TREE,
13744 qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
13745 /*fn_p=*/NULL,
13746 complain));
13747 }
13748 else
13749 ret = finish_call_expr (function, &call_args,
13750 /*disallow_virtual=*/qualified_p,
13751 koenig_p,
13752 complain);
13753
13754 release_tree_vector (call_args);
13755
13756 return ret;
13757 }
13758
13759 case COND_EXPR:
13760 return build_x_conditional_expr
13761 (RECUR (TREE_OPERAND (t, 0)),
13762 RECUR (TREE_OPERAND (t, 1)),
13763 RECUR (TREE_OPERAND (t, 2)),
13764 complain);
13765
13766 case PSEUDO_DTOR_EXPR:
13767 return finish_pseudo_destructor_expr
13768 (RECUR (TREE_OPERAND (t, 0)),
13769 RECUR (TREE_OPERAND (t, 1)),
13770 tsubst (TREE_OPERAND (t, 2), args, complain, in_decl));
13771
13772 case TREE_LIST:
13773 {
13774 tree purpose, value, chain;
13775
13776 if (t == void_list_node)
13777 return t;
13778
13779 if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
13780 || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
13781 {
13782 /* We have pack expansions, so expand those and
13783 create a new list out of it. */
13784 tree purposevec = NULL_TREE;
13785 tree valuevec = NULL_TREE;
13786 tree chain;
13787 int i, len = -1;
13788
13789 /* Expand the argument expressions. */
13790 if (TREE_PURPOSE (t))
13791 purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
13792 complain, in_decl);
13793 if (TREE_VALUE (t))
13794 valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
13795 complain, in_decl);
13796
13797 /* Build the rest of the list. */
13798 chain = TREE_CHAIN (t);
13799 if (chain && chain != void_type_node)
13800 chain = RECUR (chain);
13801
13802 /* Determine the number of arguments. */
13803 if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
13804 {
13805 len = TREE_VEC_LENGTH (purposevec);
13806 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
13807 }
13808 else if (TREE_CODE (valuevec) == TREE_VEC)
13809 len = TREE_VEC_LENGTH (valuevec);
13810 else
13811 {
13812 /* Since we only performed a partial substitution into
13813 the argument pack, we only return a single list
13814 node. */
13815 if (purposevec == TREE_PURPOSE (t)
13816 && valuevec == TREE_VALUE (t)
13817 && chain == TREE_CHAIN (t))
13818 return t;
13819
13820 return tree_cons (purposevec, valuevec, chain);
13821 }
13822
13823 /* Convert the argument vectors into a TREE_LIST */
13824 i = len;
13825 while (i > 0)
13826 {
13827 /* Grab the Ith values. */
13828 i--;
13829 purpose = purposevec ? TREE_VEC_ELT (purposevec, i)
13830 : NULL_TREE;
13831 value
13832 = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i))
13833 : NULL_TREE;
13834
13835 /* Build the list (backwards). */
13836 chain = tree_cons (purpose, value, chain);
13837 }
13838
13839 return chain;
13840 }
13841
13842 purpose = TREE_PURPOSE (t);
13843 if (purpose)
13844 purpose = RECUR (purpose);
13845 value = TREE_VALUE (t);
13846 if (value)
13847 value = RECUR (value);
13848 chain = TREE_CHAIN (t);
13849 if (chain && chain != void_type_node)
13850 chain = RECUR (chain);
13851 if (purpose == TREE_PURPOSE (t)
13852 && value == TREE_VALUE (t)
13853 && chain == TREE_CHAIN (t))
13854 return t;
13855 return tree_cons (purpose, value, chain);
13856 }
13857
13858 case COMPONENT_REF:
13859 {
13860 tree object;
13861 tree object_type;
13862 tree member;
13863
13864 object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13865 args, complain, in_decl);
13866 /* Remember that there was a reference to this entity. */
13867 if (DECL_P (object))
13868 mark_used (object);
13869 object_type = TREE_TYPE (object);
13870
13871 member = TREE_OPERAND (t, 1);
13872 if (BASELINK_P (member))
13873 member = tsubst_baselink (member,
13874 non_reference (TREE_TYPE (object)),
13875 args, complain, in_decl);
13876 else
13877 member = tsubst_copy (member, args, complain, in_decl);
13878 if (member == error_mark_node)
13879 return error_mark_node;
13880
13881 if (type_dependent_expression_p (object))
13882 /* We can't do much here. */;
13883 else if (!CLASS_TYPE_P (object_type))
13884 {
13885 if (SCALAR_TYPE_P (object_type))
13886 {
13887 tree s = NULL_TREE;
13888 tree dtor = member;
13889
13890 if (TREE_CODE (dtor) == SCOPE_REF)
13891 {
13892 s = TREE_OPERAND (dtor, 0);
13893 dtor = TREE_OPERAND (dtor, 1);
13894 }
13895 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
13896 {
13897 dtor = TREE_OPERAND (dtor, 0);
13898 if (TYPE_P (dtor))
13899 return finish_pseudo_destructor_expr (object, s, dtor);
13900 }
13901 }
13902 }
13903 else if (TREE_CODE (member) == SCOPE_REF
13904 && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
13905 {
13906 /* Lookup the template functions now that we know what the
13907 scope is. */
13908 tree scope = TREE_OPERAND (member, 0);
13909 tree tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
13910 tree args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
13911 member = lookup_qualified_name (scope, tmpl,
13912 /*is_type_p=*/false,
13913 /*complain=*/false);
13914 if (BASELINK_P (member))
13915 {
13916 BASELINK_FUNCTIONS (member)
13917 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
13918 args);
13919 member = (adjust_result_of_qualified_name_lookup
13920 (member, BINFO_TYPE (BASELINK_BINFO (member)),
13921 object_type));
13922 }
13923 else
13924 {
13925 qualified_name_lookup_error (scope, tmpl, member,
13926 input_location);
13927 return error_mark_node;
13928 }
13929 }
13930 else if (TREE_CODE (member) == SCOPE_REF
13931 && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
13932 && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
13933 {
13934 if (complain & tf_error)
13935 {
13936 if (TYPE_P (TREE_OPERAND (member, 0)))
13937 error ("%qT is not a class or namespace",
13938 TREE_OPERAND (member, 0));
13939 else
13940 error ("%qD is not a class or namespace",
13941 TREE_OPERAND (member, 0));
13942 }
13943 return error_mark_node;
13944 }
13945 else if (TREE_CODE (member) == FIELD_DECL)
13946 return finish_non_static_data_member (member, object, NULL_TREE);
13947
13948 return finish_class_member_access_expr (object, member,
13949 /*template_p=*/false,
13950 complain);
13951 }
13952
13953 case THROW_EXPR:
13954 return build_throw
13955 (RECUR (TREE_OPERAND (t, 0)));
13956
13957 case CONSTRUCTOR:
13958 {
13959 VEC(constructor_elt,gc) *n;
13960 constructor_elt *ce;
13961 unsigned HOST_WIDE_INT idx;
13962 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13963 bool process_index_p;
13964 int newlen;
13965 bool need_copy_p = false;
13966 tree r;
13967
13968 if (type == error_mark_node)
13969 return error_mark_node;
13970
13971 /* digest_init will do the wrong thing if we let it. */
13972 if (type && TYPE_PTRMEMFUNC_P (type))
13973 return t;
13974
13975 /* We do not want to process the index of aggregate
13976 initializers as they are identifier nodes which will be
13977 looked up by digest_init. */
13978 process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
13979
13980 n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
13981 newlen = VEC_length (constructor_elt, n);
13982 FOR_EACH_VEC_ELT (constructor_elt, n, idx, ce)
13983 {
13984 if (ce->index && process_index_p)
13985 ce->index = RECUR (ce->index);
13986
13987 if (PACK_EXPANSION_P (ce->value))
13988 {
13989 /* Substitute into the pack expansion. */
13990 ce->value = tsubst_pack_expansion (ce->value, args, complain,
13991 in_decl);
13992
13993 if (ce->value == error_mark_node
13994 || PACK_EXPANSION_P (ce->value))
13995 ;
13996 else if (TREE_VEC_LENGTH (ce->value) == 1)
13997 /* Just move the argument into place. */
13998 ce->value = TREE_VEC_ELT (ce->value, 0);
13999 else
14000 {
14001 /* Update the length of the final CONSTRUCTOR
14002 arguments vector, and note that we will need to
14003 copy.*/
14004 newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
14005 need_copy_p = true;
14006 }
14007 }
14008 else
14009 ce->value = RECUR (ce->value);
14010 }
14011
14012 if (need_copy_p)
14013 {
14014 VEC(constructor_elt,gc) *old_n = n;
14015
14016 n = VEC_alloc (constructor_elt, gc, newlen);
14017 FOR_EACH_VEC_ELT (constructor_elt, old_n, idx, ce)
14018 {
14019 if (TREE_CODE (ce->value) == TREE_VEC)
14020 {
14021 int i, len = TREE_VEC_LENGTH (ce->value);
14022 for (i = 0; i < len; ++i)
14023 CONSTRUCTOR_APPEND_ELT (n, 0,
14024 TREE_VEC_ELT (ce->value, i));
14025 }
14026 else
14027 CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
14028 }
14029 }
14030
14031 r = build_constructor (init_list_type_node, n);
14032 CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
14033
14034 if (TREE_HAS_CONSTRUCTOR (t))
14035 return finish_compound_literal (type, r, complain);
14036
14037 TREE_TYPE (r) = type;
14038 return r;
14039 }
14040
14041 case TYPEID_EXPR:
14042 {
14043 tree operand_0 = TREE_OPERAND (t, 0);
14044 if (TYPE_P (operand_0))
14045 {
14046 operand_0 = tsubst (operand_0, args, complain, in_decl);
14047 return get_typeid (operand_0);
14048 }
14049 else
14050 {
14051 operand_0 = RECUR (operand_0);
14052 return build_typeid (operand_0);
14053 }
14054 }
14055
14056 case VAR_DECL:
14057 if (!args)
14058 return t;
14059 /* Fall through */
14060
14061 case PARM_DECL:
14062 {
14063 tree r = tsubst_copy (t, args, complain, in_decl);
14064
14065 if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
14066 /* If the original type was a reference, we'll be wrapped in
14067 the appropriate INDIRECT_REF. */
14068 r = convert_from_reference (r);
14069 return r;
14070 }
14071
14072 case VA_ARG_EXPR:
14073 return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
14074 tsubst (TREE_TYPE (t), args, complain, in_decl));
14075
14076 case OFFSETOF_EXPR:
14077 return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
14078
14079 case TRAIT_EXPR:
14080 {
14081 tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
14082 complain, in_decl);
14083
14084 tree type2 = TRAIT_EXPR_TYPE2 (t);
14085 if (type2)
14086 type2 = tsubst_copy (type2, args, complain, in_decl);
14087
14088 return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
14089 }
14090
14091 case STMT_EXPR:
14092 {
14093 tree old_stmt_expr = cur_stmt_expr;
14094 tree stmt_expr = begin_stmt_expr ();
14095
14096 cur_stmt_expr = stmt_expr;
14097 tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
14098 integral_constant_expression_p);
14099 stmt_expr = finish_stmt_expr (stmt_expr, false);
14100 cur_stmt_expr = old_stmt_expr;
14101
14102 /* If the resulting list of expression statement is empty,
14103 fold it further into void_zero_node. */
14104 if (empty_expr_stmt_p (stmt_expr))
14105 stmt_expr = void_zero_node;
14106
14107 return stmt_expr;
14108 }
14109
14110 case CONST_DECL:
14111 t = tsubst_copy (t, args, complain, in_decl);
14112 /* As in finish_id_expression, we resolve enumeration constants
14113 to their underlying values. */
14114 if (TREE_CODE (t) == CONST_DECL && !processing_template_decl)
14115 {
14116 used_types_insert (TREE_TYPE (t));
14117 return DECL_INITIAL (t);
14118 }
14119 return t;
14120
14121 case LAMBDA_EXPR:
14122 {
14123 tree r = build_lambda_expr ();
14124
14125 tree type = tsubst (LAMBDA_EXPR_CLOSURE (t), args, complain, NULL_TREE);
14126 LAMBDA_EXPR_CLOSURE (r) = type;
14127 CLASSTYPE_LAMBDA_EXPR (type) = r;
14128
14129 LAMBDA_EXPR_LOCATION (r)
14130 = LAMBDA_EXPR_LOCATION (t);
14131 LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
14132 = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
14133 LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
14134 LAMBDA_EXPR_DISCRIMINATOR (r)
14135 = (LAMBDA_EXPR_DISCRIMINATOR (t));
14136 LAMBDA_EXPR_EXTRA_SCOPE (r)
14137 = RECUR (LAMBDA_EXPR_EXTRA_SCOPE (t));
14138 if (LAMBDA_EXPR_RETURN_TYPE (t) == dependent_lambda_return_type_node)
14139 {
14140 LAMBDA_EXPR_RETURN_TYPE (r) = dependent_lambda_return_type_node;
14141 LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (r) = true;
14142 }
14143 else
14144 LAMBDA_EXPR_RETURN_TYPE (r)
14145 = tsubst (LAMBDA_EXPR_RETURN_TYPE (t), args, complain, in_decl);
14146
14147 gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (t) == NULL_TREE
14148 && LAMBDA_EXPR_PENDING_PROXIES (t) == NULL);
14149
14150 /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set. */
14151 determine_visibility (TYPE_NAME (type));
14152 /* Now that we know visibility, instantiate the type so we have a
14153 declaration of the op() for later calls to lambda_function. */
14154 complete_type (type);
14155
14156 /* The capture list refers to closure members, so this needs to
14157 wait until after we finish instantiating the type. */
14158 LAMBDA_EXPR_CAPTURE_LIST (r)
14159 = RECUR (LAMBDA_EXPR_CAPTURE_LIST (t));
14160
14161 return build_lambda_object (r);
14162 }
14163
14164 case TARGET_EXPR:
14165 /* We can get here for a constant initializer of non-dependent type.
14166 FIXME stop folding in cp_parser_initializer_clause. */
14167 gcc_assert (TREE_CONSTANT (t));
14168 {
14169 tree r = get_target_expr (RECUR (TARGET_EXPR_INITIAL (t)));
14170 TREE_CONSTANT (r) = true;
14171 return r;
14172 }
14173
14174 default:
14175 /* Handle Objective-C++ constructs, if appropriate. */
14176 {
14177 tree subst
14178 = objcp_tsubst_copy_and_build (t, args, complain,
14179 in_decl, /*function_p=*/false);
14180 if (subst)
14181 return subst;
14182 }
14183 return tsubst_copy (t, args, complain, in_decl);
14184 }
14185
14186 #undef RECUR
14187 }
14188
14189 /* Verify that the instantiated ARGS are valid. For type arguments,
14190 make sure that the type's linkage is ok. For non-type arguments,
14191 make sure they are constants if they are integral or enumerations.
14192 Emit an error under control of COMPLAIN, and return TRUE on error. */
14193
14194 static bool
14195 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
14196 {
14197 if (ARGUMENT_PACK_P (t))
14198 {
14199 tree vec = ARGUMENT_PACK_ARGS (t);
14200 int len = TREE_VEC_LENGTH (vec);
14201 bool result = false;
14202 int i;
14203
14204 for (i = 0; i < len; ++i)
14205 if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
14206 result = true;
14207 return result;
14208 }
14209 else if (TYPE_P (t))
14210 {
14211 /* [basic.link]: A name with no linkage (notably, the name
14212 of a class or enumeration declared in a local scope)
14213 shall not be used to declare an entity with linkage.
14214 This implies that names with no linkage cannot be used as
14215 template arguments
14216
14217 DR 757 relaxes this restriction for C++0x. */
14218 tree nt = (cxx_dialect > cxx98 ? NULL_TREE
14219 : no_linkage_check (t, /*relaxed_p=*/false));
14220
14221 if (nt)
14222 {
14223 /* DR 488 makes use of a type with no linkage cause
14224 type deduction to fail. */
14225 if (complain & tf_error)
14226 {
14227 if (TYPE_ANONYMOUS_P (nt))
14228 error ("%qT is/uses anonymous type", t);
14229 else
14230 error ("template argument for %qD uses local type %qT",
14231 tmpl, t);
14232 }
14233 return true;
14234 }
14235 /* In order to avoid all sorts of complications, we do not
14236 allow variably-modified types as template arguments. */
14237 else if (variably_modified_type_p (t, NULL_TREE))
14238 {
14239 if (complain & tf_error)
14240 error ("%qT is a variably modified type", t);
14241 return true;
14242 }
14243 }
14244 /* A non-type argument of integral or enumerated type must be a
14245 constant. */
14246 else if (TREE_TYPE (t)
14247 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
14248 && !TREE_CONSTANT (t))
14249 {
14250 if (complain & tf_error)
14251 error ("integral expression %qE is not constant", t);
14252 return true;
14253 }
14254 return false;
14255 }
14256
14257 static bool
14258 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
14259 {
14260 int ix, len = DECL_NTPARMS (tmpl);
14261 bool result = false;
14262
14263 for (ix = 0; ix != len; ix++)
14264 {
14265 if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
14266 result = true;
14267 }
14268 if (result && (complain & tf_error))
14269 error (" trying to instantiate %qD", tmpl);
14270 return result;
14271 }
14272
14273 /* In C++0x, it's possible to have a function template whose type depends
14274 on itself recursively. This is most obvious with decltype, but can also
14275 occur with enumeration scope (c++/48969). So we need to catch infinite
14276 recursion and reject the substitution at deduction time; this function
14277 will return error_mark_node for any repeated substitution.
14278
14279 This also catches excessive recursion such as when f<N> depends on
14280 f<N-1> across all integers, and returns error_mark_node for all the
14281 substitutions back up to the initial one.
14282
14283 This is, of course, not reentrant. */
14284
14285 static tree
14286 deduction_tsubst_fntype (tree fn, tree targs, tsubst_flags_t complain)
14287 {
14288 static bool excessive_deduction_depth;
14289 static int deduction_depth;
14290 struct pending_template *old_last_pend = last_pending_template;
14291 struct tinst_level *old_error_tinst = last_error_tinst_level;
14292
14293 tree fntype = TREE_TYPE (fn);
14294 tree tinst;
14295 tree r;
14296
14297 if (excessive_deduction_depth)
14298 return error_mark_node;
14299
14300 tinst = build_tree_list (fn, targs);
14301 if (!push_tinst_level (tinst))
14302 {
14303 excessive_deduction_depth = true;
14304 ggc_free (tinst);
14305 return error_mark_node;
14306 }
14307
14308 input_location = DECL_SOURCE_LOCATION (fn);
14309 ++deduction_depth;
14310 push_deduction_access_scope (fn);
14311 r = tsubst (fntype, targs, complain, NULL_TREE);
14312 pop_deduction_access_scope (fn);
14313 --deduction_depth;
14314
14315 if (excessive_deduction_depth)
14316 {
14317 r = error_mark_node;
14318 if (deduction_depth == 0)
14319 /* Reset once we're all the way out. */
14320 excessive_deduction_depth = false;
14321 }
14322
14323 pop_tinst_level ();
14324 /* We can't free this if a pending_template entry or last_error_tinst_level
14325 is pointing at it. */
14326 if (last_pending_template == old_last_pend
14327 && last_error_tinst_level == old_error_tinst)
14328 ggc_free (tinst);
14329 return r;
14330 }
14331
14332 /* Instantiate the indicated variable or function template TMPL with
14333 the template arguments in TARG_PTR. */
14334
14335 static tree
14336 instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain)
14337 {
14338 tree targ_ptr = orig_args;
14339 tree fndecl;
14340 tree gen_tmpl;
14341 tree spec;
14342 HOST_WIDE_INT saved_processing_template_decl;
14343
14344 if (tmpl == error_mark_node)
14345 return error_mark_node;
14346
14347 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
14348
14349 /* If this function is a clone, handle it specially. */
14350 if (DECL_CLONED_FUNCTION_P (tmpl))
14351 {
14352 tree spec;
14353 tree clone;
14354
14355 /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
14356 DECL_CLONED_FUNCTION. */
14357 spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
14358 targ_ptr, complain);
14359 if (spec == error_mark_node)
14360 return error_mark_node;
14361
14362 /* Look for the clone. */
14363 FOR_EACH_CLONE (clone, spec)
14364 if (DECL_NAME (clone) == DECL_NAME (tmpl))
14365 return clone;
14366 /* We should always have found the clone by now. */
14367 gcc_unreachable ();
14368 return NULL_TREE;
14369 }
14370
14371 /* Check to see if we already have this specialization. */
14372 gen_tmpl = most_general_template (tmpl);
14373 if (tmpl != gen_tmpl)
14374 /* The TMPL is a partial instantiation. To get a full set of
14375 arguments we must add the arguments used to perform the
14376 partial instantiation. */
14377 targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
14378 targ_ptr);
14379
14380 /* It would be nice to avoid hashing here and then again in tsubst_decl,
14381 but it doesn't seem to be on the hot path. */
14382 spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
14383
14384 gcc_assert (tmpl == gen_tmpl
14385 || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
14386 == spec)
14387 || fndecl == NULL_TREE);
14388
14389 if (spec != NULL_TREE)
14390 return spec;
14391
14392 if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
14393 complain))
14394 return error_mark_node;
14395
14396 /* We are building a FUNCTION_DECL, during which the access of its
14397 parameters and return types have to be checked. However this
14398 FUNCTION_DECL which is the desired context for access checking
14399 is not built yet. We solve this chicken-and-egg problem by
14400 deferring all checks until we have the FUNCTION_DECL. */
14401 push_deferring_access_checks (dk_deferred);
14402
14403 /* Although PROCESSING_TEMPLATE_DECL may be true at this point
14404 (because, for example, we have encountered a non-dependent
14405 function call in the body of a template function and must now
14406 determine which of several overloaded functions will be called),
14407 within the instantiation itself we are not processing a
14408 template. */
14409 saved_processing_template_decl = processing_template_decl;
14410 processing_template_decl = 0;
14411 /* Substitute template parameters to obtain the specialization. */
14412 fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
14413 targ_ptr, complain, gen_tmpl);
14414 processing_template_decl = saved_processing_template_decl;
14415 if (fndecl == error_mark_node)
14416 return error_mark_node;
14417
14418 /* Now we know the specialization, compute access previously
14419 deferred. */
14420 push_access_scope (fndecl);
14421
14422 /* Some typedefs referenced from within the template code need to be access
14423 checked at template instantiation time, i.e now. These types were
14424 added to the template at parsing time. Let's get those and perfom
14425 the acces checks then. */
14426 perform_typedefs_access_check (DECL_TEMPLATE_RESULT (tmpl), targ_ptr);
14427 perform_deferred_access_checks ();
14428 pop_access_scope (fndecl);
14429 pop_deferring_access_checks ();
14430
14431 /* The DECL_TI_TEMPLATE should always be the immediate parent
14432 template, not the most general template. */
14433 DECL_TI_TEMPLATE (fndecl) = tmpl;
14434
14435 /* If we've just instantiated the main entry point for a function,
14436 instantiate all the alternate entry points as well. We do this
14437 by cloning the instantiation of the main entry point, not by
14438 instantiating the template clones. */
14439 if (DECL_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (DECL_CHAIN (gen_tmpl)))
14440 clone_function_decl (fndecl, /*update_method_vec_p=*/0);
14441
14442 return fndecl;
14443 }
14444
14445 /* Wrapper for instantiate_template_1. */
14446
14447 tree
14448 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
14449 {
14450 tree ret;
14451 timevar_push (TV_TEMPLATE_INST);
14452 ret = instantiate_template_1 (tmpl, orig_args, complain);
14453 timevar_pop (TV_TEMPLATE_INST);
14454 return ret;
14455 }
14456
14457 /* We're going to do deduction substitution on the type of TMPL, a function
14458 template. In C++11 mode, push into that access scope. In C++03 mode,
14459 disable access checking. */
14460
14461 static void
14462 push_deduction_access_scope (tree tmpl)
14463 {
14464 if (cxx_dialect >= cxx0x)
14465 {
14466 int ptd = processing_template_decl;
14467 push_access_scope (DECL_TEMPLATE_RESULT (tmpl));
14468 /* Preserve processing_template_decl across push_to_top_level. */
14469 if (ptd && !processing_template_decl)
14470 ++processing_template_decl;
14471 }
14472 else
14473 push_deferring_access_checks (dk_no_check);
14474 }
14475
14476 /* And pop back out. */
14477
14478 static void
14479 pop_deduction_access_scope (tree tmpl)
14480 {
14481 if (cxx_dialect >= cxx0x)
14482 pop_access_scope (DECL_TEMPLATE_RESULT (tmpl));
14483 else
14484 pop_deferring_access_checks ();
14485 }
14486
14487 /* PARM is a template parameter pack for FN. Returns true iff
14488 PARM is used in a deducible way in the argument list of FN. */
14489
14490 static bool
14491 pack_deducible_p (tree parm, tree fn)
14492 {
14493 tree t = FUNCTION_FIRST_USER_PARMTYPE (fn);
14494 for (; t; t = TREE_CHAIN (t))
14495 {
14496 tree type = TREE_VALUE (t);
14497 tree packs;
14498 if (!PACK_EXPANSION_P (type))
14499 continue;
14500 for (packs = PACK_EXPANSION_PARAMETER_PACKS (type);
14501 packs; packs = TREE_CHAIN (packs))
14502 if (TREE_VALUE (packs) == parm)
14503 {
14504 /* The template parameter pack is used in a function parameter
14505 pack. If this is the end of the parameter list, the
14506 template parameter pack is deducible. */
14507 if (TREE_CHAIN (t) == void_list_node)
14508 return true;
14509 else
14510 /* Otherwise, not. Well, it could be deduced from
14511 a non-pack parameter, but doing so would end up with
14512 a deduction mismatch, so don't bother. */
14513 return false;
14514 }
14515 }
14516 /* The template parameter pack isn't used in any function parameter
14517 packs, but it might be used deeper, e.g. tuple<Args...>. */
14518 return true;
14519 }
14520
14521 /* The FN is a TEMPLATE_DECL for a function. ARGS is an array with
14522 NARGS elements of the arguments that are being used when calling
14523 it. TARGS is a vector into which the deduced template arguments
14524 are placed.
14525
14526 Return zero for success, 2 for an incomplete match that doesn't resolve
14527 all the types, and 1 for complete failure. An error message will be
14528 printed only for an incomplete match.
14529
14530 If FN is a conversion operator, or we are trying to produce a specific
14531 specialization, RETURN_TYPE is the return type desired.
14532
14533 The EXPLICIT_TARGS are explicit template arguments provided via a
14534 template-id.
14535
14536 The parameter STRICT is one of:
14537
14538 DEDUCE_CALL:
14539 We are deducing arguments for a function call, as in
14540 [temp.deduct.call].
14541
14542 DEDUCE_CONV:
14543 We are deducing arguments for a conversion function, as in
14544 [temp.deduct.conv].
14545
14546 DEDUCE_EXACT:
14547 We are deducing arguments when doing an explicit instantiation
14548 as in [temp.explicit], when determining an explicit specialization
14549 as in [temp.expl.spec], or when taking the address of a function
14550 template, as in [temp.deduct.funcaddr]. */
14551
14552 int
14553 fn_type_unification (tree fn,
14554 tree explicit_targs,
14555 tree targs,
14556 const tree *args,
14557 unsigned int nargs,
14558 tree return_type,
14559 unification_kind_t strict,
14560 int flags,
14561 bool explain_p)
14562 {
14563 tree parms;
14564 tree fntype;
14565 int result;
14566
14567 gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
14568
14569 fntype = TREE_TYPE (fn);
14570 if (explicit_targs)
14571 {
14572 /* [temp.deduct]
14573
14574 The specified template arguments must match the template
14575 parameters in kind (i.e., type, nontype, template), and there
14576 must not be more arguments than there are parameters;
14577 otherwise type deduction fails.
14578
14579 Nontype arguments must match the types of the corresponding
14580 nontype template parameters, or must be convertible to the
14581 types of the corresponding nontype parameters as specified in
14582 _temp.arg.nontype_, otherwise type deduction fails.
14583
14584 All references in the function type of the function template
14585 to the corresponding template parameters are replaced by the
14586 specified template argument values. If a substitution in a
14587 template parameter or in the function type of the function
14588 template results in an invalid type, type deduction fails. */
14589 tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
14590 int i, len = TREE_VEC_LENGTH (tparms);
14591 tree converted_args;
14592 bool incomplete = false;
14593
14594 if (explicit_targs == error_mark_node)
14595 return unify_invalid (explain_p);
14596
14597 converted_args
14598 = (coerce_template_parms (tparms, explicit_targs, NULL_TREE,
14599 (explain_p
14600 ? tf_warning_or_error
14601 : tf_none),
14602 /*require_all_args=*/false,
14603 /*use_default_args=*/false));
14604 if (converted_args == error_mark_node)
14605 return 1;
14606
14607 /* Substitute the explicit args into the function type. This is
14608 necessary so that, for instance, explicitly declared function
14609 arguments can match null pointed constants. If we were given
14610 an incomplete set of explicit args, we must not do semantic
14611 processing during substitution as we could create partial
14612 instantiations. */
14613 for (i = 0; i < len; i++)
14614 {
14615 tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
14616 bool parameter_pack = false;
14617 tree targ = TREE_VEC_ELT (converted_args, i);
14618
14619 /* Dig out the actual parm. */
14620 if (TREE_CODE (parm) == TYPE_DECL
14621 || TREE_CODE (parm) == TEMPLATE_DECL)
14622 {
14623 parm = TREE_TYPE (parm);
14624 parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
14625 }
14626 else if (TREE_CODE (parm) == PARM_DECL)
14627 {
14628 parm = DECL_INITIAL (parm);
14629 parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
14630 }
14631
14632 if (!parameter_pack && targ == NULL_TREE)
14633 /* No explicit argument for this template parameter. */
14634 incomplete = true;
14635
14636 if (parameter_pack && pack_deducible_p (parm, fn))
14637 {
14638 /* Mark the argument pack as "incomplete". We could
14639 still deduce more arguments during unification.
14640 We remove this mark in type_unification_real. */
14641 if (targ)
14642 {
14643 ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
14644 ARGUMENT_PACK_EXPLICIT_ARGS (targ)
14645 = ARGUMENT_PACK_ARGS (targ);
14646 }
14647
14648 /* We have some incomplete argument packs. */
14649 incomplete = true;
14650 }
14651 }
14652
14653 processing_template_decl += incomplete;
14654 fntype = deduction_tsubst_fntype (fn, converted_args,
14655 (explain_p
14656 ? tf_warning_or_error
14657 : tf_none));
14658 processing_template_decl -= incomplete;
14659
14660 if (fntype == error_mark_node)
14661 return 1;
14662
14663 /* Place the explicitly specified arguments in TARGS. */
14664 for (i = NUM_TMPL_ARGS (converted_args); i--;)
14665 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
14666 }
14667
14668 /* Never do unification on the 'this' parameter. */
14669 parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
14670
14671 if (return_type)
14672 {
14673 tree *new_args;
14674
14675 parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
14676 new_args = XALLOCAVEC (tree, nargs + 1);
14677 new_args[0] = return_type;
14678 memcpy (new_args + 1, args, nargs * sizeof (tree));
14679 args = new_args;
14680 ++nargs;
14681 }
14682
14683 /* We allow incomplete unification without an error message here
14684 because the standard doesn't seem to explicitly prohibit it. Our
14685 callers must be ready to deal with unification failures in any
14686 event. */
14687 result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
14688 targs, parms, args, nargs, /*subr=*/0,
14689 strict, flags, explain_p);
14690
14691 /* Now that we have bindings for all of the template arguments,
14692 ensure that the arguments deduced for the template template
14693 parameters have compatible template parameter lists. We cannot
14694 check this property before we have deduced all template
14695 arguments, because the template parameter types of a template
14696 template parameter might depend on prior template parameters
14697 deduced after the template template parameter. The following
14698 ill-formed example illustrates this issue:
14699
14700 template<typename T, template<T> class C> void f(C<5>, T);
14701
14702 template<int N> struct X {};
14703
14704 void g() {
14705 f(X<5>(), 5l); // error: template argument deduction fails
14706 }
14707
14708 The template parameter list of 'C' depends on the template type
14709 parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
14710 'long'. Thus, we can't check that 'C' cannot bind to 'X' at the
14711 time that we deduce 'C'. */
14712 if (result == 0
14713 && !template_template_parm_bindings_ok_p
14714 (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
14715 return unify_inconsistent_template_template_parameters (explain_p);
14716
14717 if (result == 0)
14718 /* All is well so far. Now, check:
14719
14720 [temp.deduct]
14721
14722 When all template arguments have been deduced, all uses of
14723 template parameters in nondeduced contexts are replaced with
14724 the corresponding deduced argument values. If the
14725 substitution results in an invalid type, as described above,
14726 type deduction fails. */
14727 {
14728 tree substed = deduction_tsubst_fntype (fn, targs,
14729 (explain_p
14730 ? tf_warning_or_error
14731 : tf_none));
14732 if (substed == error_mark_node)
14733 return 1;
14734
14735 /* If we're looking for an exact match, check that what we got
14736 is indeed an exact match. It might not be if some template
14737 parameters are used in non-deduced contexts. */
14738 if (strict == DEDUCE_EXACT)
14739 {
14740 unsigned int i;
14741
14742 tree sarg
14743 = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (substed));
14744 if (return_type)
14745 sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
14746 for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
14747 if (!same_type_p (args[i], TREE_VALUE (sarg)))
14748 return unify_type_mismatch (explain_p, args[i],
14749 TREE_VALUE (sarg));
14750 }
14751 }
14752
14753 return result;
14754 }
14755
14756 /* Adjust types before performing type deduction, as described in
14757 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
14758 sections are symmetric. PARM is the type of a function parameter
14759 or the return type of the conversion function. ARG is the type of
14760 the argument passed to the call, or the type of the value
14761 initialized with the result of the conversion function.
14762 ARG_EXPR is the original argument expression, which may be null. */
14763
14764 static int
14765 maybe_adjust_types_for_deduction (unification_kind_t strict,
14766 tree* parm,
14767 tree* arg,
14768 tree arg_expr)
14769 {
14770 int result = 0;
14771
14772 switch (strict)
14773 {
14774 case DEDUCE_CALL:
14775 break;
14776
14777 case DEDUCE_CONV:
14778 {
14779 /* Swap PARM and ARG throughout the remainder of this
14780 function; the handling is precisely symmetric since PARM
14781 will initialize ARG rather than vice versa. */
14782 tree* temp = parm;
14783 parm = arg;
14784 arg = temp;
14785 break;
14786 }
14787
14788 case DEDUCE_EXACT:
14789 /* Core issue #873: Do the DR606 thing (see below) for these cases,
14790 too, but here handle it by stripping the reference from PARM
14791 rather than by adding it to ARG. */
14792 if (TREE_CODE (*parm) == REFERENCE_TYPE
14793 && TYPE_REF_IS_RVALUE (*parm)
14794 && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
14795 && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
14796 && TREE_CODE (*arg) == REFERENCE_TYPE
14797 && !TYPE_REF_IS_RVALUE (*arg))
14798 *parm = TREE_TYPE (*parm);
14799 /* Nothing else to do in this case. */
14800 return 0;
14801
14802 default:
14803 gcc_unreachable ();
14804 }
14805
14806 if (TREE_CODE (*parm) != REFERENCE_TYPE)
14807 {
14808 /* [temp.deduct.call]
14809
14810 If P is not a reference type:
14811
14812 --If A is an array type, the pointer type produced by the
14813 array-to-pointer standard conversion (_conv.array_) is
14814 used in place of A for type deduction; otherwise,
14815
14816 --If A is a function type, the pointer type produced by
14817 the function-to-pointer standard conversion
14818 (_conv.func_) is used in place of A for type deduction;
14819 otherwise,
14820
14821 --If A is a cv-qualified type, the top level
14822 cv-qualifiers of A's type are ignored for type
14823 deduction. */
14824 if (TREE_CODE (*arg) == ARRAY_TYPE)
14825 *arg = build_pointer_type (TREE_TYPE (*arg));
14826 else if (TREE_CODE (*arg) == FUNCTION_TYPE)
14827 *arg = build_pointer_type (*arg);
14828 else
14829 *arg = TYPE_MAIN_VARIANT (*arg);
14830 }
14831
14832 /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
14833 of the form T&&, where T is a template parameter, and the argument
14834 is an lvalue, T is deduced as A& */
14835 if (TREE_CODE (*parm) == REFERENCE_TYPE
14836 && TYPE_REF_IS_RVALUE (*parm)
14837 && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
14838 && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
14839 && (arg_expr ? real_lvalue_p (arg_expr)
14840 /* try_one_overload doesn't provide an arg_expr, but
14841 functions are always lvalues. */
14842 : TREE_CODE (*arg) == FUNCTION_TYPE))
14843 *arg = build_reference_type (*arg);
14844
14845 /* [temp.deduct.call]
14846
14847 If P is a cv-qualified type, the top level cv-qualifiers
14848 of P's type are ignored for type deduction. If P is a
14849 reference type, the type referred to by P is used for
14850 type deduction. */
14851 *parm = TYPE_MAIN_VARIANT (*parm);
14852 if (TREE_CODE (*parm) == REFERENCE_TYPE)
14853 {
14854 *parm = TREE_TYPE (*parm);
14855 result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
14856 }
14857
14858 /* DR 322. For conversion deduction, remove a reference type on parm
14859 too (which has been swapped into ARG). */
14860 if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
14861 *arg = TREE_TYPE (*arg);
14862
14863 return result;
14864 }
14865
14866 /* Subroutine of unify_one_argument. PARM is a function parameter of a
14867 template which does contain any deducible template parameters; check if
14868 ARG is a suitable match for it. STRICT, FLAGS and EXPLAIN_P are as in
14869 unify_one_argument. */
14870
14871 static int
14872 check_non_deducible_conversion (tree parm, tree arg, int strict,
14873 int flags, bool explain_p)
14874 {
14875 tree type;
14876
14877 if (!TYPE_P (arg))
14878 type = TREE_TYPE (arg);
14879 else
14880 type = arg;
14881
14882 if (same_type_p (parm, type))
14883 return unify_success (explain_p);
14884
14885 if (strict == DEDUCE_CONV)
14886 {
14887 if (can_convert_arg (type, parm, NULL_TREE, flags))
14888 return unify_success (explain_p);
14889 }
14890 else if (strict != DEDUCE_EXACT)
14891 {
14892 if (can_convert_arg (parm, type,
14893 TYPE_P (arg) ? NULL_TREE : arg,
14894 flags))
14895 return unify_success (explain_p);
14896 }
14897
14898 if (strict == DEDUCE_EXACT)
14899 return unify_type_mismatch (explain_p, parm, arg);
14900 else
14901 return unify_arg_conversion (explain_p, parm, type, arg);
14902 }
14903
14904 /* Subroutine of type_unification_real and unify_pack_expansion to
14905 handle unification of a single P/A pair. Parameters are as
14906 for those functions. */
14907
14908 static int
14909 unify_one_argument (tree tparms, tree targs, tree parm, tree arg,
14910 int subr, unification_kind_t strict, int flags,
14911 bool explain_p)
14912 {
14913 tree arg_expr = NULL_TREE;
14914 int arg_strict;
14915
14916 if (arg == error_mark_node || parm == error_mark_node)
14917 return unify_invalid (explain_p);
14918 if (arg == unknown_type_node)
14919 /* We can't deduce anything from this, but we might get all the
14920 template args from other function args. */
14921 return unify_success (explain_p);
14922
14923 /* FIXME uses_deducible_template_parms */
14924 if (TYPE_P (parm) && !uses_template_parms (parm))
14925 return check_non_deducible_conversion (parm, arg, strict, flags,
14926 explain_p);
14927
14928 switch (strict)
14929 {
14930 case DEDUCE_CALL:
14931 arg_strict = (UNIFY_ALLOW_OUTER_LEVEL
14932 | UNIFY_ALLOW_MORE_CV_QUAL
14933 | UNIFY_ALLOW_DERIVED);
14934 break;
14935
14936 case DEDUCE_CONV:
14937 arg_strict = UNIFY_ALLOW_LESS_CV_QUAL;
14938 break;
14939
14940 case DEDUCE_EXACT:
14941 arg_strict = UNIFY_ALLOW_NONE;
14942 break;
14943
14944 default:
14945 gcc_unreachable ();
14946 }
14947
14948 /* We only do these transformations if this is the top-level
14949 parameter_type_list in a call or declaration matching; in other
14950 situations (nested function declarators, template argument lists) we
14951 won't be comparing a type to an expression, and we don't do any type
14952 adjustments. */
14953 if (!subr)
14954 {
14955 if (!TYPE_P (arg))
14956 {
14957 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
14958 if (type_unknown_p (arg))
14959 {
14960 /* [temp.deduct.type] A template-argument can be
14961 deduced from a pointer to function or pointer
14962 to member function argument if the set of
14963 overloaded functions does not contain function
14964 templates and at most one of a set of
14965 overloaded functions provides a unique
14966 match. */
14967
14968 if (resolve_overloaded_unification
14969 (tparms, targs, parm, arg, strict,
14970 arg_strict, explain_p))
14971 return unify_success (explain_p);
14972 return unify_overload_resolution_failure (explain_p, arg);
14973 }
14974
14975 arg_expr = arg;
14976 arg = unlowered_expr_type (arg);
14977 if (arg == error_mark_node)
14978 return unify_invalid (explain_p);
14979 }
14980
14981 arg_strict |=
14982 maybe_adjust_types_for_deduction (strict, &parm, &arg, arg_expr);
14983 }
14984 else
14985 gcc_assert ((TYPE_P (parm) || TREE_CODE (parm) == TEMPLATE_DECL)
14986 == (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL));
14987
14988 /* For deduction from an init-list we need the actual list. */
14989 if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
14990 arg = arg_expr;
14991 return unify (tparms, targs, parm, arg, arg_strict, explain_p);
14992 }
14993
14994 /* Most parms like fn_type_unification.
14995
14996 If SUBR is 1, we're being called recursively (to unify the
14997 arguments of a function or method parameter of a function
14998 template). */
14999
15000 static int
15001 type_unification_real (tree tparms,
15002 tree targs,
15003 tree xparms,
15004 const tree *xargs,
15005 unsigned int xnargs,
15006 int subr,
15007 unification_kind_t strict,
15008 int flags,
15009 bool explain_p)
15010 {
15011 tree parm, arg;
15012 int i;
15013 int ntparms = TREE_VEC_LENGTH (tparms);
15014 int saw_undeduced = 0;
15015 tree parms;
15016 const tree *args;
15017 unsigned int nargs;
15018 unsigned int ia;
15019
15020 gcc_assert (TREE_CODE (tparms) == TREE_VEC);
15021 gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
15022 gcc_assert (ntparms > 0);
15023
15024 /* Reset the number of non-defaulted template arguments contained
15025 in TARGS. */
15026 NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
15027
15028 again:
15029 parms = xparms;
15030 args = xargs;
15031 nargs = xnargs;
15032
15033 ia = 0;
15034 while (parms && parms != void_list_node
15035 && ia < nargs)
15036 {
15037 parm = TREE_VALUE (parms);
15038
15039 if (TREE_CODE (parm) == TYPE_PACK_EXPANSION
15040 && (!TREE_CHAIN (parms) || TREE_CHAIN (parms) == void_list_node))
15041 /* For a function parameter pack that occurs at the end of the
15042 parameter-declaration-list, the type A of each remaining
15043 argument of the call is compared with the type P of the
15044 declarator-id of the function parameter pack. */
15045 break;
15046
15047 parms = TREE_CHAIN (parms);
15048
15049 if (TREE_CODE (parm) == TYPE_PACK_EXPANSION)
15050 /* For a function parameter pack that does not occur at the
15051 end of the parameter-declaration-list, the type of the
15052 parameter pack is a non-deduced context. */
15053 continue;
15054
15055 arg = args[ia];
15056 ++ia;
15057
15058 if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
15059 flags, explain_p))
15060 return 1;
15061 }
15062
15063 if (parms
15064 && parms != void_list_node
15065 && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
15066 {
15067 /* Unify the remaining arguments with the pack expansion type. */
15068 tree argvec;
15069 tree parmvec = make_tree_vec (1);
15070
15071 /* Allocate a TREE_VEC and copy in all of the arguments */
15072 argvec = make_tree_vec (nargs - ia);
15073 for (i = 0; ia < nargs; ++ia, ++i)
15074 TREE_VEC_ELT (argvec, i) = args[ia];
15075
15076 /* Copy the parameter into parmvec. */
15077 TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
15078 if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
15079 /*subr=*/subr, explain_p))
15080 return 1;
15081
15082 /* Advance to the end of the list of parameters. */
15083 parms = TREE_CHAIN (parms);
15084 }
15085
15086 /* Fail if we've reached the end of the parm list, and more args
15087 are present, and the parm list isn't variadic. */
15088 if (ia < nargs && parms == void_list_node)
15089 return unify_too_many_arguments (explain_p, nargs, ia);
15090 /* Fail if parms are left and they don't have default values. */
15091 if (parms && parms != void_list_node
15092 && TREE_PURPOSE (parms) == NULL_TREE)
15093 {
15094 unsigned int count = nargs;
15095 tree p = parms;
15096 while (p && p != void_list_node)
15097 {
15098 count++;
15099 p = TREE_CHAIN (p);
15100 }
15101 return unify_too_few_arguments (explain_p, ia, count);
15102 }
15103
15104 if (!subr)
15105 {
15106 tsubst_flags_t complain = (explain_p
15107 ? tf_warning_or_error
15108 : tf_none);
15109
15110 /* Check to see if we need another pass before we start clearing
15111 ARGUMENT_PACK_INCOMPLETE_P. */
15112 for (i = 0; i < ntparms; i++)
15113 {
15114 tree targ = TREE_VEC_ELT (targs, i);
15115 tree tparm = TREE_VEC_ELT (tparms, i);
15116
15117 if (targ || tparm == error_mark_node)
15118 continue;
15119 tparm = TREE_VALUE (tparm);
15120
15121 /* If this is an undeduced nontype parameter that depends on
15122 a type parameter, try another pass; its type may have been
15123 deduced from a later argument than the one from which
15124 this parameter can be deduced. */
15125 if (TREE_CODE (tparm) == PARM_DECL
15126 && uses_template_parms (TREE_TYPE (tparm))
15127 && !saw_undeduced++)
15128 goto again;
15129 }
15130
15131 for (i = 0; i < ntparms; i++)
15132 {
15133 tree targ = TREE_VEC_ELT (targs, i);
15134 tree tparm = TREE_VEC_ELT (tparms, i);
15135
15136 /* Clear the "incomplete" flags on all argument packs now so that
15137 substituting them into later default arguments works. */
15138 if (targ && ARGUMENT_PACK_P (targ))
15139 {
15140 ARGUMENT_PACK_INCOMPLETE_P (targ) = 0;
15141 ARGUMENT_PACK_EXPLICIT_ARGS (targ) = NULL_TREE;
15142 }
15143
15144 if (targ || tparm == error_mark_node)
15145 continue;
15146 tparm = TREE_VALUE (tparm);
15147
15148 /* Core issue #226 (C++0x) [temp.deduct]:
15149
15150 If a template argument has not been deduced, its
15151 default template argument, if any, is used.
15152
15153 When we are in C++98 mode, TREE_PURPOSE will either
15154 be NULL_TREE or ERROR_MARK_NODE, so we do not need
15155 to explicitly check cxx_dialect here. */
15156 if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
15157 {
15158 tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
15159 tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i));
15160 arg = tsubst_template_arg (arg, targs, complain, NULL_TREE);
15161 arg = convert_template_argument (parm, arg, targs, complain,
15162 i, NULL_TREE);
15163 if (arg == error_mark_node)
15164 return 1;
15165 else
15166 {
15167 TREE_VEC_ELT (targs, i) = arg;
15168 /* The position of the first default template argument,
15169 is also the number of non-defaulted arguments in TARGS.
15170 Record that. */
15171 if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
15172 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
15173 continue;
15174 }
15175 }
15176
15177 /* If the type parameter is a parameter pack, then it will
15178 be deduced to an empty parameter pack. */
15179 if (template_parameter_pack_p (tparm))
15180 {
15181 tree arg;
15182
15183 if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
15184 {
15185 arg = make_node (NONTYPE_ARGUMENT_PACK);
15186 TREE_TYPE (arg) = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
15187 TREE_CONSTANT (arg) = 1;
15188 }
15189 else
15190 arg = cxx_make_type (TYPE_ARGUMENT_PACK);
15191
15192 SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
15193
15194 TREE_VEC_ELT (targs, i) = arg;
15195 continue;
15196 }
15197
15198 return unify_parameter_deduction_failure (explain_p, tparm);
15199 }
15200 }
15201 #ifdef ENABLE_CHECKING
15202 if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
15203 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
15204 #endif
15205
15206 return unify_success (explain_p);
15207 }
15208
15209 /* Subroutine of type_unification_real. Args are like the variables
15210 at the call site. ARG is an overloaded function (or template-id);
15211 we try deducing template args from each of the overloads, and if
15212 only one succeeds, we go with that. Modifies TARGS and returns
15213 true on success. */
15214
15215 static bool
15216 resolve_overloaded_unification (tree tparms,
15217 tree targs,
15218 tree parm,
15219 tree arg,
15220 unification_kind_t strict,
15221 int sub_strict,
15222 bool explain_p)
15223 {
15224 tree tempargs = copy_node (targs);
15225 int good = 0;
15226 tree goodfn = NULL_TREE;
15227 bool addr_p;
15228
15229 if (TREE_CODE (arg) == ADDR_EXPR)
15230 {
15231 arg = TREE_OPERAND (arg, 0);
15232 addr_p = true;
15233 }
15234 else
15235 addr_p = false;
15236
15237 if (TREE_CODE (arg) == COMPONENT_REF)
15238 /* Handle `&x' where `x' is some static or non-static member
15239 function name. */
15240 arg = TREE_OPERAND (arg, 1);
15241
15242 if (TREE_CODE (arg) == OFFSET_REF)
15243 arg = TREE_OPERAND (arg, 1);
15244
15245 /* Strip baselink information. */
15246 if (BASELINK_P (arg))
15247 arg = BASELINK_FUNCTIONS (arg);
15248
15249 if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
15250 {
15251 /* If we got some explicit template args, we need to plug them into
15252 the affected templates before we try to unify, in case the
15253 explicit args will completely resolve the templates in question. */
15254
15255 int ok = 0;
15256 tree expl_subargs = TREE_OPERAND (arg, 1);
15257 arg = TREE_OPERAND (arg, 0);
15258
15259 for (; arg; arg = OVL_NEXT (arg))
15260 {
15261 tree fn = OVL_CURRENT (arg);
15262 tree subargs, elem;
15263
15264 if (TREE_CODE (fn) != TEMPLATE_DECL)
15265 continue;
15266
15267 ++processing_template_decl;
15268 subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
15269 expl_subargs, /*check_ret=*/false);
15270 if (subargs && !any_dependent_template_arguments_p (subargs))
15271 {
15272 elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
15273 if (try_one_overload (tparms, targs, tempargs, parm,
15274 elem, strict, sub_strict, addr_p, explain_p)
15275 && (!goodfn || !decls_match (goodfn, elem)))
15276 {
15277 goodfn = elem;
15278 ++good;
15279 }
15280 }
15281 else if (subargs)
15282 ++ok;
15283 --processing_template_decl;
15284 }
15285 /* If no templates (or more than one) are fully resolved by the
15286 explicit arguments, this template-id is a non-deduced context; it
15287 could still be OK if we deduce all template arguments for the
15288 enclosing call through other arguments. */
15289 if (good != 1)
15290 good = ok;
15291 }
15292 else if (TREE_CODE (arg) != OVERLOAD
15293 && TREE_CODE (arg) != FUNCTION_DECL)
15294 /* If ARG is, for example, "(0, &f)" then its type will be unknown
15295 -- but the deduction does not succeed because the expression is
15296 not just the function on its own. */
15297 return false;
15298 else
15299 for (; arg; arg = OVL_NEXT (arg))
15300 if (try_one_overload (tparms, targs, tempargs, parm,
15301 TREE_TYPE (OVL_CURRENT (arg)),
15302 strict, sub_strict, addr_p, explain_p)
15303 && (!goodfn || !decls_match (goodfn, OVL_CURRENT (arg))))
15304 {
15305 goodfn = OVL_CURRENT (arg);
15306 ++good;
15307 }
15308
15309 /* [temp.deduct.type] A template-argument can be deduced from a pointer
15310 to function or pointer to member function argument if the set of
15311 overloaded functions does not contain function templates and at most
15312 one of a set of overloaded functions provides a unique match.
15313
15314 So if we found multiple possibilities, we return success but don't
15315 deduce anything. */
15316
15317 if (good == 1)
15318 {
15319 int i = TREE_VEC_LENGTH (targs);
15320 for (; i--; )
15321 if (TREE_VEC_ELT (tempargs, i))
15322 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
15323 }
15324 if (good)
15325 return true;
15326
15327 return false;
15328 }
15329
15330 /* Core DR 115: In contexts where deduction is done and fails, or in
15331 contexts where deduction is not done, if a template argument list is
15332 specified and it, along with any default template arguments, identifies
15333 a single function template specialization, then the template-id is an
15334 lvalue for the function template specialization. */
15335
15336 tree
15337 resolve_nondeduced_context (tree orig_expr)
15338 {
15339 tree expr, offset, baselink;
15340 bool addr;
15341
15342 if (!type_unknown_p (orig_expr))
15343 return orig_expr;
15344
15345 expr = orig_expr;
15346 addr = false;
15347 offset = NULL_TREE;
15348 baselink = NULL_TREE;
15349
15350 if (TREE_CODE (expr) == ADDR_EXPR)
15351 {
15352 expr = TREE_OPERAND (expr, 0);
15353 addr = true;
15354 }
15355 if (TREE_CODE (expr) == OFFSET_REF)
15356 {
15357 offset = expr;
15358 expr = TREE_OPERAND (expr, 1);
15359 }
15360 if (BASELINK_P (expr))
15361 {
15362 baselink = expr;
15363 expr = BASELINK_FUNCTIONS (expr);
15364 }
15365
15366 if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
15367 {
15368 int good = 0;
15369 tree goodfn = NULL_TREE;
15370
15371 /* If we got some explicit template args, we need to plug them into
15372 the affected templates before we try to unify, in case the
15373 explicit args will completely resolve the templates in question. */
15374
15375 tree expl_subargs = TREE_OPERAND (expr, 1);
15376 tree arg = TREE_OPERAND (expr, 0);
15377 tree badfn = NULL_TREE;
15378 tree badargs = NULL_TREE;
15379
15380 for (; arg; arg = OVL_NEXT (arg))
15381 {
15382 tree fn = OVL_CURRENT (arg);
15383 tree subargs, elem;
15384
15385 if (TREE_CODE (fn) != TEMPLATE_DECL)
15386 continue;
15387
15388 ++processing_template_decl;
15389 subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
15390 expl_subargs, /*check_ret=*/false);
15391 if (subargs && !any_dependent_template_arguments_p (subargs))
15392 {
15393 elem = instantiate_template (fn, subargs, tf_none);
15394 if (elem == error_mark_node)
15395 {
15396 badfn = fn;
15397 badargs = subargs;
15398 }
15399 else if (elem && (!goodfn || !decls_match (goodfn, elem)))
15400 {
15401 goodfn = elem;
15402 ++good;
15403 }
15404 }
15405 --processing_template_decl;
15406 }
15407 if (good == 1)
15408 {
15409 mark_used (goodfn);
15410 expr = goodfn;
15411 if (baselink)
15412 expr = build_baselink (BASELINK_BINFO (baselink),
15413 BASELINK_ACCESS_BINFO (baselink),
15414 expr, BASELINK_OPTYPE (baselink));
15415 if (offset)
15416 {
15417 tree base
15418 = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (offset, 0)));
15419 expr = build_offset_ref (base, expr, addr);
15420 }
15421 if (addr)
15422 expr = cp_build_addr_expr (expr, tf_warning_or_error);
15423 return expr;
15424 }
15425 else if (good == 0 && badargs)
15426 /* There were no good options and at least one bad one, so let the
15427 user know what the problem is. */
15428 instantiate_template (badfn, badargs, tf_warning_or_error);
15429 }
15430 return orig_expr;
15431 }
15432
15433 /* Subroutine of resolve_overloaded_unification; does deduction for a single
15434 overload. Fills TARGS with any deduced arguments, or error_mark_node if
15435 different overloads deduce different arguments for a given parm.
15436 ADDR_P is true if the expression for which deduction is being
15437 performed was of the form "& fn" rather than simply "fn".
15438
15439 Returns 1 on success. */
15440
15441 static int
15442 try_one_overload (tree tparms,
15443 tree orig_targs,
15444 tree targs,
15445 tree parm,
15446 tree arg,
15447 unification_kind_t strict,
15448 int sub_strict,
15449 bool addr_p,
15450 bool explain_p)
15451 {
15452 int nargs;
15453 tree tempargs;
15454 int i;
15455
15456 /* [temp.deduct.type] A template-argument can be deduced from a pointer
15457 to function or pointer to member function argument if the set of
15458 overloaded functions does not contain function templates and at most
15459 one of a set of overloaded functions provides a unique match.
15460
15461 So if this is a template, just return success. */
15462
15463 if (uses_template_parms (arg))
15464 return 1;
15465
15466 if (TREE_CODE (arg) == METHOD_TYPE)
15467 arg = build_ptrmemfunc_type (build_pointer_type (arg));
15468 else if (addr_p)
15469 arg = build_pointer_type (arg);
15470
15471 sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
15472
15473 /* We don't copy orig_targs for this because if we have already deduced
15474 some template args from previous args, unify would complain when we
15475 try to deduce a template parameter for the same argument, even though
15476 there isn't really a conflict. */
15477 nargs = TREE_VEC_LENGTH (targs);
15478 tempargs = make_tree_vec (nargs);
15479
15480 if (unify (tparms, tempargs, parm, arg, sub_strict, explain_p))
15481 return 0;
15482
15483 /* First make sure we didn't deduce anything that conflicts with
15484 explicitly specified args. */
15485 for (i = nargs; i--; )
15486 {
15487 tree elt = TREE_VEC_ELT (tempargs, i);
15488 tree oldelt = TREE_VEC_ELT (orig_targs, i);
15489
15490 if (!elt)
15491 /*NOP*/;
15492 else if (uses_template_parms (elt))
15493 /* Since we're unifying against ourselves, we will fill in
15494 template args used in the function parm list with our own
15495 template parms. Discard them. */
15496 TREE_VEC_ELT (tempargs, i) = NULL_TREE;
15497 else if (oldelt && !template_args_equal (oldelt, elt))
15498 return 0;
15499 }
15500
15501 for (i = nargs; i--; )
15502 {
15503 tree elt = TREE_VEC_ELT (tempargs, i);
15504
15505 if (elt)
15506 TREE_VEC_ELT (targs, i) = elt;
15507 }
15508
15509 return 1;
15510 }
15511
15512 /* PARM is a template class (perhaps with unbound template
15513 parameters). ARG is a fully instantiated type. If ARG can be
15514 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
15515 TARGS are as for unify. */
15516
15517 static tree
15518 try_class_unification (tree tparms, tree targs, tree parm, tree arg,
15519 bool explain_p)
15520 {
15521 tree copy_of_targs;
15522
15523 if (!CLASSTYPE_TEMPLATE_INFO (arg)
15524 || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
15525 != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
15526 return NULL_TREE;
15527
15528 /* We need to make a new template argument vector for the call to
15529 unify. If we used TARGS, we'd clutter it up with the result of
15530 the attempted unification, even if this class didn't work out.
15531 We also don't want to commit ourselves to all the unifications
15532 we've already done, since unification is supposed to be done on
15533 an argument-by-argument basis. In other words, consider the
15534 following pathological case:
15535
15536 template <int I, int J, int K>
15537 struct S {};
15538
15539 template <int I, int J>
15540 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
15541
15542 template <int I, int J, int K>
15543 void f(S<I, J, K>, S<I, I, I>);
15544
15545 void g() {
15546 S<0, 0, 0> s0;
15547 S<0, 1, 2> s2;
15548
15549 f(s0, s2);
15550 }
15551
15552 Now, by the time we consider the unification involving `s2', we
15553 already know that we must have `f<0, 0, 0>'. But, even though
15554 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
15555 because there are two ways to unify base classes of S<0, 1, 2>
15556 with S<I, I, I>. If we kept the already deduced knowledge, we
15557 would reject the possibility I=1. */
15558 copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
15559
15560 /* If unification failed, we're done. */
15561 if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
15562 CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE, explain_p))
15563 return NULL_TREE;
15564
15565 return arg;
15566 }
15567
15568 /* Given a template type PARM and a class type ARG, find the unique
15569 base type in ARG that is an instance of PARM. We do not examine
15570 ARG itself; only its base-classes. If there is not exactly one
15571 appropriate base class, return NULL_TREE. PARM may be the type of
15572 a partial specialization, as well as a plain template type. Used
15573 by unify. */
15574
15575 static enum template_base_result
15576 get_template_base (tree tparms, tree targs, tree parm, tree arg,
15577 bool explain_p, tree *result)
15578 {
15579 tree rval = NULL_TREE;
15580 tree binfo;
15581
15582 gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
15583
15584 binfo = TYPE_BINFO (complete_type (arg));
15585 if (!binfo)
15586 {
15587 /* The type could not be completed. */
15588 *result = NULL_TREE;
15589 return tbr_incomplete_type;
15590 }
15591
15592 /* Walk in inheritance graph order. The search order is not
15593 important, and this avoids multiple walks of virtual bases. */
15594 for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
15595 {
15596 tree r = try_class_unification (tparms, targs, parm,
15597 BINFO_TYPE (binfo), explain_p);
15598
15599 if (r)
15600 {
15601 /* If there is more than one satisfactory baseclass, then:
15602
15603 [temp.deduct.call]
15604
15605 If they yield more than one possible deduced A, the type
15606 deduction fails.
15607
15608 applies. */
15609 if (rval && !same_type_p (r, rval))
15610 {
15611 *result = NULL_TREE;
15612 return tbr_ambiguous_baseclass;
15613 }
15614
15615 rval = r;
15616 }
15617 }
15618
15619 *result = rval;
15620 return tbr_success;
15621 }
15622
15623 /* Returns the level of DECL, which declares a template parameter. */
15624
15625 static int
15626 template_decl_level (tree decl)
15627 {
15628 switch (TREE_CODE (decl))
15629 {
15630 case TYPE_DECL:
15631 case TEMPLATE_DECL:
15632 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
15633
15634 case PARM_DECL:
15635 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
15636
15637 default:
15638 gcc_unreachable ();
15639 }
15640 return 0;
15641 }
15642
15643 /* Decide whether ARG can be unified with PARM, considering only the
15644 cv-qualifiers of each type, given STRICT as documented for unify.
15645 Returns nonzero iff the unification is OK on that basis. */
15646
15647 static int
15648 check_cv_quals_for_unify (int strict, tree arg, tree parm)
15649 {
15650 int arg_quals = cp_type_quals (arg);
15651 int parm_quals = cp_type_quals (parm);
15652
15653 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15654 && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
15655 {
15656 /* Although a CVR qualifier is ignored when being applied to a
15657 substituted template parameter ([8.3.2]/1 for example), that
15658 does not allow us to unify "const T" with "int&" because both
15659 types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
15660 It is ok when we're allowing additional CV qualifiers
15661 at the outer level [14.8.2.1]/3,1st bullet. */
15662 if ((TREE_CODE (arg) == REFERENCE_TYPE
15663 || TREE_CODE (arg) == FUNCTION_TYPE
15664 || TREE_CODE (arg) == METHOD_TYPE)
15665 && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
15666 return 0;
15667
15668 if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
15669 && (parm_quals & TYPE_QUAL_RESTRICT))
15670 return 0;
15671 }
15672
15673 if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
15674 && (arg_quals & parm_quals) != parm_quals)
15675 return 0;
15676
15677 if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
15678 && (parm_quals & arg_quals) != arg_quals)
15679 return 0;
15680
15681 return 1;
15682 }
15683
15684 /* Determines the LEVEL and INDEX for the template parameter PARM. */
15685 void
15686 template_parm_level_and_index (tree parm, int* level, int* index)
15687 {
15688 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15689 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
15690 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
15691 {
15692 *index = TEMPLATE_TYPE_IDX (parm);
15693 *level = TEMPLATE_TYPE_LEVEL (parm);
15694 }
15695 else
15696 {
15697 *index = TEMPLATE_PARM_IDX (parm);
15698 *level = TEMPLATE_PARM_LEVEL (parm);
15699 }
15700 }
15701
15702 #define RECUR_AND_CHECK_FAILURE(TP, TA, P, A, S, EP) \
15703 do { \
15704 if (unify (TP, TA, P, A, S, EP)) \
15705 return 1; \
15706 } while (0);
15707
15708 /* Unifies the remaining arguments in PACKED_ARGS with the pack
15709 expansion at the end of PACKED_PARMS. Returns 0 if the type
15710 deduction succeeds, 1 otherwise. STRICT is the same as in
15711 unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
15712 call argument list. We'll need to adjust the arguments to make them
15713 types. SUBR tells us if this is from a recursive call to
15714 type_unification_real, or for comparing two template argument
15715 lists. */
15716
15717 static int
15718 unify_pack_expansion (tree tparms, tree targs, tree packed_parms,
15719 tree packed_args, unification_kind_t strict,
15720 bool subr, bool explain_p)
15721 {
15722 tree parm
15723 = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
15724 tree pattern = PACK_EXPANSION_PATTERN (parm);
15725 tree pack, packs = NULL_TREE;
15726 int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
15727 int len = TREE_VEC_LENGTH (packed_args);
15728
15729 /* Determine the parameter packs we will be deducing from the
15730 pattern, and record their current deductions. */
15731 for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm);
15732 pack; pack = TREE_CHAIN (pack))
15733 {
15734 tree parm_pack = TREE_VALUE (pack);
15735 int idx, level;
15736
15737 /* Determine the index and level of this parameter pack. */
15738 template_parm_level_and_index (parm_pack, &level, &idx);
15739
15740 /* Keep track of the parameter packs and their corresponding
15741 argument packs. */
15742 packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
15743 TREE_TYPE (packs) = make_tree_vec (len - start);
15744 }
15745
15746 /* Loop through all of the arguments that have not yet been
15747 unified and unify each with the pattern. */
15748 for (i = start; i < len; i++)
15749 {
15750 tree parm;
15751 bool any_explicit = false;
15752 tree arg = TREE_VEC_ELT (packed_args, i);
15753
15754 /* For each parameter pack, set its TMPL_ARG to either NULL_TREE
15755 or the element of its argument pack at the current index if
15756 this argument was explicitly specified. */
15757 for (pack = packs; pack; pack = TREE_CHAIN (pack))
15758 {
15759 int idx, level;
15760 tree arg, pargs;
15761 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
15762
15763 arg = NULL_TREE;
15764 if (TREE_VALUE (pack)
15765 && (pargs = ARGUMENT_PACK_EXPLICIT_ARGS (TREE_VALUE (pack)))
15766 && (i < TREE_VEC_LENGTH (pargs)))
15767 {
15768 any_explicit = true;
15769 arg = TREE_VEC_ELT (pargs, i);
15770 }
15771 TMPL_ARG (targs, level, idx) = arg;
15772 }
15773
15774 /* If we had explicit template arguments, substitute them into the
15775 pattern before deduction. */
15776 if (any_explicit)
15777 {
15778 /* Some arguments might still be unspecified or dependent. */
15779 bool dependent;
15780 ++processing_template_decl;
15781 dependent = any_dependent_template_arguments_p (targs);
15782 if (!dependent)
15783 --processing_template_decl;
15784 parm = tsubst (pattern, targs,
15785 explain_p ? tf_warning_or_error : tf_none,
15786 NULL_TREE);
15787 if (dependent)
15788 --processing_template_decl;
15789 if (parm == error_mark_node)
15790 return 1;
15791 }
15792 else
15793 parm = pattern;
15794
15795 /* Unify the pattern with the current argument. */
15796 if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
15797 LOOKUP_IMPLICIT, explain_p))
15798 return 1;
15799
15800 /* For each parameter pack, collect the deduced value. */
15801 for (pack = packs; pack; pack = TREE_CHAIN (pack))
15802 {
15803 int idx, level;
15804 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
15805
15806 TREE_VEC_ELT (TREE_TYPE (pack), i - start) =
15807 TMPL_ARG (targs, level, idx);
15808 }
15809 }
15810
15811 /* Verify that the results of unification with the parameter packs
15812 produce results consistent with what we've seen before, and make
15813 the deduced argument packs available. */
15814 for (pack = packs; pack; pack = TREE_CHAIN (pack))
15815 {
15816 tree old_pack = TREE_VALUE (pack);
15817 tree new_args = TREE_TYPE (pack);
15818 int i, len = TREE_VEC_LENGTH (new_args);
15819 int idx, level;
15820 bool nondeduced_p = false;
15821
15822 /* By default keep the original deduced argument pack.
15823 If necessary, more specific code is going to update the
15824 resulting deduced argument later down in this function. */
15825 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
15826 TMPL_ARG (targs, level, idx) = old_pack;
15827
15828 /* If NEW_ARGS contains any NULL_TREE entries, we didn't
15829 actually deduce anything. */
15830 for (i = 0; i < len && !nondeduced_p; ++i)
15831 if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
15832 nondeduced_p = true;
15833 if (nondeduced_p)
15834 continue;
15835
15836 if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
15837 {
15838 /* If we had fewer function args than explicit template args,
15839 just use the explicits. */
15840 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
15841 int explicit_len = TREE_VEC_LENGTH (explicit_args);
15842 if (len < explicit_len)
15843 new_args = explicit_args;
15844 }
15845
15846 if (!old_pack)
15847 {
15848 tree result;
15849 /* Build the deduced *_ARGUMENT_PACK. */
15850 if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
15851 {
15852 result = make_node (NONTYPE_ARGUMENT_PACK);
15853 TREE_TYPE (result) =
15854 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
15855 TREE_CONSTANT (result) = 1;
15856 }
15857 else
15858 result = cxx_make_type (TYPE_ARGUMENT_PACK);
15859
15860 SET_ARGUMENT_PACK_ARGS (result, new_args);
15861
15862 /* Note the deduced argument packs for this parameter
15863 pack. */
15864 TMPL_ARG (targs, level, idx) = result;
15865 }
15866 else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
15867 && (ARGUMENT_PACK_ARGS (old_pack)
15868 == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
15869 {
15870 /* We only had the explicitly-provided arguments before, but
15871 now we have a complete set of arguments. */
15872 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
15873
15874 SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
15875 ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
15876 ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
15877 }
15878 else
15879 {
15880 tree bad_old_arg = NULL_TREE, bad_new_arg = NULL_TREE;
15881 tree old_args = ARGUMENT_PACK_ARGS (old_pack);
15882
15883 if (!comp_template_args_with_info (old_args, new_args,
15884 &bad_old_arg, &bad_new_arg))
15885 /* Inconsistent unification of this parameter pack. */
15886 return unify_parameter_pack_inconsistent (explain_p,
15887 bad_old_arg,
15888 bad_new_arg);
15889 }
15890 }
15891
15892 return unify_success (explain_p);
15893 }
15894
15895 /* Deduce the value of template parameters. TPARMS is the (innermost)
15896 set of template parameters to a template. TARGS is the bindings
15897 for those template parameters, as determined thus far; TARGS may
15898 include template arguments for outer levels of template parameters
15899 as well. PARM is a parameter to a template function, or a
15900 subcomponent of that parameter; ARG is the corresponding argument.
15901 This function attempts to match PARM with ARG in a manner
15902 consistent with the existing assignments in TARGS. If more values
15903 are deduced, then TARGS is updated.
15904
15905 Returns 0 if the type deduction succeeds, 1 otherwise. The
15906 parameter STRICT is a bitwise or of the following flags:
15907
15908 UNIFY_ALLOW_NONE:
15909 Require an exact match between PARM and ARG.
15910 UNIFY_ALLOW_MORE_CV_QUAL:
15911 Allow the deduced ARG to be more cv-qualified (by qualification
15912 conversion) than ARG.
15913 UNIFY_ALLOW_LESS_CV_QUAL:
15914 Allow the deduced ARG to be less cv-qualified than ARG.
15915 UNIFY_ALLOW_DERIVED:
15916 Allow the deduced ARG to be a template base class of ARG,
15917 or a pointer to a template base class of the type pointed to by
15918 ARG.
15919 UNIFY_ALLOW_INTEGER:
15920 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
15921 case for more information.
15922 UNIFY_ALLOW_OUTER_LEVEL:
15923 This is the outermost level of a deduction. Used to determine validity
15924 of qualification conversions. A valid qualification conversion must
15925 have const qualified pointers leading up to the inner type which
15926 requires additional CV quals, except at the outer level, where const
15927 is not required [conv.qual]. It would be normal to set this flag in
15928 addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
15929 UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
15930 This is the outermost level of a deduction, and PARM can be more CV
15931 qualified at this point.
15932 UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
15933 This is the outermost level of a deduction, and PARM can be less CV
15934 qualified at this point. */
15935
15936 static int
15937 unify (tree tparms, tree targs, tree parm, tree arg, int strict,
15938 bool explain_p)
15939 {
15940 int idx;
15941 tree targ;
15942 tree tparm;
15943 int strict_in = strict;
15944
15945 /* I don't think this will do the right thing with respect to types.
15946 But the only case I've seen it in so far has been array bounds, where
15947 signedness is the only information lost, and I think that will be
15948 okay. */
15949 while (TREE_CODE (parm) == NOP_EXPR)
15950 parm = TREE_OPERAND (parm, 0);
15951
15952 if (arg == error_mark_node)
15953 return unify_invalid (explain_p);
15954 if (arg == unknown_type_node
15955 || arg == init_list_type_node)
15956 /* We can't deduce anything from this, but we might get all the
15957 template args from other function args. */
15958 return unify_success (explain_p);
15959
15960 /* If PARM uses template parameters, then we can't bail out here,
15961 even if ARG == PARM, since we won't record unifications for the
15962 template parameters. We might need them if we're trying to
15963 figure out which of two things is more specialized. */
15964 if (arg == parm && !uses_template_parms (parm))
15965 return unify_success (explain_p);
15966
15967 /* Handle init lists early, so the rest of the function can assume
15968 we're dealing with a type. */
15969 if (BRACE_ENCLOSED_INITIALIZER_P (arg))
15970 {
15971 tree elt, elttype;
15972 unsigned i;
15973 tree orig_parm = parm;
15974
15975 /* Replace T with std::initializer_list<T> for deduction. */
15976 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15977 && flag_deduce_init_list)
15978 parm = listify (parm);
15979
15980 if (!is_std_init_list (parm))
15981 /* We can only deduce from an initializer list argument if the
15982 parameter is std::initializer_list; otherwise this is a
15983 non-deduced context. */
15984 return unify_success (explain_p);
15985
15986 elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
15987
15988 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
15989 {
15990 int elt_strict = strict;
15991
15992 if (elt == error_mark_node)
15993 return unify_invalid (explain_p);
15994
15995 if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
15996 {
15997 tree type = TREE_TYPE (elt);
15998 /* It should only be possible to get here for a call. */
15999 gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
16000 elt_strict |= maybe_adjust_types_for_deduction
16001 (DEDUCE_CALL, &elttype, &type, elt);
16002 elt = type;
16003 }
16004
16005 RECUR_AND_CHECK_FAILURE (tparms, targs, elttype, elt, elt_strict,
16006 explain_p);
16007 }
16008
16009 /* If the std::initializer_list<T> deduction worked, replace the
16010 deduced A with std::initializer_list<A>. */
16011 if (orig_parm != parm)
16012 {
16013 idx = TEMPLATE_TYPE_IDX (orig_parm);
16014 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
16015 targ = listify (targ);
16016 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
16017 }
16018 return unify_success (explain_p);
16019 }
16020
16021 /* Immediately reject some pairs that won't unify because of
16022 cv-qualification mismatches. */
16023 if (TREE_CODE (arg) == TREE_CODE (parm)
16024 && TYPE_P (arg)
16025 /* It is the elements of the array which hold the cv quals of an array
16026 type, and the elements might be template type parms. We'll check
16027 when we recurse. */
16028 && TREE_CODE (arg) != ARRAY_TYPE
16029 /* We check the cv-qualifiers when unifying with template type
16030 parameters below. We want to allow ARG `const T' to unify with
16031 PARM `T' for example, when computing which of two templates
16032 is more specialized, for example. */
16033 && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
16034 && !check_cv_quals_for_unify (strict_in, arg, parm))
16035 return unify_cv_qual_mismatch (explain_p, parm, arg);
16036
16037 if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
16038 && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
16039 strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
16040 strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
16041 strict &= ~UNIFY_ALLOW_DERIVED;
16042 strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
16043 strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
16044
16045 switch (TREE_CODE (parm))
16046 {
16047 case TYPENAME_TYPE:
16048 case SCOPE_REF:
16049 case UNBOUND_CLASS_TEMPLATE:
16050 /* In a type which contains a nested-name-specifier, template
16051 argument values cannot be deduced for template parameters used
16052 within the nested-name-specifier. */
16053 return unify_success (explain_p);
16054
16055 case TEMPLATE_TYPE_PARM:
16056 case TEMPLATE_TEMPLATE_PARM:
16057 case BOUND_TEMPLATE_TEMPLATE_PARM:
16058 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
16059 if (tparm == error_mark_node)
16060 return unify_invalid (explain_p);
16061
16062 if (TEMPLATE_TYPE_LEVEL (parm)
16063 != template_decl_level (tparm))
16064 /* The PARM is not one we're trying to unify. Just check
16065 to see if it matches ARG. */
16066 {
16067 if (TREE_CODE (arg) == TREE_CODE (parm)
16068 && same_type_p (parm, arg))
16069 return unify_success (explain_p);
16070 else
16071 return unify_type_mismatch (explain_p, parm, arg);
16072 }
16073 idx = TEMPLATE_TYPE_IDX (parm);
16074 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
16075 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
16076
16077 /* Check for mixed types and values. */
16078 if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
16079 && TREE_CODE (tparm) != TYPE_DECL)
16080 || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
16081 && TREE_CODE (tparm) != TEMPLATE_DECL))
16082 gcc_unreachable ();
16083
16084 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
16085 {
16086 /* ARG must be constructed from a template class or a template
16087 template parameter. */
16088 if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
16089 && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
16090 return unify_template_deduction_failure (explain_p, parm, arg);
16091
16092 {
16093 tree parmvec = TYPE_TI_ARGS (parm);
16094 tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
16095 tree full_argvec = add_to_template_args (targs, argvec);
16096 tree parm_parms
16097 = DECL_INNERMOST_TEMPLATE_PARMS
16098 (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
16099 int i, len;
16100 int parm_variadic_p = 0;
16101
16102 /* The resolution to DR150 makes clear that default
16103 arguments for an N-argument may not be used to bind T
16104 to a template template parameter with fewer than N
16105 parameters. It is not safe to permit the binding of
16106 default arguments as an extension, as that may change
16107 the meaning of a conforming program. Consider:
16108
16109 struct Dense { static const unsigned int dim = 1; };
16110
16111 template <template <typename> class View,
16112 typename Block>
16113 void operator+(float, View<Block> const&);
16114
16115 template <typename Block,
16116 unsigned int Dim = Block::dim>
16117 struct Lvalue_proxy { operator float() const; };
16118
16119 void
16120 test_1d (void) {
16121 Lvalue_proxy<Dense> p;
16122 float b;
16123 b + p;
16124 }
16125
16126 Here, if Lvalue_proxy is permitted to bind to View, then
16127 the global operator+ will be used; if they are not, the
16128 Lvalue_proxy will be converted to float. */
16129 if (coerce_template_parms (parm_parms,
16130 full_argvec,
16131 TYPE_TI_TEMPLATE (parm),
16132 (explain_p
16133 ? tf_warning_or_error
16134 : tf_none),
16135 /*require_all_args=*/true,
16136 /*use_default_args=*/false)
16137 == error_mark_node)
16138 return 1;
16139
16140 /* Deduce arguments T, i from TT<T> or TT<i>.
16141 We check each element of PARMVEC and ARGVEC individually
16142 rather than the whole TREE_VEC since they can have
16143 different number of elements. */
16144
16145 parmvec = expand_template_argument_pack (parmvec);
16146 argvec = expand_template_argument_pack (argvec);
16147
16148 len = TREE_VEC_LENGTH (parmvec);
16149
16150 /* Check if the parameters end in a pack, making them
16151 variadic. */
16152 if (len > 0
16153 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
16154 parm_variadic_p = 1;
16155
16156 if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
16157 return unify_too_few_arguments (explain_p,
16158 TREE_VEC_LENGTH (argvec), len);
16159
16160 for (i = 0; i < len - parm_variadic_p; ++i)
16161 {
16162 RECUR_AND_CHECK_FAILURE (tparms, targs,
16163 TREE_VEC_ELT (parmvec, i),
16164 TREE_VEC_ELT (argvec, i),
16165 UNIFY_ALLOW_NONE, explain_p);
16166 }
16167
16168 if (parm_variadic_p
16169 && unify_pack_expansion (tparms, targs,
16170 parmvec, argvec,
16171 DEDUCE_EXACT,
16172 /*subr=*/true, explain_p))
16173 return 1;
16174 }
16175 arg = TYPE_TI_TEMPLATE (arg);
16176
16177 /* Fall through to deduce template name. */
16178 }
16179
16180 if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
16181 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
16182 {
16183 /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>. */
16184
16185 /* Simple cases: Value already set, does match or doesn't. */
16186 if (targ != NULL_TREE && template_args_equal (targ, arg))
16187 return unify_success (explain_p);
16188 else if (targ)
16189 return unify_inconsistency (explain_p, parm, targ, arg);
16190 }
16191 else
16192 {
16193 /* If PARM is `const T' and ARG is only `int', we don't have
16194 a match unless we are allowing additional qualification.
16195 If ARG is `const int' and PARM is just `T' that's OK;
16196 that binds `const int' to `T'. */
16197 if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
16198 arg, parm))
16199 return unify_cv_qual_mismatch (explain_p, parm, arg);
16200
16201 /* Consider the case where ARG is `const volatile int' and
16202 PARM is `const T'. Then, T should be `volatile int'. */
16203 arg = cp_build_qualified_type_real
16204 (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
16205 if (arg == error_mark_node)
16206 return unify_invalid (explain_p);
16207
16208 /* Simple cases: Value already set, does match or doesn't. */
16209 if (targ != NULL_TREE && same_type_p (targ, arg))
16210 return unify_success (explain_p);
16211 else if (targ)
16212 return unify_inconsistency (explain_p, parm, targ, arg);
16213
16214 /* Make sure that ARG is not a variable-sized array. (Note
16215 that were talking about variable-sized arrays (like
16216 `int[n]'), rather than arrays of unknown size (like
16217 `int[]').) We'll get very confused by such a type since
16218 the bound of the array is not constant, and therefore
16219 not mangleable. Besides, such types are not allowed in
16220 ISO C++, so we can do as we please here. We do allow
16221 them for 'auto' deduction, since that isn't ABI-exposed. */
16222 if (!is_auto (parm) && variably_modified_type_p (arg, NULL_TREE))
16223 return unify_vla_arg (explain_p, arg);
16224
16225 /* Strip typedefs as in convert_template_argument. */
16226 arg = canonicalize_type_argument (arg, tf_none);
16227 }
16228
16229 /* If ARG is a parameter pack or an expansion, we cannot unify
16230 against it unless PARM is also a parameter pack. */
16231 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
16232 && !template_parameter_pack_p (parm))
16233 return unify_parameter_pack_mismatch (explain_p, parm, arg);
16234
16235 /* If the argument deduction results is a METHOD_TYPE,
16236 then there is a problem.
16237 METHOD_TYPE doesn't map to any real C++ type the result of
16238 the deduction can not be of that type. */
16239 if (TREE_CODE (arg) == METHOD_TYPE)
16240 return unify_method_type_error (explain_p, arg);
16241
16242 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
16243 return unify_success (explain_p);
16244
16245 case TEMPLATE_PARM_INDEX:
16246 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
16247 if (tparm == error_mark_node)
16248 return unify_invalid (explain_p);
16249
16250 if (TEMPLATE_PARM_LEVEL (parm)
16251 != template_decl_level (tparm))
16252 {
16253 /* The PARM is not one we're trying to unify. Just check
16254 to see if it matches ARG. */
16255 int result = !(TREE_CODE (arg) == TREE_CODE (parm)
16256 && cp_tree_equal (parm, arg));
16257 if (result)
16258 unify_expression_unequal (explain_p, parm, arg);
16259 return result;
16260 }
16261
16262 idx = TEMPLATE_PARM_IDX (parm);
16263 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
16264
16265 if (targ)
16266 {
16267 int x = !cp_tree_equal (targ, arg);
16268 if (x)
16269 unify_inconsistency (explain_p, parm, targ, arg);
16270 return x;
16271 }
16272
16273 /* [temp.deduct.type] If, in the declaration of a function template
16274 with a non-type template-parameter, the non-type
16275 template-parameter is used in an expression in the function
16276 parameter-list and, if the corresponding template-argument is
16277 deduced, the template-argument type shall match the type of the
16278 template-parameter exactly, except that a template-argument
16279 deduced from an array bound may be of any integral type.
16280 The non-type parameter might use already deduced type parameters. */
16281 tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
16282 if (!TREE_TYPE (arg))
16283 /* Template-parameter dependent expression. Just accept it for now.
16284 It will later be processed in convert_template_argument. */
16285 ;
16286 else if (same_type_p (TREE_TYPE (arg), tparm))
16287 /* OK */;
16288 else if ((strict & UNIFY_ALLOW_INTEGER)
16289 && (TREE_CODE (tparm) == INTEGER_TYPE
16290 || TREE_CODE (tparm) == BOOLEAN_TYPE))
16291 /* Convert the ARG to the type of PARM; the deduced non-type
16292 template argument must exactly match the types of the
16293 corresponding parameter. */
16294 arg = fold (build_nop (tparm, arg));
16295 else if (uses_template_parms (tparm))
16296 /* We haven't deduced the type of this parameter yet. Try again
16297 later. */
16298 return unify_success (explain_p);
16299 else
16300 return unify_type_mismatch (explain_p, tparm, arg);
16301
16302 /* If ARG is a parameter pack or an expansion, we cannot unify
16303 against it unless PARM is also a parameter pack. */
16304 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
16305 && !TEMPLATE_PARM_PARAMETER_PACK (parm))
16306 return unify_parameter_pack_mismatch (explain_p, parm, arg);
16307
16308 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
16309 return unify_success (explain_p);
16310
16311 case PTRMEM_CST:
16312 {
16313 /* A pointer-to-member constant can be unified only with
16314 another constant. */
16315 if (TREE_CODE (arg) != PTRMEM_CST)
16316 return unify_ptrmem_cst_mismatch (explain_p, parm, arg);
16317
16318 /* Just unify the class member. It would be useless (and possibly
16319 wrong, depending on the strict flags) to unify also
16320 PTRMEM_CST_CLASS, because we want to be sure that both parm and
16321 arg refer to the same variable, even if through different
16322 classes. For instance:
16323
16324 struct A { int x; };
16325 struct B : A { };
16326
16327 Unification of &A::x and &B::x must succeed. */
16328 return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
16329 PTRMEM_CST_MEMBER (arg), strict, explain_p);
16330 }
16331
16332 case POINTER_TYPE:
16333 {
16334 if (TREE_CODE (arg) != POINTER_TYPE)
16335 return unify_type_mismatch (explain_p, parm, arg);
16336
16337 /* [temp.deduct.call]
16338
16339 A can be another pointer or pointer to member type that can
16340 be converted to the deduced A via a qualification
16341 conversion (_conv.qual_).
16342
16343 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
16344 This will allow for additional cv-qualification of the
16345 pointed-to types if appropriate. */
16346
16347 if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
16348 /* The derived-to-base conversion only persists through one
16349 level of pointers. */
16350 strict |= (strict_in & UNIFY_ALLOW_DERIVED);
16351
16352 return unify (tparms, targs, TREE_TYPE (parm),
16353 TREE_TYPE (arg), strict, explain_p);
16354 }
16355
16356 case REFERENCE_TYPE:
16357 if (TREE_CODE (arg) != REFERENCE_TYPE)
16358 return unify_type_mismatch (explain_p, parm, arg);
16359 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16360 strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
16361
16362 case ARRAY_TYPE:
16363 if (TREE_CODE (arg) != ARRAY_TYPE)
16364 return unify_type_mismatch (explain_p, parm, arg);
16365 if ((TYPE_DOMAIN (parm) == NULL_TREE)
16366 != (TYPE_DOMAIN (arg) == NULL_TREE))
16367 return unify_type_mismatch (explain_p, parm, arg);
16368 if (TYPE_DOMAIN (parm) != NULL_TREE)
16369 {
16370 tree parm_max;
16371 tree arg_max;
16372 bool parm_cst;
16373 bool arg_cst;
16374
16375 /* Our representation of array types uses "N - 1" as the
16376 TYPE_MAX_VALUE for an array with "N" elements, if "N" is
16377 not an integer constant. We cannot unify arbitrarily
16378 complex expressions, so we eliminate the MINUS_EXPRs
16379 here. */
16380 parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
16381 parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
16382 if (!parm_cst)
16383 {
16384 gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
16385 parm_max = TREE_OPERAND (parm_max, 0);
16386 }
16387 arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
16388 arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
16389 if (!arg_cst)
16390 {
16391 /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
16392 trying to unify the type of a variable with the type
16393 of a template parameter. For example:
16394
16395 template <unsigned int N>
16396 void f (char (&) [N]);
16397 int g();
16398 void h(int i) {
16399 char a[g(i)];
16400 f(a);
16401 }
16402
16403 Here, the type of the ARG will be "int [g(i)]", and
16404 may be a SAVE_EXPR, etc. */
16405 if (TREE_CODE (arg_max) != MINUS_EXPR)
16406 return unify_vla_arg (explain_p, arg);
16407 arg_max = TREE_OPERAND (arg_max, 0);
16408 }
16409
16410 /* If only one of the bounds used a MINUS_EXPR, compensate
16411 by adding one to the other bound. */
16412 if (parm_cst && !arg_cst)
16413 parm_max = fold_build2_loc (input_location, PLUS_EXPR,
16414 integer_type_node,
16415 parm_max,
16416 integer_one_node);
16417 else if (arg_cst && !parm_cst)
16418 arg_max = fold_build2_loc (input_location, PLUS_EXPR,
16419 integer_type_node,
16420 arg_max,
16421 integer_one_node);
16422
16423 RECUR_AND_CHECK_FAILURE (tparms, targs, parm_max, arg_max,
16424 UNIFY_ALLOW_INTEGER, explain_p);
16425 }
16426 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16427 strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
16428
16429 case REAL_TYPE:
16430 case COMPLEX_TYPE:
16431 case VECTOR_TYPE:
16432 case INTEGER_TYPE:
16433 case BOOLEAN_TYPE:
16434 case ENUMERAL_TYPE:
16435 case VOID_TYPE:
16436 if (TREE_CODE (arg) != TREE_CODE (parm))
16437 return unify_type_mismatch (explain_p, parm, arg);
16438
16439 /* We have already checked cv-qualification at the top of the
16440 function. */
16441 if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
16442 return unify_type_mismatch (explain_p, parm, arg);
16443
16444 /* As far as unification is concerned, this wins. Later checks
16445 will invalidate it if necessary. */
16446 return unify_success (explain_p);
16447
16448 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
16449 /* Type INTEGER_CST can come from ordinary constant template args. */
16450 case INTEGER_CST:
16451 while (TREE_CODE (arg) == NOP_EXPR)
16452 arg = TREE_OPERAND (arg, 0);
16453
16454 if (TREE_CODE (arg) != INTEGER_CST)
16455 return unify_template_argument_mismatch (explain_p, parm, arg);
16456 return (tree_int_cst_equal (parm, arg)
16457 ? unify_success (explain_p)
16458 : unify_template_argument_mismatch (explain_p, parm, arg));
16459
16460 case TREE_VEC:
16461 {
16462 int i, len, argslen;
16463 int parm_variadic_p = 0;
16464
16465 if (TREE_CODE (arg) != TREE_VEC)
16466 return unify_template_argument_mismatch (explain_p, parm, arg);
16467
16468 len = TREE_VEC_LENGTH (parm);
16469 argslen = TREE_VEC_LENGTH (arg);
16470
16471 /* Check for pack expansions in the parameters. */
16472 for (i = 0; i < len; ++i)
16473 {
16474 if (PACK_EXPANSION_P (TREE_VEC_ELT (parm, i)))
16475 {
16476 if (i == len - 1)
16477 /* We can unify against something with a trailing
16478 parameter pack. */
16479 parm_variadic_p = 1;
16480 else
16481 /* [temp.deduct.type]/9: If the template argument list of
16482 P contains a pack expansion that is not the last
16483 template argument, the entire template argument list
16484 is a non-deduced context. */
16485 return unify_success (explain_p);
16486 }
16487 }
16488
16489 /* If we don't have enough arguments to satisfy the parameters
16490 (not counting the pack expression at the end), or we have
16491 too many arguments for a parameter list that doesn't end in
16492 a pack expression, we can't unify. */
16493 if (parm_variadic_p
16494 ? argslen < len - parm_variadic_p
16495 : argslen != len)
16496 return unify_arity (explain_p, TREE_VEC_LENGTH (arg), len);
16497
16498 /* Unify all of the parameters that precede the (optional)
16499 pack expression. */
16500 for (i = 0; i < len - parm_variadic_p; ++i)
16501 {
16502 RECUR_AND_CHECK_FAILURE (tparms, targs,
16503 TREE_VEC_ELT (parm, i),
16504 TREE_VEC_ELT (arg, i),
16505 UNIFY_ALLOW_NONE, explain_p);
16506 }
16507 if (parm_variadic_p)
16508 return unify_pack_expansion (tparms, targs, parm, arg,
16509 DEDUCE_EXACT,
16510 /*subr=*/true, explain_p);
16511 return unify_success (explain_p);
16512 }
16513
16514 case RECORD_TYPE:
16515 case UNION_TYPE:
16516 if (TREE_CODE (arg) != TREE_CODE (parm))
16517 return unify_type_mismatch (explain_p, parm, arg);
16518
16519 if (TYPE_PTRMEMFUNC_P (parm))
16520 {
16521 if (!TYPE_PTRMEMFUNC_P (arg))
16522 return unify_type_mismatch (explain_p, parm, arg);
16523
16524 return unify (tparms, targs,
16525 TYPE_PTRMEMFUNC_FN_TYPE (parm),
16526 TYPE_PTRMEMFUNC_FN_TYPE (arg),
16527 strict, explain_p);
16528 }
16529
16530 if (CLASSTYPE_TEMPLATE_INFO (parm))
16531 {
16532 tree t = NULL_TREE;
16533
16534 if (strict_in & UNIFY_ALLOW_DERIVED)
16535 {
16536 /* First, we try to unify the PARM and ARG directly. */
16537 t = try_class_unification (tparms, targs,
16538 parm, arg, explain_p);
16539
16540 if (!t)
16541 {
16542 /* Fallback to the special case allowed in
16543 [temp.deduct.call]:
16544
16545 If P is a class, and P has the form
16546 template-id, then A can be a derived class of
16547 the deduced A. Likewise, if P is a pointer to
16548 a class of the form template-id, A can be a
16549 pointer to a derived class pointed to by the
16550 deduced A. */
16551 enum template_base_result r;
16552 r = get_template_base (tparms, targs, parm, arg,
16553 explain_p, &t);
16554
16555 if (!t)
16556 return unify_no_common_base (explain_p, r, parm, arg);
16557 }
16558 }
16559 else if (CLASSTYPE_TEMPLATE_INFO (arg)
16560 && (CLASSTYPE_TI_TEMPLATE (parm)
16561 == CLASSTYPE_TI_TEMPLATE (arg)))
16562 /* Perhaps PARM is something like S<U> and ARG is S<int>.
16563 Then, we should unify `int' and `U'. */
16564 t = arg;
16565 else
16566 /* There's no chance of unification succeeding. */
16567 return unify_type_mismatch (explain_p, parm, arg);
16568
16569 return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
16570 CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE, explain_p);
16571 }
16572 else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
16573 return unify_type_mismatch (explain_p, parm, arg);
16574 return unify_success (explain_p);
16575
16576 case METHOD_TYPE:
16577 case FUNCTION_TYPE:
16578 {
16579 unsigned int nargs;
16580 tree *args;
16581 tree a;
16582 unsigned int i;
16583
16584 if (TREE_CODE (arg) != TREE_CODE (parm))
16585 return unify_type_mismatch (explain_p, parm, arg);
16586
16587 /* CV qualifications for methods can never be deduced, they must
16588 match exactly. We need to check them explicitly here,
16589 because type_unification_real treats them as any other
16590 cv-qualified parameter. */
16591 if (TREE_CODE (parm) == METHOD_TYPE
16592 && (!check_cv_quals_for_unify
16593 (UNIFY_ALLOW_NONE,
16594 class_of_this_parm (arg),
16595 class_of_this_parm (parm))))
16596 return unify_cv_qual_mismatch (explain_p, parm, arg);
16597
16598 RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm),
16599 TREE_TYPE (arg), UNIFY_ALLOW_NONE, explain_p);
16600
16601 nargs = list_length (TYPE_ARG_TYPES (arg));
16602 args = XALLOCAVEC (tree, nargs);
16603 for (a = TYPE_ARG_TYPES (arg), i = 0;
16604 a != NULL_TREE && a != void_list_node;
16605 a = TREE_CHAIN (a), ++i)
16606 args[i] = TREE_VALUE (a);
16607 nargs = i;
16608
16609 return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
16610 args, nargs, 1, DEDUCE_EXACT,
16611 LOOKUP_NORMAL, explain_p);
16612 }
16613
16614 case OFFSET_TYPE:
16615 /* Unify a pointer to member with a pointer to member function, which
16616 deduces the type of the member as a function type. */
16617 if (TYPE_PTRMEMFUNC_P (arg))
16618 {
16619 tree method_type;
16620 tree fntype;
16621
16622 /* Check top-level cv qualifiers */
16623 if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
16624 return unify_cv_qual_mismatch (explain_p, parm, arg);
16625
16626 RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
16627 TYPE_PTRMEMFUNC_OBJECT_TYPE (arg),
16628 UNIFY_ALLOW_NONE, explain_p);
16629
16630 /* Determine the type of the function we are unifying against. */
16631 method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
16632 fntype =
16633 build_function_type (TREE_TYPE (method_type),
16634 TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
16635
16636 /* Extract the cv-qualifiers of the member function from the
16637 implicit object parameter and place them on the function
16638 type to be restored later. */
16639 fntype = apply_memfn_quals (fntype, type_memfn_quals (method_type));
16640 return unify (tparms, targs, TREE_TYPE (parm), fntype, strict, explain_p);
16641 }
16642
16643 if (TREE_CODE (arg) != OFFSET_TYPE)
16644 return unify_type_mismatch (explain_p, parm, arg);
16645 RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
16646 TYPE_OFFSET_BASETYPE (arg),
16647 UNIFY_ALLOW_NONE, explain_p);
16648 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16649 strict, explain_p);
16650
16651 case CONST_DECL:
16652 if (DECL_TEMPLATE_PARM_P (parm))
16653 return unify (tparms, targs, DECL_INITIAL (parm), arg, strict, explain_p);
16654 if (arg != integral_constant_value (parm))
16655 return unify_template_argument_mismatch (explain_p, parm, arg);
16656 return unify_success (explain_p);
16657
16658 case FIELD_DECL:
16659 case TEMPLATE_DECL:
16660 /* Matched cases are handled by the ARG == PARM test above. */
16661 return unify_template_argument_mismatch (explain_p, parm, arg);
16662
16663 case VAR_DECL:
16664 /* A non-type template parameter that is a variable should be a
16665 an integral constant, in which case, it whould have been
16666 folded into its (constant) value. So we should not be getting
16667 a variable here. */
16668 gcc_unreachable ();
16669
16670 case TYPE_ARGUMENT_PACK:
16671 case NONTYPE_ARGUMENT_PACK:
16672 return unify (tparms, targs, ARGUMENT_PACK_ARGS (parm),
16673 ARGUMENT_PACK_ARGS (arg), strict, explain_p);
16674
16675 case TYPEOF_TYPE:
16676 case DECLTYPE_TYPE:
16677 case UNDERLYING_TYPE:
16678 /* Cannot deduce anything from TYPEOF_TYPE, DECLTYPE_TYPE,
16679 or UNDERLYING_TYPE nodes. */
16680 return unify_success (explain_p);
16681
16682 case ERROR_MARK:
16683 /* Unification fails if we hit an error node. */
16684 return unify_invalid (explain_p);
16685
16686 default:
16687 /* An unresolved overload is a nondeduced context. */
16688 if (type_unknown_p (parm))
16689 return unify_success (explain_p);
16690 gcc_assert (EXPR_P (parm));
16691
16692 /* We must be looking at an expression. This can happen with
16693 something like:
16694
16695 template <int I>
16696 void foo(S<I>, S<I + 2>);
16697
16698 This is a "nondeduced context":
16699
16700 [deduct.type]
16701
16702 The nondeduced contexts are:
16703
16704 --A type that is a template-id in which one or more of
16705 the template-arguments is an expression that references
16706 a template-parameter.
16707
16708 In these cases, we assume deduction succeeded, but don't
16709 actually infer any unifications. */
16710
16711 if (!uses_template_parms (parm)
16712 && !template_args_equal (parm, arg))
16713 return unify_expression_unequal (explain_p, parm, arg);
16714 else
16715 return unify_success (explain_p);
16716 }
16717 }
16718 #undef RECUR_AND_CHECK_FAILURE
16719 \f
16720 /* Note that DECL can be defined in this translation unit, if
16721 required. */
16722
16723 static void
16724 mark_definable (tree decl)
16725 {
16726 tree clone;
16727 DECL_NOT_REALLY_EXTERN (decl) = 1;
16728 FOR_EACH_CLONE (clone, decl)
16729 DECL_NOT_REALLY_EXTERN (clone) = 1;
16730 }
16731
16732 /* Called if RESULT is explicitly instantiated, or is a member of an
16733 explicitly instantiated class. */
16734
16735 void
16736 mark_decl_instantiated (tree result, int extern_p)
16737 {
16738 SET_DECL_EXPLICIT_INSTANTIATION (result);
16739
16740 /* If this entity has already been written out, it's too late to
16741 make any modifications. */
16742 if (TREE_ASM_WRITTEN (result))
16743 return;
16744
16745 if (TREE_CODE (result) != FUNCTION_DECL)
16746 /* The TREE_PUBLIC flag for function declarations will have been
16747 set correctly by tsubst. */
16748 TREE_PUBLIC (result) = 1;
16749
16750 /* This might have been set by an earlier implicit instantiation. */
16751 DECL_COMDAT (result) = 0;
16752
16753 if (extern_p)
16754 DECL_NOT_REALLY_EXTERN (result) = 0;
16755 else
16756 {
16757 mark_definable (result);
16758 /* Always make artificials weak. */
16759 if (DECL_ARTIFICIAL (result) && flag_weak)
16760 comdat_linkage (result);
16761 /* For WIN32 we also want to put explicit instantiations in
16762 linkonce sections. */
16763 else if (TREE_PUBLIC (result))
16764 maybe_make_one_only (result);
16765 }
16766
16767 /* If EXTERN_P, then this function will not be emitted -- unless
16768 followed by an explicit instantiation, at which point its linkage
16769 will be adjusted. If !EXTERN_P, then this function will be
16770 emitted here. In neither circumstance do we want
16771 import_export_decl to adjust the linkage. */
16772 DECL_INTERFACE_KNOWN (result) = 1;
16773 }
16774
16775 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
16776 important template arguments. If any are missing, we check whether
16777 they're important by using error_mark_node for substituting into any
16778 args that were used for partial ordering (the ones between ARGS and END)
16779 and seeing if it bubbles up. */
16780
16781 static bool
16782 check_undeduced_parms (tree targs, tree args, tree end)
16783 {
16784 bool found = false;
16785 int i;
16786 for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
16787 if (TREE_VEC_ELT (targs, i) == NULL_TREE)
16788 {
16789 found = true;
16790 TREE_VEC_ELT (targs, i) = error_mark_node;
16791 }
16792 if (found)
16793 {
16794 for (; args != end; args = TREE_CHAIN (args))
16795 {
16796 tree substed = tsubst (TREE_VALUE (args), targs, tf_none, NULL_TREE);
16797 if (substed == error_mark_node)
16798 return true;
16799 }
16800 }
16801 return false;
16802 }
16803
16804 /* Given two function templates PAT1 and PAT2, return:
16805
16806 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
16807 -1 if PAT2 is more specialized than PAT1.
16808 0 if neither is more specialized.
16809
16810 LEN indicates the number of parameters we should consider
16811 (defaulted parameters should not be considered).
16812
16813 The 1998 std underspecified function template partial ordering, and
16814 DR214 addresses the issue. We take pairs of arguments, one from
16815 each of the templates, and deduce them against each other. One of
16816 the templates will be more specialized if all the *other*
16817 template's arguments deduce against its arguments and at least one
16818 of its arguments *does* *not* deduce against the other template's
16819 corresponding argument. Deduction is done as for class templates.
16820 The arguments used in deduction have reference and top level cv
16821 qualifiers removed. Iff both arguments were originally reference
16822 types *and* deduction succeeds in both directions, the template
16823 with the more cv-qualified argument wins for that pairing (if
16824 neither is more cv-qualified, they both are equal). Unlike regular
16825 deduction, after all the arguments have been deduced in this way,
16826 we do *not* verify the deduced template argument values can be
16827 substituted into non-deduced contexts.
16828
16829 The logic can be a bit confusing here, because we look at deduce1 and
16830 targs1 to see if pat2 is at least as specialized, and vice versa; if we
16831 can find template arguments for pat1 to make arg1 look like arg2, that
16832 means that arg2 is at least as specialized as arg1. */
16833
16834 int
16835 more_specialized_fn (tree pat1, tree pat2, int len)
16836 {
16837 tree decl1 = DECL_TEMPLATE_RESULT (pat1);
16838 tree decl2 = DECL_TEMPLATE_RESULT (pat2);
16839 tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
16840 tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
16841 tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
16842 tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
16843 tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
16844 tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
16845 tree origs1, origs2;
16846 bool lose1 = false;
16847 bool lose2 = false;
16848
16849 /* Remove the this parameter from non-static member functions. If
16850 one is a non-static member function and the other is not a static
16851 member function, remove the first parameter from that function
16852 also. This situation occurs for operator functions where we
16853 locate both a member function (with this pointer) and non-member
16854 operator (with explicit first operand). */
16855 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
16856 {
16857 len--; /* LEN is the number of significant arguments for DECL1 */
16858 args1 = TREE_CHAIN (args1);
16859 if (!DECL_STATIC_FUNCTION_P (decl2))
16860 args2 = TREE_CHAIN (args2);
16861 }
16862 else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
16863 {
16864 args2 = TREE_CHAIN (args2);
16865 if (!DECL_STATIC_FUNCTION_P (decl1))
16866 {
16867 len--;
16868 args1 = TREE_CHAIN (args1);
16869 }
16870 }
16871
16872 /* If only one is a conversion operator, they are unordered. */
16873 if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
16874 return 0;
16875
16876 /* Consider the return type for a conversion function */
16877 if (DECL_CONV_FN_P (decl1))
16878 {
16879 args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
16880 args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
16881 len++;
16882 }
16883
16884 processing_template_decl++;
16885
16886 origs1 = args1;
16887 origs2 = args2;
16888
16889 while (len--
16890 /* Stop when an ellipsis is seen. */
16891 && args1 != NULL_TREE && args2 != NULL_TREE)
16892 {
16893 tree arg1 = TREE_VALUE (args1);
16894 tree arg2 = TREE_VALUE (args2);
16895 int deduce1, deduce2;
16896 int quals1 = -1;
16897 int quals2 = -1;
16898
16899 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
16900 && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
16901 {
16902 /* When both arguments are pack expansions, we need only
16903 unify the patterns themselves. */
16904 arg1 = PACK_EXPANSION_PATTERN (arg1);
16905 arg2 = PACK_EXPANSION_PATTERN (arg2);
16906
16907 /* This is the last comparison we need to do. */
16908 len = 0;
16909 }
16910
16911 if (TREE_CODE (arg1) == REFERENCE_TYPE)
16912 {
16913 arg1 = TREE_TYPE (arg1);
16914 quals1 = cp_type_quals (arg1);
16915 }
16916
16917 if (TREE_CODE (arg2) == REFERENCE_TYPE)
16918 {
16919 arg2 = TREE_TYPE (arg2);
16920 quals2 = cp_type_quals (arg2);
16921 }
16922
16923 if ((quals1 < 0) != (quals2 < 0))
16924 {
16925 /* Only of the args is a reference, see if we should apply
16926 array/function pointer decay to it. This is not part of
16927 DR214, but is, IMHO, consistent with the deduction rules
16928 for the function call itself, and with our earlier
16929 implementation of the underspecified partial ordering
16930 rules. (nathan). */
16931 if (quals1 >= 0)
16932 {
16933 switch (TREE_CODE (arg1))
16934 {
16935 case ARRAY_TYPE:
16936 arg1 = TREE_TYPE (arg1);
16937 /* FALLTHROUGH. */
16938 case FUNCTION_TYPE:
16939 arg1 = build_pointer_type (arg1);
16940 break;
16941
16942 default:
16943 break;
16944 }
16945 }
16946 else
16947 {
16948 switch (TREE_CODE (arg2))
16949 {
16950 case ARRAY_TYPE:
16951 arg2 = TREE_TYPE (arg2);
16952 /* FALLTHROUGH. */
16953 case FUNCTION_TYPE:
16954 arg2 = build_pointer_type (arg2);
16955 break;
16956
16957 default:
16958 break;
16959 }
16960 }
16961 }
16962
16963 arg1 = TYPE_MAIN_VARIANT (arg1);
16964 arg2 = TYPE_MAIN_VARIANT (arg2);
16965
16966 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
16967 {
16968 int i, len2 = list_length (args2);
16969 tree parmvec = make_tree_vec (1);
16970 tree argvec = make_tree_vec (len2);
16971 tree ta = args2;
16972
16973 /* Setup the parameter vector, which contains only ARG1. */
16974 TREE_VEC_ELT (parmvec, 0) = arg1;
16975
16976 /* Setup the argument vector, which contains the remaining
16977 arguments. */
16978 for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
16979 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
16980
16981 deduce1 = (unify_pack_expansion (tparms1, targs1, parmvec,
16982 argvec, DEDUCE_EXACT,
16983 /*subr=*/true, /*explain_p=*/false)
16984 == 0);
16985
16986 /* We cannot deduce in the other direction, because ARG1 is
16987 a pack expansion but ARG2 is not. */
16988 deduce2 = 0;
16989 }
16990 else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
16991 {
16992 int i, len1 = list_length (args1);
16993 tree parmvec = make_tree_vec (1);
16994 tree argvec = make_tree_vec (len1);
16995 tree ta = args1;
16996
16997 /* Setup the parameter vector, which contains only ARG1. */
16998 TREE_VEC_ELT (parmvec, 0) = arg2;
16999
17000 /* Setup the argument vector, which contains the remaining
17001 arguments. */
17002 for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
17003 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
17004
17005 deduce2 = (unify_pack_expansion (tparms2, targs2, parmvec,
17006 argvec, DEDUCE_EXACT,
17007 /*subr=*/true, /*explain_p=*/false)
17008 == 0);
17009
17010 /* We cannot deduce in the other direction, because ARG2 is
17011 a pack expansion but ARG1 is not.*/
17012 deduce1 = 0;
17013 }
17014
17015 else
17016 {
17017 /* The normal case, where neither argument is a pack
17018 expansion. */
17019 deduce1 = (unify (tparms1, targs1, arg1, arg2,
17020 UNIFY_ALLOW_NONE, /*explain_p=*/false)
17021 == 0);
17022 deduce2 = (unify (tparms2, targs2, arg2, arg1,
17023 UNIFY_ALLOW_NONE, /*explain_p=*/false)
17024 == 0);
17025 }
17026
17027 /* If we couldn't deduce arguments for tparms1 to make arg1 match
17028 arg2, then arg2 is not as specialized as arg1. */
17029 if (!deduce1)
17030 lose2 = true;
17031 if (!deduce2)
17032 lose1 = true;
17033
17034 /* "If, for a given type, deduction succeeds in both directions
17035 (i.e., the types are identical after the transformations above)
17036 and if the type from the argument template is more cv-qualified
17037 than the type from the parameter template (as described above)
17038 that type is considered to be more specialized than the other. If
17039 neither type is more cv-qualified than the other then neither type
17040 is more specialized than the other." */
17041
17042 if (deduce1 && deduce2
17043 && quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
17044 {
17045 if ((quals1 & quals2) == quals2)
17046 lose2 = true;
17047 if ((quals1 & quals2) == quals1)
17048 lose1 = true;
17049 }
17050
17051 if (lose1 && lose2)
17052 /* We've failed to deduce something in either direction.
17053 These must be unordered. */
17054 break;
17055
17056 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
17057 || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
17058 /* We have already processed all of the arguments in our
17059 handing of the pack expansion type. */
17060 len = 0;
17061
17062 args1 = TREE_CHAIN (args1);
17063 args2 = TREE_CHAIN (args2);
17064 }
17065
17066 /* "In most cases, all template parameters must have values in order for
17067 deduction to succeed, but for partial ordering purposes a template
17068 parameter may remain without a value provided it is not used in the
17069 types being used for partial ordering."
17070
17071 Thus, if we are missing any of the targs1 we need to substitute into
17072 origs1, then pat2 is not as specialized as pat1. This can happen when
17073 there is a nondeduced context. */
17074 if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
17075 lose2 = true;
17076 if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
17077 lose1 = true;
17078
17079 processing_template_decl--;
17080
17081 /* All things being equal, if the next argument is a pack expansion
17082 for one function but not for the other, prefer the
17083 non-variadic function. FIXME this is bogus; see c++/41958. */
17084 if (lose1 == lose2
17085 && args1 && TREE_VALUE (args1)
17086 && args2 && TREE_VALUE (args2))
17087 {
17088 lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
17089 lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
17090 }
17091
17092 if (lose1 == lose2)
17093 return 0;
17094 else if (!lose1)
17095 return 1;
17096 else
17097 return -1;
17098 }
17099
17100 /* Determine which of two partial specializations is more specialized.
17101
17102 PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
17103 to the first partial specialization. The TREE_VALUE is the
17104 innermost set of template parameters for the partial
17105 specialization. PAT2 is similar, but for the second template.
17106
17107 Return 1 if the first partial specialization is more specialized;
17108 -1 if the second is more specialized; 0 if neither is more
17109 specialized.
17110
17111 See [temp.class.order] for information about determining which of
17112 two templates is more specialized. */
17113
17114 static int
17115 more_specialized_class (tree pat1, tree pat2)
17116 {
17117 tree targs;
17118 tree tmpl1, tmpl2;
17119 int winner = 0;
17120 bool any_deductions = false;
17121
17122 tmpl1 = TREE_TYPE (pat1);
17123 tmpl2 = TREE_TYPE (pat2);
17124
17125 /* Just like what happens for functions, if we are ordering between
17126 different class template specializations, we may encounter dependent
17127 types in the arguments, and we need our dependency check functions
17128 to behave correctly. */
17129 ++processing_template_decl;
17130 targs = get_class_bindings (TREE_VALUE (pat1),
17131 CLASSTYPE_TI_ARGS (tmpl1),
17132 CLASSTYPE_TI_ARGS (tmpl2));
17133 if (targs)
17134 {
17135 --winner;
17136 any_deductions = true;
17137 }
17138
17139 targs = get_class_bindings (TREE_VALUE (pat2),
17140 CLASSTYPE_TI_ARGS (tmpl2),
17141 CLASSTYPE_TI_ARGS (tmpl1));
17142 if (targs)
17143 {
17144 ++winner;
17145 any_deductions = true;
17146 }
17147 --processing_template_decl;
17148
17149 /* In the case of a tie where at least one of the class templates
17150 has a parameter pack at the end, the template with the most
17151 non-packed parameters wins. */
17152 if (winner == 0
17153 && any_deductions
17154 && (template_args_variadic_p (TREE_PURPOSE (pat1))
17155 || template_args_variadic_p (TREE_PURPOSE (pat2))))
17156 {
17157 tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
17158 tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
17159 int len1 = TREE_VEC_LENGTH (args1);
17160 int len2 = TREE_VEC_LENGTH (args2);
17161
17162 /* We don't count the pack expansion at the end. */
17163 if (template_args_variadic_p (TREE_PURPOSE (pat1)))
17164 --len1;
17165 if (template_args_variadic_p (TREE_PURPOSE (pat2)))
17166 --len2;
17167
17168 if (len1 > len2)
17169 return 1;
17170 else if (len1 < len2)
17171 return -1;
17172 }
17173
17174 return winner;
17175 }
17176
17177 /* Return the template arguments that will produce the function signature
17178 DECL from the function template FN, with the explicit template
17179 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is true, the return type must
17180 also match. Return NULL_TREE if no satisfactory arguments could be
17181 found. */
17182
17183 static tree
17184 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
17185 {
17186 int ntparms = DECL_NTPARMS (fn);
17187 tree targs = make_tree_vec (ntparms);
17188 tree decl_type;
17189 tree decl_arg_types;
17190 tree *args;
17191 unsigned int nargs, ix;
17192 tree arg;
17193
17194 /* Substitute the explicit template arguments into the type of DECL.
17195 The call to fn_type_unification will handle substitution into the
17196 FN. */
17197 decl_type = TREE_TYPE (decl);
17198 if (explicit_args && uses_template_parms (decl_type))
17199 {
17200 tree tmpl;
17201 tree converted_args;
17202
17203 if (DECL_TEMPLATE_INFO (decl))
17204 tmpl = DECL_TI_TEMPLATE (decl);
17205 else
17206 /* We can get here for some invalid specializations. */
17207 return NULL_TREE;
17208
17209 converted_args
17210 = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
17211 explicit_args, NULL_TREE,
17212 tf_none,
17213 /*require_all_args=*/false,
17214 /*use_default_args=*/false);
17215 if (converted_args == error_mark_node)
17216 return NULL_TREE;
17217
17218 decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
17219 if (decl_type == error_mark_node)
17220 return NULL_TREE;
17221 }
17222
17223 /* Never do unification on the 'this' parameter. */
17224 decl_arg_types = skip_artificial_parms_for (decl,
17225 TYPE_ARG_TYPES (decl_type));
17226
17227 nargs = list_length (decl_arg_types);
17228 args = XALLOCAVEC (tree, nargs);
17229 for (arg = decl_arg_types, ix = 0;
17230 arg != NULL_TREE && arg != void_list_node;
17231 arg = TREE_CHAIN (arg), ++ix)
17232 args[ix] = TREE_VALUE (arg);
17233
17234 if (fn_type_unification (fn, explicit_args, targs,
17235 args, ix,
17236 (check_rettype || DECL_CONV_FN_P (fn)
17237 ? TREE_TYPE (decl_type) : NULL_TREE),
17238 DEDUCE_EXACT, LOOKUP_NORMAL, /*explain_p=*/false))
17239 return NULL_TREE;
17240
17241 return targs;
17242 }
17243
17244 /* Return the innermost template arguments that, when applied to a
17245 template specialization whose innermost template parameters are
17246 TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
17247 ARGS.
17248
17249 For example, suppose we have:
17250
17251 template <class T, class U> struct S {};
17252 template <class T> struct S<T*, int> {};
17253
17254 Then, suppose we want to get `S<double*, int>'. The TPARMS will be
17255 {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
17256 int}. The resulting vector will be {double}, indicating that `T'
17257 is bound to `double'. */
17258
17259 static tree
17260 get_class_bindings (tree tparms, tree spec_args, tree args)
17261 {
17262 int i, ntparms = TREE_VEC_LENGTH (tparms);
17263 tree deduced_args;
17264 tree innermost_deduced_args;
17265
17266 innermost_deduced_args = make_tree_vec (ntparms);
17267 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
17268 {
17269 deduced_args = copy_node (args);
17270 SET_TMPL_ARGS_LEVEL (deduced_args,
17271 TMPL_ARGS_DEPTH (deduced_args),
17272 innermost_deduced_args);
17273 }
17274 else
17275 deduced_args = innermost_deduced_args;
17276
17277 if (unify (tparms, deduced_args,
17278 INNERMOST_TEMPLATE_ARGS (spec_args),
17279 INNERMOST_TEMPLATE_ARGS (args),
17280 UNIFY_ALLOW_NONE, /*explain_p=*/false))
17281 return NULL_TREE;
17282
17283 for (i = 0; i < ntparms; ++i)
17284 if (! TREE_VEC_ELT (innermost_deduced_args, i))
17285 return NULL_TREE;
17286
17287 /* Verify that nondeduced template arguments agree with the type
17288 obtained from argument deduction.
17289
17290 For example:
17291
17292 struct A { typedef int X; };
17293 template <class T, class U> struct C {};
17294 template <class T> struct C<T, typename T::X> {};
17295
17296 Then with the instantiation `C<A, int>', we can deduce that
17297 `T' is `A' but unify () does not check whether `typename T::X'
17298 is `int'. */
17299 spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
17300 if (spec_args == error_mark_node
17301 /* We only need to check the innermost arguments; the other
17302 arguments will always agree. */
17303 || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
17304 INNERMOST_TEMPLATE_ARGS (args)))
17305 return NULL_TREE;
17306
17307 /* Now that we have bindings for all of the template arguments,
17308 ensure that the arguments deduced for the template template
17309 parameters have compatible template parameter lists. See the use
17310 of template_template_parm_bindings_ok_p in fn_type_unification
17311 for more information. */
17312 if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
17313 return NULL_TREE;
17314
17315 return deduced_args;
17316 }
17317
17318 /* TEMPLATES is a TREE_LIST. Each TREE_VALUE is a TEMPLATE_DECL.
17319 Return the TREE_LIST node with the most specialized template, if
17320 any. If there is no most specialized template, the error_mark_node
17321 is returned.
17322
17323 Note that this function does not look at, or modify, the
17324 TREE_PURPOSE or TREE_TYPE of any of the nodes. Since the node
17325 returned is one of the elements of INSTANTIATIONS, callers may
17326 store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
17327 and retrieve it from the value returned. */
17328
17329 tree
17330 most_specialized_instantiation (tree templates)
17331 {
17332 tree fn, champ;
17333
17334 ++processing_template_decl;
17335
17336 champ = templates;
17337 for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
17338 {
17339 int fate = 0;
17340
17341 if (get_bindings (TREE_VALUE (champ),
17342 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
17343 NULL_TREE, /*check_ret=*/true))
17344 fate--;
17345
17346 if (get_bindings (TREE_VALUE (fn),
17347 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
17348 NULL_TREE, /*check_ret=*/true))
17349 fate++;
17350
17351 if (fate == -1)
17352 champ = fn;
17353 else if (!fate)
17354 {
17355 /* Equally specialized, move to next function. If there
17356 is no next function, nothing's most specialized. */
17357 fn = TREE_CHAIN (fn);
17358 champ = fn;
17359 if (!fn)
17360 break;
17361 }
17362 }
17363
17364 if (champ)
17365 /* Now verify that champ is better than everything earlier in the
17366 instantiation list. */
17367 for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
17368 if (get_bindings (TREE_VALUE (champ),
17369 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
17370 NULL_TREE, /*check_ret=*/true)
17371 || !get_bindings (TREE_VALUE (fn),
17372 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
17373 NULL_TREE, /*check_ret=*/true))
17374 {
17375 champ = NULL_TREE;
17376 break;
17377 }
17378
17379 processing_template_decl--;
17380
17381 if (!champ)
17382 return error_mark_node;
17383
17384 return champ;
17385 }
17386
17387 /* If DECL is a specialization of some template, return the most
17388 general such template. Otherwise, returns NULL_TREE.
17389
17390 For example, given:
17391
17392 template <class T> struct S { template <class U> void f(U); };
17393
17394 if TMPL is `template <class U> void S<int>::f(U)' this will return
17395 the full template. This function will not trace past partial
17396 specializations, however. For example, given in addition:
17397
17398 template <class T> struct S<T*> { template <class U> void f(U); };
17399
17400 if TMPL is `template <class U> void S<int*>::f(U)' this will return
17401 `template <class T> template <class U> S<T*>::f(U)'. */
17402
17403 tree
17404 most_general_template (tree decl)
17405 {
17406 /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
17407 an immediate specialization. */
17408 if (TREE_CODE (decl) == FUNCTION_DECL)
17409 {
17410 if (DECL_TEMPLATE_INFO (decl)) {
17411 decl = DECL_TI_TEMPLATE (decl);
17412
17413 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
17414 template friend. */
17415 if (TREE_CODE (decl) != TEMPLATE_DECL)
17416 return NULL_TREE;
17417 } else
17418 return NULL_TREE;
17419 }
17420
17421 /* Look for more and more general templates. */
17422 while (DECL_TEMPLATE_INFO (decl))
17423 {
17424 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
17425 (See cp-tree.h for details.) */
17426 if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
17427 break;
17428
17429 if (CLASS_TYPE_P (TREE_TYPE (decl))
17430 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
17431 break;
17432
17433 /* Stop if we run into an explicitly specialized class template. */
17434 if (!DECL_NAMESPACE_SCOPE_P (decl)
17435 && DECL_CONTEXT (decl)
17436 && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
17437 break;
17438
17439 decl = DECL_TI_TEMPLATE (decl);
17440 }
17441
17442 return decl;
17443 }
17444
17445 /* Return the most specialized of the class template partial
17446 specializations of TMPL which can produce TYPE, a specialization of
17447 TMPL. The value returned is actually a TREE_LIST; the TREE_TYPE is
17448 a _TYPE node corresponding to the partial specialization, while the
17449 TREE_PURPOSE is the set of template arguments that must be
17450 substituted into the TREE_TYPE in order to generate TYPE.
17451
17452 If the choice of partial specialization is ambiguous, a diagnostic
17453 is issued, and the error_mark_node is returned. If there are no
17454 partial specializations of TMPL matching TYPE, then NULL_TREE is
17455 returned. */
17456
17457 static tree
17458 most_specialized_class (tree type, tree tmpl, tsubst_flags_t complain)
17459 {
17460 tree list = NULL_TREE;
17461 tree t;
17462 tree champ;
17463 int fate;
17464 bool ambiguous_p;
17465 tree args;
17466 tree outer_args = NULL_TREE;
17467
17468 tmpl = most_general_template (tmpl);
17469 args = CLASSTYPE_TI_ARGS (type);
17470
17471 /* For determining which partial specialization to use, only the
17472 innermost args are interesting. */
17473 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
17474 {
17475 outer_args = strip_innermost_template_args (args, 1);
17476 args = INNERMOST_TEMPLATE_ARGS (args);
17477 }
17478
17479 for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
17480 {
17481 tree partial_spec_args;
17482 tree spec_args;
17483 tree parms = TREE_VALUE (t);
17484
17485 partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
17486
17487 ++processing_template_decl;
17488
17489 if (outer_args)
17490 {
17491 int i;
17492
17493 /* Discard the outer levels of args, and then substitute in the
17494 template args from the enclosing class. */
17495 partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
17496 partial_spec_args = tsubst_template_args
17497 (partial_spec_args, outer_args, tf_none, NULL_TREE);
17498
17499 /* PARMS already refers to just the innermost parms, but the
17500 template parms in partial_spec_args had their levels lowered
17501 by tsubst, so we need to do the same for the parm list. We
17502 can't just tsubst the TREE_VEC itself, as tsubst wants to
17503 treat a TREE_VEC as an argument vector. */
17504 parms = copy_node (parms);
17505 for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
17506 TREE_VEC_ELT (parms, i) =
17507 tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
17508
17509 }
17510
17511 partial_spec_args =
17512 coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
17513 add_to_template_args (outer_args,
17514 partial_spec_args),
17515 tmpl, tf_none,
17516 /*require_all_args=*/true,
17517 /*use_default_args=*/true);
17518
17519 --processing_template_decl;
17520
17521 if (partial_spec_args == error_mark_node)
17522 return error_mark_node;
17523
17524 spec_args = get_class_bindings (parms,
17525 partial_spec_args,
17526 args);
17527 if (spec_args)
17528 {
17529 if (outer_args)
17530 spec_args = add_to_template_args (outer_args, spec_args);
17531 list = tree_cons (spec_args, TREE_VALUE (t), list);
17532 TREE_TYPE (list) = TREE_TYPE (t);
17533 }
17534 }
17535
17536 if (! list)
17537 return NULL_TREE;
17538
17539 ambiguous_p = false;
17540 t = list;
17541 champ = t;
17542 t = TREE_CHAIN (t);
17543 for (; t; t = TREE_CHAIN (t))
17544 {
17545 fate = more_specialized_class (champ, t);
17546 if (fate == 1)
17547 ;
17548 else
17549 {
17550 if (fate == 0)
17551 {
17552 t = TREE_CHAIN (t);
17553 if (! t)
17554 {
17555 ambiguous_p = true;
17556 break;
17557 }
17558 }
17559 champ = t;
17560 }
17561 }
17562
17563 if (!ambiguous_p)
17564 for (t = list; t && t != champ; t = TREE_CHAIN (t))
17565 {
17566 fate = more_specialized_class (champ, t);
17567 if (fate != 1)
17568 {
17569 ambiguous_p = true;
17570 break;
17571 }
17572 }
17573
17574 if (ambiguous_p)
17575 {
17576 const char *str;
17577 char *spaces = NULL;
17578 if (!(complain & tf_error))
17579 return error_mark_node;
17580 error ("ambiguous class template instantiation for %q#T", type);
17581 str = ngettext ("candidate is:", "candidates are:", list_length (list));
17582 for (t = list; t; t = TREE_CHAIN (t))
17583 {
17584 error ("%s %+#T", spaces ? spaces : str, TREE_TYPE (t));
17585 spaces = spaces ? spaces : get_spaces (str);
17586 }
17587 free (spaces);
17588 return error_mark_node;
17589 }
17590
17591 return champ;
17592 }
17593
17594 /* Explicitly instantiate DECL. */
17595
17596 void
17597 do_decl_instantiation (tree decl, tree storage)
17598 {
17599 tree result = NULL_TREE;
17600 int extern_p = 0;
17601
17602 if (!decl || decl == error_mark_node)
17603 /* An error occurred, for which grokdeclarator has already issued
17604 an appropriate message. */
17605 return;
17606 else if (! DECL_LANG_SPECIFIC (decl))
17607 {
17608 error ("explicit instantiation of non-template %q#D", decl);
17609 return;
17610 }
17611 else if (TREE_CODE (decl) == VAR_DECL)
17612 {
17613 /* There is an asymmetry here in the way VAR_DECLs and
17614 FUNCTION_DECLs are handled by grokdeclarator. In the case of
17615 the latter, the DECL we get back will be marked as a
17616 template instantiation, and the appropriate
17617 DECL_TEMPLATE_INFO will be set up. This does not happen for
17618 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
17619 should handle VAR_DECLs as it currently handles
17620 FUNCTION_DECLs. */
17621 if (!DECL_CLASS_SCOPE_P (decl))
17622 {
17623 error ("%qD is not a static data member of a class template", decl);
17624 return;
17625 }
17626 result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
17627 if (!result || TREE_CODE (result) != VAR_DECL)
17628 {
17629 error ("no matching template for %qD found", decl);
17630 return;
17631 }
17632 if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
17633 {
17634 error ("type %qT for explicit instantiation %qD does not match "
17635 "declared type %qT", TREE_TYPE (result), decl,
17636 TREE_TYPE (decl));
17637 return;
17638 }
17639 }
17640 else if (TREE_CODE (decl) != FUNCTION_DECL)
17641 {
17642 error ("explicit instantiation of %q#D", decl);
17643 return;
17644 }
17645 else
17646 result = decl;
17647
17648 /* Check for various error cases. Note that if the explicit
17649 instantiation is valid the RESULT will currently be marked as an
17650 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
17651 until we get here. */
17652
17653 if (DECL_TEMPLATE_SPECIALIZATION (result))
17654 {
17655 /* DR 259 [temp.spec].
17656
17657 Both an explicit instantiation and a declaration of an explicit
17658 specialization shall not appear in a program unless the explicit
17659 instantiation follows a declaration of the explicit specialization.
17660
17661 For a given set of template parameters, if an explicit
17662 instantiation of a template appears after a declaration of an
17663 explicit specialization for that template, the explicit
17664 instantiation has no effect. */
17665 return;
17666 }
17667 else if (DECL_EXPLICIT_INSTANTIATION (result))
17668 {
17669 /* [temp.spec]
17670
17671 No program shall explicitly instantiate any template more
17672 than once.
17673
17674 We check DECL_NOT_REALLY_EXTERN so as not to complain when
17675 the first instantiation was `extern' and the second is not,
17676 and EXTERN_P for the opposite case. */
17677 if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
17678 permerror (input_location, "duplicate explicit instantiation of %q#D", result);
17679 /* If an "extern" explicit instantiation follows an ordinary
17680 explicit instantiation, the template is instantiated. */
17681 if (extern_p)
17682 return;
17683 }
17684 else if (!DECL_IMPLICIT_INSTANTIATION (result))
17685 {
17686 error ("no matching template for %qD found", result);
17687 return;
17688 }
17689 else if (!DECL_TEMPLATE_INFO (result))
17690 {
17691 permerror (input_location, "explicit instantiation of non-template %q#D", result);
17692 return;
17693 }
17694
17695 if (storage == NULL_TREE)
17696 ;
17697 else if (storage == ridpointers[(int) RID_EXTERN])
17698 {
17699 if (!in_system_header && (cxx_dialect == cxx98))
17700 pedwarn (input_location, OPT_pedantic,
17701 "ISO C++ 1998 forbids the use of %<extern%> on explicit "
17702 "instantiations");
17703 extern_p = 1;
17704 }
17705 else
17706 error ("storage class %qD applied to template instantiation", storage);
17707
17708 check_explicit_instantiation_namespace (result);
17709 mark_decl_instantiated (result, extern_p);
17710 if (! extern_p)
17711 instantiate_decl (result, /*defer_ok=*/1,
17712 /*expl_inst_class_mem_p=*/false);
17713 }
17714
17715 static void
17716 mark_class_instantiated (tree t, int extern_p)
17717 {
17718 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
17719 SET_CLASSTYPE_INTERFACE_KNOWN (t);
17720 CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
17721 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
17722 if (! extern_p)
17723 {
17724 CLASSTYPE_DEBUG_REQUESTED (t) = 1;
17725 rest_of_type_compilation (t, 1);
17726 }
17727 }
17728
17729 /* Called from do_type_instantiation through binding_table_foreach to
17730 do recursive instantiation for the type bound in ENTRY. */
17731 static void
17732 bt_instantiate_type_proc (binding_entry entry, void *data)
17733 {
17734 tree storage = *(tree *) data;
17735
17736 if (MAYBE_CLASS_TYPE_P (entry->type)
17737 && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
17738 do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
17739 }
17740
17741 /* Called from do_type_instantiation to instantiate a member
17742 (a member function or a static member variable) of an
17743 explicitly instantiated class template. */
17744 static void
17745 instantiate_class_member (tree decl, int extern_p)
17746 {
17747 mark_decl_instantiated (decl, extern_p);
17748 if (! extern_p)
17749 instantiate_decl (decl, /*defer_ok=*/1,
17750 /*expl_inst_class_mem_p=*/true);
17751 }
17752
17753 /* Perform an explicit instantiation of template class T. STORAGE, if
17754 non-null, is the RID for extern, inline or static. COMPLAIN is
17755 nonzero if this is called from the parser, zero if called recursively,
17756 since the standard is unclear (as detailed below). */
17757
17758 void
17759 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
17760 {
17761 int extern_p = 0;
17762 int nomem_p = 0;
17763 int static_p = 0;
17764 int previous_instantiation_extern_p = 0;
17765
17766 if (TREE_CODE (t) == TYPE_DECL)
17767 t = TREE_TYPE (t);
17768
17769 if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
17770 {
17771 tree tmpl =
17772 (TYPE_TEMPLATE_INFO (t)) ? TYPE_TI_TEMPLATE (t) : NULL;
17773 if (tmpl)
17774 error ("explicit instantiation of non-class template %qD", tmpl);
17775 else
17776 error ("explicit instantiation of non-template type %qT", t);
17777 return;
17778 }
17779
17780 complete_type (t);
17781
17782 if (!COMPLETE_TYPE_P (t))
17783 {
17784 if (complain & tf_error)
17785 error ("explicit instantiation of %q#T before definition of template",
17786 t);
17787 return;
17788 }
17789
17790 if (storage != NULL_TREE)
17791 {
17792 if (!in_system_header)
17793 {
17794 if (storage == ridpointers[(int) RID_EXTERN])
17795 {
17796 if (cxx_dialect == cxx98)
17797 pedwarn (input_location, OPT_pedantic,
17798 "ISO C++ 1998 forbids the use of %<extern%> on "
17799 "explicit instantiations");
17800 }
17801 else
17802 pedwarn (input_location, OPT_pedantic,
17803 "ISO C++ forbids the use of %qE"
17804 " on explicit instantiations", storage);
17805 }
17806
17807 if (storage == ridpointers[(int) RID_INLINE])
17808 nomem_p = 1;
17809 else if (storage == ridpointers[(int) RID_EXTERN])
17810 extern_p = 1;
17811 else if (storage == ridpointers[(int) RID_STATIC])
17812 static_p = 1;
17813 else
17814 {
17815 error ("storage class %qD applied to template instantiation",
17816 storage);
17817 extern_p = 0;
17818 }
17819 }
17820
17821 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
17822 {
17823 /* DR 259 [temp.spec].
17824
17825 Both an explicit instantiation and a declaration of an explicit
17826 specialization shall not appear in a program unless the explicit
17827 instantiation follows a declaration of the explicit specialization.
17828
17829 For a given set of template parameters, if an explicit
17830 instantiation of a template appears after a declaration of an
17831 explicit specialization for that template, the explicit
17832 instantiation has no effect. */
17833 return;
17834 }
17835 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
17836 {
17837 /* [temp.spec]
17838
17839 No program shall explicitly instantiate any template more
17840 than once.
17841
17842 If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
17843 instantiation was `extern'. If EXTERN_P then the second is.
17844 These cases are OK. */
17845 previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
17846
17847 if (!previous_instantiation_extern_p && !extern_p
17848 && (complain & tf_error))
17849 permerror (input_location, "duplicate explicit instantiation of %q#T", t);
17850
17851 /* If we've already instantiated the template, just return now. */
17852 if (!CLASSTYPE_INTERFACE_ONLY (t))
17853 return;
17854 }
17855
17856 check_explicit_instantiation_namespace (TYPE_NAME (t));
17857 mark_class_instantiated (t, extern_p);
17858
17859 if (nomem_p)
17860 return;
17861
17862 {
17863 tree tmp;
17864
17865 /* In contrast to implicit instantiation, where only the
17866 declarations, and not the definitions, of members are
17867 instantiated, we have here:
17868
17869 [temp.explicit]
17870
17871 The explicit instantiation of a class template specialization
17872 implies the instantiation of all of its members not
17873 previously explicitly specialized in the translation unit
17874 containing the explicit instantiation.
17875
17876 Of course, we can't instantiate member template classes, since
17877 we don't have any arguments for them. Note that the standard
17878 is unclear on whether the instantiation of the members are
17879 *explicit* instantiations or not. However, the most natural
17880 interpretation is that it should be an explicit instantiation. */
17881
17882 if (! static_p)
17883 for (tmp = TYPE_METHODS (t); tmp; tmp = DECL_CHAIN (tmp))
17884 if (TREE_CODE (tmp) == FUNCTION_DECL
17885 && DECL_TEMPLATE_INSTANTIATION (tmp))
17886 instantiate_class_member (tmp, extern_p);
17887
17888 for (tmp = TYPE_FIELDS (t); tmp; tmp = DECL_CHAIN (tmp))
17889 if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
17890 instantiate_class_member (tmp, extern_p);
17891
17892 if (CLASSTYPE_NESTED_UTDS (t))
17893 binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
17894 bt_instantiate_type_proc, &storage);
17895 }
17896 }
17897
17898 /* Given a function DECL, which is a specialization of TMPL, modify
17899 DECL to be a re-instantiation of TMPL with the same template
17900 arguments. TMPL should be the template into which tsubst'ing
17901 should occur for DECL, not the most general template.
17902
17903 One reason for doing this is a scenario like this:
17904
17905 template <class T>
17906 void f(const T&, int i);
17907
17908 void g() { f(3, 7); }
17909
17910 template <class T>
17911 void f(const T& t, const int i) { }
17912
17913 Note that when the template is first instantiated, with
17914 instantiate_template, the resulting DECL will have no name for the
17915 first parameter, and the wrong type for the second. So, when we go
17916 to instantiate the DECL, we regenerate it. */
17917
17918 static void
17919 regenerate_decl_from_template (tree decl, tree tmpl)
17920 {
17921 /* The arguments used to instantiate DECL, from the most general
17922 template. */
17923 tree args;
17924 tree code_pattern;
17925
17926 args = DECL_TI_ARGS (decl);
17927 code_pattern = DECL_TEMPLATE_RESULT (tmpl);
17928
17929 /* Make sure that we can see identifiers, and compute access
17930 correctly. */
17931 push_access_scope (decl);
17932
17933 if (TREE_CODE (decl) == FUNCTION_DECL)
17934 {
17935 tree decl_parm;
17936 tree pattern_parm;
17937 tree specs;
17938 int args_depth;
17939 int parms_depth;
17940
17941 args_depth = TMPL_ARGS_DEPTH (args);
17942 parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
17943 if (args_depth > parms_depth)
17944 args = get_innermost_template_args (args, parms_depth);
17945
17946 specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
17947 args, tf_error, NULL_TREE,
17948 /*defer_ok*/false);
17949 if (specs && specs != error_mark_node)
17950 TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
17951 specs);
17952
17953 /* Merge parameter declarations. */
17954 decl_parm = skip_artificial_parms_for (decl,
17955 DECL_ARGUMENTS (decl));
17956 pattern_parm
17957 = skip_artificial_parms_for (code_pattern,
17958 DECL_ARGUMENTS (code_pattern));
17959 while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
17960 {
17961 tree parm_type;
17962 tree attributes;
17963
17964 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
17965 DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
17966 parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
17967 NULL_TREE);
17968 parm_type = type_decays_to (parm_type);
17969 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
17970 TREE_TYPE (decl_parm) = parm_type;
17971 attributes = DECL_ATTRIBUTES (pattern_parm);
17972 if (DECL_ATTRIBUTES (decl_parm) != attributes)
17973 {
17974 DECL_ATTRIBUTES (decl_parm) = attributes;
17975 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
17976 }
17977 decl_parm = DECL_CHAIN (decl_parm);
17978 pattern_parm = DECL_CHAIN (pattern_parm);
17979 }
17980 /* Merge any parameters that match with the function parameter
17981 pack. */
17982 if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
17983 {
17984 int i, len;
17985 tree expanded_types;
17986 /* Expand the TYPE_PACK_EXPANSION that provides the types for
17987 the parameters in this function parameter pack. */
17988 expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm),
17989 args, tf_error, NULL_TREE);
17990 len = TREE_VEC_LENGTH (expanded_types);
17991 for (i = 0; i < len; i++)
17992 {
17993 tree parm_type;
17994 tree attributes;
17995
17996 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
17997 /* Rename the parameter to include the index. */
17998 DECL_NAME (decl_parm) =
17999 make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
18000 parm_type = TREE_VEC_ELT (expanded_types, i);
18001 parm_type = type_decays_to (parm_type);
18002 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
18003 TREE_TYPE (decl_parm) = parm_type;
18004 attributes = DECL_ATTRIBUTES (pattern_parm);
18005 if (DECL_ATTRIBUTES (decl_parm) != attributes)
18006 {
18007 DECL_ATTRIBUTES (decl_parm) = attributes;
18008 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
18009 }
18010 decl_parm = DECL_CHAIN (decl_parm);
18011 }
18012 }
18013 /* Merge additional specifiers from the CODE_PATTERN. */
18014 if (DECL_DECLARED_INLINE_P (code_pattern)
18015 && !DECL_DECLARED_INLINE_P (decl))
18016 DECL_DECLARED_INLINE_P (decl) = 1;
18017 }
18018 else if (TREE_CODE (decl) == VAR_DECL)
18019 {
18020 DECL_INITIAL (decl) =
18021 tsubst_expr (DECL_INITIAL (code_pattern), args,
18022 tf_error, DECL_TI_TEMPLATE (decl),
18023 /*integral_constant_expression_p=*/false);
18024 if (VAR_HAD_UNKNOWN_BOUND (decl))
18025 TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
18026 tf_error, DECL_TI_TEMPLATE (decl));
18027 }
18028 else
18029 gcc_unreachable ();
18030
18031 pop_access_scope (decl);
18032 }
18033
18034 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
18035 substituted to get DECL. */
18036
18037 tree
18038 template_for_substitution (tree decl)
18039 {
18040 tree tmpl = DECL_TI_TEMPLATE (decl);
18041
18042 /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
18043 for the instantiation. This is not always the most general
18044 template. Consider, for example:
18045
18046 template <class T>
18047 struct S { template <class U> void f();
18048 template <> void f<int>(); };
18049
18050 and an instantiation of S<double>::f<int>. We want TD to be the
18051 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
18052 while (/* An instantiation cannot have a definition, so we need a
18053 more general template. */
18054 DECL_TEMPLATE_INSTANTIATION (tmpl)
18055 /* We must also deal with friend templates. Given:
18056
18057 template <class T> struct S {
18058 template <class U> friend void f() {};
18059 };
18060
18061 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
18062 so far as the language is concerned, but that's still
18063 where we get the pattern for the instantiation from. On
18064 other hand, if the definition comes outside the class, say:
18065
18066 template <class T> struct S {
18067 template <class U> friend void f();
18068 };
18069 template <class U> friend void f() {}
18070
18071 we don't need to look any further. That's what the check for
18072 DECL_INITIAL is for. */
18073 || (TREE_CODE (decl) == FUNCTION_DECL
18074 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
18075 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
18076 {
18077 /* The present template, TD, should not be a definition. If it
18078 were a definition, we should be using it! Note that we
18079 cannot restructure the loop to just keep going until we find
18080 a template with a definition, since that might go too far if
18081 a specialization was declared, but not defined. */
18082 gcc_assert (TREE_CODE (decl) != VAR_DECL
18083 || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
18084
18085 /* Fetch the more general template. */
18086 tmpl = DECL_TI_TEMPLATE (tmpl);
18087 }
18088
18089 return tmpl;
18090 }
18091
18092 /* Returns true if we need to instantiate this template instance even if we
18093 know we aren't going to emit it.. */
18094
18095 bool
18096 always_instantiate_p (tree decl)
18097 {
18098 /* We always instantiate inline functions so that we can inline them. An
18099 explicit instantiation declaration prohibits implicit instantiation of
18100 non-inline functions. With high levels of optimization, we would
18101 normally inline non-inline functions -- but we're not allowed to do
18102 that for "extern template" functions. Therefore, we check
18103 DECL_DECLARED_INLINE_P, rather than possibly_inlined_p. */
18104 return ((TREE_CODE (decl) == FUNCTION_DECL
18105 && DECL_DECLARED_INLINE_P (decl))
18106 /* And we need to instantiate static data members so that
18107 their initializers are available in integral constant
18108 expressions. */
18109 || (TREE_CODE (decl) == VAR_DECL
18110 && decl_maybe_constant_var_p (decl)));
18111 }
18112
18113 /* If FN has a noexcept-specifier that hasn't been instantiated yet,
18114 instantiate it now, modifying TREE_TYPE (fn). */
18115
18116 void
18117 maybe_instantiate_noexcept (tree fn)
18118 {
18119 tree fntype, spec, noex, clone;
18120
18121 if (DECL_CLONED_FUNCTION_P (fn))
18122 fn = DECL_CLONED_FUNCTION (fn);
18123 fntype = TREE_TYPE (fn);
18124 spec = TYPE_RAISES_EXCEPTIONS (fntype);
18125
18126 if (!DEFERRED_NOEXCEPT_SPEC_P (spec))
18127 return;
18128
18129 noex = TREE_PURPOSE (spec);
18130
18131 if (TREE_CODE (noex) == DEFERRED_NOEXCEPT)
18132 {
18133 push_tinst_level (fn);
18134 push_access_scope (fn);
18135 input_location = DECL_SOURCE_LOCATION (fn);
18136 noex = tsubst_copy_and_build (DEFERRED_NOEXCEPT_PATTERN (noex),
18137 DEFERRED_NOEXCEPT_ARGS (noex),
18138 tf_warning_or_error, fn, /*function_p=*/false,
18139 /*integral_constant_expression_p=*/true);
18140 pop_access_scope (fn);
18141 pop_tinst_level ();
18142 spec = build_noexcept_spec (noex, tf_warning_or_error);
18143 if (spec == error_mark_node)
18144 spec = noexcept_false_spec;
18145 }
18146 else
18147 {
18148 /* This is an implicitly declared function, so NOEX is a list of
18149 other functions to evaluate and merge. */
18150 tree elt;
18151 spec = noexcept_true_spec;
18152 for (elt = noex; elt; elt = OVL_NEXT (elt))
18153 {
18154 tree fn = OVL_CURRENT (elt);
18155 tree subspec;
18156 maybe_instantiate_noexcept (fn);
18157 subspec = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn));
18158 spec = merge_exception_specifiers (spec, subspec, NULL_TREE);
18159 }
18160 }
18161
18162 TREE_TYPE (fn) = build_exception_variant (fntype, spec);
18163
18164 FOR_EACH_CLONE (clone, fn)
18165 {
18166 if (TREE_TYPE (clone) == fntype)
18167 TREE_TYPE (clone) = TREE_TYPE (fn);
18168 else
18169 TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone), spec);
18170 }
18171 }
18172
18173 /* Produce the definition of D, a _DECL generated from a template. If
18174 DEFER_OK is nonzero, then we don't have to actually do the
18175 instantiation now; we just have to do it sometime. Normally it is
18176 an error if this is an explicit instantiation but D is undefined.
18177 EXPL_INST_CLASS_MEM_P is true iff D is a member of an
18178 explicitly instantiated class template. */
18179
18180 tree
18181 instantiate_decl (tree d, int defer_ok,
18182 bool expl_inst_class_mem_p)
18183 {
18184 tree tmpl = DECL_TI_TEMPLATE (d);
18185 tree gen_args;
18186 tree args;
18187 tree td;
18188 tree code_pattern;
18189 tree spec;
18190 tree gen_tmpl;
18191 bool pattern_defined;
18192 int need_push;
18193 location_t saved_loc = input_location;
18194 bool external_p;
18195
18196 /* This function should only be used to instantiate templates for
18197 functions and static member variables. */
18198 gcc_assert (TREE_CODE (d) == FUNCTION_DECL
18199 || TREE_CODE (d) == VAR_DECL);
18200
18201 /* Variables are never deferred; if instantiation is required, they
18202 are instantiated right away. That allows for better code in the
18203 case that an expression refers to the value of the variable --
18204 if the variable has a constant value the referring expression can
18205 take advantage of that fact. */
18206 if (TREE_CODE (d) == VAR_DECL
18207 || DECL_DECLARED_CONSTEXPR_P (d))
18208 defer_ok = 0;
18209
18210 /* Don't instantiate cloned functions. Instead, instantiate the
18211 functions they cloned. */
18212 if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
18213 d = DECL_CLONED_FUNCTION (d);
18214
18215 if (DECL_TEMPLATE_INSTANTIATED (d)
18216 || (TREE_CODE (d) == FUNCTION_DECL
18217 && DECL_DEFAULTED_FN (d) && DECL_INITIAL (d))
18218 || DECL_TEMPLATE_SPECIALIZATION (d))
18219 /* D has already been instantiated or explicitly specialized, so
18220 there's nothing for us to do here.
18221
18222 It might seem reasonable to check whether or not D is an explicit
18223 instantiation, and, if so, stop here. But when an explicit
18224 instantiation is deferred until the end of the compilation,
18225 DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
18226 the instantiation. */
18227 return d;
18228
18229 /* Check to see whether we know that this template will be
18230 instantiated in some other file, as with "extern template"
18231 extension. */
18232 external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
18233
18234 /* In general, we do not instantiate such templates. */
18235 if (external_p && !always_instantiate_p (d))
18236 return d;
18237
18238 gen_tmpl = most_general_template (tmpl);
18239 gen_args = DECL_TI_ARGS (d);
18240
18241 if (tmpl != gen_tmpl)
18242 /* We should already have the extra args. */
18243 gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
18244 == TMPL_ARGS_DEPTH (gen_args));
18245 /* And what's in the hash table should match D. */
18246 gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
18247 || spec == NULL_TREE);
18248
18249 /* This needs to happen before any tsubsting. */
18250 if (! push_tinst_level (d))
18251 return d;
18252
18253 timevar_push (TV_TEMPLATE_INST);
18254
18255 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
18256 for the instantiation. */
18257 td = template_for_substitution (d);
18258 code_pattern = DECL_TEMPLATE_RESULT (td);
18259
18260 /* We should never be trying to instantiate a member of a class
18261 template or partial specialization. */
18262 gcc_assert (d != code_pattern);
18263
18264 if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
18265 || DECL_TEMPLATE_SPECIALIZATION (td))
18266 /* In the case of a friend template whose definition is provided
18267 outside the class, we may have too many arguments. Drop the
18268 ones we don't need. The same is true for specializations. */
18269 args = get_innermost_template_args
18270 (gen_args, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td)));
18271 else
18272 args = gen_args;
18273
18274 if (TREE_CODE (d) == FUNCTION_DECL)
18275 pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE
18276 || DECL_DEFAULTED_OUTSIDE_CLASS_P (code_pattern));
18277 else
18278 pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
18279
18280 /* We may be in the middle of deferred access check. Disable it now. */
18281 push_deferring_access_checks (dk_no_deferred);
18282
18283 /* Unless an explicit instantiation directive has already determined
18284 the linkage of D, remember that a definition is available for
18285 this entity. */
18286 if (pattern_defined
18287 && !DECL_INTERFACE_KNOWN (d)
18288 && !DECL_NOT_REALLY_EXTERN (d))
18289 mark_definable (d);
18290
18291 DECL_SOURCE_LOCATION (td) = DECL_SOURCE_LOCATION (code_pattern);
18292 DECL_SOURCE_LOCATION (d) = DECL_SOURCE_LOCATION (code_pattern);
18293 input_location = DECL_SOURCE_LOCATION (d);
18294
18295 /* If D is a member of an explicitly instantiated class template,
18296 and no definition is available, treat it like an implicit
18297 instantiation. */
18298 if (!pattern_defined && expl_inst_class_mem_p
18299 && DECL_EXPLICIT_INSTANTIATION (d))
18300 {
18301 /* Leave linkage flags alone on instantiations with anonymous
18302 visibility. */
18303 if (TREE_PUBLIC (d))
18304 {
18305 DECL_NOT_REALLY_EXTERN (d) = 0;
18306 DECL_INTERFACE_KNOWN (d) = 0;
18307 }
18308 SET_DECL_IMPLICIT_INSTANTIATION (d);
18309 }
18310
18311 if (TREE_CODE (d) == FUNCTION_DECL)
18312 maybe_instantiate_noexcept (d);
18313
18314 /* Recheck the substitutions to obtain any warning messages
18315 about ignoring cv qualifiers. Don't do this for artificial decls,
18316 as it breaks the context-sensitive substitution for lambda op(). */
18317 if (!defer_ok && !DECL_ARTIFICIAL (d))
18318 {
18319 tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
18320 tree type = TREE_TYPE (gen);
18321
18322 /* Make sure that we can see identifiers, and compute access
18323 correctly. D is already the target FUNCTION_DECL with the
18324 right context. */
18325 push_access_scope (d);
18326
18327 if (TREE_CODE (gen) == FUNCTION_DECL)
18328 {
18329 tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
18330 tsubst_exception_specification (type, gen_args, tf_warning_or_error,
18331 d, /*defer_ok*/true);
18332 /* Don't simply tsubst the function type, as that will give
18333 duplicate warnings about poor parameter qualifications.
18334 The function arguments are the same as the decl_arguments
18335 without the top level cv qualifiers. */
18336 type = TREE_TYPE (type);
18337 }
18338 tsubst (type, gen_args, tf_warning_or_error, d);
18339
18340 pop_access_scope (d);
18341 }
18342
18343 /* Defer all other templates, unless we have been explicitly
18344 forbidden from doing so. */
18345 if (/* If there is no definition, we cannot instantiate the
18346 template. */
18347 ! pattern_defined
18348 /* If it's OK to postpone instantiation, do so. */
18349 || defer_ok
18350 /* If this is a static data member that will be defined
18351 elsewhere, we don't want to instantiate the entire data
18352 member, but we do want to instantiate the initializer so that
18353 we can substitute that elsewhere. */
18354 || (external_p && TREE_CODE (d) == VAR_DECL))
18355 {
18356 /* The definition of the static data member is now required so
18357 we must substitute the initializer. */
18358 if (TREE_CODE (d) == VAR_DECL
18359 && !DECL_INITIAL (d)
18360 && DECL_INITIAL (code_pattern))
18361 {
18362 tree ns;
18363 tree init;
18364 bool const_init = false;
18365
18366 ns = decl_namespace_context (d);
18367 push_nested_namespace (ns);
18368 push_nested_class (DECL_CONTEXT (d));
18369 init = tsubst_expr (DECL_INITIAL (code_pattern),
18370 args,
18371 tf_warning_or_error, NULL_TREE,
18372 /*integral_constant_expression_p=*/false);
18373 /* Make sure the initializer is still constant, in case of
18374 circular dependency (template/instantiate6.C). */
18375 const_init
18376 = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
18377 cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
18378 /*asmspec_tree=*/NULL_TREE,
18379 LOOKUP_ONLYCONVERTING);
18380 pop_nested_class ();
18381 pop_nested_namespace (ns);
18382 }
18383
18384 /* We restore the source position here because it's used by
18385 add_pending_template. */
18386 input_location = saved_loc;
18387
18388 if (at_eof && !pattern_defined
18389 && DECL_EXPLICIT_INSTANTIATION (d)
18390 && DECL_NOT_REALLY_EXTERN (d))
18391 /* [temp.explicit]
18392
18393 The definition of a non-exported function template, a
18394 non-exported member function template, or a non-exported
18395 member function or static data member of a class template
18396 shall be present in every translation unit in which it is
18397 explicitly instantiated. */
18398 permerror (input_location, "explicit instantiation of %qD "
18399 "but no definition available", d);
18400
18401 /* If we're in unevaluated context, we just wanted to get the
18402 constant value; this isn't an odr use, so don't queue
18403 a full instantiation. */
18404 if (cp_unevaluated_operand != 0)
18405 goto out;
18406 /* ??? Historically, we have instantiated inline functions, even
18407 when marked as "extern template". */
18408 if (!(external_p && TREE_CODE (d) == VAR_DECL))
18409 add_pending_template (d);
18410 goto out;
18411 }
18412 /* Tell the repository that D is available in this translation unit
18413 -- and see if it is supposed to be instantiated here. */
18414 if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
18415 {
18416 /* In a PCH file, despite the fact that the repository hasn't
18417 requested instantiation in the PCH it is still possible that
18418 an instantiation will be required in a file that includes the
18419 PCH. */
18420 if (pch_file)
18421 add_pending_template (d);
18422 /* Instantiate inline functions so that the inliner can do its
18423 job, even though we'll not be emitting a copy of this
18424 function. */
18425 if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
18426 goto out;
18427 }
18428
18429 need_push = !cfun || !global_bindings_p ();
18430 if (need_push)
18431 push_to_top_level ();
18432
18433 /* Mark D as instantiated so that recursive calls to
18434 instantiate_decl do not try to instantiate it again. */
18435 DECL_TEMPLATE_INSTANTIATED (d) = 1;
18436
18437 /* Regenerate the declaration in case the template has been modified
18438 by a subsequent redeclaration. */
18439 regenerate_decl_from_template (d, td);
18440
18441 /* We already set the file and line above. Reset them now in case
18442 they changed as a result of calling regenerate_decl_from_template. */
18443 input_location = DECL_SOURCE_LOCATION (d);
18444
18445 if (TREE_CODE (d) == VAR_DECL)
18446 {
18447 tree init;
18448 bool const_init = false;
18449
18450 /* Clear out DECL_RTL; whatever was there before may not be right
18451 since we've reset the type of the declaration. */
18452 SET_DECL_RTL (d, NULL);
18453 DECL_IN_AGGR_P (d) = 0;
18454
18455 /* The initializer is placed in DECL_INITIAL by
18456 regenerate_decl_from_template so we don't need to
18457 push/pop_access_scope again here. Pull it out so that
18458 cp_finish_decl can process it. */
18459 init = DECL_INITIAL (d);
18460 DECL_INITIAL (d) = NULL_TREE;
18461 DECL_INITIALIZED_P (d) = 0;
18462
18463 /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
18464 initializer. That function will defer actual emission until
18465 we have a chance to determine linkage. */
18466 DECL_EXTERNAL (d) = 0;
18467
18468 /* Enter the scope of D so that access-checking works correctly. */
18469 push_nested_class (DECL_CONTEXT (d));
18470 const_init = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
18471 cp_finish_decl (d, init, const_init, NULL_TREE, 0);
18472 pop_nested_class ();
18473 }
18474 else if (TREE_CODE (d) == FUNCTION_DECL && DECL_DEFAULTED_FN (code_pattern))
18475 synthesize_method (d);
18476 else if (TREE_CODE (d) == FUNCTION_DECL)
18477 {
18478 htab_t saved_local_specializations;
18479 tree subst_decl;
18480 tree tmpl_parm;
18481 tree spec_parm;
18482
18483 /* Save away the current list, in case we are instantiating one
18484 template from within the body of another. */
18485 saved_local_specializations = local_specializations;
18486
18487 /* Set up the list of local specializations. */
18488 local_specializations = htab_create (37,
18489 hash_local_specialization,
18490 eq_local_specializations,
18491 NULL);
18492
18493 /* Set up context. */
18494 start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
18495
18496 /* Create substitution entries for the parameters. */
18497 subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
18498 tmpl_parm = DECL_ARGUMENTS (subst_decl);
18499 spec_parm = DECL_ARGUMENTS (d);
18500 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
18501 {
18502 register_local_specialization (spec_parm, tmpl_parm);
18503 spec_parm = skip_artificial_parms_for (d, spec_parm);
18504 tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
18505 }
18506 for (; tmpl_parm; tmpl_parm = DECL_CHAIN (tmpl_parm))
18507 {
18508 if (!FUNCTION_PARAMETER_PACK_P (tmpl_parm))
18509 {
18510 register_local_specialization (spec_parm, tmpl_parm);
18511 spec_parm = DECL_CHAIN (spec_parm);
18512 }
18513 else
18514 {
18515 /* Register the (value) argument pack as a specialization of
18516 TMPL_PARM, then move on. */
18517 tree argpack = extract_fnparm_pack (tmpl_parm, &spec_parm);
18518 register_local_specialization (argpack, tmpl_parm);
18519 }
18520 }
18521 gcc_assert (!spec_parm);
18522
18523 /* Substitute into the body of the function. */
18524 tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
18525 tf_warning_or_error, tmpl,
18526 /*integral_constant_expression_p=*/false);
18527
18528 /* Set the current input_location to the end of the function
18529 so that finish_function knows where we are. */
18530 input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
18531
18532 /* We don't need the local specializations any more. */
18533 htab_delete (local_specializations);
18534 local_specializations = saved_local_specializations;
18535
18536 /* Finish the function. */
18537 d = finish_function (0);
18538 expand_or_defer_fn (d);
18539 }
18540
18541 /* We're not deferring instantiation any more. */
18542 TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
18543
18544 if (need_push)
18545 pop_from_top_level ();
18546
18547 out:
18548 input_location = saved_loc;
18549 pop_deferring_access_checks ();
18550 pop_tinst_level ();
18551
18552 timevar_pop (TV_TEMPLATE_INST);
18553
18554 return d;
18555 }
18556
18557 /* Run through the list of templates that we wish we could
18558 instantiate, and instantiate any we can. RETRIES is the
18559 number of times we retry pending template instantiation. */
18560
18561 void
18562 instantiate_pending_templates (int retries)
18563 {
18564 int reconsider;
18565 location_t saved_loc = input_location;
18566
18567 /* Instantiating templates may trigger vtable generation. This in turn
18568 may require further template instantiations. We place a limit here
18569 to avoid infinite loop. */
18570 if (pending_templates && retries >= max_tinst_depth)
18571 {
18572 tree decl = pending_templates->tinst->decl;
18573
18574 error ("template instantiation depth exceeds maximum of %d"
18575 " instantiating %q+D, possibly from virtual table generation"
18576 " (use -ftemplate-depth= to increase the maximum)",
18577 max_tinst_depth, decl);
18578 if (TREE_CODE (decl) == FUNCTION_DECL)
18579 /* Pretend that we defined it. */
18580 DECL_INITIAL (decl) = error_mark_node;
18581 return;
18582 }
18583
18584 do
18585 {
18586 struct pending_template **t = &pending_templates;
18587 struct pending_template *last = NULL;
18588 reconsider = 0;
18589 while (*t)
18590 {
18591 tree instantiation = reopen_tinst_level ((*t)->tinst);
18592 bool complete = false;
18593
18594 if (TYPE_P (instantiation))
18595 {
18596 tree fn;
18597
18598 if (!COMPLETE_TYPE_P (instantiation))
18599 {
18600 instantiate_class_template (instantiation);
18601 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
18602 for (fn = TYPE_METHODS (instantiation);
18603 fn;
18604 fn = TREE_CHAIN (fn))
18605 if (! DECL_ARTIFICIAL (fn))
18606 instantiate_decl (fn,
18607 /*defer_ok=*/0,
18608 /*expl_inst_class_mem_p=*/false);
18609 if (COMPLETE_TYPE_P (instantiation))
18610 reconsider = 1;
18611 }
18612
18613 complete = COMPLETE_TYPE_P (instantiation);
18614 }
18615 else
18616 {
18617 if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
18618 && !DECL_TEMPLATE_INSTANTIATED (instantiation))
18619 {
18620 instantiation
18621 = instantiate_decl (instantiation,
18622 /*defer_ok=*/0,
18623 /*expl_inst_class_mem_p=*/false);
18624 if (DECL_TEMPLATE_INSTANTIATED (instantiation))
18625 reconsider = 1;
18626 }
18627
18628 complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
18629 || DECL_TEMPLATE_INSTANTIATED (instantiation));
18630 }
18631
18632 if (complete)
18633 /* If INSTANTIATION has been instantiated, then we don't
18634 need to consider it again in the future. */
18635 *t = (*t)->next;
18636 else
18637 {
18638 last = *t;
18639 t = &(*t)->next;
18640 }
18641 tinst_depth = 0;
18642 current_tinst_level = NULL;
18643 }
18644 last_pending_template = last;
18645 }
18646 while (reconsider);
18647
18648 input_location = saved_loc;
18649 }
18650
18651 /* Substitute ARGVEC into T, which is a list of initializers for
18652 either base class or a non-static data member. The TREE_PURPOSEs
18653 are DECLs, and the TREE_VALUEs are the initializer values. Used by
18654 instantiate_decl. */
18655
18656 static tree
18657 tsubst_initializer_list (tree t, tree argvec)
18658 {
18659 tree inits = NULL_TREE;
18660
18661 for (; t; t = TREE_CHAIN (t))
18662 {
18663 tree decl;
18664 tree init;
18665 tree expanded_bases = NULL_TREE;
18666 tree expanded_arguments = NULL_TREE;
18667 int i, len = 1;
18668
18669 if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
18670 {
18671 tree expr;
18672 tree arg;
18673
18674 /* Expand the base class expansion type into separate base
18675 classes. */
18676 expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
18677 tf_warning_or_error,
18678 NULL_TREE);
18679 if (expanded_bases == error_mark_node)
18680 continue;
18681
18682 /* We'll be building separate TREE_LISTs of arguments for
18683 each base. */
18684 len = TREE_VEC_LENGTH (expanded_bases);
18685 expanded_arguments = make_tree_vec (len);
18686 for (i = 0; i < len; i++)
18687 TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
18688
18689 /* Build a dummy EXPR_PACK_EXPANSION that will be used to
18690 expand each argument in the TREE_VALUE of t. */
18691 expr = make_node (EXPR_PACK_EXPANSION);
18692 PACK_EXPANSION_PARAMETER_PACKS (expr) =
18693 PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
18694
18695 if (TREE_VALUE (t) == void_type_node)
18696 /* VOID_TYPE_NODE is used to indicate
18697 value-initialization. */
18698 {
18699 for (i = 0; i < len; i++)
18700 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
18701 }
18702 else
18703 {
18704 /* Substitute parameter packs into each argument in the
18705 TREE_LIST. */
18706 in_base_initializer = 1;
18707 for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
18708 {
18709 tree expanded_exprs;
18710
18711 /* Expand the argument. */
18712 SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
18713 expanded_exprs
18714 = tsubst_pack_expansion (expr, argvec,
18715 tf_warning_or_error,
18716 NULL_TREE);
18717 if (expanded_exprs == error_mark_node)
18718 continue;
18719
18720 /* Prepend each of the expanded expressions to the
18721 corresponding TREE_LIST in EXPANDED_ARGUMENTS. */
18722 for (i = 0; i < len; i++)
18723 {
18724 TREE_VEC_ELT (expanded_arguments, i) =
18725 tree_cons (NULL_TREE,
18726 TREE_VEC_ELT (expanded_exprs, i),
18727 TREE_VEC_ELT (expanded_arguments, i));
18728 }
18729 }
18730 in_base_initializer = 0;
18731
18732 /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
18733 since we built them backwards. */
18734 for (i = 0; i < len; i++)
18735 {
18736 TREE_VEC_ELT (expanded_arguments, i) =
18737 nreverse (TREE_VEC_ELT (expanded_arguments, i));
18738 }
18739 }
18740 }
18741
18742 for (i = 0; i < len; ++i)
18743 {
18744 if (expanded_bases)
18745 {
18746 decl = TREE_VEC_ELT (expanded_bases, i);
18747 decl = expand_member_init (decl);
18748 init = TREE_VEC_ELT (expanded_arguments, i);
18749 }
18750 else
18751 {
18752 decl = tsubst_copy (TREE_PURPOSE (t), argvec,
18753 tf_warning_or_error, NULL_TREE);
18754
18755 decl = expand_member_init (decl);
18756 if (decl && !DECL_P (decl))
18757 in_base_initializer = 1;
18758
18759 init = TREE_VALUE (t);
18760 if (init != void_type_node)
18761 init = tsubst_expr (init, argvec,
18762 tf_warning_or_error, NULL_TREE,
18763 /*integral_constant_expression_p=*/false);
18764 in_base_initializer = 0;
18765 }
18766
18767 if (decl)
18768 {
18769 init = build_tree_list (decl, init);
18770 TREE_CHAIN (init) = inits;
18771 inits = init;
18772 }
18773 }
18774 }
18775 return inits;
18776 }
18777
18778 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
18779
18780 static void
18781 set_current_access_from_decl (tree decl)
18782 {
18783 if (TREE_PRIVATE (decl))
18784 current_access_specifier = access_private_node;
18785 else if (TREE_PROTECTED (decl))
18786 current_access_specifier = access_protected_node;
18787 else
18788 current_access_specifier = access_public_node;
18789 }
18790
18791 /* Instantiate an enumerated type. TAG is the template type, NEWTAG
18792 is the instantiation (which should have been created with
18793 start_enum) and ARGS are the template arguments to use. */
18794
18795 static void
18796 tsubst_enum (tree tag, tree newtag, tree args)
18797 {
18798 tree e;
18799
18800 if (SCOPED_ENUM_P (newtag))
18801 begin_scope (sk_scoped_enum, newtag);
18802
18803 for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
18804 {
18805 tree value;
18806 tree decl;
18807
18808 decl = TREE_VALUE (e);
18809 /* Note that in a template enum, the TREE_VALUE is the
18810 CONST_DECL, not the corresponding INTEGER_CST. */
18811 value = tsubst_expr (DECL_INITIAL (decl),
18812 args, tf_warning_or_error, NULL_TREE,
18813 /*integral_constant_expression_p=*/true);
18814
18815 /* Give this enumeration constant the correct access. */
18816 set_current_access_from_decl (decl);
18817
18818 /* Actually build the enumerator itself. */
18819 build_enumerator
18820 (DECL_NAME (decl), value, newtag, DECL_SOURCE_LOCATION (decl));
18821 }
18822
18823 if (SCOPED_ENUM_P (newtag))
18824 finish_scope ();
18825
18826 finish_enum_value_list (newtag);
18827 finish_enum (newtag);
18828
18829 DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
18830 = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
18831 }
18832
18833 /* DECL is a FUNCTION_DECL that is a template specialization. Return
18834 its type -- but without substituting the innermost set of template
18835 arguments. So, innermost set of template parameters will appear in
18836 the type. */
18837
18838 tree
18839 get_mostly_instantiated_function_type (tree decl)
18840 {
18841 tree fn_type;
18842 tree tmpl;
18843 tree targs;
18844 tree tparms;
18845 int parm_depth;
18846
18847 tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
18848 targs = DECL_TI_ARGS (decl);
18849 tparms = DECL_TEMPLATE_PARMS (tmpl);
18850 parm_depth = TMPL_PARMS_DEPTH (tparms);
18851
18852 /* There should be as many levels of arguments as there are levels
18853 of parameters. */
18854 gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
18855
18856 fn_type = TREE_TYPE (tmpl);
18857
18858 if (parm_depth == 1)
18859 /* No substitution is necessary. */
18860 ;
18861 else
18862 {
18863 int i;
18864 tree partial_args;
18865
18866 /* Replace the innermost level of the TARGS with NULL_TREEs to
18867 let tsubst know not to substitute for those parameters. */
18868 partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
18869 for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
18870 SET_TMPL_ARGS_LEVEL (partial_args, i,
18871 TMPL_ARGS_LEVEL (targs, i));
18872 SET_TMPL_ARGS_LEVEL (partial_args,
18873 TMPL_ARGS_DEPTH (targs),
18874 make_tree_vec (DECL_NTPARMS (tmpl)));
18875
18876 /* Make sure that we can see identifiers, and compute access
18877 correctly. */
18878 push_access_scope (decl);
18879
18880 ++processing_template_decl;
18881 /* Now, do the (partial) substitution to figure out the
18882 appropriate function type. */
18883 fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
18884 --processing_template_decl;
18885
18886 /* Substitute into the template parameters to obtain the real
18887 innermost set of parameters. This step is important if the
18888 innermost set of template parameters contains value
18889 parameters whose types depend on outer template parameters. */
18890 TREE_VEC_LENGTH (partial_args)--;
18891 tparms = tsubst_template_parms (tparms, partial_args, tf_error);
18892
18893 pop_access_scope (decl);
18894 }
18895
18896 return fn_type;
18897 }
18898
18899 /* Return truthvalue if we're processing a template different from
18900 the last one involved in diagnostics. */
18901 int
18902 problematic_instantiation_changed (void)
18903 {
18904 return current_tinst_level != last_error_tinst_level;
18905 }
18906
18907 /* Remember current template involved in diagnostics. */
18908 void
18909 record_last_problematic_instantiation (void)
18910 {
18911 last_error_tinst_level = current_tinst_level;
18912 }
18913
18914 struct tinst_level *
18915 current_instantiation (void)
18916 {
18917 return current_tinst_level;
18918 }
18919
18920 /* [temp.param] Check that template non-type parm TYPE is of an allowable
18921 type. Return zero for ok, nonzero for disallowed. Issue error and
18922 warning messages under control of COMPLAIN. */
18923
18924 static int
18925 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
18926 {
18927 if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
18928 return 0;
18929 else if (POINTER_TYPE_P (type))
18930 return 0;
18931 else if (TYPE_PTR_TO_MEMBER_P (type))
18932 return 0;
18933 else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
18934 return 0;
18935 else if (TREE_CODE (type) == TYPENAME_TYPE)
18936 return 0;
18937 else if (TREE_CODE (type) == DECLTYPE_TYPE)
18938 return 0;
18939 else if (TREE_CODE (type) == NULLPTR_TYPE)
18940 return 0;
18941
18942 if (complain & tf_error)
18943 error ("%q#T is not a valid type for a template constant parameter", type);
18944 return 1;
18945 }
18946
18947 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
18948 Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
18949
18950 static bool
18951 dependent_type_p_r (tree type)
18952 {
18953 tree scope;
18954
18955 /* [temp.dep.type]
18956
18957 A type is dependent if it is:
18958
18959 -- a template parameter. Template template parameters are types
18960 for us (since TYPE_P holds true for them) so we handle
18961 them here. */
18962 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
18963 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
18964 return true;
18965 /* -- a qualified-id with a nested-name-specifier which contains a
18966 class-name that names a dependent type or whose unqualified-id
18967 names a dependent type. */
18968 if (TREE_CODE (type) == TYPENAME_TYPE)
18969 return true;
18970 /* -- a cv-qualified type where the cv-unqualified type is
18971 dependent. */
18972 type = TYPE_MAIN_VARIANT (type);
18973 /* -- a compound type constructed from any dependent type. */
18974 if (TYPE_PTR_TO_MEMBER_P (type))
18975 return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
18976 || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
18977 (type)));
18978 else if (TREE_CODE (type) == POINTER_TYPE
18979 || TREE_CODE (type) == REFERENCE_TYPE)
18980 return dependent_type_p (TREE_TYPE (type));
18981 else if (TREE_CODE (type) == FUNCTION_TYPE
18982 || TREE_CODE (type) == METHOD_TYPE)
18983 {
18984 tree arg_type;
18985
18986 if (dependent_type_p (TREE_TYPE (type)))
18987 return true;
18988 for (arg_type = TYPE_ARG_TYPES (type);
18989 arg_type;
18990 arg_type = TREE_CHAIN (arg_type))
18991 if (dependent_type_p (TREE_VALUE (arg_type)))
18992 return true;
18993 return false;
18994 }
18995 /* -- an array type constructed from any dependent type or whose
18996 size is specified by a constant expression that is
18997 value-dependent.
18998
18999 We checked for type- and value-dependence of the bounds in
19000 compute_array_index_type, so TYPE_DEPENDENT_P is already set. */
19001 if (TREE_CODE (type) == ARRAY_TYPE)
19002 {
19003 if (TYPE_DOMAIN (type)
19004 && dependent_type_p (TYPE_DOMAIN (type)))
19005 return true;
19006 return dependent_type_p (TREE_TYPE (type));
19007 }
19008
19009 /* -- a template-id in which either the template name is a template
19010 parameter ... */
19011 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
19012 return true;
19013 /* ... or any of the template arguments is a dependent type or
19014 an expression that is type-dependent or value-dependent. */
19015 else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
19016 && (any_dependent_template_arguments_p
19017 (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
19018 return true;
19019
19020 /* All TYPEOF_TYPEs, DECLTYPE_TYPEs, and UNDERLYING_TYPEs are
19021 dependent; if the argument of the `typeof' expression is not
19022 type-dependent, then it should already been have resolved. */
19023 if (TREE_CODE (type) == TYPEOF_TYPE
19024 || TREE_CODE (type) == DECLTYPE_TYPE
19025 || TREE_CODE (type) == UNDERLYING_TYPE)
19026 return true;
19027
19028 /* A template argument pack is dependent if any of its packed
19029 arguments are. */
19030 if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
19031 {
19032 tree args = ARGUMENT_PACK_ARGS (type);
19033 int i, len = TREE_VEC_LENGTH (args);
19034 for (i = 0; i < len; ++i)
19035 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
19036 return true;
19037 }
19038
19039 /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
19040 be template parameters. */
19041 if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
19042 return true;
19043
19044 /* The standard does not specifically mention types that are local
19045 to template functions or local classes, but they should be
19046 considered dependent too. For example:
19047
19048 template <int I> void f() {
19049 enum E { a = I };
19050 S<sizeof (E)> s;
19051 }
19052
19053 The size of `E' cannot be known until the value of `I' has been
19054 determined. Therefore, `E' must be considered dependent. */
19055 scope = TYPE_CONTEXT (type);
19056 if (scope && TYPE_P (scope))
19057 return dependent_type_p (scope);
19058 /* Don't use type_dependent_expression_p here, as it can lead
19059 to infinite recursion trying to determine whether a lambda
19060 nested in a lambda is dependent (c++/47687). */
19061 else if (scope && TREE_CODE (scope) == FUNCTION_DECL
19062 && DECL_LANG_SPECIFIC (scope)
19063 && DECL_TEMPLATE_INFO (scope)
19064 && (any_dependent_template_arguments_p
19065 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (scope)))))
19066 return true;
19067
19068 /* Other types are non-dependent. */
19069 return false;
19070 }
19071
19072 /* Returns TRUE if TYPE is dependent, in the sense of
19073 [temp.dep.type]. Note that a NULL type is considered dependent. */
19074
19075 bool
19076 dependent_type_p (tree type)
19077 {
19078 /* If there are no template parameters in scope, then there can't be
19079 any dependent types. */
19080 if (!processing_template_decl)
19081 {
19082 /* If we are not processing a template, then nobody should be
19083 providing us with a dependent type. */
19084 gcc_assert (type);
19085 gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
19086 return false;
19087 }
19088
19089 /* If the type is NULL, we have not computed a type for the entity
19090 in question; in that case, the type is dependent. */
19091 if (!type)
19092 return true;
19093
19094 /* Erroneous types can be considered non-dependent. */
19095 if (type == error_mark_node)
19096 return false;
19097
19098 /* If we have not already computed the appropriate value for TYPE,
19099 do so now. */
19100 if (!TYPE_DEPENDENT_P_VALID (type))
19101 {
19102 TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
19103 TYPE_DEPENDENT_P_VALID (type) = 1;
19104 }
19105
19106 return TYPE_DEPENDENT_P (type);
19107 }
19108
19109 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
19110 lookup. In other words, a dependent type that is not the current
19111 instantiation. */
19112
19113 bool
19114 dependent_scope_p (tree scope)
19115 {
19116 return (scope && TYPE_P (scope) && dependent_type_p (scope)
19117 && !currently_open_class (scope));
19118 }
19119
19120 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
19121 [temp.dep.constexpr]. EXPRESSION is already known to be a constant
19122 expression. */
19123
19124 /* Note that this predicate is not appropriate for general expressions;
19125 only constant expressions (that satisfy potential_constant_expression)
19126 can be tested for value dependence.
19127
19128 We should really also have a predicate for "instantiation-dependent".
19129
19130 fold_non_dependent_expr: fold if constant and not type-dependent and not value-dependent.
19131 (what about instantiation-dependent constant-expressions?)
19132 is_late_template_attribute: defer if instantiation-dependent.
19133 compute_array_index_type: proceed if constant and not t- or v-dependent
19134 if instantiation-dependent, need to remember full expression
19135 uses_template_parms: FIXME - need to audit callers
19136 tsubst_decl [function_decl]: Why is this using value_dependent_expression_p?
19137 dependent_type_p [array_type]: dependent if index type is dependent
19138 (or non-constant?)
19139 static_assert - instantiation-dependent */
19140
19141 bool
19142 value_dependent_expression_p (tree expression)
19143 {
19144 if (!processing_template_decl)
19145 return false;
19146
19147 /* A name declared with a dependent type. */
19148 if (DECL_P (expression) && type_dependent_expression_p (expression))
19149 return true;
19150
19151 switch (TREE_CODE (expression))
19152 {
19153 case IDENTIFIER_NODE:
19154 /* A name that has not been looked up -- must be dependent. */
19155 return true;
19156
19157 case TEMPLATE_PARM_INDEX:
19158 /* A non-type template parm. */
19159 return true;
19160
19161 case CONST_DECL:
19162 /* A non-type template parm. */
19163 if (DECL_TEMPLATE_PARM_P (expression))
19164 return true;
19165 return value_dependent_expression_p (DECL_INITIAL (expression));
19166
19167 case VAR_DECL:
19168 /* A constant with literal type and is initialized
19169 with an expression that is value-dependent. */
19170 if (DECL_INITIAL (expression)
19171 && decl_constant_var_p (expression)
19172 && value_dependent_expression_p (DECL_INITIAL (expression)))
19173 return true;
19174 return false;
19175
19176 case DYNAMIC_CAST_EXPR:
19177 case STATIC_CAST_EXPR:
19178 case CONST_CAST_EXPR:
19179 case REINTERPRET_CAST_EXPR:
19180 case CAST_EXPR:
19181 /* These expressions are value-dependent if the type to which
19182 the cast occurs is dependent or the expression being casted
19183 is value-dependent. */
19184 {
19185 tree type = TREE_TYPE (expression);
19186
19187 if (dependent_type_p (type))
19188 return true;
19189
19190 /* A functional cast has a list of operands. */
19191 expression = TREE_OPERAND (expression, 0);
19192 if (!expression)
19193 {
19194 /* If there are no operands, it must be an expression such
19195 as "int()". This should not happen for aggregate types
19196 because it would form non-constant expressions. */
19197 gcc_assert (cxx_dialect >= cxx0x
19198 || INTEGRAL_OR_ENUMERATION_TYPE_P (type));
19199
19200 return false;
19201 }
19202
19203 if (TREE_CODE (expression) == TREE_LIST)
19204 return any_value_dependent_elements_p (expression);
19205
19206 return value_dependent_expression_p (expression);
19207 }
19208
19209 case SIZEOF_EXPR:
19210 case ALIGNOF_EXPR:
19211 case TYPEID_EXPR:
19212 /* A `sizeof' expression is value-dependent if the operand is
19213 type-dependent or is a pack expansion. */
19214 expression = TREE_OPERAND (expression, 0);
19215 if (PACK_EXPANSION_P (expression))
19216 return true;
19217 else if (TYPE_P (expression))
19218 return dependent_type_p (expression);
19219 return type_dependent_expression_p (expression);
19220
19221 case AT_ENCODE_EXPR:
19222 /* An 'encode' expression is value-dependent if the operand is
19223 type-dependent. */
19224 expression = TREE_OPERAND (expression, 0);
19225 return dependent_type_p (expression);
19226
19227 case NOEXCEPT_EXPR:
19228 expression = TREE_OPERAND (expression, 0);
19229 return type_dependent_expression_p (expression);
19230
19231 case SCOPE_REF:
19232 {
19233 tree name = TREE_OPERAND (expression, 1);
19234 return value_dependent_expression_p (name);
19235 }
19236
19237 case COMPONENT_REF:
19238 return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
19239 || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
19240
19241 case NONTYPE_ARGUMENT_PACK:
19242 /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
19243 is value-dependent. */
19244 {
19245 tree values = ARGUMENT_PACK_ARGS (expression);
19246 int i, len = TREE_VEC_LENGTH (values);
19247
19248 for (i = 0; i < len; ++i)
19249 if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
19250 return true;
19251
19252 return false;
19253 }
19254
19255 case TRAIT_EXPR:
19256 {
19257 tree type2 = TRAIT_EXPR_TYPE2 (expression);
19258 return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
19259 || (type2 ? dependent_type_p (type2) : false));
19260 }
19261
19262 case MODOP_EXPR:
19263 return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
19264 || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
19265
19266 case ARRAY_REF:
19267 return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
19268 || (value_dependent_expression_p (TREE_OPERAND (expression, 1))));
19269
19270 case ADDR_EXPR:
19271 {
19272 tree op = TREE_OPERAND (expression, 0);
19273 return (value_dependent_expression_p (op)
19274 || has_value_dependent_address (op));
19275 }
19276
19277 case CALL_EXPR:
19278 {
19279 tree fn = get_callee_fndecl (expression);
19280 int i, nargs;
19281 if (!fn && value_dependent_expression_p (CALL_EXPR_FN (expression)))
19282 return true;
19283 nargs = call_expr_nargs (expression);
19284 for (i = 0; i < nargs; ++i)
19285 {
19286 tree op = CALL_EXPR_ARG (expression, i);
19287 /* In a call to a constexpr member function, look through the
19288 implicit ADDR_EXPR on the object argument so that it doesn't
19289 cause the call to be considered value-dependent. We also
19290 look through it in potential_constant_expression. */
19291 if (i == 0 && fn && DECL_DECLARED_CONSTEXPR_P (fn)
19292 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
19293 && TREE_CODE (op) == ADDR_EXPR)
19294 op = TREE_OPERAND (op, 0);
19295 if (value_dependent_expression_p (op))
19296 return true;
19297 }
19298 return false;
19299 }
19300
19301 case TEMPLATE_ID_EXPR:
19302 /* If a TEMPLATE_ID_EXPR involves a dependent name, it will be
19303 type-dependent. */
19304 return type_dependent_expression_p (expression);
19305
19306 case CONSTRUCTOR:
19307 {
19308 unsigned ix;
19309 tree val;
19310 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), ix, val)
19311 if (value_dependent_expression_p (val))
19312 return true;
19313 return false;
19314 }
19315
19316 default:
19317 /* A constant expression is value-dependent if any subexpression is
19318 value-dependent. */
19319 switch (TREE_CODE_CLASS (TREE_CODE (expression)))
19320 {
19321 case tcc_reference:
19322 case tcc_unary:
19323 case tcc_comparison:
19324 case tcc_binary:
19325 case tcc_expression:
19326 case tcc_vl_exp:
19327 {
19328 int i, len = cp_tree_operand_length (expression);
19329
19330 for (i = 0; i < len; i++)
19331 {
19332 tree t = TREE_OPERAND (expression, i);
19333
19334 /* In some cases, some of the operands may be missing.l
19335 (For example, in the case of PREDECREMENT_EXPR, the
19336 amount to increment by may be missing.) That doesn't
19337 make the expression dependent. */
19338 if (t && value_dependent_expression_p (t))
19339 return true;
19340 }
19341 }
19342 break;
19343 default:
19344 break;
19345 }
19346 break;
19347 }
19348
19349 /* The expression is not value-dependent. */
19350 return false;
19351 }
19352
19353 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
19354 [temp.dep.expr]. Note that an expression with no type is
19355 considered dependent. Other parts of the compiler arrange for an
19356 expression with type-dependent subexpressions to have no type, so
19357 this function doesn't have to be fully recursive. */
19358
19359 bool
19360 type_dependent_expression_p (tree expression)
19361 {
19362 if (!processing_template_decl)
19363 return false;
19364
19365 if (expression == error_mark_node)
19366 return false;
19367
19368 /* An unresolved name is always dependent. */
19369 if (TREE_CODE (expression) == IDENTIFIER_NODE
19370 || TREE_CODE (expression) == USING_DECL)
19371 return true;
19372
19373 /* Some expression forms are never type-dependent. */
19374 if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
19375 || TREE_CODE (expression) == SIZEOF_EXPR
19376 || TREE_CODE (expression) == ALIGNOF_EXPR
19377 || TREE_CODE (expression) == AT_ENCODE_EXPR
19378 || TREE_CODE (expression) == NOEXCEPT_EXPR
19379 || TREE_CODE (expression) == TRAIT_EXPR
19380 || TREE_CODE (expression) == TYPEID_EXPR
19381 || TREE_CODE (expression) == DELETE_EXPR
19382 || TREE_CODE (expression) == VEC_DELETE_EXPR
19383 || TREE_CODE (expression) == THROW_EXPR)
19384 return false;
19385
19386 /* The types of these expressions depends only on the type to which
19387 the cast occurs. */
19388 if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
19389 || TREE_CODE (expression) == STATIC_CAST_EXPR
19390 || TREE_CODE (expression) == CONST_CAST_EXPR
19391 || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
19392 || TREE_CODE (expression) == IMPLICIT_CONV_EXPR
19393 || TREE_CODE (expression) == CAST_EXPR)
19394 return dependent_type_p (TREE_TYPE (expression));
19395
19396 /* The types of these expressions depends only on the type created
19397 by the expression. */
19398 if (TREE_CODE (expression) == NEW_EXPR
19399 || TREE_CODE (expression) == VEC_NEW_EXPR)
19400 {
19401 /* For NEW_EXPR tree nodes created inside a template, either
19402 the object type itself or a TREE_LIST may appear as the
19403 operand 1. */
19404 tree type = TREE_OPERAND (expression, 1);
19405 if (TREE_CODE (type) == TREE_LIST)
19406 /* This is an array type. We need to check array dimensions
19407 as well. */
19408 return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
19409 || value_dependent_expression_p
19410 (TREE_OPERAND (TREE_VALUE (type), 1));
19411 else
19412 return dependent_type_p (type);
19413 }
19414
19415 if (TREE_CODE (expression) == SCOPE_REF)
19416 {
19417 tree scope = TREE_OPERAND (expression, 0);
19418 tree name = TREE_OPERAND (expression, 1);
19419
19420 /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
19421 contains an identifier associated by name lookup with one or more
19422 declarations declared with a dependent type, or...a
19423 nested-name-specifier or qualified-id that names a member of an
19424 unknown specialization. */
19425 return (type_dependent_expression_p (name)
19426 || dependent_scope_p (scope));
19427 }
19428
19429 if (TREE_CODE (expression) == FUNCTION_DECL
19430 && DECL_LANG_SPECIFIC (expression)
19431 && DECL_TEMPLATE_INFO (expression)
19432 && (any_dependent_template_arguments_p
19433 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
19434 return true;
19435
19436 if (TREE_CODE (expression) == TEMPLATE_DECL
19437 && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
19438 return false;
19439
19440 if (TREE_CODE (expression) == STMT_EXPR)
19441 expression = stmt_expr_value_expr (expression);
19442
19443 if (BRACE_ENCLOSED_INITIALIZER_P (expression))
19444 {
19445 tree elt;
19446 unsigned i;
19447
19448 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
19449 {
19450 if (type_dependent_expression_p (elt))
19451 return true;
19452 }
19453 return false;
19454 }
19455
19456 /* A static data member of the current instantiation with incomplete
19457 array type is type-dependent, as the definition and specializations
19458 can have different bounds. */
19459 if (TREE_CODE (expression) == VAR_DECL
19460 && DECL_CLASS_SCOPE_P (expression)
19461 && dependent_type_p (DECL_CONTEXT (expression))
19462 && VAR_HAD_UNKNOWN_BOUND (expression))
19463 return true;
19464
19465 if (TREE_TYPE (expression) == unknown_type_node)
19466 {
19467 if (TREE_CODE (expression) == ADDR_EXPR)
19468 return type_dependent_expression_p (TREE_OPERAND (expression, 0));
19469 if (TREE_CODE (expression) == COMPONENT_REF
19470 || TREE_CODE (expression) == OFFSET_REF)
19471 {
19472 if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
19473 return true;
19474 expression = TREE_OPERAND (expression, 1);
19475 if (TREE_CODE (expression) == IDENTIFIER_NODE)
19476 return false;
19477 }
19478 /* SCOPE_REF with non-null TREE_TYPE is always non-dependent. */
19479 if (TREE_CODE (expression) == SCOPE_REF)
19480 return false;
19481
19482 if (BASELINK_P (expression))
19483 expression = BASELINK_FUNCTIONS (expression);
19484
19485 if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
19486 {
19487 if (any_dependent_template_arguments_p
19488 (TREE_OPERAND (expression, 1)))
19489 return true;
19490 expression = TREE_OPERAND (expression, 0);
19491 }
19492 gcc_assert (TREE_CODE (expression) == OVERLOAD
19493 || TREE_CODE (expression) == FUNCTION_DECL);
19494
19495 while (expression)
19496 {
19497 if (type_dependent_expression_p (OVL_CURRENT (expression)))
19498 return true;
19499 expression = OVL_NEXT (expression);
19500 }
19501 return false;
19502 }
19503
19504 gcc_assert (TREE_CODE (expression) != TYPE_DECL);
19505
19506 return (dependent_type_p (TREE_TYPE (expression)));
19507 }
19508
19509 /* Like type_dependent_expression_p, but it also works while not processing
19510 a template definition, i.e. during substitution or mangling. */
19511
19512 bool
19513 type_dependent_expression_p_push (tree expr)
19514 {
19515 bool b;
19516 ++processing_template_decl;
19517 b = type_dependent_expression_p (expr);
19518 --processing_template_decl;
19519 return b;
19520 }
19521
19522 /* Returns TRUE if ARGS contains a type-dependent expression. */
19523
19524 bool
19525 any_type_dependent_arguments_p (const VEC(tree,gc) *args)
19526 {
19527 unsigned int i;
19528 tree arg;
19529
19530 FOR_EACH_VEC_ELT (tree, args, i, arg)
19531 {
19532 if (type_dependent_expression_p (arg))
19533 return true;
19534 }
19535 return false;
19536 }
19537
19538 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
19539 expressions) contains any type-dependent expressions. */
19540
19541 bool
19542 any_type_dependent_elements_p (const_tree list)
19543 {
19544 for (; list; list = TREE_CHAIN (list))
19545 if (value_dependent_expression_p (TREE_VALUE (list)))
19546 return true;
19547
19548 return false;
19549 }
19550
19551 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
19552 expressions) contains any value-dependent expressions. */
19553
19554 bool
19555 any_value_dependent_elements_p (const_tree list)
19556 {
19557 for (; list; list = TREE_CHAIN (list))
19558 if (value_dependent_expression_p (TREE_VALUE (list)))
19559 return true;
19560
19561 return false;
19562 }
19563
19564 /* Returns TRUE if the ARG (a template argument) is dependent. */
19565
19566 bool
19567 dependent_template_arg_p (tree arg)
19568 {
19569 if (!processing_template_decl)
19570 return false;
19571
19572 /* Assume a template argument that was wrongly written by the user
19573 is dependent. This is consistent with what
19574 any_dependent_template_arguments_p [that calls this function]
19575 does. */
19576 if (!arg || arg == error_mark_node)
19577 return true;
19578
19579 if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
19580 arg = ARGUMENT_PACK_SELECT_ARG (arg);
19581
19582 if (TREE_CODE (arg) == TEMPLATE_DECL
19583 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
19584 return dependent_template_p (arg);
19585 else if (ARGUMENT_PACK_P (arg))
19586 {
19587 tree args = ARGUMENT_PACK_ARGS (arg);
19588 int i, len = TREE_VEC_LENGTH (args);
19589 for (i = 0; i < len; ++i)
19590 {
19591 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
19592 return true;
19593 }
19594
19595 return false;
19596 }
19597 else if (TYPE_P (arg))
19598 return dependent_type_p (arg);
19599 else
19600 return (type_dependent_expression_p (arg)
19601 || value_dependent_expression_p (arg));
19602 }
19603
19604 /* Returns true if ARGS (a collection of template arguments) contains
19605 any types that require structural equality testing. */
19606
19607 bool
19608 any_template_arguments_need_structural_equality_p (tree args)
19609 {
19610 int i;
19611 int j;
19612
19613 if (!args)
19614 return false;
19615 if (args == error_mark_node)
19616 return true;
19617
19618 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
19619 {
19620 tree level = TMPL_ARGS_LEVEL (args, i + 1);
19621 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
19622 {
19623 tree arg = TREE_VEC_ELT (level, j);
19624 tree packed_args = NULL_TREE;
19625 int k, len = 1;
19626
19627 if (ARGUMENT_PACK_P (arg))
19628 {
19629 /* Look inside the argument pack. */
19630 packed_args = ARGUMENT_PACK_ARGS (arg);
19631 len = TREE_VEC_LENGTH (packed_args);
19632 }
19633
19634 for (k = 0; k < len; ++k)
19635 {
19636 if (packed_args)
19637 arg = TREE_VEC_ELT (packed_args, k);
19638
19639 if (error_operand_p (arg))
19640 return true;
19641 else if (TREE_CODE (arg) == TEMPLATE_DECL
19642 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
19643 continue;
19644 else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
19645 return true;
19646 else if (!TYPE_P (arg) && TREE_TYPE (arg)
19647 && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
19648 return true;
19649 }
19650 }
19651 }
19652
19653 return false;
19654 }
19655
19656 /* Returns true if ARGS (a collection of template arguments) contains
19657 any dependent arguments. */
19658
19659 bool
19660 any_dependent_template_arguments_p (const_tree args)
19661 {
19662 int i;
19663 int j;
19664
19665 if (!args)
19666 return false;
19667 if (args == error_mark_node)
19668 return true;
19669
19670 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
19671 {
19672 const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
19673 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
19674 if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
19675 return true;
19676 }
19677
19678 return false;
19679 }
19680
19681 /* Returns TRUE if the template TMPL is dependent. */
19682
19683 bool
19684 dependent_template_p (tree tmpl)
19685 {
19686 if (TREE_CODE (tmpl) == OVERLOAD)
19687 {
19688 while (tmpl)
19689 {
19690 if (dependent_template_p (OVL_CURRENT (tmpl)))
19691 return true;
19692 tmpl = OVL_NEXT (tmpl);
19693 }
19694 return false;
19695 }
19696
19697 /* Template template parameters are dependent. */
19698 if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
19699 || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
19700 return true;
19701 /* So are names that have not been looked up. */
19702 if (TREE_CODE (tmpl) == SCOPE_REF
19703 || TREE_CODE (tmpl) == IDENTIFIER_NODE)
19704 return true;
19705 /* So are member templates of dependent classes. */
19706 if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
19707 return dependent_type_p (DECL_CONTEXT (tmpl));
19708 return false;
19709 }
19710
19711 /* Returns TRUE if the specialization TMPL<ARGS> is dependent. */
19712
19713 bool
19714 dependent_template_id_p (tree tmpl, tree args)
19715 {
19716 return (dependent_template_p (tmpl)
19717 || any_dependent_template_arguments_p (args));
19718 }
19719
19720 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
19721 is dependent. */
19722
19723 bool
19724 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
19725 {
19726 int i;
19727
19728 if (!processing_template_decl)
19729 return false;
19730
19731 for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
19732 {
19733 tree decl = TREE_VEC_ELT (declv, i);
19734 tree init = TREE_VEC_ELT (initv, i);
19735 tree cond = TREE_VEC_ELT (condv, i);
19736 tree incr = TREE_VEC_ELT (incrv, i);
19737
19738 if (type_dependent_expression_p (decl))
19739 return true;
19740
19741 if (init && type_dependent_expression_p (init))
19742 return true;
19743
19744 if (type_dependent_expression_p (cond))
19745 return true;
19746
19747 if (COMPARISON_CLASS_P (cond)
19748 && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
19749 || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
19750 return true;
19751
19752 if (TREE_CODE (incr) == MODOP_EXPR)
19753 {
19754 if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
19755 || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
19756 return true;
19757 }
19758 else if (type_dependent_expression_p (incr))
19759 return true;
19760 else if (TREE_CODE (incr) == MODIFY_EXPR)
19761 {
19762 if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
19763 return true;
19764 else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
19765 {
19766 tree t = TREE_OPERAND (incr, 1);
19767 if (type_dependent_expression_p (TREE_OPERAND (t, 0))
19768 || type_dependent_expression_p (TREE_OPERAND (t, 1)))
19769 return true;
19770 }
19771 }
19772 }
19773
19774 return false;
19775 }
19776
19777 /* TYPE is a TYPENAME_TYPE. Returns the ordinary TYPE to which the
19778 TYPENAME_TYPE corresponds. Returns the original TYPENAME_TYPE if
19779 no such TYPE can be found. Note that this function peers inside
19780 uninstantiated templates and therefore should be used only in
19781 extremely limited situations. ONLY_CURRENT_P restricts this
19782 peering to the currently open classes hierarchy (which is required
19783 when comparing types). */
19784
19785 tree
19786 resolve_typename_type (tree type, bool only_current_p)
19787 {
19788 tree scope;
19789 tree name;
19790 tree decl;
19791 int quals;
19792 tree pushed_scope;
19793 tree result;
19794
19795 gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
19796
19797 scope = TYPE_CONTEXT (type);
19798 /* Usually the non-qualified identifier of a TYPENAME_TYPE is
19799 TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
19800 a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
19801 the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
19802 identifier of the TYPENAME_TYPE anymore.
19803 So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
19804 TYPENAME_TYPE instead, we avoid messing up with a possible
19805 typedef variant case. */
19806 name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
19807
19808 /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
19809 it first before we can figure out what NAME refers to. */
19810 if (TREE_CODE (scope) == TYPENAME_TYPE)
19811 scope = resolve_typename_type (scope, only_current_p);
19812 /* If we don't know what SCOPE refers to, then we cannot resolve the
19813 TYPENAME_TYPE. */
19814 if (TREE_CODE (scope) == TYPENAME_TYPE)
19815 return type;
19816 /* If the SCOPE is a template type parameter, we have no way of
19817 resolving the name. */
19818 if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
19819 return type;
19820 /* If the SCOPE is not the current instantiation, there's no reason
19821 to look inside it. */
19822 if (only_current_p && !currently_open_class (scope))
19823 return type;
19824 /* If this is a typedef, we don't want to look inside (c++/11987). */
19825 if (typedef_variant_p (type))
19826 return type;
19827 /* If SCOPE isn't the template itself, it will not have a valid
19828 TYPE_FIELDS list. */
19829 if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
19830 /* scope is either the template itself or a compatible instantiation
19831 like X<T>, so look up the name in the original template. */
19832 scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
19833 else
19834 /* scope is a partial instantiation, so we can't do the lookup or we
19835 will lose the template arguments. */
19836 return type;
19837 /* Enter the SCOPE so that name lookup will be resolved as if we
19838 were in the class definition. In particular, SCOPE will no
19839 longer be considered a dependent type. */
19840 pushed_scope = push_scope (scope);
19841 /* Look up the declaration. */
19842 decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
19843
19844 result = NULL_TREE;
19845
19846 /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
19847 find a TEMPLATE_DECL. Otherwise, we want to find a TYPE_DECL. */
19848 if (!decl)
19849 /*nop*/;
19850 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
19851 && TREE_CODE (decl) == TYPE_DECL)
19852 {
19853 result = TREE_TYPE (decl);
19854 if (result == error_mark_node)
19855 result = NULL_TREE;
19856 }
19857 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
19858 && DECL_CLASS_TEMPLATE_P (decl))
19859 {
19860 tree tmpl;
19861 tree args;
19862 /* Obtain the template and the arguments. */
19863 tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
19864 args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
19865 /* Instantiate the template. */
19866 result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
19867 /*entering_scope=*/0,
19868 tf_error | tf_user);
19869 if (result == error_mark_node)
19870 result = NULL_TREE;
19871 }
19872
19873 /* Leave the SCOPE. */
19874 if (pushed_scope)
19875 pop_scope (pushed_scope);
19876
19877 /* If we failed to resolve it, return the original typename. */
19878 if (!result)
19879 return type;
19880
19881 /* If lookup found a typename type, resolve that too. */
19882 if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
19883 {
19884 /* Ill-formed programs can cause infinite recursion here, so we
19885 must catch that. */
19886 TYPENAME_IS_RESOLVING_P (type) = 1;
19887 result = resolve_typename_type (result, only_current_p);
19888 TYPENAME_IS_RESOLVING_P (type) = 0;
19889 }
19890
19891 /* Qualify the resulting type. */
19892 quals = cp_type_quals (type);
19893 if (quals)
19894 result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
19895
19896 return result;
19897 }
19898
19899 /* EXPR is an expression which is not type-dependent. Return a proxy
19900 for EXPR that can be used to compute the types of larger
19901 expressions containing EXPR. */
19902
19903 tree
19904 build_non_dependent_expr (tree expr)
19905 {
19906 tree inner_expr;
19907
19908 #ifdef ENABLE_CHECKING
19909 /* Try to get a constant value for all non-type-dependent expressions in
19910 order to expose bugs in *_dependent_expression_p and constexpr. */
19911 if (cxx_dialect >= cxx0x)
19912 maybe_constant_value (fold_non_dependent_expr_sfinae (expr, tf_none));
19913 #endif
19914
19915 /* Preserve OVERLOADs; the functions must be available to resolve
19916 types. */
19917 inner_expr = expr;
19918 if (TREE_CODE (inner_expr) == STMT_EXPR)
19919 inner_expr = stmt_expr_value_expr (inner_expr);
19920 if (TREE_CODE (inner_expr) == ADDR_EXPR)
19921 inner_expr = TREE_OPERAND (inner_expr, 0);
19922 if (TREE_CODE (inner_expr) == COMPONENT_REF)
19923 inner_expr = TREE_OPERAND (inner_expr, 1);
19924 if (is_overloaded_fn (inner_expr)
19925 || TREE_CODE (inner_expr) == OFFSET_REF)
19926 return expr;
19927 /* There is no need to return a proxy for a variable. */
19928 if (TREE_CODE (expr) == VAR_DECL)
19929 return expr;
19930 /* Preserve string constants; conversions from string constants to
19931 "char *" are allowed, even though normally a "const char *"
19932 cannot be used to initialize a "char *". */
19933 if (TREE_CODE (expr) == STRING_CST)
19934 return expr;
19935 /* Preserve arithmetic constants, as an optimization -- there is no
19936 reason to create a new node. */
19937 if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
19938 return expr;
19939 /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
19940 There is at least one place where we want to know that a
19941 particular expression is a throw-expression: when checking a ?:
19942 expression, there are special rules if the second or third
19943 argument is a throw-expression. */
19944 if (TREE_CODE (expr) == THROW_EXPR)
19945 return expr;
19946
19947 /* Don't wrap an initializer list, we need to be able to look inside. */
19948 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
19949 return expr;
19950
19951 if (TREE_CODE (expr) == COND_EXPR)
19952 return build3 (COND_EXPR,
19953 TREE_TYPE (expr),
19954 TREE_OPERAND (expr, 0),
19955 (TREE_OPERAND (expr, 1)
19956 ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
19957 : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
19958 build_non_dependent_expr (TREE_OPERAND (expr, 2)));
19959 if (TREE_CODE (expr) == COMPOUND_EXPR
19960 && !COMPOUND_EXPR_OVERLOADED (expr))
19961 return build2 (COMPOUND_EXPR,
19962 TREE_TYPE (expr),
19963 TREE_OPERAND (expr, 0),
19964 build_non_dependent_expr (TREE_OPERAND (expr, 1)));
19965
19966 /* If the type is unknown, it can't really be non-dependent */
19967 gcc_assert (TREE_TYPE (expr) != unknown_type_node);
19968
19969 /* Otherwise, build a NON_DEPENDENT_EXPR. */
19970 return build1 (NON_DEPENDENT_EXPR, TREE_TYPE (expr), expr);
19971 }
19972
19973 /* ARGS is a vector of expressions as arguments to a function call.
19974 Replace the arguments with equivalent non-dependent expressions.
19975 This modifies ARGS in place. */
19976
19977 void
19978 make_args_non_dependent (VEC(tree,gc) *args)
19979 {
19980 unsigned int ix;
19981 tree arg;
19982
19983 FOR_EACH_VEC_ELT (tree, args, ix, arg)
19984 {
19985 tree newarg = build_non_dependent_expr (arg);
19986 if (newarg != arg)
19987 VEC_replace (tree, args, ix, newarg);
19988 }
19989 }
19990
19991 /* Returns a type which represents 'auto'. We use a TEMPLATE_TYPE_PARM
19992 with a level one deeper than the actual template parms. */
19993
19994 tree
19995 make_auto (void)
19996 {
19997 tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
19998 TYPE_NAME (au) = build_decl (BUILTINS_LOCATION,
19999 TYPE_DECL, get_identifier ("auto"), au);
20000 TYPE_STUB_DECL (au) = TYPE_NAME (au);
20001 TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
20002 (0, processing_template_decl + 1, processing_template_decl + 1,
20003 0, TYPE_NAME (au), NULL_TREE);
20004 TYPE_CANONICAL (au) = canonical_type_parameter (au);
20005 DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
20006 SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
20007
20008 return au;
20009 }
20010
20011 /* Given type ARG, return std::initializer_list<ARG>. */
20012
20013 static tree
20014 listify (tree arg)
20015 {
20016 tree std_init_list = namespace_binding
20017 (get_identifier ("initializer_list"), std_node);
20018 tree argvec;
20019 if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
20020 {
20021 error ("deducing from brace-enclosed initializer list requires "
20022 "#include <initializer_list>");
20023 return error_mark_node;
20024 }
20025 argvec = make_tree_vec (1);
20026 TREE_VEC_ELT (argvec, 0) = arg;
20027 return lookup_template_class (std_init_list, argvec, NULL_TREE,
20028 NULL_TREE, 0, tf_warning_or_error);
20029 }
20030
20031 /* Replace auto in TYPE with std::initializer_list<auto>. */
20032
20033 static tree
20034 listify_autos (tree type, tree auto_node)
20035 {
20036 tree init_auto = listify (auto_node);
20037 tree argvec = make_tree_vec (1);
20038 TREE_VEC_ELT (argvec, 0) = init_auto;
20039 if (processing_template_decl)
20040 argvec = add_to_template_args (current_template_args (), argvec);
20041 return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
20042 }
20043
20044 /* walk_tree helper for do_auto_deduction. */
20045
20046 static tree
20047 contains_auto_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
20048 void *type)
20049 {
20050 /* Is this a variable with the type we're looking for? */
20051 if (DECL_P (*tp)
20052 && TREE_TYPE (*tp) == type)
20053 return *tp;
20054 else
20055 return NULL_TREE;
20056 }
20057
20058 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
20059 from INIT. AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE. */
20060
20061 tree
20062 do_auto_deduction (tree type, tree init, tree auto_node)
20063 {
20064 tree parms, tparms, targs;
20065 tree args[1];
20066 tree decl;
20067 int val;
20068
20069 if (processing_template_decl
20070 && (TREE_TYPE (init) == NULL_TREE
20071 || BRACE_ENCLOSED_INITIALIZER_P (init)))
20072 /* Not enough information to try this yet. */
20073 return type;
20074
20075 /* The name of the object being declared shall not appear in the
20076 initializer expression. */
20077 decl = cp_walk_tree_without_duplicates (&init, contains_auto_r, type);
20078 if (decl)
20079 {
20080 error ("variable %q#D with %<auto%> type used in its own "
20081 "initializer", decl);
20082 return error_mark_node;
20083 }
20084
20085 /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
20086 with either a new invented type template parameter U or, if the
20087 initializer is a braced-init-list (8.5.4), with
20088 std::initializer_list<U>. */
20089 if (BRACE_ENCLOSED_INITIALIZER_P (init))
20090 type = listify_autos (type, auto_node);
20091
20092 init = resolve_nondeduced_context (init);
20093
20094 parms = build_tree_list (NULL_TREE, type);
20095 args[0] = init;
20096 tparms = make_tree_vec (1);
20097 targs = make_tree_vec (1);
20098 TREE_VEC_ELT (tparms, 0)
20099 = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
20100 val = type_unification_real (tparms, targs, parms, args, 1, 0,
20101 DEDUCE_CALL, LOOKUP_NORMAL,
20102 /*explain_p=*/false);
20103 if (val > 0)
20104 {
20105 if (processing_template_decl)
20106 /* Try again at instantiation time. */
20107 return type;
20108 if (type && type != error_mark_node)
20109 /* If type is error_mark_node a diagnostic must have been
20110 emitted by now. Also, having a mention to '<type error>'
20111 in the diagnostic is not really useful to the user. */
20112 error ("unable to deduce %qT from %qE", type, init);
20113 return error_mark_node;
20114 }
20115
20116 /* If the list of declarators contains more than one declarator, the type
20117 of each declared variable is determined as described above. If the
20118 type deduced for the template parameter U is not the same in each
20119 deduction, the program is ill-formed. */
20120 if (TREE_TYPE (auto_node)
20121 && !same_type_p (TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0)))
20122 {
20123 error ("inconsistent deduction for %qT: %qT and then %qT",
20124 auto_node, TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0));
20125 return error_mark_node;
20126 }
20127 TREE_TYPE (auto_node) = TREE_VEC_ELT (targs, 0);
20128
20129 if (processing_template_decl)
20130 targs = add_to_template_args (current_template_args (), targs);
20131 return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
20132 }
20133
20134 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
20135 result. */
20136
20137 tree
20138 splice_late_return_type (tree type, tree late_return_type)
20139 {
20140 tree argvec;
20141
20142 if (late_return_type == NULL_TREE)
20143 return type;
20144 argvec = make_tree_vec (1);
20145 TREE_VEC_ELT (argvec, 0) = late_return_type;
20146 if (processing_template_parmlist)
20147 /* For a late-specified return type in a template type-parameter, we
20148 need to add a dummy argument level for its parmlist. */
20149 argvec = add_to_template_args
20150 (make_tree_vec (processing_template_parmlist), argvec);
20151 if (current_template_parms)
20152 argvec = add_to_template_args (current_template_args (), argvec);
20153 return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
20154 }
20155
20156 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto'. */
20157
20158 bool
20159 is_auto (const_tree type)
20160 {
20161 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
20162 && TYPE_IDENTIFIER (type) == get_identifier ("auto"))
20163 return true;
20164 else
20165 return false;
20166 }
20167
20168 /* Returns true iff TYPE contains a use of 'auto'. Since auto can only
20169 appear as a type-specifier for the declaration in question, we don't
20170 have to look through the whole type. */
20171
20172 tree
20173 type_uses_auto (tree type)
20174 {
20175 enum tree_code code;
20176 if (is_auto (type))
20177 return type;
20178
20179 code = TREE_CODE (type);
20180
20181 if (code == POINTER_TYPE || code == REFERENCE_TYPE
20182 || code == OFFSET_TYPE || code == FUNCTION_TYPE
20183 || code == METHOD_TYPE || code == ARRAY_TYPE)
20184 return type_uses_auto (TREE_TYPE (type));
20185
20186 if (TYPE_PTRMEMFUNC_P (type))
20187 return type_uses_auto (TREE_TYPE (TREE_TYPE
20188 (TYPE_PTRMEMFUNC_FN_TYPE (type))));
20189
20190 return NULL_TREE;
20191 }
20192
20193 /* For a given template T, return the vector of typedefs referenced
20194 in T for which access check is needed at T instantiation time.
20195 T is either a FUNCTION_DECL or a RECORD_TYPE.
20196 Those typedefs were added to T by the function
20197 append_type_to_template_for_access_check. */
20198
20199 VEC(qualified_typedef_usage_t,gc)*
20200 get_types_needing_access_check (tree t)
20201 {
20202 tree ti;
20203 VEC(qualified_typedef_usage_t,gc) *result = NULL;
20204
20205 if (!t || t == error_mark_node)
20206 return NULL;
20207
20208 if (!(ti = get_template_info (t)))
20209 return NULL;
20210
20211 if (CLASS_TYPE_P (t)
20212 || TREE_CODE (t) == FUNCTION_DECL)
20213 {
20214 if (!TI_TEMPLATE (ti))
20215 return NULL;
20216
20217 result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
20218 }
20219
20220 return result;
20221 }
20222
20223 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
20224 tied to T. That list of typedefs will be access checked at
20225 T instantiation time.
20226 T is either a FUNCTION_DECL or a RECORD_TYPE.
20227 TYPE_DECL is a TYPE_DECL node representing a typedef.
20228 SCOPE is the scope through which TYPE_DECL is accessed.
20229 LOCATION is the location of the usage point of TYPE_DECL.
20230
20231 This function is a subroutine of
20232 append_type_to_template_for_access_check. */
20233
20234 static void
20235 append_type_to_template_for_access_check_1 (tree t,
20236 tree type_decl,
20237 tree scope,
20238 location_t location)
20239 {
20240 qualified_typedef_usage_t typedef_usage;
20241 tree ti;
20242
20243 if (!t || t == error_mark_node)
20244 return;
20245
20246 gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
20247 || CLASS_TYPE_P (t))
20248 && type_decl
20249 && TREE_CODE (type_decl) == TYPE_DECL
20250 && scope);
20251
20252 if (!(ti = get_template_info (t)))
20253 return;
20254
20255 gcc_assert (TI_TEMPLATE (ti));
20256
20257 typedef_usage.typedef_decl = type_decl;
20258 typedef_usage.context = scope;
20259 typedef_usage.locus = location;
20260
20261 VEC_safe_push (qualified_typedef_usage_t, gc,
20262 TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti),
20263 &typedef_usage);
20264 }
20265
20266 /* Append TYPE_DECL to the template TEMPL.
20267 TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
20268 At TEMPL instanciation time, TYPE_DECL will be checked to see
20269 if it can be accessed through SCOPE.
20270 LOCATION is the location of the usage point of TYPE_DECL.
20271
20272 e.g. consider the following code snippet:
20273
20274 class C
20275 {
20276 typedef int myint;
20277 };
20278
20279 template<class U> struct S
20280 {
20281 C::myint mi; // <-- usage point of the typedef C::myint
20282 };
20283
20284 S<char> s;
20285
20286 At S<char> instantiation time, we need to check the access of C::myint
20287 In other words, we need to check the access of the myint typedef through
20288 the C scope. For that purpose, this function will add the myint typedef
20289 and the scope C through which its being accessed to a list of typedefs
20290 tied to the template S. That list will be walked at template instantiation
20291 time and access check performed on each typedefs it contains.
20292 Note that this particular code snippet should yield an error because
20293 myint is private to C. */
20294
20295 void
20296 append_type_to_template_for_access_check (tree templ,
20297 tree type_decl,
20298 tree scope,
20299 location_t location)
20300 {
20301 qualified_typedef_usage_t *iter;
20302 int i;
20303
20304 gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
20305
20306 /* Make sure we don't append the type to the template twice. */
20307 FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
20308 get_types_needing_access_check (templ),
20309 i, iter)
20310 if (iter->typedef_decl == type_decl && scope == iter->context)
20311 return;
20312
20313 append_type_to_template_for_access_check_1 (templ, type_decl,
20314 scope, location);
20315 }
20316
20317 /* Set up the hash tables for template instantiations. */
20318
20319 void
20320 init_template_processing (void)
20321 {
20322 decl_specializations = htab_create_ggc (37,
20323 hash_specialization,
20324 eq_specializations,
20325 ggc_free);
20326 type_specializations = htab_create_ggc (37,
20327 hash_specialization,
20328 eq_specializations,
20329 ggc_free);
20330 }
20331
20332 /* Print stats about the template hash tables for -fstats. */
20333
20334 void
20335 print_template_statistics (void)
20336 {
20337 fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
20338 "%f collisions\n", (long) htab_size (decl_specializations),
20339 (long) htab_elements (decl_specializations),
20340 htab_collisions (decl_specializations));
20341 fprintf (stderr, "type_specializations: size %ld, %ld elements, "
20342 "%f collisions\n", (long) htab_size (type_specializations),
20343 (long) htab_elements (type_specializations),
20344 htab_collisions (type_specializations));
20345 }
20346
20347 #include "gt-cp-pt.h"