1 /* Handle parameterized types (templates) for GNU -*- C++ -*-.
2    Copyright (C) 1992-2014 Free Software Foundation, Inc.
3    Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
4    Rewritten by Jason Merrill (jason@cygnus.com).
5 
6 This file is part of GCC.
7 
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3, or (at your option)
11 any later version.
12 
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17 
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
21 
22 /* Known bugs or deficiencies include:
23 
24      all methods must be provided in header files; can't use a source
25      file that contains only the method templates and "just win".  */
26 
27 #include "config.h"
28 #include "system.h"
29 #include "coretypes.h"
30 #include "tm.h"
31 #include "tree.h"
32 #include "stringpool.h"
33 #include "varasm.h"
34 #include "attribs.h"
35 #include "stor-layout.h"
36 #include "intl.h"
37 #include "pointer-set.h"
38 #include "flags.h"
39 #include "cp-tree.h"
40 #include "c-family/c-common.h"
41 #include "c-family/c-objc.h"
42 #include "cp-objcp-common.h"
43 #include "tree-inline.h"
44 #include "decl.h"
45 #include "toplev.h"
46 #include "timevar.h"
47 #include "tree-iterator.h"
48 #include "type-utils.h"
49 #include "gimplify.h"
50 
51 /* The type of functions taking a tree, and some additional data, and
52    returning an int.  */
53 typedef int (*tree_fn_t) (tree, void*);
54 
55 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
56    instantiations have been deferred, either because their definitions
57    were not yet available, or because we were putting off doing the work.  */
58 struct GTY ((chain_next ("%h.next"))) pending_template {
59   struct pending_template *next;
60   struct tinst_level *tinst;
61 };
62 
63 static GTY(()) struct pending_template *pending_templates;
64 static GTY(()) struct pending_template *last_pending_template;
65 
66 int processing_template_parmlist;
67 static int template_header_count;
68 
69 static GTY(()) tree saved_trees;
70 static vec<int> inline_parm_levels;
71 
72 static GTY(()) struct tinst_level *current_tinst_level;
73 
74 static GTY(()) tree saved_access_scope;
75 
76 /* Live only within one (recursive) call to tsubst_expr.  We use
77    this to pass the statement expression node from the STMT_EXPR
78    to the EXPR_STMT that is its result.  */
79 static tree cur_stmt_expr;
80 
81 /* True if we've recursed into fn_type_unification too many times.  */
82 static bool excessive_deduction_depth;
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, va_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 bool resolve_overloaded_unification (tree, tree, tree, tree,
121 					    unification_kind_t, int,
122 					    bool);
123 static int try_one_overload (tree, tree, tree, tree, tree,
124 			     unification_kind_t, int, bool, bool);
125 static int unify (tree, tree, tree, tree, int, bool);
126 static void add_pending_template (tree);
127 static tree reopen_tinst_level (struct tinst_level *);
128 static tree tsubst_initializer_list (tree, tree);
129 static tree get_class_bindings (tree, tree, tree, tree);
130 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
131 				   bool, bool);
132 static tree coerce_innermost_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 				  vec<deferred_access_check, va_gc> **,
143 				  bool);
144 static void note_template_header (int);
145 static tree convert_nontype_argument_function (tree, tree);
146 static tree convert_nontype_argument (tree, tree, tsubst_flags_t);
147 static tree convert_template_argument (tree, tree, tree,
148 				       tsubst_flags_t, int, tree);
149 static int for_each_template_parm (tree, tree_fn_t, void*,
150 				   struct pointer_set_t*, bool);
151 static tree expand_template_argument_pack (tree);
152 static tree build_template_parm_index (int, int, int, tree, tree);
153 static bool inline_needs_template_parms (tree, bool);
154 static void push_inline_template_parms_recursive (tree, int);
155 static tree retrieve_local_specialization (tree);
156 static void register_local_specialization (tree, tree);
157 static hashval_t hash_specialization (const void *p);
158 static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
159 static int mark_template_parm (tree, void *);
160 static int template_parm_this_level_p (tree, void *);
161 static tree tsubst_friend_function (tree, tree);
162 static tree tsubst_friend_class (tree, tree);
163 static int can_complete_type_without_circularity (tree);
164 static tree get_bindings (tree, tree, tree, bool);
165 static int template_decl_level (tree);
166 static int check_cv_quals_for_unify (int, tree, tree);
167 static void template_parm_level_and_index (tree, int*, int*);
168 static int unify_pack_expansion (tree, tree, tree,
169 				 tree, unification_kind_t, bool, bool);
170 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
171 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
172 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
173 static void regenerate_decl_from_template (tree, tree);
174 static tree most_specialized_class (tree, tsubst_flags_t);
175 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
176 static tree tsubst_arg_types (tree, tree, tree, tsubst_flags_t, tree);
177 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
178 static bool check_specialization_scope (void);
179 static tree process_partial_specialization (tree);
180 static void set_current_access_from_decl (tree);
181 static enum template_base_result get_template_base (tree, tree, tree, tree,
182 						    bool , tree *);
183 static tree try_class_unification (tree, tree, tree, tree, bool);
184 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
185 					   tree, tree);
186 static bool template_template_parm_bindings_ok_p (tree, tree);
187 static int template_args_equal (tree, tree);
188 static void tsubst_default_arguments (tree, tsubst_flags_t);
189 static tree for_each_template_parm_r (tree *, int *, void *);
190 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
191 static void copy_default_args_to_explicit_spec (tree);
192 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
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 tree current_template_args (void);
207 static tree tsubst_template_parm (tree, tree, tsubst_flags_t);
208 static tree instantiate_alias_template (tree, tree, tsubst_flags_t);
209 
210 /* Make the current scope suitable for access checking when we are
211    processing T.  T can be FUNCTION_DECL for instantiated function
212    template, VAR_DECL for static member variable, or TYPE_DECL for
213    alias template (needed by instantiate_decl).  */
214 
215 static void
push_access_scope(tree t)216 push_access_scope (tree t)
217 {
218   gcc_assert (VAR_OR_FUNCTION_DECL_P (t)
219 	      || TREE_CODE (t) == TYPE_DECL);
220 
221   if (DECL_FRIEND_CONTEXT (t))
222     push_nested_class (DECL_FRIEND_CONTEXT (t));
223   else if (DECL_CLASS_SCOPE_P (t))
224     push_nested_class (DECL_CONTEXT (t));
225   else
226     push_to_top_level ();
227 
228   if (TREE_CODE (t) == FUNCTION_DECL)
229     {
230       saved_access_scope = tree_cons
231 	(NULL_TREE, current_function_decl, saved_access_scope);
232       current_function_decl = t;
233     }
234 }
235 
236 /* Restore the scope set up by push_access_scope.  T is the node we
237    are processing.  */
238 
239 static void
pop_access_scope(tree t)240 pop_access_scope (tree t)
241 {
242   if (TREE_CODE (t) == FUNCTION_DECL)
243     {
244       current_function_decl = TREE_VALUE (saved_access_scope);
245       saved_access_scope = TREE_CHAIN (saved_access_scope);
246     }
247 
248   if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
249     pop_nested_class ();
250   else
251     pop_from_top_level ();
252 }
253 
254 /* Do any processing required when DECL (a member template
255    declaration) is finished.  Returns the TEMPLATE_DECL corresponding
256    to DECL, unless it is a specialization, in which case the DECL
257    itself is returned.  */
258 
259 tree
finish_member_template_decl(tree decl)260 finish_member_template_decl (tree decl)
261 {
262   if (decl == error_mark_node)
263     return error_mark_node;
264 
265   gcc_assert (DECL_P (decl));
266 
267   if (TREE_CODE (decl) == TYPE_DECL)
268     {
269       tree type;
270 
271       type = TREE_TYPE (decl);
272       if (type == error_mark_node)
273 	return error_mark_node;
274       if (MAYBE_CLASS_TYPE_P (type)
275 	  && CLASSTYPE_TEMPLATE_INFO (type)
276 	  && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
277 	{
278 	  tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
279 	  check_member_template (tmpl);
280 	  return tmpl;
281 	}
282       return NULL_TREE;
283     }
284   else if (TREE_CODE (decl) == FIELD_DECL)
285     error ("data member %qD cannot be a member template", decl);
286   else if (DECL_TEMPLATE_INFO (decl))
287     {
288       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
289 	{
290 	  check_member_template (DECL_TI_TEMPLATE (decl));
291 	  return DECL_TI_TEMPLATE (decl);
292 	}
293       else
294 	return decl;
295     }
296   else
297     error ("invalid member template declaration %qD", decl);
298 
299   return error_mark_node;
300 }
301 
302 /* Create a template info node.  */
303 
304 tree
build_template_info(tree template_decl,tree template_args)305 build_template_info (tree template_decl, tree template_args)
306 {
307   tree result = make_node (TEMPLATE_INFO);
308   TI_TEMPLATE (result) = template_decl;
309   TI_ARGS (result) = template_args;
310   return result;
311 }
312 
313 /* Return the template info node corresponding to T, whatever T is.  */
314 
315 tree
get_template_info(const_tree t)316 get_template_info (const_tree t)
317 {
318   tree tinfo = NULL_TREE;
319 
320   if (!t || t == error_mark_node)
321     return NULL;
322 
323   if (TREE_CODE (t) == NAMESPACE_DECL)
324     return NULL;
325 
326   if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
327     tinfo = DECL_TEMPLATE_INFO (t);
328 
329   if (!tinfo && DECL_IMPLICIT_TYPEDEF_P (t))
330     t = TREE_TYPE (t);
331 
332   if (OVERLOAD_TYPE_P (t))
333     tinfo = TYPE_TEMPLATE_INFO (t);
334   else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
335     tinfo = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
336 
337   return tinfo;
338 }
339 
340 /* Returns the template nesting level of the indicated class TYPE.
341 
342    For example, in:
343      template <class T>
344      struct A
345      {
346        template <class U>
347        struct B {};
348      };
349 
350    A<T>::B<U> has depth two, while A<T> has depth one.
351    Both A<T>::B<int> and A<int>::B<U> have depth one, if
352    they are instantiations, not specializations.
353 
354    This function is guaranteed to return 0 if passed NULL_TREE so
355    that, for example, `template_class_depth (current_class_type)' is
356    always safe.  */
357 
358 int
template_class_depth(tree type)359 template_class_depth (tree type)
360 {
361   int depth;
362 
363   for (depth = 0;
364        type && TREE_CODE (type) != NAMESPACE_DECL;
365        type = (TREE_CODE (type) == FUNCTION_DECL)
366 	 ? CP_DECL_CONTEXT (type) : CP_TYPE_CONTEXT (type))
367     {
368       tree tinfo = get_template_info (type);
369 
370       if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
371 	  && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
372 	++depth;
373     }
374 
375   return depth;
376 }
377 
378 /* Subroutine of maybe_begin_member_template_processing.
379    Returns true if processing DECL needs us to push template parms.  */
380 
381 static bool
inline_needs_template_parms(tree decl,bool nsdmi)382 inline_needs_template_parms (tree decl, bool nsdmi)
383 {
384   if (!decl || (!nsdmi && ! DECL_TEMPLATE_INFO (decl)))
385     return false;
386 
387   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
388 	  > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
389 }
390 
391 /* Subroutine of maybe_begin_member_template_processing.
392    Push the template parms in PARMS, starting from LEVELS steps into the
393    chain, and ending at the beginning, since template parms are listed
394    innermost first.  */
395 
396 static void
push_inline_template_parms_recursive(tree parmlist,int levels)397 push_inline_template_parms_recursive (tree parmlist, int levels)
398 {
399   tree parms = TREE_VALUE (parmlist);
400   int i;
401 
402   if (levels > 1)
403     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
404 
405   ++processing_template_decl;
406   current_template_parms
407     = tree_cons (size_int (processing_template_decl),
408 		 parms, current_template_parms);
409   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
410 
411   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
412 	       NULL);
413   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
414     {
415       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
416 
417       if (error_operand_p (parm))
418 	continue;
419 
420       gcc_assert (DECL_P (parm));
421 
422       switch (TREE_CODE (parm))
423 	{
424 	case TYPE_DECL:
425 	case TEMPLATE_DECL:
426 	  pushdecl (parm);
427 	  break;
428 
429 	case PARM_DECL:
430 	  {
431 	    /* Make a CONST_DECL as is done in process_template_parm.
432 	       It is ugly that we recreate this here; the original
433 	       version built in process_template_parm is no longer
434 	       available.  */
435 	    tree decl = build_decl (DECL_SOURCE_LOCATION (parm),
436 				    CONST_DECL, DECL_NAME (parm),
437 				    TREE_TYPE (parm));
438 	    DECL_ARTIFICIAL (decl) = 1;
439 	    TREE_CONSTANT (decl) = 1;
440 	    TREE_READONLY (decl) = 1;
441 	    DECL_INITIAL (decl) = DECL_INITIAL (parm);
442 	    SET_DECL_TEMPLATE_PARM_P (decl);
443 	    pushdecl (decl);
444 	  }
445 	  break;
446 
447 	default:
448 	  gcc_unreachable ();
449 	}
450     }
451 }
452 
453 /* Restore the template parameter context for a member template, a
454    friend template defined in a class definition, or a non-template
455    member of template class.  */
456 
457 void
maybe_begin_member_template_processing(tree decl)458 maybe_begin_member_template_processing (tree decl)
459 {
460   tree parms;
461   int levels = 0;
462   bool nsdmi = TREE_CODE (decl) == FIELD_DECL;
463 
464   if (nsdmi)
465     {
466       tree ctx = DECL_CONTEXT (decl);
467       decl = (CLASSTYPE_TEMPLATE_INFO (ctx)
468 	      /* Disregard full specializations (c++/60999).  */
469 	      && uses_template_parms (ctx)
470 	      ? CLASSTYPE_TI_TEMPLATE (ctx) : NULL_TREE);
471     }
472 
473   if (inline_needs_template_parms (decl, nsdmi))
474     {
475       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
476       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
477 
478       if (DECL_TEMPLATE_SPECIALIZATION (decl))
479 	{
480 	  --levels;
481 	  parms = TREE_CHAIN (parms);
482 	}
483 
484       push_inline_template_parms_recursive (parms, levels);
485     }
486 
487   /* Remember how many levels of template parameters we pushed so that
488      we can pop them later.  */
489   inline_parm_levels.safe_push (levels);
490 }
491 
492 /* Undo the effects of maybe_begin_member_template_processing.  */
493 
494 void
maybe_end_member_template_processing(void)495 maybe_end_member_template_processing (void)
496 {
497   int i;
498   int last;
499 
500   if (inline_parm_levels.length () == 0)
501     return;
502 
503   last = inline_parm_levels.pop ();
504   for (i = 0; i < last; ++i)
505     {
506       --processing_template_decl;
507       current_template_parms = TREE_CHAIN (current_template_parms);
508       poplevel (0, 0, 0);
509     }
510 }
511 
512 /* Return a new template argument vector which contains all of ARGS,
513    but has as its innermost set of arguments the EXTRA_ARGS.  */
514 
515 static tree
add_to_template_args(tree args,tree extra_args)516 add_to_template_args (tree args, tree extra_args)
517 {
518   tree new_args;
519   int extra_depth;
520   int i;
521   int j;
522 
523   if (args == NULL_TREE || extra_args == error_mark_node)
524     return extra_args;
525 
526   extra_depth = TMPL_ARGS_DEPTH (extra_args);
527   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
528 
529   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
530     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
531 
532   for (j = 1; j <= extra_depth; ++j, ++i)
533     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
534 
535   return new_args;
536 }
537 
538 /* Like add_to_template_args, but only the outermost ARGS are added to
539    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
540    (EXTRA_ARGS) levels are added.  This function is used to combine
541    the template arguments from a partial instantiation with the
542    template arguments used to attain the full instantiation from the
543    partial instantiation.  */
544 
545 static tree
add_outermost_template_args(tree args,tree extra_args)546 add_outermost_template_args (tree args, tree extra_args)
547 {
548   tree new_args;
549 
550   /* If there are more levels of EXTRA_ARGS than there are ARGS,
551      something very fishy is going on.  */
552   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
553 
554   /* If *all* the new arguments will be the EXTRA_ARGS, just return
555      them.  */
556   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
557     return extra_args;
558 
559   /* For the moment, we make ARGS look like it contains fewer levels.  */
560   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
561 
562   new_args = add_to_template_args (args, extra_args);
563 
564   /* Now, we restore ARGS to its full dimensions.  */
565   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
566 
567   return new_args;
568 }
569 
570 /* Return the N levels of innermost template arguments from the ARGS.  */
571 
572 tree
get_innermost_template_args(tree args,int n)573 get_innermost_template_args (tree args, int n)
574 {
575   tree new_args;
576   int extra_levels;
577   int i;
578 
579   gcc_assert (n >= 0);
580 
581   /* If N is 1, just return the innermost set of template arguments.  */
582   if (n == 1)
583     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
584 
585   /* If we're not removing anything, just return the arguments we were
586      given.  */
587   extra_levels = TMPL_ARGS_DEPTH (args) - n;
588   gcc_assert (extra_levels >= 0);
589   if (extra_levels == 0)
590     return args;
591 
592   /* Make a new set of arguments, not containing the outer arguments.  */
593   new_args = make_tree_vec (n);
594   for (i = 1; i <= n; ++i)
595     SET_TMPL_ARGS_LEVEL (new_args, i,
596 			 TMPL_ARGS_LEVEL (args, i + extra_levels));
597 
598   return new_args;
599 }
600 
601 /* The inverse of get_innermost_template_args: Return all but the innermost
602    EXTRA_LEVELS levels of template arguments from the ARGS.  */
603 
604 static tree
strip_innermost_template_args(tree args,int extra_levels)605 strip_innermost_template_args (tree args, int extra_levels)
606 {
607   tree new_args;
608   int n = TMPL_ARGS_DEPTH (args) - extra_levels;
609   int i;
610 
611   gcc_assert (n >= 0);
612 
613   /* If N is 1, just return the outermost set of template arguments.  */
614   if (n == 1)
615     return TMPL_ARGS_LEVEL (args, 1);
616 
617   /* If we're not removing anything, just return the arguments we were
618      given.  */
619   gcc_assert (extra_levels >= 0);
620   if (extra_levels == 0)
621     return args;
622 
623   /* Make a new set of arguments, not containing the inner arguments.  */
624   new_args = make_tree_vec (n);
625   for (i = 1; i <= n; ++i)
626     SET_TMPL_ARGS_LEVEL (new_args, i,
627 			 TMPL_ARGS_LEVEL (args, i));
628 
629   return new_args;
630 }
631 
632 /* We've got a template header coming up; push to a new level for storing
633    the parms.  */
634 
635 void
begin_template_parm_list(void)636 begin_template_parm_list (void)
637 {
638   /* We use a non-tag-transparent scope here, which causes pushtag to
639      put tags in this scope, rather than in the enclosing class or
640      namespace scope.  This is the right thing, since we want
641      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
642      global template class, push_template_decl handles putting the
643      TEMPLATE_DECL into top-level scope.  For a nested template class,
644      e.g.:
645 
646        template <class T> struct S1 {
647 	 template <class T> struct S2 {};
648        };
649 
650      pushtag contains special code to call pushdecl_with_scope on the
651      TEMPLATE_DECL for S2.  */
652   begin_scope (sk_template_parms, NULL);
653   ++processing_template_decl;
654   ++processing_template_parmlist;
655   note_template_header (0);
656 }
657 
658 /* This routine is called when a specialization is declared.  If it is
659    invalid to declare a specialization here, an error is reported and
660    false is returned, otherwise this routine will return true.  */
661 
662 static bool
check_specialization_scope(void)663 check_specialization_scope (void)
664 {
665   tree scope = current_scope ();
666 
667   /* [temp.expl.spec]
668 
669      An explicit specialization shall be declared in the namespace of
670      which the template is a member, or, for member templates, in the
671      namespace of which the enclosing class or enclosing class
672      template is a member.  An explicit specialization of a member
673      function, member class or static data member of a class template
674      shall be declared in the namespace of which the class template
675      is a member.  */
676   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
677     {
678       error ("explicit specialization in non-namespace scope %qD", scope);
679       return false;
680     }
681 
682   /* [temp.expl.spec]
683 
684      In an explicit specialization declaration for a member of a class
685      template or a member template that appears in namespace scope,
686      the member template and some of its enclosing class templates may
687      remain unspecialized, except that the declaration shall not
688      explicitly specialize a class member template if its enclosing
689      class templates are not explicitly specialized as well.  */
690   if (current_template_parms)
691     {
692       error ("enclosing class templates are not explicitly specialized");
693       return false;
694     }
695 
696   return true;
697 }
698 
699 /* We've just seen template <>.  */
700 
701 bool
begin_specialization(void)702 begin_specialization (void)
703 {
704   begin_scope (sk_template_spec, NULL);
705   note_template_header (1);
706   return check_specialization_scope ();
707 }
708 
709 /* Called at then end of processing a declaration preceded by
710    template<>.  */
711 
712 void
end_specialization(void)713 end_specialization (void)
714 {
715   finish_scope ();
716   reset_specialization ();
717 }
718 
719 /* Any template <>'s that we have seen thus far are not referring to a
720    function specialization.  */
721 
722 void
reset_specialization(void)723 reset_specialization (void)
724 {
725   processing_specialization = 0;
726   template_header_count = 0;
727 }
728 
729 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
730    it was of the form template <>.  */
731 
732 static void
note_template_header(int specialization)733 note_template_header (int specialization)
734 {
735   processing_specialization = specialization;
736   template_header_count++;
737 }
738 
739 /* We're beginning an explicit instantiation.  */
740 
741 void
begin_explicit_instantiation(void)742 begin_explicit_instantiation (void)
743 {
744   gcc_assert (!processing_explicit_instantiation);
745   processing_explicit_instantiation = true;
746 }
747 
748 
749 void
end_explicit_instantiation(void)750 end_explicit_instantiation (void)
751 {
752   gcc_assert (processing_explicit_instantiation);
753   processing_explicit_instantiation = false;
754 }
755 
756 /* An explicit specialization or partial specialization of TMPL is being
757    declared.  Check that the namespace in which the specialization is
758    occurring is permissible.  Returns false iff it is invalid to
759    specialize TMPL in the current namespace.  */
760 
761 static bool
check_specialization_namespace(tree tmpl)762 check_specialization_namespace (tree tmpl)
763 {
764   tree tpl_ns = decl_namespace_context (tmpl);
765 
766   /* [tmpl.expl.spec]
767 
768      An explicit specialization shall be declared in the namespace of
769      which the template is a member, or, for member templates, in the
770      namespace of which the enclosing class or enclosing class
771      template is a member.  An explicit specialization of a member
772      function, member class or static data member of a class template
773      shall be declared in the namespace of which the class template is
774      a member.  */
775   if (current_scope() != DECL_CONTEXT (tmpl)
776       && !at_namespace_scope_p ())
777     {
778       error ("specialization of %qD must appear at namespace scope", tmpl);
779       return false;
780     }
781   if (is_associated_namespace (current_namespace, tpl_ns))
782     /* Same or super-using namespace.  */
783     return true;
784   else
785     {
786       permerror (input_location, "specialization of %qD in different namespace", tmpl);
787       permerror (input_location, "  from definition of %q+#D", tmpl);
788       return false;
789     }
790 }
791 
792 /* SPEC is an explicit instantiation.  Check that it is valid to
793    perform this explicit instantiation in the current namespace.  */
794 
795 static void
check_explicit_instantiation_namespace(tree spec)796 check_explicit_instantiation_namespace (tree spec)
797 {
798   tree ns;
799 
800   /* DR 275: An explicit instantiation shall appear in an enclosing
801      namespace of its template.  */
802   ns = decl_namespace_context (spec);
803   if (!is_ancestor (current_namespace, ns))
804     permerror (input_location, "explicit instantiation of %qD in namespace %qD "
805 	       "(which does not enclose namespace %qD)",
806 	       spec, current_namespace, ns);
807 }
808 
809 /* The TYPE is being declared.  If it is a template type, that means it
810    is a partial specialization.  Do appropriate error-checking.  */
811 
812 tree
maybe_process_partial_specialization(tree type)813 maybe_process_partial_specialization (tree type)
814 {
815   tree context;
816 
817   if (type == error_mark_node)
818     return error_mark_node;
819 
820   /* A lambda that appears in specialization context is not itself a
821      specialization.  */
822   if (CLASS_TYPE_P (type) && CLASSTYPE_LAMBDA_EXPR (type))
823     return type;
824 
825   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
826     {
827       error ("name of class shadows template template parameter %qD",
828 	     TYPE_NAME (type));
829       return error_mark_node;
830     }
831 
832   context = TYPE_CONTEXT (type);
833 
834   if (TYPE_ALIAS_P (type))
835     {
836       if (TYPE_TEMPLATE_INFO (type)
837 	  && DECL_ALIAS_TEMPLATE_P (TYPE_TI_TEMPLATE (type)))
838 	error ("specialization of alias template %qD",
839 	       TYPE_TI_TEMPLATE (type));
840       else
841 	error ("explicit specialization of non-template %qT", type);
842       return error_mark_node;
843     }
844   else if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
845     {
846       /* This is for ordinary explicit specialization and partial
847 	 specialization of a template class such as:
848 
849 	   template <> class C<int>;
850 
851 	 or:
852 
853 	   template <class T> class C<T*>;
854 
855 	 Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
856 
857       if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
858 	  && !COMPLETE_TYPE_P (type))
859 	{
860 	  if (!check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type))
861 	      && !at_namespace_scope_p ())
862 	    return error_mark_node;
863 	  SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
864 	  DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)) = input_location;
865 	  if (processing_template_decl)
866 	    {
867 	      if (push_template_decl (TYPE_MAIN_DECL (type))
868 		  == error_mark_node)
869 		return error_mark_node;
870 	    }
871 	}
872       else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
873 	error ("specialization of %qT after instantiation", type);
874       else if (errorcount && !processing_specialization
875 	        && CLASSTYPE_TEMPLATE_SPECIALIZATION (type)
876 	       && !uses_template_parms (CLASSTYPE_TI_ARGS (type)))
877 	/* Trying to define a specialization either without a template<> header
878 	   or in an inappropriate place.  We've already given an error, so just
879 	   bail now so we don't actually define the specialization.  */
880 	return error_mark_node;
881     }
882   else if (CLASS_TYPE_P (type)
883 	   && !CLASSTYPE_USE_TEMPLATE (type)
884 	   && CLASSTYPE_TEMPLATE_INFO (type)
885 	   && context && CLASS_TYPE_P (context)
886 	   && CLASSTYPE_TEMPLATE_INFO (context))
887     {
888       /* This is for an explicit specialization of member class
889 	 template according to [temp.expl.spec/18]:
890 
891 	   template <> template <class U> class C<int>::D;
892 
893 	 The context `C<int>' must be an implicit instantiation.
894 	 Otherwise this is just a member class template declared
895 	 earlier like:
896 
897 	   template <> class C<int> { template <class U> class D; };
898 	   template <> template <class U> class C<int>::D;
899 
900 	 In the first case, `C<int>::D' is a specialization of `C<T>::D'
901 	 while in the second case, `C<int>::D' is a primary template
902 	 and `C<T>::D' may not exist.  */
903 
904       if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
905 	  && !COMPLETE_TYPE_P (type))
906 	{
907 	  tree t;
908 	  tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
909 
910 	  if (current_namespace
911 	      != decl_namespace_context (tmpl))
912 	    {
913 	      permerror (input_location, "specializing %q#T in different namespace", type);
914 	      permerror (input_location, "  from definition of %q+#D", tmpl);
915 	    }
916 
917 	  /* Check for invalid specialization after instantiation:
918 
919 	       template <> template <> class C<int>::D<int>;
920 	       template <> template <class U> class C<int>::D;  */
921 
922 	  for (t = DECL_TEMPLATE_INSTANTIATIONS (tmpl);
923 	       t; t = TREE_CHAIN (t))
924 	    {
925 	      tree inst = TREE_VALUE (t);
926 	      if (CLASSTYPE_TEMPLATE_SPECIALIZATION (inst)
927 		  || !COMPLETE_OR_OPEN_TYPE_P (inst))
928 		{
929 		  /* We already have a full specialization of this partial
930 		     instantiation, or a full specialization has been
931 		     looked up but not instantiated.  Reassign it to the
932 		     new member specialization template.  */
933 		  spec_entry elt;
934 		  spec_entry *entry;
935 		  void **slot;
936 
937 		  elt.tmpl = most_general_template (tmpl);
938 		  elt.args = CLASSTYPE_TI_ARGS (inst);
939 		  elt.spec = inst;
940 
941 		  htab_remove_elt (type_specializations, &elt);
942 
943 		  elt.tmpl = tmpl;
944 		  elt.args = INNERMOST_TEMPLATE_ARGS (elt.args);
945 
946 		  slot = htab_find_slot (type_specializations, &elt, INSERT);
947 		  entry = ggc_alloc_spec_entry ();
948 		  *entry = elt;
949 		  *slot = entry;
950 		}
951 	      else
952 		/* But if we've had an implicit instantiation, that's a
953 		   problem ([temp.expl.spec]/6).  */
954 		error ("specialization %qT after instantiation %qT",
955 		       type, inst);
956 	    }
957 
958 	  /* Mark TYPE as a specialization.  And as a result, we only
959 	     have one level of template argument for the innermost
960 	     class template.  */
961 	  SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
962 	  DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)) = input_location;
963 	  CLASSTYPE_TI_ARGS (type)
964 	    = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
965 	}
966     }
967   else if (processing_specialization)
968     {
969        /* Someday C++0x may allow for enum template specialization.  */
970       if (cxx_dialect > cxx98 && TREE_CODE (type) == ENUMERAL_TYPE
971 	  && CLASS_TYPE_P (context) && CLASSTYPE_USE_TEMPLATE (context))
972 	pedwarn (input_location, OPT_Wpedantic, "template specialization "
973 		 "of %qD not allowed by ISO C++", type);
974       else
975 	{
976 	  error ("explicit specialization of non-template %qT", type);
977 	  return error_mark_node;
978 	}
979     }
980 
981   return type;
982 }
983 
984 /* Returns nonzero if we can optimize the retrieval of specializations
985    for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
986    do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
987 
988 static inline bool
optimize_specialization_lookup_p(tree tmpl)989 optimize_specialization_lookup_p (tree tmpl)
990 {
991   return (DECL_FUNCTION_TEMPLATE_P (tmpl)
992 	  && DECL_CLASS_SCOPE_P (tmpl)
993 	  /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
994 	     parameter.  */
995 	  && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
996 	  /* The optimized lookup depends on the fact that the
997 	     template arguments for the member function template apply
998 	     purely to the containing class, which is not true if the
999 	     containing class is an explicit or partial
1000 	     specialization.  */
1001 	  && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
1002 	  && !DECL_MEMBER_TEMPLATE_P (tmpl)
1003 	  && !DECL_CONV_FN_P (tmpl)
1004 	  /* It is possible to have a template that is not a member
1005 	     template and is not a member of a template class:
1006 
1007 	     template <typename T>
1008 	     struct S { friend A::f(); };
1009 
1010 	     Here, the friend function is a template, but the context does
1011 	     not have template information.  The optimized lookup relies
1012 	     on having ARGS be the template arguments for both the class
1013 	     and the function template.  */
1014 	  && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
1015 }
1016 
1017 /* Retrieve the specialization (in the sense of [temp.spec] - a
1018    specialization is either an instantiation or an explicit
1019    specialization) of TMPL for the given template ARGS.  If there is
1020    no such specialization, return NULL_TREE.  The ARGS are a vector of
1021    arguments, or a vector of vectors of arguments, in the case of
1022    templates with more than one level of parameters.
1023 
1024    If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
1025    then we search for a partial specialization matching ARGS.  This
1026    parameter is ignored if TMPL is not a class template.
1027 
1028    We can also look up a FIELD_DECL, if it is a lambda capture pack; the
1029    result is a NONTYPE_ARGUMENT_PACK.  */
1030 
1031 static tree
retrieve_specialization(tree tmpl,tree args,hashval_t hash)1032 retrieve_specialization (tree tmpl, tree args, hashval_t hash)
1033 {
1034   if (tmpl == NULL_TREE)
1035     return NULL_TREE;
1036 
1037   if (args == error_mark_node)
1038     return NULL_TREE;
1039 
1040   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL
1041 	      || TREE_CODE (tmpl) == FIELD_DECL);
1042 
1043   /* There should be as many levels of arguments as there are
1044      levels of parameters.  */
1045   gcc_assert (TMPL_ARGS_DEPTH (args)
1046 	      == (TREE_CODE (tmpl) == TEMPLATE_DECL
1047 		  ? TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl))
1048 		  : template_class_depth (DECL_CONTEXT (tmpl))));
1049 
1050   if (optimize_specialization_lookup_p (tmpl))
1051     {
1052       tree class_template;
1053       tree class_specialization;
1054       vec<tree, va_gc> *methods;
1055       tree fns;
1056       int idx;
1057 
1058       /* The template arguments actually apply to the containing
1059 	 class.  Find the class specialization with those
1060 	 arguments.  */
1061       class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
1062       class_specialization
1063 	= retrieve_specialization (class_template, args, 0);
1064       if (!class_specialization)
1065 	return NULL_TREE;
1066       /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
1067 	 for the specialization.  */
1068       idx = class_method_index_for_fn (class_specialization, tmpl);
1069       if (idx == -1)
1070 	return NULL_TREE;
1071       /* Iterate through the methods with the indicated name, looking
1072 	 for the one that has an instance of TMPL.  */
1073       methods = CLASSTYPE_METHOD_VEC (class_specialization);
1074       for (fns = (*methods)[idx]; fns; fns = OVL_NEXT (fns))
1075 	{
1076 	  tree fn = OVL_CURRENT (fns);
1077 	  if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl
1078 	      /* using-declarations can add base methods to the method vec,
1079 		 and we don't want those here.  */
1080 	      && DECL_CONTEXT (fn) == class_specialization)
1081 	    return fn;
1082 	}
1083       return NULL_TREE;
1084     }
1085   else
1086     {
1087       spec_entry *found;
1088       spec_entry elt;
1089       htab_t specializations;
1090 
1091       elt.tmpl = tmpl;
1092       elt.args = args;
1093       elt.spec = NULL_TREE;
1094 
1095       if (DECL_CLASS_TEMPLATE_P (tmpl))
1096 	specializations = type_specializations;
1097       else
1098 	specializations = decl_specializations;
1099 
1100       if (hash == 0)
1101 	hash = hash_specialization (&elt);
1102       found = (spec_entry *) htab_find_with_hash (specializations, &elt, hash);
1103       if (found)
1104 	return found->spec;
1105     }
1106 
1107   return NULL_TREE;
1108 }
1109 
1110 /* Like retrieve_specialization, but for local declarations.  */
1111 
1112 static tree
retrieve_local_specialization(tree tmpl)1113 retrieve_local_specialization (tree tmpl)
1114 {
1115   void **slot;
1116 
1117   if (local_specializations == NULL)
1118     return NULL_TREE;
1119 
1120   slot = pointer_map_contains (local_specializations, tmpl);
1121   return slot ? (tree) *slot : NULL_TREE;
1122 }
1123 
1124 /* Returns nonzero iff DECL is a specialization of TMPL.  */
1125 
1126 int
is_specialization_of(tree decl,tree tmpl)1127 is_specialization_of (tree decl, tree tmpl)
1128 {
1129   tree t;
1130 
1131   if (TREE_CODE (decl) == FUNCTION_DECL)
1132     {
1133       for (t = decl;
1134 	   t != NULL_TREE;
1135 	   t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1136 	if (t == tmpl)
1137 	  return 1;
1138     }
1139   else
1140     {
1141       gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1142 
1143       for (t = TREE_TYPE (decl);
1144 	   t != NULL_TREE;
1145 	   t = CLASSTYPE_USE_TEMPLATE (t)
1146 	     ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1147 	if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1148 	  return 1;
1149     }
1150 
1151   return 0;
1152 }
1153 
1154 /* Returns nonzero iff DECL is a specialization of friend declaration
1155    FRIEND_DECL according to [temp.friend].  */
1156 
1157 bool
is_specialization_of_friend(tree decl,tree friend_decl)1158 is_specialization_of_friend (tree decl, tree friend_decl)
1159 {
1160   bool need_template = true;
1161   int template_depth;
1162 
1163   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1164 	      || TREE_CODE (decl) == TYPE_DECL);
1165 
1166   /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1167      of a template class, we want to check if DECL is a specialization
1168      if this.  */
1169   if (TREE_CODE (friend_decl) == FUNCTION_DECL
1170       && DECL_TEMPLATE_INFO (friend_decl)
1171       && !DECL_USE_TEMPLATE (friend_decl))
1172     {
1173       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
1174       friend_decl = DECL_TI_TEMPLATE (friend_decl);
1175       need_template = false;
1176     }
1177   else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1178 	   && !PRIMARY_TEMPLATE_P (friend_decl))
1179     need_template = false;
1180 
1181   /* There is nothing to do if this is not a template friend.  */
1182   if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1183     return false;
1184 
1185   if (is_specialization_of (decl, friend_decl))
1186     return true;
1187 
1188   /* [temp.friend/6]
1189      A member of a class template may be declared to be a friend of a
1190      non-template class.  In this case, the corresponding member of
1191      every specialization of the class template is a friend of the
1192      class granting friendship.
1193 
1194      For example, given a template friend declaration
1195 
1196        template <class T> friend void A<T>::f();
1197 
1198      the member function below is considered a friend
1199 
1200        template <> struct A<int> {
1201 	 void f();
1202        };
1203 
1204      For this type of template friend, TEMPLATE_DEPTH below will be
1205      nonzero.  To determine if DECL is a friend of FRIEND, we first
1206      check if the enclosing class is a specialization of another.  */
1207 
1208   template_depth = template_class_depth (CP_DECL_CONTEXT (friend_decl));
1209   if (template_depth
1210       && DECL_CLASS_SCOPE_P (decl)
1211       && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1212 			       CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1213     {
1214       /* Next, we check the members themselves.  In order to handle
1215 	 a few tricky cases, such as when FRIEND_DECL's are
1216 
1217 	   template <class T> friend void A<T>::g(T t);
1218 	   template <class T> template <T t> friend void A<T>::h();
1219 
1220 	 and DECL's are
1221 
1222 	   void A<int>::g(int);
1223 	   template <int> void A<int>::h();
1224 
1225 	 we need to figure out ARGS, the template arguments from
1226 	 the context of DECL.  This is required for template substitution
1227 	 of `T' in the function parameter of `g' and template parameter
1228 	 of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1229 
1230       tree context = DECL_CONTEXT (decl);
1231       tree args = NULL_TREE;
1232       int current_depth = 0;
1233 
1234       while (current_depth < template_depth)
1235 	{
1236 	  if (CLASSTYPE_TEMPLATE_INFO (context))
1237 	    {
1238 	      if (current_depth == 0)
1239 		args = TYPE_TI_ARGS (context);
1240 	      else
1241 		args = add_to_template_args (TYPE_TI_ARGS (context), args);
1242 	      current_depth++;
1243 	    }
1244 	  context = TYPE_CONTEXT (context);
1245 	}
1246 
1247       if (TREE_CODE (decl) == FUNCTION_DECL)
1248 	{
1249 	  bool is_template;
1250 	  tree friend_type;
1251 	  tree decl_type;
1252 	  tree friend_args_type;
1253 	  tree decl_args_type;
1254 
1255 	  /* Make sure that both DECL and FRIEND_DECL are templates or
1256 	     non-templates.  */
1257 	  is_template = DECL_TEMPLATE_INFO (decl)
1258 			&& PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1259 	  if (need_template ^ is_template)
1260 	    return false;
1261 	  else if (is_template)
1262 	    {
1263 	      /* If both are templates, check template parameter list.  */
1264 	      tree friend_parms
1265 		= tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1266 					 args, tf_none);
1267 	      if (!comp_template_parms
1268 		     (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1269 		      friend_parms))
1270 		return false;
1271 
1272 	      decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1273 	    }
1274 	  else
1275 	    decl_type = TREE_TYPE (decl);
1276 
1277 	  friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1278 					      tf_none, NULL_TREE);
1279 	  if (friend_type == error_mark_node)
1280 	    return false;
1281 
1282 	  /* Check if return types match.  */
1283 	  if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1284 	    return false;
1285 
1286 	  /* Check if function parameter types match, ignoring the
1287 	     `this' parameter.  */
1288 	  friend_args_type = TYPE_ARG_TYPES (friend_type);
1289 	  decl_args_type = TYPE_ARG_TYPES (decl_type);
1290 	  if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1291 	    friend_args_type = TREE_CHAIN (friend_args_type);
1292 	  if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1293 	    decl_args_type = TREE_CHAIN (decl_args_type);
1294 
1295 	  return compparms (decl_args_type, friend_args_type);
1296 	}
1297       else
1298 	{
1299 	  /* DECL is a TYPE_DECL */
1300 	  bool is_template;
1301 	  tree decl_type = TREE_TYPE (decl);
1302 
1303 	  /* Make sure that both DECL and FRIEND_DECL are templates or
1304 	     non-templates.  */
1305 	  is_template
1306 	    = CLASSTYPE_TEMPLATE_INFO (decl_type)
1307 	      && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1308 
1309 	  if (need_template ^ is_template)
1310 	    return false;
1311 	  else if (is_template)
1312 	    {
1313 	      tree friend_parms;
1314 	      /* If both are templates, check the name of the two
1315 		 TEMPLATE_DECL's first because is_friend didn't.  */
1316 	      if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1317 		  != DECL_NAME (friend_decl))
1318 		return false;
1319 
1320 	      /* Now check template parameter list.  */
1321 	      friend_parms
1322 		= tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1323 					 args, tf_none);
1324 	      return comp_template_parms
1325 		(DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1326 		 friend_parms);
1327 	    }
1328 	  else
1329 	    return (DECL_NAME (decl)
1330 		    == DECL_NAME (friend_decl));
1331 	}
1332     }
1333   return false;
1334 }
1335 
1336 /* Register the specialization SPEC as a specialization of TMPL with
1337    the indicated ARGS.  IS_FRIEND indicates whether the specialization
1338    is actually just a friend declaration.  Returns SPEC, or an
1339    equivalent prior declaration, if available.
1340 
1341    We also store instantiations of field packs in the hash table, even
1342    though they are not themselves templates, to make lookup easier.  */
1343 
1344 static tree
register_specialization(tree spec,tree tmpl,tree args,bool is_friend,hashval_t hash)1345 register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
1346 			 hashval_t hash)
1347 {
1348   tree fn;
1349   void **slot = NULL;
1350   spec_entry elt;
1351 
1352   gcc_assert ((TREE_CODE (tmpl) == TEMPLATE_DECL && DECL_P (spec))
1353 	      || (TREE_CODE (tmpl) == FIELD_DECL
1354 		  && TREE_CODE (spec) == NONTYPE_ARGUMENT_PACK));
1355 
1356   if (TREE_CODE (spec) == FUNCTION_DECL
1357       && uses_template_parms (DECL_TI_ARGS (spec)))
1358     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1359        register it; we want the corresponding TEMPLATE_DECL instead.
1360        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1361        the more obvious `uses_template_parms (spec)' to avoid problems
1362        with default function arguments.  In particular, given
1363        something like this:
1364 
1365 	  template <class T> void f(T t1, T t = T())
1366 
1367        the default argument expression is not substituted for in an
1368        instantiation unless and until it is actually needed.  */
1369     return spec;
1370 
1371   if (optimize_specialization_lookup_p (tmpl))
1372     /* We don't put these specializations in the hash table, but we might
1373        want to give an error about a mismatch.  */
1374     fn = retrieve_specialization (tmpl, args, 0);
1375   else
1376     {
1377       elt.tmpl = tmpl;
1378       elt.args = args;
1379       elt.spec = spec;
1380 
1381       if (hash == 0)
1382 	hash = hash_specialization (&elt);
1383 
1384       slot =
1385 	htab_find_slot_with_hash (decl_specializations, &elt, hash, INSERT);
1386       if (*slot)
1387 	fn = ((spec_entry *) *slot)->spec;
1388       else
1389 	fn = NULL_TREE;
1390     }
1391 
1392   /* We can sometimes try to re-register a specialization that we've
1393      already got.  In particular, regenerate_decl_from_template calls
1394      duplicate_decls which will update the specialization list.  But,
1395      we'll still get called again here anyhow.  It's more convenient
1396      to simply allow this than to try to prevent it.  */
1397   if (fn == spec)
1398     return spec;
1399   else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1400     {
1401       if (DECL_TEMPLATE_INSTANTIATION (fn))
1402 	{
1403 	  if (DECL_ODR_USED (fn)
1404 	      || DECL_EXPLICIT_INSTANTIATION (fn))
1405 	    {
1406 	      error ("specialization of %qD after instantiation",
1407 		     fn);
1408 	      return error_mark_node;
1409 	    }
1410 	  else
1411 	    {
1412 	      tree clone;
1413 	      /* This situation should occur only if the first
1414 		 specialization is an implicit instantiation, the
1415 		 second is an explicit specialization, and the
1416 		 implicit instantiation has not yet been used.  That
1417 		 situation can occur if we have implicitly
1418 		 instantiated a member function and then specialized
1419 		 it later.
1420 
1421 		 We can also wind up here if a friend declaration that
1422 		 looked like an instantiation turns out to be a
1423 		 specialization:
1424 
1425 		   template <class T> void foo(T);
1426 		   class S { friend void foo<>(int) };
1427 		   template <> void foo(int);
1428 
1429 		 We transform the existing DECL in place so that any
1430 		 pointers to it become pointers to the updated
1431 		 declaration.
1432 
1433 		 If there was a definition for the template, but not
1434 		 for the specialization, we want this to look as if
1435 		 there were no definition, and vice versa.  */
1436 	      DECL_INITIAL (fn) = NULL_TREE;
1437 	      duplicate_decls (spec, fn, is_friend);
1438 	      /* The call to duplicate_decls will have applied
1439 		 [temp.expl.spec]:
1440 
1441 		   An explicit specialization of a function template
1442 		   is inline only if it is explicitly declared to be,
1443 		   and independently of whether its function template
1444 		   is.
1445 
1446 		to the primary function; now copy the inline bits to
1447 		the various clones.  */
1448 	      FOR_EACH_CLONE (clone, fn)
1449 		{
1450 		  DECL_DECLARED_INLINE_P (clone)
1451 		    = DECL_DECLARED_INLINE_P (fn);
1452 		  DECL_SOURCE_LOCATION (clone)
1453 		    = DECL_SOURCE_LOCATION (fn);
1454 		  DECL_DELETED_FN (clone)
1455 		    = DECL_DELETED_FN (fn);
1456 		}
1457 	      check_specialization_namespace (tmpl);
1458 
1459 	      return fn;
1460 	    }
1461 	}
1462       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1463 	{
1464 	  if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1465 	    /* Dup decl failed, but this is a new definition. Set the
1466 	       line number so any errors match this new
1467 	       definition.  */
1468 	    DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1469 
1470 	  return fn;
1471 	}
1472     }
1473   else if (fn)
1474     return duplicate_decls (spec, fn, is_friend);
1475 
1476   /* A specialization must be declared in the same namespace as the
1477      template it is specializing.  */
1478   if (DECL_P (spec) && DECL_TEMPLATE_SPECIALIZATION (spec)
1479       && !check_specialization_namespace (tmpl))
1480     DECL_CONTEXT (spec) = DECL_CONTEXT (tmpl);
1481 
1482   if (slot != NULL /* !optimize_specialization_lookup_p (tmpl) */)
1483     {
1484       spec_entry *entry = ggc_alloc_spec_entry ();
1485       gcc_assert (tmpl && args && spec);
1486       *entry = elt;
1487       *slot = entry;
1488       if (TREE_CODE (spec) == FUNCTION_DECL && DECL_NAMESPACE_SCOPE_P (spec)
1489 	  && PRIMARY_TEMPLATE_P (tmpl)
1490 	  && DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (tmpl)) == NULL_TREE)
1491 	/* TMPL is a forward declaration of a template function; keep a list
1492 	   of all specializations in case we need to reassign them to a friend
1493 	   template later in tsubst_friend_function.  */
1494 	DECL_TEMPLATE_INSTANTIATIONS (tmpl)
1495 	  = tree_cons (args, spec, DECL_TEMPLATE_INSTANTIATIONS (tmpl));
1496     }
1497 
1498   return spec;
1499 }
1500 
1501 /* Returns true iff two spec_entry nodes are equivalent.  Only compares the
1502    TMPL and ARGS members, ignores SPEC.  */
1503 
1504 int comparing_specializations;
1505 
1506 static int
eq_specializations(const void * p1,const void * p2)1507 eq_specializations (const void *p1, const void *p2)
1508 {
1509   const spec_entry *e1 = (const spec_entry *)p1;
1510   const spec_entry *e2 = (const spec_entry *)p2;
1511   int equal;
1512 
1513   ++comparing_specializations;
1514   equal = (e1->tmpl == e2->tmpl
1515 	   && comp_template_args (e1->args, e2->args));
1516   --comparing_specializations;
1517 
1518   return equal;
1519 }
1520 
1521 /* Returns a hash for a template TMPL and template arguments ARGS.  */
1522 
1523 static hashval_t
hash_tmpl_and_args(tree tmpl,tree args)1524 hash_tmpl_and_args (tree tmpl, tree args)
1525 {
1526   hashval_t val = DECL_UID (tmpl);
1527   return iterative_hash_template_arg (args, val);
1528 }
1529 
1530 /* Returns a hash for a spec_entry node based on the TMPL and ARGS members,
1531    ignoring SPEC.  */
1532 
1533 static hashval_t
hash_specialization(const void * p)1534 hash_specialization (const void *p)
1535 {
1536   const spec_entry *e = (const spec_entry *)p;
1537   return hash_tmpl_and_args (e->tmpl, e->args);
1538 }
1539 
1540 /* Recursively calculate a hash value for a template argument ARG, for use
1541    in the hash tables of template specializations.  */
1542 
1543 hashval_t
iterative_hash_template_arg(tree arg,hashval_t val)1544 iterative_hash_template_arg (tree arg, hashval_t val)
1545 {
1546   unsigned HOST_WIDE_INT i;
1547   enum tree_code code;
1548   char tclass;
1549 
1550   if (arg == NULL_TREE)
1551     return iterative_hash_object (arg, val);
1552 
1553   if (!TYPE_P (arg))
1554     STRIP_NOPS (arg);
1555 
1556   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
1557     /* We can get one of these when re-hashing a previous entry in the middle
1558        of substituting into a pack expansion.  Just look through it.  */
1559     arg = ARGUMENT_PACK_SELECT_FROM_PACK (arg);
1560 
1561   code = TREE_CODE (arg);
1562   tclass = TREE_CODE_CLASS (code);
1563 
1564   val = iterative_hash_object (code, val);
1565 
1566   switch (code)
1567     {
1568     case ERROR_MARK:
1569       return val;
1570 
1571     case IDENTIFIER_NODE:
1572       return iterative_hash_object (IDENTIFIER_HASH_VALUE (arg), val);
1573 
1574     case TREE_VEC:
1575       {
1576 	int i, len = TREE_VEC_LENGTH (arg);
1577 	for (i = 0; i < len; ++i)
1578 	  val = iterative_hash_template_arg (TREE_VEC_ELT (arg, i), val);
1579 	return val;
1580       }
1581 
1582     case TYPE_PACK_EXPANSION:
1583     case EXPR_PACK_EXPANSION:
1584       val = iterative_hash_template_arg (PACK_EXPANSION_PATTERN (arg), val);
1585       return iterative_hash_template_arg (PACK_EXPANSION_EXTRA_ARGS (arg), val);
1586 
1587     case TYPE_ARGUMENT_PACK:
1588     case NONTYPE_ARGUMENT_PACK:
1589       return iterative_hash_template_arg (ARGUMENT_PACK_ARGS (arg), val);
1590 
1591     case TREE_LIST:
1592       for (; arg; arg = TREE_CHAIN (arg))
1593 	val = iterative_hash_template_arg (TREE_VALUE (arg), val);
1594       return val;
1595 
1596     case OVERLOAD:
1597       for (; arg; arg = OVL_NEXT (arg))
1598 	val = iterative_hash_template_arg (OVL_CURRENT (arg), val);
1599       return val;
1600 
1601     case CONSTRUCTOR:
1602       {
1603 	tree field, value;
1604 	iterative_hash_template_arg (TREE_TYPE (arg), val);
1605 	FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (arg), i, field, value)
1606 	  {
1607 	    val = iterative_hash_template_arg (field, val);
1608 	    val = iterative_hash_template_arg (value, val);
1609 	  }
1610 	return val;
1611       }
1612 
1613     case PARM_DECL:
1614       if (!DECL_ARTIFICIAL (arg))
1615 	{
1616 	  val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
1617 	  val = iterative_hash_object (DECL_PARM_LEVEL (arg), val);
1618 	}
1619       return iterative_hash_template_arg (TREE_TYPE (arg), val);
1620 
1621     case TARGET_EXPR:
1622       return iterative_hash_template_arg (TARGET_EXPR_INITIAL (arg), val);
1623 
1624     case PTRMEM_CST:
1625       val = iterative_hash_template_arg (PTRMEM_CST_CLASS (arg), val);
1626       return iterative_hash_template_arg (PTRMEM_CST_MEMBER (arg), val);
1627 
1628     case TEMPLATE_PARM_INDEX:
1629       val = iterative_hash_template_arg
1630 	(TREE_TYPE (TEMPLATE_PARM_DECL (arg)), val);
1631       val = iterative_hash_object (TEMPLATE_PARM_LEVEL (arg), val);
1632       return iterative_hash_object (TEMPLATE_PARM_IDX (arg), val);
1633 
1634     case TRAIT_EXPR:
1635       val = iterative_hash_object (TRAIT_EXPR_KIND (arg), val);
1636       val = iterative_hash_template_arg (TRAIT_EXPR_TYPE1 (arg), val);
1637       return iterative_hash_template_arg (TRAIT_EXPR_TYPE2 (arg), val);
1638 
1639     case BASELINK:
1640       val = iterative_hash_template_arg (BINFO_TYPE (BASELINK_BINFO (arg)),
1641 					 val);
1642       return iterative_hash_template_arg (DECL_NAME (get_first_fn (arg)),
1643 					  val);
1644 
1645     case MODOP_EXPR:
1646       val = iterative_hash_template_arg (TREE_OPERAND (arg, 0), val);
1647       code = TREE_CODE (TREE_OPERAND (arg, 1));
1648       val = iterative_hash_object (code, val);
1649       return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
1650 
1651     case LAMBDA_EXPR:
1652       /* A lambda can't appear in a template arg, but don't crash on
1653 	 erroneous input.  */
1654       gcc_assert (seen_error ());
1655       return val;
1656 
1657     case CAST_EXPR:
1658     case IMPLICIT_CONV_EXPR:
1659     case STATIC_CAST_EXPR:
1660     case REINTERPRET_CAST_EXPR:
1661     case CONST_CAST_EXPR:
1662     case DYNAMIC_CAST_EXPR:
1663     case NEW_EXPR:
1664       val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1665       /* Now hash operands as usual.  */
1666       break;
1667 
1668     default:
1669       break;
1670     }
1671 
1672   switch (tclass)
1673     {
1674     case tcc_type:
1675       if (TYPE_CANONICAL (arg))
1676 	return iterative_hash_object (TYPE_HASH (TYPE_CANONICAL (arg)),
1677 				      val);
1678       else if (TREE_CODE (arg) == DECLTYPE_TYPE)
1679 	return iterative_hash_template_arg (DECLTYPE_TYPE_EXPR (arg), val);
1680       /* Otherwise just compare the types during lookup.  */
1681       return val;
1682 
1683     case tcc_declaration:
1684     case tcc_constant:
1685       return iterative_hash_expr (arg, val);
1686 
1687     default:
1688       gcc_assert (IS_EXPR_CODE_CLASS (tclass));
1689       {
1690 	unsigned n = cp_tree_operand_length (arg);
1691 	for (i = 0; i < n; ++i)
1692 	  val = iterative_hash_template_arg (TREE_OPERAND (arg, i), val);
1693 	return val;
1694       }
1695     }
1696   gcc_unreachable ();
1697   return 0;
1698 }
1699 
1700 /* Unregister the specialization SPEC as a specialization of TMPL.
1701    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1702    if the SPEC was listed as a specialization of TMPL.
1703 
1704    Note that SPEC has been ggc_freed, so we can't look inside it.  */
1705 
1706 bool
reregister_specialization(tree spec,tree tinfo,tree new_spec)1707 reregister_specialization (tree spec, tree tinfo, tree new_spec)
1708 {
1709   spec_entry *entry;
1710   spec_entry elt;
1711 
1712   elt.tmpl = most_general_template (TI_TEMPLATE (tinfo));
1713   elt.args = TI_ARGS (tinfo);
1714   elt.spec = NULL_TREE;
1715 
1716   entry = (spec_entry *) htab_find (decl_specializations, &elt);
1717   if (entry != NULL)
1718     {
1719       gcc_assert (entry->spec == spec || entry->spec == new_spec);
1720       gcc_assert (new_spec != NULL_TREE);
1721       entry->spec = new_spec;
1722       return 1;
1723     }
1724 
1725   return 0;
1726 }
1727 
1728 /* Like register_specialization, but for local declarations.  We are
1729    registering SPEC, an instantiation of TMPL.  */
1730 
1731 static void
register_local_specialization(tree spec,tree tmpl)1732 register_local_specialization (tree spec, tree tmpl)
1733 {
1734   void **slot;
1735 
1736   slot = pointer_map_insert (local_specializations, tmpl);
1737   *slot = spec;
1738 }
1739 
1740 /* TYPE is a class type.  Returns true if TYPE is an explicitly
1741    specialized class.  */
1742 
1743 bool
explicit_class_specialization_p(tree type)1744 explicit_class_specialization_p (tree type)
1745 {
1746   if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1747     return false;
1748   return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1749 }
1750 
1751 /* Print the list of functions at FNS, going through all the overloads
1752    for each element of the list.  Alternatively, FNS can not be a
1753    TREE_LIST, in which case it will be printed together with all the
1754    overloads.
1755 
1756    MORE and *STR should respectively be FALSE and NULL when the function
1757    is called from the outside.  They are used internally on recursive
1758    calls.  print_candidates manages the two parameters and leaves NULL
1759    in *STR when it ends.  */
1760 
1761 static void
print_candidates_1(tree fns,bool more,const char ** str)1762 print_candidates_1 (tree fns, bool more, const char **str)
1763 {
1764   tree fn, fn2;
1765   char *spaces = NULL;
1766 
1767   for (fn = fns; fn; fn = OVL_NEXT (fn))
1768     if (TREE_CODE (fn) == TREE_LIST)
1769       {
1770         for (fn2 = fn; fn2 != NULL_TREE; fn2 = TREE_CHAIN (fn2))
1771           print_candidates_1 (TREE_VALUE (fn2),
1772                               TREE_CHAIN (fn2) || more, str);
1773       }
1774     else
1775       {
1776 	tree cand = OVL_CURRENT (fn);
1777         if (!*str)
1778           {
1779             /* Pick the prefix string.  */
1780             if (!more && !OVL_NEXT (fns))
1781               {
1782                 inform (DECL_SOURCE_LOCATION (cand),
1783 			"candidate is: %#D", cand);
1784                 continue;
1785               }
1786 
1787             *str = _("candidates are:");
1788             spaces = get_spaces (*str);
1789           }
1790         inform (DECL_SOURCE_LOCATION (cand), "%s %#D", *str, cand);
1791         *str = spaces ? spaces : *str;
1792       }
1793 
1794   if (!more)
1795     {
1796       free (spaces);
1797       *str = NULL;
1798     }
1799 }
1800 
1801 /* Print the list of candidate FNS in an error message.  FNS can also
1802    be a TREE_LIST of non-functions in the case of an ambiguous lookup.  */
1803 
1804 void
print_candidates(tree fns)1805 print_candidates (tree fns)
1806 {
1807   const char *str = NULL;
1808   print_candidates_1 (fns, false, &str);
1809   gcc_assert (str == NULL);
1810 }
1811 
1812 /* Returns the template (one of the functions given by TEMPLATE_ID)
1813    which can be specialized to match the indicated DECL with the
1814    explicit template args given in TEMPLATE_ID.  The DECL may be
1815    NULL_TREE if none is available.  In that case, the functions in
1816    TEMPLATE_ID are non-members.
1817 
1818    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1819    specialization of a member template.
1820 
1821    The TEMPLATE_COUNT is the number of references to qualifying
1822    template classes that appeared in the name of the function. See
1823    check_explicit_specialization for a more accurate description.
1824 
1825    TSK indicates what kind of template declaration (if any) is being
1826    declared.  TSK_TEMPLATE indicates that the declaration given by
1827    DECL, though a FUNCTION_DECL, has template parameters, and is
1828    therefore a template function.
1829 
1830    The template args (those explicitly specified and those deduced)
1831    are output in a newly created vector *TARGS_OUT.
1832 
1833    If it is impossible to determine the result, an error message is
1834    issued.  The error_mark_node is returned to indicate failure.  */
1835 
1836 static tree
determine_specialization(tree template_id,tree decl,tree * targs_out,int need_member_template,int template_count,tmpl_spec_kind tsk)1837 determine_specialization (tree template_id,
1838 			  tree decl,
1839 			  tree* targs_out,
1840 			  int need_member_template,
1841 			  int template_count,
1842 			  tmpl_spec_kind tsk)
1843 {
1844   tree fns;
1845   tree targs;
1846   tree explicit_targs;
1847   tree candidates = NULL_TREE;
1848   /* A TREE_LIST of templates of which DECL may be a specialization.
1849      The TREE_VALUE of each node is a TEMPLATE_DECL.  The
1850      corresponding TREE_PURPOSE is the set of template arguments that,
1851      when used to instantiate the template, would produce a function
1852      with the signature of DECL.  */
1853   tree templates = NULL_TREE;
1854   int header_count;
1855   cp_binding_level *b;
1856 
1857   *targs_out = NULL_TREE;
1858 
1859   if (template_id == error_mark_node || decl == error_mark_node)
1860     return error_mark_node;
1861 
1862   /* We shouldn't be specializing a member template of an
1863      unspecialized class template; we already gave an error in
1864      check_specialization_scope, now avoid crashing.  */
1865   if (template_count && DECL_CLASS_SCOPE_P (decl)
1866       && template_class_depth (DECL_CONTEXT (decl)) > 0)
1867     {
1868       gcc_assert (errorcount);
1869       return error_mark_node;
1870     }
1871 
1872   fns = TREE_OPERAND (template_id, 0);
1873   explicit_targs = TREE_OPERAND (template_id, 1);
1874 
1875   if (fns == error_mark_node)
1876     return error_mark_node;
1877 
1878   /* Check for baselinks.  */
1879   if (BASELINK_P (fns))
1880     fns = BASELINK_FUNCTIONS (fns);
1881 
1882   if (!is_overloaded_fn (fns))
1883     {
1884       error ("%qD is not a function template", fns);
1885       return error_mark_node;
1886     }
1887 
1888   /* Count the number of template headers specified for this
1889      specialization.  */
1890   header_count = 0;
1891   for (b = current_binding_level;
1892        b->kind == sk_template_parms;
1893        b = b->level_chain)
1894     ++header_count;
1895 
1896   for (; fns; fns = OVL_NEXT (fns))
1897     {
1898       tree fn = OVL_CURRENT (fns);
1899 
1900       if (TREE_CODE (fn) == TEMPLATE_DECL)
1901 	{
1902 	  tree decl_arg_types;
1903 	  tree fn_arg_types;
1904 	  tree insttype;
1905 
1906 	  /* In case of explicit specialization, we need to check if
1907 	     the number of template headers appearing in the specialization
1908 	     is correct. This is usually done in check_explicit_specialization,
1909 	     but the check done there cannot be exhaustive when specializing
1910 	     member functions. Consider the following code:
1911 
1912 	     template <> void A<int>::f(int);
1913 	     template <> template <> void A<int>::f(int);
1914 
1915 	     Assuming that A<int> is not itself an explicit specialization
1916 	     already, the first line specializes "f" which is a non-template
1917 	     member function, whilst the second line specializes "f" which
1918 	     is a template member function. So both lines are syntactically
1919 	     correct, and check_explicit_specialization does not reject
1920 	     them.
1921 
1922 	     Here, we can do better, as we are matching the specialization
1923 	     against the declarations. We count the number of template
1924 	     headers, and we check if they match TEMPLATE_COUNT + 1
1925 	     (TEMPLATE_COUNT is the number of qualifying template classes,
1926 	     plus there must be another header for the member template
1927 	     itself).
1928 
1929 	     Notice that if header_count is zero, this is not a
1930 	     specialization but rather a template instantiation, so there
1931 	     is no check we can perform here.  */
1932 	  if (header_count && header_count != template_count + 1)
1933 	    continue;
1934 
1935 	  /* Check that the number of template arguments at the
1936 	     innermost level for DECL is the same as for FN.  */
1937 	  if (current_binding_level->kind == sk_template_parms
1938 	      && !current_binding_level->explicit_spec_p
1939 	      && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1940 		  != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1941 				      (current_template_parms))))
1942 	    continue;
1943 
1944 	  /* DECL might be a specialization of FN.  */
1945 	  decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1946 	  fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1947 
1948 	  /* For a non-static member function, we need to make sure
1949 	     that the const qualification is the same.  Since
1950 	     get_bindings does not try to merge the "this" parameter,
1951 	     we must do the comparison explicitly.  */
1952 	  if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1953 	      && !same_type_p (TREE_VALUE (fn_arg_types),
1954 			       TREE_VALUE (decl_arg_types)))
1955 	    continue;
1956 
1957 	  /* Skip the "this" parameter and, for constructors of
1958 	     classes with virtual bases, the VTT parameter.  A
1959 	     full specialization of a constructor will have a VTT
1960 	     parameter, but a template never will.  */
1961 	  decl_arg_types
1962 	    = skip_artificial_parms_for (decl, decl_arg_types);
1963 	  fn_arg_types
1964 	    = skip_artificial_parms_for (fn, fn_arg_types);
1965 
1966 	  /* Function templates cannot be specializations; there are
1967 	     no partial specializations of functions.  Therefore, if
1968 	     the type of DECL does not match FN, there is no
1969 	     match.  */
1970 	  if (tsk == tsk_template)
1971 	    {
1972 	      if (compparms (fn_arg_types, decl_arg_types))
1973 		candidates = tree_cons (NULL_TREE, fn, candidates);
1974 	      continue;
1975 	    }
1976 
1977 	  /* See whether this function might be a specialization of this
1978 	     template.  Suppress access control because we might be trying
1979 	     to make this specialization a friend, and we have already done
1980 	     access control for the declaration of the specialization.  */
1981 	  push_deferring_access_checks (dk_no_check);
1982 	  targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1983 	  pop_deferring_access_checks ();
1984 
1985 	  if (!targs)
1986 	    /* We cannot deduce template arguments that when used to
1987 	       specialize TMPL will produce DECL.  */
1988 	    continue;
1989 
1990 	  /* Make sure that the deduced arguments actually work.  */
1991 	  insttype = tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE);
1992 	  if (insttype == error_mark_node)
1993 	    continue;
1994 	  fn_arg_types
1995 	    = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (insttype));
1996 	  if (!compparms (fn_arg_types, decl_arg_types))
1997 	    continue;
1998 
1999 	  /* Save this template, and the arguments deduced.  */
2000 	  templates = tree_cons (targs, fn, templates);
2001 	}
2002       else if (need_member_template)
2003 	/* FN is an ordinary member function, and we need a
2004 	   specialization of a member template.  */
2005 	;
2006       else if (TREE_CODE (fn) != FUNCTION_DECL)
2007 	/* We can get IDENTIFIER_NODEs here in certain erroneous
2008 	   cases.  */
2009 	;
2010       else if (!DECL_FUNCTION_MEMBER_P (fn))
2011 	/* This is just an ordinary non-member function.  Nothing can
2012 	   be a specialization of that.  */
2013 	;
2014       else if (DECL_ARTIFICIAL (fn))
2015 	/* Cannot specialize functions that are created implicitly.  */
2016 	;
2017       else
2018 	{
2019 	  tree decl_arg_types;
2020 
2021 	  /* This is an ordinary member function.  However, since
2022 	     we're here, we can assume its enclosing class is a
2023 	     template class.  For example,
2024 
2025 	       template <typename T> struct S { void f(); };
2026 	       template <> void S<int>::f() {}
2027 
2028 	     Here, S<int>::f is a non-template, but S<int> is a
2029 	     template class.  If FN has the same type as DECL, we
2030 	     might be in business.  */
2031 
2032 	  if (!DECL_TEMPLATE_INFO (fn))
2033 	    /* Its enclosing class is an explicit specialization
2034 	       of a template class.  This is not a candidate.  */
2035 	    continue;
2036 
2037 	  if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
2038 			    TREE_TYPE (TREE_TYPE (fn))))
2039 	    /* The return types differ.  */
2040 	    continue;
2041 
2042 	  /* Adjust the type of DECL in case FN is a static member.  */
2043 	  decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
2044 	  if (DECL_STATIC_FUNCTION_P (fn)
2045 	      && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2046 	    decl_arg_types = TREE_CHAIN (decl_arg_types);
2047 
2048 	  if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
2049 			 decl_arg_types))
2050 	    /* They match!  */
2051 	    candidates = tree_cons (NULL_TREE, fn, candidates);
2052 	}
2053     }
2054 
2055   if (templates && TREE_CHAIN (templates))
2056     {
2057       /* We have:
2058 
2059 	   [temp.expl.spec]
2060 
2061 	   It is possible for a specialization with a given function
2062 	   signature to be instantiated from more than one function
2063 	   template.  In such cases, explicit specification of the
2064 	   template arguments must be used to uniquely identify the
2065 	   function template specialization being specialized.
2066 
2067 	 Note that here, there's no suggestion that we're supposed to
2068 	 determine which of the candidate templates is most
2069 	 specialized.  However, we, also have:
2070 
2071 	   [temp.func.order]
2072 
2073 	   Partial ordering of overloaded function template
2074 	   declarations is used in the following contexts to select
2075 	   the function template to which a function template
2076 	   specialization refers:
2077 
2078 	   -- when an explicit specialization refers to a function
2079 	      template.
2080 
2081 	 So, we do use the partial ordering rules, at least for now.
2082 	 This extension can only serve to make invalid programs valid,
2083 	 so it's safe.  And, there is strong anecdotal evidence that
2084 	 the committee intended the partial ordering rules to apply;
2085 	 the EDG front end has that behavior, and John Spicer claims
2086 	 that the committee simply forgot to delete the wording in
2087 	 [temp.expl.spec].  */
2088       tree tmpl = most_specialized_instantiation (templates);
2089       if (tmpl != error_mark_node)
2090 	{
2091 	  templates = tmpl;
2092 	  TREE_CHAIN (templates) = NULL_TREE;
2093 	}
2094     }
2095 
2096   if (templates == NULL_TREE && candidates == NULL_TREE)
2097     {
2098       error ("template-id %qD for %q+D does not match any template "
2099 	     "declaration", template_id, decl);
2100       if (header_count && header_count != template_count + 1)
2101 	inform (input_location, "saw %d %<template<>%>, need %d for "
2102 		"specializing a member function template",
2103 		header_count, template_count + 1);
2104       return error_mark_node;
2105     }
2106   else if ((templates && TREE_CHAIN (templates))
2107 	   || (candidates && TREE_CHAIN (candidates))
2108 	   || (templates && candidates))
2109     {
2110       error ("ambiguous template specialization %qD for %q+D",
2111 	     template_id, decl);
2112       candidates = chainon (candidates, templates);
2113       print_candidates (candidates);
2114       return error_mark_node;
2115     }
2116 
2117   /* We have one, and exactly one, match.  */
2118   if (candidates)
2119     {
2120       tree fn = TREE_VALUE (candidates);
2121       *targs_out = copy_node (DECL_TI_ARGS (fn));
2122       /* DECL is a re-declaration or partial instantiation of a template
2123 	 function.  */
2124       if (TREE_CODE (fn) == TEMPLATE_DECL)
2125 	return fn;
2126       /* It was a specialization of an ordinary member function in a
2127 	 template class.  */
2128       return DECL_TI_TEMPLATE (fn);
2129     }
2130 
2131   /* It was a specialization of a template.  */
2132   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
2133   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
2134     {
2135       *targs_out = copy_node (targs);
2136       SET_TMPL_ARGS_LEVEL (*targs_out,
2137 			   TMPL_ARGS_DEPTH (*targs_out),
2138 			   TREE_PURPOSE (templates));
2139     }
2140   else
2141     *targs_out = TREE_PURPOSE (templates);
2142   return TREE_VALUE (templates);
2143 }
2144 
2145 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
2146    but with the default argument values filled in from those in the
2147    TMPL_TYPES.  */
2148 
2149 static tree
copy_default_args_to_explicit_spec_1(tree spec_types,tree tmpl_types)2150 copy_default_args_to_explicit_spec_1 (tree spec_types,
2151 				      tree tmpl_types)
2152 {
2153   tree new_spec_types;
2154 
2155   if (!spec_types)
2156     return NULL_TREE;
2157 
2158   if (spec_types == void_list_node)
2159     return void_list_node;
2160 
2161   /* Substitute into the rest of the list.  */
2162   new_spec_types =
2163     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
2164 					  TREE_CHAIN (tmpl_types));
2165 
2166   /* Add the default argument for this parameter.  */
2167   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
2168 			 TREE_VALUE (spec_types),
2169 			 new_spec_types);
2170 }
2171 
2172 /* DECL is an explicit specialization.  Replicate default arguments
2173    from the template it specializes.  (That way, code like:
2174 
2175      template <class T> void f(T = 3);
2176      template <> void f(double);
2177      void g () { f (); }
2178 
2179    works, as required.)  An alternative approach would be to look up
2180    the correct default arguments at the call-site, but this approach
2181    is consistent with how implicit instantiations are handled.  */
2182 
2183 static void
copy_default_args_to_explicit_spec(tree decl)2184 copy_default_args_to_explicit_spec (tree decl)
2185 {
2186   tree tmpl;
2187   tree spec_types;
2188   tree tmpl_types;
2189   tree new_spec_types;
2190   tree old_type;
2191   tree new_type;
2192   tree t;
2193   tree object_type = NULL_TREE;
2194   tree in_charge = NULL_TREE;
2195   tree vtt = NULL_TREE;
2196 
2197   /* See if there's anything we need to do.  */
2198   tmpl = DECL_TI_TEMPLATE (decl);
2199   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
2200   for (t = tmpl_types; t; t = TREE_CHAIN (t))
2201     if (TREE_PURPOSE (t))
2202       break;
2203   if (!t)
2204     return;
2205 
2206   old_type = TREE_TYPE (decl);
2207   spec_types = TYPE_ARG_TYPES (old_type);
2208 
2209   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2210     {
2211       /* Remove the this pointer, but remember the object's type for
2212 	 CV quals.  */
2213       object_type = TREE_TYPE (TREE_VALUE (spec_types));
2214       spec_types = TREE_CHAIN (spec_types);
2215       tmpl_types = TREE_CHAIN (tmpl_types);
2216 
2217       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
2218 	{
2219 	  /* DECL may contain more parameters than TMPL due to the extra
2220 	     in-charge parameter in constructors and destructors.  */
2221 	  in_charge = spec_types;
2222 	  spec_types = TREE_CHAIN (spec_types);
2223 	}
2224       if (DECL_HAS_VTT_PARM_P (decl))
2225 	{
2226 	  vtt = spec_types;
2227 	  spec_types = TREE_CHAIN (spec_types);
2228 	}
2229     }
2230 
2231   /* Compute the merged default arguments.  */
2232   new_spec_types =
2233     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
2234 
2235   /* Compute the new FUNCTION_TYPE.  */
2236   if (object_type)
2237     {
2238       if (vtt)
2239 	new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
2240 					 TREE_VALUE (vtt),
2241 					 new_spec_types);
2242 
2243       if (in_charge)
2244 	/* Put the in-charge parameter back.  */
2245 	new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
2246 					 TREE_VALUE (in_charge),
2247 					 new_spec_types);
2248 
2249       new_type = build_method_type_directly (object_type,
2250 					     TREE_TYPE (old_type),
2251 					     new_spec_types);
2252     }
2253   else
2254     new_type = build_function_type (TREE_TYPE (old_type),
2255 				    new_spec_types);
2256   new_type = cp_build_type_attribute_variant (new_type,
2257 					      TYPE_ATTRIBUTES (old_type));
2258   new_type = build_exception_variant (new_type,
2259 				      TYPE_RAISES_EXCEPTIONS (old_type));
2260   TREE_TYPE (decl) = new_type;
2261 }
2262 
2263 /* Return the number of template headers we expect to see for a definition
2264    or specialization of CTYPE or one of its non-template members.  */
2265 
2266 int
num_template_headers_for_class(tree ctype)2267 num_template_headers_for_class (tree ctype)
2268 {
2269   int num_templates = 0;
2270 
2271   while (ctype && CLASS_TYPE_P (ctype))
2272     {
2273       /* You're supposed to have one `template <...>' for every
2274 	 template class, but you don't need one for a full
2275 	 specialization.  For example:
2276 
2277 	 template <class T> struct S{};
2278 	 template <> struct S<int> { void f(); };
2279 	 void S<int>::f () {}
2280 
2281 	 is correct; there shouldn't be a `template <>' for the
2282 	 definition of `S<int>::f'.  */
2283       if (!CLASSTYPE_TEMPLATE_INFO (ctype))
2284 	/* If CTYPE does not have template information of any
2285 	   kind,  then it is not a template, nor is it nested
2286 	   within a template.  */
2287 	break;
2288       if (explicit_class_specialization_p (ctype))
2289 	break;
2290       if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (ctype)))
2291 	++num_templates;
2292 
2293       ctype = TYPE_CONTEXT (ctype);
2294     }
2295 
2296   return num_templates;
2297 }
2298 
2299 /* Do a simple sanity check on the template headers that precede the
2300    variable declaration DECL.  */
2301 
2302 void
check_template_variable(tree decl)2303 check_template_variable (tree decl)
2304 {
2305   tree ctx = CP_DECL_CONTEXT (decl);
2306   int wanted = num_template_headers_for_class (ctx);
2307   if (!TYPE_P (ctx) || !CLASSTYPE_TEMPLATE_INFO (ctx))
2308     permerror (DECL_SOURCE_LOCATION (decl),
2309 	       "%qD is not a static data member of a class template", decl);
2310   else if (template_header_count > wanted)
2311     {
2312       bool warned = pedwarn (DECL_SOURCE_LOCATION (decl), 0,
2313 			     "too many template headers for %D (should be %d)",
2314 			     decl, wanted);
2315       if (warned && CLASSTYPE_TEMPLATE_SPECIALIZATION (ctx))
2316 	inform (DECL_SOURCE_LOCATION (decl),
2317 		"members of an explicitly specialized class are defined "
2318 		"without a template header");
2319     }
2320 }
2321 
2322 /* Check to see if the function just declared, as indicated in
2323    DECLARATOR, and in DECL, is a specialization of a function
2324    template.  We may also discover that the declaration is an explicit
2325    instantiation at this point.
2326 
2327    Returns DECL, or an equivalent declaration that should be used
2328    instead if all goes well.  Issues an error message if something is
2329    amiss.  Returns error_mark_node if the error is not easily
2330    recoverable.
2331 
2332    FLAGS is a bitmask consisting of the following flags:
2333 
2334    2: The function has a definition.
2335    4: The function is a friend.
2336 
2337    The TEMPLATE_COUNT is the number of references to qualifying
2338    template classes that appeared in the name of the function.  For
2339    example, in
2340 
2341      template <class T> struct S { void f(); };
2342      void S<int>::f();
2343 
2344    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
2345    classes are not counted in the TEMPLATE_COUNT, so that in
2346 
2347      template <class T> struct S {};
2348      template <> struct S<int> { void f(); }
2349      template <> void S<int>::f();
2350 
2351    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
2352    invalid; there should be no template <>.)
2353 
2354    If the function is a specialization, it is marked as such via
2355    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
2356    is set up correctly, and it is added to the list of specializations
2357    for that template.  */
2358 
2359 tree
check_explicit_specialization(tree declarator,tree decl,int template_count,int flags)2360 check_explicit_specialization (tree declarator,
2361 			       tree decl,
2362 			       int template_count,
2363 			       int flags)
2364 {
2365   int have_def = flags & 2;
2366   int is_friend = flags & 4;
2367   int specialization = 0;
2368   int explicit_instantiation = 0;
2369   int member_specialization = 0;
2370   tree ctype = DECL_CLASS_CONTEXT (decl);
2371   tree dname = DECL_NAME (decl);
2372   tmpl_spec_kind tsk;
2373 
2374   if (is_friend)
2375     {
2376       if (!processing_specialization)
2377 	tsk = tsk_none;
2378       else
2379 	tsk = tsk_excessive_parms;
2380     }
2381   else
2382     tsk = current_tmpl_spec_kind (template_count);
2383 
2384   switch (tsk)
2385     {
2386     case tsk_none:
2387       if (processing_specialization)
2388 	{
2389 	  specialization = 1;
2390 	  SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2391 	}
2392       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2393 	{
2394 	  if (is_friend)
2395 	    /* This could be something like:
2396 
2397 	       template <class T> void f(T);
2398 	       class S { friend void f<>(int); }  */
2399 	    specialization = 1;
2400 	  else
2401 	    {
2402 	      /* This case handles bogus declarations like template <>
2403 		 template <class T> void f<int>(); */
2404 
2405 	      error ("template-id %qD in declaration of primary template",
2406 		     declarator);
2407 	      return decl;
2408 	    }
2409 	}
2410       break;
2411 
2412     case tsk_invalid_member_spec:
2413       /* The error has already been reported in
2414 	 check_specialization_scope.  */
2415       return error_mark_node;
2416 
2417     case tsk_invalid_expl_inst:
2418       error ("template parameter list used in explicit instantiation");
2419 
2420       /* Fall through.  */
2421 
2422     case tsk_expl_inst:
2423       if (have_def)
2424 	error ("definition provided for explicit instantiation");
2425 
2426       explicit_instantiation = 1;
2427       break;
2428 
2429     case tsk_excessive_parms:
2430     case tsk_insufficient_parms:
2431       if (tsk == tsk_excessive_parms)
2432 	error ("too many template parameter lists in declaration of %qD",
2433 	       decl);
2434       else if (template_header_count)
2435 	error("too few template parameter lists in declaration of %qD", decl);
2436       else
2437 	error("explicit specialization of %qD must be introduced by "
2438 	      "%<template <>%>", decl);
2439 
2440       /* Fall through.  */
2441     case tsk_expl_spec:
2442       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2443       if (ctype)
2444 	member_specialization = 1;
2445       else
2446 	specialization = 1;
2447       break;
2448 
2449     case tsk_template:
2450       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2451 	{
2452 	  /* This case handles bogus declarations like template <>
2453 	     template <class T> void f<int>(); */
2454 
2455 	  if (uses_template_parms (declarator))
2456 	    error ("function template partial specialization %qD "
2457 		   "is not allowed", declarator);
2458 	  else
2459 	    error ("template-id %qD in declaration of primary template",
2460 		   declarator);
2461 	  return decl;
2462 	}
2463 
2464       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
2465 	/* This is a specialization of a member template, without
2466 	   specialization the containing class.  Something like:
2467 
2468 	     template <class T> struct S {
2469 	       template <class U> void f (U);
2470 	     };
2471 	     template <> template <class U> void S<int>::f(U) {}
2472 
2473 	   That's a specialization -- but of the entire template.  */
2474 	specialization = 1;
2475       break;
2476 
2477     default:
2478       gcc_unreachable ();
2479     }
2480 
2481   if (specialization || member_specialization)
2482     {
2483       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2484       for (; t; t = TREE_CHAIN (t))
2485 	if (TREE_PURPOSE (t))
2486 	  {
2487 	    permerror (input_location,
2488 		       "default argument specified in explicit specialization");
2489 	    break;
2490 	  }
2491     }
2492 
2493   if (specialization || member_specialization || explicit_instantiation)
2494     {
2495       tree tmpl = NULL_TREE;
2496       tree targs = NULL_TREE;
2497 
2498       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
2499       if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2500 	{
2501 	  tree fns;
2502 
2503 	  gcc_assert (identifier_p (declarator));
2504 	  if (ctype)
2505 	    fns = dname;
2506 	  else
2507 	    {
2508 	      /* If there is no class context, the explicit instantiation
2509 		 must be at namespace scope.  */
2510 	      gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2511 
2512 	      /* Find the namespace binding, using the declaration
2513 		 context.  */
2514 	      fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2515 					   false, true);
2516 	      if (fns == error_mark_node || !is_overloaded_fn (fns))
2517 		{
2518 		  error ("%qD is not a template function", dname);
2519 		  fns = error_mark_node;
2520 		}
2521 	      else
2522 		{
2523 		  tree fn = OVL_CURRENT (fns);
2524 		  if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2525 						CP_DECL_CONTEXT (fn)))
2526 		    error ("%qD is not declared in %qD",
2527 			   decl, current_namespace);
2528 		}
2529 	    }
2530 
2531 	  declarator = lookup_template_function (fns, NULL_TREE);
2532 	}
2533 
2534       if (declarator == error_mark_node)
2535 	return error_mark_node;
2536 
2537       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2538 	{
2539 	  if (!explicit_instantiation)
2540 	    /* A specialization in class scope.  This is invalid,
2541 	       but the error will already have been flagged by
2542 	       check_specialization_scope.  */
2543 	    return error_mark_node;
2544 	  else
2545 	    {
2546 	      /* It's not valid to write an explicit instantiation in
2547 		 class scope, e.g.:
2548 
2549 		   class C { template void f(); }
2550 
2551 		   This case is caught by the parser.  However, on
2552 		   something like:
2553 
2554 		   template class C { void f(); };
2555 
2556 		   (which is invalid) we can get here.  The error will be
2557 		   issued later.  */
2558 	      ;
2559 	    }
2560 
2561 	  return decl;
2562 	}
2563       else if (ctype != NULL_TREE
2564 	       && (identifier_p (TREE_OPERAND (declarator, 0))))
2565 	{
2566 	  /* Find the list of functions in ctype that have the same
2567 	     name as the declared function.  */
2568 	  tree name = TREE_OPERAND (declarator, 0);
2569 	  tree fns = NULL_TREE;
2570 	  int idx;
2571 
2572 	  if (constructor_name_p (name, ctype))
2573 	    {
2574 	      int is_constructor = DECL_CONSTRUCTOR_P (decl);
2575 
2576 	      if (is_constructor ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2577 		  : !CLASSTYPE_DESTRUCTORS (ctype))
2578 		{
2579 		  /* From [temp.expl.spec]:
2580 
2581 		     If such an explicit specialization for the member
2582 		     of a class template names an implicitly-declared
2583 		     special member function (clause _special_), the
2584 		     program is ill-formed.
2585 
2586 		     Similar language is found in [temp.explicit].  */
2587 		  error ("specialization of implicitly-declared special member function");
2588 		  return error_mark_node;
2589 		}
2590 
2591 	      name = is_constructor ? ctor_identifier : dtor_identifier;
2592 	    }
2593 
2594 	  if (!DECL_CONV_FN_P (decl))
2595 	    {
2596 	      idx = lookup_fnfields_1 (ctype, name);
2597 	      if (idx >= 0)
2598 		fns = (*CLASSTYPE_METHOD_VEC (ctype))[idx];
2599 	    }
2600 	  else
2601 	    {
2602 	      vec<tree, va_gc> *methods;
2603 	      tree ovl;
2604 
2605 	      /* For a type-conversion operator, we cannot do a
2606 		 name-based lookup.  We might be looking for `operator
2607 		 int' which will be a specialization of `operator T'.
2608 		 So, we find *all* the conversion operators, and then
2609 		 select from them.  */
2610 	      fns = NULL_TREE;
2611 
2612 	      methods = CLASSTYPE_METHOD_VEC (ctype);
2613 	      if (methods)
2614 		for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2615 		     methods->iterate (idx, &ovl);
2616 		     ++idx)
2617 		  {
2618 		    if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2619 		      /* There are no more conversion functions.  */
2620 		      break;
2621 
2622 		    /* Glue all these conversion functions together
2623 		       with those we already have.  */
2624 		    for (; ovl; ovl = OVL_NEXT (ovl))
2625 		      fns = ovl_cons (OVL_CURRENT (ovl), fns);
2626 		  }
2627 	    }
2628 
2629 	  if (fns == NULL_TREE)
2630 	    {
2631 	      error ("no member function %qD declared in %qT", name, ctype);
2632 	      return error_mark_node;
2633 	    }
2634 	  else
2635 	    TREE_OPERAND (declarator, 0) = fns;
2636 	}
2637 
2638       /* Figure out what exactly is being specialized at this point.
2639 	 Note that for an explicit instantiation, even one for a
2640 	 member function, we cannot tell apriori whether the
2641 	 instantiation is for a member template, or just a member
2642 	 function of a template class.  Even if a member template is
2643 	 being instantiated, the member template arguments may be
2644 	 elided if they can be deduced from the rest of the
2645 	 declaration.  */
2646       tmpl = determine_specialization (declarator, decl,
2647 				       &targs,
2648 				       member_specialization,
2649 				       template_count,
2650 				       tsk);
2651 
2652       if (!tmpl || tmpl == error_mark_node)
2653 	/* We couldn't figure out what this declaration was
2654 	   specializing.  */
2655 	return error_mark_node;
2656       else
2657 	{
2658 	  tree gen_tmpl = most_general_template (tmpl);
2659 
2660 	  if (explicit_instantiation)
2661 	    {
2662 	      /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2663 		 is done by do_decl_instantiation later.  */
2664 
2665 	      int arg_depth = TMPL_ARGS_DEPTH (targs);
2666 	      int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2667 
2668 	      if (arg_depth > parm_depth)
2669 		{
2670 		  /* If TMPL is not the most general template (for
2671 		     example, if TMPL is a friend template that is
2672 		     injected into namespace scope), then there will
2673 		     be too many levels of TARGS.  Remove some of them
2674 		     here.  */
2675 		  int i;
2676 		  tree new_targs;
2677 
2678 		  new_targs = make_tree_vec (parm_depth);
2679 		  for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2680 		    TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2681 		      = TREE_VEC_ELT (targs, i);
2682 		  targs = new_targs;
2683 		}
2684 
2685 	      return instantiate_template (tmpl, targs, tf_error);
2686 	    }
2687 
2688 	  /* If we thought that the DECL was a member function, but it
2689 	     turns out to be specializing a static member function,
2690 	     make DECL a static member function as well.  */
2691 	  if (DECL_STATIC_FUNCTION_P (tmpl)
2692 	      && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2693 	    revert_static_member_fn (decl);
2694 
2695 	  /* If this is a specialization of a member template of a
2696 	     template class, we want to return the TEMPLATE_DECL, not
2697 	     the specialization of it.  */
2698 	  if (tsk == tsk_template)
2699 	    {
2700 	      tree result = DECL_TEMPLATE_RESULT (tmpl);
2701 	      SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2702 	      DECL_INITIAL (result) = NULL_TREE;
2703 	      if (have_def)
2704 		{
2705 		  tree parm;
2706 		  DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2707 		  DECL_SOURCE_LOCATION (result)
2708 		    = DECL_SOURCE_LOCATION (decl);
2709 		  /* We want to use the argument list specified in the
2710 		     definition, not in the original declaration.  */
2711 		  DECL_ARGUMENTS (result) = DECL_ARGUMENTS (decl);
2712 		  for (parm = DECL_ARGUMENTS (result); parm;
2713 		       parm = DECL_CHAIN (parm))
2714 		    DECL_CONTEXT (parm) = result;
2715 		}
2716 	      return register_specialization (tmpl, gen_tmpl, targs,
2717 					      is_friend, 0);
2718 	    }
2719 
2720 	  /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2721 	  DECL_TEMPLATE_INFO (decl) = build_template_info (tmpl, targs);
2722 
2723 	  /* Inherit default function arguments from the template
2724 	     DECL is specializing.  */
2725 	  copy_default_args_to_explicit_spec (decl);
2726 
2727 	  /* This specialization has the same protection as the
2728 	     template it specializes.  */
2729 	  TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2730 	  TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2731 
2732           /* 7.1.1-1 [dcl.stc]
2733 
2734              A storage-class-specifier shall not be specified in an
2735              explicit specialization...
2736 
2737              The parser rejects these, so unless action is taken here,
2738              explicit function specializations will always appear with
2739              global linkage.
2740 
2741              The action recommended by the C++ CWG in response to C++
2742              defect report 605 is to make the storage class and linkage
2743              of the explicit specialization match the templated function:
2744 
2745              http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2746            */
2747           if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2748             {
2749               tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2750               gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2751 
2752               /* This specialization has the same linkage and visibility as
2753                  the function template it specializes.  */
2754               TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2755 	      if (! TREE_PUBLIC (decl))
2756 		{
2757 		  DECL_INTERFACE_KNOWN (decl) = 1;
2758 		  DECL_NOT_REALLY_EXTERN (decl) = 1;
2759 		}
2760               DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2761               if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2762                 {
2763                   DECL_VISIBILITY_SPECIFIED (decl) = 1;
2764                   DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2765                 }
2766             }
2767 
2768 	  /* If DECL is a friend declaration, declared using an
2769 	     unqualified name, the namespace associated with DECL may
2770 	     have been set incorrectly.  For example, in:
2771 
2772 	       template <typename T> void f(T);
2773 	       namespace N {
2774 		 struct S { friend void f<int>(int); }
2775 	       }
2776 
2777 	     we will have set the DECL_CONTEXT for the friend
2778 	     declaration to N, rather than to the global namespace.  */
2779 	  if (DECL_NAMESPACE_SCOPE_P (decl))
2780 	    DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2781 
2782 	  if (is_friend && !have_def)
2783 	    /* This is not really a declaration of a specialization.
2784 	       It's just the name of an instantiation.  But, it's not
2785 	       a request for an instantiation, either.  */
2786 	    SET_DECL_IMPLICIT_INSTANTIATION (decl);
2787 
2788 	  /* Register this specialization so that we can find it
2789 	     again.  */
2790 	  decl = register_specialization (decl, gen_tmpl, targs, is_friend, 0);
2791 
2792 	  /* A 'structor should already have clones.  */
2793 	  gcc_assert (decl == error_mark_node
2794 		      || !(DECL_CONSTRUCTOR_P (decl)
2795 			   || DECL_DESTRUCTOR_P (decl))
2796 		      || DECL_CLONED_FUNCTION_P (DECL_CHAIN (decl)));
2797 	}
2798     }
2799 
2800   return decl;
2801 }
2802 
2803 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2804    parameters.  These are represented in the same format used for
2805    DECL_TEMPLATE_PARMS.  */
2806 
2807 int
comp_template_parms(const_tree parms1,const_tree parms2)2808 comp_template_parms (const_tree parms1, const_tree parms2)
2809 {
2810   const_tree p1;
2811   const_tree p2;
2812 
2813   if (parms1 == parms2)
2814     return 1;
2815 
2816   for (p1 = parms1, p2 = parms2;
2817        p1 != NULL_TREE && p2 != NULL_TREE;
2818        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2819     {
2820       tree t1 = TREE_VALUE (p1);
2821       tree t2 = TREE_VALUE (p2);
2822       int i;
2823 
2824       gcc_assert (TREE_CODE (t1) == TREE_VEC);
2825       gcc_assert (TREE_CODE (t2) == TREE_VEC);
2826 
2827       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2828 	return 0;
2829 
2830       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2831 	{
2832           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2833           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2834 
2835           /* If either of the template parameters are invalid, assume
2836              they match for the sake of error recovery. */
2837           if (error_operand_p (parm1) || error_operand_p (parm2))
2838             return 1;
2839 
2840 	  if (TREE_CODE (parm1) != TREE_CODE (parm2))
2841 	    return 0;
2842 
2843 	  if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2844               && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2845                   == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2846 	    continue;
2847 	  else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2848 	    return 0;
2849 	}
2850     }
2851 
2852   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2853     /* One set of parameters has more parameters lists than the
2854        other.  */
2855     return 0;
2856 
2857   return 1;
2858 }
2859 
2860 /* Determine whether PARM is a parameter pack.  */
2861 
2862 bool
template_parameter_pack_p(const_tree parm)2863 template_parameter_pack_p (const_tree parm)
2864 {
2865   /* Determine if we have a non-type template parameter pack.  */
2866   if (TREE_CODE (parm) == PARM_DECL)
2867     return (DECL_TEMPLATE_PARM_P (parm)
2868             && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2869   if (TREE_CODE (parm) == TEMPLATE_PARM_INDEX)
2870     return TEMPLATE_PARM_PARAMETER_PACK (parm);
2871 
2872   /* If this is a list of template parameters, we could get a
2873      TYPE_DECL or a TEMPLATE_DECL.  */
2874   if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2875     parm = TREE_TYPE (parm);
2876 
2877   /* Otherwise it must be a type template parameter.  */
2878   return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2879 	   || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2880 	  && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2881 }
2882 
2883 /* Determine if T is a function parameter pack.  */
2884 
2885 bool
function_parameter_pack_p(const_tree t)2886 function_parameter_pack_p (const_tree t)
2887 {
2888   if (t && TREE_CODE (t) == PARM_DECL)
2889     return DECL_PACK_P (t);
2890   return false;
2891 }
2892 
2893 /* Return the function template declaration of PRIMARY_FUNC_TMPL_INST.
2894    PRIMARY_FUNC_TMPL_INST is a primary function template instantiation.  */
2895 
2896 tree
get_function_template_decl(const_tree primary_func_tmpl_inst)2897 get_function_template_decl (const_tree primary_func_tmpl_inst)
2898 {
2899   if (! primary_func_tmpl_inst
2900       || TREE_CODE (primary_func_tmpl_inst) != FUNCTION_DECL
2901       || ! primary_template_instantiation_p (primary_func_tmpl_inst))
2902     return NULL;
2903 
2904   return DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (primary_func_tmpl_inst));
2905 }
2906 
2907 /* Return true iff the function parameter PARAM_DECL was expanded
2908    from the function parameter pack PACK.  */
2909 
2910 bool
function_parameter_expanded_from_pack_p(tree param_decl,tree pack)2911 function_parameter_expanded_from_pack_p (tree param_decl, tree pack)
2912 {
2913   if (DECL_ARTIFICIAL (param_decl)
2914       || !function_parameter_pack_p (pack))
2915     return false;
2916 
2917   /* The parameter pack and its pack arguments have the same
2918      DECL_PARM_INDEX.  */
2919   return DECL_PARM_INDEX (pack) == DECL_PARM_INDEX (param_decl);
2920 }
2921 
2922 /* Determine whether ARGS describes a variadic template args list,
2923    i.e., one that is terminated by a template argument pack.  */
2924 
2925 static bool
template_args_variadic_p(tree args)2926 template_args_variadic_p (tree args)
2927 {
2928   int nargs;
2929   tree last_parm;
2930 
2931   if (args == NULL_TREE)
2932     return false;
2933 
2934   args = INNERMOST_TEMPLATE_ARGS (args);
2935   nargs = TREE_VEC_LENGTH (args);
2936 
2937   if (nargs == 0)
2938     return false;
2939 
2940   last_parm = TREE_VEC_ELT (args, nargs - 1);
2941 
2942   return ARGUMENT_PACK_P (last_parm);
2943 }
2944 
2945 /* Generate a new name for the parameter pack name NAME (an
2946    IDENTIFIER_NODE) that incorporates its */
2947 
2948 static tree
make_ith_pack_parameter_name(tree name,int i)2949 make_ith_pack_parameter_name (tree name, int i)
2950 {
2951   /* Munge the name to include the parameter index.  */
2952 #define NUMBUF_LEN 128
2953   char numbuf[NUMBUF_LEN];
2954   char* newname;
2955   int newname_len;
2956 
2957   if (name == NULL_TREE)
2958     return name;
2959   snprintf (numbuf, NUMBUF_LEN, "%i", i);
2960   newname_len = IDENTIFIER_LENGTH (name)
2961 	        + strlen (numbuf) + 2;
2962   newname = (char*)alloca (newname_len);
2963   snprintf (newname, newname_len,
2964 	    "%s#%i", IDENTIFIER_POINTER (name), i);
2965   return get_identifier (newname);
2966 }
2967 
2968 /* Return true if T is a primary function, class or alias template
2969    instantiation.  */
2970 
2971 bool
primary_template_instantiation_p(const_tree t)2972 primary_template_instantiation_p (const_tree t)
2973 {
2974   if (!t)
2975     return false;
2976 
2977   if (TREE_CODE (t) == FUNCTION_DECL)
2978     return DECL_LANG_SPECIFIC (t)
2979 	   && DECL_TEMPLATE_INSTANTIATION (t)
2980 	   && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t));
2981   else if (CLASS_TYPE_P (t) && !TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
2982     return CLASSTYPE_TEMPLATE_INSTANTIATION (t)
2983 	   && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t));
2984   else if (alias_template_specialization_p (t))
2985     return true;
2986   return false;
2987 }
2988 
2989 /* Return true if PARM is a template template parameter.  */
2990 
2991 bool
template_template_parameter_p(const_tree parm)2992 template_template_parameter_p (const_tree parm)
2993 {
2994   return DECL_TEMPLATE_TEMPLATE_PARM_P (parm);
2995 }
2996 
2997 /* Return true iff PARM is a DECL representing a type template
2998    parameter.  */
2999 
3000 bool
template_type_parameter_p(const_tree parm)3001 template_type_parameter_p (const_tree parm)
3002 {
3003   return (parm
3004 	  && (TREE_CODE (parm) == TYPE_DECL
3005 	      || TREE_CODE (parm) == TEMPLATE_DECL)
3006 	  && DECL_TEMPLATE_PARM_P (parm));
3007 }
3008 
3009 /* Return the template parameters of T if T is a
3010    primary template instantiation, NULL otherwise.  */
3011 
3012 tree
get_primary_template_innermost_parameters(const_tree t)3013 get_primary_template_innermost_parameters (const_tree t)
3014 {
3015   tree parms = NULL, template_info = NULL;
3016 
3017   if ((template_info = get_template_info (t))
3018       && primary_template_instantiation_p (t))
3019     parms = INNERMOST_TEMPLATE_PARMS
3020 	(DECL_TEMPLATE_PARMS (TI_TEMPLATE (template_info)));
3021 
3022   return parms;
3023 }
3024 
3025 /* Return the template parameters of the LEVELth level from the full list
3026    of template parameters PARMS.  */
3027 
3028 tree
get_template_parms_at_level(tree parms,int level)3029 get_template_parms_at_level (tree parms, int level)
3030 {
3031   tree p;
3032   if (!parms
3033       || TREE_CODE (parms) != TREE_LIST
3034       || level > TMPL_PARMS_DEPTH (parms))
3035     return NULL_TREE;
3036 
3037   for (p = parms; p; p = TREE_CHAIN (p))
3038     if (TMPL_PARMS_DEPTH (p) == level)
3039       return p;
3040 
3041   return NULL_TREE;
3042 }
3043 
3044 /* Returns the template arguments of T if T is a template instantiation,
3045    NULL otherwise.  */
3046 
3047 tree
get_template_innermost_arguments(const_tree t)3048 get_template_innermost_arguments (const_tree t)
3049 {
3050   tree args = NULL, template_info = NULL;
3051 
3052   if ((template_info = get_template_info (t))
3053       && TI_ARGS (template_info))
3054     args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (template_info));
3055 
3056   return args;
3057 }
3058 
3059 /* Return the argument pack elements of T if T is a template argument pack,
3060    NULL otherwise.  */
3061 
3062 tree
get_template_argument_pack_elems(const_tree t)3063 get_template_argument_pack_elems (const_tree t)
3064 {
3065   if (TREE_CODE (t) != TYPE_ARGUMENT_PACK
3066       && TREE_CODE (t) != NONTYPE_ARGUMENT_PACK)
3067     return NULL;
3068 
3069   return ARGUMENT_PACK_ARGS (t);
3070 }
3071 
3072 /* Structure used to track the progress of find_parameter_packs_r.  */
3073 struct find_parameter_pack_data
3074 {
3075   /* TREE_LIST that will contain all of the parameter packs found by
3076      the traversal.  */
3077   tree* parameter_packs;
3078 
3079   /* Set of AST nodes that have been visited by the traversal.  */
3080   struct pointer_set_t *visited;
3081 };
3082 
3083 /* Identifies all of the argument packs that occur in a template
3084    argument and appends them to the TREE_LIST inside DATA, which is a
3085    find_parameter_pack_data structure. This is a subroutine of
3086    make_pack_expansion and uses_parameter_packs.  */
3087 static tree
find_parameter_packs_r(tree * tp,int * walk_subtrees,void * data)3088 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
3089 {
3090   tree t = *tp;
3091   struct find_parameter_pack_data* ppd =
3092     (struct find_parameter_pack_data*)data;
3093   bool parameter_pack_p = false;
3094 
3095   /* Handle type aliases/typedefs.  */
3096   if (TYPE_ALIAS_P (t))
3097     {
3098       if (TYPE_TEMPLATE_INFO (t))
3099 	cp_walk_tree (&TYPE_TI_ARGS (t),
3100 		      &find_parameter_packs_r,
3101 		      ppd, ppd->visited);
3102       *walk_subtrees = 0;
3103       return NULL_TREE;
3104     }
3105 
3106   /* Identify whether this is a parameter pack or not.  */
3107   switch (TREE_CODE (t))
3108     {
3109     case TEMPLATE_PARM_INDEX:
3110       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3111         parameter_pack_p = true;
3112       break;
3113 
3114     case TEMPLATE_TYPE_PARM:
3115       t = TYPE_MAIN_VARIANT (t);
3116     case TEMPLATE_TEMPLATE_PARM:
3117       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3118         parameter_pack_p = true;
3119       break;
3120 
3121     case FIELD_DECL:
3122     case PARM_DECL:
3123       if (DECL_PACK_P (t))
3124         {
3125           /* We don't want to walk into the type of a PARM_DECL,
3126              because we don't want to see the type parameter pack.  */
3127           *walk_subtrees = 0;
3128 	  parameter_pack_p = true;
3129         }
3130       break;
3131 
3132       /* Look through a lambda capture proxy to the field pack.  */
3133     case VAR_DECL:
3134       if (DECL_HAS_VALUE_EXPR_P (t))
3135 	{
3136 	  tree v = DECL_VALUE_EXPR (t);
3137 	  cp_walk_tree (&v,
3138 			&find_parameter_packs_r,
3139 			ppd, ppd->visited);
3140 	  *walk_subtrees = 0;
3141 	}
3142       break;
3143 
3144     case BASES:
3145       parameter_pack_p = true;
3146       break;
3147     default:
3148       /* Not a parameter pack.  */
3149       break;
3150     }
3151 
3152   if (parameter_pack_p)
3153     {
3154       /* Add this parameter pack to the list.  */
3155       *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
3156     }
3157 
3158   if (TYPE_P (t))
3159     cp_walk_tree (&TYPE_CONTEXT (t),
3160 		  &find_parameter_packs_r, ppd, ppd->visited);
3161 
3162   /* This switch statement will return immediately if we don't find a
3163      parameter pack.  */
3164   switch (TREE_CODE (t))
3165     {
3166     case TEMPLATE_PARM_INDEX:
3167       return NULL_TREE;
3168 
3169     case BOUND_TEMPLATE_TEMPLATE_PARM:
3170       /* Check the template itself.  */
3171       cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)),
3172 		    &find_parameter_packs_r, ppd, ppd->visited);
3173       /* Check the template arguments.  */
3174       cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd,
3175 		    ppd->visited);
3176       *walk_subtrees = 0;
3177       return NULL_TREE;
3178 
3179     case TEMPLATE_TYPE_PARM:
3180     case TEMPLATE_TEMPLATE_PARM:
3181       return NULL_TREE;
3182 
3183     case PARM_DECL:
3184       return NULL_TREE;
3185 
3186     case RECORD_TYPE:
3187       if (TYPE_PTRMEMFUNC_P (t))
3188 	return NULL_TREE;
3189       /* Fall through.  */
3190 
3191     case UNION_TYPE:
3192     case ENUMERAL_TYPE:
3193       if (TYPE_TEMPLATE_INFO (t))
3194 	cp_walk_tree (&TYPE_TI_ARGS (t),
3195 		      &find_parameter_packs_r, ppd, ppd->visited);
3196 
3197       *walk_subtrees = 0;
3198       return NULL_TREE;
3199 
3200     case CONSTRUCTOR:
3201     case TEMPLATE_DECL:
3202       cp_walk_tree (&TREE_TYPE (t),
3203 		    &find_parameter_packs_r, ppd, ppd->visited);
3204       return NULL_TREE;
3205 
3206     case TYPENAME_TYPE:
3207       cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
3208                    ppd, ppd->visited);
3209       *walk_subtrees = 0;
3210       return NULL_TREE;
3211 
3212     case TYPE_PACK_EXPANSION:
3213     case EXPR_PACK_EXPANSION:
3214       *walk_subtrees = 0;
3215       return NULL_TREE;
3216 
3217     case INTEGER_TYPE:
3218       cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r,
3219 		    ppd, ppd->visited);
3220       *walk_subtrees = 0;
3221       return NULL_TREE;
3222 
3223     case IDENTIFIER_NODE:
3224       cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd,
3225 		    ppd->visited);
3226       *walk_subtrees = 0;
3227       return NULL_TREE;
3228 
3229     default:
3230       return NULL_TREE;
3231     }
3232 
3233   return NULL_TREE;
3234 }
3235 
3236 /* Determines if the expression or type T uses any parameter packs.  */
3237 bool
uses_parameter_packs(tree t)3238 uses_parameter_packs (tree t)
3239 {
3240   tree parameter_packs = NULL_TREE;
3241   struct find_parameter_pack_data ppd;
3242   ppd.parameter_packs = &parameter_packs;
3243   ppd.visited = pointer_set_create ();
3244   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3245   pointer_set_destroy (ppd.visited);
3246   return parameter_packs != NULL_TREE;
3247 }
3248 
3249 /* Turn ARG, which may be an expression, type, or a TREE_LIST
3250    representation a base-class initializer into a parameter pack
3251    expansion. If all goes well, the resulting node will be an
3252    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
3253    respectively.  */
3254 tree
make_pack_expansion(tree arg)3255 make_pack_expansion (tree arg)
3256 {
3257   tree result;
3258   tree parameter_packs = NULL_TREE;
3259   bool for_types = false;
3260   struct find_parameter_pack_data ppd;
3261 
3262   if (!arg || arg == error_mark_node)
3263     return arg;
3264 
3265   if (TREE_CODE (arg) == TREE_LIST)
3266     {
3267       /* The only time we will see a TREE_LIST here is for a base
3268          class initializer.  In this case, the TREE_PURPOSE will be a
3269          _TYPE node (representing the base class expansion we're
3270          initializing) and the TREE_VALUE will be a TREE_LIST
3271          containing the initialization arguments.
3272 
3273          The resulting expansion looks somewhat different from most
3274          expansions. Rather than returning just one _EXPANSION, we
3275          return a TREE_LIST whose TREE_PURPOSE is a
3276          TYPE_PACK_EXPANSION containing the bases that will be
3277          initialized.  The TREE_VALUE will be identical to the
3278          original TREE_VALUE, which is a list of arguments that will
3279          be passed to each base.  We do not introduce any new pack
3280          expansion nodes into the TREE_VALUE (although it is possible
3281          that some already exist), because the TREE_PURPOSE and
3282          TREE_VALUE all need to be expanded together with the same
3283          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
3284          resulting TREE_PURPOSE will mention the parameter packs in
3285          both the bases and the arguments to the bases.  */
3286       tree purpose;
3287       tree value;
3288       tree parameter_packs = NULL_TREE;
3289 
3290       /* Determine which parameter packs will be used by the base
3291          class expansion.  */
3292       ppd.visited = pointer_set_create ();
3293       ppd.parameter_packs = &parameter_packs;
3294       cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r,
3295                     &ppd, ppd.visited);
3296 
3297       if (parameter_packs == NULL_TREE)
3298         {
3299           error ("base initializer expansion %<%T%> contains no parameter packs", arg);
3300           pointer_set_destroy (ppd.visited);
3301           return error_mark_node;
3302         }
3303 
3304       if (TREE_VALUE (arg) != void_type_node)
3305         {
3306           /* Collect the sets of parameter packs used in each of the
3307              initialization arguments.  */
3308           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
3309             {
3310               /* Determine which parameter packs will be expanded in this
3311                  argument.  */
3312               cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r,
3313                             &ppd, ppd.visited);
3314             }
3315         }
3316 
3317       pointer_set_destroy (ppd.visited);
3318 
3319       /* Create the pack expansion type for the base type.  */
3320       purpose = cxx_make_type (TYPE_PACK_EXPANSION);
3321       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
3322       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
3323 
3324       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3325 	 they will rarely be compared to anything.  */
3326       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
3327 
3328       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
3329     }
3330 
3331   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
3332     for_types = true;
3333 
3334   /* Build the PACK_EXPANSION_* node.  */
3335   result = for_types
3336      ? cxx_make_type (TYPE_PACK_EXPANSION)
3337      : make_node (EXPR_PACK_EXPANSION);
3338   SET_PACK_EXPANSION_PATTERN (result, arg);
3339   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
3340     {
3341       /* Propagate type and const-expression information.  */
3342       TREE_TYPE (result) = TREE_TYPE (arg);
3343       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
3344     }
3345   else
3346     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3347        they will rarely be compared to anything.  */
3348     SET_TYPE_STRUCTURAL_EQUALITY (result);
3349 
3350   /* Determine which parameter packs will be expanded.  */
3351   ppd.parameter_packs = &parameter_packs;
3352   ppd.visited = pointer_set_create ();
3353   cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
3354   pointer_set_destroy (ppd.visited);
3355 
3356   /* Make sure we found some parameter packs.  */
3357   if (parameter_packs == NULL_TREE)
3358     {
3359       if (TYPE_P (arg))
3360         error ("expansion pattern %<%T%> contains no argument packs", arg);
3361       else
3362         error ("expansion pattern %<%E%> contains no argument packs", arg);
3363       return error_mark_node;
3364     }
3365   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
3366 
3367   PACK_EXPANSION_LOCAL_P (result) = at_function_scope_p ();
3368 
3369   return result;
3370 }
3371 
3372 /* Checks T for any "bare" parameter packs, which have not yet been
3373    expanded, and issues an error if any are found. This operation can
3374    only be done on full expressions or types (e.g., an expression
3375    statement, "if" condition, etc.), because we could have expressions like:
3376 
3377      foo(f(g(h(args)))...)
3378 
3379    where "args" is a parameter pack. check_for_bare_parameter_packs
3380    should not be called for the subexpressions args, h(args),
3381    g(h(args)), or f(g(h(args))), because we would produce erroneous
3382    error messages.
3383 
3384    Returns TRUE and emits an error if there were bare parameter packs,
3385    returns FALSE otherwise.  */
3386 bool
check_for_bare_parameter_packs(tree t)3387 check_for_bare_parameter_packs (tree t)
3388 {
3389   tree parameter_packs = NULL_TREE;
3390   struct find_parameter_pack_data ppd;
3391 
3392   if (!processing_template_decl || !t || t == error_mark_node)
3393     return false;
3394 
3395   if (TREE_CODE (t) == TYPE_DECL)
3396     t = TREE_TYPE (t);
3397 
3398   ppd.parameter_packs = &parameter_packs;
3399   ppd.visited = pointer_set_create ();
3400   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3401   pointer_set_destroy (ppd.visited);
3402 
3403   if (parameter_packs)
3404     {
3405       error ("parameter packs not expanded with %<...%>:");
3406       while (parameter_packs)
3407         {
3408           tree pack = TREE_VALUE (parameter_packs);
3409           tree name = NULL_TREE;
3410 
3411           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
3412               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
3413             name = TYPE_NAME (pack);
3414           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
3415             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
3416           else
3417             name = DECL_NAME (pack);
3418 
3419 	  if (name)
3420 	    inform (input_location, "        %qD", name);
3421 	  else
3422 	    inform (input_location, "        <anonymous>");
3423 
3424           parameter_packs = TREE_CHAIN (parameter_packs);
3425         }
3426 
3427       return true;
3428     }
3429 
3430   return false;
3431 }
3432 
3433 /* Expand any parameter packs that occur in the template arguments in
3434    ARGS.  */
3435 tree
expand_template_argument_pack(tree args)3436 expand_template_argument_pack (tree args)
3437 {
3438   tree result_args = NULL_TREE;
3439   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
3440   int num_result_args = -1;
3441   int non_default_args_count = -1;
3442 
3443   /* First, determine if we need to expand anything, and the number of
3444      slots we'll need.  */
3445   for (in_arg = 0; in_arg < nargs; ++in_arg)
3446     {
3447       tree arg = TREE_VEC_ELT (args, in_arg);
3448       if (arg == NULL_TREE)
3449 	return args;
3450       if (ARGUMENT_PACK_P (arg))
3451         {
3452           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
3453           if (num_result_args < 0)
3454             num_result_args = in_arg + num_packed;
3455           else
3456             num_result_args += num_packed;
3457         }
3458       else
3459         {
3460           if (num_result_args >= 0)
3461             num_result_args++;
3462         }
3463     }
3464 
3465   /* If no expansion is necessary, we're done.  */
3466   if (num_result_args < 0)
3467     return args;
3468 
3469   /* Expand arguments.  */
3470   result_args = make_tree_vec (num_result_args);
3471   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (args))
3472     non_default_args_count =
3473       GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
3474   for (in_arg = 0; in_arg < nargs; ++in_arg)
3475     {
3476       tree arg = TREE_VEC_ELT (args, in_arg);
3477       if (ARGUMENT_PACK_P (arg))
3478         {
3479           tree packed = ARGUMENT_PACK_ARGS (arg);
3480           int i, num_packed = TREE_VEC_LENGTH (packed);
3481           for (i = 0; i < num_packed; ++i, ++out_arg)
3482             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
3483 	  if (non_default_args_count > 0)
3484 	    non_default_args_count += num_packed - 1;
3485         }
3486       else
3487         {
3488           TREE_VEC_ELT (result_args, out_arg) = arg;
3489           ++out_arg;
3490         }
3491     }
3492   if (non_default_args_count >= 0)
3493     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (result_args, non_default_args_count);
3494   return result_args;
3495 }
3496 
3497 /* Checks if DECL shadows a template parameter.
3498 
3499    [temp.local]: A template-parameter shall not be redeclared within its
3500    scope (including nested scopes).
3501 
3502    Emits an error and returns TRUE if the DECL shadows a parameter,
3503    returns FALSE otherwise.  */
3504 
3505 bool
check_template_shadow(tree decl)3506 check_template_shadow (tree decl)
3507 {
3508   tree olddecl;
3509 
3510   /* If we're not in a template, we can't possibly shadow a template
3511      parameter.  */
3512   if (!current_template_parms)
3513     return true;
3514 
3515   /* Figure out what we're shadowing.  */
3516   if (TREE_CODE (decl) == OVERLOAD)
3517     decl = OVL_CURRENT (decl);
3518   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
3519 
3520   /* If there's no previous binding for this name, we're not shadowing
3521      anything, let alone a template parameter.  */
3522   if (!olddecl)
3523     return true;
3524 
3525   /* If we're not shadowing a template parameter, we're done.  Note
3526      that OLDDECL might be an OVERLOAD (or perhaps even an
3527      ERROR_MARK), so we can't just blithely assume it to be a _DECL
3528      node.  */
3529   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
3530     return true;
3531 
3532   /* We check for decl != olddecl to avoid bogus errors for using a
3533      name inside a class.  We check TPFI to avoid duplicate errors for
3534      inline member templates.  */
3535   if (decl == olddecl
3536       || (DECL_TEMPLATE_PARM_P (decl)
3537 	  && TEMPLATE_PARMS_FOR_INLINE (current_template_parms)))
3538     return true;
3539 
3540   /* Don't complain about the injected class name, as we've already
3541      complained about the class itself.  */
3542   if (DECL_SELF_REFERENCE_P (decl))
3543     return false;
3544 
3545   error ("declaration of %q+#D", decl);
3546   error (" shadows template parm %q+#D", olddecl);
3547   return false;
3548 }
3549 
3550 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
3551    ORIG_LEVEL, DECL, and TYPE.  */
3552 
3553 static tree
build_template_parm_index(int index,int level,int orig_level,tree decl,tree type)3554 build_template_parm_index (int index,
3555 			   int level,
3556 			   int orig_level,
3557 			   tree decl,
3558 			   tree type)
3559 {
3560   tree t = make_node (TEMPLATE_PARM_INDEX);
3561   TEMPLATE_PARM_IDX (t) = index;
3562   TEMPLATE_PARM_LEVEL (t) = level;
3563   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
3564   TEMPLATE_PARM_DECL (t) = decl;
3565   TREE_TYPE (t) = type;
3566   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
3567   TREE_READONLY (t) = TREE_READONLY (decl);
3568 
3569   return t;
3570 }
3571 
3572 /* Find the canonical type parameter for the given template type
3573    parameter.  Returns the canonical type parameter, which may be TYPE
3574    if no such parameter existed.  */
3575 
3576 static tree
canonical_type_parameter(tree type)3577 canonical_type_parameter (tree type)
3578 {
3579   tree list;
3580   int idx = TEMPLATE_TYPE_IDX (type);
3581   if (!canonical_template_parms)
3582     vec_alloc (canonical_template_parms, idx+1);
3583 
3584   while (canonical_template_parms->length () <= (unsigned)idx)
3585     vec_safe_push (canonical_template_parms, NULL_TREE);
3586 
3587   list = (*canonical_template_parms)[idx];
3588   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
3589     list = TREE_CHAIN (list);
3590 
3591   if (list)
3592     return TREE_VALUE (list);
3593   else
3594     {
3595       (*canonical_template_parms)[idx]
3596 		= tree_cons (NULL_TREE, type,
3597 			     (*canonical_template_parms)[idx]);
3598       return type;
3599     }
3600 }
3601 
3602 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
3603    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
3604    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
3605    new one is created.  */
3606 
3607 static tree
reduce_template_parm_level(tree index,tree type,int levels,tree args,tsubst_flags_t complain)3608 reduce_template_parm_level (tree index, tree type, int levels, tree args,
3609 			    tsubst_flags_t complain)
3610 {
3611   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
3612       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
3613 	  != TEMPLATE_PARM_LEVEL (index) - levels)
3614       || !same_type_p (type, TREE_TYPE (TEMPLATE_PARM_DESCENDANTS (index))))
3615     {
3616       tree orig_decl = TEMPLATE_PARM_DECL (index);
3617       tree decl, t;
3618 
3619       decl = build_decl (DECL_SOURCE_LOCATION (orig_decl),
3620 			 TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
3621       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
3622       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
3623       DECL_ARTIFICIAL (decl) = 1;
3624       SET_DECL_TEMPLATE_PARM_P (decl);
3625 
3626       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
3627 				     TEMPLATE_PARM_LEVEL (index) - levels,
3628 				     TEMPLATE_PARM_ORIG_LEVEL (index),
3629 				     decl, type);
3630       TEMPLATE_PARM_DESCENDANTS (index) = t;
3631       TEMPLATE_PARM_PARAMETER_PACK (t)
3632 	= TEMPLATE_PARM_PARAMETER_PACK (index);
3633 
3634 	/* Template template parameters need this.  */
3635       if (TREE_CODE (decl) == TEMPLATE_DECL)
3636 	DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
3637 	  (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
3638 	   args, complain);
3639     }
3640 
3641   return TEMPLATE_PARM_DESCENDANTS (index);
3642 }
3643 
3644 /* Process information from new template parameter PARM and append it
3645    to the LIST being built.  This new parameter is a non-type
3646    parameter iff IS_NON_TYPE is true. This new parameter is a
3647    parameter pack iff IS_PARAMETER_PACK is true.  The location of PARM
3648    is in PARM_LOC.  */
3649 
3650 tree
process_template_parm(tree list,location_t parm_loc,tree parm,bool is_non_type,bool is_parameter_pack)3651 process_template_parm (tree list, location_t parm_loc, tree parm,
3652 		       bool is_non_type, bool is_parameter_pack)
3653 {
3654   tree decl = 0;
3655   tree defval;
3656   int idx = 0;
3657 
3658   gcc_assert (TREE_CODE (parm) == TREE_LIST);
3659   defval = TREE_PURPOSE (parm);
3660 
3661   if (list)
3662     {
3663       tree p = tree_last (list);
3664 
3665       if (p && TREE_VALUE (p) != error_mark_node)
3666         {
3667           p = TREE_VALUE (p);
3668           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
3669             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
3670           else
3671             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
3672         }
3673 
3674       ++idx;
3675     }
3676 
3677   if (is_non_type)
3678     {
3679       parm = TREE_VALUE (parm);
3680 
3681       SET_DECL_TEMPLATE_PARM_P (parm);
3682 
3683       if (TREE_TYPE (parm) != error_mark_node)
3684 	{
3685 	  /* [temp.param]
3686 
3687 	     The top-level cv-qualifiers on the template-parameter are
3688 	     ignored when determining its type.  */
3689 	  TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3690 	  if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3691 	    TREE_TYPE (parm) = error_mark_node;
3692 	  else if (uses_parameter_packs (TREE_TYPE (parm))
3693 		   && !is_parameter_pack
3694 		   /* If we're in a nested template parameter list, the template
3695 		      template parameter could be a parameter pack.  */
3696 		   && processing_template_parmlist == 1)
3697 	    {
3698 	      /* This template parameter is not a parameter pack, but it
3699 		 should be. Complain about "bare" parameter packs.  */
3700 	      check_for_bare_parameter_packs (TREE_TYPE (parm));
3701 
3702 	      /* Recover by calling this a parameter pack.  */
3703 	      is_parameter_pack = true;
3704 	    }
3705 	}
3706 
3707       /* A template parameter is not modifiable.  */
3708       TREE_CONSTANT (parm) = 1;
3709       TREE_READONLY (parm) = 1;
3710       decl = build_decl (parm_loc,
3711 			 CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3712       TREE_CONSTANT (decl) = 1;
3713       TREE_READONLY (decl) = 1;
3714       DECL_INITIAL (parm) = DECL_INITIAL (decl)
3715 	= build_template_parm_index (idx, processing_template_decl,
3716 				     processing_template_decl,
3717 				     decl, TREE_TYPE (parm));
3718 
3719       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
3720 	= is_parameter_pack;
3721     }
3722   else
3723     {
3724       tree t;
3725       parm = TREE_VALUE (TREE_VALUE (parm));
3726 
3727       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3728 	{
3729 	  t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3730 	  /* This is for distinguishing between real templates and template
3731 	     template parameters */
3732 	  TREE_TYPE (parm) = t;
3733 	  TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3734 	  decl = parm;
3735 	}
3736       else
3737 	{
3738 	  t = cxx_make_type (TEMPLATE_TYPE_PARM);
3739 	  /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
3740 	  decl = build_decl (parm_loc,
3741 			     TYPE_DECL, parm, t);
3742 	}
3743 
3744       TYPE_NAME (t) = decl;
3745       TYPE_STUB_DECL (t) = decl;
3746       parm = decl;
3747       TEMPLATE_TYPE_PARM_INDEX (t)
3748 	= build_template_parm_index (idx, processing_template_decl,
3749 				     processing_template_decl,
3750 				     decl, TREE_TYPE (parm));
3751       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3752       TYPE_CANONICAL (t) = canonical_type_parameter (t);
3753     }
3754   DECL_ARTIFICIAL (decl) = 1;
3755   SET_DECL_TEMPLATE_PARM_P (decl);
3756   pushdecl (decl);
3757   parm = build_tree_list (defval, parm);
3758   return chainon (list, parm);
3759 }
3760 
3761 /* The end of a template parameter list has been reached.  Process the
3762    tree list into a parameter vector, converting each parameter into a more
3763    useful form.	 Type parameters are saved as IDENTIFIER_NODEs, and others
3764    as PARM_DECLs.  */
3765 
3766 tree
end_template_parm_list(tree parms)3767 end_template_parm_list (tree parms)
3768 {
3769   int nparms;
3770   tree parm, next;
3771   tree saved_parmlist = make_tree_vec (list_length (parms));
3772 
3773   current_template_parms
3774     = tree_cons (size_int (processing_template_decl),
3775 		 saved_parmlist, current_template_parms);
3776 
3777   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3778     {
3779       next = TREE_CHAIN (parm);
3780       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3781       TREE_CHAIN (parm) = NULL_TREE;
3782     }
3783 
3784   --processing_template_parmlist;
3785 
3786   return saved_parmlist;
3787 }
3788 
3789 /* end_template_decl is called after a template declaration is seen.  */
3790 
3791 void
end_template_decl(void)3792 end_template_decl (void)
3793 {
3794   reset_specialization ();
3795 
3796   if (! processing_template_decl)
3797     return;
3798 
3799   /* This matches the pushlevel in begin_template_parm_list.  */
3800   finish_scope ();
3801 
3802   --processing_template_decl;
3803   current_template_parms = TREE_CHAIN (current_template_parms);
3804 }
3805 
3806 /* Takes a TREE_LIST representing a template parameter and convert it
3807    into an argument suitable to be passed to the type substitution
3808    functions.  Note that If the TREE_LIST contains an error_mark
3809    node, the returned argument is error_mark_node.  */
3810 
3811 static tree
template_parm_to_arg(tree t)3812 template_parm_to_arg (tree t)
3813 {
3814 
3815   if (t == NULL_TREE
3816       || TREE_CODE (t) != TREE_LIST)
3817     return t;
3818 
3819   if (error_operand_p (TREE_VALUE (t)))
3820     return error_mark_node;
3821 
3822   t = TREE_VALUE (t);
3823 
3824   if (TREE_CODE (t) == TYPE_DECL
3825       || TREE_CODE (t) == TEMPLATE_DECL)
3826     {
3827       t = TREE_TYPE (t);
3828 
3829       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3830 	{
3831 	  /* Turn this argument into a TYPE_ARGUMENT_PACK
3832 	     with a single element, which expands T.  */
3833 	  tree vec = make_tree_vec (1);
3834 #ifdef ENABLE_CHECKING
3835 	  SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3836 	    (vec, TREE_VEC_LENGTH (vec));
3837 #endif
3838 	  TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3839 
3840 	  t = cxx_make_type (TYPE_ARGUMENT_PACK);
3841 	  SET_ARGUMENT_PACK_ARGS (t, vec);
3842 	}
3843     }
3844   else
3845     {
3846       t = DECL_INITIAL (t);
3847 
3848       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3849 	{
3850 	  /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3851 	     with a single element, which expands T.  */
3852 	  tree vec = make_tree_vec (1);
3853 	  tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3854 #ifdef ENABLE_CHECKING
3855 	  SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3856 	    (vec, TREE_VEC_LENGTH (vec));
3857 #endif
3858 	  t = convert_from_reference (t);
3859 	  TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3860 
3861 	  t  = make_node (NONTYPE_ARGUMENT_PACK);
3862 	  SET_ARGUMENT_PACK_ARGS (t, vec);
3863 	  TREE_TYPE (t) = type;
3864 	}
3865       else
3866 	t = convert_from_reference (t);
3867     }
3868   return t;
3869 }
3870 
3871 /* Given a set of template parameters, return them as a set of template
3872    arguments.  The template parameters are represented as a TREE_VEC, in
3873    the form documented in cp-tree.h for template arguments.  */
3874 
3875 static tree
template_parms_to_args(tree parms)3876 template_parms_to_args (tree parms)
3877 {
3878   tree header;
3879   tree args = NULL_TREE;
3880   int length = TMPL_PARMS_DEPTH (parms);
3881   int l = length;
3882 
3883   /* If there is only one level of template parameters, we do not
3884      create a TREE_VEC of TREE_VECs.  Instead, we return a single
3885      TREE_VEC containing the arguments.  */
3886   if (length > 1)
3887     args = make_tree_vec (length);
3888 
3889   for (header = parms; header; header = TREE_CHAIN (header))
3890     {
3891       tree a = copy_node (TREE_VALUE (header));
3892       int i;
3893 
3894       TREE_TYPE (a) = NULL_TREE;
3895       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
3896 	TREE_VEC_ELT (a, i) = template_parm_to_arg (TREE_VEC_ELT (a, i));
3897 
3898 #ifdef ENABLE_CHECKING
3899       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (a, TREE_VEC_LENGTH (a));
3900 #endif
3901 
3902       if (length > 1)
3903 	TREE_VEC_ELT (args, --l) = a;
3904       else
3905 	args = a;
3906     }
3907 
3908     if (length > 1 && TREE_VEC_ELT (args, 0) == NULL_TREE)
3909       /* This can happen for template parms of a template template
3910 	 parameter, e.g:
3911 
3912 	 template<template<class T, class U> class TT> struct S;
3913 
3914 	 Consider the level of the parms of TT; T and U both have
3915 	 level 2; TT has no template parm of level 1. So in this case
3916 	 the first element of full_template_args is NULL_TREE. If we
3917 	 leave it like this TMPL_ARGS_DEPTH on args returns 1 instead
3918 	 of 2. This will make tsubst wrongly consider that T and U
3919 	 have level 1. Instead, let's create a dummy vector as the
3920 	 first element of full_template_args so that TMPL_ARGS_DEPTH
3921 	 returns the correct depth for args.  */
3922       TREE_VEC_ELT (args, 0) = make_tree_vec (1);
3923   return args;
3924 }
3925 
3926 /* Within the declaration of a template, return the currently active
3927    template parameters as an argument TREE_VEC.  */
3928 
3929 static tree
current_template_args(void)3930 current_template_args (void)
3931 {
3932   return template_parms_to_args (current_template_parms);
3933 }
3934 
3935 /* Update the declared TYPE by doing any lookups which were thought to be
3936    dependent, but are not now that we know the SCOPE of the declarator.  */
3937 
3938 tree
maybe_update_decl_type(tree orig_type,tree scope)3939 maybe_update_decl_type (tree orig_type, tree scope)
3940 {
3941   tree type = orig_type;
3942 
3943   if (type == NULL_TREE)
3944     return type;
3945 
3946   if (TREE_CODE (orig_type) == TYPE_DECL)
3947     type = TREE_TYPE (type);
3948 
3949   if (scope && TYPE_P (scope) && dependent_type_p (scope)
3950       && dependent_type_p (type)
3951       /* Don't bother building up the args in this case.  */
3952       && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
3953     {
3954       /* tsubst in the args corresponding to the template parameters,
3955 	 including auto if present.  Most things will be unchanged, but
3956 	 make_typename_type and tsubst_qualified_id will resolve
3957 	 TYPENAME_TYPEs and SCOPE_REFs that were previously dependent.  */
3958       tree args = current_template_args ();
3959       tree auto_node = type_uses_auto (type);
3960       tree pushed;
3961       if (auto_node)
3962 	{
3963 	  tree auto_vec = make_tree_vec (1);
3964 	  TREE_VEC_ELT (auto_vec, 0) = auto_node;
3965 	  args = add_to_template_args (args, auto_vec);
3966 	}
3967       pushed = push_scope (scope);
3968       type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
3969       if (pushed)
3970 	pop_scope (scope);
3971     }
3972 
3973   if (type == error_mark_node)
3974     return orig_type;
3975 
3976   if (TREE_CODE (orig_type) == TYPE_DECL)
3977     {
3978       if (same_type_p (type, TREE_TYPE (orig_type)))
3979 	type = orig_type;
3980       else
3981 	type = TYPE_NAME (type);
3982     }
3983   return type;
3984 }
3985 
3986 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
3987    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
3988    a member template.  Used by push_template_decl below.  */
3989 
3990 static tree
build_template_decl(tree decl,tree parms,bool member_template_p)3991 build_template_decl (tree decl, tree parms, bool member_template_p)
3992 {
3993   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
3994   DECL_TEMPLATE_PARMS (tmpl) = parms;
3995   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
3996   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
3997   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
3998 
3999   return tmpl;
4000 }
4001 
4002 struct template_parm_data
4003 {
4004   /* The level of the template parameters we are currently
4005      processing.  */
4006   int level;
4007 
4008   /* The index of the specialization argument we are currently
4009      processing.  */
4010   int current_arg;
4011 
4012   /* An array whose size is the number of template parameters.  The
4013      elements are nonzero if the parameter has been used in any one
4014      of the arguments processed so far.  */
4015   int* parms;
4016 
4017   /* An array whose size is the number of template arguments.  The
4018      elements are nonzero if the argument makes use of template
4019      parameters of this level.  */
4020   int* arg_uses_template_parms;
4021 };
4022 
4023 /* Subroutine of push_template_decl used to see if each template
4024    parameter in a partial specialization is used in the explicit
4025    argument list.  If T is of the LEVEL given in DATA (which is
4026    treated as a template_parm_data*), then DATA->PARMS is marked
4027    appropriately.  */
4028 
4029 static int
mark_template_parm(tree t,void * data)4030 mark_template_parm (tree t, void* data)
4031 {
4032   int level;
4033   int idx;
4034   struct template_parm_data* tpd = (struct template_parm_data*) data;
4035 
4036   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4037     {
4038       level = TEMPLATE_PARM_LEVEL (t);
4039       idx = TEMPLATE_PARM_IDX (t);
4040     }
4041   else
4042     {
4043       level = TEMPLATE_TYPE_LEVEL (t);
4044       idx = TEMPLATE_TYPE_IDX (t);
4045     }
4046 
4047   if (level == tpd->level)
4048     {
4049       tpd->parms[idx] = 1;
4050       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
4051     }
4052 
4053   /* Return zero so that for_each_template_parm will continue the
4054      traversal of the tree; we want to mark *every* template parm.  */
4055   return 0;
4056 }
4057 
4058 /* Process the partial specialization DECL.  */
4059 
4060 static tree
process_partial_specialization(tree decl)4061 process_partial_specialization (tree decl)
4062 {
4063   tree type = TREE_TYPE (decl);
4064   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
4065   tree specargs = CLASSTYPE_TI_ARGS (type);
4066   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
4067   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
4068   tree inner_parms;
4069   tree inst;
4070   int nargs = TREE_VEC_LENGTH (inner_args);
4071   int ntparms;
4072   int  i;
4073   bool did_error_intro = false;
4074   struct template_parm_data tpd;
4075   struct template_parm_data tpd2;
4076 
4077   gcc_assert (current_template_parms);
4078 
4079   inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
4080   ntparms = TREE_VEC_LENGTH (inner_parms);
4081 
4082   /* We check that each of the template parameters given in the
4083      partial specialization is used in the argument list to the
4084      specialization.  For example:
4085 
4086        template <class T> struct S;
4087        template <class T> struct S<T*>;
4088 
4089      The second declaration is OK because `T*' uses the template
4090      parameter T, whereas
4091 
4092        template <class T> struct S<int>;
4093 
4094      is no good.  Even trickier is:
4095 
4096        template <class T>
4097        struct S1
4098        {
4099 	  template <class U>
4100 	  struct S2;
4101 	  template <class U>
4102 	  struct S2<T>;
4103        };
4104 
4105      The S2<T> declaration is actually invalid; it is a
4106      full-specialization.  Of course,
4107 
4108 	  template <class U>
4109 	  struct S2<T (*)(U)>;
4110 
4111      or some such would have been OK.  */
4112   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
4113   tpd.parms = XALLOCAVEC (int, ntparms);
4114   memset (tpd.parms, 0, sizeof (int) * ntparms);
4115 
4116   tpd.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4117   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
4118   for (i = 0; i < nargs; ++i)
4119     {
4120       tpd.current_arg = i;
4121       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
4122 			      &mark_template_parm,
4123 			      &tpd,
4124 			      NULL,
4125 			      /*include_nondeduced_p=*/false);
4126     }
4127   for (i = 0; i < ntparms; ++i)
4128     if (tpd.parms[i] == 0)
4129       {
4130 	/* One of the template parms was not used in a deduced context in the
4131 	   specialization.  */
4132 	if (!did_error_intro)
4133 	  {
4134 	    error ("template parameters not deducible in "
4135 		   "partial specialization:");
4136 	    did_error_intro = true;
4137 	  }
4138 
4139 	inform (input_location, "        %qD",
4140 		TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
4141       }
4142 
4143   if (did_error_intro)
4144     return error_mark_node;
4145 
4146   /* [temp.class.spec]
4147 
4148      The argument list of the specialization shall not be identical to
4149      the implicit argument list of the primary template.  */
4150   if (comp_template_args
4151       (inner_args,
4152        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
4153 						   (maintmpl)))))
4154     error ("partial specialization %qT does not specialize any template arguments", type);
4155 
4156   /* A partial specialization that replaces multiple parameters of the
4157      primary template with a pack expansion is less specialized for those
4158      parameters.  */
4159   if (nargs < DECL_NTPARMS (maintmpl))
4160     {
4161       error ("partial specialization is not more specialized than the "
4162 	     "primary template because it replaces multiple parameters "
4163 	     "with a pack expansion");
4164       inform (DECL_SOURCE_LOCATION (maintmpl), "primary template here");
4165       return decl;
4166     }
4167 
4168   /* [temp.class.spec]
4169 
4170      A partially specialized non-type argument expression shall not
4171      involve template parameters of the partial specialization except
4172      when the argument expression is a simple identifier.
4173 
4174      The type of a template parameter corresponding to a specialized
4175      non-type argument shall not be dependent on a parameter of the
4176      specialization.
4177 
4178      Also, we verify that pack expansions only occur at the
4179      end of the argument list.  */
4180   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
4181   tpd2.parms = 0;
4182   for (i = 0; i < nargs; ++i)
4183     {
4184       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
4185       tree arg = TREE_VEC_ELT (inner_args, i);
4186       tree packed_args = NULL_TREE;
4187       int j, len = 1;
4188 
4189       if (ARGUMENT_PACK_P (arg))
4190         {
4191           /* Extract the arguments from the argument pack. We'll be
4192              iterating over these in the following loop.  */
4193           packed_args = ARGUMENT_PACK_ARGS (arg);
4194           len = TREE_VEC_LENGTH (packed_args);
4195         }
4196 
4197       for (j = 0; j < len; j++)
4198         {
4199           if (packed_args)
4200             /* Get the Jth argument in the parameter pack.  */
4201             arg = TREE_VEC_ELT (packed_args, j);
4202 
4203           if (PACK_EXPANSION_P (arg))
4204             {
4205               /* Pack expansions must come at the end of the
4206                  argument list.  */
4207               if ((packed_args && j < len - 1)
4208                   || (!packed_args && i < nargs - 1))
4209                 {
4210                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4211                     error ("parameter pack argument %qE must be at the "
4212 			   "end of the template argument list", arg);
4213                   else
4214                     error ("parameter pack argument %qT must be at the "
4215 			   "end of the template argument list", arg);
4216                 }
4217             }
4218 
4219           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4220             /* We only care about the pattern.  */
4221             arg = PACK_EXPANSION_PATTERN (arg);
4222 
4223           if (/* These first two lines are the `non-type' bit.  */
4224               !TYPE_P (arg)
4225               && TREE_CODE (arg) != TEMPLATE_DECL
4226               /* This next two lines are the `argument expression is not just a
4227                  simple identifier' condition and also the `specialized
4228                  non-type argument' bit.  */
4229               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX
4230 	      && !(REFERENCE_REF_P (arg)
4231 		   && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_PARM_INDEX))
4232             {
4233               if ((!packed_args && tpd.arg_uses_template_parms[i])
4234                   || (packed_args && uses_template_parms (arg)))
4235                 error ("template argument %qE involves template parameter(s)",
4236                        arg);
4237               else
4238                 {
4239                   /* Look at the corresponding template parameter,
4240                      marking which template parameters its type depends
4241                      upon.  */
4242                   tree type = TREE_TYPE (parm);
4243 
4244                   if (!tpd2.parms)
4245                     {
4246                       /* We haven't yet initialized TPD2.  Do so now.  */
4247                       tpd2.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4248                       /* The number of parameters here is the number in the
4249                          main template, which, as checked in the assertion
4250                          above, is NARGS.  */
4251                       tpd2.parms = XALLOCAVEC (int, nargs);
4252                       tpd2.level =
4253                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
4254                     }
4255 
4256                   /* Mark the template parameters.  But this time, we're
4257                      looking for the template parameters of the main
4258                      template, not in the specialization.  */
4259                   tpd2.current_arg = i;
4260                   tpd2.arg_uses_template_parms[i] = 0;
4261                   memset (tpd2.parms, 0, sizeof (int) * nargs);
4262                   for_each_template_parm (type,
4263                                           &mark_template_parm,
4264                                           &tpd2,
4265                                           NULL,
4266 					  /*include_nondeduced_p=*/false);
4267 
4268                   if (tpd2.arg_uses_template_parms [i])
4269                     {
4270                       /* The type depended on some template parameters.
4271                          If they are fully specialized in the
4272                          specialization, that's OK.  */
4273                       int j;
4274                       int count = 0;
4275                       for (j = 0; j < nargs; ++j)
4276                         if (tpd2.parms[j] != 0
4277                             && tpd.arg_uses_template_parms [j])
4278                           ++count;
4279                       if (count != 0)
4280                         error_n (input_location, count,
4281                                  "type %qT of template argument %qE depends "
4282                                  "on a template parameter",
4283                                  "type %qT of template argument %qE depends "
4284                                  "on template parameters",
4285                                  type,
4286                                  arg);
4287                     }
4288                 }
4289             }
4290         }
4291     }
4292 
4293   /* We should only get here once.  */
4294   gcc_assert (!COMPLETE_TYPE_P (type));
4295 
4296   tree tmpl = build_template_decl (decl, current_template_parms,
4297 				   DECL_MEMBER_TEMPLATE_P (maintmpl));
4298   TREE_TYPE (tmpl) = type;
4299   DECL_TEMPLATE_RESULT (tmpl) = decl;
4300   SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4301   DECL_TEMPLATE_INFO (tmpl) = build_template_info (maintmpl, specargs);
4302   DECL_PRIMARY_TEMPLATE (tmpl) = maintmpl;
4303 
4304   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
4305     = tree_cons (specargs, tmpl,
4306                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
4307   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
4308 
4309   for (inst = DECL_TEMPLATE_INSTANTIATIONS (maintmpl); inst;
4310        inst = TREE_CHAIN (inst))
4311     {
4312       tree inst_type = TREE_VALUE (inst);
4313       if (COMPLETE_TYPE_P (inst_type)
4314 	  && CLASSTYPE_IMPLICIT_INSTANTIATION (inst_type))
4315 	{
4316 	  tree spec = most_specialized_class (inst_type, tf_none);
4317 	  if (spec && TREE_TYPE (spec) == type)
4318 	    permerror (input_location,
4319 		       "partial specialization of %qT after instantiation "
4320 		       "of %qT", type, inst_type);
4321 	}
4322     }
4323 
4324   return decl;
4325 }
4326 
4327 /* PARM is a template parameter of some form; return the corresponding
4328    TEMPLATE_PARM_INDEX.  */
4329 
4330 static tree
get_template_parm_index(tree parm)4331 get_template_parm_index (tree parm)
4332 {
4333   if (TREE_CODE (parm) == PARM_DECL
4334       || TREE_CODE (parm) == CONST_DECL)
4335     parm = DECL_INITIAL (parm);
4336   else if (TREE_CODE (parm) == TYPE_DECL
4337 	   || TREE_CODE (parm) == TEMPLATE_DECL)
4338     parm = TREE_TYPE (parm);
4339   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
4340       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
4341     parm = TEMPLATE_TYPE_PARM_INDEX (parm);
4342   gcc_assert (TREE_CODE (parm) == TEMPLATE_PARM_INDEX);
4343   return parm;
4344 }
4345 
4346 /* Subroutine of fixed_parameter_pack_p below.  Look for any template
4347    parameter packs used by the template parameter PARM.  */
4348 
4349 static void
fixed_parameter_pack_p_1(tree parm,struct find_parameter_pack_data * ppd)4350 fixed_parameter_pack_p_1 (tree parm, struct find_parameter_pack_data *ppd)
4351 {
4352   /* A type parm can't refer to another parm.  */
4353   if (TREE_CODE (parm) == TYPE_DECL)
4354     return;
4355   else if (TREE_CODE (parm) == PARM_DECL)
4356     {
4357       cp_walk_tree (&TREE_TYPE (parm), &find_parameter_packs_r,
4358 		    ppd, ppd->visited);
4359       return;
4360     }
4361 
4362   gcc_assert (TREE_CODE (parm) == TEMPLATE_DECL);
4363 
4364   tree vec = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (parm));
4365   for (int i = 0; i < TREE_VEC_LENGTH (vec); ++i)
4366     fixed_parameter_pack_p_1 (TREE_VALUE (TREE_VEC_ELT (vec, i)), ppd);
4367 }
4368 
4369 /* PARM is a template parameter pack.  Return any parameter packs used in
4370    its type or the type of any of its template parameters.  If there are
4371    any such packs, it will be instantiated into a fixed template parameter
4372    list by partial instantiation rather than be fully deduced.  */
4373 
4374 tree
fixed_parameter_pack_p(tree parm)4375 fixed_parameter_pack_p (tree parm)
4376 {
4377   /* This can only be true in a member template.  */
4378   if (TEMPLATE_PARM_ORIG_LEVEL (get_template_parm_index (parm)) < 2)
4379     return NULL_TREE;
4380   /* This can only be true for a parameter pack.  */
4381   if (!template_parameter_pack_p (parm))
4382     return NULL_TREE;
4383   /* A type parm can't refer to another parm.  */
4384   if (TREE_CODE (parm) == TYPE_DECL)
4385     return NULL_TREE;
4386 
4387   tree parameter_packs = NULL_TREE;
4388   struct find_parameter_pack_data ppd;
4389   ppd.parameter_packs = &parameter_packs;
4390   ppd.visited = pointer_set_create ();
4391 
4392   fixed_parameter_pack_p_1 (parm, &ppd);
4393 
4394   pointer_set_destroy (ppd.visited);
4395   return parameter_packs;
4396 }
4397 
4398 /* Check that a template declaration's use of default arguments and
4399    parameter packs is not invalid.  Here, PARMS are the template
4400    parameters.  IS_PRIMARY is true if DECL is the thing declared by
4401    a primary template.  IS_PARTIAL is true if DECL is a partial
4402    specialization.
4403 
4404    IS_FRIEND_DECL is nonzero if DECL is a friend function template
4405    declaration (but not a definition); 1 indicates a declaration, 2
4406    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
4407    emitted for extraneous default arguments.
4408 
4409    Returns TRUE if there were no errors found, FALSE otherwise. */
4410 
4411 bool
check_default_tmpl_args(tree decl,tree parms,bool is_primary,bool is_partial,int is_friend_decl)4412 check_default_tmpl_args (tree decl, tree parms, bool is_primary,
4413                          bool is_partial, int is_friend_decl)
4414 {
4415   const char *msg;
4416   int last_level_to_check;
4417   tree parm_level;
4418   bool no_errors = true;
4419 
4420   /* [temp.param]
4421 
4422      A default template-argument shall not be specified in a
4423      function template declaration or a function template definition, nor
4424      in the template-parameter-list of the definition of a member of a
4425      class template.  */
4426 
4427   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL
4428       || (TREE_CODE (decl) == FUNCTION_DECL && DECL_LOCAL_FUNCTION_P (decl)))
4429     /* You can't have a function template declaration in a local
4430        scope, nor you can you define a member of a class template in a
4431        local scope.  */
4432     return true;
4433 
4434   if ((TREE_CODE (decl) == TYPE_DECL
4435        && TREE_TYPE (decl)
4436        && LAMBDA_TYPE_P (TREE_TYPE (decl)))
4437       || (TREE_CODE (decl) == FUNCTION_DECL
4438 	  && LAMBDA_FUNCTION_P (decl)))
4439     /* A lambda doesn't have an explicit declaration; don't complain
4440        about the parms of the enclosing class.  */
4441     return true;
4442 
4443   if (current_class_type
4444       && !TYPE_BEING_DEFINED (current_class_type)
4445       && DECL_LANG_SPECIFIC (decl)
4446       && DECL_DECLARES_FUNCTION_P (decl)
4447       /* If this is either a friend defined in the scope of the class
4448 	 or a member function.  */
4449       && (DECL_FUNCTION_MEMBER_P (decl)
4450 	  ? same_type_p (DECL_CONTEXT (decl), current_class_type)
4451 	  : DECL_FRIEND_CONTEXT (decl)
4452 	  ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
4453 	  : false)
4454       /* And, if it was a member function, it really was defined in
4455 	 the scope of the class.  */
4456       && (!DECL_FUNCTION_MEMBER_P (decl)
4457 	  || DECL_INITIALIZED_IN_CLASS_P (decl)))
4458     /* We already checked these parameters when the template was
4459        declared, so there's no need to do it again now.  This function
4460        was defined in class scope, but we're processing its body now
4461        that the class is complete.  */
4462     return true;
4463 
4464   /* Core issue 226 (C++0x only): the following only applies to class
4465      templates.  */
4466   if (is_primary
4467       && ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL))
4468     {
4469       /* [temp.param]
4470 
4471          If a template-parameter has a default template-argument, all
4472          subsequent template-parameters shall have a default
4473          template-argument supplied.  */
4474       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
4475         {
4476           tree inner_parms = TREE_VALUE (parm_level);
4477           int ntparms = TREE_VEC_LENGTH (inner_parms);
4478           int seen_def_arg_p = 0;
4479           int i;
4480 
4481           for (i = 0; i < ntparms; ++i)
4482             {
4483               tree parm = TREE_VEC_ELT (inner_parms, i);
4484 
4485               if (parm == error_mark_node)
4486                 continue;
4487 
4488               if (TREE_PURPOSE (parm))
4489                 seen_def_arg_p = 1;
4490               else if (seen_def_arg_p
4491 		       && !template_parameter_pack_p (TREE_VALUE (parm)))
4492                 {
4493                   error ("no default argument for %qD", TREE_VALUE (parm));
4494                   /* For better subsequent error-recovery, we indicate that
4495                      there should have been a default argument.  */
4496                   TREE_PURPOSE (parm) = error_mark_node;
4497                   no_errors = false;
4498                 }
4499 	      else if (!is_partial
4500 		       && !is_friend_decl
4501 		       /* Don't complain about an enclosing partial
4502 			  specialization.  */
4503 		       && parm_level == parms
4504 		       && TREE_CODE (decl) == TYPE_DECL
4505 		       && i < ntparms - 1
4506 		       && template_parameter_pack_p (TREE_VALUE (parm))
4507 		       /* A fixed parameter pack will be partially
4508 			  instantiated into a fixed length list.  */
4509 		       && !fixed_parameter_pack_p (TREE_VALUE (parm)))
4510 		{
4511 		  /* A primary class template can only have one
4512 		     parameter pack, at the end of the template
4513 		     parameter list.  */
4514 
4515 		  if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
4516 		    error ("parameter pack %qE must be at the end of the"
4517 			   " template parameter list", TREE_VALUE (parm));
4518 		  else
4519 		    error ("parameter pack %qT must be at the end of the"
4520 			   " template parameter list",
4521 			   TREE_TYPE (TREE_VALUE (parm)));
4522 
4523 		  TREE_VALUE (TREE_VEC_ELT (inner_parms, i))
4524 		    = error_mark_node;
4525 		  no_errors = false;
4526 		}
4527             }
4528         }
4529     }
4530 
4531   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
4532       || is_partial
4533       || !is_primary
4534       || is_friend_decl)
4535     /* For an ordinary class template, default template arguments are
4536        allowed at the innermost level, e.g.:
4537 	 template <class T = int>
4538 	 struct S {};
4539        but, in a partial specialization, they're not allowed even
4540        there, as we have in [temp.class.spec]:
4541 
4542 	 The template parameter list of a specialization shall not
4543 	 contain default template argument values.
4544 
4545        So, for a partial specialization, or for a function template
4546        (in C++98/C++03), we look at all of them.  */
4547     ;
4548   else
4549     /* But, for a primary class template that is not a partial
4550        specialization we look at all template parameters except the
4551        innermost ones.  */
4552     parms = TREE_CHAIN (parms);
4553 
4554   /* Figure out what error message to issue.  */
4555   if (is_friend_decl == 2)
4556     msg = G_("default template arguments may not be used in function template "
4557 	     "friend re-declaration");
4558   else if (is_friend_decl)
4559     msg = G_("default template arguments may not be used in function template "
4560 	     "friend declarations");
4561   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
4562     msg = G_("default template arguments may not be used in function templates "
4563 	     "without -std=c++11 or -std=gnu++11");
4564   else if (is_partial)
4565     msg = G_("default template arguments may not be used in "
4566 	     "partial specializations");
4567   else
4568     msg = G_("default argument for template parameter for class enclosing %qD");
4569 
4570   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
4571     /* If we're inside a class definition, there's no need to
4572        examine the parameters to the class itself.  On the one
4573        hand, they will be checked when the class is defined, and,
4574        on the other, default arguments are valid in things like:
4575 	 template <class T = double>
4576 	 struct S { template <class U> void f(U); };
4577        Here the default argument for `S' has no bearing on the
4578        declaration of `f'.  */
4579     last_level_to_check = template_class_depth (current_class_type) + 1;
4580   else
4581     /* Check everything.  */
4582     last_level_to_check = 0;
4583 
4584   for (parm_level = parms;
4585        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
4586        parm_level = TREE_CHAIN (parm_level))
4587     {
4588       tree inner_parms = TREE_VALUE (parm_level);
4589       int i;
4590       int ntparms;
4591 
4592       ntparms = TREE_VEC_LENGTH (inner_parms);
4593       for (i = 0; i < ntparms; ++i)
4594         {
4595           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
4596             continue;
4597 
4598 	  if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
4599 	    {
4600 	      if (msg)
4601 	        {
4602                   no_errors = false;
4603                   if (is_friend_decl == 2)
4604                     return no_errors;
4605 
4606 		  error (msg, decl);
4607 		  msg = 0;
4608 	        }
4609 
4610 	      /* Clear out the default argument so that we are not
4611 	         confused later.  */
4612 	      TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
4613 	    }
4614         }
4615 
4616       /* At this point, if we're still interested in issuing messages,
4617 	 they must apply to classes surrounding the object declared.  */
4618       if (msg)
4619 	msg = G_("default argument for template parameter for class "
4620 		 "enclosing %qD");
4621     }
4622 
4623   return no_errors;
4624 }
4625 
4626 /* Worker for push_template_decl_real, called via
4627    for_each_template_parm.  DATA is really an int, indicating the
4628    level of the parameters we are interested in.  If T is a template
4629    parameter of that level, return nonzero.  */
4630 
4631 static int
template_parm_this_level_p(tree t,void * data)4632 template_parm_this_level_p (tree t, void* data)
4633 {
4634   int this_level = *(int *)data;
4635   int level;
4636 
4637   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4638     level = TEMPLATE_PARM_LEVEL (t);
4639   else
4640     level = TEMPLATE_TYPE_LEVEL (t);
4641   return level == this_level;
4642 }
4643 
4644 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
4645    parameters given by current_template_args, or reuses a
4646    previously existing one, if appropriate.  Returns the DECL, or an
4647    equivalent one, if it is replaced via a call to duplicate_decls.
4648 
4649    If IS_FRIEND is true, DECL is a friend declaration.  */
4650 
4651 tree
push_template_decl_real(tree decl,bool is_friend)4652 push_template_decl_real (tree decl, bool is_friend)
4653 {
4654   tree tmpl;
4655   tree args;
4656   tree info;
4657   tree ctx;
4658   bool is_primary;
4659   bool is_partial;
4660   int new_template_p = 0;
4661   /* True if the template is a member template, in the sense of
4662      [temp.mem].  */
4663   bool member_template_p = false;
4664 
4665   if (decl == error_mark_node || !current_template_parms)
4666     return error_mark_node;
4667 
4668   /* See if this is a partial specialization.  */
4669   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
4670 		&& TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
4671 		&& CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
4672 
4673   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
4674     is_friend = true;
4675 
4676   if (is_friend)
4677     /* For a friend, we want the context of the friend function, not
4678        the type of which it is a friend.  */
4679     ctx = CP_DECL_CONTEXT (decl);
4680   else if (CP_DECL_CONTEXT (decl)
4681 	   && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4682     /* In the case of a virtual function, we want the class in which
4683        it is defined.  */
4684     ctx = CP_DECL_CONTEXT (decl);
4685   else
4686     /* Otherwise, if we're currently defining some class, the DECL
4687        is assumed to be a member of the class.  */
4688     ctx = current_scope ();
4689 
4690   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
4691     ctx = NULL_TREE;
4692 
4693   if (!DECL_CONTEXT (decl))
4694     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
4695 
4696   /* See if this is a primary template.  */
4697   if (is_friend && ctx
4698       && uses_template_parms_level (ctx, processing_template_decl))
4699     /* A friend template that specifies a class context, i.e.
4700          template <typename T> friend void A<T>::f();
4701        is not primary.  */
4702     is_primary = false;
4703   else if (TREE_CODE (decl) == TYPE_DECL
4704 	   && LAMBDA_TYPE_P (TREE_TYPE (decl)))
4705     is_primary = false;
4706   else
4707     is_primary = template_parm_scope_p ();
4708 
4709   if (is_primary)
4710     {
4711       if (DECL_CLASS_SCOPE_P (decl))
4712 	member_template_p = true;
4713       if (TREE_CODE (decl) == TYPE_DECL
4714 	  && ANON_AGGRNAME_P (DECL_NAME (decl)))
4715 	{
4716 	  error ("template class without a name");
4717 	  return error_mark_node;
4718 	}
4719       else if (TREE_CODE (decl) == FUNCTION_DECL)
4720 	{
4721 	  if (DECL_DESTRUCTOR_P (decl))
4722 	    {
4723 	      /* [temp.mem]
4724 
4725 		 A destructor shall not be a member template.  */
4726 	      error ("destructor %qD declared as member template", decl);
4727 	      return error_mark_node;
4728 	    }
4729 	  if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
4730 	      && (!prototype_p (TREE_TYPE (decl))
4731 		  || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
4732 		  || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
4733 		  || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
4734 		      == void_list_node)))
4735 	    {
4736 	      /* [basic.stc.dynamic.allocation]
4737 
4738 		 An allocation function can be a function
4739 		 template. ... Template allocation functions shall
4740 		 have two or more parameters.  */
4741 	      error ("invalid template declaration of %qD", decl);
4742 	      return error_mark_node;
4743 	    }
4744 	}
4745       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4746 	       && CLASS_TYPE_P (TREE_TYPE (decl)))
4747 	/* OK */;
4748       else if (TREE_CODE (decl) == TYPE_DECL
4749 	       && TYPE_DECL_ALIAS_P (decl))
4750 	/* alias-declaration */
4751 	gcc_assert (!DECL_ARTIFICIAL (decl));
4752       else
4753 	{
4754 	  error ("template declaration of %q#D", decl);
4755 	  return error_mark_node;
4756 	}
4757     }
4758 
4759   /* Check to see that the rules regarding the use of default
4760      arguments are not being violated.  */
4761   check_default_tmpl_args (decl, current_template_parms,
4762 			   is_primary, is_partial, /*is_friend_decl=*/0);
4763 
4764   /* Ensure that there are no parameter packs in the type of this
4765      declaration that have not been expanded.  */
4766   if (TREE_CODE (decl) == FUNCTION_DECL)
4767     {
4768       /* Check each of the arguments individually to see if there are
4769          any bare parameter packs.  */
4770       tree type = TREE_TYPE (decl);
4771       tree arg = DECL_ARGUMENTS (decl);
4772       tree argtype = TYPE_ARG_TYPES (type);
4773 
4774       while (arg && argtype)
4775         {
4776           if (!DECL_PACK_P (arg)
4777               && check_for_bare_parameter_packs (TREE_TYPE (arg)))
4778             {
4779             /* This is a PARM_DECL that contains unexpanded parameter
4780                packs. We have already complained about this in the
4781                check_for_bare_parameter_packs call, so just replace
4782                these types with ERROR_MARK_NODE.  */
4783               TREE_TYPE (arg) = error_mark_node;
4784               TREE_VALUE (argtype) = error_mark_node;
4785             }
4786 
4787           arg = DECL_CHAIN (arg);
4788           argtype = TREE_CHAIN (argtype);
4789         }
4790 
4791       /* Check for bare parameter packs in the return type and the
4792          exception specifiers.  */
4793       if (check_for_bare_parameter_packs (TREE_TYPE (type)))
4794 	/* Errors were already issued, set return type to int
4795 	   as the frontend doesn't expect error_mark_node as
4796 	   the return type.  */
4797 	TREE_TYPE (type) = integer_type_node;
4798       if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
4799 	TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
4800     }
4801   else if (check_for_bare_parameter_packs ((TREE_CODE (decl) == TYPE_DECL
4802 					    && TYPE_DECL_ALIAS_P (decl))
4803 					   ? DECL_ORIGINAL_TYPE (decl)
4804 					   : TREE_TYPE (decl)))
4805     {
4806       TREE_TYPE (decl) = error_mark_node;
4807       return error_mark_node;
4808     }
4809 
4810   if (is_partial)
4811     return process_partial_specialization (decl);
4812 
4813   args = current_template_args ();
4814 
4815   if (!ctx
4816       || TREE_CODE (ctx) == FUNCTION_DECL
4817       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
4818       || (TREE_CODE (decl) == TYPE_DECL
4819 	  && LAMBDA_TYPE_P (TREE_TYPE (decl)))
4820       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
4821     {
4822       if (DECL_LANG_SPECIFIC (decl)
4823 	  && DECL_TEMPLATE_INFO (decl)
4824 	  && DECL_TI_TEMPLATE (decl))
4825 	tmpl = DECL_TI_TEMPLATE (decl);
4826       /* If DECL is a TYPE_DECL for a class-template, then there won't
4827 	 be DECL_LANG_SPECIFIC.  The information equivalent to
4828 	 DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
4829       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4830 	       && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
4831 	       && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
4832 	{
4833 	  /* Since a template declaration already existed for this
4834 	     class-type, we must be redeclaring it here.  Make sure
4835 	     that the redeclaration is valid.  */
4836 	  redeclare_class_template (TREE_TYPE (decl),
4837 				    current_template_parms);
4838 	  /* We don't need to create a new TEMPLATE_DECL; just use the
4839 	     one we already had.  */
4840 	  tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
4841 	}
4842       else
4843 	{
4844 	  tmpl = build_template_decl (decl, current_template_parms,
4845 				      member_template_p);
4846 	  new_template_p = 1;
4847 
4848 	  if (DECL_LANG_SPECIFIC (decl)
4849 	      && DECL_TEMPLATE_SPECIALIZATION (decl))
4850 	    {
4851 	      /* A specialization of a member template of a template
4852 		 class.  */
4853 	      SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4854 	      DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
4855 	      DECL_TEMPLATE_INFO (decl) = NULL_TREE;
4856 	    }
4857 	}
4858     }
4859   else
4860     {
4861       tree a, t, current, parms;
4862       int i;
4863       tree tinfo = get_template_info (decl);
4864 
4865       if (!tinfo)
4866 	{
4867 	  error ("template definition of non-template %q#D", decl);
4868 	  return error_mark_node;
4869 	}
4870 
4871       tmpl = TI_TEMPLATE (tinfo);
4872 
4873       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
4874 	  && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
4875 	  && DECL_TEMPLATE_SPECIALIZATION (decl)
4876 	  && DECL_MEMBER_TEMPLATE_P (tmpl))
4877 	{
4878 	  tree new_tmpl;
4879 
4880 	  /* The declaration is a specialization of a member
4881 	     template, declared outside the class.  Therefore, the
4882 	     innermost template arguments will be NULL, so we
4883 	     replace them with the arguments determined by the
4884 	     earlier call to check_explicit_specialization.  */
4885 	  args = DECL_TI_ARGS (decl);
4886 
4887 	  new_tmpl
4888 	    = build_template_decl (decl, current_template_parms,
4889 				   member_template_p);
4890 	  DECL_TEMPLATE_RESULT (new_tmpl) = decl;
4891 	  TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
4892 	  DECL_TI_TEMPLATE (decl) = new_tmpl;
4893 	  SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
4894 	  DECL_TEMPLATE_INFO (new_tmpl)
4895 	    = build_template_info (tmpl, args);
4896 
4897 	  register_specialization (new_tmpl,
4898 				   most_general_template (tmpl),
4899 				   args,
4900 				   is_friend, 0);
4901 	  return decl;
4902 	}
4903 
4904       /* Make sure the template headers we got make sense.  */
4905 
4906       parms = DECL_TEMPLATE_PARMS (tmpl);
4907       i = TMPL_PARMS_DEPTH (parms);
4908       if (TMPL_ARGS_DEPTH (args) != i)
4909 	{
4910 	  error ("expected %d levels of template parms for %q#D, got %d",
4911 		 i, decl, TMPL_ARGS_DEPTH (args));
4912 	  DECL_INTERFACE_KNOWN (decl) = 1;
4913 	  return error_mark_node;
4914 	}
4915       else
4916 	for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
4917 	  {
4918 	    a = TMPL_ARGS_LEVEL (args, i);
4919 	    t = INNERMOST_TEMPLATE_PARMS (parms);
4920 
4921 	    if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
4922 	      {
4923 		if (current == decl)
4924 		  error ("got %d template parameters for %q#D",
4925 			 TREE_VEC_LENGTH (a), decl);
4926 		else
4927 		  error ("got %d template parameters for %q#T",
4928 			 TREE_VEC_LENGTH (a), current);
4929 		error ("  but %d required", TREE_VEC_LENGTH (t));
4930 		/* Avoid crash in import_export_decl.  */
4931 		DECL_INTERFACE_KNOWN (decl) = 1;
4932 		return error_mark_node;
4933 	      }
4934 
4935 	    if (current == decl)
4936 	      current = ctx;
4937 	    else if (current == NULL_TREE)
4938 	      /* Can happen in erroneous input.  */
4939 	      break;
4940 	    else
4941 	      current = get_containing_scope (current);
4942 	  }
4943 
4944       /* Check that the parms are used in the appropriate qualifying scopes
4945 	 in the declarator.  */
4946       if (!comp_template_args
4947 	  (TI_ARGS (tinfo),
4948 	   TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
4949 	{
4950 	  error ("\
4951 template arguments to %qD do not match original template %qD",
4952 		 decl, DECL_TEMPLATE_RESULT (tmpl));
4953 	  if (!uses_template_parms (TI_ARGS (tinfo)))
4954 	    inform (input_location, "use template<> for an explicit specialization");
4955 	  /* Avoid crash in import_export_decl.  */
4956 	  DECL_INTERFACE_KNOWN (decl) = 1;
4957 	  return error_mark_node;
4958 	}
4959     }
4960 
4961   DECL_TEMPLATE_RESULT (tmpl) = decl;
4962   TREE_TYPE (tmpl) = TREE_TYPE (decl);
4963 
4964   /* Push template declarations for global functions and types.  Note
4965      that we do not try to push a global template friend declared in a
4966      template class; such a thing may well depend on the template
4967      parameters of the class.  */
4968   if (new_template_p && !ctx
4969       && !(is_friend && template_class_depth (current_class_type) > 0))
4970     {
4971       tmpl = pushdecl_namespace_level (tmpl, is_friend);
4972       if (tmpl == error_mark_node)
4973 	return error_mark_node;
4974 
4975       /* Hide template friend classes that haven't been declared yet.  */
4976       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
4977 	{
4978 	  DECL_ANTICIPATED (tmpl) = 1;
4979 	  DECL_FRIEND_P (tmpl) = 1;
4980 	}
4981     }
4982 
4983   if (is_primary)
4984     {
4985       tree parms = DECL_TEMPLATE_PARMS (tmpl);
4986       int i;
4987 
4988       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
4989       if (DECL_CONV_FN_P (tmpl))
4990 	{
4991 	  int depth = TMPL_PARMS_DEPTH (parms);
4992 
4993 	  /* It is a conversion operator. See if the type converted to
4994 	     depends on innermost template operands.  */
4995 
4996 	  if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
4997 					 depth))
4998 	    DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
4999 	}
5000 
5001       /* Give template template parms a DECL_CONTEXT of the template
5002 	 for which they are a parameter.  */
5003       parms = INNERMOST_TEMPLATE_PARMS (parms);
5004       for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
5005 	{
5006 	  tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5007 	  if (TREE_CODE (parm) == TEMPLATE_DECL)
5008 	    DECL_CONTEXT (parm) = tmpl;
5009 	}
5010     }
5011 
5012   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
5013      back to its most general template.  If TMPL is a specialization,
5014      ARGS may only have the innermost set of arguments.  Add the missing
5015      argument levels if necessary.  */
5016   if (DECL_TEMPLATE_INFO (tmpl))
5017     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
5018 
5019   info = build_template_info (tmpl, args);
5020 
5021   if (DECL_IMPLICIT_TYPEDEF_P (decl))
5022     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
5023   else
5024     {
5025       if (is_primary && !DECL_LANG_SPECIFIC (decl))
5026 	retrofit_lang_decl (decl);
5027       if (DECL_LANG_SPECIFIC (decl))
5028 	DECL_TEMPLATE_INFO (decl) = info;
5029     }
5030 
5031   return DECL_TEMPLATE_RESULT (tmpl);
5032 }
5033 
5034 tree
push_template_decl(tree decl)5035 push_template_decl (tree decl)
5036 {
5037   return push_template_decl_real (decl, false);
5038 }
5039 
5040 /* FN is an inheriting constructor that inherits from the constructor
5041    template INHERITED; turn FN into a constructor template with a matching
5042    template header.  */
5043 
5044 tree
add_inherited_template_parms(tree fn,tree inherited)5045 add_inherited_template_parms (tree fn, tree inherited)
5046 {
5047   tree inner_parms
5048     = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (inherited));
5049   inner_parms = copy_node (inner_parms);
5050   tree parms
5051     = tree_cons (size_int (processing_template_decl + 1),
5052 		 inner_parms, current_template_parms);
5053   tree tmpl = build_template_decl (fn, parms, /*member*/true);
5054   tree args = template_parms_to_args (parms);
5055   DECL_TEMPLATE_INFO (fn) = build_template_info (tmpl, args);
5056   TREE_TYPE (tmpl) = TREE_TYPE (fn);
5057   DECL_TEMPLATE_RESULT (tmpl) = fn;
5058   DECL_ARTIFICIAL (tmpl) = true;
5059   DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
5060   return tmpl;
5061 }
5062 
5063 /* Called when a class template TYPE is redeclared with the indicated
5064    template PARMS, e.g.:
5065 
5066      template <class T> struct S;
5067      template <class T> struct S {};  */
5068 
5069 bool
redeclare_class_template(tree type,tree parms)5070 redeclare_class_template (tree type, tree parms)
5071 {
5072   tree tmpl;
5073   tree tmpl_parms;
5074   int i;
5075 
5076   if (!TYPE_TEMPLATE_INFO (type))
5077     {
5078       error ("%qT is not a template type", type);
5079       return false;
5080     }
5081 
5082   tmpl = TYPE_TI_TEMPLATE (type);
5083   if (!PRIMARY_TEMPLATE_P (tmpl))
5084     /* The type is nested in some template class.  Nothing to worry
5085        about here; there are no new template parameters for the nested
5086        type.  */
5087     return true;
5088 
5089   if (!parms)
5090     {
5091       error ("template specifiers not specified in declaration of %qD",
5092 	     tmpl);
5093       return false;
5094     }
5095 
5096   parms = INNERMOST_TEMPLATE_PARMS (parms);
5097   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
5098 
5099   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
5100     {
5101       error_n (input_location, TREE_VEC_LENGTH (parms),
5102                "redeclared with %d template parameter",
5103                "redeclared with %d template parameters",
5104                TREE_VEC_LENGTH (parms));
5105       inform_n (input_location, TREE_VEC_LENGTH (tmpl_parms),
5106                 "previous declaration %q+D used %d template parameter",
5107                 "previous declaration %q+D used %d template parameters",
5108                 tmpl, TREE_VEC_LENGTH (tmpl_parms));
5109       return false;
5110     }
5111 
5112   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
5113     {
5114       tree tmpl_parm;
5115       tree parm;
5116       tree tmpl_default;
5117       tree parm_default;
5118 
5119       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
5120           || TREE_VEC_ELT (parms, i) == error_mark_node)
5121         continue;
5122 
5123       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
5124       if (error_operand_p (tmpl_parm))
5125 	return false;
5126 
5127       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5128       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
5129       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
5130 
5131       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
5132 	 TEMPLATE_DECL.  */
5133       if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
5134 	  || (TREE_CODE (tmpl_parm) != TYPE_DECL
5135 	      && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
5136 	  || (TREE_CODE (tmpl_parm) != PARM_DECL
5137 	      && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
5138 		  != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
5139 	  || (TREE_CODE (tmpl_parm) == PARM_DECL
5140 	      && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
5141 		  != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))))
5142 	{
5143 	  error ("template parameter %q+#D", tmpl_parm);
5144 	  error ("redeclared here as %q#D", parm);
5145 	  return false;
5146 	}
5147 
5148       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
5149 	{
5150 	  /* We have in [temp.param]:
5151 
5152 	     A template-parameter may not be given default arguments
5153 	     by two different declarations in the same scope.  */
5154 	  error_at (input_location, "redefinition of default argument for %q#D", parm);
5155 	  inform (DECL_SOURCE_LOCATION (tmpl_parm),
5156 		  "original definition appeared here");
5157 	  return false;
5158 	}
5159 
5160       if (parm_default != NULL_TREE)
5161 	/* Update the previous template parameters (which are the ones
5162 	   that will really count) with the new default value.  */
5163 	TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
5164       else if (tmpl_default != NULL_TREE)
5165 	/* Update the new parameters, too; they'll be used as the
5166 	   parameters for any members.  */
5167 	TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
5168     }
5169 
5170     return true;
5171 }
5172 
5173 /* Simplify EXPR if it is a non-dependent expression.  Returns the
5174    (possibly simplified) expression.  */
5175 
5176 tree
fold_non_dependent_expr_sfinae(tree expr,tsubst_flags_t complain)5177 fold_non_dependent_expr_sfinae (tree expr, tsubst_flags_t complain)
5178 {
5179   if (expr == NULL_TREE)
5180     return NULL_TREE;
5181 
5182   /* If we're in a template, but EXPR isn't value dependent, simplify
5183      it.  We're supposed to treat:
5184 
5185        template <typename T> void f(T[1 + 1]);
5186        template <typename T> void f(T[2]);
5187 
5188      as two declarations of the same function, for example.  */
5189   if (processing_template_decl
5190       && !instantiation_dependent_expression_p (expr)
5191       && potential_constant_expression (expr))
5192     {
5193       HOST_WIDE_INT saved_processing_template_decl;
5194 
5195       saved_processing_template_decl = processing_template_decl;
5196       processing_template_decl = 0;
5197       expr = tsubst_copy_and_build (expr,
5198 				    /*args=*/NULL_TREE,
5199 				    complain,
5200 				    /*in_decl=*/NULL_TREE,
5201 				    /*function_p=*/false,
5202 				    /*integral_constant_expression_p=*/true);
5203       processing_template_decl = saved_processing_template_decl;
5204     }
5205   return expr;
5206 }
5207 
5208 tree
fold_non_dependent_expr(tree expr)5209 fold_non_dependent_expr (tree expr)
5210 {
5211   return fold_non_dependent_expr_sfinae (expr, tf_error);
5212 }
5213 
5214 /* Return TRUE iff T is a type alias, a TEMPLATE_DECL for an alias
5215    template declaration, or a TYPE_DECL for an alias declaration.  */
5216 
5217 bool
alias_type_or_template_p(tree t)5218 alias_type_or_template_p (tree t)
5219 {
5220   if (t == NULL_TREE)
5221     return false;
5222   return ((TREE_CODE (t) == TYPE_DECL && TYPE_DECL_ALIAS_P (t))
5223 	  || (TYPE_P (t)
5224 	      && TYPE_NAME (t)
5225 	      && TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
5226 	  || DECL_ALIAS_TEMPLATE_P (t));
5227 }
5228 
5229 /* Return TRUE iff is a specialization of an alias template.  */
5230 
5231 bool
alias_template_specialization_p(const_tree t)5232 alias_template_specialization_p (const_tree t)
5233 {
5234   if (t == NULL_TREE)
5235     return false;
5236 
5237   return (TYPE_P (t)
5238 	  && TYPE_TEMPLATE_INFO (t)
5239 	  && PRIMARY_TEMPLATE_P (TYPE_TI_TEMPLATE (t))
5240 	  && DECL_ALIAS_TEMPLATE_P (TYPE_TI_TEMPLATE (t)));
5241 }
5242 
5243 /* Return the number of innermost template parameters in TMPL.  */
5244 
5245 static int
num_innermost_template_parms(tree tmpl)5246 num_innermost_template_parms (tree tmpl)
5247 {
5248   tree parms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (tmpl));
5249   return TREE_VEC_LENGTH (parms);
5250 }
5251 
5252 /* Return either TMPL or another template that it is equivalent to under DR
5253    1286: An alias that just changes the name of a template is equivalent to
5254    the other template.  */
5255 
5256 static tree
get_underlying_template(tree tmpl)5257 get_underlying_template (tree tmpl)
5258 {
5259   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
5260   while (DECL_ALIAS_TEMPLATE_P (tmpl))
5261     {
5262       tree result = DECL_ORIGINAL_TYPE (DECL_TEMPLATE_RESULT (tmpl));
5263       if (TYPE_TEMPLATE_INFO (result))
5264 	{
5265 	  tree sub = TYPE_TI_TEMPLATE (result);
5266 	  if (PRIMARY_TEMPLATE_P (sub)
5267 	      && (num_innermost_template_parms (tmpl)
5268 		  == num_innermost_template_parms (sub)))
5269 	    {
5270 	      tree alias_args = INNERMOST_TEMPLATE_ARGS
5271 		(template_parms_to_args (DECL_TEMPLATE_PARMS (tmpl)));
5272 	      if (!comp_template_args (TYPE_TI_ARGS (result), alias_args))
5273 		break;
5274 	      /* The alias type is equivalent to the pattern of the
5275 		 underlying template, so strip the alias.  */
5276 	      tmpl = sub;
5277 	      continue;
5278 	    }
5279 	}
5280       break;
5281     }
5282   return tmpl;
5283 }
5284 
5285 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
5286    must be a function or a pointer-to-function type, as specified
5287    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
5288    and check that the resulting function has external linkage.  */
5289 
5290 static tree
convert_nontype_argument_function(tree type,tree expr)5291 convert_nontype_argument_function (tree type, tree expr)
5292 {
5293   tree fns = expr;
5294   tree fn, fn_no_ptr;
5295   linkage_kind linkage;
5296 
5297   fn = instantiate_type (type, fns, tf_none);
5298   if (fn == error_mark_node)
5299     return error_mark_node;
5300 
5301   fn_no_ptr = fn;
5302   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
5303     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
5304   if (BASELINK_P (fn_no_ptr))
5305     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
5306 
5307   /* [temp.arg.nontype]/1
5308 
5309      A template-argument for a non-type, non-template template-parameter
5310      shall be one of:
5311      [...]
5312      -- the address of an object or function with external [C++11: or
5313         internal] linkage.  */
5314 
5315   if (TREE_CODE (fn_no_ptr) != FUNCTION_DECL)
5316     {
5317       error ("%qE is not a valid template argument for type %qT", expr, type);
5318       if (TYPE_PTR_P (type))
5319 	error ("it must be the address of a function with external linkage");
5320       else
5321 	error ("it must be the name of a function with external linkage");
5322       return NULL_TREE;
5323     }
5324 
5325   linkage = decl_linkage (fn_no_ptr);
5326   if (cxx_dialect >= cxx11 ? linkage == lk_none : linkage != lk_external)
5327     {
5328       if (cxx_dialect >= cxx11)
5329 	error ("%qE is not a valid template argument for type %qT "
5330 	       "because %qD has no linkage",
5331 	       expr, type, fn_no_ptr);
5332       else
5333 	error ("%qE is not a valid template argument for type %qT "
5334 	       "because %qD does not have external linkage",
5335 	       expr, type, fn_no_ptr);
5336       return NULL_TREE;
5337     }
5338 
5339   return fn;
5340 }
5341 
5342 /* Subroutine of convert_nontype_argument.
5343    Check if EXPR of type TYPE is a valid pointer-to-member constant.
5344    Emit an error otherwise.  */
5345 
5346 static bool
check_valid_ptrmem_cst_expr(tree type,tree expr,tsubst_flags_t complain)5347 check_valid_ptrmem_cst_expr (tree type, tree expr,
5348 			     tsubst_flags_t complain)
5349 {
5350   STRIP_NOPS (expr);
5351   if (expr && (null_ptr_cst_p (expr) || TREE_CODE (expr) == PTRMEM_CST))
5352     return true;
5353   if (cxx_dialect >= cxx11 && null_member_pointer_value_p (expr))
5354     return true;
5355   if (processing_template_decl
5356       && TREE_CODE (expr) == ADDR_EXPR
5357       && TREE_CODE (TREE_OPERAND (expr, 0)) == OFFSET_REF)
5358     return true;
5359   if (complain & tf_error)
5360     {
5361       error ("%qE is not a valid template argument for type %qT",
5362 	     expr, type);
5363       error ("it must be a pointer-to-member of the form %<&X::Y%>");
5364     }
5365   return false;
5366 }
5367 
5368 /* Returns TRUE iff the address of OP is value-dependent.
5369 
5370    14.6.2.4 [temp.dep.temp]:
5371    A non-integral non-type template-argument is dependent if its type is
5372    dependent or it has either of the following forms
5373      qualified-id
5374      & qualified-id
5375    and contains a nested-name-specifier which specifies a class-name that
5376    names a dependent type.
5377 
5378    We generalize this to just say that the address of a member of a
5379    dependent class is value-dependent; the above doesn't cover the
5380    address of a static data member named with an unqualified-id.  */
5381 
5382 static bool
has_value_dependent_address(tree op)5383 has_value_dependent_address (tree op)
5384 {
5385   /* We could use get_inner_reference here, but there's no need;
5386      this is only relevant for template non-type arguments, which
5387      can only be expressed as &id-expression.  */
5388   if (DECL_P (op))
5389     {
5390       tree ctx = CP_DECL_CONTEXT (op);
5391       if (TYPE_P (ctx) && dependent_type_p (ctx))
5392 	return true;
5393     }
5394 
5395   return false;
5396 }
5397 
5398 /* The next set of functions are used for providing helpful explanatory
5399    diagnostics for failed overload resolution.  Their messages should be
5400    indented by two spaces for consistency with the messages in
5401    call.c  */
5402 
5403 static int
unify_success(bool)5404 unify_success (bool /*explain_p*/)
5405 {
5406   return 0;
5407 }
5408 
5409 static int
unify_parameter_deduction_failure(bool explain_p,tree parm)5410 unify_parameter_deduction_failure (bool explain_p, tree parm)
5411 {
5412   if (explain_p)
5413     inform (input_location,
5414 	    "  couldn't deduce template parameter %qD", parm);
5415   return 1;
5416 }
5417 
5418 static int
unify_invalid(bool)5419 unify_invalid (bool /*explain_p*/)
5420 {
5421   return 1;
5422 }
5423 
5424 static int
unify_cv_qual_mismatch(bool explain_p,tree parm,tree arg)5425 unify_cv_qual_mismatch (bool explain_p, tree parm, tree arg)
5426 {
5427   if (explain_p)
5428     inform (input_location,
5429 	    "  types %qT and %qT have incompatible cv-qualifiers",
5430 	    parm, arg);
5431   return 1;
5432 }
5433 
5434 static int
unify_type_mismatch(bool explain_p,tree parm,tree arg)5435 unify_type_mismatch (bool explain_p, tree parm, tree arg)
5436 {
5437   if (explain_p)
5438     inform (input_location, "  mismatched types %qT and %qT", parm, arg);
5439   return 1;
5440 }
5441 
5442 static int
unify_parameter_pack_mismatch(bool explain_p,tree parm,tree arg)5443 unify_parameter_pack_mismatch (bool explain_p, tree parm, tree arg)
5444 {
5445   if (explain_p)
5446     inform (input_location,
5447 	    "  template parameter %qD is not a parameter pack, but "
5448 	    "argument %qD is",
5449 	    parm, arg);
5450   return 1;
5451 }
5452 
5453 static int
unify_ptrmem_cst_mismatch(bool explain_p,tree parm,tree arg)5454 unify_ptrmem_cst_mismatch (bool explain_p, tree parm, tree arg)
5455 {
5456   if (explain_p)
5457     inform (input_location,
5458 	    "  template argument %qE does not match "
5459 	    "pointer-to-member constant %qE",
5460 	    arg, parm);
5461   return 1;
5462 }
5463 
5464 static int
unify_expression_unequal(bool explain_p,tree parm,tree arg)5465 unify_expression_unequal (bool explain_p, tree parm, tree arg)
5466 {
5467   if (explain_p)
5468     inform (input_location, "  %qE is not equivalent to %qE", parm, arg);
5469   return 1;
5470 }
5471 
5472 static int
unify_parameter_pack_inconsistent(bool explain_p,tree old_arg,tree new_arg)5473 unify_parameter_pack_inconsistent (bool explain_p, tree old_arg, tree new_arg)
5474 {
5475   if (explain_p)
5476     inform (input_location,
5477 	    "  inconsistent parameter pack deduction with %qT and %qT",
5478 	    old_arg, new_arg);
5479   return 1;
5480 }
5481 
5482 static int
unify_inconsistency(bool explain_p,tree parm,tree first,tree second)5483 unify_inconsistency (bool explain_p, tree parm, tree first, tree second)
5484 {
5485   if (explain_p)
5486     {
5487       if (TYPE_P (parm))
5488 	inform (input_location,
5489 		"  deduced conflicting types for parameter %qT (%qT and %qT)",
5490 		parm, first, second);
5491       else
5492 	inform (input_location,
5493 		"  deduced conflicting values for non-type parameter "
5494 		"%qE (%qE and %qE)", parm, first, second);
5495     }
5496   return 1;
5497 }
5498 
5499 static int
unify_vla_arg(bool explain_p,tree arg)5500 unify_vla_arg (bool explain_p, tree arg)
5501 {
5502   if (explain_p)
5503     inform (input_location,
5504 	    "  variable-sized array type %qT is not "
5505 	    "a valid template argument",
5506 	    arg);
5507   return 1;
5508 }
5509 
5510 static int
unify_method_type_error(bool explain_p,tree arg)5511 unify_method_type_error (bool explain_p, tree arg)
5512 {
5513   if (explain_p)
5514     inform (input_location,
5515 	    "  member function type %qT is not a valid template argument",
5516 	    arg);
5517   return 1;
5518 }
5519 
5520 static int
unify_arity(bool explain_p,int have,int wanted)5521 unify_arity (bool explain_p, int have, int wanted)
5522 {
5523   if (explain_p)
5524     inform_n (input_location, wanted,
5525 	      "  candidate expects %d argument, %d provided",
5526 	      "  candidate expects %d arguments, %d provided",
5527 	      wanted, have);
5528   return 1;
5529 }
5530 
5531 static int
unify_too_many_arguments(bool explain_p,int have,int wanted)5532 unify_too_many_arguments (bool explain_p, int have, int wanted)
5533 {
5534   return unify_arity (explain_p, have, wanted);
5535 }
5536 
5537 static int
unify_too_few_arguments(bool explain_p,int have,int wanted)5538 unify_too_few_arguments (bool explain_p, int have, int wanted)
5539 {
5540   return unify_arity (explain_p, have, wanted);
5541 }
5542 
5543 static int
unify_arg_conversion(bool explain_p,tree to_type,tree from_type,tree arg)5544 unify_arg_conversion (bool explain_p, tree to_type,
5545 		      tree from_type, tree arg)
5546 {
5547   if (explain_p)
5548     inform (EXPR_LOC_OR_LOC (arg, input_location),
5549 	    "  cannot convert %qE (type %qT) to type %qT",
5550 	    arg, from_type, to_type);
5551   return 1;
5552 }
5553 
5554 static int
unify_no_common_base(bool explain_p,enum template_base_result r,tree parm,tree arg)5555 unify_no_common_base (bool explain_p, enum template_base_result r,
5556 		      tree parm, tree arg)
5557 {
5558   if (explain_p)
5559     switch (r)
5560       {
5561       case tbr_ambiguous_baseclass:
5562 	inform (input_location, "  %qT is an ambiguous base class of %qT",
5563 		parm, arg);
5564 	break;
5565       default:
5566 	inform (input_location, "  %qT is not derived from %qT", arg, parm);
5567 	break;
5568       }
5569   return 1;
5570 }
5571 
5572 static int
unify_inconsistent_template_template_parameters(bool explain_p)5573 unify_inconsistent_template_template_parameters (bool explain_p)
5574 {
5575   if (explain_p)
5576     inform (input_location,
5577 	    "  template parameters of a template template argument are "
5578 	    "inconsistent with other deduced template arguments");
5579   return 1;
5580 }
5581 
5582 static int
unify_template_deduction_failure(bool explain_p,tree parm,tree arg)5583 unify_template_deduction_failure (bool explain_p, tree parm, tree arg)
5584 {
5585   if (explain_p)
5586     inform (input_location,
5587 	    "  can't deduce a template for %qT from non-template type %qT",
5588 	    parm, arg);
5589   return 1;
5590 }
5591 
5592 static int
unify_template_argument_mismatch(bool explain_p,tree parm,tree arg)5593 unify_template_argument_mismatch (bool explain_p, tree parm, tree arg)
5594 {
5595   if (explain_p)
5596     inform (input_location,
5597 	    "  template argument %qE does not match %qD", arg, parm);
5598   return 1;
5599 }
5600 
5601 static int
unify_overload_resolution_failure(bool explain_p,tree arg)5602 unify_overload_resolution_failure (bool explain_p, tree arg)
5603 {
5604   if (explain_p)
5605     inform (input_location,
5606 	    "  could not resolve address from overloaded function %qE",
5607 	    arg);
5608   return 1;
5609 }
5610 
5611 /* Attempt to convert the non-type template parameter EXPR to the
5612    indicated TYPE.  If the conversion is successful, return the
5613    converted value.  If the conversion is unsuccessful, return
5614    NULL_TREE if we issued an error message, or error_mark_node if we
5615    did not.  We issue error messages for out-and-out bad template
5616    parameters, but not simply because the conversion failed, since we
5617    might be just trying to do argument deduction.  Both TYPE and EXPR
5618    must be non-dependent.
5619 
5620    The conversion follows the special rules described in
5621    [temp.arg.nontype], and it is much more strict than an implicit
5622    conversion.
5623 
5624    This function is called twice for each template argument (see
5625    lookup_template_class for a more accurate description of this
5626    problem). This means that we need to handle expressions which
5627    are not valid in a C++ source, but can be created from the
5628    first call (for instance, casts to perform conversions). These
5629    hacks can go away after we fix the double coercion problem.  */
5630 
5631 static tree
convert_nontype_argument(tree type,tree expr,tsubst_flags_t complain)5632 convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
5633 {
5634   tree expr_type;
5635 
5636   /* Detect immediately string literals as invalid non-type argument.
5637      This special-case is not needed for correctness (we would easily
5638      catch this later), but only to provide better diagnostic for this
5639      common user mistake. As suggested by DR 100, we do not mention
5640      linkage issues in the diagnostic as this is not the point.  */
5641   /* FIXME we're making this OK.  */
5642   if (TREE_CODE (expr) == STRING_CST)
5643     {
5644       if (complain & tf_error)
5645 	error ("%qE is not a valid template argument for type %qT "
5646 	       "because string literals can never be used in this context",
5647 	       expr, type);
5648       return NULL_TREE;
5649     }
5650 
5651   /* Add the ADDR_EXPR now for the benefit of
5652      value_dependent_expression_p.  */
5653   if (TYPE_PTROBV_P (type)
5654       && TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE)
5655     {
5656       expr = decay_conversion (expr, complain);
5657       if (expr == error_mark_node)
5658 	return error_mark_node;
5659     }
5660 
5661   /* If we are in a template, EXPR may be non-dependent, but still
5662      have a syntactic, rather than semantic, form.  For example, EXPR
5663      might be a SCOPE_REF, rather than the VAR_DECL to which the
5664      SCOPE_REF refers.  Preserving the qualifying scope is necessary
5665      so that access checking can be performed when the template is
5666      instantiated -- but here we need the resolved form so that we can
5667      convert the argument.  */
5668   if (TYPE_REF_OBJ_P (type)
5669       && has_value_dependent_address (expr))
5670     /* If we want the address and it's value-dependent, don't fold.  */;
5671   else if (!type_unknown_p (expr))
5672     expr = fold_non_dependent_expr_sfinae (expr, complain);
5673   if (error_operand_p (expr))
5674     return error_mark_node;
5675   expr_type = TREE_TYPE (expr);
5676   if (TREE_CODE (type) == REFERENCE_TYPE)
5677     expr = mark_lvalue_use (expr);
5678   else
5679     expr = mark_rvalue_use (expr);
5680 
5681   /* 14.3.2/5: The null pointer{,-to-member} conversion is applied
5682      to a non-type argument of "nullptr".  */
5683   if (expr == nullptr_node && TYPE_PTR_OR_PTRMEM_P (type))
5684     expr = convert (type, expr);
5685 
5686   /* In C++11, integral or enumeration non-type template arguments can be
5687      arbitrary constant expressions.  Pointer and pointer to
5688      member arguments can be general constant expressions that evaluate
5689      to a null value, but otherwise still need to be of a specific form.  */
5690   if (cxx_dialect >= cxx11)
5691     {
5692       if (TREE_CODE (expr) == PTRMEM_CST)
5693 	/* A PTRMEM_CST is already constant, and a valid template
5694 	   argument for a parameter of pointer to member type, we just want
5695 	   to leave it in that form rather than lower it to a
5696 	   CONSTRUCTOR.  */;
5697       else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5698 	expr = maybe_constant_value (expr);
5699       else if (TYPE_PTR_OR_PTRMEM_P (type))
5700 	{
5701 	  tree folded = maybe_constant_value (expr);
5702 	  if (TYPE_PTR_P (type) ? integer_zerop (folded)
5703 	      : null_member_pointer_value_p (folded))
5704 	    expr = folded;
5705 	}
5706     }
5707 
5708   /* HACK: Due to double coercion, we can get a
5709      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
5710      which is the tree that we built on the first call (see
5711      below when coercing to reference to object or to reference to
5712      function). We just strip everything and get to the arg.
5713      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
5714      for examples.  */
5715   if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
5716     {
5717       tree probe_type, probe = expr;
5718       if (REFERENCE_REF_P (probe))
5719 	probe = TREE_OPERAND (probe, 0);
5720       probe_type = TREE_TYPE (probe);
5721       if (TREE_CODE (probe) == NOP_EXPR)
5722 	{
5723 	  /* ??? Maybe we could use convert_from_reference here, but we
5724 	     would need to relax its constraints because the NOP_EXPR
5725 	     could actually change the type to something more cv-qualified,
5726 	     and this is not folded by convert_from_reference.  */
5727 	  tree addr = TREE_OPERAND (probe, 0);
5728 	  if (TREE_CODE (probe_type) == REFERENCE_TYPE
5729 	      && TREE_CODE (addr) == ADDR_EXPR
5730 	      && TYPE_PTR_P (TREE_TYPE (addr))
5731 	      && (same_type_ignoring_top_level_qualifiers_p
5732 		  (TREE_TYPE (probe_type),
5733 		   TREE_TYPE (TREE_TYPE (addr)))))
5734 	    {
5735 	      expr = TREE_OPERAND (addr, 0);
5736 	      expr_type = TREE_TYPE (probe_type);
5737 	    }
5738 	}
5739     }
5740 
5741   /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
5742      parameter is a pointer to object, through decay and
5743      qualification conversion. Let's strip everything.  */
5744   else if (TREE_CODE (expr) == NOP_EXPR && TYPE_PTROBV_P (type))
5745     {
5746       tree probe = expr;
5747       STRIP_NOPS (probe);
5748       if (TREE_CODE (probe) == ADDR_EXPR
5749 	  && TYPE_PTR_P (TREE_TYPE (probe)))
5750 	{
5751 	  /* Skip the ADDR_EXPR only if it is part of the decay for
5752 	     an array. Otherwise, it is part of the original argument
5753 	     in the source code.  */
5754 	  if (TREE_CODE (TREE_TYPE (TREE_OPERAND (probe, 0))) == ARRAY_TYPE)
5755 	    probe = TREE_OPERAND (probe, 0);
5756 	  expr = probe;
5757 	  expr_type = TREE_TYPE (expr);
5758 	}
5759     }
5760 
5761   /* [temp.arg.nontype]/5, bullet 1
5762 
5763      For a non-type template-parameter of integral or enumeration type,
5764      integral promotions (_conv.prom_) and integral conversions
5765      (_conv.integral_) are applied.  */
5766   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5767     {
5768       tree t = build_integral_nontype_arg_conv (type, expr, complain);
5769       t = maybe_constant_value (t);
5770       if (t != error_mark_node)
5771 	expr = t;
5772 
5773       if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (expr)))
5774 	return error_mark_node;
5775 
5776       /* Notice that there are constant expressions like '4 % 0' which
5777 	 do not fold into integer constants.  */
5778       if (TREE_CODE (expr) != INTEGER_CST)
5779 	{
5780 	  if (complain & tf_error)
5781 	    {
5782 	      int errs = errorcount, warns = warningcount + werrorcount;
5783 	      if (processing_template_decl
5784 		  && !require_potential_constant_expression (expr))
5785 		return NULL_TREE;
5786 	      expr = cxx_constant_value (expr);
5787 	      if (errorcount > errs || warningcount + werrorcount > warns)
5788 		inform (EXPR_LOC_OR_LOC (expr, input_location),
5789 			"in template argument for type %qT ", type);
5790 	      if (expr == error_mark_node)
5791 		return NULL_TREE;
5792 	      /* else cxx_constant_value complained but gave us
5793 		 a real constant, so go ahead.  */
5794 	      gcc_assert (TREE_CODE (expr) == INTEGER_CST);
5795 	    }
5796 	  else
5797 	    return NULL_TREE;
5798 	}
5799 
5800       /* Avoid typedef problems.  */
5801       if (TREE_TYPE (expr) != type)
5802 	expr = fold_convert (type, expr);
5803     }
5804   /* [temp.arg.nontype]/5, bullet 2
5805 
5806      For a non-type template-parameter of type pointer to object,
5807      qualification conversions (_conv.qual_) and the array-to-pointer
5808      conversion (_conv.array_) are applied.  */
5809   else if (TYPE_PTROBV_P (type))
5810     {
5811       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
5812 
5813 	 A template-argument for a non-type, non-template template-parameter
5814 	 shall be one of: [...]
5815 
5816 	 -- the name of a non-type template-parameter;
5817 	 -- the address of an object or function with external linkage, [...]
5818 	    expressed as "& id-expression" where the & is optional if the name
5819 	    refers to a function or array, or if the corresponding
5820 	    template-parameter is a reference.
5821 
5822 	Here, we do not care about functions, as they are invalid anyway
5823 	for a parameter of type pointer-to-object.  */
5824 
5825       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
5826 	/* Non-type template parameters are OK.  */
5827 	;
5828       else if (cxx_dialect >= cxx11 && integer_zerop (expr))
5829 	/* Null pointer values are OK in C++11.  */;
5830       else if (TREE_CODE (expr) != ADDR_EXPR
5831 	       && TREE_CODE (expr_type) != ARRAY_TYPE)
5832 	{
5833 	  if (VAR_P (expr))
5834 	    {
5835 	      if (complain & tf_error)
5836 		error ("%qD is not a valid template argument "
5837 		       "because %qD is a variable, not the address of "
5838 		       "a variable", expr, expr);
5839 	      return NULL_TREE;
5840 	    }
5841 	  if (POINTER_TYPE_P (expr_type))
5842 	    {
5843 	      if (complain & tf_error)
5844 		error ("%qE is not a valid template argument for %qT "
5845 		       "because it is not the address of a variable",
5846 		       expr, type);
5847 	      return NULL_TREE;
5848 	    }
5849 	  /* Other values, like integer constants, might be valid
5850 	     non-type arguments of some other type.  */
5851 	  return error_mark_node;
5852 	}
5853       else
5854 	{
5855 	  tree decl;
5856 
5857 	  decl = ((TREE_CODE (expr) == ADDR_EXPR)
5858 		  ? TREE_OPERAND (expr, 0) : expr);
5859 	  if (!VAR_P (decl))
5860 	    {
5861 	      if (complain & tf_error)
5862 		error ("%qE is not a valid template argument of type %qT "
5863 		       "because %qE is not a variable", expr, type, decl);
5864 	      return NULL_TREE;
5865 	    }
5866 	  else if (cxx_dialect < cxx11 && !DECL_EXTERNAL_LINKAGE_P (decl))
5867 	    {
5868 	      if (complain & tf_error)
5869 		error ("%qE is not a valid template argument of type %qT "
5870 		       "because %qD does not have external linkage",
5871 		       expr, type, decl);
5872 	      return NULL_TREE;
5873 	    }
5874 	  else if (cxx_dialect >= cxx11 && decl_linkage (decl) == lk_none)
5875 	    {
5876 	      if (complain & tf_error)
5877 		error ("%qE is not a valid template argument of type %qT "
5878 		       "because %qD has no linkage", expr, type, decl);
5879 	      return NULL_TREE;
5880 	    }
5881 	}
5882 
5883       expr = decay_conversion (expr, complain);
5884       if (expr == error_mark_node)
5885 	return error_mark_node;
5886 
5887       expr = perform_qualification_conversions (type, expr);
5888       if (expr == error_mark_node)
5889 	return error_mark_node;
5890     }
5891   /* [temp.arg.nontype]/5, bullet 3
5892 
5893      For a non-type template-parameter of type reference to object, no
5894      conversions apply. The type referred to by the reference may be more
5895      cv-qualified than the (otherwise identical) type of the
5896      template-argument. The template-parameter is bound directly to the
5897      template-argument, which must be an lvalue.  */
5898   else if (TYPE_REF_OBJ_P (type))
5899     {
5900       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
5901 						      expr_type))
5902 	return error_mark_node;
5903 
5904       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
5905 	{
5906 	  if (complain & tf_error)
5907 	    error ("%qE is not a valid template argument for type %qT "
5908 		   "because of conflicts in cv-qualification", expr, type);
5909 	  return NULL_TREE;
5910 	}
5911 
5912       if (!real_lvalue_p (expr))
5913 	{
5914 	  if (complain & tf_error)
5915 	    error ("%qE is not a valid template argument for type %qT "
5916 		   "because it is not an lvalue", expr, type);
5917 	  return NULL_TREE;
5918 	}
5919 
5920       /* [temp.arg.nontype]/1
5921 
5922 	 A template-argument for a non-type, non-template template-parameter
5923 	 shall be one of: [...]
5924 
5925 	 -- the address of an object or function with external linkage.  */
5926       if (INDIRECT_REF_P (expr)
5927 	  && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
5928 	{
5929 	  expr = TREE_OPERAND (expr, 0);
5930 	  if (DECL_P (expr))
5931 	    {
5932 	      if (complain & tf_error)
5933 		error ("%q#D is not a valid template argument for type %qT "
5934 		       "because a reference variable does not have a constant "
5935 		       "address", expr, type);
5936 	      return NULL_TREE;
5937 	    }
5938 	}
5939 
5940       if (!DECL_P (expr))
5941 	{
5942 	  if (complain & tf_error)
5943 	    error ("%qE is not a valid template argument for type %qT "
5944 		   "because it is not an object with external linkage",
5945 		   expr, type);
5946 	  return NULL_TREE;
5947 	}
5948 
5949       if (!DECL_EXTERNAL_LINKAGE_P (expr))
5950 	{
5951 	  if (complain & tf_error)
5952 	    error ("%qE is not a valid template argument for type %qT "
5953 		   "because object %qD has not external linkage",
5954 		   expr, type, expr);
5955 	  return NULL_TREE;
5956 	}
5957 
5958       expr = build_nop (type, build_address (expr));
5959     }
5960   /* [temp.arg.nontype]/5, bullet 4
5961 
5962      For a non-type template-parameter of type pointer to function, only
5963      the function-to-pointer conversion (_conv.func_) is applied. If the
5964      template-argument represents a set of overloaded functions (or a
5965      pointer to such), the matching function is selected from the set
5966      (_over.over_).  */
5967   else if (TYPE_PTRFN_P (type))
5968     {
5969       /* If the argument is a template-id, we might not have enough
5970 	 context information to decay the pointer.  */
5971       if (!type_unknown_p (expr_type))
5972 	{
5973 	  expr = decay_conversion (expr, complain);
5974 	  if (expr == error_mark_node)
5975 	    return error_mark_node;
5976 	}
5977 
5978       if (cxx_dialect >= cxx11 && integer_zerop (expr))
5979 	/* Null pointer values are OK in C++11.  */
5980 	return perform_qualification_conversions (type, expr);
5981 
5982       expr = convert_nontype_argument_function (type, expr);
5983       if (!expr || expr == error_mark_node)
5984 	return expr;
5985     }
5986   /* [temp.arg.nontype]/5, bullet 5
5987 
5988      For a non-type template-parameter of type reference to function, no
5989      conversions apply. If the template-argument represents a set of
5990      overloaded functions, the matching function is selected from the set
5991      (_over.over_).  */
5992   else if (TYPE_REFFN_P (type))
5993     {
5994       if (TREE_CODE (expr) == ADDR_EXPR)
5995 	{
5996 	  if (complain & tf_error)
5997 	    {
5998 	      error ("%qE is not a valid template argument for type %qT "
5999 		     "because it is a pointer", expr, type);
6000 	      inform (input_location, "try using %qE instead",
6001 		      TREE_OPERAND (expr, 0));
6002 	    }
6003 	  return NULL_TREE;
6004 	}
6005 
6006       expr = convert_nontype_argument_function (type, expr);
6007       if (!expr || expr == error_mark_node)
6008 	return expr;
6009 
6010       expr = build_nop (type, build_address (expr));
6011     }
6012   /* [temp.arg.nontype]/5, bullet 6
6013 
6014      For a non-type template-parameter of type pointer to member function,
6015      no conversions apply. If the template-argument represents a set of
6016      overloaded member functions, the matching member function is selected
6017      from the set (_over.over_).  */
6018   else if (TYPE_PTRMEMFUNC_P (type))
6019     {
6020       expr = instantiate_type (type, expr, tf_none);
6021       if (expr == error_mark_node)
6022 	return error_mark_node;
6023 
6024       /* [temp.arg.nontype] bullet 1 says the pointer to member
6025          expression must be a pointer-to-member constant.  */
6026       if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6027 	return error_mark_node;
6028 
6029       /* There is no way to disable standard conversions in
6030 	 resolve_address_of_overloaded_function (called by
6031 	 instantiate_type). It is possible that the call succeeded by
6032 	 converting &B::I to &D::I (where B is a base of D), so we need
6033 	 to reject this conversion here.
6034 
6035 	 Actually, even if there was a way to disable standard conversions,
6036 	 it would still be better to reject them here so that we can
6037 	 provide a superior diagnostic.  */
6038       if (!same_type_p (TREE_TYPE (expr), type))
6039 	{
6040 	  if (complain & tf_error)
6041 	    {
6042 	      error ("%qE is not a valid template argument for type %qT "
6043 		     "because it is of type %qT", expr, type,
6044 		     TREE_TYPE (expr));
6045 	      /* If we are just one standard conversion off, explain.  */
6046 	      if (can_convert_standard (type, TREE_TYPE (expr), complain))
6047 		inform (input_location,
6048 			"standard conversions are not allowed in this context");
6049 	    }
6050 	  return NULL_TREE;
6051 	}
6052     }
6053   /* [temp.arg.nontype]/5, bullet 7
6054 
6055      For a non-type template-parameter of type pointer to data member,
6056      qualification conversions (_conv.qual_) are applied.  */
6057   else if (TYPE_PTRDATAMEM_P (type))
6058     {
6059       /* [temp.arg.nontype] bullet 1 says the pointer to member
6060          expression must be a pointer-to-member constant.  */
6061       if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6062 	return error_mark_node;
6063 
6064       expr = perform_qualification_conversions (type, expr);
6065       if (expr == error_mark_node)
6066 	return expr;
6067     }
6068   else if (NULLPTR_TYPE_P (type))
6069     {
6070       if (expr != nullptr_node)
6071 	{
6072 	  if (complain & tf_error)
6073 	    error ("%qE is not a valid template argument for type %qT "
6074 		   "because it is of type %qT", expr, type, TREE_TYPE (expr));
6075 	  return NULL_TREE;
6076 	}
6077       return expr;
6078     }
6079   /* A template non-type parameter must be one of the above.  */
6080   else
6081     gcc_unreachable ();
6082 
6083   /* Sanity check: did we actually convert the argument to the
6084      right type?  */
6085   gcc_assert (same_type_ignoring_top_level_qualifiers_p
6086 	      (type, TREE_TYPE (expr)));
6087   return expr;
6088 }
6089 
6090 /* Subroutine of coerce_template_template_parms, which returns 1 if
6091    PARM_PARM and ARG_PARM match using the rule for the template
6092    parameters of template template parameters. Both PARM and ARG are
6093    template parameters; the rest of the arguments are the same as for
6094    coerce_template_template_parms.
6095  */
6096 static int
coerce_template_template_parm(tree parm,tree arg,tsubst_flags_t complain,tree in_decl,tree outer_args)6097 coerce_template_template_parm (tree parm,
6098                               tree arg,
6099                               tsubst_flags_t complain,
6100                               tree in_decl,
6101                               tree outer_args)
6102 {
6103   if (arg == NULL_TREE || error_operand_p (arg)
6104       || parm == NULL_TREE || error_operand_p (parm))
6105     return 0;
6106 
6107   if (TREE_CODE (arg) != TREE_CODE (parm))
6108     return 0;
6109 
6110   switch (TREE_CODE (parm))
6111     {
6112     case TEMPLATE_DECL:
6113       /* We encounter instantiations of templates like
6114 	 template <template <template <class> class> class TT>
6115 	 class C;  */
6116       {
6117 	tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6118 	tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6119 
6120 	if (!coerce_template_template_parms
6121 	    (parmparm, argparm, complain, in_decl, outer_args))
6122 	  return 0;
6123       }
6124       /* Fall through.  */
6125 
6126     case TYPE_DECL:
6127       if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
6128 	  && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6129 	/* Argument is a parameter pack but parameter is not.  */
6130 	return 0;
6131       break;
6132 
6133     case PARM_DECL:
6134       /* The tsubst call is used to handle cases such as
6135 
6136            template <int> class C {};
6137 	   template <class T, template <T> class TT> class D {};
6138 	   D<int, C> d;
6139 
6140 	 i.e. the parameter list of TT depends on earlier parameters.  */
6141       if (!uses_template_parms (TREE_TYPE (arg))
6142 	  && !same_type_p
6143 	        (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
6144 		 TREE_TYPE (arg)))
6145 	return 0;
6146 
6147       if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
6148 	  && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6149 	/* Argument is a parameter pack but parameter is not.  */
6150 	return 0;
6151 
6152       break;
6153 
6154     default:
6155       gcc_unreachable ();
6156     }
6157 
6158   return 1;
6159 }
6160 
6161 
6162 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
6163    template template parameters.  Both PARM_PARMS and ARG_PARMS are
6164    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
6165    or PARM_DECL.
6166 
6167    Consider the example:
6168      template <class T> class A;
6169      template<template <class U> class TT> class B;
6170 
6171    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
6172    the parameters to A, and OUTER_ARGS contains A.  */
6173 
6174 static int
coerce_template_template_parms(tree parm_parms,tree arg_parms,tsubst_flags_t complain,tree in_decl,tree outer_args)6175 coerce_template_template_parms (tree parm_parms,
6176 				tree arg_parms,
6177 				tsubst_flags_t complain,
6178 				tree in_decl,
6179 				tree outer_args)
6180 {
6181   int nparms, nargs, i;
6182   tree parm, arg;
6183   int variadic_p = 0;
6184 
6185   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
6186   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
6187 
6188   nparms = TREE_VEC_LENGTH (parm_parms);
6189   nargs = TREE_VEC_LENGTH (arg_parms);
6190 
6191   /* Determine whether we have a parameter pack at the end of the
6192      template template parameter's template parameter list.  */
6193   if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
6194     {
6195       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
6196 
6197       if (error_operand_p (parm))
6198 	return 0;
6199 
6200       switch (TREE_CODE (parm))
6201         {
6202         case TEMPLATE_DECL:
6203         case TYPE_DECL:
6204           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6205             variadic_p = 1;
6206           break;
6207 
6208         case PARM_DECL:
6209           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6210             variadic_p = 1;
6211           break;
6212 
6213         default:
6214           gcc_unreachable ();
6215         }
6216     }
6217 
6218   if (nargs != nparms
6219       && !(variadic_p && nargs >= nparms - 1))
6220     return 0;
6221 
6222   /* Check all of the template parameters except the parameter pack at
6223      the end (if any).  */
6224   for (i = 0; i < nparms - variadic_p; ++i)
6225     {
6226       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
6227           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6228         continue;
6229 
6230       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6231       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6232 
6233       if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6234                                           outer_args))
6235 	return 0;
6236 
6237     }
6238 
6239   if (variadic_p)
6240     {
6241       /* Check each of the template parameters in the template
6242 	 argument against the template parameter pack at the end of
6243 	 the template template parameter.  */
6244       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
6245 	return 0;
6246 
6247       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6248 
6249       for (; i < nargs; ++i)
6250         {
6251           if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6252             continue;
6253 
6254           arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6255 
6256           if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6257                                               outer_args))
6258             return 0;
6259         }
6260     }
6261 
6262   return 1;
6263 }
6264 
6265 /* Verifies that the deduced template arguments (in TARGS) for the
6266    template template parameters (in TPARMS) represent valid bindings,
6267    by comparing the template parameter list of each template argument
6268    to the template parameter list of its corresponding template
6269    template parameter, in accordance with DR150. This
6270    routine can only be called after all template arguments have been
6271    deduced. It will return TRUE if all of the template template
6272    parameter bindings are okay, FALSE otherwise.  */
6273 bool
template_template_parm_bindings_ok_p(tree tparms,tree targs)6274 template_template_parm_bindings_ok_p (tree tparms, tree targs)
6275 {
6276   int i, ntparms = TREE_VEC_LENGTH (tparms);
6277   bool ret = true;
6278 
6279   /* We're dealing with template parms in this process.  */
6280   ++processing_template_decl;
6281 
6282   targs = INNERMOST_TEMPLATE_ARGS (targs);
6283 
6284   for (i = 0; i < ntparms; ++i)
6285     {
6286       tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
6287       tree targ = TREE_VEC_ELT (targs, i);
6288 
6289       if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
6290 	{
6291 	  tree packed_args = NULL_TREE;
6292 	  int idx, len = 1;
6293 
6294 	  if (ARGUMENT_PACK_P (targ))
6295 	    {
6296 	      /* Look inside the argument pack.  */
6297 	      packed_args = ARGUMENT_PACK_ARGS (targ);
6298 	      len = TREE_VEC_LENGTH (packed_args);
6299 	    }
6300 
6301 	  for (idx = 0; idx < len; ++idx)
6302 	    {
6303 	      tree targ_parms = NULL_TREE;
6304 
6305 	      if (packed_args)
6306 		/* Extract the next argument from the argument
6307 		   pack.  */
6308 		targ = TREE_VEC_ELT (packed_args, idx);
6309 
6310 	      if (PACK_EXPANSION_P (targ))
6311 		/* Look at the pattern of the pack expansion.  */
6312 		targ = PACK_EXPANSION_PATTERN (targ);
6313 
6314 	      /* Extract the template parameters from the template
6315 		 argument.  */
6316 	      if (TREE_CODE (targ) == TEMPLATE_DECL)
6317 		targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
6318 	      else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
6319 		targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
6320 
6321 	      /* Verify that we can coerce the template template
6322 		 parameters from the template argument to the template
6323 		 parameter.  This requires an exact match.  */
6324 	      if (targ_parms
6325 		  && !coerce_template_template_parms
6326 		       (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
6327 			targ_parms,
6328 			tf_none,
6329 			tparm,
6330 			targs))
6331 		{
6332 		  ret = false;
6333 		  goto out;
6334 		}
6335 	    }
6336 	}
6337     }
6338 
6339  out:
6340 
6341   --processing_template_decl;
6342   return ret;
6343 }
6344 
6345 /* Since type attributes aren't mangled, we need to strip them from
6346    template type arguments.  */
6347 
6348 static tree
canonicalize_type_argument(tree arg,tsubst_flags_t complain)6349 canonicalize_type_argument (tree arg, tsubst_flags_t complain)
6350 {
6351   tree mv;
6352   if (!arg || arg == error_mark_node || arg == TYPE_CANONICAL (arg))
6353     return arg;
6354   mv = TYPE_MAIN_VARIANT (arg);
6355   arg = strip_typedefs (arg);
6356   if (TYPE_ALIGN (arg) != TYPE_ALIGN (mv)
6357       || TYPE_ATTRIBUTES (arg) != TYPE_ATTRIBUTES (mv))
6358     {
6359       if (complain & tf_warning)
6360 	warning (0, "ignoring attributes on template argument %qT", arg);
6361       arg = build_aligned_type (arg, TYPE_ALIGN (mv));
6362       arg = cp_build_type_attribute_variant (arg, TYPE_ATTRIBUTES (mv));
6363     }
6364   return arg;
6365 }
6366 
6367 /* Convert the indicated template ARG as necessary to match the
6368    indicated template PARM.  Returns the converted ARG, or
6369    error_mark_node if the conversion was unsuccessful.  Error and
6370    warning messages are issued under control of COMPLAIN.  This
6371    conversion is for the Ith parameter in the parameter list.  ARGS is
6372    the full set of template arguments deduced so far.  */
6373 
6374 static tree
convert_template_argument(tree parm,tree arg,tree args,tsubst_flags_t complain,int i,tree in_decl)6375 convert_template_argument (tree parm,
6376 			   tree arg,
6377 			   tree args,
6378 			   tsubst_flags_t complain,
6379 			   int i,
6380 			   tree in_decl)
6381 {
6382   tree orig_arg;
6383   tree val;
6384   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
6385 
6386   if (TREE_CODE (arg) == TREE_LIST
6387       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
6388     {
6389       /* The template argument was the name of some
6390 	 member function.  That's usually
6391 	 invalid, but static members are OK.  In any
6392 	 case, grab the underlying fields/functions
6393 	 and issue an error later if required.  */
6394       orig_arg = TREE_VALUE (arg);
6395       TREE_TYPE (arg) = unknown_type_node;
6396     }
6397 
6398   orig_arg = arg;
6399 
6400   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
6401   requires_type = (TREE_CODE (parm) == TYPE_DECL
6402 		   || requires_tmpl_type);
6403 
6404   /* When determining whether an argument pack expansion is a template,
6405      look at the pattern.  */
6406   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
6407     arg = PACK_EXPANSION_PATTERN (arg);
6408 
6409   /* Deal with an injected-class-name used as a template template arg.  */
6410   if (requires_tmpl_type && CLASS_TYPE_P (arg))
6411     {
6412       tree t = maybe_get_template_decl_from_type_decl (TYPE_NAME (arg));
6413       if (TREE_CODE (t) == TEMPLATE_DECL)
6414 	{
6415 	  if (cxx_dialect >= cxx11)
6416 	    /* OK under DR 1004.  */;
6417 	  else if (complain & tf_warning_or_error)
6418 	    pedwarn (input_location, OPT_Wpedantic, "injected-class-name %qD"
6419 		     " used as template template argument", TYPE_NAME (arg));
6420 	  else if (flag_pedantic_errors)
6421 	    t = arg;
6422 
6423 	  arg = t;
6424 	}
6425     }
6426 
6427   is_tmpl_type =
6428     ((TREE_CODE (arg) == TEMPLATE_DECL
6429       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
6430      || (requires_tmpl_type && TREE_CODE (arg) == TYPE_ARGUMENT_PACK)
6431      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6432      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
6433 
6434   if (is_tmpl_type
6435       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6436 	  || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
6437     arg = TYPE_STUB_DECL (arg);
6438 
6439   is_type = TYPE_P (arg) || is_tmpl_type;
6440 
6441   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
6442       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
6443     {
6444       if (TREE_CODE (TREE_OPERAND (arg, 1)) == BIT_NOT_EXPR)
6445 	{
6446 	  if (complain & tf_error)
6447 	    error ("invalid use of destructor %qE as a type", orig_arg);
6448 	  return error_mark_node;
6449 	}
6450 
6451       permerror (input_location,
6452 		 "to refer to a type member of a template parameter, "
6453 		 "use %<typename %E%>", orig_arg);
6454 
6455       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
6456 				     TREE_OPERAND (arg, 1),
6457 				     typename_type,
6458 				     complain);
6459       arg = orig_arg;
6460       is_type = 1;
6461     }
6462   if (is_type != requires_type)
6463     {
6464       if (in_decl)
6465 	{
6466 	  if (complain & tf_error)
6467 	    {
6468 	      error ("type/value mismatch at argument %d in template "
6469 		     "parameter list for %qD",
6470 		     i + 1, in_decl);
6471 	      if (is_type)
6472 		error ("  expected a constant of type %qT, got %qT",
6473 		       TREE_TYPE (parm),
6474 		       (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
6475 	      else if (requires_tmpl_type)
6476 		error ("  expected a class template, got %qE", orig_arg);
6477 	      else
6478 		error ("  expected a type, got %qE", orig_arg);
6479 	    }
6480 	}
6481       return error_mark_node;
6482     }
6483   if (is_tmpl_type ^ requires_tmpl_type)
6484     {
6485       if (in_decl && (complain & tf_error))
6486 	{
6487 	  error ("type/value mismatch at argument %d in template "
6488 		 "parameter list for %qD",
6489 		 i + 1, in_decl);
6490 	  if (is_tmpl_type)
6491 	    error ("  expected a type, got %qT", DECL_NAME (arg));
6492 	  else
6493 	    error ("  expected a class template, got %qT", orig_arg);
6494 	}
6495       return error_mark_node;
6496     }
6497 
6498   if (is_type)
6499     {
6500       if (requires_tmpl_type)
6501 	{
6502 	  if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
6503 	    val = orig_arg;
6504 	  else if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
6505 	    /* The number of argument required is not known yet.
6506 	       Just accept it for now.  */
6507 	    val = TREE_TYPE (arg);
6508 	  else
6509 	    {
6510 	      tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6511 	      tree argparm;
6512 
6513 	      /* Strip alias templates that are equivalent to another
6514 		 template.  */
6515 	      arg = get_underlying_template (arg);
6516               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6517 
6518 	      if (coerce_template_template_parms (parmparm, argparm,
6519 						  complain, in_decl,
6520 						  args))
6521 		{
6522 		  val = arg;
6523 
6524 		  /* TEMPLATE_TEMPLATE_PARM node is preferred over
6525 		     TEMPLATE_DECL.  */
6526 		  if (val != error_mark_node)
6527                     {
6528                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
6529                         val = TREE_TYPE (val);
6530 		      if (TREE_CODE (orig_arg) == TYPE_PACK_EXPANSION)
6531 			val = make_pack_expansion (val);
6532                     }
6533 		}
6534 	      else
6535 		{
6536 		  if (in_decl && (complain & tf_error))
6537 		    {
6538 		      error ("type/value mismatch at argument %d in "
6539 			     "template parameter list for %qD",
6540 			     i + 1, in_decl);
6541 		      error ("  expected a template of type %qD, got %qT",
6542 			     parm, orig_arg);
6543 		    }
6544 
6545 		  val = error_mark_node;
6546 		}
6547 	    }
6548 	}
6549       else
6550 	val = orig_arg;
6551       /* We only form one instance of each template specialization.
6552 	 Therefore, if we use a non-canonical variant (i.e., a
6553 	 typedef), any future messages referring to the type will use
6554 	 the typedef, which is confusing if those future uses do not
6555 	 themselves also use the typedef.  */
6556       if (TYPE_P (val))
6557 	val = canonicalize_type_argument (val, complain);
6558     }
6559   else
6560     {
6561       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
6562 
6563       if (invalid_nontype_parm_type_p (t, complain))
6564 	return error_mark_node;
6565 
6566       if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
6567 	{
6568 	  if (same_type_p (t, TREE_TYPE (orig_arg)))
6569 	    val = orig_arg;
6570 	  else
6571 	    {
6572 	      /* Not sure if this is reachable, but it doesn't hurt
6573 		 to be robust.  */
6574 	      error ("type mismatch in nontype parameter pack");
6575 	      val = error_mark_node;
6576 	    }
6577 	}
6578       else if (!dependent_template_arg_p (orig_arg)
6579 	       && !uses_template_parms (t))
6580 	/* We used to call digest_init here.  However, digest_init
6581 	   will report errors, which we don't want when complain
6582 	   is zero.  More importantly, digest_init will try too
6583 	   hard to convert things: for example, `0' should not be
6584 	   converted to pointer type at this point according to
6585 	   the standard.  Accepting this is not merely an
6586 	   extension, since deciding whether or not these
6587 	   conversions can occur is part of determining which
6588 	   function template to call, or whether a given explicit
6589 	   argument specification is valid.  */
6590 	val = convert_nontype_argument (t, orig_arg, complain);
6591       else
6592 	val = strip_typedefs_expr (orig_arg);
6593 
6594       if (val == NULL_TREE)
6595 	val = error_mark_node;
6596       else if (val == error_mark_node && (complain & tf_error))
6597 	error ("could not convert template argument %qE to %qT",  orig_arg, t);
6598 
6599       if (TREE_CODE (val) == SCOPE_REF)
6600 	{
6601 	  /* Strip typedefs from the SCOPE_REF.  */
6602 	  tree type = canonicalize_type_argument (TREE_TYPE (val), complain);
6603 	  tree scope = canonicalize_type_argument (TREE_OPERAND (val, 0),
6604 						   complain);
6605 	  val = build_qualified_name (type, scope, TREE_OPERAND (val, 1),
6606 				      QUALIFIED_NAME_IS_TEMPLATE (val));
6607 	}
6608     }
6609 
6610   return val;
6611 }
6612 
6613 /* Coerces the remaining template arguments in INNER_ARGS (from
6614    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
6615    Returns the coerced argument pack. PARM_IDX is the position of this
6616    parameter in the template parameter list. ARGS is the original
6617    template argument list.  */
6618 static tree
coerce_template_parameter_pack(tree parms,int parm_idx,tree args,tree inner_args,int arg_idx,tree new_args,int * lost,tree in_decl,tsubst_flags_t complain)6619 coerce_template_parameter_pack (tree parms,
6620                                 int parm_idx,
6621                                 tree args,
6622                                 tree inner_args,
6623                                 int arg_idx,
6624                                 tree new_args,
6625                                 int* lost,
6626                                 tree in_decl,
6627                                 tsubst_flags_t complain)
6628 {
6629   tree parm = TREE_VEC_ELT (parms, parm_idx);
6630   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6631   tree packed_args;
6632   tree argument_pack;
6633   tree packed_parms = NULL_TREE;
6634 
6635   if (arg_idx > nargs)
6636     arg_idx = nargs;
6637 
6638   if (tree packs = fixed_parameter_pack_p (TREE_VALUE (parm)))
6639     {
6640       /* When the template parameter is a non-type template parameter pack
6641          or template template parameter pack whose type or template
6642          parameters use parameter packs, we know exactly how many arguments
6643          we are looking for.  Build a vector of the instantiated decls for
6644          these template parameters in PACKED_PARMS.  */
6645       /* We can't use make_pack_expansion here because it would interpret a
6646 	 _DECL as a use rather than a declaration.  */
6647       tree decl = TREE_VALUE (parm);
6648       tree exp = cxx_make_type (TYPE_PACK_EXPANSION);
6649       SET_PACK_EXPANSION_PATTERN (exp, decl);
6650       PACK_EXPANSION_PARAMETER_PACKS (exp) = packs;
6651       SET_TYPE_STRUCTURAL_EQUALITY (exp);
6652 
6653       TREE_VEC_LENGTH (args)--;
6654       packed_parms = tsubst_pack_expansion (exp, args, complain, decl);
6655       TREE_VEC_LENGTH (args)++;
6656 
6657       if (packed_parms == error_mark_node)
6658         return error_mark_node;
6659 
6660       /* If we're doing a partial instantiation of a member template,
6661          verify that all of the types used for the non-type
6662          template parameter pack are, in fact, valid for non-type
6663          template parameters.  */
6664       if (arg_idx < nargs
6665           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
6666         {
6667           int j, len = TREE_VEC_LENGTH (packed_parms);
6668           for (j = 0; j < len; ++j)
6669             {
6670               tree t = TREE_TYPE (TREE_VEC_ELT (packed_parms, j));
6671               if (invalid_nontype_parm_type_p (t, complain))
6672                 return error_mark_node;
6673             }
6674         }
6675 
6676       packed_args = make_tree_vec (TREE_VEC_LENGTH (packed_parms));
6677     }
6678   else
6679     packed_args = make_tree_vec (nargs - arg_idx);
6680 
6681   /* Convert the remaining arguments, which will be a part of the
6682      parameter pack "parm".  */
6683   for (; arg_idx < nargs; ++arg_idx)
6684     {
6685       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
6686       tree actual_parm = TREE_VALUE (parm);
6687       int pack_idx = arg_idx - parm_idx;
6688 
6689       if (packed_parms)
6690         {
6691 	  /* Once we've packed as many args as we have types, stop.  */
6692 	  if (pack_idx >= TREE_VEC_LENGTH (packed_parms))
6693 	    break;
6694 	  else if (PACK_EXPANSION_P (arg))
6695 	    /* We don't know how many args we have yet, just
6696 	       use the unconverted ones for now.  */
6697 	    return NULL_TREE;
6698 	  else
6699 	    actual_parm = TREE_VEC_ELT (packed_parms, pack_idx);
6700         }
6701 
6702       if (arg == error_mark_node)
6703 	{
6704 	  if (complain & tf_error)
6705 	    error ("template argument %d is invalid", arg_idx + 1);
6706 	}
6707       else
6708 	arg = convert_template_argument (actual_parm,
6709 					 arg, new_args, complain, parm_idx,
6710 					 in_decl);
6711       if (arg == error_mark_node)
6712         (*lost)++;
6713       TREE_VEC_ELT (packed_args, pack_idx) = arg;
6714     }
6715 
6716   if (arg_idx - parm_idx < TREE_VEC_LENGTH (packed_args)
6717       && TREE_VEC_LENGTH (packed_args) > 0)
6718     {
6719       error ("wrong number of template arguments (%d, should be %d)",
6720 	     arg_idx - parm_idx, TREE_VEC_LENGTH (packed_args));
6721       return error_mark_node;
6722     }
6723 
6724   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
6725       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
6726     argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
6727   else
6728     {
6729       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
6730       TREE_TYPE (argument_pack)
6731         = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
6732       TREE_CONSTANT (argument_pack) = 1;
6733     }
6734 
6735   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
6736 #ifdef ENABLE_CHECKING
6737   SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
6738 				       TREE_VEC_LENGTH (packed_args));
6739 #endif
6740   return argument_pack;
6741 }
6742 
6743 /* Returns the number of pack expansions in the template argument vector
6744    ARGS.  */
6745 
6746 static int
pack_expansion_args_count(tree args)6747 pack_expansion_args_count (tree args)
6748 {
6749   int i;
6750   int count = 0;
6751   if (args)
6752     for (i = 0; i < TREE_VEC_LENGTH (args); ++i)
6753       {
6754 	tree elt = TREE_VEC_ELT (args, i);
6755 	if (elt && PACK_EXPANSION_P (elt))
6756 	  ++count;
6757       }
6758   return count;
6759 }
6760 
6761 /* Convert all template arguments to their appropriate types, and
6762    return a vector containing the innermost resulting template
6763    arguments.  If any error occurs, return error_mark_node. Error and
6764    warning messages are issued under control of COMPLAIN.
6765 
6766    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
6767    for arguments not specified in ARGS.  Otherwise, if
6768    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
6769    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
6770    USE_DEFAULT_ARGS is false, then all arguments must be specified in
6771    ARGS.  */
6772 
6773 static tree
coerce_template_parms(tree parms,tree args,tree in_decl,tsubst_flags_t complain,bool require_all_args,bool use_default_args)6774 coerce_template_parms (tree parms,
6775 		       tree args,
6776 		       tree in_decl,
6777 		       tsubst_flags_t complain,
6778 		       bool require_all_args,
6779 		       bool use_default_args)
6780 {
6781   int nparms, nargs, parm_idx, arg_idx, lost = 0;
6782   tree orig_inner_args;
6783   tree inner_args;
6784   tree new_args;
6785   tree new_inner_args;
6786   int saved_unevaluated_operand;
6787   int saved_inhibit_evaluation_warnings;
6788 
6789   /* When used as a boolean value, indicates whether this is a
6790      variadic template parameter list. Since it's an int, we can also
6791      subtract it from nparms to get the number of non-variadic
6792      parameters.  */
6793   int variadic_p = 0;
6794   int variadic_args_p = 0;
6795   int post_variadic_parms = 0;
6796 
6797   if (args == error_mark_node)
6798     return error_mark_node;
6799 
6800   nparms = TREE_VEC_LENGTH (parms);
6801 
6802   /* Determine if there are any parameter packs.  */
6803   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
6804     {
6805       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
6806       if (variadic_p)
6807 	++post_variadic_parms;
6808       if (template_parameter_pack_p (tparm))
6809 	++variadic_p;
6810     }
6811 
6812   inner_args = orig_inner_args = INNERMOST_TEMPLATE_ARGS (args);
6813   /* If there are no parameters that follow a parameter pack, we need to
6814      expand any argument packs so that we can deduce a parameter pack from
6815      some non-packed args followed by an argument pack, as in variadic85.C.
6816      If there are such parameters, we need to leave argument packs intact
6817      so the arguments are assigned properly.  This can happen when dealing
6818      with a nested class inside a partial specialization of a class
6819      template, as in variadic92.C, or when deducing a template parameter pack
6820      from a sub-declarator, as in variadic114.C.  */
6821   if (!post_variadic_parms)
6822     inner_args = expand_template_argument_pack (inner_args);
6823 
6824   /* Count any pack expansion args.  */
6825   variadic_args_p = pack_expansion_args_count (inner_args);
6826 
6827   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6828   if ((nargs > nparms && !variadic_p)
6829       || (nargs < nparms - variadic_p
6830 	  && require_all_args
6831 	  && !variadic_args_p
6832 	  && (!use_default_args
6833 	      || (TREE_VEC_ELT (parms, nargs) != error_mark_node
6834                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
6835     {
6836       if (complain & tf_error)
6837 	{
6838           if (variadic_p)
6839             {
6840               nparms -= variadic_p;
6841 	      error ("wrong number of template arguments "
6842 		     "(%d, should be %d or more)", nargs, nparms);
6843             }
6844 	  else
6845 	     error ("wrong number of template arguments "
6846 		    "(%d, should be %d)", nargs, nparms);
6847 
6848 	  if (in_decl)
6849 	    error ("provided for %q+D", in_decl);
6850 	}
6851 
6852       return error_mark_node;
6853     }
6854   /* We can't pass a pack expansion to a non-pack parameter of an alias
6855      template (DR 1430).  */
6856   else if (in_decl && DECL_ALIAS_TEMPLATE_P (in_decl)
6857 	   && variadic_args_p
6858 	   && nargs - variadic_args_p < nparms - variadic_p)
6859     {
6860       if (complain & tf_error)
6861 	{
6862 	  for (int i = 0; i < TREE_VEC_LENGTH (inner_args); ++i)
6863 	    {
6864 	      tree arg = TREE_VEC_ELT (inner_args, i);
6865 	      tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
6866 
6867 	      if (PACK_EXPANSION_P (arg)
6868 		  && !template_parameter_pack_p (parm))
6869 		{
6870 		  error ("pack expansion argument for non-pack parameter "
6871 			 "%qD of alias template %qD", parm, in_decl);
6872 		  inform (DECL_SOURCE_LOCATION (parm), "declared here");
6873 		  goto found;
6874 		}
6875 	    }
6876 	  gcc_unreachable ();
6877 	found:;
6878 	}
6879       return error_mark_node;
6880     }
6881 
6882   /* We need to evaluate the template arguments, even though this
6883      template-id may be nested within a "sizeof".  */
6884   saved_unevaluated_operand = cp_unevaluated_operand;
6885   cp_unevaluated_operand = 0;
6886   saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
6887   c_inhibit_evaluation_warnings = 0;
6888   new_inner_args = make_tree_vec (nparms);
6889   new_args = add_outermost_template_args (args, new_inner_args);
6890   int pack_adjust = 0;
6891   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
6892     {
6893       tree arg;
6894       tree parm;
6895 
6896       /* Get the Ith template parameter.  */
6897       parm = TREE_VEC_ELT (parms, parm_idx);
6898 
6899       if (parm == error_mark_node)
6900       {
6901         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
6902         continue;
6903       }
6904 
6905       /* Calculate the next argument.  */
6906       if (arg_idx < nargs)
6907 	arg = TREE_VEC_ELT (inner_args, arg_idx);
6908       else
6909 	arg = NULL_TREE;
6910 
6911       if (template_parameter_pack_p (TREE_VALUE (parm))
6912 	  && !(arg && ARGUMENT_PACK_P (arg)))
6913         {
6914 	  /* Some arguments will be placed in the
6915 	     template parameter pack PARM.  */
6916 	  arg = coerce_template_parameter_pack (parms, parm_idx, args,
6917 						inner_args, arg_idx,
6918 						new_args, &lost,
6919 						in_decl, complain);
6920 
6921 	  if (arg == NULL_TREE)
6922 	    {
6923 	      /* We don't know how many args we have yet, just use the
6924 		 unconverted (and still packed) ones for now.  */
6925 	      new_inner_args = orig_inner_args;
6926 	      arg_idx = nargs;
6927 	      break;
6928 	    }
6929 
6930           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
6931 
6932           /* Store this argument.  */
6933           if (arg == error_mark_node)
6934 	    {
6935 	      lost++;
6936 	      /* We are done with all of the arguments.  */
6937 	      arg_idx = nargs;
6938 	    }
6939 	  else
6940 	    {
6941 	      pack_adjust = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg)) - 1;
6942 	      arg_idx += pack_adjust;
6943 	    }
6944 
6945           continue;
6946         }
6947       else if (arg)
6948 	{
6949           if (PACK_EXPANSION_P (arg))
6950             {
6951 	      /* "If every valid specialization of a variadic template
6952 		 requires an empty template parameter pack, the template is
6953 		 ill-formed, no diagnostic required."  So check that the
6954 		 pattern works with this parameter.  */
6955 	      tree pattern = PACK_EXPANSION_PATTERN (arg);
6956 	      tree conv = convert_template_argument (TREE_VALUE (parm),
6957 						     pattern, new_args,
6958 						     complain, parm_idx,
6959 						     in_decl);
6960 	      if (conv == error_mark_node)
6961 		{
6962 		  inform (input_location, "so any instantiation with a "
6963 			 "non-empty parameter pack would be ill-formed");
6964 		  ++lost;
6965 		}
6966 	      else if (TYPE_P (conv) && !TYPE_P (pattern))
6967 		/* Recover from missing typename.  */
6968 		TREE_VEC_ELT (inner_args, arg_idx)
6969 		  = make_pack_expansion (conv);
6970 
6971               /* We don't know how many args we have yet, just
6972                  use the unconverted ones for now.  */
6973               new_inner_args = inner_args;
6974 	      arg_idx = nargs;
6975               break;
6976             }
6977         }
6978       else if (require_all_args)
6979 	{
6980 	  /* There must be a default arg in this case.  */
6981 	  arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
6982 				     complain, in_decl);
6983 	  /* The position of the first default template argument,
6984 	     is also the number of non-defaulted arguments in NEW_INNER_ARGS.
6985 	     Record that.  */
6986 	  if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6987 	    SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
6988 						 arg_idx - pack_adjust);
6989 	}
6990       else
6991 	break;
6992 
6993       if (arg == error_mark_node)
6994 	{
6995 	  if (complain & tf_error)
6996 	    error ("template argument %d is invalid", arg_idx + 1);
6997 	}
6998       else if (!arg)
6999         /* This only occurs if there was an error in the template
7000            parameter list itself (which we would already have
7001            reported) that we are trying to recover from, e.g., a class
7002            template with a parameter list such as
7003            template<typename..., typename>.  */
7004 	++lost;
7005       else
7006 	arg = convert_template_argument (TREE_VALUE (parm),
7007 					 arg, new_args, complain,
7008                                          parm_idx, in_decl);
7009 
7010       if (arg == error_mark_node)
7011 	lost++;
7012       TREE_VEC_ELT (new_inner_args, arg_idx - pack_adjust) = arg;
7013     }
7014   cp_unevaluated_operand = saved_unevaluated_operand;
7015   c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
7016 
7017   if (variadic_p && arg_idx < nargs)
7018     {
7019       if (complain & tf_error)
7020 	{
7021 	  error ("wrong number of template arguments "
7022 		 "(%d, should be %d)", nargs, arg_idx);
7023 	  if (in_decl)
7024 	    error ("provided for %q+D", in_decl);
7025 	}
7026       return error_mark_node;
7027     }
7028 
7029   if (lost)
7030     return error_mark_node;
7031 
7032 #ifdef ENABLE_CHECKING
7033   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
7034     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
7035 					 TREE_VEC_LENGTH (new_inner_args));
7036 #endif
7037 
7038   return new_inner_args;
7039 }
7040 
7041 /* Like coerce_template_parms.  If PARMS represents all template
7042    parameters levels, this function returns a vector of vectors
7043    representing all the resulting argument levels.  Note that in this
7044    case, only the innermost arguments are coerced because the
7045    outermost ones are supposed to have been coerced already.
7046 
7047    Otherwise, if PARMS represents only (the innermost) vector of
7048    parameters, this function returns a vector containing just the
7049    innermost resulting arguments.  */
7050 
7051 static tree
coerce_innermost_template_parms(tree parms,tree args,tree in_decl,tsubst_flags_t complain,bool require_all_args,bool use_default_args)7052 coerce_innermost_template_parms (tree parms,
7053 				  tree args,
7054 				  tree in_decl,
7055 				  tsubst_flags_t complain,
7056 				  bool require_all_args,
7057 				  bool use_default_args)
7058 {
7059   int parms_depth = TMPL_PARMS_DEPTH (parms);
7060   int args_depth = TMPL_ARGS_DEPTH (args);
7061   tree coerced_args;
7062 
7063   if (parms_depth > 1)
7064     {
7065       coerced_args = make_tree_vec (parms_depth);
7066       tree level;
7067       int cur_depth;
7068 
7069       for (level = parms, cur_depth = parms_depth;
7070 	   parms_depth > 0 && level != NULL_TREE;
7071 	   level = TREE_CHAIN (level), --cur_depth)
7072 	{
7073 	  tree l;
7074 	  if (cur_depth == args_depth)
7075 	    l = coerce_template_parms (TREE_VALUE (level),
7076 				       args, in_decl, complain,
7077 				       require_all_args,
7078 				       use_default_args);
7079 	  else
7080 	    l = TMPL_ARGS_LEVEL (args, cur_depth);
7081 
7082 	  if (l == error_mark_node)
7083 	    return error_mark_node;
7084 
7085 	  SET_TMPL_ARGS_LEVEL (coerced_args, cur_depth, l);
7086 	}
7087     }
7088   else
7089     coerced_args = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parms),
7090 					  args, in_decl, complain,
7091 					  require_all_args,
7092 					  use_default_args);
7093   return coerced_args;
7094 }
7095 
7096 /* Returns 1 if template args OT and NT are equivalent.  */
7097 
7098 static int
template_args_equal(tree ot,tree nt)7099 template_args_equal (tree ot, tree nt)
7100 {
7101   if (nt == ot)
7102     return 1;
7103   if (nt == NULL_TREE || ot == NULL_TREE)
7104     return false;
7105 
7106   if (TREE_CODE (nt) == TREE_VEC)
7107     /* For member templates */
7108     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
7109   else if (PACK_EXPANSION_P (ot))
7110     return (PACK_EXPANSION_P (nt)
7111 	    && template_args_equal (PACK_EXPANSION_PATTERN (ot),
7112 				    PACK_EXPANSION_PATTERN (nt))
7113 	    && template_args_equal (PACK_EXPANSION_EXTRA_ARGS (ot),
7114 				    PACK_EXPANSION_EXTRA_ARGS (nt)));
7115   else if (ARGUMENT_PACK_P (ot))
7116     {
7117       int i, len;
7118       tree opack, npack;
7119 
7120       if (!ARGUMENT_PACK_P (nt))
7121 	return 0;
7122 
7123       opack = ARGUMENT_PACK_ARGS (ot);
7124       npack = ARGUMENT_PACK_ARGS (nt);
7125       len = TREE_VEC_LENGTH (opack);
7126       if (TREE_VEC_LENGTH (npack) != len)
7127 	return 0;
7128       for (i = 0; i < len; ++i)
7129 	if (!template_args_equal (TREE_VEC_ELT (opack, i),
7130 				  TREE_VEC_ELT (npack, i)))
7131 	  return 0;
7132       return 1;
7133     }
7134   else if (ot && TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
7135     {
7136       /* We get here probably because we are in the middle of substituting
7137          into the pattern of a pack expansion. In that case the
7138 	 ARGUMENT_PACK_SELECT temporarily replaces the pack argument we are
7139 	 interested in. So we want to use the initial pack argument for
7140 	 the comparison.  */
7141       ot = ARGUMENT_PACK_SELECT_FROM_PACK (ot);
7142       if (nt && TREE_CODE (nt) == ARGUMENT_PACK_SELECT)
7143 	nt = ARGUMENT_PACK_SELECT_FROM_PACK (nt);
7144       return template_args_equal (ot, nt);
7145     }
7146   else if (TYPE_P (nt))
7147     return TYPE_P (ot) && same_type_p (ot, nt);
7148   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
7149     return 0;
7150   else
7151     return cp_tree_equal (ot, nt);
7152 }
7153 
7154 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets of
7155    template arguments.  Returns 0 otherwise, and updates OLDARG_PTR and
7156    NEWARG_PTR with the offending arguments if they are non-NULL.  */
7157 
7158 static int
comp_template_args_with_info(tree oldargs,tree newargs,tree * oldarg_ptr,tree * newarg_ptr)7159 comp_template_args_with_info (tree oldargs, tree newargs,
7160 			      tree *oldarg_ptr, tree *newarg_ptr)
7161 {
7162   int i;
7163 
7164   if (oldargs == newargs)
7165     return 1;
7166 
7167   if (!oldargs || !newargs)
7168     return 0;
7169 
7170   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
7171     return 0;
7172 
7173   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
7174     {
7175       tree nt = TREE_VEC_ELT (newargs, i);
7176       tree ot = TREE_VEC_ELT (oldargs, i);
7177 
7178       if (! template_args_equal (ot, nt))
7179 	{
7180 	  if (oldarg_ptr != NULL)
7181 	    *oldarg_ptr = ot;
7182 	  if (newarg_ptr != NULL)
7183 	    *newarg_ptr = nt;
7184 	  return 0;
7185 	}
7186     }
7187   return 1;
7188 }
7189 
7190 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
7191    of template arguments.  Returns 0 otherwise.  */
7192 
7193 int
comp_template_args(tree oldargs,tree newargs)7194 comp_template_args (tree oldargs, tree newargs)
7195 {
7196   return comp_template_args_with_info (oldargs, newargs, NULL, NULL);
7197 }
7198 
7199 static void
add_pending_template(tree d)7200 add_pending_template (tree d)
7201 {
7202   tree ti = (TYPE_P (d)
7203 	     ? CLASSTYPE_TEMPLATE_INFO (d)
7204 	     : DECL_TEMPLATE_INFO (d));
7205   struct pending_template *pt;
7206   int level;
7207 
7208   if (TI_PENDING_TEMPLATE_FLAG (ti))
7209     return;
7210 
7211   /* We are called both from instantiate_decl, where we've already had a
7212      tinst_level pushed, and instantiate_template, where we haven't.
7213      Compensate.  */
7214   level = !current_tinst_level || current_tinst_level->decl != d;
7215 
7216   if (level)
7217     push_tinst_level (d);
7218 
7219   pt = ggc_alloc_pending_template ();
7220   pt->next = NULL;
7221   pt->tinst = current_tinst_level;
7222   if (last_pending_template)
7223     last_pending_template->next = pt;
7224   else
7225     pending_templates = pt;
7226 
7227   last_pending_template = pt;
7228 
7229   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
7230 
7231   if (level)
7232     pop_tinst_level ();
7233 }
7234 
7235 
7236 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
7237    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
7238    documentation for TEMPLATE_ID_EXPR.  */
7239 
7240 tree
lookup_template_function(tree fns,tree arglist)7241 lookup_template_function (tree fns, tree arglist)
7242 {
7243   tree type;
7244 
7245   if (fns == error_mark_node || arglist == error_mark_node)
7246     return error_mark_node;
7247 
7248   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
7249 
7250   if (!is_overloaded_fn (fns) && !identifier_p (fns))
7251     {
7252       error ("%q#D is not a function template", fns);
7253       return error_mark_node;
7254     }
7255 
7256   if (BASELINK_P (fns))
7257     {
7258       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
7259 					 unknown_type_node,
7260 					 BASELINK_FUNCTIONS (fns),
7261 					 arglist);
7262       return fns;
7263     }
7264 
7265   type = TREE_TYPE (fns);
7266   if (TREE_CODE (fns) == OVERLOAD || !type)
7267     type = unknown_type_node;
7268 
7269   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
7270 }
7271 
7272 /* Within the scope of a template class S<T>, the name S gets bound
7273    (in build_self_reference) to a TYPE_DECL for the class, not a
7274    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
7275    or one of its enclosing classes, and that type is a template,
7276    return the associated TEMPLATE_DECL.  Otherwise, the original
7277    DECL is returned.
7278 
7279    Also handle the case when DECL is a TREE_LIST of ambiguous
7280    injected-class-names from different bases.  */
7281 
7282 tree
maybe_get_template_decl_from_type_decl(tree decl)7283 maybe_get_template_decl_from_type_decl (tree decl)
7284 {
7285   if (decl == NULL_TREE)
7286     return decl;
7287 
7288   /* DR 176: A lookup that finds an injected-class-name (10.2
7289      [class.member.lookup]) can result in an ambiguity in certain cases
7290      (for example, if it is found in more than one base class). If all of
7291      the injected-class-names that are found refer to specializations of
7292      the same class template, and if the name is followed by a
7293      template-argument-list, the reference refers to the class template
7294      itself and not a specialization thereof, and is not ambiguous.  */
7295   if (TREE_CODE (decl) == TREE_LIST)
7296     {
7297       tree t, tmpl = NULL_TREE;
7298       for (t = decl; t; t = TREE_CHAIN (t))
7299 	{
7300 	  tree elt = maybe_get_template_decl_from_type_decl (TREE_VALUE (t));
7301 	  if (!tmpl)
7302 	    tmpl = elt;
7303 	  else if (tmpl != elt)
7304 	    break;
7305 	}
7306       if (tmpl && t == NULL_TREE)
7307 	return tmpl;
7308       else
7309 	return decl;
7310     }
7311 
7312   return (decl != NULL_TREE
7313 	  && DECL_SELF_REFERENCE_P (decl)
7314 	  && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
7315     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
7316 }
7317 
7318 /* Given an IDENTIFIER_NODE (or type TEMPLATE_DECL) and a chain of
7319    parameters, find the desired type.
7320 
7321    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
7322 
7323    IN_DECL, if non-NULL, is the template declaration we are trying to
7324    instantiate.
7325 
7326    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
7327    the class we are looking up.
7328 
7329    Issue error and warning messages under control of COMPLAIN.
7330 
7331    If the template class is really a local class in a template
7332    function, then the FUNCTION_CONTEXT is the function in which it is
7333    being instantiated.
7334 
7335    ??? Note that this function is currently called *twice* for each
7336    template-id: the first time from the parser, while creating the
7337    incomplete type (finish_template_type), and the second type during the
7338    real instantiation (instantiate_template_class). This is surely something
7339    that we want to avoid. It also causes some problems with argument
7340    coercion (see convert_nontype_argument for more information on this).  */
7341 
7342 static tree
lookup_template_class_1(tree d1,tree arglist,tree in_decl,tree context,int entering_scope,tsubst_flags_t complain)7343 lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
7344 			 int entering_scope, tsubst_flags_t complain)
7345 {
7346   tree templ = NULL_TREE, parmlist;
7347   tree t;
7348   void **slot;
7349   spec_entry *entry;
7350   spec_entry elt;
7351   hashval_t hash;
7352 
7353   if (identifier_p (d1))
7354     {
7355       tree value = innermost_non_namespace_value (d1);
7356       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
7357 	templ = value;
7358       else
7359 	{
7360 	  if (context)
7361 	    push_decl_namespace (context);
7362 	  templ = lookup_name (d1);
7363 	  templ = maybe_get_template_decl_from_type_decl (templ);
7364 	  if (context)
7365 	    pop_decl_namespace ();
7366 	}
7367       if (templ)
7368 	context = DECL_CONTEXT (templ);
7369     }
7370   else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
7371     {
7372       tree type = TREE_TYPE (d1);
7373 
7374       /* If we are declaring a constructor, say A<T>::A<T>, we will get
7375 	 an implicit typename for the second A.  Deal with it.  */
7376       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
7377 	type = TREE_TYPE (type);
7378 
7379       if (CLASSTYPE_TEMPLATE_INFO (type))
7380 	{
7381 	  templ = CLASSTYPE_TI_TEMPLATE (type);
7382 	  d1 = DECL_NAME (templ);
7383 	}
7384     }
7385   else if (TREE_CODE (d1) == ENUMERAL_TYPE
7386 	   || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
7387     {
7388       templ = TYPE_TI_TEMPLATE (d1);
7389       d1 = DECL_NAME (templ);
7390     }
7391   else if (TREE_CODE (d1) == TEMPLATE_DECL
7392            && DECL_TEMPLATE_RESULT (d1)
7393 	   && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
7394     {
7395       templ = d1;
7396       d1 = DECL_NAME (templ);
7397       context = DECL_CONTEXT (templ);
7398     }
7399   else if (DECL_TEMPLATE_TEMPLATE_PARM_P (d1))
7400     {
7401       templ = d1;
7402       d1 = DECL_NAME (templ);
7403     }
7404 
7405   /* Issue an error message if we didn't find a template.  */
7406   if (! templ)
7407     {
7408       if (complain & tf_error)
7409 	error ("%qT is not a template", d1);
7410       return error_mark_node;
7411     }
7412 
7413   if (TREE_CODE (templ) != TEMPLATE_DECL
7414 	 /* Make sure it's a user visible template, if it was named by
7415 	    the user.  */
7416       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
7417 	  && !PRIMARY_TEMPLATE_P (templ)))
7418     {
7419       if (complain & tf_error)
7420 	{
7421 	  error ("non-template type %qT used as a template", d1);
7422 	  if (in_decl)
7423 	    error ("for template declaration %q+D", in_decl);
7424 	}
7425       return error_mark_node;
7426     }
7427 
7428   complain &= ~tf_user;
7429 
7430   /* An alias that just changes the name of a template is equivalent to the
7431      other template, so if any of the arguments are pack expansions, strip
7432      the alias to avoid problems with a pack expansion passed to a non-pack
7433      alias template parameter (DR 1430).  */
7434   if (pack_expansion_args_count (INNERMOST_TEMPLATE_ARGS (arglist)))
7435     templ = get_underlying_template (templ);
7436 
7437   if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
7438     {
7439       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
7440 	 template arguments */
7441 
7442       tree parm;
7443       tree arglist2;
7444       tree outer;
7445 
7446       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
7447 
7448       /* Consider an example where a template template parameter declared as
7449 
7450 	   template <class T, class U = std::allocator<T> > class TT
7451 
7452 	 The template parameter level of T and U are one level larger than
7453 	 of TT.  To proper process the default argument of U, say when an
7454 	 instantiation `TT<int>' is seen, we need to build the full
7455 	 arguments containing {int} as the innermost level.  Outer levels,
7456 	 available when not appearing as default template argument, can be
7457 	 obtained from the arguments of the enclosing template.
7458 
7459 	 Suppose that TT is later substituted with std::vector.  The above
7460 	 instantiation is `TT<int, std::allocator<T> >' with TT at
7461 	 level 1, and T at level 2, while the template arguments at level 1
7462 	 becomes {std::vector} and the inner level 2 is {int}.  */
7463 
7464       outer = DECL_CONTEXT (templ);
7465       if (outer)
7466 	outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
7467       else if (current_template_parms)
7468 	/* This is an argument of the current template, so we haven't set
7469 	   DECL_CONTEXT yet.  */
7470 	outer = current_template_args ();
7471 
7472       if (outer)
7473 	arglist = add_to_template_args (outer, arglist);
7474 
7475       arglist2 = coerce_template_parms (parmlist, arglist, templ,
7476 					complain,
7477 					/*require_all_args=*/true,
7478 					/*use_default_args=*/true);
7479       if (arglist2 == error_mark_node
7480 	  || (!uses_template_parms (arglist2)
7481 	      && check_instantiated_args (templ, arglist2, complain)))
7482 	return error_mark_node;
7483 
7484       parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
7485       return parm;
7486     }
7487   else
7488     {
7489       tree template_type = TREE_TYPE (templ);
7490       tree gen_tmpl;
7491       tree type_decl;
7492       tree found = NULL_TREE;
7493       int arg_depth;
7494       int parm_depth;
7495       int is_dependent_type;
7496       int use_partial_inst_tmpl = false;
7497 
7498       if (template_type == error_mark_node)
7499 	/* An error occurred while building the template TEMPL, and a
7500 	   diagnostic has most certainly been emitted for that
7501 	   already.  Let's propagate that error.  */
7502 	return error_mark_node;
7503 
7504       gen_tmpl = most_general_template (templ);
7505       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
7506       parm_depth = TMPL_PARMS_DEPTH (parmlist);
7507       arg_depth = TMPL_ARGS_DEPTH (arglist);
7508 
7509       if (arg_depth == 1 && parm_depth > 1)
7510 	{
7511 	  /* We've been given an incomplete set of template arguments.
7512 	     For example, given:
7513 
7514 	       template <class T> struct S1 {
7515 		 template <class U> struct S2 {};
7516 		 template <class U> struct S2<U*> {};
7517 		};
7518 
7519 	     we will be called with an ARGLIST of `U*', but the
7520 	     TEMPLATE will be `template <class T> template
7521 	     <class U> struct S1<T>::S2'.  We must fill in the missing
7522 	     arguments.  */
7523 	  arglist
7524 	    = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
7525 					   arglist);
7526 	  arg_depth = TMPL_ARGS_DEPTH (arglist);
7527 	}
7528 
7529       /* Now we should have enough arguments.  */
7530       gcc_assert (parm_depth == arg_depth);
7531 
7532       /* From here on, we're only interested in the most general
7533 	 template.  */
7534 
7535       /* Calculate the BOUND_ARGS.  These will be the args that are
7536 	 actually tsubst'd into the definition to create the
7537 	 instantiation.  */
7538       if (parm_depth > 1)
7539 	{
7540 	  /* We have multiple levels of arguments to coerce, at once.  */
7541 	  int i;
7542 	  int saved_depth = TMPL_ARGS_DEPTH (arglist);
7543 
7544 	  tree bound_args = make_tree_vec (parm_depth);
7545 
7546 	  for (i = saved_depth,
7547 		 t = DECL_TEMPLATE_PARMS (gen_tmpl);
7548 	       i > 0 && t != NULL_TREE;
7549 	       --i, t = TREE_CHAIN (t))
7550 	    {
7551 	      tree a;
7552 	      if (i == saved_depth)
7553 		a = coerce_template_parms (TREE_VALUE (t),
7554 					   arglist, gen_tmpl,
7555 					   complain,
7556 					   /*require_all_args=*/true,
7557 					   /*use_default_args=*/true);
7558 	      else
7559 		/* Outer levels should have already been coerced.  */
7560 		a = TMPL_ARGS_LEVEL (arglist, i);
7561 
7562 	      /* Don't process further if one of the levels fails.  */
7563 	      if (a == error_mark_node)
7564 		{
7565 		  /* Restore the ARGLIST to its full size.  */
7566 		  TREE_VEC_LENGTH (arglist) = saved_depth;
7567 		  return error_mark_node;
7568 		}
7569 
7570 	      SET_TMPL_ARGS_LEVEL (bound_args, i, a);
7571 
7572 	      /* We temporarily reduce the length of the ARGLIST so
7573 		 that coerce_template_parms will see only the arguments
7574 		 corresponding to the template parameters it is
7575 		 examining.  */
7576 	      TREE_VEC_LENGTH (arglist)--;
7577 	    }
7578 
7579 	  /* Restore the ARGLIST to its full size.  */
7580 	  TREE_VEC_LENGTH (arglist) = saved_depth;
7581 
7582 	  arglist = bound_args;
7583 	}
7584       else
7585 	arglist
7586 	  = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
7587 				   INNERMOST_TEMPLATE_ARGS (arglist),
7588 				   gen_tmpl,
7589 				   complain,
7590 				   /*require_all_args=*/true,
7591 				   /*use_default_args=*/true);
7592 
7593       if (arglist == error_mark_node)
7594 	/* We were unable to bind the arguments.  */
7595 	return error_mark_node;
7596 
7597       /* In the scope of a template class, explicit references to the
7598 	 template class refer to the type of the template, not any
7599 	 instantiation of it.  For example, in:
7600 
7601 	   template <class T> class C { void f(C<T>); }
7602 
7603 	 the `C<T>' is just the same as `C'.  Outside of the
7604 	 class, however, such a reference is an instantiation.  */
7605       if ((entering_scope
7606 	   || !PRIMARY_TEMPLATE_P (gen_tmpl)
7607 	   || currently_open_class (template_type))
7608 	  /* comp_template_args is expensive, check it last.  */
7609 	  && comp_template_args (TYPE_TI_ARGS (template_type),
7610 				 arglist))
7611 	return template_type;
7612 
7613       /* If we already have this specialization, return it.  */
7614       elt.tmpl = gen_tmpl;
7615       elt.args = arglist;
7616       hash = hash_specialization (&elt);
7617       entry = (spec_entry *) htab_find_with_hash (type_specializations,
7618 						  &elt, hash);
7619 
7620       if (entry)
7621 	return entry->spec;
7622 
7623       is_dependent_type = uses_template_parms (arglist);
7624 
7625       /* If the deduced arguments are invalid, then the binding
7626 	 failed.  */
7627       if (!is_dependent_type
7628 	  && check_instantiated_args (gen_tmpl,
7629 				      INNERMOST_TEMPLATE_ARGS (arglist),
7630 				      complain))
7631 	return error_mark_node;
7632 
7633       if (!is_dependent_type
7634 	  && !PRIMARY_TEMPLATE_P (gen_tmpl)
7635 	  && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
7636 	  && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
7637 	{
7638 	  found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
7639 				      DECL_NAME (gen_tmpl),
7640 				      /*tag_scope=*/ts_global);
7641 	  return found;
7642 	}
7643 
7644       context = tsubst (DECL_CONTEXT (gen_tmpl), arglist,
7645 			complain, in_decl);
7646       if (context == error_mark_node)
7647 	return error_mark_node;
7648 
7649       if (!context)
7650 	context = global_namespace;
7651 
7652       /* Create the type.  */
7653       if (DECL_ALIAS_TEMPLATE_P (gen_tmpl))
7654 	{
7655 	  /* The user referred to a specialization of an alias
7656 	    template represented by GEN_TMPL.
7657 
7658 	    [temp.alias]/2 says:
7659 
7660 	        When a template-id refers to the specialization of an
7661 		alias template, it is equivalent to the associated
7662 		type obtained by substitution of its
7663 		template-arguments for the template-parameters in the
7664 		type-id of the alias template.  */
7665 
7666 	  t = tsubst (TREE_TYPE (gen_tmpl), arglist, complain, in_decl);
7667 	  /* Note that the call above (by indirectly calling
7668 	     register_specialization in tsubst_decl) registers the
7669 	     TYPE_DECL representing the specialization of the alias
7670 	     template.  So next time someone substitutes ARGLIST for
7671 	     the template parms into the alias template (GEN_TMPL),
7672 	     she'll get that TYPE_DECL back.  */
7673 
7674 	  if (t == error_mark_node)
7675 	    return t;
7676 	}
7677       else if (TREE_CODE (template_type) == ENUMERAL_TYPE)
7678 	{
7679 	  if (!is_dependent_type)
7680 	    {
7681 	      set_current_access_from_decl (TYPE_NAME (template_type));
7682 	      t = start_enum (TYPE_IDENTIFIER (template_type), NULL_TREE,
7683 			      tsubst (ENUM_UNDERLYING_TYPE (template_type),
7684 				      arglist, complain, in_decl),
7685 			      SCOPED_ENUM_P (template_type), NULL);
7686 
7687 	      if (t == error_mark_node)
7688 		return t;
7689 	    }
7690 	  else
7691             {
7692               /* We don't want to call start_enum for this type, since
7693                  the values for the enumeration constants may involve
7694                  template parameters.  And, no one should be interested
7695                  in the enumeration constants for such a type.  */
7696               t = cxx_make_type (ENUMERAL_TYPE);
7697               SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
7698             }
7699           SET_OPAQUE_ENUM_P (t, OPAQUE_ENUM_P (template_type));
7700 	  ENUM_FIXED_UNDERLYING_TYPE_P (t)
7701 	    = ENUM_FIXED_UNDERLYING_TYPE_P (template_type);
7702 	}
7703       else if (CLASS_TYPE_P (template_type))
7704 	{
7705 	  t = make_class_type (TREE_CODE (template_type));
7706 	  CLASSTYPE_DECLARED_CLASS (t)
7707 	    = CLASSTYPE_DECLARED_CLASS (template_type);
7708 	  SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
7709 	  TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
7710 
7711 	  /* A local class.  Make sure the decl gets registered properly.  */
7712 	  if (context == current_function_decl)
7713 	    pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current);
7714 
7715 	  if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
7716 	    /* This instantiation is another name for the primary
7717 	       template type. Set the TYPE_CANONICAL field
7718 	       appropriately. */
7719 	    TYPE_CANONICAL (t) = template_type;
7720 	  else if (any_template_arguments_need_structural_equality_p (arglist))
7721 	    /* Some of the template arguments require structural
7722 	       equality testing, so this template class requires
7723 	       structural equality testing. */
7724 	    SET_TYPE_STRUCTURAL_EQUALITY (t);
7725 	}
7726       else
7727 	gcc_unreachable ();
7728 
7729       /* If we called start_enum or pushtag above, this information
7730 	 will already be set up.  */
7731       if (!TYPE_NAME (t))
7732 	{
7733 	  TYPE_CONTEXT (t) = FROB_CONTEXT (context);
7734 
7735 	  type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
7736 	  DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
7737 	  DECL_SOURCE_LOCATION (type_decl)
7738 	    = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
7739 	}
7740       else
7741 	type_decl = TYPE_NAME (t);
7742 
7743       if (CLASS_TYPE_P (template_type))
7744 	{
7745 	  TREE_PRIVATE (type_decl)
7746 	    = TREE_PRIVATE (TYPE_MAIN_DECL (template_type));
7747 	  TREE_PROTECTED (type_decl)
7748 	    = TREE_PROTECTED (TYPE_MAIN_DECL (template_type));
7749 	  if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
7750 	    {
7751 	      DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
7752 	      DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
7753 	    }
7754 	}
7755 
7756       /* Let's consider the explicit specialization of a member
7757          of a class template specialization that is implicitly instantiated,
7758 	 e.g.:
7759 	     template<class T>
7760 	     struct S
7761 	     {
7762 	       template<class U> struct M {}; //#0
7763 	     };
7764 
7765 	     template<>
7766 	     template<>
7767 	     struct S<int>::M<char> //#1
7768 	     {
7769 	       int i;
7770 	     };
7771 	[temp.expl.spec]/4 says this is valid.
7772 
7773 	In this case, when we write:
7774 	S<int>::M<char> m;
7775 
7776 	M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
7777 	the one of #0.
7778 
7779 	When we encounter #1, we want to store the partial instantiation
7780 	of M (template<class T> S<int>::M<T>) in its CLASSTYPE_TI_TEMPLATE.
7781 
7782 	For all cases other than this "explicit specialization of member of a
7783 	class template", we just want to store the most general template into
7784 	the CLASSTYPE_TI_TEMPLATE of M.
7785 
7786 	This case of "explicit specialization of member of a class template"
7787 	only happens when:
7788 	1/ the enclosing class is an instantiation of, and therefore not
7789 	the same as, the context of the most general template, and
7790 	2/ we aren't looking at the partial instantiation itself, i.e.
7791 	the innermost arguments are not the same as the innermost parms of
7792 	the most general template.
7793 
7794 	So it's only when 1/ and 2/ happens that we want to use the partial
7795 	instantiation of the member template in lieu of its most general
7796 	template.  */
7797 
7798       if (PRIMARY_TEMPLATE_P (gen_tmpl)
7799 	  && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
7800 	  /* the enclosing class must be an instantiation...  */
7801 	  && CLASS_TYPE_P (context)
7802 	  && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
7803 	{
7804 	  tree partial_inst_args;
7805 	  TREE_VEC_LENGTH (arglist)--;
7806 	  ++processing_template_decl;
7807 	  partial_inst_args =
7808 	    tsubst (INNERMOST_TEMPLATE_ARGS
7809 			(TYPE_TI_ARGS (TREE_TYPE (gen_tmpl))),
7810 		    arglist, complain, NULL_TREE);
7811 	  --processing_template_decl;
7812 	  TREE_VEC_LENGTH (arglist)++;
7813 	  use_partial_inst_tmpl =
7814 	    /*...and we must not be looking at the partial instantiation
7815 	     itself. */
7816 	    !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
7817 				 partial_inst_args);
7818 	}
7819 
7820       if (!use_partial_inst_tmpl)
7821 	/* This case is easy; there are no member templates involved.  */
7822 	found = gen_tmpl;
7823       else
7824 	{
7825 	  /* This is a full instantiation of a member template.  Find
7826 	     the partial instantiation of which this is an instance.  */
7827 
7828 	  /* Temporarily reduce by one the number of levels in the ARGLIST
7829 	     so as to avoid comparing the last set of arguments.  */
7830 	  TREE_VEC_LENGTH (arglist)--;
7831 	  found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
7832 	  TREE_VEC_LENGTH (arglist)++;
7833 	  /* FOUND is either a proper class type, or an alias
7834 	     template specialization.  In the later case, it's a
7835 	     TYPE_DECL, resulting from the substituting of arguments
7836 	     for parameters in the TYPE_DECL of the alias template
7837 	     done earlier.  So be careful while getting the template
7838 	     of FOUND.  */
7839 	  found = TREE_CODE (found) == TYPE_DECL
7840 	    ? TYPE_TI_TEMPLATE (TREE_TYPE (found))
7841 	    : CLASSTYPE_TI_TEMPLATE (found);
7842 	}
7843 
7844       SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
7845 
7846       elt.spec = t;
7847       slot = htab_find_slot_with_hash (type_specializations,
7848 				       &elt, hash, INSERT);
7849       entry = ggc_alloc_spec_entry ();
7850       *entry = elt;
7851       *slot = entry;
7852 
7853       /* Note this use of the partial instantiation so we can check it
7854 	 later in maybe_process_partial_specialization.  */
7855       DECL_TEMPLATE_INSTANTIATIONS (found)
7856 	= tree_cons (arglist, t,
7857 		     DECL_TEMPLATE_INSTANTIATIONS (found));
7858 
7859       if (TREE_CODE (template_type) == ENUMERAL_TYPE && !is_dependent_type
7860 	  && !DECL_ALIAS_TEMPLATE_P (gen_tmpl))
7861 	/* Now that the type has been registered on the instantiations
7862 	   list, we set up the enumerators.  Because the enumeration
7863 	   constants may involve the enumeration type itself, we make
7864 	   sure to register the type first, and then create the
7865 	   constants.  That way, doing tsubst_expr for the enumeration
7866 	   constants won't result in recursive calls here; we'll find
7867 	   the instantiation and exit above.  */
7868 	tsubst_enum (template_type, t, arglist);
7869 
7870       if (CLASS_TYPE_P (template_type) && is_dependent_type)
7871 	/* If the type makes use of template parameters, the
7872 	   code that generates debugging information will crash.  */
7873 	DECL_IGNORED_P (TYPE_MAIN_DECL (t)) = 1;
7874 
7875       /* Possibly limit visibility based on template args.  */
7876       TREE_PUBLIC (type_decl) = 1;
7877       determine_visibility (type_decl);
7878 
7879       return t;
7880     }
7881 }
7882 
7883 /* Wrapper for lookup_template_class_1.  */
7884 
7885 tree
lookup_template_class(tree d1,tree arglist,tree in_decl,tree context,int entering_scope,tsubst_flags_t complain)7886 lookup_template_class (tree d1, tree arglist, tree in_decl, tree context,
7887                        int entering_scope, tsubst_flags_t complain)
7888 {
7889   tree ret;
7890   timevar_push (TV_TEMPLATE_INST);
7891   ret = lookup_template_class_1 (d1, arglist, in_decl, context,
7892                                  entering_scope, complain);
7893   timevar_pop (TV_TEMPLATE_INST);
7894   return ret;
7895 }
7896 
7897 struct pair_fn_data
7898 {
7899   tree_fn_t fn;
7900   void *data;
7901   /* True when we should also visit template parameters that occur in
7902      non-deduced contexts.  */
7903   bool include_nondeduced_p;
7904   struct pointer_set_t *visited;
7905 };
7906 
7907 /* Called from for_each_template_parm via walk_tree.  */
7908 
7909 static tree
for_each_template_parm_r(tree * tp,int * walk_subtrees,void * d)7910 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
7911 {
7912   tree t = *tp;
7913   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
7914   tree_fn_t fn = pfd->fn;
7915   void *data = pfd->data;
7916 
7917   if (TYPE_P (t)
7918       && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
7919       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
7920 				 pfd->include_nondeduced_p))
7921     return error_mark_node;
7922 
7923   switch (TREE_CODE (t))
7924     {
7925     case RECORD_TYPE:
7926       if (TYPE_PTRMEMFUNC_P (t))
7927 	break;
7928       /* Fall through.  */
7929 
7930     case UNION_TYPE:
7931     case ENUMERAL_TYPE:
7932       if (!TYPE_TEMPLATE_INFO (t))
7933 	*walk_subtrees = 0;
7934       else if (for_each_template_parm (TYPE_TI_ARGS (t),
7935 				       fn, data, pfd->visited,
7936 				       pfd->include_nondeduced_p))
7937 	return error_mark_node;
7938       break;
7939 
7940     case INTEGER_TYPE:
7941       if (for_each_template_parm (TYPE_MIN_VALUE (t),
7942 				  fn, data, pfd->visited,
7943 				  pfd->include_nondeduced_p)
7944 	  || for_each_template_parm (TYPE_MAX_VALUE (t),
7945 				     fn, data, pfd->visited,
7946 				     pfd->include_nondeduced_p))
7947 	return error_mark_node;
7948       break;
7949 
7950     case METHOD_TYPE:
7951       /* Since we're not going to walk subtrees, we have to do this
7952 	 explicitly here.  */
7953       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
7954 				  pfd->visited, pfd->include_nondeduced_p))
7955 	return error_mark_node;
7956       /* Fall through.  */
7957 
7958     case FUNCTION_TYPE:
7959       /* Check the return type.  */
7960       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7961 				  pfd->include_nondeduced_p))
7962 	return error_mark_node;
7963 
7964       /* Check the parameter types.  Since default arguments are not
7965 	 instantiated until they are needed, the TYPE_ARG_TYPES may
7966 	 contain expressions that involve template parameters.  But,
7967 	 no-one should be looking at them yet.  And, once they're
7968 	 instantiated, they don't contain template parameters, so
7969 	 there's no point in looking at them then, either.  */
7970       {
7971 	tree parm;
7972 
7973 	for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
7974 	  if (for_each_template_parm (TREE_VALUE (parm), fn, data,
7975 				      pfd->visited, pfd->include_nondeduced_p))
7976 	    return error_mark_node;
7977 
7978 	/* Since we've already handled the TYPE_ARG_TYPES, we don't
7979 	   want walk_tree walking into them itself.  */
7980 	*walk_subtrees = 0;
7981       }
7982       break;
7983 
7984     case TYPEOF_TYPE:
7985     case UNDERLYING_TYPE:
7986       if (pfd->include_nondeduced_p
7987 	  && for_each_template_parm (TYPE_FIELDS (t), fn, data,
7988 				     pfd->visited,
7989 				     pfd->include_nondeduced_p))
7990 	return error_mark_node;
7991       break;
7992 
7993     case FUNCTION_DECL:
7994     case VAR_DECL:
7995       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
7996 	  && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
7997 				     pfd->visited, pfd->include_nondeduced_p))
7998 	return error_mark_node;
7999       /* Fall through.  */
8000 
8001     case PARM_DECL:
8002     case CONST_DECL:
8003       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
8004 	  && for_each_template_parm (DECL_INITIAL (t), fn, data,
8005 				     pfd->visited, pfd->include_nondeduced_p))
8006 	return error_mark_node;
8007       if (DECL_CONTEXT (t)
8008 	  && pfd->include_nondeduced_p
8009 	  && for_each_template_parm (DECL_CONTEXT (t), fn, data,
8010 				     pfd->visited, pfd->include_nondeduced_p))
8011 	return error_mark_node;
8012       break;
8013 
8014     case BOUND_TEMPLATE_TEMPLATE_PARM:
8015       /* Record template parameters such as `T' inside `TT<T>'.  */
8016       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
8017 				  pfd->include_nondeduced_p))
8018 	return error_mark_node;
8019       /* Fall through.  */
8020 
8021     case TEMPLATE_TEMPLATE_PARM:
8022     case TEMPLATE_TYPE_PARM:
8023     case TEMPLATE_PARM_INDEX:
8024       if (fn && (*fn)(t, data))
8025 	return error_mark_node;
8026       else if (!fn)
8027 	return error_mark_node;
8028       break;
8029 
8030     case TEMPLATE_DECL:
8031       /* A template template parameter is encountered.  */
8032       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
8033 	  && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
8034 				     pfd->include_nondeduced_p))
8035 	return error_mark_node;
8036 
8037       /* Already substituted template template parameter */
8038       *walk_subtrees = 0;
8039       break;
8040 
8041     case TYPENAME_TYPE:
8042       if (!fn
8043 	  || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
8044 				     data, pfd->visited,
8045 				     pfd->include_nondeduced_p))
8046 	return error_mark_node;
8047       break;
8048 
8049     case CONSTRUCTOR:
8050       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
8051 	  && pfd->include_nondeduced_p
8052 	  && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
8053 				     (TREE_TYPE (t)), fn, data,
8054 				     pfd->visited, pfd->include_nondeduced_p))
8055 	return error_mark_node;
8056       break;
8057 
8058     case INDIRECT_REF:
8059     case COMPONENT_REF:
8060       /* If there's no type, then this thing must be some expression
8061 	 involving template parameters.  */
8062       if (!fn && !TREE_TYPE (t))
8063 	return error_mark_node;
8064       break;
8065 
8066     case MODOP_EXPR:
8067     case CAST_EXPR:
8068     case IMPLICIT_CONV_EXPR:
8069     case REINTERPRET_CAST_EXPR:
8070     case CONST_CAST_EXPR:
8071     case STATIC_CAST_EXPR:
8072     case DYNAMIC_CAST_EXPR:
8073     case ARROW_EXPR:
8074     case DOTSTAR_EXPR:
8075     case TYPEID_EXPR:
8076     case PSEUDO_DTOR_EXPR:
8077       if (!fn)
8078 	return error_mark_node;
8079       break;
8080 
8081     default:
8082       break;
8083     }
8084 
8085   /* We didn't find any template parameters we liked.  */
8086   return NULL_TREE;
8087 }
8088 
8089 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
8090    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
8091    call FN with the parameter and the DATA.
8092    If FN returns nonzero, the iteration is terminated, and
8093    for_each_template_parm returns 1.  Otherwise, the iteration
8094    continues.  If FN never returns a nonzero value, the value
8095    returned by for_each_template_parm is 0.  If FN is NULL, it is
8096    considered to be the function which always returns 1.
8097 
8098    If INCLUDE_NONDEDUCED_P, then this routine will also visit template
8099    parameters that occur in non-deduced contexts.  When false, only
8100    visits those template parameters that can be deduced.  */
8101 
8102 static int
for_each_template_parm(tree t,tree_fn_t fn,void * data,struct pointer_set_t * visited,bool include_nondeduced_p)8103 for_each_template_parm (tree t, tree_fn_t fn, void* data,
8104 			struct pointer_set_t *visited,
8105 			bool include_nondeduced_p)
8106 {
8107   struct pair_fn_data pfd;
8108   int result;
8109 
8110   /* Set up.  */
8111   pfd.fn = fn;
8112   pfd.data = data;
8113   pfd.include_nondeduced_p = include_nondeduced_p;
8114 
8115   /* Walk the tree.  (Conceptually, we would like to walk without
8116      duplicates, but for_each_template_parm_r recursively calls
8117      for_each_template_parm, so we would need to reorganize a fair
8118      bit to use walk_tree_without_duplicates, so we keep our own
8119      visited list.)  */
8120   if (visited)
8121     pfd.visited = visited;
8122   else
8123     pfd.visited = pointer_set_create ();
8124   result = cp_walk_tree (&t,
8125 		         for_each_template_parm_r,
8126 		         &pfd,
8127 		         pfd.visited) != NULL_TREE;
8128 
8129   /* Clean up.  */
8130   if (!visited)
8131     {
8132       pointer_set_destroy (pfd.visited);
8133       pfd.visited = 0;
8134     }
8135 
8136   return result;
8137 }
8138 
8139 /* Returns true if T depends on any template parameter.  */
8140 
8141 int
uses_template_parms(tree t)8142 uses_template_parms (tree t)
8143 {
8144   bool dependent_p;
8145   int saved_processing_template_decl;
8146 
8147   saved_processing_template_decl = processing_template_decl;
8148   if (!saved_processing_template_decl)
8149     processing_template_decl = 1;
8150   if (TYPE_P (t))
8151     dependent_p = dependent_type_p (t);
8152   else if (TREE_CODE (t) == TREE_VEC)
8153     dependent_p = any_dependent_template_arguments_p (t);
8154   else if (TREE_CODE (t) == TREE_LIST)
8155     dependent_p = (uses_template_parms (TREE_VALUE (t))
8156 		   || uses_template_parms (TREE_CHAIN (t)));
8157   else if (TREE_CODE (t) == TYPE_DECL)
8158     dependent_p = dependent_type_p (TREE_TYPE (t));
8159   else if (DECL_P (t)
8160 	   || EXPR_P (t)
8161 	   || TREE_CODE (t) == TEMPLATE_PARM_INDEX
8162 	   || TREE_CODE (t) == OVERLOAD
8163 	   || BASELINK_P (t)
8164 	   || identifier_p (t)
8165 	   || TREE_CODE (t) == TRAIT_EXPR
8166 	   || TREE_CODE (t) == CONSTRUCTOR
8167 	   || CONSTANT_CLASS_P (t))
8168     dependent_p = (type_dependent_expression_p (t)
8169 		   || value_dependent_expression_p (t));
8170   else
8171     {
8172       gcc_assert (t == error_mark_node);
8173       dependent_p = false;
8174     }
8175 
8176   processing_template_decl = saved_processing_template_decl;
8177 
8178   return dependent_p;
8179 }
8180 
8181 /* Returns true iff current_function_decl is an incompletely instantiated
8182    template.  Useful instead of processing_template_decl because the latter
8183    is set to 0 during fold_non_dependent_expr.  */
8184 
8185 bool
in_template_function(void)8186 in_template_function (void)
8187 {
8188   tree fn = current_function_decl;
8189   bool ret;
8190   ++processing_template_decl;
8191   ret = (fn && DECL_LANG_SPECIFIC (fn)
8192 	 && DECL_TEMPLATE_INFO (fn)
8193 	 && any_dependent_template_arguments_p (DECL_TI_ARGS (fn)));
8194   --processing_template_decl;
8195   return ret;
8196 }
8197 
8198 /* Returns true if T depends on any template parameter with level LEVEL.  */
8199 
8200 int
uses_template_parms_level(tree t,int level)8201 uses_template_parms_level (tree t, int level)
8202 {
8203   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
8204 				 /*include_nondeduced_p=*/true);
8205 }
8206 
8207 /* Returns TRUE iff INST is an instantiation we don't need to do in an
8208    ill-formed translation unit, i.e. a variable or function that isn't
8209    usable in a constant expression.  */
8210 
8211 static inline bool
neglectable_inst_p(tree d)8212 neglectable_inst_p (tree d)
8213 {
8214   return (DECL_P (d)
8215 	  && !(TREE_CODE (d) == FUNCTION_DECL ? DECL_DECLARED_CONSTEXPR_P (d)
8216 	       : decl_maybe_constant_var_p (d)));
8217 }
8218 
8219 /* Returns TRUE iff we should refuse to instantiate DECL because it's
8220    neglectable and instantiated from within an erroneous instantiation.  */
8221 
8222 static bool
limit_bad_template_recursion(tree decl)8223 limit_bad_template_recursion (tree decl)
8224 {
8225   struct tinst_level *lev = current_tinst_level;
8226   int errs = errorcount + sorrycount;
8227   if (lev == NULL || errs == 0 || !neglectable_inst_p (decl))
8228     return false;
8229 
8230   for (; lev; lev = lev->next)
8231     if (neglectable_inst_p (lev->decl))
8232       break;
8233 
8234   return (lev && errs > lev->errors);
8235 }
8236 
8237 static int tinst_depth;
8238 extern int max_tinst_depth;
8239 int depth_reached;
8240 
8241 static GTY(()) struct tinst_level *last_error_tinst_level;
8242 
8243 /* We're starting to instantiate D; record the template instantiation context
8244    for diagnostics and to restore it later.  */
8245 
8246 int
push_tinst_level(tree d)8247 push_tinst_level (tree d)
8248 {
8249   struct tinst_level *new_level;
8250 
8251   if (tinst_depth >= max_tinst_depth)
8252     {
8253       last_error_tinst_level = current_tinst_level;
8254       if (TREE_CODE (d) == TREE_LIST)
8255 	error ("template instantiation depth exceeds maximum of %d (use "
8256 	       "-ftemplate-depth= to increase the maximum) substituting %qS",
8257 	       max_tinst_depth, d);
8258       else
8259 	error ("template instantiation depth exceeds maximum of %d (use "
8260 	       "-ftemplate-depth= to increase the maximum) instantiating %qD",
8261 	       max_tinst_depth, d);
8262 
8263       print_instantiation_context ();
8264 
8265       return 0;
8266     }
8267 
8268   /* If the current instantiation caused problems, don't let it instantiate
8269      anything else.  Do allow deduction substitution and decls usable in
8270      constant expressions.  */
8271   if (limit_bad_template_recursion (d))
8272     return 0;
8273 
8274   new_level = ggc_alloc_tinst_level ();
8275   new_level->decl = d;
8276   new_level->locus = input_location;
8277   new_level->errors = errorcount+sorrycount;
8278   new_level->in_system_header_p = in_system_header_at (input_location);
8279   new_level->next = current_tinst_level;
8280   current_tinst_level = new_level;
8281 
8282   ++tinst_depth;
8283   if (GATHER_STATISTICS && (tinst_depth > depth_reached))
8284     depth_reached = tinst_depth;
8285 
8286   return 1;
8287 }
8288 
8289 /* We're done instantiating this template; return to the instantiation
8290    context.  */
8291 
8292 void
pop_tinst_level(void)8293 pop_tinst_level (void)
8294 {
8295   /* Restore the filename and line number stashed away when we started
8296      this instantiation.  */
8297   input_location = current_tinst_level->locus;
8298   current_tinst_level = current_tinst_level->next;
8299   --tinst_depth;
8300 }
8301 
8302 /* We're instantiating a deferred template; restore the template
8303    instantiation context in which the instantiation was requested, which
8304    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
8305 
8306 static tree
reopen_tinst_level(struct tinst_level * level)8307 reopen_tinst_level (struct tinst_level *level)
8308 {
8309   struct tinst_level *t;
8310 
8311   tinst_depth = 0;
8312   for (t = level; t; t = t->next)
8313     ++tinst_depth;
8314 
8315   current_tinst_level = level;
8316   pop_tinst_level ();
8317   if (current_tinst_level)
8318     current_tinst_level->errors = errorcount+sorrycount;
8319   return level->decl;
8320 }
8321 
8322 /* Returns the TINST_LEVEL which gives the original instantiation
8323    context.  */
8324 
8325 struct tinst_level *
outermost_tinst_level(void)8326 outermost_tinst_level (void)
8327 {
8328   struct tinst_level *level = current_tinst_level;
8329   if (level)
8330     while (level->next)
8331       level = level->next;
8332   return level;
8333 }
8334 
8335 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
8336    vector of template arguments, as for tsubst.
8337 
8338    Returns an appropriate tsubst'd friend declaration.  */
8339 
8340 static tree
tsubst_friend_function(tree decl,tree args)8341 tsubst_friend_function (tree decl, tree args)
8342 {
8343   tree new_friend;
8344 
8345   if (TREE_CODE (decl) == FUNCTION_DECL
8346       && DECL_TEMPLATE_INSTANTIATION (decl)
8347       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
8348     /* This was a friend declared with an explicit template
8349        argument list, e.g.:
8350 
8351        friend void f<>(T);
8352 
8353        to indicate that f was a template instantiation, not a new
8354        function declaration.  Now, we have to figure out what
8355        instantiation of what template.  */
8356     {
8357       tree template_id, arglist, fns;
8358       tree new_args;
8359       tree tmpl;
8360       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
8361 
8362       /* Friend functions are looked up in the containing namespace scope.
8363 	 We must enter that scope, to avoid finding member functions of the
8364 	 current class with same name.  */
8365       push_nested_namespace (ns);
8366       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
8367 			 tf_warning_or_error, NULL_TREE,
8368 			 /*integral_constant_expression_p=*/false);
8369       pop_nested_namespace (ns);
8370       arglist = tsubst (DECL_TI_ARGS (decl), args,
8371 			tf_warning_or_error, NULL_TREE);
8372       template_id = lookup_template_function (fns, arglist);
8373 
8374       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8375       tmpl = determine_specialization (template_id, new_friend,
8376 				       &new_args,
8377 				       /*need_member_template=*/0,
8378 				       TREE_VEC_LENGTH (args),
8379 				       tsk_none);
8380       return instantiate_template (tmpl, new_args, tf_error);
8381     }
8382 
8383   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8384 
8385   /* The NEW_FRIEND will look like an instantiation, to the
8386      compiler, but is not an instantiation from the point of view of
8387      the language.  For example, we might have had:
8388 
8389      template <class T> struct S {
8390        template <class U> friend void f(T, U);
8391      };
8392 
8393      Then, in S<int>, template <class U> void f(int, U) is not an
8394      instantiation of anything.  */
8395   if (new_friend == error_mark_node)
8396     return error_mark_node;
8397 
8398   DECL_USE_TEMPLATE (new_friend) = 0;
8399   if (TREE_CODE (decl) == TEMPLATE_DECL)
8400     {
8401       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
8402       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
8403 	= DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
8404     }
8405 
8406   /* The mangled name for the NEW_FRIEND is incorrect.  The function
8407      is not a template instantiation and should not be mangled like
8408      one.  Therefore, we forget the mangling here; we'll recompute it
8409      later if we need it.  */
8410   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
8411     {
8412       SET_DECL_RTL (new_friend, NULL);
8413       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
8414     }
8415 
8416   if (DECL_NAMESPACE_SCOPE_P (new_friend))
8417     {
8418       tree old_decl;
8419       tree new_friend_template_info;
8420       tree new_friend_result_template_info;
8421       tree ns;
8422       int  new_friend_is_defn;
8423 
8424       /* We must save some information from NEW_FRIEND before calling
8425 	 duplicate decls since that function will free NEW_FRIEND if
8426 	 possible.  */
8427       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
8428       new_friend_is_defn =
8429 	    (DECL_INITIAL (DECL_TEMPLATE_RESULT
8430 			   (template_for_substitution (new_friend)))
8431 	     != NULL_TREE);
8432       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
8433 	{
8434 	  /* This declaration is a `primary' template.  */
8435 	  DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
8436 
8437 	  new_friend_result_template_info
8438 	    = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
8439 	}
8440       else
8441 	new_friend_result_template_info = NULL_TREE;
8442 
8443       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
8444       if (new_friend_is_defn)
8445 	DECL_INITIAL (new_friend) = error_mark_node;
8446 
8447       /* Inside pushdecl_namespace_level, we will push into the
8448 	 current namespace. However, the friend function should go
8449 	 into the namespace of the template.  */
8450       ns = decl_namespace_context (new_friend);
8451       push_nested_namespace (ns);
8452       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
8453       pop_nested_namespace (ns);
8454 
8455       if (old_decl == error_mark_node)
8456 	return error_mark_node;
8457 
8458       if (old_decl != new_friend)
8459 	{
8460 	  /* This new friend declaration matched an existing
8461 	     declaration.  For example, given:
8462 
8463 	       template <class T> void f(T);
8464 	       template <class U> class C {
8465 		 template <class T> friend void f(T) {}
8466 	       };
8467 
8468 	     the friend declaration actually provides the definition
8469 	     of `f', once C has been instantiated for some type.  So,
8470 	     old_decl will be the out-of-class template declaration,
8471 	     while new_friend is the in-class definition.
8472 
8473 	     But, if `f' was called before this point, the
8474 	     instantiation of `f' will have DECL_TI_ARGS corresponding
8475 	     to `T' but not to `U', references to which might appear
8476 	     in the definition of `f'.  Previously, the most general
8477 	     template for an instantiation of `f' was the out-of-class
8478 	     version; now it is the in-class version.  Therefore, we
8479 	     run through all specialization of `f', adding to their
8480 	     DECL_TI_ARGS appropriately.  In particular, they need a
8481 	     new set of outer arguments, corresponding to the
8482 	     arguments for this class instantiation.
8483 
8484 	     The same situation can arise with something like this:
8485 
8486 	       friend void f(int);
8487 	       template <class T> class C {
8488 		 friend void f(T) {}
8489 	       };
8490 
8491 	     when `C<int>' is instantiated.  Now, `f(int)' is defined
8492 	     in the class.  */
8493 
8494 	  if (!new_friend_is_defn)
8495 	    /* On the other hand, if the in-class declaration does
8496 	       *not* provide a definition, then we don't want to alter
8497 	       existing definitions.  We can just leave everything
8498 	       alone.  */
8499 	    ;
8500 	  else
8501 	    {
8502 	      tree new_template = TI_TEMPLATE (new_friend_template_info);
8503 	      tree new_args = TI_ARGS (new_friend_template_info);
8504 
8505 	      /* Overwrite whatever template info was there before, if
8506 		 any, with the new template information pertaining to
8507 		 the declaration.  */
8508 	      DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
8509 
8510 	      if (TREE_CODE (old_decl) != TEMPLATE_DECL)
8511 		{
8512 		  /* We should have called reregister_specialization in
8513 		     duplicate_decls.  */
8514 		  gcc_assert (retrieve_specialization (new_template,
8515 						       new_args, 0)
8516 			      == old_decl);
8517 
8518 		  /* Instantiate it if the global has already been used.  */
8519 		  if (DECL_ODR_USED (old_decl))
8520 		    instantiate_decl (old_decl, /*defer_ok=*/true,
8521 				      /*expl_inst_class_mem_p=*/false);
8522 		}
8523 	      else
8524 		{
8525 		  tree t;
8526 
8527 		  /* Indicate that the old function template is a partial
8528 		     instantiation.  */
8529 		  DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
8530 		    = new_friend_result_template_info;
8531 
8532 		  gcc_assert (new_template
8533 			      == most_general_template (new_template));
8534 		  gcc_assert (new_template != old_decl);
8535 
8536 		  /* Reassign any specializations already in the hash table
8537 		     to the new more general template, and add the
8538 		     additional template args.  */
8539 		  for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
8540 		       t != NULL_TREE;
8541 		       t = TREE_CHAIN (t))
8542 		    {
8543 		      tree spec = TREE_VALUE (t);
8544 		      spec_entry elt;
8545 
8546 		      elt.tmpl = old_decl;
8547 		      elt.args = DECL_TI_ARGS (spec);
8548 		      elt.spec = NULL_TREE;
8549 
8550 		      htab_remove_elt (decl_specializations, &elt);
8551 
8552 		      DECL_TI_ARGS (spec)
8553 			= add_outermost_template_args (new_args,
8554 						       DECL_TI_ARGS (spec));
8555 
8556 		      register_specialization
8557 			(spec, new_template, DECL_TI_ARGS (spec), true, 0);
8558 
8559 		    }
8560 		  DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
8561 		}
8562 	    }
8563 
8564 	  /* The information from NEW_FRIEND has been merged into OLD_DECL
8565 	     by duplicate_decls.  */
8566 	  new_friend = old_decl;
8567 	}
8568     }
8569   else
8570     {
8571       tree context = DECL_CONTEXT (new_friend);
8572       bool dependent_p;
8573 
8574       /* In the code
8575 	   template <class T> class C {
8576 	     template <class U> friend void C1<U>::f (); // case 1
8577 	     friend void C2<T>::f ();			 // case 2
8578 	   };
8579 	 we only need to make sure CONTEXT is a complete type for
8580 	 case 2.  To distinguish between the two cases, we note that
8581 	 CONTEXT of case 1 remains dependent type after tsubst while
8582 	 this isn't true for case 2.  */
8583       ++processing_template_decl;
8584       dependent_p = dependent_type_p (context);
8585       --processing_template_decl;
8586 
8587       if (!dependent_p
8588 	  && !complete_type_or_else (context, NULL_TREE))
8589 	return error_mark_node;
8590 
8591       if (COMPLETE_TYPE_P (context))
8592 	{
8593 	  tree fn = new_friend;
8594 	  /* do_friend adds the TEMPLATE_DECL for any member friend
8595 	     template even if it isn't a member template, i.e.
8596 	       template <class T> friend A<T>::f();
8597 	     Look through it in that case.  */
8598 	  if (TREE_CODE (fn) == TEMPLATE_DECL
8599 	      && !PRIMARY_TEMPLATE_P (fn))
8600 	    fn = DECL_TEMPLATE_RESULT (fn);
8601 	  /* Check to see that the declaration is really present, and,
8602 	     possibly obtain an improved declaration.  */
8603 	  fn = check_classfn (context, fn, NULL_TREE);
8604 
8605 	  if (fn)
8606 	    new_friend = fn;
8607 	}
8608     }
8609 
8610   return new_friend;
8611 }
8612 
8613 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
8614    template arguments, as for tsubst.
8615 
8616    Returns an appropriate tsubst'd friend type or error_mark_node on
8617    failure.  */
8618 
8619 static tree
tsubst_friend_class(tree friend_tmpl,tree args)8620 tsubst_friend_class (tree friend_tmpl, tree args)
8621 {
8622   tree friend_type;
8623   tree tmpl;
8624   tree context;
8625 
8626   if (DECL_TEMPLATE_TEMPLATE_PARM_P (friend_tmpl))
8627     {
8628       tree t = tsubst (TREE_TYPE (friend_tmpl), args, tf_none, NULL_TREE);
8629       return TREE_TYPE (t);
8630     }
8631 
8632   context = CP_DECL_CONTEXT (friend_tmpl);
8633 
8634   if (context != global_namespace)
8635     {
8636       if (TREE_CODE (context) == NAMESPACE_DECL)
8637 	push_nested_namespace (context);
8638       else
8639 	push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
8640     }
8641 
8642   /* Look for a class template declaration.  We look for hidden names
8643      because two friend declarations of the same template are the
8644      same.  For example, in:
8645 
8646        struct A {
8647          template <typename> friend class F;
8648        };
8649        template <typename> struct B {
8650          template <typename> friend class F;
8651        };
8652 
8653      both F templates are the same.  */
8654   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
8655 			   /*block_p=*/true, 0, LOOKUP_HIDDEN);
8656 
8657   /* But, if we don't find one, it might be because we're in a
8658      situation like this:
8659 
8660        template <class T>
8661        struct S {
8662 	 template <class U>
8663 	 friend struct S;
8664        };
8665 
8666      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
8667      for `S<int>', not the TEMPLATE_DECL.  */
8668   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
8669     {
8670       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
8671       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
8672     }
8673 
8674   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
8675     {
8676       /* The friend template has already been declared.  Just
8677 	 check to see that the declarations match, and install any new
8678 	 default parameters.  We must tsubst the default parameters,
8679 	 of course.  We only need the innermost template parameters
8680 	 because that is all that redeclare_class_template will look
8681 	 at.  */
8682       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
8683 	  > TMPL_ARGS_DEPTH (args))
8684 	{
8685 	  tree parms;
8686           location_t saved_input_location;
8687 	  parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
8688 					 args, tf_warning_or_error);
8689 
8690           saved_input_location = input_location;
8691           input_location = DECL_SOURCE_LOCATION (friend_tmpl);
8692 	  redeclare_class_template (TREE_TYPE (tmpl), parms);
8693           input_location = saved_input_location;
8694 
8695 	}
8696 
8697       friend_type = TREE_TYPE (tmpl);
8698     }
8699   else
8700     {
8701       /* The friend template has not already been declared.  In this
8702 	 case, the instantiation of the template class will cause the
8703 	 injection of this template into the global scope.  */
8704       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
8705       if (tmpl == error_mark_node)
8706 	return error_mark_node;
8707 
8708       /* The new TMPL is not an instantiation of anything, so we
8709 	 forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
8710 	 the new type because that is supposed to be the corresponding
8711 	 template decl, i.e., TMPL.  */
8712       DECL_USE_TEMPLATE (tmpl) = 0;
8713       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
8714       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
8715       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
8716 	= INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
8717 
8718       /* Inject this template into the global scope.  */
8719       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
8720     }
8721 
8722   if (context != global_namespace)
8723     {
8724       if (TREE_CODE (context) == NAMESPACE_DECL)
8725 	pop_nested_namespace (context);
8726       else
8727 	pop_nested_class ();
8728     }
8729 
8730   return friend_type;
8731 }
8732 
8733 /* Returns zero if TYPE cannot be completed later due to circularity.
8734    Otherwise returns one.  */
8735 
8736 static int
can_complete_type_without_circularity(tree type)8737 can_complete_type_without_circularity (tree type)
8738 {
8739   if (type == NULL_TREE || type == error_mark_node)
8740     return 0;
8741   else if (COMPLETE_TYPE_P (type))
8742     return 1;
8743   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
8744     return can_complete_type_without_circularity (TREE_TYPE (type));
8745   else if (CLASS_TYPE_P (type)
8746 	   && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
8747     return 0;
8748   else
8749     return 1;
8750 }
8751 
8752 static tree tsubst_omp_clauses (tree, bool, tree, tsubst_flags_t, tree);
8753 
8754 /* Apply any attributes which had to be deferred until instantiation
8755    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
8756    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
8757 
8758 static void
apply_late_template_attributes(tree * decl_p,tree attributes,int attr_flags,tree args,tsubst_flags_t complain,tree in_decl)8759 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
8760 				tree args, tsubst_flags_t complain, tree in_decl)
8761 {
8762   tree last_dep = NULL_TREE;
8763   tree t;
8764   tree *p;
8765 
8766   for (t = attributes; t; t = TREE_CHAIN (t))
8767     if (ATTR_IS_DEPENDENT (t))
8768       {
8769 	last_dep = t;
8770 	attributes = copy_list (attributes);
8771 	break;
8772       }
8773 
8774   if (DECL_P (*decl_p))
8775     {
8776       if (TREE_TYPE (*decl_p) == error_mark_node)
8777 	return;
8778       p = &DECL_ATTRIBUTES (*decl_p);
8779     }
8780   else
8781     p = &TYPE_ATTRIBUTES (*decl_p);
8782 
8783   if (last_dep)
8784     {
8785       tree late_attrs = NULL_TREE;
8786       tree *q = &late_attrs;
8787 
8788       for (*p = attributes; *p; )
8789 	{
8790 	  t = *p;
8791 	  if (ATTR_IS_DEPENDENT (t))
8792 	    {
8793 	      *p = TREE_CHAIN (t);
8794 	      TREE_CHAIN (t) = NULL_TREE;
8795 	      if ((flag_openmp || flag_cilkplus)
8796 		  && is_attribute_p ("omp declare simd",
8797 				     get_attribute_name (t))
8798 		  && TREE_VALUE (t))
8799 		{
8800 		  tree clauses = TREE_VALUE (TREE_VALUE (t));
8801 		  clauses = tsubst_omp_clauses (clauses, true, args,
8802 						complain, in_decl);
8803 		  c_omp_declare_simd_clauses_to_decls (*decl_p, clauses);
8804 		  clauses = finish_omp_clauses (clauses);
8805 		  tree parms = DECL_ARGUMENTS (*decl_p);
8806 		  clauses
8807 		    = c_omp_declare_simd_clauses_to_numbers (parms, clauses);
8808 		  if (clauses)
8809 		    TREE_VALUE (TREE_VALUE (t)) = clauses;
8810 		  else
8811 		    TREE_VALUE (t) = NULL_TREE;
8812 		}
8813 	      /* If the first attribute argument is an identifier, don't
8814 		 pass it through tsubst.  Attributes like mode, format,
8815 		 cleanup and several target specific attributes expect it
8816 		 unmodified.  */
8817 	      else if (attribute_takes_identifier_p (get_attribute_name (t))
8818 		       && TREE_VALUE (t))
8819 		{
8820 		  tree chain
8821 		    = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
8822 				   in_decl,
8823 				   /*integral_constant_expression_p=*/false);
8824 		  if (chain != TREE_CHAIN (TREE_VALUE (t)))
8825 		    TREE_VALUE (t)
8826 		      = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
8827 				   chain);
8828 		}
8829 	      else
8830 		TREE_VALUE (t)
8831 		  = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
8832 				 /*integral_constant_expression_p=*/false);
8833 	      *q = t;
8834 	      q = &TREE_CHAIN (t);
8835 	    }
8836 	  else
8837 	    p = &TREE_CHAIN (t);
8838 	}
8839 
8840       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
8841     }
8842 }
8843 
8844 /* Perform (or defer) access check for typedefs that were referenced
8845    from within the template TMPL code.
8846    This is a subroutine of instantiate_decl and instantiate_class_template.
8847    TMPL is the template to consider and TARGS is the list of arguments of
8848    that template.  */
8849 
8850 static void
perform_typedefs_access_check(tree tmpl,tree targs)8851 perform_typedefs_access_check (tree tmpl, tree targs)
8852 {
8853   location_t saved_location;
8854   unsigned i;
8855   qualified_typedef_usage_t *iter;
8856 
8857   if (!tmpl
8858       || (!CLASS_TYPE_P (tmpl)
8859 	  && TREE_CODE (tmpl) != FUNCTION_DECL))
8860     return;
8861 
8862   saved_location = input_location;
8863   FOR_EACH_VEC_SAFE_ELT (get_types_needing_access_check (tmpl), i, iter)
8864     {
8865       tree type_decl = iter->typedef_decl;
8866       tree type_scope = iter->context;
8867 
8868       if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
8869 	continue;
8870 
8871       if (uses_template_parms (type_decl))
8872 	type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
8873       if (uses_template_parms (type_scope))
8874 	type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
8875 
8876       /* Make access check error messages point to the location
8877          of the use of the typedef.  */
8878       input_location = iter->locus;
8879       perform_or_defer_access_check (TYPE_BINFO (type_scope),
8880 				     type_decl, type_decl,
8881 				     tf_warning_or_error);
8882     }
8883     input_location = saved_location;
8884 }
8885 
8886 static tree
instantiate_class_template_1(tree type)8887 instantiate_class_template_1 (tree type)
8888 {
8889   tree templ, args, pattern, t, member;
8890   tree typedecl;
8891   tree pbinfo;
8892   tree base_list;
8893   unsigned int saved_maximum_field_alignment;
8894   tree fn_context;
8895 
8896   if (type == error_mark_node)
8897     return error_mark_node;
8898 
8899   if (COMPLETE_OR_OPEN_TYPE_P (type)
8900       || uses_template_parms (type))
8901     return type;
8902 
8903   /* Figure out which template is being instantiated.  */
8904   templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
8905   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
8906 
8907   /* Determine what specialization of the original template to
8908      instantiate.  */
8909   t = most_specialized_class (type, tf_warning_or_error);
8910   if (t == error_mark_node)
8911     {
8912       TYPE_BEING_DEFINED (type) = 1;
8913       return error_mark_node;
8914     }
8915   else if (t)
8916     {
8917       /* This TYPE is actually an instantiation of a partial
8918 	 specialization.  We replace the innermost set of ARGS with
8919 	 the arguments appropriate for substitution.  For example,
8920 	 given:
8921 
8922 	   template <class T> struct S {};
8923 	   template <class T> struct S<T*> {};
8924 
8925 	 and supposing that we are instantiating S<int*>, ARGS will
8926 	 presently be {int*} -- but we need {int}.  */
8927       pattern = TREE_TYPE (t);
8928       args = TREE_PURPOSE (t);
8929     }
8930   else
8931     {
8932       pattern = TREE_TYPE (templ);
8933       args = CLASSTYPE_TI_ARGS (type);
8934     }
8935 
8936   /* If the template we're instantiating is incomplete, then clearly
8937      there's nothing we can do.  */
8938   if (!COMPLETE_TYPE_P (pattern))
8939     return type;
8940 
8941   /* If we've recursively instantiated too many templates, stop.  */
8942   if (! push_tinst_level (type))
8943     return type;
8944 
8945   /* Now we're really doing the instantiation.  Mark the type as in
8946      the process of being defined.  */
8947   TYPE_BEING_DEFINED (type) = 1;
8948 
8949   /* We may be in the middle of deferred access check.  Disable
8950      it now.  */
8951   push_deferring_access_checks (dk_no_deferred);
8952 
8953   fn_context = decl_function_context (TYPE_MAIN_DECL (type));
8954   if (!fn_context)
8955     push_to_top_level ();
8956   /* Use #pragma pack from the template context.  */
8957   saved_maximum_field_alignment = maximum_field_alignment;
8958   maximum_field_alignment = TYPE_PRECISION (pattern);
8959 
8960   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
8961 
8962   /* Set the input location to the most specialized template definition.
8963      This is needed if tsubsting causes an error.  */
8964   typedecl = TYPE_MAIN_DECL (pattern);
8965   input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) =
8966     DECL_SOURCE_LOCATION (typedecl);
8967 
8968   TYPE_PACKED (type) = TYPE_PACKED (pattern);
8969   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
8970   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
8971   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
8972   if (ANON_AGGR_TYPE_P (pattern))
8973     SET_ANON_AGGR_TYPE_P (type);
8974   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
8975     {
8976       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
8977       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
8978       /* Adjust visibility for template arguments.  */
8979       determine_visibility (TYPE_MAIN_DECL (type));
8980     }
8981   if (CLASS_TYPE_P (type))
8982     CLASSTYPE_FINAL (type) = CLASSTYPE_FINAL (pattern);
8983 
8984   pbinfo = TYPE_BINFO (pattern);
8985 
8986   /* We should never instantiate a nested class before its enclosing
8987      class; we need to look up the nested class by name before we can
8988      instantiate it, and that lookup should instantiate the enclosing
8989      class.  */
8990   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
8991 	      || COMPLETE_OR_OPEN_TYPE_P (TYPE_CONTEXT (type)));
8992 
8993   base_list = NULL_TREE;
8994   if (BINFO_N_BASE_BINFOS (pbinfo))
8995     {
8996       tree pbase_binfo;
8997       tree pushed_scope;
8998       int i;
8999 
9000       /* We must enter the scope containing the type, as that is where
9001 	 the accessibility of types named in dependent bases are
9002 	 looked up from.  */
9003       pushed_scope = push_scope (CP_TYPE_CONTEXT (type));
9004 
9005       /* Substitute into each of the bases to determine the actual
9006 	 basetypes.  */
9007       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
9008 	{
9009 	  tree base;
9010 	  tree access = BINFO_BASE_ACCESS (pbinfo, i);
9011           tree expanded_bases = NULL_TREE;
9012           int idx, len = 1;
9013 
9014           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
9015             {
9016               expanded_bases =
9017 		tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
9018 				       args, tf_error, NULL_TREE);
9019               if (expanded_bases == error_mark_node)
9020                 continue;
9021 
9022               len = TREE_VEC_LENGTH (expanded_bases);
9023             }
9024 
9025           for (idx = 0; idx < len; idx++)
9026             {
9027               if (expanded_bases)
9028                 /* Extract the already-expanded base class.  */
9029                 base = TREE_VEC_ELT (expanded_bases, idx);
9030               else
9031                 /* Substitute to figure out the base class.  */
9032                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error,
9033                                NULL_TREE);
9034 
9035               if (base == error_mark_node)
9036                 continue;
9037 
9038               base_list = tree_cons (access, base, base_list);
9039               if (BINFO_VIRTUAL_P (pbase_binfo))
9040                 TREE_TYPE (base_list) = integer_type_node;
9041             }
9042 	}
9043 
9044       /* The list is now in reverse order; correct that.  */
9045       base_list = nreverse (base_list);
9046 
9047       if (pushed_scope)
9048 	pop_scope (pushed_scope);
9049     }
9050   /* Now call xref_basetypes to set up all the base-class
9051      information.  */
9052   xref_basetypes (type, base_list);
9053 
9054   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
9055 				  (int) ATTR_FLAG_TYPE_IN_PLACE,
9056 				  args, tf_error, NULL_TREE);
9057   fixup_attribute_variants (type);
9058 
9059   /* Now that our base classes are set up, enter the scope of the
9060      class, so that name lookups into base classes, etc. will work
9061      correctly.  This is precisely analogous to what we do in
9062      begin_class_definition when defining an ordinary non-template
9063      class, except we also need to push the enclosing classes.  */
9064   push_nested_class (type);
9065 
9066   /* Now members are processed in the order of declaration.  */
9067   for (member = CLASSTYPE_DECL_LIST (pattern);
9068        member; member = TREE_CHAIN (member))
9069     {
9070       tree t = TREE_VALUE (member);
9071 
9072       if (TREE_PURPOSE (member))
9073 	{
9074 	  if (TYPE_P (t))
9075 	    {
9076 	      /* Build new CLASSTYPE_NESTED_UTDS.  */
9077 
9078 	      tree newtag;
9079 	      bool class_template_p;
9080 
9081 	      class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
9082 				  && TYPE_LANG_SPECIFIC (t)
9083 				  && CLASSTYPE_IS_TEMPLATE (t));
9084 	      /* If the member is a class template, then -- even after
9085 		 substitution -- there may be dependent types in the
9086 		 template argument list for the class.  We increment
9087 		 PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
9088 		 that function will assume that no types are dependent
9089 		 when outside of a template.  */
9090 	      if (class_template_p)
9091 		++processing_template_decl;
9092 	      newtag = tsubst (t, args, tf_error, NULL_TREE);
9093 	      if (class_template_p)
9094 		--processing_template_decl;
9095 	      if (newtag == error_mark_node)
9096 		continue;
9097 
9098 	      if (TREE_CODE (newtag) != ENUMERAL_TYPE)
9099 		{
9100 		  tree name = TYPE_IDENTIFIER (t);
9101 
9102 		  if (class_template_p)
9103 		    /* Unfortunately, lookup_template_class sets
9104 		       CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
9105 		       instantiation (i.e., for the type of a member
9106 		       template class nested within a template class.)
9107 		       This behavior is required for
9108 		       maybe_process_partial_specialization to work
9109 		       correctly, but is not accurate in this case;
9110 		       the TAG is not an instantiation of anything.
9111 		       (The corresponding TEMPLATE_DECL is an
9112 		       instantiation, but the TYPE is not.) */
9113 		    CLASSTYPE_USE_TEMPLATE (newtag) = 0;
9114 
9115 		  /* Now, we call pushtag to put this NEWTAG into the scope of
9116 		     TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
9117 		     pushtag calling push_template_decl.  We don't have to do
9118 		     this for enums because it will already have been done in
9119 		     tsubst_enum.  */
9120 		  if (name)
9121 		    SET_IDENTIFIER_TYPE_VALUE (name, newtag);
9122 		  pushtag (name, newtag, /*tag_scope=*/ts_current);
9123 		}
9124 	    }
9125 	  else if (DECL_DECLARES_FUNCTION_P (t))
9126 	    {
9127 	      /* Build new TYPE_METHODS.  */
9128 	      tree r;
9129 
9130 	      if (TREE_CODE (t) == TEMPLATE_DECL)
9131 		++processing_template_decl;
9132 	      r = tsubst (t, args, tf_error, NULL_TREE);
9133 	      if (TREE_CODE (t) == TEMPLATE_DECL)
9134 		--processing_template_decl;
9135 	      set_current_access_from_decl (r);
9136 	      finish_member_declaration (r);
9137 	      /* Instantiate members marked with attribute used.  */
9138 	      if (r != error_mark_node && DECL_PRESERVE_P (r))
9139 		mark_used (r);
9140 	      if (TREE_CODE (r) == FUNCTION_DECL
9141 		  && DECL_OMP_DECLARE_REDUCTION_P (r))
9142 		cp_check_omp_declare_reduction (r);
9143 	    }
9144 	  else if (DECL_CLASS_TEMPLATE_P (t)
9145 		   && LAMBDA_TYPE_P (TREE_TYPE (t)))
9146 	    /* A closure type for a lambda in a default argument for a
9147 	       member template.  Ignore it; it will be instantiated with
9148 	       the default argument.  */;
9149 	  else
9150 	    {
9151 	      /* Build new TYPE_FIELDS.  */
9152               if (TREE_CODE (t) == STATIC_ASSERT)
9153                 {
9154                   tree condition;
9155 
9156 		  ++c_inhibit_evaluation_warnings;
9157 		  condition =
9158 		    tsubst_expr (STATIC_ASSERT_CONDITION (t), args,
9159 				 tf_warning_or_error, NULL_TREE,
9160 				 /*integral_constant_expression_p=*/true);
9161 		  --c_inhibit_evaluation_warnings;
9162 
9163                   finish_static_assert (condition,
9164                                         STATIC_ASSERT_MESSAGE (t),
9165                                         STATIC_ASSERT_SOURCE_LOCATION (t),
9166                                         /*member_p=*/true);
9167                 }
9168 	      else if (TREE_CODE (t) != CONST_DECL)
9169 		{
9170 		  tree r;
9171 		  tree vec = NULL_TREE;
9172 		  int len = 1;
9173 
9174 		  /* The file and line for this declaration, to
9175 		     assist in error message reporting.  Since we
9176 		     called push_tinst_level above, we don't need to
9177 		     restore these.  */
9178 		  input_location = DECL_SOURCE_LOCATION (t);
9179 
9180 		  if (TREE_CODE (t) == TEMPLATE_DECL)
9181 		    ++processing_template_decl;
9182 		  r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
9183 		  if (TREE_CODE (t) == TEMPLATE_DECL)
9184 		    --processing_template_decl;
9185 
9186 		  if (TREE_CODE (r) == TREE_VEC)
9187 		    {
9188 		      /* A capture pack became multiple fields.  */
9189 		      vec = r;
9190 		      len = TREE_VEC_LENGTH (vec);
9191 		    }
9192 
9193 		  for (int i = 0; i < len; ++i)
9194 		    {
9195 		      if (vec)
9196 			r = TREE_VEC_ELT (vec, i);
9197 		      if (VAR_P (r))
9198 			{
9199 			  /* In [temp.inst]:
9200 
9201 			     [t]he initialization (and any associated
9202 			     side-effects) of a static data member does
9203 			     not occur unless the static data member is
9204 			     itself used in a way that requires the
9205 			     definition of the static data member to
9206 			     exist.
9207 
9208 			     Therefore, we do not substitute into the
9209 			     initialized for the static data member here.  */
9210 			  finish_static_data_member_decl
9211 			    (r,
9212 			     /*init=*/NULL_TREE,
9213 			     /*init_const_expr_p=*/false,
9214 			     /*asmspec_tree=*/NULL_TREE,
9215 			     /*flags=*/0);
9216 			  /* Instantiate members marked with attribute used. */
9217 			  if (r != error_mark_node && DECL_PRESERVE_P (r))
9218 			    mark_used (r);
9219 			}
9220 		      else if (TREE_CODE (r) == FIELD_DECL)
9221 			{
9222 			  /* Determine whether R has a valid type and can be
9223 			     completed later.  If R is invalid, then its type
9224 			     is replaced by error_mark_node.  */
9225 			  tree rtype = TREE_TYPE (r);
9226 			  if (can_complete_type_without_circularity (rtype))
9227 			    complete_type (rtype);
9228 
9229 			  if (!COMPLETE_TYPE_P (rtype))
9230 			    {
9231 			      cxx_incomplete_type_error (r, rtype);
9232 			      TREE_TYPE (r) = error_mark_node;
9233 			    }
9234 			}
9235 
9236 		      /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
9237 			 such a thing will already have been added to the field
9238 			 list by tsubst_enum in finish_member_declaration in the
9239 			 CLASSTYPE_NESTED_UTDS case above.  */
9240 		      if (!(TREE_CODE (r) == TYPE_DECL
9241 			    && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
9242 			    && DECL_ARTIFICIAL (r)))
9243 			{
9244 			  set_current_access_from_decl (r);
9245 			  finish_member_declaration (r);
9246 			}
9247 		    }
9248 		}
9249 	    }
9250 	}
9251       else
9252 	{
9253 	  if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t)
9254 	      || DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9255 	    {
9256 	      /* Build new CLASSTYPE_FRIEND_CLASSES.  */
9257 
9258 	      tree friend_type = t;
9259 	      bool adjust_processing_template_decl = false;
9260 
9261 	      if (TREE_CODE (friend_type) == TEMPLATE_DECL)
9262 		{
9263 		  /* template <class T> friend class C;  */
9264 		  friend_type = tsubst_friend_class (friend_type, args);
9265 		  adjust_processing_template_decl = true;
9266 		}
9267 	      else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
9268 		{
9269 		  /* template <class T> friend class C::D;  */
9270 		  friend_type = tsubst (friend_type, args,
9271 					tf_warning_or_error, NULL_TREE);
9272 		  if (TREE_CODE (friend_type) == TEMPLATE_DECL)
9273 		    friend_type = TREE_TYPE (friend_type);
9274 		  adjust_processing_template_decl = true;
9275 		}
9276 	      else if (TREE_CODE (friend_type) == TYPENAME_TYPE
9277 		       || TREE_CODE (friend_type) == TEMPLATE_TYPE_PARM)
9278 		{
9279 		  /* This could be either
9280 
9281 		       friend class T::C;
9282 
9283 		     when dependent_type_p is false or
9284 
9285 		       template <class U> friend class T::C;
9286 
9287 		     otherwise.  */
9288 		  friend_type = tsubst (friend_type, args,
9289 					tf_warning_or_error, NULL_TREE);
9290 		  /* Bump processing_template_decl for correct
9291 		     dependent_type_p calculation.  */
9292 		  ++processing_template_decl;
9293 		  if (dependent_type_p (friend_type))
9294 		    adjust_processing_template_decl = true;
9295 		  --processing_template_decl;
9296 		}
9297 	      else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
9298 		       && hidden_name_p (TYPE_NAME (friend_type)))
9299 		{
9300 		  /* friend class C;
9301 
9302 		     where C hasn't been declared yet.  Let's lookup name
9303 		     from namespace scope directly, bypassing any name that
9304 		     come from dependent base class.  */
9305 		  tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
9306 
9307 		  /* The call to xref_tag_from_type does injection for friend
9308 		     classes.  */
9309 		  push_nested_namespace (ns);
9310 		  friend_type =
9311 		    xref_tag_from_type (friend_type, NULL_TREE,
9312 					/*tag_scope=*/ts_current);
9313 		  pop_nested_namespace (ns);
9314 		}
9315 	      else if (uses_template_parms (friend_type))
9316 		/* friend class C<T>;  */
9317 		friend_type = tsubst (friend_type, args,
9318 				      tf_warning_or_error, NULL_TREE);
9319 	      /* Otherwise it's
9320 
9321 		   friend class C;
9322 
9323 		 where C is already declared or
9324 
9325 		   friend class C<int>;
9326 
9327 		 We don't have to do anything in these cases.  */
9328 
9329 	      if (adjust_processing_template_decl)
9330 		/* Trick make_friend_class into realizing that the friend
9331 		   we're adding is a template, not an ordinary class.  It's
9332 		   important that we use make_friend_class since it will
9333 		   perform some error-checking and output cross-reference
9334 		   information.  */
9335 		++processing_template_decl;
9336 
9337 	      if (friend_type != error_mark_node)
9338 		make_friend_class (type, friend_type, /*complain=*/false);
9339 
9340 	      if (adjust_processing_template_decl)
9341 		--processing_template_decl;
9342 	    }
9343 	  else
9344 	    {
9345 	      /* Build new DECL_FRIENDLIST.  */
9346 	      tree r;
9347 
9348 	      /* The file and line for this declaration, to
9349 		 assist in error message reporting.  Since we
9350 		 called push_tinst_level above, we don't need to
9351 		 restore these.  */
9352 	      input_location = DECL_SOURCE_LOCATION (t);
9353 
9354 	      if (TREE_CODE (t) == TEMPLATE_DECL)
9355 		{
9356 		  ++processing_template_decl;
9357 		  push_deferring_access_checks (dk_no_check);
9358 		}
9359 
9360 	      r = tsubst_friend_function (t, args);
9361 	      add_friend (type, r, /*complain=*/false);
9362 	      if (TREE_CODE (t) == TEMPLATE_DECL)
9363 		{
9364 		  pop_deferring_access_checks ();
9365 		  --processing_template_decl;
9366 		}
9367 	    }
9368 	}
9369     }
9370 
9371   if (tree expr = CLASSTYPE_LAMBDA_EXPR (type))
9372     {
9373       tree decl = lambda_function (type);
9374       if (decl)
9375 	{
9376 	  if (!DECL_TEMPLATE_INFO (decl)
9377 	      || DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (decl)) != decl)
9378 	    instantiate_decl (decl, false, false);
9379 
9380 	  /* We need to instantiate the capture list from the template
9381 	     after we've instantiated the closure members, but before we
9382 	     consider adding the conversion op.  Also keep any captures
9383 	     that may have been added during instantiation of the op().  */
9384 	  tree tmpl_expr = CLASSTYPE_LAMBDA_EXPR (pattern);
9385 	  tree tmpl_cap
9386 	    = tsubst_copy_and_build (LAMBDA_EXPR_CAPTURE_LIST (tmpl_expr),
9387 				     args, tf_warning_or_error, NULL_TREE,
9388 				     false, false);
9389 
9390 	  LAMBDA_EXPR_CAPTURE_LIST (expr)
9391 	    = chainon (tmpl_cap, nreverse (LAMBDA_EXPR_CAPTURE_LIST (expr)));
9392 
9393 	  maybe_add_lambda_conv_op (type);
9394 	}
9395       else
9396 	gcc_assert (errorcount);
9397     }
9398 
9399   /* Set the file and line number information to whatever is given for
9400      the class itself.  This puts error messages involving generated
9401      implicit functions at a predictable point, and the same point
9402      that would be used for non-template classes.  */
9403   input_location = DECL_SOURCE_LOCATION (typedecl);
9404 
9405   unreverse_member_declarations (type);
9406   finish_struct_1 (type);
9407   TYPE_BEING_DEFINED (type) = 0;
9408 
9409   /* We don't instantiate default arguments for member functions.  14.7.1:
9410 
9411      The implicit instantiation of a class template specialization causes
9412      the implicit instantiation of the declarations, but not of the
9413      definitions or default arguments, of the class member functions,
9414      member classes, static data members and member templates....  */
9415 
9416   /* Some typedefs referenced from within the template code need to be access
9417      checked at template instantiation time, i.e now. These types were
9418      added to the template at parsing time. Let's get those and perform
9419      the access checks then.  */
9420   perform_typedefs_access_check (pattern, args);
9421   perform_deferred_access_checks (tf_warning_or_error);
9422   pop_nested_class ();
9423   maximum_field_alignment = saved_maximum_field_alignment;
9424   if (!fn_context)
9425     pop_from_top_level ();
9426   pop_deferring_access_checks ();
9427   pop_tinst_level ();
9428 
9429   /* The vtable for a template class can be emitted in any translation
9430      unit in which the class is instantiated.  When there is no key
9431      method, however, finish_struct_1 will already have added TYPE to
9432      the keyed_classes list.  */
9433   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
9434     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
9435 
9436   return type;
9437 }
9438 
9439 /* Wrapper for instantiate_class_template_1.  */
9440 
9441 tree
instantiate_class_template(tree type)9442 instantiate_class_template (tree type)
9443 {
9444   tree ret;
9445   timevar_push (TV_TEMPLATE_INST);
9446   ret = instantiate_class_template_1 (type);
9447   timevar_pop (TV_TEMPLATE_INST);
9448   return ret;
9449 }
9450 
9451 static tree
tsubst_template_arg(tree t,tree args,tsubst_flags_t complain,tree in_decl)9452 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9453 {
9454   tree r;
9455 
9456   if (!t)
9457     r = t;
9458   else if (TYPE_P (t))
9459     r = tsubst (t, args, complain, in_decl);
9460   else
9461     {
9462       if (!(complain & tf_warning))
9463 	++c_inhibit_evaluation_warnings;
9464       r = tsubst_expr (t, args, complain, in_decl,
9465 		       /*integral_constant_expression_p=*/true);
9466       if (!(complain & tf_warning))
9467 	--c_inhibit_evaluation_warnings;
9468     }
9469   return r;
9470 }
9471 
9472 /* Given a function parameter pack TMPL_PARM and some function parameters
9473    instantiated from it at *SPEC_P, return a NONTYPE_ARGUMENT_PACK of them
9474    and set *SPEC_P to point at the next point in the list.  */
9475 
9476 static tree
extract_fnparm_pack(tree tmpl_parm,tree * spec_p)9477 extract_fnparm_pack (tree tmpl_parm, tree *spec_p)
9478 {
9479   /* Collect all of the extra "packed" parameters into an
9480      argument pack.  */
9481   tree parmvec;
9482   tree parmtypevec;
9483   tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
9484   tree argtypepack = cxx_make_type (TYPE_ARGUMENT_PACK);
9485   tree spec_parm = *spec_p;
9486   int i, len;
9487 
9488   for (len = 0; spec_parm; ++len, spec_parm = TREE_CHAIN (spec_parm))
9489     if (tmpl_parm
9490 	&& !function_parameter_expanded_from_pack_p (spec_parm, tmpl_parm))
9491       break;
9492 
9493   /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
9494   parmvec = make_tree_vec (len);
9495   parmtypevec = make_tree_vec (len);
9496   spec_parm = *spec_p;
9497   for (i = 0; i < len; i++, spec_parm = DECL_CHAIN (spec_parm))
9498     {
9499       TREE_VEC_ELT (parmvec, i) = spec_parm;
9500       TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
9501     }
9502 
9503   /* Build the argument packs.  */
9504   SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
9505   SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
9506   TREE_TYPE (argpack) = argtypepack;
9507   *spec_p = spec_parm;
9508 
9509   return argpack;
9510 }
9511 
9512 /* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
9513    NONTYPE_ARGUMENT_PACK.  */
9514 
9515 static tree
make_fnparm_pack(tree spec_parm)9516 make_fnparm_pack (tree spec_parm)
9517 {
9518   return extract_fnparm_pack (NULL_TREE, &spec_parm);
9519 }
9520 
9521 /* Return true iff the Ith element of the argument pack ARG_PACK is a
9522    pack expansion.  */
9523 
9524 static bool
argument_pack_element_is_expansion_p(tree arg_pack,int i)9525 argument_pack_element_is_expansion_p (tree arg_pack, int i)
9526 {
9527   tree vec = ARGUMENT_PACK_ARGS (arg_pack);
9528   if (i >= TREE_VEC_LENGTH (vec))
9529     return false;
9530   return PACK_EXPANSION_P (TREE_VEC_ELT (vec, i));
9531 }
9532 
9533 
9534 /* Creates and return an ARGUMENT_PACK_SELECT tree node.  */
9535 
9536 static tree
make_argument_pack_select(tree arg_pack,unsigned index)9537 make_argument_pack_select (tree arg_pack, unsigned index)
9538 {
9539   tree aps = make_node (ARGUMENT_PACK_SELECT);
9540 
9541   ARGUMENT_PACK_SELECT_FROM_PACK (aps) = arg_pack;
9542   ARGUMENT_PACK_SELECT_INDEX (aps) = index;
9543 
9544   return aps;
9545 }
9546 
9547 /*  This is a subroutine of tsubst_pack_expansion.
9548 
9549     It returns TRUE if we need to use the PACK_EXPANSION_EXTRA_ARGS
9550     mechanism to store the (non complete list of) arguments of the
9551     substitution and return a non substituted pack expansion, in order
9552     to wait for when we have enough arguments to really perform the
9553     substitution.  */
9554 
9555 static bool
use_pack_expansion_extra_args_p(tree parm_packs,int arg_pack_len,bool has_empty_arg)9556 use_pack_expansion_extra_args_p (tree parm_packs,
9557 				 int arg_pack_len,
9558 				 bool has_empty_arg)
9559 {
9560   /* If one pack has an expansion and another pack has a normal
9561      argument or if one pack has an empty argument and an another
9562      one hasn't then tsubst_pack_expansion cannot perform the
9563      substitution and need to fall back on the
9564      PACK_EXPANSION_EXTRA mechanism.  */
9565   if (parm_packs == NULL_TREE)
9566     return false;
9567   else if (has_empty_arg)
9568     return true;
9569 
9570   bool has_expansion_arg = false;
9571   for (int i = 0 ; i < arg_pack_len; ++i)
9572     {
9573       bool has_non_expansion_arg = false;
9574       for (tree parm_pack = parm_packs;
9575 	   parm_pack;
9576 	   parm_pack = TREE_CHAIN (parm_pack))
9577 	{
9578 	  tree arg = TREE_VALUE (parm_pack);
9579 
9580 	  if (argument_pack_element_is_expansion_p (arg, i))
9581 	    has_expansion_arg = true;
9582 	  else
9583 	    has_non_expansion_arg = true;
9584 	}
9585 
9586       if (has_expansion_arg && has_non_expansion_arg)
9587 	return true;
9588     }
9589   return false;
9590 }
9591 
9592 /* [temp.variadic]/6 says that:
9593 
9594        The instantiation of a pack expansion [...]
9595        produces a list E1,E2, ..., En, where N is the number of elements
9596        in the pack expansion parameters.
9597 
9598    This subroutine of tsubst_pack_expansion produces one of these Ei.
9599 
9600    PATTERN is the pattern of the pack expansion.  PARM_PACKS is a
9601    TREE_LIST in which each TREE_PURPOSE is a parameter pack of
9602    PATTERN, and each TREE_VALUE is its corresponding argument pack.
9603    INDEX is the index 'i' of the element Ei to produce.  ARGS,
9604    COMPLAIN, and IN_DECL are the same parameters as for the
9605    tsubst_pack_expansion function.
9606 
9607    The function returns the resulting Ei upon successful completion,
9608    or error_mark_node.
9609 
9610    Note that this function possibly modifies the ARGS parameter, so
9611    it's the responsibility of the caller to restore it.  */
9612 
9613 static tree
gen_elem_of_pack_expansion_instantiation(tree pattern,tree parm_packs,unsigned index,tree args,tsubst_flags_t complain,tree in_decl)9614 gen_elem_of_pack_expansion_instantiation (tree pattern,
9615 					  tree parm_packs,
9616 					  unsigned index,
9617 					  tree args /* This parm gets
9618 						       modified.  */,
9619 					  tsubst_flags_t complain,
9620 					  tree in_decl)
9621 {
9622   tree t;
9623   bool ith_elem_is_expansion = false;
9624 
9625   /* For each parameter pack, change the substitution of the parameter
9626      pack to the ith argument in its argument pack, then expand the
9627      pattern.  */
9628   for (tree pack = parm_packs; pack; pack = TREE_CHAIN (pack))
9629     {
9630       tree parm = TREE_PURPOSE (pack);
9631       tree arg_pack = TREE_VALUE (pack);
9632       tree aps;			/* instance of ARGUMENT_PACK_SELECT.  */
9633 
9634       ith_elem_is_expansion |=
9635 	argument_pack_element_is_expansion_p (arg_pack, index);
9636 
9637       /* Select the Ith argument from the pack.  */
9638       if (TREE_CODE (parm) == PARM_DECL
9639 	  || TREE_CODE (parm) == FIELD_DECL)
9640 	{
9641 	  if (index == 0)
9642 	    {
9643 	      aps = make_argument_pack_select (arg_pack, index);
9644 	      mark_used (parm);
9645 	      register_local_specialization (aps, parm);
9646 	    }
9647 	  else
9648 	    aps = retrieve_local_specialization (parm);
9649 	}
9650       else
9651 	{
9652 	  int idx, level;
9653 	  template_parm_level_and_index (parm, &level, &idx);
9654 
9655 	  if (index == 0)
9656 	    {
9657 	      aps = make_argument_pack_select (arg_pack, index);
9658 	      /* Update the corresponding argument.  */
9659 	      TMPL_ARG (args, level, idx) = aps;
9660 	    }
9661 	  else
9662 	    /* Re-use the ARGUMENT_PACK_SELECT.  */
9663 	    aps = TMPL_ARG (args, level, idx);
9664 	}
9665       ARGUMENT_PACK_SELECT_INDEX (aps) = index;
9666     }
9667 
9668   /* Substitute into the PATTERN with the (possibly altered)
9669      arguments.  */
9670   if (pattern == in_decl)
9671     /* Expanding a fixed parameter pack from
9672        coerce_template_parameter_pack.  */
9673     t = tsubst_decl (pattern, args, complain);
9674   else if (!TYPE_P (pattern))
9675     t = tsubst_expr (pattern, args, complain, in_decl,
9676 		     /*integral_constant_expression_p=*/false);
9677   else
9678     t = tsubst (pattern, args, complain, in_decl);
9679 
9680   /*  If the Ith argument pack element is a pack expansion, then
9681       the Ith element resulting from the substituting is going to
9682       be a pack expansion as well.  */
9683   if (ith_elem_is_expansion)
9684     t = make_pack_expansion (t);
9685 
9686   return t;
9687 }
9688 
9689 /* Substitute ARGS into T, which is an pack expansion
9690    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
9691    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
9692    (if only a partial substitution could be performed) or
9693    ERROR_MARK_NODE if there was an error.  */
9694 tree
tsubst_pack_expansion(tree t,tree args,tsubst_flags_t complain,tree in_decl)9695 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
9696 		       tree in_decl)
9697 {
9698   tree pattern;
9699   tree pack, packs = NULL_TREE;
9700   bool unsubstituted_packs = false;
9701   int i, len = -1;
9702   tree result;
9703   struct pointer_map_t *saved_local_specializations = NULL;
9704   bool need_local_specializations = false;
9705   int levels;
9706 
9707   gcc_assert (PACK_EXPANSION_P (t));
9708   pattern = PACK_EXPANSION_PATTERN (t);
9709 
9710   /* Add in any args remembered from an earlier partial instantiation.  */
9711   args = add_to_template_args (PACK_EXPANSION_EXTRA_ARGS (t), args);
9712 
9713   levels = TMPL_ARGS_DEPTH (args);
9714 
9715   /* Determine the argument packs that will instantiate the parameter
9716      packs used in the expansion expression. While we're at it,
9717      compute the number of arguments to be expanded and make sure it
9718      is consistent.  */
9719   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack;
9720        pack = TREE_CHAIN (pack))
9721     {
9722       tree parm_pack = TREE_VALUE (pack);
9723       tree arg_pack = NULL_TREE;
9724       tree orig_arg = NULL_TREE;
9725       int level = 0;
9726 
9727       if (TREE_CODE (parm_pack) == BASES)
9728        {
9729          if (BASES_DIRECT (parm_pack))
9730            return calculate_direct_bases (tsubst_expr (BASES_TYPE (parm_pack),
9731                                                         args, complain, in_decl, false));
9732          else
9733            return calculate_bases (tsubst_expr (BASES_TYPE (parm_pack),
9734                                                  args, complain, in_decl, false));
9735        }
9736       if (TREE_CODE (parm_pack) == PARM_DECL)
9737 	{
9738 	  if (PACK_EXPANSION_LOCAL_P (t))
9739 	    arg_pack = retrieve_local_specialization (parm_pack);
9740 	  else
9741 	    {
9742 	      /* We can't rely on local_specializations for a parameter
9743 		 name used later in a function declaration (such as in a
9744 		 late-specified return type).  Even if it exists, it might
9745 		 have the wrong value for a recursive call.  Just make a
9746 		 dummy decl, since it's only used for its type.  */
9747 	      arg_pack = tsubst_decl (parm_pack, args, complain);
9748 	      if (arg_pack && DECL_PACK_P (arg_pack))
9749 		/* Partial instantiation of the parm_pack, we can't build
9750 		   up an argument pack yet.  */
9751 		arg_pack = NULL_TREE;
9752 	      else
9753 		arg_pack = make_fnparm_pack (arg_pack);
9754 	      need_local_specializations = true;
9755 	    }
9756 	}
9757       else if (TREE_CODE (parm_pack) == FIELD_DECL)
9758 	arg_pack = tsubst_copy (parm_pack, args, complain, in_decl);
9759       else
9760         {
9761 	  int idx;
9762           template_parm_level_and_index (parm_pack, &level, &idx);
9763 
9764           if (level <= levels)
9765             arg_pack = TMPL_ARG (args, level, idx);
9766         }
9767 
9768       orig_arg = arg_pack;
9769       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
9770 	arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
9771 
9772       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
9773 	/* This can only happen if we forget to expand an argument
9774 	   pack somewhere else. Just return an error, silently.  */
9775 	{
9776 	  result = make_tree_vec (1);
9777 	  TREE_VEC_ELT (result, 0) = error_mark_node;
9778 	  return result;
9779 	}
9780 
9781       if (arg_pack)
9782         {
9783           int my_len =
9784             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
9785 
9786 	  /* Don't bother trying to do a partial substitution with
9787 	     incomplete packs; we'll try again after deduction.  */
9788           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
9789             return t;
9790 
9791           if (len < 0)
9792 	    len = my_len;
9793           else if (len != my_len)
9794             {
9795 	      if (!(complain & tf_error))
9796 		/* Fail quietly.  */;
9797               else if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
9798                 error ("mismatched argument pack lengths while expanding "
9799                        "%<%T%>",
9800                        pattern);
9801               else
9802                 error ("mismatched argument pack lengths while expanding "
9803                        "%<%E%>",
9804                        pattern);
9805               return error_mark_node;
9806             }
9807 
9808           /* Keep track of the parameter packs and their corresponding
9809              argument packs.  */
9810           packs = tree_cons (parm_pack, arg_pack, packs);
9811           TREE_TYPE (packs) = orig_arg;
9812         }
9813       else
9814 	{
9815 	  /* We can't substitute for this parameter pack.  We use a flag as
9816 	     well as the missing_level counter because function parameter
9817 	     packs don't have a level.  */
9818 	  unsubstituted_packs = true;
9819 	}
9820     }
9821 
9822   /* If the expansion is just T..., return the matching argument pack.  */
9823   if (!unsubstituted_packs
9824       && TREE_PURPOSE (packs) == pattern)
9825     {
9826       tree args = ARGUMENT_PACK_ARGS (TREE_VALUE (packs));
9827       if (TREE_CODE (t) == TYPE_PACK_EXPANSION
9828 	  || pack_expansion_args_count (args))
9829 	return args;
9830       /* Otherwise use the normal path so we get convert_from_reference.  */
9831     }
9832 
9833   /* We cannot expand this expansion expression, because we don't have
9834      all of the argument packs we need.  */
9835   if (use_pack_expansion_extra_args_p (packs, len, unsubstituted_packs))
9836     {
9837       /* We got some full packs, but we can't substitute them in until we
9838 	 have values for all the packs.  So remember these until then.  */
9839 
9840       t = make_pack_expansion (pattern);
9841       PACK_EXPANSION_EXTRA_ARGS (t) = args;
9842       return t;
9843     }
9844   else if (unsubstituted_packs)
9845     {
9846       /* There were no real arguments, we're just replacing a parameter
9847 	 pack with another version of itself. Substitute into the
9848 	 pattern and return a PACK_EXPANSION_*. The caller will need to
9849 	 deal with that.  */
9850       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
9851 	t = tsubst_expr (pattern, args, complain, in_decl,
9852 			 /*integral_constant_expression_p=*/false);
9853       else
9854 	t = tsubst (pattern, args, complain, in_decl);
9855       t = make_pack_expansion (t);
9856       return t;
9857     }
9858 
9859   gcc_assert (len >= 0);
9860 
9861   if (need_local_specializations)
9862     {
9863       /* We're in a late-specified return type, so create our own local
9864 	 specializations map; the current map is either NULL or (in the
9865 	 case of recursive unification) might have bindings that we don't
9866 	 want to use or alter.  */
9867       saved_local_specializations = local_specializations;
9868       local_specializations = pointer_map_create ();
9869     }
9870 
9871   /* For each argument in each argument pack, substitute into the
9872      pattern.  */
9873   result = make_tree_vec (len);
9874   for (i = 0; i < len; ++i)
9875     {
9876       t = gen_elem_of_pack_expansion_instantiation (pattern, packs,
9877 						    i,
9878 						    args, complain,
9879 						    in_decl);
9880       TREE_VEC_ELT (result, i) = t;
9881       if (t == error_mark_node)
9882 	{
9883 	  result = error_mark_node;
9884 	  break;
9885 	}
9886     }
9887 
9888   /* Update ARGS to restore the substitution from parameter packs to
9889      their argument packs.  */
9890   for (pack = packs; pack; pack = TREE_CHAIN (pack))
9891     {
9892       tree parm = TREE_PURPOSE (pack);
9893 
9894       if (TREE_CODE (parm) == PARM_DECL
9895 	  || TREE_CODE (parm) == FIELD_DECL)
9896         register_local_specialization (TREE_TYPE (pack), parm);
9897       else
9898         {
9899           int idx, level;
9900 
9901 	  if (TREE_VALUE (pack) == NULL_TREE)
9902 	    continue;
9903 
9904           template_parm_level_and_index (parm, &level, &idx);
9905 
9906           /* Update the corresponding argument.  */
9907           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
9908             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
9909               TREE_TYPE (pack);
9910           else
9911             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
9912         }
9913     }
9914 
9915   if (need_local_specializations)
9916     {
9917       pointer_map_destroy (local_specializations);
9918       local_specializations = saved_local_specializations;
9919     }
9920 
9921   return result;
9922 }
9923 
9924 /* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
9925    TMPL.  We do this using DECL_PARM_INDEX, which should work even with
9926    parameter packs; all parms generated from a function parameter pack will
9927    have the same DECL_PARM_INDEX.  */
9928 
9929 tree
get_pattern_parm(tree parm,tree tmpl)9930 get_pattern_parm (tree parm, tree tmpl)
9931 {
9932   tree pattern = DECL_TEMPLATE_RESULT (tmpl);
9933   tree patparm;
9934 
9935   if (DECL_ARTIFICIAL (parm))
9936     {
9937       for (patparm = DECL_ARGUMENTS (pattern);
9938 	   patparm; patparm = DECL_CHAIN (patparm))
9939 	if (DECL_ARTIFICIAL (patparm)
9940 	    && DECL_NAME (parm) == DECL_NAME (patparm))
9941 	  break;
9942     }
9943   else
9944     {
9945       patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
9946       patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
9947       gcc_assert (DECL_PARM_INDEX (patparm)
9948 		  == DECL_PARM_INDEX (parm));
9949     }
9950 
9951   return patparm;
9952 }
9953 
9954 /* Substitute ARGS into the vector or list of template arguments T.  */
9955 
9956 static tree
tsubst_template_args(tree t,tree args,tsubst_flags_t complain,tree in_decl)9957 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9958 {
9959   tree orig_t = t;
9960   int len, need_new = 0, i, expanded_len_adjust = 0, out;
9961   tree *elts;
9962 
9963   if (t == error_mark_node)
9964     return error_mark_node;
9965 
9966   len = TREE_VEC_LENGTH (t);
9967   elts = XALLOCAVEC (tree, len);
9968 
9969   for (i = 0; i < len; i++)
9970     {
9971       tree orig_arg = TREE_VEC_ELT (t, i);
9972       tree new_arg;
9973 
9974       if (TREE_CODE (orig_arg) == TREE_VEC)
9975 	new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
9976       else if (PACK_EXPANSION_P (orig_arg))
9977         {
9978           /* Substitute into an expansion expression.  */
9979           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
9980 
9981           if (TREE_CODE (new_arg) == TREE_VEC)
9982             /* Add to the expanded length adjustment the number of
9983                expanded arguments. We subtract one from this
9984                measurement, because the argument pack expression
9985                itself is already counted as 1 in
9986                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
9987                the argument pack is empty.  */
9988             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
9989         }
9990       else if (ARGUMENT_PACK_P (orig_arg))
9991         {
9992           /* Substitute into each of the arguments.  */
9993           new_arg = TYPE_P (orig_arg)
9994             ? cxx_make_type (TREE_CODE (orig_arg))
9995             : make_node (TREE_CODE (orig_arg));
9996 
9997           SET_ARGUMENT_PACK_ARGS (
9998             new_arg,
9999             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
10000                                   args, complain, in_decl));
10001 
10002           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
10003             new_arg = error_mark_node;
10004 
10005           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
10006             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
10007                                           complain, in_decl);
10008             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
10009 
10010             if (TREE_TYPE (new_arg) == error_mark_node)
10011               new_arg = error_mark_node;
10012           }
10013         }
10014       else
10015 	new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
10016 
10017       if (new_arg == error_mark_node)
10018 	return error_mark_node;
10019 
10020       elts[i] = new_arg;
10021       if (new_arg != orig_arg)
10022 	need_new = 1;
10023     }
10024 
10025   if (!need_new)
10026     return t;
10027 
10028   /* Make space for the expanded arguments coming from template
10029      argument packs.  */
10030   t = make_tree_vec (len + expanded_len_adjust);
10031   /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
10032      arguments for a member template.
10033      In that case each TREE_VEC in ORIG_T represents a level of template
10034      arguments, and ORIG_T won't carry any non defaulted argument count.
10035      It will rather be the nested TREE_VECs that will carry one.
10036      In other words, ORIG_T carries a non defaulted argument count only
10037      if it doesn't contain any nested TREE_VEC.  */
10038   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
10039     {
10040       int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
10041       count += expanded_len_adjust;
10042       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
10043     }
10044   for (i = 0, out = 0; i < len; i++)
10045     {
10046       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
10047            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
10048           && TREE_CODE (elts[i]) == TREE_VEC)
10049         {
10050           int idx;
10051 
10052           /* Now expand the template argument pack "in place".  */
10053           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
10054             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
10055         }
10056       else
10057         {
10058           TREE_VEC_ELT (t, out) = elts[i];
10059           out++;
10060         }
10061     }
10062 
10063   return t;
10064 }
10065 
10066 /* Return the result of substituting ARGS into the template parameters
10067    given by PARMS.  If there are m levels of ARGS and m + n levels of
10068    PARMS, then the result will contain n levels of PARMS.  For
10069    example, if PARMS is `template <class T> template <class U>
10070    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
10071    result will be `template <int*, double, class V>'.  */
10072 
10073 static tree
tsubst_template_parms(tree parms,tree args,tsubst_flags_t complain)10074 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
10075 {
10076   tree r = NULL_TREE;
10077   tree* new_parms;
10078 
10079   /* When substituting into a template, we must set
10080      PROCESSING_TEMPLATE_DECL as the template parameters may be
10081      dependent if they are based on one-another, and the dependency
10082      predicates are short-circuit outside of templates.  */
10083   ++processing_template_decl;
10084 
10085   for (new_parms = &r;
10086        parms && TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
10087        new_parms = &(TREE_CHAIN (*new_parms)),
10088 	 parms = TREE_CHAIN (parms))
10089     {
10090       tree new_vec =
10091 	make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
10092       int i;
10093 
10094       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
10095 	{
10096           tree tuple;
10097 
10098           if (parms == error_mark_node)
10099             continue;
10100 
10101           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
10102 
10103           if (tuple == error_mark_node)
10104             continue;
10105 
10106 	  TREE_VEC_ELT (new_vec, i) =
10107 	    tsubst_template_parm (tuple, args, complain);
10108 	}
10109 
10110       *new_parms =
10111 	tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
10112 			     - TMPL_ARGS_DEPTH (args)),
10113 		   new_vec, NULL_TREE);
10114     }
10115 
10116   --processing_template_decl;
10117 
10118   return r;
10119 }
10120 
10121 /* Return the result of substituting ARGS into one template parameter
10122    given by T. T Must be a TREE_LIST which TREE_VALUE is the template
10123    parameter and which TREE_PURPOSE is the default argument of the
10124    template parameter.  */
10125 
10126 static tree
tsubst_template_parm(tree t,tree args,tsubst_flags_t complain)10127 tsubst_template_parm (tree t, tree args, tsubst_flags_t complain)
10128 {
10129   tree default_value, parm_decl;
10130 
10131   if (args == NULL_TREE
10132       || t == NULL_TREE
10133       || t == error_mark_node)
10134     return t;
10135 
10136   gcc_assert (TREE_CODE (t) == TREE_LIST);
10137 
10138   default_value = TREE_PURPOSE (t);
10139   parm_decl = TREE_VALUE (t);
10140 
10141   parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
10142   if (TREE_CODE (parm_decl) == PARM_DECL
10143       && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
10144     parm_decl = error_mark_node;
10145   default_value = tsubst_template_arg (default_value, args,
10146 				       complain, NULL_TREE);
10147 
10148   return build_tree_list (default_value, parm_decl);
10149 }
10150 
10151 /* Substitute the ARGS into the indicated aggregate (or enumeration)
10152    type T.  If T is not an aggregate or enumeration type, it is
10153    handled as if by tsubst.  IN_DECL is as for tsubst.  If
10154    ENTERING_SCOPE is nonzero, T is the context for a template which
10155    we are presently tsubst'ing.  Return the substituted value.  */
10156 
10157 static tree
tsubst_aggr_type(tree t,tree args,tsubst_flags_t complain,tree in_decl,int entering_scope)10158 tsubst_aggr_type (tree t,
10159 		  tree args,
10160 		  tsubst_flags_t complain,
10161 		  tree in_decl,
10162 		  int entering_scope)
10163 {
10164   if (t == NULL_TREE)
10165     return NULL_TREE;
10166 
10167   switch (TREE_CODE (t))
10168     {
10169     case RECORD_TYPE:
10170       if (TYPE_PTRMEMFUNC_P (t))
10171 	return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
10172 
10173       /* Else fall through.  */
10174     case ENUMERAL_TYPE:
10175     case UNION_TYPE:
10176       if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
10177 	{
10178 	  tree argvec;
10179 	  tree context;
10180 	  tree r;
10181 	  int saved_unevaluated_operand;
10182 	  int saved_inhibit_evaluation_warnings;
10183 
10184 	  /* In "sizeof(X<I>)" we need to evaluate "I".  */
10185 	  saved_unevaluated_operand = cp_unevaluated_operand;
10186 	  cp_unevaluated_operand = 0;
10187 	  saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
10188 	  c_inhibit_evaluation_warnings = 0;
10189 
10190 	  /* First, determine the context for the type we are looking
10191 	     up.  */
10192 	  context = TYPE_CONTEXT (t);
10193 	  if (context && TYPE_P (context))
10194 	    {
10195 	      context = tsubst_aggr_type (context, args, complain,
10196 					  in_decl, /*entering_scope=*/1);
10197 	      /* If context is a nested class inside a class template,
10198 	         it may still need to be instantiated (c++/33959).  */
10199 	      context = complete_type (context);
10200 	    }
10201 
10202 	  /* Then, figure out what arguments are appropriate for the
10203 	     type we are trying to find.  For example, given:
10204 
10205 	       template <class T> struct S;
10206 	       template <class T, class U> void f(T, U) { S<U> su; }
10207 
10208 	     and supposing that we are instantiating f<int, double>,
10209 	     then our ARGS will be {int, double}, but, when looking up
10210 	     S we only want {double}.  */
10211 	  argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
10212 					 complain, in_decl);
10213 	  if (argvec == error_mark_node)
10214 	    r = error_mark_node;
10215 	  else
10216 	    {
10217 	      r = lookup_template_class (t, argvec, in_decl, context,
10218 					 entering_scope, complain);
10219 	      r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
10220 	    }
10221 
10222 	  cp_unevaluated_operand = saved_unevaluated_operand;
10223 	  c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
10224 
10225 	  return r;
10226 	}
10227       else
10228 	/* This is not a template type, so there's nothing to do.  */
10229 	return t;
10230 
10231     default:
10232       return tsubst (t, args, complain, in_decl);
10233     }
10234 }
10235 
10236 /* Substitute into the default argument ARG (a default argument for
10237    FN), which has the indicated TYPE.  */
10238 
10239 tree
tsubst_default_argument(tree fn,tree type,tree arg,tsubst_flags_t complain)10240 tsubst_default_argument (tree fn, tree type, tree arg, tsubst_flags_t complain)
10241 {
10242   tree saved_class_ptr = NULL_TREE;
10243   tree saved_class_ref = NULL_TREE;
10244   int errs = errorcount + sorrycount;
10245 
10246   /* This can happen in invalid code.  */
10247   if (TREE_CODE (arg) == DEFAULT_ARG)
10248     return arg;
10249 
10250   /* This default argument came from a template.  Instantiate the
10251      default argument here, not in tsubst.  In the case of
10252      something like:
10253 
10254        template <class T>
10255        struct S {
10256 	 static T t();
10257 	 void f(T = t());
10258        };
10259 
10260      we must be careful to do name lookup in the scope of S<T>,
10261      rather than in the current class.  */
10262   push_access_scope (fn);
10263   /* The "this" pointer is not valid in a default argument.  */
10264   if (cfun)
10265     {
10266       saved_class_ptr = current_class_ptr;
10267       cp_function_chain->x_current_class_ptr = NULL_TREE;
10268       saved_class_ref = current_class_ref;
10269       cp_function_chain->x_current_class_ref = NULL_TREE;
10270     }
10271 
10272   push_deferring_access_checks(dk_no_deferred);
10273   /* The default argument expression may cause implicitly defined
10274      member functions to be synthesized, which will result in garbage
10275      collection.  We must treat this situation as if we were within
10276      the body of function so as to avoid collecting live data on the
10277      stack.  */
10278   ++function_depth;
10279   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
10280 		     complain, NULL_TREE,
10281 		     /*integral_constant_expression_p=*/false);
10282   --function_depth;
10283   pop_deferring_access_checks();
10284 
10285   /* Restore the "this" pointer.  */
10286   if (cfun)
10287     {
10288       cp_function_chain->x_current_class_ptr = saved_class_ptr;
10289       cp_function_chain->x_current_class_ref = saved_class_ref;
10290     }
10291 
10292   if (errorcount+sorrycount > errs
10293       && (complain & tf_warning_or_error))
10294     inform (input_location,
10295 	    "  when instantiating default argument for call to %D", fn);
10296 
10297   /* Make sure the default argument is reasonable.  */
10298   arg = check_default_argument (type, arg, complain);
10299 
10300   pop_access_scope (fn);
10301 
10302   return arg;
10303 }
10304 
10305 /* Substitute into all the default arguments for FN.  */
10306 
10307 static void
tsubst_default_arguments(tree fn,tsubst_flags_t complain)10308 tsubst_default_arguments (tree fn, tsubst_flags_t complain)
10309 {
10310   tree arg;
10311   tree tmpl_args;
10312 
10313   tmpl_args = DECL_TI_ARGS (fn);
10314 
10315   /* If this function is not yet instantiated, we certainly don't need
10316      its default arguments.  */
10317   if (uses_template_parms (tmpl_args))
10318     return;
10319   /* Don't do this again for clones.  */
10320   if (DECL_CLONED_FUNCTION_P (fn))
10321     return;
10322 
10323   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
10324        arg;
10325        arg = TREE_CHAIN (arg))
10326     if (TREE_PURPOSE (arg))
10327       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
10328 						    TREE_VALUE (arg),
10329 						    TREE_PURPOSE (arg),
10330 						    complain);
10331 }
10332 
10333 /* Substitute the ARGS into the T, which is a _DECL.  Return the
10334    result of the substitution.  Issue error and warning messages under
10335    control of COMPLAIN.  */
10336 
10337 static tree
tsubst_decl(tree t,tree args,tsubst_flags_t complain)10338 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
10339 {
10340 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
10341   location_t saved_loc;
10342   tree r = NULL_TREE;
10343   tree in_decl = t;
10344   hashval_t hash = 0;
10345 
10346   /* Set the filename and linenumber to improve error-reporting.  */
10347   saved_loc = input_location;
10348   input_location = DECL_SOURCE_LOCATION (t);
10349 
10350   switch (TREE_CODE (t))
10351     {
10352     case TEMPLATE_DECL:
10353       {
10354 	/* We can get here when processing a member function template,
10355 	   member class template, or template template parameter.  */
10356 	tree decl = DECL_TEMPLATE_RESULT (t);
10357 	tree spec;
10358 	tree tmpl_args;
10359 	tree full_args;
10360 
10361 	if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
10362 	  {
10363 	    /* Template template parameter is treated here.  */
10364 	    tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10365 	    if (new_type == error_mark_node)
10366 	      RETURN (error_mark_node);
10367 	    /* If we get a real template back, return it.  This can happen in
10368 	       the context of most_specialized_class.  */
10369 	    if (TREE_CODE (new_type) == TEMPLATE_DECL)
10370 	      return new_type;
10371 
10372 	    r = copy_decl (t);
10373 	    DECL_CHAIN (r) = NULL_TREE;
10374 	    TREE_TYPE (r) = new_type;
10375 	    DECL_TEMPLATE_RESULT (r)
10376 	      = build_decl (DECL_SOURCE_LOCATION (decl),
10377 			    TYPE_DECL, DECL_NAME (decl), new_type);
10378 	    DECL_TEMPLATE_PARMS (r)
10379 	      = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
10380 				       complain);
10381 	    TYPE_NAME (new_type) = r;
10382 	    break;
10383 	  }
10384 
10385 	/* We might already have an instance of this template.
10386 	   The ARGS are for the surrounding class type, so the
10387 	   full args contain the tsubst'd args for the context,
10388 	   plus the innermost args from the template decl.  */
10389 	tmpl_args = DECL_CLASS_TEMPLATE_P (t)
10390 	  ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
10391 	  : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
10392 	/* Because this is a template, the arguments will still be
10393 	   dependent, even after substitution.  If
10394 	   PROCESSING_TEMPLATE_DECL is not set, the dependency
10395 	   predicates will short-circuit.  */
10396 	++processing_template_decl;
10397 	full_args = tsubst_template_args (tmpl_args, args,
10398 					  complain, in_decl);
10399 	--processing_template_decl;
10400 	if (full_args == error_mark_node)
10401 	  RETURN (error_mark_node);
10402 
10403 	/* If this is a default template template argument,
10404 	   tsubst might not have changed anything.  */
10405 	if (full_args == tmpl_args)
10406 	  RETURN (t);
10407 
10408 	hash = hash_tmpl_and_args (t, full_args);
10409 	spec = retrieve_specialization (t, full_args, hash);
10410 	if (spec != NULL_TREE)
10411 	  {
10412 	    r = spec;
10413 	    break;
10414 	  }
10415 
10416 	/* Make a new template decl.  It will be similar to the
10417 	   original, but will record the current template arguments.
10418 	   We also create a new function declaration, which is just
10419 	   like the old one, but points to this new template, rather
10420 	   than the old one.  */
10421 	r = copy_decl (t);
10422 	gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
10423 	DECL_CHAIN (r) = NULL_TREE;
10424 
10425 	DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
10426 
10427 	if (TREE_CODE (decl) == TYPE_DECL
10428 	    && !TYPE_DECL_ALIAS_P (decl))
10429 	  {
10430 	    tree new_type;
10431 	    ++processing_template_decl;
10432 	    new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10433 	    --processing_template_decl;
10434 	    if (new_type == error_mark_node)
10435 	      RETURN (error_mark_node);
10436 
10437 	    TREE_TYPE (r) = new_type;
10438 	    /* For a partial specialization, we need to keep pointing to
10439 	       the primary template.  */
10440 	    if (!DECL_TEMPLATE_SPECIALIZATION (t))
10441 	      CLASSTYPE_TI_TEMPLATE (new_type) = r;
10442 	    DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
10443 	    DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
10444 	    DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
10445 	  }
10446 	else
10447 	  {
10448 	    tree new_decl;
10449 	    ++processing_template_decl;
10450 	    new_decl = tsubst (decl, args, complain, in_decl);
10451 	    --processing_template_decl;
10452 	    if (new_decl == error_mark_node)
10453 	      RETURN (error_mark_node);
10454 
10455 	    DECL_TEMPLATE_RESULT (r) = new_decl;
10456 	    DECL_TI_TEMPLATE (new_decl) = r;
10457 	    TREE_TYPE (r) = TREE_TYPE (new_decl);
10458 	    DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
10459 	    DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
10460 	  }
10461 
10462 	SET_DECL_IMPLICIT_INSTANTIATION (r);
10463 	DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
10464 	DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
10465 
10466 	/* The template parameters for this new template are all the
10467 	   template parameters for the old template, except the
10468 	   outermost level of parameters.  */
10469 	DECL_TEMPLATE_PARMS (r)
10470 	  = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
10471 				   complain);
10472 
10473 	if (PRIMARY_TEMPLATE_P (t))
10474 	  DECL_PRIMARY_TEMPLATE (r) = r;
10475 
10476 	if (TREE_CODE (decl) != TYPE_DECL)
10477 	  /* Record this non-type partial instantiation.  */
10478 	  register_specialization (r, t,
10479 				   DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
10480 				   false, hash);
10481       }
10482       break;
10483 
10484     case FUNCTION_DECL:
10485       {
10486 	tree ctx;
10487 	tree argvec = NULL_TREE;
10488 	tree *friends;
10489 	tree gen_tmpl;
10490 	tree type;
10491 	int member;
10492 	int args_depth;
10493 	int parms_depth;
10494 
10495 	/* Nobody should be tsubst'ing into non-template functions.  */
10496 	gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
10497 
10498 	if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
10499 	  {
10500 	    tree spec;
10501 	    bool dependent_p;
10502 
10503 	    /* If T is not dependent, just return it.  We have to
10504 	       increment PROCESSING_TEMPLATE_DECL because
10505 	       value_dependent_expression_p assumes that nothing is
10506 	       dependent when PROCESSING_TEMPLATE_DECL is zero.  */
10507 	    ++processing_template_decl;
10508 	    dependent_p = value_dependent_expression_p (t);
10509 	    --processing_template_decl;
10510 	    if (!dependent_p)
10511 	      RETURN (t);
10512 
10513 	    /* Calculate the most general template of which R is a
10514 	       specialization, and the complete set of arguments used to
10515 	       specialize R.  */
10516 	    gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
10517 	    argvec = tsubst_template_args (DECL_TI_ARGS
10518                                           (DECL_TEMPLATE_RESULT
10519                                                  (DECL_TI_TEMPLATE (t))),
10520 					   args, complain, in_decl);
10521 	    if (argvec == error_mark_node)
10522 	      RETURN (error_mark_node);
10523 
10524 	    /* Check to see if we already have this specialization.  */
10525 	    hash = hash_tmpl_and_args (gen_tmpl, argvec);
10526 	    spec = retrieve_specialization (gen_tmpl, argvec, hash);
10527 
10528 	    if (spec)
10529 	      {
10530 		r = spec;
10531 		break;
10532 	      }
10533 
10534 	    /* We can see more levels of arguments than parameters if
10535 	       there was a specialization of a member template, like
10536 	       this:
10537 
10538 		 template <class T> struct S { template <class U> void f(); }
10539 		 template <> template <class U> void S<int>::f(U);
10540 
10541 	       Here, we'll be substituting into the specialization,
10542 	       because that's where we can find the code we actually
10543 	       want to generate, but we'll have enough arguments for
10544 	       the most general template.
10545 
10546 	       We also deal with the peculiar case:
10547 
10548 		 template <class T> struct S {
10549 		   template <class U> friend void f();
10550 		 };
10551 		 template <class U> void f() {}
10552 		 template S<int>;
10553 		 template void f<double>();
10554 
10555 	       Here, the ARGS for the instantiation of will be {int,
10556 	       double}.  But, we only need as many ARGS as there are
10557 	       levels of template parameters in CODE_PATTERN.  We are
10558 	       careful not to get fooled into reducing the ARGS in
10559 	       situations like:
10560 
10561 		 template <class T> struct S { template <class U> void f(U); }
10562 		 template <class T> template <> void S<T>::f(int) {}
10563 
10564 	       which we can spot because the pattern will be a
10565 	       specialization in this case.  */
10566 	    args_depth = TMPL_ARGS_DEPTH (args);
10567 	    parms_depth =
10568 	      TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
10569 	    if (args_depth > parms_depth
10570 		&& !DECL_TEMPLATE_SPECIALIZATION (t))
10571 	      args = get_innermost_template_args (args, parms_depth);
10572 	  }
10573 	else
10574 	  {
10575 	    /* This special case arises when we have something like this:
10576 
10577 		 template <class T> struct S {
10578 		   friend void f<int>(int, double);
10579 		 };
10580 
10581 	       Here, the DECL_TI_TEMPLATE for the friend declaration
10582 	       will be an IDENTIFIER_NODE.  We are being called from
10583 	       tsubst_friend_function, and we want only to create a
10584 	       new decl (R) with appropriate types so that we can call
10585 	       determine_specialization.  */
10586 	    gen_tmpl = NULL_TREE;
10587 	  }
10588 
10589 	if (DECL_CLASS_SCOPE_P (t))
10590 	  {
10591 	    if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
10592 	      member = 2;
10593 	    else
10594 	      member = 1;
10595 	    ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
10596 				    complain, t, /*entering_scope=*/1);
10597 	  }
10598 	else
10599 	  {
10600 	    member = 0;
10601 	    ctx = DECL_CONTEXT (t);
10602 	  }
10603 	type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10604 	if (type == error_mark_node)
10605 	  RETURN (error_mark_node);
10606 
10607 	/* If we hit excessive deduction depth, the type is bogus even if
10608 	   it isn't error_mark_node, so don't build a decl.  */
10609 	if (excessive_deduction_depth)
10610 	  RETURN (error_mark_node);
10611 
10612 	/* We do NOT check for matching decls pushed separately at this
10613 	   point, as they may not represent instantiations of this
10614 	   template, and in any case are considered separate under the
10615 	   discrete model.  */
10616 	r = copy_decl (t);
10617 	DECL_USE_TEMPLATE (r) = 0;
10618 	TREE_TYPE (r) = type;
10619 	/* Clear out the mangled name and RTL for the instantiation.  */
10620 	SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
10621 	SET_DECL_RTL (r, NULL);
10622 	/* Leave DECL_INITIAL set on deleted instantiations.  */
10623 	if (!DECL_DELETED_FN (r))
10624 	  DECL_INITIAL (r) = NULL_TREE;
10625 	DECL_CONTEXT (r) = ctx;
10626 
10627 	/* OpenMP UDRs have the only argument a reference to the declared
10628 	   type.  We want to diagnose if the declared type is a reference,
10629 	   which is invalid, but as references to references are usually
10630 	   quietly merged, diagnose it here.  */
10631 	if (DECL_OMP_DECLARE_REDUCTION_P (t))
10632 	  {
10633 	    tree argtype
10634 	      = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (t))));
10635 	    argtype = tsubst (argtype, args, complain, in_decl);
10636 	    if (TREE_CODE (argtype) == REFERENCE_TYPE)
10637 	      error_at (DECL_SOURCE_LOCATION (t),
10638 			"reference type %qT in "
10639 			"%<#pragma omp declare reduction%>", argtype);
10640 	    if (strchr (IDENTIFIER_POINTER (DECL_NAME (t)), '~') == NULL)
10641 	      DECL_NAME (r) = omp_reduction_id (ERROR_MARK, DECL_NAME (t),
10642 						argtype);
10643 	  }
10644 
10645 	if (member && DECL_CONV_FN_P (r))
10646 	  /* Type-conversion operator.  Reconstruct the name, in
10647 	     case it's the name of one of the template's parameters.  */
10648 	  DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
10649 
10650 	DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
10651 				     complain, t);
10652 	DECL_RESULT (r) = NULL_TREE;
10653 
10654 	TREE_STATIC (r) = 0;
10655 	TREE_PUBLIC (r) = TREE_PUBLIC (t);
10656 	DECL_EXTERNAL (r) = 1;
10657 	/* If this is an instantiation of a function with internal
10658 	   linkage, we already know what object file linkage will be
10659 	   assigned to the instantiation.  */
10660 	DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
10661 	DECL_DEFER_OUTPUT (r) = 0;
10662 	DECL_CHAIN (r) = NULL_TREE;
10663 	DECL_PENDING_INLINE_INFO (r) = 0;
10664 	DECL_PENDING_INLINE_P (r) = 0;
10665 	DECL_SAVED_TREE (r) = NULL_TREE;
10666 	DECL_STRUCT_FUNCTION (r) = NULL;
10667 	TREE_USED (r) = 0;
10668 	/* We'll re-clone as appropriate in instantiate_template.  */
10669 	DECL_CLONED_FUNCTION (r) = NULL_TREE;
10670 
10671 	/* If we aren't complaining now, return on error before we register
10672 	   the specialization so that we'll complain eventually.  */
10673 	if ((complain & tf_error) == 0
10674 	    && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10675 	    && !grok_op_properties (r, /*complain=*/false))
10676 	  RETURN (error_mark_node);
10677 
10678 	/* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
10679 	   this in the special friend case mentioned above where
10680 	   GEN_TMPL is NULL.  */
10681 	if (gen_tmpl)
10682 	  {
10683 	    DECL_TEMPLATE_INFO (r)
10684 	      = build_template_info (gen_tmpl, argvec);
10685 	    SET_DECL_IMPLICIT_INSTANTIATION (r);
10686 
10687 	    tree new_r
10688 	      = register_specialization (r, gen_tmpl, argvec, false, hash);
10689 	    if (new_r != r)
10690 	      /* We instantiated this while substituting into
10691 		 the type earlier (template/friend54.C).  */
10692 	      RETURN (new_r);
10693 
10694 	    if (!DECL_FRIEND_P (r))
10695 	      note_comdat_fn (r);
10696 
10697 	    /* We're not supposed to instantiate default arguments
10698 	       until they are called, for a template.  But, for a
10699 	       declaration like:
10700 
10701 		 template <class T> void f ()
10702 		 { extern void g(int i = T()); }
10703 
10704 	       we should do the substitution when the template is
10705 	       instantiated.  We handle the member function case in
10706 	       instantiate_class_template since the default arguments
10707 	       might refer to other members of the class.  */
10708 	    if (!member
10709 		&& !PRIMARY_TEMPLATE_P (gen_tmpl)
10710 		&& !uses_template_parms (argvec))
10711 	      tsubst_default_arguments (r, complain);
10712 	  }
10713 	else
10714 	  DECL_TEMPLATE_INFO (r) = NULL_TREE;
10715 
10716 	/* Copy the list of befriending classes.  */
10717 	for (friends = &DECL_BEFRIENDING_CLASSES (r);
10718 	     *friends;
10719 	     friends = &TREE_CHAIN (*friends))
10720 	  {
10721 	    *friends = copy_node (*friends);
10722 	    TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
10723 					    args, complain,
10724 					    in_decl);
10725 	  }
10726 
10727 	if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
10728 	  {
10729 	    maybe_retrofit_in_chrg (r);
10730 	    if (DECL_CONSTRUCTOR_P (r))
10731 	      grok_ctor_properties (ctx, r);
10732 	    if (DECL_INHERITED_CTOR_BASE (r))
10733 	      deduce_inheriting_ctor (r);
10734 	    /* If this is an instantiation of a member template, clone it.
10735 	       If it isn't, that'll be handled by
10736 	       clone_constructors_and_destructors.  */
10737 	    if (PRIMARY_TEMPLATE_P (gen_tmpl))
10738 	      clone_function_decl (r, /*update_method_vec_p=*/0);
10739 	  }
10740 	else if ((complain & tf_error) != 0
10741 		 && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10742 		 && !grok_op_properties (r, /*complain=*/true))
10743 	  RETURN (error_mark_node);
10744 
10745 	if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
10746 	  SET_DECL_FRIEND_CONTEXT (r,
10747 				   tsubst (DECL_FRIEND_CONTEXT (t),
10748 					    args, complain, in_decl));
10749 
10750 	/* Possibly limit visibility based on template args.  */
10751 	DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10752 	if (DECL_VISIBILITY_SPECIFIED (t))
10753 	  {
10754 	    DECL_VISIBILITY_SPECIFIED (r) = 0;
10755 	    DECL_ATTRIBUTES (r)
10756 	      = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10757 	  }
10758 	determine_visibility (r);
10759 	if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
10760 	    && !processing_template_decl)
10761 	  defaulted_late_check (r);
10762 
10763 	apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10764 					args, complain, in_decl);
10765       }
10766       break;
10767 
10768     case PARM_DECL:
10769       {
10770 	tree type = NULL_TREE;
10771         int i, len = 1;
10772         tree expanded_types = NULL_TREE;
10773         tree prev_r = NULL_TREE;
10774         tree first_r = NULL_TREE;
10775 
10776         if (DECL_PACK_P (t))
10777           {
10778             /* If there is a local specialization that isn't a
10779                parameter pack, it means that we're doing a "simple"
10780                substitution from inside tsubst_pack_expansion. Just
10781                return the local specialization (which will be a single
10782                parm).  */
10783             tree spec = retrieve_local_specialization (t);
10784             if (spec
10785                 && TREE_CODE (spec) == PARM_DECL
10786                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
10787               RETURN (spec);
10788 
10789             /* Expand the TYPE_PACK_EXPANSION that provides the types for
10790                the parameters in this function parameter pack.  */
10791             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
10792 						    complain, in_decl);
10793             if (TREE_CODE (expanded_types) == TREE_VEC)
10794               {
10795                 len = TREE_VEC_LENGTH (expanded_types);
10796 
10797                 /* Zero-length parameter packs are boring. Just substitute
10798                    into the chain.  */
10799                 if (len == 0)
10800                   RETURN (tsubst (TREE_CHAIN (t), args, complain,
10801 				  TREE_CHAIN (t)));
10802               }
10803             else
10804               {
10805                 /* All we did was update the type. Make a note of that.  */
10806                 type = expanded_types;
10807                 expanded_types = NULL_TREE;
10808               }
10809           }
10810 
10811         /* Loop through all of the parameters we'll build. When T is
10812            a function parameter pack, LEN is the number of expanded
10813            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
10814         r = NULL_TREE;
10815         for (i = 0; i < len; ++i)
10816           {
10817             prev_r = r;
10818             r = copy_node (t);
10819             if (DECL_TEMPLATE_PARM_P (t))
10820               SET_DECL_TEMPLATE_PARM_P (r);
10821 
10822             if (expanded_types)
10823               /* We're on the Ith parameter of the function parameter
10824                  pack.  */
10825               {
10826                 /* Get the Ith type.  */
10827                 type = TREE_VEC_ELT (expanded_types, i);
10828 
10829 		/* Rename the parameter to include the index.  */
10830 		DECL_NAME (r)
10831 		  = make_ith_pack_parameter_name (DECL_NAME (r), i);
10832               }
10833             else if (!type)
10834               /* We're dealing with a normal parameter.  */
10835               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10836 
10837             type = type_decays_to (type);
10838             TREE_TYPE (r) = type;
10839             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10840 
10841             if (DECL_INITIAL (r))
10842               {
10843                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
10844                   DECL_INITIAL (r) = TREE_TYPE (r);
10845                 else
10846                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
10847                                              complain, in_decl);
10848               }
10849 
10850             DECL_CONTEXT (r) = NULL_TREE;
10851 
10852             if (!DECL_TEMPLATE_PARM_P (r))
10853               DECL_ARG_TYPE (r) = type_passed_as (type);
10854 
10855 	    apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10856 					    args, complain, in_decl);
10857 
10858             /* Keep track of the first new parameter we
10859                generate. That's what will be returned to the
10860                caller.  */
10861             if (!first_r)
10862               first_r = r;
10863 
10864             /* Build a proper chain of parameters when substituting
10865                into a function parameter pack.  */
10866             if (prev_r)
10867               DECL_CHAIN (prev_r) = r;
10868           }
10869 
10870 	/* If cp_unevaluated_operand is set, we're just looking for a
10871 	   single dummy parameter, so don't keep going.  */
10872 	if (DECL_CHAIN (t) && !cp_unevaluated_operand)
10873 	  DECL_CHAIN (r) = tsubst (DECL_CHAIN (t), args,
10874 				   complain, DECL_CHAIN (t));
10875 
10876         /* FIRST_R contains the start of the chain we've built.  */
10877         r = first_r;
10878       }
10879       break;
10880 
10881     case FIELD_DECL:
10882       {
10883 	tree type = NULL_TREE;
10884 	tree vec = NULL_TREE;
10885 	tree expanded_types = NULL_TREE;
10886 	int len = 1;
10887 
10888 	if (PACK_EXPANSION_P (TREE_TYPE (t)))
10889 	  {
10890 	    /* This field is a lambda capture pack.  Return a TREE_VEC of
10891 	       the expanded fields to instantiate_class_template_1 and
10892 	       store them in the specializations hash table as a
10893 	       NONTYPE_ARGUMENT_PACK so that tsubst_copy can find them.  */
10894             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
10895 						    complain, in_decl);
10896             if (TREE_CODE (expanded_types) == TREE_VEC)
10897               {
10898                 len = TREE_VEC_LENGTH (expanded_types);
10899 		vec = make_tree_vec (len);
10900               }
10901             else
10902               {
10903                 /* All we did was update the type. Make a note of that.  */
10904                 type = expanded_types;
10905                 expanded_types = NULL_TREE;
10906               }
10907 	  }
10908 
10909 	for (int i = 0; i < len; ++i)
10910 	  {
10911 	    r = copy_decl (t);
10912 	    if (expanded_types)
10913 	      {
10914 		type = TREE_VEC_ELT (expanded_types, i);
10915 		DECL_NAME (r)
10916 		  = make_ith_pack_parameter_name (DECL_NAME (r), i);
10917 	      }
10918             else if (!type)
10919               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10920 
10921 	    if (type == error_mark_node)
10922 	      RETURN (error_mark_node);
10923 	    TREE_TYPE (r) = type;
10924 	    cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10925 
10926 	    if (DECL_C_BIT_FIELD (r))
10927 	      /* For bit-fields, DECL_INITIAL gives the number of bits.  For
10928 		 non-bit-fields DECL_INITIAL is a non-static data member
10929 		 initializer, which gets deferred instantiation.  */
10930 	      DECL_INITIAL (r)
10931 		= tsubst_expr (DECL_INITIAL (t), args,
10932 			       complain, in_decl,
10933 			       /*integral_constant_expression_p=*/true);
10934 	    else if (DECL_INITIAL (t))
10935 	      {
10936 		/* Set up DECL_TEMPLATE_INFO so that we can get at the
10937 		   NSDMI in perform_member_init.  Still set DECL_INITIAL
10938 		   so that we know there is one.  */
10939 		DECL_INITIAL (r) = void_zero_node;
10940 		gcc_assert (DECL_LANG_SPECIFIC (r) == NULL);
10941 		retrofit_lang_decl (r);
10942 		DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
10943 	      }
10944 	    /* We don't have to set DECL_CONTEXT here; it is set by
10945 	       finish_member_declaration.  */
10946 	    DECL_CHAIN (r) = NULL_TREE;
10947 
10948 	    apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10949 					    args, complain, in_decl);
10950 
10951 	    if (vec)
10952 	      TREE_VEC_ELT (vec, i) = r;
10953 	  }
10954 
10955 	if (vec)
10956 	  {
10957 	    r = vec;
10958 	    tree pack = make_node (NONTYPE_ARGUMENT_PACK);
10959 	    tree tpack = cxx_make_type (TYPE_ARGUMENT_PACK);
10960 	    SET_ARGUMENT_PACK_ARGS (pack, vec);
10961 	    SET_ARGUMENT_PACK_ARGS (tpack, expanded_types);
10962 	    TREE_TYPE (pack) = tpack;
10963 	    register_specialization (pack, t, args, false, 0);
10964 	  }
10965       }
10966       break;
10967 
10968     case USING_DECL:
10969       /* We reach here only for member using decls.  We also need to check
10970 	 uses_template_parms because DECL_DEPENDENT_P is not set for a
10971 	 using-declaration that designates a member of the current
10972 	 instantiation (c++/53549).  */
10973       if (DECL_DEPENDENT_P (t)
10974 	  || uses_template_parms (USING_DECL_SCOPE (t)))
10975 	{
10976 	  tree inst_scope = tsubst_copy (USING_DECL_SCOPE (t), args,
10977 					 complain, in_decl);
10978 	  tree name = tsubst_copy (DECL_NAME (t), args, complain, in_decl);
10979 	  r = do_class_using_decl (inst_scope, name);
10980 	  if (!r)
10981 	    r = error_mark_node;
10982 	  else
10983 	    {
10984 	      TREE_PROTECTED (r) = TREE_PROTECTED (t);
10985 	      TREE_PRIVATE (r) = TREE_PRIVATE (t);
10986 	    }
10987 	}
10988       else
10989 	{
10990 	  r = copy_node (t);
10991 	  DECL_CHAIN (r) = NULL_TREE;
10992 	}
10993       break;
10994 
10995     case TYPE_DECL:
10996     case VAR_DECL:
10997       {
10998 	tree argvec = NULL_TREE;
10999 	tree gen_tmpl = NULL_TREE;
11000 	tree spec;
11001 	tree tmpl = NULL_TREE;
11002 	tree ctx;
11003 	tree type = NULL_TREE;
11004 	bool local_p;
11005 
11006 	if (TREE_TYPE (t) == error_mark_node)
11007 	  RETURN (error_mark_node);
11008 
11009 	if (TREE_CODE (t) == TYPE_DECL
11010 	    && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
11011 	  {
11012 	    /* If this is the canonical decl, we don't have to
11013 	       mess with instantiations, and often we can't (for
11014 	       typename, template type parms and such).  Note that
11015 	       TYPE_NAME is not correct for the above test if
11016 	       we've copied the type for a typedef.  */
11017 	    type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11018 	    if (type == error_mark_node)
11019 	      RETURN (error_mark_node);
11020 	    r = TYPE_NAME (type);
11021 	    break;
11022 	  }
11023 
11024 	/* Check to see if we already have the specialization we
11025 	   need.  */
11026 	spec = NULL_TREE;
11027 	if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
11028 	  {
11029 	    /* T is a static data member or namespace-scope entity.
11030 	       We have to substitute into namespace-scope variables
11031 	       (even though such entities are never templates) because
11032 	       of cases like:
11033 
11034 	         template <class T> void f() { extern T t; }
11035 
11036 	       where the entity referenced is not known until
11037 	       instantiation time.  */
11038 	    local_p = false;
11039 	    ctx = DECL_CONTEXT (t);
11040 	    if (DECL_CLASS_SCOPE_P (t))
11041 	      {
11042 		ctx = tsubst_aggr_type (ctx, args,
11043 					complain,
11044 					in_decl, /*entering_scope=*/1);
11045 		/* If CTX is unchanged, then T is in fact the
11046 		   specialization we want.  That situation occurs when
11047 		   referencing a static data member within in its own
11048 		   class.  We can use pointer equality, rather than
11049 		   same_type_p, because DECL_CONTEXT is always
11050 		   canonical...  */
11051 		if (ctx == DECL_CONTEXT (t)
11052 		    && (TREE_CODE (t) != TYPE_DECL
11053 			/* ... unless T is a member template; in which
11054 			   case our caller can be willing to create a
11055 			   specialization of that template represented
11056 			   by T.  */
11057 			|| !(DECL_TI_TEMPLATE (t)
11058 			     && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (t)))))
11059 		  spec = t;
11060 	      }
11061 
11062 	    if (!spec)
11063 	      {
11064 		tmpl = DECL_TI_TEMPLATE (t);
11065 		gen_tmpl = most_general_template (tmpl);
11066 		argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
11067 		if (argvec == error_mark_node)
11068 		  RETURN (error_mark_node);
11069 		hash = hash_tmpl_and_args (gen_tmpl, argvec);
11070 		spec = retrieve_specialization (gen_tmpl, argvec, hash);
11071 	      }
11072 	  }
11073 	else
11074 	  {
11075 	    /* A local variable.  */
11076 	    local_p = true;
11077 	    /* Subsequent calls to pushdecl will fill this in.  */
11078 	    ctx = NULL_TREE;
11079 	    spec = retrieve_local_specialization (t);
11080 	  }
11081 	/* If we already have the specialization we need, there is
11082 	   nothing more to do.  */
11083 	if (spec)
11084 	  {
11085 	    r = spec;
11086 	    break;
11087 	  }
11088 
11089 	/* Create a new node for the specialization we need.  */
11090 	r = copy_decl (t);
11091 	if (type == NULL_TREE)
11092 	  {
11093 	    if (is_typedef_decl (t))
11094 	      type = DECL_ORIGINAL_TYPE (t);
11095 	    else
11096 	      type = TREE_TYPE (t);
11097 	    if (VAR_P (t)
11098 		&& VAR_HAD_UNKNOWN_BOUND (t)
11099 		&& type != error_mark_node)
11100 	      type = strip_array_domain (type);
11101 	    type = tsubst (type, args, complain, in_decl);
11102 	  }
11103 	if (VAR_P (r))
11104 	  {
11105 	    /* Even if the original location is out of scope, the
11106 	       newly substituted one is not.  */
11107 	    DECL_DEAD_FOR_LOCAL (r) = 0;
11108 	    DECL_INITIALIZED_P (r) = 0;
11109 	    DECL_TEMPLATE_INSTANTIATED (r) = 0;
11110 	    if (type == error_mark_node)
11111 	      RETURN (error_mark_node);
11112 	    if (TREE_CODE (type) == FUNCTION_TYPE)
11113 	      {
11114 		/* It may seem that this case cannot occur, since:
11115 
11116 		   typedef void f();
11117 		   void g() { f x; }
11118 
11119 		   declares a function, not a variable.  However:
11120 
11121 		   typedef void f();
11122 		   template <typename T> void g() { T t; }
11123 		   template void g<f>();
11124 
11125 		   is an attempt to declare a variable with function
11126 		   type.  */
11127 		error ("variable %qD has function type",
11128 		       /* R is not yet sufficiently initialized, so we
11129 			  just use its name.  */
11130 		       DECL_NAME (r));
11131 		RETURN (error_mark_node);
11132 	      }
11133 	    type = complete_type (type);
11134 	    /* Wait until cp_finish_decl to set this again, to handle
11135 	       circular dependency (template/instantiate6.C). */
11136 	    DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r) = 0;
11137 	    type = check_var_type (DECL_NAME (r), type);
11138 
11139 	    if (DECL_HAS_VALUE_EXPR_P (t))
11140 	      {
11141 		tree ve = DECL_VALUE_EXPR (t);
11142 		ve = tsubst_expr (ve, args, complain, in_decl,
11143 				  /*constant_expression_p=*/false);
11144 		if (REFERENCE_REF_P (ve))
11145 		  {
11146 		    gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
11147 		    ve = TREE_OPERAND (ve, 0);
11148 		  }
11149 		SET_DECL_VALUE_EXPR (r, ve);
11150 	      }
11151 	  }
11152 	else if (DECL_SELF_REFERENCE_P (t))
11153 	  SET_DECL_SELF_REFERENCE_P (r);
11154 	TREE_TYPE (r) = type;
11155 	cp_apply_type_quals_to_decl (cp_type_quals (type), r);
11156 	DECL_CONTEXT (r) = ctx;
11157 	/* Clear out the mangled name and RTL for the instantiation.  */
11158 	SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
11159 	if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
11160 	  SET_DECL_RTL (r, NULL);
11161 	/* The initializer must not be expanded until it is required;
11162 	   see [temp.inst].  */
11163 	DECL_INITIAL (r) = NULL_TREE;
11164 	if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
11165 	  SET_DECL_RTL (r, NULL);
11166 	DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
11167 	if (VAR_P (r))
11168 	  {
11169 	    /* Possibly limit visibility based on template args.  */
11170 	    DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
11171 	    if (DECL_VISIBILITY_SPECIFIED (t))
11172 	      {
11173 		DECL_VISIBILITY_SPECIFIED (r) = 0;
11174 		DECL_ATTRIBUTES (r)
11175 		  = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
11176 	      }
11177 	    determine_visibility (r);
11178 	  }
11179 
11180 	if (!local_p)
11181 	  {
11182 	    /* A static data member declaration is always marked
11183 	       external when it is declared in-class, even if an
11184 	       initializer is present.  We mimic the non-template
11185 	       processing here.  */
11186 	    DECL_EXTERNAL (r) = 1;
11187 
11188 	    register_specialization (r, gen_tmpl, argvec, false, hash);
11189 	    DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
11190 	    SET_DECL_IMPLICIT_INSTANTIATION (r);
11191 	  }
11192 	else if (!cp_unevaluated_operand)
11193 	  register_local_specialization (r, t);
11194 
11195 	DECL_CHAIN (r) = NULL_TREE;
11196 
11197 	apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
11198 					/*flags=*/0,
11199 					args, complain, in_decl);
11200 
11201 	/* Preserve a typedef that names a type.  */
11202 	if (is_typedef_decl (r))
11203 	  {
11204 	    DECL_ORIGINAL_TYPE (r) = NULL_TREE;
11205 	    set_underlying_type (r);
11206 	  }
11207 
11208 	layout_decl (r, 0);
11209       }
11210       break;
11211 
11212     default:
11213       gcc_unreachable ();
11214     }
11215 #undef RETURN
11216 
11217  out:
11218   /* Restore the file and line information.  */
11219   input_location = saved_loc;
11220 
11221   return r;
11222 }
11223 
11224 /* Substitute into the ARG_TYPES of a function type.
11225    If END is a TREE_CHAIN, leave it and any following types
11226    un-substituted.  */
11227 
11228 static tree
tsubst_arg_types(tree arg_types,tree args,tree end,tsubst_flags_t complain,tree in_decl)11229 tsubst_arg_types (tree arg_types,
11230 		  tree args,
11231 		  tree end,
11232 		  tsubst_flags_t complain,
11233 		  tree in_decl)
11234 {
11235   tree remaining_arg_types;
11236   tree type = NULL_TREE;
11237   int i = 1;
11238   tree expanded_args = NULL_TREE;
11239   tree default_arg;
11240 
11241   if (!arg_types || arg_types == void_list_node || arg_types == end)
11242     return arg_types;
11243 
11244   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
11245 					  args, end, complain, in_decl);
11246   if (remaining_arg_types == error_mark_node)
11247     return error_mark_node;
11248 
11249   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
11250     {
11251       /* For a pack expansion, perform substitution on the
11252          entire expression. Later on, we'll handle the arguments
11253          one-by-one.  */
11254       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
11255                                             args, complain, in_decl);
11256 
11257       if (TREE_CODE (expanded_args) == TREE_VEC)
11258         /* So that we'll spin through the parameters, one by one.  */
11259         i = TREE_VEC_LENGTH (expanded_args);
11260       else
11261         {
11262           /* We only partially substituted into the parameter
11263              pack. Our type is TYPE_PACK_EXPANSION.  */
11264           type = expanded_args;
11265           expanded_args = NULL_TREE;
11266         }
11267     }
11268 
11269   while (i > 0) {
11270     --i;
11271 
11272     if (expanded_args)
11273       type = TREE_VEC_ELT (expanded_args, i);
11274     else if (!type)
11275       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
11276 
11277     if (type == error_mark_node)
11278       return error_mark_node;
11279     if (VOID_TYPE_P (type))
11280       {
11281         if (complain & tf_error)
11282           {
11283             error ("invalid parameter type %qT", type);
11284             if (in_decl)
11285               error ("in declaration %q+D", in_decl);
11286           }
11287         return error_mark_node;
11288     }
11289     /* DR 657. */
11290     if (abstract_virtuals_error_sfinae (ACU_PARM, type, complain))
11291       return error_mark_node;
11292 
11293     /* Do array-to-pointer, function-to-pointer conversion, and ignore
11294        top-level qualifiers as required.  */
11295     type = cv_unqualified (type_decays_to (type));
11296 
11297     /* We do not substitute into default arguments here.  The standard
11298        mandates that they be instantiated only when needed, which is
11299        done in build_over_call.  */
11300     default_arg = TREE_PURPOSE (arg_types);
11301 
11302     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
11303       {
11304         /* We've instantiated a template before its default arguments
11305            have been parsed.  This can happen for a nested template
11306            class, and is not an error unless we require the default
11307            argument in a call of this function.  */
11308         remaining_arg_types =
11309           tree_cons (default_arg, type, remaining_arg_types);
11310         vec_safe_push (DEFARG_INSTANTIATIONS(default_arg), remaining_arg_types);
11311       }
11312     else
11313       remaining_arg_types =
11314         hash_tree_cons (default_arg, type, remaining_arg_types);
11315   }
11316 
11317   return remaining_arg_types;
11318 }
11319 
11320 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
11321    *not* handle the exception-specification for FNTYPE, because the
11322    initial substitution of explicitly provided template parameters
11323    during argument deduction forbids substitution into the
11324    exception-specification:
11325 
11326      [temp.deduct]
11327 
11328      All references in the function type of the function template to  the
11329      corresponding template parameters are replaced by the specified tem-
11330      plate argument values.  If a substitution in a template parameter or
11331      in  the function type of the function template results in an invalid
11332      type, type deduction fails.  [Note: The equivalent  substitution  in
11333      exception specifications is done only when the function is instanti-
11334      ated, at which point a program is  ill-formed  if  the  substitution
11335      results in an invalid type.]  */
11336 
11337 static tree
tsubst_function_type(tree t,tree args,tsubst_flags_t complain,tree in_decl)11338 tsubst_function_type (tree t,
11339 		      tree args,
11340 		      tsubst_flags_t complain,
11341 		      tree in_decl)
11342 {
11343   tree return_type;
11344   tree arg_types;
11345   tree fntype;
11346 
11347   /* The TYPE_CONTEXT is not used for function/method types.  */
11348   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
11349 
11350   /* Substitute the return type.  */
11351   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11352   if (return_type == error_mark_node)
11353     return error_mark_node;
11354   /* DR 486 clarifies that creation of a function type with an
11355      invalid return type is a deduction failure.  */
11356   if (TREE_CODE (return_type) == ARRAY_TYPE
11357       || TREE_CODE (return_type) == FUNCTION_TYPE)
11358     {
11359       if (complain & tf_error)
11360 	{
11361 	  if (TREE_CODE (return_type) == ARRAY_TYPE)
11362 	    error ("function returning an array");
11363 	  else
11364 	    error ("function returning a function");
11365 	}
11366       return error_mark_node;
11367     }
11368   /* And DR 657. */
11369   if (abstract_virtuals_error_sfinae (ACU_RETURN, return_type, complain))
11370     return error_mark_node;
11371 
11372   /* Substitute the argument types.  */
11373   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args, NULL_TREE,
11374 				complain, in_decl);
11375   if (arg_types == error_mark_node)
11376     return error_mark_node;
11377 
11378   /* Construct a new type node and return it.  */
11379   if (TREE_CODE (t) == FUNCTION_TYPE)
11380     {
11381       fntype = build_function_type (return_type, arg_types);
11382       fntype = apply_memfn_quals (fntype,
11383 				  type_memfn_quals (t),
11384 				  type_memfn_rqual (t));
11385     }
11386   else
11387     {
11388       tree r = TREE_TYPE (TREE_VALUE (arg_types));
11389       /* Don't pick up extra function qualifiers from the basetype.  */
11390       r = cp_build_qualified_type_real (r, type_memfn_quals (t), complain);
11391       if (! MAYBE_CLASS_TYPE_P (r))
11392 	{
11393 	  /* [temp.deduct]
11394 
11395 	     Type deduction may fail for any of the following
11396 	     reasons:
11397 
11398 	     -- Attempting to create "pointer to member of T" when T
11399 	     is not a class type.  */
11400 	  if (complain & tf_error)
11401 	    error ("creating pointer to member function of non-class type %qT",
11402 		      r);
11403 	  return error_mark_node;
11404 	}
11405 
11406       fntype = build_method_type_directly (r, return_type,
11407 					   TREE_CHAIN (arg_types));
11408       fntype = build_ref_qualified_type (fntype, type_memfn_rqual (t));
11409     }
11410   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
11411 
11412   return fntype;
11413 }
11414 
11415 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
11416    ARGS into that specification, and return the substituted
11417    specification.  If there is no specification, return NULL_TREE.  */
11418 
11419 static tree
tsubst_exception_specification(tree fntype,tree args,tsubst_flags_t complain,tree in_decl,bool defer_ok)11420 tsubst_exception_specification (tree fntype,
11421 				tree args,
11422 				tsubst_flags_t complain,
11423 				tree in_decl,
11424 				bool defer_ok)
11425 {
11426   tree specs;
11427   tree new_specs;
11428 
11429   specs = TYPE_RAISES_EXCEPTIONS (fntype);
11430   new_specs = NULL_TREE;
11431   if (specs && TREE_PURPOSE (specs))
11432     {
11433       /* A noexcept-specifier.  */
11434       tree expr = TREE_PURPOSE (specs);
11435       if (TREE_CODE (expr) == INTEGER_CST)
11436 	new_specs = expr;
11437       else if (defer_ok)
11438 	{
11439 	  /* Defer instantiation of noexcept-specifiers to avoid
11440 	     excessive instantiations (c++/49107).  */
11441 	  new_specs = make_node (DEFERRED_NOEXCEPT);
11442 	  if (DEFERRED_NOEXCEPT_SPEC_P (specs))
11443 	    {
11444 	      /* We already partially instantiated this member template,
11445 		 so combine the new args with the old.  */
11446 	      DEFERRED_NOEXCEPT_PATTERN (new_specs)
11447 		= DEFERRED_NOEXCEPT_PATTERN (expr);
11448 	      DEFERRED_NOEXCEPT_ARGS (new_specs)
11449 		= add_to_template_args (DEFERRED_NOEXCEPT_ARGS (expr), args);
11450 	    }
11451 	  else
11452 	    {
11453 	      DEFERRED_NOEXCEPT_PATTERN (new_specs) = expr;
11454 	      DEFERRED_NOEXCEPT_ARGS (new_specs) = args;
11455 	    }
11456 	}
11457       else
11458 	new_specs = tsubst_copy_and_build
11459 	  (expr, args, complain, in_decl, /*function_p=*/false,
11460 	   /*integral_constant_expression_p=*/true);
11461       new_specs = build_noexcept_spec (new_specs, complain);
11462     }
11463   else if (specs)
11464     {
11465       if (! TREE_VALUE (specs))
11466 	new_specs = specs;
11467       else
11468 	while (specs)
11469 	  {
11470 	    tree spec;
11471             int i, len = 1;
11472             tree expanded_specs = NULL_TREE;
11473 
11474             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
11475               {
11476                 /* Expand the pack expansion type.  */
11477                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
11478                                                        args, complain,
11479                                                        in_decl);
11480 
11481 		if (expanded_specs == error_mark_node)
11482 		  return error_mark_node;
11483 		else if (TREE_CODE (expanded_specs) == TREE_VEC)
11484 		  len = TREE_VEC_LENGTH (expanded_specs);
11485 		else
11486 		  {
11487 		    /* We're substituting into a member template, so
11488 		       we got a TYPE_PACK_EXPANSION back.  Add that
11489 		       expansion and move on.  */
11490 		    gcc_assert (TREE_CODE (expanded_specs)
11491 				== TYPE_PACK_EXPANSION);
11492 		    new_specs = add_exception_specifier (new_specs,
11493 							 expanded_specs,
11494 							 complain);
11495 		    specs = TREE_CHAIN (specs);
11496 		    continue;
11497 		  }
11498               }
11499 
11500             for (i = 0; i < len; ++i)
11501               {
11502                 if (expanded_specs)
11503                   spec = TREE_VEC_ELT (expanded_specs, i);
11504                 else
11505                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
11506                 if (spec == error_mark_node)
11507                   return spec;
11508                 new_specs = add_exception_specifier (new_specs, spec,
11509                                                      complain);
11510               }
11511 
11512             specs = TREE_CHAIN (specs);
11513 	  }
11514     }
11515   return new_specs;
11516 }
11517 
11518 /* Take the tree structure T and replace template parameters used
11519    therein with the argument vector ARGS.  IN_DECL is an associated
11520    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
11521    Issue error and warning messages under control of COMPLAIN.  Note
11522    that we must be relatively non-tolerant of extensions here, in
11523    order to preserve conformance; if we allow substitutions that
11524    should not be allowed, we may allow argument deductions that should
11525    not succeed, and therefore report ambiguous overload situations
11526    where there are none.  In theory, we could allow the substitution,
11527    but indicate that it should have failed, and allow our caller to
11528    make sure that the right thing happens, but we don't try to do this
11529    yet.
11530 
11531    This function is used for dealing with types, decls and the like;
11532    for expressions, use tsubst_expr or tsubst_copy.  */
11533 
11534 tree
tsubst(tree t,tree args,tsubst_flags_t complain,tree in_decl)11535 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11536 {
11537   enum tree_code code;
11538   tree type, r = NULL_TREE;
11539 
11540   if (t == NULL_TREE || t == error_mark_node
11541       || t == integer_type_node
11542       || t == void_type_node
11543       || t == char_type_node
11544       || t == unknown_type_node
11545       || TREE_CODE (t) == NAMESPACE_DECL
11546       || TREE_CODE (t) == TRANSLATION_UNIT_DECL)
11547     return t;
11548 
11549   if (DECL_P (t))
11550     return tsubst_decl (t, args, complain);
11551 
11552   if (args == NULL_TREE)
11553     return t;
11554 
11555   code = TREE_CODE (t);
11556 
11557   if (code == IDENTIFIER_NODE)
11558     type = IDENTIFIER_TYPE_VALUE (t);
11559   else
11560     type = TREE_TYPE (t);
11561 
11562   gcc_assert (type != unknown_type_node);
11563 
11564   /* Reuse typedefs.  We need to do this to handle dependent attributes,
11565      such as attribute aligned.  */
11566   if (TYPE_P (t)
11567       && typedef_variant_p (t))
11568     {
11569       tree decl = TYPE_NAME (t);
11570 
11571       if (alias_template_specialization_p (t))
11572 	{
11573 	  /* DECL represents an alias template and we want to
11574 	     instantiate it.  */
11575 	  tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11576 	  tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
11577 	  r = instantiate_alias_template (tmpl, gen_args, complain);
11578 	}
11579       else if (DECL_CLASS_SCOPE_P (decl)
11580 	       && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
11581 	       && uses_template_parms (DECL_CONTEXT (decl)))
11582 	{
11583 	  tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11584 	  tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
11585 	  r = retrieve_specialization (tmpl, gen_args, 0);
11586 	}
11587       else if (DECL_FUNCTION_SCOPE_P (decl)
11588 	       && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
11589 	       && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
11590 	r = retrieve_local_specialization (decl);
11591       else
11592 	/* The typedef is from a non-template context.  */
11593 	return t;
11594 
11595       if (r)
11596 	{
11597 	  r = TREE_TYPE (r);
11598 	  r = cp_build_qualified_type_real
11599 	    (r, cp_type_quals (t) | cp_type_quals (r),
11600 	     complain | tf_ignore_bad_quals);
11601 	  return r;
11602 	}
11603       else
11604 	{
11605 	  /* We don't have an instantiation yet, so drop the typedef.  */
11606 	  int quals = cp_type_quals (t);
11607 	  t = DECL_ORIGINAL_TYPE (decl);
11608 	  t = cp_build_qualified_type_real (t, quals,
11609 					    complain | tf_ignore_bad_quals);
11610 	}
11611     }
11612 
11613   if (type
11614       && code != TYPENAME_TYPE
11615       && code != TEMPLATE_TYPE_PARM
11616       && code != IDENTIFIER_NODE
11617       && code != FUNCTION_TYPE
11618       && code != METHOD_TYPE)
11619     type = tsubst (type, args, complain, in_decl);
11620   if (type == error_mark_node)
11621     return error_mark_node;
11622 
11623   switch (code)
11624     {
11625     case RECORD_TYPE:
11626     case UNION_TYPE:
11627     case ENUMERAL_TYPE:
11628       return tsubst_aggr_type (t, args, complain, in_decl,
11629 			       /*entering_scope=*/0);
11630 
11631     case ERROR_MARK:
11632     case IDENTIFIER_NODE:
11633     case VOID_TYPE:
11634     case REAL_TYPE:
11635     case COMPLEX_TYPE:
11636     case VECTOR_TYPE:
11637     case BOOLEAN_TYPE:
11638     case NULLPTR_TYPE:
11639     case LANG_TYPE:
11640       return t;
11641 
11642     case INTEGER_TYPE:
11643       if (t == integer_type_node)
11644 	return t;
11645 
11646       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
11647 	  && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
11648 	return t;
11649 
11650       {
11651 	tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
11652 
11653 	max = tsubst_expr (omax, args, complain, in_decl,
11654 			   /*integral_constant_expression_p=*/false);
11655 
11656 	/* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
11657 	   needed.  */
11658 	if (TREE_CODE (max) == NOP_EXPR
11659 	    && TREE_SIDE_EFFECTS (omax)
11660 	    && !TREE_TYPE (max))
11661 	  TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
11662 
11663 	/* If we're in a partial instantiation, preserve the magic NOP_EXPR
11664 	   with TREE_SIDE_EFFECTS that indicates this is not an integral
11665 	   constant expression.  */
11666 	if (processing_template_decl
11667 	    && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
11668 	  {
11669 	    gcc_assert (TREE_CODE (max) == NOP_EXPR);
11670 	    TREE_SIDE_EFFECTS (max) = 1;
11671 	  }
11672 
11673 	return compute_array_index_type (NULL_TREE, max, complain);
11674       }
11675 
11676     case TEMPLATE_TYPE_PARM:
11677     case TEMPLATE_TEMPLATE_PARM:
11678     case BOUND_TEMPLATE_TEMPLATE_PARM:
11679     case TEMPLATE_PARM_INDEX:
11680       {
11681 	int idx;
11682 	int level;
11683 	int levels;
11684 	tree arg = NULL_TREE;
11685 
11686 	r = NULL_TREE;
11687 
11688 	gcc_assert (TREE_VEC_LENGTH (args) > 0);
11689 	template_parm_level_and_index (t, &level, &idx);
11690 
11691 	levels = TMPL_ARGS_DEPTH (args);
11692 	if (level <= levels)
11693 	  {
11694 	    arg = TMPL_ARG (args, level, idx);
11695 
11696 	    if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
11697 	      {
11698 		/* See through ARGUMENT_PACK_SELECT arguments. */
11699 		arg = ARGUMENT_PACK_SELECT_ARG (arg);
11700 		/* If the selected argument is an expansion E, that most
11701 		   likely means we were called from
11702 		   gen_elem_of_pack_expansion_instantiation during the
11703 		   substituting of pack an argument pack (which Ith
11704 		   element is a pack expansion, where I is
11705 		   ARGUMENT_PACK_SELECT_INDEX) into a pack expansion.
11706 		   In this case, the Ith element resulting from this
11707 		   substituting is going to be a pack expansion, which
11708 		   pattern is the pattern of E.  Let's return the
11709 		   pattern of E, and
11710 		   gen_elem_of_pack_expansion_instantiation will
11711 		   build the resulting pack expansion from it.  */
11712 		if (PACK_EXPANSION_P (arg))
11713 		  arg = PACK_EXPANSION_PATTERN (arg);
11714 	      }
11715 	  }
11716 
11717 	if (arg == error_mark_node)
11718 	  return error_mark_node;
11719 	else if (arg != NULL_TREE)
11720 	  {
11721 	    if (ARGUMENT_PACK_P (arg))
11722 	      /* If ARG is an argument pack, we don't actually want to
11723 		 perform a substitution here, because substitutions
11724 		 for argument packs are only done
11725 		 element-by-element. We can get to this point when
11726 		 substituting the type of a non-type template
11727 		 parameter pack, when that type actually contains
11728 		 template parameter packs from an outer template, e.g.,
11729 
11730 	         template<typename... Types> struct A {
11731 		   template<Types... Values> struct B { };
11732                  };  */
11733 	      return t;
11734 
11735 	    if (code == TEMPLATE_TYPE_PARM)
11736 	      {
11737 		int quals;
11738 		gcc_assert (TYPE_P (arg));
11739 
11740 		quals = cp_type_quals (arg) | cp_type_quals (t);
11741 
11742 		return cp_build_qualified_type_real
11743 		  (arg, quals, complain | tf_ignore_bad_quals);
11744 	      }
11745 	    else if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
11746 	      {
11747 		/* We are processing a type constructed from a
11748 		   template template parameter.  */
11749 		tree argvec = tsubst (TYPE_TI_ARGS (t),
11750 				      args, complain, in_decl);
11751 		if (argvec == error_mark_node)
11752 		  return error_mark_node;
11753 
11754 		gcc_assert (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
11755 			    || TREE_CODE (arg) == TEMPLATE_DECL
11756 			    || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
11757 
11758 		if (TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE)
11759 		  /* Consider this code:
11760 
11761 			template <template <class> class Template>
11762 			struct Internal {
11763 			template <class Arg> using Bind = Template<Arg>;
11764 			};
11765 
11766 			template <template <class> class Template, class Arg>
11767 			using Instantiate = Template<Arg>; //#0
11768 
11769 			template <template <class> class Template,
11770                                   class Argument>
11771 			using Bind =
11772 			  Instantiate<Internal<Template>::template Bind,
11773 				      Argument>; //#1
11774 
11775 		     When #1 is parsed, the
11776 		     BOUND_TEMPLATE_TEMPLATE_PARM representing the
11777 		     parameter `Template' in #0 matches the
11778 		     UNBOUND_CLASS_TEMPLATE representing the argument
11779 		     `Internal<Template>::template Bind'; We then want
11780 		     to assemble the type `Bind<Argument>' that can't
11781 		     be fully created right now, because
11782 		     `Internal<Template>' not being complete, the Bind
11783 		     template cannot be looked up in that context.  So
11784 		     we need to "store" `Bind<Argument>' for later
11785 		     when the context of Bind becomes complete.  Let's
11786 		     store that in a TYPENAME_TYPE.  */
11787 		  return make_typename_type (TYPE_CONTEXT (arg),
11788 					     build_nt (TEMPLATE_ID_EXPR,
11789 						       TYPE_IDENTIFIER (arg),
11790 						       argvec),
11791 					     typename_type,
11792 					     complain);
11793 
11794 		/* We can get a TEMPLATE_TEMPLATE_PARM here when we
11795 		   are resolving nested-types in the signature of a
11796 		   member function templates.  Otherwise ARG is a
11797 		   TEMPLATE_DECL and is the real template to be
11798 		   instantiated.  */
11799 		if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11800 		  arg = TYPE_NAME (arg);
11801 
11802 		r = lookup_template_class (arg,
11803 					   argvec, in_decl,
11804 					   DECL_CONTEXT (arg),
11805 					    /*entering_scope=*/0,
11806 					   complain);
11807 		return cp_build_qualified_type_real
11808 		  (r, cp_type_quals (t) | cp_type_quals (r), complain);
11809 	      }
11810 	    else
11811 	      /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
11812 	      return convert_from_reference (unshare_expr (arg));
11813 	  }
11814 
11815 	if (level == 1)
11816 	  /* This can happen during the attempted tsubst'ing in
11817 	     unify.  This means that we don't yet have any information
11818 	     about the template parameter in question.  */
11819 	  return t;
11820 
11821 	/* Early in template argument deduction substitution, we don't
11822 	   want to reduce the level of 'auto', or it will be confused
11823 	   with a normal template parm in subsequent deduction.  */
11824 	if (is_auto (t) && (complain & tf_partial))
11825 	  return t;
11826 
11827 	/* If we get here, we must have been looking at a parm for a
11828 	   more deeply nested template.  Make a new version of this
11829 	   template parameter, but with a lower level.  */
11830 	switch (code)
11831 	  {
11832 	  case TEMPLATE_TYPE_PARM:
11833 	  case TEMPLATE_TEMPLATE_PARM:
11834 	  case BOUND_TEMPLATE_TEMPLATE_PARM:
11835 	    if (cp_type_quals (t))
11836 	      {
11837 		r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
11838 		r = cp_build_qualified_type_real
11839 		  (r, cp_type_quals (t),
11840 		   complain | (code == TEMPLATE_TYPE_PARM
11841 			       ? tf_ignore_bad_quals : 0));
11842 	      }
11843 	    else
11844 	      {
11845 		r = copy_type (t);
11846 		TEMPLATE_TYPE_PARM_INDEX (r)
11847 		  = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
11848 						r, levels, args, complain);
11849 		TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
11850 		TYPE_MAIN_VARIANT (r) = r;
11851 		TYPE_POINTER_TO (r) = NULL_TREE;
11852 		TYPE_REFERENCE_TO (r) = NULL_TREE;
11853 
11854 		if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
11855 		  /* We have reduced the level of the template
11856 		     template parameter, but not the levels of its
11857 		     template parameters, so canonical_type_parameter
11858 		     will not be able to find the canonical template
11859 		     template parameter for this level. Thus, we
11860 		     require structural equality checking to compare
11861 		     TEMPLATE_TEMPLATE_PARMs. */
11862 		  SET_TYPE_STRUCTURAL_EQUALITY (r);
11863 		else if (TYPE_STRUCTURAL_EQUALITY_P (t))
11864 		  SET_TYPE_STRUCTURAL_EQUALITY (r);
11865 		else
11866 		  TYPE_CANONICAL (r) = canonical_type_parameter (r);
11867 
11868 		if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
11869 		  {
11870 		    tree argvec = tsubst (TYPE_TI_ARGS (t), args,
11871 					  complain, in_decl);
11872 		    if (argvec == error_mark_node)
11873 		      return error_mark_node;
11874 
11875 		    TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
11876 		      = build_template_info (TYPE_TI_TEMPLATE (t), argvec);
11877 		  }
11878 	      }
11879 	    break;
11880 
11881 	  case TEMPLATE_PARM_INDEX:
11882 	    r = reduce_template_parm_level (t, type, levels, args, complain);
11883 	    break;
11884 
11885 	  default:
11886 	    gcc_unreachable ();
11887 	  }
11888 
11889 	return r;
11890       }
11891 
11892     case TREE_LIST:
11893       {
11894 	tree purpose, value, chain;
11895 
11896 	if (t == void_list_node)
11897 	  return t;
11898 
11899 	purpose = TREE_PURPOSE (t);
11900 	if (purpose)
11901 	  {
11902 	    purpose = tsubst (purpose, args, complain, in_decl);
11903 	    if (purpose == error_mark_node)
11904 	      return error_mark_node;
11905 	  }
11906 	value = TREE_VALUE (t);
11907 	if (value)
11908 	  {
11909 	    value = tsubst (value, args, complain, in_decl);
11910 	    if (value == error_mark_node)
11911 	      return error_mark_node;
11912 	  }
11913 	chain = TREE_CHAIN (t);
11914 	if (chain && chain != void_type_node)
11915 	  {
11916 	    chain = tsubst (chain, args, complain, in_decl);
11917 	    if (chain == error_mark_node)
11918 	      return error_mark_node;
11919 	  }
11920 	if (purpose == TREE_PURPOSE (t)
11921 	    && value == TREE_VALUE (t)
11922 	    && chain == TREE_CHAIN (t))
11923 	  return t;
11924 	return hash_tree_cons (purpose, value, chain);
11925       }
11926 
11927     case TREE_BINFO:
11928       /* We should never be tsubsting a binfo.  */
11929       gcc_unreachable ();
11930 
11931     case TREE_VEC:
11932       /* A vector of template arguments.  */
11933       gcc_assert (!type);
11934       return tsubst_template_args (t, args, complain, in_decl);
11935 
11936     case POINTER_TYPE:
11937     case REFERENCE_TYPE:
11938       {
11939 	if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
11940 	  return t;
11941 
11942 	/* [temp.deduct]
11943 
11944 	   Type deduction may fail for any of the following
11945 	   reasons:
11946 
11947 	   -- Attempting to create a pointer to reference type.
11948 	   -- Attempting to create a reference to a reference type or
11949 	      a reference to void.
11950 
11951 	  Core issue 106 says that creating a reference to a reference
11952 	  during instantiation is no longer a cause for failure. We
11953 	  only enforce this check in strict C++98 mode.  */
11954 	if ((TREE_CODE (type) == REFERENCE_TYPE
11955 	     && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
11956 	    || (code == REFERENCE_TYPE && VOID_TYPE_P (type)))
11957 	  {
11958 	    static location_t last_loc;
11959 
11960 	    /* We keep track of the last time we issued this error
11961 	       message to avoid spewing a ton of messages during a
11962 	       single bad template instantiation.  */
11963 	    if (complain & tf_error
11964 		&& last_loc != input_location)
11965 	      {
11966 		if (VOID_TYPE_P (type))
11967 		  error ("forming reference to void");
11968                else if (code == POINTER_TYPE)
11969                  error ("forming pointer to reference type %qT", type);
11970                else
11971 		  error ("forming reference to reference type %qT", type);
11972 		last_loc = input_location;
11973 	      }
11974 
11975 	    return error_mark_node;
11976 	  }
11977 	else if (TREE_CODE (type) == FUNCTION_TYPE
11978 		 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
11979 		     || type_memfn_rqual (type) != REF_QUAL_NONE))
11980 	  {
11981 	    if (complain & tf_error)
11982 	      {
11983 		if (code == POINTER_TYPE)
11984 		  error ("forming pointer to qualified function type %qT",
11985 			 type);
11986 		else
11987 		  error ("forming reference to qualified function type %qT",
11988 			 type);
11989 	      }
11990 	    return error_mark_node;
11991 	  }
11992 	else if (code == POINTER_TYPE)
11993 	  {
11994 	    r = build_pointer_type (type);
11995 	    if (TREE_CODE (type) == METHOD_TYPE)
11996 	      r = build_ptrmemfunc_type (r);
11997 	  }
11998 	else if (TREE_CODE (type) == REFERENCE_TYPE)
11999 	  /* In C++0x, during template argument substitution, when there is an
12000 	     attempt to create a reference to a reference type, reference
12001 	     collapsing is applied as described in [14.3.1/4 temp.arg.type]:
12002 
12003 	     "If a template-argument for a template-parameter T names a type
12004 	     that is a reference to a type A, an attempt to create the type
12005 	     'lvalue reference to cv T' creates the type 'lvalue reference to
12006 	     A,' while an attempt to create the type type rvalue reference to
12007 	     cv T' creates the type T"
12008 	  */
12009 	  r = cp_build_reference_type
12010 	      (TREE_TYPE (type),
12011 	       TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
12012 	else
12013 	  r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
12014 	r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
12015 
12016 	if (cxx_dialect >= cxx1y
12017 	    && !(TREE_CODE (t) == REFERENCE_TYPE && REFERENCE_VLA_OK (t))
12018 	    && array_of_runtime_bound_p (type)
12019 	    && (flag_iso || warn_vla > 0))
12020 	  {
12021 	    if (complain & tf_warning_or_error)
12022 	      pedwarn
12023 		(input_location, OPT_Wvla,
12024 		 code == REFERENCE_TYPE
12025 		 ? G_("cannot declare reference to array of runtime bound")
12026 		 : G_("cannot declare pointer to array of runtime bound"));
12027 	    else
12028 	      r = error_mark_node;
12029 	  }
12030 
12031 	if (r != error_mark_node)
12032 	  /* Will this ever be needed for TYPE_..._TO values?  */
12033 	  layout_type (r);
12034 
12035 	return r;
12036       }
12037     case OFFSET_TYPE:
12038       {
12039 	r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
12040 	if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
12041 	  {
12042 	    /* [temp.deduct]
12043 
12044 	       Type deduction may fail for any of the following
12045 	       reasons:
12046 
12047 	       -- Attempting to create "pointer to member of T" when T
12048 		  is not a class type.  */
12049 	    if (complain & tf_error)
12050 	      error ("creating pointer to member of non-class type %qT", r);
12051 	    return error_mark_node;
12052 	  }
12053 	if (TREE_CODE (type) == REFERENCE_TYPE)
12054 	  {
12055 	    if (complain & tf_error)
12056 	      error ("creating pointer to member reference type %qT", type);
12057 	    return error_mark_node;
12058 	  }
12059 	if (VOID_TYPE_P (type))
12060 	  {
12061 	    if (complain & tf_error)
12062 	      error ("creating pointer to member of type void");
12063 	    return error_mark_node;
12064 	  }
12065 	gcc_assert (TREE_CODE (type) != METHOD_TYPE);
12066 	if (TREE_CODE (type) == FUNCTION_TYPE)
12067 	  {
12068 	    /* The type of the implicit object parameter gets its
12069 	       cv-qualifiers from the FUNCTION_TYPE. */
12070 	    tree memptr;
12071 	    tree method_type
12072 	      = build_memfn_type (type, r, type_memfn_quals (type),
12073 				  type_memfn_rqual (type));
12074 	    memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
12075 	    return cp_build_qualified_type_real (memptr, cp_type_quals (t),
12076 						 complain);
12077 	  }
12078 	else
12079 	  return cp_build_qualified_type_real (build_ptrmem_type (r, type),
12080 					       cp_type_quals (t),
12081 					       complain);
12082       }
12083     case FUNCTION_TYPE:
12084     case METHOD_TYPE:
12085       {
12086 	tree fntype;
12087 	tree specs;
12088 	fntype = tsubst_function_type (t, args, complain, in_decl);
12089 	if (fntype == error_mark_node)
12090 	  return error_mark_node;
12091 
12092 	/* Substitute the exception specification.  */
12093 	specs = tsubst_exception_specification (t, args, complain,
12094 						in_decl, /*defer_ok*/true);
12095 	if (specs == error_mark_node)
12096 	  return error_mark_node;
12097 	if (specs)
12098 	  fntype = build_exception_variant (fntype, specs);
12099 	return fntype;
12100       }
12101     case ARRAY_TYPE:
12102       {
12103 	tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
12104 	if (domain == error_mark_node)
12105 	  return error_mark_node;
12106 
12107 	/* As an optimization, we avoid regenerating the array type if
12108 	   it will obviously be the same as T.  */
12109 	if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
12110 	  return t;
12111 
12112 	/* These checks should match the ones in grokdeclarator.
12113 
12114 	   [temp.deduct]
12115 
12116 	   The deduction may fail for any of the following reasons:
12117 
12118 	   -- Attempting to create an array with an element type that
12119 	      is void, a function type, or a reference type, or [DR337]
12120 	      an abstract class type.  */
12121 	if (VOID_TYPE_P (type)
12122 	    || TREE_CODE (type) == FUNCTION_TYPE
12123 	    || TREE_CODE (type) == REFERENCE_TYPE)
12124 	  {
12125 	    if (complain & tf_error)
12126 	      error ("creating array of %qT", type);
12127 	    return error_mark_node;
12128 	  }
12129 
12130 	if (abstract_virtuals_error_sfinae (ACU_ARRAY, type, complain))
12131 	  return error_mark_node;
12132 
12133 	r = build_cplus_array_type (type, domain);
12134 
12135 	if (TYPE_USER_ALIGN (t))
12136 	  {
12137 	    TYPE_ALIGN (r) = TYPE_ALIGN (t);
12138 	    TYPE_USER_ALIGN (r) = 1;
12139 	  }
12140 
12141 	return r;
12142       }
12143 
12144     case TYPENAME_TYPE:
12145       {
12146 	tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
12147 				     in_decl, /*entering_scope=*/1);
12148 	tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
12149 			      complain, in_decl);
12150 
12151 	if (ctx == error_mark_node || f == error_mark_node)
12152 	  return error_mark_node;
12153 
12154 	if (!MAYBE_CLASS_TYPE_P (ctx))
12155 	  {
12156 	    if (complain & tf_error)
12157 	      error ("%qT is not a class, struct, or union type", ctx);
12158 	    return error_mark_node;
12159 	  }
12160 	else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
12161 	  {
12162 	    /* Normally, make_typename_type does not require that the CTX
12163 	       have complete type in order to allow things like:
12164 
12165 		 template <class T> struct S { typename S<T>::X Y; };
12166 
12167 	       But, such constructs have already been resolved by this
12168 	       point, so here CTX really should have complete type, unless
12169 	       it's a partial instantiation.  */
12170 	    ctx = complete_type (ctx);
12171 	    if (!COMPLETE_TYPE_P (ctx))
12172 	      {
12173 		if (complain & tf_error)
12174 		  cxx_incomplete_type_error (NULL_TREE, ctx);
12175 		return error_mark_node;
12176 	      }
12177 	  }
12178 
12179 	f = make_typename_type (ctx, f, typename_type,
12180 				complain | tf_keep_type_decl);
12181 	if (f == error_mark_node)
12182 	  return f;
12183 	if (TREE_CODE (f) == TYPE_DECL)
12184 	  {
12185 	    complain |= tf_ignore_bad_quals;
12186 	    f = TREE_TYPE (f);
12187 	  }
12188 
12189 	if (TREE_CODE (f) != TYPENAME_TYPE)
12190 	  {
12191 	    if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
12192 	      {
12193 		if (complain & tf_error)
12194 		  error ("%qT resolves to %qT, which is not an enumeration type",
12195 			 t, f);
12196 		else
12197 		  return error_mark_node;
12198 	      }
12199 	    else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
12200 	      {
12201 		if (complain & tf_error)
12202 		  error ("%qT resolves to %qT, which is is not a class type",
12203 			 t, f);
12204 		else
12205 		  return error_mark_node;
12206 	      }
12207 	  }
12208 
12209 	return cp_build_qualified_type_real
12210 	  (f, cp_type_quals (f) | cp_type_quals (t), complain);
12211       }
12212 
12213     case UNBOUND_CLASS_TEMPLATE:
12214       {
12215 	tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
12216 				     in_decl, /*entering_scope=*/1);
12217 	tree name = TYPE_IDENTIFIER (t);
12218 	tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
12219 
12220 	if (ctx == error_mark_node || name == error_mark_node)
12221 	  return error_mark_node;
12222 
12223 	if (parm_list)
12224 	  parm_list = tsubst_template_parms (parm_list, args, complain);
12225 	return make_unbound_class_template (ctx, name, parm_list, complain);
12226       }
12227 
12228     case TYPEOF_TYPE:
12229       {
12230 	tree type;
12231 
12232 	++cp_unevaluated_operand;
12233 	++c_inhibit_evaluation_warnings;
12234 
12235 	type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
12236 			    complain, in_decl,
12237 			    /*integral_constant_expression_p=*/false);
12238 
12239 	--cp_unevaluated_operand;
12240 	--c_inhibit_evaluation_warnings;
12241 
12242 	type = finish_typeof (type);
12243 	return cp_build_qualified_type_real (type,
12244 					     cp_type_quals (t)
12245 					     | cp_type_quals (type),
12246 					     complain);
12247       }
12248 
12249     case DECLTYPE_TYPE:
12250       {
12251 	tree type;
12252 
12253 	++cp_unevaluated_operand;
12254 	++c_inhibit_evaluation_warnings;
12255 
12256 	type = tsubst_copy_and_build (DECLTYPE_TYPE_EXPR (t), args,
12257 				      complain|tf_decltype, in_decl,
12258 				      /*function_p*/false,
12259 				      /*integral_constant_expression*/false);
12260 
12261 	--cp_unevaluated_operand;
12262 	--c_inhibit_evaluation_warnings;
12263 
12264 	if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
12265 	  type = lambda_capture_field_type (type,
12266 					    DECLTYPE_FOR_INIT_CAPTURE (t));
12267 	else if (DECLTYPE_FOR_LAMBDA_PROXY (t))
12268 	  type = lambda_proxy_type (type);
12269 	else
12270 	  {
12271 	    bool id = DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t);
12272 	    if (id && TREE_CODE (DECLTYPE_TYPE_EXPR (t)) == BIT_NOT_EXPR
12273 		&& EXPR_P (type))
12274 	      /* In a template ~id could be either a complement expression
12275 		 or an unqualified-id naming a destructor; if instantiating
12276 		 it produces an expression, it's not an id-expression or
12277 		 member access.  */
12278 	      id = false;
12279 	    type = finish_decltype_type (type, id, complain);
12280 	  }
12281 	return cp_build_qualified_type_real (type,
12282 					     cp_type_quals (t)
12283 					     | cp_type_quals (type),
12284 					     complain);
12285       }
12286 
12287     case UNDERLYING_TYPE:
12288       {
12289 	tree type = tsubst (UNDERLYING_TYPE_TYPE (t), args,
12290 			    complain, in_decl);
12291 	return finish_underlying_type (type);
12292       }
12293 
12294     case TYPE_ARGUMENT_PACK:
12295     case NONTYPE_ARGUMENT_PACK:
12296       {
12297         tree r = TYPE_P (t) ? cxx_make_type (code) : make_node (code);
12298         tree packed_out =
12299           tsubst_template_args (ARGUMENT_PACK_ARGS (t),
12300                                 args,
12301                                 complain,
12302                                 in_decl);
12303         SET_ARGUMENT_PACK_ARGS (r, packed_out);
12304 
12305         /* For template nontype argument packs, also substitute into
12306            the type.  */
12307         if (code == NONTYPE_ARGUMENT_PACK)
12308           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
12309 
12310         return r;
12311       }
12312       break;
12313 
12314     case INTEGER_CST:
12315     case REAL_CST:
12316     case STRING_CST:
12317     case PLUS_EXPR:
12318     case MINUS_EXPR:
12319     case NEGATE_EXPR:
12320     case NOP_EXPR:
12321     case INDIRECT_REF:
12322     case ADDR_EXPR:
12323     case CALL_EXPR:
12324     case ARRAY_REF:
12325     case SCOPE_REF:
12326       /* We should use one of the expression tsubsts for these codes.  */
12327       gcc_unreachable ();
12328 
12329     default:
12330       sorry ("use of %qs in template", get_tree_code_name (code));
12331       return error_mark_node;
12332     }
12333 }
12334 
12335 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
12336    type of the expression on the left-hand side of the "." or "->"
12337    operator.  */
12338 
12339 static tree
tsubst_baselink(tree baselink,tree object_type,tree args,tsubst_flags_t complain,tree in_decl)12340 tsubst_baselink (tree baselink, tree object_type,
12341 		 tree args, tsubst_flags_t complain, tree in_decl)
12342 {
12343     tree name;
12344     tree qualifying_scope;
12345     tree fns;
12346     tree optype;
12347     tree template_args = 0;
12348     bool template_id_p = false;
12349     bool qualified = BASELINK_QUALIFIED_P (baselink);
12350 
12351     /* A baselink indicates a function from a base class.  Both the
12352        BASELINK_ACCESS_BINFO and the base class referenced may
12353        indicate bases of the template class, rather than the
12354        instantiated class.  In addition, lookups that were not
12355        ambiguous before may be ambiguous now.  Therefore, we perform
12356        the lookup again.  */
12357     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
12358     qualifying_scope = tsubst (qualifying_scope, args,
12359 			       complain, in_decl);
12360     fns = BASELINK_FUNCTIONS (baselink);
12361     optype = tsubst (BASELINK_OPTYPE (baselink), args, complain, in_decl);
12362     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
12363       {
12364 	template_id_p = true;
12365 	template_args = TREE_OPERAND (fns, 1);
12366 	fns = TREE_OPERAND (fns, 0);
12367 	if (template_args)
12368 	  template_args = tsubst_template_args (template_args, args,
12369 						complain, in_decl);
12370       }
12371     name = DECL_NAME (get_first_fn (fns));
12372     if (IDENTIFIER_TYPENAME_P (name))
12373       name = mangle_conv_op_name_for_type (optype);
12374     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
12375     if (!baselink)
12376       return error_mark_node;
12377 
12378     /* If lookup found a single function, mark it as used at this
12379        point.  (If it lookup found multiple functions the one selected
12380        later by overload resolution will be marked as used at that
12381        point.)  */
12382     if (BASELINK_P (baselink))
12383       fns = BASELINK_FUNCTIONS (baselink);
12384     if (!template_id_p && !really_overloaded_fn (fns))
12385       mark_used (OVL_CURRENT (fns));
12386 
12387     /* Add back the template arguments, if present.  */
12388     if (BASELINK_P (baselink) && template_id_p)
12389       BASELINK_FUNCTIONS (baselink)
12390 	= build_nt (TEMPLATE_ID_EXPR,
12391 		    BASELINK_FUNCTIONS (baselink),
12392 		    template_args);
12393     /* Update the conversion operator type.  */
12394     BASELINK_OPTYPE (baselink) = optype;
12395 
12396     if (!object_type)
12397       object_type = current_class_type;
12398 
12399     if (qualified)
12400       baselink = adjust_result_of_qualified_name_lookup (baselink,
12401 							 qualifying_scope,
12402 							 object_type);
12403     return baselink;
12404 }
12405 
12406 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
12407    true if the qualified-id will be a postfix-expression in-and-of
12408    itself; false if more of the postfix-expression follows the
12409    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
12410    of "&".  */
12411 
12412 static tree
tsubst_qualified_id(tree qualified_id,tree args,tsubst_flags_t complain,tree in_decl,bool done,bool address_p)12413 tsubst_qualified_id (tree qualified_id, tree args,
12414 		     tsubst_flags_t complain, tree in_decl,
12415 		     bool done, bool address_p)
12416 {
12417   tree expr;
12418   tree scope;
12419   tree name;
12420   bool is_template;
12421   tree template_args;
12422   location_t loc = UNKNOWN_LOCATION;
12423 
12424   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
12425 
12426   /* Figure out what name to look up.  */
12427   name = TREE_OPERAND (qualified_id, 1);
12428   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
12429     {
12430       is_template = true;
12431       loc = EXPR_LOCATION (name);
12432       template_args = TREE_OPERAND (name, 1);
12433       if (template_args)
12434 	template_args = tsubst_template_args (template_args, args,
12435 					      complain, in_decl);
12436       name = TREE_OPERAND (name, 0);
12437     }
12438   else
12439     {
12440       is_template = false;
12441       template_args = NULL_TREE;
12442     }
12443 
12444   /* Substitute into the qualifying scope.  When there are no ARGS, we
12445      are just trying to simplify a non-dependent expression.  In that
12446      case the qualifying scope may be dependent, and, in any case,
12447      substituting will not help.  */
12448   scope = TREE_OPERAND (qualified_id, 0);
12449   if (args)
12450     {
12451       scope = tsubst (scope, args, complain, in_decl);
12452       expr = tsubst_copy (name, args, complain, in_decl);
12453     }
12454   else
12455     expr = name;
12456 
12457   if (dependent_scope_p (scope))
12458     {
12459       if (is_template)
12460 	expr = build_min_nt_loc (loc, TEMPLATE_ID_EXPR, expr, template_args);
12461       return build_qualified_name (NULL_TREE, scope, expr,
12462 				   QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
12463     }
12464 
12465   if (!BASELINK_P (name) && !DECL_P (expr))
12466     {
12467       if (TREE_CODE (expr) == BIT_NOT_EXPR)
12468 	{
12469 	  /* A BIT_NOT_EXPR is used to represent a destructor.  */
12470 	  if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
12471 	    {
12472 	      error ("qualifying type %qT does not match destructor name ~%qT",
12473 		     scope, TREE_OPERAND (expr, 0));
12474 	      expr = error_mark_node;
12475 	    }
12476 	  else
12477 	    expr = lookup_qualified_name (scope, complete_dtor_identifier,
12478 					  /*is_type_p=*/0, false);
12479 	}
12480       else
12481 	expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
12482       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
12483 		     ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
12484 	{
12485 	  if (complain & tf_error)
12486 	    {
12487 	      error ("dependent-name %qE is parsed as a non-type, but "
12488 		     "instantiation yields a type", qualified_id);
12489 	      inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
12490 	    }
12491 	  return error_mark_node;
12492 	}
12493     }
12494 
12495   if (DECL_P (expr))
12496     {
12497       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
12498 					   scope);
12499       /* Remember that there was a reference to this entity.  */
12500       mark_used (expr);
12501     }
12502 
12503   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
12504     {
12505       if (complain & tf_error)
12506 	qualified_name_lookup_error (scope,
12507 				     TREE_OPERAND (qualified_id, 1),
12508 				     expr, input_location);
12509       return error_mark_node;
12510     }
12511 
12512   if (is_template)
12513     expr = lookup_template_function (expr, template_args);
12514 
12515   if (expr == error_mark_node && complain & tf_error)
12516     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
12517 				 expr, input_location);
12518   else if (TYPE_P (scope))
12519     {
12520       expr = (adjust_result_of_qualified_name_lookup
12521 	      (expr, scope, current_nonlambda_class_type ()));
12522       expr = (finish_qualified_id_expr
12523 	      (scope, expr, done, address_p && PTRMEM_OK_P (qualified_id),
12524 	       QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
12525 	       /*template_arg_p=*/false, complain));
12526     }
12527 
12528   /* Expressions do not generally have reference type.  */
12529   if (TREE_CODE (expr) != SCOPE_REF
12530       /* However, if we're about to form a pointer-to-member, we just
12531 	 want the referenced member referenced.  */
12532       && TREE_CODE (expr) != OFFSET_REF)
12533     expr = convert_from_reference (expr);
12534 
12535   return expr;
12536 }
12537 
12538 /* Like tsubst, but deals with expressions.  This function just replaces
12539    template parms; to finish processing the resultant expression, use
12540    tsubst_copy_and_build or tsubst_expr.  */
12541 
12542 static tree
tsubst_copy(tree t,tree args,tsubst_flags_t complain,tree in_decl)12543 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
12544 {
12545   enum tree_code code;
12546   tree r;
12547 
12548   if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
12549     return t;
12550 
12551   code = TREE_CODE (t);
12552 
12553   switch (code)
12554     {
12555     case PARM_DECL:
12556       r = retrieve_local_specialization (t);
12557 
12558       if (r == NULL_TREE)
12559 	{
12560 	  /* We get here for a use of 'this' in an NSDMI.  */
12561 	  if (DECL_NAME (t) == this_identifier
12562 	      && at_function_scope_p ()
12563 	      && DECL_CONSTRUCTOR_P (current_function_decl))
12564 	    return current_class_ptr;
12565 
12566 	  /* This can happen for a parameter name used later in a function
12567 	     declaration (such as in a late-specified return type).  Just
12568 	     make a dummy decl, since it's only used for its type.  */
12569 	  gcc_assert (cp_unevaluated_operand != 0);
12570 	  r = tsubst_decl (t, args, complain);
12571 	  /* Give it the template pattern as its context; its true context
12572 	     hasn't been instantiated yet and this is good enough for
12573 	     mangling.  */
12574 	  DECL_CONTEXT (r) = DECL_CONTEXT (t);
12575 	}
12576 
12577       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
12578 	r = ARGUMENT_PACK_SELECT_ARG (r);
12579       mark_used (r);
12580       return r;
12581 
12582     case CONST_DECL:
12583       {
12584 	tree enum_type;
12585 	tree v;
12586 
12587 	if (DECL_TEMPLATE_PARM_P (t))
12588 	  return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
12589 	/* There is no need to substitute into namespace-scope
12590 	   enumerators.  */
12591 	if (DECL_NAMESPACE_SCOPE_P (t))
12592 	  return t;
12593 	/* If ARGS is NULL, then T is known to be non-dependent.  */
12594 	if (args == NULL_TREE)
12595 	  return integral_constant_value (t);
12596 
12597 	/* Unfortunately, we cannot just call lookup_name here.
12598 	   Consider:
12599 
12600 	     template <int I> int f() {
12601 	     enum E { a = I };
12602 	     struct S { void g() { E e = a; } };
12603 	     };
12604 
12605 	   When we instantiate f<7>::S::g(), say, lookup_name is not
12606 	   clever enough to find f<7>::a.  */
12607 	enum_type
12608 	  = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
12609 			      /*entering_scope=*/0);
12610 
12611 	for (v = TYPE_VALUES (enum_type);
12612 	     v != NULL_TREE;
12613 	     v = TREE_CHAIN (v))
12614 	  if (TREE_PURPOSE (v) == DECL_NAME (t))
12615 	    return TREE_VALUE (v);
12616 
12617 	  /* We didn't find the name.  That should never happen; if
12618 	     name-lookup found it during preliminary parsing, we
12619 	     should find it again here during instantiation.  */
12620 	gcc_unreachable ();
12621       }
12622       return t;
12623 
12624     case FIELD_DECL:
12625       if (PACK_EXPANSION_P (TREE_TYPE (t)))
12626 	{
12627 	  /* Check for a local specialization set up by
12628 	     tsubst_pack_expansion.  */
12629 	  if (tree r = retrieve_local_specialization (t))
12630 	    {
12631 	      if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
12632 		r = ARGUMENT_PACK_SELECT_ARG (r);
12633 	      return r;
12634 	    }
12635 
12636 	  /* When retrieving a capture pack from a generic lambda, remove the
12637 	     lambda call op's own template argument list from ARGS.  Only the
12638 	     template arguments active for the closure type should be used to
12639 	     retrieve the pack specialization.  */
12640 	  if (LAMBDA_FUNCTION_P (current_function_decl)
12641 	      && (template_class_depth (DECL_CONTEXT (t))
12642 		  != TMPL_ARGS_DEPTH (args)))
12643 	    args = strip_innermost_template_args (args, 1);
12644 
12645 	  /* Otherwise return the full NONTYPE_ARGUMENT_PACK that
12646 	     tsubst_decl put in the hash table.  */
12647 	  return retrieve_specialization (t, args, 0);
12648 	}
12649 
12650       if (DECL_CONTEXT (t))
12651 	{
12652 	  tree ctx;
12653 
12654 	  ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
12655 				  /*entering_scope=*/1);
12656 	  if (ctx != DECL_CONTEXT (t))
12657 	    {
12658 	      tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
12659 	      if (!r)
12660 		{
12661 		  if (complain & tf_error)
12662 		    error ("using invalid field %qD", t);
12663 		  return error_mark_node;
12664 		}
12665 	      return r;
12666 	    }
12667 	}
12668 
12669       return t;
12670 
12671     case VAR_DECL:
12672     case FUNCTION_DECL:
12673       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
12674 	r = tsubst (t, args, complain, in_decl);
12675       else if (local_variable_p (t))
12676 	{
12677 	  r = retrieve_local_specialization (t);
12678 	  if (r == NULL_TREE)
12679 	    {
12680 	      if (DECL_ANON_UNION_VAR_P (t))
12681 		{
12682 		  /* Just use name lookup to find a member alias for an
12683 		     anonymous union, but then add it to the hash table.  */
12684 		  r = lookup_name (DECL_NAME (t));
12685 		  gcc_assert (DECL_ANON_UNION_VAR_P (r));
12686 		  register_local_specialization (r, t);
12687 		}
12688 	      else
12689 		{
12690 		  /* This can happen for a variable used in a
12691 		     late-specified return type of a local lambda, or for a
12692 		     local static or constant.  Building a new VAR_DECL
12693 		     should be OK in all those cases.  */
12694 		  r = tsubst_decl (t, args, complain);
12695 		  if (decl_constant_var_p (r))
12696 		    /* A use of a local constant must decay to its value.  */
12697 		    return integral_constant_value (r);
12698 		  gcc_assert (cp_unevaluated_operand || TREE_STATIC (r)
12699 			      || errorcount || sorrycount);
12700 		  return r;
12701 		}
12702 	    }
12703 	}
12704       else
12705 	r = t;
12706       mark_used (r);
12707       return r;
12708 
12709     case NAMESPACE_DECL:
12710       return t;
12711 
12712     case OVERLOAD:
12713       /* An OVERLOAD will always be a non-dependent overload set; an
12714 	 overload set from function scope will just be represented with an
12715 	 IDENTIFIER_NODE, and from class scope with a BASELINK.  */
12716       gcc_assert (!uses_template_parms (t));
12717       return t;
12718 
12719     case BASELINK:
12720       return tsubst_baselink (t, current_nonlambda_class_type (),
12721 			      args, complain, in_decl);
12722 
12723     case TEMPLATE_DECL:
12724       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
12725 	return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
12726 		       args, complain, in_decl);
12727       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
12728 	return tsubst (t, args, complain, in_decl);
12729       else if (DECL_CLASS_SCOPE_P (t)
12730 	       && uses_template_parms (DECL_CONTEXT (t)))
12731 	{
12732 	  /* Template template argument like the following example need
12733 	     special treatment:
12734 
12735 	       template <template <class> class TT> struct C {};
12736 	       template <class T> struct D {
12737 		 template <class U> struct E {};
12738 		 C<E> c;				// #1
12739 	       };
12740 	       D<int> d;				// #2
12741 
12742 	     We are processing the template argument `E' in #1 for
12743 	     the template instantiation #2.  Originally, `E' is a
12744 	     TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
12745 	     have to substitute this with one having context `D<int>'.  */
12746 
12747 	  tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
12748 	  return lookup_field (context, DECL_NAME(t), 0, false);
12749 	}
12750       else
12751 	/* Ordinary template template argument.  */
12752 	return t;
12753 
12754     case CAST_EXPR:
12755     case REINTERPRET_CAST_EXPR:
12756     case CONST_CAST_EXPR:
12757     case STATIC_CAST_EXPR:
12758     case DYNAMIC_CAST_EXPR:
12759     case IMPLICIT_CONV_EXPR:
12760     case CONVERT_EXPR:
12761     case NOP_EXPR:
12762       return build1
12763 	(code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12764 	 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
12765 
12766     case SIZEOF_EXPR:
12767       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
12768         {
12769 
12770           tree expanded, op = TREE_OPERAND (t, 0);
12771 	  int len = 0;
12772 
12773 	  if (SIZEOF_EXPR_TYPE_P (t))
12774 	    op = TREE_TYPE (op);
12775 
12776 	  ++cp_unevaluated_operand;
12777 	  ++c_inhibit_evaluation_warnings;
12778 	  /* We only want to compute the number of arguments.  */
12779 	  expanded = tsubst_pack_expansion (op, args, complain, in_decl);
12780 	  --cp_unevaluated_operand;
12781 	  --c_inhibit_evaluation_warnings;
12782 
12783 	  if (TREE_CODE (expanded) == TREE_VEC)
12784 	    len = TREE_VEC_LENGTH (expanded);
12785 
12786 	  if (expanded == error_mark_node)
12787 	    return error_mark_node;
12788 	  else if (PACK_EXPANSION_P (expanded)
12789 		   || (TREE_CODE (expanded) == TREE_VEC
12790 		       && len > 0
12791 		       && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
12792 	    {
12793 	      if (TREE_CODE (expanded) == TREE_VEC)
12794 		expanded = TREE_VEC_ELT (expanded, len - 1);
12795 
12796 	      if (TYPE_P (expanded))
12797 		return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR,
12798 						   complain & tf_error);
12799 	      else
12800 		return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
12801                                                    complain & tf_error);
12802 	    }
12803 	  else
12804 	    return build_int_cst (size_type_node, len);
12805         }
12806       if (SIZEOF_EXPR_TYPE_P (t))
12807 	{
12808 	  r = tsubst (TREE_TYPE (TREE_OPERAND (t, 0)),
12809 		      args, complain, in_decl);
12810 	  r = build1 (NOP_EXPR, r, error_mark_node);
12811 	  r = build1 (SIZEOF_EXPR,
12812 		      tsubst (TREE_TYPE (t), args, complain, in_decl), r);
12813 	  SIZEOF_EXPR_TYPE_P (r) = 1;
12814 	  return r;
12815 	}
12816       /* Fall through */
12817 
12818     case INDIRECT_REF:
12819     case NEGATE_EXPR:
12820     case TRUTH_NOT_EXPR:
12821     case BIT_NOT_EXPR:
12822     case ADDR_EXPR:
12823     case UNARY_PLUS_EXPR:      /* Unary + */
12824     case ALIGNOF_EXPR:
12825     case AT_ENCODE_EXPR:
12826     case ARROW_EXPR:
12827     case THROW_EXPR:
12828     case TYPEID_EXPR:
12829     case REALPART_EXPR:
12830     case IMAGPART_EXPR:
12831     case PAREN_EXPR:
12832       return build1
12833 	(code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12834 	 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
12835 
12836     case COMPONENT_REF:
12837       {
12838 	tree object;
12839 	tree name;
12840 
12841 	object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
12842 	name = TREE_OPERAND (t, 1);
12843 	if (TREE_CODE (name) == BIT_NOT_EXPR)
12844 	  {
12845 	    name = tsubst_copy (TREE_OPERAND (name, 0), args,
12846 				complain, in_decl);
12847 	    name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
12848 	  }
12849 	else if (TREE_CODE (name) == SCOPE_REF
12850 		 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
12851 	  {
12852 	    tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
12853 				     complain, in_decl);
12854 	    name = TREE_OPERAND (name, 1);
12855 	    name = tsubst_copy (TREE_OPERAND (name, 0), args,
12856 				complain, in_decl);
12857 	    name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
12858 	    name = build_qualified_name (/*type=*/NULL_TREE,
12859 					 base, name,
12860 					 /*template_p=*/false);
12861 	  }
12862 	else if (BASELINK_P (name))
12863 	  name = tsubst_baselink (name,
12864 				  non_reference (TREE_TYPE (object)),
12865 				  args, complain,
12866 				  in_decl);
12867 	else
12868 	  name = tsubst_copy (name, args, complain, in_decl);
12869 	return build_nt (COMPONENT_REF, object, name, NULL_TREE);
12870       }
12871 
12872     case PLUS_EXPR:
12873     case MINUS_EXPR:
12874     case MULT_EXPR:
12875     case TRUNC_DIV_EXPR:
12876     case CEIL_DIV_EXPR:
12877     case FLOOR_DIV_EXPR:
12878     case ROUND_DIV_EXPR:
12879     case EXACT_DIV_EXPR:
12880     case BIT_AND_EXPR:
12881     case BIT_IOR_EXPR:
12882     case BIT_XOR_EXPR:
12883     case TRUNC_MOD_EXPR:
12884     case FLOOR_MOD_EXPR:
12885     case TRUTH_ANDIF_EXPR:
12886     case TRUTH_ORIF_EXPR:
12887     case TRUTH_AND_EXPR:
12888     case TRUTH_OR_EXPR:
12889     case RSHIFT_EXPR:
12890     case LSHIFT_EXPR:
12891     case RROTATE_EXPR:
12892     case LROTATE_EXPR:
12893     case EQ_EXPR:
12894     case NE_EXPR:
12895     case MAX_EXPR:
12896     case MIN_EXPR:
12897     case LE_EXPR:
12898     case GE_EXPR:
12899     case LT_EXPR:
12900     case GT_EXPR:
12901     case COMPOUND_EXPR:
12902     case DOTSTAR_EXPR:
12903     case MEMBER_REF:
12904     case PREDECREMENT_EXPR:
12905     case PREINCREMENT_EXPR:
12906     case POSTDECREMENT_EXPR:
12907     case POSTINCREMENT_EXPR:
12908       return build_nt
12909 	(code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12910 	 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12911 
12912     case SCOPE_REF:
12913       return build_qualified_name (/*type=*/NULL_TREE,
12914 				   tsubst_copy (TREE_OPERAND (t, 0),
12915 						args, complain, in_decl),
12916 				   tsubst_copy (TREE_OPERAND (t, 1),
12917 						args, complain, in_decl),
12918 				   QUALIFIED_NAME_IS_TEMPLATE (t));
12919 
12920     case ARRAY_REF:
12921       return build_nt
12922 	(ARRAY_REF,
12923 	 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12924 	 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12925 	 NULL_TREE, NULL_TREE);
12926 
12927     case CALL_EXPR:
12928       {
12929 	int n = VL_EXP_OPERAND_LENGTH (t);
12930 	tree result = build_vl_exp (CALL_EXPR, n);
12931 	int i;
12932 	for (i = 0; i < n; i++)
12933 	  TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
12934 					     complain, in_decl);
12935 	return result;
12936       }
12937 
12938     case COND_EXPR:
12939     case MODOP_EXPR:
12940     case PSEUDO_DTOR_EXPR:
12941     case VEC_PERM_EXPR:
12942       {
12943 	r = build_nt
12944 	  (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12945 	   tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12946 	   tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
12947 	TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
12948 	return r;
12949       }
12950 
12951     case NEW_EXPR:
12952       {
12953 	r = build_nt
12954 	(code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12955 	 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12956 	 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
12957 	NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
12958 	return r;
12959       }
12960 
12961     case DELETE_EXPR:
12962       {
12963 	r = build_nt
12964 	(code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12965 	 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12966 	DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
12967 	DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
12968 	return r;
12969       }
12970 
12971     case TEMPLATE_ID_EXPR:
12972       {
12973 	/* Substituted template arguments */
12974 	tree fn = TREE_OPERAND (t, 0);
12975 	tree targs = TREE_OPERAND (t, 1);
12976 
12977 	fn = tsubst_copy (fn, args, complain, in_decl);
12978 	if (targs)
12979 	  targs = tsubst_template_args (targs, args, complain, in_decl);
12980 
12981 	return lookup_template_function (fn, targs);
12982       }
12983 
12984     case TREE_LIST:
12985       {
12986 	tree purpose, value, chain;
12987 
12988 	if (t == void_list_node)
12989 	  return t;
12990 
12991 	purpose = TREE_PURPOSE (t);
12992 	if (purpose)
12993 	  purpose = tsubst_copy (purpose, args, complain, in_decl);
12994 	value = TREE_VALUE (t);
12995 	if (value)
12996 	  value = tsubst_copy (value, args, complain, in_decl);
12997 	chain = TREE_CHAIN (t);
12998 	if (chain && chain != void_type_node)
12999 	  chain = tsubst_copy (chain, args, complain, in_decl);
13000 	if (purpose == TREE_PURPOSE (t)
13001 	    && value == TREE_VALUE (t)
13002 	    && chain == TREE_CHAIN (t))
13003 	  return t;
13004 	return tree_cons (purpose, value, chain);
13005       }
13006 
13007     case RECORD_TYPE:
13008     case UNION_TYPE:
13009     case ENUMERAL_TYPE:
13010     case INTEGER_TYPE:
13011     case TEMPLATE_TYPE_PARM:
13012     case TEMPLATE_TEMPLATE_PARM:
13013     case BOUND_TEMPLATE_TEMPLATE_PARM:
13014     case TEMPLATE_PARM_INDEX:
13015     case POINTER_TYPE:
13016     case REFERENCE_TYPE:
13017     case OFFSET_TYPE:
13018     case FUNCTION_TYPE:
13019     case METHOD_TYPE:
13020     case ARRAY_TYPE:
13021     case TYPENAME_TYPE:
13022     case UNBOUND_CLASS_TEMPLATE:
13023     case TYPEOF_TYPE:
13024     case DECLTYPE_TYPE:
13025     case TYPE_DECL:
13026       return tsubst (t, args, complain, in_decl);
13027 
13028     case USING_DECL:
13029       t = DECL_NAME (t);
13030       /* Fall through.  */
13031     case IDENTIFIER_NODE:
13032       if (IDENTIFIER_TYPENAME_P (t))
13033 	{
13034 	  tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13035 	  return mangle_conv_op_name_for_type (new_type);
13036 	}
13037       else
13038 	return t;
13039 
13040     case CONSTRUCTOR:
13041       /* This is handled by tsubst_copy_and_build.  */
13042       gcc_unreachable ();
13043 
13044     case VA_ARG_EXPR:
13045       return build_x_va_arg (EXPR_LOCATION (t),
13046 			     tsubst_copy (TREE_OPERAND (t, 0), args, complain,
13047 					  in_decl),
13048 			     tsubst (TREE_TYPE (t), args, complain, in_decl));
13049 
13050     case CLEANUP_POINT_EXPR:
13051       /* We shouldn't have built any of these during initial template
13052 	 generation.  Instead, they should be built during instantiation
13053 	 in response to the saved STMT_IS_FULL_EXPR_P setting.  */
13054       gcc_unreachable ();
13055 
13056     case OFFSET_REF:
13057       r = build2
13058 	(code, tsubst (TREE_TYPE (t), args, complain, in_decl),
13059 	 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
13060 	 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
13061       PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
13062       mark_used (TREE_OPERAND (r, 1));
13063       return r;
13064 
13065     case EXPR_PACK_EXPANSION:
13066       error ("invalid use of pack expansion expression");
13067       return error_mark_node;
13068 
13069     case NONTYPE_ARGUMENT_PACK:
13070       error ("use %<...%> to expand argument pack");
13071       return error_mark_node;
13072 
13073     case INTEGER_CST:
13074     case REAL_CST:
13075     case STRING_CST:
13076     case COMPLEX_CST:
13077       {
13078 	/* Instantiate any typedefs in the type.  */
13079 	tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13080 	r = fold_convert (type, t);
13081 	gcc_assert (TREE_CODE (r) == code);
13082 	return r;
13083       }
13084 
13085     case PTRMEM_CST:
13086       /* These can sometimes show up in a partial instantiation, but never
13087 	 involve template parms.  */
13088       gcc_assert (!uses_template_parms (t));
13089       return t;
13090 
13091     default:
13092       /* We shouldn't get here, but keep going if !ENABLE_CHECKING.  */
13093       gcc_checking_assert (false);
13094       return t;
13095     }
13096 }
13097 
13098 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
13099 
13100 static tree
tsubst_omp_clauses(tree clauses,bool declare_simd,tree args,tsubst_flags_t complain,tree in_decl)13101 tsubst_omp_clauses (tree clauses, bool declare_simd,
13102 		    tree args, tsubst_flags_t complain, tree in_decl)
13103 {
13104   tree new_clauses = NULL, nc, oc;
13105 
13106   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
13107     {
13108       nc = copy_node (oc);
13109       OMP_CLAUSE_CHAIN (nc) = new_clauses;
13110       new_clauses = nc;
13111 
13112       switch (OMP_CLAUSE_CODE (nc))
13113 	{
13114 	case OMP_CLAUSE_LASTPRIVATE:
13115 	  if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
13116 	    {
13117 	      OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
13118 	      tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
13119 			   in_decl, /*integral_constant_expression_p=*/false);
13120 	      OMP_CLAUSE_LASTPRIVATE_STMT (nc)
13121 		= pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
13122 	    }
13123 	  /* FALLTHRU */
13124 	case OMP_CLAUSE_PRIVATE:
13125 	case OMP_CLAUSE_SHARED:
13126 	case OMP_CLAUSE_FIRSTPRIVATE:
13127 	case OMP_CLAUSE_COPYIN:
13128 	case OMP_CLAUSE_COPYPRIVATE:
13129 	case OMP_CLAUSE_IF:
13130 	case OMP_CLAUSE_NUM_THREADS:
13131 	case OMP_CLAUSE_SCHEDULE:
13132 	case OMP_CLAUSE_COLLAPSE:
13133 	case OMP_CLAUSE_FINAL:
13134 	case OMP_CLAUSE_DEPEND:
13135 	case OMP_CLAUSE_FROM:
13136 	case OMP_CLAUSE_TO:
13137 	case OMP_CLAUSE_UNIFORM:
13138 	case OMP_CLAUSE_MAP:
13139 	case OMP_CLAUSE_DEVICE:
13140 	case OMP_CLAUSE_DIST_SCHEDULE:
13141 	case OMP_CLAUSE_NUM_TEAMS:
13142 	case OMP_CLAUSE_THREAD_LIMIT:
13143 	case OMP_CLAUSE_SAFELEN:
13144 	case OMP_CLAUSE_SIMDLEN:
13145 	  OMP_CLAUSE_OPERAND (nc, 0)
13146 	    = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
13147 			   in_decl, /*integral_constant_expression_p=*/false);
13148 	  break;
13149 	case OMP_CLAUSE_REDUCTION:
13150 	  if (OMP_CLAUSE_REDUCTION_PLACEHOLDER (oc))
13151 	    {
13152 	      tree placeholder = OMP_CLAUSE_REDUCTION_PLACEHOLDER (oc);
13153 	      if (TREE_CODE (placeholder) == SCOPE_REF)
13154 		{
13155 		  tree scope = tsubst (TREE_OPERAND (placeholder, 0), args,
13156 				       complain, in_decl);
13157 		  OMP_CLAUSE_REDUCTION_PLACEHOLDER (nc)
13158 		    = build_qualified_name (NULL_TREE, scope,
13159 					    TREE_OPERAND (placeholder, 1),
13160 					    false);
13161 		}
13162 	      else
13163 		gcc_assert (identifier_p (placeholder));
13164 	    }
13165 	  OMP_CLAUSE_OPERAND (nc, 0)
13166 	    = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
13167 			   in_decl, /*integral_constant_expression_p=*/false);
13168 	  break;
13169 	case OMP_CLAUSE_LINEAR:
13170 	case OMP_CLAUSE_ALIGNED:
13171 	  OMP_CLAUSE_OPERAND (nc, 0)
13172 	    = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
13173 			   in_decl, /*integral_constant_expression_p=*/false);
13174 	  OMP_CLAUSE_OPERAND (nc, 1)
13175 	    = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 1), args, complain,
13176 			   in_decl, /*integral_constant_expression_p=*/false);
13177 	  break;
13178 
13179 	case OMP_CLAUSE_NOWAIT:
13180 	case OMP_CLAUSE_ORDERED:
13181 	case OMP_CLAUSE_DEFAULT:
13182 	case OMP_CLAUSE_UNTIED:
13183 	case OMP_CLAUSE_MERGEABLE:
13184 	case OMP_CLAUSE_INBRANCH:
13185 	case OMP_CLAUSE_NOTINBRANCH:
13186 	case OMP_CLAUSE_PROC_BIND:
13187 	case OMP_CLAUSE_FOR:
13188 	case OMP_CLAUSE_PARALLEL:
13189 	case OMP_CLAUSE_SECTIONS:
13190 	case OMP_CLAUSE_TASKGROUP:
13191 	  break;
13192 	default:
13193 	  gcc_unreachable ();
13194 	}
13195     }
13196 
13197   new_clauses = nreverse (new_clauses);
13198   if (!declare_simd)
13199     new_clauses = finish_omp_clauses (new_clauses);
13200   return new_clauses;
13201 }
13202 
13203 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
13204 
13205 static tree
tsubst_copy_asm_operands(tree t,tree args,tsubst_flags_t complain,tree in_decl)13206 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
13207 			  tree in_decl)
13208 {
13209 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
13210 
13211   tree purpose, value, chain;
13212 
13213   if (t == NULL)
13214     return t;
13215 
13216   if (TREE_CODE (t) != TREE_LIST)
13217     return tsubst_copy_and_build (t, args, complain, in_decl,
13218 				  /*function_p=*/false,
13219 				  /*integral_constant_expression_p=*/false);
13220 
13221   if (t == void_list_node)
13222     return t;
13223 
13224   purpose = TREE_PURPOSE (t);
13225   if (purpose)
13226     purpose = RECUR (purpose);
13227   value = TREE_VALUE (t);
13228   if (value)
13229     {
13230       if (TREE_CODE (value) != LABEL_DECL)
13231 	value = RECUR (value);
13232       else
13233 	{
13234 	  value = lookup_label (DECL_NAME (value));
13235 	  gcc_assert (TREE_CODE (value) == LABEL_DECL);
13236 	  TREE_USED (value) = 1;
13237 	}
13238     }
13239   chain = TREE_CHAIN (t);
13240   if (chain && chain != void_type_node)
13241     chain = RECUR (chain);
13242   return tree_cons (purpose, value, chain);
13243 #undef RECUR
13244 }
13245 
13246 /* Substitute one OMP_FOR iterator.  */
13247 
13248 static void
tsubst_omp_for_iterator(tree t,int i,tree declv,tree initv,tree condv,tree incrv,tree * clauses,tree args,tsubst_flags_t complain,tree in_decl,bool integral_constant_expression_p)13249 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
13250 			 tree condv, tree incrv, tree *clauses,
13251 			 tree args, tsubst_flags_t complain, tree in_decl,
13252 			 bool integral_constant_expression_p)
13253 {
13254 #define RECUR(NODE)				\
13255   tsubst_expr ((NODE), args, complain, in_decl,	\
13256 	       integral_constant_expression_p)
13257   tree decl, init, cond, incr;
13258 
13259   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
13260   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
13261   decl = TREE_OPERAND (init, 0);
13262   init = TREE_OPERAND (init, 1);
13263   tree decl_expr = NULL_TREE;
13264   if (init && TREE_CODE (init) == DECL_EXPR)
13265     {
13266       /* We need to jump through some hoops to handle declarations in the
13267 	 for-init-statement, since we might need to handle auto deduction,
13268 	 but we need to keep control of initialization.  */
13269       decl_expr = init;
13270       init = DECL_INITIAL (DECL_EXPR_DECL (init));
13271       decl = tsubst_decl (decl, args, complain);
13272     }
13273   else
13274     decl = RECUR (decl);
13275   init = RECUR (init);
13276 
13277   tree auto_node = type_uses_auto (TREE_TYPE (decl));
13278   if (auto_node && init)
13279     TREE_TYPE (decl)
13280       = do_auto_deduction (TREE_TYPE (decl), init, auto_node);
13281 
13282   gcc_assert (!type_dependent_expression_p (decl));
13283 
13284   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
13285     {
13286       if (decl_expr)
13287 	{
13288 	  /* Declare the variable, but don't let that initialize it.  */
13289 	  tree init_sav = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
13290 	  DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL_TREE;
13291 	  RECUR (decl_expr);
13292 	  DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init_sav;
13293 	}
13294 
13295       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
13296       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
13297       if (TREE_CODE (incr) == MODIFY_EXPR)
13298 	incr = build_x_modify_expr (EXPR_LOCATION (incr),
13299 				    RECUR (TREE_OPERAND (incr, 0)), NOP_EXPR,
13300 				    RECUR (TREE_OPERAND (incr, 1)),
13301 				    complain);
13302       else
13303 	incr = RECUR (incr);
13304       TREE_VEC_ELT (declv, i) = decl;
13305       TREE_VEC_ELT (initv, i) = init;
13306       TREE_VEC_ELT (condv, i) = cond;
13307       TREE_VEC_ELT (incrv, i) = incr;
13308       return;
13309     }
13310 
13311   if (decl_expr)
13312     {
13313       /* Declare and initialize the variable.  */
13314       RECUR (decl_expr);
13315       init = NULL_TREE;
13316     }
13317   else if (init)
13318     {
13319       tree c;
13320       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
13321 	{
13322 	  if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
13323 	       || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
13324 	      && OMP_CLAUSE_DECL (c) == decl)
13325 	    break;
13326 	  else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
13327 		   && OMP_CLAUSE_DECL (c) == decl)
13328 	    error ("iteration variable %qD should not be firstprivate", decl);
13329 	  else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
13330 		   && OMP_CLAUSE_DECL (c) == decl)
13331 	    error ("iteration variable %qD should not be reduction", decl);
13332 	}
13333       if (c == NULL)
13334 	{
13335 	  c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
13336 	  OMP_CLAUSE_DECL (c) = decl;
13337 	  c = finish_omp_clauses (c);
13338 	  if (c)
13339 	    {
13340 	      OMP_CLAUSE_CHAIN (c) = *clauses;
13341 	      *clauses = c;
13342 	    }
13343 	}
13344     }
13345   cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
13346   if (COMPARISON_CLASS_P (cond))
13347     cond = build2 (TREE_CODE (cond), boolean_type_node,
13348 		   RECUR (TREE_OPERAND (cond, 0)),
13349 		   RECUR (TREE_OPERAND (cond, 1)));
13350   else
13351     cond = RECUR (cond);
13352   incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
13353   switch (TREE_CODE (incr))
13354     {
13355     case PREINCREMENT_EXPR:
13356     case PREDECREMENT_EXPR:
13357     case POSTINCREMENT_EXPR:
13358     case POSTDECREMENT_EXPR:
13359       incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
13360 		     RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
13361       break;
13362     case MODIFY_EXPR:
13363       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
13364 	  || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
13365 	{
13366 	  tree rhs = TREE_OPERAND (incr, 1);
13367 	  incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
13368 			 RECUR (TREE_OPERAND (incr, 0)),
13369 			 build2 (TREE_CODE (rhs), TREE_TYPE (decl),
13370 				 RECUR (TREE_OPERAND (rhs, 0)),
13371 				 RECUR (TREE_OPERAND (rhs, 1))));
13372 	}
13373       else
13374 	incr = RECUR (incr);
13375       break;
13376     case MODOP_EXPR:
13377       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
13378 	  || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
13379 	{
13380 	  tree lhs = RECUR (TREE_OPERAND (incr, 0));
13381 	  incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
13382 			 build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
13383 				 TREE_TYPE (decl), lhs,
13384 				 RECUR (TREE_OPERAND (incr, 2))));
13385 	}
13386       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
13387 	       && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
13388 		   || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
13389 	{
13390 	  tree rhs = TREE_OPERAND (incr, 2);
13391 	  incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
13392 			 RECUR (TREE_OPERAND (incr, 0)),
13393 			 build2 (TREE_CODE (rhs), TREE_TYPE (decl),
13394 				 RECUR (TREE_OPERAND (rhs, 0)),
13395 				 RECUR (TREE_OPERAND (rhs, 1))));
13396 	}
13397       else
13398 	incr = RECUR (incr);
13399       break;
13400     default:
13401       incr = RECUR (incr);
13402       break;
13403     }
13404 
13405   TREE_VEC_ELT (declv, i) = decl;
13406   TREE_VEC_ELT (initv, i) = init;
13407   TREE_VEC_ELT (condv, i) = cond;
13408   TREE_VEC_ELT (incrv, i) = incr;
13409 #undef RECUR
13410 }
13411 
13412 /* Like tsubst_copy for expressions, etc. but also does semantic
13413    processing.  */
13414 
13415 static tree
tsubst_expr(tree t,tree args,tsubst_flags_t complain,tree in_decl,bool integral_constant_expression_p)13416 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
13417 	     bool integral_constant_expression_p)
13418 {
13419 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
13420 #define RECUR(NODE)				\
13421   tsubst_expr ((NODE), args, complain, in_decl,	\
13422 	       integral_constant_expression_p)
13423 
13424   tree stmt, tmp;
13425   tree r;
13426   location_t loc;
13427 
13428   if (t == NULL_TREE || t == error_mark_node)
13429     return t;
13430 
13431   loc = input_location;
13432   if (EXPR_HAS_LOCATION (t))
13433     input_location = EXPR_LOCATION (t);
13434   if (STATEMENT_CODE_P (TREE_CODE (t)))
13435     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
13436 
13437   switch (TREE_CODE (t))
13438     {
13439     case STATEMENT_LIST:
13440       {
13441 	tree_stmt_iterator i;
13442 	for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
13443 	  RECUR (tsi_stmt (i));
13444 	break;
13445       }
13446 
13447     case CTOR_INITIALIZER:
13448       finish_mem_initializers (tsubst_initializer_list
13449 			       (TREE_OPERAND (t, 0), args));
13450       break;
13451 
13452     case RETURN_EXPR:
13453       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
13454       break;
13455 
13456     case EXPR_STMT:
13457       tmp = RECUR (EXPR_STMT_EXPR (t));
13458       if (EXPR_STMT_STMT_EXPR_RESULT (t))
13459 	finish_stmt_expr_expr (tmp, cur_stmt_expr);
13460       else
13461 	finish_expr_stmt (tmp);
13462       break;
13463 
13464     case USING_STMT:
13465       do_using_directive (USING_STMT_NAMESPACE (t));
13466       break;
13467 
13468     case DECL_EXPR:
13469       {
13470 	tree decl, pattern_decl;
13471 	tree init;
13472 
13473 	pattern_decl = decl = DECL_EXPR_DECL (t);
13474 	if (TREE_CODE (decl) == LABEL_DECL)
13475 	  finish_label_decl (DECL_NAME (decl));
13476 	else if (TREE_CODE (decl) == USING_DECL)
13477 	  {
13478 	    tree scope = USING_DECL_SCOPE (decl);
13479 	    tree name = DECL_NAME (decl);
13480 	    tree decl;
13481 
13482 	    scope = tsubst (scope, args, complain, in_decl);
13483 	    decl = lookup_qualified_name (scope, name,
13484 					  /*is_type_p=*/false,
13485 					  /*complain=*/false);
13486 	    if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
13487 	      qualified_name_lookup_error (scope, name, decl, input_location);
13488 	    else
13489 	      do_local_using_decl (decl, scope, name);
13490 	  }
13491 	else if (DECL_PACK_P (decl))
13492 	  {
13493 	    /* Don't build up decls for a variadic capture proxy, we'll
13494 	       instantiate the elements directly as needed.  */
13495 	    break;
13496 	  }
13497 	else
13498 	  {
13499 	    init = DECL_INITIAL (decl);
13500 	    decl = tsubst (decl, args, complain, in_decl);
13501 	    if (decl != error_mark_node)
13502 	      {
13503 		/* By marking the declaration as instantiated, we avoid
13504 		   trying to instantiate it.  Since instantiate_decl can't
13505 		   handle local variables, and since we've already done
13506 		   all that needs to be done, that's the right thing to
13507 		   do.  */
13508 		if (VAR_P (decl))
13509 		  DECL_TEMPLATE_INSTANTIATED (decl) = 1;
13510 		if (VAR_P (decl)
13511 		    && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
13512 		  /* Anonymous aggregates are a special case.  */
13513 		  finish_anon_union (decl);
13514 		else if (is_capture_proxy (DECL_EXPR_DECL (t)))
13515 		  {
13516 		    DECL_CONTEXT (decl) = current_function_decl;
13517 		    if (DECL_NAME (decl) == this_identifier)
13518 		      {
13519 			tree lam = DECL_CONTEXT (current_function_decl);
13520 			lam = CLASSTYPE_LAMBDA_EXPR (lam);
13521 			LAMBDA_EXPR_THIS_CAPTURE (lam) = decl;
13522 		      }
13523 		    insert_capture_proxy (decl);
13524 		  }
13525 		else if (DECL_IMPLICIT_TYPEDEF_P (t))
13526 		  /* We already did a pushtag.  */;
13527 		else if (TREE_CODE (decl) == FUNCTION_DECL
13528 			 && DECL_OMP_DECLARE_REDUCTION_P (decl)
13529 			 && DECL_FUNCTION_SCOPE_P (pattern_decl))
13530 		  {
13531 		    DECL_CONTEXT (decl) = NULL_TREE;
13532 		    pushdecl (decl);
13533 		    DECL_CONTEXT (decl) = current_function_decl;
13534 		    cp_check_omp_declare_reduction (decl);
13535 		  }
13536 		else
13537 		  {
13538 		    int const_init = false;
13539 		    maybe_push_decl (decl);
13540 		    if (VAR_P (decl)
13541 			&& DECL_PRETTY_FUNCTION_P (decl))
13542 		      {
13543 			/* For __PRETTY_FUNCTION__ we have to adjust the
13544 			   initializer.  */
13545 			const char *const name
13546 			  = cxx_printable_name (current_function_decl, 2);
13547 			init = cp_fname_init (name, &TREE_TYPE (decl));
13548 		      }
13549 		    else
13550 		      {
13551 			tree t = RECUR (init);
13552 
13553 			if (init && !t)
13554 			  {
13555 			    /* If we had an initializer but it
13556 			       instantiated to nothing,
13557 			       value-initialize the object.  This will
13558 			       only occur when the initializer was a
13559 			       pack expansion where the parameter packs
13560 			       used in that expansion were of length
13561 			       zero.  */
13562 			    init = build_value_init (TREE_TYPE (decl),
13563 						     complain);
13564 			    if (TREE_CODE (init) == AGGR_INIT_EXPR)
13565 			      init = get_target_expr_sfinae (init, complain);
13566 			  }
13567 			else
13568 			  init = t;
13569 		      }
13570 
13571 		    if (VAR_P (decl))
13572 		      const_init = (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P
13573 				    (pattern_decl));
13574 		    cp_finish_decl (decl, init, const_init, NULL_TREE, 0);
13575 		  }
13576 	      }
13577 	  }
13578 
13579 	break;
13580       }
13581 
13582     case FOR_STMT:
13583       stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
13584       RECUR (FOR_INIT_STMT (t));
13585       finish_for_init_stmt (stmt);
13586       tmp = RECUR (FOR_COND (t));
13587       finish_for_cond (tmp, stmt, false);
13588       tmp = RECUR (FOR_EXPR (t));
13589       finish_for_expr (tmp, stmt);
13590       RECUR (FOR_BODY (t));
13591       finish_for_stmt (stmt);
13592       break;
13593 
13594     case RANGE_FOR_STMT:
13595       {
13596         tree decl, expr;
13597         stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
13598         decl = RANGE_FOR_DECL (t);
13599         decl = tsubst (decl, args, complain, in_decl);
13600         maybe_push_decl (decl);
13601         expr = RECUR (RANGE_FOR_EXPR (t));
13602         stmt = cp_convert_range_for (stmt, decl, expr, RANGE_FOR_IVDEP (t));
13603         RECUR (RANGE_FOR_BODY (t));
13604         finish_for_stmt (stmt);
13605       }
13606       break;
13607 
13608     case WHILE_STMT:
13609       stmt = begin_while_stmt ();
13610       tmp = RECUR (WHILE_COND (t));
13611       finish_while_stmt_cond (tmp, stmt, false);
13612       RECUR (WHILE_BODY (t));
13613       finish_while_stmt (stmt);
13614       break;
13615 
13616     case DO_STMT:
13617       stmt = begin_do_stmt ();
13618       RECUR (DO_BODY (t));
13619       finish_do_body (stmt);
13620       tmp = RECUR (DO_COND (t));
13621       finish_do_stmt (tmp, stmt, false);
13622       break;
13623 
13624     case IF_STMT:
13625       stmt = begin_if_stmt ();
13626       tmp = RECUR (IF_COND (t));
13627       finish_if_stmt_cond (tmp, stmt);
13628       RECUR (THEN_CLAUSE (t));
13629       finish_then_clause (stmt);
13630 
13631       if (ELSE_CLAUSE (t))
13632 	{
13633 	  begin_else_clause (stmt);
13634 	  RECUR (ELSE_CLAUSE (t));
13635 	  finish_else_clause (stmt);
13636 	}
13637 
13638       finish_if_stmt (stmt);
13639       break;
13640 
13641     case BIND_EXPR:
13642       if (BIND_EXPR_BODY_BLOCK (t))
13643 	stmt = begin_function_body ();
13644       else
13645 	stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
13646 				    ? BCS_TRY_BLOCK : 0);
13647 
13648       RECUR (BIND_EXPR_BODY (t));
13649 
13650       if (BIND_EXPR_BODY_BLOCK (t))
13651 	finish_function_body (stmt);
13652       else
13653 	finish_compound_stmt (stmt);
13654       break;
13655 
13656     case BREAK_STMT:
13657       finish_break_stmt ();
13658       break;
13659 
13660     case CONTINUE_STMT:
13661       finish_continue_stmt ();
13662       break;
13663 
13664     case SWITCH_STMT:
13665       stmt = begin_switch_stmt ();
13666       tmp = RECUR (SWITCH_STMT_COND (t));
13667       finish_switch_cond (tmp, stmt);
13668       RECUR (SWITCH_STMT_BODY (t));
13669       finish_switch_stmt (stmt);
13670       break;
13671 
13672     case CASE_LABEL_EXPR:
13673       finish_case_label (EXPR_LOCATION (t),
13674 			 RECUR (CASE_LOW (t)),
13675 			 RECUR (CASE_HIGH (t)));
13676       break;
13677 
13678     case LABEL_EXPR:
13679       {
13680 	tree decl = LABEL_EXPR_LABEL (t);
13681 	tree label;
13682 
13683 	label = finish_label_stmt (DECL_NAME (decl));
13684 	if (DECL_ATTRIBUTES (decl) != NULL_TREE)
13685 	  cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
13686       }
13687       break;
13688 
13689     case GOTO_EXPR:
13690       tmp = GOTO_DESTINATION (t);
13691       if (TREE_CODE (tmp) != LABEL_DECL)
13692 	/* Computed goto's must be tsubst'd into.  On the other hand,
13693 	   non-computed gotos must not be; the identifier in question
13694 	   will have no binding.  */
13695 	tmp = RECUR (tmp);
13696       else
13697 	tmp = DECL_NAME (tmp);
13698       finish_goto_stmt (tmp);
13699       break;
13700 
13701     case ASM_EXPR:
13702       tmp = finish_asm_stmt
13703 	(ASM_VOLATILE_P (t),
13704 	 RECUR (ASM_STRING (t)),
13705 	 tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
13706 	 tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
13707 	 tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl),
13708 	 tsubst_copy_asm_operands (ASM_LABELS (t), args, complain, in_decl));
13709       {
13710 	tree asm_expr = tmp;
13711 	if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
13712 	  asm_expr = TREE_OPERAND (asm_expr, 0);
13713 	ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
13714       }
13715       break;
13716 
13717     case TRY_BLOCK:
13718       if (CLEANUP_P (t))
13719 	{
13720 	  stmt = begin_try_block ();
13721 	  RECUR (TRY_STMTS (t));
13722 	  finish_cleanup_try_block (stmt);
13723 	  finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
13724 	}
13725       else
13726 	{
13727 	  tree compound_stmt = NULL_TREE;
13728 
13729 	  if (FN_TRY_BLOCK_P (t))
13730 	    stmt = begin_function_try_block (&compound_stmt);
13731 	  else
13732 	    stmt = begin_try_block ();
13733 
13734 	  RECUR (TRY_STMTS (t));
13735 
13736 	  if (FN_TRY_BLOCK_P (t))
13737 	    finish_function_try_block (stmt);
13738 	  else
13739 	    finish_try_block (stmt);
13740 
13741 	  RECUR (TRY_HANDLERS (t));
13742 	  if (FN_TRY_BLOCK_P (t))
13743 	    finish_function_handler_sequence (stmt, compound_stmt);
13744 	  else
13745 	    finish_handler_sequence (stmt);
13746 	}
13747       break;
13748 
13749     case HANDLER:
13750       {
13751 	tree decl = HANDLER_PARMS (t);
13752 
13753 	if (decl)
13754 	  {
13755 	    decl = tsubst (decl, args, complain, in_decl);
13756 	    /* Prevent instantiate_decl from trying to instantiate
13757 	       this variable.  We've already done all that needs to be
13758 	       done.  */
13759 	    if (decl != error_mark_node)
13760 	      DECL_TEMPLATE_INSTANTIATED (decl) = 1;
13761 	  }
13762 	stmt = begin_handler ();
13763 	finish_handler_parms (decl, stmt);
13764 	RECUR (HANDLER_BODY (t));
13765 	finish_handler (stmt);
13766       }
13767       break;
13768 
13769     case TAG_DEFN:
13770       tmp = tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
13771       if (CLASS_TYPE_P (tmp))
13772 	{
13773 	  /* Local classes are not independent templates; they are
13774 	     instantiated along with their containing function.  And this
13775 	     way we don't have to deal with pushing out of one local class
13776 	     to instantiate a member of another local class.  */
13777 	  tree fn;
13778 	  /* Closures are handled by the LAMBDA_EXPR.  */
13779 	  gcc_assert (!LAMBDA_TYPE_P (TREE_TYPE (t)));
13780 	  complete_type (tmp);
13781 	  for (fn = TYPE_METHODS (tmp); fn; fn = DECL_CHAIN (fn))
13782 	    if (!DECL_ARTIFICIAL (fn))
13783 	      instantiate_decl (fn, /*defer_ok*/0, /*expl_inst_class*/false);
13784 	}
13785       break;
13786 
13787     case STATIC_ASSERT:
13788       {
13789 	tree condition;
13790 
13791 	++c_inhibit_evaluation_warnings;
13792         condition =
13793           tsubst_expr (STATIC_ASSERT_CONDITION (t),
13794                        args,
13795                        complain, in_decl,
13796                        /*integral_constant_expression_p=*/true);
13797 	--c_inhibit_evaluation_warnings;
13798 
13799         finish_static_assert (condition,
13800                               STATIC_ASSERT_MESSAGE (t),
13801                               STATIC_ASSERT_SOURCE_LOCATION (t),
13802                               /*member_p=*/false);
13803       }
13804       break;
13805 
13806     case OMP_PARALLEL:
13807       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t), false,
13808 				args, complain, in_decl);
13809       stmt = begin_omp_parallel ();
13810       RECUR (OMP_PARALLEL_BODY (t));
13811       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
13812 	= OMP_PARALLEL_COMBINED (t);
13813       break;
13814 
13815     case OMP_TASK:
13816       tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t), false,
13817 				args, complain, in_decl);
13818       stmt = begin_omp_task ();
13819       RECUR (OMP_TASK_BODY (t));
13820       finish_omp_task (tmp, stmt);
13821       break;
13822 
13823     case OMP_FOR:
13824     case OMP_SIMD:
13825     case CILK_SIMD:
13826     case OMP_DISTRIBUTE:
13827       {
13828 	tree clauses, body, pre_body;
13829 	tree declv = NULL_TREE, initv = NULL_TREE, condv = NULL_TREE;
13830 	tree incrv = NULL_TREE;
13831 	int i;
13832 
13833 	clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t), false,
13834 				      args, complain, in_decl);
13835 	if (OMP_FOR_INIT (t) != NULL_TREE)
13836 	  {
13837 	    declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13838 	    initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13839 	    condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13840 	    incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13841 	  }
13842 
13843 	stmt = begin_omp_structured_block ();
13844 
13845 	pre_body = push_stmt_list ();
13846 	RECUR (OMP_FOR_PRE_BODY (t));
13847 	pre_body = pop_stmt_list (pre_body);
13848 
13849 	if (OMP_FOR_INIT (t) != NULL_TREE)
13850 	  for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
13851 	    tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
13852 				     &clauses, args, complain, in_decl,
13853 				     integral_constant_expression_p);
13854 
13855 	body = push_stmt_list ();
13856 	RECUR (OMP_FOR_BODY (t));
13857 	body = pop_stmt_list (body);
13858 
13859 	if (OMP_FOR_INIT (t) != NULL_TREE)
13860 	  t = finish_omp_for (EXPR_LOCATION (t), TREE_CODE (t), declv, initv,
13861 			      condv, incrv, body, pre_body, clauses);
13862 	else
13863 	  {
13864 	    t = make_node (TREE_CODE (t));
13865 	    TREE_TYPE (t) = void_type_node;
13866 	    OMP_FOR_BODY (t) = body;
13867 	    OMP_FOR_PRE_BODY (t) = pre_body;
13868 	    OMP_FOR_CLAUSES (t) = clauses;
13869 	    SET_EXPR_LOCATION (t, EXPR_LOCATION (t));
13870 	    add_stmt (t);
13871 	  }
13872 
13873 	add_stmt (finish_omp_structured_block (stmt));
13874       }
13875       break;
13876 
13877     case OMP_SECTIONS:
13878     case OMP_SINGLE:
13879     case OMP_TEAMS:
13880       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), false,
13881 				args, complain, in_decl);
13882       stmt = push_stmt_list ();
13883       RECUR (OMP_BODY (t));
13884       stmt = pop_stmt_list (stmt);
13885 
13886       t = copy_node (t);
13887       OMP_BODY (t) = stmt;
13888       OMP_CLAUSES (t) = tmp;
13889       add_stmt (t);
13890       break;
13891 
13892     case OMP_TARGET_DATA:
13893     case OMP_TARGET:
13894       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), false,
13895 				args, complain, in_decl);
13896       keep_next_level (true);
13897       stmt = begin_omp_structured_block ();
13898 
13899       RECUR (OMP_BODY (t));
13900       stmt = finish_omp_structured_block (stmt);
13901 
13902       t = copy_node (t);
13903       OMP_BODY (t) = stmt;
13904       OMP_CLAUSES (t) = tmp;
13905       add_stmt (t);
13906       break;
13907 
13908     case OMP_TARGET_UPDATE:
13909       tmp = tsubst_omp_clauses (OMP_TARGET_UPDATE_CLAUSES (t), false,
13910 				args, complain, in_decl);
13911       t = copy_node (t);
13912       OMP_CLAUSES (t) = tmp;
13913       add_stmt (t);
13914       break;
13915 
13916     case OMP_SECTION:
13917     case OMP_CRITICAL:
13918     case OMP_MASTER:
13919     case OMP_TASKGROUP:
13920     case OMP_ORDERED:
13921       stmt = push_stmt_list ();
13922       RECUR (OMP_BODY (t));
13923       stmt = pop_stmt_list (stmt);
13924 
13925       t = copy_node (t);
13926       OMP_BODY (t) = stmt;
13927       add_stmt (t);
13928       break;
13929 
13930     case OMP_ATOMIC:
13931       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
13932       if (TREE_CODE (TREE_OPERAND (t, 1)) != MODIFY_EXPR)
13933 	{
13934 	  tree op1 = TREE_OPERAND (t, 1);
13935 	  tree rhs1 = NULL_TREE;
13936 	  tree lhs, rhs;
13937 	  if (TREE_CODE (op1) == COMPOUND_EXPR)
13938 	    {
13939 	      rhs1 = RECUR (TREE_OPERAND (op1, 0));
13940 	      op1 = TREE_OPERAND (op1, 1);
13941 	    }
13942 	  lhs = RECUR (TREE_OPERAND (op1, 0));
13943 	  rhs = RECUR (TREE_OPERAND (op1, 1));
13944 	  finish_omp_atomic (OMP_ATOMIC, TREE_CODE (op1), lhs, rhs,
13945 			     NULL_TREE, NULL_TREE, rhs1,
13946 			     OMP_ATOMIC_SEQ_CST (t));
13947 	}
13948       else
13949 	{
13950 	  tree op1 = TREE_OPERAND (t, 1);
13951 	  tree v = NULL_TREE, lhs, rhs = NULL_TREE, lhs1 = NULL_TREE;
13952 	  tree rhs1 = NULL_TREE;
13953 	  enum tree_code code = TREE_CODE (TREE_OPERAND (op1, 1));
13954 	  enum tree_code opcode = NOP_EXPR;
13955 	  if (code == OMP_ATOMIC_READ)
13956 	    {
13957 	      v = RECUR (TREE_OPERAND (op1, 0));
13958 	      lhs = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
13959 	    }
13960 	  else if (code == OMP_ATOMIC_CAPTURE_OLD
13961 		   || code == OMP_ATOMIC_CAPTURE_NEW)
13962 	    {
13963 	      tree op11 = TREE_OPERAND (TREE_OPERAND (op1, 1), 1);
13964 	      v = RECUR (TREE_OPERAND (op1, 0));
13965 	      lhs1 = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
13966 	      if (TREE_CODE (op11) == COMPOUND_EXPR)
13967 		{
13968 		  rhs1 = RECUR (TREE_OPERAND (op11, 0));
13969 		  op11 = TREE_OPERAND (op11, 1);
13970 		}
13971 	      lhs = RECUR (TREE_OPERAND (op11, 0));
13972 	      rhs = RECUR (TREE_OPERAND (op11, 1));
13973 	      opcode = TREE_CODE (op11);
13974 	      if (opcode == MODIFY_EXPR)
13975 		opcode = NOP_EXPR;
13976 	    }
13977 	  else
13978 	    {
13979 	      code = OMP_ATOMIC;
13980 	      lhs = RECUR (TREE_OPERAND (op1, 0));
13981 	      rhs = RECUR (TREE_OPERAND (op1, 1));
13982 	    }
13983 	  finish_omp_atomic (code, opcode, lhs, rhs, v, lhs1, rhs1,
13984 			     OMP_ATOMIC_SEQ_CST (t));
13985 	}
13986       break;
13987 
13988     case TRANSACTION_EXPR:
13989       {
13990 	int flags = 0;
13991 	flags |= (TRANSACTION_EXPR_OUTER (t) ? TM_STMT_ATTR_OUTER : 0);
13992 	flags |= (TRANSACTION_EXPR_RELAXED (t) ? TM_STMT_ATTR_RELAXED : 0);
13993 
13994         if (TRANSACTION_EXPR_IS_STMT (t))
13995           {
13996 	    tree body = TRANSACTION_EXPR_BODY (t);
13997 	    tree noex = NULL_TREE;
13998 	    if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
13999 	      {
14000 		noex = MUST_NOT_THROW_COND (body);
14001 		if (noex == NULL_TREE)
14002 		  noex = boolean_true_node;
14003 		body = TREE_OPERAND (body, 0);
14004 	      }
14005             stmt = begin_transaction_stmt (input_location, NULL, flags);
14006             RECUR (body);
14007             finish_transaction_stmt (stmt, NULL, flags, RECUR (noex));
14008           }
14009         else
14010           {
14011             stmt = build_transaction_expr (EXPR_LOCATION (t),
14012 					   RECUR (TRANSACTION_EXPR_BODY (t)),
14013 					   flags, NULL_TREE);
14014             RETURN (stmt);
14015           }
14016       }
14017       break;
14018 
14019     case MUST_NOT_THROW_EXPR:
14020       RETURN (build_must_not_throw_expr (RECUR (TREE_OPERAND (t, 0)),
14021 					RECUR (MUST_NOT_THROW_COND (t))));
14022 
14023     case EXPR_PACK_EXPANSION:
14024       error ("invalid use of pack expansion expression");
14025       RETURN (error_mark_node);
14026 
14027     case NONTYPE_ARGUMENT_PACK:
14028       error ("use %<...%> to expand argument pack");
14029       RETURN (error_mark_node);
14030 
14031     case CILK_SPAWN_STMT:
14032       cfun->calls_cilk_spawn = 1;
14033       RETURN (build_cilk_spawn (EXPR_LOCATION (t), RECUR (CILK_SPAWN_FN (t))));
14034 
14035     case CILK_SYNC_STMT:
14036       RETURN (build_cilk_sync ());
14037 
14038     case COMPOUND_EXPR:
14039       tmp = RECUR (TREE_OPERAND (t, 0));
14040       if (tmp == NULL_TREE)
14041 	/* If the first operand was a statement, we're done with it.  */
14042 	RETURN (RECUR (TREE_OPERAND (t, 1)));
14043       RETURN (build_x_compound_expr (EXPR_LOCATION (t), tmp,
14044 				    RECUR (TREE_OPERAND (t, 1)),
14045 				    complain));
14046 
14047     case ANNOTATE_EXPR:
14048       tmp = RECUR (TREE_OPERAND (t, 0));
14049       RETURN (build2_loc (EXPR_LOCATION (t), ANNOTATE_EXPR,
14050 			  TREE_TYPE (tmp), tmp, RECUR (TREE_OPERAND (t, 1))));
14051 
14052     default:
14053       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
14054 
14055       RETURN (tsubst_copy_and_build (t, args, complain, in_decl,
14056 				    /*function_p=*/false,
14057 				    integral_constant_expression_p));
14058     }
14059 
14060   RETURN (NULL_TREE);
14061  out:
14062   input_location = loc;
14063   return r;
14064 #undef RECUR
14065 #undef RETURN
14066 }
14067 
14068 /* Instantiate the special body of the artificial DECL_OMP_DECLARE_REDUCTION
14069    function.  For description of the body see comment above
14070    cp_parser_omp_declare_reduction_exprs.  */
14071 
14072 static void
tsubst_omp_udr(tree t,tree args,tsubst_flags_t complain,tree in_decl)14073 tsubst_omp_udr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
14074 {
14075   if (t == NULL_TREE || t == error_mark_node)
14076     return;
14077 
14078   gcc_assert (TREE_CODE (t) == STATEMENT_LIST);
14079 
14080   tree_stmt_iterator tsi;
14081   int i;
14082   tree stmts[7];
14083   memset (stmts, 0, sizeof stmts);
14084   for (i = 0, tsi = tsi_start (t);
14085        i < 7 && !tsi_end_p (tsi);
14086        i++, tsi_next (&tsi))
14087     stmts[i] = tsi_stmt (tsi);
14088   gcc_assert (tsi_end_p (tsi));
14089 
14090   if (i >= 3)
14091     {
14092       gcc_assert (TREE_CODE (stmts[0]) == DECL_EXPR
14093 		  && TREE_CODE (stmts[1]) == DECL_EXPR);
14094       tree omp_out = tsubst (DECL_EXPR_DECL (stmts[0]),
14095 			     args, complain, in_decl);
14096       tree omp_in = tsubst (DECL_EXPR_DECL (stmts[1]),
14097 			    args, complain, in_decl);
14098       DECL_CONTEXT (omp_out) = current_function_decl;
14099       DECL_CONTEXT (omp_in) = current_function_decl;
14100       keep_next_level (true);
14101       tree block = begin_omp_structured_block ();
14102       tsubst_expr (stmts[2], args, complain, in_decl, false);
14103       block = finish_omp_structured_block (block);
14104       block = maybe_cleanup_point_expr_void (block);
14105       add_decl_expr (omp_out);
14106       if (TREE_NO_WARNING (DECL_EXPR_DECL (stmts[0])))
14107 	TREE_NO_WARNING (omp_out) = 1;
14108       add_decl_expr (omp_in);
14109       finish_expr_stmt (block);
14110     }
14111   if (i >= 6)
14112     {
14113       gcc_assert (TREE_CODE (stmts[3]) == DECL_EXPR
14114 		  && TREE_CODE (stmts[4]) == DECL_EXPR);
14115       tree omp_priv = tsubst (DECL_EXPR_DECL (stmts[3]),
14116 			      args, complain, in_decl);
14117       tree omp_orig = tsubst (DECL_EXPR_DECL (stmts[4]),
14118 			      args, complain, in_decl);
14119       DECL_CONTEXT (omp_priv) = current_function_decl;
14120       DECL_CONTEXT (omp_orig) = current_function_decl;
14121       keep_next_level (true);
14122       tree block = begin_omp_structured_block ();
14123       tsubst_expr (stmts[5], args, complain, in_decl, false);
14124       block = finish_omp_structured_block (block);
14125       block = maybe_cleanup_point_expr_void (block);
14126       cp_walk_tree (&block, cp_remove_omp_priv_cleanup_stmt, omp_priv, NULL);
14127       add_decl_expr (omp_priv);
14128       add_decl_expr (omp_orig);
14129       finish_expr_stmt (block);
14130       if (i == 7)
14131 	add_decl_expr (omp_orig);
14132     }
14133 }
14134 
14135 /* T is a postfix-expression that is not being used in a function
14136    call.  Return the substituted version of T.  */
14137 
14138 static tree
tsubst_non_call_postfix_expression(tree t,tree args,tsubst_flags_t complain,tree in_decl)14139 tsubst_non_call_postfix_expression (tree t, tree args,
14140 				    tsubst_flags_t complain,
14141 				    tree in_decl)
14142 {
14143   if (TREE_CODE (t) == SCOPE_REF)
14144     t = tsubst_qualified_id (t, args, complain, in_decl,
14145 			     /*done=*/false, /*address_p=*/false);
14146   else
14147     t = tsubst_copy_and_build (t, args, complain, in_decl,
14148 			       /*function_p=*/false,
14149 			       /*integral_constant_expression_p=*/false);
14150 
14151   return t;
14152 }
14153 
14154 /* Sentinel to disable certain warnings during template substitution.  */
14155 
14156 struct warning_sentinel {
14157   int &flag;
14158   int val;
14159   warning_sentinel(int& flag, bool suppress=true)
flagwarning_sentinel14160     : flag(flag), val(flag) { if (suppress) flag = 0; }
~warning_sentinelwarning_sentinel14161   ~warning_sentinel() { flag = val; }
14162 };
14163 
14164 /* Like tsubst but deals with expressions and performs semantic
14165    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
14166 
14167 tree
tsubst_copy_and_build(tree t,tree args,tsubst_flags_t complain,tree in_decl,bool function_p,bool integral_constant_expression_p)14168 tsubst_copy_and_build (tree t,
14169 		       tree args,
14170 		       tsubst_flags_t complain,
14171 		       tree in_decl,
14172 		       bool function_p,
14173 		       bool integral_constant_expression_p)
14174 {
14175 #define RETURN(EXP) do { retval = (EXP); goto out; } while(0)
14176 #define RECUR(NODE)						\
14177   tsubst_copy_and_build (NODE, args, complain, in_decl, 	\
14178 			 /*function_p=*/false,			\
14179 			 integral_constant_expression_p)
14180 
14181   tree retval, op1;
14182   location_t loc;
14183 
14184   if (t == NULL_TREE || t == error_mark_node)
14185     return t;
14186 
14187   loc = input_location;
14188   if (EXPR_HAS_LOCATION (t))
14189     input_location = EXPR_LOCATION (t);
14190 
14191   /* N3276 decltype magic only applies to calls at the top level or on the
14192      right side of a comma.  */
14193   tsubst_flags_t decltype_flag = (complain & tf_decltype);
14194   complain &= ~tf_decltype;
14195 
14196   switch (TREE_CODE (t))
14197     {
14198     case USING_DECL:
14199       t = DECL_NAME (t);
14200       /* Fall through.  */
14201     case IDENTIFIER_NODE:
14202       {
14203 	tree decl;
14204 	cp_id_kind idk;
14205 	bool non_integral_constant_expression_p;
14206 	const char *error_msg;
14207 
14208 	if (IDENTIFIER_TYPENAME_P (t))
14209 	  {
14210 	    tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14211 	    t = mangle_conv_op_name_for_type (new_type);
14212 	  }
14213 
14214 	/* Look up the name.  */
14215 	decl = lookup_name (t);
14216 
14217 	/* By convention, expressions use ERROR_MARK_NODE to indicate
14218 	   failure, not NULL_TREE.  */
14219 	if (decl == NULL_TREE)
14220 	  decl = error_mark_node;
14221 
14222 	decl = finish_id_expression (t, decl, NULL_TREE,
14223 				     &idk,
14224 				     integral_constant_expression_p,
14225           /*allow_non_integral_constant_expression_p=*/(cxx_dialect >= cxx11),
14226 				     &non_integral_constant_expression_p,
14227 				     /*template_p=*/false,
14228 				     /*done=*/true,
14229 				     /*address_p=*/false,
14230 				     /*template_arg_p=*/false,
14231 				     &error_msg,
14232 				     input_location);
14233 	if (error_msg)
14234 	  error (error_msg);
14235 	if (!function_p && identifier_p (decl))
14236 	  {
14237 	    if (complain & tf_error)
14238 	      unqualified_name_lookup_error (decl);
14239 	    decl = error_mark_node;
14240 	  }
14241 	RETURN (decl);
14242       }
14243 
14244     case TEMPLATE_ID_EXPR:
14245       {
14246 	tree object;
14247 	tree templ = RECUR (TREE_OPERAND (t, 0));
14248 	tree targs = TREE_OPERAND (t, 1);
14249 
14250 	if (targs)
14251 	  targs = tsubst_template_args (targs, args, complain, in_decl);
14252 
14253 	if (TREE_CODE (templ) == COMPONENT_REF)
14254 	  {
14255 	    object = TREE_OPERAND (templ, 0);
14256 	    templ = TREE_OPERAND (templ, 1);
14257 	  }
14258 	else
14259 	  object = NULL_TREE;
14260 	templ = lookup_template_function (templ, targs);
14261 
14262 	if (object)
14263 	  RETURN (build3 (COMPONENT_REF, TREE_TYPE (templ),
14264 			 object, templ, NULL_TREE));
14265 	else
14266 	  RETURN (baselink_for_fns (templ));
14267       }
14268 
14269     case INDIRECT_REF:
14270       {
14271 	tree r = RECUR (TREE_OPERAND (t, 0));
14272 
14273 	if (REFERENCE_REF_P (t))
14274 	  {
14275 	    /* A type conversion to reference type will be enclosed in
14276 	       such an indirect ref, but the substitution of the cast
14277 	       will have also added such an indirect ref.  */
14278 	    if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
14279 	      r = convert_from_reference (r);
14280 	  }
14281 	else
14282 	  r = build_x_indirect_ref (input_location, r, RO_UNARY_STAR,
14283 				    complain|decltype_flag);
14284 	RETURN (r);
14285       }
14286 
14287     case NOP_EXPR:
14288       RETURN (build_nop
14289 	(tsubst (TREE_TYPE (t), args, complain, in_decl),
14290 	 RECUR (TREE_OPERAND (t, 0))));
14291 
14292     case IMPLICIT_CONV_EXPR:
14293       {
14294 	tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14295 	tree expr = RECUR (TREE_OPERAND (t, 0));
14296 	int flags = LOOKUP_IMPLICIT;
14297 	if (IMPLICIT_CONV_EXPR_DIRECT_INIT (t))
14298 	  flags = LOOKUP_NORMAL;
14299 	RETURN (perform_implicit_conversion_flags (type, expr, complain,
14300 						  flags));
14301       }
14302 
14303     case CONVERT_EXPR:
14304       RETURN (build1
14305 	(CONVERT_EXPR,
14306 	 tsubst (TREE_TYPE (t), args, complain, in_decl),
14307 	 RECUR (TREE_OPERAND (t, 0))));
14308 
14309     case CAST_EXPR:
14310     case REINTERPRET_CAST_EXPR:
14311     case CONST_CAST_EXPR:
14312     case DYNAMIC_CAST_EXPR:
14313     case STATIC_CAST_EXPR:
14314       {
14315 	tree type;
14316 	tree op, r = NULL_TREE;
14317 
14318 	type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14319 	if (integral_constant_expression_p
14320 	    && !cast_valid_in_integral_constant_expression_p (type))
14321 	  {
14322             if (complain & tf_error)
14323               error ("a cast to a type other than an integral or "
14324                      "enumeration type cannot appear in a constant-expression");
14325 	    RETURN (error_mark_node);
14326 	  }
14327 
14328 	op = RECUR (TREE_OPERAND (t, 0));
14329 
14330 	warning_sentinel s(warn_useless_cast);
14331 	switch (TREE_CODE (t))
14332 	  {
14333 	  case CAST_EXPR:
14334 	    r = build_functional_cast (type, op, complain);
14335 	    break;
14336 	  case REINTERPRET_CAST_EXPR:
14337 	    r = build_reinterpret_cast (type, op, complain);
14338 	    break;
14339 	  case CONST_CAST_EXPR:
14340 	    r = build_const_cast (type, op, complain);
14341 	    break;
14342 	  case DYNAMIC_CAST_EXPR:
14343 	    r = build_dynamic_cast (type, op, complain);
14344 	    break;
14345 	  case STATIC_CAST_EXPR:
14346 	    r = build_static_cast (type, op, complain);
14347 	    break;
14348 	  default:
14349 	    gcc_unreachable ();
14350 	  }
14351 
14352 	RETURN (r);
14353       }
14354 
14355     case POSTDECREMENT_EXPR:
14356     case POSTINCREMENT_EXPR:
14357       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
14358 						args, complain, in_decl);
14359       RETURN (build_x_unary_op (input_location, TREE_CODE (t), op1,
14360 				complain|decltype_flag));
14361 
14362     case PREDECREMENT_EXPR:
14363     case PREINCREMENT_EXPR:
14364     case NEGATE_EXPR:
14365     case BIT_NOT_EXPR:
14366     case ABS_EXPR:
14367     case TRUTH_NOT_EXPR:
14368     case UNARY_PLUS_EXPR:  /* Unary + */
14369     case REALPART_EXPR:
14370     case IMAGPART_EXPR:
14371       RETURN (build_x_unary_op (input_location, TREE_CODE (t),
14372 			       RECUR (TREE_OPERAND (t, 0)),
14373 				complain|decltype_flag));
14374 
14375     case FIX_TRUNC_EXPR:
14376       RETURN (cp_build_unary_op (FIX_TRUNC_EXPR, RECUR (TREE_OPERAND (t, 0)),
14377 				0, complain));
14378 
14379     case ADDR_EXPR:
14380       op1 = TREE_OPERAND (t, 0);
14381       if (TREE_CODE (op1) == LABEL_DECL)
14382 	RETURN (finish_label_address_expr (DECL_NAME (op1),
14383 					  EXPR_LOCATION (op1)));
14384       if (TREE_CODE (op1) == SCOPE_REF)
14385 	op1 = tsubst_qualified_id (op1, args, complain, in_decl,
14386 				   /*done=*/true, /*address_p=*/true);
14387       else
14388 	op1 = tsubst_non_call_postfix_expression (op1, args, complain,
14389 						  in_decl);
14390       RETURN (build_x_unary_op (input_location, ADDR_EXPR, op1,
14391 				complain|decltype_flag));
14392 
14393     case PLUS_EXPR:
14394     case MINUS_EXPR:
14395     case MULT_EXPR:
14396     case TRUNC_DIV_EXPR:
14397     case CEIL_DIV_EXPR:
14398     case FLOOR_DIV_EXPR:
14399     case ROUND_DIV_EXPR:
14400     case EXACT_DIV_EXPR:
14401     case BIT_AND_EXPR:
14402     case BIT_IOR_EXPR:
14403     case BIT_XOR_EXPR:
14404     case TRUNC_MOD_EXPR:
14405     case FLOOR_MOD_EXPR:
14406     case TRUTH_ANDIF_EXPR:
14407     case TRUTH_ORIF_EXPR:
14408     case TRUTH_AND_EXPR:
14409     case TRUTH_OR_EXPR:
14410     case RSHIFT_EXPR:
14411     case LSHIFT_EXPR:
14412     case RROTATE_EXPR:
14413     case LROTATE_EXPR:
14414     case EQ_EXPR:
14415     case NE_EXPR:
14416     case MAX_EXPR:
14417     case MIN_EXPR:
14418     case LE_EXPR:
14419     case GE_EXPR:
14420     case LT_EXPR:
14421     case GT_EXPR:
14422     case MEMBER_REF:
14423     case DOTSTAR_EXPR:
14424       {
14425 	warning_sentinel s1(warn_type_limits);
14426 	warning_sentinel s2(warn_div_by_zero);
14427 	tree r = build_x_binary_op
14428 	  (input_location, TREE_CODE (t),
14429 	   RECUR (TREE_OPERAND (t, 0)),
14430 	   (TREE_NO_WARNING (TREE_OPERAND (t, 0))
14431 	    ? ERROR_MARK
14432 	    : TREE_CODE (TREE_OPERAND (t, 0))),
14433 	   RECUR (TREE_OPERAND (t, 1)),
14434 	   (TREE_NO_WARNING (TREE_OPERAND (t, 1))
14435 	    ? ERROR_MARK
14436 	    : TREE_CODE (TREE_OPERAND (t, 1))),
14437 	   /*overload=*/NULL,
14438 	   complain|decltype_flag);
14439 	if (EXPR_P (r) && TREE_NO_WARNING (t))
14440 	  TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
14441 
14442 	RETURN (r);
14443       }
14444 
14445     case POINTER_PLUS_EXPR:
14446       return fold_build_pointer_plus (RECUR (TREE_OPERAND (t, 0)),
14447 				      RECUR (TREE_OPERAND (t, 1)));
14448 
14449     case SCOPE_REF:
14450       RETURN (tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
14451 				  /*address_p=*/false));
14452     case ARRAY_REF:
14453       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
14454 						args, complain, in_decl);
14455       RETURN (build_x_array_ref (EXPR_LOCATION (t), op1,
14456 				 RECUR (TREE_OPERAND (t, 1)),
14457 				 complain|decltype_flag));
14458 
14459     case ARRAY_NOTATION_REF:
14460       {
14461 	tree start_index, length, stride;
14462 	op1 = tsubst_non_call_postfix_expression (ARRAY_NOTATION_ARRAY (t),
14463 						  args, complain, in_decl);
14464 	start_index = RECUR (ARRAY_NOTATION_START (t));
14465 	length = RECUR (ARRAY_NOTATION_LENGTH (t));
14466 	stride = RECUR (ARRAY_NOTATION_STRIDE (t));
14467 	RETURN (build_array_notation_ref (EXPR_LOCATION (t), op1, start_index,
14468 					  length, stride, TREE_TYPE (op1)));
14469       }
14470     case SIZEOF_EXPR:
14471       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
14472 	RETURN (tsubst_copy (t, args, complain, in_decl));
14473       /* Fall through */
14474 
14475     case ALIGNOF_EXPR:
14476       {
14477 	tree r;
14478 
14479 	op1 = TREE_OPERAND (t, 0);
14480 	if (TREE_CODE (t) == SIZEOF_EXPR && SIZEOF_EXPR_TYPE_P (t))
14481 	  op1 = TREE_TYPE (op1);
14482         if (!args)
14483 	  {
14484 	    /* When there are no ARGS, we are trying to evaluate a
14485 	       non-dependent expression from the parser.  Trying to do
14486 	       the substitutions may not work.  */
14487 	    if (!TYPE_P (op1))
14488 	      op1 = TREE_TYPE (op1);
14489 	  }
14490 	else
14491 	  {
14492 	    ++cp_unevaluated_operand;
14493 	    ++c_inhibit_evaluation_warnings;
14494 	    if (TYPE_P (op1))
14495 	      op1 = tsubst (op1, args, complain, in_decl);
14496 	    else
14497 	      op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
14498 					   /*function_p=*/false,
14499 					   /*integral_constant_expression_p=*/
14500 					   false);
14501 	    --cp_unevaluated_operand;
14502 	    --c_inhibit_evaluation_warnings;
14503 	  }
14504         if (TYPE_P (op1))
14505 	  r = cxx_sizeof_or_alignof_type (op1, TREE_CODE (t),
14506 					  complain & tf_error);
14507 	else
14508 	  r = cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t),
14509 					  complain & tf_error);
14510 	if (TREE_CODE (t) == SIZEOF_EXPR && r != error_mark_node)
14511 	  {
14512 	    if (TREE_CODE (r) != SIZEOF_EXPR || TYPE_P (op1))
14513 	      {
14514 		if (!processing_template_decl && TYPE_P (op1))
14515 		  {
14516 		    r = build_min (SIZEOF_EXPR, size_type_node,
14517 				   build1 (NOP_EXPR, op1, error_mark_node));
14518 		    SIZEOF_EXPR_TYPE_P (r) = 1;
14519 		  }
14520 		else
14521 		  r = build_min (SIZEOF_EXPR, size_type_node, op1);
14522 		TREE_SIDE_EFFECTS (r) = 0;
14523 		TREE_READONLY (r) = 1;
14524 	      }
14525 	    SET_EXPR_LOCATION (r, EXPR_LOCATION (t));
14526 	  }
14527 	RETURN (r);
14528       }
14529 
14530     case AT_ENCODE_EXPR:
14531       {
14532 	op1 = TREE_OPERAND (t, 0);
14533 	++cp_unevaluated_operand;
14534 	++c_inhibit_evaluation_warnings;
14535 	op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
14536 				     /*function_p=*/false,
14537 				     /*integral_constant_expression_p=*/false);
14538 	--cp_unevaluated_operand;
14539 	--c_inhibit_evaluation_warnings;
14540 	RETURN (objc_build_encode_expr (op1));
14541       }
14542 
14543     case NOEXCEPT_EXPR:
14544       op1 = TREE_OPERAND (t, 0);
14545       ++cp_unevaluated_operand;
14546       ++c_inhibit_evaluation_warnings;
14547       op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
14548 				   /*function_p=*/false,
14549 				   /*integral_constant_expression_p=*/false);
14550       --cp_unevaluated_operand;
14551       --c_inhibit_evaluation_warnings;
14552       RETURN (finish_noexcept_expr (op1, complain));
14553 
14554     case MODOP_EXPR:
14555       {
14556 	warning_sentinel s(warn_div_by_zero);
14557 	tree r = build_x_modify_expr
14558 	  (EXPR_LOCATION (t),
14559 	   RECUR (TREE_OPERAND (t, 0)),
14560 	   TREE_CODE (TREE_OPERAND (t, 1)),
14561 	   RECUR (TREE_OPERAND (t, 2)),
14562 	   complain|decltype_flag);
14563 	/* TREE_NO_WARNING must be set if either the expression was
14564 	   parenthesized or it uses an operator such as >>= rather
14565 	   than plain assignment.  In the former case, it was already
14566 	   set and must be copied.  In the latter case,
14567 	   build_x_modify_expr sets it and it must not be reset
14568 	   here.  */
14569 	if (TREE_NO_WARNING (t))
14570 	  TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
14571 
14572 	RETURN (r);
14573       }
14574 
14575     case ARROW_EXPR:
14576       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
14577 						args, complain, in_decl);
14578       /* Remember that there was a reference to this entity.  */
14579       if (DECL_P (op1))
14580 	mark_used (op1);
14581       RETURN (build_x_arrow (input_location, op1, complain));
14582 
14583     case NEW_EXPR:
14584       {
14585 	tree placement = RECUR (TREE_OPERAND (t, 0));
14586 	tree init = RECUR (TREE_OPERAND (t, 3));
14587 	vec<tree, va_gc> *placement_vec;
14588 	vec<tree, va_gc> *init_vec;
14589 	tree ret;
14590 
14591 	if (placement == NULL_TREE)
14592 	  placement_vec = NULL;
14593 	else
14594 	  {
14595 	    placement_vec = make_tree_vector ();
14596 	    for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
14597 	      vec_safe_push (placement_vec, TREE_VALUE (placement));
14598 	  }
14599 
14600 	/* If there was an initializer in the original tree, but it
14601 	   instantiated to an empty list, then we should pass a
14602 	   non-NULL empty vector to tell build_new that it was an
14603 	   empty initializer() rather than no initializer.  This can
14604 	   only happen when the initializer is a pack expansion whose
14605 	   parameter packs are of length zero.  */
14606 	if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
14607 	  init_vec = NULL;
14608 	else
14609 	  {
14610 	    init_vec = make_tree_vector ();
14611 	    if (init == void_zero_node)
14612 	      gcc_assert (init_vec != NULL);
14613 	    else
14614 	      {
14615 		for (; init != NULL_TREE; init = TREE_CHAIN (init))
14616 		  vec_safe_push (init_vec, TREE_VALUE (init));
14617 	      }
14618 	  }
14619 
14620 	ret = build_new (&placement_vec,
14621 			 tsubst (TREE_OPERAND (t, 1), args, complain, in_decl),
14622 			 RECUR (TREE_OPERAND (t, 2)),
14623 			 &init_vec,
14624 			 NEW_EXPR_USE_GLOBAL (t),
14625 			 complain);
14626 
14627 	if (placement_vec != NULL)
14628 	  release_tree_vector (placement_vec);
14629 	if (init_vec != NULL)
14630 	  release_tree_vector (init_vec);
14631 
14632 	RETURN (ret);
14633       }
14634 
14635     case DELETE_EXPR:
14636      RETURN (delete_sanity
14637        (RECUR (TREE_OPERAND (t, 0)),
14638 	RECUR (TREE_OPERAND (t, 1)),
14639 	DELETE_EXPR_USE_VEC (t),
14640 	DELETE_EXPR_USE_GLOBAL (t),
14641 	complain));
14642 
14643     case COMPOUND_EXPR:
14644       {
14645 	tree op0 = tsubst_copy_and_build (TREE_OPERAND (t, 0), args,
14646 					  complain & ~tf_decltype, in_decl,
14647 					  /*function_p=*/false,
14648 					  integral_constant_expression_p);
14649 	RETURN (build_x_compound_expr (EXPR_LOCATION (t),
14650 				       op0,
14651 				       RECUR (TREE_OPERAND (t, 1)),
14652 				       complain|decltype_flag));
14653       }
14654 
14655     case CALL_EXPR:
14656       {
14657 	tree function;
14658 	vec<tree, va_gc> *call_args;
14659 	unsigned int nargs, i;
14660 	bool qualified_p;
14661 	bool koenig_p;
14662 	tree ret;
14663 
14664 	function = CALL_EXPR_FN (t);
14665 	/* When we parsed the expression,  we determined whether or
14666 	   not Koenig lookup should be performed.  */
14667 	koenig_p = KOENIG_LOOKUP_P (t);
14668 	if (TREE_CODE (function) == SCOPE_REF)
14669 	  {
14670 	    qualified_p = true;
14671 	    function = tsubst_qualified_id (function, args, complain, in_decl,
14672 					    /*done=*/false,
14673 					    /*address_p=*/false);
14674 	  }
14675 	else if (koenig_p && identifier_p (function))
14676 	  {
14677 	    /* Do nothing; calling tsubst_copy_and_build on an identifier
14678 	       would incorrectly perform unqualified lookup again.
14679 
14680 	       Note that we can also have an IDENTIFIER_NODE if the earlier
14681 	       unqualified lookup found a member function; in that case
14682 	       koenig_p will be false and we do want to do the lookup
14683 	       again to find the instantiated member function.
14684 
14685 	       FIXME but doing that causes c++/15272, so we need to stop
14686 	       using IDENTIFIER_NODE in that situation.  */
14687 	    qualified_p = false;
14688 	  }
14689 	else
14690 	  {
14691 	    if (TREE_CODE (function) == COMPONENT_REF)
14692 	      {
14693 		tree op = TREE_OPERAND (function, 1);
14694 
14695 		qualified_p = (TREE_CODE (op) == SCOPE_REF
14696 			       || (BASELINK_P (op)
14697 				   && BASELINK_QUALIFIED_P (op)));
14698 	      }
14699 	    else
14700 	      qualified_p = false;
14701 
14702 	    if (TREE_CODE (function) == ADDR_EXPR
14703 		&& TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
14704 	      /* Avoid error about taking the address of a constructor.  */
14705 	      function = TREE_OPERAND (function, 0);
14706 
14707 	    function = tsubst_copy_and_build (function, args, complain,
14708 					      in_decl,
14709 					      !qualified_p,
14710 					      integral_constant_expression_p);
14711 
14712 	    if (BASELINK_P (function))
14713 	      qualified_p = true;
14714 	  }
14715 
14716 	nargs = call_expr_nargs (t);
14717 	call_args = make_tree_vector ();
14718 	for (i = 0; i < nargs; ++i)
14719 	  {
14720 	    tree arg = CALL_EXPR_ARG (t, i);
14721 
14722 	    if (!PACK_EXPANSION_P (arg))
14723 	      vec_safe_push (call_args, RECUR (CALL_EXPR_ARG (t, i)));
14724 	    else
14725 	      {
14726 		/* Expand the pack expansion and push each entry onto
14727 		   CALL_ARGS.  */
14728 		arg = tsubst_pack_expansion (arg, args, complain, in_decl);
14729 		if (TREE_CODE (arg) == TREE_VEC)
14730 		  {
14731 		    unsigned int len, j;
14732 
14733 		    len = TREE_VEC_LENGTH (arg);
14734 		    for (j = 0; j < len; ++j)
14735 		      {
14736 			tree value = TREE_VEC_ELT (arg, j);
14737 			if (value != NULL_TREE)
14738 			  value = convert_from_reference (value);
14739 			vec_safe_push (call_args, value);
14740 		      }
14741 		  }
14742 		else
14743 		  {
14744 		    /* A partial substitution.  Add one entry.  */
14745 		    vec_safe_push (call_args, arg);
14746 		  }
14747 	      }
14748 	  }
14749 
14750 	/* We do not perform argument-dependent lookup if normal
14751 	   lookup finds a non-function, in accordance with the
14752 	   expected resolution of DR 218.  */
14753 	if (koenig_p
14754 	    && ((is_overloaded_fn (function)
14755 		 /* If lookup found a member function, the Koenig lookup is
14756 		    not appropriate, even if an unqualified-name was used
14757 		    to denote the function.  */
14758 		 && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
14759 		|| identifier_p (function))
14760 	    /* Only do this when substitution turns a dependent call
14761 	       into a non-dependent call.  */
14762 	    && type_dependent_expression_p_push (t)
14763 	    && !any_type_dependent_arguments_p (call_args))
14764 	  function = perform_koenig_lookup (function, call_args, tf_none);
14765 
14766 	if (identifier_p (function)
14767 	    && !any_type_dependent_arguments_p (call_args))
14768 	  {
14769 	    if (koenig_p && (complain & tf_warning_or_error))
14770 	      {
14771 		/* For backwards compatibility and good diagnostics, try
14772 		   the unqualified lookup again if we aren't in SFINAE
14773 		   context.  */
14774 		tree unq = (tsubst_copy_and_build
14775 			    (function, args, complain, in_decl, true,
14776 			     integral_constant_expression_p));
14777 		if (unq == error_mark_node)
14778 		  RETURN (error_mark_node);
14779 
14780 		if (unq != function)
14781 		  {
14782 		    tree fn = unq;
14783 		    if (INDIRECT_REF_P (fn))
14784 		      fn = TREE_OPERAND (fn, 0);
14785 		    if (TREE_CODE (fn) == COMPONENT_REF)
14786 		      fn = TREE_OPERAND (fn, 1);
14787 		    if (is_overloaded_fn (fn))
14788 		      fn = get_first_fn (fn);
14789 		    if (permerror (EXPR_LOC_OR_LOC (t, input_location),
14790 				   "%qD was not declared in this scope, "
14791 				   "and no declarations were found by "
14792 				   "argument-dependent lookup at the point "
14793 				   "of instantiation", function))
14794 		      {
14795 			if (!DECL_P (fn))
14796 			  /* Can't say anything more.  */;
14797 			else if (DECL_CLASS_SCOPE_P (fn))
14798 			  {
14799 			    location_t loc = EXPR_LOC_OR_LOC (t,
14800 							      input_location);
14801 			    inform (loc,
14802 				    "declarations in dependent base %qT are "
14803 				    "not found by unqualified lookup",
14804 				    DECL_CLASS_CONTEXT (fn));
14805 			    if (current_class_ptr)
14806 			      inform (loc,
14807 				      "use %<this->%D%> instead", function);
14808 			    else
14809 			      inform (loc,
14810 				      "use %<%T::%D%> instead",
14811 				      current_class_name, function);
14812 			  }
14813 			else
14814 			  inform (0, "%q+D declared here, later in the "
14815 				  "translation unit", fn);
14816 		      }
14817 		    function = unq;
14818 		  }
14819 	      }
14820 	    if (identifier_p (function))
14821 	      {
14822 		if (complain & tf_error)
14823 		  unqualified_name_lookup_error (function);
14824 		release_tree_vector (call_args);
14825 		RETURN (error_mark_node);
14826 	      }
14827 	  }
14828 
14829 	/* Remember that there was a reference to this entity.  */
14830 	if (DECL_P (function))
14831 	  mark_used (function);
14832 
14833 	/* Put back tf_decltype for the actual call.  */
14834 	complain |= decltype_flag;
14835 
14836 	if (TREE_CODE (function) == OFFSET_REF)
14837 	  ret = build_offset_ref_call_from_tree (function, &call_args,
14838 						 complain);
14839 	else if (TREE_CODE (function) == COMPONENT_REF)
14840 	  {
14841 	    tree instance = TREE_OPERAND (function, 0);
14842 	    tree fn = TREE_OPERAND (function, 1);
14843 
14844 	    if (processing_template_decl
14845 		&& (type_dependent_expression_p (instance)
14846 		    || (!BASELINK_P (fn)
14847 			&& TREE_CODE (fn) != FIELD_DECL)
14848 		    || type_dependent_expression_p (fn)
14849 		    || any_type_dependent_arguments_p (call_args)))
14850 	      ret = build_nt_call_vec (function, call_args);
14851 	    else if (!BASELINK_P (fn))
14852 	      ret = finish_call_expr (function, &call_args,
14853 				       /*disallow_virtual=*/false,
14854 				       /*koenig_p=*/false,
14855 				       complain);
14856 	    else
14857 	      ret = (build_new_method_call
14858 		      (instance, fn,
14859 		       &call_args, NULL_TREE,
14860 		       qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
14861 		       /*fn_p=*/NULL,
14862 		       complain));
14863 	  }
14864 	else
14865 	  ret = finish_call_expr (function, &call_args,
14866 				  /*disallow_virtual=*/qualified_p,
14867 				  koenig_p,
14868 				  complain);
14869 
14870 	release_tree_vector (call_args);
14871 
14872 	RETURN (ret);
14873       }
14874 
14875     case COND_EXPR:
14876       {
14877 	tree cond = RECUR (TREE_OPERAND (t, 0));
14878 	tree exp1, exp2;
14879 
14880 	if (TREE_CODE (cond) == INTEGER_CST)
14881 	  {
14882 	    if (integer_zerop (cond))
14883 	      {
14884 		++c_inhibit_evaluation_warnings;
14885 		exp1 = RECUR (TREE_OPERAND (t, 1));
14886 		--c_inhibit_evaluation_warnings;
14887 		exp2 = RECUR (TREE_OPERAND (t, 2));
14888 	      }
14889 	    else
14890 	      {
14891 		exp1 = RECUR (TREE_OPERAND (t, 1));
14892 		++c_inhibit_evaluation_warnings;
14893 		exp2 = RECUR (TREE_OPERAND (t, 2));
14894 		--c_inhibit_evaluation_warnings;
14895 	      }
14896 	  }
14897 	else
14898 	  {
14899 	    exp1 = RECUR (TREE_OPERAND (t, 1));
14900 	    exp2 = RECUR (TREE_OPERAND (t, 2));
14901 	  }
14902 
14903 	RETURN (build_x_conditional_expr (EXPR_LOCATION (t),
14904 					 cond, exp1, exp2, complain));
14905       }
14906 
14907     case PSEUDO_DTOR_EXPR:
14908       RETURN (finish_pseudo_destructor_expr
14909 	      (RECUR (TREE_OPERAND (t, 0)),
14910 	       RECUR (TREE_OPERAND (t, 1)),
14911 	       tsubst (TREE_OPERAND (t, 2), args, complain, in_decl),
14912 	       input_location));
14913 
14914     case TREE_LIST:
14915       {
14916 	tree purpose, value, chain;
14917 
14918 	if (t == void_list_node)
14919 	  RETURN (t);
14920 
14921         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
14922             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
14923           {
14924             /* We have pack expansions, so expand those and
14925                create a new list out of it.  */
14926             tree purposevec = NULL_TREE;
14927             tree valuevec = NULL_TREE;
14928             tree chain;
14929             int i, len = -1;
14930 
14931             /* Expand the argument expressions.  */
14932             if (TREE_PURPOSE (t))
14933               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
14934                                                  complain, in_decl);
14935             if (TREE_VALUE (t))
14936               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
14937                                                complain, in_decl);
14938 
14939             /* Build the rest of the list.  */
14940             chain = TREE_CHAIN (t);
14941             if (chain && chain != void_type_node)
14942               chain = RECUR (chain);
14943 
14944             /* Determine the number of arguments.  */
14945             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
14946               {
14947                 len = TREE_VEC_LENGTH (purposevec);
14948                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
14949               }
14950             else if (TREE_CODE (valuevec) == TREE_VEC)
14951               len = TREE_VEC_LENGTH (valuevec);
14952             else
14953               {
14954                 /* Since we only performed a partial substitution into
14955                    the argument pack, we only RETURN (a single list
14956                    node.  */
14957                 if (purposevec == TREE_PURPOSE (t)
14958                     && valuevec == TREE_VALUE (t)
14959                     && chain == TREE_CHAIN (t))
14960                   RETURN (t);
14961 
14962                 RETURN (tree_cons (purposevec, valuevec, chain));
14963               }
14964 
14965             /* Convert the argument vectors into a TREE_LIST */
14966             i = len;
14967             while (i > 0)
14968               {
14969                 /* Grab the Ith values.  */
14970                 i--;
14971                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i)
14972 		                     : NULL_TREE;
14973                 value
14974 		  = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i))
14975                              : NULL_TREE;
14976 
14977                 /* Build the list (backwards).  */
14978                 chain = tree_cons (purpose, value, chain);
14979               }
14980 
14981             RETURN (chain);
14982           }
14983 
14984 	purpose = TREE_PURPOSE (t);
14985 	if (purpose)
14986 	  purpose = RECUR (purpose);
14987 	value = TREE_VALUE (t);
14988 	if (value)
14989 	  value = RECUR (value);
14990 	chain = TREE_CHAIN (t);
14991 	if (chain && chain != void_type_node)
14992 	  chain = RECUR (chain);
14993 	if (purpose == TREE_PURPOSE (t)
14994 	    && value == TREE_VALUE (t)
14995 	    && chain == TREE_CHAIN (t))
14996 	  RETURN (t);
14997 	RETURN (tree_cons (purpose, value, chain));
14998       }
14999 
15000     case COMPONENT_REF:
15001       {
15002 	tree object;
15003 	tree object_type;
15004 	tree member;
15005 	tree r;
15006 
15007 	object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
15008 						     args, complain, in_decl);
15009 	/* Remember that there was a reference to this entity.  */
15010 	if (DECL_P (object))
15011 	  mark_used (object);
15012 	object_type = TREE_TYPE (object);
15013 
15014 	member = TREE_OPERAND (t, 1);
15015 	if (BASELINK_P (member))
15016 	  member = tsubst_baselink (member,
15017 				    non_reference (TREE_TYPE (object)),
15018 				    args, complain, in_decl);
15019 	else
15020 	  member = tsubst_copy (member, args, complain, in_decl);
15021 	if (member == error_mark_node)
15022 	  RETURN (error_mark_node);
15023 
15024 	if (type_dependent_expression_p (object))
15025 	  /* We can't do much here.  */;
15026 	else if (!CLASS_TYPE_P (object_type))
15027 	  {
15028 	    if (scalarish_type_p (object_type))
15029 	      {
15030 		tree s = NULL_TREE;
15031 		tree dtor = member;
15032 
15033 		if (TREE_CODE (dtor) == SCOPE_REF)
15034 		  {
15035 		    s = TREE_OPERAND (dtor, 0);
15036 		    dtor = TREE_OPERAND (dtor, 1);
15037 		  }
15038 		if (TREE_CODE (dtor) == BIT_NOT_EXPR)
15039 		  {
15040 		    dtor = TREE_OPERAND (dtor, 0);
15041 		    if (TYPE_P (dtor))
15042 		      RETURN (finish_pseudo_destructor_expr
15043 			      (object, s, dtor, input_location));
15044 		  }
15045 	      }
15046 	  }
15047 	else if (TREE_CODE (member) == SCOPE_REF
15048 		 && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
15049 	  {
15050 	    /* Lookup the template functions now that we know what the
15051 	       scope is.  */
15052 	    tree scope = TREE_OPERAND (member, 0);
15053 	    tree tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
15054 	    tree args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
15055 	    member = lookup_qualified_name (scope, tmpl,
15056 					    /*is_type_p=*/false,
15057 					    /*complain=*/false);
15058 	    if (BASELINK_P (member))
15059 	      {
15060 		BASELINK_FUNCTIONS (member)
15061 		  = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
15062 			      args);
15063 		member = (adjust_result_of_qualified_name_lookup
15064 			  (member, BINFO_TYPE (BASELINK_BINFO (member)),
15065 			   object_type));
15066 	      }
15067 	    else
15068 	      {
15069 		qualified_name_lookup_error (scope, tmpl, member,
15070 					     input_location);
15071 		RETURN (error_mark_node);
15072 	      }
15073 	  }
15074 	else if (TREE_CODE (member) == SCOPE_REF
15075 		 && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
15076 		 && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
15077 	  {
15078 	    if (complain & tf_error)
15079 	      {
15080 		if (TYPE_P (TREE_OPERAND (member, 0)))
15081 		  error ("%qT is not a class or namespace",
15082 			 TREE_OPERAND (member, 0));
15083 		else
15084 		  error ("%qD is not a class or namespace",
15085 			 TREE_OPERAND (member, 0));
15086 	      }
15087 	    RETURN (error_mark_node);
15088 	  }
15089 	else if (TREE_CODE (member) == FIELD_DECL)
15090 	  {
15091 	    r = finish_non_static_data_member (member, object, NULL_TREE);
15092 	    if (TREE_CODE (r) == COMPONENT_REF)
15093 	      REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
15094 	    RETURN (r);
15095 	  }
15096 
15097 	r = finish_class_member_access_expr (object, member,
15098 					     /*template_p=*/false,
15099 					     complain);
15100 	if (TREE_CODE (r) == COMPONENT_REF)
15101 	  REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
15102 	RETURN (r);
15103       }
15104 
15105     case THROW_EXPR:
15106       RETURN (build_throw
15107 	(RECUR (TREE_OPERAND (t, 0))));
15108 
15109     case CONSTRUCTOR:
15110       {
15111 	vec<constructor_elt, va_gc> *n;
15112 	constructor_elt *ce;
15113 	unsigned HOST_WIDE_INT idx;
15114 	tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
15115 	bool process_index_p;
15116         int newlen;
15117         bool need_copy_p = false;
15118 	tree r;
15119 
15120 	if (type == error_mark_node)
15121 	  RETURN (error_mark_node);
15122 
15123 	/* digest_init will do the wrong thing if we let it.  */
15124 	if (type && TYPE_PTRMEMFUNC_P (type))
15125 	  RETURN (t);
15126 
15127 	/* We do not want to process the index of aggregate
15128 	   initializers as they are identifier nodes which will be
15129 	   looked up by digest_init.  */
15130 	process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
15131 
15132 	n = vec_safe_copy (CONSTRUCTOR_ELTS (t));
15133         newlen = vec_safe_length (n);
15134 	FOR_EACH_VEC_SAFE_ELT (n, idx, ce)
15135 	  {
15136 	    if (ce->index && process_index_p
15137 		/* An identifier index is looked up in the type
15138 		   being initialized, not the current scope.  */
15139 		&& TREE_CODE (ce->index) != IDENTIFIER_NODE)
15140 	      ce->index = RECUR (ce->index);
15141 
15142             if (PACK_EXPANSION_P (ce->value))
15143               {
15144                 /* Substitute into the pack expansion.  */
15145                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
15146                                                   in_decl);
15147 
15148 		if (ce->value == error_mark_node
15149 		    || PACK_EXPANSION_P (ce->value))
15150 		  ;
15151 		else if (TREE_VEC_LENGTH (ce->value) == 1)
15152                   /* Just move the argument into place.  */
15153                   ce->value = TREE_VEC_ELT (ce->value, 0);
15154                 else
15155                   {
15156                     /* Update the length of the final CONSTRUCTOR
15157                        arguments vector, and note that we will need to
15158                        copy.*/
15159                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
15160                     need_copy_p = true;
15161                   }
15162               }
15163             else
15164               ce->value = RECUR (ce->value);
15165 	  }
15166 
15167         if (need_copy_p)
15168           {
15169             vec<constructor_elt, va_gc> *old_n = n;
15170 
15171             vec_alloc (n, newlen);
15172             FOR_EACH_VEC_ELT (*old_n, idx, ce)
15173               {
15174                 if (TREE_CODE (ce->value) == TREE_VEC)
15175                   {
15176                     int i, len = TREE_VEC_LENGTH (ce->value);
15177                     for (i = 0; i < len; ++i)
15178                       CONSTRUCTOR_APPEND_ELT (n, 0,
15179                                               TREE_VEC_ELT (ce->value, i));
15180                   }
15181                 else
15182                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
15183               }
15184           }
15185 
15186 	r = build_constructor (init_list_type_node, n);
15187 	CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
15188 
15189 	if (TREE_HAS_CONSTRUCTOR (t))
15190 	  RETURN (finish_compound_literal (type, r, complain));
15191 
15192 	TREE_TYPE (r) = type;
15193 	RETURN (r);
15194       }
15195 
15196     case TYPEID_EXPR:
15197       {
15198 	tree operand_0 = TREE_OPERAND (t, 0);
15199 	if (TYPE_P (operand_0))
15200 	  {
15201 	    operand_0 = tsubst (operand_0, args, complain, in_decl);
15202 	    RETURN (get_typeid (operand_0, complain));
15203 	  }
15204 	else
15205 	  {
15206 	    operand_0 = RECUR (operand_0);
15207 	    RETURN (build_typeid (operand_0, complain));
15208 	  }
15209       }
15210 
15211     case VAR_DECL:
15212       if (!args)
15213 	RETURN (t);
15214       else if (DECL_PACK_P (t))
15215 	{
15216 	  /* We don't build decls for an instantiation of a
15217 	     variadic capture proxy, we instantiate the elements
15218 	     when needed.  */
15219 	  gcc_assert (DECL_HAS_VALUE_EXPR_P (t));
15220 	  return RECUR (DECL_VALUE_EXPR (t));
15221 	}
15222       /* Fall through */
15223 
15224     case PARM_DECL:
15225       {
15226 	tree r = tsubst_copy (t, args, complain, in_decl);
15227 	if (TREE_CODE (r) == VAR_DECL
15228 	    && !processing_template_decl
15229 	    && !cp_unevaluated_operand
15230 	    && DECL_THREAD_LOCAL_P (r))
15231 	  {
15232 	    if (tree wrap = get_tls_wrapper_fn (r))
15233 	      /* Replace an evaluated use of the thread_local variable with
15234 		 a call to its wrapper.  */
15235 	      r = build_cxx_call (wrap, 0, NULL, tf_warning_or_error);
15236 	  }
15237 
15238 	if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
15239 	  /* If the original type was a reference, we'll be wrapped in
15240 	     the appropriate INDIRECT_REF.  */
15241 	  r = convert_from_reference (r);
15242 	RETURN (r);
15243       }
15244 
15245     case VA_ARG_EXPR:
15246       RETURN (build_x_va_arg (EXPR_LOCATION (t),
15247 			     RECUR (TREE_OPERAND (t, 0)),
15248 			     tsubst (TREE_TYPE (t), args, complain, in_decl)));
15249 
15250     case OFFSETOF_EXPR:
15251       RETURN (finish_offsetof (RECUR (TREE_OPERAND (t, 0))));
15252 
15253     case TRAIT_EXPR:
15254       {
15255 	tree type1 = tsubst (TRAIT_EXPR_TYPE1 (t), args,
15256 			     complain, in_decl);
15257 
15258 	tree type2 = TRAIT_EXPR_TYPE2 (t);
15259 	if (type2)
15260 	  type2 = tsubst (type2, args, complain, in_decl);
15261 
15262 	RETURN (finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2));
15263       }
15264 
15265     case STMT_EXPR:
15266       {
15267 	tree old_stmt_expr = cur_stmt_expr;
15268 	tree stmt_expr = begin_stmt_expr ();
15269 
15270 	cur_stmt_expr = stmt_expr;
15271 	tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
15272 		     integral_constant_expression_p);
15273 	stmt_expr = finish_stmt_expr (stmt_expr, false);
15274 	cur_stmt_expr = old_stmt_expr;
15275 
15276 	/* If the resulting list of expression statement is empty,
15277 	   fold it further into void_zero_node.  */
15278 	if (empty_expr_stmt_p (stmt_expr))
15279 	  stmt_expr = void_zero_node;
15280 
15281 	RETURN (stmt_expr);
15282       }
15283 
15284     case LAMBDA_EXPR:
15285       {
15286 	tree r = build_lambda_expr ();
15287 
15288 	tree type = tsubst (LAMBDA_EXPR_CLOSURE (t), args, complain, NULL_TREE);
15289 	LAMBDA_EXPR_CLOSURE (r) = type;
15290 	CLASSTYPE_LAMBDA_EXPR (type) = r;
15291 
15292 	LAMBDA_EXPR_LOCATION (r)
15293 	  = LAMBDA_EXPR_LOCATION (t);
15294 	LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
15295 	  = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
15296 	LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
15297 	LAMBDA_EXPR_DISCRIMINATOR (r)
15298 	  = (LAMBDA_EXPR_DISCRIMINATOR (t));
15299 	/* For a function scope, we want to use tsubst so that we don't
15300 	   complain about referring to an auto function before its return
15301 	   type has been deduced.  Otherwise, we want to use tsubst_copy so
15302 	   that we look up the existing field/parameter/variable rather
15303 	   than build a new one.  */
15304 	tree scope = LAMBDA_EXPR_EXTRA_SCOPE (t);
15305 	if (scope && TREE_CODE (scope) == FUNCTION_DECL)
15306 	  scope = tsubst (scope, args, complain, in_decl);
15307 	else if (scope && TREE_CODE (scope) == PARM_DECL)
15308 	  {
15309 	    /* Look up the parameter we want directly, as tsubst_copy
15310 	       doesn't do what we need.  */
15311 	    tree fn = tsubst (DECL_CONTEXT (scope), args, complain, in_decl);
15312 	    tree parm = FUNCTION_FIRST_USER_PARM (fn);
15313 	    while (DECL_PARM_INDEX (parm) != DECL_PARM_INDEX (scope))
15314 	      parm = DECL_CHAIN (parm);
15315 	    scope = parm;
15316 	    /* FIXME Work around the parm not having DECL_CONTEXT set.  */
15317 	    if (DECL_CONTEXT (scope) == NULL_TREE)
15318 	      DECL_CONTEXT (scope) = fn;
15319 	  }
15320 	else
15321 	  scope = RECUR (scope);
15322 	LAMBDA_EXPR_EXTRA_SCOPE (r) = scope;
15323 	LAMBDA_EXPR_RETURN_TYPE (r)
15324 	  = tsubst (LAMBDA_EXPR_RETURN_TYPE (t), args, complain, in_decl);
15325 
15326 	gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (t) == NULL_TREE
15327 		    && LAMBDA_EXPR_PENDING_PROXIES (t) == NULL);
15328 
15329 	/* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
15330 	determine_visibility (TYPE_NAME (type));
15331 	/* Now that we know visibility, instantiate the type so we have a
15332 	   declaration of the op() for later calls to lambda_function.  */
15333 	complete_type (type);
15334 
15335 	LAMBDA_EXPR_THIS_CAPTURE (r) = NULL_TREE;
15336 
15337 	RETURN (build_lambda_object (r));
15338       }
15339 
15340     case TARGET_EXPR:
15341       /* We can get here for a constant initializer of non-dependent type.
15342          FIXME stop folding in cp_parser_initializer_clause.  */
15343       {
15344 	tree r = get_target_expr_sfinae (RECUR (TARGET_EXPR_INITIAL (t)),
15345 					 complain);
15346 	RETURN (r);
15347       }
15348 
15349     case TRANSACTION_EXPR:
15350       RETURN (tsubst_expr(t, args, complain, in_decl,
15351 	     integral_constant_expression_p));
15352 
15353     case PAREN_EXPR:
15354       RETURN (finish_parenthesized_expr (RECUR (TREE_OPERAND (t, 0))));
15355 
15356     case VEC_PERM_EXPR:
15357       RETURN (build_x_vec_perm_expr (input_location,
15358 		RECUR (TREE_OPERAND (t, 0)),
15359 		RECUR (TREE_OPERAND (t, 1)),
15360 		RECUR (TREE_OPERAND (t, 2)),
15361 		complain));
15362 
15363     default:
15364       /* Handle Objective-C++ constructs, if appropriate.  */
15365       {
15366 	tree subst
15367 	  = objcp_tsubst_copy_and_build (t, args, complain,
15368 					 in_decl, /*function_p=*/false);
15369 	if (subst)
15370 	  RETURN (subst);
15371       }
15372       RETURN (tsubst_copy (t, args, complain, in_decl));
15373     }
15374 
15375 #undef RECUR
15376 #undef RETURN
15377  out:
15378   input_location = loc;
15379   return retval;
15380 }
15381 
15382 /* Verify that the instantiated ARGS are valid. For type arguments,
15383    make sure that the type's linkage is ok. For non-type arguments,
15384    make sure they are constants if they are integral or enumerations.
15385    Emit an error under control of COMPLAIN, and return TRUE on error.  */
15386 
15387 static bool
check_instantiated_arg(tree tmpl,tree t,tsubst_flags_t complain)15388 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
15389 {
15390   if (dependent_template_arg_p (t))
15391     return false;
15392   if (ARGUMENT_PACK_P (t))
15393     {
15394       tree vec = ARGUMENT_PACK_ARGS (t);
15395       int len = TREE_VEC_LENGTH (vec);
15396       bool result = false;
15397       int i;
15398 
15399       for (i = 0; i < len; ++i)
15400 	if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
15401 	  result = true;
15402       return result;
15403     }
15404   else if (TYPE_P (t))
15405     {
15406       /* [basic.link]: A name with no linkage (notably, the name
15407 	 of a class or enumeration declared in a local scope)
15408 	 shall not be used to declare an entity with linkage.
15409 	 This implies that names with no linkage cannot be used as
15410 	 template arguments
15411 
15412 	 DR 757 relaxes this restriction for C++0x.  */
15413       tree nt = (cxx_dialect > cxx98 ? NULL_TREE
15414 		 : no_linkage_check (t, /*relaxed_p=*/false));
15415 
15416       if (nt)
15417 	{
15418 	  /* DR 488 makes use of a type with no linkage cause
15419 	     type deduction to fail.  */
15420 	  if (complain & tf_error)
15421 	    {
15422 	      if (TYPE_ANONYMOUS_P (nt))
15423 		error ("%qT is/uses anonymous type", t);
15424 	      else
15425 		error ("template argument for %qD uses local type %qT",
15426 		       tmpl, t);
15427 	    }
15428 	  return true;
15429 	}
15430       /* In order to avoid all sorts of complications, we do not
15431 	 allow variably-modified types as template arguments.  */
15432       else if (variably_modified_type_p (t, NULL_TREE))
15433 	{
15434 	  if (complain & tf_error)
15435 	    error ("%qT is a variably modified type", t);
15436 	  return true;
15437 	}
15438     }
15439   /* Class template and alias template arguments should be OK.  */
15440   else if (DECL_TYPE_TEMPLATE_P (t))
15441     ;
15442   /* A non-type argument of integral or enumerated type must be a
15443      constant.  */
15444   else if (TREE_TYPE (t)
15445 	   && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
15446 	   && !TREE_CONSTANT (t))
15447     {
15448       if (complain & tf_error)
15449 	error ("integral expression %qE is not constant", t);
15450       return true;
15451     }
15452   return false;
15453 }
15454 
15455 static bool
check_instantiated_args(tree tmpl,tree args,tsubst_flags_t complain)15456 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
15457 {
15458   int ix, len = DECL_NTPARMS (tmpl);
15459   bool result = false;
15460 
15461   for (ix = 0; ix != len; ix++)
15462     {
15463       if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
15464 	result = true;
15465     }
15466   if (result && (complain & tf_error))
15467     error ("  trying to instantiate %qD", tmpl);
15468   return result;
15469 }
15470 
15471 /* We're out of SFINAE context now, so generate diagnostics for the access
15472    errors we saw earlier when instantiating D from TMPL and ARGS.  */
15473 
15474 static void
recheck_decl_substitution(tree d,tree tmpl,tree args)15475 recheck_decl_substitution (tree d, tree tmpl, tree args)
15476 {
15477   tree pattern = DECL_TEMPLATE_RESULT (tmpl);
15478   tree type = TREE_TYPE (pattern);
15479   location_t loc = input_location;
15480 
15481   push_access_scope (d);
15482   push_deferring_access_checks (dk_no_deferred);
15483   input_location = DECL_SOURCE_LOCATION (pattern);
15484   tsubst (type, args, tf_warning_or_error, d);
15485   input_location = loc;
15486   pop_deferring_access_checks ();
15487   pop_access_scope (d);
15488 }
15489 
15490 /* Instantiate the indicated variable, function, or alias template TMPL with
15491    the template arguments in TARG_PTR.  */
15492 
15493 static tree
instantiate_template_1(tree tmpl,tree orig_args,tsubst_flags_t complain)15494 instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain)
15495 {
15496   tree targ_ptr = orig_args;
15497   tree fndecl;
15498   tree gen_tmpl;
15499   tree spec;
15500   bool access_ok = true;
15501 
15502   if (tmpl == error_mark_node)
15503     return error_mark_node;
15504 
15505   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
15506 
15507   /* If this function is a clone, handle it specially.  */
15508   if (DECL_CLONED_FUNCTION_P (tmpl))
15509     {
15510       tree spec;
15511       tree clone;
15512 
15513       /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
15514 	 DECL_CLONED_FUNCTION.  */
15515       spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
15516 				   targ_ptr, complain);
15517       if (spec == error_mark_node)
15518 	return error_mark_node;
15519 
15520       /* Look for the clone.  */
15521       FOR_EACH_CLONE (clone, spec)
15522 	if (DECL_NAME (clone) == DECL_NAME (tmpl))
15523 	  return clone;
15524       /* We should always have found the clone by now.  */
15525       gcc_unreachable ();
15526       return NULL_TREE;
15527     }
15528 
15529   if (targ_ptr == error_mark_node)
15530     return error_mark_node;
15531 
15532   /* Check to see if we already have this specialization.  */
15533   gen_tmpl = most_general_template (tmpl);
15534   if (tmpl != gen_tmpl)
15535     /* The TMPL is a partial instantiation.  To get a full set of
15536        arguments we must add the arguments used to perform the
15537        partial instantiation.  */
15538     targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
15539 					    targ_ptr);
15540 
15541   /* It would be nice to avoid hashing here and then again in tsubst_decl,
15542      but it doesn't seem to be on the hot path.  */
15543   spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
15544 
15545   gcc_assert (tmpl == gen_tmpl
15546 	      || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
15547 		  == spec)
15548 	      || fndecl == NULL_TREE);
15549 
15550   if (spec != NULL_TREE)
15551     {
15552       if (FNDECL_HAS_ACCESS_ERRORS (spec))
15553 	{
15554 	  if (complain & tf_error)
15555 	    recheck_decl_substitution (spec, gen_tmpl, targ_ptr);
15556 	  return error_mark_node;
15557 	}
15558       return spec;
15559     }
15560 
15561   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
15562 			       complain))
15563     return error_mark_node;
15564 
15565   /* We are building a FUNCTION_DECL, during which the access of its
15566      parameters and return types have to be checked.  However this
15567      FUNCTION_DECL which is the desired context for access checking
15568      is not built yet.  We solve this chicken-and-egg problem by
15569      deferring all checks until we have the FUNCTION_DECL.  */
15570   push_deferring_access_checks (dk_deferred);
15571 
15572   /* Instantiation of the function happens in the context of the function
15573      template, not the context of the overload resolution we're doing.  */
15574   push_to_top_level ();
15575   /* If there are dependent arguments, e.g. because we're doing partial
15576      ordering, make sure processing_template_decl stays set.  */
15577   if (uses_template_parms (targ_ptr))
15578     ++processing_template_decl;
15579   if (DECL_CLASS_SCOPE_P (gen_tmpl))
15580     {
15581       tree ctx = tsubst (DECL_CONTEXT (gen_tmpl), targ_ptr,
15582 			 complain, gen_tmpl);
15583       push_nested_class (ctx);
15584     }
15585   /* Substitute template parameters to obtain the specialization.  */
15586   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
15587 		   targ_ptr, complain, gen_tmpl);
15588   if (DECL_CLASS_SCOPE_P (gen_tmpl))
15589     pop_nested_class ();
15590   pop_from_top_level ();
15591 
15592   if (fndecl == error_mark_node)
15593     {
15594       pop_deferring_access_checks ();
15595       return error_mark_node;
15596     }
15597 
15598   /* The DECL_TI_TEMPLATE should always be the immediate parent
15599      template, not the most general template.  */
15600   DECL_TI_TEMPLATE (fndecl) = tmpl;
15601 
15602   /* Now we know the specialization, compute access previously
15603      deferred.  */
15604   push_access_scope (fndecl);
15605   if (!perform_deferred_access_checks (complain))
15606     access_ok = false;
15607   pop_access_scope (fndecl);
15608   pop_deferring_access_checks ();
15609 
15610   /* If we've just instantiated the main entry point for a function,
15611      instantiate all the alternate entry points as well.  We do this
15612      by cloning the instantiation of the main entry point, not by
15613      instantiating the template clones.  */
15614   if (DECL_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (DECL_CHAIN (gen_tmpl)))
15615     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
15616 
15617   if (!access_ok)
15618     {
15619       if (!(complain & tf_error))
15620 	{
15621 	  /* Remember to reinstantiate when we're out of SFINAE so the user
15622 	     can see the errors.  */
15623 	  FNDECL_HAS_ACCESS_ERRORS (fndecl) = true;
15624 	}
15625       return error_mark_node;
15626     }
15627   return fndecl;
15628 }
15629 
15630 /* Wrapper for instantiate_template_1.  */
15631 
15632 tree
instantiate_template(tree tmpl,tree orig_args,tsubst_flags_t complain)15633 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
15634 {
15635   tree ret;
15636   timevar_push (TV_TEMPLATE_INST);
15637   ret = instantiate_template_1 (tmpl, orig_args,  complain);
15638   timevar_pop (TV_TEMPLATE_INST);
15639   return ret;
15640 }
15641 
15642 /* Instantiate the alias template TMPL with ARGS.  Also push a template
15643    instantiation level, which instantiate_template doesn't do because
15644    functions and variables have sufficient context established by the
15645    callers.  */
15646 
15647 static tree
instantiate_alias_template(tree tmpl,tree args,tsubst_flags_t complain)15648 instantiate_alias_template (tree tmpl, tree args, tsubst_flags_t complain)
15649 {
15650   struct pending_template *old_last_pend = last_pending_template;
15651   struct tinst_level *old_error_tinst = last_error_tinst_level;
15652   if (tmpl == error_mark_node || args == error_mark_node)
15653     return error_mark_node;
15654   tree tinst = build_tree_list (tmpl, args);
15655   if (!push_tinst_level (tinst))
15656     {
15657       ggc_free (tinst);
15658       return error_mark_node;
15659     }
15660 
15661   args =
15662     coerce_innermost_template_parms (DECL_TEMPLATE_PARMS (tmpl),
15663 				     args, tmpl, complain,
15664 				     /*require_all_args=*/true,
15665 				     /*use_default_args=*/true);
15666 
15667   tree r = instantiate_template (tmpl, args, complain);
15668   pop_tinst_level ();
15669   /* We can't free this if a pending_template entry or last_error_tinst_level
15670      is pointing at it.  */
15671   if (last_pending_template == old_last_pend
15672       && last_error_tinst_level == old_error_tinst)
15673     ggc_free (tinst);
15674 
15675   return r;
15676 }
15677 
15678 /* PARM is a template parameter pack for FN.  Returns true iff
15679    PARM is used in a deducible way in the argument list of FN.  */
15680 
15681 static bool
pack_deducible_p(tree parm,tree fn)15682 pack_deducible_p (tree parm, tree fn)
15683 {
15684   tree t = FUNCTION_FIRST_USER_PARMTYPE (fn);
15685   for (; t; t = TREE_CHAIN (t))
15686     {
15687       tree type = TREE_VALUE (t);
15688       tree packs;
15689       if (!PACK_EXPANSION_P (type))
15690 	continue;
15691       for (packs = PACK_EXPANSION_PARAMETER_PACKS (type);
15692 	   packs; packs = TREE_CHAIN (packs))
15693 	if (template_args_equal (TREE_VALUE (packs), parm))
15694 	  {
15695 	    /* The template parameter pack is used in a function parameter
15696 	       pack.  If this is the end of the parameter list, the
15697 	       template parameter pack is deducible.  */
15698 	    if (TREE_CHAIN (t) == void_list_node)
15699 	      return true;
15700 	    else
15701 	      /* Otherwise, not.  Well, it could be deduced from
15702 		 a non-pack parameter, but doing so would end up with
15703 		 a deduction mismatch, so don't bother.  */
15704 	      return false;
15705 	  }
15706     }
15707   /* The template parameter pack isn't used in any function parameter
15708      packs, but it might be used deeper, e.g. tuple<Args...>.  */
15709   return true;
15710 }
15711 
15712 /* The FN is a TEMPLATE_DECL for a function.  ARGS is an array with
15713    NARGS elements of the arguments that are being used when calling
15714    it.  TARGS is a vector into which the deduced template arguments
15715    are placed.
15716 
15717    Returns either a FUNCTION_DECL for the matching specialization of FN or
15718    NULL_TREE if no suitable specialization can be found.  If EXPLAIN_P is
15719    true, diagnostics will be printed to explain why it failed.
15720 
15721    If FN is a conversion operator, or we are trying to produce a specific
15722    specialization, RETURN_TYPE is the return type desired.
15723 
15724    The EXPLICIT_TARGS are explicit template arguments provided via a
15725    template-id.
15726 
15727    The parameter STRICT is one of:
15728 
15729    DEDUCE_CALL:
15730      We are deducing arguments for a function call, as in
15731      [temp.deduct.call].
15732 
15733    DEDUCE_CONV:
15734      We are deducing arguments for a conversion function, as in
15735      [temp.deduct.conv].
15736 
15737    DEDUCE_EXACT:
15738      We are deducing arguments when doing an explicit instantiation
15739      as in [temp.explicit], when determining an explicit specialization
15740      as in [temp.expl.spec], or when taking the address of a function
15741      template, as in [temp.deduct.funcaddr].  */
15742 
15743 tree
fn_type_unification(tree fn,tree explicit_targs,tree targs,const tree * args,unsigned int nargs,tree return_type,unification_kind_t strict,int flags,bool explain_p,bool decltype_p)15744 fn_type_unification (tree fn,
15745 		     tree explicit_targs,
15746 		     tree targs,
15747 		     const tree *args,
15748 		     unsigned int nargs,
15749 		     tree return_type,
15750 		     unification_kind_t strict,
15751 		     int flags,
15752 		     bool explain_p,
15753 		     bool decltype_p)
15754 {
15755   tree parms;
15756   tree fntype;
15757   tree decl = NULL_TREE;
15758   tsubst_flags_t complain = (explain_p ? tf_warning_or_error : tf_none);
15759   bool ok;
15760   static int deduction_depth;
15761   struct pending_template *old_last_pend = last_pending_template;
15762   struct tinst_level *old_error_tinst = last_error_tinst_level;
15763   tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
15764   tree tinst;
15765   tree r = error_mark_node;
15766 
15767   if (decltype_p)
15768     complain |= tf_decltype;
15769 
15770   /* In C++0x, it's possible to have a function template whose type depends
15771      on itself recursively.  This is most obvious with decltype, but can also
15772      occur with enumeration scope (c++/48969).  So we need to catch infinite
15773      recursion and reject the substitution at deduction time; this function
15774      will return error_mark_node for any repeated substitution.
15775 
15776      This also catches excessive recursion such as when f<N> depends on
15777      f<N-1> across all integers, and returns error_mark_node for all the
15778      substitutions back up to the initial one.
15779 
15780      This is, of course, not reentrant.  */
15781   if (excessive_deduction_depth)
15782     return error_mark_node;
15783   tinst = build_tree_list (fn, NULL_TREE);
15784   ++deduction_depth;
15785 
15786   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
15787 
15788   fntype = TREE_TYPE (fn);
15789   if (explicit_targs)
15790     {
15791       /* [temp.deduct]
15792 
15793 	 The specified template arguments must match the template
15794 	 parameters in kind (i.e., type, nontype, template), and there
15795 	 must not be more arguments than there are parameters;
15796 	 otherwise type deduction fails.
15797 
15798 	 Nontype arguments must match the types of the corresponding
15799 	 nontype template parameters, or must be convertible to the
15800 	 types of the corresponding nontype parameters as specified in
15801 	 _temp.arg.nontype_, otherwise type deduction fails.
15802 
15803 	 All references in the function type of the function template
15804 	 to the corresponding template parameters are replaced by the
15805 	 specified template argument values.  If a substitution in a
15806 	 template parameter or in the function type of the function
15807 	 template results in an invalid type, type deduction fails.  */
15808       int i, len = TREE_VEC_LENGTH (tparms);
15809       location_t loc = input_location;
15810       bool incomplete = false;
15811 
15812       /* Adjust any explicit template arguments before entering the
15813 	 substitution context.  */
15814       explicit_targs
15815 	= (coerce_template_parms (tparms, explicit_targs, NULL_TREE,
15816 				  complain,
15817 				  /*require_all_args=*/false,
15818 				  /*use_default_args=*/false));
15819       if (explicit_targs == error_mark_node)
15820 	goto fail;
15821 
15822       /* Substitute the explicit args into the function type.  This is
15823 	 necessary so that, for instance, explicitly declared function
15824 	 arguments can match null pointed constants.  If we were given
15825 	 an incomplete set of explicit args, we must not do semantic
15826 	 processing during substitution as we could create partial
15827 	 instantiations.  */
15828       for (i = 0; i < len; i++)
15829         {
15830           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
15831           bool parameter_pack = false;
15832 	  tree targ = TREE_VEC_ELT (explicit_targs, i);
15833 
15834           /* Dig out the actual parm.  */
15835           if (TREE_CODE (parm) == TYPE_DECL
15836               || TREE_CODE (parm) == TEMPLATE_DECL)
15837             {
15838               parm = TREE_TYPE (parm);
15839               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
15840             }
15841           else if (TREE_CODE (parm) == PARM_DECL)
15842             {
15843               parm = DECL_INITIAL (parm);
15844               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
15845             }
15846 
15847 	  if (!parameter_pack && targ == NULL_TREE)
15848 	    /* No explicit argument for this template parameter.  */
15849 	    incomplete = true;
15850 
15851           if (parameter_pack && pack_deducible_p (parm, fn))
15852             {
15853               /* Mark the argument pack as "incomplete". We could
15854                  still deduce more arguments during unification.
15855 	         We remove this mark in type_unification_real.  */
15856               if (targ)
15857                 {
15858                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
15859                   ARGUMENT_PACK_EXPLICIT_ARGS (targ)
15860                     = ARGUMENT_PACK_ARGS (targ);
15861                 }
15862 
15863               /* We have some incomplete argument packs.  */
15864               incomplete = true;
15865             }
15866         }
15867 
15868       TREE_VALUE (tinst) = explicit_targs;
15869       if (!push_tinst_level (tinst))
15870 	{
15871 	  excessive_deduction_depth = true;
15872 	  goto fail;
15873 	}
15874       processing_template_decl += incomplete;
15875       input_location = DECL_SOURCE_LOCATION (fn);
15876       /* Ignore any access checks; we'll see them again in
15877 	 instantiate_template and they might have the wrong
15878 	 access path at this point.  */
15879       push_deferring_access_checks (dk_deferred);
15880       fntype = tsubst (TREE_TYPE (fn), explicit_targs,
15881 		       complain | tf_partial, NULL_TREE);
15882       pop_deferring_access_checks ();
15883       input_location = loc;
15884       processing_template_decl -= incomplete;
15885       pop_tinst_level ();
15886 
15887       if (fntype == error_mark_node)
15888 	goto fail;
15889 
15890       /* Place the explicitly specified arguments in TARGS.  */
15891       for (i = NUM_TMPL_ARGS (explicit_targs); i--;)
15892 	TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (explicit_targs, i);
15893     }
15894 
15895   /* Never do unification on the 'this' parameter.  */
15896   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
15897 
15898   if (return_type)
15899     {
15900       tree *new_args;
15901 
15902       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
15903       new_args = XALLOCAVEC (tree, nargs + 1);
15904       new_args[0] = return_type;
15905       memcpy (new_args + 1, args, nargs * sizeof (tree));
15906       args = new_args;
15907       ++nargs;
15908     }
15909 
15910   /* We allow incomplete unification without an error message here
15911      because the standard doesn't seem to explicitly prohibit it.  Our
15912      callers must be ready to deal with unification failures in any
15913      event.  */
15914 
15915   TREE_VALUE (tinst) = targs;
15916   /* If we aren't explaining yet, push tinst context so we can see where
15917      any errors (e.g. from class instantiations triggered by instantiation
15918      of default template arguments) come from.  If we are explaining, this
15919      context is redundant.  */
15920   if (!explain_p && !push_tinst_level (tinst))
15921     {
15922       excessive_deduction_depth = true;
15923       goto fail;
15924     }
15925 
15926   /* type_unification_real will pass back any access checks from default
15927      template argument substitution.  */
15928   vec<deferred_access_check, va_gc> *checks;
15929   checks = NULL;
15930 
15931   ok = !type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
15932 			       targs, parms, args, nargs, /*subr=*/0,
15933 			       strict, flags, &checks, explain_p);
15934   if (!explain_p)
15935     pop_tinst_level ();
15936   if (!ok)
15937     goto fail;
15938 
15939   /* Now that we have bindings for all of the template arguments,
15940      ensure that the arguments deduced for the template template
15941      parameters have compatible template parameter lists.  We cannot
15942      check this property before we have deduced all template
15943      arguments, because the template parameter types of a template
15944      template parameter might depend on prior template parameters
15945      deduced after the template template parameter.  The following
15946      ill-formed example illustrates this issue:
15947 
15948        template<typename T, template<T> class C> void f(C<5>, T);
15949 
15950        template<int N> struct X {};
15951 
15952        void g() {
15953          f(X<5>(), 5l); // error: template argument deduction fails
15954        }
15955 
15956      The template parameter list of 'C' depends on the template type
15957      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
15958      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
15959      time that we deduce 'C'.  */
15960   if (!template_template_parm_bindings_ok_p
15961            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
15962     {
15963       unify_inconsistent_template_template_parameters (explain_p);
15964       goto fail;
15965     }
15966 
15967   /* All is well so far.  Now, check:
15968 
15969      [temp.deduct]
15970 
15971      When all template arguments have been deduced, all uses of
15972      template parameters in nondeduced contexts are replaced with
15973      the corresponding deduced argument values.  If the
15974      substitution results in an invalid type, as described above,
15975      type deduction fails.  */
15976   TREE_VALUE (tinst) = targs;
15977   if (!push_tinst_level (tinst))
15978     {
15979       excessive_deduction_depth = true;
15980       goto fail;
15981     }
15982 
15983   /* Also collect access checks from the instantiation.  */
15984   reopen_deferring_access_checks (checks);
15985 
15986   decl = instantiate_template (fn, targs, complain);
15987 
15988   checks = get_deferred_access_checks ();
15989   pop_deferring_access_checks ();
15990 
15991   pop_tinst_level ();
15992 
15993   if (decl == error_mark_node)
15994     goto fail;
15995 
15996   /* Now perform any access checks encountered during substitution.  */
15997   push_access_scope (decl);
15998   ok = perform_access_checks (checks, complain);
15999   pop_access_scope (decl);
16000   if (!ok)
16001     goto fail;
16002 
16003   /* If we're looking for an exact match, check that what we got
16004      is indeed an exact match.  It might not be if some template
16005      parameters are used in non-deduced contexts.  But don't check
16006      for an exact match if we have dependent template arguments;
16007      in that case we're doing partial ordering, and we already know
16008      that we have two candidates that will provide the actual type.  */
16009   if (strict == DEDUCE_EXACT && !any_dependent_template_arguments_p (targs))
16010     {
16011       tree substed = TREE_TYPE (decl);
16012       unsigned int i;
16013 
16014       tree sarg
16015 	= skip_artificial_parms_for (decl, TYPE_ARG_TYPES (substed));
16016       if (return_type)
16017 	sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
16018       for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
16019 	if (!same_type_p (args[i], TREE_VALUE (sarg)))
16020 	  {
16021 	    unify_type_mismatch (explain_p, args[i],
16022 				 TREE_VALUE (sarg));
16023 	    goto fail;
16024 	  }
16025     }
16026 
16027   r = decl;
16028 
16029  fail:
16030   --deduction_depth;
16031   if (excessive_deduction_depth)
16032     {
16033       if (deduction_depth == 0)
16034 	/* Reset once we're all the way out.  */
16035 	excessive_deduction_depth = false;
16036     }
16037 
16038   /* We can't free this if a pending_template entry or last_error_tinst_level
16039      is pointing at it.  */
16040   if (last_pending_template == old_last_pend
16041       && last_error_tinst_level == old_error_tinst)
16042     ggc_free (tinst);
16043 
16044   return r;
16045 }
16046 
16047 /* Adjust types before performing type deduction, as described in
16048    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
16049    sections are symmetric.  PARM is the type of a function parameter
16050    or the return type of the conversion function.  ARG is the type of
16051    the argument passed to the call, or the type of the value
16052    initialized with the result of the conversion function.
16053    ARG_EXPR is the original argument expression, which may be null.  */
16054 
16055 static int
maybe_adjust_types_for_deduction(unification_kind_t strict,tree * parm,tree * arg,tree arg_expr)16056 maybe_adjust_types_for_deduction (unification_kind_t strict,
16057 				  tree* parm,
16058 				  tree* arg,
16059 				  tree arg_expr)
16060 {
16061   int result = 0;
16062 
16063   switch (strict)
16064     {
16065     case DEDUCE_CALL:
16066       break;
16067 
16068     case DEDUCE_CONV:
16069       {
16070 	/* Swap PARM and ARG throughout the remainder of this
16071 	   function; the handling is precisely symmetric since PARM
16072 	   will initialize ARG rather than vice versa.  */
16073 	tree* temp = parm;
16074 	parm = arg;
16075 	arg = temp;
16076 	break;
16077       }
16078 
16079     case DEDUCE_EXACT:
16080       /* Core issue #873: Do the DR606 thing (see below) for these cases,
16081 	 too, but here handle it by stripping the reference from PARM
16082 	 rather than by adding it to ARG.  */
16083       if (TREE_CODE (*parm) == REFERENCE_TYPE
16084 	  && TYPE_REF_IS_RVALUE (*parm)
16085 	  && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
16086 	  && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
16087 	  && TREE_CODE (*arg) == REFERENCE_TYPE
16088 	  && !TYPE_REF_IS_RVALUE (*arg))
16089 	*parm = TREE_TYPE (*parm);
16090       /* Nothing else to do in this case.  */
16091       return 0;
16092 
16093     default:
16094       gcc_unreachable ();
16095     }
16096 
16097   if (TREE_CODE (*parm) != REFERENCE_TYPE)
16098     {
16099       /* [temp.deduct.call]
16100 
16101 	 If P is not a reference type:
16102 
16103 	 --If A is an array type, the pointer type produced by the
16104 	 array-to-pointer standard conversion (_conv.array_) is
16105 	 used in place of A for type deduction; otherwise,
16106 
16107 	 --If A is a function type, the pointer type produced by
16108 	 the function-to-pointer standard conversion
16109 	 (_conv.func_) is used in place of A for type deduction;
16110 	 otherwise,
16111 
16112 	 --If A is a cv-qualified type, the top level
16113 	 cv-qualifiers of A's type are ignored for type
16114 	 deduction.  */
16115       if (TREE_CODE (*arg) == ARRAY_TYPE)
16116 	*arg = build_pointer_type (TREE_TYPE (*arg));
16117       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
16118 	*arg = build_pointer_type (*arg);
16119       else
16120 	*arg = TYPE_MAIN_VARIANT (*arg);
16121     }
16122 
16123   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
16124      of the form T&&, where T is a template parameter, and the argument
16125      is an lvalue, T is deduced as A& */
16126   if (TREE_CODE (*parm) == REFERENCE_TYPE
16127       && TYPE_REF_IS_RVALUE (*parm)
16128       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
16129       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
16130       && (arg_expr ? real_lvalue_p (arg_expr)
16131 	  /* try_one_overload doesn't provide an arg_expr, but
16132 	     functions are always lvalues.  */
16133 	  : TREE_CODE (*arg) == FUNCTION_TYPE))
16134     *arg = build_reference_type (*arg);
16135 
16136   /* [temp.deduct.call]
16137 
16138      If P is a cv-qualified type, the top level cv-qualifiers
16139      of P's type are ignored for type deduction.  If P is a
16140      reference type, the type referred to by P is used for
16141      type deduction.  */
16142   *parm = TYPE_MAIN_VARIANT (*parm);
16143   if (TREE_CODE (*parm) == REFERENCE_TYPE)
16144     {
16145       *parm = TREE_TYPE (*parm);
16146       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
16147     }
16148 
16149   /* DR 322. For conversion deduction, remove a reference type on parm
16150      too (which has been swapped into ARG).  */
16151   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
16152     *arg = TREE_TYPE (*arg);
16153 
16154   return result;
16155 }
16156 
16157 /* Subroutine of unify_one_argument.  PARM is a function parameter of a
16158    template which does contain any deducible template parameters; check if
16159    ARG is a suitable match for it.  STRICT, FLAGS and EXPLAIN_P are as in
16160    unify_one_argument.  */
16161 
16162 static int
check_non_deducible_conversion(tree parm,tree arg,int strict,int flags,bool explain_p)16163 check_non_deducible_conversion (tree parm, tree arg, int strict,
16164 				int flags, bool explain_p)
16165 {
16166   tree type;
16167 
16168   if (!TYPE_P (arg))
16169     type = TREE_TYPE (arg);
16170   else
16171     type = arg;
16172 
16173   if (same_type_p (parm, type))
16174     return unify_success (explain_p);
16175 
16176   if (strict == DEDUCE_CONV)
16177     {
16178       if (can_convert_arg (type, parm, NULL_TREE, flags,
16179 			   explain_p ? tf_warning_or_error : tf_none))
16180 	return unify_success (explain_p);
16181     }
16182   else if (strict != DEDUCE_EXACT)
16183     {
16184       if (can_convert_arg (parm, type,
16185 			   TYPE_P (arg) ? NULL_TREE : arg,
16186 			   flags, explain_p ? tf_warning_or_error : tf_none))
16187 	return unify_success (explain_p);
16188     }
16189 
16190   if (strict == DEDUCE_EXACT)
16191     return unify_type_mismatch (explain_p, parm, arg);
16192   else
16193     return unify_arg_conversion (explain_p, parm, type, arg);
16194 }
16195 
16196 static bool uses_deducible_template_parms (tree type);
16197 
16198 /* Returns true iff the expression EXPR is one from which a template
16199    argument can be deduced.  In other words, if it's an undecorated
16200    use of a template non-type parameter.  */
16201 
16202 static bool
deducible_expression(tree expr)16203 deducible_expression (tree expr)
16204 {
16205   return (TREE_CODE (expr) == TEMPLATE_PARM_INDEX);
16206 }
16207 
16208 /* Returns true iff the array domain DOMAIN uses a template parameter in a
16209    deducible way; that is, if it has a max value of <PARM> - 1.  */
16210 
16211 static bool
deducible_array_bound(tree domain)16212 deducible_array_bound (tree domain)
16213 {
16214   if (domain == NULL_TREE)
16215     return false;
16216 
16217   tree max = TYPE_MAX_VALUE (domain);
16218   if (TREE_CODE (max) != MINUS_EXPR)
16219     return false;
16220 
16221   return deducible_expression (TREE_OPERAND (max, 0));
16222 }
16223 
16224 /* Returns true iff the template arguments ARGS use a template parameter
16225    in a deducible way.  */
16226 
16227 static bool
deducible_template_args(tree args)16228 deducible_template_args (tree args)
16229 {
16230   for (int i = 0; i < TREE_VEC_LENGTH (args); ++i)
16231     {
16232       bool deducible;
16233       tree elt = TREE_VEC_ELT (args, i);
16234       if (ARGUMENT_PACK_P (elt))
16235 	deducible = deducible_template_args (ARGUMENT_PACK_ARGS (elt));
16236       else
16237 	{
16238 	  if (PACK_EXPANSION_P (elt))
16239 	    elt = PACK_EXPANSION_PATTERN (elt);
16240 	  if (TREE_CODE (elt) == TEMPLATE_TEMPLATE_PARM)
16241 	    deducible = true;
16242 	  else if (TYPE_P (elt))
16243 	    deducible = uses_deducible_template_parms (elt);
16244 	  else
16245 	    deducible = deducible_expression (elt);
16246 	}
16247       if (deducible)
16248 	return true;
16249     }
16250   return false;
16251 }
16252 
16253 /* Returns true iff TYPE contains any deducible references to template
16254    parameters, as per 14.8.2.5.  */
16255 
16256 static bool
uses_deducible_template_parms(tree type)16257 uses_deducible_template_parms (tree type)
16258 {
16259   if (PACK_EXPANSION_P (type))
16260     type = PACK_EXPANSION_PATTERN (type);
16261 
16262   /* T
16263      cv-list T
16264      TT<T>
16265      TT<i>
16266      TT<> */
16267   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
16268       || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
16269     return true;
16270 
16271   /* T*
16272      T&
16273      T&&  */
16274   if (POINTER_TYPE_P (type))
16275     return uses_deducible_template_parms (TREE_TYPE (type));
16276 
16277   /* T[integer-constant ]
16278      type [i]  */
16279   if (TREE_CODE (type) == ARRAY_TYPE)
16280     return (uses_deducible_template_parms (TREE_TYPE (type))
16281 	    || deducible_array_bound (TYPE_DOMAIN (type)));
16282 
16283   /* T type ::*
16284      type T::*
16285      T T::*
16286      T (type ::*)()
16287      type (T::*)()
16288      type (type ::*)(T)
16289      type (T::*)(T)
16290      T (type ::*)(T)
16291      T (T::*)()
16292      T (T::*)(T) */
16293   if (TYPE_PTRMEM_P (type))
16294     return (uses_deducible_template_parms (TYPE_PTRMEM_CLASS_TYPE (type))
16295 	    || (uses_deducible_template_parms
16296 		(TYPE_PTRMEM_POINTED_TO_TYPE (type))));
16297 
16298   /* template-name <T> (where template-name refers to a class template)
16299      template-name <i> (where template-name refers to a class template) */
16300   if (CLASS_TYPE_P (type)
16301       && CLASSTYPE_TEMPLATE_INFO (type)
16302       && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type)))
16303     return deducible_template_args (INNERMOST_TEMPLATE_ARGS
16304 				    (CLASSTYPE_TI_ARGS (type)));
16305 
16306   /* type (T)
16307      T()
16308      T(T)  */
16309   if (TREE_CODE (type) == FUNCTION_TYPE
16310       || TREE_CODE (type) == METHOD_TYPE)
16311     {
16312       if (uses_deducible_template_parms (TREE_TYPE (type)))
16313 	return true;
16314       tree parm = TYPE_ARG_TYPES (type);
16315       if (TREE_CODE (type) == METHOD_TYPE)
16316 	parm = TREE_CHAIN (parm);
16317       for (; parm; parm = TREE_CHAIN (parm))
16318 	if (uses_deducible_template_parms (TREE_VALUE (parm)))
16319 	  return true;
16320     }
16321 
16322   return false;
16323 }
16324 
16325 /* Subroutine of type_unification_real and unify_pack_expansion to
16326    handle unification of a single P/A pair.  Parameters are as
16327    for those functions.  */
16328 
16329 static int
unify_one_argument(tree tparms,tree targs,tree parm,tree arg,int subr,unification_kind_t strict,int flags,bool explain_p)16330 unify_one_argument (tree tparms, tree targs, tree parm, tree arg,
16331 		    int subr, unification_kind_t strict, int flags,
16332 		    bool explain_p)
16333 {
16334   tree arg_expr = NULL_TREE;
16335   int arg_strict;
16336 
16337   if (arg == error_mark_node || parm == error_mark_node)
16338     return unify_invalid (explain_p);
16339   if (arg == unknown_type_node)
16340     /* We can't deduce anything from this, but we might get all the
16341        template args from other function args.  */
16342     return unify_success (explain_p);
16343 
16344   /* Implicit conversions (Clause 4) will be performed on a function
16345      argument to convert it to the type of the corresponding function
16346      parameter if the parameter type contains no template-parameters that
16347      participate in template argument deduction.  */
16348   if (TYPE_P (parm) && !uses_template_parms (parm))
16349     /* For function parameters that contain no template-parameters at all,
16350        we have historically checked for convertibility in order to shortcut
16351        consideration of this candidate.  */
16352     return check_non_deducible_conversion (parm, arg, strict, flags,
16353 					   explain_p);
16354   else if (strict == DEDUCE_CALL
16355 	   && TYPE_P (parm) && !uses_deducible_template_parms (parm))
16356     /* For function parameters with only non-deducible template parameters,
16357        just return.  */
16358     return unify_success (explain_p);
16359 
16360   switch (strict)
16361     {
16362     case DEDUCE_CALL:
16363       arg_strict = (UNIFY_ALLOW_OUTER_LEVEL
16364 		    | UNIFY_ALLOW_MORE_CV_QUAL
16365 		    | UNIFY_ALLOW_DERIVED);
16366       break;
16367 
16368     case DEDUCE_CONV:
16369       arg_strict = UNIFY_ALLOW_LESS_CV_QUAL;
16370       break;
16371 
16372     case DEDUCE_EXACT:
16373       arg_strict = UNIFY_ALLOW_NONE;
16374       break;
16375 
16376     default:
16377       gcc_unreachable ();
16378     }
16379 
16380   /* We only do these transformations if this is the top-level
16381      parameter_type_list in a call or declaration matching; in other
16382      situations (nested function declarators, template argument lists) we
16383      won't be comparing a type to an expression, and we don't do any type
16384      adjustments.  */
16385   if (!subr)
16386     {
16387       if (!TYPE_P (arg))
16388 	{
16389 	  gcc_assert (TREE_TYPE (arg) != NULL_TREE);
16390 	  if (type_unknown_p (arg))
16391 	    {
16392 	      /* [temp.deduct.type] A template-argument can be
16393 		 deduced from a pointer to function or pointer
16394 		 to member function argument if the set of
16395 		 overloaded functions does not contain function
16396 		 templates and at most one of a set of
16397 		 overloaded functions provides a unique
16398 		 match.  */
16399 
16400 	      if (resolve_overloaded_unification
16401 		  (tparms, targs, parm, arg, strict,
16402 		   arg_strict, explain_p))
16403 		return unify_success (explain_p);
16404 	      return unify_overload_resolution_failure (explain_p, arg);
16405 	    }
16406 
16407 	  arg_expr = arg;
16408 	  arg = unlowered_expr_type (arg);
16409 	  if (arg == error_mark_node)
16410 	    return unify_invalid (explain_p);
16411 	}
16412 
16413       arg_strict |=
16414 	maybe_adjust_types_for_deduction (strict, &parm, &arg, arg_expr);
16415     }
16416   else
16417     if ((TYPE_P (parm) || TREE_CODE (parm) == TEMPLATE_DECL)
16418 	!= (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL))
16419       return unify_template_argument_mismatch (explain_p, parm, arg);
16420 
16421   /* For deduction from an init-list we need the actual list.  */
16422   if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
16423     arg = arg_expr;
16424   return unify (tparms, targs, parm, arg, arg_strict, explain_p);
16425 }
16426 
16427 /* Most parms like fn_type_unification.
16428 
16429    If SUBR is 1, we're being called recursively (to unify the
16430    arguments of a function or method parameter of a function
16431    template).
16432 
16433    CHECKS is a pointer to a vector of access checks encountered while
16434    substituting default template arguments.  */
16435 
16436 static int
type_unification_real(tree tparms,tree targs,tree xparms,const tree * xargs,unsigned int xnargs,int subr,unification_kind_t strict,int flags,vec<deferred_access_check,va_gc> ** checks,bool explain_p)16437 type_unification_real (tree tparms,
16438 		       tree targs,
16439 		       tree xparms,
16440 		       const tree *xargs,
16441 		       unsigned int xnargs,
16442 		       int subr,
16443 		       unification_kind_t strict,
16444 		       int flags,
16445 		       vec<deferred_access_check, va_gc> **checks,
16446 		       bool explain_p)
16447 {
16448   tree parm, arg;
16449   int i;
16450   int ntparms = TREE_VEC_LENGTH (tparms);
16451   int saw_undeduced = 0;
16452   tree parms;
16453   const tree *args;
16454   unsigned int nargs;
16455   unsigned int ia;
16456 
16457   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
16458   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
16459   gcc_assert (ntparms > 0);
16460 
16461   /* Reset the number of non-defaulted template arguments contained
16462      in TARGS.  */
16463   NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
16464 
16465  again:
16466   parms = xparms;
16467   args = xargs;
16468   nargs = xnargs;
16469 
16470   ia = 0;
16471   while (parms && parms != void_list_node
16472 	 && ia < nargs)
16473     {
16474       parm = TREE_VALUE (parms);
16475 
16476       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION
16477 	  && (!TREE_CHAIN (parms) || TREE_CHAIN (parms) == void_list_node))
16478 	/* For a function parameter pack that occurs at the end of the
16479 	   parameter-declaration-list, the type A of each remaining
16480 	   argument of the call is compared with the type P of the
16481 	   declarator-id of the function parameter pack.  */
16482 	break;
16483 
16484       parms = TREE_CHAIN (parms);
16485 
16486       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION)
16487 	/* For a function parameter pack that does not occur at the
16488 	   end of the parameter-declaration-list, the type of the
16489 	   parameter pack is a non-deduced context.  */
16490 	continue;
16491 
16492       arg = args[ia];
16493       ++ia;
16494 
16495       if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
16496 			      flags, explain_p))
16497 	return 1;
16498     }
16499 
16500   if (parms
16501       && parms != void_list_node
16502       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
16503     {
16504       /* Unify the remaining arguments with the pack expansion type.  */
16505       tree argvec;
16506       tree parmvec = make_tree_vec (1);
16507 
16508       /* Allocate a TREE_VEC and copy in all of the arguments */
16509       argvec = make_tree_vec (nargs - ia);
16510       for (i = 0; ia < nargs; ++ia, ++i)
16511 	TREE_VEC_ELT (argvec, i) = args[ia];
16512 
16513       /* Copy the parameter into parmvec.  */
16514       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
16515       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
16516                                 /*subr=*/subr, explain_p))
16517         return 1;
16518 
16519       /* Advance to the end of the list of parameters.  */
16520       parms = TREE_CHAIN (parms);
16521     }
16522 
16523   /* Fail if we've reached the end of the parm list, and more args
16524      are present, and the parm list isn't variadic.  */
16525   if (ia < nargs && parms == void_list_node)
16526     return unify_too_many_arguments (explain_p, nargs, ia);
16527   /* Fail if parms are left and they don't have default values.  */
16528   if (parms && parms != void_list_node
16529       && TREE_PURPOSE (parms) == NULL_TREE)
16530     {
16531       unsigned int count = nargs;
16532       tree p = parms;
16533       while (p && p != void_list_node)
16534 	{
16535 	  count++;
16536 	  p = TREE_CHAIN (p);
16537 	}
16538       return unify_too_few_arguments (explain_p, ia, count);
16539     }
16540 
16541   if (!subr)
16542     {
16543       tsubst_flags_t complain = (explain_p
16544 				 ? tf_warning_or_error
16545 				 : tf_none);
16546 
16547       for (i = 0; i < ntparms; i++)
16548 	{
16549 	  tree targ = TREE_VEC_ELT (targs, i);
16550 	  tree tparm = TREE_VEC_ELT (tparms, i);
16551 
16552 	  /* Clear the "incomplete" flags on all argument packs now so that
16553 	     substituting them into later default arguments works.  */
16554 	  if (targ && ARGUMENT_PACK_P (targ))
16555             {
16556               ARGUMENT_PACK_INCOMPLETE_P (targ) = 0;
16557               ARGUMENT_PACK_EXPLICIT_ARGS (targ) = NULL_TREE;
16558             }
16559 
16560 	  if (targ || tparm == error_mark_node)
16561 	    continue;
16562 	  tparm = TREE_VALUE (tparm);
16563 
16564 	  /* If this is an undeduced nontype parameter that depends on
16565 	     a type parameter, try another pass; its type may have been
16566 	     deduced from a later argument than the one from which
16567 	     this parameter can be deduced.  */
16568 	  if (TREE_CODE (tparm) == PARM_DECL
16569 	      && uses_template_parms (TREE_TYPE (tparm))
16570 	      && !saw_undeduced++)
16571 	    goto again;
16572 
16573 	  /* Core issue #226 (C++0x) [temp.deduct]:
16574 
16575 	     If a template argument has not been deduced, its
16576 	     default template argument, if any, is used.
16577 
16578 	     When we are in C++98 mode, TREE_PURPOSE will either
16579 	     be NULL_TREE or ERROR_MARK_NODE, so we do not need
16580 	     to explicitly check cxx_dialect here.  */
16581 	  if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
16582 	    {
16583 	      tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
16584 	      tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i));
16585 	      reopen_deferring_access_checks (*checks);
16586 	      location_t save_loc = input_location;
16587 	      if (DECL_P (parm))
16588 		input_location = DECL_SOURCE_LOCATION (parm);
16589 	      arg = tsubst_template_arg (arg, targs, complain, NULL_TREE);
16590 	      arg = convert_template_argument (parm, arg, targs, complain,
16591 					       i, NULL_TREE);
16592 	      input_location = save_loc;
16593 	      *checks = get_deferred_access_checks ();
16594 	      pop_deferring_access_checks ();
16595 	      if (arg == error_mark_node)
16596 		return 1;
16597 	      else
16598 		{
16599 		  TREE_VEC_ELT (targs, i) = arg;
16600 		  /* The position of the first default template argument,
16601 		     is also the number of non-defaulted arguments in TARGS.
16602 		     Record that.  */
16603 		  if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
16604 		    SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
16605 		  continue;
16606 		}
16607 	    }
16608 
16609 	  /* If the type parameter is a parameter pack, then it will
16610 	     be deduced to an empty parameter pack.  */
16611 	  if (template_parameter_pack_p (tparm))
16612 	    {
16613 	      tree arg;
16614 
16615 	      if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
16616 		{
16617 		  arg = make_node (NONTYPE_ARGUMENT_PACK);
16618 		  TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
16619 		  TREE_CONSTANT (arg) = 1;
16620 		}
16621 	      else
16622 		arg = cxx_make_type (TYPE_ARGUMENT_PACK);
16623 
16624 	      SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
16625 
16626 	      TREE_VEC_ELT (targs, i) = arg;
16627 	      continue;
16628 	    }
16629 
16630 	  return unify_parameter_deduction_failure (explain_p, tparm);
16631 	}
16632     }
16633 #ifdef ENABLE_CHECKING
16634   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
16635     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
16636 #endif
16637 
16638   return unify_success (explain_p);
16639 }
16640 
16641 /* Subroutine of type_unification_real.  Args are like the variables
16642    at the call site.  ARG is an overloaded function (or template-id);
16643    we try deducing template args from each of the overloads, and if
16644    only one succeeds, we go with that.  Modifies TARGS and returns
16645    true on success.  */
16646 
16647 static bool
resolve_overloaded_unification(tree tparms,tree targs,tree parm,tree arg,unification_kind_t strict,int sub_strict,bool explain_p)16648 resolve_overloaded_unification (tree tparms,
16649 				tree targs,
16650 				tree parm,
16651 				tree arg,
16652 				unification_kind_t strict,
16653 				int sub_strict,
16654 			        bool explain_p)
16655 {
16656   tree tempargs = copy_node (targs);
16657   int good = 0;
16658   tree goodfn = NULL_TREE;
16659   bool addr_p;
16660 
16661   if (TREE_CODE (arg) == ADDR_EXPR)
16662     {
16663       arg = TREE_OPERAND (arg, 0);
16664       addr_p = true;
16665     }
16666   else
16667     addr_p = false;
16668 
16669   if (TREE_CODE (arg) == COMPONENT_REF)
16670     /* Handle `&x' where `x' is some static or non-static member
16671        function name.  */
16672     arg = TREE_OPERAND (arg, 1);
16673 
16674   if (TREE_CODE (arg) == OFFSET_REF)
16675     arg = TREE_OPERAND (arg, 1);
16676 
16677   /* Strip baselink information.  */
16678   if (BASELINK_P (arg))
16679     arg = BASELINK_FUNCTIONS (arg);
16680 
16681   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
16682     {
16683       /* If we got some explicit template args, we need to plug them into
16684 	 the affected templates before we try to unify, in case the
16685 	 explicit args will completely resolve the templates in question.  */
16686 
16687       int ok = 0;
16688       tree expl_subargs = TREE_OPERAND (arg, 1);
16689       arg = TREE_OPERAND (arg, 0);
16690 
16691       for (; arg; arg = OVL_NEXT (arg))
16692 	{
16693 	  tree fn = OVL_CURRENT (arg);
16694 	  tree subargs, elem;
16695 
16696 	  if (TREE_CODE (fn) != TEMPLATE_DECL)
16697 	    continue;
16698 
16699 	  subargs = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
16700 					   expl_subargs, NULL_TREE, tf_none,
16701 					   /*require_all_args=*/true,
16702 					   /*use_default_args=*/true);
16703 	  if (subargs != error_mark_node
16704 	      && !any_dependent_template_arguments_p (subargs))
16705 	    {
16706 	      elem = TREE_TYPE (instantiate_template (fn, subargs, tf_none));
16707 	      if (try_one_overload (tparms, targs, tempargs, parm,
16708 				    elem, strict, sub_strict, addr_p, explain_p)
16709 		  && (!goodfn || !same_type_p (goodfn, elem)))
16710 		{
16711 		  goodfn = elem;
16712 		  ++good;
16713 		}
16714 	    }
16715 	  else if (subargs)
16716 	    ++ok;
16717 	}
16718       /* If no templates (or more than one) are fully resolved by the
16719 	 explicit arguments, this template-id is a non-deduced context; it
16720 	 could still be OK if we deduce all template arguments for the
16721 	 enclosing call through other arguments.  */
16722       if (good != 1)
16723 	good = ok;
16724     }
16725   else if (TREE_CODE (arg) != OVERLOAD
16726 	   && TREE_CODE (arg) != FUNCTION_DECL)
16727     /* If ARG is, for example, "(0, &f)" then its type will be unknown
16728        -- but the deduction does not succeed because the expression is
16729        not just the function on its own.  */
16730     return false;
16731   else
16732     for (; arg; arg = OVL_NEXT (arg))
16733       if (try_one_overload (tparms, targs, tempargs, parm,
16734 			    TREE_TYPE (OVL_CURRENT (arg)),
16735 			    strict, sub_strict, addr_p, explain_p)
16736 	  && (!goodfn || !decls_match (goodfn, OVL_CURRENT (arg))))
16737 	{
16738 	  goodfn = OVL_CURRENT (arg);
16739 	  ++good;
16740 	}
16741 
16742   /* [temp.deduct.type] A template-argument can be deduced from a pointer
16743      to function or pointer to member function argument if the set of
16744      overloaded functions does not contain function templates and at most
16745      one of a set of overloaded functions provides a unique match.
16746 
16747      So if we found multiple possibilities, we return success but don't
16748      deduce anything.  */
16749 
16750   if (good == 1)
16751     {
16752       int i = TREE_VEC_LENGTH (targs);
16753       for (; i--; )
16754 	if (TREE_VEC_ELT (tempargs, i))
16755 	  {
16756 	    tree old = TREE_VEC_ELT (targs, i);
16757 	    tree new_ = TREE_VEC_ELT (tempargs, i);
16758 	    if (new_ && old && ARGUMENT_PACK_P (old)
16759 		&& ARGUMENT_PACK_EXPLICIT_ARGS (old))
16760 	      /* Don't forget explicit template arguments in a pack.  */
16761 	      ARGUMENT_PACK_EXPLICIT_ARGS (new_)
16762 		= ARGUMENT_PACK_EXPLICIT_ARGS (old);
16763 	    TREE_VEC_ELT (targs, i) = new_;
16764 	  }
16765     }
16766   if (good)
16767     return true;
16768 
16769   return false;
16770 }
16771 
16772 /* Core DR 115: In contexts where deduction is done and fails, or in
16773    contexts where deduction is not done, if a template argument list is
16774    specified and it, along with any default template arguments, identifies
16775    a single function template specialization, then the template-id is an
16776    lvalue for the function template specialization.  */
16777 
16778 tree
resolve_nondeduced_context(tree orig_expr)16779 resolve_nondeduced_context (tree orig_expr)
16780 {
16781   tree expr, offset, baselink;
16782   bool addr;
16783 
16784   if (!type_unknown_p (orig_expr))
16785     return orig_expr;
16786 
16787   expr = orig_expr;
16788   addr = false;
16789   offset = NULL_TREE;
16790   baselink = NULL_TREE;
16791 
16792   if (TREE_CODE (expr) == ADDR_EXPR)
16793     {
16794       expr = TREE_OPERAND (expr, 0);
16795       addr = true;
16796     }
16797   if (TREE_CODE (expr) == OFFSET_REF)
16798     {
16799       offset = expr;
16800       expr = TREE_OPERAND (expr, 1);
16801     }
16802   if (BASELINK_P (expr))
16803     {
16804       baselink = expr;
16805       expr = BASELINK_FUNCTIONS (expr);
16806     }
16807 
16808   if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
16809     {
16810       int good = 0;
16811       tree goodfn = NULL_TREE;
16812 
16813       /* If we got some explicit template args, we need to plug them into
16814 	 the affected templates before we try to unify, in case the
16815 	 explicit args will completely resolve the templates in question.  */
16816 
16817       tree expl_subargs = TREE_OPERAND (expr, 1);
16818       tree arg = TREE_OPERAND (expr, 0);
16819       tree badfn = NULL_TREE;
16820       tree badargs = NULL_TREE;
16821 
16822       for (; arg; arg = OVL_NEXT (arg))
16823 	{
16824 	  tree fn = OVL_CURRENT (arg);
16825 	  tree subargs, elem;
16826 
16827 	  if (TREE_CODE (fn) != TEMPLATE_DECL)
16828 	    continue;
16829 
16830 	  subargs = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
16831 					   expl_subargs, NULL_TREE, tf_none,
16832 					   /*require_all_args=*/true,
16833 					   /*use_default_args=*/true);
16834 	  if (subargs != error_mark_node
16835 	      && !any_dependent_template_arguments_p (subargs))
16836 	    {
16837 	      elem = instantiate_template (fn, subargs, tf_none);
16838 	      if (elem == error_mark_node)
16839 		{
16840 		  badfn = fn;
16841 		  badargs = subargs;
16842 		}
16843 	      else if (elem && (!goodfn || !decls_match (goodfn, elem)))
16844 		{
16845 		  goodfn = elem;
16846 		  ++good;
16847 		}
16848 	    }
16849 	}
16850       if (good == 1)
16851 	{
16852 	  mark_used (goodfn);
16853 	  expr = goodfn;
16854 	  if (baselink)
16855 	    expr = build_baselink (BASELINK_BINFO (baselink),
16856 				   BASELINK_ACCESS_BINFO (baselink),
16857 				   expr, BASELINK_OPTYPE (baselink));
16858 	  if (offset)
16859 	    {
16860 	      tree base
16861 		= TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (offset, 0)));
16862 	      expr = build_offset_ref (base, expr, addr, tf_warning_or_error);
16863 	    }
16864 	  if (addr)
16865 	    expr = cp_build_addr_expr (expr, tf_warning_or_error);
16866 	  return expr;
16867 	}
16868       else if (good == 0 && badargs)
16869 	/* There were no good options and at least one bad one, so let the
16870 	   user know what the problem is.  */
16871 	instantiate_template (badfn, badargs, tf_warning_or_error);
16872     }
16873   return orig_expr;
16874 }
16875 
16876 /* Subroutine of resolve_overloaded_unification; does deduction for a single
16877    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
16878    different overloads deduce different arguments for a given parm.
16879    ADDR_P is true if the expression for which deduction is being
16880    performed was of the form "& fn" rather than simply "fn".
16881 
16882    Returns 1 on success.  */
16883 
16884 static int
try_one_overload(tree tparms,tree orig_targs,tree targs,tree parm,tree arg,unification_kind_t strict,int sub_strict,bool addr_p,bool explain_p)16885 try_one_overload (tree tparms,
16886 		  tree orig_targs,
16887 		  tree targs,
16888 		  tree parm,
16889 		  tree arg,
16890 		  unification_kind_t strict,
16891 		  int sub_strict,
16892 		  bool addr_p,
16893 		  bool explain_p)
16894 {
16895   int nargs;
16896   tree tempargs;
16897   int i;
16898 
16899   if (arg == error_mark_node)
16900     return 0;
16901 
16902   /* [temp.deduct.type] A template-argument can be deduced from a pointer
16903      to function or pointer to member function argument if the set of
16904      overloaded functions does not contain function templates and at most
16905      one of a set of overloaded functions provides a unique match.
16906 
16907      So if this is a template, just return success.  */
16908 
16909   if (uses_template_parms (arg))
16910     return 1;
16911 
16912   if (TREE_CODE (arg) == METHOD_TYPE)
16913     arg = build_ptrmemfunc_type (build_pointer_type (arg));
16914   else if (addr_p)
16915     arg = build_pointer_type (arg);
16916 
16917   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
16918 
16919   /* We don't copy orig_targs for this because if we have already deduced
16920      some template args from previous args, unify would complain when we
16921      try to deduce a template parameter for the same argument, even though
16922      there isn't really a conflict.  */
16923   nargs = TREE_VEC_LENGTH (targs);
16924   tempargs = make_tree_vec (nargs);
16925 
16926   if (unify (tparms, tempargs, parm, arg, sub_strict, explain_p))
16927     return 0;
16928 
16929   /* First make sure we didn't deduce anything that conflicts with
16930      explicitly specified args.  */
16931   for (i = nargs; i--; )
16932     {
16933       tree elt = TREE_VEC_ELT (tempargs, i);
16934       tree oldelt = TREE_VEC_ELT (orig_targs, i);
16935 
16936       if (!elt)
16937 	/*NOP*/;
16938       else if (uses_template_parms (elt))
16939 	/* Since we're unifying against ourselves, we will fill in
16940 	   template args used in the function parm list with our own
16941 	   template parms.  Discard them.  */
16942 	TREE_VEC_ELT (tempargs, i) = NULL_TREE;
16943       else if (oldelt && !template_args_equal (oldelt, elt))
16944 	return 0;
16945     }
16946 
16947   for (i = nargs; i--; )
16948     {
16949       tree elt = TREE_VEC_ELT (tempargs, i);
16950 
16951       if (elt)
16952 	TREE_VEC_ELT (targs, i) = elt;
16953     }
16954 
16955   return 1;
16956 }
16957 
16958 /* PARM is a template class (perhaps with unbound template
16959    parameters).  ARG is a fully instantiated type.  If ARG can be
16960    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
16961    TARGS are as for unify.  */
16962 
16963 static tree
try_class_unification(tree tparms,tree targs,tree parm,tree arg,bool explain_p)16964 try_class_unification (tree tparms, tree targs, tree parm, tree arg,
16965 		       bool explain_p)
16966 {
16967   tree copy_of_targs;
16968 
16969   if (!CLASSTYPE_TEMPLATE_INFO (arg)
16970       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
16971 	  != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
16972     return NULL_TREE;
16973 
16974   /* We need to make a new template argument vector for the call to
16975      unify.  If we used TARGS, we'd clutter it up with the result of
16976      the attempted unification, even if this class didn't work out.
16977      We also don't want to commit ourselves to all the unifications
16978      we've already done, since unification is supposed to be done on
16979      an argument-by-argument basis.  In other words, consider the
16980      following pathological case:
16981 
16982        template <int I, int J, int K>
16983        struct S {};
16984 
16985        template <int I, int J>
16986        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
16987 
16988        template <int I, int J, int K>
16989        void f(S<I, J, K>, S<I, I, I>);
16990 
16991        void g() {
16992 	 S<0, 0, 0> s0;
16993 	 S<0, 1, 2> s2;
16994 
16995 	 f(s0, s2);
16996        }
16997 
16998      Now, by the time we consider the unification involving `s2', we
16999      already know that we must have `f<0, 0, 0>'.  But, even though
17000      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
17001      because there are two ways to unify base classes of S<0, 1, 2>
17002      with S<I, I, I>.  If we kept the already deduced knowledge, we
17003      would reject the possibility I=1.  */
17004   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
17005 
17006   /* If unification failed, we're done.  */
17007   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
17008 	     CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE, explain_p))
17009     return NULL_TREE;
17010 
17011   return arg;
17012 }
17013 
17014 /* Given a template type PARM and a class type ARG, find the unique
17015    base type in ARG that is an instance of PARM.  We do not examine
17016    ARG itself; only its base-classes.  If there is not exactly one
17017    appropriate base class, return NULL_TREE.  PARM may be the type of
17018    a partial specialization, as well as a plain template type.  Used
17019    by unify.  */
17020 
17021 static enum template_base_result
get_template_base(tree tparms,tree targs,tree parm,tree arg,bool explain_p,tree * result)17022 get_template_base (tree tparms, tree targs, tree parm, tree arg,
17023 		   bool explain_p, tree *result)
17024 {
17025   tree rval = NULL_TREE;
17026   tree binfo;
17027 
17028   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
17029 
17030   binfo = TYPE_BINFO (complete_type (arg));
17031   if (!binfo)
17032     {
17033       /* The type could not be completed.  */
17034       *result = NULL_TREE;
17035       return tbr_incomplete_type;
17036     }
17037 
17038   /* Walk in inheritance graph order.  The search order is not
17039      important, and this avoids multiple walks of virtual bases.  */
17040   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
17041     {
17042       tree r = try_class_unification (tparms, targs, parm,
17043 				      BINFO_TYPE (binfo), explain_p);
17044 
17045       if (r)
17046 	{
17047 	  /* If there is more than one satisfactory baseclass, then:
17048 
17049 	       [temp.deduct.call]
17050 
17051 	      If they yield more than one possible deduced A, the type
17052 	      deduction fails.
17053 
17054 	     applies.  */
17055 	  if (rval && !same_type_p (r, rval))
17056 	    {
17057 	      *result = NULL_TREE;
17058 	      return tbr_ambiguous_baseclass;
17059 	    }
17060 
17061 	  rval = r;
17062 	}
17063     }
17064 
17065   *result = rval;
17066   return tbr_success;
17067 }
17068 
17069 /* Returns the level of DECL, which declares a template parameter.  */
17070 
17071 static int
template_decl_level(tree decl)17072 template_decl_level (tree decl)
17073 {
17074   switch (TREE_CODE (decl))
17075     {
17076     case TYPE_DECL:
17077     case TEMPLATE_DECL:
17078       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
17079 
17080     case PARM_DECL:
17081       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
17082 
17083     default:
17084       gcc_unreachable ();
17085     }
17086   return 0;
17087 }
17088 
17089 /* Decide whether ARG can be unified with PARM, considering only the
17090    cv-qualifiers of each type, given STRICT as documented for unify.
17091    Returns nonzero iff the unification is OK on that basis.  */
17092 
17093 static int
check_cv_quals_for_unify(int strict,tree arg,tree parm)17094 check_cv_quals_for_unify (int strict, tree arg, tree parm)
17095 {
17096   int arg_quals = cp_type_quals (arg);
17097   int parm_quals = cp_type_quals (parm);
17098 
17099   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
17100       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
17101     {
17102       /*  Although a CVR qualifier is ignored when being applied to a
17103 	  substituted template parameter ([8.3.2]/1 for example), that
17104 	  does not allow us to unify "const T" with "int&" because both
17105 	  types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
17106 	  It is ok when we're allowing additional CV qualifiers
17107 	  at the outer level [14.8.2.1]/3,1st bullet.  */
17108       if ((TREE_CODE (arg) == REFERENCE_TYPE
17109 	   || TREE_CODE (arg) == FUNCTION_TYPE
17110 	   || TREE_CODE (arg) == METHOD_TYPE)
17111 	  && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
17112 	return 0;
17113 
17114       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
17115 	  && (parm_quals & TYPE_QUAL_RESTRICT))
17116 	return 0;
17117     }
17118 
17119   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
17120       && (arg_quals & parm_quals) != parm_quals)
17121     return 0;
17122 
17123   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
17124       && (parm_quals & arg_quals) != arg_quals)
17125     return 0;
17126 
17127   return 1;
17128 }
17129 
17130 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
17131 void
template_parm_level_and_index(tree parm,int * level,int * index)17132 template_parm_level_and_index (tree parm, int* level, int* index)
17133 {
17134   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
17135       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
17136       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
17137     {
17138       *index = TEMPLATE_TYPE_IDX (parm);
17139       *level = TEMPLATE_TYPE_LEVEL (parm);
17140     }
17141   else
17142     {
17143       *index = TEMPLATE_PARM_IDX (parm);
17144       *level = TEMPLATE_PARM_LEVEL (parm);
17145     }
17146 }
17147 
17148 #define RECUR_AND_CHECK_FAILURE(TP, TA, P, A, S, EP)			\
17149   do {									\
17150     if (unify (TP, TA, P, A, S, EP))					\
17151       return 1;								\
17152   } while (0);
17153 
17154 /* Unifies the remaining arguments in PACKED_ARGS with the pack
17155    expansion at the end of PACKED_PARMS. Returns 0 if the type
17156    deduction succeeds, 1 otherwise. STRICT is the same as in
17157    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
17158    call argument list. We'll need to adjust the arguments to make them
17159    types. SUBR tells us if this is from a recursive call to
17160    type_unification_real, or for comparing two template argument
17161    lists. */
17162 
17163 static int
unify_pack_expansion(tree tparms,tree targs,tree packed_parms,tree packed_args,unification_kind_t strict,bool subr,bool explain_p)17164 unify_pack_expansion (tree tparms, tree targs, tree packed_parms,
17165                       tree packed_args, unification_kind_t strict,
17166                       bool subr, bool explain_p)
17167 {
17168   tree parm
17169     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
17170   tree pattern = PACK_EXPANSION_PATTERN (parm);
17171   tree pack, packs = NULL_TREE;
17172   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
17173 
17174   packed_args = expand_template_argument_pack (packed_args);
17175 
17176   int len = TREE_VEC_LENGTH (packed_args);
17177 
17178   /* Determine the parameter packs we will be deducing from the
17179      pattern, and record their current deductions.  */
17180   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm);
17181        pack; pack = TREE_CHAIN (pack))
17182     {
17183       tree parm_pack = TREE_VALUE (pack);
17184       int idx, level;
17185 
17186       /* Determine the index and level of this parameter pack.  */
17187       template_parm_level_and_index (parm_pack, &level, &idx);
17188 
17189       /* Keep track of the parameter packs and their corresponding
17190          argument packs.  */
17191       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
17192       TREE_TYPE (packs) = make_tree_vec (len - start);
17193     }
17194 
17195   /* Loop through all of the arguments that have not yet been
17196      unified and unify each with the pattern.  */
17197   for (i = start; i < len; i++)
17198     {
17199       tree parm;
17200       bool any_explicit = false;
17201       tree arg = TREE_VEC_ELT (packed_args, i);
17202 
17203       /* For each parameter pack, set its TMPL_ARG to either NULL_TREE
17204 	 or the element of its argument pack at the current index if
17205 	 this argument was explicitly specified.  */
17206       for (pack = packs; pack; pack = TREE_CHAIN (pack))
17207         {
17208           int idx, level;
17209           tree arg, pargs;
17210           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
17211 
17212           arg = NULL_TREE;
17213           if (TREE_VALUE (pack)
17214               && (pargs = ARGUMENT_PACK_EXPLICIT_ARGS (TREE_VALUE (pack)))
17215               && (i - start < TREE_VEC_LENGTH (pargs)))
17216             {
17217               any_explicit = true;
17218               arg = TREE_VEC_ELT (pargs, i - start);
17219             }
17220           TMPL_ARG (targs, level, idx) = arg;
17221         }
17222 
17223       /* If we had explicit template arguments, substitute them into the
17224 	 pattern before deduction.  */
17225       if (any_explicit)
17226 	{
17227 	  /* Some arguments might still be unspecified or dependent.  */
17228 	  bool dependent;
17229 	  ++processing_template_decl;
17230 	  dependent = any_dependent_template_arguments_p (targs);
17231 	  if (!dependent)
17232 	    --processing_template_decl;
17233 	  parm = tsubst (pattern, targs,
17234 			 explain_p ? tf_warning_or_error : tf_none,
17235 			 NULL_TREE);
17236 	  if (dependent)
17237 	    --processing_template_decl;
17238 	  if (parm == error_mark_node)
17239 	    return 1;
17240 	}
17241       else
17242 	parm = pattern;
17243 
17244       /* Unify the pattern with the current argument.  */
17245       if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
17246 			      LOOKUP_IMPLICIT, explain_p))
17247 	return 1;
17248 
17249       /* For each parameter pack, collect the deduced value.  */
17250       for (pack = packs; pack; pack = TREE_CHAIN (pack))
17251         {
17252           int idx, level;
17253           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
17254 
17255           TREE_VEC_ELT (TREE_TYPE (pack), i - start) =
17256             TMPL_ARG (targs, level, idx);
17257         }
17258     }
17259 
17260   /* Verify that the results of unification with the parameter packs
17261      produce results consistent with what we've seen before, and make
17262      the deduced argument packs available.  */
17263   for (pack = packs; pack; pack = TREE_CHAIN (pack))
17264     {
17265       tree old_pack = TREE_VALUE (pack);
17266       tree new_args = TREE_TYPE (pack);
17267       int i, len = TREE_VEC_LENGTH (new_args);
17268       int idx, level;
17269       bool nondeduced_p = false;
17270 
17271       /* By default keep the original deduced argument pack.
17272 	 If necessary, more specific code is going to update the
17273 	 resulting deduced argument later down in this function.  */
17274       template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
17275       TMPL_ARG (targs, level, idx) = old_pack;
17276 
17277       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
17278 	 actually deduce anything.  */
17279       for (i = 0; i < len && !nondeduced_p; ++i)
17280 	if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
17281 	  nondeduced_p = true;
17282       if (nondeduced_p)
17283 	continue;
17284 
17285       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
17286         {
17287           /* If we had fewer function args than explicit template args,
17288              just use the explicits.  */
17289           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
17290           int explicit_len = TREE_VEC_LENGTH (explicit_args);
17291           if (len < explicit_len)
17292             new_args = explicit_args;
17293         }
17294 
17295       if (!old_pack)
17296         {
17297           tree result;
17298           /* Build the deduced *_ARGUMENT_PACK.  */
17299           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
17300             {
17301               result = make_node (NONTYPE_ARGUMENT_PACK);
17302               TREE_TYPE (result) =
17303                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
17304               TREE_CONSTANT (result) = 1;
17305             }
17306           else
17307             result = cxx_make_type (TYPE_ARGUMENT_PACK);
17308 
17309           SET_ARGUMENT_PACK_ARGS (result, new_args);
17310 
17311           /* Note the deduced argument packs for this parameter
17312              pack.  */
17313           TMPL_ARG (targs, level, idx) = result;
17314         }
17315       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
17316                && (ARGUMENT_PACK_ARGS (old_pack)
17317                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
17318         {
17319           /* We only had the explicitly-provided arguments before, but
17320              now we have a complete set of arguments.  */
17321           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
17322 
17323           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
17324           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
17325           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
17326         }
17327       else
17328 	{
17329 	  tree bad_old_arg = NULL_TREE, bad_new_arg = NULL_TREE;
17330 	  tree old_args = ARGUMENT_PACK_ARGS (old_pack);
17331 
17332 	  if (!comp_template_args_with_info (old_args, new_args,
17333 					     &bad_old_arg, &bad_new_arg))
17334 	    /* Inconsistent unification of this parameter pack.  */
17335 	    return unify_parameter_pack_inconsistent (explain_p,
17336 						      bad_old_arg,
17337 						      bad_new_arg);
17338 	}
17339     }
17340 
17341   return unify_success (explain_p);
17342 }
17343 
17344 /* Handle unification of the domain of an array.  PARM_DOM and ARG_DOM are
17345    INTEGER_TYPEs representing the TYPE_DOMAIN of ARRAY_TYPEs.  The other
17346    parameters and return value are as for unify.  */
17347 
17348 static int
unify_array_domain(tree tparms,tree targs,tree parm_dom,tree arg_dom,bool explain_p)17349 unify_array_domain (tree tparms, tree targs,
17350 		    tree parm_dom, tree arg_dom,
17351 		    bool explain_p)
17352 {
17353   tree parm_max;
17354   tree arg_max;
17355   bool parm_cst;
17356   bool arg_cst;
17357 
17358   /* Our representation of array types uses "N - 1" as the
17359      TYPE_MAX_VALUE for an array with "N" elements, if "N" is
17360      not an integer constant.  We cannot unify arbitrarily
17361      complex expressions, so we eliminate the MINUS_EXPRs
17362      here.  */
17363   parm_max = TYPE_MAX_VALUE (parm_dom);
17364   parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
17365   if (!parm_cst)
17366     {
17367       gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
17368       parm_max = TREE_OPERAND (parm_max, 0);
17369     }
17370   arg_max = TYPE_MAX_VALUE (arg_dom);
17371   arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
17372   if (!arg_cst)
17373     {
17374       /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
17375 	 trying to unify the type of a variable with the type
17376 	 of a template parameter.  For example:
17377 
17378 	   template <unsigned int N>
17379 	   void f (char (&) [N]);
17380 	   int g();
17381 	   void h(int i) {
17382 	     char a[g(i)];
17383 	     f(a);
17384 	   }
17385 
17386 	 Here, the type of the ARG will be "int [g(i)]", and
17387 	 may be a SAVE_EXPR, etc.  */
17388       if (TREE_CODE (arg_max) != MINUS_EXPR)
17389 	return unify_vla_arg (explain_p, arg_dom);
17390       arg_max = TREE_OPERAND (arg_max, 0);
17391     }
17392 
17393   /* If only one of the bounds used a MINUS_EXPR, compensate
17394      by adding one to the other bound.  */
17395   if (parm_cst && !arg_cst)
17396     parm_max = fold_build2_loc (input_location, PLUS_EXPR,
17397 				integer_type_node,
17398 				parm_max,
17399 				integer_one_node);
17400   else if (arg_cst && !parm_cst)
17401     arg_max = fold_build2_loc (input_location, PLUS_EXPR,
17402 			       integer_type_node,
17403 			       arg_max,
17404 			       integer_one_node);
17405 
17406   return unify (tparms, targs, parm_max, arg_max,
17407 		UNIFY_ALLOW_INTEGER, explain_p);
17408 }
17409 
17410 /* Deduce the value of template parameters.  TPARMS is the (innermost)
17411    set of template parameters to a template.  TARGS is the bindings
17412    for those template parameters, as determined thus far; TARGS may
17413    include template arguments for outer levels of template parameters
17414    as well.  PARM is a parameter to a template function, or a
17415    subcomponent of that parameter; ARG is the corresponding argument.
17416    This function attempts to match PARM with ARG in a manner
17417    consistent with the existing assignments in TARGS.  If more values
17418    are deduced, then TARGS is updated.
17419 
17420    Returns 0 if the type deduction succeeds, 1 otherwise.  The
17421    parameter STRICT is a bitwise or of the following flags:
17422 
17423      UNIFY_ALLOW_NONE:
17424        Require an exact match between PARM and ARG.
17425      UNIFY_ALLOW_MORE_CV_QUAL:
17426        Allow the deduced ARG to be more cv-qualified (by qualification
17427        conversion) than ARG.
17428      UNIFY_ALLOW_LESS_CV_QUAL:
17429        Allow the deduced ARG to be less cv-qualified than ARG.
17430      UNIFY_ALLOW_DERIVED:
17431        Allow the deduced ARG to be a template base class of ARG,
17432        or a pointer to a template base class of the type pointed to by
17433        ARG.
17434      UNIFY_ALLOW_INTEGER:
17435        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
17436        case for more information.
17437      UNIFY_ALLOW_OUTER_LEVEL:
17438        This is the outermost level of a deduction. Used to determine validity
17439        of qualification conversions. A valid qualification conversion must
17440        have const qualified pointers leading up to the inner type which
17441        requires additional CV quals, except at the outer level, where const
17442        is not required [conv.qual]. It would be normal to set this flag in
17443        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
17444      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
17445        This is the outermost level of a deduction, and PARM can be more CV
17446        qualified at this point.
17447      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
17448        This is the outermost level of a deduction, and PARM can be less CV
17449        qualified at this point.  */
17450 
17451 static int
unify(tree tparms,tree targs,tree parm,tree arg,int strict,bool explain_p)17452 unify (tree tparms, tree targs, tree parm, tree arg, int strict,
17453        bool explain_p)
17454 {
17455   int idx;
17456   tree targ;
17457   tree tparm;
17458   int strict_in = strict;
17459 
17460   /* I don't think this will do the right thing with respect to types.
17461      But the only case I've seen it in so far has been array bounds, where
17462      signedness is the only information lost, and I think that will be
17463      okay.  */
17464   while (TREE_CODE (parm) == NOP_EXPR)
17465     parm = TREE_OPERAND (parm, 0);
17466 
17467   if (arg == error_mark_node)
17468     return unify_invalid (explain_p);
17469   if (arg == unknown_type_node
17470       || arg == init_list_type_node)
17471     /* We can't deduce anything from this, but we might get all the
17472        template args from other function args.  */
17473     return unify_success (explain_p);
17474 
17475   /* If PARM uses template parameters, then we can't bail out here,
17476      even if ARG == PARM, since we won't record unifications for the
17477      template parameters.  We might need them if we're trying to
17478      figure out which of two things is more specialized.  */
17479   if (arg == parm && !uses_template_parms (parm))
17480     return unify_success (explain_p);
17481 
17482   /* Handle init lists early, so the rest of the function can assume
17483      we're dealing with a type. */
17484   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
17485     {
17486       tree elt, elttype;
17487       unsigned i;
17488       tree orig_parm = parm;
17489 
17490       /* Replace T with std::initializer_list<T> for deduction.  */
17491       if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
17492 	  && flag_deduce_init_list)
17493 	parm = listify (parm);
17494 
17495       if (!is_std_init_list (parm)
17496 	  && TREE_CODE (parm) != ARRAY_TYPE)
17497 	/* We can only deduce from an initializer list argument if the
17498 	   parameter is std::initializer_list or an array; otherwise this
17499 	   is a non-deduced context. */
17500 	return unify_success (explain_p);
17501 
17502       if (TREE_CODE (parm) == ARRAY_TYPE)
17503 	elttype = TREE_TYPE (parm);
17504       else
17505 	elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
17506 
17507       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
17508 	{
17509 	  int elt_strict = strict;
17510 
17511 	  if (elt == error_mark_node)
17512 	    return unify_invalid (explain_p);
17513 
17514 	  if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
17515 	    {
17516 	      tree type = TREE_TYPE (elt);
17517 	      /* It should only be possible to get here for a call.  */
17518 	      gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
17519 	      elt_strict |= maybe_adjust_types_for_deduction
17520 		(DEDUCE_CALL, &elttype, &type, elt);
17521 	      elt = type;
17522 	    }
17523 
17524 	  RECUR_AND_CHECK_FAILURE (tparms, targs, elttype, elt, elt_strict,
17525 				   explain_p);
17526 	}
17527 
17528       if (TREE_CODE (parm) == ARRAY_TYPE
17529 	  && deducible_array_bound (TYPE_DOMAIN (parm)))
17530 	{
17531 	  /* Also deduce from the length of the initializer list.  */
17532 	  tree max = size_int (CONSTRUCTOR_NELTS (arg));
17533 	  tree idx = compute_array_index_type (NULL_TREE, max, tf_none);
17534 	  if (idx == error_mark_node)
17535 	    return unify_invalid (explain_p);
17536 	  return unify_array_domain (tparms, targs, TYPE_DOMAIN (parm),
17537 				     idx, explain_p);
17538 	}
17539 
17540       /* If the std::initializer_list<T> deduction worked, replace the
17541 	 deduced A with std::initializer_list<A>.  */
17542       if (orig_parm != parm)
17543 	{
17544 	  idx = TEMPLATE_TYPE_IDX (orig_parm);
17545 	  targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
17546 	  targ = listify (targ);
17547 	  TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
17548 	}
17549       return unify_success (explain_p);
17550     }
17551 
17552   /* Immediately reject some pairs that won't unify because of
17553      cv-qualification mismatches.  */
17554   if (TREE_CODE (arg) == TREE_CODE (parm)
17555       && TYPE_P (arg)
17556       /* It is the elements of the array which hold the cv quals of an array
17557 	 type, and the elements might be template type parms. We'll check
17558 	 when we recurse.  */
17559       && TREE_CODE (arg) != ARRAY_TYPE
17560       /* We check the cv-qualifiers when unifying with template type
17561 	 parameters below.  We want to allow ARG `const T' to unify with
17562 	 PARM `T' for example, when computing which of two templates
17563 	 is more specialized, for example.  */
17564       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
17565       && !check_cv_quals_for_unify (strict_in, arg, parm))
17566     return unify_cv_qual_mismatch (explain_p, parm, arg);
17567 
17568   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
17569       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
17570     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
17571   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
17572   strict &= ~UNIFY_ALLOW_DERIVED;
17573   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
17574   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
17575 
17576   switch (TREE_CODE (parm))
17577     {
17578     case TYPENAME_TYPE:
17579     case SCOPE_REF:
17580     case UNBOUND_CLASS_TEMPLATE:
17581       /* In a type which contains a nested-name-specifier, template
17582 	 argument values cannot be deduced for template parameters used
17583 	 within the nested-name-specifier.  */
17584       return unify_success (explain_p);
17585 
17586     case TEMPLATE_TYPE_PARM:
17587     case TEMPLATE_TEMPLATE_PARM:
17588     case BOUND_TEMPLATE_TEMPLATE_PARM:
17589       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
17590       if (error_operand_p (tparm))
17591 	return unify_invalid (explain_p);
17592 
17593       if (TEMPLATE_TYPE_LEVEL (parm)
17594 	  != template_decl_level (tparm))
17595 	/* The PARM is not one we're trying to unify.  Just check
17596 	   to see if it matches ARG.  */
17597 	{
17598 	  if (TREE_CODE (arg) == TREE_CODE (parm)
17599 	      && (is_auto (parm) ? is_auto (arg)
17600 		  : same_type_p (parm, arg)))
17601 	    return unify_success (explain_p);
17602 	  else
17603 	    return unify_type_mismatch (explain_p, parm, arg);
17604 	}
17605       idx = TEMPLATE_TYPE_IDX (parm);
17606       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
17607       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
17608       if (error_operand_p (tparm))
17609 	return unify_invalid (explain_p);
17610 
17611       /* Check for mixed types and values.  */
17612       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
17613 	   && TREE_CODE (tparm) != TYPE_DECL)
17614 	  || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
17615 	      && TREE_CODE (tparm) != TEMPLATE_DECL))
17616 	gcc_unreachable ();
17617 
17618       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
17619 	{
17620 	  /* ARG must be constructed from a template class or a template
17621 	     template parameter.  */
17622 	  if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
17623 	      && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
17624 	    return unify_template_deduction_failure (explain_p, parm, arg);
17625 	  {
17626 	    tree parmvec = TYPE_TI_ARGS (parm);
17627 	    /* An alias template name is never deduced.  */
17628 	    if (TYPE_ALIAS_P (arg))
17629 	      arg = strip_typedefs (arg);
17630 	    tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
17631 	    tree full_argvec = add_to_template_args (targs, argvec);
17632 	    tree parm_parms
17633               = DECL_INNERMOST_TEMPLATE_PARMS
17634 	          (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
17635 	    int i, len;
17636             int parm_variadic_p = 0;
17637 
17638 	    /* The resolution to DR150 makes clear that default
17639 	       arguments for an N-argument may not be used to bind T
17640 	       to a template template parameter with fewer than N
17641 	       parameters.  It is not safe to permit the binding of
17642 	       default arguments as an extension, as that may change
17643 	       the meaning of a conforming program.  Consider:
17644 
17645 		  struct Dense { static const unsigned int dim = 1; };
17646 
17647 		  template <template <typename> class View,
17648 			    typename Block>
17649 		  void operator+(float, View<Block> const&);
17650 
17651 		  template <typename Block,
17652 			    unsigned int Dim = Block::dim>
17653 		  struct Lvalue_proxy { operator float() const; };
17654 
17655 		  void
17656 		  test_1d (void) {
17657 		    Lvalue_proxy<Dense> p;
17658 		    float b;
17659 		    b + p;
17660 		  }
17661 
17662 	      Here, if Lvalue_proxy is permitted to bind to View, then
17663 	      the global operator+ will be used; if they are not, the
17664 	      Lvalue_proxy will be converted to float.  */
17665 	    if (coerce_template_parms (parm_parms,
17666                                        full_argvec,
17667 				       TYPE_TI_TEMPLATE (parm),
17668 				       (explain_p
17669 					? tf_warning_or_error
17670 					: tf_none),
17671 				       /*require_all_args=*/true,
17672 				       /*use_default_args=*/false)
17673 		== error_mark_node)
17674 	      return 1;
17675 
17676 	    /* Deduce arguments T, i from TT<T> or TT<i>.
17677 	       We check each element of PARMVEC and ARGVEC individually
17678 	       rather than the whole TREE_VEC since they can have
17679 	       different number of elements.  */
17680 
17681             parmvec = expand_template_argument_pack (parmvec);
17682             argvec = expand_template_argument_pack (argvec);
17683 
17684             len = TREE_VEC_LENGTH (parmvec);
17685 
17686             /* Check if the parameters end in a pack, making them
17687                variadic.  */
17688             if (len > 0
17689                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
17690               parm_variadic_p = 1;
17691 
17692              for (i = 0; i < len - parm_variadic_p; ++i)
17693 	       /* If the template argument list of P contains a pack
17694 		  expansion that is not the last template argument, the
17695 		  entire template argument list is a non-deduced
17696 		  context.  */
17697 	       if (PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, i)))
17698 		 return unify_success (explain_p);
17699 
17700             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
17701               return unify_too_few_arguments (explain_p,
17702 					      TREE_VEC_LENGTH (argvec), len);
17703 
17704              for (i = 0; i < len - parm_variadic_p; ++i)
17705 	      {
17706 		RECUR_AND_CHECK_FAILURE (tparms, targs,
17707 					 TREE_VEC_ELT (parmvec, i),
17708 					 TREE_VEC_ELT (argvec, i),
17709 					 UNIFY_ALLOW_NONE, explain_p);
17710 	      }
17711 
17712 	    if (parm_variadic_p
17713 		&& unify_pack_expansion (tparms, targs,
17714 					 parmvec, argvec,
17715 					 DEDUCE_EXACT,
17716 					 /*subr=*/true, explain_p))
17717 	      return 1;
17718 	  }
17719 	  arg = TYPE_TI_TEMPLATE (arg);
17720 
17721 	  /* Fall through to deduce template name.  */
17722 	}
17723 
17724       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
17725 	  || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
17726 	{
17727 	  /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
17728 
17729 	  /* Simple cases: Value already set, does match or doesn't.  */
17730 	  if (targ != NULL_TREE && template_args_equal (targ, arg))
17731 	    return unify_success (explain_p);
17732 	  else if (targ)
17733 	    return unify_inconsistency (explain_p, parm, targ, arg);
17734 	}
17735       else
17736 	{
17737 	  /* If PARM is `const T' and ARG is only `int', we don't have
17738 	     a match unless we are allowing additional qualification.
17739 	     If ARG is `const int' and PARM is just `T' that's OK;
17740 	     that binds `const int' to `T'.  */
17741 	  if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
17742 					 arg, parm))
17743 	    return unify_cv_qual_mismatch (explain_p, parm, arg);
17744 
17745 	  /* Consider the case where ARG is `const volatile int' and
17746 	     PARM is `const T'.  Then, T should be `volatile int'.  */
17747 	  arg = cp_build_qualified_type_real
17748 	    (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
17749 	  if (arg == error_mark_node)
17750 	    return unify_invalid (explain_p);
17751 
17752 	  /* Simple cases: Value already set, does match or doesn't.  */
17753 	  if (targ != NULL_TREE && same_type_p (targ, arg))
17754 	    return unify_success (explain_p);
17755 	  else if (targ)
17756 	    return unify_inconsistency (explain_p, parm, targ, arg);
17757 
17758 	  /* Make sure that ARG is not a variable-sized array.  (Note
17759 	     that were talking about variable-sized arrays (like
17760 	     `int[n]'), rather than arrays of unknown size (like
17761 	     `int[]').)  We'll get very confused by such a type since
17762 	     the bound of the array is not constant, and therefore
17763 	     not mangleable.  Besides, such types are not allowed in
17764 	     ISO C++, so we can do as we please here.  We do allow
17765 	     them for 'auto' deduction, since that isn't ABI-exposed.  */
17766 	  if (!is_auto (parm) && variably_modified_type_p (arg, NULL_TREE))
17767 	    return unify_vla_arg (explain_p, arg);
17768 
17769 	  /* Strip typedefs as in convert_template_argument.  */
17770 	  arg = canonicalize_type_argument (arg, tf_none);
17771 	}
17772 
17773       /* If ARG is a parameter pack or an expansion, we cannot unify
17774 	 against it unless PARM is also a parameter pack.  */
17775       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
17776 	  && !template_parameter_pack_p (parm))
17777 	return unify_parameter_pack_mismatch (explain_p, parm, arg);
17778 
17779       /* If the argument deduction results is a METHOD_TYPE,
17780          then there is a problem.
17781          METHOD_TYPE doesn't map to any real C++ type the result of
17782 	 the deduction can not be of that type.  */
17783       if (TREE_CODE (arg) == METHOD_TYPE)
17784 	return unify_method_type_error (explain_p, arg);
17785 
17786       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
17787       return unify_success (explain_p);
17788 
17789     case TEMPLATE_PARM_INDEX:
17790       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
17791       if (error_operand_p (tparm))
17792 	return unify_invalid (explain_p);
17793 
17794       if (TEMPLATE_PARM_LEVEL (parm)
17795 	  != template_decl_level (tparm))
17796 	{
17797 	  /* The PARM is not one we're trying to unify.  Just check
17798 	     to see if it matches ARG.  */
17799 	  int result = !(TREE_CODE (arg) == TREE_CODE (parm)
17800 			 && cp_tree_equal (parm, arg));
17801 	  if (result)
17802 	    unify_expression_unequal (explain_p, parm, arg);
17803 	  return result;
17804 	}
17805 
17806       idx = TEMPLATE_PARM_IDX (parm);
17807       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
17808 
17809       if (targ)
17810 	{
17811 	  int x = !cp_tree_equal (targ, arg);
17812 	  if (x)
17813 	    unify_inconsistency (explain_p, parm, targ, arg);
17814 	  return x;
17815 	}
17816 
17817       /* [temp.deduct.type] If, in the declaration of a function template
17818 	 with a non-type template-parameter, the non-type
17819 	 template-parameter is used in an expression in the function
17820 	 parameter-list and, if the corresponding template-argument is
17821 	 deduced, the template-argument type shall match the type of the
17822 	 template-parameter exactly, except that a template-argument
17823 	 deduced from an array bound may be of any integral type.
17824 	 The non-type parameter might use already deduced type parameters.  */
17825       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
17826       if (!TREE_TYPE (arg))
17827 	/* Template-parameter dependent expression.  Just accept it for now.
17828 	   It will later be processed in convert_template_argument.  */
17829 	;
17830       else if (same_type_p (TREE_TYPE (arg), tparm))
17831 	/* OK */;
17832       else if ((strict & UNIFY_ALLOW_INTEGER)
17833 	       && CP_INTEGRAL_TYPE_P (tparm))
17834 	/* Convert the ARG to the type of PARM; the deduced non-type
17835 	   template argument must exactly match the types of the
17836 	   corresponding parameter.  */
17837 	arg = fold (build_nop (tparm, arg));
17838       else if (uses_template_parms (tparm))
17839 	/* We haven't deduced the type of this parameter yet.  Try again
17840 	   later.  */
17841 	return unify_success (explain_p);
17842       else
17843 	return unify_type_mismatch (explain_p, tparm, TREE_TYPE (arg));
17844 
17845       /* If ARG is a parameter pack or an expansion, we cannot unify
17846 	 against it unless PARM is also a parameter pack.  */
17847       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
17848 	  && !TEMPLATE_PARM_PARAMETER_PACK (parm))
17849 	return unify_parameter_pack_mismatch (explain_p, parm, arg);
17850 
17851       arg = strip_typedefs_expr (arg);
17852       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
17853       return unify_success (explain_p);
17854 
17855     case PTRMEM_CST:
17856      {
17857 	/* A pointer-to-member constant can be unified only with
17858 	 another constant.  */
17859       if (TREE_CODE (arg) != PTRMEM_CST)
17860 	return unify_ptrmem_cst_mismatch (explain_p, parm, arg);
17861 
17862       /* Just unify the class member. It would be useless (and possibly
17863 	 wrong, depending on the strict flags) to unify also
17864 	 PTRMEM_CST_CLASS, because we want to be sure that both parm and
17865 	 arg refer to the same variable, even if through different
17866 	 classes. For instance:
17867 
17868 	 struct A { int x; };
17869 	 struct B : A { };
17870 
17871 	 Unification of &A::x and &B::x must succeed.  */
17872       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
17873 		    PTRMEM_CST_MEMBER (arg), strict, explain_p);
17874      }
17875 
17876     case POINTER_TYPE:
17877       {
17878 	if (!TYPE_PTR_P (arg))
17879 	  return unify_type_mismatch (explain_p, parm, arg);
17880 
17881 	/* [temp.deduct.call]
17882 
17883 	   A can be another pointer or pointer to member type that can
17884 	   be converted to the deduced A via a qualification
17885 	   conversion (_conv.qual_).
17886 
17887 	   We pass down STRICT here rather than UNIFY_ALLOW_NONE.
17888 	   This will allow for additional cv-qualification of the
17889 	   pointed-to types if appropriate.  */
17890 
17891 	if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
17892 	  /* The derived-to-base conversion only persists through one
17893 	     level of pointers.  */
17894 	  strict |= (strict_in & UNIFY_ALLOW_DERIVED);
17895 
17896 	return unify (tparms, targs, TREE_TYPE (parm),
17897 		      TREE_TYPE (arg), strict, explain_p);
17898       }
17899 
17900     case REFERENCE_TYPE:
17901       if (TREE_CODE (arg) != REFERENCE_TYPE)
17902 	return unify_type_mismatch (explain_p, parm, arg);
17903       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
17904 		    strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
17905 
17906     case ARRAY_TYPE:
17907       if (TREE_CODE (arg) != ARRAY_TYPE)
17908 	return unify_type_mismatch (explain_p, parm, arg);
17909       if ((TYPE_DOMAIN (parm) == NULL_TREE)
17910 	  != (TYPE_DOMAIN (arg) == NULL_TREE))
17911 	return unify_type_mismatch (explain_p, parm, arg);
17912       RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
17913 			       strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
17914       if (TYPE_DOMAIN (parm) != NULL_TREE)
17915 	return unify_array_domain (tparms, targs, TYPE_DOMAIN (parm),
17916 				   TYPE_DOMAIN (arg), explain_p);
17917       return unify_success (explain_p);
17918 
17919     case REAL_TYPE:
17920     case COMPLEX_TYPE:
17921     case VECTOR_TYPE:
17922     case INTEGER_TYPE:
17923     case BOOLEAN_TYPE:
17924     case ENUMERAL_TYPE:
17925     case VOID_TYPE:
17926     case NULLPTR_TYPE:
17927       if (TREE_CODE (arg) != TREE_CODE (parm))
17928 	return unify_type_mismatch (explain_p, parm, arg);
17929 
17930       /* We have already checked cv-qualification at the top of the
17931 	 function.  */
17932       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
17933 	return unify_type_mismatch (explain_p, parm, arg);
17934 
17935       /* As far as unification is concerned, this wins.	 Later checks
17936 	 will invalidate it if necessary.  */
17937       return unify_success (explain_p);
17938 
17939       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
17940       /* Type INTEGER_CST can come from ordinary constant template args.  */
17941     case INTEGER_CST:
17942       while (TREE_CODE (arg) == NOP_EXPR)
17943 	arg = TREE_OPERAND (arg, 0);
17944 
17945       if (TREE_CODE (arg) != INTEGER_CST)
17946 	return unify_template_argument_mismatch (explain_p, parm, arg);
17947       return (tree_int_cst_equal (parm, arg)
17948 	      ? unify_success (explain_p)
17949 	      : unify_template_argument_mismatch (explain_p, parm, arg));
17950 
17951     case TREE_VEC:
17952       {
17953 	int i, len, argslen;
17954 	int parm_variadic_p = 0;
17955 
17956 	if (TREE_CODE (arg) != TREE_VEC)
17957 	  return unify_template_argument_mismatch (explain_p, parm, arg);
17958 
17959 	len = TREE_VEC_LENGTH (parm);
17960 	argslen = TREE_VEC_LENGTH (arg);
17961 
17962 	/* Check for pack expansions in the parameters.  */
17963 	for (i = 0; i < len; ++i)
17964 	  {
17965 	    if (PACK_EXPANSION_P (TREE_VEC_ELT (parm, i)))
17966 	      {
17967 		if (i == len - 1)
17968 		  /* We can unify against something with a trailing
17969 		     parameter pack.  */
17970 		  parm_variadic_p = 1;
17971 		else
17972 		  /* [temp.deduct.type]/9: If the template argument list of
17973 		     P contains a pack expansion that is not the last
17974 		     template argument, the entire template argument list
17975 		     is a non-deduced context.  */
17976 		  return unify_success (explain_p);
17977 	      }
17978 	  }
17979 
17980         /* If we don't have enough arguments to satisfy the parameters
17981            (not counting the pack expression at the end), or we have
17982            too many arguments for a parameter list that doesn't end in
17983            a pack expression, we can't unify.  */
17984 	if (parm_variadic_p
17985 	    ? argslen < len - parm_variadic_p
17986 	    : argslen != len)
17987 	  return unify_arity (explain_p, TREE_VEC_LENGTH (arg), len);
17988 
17989 	/* Unify all of the parameters that precede the (optional)
17990 	   pack expression.  */
17991 	for (i = 0; i < len - parm_variadic_p; ++i)
17992 	  {
17993 	    RECUR_AND_CHECK_FAILURE (tparms, targs,
17994 				     TREE_VEC_ELT (parm, i),
17995 				     TREE_VEC_ELT (arg, i),
17996 				     UNIFY_ALLOW_NONE, explain_p);
17997 	  }
17998 	if (parm_variadic_p)
17999 	  return unify_pack_expansion (tparms, targs, parm, arg,
18000 				       DEDUCE_EXACT,
18001 				       /*subr=*/true, explain_p);
18002 	return unify_success (explain_p);
18003       }
18004 
18005     case RECORD_TYPE:
18006     case UNION_TYPE:
18007       if (TREE_CODE (arg) != TREE_CODE (parm))
18008 	return unify_type_mismatch (explain_p, parm, arg);
18009 
18010       if (TYPE_PTRMEMFUNC_P (parm))
18011 	{
18012 	  if (!TYPE_PTRMEMFUNC_P (arg))
18013 	    return unify_type_mismatch (explain_p, parm, arg);
18014 
18015 	  return unify (tparms, targs,
18016 			TYPE_PTRMEMFUNC_FN_TYPE (parm),
18017 			TYPE_PTRMEMFUNC_FN_TYPE (arg),
18018 			strict, explain_p);
18019 	}
18020 
18021       if (CLASSTYPE_TEMPLATE_INFO (parm))
18022 	{
18023 	  tree t = NULL_TREE;
18024 
18025 	  if (strict_in & UNIFY_ALLOW_DERIVED)
18026 	    {
18027 	      /* First, we try to unify the PARM and ARG directly.  */
18028 	      t = try_class_unification (tparms, targs,
18029 					 parm, arg, explain_p);
18030 
18031 	      if (!t)
18032 		{
18033 		  /* Fallback to the special case allowed in
18034 		     [temp.deduct.call]:
18035 
18036 		       If P is a class, and P has the form
18037 		       template-id, then A can be a derived class of
18038 		       the deduced A.  Likewise, if P is a pointer to
18039 		       a class of the form template-id, A can be a
18040 		       pointer to a derived class pointed to by the
18041 		       deduced A.  */
18042 		  enum template_base_result r;
18043 		  r = get_template_base (tparms, targs, parm, arg,
18044 					 explain_p, &t);
18045 
18046 		  if (!t)
18047 		    return unify_no_common_base (explain_p, r, parm, arg);
18048 		}
18049 	    }
18050 	  else if (CLASSTYPE_TEMPLATE_INFO (arg)
18051 		   && (CLASSTYPE_TI_TEMPLATE (parm)
18052 		       == CLASSTYPE_TI_TEMPLATE (arg)))
18053 	    /* Perhaps PARM is something like S<U> and ARG is S<int>.
18054 	       Then, we should unify `int' and `U'.  */
18055 	    t = arg;
18056 	  else
18057 	    /* There's no chance of unification succeeding.  */
18058 	    return unify_type_mismatch (explain_p, parm, arg);
18059 
18060 	  return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
18061 			CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE, explain_p);
18062 	}
18063       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
18064 	return unify_type_mismatch (explain_p, parm, arg);
18065       return unify_success (explain_p);
18066 
18067     case METHOD_TYPE:
18068     case FUNCTION_TYPE:
18069       {
18070 	unsigned int nargs;
18071 	tree *args;
18072 	tree a;
18073 	unsigned int i;
18074 
18075 	if (TREE_CODE (arg) != TREE_CODE (parm))
18076 	  return unify_type_mismatch (explain_p, parm, arg);
18077 
18078 	/* CV qualifications for methods can never be deduced, they must
18079 	   match exactly.  We need to check them explicitly here,
18080 	   because type_unification_real treats them as any other
18081 	   cv-qualified parameter.  */
18082 	if (TREE_CODE (parm) == METHOD_TYPE
18083 	    && (!check_cv_quals_for_unify
18084 		(UNIFY_ALLOW_NONE,
18085 		 class_of_this_parm (arg),
18086 		 class_of_this_parm (parm))))
18087 	  return unify_cv_qual_mismatch (explain_p, parm, arg);
18088 
18089 	RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm),
18090 				 TREE_TYPE (arg), UNIFY_ALLOW_NONE, explain_p);
18091 
18092 	nargs = list_length (TYPE_ARG_TYPES (arg));
18093 	args = XALLOCAVEC (tree, nargs);
18094 	for (a = TYPE_ARG_TYPES (arg), i = 0;
18095 	     a != NULL_TREE && a != void_list_node;
18096 	     a = TREE_CHAIN (a), ++i)
18097 	  args[i] = TREE_VALUE (a);
18098 	nargs = i;
18099 
18100 	return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
18101 				      args, nargs, 1, DEDUCE_EXACT,
18102 				      LOOKUP_NORMAL, NULL, explain_p);
18103       }
18104 
18105     case OFFSET_TYPE:
18106       /* Unify a pointer to member with a pointer to member function, which
18107 	 deduces the type of the member as a function type. */
18108       if (TYPE_PTRMEMFUNC_P (arg))
18109 	{
18110 	  /* Check top-level cv qualifiers */
18111 	  if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
18112 	    return unify_cv_qual_mismatch (explain_p, parm, arg);
18113 
18114 	  RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
18115 				   TYPE_PTRMEMFUNC_OBJECT_TYPE (arg),
18116 				   UNIFY_ALLOW_NONE, explain_p);
18117 
18118 	  /* Determine the type of the function we are unifying against. */
18119 	  tree fntype = static_fn_type (arg);
18120 
18121 	  return unify (tparms, targs, TREE_TYPE (parm), fntype, strict, explain_p);
18122 	}
18123 
18124       if (TREE_CODE (arg) != OFFSET_TYPE)
18125 	return unify_type_mismatch (explain_p, parm, arg);
18126       RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
18127 			       TYPE_OFFSET_BASETYPE (arg),
18128 			       UNIFY_ALLOW_NONE, explain_p);
18129       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
18130 		    strict, explain_p);
18131 
18132     case CONST_DECL:
18133       if (DECL_TEMPLATE_PARM_P (parm))
18134 	return unify (tparms, targs, DECL_INITIAL (parm), arg, strict, explain_p);
18135       if (arg != integral_constant_value (parm))
18136 	return unify_template_argument_mismatch (explain_p, parm, arg);
18137       return unify_success (explain_p);
18138 
18139     case FIELD_DECL:
18140     case TEMPLATE_DECL:
18141       /* Matched cases are handled by the ARG == PARM test above.  */
18142       return unify_template_argument_mismatch (explain_p, parm, arg);
18143 
18144     case VAR_DECL:
18145       /* A non-type template parameter that is a variable should be a
18146 	 an integral constant, in which case, it whould have been
18147 	 folded into its (constant) value. So we should not be getting
18148 	 a variable here.  */
18149       gcc_unreachable ();
18150 
18151     case TYPE_ARGUMENT_PACK:
18152     case NONTYPE_ARGUMENT_PACK:
18153       return unify (tparms, targs, ARGUMENT_PACK_ARGS (parm),
18154 		    ARGUMENT_PACK_ARGS (arg), strict, explain_p);
18155 
18156     case TYPEOF_TYPE:
18157     case DECLTYPE_TYPE:
18158     case UNDERLYING_TYPE:
18159       /* Cannot deduce anything from TYPEOF_TYPE, DECLTYPE_TYPE,
18160 	 or UNDERLYING_TYPE nodes.  */
18161       return unify_success (explain_p);
18162 
18163     case ERROR_MARK:
18164       /* Unification fails if we hit an error node.  */
18165       return unify_invalid (explain_p);
18166 
18167     case INDIRECT_REF:
18168       if (REFERENCE_REF_P (parm))
18169 	return unify (tparms, targs, TREE_OPERAND (parm, 0), arg,
18170 		      strict, explain_p);
18171       /* FALLTHRU */
18172 
18173     default:
18174       /* An unresolved overload is a nondeduced context.  */
18175       if (is_overloaded_fn (parm) || type_unknown_p (parm))
18176 	return unify_success (explain_p);
18177       gcc_assert (EXPR_P (parm));
18178 
18179       /* We must be looking at an expression.  This can happen with
18180 	 something like:
18181 
18182 	   template <int I>
18183 	   void foo(S<I>, S<I + 2>);
18184 
18185 	 This is a "nondeduced context":
18186 
18187 	   [deduct.type]
18188 
18189 	   The nondeduced contexts are:
18190 
18191 	   --A type that is a template-id in which one or more of
18192 	     the template-arguments is an expression that references
18193 	     a template-parameter.
18194 
18195 	 In these cases, we assume deduction succeeded, but don't
18196 	 actually infer any unifications.  */
18197 
18198       if (!uses_template_parms (parm)
18199 	  && !template_args_equal (parm, arg))
18200 	return unify_expression_unequal (explain_p, parm, arg);
18201       else
18202 	return unify_success (explain_p);
18203     }
18204 }
18205 #undef RECUR_AND_CHECK_FAILURE
18206 
18207 /* Note that DECL can be defined in this translation unit, if
18208    required.  */
18209 
18210 static void
mark_definable(tree decl)18211 mark_definable (tree decl)
18212 {
18213   tree clone;
18214   DECL_NOT_REALLY_EXTERN (decl) = 1;
18215   FOR_EACH_CLONE (clone, decl)
18216     DECL_NOT_REALLY_EXTERN (clone) = 1;
18217 }
18218 
18219 /* Called if RESULT is explicitly instantiated, or is a member of an
18220    explicitly instantiated class.  */
18221 
18222 void
mark_decl_instantiated(tree result,int extern_p)18223 mark_decl_instantiated (tree result, int extern_p)
18224 {
18225   SET_DECL_EXPLICIT_INSTANTIATION (result);
18226 
18227   /* If this entity has already been written out, it's too late to
18228      make any modifications.  */
18229   if (TREE_ASM_WRITTEN (result))
18230     return;
18231 
18232   /* For anonymous namespace we don't need to do anything.  */
18233   if (decl_anon_ns_mem_p (result))
18234     {
18235       gcc_assert (!TREE_PUBLIC (result));
18236       return;
18237     }
18238 
18239   if (TREE_CODE (result) != FUNCTION_DECL)
18240     /* The TREE_PUBLIC flag for function declarations will have been
18241        set correctly by tsubst.  */
18242     TREE_PUBLIC (result) = 1;
18243 
18244   /* This might have been set by an earlier implicit instantiation.  */
18245   DECL_COMDAT (result) = 0;
18246 
18247   if (extern_p)
18248     DECL_NOT_REALLY_EXTERN (result) = 0;
18249   else
18250     {
18251       mark_definable (result);
18252       mark_needed (result);
18253       /* Always make artificials weak.  */
18254       if (DECL_ARTIFICIAL (result) && flag_weak)
18255 	comdat_linkage (result);
18256       /* For WIN32 we also want to put explicit instantiations in
18257 	 linkonce sections.  */
18258       else if (TREE_PUBLIC (result))
18259 	maybe_make_one_only (result);
18260     }
18261 
18262   /* If EXTERN_P, then this function will not be emitted -- unless
18263      followed by an explicit instantiation, at which point its linkage
18264      will be adjusted.  If !EXTERN_P, then this function will be
18265      emitted here.  In neither circumstance do we want
18266      import_export_decl to adjust the linkage.  */
18267   DECL_INTERFACE_KNOWN (result) = 1;
18268 }
18269 
18270 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
18271    important template arguments.  If any are missing, we check whether
18272    they're important by using error_mark_node for substituting into any
18273    args that were used for partial ordering (the ones between ARGS and END)
18274    and seeing if it bubbles up.  */
18275 
18276 static bool
check_undeduced_parms(tree targs,tree args,tree end)18277 check_undeduced_parms (tree targs, tree args, tree end)
18278 {
18279   bool found = false;
18280   int i;
18281   for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
18282     if (TREE_VEC_ELT (targs, i) == NULL_TREE)
18283       {
18284 	found = true;
18285 	TREE_VEC_ELT (targs, i) = error_mark_node;
18286       }
18287   if (found)
18288     {
18289       tree substed = tsubst_arg_types (args, targs, end, tf_none, NULL_TREE);
18290       if (substed == error_mark_node)
18291 	return true;
18292     }
18293   return false;
18294 }
18295 
18296 /* Given two function templates PAT1 and PAT2, return:
18297 
18298    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
18299    -1 if PAT2 is more specialized than PAT1.
18300    0 if neither is more specialized.
18301 
18302    LEN indicates the number of parameters we should consider
18303    (defaulted parameters should not be considered).
18304 
18305    The 1998 std underspecified function template partial ordering, and
18306    DR214 addresses the issue.  We take pairs of arguments, one from
18307    each of the templates, and deduce them against each other.  One of
18308    the templates will be more specialized if all the *other*
18309    template's arguments deduce against its arguments and at least one
18310    of its arguments *does* *not* deduce against the other template's
18311    corresponding argument.  Deduction is done as for class templates.
18312    The arguments used in deduction have reference and top level cv
18313    qualifiers removed.  Iff both arguments were originally reference
18314    types *and* deduction succeeds in both directions, an lvalue reference
18315    wins against an rvalue reference and otherwise the template
18316    with the more cv-qualified argument wins for that pairing (if
18317    neither is more cv-qualified, they both are equal).  Unlike regular
18318    deduction, after all the arguments have been deduced in this way,
18319    we do *not* verify the deduced template argument values can be
18320    substituted into non-deduced contexts.
18321 
18322    The logic can be a bit confusing here, because we look at deduce1 and
18323    targs1 to see if pat2 is at least as specialized, and vice versa; if we
18324    can find template arguments for pat1 to make arg1 look like arg2, that
18325    means that arg2 is at least as specialized as arg1.  */
18326 
18327 int
more_specialized_fn(tree pat1,tree pat2,int len)18328 more_specialized_fn (tree pat1, tree pat2, int len)
18329 {
18330   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
18331   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
18332   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
18333   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
18334   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
18335   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
18336   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
18337   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
18338   tree origs1, origs2;
18339   bool lose1 = false;
18340   bool lose2 = false;
18341 
18342   /* Remove the this parameter from non-static member functions.  If
18343      one is a non-static member function and the other is not a static
18344      member function, remove the first parameter from that function
18345      also.  This situation occurs for operator functions where we
18346      locate both a member function (with this pointer) and non-member
18347      operator (with explicit first operand).  */
18348   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
18349     {
18350       len--; /* LEN is the number of significant arguments for DECL1 */
18351       args1 = TREE_CHAIN (args1);
18352       if (!DECL_STATIC_FUNCTION_P (decl2))
18353 	args2 = TREE_CHAIN (args2);
18354     }
18355   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
18356     {
18357       args2 = TREE_CHAIN (args2);
18358       if (!DECL_STATIC_FUNCTION_P (decl1))
18359 	{
18360 	  len--;
18361 	  args1 = TREE_CHAIN (args1);
18362 	}
18363     }
18364 
18365   /* If only one is a conversion operator, they are unordered.  */
18366   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
18367     return 0;
18368 
18369   /* Consider the return type for a conversion function */
18370   if (DECL_CONV_FN_P (decl1))
18371     {
18372       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
18373       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
18374       len++;
18375     }
18376 
18377   processing_template_decl++;
18378 
18379   origs1 = args1;
18380   origs2 = args2;
18381 
18382   while (len--
18383 	 /* Stop when an ellipsis is seen.  */
18384 	 && args1 != NULL_TREE && args2 != NULL_TREE)
18385     {
18386       tree arg1 = TREE_VALUE (args1);
18387       tree arg2 = TREE_VALUE (args2);
18388       int deduce1, deduce2;
18389       int quals1 = -1;
18390       int quals2 = -1;
18391       int ref1 = 0;
18392       int ref2 = 0;
18393 
18394       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
18395           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
18396         {
18397           /* When both arguments are pack expansions, we need only
18398              unify the patterns themselves.  */
18399           arg1 = PACK_EXPANSION_PATTERN (arg1);
18400           arg2 = PACK_EXPANSION_PATTERN (arg2);
18401 
18402           /* This is the last comparison we need to do.  */
18403           len = 0;
18404         }
18405 
18406       if (TREE_CODE (arg1) == REFERENCE_TYPE)
18407 	{
18408 	  ref1 = TYPE_REF_IS_RVALUE (arg1) + 1;
18409 	  arg1 = TREE_TYPE (arg1);
18410 	  quals1 = cp_type_quals (arg1);
18411 	}
18412 
18413       if (TREE_CODE (arg2) == REFERENCE_TYPE)
18414 	{
18415 	  ref2 = TYPE_REF_IS_RVALUE (arg2) + 1;
18416 	  arg2 = TREE_TYPE (arg2);
18417 	  quals2 = cp_type_quals (arg2);
18418 	}
18419 
18420       arg1 = TYPE_MAIN_VARIANT (arg1);
18421       arg2 = TYPE_MAIN_VARIANT (arg2);
18422 
18423       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
18424         {
18425           int i, len2 = list_length (args2);
18426           tree parmvec = make_tree_vec (1);
18427           tree argvec = make_tree_vec (len2);
18428           tree ta = args2;
18429 
18430           /* Setup the parameter vector, which contains only ARG1.  */
18431           TREE_VEC_ELT (parmvec, 0) = arg1;
18432 
18433           /* Setup the argument vector, which contains the remaining
18434              arguments.  */
18435           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
18436             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
18437 
18438           deduce1 = (unify_pack_expansion (tparms1, targs1, parmvec,
18439 					   argvec, DEDUCE_EXACT,
18440 					   /*subr=*/true, /*explain_p=*/false)
18441 		     == 0);
18442 
18443           /* We cannot deduce in the other direction, because ARG1 is
18444              a pack expansion but ARG2 is not.  */
18445           deduce2 = 0;
18446         }
18447       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
18448         {
18449           int i, len1 = list_length (args1);
18450           tree parmvec = make_tree_vec (1);
18451           tree argvec = make_tree_vec (len1);
18452           tree ta = args1;
18453 
18454           /* Setup the parameter vector, which contains only ARG1.  */
18455           TREE_VEC_ELT (parmvec, 0) = arg2;
18456 
18457           /* Setup the argument vector, which contains the remaining
18458              arguments.  */
18459           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
18460             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
18461 
18462           deduce2 = (unify_pack_expansion (tparms2, targs2, parmvec,
18463 					   argvec, DEDUCE_EXACT,
18464 					   /*subr=*/true, /*explain_p=*/false)
18465 		     == 0);
18466 
18467           /* We cannot deduce in the other direction, because ARG2 is
18468              a pack expansion but ARG1 is not.*/
18469           deduce1 = 0;
18470         }
18471 
18472       else
18473         {
18474           /* The normal case, where neither argument is a pack
18475              expansion.  */
18476           deduce1 = (unify (tparms1, targs1, arg1, arg2,
18477 			    UNIFY_ALLOW_NONE, /*explain_p=*/false)
18478 		     == 0);
18479           deduce2 = (unify (tparms2, targs2, arg2, arg1,
18480 			    UNIFY_ALLOW_NONE, /*explain_p=*/false)
18481 		     == 0);
18482         }
18483 
18484       /* If we couldn't deduce arguments for tparms1 to make arg1 match
18485 	 arg2, then arg2 is not as specialized as arg1.  */
18486       if (!deduce1)
18487 	lose2 = true;
18488       if (!deduce2)
18489 	lose1 = true;
18490 
18491       /* "If, for a given type, deduction succeeds in both directions
18492 	 (i.e., the types are identical after the transformations above)
18493 	 and both P and A were reference types (before being replaced with
18494 	 the type referred to above):
18495 	 - if the type from the argument template was an lvalue reference and
18496 	 the type from the parameter template was not, the argument type is
18497 	 considered to be more specialized than the other; otherwise,
18498 	 - if the type from the argument template is more cv-qualified
18499 	 than the type from the parameter template (as described above),
18500 	 the argument type is considered to be more specialized than the other;
18501 	 otherwise,
18502 	 - neither type is more specialized than the other."  */
18503 
18504       if (deduce1 && deduce2)
18505 	{
18506 	  if (ref1 && ref2 && ref1 != ref2)
18507 	    {
18508 	      if (ref1 > ref2)
18509 		lose1 = true;
18510 	      else
18511 		lose2 = true;
18512 	    }
18513 	  else if (quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
18514 	    {
18515 	      if ((quals1 & quals2) == quals2)
18516 		lose2 = true;
18517 	      if ((quals1 & quals2) == quals1)
18518 		lose1 = true;
18519 	    }
18520 	}
18521 
18522       if (lose1 && lose2)
18523 	/* We've failed to deduce something in either direction.
18524 	   These must be unordered.  */
18525 	break;
18526 
18527       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
18528           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
18529         /* We have already processed all of the arguments in our
18530            handing of the pack expansion type.  */
18531         len = 0;
18532 
18533       args1 = TREE_CHAIN (args1);
18534       args2 = TREE_CHAIN (args2);
18535     }
18536 
18537   /* "In most cases, all template parameters must have values in order for
18538      deduction to succeed, but for partial ordering purposes a template
18539      parameter may remain without a value provided it is not used in the
18540      types being used for partial ordering."
18541 
18542      Thus, if we are missing any of the targs1 we need to substitute into
18543      origs1, then pat2 is not as specialized as pat1.  This can happen when
18544      there is a nondeduced context.  */
18545   if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
18546     lose2 = true;
18547   if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
18548     lose1 = true;
18549 
18550   processing_template_decl--;
18551 
18552   /* All things being equal, if the next argument is a pack expansion
18553      for one function but not for the other, prefer the
18554      non-variadic function.  FIXME this is bogus; see c++/41958.  */
18555   if (lose1 == lose2
18556       && args1 && TREE_VALUE (args1)
18557       && args2 && TREE_VALUE (args2))
18558     {
18559       lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
18560       lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
18561     }
18562 
18563   if (lose1 == lose2)
18564     return 0;
18565   else if (!lose1)
18566     return 1;
18567   else
18568     return -1;
18569 }
18570 
18571 /* Determine which of two partial specializations of TMPL is more
18572    specialized.
18573 
18574    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
18575    to the first partial specialization.  The TREE_VALUE is the
18576    innermost set of template parameters for the partial
18577    specialization.  PAT2 is similar, but for the second template.
18578 
18579    Return 1 if the first partial specialization is more specialized;
18580    -1 if the second is more specialized; 0 if neither is more
18581    specialized.
18582 
18583    See [temp.class.order] for information about determining which of
18584    two templates is more specialized.  */
18585 
18586 static int
more_specialized_class(tree tmpl,tree pat1,tree pat2)18587 more_specialized_class (tree tmpl, tree pat1, tree pat2)
18588 {
18589   tree targs;
18590   tree tmpl1, tmpl2;
18591   int winner = 0;
18592   bool any_deductions = false;
18593 
18594   tmpl1 = TREE_TYPE (pat1);
18595   tmpl2 = TREE_TYPE (pat2);
18596 
18597   /* Just like what happens for functions, if we are ordering between
18598      different class template specializations, we may encounter dependent
18599      types in the arguments, and we need our dependency check functions
18600      to behave correctly.  */
18601   ++processing_template_decl;
18602   targs = get_class_bindings (tmpl, TREE_VALUE (pat1),
18603 			      CLASSTYPE_TI_ARGS (tmpl1),
18604 			      CLASSTYPE_TI_ARGS (tmpl2));
18605   if (targs)
18606     {
18607       --winner;
18608       any_deductions = true;
18609     }
18610 
18611   targs = get_class_bindings (tmpl, TREE_VALUE (pat2),
18612 			      CLASSTYPE_TI_ARGS (tmpl2),
18613 			      CLASSTYPE_TI_ARGS (tmpl1));
18614   if (targs)
18615     {
18616       ++winner;
18617       any_deductions = true;
18618     }
18619   --processing_template_decl;
18620 
18621   /* In the case of a tie where at least one of the class templates
18622      has a parameter pack at the end, the template with the most
18623      non-packed parameters wins.  */
18624   if (winner == 0
18625       && any_deductions
18626       && (template_args_variadic_p (TREE_PURPOSE (pat1))
18627           || template_args_variadic_p (TREE_PURPOSE (pat2))))
18628     {
18629       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
18630       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
18631       int len1 = TREE_VEC_LENGTH (args1);
18632       int len2 = TREE_VEC_LENGTH (args2);
18633 
18634       /* We don't count the pack expansion at the end.  */
18635       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
18636         --len1;
18637       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
18638         --len2;
18639 
18640       if (len1 > len2)
18641         return 1;
18642       else if (len1 < len2)
18643         return -1;
18644     }
18645 
18646   return winner;
18647 }
18648 
18649 /* Return the template arguments that will produce the function signature
18650    DECL from the function template FN, with the explicit template
18651    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
18652    also match.  Return NULL_TREE if no satisfactory arguments could be
18653    found.  */
18654 
18655 static tree
get_bindings(tree fn,tree decl,tree explicit_args,bool check_rettype)18656 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
18657 {
18658   int ntparms = DECL_NTPARMS (fn);
18659   tree targs = make_tree_vec (ntparms);
18660   tree decl_type = TREE_TYPE (decl);
18661   tree decl_arg_types;
18662   tree *args;
18663   unsigned int nargs, ix;
18664   tree arg;
18665 
18666   gcc_assert (decl != DECL_TEMPLATE_RESULT (fn));
18667 
18668   /* Never do unification on the 'this' parameter.  */
18669   decl_arg_types = skip_artificial_parms_for (decl,
18670 					      TYPE_ARG_TYPES (decl_type));
18671 
18672   nargs = list_length (decl_arg_types);
18673   args = XALLOCAVEC (tree, nargs);
18674   for (arg = decl_arg_types, ix = 0;
18675        arg != NULL_TREE && arg != void_list_node;
18676        arg = TREE_CHAIN (arg), ++ix)
18677     args[ix] = TREE_VALUE (arg);
18678 
18679   if (fn_type_unification (fn, explicit_args, targs,
18680 			   args, ix,
18681 			   (check_rettype || DECL_CONV_FN_P (fn)
18682 			    ? TREE_TYPE (decl_type) : NULL_TREE),
18683 			   DEDUCE_EXACT, LOOKUP_NORMAL, /*explain_p=*/false,
18684 			   /*decltype*/false)
18685       == error_mark_node)
18686     return NULL_TREE;
18687 
18688   return targs;
18689 }
18690 
18691 /* Return the innermost template arguments that, when applied to a partial
18692    specialization of TMPL whose innermost template parameters are
18693    TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
18694    ARGS.
18695 
18696    For example, suppose we have:
18697 
18698      template <class T, class U> struct S {};
18699      template <class T> struct S<T*, int> {};
18700 
18701    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
18702    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
18703    int}.  The resulting vector will be {double}, indicating that `T'
18704    is bound to `double'.  */
18705 
18706 static tree
get_class_bindings(tree tmpl,tree tparms,tree spec_args,tree args)18707 get_class_bindings (tree tmpl, tree tparms, tree spec_args, tree args)
18708 {
18709   int i, ntparms = TREE_VEC_LENGTH (tparms);
18710   tree deduced_args;
18711   tree innermost_deduced_args;
18712 
18713   innermost_deduced_args = make_tree_vec (ntparms);
18714   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
18715     {
18716       deduced_args = copy_node (args);
18717       SET_TMPL_ARGS_LEVEL (deduced_args,
18718 			   TMPL_ARGS_DEPTH (deduced_args),
18719 			   innermost_deduced_args);
18720     }
18721   else
18722     deduced_args = innermost_deduced_args;
18723 
18724   if (unify (tparms, deduced_args,
18725 	     INNERMOST_TEMPLATE_ARGS (spec_args),
18726 	     INNERMOST_TEMPLATE_ARGS (args),
18727 	     UNIFY_ALLOW_NONE, /*explain_p=*/false))
18728     return NULL_TREE;
18729 
18730   for (i =  0; i < ntparms; ++i)
18731     if (! TREE_VEC_ELT (innermost_deduced_args, i))
18732       return NULL_TREE;
18733 
18734   /* Verify that nondeduced template arguments agree with the type
18735      obtained from argument deduction.
18736 
18737      For example:
18738 
18739        struct A { typedef int X; };
18740        template <class T, class U> struct C {};
18741        template <class T> struct C<T, typename T::X> {};
18742 
18743      Then with the instantiation `C<A, int>', we can deduce that
18744      `T' is `A' but unify () does not check whether `typename T::X'
18745      is `int'.  */
18746   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
18747   spec_args = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
18748 				     spec_args, tmpl,
18749 				     tf_none, false, false);
18750   if (spec_args == error_mark_node
18751       /* We only need to check the innermost arguments; the other
18752 	 arguments will always agree.  */
18753       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
18754 			      INNERMOST_TEMPLATE_ARGS (args)))
18755     return NULL_TREE;
18756 
18757   /* Now that we have bindings for all of the template arguments,
18758      ensure that the arguments deduced for the template template
18759      parameters have compatible template parameter lists.  See the use
18760      of template_template_parm_bindings_ok_p in fn_type_unification
18761      for more information.  */
18762   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
18763     return NULL_TREE;
18764 
18765   return deduced_args;
18766 }
18767 
18768 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
18769    Return the TREE_LIST node with the most specialized template, if
18770    any.  If there is no most specialized template, the error_mark_node
18771    is returned.
18772 
18773    Note that this function does not look at, or modify, the
18774    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
18775    returned is one of the elements of INSTANTIATIONS, callers may
18776    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
18777    and retrieve it from the value returned.  */
18778 
18779 tree
most_specialized_instantiation(tree templates)18780 most_specialized_instantiation (tree templates)
18781 {
18782   tree fn, champ;
18783 
18784   ++processing_template_decl;
18785 
18786   champ = templates;
18787   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
18788     {
18789       int fate = 0;
18790 
18791       if (get_bindings (TREE_VALUE (champ),
18792 			DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
18793 			NULL_TREE, /*check_ret=*/true))
18794 	fate--;
18795 
18796       if (get_bindings (TREE_VALUE (fn),
18797 			DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
18798 			NULL_TREE, /*check_ret=*/true))
18799 	fate++;
18800 
18801       if (fate == -1)
18802 	champ = fn;
18803       else if (!fate)
18804 	{
18805 	  /* Equally specialized, move to next function.  If there
18806 	     is no next function, nothing's most specialized.  */
18807 	  fn = TREE_CHAIN (fn);
18808 	  champ = fn;
18809 	  if (!fn)
18810 	    break;
18811 	}
18812     }
18813 
18814   if (champ)
18815     /* Now verify that champ is better than everything earlier in the
18816        instantiation list.  */
18817     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
18818       if (get_bindings (TREE_VALUE (champ),
18819 			DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
18820 			NULL_TREE, /*check_ret=*/true)
18821 	  || !get_bindings (TREE_VALUE (fn),
18822 			    DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
18823 			    NULL_TREE, /*check_ret=*/true))
18824 	{
18825 	  champ = NULL_TREE;
18826 	  break;
18827 	}
18828 
18829   processing_template_decl--;
18830 
18831   if (!champ)
18832     return error_mark_node;
18833 
18834   return champ;
18835 }
18836 
18837 /* If DECL is a specialization of some template, return the most
18838    general such template.  Otherwise, returns NULL_TREE.
18839 
18840    For example, given:
18841 
18842      template <class T> struct S { template <class U> void f(U); };
18843 
18844    if TMPL is `template <class U> void S<int>::f(U)' this will return
18845    the full template.  This function will not trace past partial
18846    specializations, however.  For example, given in addition:
18847 
18848      template <class T> struct S<T*> { template <class U> void f(U); };
18849 
18850    if TMPL is `template <class U> void S<int*>::f(U)' this will return
18851    `template <class T> template <class U> S<T*>::f(U)'.  */
18852 
18853 tree
most_general_template(tree decl)18854 most_general_template (tree decl)
18855 {
18856   if (TREE_CODE (decl) != TEMPLATE_DECL)
18857     {
18858       if (tree tinfo = get_template_info (decl))
18859 	decl = TI_TEMPLATE (tinfo);
18860       /* The TI_TEMPLATE can be an IDENTIFIER_NODE for a
18861 	 template friend, or a FIELD_DECL for a capture pack.  */
18862       if (TREE_CODE (decl) != TEMPLATE_DECL)
18863 	return NULL_TREE;
18864     }
18865 
18866   /* Look for more and more general templates.  */
18867   while (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
18868     {
18869       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
18870 	 (See cp-tree.h for details.)  */
18871       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
18872 	break;
18873 
18874       if (CLASS_TYPE_P (TREE_TYPE (decl))
18875 	  && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
18876 	break;
18877 
18878       /* Stop if we run into an explicitly specialized class template.  */
18879       if (!DECL_NAMESPACE_SCOPE_P (decl)
18880 	  && DECL_CONTEXT (decl)
18881 	  && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
18882 	break;
18883 
18884       decl = DECL_TI_TEMPLATE (decl);
18885     }
18886 
18887   return decl;
18888 }
18889 
18890 /* Return the most specialized of the class template partial
18891    specializations which can produce TYPE, a specialization of some class
18892    template.  The value returned is actually a TREE_LIST; the TREE_TYPE is
18893    a _TYPE node corresponding to the partial specialization, while the
18894    TREE_PURPOSE is the set of template arguments that must be
18895    substituted into the TREE_TYPE in order to generate TYPE.
18896 
18897    If the choice of partial specialization is ambiguous, a diagnostic
18898    is issued, and the error_mark_node is returned.  If there are no
18899    partial specializations matching TYPE, then NULL_TREE is
18900    returned, indicating that the primary template should be used.  */
18901 
18902 static tree
most_specialized_class(tree type,tsubst_flags_t complain)18903 most_specialized_class (tree type, tsubst_flags_t complain)
18904 {
18905   tree list = NULL_TREE;
18906   tree t;
18907   tree champ;
18908   int fate;
18909   bool ambiguous_p;
18910   tree outer_args = NULL_TREE;
18911 
18912   tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
18913   tree main_tmpl = most_general_template (tmpl);
18914   tree args = CLASSTYPE_TI_ARGS (type);
18915 
18916   /* For determining which partial specialization to use, only the
18917      innermost args are interesting.  */
18918   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
18919     {
18920       outer_args = strip_innermost_template_args (args, 1);
18921       args = INNERMOST_TEMPLATE_ARGS (args);
18922     }
18923 
18924   for (t = DECL_TEMPLATE_SPECIALIZATIONS (main_tmpl); t; t = TREE_CHAIN (t))
18925     {
18926       tree partial_spec_args;
18927       tree spec_args;
18928       tree spec_tmpl = TREE_VALUE (t);
18929       tree orig_parms = DECL_INNERMOST_TEMPLATE_PARMS (spec_tmpl);
18930 
18931       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
18932 
18933       ++processing_template_decl;
18934 
18935       if (outer_args)
18936 	{
18937 	  /* Discard the outer levels of args, and then substitute in the
18938 	     template args from the enclosing class.  */
18939 	  partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
18940 	  partial_spec_args = tsubst_template_args
18941 	    (partial_spec_args, outer_args, tf_none, NULL_TREE);
18942 
18943 	  /* And the same for the partial specialization TEMPLATE_DECL.  */
18944 	  spec_tmpl = tsubst (spec_tmpl, outer_args, tf_none, NULL_TREE);
18945 	}
18946 
18947       partial_spec_args =
18948 	  coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
18949 				 partial_spec_args,
18950 				 tmpl, tf_none,
18951 				 /*require_all_args=*/true,
18952 				 /*use_default_args=*/true);
18953 
18954       --processing_template_decl;
18955 
18956       if (partial_spec_args == error_mark_node)
18957 	return error_mark_node;
18958       if (spec_tmpl == error_mark_node)
18959 	return error_mark_node;
18960 
18961       tree parms = DECL_INNERMOST_TEMPLATE_PARMS (spec_tmpl);
18962       spec_args = get_class_bindings (tmpl, parms,
18963 				      partial_spec_args,
18964 				      args);
18965       if (spec_args)
18966 	{
18967 	  if (outer_args)
18968 	    spec_args = add_to_template_args (outer_args, spec_args);
18969 	  list = tree_cons (spec_args, orig_parms, list);
18970 	  TREE_TYPE (list) = TREE_TYPE (t);
18971 	}
18972     }
18973 
18974   if (! list)
18975     return NULL_TREE;
18976 
18977   ambiguous_p = false;
18978   t = list;
18979   champ = t;
18980   t = TREE_CHAIN (t);
18981   for (; t; t = TREE_CHAIN (t))
18982     {
18983       fate = more_specialized_class (tmpl, champ, t);
18984       if (fate == 1)
18985 	;
18986       else
18987 	{
18988 	  if (fate == 0)
18989 	    {
18990 	      t = TREE_CHAIN (t);
18991 	      if (! t)
18992 		{
18993 		  ambiguous_p = true;
18994 		  break;
18995 		}
18996 	    }
18997 	  champ = t;
18998 	}
18999     }
19000 
19001   if (!ambiguous_p)
19002     for (t = list; t && t != champ; t = TREE_CHAIN (t))
19003       {
19004 	fate = more_specialized_class (tmpl, champ, t);
19005 	if (fate != 1)
19006 	  {
19007 	    ambiguous_p = true;
19008 	    break;
19009 	  }
19010       }
19011 
19012   if (ambiguous_p)
19013     {
19014       const char *str;
19015       char *spaces = NULL;
19016       if (!(complain & tf_error))
19017 	return error_mark_node;
19018       error ("ambiguous class template instantiation for %q#T", type);
19019       str = ngettext ("candidate is:", "candidates are:", list_length (list));
19020       for (t = list; t; t = TREE_CHAIN (t))
19021         {
19022           error ("%s %+#T", spaces ? spaces : str, TREE_TYPE (t));
19023           spaces = spaces ? spaces : get_spaces (str);
19024         }
19025       free (spaces);
19026       return error_mark_node;
19027     }
19028 
19029   return champ;
19030 }
19031 
19032 /* Explicitly instantiate DECL.  */
19033 
19034 void
do_decl_instantiation(tree decl,tree storage)19035 do_decl_instantiation (tree decl, tree storage)
19036 {
19037   tree result = NULL_TREE;
19038   int extern_p = 0;
19039 
19040   if (!decl || decl == error_mark_node)
19041     /* An error occurred, for which grokdeclarator has already issued
19042        an appropriate message.  */
19043     return;
19044   else if (! DECL_LANG_SPECIFIC (decl))
19045     {
19046       error ("explicit instantiation of non-template %q#D", decl);
19047       return;
19048     }
19049   else if (VAR_P (decl))
19050     {
19051       /* There is an asymmetry here in the way VAR_DECLs and
19052 	 FUNCTION_DECLs are handled by grokdeclarator.  In the case of
19053 	 the latter, the DECL we get back will be marked as a
19054 	 template instantiation, and the appropriate
19055 	 DECL_TEMPLATE_INFO will be set up.  This does not happen for
19056 	 VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
19057 	 should handle VAR_DECLs as it currently handles
19058 	 FUNCTION_DECLs.  */
19059       if (!DECL_CLASS_SCOPE_P (decl))
19060 	{
19061 	  error ("%qD is not a static data member of a class template", decl);
19062 	  return;
19063 	}
19064       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
19065       if (!result || !VAR_P (result))
19066 	{
19067 	  error ("no matching template for %qD found", decl);
19068 	  return;
19069 	}
19070       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
19071 	{
19072 	  error ("type %qT for explicit instantiation %qD does not match "
19073 		 "declared type %qT", TREE_TYPE (result), decl,
19074 		 TREE_TYPE (decl));
19075 	  return;
19076 	}
19077     }
19078   else if (TREE_CODE (decl) != FUNCTION_DECL)
19079     {
19080       error ("explicit instantiation of %q#D", decl);
19081       return;
19082     }
19083   else
19084     result = decl;
19085 
19086   /* Check for various error cases.  Note that if the explicit
19087      instantiation is valid the RESULT will currently be marked as an
19088      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
19089      until we get here.  */
19090 
19091   if (DECL_TEMPLATE_SPECIALIZATION (result))
19092     {
19093       /* DR 259 [temp.spec].
19094 
19095 	 Both an explicit instantiation and a declaration of an explicit
19096 	 specialization shall not appear in a program unless the explicit
19097 	 instantiation follows a declaration of the explicit specialization.
19098 
19099 	 For a given set of template parameters, if an explicit
19100 	 instantiation of a template appears after a declaration of an
19101 	 explicit specialization for that template, the explicit
19102 	 instantiation has no effect.  */
19103       return;
19104     }
19105   else if (DECL_EXPLICIT_INSTANTIATION (result))
19106     {
19107       /* [temp.spec]
19108 
19109 	 No program shall explicitly instantiate any template more
19110 	 than once.
19111 
19112 	 We check DECL_NOT_REALLY_EXTERN so as not to complain when
19113 	 the first instantiation was `extern' and the second is not,
19114 	 and EXTERN_P for the opposite case.  */
19115       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
19116 	permerror (input_location, "duplicate explicit instantiation of %q#D", result);
19117       /* If an "extern" explicit instantiation follows an ordinary
19118 	 explicit instantiation, the template is instantiated.  */
19119       if (extern_p)
19120 	return;
19121     }
19122   else if (!DECL_IMPLICIT_INSTANTIATION (result))
19123     {
19124       error ("no matching template for %qD found", result);
19125       return;
19126     }
19127   else if (!DECL_TEMPLATE_INFO (result))
19128     {
19129       permerror (input_location, "explicit instantiation of non-template %q#D", result);
19130       return;
19131     }
19132 
19133   if (storage == NULL_TREE)
19134     ;
19135   else if (storage == ridpointers[(int) RID_EXTERN])
19136     {
19137       if (!in_system_header_at (input_location) && (cxx_dialect == cxx98))
19138 	pedwarn (input_location, OPT_Wpedantic,
19139 		 "ISO C++ 1998 forbids the use of %<extern%> on explicit "
19140 		 "instantiations");
19141       extern_p = 1;
19142     }
19143   else
19144     error ("storage class %qD applied to template instantiation", storage);
19145 
19146   check_explicit_instantiation_namespace (result);
19147   mark_decl_instantiated (result, extern_p);
19148   if (! extern_p)
19149     instantiate_decl (result, /*defer_ok=*/1,
19150 		      /*expl_inst_class_mem_p=*/false);
19151 }
19152 
19153 static void
mark_class_instantiated(tree t,int extern_p)19154 mark_class_instantiated (tree t, int extern_p)
19155 {
19156   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
19157   SET_CLASSTYPE_INTERFACE_KNOWN (t);
19158   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
19159   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
19160   if (! extern_p)
19161     {
19162       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
19163       rest_of_type_compilation (t, 1);
19164     }
19165 }
19166 
19167 /* Called from do_type_instantiation through binding_table_foreach to
19168    do recursive instantiation for the type bound in ENTRY.  */
19169 static void
bt_instantiate_type_proc(binding_entry entry,void * data)19170 bt_instantiate_type_proc (binding_entry entry, void *data)
19171 {
19172   tree storage = *(tree *) data;
19173 
19174   if (MAYBE_CLASS_TYPE_P (entry->type)
19175       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
19176     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
19177 }
19178 
19179 /* Called from do_type_instantiation to instantiate a member
19180    (a member function or a static member variable) of an
19181    explicitly instantiated class template.  */
19182 static void
instantiate_class_member(tree decl,int extern_p)19183 instantiate_class_member (tree decl, int extern_p)
19184 {
19185   mark_decl_instantiated (decl, extern_p);
19186   if (! extern_p)
19187     instantiate_decl (decl, /*defer_ok=*/1,
19188 		      /*expl_inst_class_mem_p=*/true);
19189 }
19190 
19191 /* Perform an explicit instantiation of template class T.  STORAGE, if
19192    non-null, is the RID for extern, inline or static.  COMPLAIN is
19193    nonzero if this is called from the parser, zero if called recursively,
19194    since the standard is unclear (as detailed below).  */
19195 
19196 void
do_type_instantiation(tree t,tree storage,tsubst_flags_t complain)19197 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
19198 {
19199   int extern_p = 0;
19200   int nomem_p = 0;
19201   int static_p = 0;
19202   int previous_instantiation_extern_p = 0;
19203 
19204   if (TREE_CODE (t) == TYPE_DECL)
19205     t = TREE_TYPE (t);
19206 
19207   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
19208     {
19209       tree tmpl =
19210 	(TYPE_TEMPLATE_INFO (t)) ? TYPE_TI_TEMPLATE (t) : NULL;
19211       if (tmpl)
19212 	error ("explicit instantiation of non-class template %qD", tmpl);
19213       else
19214 	error ("explicit instantiation of non-template type %qT", t);
19215       return;
19216     }
19217 
19218   complete_type (t);
19219 
19220   if (!COMPLETE_TYPE_P (t))
19221     {
19222       if (complain & tf_error)
19223 	error ("explicit instantiation of %q#T before definition of template",
19224 	       t);
19225       return;
19226     }
19227 
19228   if (storage != NULL_TREE)
19229     {
19230       if (!in_system_header_at (input_location))
19231 	{
19232 	  if (storage == ridpointers[(int) RID_EXTERN])
19233 	    {
19234 	      if (cxx_dialect == cxx98)
19235 		pedwarn (input_location, OPT_Wpedantic,
19236 			 "ISO C++ 1998 forbids the use of %<extern%> on "
19237 			 "explicit instantiations");
19238 	    }
19239 	  else
19240 	    pedwarn (input_location, OPT_Wpedantic,
19241 		     "ISO C++ forbids the use of %qE"
19242 		     " on explicit instantiations", storage);
19243 	}
19244 
19245       if (storage == ridpointers[(int) RID_INLINE])
19246 	nomem_p = 1;
19247       else if (storage == ridpointers[(int) RID_EXTERN])
19248 	extern_p = 1;
19249       else if (storage == ridpointers[(int) RID_STATIC])
19250 	static_p = 1;
19251       else
19252 	{
19253 	  error ("storage class %qD applied to template instantiation",
19254 		 storage);
19255 	  extern_p = 0;
19256 	}
19257     }
19258 
19259   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
19260     {
19261       /* DR 259 [temp.spec].
19262 
19263 	 Both an explicit instantiation and a declaration of an explicit
19264 	 specialization shall not appear in a program unless the explicit
19265 	 instantiation follows a declaration of the explicit specialization.
19266 
19267 	 For a given set of template parameters, if an explicit
19268 	 instantiation of a template appears after a declaration of an
19269 	 explicit specialization for that template, the explicit
19270 	 instantiation has no effect.  */
19271       return;
19272     }
19273   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
19274     {
19275       /* [temp.spec]
19276 
19277 	 No program shall explicitly instantiate any template more
19278 	 than once.
19279 
19280 	 If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
19281 	 instantiation was `extern'.  If EXTERN_P then the second is.
19282 	 These cases are OK.  */
19283       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
19284 
19285       if (!previous_instantiation_extern_p && !extern_p
19286 	  && (complain & tf_error))
19287 	permerror (input_location, "duplicate explicit instantiation of %q#T", t);
19288 
19289       /* If we've already instantiated the template, just return now.  */
19290       if (!CLASSTYPE_INTERFACE_ONLY (t))
19291 	return;
19292     }
19293 
19294   check_explicit_instantiation_namespace (TYPE_NAME (t));
19295   mark_class_instantiated (t, extern_p);
19296 
19297   if (nomem_p)
19298     return;
19299 
19300   {
19301     tree tmp;
19302 
19303     /* In contrast to implicit instantiation, where only the
19304        declarations, and not the definitions, of members are
19305        instantiated, we have here:
19306 
19307 	 [temp.explicit]
19308 
19309 	 The explicit instantiation of a class template specialization
19310 	 implies the instantiation of all of its members not
19311 	 previously explicitly specialized in the translation unit
19312 	 containing the explicit instantiation.
19313 
19314        Of course, we can't instantiate member template classes, since
19315        we don't have any arguments for them.  Note that the standard
19316        is unclear on whether the instantiation of the members are
19317        *explicit* instantiations or not.  However, the most natural
19318        interpretation is that it should be an explicit instantiation.  */
19319 
19320     if (! static_p)
19321       for (tmp = TYPE_METHODS (t); tmp; tmp = DECL_CHAIN (tmp))
19322 	if (TREE_CODE (tmp) == FUNCTION_DECL
19323 	    && DECL_TEMPLATE_INSTANTIATION (tmp))
19324 	  instantiate_class_member (tmp, extern_p);
19325 
19326     for (tmp = TYPE_FIELDS (t); tmp; tmp = DECL_CHAIN (tmp))
19327       if (VAR_P (tmp) && DECL_TEMPLATE_INSTANTIATION (tmp))
19328 	instantiate_class_member (tmp, extern_p);
19329 
19330     if (CLASSTYPE_NESTED_UTDS (t))
19331       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
19332 			     bt_instantiate_type_proc, &storage);
19333   }
19334 }
19335 
19336 /* Given a function DECL, which is a specialization of TMPL, modify
19337    DECL to be a re-instantiation of TMPL with the same template
19338    arguments.  TMPL should be the template into which tsubst'ing
19339    should occur for DECL, not the most general template.
19340 
19341    One reason for doing this is a scenario like this:
19342 
19343      template <class T>
19344      void f(const T&, int i);
19345 
19346      void g() { f(3, 7); }
19347 
19348      template <class T>
19349      void f(const T& t, const int i) { }
19350 
19351    Note that when the template is first instantiated, with
19352    instantiate_template, the resulting DECL will have no name for the
19353    first parameter, and the wrong type for the second.  So, when we go
19354    to instantiate the DECL, we regenerate it.  */
19355 
19356 static void
regenerate_decl_from_template(tree decl,tree tmpl)19357 regenerate_decl_from_template (tree decl, tree tmpl)
19358 {
19359   /* The arguments used to instantiate DECL, from the most general
19360      template.  */
19361   tree args;
19362   tree code_pattern;
19363 
19364   args = DECL_TI_ARGS (decl);
19365   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
19366 
19367   /* Make sure that we can see identifiers, and compute access
19368      correctly.  */
19369   push_access_scope (decl);
19370 
19371   if (TREE_CODE (decl) == FUNCTION_DECL)
19372     {
19373       tree decl_parm;
19374       tree pattern_parm;
19375       tree specs;
19376       int args_depth;
19377       int parms_depth;
19378 
19379       args_depth = TMPL_ARGS_DEPTH (args);
19380       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
19381       if (args_depth > parms_depth)
19382 	args = get_innermost_template_args (args, parms_depth);
19383 
19384       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
19385 					      args, tf_error, NULL_TREE,
19386 					      /*defer_ok*/false);
19387       if (specs && specs != error_mark_node)
19388 	TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
19389 						    specs);
19390 
19391       /* Merge parameter declarations.  */
19392       decl_parm = skip_artificial_parms_for (decl,
19393 					     DECL_ARGUMENTS (decl));
19394       pattern_parm
19395 	= skip_artificial_parms_for (code_pattern,
19396 				     DECL_ARGUMENTS (code_pattern));
19397       while (decl_parm && !DECL_PACK_P (pattern_parm))
19398 	{
19399 	  tree parm_type;
19400 	  tree attributes;
19401 
19402 	  if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
19403 	    DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
19404 	  parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
19405 			      NULL_TREE);
19406 	  parm_type = type_decays_to (parm_type);
19407 	  if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
19408 	    TREE_TYPE (decl_parm) = parm_type;
19409 	  attributes = DECL_ATTRIBUTES (pattern_parm);
19410 	  if (DECL_ATTRIBUTES (decl_parm) != attributes)
19411 	    {
19412 	      DECL_ATTRIBUTES (decl_parm) = attributes;
19413 	      cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
19414 	    }
19415 	  decl_parm = DECL_CHAIN (decl_parm);
19416 	  pattern_parm = DECL_CHAIN (pattern_parm);
19417 	}
19418       /* Merge any parameters that match with the function parameter
19419          pack.  */
19420       if (pattern_parm && DECL_PACK_P (pattern_parm))
19421         {
19422           int i, len;
19423           tree expanded_types;
19424           /* Expand the TYPE_PACK_EXPANSION that provides the types for
19425              the parameters in this function parameter pack.  */
19426           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm),
19427                                                  args, tf_error, NULL_TREE);
19428           len = TREE_VEC_LENGTH (expanded_types);
19429           for (i = 0; i < len; i++)
19430             {
19431               tree parm_type;
19432               tree attributes;
19433 
19434               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
19435                 /* Rename the parameter to include the index.  */
19436                 DECL_NAME (decl_parm) =
19437                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
19438               parm_type = TREE_VEC_ELT (expanded_types, i);
19439               parm_type = type_decays_to (parm_type);
19440               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
19441                 TREE_TYPE (decl_parm) = parm_type;
19442               attributes = DECL_ATTRIBUTES (pattern_parm);
19443               if (DECL_ATTRIBUTES (decl_parm) != attributes)
19444                 {
19445                   DECL_ATTRIBUTES (decl_parm) = attributes;
19446                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
19447                 }
19448               decl_parm = DECL_CHAIN (decl_parm);
19449             }
19450         }
19451       /* Merge additional specifiers from the CODE_PATTERN.  */
19452       if (DECL_DECLARED_INLINE_P (code_pattern)
19453 	  && !DECL_DECLARED_INLINE_P (decl))
19454 	DECL_DECLARED_INLINE_P (decl) = 1;
19455     }
19456   else if (VAR_P (decl))
19457     {
19458       DECL_INITIAL (decl) =
19459 	tsubst_expr (DECL_INITIAL (code_pattern), args,
19460 		     tf_error, DECL_TI_TEMPLATE (decl),
19461 		     /*integral_constant_expression_p=*/false);
19462       if (VAR_HAD_UNKNOWN_BOUND (decl))
19463 	TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
19464 				   tf_error, DECL_TI_TEMPLATE (decl));
19465     }
19466   else
19467     gcc_unreachable ();
19468 
19469   pop_access_scope (decl);
19470 }
19471 
19472 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
19473    substituted to get DECL.  */
19474 
19475 tree
template_for_substitution(tree decl)19476 template_for_substitution (tree decl)
19477 {
19478   tree tmpl = DECL_TI_TEMPLATE (decl);
19479 
19480   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
19481      for the instantiation.  This is not always the most general
19482      template.  Consider, for example:
19483 
19484 	template <class T>
19485 	struct S { template <class U> void f();
19486 		   template <> void f<int>(); };
19487 
19488      and an instantiation of S<double>::f<int>.  We want TD to be the
19489      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
19490   while (/* An instantiation cannot have a definition, so we need a
19491 	    more general template.  */
19492 	 DECL_TEMPLATE_INSTANTIATION (tmpl)
19493 	   /* We must also deal with friend templates.  Given:
19494 
19495 		template <class T> struct S {
19496 		  template <class U> friend void f() {};
19497 		};
19498 
19499 	      S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
19500 	      so far as the language is concerned, but that's still
19501 	      where we get the pattern for the instantiation from.  On
19502 	      other hand, if the definition comes outside the class, say:
19503 
19504 		template <class T> struct S {
19505 		  template <class U> friend void f();
19506 		};
19507 		template <class U> friend void f() {}
19508 
19509 	      we don't need to look any further.  That's what the check for
19510 	      DECL_INITIAL is for.  */
19511 	  || (TREE_CODE (decl) == FUNCTION_DECL
19512 	      && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
19513 	      && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
19514     {
19515       /* The present template, TD, should not be a definition.  If it
19516 	 were a definition, we should be using it!  Note that we
19517 	 cannot restructure the loop to just keep going until we find
19518 	 a template with a definition, since that might go too far if
19519 	 a specialization was declared, but not defined.  */
19520       gcc_assert (!VAR_P (decl)
19521 		  || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
19522 
19523       /* Fetch the more general template.  */
19524       tmpl = DECL_TI_TEMPLATE (tmpl);
19525     }
19526 
19527   return tmpl;
19528 }
19529 
19530 /* Returns true if we need to instantiate this template instance even if we
19531    know we aren't going to emit it..  */
19532 
19533 bool
always_instantiate_p(tree decl)19534 always_instantiate_p (tree decl)
19535 {
19536   /* We always instantiate inline functions so that we can inline them.  An
19537      explicit instantiation declaration prohibits implicit instantiation of
19538      non-inline functions.  With high levels of optimization, we would
19539      normally inline non-inline functions -- but we're not allowed to do
19540      that for "extern template" functions.  Therefore, we check
19541      DECL_DECLARED_INLINE_P, rather than possibly_inlined_p.  */
19542   return ((TREE_CODE (decl) == FUNCTION_DECL
19543 	   && (DECL_DECLARED_INLINE_P (decl)
19544 	       || type_uses_auto (TREE_TYPE (TREE_TYPE (decl)))))
19545 	  /* And we need to instantiate static data members so that
19546 	     their initializers are available in integral constant
19547 	     expressions.  */
19548 	  || (VAR_P (decl)
19549 	      && decl_maybe_constant_var_p (decl)));
19550 }
19551 
19552 /* If FN has a noexcept-specifier that hasn't been instantiated yet,
19553    instantiate it now, modifying TREE_TYPE (fn).  */
19554 
19555 void
maybe_instantiate_noexcept(tree fn)19556 maybe_instantiate_noexcept (tree fn)
19557 {
19558   tree fntype, spec, noex, clone;
19559 
19560   /* Don't instantiate a noexcept-specification from template context.  */
19561   if (processing_template_decl)
19562     return;
19563 
19564   if (DECL_CLONED_FUNCTION_P (fn))
19565     fn = DECL_CLONED_FUNCTION (fn);
19566   fntype = TREE_TYPE (fn);
19567   spec = TYPE_RAISES_EXCEPTIONS (fntype);
19568 
19569   if (!DEFERRED_NOEXCEPT_SPEC_P (spec))
19570     return;
19571 
19572   noex = TREE_PURPOSE (spec);
19573 
19574   if (TREE_CODE (noex) == DEFERRED_NOEXCEPT)
19575     {
19576       if (push_tinst_level (fn))
19577 	{
19578 	  push_access_scope (fn);
19579 	  push_deferring_access_checks (dk_no_deferred);
19580 	  input_location = DECL_SOURCE_LOCATION (fn);
19581 	  noex = tsubst_copy_and_build (DEFERRED_NOEXCEPT_PATTERN (noex),
19582 					DEFERRED_NOEXCEPT_ARGS (noex),
19583 					tf_warning_or_error, fn,
19584 					/*function_p=*/false,
19585 					/*integral_constant_expression_p=*/true);
19586 	  pop_deferring_access_checks ();
19587 	  pop_access_scope (fn);
19588 	  pop_tinst_level ();
19589 	  spec = build_noexcept_spec (noex, tf_warning_or_error);
19590 	  if (spec == error_mark_node)
19591 	    spec = noexcept_false_spec;
19592 	}
19593       else
19594 	spec = noexcept_false_spec;
19595     }
19596   else
19597     {
19598       /* This is an implicitly declared function, so NOEX is a list of
19599 	 other functions to evaluate and merge.  */
19600       tree elt;
19601       spec = noexcept_true_spec;
19602       for (elt = noex; elt; elt = OVL_NEXT (elt))
19603 	{
19604 	  tree fn = OVL_CURRENT (elt);
19605 	  tree subspec;
19606 	  maybe_instantiate_noexcept (fn);
19607 	  subspec = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn));
19608 	  spec = merge_exception_specifiers (spec, subspec, NULL_TREE);
19609 	}
19610     }
19611 
19612   TREE_TYPE (fn) = build_exception_variant (fntype, spec);
19613 
19614   FOR_EACH_CLONE (clone, fn)
19615     {
19616       if (TREE_TYPE (clone) == fntype)
19617 	TREE_TYPE (clone) = TREE_TYPE (fn);
19618       else
19619 	TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone), spec);
19620     }
19621 }
19622 
19623 /* Produce the definition of D, a _DECL generated from a template.  If
19624    DEFER_OK is nonzero, then we don't have to actually do the
19625    instantiation now; we just have to do it sometime.  Normally it is
19626    an error if this is an explicit instantiation but D is undefined.
19627    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
19628    explicitly instantiated class template.  */
19629 
19630 tree
instantiate_decl(tree d,int defer_ok,bool expl_inst_class_mem_p)19631 instantiate_decl (tree d, int defer_ok,
19632 		  bool expl_inst_class_mem_p)
19633 {
19634   tree tmpl = DECL_TI_TEMPLATE (d);
19635   tree gen_args;
19636   tree args;
19637   tree td;
19638   tree code_pattern;
19639   tree spec;
19640   tree gen_tmpl;
19641   bool pattern_defined;
19642   location_t saved_loc = input_location;
19643   int saved_unevaluated_operand = cp_unevaluated_operand;
19644   int saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
19645   bool external_p;
19646   tree fn_context;
19647   bool nested;
19648 
19649   /* This function should only be used to instantiate templates for
19650      functions and static member variables.  */
19651   gcc_assert (VAR_OR_FUNCTION_DECL_P (d));
19652 
19653   /* Variables are never deferred; if instantiation is required, they
19654      are instantiated right away.  That allows for better code in the
19655      case that an expression refers to the value of the variable --
19656      if the variable has a constant value the referring expression can
19657      take advantage of that fact.  */
19658   if (VAR_P (d)
19659       || DECL_DECLARED_CONSTEXPR_P (d))
19660     defer_ok = 0;
19661 
19662   /* Don't instantiate cloned functions.  Instead, instantiate the
19663      functions they cloned.  */
19664   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
19665     d = DECL_CLONED_FUNCTION (d);
19666 
19667   if (DECL_TEMPLATE_INSTANTIATED (d)
19668       || (TREE_CODE (d) == FUNCTION_DECL
19669 	  && DECL_DEFAULTED_FN (d) && DECL_INITIAL (d))
19670       || DECL_TEMPLATE_SPECIALIZATION (d))
19671     /* D has already been instantiated or explicitly specialized, so
19672        there's nothing for us to do here.
19673 
19674        It might seem reasonable to check whether or not D is an explicit
19675        instantiation, and, if so, stop here.  But when an explicit
19676        instantiation is deferred until the end of the compilation,
19677        DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
19678        the instantiation.  */
19679     return d;
19680 
19681   /* Check to see whether we know that this template will be
19682      instantiated in some other file, as with "extern template"
19683      extension.  */
19684   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
19685 
19686   /* In general, we do not instantiate such templates.  */
19687   if (external_p && !always_instantiate_p (d))
19688     return d;
19689 
19690   gen_tmpl = most_general_template (tmpl);
19691   gen_args = DECL_TI_ARGS (d);
19692 
19693   if (tmpl != gen_tmpl)
19694     /* We should already have the extra args.  */
19695     gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
19696 		== TMPL_ARGS_DEPTH (gen_args));
19697   /* And what's in the hash table should match D.  */
19698   gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
19699 	      || spec == NULL_TREE);
19700 
19701   /* This needs to happen before any tsubsting.  */
19702   if (! push_tinst_level (d))
19703     return d;
19704 
19705   timevar_push (TV_TEMPLATE_INST);
19706 
19707   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
19708      for the instantiation.  */
19709   td = template_for_substitution (d);
19710   code_pattern = DECL_TEMPLATE_RESULT (td);
19711 
19712   /* We should never be trying to instantiate a member of a class
19713      template or partial specialization.  */
19714   gcc_assert (d != code_pattern);
19715 
19716   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
19717       || DECL_TEMPLATE_SPECIALIZATION (td))
19718     /* In the case of a friend template whose definition is provided
19719        outside the class, we may have too many arguments.  Drop the
19720        ones we don't need.  The same is true for specializations.  */
19721     args = get_innermost_template_args
19722       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
19723   else
19724     args = gen_args;
19725 
19726   if (TREE_CODE (d) == FUNCTION_DECL)
19727     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE
19728 		       || DECL_DEFAULTED_OUTSIDE_CLASS_P (code_pattern));
19729   else
19730     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
19731 
19732   /* We may be in the middle of deferred access check.  Disable it now.  */
19733   push_deferring_access_checks (dk_no_deferred);
19734 
19735   /* Unless an explicit instantiation directive has already determined
19736      the linkage of D, remember that a definition is available for
19737      this entity.  */
19738   if (pattern_defined
19739       && !DECL_INTERFACE_KNOWN (d)
19740       && !DECL_NOT_REALLY_EXTERN (d))
19741     mark_definable (d);
19742 
19743   DECL_SOURCE_LOCATION (td) = DECL_SOURCE_LOCATION (code_pattern);
19744   DECL_SOURCE_LOCATION (d) = DECL_SOURCE_LOCATION (code_pattern);
19745   input_location = DECL_SOURCE_LOCATION (d);
19746 
19747   /* If D is a member of an explicitly instantiated class template,
19748      and no definition is available, treat it like an implicit
19749      instantiation.  */
19750   if (!pattern_defined && expl_inst_class_mem_p
19751       && DECL_EXPLICIT_INSTANTIATION (d))
19752     {
19753       /* Leave linkage flags alone on instantiations with anonymous
19754 	 visibility.  */
19755       if (TREE_PUBLIC (d))
19756 	{
19757 	  DECL_NOT_REALLY_EXTERN (d) = 0;
19758 	  DECL_INTERFACE_KNOWN (d) = 0;
19759 	}
19760       SET_DECL_IMPLICIT_INSTANTIATION (d);
19761     }
19762 
19763   if (TREE_CODE (d) == FUNCTION_DECL)
19764     maybe_instantiate_noexcept (d);
19765 
19766   /* Defer all other templates, unless we have been explicitly
19767      forbidden from doing so.  */
19768   if (/* If there is no definition, we cannot instantiate the
19769 	 template.  */
19770       ! pattern_defined
19771       /* If it's OK to postpone instantiation, do so.  */
19772       || defer_ok
19773       /* If this is a static data member that will be defined
19774 	 elsewhere, we don't want to instantiate the entire data
19775 	 member, but we do want to instantiate the initializer so that
19776 	 we can substitute that elsewhere.  */
19777       || (external_p && VAR_P (d)))
19778     {
19779       /* The definition of the static data member is now required so
19780 	 we must substitute the initializer.  */
19781       if (VAR_P (d)
19782 	  && !DECL_INITIAL (d)
19783 	  && DECL_INITIAL (code_pattern))
19784 	{
19785 	  tree ns;
19786 	  tree init;
19787 	  bool const_init = false;
19788 
19789 	  ns = decl_namespace_context (d);
19790 	  push_nested_namespace (ns);
19791 	  push_nested_class (DECL_CONTEXT (d));
19792 	  init = tsubst_expr (DECL_INITIAL (code_pattern),
19793 			      args,
19794 			      tf_warning_or_error, NULL_TREE,
19795 			      /*integral_constant_expression_p=*/false);
19796 	  /* Make sure the initializer is still constant, in case of
19797 	     circular dependency (template/instantiate6.C). */
19798 	  const_init
19799 	    = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
19800 	  cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
19801 			  /*asmspec_tree=*/NULL_TREE,
19802 			  LOOKUP_ONLYCONVERTING);
19803 	  pop_nested_class ();
19804 	  pop_nested_namespace (ns);
19805 	}
19806 
19807       /* We restore the source position here because it's used by
19808 	 add_pending_template.  */
19809       input_location = saved_loc;
19810 
19811       if (at_eof && !pattern_defined
19812 	  && DECL_EXPLICIT_INSTANTIATION (d)
19813 	  && DECL_NOT_REALLY_EXTERN (d))
19814 	/* [temp.explicit]
19815 
19816 	   The definition of a non-exported function template, a
19817 	   non-exported member function template, or a non-exported
19818 	   member function or static data member of a class template
19819 	   shall be present in every translation unit in which it is
19820 	   explicitly instantiated.  */
19821 	permerror (input_location,  "explicit instantiation of %qD "
19822 		   "but no definition available", d);
19823 
19824       /* If we're in unevaluated context, we just wanted to get the
19825 	 constant value; this isn't an odr use, so don't queue
19826 	 a full instantiation.  */
19827       if (cp_unevaluated_operand != 0)
19828 	goto out;
19829       /* ??? Historically, we have instantiated inline functions, even
19830 	 when marked as "extern template".  */
19831       if (!(external_p && VAR_P (d)))
19832 	add_pending_template (d);
19833       goto out;
19834     }
19835   /* Tell the repository that D is available in this translation unit
19836      -- and see if it is supposed to be instantiated here.  */
19837   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
19838     {
19839       /* In a PCH file, despite the fact that the repository hasn't
19840 	 requested instantiation in the PCH it is still possible that
19841 	 an instantiation will be required in a file that includes the
19842 	 PCH.  */
19843       if (pch_file)
19844 	add_pending_template (d);
19845       /* Instantiate inline functions so that the inliner can do its
19846 	 job, even though we'll not be emitting a copy of this
19847 	 function.  */
19848       if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
19849 	goto out;
19850     }
19851 
19852   fn_context = decl_function_context (d);
19853   nested = (current_function_decl != NULL_TREE);
19854   if (!fn_context)
19855     push_to_top_level ();
19856   else
19857     {
19858       if (nested)
19859 	push_function_context ();
19860       cp_unevaluated_operand = 0;
19861       c_inhibit_evaluation_warnings = 0;
19862     }
19863 
19864   /* Mark D as instantiated so that recursive calls to
19865      instantiate_decl do not try to instantiate it again.  */
19866   DECL_TEMPLATE_INSTANTIATED (d) = 1;
19867 
19868   /* Regenerate the declaration in case the template has been modified
19869      by a subsequent redeclaration.  */
19870   regenerate_decl_from_template (d, td);
19871 
19872   /* We already set the file and line above.  Reset them now in case
19873      they changed as a result of calling regenerate_decl_from_template.  */
19874   input_location = DECL_SOURCE_LOCATION (d);
19875 
19876   if (VAR_P (d))
19877     {
19878       tree init;
19879       bool const_init = false;
19880 
19881       /* Clear out DECL_RTL; whatever was there before may not be right
19882 	 since we've reset the type of the declaration.  */
19883       SET_DECL_RTL (d, NULL);
19884       DECL_IN_AGGR_P (d) = 0;
19885 
19886       /* The initializer is placed in DECL_INITIAL by
19887 	 regenerate_decl_from_template so we don't need to
19888 	 push/pop_access_scope again here.  Pull it out so that
19889 	 cp_finish_decl can process it.  */
19890       init = DECL_INITIAL (d);
19891       DECL_INITIAL (d) = NULL_TREE;
19892       DECL_INITIALIZED_P (d) = 0;
19893 
19894       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
19895 	 initializer.  That function will defer actual emission until
19896 	 we have a chance to determine linkage.  */
19897       DECL_EXTERNAL (d) = 0;
19898 
19899       /* Enter the scope of D so that access-checking works correctly.  */
19900       push_nested_class (DECL_CONTEXT (d));
19901       const_init = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
19902       cp_finish_decl (d, init, const_init, NULL_TREE, 0);
19903       pop_nested_class ();
19904     }
19905   else if (TREE_CODE (d) == FUNCTION_DECL && DECL_DEFAULTED_FN (code_pattern))
19906     synthesize_method (d);
19907   else if (TREE_CODE (d) == FUNCTION_DECL)
19908     {
19909       struct pointer_map_t *saved_local_specializations;
19910       tree subst_decl;
19911       tree tmpl_parm;
19912       tree spec_parm;
19913       tree block = NULL_TREE;
19914 
19915       /* Save away the current list, in case we are instantiating one
19916 	 template from within the body of another.  */
19917       saved_local_specializations = local_specializations;
19918 
19919       /* Set up the list of local specializations.  */
19920       local_specializations = pointer_map_create ();
19921 
19922       /* Set up context.  */
19923       if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern)
19924 	  && TREE_CODE (DECL_CONTEXT (code_pattern)) == FUNCTION_DECL)
19925 	block = push_stmt_list ();
19926       else
19927 	start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
19928 
19929       /* Some typedefs referenced from within the template code need to be
19930 	 access checked at template instantiation time, i.e now. These
19931 	 types were added to the template at parsing time. Let's get those
19932 	 and perform the access checks then.  */
19933       perform_typedefs_access_check (DECL_TEMPLATE_RESULT (gen_tmpl),
19934 				     gen_args);
19935 
19936       /* Create substitution entries for the parameters.  */
19937       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
19938       tmpl_parm = DECL_ARGUMENTS (subst_decl);
19939       spec_parm = DECL_ARGUMENTS (d);
19940       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
19941 	{
19942 	  register_local_specialization (spec_parm, tmpl_parm);
19943 	  spec_parm = skip_artificial_parms_for (d, spec_parm);
19944 	  tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
19945 	}
19946       for (; tmpl_parm; tmpl_parm = DECL_CHAIN (tmpl_parm))
19947 	{
19948 	  if (!DECL_PACK_P (tmpl_parm))
19949 	    {
19950 	      register_local_specialization (spec_parm, tmpl_parm);
19951 	      spec_parm = DECL_CHAIN (spec_parm);
19952 	    }
19953 	  else
19954 	    {
19955 	      /* Register the (value) argument pack as a specialization of
19956 		 TMPL_PARM, then move on.  */
19957 	      tree argpack = extract_fnparm_pack (tmpl_parm, &spec_parm);
19958 	      register_local_specialization (argpack, tmpl_parm);
19959 	    }
19960 	}
19961       gcc_assert (!spec_parm);
19962 
19963       /* Substitute into the body of the function.  */
19964       if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern))
19965 	tsubst_omp_udr (DECL_SAVED_TREE (code_pattern), args,
19966 			tf_warning_or_error, tmpl);
19967       else
19968 	{
19969 	  tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
19970 		       tf_warning_or_error, tmpl,
19971 		       /*integral_constant_expression_p=*/false);
19972 
19973 	  /* Set the current input_location to the end of the function
19974 	     so that finish_function knows where we are.  */
19975 	  input_location
19976 	    = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
19977 
19978 	  /* Remember if we saw an infinite loop in the template.  */
19979 	  current_function_infinite_loop
19980 	    = DECL_STRUCT_FUNCTION (code_pattern)->language->infinite_loop;
19981 	}
19982 
19983       /* We don't need the local specializations any more.  */
19984       pointer_map_destroy (local_specializations);
19985       local_specializations = saved_local_specializations;
19986 
19987       /* Finish the function.  */
19988       if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern)
19989 	  && TREE_CODE (DECL_CONTEXT (code_pattern)) == FUNCTION_DECL)
19990 	DECL_SAVED_TREE (d) = pop_stmt_list (block);
19991       else
19992 	{
19993 	  d = finish_function (0);
19994 	  expand_or_defer_fn (d);
19995 	}
19996 
19997       if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern))
19998 	cp_check_omp_declare_reduction (d);
19999     }
20000 
20001   /* We're not deferring instantiation any more.  */
20002   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
20003 
20004   if (!fn_context)
20005     pop_from_top_level ();
20006   else if (nested)
20007     pop_function_context ();
20008 
20009 out:
20010   input_location = saved_loc;
20011   cp_unevaluated_operand = saved_unevaluated_operand;
20012   c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
20013   pop_deferring_access_checks ();
20014   pop_tinst_level ();
20015 
20016   timevar_pop (TV_TEMPLATE_INST);
20017 
20018   return d;
20019 }
20020 
20021 /* Run through the list of templates that we wish we could
20022    instantiate, and instantiate any we can.  RETRIES is the
20023    number of times we retry pending template instantiation.  */
20024 
20025 void
instantiate_pending_templates(int retries)20026 instantiate_pending_templates (int retries)
20027 {
20028   int reconsider;
20029   location_t saved_loc = input_location;
20030 
20031   /* Instantiating templates may trigger vtable generation.  This in turn
20032      may require further template instantiations.  We place a limit here
20033      to avoid infinite loop.  */
20034   if (pending_templates && retries >= max_tinst_depth)
20035     {
20036       tree decl = pending_templates->tinst->decl;
20037 
20038       error ("template instantiation depth exceeds maximum of %d"
20039 	     " instantiating %q+D, possibly from virtual table generation"
20040 	     " (use -ftemplate-depth= to increase the maximum)",
20041 	     max_tinst_depth, decl);
20042       if (TREE_CODE (decl) == FUNCTION_DECL)
20043 	/* Pretend that we defined it.  */
20044 	DECL_INITIAL (decl) = error_mark_node;
20045       return;
20046     }
20047 
20048   do
20049     {
20050       struct pending_template **t = &pending_templates;
20051       struct pending_template *last = NULL;
20052       reconsider = 0;
20053       while (*t)
20054 	{
20055 	  tree instantiation = reopen_tinst_level ((*t)->tinst);
20056 	  bool complete = false;
20057 
20058 	  if (TYPE_P (instantiation))
20059 	    {
20060 	      tree fn;
20061 
20062 	      if (!COMPLETE_TYPE_P (instantiation))
20063 		{
20064 		  instantiate_class_template (instantiation);
20065 		  if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
20066 		    for (fn = TYPE_METHODS (instantiation);
20067 			 fn;
20068 			 fn = TREE_CHAIN (fn))
20069 		      if (! DECL_ARTIFICIAL (fn))
20070 			instantiate_decl (fn,
20071 					  /*defer_ok=*/0,
20072 					  /*expl_inst_class_mem_p=*/false);
20073 		  if (COMPLETE_TYPE_P (instantiation))
20074 		    reconsider = 1;
20075 		}
20076 
20077 	      complete = COMPLETE_TYPE_P (instantiation);
20078 	    }
20079 	  else
20080 	    {
20081 	      if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
20082 		  && !DECL_TEMPLATE_INSTANTIATED (instantiation))
20083 		{
20084 		  instantiation
20085 		    = instantiate_decl (instantiation,
20086 					/*defer_ok=*/0,
20087 					/*expl_inst_class_mem_p=*/false);
20088 		  if (DECL_TEMPLATE_INSTANTIATED (instantiation))
20089 		    reconsider = 1;
20090 		}
20091 
20092 	      complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
20093 			  || DECL_TEMPLATE_INSTANTIATED (instantiation));
20094 	    }
20095 
20096 	  if (complete)
20097 	    /* If INSTANTIATION has been instantiated, then we don't
20098 	       need to consider it again in the future.  */
20099 	    *t = (*t)->next;
20100 	  else
20101 	    {
20102 	      last = *t;
20103 	      t = &(*t)->next;
20104 	    }
20105 	  tinst_depth = 0;
20106 	  current_tinst_level = NULL;
20107 	}
20108       last_pending_template = last;
20109     }
20110   while (reconsider);
20111 
20112   input_location = saved_loc;
20113 }
20114 
20115 /* Substitute ARGVEC into T, which is a list of initializers for
20116    either base class or a non-static data member.  The TREE_PURPOSEs
20117    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
20118    instantiate_decl.  */
20119 
20120 static tree
tsubst_initializer_list(tree t,tree argvec)20121 tsubst_initializer_list (tree t, tree argvec)
20122 {
20123   tree inits = NULL_TREE;
20124 
20125   for (; t; t = TREE_CHAIN (t))
20126     {
20127       tree decl;
20128       tree init;
20129       tree expanded_bases = NULL_TREE;
20130       tree expanded_arguments = NULL_TREE;
20131       int i, len = 1;
20132 
20133       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
20134         {
20135           tree expr;
20136           tree arg;
20137 
20138           /* Expand the base class expansion type into separate base
20139              classes.  */
20140           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
20141                                                  tf_warning_or_error,
20142                                                  NULL_TREE);
20143           if (expanded_bases == error_mark_node)
20144             continue;
20145 
20146           /* We'll be building separate TREE_LISTs of arguments for
20147              each base.  */
20148           len = TREE_VEC_LENGTH (expanded_bases);
20149           expanded_arguments = make_tree_vec (len);
20150           for (i = 0; i < len; i++)
20151             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
20152 
20153           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
20154              expand each argument in the TREE_VALUE of t.  */
20155           expr = make_node (EXPR_PACK_EXPANSION);
20156 	  PACK_EXPANSION_LOCAL_P (expr) = true;
20157           PACK_EXPANSION_PARAMETER_PACKS (expr) =
20158             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
20159 
20160 	  if (TREE_VALUE (t) == void_type_node)
20161 	    /* VOID_TYPE_NODE is used to indicate
20162 	       value-initialization.  */
20163 	    {
20164 	      for (i = 0; i < len; i++)
20165 		TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
20166 	    }
20167 	  else
20168 	    {
20169 	      /* Substitute parameter packs into each argument in the
20170 		 TREE_LIST.  */
20171 	      in_base_initializer = 1;
20172 	      for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
20173 		{
20174 		  tree expanded_exprs;
20175 
20176 		  /* Expand the argument.  */
20177 		  SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
20178 		  expanded_exprs
20179 		    = tsubst_pack_expansion (expr, argvec,
20180 					     tf_warning_or_error,
20181 					     NULL_TREE);
20182 		  if (expanded_exprs == error_mark_node)
20183 		    continue;
20184 
20185 		  /* Prepend each of the expanded expressions to the
20186 		     corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
20187 		  for (i = 0; i < len; i++)
20188 		    {
20189 		      TREE_VEC_ELT (expanded_arguments, i) =
20190 			tree_cons (NULL_TREE,
20191 				   TREE_VEC_ELT (expanded_exprs, i),
20192 				   TREE_VEC_ELT (expanded_arguments, i));
20193 		    }
20194 		}
20195 	      in_base_initializer = 0;
20196 
20197 	      /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
20198 		 since we built them backwards.  */
20199 	      for (i = 0; i < len; i++)
20200 		{
20201 		  TREE_VEC_ELT (expanded_arguments, i) =
20202 		    nreverse (TREE_VEC_ELT (expanded_arguments, i));
20203 		}
20204 	    }
20205         }
20206 
20207       for (i = 0; i < len; ++i)
20208         {
20209           if (expanded_bases)
20210             {
20211               decl = TREE_VEC_ELT (expanded_bases, i);
20212               decl = expand_member_init (decl);
20213               init = TREE_VEC_ELT (expanded_arguments, i);
20214             }
20215           else
20216             {
20217 	      tree tmp;
20218               decl = tsubst_copy (TREE_PURPOSE (t), argvec,
20219                                   tf_warning_or_error, NULL_TREE);
20220 
20221               decl = expand_member_init (decl);
20222               if (decl && !DECL_P (decl))
20223                 in_base_initializer = 1;
20224 
20225 	      init = TREE_VALUE (t);
20226 	      tmp = init;
20227 	      if (init != void_type_node)
20228 		init = tsubst_expr (init, argvec,
20229 				    tf_warning_or_error, NULL_TREE,
20230 				    /*integral_constant_expression_p=*/false);
20231 	      if (init == NULL_TREE && tmp != NULL_TREE)
20232 		/* If we had an initializer but it instantiated to nothing,
20233 		   value-initialize the object.  This will only occur when
20234 		   the initializer was a pack expansion where the parameter
20235 		   packs used in that expansion were of length zero.  */
20236 		init = void_type_node;
20237               in_base_initializer = 0;
20238             }
20239 
20240           if (decl)
20241             {
20242               init = build_tree_list (decl, init);
20243               TREE_CHAIN (init) = inits;
20244               inits = init;
20245             }
20246         }
20247     }
20248   return inits;
20249 }
20250 
20251 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
20252 
20253 static void
set_current_access_from_decl(tree decl)20254 set_current_access_from_decl (tree decl)
20255 {
20256   if (TREE_PRIVATE (decl))
20257     current_access_specifier = access_private_node;
20258   else if (TREE_PROTECTED (decl))
20259     current_access_specifier = access_protected_node;
20260   else
20261     current_access_specifier = access_public_node;
20262 }
20263 
20264 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
20265    is the instantiation (which should have been created with
20266    start_enum) and ARGS are the template arguments to use.  */
20267 
20268 static void
tsubst_enum(tree tag,tree newtag,tree args)20269 tsubst_enum (tree tag, tree newtag, tree args)
20270 {
20271   tree e;
20272 
20273   if (SCOPED_ENUM_P (newtag))
20274     begin_scope (sk_scoped_enum, newtag);
20275 
20276   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
20277     {
20278       tree value;
20279       tree decl;
20280 
20281       decl = TREE_VALUE (e);
20282       /* Note that in a template enum, the TREE_VALUE is the
20283 	 CONST_DECL, not the corresponding INTEGER_CST.  */
20284       value = tsubst_expr (DECL_INITIAL (decl),
20285 			   args, tf_warning_or_error, NULL_TREE,
20286 			   /*integral_constant_expression_p=*/true);
20287 
20288       /* Give this enumeration constant the correct access.  */
20289       set_current_access_from_decl (decl);
20290 
20291       /* Actually build the enumerator itself.  */
20292       build_enumerator
20293 	(DECL_NAME (decl), value, newtag, DECL_SOURCE_LOCATION (decl));
20294     }
20295 
20296   if (SCOPED_ENUM_P (newtag))
20297     finish_scope ();
20298 
20299   finish_enum_value_list (newtag);
20300   finish_enum (newtag);
20301 
20302   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
20303     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
20304 }
20305 
20306 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
20307    its type -- but without substituting the innermost set of template
20308    arguments.  So, innermost set of template parameters will appear in
20309    the type.  */
20310 
20311 tree
get_mostly_instantiated_function_type(tree decl)20312 get_mostly_instantiated_function_type (tree decl)
20313 {
20314   tree fn_type;
20315   tree tmpl;
20316   tree targs;
20317   tree tparms;
20318   int parm_depth;
20319 
20320   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
20321   targs = DECL_TI_ARGS (decl);
20322   tparms = DECL_TEMPLATE_PARMS (tmpl);
20323   parm_depth = TMPL_PARMS_DEPTH (tparms);
20324 
20325   /* There should be as many levels of arguments as there are levels
20326      of parameters.  */
20327   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
20328 
20329   fn_type = TREE_TYPE (tmpl);
20330 
20331   if (parm_depth == 1)
20332     /* No substitution is necessary.  */
20333     ;
20334   else
20335     {
20336       int i;
20337       tree partial_args;
20338 
20339       /* Replace the innermost level of the TARGS with NULL_TREEs to
20340 	 let tsubst know not to substitute for those parameters.  */
20341       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
20342       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
20343 	SET_TMPL_ARGS_LEVEL (partial_args, i,
20344 			     TMPL_ARGS_LEVEL (targs, i));
20345       SET_TMPL_ARGS_LEVEL (partial_args,
20346 			   TMPL_ARGS_DEPTH (targs),
20347 			   make_tree_vec (DECL_NTPARMS (tmpl)));
20348 
20349       /* Make sure that we can see identifiers, and compute access
20350 	 correctly.  */
20351       push_access_scope (decl);
20352 
20353       ++processing_template_decl;
20354       /* Now, do the (partial) substitution to figure out the
20355 	 appropriate function type.  */
20356       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
20357       --processing_template_decl;
20358 
20359       /* Substitute into the template parameters to obtain the real
20360 	 innermost set of parameters.  This step is important if the
20361 	 innermost set of template parameters contains value
20362 	 parameters whose types depend on outer template parameters.  */
20363       TREE_VEC_LENGTH (partial_args)--;
20364       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
20365 
20366       pop_access_scope (decl);
20367     }
20368 
20369   return fn_type;
20370 }
20371 
20372 /* Return truthvalue if we're processing a template different from
20373    the last one involved in diagnostics.  */
20374 int
problematic_instantiation_changed(void)20375 problematic_instantiation_changed (void)
20376 {
20377   return current_tinst_level != last_error_tinst_level;
20378 }
20379 
20380 /* Remember current template involved in diagnostics.  */
20381 void
record_last_problematic_instantiation(void)20382 record_last_problematic_instantiation (void)
20383 {
20384   last_error_tinst_level = current_tinst_level;
20385 }
20386 
20387 struct tinst_level *
current_instantiation(void)20388 current_instantiation (void)
20389 {
20390   return current_tinst_level;
20391 }
20392 
20393 /* [temp.param] Check that template non-type parm TYPE is of an allowable
20394    type. Return zero for ok, nonzero for disallowed. Issue error and
20395    warning messages under control of COMPLAIN.  */
20396 
20397 static int
invalid_nontype_parm_type_p(tree type,tsubst_flags_t complain)20398 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
20399 {
20400   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
20401     return 0;
20402   else if (POINTER_TYPE_P (type))
20403     return 0;
20404   else if (TYPE_PTRMEM_P (type))
20405     return 0;
20406   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
20407     return 0;
20408   else if (TREE_CODE (type) == TYPENAME_TYPE)
20409     return 0;
20410   else if (TREE_CODE (type) == DECLTYPE_TYPE)
20411     return 0;
20412   else if (TREE_CODE (type) == NULLPTR_TYPE)
20413     return 0;
20414 
20415   if (complain & tf_error)
20416     {
20417       if (type == error_mark_node)
20418 	inform (input_location, "invalid template non-type parameter");
20419       else
20420 	error ("%q#T is not a valid type for a template non-type parameter",
20421 	       type);
20422     }
20423   return 1;
20424 }
20425 
20426 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
20427    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
20428 
20429 static bool
dependent_type_p_r(tree type)20430 dependent_type_p_r (tree type)
20431 {
20432   tree scope;
20433 
20434   /* [temp.dep.type]
20435 
20436      A type is dependent if it is:
20437 
20438      -- a template parameter. Template template parameters are types
20439 	for us (since TYPE_P holds true for them) so we handle
20440 	them here.  */
20441   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
20442       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
20443     return true;
20444   /* -- a qualified-id with a nested-name-specifier which contains a
20445 	class-name that names a dependent type or whose unqualified-id
20446 	names a dependent type.  */
20447   if (TREE_CODE (type) == TYPENAME_TYPE)
20448     return true;
20449   /* -- a cv-qualified type where the cv-unqualified type is
20450 	dependent.  */
20451   type = TYPE_MAIN_VARIANT (type);
20452   /* -- a compound type constructed from any dependent type.  */
20453   if (TYPE_PTRMEM_P (type))
20454     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
20455 	    || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
20456 					   (type)));
20457   else if (TYPE_PTR_P (type)
20458 	   || TREE_CODE (type) == REFERENCE_TYPE)
20459     return dependent_type_p (TREE_TYPE (type));
20460   else if (TREE_CODE (type) == FUNCTION_TYPE
20461 	   || TREE_CODE (type) == METHOD_TYPE)
20462     {
20463       tree arg_type;
20464 
20465       if (dependent_type_p (TREE_TYPE (type)))
20466 	return true;
20467       for (arg_type = TYPE_ARG_TYPES (type);
20468 	   arg_type;
20469 	   arg_type = TREE_CHAIN (arg_type))
20470 	if (dependent_type_p (TREE_VALUE (arg_type)))
20471 	  return true;
20472       return false;
20473     }
20474   /* -- an array type constructed from any dependent type or whose
20475 	size is specified by a constant expression that is
20476 	value-dependent.
20477 
20478         We checked for type- and value-dependence of the bounds in
20479         compute_array_index_type, so TYPE_DEPENDENT_P is already set.  */
20480   if (TREE_CODE (type) == ARRAY_TYPE)
20481     {
20482       if (TYPE_DOMAIN (type)
20483 	  && dependent_type_p (TYPE_DOMAIN (type)))
20484 	return true;
20485       return dependent_type_p (TREE_TYPE (type));
20486     }
20487 
20488   /* -- a template-id in which either the template name is a template
20489      parameter ...  */
20490   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
20491     return true;
20492   /* ... or any of the template arguments is a dependent type or
20493 	an expression that is type-dependent or value-dependent.  */
20494   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
20495 	   && (any_dependent_template_arguments_p
20496 	       (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
20497     return true;
20498 
20499   /* All TYPEOF_TYPEs, DECLTYPE_TYPEs, and UNDERLYING_TYPEs are
20500      dependent; if the argument of the `typeof' expression is not
20501      type-dependent, then it should already been have resolved.  */
20502   if (TREE_CODE (type) == TYPEOF_TYPE
20503       || TREE_CODE (type) == DECLTYPE_TYPE
20504       || TREE_CODE (type) == UNDERLYING_TYPE)
20505     return true;
20506 
20507   /* A template argument pack is dependent if any of its packed
20508      arguments are.  */
20509   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
20510     {
20511       tree args = ARGUMENT_PACK_ARGS (type);
20512       int i, len = TREE_VEC_LENGTH (args);
20513       for (i = 0; i < len; ++i)
20514         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
20515           return true;
20516     }
20517 
20518   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
20519      be template parameters.  */
20520   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
20521     return true;
20522 
20523   /* The standard does not specifically mention types that are local
20524      to template functions or local classes, but they should be
20525      considered dependent too.  For example:
20526 
20527        template <int I> void f() {
20528 	 enum E { a = I };
20529 	 S<sizeof (E)> s;
20530        }
20531 
20532      The size of `E' cannot be known until the value of `I' has been
20533      determined.  Therefore, `E' must be considered dependent.  */
20534   scope = TYPE_CONTEXT (type);
20535   if (scope && TYPE_P (scope))
20536     return dependent_type_p (scope);
20537   /* Don't use type_dependent_expression_p here, as it can lead
20538      to infinite recursion trying to determine whether a lambda
20539      nested in a lambda is dependent (c++/47687).  */
20540   else if (scope && TREE_CODE (scope) == FUNCTION_DECL
20541 	   && DECL_LANG_SPECIFIC (scope)
20542 	   && DECL_TEMPLATE_INFO (scope)
20543 	   && (any_dependent_template_arguments_p
20544 	       (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (scope)))))
20545     return true;
20546 
20547   /* Other types are non-dependent.  */
20548   return false;
20549 }
20550 
20551 /* Returns TRUE if TYPE is dependent, in the sense of
20552    [temp.dep.type].  Note that a NULL type is considered dependent.  */
20553 
20554 bool
dependent_type_p(tree type)20555 dependent_type_p (tree type)
20556 {
20557   /* If there are no template parameters in scope, then there can't be
20558      any dependent types.  */
20559   if (!processing_template_decl)
20560     {
20561       /* If we are not processing a template, then nobody should be
20562 	 providing us with a dependent type.  */
20563       gcc_assert (type);
20564       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
20565       return false;
20566     }
20567 
20568   /* If the type is NULL, we have not computed a type for the entity
20569      in question; in that case, the type is dependent.  */
20570   if (!type)
20571     return true;
20572 
20573   /* Erroneous types can be considered non-dependent.  */
20574   if (type == error_mark_node)
20575     return false;
20576 
20577   /* If we have not already computed the appropriate value for TYPE,
20578      do so now.  */
20579   if (!TYPE_DEPENDENT_P_VALID (type))
20580     {
20581       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
20582       TYPE_DEPENDENT_P_VALID (type) = 1;
20583     }
20584 
20585   return TYPE_DEPENDENT_P (type);
20586 }
20587 
20588 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
20589    lookup.  In other words, a dependent type that is not the current
20590    instantiation.  */
20591 
20592 bool
dependent_scope_p(tree scope)20593 dependent_scope_p (tree scope)
20594 {
20595   return (scope && TYPE_P (scope) && dependent_type_p (scope)
20596 	  && !currently_open_class (scope));
20597 }
20598 
20599 /* T is a SCOPE_REF; return whether we need to consider it
20600     instantiation-dependent so that we can check access at instantiation
20601     time even though we know which member it resolves to.  */
20602 
20603 static bool
instantiation_dependent_scope_ref_p(tree t)20604 instantiation_dependent_scope_ref_p (tree t)
20605 {
20606   if (DECL_P (TREE_OPERAND (t, 1))
20607       && CLASS_TYPE_P (TREE_OPERAND (t, 0))
20608       && accessible_in_template_p (TREE_OPERAND (t, 0),
20609 				   TREE_OPERAND (t, 1)))
20610     return false;
20611   else
20612     return true;
20613 }
20614 
20615 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
20616    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
20617    expression.  */
20618 
20619 /* Note that this predicate is not appropriate for general expressions;
20620    only constant expressions (that satisfy potential_constant_expression)
20621    can be tested for value dependence.  */
20622 
20623 bool
value_dependent_expression_p(tree expression)20624 value_dependent_expression_p (tree expression)
20625 {
20626   if (!processing_template_decl)
20627     return false;
20628 
20629   /* A name declared with a dependent type.  */
20630   if (DECL_P (expression) && type_dependent_expression_p (expression))
20631     return true;
20632 
20633   switch (TREE_CODE (expression))
20634     {
20635     case IDENTIFIER_NODE:
20636       /* A name that has not been looked up -- must be dependent.  */
20637       return true;
20638 
20639     case TEMPLATE_PARM_INDEX:
20640       /* A non-type template parm.  */
20641       return true;
20642 
20643     case CONST_DECL:
20644       /* A non-type template parm.  */
20645       if (DECL_TEMPLATE_PARM_P (expression))
20646 	return true;
20647       return value_dependent_expression_p (DECL_INITIAL (expression));
20648 
20649     case VAR_DECL:
20650        /* A constant with literal type and is initialized
20651 	  with an expression that is value-dependent.
20652 
20653           Note that a non-dependent parenthesized initializer will have
20654           already been replaced with its constant value, so if we see
20655           a TREE_LIST it must be dependent.  */
20656       if (DECL_INITIAL (expression)
20657 	  && decl_constant_var_p (expression)
20658 	  && (TREE_CODE (DECL_INITIAL (expression)) == TREE_LIST
20659 	      || value_dependent_expression_p (DECL_INITIAL (expression))))
20660 	return true;
20661       return false;
20662 
20663     case DYNAMIC_CAST_EXPR:
20664     case STATIC_CAST_EXPR:
20665     case CONST_CAST_EXPR:
20666     case REINTERPRET_CAST_EXPR:
20667     case CAST_EXPR:
20668       /* These expressions are value-dependent if the type to which
20669 	 the cast occurs is dependent or the expression being casted
20670 	 is value-dependent.  */
20671       {
20672 	tree type = TREE_TYPE (expression);
20673 
20674 	if (dependent_type_p (type))
20675 	  return true;
20676 
20677 	/* A functional cast has a list of operands.  */
20678 	expression = TREE_OPERAND (expression, 0);
20679 	if (!expression)
20680 	  {
20681 	    /* If there are no operands, it must be an expression such
20682 	       as "int()". This should not happen for aggregate types
20683 	       because it would form non-constant expressions.  */
20684 	    gcc_assert (cxx_dialect >= cxx11
20685 			|| INTEGRAL_OR_ENUMERATION_TYPE_P (type));
20686 
20687 	    return false;
20688 	  }
20689 
20690 	if (TREE_CODE (expression) == TREE_LIST)
20691 	  return any_value_dependent_elements_p (expression);
20692 
20693 	return value_dependent_expression_p (expression);
20694       }
20695 
20696     case SIZEOF_EXPR:
20697       if (SIZEOF_EXPR_TYPE_P (expression))
20698 	return dependent_type_p (TREE_TYPE (TREE_OPERAND (expression, 0)));
20699       /* FALLTHRU */
20700     case ALIGNOF_EXPR:
20701     case TYPEID_EXPR:
20702       /* A `sizeof' expression is value-dependent if the operand is
20703 	 type-dependent or is a pack expansion.  */
20704       expression = TREE_OPERAND (expression, 0);
20705       if (PACK_EXPANSION_P (expression))
20706         return true;
20707       else if (TYPE_P (expression))
20708 	return dependent_type_p (expression);
20709       return instantiation_dependent_expression_p (expression);
20710 
20711     case AT_ENCODE_EXPR:
20712       /* An 'encode' expression is value-dependent if the operand is
20713 	 type-dependent.  */
20714       expression = TREE_OPERAND (expression, 0);
20715       return dependent_type_p (expression);
20716 
20717     case NOEXCEPT_EXPR:
20718       expression = TREE_OPERAND (expression, 0);
20719       return instantiation_dependent_expression_p (expression);
20720 
20721     case SCOPE_REF:
20722       /* All instantiation-dependent expressions should also be considered
20723 	 value-dependent.  */
20724       return instantiation_dependent_scope_ref_p (expression);
20725 
20726     case COMPONENT_REF:
20727       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
20728 	      || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
20729 
20730     case NONTYPE_ARGUMENT_PACK:
20731       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
20732          is value-dependent.  */
20733       {
20734         tree values = ARGUMENT_PACK_ARGS (expression);
20735         int i, len = TREE_VEC_LENGTH (values);
20736 
20737         for (i = 0; i < len; ++i)
20738           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
20739             return true;
20740 
20741         return false;
20742       }
20743 
20744     case TRAIT_EXPR:
20745       {
20746 	tree type2 = TRAIT_EXPR_TYPE2 (expression);
20747 	return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
20748 		|| (type2 ? dependent_type_p (type2) : false));
20749       }
20750 
20751     case MODOP_EXPR:
20752       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
20753 	      || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
20754 
20755     case ARRAY_REF:
20756       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
20757 	      || (value_dependent_expression_p (TREE_OPERAND (expression, 1))));
20758 
20759     case ADDR_EXPR:
20760       {
20761 	tree op = TREE_OPERAND (expression, 0);
20762 	return (value_dependent_expression_p (op)
20763 		|| has_value_dependent_address (op));
20764       }
20765 
20766     case CALL_EXPR:
20767       {
20768 	tree fn = get_callee_fndecl (expression);
20769 	int i, nargs;
20770 	if (!fn && value_dependent_expression_p (CALL_EXPR_FN (expression)))
20771 	  return true;
20772 	nargs = call_expr_nargs (expression);
20773 	for (i = 0; i < nargs; ++i)
20774 	  {
20775 	    tree op = CALL_EXPR_ARG (expression, i);
20776 	    /* In a call to a constexpr member function, look through the
20777 	       implicit ADDR_EXPR on the object argument so that it doesn't
20778 	       cause the call to be considered value-dependent.  We also
20779 	       look through it in potential_constant_expression.  */
20780 	    if (i == 0 && fn && DECL_DECLARED_CONSTEXPR_P (fn)
20781 		&& DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
20782 		&& TREE_CODE (op) == ADDR_EXPR)
20783 	      op = TREE_OPERAND (op, 0);
20784 	    if (value_dependent_expression_p (op))
20785 	      return true;
20786 	  }
20787 	return false;
20788       }
20789 
20790     case TEMPLATE_ID_EXPR:
20791       /* If a TEMPLATE_ID_EXPR involves a dependent name, it will be
20792 	 type-dependent.  */
20793       return type_dependent_expression_p (expression);
20794 
20795     case CONSTRUCTOR:
20796       {
20797 	unsigned ix;
20798 	tree val;
20799 	if (dependent_type_p (TREE_TYPE (expression)))
20800 	  return true;
20801 	FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), ix, val)
20802 	  if (value_dependent_expression_p (val))
20803 	    return true;
20804 	return false;
20805       }
20806 
20807     case STMT_EXPR:
20808       /* Treat a GNU statement expression as dependent to avoid crashing
20809 	 under fold_non_dependent_expr; it can't be constant.  */
20810       return true;
20811 
20812     default:
20813       /* A constant expression is value-dependent if any subexpression is
20814 	 value-dependent.  */
20815       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
20816 	{
20817 	case tcc_reference:
20818 	case tcc_unary:
20819 	case tcc_comparison:
20820 	case tcc_binary:
20821 	case tcc_expression:
20822 	case tcc_vl_exp:
20823 	  {
20824 	    int i, len = cp_tree_operand_length (expression);
20825 
20826 	    for (i = 0; i < len; i++)
20827 	      {
20828 		tree t = TREE_OPERAND (expression, i);
20829 
20830 		/* In some cases, some of the operands may be missing.l
20831 		   (For example, in the case of PREDECREMENT_EXPR, the
20832 		   amount to increment by may be missing.)  That doesn't
20833 		   make the expression dependent.  */
20834 		if (t && value_dependent_expression_p (t))
20835 		  return true;
20836 	      }
20837 	  }
20838 	  break;
20839 	default:
20840 	  break;
20841 	}
20842       break;
20843     }
20844 
20845   /* The expression is not value-dependent.  */
20846   return false;
20847 }
20848 
20849 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
20850    [temp.dep.expr].  Note that an expression with no type is
20851    considered dependent.  Other parts of the compiler arrange for an
20852    expression with type-dependent subexpressions to have no type, so
20853    this function doesn't have to be fully recursive.  */
20854 
20855 bool
type_dependent_expression_p(tree expression)20856 type_dependent_expression_p (tree expression)
20857 {
20858   if (!processing_template_decl)
20859     return false;
20860 
20861   if (expression == NULL_TREE || expression == error_mark_node)
20862     return false;
20863 
20864   /* An unresolved name is always dependent.  */
20865   if (identifier_p (expression) || TREE_CODE (expression) == USING_DECL)
20866     return true;
20867 
20868   /* Some expression forms are never type-dependent.  */
20869   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
20870       || TREE_CODE (expression) == SIZEOF_EXPR
20871       || TREE_CODE (expression) == ALIGNOF_EXPR
20872       || TREE_CODE (expression) == AT_ENCODE_EXPR
20873       || TREE_CODE (expression) == NOEXCEPT_EXPR
20874       || TREE_CODE (expression) == TRAIT_EXPR
20875       || TREE_CODE (expression) == TYPEID_EXPR
20876       || TREE_CODE (expression) == DELETE_EXPR
20877       || TREE_CODE (expression) == VEC_DELETE_EXPR
20878       || TREE_CODE (expression) == THROW_EXPR)
20879     return false;
20880 
20881   /* The types of these expressions depends only on the type to which
20882      the cast occurs.  */
20883   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
20884       || TREE_CODE (expression) == STATIC_CAST_EXPR
20885       || TREE_CODE (expression) == CONST_CAST_EXPR
20886       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
20887       || TREE_CODE (expression) == IMPLICIT_CONV_EXPR
20888       || TREE_CODE (expression) == CAST_EXPR)
20889     return dependent_type_p (TREE_TYPE (expression));
20890 
20891   /* The types of these expressions depends only on the type created
20892      by the expression.  */
20893   if (TREE_CODE (expression) == NEW_EXPR
20894       || TREE_CODE (expression) == VEC_NEW_EXPR)
20895     {
20896       /* For NEW_EXPR tree nodes created inside a template, either
20897 	 the object type itself or a TREE_LIST may appear as the
20898 	 operand 1.  */
20899       tree type = TREE_OPERAND (expression, 1);
20900       if (TREE_CODE (type) == TREE_LIST)
20901 	/* This is an array type.  We need to check array dimensions
20902 	   as well.  */
20903 	return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
20904 	       || value_dependent_expression_p
20905 		    (TREE_OPERAND (TREE_VALUE (type), 1));
20906       else
20907 	return dependent_type_p (type);
20908     }
20909 
20910   if (TREE_CODE (expression) == SCOPE_REF)
20911     {
20912       tree scope = TREE_OPERAND (expression, 0);
20913       tree name = TREE_OPERAND (expression, 1);
20914 
20915       /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
20916 	 contains an identifier associated by name lookup with one or more
20917 	 declarations declared with a dependent type, or...a
20918 	 nested-name-specifier or qualified-id that names a member of an
20919 	 unknown specialization.  */
20920       return (type_dependent_expression_p (name)
20921 	      || dependent_scope_p (scope));
20922     }
20923 
20924   if (TREE_CODE (expression) == FUNCTION_DECL
20925       && DECL_LANG_SPECIFIC (expression)
20926       && DECL_TEMPLATE_INFO (expression)
20927       && (any_dependent_template_arguments_p
20928 	  (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
20929     return true;
20930 
20931   if (TREE_CODE (expression) == TEMPLATE_DECL
20932       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
20933     return false;
20934 
20935   if (TREE_CODE (expression) == STMT_EXPR)
20936     expression = stmt_expr_value_expr (expression);
20937 
20938   if (BRACE_ENCLOSED_INITIALIZER_P (expression))
20939     {
20940       tree elt;
20941       unsigned i;
20942 
20943       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
20944 	{
20945 	  if (type_dependent_expression_p (elt))
20946 	    return true;
20947 	}
20948       return false;
20949     }
20950 
20951   /* A static data member of the current instantiation with incomplete
20952      array type is type-dependent, as the definition and specializations
20953      can have different bounds.  */
20954   if (VAR_P (expression)
20955       && DECL_CLASS_SCOPE_P (expression)
20956       && dependent_type_p (DECL_CONTEXT (expression))
20957       && VAR_HAD_UNKNOWN_BOUND (expression))
20958     return true;
20959 
20960   /* An array of unknown bound depending on a variadic parameter, eg:
20961 
20962      template<typename... Args>
20963        void foo (Args... args)
20964        {
20965          int arr[] = { args... };
20966        }
20967 
20968      template<int... vals>
20969        void bar ()
20970        {
20971          int arr[] = { vals... };
20972        }
20973 
20974      If the array has no length and has an initializer, it must be that
20975      we couldn't determine its length in cp_complete_array_type because
20976      it is dependent.  */
20977   if (VAR_P (expression)
20978       && TREE_CODE (TREE_TYPE (expression)) == ARRAY_TYPE
20979       && !TYPE_DOMAIN (TREE_TYPE (expression))
20980       && DECL_INITIAL (expression))
20981    return true;
20982 
20983   if (TREE_TYPE (expression) == unknown_type_node)
20984     {
20985       if (TREE_CODE (expression) == ADDR_EXPR)
20986 	return type_dependent_expression_p (TREE_OPERAND (expression, 0));
20987       if (TREE_CODE (expression) == COMPONENT_REF
20988 	  || TREE_CODE (expression) == OFFSET_REF)
20989 	{
20990 	  if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
20991 	    return true;
20992 	  expression = TREE_OPERAND (expression, 1);
20993 	  if (identifier_p (expression))
20994 	    return false;
20995 	}
20996       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
20997       if (TREE_CODE (expression) == SCOPE_REF)
20998 	return false;
20999 
21000       /* Always dependent, on the number of arguments if nothing else.  */
21001       if (TREE_CODE (expression) == EXPR_PACK_EXPANSION)
21002 	return true;
21003 
21004       if (BASELINK_P (expression))
21005 	{
21006 	  if (BASELINK_OPTYPE (expression)
21007 	      && dependent_type_p (BASELINK_OPTYPE (expression)))
21008 	    return true;
21009 	  expression = BASELINK_FUNCTIONS (expression);
21010 	}
21011 
21012       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
21013 	{
21014 	  if (any_dependent_template_arguments_p
21015 	      (TREE_OPERAND (expression, 1)))
21016 	    return true;
21017 	  expression = TREE_OPERAND (expression, 0);
21018 	}
21019       gcc_assert (TREE_CODE (expression) == OVERLOAD
21020 		  || TREE_CODE (expression) == FUNCTION_DECL);
21021 
21022       while (expression)
21023 	{
21024 	  if (type_dependent_expression_p (OVL_CURRENT (expression)))
21025 	    return true;
21026 	  expression = OVL_NEXT (expression);
21027 	}
21028       return false;
21029     }
21030 
21031   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
21032 
21033   return (dependent_type_p (TREE_TYPE (expression)));
21034 }
21035 
21036 /* walk_tree callback function for instantiation_dependent_expression_p,
21037    below.  Returns non-zero if a dependent subexpression is found.  */
21038 
21039 static tree
instantiation_dependent_r(tree * tp,int * walk_subtrees,void *)21040 instantiation_dependent_r (tree *tp, int *walk_subtrees,
21041 			   void * /*data*/)
21042 {
21043   if (TYPE_P (*tp))
21044     {
21045       /* We don't have to worry about decltype currently because decltype
21046 	 of an instantiation-dependent expr is a dependent type.  This
21047 	 might change depending on the resolution of DR 1172.  */
21048       *walk_subtrees = false;
21049       return NULL_TREE;
21050     }
21051   enum tree_code code = TREE_CODE (*tp);
21052   switch (code)
21053     {
21054       /* Don't treat an argument list as dependent just because it has no
21055 	 TREE_TYPE.  */
21056     case TREE_LIST:
21057     case TREE_VEC:
21058       return NULL_TREE;
21059 
21060     case VAR_DECL:
21061     case CONST_DECL:
21062       /* A constant with a dependent initializer is dependent.  */
21063       if (value_dependent_expression_p (*tp))
21064 	return *tp;
21065       break;
21066 
21067     case TEMPLATE_PARM_INDEX:
21068       return *tp;
21069 
21070       /* Handle expressions with type operands.  */
21071     case SIZEOF_EXPR:
21072     case ALIGNOF_EXPR:
21073     case TYPEID_EXPR:
21074     case AT_ENCODE_EXPR:
21075       {
21076 	tree op = TREE_OPERAND (*tp, 0);
21077 	if (code == SIZEOF_EXPR && SIZEOF_EXPR_TYPE_P (*tp))
21078 	  op = TREE_TYPE (op);
21079 	if (TYPE_P (op))
21080 	  {
21081 	    if (dependent_type_p (op))
21082 	      return *tp;
21083 	    else
21084 	      {
21085 		*walk_subtrees = false;
21086 		return NULL_TREE;
21087 	      }
21088 	  }
21089 	break;
21090       }
21091 
21092     case TRAIT_EXPR:
21093       if (dependent_type_p (TRAIT_EXPR_TYPE1 (*tp))
21094 	  || (TRAIT_EXPR_TYPE2 (*tp)
21095 	      && dependent_type_p (TRAIT_EXPR_TYPE2 (*tp))))
21096 	return *tp;
21097       *walk_subtrees = false;
21098       return NULL_TREE;
21099 
21100     case COMPONENT_REF:
21101       if (identifier_p (TREE_OPERAND (*tp, 1)))
21102 	/* In a template, finish_class_member_access_expr creates a
21103 	   COMPONENT_REF with an IDENTIFIER_NODE for op1 even if it isn't
21104 	   type-dependent, so that we can check access control at
21105 	   instantiation time (PR 42277).  See also Core issue 1273.  */
21106 	return *tp;
21107       break;
21108 
21109     case SCOPE_REF:
21110       if (instantiation_dependent_scope_ref_p (*tp))
21111 	return *tp;
21112       else
21113 	break;
21114 
21115       /* Treat statement-expressions as dependent.  */
21116     case BIND_EXPR:
21117       return *tp;
21118 
21119     default:
21120       break;
21121     }
21122 
21123   if (type_dependent_expression_p (*tp))
21124     return *tp;
21125   else
21126     return NULL_TREE;
21127 }
21128 
21129 /* Returns TRUE if the EXPRESSION is instantiation-dependent, in the
21130    sense defined by the ABI:
21131 
21132    "An expression is instantiation-dependent if it is type-dependent
21133    or value-dependent, or it has a subexpression that is type-dependent
21134    or value-dependent."  */
21135 
21136 bool
instantiation_dependent_expression_p(tree expression)21137 instantiation_dependent_expression_p (tree expression)
21138 {
21139   tree result;
21140 
21141   if (!processing_template_decl)
21142     return false;
21143 
21144   if (expression == error_mark_node)
21145     return false;
21146 
21147   result = cp_walk_tree_without_duplicates (&expression,
21148 					    instantiation_dependent_r, NULL);
21149   return result != NULL_TREE;
21150 }
21151 
21152 /* Like type_dependent_expression_p, but it also works while not processing
21153    a template definition, i.e. during substitution or mangling.  */
21154 
21155 bool
type_dependent_expression_p_push(tree expr)21156 type_dependent_expression_p_push (tree expr)
21157 {
21158   bool b;
21159   ++processing_template_decl;
21160   b = type_dependent_expression_p (expr);
21161   --processing_template_decl;
21162   return b;
21163 }
21164 
21165 /* Returns TRUE if ARGS contains a type-dependent expression.  */
21166 
21167 bool
any_type_dependent_arguments_p(const vec<tree,va_gc> * args)21168 any_type_dependent_arguments_p (const vec<tree, va_gc> *args)
21169 {
21170   unsigned int i;
21171   tree arg;
21172 
21173   FOR_EACH_VEC_SAFE_ELT (args, i, arg)
21174     {
21175       if (type_dependent_expression_p (arg))
21176 	return true;
21177     }
21178   return false;
21179 }
21180 
21181 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
21182    expressions) contains any type-dependent expressions.  */
21183 
21184 bool
any_type_dependent_elements_p(const_tree list)21185 any_type_dependent_elements_p (const_tree list)
21186 {
21187   for (; list; list = TREE_CHAIN (list))
21188     if (type_dependent_expression_p (TREE_VALUE (list)))
21189       return true;
21190 
21191   return false;
21192 }
21193 
21194 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
21195    expressions) contains any value-dependent expressions.  */
21196 
21197 bool
any_value_dependent_elements_p(const_tree list)21198 any_value_dependent_elements_p (const_tree list)
21199 {
21200   for (; list; list = TREE_CHAIN (list))
21201     if (value_dependent_expression_p (TREE_VALUE (list)))
21202       return true;
21203 
21204   return false;
21205 }
21206 
21207 /* Returns TRUE if the ARG (a template argument) is dependent.  */
21208 
21209 bool
dependent_template_arg_p(tree arg)21210 dependent_template_arg_p (tree arg)
21211 {
21212   if (!processing_template_decl)
21213     return false;
21214 
21215   /* Assume a template argument that was wrongly written by the user
21216      is dependent. This is consistent with what
21217      any_dependent_template_arguments_p [that calls this function]
21218      does.  */
21219   if (!arg || arg == error_mark_node)
21220     return true;
21221 
21222   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
21223     arg = ARGUMENT_PACK_SELECT_ARG (arg);
21224 
21225   if (TREE_CODE (arg) == TEMPLATE_DECL
21226       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
21227     return dependent_template_p (arg);
21228   else if (ARGUMENT_PACK_P (arg))
21229     {
21230       tree args = ARGUMENT_PACK_ARGS (arg);
21231       int i, len = TREE_VEC_LENGTH (args);
21232       for (i = 0; i < len; ++i)
21233         {
21234           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
21235             return true;
21236         }
21237 
21238       return false;
21239     }
21240   else if (TYPE_P (arg))
21241     return dependent_type_p (arg);
21242   else
21243     return (type_dependent_expression_p (arg)
21244 	    || value_dependent_expression_p (arg));
21245 }
21246 
21247 /* Returns true if ARGS (a collection of template arguments) contains
21248    any types that require structural equality testing.  */
21249 
21250 bool
any_template_arguments_need_structural_equality_p(tree args)21251 any_template_arguments_need_structural_equality_p (tree args)
21252 {
21253   int i;
21254   int j;
21255 
21256   if (!args)
21257     return false;
21258   if (args == error_mark_node)
21259     return true;
21260 
21261   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
21262     {
21263       tree level = TMPL_ARGS_LEVEL (args, i + 1);
21264       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
21265 	{
21266 	  tree arg = TREE_VEC_ELT (level, j);
21267 	  tree packed_args = NULL_TREE;
21268 	  int k, len = 1;
21269 
21270 	  if (ARGUMENT_PACK_P (arg))
21271 	    {
21272 	      /* Look inside the argument pack.  */
21273 	      packed_args = ARGUMENT_PACK_ARGS (arg);
21274 	      len = TREE_VEC_LENGTH (packed_args);
21275 	    }
21276 
21277 	  for (k = 0; k < len; ++k)
21278 	    {
21279 	      if (packed_args)
21280 		arg = TREE_VEC_ELT (packed_args, k);
21281 
21282 	      if (error_operand_p (arg))
21283 		return true;
21284 	      else if (TREE_CODE (arg) == TEMPLATE_DECL)
21285 		continue;
21286 	      else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
21287 		return true;
21288 	      else if (!TYPE_P (arg) && TREE_TYPE (arg)
21289 		       && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
21290 		return true;
21291 	    }
21292 	}
21293     }
21294 
21295   return false;
21296 }
21297 
21298 /* Returns true if ARGS (a collection of template arguments) contains
21299    any dependent arguments.  */
21300 
21301 bool
any_dependent_template_arguments_p(const_tree args)21302 any_dependent_template_arguments_p (const_tree args)
21303 {
21304   int i;
21305   int j;
21306 
21307   if (!args)
21308     return false;
21309   if (args == error_mark_node)
21310     return true;
21311 
21312   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
21313     {
21314       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
21315       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
21316 	if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
21317 	  return true;
21318     }
21319 
21320   return false;
21321 }
21322 
21323 /* Returns TRUE if the template TMPL is dependent.  */
21324 
21325 bool
dependent_template_p(tree tmpl)21326 dependent_template_p (tree tmpl)
21327 {
21328   if (TREE_CODE (tmpl) == OVERLOAD)
21329     {
21330       while (tmpl)
21331 	{
21332 	  if (dependent_template_p (OVL_CURRENT (tmpl)))
21333 	    return true;
21334 	  tmpl = OVL_NEXT (tmpl);
21335 	}
21336       return false;
21337     }
21338 
21339   /* Template template parameters are dependent.  */
21340   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
21341       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
21342     return true;
21343   /* So are names that have not been looked up.  */
21344   if (TREE_CODE (tmpl) == SCOPE_REF || identifier_p (tmpl))
21345     return true;
21346   /* So are member templates of dependent classes.  */
21347   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
21348     return dependent_type_p (DECL_CONTEXT (tmpl));
21349   return false;
21350 }
21351 
21352 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
21353 
21354 bool
dependent_template_id_p(tree tmpl,tree args)21355 dependent_template_id_p (tree tmpl, tree args)
21356 {
21357   return (dependent_template_p (tmpl)
21358 	  || any_dependent_template_arguments_p (args));
21359 }
21360 
21361 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
21362    is dependent.  */
21363 
21364 bool
dependent_omp_for_p(tree declv,tree initv,tree condv,tree incrv)21365 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
21366 {
21367   int i;
21368 
21369   if (!processing_template_decl)
21370     return false;
21371 
21372   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
21373     {
21374       tree decl = TREE_VEC_ELT (declv, i);
21375       tree init = TREE_VEC_ELT (initv, i);
21376       tree cond = TREE_VEC_ELT (condv, i);
21377       tree incr = TREE_VEC_ELT (incrv, i);
21378 
21379       if (type_dependent_expression_p (decl))
21380 	return true;
21381 
21382       if (init && type_dependent_expression_p (init))
21383 	return true;
21384 
21385       if (type_dependent_expression_p (cond))
21386 	return true;
21387 
21388       if (COMPARISON_CLASS_P (cond)
21389 	  && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
21390 	      || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
21391 	return true;
21392 
21393       if (TREE_CODE (incr) == MODOP_EXPR)
21394 	{
21395 	  if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
21396 	      || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
21397 	    return true;
21398 	}
21399       else if (type_dependent_expression_p (incr))
21400 	return true;
21401       else if (TREE_CODE (incr) == MODIFY_EXPR)
21402 	{
21403 	  if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
21404 	    return true;
21405 	  else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
21406 	    {
21407 	      tree t = TREE_OPERAND (incr, 1);
21408 	      if (type_dependent_expression_p (TREE_OPERAND (t, 0))
21409 		  || type_dependent_expression_p (TREE_OPERAND (t, 1)))
21410 		return true;
21411 	    }
21412 	}
21413     }
21414 
21415   return false;
21416 }
21417 
21418 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
21419    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
21420    no such TYPE can be found.  Note that this function peers inside
21421    uninstantiated templates and therefore should be used only in
21422    extremely limited situations.  ONLY_CURRENT_P restricts this
21423    peering to the currently open classes hierarchy (which is required
21424    when comparing types).  */
21425 
21426 tree
resolve_typename_type(tree type,bool only_current_p)21427 resolve_typename_type (tree type, bool only_current_p)
21428 {
21429   tree scope;
21430   tree name;
21431   tree decl;
21432   int quals;
21433   tree pushed_scope;
21434   tree result;
21435 
21436   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
21437 
21438   scope = TYPE_CONTEXT (type);
21439   /* Usually the non-qualified identifier of a TYPENAME_TYPE is
21440      TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
21441      a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
21442      the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
21443      identifier  of the TYPENAME_TYPE anymore.
21444      So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
21445      TYPENAME_TYPE instead, we avoid messing up with a possible
21446      typedef variant case.  */
21447   name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
21448 
21449   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
21450      it first before we can figure out what NAME refers to.  */
21451   if (TREE_CODE (scope) == TYPENAME_TYPE)
21452     {
21453       if (TYPENAME_IS_RESOLVING_P (scope))
21454 	/* Given a class template A with a dependent base with nested type C,
21455 	   typedef typename A::C::C C will land us here, as trying to resolve
21456 	   the initial A::C leads to the local C typedef, which leads back to
21457 	   A::C::C.  So we break the recursion now.  */
21458 	return type;
21459       else
21460 	scope = resolve_typename_type (scope, only_current_p);
21461     }
21462   /* If we don't know what SCOPE refers to, then we cannot resolve the
21463      TYPENAME_TYPE.  */
21464   if (TREE_CODE (scope) == TYPENAME_TYPE)
21465     return type;
21466   /* If the SCOPE is a template type parameter, we have no way of
21467      resolving the name.  */
21468   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
21469     return type;
21470   /* If the SCOPE is not the current instantiation, there's no reason
21471      to look inside it.  */
21472   if (only_current_p && !currently_open_class (scope))
21473     return type;
21474   /* If this is a typedef, we don't want to look inside (c++/11987).  */
21475   if (typedef_variant_p (type))
21476     return type;
21477   /* If SCOPE isn't the template itself, it will not have a valid
21478      TYPE_FIELDS list.  */
21479   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
21480     /* scope is either the template itself or a compatible instantiation
21481        like X<T>, so look up the name in the original template.  */
21482     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
21483   else
21484     /* scope is a partial instantiation, so we can't do the lookup or we
21485        will lose the template arguments.  */
21486     return type;
21487   /* Enter the SCOPE so that name lookup will be resolved as if we
21488      were in the class definition.  In particular, SCOPE will no
21489      longer be considered a dependent type.  */
21490   pushed_scope = push_scope (scope);
21491   /* Look up the declaration.  */
21492   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true,
21493 			tf_warning_or_error);
21494 
21495   result = NULL_TREE;
21496 
21497   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
21498      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
21499   if (!decl)
21500     /*nop*/;
21501   else if (identifier_p (TYPENAME_TYPE_FULLNAME (type))
21502 	   && TREE_CODE (decl) == TYPE_DECL)
21503     {
21504       result = TREE_TYPE (decl);
21505       if (result == error_mark_node)
21506 	result = NULL_TREE;
21507     }
21508   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
21509 	   && DECL_CLASS_TEMPLATE_P (decl))
21510     {
21511       tree tmpl;
21512       tree args;
21513       /* Obtain the template and the arguments.  */
21514       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
21515       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
21516       /* Instantiate the template.  */
21517       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
21518 				      /*entering_scope=*/0,
21519 				      tf_error | tf_user);
21520       if (result == error_mark_node)
21521 	result = NULL_TREE;
21522     }
21523 
21524   /* Leave the SCOPE.  */
21525   if (pushed_scope)
21526     pop_scope (pushed_scope);
21527 
21528   /* If we failed to resolve it, return the original typename.  */
21529   if (!result)
21530     return type;
21531 
21532   /* If lookup found a typename type, resolve that too.  */
21533   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
21534     {
21535       /* Ill-formed programs can cause infinite recursion here, so we
21536 	 must catch that.  */
21537       TYPENAME_IS_RESOLVING_P (type) = 1;
21538       result = resolve_typename_type (result, only_current_p);
21539       TYPENAME_IS_RESOLVING_P (type) = 0;
21540     }
21541 
21542   /* Qualify the resulting type.  */
21543   quals = cp_type_quals (type);
21544   if (quals)
21545     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
21546 
21547   return result;
21548 }
21549 
21550 /* EXPR is an expression which is not type-dependent.  Return a proxy
21551    for EXPR that can be used to compute the types of larger
21552    expressions containing EXPR.  */
21553 
21554 tree
build_non_dependent_expr(tree expr)21555 build_non_dependent_expr (tree expr)
21556 {
21557   tree inner_expr;
21558 
21559 #ifdef ENABLE_CHECKING
21560   /* Try to get a constant value for all non-dependent expressions in
21561       order to expose bugs in *_dependent_expression_p and constexpr.  */
21562   if (cxx_dialect >= cxx11)
21563     maybe_constant_value (fold_non_dependent_expr_sfinae (expr, tf_none));
21564 #endif
21565 
21566   /* Preserve OVERLOADs; the functions must be available to resolve
21567      types.  */
21568   inner_expr = expr;
21569   if (TREE_CODE (inner_expr) == STMT_EXPR)
21570     inner_expr = stmt_expr_value_expr (inner_expr);
21571   if (TREE_CODE (inner_expr) == ADDR_EXPR)
21572     inner_expr = TREE_OPERAND (inner_expr, 0);
21573   if (TREE_CODE (inner_expr) == COMPONENT_REF)
21574     inner_expr = TREE_OPERAND (inner_expr, 1);
21575   if (is_overloaded_fn (inner_expr)
21576       || TREE_CODE (inner_expr) == OFFSET_REF)
21577     return expr;
21578   /* There is no need to return a proxy for a variable.  */
21579   if (VAR_P (expr))
21580     return expr;
21581   /* Preserve string constants; conversions from string constants to
21582      "char *" are allowed, even though normally a "const char *"
21583      cannot be used to initialize a "char *".  */
21584   if (TREE_CODE (expr) == STRING_CST)
21585     return expr;
21586   /* Preserve arithmetic constants, as an optimization -- there is no
21587      reason to create a new node.  */
21588   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
21589     return expr;
21590   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
21591      There is at least one place where we want to know that a
21592      particular expression is a throw-expression: when checking a ?:
21593      expression, there are special rules if the second or third
21594      argument is a throw-expression.  */
21595   if (TREE_CODE (expr) == THROW_EXPR)
21596     return expr;
21597 
21598   /* Don't wrap an initializer list, we need to be able to look inside.  */
21599   if (BRACE_ENCLOSED_INITIALIZER_P (expr))
21600     return expr;
21601 
21602   /* Don't wrap a dummy object, we need to be able to test for it.  */
21603   if (is_dummy_object (expr))
21604     return expr;
21605 
21606   if (TREE_CODE (expr) == COND_EXPR)
21607     return build3 (COND_EXPR,
21608 		   TREE_TYPE (expr),
21609 		   TREE_OPERAND (expr, 0),
21610 		   (TREE_OPERAND (expr, 1)
21611 		    ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
21612 		    : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
21613 		   build_non_dependent_expr (TREE_OPERAND (expr, 2)));
21614   if (TREE_CODE (expr) == COMPOUND_EXPR
21615       && !COMPOUND_EXPR_OVERLOADED (expr))
21616     return build2 (COMPOUND_EXPR,
21617 		   TREE_TYPE (expr),
21618 		   TREE_OPERAND (expr, 0),
21619 		   build_non_dependent_expr (TREE_OPERAND (expr, 1)));
21620 
21621   /* If the type is unknown, it can't really be non-dependent */
21622   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
21623 
21624   /* Otherwise, build a NON_DEPENDENT_EXPR.  */
21625   return build1 (NON_DEPENDENT_EXPR, TREE_TYPE (expr), expr);
21626 }
21627 
21628 /* ARGS is a vector of expressions as arguments to a function call.
21629    Replace the arguments with equivalent non-dependent expressions.
21630    This modifies ARGS in place.  */
21631 
21632 void
make_args_non_dependent(vec<tree,va_gc> * args)21633 make_args_non_dependent (vec<tree, va_gc> *args)
21634 {
21635   unsigned int ix;
21636   tree arg;
21637 
21638   FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
21639     {
21640       tree newarg = build_non_dependent_expr (arg);
21641       if (newarg != arg)
21642 	(*args)[ix] = newarg;
21643     }
21644 }
21645 
21646 /* Returns a type which represents 'auto' or 'decltype(auto)'.  We use a
21647    TEMPLATE_TYPE_PARM with a level one deeper than the actual template
21648    parms.  */
21649 
21650 static tree
make_auto_1(tree name)21651 make_auto_1 (tree name)
21652 {
21653   tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
21654   TYPE_NAME (au) = build_decl (input_location,
21655 			       TYPE_DECL, name, au);
21656   TYPE_STUB_DECL (au) = TYPE_NAME (au);
21657   TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
21658     (0, processing_template_decl + 1, processing_template_decl + 1,
21659      TYPE_NAME (au), NULL_TREE);
21660   TYPE_CANONICAL (au) = canonical_type_parameter (au);
21661   DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
21662   SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
21663 
21664   return au;
21665 }
21666 
21667 tree
make_decltype_auto(void)21668 make_decltype_auto (void)
21669 {
21670   return make_auto_1 (get_identifier ("decltype(auto)"));
21671 }
21672 
21673 tree
make_auto(void)21674 make_auto (void)
21675 {
21676   return make_auto_1 (get_identifier ("auto"));
21677 }
21678 
21679 /* Given type ARG, return std::initializer_list<ARG>.  */
21680 
21681 static tree
listify(tree arg)21682 listify (tree arg)
21683 {
21684   tree std_init_list = namespace_binding
21685     (get_identifier ("initializer_list"), std_node);
21686   tree argvec;
21687   if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
21688     {
21689       error ("deducing from brace-enclosed initializer list requires "
21690 	     "#include <initializer_list>");
21691       return error_mark_node;
21692     }
21693   argvec = make_tree_vec (1);
21694   TREE_VEC_ELT (argvec, 0) = arg;
21695   return lookup_template_class (std_init_list, argvec, NULL_TREE,
21696 				NULL_TREE, 0, tf_warning_or_error);
21697 }
21698 
21699 /* Replace auto in TYPE with std::initializer_list<auto>.  */
21700 
21701 static tree
listify_autos(tree type,tree auto_node)21702 listify_autos (tree type, tree auto_node)
21703 {
21704   tree init_auto = listify (auto_node);
21705   tree argvec = make_tree_vec (1);
21706   TREE_VEC_ELT (argvec, 0) = init_auto;
21707   if (processing_template_decl)
21708     argvec = add_to_template_args (current_template_args (), argvec);
21709   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
21710 }
21711 
21712 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
21713    from INIT.  AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.  */
21714 
21715 tree
do_auto_deduction(tree type,tree init,tree auto_node)21716 do_auto_deduction (tree type, tree init, tree auto_node)
21717 {
21718   tree targs;
21719 
21720   if (init == error_mark_node)
21721     return error_mark_node;
21722 
21723   if (type_dependent_expression_p (init))
21724     /* Defining a subset of type-dependent expressions that we can deduce
21725        from ahead of time isn't worth the trouble.  */
21726     return type;
21727 
21728   /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
21729      with either a new invented type template parameter U or, if the
21730      initializer is a braced-init-list (8.5.4), with
21731      std::initializer_list<U>.  */
21732   if (BRACE_ENCLOSED_INITIALIZER_P (init))
21733     type = listify_autos (type, auto_node);
21734 
21735   init = resolve_nondeduced_context (init);
21736 
21737   targs = make_tree_vec (1);
21738   if (AUTO_IS_DECLTYPE (auto_node))
21739     {
21740       bool id = (DECL_P (init) || (TREE_CODE (init) == COMPONENT_REF
21741 				   && !REF_PARENTHESIZED_P (init)));
21742       TREE_VEC_ELT (targs, 0)
21743 	= finish_decltype_type (init, id, tf_warning_or_error);
21744       if (type != auto_node)
21745 	{
21746 	  error ("%qT as type rather than plain %<decltype(auto)%>", type);
21747 	  return error_mark_node;
21748 	}
21749     }
21750   else
21751     {
21752       tree parms = build_tree_list (NULL_TREE, type);
21753       tree tparms = make_tree_vec (1);
21754       int val;
21755 
21756       TREE_VEC_ELT (tparms, 0)
21757 	= build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
21758       val = type_unification_real (tparms, targs, parms, &init, 1, 0,
21759 				   DEDUCE_CALL, LOOKUP_NORMAL,
21760 				   NULL, /*explain_p=*/false);
21761       if (val > 0)
21762 	{
21763 	  if (processing_template_decl)
21764 	    /* Try again at instantiation time.  */
21765 	    return type;
21766 	  if (type && type != error_mark_node)
21767 	    /* If type is error_mark_node a diagnostic must have been
21768 	       emitted by now.  Also, having a mention to '<type error>'
21769 	       in the diagnostic is not really useful to the user.  */
21770 	    {
21771 	      if (cfun && auto_node == current_function_auto_return_pattern
21772 		  && LAMBDA_FUNCTION_P (current_function_decl))
21773 		error ("unable to deduce lambda return type from %qE", init);
21774 	      else
21775 		error ("unable to deduce %qT from %qE", type, init);
21776 	    }
21777 	  return error_mark_node;
21778 	}
21779     }
21780 
21781   /* If the list of declarators contains more than one declarator, the type
21782      of each declared variable is determined as described above. If the
21783      type deduced for the template parameter U is not the same in each
21784      deduction, the program is ill-formed.  */
21785   if (TREE_TYPE (auto_node)
21786       && !same_type_p (TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0)))
21787     {
21788       if (cfun && auto_node == current_function_auto_return_pattern
21789 	  && LAMBDA_FUNCTION_P (current_function_decl))
21790 	error ("inconsistent types %qT and %qT deduced for "
21791 	       "lambda return type", TREE_TYPE (auto_node),
21792 	       TREE_VEC_ELT (targs, 0));
21793       else
21794 	error ("inconsistent deduction for %qT: %qT and then %qT",
21795 	       auto_node, TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0));
21796       return error_mark_node;
21797     }
21798   TREE_TYPE (auto_node) = TREE_VEC_ELT (targs, 0);
21799 
21800   if (processing_template_decl)
21801     targs = add_to_template_args (current_template_args (), targs);
21802   return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
21803 }
21804 
21805 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
21806    result.  */
21807 
21808 tree
splice_late_return_type(tree type,tree late_return_type)21809 splice_late_return_type (tree type, tree late_return_type)
21810 {
21811   tree argvec;
21812 
21813   if (late_return_type == NULL_TREE)
21814     return type;
21815   argvec = make_tree_vec (1);
21816   TREE_VEC_ELT (argvec, 0) = late_return_type;
21817   if (processing_template_parmlist)
21818     /* For a late-specified return type in a template type-parameter, we
21819        need to add a dummy argument level for its parmlist.  */
21820     argvec = add_to_template_args
21821       (make_tree_vec (processing_template_parmlist), argvec);
21822   if (current_template_parms)
21823     argvec = add_to_template_args (current_template_args (), argvec);
21824   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
21825 }
21826 
21827 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto' or
21828    'decltype(auto)'.  */
21829 
21830 bool
is_auto(const_tree type)21831 is_auto (const_tree type)
21832 {
21833   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
21834       && (TYPE_IDENTIFIER (type) == get_identifier ("auto")
21835 	  || TYPE_IDENTIFIER (type) == get_identifier ("decltype(auto)")))
21836     return true;
21837   else
21838     return false;
21839 }
21840 
21841 /* Returns the TEMPLATE_TYPE_PARM in TYPE representing `auto' iff TYPE contains
21842    a use of `auto'.  Returns NULL_TREE otherwise.  */
21843 
21844 tree
type_uses_auto(tree type)21845 type_uses_auto (tree type)
21846 {
21847   return find_type_usage (type, is_auto);
21848 }
21849 
21850 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto',
21851    'decltype(auto)' or a concept.  */
21852 
21853 bool
is_auto_or_concept(const_tree type)21854 is_auto_or_concept (const_tree type)
21855 {
21856   return is_auto (type); // or concept
21857 }
21858 
21859 /* Returns the TEMPLATE_TYPE_PARM in TYPE representing a generic type (`auto' or
21860    a concept identifier) iff TYPE contains a use of a generic type.  Returns
21861    NULL_TREE otherwise.  */
21862 
21863 tree
type_uses_auto_or_concept(tree type)21864 type_uses_auto_or_concept (tree type)
21865 {
21866   return find_type_usage (type, is_auto_or_concept);
21867 }
21868 
21869 
21870 /* For a given template T, return the vector of typedefs referenced
21871    in T for which access check is needed at T instantiation time.
21872    T is either  a FUNCTION_DECL or a RECORD_TYPE.
21873    Those typedefs were added to T by the function
21874    append_type_to_template_for_access_check.  */
21875 
21876 vec<qualified_typedef_usage_t, va_gc> *
get_types_needing_access_check(tree t)21877 get_types_needing_access_check (tree t)
21878 {
21879   tree ti;
21880   vec<qualified_typedef_usage_t, va_gc> *result = NULL;
21881 
21882   if (!t || t == error_mark_node)
21883     return NULL;
21884 
21885   if (!(ti = get_template_info (t)))
21886     return NULL;
21887 
21888   if (CLASS_TYPE_P (t)
21889       || TREE_CODE (t) == FUNCTION_DECL)
21890     {
21891       if (!TI_TEMPLATE (ti))
21892 	return NULL;
21893 
21894       result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
21895     }
21896 
21897   return result;
21898 }
21899 
21900 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
21901    tied to T. That list of typedefs will be access checked at
21902    T instantiation time.
21903    T is either a FUNCTION_DECL or a RECORD_TYPE.
21904    TYPE_DECL is a TYPE_DECL node representing a typedef.
21905    SCOPE is the scope through which TYPE_DECL is accessed.
21906    LOCATION is the location of the usage point of TYPE_DECL.
21907 
21908    This function is a subroutine of
21909    append_type_to_template_for_access_check.  */
21910 
21911 static void
append_type_to_template_for_access_check_1(tree t,tree type_decl,tree scope,location_t location)21912 append_type_to_template_for_access_check_1 (tree t,
21913 					    tree type_decl,
21914 					    tree scope,
21915 					    location_t location)
21916 {
21917   qualified_typedef_usage_t typedef_usage;
21918   tree ti;
21919 
21920   if (!t || t == error_mark_node)
21921     return;
21922 
21923   gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
21924 	       || CLASS_TYPE_P (t))
21925 	      && type_decl
21926 	      && TREE_CODE (type_decl) == TYPE_DECL
21927 	      && scope);
21928 
21929   if (!(ti = get_template_info (t)))
21930     return;
21931 
21932   gcc_assert (TI_TEMPLATE (ti));
21933 
21934   typedef_usage.typedef_decl = type_decl;
21935   typedef_usage.context = scope;
21936   typedef_usage.locus = location;
21937 
21938   vec_safe_push (TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti), typedef_usage);
21939 }
21940 
21941 /* Append TYPE_DECL to the template TEMPL.
21942    TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
21943    At TEMPL instanciation time, TYPE_DECL will be checked to see
21944    if it can be accessed through SCOPE.
21945    LOCATION is the location of the usage point of TYPE_DECL.
21946 
21947    e.g. consider the following code snippet:
21948 
21949      class C
21950      {
21951        typedef int myint;
21952      };
21953 
21954      template<class U> struct S
21955      {
21956        C::myint mi; // <-- usage point of the typedef C::myint
21957      };
21958 
21959      S<char> s;
21960 
21961    At S<char> instantiation time, we need to check the access of C::myint
21962    In other words, we need to check the access of the myint typedef through
21963    the C scope. For that purpose, this function will add the myint typedef
21964    and the scope C through which its being accessed to a list of typedefs
21965    tied to the template S. That list will be walked at template instantiation
21966    time and access check performed on each typedefs it contains.
21967    Note that this particular code snippet should yield an error because
21968    myint is private to C.  */
21969 
21970 void
append_type_to_template_for_access_check(tree templ,tree type_decl,tree scope,location_t location)21971 append_type_to_template_for_access_check (tree templ,
21972                                           tree type_decl,
21973 					  tree scope,
21974 					  location_t location)
21975 {
21976   qualified_typedef_usage_t *iter;
21977   unsigned i;
21978 
21979   gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
21980 
21981   /* Make sure we don't append the type to the template twice.  */
21982   FOR_EACH_VEC_SAFE_ELT (get_types_needing_access_check (templ), i, iter)
21983     if (iter->typedef_decl == type_decl && scope == iter->context)
21984       return;
21985 
21986   append_type_to_template_for_access_check_1 (templ, type_decl,
21987 					      scope, location);
21988 }
21989 
21990 /* Convert the generic type parameters in PARM that match the types given in the
21991    range [START_IDX, END_IDX) from the current_template_parms into generic type
21992    packs.  */
21993 
21994 tree
convert_generic_types_to_packs(tree parm,int start_idx,int end_idx)21995 convert_generic_types_to_packs (tree parm, int start_idx, int end_idx)
21996 {
21997   tree current = current_template_parms;
21998   int depth = TMPL_PARMS_DEPTH (current);
21999   current = INNERMOST_TEMPLATE_PARMS (current);
22000   tree replacement = make_tree_vec (TREE_VEC_LENGTH (current));
22001 
22002   for (int i = 0; i < start_idx; ++i)
22003     TREE_VEC_ELT (replacement, i)
22004       = TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (current, i)));
22005 
22006   for (int i = start_idx; i < end_idx; ++i)
22007     {
22008       /* Create a distinct parameter pack type from the current parm and add it
22009 	 to the replacement args to tsubst below into the generic function
22010 	 parameter.  */
22011 
22012       tree o = TREE_TYPE (TREE_VALUE
22013 			  (TREE_VEC_ELT (current, i)));
22014       tree t = copy_type (o);
22015       TEMPLATE_TYPE_PARM_INDEX (t)
22016 	= reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (o),
22017 				      o, 0, 0, tf_none);
22018       TREE_TYPE (TEMPLATE_TYPE_DECL (t)) = t;
22019       TYPE_STUB_DECL (t) = TYPE_NAME (t) = TEMPLATE_TYPE_DECL (t);
22020       TYPE_MAIN_VARIANT (t) = t;
22021       TEMPLATE_TYPE_PARAMETER_PACK (t) = true;
22022       TYPE_CANONICAL (t) = canonical_type_parameter (t);
22023       TREE_VEC_ELT (replacement, i) = t;
22024       TREE_VALUE (TREE_VEC_ELT (current, i)) = TREE_CHAIN (t);
22025     }
22026 
22027   for (int i = end_idx, e = TREE_VEC_LENGTH (current); i < e; ++i)
22028     TREE_VEC_ELT (replacement, i)
22029       = TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (current, i)));
22030 
22031   /* If there are more levels then build up the replacement with the outer
22032      template parms.  */
22033   if (depth > 1)
22034     replacement = add_to_template_args (template_parms_to_args
22035 					(TREE_CHAIN (current_template_parms)),
22036 					replacement);
22037 
22038   return tsubst (parm, replacement, tf_none, NULL_TREE);
22039 }
22040 
22041 
22042 /* Set up the hash tables for template instantiations.  */
22043 
22044 void
init_template_processing(void)22045 init_template_processing (void)
22046 {
22047   decl_specializations = htab_create_ggc (37,
22048 					  hash_specialization,
22049 					  eq_specializations,
22050 					  ggc_free);
22051   type_specializations = htab_create_ggc (37,
22052 					  hash_specialization,
22053 					  eq_specializations,
22054 					  ggc_free);
22055 }
22056 
22057 /* Print stats about the template hash tables for -fstats.  */
22058 
22059 void
print_template_statistics(void)22060 print_template_statistics (void)
22061 {
22062   fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
22063 	   "%f collisions\n", (long) htab_size (decl_specializations),
22064 	   (long) htab_elements (decl_specializations),
22065 	   htab_collisions (decl_specializations));
22066   fprintf (stderr, "type_specializations: size %ld, %ld elements, "
22067 	   "%f collisions\n", (long) htab_size (type_specializations),
22068 	   (long) htab_elements (type_specializations),
22069 	   htab_collisions (type_specializations));
22070 }
22071 
22072 #include "gt-cp-pt.h"
22073